LCOV - code coverage report
Current view: top level - src/frontend/SageIII - Cxx_Grammar.h (source / functions) Hit Total Coverage
Test: ROSE Lines: 999 5712 17.5 %
Date: 2022-12-08 13:48:47 Functions: 351 2831 12.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // MACHINE GENERATED HEADER FILE --- DO NOT MODIFY! 
       2             : 
       3             : 
       4             : //! AST implementation generated by ROSETTA 
       5             : //  (in many this is an object oriented IR based upon Sage II's implementation (Gannon et. al.). 
       6             : 
       7             : 
       8             : #ifndef Cxx_Grammar_H 
       9             : #define Cxx_Grammar_H 
      10             : 
      11             : 
      12             : //! Variants used to identify elements of the grammar used in ROSE 
      13             : /*! Each element is assigned a unique value defined by this enumerated type 
      14             :     the values are used to generate the casts from one type toanother were permitted. 
      15             :     This is a technique borrowed from the design of SAGE II. 
      16             : */ 
      17             : enum Cxx_GrammarVariants 
      18             :    { 
      19             : 
      20             :      NameTag = 263, 
      21             :      SymbolTableTag = 547, 
      22             :      PragmaTag = 475, 
      23             :      ModifierNodesTag = 257, 
      24             :      ConstVolatileModifierTag = 79, 
      25             :      StorageModifierTag = 537, 
      26             :      AccessModifierTag = 1, 
      27             :      FunctionModifierTag = 165, 
      28             :      UPC_AccessModifierTag = 631, 
      29             :      LinkageModifierTag = 232, 
      30             :      SpecialFunctionModifierTag = 530, 
      31             :      TypeModifierTag = 605, 
      32             :      ElaboratedTypeModifierTag = 113, 
      33             :      BaseClassModifierTag = 30, 
      34             :      DeclarationModifierTag = 89, 
      35             :      StructureModifierTag = 541, 
      36             :      OPENCL_ACCESS_MODE = 459, 
      37             :      ModifierTag = 256, 
      38             :      _File_InfoTag = 682, 
      39             :      SourceFileTag = 520, 
      40             :      UnknownFileTag = 637, 
      41             :      FileTag = 144, 
      42             :      FileListTag = 145, 
      43             :      DirectoryTag = 105, 
      44             :      DirectoryListTag = 106, 
      45             :      ProjectTag = 480, 
      46             :      OptionsTag = 461, 
      47             :      Unparse_InfoTag = 639, 
      48             :      IncludeFileTag = 199, 
      49             :      FuncDecl_attrTag = 160, 
      50             :      ClassDecl_attrTag = 54, 
      51             :      T_TYPEDEF_SEQ = 628, 
      52             :      T_FUNCTION_PARAMETER_TYPE_LIST = 168, 
      53             :      TemplateParameterTag = 571, 
      54             :      TemplateArgumentTag = 548, 
      55             :      TemplateParameterListTag = 573, 
      56             :      TemplateArgumentListTag = 549, 
      57             :      BitAttributeTag = 36, 
      58             :      AttributeTag = 23, 
      59             :      ExpBaseClassTag = 29, 
      60             :      NonrealBaseClassTag = 284, 
      61             :      BaseClassTag = 28, 
      62             :      UndirectedGraphEdgeTag = 635, 
      63             :      DirectedGraphEdgeTag = 103, 
      64             :      GraphNodeTag = 180, 
      65             :      GraphEdgeTag = 178, 
      66             :      StringKeyedBidirectionalGraphTag = 539, 
      67             :      IntKeyedBidirectionalGraphTag = 204, 
      68             :      BidirectionalGraphTag = 32, 
      69             :      IncidenceDirectedGraphTag = 196, 
      70             :      IncidenceUndirectedGraphTag = 197, 
      71             :      GraphTag = 177, 
      72             :      GraphNodeListTag = 181, 
      73             :      GraphEdgeListTag = 179, 
      74             :      QualifiedNameTag = 484, 
      75             :      TEMP_Name_Group = 264, 
      76             :      TEMP_DimensionObject = 101, 
      77             :      TEMP_DataStatementGroup = 84, 
      78             :      TEMP_DataStatementObject = 85, 
      79             :      TEMP_DataStatementValue = 86, 
      80             :      TEMP_FormatItem = 154, 
      81             :      TEMP_FormatItemList = 155, 
      82             :      TYPE_TABLE = 174, 
      83             :      HeaderFileReportTag = 210, 
      84             :      SupportTag = 544, 
      85             :      T_UNKNOWN = 618, 
      86             :      T_CHAR = 585, 
      87             :      T_SIGNED_CHAR = 612, 
      88             :      T_UNSIGNED_CHAR = 620, 
      89             :      T_SHORT = 610, 
      90             :      T_SIGNED_SHORT = 616, 
      91             :      T_UNSIGNED_SHORT = 624, 
      92             :      T_INT = 601, 
      93             :      T_SIGNED_INT = 613, 
      94             :      T_UNSIGNED_INT = 621, 
      95             :      T_LONG = 602, 
      96             :      T_SIGNED_LONG = 614, 
      97             :      T_UNSIGNED_LONG = 622, 
      98             :      T_VOID = 625, 
      99             :      T_GLOBAL_VOID = 598, 
     100             :      T_WCHAR = 626, 
     101             :      T_FLOAT = 595, 
     102             :      T_DOUBLE = 592, 
     103             :      T_LONG_LONG = 604, 
     104             :      T_SIGNED_LONG_LONG = 615, 
     105             :      T_UNSIGNED_LONG_LONG = 623, 
     106             :      T_LONG_DOUBLE = 603, 
     107             :      T_FLOAT80 = 597, 
     108             :      T_FLOAT128 = 596, 
     109             :      T_STRING = 617, 
     110             :      T_BOOL = 584, 
     111             :      T_FIXED = 594, 
     112             :      T_MATRIX = 606, 
     113             :      T_TUPLE = 607, 
     114             :      T_NULLPTR = 608, 
     115             :      T_COMPLEX = 588, 
     116             :      T_IMAGINARY = 600, 
     117             :      T_DEFAULT = 589, 
     118             :      T_MEMBER_POINTER = 472, 
     119             :      T_REFERENCE = 491, 
     120             :      T_RVALUE_REFERENCE = 498, 
     121             :      T_DECLTYPE = 92, 
     122             :      T_TYPEOF_TYPE = 609, 
     123             :      T_CAFTEAM = 683, 
     124             :      T_UNSIGNED_128BIT_INTEGER = 619, 
     125             :      T_SIGNED_128BIT_INTEGER = 611, 
     126             :      T_LABEL = 591, 
     127             :      T_TEMPLATE = 575, 
     128             :      T_ENUM = 132, 
     129             :      T_TYPEDEF = 630, 
     130             :      T_NONREAL = 283, 
     131             :      T_AUTO = 25, 
     132             :      T_MODIFIER = 258, 
     133             :      T_PARTIAL_FUNCTION_MODIFIER = 464, 
     134             :      T_ARRAY = 11, 
     135             :      T_ELLIPSE = 593, 
     136             :      T_CRAY_POINTER = 687, 
     137             :      T_PARTIAL_FUNCTION = 465, 
     138             :      T_MEMBERFUNCTION = 248, 
     139             :      T_FUNCTION = 171, 
     140             :      T_POINTER = 473, 
     141             :      T_CLASS = 59, 
     142             :      T_NAME = 265, 
     143             :      T_QUALIFIED_NAME = 485, 
     144             :      T_CHAR16 = 586, 
     145             :      T_CHAR32 = 587, 
     146             :      TypeTag = 583, 
     147             :      FOR_STMT = 153, 
     148             :      FOR_INIT_STMT = 152, 
     149             :      RANGE_BASED_FOR_STMT = 487, 
     150             :      CATCH_STATEMENT_SEQ = 49, 
     151             :      FUNCTION_PARAMETER_LIST = 166, 
     152             :      CTOR_INITIALIZER_LIST = 83, 
     153             :      BASIC_BLOCK_STMT = 31, 
     154             :      GLOBAL_STMT = 175, 
     155             :      IF_STMT = 188, 
     156             :      WHILE_STMT = 678, 
     157             :      DO_WHILE_STMT = 109, 
     158             :      SWITCH_STMT = 545, 
     159             :      CATCH_STMT = 48, 
     160             :      FUNCTION_PARAMETER_SCOPE = 164, 
     161             :      DECLARATION_SCOPE = 90, 
     162             :      VAR_DEFN_STMT = 668, 
     163             :      STMT_DECL_STMT = 533, 
     164             :      ENUM_DECL_STMT = 129, 
     165             :      ASM_STMT = 15, 
     166             :      FUNC_TBL_STMT = 173, 
     167             :      EXPR_STMT = 141, 
     168             :      LABEL_STMT = 221, 
     169             :      CASE_STMT = 46, 
     170             :      TRY_STMT = 581, 
     171             :      DEFAULT_STMT = 93, 
     172             :      BREAK_STMT = 43, 
     173             :      CONTINUE_STMT = 82, 
     174             :      RETURN_STMT = 494, 
     175             :      GOTO_STMT = 176, 
     176             :      SPAWN_STMT = 522, 
     177             :      TEMPLATE_TYPEDEF_DECL_STMT = 559, 
     178             :      TEMPLATE_INST_TYPEDEF_DECL_STMT = 570, 
     179             :      TYPEDEF_STMT = 627, 
     180             :      NULL_STMT = 287, 
     181             :      VARIANT_STMT = 671, 
     182             :      PRAGMA_DECL = 476, 
     183             :      TEMPLATE_CLASS_DECL_STMT = 551, 
     184             :      TEMPLATE_MEMBER_FUNCTION_DECL_STMT = 556, 
     185             :      TEMPLATE_FUNCTION_DECL_STMT = 553, 
     186             :      TEMPLATE_VARIABLE_DECL_STMT = 561, 
     187             :      TEMPLATE_DECL_STMT = 550, 
     188             :      VAR_DECL_STMT = 667, 
     189             :      TEMPLATE_INST_DECL_STMT = 565, 
     190             :      TEMPLATE_INST_DEFN_STMT = 566, 
     191             :      TEMPLATE_INST_FUNCTION_DECL_STMT = 568, 
     192             :      TEMPLATE_INST_MEMBER_FUNCTION_DECL_STMT = 569, 
     193             :      NONREAL_DECL = 280, 
     194             :      WITH_STATEMENT = 675, 
     195             :      PASS_STATEMENT = 466, 
     196             :      ASSERT_STMT = 16, 
     197             :      EXEC_STMT = 137, 
     198             :      PROGRAM_HEADER_STMT = 479, 
     199             :      PROCEDURE_HEADER_STMT = 478, 
     200             :      ENTRY_STMT = 128, 
     201             :      FORTRAN_NONBLOCKED_DO = 159, 
     202             :      INTERFACE_STATEMENT = 211, 
     203             :      PARAMETER_STATEMENT = 463, 
     204             :      COMMON_BLOCK = 66, 
     205             :      MODULE_STATEMENT = 259, 
     206             :      USE_STATEMENT = 655, 
     207             :      PROCESS_CONTROL_STATEMENT = 529, 
     208             :      PRINT_STATEMENT = 477, 
     209             :      READ_STATEMENT = 488, 
     210             :      WRITE_STATEMENT = 679, 
     211             :      OPEN_STATEMENT = 460, 
     212             :      CLOSE_STATEMENT = 63, 
     213             :      INQUIRE_STATEMENT = 203, 
     214             :      FLUSH_STATEMENT = 150, 
     215             :      BACKSPACE_STATEMENT = 27, 
     216             :      REWIND_STATEMENT = 495, 
     217             :      ENDFILE_STATEMENT = 126, 
     218             :      WAIT_STATEMENT = 673, 
     219             :      WITHTEAM_STMT = 684, 
     220             :      FORMAT_STATEMENT = 156, 
     221             :      FORTRAN_DO = 157, 
     222             :      FOR_ALL_STMT = 151, 
     223             :      IO_STATEMENT = 185, 
     224             :      SYNC_ALL_STATEMENT = 523, 
     225             :      SYNC_IMAGES_STATEMENT = 524, 
     226             :      SYNC_MEMORY_STATEMENT = 525, 
     227             :      SYNC_TEAM_STATEMENT = 526, 
     228             :      LOCK_STATEMENT = 527, 
     229             :      UNLOCK_STATEMENT = 528, 
     230             :      IMAGE_CONTROL_STATEMENT = 191, 
     231             :      UPC_NOTIFY_STMT = 652, 
     232             :      UPC_WAIT_STMT = 654, 
     233             :      UPC_BARRIER_STMT = 645, 
     234             :      UPC_FENCE_STMT = 648, 
     235             :      UPC_FORALL_STMT = 649, 
     236             :      UPIR_SPMD_STMT = 306, 
     237             :      OMP_LOOP_STMT = 314, 
     238             :      OMP_SCAN_STMT = 315, 
     239             :      OMP_TASKLOOP_STMT = 316, 
     240             :      OMP_TASKGROUP_STMT = 311, 
     241             :      OMP_DEPOBJ_STMT = 312, 
     242             :      OMP_TEAMS_STMT = 307, 
     243             :      OMP_CANCELLATION_POINT_STMT = 308, 
     244             :      OMP_DECLARE_MAPPER_STMT = 309, 
     245             :      OMP_CANCEL_STMT = 310, 
     246             :      OMP_DISTRIBUTE_STMT = 313, 
     247             :      OMP_METADIRECTIVE_STMT = 303, 
     248             :      OMP_SINGLE_STMT = 321, 
     249             :      OMP_TASK_STMT = 322, 
     250             :      OMP_TARGET_ENTER_DATA_STMT = 317, 
     251             :      OMP_TARGET_EXIT_DATA_STMT = 318, 
     252             :      UPIR_WORKSHARING_STMT = 299, 
     253             :      OMP_FOR_SIMD_STMT = 300, 
     254             :      OMP_DO_STMT = 295, 
     255             :      OMP_SECTIONS_STMT = 320, 
     256             :      OMP_ATOMIC_STMT = 289, 
     257             :      UPIR_TASK_STMT = 326, 
     258             :      OMP_TARGET_DATA_STMT = 327, 
     259             :      OMP_TARGET_PARALLEL_FOR_STMT = 328, 
     260             :      OMP_TARGET_PARALLEL_STMT = 331, 
     261             :      OMP_DISTRIBUTE_SIMD_STMT = 341, 
     262             :      OMP_DISTRIBUTE_PARALLEL_FOR_STMT = 342, 
     263             :      OMP_DISTRIBUTE_PARALLEL_FOR_SIMD_STMT = 343, 
     264             :      OMP_TASKLOOP_SIMD_STMT = 344, 
     265             :      OMP_TARGET_UPDATE_STMT = 329, 
     266             :      OMP_TARGET_PARALLEL_FOR_SIMD_STMT = 332, 
     267             :      OMP_TARGET_PARALLEL_LOOP_STMT = 333, 
     268             :      OMP_TARGET_SIMD_STMT = 334, 
     269             :      OMP_TARGET_TEAMS_STMT = 335, 
     270             :      OMP_TARGET_TEAMS_DISTRIBUTE_STMT = 336, 
     271             :      OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_STMT = 337, 
     272             :      OMP_TARGET_TEAMS_LOOP_STMT = 338, 
     273             :      OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_STMT = 339, 
     274             :      OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_STMT = 340, 
     275             :      OMP_MASTER_TASKLOOP_SIMD_STMT = 345, 
     276             :      OMP_PARALLEL_MASTER_TASKLOOP_STMT = 346, 
     277             :      OMP_PARALLEL_MASTER_TASKLOOP_SIMD_STMT = 347, 
     278             :      OMP_TEAMS_DISTRIBUTE_STMT = 348, 
     279             :      OMP_TEAMS_DISTRIBUTE_SIMD_STMT = 349, 
     280             :      OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_STMT = 350, 
     281             :      OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_STMT = 351, 
     282             :      OMP_TEAMS_LOOP_STMT = 352, 
     283             :      OMP_PARALLEL_MASTER_STMT = 354, 
     284             :      OMP_MASTER_TASKLOOP_STMT = 355, 
     285             :      OMP_PARALLEL_LOOP_STMT = 353, 
     286             :      OMP_UNROLL_STMT = 356, 
     287             :      OMP_TILE_STMT = 357, 
     288             :      UPIR_SIMD_STMT = 358, 
     289             :      OMP_CRITICAL_STMT = 291, 
     290             :      OMP_ORDERED_STMT = 304, 
     291             :      UPIR_LOOP_STMT = 360, 
     292             :      UPIR_LOOP_PARALLEL_STMT = 361, 
     293             :      UPIR_SYNC_STMT = 362, 
     294             :      UPIR_FIELDBODY_STMT = 292, 
     295             :      OMP_MASTER_STMT = 301, 
     296             :      OMP_SECTION_STMT = 319, 
     297             :      OMP_WORKSHARE_STMT = 325, 
     298             :      OMP_FLUSH_STMT = 296, 
     299             :      OMP_ALLOCATE_STMT = 297, 
     300             :      OMP_ORDERED_DEPEND_STMT = 305, 
     301             :      UPIR_BODY_STMT = 293, 
     302             :      UPIR_FIELD_STMT = 294, 
     303             :      TEMP_Block_Data_Statement = 41, 
     304             :      TEMP_Implicit_Statement = 193, 
     305             :      TEMP_Statement_Function_Statement = 535, 
     306             :      TEMP_Where_Statement = 677, 
     307             :      TEMP_Nullify_Statement = 288, 
     308             :      TEMP_Equivalence_Statement = 135, 
     309             :      TEMP_Derived_Type_Statement = 97, 
     310             :      TEMP_Attribute_Specification_Statement = 24, 
     311             :      TEMP_Allocate_Statement = 7, 
     312             :      TEMP_Deallocate_Statement = 88, 
     313             :      TEMP_Contains_Statement = 81, 
     314             :      TEMP_Sequence_Statement = 501, 
     315             :      TEMP_Else_Where_Statement = 122, 
     316             :      TEMP_Arithmetic_If_Statement = 10, 
     317             :      TEMP_Assign_Statement = 19, 
     318             :      TEMP_Computed_Goto_Statement = 75, 
     319             :      TEMP_Assigned_Goto_Statement = 20, 
     320             :      TEMP_Namelist_Statement = 266, 
     321             :      TEMP_Import_Statement = 195, 
     322             :      TEMP_Associate_Statement = 21, 
     323             :      TEMP_Fortran_Include_Line = 158, 
     324             :      NAMESPACE_DECLARATION_STMT = 268, 
     325             :      NAMESPACE_ALIAS_DECLARATION_STMT = 267, 
     326             :      NAMESPACE_DEFINITION_STMT = 269, 
     327             :      USING_DECLARATION_STMT = 658, 
     328             :      USING_DIRECTIVE_STMT = 659, 
     329             :      TEMPLATE_INST_DIRECTIVE_STMT = 567, 
     330             :      STATIC_ASSERTION_DECLARATION = 532, 
     331             :      TEMPLATE_CLASS_DEF_STMT = 563, 
     332             :      TEMPLATE_FUNCTION_DEF_STMT = 564, 
     333             :      CLASS_DECL_STMT = 55, 
     334             :      CLASS_DEFN_STMT = 56, 
     335             :      FUNC_DEFN_STMT = 163, 
     336             :      SCOPE_STMT = 500, 
     337             :      MFUNC_DECL_STMT = 245, 
     338             :      FUNC_DECL_STMT = 162, 
     339             :      INCLUDE_DIRECTIVE_STMT = 198, 
     340             :      DEFINE_DIRECTIVE_STMT = 95, 
     341             :      UNDEF_DIRECTIVE_STMT = 634, 
     342             :      IFDEF_DIRECTIVE_STMT = 189, 
     343             :      IFNDEF_DIRECTIVE_STMT = 190, 
     344             :      IF_DIRECTIVE_STMT = 187, 
     345             :      DEAD_IF_DIRECTIVE_STMT = 87, 
     346             :      ELSE_DIRECTIVE_STMT = 121, 
     347             :      ELSEIF_DIRECTIVE_STMT = 123, 
     348             :      ENDIF_DIRECTIVE_STMT = 127, 
     349             :      LINE_DIRECTIVE_STMT = 230, 
     350             :      WARNING_DIRECTIVE_STMT = 674, 
     351             :      ERROR_DIRECTIVE_STMT = 136, 
     352             :      EMPTY_DIRECTIVE_STMT = 125, 
     353             :      INCLUDE_NEXT_DIRECTIVE_STMT = 200, 
     354             :      IDENT_DIRECTIVE_STMT = 186, 
     355             :      LINEMARKER_DIRECTIVE_STMT = 231, 
     356             :      CPP_DIRECTIVE_STMT = 45, 
     357             :      C_LINKAGE_START_STMT = 62, 
     358             :      C_LINKAGE_END_STMT = 61, 
     359             :      C_LINKAGE_DECLARATION_STMT = 60, 
     360             :      OMP_DECLARE_SIMD_STMT = 298, 
     361             :      OMP_BARRIER_STMT = 290, 
     362             :      OMP_TASKYIELD_STMT = 302, 
     363             :      OMP_REQUIRES_STMT = 330, 
     364             :      OMP_TASKWAIT_STMT = 323, 
     365             :      OMP_THREADPRIVATE_STMT = 324, 
     366             :      MS_ATTRIBUTE_DECL_STMT = 250, 
     367             :      EMPTY_DECLARATION_STMT = 124, 
     368             :      DECL_STMT = 91, 
     369             :      UpirBaseStatementTag = 359, 
     370             :      StatementTag = 531, 
     371             :      VAR_REF = 666, 
     372             :      NONREAL_REF = 281, 
     373             :      COMPOUND_LITERAL = 74, 
     374             :      LABEL_REF = 220, 
     375             :      CLASSNAME_REF = 57, 
     376             :      FUNCTION_REF = 169, 
     377             :      MEMBER_FUNCTION_REF = 246, 
     378             :      TEMPLATE_FUNCTION_REF = 554, 
     379             :      TEMPLATE_MEMBER_FUNCTION_REF = 557, 
     380             :      SIZEOF_OP = 518, 
     381             :      ALIGNOF_OP = 519, 
     382             :      NOEXCEPT_OP = 276, 
     383             :      TYPE_EXPRESSION = 590, 
     384             :      LAMBDA_EXP = 225, 
     385             :      UPC_LOCAL_SIZEOF_EXPR = 650, 
     386             :      UPC_BLOCK_SIZEOF_EXPR = 646, 
     387             :      UPC_ELEM_SIZEOF_EXPR = 647, 
     388             :      VA_START_OP = 665, 
     389             :      VA_START_ONE_OPERAND_OP = 664, 
     390             :      VA_OP = 663, 
     391             :      VA_END_OP = 662, 
     392             :      VA_COPY_OP = 661, 
     393             :      TYPEID_OP = 599, 
     394             :      EXPR_CONDITIONAL = 77, 
     395             :      NEW_OP = 274, 
     396             :      DELETE_OP = 96, 
     397             :      THIS_NODE = 576, 
     398             :      SUPER_NODE = 578, 
     399             :      CLASS_NODE = 688, 
     400             :      TYPE_REF = 490, 
     401             :      AGGREGATE_INIT = 5, 
     402             :      COMPOUND_INIT = 73, 
     403             :      CONSTRUCTOR_INIT = 80, 
     404             :      ASSIGN_INIT = 17, 
     405             :      BRACED_INIT = 44, 
     406             :      EXPRESSION_ROOT = 143, 
     407             :      UNARY_MINUS_OP = 253, 
     408             :      UNARY_ADD_OP = 632, 
     409             :      NOT_OP = 278, 
     410             :      DEREF_OP = 471, 
     411             :      ADDRESS_OP = 4, 
     412             :      MINUSMINUS_OP = 252, 
     413             :      PLUSPLUS_OP = 468, 
     414             :      BIT_COMPLEMENT_OP = 37, 
     415             :      REAL_PART_OP = 489, 
     416             :      IMAG_PART_OP = 192, 
     417             :      CONJUGATE_OP = 78, 
     418             :      CAST_OP = 47, 
     419             :      THROW_OP = 579, 
     420             :      POINTST_OP = 12, 
     421             :      RECORD_REF = 110, 
     422             :      DOTSTAR_OP = 111, 
     423             :      ARROWSTAR_OP = 13, 
     424             :      EQ_OP = 134, 
     425             :      LT_OP = 229, 
     426             :      GT_OP = 183, 
     427             :      NE_OP = 277, 
     428             :      LE_OP = 228, 
     429             :      GE_OP = 182, 
     430             :      ADD_OP = 3, 
     431             :      SUBT_OP = 543, 
     432             :      MULT_OP = 262, 
     433             :      DIV_OP = 108, 
     434             :      INTEGER_DIV_OP = 206, 
     435             :      MOD_OP = 255, 
     436             :      AND_OP = 9, 
     437             :      OR_OP = 462, 
     438             :      BITXOR_OP = 40, 
     439             :      BITAND_OP = 35, 
     440             :      BITOR_OP = 39, 
     441             :      BITEQV_OP = 38, 
     442             :      COMMA_OP = 65, 
     443             :      LSHIFT_OP = 241, 
     444             :      RSHIFT_OP = 497, 
     445             :      ARRAY_OP = 469, 
     446             :      SCOPE_OP = 499, 
     447             :      ASSIGN_OP = 18, 
     448             :      PLUS_ASSIGN_OP = 467, 
     449             :      MINUS_ASSIGN_OP = 251, 
     450             :      AND_ASSIGN_OP = 8, 
     451             :      IOR_ASSIGN_OP = 216, 
     452             :      MULT_ASSIGN_OP = 261, 
     453             :      DIV_ASSIGN_OP = 107, 
     454             :      MOD_ASSIGN_OP = 254, 
     455             :      XOR_ASSIGN_OP = 680, 
     456             :      LSHIFT_ASSIGN_OP = 240, 
     457             :      RSHIFT_ASSIGN_OP = 496, 
     458             :      IDIV_ASSIGN_OP = 207, 
     459             :      EXP_ASSIGN_OP = 139, 
     460             :      CONCATENATION_OP = 76, 
     461             :      NARY_COMPARISON_OP = 273, 
     462             :      NARY_BOOLEAN_OP = 272, 
     463             :      BOOL_VAL = 42, 
     464             :      STRING_VAL = 540, 
     465             :      SHORT_VAL = 503, 
     466             :      CHAR_VAL = 50, 
     467             :      UNSIGNED_CHAR_VAL = 640, 
     468             :      WCHAR_VAL = 676, 
     469             :      CHAR16_VAL = 51, 
     470             :      CHAR32_VAL = 52, 
     471             :      UNSIGNED_SHORT_VAL = 644, 
     472             :      INT_VAL = 205, 
     473             :      ENUM_VAL = 133, 
     474             :      UNSIGNED_INT_VAL = 641, 
     475             :      LONG_INT_VAL = 238, 
     476             :      LONG_LONG_INT_VAL = 239, 
     477             :      UNSIGNED_LONG_LONG_INT_VAL = 642, 
     478             :      UNSIGNED_LONG_INT_VAL = 643, 
     479             :      FLOAT_VAL = 146, 
     480             :      DOUBLE_VAL = 112, 
     481             :      LONG_DOUBLE_VAL = 237, 
     482             :      FLOAT_80_VAL = 148, 
     483             :      FLOAT_128_VAL = 147, 
     484             :      NULLPTR_VAL = 286, 
     485             :      VOID_VAL = 672, 
     486             :      FUNCTION_PARAMETER_REF_EXP = 167, 
     487             :      TEMPLATE_PARAMETER_VAL = 572, 
     488             :      UPC_THREADS = 653, 
     489             :      UPC_MYTHREAD = 651, 
     490             :      COMPLEX_VAL = 69, 
     491             :      NULL_EXPR = 285, 
     492             :      VARIANT_EXPR = 670, 
     493             :      STMT_EXPR = 534, 
     494             :      ASM_OP = 14, 
     495             :      EXEC_CONF = 218, 
     496             :      KERN_CALL = 219, 
     497             :      LAMBDA_REF_EXP = 226, 
     498             :      TUPLE_EXP = 582, 
     499             :      LIST_EXP = 234, 
     500             :      DICT_EXP = 100, 
     501             :      KEY_DATUM_PAIR = 217, 
     502             :      COMPREHENSION = 70, 
     503             :      LIST_COMPREHENSION = 233, 
     504             :      SET_COMPREHENSION = 502, 
     505             :      DICTIONARY_COMPREHENSION = 99, 
     506             :      MEMBERSHIP_OP = 249, 
     507             :      NON_MEMBERSHIP_OP = 279, 
     508             :      IS_OP = 214, 
     509             :      IS_NOT_OP = 215, 
     510             :      STR_CONV = 538, 
     511             :      YIELD_EXP = 681, 
     512             :      FOLD_EXPR = 149, 
     513             :      CHOOSE_EXPR = 53, 
     514             :      AWAIT_EXPR = 26, 
     515             :      SPACESHIP_OP = 521, 
     516             :      SUBSCRIPT_EXPR = 542, 
     517             :      TEMP_ColonShapeExp = 64, 
     518             :      TEMP_AsteriskShapeExp = 22, 
     519             :      IO_ITEM_EXPR = 184, 
     520             :      IMPLIED_DO = 194, 
     521             :      EXPONENTIATION_OP = 138, 
     522             :      TEMP_UnknownArrayOrFunctionReference = 636, 
     523             :      ACTUAL_ARGUMENT_EXPRESSION = 2, 
     524             :      USER_DEFINED_BINARY_OP = 656, 
     525             :      POINTER_ASSIGN_OP = 470, 
     526             :      COARRAY_REF_EXPR = 685, 
     527             :      DESIGNATED_INITIALIZER = 98, 
     528             :      MATRIX_EXP = 243, 
     529             :      RANGE_EXP = 486, 
     530             :      MAGIC_COLON_EXP = 242, 
     531             :      ELEMENT_MULT_OP = 118, 
     532             :      POWER_OP = 474, 
     533             :      ELEMENT_POWER_OP = 119, 
     534             :      ELEMENT_DIVIDE_OP = 116, 
     535             :      LEFT_DIVIDE_OP = 227, 
     536             :      ELEMENT_LEFT_DIVIDE_OP = 117, 
     537             :      ELEMENT_ADD_OP = 115, 
     538             :      ELEMENT_SUBTRACT_OP = 120, 
     539             :      MATRIX_TRANSPOSE_OP = 244, 
     540             :      ELEMENT_WISE_OP = 114, 
     541             :      EXPR_INIT = 202, 
     542             :      SIMD_LOAD = 510, 
     543             :      SIMD_BROADCAST = 511, 
     544             :      SIMD_STORE = 512, 
     545             :      SIMD_PARTIAL_STORE = 513, 
     546             :      SIMD_SCALAR_STORE = 514, 
     547             :      SIMD_GATHER = 515, 
     548             :      SIMD_EXPLICIT_GATHER = 516, 
     549             :      SIMD_SCATTER = 517, 
     550             :      SIMD_ADD_OP = 505, 
     551             :      SIMD_SUB_OP = 506, 
     552             :      SIMD_MUL_OP = 507, 
     553             :      SIMD_DIV_OP = 508, 
     554             :      SIMD_FMA_OP = 509, 
     555             :      SIMD_BINARY_OP = 504, 
     556             :      USER_DEFINED_UNARY_OP = 657, 
     557             :      PSEUDO_DESTRUCTOR_REF = 481, 
     558             :      UNARY_EXPRESSION = 633, 
     559             :      COMPOUND_ASSIGN_OP = 72, 
     560             :      BINARY_EXPRESSION = 34, 
     561             :      NARY_EXPRESSION = 271, 
     562             :      ValueExpTag = 660, 
     563             :      EXPR_LIST = 140, 
     564             :      FUNC_CALL = 161, 
     565             :      CALL_EXPRESSION = 686, 
     566             :      TYPE_TRAIT_BUILTIN_OPERATOR = 577, 
     567             :      ExpressionTag = 142, 
     568             :      TEMPLATE_VARIABLE_NAME = 562, 
     569             :      VARIABLE_NAME = 669, 
     570             :      FUNCTYPE_NAME = 172, 
     571             :      TEMPLATE_CLASS_NAME = 552, 
     572             :      CLASS_NAME = 58, 
     573             :      TEMPLATE_NAME = 574, 
     574             :      ENUM_NAME = 131, 
     575             :      FIELD_NAME = 130, 
     576             :      TEMPLATE_TYPEDEF_NAME = 560, 
     577             :      TYPEDEF_NAME = 629, 
     578             :      TEMPLATE_FUNC_NAME = 555, 
     579             :      TEMPLATE_MEMBER_FUNC_NAME = 558, 
     580             :      LABEL_NAME = 222, 
     581             :      DEFAULT_NAME = 94, 
     582             :      NAMESPACE_NAME = 270, 
     583             :      INTRINSIC_SYMBOL = 213, 
     584             :      MODULE_SYMBOL = 260, 
     585             :      INTERFACE_SYMBOL = 212, 
     586             :      COMMON_SYMBOL = 68, 
     587             :      RENAME_SYMBOL = 493, 
     588             :      MEMBER_FUNC_NAME = 247, 
     589             :      FUNCTION_NAME = 170, 
     590             :      ALIAS_SYMBOL = 6, 
     591             :      NONREAL_SYMBOL = 282, 
     592             :      SymbolTag = 546, 
     593             :      TEMP_CommonBlockObject = 67, 
     594             :      InitializedNameTag = 201, 
     595             :      LambdaCaptureTag = 223, 
     596             :      LambdaCaptureListTag = 224, 
     597             :      OmpOrderedClauseTag = 424, 
     598             :      OmpNowaitClauseTag = 385, 
     599             :      OmpNogroupClauseTag = 412, 
     600             :      OmpReadClauseTag = 386, 
     601             :      OmpThreadsClauseTag = 370, 
     602             :      OmpSimdClauseTag = 371, 
     603             :      OmpReverseOffloadClauseTag = 396, 
     604             :      OmpExtImplementationDefinedRequirementClauseTag = 401, 
     605             :      OmpUnifiedAddressClauseTag = 397, 
     606             :      OmpUnifiedSharedMemoryClauseTag = 398, 
     607             :      OmpDynamicAllocatorsClauseTag = 399, 
     608             :      OmpAtomicDefaultMemOrderClauseTag = 400, 
     609             :      OmpWriteClauseTag = 387, 
     610             :      OmpUpdateClauseTag = 388, 
     611             :      OmpDepobjUpdateClauseTag = 389, 
     612             :      OmpDestroyClauseTag = 390, 
     613             :      OmpCaptureClauseTag = 391, 
     614             :      OmpSeqCstClauseTag = 392, 
     615             :      OmpAcqRelClauseTag = 393, 
     616             :      OmpReleaseClauseTag = 394, 
     617             :      OmpAcquireClauseTag = 395, 
     618             :      OmpRelaxedClauseTag = 402, 
     619             :      OmpParallelClauseTag = 403, 
     620             :      OmpSectionsClauseTag = 404, 
     621             :      OmpForClauseTag = 405, 
     622             :      OmpTaskgroupClauseTag = 406, 
     623             :      OmpBeginClauseTag = 372, 
     624             :      OmpEndClauseTag = 377, 
     625             :      OmpUntiedClauseTag = 432, 
     626             :      OmpMergeableClauseTag = 433, 
     627             :      OmpDefaultClauseTag = 376, 
     628             :      OmpAtomicClauseTag = 442, 
     629             :      OmpProcBindClauseTag = 441, 
     630             :      OmpOrderClauseTag = 414, 
     631             :      OmpBindClauseTag = 416, 
     632             :      OmpInbranchClauseTag = 443, 
     633             :      OmpNotinbranchClauseTag = 444, 
     634             :      OmpCollapseClauseTag = 373, 
     635             :      OmpIfClauseTag = 380, 
     636             :      OmpFinalClauseTag = 381, 
     637             :      OmpPriorityClauseTag = 382, 
     638             :      UpirNumUnitsFieldTag = 407, 
     639             :      OmpNumTeamsClauseTag = 408, 
     640             :      OmpGrainsizeClauseTag = 409, 
     641             :      OmpDetachClauseTag = 410, 
     642             :      OmpNumTasksClauseTag = 411, 
     643             :      OmpHintClauseTag = 413, 
     644             :      OmpThreadLimitClauseTag = 423, 
     645             :      OmpNontemporalClauseTag = 417, 
     646             :      OmpInclusiveClauseTag = 418, 
     647             :      OmpExclusiveClauseTag = 419, 
     648             :      OmpIsDevicePtrClauseTag = 420, 
     649             :      OmpUseDevicePtrClauseTag = 421, 
     650             :      OmpUseDeviceAddrClauseTag = 422, 
     651             :      OmpIfDeviceTag = 383, 
     652             :      OmpSafelenTag = 436, 
     653             :      OmpSimdlenTag = 437, 
     654             :      OmpPartialTag = 449, 
     655             :      OmpFullTag = 448, 
     656             :      OmpSizesTag = 450, 
     657             :      UpirBranchFieldTag = 451, 
     658             :      UpirNestedLevelFieldTag = 452, 
     659             :      UpirNestedParentFieldTag = 453, 
     660             :      UpirNestedChildFieldTag = 454, 
     661             :      UpirSyncFieldTag = 455, 
     662             :      UpirDataFieldTag = 456, 
     663             :      UpirTargetFieldTag = 458, 
     664             :      UpirDataItemFieldTag = 457, 
     665             :      OmpExpressionClauseTag = 378, 
     666             :      OmpCopyprivateClauseTag = 375, 
     667             :      OmpPrivateClauseTag = 425, 
     668             :      OmpFirstprivateClauseTag = 379, 
     669             :      OmpSharedClauseTag = 431, 
     670             :      OmpCopyinClauseTag = 374, 
     671             :      OmpLastprivateClauseTag = 384, 
     672             :      OmpReductionClauseTag = 426, 
     673             :      OmpInReductionClauseTag = 427, 
     674             :      OmpTaskReductionClauseTag = 428, 
     675             :      OmpAllocateClauseTag = 364, 
     676             :      OmpDependClauseTag = 445, 
     677             :      OmpToClauseTag = 368, 
     678             :      OmpUsesAllocatorsClauseTag = 366, 
     679             :      OmpFromClauseTag = 369, 
     680             :      OmpAffinityClauseTag = 446, 
     681             :      OmpMapClauseTag = 435, 
     682             :      OmpLinearClauseTag = 438, 
     683             :      OmpUniformClauseTag = 439, 
     684             :      OmpAlignedClauseTag = 440, 
     685             :      OmpVariablesClauseTag = 434, 
     686             :      OmpScheduleClauseTag = 430, 
     687             :      OmpWhenClauseTag = 447, 
     688             :      OmpDistScheduleClauseTag = 415, 
     689             :      OmpDefaultmapClauseTag = 429, 
     690             :      OmpAllocatorClauseTag = 365, 
     691             :      OmpUsesAllocatorsDefinationTag = 367, 
     692             :      OmpClauseTag = 363, 
     693             :      TEMP_Rename_Pair = 492, 
     694             :      TEMP_Interface_Body = 208, 
     695             :      TEMP_Header_File_Body = 209, 
     696             :      LocatedNodeSupportTag = 236, 
     697             :      TOKEN = 580, 
     698             :      LocatedNodeTag = 235, 
     699             :      NodeTag = 275, 
     700             :      Cxx_Grammar_UNKNOWN_GRAMMAR = 690,
     701             :      Cxx_Grammar_LAST_TAG 
     702             :    }; 
     703             : enum VariantT 
     704             : {
     705             : V_SgName = 263,
     706             : V_SgSymbolTable = 547,
     707             : V_SgPragma = 475,
     708             : V_SgModifierNodes = 257,
     709             : V_SgConstVolatileModifier = 79,
     710             : V_SgStorageModifier = 537,
     711             : V_SgAccessModifier = 1,
     712             : V_SgFunctionModifier = 165,
     713             : V_SgUPC_AccessModifier = 631,
     714             : V_SgLinkageModifier = 232,
     715             : V_SgSpecialFunctionModifier = 530,
     716             : V_SgTypeModifier = 605,
     717             : V_SgElaboratedTypeModifier = 113,
     718             : V_SgBaseClassModifier = 30,
     719             : V_SgDeclarationModifier = 89,
     720             : V_SgStructureModifier = 541,
     721             : V_SgOpenclAccessModeModifier = 459,
     722             : V_SgModifier = 256,
     723             : V_Sg_File_Info = 682,
     724             : V_SgSourceFile = 520,
     725             : V_SgUnknownFile = 637,
     726             : V_SgFile = 144,
     727             : V_SgFileList = 145,
     728             : V_SgDirectory = 105,
     729             : V_SgDirectoryList = 106,
     730             : V_SgProject = 480,
     731             : V_SgOptions = 461,
     732             : V_SgUnparse_Info = 639,
     733             : V_SgIncludeFile = 199,
     734             : V_SgFuncDecl_attr = 160,
     735             : V_SgClassDecl_attr = 54,
     736             : V_SgTypedefSeq = 628,
     737             : V_SgFunctionParameterTypeList = 168,
     738             : V_SgTemplateParameter = 571,
     739             : V_SgTemplateArgument = 548,
     740             : V_SgTemplateParameterList = 573,
     741             : V_SgTemplateArgumentList = 549,
     742             : V_SgBitAttribute = 36,
     743             : V_SgAttribute = 23,
     744             : V_SgExpBaseClass = 29,
     745             : V_SgNonrealBaseClass = 284,
     746             : V_SgBaseClass = 28,
     747             : V_SgUndirectedGraphEdge = 635,
     748             : V_SgDirectedGraphEdge = 103,
     749             : V_SgGraphNode = 180,
     750             : V_SgGraphEdge = 178,
     751             : V_SgStringKeyedBidirectionalGraph = 539,
     752             : V_SgIntKeyedBidirectionalGraph = 204,
     753             : V_SgBidirectionalGraph = 32,
     754             : V_SgIncidenceDirectedGraph = 196,
     755             : V_SgIncidenceUndirectedGraph = 197,
     756             : V_SgGraph = 177,
     757             : V_SgGraphNodeList = 181,
     758             : V_SgGraphEdgeList = 179,
     759             : V_SgQualifiedName = 484,
     760             : V_SgNameGroup = 264,
     761             : V_SgDimensionObject = 101,
     762             : V_SgDataStatementGroup = 84,
     763             : V_SgDataStatementObject = 85,
     764             : V_SgDataStatementValue = 86,
     765             : V_SgFormatItem = 154,
     766             : V_SgFormatItemList = 155,
     767             : V_SgTypeTable = 174,
     768             : V_SgHeaderFileReport = 210,
     769             : V_SgSupport = 544,
     770             : V_SgTypeUnknown = 618,
     771             : V_SgTypeChar = 585,
     772             : V_SgTypeSignedChar = 612,
     773             : V_SgTypeUnsignedChar = 620,
     774             : V_SgTypeShort = 610,
     775             : V_SgTypeSignedShort = 616,
     776             : V_SgTypeUnsignedShort = 624,
     777             : V_SgTypeInt = 601,
     778             : V_SgTypeSignedInt = 613,
     779             : V_SgTypeUnsignedInt = 621,
     780             : V_SgTypeLong = 602,
     781             : V_SgTypeSignedLong = 614,
     782             : V_SgTypeUnsignedLong = 622,
     783             : V_SgTypeVoid = 625,
     784             : V_SgTypeGlobalVoid = 598,
     785             : V_SgTypeWchar = 626,
     786             : V_SgTypeFloat = 595,
     787             : V_SgTypeDouble = 592,
     788             : V_SgTypeLongLong = 604,
     789             : V_SgTypeSignedLongLong = 615,
     790             : V_SgTypeUnsignedLongLong = 623,
     791             : V_SgTypeLongDouble = 603,
     792             : V_SgTypeFloat80 = 597,
     793             : V_SgTypeFloat128 = 596,
     794             : V_SgTypeString = 617,
     795             : V_SgTypeBool = 584,
     796             : V_SgTypeFixed = 594,
     797             : V_SgTypeMatrix = 606,
     798             : V_SgTypeTuple = 607,
     799             : V_SgTypeNullptr = 608,
     800             : V_SgTypeComplex = 588,
     801             : V_SgTypeImaginary = 600,
     802             : V_SgTypeDefault = 589,
     803             : V_SgPointerMemberType = 472,
     804             : V_SgReferenceType = 491,
     805             : V_SgRvalueReferenceType = 498,
     806             : V_SgDeclType = 92,
     807             : V_SgTypeOfType = 609,
     808             : V_SgTypeCAFTeam = 683,
     809             : V_SgTypeUnsigned128bitInteger = 619,
     810             : V_SgTypeSigned128bitInteger = 611,
     811             : V_SgTypeLabel = 591,
     812             : V_SgTemplateType = 575,
     813             : V_SgEnumType = 132,
     814             : V_SgTypedefType = 630,
     815             : V_SgNonrealType = 283,
     816             : V_SgAutoType = 25,
     817             : V_SgModifierType = 258,
     818             : V_SgPartialFunctionModifierType = 464,
     819             : V_SgArrayType = 11,
     820             : V_SgTypeEllipse = 593,
     821             : V_SgTypeCrayPointer = 687,
     822             : V_SgPartialFunctionType = 465,
     823             : V_SgMemberFunctionType = 248,
     824             : V_SgFunctionType = 171,
     825             : V_SgPointerType = 473,
     826             : V_SgClassType = 59,
     827             : V_SgNamedType = 265,
     828             : V_SgQualifiedNameType = 485,
     829             : V_SgTypeChar16 = 586,
     830             : V_SgTypeChar32 = 587,
     831             : V_SgType = 583,
     832             : V_SgForStatement = 153,
     833             : V_SgForInitStatement = 152,
     834             : V_SgRangeBasedForStatement = 487,
     835             : V_SgCatchStatementSeq = 49,
     836             : V_SgFunctionParameterList = 166,
     837             : V_SgCtorInitializerList = 83,
     838             : V_SgBasicBlock = 31,
     839             : V_SgGlobal = 175,
     840             : V_SgIfStmt = 188,
     841             : V_SgWhileStmt = 678,
     842             : V_SgDoWhileStmt = 109,
     843             : V_SgSwitchStatement = 545,
     844             : V_SgCatchOptionStmt = 48,
     845             : V_SgFunctionParameterScope = 164,
     846             : V_SgDeclarationScope = 90,
     847             : V_SgVariableDefinition = 668,
     848             : V_SgStmtDeclarationStatement = 533,
     849             : V_SgEnumDeclaration = 129,
     850             : V_SgAsmStmt = 15,
     851             : V_SgFunctionTypeTable = 173,
     852             : V_SgExprStatement = 141,
     853             : V_SgLabelStatement = 221,
     854             : V_SgCaseOptionStmt = 46,
     855             : V_SgTryStmt = 581,
     856             : V_SgDefaultOptionStmt = 93,
     857             : V_SgBreakStmt = 43,
     858             : V_SgContinueStmt = 82,
     859             : V_SgReturnStmt = 494,
     860             : V_SgGotoStatement = 176,
     861             : V_SgSpawnStmt = 522,
     862             : V_SgTemplateTypedefDeclaration = 559,
     863             : V_SgTemplateInstantiationTypedefDeclaration = 570,
     864             : V_SgTypedefDeclaration = 627,
     865             : V_SgNullStatement = 287,
     866             : V_SgVariantStatement = 671,
     867             : V_SgPragmaDeclaration = 476,
     868             : V_SgTemplateClassDeclaration = 551,
     869             : V_SgTemplateMemberFunctionDeclaration = 556,
     870             : V_SgTemplateFunctionDeclaration = 553,
     871             : V_SgTemplateVariableDeclaration = 561,
     872             : V_SgTemplateDeclaration = 550,
     873             : V_SgVariableDeclaration = 667,
     874             : V_SgTemplateInstantiationDecl = 565,
     875             : V_SgTemplateInstantiationDefn = 566,
     876             : V_SgTemplateInstantiationFunctionDecl = 568,
     877             : V_SgTemplateInstantiationMemberFunctionDecl = 569,
     878             : V_SgNonrealDecl = 280,
     879             : V_SgWithStatement = 675,
     880             : V_SgPassStatement = 466,
     881             : V_SgAssertStmt = 16,
     882             : V_SgExecStatement = 137,
     883             : V_SgProgramHeaderStatement = 479,
     884             : V_SgProcedureHeaderStatement = 478,
     885             : V_SgEntryStatement = 128,
     886             : V_SgFortranNonblockedDo = 159,
     887             : V_SgInterfaceStatement = 211,
     888             : V_SgParameterStatement = 463,
     889             : V_SgCommonBlock = 66,
     890             : V_SgModuleStatement = 259,
     891             : V_SgUseStatement = 655,
     892             : V_SgProcessControlStatement = 529,
     893             : V_SgPrintStatement = 477,
     894             : V_SgReadStatement = 488,
     895             : V_SgWriteStatement = 679,
     896             : V_SgOpenStatement = 460,
     897             : V_SgCloseStatement = 63,
     898             : V_SgInquireStatement = 203,
     899             : V_SgFlushStatement = 150,
     900             : V_SgBackspaceStatement = 27,
     901             : V_SgRewindStatement = 495,
     902             : V_SgEndfileStatement = 126,
     903             : V_SgWaitStatement = 673,
     904             : V_SgCAFWithTeamStatement = 684,
     905             : V_SgFormatStatement = 156,
     906             : V_SgFortranDo = 157,
     907             : V_SgForAllStatement = 151,
     908             : V_SgIOStatement = 185,
     909             : V_SgSyncAllStatement = 523,
     910             : V_SgSyncImagesStatement = 524,
     911             : V_SgSyncMemoryStatement = 525,
     912             : V_SgSyncTeamStatement = 526,
     913             : V_SgLockStatement = 527,
     914             : V_SgUnlockStatement = 528,
     915             : V_SgImageControlStatement = 191,
     916             : V_SgUpcNotifyStatement = 652,
     917             : V_SgUpcWaitStatement = 654,
     918             : V_SgUpcBarrierStatement = 645,
     919             : V_SgUpcFenceStatement = 648,
     920             : V_SgUpcForAllStatement = 649,
     921             : V_SgUpirSpmdStatement = 306,
     922             : V_SgOmpLoopStatement = 314,
     923             : V_SgOmpScanStatement = 315,
     924             : V_SgOmpTaskloopStatement = 316,
     925             : V_SgOmpTaskgroupStatement = 311,
     926             : V_SgOmpDepobjStatement = 312,
     927             : V_SgOmpTeamsStatement = 307,
     928             : V_SgOmpCancellationPointStatement = 308,
     929             : V_SgOmpDeclareMapperStatement = 309,
     930             : V_SgOmpCancelStatement = 310,
     931             : V_SgOmpDistributeStatement = 313,
     932             : V_SgOmpMetadirectiveStatement = 303,
     933             : V_SgOmpSingleStatement = 321,
     934             : V_SgOmpTaskStatement = 322,
     935             : V_SgOmpTargetEnterDataStatement = 317,
     936             : V_SgOmpTargetExitDataStatement = 318,
     937             : V_SgUpirWorksharingStatement = 299,
     938             : V_SgOmpForSimdStatement = 300,
     939             : V_SgOmpDoStatement = 295,
     940             : V_SgOmpSectionsStatement = 320,
     941             : V_SgOmpAtomicStatement = 289,
     942             : V_SgUpirTaskStatement = 326,
     943             : V_SgOmpTargetDataStatement = 327,
     944             : V_SgOmpTargetParallelForStatement = 328,
     945             : V_SgOmpTargetParallelStatement = 331,
     946             : V_SgOmpDistributeSimdStatement = 341,
     947             : V_SgOmpDistributeParallelForStatement = 342,
     948             : V_SgOmpDistributeParallelForSimdStatement = 343,
     949             : V_SgOmpTaskloopSimdStatement = 344,
     950             : V_SgOmpTargetUpdateStatement = 329,
     951             : V_SgOmpTargetParallelForSimdStatement = 332,
     952             : V_SgOmpTargetParallelLoopStatement = 333,
     953             : V_SgOmpTargetSimdStatement = 334,
     954             : V_SgOmpTargetTeamsStatement = 335,
     955             : V_SgOmpTargetTeamsDistributeStatement = 336,
     956             : V_SgOmpTargetTeamsDistributeSimdStatement = 337,
     957             : V_SgOmpTargetTeamsLoopStatement = 338,
     958             : V_SgOmpTargetTeamsDistributeParallelForStatement = 339,
     959             : V_SgOmpTargetTeamsDistributeParallelForSimdStatement = 340,
     960             : V_SgOmpMasterTaskloopSimdStatement = 345,
     961             : V_SgOmpParallelMasterTaskloopStatement = 346,
     962             : V_SgOmpParallelMasterTaskloopSimdStatement = 347,
     963             : V_SgOmpTeamsDistributeStatement = 348,
     964             : V_SgOmpTeamsDistributeSimdStatement = 349,
     965             : V_SgOmpTeamsDistributeParallelForStatement = 350,
     966             : V_SgOmpTeamsDistributeParallelForSimdStatement = 351,
     967             : V_SgOmpTeamsLoopStatement = 352,
     968             : V_SgOmpParallelMasterStatement = 354,
     969             : V_SgOmpMasterTaskloopStatement = 355,
     970             : V_SgOmpParallelLoopStatement = 353,
     971             : V_SgOmpUnrollStatement = 356,
     972             : V_SgOmpTileStatement = 357,
     973             : V_SgUpirSimdStatement = 358,
     974             : V_SgOmpCriticalStatement = 291,
     975             : V_SgOmpOrderedStatement = 304,
     976             : V_SgUpirLoopStatement = 360,
     977             : V_SgUpirLoopParallelStatement = 361,
     978             : V_SgUpirSyncStatement = 362,
     979             : V_SgUpirFieldBodyStatement = 292,
     980             : V_SgOmpMasterStatement = 301,
     981             : V_SgOmpSectionStatement = 319,
     982             : V_SgOmpWorkshareStatement = 325,
     983             : V_SgOmpFlushStatement = 296,
     984             : V_SgOmpAllocateStatement = 297,
     985             : V_SgOmpOrderedDependStatement = 305,
     986             : V_SgUpirBodyStatement = 293,
     987             : V_SgUpirFieldStatement = 294,
     988             : V_SgBlockDataStatement = 41,
     989             : V_SgImplicitStatement = 193,
     990             : V_SgStatementFunctionStatement = 535,
     991             : V_SgWhereStatement = 677,
     992             : V_SgNullifyStatement = 288,
     993             : V_SgEquivalenceStatement = 135,
     994             : V_SgDerivedTypeStatement = 97,
     995             : V_SgAttributeSpecificationStatement = 24,
     996             : V_SgAllocateStatement = 7,
     997             : V_SgDeallocateStatement = 88,
     998             : V_SgContainsStatement = 81,
     999             : V_SgSequenceStatement = 501,
    1000             : V_SgElseWhereStatement = 122,
    1001             : V_SgArithmeticIfStatement = 10,
    1002             : V_SgAssignStatement = 19,
    1003             : V_SgComputedGotoStatement = 75,
    1004             : V_SgAssignedGotoStatement = 20,
    1005             : V_SgNamelistStatement = 266,
    1006             : V_SgImportStatement = 195,
    1007             : V_SgAssociateStatement = 21,
    1008             : V_SgFortranIncludeLine = 158,
    1009             : V_SgNamespaceDeclarationStatement = 268,
    1010             : V_SgNamespaceAliasDeclarationStatement = 267,
    1011             : V_SgNamespaceDefinitionStatement = 269,
    1012             : V_SgUsingDeclarationStatement = 658,
    1013             : V_SgUsingDirectiveStatement = 659,
    1014             : V_SgTemplateInstantiationDirectiveStatement = 567,
    1015             : V_SgStaticAssertionDeclaration = 532,
    1016             : V_SgTemplateClassDefinition = 563,
    1017             : V_SgTemplateFunctionDefinition = 564,
    1018             : V_SgClassDeclaration = 55,
    1019             : V_SgClassDefinition = 56,
    1020             : V_SgFunctionDefinition = 163,
    1021             : V_SgScopeStatement = 500,
    1022             : V_SgMemberFunctionDeclaration = 245,
    1023             : V_SgFunctionDeclaration = 162,
    1024             : V_SgIncludeDirectiveStatement = 198,
    1025             : V_SgDefineDirectiveStatement = 95,
    1026             : V_SgUndefDirectiveStatement = 634,
    1027             : V_SgIfdefDirectiveStatement = 189,
    1028             : V_SgIfndefDirectiveStatement = 190,
    1029             : V_SgIfDirectiveStatement = 187,
    1030             : V_SgDeadIfDirectiveStatement = 87,
    1031             : V_SgElseDirectiveStatement = 121,
    1032             : V_SgElseifDirectiveStatement = 123,
    1033             : V_SgEndifDirectiveStatement = 127,
    1034             : V_SgLineDirectiveStatement = 230,
    1035             : V_SgWarningDirectiveStatement = 674,
    1036             : V_SgErrorDirectiveStatement = 136,
    1037             : V_SgEmptyDirectiveStatement = 125,
    1038             : V_SgIncludeNextDirectiveStatement = 200,
    1039             : V_SgIdentDirectiveStatement = 186,
    1040             : V_SgLinemarkerDirectiveStatement = 231,
    1041             : V_SgC_PreprocessorDirectiveStatement = 45,
    1042             : V_SgClinkageStartStatement = 62,
    1043             : V_SgClinkageEndStatement = 61,
    1044             : V_SgClinkageDeclarationStatement = 60,
    1045             : V_SgOmpDeclareSimdStatement = 298,
    1046             : V_SgOmpBarrierStatement = 290,
    1047             : V_SgOmpTaskyieldStatement = 302,
    1048             : V_SgOmpRequiresStatement = 330,
    1049             : V_SgOmpTaskwaitStatement = 323,
    1050             : V_SgOmpThreadprivateStatement = 324,
    1051             : V_SgMicrosoftAttributeDeclaration = 250,
    1052             : V_SgEmptyDeclaration = 124,
    1053             : V_SgDeclarationStatement = 91,
    1054             : V_SgUpirBaseStatement = 359,
    1055             : V_SgStatement = 531,
    1056             : V_SgVarRefExp = 666,
    1057             : V_SgNonrealRefExp = 281,
    1058             : V_SgCompoundLiteralExp = 74,
    1059             : V_SgLabelRefExp = 220,
    1060             : V_SgClassNameRefExp = 57,
    1061             : V_SgFunctionRefExp = 169,
    1062             : V_SgMemberFunctionRefExp = 246,
    1063             : V_SgTemplateFunctionRefExp = 554,
    1064             : V_SgTemplateMemberFunctionRefExp = 557,
    1065             : V_SgSizeOfOp = 518,
    1066             : V_SgAlignOfOp = 519,
    1067             : V_SgNoexceptOp = 276,
    1068             : V_SgTypeExpression = 590,
    1069             : V_SgLambdaExp = 225,
    1070             : V_SgUpcLocalsizeofExpression = 650,
    1071             : V_SgUpcBlocksizeofExpression = 646,
    1072             : V_SgUpcElemsizeofExpression = 647,
    1073             : V_SgVarArgStartOp = 665,
    1074             : V_SgVarArgStartOneOperandOp = 664,
    1075             : V_SgVarArgOp = 663,
    1076             : V_SgVarArgEndOp = 662,
    1077             : V_SgVarArgCopyOp = 661,
    1078             : V_SgTypeIdOp = 599,
    1079             : V_SgConditionalExp = 77,
    1080             : V_SgNewExp = 274,
    1081             : V_SgDeleteExp = 96,
    1082             : V_SgThisExp = 576,
    1083             : V_SgSuperExp = 578,
    1084             : V_SgClassExp = 688,
    1085             : V_SgRefExp = 490,
    1086             : V_SgAggregateInitializer = 5,
    1087             : V_SgCompoundInitializer = 73,
    1088             : V_SgConstructorInitializer = 80,
    1089             : V_SgAssignInitializer = 17,
    1090             : V_SgBracedInitializer = 44,
    1091             : V_SgExpressionRoot = 143,
    1092             : V_SgMinusOp = 253,
    1093             : V_SgUnaryAddOp = 632,
    1094             : V_SgNotOp = 278,
    1095             : V_SgPointerDerefExp = 471,
    1096             : V_SgAddressOfOp = 4,
    1097             : V_SgMinusMinusOp = 252,
    1098             : V_SgPlusPlusOp = 468,
    1099             : V_SgBitComplementOp = 37,
    1100             : V_SgRealPartOp = 489,
    1101             : V_SgImagPartOp = 192,
    1102             : V_SgConjugateOp = 78,
    1103             : V_SgCastExp = 47,
    1104             : V_SgThrowOp = 579,
    1105             : V_SgArrowExp = 12,
    1106             : V_SgDotExp = 110,
    1107             : V_SgDotStarOp = 111,
    1108             : V_SgArrowStarOp = 13,
    1109             : V_SgEqualityOp = 134,
    1110             : V_SgLessThanOp = 229,
    1111             : V_SgGreaterThanOp = 183,
    1112             : V_SgNotEqualOp = 277,
    1113             : V_SgLessOrEqualOp = 228,
    1114             : V_SgGreaterOrEqualOp = 182,
    1115             : V_SgAddOp = 3,
    1116             : V_SgSubtractOp = 543,
    1117             : V_SgMultiplyOp = 262,
    1118             : V_SgDivideOp = 108,
    1119             : V_SgIntegerDivideOp = 206,
    1120             : V_SgModOp = 255,
    1121             : V_SgAndOp = 9,
    1122             : V_SgOrOp = 462,
    1123             : V_SgBitXorOp = 40,
    1124             : V_SgBitAndOp = 35,
    1125             : V_SgBitOrOp = 39,
    1126             : V_SgBitEqvOp = 38,
    1127             : V_SgCommaOpExp = 65,
    1128             : V_SgLshiftOp = 241,
    1129             : V_SgRshiftOp = 497,
    1130             : V_SgPntrArrRefExp = 469,
    1131             : V_SgScopeOp = 499,
    1132             : V_SgAssignOp = 18,
    1133             : V_SgPlusAssignOp = 467,
    1134             : V_SgMinusAssignOp = 251,
    1135             : V_SgAndAssignOp = 8,
    1136             : V_SgIorAssignOp = 216,
    1137             : V_SgMultAssignOp = 261,
    1138             : V_SgDivAssignOp = 107,
    1139             : V_SgModAssignOp = 254,
    1140             : V_SgXorAssignOp = 680,
    1141             : V_SgLshiftAssignOp = 240,
    1142             : V_SgRshiftAssignOp = 496,
    1143             : V_SgIntegerDivideAssignOp = 207,
    1144             : V_SgExponentiationAssignOp = 139,
    1145             : V_SgConcatenationOp = 76,
    1146             : V_SgNaryComparisonOp = 273,
    1147             : V_SgNaryBooleanOp = 272,
    1148             : V_SgBoolValExp = 42,
    1149             : V_SgStringVal = 540,
    1150             : V_SgShortVal = 503,
    1151             : V_SgCharVal = 50,
    1152             : V_SgUnsignedCharVal = 640,
    1153             : V_SgWcharVal = 676,
    1154             : V_SgChar16Val = 51,
    1155             : V_SgChar32Val = 52,
    1156             : V_SgUnsignedShortVal = 644,
    1157             : V_SgIntVal = 205,
    1158             : V_SgEnumVal = 133,
    1159             : V_SgUnsignedIntVal = 641,
    1160             : V_SgLongIntVal = 238,
    1161             : V_SgLongLongIntVal = 239,
    1162             : V_SgUnsignedLongLongIntVal = 642,
    1163             : V_SgUnsignedLongVal = 643,
    1164             : V_SgFloatVal = 146,
    1165             : V_SgDoubleVal = 112,
    1166             : V_SgLongDoubleVal = 237,
    1167             : V_SgFloat80Val = 148,
    1168             : V_SgFloat128Val = 147,
    1169             : V_SgNullptrValExp = 286,
    1170             : V_SgVoidVal = 672,
    1171             : V_SgFunctionParameterRefExp = 167,
    1172             : V_SgTemplateParameterVal = 572,
    1173             : V_SgUpcThreads = 653,
    1174             : V_SgUpcMythread = 651,
    1175             : V_SgComplexVal = 69,
    1176             : V_SgNullExpression = 285,
    1177             : V_SgVariantExpression = 670,
    1178             : V_SgStatementExpression = 534,
    1179             : V_SgAsmOp = 14,
    1180             : V_SgCudaKernelExecConfig = 218,
    1181             : V_SgCudaKernelCallExp = 219,
    1182             : V_SgLambdaRefExp = 226,
    1183             : V_SgTupleExp = 582,
    1184             : V_SgListExp = 234,
    1185             : V_SgDictionaryExp = 100,
    1186             : V_SgKeyDatumPair = 217,
    1187             : V_SgComprehension = 70,
    1188             : V_SgListComprehension = 233,
    1189             : V_SgSetComprehension = 502,
    1190             : V_SgDictionaryComprehension = 99,
    1191             : V_SgMembershipOp = 249,
    1192             : V_SgNonMembershipOp = 279,
    1193             : V_SgIsOp = 214,
    1194             : V_SgIsNotOp = 215,
    1195             : V_SgStringConversion = 538,
    1196             : V_SgYieldExpression = 681,
    1197             : V_SgFoldExpression = 149,
    1198             : V_SgChooseExpression = 53,
    1199             : V_SgAwaitExpression = 26,
    1200             : V_SgSpaceshipOp = 521,
    1201             : V_SgSubscriptExpression = 542,
    1202             : V_SgColonShapeExp = 64,
    1203             : V_SgAsteriskShapeExp = 22,
    1204             : V_SgIOItemExpression = 184,
    1205             : V_SgImpliedDo = 194,
    1206             : V_SgExponentiationOp = 138,
    1207             : V_SgUnknownArrayOrFunctionReference = 636,
    1208             : V_SgActualArgumentExpression = 2,
    1209             : V_SgUserDefinedBinaryOp = 656,
    1210             : V_SgPointerAssignOp = 470,
    1211             : V_SgCAFCoExpression = 685,
    1212             : V_SgDesignatedInitializer = 98,
    1213             : V_SgMatrixExp = 243,
    1214             : V_SgRangeExp = 486,
    1215             : V_SgMagicColonExp = 242,
    1216             : V_SgElementwiseMultiplyOp = 118,
    1217             : V_SgPowerOp = 474,
    1218             : V_SgElementwisePowerOp = 119,
    1219             : V_SgElementwiseDivideOp = 116,
    1220             : V_SgLeftDivideOp = 227,
    1221             : V_SgElementwiseLeftDivideOp = 117,
    1222             : V_SgElementwiseAddOp = 115,
    1223             : V_SgElementwiseSubtractOp = 120,
    1224             : V_SgMatrixTransposeOp = 244,
    1225             : V_SgElementwiseOp = 114,
    1226             : V_SgInitializer = 202,
    1227             : V_SgSIMDLoad = 510,
    1228             : V_SgSIMDBroadcast = 511,
    1229             : V_SgSIMDStore = 512,
    1230             : V_SgSIMDPartialStore = 513,
    1231             : V_SgSIMDScalarStore = 514,
    1232             : V_SgSIMDGather = 515,
    1233             : V_SgSIMDExplicitGather = 516,
    1234             : V_SgSIMDScatter = 517,
    1235             : V_SgSIMDAddOp = 505,
    1236             : V_SgSIMDSubOp = 506,
    1237             : V_SgSIMDMulOp = 507,
    1238             : V_SgSIMDDivOp = 508,
    1239             : V_SgSIMDFmaOp = 509,
    1240             : V_SgSIMDBinaryOp = 504,
    1241             : V_SgUserDefinedUnaryOp = 657,
    1242             : V_SgPseudoDestructorRefExp = 481,
    1243             : V_SgUnaryOp = 633,
    1244             : V_SgCompoundAssignOp = 72,
    1245             : V_SgBinaryOp = 34,
    1246             : V_SgNaryOp = 271,
    1247             : V_SgValueExp = 660,
    1248             : V_SgExprListExp = 140,
    1249             : V_SgFunctionCallExp = 161,
    1250             : V_SgCallExpression = 686,
    1251             : V_SgTypeTraitBuiltinOperator = 577,
    1252             : V_SgExpression = 142,
    1253             : V_SgTemplateVariableSymbol = 562,
    1254             : V_SgVariableSymbol = 669,
    1255             : V_SgFunctionTypeSymbol = 172,
    1256             : V_SgTemplateClassSymbol = 552,
    1257             : V_SgClassSymbol = 58,
    1258             : V_SgTemplateSymbol = 574,
    1259             : V_SgEnumSymbol = 131,
    1260             : V_SgEnumFieldSymbol = 130,
    1261             : V_SgTemplateTypedefSymbol = 560,
    1262             : V_SgTypedefSymbol = 629,
    1263             : V_SgTemplateFunctionSymbol = 555,
    1264             : V_SgTemplateMemberFunctionSymbol = 558,
    1265             : V_SgLabelSymbol = 222,
    1266             : V_SgDefaultSymbol = 94,
    1267             : V_SgNamespaceSymbol = 270,
    1268             : V_SgIntrinsicSymbol = 213,
    1269             : V_SgModuleSymbol = 260,
    1270             : V_SgInterfaceSymbol = 212,
    1271             : V_SgCommonSymbol = 68,
    1272             : V_SgRenameSymbol = 493,
    1273             : V_SgMemberFunctionSymbol = 247,
    1274             : V_SgFunctionSymbol = 170,
    1275             : V_SgAliasSymbol = 6,
    1276             : V_SgNonrealSymbol = 282,
    1277             : V_SgSymbol = 546,
    1278             : V_SgCommonBlockObject = 67,
    1279             : V_SgInitializedName = 201,
    1280             : V_SgLambdaCapture = 223,
    1281             : V_SgLambdaCaptureList = 224,
    1282             : V_SgOmpOrderedClause = 424,
    1283             : V_SgOmpNowaitClause = 385,
    1284             : V_SgOmpNogroupClause = 412,
    1285             : V_SgOmpReadClause = 386,
    1286             : V_SgOmpThreadsClause = 370,
    1287             : V_SgOmpSimdClause = 371,
    1288             : V_SgOmpReverseOffloadClause = 396,
    1289             : V_SgOmpExtImplementationDefinedRequirementClause = 401,
    1290             : V_SgOmpUnifiedAddressClause = 397,
    1291             : V_SgOmpUnifiedSharedMemoryClause = 398,
    1292             : V_SgOmpDynamicAllocatorsClause = 399,
    1293             : V_SgOmpAtomicDefaultMemOrderClause = 400,
    1294             : V_SgOmpWriteClause = 387,
    1295             : V_SgOmpUpdateClause = 388,
    1296             : V_SgOmpDepobjUpdateClause = 389,
    1297             : V_SgOmpDestroyClause = 390,
    1298             : V_SgOmpCaptureClause = 391,
    1299             : V_SgOmpSeqCstClause = 392,
    1300             : V_SgOmpAcqRelClause = 393,
    1301             : V_SgOmpReleaseClause = 394,
    1302             : V_SgOmpAcquireClause = 395,
    1303             : V_SgOmpRelaxedClause = 402,
    1304             : V_SgOmpParallelClause = 403,
    1305             : V_SgOmpSectionsClause = 404,
    1306             : V_SgOmpForClause = 405,
    1307             : V_SgOmpTaskgroupClause = 406,
    1308             : V_SgOmpBeginClause = 372,
    1309             : V_SgOmpEndClause = 377,
    1310             : V_SgOmpUntiedClause = 432,
    1311             : V_SgOmpMergeableClause = 433,
    1312             : V_SgOmpDefaultClause = 376,
    1313             : V_SgOmpAtomicClause = 442,
    1314             : V_SgOmpProcBindClause = 441,
    1315             : V_SgOmpOrderClause = 414,
    1316             : V_SgOmpBindClause = 416,
    1317             : V_SgOmpInbranchClause = 443,
    1318             : V_SgOmpNotinbranchClause = 444,
    1319             : V_SgOmpCollapseClause = 373,
    1320             : V_SgOmpIfClause = 380,
    1321             : V_SgOmpFinalClause = 381,
    1322             : V_SgOmpPriorityClause = 382,
    1323             : V_SgUpirNumUnitsField = 407,
    1324             : V_SgOmpNumTeamsClause = 408,
    1325             : V_SgOmpGrainsizeClause = 409,
    1326             : V_SgOmpDetachClause = 410,
    1327             : V_SgOmpNumTasksClause = 411,
    1328             : V_SgOmpHintClause = 413,
    1329             : V_SgOmpThreadLimitClause = 423,
    1330             : V_SgOmpNontemporalClause = 417,
    1331             : V_SgOmpInclusiveClause = 418,
    1332             : V_SgOmpExclusiveClause = 419,
    1333             : V_SgOmpIsDevicePtrClause = 420,
    1334             : V_SgOmpUseDevicePtrClause = 421,
    1335             : V_SgOmpUseDeviceAddrClause = 422,
    1336             : V_SgOmpDeviceClause = 383,
    1337             : V_SgOmpSafelenClause = 436,
    1338             : V_SgOmpSimdlenClause = 437,
    1339             : V_SgOmpPartialClause = 449,
    1340             : V_SgOmpFullClause = 448,
    1341             : V_SgOmpSizesClause = 450,
    1342             : V_SgUpirBranchField = 451,
    1343             : V_SgUpirNestedLevelField = 452,
    1344             : V_SgUpirNestedParentField = 453,
    1345             : V_SgUpirNestedChildField = 454,
    1346             : V_SgUpirSyncField = 455,
    1347             : V_SgUpirDataField = 456,
    1348             : V_SgUpirTargetField = 458,
    1349             : V_SgUpirDataItemField = 457,
    1350             : V_SgOmpExpressionClause = 378,
    1351             : V_SgOmpCopyprivateClause = 375,
    1352             : V_SgOmpPrivateClause = 425,
    1353             : V_SgOmpFirstprivateClause = 379,
    1354             : V_SgOmpSharedClause = 431,
    1355             : V_SgOmpCopyinClause = 374,
    1356             : V_SgOmpLastprivateClause = 384,
    1357             : V_SgOmpReductionClause = 426,
    1358             : V_SgOmpInReductionClause = 427,
    1359             : V_SgOmpTaskReductionClause = 428,
    1360             : V_SgOmpAllocateClause = 364,
    1361             : V_SgOmpDependClause = 445,
    1362             : V_SgOmpToClause = 368,
    1363             : V_SgOmpUsesAllocatorsClause = 366,
    1364             : V_SgOmpFromClause = 369,
    1365             : V_SgOmpAffinityClause = 446,
    1366             : V_SgOmpMapClause = 435,
    1367             : V_SgOmpLinearClause = 438,
    1368             : V_SgOmpUniformClause = 439,
    1369             : V_SgOmpAlignedClause = 440,
    1370             : V_SgOmpVariablesClause = 434,
    1371             : V_SgOmpScheduleClause = 430,
    1372             : V_SgOmpWhenClause = 447,
    1373             : V_SgOmpDistScheduleClause = 415,
    1374             : V_SgOmpDefaultmapClause = 429,
    1375             : V_SgOmpAllocatorClause = 365,
    1376             : V_SgOmpUsesAllocatorsDefination = 367,
    1377             : V_SgOmpClause = 363,
    1378             : V_SgRenamePair = 492,
    1379             : V_SgInterfaceBody = 208,
    1380             : V_SgHeaderFileBody = 209,
    1381             : V_SgLocatedNodeSupport = 236,
    1382             : V_SgToken = 580,
    1383             : V_SgLocatedNode = 235,
    1384             : V_SgNode = 275, V_SgNumVariants = 690};
    1385             : 
    1386             : typedef struct 
    1387             :    { 
    1388             :      VariantT variant; 
    1389             :      std::string name; 
    1390             :    } TerminalNamesType; 
    1391             : 
    1392             : extern TerminalNamesType Cxx_GrammarTerminalNames[691]; 
    1393             : 
    1394             : 
    1395             : 
    1396             : 
    1397             : 
    1398             : //! Forward Declarations used to represent the grammar used in ROSE 
    1399             : 
    1400             : class SgName;
    1401             : class SgSymbolTable;
    1402             : class SgPragma;
    1403             : class SgModifierNodes;
    1404             : class SgConstVolatileModifier;
    1405             : class SgStorageModifier;
    1406             : class SgAccessModifier;
    1407             : class SgFunctionModifier;
    1408             : class SgUPC_AccessModifier;
    1409             : class SgLinkageModifier;
    1410             : class SgSpecialFunctionModifier;
    1411             : class SgTypeModifier;
    1412             : class SgElaboratedTypeModifier;
    1413             : class SgBaseClassModifier;
    1414             : class SgDeclarationModifier;
    1415             : class SgStructureModifier;
    1416             : class SgOpenclAccessModeModifier;
    1417             : class SgModifier;
    1418             : class Sg_File_Info;
    1419             : class SgSourceFile;
    1420             : class SgUnknownFile;
    1421             : class SgFile;
    1422             : class SgFileList;
    1423             : class SgDirectory;
    1424             : class SgDirectoryList;
    1425             : class SgProject;
    1426             : class SgOptions;
    1427             : class SgUnparse_Info;
    1428             : class SgIncludeFile;
    1429             : class SgFuncDecl_attr;
    1430             : class SgClassDecl_attr;
    1431             : class SgTypedefSeq;
    1432             : class SgFunctionParameterTypeList;
    1433             : class SgTemplateParameter;
    1434             : class SgTemplateArgument;
    1435             : class SgTemplateParameterList;
    1436             : class SgTemplateArgumentList;
    1437             : class SgBitAttribute;
    1438             : class SgAttribute;
    1439             : class SgExpBaseClass;
    1440             : class SgNonrealBaseClass;
    1441             : class SgBaseClass;
    1442             : class SgUndirectedGraphEdge;
    1443             : class SgDirectedGraphEdge;
    1444             : class SgGraphNode;
    1445             : class SgGraphEdge;
    1446             : class SgStringKeyedBidirectionalGraph;
    1447             : class SgIntKeyedBidirectionalGraph;
    1448             : class SgBidirectionalGraph;
    1449             : class SgIncidenceDirectedGraph;
    1450             : class SgIncidenceUndirectedGraph;
    1451             : class SgGraph;
    1452             : class SgGraphNodeList;
    1453             : class SgGraphEdgeList;
    1454             : class SgQualifiedName;
    1455             : class SgNameGroup;
    1456             : class SgDimensionObject;
    1457             : class SgDataStatementGroup;
    1458             : class SgDataStatementObject;
    1459             : class SgDataStatementValue;
    1460             : class SgFormatItem;
    1461             : class SgFormatItemList;
    1462             : class SgTypeTable;
    1463             : class SgHeaderFileReport;
    1464             : class SgSupport;
    1465             : class SgTypeUnknown;
    1466             : class SgTypeChar;
    1467             : class SgTypeSignedChar;
    1468             : class SgTypeUnsignedChar;
    1469             : class SgTypeShort;
    1470             : class SgTypeSignedShort;
    1471             : class SgTypeUnsignedShort;
    1472             : class SgTypeInt;
    1473             : class SgTypeSignedInt;
    1474             : class SgTypeUnsignedInt;
    1475             : class SgTypeLong;
    1476             : class SgTypeSignedLong;
    1477             : class SgTypeUnsignedLong;
    1478             : class SgTypeVoid;
    1479             : class SgTypeGlobalVoid;
    1480             : class SgTypeWchar;
    1481             : class SgTypeFloat;
    1482             : class SgTypeDouble;
    1483             : class SgTypeLongLong;
    1484             : class SgTypeSignedLongLong;
    1485             : class SgTypeUnsignedLongLong;
    1486             : class SgTypeLongDouble;
    1487             : class SgTypeFloat80;
    1488             : class SgTypeFloat128;
    1489             : class SgTypeString;
    1490             : class SgTypeBool;
    1491             : class SgTypeFixed;
    1492             : class SgTypeMatrix;
    1493             : class SgTypeTuple;
    1494             : class SgTypeNullptr;
    1495             : class SgTypeComplex;
    1496             : class SgTypeImaginary;
    1497             : class SgTypeDefault;
    1498             : class SgPointerMemberType;
    1499             : class SgReferenceType;
    1500             : class SgRvalueReferenceType;
    1501             : class SgDeclType;
    1502             : class SgTypeOfType;
    1503             : class SgTypeCAFTeam;
    1504             : class SgTypeUnsigned128bitInteger;
    1505             : class SgTypeSigned128bitInteger;
    1506             : class SgTypeLabel;
    1507             : class SgTemplateType;
    1508             : class SgEnumType;
    1509             : class SgTypedefType;
    1510             : class SgNonrealType;
    1511             : class SgAutoType;
    1512             : class SgModifierType;
    1513             : class SgPartialFunctionModifierType;
    1514             : class SgArrayType;
    1515             : class SgTypeEllipse;
    1516             : class SgTypeCrayPointer;
    1517             : class SgPartialFunctionType;
    1518             : class SgMemberFunctionType;
    1519             : class SgFunctionType;
    1520             : class SgPointerType;
    1521             : class SgClassType;
    1522             : class SgNamedType;
    1523             : class SgQualifiedNameType;
    1524             : class SgTypeChar16;
    1525             : class SgTypeChar32;
    1526             : class SgType;
    1527             : class SgForStatement;
    1528             : class SgForInitStatement;
    1529             : class SgRangeBasedForStatement;
    1530             : class SgCatchStatementSeq;
    1531             : class SgFunctionParameterList;
    1532             : class SgCtorInitializerList;
    1533             : class SgBasicBlock;
    1534             : class SgGlobal;
    1535             : class SgIfStmt;
    1536             : class SgWhileStmt;
    1537             : class SgDoWhileStmt;
    1538             : class SgSwitchStatement;
    1539             : class SgCatchOptionStmt;
    1540             : class SgFunctionParameterScope;
    1541             : class SgDeclarationScope;
    1542             : class SgVariableDefinition;
    1543             : class SgStmtDeclarationStatement;
    1544             : class SgEnumDeclaration;
    1545             : class SgAsmStmt;
    1546             : class SgFunctionTypeTable;
    1547             : class SgExprStatement;
    1548             : class SgLabelStatement;
    1549             : class SgCaseOptionStmt;
    1550             : class SgTryStmt;
    1551             : class SgDefaultOptionStmt;
    1552             : class SgBreakStmt;
    1553             : class SgContinueStmt;
    1554             : class SgReturnStmt;
    1555             : class SgGotoStatement;
    1556             : class SgSpawnStmt;
    1557             : class SgTemplateTypedefDeclaration;
    1558             : class SgTemplateInstantiationTypedefDeclaration;
    1559             : class SgTypedefDeclaration;
    1560             : class SgNullStatement;
    1561             : class SgVariantStatement;
    1562             : class SgPragmaDeclaration;
    1563             : class SgTemplateClassDeclaration;
    1564             : class SgTemplateMemberFunctionDeclaration;
    1565             : class SgTemplateFunctionDeclaration;
    1566             : class SgTemplateVariableDeclaration;
    1567             : class SgTemplateDeclaration;
    1568             : class SgVariableDeclaration;
    1569             : class SgTemplateInstantiationDecl;
    1570             : class SgTemplateInstantiationDefn;
    1571             : class SgTemplateInstantiationFunctionDecl;
    1572             : class SgTemplateInstantiationMemberFunctionDecl;
    1573             : class SgNonrealDecl;
    1574             : class SgWithStatement;
    1575             : class SgPassStatement;
    1576             : class SgAssertStmt;
    1577             : class SgExecStatement;
    1578             : class SgProgramHeaderStatement;
    1579             : class SgProcedureHeaderStatement;
    1580             : class SgEntryStatement;
    1581             : class SgFortranNonblockedDo;
    1582             : class SgInterfaceStatement;
    1583             : class SgParameterStatement;
    1584             : class SgCommonBlock;
    1585             : class SgModuleStatement;
    1586             : class SgUseStatement;
    1587             : class SgProcessControlStatement;
    1588             : class SgPrintStatement;
    1589             : class SgReadStatement;
    1590             : class SgWriteStatement;
    1591             : class SgOpenStatement;
    1592             : class SgCloseStatement;
    1593             : class SgInquireStatement;
    1594             : class SgFlushStatement;
    1595             : class SgBackspaceStatement;
    1596             : class SgRewindStatement;
    1597             : class SgEndfileStatement;
    1598             : class SgWaitStatement;
    1599             : class SgCAFWithTeamStatement;
    1600             : class SgFormatStatement;
    1601             : class SgFortranDo;
    1602             : class SgForAllStatement;
    1603             : class SgIOStatement;
    1604             : class SgSyncAllStatement;
    1605             : class SgSyncImagesStatement;
    1606             : class SgSyncMemoryStatement;
    1607             : class SgSyncTeamStatement;
    1608             : class SgLockStatement;
    1609             : class SgUnlockStatement;
    1610             : class SgImageControlStatement;
    1611             : class SgUpcNotifyStatement;
    1612             : class SgUpcWaitStatement;
    1613             : class SgUpcBarrierStatement;
    1614             : class SgUpcFenceStatement;
    1615             : class SgUpcForAllStatement;
    1616             : class SgUpirSpmdStatement;
    1617             : class SgOmpLoopStatement;
    1618             : class SgOmpScanStatement;
    1619             : class SgOmpTaskloopStatement;
    1620             : class SgOmpTaskgroupStatement;
    1621             : class SgOmpDepobjStatement;
    1622             : class SgOmpTeamsStatement;
    1623             : class SgOmpCancellationPointStatement;
    1624             : class SgOmpDeclareMapperStatement;
    1625             : class SgOmpCancelStatement;
    1626             : class SgOmpDistributeStatement;
    1627             : class SgOmpMetadirectiveStatement;
    1628             : class SgOmpSingleStatement;
    1629             : class SgOmpTaskStatement;
    1630             : class SgOmpTargetEnterDataStatement;
    1631             : class SgOmpTargetExitDataStatement;
    1632             : class SgUpirWorksharingStatement;
    1633             : class SgOmpForSimdStatement;
    1634             : class SgOmpDoStatement;
    1635             : class SgOmpSectionsStatement;
    1636             : class SgOmpAtomicStatement;
    1637             : class SgUpirTaskStatement;
    1638             : class SgOmpTargetDataStatement;
    1639             : class SgOmpTargetParallelForStatement;
    1640             : class SgOmpTargetParallelStatement;
    1641             : class SgOmpDistributeSimdStatement;
    1642             : class SgOmpDistributeParallelForStatement;
    1643             : class SgOmpDistributeParallelForSimdStatement;
    1644             : class SgOmpTaskloopSimdStatement;
    1645             : class SgOmpTargetUpdateStatement;
    1646             : class SgOmpTargetParallelForSimdStatement;
    1647             : class SgOmpTargetParallelLoopStatement;
    1648             : class SgOmpTargetSimdStatement;
    1649             : class SgOmpTargetTeamsStatement;
    1650             : class SgOmpTargetTeamsDistributeStatement;
    1651             : class SgOmpTargetTeamsDistributeSimdStatement;
    1652             : class SgOmpTargetTeamsLoopStatement;
    1653             : class SgOmpTargetTeamsDistributeParallelForStatement;
    1654             : class SgOmpTargetTeamsDistributeParallelForSimdStatement;
    1655             : class SgOmpMasterTaskloopSimdStatement;
    1656             : class SgOmpParallelMasterTaskloopStatement;
    1657             : class SgOmpParallelMasterTaskloopSimdStatement;
    1658             : class SgOmpTeamsDistributeStatement;
    1659             : class SgOmpTeamsDistributeSimdStatement;
    1660             : class SgOmpTeamsDistributeParallelForStatement;
    1661             : class SgOmpTeamsDistributeParallelForSimdStatement;
    1662             : class SgOmpTeamsLoopStatement;
    1663             : class SgOmpParallelMasterStatement;
    1664             : class SgOmpMasterTaskloopStatement;
    1665             : class SgOmpParallelLoopStatement;
    1666             : class SgOmpUnrollStatement;
    1667             : class SgOmpTileStatement;
    1668             : class SgUpirSimdStatement;
    1669             : class SgOmpCriticalStatement;
    1670             : class SgOmpOrderedStatement;
    1671             : class SgUpirLoopStatement;
    1672             : class SgUpirLoopParallelStatement;
    1673             : class SgUpirSyncStatement;
    1674             : class SgUpirFieldBodyStatement;
    1675             : class SgOmpMasterStatement;
    1676             : class SgOmpSectionStatement;
    1677             : class SgOmpWorkshareStatement;
    1678             : class SgOmpFlushStatement;
    1679             : class SgOmpAllocateStatement;
    1680             : class SgOmpOrderedDependStatement;
    1681             : class SgUpirBodyStatement;
    1682             : class SgUpirFieldStatement;
    1683             : class SgBlockDataStatement;
    1684             : class SgImplicitStatement;
    1685             : class SgStatementFunctionStatement;
    1686             : class SgWhereStatement;
    1687             : class SgNullifyStatement;
    1688             : class SgEquivalenceStatement;
    1689             : class SgDerivedTypeStatement;
    1690             : class SgAttributeSpecificationStatement;
    1691             : class SgAllocateStatement;
    1692             : class SgDeallocateStatement;
    1693             : class SgContainsStatement;
    1694             : class SgSequenceStatement;
    1695             : class SgElseWhereStatement;
    1696             : class SgArithmeticIfStatement;
    1697             : class SgAssignStatement;
    1698             : class SgComputedGotoStatement;
    1699             : class SgAssignedGotoStatement;
    1700             : class SgNamelistStatement;
    1701             : class SgImportStatement;
    1702             : class SgAssociateStatement;
    1703             : class SgFortranIncludeLine;
    1704             : class SgNamespaceDeclarationStatement;
    1705             : class SgNamespaceAliasDeclarationStatement;
    1706             : class SgNamespaceDefinitionStatement;
    1707             : class SgUsingDeclarationStatement;
    1708             : class SgUsingDirectiveStatement;
    1709             : class SgTemplateInstantiationDirectiveStatement;
    1710             : class SgStaticAssertionDeclaration;
    1711             : class SgTemplateClassDefinition;
    1712             : class SgTemplateFunctionDefinition;
    1713             : class SgClassDeclaration;
    1714             : class SgClassDefinition;
    1715             : class SgFunctionDefinition;
    1716             : class SgScopeStatement;
    1717             : class SgMemberFunctionDeclaration;
    1718             : class SgFunctionDeclaration;
    1719             : class SgIncludeDirectiveStatement;
    1720             : class SgDefineDirectiveStatement;
    1721             : class SgUndefDirectiveStatement;
    1722             : class SgIfdefDirectiveStatement;
    1723             : class SgIfndefDirectiveStatement;
    1724             : class SgIfDirectiveStatement;
    1725             : class SgDeadIfDirectiveStatement;
    1726             : class SgElseDirectiveStatement;
    1727             : class SgElseifDirectiveStatement;
    1728             : class SgEndifDirectiveStatement;
    1729             : class SgLineDirectiveStatement;
    1730             : class SgWarningDirectiveStatement;
    1731             : class SgErrorDirectiveStatement;
    1732             : class SgEmptyDirectiveStatement;
    1733             : class SgIncludeNextDirectiveStatement;
    1734             : class SgIdentDirectiveStatement;
    1735             : class SgLinemarkerDirectiveStatement;
    1736             : class SgC_PreprocessorDirectiveStatement;
    1737             : class SgClinkageStartStatement;
    1738             : class SgClinkageEndStatement;
    1739             : class SgClinkageDeclarationStatement;
    1740             : class SgOmpDeclareSimdStatement;
    1741             : class SgOmpBarrierStatement;
    1742             : class SgOmpTaskyieldStatement;
    1743             : class SgOmpRequiresStatement;
    1744             : class SgOmpTaskwaitStatement;
    1745             : class SgOmpThreadprivateStatement;
    1746             : class SgMicrosoftAttributeDeclaration;
    1747             : class SgEmptyDeclaration;
    1748             : class SgDeclarationStatement;
    1749             : class SgUpirBaseStatement;
    1750             : class SgStatement;
    1751             : class SgVarRefExp;
    1752             : class SgNonrealRefExp;
    1753             : class SgCompoundLiteralExp;
    1754             : class SgLabelRefExp;
    1755             : class SgClassNameRefExp;
    1756             : class SgFunctionRefExp;
    1757             : class SgMemberFunctionRefExp;
    1758             : class SgTemplateFunctionRefExp;
    1759             : class SgTemplateMemberFunctionRefExp;
    1760             : class SgSizeOfOp;
    1761             : class SgAlignOfOp;
    1762             : class SgNoexceptOp;
    1763             : class SgTypeExpression;
    1764             : class SgLambdaExp;
    1765             : class SgUpcLocalsizeofExpression;
    1766             : class SgUpcBlocksizeofExpression;
    1767             : class SgUpcElemsizeofExpression;
    1768             : class SgVarArgStartOp;
    1769             : class SgVarArgStartOneOperandOp;
    1770             : class SgVarArgOp;
    1771             : class SgVarArgEndOp;
    1772             : class SgVarArgCopyOp;
    1773             : class SgTypeIdOp;
    1774             : class SgConditionalExp;
    1775             : class SgNewExp;
    1776             : class SgDeleteExp;
    1777             : class SgThisExp;
    1778             : class SgSuperExp;
    1779             : class SgClassExp;
    1780             : class SgRefExp;
    1781             : class SgAggregateInitializer;
    1782             : class SgCompoundInitializer;
    1783             : class SgConstructorInitializer;
    1784             : class SgAssignInitializer;
    1785             : class SgBracedInitializer;
    1786             : class SgExpressionRoot;
    1787             : class SgMinusOp;
    1788             : class SgUnaryAddOp;
    1789             : class SgNotOp;
    1790             : class SgPointerDerefExp;
    1791             : class SgAddressOfOp;
    1792             : class SgMinusMinusOp;
    1793             : class SgPlusPlusOp;
    1794             : class SgBitComplementOp;
    1795             : class SgRealPartOp;
    1796             : class SgImagPartOp;
    1797             : class SgConjugateOp;
    1798             : class SgCastExp;
    1799             : class SgThrowOp;
    1800             : class SgArrowExp;
    1801             : class SgDotExp;
    1802             : class SgDotStarOp;
    1803             : class SgArrowStarOp;
    1804             : class SgEqualityOp;
    1805             : class SgLessThanOp;
    1806             : class SgGreaterThanOp;
    1807             : class SgNotEqualOp;
    1808             : class SgLessOrEqualOp;
    1809             : class SgGreaterOrEqualOp;
    1810             : class SgAddOp;
    1811             : class SgSubtractOp;
    1812             : class SgMultiplyOp;
    1813             : class SgDivideOp;
    1814             : class SgIntegerDivideOp;
    1815             : class SgModOp;
    1816             : class SgAndOp;
    1817             : class SgOrOp;
    1818             : class SgBitXorOp;
    1819             : class SgBitAndOp;
    1820             : class SgBitOrOp;
    1821             : class SgBitEqvOp;
    1822             : class SgCommaOpExp;
    1823             : class SgLshiftOp;
    1824             : class SgRshiftOp;
    1825             : class SgPntrArrRefExp;
    1826             : class SgScopeOp;
    1827             : class SgAssignOp;
    1828             : class SgPlusAssignOp;
    1829             : class SgMinusAssignOp;
    1830             : class SgAndAssignOp;
    1831             : class SgIorAssignOp;
    1832             : class SgMultAssignOp;
    1833             : class SgDivAssignOp;
    1834             : class SgModAssignOp;
    1835             : class SgXorAssignOp;
    1836             : class SgLshiftAssignOp;
    1837             : class SgRshiftAssignOp;
    1838             : class SgIntegerDivideAssignOp;
    1839             : class SgExponentiationAssignOp;
    1840             : class SgConcatenationOp;
    1841             : class SgNaryComparisonOp;
    1842             : class SgNaryBooleanOp;
    1843             : class SgBoolValExp;
    1844             : class SgStringVal;
    1845             : class SgShortVal;
    1846             : class SgCharVal;
    1847             : class SgUnsignedCharVal;
    1848             : class SgWcharVal;
    1849             : class SgChar16Val;
    1850             : class SgChar32Val;
    1851             : class SgUnsignedShortVal;
    1852             : class SgIntVal;
    1853             : class SgEnumVal;
    1854             : class SgUnsignedIntVal;
    1855             : class SgLongIntVal;
    1856             : class SgLongLongIntVal;
    1857             : class SgUnsignedLongLongIntVal;
    1858             : class SgUnsignedLongVal;
    1859             : class SgFloatVal;
    1860             : class SgDoubleVal;
    1861             : class SgLongDoubleVal;
    1862             : class SgFloat80Val;
    1863             : class SgFloat128Val;
    1864             : class SgNullptrValExp;
    1865             : class SgVoidVal;
    1866             : class SgFunctionParameterRefExp;
    1867             : class SgTemplateParameterVal;
    1868             : class SgUpcThreads;
    1869             : class SgUpcMythread;
    1870             : class SgComplexVal;
    1871             : class SgNullExpression;
    1872             : class SgVariantExpression;
    1873             : class SgStatementExpression;
    1874             : class SgAsmOp;
    1875             : class SgCudaKernelExecConfig;
    1876             : class SgCudaKernelCallExp;
    1877             : class SgLambdaRefExp;
    1878             : class SgTupleExp;
    1879             : class SgListExp;
    1880             : class SgDictionaryExp;
    1881             : class SgKeyDatumPair;
    1882             : class SgComprehension;
    1883             : class SgListComprehension;
    1884             : class SgSetComprehension;
    1885             : class SgDictionaryComprehension;
    1886             : class SgMembershipOp;
    1887             : class SgNonMembershipOp;
    1888             : class SgIsOp;
    1889             : class SgIsNotOp;
    1890             : class SgStringConversion;
    1891             : class SgYieldExpression;
    1892             : class SgFoldExpression;
    1893             : class SgChooseExpression;
    1894             : class SgAwaitExpression;
    1895             : class SgSpaceshipOp;
    1896             : class SgSubscriptExpression;
    1897             : class SgColonShapeExp;
    1898             : class SgAsteriskShapeExp;
    1899             : class SgIOItemExpression;
    1900             : class SgImpliedDo;
    1901             : class SgExponentiationOp;
    1902             : class SgUnknownArrayOrFunctionReference;
    1903             : class SgActualArgumentExpression;
    1904             : class SgUserDefinedBinaryOp;
    1905             : class SgPointerAssignOp;
    1906             : class SgCAFCoExpression;
    1907             : class SgDesignatedInitializer;
    1908             : class SgMatrixExp;
    1909             : class SgRangeExp;
    1910             : class SgMagicColonExp;
    1911             : class SgElementwiseMultiplyOp;
    1912             : class SgPowerOp;
    1913             : class SgElementwisePowerOp;
    1914             : class SgElementwiseDivideOp;
    1915             : class SgLeftDivideOp;
    1916             : class SgElementwiseLeftDivideOp;
    1917             : class SgElementwiseAddOp;
    1918             : class SgElementwiseSubtractOp;
    1919             : class SgMatrixTransposeOp;
    1920             : class SgElementwiseOp;
    1921             : class SgInitializer;
    1922             : class SgSIMDLoad;
    1923             : class SgSIMDBroadcast;
    1924             : class SgSIMDStore;
    1925             : class SgSIMDPartialStore;
    1926             : class SgSIMDScalarStore;
    1927             : class SgSIMDGather;
    1928             : class SgSIMDExplicitGather;
    1929             : class SgSIMDScatter;
    1930             : class SgSIMDAddOp;
    1931             : class SgSIMDSubOp;
    1932             : class SgSIMDMulOp;
    1933             : class SgSIMDDivOp;
    1934             : class SgSIMDFmaOp;
    1935             : class SgSIMDBinaryOp;
    1936             : class SgUserDefinedUnaryOp;
    1937             : class SgPseudoDestructorRefExp;
    1938             : class SgUnaryOp;
    1939             : class SgCompoundAssignOp;
    1940             : class SgBinaryOp;
    1941             : class SgNaryOp;
    1942             : class SgValueExp;
    1943             : class SgExprListExp;
    1944             : class SgFunctionCallExp;
    1945             : class SgCallExpression;
    1946             : class SgTypeTraitBuiltinOperator;
    1947             : class SgExpression;
    1948             : class SgTemplateVariableSymbol;
    1949             : class SgVariableSymbol;
    1950             : class SgFunctionTypeSymbol;
    1951             : class SgTemplateClassSymbol;
    1952             : class SgClassSymbol;
    1953             : class SgTemplateSymbol;
    1954             : class SgEnumSymbol;
    1955             : class SgEnumFieldSymbol;
    1956             : class SgTemplateTypedefSymbol;
    1957             : class SgTypedefSymbol;
    1958             : class SgTemplateFunctionSymbol;
    1959             : class SgTemplateMemberFunctionSymbol;
    1960             : class SgLabelSymbol;
    1961             : class SgDefaultSymbol;
    1962             : class SgNamespaceSymbol;
    1963             : class SgIntrinsicSymbol;
    1964             : class SgModuleSymbol;
    1965             : class SgInterfaceSymbol;
    1966             : class SgCommonSymbol;
    1967             : class SgRenameSymbol;
    1968             : class SgMemberFunctionSymbol;
    1969             : class SgFunctionSymbol;
    1970             : class SgAliasSymbol;
    1971             : class SgNonrealSymbol;
    1972             : class SgSymbol;
    1973             : class SgCommonBlockObject;
    1974             : class SgInitializedName;
    1975             : class SgLambdaCapture;
    1976             : class SgLambdaCaptureList;
    1977             : class SgOmpOrderedClause;
    1978             : class SgOmpNowaitClause;
    1979             : class SgOmpNogroupClause;
    1980             : class SgOmpReadClause;
    1981             : class SgOmpThreadsClause;
    1982             : class SgOmpSimdClause;
    1983             : class SgOmpReverseOffloadClause;
    1984             : class SgOmpExtImplementationDefinedRequirementClause;
    1985             : class SgOmpUnifiedAddressClause;
    1986             : class SgOmpUnifiedSharedMemoryClause;
    1987             : class SgOmpDynamicAllocatorsClause;
    1988             : class SgOmpAtomicDefaultMemOrderClause;
    1989             : class SgOmpWriteClause;
    1990             : class SgOmpUpdateClause;
    1991             : class SgOmpDepobjUpdateClause;
    1992             : class SgOmpDestroyClause;
    1993             : class SgOmpCaptureClause;
    1994             : class SgOmpSeqCstClause;
    1995             : class SgOmpAcqRelClause;
    1996             : class SgOmpReleaseClause;
    1997             : class SgOmpAcquireClause;
    1998             : class SgOmpRelaxedClause;
    1999             : class SgOmpParallelClause;
    2000             : class SgOmpSectionsClause;
    2001             : class SgOmpForClause;
    2002             : class SgOmpTaskgroupClause;
    2003             : class SgOmpBeginClause;
    2004             : class SgOmpEndClause;
    2005             : class SgOmpUntiedClause;
    2006             : class SgOmpMergeableClause;
    2007             : class SgOmpDefaultClause;
    2008             : class SgOmpAtomicClause;
    2009             : class SgOmpProcBindClause;
    2010             : class SgOmpOrderClause;
    2011             : class SgOmpBindClause;
    2012             : class SgOmpInbranchClause;
    2013             : class SgOmpNotinbranchClause;
    2014             : class SgOmpCollapseClause;
    2015             : class SgOmpIfClause;
    2016             : class SgOmpFinalClause;
    2017             : class SgOmpPriorityClause;
    2018             : class SgUpirNumUnitsField;
    2019             : class SgOmpNumTeamsClause;
    2020             : class SgOmpGrainsizeClause;
    2021             : class SgOmpDetachClause;
    2022             : class SgOmpNumTasksClause;
    2023             : class SgOmpHintClause;
    2024             : class SgOmpThreadLimitClause;
    2025             : class SgOmpNontemporalClause;
    2026             : class SgOmpInclusiveClause;
    2027             : class SgOmpExclusiveClause;
    2028             : class SgOmpIsDevicePtrClause;
    2029             : class SgOmpUseDevicePtrClause;
    2030             : class SgOmpUseDeviceAddrClause;
    2031             : class SgOmpDeviceClause;
    2032             : class SgOmpSafelenClause;
    2033             : class SgOmpSimdlenClause;
    2034             : class SgOmpPartialClause;
    2035             : class SgOmpFullClause;
    2036             : class SgOmpSizesClause;
    2037             : class SgUpirBranchField;
    2038             : class SgUpirNestedLevelField;
    2039             : class SgUpirNestedParentField;
    2040             : class SgUpirNestedChildField;
    2041             : class SgUpirSyncField;
    2042             : class SgUpirDataField;
    2043             : class SgUpirTargetField;
    2044             : class SgUpirDataItemField;
    2045             : class SgOmpExpressionClause;
    2046             : class SgOmpCopyprivateClause;
    2047             : class SgOmpPrivateClause;
    2048             : class SgOmpFirstprivateClause;
    2049             : class SgOmpSharedClause;
    2050             : class SgOmpCopyinClause;
    2051             : class SgOmpLastprivateClause;
    2052             : class SgOmpReductionClause;
    2053             : class SgOmpInReductionClause;
    2054             : class SgOmpTaskReductionClause;
    2055             : class SgOmpAllocateClause;
    2056             : class SgOmpDependClause;
    2057             : class SgOmpToClause;
    2058             : class SgOmpUsesAllocatorsClause;
    2059             : class SgOmpFromClause;
    2060             : class SgOmpAffinityClause;
    2061             : class SgOmpMapClause;
    2062             : class SgOmpLinearClause;
    2063             : class SgOmpUniformClause;
    2064             : class SgOmpAlignedClause;
    2065             : class SgOmpVariablesClause;
    2066             : class SgOmpScheduleClause;
    2067             : class SgOmpWhenClause;
    2068             : class SgOmpDistScheduleClause;
    2069             : class SgOmpDefaultmapClause;
    2070             : class SgOmpAllocatorClause;
    2071             : class SgOmpUsesAllocatorsDefination;
    2072             : class SgOmpClause;
    2073             : class SgRenamePair;
    2074             : class SgInterfaceBody;
    2075             : class SgHeaderFileBody;
    2076             : class SgLocatedNodeSupport;
    2077             : class SgToken;
    2078             : class SgLocatedNode;
    2079             : class SgNode;
    2080             : 
    2081             : 
    2082             : // Forward declaration of "<classname> is<classname> (SgNode* n)" friend functions.
    2083             : 
    2084             : // GNU g++ 4.1.0 requires these be declared outside of the class (because the friend declaration in the class is not enough).
    2085             : 
    2086             : 
    2087             : 
    2088             : 
    2089             : #include "rosedll.h"
    2090             : 
    2091             : 
    2092             : extern const uint8_t rose_ClassHierarchyCastTable[689][87] ;
    2093             : 
    2094             : ROSE_DLL_API SgName* isSgName(SgNode* node);
    2095             : ROSE_DLL_API const SgName* isSgName(const SgNode* node);
    2096             : #define IS_SgName_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgName::static_variant >> 3] & (1 << (SgName::static_variant & 7)))) ? ((SgName*) (node)) : NULL) : NULL)
    2097             : ROSE_DLL_API SgSymbolTable* isSgSymbolTable(SgNode* node);
    2098             : ROSE_DLL_API const SgSymbolTable* isSgSymbolTable(const SgNode* node);
    2099             : #define IS_SgSymbolTable_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSymbolTable::static_variant >> 3] & (1 << (SgSymbolTable::static_variant & 7)))) ? ((SgSymbolTable*) (node)) : NULL) : NULL)
    2100             : ROSE_DLL_API SgPragma* isSgPragma(SgNode* node);
    2101             : ROSE_DLL_API const SgPragma* isSgPragma(const SgNode* node);
    2102             : #define IS_SgPragma_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPragma::static_variant >> 3] & (1 << (SgPragma::static_variant & 7)))) ? ((SgPragma*) (node)) : NULL) : NULL)
    2103             : ROSE_DLL_API SgModifierNodes* isSgModifierNodes(SgNode* node);
    2104             : ROSE_DLL_API const SgModifierNodes* isSgModifierNodes(const SgNode* node);
    2105             : #define IS_SgModifierNodes_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgModifierNodes::static_variant >> 3] & (1 << (SgModifierNodes::static_variant & 7)))) ? ((SgModifierNodes*) (node)) : NULL) : NULL)
    2106             : ROSE_DLL_API SgConstVolatileModifier* isSgConstVolatileModifier(SgNode* node);
    2107             : ROSE_DLL_API const SgConstVolatileModifier* isSgConstVolatileModifier(const SgNode* node);
    2108             : #define IS_SgConstVolatileModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgConstVolatileModifier::static_variant >> 3] & (1 << (SgConstVolatileModifier::static_variant & 7)))) ? ((SgConstVolatileModifier*) (node)) : NULL) : NULL)
    2109             : ROSE_DLL_API SgStorageModifier* isSgStorageModifier(SgNode* node);
    2110             : ROSE_DLL_API const SgStorageModifier* isSgStorageModifier(const SgNode* node);
    2111             : #define IS_SgStorageModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStorageModifier::static_variant >> 3] & (1 << (SgStorageModifier::static_variant & 7)))) ? ((SgStorageModifier*) (node)) : NULL) : NULL)
    2112             : ROSE_DLL_API SgAccessModifier* isSgAccessModifier(SgNode* node);
    2113             : ROSE_DLL_API const SgAccessModifier* isSgAccessModifier(const SgNode* node);
    2114             : #define IS_SgAccessModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAccessModifier::static_variant >> 3] & (1 << (SgAccessModifier::static_variant & 7)))) ? ((SgAccessModifier*) (node)) : NULL) : NULL)
    2115             : ROSE_DLL_API SgFunctionModifier* isSgFunctionModifier(SgNode* node);
    2116             : ROSE_DLL_API const SgFunctionModifier* isSgFunctionModifier(const SgNode* node);
    2117             : #define IS_SgFunctionModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionModifier::static_variant >> 3] & (1 << (SgFunctionModifier::static_variant & 7)))) ? ((SgFunctionModifier*) (node)) : NULL) : NULL)
    2118             : ROSE_DLL_API SgUPC_AccessModifier* isSgUPC_AccessModifier(SgNode* node);
    2119             : ROSE_DLL_API const SgUPC_AccessModifier* isSgUPC_AccessModifier(const SgNode* node);
    2120             : #define IS_SgUPC_AccessModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUPC_AccessModifier::static_variant >> 3] & (1 << (SgUPC_AccessModifier::static_variant & 7)))) ? ((SgUPC_AccessModifier*) (node)) : NULL) : NULL)
    2121             : ROSE_DLL_API SgLinkageModifier* isSgLinkageModifier(SgNode* node);
    2122             : ROSE_DLL_API const SgLinkageModifier* isSgLinkageModifier(const SgNode* node);
    2123             : #define IS_SgLinkageModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLinkageModifier::static_variant >> 3] & (1 << (SgLinkageModifier::static_variant & 7)))) ? ((SgLinkageModifier*) (node)) : NULL) : NULL)
    2124             : ROSE_DLL_API SgSpecialFunctionModifier* isSgSpecialFunctionModifier(SgNode* node);
    2125             : ROSE_DLL_API const SgSpecialFunctionModifier* isSgSpecialFunctionModifier(const SgNode* node);
    2126             : #define IS_SgSpecialFunctionModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSpecialFunctionModifier::static_variant >> 3] & (1 << (SgSpecialFunctionModifier::static_variant & 7)))) ? ((SgSpecialFunctionModifier*) (node)) : NULL) : NULL)
    2127             : ROSE_DLL_API SgTypeModifier* isSgTypeModifier(SgNode* node);
    2128             : ROSE_DLL_API const SgTypeModifier* isSgTypeModifier(const SgNode* node);
    2129             : #define IS_SgTypeModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeModifier::static_variant >> 3] & (1 << (SgTypeModifier::static_variant & 7)))) ? ((SgTypeModifier*) (node)) : NULL) : NULL)
    2130             : ROSE_DLL_API SgElaboratedTypeModifier* isSgElaboratedTypeModifier(SgNode* node);
    2131             : ROSE_DLL_API const SgElaboratedTypeModifier* isSgElaboratedTypeModifier(const SgNode* node);
    2132             : #define IS_SgElaboratedTypeModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElaboratedTypeModifier::static_variant >> 3] & (1 << (SgElaboratedTypeModifier::static_variant & 7)))) ? ((SgElaboratedTypeModifier*) (node)) : NULL) : NULL)
    2133             : ROSE_DLL_API SgBaseClassModifier* isSgBaseClassModifier(SgNode* node);
    2134             : ROSE_DLL_API const SgBaseClassModifier* isSgBaseClassModifier(const SgNode* node);
    2135             : #define IS_SgBaseClassModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBaseClassModifier::static_variant >> 3] & (1 << (SgBaseClassModifier::static_variant & 7)))) ? ((SgBaseClassModifier*) (node)) : NULL) : NULL)
    2136             : ROSE_DLL_API SgDeclarationModifier* isSgDeclarationModifier(SgNode* node);
    2137             : ROSE_DLL_API const SgDeclarationModifier* isSgDeclarationModifier(const SgNode* node);
    2138             : #define IS_SgDeclarationModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDeclarationModifier::static_variant >> 3] & (1 << (SgDeclarationModifier::static_variant & 7)))) ? ((SgDeclarationModifier*) (node)) : NULL) : NULL)
    2139             : ROSE_DLL_API SgStructureModifier* isSgStructureModifier(SgNode* node);
    2140             : ROSE_DLL_API const SgStructureModifier* isSgStructureModifier(const SgNode* node);
    2141             : #define IS_SgStructureModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStructureModifier::static_variant >> 3] & (1 << (SgStructureModifier::static_variant & 7)))) ? ((SgStructureModifier*) (node)) : NULL) : NULL)
    2142             : ROSE_DLL_API SgOpenclAccessModeModifier* isSgOpenclAccessModeModifier(SgNode* node);
    2143             : ROSE_DLL_API const SgOpenclAccessModeModifier* isSgOpenclAccessModeModifier(const SgNode* node);
    2144             : #define IS_SgOpenclAccessModeModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOpenclAccessModeModifier::static_variant >> 3] & (1 << (SgOpenclAccessModeModifier::static_variant & 7)))) ? ((SgOpenclAccessModeModifier*) (node)) : NULL) : NULL)
    2145             : ROSE_DLL_API SgModifier* isSgModifier(SgNode* node);
    2146             : ROSE_DLL_API const SgModifier* isSgModifier(const SgNode* node);
    2147             : #define IS_SgModifier_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgModifier::static_variant >> 3] & (1 << (SgModifier::static_variant & 7)))) ? ((SgModifier*) (node)) : NULL) : NULL)
    2148             : ROSE_DLL_API Sg_File_Info* isSg_File_Info(SgNode* node);
    2149             : ROSE_DLL_API const Sg_File_Info* isSg_File_Info(const SgNode* node);
    2150             : #define IS_Sg_File_Info_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][Sg_File_Info::static_variant >> 3] & (1 << (Sg_File_Info::static_variant & 7)))) ? ((Sg_File_Info*) (node)) : NULL) : NULL)
    2151             : ROSE_DLL_API SgSourceFile* isSgSourceFile(SgNode* node);
    2152             : ROSE_DLL_API const SgSourceFile* isSgSourceFile(const SgNode* node);
    2153             : #define IS_SgSourceFile_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSourceFile::static_variant >> 3] & (1 << (SgSourceFile::static_variant & 7)))) ? ((SgSourceFile*) (node)) : NULL) : NULL)
    2154             : ROSE_DLL_API SgUnknownFile* isSgUnknownFile(SgNode* node);
    2155             : ROSE_DLL_API const SgUnknownFile* isSgUnknownFile(const SgNode* node);
    2156             : #define IS_SgUnknownFile_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnknownFile::static_variant >> 3] & (1 << (SgUnknownFile::static_variant & 7)))) ? ((SgUnknownFile*) (node)) : NULL) : NULL)
    2157             : ROSE_DLL_API SgFile* isSgFile(SgNode* node);
    2158             : ROSE_DLL_API const SgFile* isSgFile(const SgNode* node);
    2159             : #define IS_SgFile_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFile::static_variant >> 3] & (1 << (SgFile::static_variant & 7)))) ? ((SgFile*) (node)) : NULL) : NULL)
    2160             : ROSE_DLL_API SgFileList* isSgFileList(SgNode* node);
    2161             : ROSE_DLL_API const SgFileList* isSgFileList(const SgNode* node);
    2162             : #define IS_SgFileList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFileList::static_variant >> 3] & (1 << (SgFileList::static_variant & 7)))) ? ((SgFileList*) (node)) : NULL) : NULL)
    2163             : ROSE_DLL_API SgDirectory* isSgDirectory(SgNode* node);
    2164             : ROSE_DLL_API const SgDirectory* isSgDirectory(const SgNode* node);
    2165             : #define IS_SgDirectory_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDirectory::static_variant >> 3] & (1 << (SgDirectory::static_variant & 7)))) ? ((SgDirectory*) (node)) : NULL) : NULL)
    2166             : ROSE_DLL_API SgDirectoryList* isSgDirectoryList(SgNode* node);
    2167             : ROSE_DLL_API const SgDirectoryList* isSgDirectoryList(const SgNode* node);
    2168             : #define IS_SgDirectoryList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDirectoryList::static_variant >> 3] & (1 << (SgDirectoryList::static_variant & 7)))) ? ((SgDirectoryList*) (node)) : NULL) : NULL)
    2169             : ROSE_DLL_API SgProject* isSgProject(SgNode* node);
    2170             : ROSE_DLL_API const SgProject* isSgProject(const SgNode* node);
    2171             : #define IS_SgProject_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgProject::static_variant >> 3] & (1 << (SgProject::static_variant & 7)))) ? ((SgProject*) (node)) : NULL) : NULL)
    2172             : ROSE_DLL_API SgOptions* isSgOptions(SgNode* node);
    2173             : ROSE_DLL_API const SgOptions* isSgOptions(const SgNode* node);
    2174             : #define IS_SgOptions_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOptions::static_variant >> 3] & (1 << (SgOptions::static_variant & 7)))) ? ((SgOptions*) (node)) : NULL) : NULL)
    2175             : ROSE_DLL_API SgUnparse_Info* isSgUnparse_Info(SgNode* node);
    2176             : ROSE_DLL_API const SgUnparse_Info* isSgUnparse_Info(const SgNode* node);
    2177             : #define IS_SgUnparse_Info_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnparse_Info::static_variant >> 3] & (1 << (SgUnparse_Info::static_variant & 7)))) ? ((SgUnparse_Info*) (node)) : NULL) : NULL)
    2178             : ROSE_DLL_API SgIncludeFile* isSgIncludeFile(SgNode* node);
    2179             : ROSE_DLL_API const SgIncludeFile* isSgIncludeFile(const SgNode* node);
    2180             : #define IS_SgIncludeFile_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIncludeFile::static_variant >> 3] & (1 << (SgIncludeFile::static_variant & 7)))) ? ((SgIncludeFile*) (node)) : NULL) : NULL)
    2181             : ROSE_DLL_API SgFuncDecl_attr* isSgFuncDecl_attr(SgNode* node);
    2182             : ROSE_DLL_API const SgFuncDecl_attr* isSgFuncDecl_attr(const SgNode* node);
    2183             : #define IS_SgFuncDecl_attr_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFuncDecl_attr::static_variant >> 3] & (1 << (SgFuncDecl_attr::static_variant & 7)))) ? ((SgFuncDecl_attr*) (node)) : NULL) : NULL)
    2184             : ROSE_DLL_API SgClassDecl_attr* isSgClassDecl_attr(SgNode* node);
    2185             : ROSE_DLL_API const SgClassDecl_attr* isSgClassDecl_attr(const SgNode* node);
    2186             : #define IS_SgClassDecl_attr_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClassDecl_attr::static_variant >> 3] & (1 << (SgClassDecl_attr::static_variant & 7)))) ? ((SgClassDecl_attr*) (node)) : NULL) : NULL)
    2187             : ROSE_DLL_API SgTypedefSeq* isSgTypedefSeq(SgNode* node);
    2188             : ROSE_DLL_API const SgTypedefSeq* isSgTypedefSeq(const SgNode* node);
    2189             : #define IS_SgTypedefSeq_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypedefSeq::static_variant >> 3] & (1 << (SgTypedefSeq::static_variant & 7)))) ? ((SgTypedefSeq*) (node)) : NULL) : NULL)
    2190             : ROSE_DLL_API SgFunctionParameterTypeList* isSgFunctionParameterTypeList(SgNode* node);
    2191             : ROSE_DLL_API const SgFunctionParameterTypeList* isSgFunctionParameterTypeList(const SgNode* node);
    2192             : #define IS_SgFunctionParameterTypeList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionParameterTypeList::static_variant >> 3] & (1 << (SgFunctionParameterTypeList::static_variant & 7)))) ? ((SgFunctionParameterTypeList*) (node)) : NULL) : NULL)
    2193             : ROSE_DLL_API SgTemplateParameter* isSgTemplateParameter(SgNode* node);
    2194             : ROSE_DLL_API const SgTemplateParameter* isSgTemplateParameter(const SgNode* node);
    2195             : #define IS_SgTemplateParameter_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateParameter::static_variant >> 3] & (1 << (SgTemplateParameter::static_variant & 7)))) ? ((SgTemplateParameter*) (node)) : NULL) : NULL)
    2196             : ROSE_DLL_API SgTemplateArgument* isSgTemplateArgument(SgNode* node);
    2197             : ROSE_DLL_API const SgTemplateArgument* isSgTemplateArgument(const SgNode* node);
    2198             : #define IS_SgTemplateArgument_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateArgument::static_variant >> 3] & (1 << (SgTemplateArgument::static_variant & 7)))) ? ((SgTemplateArgument*) (node)) : NULL) : NULL)
    2199             : ROSE_DLL_API SgTemplateParameterList* isSgTemplateParameterList(SgNode* node);
    2200             : ROSE_DLL_API const SgTemplateParameterList* isSgTemplateParameterList(const SgNode* node);
    2201             : #define IS_SgTemplateParameterList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateParameterList::static_variant >> 3] & (1 << (SgTemplateParameterList::static_variant & 7)))) ? ((SgTemplateParameterList*) (node)) : NULL) : NULL)
    2202             : ROSE_DLL_API SgTemplateArgumentList* isSgTemplateArgumentList(SgNode* node);
    2203             : ROSE_DLL_API const SgTemplateArgumentList* isSgTemplateArgumentList(const SgNode* node);
    2204             : #define IS_SgTemplateArgumentList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateArgumentList::static_variant >> 3] & (1 << (SgTemplateArgumentList::static_variant & 7)))) ? ((SgTemplateArgumentList*) (node)) : NULL) : NULL)
    2205             : ROSE_DLL_API SgBitAttribute* isSgBitAttribute(SgNode* node);
    2206             : ROSE_DLL_API const SgBitAttribute* isSgBitAttribute(const SgNode* node);
    2207             : #define IS_SgBitAttribute_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBitAttribute::static_variant >> 3] & (1 << (SgBitAttribute::static_variant & 7)))) ? ((SgBitAttribute*) (node)) : NULL) : NULL)
    2208             : ROSE_DLL_API SgAttribute* isSgAttribute(SgNode* node);
    2209             : ROSE_DLL_API const SgAttribute* isSgAttribute(const SgNode* node);
    2210             : #define IS_SgAttribute_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAttribute::static_variant >> 3] & (1 << (SgAttribute::static_variant & 7)))) ? ((SgAttribute*) (node)) : NULL) : NULL)
    2211             : ROSE_DLL_API SgExpBaseClass* isSgExpBaseClass(SgNode* node);
    2212             : ROSE_DLL_API const SgExpBaseClass* isSgExpBaseClass(const SgNode* node);
    2213             : #define IS_SgExpBaseClass_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExpBaseClass::static_variant >> 3] & (1 << (SgExpBaseClass::static_variant & 7)))) ? ((SgExpBaseClass*) (node)) : NULL) : NULL)
    2214             : ROSE_DLL_API SgNonrealBaseClass* isSgNonrealBaseClass(SgNode* node);
    2215             : ROSE_DLL_API const SgNonrealBaseClass* isSgNonrealBaseClass(const SgNode* node);
    2216             : #define IS_SgNonrealBaseClass_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNonrealBaseClass::static_variant >> 3] & (1 << (SgNonrealBaseClass::static_variant & 7)))) ? ((SgNonrealBaseClass*) (node)) : NULL) : NULL)
    2217             : ROSE_DLL_API SgBaseClass* isSgBaseClass(SgNode* node);
    2218             : ROSE_DLL_API const SgBaseClass* isSgBaseClass(const SgNode* node);
    2219             : #define IS_SgBaseClass_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBaseClass::static_variant >> 3] & (1 << (SgBaseClass::static_variant & 7)))) ? ((SgBaseClass*) (node)) : NULL) : NULL)
    2220             : ROSE_DLL_API SgUndirectedGraphEdge* isSgUndirectedGraphEdge(SgNode* node);
    2221             : ROSE_DLL_API const SgUndirectedGraphEdge* isSgUndirectedGraphEdge(const SgNode* node);
    2222             : #define IS_SgUndirectedGraphEdge_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUndirectedGraphEdge::static_variant >> 3] & (1 << (SgUndirectedGraphEdge::static_variant & 7)))) ? ((SgUndirectedGraphEdge*) (node)) : NULL) : NULL)
    2223             : ROSE_DLL_API SgDirectedGraphEdge* isSgDirectedGraphEdge(SgNode* node);
    2224             : ROSE_DLL_API const SgDirectedGraphEdge* isSgDirectedGraphEdge(const SgNode* node);
    2225             : #define IS_SgDirectedGraphEdge_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDirectedGraphEdge::static_variant >> 3] & (1 << (SgDirectedGraphEdge::static_variant & 7)))) ? ((SgDirectedGraphEdge*) (node)) : NULL) : NULL)
    2226             : ROSE_DLL_API SgGraphNode* isSgGraphNode(SgNode* node);
    2227             : ROSE_DLL_API const SgGraphNode* isSgGraphNode(const SgNode* node);
    2228             : #define IS_SgGraphNode_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGraphNode::static_variant >> 3] & (1 << (SgGraphNode::static_variant & 7)))) ? ((SgGraphNode*) (node)) : NULL) : NULL)
    2229             : ROSE_DLL_API SgGraphEdge* isSgGraphEdge(SgNode* node);
    2230             : ROSE_DLL_API const SgGraphEdge* isSgGraphEdge(const SgNode* node);
    2231             : #define IS_SgGraphEdge_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGraphEdge::static_variant >> 3] & (1 << (SgGraphEdge::static_variant & 7)))) ? ((SgGraphEdge*) (node)) : NULL) : NULL)
    2232             : ROSE_DLL_API SgStringKeyedBidirectionalGraph* isSgStringKeyedBidirectionalGraph(SgNode* node);
    2233             : ROSE_DLL_API const SgStringKeyedBidirectionalGraph* isSgStringKeyedBidirectionalGraph(const SgNode* node);
    2234             : #define IS_SgStringKeyedBidirectionalGraph_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStringKeyedBidirectionalGraph::static_variant >> 3] & (1 << (SgStringKeyedBidirectionalGraph::static_variant & 7)))) ? ((SgStringKeyedBidirectionalGraph*) (node)) : NULL) : NULL)
    2235             : ROSE_DLL_API SgIntKeyedBidirectionalGraph* isSgIntKeyedBidirectionalGraph(SgNode* node);
    2236             : ROSE_DLL_API const SgIntKeyedBidirectionalGraph* isSgIntKeyedBidirectionalGraph(const SgNode* node);
    2237             : #define IS_SgIntKeyedBidirectionalGraph_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIntKeyedBidirectionalGraph::static_variant >> 3] & (1 << (SgIntKeyedBidirectionalGraph::static_variant & 7)))) ? ((SgIntKeyedBidirectionalGraph*) (node)) : NULL) : NULL)
    2238             : ROSE_DLL_API SgBidirectionalGraph* isSgBidirectionalGraph(SgNode* node);
    2239             : ROSE_DLL_API const SgBidirectionalGraph* isSgBidirectionalGraph(const SgNode* node);
    2240             : #define IS_SgBidirectionalGraph_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBidirectionalGraph::static_variant >> 3] & (1 << (SgBidirectionalGraph::static_variant & 7)))) ? ((SgBidirectionalGraph*) (node)) : NULL) : NULL)
    2241             : ROSE_DLL_API SgIncidenceDirectedGraph* isSgIncidenceDirectedGraph(SgNode* node);
    2242             : ROSE_DLL_API const SgIncidenceDirectedGraph* isSgIncidenceDirectedGraph(const SgNode* node);
    2243             : #define IS_SgIncidenceDirectedGraph_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIncidenceDirectedGraph::static_variant >> 3] & (1 << (SgIncidenceDirectedGraph::static_variant & 7)))) ? ((SgIncidenceDirectedGraph*) (node)) : NULL) : NULL)
    2244             : ROSE_DLL_API SgIncidenceUndirectedGraph* isSgIncidenceUndirectedGraph(SgNode* node);
    2245             : ROSE_DLL_API const SgIncidenceUndirectedGraph* isSgIncidenceUndirectedGraph(const SgNode* node);
    2246             : #define IS_SgIncidenceUndirectedGraph_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIncidenceUndirectedGraph::static_variant >> 3] & (1 << (SgIncidenceUndirectedGraph::static_variant & 7)))) ? ((SgIncidenceUndirectedGraph*) (node)) : NULL) : NULL)
    2247             : ROSE_DLL_API SgGraph* isSgGraph(SgNode* node);
    2248             : ROSE_DLL_API const SgGraph* isSgGraph(const SgNode* node);
    2249             : #define IS_SgGraph_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGraph::static_variant >> 3] & (1 << (SgGraph::static_variant & 7)))) ? ((SgGraph*) (node)) : NULL) : NULL)
    2250             : ROSE_DLL_API SgGraphNodeList* isSgGraphNodeList(SgNode* node);
    2251             : ROSE_DLL_API const SgGraphNodeList* isSgGraphNodeList(const SgNode* node);
    2252             : #define IS_SgGraphNodeList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGraphNodeList::static_variant >> 3] & (1 << (SgGraphNodeList::static_variant & 7)))) ? ((SgGraphNodeList*) (node)) : NULL) : NULL)
    2253             : ROSE_DLL_API SgGraphEdgeList* isSgGraphEdgeList(SgNode* node);
    2254             : ROSE_DLL_API const SgGraphEdgeList* isSgGraphEdgeList(const SgNode* node);
    2255             : #define IS_SgGraphEdgeList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGraphEdgeList::static_variant >> 3] & (1 << (SgGraphEdgeList::static_variant & 7)))) ? ((SgGraphEdgeList*) (node)) : NULL) : NULL)
    2256             : ROSE_DLL_API SgQualifiedName* isSgQualifiedName(SgNode* node);
    2257             : ROSE_DLL_API const SgQualifiedName* isSgQualifiedName(const SgNode* node);
    2258             : #define IS_SgQualifiedName_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgQualifiedName::static_variant >> 3] & (1 << (SgQualifiedName::static_variant & 7)))) ? ((SgQualifiedName*) (node)) : NULL) : NULL)
    2259             : ROSE_DLL_API SgNameGroup* isSgNameGroup(SgNode* node);
    2260             : ROSE_DLL_API const SgNameGroup* isSgNameGroup(const SgNode* node);
    2261             : #define IS_SgNameGroup_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNameGroup::static_variant >> 3] & (1 << (SgNameGroup::static_variant & 7)))) ? ((SgNameGroup*) (node)) : NULL) : NULL)
    2262             : ROSE_DLL_API SgDimensionObject* isSgDimensionObject(SgNode* node);
    2263             : ROSE_DLL_API const SgDimensionObject* isSgDimensionObject(const SgNode* node);
    2264             : #define IS_SgDimensionObject_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDimensionObject::static_variant >> 3] & (1 << (SgDimensionObject::static_variant & 7)))) ? ((SgDimensionObject*) (node)) : NULL) : NULL)
    2265             : ROSE_DLL_API SgDataStatementGroup* isSgDataStatementGroup(SgNode* node);
    2266             : ROSE_DLL_API const SgDataStatementGroup* isSgDataStatementGroup(const SgNode* node);
    2267             : #define IS_SgDataStatementGroup_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDataStatementGroup::static_variant >> 3] & (1 << (SgDataStatementGroup::static_variant & 7)))) ? ((SgDataStatementGroup*) (node)) : NULL) : NULL)
    2268             : ROSE_DLL_API SgDataStatementObject* isSgDataStatementObject(SgNode* node);
    2269             : ROSE_DLL_API const SgDataStatementObject* isSgDataStatementObject(const SgNode* node);
    2270             : #define IS_SgDataStatementObject_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDataStatementObject::static_variant >> 3] & (1 << (SgDataStatementObject::static_variant & 7)))) ? ((SgDataStatementObject*) (node)) : NULL) : NULL)
    2271             : ROSE_DLL_API SgDataStatementValue* isSgDataStatementValue(SgNode* node);
    2272             : ROSE_DLL_API const SgDataStatementValue* isSgDataStatementValue(const SgNode* node);
    2273             : #define IS_SgDataStatementValue_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDataStatementValue::static_variant >> 3] & (1 << (SgDataStatementValue::static_variant & 7)))) ? ((SgDataStatementValue*) (node)) : NULL) : NULL)
    2274             : ROSE_DLL_API SgFormatItem* isSgFormatItem(SgNode* node);
    2275             : ROSE_DLL_API const SgFormatItem* isSgFormatItem(const SgNode* node);
    2276             : #define IS_SgFormatItem_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFormatItem::static_variant >> 3] & (1 << (SgFormatItem::static_variant & 7)))) ? ((SgFormatItem*) (node)) : NULL) : NULL)
    2277             : ROSE_DLL_API SgFormatItemList* isSgFormatItemList(SgNode* node);
    2278             : ROSE_DLL_API const SgFormatItemList* isSgFormatItemList(const SgNode* node);
    2279             : #define IS_SgFormatItemList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFormatItemList::static_variant >> 3] & (1 << (SgFormatItemList::static_variant & 7)))) ? ((SgFormatItemList*) (node)) : NULL) : NULL)
    2280             : ROSE_DLL_API SgTypeTable* isSgTypeTable(SgNode* node);
    2281             : ROSE_DLL_API const SgTypeTable* isSgTypeTable(const SgNode* node);
    2282             : #define IS_SgTypeTable_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeTable::static_variant >> 3] & (1 << (SgTypeTable::static_variant & 7)))) ? ((SgTypeTable*) (node)) : NULL) : NULL)
    2283             : ROSE_DLL_API SgHeaderFileReport* isSgHeaderFileReport(SgNode* node);
    2284             : ROSE_DLL_API const SgHeaderFileReport* isSgHeaderFileReport(const SgNode* node);
    2285             : #define IS_SgHeaderFileReport_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgHeaderFileReport::static_variant >> 3] & (1 << (SgHeaderFileReport::static_variant & 7)))) ? ((SgHeaderFileReport*) (node)) : NULL) : NULL)
    2286             : ROSE_DLL_API SgSupport* isSgSupport(SgNode* node);
    2287             : ROSE_DLL_API const SgSupport* isSgSupport(const SgNode* node);
    2288             : #define IS_SgSupport_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSupport::static_variant >> 3] & (1 << (SgSupport::static_variant & 7)))) ? ((SgSupport*) (node)) : NULL) : NULL)
    2289             : ROSE_DLL_API SgTypeUnknown* isSgTypeUnknown(SgNode* node);
    2290             : ROSE_DLL_API const SgTypeUnknown* isSgTypeUnknown(const SgNode* node);
    2291             : #define IS_SgTypeUnknown_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeUnknown::static_variant >> 3] & (1 << (SgTypeUnknown::static_variant & 7)))) ? ((SgTypeUnknown*) (node)) : NULL) : NULL)
    2292             : ROSE_DLL_API SgTypeChar* isSgTypeChar(SgNode* node);
    2293             : ROSE_DLL_API const SgTypeChar* isSgTypeChar(const SgNode* node);
    2294             : #define IS_SgTypeChar_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeChar::static_variant >> 3] & (1 << (SgTypeChar::static_variant & 7)))) ? ((SgTypeChar*) (node)) : NULL) : NULL)
    2295             : ROSE_DLL_API SgTypeSignedChar* isSgTypeSignedChar(SgNode* node);
    2296             : ROSE_DLL_API const SgTypeSignedChar* isSgTypeSignedChar(const SgNode* node);
    2297             : #define IS_SgTypeSignedChar_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeSignedChar::static_variant >> 3] & (1 << (SgTypeSignedChar::static_variant & 7)))) ? ((SgTypeSignedChar*) (node)) : NULL) : NULL)
    2298             : ROSE_DLL_API SgTypeUnsignedChar* isSgTypeUnsignedChar(SgNode* node);
    2299             : ROSE_DLL_API const SgTypeUnsignedChar* isSgTypeUnsignedChar(const SgNode* node);
    2300             : #define IS_SgTypeUnsignedChar_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeUnsignedChar::static_variant >> 3] & (1 << (SgTypeUnsignedChar::static_variant & 7)))) ? ((SgTypeUnsignedChar*) (node)) : NULL) : NULL)
    2301             : ROSE_DLL_API SgTypeShort* isSgTypeShort(SgNode* node);
    2302             : ROSE_DLL_API const SgTypeShort* isSgTypeShort(const SgNode* node);
    2303             : #define IS_SgTypeShort_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeShort::static_variant >> 3] & (1 << (SgTypeShort::static_variant & 7)))) ? ((SgTypeShort*) (node)) : NULL) : NULL)
    2304             : ROSE_DLL_API SgTypeSignedShort* isSgTypeSignedShort(SgNode* node);
    2305             : ROSE_DLL_API const SgTypeSignedShort* isSgTypeSignedShort(const SgNode* node);
    2306             : #define IS_SgTypeSignedShort_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeSignedShort::static_variant >> 3] & (1 << (SgTypeSignedShort::static_variant & 7)))) ? ((SgTypeSignedShort*) (node)) : NULL) : NULL)
    2307             : ROSE_DLL_API SgTypeUnsignedShort* isSgTypeUnsignedShort(SgNode* node);
    2308             : ROSE_DLL_API const SgTypeUnsignedShort* isSgTypeUnsignedShort(const SgNode* node);
    2309             : #define IS_SgTypeUnsignedShort_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeUnsignedShort::static_variant >> 3] & (1 << (SgTypeUnsignedShort::static_variant & 7)))) ? ((SgTypeUnsignedShort*) (node)) : NULL) : NULL)
    2310             : ROSE_DLL_API SgTypeInt* isSgTypeInt(SgNode* node);
    2311             : ROSE_DLL_API const SgTypeInt* isSgTypeInt(const SgNode* node);
    2312             : #define IS_SgTypeInt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeInt::static_variant >> 3] & (1 << (SgTypeInt::static_variant & 7)))) ? ((SgTypeInt*) (node)) : NULL) : NULL)
    2313             : ROSE_DLL_API SgTypeSignedInt* isSgTypeSignedInt(SgNode* node);
    2314             : ROSE_DLL_API const SgTypeSignedInt* isSgTypeSignedInt(const SgNode* node);
    2315             : #define IS_SgTypeSignedInt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeSignedInt::static_variant >> 3] & (1 << (SgTypeSignedInt::static_variant & 7)))) ? ((SgTypeSignedInt*) (node)) : NULL) : NULL)
    2316             : ROSE_DLL_API SgTypeUnsignedInt* isSgTypeUnsignedInt(SgNode* node);
    2317             : ROSE_DLL_API const SgTypeUnsignedInt* isSgTypeUnsignedInt(const SgNode* node);
    2318             : #define IS_SgTypeUnsignedInt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeUnsignedInt::static_variant >> 3] & (1 << (SgTypeUnsignedInt::static_variant & 7)))) ? ((SgTypeUnsignedInt*) (node)) : NULL) : NULL)
    2319             : ROSE_DLL_API SgTypeLong* isSgTypeLong(SgNode* node);
    2320             : ROSE_DLL_API const SgTypeLong* isSgTypeLong(const SgNode* node);
    2321             : #define IS_SgTypeLong_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeLong::static_variant >> 3] & (1 << (SgTypeLong::static_variant & 7)))) ? ((SgTypeLong*) (node)) : NULL) : NULL)
    2322             : ROSE_DLL_API SgTypeSignedLong* isSgTypeSignedLong(SgNode* node);
    2323             : ROSE_DLL_API const SgTypeSignedLong* isSgTypeSignedLong(const SgNode* node);
    2324             : #define IS_SgTypeSignedLong_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeSignedLong::static_variant >> 3] & (1 << (SgTypeSignedLong::static_variant & 7)))) ? ((SgTypeSignedLong*) (node)) : NULL) : NULL)
    2325             : ROSE_DLL_API SgTypeUnsignedLong* isSgTypeUnsignedLong(SgNode* node);
    2326             : ROSE_DLL_API const SgTypeUnsignedLong* isSgTypeUnsignedLong(const SgNode* node);
    2327             : #define IS_SgTypeUnsignedLong_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeUnsignedLong::static_variant >> 3] & (1 << (SgTypeUnsignedLong::static_variant & 7)))) ? ((SgTypeUnsignedLong*) (node)) : NULL) : NULL)
    2328             : ROSE_DLL_API SgTypeVoid* isSgTypeVoid(SgNode* node);
    2329             : ROSE_DLL_API const SgTypeVoid* isSgTypeVoid(const SgNode* node);
    2330             : #define IS_SgTypeVoid_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeVoid::static_variant >> 3] & (1 << (SgTypeVoid::static_variant & 7)))) ? ((SgTypeVoid*) (node)) : NULL) : NULL)
    2331             : ROSE_DLL_API SgTypeGlobalVoid* isSgTypeGlobalVoid(SgNode* node);
    2332             : ROSE_DLL_API const SgTypeGlobalVoid* isSgTypeGlobalVoid(const SgNode* node);
    2333             : #define IS_SgTypeGlobalVoid_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeGlobalVoid::static_variant >> 3] & (1 << (SgTypeGlobalVoid::static_variant & 7)))) ? ((SgTypeGlobalVoid*) (node)) : NULL) : NULL)
    2334             : ROSE_DLL_API SgTypeWchar* isSgTypeWchar(SgNode* node);
    2335             : ROSE_DLL_API const SgTypeWchar* isSgTypeWchar(const SgNode* node);
    2336             : #define IS_SgTypeWchar_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeWchar::static_variant >> 3] & (1 << (SgTypeWchar::static_variant & 7)))) ? ((SgTypeWchar*) (node)) : NULL) : NULL)
    2337             : ROSE_DLL_API SgTypeFloat* isSgTypeFloat(SgNode* node);
    2338             : ROSE_DLL_API const SgTypeFloat* isSgTypeFloat(const SgNode* node);
    2339             : #define IS_SgTypeFloat_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeFloat::static_variant >> 3] & (1 << (SgTypeFloat::static_variant & 7)))) ? ((SgTypeFloat*) (node)) : NULL) : NULL)
    2340             : ROSE_DLL_API SgTypeDouble* isSgTypeDouble(SgNode* node);
    2341             : ROSE_DLL_API const SgTypeDouble* isSgTypeDouble(const SgNode* node);
    2342             : #define IS_SgTypeDouble_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeDouble::static_variant >> 3] & (1 << (SgTypeDouble::static_variant & 7)))) ? ((SgTypeDouble*) (node)) : NULL) : NULL)
    2343             : ROSE_DLL_API SgTypeLongLong* isSgTypeLongLong(SgNode* node);
    2344             : ROSE_DLL_API const SgTypeLongLong* isSgTypeLongLong(const SgNode* node);
    2345             : #define IS_SgTypeLongLong_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeLongLong::static_variant >> 3] & (1 << (SgTypeLongLong::static_variant & 7)))) ? ((SgTypeLongLong*) (node)) : NULL) : NULL)
    2346             : ROSE_DLL_API SgTypeSignedLongLong* isSgTypeSignedLongLong(SgNode* node);
    2347             : ROSE_DLL_API const SgTypeSignedLongLong* isSgTypeSignedLongLong(const SgNode* node);
    2348             : #define IS_SgTypeSignedLongLong_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeSignedLongLong::static_variant >> 3] & (1 << (SgTypeSignedLongLong::static_variant & 7)))) ? ((SgTypeSignedLongLong*) (node)) : NULL) : NULL)
    2349             : ROSE_DLL_API SgTypeUnsignedLongLong* isSgTypeUnsignedLongLong(SgNode* node);
    2350             : ROSE_DLL_API const SgTypeUnsignedLongLong* isSgTypeUnsignedLongLong(const SgNode* node);
    2351             : #define IS_SgTypeUnsignedLongLong_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeUnsignedLongLong::static_variant >> 3] & (1 << (SgTypeUnsignedLongLong::static_variant & 7)))) ? ((SgTypeUnsignedLongLong*) (node)) : NULL) : NULL)
    2352             : ROSE_DLL_API SgTypeLongDouble* isSgTypeLongDouble(SgNode* node);
    2353             : ROSE_DLL_API const SgTypeLongDouble* isSgTypeLongDouble(const SgNode* node);
    2354             : #define IS_SgTypeLongDouble_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeLongDouble::static_variant >> 3] & (1 << (SgTypeLongDouble::static_variant & 7)))) ? ((SgTypeLongDouble*) (node)) : NULL) : NULL)
    2355             : ROSE_DLL_API SgTypeFloat80* isSgTypeFloat80(SgNode* node);
    2356             : ROSE_DLL_API const SgTypeFloat80* isSgTypeFloat80(const SgNode* node);
    2357             : #define IS_SgTypeFloat80_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeFloat80::static_variant >> 3] & (1 << (SgTypeFloat80::static_variant & 7)))) ? ((SgTypeFloat80*) (node)) : NULL) : NULL)
    2358             : ROSE_DLL_API SgTypeFloat128* isSgTypeFloat128(SgNode* node);
    2359             : ROSE_DLL_API const SgTypeFloat128* isSgTypeFloat128(const SgNode* node);
    2360             : #define IS_SgTypeFloat128_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeFloat128::static_variant >> 3] & (1 << (SgTypeFloat128::static_variant & 7)))) ? ((SgTypeFloat128*) (node)) : NULL) : NULL)
    2361             : ROSE_DLL_API SgTypeString* isSgTypeString(SgNode* node);
    2362             : ROSE_DLL_API const SgTypeString* isSgTypeString(const SgNode* node);
    2363             : #define IS_SgTypeString_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeString::static_variant >> 3] & (1 << (SgTypeString::static_variant & 7)))) ? ((SgTypeString*) (node)) : NULL) : NULL)
    2364             : ROSE_DLL_API SgTypeBool* isSgTypeBool(SgNode* node);
    2365             : ROSE_DLL_API const SgTypeBool* isSgTypeBool(const SgNode* node);
    2366             : #define IS_SgTypeBool_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeBool::static_variant >> 3] & (1 << (SgTypeBool::static_variant & 7)))) ? ((SgTypeBool*) (node)) : NULL) : NULL)
    2367             : ROSE_DLL_API SgTypeFixed* isSgTypeFixed(SgNode* node);
    2368             : ROSE_DLL_API const SgTypeFixed* isSgTypeFixed(const SgNode* node);
    2369             : #define IS_SgTypeFixed_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeFixed::static_variant >> 3] & (1 << (SgTypeFixed::static_variant & 7)))) ? ((SgTypeFixed*) (node)) : NULL) : NULL)
    2370             : ROSE_DLL_API SgTypeMatrix* isSgTypeMatrix(SgNode* node);
    2371             : ROSE_DLL_API const SgTypeMatrix* isSgTypeMatrix(const SgNode* node);
    2372             : #define IS_SgTypeMatrix_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeMatrix::static_variant >> 3] & (1 << (SgTypeMatrix::static_variant & 7)))) ? ((SgTypeMatrix*) (node)) : NULL) : NULL)
    2373             : ROSE_DLL_API SgTypeTuple* isSgTypeTuple(SgNode* node);
    2374             : ROSE_DLL_API const SgTypeTuple* isSgTypeTuple(const SgNode* node);
    2375             : #define IS_SgTypeTuple_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeTuple::static_variant >> 3] & (1 << (SgTypeTuple::static_variant & 7)))) ? ((SgTypeTuple*) (node)) : NULL) : NULL)
    2376             : ROSE_DLL_API SgTypeNullptr* isSgTypeNullptr(SgNode* node);
    2377             : ROSE_DLL_API const SgTypeNullptr* isSgTypeNullptr(const SgNode* node);
    2378             : #define IS_SgTypeNullptr_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeNullptr::static_variant >> 3] & (1 << (SgTypeNullptr::static_variant & 7)))) ? ((SgTypeNullptr*) (node)) : NULL) : NULL)
    2379             : ROSE_DLL_API SgTypeComplex* isSgTypeComplex(SgNode* node);
    2380             : ROSE_DLL_API const SgTypeComplex* isSgTypeComplex(const SgNode* node);
    2381             : #define IS_SgTypeComplex_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeComplex::static_variant >> 3] & (1 << (SgTypeComplex::static_variant & 7)))) ? ((SgTypeComplex*) (node)) : NULL) : NULL)
    2382             : ROSE_DLL_API SgTypeImaginary* isSgTypeImaginary(SgNode* node);
    2383             : ROSE_DLL_API const SgTypeImaginary* isSgTypeImaginary(const SgNode* node);
    2384             : #define IS_SgTypeImaginary_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeImaginary::static_variant >> 3] & (1 << (SgTypeImaginary::static_variant & 7)))) ? ((SgTypeImaginary*) (node)) : NULL) : NULL)
    2385             : ROSE_DLL_API SgTypeDefault* isSgTypeDefault(SgNode* node);
    2386             : ROSE_DLL_API const SgTypeDefault* isSgTypeDefault(const SgNode* node);
    2387             : #define IS_SgTypeDefault_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeDefault::static_variant >> 3] & (1 << (SgTypeDefault::static_variant & 7)))) ? ((SgTypeDefault*) (node)) : NULL) : NULL)
    2388             : ROSE_DLL_API SgPointerMemberType* isSgPointerMemberType(SgNode* node);
    2389             : ROSE_DLL_API const SgPointerMemberType* isSgPointerMemberType(const SgNode* node);
    2390             : #define IS_SgPointerMemberType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPointerMemberType::static_variant >> 3] & (1 << (SgPointerMemberType::static_variant & 7)))) ? ((SgPointerMemberType*) (node)) : NULL) : NULL)
    2391             : ROSE_DLL_API SgReferenceType* isSgReferenceType(SgNode* node);
    2392             : ROSE_DLL_API const SgReferenceType* isSgReferenceType(const SgNode* node);
    2393             : #define IS_SgReferenceType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgReferenceType::static_variant >> 3] & (1 << (SgReferenceType::static_variant & 7)))) ? ((SgReferenceType*) (node)) : NULL) : NULL)
    2394             : ROSE_DLL_API SgRvalueReferenceType* isSgRvalueReferenceType(SgNode* node);
    2395             : ROSE_DLL_API const SgRvalueReferenceType* isSgRvalueReferenceType(const SgNode* node);
    2396             : #define IS_SgRvalueReferenceType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRvalueReferenceType::static_variant >> 3] & (1 << (SgRvalueReferenceType::static_variant & 7)))) ? ((SgRvalueReferenceType*) (node)) : NULL) : NULL)
    2397             : ROSE_DLL_API SgDeclType* isSgDeclType(SgNode* node);
    2398             : ROSE_DLL_API const SgDeclType* isSgDeclType(const SgNode* node);
    2399             : #define IS_SgDeclType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDeclType::static_variant >> 3] & (1 << (SgDeclType::static_variant & 7)))) ? ((SgDeclType*) (node)) : NULL) : NULL)
    2400             : ROSE_DLL_API SgTypeOfType* isSgTypeOfType(SgNode* node);
    2401             : ROSE_DLL_API const SgTypeOfType* isSgTypeOfType(const SgNode* node);
    2402             : #define IS_SgTypeOfType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeOfType::static_variant >> 3] & (1 << (SgTypeOfType::static_variant & 7)))) ? ((SgTypeOfType*) (node)) : NULL) : NULL)
    2403             : ROSE_DLL_API SgTypeCAFTeam* isSgTypeCAFTeam(SgNode* node);
    2404             : ROSE_DLL_API const SgTypeCAFTeam* isSgTypeCAFTeam(const SgNode* node);
    2405             : #define IS_SgTypeCAFTeam_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeCAFTeam::static_variant >> 3] & (1 << (SgTypeCAFTeam::static_variant & 7)))) ? ((SgTypeCAFTeam*) (node)) : NULL) : NULL)
    2406             : ROSE_DLL_API SgTypeUnsigned128bitInteger* isSgTypeUnsigned128bitInteger(SgNode* node);
    2407             : ROSE_DLL_API const SgTypeUnsigned128bitInteger* isSgTypeUnsigned128bitInteger(const SgNode* node);
    2408             : #define IS_SgTypeUnsigned128bitInteger_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeUnsigned128bitInteger::static_variant >> 3] & (1 << (SgTypeUnsigned128bitInteger::static_variant & 7)))) ? ((SgTypeUnsigned128bitInteger*) (node)) : NULL) : NULL)
    2409             : ROSE_DLL_API SgTypeSigned128bitInteger* isSgTypeSigned128bitInteger(SgNode* node);
    2410             : ROSE_DLL_API const SgTypeSigned128bitInteger* isSgTypeSigned128bitInteger(const SgNode* node);
    2411             : #define IS_SgTypeSigned128bitInteger_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeSigned128bitInteger::static_variant >> 3] & (1 << (SgTypeSigned128bitInteger::static_variant & 7)))) ? ((SgTypeSigned128bitInteger*) (node)) : NULL) : NULL)
    2412             : ROSE_DLL_API SgTypeLabel* isSgTypeLabel(SgNode* node);
    2413             : ROSE_DLL_API const SgTypeLabel* isSgTypeLabel(const SgNode* node);
    2414             : #define IS_SgTypeLabel_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeLabel::static_variant >> 3] & (1 << (SgTypeLabel::static_variant & 7)))) ? ((SgTypeLabel*) (node)) : NULL) : NULL)
    2415             : ROSE_DLL_API SgTemplateType* isSgTemplateType(SgNode* node);
    2416             : ROSE_DLL_API const SgTemplateType* isSgTemplateType(const SgNode* node);
    2417             : #define IS_SgTemplateType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateType::static_variant >> 3] & (1 << (SgTemplateType::static_variant & 7)))) ? ((SgTemplateType*) (node)) : NULL) : NULL)
    2418             : ROSE_DLL_API SgEnumType* isSgEnumType(SgNode* node);
    2419             : ROSE_DLL_API const SgEnumType* isSgEnumType(const SgNode* node);
    2420             : #define IS_SgEnumType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEnumType::static_variant >> 3] & (1 << (SgEnumType::static_variant & 7)))) ? ((SgEnumType*) (node)) : NULL) : NULL)
    2421             : ROSE_DLL_API SgTypedefType* isSgTypedefType(SgNode* node);
    2422             : ROSE_DLL_API const SgTypedefType* isSgTypedefType(const SgNode* node);
    2423             : #define IS_SgTypedefType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypedefType::static_variant >> 3] & (1 << (SgTypedefType::static_variant & 7)))) ? ((SgTypedefType*) (node)) : NULL) : NULL)
    2424             : ROSE_DLL_API SgNonrealType* isSgNonrealType(SgNode* node);
    2425             : ROSE_DLL_API const SgNonrealType* isSgNonrealType(const SgNode* node);
    2426             : #define IS_SgNonrealType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNonrealType::static_variant >> 3] & (1 << (SgNonrealType::static_variant & 7)))) ? ((SgNonrealType*) (node)) : NULL) : NULL)
    2427             : ROSE_DLL_API SgAutoType* isSgAutoType(SgNode* node);
    2428             : ROSE_DLL_API const SgAutoType* isSgAutoType(const SgNode* node);
    2429             : #define IS_SgAutoType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAutoType::static_variant >> 3] & (1 << (SgAutoType::static_variant & 7)))) ? ((SgAutoType*) (node)) : NULL) : NULL)
    2430             : ROSE_DLL_API SgModifierType* isSgModifierType(SgNode* node);
    2431             : ROSE_DLL_API const SgModifierType* isSgModifierType(const SgNode* node);
    2432             : #define IS_SgModifierType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgModifierType::static_variant >> 3] & (1 << (SgModifierType::static_variant & 7)))) ? ((SgModifierType*) (node)) : NULL) : NULL)
    2433             : ROSE_DLL_API SgPartialFunctionModifierType* isSgPartialFunctionModifierType(SgNode* node);
    2434             : ROSE_DLL_API const SgPartialFunctionModifierType* isSgPartialFunctionModifierType(const SgNode* node);
    2435             : #define IS_SgPartialFunctionModifierType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPartialFunctionModifierType::static_variant >> 3] & (1 << (SgPartialFunctionModifierType::static_variant & 7)))) ? ((SgPartialFunctionModifierType*) (node)) : NULL) : NULL)
    2436             : ROSE_DLL_API SgArrayType* isSgArrayType(SgNode* node);
    2437             : ROSE_DLL_API const SgArrayType* isSgArrayType(const SgNode* node);
    2438             : #define IS_SgArrayType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgArrayType::static_variant >> 3] & (1 << (SgArrayType::static_variant & 7)))) ? ((SgArrayType*) (node)) : NULL) : NULL)
    2439             : ROSE_DLL_API SgTypeEllipse* isSgTypeEllipse(SgNode* node);
    2440             : ROSE_DLL_API const SgTypeEllipse* isSgTypeEllipse(const SgNode* node);
    2441             : #define IS_SgTypeEllipse_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeEllipse::static_variant >> 3] & (1 << (SgTypeEllipse::static_variant & 7)))) ? ((SgTypeEllipse*) (node)) : NULL) : NULL)
    2442             : ROSE_DLL_API SgTypeCrayPointer* isSgTypeCrayPointer(SgNode* node);
    2443             : ROSE_DLL_API const SgTypeCrayPointer* isSgTypeCrayPointer(const SgNode* node);
    2444             : #define IS_SgTypeCrayPointer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeCrayPointer::static_variant >> 3] & (1 << (SgTypeCrayPointer::static_variant & 7)))) ? ((SgTypeCrayPointer*) (node)) : NULL) : NULL)
    2445             : ROSE_DLL_API SgPartialFunctionType* isSgPartialFunctionType(SgNode* node);
    2446             : ROSE_DLL_API const SgPartialFunctionType* isSgPartialFunctionType(const SgNode* node);
    2447             : #define IS_SgPartialFunctionType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPartialFunctionType::static_variant >> 3] & (1 << (SgPartialFunctionType::static_variant & 7)))) ? ((SgPartialFunctionType*) (node)) : NULL) : NULL)
    2448             : ROSE_DLL_API SgMemberFunctionType* isSgMemberFunctionType(SgNode* node);
    2449             : ROSE_DLL_API const SgMemberFunctionType* isSgMemberFunctionType(const SgNode* node);
    2450             : #define IS_SgMemberFunctionType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMemberFunctionType::static_variant >> 3] & (1 << (SgMemberFunctionType::static_variant & 7)))) ? ((SgMemberFunctionType*) (node)) : NULL) : NULL)
    2451             : ROSE_DLL_API SgFunctionType* isSgFunctionType(SgNode* node);
    2452             : ROSE_DLL_API const SgFunctionType* isSgFunctionType(const SgNode* node);
    2453             : #define IS_SgFunctionType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionType::static_variant >> 3] & (1 << (SgFunctionType::static_variant & 7)))) ? ((SgFunctionType*) (node)) : NULL) : NULL)
    2454             : ROSE_DLL_API SgPointerType* isSgPointerType(SgNode* node);
    2455             : ROSE_DLL_API const SgPointerType* isSgPointerType(const SgNode* node);
    2456             : #define IS_SgPointerType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPointerType::static_variant >> 3] & (1 << (SgPointerType::static_variant & 7)))) ? ((SgPointerType*) (node)) : NULL) : NULL)
    2457             : ROSE_DLL_API SgClassType* isSgClassType(SgNode* node);
    2458             : ROSE_DLL_API const SgClassType* isSgClassType(const SgNode* node);
    2459             : #define IS_SgClassType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClassType::static_variant >> 3] & (1 << (SgClassType::static_variant & 7)))) ? ((SgClassType*) (node)) : NULL) : NULL)
    2460             : ROSE_DLL_API SgNamedType* isSgNamedType(SgNode* node);
    2461             : ROSE_DLL_API const SgNamedType* isSgNamedType(const SgNode* node);
    2462             : #define IS_SgNamedType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNamedType::static_variant >> 3] & (1 << (SgNamedType::static_variant & 7)))) ? ((SgNamedType*) (node)) : NULL) : NULL)
    2463             : ROSE_DLL_API SgQualifiedNameType* isSgQualifiedNameType(SgNode* node);
    2464             : ROSE_DLL_API const SgQualifiedNameType* isSgQualifiedNameType(const SgNode* node);
    2465             : #define IS_SgQualifiedNameType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgQualifiedNameType::static_variant >> 3] & (1 << (SgQualifiedNameType::static_variant & 7)))) ? ((SgQualifiedNameType*) (node)) : NULL) : NULL)
    2466             : ROSE_DLL_API SgTypeChar16* isSgTypeChar16(SgNode* node);
    2467             : ROSE_DLL_API const SgTypeChar16* isSgTypeChar16(const SgNode* node);
    2468             : #define IS_SgTypeChar16_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeChar16::static_variant >> 3] & (1 << (SgTypeChar16::static_variant & 7)))) ? ((SgTypeChar16*) (node)) : NULL) : NULL)
    2469             : ROSE_DLL_API SgTypeChar32* isSgTypeChar32(SgNode* node);
    2470             : ROSE_DLL_API const SgTypeChar32* isSgTypeChar32(const SgNode* node);
    2471             : #define IS_SgTypeChar32_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeChar32::static_variant >> 3] & (1 << (SgTypeChar32::static_variant & 7)))) ? ((SgTypeChar32*) (node)) : NULL) : NULL)
    2472             : ROSE_DLL_API SgType* isSgType(SgNode* node);
    2473             : ROSE_DLL_API const SgType* isSgType(const SgNode* node);
    2474             : #define IS_SgType_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgType::static_variant >> 3] & (1 << (SgType::static_variant & 7)))) ? ((SgType*) (node)) : NULL) : NULL)
    2475             : ROSE_DLL_API SgForStatement* isSgForStatement(SgNode* node);
    2476             : ROSE_DLL_API const SgForStatement* isSgForStatement(const SgNode* node);
    2477             : #define IS_SgForStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgForStatement::static_variant >> 3] & (1 << (SgForStatement::static_variant & 7)))) ? ((SgForStatement*) (node)) : NULL) : NULL)
    2478             : ROSE_DLL_API SgForInitStatement* isSgForInitStatement(SgNode* node);
    2479             : ROSE_DLL_API const SgForInitStatement* isSgForInitStatement(const SgNode* node);
    2480             : #define IS_SgForInitStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgForInitStatement::static_variant >> 3] & (1 << (SgForInitStatement::static_variant & 7)))) ? ((SgForInitStatement*) (node)) : NULL) : NULL)
    2481             : ROSE_DLL_API SgRangeBasedForStatement* isSgRangeBasedForStatement(SgNode* node);
    2482             : ROSE_DLL_API const SgRangeBasedForStatement* isSgRangeBasedForStatement(const SgNode* node);
    2483             : #define IS_SgRangeBasedForStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRangeBasedForStatement::static_variant >> 3] & (1 << (SgRangeBasedForStatement::static_variant & 7)))) ? ((SgRangeBasedForStatement*) (node)) : NULL) : NULL)
    2484             : ROSE_DLL_API SgCatchStatementSeq* isSgCatchStatementSeq(SgNode* node);
    2485             : ROSE_DLL_API const SgCatchStatementSeq* isSgCatchStatementSeq(const SgNode* node);
    2486             : #define IS_SgCatchStatementSeq_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCatchStatementSeq::static_variant >> 3] & (1 << (SgCatchStatementSeq::static_variant & 7)))) ? ((SgCatchStatementSeq*) (node)) : NULL) : NULL)
    2487             : ROSE_DLL_API SgFunctionParameterList* isSgFunctionParameterList(SgNode* node);
    2488             : ROSE_DLL_API const SgFunctionParameterList* isSgFunctionParameterList(const SgNode* node);
    2489             : #define IS_SgFunctionParameterList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionParameterList::static_variant >> 3] & (1 << (SgFunctionParameterList::static_variant & 7)))) ? ((SgFunctionParameterList*) (node)) : NULL) : NULL)
    2490             : ROSE_DLL_API SgCtorInitializerList* isSgCtorInitializerList(SgNode* node);
    2491             : ROSE_DLL_API const SgCtorInitializerList* isSgCtorInitializerList(const SgNode* node);
    2492             : #define IS_SgCtorInitializerList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCtorInitializerList::static_variant >> 3] & (1 << (SgCtorInitializerList::static_variant & 7)))) ? ((SgCtorInitializerList*) (node)) : NULL) : NULL)
    2493             : ROSE_DLL_API SgBasicBlock* isSgBasicBlock(SgNode* node);
    2494             : ROSE_DLL_API const SgBasicBlock* isSgBasicBlock(const SgNode* node);
    2495             : #define IS_SgBasicBlock_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBasicBlock::static_variant >> 3] & (1 << (SgBasicBlock::static_variant & 7)))) ? ((SgBasicBlock*) (node)) : NULL) : NULL)
    2496             : ROSE_DLL_API SgGlobal* isSgGlobal(SgNode* node);
    2497             : ROSE_DLL_API const SgGlobal* isSgGlobal(const SgNode* node);
    2498             : #define IS_SgGlobal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGlobal::static_variant >> 3] & (1 << (SgGlobal::static_variant & 7)))) ? ((SgGlobal*) (node)) : NULL) : NULL)
    2499             : ROSE_DLL_API SgIfStmt* isSgIfStmt(SgNode* node);
    2500             : ROSE_DLL_API const SgIfStmt* isSgIfStmt(const SgNode* node);
    2501             : #define IS_SgIfStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIfStmt::static_variant >> 3] & (1 << (SgIfStmt::static_variant & 7)))) ? ((SgIfStmt*) (node)) : NULL) : NULL)
    2502             : ROSE_DLL_API SgWhileStmt* isSgWhileStmt(SgNode* node);
    2503             : ROSE_DLL_API const SgWhileStmt* isSgWhileStmt(const SgNode* node);
    2504             : #define IS_SgWhileStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgWhileStmt::static_variant >> 3] & (1 << (SgWhileStmt::static_variant & 7)))) ? ((SgWhileStmt*) (node)) : NULL) : NULL)
    2505             : ROSE_DLL_API SgDoWhileStmt* isSgDoWhileStmt(SgNode* node);
    2506             : ROSE_DLL_API const SgDoWhileStmt* isSgDoWhileStmt(const SgNode* node);
    2507             : #define IS_SgDoWhileStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDoWhileStmt::static_variant >> 3] & (1 << (SgDoWhileStmt::static_variant & 7)))) ? ((SgDoWhileStmt*) (node)) : NULL) : NULL)
    2508             : ROSE_DLL_API SgSwitchStatement* isSgSwitchStatement(SgNode* node);
    2509             : ROSE_DLL_API const SgSwitchStatement* isSgSwitchStatement(const SgNode* node);
    2510             : #define IS_SgSwitchStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSwitchStatement::static_variant >> 3] & (1 << (SgSwitchStatement::static_variant & 7)))) ? ((SgSwitchStatement*) (node)) : NULL) : NULL)
    2511             : ROSE_DLL_API SgCatchOptionStmt* isSgCatchOptionStmt(SgNode* node);
    2512             : ROSE_DLL_API const SgCatchOptionStmt* isSgCatchOptionStmt(const SgNode* node);
    2513             : #define IS_SgCatchOptionStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCatchOptionStmt::static_variant >> 3] & (1 << (SgCatchOptionStmt::static_variant & 7)))) ? ((SgCatchOptionStmt*) (node)) : NULL) : NULL)
    2514             : ROSE_DLL_API SgFunctionParameterScope* isSgFunctionParameterScope(SgNode* node);
    2515             : ROSE_DLL_API const SgFunctionParameterScope* isSgFunctionParameterScope(const SgNode* node);
    2516             : #define IS_SgFunctionParameterScope_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionParameterScope::static_variant >> 3] & (1 << (SgFunctionParameterScope::static_variant & 7)))) ? ((SgFunctionParameterScope*) (node)) : NULL) : NULL)
    2517             : ROSE_DLL_API SgDeclarationScope* isSgDeclarationScope(SgNode* node);
    2518             : ROSE_DLL_API const SgDeclarationScope* isSgDeclarationScope(const SgNode* node);
    2519             : #define IS_SgDeclarationScope_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDeclarationScope::static_variant >> 3] & (1 << (SgDeclarationScope::static_variant & 7)))) ? ((SgDeclarationScope*) (node)) : NULL) : NULL)
    2520             : ROSE_DLL_API SgVariableDefinition* isSgVariableDefinition(SgNode* node);
    2521             : ROSE_DLL_API const SgVariableDefinition* isSgVariableDefinition(const SgNode* node);
    2522             : #define IS_SgVariableDefinition_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVariableDefinition::static_variant >> 3] & (1 << (SgVariableDefinition::static_variant & 7)))) ? ((SgVariableDefinition*) (node)) : NULL) : NULL)
    2523             : ROSE_DLL_API SgStmtDeclarationStatement* isSgStmtDeclarationStatement(SgNode* node);
    2524             : ROSE_DLL_API const SgStmtDeclarationStatement* isSgStmtDeclarationStatement(const SgNode* node);
    2525             : #define IS_SgStmtDeclarationStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStmtDeclarationStatement::static_variant >> 3] & (1 << (SgStmtDeclarationStatement::static_variant & 7)))) ? ((SgStmtDeclarationStatement*) (node)) : NULL) : NULL)
    2526             : ROSE_DLL_API SgEnumDeclaration* isSgEnumDeclaration(SgNode* node);
    2527             : ROSE_DLL_API const SgEnumDeclaration* isSgEnumDeclaration(const SgNode* node);
    2528             : #define IS_SgEnumDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEnumDeclaration::static_variant >> 3] & (1 << (SgEnumDeclaration::static_variant & 7)))) ? ((SgEnumDeclaration*) (node)) : NULL) : NULL)
    2529             : ROSE_DLL_API SgAsmStmt* isSgAsmStmt(SgNode* node);
    2530             : ROSE_DLL_API const SgAsmStmt* isSgAsmStmt(const SgNode* node);
    2531             : #define IS_SgAsmStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAsmStmt::static_variant >> 3] & (1 << (SgAsmStmt::static_variant & 7)))) ? ((SgAsmStmt*) (node)) : NULL) : NULL)
    2532             : ROSE_DLL_API SgFunctionTypeTable* isSgFunctionTypeTable(SgNode* node);
    2533             : ROSE_DLL_API const SgFunctionTypeTable* isSgFunctionTypeTable(const SgNode* node);
    2534             : #define IS_SgFunctionTypeTable_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionTypeTable::static_variant >> 3] & (1 << (SgFunctionTypeTable::static_variant & 7)))) ? ((SgFunctionTypeTable*) (node)) : NULL) : NULL)
    2535             : ROSE_DLL_API SgExprStatement* isSgExprStatement(SgNode* node);
    2536             : ROSE_DLL_API const SgExprStatement* isSgExprStatement(const SgNode* node);
    2537             : #define IS_SgExprStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExprStatement::static_variant >> 3] & (1 << (SgExprStatement::static_variant & 7)))) ? ((SgExprStatement*) (node)) : NULL) : NULL)
    2538             : ROSE_DLL_API SgLabelStatement* isSgLabelStatement(SgNode* node);
    2539             : ROSE_DLL_API const SgLabelStatement* isSgLabelStatement(const SgNode* node);
    2540             : #define IS_SgLabelStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLabelStatement::static_variant >> 3] & (1 << (SgLabelStatement::static_variant & 7)))) ? ((SgLabelStatement*) (node)) : NULL) : NULL)
    2541             : ROSE_DLL_API SgCaseOptionStmt* isSgCaseOptionStmt(SgNode* node);
    2542             : ROSE_DLL_API const SgCaseOptionStmt* isSgCaseOptionStmt(const SgNode* node);
    2543             : #define IS_SgCaseOptionStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCaseOptionStmt::static_variant >> 3] & (1 << (SgCaseOptionStmt::static_variant & 7)))) ? ((SgCaseOptionStmt*) (node)) : NULL) : NULL)
    2544             : ROSE_DLL_API SgTryStmt* isSgTryStmt(SgNode* node);
    2545             : ROSE_DLL_API const SgTryStmt* isSgTryStmt(const SgNode* node);
    2546             : #define IS_SgTryStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTryStmt::static_variant >> 3] & (1 << (SgTryStmt::static_variant & 7)))) ? ((SgTryStmt*) (node)) : NULL) : NULL)
    2547             : ROSE_DLL_API SgDefaultOptionStmt* isSgDefaultOptionStmt(SgNode* node);
    2548             : ROSE_DLL_API const SgDefaultOptionStmt* isSgDefaultOptionStmt(const SgNode* node);
    2549             : #define IS_SgDefaultOptionStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDefaultOptionStmt::static_variant >> 3] & (1 << (SgDefaultOptionStmt::static_variant & 7)))) ? ((SgDefaultOptionStmt*) (node)) : NULL) : NULL)
    2550             : ROSE_DLL_API SgBreakStmt* isSgBreakStmt(SgNode* node);
    2551             : ROSE_DLL_API const SgBreakStmt* isSgBreakStmt(const SgNode* node);
    2552             : #define IS_SgBreakStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBreakStmt::static_variant >> 3] & (1 << (SgBreakStmt::static_variant & 7)))) ? ((SgBreakStmt*) (node)) : NULL) : NULL)
    2553             : ROSE_DLL_API SgContinueStmt* isSgContinueStmt(SgNode* node);
    2554             : ROSE_DLL_API const SgContinueStmt* isSgContinueStmt(const SgNode* node);
    2555             : #define IS_SgContinueStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgContinueStmt::static_variant >> 3] & (1 << (SgContinueStmt::static_variant & 7)))) ? ((SgContinueStmt*) (node)) : NULL) : NULL)
    2556             : ROSE_DLL_API SgReturnStmt* isSgReturnStmt(SgNode* node);
    2557             : ROSE_DLL_API const SgReturnStmt* isSgReturnStmt(const SgNode* node);
    2558             : #define IS_SgReturnStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgReturnStmt::static_variant >> 3] & (1 << (SgReturnStmt::static_variant & 7)))) ? ((SgReturnStmt*) (node)) : NULL) : NULL)
    2559             : ROSE_DLL_API SgGotoStatement* isSgGotoStatement(SgNode* node);
    2560             : ROSE_DLL_API const SgGotoStatement* isSgGotoStatement(const SgNode* node);
    2561             : #define IS_SgGotoStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGotoStatement::static_variant >> 3] & (1 << (SgGotoStatement::static_variant & 7)))) ? ((SgGotoStatement*) (node)) : NULL) : NULL)
    2562             : ROSE_DLL_API SgSpawnStmt* isSgSpawnStmt(SgNode* node);
    2563             : ROSE_DLL_API const SgSpawnStmt* isSgSpawnStmt(const SgNode* node);
    2564             : #define IS_SgSpawnStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSpawnStmt::static_variant >> 3] & (1 << (SgSpawnStmt::static_variant & 7)))) ? ((SgSpawnStmt*) (node)) : NULL) : NULL)
    2565             : ROSE_DLL_API SgTemplateTypedefDeclaration* isSgTemplateTypedefDeclaration(SgNode* node);
    2566             : ROSE_DLL_API const SgTemplateTypedefDeclaration* isSgTemplateTypedefDeclaration(const SgNode* node);
    2567             : #define IS_SgTemplateTypedefDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateTypedefDeclaration::static_variant >> 3] & (1 << (SgTemplateTypedefDeclaration::static_variant & 7)))) ? ((SgTemplateTypedefDeclaration*) (node)) : NULL) : NULL)
    2568             : ROSE_DLL_API SgTemplateInstantiationTypedefDeclaration* isSgTemplateInstantiationTypedefDeclaration(SgNode* node);
    2569             : ROSE_DLL_API const SgTemplateInstantiationTypedefDeclaration* isSgTemplateInstantiationTypedefDeclaration(const SgNode* node);
    2570             : #define IS_SgTemplateInstantiationTypedefDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateInstantiationTypedefDeclaration::static_variant >> 3] & (1 << (SgTemplateInstantiationTypedefDeclaration::static_variant & 7)))) ? ((SgTemplateInstantiationTypedefDeclaration*) (node)) : NULL) : NULL)
    2571             : ROSE_DLL_API SgTypedefDeclaration* isSgTypedefDeclaration(SgNode* node);
    2572             : ROSE_DLL_API const SgTypedefDeclaration* isSgTypedefDeclaration(const SgNode* node);
    2573             : #define IS_SgTypedefDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypedefDeclaration::static_variant >> 3] & (1 << (SgTypedefDeclaration::static_variant & 7)))) ? ((SgTypedefDeclaration*) (node)) : NULL) : NULL)
    2574             : ROSE_DLL_API SgNullStatement* isSgNullStatement(SgNode* node);
    2575             : ROSE_DLL_API const SgNullStatement* isSgNullStatement(const SgNode* node);
    2576             : #define IS_SgNullStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNullStatement::static_variant >> 3] & (1 << (SgNullStatement::static_variant & 7)))) ? ((SgNullStatement*) (node)) : NULL) : NULL)
    2577             : ROSE_DLL_API SgVariantStatement* isSgVariantStatement(SgNode* node);
    2578             : ROSE_DLL_API const SgVariantStatement* isSgVariantStatement(const SgNode* node);
    2579             : #define IS_SgVariantStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVariantStatement::static_variant >> 3] & (1 << (SgVariantStatement::static_variant & 7)))) ? ((SgVariantStatement*) (node)) : NULL) : NULL)
    2580             : ROSE_DLL_API SgPragmaDeclaration* isSgPragmaDeclaration(SgNode* node);
    2581             : ROSE_DLL_API const SgPragmaDeclaration* isSgPragmaDeclaration(const SgNode* node);
    2582             : #define IS_SgPragmaDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPragmaDeclaration::static_variant >> 3] & (1 << (SgPragmaDeclaration::static_variant & 7)))) ? ((SgPragmaDeclaration*) (node)) : NULL) : NULL)
    2583             : ROSE_DLL_API SgTemplateClassDeclaration* isSgTemplateClassDeclaration(SgNode* node);
    2584             : ROSE_DLL_API const SgTemplateClassDeclaration* isSgTemplateClassDeclaration(const SgNode* node);
    2585             : #define IS_SgTemplateClassDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateClassDeclaration::static_variant >> 3] & (1 << (SgTemplateClassDeclaration::static_variant & 7)))) ? ((SgTemplateClassDeclaration*) (node)) : NULL) : NULL)
    2586             : ROSE_DLL_API SgTemplateMemberFunctionDeclaration* isSgTemplateMemberFunctionDeclaration(SgNode* node);
    2587             : ROSE_DLL_API const SgTemplateMemberFunctionDeclaration* isSgTemplateMemberFunctionDeclaration(const SgNode* node);
    2588             : #define IS_SgTemplateMemberFunctionDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateMemberFunctionDeclaration::static_variant >> 3] & (1 << (SgTemplateMemberFunctionDeclaration::static_variant & 7)))) ? ((SgTemplateMemberFunctionDeclaration*) (node)) : NULL) : NULL)
    2589             : ROSE_DLL_API SgTemplateFunctionDeclaration* isSgTemplateFunctionDeclaration(SgNode* node);
    2590             : ROSE_DLL_API const SgTemplateFunctionDeclaration* isSgTemplateFunctionDeclaration(const SgNode* node);
    2591             : #define IS_SgTemplateFunctionDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateFunctionDeclaration::static_variant >> 3] & (1 << (SgTemplateFunctionDeclaration::static_variant & 7)))) ? ((SgTemplateFunctionDeclaration*) (node)) : NULL) : NULL)
    2592             : ROSE_DLL_API SgTemplateVariableDeclaration* isSgTemplateVariableDeclaration(SgNode* node);
    2593             : ROSE_DLL_API const SgTemplateVariableDeclaration* isSgTemplateVariableDeclaration(const SgNode* node);
    2594             : #define IS_SgTemplateVariableDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateVariableDeclaration::static_variant >> 3] & (1 << (SgTemplateVariableDeclaration::static_variant & 7)))) ? ((SgTemplateVariableDeclaration*) (node)) : NULL) : NULL)
    2595             : ROSE_DLL_API SgTemplateDeclaration* isSgTemplateDeclaration(SgNode* node);
    2596             : ROSE_DLL_API const SgTemplateDeclaration* isSgTemplateDeclaration(const SgNode* node);
    2597             : #define IS_SgTemplateDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateDeclaration::static_variant >> 3] & (1 << (SgTemplateDeclaration::static_variant & 7)))) ? ((SgTemplateDeclaration*) (node)) : NULL) : NULL)
    2598             : ROSE_DLL_API SgVariableDeclaration* isSgVariableDeclaration(SgNode* node);
    2599             : ROSE_DLL_API const SgVariableDeclaration* isSgVariableDeclaration(const SgNode* node);
    2600             : #define IS_SgVariableDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVariableDeclaration::static_variant >> 3] & (1 << (SgVariableDeclaration::static_variant & 7)))) ? ((SgVariableDeclaration*) (node)) : NULL) : NULL)
    2601             : ROSE_DLL_API SgTemplateInstantiationDecl* isSgTemplateInstantiationDecl(SgNode* node);
    2602             : ROSE_DLL_API const SgTemplateInstantiationDecl* isSgTemplateInstantiationDecl(const SgNode* node);
    2603             : #define IS_SgTemplateInstantiationDecl_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateInstantiationDecl::static_variant >> 3] & (1 << (SgTemplateInstantiationDecl::static_variant & 7)))) ? ((SgTemplateInstantiationDecl*) (node)) : NULL) : NULL)
    2604             : ROSE_DLL_API SgTemplateInstantiationDefn* isSgTemplateInstantiationDefn(SgNode* node);
    2605             : ROSE_DLL_API const SgTemplateInstantiationDefn* isSgTemplateInstantiationDefn(const SgNode* node);
    2606             : #define IS_SgTemplateInstantiationDefn_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateInstantiationDefn::static_variant >> 3] & (1 << (SgTemplateInstantiationDefn::static_variant & 7)))) ? ((SgTemplateInstantiationDefn*) (node)) : NULL) : NULL)
    2607             : ROSE_DLL_API SgTemplateInstantiationFunctionDecl* isSgTemplateInstantiationFunctionDecl(SgNode* node);
    2608             : ROSE_DLL_API const SgTemplateInstantiationFunctionDecl* isSgTemplateInstantiationFunctionDecl(const SgNode* node);
    2609             : #define IS_SgTemplateInstantiationFunctionDecl_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateInstantiationFunctionDecl::static_variant >> 3] & (1 << (SgTemplateInstantiationFunctionDecl::static_variant & 7)))) ? ((SgTemplateInstantiationFunctionDecl*) (node)) : NULL) : NULL)
    2610             : ROSE_DLL_API SgTemplateInstantiationMemberFunctionDecl* isSgTemplateInstantiationMemberFunctionDecl(SgNode* node);
    2611             : ROSE_DLL_API const SgTemplateInstantiationMemberFunctionDecl* isSgTemplateInstantiationMemberFunctionDecl(const SgNode* node);
    2612             : #define IS_SgTemplateInstantiationMemberFunctionDecl_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateInstantiationMemberFunctionDecl::static_variant >> 3] & (1 << (SgTemplateInstantiationMemberFunctionDecl::static_variant & 7)))) ? ((SgTemplateInstantiationMemberFunctionDecl*) (node)) : NULL) : NULL)
    2613             : ROSE_DLL_API SgNonrealDecl* isSgNonrealDecl(SgNode* node);
    2614             : ROSE_DLL_API const SgNonrealDecl* isSgNonrealDecl(const SgNode* node);
    2615             : #define IS_SgNonrealDecl_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNonrealDecl::static_variant >> 3] & (1 << (SgNonrealDecl::static_variant & 7)))) ? ((SgNonrealDecl*) (node)) : NULL) : NULL)
    2616             : ROSE_DLL_API SgWithStatement* isSgWithStatement(SgNode* node);
    2617             : ROSE_DLL_API const SgWithStatement* isSgWithStatement(const SgNode* node);
    2618             : #define IS_SgWithStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgWithStatement::static_variant >> 3] & (1 << (SgWithStatement::static_variant & 7)))) ? ((SgWithStatement*) (node)) : NULL) : NULL)
    2619             : ROSE_DLL_API SgPassStatement* isSgPassStatement(SgNode* node);
    2620             : ROSE_DLL_API const SgPassStatement* isSgPassStatement(const SgNode* node);
    2621             : #define IS_SgPassStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPassStatement::static_variant >> 3] & (1 << (SgPassStatement::static_variant & 7)))) ? ((SgPassStatement*) (node)) : NULL) : NULL)
    2622             : ROSE_DLL_API SgAssertStmt* isSgAssertStmt(SgNode* node);
    2623             : ROSE_DLL_API const SgAssertStmt* isSgAssertStmt(const SgNode* node);
    2624             : #define IS_SgAssertStmt_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAssertStmt::static_variant >> 3] & (1 << (SgAssertStmt::static_variant & 7)))) ? ((SgAssertStmt*) (node)) : NULL) : NULL)
    2625             : ROSE_DLL_API SgExecStatement* isSgExecStatement(SgNode* node);
    2626             : ROSE_DLL_API const SgExecStatement* isSgExecStatement(const SgNode* node);
    2627             : #define IS_SgExecStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExecStatement::static_variant >> 3] & (1 << (SgExecStatement::static_variant & 7)))) ? ((SgExecStatement*) (node)) : NULL) : NULL)
    2628             : ROSE_DLL_API SgProgramHeaderStatement* isSgProgramHeaderStatement(SgNode* node);
    2629             : ROSE_DLL_API const SgProgramHeaderStatement* isSgProgramHeaderStatement(const SgNode* node);
    2630             : #define IS_SgProgramHeaderStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgProgramHeaderStatement::static_variant >> 3] & (1 << (SgProgramHeaderStatement::static_variant & 7)))) ? ((SgProgramHeaderStatement*) (node)) : NULL) : NULL)
    2631             : ROSE_DLL_API SgProcedureHeaderStatement* isSgProcedureHeaderStatement(SgNode* node);
    2632             : ROSE_DLL_API const SgProcedureHeaderStatement* isSgProcedureHeaderStatement(const SgNode* node);
    2633             : #define IS_SgProcedureHeaderStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgProcedureHeaderStatement::static_variant >> 3] & (1 << (SgProcedureHeaderStatement::static_variant & 7)))) ? ((SgProcedureHeaderStatement*) (node)) : NULL) : NULL)
    2634             : ROSE_DLL_API SgEntryStatement* isSgEntryStatement(SgNode* node);
    2635             : ROSE_DLL_API const SgEntryStatement* isSgEntryStatement(const SgNode* node);
    2636             : #define IS_SgEntryStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEntryStatement::static_variant >> 3] & (1 << (SgEntryStatement::static_variant & 7)))) ? ((SgEntryStatement*) (node)) : NULL) : NULL)
    2637             : ROSE_DLL_API SgFortranNonblockedDo* isSgFortranNonblockedDo(SgNode* node);
    2638             : ROSE_DLL_API const SgFortranNonblockedDo* isSgFortranNonblockedDo(const SgNode* node);
    2639             : #define IS_SgFortranNonblockedDo_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFortranNonblockedDo::static_variant >> 3] & (1 << (SgFortranNonblockedDo::static_variant & 7)))) ? ((SgFortranNonblockedDo*) (node)) : NULL) : NULL)
    2640             : ROSE_DLL_API SgInterfaceStatement* isSgInterfaceStatement(SgNode* node);
    2641             : ROSE_DLL_API const SgInterfaceStatement* isSgInterfaceStatement(const SgNode* node);
    2642             : #define IS_SgInterfaceStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgInterfaceStatement::static_variant >> 3] & (1 << (SgInterfaceStatement::static_variant & 7)))) ? ((SgInterfaceStatement*) (node)) : NULL) : NULL)
    2643             : ROSE_DLL_API SgParameterStatement* isSgParameterStatement(SgNode* node);
    2644             : ROSE_DLL_API const SgParameterStatement* isSgParameterStatement(const SgNode* node);
    2645             : #define IS_SgParameterStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgParameterStatement::static_variant >> 3] & (1 << (SgParameterStatement::static_variant & 7)))) ? ((SgParameterStatement*) (node)) : NULL) : NULL)
    2646             : ROSE_DLL_API SgCommonBlock* isSgCommonBlock(SgNode* node);
    2647             : ROSE_DLL_API const SgCommonBlock* isSgCommonBlock(const SgNode* node);
    2648             : #define IS_SgCommonBlock_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCommonBlock::static_variant >> 3] & (1 << (SgCommonBlock::static_variant & 7)))) ? ((SgCommonBlock*) (node)) : NULL) : NULL)
    2649             : ROSE_DLL_API SgModuleStatement* isSgModuleStatement(SgNode* node);
    2650             : ROSE_DLL_API const SgModuleStatement* isSgModuleStatement(const SgNode* node);
    2651             : #define IS_SgModuleStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgModuleStatement::static_variant >> 3] & (1 << (SgModuleStatement::static_variant & 7)))) ? ((SgModuleStatement*) (node)) : NULL) : NULL)
    2652             : ROSE_DLL_API SgUseStatement* isSgUseStatement(SgNode* node);
    2653             : ROSE_DLL_API const SgUseStatement* isSgUseStatement(const SgNode* node);
    2654             : #define IS_SgUseStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUseStatement::static_variant >> 3] & (1 << (SgUseStatement::static_variant & 7)))) ? ((SgUseStatement*) (node)) : NULL) : NULL)
    2655             : ROSE_DLL_API SgProcessControlStatement* isSgProcessControlStatement(SgNode* node);
    2656             : ROSE_DLL_API const SgProcessControlStatement* isSgProcessControlStatement(const SgNode* node);
    2657             : #define IS_SgProcessControlStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgProcessControlStatement::static_variant >> 3] & (1 << (SgProcessControlStatement::static_variant & 7)))) ? ((SgProcessControlStatement*) (node)) : NULL) : NULL)
    2658             : ROSE_DLL_API SgPrintStatement* isSgPrintStatement(SgNode* node);
    2659             : ROSE_DLL_API const SgPrintStatement* isSgPrintStatement(const SgNode* node);
    2660             : #define IS_SgPrintStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPrintStatement::static_variant >> 3] & (1 << (SgPrintStatement::static_variant & 7)))) ? ((SgPrintStatement*) (node)) : NULL) : NULL)
    2661             : ROSE_DLL_API SgReadStatement* isSgReadStatement(SgNode* node);
    2662             : ROSE_DLL_API const SgReadStatement* isSgReadStatement(const SgNode* node);
    2663             : #define IS_SgReadStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgReadStatement::static_variant >> 3] & (1 << (SgReadStatement::static_variant & 7)))) ? ((SgReadStatement*) (node)) : NULL) : NULL)
    2664             : ROSE_DLL_API SgWriteStatement* isSgWriteStatement(SgNode* node);
    2665             : ROSE_DLL_API const SgWriteStatement* isSgWriteStatement(const SgNode* node);
    2666             : #define IS_SgWriteStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgWriteStatement::static_variant >> 3] & (1 << (SgWriteStatement::static_variant & 7)))) ? ((SgWriteStatement*) (node)) : NULL) : NULL)
    2667             : ROSE_DLL_API SgOpenStatement* isSgOpenStatement(SgNode* node);
    2668             : ROSE_DLL_API const SgOpenStatement* isSgOpenStatement(const SgNode* node);
    2669             : #define IS_SgOpenStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOpenStatement::static_variant >> 3] & (1 << (SgOpenStatement::static_variant & 7)))) ? ((SgOpenStatement*) (node)) : NULL) : NULL)
    2670             : ROSE_DLL_API SgCloseStatement* isSgCloseStatement(SgNode* node);
    2671             : ROSE_DLL_API const SgCloseStatement* isSgCloseStatement(const SgNode* node);
    2672             : #define IS_SgCloseStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCloseStatement::static_variant >> 3] & (1 << (SgCloseStatement::static_variant & 7)))) ? ((SgCloseStatement*) (node)) : NULL) : NULL)
    2673             : ROSE_DLL_API SgInquireStatement* isSgInquireStatement(SgNode* node);
    2674             : ROSE_DLL_API const SgInquireStatement* isSgInquireStatement(const SgNode* node);
    2675             : #define IS_SgInquireStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgInquireStatement::static_variant >> 3] & (1 << (SgInquireStatement::static_variant & 7)))) ? ((SgInquireStatement*) (node)) : NULL) : NULL)
    2676             : ROSE_DLL_API SgFlushStatement* isSgFlushStatement(SgNode* node);
    2677             : ROSE_DLL_API const SgFlushStatement* isSgFlushStatement(const SgNode* node);
    2678             : #define IS_SgFlushStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFlushStatement::static_variant >> 3] & (1 << (SgFlushStatement::static_variant & 7)))) ? ((SgFlushStatement*) (node)) : NULL) : NULL)
    2679             : ROSE_DLL_API SgBackspaceStatement* isSgBackspaceStatement(SgNode* node);
    2680             : ROSE_DLL_API const SgBackspaceStatement* isSgBackspaceStatement(const SgNode* node);
    2681             : #define IS_SgBackspaceStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBackspaceStatement::static_variant >> 3] & (1 << (SgBackspaceStatement::static_variant & 7)))) ? ((SgBackspaceStatement*) (node)) : NULL) : NULL)
    2682             : ROSE_DLL_API SgRewindStatement* isSgRewindStatement(SgNode* node);
    2683             : ROSE_DLL_API const SgRewindStatement* isSgRewindStatement(const SgNode* node);
    2684             : #define IS_SgRewindStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRewindStatement::static_variant >> 3] & (1 << (SgRewindStatement::static_variant & 7)))) ? ((SgRewindStatement*) (node)) : NULL) : NULL)
    2685             : ROSE_DLL_API SgEndfileStatement* isSgEndfileStatement(SgNode* node);
    2686             : ROSE_DLL_API const SgEndfileStatement* isSgEndfileStatement(const SgNode* node);
    2687             : #define IS_SgEndfileStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEndfileStatement::static_variant >> 3] & (1 << (SgEndfileStatement::static_variant & 7)))) ? ((SgEndfileStatement*) (node)) : NULL) : NULL)
    2688             : ROSE_DLL_API SgWaitStatement* isSgWaitStatement(SgNode* node);
    2689             : ROSE_DLL_API const SgWaitStatement* isSgWaitStatement(const SgNode* node);
    2690             : #define IS_SgWaitStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgWaitStatement::static_variant >> 3] & (1 << (SgWaitStatement::static_variant & 7)))) ? ((SgWaitStatement*) (node)) : NULL) : NULL)
    2691             : ROSE_DLL_API SgCAFWithTeamStatement* isSgCAFWithTeamStatement(SgNode* node);
    2692             : ROSE_DLL_API const SgCAFWithTeamStatement* isSgCAFWithTeamStatement(const SgNode* node);
    2693             : #define IS_SgCAFWithTeamStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCAFWithTeamStatement::static_variant >> 3] & (1 << (SgCAFWithTeamStatement::static_variant & 7)))) ? ((SgCAFWithTeamStatement*) (node)) : NULL) : NULL)
    2694             : ROSE_DLL_API SgFormatStatement* isSgFormatStatement(SgNode* node);
    2695             : ROSE_DLL_API const SgFormatStatement* isSgFormatStatement(const SgNode* node);
    2696             : #define IS_SgFormatStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFormatStatement::static_variant >> 3] & (1 << (SgFormatStatement::static_variant & 7)))) ? ((SgFormatStatement*) (node)) : NULL) : NULL)
    2697             : ROSE_DLL_API SgFortranDo* isSgFortranDo(SgNode* node);
    2698             : ROSE_DLL_API const SgFortranDo* isSgFortranDo(const SgNode* node);
    2699             : #define IS_SgFortranDo_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFortranDo::static_variant >> 3] & (1 << (SgFortranDo::static_variant & 7)))) ? ((SgFortranDo*) (node)) : NULL) : NULL)
    2700             : ROSE_DLL_API SgForAllStatement* isSgForAllStatement(SgNode* node);
    2701             : ROSE_DLL_API const SgForAllStatement* isSgForAllStatement(const SgNode* node);
    2702             : #define IS_SgForAllStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgForAllStatement::static_variant >> 3] & (1 << (SgForAllStatement::static_variant & 7)))) ? ((SgForAllStatement*) (node)) : NULL) : NULL)
    2703             : ROSE_DLL_API SgIOStatement* isSgIOStatement(SgNode* node);
    2704             : ROSE_DLL_API const SgIOStatement* isSgIOStatement(const SgNode* node);
    2705             : #define IS_SgIOStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIOStatement::static_variant >> 3] & (1 << (SgIOStatement::static_variant & 7)))) ? ((SgIOStatement*) (node)) : NULL) : NULL)
    2706             : ROSE_DLL_API SgSyncAllStatement* isSgSyncAllStatement(SgNode* node);
    2707             : ROSE_DLL_API const SgSyncAllStatement* isSgSyncAllStatement(const SgNode* node);
    2708             : #define IS_SgSyncAllStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSyncAllStatement::static_variant >> 3] & (1 << (SgSyncAllStatement::static_variant & 7)))) ? ((SgSyncAllStatement*) (node)) : NULL) : NULL)
    2709             : ROSE_DLL_API SgSyncImagesStatement* isSgSyncImagesStatement(SgNode* node);
    2710             : ROSE_DLL_API const SgSyncImagesStatement* isSgSyncImagesStatement(const SgNode* node);
    2711             : #define IS_SgSyncImagesStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSyncImagesStatement::static_variant >> 3] & (1 << (SgSyncImagesStatement::static_variant & 7)))) ? ((SgSyncImagesStatement*) (node)) : NULL) : NULL)
    2712             : ROSE_DLL_API SgSyncMemoryStatement* isSgSyncMemoryStatement(SgNode* node);
    2713             : ROSE_DLL_API const SgSyncMemoryStatement* isSgSyncMemoryStatement(const SgNode* node);
    2714             : #define IS_SgSyncMemoryStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSyncMemoryStatement::static_variant >> 3] & (1 << (SgSyncMemoryStatement::static_variant & 7)))) ? ((SgSyncMemoryStatement*) (node)) : NULL) : NULL)
    2715             : ROSE_DLL_API SgSyncTeamStatement* isSgSyncTeamStatement(SgNode* node);
    2716             : ROSE_DLL_API const SgSyncTeamStatement* isSgSyncTeamStatement(const SgNode* node);
    2717             : #define IS_SgSyncTeamStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSyncTeamStatement::static_variant >> 3] & (1 << (SgSyncTeamStatement::static_variant & 7)))) ? ((SgSyncTeamStatement*) (node)) : NULL) : NULL)
    2718             : ROSE_DLL_API SgLockStatement* isSgLockStatement(SgNode* node);
    2719             : ROSE_DLL_API const SgLockStatement* isSgLockStatement(const SgNode* node);
    2720             : #define IS_SgLockStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLockStatement::static_variant >> 3] & (1 << (SgLockStatement::static_variant & 7)))) ? ((SgLockStatement*) (node)) : NULL) : NULL)
    2721             : ROSE_DLL_API SgUnlockStatement* isSgUnlockStatement(SgNode* node);
    2722             : ROSE_DLL_API const SgUnlockStatement* isSgUnlockStatement(const SgNode* node);
    2723             : #define IS_SgUnlockStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnlockStatement::static_variant >> 3] & (1 << (SgUnlockStatement::static_variant & 7)))) ? ((SgUnlockStatement*) (node)) : NULL) : NULL)
    2724             : ROSE_DLL_API SgImageControlStatement* isSgImageControlStatement(SgNode* node);
    2725             : ROSE_DLL_API const SgImageControlStatement* isSgImageControlStatement(const SgNode* node);
    2726             : #define IS_SgImageControlStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgImageControlStatement::static_variant >> 3] & (1 << (SgImageControlStatement::static_variant & 7)))) ? ((SgImageControlStatement*) (node)) : NULL) : NULL)
    2727             : ROSE_DLL_API SgUpcNotifyStatement* isSgUpcNotifyStatement(SgNode* node);
    2728             : ROSE_DLL_API const SgUpcNotifyStatement* isSgUpcNotifyStatement(const SgNode* node);
    2729             : #define IS_SgUpcNotifyStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcNotifyStatement::static_variant >> 3] & (1 << (SgUpcNotifyStatement::static_variant & 7)))) ? ((SgUpcNotifyStatement*) (node)) : NULL) : NULL)
    2730             : ROSE_DLL_API SgUpcWaitStatement* isSgUpcWaitStatement(SgNode* node);
    2731             : ROSE_DLL_API const SgUpcWaitStatement* isSgUpcWaitStatement(const SgNode* node);
    2732             : #define IS_SgUpcWaitStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcWaitStatement::static_variant >> 3] & (1 << (SgUpcWaitStatement::static_variant & 7)))) ? ((SgUpcWaitStatement*) (node)) : NULL) : NULL)
    2733             : ROSE_DLL_API SgUpcBarrierStatement* isSgUpcBarrierStatement(SgNode* node);
    2734             : ROSE_DLL_API const SgUpcBarrierStatement* isSgUpcBarrierStatement(const SgNode* node);
    2735             : #define IS_SgUpcBarrierStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcBarrierStatement::static_variant >> 3] & (1 << (SgUpcBarrierStatement::static_variant & 7)))) ? ((SgUpcBarrierStatement*) (node)) : NULL) : NULL)
    2736             : ROSE_DLL_API SgUpcFenceStatement* isSgUpcFenceStatement(SgNode* node);
    2737             : ROSE_DLL_API const SgUpcFenceStatement* isSgUpcFenceStatement(const SgNode* node);
    2738             : #define IS_SgUpcFenceStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcFenceStatement::static_variant >> 3] & (1 << (SgUpcFenceStatement::static_variant & 7)))) ? ((SgUpcFenceStatement*) (node)) : NULL) : NULL)
    2739             : ROSE_DLL_API SgUpcForAllStatement* isSgUpcForAllStatement(SgNode* node);
    2740             : ROSE_DLL_API const SgUpcForAllStatement* isSgUpcForAllStatement(const SgNode* node);
    2741             : #define IS_SgUpcForAllStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcForAllStatement::static_variant >> 3] & (1 << (SgUpcForAllStatement::static_variant & 7)))) ? ((SgUpcForAllStatement*) (node)) : NULL) : NULL)
    2742             : ROSE_DLL_API SgUpirSpmdStatement* isSgUpirSpmdStatement(SgNode* node);
    2743             : ROSE_DLL_API const SgUpirSpmdStatement* isSgUpirSpmdStatement(const SgNode* node);
    2744             : #define IS_SgUpirSpmdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirSpmdStatement::static_variant >> 3] & (1 << (SgUpirSpmdStatement::static_variant & 7)))) ? ((SgUpirSpmdStatement*) (node)) : NULL) : NULL)
    2745             : ROSE_DLL_API SgOmpLoopStatement* isSgOmpLoopStatement(SgNode* node);
    2746             : ROSE_DLL_API const SgOmpLoopStatement* isSgOmpLoopStatement(const SgNode* node);
    2747             : #define IS_SgOmpLoopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpLoopStatement::static_variant >> 3] & (1 << (SgOmpLoopStatement::static_variant & 7)))) ? ((SgOmpLoopStatement*) (node)) : NULL) : NULL)
    2748             : ROSE_DLL_API SgOmpScanStatement* isSgOmpScanStatement(SgNode* node);
    2749             : ROSE_DLL_API const SgOmpScanStatement* isSgOmpScanStatement(const SgNode* node);
    2750             : #define IS_SgOmpScanStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpScanStatement::static_variant >> 3] & (1 << (SgOmpScanStatement::static_variant & 7)))) ? ((SgOmpScanStatement*) (node)) : NULL) : NULL)
    2751             : ROSE_DLL_API SgOmpTaskloopStatement* isSgOmpTaskloopStatement(SgNode* node);
    2752             : ROSE_DLL_API const SgOmpTaskloopStatement* isSgOmpTaskloopStatement(const SgNode* node);
    2753             : #define IS_SgOmpTaskloopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskloopStatement::static_variant >> 3] & (1 << (SgOmpTaskloopStatement::static_variant & 7)))) ? ((SgOmpTaskloopStatement*) (node)) : NULL) : NULL)
    2754             : ROSE_DLL_API SgOmpTaskgroupStatement* isSgOmpTaskgroupStatement(SgNode* node);
    2755             : ROSE_DLL_API const SgOmpTaskgroupStatement* isSgOmpTaskgroupStatement(const SgNode* node);
    2756             : #define IS_SgOmpTaskgroupStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskgroupStatement::static_variant >> 3] & (1 << (SgOmpTaskgroupStatement::static_variant & 7)))) ? ((SgOmpTaskgroupStatement*) (node)) : NULL) : NULL)
    2757             : ROSE_DLL_API SgOmpDepobjStatement* isSgOmpDepobjStatement(SgNode* node);
    2758             : ROSE_DLL_API const SgOmpDepobjStatement* isSgOmpDepobjStatement(const SgNode* node);
    2759             : #define IS_SgOmpDepobjStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDepobjStatement::static_variant >> 3] & (1 << (SgOmpDepobjStatement::static_variant & 7)))) ? ((SgOmpDepobjStatement*) (node)) : NULL) : NULL)
    2760             : ROSE_DLL_API SgOmpTeamsStatement* isSgOmpTeamsStatement(SgNode* node);
    2761             : ROSE_DLL_API const SgOmpTeamsStatement* isSgOmpTeamsStatement(const SgNode* node);
    2762             : #define IS_SgOmpTeamsStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTeamsStatement::static_variant >> 3] & (1 << (SgOmpTeamsStatement::static_variant & 7)))) ? ((SgOmpTeamsStatement*) (node)) : NULL) : NULL)
    2763             : ROSE_DLL_API SgOmpCancellationPointStatement* isSgOmpCancellationPointStatement(SgNode* node);
    2764             : ROSE_DLL_API const SgOmpCancellationPointStatement* isSgOmpCancellationPointStatement(const SgNode* node);
    2765             : #define IS_SgOmpCancellationPointStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpCancellationPointStatement::static_variant >> 3] & (1 << (SgOmpCancellationPointStatement::static_variant & 7)))) ? ((SgOmpCancellationPointStatement*) (node)) : NULL) : NULL)
    2766             : ROSE_DLL_API SgOmpDeclareMapperStatement* isSgOmpDeclareMapperStatement(SgNode* node);
    2767             : ROSE_DLL_API const SgOmpDeclareMapperStatement* isSgOmpDeclareMapperStatement(const SgNode* node);
    2768             : #define IS_SgOmpDeclareMapperStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDeclareMapperStatement::static_variant >> 3] & (1 << (SgOmpDeclareMapperStatement::static_variant & 7)))) ? ((SgOmpDeclareMapperStatement*) (node)) : NULL) : NULL)
    2769             : ROSE_DLL_API SgOmpCancelStatement* isSgOmpCancelStatement(SgNode* node);
    2770             : ROSE_DLL_API const SgOmpCancelStatement* isSgOmpCancelStatement(const SgNode* node);
    2771             : #define IS_SgOmpCancelStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpCancelStatement::static_variant >> 3] & (1 << (SgOmpCancelStatement::static_variant & 7)))) ? ((SgOmpCancelStatement*) (node)) : NULL) : NULL)
    2772             : ROSE_DLL_API SgOmpDistributeStatement* isSgOmpDistributeStatement(SgNode* node);
    2773             : ROSE_DLL_API const SgOmpDistributeStatement* isSgOmpDistributeStatement(const SgNode* node);
    2774             : #define IS_SgOmpDistributeStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDistributeStatement::static_variant >> 3] & (1 << (SgOmpDistributeStatement::static_variant & 7)))) ? ((SgOmpDistributeStatement*) (node)) : NULL) : NULL)
    2775             : ROSE_DLL_API SgOmpMetadirectiveStatement* isSgOmpMetadirectiveStatement(SgNode* node);
    2776             : ROSE_DLL_API const SgOmpMetadirectiveStatement* isSgOmpMetadirectiveStatement(const SgNode* node);
    2777             : #define IS_SgOmpMetadirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpMetadirectiveStatement::static_variant >> 3] & (1 << (SgOmpMetadirectiveStatement::static_variant & 7)))) ? ((SgOmpMetadirectiveStatement*) (node)) : NULL) : NULL)
    2778             : ROSE_DLL_API SgOmpSingleStatement* isSgOmpSingleStatement(SgNode* node);
    2779             : ROSE_DLL_API const SgOmpSingleStatement* isSgOmpSingleStatement(const SgNode* node);
    2780             : #define IS_SgOmpSingleStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSingleStatement::static_variant >> 3] & (1 << (SgOmpSingleStatement::static_variant & 7)))) ? ((SgOmpSingleStatement*) (node)) : NULL) : NULL)
    2781             : ROSE_DLL_API SgOmpTaskStatement* isSgOmpTaskStatement(SgNode* node);
    2782             : ROSE_DLL_API const SgOmpTaskStatement* isSgOmpTaskStatement(const SgNode* node);
    2783             : #define IS_SgOmpTaskStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskStatement::static_variant >> 3] & (1 << (SgOmpTaskStatement::static_variant & 7)))) ? ((SgOmpTaskStatement*) (node)) : NULL) : NULL)
    2784             : ROSE_DLL_API SgOmpTargetEnterDataStatement* isSgOmpTargetEnterDataStatement(SgNode* node);
    2785             : ROSE_DLL_API const SgOmpTargetEnterDataStatement* isSgOmpTargetEnterDataStatement(const SgNode* node);
    2786             : #define IS_SgOmpTargetEnterDataStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetEnterDataStatement::static_variant >> 3] & (1 << (SgOmpTargetEnterDataStatement::static_variant & 7)))) ? ((SgOmpTargetEnterDataStatement*) (node)) : NULL) : NULL)
    2787             : ROSE_DLL_API SgOmpTargetExitDataStatement* isSgOmpTargetExitDataStatement(SgNode* node);
    2788             : ROSE_DLL_API const SgOmpTargetExitDataStatement* isSgOmpTargetExitDataStatement(const SgNode* node);
    2789             : #define IS_SgOmpTargetExitDataStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetExitDataStatement::static_variant >> 3] & (1 << (SgOmpTargetExitDataStatement::static_variant & 7)))) ? ((SgOmpTargetExitDataStatement*) (node)) : NULL) : NULL)
    2790             : ROSE_DLL_API SgUpirWorksharingStatement* isSgUpirWorksharingStatement(SgNode* node);
    2791             : ROSE_DLL_API const SgUpirWorksharingStatement* isSgUpirWorksharingStatement(const SgNode* node);
    2792             : #define IS_SgUpirWorksharingStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirWorksharingStatement::static_variant >> 3] & (1 << (SgUpirWorksharingStatement::static_variant & 7)))) ? ((SgUpirWorksharingStatement*) (node)) : NULL) : NULL)
    2793             : ROSE_DLL_API SgOmpForSimdStatement* isSgOmpForSimdStatement(SgNode* node);
    2794             : ROSE_DLL_API const SgOmpForSimdStatement* isSgOmpForSimdStatement(const SgNode* node);
    2795             : #define IS_SgOmpForSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpForSimdStatement::static_variant >> 3] & (1 << (SgOmpForSimdStatement::static_variant & 7)))) ? ((SgOmpForSimdStatement*) (node)) : NULL) : NULL)
    2796             : ROSE_DLL_API SgOmpDoStatement* isSgOmpDoStatement(SgNode* node);
    2797             : ROSE_DLL_API const SgOmpDoStatement* isSgOmpDoStatement(const SgNode* node);
    2798             : #define IS_SgOmpDoStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDoStatement::static_variant >> 3] & (1 << (SgOmpDoStatement::static_variant & 7)))) ? ((SgOmpDoStatement*) (node)) : NULL) : NULL)
    2799             : ROSE_DLL_API SgOmpSectionsStatement* isSgOmpSectionsStatement(SgNode* node);
    2800             : ROSE_DLL_API const SgOmpSectionsStatement* isSgOmpSectionsStatement(const SgNode* node);
    2801             : #define IS_SgOmpSectionsStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSectionsStatement::static_variant >> 3] & (1 << (SgOmpSectionsStatement::static_variant & 7)))) ? ((SgOmpSectionsStatement*) (node)) : NULL) : NULL)
    2802             : ROSE_DLL_API SgOmpAtomicStatement* isSgOmpAtomicStatement(SgNode* node);
    2803             : ROSE_DLL_API const SgOmpAtomicStatement* isSgOmpAtomicStatement(const SgNode* node);
    2804             : #define IS_SgOmpAtomicStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAtomicStatement::static_variant >> 3] & (1 << (SgOmpAtomicStatement::static_variant & 7)))) ? ((SgOmpAtomicStatement*) (node)) : NULL) : NULL)
    2805             : ROSE_DLL_API SgUpirTaskStatement* isSgUpirTaskStatement(SgNode* node);
    2806             : ROSE_DLL_API const SgUpirTaskStatement* isSgUpirTaskStatement(const SgNode* node);
    2807             : #define IS_SgUpirTaskStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirTaskStatement::static_variant >> 3] & (1 << (SgUpirTaskStatement::static_variant & 7)))) ? ((SgUpirTaskStatement*) (node)) : NULL) : NULL)
    2808             : ROSE_DLL_API SgOmpTargetDataStatement* isSgOmpTargetDataStatement(SgNode* node);
    2809             : ROSE_DLL_API const SgOmpTargetDataStatement* isSgOmpTargetDataStatement(const SgNode* node);
    2810             : #define IS_SgOmpTargetDataStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetDataStatement::static_variant >> 3] & (1 << (SgOmpTargetDataStatement::static_variant & 7)))) ? ((SgOmpTargetDataStatement*) (node)) : NULL) : NULL)
    2811             : ROSE_DLL_API SgOmpTargetParallelForStatement* isSgOmpTargetParallelForStatement(SgNode* node);
    2812             : ROSE_DLL_API const SgOmpTargetParallelForStatement* isSgOmpTargetParallelForStatement(const SgNode* node);
    2813             : #define IS_SgOmpTargetParallelForStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetParallelForStatement::static_variant >> 3] & (1 << (SgOmpTargetParallelForStatement::static_variant & 7)))) ? ((SgOmpTargetParallelForStatement*) (node)) : NULL) : NULL)
    2814             : ROSE_DLL_API SgOmpTargetParallelStatement* isSgOmpTargetParallelStatement(SgNode* node);
    2815             : ROSE_DLL_API const SgOmpTargetParallelStatement* isSgOmpTargetParallelStatement(const SgNode* node);
    2816             : #define IS_SgOmpTargetParallelStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetParallelStatement::static_variant >> 3] & (1 << (SgOmpTargetParallelStatement::static_variant & 7)))) ? ((SgOmpTargetParallelStatement*) (node)) : NULL) : NULL)
    2817             : ROSE_DLL_API SgOmpDistributeSimdStatement* isSgOmpDistributeSimdStatement(SgNode* node);
    2818             : ROSE_DLL_API const SgOmpDistributeSimdStatement* isSgOmpDistributeSimdStatement(const SgNode* node);
    2819             : #define IS_SgOmpDistributeSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDistributeSimdStatement::static_variant >> 3] & (1 << (SgOmpDistributeSimdStatement::static_variant & 7)))) ? ((SgOmpDistributeSimdStatement*) (node)) : NULL) : NULL)
    2820             : ROSE_DLL_API SgOmpDistributeParallelForStatement* isSgOmpDistributeParallelForStatement(SgNode* node);
    2821             : ROSE_DLL_API const SgOmpDistributeParallelForStatement* isSgOmpDistributeParallelForStatement(const SgNode* node);
    2822             : #define IS_SgOmpDistributeParallelForStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDistributeParallelForStatement::static_variant >> 3] & (1 << (SgOmpDistributeParallelForStatement::static_variant & 7)))) ? ((SgOmpDistributeParallelForStatement*) (node)) : NULL) : NULL)
    2823             : ROSE_DLL_API SgOmpDistributeParallelForSimdStatement* isSgOmpDistributeParallelForSimdStatement(SgNode* node);
    2824             : ROSE_DLL_API const SgOmpDistributeParallelForSimdStatement* isSgOmpDistributeParallelForSimdStatement(const SgNode* node);
    2825             : #define IS_SgOmpDistributeParallelForSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDistributeParallelForSimdStatement::static_variant >> 3] & (1 << (SgOmpDistributeParallelForSimdStatement::static_variant & 7)))) ? ((SgOmpDistributeParallelForSimdStatement*) (node)) : NULL) : NULL)
    2826             : ROSE_DLL_API SgOmpTaskloopSimdStatement* isSgOmpTaskloopSimdStatement(SgNode* node);
    2827             : ROSE_DLL_API const SgOmpTaskloopSimdStatement* isSgOmpTaskloopSimdStatement(const SgNode* node);
    2828             : #define IS_SgOmpTaskloopSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskloopSimdStatement::static_variant >> 3] & (1 << (SgOmpTaskloopSimdStatement::static_variant & 7)))) ? ((SgOmpTaskloopSimdStatement*) (node)) : NULL) : NULL)
    2829             : ROSE_DLL_API SgOmpTargetUpdateStatement* isSgOmpTargetUpdateStatement(SgNode* node);
    2830             : ROSE_DLL_API const SgOmpTargetUpdateStatement* isSgOmpTargetUpdateStatement(const SgNode* node);
    2831             : #define IS_SgOmpTargetUpdateStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetUpdateStatement::static_variant >> 3] & (1 << (SgOmpTargetUpdateStatement::static_variant & 7)))) ? ((SgOmpTargetUpdateStatement*) (node)) : NULL) : NULL)
    2832             : ROSE_DLL_API SgOmpTargetParallelForSimdStatement* isSgOmpTargetParallelForSimdStatement(SgNode* node);
    2833             : ROSE_DLL_API const SgOmpTargetParallelForSimdStatement* isSgOmpTargetParallelForSimdStatement(const SgNode* node);
    2834             : #define IS_SgOmpTargetParallelForSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetParallelForSimdStatement::static_variant >> 3] & (1 << (SgOmpTargetParallelForSimdStatement::static_variant & 7)))) ? ((SgOmpTargetParallelForSimdStatement*) (node)) : NULL) : NULL)
    2835             : ROSE_DLL_API SgOmpTargetParallelLoopStatement* isSgOmpTargetParallelLoopStatement(SgNode* node);
    2836             : ROSE_DLL_API const SgOmpTargetParallelLoopStatement* isSgOmpTargetParallelLoopStatement(const SgNode* node);
    2837             : #define IS_SgOmpTargetParallelLoopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetParallelLoopStatement::static_variant >> 3] & (1 << (SgOmpTargetParallelLoopStatement::static_variant & 7)))) ? ((SgOmpTargetParallelLoopStatement*) (node)) : NULL) : NULL)
    2838             : ROSE_DLL_API SgOmpTargetSimdStatement* isSgOmpTargetSimdStatement(SgNode* node);
    2839             : ROSE_DLL_API const SgOmpTargetSimdStatement* isSgOmpTargetSimdStatement(const SgNode* node);
    2840             : #define IS_SgOmpTargetSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetSimdStatement::static_variant >> 3] & (1 << (SgOmpTargetSimdStatement::static_variant & 7)))) ? ((SgOmpTargetSimdStatement*) (node)) : NULL) : NULL)
    2841             : ROSE_DLL_API SgOmpTargetTeamsStatement* isSgOmpTargetTeamsStatement(SgNode* node);
    2842             : ROSE_DLL_API const SgOmpTargetTeamsStatement* isSgOmpTargetTeamsStatement(const SgNode* node);
    2843             : #define IS_SgOmpTargetTeamsStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetTeamsStatement::static_variant >> 3] & (1 << (SgOmpTargetTeamsStatement::static_variant & 7)))) ? ((SgOmpTargetTeamsStatement*) (node)) : NULL) : NULL)
    2844             : ROSE_DLL_API SgOmpTargetTeamsDistributeStatement* isSgOmpTargetTeamsDistributeStatement(SgNode* node);
    2845             : ROSE_DLL_API const SgOmpTargetTeamsDistributeStatement* isSgOmpTargetTeamsDistributeStatement(const SgNode* node);
    2846             : #define IS_SgOmpTargetTeamsDistributeStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetTeamsDistributeStatement::static_variant >> 3] & (1 << (SgOmpTargetTeamsDistributeStatement::static_variant & 7)))) ? ((SgOmpTargetTeamsDistributeStatement*) (node)) : NULL) : NULL)
    2847             : ROSE_DLL_API SgOmpTargetTeamsDistributeSimdStatement* isSgOmpTargetTeamsDistributeSimdStatement(SgNode* node);
    2848             : ROSE_DLL_API const SgOmpTargetTeamsDistributeSimdStatement* isSgOmpTargetTeamsDistributeSimdStatement(const SgNode* node);
    2849             : #define IS_SgOmpTargetTeamsDistributeSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetTeamsDistributeSimdStatement::static_variant >> 3] & (1 << (SgOmpTargetTeamsDistributeSimdStatement::static_variant & 7)))) ? ((SgOmpTargetTeamsDistributeSimdStatement*) (node)) : NULL) : NULL)
    2850             : ROSE_DLL_API SgOmpTargetTeamsLoopStatement* isSgOmpTargetTeamsLoopStatement(SgNode* node);
    2851             : ROSE_DLL_API const SgOmpTargetTeamsLoopStatement* isSgOmpTargetTeamsLoopStatement(const SgNode* node);
    2852             : #define IS_SgOmpTargetTeamsLoopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetTeamsLoopStatement::static_variant >> 3] & (1 << (SgOmpTargetTeamsLoopStatement::static_variant & 7)))) ? ((SgOmpTargetTeamsLoopStatement*) (node)) : NULL) : NULL)
    2853             : ROSE_DLL_API SgOmpTargetTeamsDistributeParallelForStatement* isSgOmpTargetTeamsDistributeParallelForStatement(SgNode* node);
    2854             : ROSE_DLL_API const SgOmpTargetTeamsDistributeParallelForStatement* isSgOmpTargetTeamsDistributeParallelForStatement(const SgNode* node);
    2855             : #define IS_SgOmpTargetTeamsDistributeParallelForStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetTeamsDistributeParallelForStatement::static_variant >> 3] & (1 << (SgOmpTargetTeamsDistributeParallelForStatement::static_variant & 7)))) ? ((SgOmpTargetTeamsDistributeParallelForStatement*) (node)) : NULL) : NULL)
    2856             : ROSE_DLL_API SgOmpTargetTeamsDistributeParallelForSimdStatement* isSgOmpTargetTeamsDistributeParallelForSimdStatement(SgNode* node);
    2857             : ROSE_DLL_API const SgOmpTargetTeamsDistributeParallelForSimdStatement* isSgOmpTargetTeamsDistributeParallelForSimdStatement(const SgNode* node);
    2858             : #define IS_SgOmpTargetTeamsDistributeParallelForSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTargetTeamsDistributeParallelForSimdStatement::static_variant >> 3] & (1 << (SgOmpTargetTeamsDistributeParallelForSimdStatement::static_variant & 7)))) ? ((SgOmpTargetTeamsDistributeParallelForSimdStatement*) (node)) : NULL) : NULL)
    2859             : ROSE_DLL_API SgOmpMasterTaskloopSimdStatement* isSgOmpMasterTaskloopSimdStatement(SgNode* node);
    2860             : ROSE_DLL_API const SgOmpMasterTaskloopSimdStatement* isSgOmpMasterTaskloopSimdStatement(const SgNode* node);
    2861             : #define IS_SgOmpMasterTaskloopSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpMasterTaskloopSimdStatement::static_variant >> 3] & (1 << (SgOmpMasterTaskloopSimdStatement::static_variant & 7)))) ? ((SgOmpMasterTaskloopSimdStatement*) (node)) : NULL) : NULL)
    2862             : ROSE_DLL_API SgOmpParallelMasterTaskloopStatement* isSgOmpParallelMasterTaskloopStatement(SgNode* node);
    2863             : ROSE_DLL_API const SgOmpParallelMasterTaskloopStatement* isSgOmpParallelMasterTaskloopStatement(const SgNode* node);
    2864             : #define IS_SgOmpParallelMasterTaskloopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpParallelMasterTaskloopStatement::static_variant >> 3] & (1 << (SgOmpParallelMasterTaskloopStatement::static_variant & 7)))) ? ((SgOmpParallelMasterTaskloopStatement*) (node)) : NULL) : NULL)
    2865             : ROSE_DLL_API SgOmpParallelMasterTaskloopSimdStatement* isSgOmpParallelMasterTaskloopSimdStatement(SgNode* node);
    2866             : ROSE_DLL_API const SgOmpParallelMasterTaskloopSimdStatement* isSgOmpParallelMasterTaskloopSimdStatement(const SgNode* node);
    2867             : #define IS_SgOmpParallelMasterTaskloopSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpParallelMasterTaskloopSimdStatement::static_variant >> 3] & (1 << (SgOmpParallelMasterTaskloopSimdStatement::static_variant & 7)))) ? ((SgOmpParallelMasterTaskloopSimdStatement*) (node)) : NULL) : NULL)
    2868             : ROSE_DLL_API SgOmpTeamsDistributeStatement* isSgOmpTeamsDistributeStatement(SgNode* node);
    2869             : ROSE_DLL_API const SgOmpTeamsDistributeStatement* isSgOmpTeamsDistributeStatement(const SgNode* node);
    2870             : #define IS_SgOmpTeamsDistributeStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTeamsDistributeStatement::static_variant >> 3] & (1 << (SgOmpTeamsDistributeStatement::static_variant & 7)))) ? ((SgOmpTeamsDistributeStatement*) (node)) : NULL) : NULL)
    2871             : ROSE_DLL_API SgOmpTeamsDistributeSimdStatement* isSgOmpTeamsDistributeSimdStatement(SgNode* node);
    2872             : ROSE_DLL_API const SgOmpTeamsDistributeSimdStatement* isSgOmpTeamsDistributeSimdStatement(const SgNode* node);
    2873             : #define IS_SgOmpTeamsDistributeSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTeamsDistributeSimdStatement::static_variant >> 3] & (1 << (SgOmpTeamsDistributeSimdStatement::static_variant & 7)))) ? ((SgOmpTeamsDistributeSimdStatement*) (node)) : NULL) : NULL)
    2874             : ROSE_DLL_API SgOmpTeamsDistributeParallelForStatement* isSgOmpTeamsDistributeParallelForStatement(SgNode* node);
    2875             : ROSE_DLL_API const SgOmpTeamsDistributeParallelForStatement* isSgOmpTeamsDistributeParallelForStatement(const SgNode* node);
    2876             : #define IS_SgOmpTeamsDistributeParallelForStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTeamsDistributeParallelForStatement::static_variant >> 3] & (1 << (SgOmpTeamsDistributeParallelForStatement::static_variant & 7)))) ? ((SgOmpTeamsDistributeParallelForStatement*) (node)) : NULL) : NULL)
    2877             : ROSE_DLL_API SgOmpTeamsDistributeParallelForSimdStatement* isSgOmpTeamsDistributeParallelForSimdStatement(SgNode* node);
    2878             : ROSE_DLL_API const SgOmpTeamsDistributeParallelForSimdStatement* isSgOmpTeamsDistributeParallelForSimdStatement(const SgNode* node);
    2879             : #define IS_SgOmpTeamsDistributeParallelForSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTeamsDistributeParallelForSimdStatement::static_variant >> 3] & (1 << (SgOmpTeamsDistributeParallelForSimdStatement::static_variant & 7)))) ? ((SgOmpTeamsDistributeParallelForSimdStatement*) (node)) : NULL) : NULL)
    2880             : ROSE_DLL_API SgOmpTeamsLoopStatement* isSgOmpTeamsLoopStatement(SgNode* node);
    2881             : ROSE_DLL_API const SgOmpTeamsLoopStatement* isSgOmpTeamsLoopStatement(const SgNode* node);
    2882             : #define IS_SgOmpTeamsLoopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTeamsLoopStatement::static_variant >> 3] & (1 << (SgOmpTeamsLoopStatement::static_variant & 7)))) ? ((SgOmpTeamsLoopStatement*) (node)) : NULL) : NULL)
    2883             : ROSE_DLL_API SgOmpParallelMasterStatement* isSgOmpParallelMasterStatement(SgNode* node);
    2884             : ROSE_DLL_API const SgOmpParallelMasterStatement* isSgOmpParallelMasterStatement(const SgNode* node);
    2885             : #define IS_SgOmpParallelMasterStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpParallelMasterStatement::static_variant >> 3] & (1 << (SgOmpParallelMasterStatement::static_variant & 7)))) ? ((SgOmpParallelMasterStatement*) (node)) : NULL) : NULL)
    2886             : ROSE_DLL_API SgOmpMasterTaskloopStatement* isSgOmpMasterTaskloopStatement(SgNode* node);
    2887             : ROSE_DLL_API const SgOmpMasterTaskloopStatement* isSgOmpMasterTaskloopStatement(const SgNode* node);
    2888             : #define IS_SgOmpMasterTaskloopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpMasterTaskloopStatement::static_variant >> 3] & (1 << (SgOmpMasterTaskloopStatement::static_variant & 7)))) ? ((SgOmpMasterTaskloopStatement*) (node)) : NULL) : NULL)
    2889             : ROSE_DLL_API SgOmpParallelLoopStatement* isSgOmpParallelLoopStatement(SgNode* node);
    2890             : ROSE_DLL_API const SgOmpParallelLoopStatement* isSgOmpParallelLoopStatement(const SgNode* node);
    2891             : #define IS_SgOmpParallelLoopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpParallelLoopStatement::static_variant >> 3] & (1 << (SgOmpParallelLoopStatement::static_variant & 7)))) ? ((SgOmpParallelLoopStatement*) (node)) : NULL) : NULL)
    2892             : ROSE_DLL_API SgOmpUnrollStatement* isSgOmpUnrollStatement(SgNode* node);
    2893             : ROSE_DLL_API const SgOmpUnrollStatement* isSgOmpUnrollStatement(const SgNode* node);
    2894             : #define IS_SgOmpUnrollStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUnrollStatement::static_variant >> 3] & (1 << (SgOmpUnrollStatement::static_variant & 7)))) ? ((SgOmpUnrollStatement*) (node)) : NULL) : NULL)
    2895             : ROSE_DLL_API SgOmpTileStatement* isSgOmpTileStatement(SgNode* node);
    2896             : ROSE_DLL_API const SgOmpTileStatement* isSgOmpTileStatement(const SgNode* node);
    2897             : #define IS_SgOmpTileStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTileStatement::static_variant >> 3] & (1 << (SgOmpTileStatement::static_variant & 7)))) ? ((SgOmpTileStatement*) (node)) : NULL) : NULL)
    2898             : ROSE_DLL_API SgUpirSimdStatement* isSgUpirSimdStatement(SgNode* node);
    2899             : ROSE_DLL_API const SgUpirSimdStatement* isSgUpirSimdStatement(const SgNode* node);
    2900             : #define IS_SgUpirSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirSimdStatement::static_variant >> 3] & (1 << (SgUpirSimdStatement::static_variant & 7)))) ? ((SgUpirSimdStatement*) (node)) : NULL) : NULL)
    2901             : ROSE_DLL_API SgOmpCriticalStatement* isSgOmpCriticalStatement(SgNode* node);
    2902             : ROSE_DLL_API const SgOmpCriticalStatement* isSgOmpCriticalStatement(const SgNode* node);
    2903             : #define IS_SgOmpCriticalStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpCriticalStatement::static_variant >> 3] & (1 << (SgOmpCriticalStatement::static_variant & 7)))) ? ((SgOmpCriticalStatement*) (node)) : NULL) : NULL)
    2904             : ROSE_DLL_API SgOmpOrderedStatement* isSgOmpOrderedStatement(SgNode* node);
    2905             : ROSE_DLL_API const SgOmpOrderedStatement* isSgOmpOrderedStatement(const SgNode* node);
    2906             : #define IS_SgOmpOrderedStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpOrderedStatement::static_variant >> 3] & (1 << (SgOmpOrderedStatement::static_variant & 7)))) ? ((SgOmpOrderedStatement*) (node)) : NULL) : NULL)
    2907             : ROSE_DLL_API SgUpirLoopStatement* isSgUpirLoopStatement(SgNode* node);
    2908             : ROSE_DLL_API const SgUpirLoopStatement* isSgUpirLoopStatement(const SgNode* node);
    2909             : #define IS_SgUpirLoopStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirLoopStatement::static_variant >> 3] & (1 << (SgUpirLoopStatement::static_variant & 7)))) ? ((SgUpirLoopStatement*) (node)) : NULL) : NULL)
    2910             : ROSE_DLL_API SgUpirLoopParallelStatement* isSgUpirLoopParallelStatement(SgNode* node);
    2911             : ROSE_DLL_API const SgUpirLoopParallelStatement* isSgUpirLoopParallelStatement(const SgNode* node);
    2912             : #define IS_SgUpirLoopParallelStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirLoopParallelStatement::static_variant >> 3] & (1 << (SgUpirLoopParallelStatement::static_variant & 7)))) ? ((SgUpirLoopParallelStatement*) (node)) : NULL) : NULL)
    2913             : ROSE_DLL_API SgUpirSyncStatement* isSgUpirSyncStatement(SgNode* node);
    2914             : ROSE_DLL_API const SgUpirSyncStatement* isSgUpirSyncStatement(const SgNode* node);
    2915             : #define IS_SgUpirSyncStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirSyncStatement::static_variant >> 3] & (1 << (SgUpirSyncStatement::static_variant & 7)))) ? ((SgUpirSyncStatement*) (node)) : NULL) : NULL)
    2916             : ROSE_DLL_API SgUpirFieldBodyStatement* isSgUpirFieldBodyStatement(SgNode* node);
    2917             : ROSE_DLL_API const SgUpirFieldBodyStatement* isSgUpirFieldBodyStatement(const SgNode* node);
    2918             : #define IS_SgUpirFieldBodyStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirFieldBodyStatement::static_variant >> 3] & (1 << (SgUpirFieldBodyStatement::static_variant & 7)))) ? ((SgUpirFieldBodyStatement*) (node)) : NULL) : NULL)
    2919             : ROSE_DLL_API SgOmpMasterStatement* isSgOmpMasterStatement(SgNode* node);
    2920             : ROSE_DLL_API const SgOmpMasterStatement* isSgOmpMasterStatement(const SgNode* node);
    2921             : #define IS_SgOmpMasterStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpMasterStatement::static_variant >> 3] & (1 << (SgOmpMasterStatement::static_variant & 7)))) ? ((SgOmpMasterStatement*) (node)) : NULL) : NULL)
    2922             : ROSE_DLL_API SgOmpSectionStatement* isSgOmpSectionStatement(SgNode* node);
    2923             : ROSE_DLL_API const SgOmpSectionStatement* isSgOmpSectionStatement(const SgNode* node);
    2924             : #define IS_SgOmpSectionStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSectionStatement::static_variant >> 3] & (1 << (SgOmpSectionStatement::static_variant & 7)))) ? ((SgOmpSectionStatement*) (node)) : NULL) : NULL)
    2925             : ROSE_DLL_API SgOmpWorkshareStatement* isSgOmpWorkshareStatement(SgNode* node);
    2926             : ROSE_DLL_API const SgOmpWorkshareStatement* isSgOmpWorkshareStatement(const SgNode* node);
    2927             : #define IS_SgOmpWorkshareStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpWorkshareStatement::static_variant >> 3] & (1 << (SgOmpWorkshareStatement::static_variant & 7)))) ? ((SgOmpWorkshareStatement*) (node)) : NULL) : NULL)
    2928             : ROSE_DLL_API SgOmpFlushStatement* isSgOmpFlushStatement(SgNode* node);
    2929             : ROSE_DLL_API const SgOmpFlushStatement* isSgOmpFlushStatement(const SgNode* node);
    2930             : #define IS_SgOmpFlushStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpFlushStatement::static_variant >> 3] & (1 << (SgOmpFlushStatement::static_variant & 7)))) ? ((SgOmpFlushStatement*) (node)) : NULL) : NULL)
    2931             : ROSE_DLL_API SgOmpAllocateStatement* isSgOmpAllocateStatement(SgNode* node);
    2932             : ROSE_DLL_API const SgOmpAllocateStatement* isSgOmpAllocateStatement(const SgNode* node);
    2933             : #define IS_SgOmpAllocateStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAllocateStatement::static_variant >> 3] & (1 << (SgOmpAllocateStatement::static_variant & 7)))) ? ((SgOmpAllocateStatement*) (node)) : NULL) : NULL)
    2934             : ROSE_DLL_API SgOmpOrderedDependStatement* isSgOmpOrderedDependStatement(SgNode* node);
    2935             : ROSE_DLL_API const SgOmpOrderedDependStatement* isSgOmpOrderedDependStatement(const SgNode* node);
    2936             : #define IS_SgOmpOrderedDependStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpOrderedDependStatement::static_variant >> 3] & (1 << (SgOmpOrderedDependStatement::static_variant & 7)))) ? ((SgOmpOrderedDependStatement*) (node)) : NULL) : NULL)
    2937             : ROSE_DLL_API SgUpirBodyStatement* isSgUpirBodyStatement(SgNode* node);
    2938             : ROSE_DLL_API const SgUpirBodyStatement* isSgUpirBodyStatement(const SgNode* node);
    2939             : #define IS_SgUpirBodyStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirBodyStatement::static_variant >> 3] & (1 << (SgUpirBodyStatement::static_variant & 7)))) ? ((SgUpirBodyStatement*) (node)) : NULL) : NULL)
    2940             : ROSE_DLL_API SgUpirFieldStatement* isSgUpirFieldStatement(SgNode* node);
    2941             : ROSE_DLL_API const SgUpirFieldStatement* isSgUpirFieldStatement(const SgNode* node);
    2942             : #define IS_SgUpirFieldStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirFieldStatement::static_variant >> 3] & (1 << (SgUpirFieldStatement::static_variant & 7)))) ? ((SgUpirFieldStatement*) (node)) : NULL) : NULL)
    2943             : ROSE_DLL_API SgBlockDataStatement* isSgBlockDataStatement(SgNode* node);
    2944             : ROSE_DLL_API const SgBlockDataStatement* isSgBlockDataStatement(const SgNode* node);
    2945             : #define IS_SgBlockDataStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBlockDataStatement::static_variant >> 3] & (1 << (SgBlockDataStatement::static_variant & 7)))) ? ((SgBlockDataStatement*) (node)) : NULL) : NULL)
    2946             : ROSE_DLL_API SgImplicitStatement* isSgImplicitStatement(SgNode* node);
    2947             : ROSE_DLL_API const SgImplicitStatement* isSgImplicitStatement(const SgNode* node);
    2948             : #define IS_SgImplicitStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgImplicitStatement::static_variant >> 3] & (1 << (SgImplicitStatement::static_variant & 7)))) ? ((SgImplicitStatement*) (node)) : NULL) : NULL)
    2949             : ROSE_DLL_API SgStatementFunctionStatement* isSgStatementFunctionStatement(SgNode* node);
    2950             : ROSE_DLL_API const SgStatementFunctionStatement* isSgStatementFunctionStatement(const SgNode* node);
    2951             : #define IS_SgStatementFunctionStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStatementFunctionStatement::static_variant >> 3] & (1 << (SgStatementFunctionStatement::static_variant & 7)))) ? ((SgStatementFunctionStatement*) (node)) : NULL) : NULL)
    2952             : ROSE_DLL_API SgWhereStatement* isSgWhereStatement(SgNode* node);
    2953             : ROSE_DLL_API const SgWhereStatement* isSgWhereStatement(const SgNode* node);
    2954             : #define IS_SgWhereStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgWhereStatement::static_variant >> 3] & (1 << (SgWhereStatement::static_variant & 7)))) ? ((SgWhereStatement*) (node)) : NULL) : NULL)
    2955             : ROSE_DLL_API SgNullifyStatement* isSgNullifyStatement(SgNode* node);
    2956             : ROSE_DLL_API const SgNullifyStatement* isSgNullifyStatement(const SgNode* node);
    2957             : #define IS_SgNullifyStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNullifyStatement::static_variant >> 3] & (1 << (SgNullifyStatement::static_variant & 7)))) ? ((SgNullifyStatement*) (node)) : NULL) : NULL)
    2958             : ROSE_DLL_API SgEquivalenceStatement* isSgEquivalenceStatement(SgNode* node);
    2959             : ROSE_DLL_API const SgEquivalenceStatement* isSgEquivalenceStatement(const SgNode* node);
    2960             : #define IS_SgEquivalenceStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEquivalenceStatement::static_variant >> 3] & (1 << (SgEquivalenceStatement::static_variant & 7)))) ? ((SgEquivalenceStatement*) (node)) : NULL) : NULL)
    2961             : ROSE_DLL_API SgDerivedTypeStatement* isSgDerivedTypeStatement(SgNode* node);
    2962             : ROSE_DLL_API const SgDerivedTypeStatement* isSgDerivedTypeStatement(const SgNode* node);
    2963             : #define IS_SgDerivedTypeStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDerivedTypeStatement::static_variant >> 3] & (1 << (SgDerivedTypeStatement::static_variant & 7)))) ? ((SgDerivedTypeStatement*) (node)) : NULL) : NULL)
    2964             : ROSE_DLL_API SgAttributeSpecificationStatement* isSgAttributeSpecificationStatement(SgNode* node);
    2965             : ROSE_DLL_API const SgAttributeSpecificationStatement* isSgAttributeSpecificationStatement(const SgNode* node);
    2966             : #define IS_SgAttributeSpecificationStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAttributeSpecificationStatement::static_variant >> 3] & (1 << (SgAttributeSpecificationStatement::static_variant & 7)))) ? ((SgAttributeSpecificationStatement*) (node)) : NULL) : NULL)
    2967             : ROSE_DLL_API SgAllocateStatement* isSgAllocateStatement(SgNode* node);
    2968             : ROSE_DLL_API const SgAllocateStatement* isSgAllocateStatement(const SgNode* node);
    2969             : #define IS_SgAllocateStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAllocateStatement::static_variant >> 3] & (1 << (SgAllocateStatement::static_variant & 7)))) ? ((SgAllocateStatement*) (node)) : NULL) : NULL)
    2970             : ROSE_DLL_API SgDeallocateStatement* isSgDeallocateStatement(SgNode* node);
    2971             : ROSE_DLL_API const SgDeallocateStatement* isSgDeallocateStatement(const SgNode* node);
    2972             : #define IS_SgDeallocateStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDeallocateStatement::static_variant >> 3] & (1 << (SgDeallocateStatement::static_variant & 7)))) ? ((SgDeallocateStatement*) (node)) : NULL) : NULL)
    2973             : ROSE_DLL_API SgContainsStatement* isSgContainsStatement(SgNode* node);
    2974             : ROSE_DLL_API const SgContainsStatement* isSgContainsStatement(const SgNode* node);
    2975             : #define IS_SgContainsStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgContainsStatement::static_variant >> 3] & (1 << (SgContainsStatement::static_variant & 7)))) ? ((SgContainsStatement*) (node)) : NULL) : NULL)
    2976             : ROSE_DLL_API SgSequenceStatement* isSgSequenceStatement(SgNode* node);
    2977             : ROSE_DLL_API const SgSequenceStatement* isSgSequenceStatement(const SgNode* node);
    2978             : #define IS_SgSequenceStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSequenceStatement::static_variant >> 3] & (1 << (SgSequenceStatement::static_variant & 7)))) ? ((SgSequenceStatement*) (node)) : NULL) : NULL)
    2979             : ROSE_DLL_API SgElseWhereStatement* isSgElseWhereStatement(SgNode* node);
    2980             : ROSE_DLL_API const SgElseWhereStatement* isSgElseWhereStatement(const SgNode* node);
    2981             : #define IS_SgElseWhereStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElseWhereStatement::static_variant >> 3] & (1 << (SgElseWhereStatement::static_variant & 7)))) ? ((SgElseWhereStatement*) (node)) : NULL) : NULL)
    2982             : ROSE_DLL_API SgArithmeticIfStatement* isSgArithmeticIfStatement(SgNode* node);
    2983             : ROSE_DLL_API const SgArithmeticIfStatement* isSgArithmeticIfStatement(const SgNode* node);
    2984             : #define IS_SgArithmeticIfStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgArithmeticIfStatement::static_variant >> 3] & (1 << (SgArithmeticIfStatement::static_variant & 7)))) ? ((SgArithmeticIfStatement*) (node)) : NULL) : NULL)
    2985             : ROSE_DLL_API SgAssignStatement* isSgAssignStatement(SgNode* node);
    2986             : ROSE_DLL_API const SgAssignStatement* isSgAssignStatement(const SgNode* node);
    2987             : #define IS_SgAssignStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAssignStatement::static_variant >> 3] & (1 << (SgAssignStatement::static_variant & 7)))) ? ((SgAssignStatement*) (node)) : NULL) : NULL)
    2988             : ROSE_DLL_API SgComputedGotoStatement* isSgComputedGotoStatement(SgNode* node);
    2989             : ROSE_DLL_API const SgComputedGotoStatement* isSgComputedGotoStatement(const SgNode* node);
    2990             : #define IS_SgComputedGotoStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgComputedGotoStatement::static_variant >> 3] & (1 << (SgComputedGotoStatement::static_variant & 7)))) ? ((SgComputedGotoStatement*) (node)) : NULL) : NULL)
    2991             : ROSE_DLL_API SgAssignedGotoStatement* isSgAssignedGotoStatement(SgNode* node);
    2992             : ROSE_DLL_API const SgAssignedGotoStatement* isSgAssignedGotoStatement(const SgNode* node);
    2993             : #define IS_SgAssignedGotoStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAssignedGotoStatement::static_variant >> 3] & (1 << (SgAssignedGotoStatement::static_variant & 7)))) ? ((SgAssignedGotoStatement*) (node)) : NULL) : NULL)
    2994             : ROSE_DLL_API SgNamelistStatement* isSgNamelistStatement(SgNode* node);
    2995             : ROSE_DLL_API const SgNamelistStatement* isSgNamelistStatement(const SgNode* node);
    2996             : #define IS_SgNamelistStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNamelistStatement::static_variant >> 3] & (1 << (SgNamelistStatement::static_variant & 7)))) ? ((SgNamelistStatement*) (node)) : NULL) : NULL)
    2997             : ROSE_DLL_API SgImportStatement* isSgImportStatement(SgNode* node);
    2998             : ROSE_DLL_API const SgImportStatement* isSgImportStatement(const SgNode* node);
    2999             : #define IS_SgImportStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgImportStatement::static_variant >> 3] & (1 << (SgImportStatement::static_variant & 7)))) ? ((SgImportStatement*) (node)) : NULL) : NULL)
    3000             : ROSE_DLL_API SgAssociateStatement* isSgAssociateStatement(SgNode* node);
    3001             : ROSE_DLL_API const SgAssociateStatement* isSgAssociateStatement(const SgNode* node);
    3002             : #define IS_SgAssociateStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAssociateStatement::static_variant >> 3] & (1 << (SgAssociateStatement::static_variant & 7)))) ? ((SgAssociateStatement*) (node)) : NULL) : NULL)
    3003             : ROSE_DLL_API SgFortranIncludeLine* isSgFortranIncludeLine(SgNode* node);
    3004             : ROSE_DLL_API const SgFortranIncludeLine* isSgFortranIncludeLine(const SgNode* node);
    3005             : #define IS_SgFortranIncludeLine_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFortranIncludeLine::static_variant >> 3] & (1 << (SgFortranIncludeLine::static_variant & 7)))) ? ((SgFortranIncludeLine*) (node)) : NULL) : NULL)
    3006             : ROSE_DLL_API SgNamespaceDeclarationStatement* isSgNamespaceDeclarationStatement(SgNode* node);
    3007             : ROSE_DLL_API const SgNamespaceDeclarationStatement* isSgNamespaceDeclarationStatement(const SgNode* node);
    3008             : #define IS_SgNamespaceDeclarationStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNamespaceDeclarationStatement::static_variant >> 3] & (1 << (SgNamespaceDeclarationStatement::static_variant & 7)))) ? ((SgNamespaceDeclarationStatement*) (node)) : NULL) : NULL)
    3009             : ROSE_DLL_API SgNamespaceAliasDeclarationStatement* isSgNamespaceAliasDeclarationStatement(SgNode* node);
    3010             : ROSE_DLL_API const SgNamespaceAliasDeclarationStatement* isSgNamespaceAliasDeclarationStatement(const SgNode* node);
    3011             : #define IS_SgNamespaceAliasDeclarationStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNamespaceAliasDeclarationStatement::static_variant >> 3] & (1 << (SgNamespaceAliasDeclarationStatement::static_variant & 7)))) ? ((SgNamespaceAliasDeclarationStatement*) (node)) : NULL) : NULL)
    3012             : ROSE_DLL_API SgNamespaceDefinitionStatement* isSgNamespaceDefinitionStatement(SgNode* node);
    3013             : ROSE_DLL_API const SgNamespaceDefinitionStatement* isSgNamespaceDefinitionStatement(const SgNode* node);
    3014             : #define IS_SgNamespaceDefinitionStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNamespaceDefinitionStatement::static_variant >> 3] & (1 << (SgNamespaceDefinitionStatement::static_variant & 7)))) ? ((SgNamespaceDefinitionStatement*) (node)) : NULL) : NULL)
    3015             : ROSE_DLL_API SgUsingDeclarationStatement* isSgUsingDeclarationStatement(SgNode* node);
    3016             : ROSE_DLL_API const SgUsingDeclarationStatement* isSgUsingDeclarationStatement(const SgNode* node);
    3017             : #define IS_SgUsingDeclarationStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUsingDeclarationStatement::static_variant >> 3] & (1 << (SgUsingDeclarationStatement::static_variant & 7)))) ? ((SgUsingDeclarationStatement*) (node)) : NULL) : NULL)
    3018             : ROSE_DLL_API SgUsingDirectiveStatement* isSgUsingDirectiveStatement(SgNode* node);
    3019             : ROSE_DLL_API const SgUsingDirectiveStatement* isSgUsingDirectiveStatement(const SgNode* node);
    3020             : #define IS_SgUsingDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUsingDirectiveStatement::static_variant >> 3] & (1 << (SgUsingDirectiveStatement::static_variant & 7)))) ? ((SgUsingDirectiveStatement*) (node)) : NULL) : NULL)
    3021             : ROSE_DLL_API SgTemplateInstantiationDirectiveStatement* isSgTemplateInstantiationDirectiveStatement(SgNode* node);
    3022             : ROSE_DLL_API const SgTemplateInstantiationDirectiveStatement* isSgTemplateInstantiationDirectiveStatement(const SgNode* node);
    3023             : #define IS_SgTemplateInstantiationDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateInstantiationDirectiveStatement::static_variant >> 3] & (1 << (SgTemplateInstantiationDirectiveStatement::static_variant & 7)))) ? ((SgTemplateInstantiationDirectiveStatement*) (node)) : NULL) : NULL)
    3024             : ROSE_DLL_API SgStaticAssertionDeclaration* isSgStaticAssertionDeclaration(SgNode* node);
    3025             : ROSE_DLL_API const SgStaticAssertionDeclaration* isSgStaticAssertionDeclaration(const SgNode* node);
    3026             : #define IS_SgStaticAssertionDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStaticAssertionDeclaration::static_variant >> 3] & (1 << (SgStaticAssertionDeclaration::static_variant & 7)))) ? ((SgStaticAssertionDeclaration*) (node)) : NULL) : NULL)
    3027             : ROSE_DLL_API SgTemplateClassDefinition* isSgTemplateClassDefinition(SgNode* node);
    3028             : ROSE_DLL_API const SgTemplateClassDefinition* isSgTemplateClassDefinition(const SgNode* node);
    3029             : #define IS_SgTemplateClassDefinition_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateClassDefinition::static_variant >> 3] & (1 << (SgTemplateClassDefinition::static_variant & 7)))) ? ((SgTemplateClassDefinition*) (node)) : NULL) : NULL)
    3030             : ROSE_DLL_API SgTemplateFunctionDefinition* isSgTemplateFunctionDefinition(SgNode* node);
    3031             : ROSE_DLL_API const SgTemplateFunctionDefinition* isSgTemplateFunctionDefinition(const SgNode* node);
    3032             : #define IS_SgTemplateFunctionDefinition_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateFunctionDefinition::static_variant >> 3] & (1 << (SgTemplateFunctionDefinition::static_variant & 7)))) ? ((SgTemplateFunctionDefinition*) (node)) : NULL) : NULL)
    3033             : ROSE_DLL_API SgClassDeclaration* isSgClassDeclaration(SgNode* node);
    3034             : ROSE_DLL_API const SgClassDeclaration* isSgClassDeclaration(const SgNode* node);
    3035             : #define IS_SgClassDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClassDeclaration::static_variant >> 3] & (1 << (SgClassDeclaration::static_variant & 7)))) ? ((SgClassDeclaration*) (node)) : NULL) : NULL)
    3036             : ROSE_DLL_API SgClassDefinition* isSgClassDefinition(SgNode* node);
    3037             : ROSE_DLL_API const SgClassDefinition* isSgClassDefinition(const SgNode* node);
    3038             : #define IS_SgClassDefinition_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClassDefinition::static_variant >> 3] & (1 << (SgClassDefinition::static_variant & 7)))) ? ((SgClassDefinition*) (node)) : NULL) : NULL)
    3039             : ROSE_DLL_API SgFunctionDefinition* isSgFunctionDefinition(SgNode* node);
    3040             : ROSE_DLL_API const SgFunctionDefinition* isSgFunctionDefinition(const SgNode* node);
    3041             : #define IS_SgFunctionDefinition_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionDefinition::static_variant >> 3] & (1 << (SgFunctionDefinition::static_variant & 7)))) ? ((SgFunctionDefinition*) (node)) : NULL) : NULL)
    3042             : ROSE_DLL_API SgScopeStatement* isSgScopeStatement(SgNode* node);
    3043             : ROSE_DLL_API const SgScopeStatement* isSgScopeStatement(const SgNode* node);
    3044             : #define IS_SgScopeStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgScopeStatement::static_variant >> 3] & (1 << (SgScopeStatement::static_variant & 7)))) ? ((SgScopeStatement*) (node)) : NULL) : NULL)
    3045             : ROSE_DLL_API SgMemberFunctionDeclaration* isSgMemberFunctionDeclaration(SgNode* node);
    3046             : ROSE_DLL_API const SgMemberFunctionDeclaration* isSgMemberFunctionDeclaration(const SgNode* node);
    3047             : #define IS_SgMemberFunctionDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMemberFunctionDeclaration::static_variant >> 3] & (1 << (SgMemberFunctionDeclaration::static_variant & 7)))) ? ((SgMemberFunctionDeclaration*) (node)) : NULL) : NULL)
    3048             : ROSE_DLL_API SgFunctionDeclaration* isSgFunctionDeclaration(SgNode* node);
    3049             : ROSE_DLL_API const SgFunctionDeclaration* isSgFunctionDeclaration(const SgNode* node);
    3050             : #define IS_SgFunctionDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionDeclaration::static_variant >> 3] & (1 << (SgFunctionDeclaration::static_variant & 7)))) ? ((SgFunctionDeclaration*) (node)) : NULL) : NULL)
    3051             : ROSE_DLL_API SgIncludeDirectiveStatement* isSgIncludeDirectiveStatement(SgNode* node);
    3052             : ROSE_DLL_API const SgIncludeDirectiveStatement* isSgIncludeDirectiveStatement(const SgNode* node);
    3053             : #define IS_SgIncludeDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIncludeDirectiveStatement::static_variant >> 3] & (1 << (SgIncludeDirectiveStatement::static_variant & 7)))) ? ((SgIncludeDirectiveStatement*) (node)) : NULL) : NULL)
    3054             : ROSE_DLL_API SgDefineDirectiveStatement* isSgDefineDirectiveStatement(SgNode* node);
    3055             : ROSE_DLL_API const SgDefineDirectiveStatement* isSgDefineDirectiveStatement(const SgNode* node);
    3056             : #define IS_SgDefineDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDefineDirectiveStatement::static_variant >> 3] & (1 << (SgDefineDirectiveStatement::static_variant & 7)))) ? ((SgDefineDirectiveStatement*) (node)) : NULL) : NULL)
    3057             : ROSE_DLL_API SgUndefDirectiveStatement* isSgUndefDirectiveStatement(SgNode* node);
    3058             : ROSE_DLL_API const SgUndefDirectiveStatement* isSgUndefDirectiveStatement(const SgNode* node);
    3059             : #define IS_SgUndefDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUndefDirectiveStatement::static_variant >> 3] & (1 << (SgUndefDirectiveStatement::static_variant & 7)))) ? ((SgUndefDirectiveStatement*) (node)) : NULL) : NULL)
    3060             : ROSE_DLL_API SgIfdefDirectiveStatement* isSgIfdefDirectiveStatement(SgNode* node);
    3061             : ROSE_DLL_API const SgIfdefDirectiveStatement* isSgIfdefDirectiveStatement(const SgNode* node);
    3062             : #define IS_SgIfdefDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIfdefDirectiveStatement::static_variant >> 3] & (1 << (SgIfdefDirectiveStatement::static_variant & 7)))) ? ((SgIfdefDirectiveStatement*) (node)) : NULL) : NULL)
    3063             : ROSE_DLL_API SgIfndefDirectiveStatement* isSgIfndefDirectiveStatement(SgNode* node);
    3064             : ROSE_DLL_API const SgIfndefDirectiveStatement* isSgIfndefDirectiveStatement(const SgNode* node);
    3065             : #define IS_SgIfndefDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIfndefDirectiveStatement::static_variant >> 3] & (1 << (SgIfndefDirectiveStatement::static_variant & 7)))) ? ((SgIfndefDirectiveStatement*) (node)) : NULL) : NULL)
    3066             : ROSE_DLL_API SgIfDirectiveStatement* isSgIfDirectiveStatement(SgNode* node);
    3067             : ROSE_DLL_API const SgIfDirectiveStatement* isSgIfDirectiveStatement(const SgNode* node);
    3068             : #define IS_SgIfDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIfDirectiveStatement::static_variant >> 3] & (1 << (SgIfDirectiveStatement::static_variant & 7)))) ? ((SgIfDirectiveStatement*) (node)) : NULL) : NULL)
    3069             : ROSE_DLL_API SgDeadIfDirectiveStatement* isSgDeadIfDirectiveStatement(SgNode* node);
    3070             : ROSE_DLL_API const SgDeadIfDirectiveStatement* isSgDeadIfDirectiveStatement(const SgNode* node);
    3071             : #define IS_SgDeadIfDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDeadIfDirectiveStatement::static_variant >> 3] & (1 << (SgDeadIfDirectiveStatement::static_variant & 7)))) ? ((SgDeadIfDirectiveStatement*) (node)) : NULL) : NULL)
    3072             : ROSE_DLL_API SgElseDirectiveStatement* isSgElseDirectiveStatement(SgNode* node);
    3073             : ROSE_DLL_API const SgElseDirectiveStatement* isSgElseDirectiveStatement(const SgNode* node);
    3074             : #define IS_SgElseDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElseDirectiveStatement::static_variant >> 3] & (1 << (SgElseDirectiveStatement::static_variant & 7)))) ? ((SgElseDirectiveStatement*) (node)) : NULL) : NULL)
    3075             : ROSE_DLL_API SgElseifDirectiveStatement* isSgElseifDirectiveStatement(SgNode* node);
    3076             : ROSE_DLL_API const SgElseifDirectiveStatement* isSgElseifDirectiveStatement(const SgNode* node);
    3077             : #define IS_SgElseifDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElseifDirectiveStatement::static_variant >> 3] & (1 << (SgElseifDirectiveStatement::static_variant & 7)))) ? ((SgElseifDirectiveStatement*) (node)) : NULL) : NULL)
    3078             : ROSE_DLL_API SgEndifDirectiveStatement* isSgEndifDirectiveStatement(SgNode* node);
    3079             : ROSE_DLL_API const SgEndifDirectiveStatement* isSgEndifDirectiveStatement(const SgNode* node);
    3080             : #define IS_SgEndifDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEndifDirectiveStatement::static_variant >> 3] & (1 << (SgEndifDirectiveStatement::static_variant & 7)))) ? ((SgEndifDirectiveStatement*) (node)) : NULL) : NULL)
    3081             : ROSE_DLL_API SgLineDirectiveStatement* isSgLineDirectiveStatement(SgNode* node);
    3082             : ROSE_DLL_API const SgLineDirectiveStatement* isSgLineDirectiveStatement(const SgNode* node);
    3083             : #define IS_SgLineDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLineDirectiveStatement::static_variant >> 3] & (1 << (SgLineDirectiveStatement::static_variant & 7)))) ? ((SgLineDirectiveStatement*) (node)) : NULL) : NULL)
    3084             : ROSE_DLL_API SgWarningDirectiveStatement* isSgWarningDirectiveStatement(SgNode* node);
    3085             : ROSE_DLL_API const SgWarningDirectiveStatement* isSgWarningDirectiveStatement(const SgNode* node);
    3086             : #define IS_SgWarningDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgWarningDirectiveStatement::static_variant >> 3] & (1 << (SgWarningDirectiveStatement::static_variant & 7)))) ? ((SgWarningDirectiveStatement*) (node)) : NULL) : NULL)
    3087             : ROSE_DLL_API SgErrorDirectiveStatement* isSgErrorDirectiveStatement(SgNode* node);
    3088             : ROSE_DLL_API const SgErrorDirectiveStatement* isSgErrorDirectiveStatement(const SgNode* node);
    3089             : #define IS_SgErrorDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgErrorDirectiveStatement::static_variant >> 3] & (1 << (SgErrorDirectiveStatement::static_variant & 7)))) ? ((SgErrorDirectiveStatement*) (node)) : NULL) : NULL)
    3090             : ROSE_DLL_API SgEmptyDirectiveStatement* isSgEmptyDirectiveStatement(SgNode* node);
    3091             : ROSE_DLL_API const SgEmptyDirectiveStatement* isSgEmptyDirectiveStatement(const SgNode* node);
    3092             : #define IS_SgEmptyDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEmptyDirectiveStatement::static_variant >> 3] & (1 << (SgEmptyDirectiveStatement::static_variant & 7)))) ? ((SgEmptyDirectiveStatement*) (node)) : NULL) : NULL)
    3093             : ROSE_DLL_API SgIncludeNextDirectiveStatement* isSgIncludeNextDirectiveStatement(SgNode* node);
    3094             : ROSE_DLL_API const SgIncludeNextDirectiveStatement* isSgIncludeNextDirectiveStatement(const SgNode* node);
    3095             : #define IS_SgIncludeNextDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIncludeNextDirectiveStatement::static_variant >> 3] & (1 << (SgIncludeNextDirectiveStatement::static_variant & 7)))) ? ((SgIncludeNextDirectiveStatement*) (node)) : NULL) : NULL)
    3096             : ROSE_DLL_API SgIdentDirectiveStatement* isSgIdentDirectiveStatement(SgNode* node);
    3097             : ROSE_DLL_API const SgIdentDirectiveStatement* isSgIdentDirectiveStatement(const SgNode* node);
    3098             : #define IS_SgIdentDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIdentDirectiveStatement::static_variant >> 3] & (1 << (SgIdentDirectiveStatement::static_variant & 7)))) ? ((SgIdentDirectiveStatement*) (node)) : NULL) : NULL)
    3099             : ROSE_DLL_API SgLinemarkerDirectiveStatement* isSgLinemarkerDirectiveStatement(SgNode* node);
    3100             : ROSE_DLL_API const SgLinemarkerDirectiveStatement* isSgLinemarkerDirectiveStatement(const SgNode* node);
    3101             : #define IS_SgLinemarkerDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLinemarkerDirectiveStatement::static_variant >> 3] & (1 << (SgLinemarkerDirectiveStatement::static_variant & 7)))) ? ((SgLinemarkerDirectiveStatement*) (node)) : NULL) : NULL)
    3102             : ROSE_DLL_API SgC_PreprocessorDirectiveStatement* isSgC_PreprocessorDirectiveStatement(SgNode* node);
    3103             : ROSE_DLL_API const SgC_PreprocessorDirectiveStatement* isSgC_PreprocessorDirectiveStatement(const SgNode* node);
    3104             : #define IS_SgC_PreprocessorDirectiveStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgC_PreprocessorDirectiveStatement::static_variant >> 3] & (1 << (SgC_PreprocessorDirectiveStatement::static_variant & 7)))) ? ((SgC_PreprocessorDirectiveStatement*) (node)) : NULL) : NULL)
    3105             : ROSE_DLL_API SgClinkageStartStatement* isSgClinkageStartStatement(SgNode* node);
    3106             : ROSE_DLL_API const SgClinkageStartStatement* isSgClinkageStartStatement(const SgNode* node);
    3107             : #define IS_SgClinkageStartStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClinkageStartStatement::static_variant >> 3] & (1 << (SgClinkageStartStatement::static_variant & 7)))) ? ((SgClinkageStartStatement*) (node)) : NULL) : NULL)
    3108             : ROSE_DLL_API SgClinkageEndStatement* isSgClinkageEndStatement(SgNode* node);
    3109             : ROSE_DLL_API const SgClinkageEndStatement* isSgClinkageEndStatement(const SgNode* node);
    3110             : #define IS_SgClinkageEndStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClinkageEndStatement::static_variant >> 3] & (1 << (SgClinkageEndStatement::static_variant & 7)))) ? ((SgClinkageEndStatement*) (node)) : NULL) : NULL)
    3111             : ROSE_DLL_API SgClinkageDeclarationStatement* isSgClinkageDeclarationStatement(SgNode* node);
    3112             : ROSE_DLL_API const SgClinkageDeclarationStatement* isSgClinkageDeclarationStatement(const SgNode* node);
    3113             : #define IS_SgClinkageDeclarationStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClinkageDeclarationStatement::static_variant >> 3] & (1 << (SgClinkageDeclarationStatement::static_variant & 7)))) ? ((SgClinkageDeclarationStatement*) (node)) : NULL) : NULL)
    3114             : ROSE_DLL_API SgOmpDeclareSimdStatement* isSgOmpDeclareSimdStatement(SgNode* node);
    3115             : ROSE_DLL_API const SgOmpDeclareSimdStatement* isSgOmpDeclareSimdStatement(const SgNode* node);
    3116             : #define IS_SgOmpDeclareSimdStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDeclareSimdStatement::static_variant >> 3] & (1 << (SgOmpDeclareSimdStatement::static_variant & 7)))) ? ((SgOmpDeclareSimdStatement*) (node)) : NULL) : NULL)
    3117             : ROSE_DLL_API SgOmpBarrierStatement* isSgOmpBarrierStatement(SgNode* node);
    3118             : ROSE_DLL_API const SgOmpBarrierStatement* isSgOmpBarrierStatement(const SgNode* node);
    3119             : #define IS_SgOmpBarrierStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpBarrierStatement::static_variant >> 3] & (1 << (SgOmpBarrierStatement::static_variant & 7)))) ? ((SgOmpBarrierStatement*) (node)) : NULL) : NULL)
    3120             : ROSE_DLL_API SgOmpTaskyieldStatement* isSgOmpTaskyieldStatement(SgNode* node);
    3121             : ROSE_DLL_API const SgOmpTaskyieldStatement* isSgOmpTaskyieldStatement(const SgNode* node);
    3122             : #define IS_SgOmpTaskyieldStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskyieldStatement::static_variant >> 3] & (1 << (SgOmpTaskyieldStatement::static_variant & 7)))) ? ((SgOmpTaskyieldStatement*) (node)) : NULL) : NULL)
    3123             : ROSE_DLL_API SgOmpRequiresStatement* isSgOmpRequiresStatement(SgNode* node);
    3124             : ROSE_DLL_API const SgOmpRequiresStatement* isSgOmpRequiresStatement(const SgNode* node);
    3125             : #define IS_SgOmpRequiresStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpRequiresStatement::static_variant >> 3] & (1 << (SgOmpRequiresStatement::static_variant & 7)))) ? ((SgOmpRequiresStatement*) (node)) : NULL) : NULL)
    3126             : ROSE_DLL_API SgOmpTaskwaitStatement* isSgOmpTaskwaitStatement(SgNode* node);
    3127             : ROSE_DLL_API const SgOmpTaskwaitStatement* isSgOmpTaskwaitStatement(const SgNode* node);
    3128             : #define IS_SgOmpTaskwaitStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskwaitStatement::static_variant >> 3] & (1 << (SgOmpTaskwaitStatement::static_variant & 7)))) ? ((SgOmpTaskwaitStatement*) (node)) : NULL) : NULL)
    3129             : ROSE_DLL_API SgOmpThreadprivateStatement* isSgOmpThreadprivateStatement(SgNode* node);
    3130             : ROSE_DLL_API const SgOmpThreadprivateStatement* isSgOmpThreadprivateStatement(const SgNode* node);
    3131             : #define IS_SgOmpThreadprivateStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpThreadprivateStatement::static_variant >> 3] & (1 << (SgOmpThreadprivateStatement::static_variant & 7)))) ? ((SgOmpThreadprivateStatement*) (node)) : NULL) : NULL)
    3132             : ROSE_DLL_API SgMicrosoftAttributeDeclaration* isSgMicrosoftAttributeDeclaration(SgNode* node);
    3133             : ROSE_DLL_API const SgMicrosoftAttributeDeclaration* isSgMicrosoftAttributeDeclaration(const SgNode* node);
    3134             : #define IS_SgMicrosoftAttributeDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMicrosoftAttributeDeclaration::static_variant >> 3] & (1 << (SgMicrosoftAttributeDeclaration::static_variant & 7)))) ? ((SgMicrosoftAttributeDeclaration*) (node)) : NULL) : NULL)
    3135             : ROSE_DLL_API SgEmptyDeclaration* isSgEmptyDeclaration(SgNode* node);
    3136             : ROSE_DLL_API const SgEmptyDeclaration* isSgEmptyDeclaration(const SgNode* node);
    3137             : #define IS_SgEmptyDeclaration_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEmptyDeclaration::static_variant >> 3] & (1 << (SgEmptyDeclaration::static_variant & 7)))) ? ((SgEmptyDeclaration*) (node)) : NULL) : NULL)
    3138             : ROSE_DLL_API SgDeclarationStatement* isSgDeclarationStatement(SgNode* node);
    3139             : ROSE_DLL_API const SgDeclarationStatement* isSgDeclarationStatement(const SgNode* node);
    3140             : #define IS_SgDeclarationStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDeclarationStatement::static_variant >> 3] & (1 << (SgDeclarationStatement::static_variant & 7)))) ? ((SgDeclarationStatement*) (node)) : NULL) : NULL)
    3141             : ROSE_DLL_API SgUpirBaseStatement* isSgUpirBaseStatement(SgNode* node);
    3142             : ROSE_DLL_API const SgUpirBaseStatement* isSgUpirBaseStatement(const SgNode* node);
    3143             : #define IS_SgUpirBaseStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirBaseStatement::static_variant >> 3] & (1 << (SgUpirBaseStatement::static_variant & 7)))) ? ((SgUpirBaseStatement*) (node)) : NULL) : NULL)
    3144             : ROSE_DLL_API SgStatement* isSgStatement(SgNode* node);
    3145             : ROSE_DLL_API const SgStatement* isSgStatement(const SgNode* node);
    3146             : #define IS_SgStatement_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStatement::static_variant >> 3] & (1 << (SgStatement::static_variant & 7)))) ? ((SgStatement*) (node)) : NULL) : NULL)
    3147             : ROSE_DLL_API SgVarRefExp* isSgVarRefExp(SgNode* node);
    3148             : ROSE_DLL_API const SgVarRefExp* isSgVarRefExp(const SgNode* node);
    3149             : #define IS_SgVarRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVarRefExp::static_variant >> 3] & (1 << (SgVarRefExp::static_variant & 7)))) ? ((SgVarRefExp*) (node)) : NULL) : NULL)
    3150             : ROSE_DLL_API SgNonrealRefExp* isSgNonrealRefExp(SgNode* node);
    3151             : ROSE_DLL_API const SgNonrealRefExp* isSgNonrealRefExp(const SgNode* node);
    3152             : #define IS_SgNonrealRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNonrealRefExp::static_variant >> 3] & (1 << (SgNonrealRefExp::static_variant & 7)))) ? ((SgNonrealRefExp*) (node)) : NULL) : NULL)
    3153             : ROSE_DLL_API SgCompoundLiteralExp* isSgCompoundLiteralExp(SgNode* node);
    3154             : ROSE_DLL_API const SgCompoundLiteralExp* isSgCompoundLiteralExp(const SgNode* node);
    3155             : #define IS_SgCompoundLiteralExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCompoundLiteralExp::static_variant >> 3] & (1 << (SgCompoundLiteralExp::static_variant & 7)))) ? ((SgCompoundLiteralExp*) (node)) : NULL) : NULL)
    3156             : ROSE_DLL_API SgLabelRefExp* isSgLabelRefExp(SgNode* node);
    3157             : ROSE_DLL_API const SgLabelRefExp* isSgLabelRefExp(const SgNode* node);
    3158             : #define IS_SgLabelRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLabelRefExp::static_variant >> 3] & (1 << (SgLabelRefExp::static_variant & 7)))) ? ((SgLabelRefExp*) (node)) : NULL) : NULL)
    3159             : ROSE_DLL_API SgClassNameRefExp* isSgClassNameRefExp(SgNode* node);
    3160             : ROSE_DLL_API const SgClassNameRefExp* isSgClassNameRefExp(const SgNode* node);
    3161             : #define IS_SgClassNameRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClassNameRefExp::static_variant >> 3] & (1 << (SgClassNameRefExp::static_variant & 7)))) ? ((SgClassNameRefExp*) (node)) : NULL) : NULL)
    3162             : ROSE_DLL_API SgFunctionRefExp* isSgFunctionRefExp(SgNode* node);
    3163             : ROSE_DLL_API const SgFunctionRefExp* isSgFunctionRefExp(const SgNode* node);
    3164             : #define IS_SgFunctionRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionRefExp::static_variant >> 3] & (1 << (SgFunctionRefExp::static_variant & 7)))) ? ((SgFunctionRefExp*) (node)) : NULL) : NULL)
    3165             : ROSE_DLL_API SgMemberFunctionRefExp* isSgMemberFunctionRefExp(SgNode* node);
    3166             : ROSE_DLL_API const SgMemberFunctionRefExp* isSgMemberFunctionRefExp(const SgNode* node);
    3167             : #define IS_SgMemberFunctionRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMemberFunctionRefExp::static_variant >> 3] & (1 << (SgMemberFunctionRefExp::static_variant & 7)))) ? ((SgMemberFunctionRefExp*) (node)) : NULL) : NULL)
    3168             : ROSE_DLL_API SgTemplateFunctionRefExp* isSgTemplateFunctionRefExp(SgNode* node);
    3169             : ROSE_DLL_API const SgTemplateFunctionRefExp* isSgTemplateFunctionRefExp(const SgNode* node);
    3170             : #define IS_SgTemplateFunctionRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateFunctionRefExp::static_variant >> 3] & (1 << (SgTemplateFunctionRefExp::static_variant & 7)))) ? ((SgTemplateFunctionRefExp*) (node)) : NULL) : NULL)
    3171             : ROSE_DLL_API SgTemplateMemberFunctionRefExp* isSgTemplateMemberFunctionRefExp(SgNode* node);
    3172             : ROSE_DLL_API const SgTemplateMemberFunctionRefExp* isSgTemplateMemberFunctionRefExp(const SgNode* node);
    3173             : #define IS_SgTemplateMemberFunctionRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateMemberFunctionRefExp::static_variant >> 3] & (1 << (SgTemplateMemberFunctionRefExp::static_variant & 7)))) ? ((SgTemplateMemberFunctionRefExp*) (node)) : NULL) : NULL)
    3174             : ROSE_DLL_API SgSizeOfOp* isSgSizeOfOp(SgNode* node);
    3175             : ROSE_DLL_API const SgSizeOfOp* isSgSizeOfOp(const SgNode* node);
    3176             : #define IS_SgSizeOfOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSizeOfOp::static_variant >> 3] & (1 << (SgSizeOfOp::static_variant & 7)))) ? ((SgSizeOfOp*) (node)) : NULL) : NULL)
    3177             : ROSE_DLL_API SgAlignOfOp* isSgAlignOfOp(SgNode* node);
    3178             : ROSE_DLL_API const SgAlignOfOp* isSgAlignOfOp(const SgNode* node);
    3179             : #define IS_SgAlignOfOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAlignOfOp::static_variant >> 3] & (1 << (SgAlignOfOp::static_variant & 7)))) ? ((SgAlignOfOp*) (node)) : NULL) : NULL)
    3180             : ROSE_DLL_API SgNoexceptOp* isSgNoexceptOp(SgNode* node);
    3181             : ROSE_DLL_API const SgNoexceptOp* isSgNoexceptOp(const SgNode* node);
    3182             : #define IS_SgNoexceptOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNoexceptOp::static_variant >> 3] & (1 << (SgNoexceptOp::static_variant & 7)))) ? ((SgNoexceptOp*) (node)) : NULL) : NULL)
    3183             : ROSE_DLL_API SgTypeExpression* isSgTypeExpression(SgNode* node);
    3184             : ROSE_DLL_API const SgTypeExpression* isSgTypeExpression(const SgNode* node);
    3185             : #define IS_SgTypeExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeExpression::static_variant >> 3] & (1 << (SgTypeExpression::static_variant & 7)))) ? ((SgTypeExpression*) (node)) : NULL) : NULL)
    3186             : ROSE_DLL_API SgLambdaExp* isSgLambdaExp(SgNode* node);
    3187             : ROSE_DLL_API const SgLambdaExp* isSgLambdaExp(const SgNode* node);
    3188             : #define IS_SgLambdaExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLambdaExp::static_variant >> 3] & (1 << (SgLambdaExp::static_variant & 7)))) ? ((SgLambdaExp*) (node)) : NULL) : NULL)
    3189             : ROSE_DLL_API SgUpcLocalsizeofExpression* isSgUpcLocalsizeofExpression(SgNode* node);
    3190             : ROSE_DLL_API const SgUpcLocalsizeofExpression* isSgUpcLocalsizeofExpression(const SgNode* node);
    3191             : #define IS_SgUpcLocalsizeofExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcLocalsizeofExpression::static_variant >> 3] & (1 << (SgUpcLocalsizeofExpression::static_variant & 7)))) ? ((SgUpcLocalsizeofExpression*) (node)) : NULL) : NULL)
    3192             : ROSE_DLL_API SgUpcBlocksizeofExpression* isSgUpcBlocksizeofExpression(SgNode* node);
    3193             : ROSE_DLL_API const SgUpcBlocksizeofExpression* isSgUpcBlocksizeofExpression(const SgNode* node);
    3194             : #define IS_SgUpcBlocksizeofExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcBlocksizeofExpression::static_variant >> 3] & (1 << (SgUpcBlocksizeofExpression::static_variant & 7)))) ? ((SgUpcBlocksizeofExpression*) (node)) : NULL) : NULL)
    3195             : ROSE_DLL_API SgUpcElemsizeofExpression* isSgUpcElemsizeofExpression(SgNode* node);
    3196             : ROSE_DLL_API const SgUpcElemsizeofExpression* isSgUpcElemsizeofExpression(const SgNode* node);
    3197             : #define IS_SgUpcElemsizeofExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcElemsizeofExpression::static_variant >> 3] & (1 << (SgUpcElemsizeofExpression::static_variant & 7)))) ? ((SgUpcElemsizeofExpression*) (node)) : NULL) : NULL)
    3198             : ROSE_DLL_API SgVarArgStartOp* isSgVarArgStartOp(SgNode* node);
    3199             : ROSE_DLL_API const SgVarArgStartOp* isSgVarArgStartOp(const SgNode* node);
    3200             : #define IS_SgVarArgStartOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVarArgStartOp::static_variant >> 3] & (1 << (SgVarArgStartOp::static_variant & 7)))) ? ((SgVarArgStartOp*) (node)) : NULL) : NULL)
    3201             : ROSE_DLL_API SgVarArgStartOneOperandOp* isSgVarArgStartOneOperandOp(SgNode* node);
    3202             : ROSE_DLL_API const SgVarArgStartOneOperandOp* isSgVarArgStartOneOperandOp(const SgNode* node);
    3203             : #define IS_SgVarArgStartOneOperandOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVarArgStartOneOperandOp::static_variant >> 3] & (1 << (SgVarArgStartOneOperandOp::static_variant & 7)))) ? ((SgVarArgStartOneOperandOp*) (node)) : NULL) : NULL)
    3204             : ROSE_DLL_API SgVarArgOp* isSgVarArgOp(SgNode* node);
    3205             : ROSE_DLL_API const SgVarArgOp* isSgVarArgOp(const SgNode* node);
    3206             : #define IS_SgVarArgOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVarArgOp::static_variant >> 3] & (1 << (SgVarArgOp::static_variant & 7)))) ? ((SgVarArgOp*) (node)) : NULL) : NULL)
    3207             : ROSE_DLL_API SgVarArgEndOp* isSgVarArgEndOp(SgNode* node);
    3208             : ROSE_DLL_API const SgVarArgEndOp* isSgVarArgEndOp(const SgNode* node);
    3209             : #define IS_SgVarArgEndOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVarArgEndOp::static_variant >> 3] & (1 << (SgVarArgEndOp::static_variant & 7)))) ? ((SgVarArgEndOp*) (node)) : NULL) : NULL)
    3210             : ROSE_DLL_API SgVarArgCopyOp* isSgVarArgCopyOp(SgNode* node);
    3211             : ROSE_DLL_API const SgVarArgCopyOp* isSgVarArgCopyOp(const SgNode* node);
    3212             : #define IS_SgVarArgCopyOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVarArgCopyOp::static_variant >> 3] & (1 << (SgVarArgCopyOp::static_variant & 7)))) ? ((SgVarArgCopyOp*) (node)) : NULL) : NULL)
    3213             : ROSE_DLL_API SgTypeIdOp* isSgTypeIdOp(SgNode* node);
    3214             : ROSE_DLL_API const SgTypeIdOp* isSgTypeIdOp(const SgNode* node);
    3215             : #define IS_SgTypeIdOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeIdOp::static_variant >> 3] & (1 << (SgTypeIdOp::static_variant & 7)))) ? ((SgTypeIdOp*) (node)) : NULL) : NULL)
    3216             : ROSE_DLL_API SgConditionalExp* isSgConditionalExp(SgNode* node);
    3217             : ROSE_DLL_API const SgConditionalExp* isSgConditionalExp(const SgNode* node);
    3218             : #define IS_SgConditionalExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgConditionalExp::static_variant >> 3] & (1 << (SgConditionalExp::static_variant & 7)))) ? ((SgConditionalExp*) (node)) : NULL) : NULL)
    3219             : ROSE_DLL_API SgNewExp* isSgNewExp(SgNode* node);
    3220             : ROSE_DLL_API const SgNewExp* isSgNewExp(const SgNode* node);
    3221             : #define IS_SgNewExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNewExp::static_variant >> 3] & (1 << (SgNewExp::static_variant & 7)))) ? ((SgNewExp*) (node)) : NULL) : NULL)
    3222             : ROSE_DLL_API SgDeleteExp* isSgDeleteExp(SgNode* node);
    3223             : ROSE_DLL_API const SgDeleteExp* isSgDeleteExp(const SgNode* node);
    3224             : #define IS_SgDeleteExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDeleteExp::static_variant >> 3] & (1 << (SgDeleteExp::static_variant & 7)))) ? ((SgDeleteExp*) (node)) : NULL) : NULL)
    3225             : ROSE_DLL_API SgThisExp* isSgThisExp(SgNode* node);
    3226             : ROSE_DLL_API const SgThisExp* isSgThisExp(const SgNode* node);
    3227             : #define IS_SgThisExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgThisExp::static_variant >> 3] & (1 << (SgThisExp::static_variant & 7)))) ? ((SgThisExp*) (node)) : NULL) : NULL)
    3228             : ROSE_DLL_API SgSuperExp* isSgSuperExp(SgNode* node);
    3229             : ROSE_DLL_API const SgSuperExp* isSgSuperExp(const SgNode* node);
    3230             : #define IS_SgSuperExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSuperExp::static_variant >> 3] & (1 << (SgSuperExp::static_variant & 7)))) ? ((SgSuperExp*) (node)) : NULL) : NULL)
    3231             : ROSE_DLL_API SgClassExp* isSgClassExp(SgNode* node);
    3232             : ROSE_DLL_API const SgClassExp* isSgClassExp(const SgNode* node);
    3233             : #define IS_SgClassExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClassExp::static_variant >> 3] & (1 << (SgClassExp::static_variant & 7)))) ? ((SgClassExp*) (node)) : NULL) : NULL)
    3234             : ROSE_DLL_API SgRefExp* isSgRefExp(SgNode* node);
    3235             : ROSE_DLL_API const SgRefExp* isSgRefExp(const SgNode* node);
    3236             : #define IS_SgRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRefExp::static_variant >> 3] & (1 << (SgRefExp::static_variant & 7)))) ? ((SgRefExp*) (node)) : NULL) : NULL)
    3237             : ROSE_DLL_API SgAggregateInitializer* isSgAggregateInitializer(SgNode* node);
    3238             : ROSE_DLL_API const SgAggregateInitializer* isSgAggregateInitializer(const SgNode* node);
    3239             : #define IS_SgAggregateInitializer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAggregateInitializer::static_variant >> 3] & (1 << (SgAggregateInitializer::static_variant & 7)))) ? ((SgAggregateInitializer*) (node)) : NULL) : NULL)
    3240             : ROSE_DLL_API SgCompoundInitializer* isSgCompoundInitializer(SgNode* node);
    3241             : ROSE_DLL_API const SgCompoundInitializer* isSgCompoundInitializer(const SgNode* node);
    3242             : #define IS_SgCompoundInitializer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCompoundInitializer::static_variant >> 3] & (1 << (SgCompoundInitializer::static_variant & 7)))) ? ((SgCompoundInitializer*) (node)) : NULL) : NULL)
    3243             : ROSE_DLL_API SgConstructorInitializer* isSgConstructorInitializer(SgNode* node);
    3244             : ROSE_DLL_API const SgConstructorInitializer* isSgConstructorInitializer(const SgNode* node);
    3245             : #define IS_SgConstructorInitializer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgConstructorInitializer::static_variant >> 3] & (1 << (SgConstructorInitializer::static_variant & 7)))) ? ((SgConstructorInitializer*) (node)) : NULL) : NULL)
    3246             : ROSE_DLL_API SgAssignInitializer* isSgAssignInitializer(SgNode* node);
    3247             : ROSE_DLL_API const SgAssignInitializer* isSgAssignInitializer(const SgNode* node);
    3248             : #define IS_SgAssignInitializer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAssignInitializer::static_variant >> 3] & (1 << (SgAssignInitializer::static_variant & 7)))) ? ((SgAssignInitializer*) (node)) : NULL) : NULL)
    3249             : ROSE_DLL_API SgBracedInitializer* isSgBracedInitializer(SgNode* node);
    3250             : ROSE_DLL_API const SgBracedInitializer* isSgBracedInitializer(const SgNode* node);
    3251             : #define IS_SgBracedInitializer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBracedInitializer::static_variant >> 3] & (1 << (SgBracedInitializer::static_variant & 7)))) ? ((SgBracedInitializer*) (node)) : NULL) : NULL)
    3252             : ROSE_DLL_API SgExpressionRoot* isSgExpressionRoot(SgNode* node);
    3253             : ROSE_DLL_API const SgExpressionRoot* isSgExpressionRoot(const SgNode* node);
    3254             : #define IS_SgExpressionRoot_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExpressionRoot::static_variant >> 3] & (1 << (SgExpressionRoot::static_variant & 7)))) ? ((SgExpressionRoot*) (node)) : NULL) : NULL)
    3255             : ROSE_DLL_API SgMinusOp* isSgMinusOp(SgNode* node);
    3256             : ROSE_DLL_API const SgMinusOp* isSgMinusOp(const SgNode* node);
    3257             : #define IS_SgMinusOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMinusOp::static_variant >> 3] & (1 << (SgMinusOp::static_variant & 7)))) ? ((SgMinusOp*) (node)) : NULL) : NULL)
    3258             : ROSE_DLL_API SgUnaryAddOp* isSgUnaryAddOp(SgNode* node);
    3259             : ROSE_DLL_API const SgUnaryAddOp* isSgUnaryAddOp(const SgNode* node);
    3260             : #define IS_SgUnaryAddOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnaryAddOp::static_variant >> 3] & (1 << (SgUnaryAddOp::static_variant & 7)))) ? ((SgUnaryAddOp*) (node)) : NULL) : NULL)
    3261             : ROSE_DLL_API SgNotOp* isSgNotOp(SgNode* node);
    3262             : ROSE_DLL_API const SgNotOp* isSgNotOp(const SgNode* node);
    3263             : #define IS_SgNotOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNotOp::static_variant >> 3] & (1 << (SgNotOp::static_variant & 7)))) ? ((SgNotOp*) (node)) : NULL) : NULL)
    3264             : ROSE_DLL_API SgPointerDerefExp* isSgPointerDerefExp(SgNode* node);
    3265             : ROSE_DLL_API const SgPointerDerefExp* isSgPointerDerefExp(const SgNode* node);
    3266             : #define IS_SgPointerDerefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPointerDerefExp::static_variant >> 3] & (1 << (SgPointerDerefExp::static_variant & 7)))) ? ((SgPointerDerefExp*) (node)) : NULL) : NULL)
    3267             : ROSE_DLL_API SgAddressOfOp* isSgAddressOfOp(SgNode* node);
    3268             : ROSE_DLL_API const SgAddressOfOp* isSgAddressOfOp(const SgNode* node);
    3269             : #define IS_SgAddressOfOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAddressOfOp::static_variant >> 3] & (1 << (SgAddressOfOp::static_variant & 7)))) ? ((SgAddressOfOp*) (node)) : NULL) : NULL)
    3270             : ROSE_DLL_API SgMinusMinusOp* isSgMinusMinusOp(SgNode* node);
    3271             : ROSE_DLL_API const SgMinusMinusOp* isSgMinusMinusOp(const SgNode* node);
    3272             : #define IS_SgMinusMinusOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMinusMinusOp::static_variant >> 3] & (1 << (SgMinusMinusOp::static_variant & 7)))) ? ((SgMinusMinusOp*) (node)) : NULL) : NULL)
    3273             : ROSE_DLL_API SgPlusPlusOp* isSgPlusPlusOp(SgNode* node);
    3274             : ROSE_DLL_API const SgPlusPlusOp* isSgPlusPlusOp(const SgNode* node);
    3275             : #define IS_SgPlusPlusOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPlusPlusOp::static_variant >> 3] & (1 << (SgPlusPlusOp::static_variant & 7)))) ? ((SgPlusPlusOp*) (node)) : NULL) : NULL)
    3276             : ROSE_DLL_API SgBitComplementOp* isSgBitComplementOp(SgNode* node);
    3277             : ROSE_DLL_API const SgBitComplementOp* isSgBitComplementOp(const SgNode* node);
    3278             : #define IS_SgBitComplementOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBitComplementOp::static_variant >> 3] & (1 << (SgBitComplementOp::static_variant & 7)))) ? ((SgBitComplementOp*) (node)) : NULL) : NULL)
    3279             : ROSE_DLL_API SgRealPartOp* isSgRealPartOp(SgNode* node);
    3280             : ROSE_DLL_API const SgRealPartOp* isSgRealPartOp(const SgNode* node);
    3281             : #define IS_SgRealPartOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRealPartOp::static_variant >> 3] & (1 << (SgRealPartOp::static_variant & 7)))) ? ((SgRealPartOp*) (node)) : NULL) : NULL)
    3282             : ROSE_DLL_API SgImagPartOp* isSgImagPartOp(SgNode* node);
    3283             : ROSE_DLL_API const SgImagPartOp* isSgImagPartOp(const SgNode* node);
    3284             : #define IS_SgImagPartOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgImagPartOp::static_variant >> 3] & (1 << (SgImagPartOp::static_variant & 7)))) ? ((SgImagPartOp*) (node)) : NULL) : NULL)
    3285             : ROSE_DLL_API SgConjugateOp* isSgConjugateOp(SgNode* node);
    3286             : ROSE_DLL_API const SgConjugateOp* isSgConjugateOp(const SgNode* node);
    3287             : #define IS_SgConjugateOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgConjugateOp::static_variant >> 3] & (1 << (SgConjugateOp::static_variant & 7)))) ? ((SgConjugateOp*) (node)) : NULL) : NULL)
    3288             : ROSE_DLL_API SgCastExp* isSgCastExp(SgNode* node);
    3289             : ROSE_DLL_API const SgCastExp* isSgCastExp(const SgNode* node);
    3290             : #define IS_SgCastExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCastExp::static_variant >> 3] & (1 << (SgCastExp::static_variant & 7)))) ? ((SgCastExp*) (node)) : NULL) : NULL)
    3291             : ROSE_DLL_API SgThrowOp* isSgThrowOp(SgNode* node);
    3292             : ROSE_DLL_API const SgThrowOp* isSgThrowOp(const SgNode* node);
    3293             : #define IS_SgThrowOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgThrowOp::static_variant >> 3] & (1 << (SgThrowOp::static_variant & 7)))) ? ((SgThrowOp*) (node)) : NULL) : NULL)
    3294             : ROSE_DLL_API SgArrowExp* isSgArrowExp(SgNode* node);
    3295             : ROSE_DLL_API const SgArrowExp* isSgArrowExp(const SgNode* node);
    3296             : #define IS_SgArrowExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgArrowExp::static_variant >> 3] & (1 << (SgArrowExp::static_variant & 7)))) ? ((SgArrowExp*) (node)) : NULL) : NULL)
    3297             : ROSE_DLL_API SgDotExp* isSgDotExp(SgNode* node);
    3298             : ROSE_DLL_API const SgDotExp* isSgDotExp(const SgNode* node);
    3299             : #define IS_SgDotExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDotExp::static_variant >> 3] & (1 << (SgDotExp::static_variant & 7)))) ? ((SgDotExp*) (node)) : NULL) : NULL)
    3300             : ROSE_DLL_API SgDotStarOp* isSgDotStarOp(SgNode* node);
    3301             : ROSE_DLL_API const SgDotStarOp* isSgDotStarOp(const SgNode* node);
    3302             : #define IS_SgDotStarOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDotStarOp::static_variant >> 3] & (1 << (SgDotStarOp::static_variant & 7)))) ? ((SgDotStarOp*) (node)) : NULL) : NULL)
    3303             : ROSE_DLL_API SgArrowStarOp* isSgArrowStarOp(SgNode* node);
    3304             : ROSE_DLL_API const SgArrowStarOp* isSgArrowStarOp(const SgNode* node);
    3305             : #define IS_SgArrowStarOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgArrowStarOp::static_variant >> 3] & (1 << (SgArrowStarOp::static_variant & 7)))) ? ((SgArrowStarOp*) (node)) : NULL) : NULL)
    3306             : ROSE_DLL_API SgEqualityOp* isSgEqualityOp(SgNode* node);
    3307             : ROSE_DLL_API const SgEqualityOp* isSgEqualityOp(const SgNode* node);
    3308             : #define IS_SgEqualityOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEqualityOp::static_variant >> 3] & (1 << (SgEqualityOp::static_variant & 7)))) ? ((SgEqualityOp*) (node)) : NULL) : NULL)
    3309             : ROSE_DLL_API SgLessThanOp* isSgLessThanOp(SgNode* node);
    3310             : ROSE_DLL_API const SgLessThanOp* isSgLessThanOp(const SgNode* node);
    3311             : #define IS_SgLessThanOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLessThanOp::static_variant >> 3] & (1 << (SgLessThanOp::static_variant & 7)))) ? ((SgLessThanOp*) (node)) : NULL) : NULL)
    3312             : ROSE_DLL_API SgGreaterThanOp* isSgGreaterThanOp(SgNode* node);
    3313             : ROSE_DLL_API const SgGreaterThanOp* isSgGreaterThanOp(const SgNode* node);
    3314             : #define IS_SgGreaterThanOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGreaterThanOp::static_variant >> 3] & (1 << (SgGreaterThanOp::static_variant & 7)))) ? ((SgGreaterThanOp*) (node)) : NULL) : NULL)
    3315             : ROSE_DLL_API SgNotEqualOp* isSgNotEqualOp(SgNode* node);
    3316             : ROSE_DLL_API const SgNotEqualOp* isSgNotEqualOp(const SgNode* node);
    3317             : #define IS_SgNotEqualOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNotEqualOp::static_variant >> 3] & (1 << (SgNotEqualOp::static_variant & 7)))) ? ((SgNotEqualOp*) (node)) : NULL) : NULL)
    3318             : ROSE_DLL_API SgLessOrEqualOp* isSgLessOrEqualOp(SgNode* node);
    3319             : ROSE_DLL_API const SgLessOrEqualOp* isSgLessOrEqualOp(const SgNode* node);
    3320             : #define IS_SgLessOrEqualOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLessOrEqualOp::static_variant >> 3] & (1 << (SgLessOrEqualOp::static_variant & 7)))) ? ((SgLessOrEqualOp*) (node)) : NULL) : NULL)
    3321             : ROSE_DLL_API SgGreaterOrEqualOp* isSgGreaterOrEqualOp(SgNode* node);
    3322             : ROSE_DLL_API const SgGreaterOrEqualOp* isSgGreaterOrEqualOp(const SgNode* node);
    3323             : #define IS_SgGreaterOrEqualOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgGreaterOrEqualOp::static_variant >> 3] & (1 << (SgGreaterOrEqualOp::static_variant & 7)))) ? ((SgGreaterOrEqualOp*) (node)) : NULL) : NULL)
    3324             : ROSE_DLL_API SgAddOp* isSgAddOp(SgNode* node);
    3325             : ROSE_DLL_API const SgAddOp* isSgAddOp(const SgNode* node);
    3326             : #define IS_SgAddOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAddOp::static_variant >> 3] & (1 << (SgAddOp::static_variant & 7)))) ? ((SgAddOp*) (node)) : NULL) : NULL)
    3327             : ROSE_DLL_API SgSubtractOp* isSgSubtractOp(SgNode* node);
    3328             : ROSE_DLL_API const SgSubtractOp* isSgSubtractOp(const SgNode* node);
    3329             : #define IS_SgSubtractOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSubtractOp::static_variant >> 3] & (1 << (SgSubtractOp::static_variant & 7)))) ? ((SgSubtractOp*) (node)) : NULL) : NULL)
    3330             : ROSE_DLL_API SgMultiplyOp* isSgMultiplyOp(SgNode* node);
    3331             : ROSE_DLL_API const SgMultiplyOp* isSgMultiplyOp(const SgNode* node);
    3332             : #define IS_SgMultiplyOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMultiplyOp::static_variant >> 3] & (1 << (SgMultiplyOp::static_variant & 7)))) ? ((SgMultiplyOp*) (node)) : NULL) : NULL)
    3333             : ROSE_DLL_API SgDivideOp* isSgDivideOp(SgNode* node);
    3334             : ROSE_DLL_API const SgDivideOp* isSgDivideOp(const SgNode* node);
    3335             : #define IS_SgDivideOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDivideOp::static_variant >> 3] & (1 << (SgDivideOp::static_variant & 7)))) ? ((SgDivideOp*) (node)) : NULL) : NULL)
    3336             : ROSE_DLL_API SgIntegerDivideOp* isSgIntegerDivideOp(SgNode* node);
    3337             : ROSE_DLL_API const SgIntegerDivideOp* isSgIntegerDivideOp(const SgNode* node);
    3338             : #define IS_SgIntegerDivideOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIntegerDivideOp::static_variant >> 3] & (1 << (SgIntegerDivideOp::static_variant & 7)))) ? ((SgIntegerDivideOp*) (node)) : NULL) : NULL)
    3339             : ROSE_DLL_API SgModOp* isSgModOp(SgNode* node);
    3340             : ROSE_DLL_API const SgModOp* isSgModOp(const SgNode* node);
    3341             : #define IS_SgModOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgModOp::static_variant >> 3] & (1 << (SgModOp::static_variant & 7)))) ? ((SgModOp*) (node)) : NULL) : NULL)
    3342             : ROSE_DLL_API SgAndOp* isSgAndOp(SgNode* node);
    3343             : ROSE_DLL_API const SgAndOp* isSgAndOp(const SgNode* node);
    3344             : #define IS_SgAndOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAndOp::static_variant >> 3] & (1 << (SgAndOp::static_variant & 7)))) ? ((SgAndOp*) (node)) : NULL) : NULL)
    3345             : ROSE_DLL_API SgOrOp* isSgOrOp(SgNode* node);
    3346             : ROSE_DLL_API const SgOrOp* isSgOrOp(const SgNode* node);
    3347             : #define IS_SgOrOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOrOp::static_variant >> 3] & (1 << (SgOrOp::static_variant & 7)))) ? ((SgOrOp*) (node)) : NULL) : NULL)
    3348             : ROSE_DLL_API SgBitXorOp* isSgBitXorOp(SgNode* node);
    3349             : ROSE_DLL_API const SgBitXorOp* isSgBitXorOp(const SgNode* node);
    3350             : #define IS_SgBitXorOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBitXorOp::static_variant >> 3] & (1 << (SgBitXorOp::static_variant & 7)))) ? ((SgBitXorOp*) (node)) : NULL) : NULL)
    3351             : ROSE_DLL_API SgBitAndOp* isSgBitAndOp(SgNode* node);
    3352             : ROSE_DLL_API const SgBitAndOp* isSgBitAndOp(const SgNode* node);
    3353             : #define IS_SgBitAndOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBitAndOp::static_variant >> 3] & (1 << (SgBitAndOp::static_variant & 7)))) ? ((SgBitAndOp*) (node)) : NULL) : NULL)
    3354             : ROSE_DLL_API SgBitOrOp* isSgBitOrOp(SgNode* node);
    3355             : ROSE_DLL_API const SgBitOrOp* isSgBitOrOp(const SgNode* node);
    3356             : #define IS_SgBitOrOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBitOrOp::static_variant >> 3] & (1 << (SgBitOrOp::static_variant & 7)))) ? ((SgBitOrOp*) (node)) : NULL) : NULL)
    3357             : ROSE_DLL_API SgBitEqvOp* isSgBitEqvOp(SgNode* node);
    3358             : ROSE_DLL_API const SgBitEqvOp* isSgBitEqvOp(const SgNode* node);
    3359             : #define IS_SgBitEqvOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBitEqvOp::static_variant >> 3] & (1 << (SgBitEqvOp::static_variant & 7)))) ? ((SgBitEqvOp*) (node)) : NULL) : NULL)
    3360             : ROSE_DLL_API SgCommaOpExp* isSgCommaOpExp(SgNode* node);
    3361             : ROSE_DLL_API const SgCommaOpExp* isSgCommaOpExp(const SgNode* node);
    3362             : #define IS_SgCommaOpExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCommaOpExp::static_variant >> 3] & (1 << (SgCommaOpExp::static_variant & 7)))) ? ((SgCommaOpExp*) (node)) : NULL) : NULL)
    3363             : ROSE_DLL_API SgLshiftOp* isSgLshiftOp(SgNode* node);
    3364             : ROSE_DLL_API const SgLshiftOp* isSgLshiftOp(const SgNode* node);
    3365             : #define IS_SgLshiftOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLshiftOp::static_variant >> 3] & (1 << (SgLshiftOp::static_variant & 7)))) ? ((SgLshiftOp*) (node)) : NULL) : NULL)
    3366             : ROSE_DLL_API SgRshiftOp* isSgRshiftOp(SgNode* node);
    3367             : ROSE_DLL_API const SgRshiftOp* isSgRshiftOp(const SgNode* node);
    3368             : #define IS_SgRshiftOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRshiftOp::static_variant >> 3] & (1 << (SgRshiftOp::static_variant & 7)))) ? ((SgRshiftOp*) (node)) : NULL) : NULL)
    3369             : ROSE_DLL_API SgPntrArrRefExp* isSgPntrArrRefExp(SgNode* node);
    3370             : ROSE_DLL_API const SgPntrArrRefExp* isSgPntrArrRefExp(const SgNode* node);
    3371             : #define IS_SgPntrArrRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPntrArrRefExp::static_variant >> 3] & (1 << (SgPntrArrRefExp::static_variant & 7)))) ? ((SgPntrArrRefExp*) (node)) : NULL) : NULL)
    3372             : ROSE_DLL_API SgScopeOp* isSgScopeOp(SgNode* node);
    3373             : ROSE_DLL_API const SgScopeOp* isSgScopeOp(const SgNode* node);
    3374             : #define IS_SgScopeOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgScopeOp::static_variant >> 3] & (1 << (SgScopeOp::static_variant & 7)))) ? ((SgScopeOp*) (node)) : NULL) : NULL)
    3375             : ROSE_DLL_API SgAssignOp* isSgAssignOp(SgNode* node);
    3376             : ROSE_DLL_API const SgAssignOp* isSgAssignOp(const SgNode* node);
    3377             : #define IS_SgAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAssignOp::static_variant >> 3] & (1 << (SgAssignOp::static_variant & 7)))) ? ((SgAssignOp*) (node)) : NULL) : NULL)
    3378             : ROSE_DLL_API SgPlusAssignOp* isSgPlusAssignOp(SgNode* node);
    3379             : ROSE_DLL_API const SgPlusAssignOp* isSgPlusAssignOp(const SgNode* node);
    3380             : #define IS_SgPlusAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPlusAssignOp::static_variant >> 3] & (1 << (SgPlusAssignOp::static_variant & 7)))) ? ((SgPlusAssignOp*) (node)) : NULL) : NULL)
    3381             : ROSE_DLL_API SgMinusAssignOp* isSgMinusAssignOp(SgNode* node);
    3382             : ROSE_DLL_API const SgMinusAssignOp* isSgMinusAssignOp(const SgNode* node);
    3383             : #define IS_SgMinusAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMinusAssignOp::static_variant >> 3] & (1 << (SgMinusAssignOp::static_variant & 7)))) ? ((SgMinusAssignOp*) (node)) : NULL) : NULL)
    3384             : ROSE_DLL_API SgAndAssignOp* isSgAndAssignOp(SgNode* node);
    3385             : ROSE_DLL_API const SgAndAssignOp* isSgAndAssignOp(const SgNode* node);
    3386             : #define IS_SgAndAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAndAssignOp::static_variant >> 3] & (1 << (SgAndAssignOp::static_variant & 7)))) ? ((SgAndAssignOp*) (node)) : NULL) : NULL)
    3387             : ROSE_DLL_API SgIorAssignOp* isSgIorAssignOp(SgNode* node);
    3388             : ROSE_DLL_API const SgIorAssignOp* isSgIorAssignOp(const SgNode* node);
    3389             : #define IS_SgIorAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIorAssignOp::static_variant >> 3] & (1 << (SgIorAssignOp::static_variant & 7)))) ? ((SgIorAssignOp*) (node)) : NULL) : NULL)
    3390             : ROSE_DLL_API SgMultAssignOp* isSgMultAssignOp(SgNode* node);
    3391             : ROSE_DLL_API const SgMultAssignOp* isSgMultAssignOp(const SgNode* node);
    3392             : #define IS_SgMultAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMultAssignOp::static_variant >> 3] & (1 << (SgMultAssignOp::static_variant & 7)))) ? ((SgMultAssignOp*) (node)) : NULL) : NULL)
    3393             : ROSE_DLL_API SgDivAssignOp* isSgDivAssignOp(SgNode* node);
    3394             : ROSE_DLL_API const SgDivAssignOp* isSgDivAssignOp(const SgNode* node);
    3395             : #define IS_SgDivAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDivAssignOp::static_variant >> 3] & (1 << (SgDivAssignOp::static_variant & 7)))) ? ((SgDivAssignOp*) (node)) : NULL) : NULL)
    3396             : ROSE_DLL_API SgModAssignOp* isSgModAssignOp(SgNode* node);
    3397             : ROSE_DLL_API const SgModAssignOp* isSgModAssignOp(const SgNode* node);
    3398             : #define IS_SgModAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgModAssignOp::static_variant >> 3] & (1 << (SgModAssignOp::static_variant & 7)))) ? ((SgModAssignOp*) (node)) : NULL) : NULL)
    3399             : ROSE_DLL_API SgXorAssignOp* isSgXorAssignOp(SgNode* node);
    3400             : ROSE_DLL_API const SgXorAssignOp* isSgXorAssignOp(const SgNode* node);
    3401             : #define IS_SgXorAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgXorAssignOp::static_variant >> 3] & (1 << (SgXorAssignOp::static_variant & 7)))) ? ((SgXorAssignOp*) (node)) : NULL) : NULL)
    3402             : ROSE_DLL_API SgLshiftAssignOp* isSgLshiftAssignOp(SgNode* node);
    3403             : ROSE_DLL_API const SgLshiftAssignOp* isSgLshiftAssignOp(const SgNode* node);
    3404             : #define IS_SgLshiftAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLshiftAssignOp::static_variant >> 3] & (1 << (SgLshiftAssignOp::static_variant & 7)))) ? ((SgLshiftAssignOp*) (node)) : NULL) : NULL)
    3405             : ROSE_DLL_API SgRshiftAssignOp* isSgRshiftAssignOp(SgNode* node);
    3406             : ROSE_DLL_API const SgRshiftAssignOp* isSgRshiftAssignOp(const SgNode* node);
    3407             : #define IS_SgRshiftAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRshiftAssignOp::static_variant >> 3] & (1 << (SgRshiftAssignOp::static_variant & 7)))) ? ((SgRshiftAssignOp*) (node)) : NULL) : NULL)
    3408             : ROSE_DLL_API SgIntegerDivideAssignOp* isSgIntegerDivideAssignOp(SgNode* node);
    3409             : ROSE_DLL_API const SgIntegerDivideAssignOp* isSgIntegerDivideAssignOp(const SgNode* node);
    3410             : #define IS_SgIntegerDivideAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIntegerDivideAssignOp::static_variant >> 3] & (1 << (SgIntegerDivideAssignOp::static_variant & 7)))) ? ((SgIntegerDivideAssignOp*) (node)) : NULL) : NULL)
    3411             : ROSE_DLL_API SgExponentiationAssignOp* isSgExponentiationAssignOp(SgNode* node);
    3412             : ROSE_DLL_API const SgExponentiationAssignOp* isSgExponentiationAssignOp(const SgNode* node);
    3413             : #define IS_SgExponentiationAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExponentiationAssignOp::static_variant >> 3] & (1 << (SgExponentiationAssignOp::static_variant & 7)))) ? ((SgExponentiationAssignOp*) (node)) : NULL) : NULL)
    3414             : ROSE_DLL_API SgConcatenationOp* isSgConcatenationOp(SgNode* node);
    3415             : ROSE_DLL_API const SgConcatenationOp* isSgConcatenationOp(const SgNode* node);
    3416             : #define IS_SgConcatenationOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgConcatenationOp::static_variant >> 3] & (1 << (SgConcatenationOp::static_variant & 7)))) ? ((SgConcatenationOp*) (node)) : NULL) : NULL)
    3417             : ROSE_DLL_API SgNaryComparisonOp* isSgNaryComparisonOp(SgNode* node);
    3418             : ROSE_DLL_API const SgNaryComparisonOp* isSgNaryComparisonOp(const SgNode* node);
    3419             : #define IS_SgNaryComparisonOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNaryComparisonOp::static_variant >> 3] & (1 << (SgNaryComparisonOp::static_variant & 7)))) ? ((SgNaryComparisonOp*) (node)) : NULL) : NULL)
    3420             : ROSE_DLL_API SgNaryBooleanOp* isSgNaryBooleanOp(SgNode* node);
    3421             : ROSE_DLL_API const SgNaryBooleanOp* isSgNaryBooleanOp(const SgNode* node);
    3422             : #define IS_SgNaryBooleanOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNaryBooleanOp::static_variant >> 3] & (1 << (SgNaryBooleanOp::static_variant & 7)))) ? ((SgNaryBooleanOp*) (node)) : NULL) : NULL)
    3423             : ROSE_DLL_API SgBoolValExp* isSgBoolValExp(SgNode* node);
    3424             : ROSE_DLL_API const SgBoolValExp* isSgBoolValExp(const SgNode* node);
    3425             : #define IS_SgBoolValExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBoolValExp::static_variant >> 3] & (1 << (SgBoolValExp::static_variant & 7)))) ? ((SgBoolValExp*) (node)) : NULL) : NULL)
    3426             : ROSE_DLL_API SgStringVal* isSgStringVal(SgNode* node);
    3427             : ROSE_DLL_API const SgStringVal* isSgStringVal(const SgNode* node);
    3428             : #define IS_SgStringVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStringVal::static_variant >> 3] & (1 << (SgStringVal::static_variant & 7)))) ? ((SgStringVal*) (node)) : NULL) : NULL)
    3429             : ROSE_DLL_API SgShortVal* isSgShortVal(SgNode* node);
    3430             : ROSE_DLL_API const SgShortVal* isSgShortVal(const SgNode* node);
    3431             : #define IS_SgShortVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgShortVal::static_variant >> 3] & (1 << (SgShortVal::static_variant & 7)))) ? ((SgShortVal*) (node)) : NULL) : NULL)
    3432             : ROSE_DLL_API SgCharVal* isSgCharVal(SgNode* node);
    3433             : ROSE_DLL_API const SgCharVal* isSgCharVal(const SgNode* node);
    3434             : #define IS_SgCharVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCharVal::static_variant >> 3] & (1 << (SgCharVal::static_variant & 7)))) ? ((SgCharVal*) (node)) : NULL) : NULL)
    3435             : ROSE_DLL_API SgUnsignedCharVal* isSgUnsignedCharVal(SgNode* node);
    3436             : ROSE_DLL_API const SgUnsignedCharVal* isSgUnsignedCharVal(const SgNode* node);
    3437             : #define IS_SgUnsignedCharVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnsignedCharVal::static_variant >> 3] & (1 << (SgUnsignedCharVal::static_variant & 7)))) ? ((SgUnsignedCharVal*) (node)) : NULL) : NULL)
    3438             : ROSE_DLL_API SgWcharVal* isSgWcharVal(SgNode* node);
    3439             : ROSE_DLL_API const SgWcharVal* isSgWcharVal(const SgNode* node);
    3440             : #define IS_SgWcharVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgWcharVal::static_variant >> 3] & (1 << (SgWcharVal::static_variant & 7)))) ? ((SgWcharVal*) (node)) : NULL) : NULL)
    3441             : ROSE_DLL_API SgChar16Val* isSgChar16Val(SgNode* node);
    3442             : ROSE_DLL_API const SgChar16Val* isSgChar16Val(const SgNode* node);
    3443             : #define IS_SgChar16Val_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgChar16Val::static_variant >> 3] & (1 << (SgChar16Val::static_variant & 7)))) ? ((SgChar16Val*) (node)) : NULL) : NULL)
    3444             : ROSE_DLL_API SgChar32Val* isSgChar32Val(SgNode* node);
    3445             : ROSE_DLL_API const SgChar32Val* isSgChar32Val(const SgNode* node);
    3446             : #define IS_SgChar32Val_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgChar32Val::static_variant >> 3] & (1 << (SgChar32Val::static_variant & 7)))) ? ((SgChar32Val*) (node)) : NULL) : NULL)
    3447             : ROSE_DLL_API SgUnsignedShortVal* isSgUnsignedShortVal(SgNode* node);
    3448             : ROSE_DLL_API const SgUnsignedShortVal* isSgUnsignedShortVal(const SgNode* node);
    3449             : #define IS_SgUnsignedShortVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnsignedShortVal::static_variant >> 3] & (1 << (SgUnsignedShortVal::static_variant & 7)))) ? ((SgUnsignedShortVal*) (node)) : NULL) : NULL)
    3450             : ROSE_DLL_API SgIntVal* isSgIntVal(SgNode* node);
    3451             : ROSE_DLL_API const SgIntVal* isSgIntVal(const SgNode* node);
    3452             : #define IS_SgIntVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIntVal::static_variant >> 3] & (1 << (SgIntVal::static_variant & 7)))) ? ((SgIntVal*) (node)) : NULL) : NULL)
    3453             : ROSE_DLL_API SgEnumVal* isSgEnumVal(SgNode* node);
    3454             : ROSE_DLL_API const SgEnumVal* isSgEnumVal(const SgNode* node);
    3455             : #define IS_SgEnumVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEnumVal::static_variant >> 3] & (1 << (SgEnumVal::static_variant & 7)))) ? ((SgEnumVal*) (node)) : NULL) : NULL)
    3456             : ROSE_DLL_API SgUnsignedIntVal* isSgUnsignedIntVal(SgNode* node);
    3457             : ROSE_DLL_API const SgUnsignedIntVal* isSgUnsignedIntVal(const SgNode* node);
    3458             : #define IS_SgUnsignedIntVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnsignedIntVal::static_variant >> 3] & (1 << (SgUnsignedIntVal::static_variant & 7)))) ? ((SgUnsignedIntVal*) (node)) : NULL) : NULL)
    3459             : ROSE_DLL_API SgLongIntVal* isSgLongIntVal(SgNode* node);
    3460             : ROSE_DLL_API const SgLongIntVal* isSgLongIntVal(const SgNode* node);
    3461             : #define IS_SgLongIntVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLongIntVal::static_variant >> 3] & (1 << (SgLongIntVal::static_variant & 7)))) ? ((SgLongIntVal*) (node)) : NULL) : NULL)
    3462             : ROSE_DLL_API SgLongLongIntVal* isSgLongLongIntVal(SgNode* node);
    3463             : ROSE_DLL_API const SgLongLongIntVal* isSgLongLongIntVal(const SgNode* node);
    3464             : #define IS_SgLongLongIntVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLongLongIntVal::static_variant >> 3] & (1 << (SgLongLongIntVal::static_variant & 7)))) ? ((SgLongLongIntVal*) (node)) : NULL) : NULL)
    3465             : ROSE_DLL_API SgUnsignedLongLongIntVal* isSgUnsignedLongLongIntVal(SgNode* node);
    3466             : ROSE_DLL_API const SgUnsignedLongLongIntVal* isSgUnsignedLongLongIntVal(const SgNode* node);
    3467             : #define IS_SgUnsignedLongLongIntVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnsignedLongLongIntVal::static_variant >> 3] & (1 << (SgUnsignedLongLongIntVal::static_variant & 7)))) ? ((SgUnsignedLongLongIntVal*) (node)) : NULL) : NULL)
    3468             : ROSE_DLL_API SgUnsignedLongVal* isSgUnsignedLongVal(SgNode* node);
    3469             : ROSE_DLL_API const SgUnsignedLongVal* isSgUnsignedLongVal(const SgNode* node);
    3470             : #define IS_SgUnsignedLongVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnsignedLongVal::static_variant >> 3] & (1 << (SgUnsignedLongVal::static_variant & 7)))) ? ((SgUnsignedLongVal*) (node)) : NULL) : NULL)
    3471             : ROSE_DLL_API SgFloatVal* isSgFloatVal(SgNode* node);
    3472             : ROSE_DLL_API const SgFloatVal* isSgFloatVal(const SgNode* node);
    3473             : #define IS_SgFloatVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFloatVal::static_variant >> 3] & (1 << (SgFloatVal::static_variant & 7)))) ? ((SgFloatVal*) (node)) : NULL) : NULL)
    3474             : ROSE_DLL_API SgDoubleVal* isSgDoubleVal(SgNode* node);
    3475             : ROSE_DLL_API const SgDoubleVal* isSgDoubleVal(const SgNode* node);
    3476             : #define IS_SgDoubleVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDoubleVal::static_variant >> 3] & (1 << (SgDoubleVal::static_variant & 7)))) ? ((SgDoubleVal*) (node)) : NULL) : NULL)
    3477             : ROSE_DLL_API SgLongDoubleVal* isSgLongDoubleVal(SgNode* node);
    3478             : ROSE_DLL_API const SgLongDoubleVal* isSgLongDoubleVal(const SgNode* node);
    3479             : #define IS_SgLongDoubleVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLongDoubleVal::static_variant >> 3] & (1 << (SgLongDoubleVal::static_variant & 7)))) ? ((SgLongDoubleVal*) (node)) : NULL) : NULL)
    3480             : ROSE_DLL_API SgFloat80Val* isSgFloat80Val(SgNode* node);
    3481             : ROSE_DLL_API const SgFloat80Val* isSgFloat80Val(const SgNode* node);
    3482             : #define IS_SgFloat80Val_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFloat80Val::static_variant >> 3] & (1 << (SgFloat80Val::static_variant & 7)))) ? ((SgFloat80Val*) (node)) : NULL) : NULL)
    3483             : ROSE_DLL_API SgFloat128Val* isSgFloat128Val(SgNode* node);
    3484             : ROSE_DLL_API const SgFloat128Val* isSgFloat128Val(const SgNode* node);
    3485             : #define IS_SgFloat128Val_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFloat128Val::static_variant >> 3] & (1 << (SgFloat128Val::static_variant & 7)))) ? ((SgFloat128Val*) (node)) : NULL) : NULL)
    3486             : ROSE_DLL_API SgNullptrValExp* isSgNullptrValExp(SgNode* node);
    3487             : ROSE_DLL_API const SgNullptrValExp* isSgNullptrValExp(const SgNode* node);
    3488             : #define IS_SgNullptrValExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNullptrValExp::static_variant >> 3] & (1 << (SgNullptrValExp::static_variant & 7)))) ? ((SgNullptrValExp*) (node)) : NULL) : NULL)
    3489             : ROSE_DLL_API SgVoidVal* isSgVoidVal(SgNode* node);
    3490             : ROSE_DLL_API const SgVoidVal* isSgVoidVal(const SgNode* node);
    3491             : #define IS_SgVoidVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVoidVal::static_variant >> 3] & (1 << (SgVoidVal::static_variant & 7)))) ? ((SgVoidVal*) (node)) : NULL) : NULL)
    3492             : ROSE_DLL_API SgFunctionParameterRefExp* isSgFunctionParameterRefExp(SgNode* node);
    3493             : ROSE_DLL_API const SgFunctionParameterRefExp* isSgFunctionParameterRefExp(const SgNode* node);
    3494             : #define IS_SgFunctionParameterRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionParameterRefExp::static_variant >> 3] & (1 << (SgFunctionParameterRefExp::static_variant & 7)))) ? ((SgFunctionParameterRefExp*) (node)) : NULL) : NULL)
    3495             : ROSE_DLL_API SgTemplateParameterVal* isSgTemplateParameterVal(SgNode* node);
    3496             : ROSE_DLL_API const SgTemplateParameterVal* isSgTemplateParameterVal(const SgNode* node);
    3497             : #define IS_SgTemplateParameterVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateParameterVal::static_variant >> 3] & (1 << (SgTemplateParameterVal::static_variant & 7)))) ? ((SgTemplateParameterVal*) (node)) : NULL) : NULL)
    3498             : ROSE_DLL_API SgUpcThreads* isSgUpcThreads(SgNode* node);
    3499             : ROSE_DLL_API const SgUpcThreads* isSgUpcThreads(const SgNode* node);
    3500             : #define IS_SgUpcThreads_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcThreads::static_variant >> 3] & (1 << (SgUpcThreads::static_variant & 7)))) ? ((SgUpcThreads*) (node)) : NULL) : NULL)
    3501             : ROSE_DLL_API SgUpcMythread* isSgUpcMythread(SgNode* node);
    3502             : ROSE_DLL_API const SgUpcMythread* isSgUpcMythread(const SgNode* node);
    3503             : #define IS_SgUpcMythread_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpcMythread::static_variant >> 3] & (1 << (SgUpcMythread::static_variant & 7)))) ? ((SgUpcMythread*) (node)) : NULL) : NULL)
    3504             : ROSE_DLL_API SgComplexVal* isSgComplexVal(SgNode* node);
    3505             : ROSE_DLL_API const SgComplexVal* isSgComplexVal(const SgNode* node);
    3506             : #define IS_SgComplexVal_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgComplexVal::static_variant >> 3] & (1 << (SgComplexVal::static_variant & 7)))) ? ((SgComplexVal*) (node)) : NULL) : NULL)
    3507             : ROSE_DLL_API SgNullExpression* isSgNullExpression(SgNode* node);
    3508             : ROSE_DLL_API const SgNullExpression* isSgNullExpression(const SgNode* node);
    3509             : #define IS_SgNullExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNullExpression::static_variant >> 3] & (1 << (SgNullExpression::static_variant & 7)))) ? ((SgNullExpression*) (node)) : NULL) : NULL)
    3510             : ROSE_DLL_API SgVariantExpression* isSgVariantExpression(SgNode* node);
    3511             : ROSE_DLL_API const SgVariantExpression* isSgVariantExpression(const SgNode* node);
    3512             : #define IS_SgVariantExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVariantExpression::static_variant >> 3] & (1 << (SgVariantExpression::static_variant & 7)))) ? ((SgVariantExpression*) (node)) : NULL) : NULL)
    3513             : ROSE_DLL_API SgStatementExpression* isSgStatementExpression(SgNode* node);
    3514             : ROSE_DLL_API const SgStatementExpression* isSgStatementExpression(const SgNode* node);
    3515             : #define IS_SgStatementExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStatementExpression::static_variant >> 3] & (1 << (SgStatementExpression::static_variant & 7)))) ? ((SgStatementExpression*) (node)) : NULL) : NULL)
    3516             : ROSE_DLL_API SgAsmOp* isSgAsmOp(SgNode* node);
    3517             : ROSE_DLL_API const SgAsmOp* isSgAsmOp(const SgNode* node);
    3518             : #define IS_SgAsmOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAsmOp::static_variant >> 3] & (1 << (SgAsmOp::static_variant & 7)))) ? ((SgAsmOp*) (node)) : NULL) : NULL)
    3519             : ROSE_DLL_API SgCudaKernelExecConfig* isSgCudaKernelExecConfig(SgNode* node);
    3520             : ROSE_DLL_API const SgCudaKernelExecConfig* isSgCudaKernelExecConfig(const SgNode* node);
    3521             : #define IS_SgCudaKernelExecConfig_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCudaKernelExecConfig::static_variant >> 3] & (1 << (SgCudaKernelExecConfig::static_variant & 7)))) ? ((SgCudaKernelExecConfig*) (node)) : NULL) : NULL)
    3522             : ROSE_DLL_API SgCudaKernelCallExp* isSgCudaKernelCallExp(SgNode* node);
    3523             : ROSE_DLL_API const SgCudaKernelCallExp* isSgCudaKernelCallExp(const SgNode* node);
    3524             : #define IS_SgCudaKernelCallExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCudaKernelCallExp::static_variant >> 3] & (1 << (SgCudaKernelCallExp::static_variant & 7)))) ? ((SgCudaKernelCallExp*) (node)) : NULL) : NULL)
    3525             : ROSE_DLL_API SgLambdaRefExp* isSgLambdaRefExp(SgNode* node);
    3526             : ROSE_DLL_API const SgLambdaRefExp* isSgLambdaRefExp(const SgNode* node);
    3527             : #define IS_SgLambdaRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLambdaRefExp::static_variant >> 3] & (1 << (SgLambdaRefExp::static_variant & 7)))) ? ((SgLambdaRefExp*) (node)) : NULL) : NULL)
    3528             : ROSE_DLL_API SgTupleExp* isSgTupleExp(SgNode* node);
    3529             : ROSE_DLL_API const SgTupleExp* isSgTupleExp(const SgNode* node);
    3530             : #define IS_SgTupleExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTupleExp::static_variant >> 3] & (1 << (SgTupleExp::static_variant & 7)))) ? ((SgTupleExp*) (node)) : NULL) : NULL)
    3531             : ROSE_DLL_API SgListExp* isSgListExp(SgNode* node);
    3532             : ROSE_DLL_API const SgListExp* isSgListExp(const SgNode* node);
    3533             : #define IS_SgListExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgListExp::static_variant >> 3] & (1 << (SgListExp::static_variant & 7)))) ? ((SgListExp*) (node)) : NULL) : NULL)
    3534             : ROSE_DLL_API SgDictionaryExp* isSgDictionaryExp(SgNode* node);
    3535             : ROSE_DLL_API const SgDictionaryExp* isSgDictionaryExp(const SgNode* node);
    3536             : #define IS_SgDictionaryExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDictionaryExp::static_variant >> 3] & (1 << (SgDictionaryExp::static_variant & 7)))) ? ((SgDictionaryExp*) (node)) : NULL) : NULL)
    3537             : ROSE_DLL_API SgKeyDatumPair* isSgKeyDatumPair(SgNode* node);
    3538             : ROSE_DLL_API const SgKeyDatumPair* isSgKeyDatumPair(const SgNode* node);
    3539             : #define IS_SgKeyDatumPair_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgKeyDatumPair::static_variant >> 3] & (1 << (SgKeyDatumPair::static_variant & 7)))) ? ((SgKeyDatumPair*) (node)) : NULL) : NULL)
    3540             : ROSE_DLL_API SgComprehension* isSgComprehension(SgNode* node);
    3541             : ROSE_DLL_API const SgComprehension* isSgComprehension(const SgNode* node);
    3542             : #define IS_SgComprehension_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgComprehension::static_variant >> 3] & (1 << (SgComprehension::static_variant & 7)))) ? ((SgComprehension*) (node)) : NULL) : NULL)
    3543             : ROSE_DLL_API SgListComprehension* isSgListComprehension(SgNode* node);
    3544             : ROSE_DLL_API const SgListComprehension* isSgListComprehension(const SgNode* node);
    3545             : #define IS_SgListComprehension_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgListComprehension::static_variant >> 3] & (1 << (SgListComprehension::static_variant & 7)))) ? ((SgListComprehension*) (node)) : NULL) : NULL)
    3546             : ROSE_DLL_API SgSetComprehension* isSgSetComprehension(SgNode* node);
    3547             : ROSE_DLL_API const SgSetComprehension* isSgSetComprehension(const SgNode* node);
    3548             : #define IS_SgSetComprehension_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSetComprehension::static_variant >> 3] & (1 << (SgSetComprehension::static_variant & 7)))) ? ((SgSetComprehension*) (node)) : NULL) : NULL)
    3549             : ROSE_DLL_API SgDictionaryComprehension* isSgDictionaryComprehension(SgNode* node);
    3550             : ROSE_DLL_API const SgDictionaryComprehension* isSgDictionaryComprehension(const SgNode* node);
    3551             : #define IS_SgDictionaryComprehension_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDictionaryComprehension::static_variant >> 3] & (1 << (SgDictionaryComprehension::static_variant & 7)))) ? ((SgDictionaryComprehension*) (node)) : NULL) : NULL)
    3552             : ROSE_DLL_API SgMembershipOp* isSgMembershipOp(SgNode* node);
    3553             : ROSE_DLL_API const SgMembershipOp* isSgMembershipOp(const SgNode* node);
    3554             : #define IS_SgMembershipOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMembershipOp::static_variant >> 3] & (1 << (SgMembershipOp::static_variant & 7)))) ? ((SgMembershipOp*) (node)) : NULL) : NULL)
    3555             : ROSE_DLL_API SgNonMembershipOp* isSgNonMembershipOp(SgNode* node);
    3556             : ROSE_DLL_API const SgNonMembershipOp* isSgNonMembershipOp(const SgNode* node);
    3557             : #define IS_SgNonMembershipOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNonMembershipOp::static_variant >> 3] & (1 << (SgNonMembershipOp::static_variant & 7)))) ? ((SgNonMembershipOp*) (node)) : NULL) : NULL)
    3558             : ROSE_DLL_API SgIsOp* isSgIsOp(SgNode* node);
    3559             : ROSE_DLL_API const SgIsOp* isSgIsOp(const SgNode* node);
    3560             : #define IS_SgIsOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIsOp::static_variant >> 3] & (1 << (SgIsOp::static_variant & 7)))) ? ((SgIsOp*) (node)) : NULL) : NULL)
    3561             : ROSE_DLL_API SgIsNotOp* isSgIsNotOp(SgNode* node);
    3562             : ROSE_DLL_API const SgIsNotOp* isSgIsNotOp(const SgNode* node);
    3563             : #define IS_SgIsNotOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIsNotOp::static_variant >> 3] & (1 << (SgIsNotOp::static_variant & 7)))) ? ((SgIsNotOp*) (node)) : NULL) : NULL)
    3564             : ROSE_DLL_API SgStringConversion* isSgStringConversion(SgNode* node);
    3565             : ROSE_DLL_API const SgStringConversion* isSgStringConversion(const SgNode* node);
    3566             : #define IS_SgStringConversion_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgStringConversion::static_variant >> 3] & (1 << (SgStringConversion::static_variant & 7)))) ? ((SgStringConversion*) (node)) : NULL) : NULL)
    3567             : ROSE_DLL_API SgYieldExpression* isSgYieldExpression(SgNode* node);
    3568             : ROSE_DLL_API const SgYieldExpression* isSgYieldExpression(const SgNode* node);
    3569             : #define IS_SgYieldExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgYieldExpression::static_variant >> 3] & (1 << (SgYieldExpression::static_variant & 7)))) ? ((SgYieldExpression*) (node)) : NULL) : NULL)
    3570             : ROSE_DLL_API SgFoldExpression* isSgFoldExpression(SgNode* node);
    3571             : ROSE_DLL_API const SgFoldExpression* isSgFoldExpression(const SgNode* node);
    3572             : #define IS_SgFoldExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFoldExpression::static_variant >> 3] & (1 << (SgFoldExpression::static_variant & 7)))) ? ((SgFoldExpression*) (node)) : NULL) : NULL)
    3573             : ROSE_DLL_API SgChooseExpression* isSgChooseExpression(SgNode* node);
    3574             : ROSE_DLL_API const SgChooseExpression* isSgChooseExpression(const SgNode* node);
    3575             : #define IS_SgChooseExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgChooseExpression::static_variant >> 3] & (1 << (SgChooseExpression::static_variant & 7)))) ? ((SgChooseExpression*) (node)) : NULL) : NULL)
    3576             : ROSE_DLL_API SgAwaitExpression* isSgAwaitExpression(SgNode* node);
    3577             : ROSE_DLL_API const SgAwaitExpression* isSgAwaitExpression(const SgNode* node);
    3578             : #define IS_SgAwaitExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAwaitExpression::static_variant >> 3] & (1 << (SgAwaitExpression::static_variant & 7)))) ? ((SgAwaitExpression*) (node)) : NULL) : NULL)
    3579             : ROSE_DLL_API SgSpaceshipOp* isSgSpaceshipOp(SgNode* node);
    3580             : ROSE_DLL_API const SgSpaceshipOp* isSgSpaceshipOp(const SgNode* node);
    3581             : #define IS_SgSpaceshipOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSpaceshipOp::static_variant >> 3] & (1 << (SgSpaceshipOp::static_variant & 7)))) ? ((SgSpaceshipOp*) (node)) : NULL) : NULL)
    3582             : ROSE_DLL_API SgSubscriptExpression* isSgSubscriptExpression(SgNode* node);
    3583             : ROSE_DLL_API const SgSubscriptExpression* isSgSubscriptExpression(const SgNode* node);
    3584             : #define IS_SgSubscriptExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSubscriptExpression::static_variant >> 3] & (1 << (SgSubscriptExpression::static_variant & 7)))) ? ((SgSubscriptExpression*) (node)) : NULL) : NULL)
    3585             : ROSE_DLL_API SgColonShapeExp* isSgColonShapeExp(SgNode* node);
    3586             : ROSE_DLL_API const SgColonShapeExp* isSgColonShapeExp(const SgNode* node);
    3587             : #define IS_SgColonShapeExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgColonShapeExp::static_variant >> 3] & (1 << (SgColonShapeExp::static_variant & 7)))) ? ((SgColonShapeExp*) (node)) : NULL) : NULL)
    3588             : ROSE_DLL_API SgAsteriskShapeExp* isSgAsteriskShapeExp(SgNode* node);
    3589             : ROSE_DLL_API const SgAsteriskShapeExp* isSgAsteriskShapeExp(const SgNode* node);
    3590             : #define IS_SgAsteriskShapeExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAsteriskShapeExp::static_variant >> 3] & (1 << (SgAsteriskShapeExp::static_variant & 7)))) ? ((SgAsteriskShapeExp*) (node)) : NULL) : NULL)
    3591             : ROSE_DLL_API SgIOItemExpression* isSgIOItemExpression(SgNode* node);
    3592             : ROSE_DLL_API const SgIOItemExpression* isSgIOItemExpression(const SgNode* node);
    3593             : #define IS_SgIOItemExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIOItemExpression::static_variant >> 3] & (1 << (SgIOItemExpression::static_variant & 7)))) ? ((SgIOItemExpression*) (node)) : NULL) : NULL)
    3594             : ROSE_DLL_API SgImpliedDo* isSgImpliedDo(SgNode* node);
    3595             : ROSE_DLL_API const SgImpliedDo* isSgImpliedDo(const SgNode* node);
    3596             : #define IS_SgImpliedDo_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgImpliedDo::static_variant >> 3] & (1 << (SgImpliedDo::static_variant & 7)))) ? ((SgImpliedDo*) (node)) : NULL) : NULL)
    3597             : ROSE_DLL_API SgExponentiationOp* isSgExponentiationOp(SgNode* node);
    3598             : ROSE_DLL_API const SgExponentiationOp* isSgExponentiationOp(const SgNode* node);
    3599             : #define IS_SgExponentiationOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExponentiationOp::static_variant >> 3] & (1 << (SgExponentiationOp::static_variant & 7)))) ? ((SgExponentiationOp*) (node)) : NULL) : NULL)
    3600             : ROSE_DLL_API SgUnknownArrayOrFunctionReference* isSgUnknownArrayOrFunctionReference(SgNode* node);
    3601             : ROSE_DLL_API const SgUnknownArrayOrFunctionReference* isSgUnknownArrayOrFunctionReference(const SgNode* node);
    3602             : #define IS_SgUnknownArrayOrFunctionReference_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnknownArrayOrFunctionReference::static_variant >> 3] & (1 << (SgUnknownArrayOrFunctionReference::static_variant & 7)))) ? ((SgUnknownArrayOrFunctionReference*) (node)) : NULL) : NULL)
    3603             : ROSE_DLL_API SgActualArgumentExpression* isSgActualArgumentExpression(SgNode* node);
    3604             : ROSE_DLL_API const SgActualArgumentExpression* isSgActualArgumentExpression(const SgNode* node);
    3605             : #define IS_SgActualArgumentExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgActualArgumentExpression::static_variant >> 3] & (1 << (SgActualArgumentExpression::static_variant & 7)))) ? ((SgActualArgumentExpression*) (node)) : NULL) : NULL)
    3606             : ROSE_DLL_API SgUserDefinedBinaryOp* isSgUserDefinedBinaryOp(SgNode* node);
    3607             : ROSE_DLL_API const SgUserDefinedBinaryOp* isSgUserDefinedBinaryOp(const SgNode* node);
    3608             : #define IS_SgUserDefinedBinaryOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUserDefinedBinaryOp::static_variant >> 3] & (1 << (SgUserDefinedBinaryOp::static_variant & 7)))) ? ((SgUserDefinedBinaryOp*) (node)) : NULL) : NULL)
    3609             : ROSE_DLL_API SgPointerAssignOp* isSgPointerAssignOp(SgNode* node);
    3610             : ROSE_DLL_API const SgPointerAssignOp* isSgPointerAssignOp(const SgNode* node);
    3611             : #define IS_SgPointerAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPointerAssignOp::static_variant >> 3] & (1 << (SgPointerAssignOp::static_variant & 7)))) ? ((SgPointerAssignOp*) (node)) : NULL) : NULL)
    3612             : ROSE_DLL_API SgCAFCoExpression* isSgCAFCoExpression(SgNode* node);
    3613             : ROSE_DLL_API const SgCAFCoExpression* isSgCAFCoExpression(const SgNode* node);
    3614             : #define IS_SgCAFCoExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCAFCoExpression::static_variant >> 3] & (1 << (SgCAFCoExpression::static_variant & 7)))) ? ((SgCAFCoExpression*) (node)) : NULL) : NULL)
    3615             : ROSE_DLL_API SgDesignatedInitializer* isSgDesignatedInitializer(SgNode* node);
    3616             : ROSE_DLL_API const SgDesignatedInitializer* isSgDesignatedInitializer(const SgNode* node);
    3617             : #define IS_SgDesignatedInitializer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDesignatedInitializer::static_variant >> 3] & (1 << (SgDesignatedInitializer::static_variant & 7)))) ? ((SgDesignatedInitializer*) (node)) : NULL) : NULL)
    3618             : ROSE_DLL_API SgMatrixExp* isSgMatrixExp(SgNode* node);
    3619             : ROSE_DLL_API const SgMatrixExp* isSgMatrixExp(const SgNode* node);
    3620             : #define IS_SgMatrixExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMatrixExp::static_variant >> 3] & (1 << (SgMatrixExp::static_variant & 7)))) ? ((SgMatrixExp*) (node)) : NULL) : NULL)
    3621             : ROSE_DLL_API SgRangeExp* isSgRangeExp(SgNode* node);
    3622             : ROSE_DLL_API const SgRangeExp* isSgRangeExp(const SgNode* node);
    3623             : #define IS_SgRangeExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRangeExp::static_variant >> 3] & (1 << (SgRangeExp::static_variant & 7)))) ? ((SgRangeExp*) (node)) : NULL) : NULL)
    3624             : ROSE_DLL_API SgMagicColonExp* isSgMagicColonExp(SgNode* node);
    3625             : ROSE_DLL_API const SgMagicColonExp* isSgMagicColonExp(const SgNode* node);
    3626             : #define IS_SgMagicColonExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMagicColonExp::static_variant >> 3] & (1 << (SgMagicColonExp::static_variant & 7)))) ? ((SgMagicColonExp*) (node)) : NULL) : NULL)
    3627             : ROSE_DLL_API SgElementwiseMultiplyOp* isSgElementwiseMultiplyOp(SgNode* node);
    3628             : ROSE_DLL_API const SgElementwiseMultiplyOp* isSgElementwiseMultiplyOp(const SgNode* node);
    3629             : #define IS_SgElementwiseMultiplyOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElementwiseMultiplyOp::static_variant >> 3] & (1 << (SgElementwiseMultiplyOp::static_variant & 7)))) ? ((SgElementwiseMultiplyOp*) (node)) : NULL) : NULL)
    3630             : ROSE_DLL_API SgPowerOp* isSgPowerOp(SgNode* node);
    3631             : ROSE_DLL_API const SgPowerOp* isSgPowerOp(const SgNode* node);
    3632             : #define IS_SgPowerOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPowerOp::static_variant >> 3] & (1 << (SgPowerOp::static_variant & 7)))) ? ((SgPowerOp*) (node)) : NULL) : NULL)
    3633             : ROSE_DLL_API SgElementwisePowerOp* isSgElementwisePowerOp(SgNode* node);
    3634             : ROSE_DLL_API const SgElementwisePowerOp* isSgElementwisePowerOp(const SgNode* node);
    3635             : #define IS_SgElementwisePowerOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElementwisePowerOp::static_variant >> 3] & (1 << (SgElementwisePowerOp::static_variant & 7)))) ? ((SgElementwisePowerOp*) (node)) : NULL) : NULL)
    3636             : ROSE_DLL_API SgElementwiseDivideOp* isSgElementwiseDivideOp(SgNode* node);
    3637             : ROSE_DLL_API const SgElementwiseDivideOp* isSgElementwiseDivideOp(const SgNode* node);
    3638             : #define IS_SgElementwiseDivideOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElementwiseDivideOp::static_variant >> 3] & (1 << (SgElementwiseDivideOp::static_variant & 7)))) ? ((SgElementwiseDivideOp*) (node)) : NULL) : NULL)
    3639             : ROSE_DLL_API SgLeftDivideOp* isSgLeftDivideOp(SgNode* node);
    3640             : ROSE_DLL_API const SgLeftDivideOp* isSgLeftDivideOp(const SgNode* node);
    3641             : #define IS_SgLeftDivideOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLeftDivideOp::static_variant >> 3] & (1 << (SgLeftDivideOp::static_variant & 7)))) ? ((SgLeftDivideOp*) (node)) : NULL) : NULL)
    3642             : ROSE_DLL_API SgElementwiseLeftDivideOp* isSgElementwiseLeftDivideOp(SgNode* node);
    3643             : ROSE_DLL_API const SgElementwiseLeftDivideOp* isSgElementwiseLeftDivideOp(const SgNode* node);
    3644             : #define IS_SgElementwiseLeftDivideOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElementwiseLeftDivideOp::static_variant >> 3] & (1 << (SgElementwiseLeftDivideOp::static_variant & 7)))) ? ((SgElementwiseLeftDivideOp*) (node)) : NULL) : NULL)
    3645             : ROSE_DLL_API SgElementwiseAddOp* isSgElementwiseAddOp(SgNode* node);
    3646             : ROSE_DLL_API const SgElementwiseAddOp* isSgElementwiseAddOp(const SgNode* node);
    3647             : #define IS_SgElementwiseAddOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElementwiseAddOp::static_variant >> 3] & (1 << (SgElementwiseAddOp::static_variant & 7)))) ? ((SgElementwiseAddOp*) (node)) : NULL) : NULL)
    3648             : ROSE_DLL_API SgElementwiseSubtractOp* isSgElementwiseSubtractOp(SgNode* node);
    3649             : ROSE_DLL_API const SgElementwiseSubtractOp* isSgElementwiseSubtractOp(const SgNode* node);
    3650             : #define IS_SgElementwiseSubtractOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElementwiseSubtractOp::static_variant >> 3] & (1 << (SgElementwiseSubtractOp::static_variant & 7)))) ? ((SgElementwiseSubtractOp*) (node)) : NULL) : NULL)
    3651             : ROSE_DLL_API SgMatrixTransposeOp* isSgMatrixTransposeOp(SgNode* node);
    3652             : ROSE_DLL_API const SgMatrixTransposeOp* isSgMatrixTransposeOp(const SgNode* node);
    3653             : #define IS_SgMatrixTransposeOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMatrixTransposeOp::static_variant >> 3] & (1 << (SgMatrixTransposeOp::static_variant & 7)))) ? ((SgMatrixTransposeOp*) (node)) : NULL) : NULL)
    3654             : ROSE_DLL_API SgElementwiseOp* isSgElementwiseOp(SgNode* node);
    3655             : ROSE_DLL_API const SgElementwiseOp* isSgElementwiseOp(const SgNode* node);
    3656             : #define IS_SgElementwiseOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgElementwiseOp::static_variant >> 3] & (1 << (SgElementwiseOp::static_variant & 7)))) ? ((SgElementwiseOp*) (node)) : NULL) : NULL)
    3657             : ROSE_DLL_API SgInitializer* isSgInitializer(SgNode* node);
    3658             : ROSE_DLL_API const SgInitializer* isSgInitializer(const SgNode* node);
    3659             : #define IS_SgInitializer_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgInitializer::static_variant >> 3] & (1 << (SgInitializer::static_variant & 7)))) ? ((SgInitializer*) (node)) : NULL) : NULL)
    3660             : ROSE_DLL_API SgSIMDLoad* isSgSIMDLoad(SgNode* node);
    3661             : ROSE_DLL_API const SgSIMDLoad* isSgSIMDLoad(const SgNode* node);
    3662             : #define IS_SgSIMDLoad_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDLoad::static_variant >> 3] & (1 << (SgSIMDLoad::static_variant & 7)))) ? ((SgSIMDLoad*) (node)) : NULL) : NULL)
    3663             : ROSE_DLL_API SgSIMDBroadcast* isSgSIMDBroadcast(SgNode* node);
    3664             : ROSE_DLL_API const SgSIMDBroadcast* isSgSIMDBroadcast(const SgNode* node);
    3665             : #define IS_SgSIMDBroadcast_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDBroadcast::static_variant >> 3] & (1 << (SgSIMDBroadcast::static_variant & 7)))) ? ((SgSIMDBroadcast*) (node)) : NULL) : NULL)
    3666             : ROSE_DLL_API SgSIMDStore* isSgSIMDStore(SgNode* node);
    3667             : ROSE_DLL_API const SgSIMDStore* isSgSIMDStore(const SgNode* node);
    3668             : #define IS_SgSIMDStore_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDStore::static_variant >> 3] & (1 << (SgSIMDStore::static_variant & 7)))) ? ((SgSIMDStore*) (node)) : NULL) : NULL)
    3669             : ROSE_DLL_API SgSIMDPartialStore* isSgSIMDPartialStore(SgNode* node);
    3670             : ROSE_DLL_API const SgSIMDPartialStore* isSgSIMDPartialStore(const SgNode* node);
    3671             : #define IS_SgSIMDPartialStore_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDPartialStore::static_variant >> 3] & (1 << (SgSIMDPartialStore::static_variant & 7)))) ? ((SgSIMDPartialStore*) (node)) : NULL) : NULL)
    3672             : ROSE_DLL_API SgSIMDScalarStore* isSgSIMDScalarStore(SgNode* node);
    3673             : ROSE_DLL_API const SgSIMDScalarStore* isSgSIMDScalarStore(const SgNode* node);
    3674             : #define IS_SgSIMDScalarStore_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDScalarStore::static_variant >> 3] & (1 << (SgSIMDScalarStore::static_variant & 7)))) ? ((SgSIMDScalarStore*) (node)) : NULL) : NULL)
    3675             : ROSE_DLL_API SgSIMDGather* isSgSIMDGather(SgNode* node);
    3676             : ROSE_DLL_API const SgSIMDGather* isSgSIMDGather(const SgNode* node);
    3677             : #define IS_SgSIMDGather_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDGather::static_variant >> 3] & (1 << (SgSIMDGather::static_variant & 7)))) ? ((SgSIMDGather*) (node)) : NULL) : NULL)
    3678             : ROSE_DLL_API SgSIMDExplicitGather* isSgSIMDExplicitGather(SgNode* node);
    3679             : ROSE_DLL_API const SgSIMDExplicitGather* isSgSIMDExplicitGather(const SgNode* node);
    3680             : #define IS_SgSIMDExplicitGather_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDExplicitGather::static_variant >> 3] & (1 << (SgSIMDExplicitGather::static_variant & 7)))) ? ((SgSIMDExplicitGather*) (node)) : NULL) : NULL)
    3681             : ROSE_DLL_API SgSIMDScatter* isSgSIMDScatter(SgNode* node);
    3682             : ROSE_DLL_API const SgSIMDScatter* isSgSIMDScatter(const SgNode* node);
    3683             : #define IS_SgSIMDScatter_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDScatter::static_variant >> 3] & (1 << (SgSIMDScatter::static_variant & 7)))) ? ((SgSIMDScatter*) (node)) : NULL) : NULL)
    3684             : ROSE_DLL_API SgSIMDAddOp* isSgSIMDAddOp(SgNode* node);
    3685             : ROSE_DLL_API const SgSIMDAddOp* isSgSIMDAddOp(const SgNode* node);
    3686             : #define IS_SgSIMDAddOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDAddOp::static_variant >> 3] & (1 << (SgSIMDAddOp::static_variant & 7)))) ? ((SgSIMDAddOp*) (node)) : NULL) : NULL)
    3687             : ROSE_DLL_API SgSIMDSubOp* isSgSIMDSubOp(SgNode* node);
    3688             : ROSE_DLL_API const SgSIMDSubOp* isSgSIMDSubOp(const SgNode* node);
    3689             : #define IS_SgSIMDSubOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDSubOp::static_variant >> 3] & (1 << (SgSIMDSubOp::static_variant & 7)))) ? ((SgSIMDSubOp*) (node)) : NULL) : NULL)
    3690             : ROSE_DLL_API SgSIMDMulOp* isSgSIMDMulOp(SgNode* node);
    3691             : ROSE_DLL_API const SgSIMDMulOp* isSgSIMDMulOp(const SgNode* node);
    3692             : #define IS_SgSIMDMulOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDMulOp::static_variant >> 3] & (1 << (SgSIMDMulOp::static_variant & 7)))) ? ((SgSIMDMulOp*) (node)) : NULL) : NULL)
    3693             : ROSE_DLL_API SgSIMDDivOp* isSgSIMDDivOp(SgNode* node);
    3694             : ROSE_DLL_API const SgSIMDDivOp* isSgSIMDDivOp(const SgNode* node);
    3695             : #define IS_SgSIMDDivOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDDivOp::static_variant >> 3] & (1 << (SgSIMDDivOp::static_variant & 7)))) ? ((SgSIMDDivOp*) (node)) : NULL) : NULL)
    3696             : ROSE_DLL_API SgSIMDFmaOp* isSgSIMDFmaOp(SgNode* node);
    3697             : ROSE_DLL_API const SgSIMDFmaOp* isSgSIMDFmaOp(const SgNode* node);
    3698             : #define IS_SgSIMDFmaOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDFmaOp::static_variant >> 3] & (1 << (SgSIMDFmaOp::static_variant & 7)))) ? ((SgSIMDFmaOp*) (node)) : NULL) : NULL)
    3699             : ROSE_DLL_API SgSIMDBinaryOp* isSgSIMDBinaryOp(SgNode* node);
    3700             : ROSE_DLL_API const SgSIMDBinaryOp* isSgSIMDBinaryOp(const SgNode* node);
    3701             : #define IS_SgSIMDBinaryOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSIMDBinaryOp::static_variant >> 3] & (1 << (SgSIMDBinaryOp::static_variant & 7)))) ? ((SgSIMDBinaryOp*) (node)) : NULL) : NULL)
    3702             : ROSE_DLL_API SgUserDefinedUnaryOp* isSgUserDefinedUnaryOp(SgNode* node);
    3703             : ROSE_DLL_API const SgUserDefinedUnaryOp* isSgUserDefinedUnaryOp(const SgNode* node);
    3704             : #define IS_SgUserDefinedUnaryOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUserDefinedUnaryOp::static_variant >> 3] & (1 << (SgUserDefinedUnaryOp::static_variant & 7)))) ? ((SgUserDefinedUnaryOp*) (node)) : NULL) : NULL)
    3705             : ROSE_DLL_API SgPseudoDestructorRefExp* isSgPseudoDestructorRefExp(SgNode* node);
    3706             : ROSE_DLL_API const SgPseudoDestructorRefExp* isSgPseudoDestructorRefExp(const SgNode* node);
    3707             : #define IS_SgPseudoDestructorRefExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgPseudoDestructorRefExp::static_variant >> 3] & (1 << (SgPseudoDestructorRefExp::static_variant & 7)))) ? ((SgPseudoDestructorRefExp*) (node)) : NULL) : NULL)
    3708             : ROSE_DLL_API SgUnaryOp* isSgUnaryOp(SgNode* node);
    3709             : ROSE_DLL_API const SgUnaryOp* isSgUnaryOp(const SgNode* node);
    3710             : #define IS_SgUnaryOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUnaryOp::static_variant >> 3] & (1 << (SgUnaryOp::static_variant & 7)))) ? ((SgUnaryOp*) (node)) : NULL) : NULL)
    3711             : ROSE_DLL_API SgCompoundAssignOp* isSgCompoundAssignOp(SgNode* node);
    3712             : ROSE_DLL_API const SgCompoundAssignOp* isSgCompoundAssignOp(const SgNode* node);
    3713             : #define IS_SgCompoundAssignOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCompoundAssignOp::static_variant >> 3] & (1 << (SgCompoundAssignOp::static_variant & 7)))) ? ((SgCompoundAssignOp*) (node)) : NULL) : NULL)
    3714             : ROSE_DLL_API SgBinaryOp* isSgBinaryOp(SgNode* node);
    3715             : ROSE_DLL_API const SgBinaryOp* isSgBinaryOp(const SgNode* node);
    3716             : #define IS_SgBinaryOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgBinaryOp::static_variant >> 3] & (1 << (SgBinaryOp::static_variant & 7)))) ? ((SgBinaryOp*) (node)) : NULL) : NULL)
    3717             : ROSE_DLL_API SgNaryOp* isSgNaryOp(SgNode* node);
    3718             : ROSE_DLL_API const SgNaryOp* isSgNaryOp(const SgNode* node);
    3719             : #define IS_SgNaryOp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNaryOp::static_variant >> 3] & (1 << (SgNaryOp::static_variant & 7)))) ? ((SgNaryOp*) (node)) : NULL) : NULL)
    3720             : ROSE_DLL_API SgValueExp* isSgValueExp(SgNode* node);
    3721             : ROSE_DLL_API const SgValueExp* isSgValueExp(const SgNode* node);
    3722             : #define IS_SgValueExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgValueExp::static_variant >> 3] & (1 << (SgValueExp::static_variant & 7)))) ? ((SgValueExp*) (node)) : NULL) : NULL)
    3723             : ROSE_DLL_API SgExprListExp* isSgExprListExp(SgNode* node);
    3724             : ROSE_DLL_API const SgExprListExp* isSgExprListExp(const SgNode* node);
    3725             : #define IS_SgExprListExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExprListExp::static_variant >> 3] & (1 << (SgExprListExp::static_variant & 7)))) ? ((SgExprListExp*) (node)) : NULL) : NULL)
    3726             : ROSE_DLL_API SgFunctionCallExp* isSgFunctionCallExp(SgNode* node);
    3727             : ROSE_DLL_API const SgFunctionCallExp* isSgFunctionCallExp(const SgNode* node);
    3728             : #define IS_SgFunctionCallExp_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionCallExp::static_variant >> 3] & (1 << (SgFunctionCallExp::static_variant & 7)))) ? ((SgFunctionCallExp*) (node)) : NULL) : NULL)
    3729             : ROSE_DLL_API SgCallExpression* isSgCallExpression(SgNode* node);
    3730             : ROSE_DLL_API const SgCallExpression* isSgCallExpression(const SgNode* node);
    3731             : #define IS_SgCallExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCallExpression::static_variant >> 3] & (1 << (SgCallExpression::static_variant & 7)))) ? ((SgCallExpression*) (node)) : NULL) : NULL)
    3732             : ROSE_DLL_API SgTypeTraitBuiltinOperator* isSgTypeTraitBuiltinOperator(SgNode* node);
    3733             : ROSE_DLL_API const SgTypeTraitBuiltinOperator* isSgTypeTraitBuiltinOperator(const SgNode* node);
    3734             : #define IS_SgTypeTraitBuiltinOperator_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypeTraitBuiltinOperator::static_variant >> 3] & (1 << (SgTypeTraitBuiltinOperator::static_variant & 7)))) ? ((SgTypeTraitBuiltinOperator*) (node)) : NULL) : NULL)
    3735             : ROSE_DLL_API SgExpression* isSgExpression(SgNode* node);
    3736             : ROSE_DLL_API const SgExpression* isSgExpression(const SgNode* node);
    3737             : #define IS_SgExpression_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgExpression::static_variant >> 3] & (1 << (SgExpression::static_variant & 7)))) ? ((SgExpression*) (node)) : NULL) : NULL)
    3738             : ROSE_DLL_API SgTemplateVariableSymbol* isSgTemplateVariableSymbol(SgNode* node);
    3739             : ROSE_DLL_API const SgTemplateVariableSymbol* isSgTemplateVariableSymbol(const SgNode* node);
    3740             : #define IS_SgTemplateVariableSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateVariableSymbol::static_variant >> 3] & (1 << (SgTemplateVariableSymbol::static_variant & 7)))) ? ((SgTemplateVariableSymbol*) (node)) : NULL) : NULL)
    3741             : ROSE_DLL_API SgVariableSymbol* isSgVariableSymbol(SgNode* node);
    3742             : ROSE_DLL_API const SgVariableSymbol* isSgVariableSymbol(const SgNode* node);
    3743             : #define IS_SgVariableSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgVariableSymbol::static_variant >> 3] & (1 << (SgVariableSymbol::static_variant & 7)))) ? ((SgVariableSymbol*) (node)) : NULL) : NULL)
    3744             : ROSE_DLL_API SgFunctionTypeSymbol* isSgFunctionTypeSymbol(SgNode* node);
    3745             : ROSE_DLL_API const SgFunctionTypeSymbol* isSgFunctionTypeSymbol(const SgNode* node);
    3746             : #define IS_SgFunctionTypeSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionTypeSymbol::static_variant >> 3] & (1 << (SgFunctionTypeSymbol::static_variant & 7)))) ? ((SgFunctionTypeSymbol*) (node)) : NULL) : NULL)
    3747             : ROSE_DLL_API SgTemplateClassSymbol* isSgTemplateClassSymbol(SgNode* node);
    3748             : ROSE_DLL_API const SgTemplateClassSymbol* isSgTemplateClassSymbol(const SgNode* node);
    3749             : #define IS_SgTemplateClassSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateClassSymbol::static_variant >> 3] & (1 << (SgTemplateClassSymbol::static_variant & 7)))) ? ((SgTemplateClassSymbol*) (node)) : NULL) : NULL)
    3750             : ROSE_DLL_API SgClassSymbol* isSgClassSymbol(SgNode* node);
    3751             : ROSE_DLL_API const SgClassSymbol* isSgClassSymbol(const SgNode* node);
    3752             : #define IS_SgClassSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgClassSymbol::static_variant >> 3] & (1 << (SgClassSymbol::static_variant & 7)))) ? ((SgClassSymbol*) (node)) : NULL) : NULL)
    3753             : ROSE_DLL_API SgTemplateSymbol* isSgTemplateSymbol(SgNode* node);
    3754             : ROSE_DLL_API const SgTemplateSymbol* isSgTemplateSymbol(const SgNode* node);
    3755             : #define IS_SgTemplateSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateSymbol::static_variant >> 3] & (1 << (SgTemplateSymbol::static_variant & 7)))) ? ((SgTemplateSymbol*) (node)) : NULL) : NULL)
    3756             : ROSE_DLL_API SgEnumSymbol* isSgEnumSymbol(SgNode* node);
    3757             : ROSE_DLL_API const SgEnumSymbol* isSgEnumSymbol(const SgNode* node);
    3758             : #define IS_SgEnumSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEnumSymbol::static_variant >> 3] & (1 << (SgEnumSymbol::static_variant & 7)))) ? ((SgEnumSymbol*) (node)) : NULL) : NULL)
    3759             : ROSE_DLL_API SgEnumFieldSymbol* isSgEnumFieldSymbol(SgNode* node);
    3760             : ROSE_DLL_API const SgEnumFieldSymbol* isSgEnumFieldSymbol(const SgNode* node);
    3761             : #define IS_SgEnumFieldSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgEnumFieldSymbol::static_variant >> 3] & (1 << (SgEnumFieldSymbol::static_variant & 7)))) ? ((SgEnumFieldSymbol*) (node)) : NULL) : NULL)
    3762             : ROSE_DLL_API SgTemplateTypedefSymbol* isSgTemplateTypedefSymbol(SgNode* node);
    3763             : ROSE_DLL_API const SgTemplateTypedefSymbol* isSgTemplateTypedefSymbol(const SgNode* node);
    3764             : #define IS_SgTemplateTypedefSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateTypedefSymbol::static_variant >> 3] & (1 << (SgTemplateTypedefSymbol::static_variant & 7)))) ? ((SgTemplateTypedefSymbol*) (node)) : NULL) : NULL)
    3765             : ROSE_DLL_API SgTypedefSymbol* isSgTypedefSymbol(SgNode* node);
    3766             : ROSE_DLL_API const SgTypedefSymbol* isSgTypedefSymbol(const SgNode* node);
    3767             : #define IS_SgTypedefSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTypedefSymbol::static_variant >> 3] & (1 << (SgTypedefSymbol::static_variant & 7)))) ? ((SgTypedefSymbol*) (node)) : NULL) : NULL)
    3768             : ROSE_DLL_API SgTemplateFunctionSymbol* isSgTemplateFunctionSymbol(SgNode* node);
    3769             : ROSE_DLL_API const SgTemplateFunctionSymbol* isSgTemplateFunctionSymbol(const SgNode* node);
    3770             : #define IS_SgTemplateFunctionSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateFunctionSymbol::static_variant >> 3] & (1 << (SgTemplateFunctionSymbol::static_variant & 7)))) ? ((SgTemplateFunctionSymbol*) (node)) : NULL) : NULL)
    3771             : ROSE_DLL_API SgTemplateMemberFunctionSymbol* isSgTemplateMemberFunctionSymbol(SgNode* node);
    3772             : ROSE_DLL_API const SgTemplateMemberFunctionSymbol* isSgTemplateMemberFunctionSymbol(const SgNode* node);
    3773             : #define IS_SgTemplateMemberFunctionSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgTemplateMemberFunctionSymbol::static_variant >> 3] & (1 << (SgTemplateMemberFunctionSymbol::static_variant & 7)))) ? ((SgTemplateMemberFunctionSymbol*) (node)) : NULL) : NULL)
    3774             : ROSE_DLL_API SgLabelSymbol* isSgLabelSymbol(SgNode* node);
    3775             : ROSE_DLL_API const SgLabelSymbol* isSgLabelSymbol(const SgNode* node);
    3776             : #define IS_SgLabelSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLabelSymbol::static_variant >> 3] & (1 << (SgLabelSymbol::static_variant & 7)))) ? ((SgLabelSymbol*) (node)) : NULL) : NULL)
    3777             : ROSE_DLL_API SgDefaultSymbol* isSgDefaultSymbol(SgNode* node);
    3778             : ROSE_DLL_API const SgDefaultSymbol* isSgDefaultSymbol(const SgNode* node);
    3779             : #define IS_SgDefaultSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgDefaultSymbol::static_variant >> 3] & (1 << (SgDefaultSymbol::static_variant & 7)))) ? ((SgDefaultSymbol*) (node)) : NULL) : NULL)
    3780             : ROSE_DLL_API SgNamespaceSymbol* isSgNamespaceSymbol(SgNode* node);
    3781             : ROSE_DLL_API const SgNamespaceSymbol* isSgNamespaceSymbol(const SgNode* node);
    3782             : #define IS_SgNamespaceSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNamespaceSymbol::static_variant >> 3] & (1 << (SgNamespaceSymbol::static_variant & 7)))) ? ((SgNamespaceSymbol*) (node)) : NULL) : NULL)
    3783             : ROSE_DLL_API SgIntrinsicSymbol* isSgIntrinsicSymbol(SgNode* node);
    3784             : ROSE_DLL_API const SgIntrinsicSymbol* isSgIntrinsicSymbol(const SgNode* node);
    3785             : #define IS_SgIntrinsicSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgIntrinsicSymbol::static_variant >> 3] & (1 << (SgIntrinsicSymbol::static_variant & 7)))) ? ((SgIntrinsicSymbol*) (node)) : NULL) : NULL)
    3786             : ROSE_DLL_API SgModuleSymbol* isSgModuleSymbol(SgNode* node);
    3787             : ROSE_DLL_API const SgModuleSymbol* isSgModuleSymbol(const SgNode* node);
    3788             : #define IS_SgModuleSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgModuleSymbol::static_variant >> 3] & (1 << (SgModuleSymbol::static_variant & 7)))) ? ((SgModuleSymbol*) (node)) : NULL) : NULL)
    3789             : ROSE_DLL_API SgInterfaceSymbol* isSgInterfaceSymbol(SgNode* node);
    3790             : ROSE_DLL_API const SgInterfaceSymbol* isSgInterfaceSymbol(const SgNode* node);
    3791             : #define IS_SgInterfaceSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgInterfaceSymbol::static_variant >> 3] & (1 << (SgInterfaceSymbol::static_variant & 7)))) ? ((SgInterfaceSymbol*) (node)) : NULL) : NULL)
    3792             : ROSE_DLL_API SgCommonSymbol* isSgCommonSymbol(SgNode* node);
    3793             : ROSE_DLL_API const SgCommonSymbol* isSgCommonSymbol(const SgNode* node);
    3794             : #define IS_SgCommonSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCommonSymbol::static_variant >> 3] & (1 << (SgCommonSymbol::static_variant & 7)))) ? ((SgCommonSymbol*) (node)) : NULL) : NULL)
    3795             : ROSE_DLL_API SgRenameSymbol* isSgRenameSymbol(SgNode* node);
    3796             : ROSE_DLL_API const SgRenameSymbol* isSgRenameSymbol(const SgNode* node);
    3797             : #define IS_SgRenameSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRenameSymbol::static_variant >> 3] & (1 << (SgRenameSymbol::static_variant & 7)))) ? ((SgRenameSymbol*) (node)) : NULL) : NULL)
    3798             : ROSE_DLL_API SgMemberFunctionSymbol* isSgMemberFunctionSymbol(SgNode* node);
    3799             : ROSE_DLL_API const SgMemberFunctionSymbol* isSgMemberFunctionSymbol(const SgNode* node);
    3800             : #define IS_SgMemberFunctionSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgMemberFunctionSymbol::static_variant >> 3] & (1 << (SgMemberFunctionSymbol::static_variant & 7)))) ? ((SgMemberFunctionSymbol*) (node)) : NULL) : NULL)
    3801             : ROSE_DLL_API SgFunctionSymbol* isSgFunctionSymbol(SgNode* node);
    3802             : ROSE_DLL_API const SgFunctionSymbol* isSgFunctionSymbol(const SgNode* node);
    3803             : #define IS_SgFunctionSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgFunctionSymbol::static_variant >> 3] & (1 << (SgFunctionSymbol::static_variant & 7)))) ? ((SgFunctionSymbol*) (node)) : NULL) : NULL)
    3804             : ROSE_DLL_API SgAliasSymbol* isSgAliasSymbol(SgNode* node);
    3805             : ROSE_DLL_API const SgAliasSymbol* isSgAliasSymbol(const SgNode* node);
    3806             : #define IS_SgAliasSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgAliasSymbol::static_variant >> 3] & (1 << (SgAliasSymbol::static_variant & 7)))) ? ((SgAliasSymbol*) (node)) : NULL) : NULL)
    3807             : ROSE_DLL_API SgNonrealSymbol* isSgNonrealSymbol(SgNode* node);
    3808             : ROSE_DLL_API const SgNonrealSymbol* isSgNonrealSymbol(const SgNode* node);
    3809             : #define IS_SgNonrealSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNonrealSymbol::static_variant >> 3] & (1 << (SgNonrealSymbol::static_variant & 7)))) ? ((SgNonrealSymbol*) (node)) : NULL) : NULL)
    3810             : ROSE_DLL_API SgSymbol* isSgSymbol(SgNode* node);
    3811             : ROSE_DLL_API const SgSymbol* isSgSymbol(const SgNode* node);
    3812             : #define IS_SgSymbol_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgSymbol::static_variant >> 3] & (1 << (SgSymbol::static_variant & 7)))) ? ((SgSymbol*) (node)) : NULL) : NULL)
    3813             : ROSE_DLL_API SgCommonBlockObject* isSgCommonBlockObject(SgNode* node);
    3814             : ROSE_DLL_API const SgCommonBlockObject* isSgCommonBlockObject(const SgNode* node);
    3815             : #define IS_SgCommonBlockObject_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgCommonBlockObject::static_variant >> 3] & (1 << (SgCommonBlockObject::static_variant & 7)))) ? ((SgCommonBlockObject*) (node)) : NULL) : NULL)
    3816             : ROSE_DLL_API SgInitializedName* isSgInitializedName(SgNode* node);
    3817             : ROSE_DLL_API const SgInitializedName* isSgInitializedName(const SgNode* node);
    3818             : #define IS_SgInitializedName_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgInitializedName::static_variant >> 3] & (1 << (SgInitializedName::static_variant & 7)))) ? ((SgInitializedName*) (node)) : NULL) : NULL)
    3819             : ROSE_DLL_API SgLambdaCapture* isSgLambdaCapture(SgNode* node);
    3820             : ROSE_DLL_API const SgLambdaCapture* isSgLambdaCapture(const SgNode* node);
    3821             : #define IS_SgLambdaCapture_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLambdaCapture::static_variant >> 3] & (1 << (SgLambdaCapture::static_variant & 7)))) ? ((SgLambdaCapture*) (node)) : NULL) : NULL)
    3822             : ROSE_DLL_API SgLambdaCaptureList* isSgLambdaCaptureList(SgNode* node);
    3823             : ROSE_DLL_API const SgLambdaCaptureList* isSgLambdaCaptureList(const SgNode* node);
    3824             : #define IS_SgLambdaCaptureList_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLambdaCaptureList::static_variant >> 3] & (1 << (SgLambdaCaptureList::static_variant & 7)))) ? ((SgLambdaCaptureList*) (node)) : NULL) : NULL)
    3825             : ROSE_DLL_API SgOmpOrderedClause* isSgOmpOrderedClause(SgNode* node);
    3826             : ROSE_DLL_API const SgOmpOrderedClause* isSgOmpOrderedClause(const SgNode* node);
    3827             : #define IS_SgOmpOrderedClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpOrderedClause::static_variant >> 3] & (1 << (SgOmpOrderedClause::static_variant & 7)))) ? ((SgOmpOrderedClause*) (node)) : NULL) : NULL)
    3828             : ROSE_DLL_API SgOmpNowaitClause* isSgOmpNowaitClause(SgNode* node);
    3829             : ROSE_DLL_API const SgOmpNowaitClause* isSgOmpNowaitClause(const SgNode* node);
    3830             : #define IS_SgOmpNowaitClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpNowaitClause::static_variant >> 3] & (1 << (SgOmpNowaitClause::static_variant & 7)))) ? ((SgOmpNowaitClause*) (node)) : NULL) : NULL)
    3831             : ROSE_DLL_API SgOmpNogroupClause* isSgOmpNogroupClause(SgNode* node);
    3832             : ROSE_DLL_API const SgOmpNogroupClause* isSgOmpNogroupClause(const SgNode* node);
    3833             : #define IS_SgOmpNogroupClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpNogroupClause::static_variant >> 3] & (1 << (SgOmpNogroupClause::static_variant & 7)))) ? ((SgOmpNogroupClause*) (node)) : NULL) : NULL)
    3834             : ROSE_DLL_API SgOmpReadClause* isSgOmpReadClause(SgNode* node);
    3835             : ROSE_DLL_API const SgOmpReadClause* isSgOmpReadClause(const SgNode* node);
    3836             : #define IS_SgOmpReadClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpReadClause::static_variant >> 3] & (1 << (SgOmpReadClause::static_variant & 7)))) ? ((SgOmpReadClause*) (node)) : NULL) : NULL)
    3837             : ROSE_DLL_API SgOmpThreadsClause* isSgOmpThreadsClause(SgNode* node);
    3838             : ROSE_DLL_API const SgOmpThreadsClause* isSgOmpThreadsClause(const SgNode* node);
    3839             : #define IS_SgOmpThreadsClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpThreadsClause::static_variant >> 3] & (1 << (SgOmpThreadsClause::static_variant & 7)))) ? ((SgOmpThreadsClause*) (node)) : NULL) : NULL)
    3840             : ROSE_DLL_API SgOmpSimdClause* isSgOmpSimdClause(SgNode* node);
    3841             : ROSE_DLL_API const SgOmpSimdClause* isSgOmpSimdClause(const SgNode* node);
    3842             : #define IS_SgOmpSimdClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSimdClause::static_variant >> 3] & (1 << (SgOmpSimdClause::static_variant & 7)))) ? ((SgOmpSimdClause*) (node)) : NULL) : NULL)
    3843             : ROSE_DLL_API SgOmpReverseOffloadClause* isSgOmpReverseOffloadClause(SgNode* node);
    3844             : ROSE_DLL_API const SgOmpReverseOffloadClause* isSgOmpReverseOffloadClause(const SgNode* node);
    3845             : #define IS_SgOmpReverseOffloadClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpReverseOffloadClause::static_variant >> 3] & (1 << (SgOmpReverseOffloadClause::static_variant & 7)))) ? ((SgOmpReverseOffloadClause*) (node)) : NULL) : NULL)
    3846             : ROSE_DLL_API SgOmpExtImplementationDefinedRequirementClause* isSgOmpExtImplementationDefinedRequirementClause(SgNode* node);
    3847             : ROSE_DLL_API const SgOmpExtImplementationDefinedRequirementClause* isSgOmpExtImplementationDefinedRequirementClause(const SgNode* node);
    3848             : #define IS_SgOmpExtImplementationDefinedRequirementClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpExtImplementationDefinedRequirementClause::static_variant >> 3] & (1 << (SgOmpExtImplementationDefinedRequirementClause::static_variant & 7)))) ? ((SgOmpExtImplementationDefinedRequirementClause*) (node)) : NULL) : NULL)
    3849             : ROSE_DLL_API SgOmpUnifiedAddressClause* isSgOmpUnifiedAddressClause(SgNode* node);
    3850             : ROSE_DLL_API const SgOmpUnifiedAddressClause* isSgOmpUnifiedAddressClause(const SgNode* node);
    3851             : #define IS_SgOmpUnifiedAddressClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUnifiedAddressClause::static_variant >> 3] & (1 << (SgOmpUnifiedAddressClause::static_variant & 7)))) ? ((SgOmpUnifiedAddressClause*) (node)) : NULL) : NULL)
    3852             : ROSE_DLL_API SgOmpUnifiedSharedMemoryClause* isSgOmpUnifiedSharedMemoryClause(SgNode* node);
    3853             : ROSE_DLL_API const SgOmpUnifiedSharedMemoryClause* isSgOmpUnifiedSharedMemoryClause(const SgNode* node);
    3854             : #define IS_SgOmpUnifiedSharedMemoryClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUnifiedSharedMemoryClause::static_variant >> 3] & (1 << (SgOmpUnifiedSharedMemoryClause::static_variant & 7)))) ? ((SgOmpUnifiedSharedMemoryClause*) (node)) : NULL) : NULL)
    3855             : ROSE_DLL_API SgOmpDynamicAllocatorsClause* isSgOmpDynamicAllocatorsClause(SgNode* node);
    3856             : ROSE_DLL_API const SgOmpDynamicAllocatorsClause* isSgOmpDynamicAllocatorsClause(const SgNode* node);
    3857             : #define IS_SgOmpDynamicAllocatorsClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDynamicAllocatorsClause::static_variant >> 3] & (1 << (SgOmpDynamicAllocatorsClause::static_variant & 7)))) ? ((SgOmpDynamicAllocatorsClause*) (node)) : NULL) : NULL)
    3858             : ROSE_DLL_API SgOmpAtomicDefaultMemOrderClause* isSgOmpAtomicDefaultMemOrderClause(SgNode* node);
    3859             : ROSE_DLL_API const SgOmpAtomicDefaultMemOrderClause* isSgOmpAtomicDefaultMemOrderClause(const SgNode* node);
    3860             : #define IS_SgOmpAtomicDefaultMemOrderClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAtomicDefaultMemOrderClause::static_variant >> 3] & (1 << (SgOmpAtomicDefaultMemOrderClause::static_variant & 7)))) ? ((SgOmpAtomicDefaultMemOrderClause*) (node)) : NULL) : NULL)
    3861             : ROSE_DLL_API SgOmpWriteClause* isSgOmpWriteClause(SgNode* node);
    3862             : ROSE_DLL_API const SgOmpWriteClause* isSgOmpWriteClause(const SgNode* node);
    3863             : #define IS_SgOmpWriteClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpWriteClause::static_variant >> 3] & (1 << (SgOmpWriteClause::static_variant & 7)))) ? ((SgOmpWriteClause*) (node)) : NULL) : NULL)
    3864             : ROSE_DLL_API SgOmpUpdateClause* isSgOmpUpdateClause(SgNode* node);
    3865             : ROSE_DLL_API const SgOmpUpdateClause* isSgOmpUpdateClause(const SgNode* node);
    3866             : #define IS_SgOmpUpdateClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUpdateClause::static_variant >> 3] & (1 << (SgOmpUpdateClause::static_variant & 7)))) ? ((SgOmpUpdateClause*) (node)) : NULL) : NULL)
    3867             : ROSE_DLL_API SgOmpDepobjUpdateClause* isSgOmpDepobjUpdateClause(SgNode* node);
    3868             : ROSE_DLL_API const SgOmpDepobjUpdateClause* isSgOmpDepobjUpdateClause(const SgNode* node);
    3869             : #define IS_SgOmpDepobjUpdateClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDepobjUpdateClause::static_variant >> 3] & (1 << (SgOmpDepobjUpdateClause::static_variant & 7)))) ? ((SgOmpDepobjUpdateClause*) (node)) : NULL) : NULL)
    3870             : ROSE_DLL_API SgOmpDestroyClause* isSgOmpDestroyClause(SgNode* node);
    3871             : ROSE_DLL_API const SgOmpDestroyClause* isSgOmpDestroyClause(const SgNode* node);
    3872             : #define IS_SgOmpDestroyClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDestroyClause::static_variant >> 3] & (1 << (SgOmpDestroyClause::static_variant & 7)))) ? ((SgOmpDestroyClause*) (node)) : NULL) : NULL)
    3873             : ROSE_DLL_API SgOmpCaptureClause* isSgOmpCaptureClause(SgNode* node);
    3874             : ROSE_DLL_API const SgOmpCaptureClause* isSgOmpCaptureClause(const SgNode* node);
    3875             : #define IS_SgOmpCaptureClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpCaptureClause::static_variant >> 3] & (1 << (SgOmpCaptureClause::static_variant & 7)))) ? ((SgOmpCaptureClause*) (node)) : NULL) : NULL)
    3876             : ROSE_DLL_API SgOmpSeqCstClause* isSgOmpSeqCstClause(SgNode* node);
    3877             : ROSE_DLL_API const SgOmpSeqCstClause* isSgOmpSeqCstClause(const SgNode* node);
    3878             : #define IS_SgOmpSeqCstClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSeqCstClause::static_variant >> 3] & (1 << (SgOmpSeqCstClause::static_variant & 7)))) ? ((SgOmpSeqCstClause*) (node)) : NULL) : NULL)
    3879             : ROSE_DLL_API SgOmpAcqRelClause* isSgOmpAcqRelClause(SgNode* node);
    3880             : ROSE_DLL_API const SgOmpAcqRelClause* isSgOmpAcqRelClause(const SgNode* node);
    3881             : #define IS_SgOmpAcqRelClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAcqRelClause::static_variant >> 3] & (1 << (SgOmpAcqRelClause::static_variant & 7)))) ? ((SgOmpAcqRelClause*) (node)) : NULL) : NULL)
    3882             : ROSE_DLL_API SgOmpReleaseClause* isSgOmpReleaseClause(SgNode* node);
    3883             : ROSE_DLL_API const SgOmpReleaseClause* isSgOmpReleaseClause(const SgNode* node);
    3884             : #define IS_SgOmpReleaseClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpReleaseClause::static_variant >> 3] & (1 << (SgOmpReleaseClause::static_variant & 7)))) ? ((SgOmpReleaseClause*) (node)) : NULL) : NULL)
    3885             : ROSE_DLL_API SgOmpAcquireClause* isSgOmpAcquireClause(SgNode* node);
    3886             : ROSE_DLL_API const SgOmpAcquireClause* isSgOmpAcquireClause(const SgNode* node);
    3887             : #define IS_SgOmpAcquireClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAcquireClause::static_variant >> 3] & (1 << (SgOmpAcquireClause::static_variant & 7)))) ? ((SgOmpAcquireClause*) (node)) : NULL) : NULL)
    3888             : ROSE_DLL_API SgOmpRelaxedClause* isSgOmpRelaxedClause(SgNode* node);
    3889             : ROSE_DLL_API const SgOmpRelaxedClause* isSgOmpRelaxedClause(const SgNode* node);
    3890             : #define IS_SgOmpRelaxedClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpRelaxedClause::static_variant >> 3] & (1 << (SgOmpRelaxedClause::static_variant & 7)))) ? ((SgOmpRelaxedClause*) (node)) : NULL) : NULL)
    3891             : ROSE_DLL_API SgOmpParallelClause* isSgOmpParallelClause(SgNode* node);
    3892             : ROSE_DLL_API const SgOmpParallelClause* isSgOmpParallelClause(const SgNode* node);
    3893             : #define IS_SgOmpParallelClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpParallelClause::static_variant >> 3] & (1 << (SgOmpParallelClause::static_variant & 7)))) ? ((SgOmpParallelClause*) (node)) : NULL) : NULL)
    3894             : ROSE_DLL_API SgOmpSectionsClause* isSgOmpSectionsClause(SgNode* node);
    3895             : ROSE_DLL_API const SgOmpSectionsClause* isSgOmpSectionsClause(const SgNode* node);
    3896             : #define IS_SgOmpSectionsClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSectionsClause::static_variant >> 3] & (1 << (SgOmpSectionsClause::static_variant & 7)))) ? ((SgOmpSectionsClause*) (node)) : NULL) : NULL)
    3897             : ROSE_DLL_API SgOmpForClause* isSgOmpForClause(SgNode* node);
    3898             : ROSE_DLL_API const SgOmpForClause* isSgOmpForClause(const SgNode* node);
    3899             : #define IS_SgOmpForClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpForClause::static_variant >> 3] & (1 << (SgOmpForClause::static_variant & 7)))) ? ((SgOmpForClause*) (node)) : NULL) : NULL)
    3900             : ROSE_DLL_API SgOmpTaskgroupClause* isSgOmpTaskgroupClause(SgNode* node);
    3901             : ROSE_DLL_API const SgOmpTaskgroupClause* isSgOmpTaskgroupClause(const SgNode* node);
    3902             : #define IS_SgOmpTaskgroupClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskgroupClause::static_variant >> 3] & (1 << (SgOmpTaskgroupClause::static_variant & 7)))) ? ((SgOmpTaskgroupClause*) (node)) : NULL) : NULL)
    3903             : ROSE_DLL_API SgOmpBeginClause* isSgOmpBeginClause(SgNode* node);
    3904             : ROSE_DLL_API const SgOmpBeginClause* isSgOmpBeginClause(const SgNode* node);
    3905             : #define IS_SgOmpBeginClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpBeginClause::static_variant >> 3] & (1 << (SgOmpBeginClause::static_variant & 7)))) ? ((SgOmpBeginClause*) (node)) : NULL) : NULL)
    3906             : ROSE_DLL_API SgOmpEndClause* isSgOmpEndClause(SgNode* node);
    3907             : ROSE_DLL_API const SgOmpEndClause* isSgOmpEndClause(const SgNode* node);
    3908             : #define IS_SgOmpEndClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpEndClause::static_variant >> 3] & (1 << (SgOmpEndClause::static_variant & 7)))) ? ((SgOmpEndClause*) (node)) : NULL) : NULL)
    3909             : ROSE_DLL_API SgOmpUntiedClause* isSgOmpUntiedClause(SgNode* node);
    3910             : ROSE_DLL_API const SgOmpUntiedClause* isSgOmpUntiedClause(const SgNode* node);
    3911             : #define IS_SgOmpUntiedClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUntiedClause::static_variant >> 3] & (1 << (SgOmpUntiedClause::static_variant & 7)))) ? ((SgOmpUntiedClause*) (node)) : NULL) : NULL)
    3912             : ROSE_DLL_API SgOmpMergeableClause* isSgOmpMergeableClause(SgNode* node);
    3913             : ROSE_DLL_API const SgOmpMergeableClause* isSgOmpMergeableClause(const SgNode* node);
    3914             : #define IS_SgOmpMergeableClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpMergeableClause::static_variant >> 3] & (1 << (SgOmpMergeableClause::static_variant & 7)))) ? ((SgOmpMergeableClause*) (node)) : NULL) : NULL)
    3915             : ROSE_DLL_API SgOmpDefaultClause* isSgOmpDefaultClause(SgNode* node);
    3916             : ROSE_DLL_API const SgOmpDefaultClause* isSgOmpDefaultClause(const SgNode* node);
    3917             : #define IS_SgOmpDefaultClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDefaultClause::static_variant >> 3] & (1 << (SgOmpDefaultClause::static_variant & 7)))) ? ((SgOmpDefaultClause*) (node)) : NULL) : NULL)
    3918             : ROSE_DLL_API SgOmpAtomicClause* isSgOmpAtomicClause(SgNode* node);
    3919             : ROSE_DLL_API const SgOmpAtomicClause* isSgOmpAtomicClause(const SgNode* node);
    3920             : #define IS_SgOmpAtomicClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAtomicClause::static_variant >> 3] & (1 << (SgOmpAtomicClause::static_variant & 7)))) ? ((SgOmpAtomicClause*) (node)) : NULL) : NULL)
    3921             : ROSE_DLL_API SgOmpProcBindClause* isSgOmpProcBindClause(SgNode* node);
    3922             : ROSE_DLL_API const SgOmpProcBindClause* isSgOmpProcBindClause(const SgNode* node);
    3923             : #define IS_SgOmpProcBindClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpProcBindClause::static_variant >> 3] & (1 << (SgOmpProcBindClause::static_variant & 7)))) ? ((SgOmpProcBindClause*) (node)) : NULL) : NULL)
    3924             : ROSE_DLL_API SgOmpOrderClause* isSgOmpOrderClause(SgNode* node);
    3925             : ROSE_DLL_API const SgOmpOrderClause* isSgOmpOrderClause(const SgNode* node);
    3926             : #define IS_SgOmpOrderClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpOrderClause::static_variant >> 3] & (1 << (SgOmpOrderClause::static_variant & 7)))) ? ((SgOmpOrderClause*) (node)) : NULL) : NULL)
    3927             : ROSE_DLL_API SgOmpBindClause* isSgOmpBindClause(SgNode* node);
    3928             : ROSE_DLL_API const SgOmpBindClause* isSgOmpBindClause(const SgNode* node);
    3929             : #define IS_SgOmpBindClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpBindClause::static_variant >> 3] & (1 << (SgOmpBindClause::static_variant & 7)))) ? ((SgOmpBindClause*) (node)) : NULL) : NULL)
    3930             : ROSE_DLL_API SgOmpInbranchClause* isSgOmpInbranchClause(SgNode* node);
    3931             : ROSE_DLL_API const SgOmpInbranchClause* isSgOmpInbranchClause(const SgNode* node);
    3932             : #define IS_SgOmpInbranchClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpInbranchClause::static_variant >> 3] & (1 << (SgOmpInbranchClause::static_variant & 7)))) ? ((SgOmpInbranchClause*) (node)) : NULL) : NULL)
    3933             : ROSE_DLL_API SgOmpNotinbranchClause* isSgOmpNotinbranchClause(SgNode* node);
    3934             : ROSE_DLL_API const SgOmpNotinbranchClause* isSgOmpNotinbranchClause(const SgNode* node);
    3935             : #define IS_SgOmpNotinbranchClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpNotinbranchClause::static_variant >> 3] & (1 << (SgOmpNotinbranchClause::static_variant & 7)))) ? ((SgOmpNotinbranchClause*) (node)) : NULL) : NULL)
    3936             : ROSE_DLL_API SgOmpCollapseClause* isSgOmpCollapseClause(SgNode* node);
    3937             : ROSE_DLL_API const SgOmpCollapseClause* isSgOmpCollapseClause(const SgNode* node);
    3938             : #define IS_SgOmpCollapseClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpCollapseClause::static_variant >> 3] & (1 << (SgOmpCollapseClause::static_variant & 7)))) ? ((SgOmpCollapseClause*) (node)) : NULL) : NULL)
    3939             : ROSE_DLL_API SgOmpIfClause* isSgOmpIfClause(SgNode* node);
    3940             : ROSE_DLL_API const SgOmpIfClause* isSgOmpIfClause(const SgNode* node);
    3941             : #define IS_SgOmpIfClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpIfClause::static_variant >> 3] & (1 << (SgOmpIfClause::static_variant & 7)))) ? ((SgOmpIfClause*) (node)) : NULL) : NULL)
    3942             : ROSE_DLL_API SgOmpFinalClause* isSgOmpFinalClause(SgNode* node);
    3943             : ROSE_DLL_API const SgOmpFinalClause* isSgOmpFinalClause(const SgNode* node);
    3944             : #define IS_SgOmpFinalClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpFinalClause::static_variant >> 3] & (1 << (SgOmpFinalClause::static_variant & 7)))) ? ((SgOmpFinalClause*) (node)) : NULL) : NULL)
    3945             : ROSE_DLL_API SgOmpPriorityClause* isSgOmpPriorityClause(SgNode* node);
    3946             : ROSE_DLL_API const SgOmpPriorityClause* isSgOmpPriorityClause(const SgNode* node);
    3947             : #define IS_SgOmpPriorityClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpPriorityClause::static_variant >> 3] & (1 << (SgOmpPriorityClause::static_variant & 7)))) ? ((SgOmpPriorityClause*) (node)) : NULL) : NULL)
    3948             : ROSE_DLL_API SgUpirNumUnitsField* isSgUpirNumUnitsField(SgNode* node);
    3949             : ROSE_DLL_API const SgUpirNumUnitsField* isSgUpirNumUnitsField(const SgNode* node);
    3950             : #define IS_SgUpirNumUnitsField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirNumUnitsField::static_variant >> 3] & (1 << (SgUpirNumUnitsField::static_variant & 7)))) ? ((SgUpirNumUnitsField*) (node)) : NULL) : NULL)
    3951             : ROSE_DLL_API SgOmpNumTeamsClause* isSgOmpNumTeamsClause(SgNode* node);
    3952             : ROSE_DLL_API const SgOmpNumTeamsClause* isSgOmpNumTeamsClause(const SgNode* node);
    3953             : #define IS_SgOmpNumTeamsClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpNumTeamsClause::static_variant >> 3] & (1 << (SgOmpNumTeamsClause::static_variant & 7)))) ? ((SgOmpNumTeamsClause*) (node)) : NULL) : NULL)
    3954             : ROSE_DLL_API SgOmpGrainsizeClause* isSgOmpGrainsizeClause(SgNode* node);
    3955             : ROSE_DLL_API const SgOmpGrainsizeClause* isSgOmpGrainsizeClause(const SgNode* node);
    3956             : #define IS_SgOmpGrainsizeClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpGrainsizeClause::static_variant >> 3] & (1 << (SgOmpGrainsizeClause::static_variant & 7)))) ? ((SgOmpGrainsizeClause*) (node)) : NULL) : NULL)
    3957             : ROSE_DLL_API SgOmpDetachClause* isSgOmpDetachClause(SgNode* node);
    3958             : ROSE_DLL_API const SgOmpDetachClause* isSgOmpDetachClause(const SgNode* node);
    3959             : #define IS_SgOmpDetachClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDetachClause::static_variant >> 3] & (1 << (SgOmpDetachClause::static_variant & 7)))) ? ((SgOmpDetachClause*) (node)) : NULL) : NULL)
    3960             : ROSE_DLL_API SgOmpNumTasksClause* isSgOmpNumTasksClause(SgNode* node);
    3961             : ROSE_DLL_API const SgOmpNumTasksClause* isSgOmpNumTasksClause(const SgNode* node);
    3962             : #define IS_SgOmpNumTasksClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpNumTasksClause::static_variant >> 3] & (1 << (SgOmpNumTasksClause::static_variant & 7)))) ? ((SgOmpNumTasksClause*) (node)) : NULL) : NULL)
    3963             : ROSE_DLL_API SgOmpHintClause* isSgOmpHintClause(SgNode* node);
    3964             : ROSE_DLL_API const SgOmpHintClause* isSgOmpHintClause(const SgNode* node);
    3965             : #define IS_SgOmpHintClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpHintClause::static_variant >> 3] & (1 << (SgOmpHintClause::static_variant & 7)))) ? ((SgOmpHintClause*) (node)) : NULL) : NULL)
    3966             : ROSE_DLL_API SgOmpThreadLimitClause* isSgOmpThreadLimitClause(SgNode* node);
    3967             : ROSE_DLL_API const SgOmpThreadLimitClause* isSgOmpThreadLimitClause(const SgNode* node);
    3968             : #define IS_SgOmpThreadLimitClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpThreadLimitClause::static_variant >> 3] & (1 << (SgOmpThreadLimitClause::static_variant & 7)))) ? ((SgOmpThreadLimitClause*) (node)) : NULL) : NULL)
    3969             : ROSE_DLL_API SgOmpNontemporalClause* isSgOmpNontemporalClause(SgNode* node);
    3970             : ROSE_DLL_API const SgOmpNontemporalClause* isSgOmpNontemporalClause(const SgNode* node);
    3971             : #define IS_SgOmpNontemporalClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpNontemporalClause::static_variant >> 3] & (1 << (SgOmpNontemporalClause::static_variant & 7)))) ? ((SgOmpNontemporalClause*) (node)) : NULL) : NULL)
    3972             : ROSE_DLL_API SgOmpInclusiveClause* isSgOmpInclusiveClause(SgNode* node);
    3973             : ROSE_DLL_API const SgOmpInclusiveClause* isSgOmpInclusiveClause(const SgNode* node);
    3974             : #define IS_SgOmpInclusiveClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpInclusiveClause::static_variant >> 3] & (1 << (SgOmpInclusiveClause::static_variant & 7)))) ? ((SgOmpInclusiveClause*) (node)) : NULL) : NULL)
    3975             : ROSE_DLL_API SgOmpExclusiveClause* isSgOmpExclusiveClause(SgNode* node);
    3976             : ROSE_DLL_API const SgOmpExclusiveClause* isSgOmpExclusiveClause(const SgNode* node);
    3977             : #define IS_SgOmpExclusiveClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpExclusiveClause::static_variant >> 3] & (1 << (SgOmpExclusiveClause::static_variant & 7)))) ? ((SgOmpExclusiveClause*) (node)) : NULL) : NULL)
    3978             : ROSE_DLL_API SgOmpIsDevicePtrClause* isSgOmpIsDevicePtrClause(SgNode* node);
    3979             : ROSE_DLL_API const SgOmpIsDevicePtrClause* isSgOmpIsDevicePtrClause(const SgNode* node);
    3980             : #define IS_SgOmpIsDevicePtrClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpIsDevicePtrClause::static_variant >> 3] & (1 << (SgOmpIsDevicePtrClause::static_variant & 7)))) ? ((SgOmpIsDevicePtrClause*) (node)) : NULL) : NULL)
    3981             : ROSE_DLL_API SgOmpUseDevicePtrClause* isSgOmpUseDevicePtrClause(SgNode* node);
    3982             : ROSE_DLL_API const SgOmpUseDevicePtrClause* isSgOmpUseDevicePtrClause(const SgNode* node);
    3983             : #define IS_SgOmpUseDevicePtrClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUseDevicePtrClause::static_variant >> 3] & (1 << (SgOmpUseDevicePtrClause::static_variant & 7)))) ? ((SgOmpUseDevicePtrClause*) (node)) : NULL) : NULL)
    3984             : ROSE_DLL_API SgOmpUseDeviceAddrClause* isSgOmpUseDeviceAddrClause(SgNode* node);
    3985             : ROSE_DLL_API const SgOmpUseDeviceAddrClause* isSgOmpUseDeviceAddrClause(const SgNode* node);
    3986             : #define IS_SgOmpUseDeviceAddrClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUseDeviceAddrClause::static_variant >> 3] & (1 << (SgOmpUseDeviceAddrClause::static_variant & 7)))) ? ((SgOmpUseDeviceAddrClause*) (node)) : NULL) : NULL)
    3987             : ROSE_DLL_API SgOmpDeviceClause* isSgOmpDeviceClause(SgNode* node);
    3988             : ROSE_DLL_API const SgOmpDeviceClause* isSgOmpDeviceClause(const SgNode* node);
    3989             : #define IS_SgOmpDeviceClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDeviceClause::static_variant >> 3] & (1 << (SgOmpDeviceClause::static_variant & 7)))) ? ((SgOmpDeviceClause*) (node)) : NULL) : NULL)
    3990             : ROSE_DLL_API SgOmpSafelenClause* isSgOmpSafelenClause(SgNode* node);
    3991             : ROSE_DLL_API const SgOmpSafelenClause* isSgOmpSafelenClause(const SgNode* node);
    3992             : #define IS_SgOmpSafelenClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSafelenClause::static_variant >> 3] & (1 << (SgOmpSafelenClause::static_variant & 7)))) ? ((SgOmpSafelenClause*) (node)) : NULL) : NULL)
    3993             : ROSE_DLL_API SgOmpSimdlenClause* isSgOmpSimdlenClause(SgNode* node);
    3994             : ROSE_DLL_API const SgOmpSimdlenClause* isSgOmpSimdlenClause(const SgNode* node);
    3995             : #define IS_SgOmpSimdlenClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSimdlenClause::static_variant >> 3] & (1 << (SgOmpSimdlenClause::static_variant & 7)))) ? ((SgOmpSimdlenClause*) (node)) : NULL) : NULL)
    3996             : ROSE_DLL_API SgOmpPartialClause* isSgOmpPartialClause(SgNode* node);
    3997             : ROSE_DLL_API const SgOmpPartialClause* isSgOmpPartialClause(const SgNode* node);
    3998             : #define IS_SgOmpPartialClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpPartialClause::static_variant >> 3] & (1 << (SgOmpPartialClause::static_variant & 7)))) ? ((SgOmpPartialClause*) (node)) : NULL) : NULL)
    3999             : ROSE_DLL_API SgOmpFullClause* isSgOmpFullClause(SgNode* node);
    4000             : ROSE_DLL_API const SgOmpFullClause* isSgOmpFullClause(const SgNode* node);
    4001             : #define IS_SgOmpFullClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpFullClause::static_variant >> 3] & (1 << (SgOmpFullClause::static_variant & 7)))) ? ((SgOmpFullClause*) (node)) : NULL) : NULL)
    4002             : ROSE_DLL_API SgOmpSizesClause* isSgOmpSizesClause(SgNode* node);
    4003             : ROSE_DLL_API const SgOmpSizesClause* isSgOmpSizesClause(const SgNode* node);
    4004             : #define IS_SgOmpSizesClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSizesClause::static_variant >> 3] & (1 << (SgOmpSizesClause::static_variant & 7)))) ? ((SgOmpSizesClause*) (node)) : NULL) : NULL)
    4005             : ROSE_DLL_API SgUpirBranchField* isSgUpirBranchField(SgNode* node);
    4006             : ROSE_DLL_API const SgUpirBranchField* isSgUpirBranchField(const SgNode* node);
    4007             : #define IS_SgUpirBranchField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirBranchField::static_variant >> 3] & (1 << (SgUpirBranchField::static_variant & 7)))) ? ((SgUpirBranchField*) (node)) : NULL) : NULL)
    4008             : ROSE_DLL_API SgUpirNestedLevelField* isSgUpirNestedLevelField(SgNode* node);
    4009             : ROSE_DLL_API const SgUpirNestedLevelField* isSgUpirNestedLevelField(const SgNode* node);
    4010             : #define IS_SgUpirNestedLevelField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirNestedLevelField::static_variant >> 3] & (1 << (SgUpirNestedLevelField::static_variant & 7)))) ? ((SgUpirNestedLevelField*) (node)) : NULL) : NULL)
    4011             : ROSE_DLL_API SgUpirNestedParentField* isSgUpirNestedParentField(SgNode* node);
    4012             : ROSE_DLL_API const SgUpirNestedParentField* isSgUpirNestedParentField(const SgNode* node);
    4013             : #define IS_SgUpirNestedParentField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirNestedParentField::static_variant >> 3] & (1 << (SgUpirNestedParentField::static_variant & 7)))) ? ((SgUpirNestedParentField*) (node)) : NULL) : NULL)
    4014             : ROSE_DLL_API SgUpirNestedChildField* isSgUpirNestedChildField(SgNode* node);
    4015             : ROSE_DLL_API const SgUpirNestedChildField* isSgUpirNestedChildField(const SgNode* node);
    4016             : #define IS_SgUpirNestedChildField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirNestedChildField::static_variant >> 3] & (1 << (SgUpirNestedChildField::static_variant & 7)))) ? ((SgUpirNestedChildField*) (node)) : NULL) : NULL)
    4017             : ROSE_DLL_API SgUpirSyncField* isSgUpirSyncField(SgNode* node);
    4018             : ROSE_DLL_API const SgUpirSyncField* isSgUpirSyncField(const SgNode* node);
    4019             : #define IS_SgUpirSyncField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirSyncField::static_variant >> 3] & (1 << (SgUpirSyncField::static_variant & 7)))) ? ((SgUpirSyncField*) (node)) : NULL) : NULL)
    4020             : ROSE_DLL_API SgUpirDataField* isSgUpirDataField(SgNode* node);
    4021             : ROSE_DLL_API const SgUpirDataField* isSgUpirDataField(const SgNode* node);
    4022             : #define IS_SgUpirDataField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirDataField::static_variant >> 3] & (1 << (SgUpirDataField::static_variant & 7)))) ? ((SgUpirDataField*) (node)) : NULL) : NULL)
    4023             : ROSE_DLL_API SgUpirTargetField* isSgUpirTargetField(SgNode* node);
    4024             : ROSE_DLL_API const SgUpirTargetField* isSgUpirTargetField(const SgNode* node);
    4025             : #define IS_SgUpirTargetField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirTargetField::static_variant >> 3] & (1 << (SgUpirTargetField::static_variant & 7)))) ? ((SgUpirTargetField*) (node)) : NULL) : NULL)
    4026             : ROSE_DLL_API SgUpirDataItemField* isSgUpirDataItemField(SgNode* node);
    4027             : ROSE_DLL_API const SgUpirDataItemField* isSgUpirDataItemField(const SgNode* node);
    4028             : #define IS_SgUpirDataItemField_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgUpirDataItemField::static_variant >> 3] & (1 << (SgUpirDataItemField::static_variant & 7)))) ? ((SgUpirDataItemField*) (node)) : NULL) : NULL)
    4029             : ROSE_DLL_API SgOmpExpressionClause* isSgOmpExpressionClause(SgNode* node);
    4030             : ROSE_DLL_API const SgOmpExpressionClause* isSgOmpExpressionClause(const SgNode* node);
    4031             : #define IS_SgOmpExpressionClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpExpressionClause::static_variant >> 3] & (1 << (SgOmpExpressionClause::static_variant & 7)))) ? ((SgOmpExpressionClause*) (node)) : NULL) : NULL)
    4032             : ROSE_DLL_API SgOmpCopyprivateClause* isSgOmpCopyprivateClause(SgNode* node);
    4033             : ROSE_DLL_API const SgOmpCopyprivateClause* isSgOmpCopyprivateClause(const SgNode* node);
    4034             : #define IS_SgOmpCopyprivateClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpCopyprivateClause::static_variant >> 3] & (1 << (SgOmpCopyprivateClause::static_variant & 7)))) ? ((SgOmpCopyprivateClause*) (node)) : NULL) : NULL)
    4035             : ROSE_DLL_API SgOmpPrivateClause* isSgOmpPrivateClause(SgNode* node);
    4036             : ROSE_DLL_API const SgOmpPrivateClause* isSgOmpPrivateClause(const SgNode* node);
    4037             : #define IS_SgOmpPrivateClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpPrivateClause::static_variant >> 3] & (1 << (SgOmpPrivateClause::static_variant & 7)))) ? ((SgOmpPrivateClause*) (node)) : NULL) : NULL)
    4038             : ROSE_DLL_API SgOmpFirstprivateClause* isSgOmpFirstprivateClause(SgNode* node);
    4039             : ROSE_DLL_API const SgOmpFirstprivateClause* isSgOmpFirstprivateClause(const SgNode* node);
    4040             : #define IS_SgOmpFirstprivateClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpFirstprivateClause::static_variant >> 3] & (1 << (SgOmpFirstprivateClause::static_variant & 7)))) ? ((SgOmpFirstprivateClause*) (node)) : NULL) : NULL)
    4041             : ROSE_DLL_API SgOmpSharedClause* isSgOmpSharedClause(SgNode* node);
    4042             : ROSE_DLL_API const SgOmpSharedClause* isSgOmpSharedClause(const SgNode* node);
    4043             : #define IS_SgOmpSharedClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpSharedClause::static_variant >> 3] & (1 << (SgOmpSharedClause::static_variant & 7)))) ? ((SgOmpSharedClause*) (node)) : NULL) : NULL)
    4044             : ROSE_DLL_API SgOmpCopyinClause* isSgOmpCopyinClause(SgNode* node);
    4045             : ROSE_DLL_API const SgOmpCopyinClause* isSgOmpCopyinClause(const SgNode* node);
    4046             : #define IS_SgOmpCopyinClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpCopyinClause::static_variant >> 3] & (1 << (SgOmpCopyinClause::static_variant & 7)))) ? ((SgOmpCopyinClause*) (node)) : NULL) : NULL)
    4047             : ROSE_DLL_API SgOmpLastprivateClause* isSgOmpLastprivateClause(SgNode* node);
    4048             : ROSE_DLL_API const SgOmpLastprivateClause* isSgOmpLastprivateClause(const SgNode* node);
    4049             : #define IS_SgOmpLastprivateClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpLastprivateClause::static_variant >> 3] & (1 << (SgOmpLastprivateClause::static_variant & 7)))) ? ((SgOmpLastprivateClause*) (node)) : NULL) : NULL)
    4050             : ROSE_DLL_API SgOmpReductionClause* isSgOmpReductionClause(SgNode* node);
    4051             : ROSE_DLL_API const SgOmpReductionClause* isSgOmpReductionClause(const SgNode* node);
    4052             : #define IS_SgOmpReductionClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpReductionClause::static_variant >> 3] & (1 << (SgOmpReductionClause::static_variant & 7)))) ? ((SgOmpReductionClause*) (node)) : NULL) : NULL)
    4053             : ROSE_DLL_API SgOmpInReductionClause* isSgOmpInReductionClause(SgNode* node);
    4054             : ROSE_DLL_API const SgOmpInReductionClause* isSgOmpInReductionClause(const SgNode* node);
    4055             : #define IS_SgOmpInReductionClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpInReductionClause::static_variant >> 3] & (1 << (SgOmpInReductionClause::static_variant & 7)))) ? ((SgOmpInReductionClause*) (node)) : NULL) : NULL)
    4056             : ROSE_DLL_API SgOmpTaskReductionClause* isSgOmpTaskReductionClause(SgNode* node);
    4057             : ROSE_DLL_API const SgOmpTaskReductionClause* isSgOmpTaskReductionClause(const SgNode* node);
    4058             : #define IS_SgOmpTaskReductionClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpTaskReductionClause::static_variant >> 3] & (1 << (SgOmpTaskReductionClause::static_variant & 7)))) ? ((SgOmpTaskReductionClause*) (node)) : NULL) : NULL)
    4059             : ROSE_DLL_API SgOmpAllocateClause* isSgOmpAllocateClause(SgNode* node);
    4060             : ROSE_DLL_API const SgOmpAllocateClause* isSgOmpAllocateClause(const SgNode* node);
    4061             : #define IS_SgOmpAllocateClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAllocateClause::static_variant >> 3] & (1 << (SgOmpAllocateClause::static_variant & 7)))) ? ((SgOmpAllocateClause*) (node)) : NULL) : NULL)
    4062             : ROSE_DLL_API SgOmpDependClause* isSgOmpDependClause(SgNode* node);
    4063             : ROSE_DLL_API const SgOmpDependClause* isSgOmpDependClause(const SgNode* node);
    4064             : #define IS_SgOmpDependClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDependClause::static_variant >> 3] & (1 << (SgOmpDependClause::static_variant & 7)))) ? ((SgOmpDependClause*) (node)) : NULL) : NULL)
    4065             : ROSE_DLL_API SgOmpToClause* isSgOmpToClause(SgNode* node);
    4066             : ROSE_DLL_API const SgOmpToClause* isSgOmpToClause(const SgNode* node);
    4067             : #define IS_SgOmpToClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpToClause::static_variant >> 3] & (1 << (SgOmpToClause::static_variant & 7)))) ? ((SgOmpToClause*) (node)) : NULL) : NULL)
    4068             : ROSE_DLL_API SgOmpUsesAllocatorsClause* isSgOmpUsesAllocatorsClause(SgNode* node);
    4069             : ROSE_DLL_API const SgOmpUsesAllocatorsClause* isSgOmpUsesAllocatorsClause(const SgNode* node);
    4070             : #define IS_SgOmpUsesAllocatorsClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUsesAllocatorsClause::static_variant >> 3] & (1 << (SgOmpUsesAllocatorsClause::static_variant & 7)))) ? ((SgOmpUsesAllocatorsClause*) (node)) : NULL) : NULL)
    4071             : ROSE_DLL_API SgOmpFromClause* isSgOmpFromClause(SgNode* node);
    4072             : ROSE_DLL_API const SgOmpFromClause* isSgOmpFromClause(const SgNode* node);
    4073             : #define IS_SgOmpFromClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpFromClause::static_variant >> 3] & (1 << (SgOmpFromClause::static_variant & 7)))) ? ((SgOmpFromClause*) (node)) : NULL) : NULL)
    4074             : ROSE_DLL_API SgOmpAffinityClause* isSgOmpAffinityClause(SgNode* node);
    4075             : ROSE_DLL_API const SgOmpAffinityClause* isSgOmpAffinityClause(const SgNode* node);
    4076             : #define IS_SgOmpAffinityClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAffinityClause::static_variant >> 3] & (1 << (SgOmpAffinityClause::static_variant & 7)))) ? ((SgOmpAffinityClause*) (node)) : NULL) : NULL)
    4077             : ROSE_DLL_API SgOmpMapClause* isSgOmpMapClause(SgNode* node);
    4078             : ROSE_DLL_API const SgOmpMapClause* isSgOmpMapClause(const SgNode* node);
    4079             : #define IS_SgOmpMapClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpMapClause::static_variant >> 3] & (1 << (SgOmpMapClause::static_variant & 7)))) ? ((SgOmpMapClause*) (node)) : NULL) : NULL)
    4080             : ROSE_DLL_API SgOmpLinearClause* isSgOmpLinearClause(SgNode* node);
    4081             : ROSE_DLL_API const SgOmpLinearClause* isSgOmpLinearClause(const SgNode* node);
    4082             : #define IS_SgOmpLinearClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpLinearClause::static_variant >> 3] & (1 << (SgOmpLinearClause::static_variant & 7)))) ? ((SgOmpLinearClause*) (node)) : NULL) : NULL)
    4083             : ROSE_DLL_API SgOmpUniformClause* isSgOmpUniformClause(SgNode* node);
    4084             : ROSE_DLL_API const SgOmpUniformClause* isSgOmpUniformClause(const SgNode* node);
    4085             : #define IS_SgOmpUniformClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUniformClause::static_variant >> 3] & (1 << (SgOmpUniformClause::static_variant & 7)))) ? ((SgOmpUniformClause*) (node)) : NULL) : NULL)
    4086             : ROSE_DLL_API SgOmpAlignedClause* isSgOmpAlignedClause(SgNode* node);
    4087             : ROSE_DLL_API const SgOmpAlignedClause* isSgOmpAlignedClause(const SgNode* node);
    4088             : #define IS_SgOmpAlignedClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAlignedClause::static_variant >> 3] & (1 << (SgOmpAlignedClause::static_variant & 7)))) ? ((SgOmpAlignedClause*) (node)) : NULL) : NULL)
    4089             : ROSE_DLL_API SgOmpVariablesClause* isSgOmpVariablesClause(SgNode* node);
    4090             : ROSE_DLL_API const SgOmpVariablesClause* isSgOmpVariablesClause(const SgNode* node);
    4091             : #define IS_SgOmpVariablesClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpVariablesClause::static_variant >> 3] & (1 << (SgOmpVariablesClause::static_variant & 7)))) ? ((SgOmpVariablesClause*) (node)) : NULL) : NULL)
    4092             : ROSE_DLL_API SgOmpScheduleClause* isSgOmpScheduleClause(SgNode* node);
    4093             : ROSE_DLL_API const SgOmpScheduleClause* isSgOmpScheduleClause(const SgNode* node);
    4094             : #define IS_SgOmpScheduleClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpScheduleClause::static_variant >> 3] & (1 << (SgOmpScheduleClause::static_variant & 7)))) ? ((SgOmpScheduleClause*) (node)) : NULL) : NULL)
    4095             : ROSE_DLL_API SgOmpWhenClause* isSgOmpWhenClause(SgNode* node);
    4096             : ROSE_DLL_API const SgOmpWhenClause* isSgOmpWhenClause(const SgNode* node);
    4097             : #define IS_SgOmpWhenClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpWhenClause::static_variant >> 3] & (1 << (SgOmpWhenClause::static_variant & 7)))) ? ((SgOmpWhenClause*) (node)) : NULL) : NULL)
    4098             : ROSE_DLL_API SgOmpDistScheduleClause* isSgOmpDistScheduleClause(SgNode* node);
    4099             : ROSE_DLL_API const SgOmpDistScheduleClause* isSgOmpDistScheduleClause(const SgNode* node);
    4100             : #define IS_SgOmpDistScheduleClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDistScheduleClause::static_variant >> 3] & (1 << (SgOmpDistScheduleClause::static_variant & 7)))) ? ((SgOmpDistScheduleClause*) (node)) : NULL) : NULL)
    4101             : ROSE_DLL_API SgOmpDefaultmapClause* isSgOmpDefaultmapClause(SgNode* node);
    4102             : ROSE_DLL_API const SgOmpDefaultmapClause* isSgOmpDefaultmapClause(const SgNode* node);
    4103             : #define IS_SgOmpDefaultmapClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpDefaultmapClause::static_variant >> 3] & (1 << (SgOmpDefaultmapClause::static_variant & 7)))) ? ((SgOmpDefaultmapClause*) (node)) : NULL) : NULL)
    4104             : ROSE_DLL_API SgOmpAllocatorClause* isSgOmpAllocatorClause(SgNode* node);
    4105             : ROSE_DLL_API const SgOmpAllocatorClause* isSgOmpAllocatorClause(const SgNode* node);
    4106             : #define IS_SgOmpAllocatorClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpAllocatorClause::static_variant >> 3] & (1 << (SgOmpAllocatorClause::static_variant & 7)))) ? ((SgOmpAllocatorClause*) (node)) : NULL) : NULL)
    4107             : ROSE_DLL_API SgOmpUsesAllocatorsDefination* isSgOmpUsesAllocatorsDefination(SgNode* node);
    4108             : ROSE_DLL_API const SgOmpUsesAllocatorsDefination* isSgOmpUsesAllocatorsDefination(const SgNode* node);
    4109             : #define IS_SgOmpUsesAllocatorsDefination_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpUsesAllocatorsDefination::static_variant >> 3] & (1 << (SgOmpUsesAllocatorsDefination::static_variant & 7)))) ? ((SgOmpUsesAllocatorsDefination*) (node)) : NULL) : NULL)
    4110             : ROSE_DLL_API SgOmpClause* isSgOmpClause(SgNode* node);
    4111             : ROSE_DLL_API const SgOmpClause* isSgOmpClause(const SgNode* node);
    4112             : #define IS_SgOmpClause_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgOmpClause::static_variant >> 3] & (1 << (SgOmpClause::static_variant & 7)))) ? ((SgOmpClause*) (node)) : NULL) : NULL)
    4113             : ROSE_DLL_API SgRenamePair* isSgRenamePair(SgNode* node);
    4114             : ROSE_DLL_API const SgRenamePair* isSgRenamePair(const SgNode* node);
    4115             : #define IS_SgRenamePair_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgRenamePair::static_variant >> 3] & (1 << (SgRenamePair::static_variant & 7)))) ? ((SgRenamePair*) (node)) : NULL) : NULL)
    4116             : ROSE_DLL_API SgInterfaceBody* isSgInterfaceBody(SgNode* node);
    4117             : ROSE_DLL_API const SgInterfaceBody* isSgInterfaceBody(const SgNode* node);
    4118             : #define IS_SgInterfaceBody_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgInterfaceBody::static_variant >> 3] & (1 << (SgInterfaceBody::static_variant & 7)))) ? ((SgInterfaceBody*) (node)) : NULL) : NULL)
    4119             : ROSE_DLL_API SgHeaderFileBody* isSgHeaderFileBody(SgNode* node);
    4120             : ROSE_DLL_API const SgHeaderFileBody* isSgHeaderFileBody(const SgNode* node);
    4121             : #define IS_SgHeaderFileBody_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgHeaderFileBody::static_variant >> 3] & (1 << (SgHeaderFileBody::static_variant & 7)))) ? ((SgHeaderFileBody*) (node)) : NULL) : NULL)
    4122             : ROSE_DLL_API SgLocatedNodeSupport* isSgLocatedNodeSupport(SgNode* node);
    4123             : ROSE_DLL_API const SgLocatedNodeSupport* isSgLocatedNodeSupport(const SgNode* node);
    4124             : #define IS_SgLocatedNodeSupport_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLocatedNodeSupport::static_variant >> 3] & (1 << (SgLocatedNodeSupport::static_variant & 7)))) ? ((SgLocatedNodeSupport*) (node)) : NULL) : NULL)
    4125             : ROSE_DLL_API SgToken* isSgToken(SgNode* node);
    4126             : ROSE_DLL_API const SgToken* isSgToken(const SgNode* node);
    4127             : #define IS_SgToken_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgToken::static_variant >> 3] & (1 << (SgToken::static_variant & 7)))) ? ((SgToken*) (node)) : NULL) : NULL)
    4128             : ROSE_DLL_API SgLocatedNode* isSgLocatedNode(SgNode* node);
    4129             : ROSE_DLL_API const SgLocatedNode* isSgLocatedNode(const SgNode* node);
    4130             : #define IS_SgLocatedNode_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgLocatedNode::static_variant >> 3] & (1 << (SgLocatedNode::static_variant & 7)))) ? ((SgLocatedNode*) (node)) : NULL) : NULL)
    4131             : ROSE_DLL_API SgNode* isSgNode(SgNode* node);
    4132             : ROSE_DLL_API const SgNode* isSgNode(const SgNode* node);
    4133             : #define IS_SgNode_FAST_MACRO(node) ( (node) ? (( (rose_ClassHierarchyCastTable[(node)->variantT()][SgNode::static_variant >> 3] & (1 << (SgNode::static_variant & 7)))) ? ((SgNode*) (node)) : NULL) : NULL)// JH (01/18/2006) Forward declarations for the StorageClasses, needed by the ast file i/o
    4134             : 
    4135             :   class SgNameStorageClass; 
    4136             :   class SgSymbolTableStorageClass; 
    4137             :   class SgPragmaStorageClass; 
    4138             :   class SgModifierNodesStorageClass; 
    4139             :   class SgConstVolatileModifierStorageClass; 
    4140             :   class SgStorageModifierStorageClass; 
    4141             :   class SgAccessModifierStorageClass; 
    4142             :   class SgFunctionModifierStorageClass; 
    4143             :   class SgUPC_AccessModifierStorageClass; 
    4144             :   class SgLinkageModifierStorageClass; 
    4145             :   class SgSpecialFunctionModifierStorageClass; 
    4146             :   class SgTypeModifierStorageClass; 
    4147             :   class SgElaboratedTypeModifierStorageClass; 
    4148             :   class SgBaseClassModifierStorageClass; 
    4149             :   class SgDeclarationModifierStorageClass; 
    4150             :   class SgStructureModifierStorageClass; 
    4151             :   class SgOpenclAccessModeModifierStorageClass; 
    4152             :   class SgModifierStorageClass; 
    4153             :   class Sg_File_InfoStorageClass; 
    4154             :   class SgSourceFileStorageClass; 
    4155             :   class SgUnknownFileStorageClass; 
    4156             :   class SgFileStorageClass; 
    4157             :   class SgFileListStorageClass; 
    4158             :   class SgDirectoryStorageClass; 
    4159             :   class SgDirectoryListStorageClass; 
    4160             :   class SgProjectStorageClass; 
    4161             :   class SgOptionsStorageClass; 
    4162             :   class SgUnparse_InfoStorageClass; 
    4163             :   class SgIncludeFileStorageClass; 
    4164             :   class SgFuncDecl_attrStorageClass; 
    4165             :   class SgClassDecl_attrStorageClass; 
    4166             :   class SgTypedefSeqStorageClass; 
    4167             :   class SgFunctionParameterTypeListStorageClass; 
    4168             :   class SgTemplateParameterStorageClass; 
    4169             :   class SgTemplateArgumentStorageClass; 
    4170             :   class SgTemplateParameterListStorageClass; 
    4171             :   class SgTemplateArgumentListStorageClass; 
    4172             :   class SgBitAttributeStorageClass; 
    4173             :   class SgAttributeStorageClass; 
    4174             :   class SgExpBaseClassStorageClass; 
    4175             :   class SgNonrealBaseClassStorageClass; 
    4176             :   class SgBaseClassStorageClass; 
    4177             :   class SgUndirectedGraphEdgeStorageClass; 
    4178             :   class SgDirectedGraphEdgeStorageClass; 
    4179             :   class SgGraphNodeStorageClass; 
    4180             :   class SgGraphEdgeStorageClass; 
    4181             :   class SgStringKeyedBidirectionalGraphStorageClass; 
    4182             :   class SgIntKeyedBidirectionalGraphStorageClass; 
    4183             :   class SgBidirectionalGraphStorageClass; 
    4184             :   class SgIncidenceDirectedGraphStorageClass; 
    4185             :   class SgIncidenceUndirectedGraphStorageClass; 
    4186             :   class SgGraphStorageClass; 
    4187             :   class SgGraphNodeListStorageClass; 
    4188             :   class SgGraphEdgeListStorageClass; 
    4189             :   class SgQualifiedNameStorageClass; 
    4190             :   class SgNameGroupStorageClass; 
    4191             :   class SgDimensionObjectStorageClass; 
    4192             :   class SgDataStatementGroupStorageClass; 
    4193             :   class SgDataStatementObjectStorageClass; 
    4194             :   class SgDataStatementValueStorageClass; 
    4195             :   class SgFormatItemStorageClass; 
    4196             :   class SgFormatItemListStorageClass; 
    4197             :   class SgTypeTableStorageClass; 
    4198             :   class SgHeaderFileReportStorageClass; 
    4199             :   class SgSupportStorageClass; 
    4200             :   class SgTypeUnknownStorageClass; 
    4201             :   class SgTypeCharStorageClass; 
    4202             :   class SgTypeSignedCharStorageClass; 
    4203             :   class SgTypeUnsignedCharStorageClass; 
    4204             :   class SgTypeShortStorageClass; 
    4205             :   class SgTypeSignedShortStorageClass; 
    4206             :   class SgTypeUnsignedShortStorageClass; 
    4207             :   class SgTypeIntStorageClass; 
    4208             :   class SgTypeSignedIntStorageClass; 
    4209             :   class SgTypeUnsignedIntStorageClass; 
    4210             :   class SgTypeLongStorageClass; 
    4211             :   class SgTypeSignedLongStorageClass; 
    4212             :   class SgTypeUnsignedLongStorageClass; 
    4213             :   class SgTypeVoidStorageClass; 
    4214             :   class SgTypeGlobalVoidStorageClass; 
    4215             :   class SgTypeWcharStorageClass; 
    4216             :   class SgTypeFloatStorageClass; 
    4217             :   class SgTypeDoubleStorageClass; 
    4218             :   class SgTypeLongLongStorageClass; 
    4219             :   class SgTypeSignedLongLongStorageClass; 
    4220             :   class SgTypeUnsignedLongLongStorageClass; 
    4221             :   class SgTypeLongDoubleStorageClass; 
    4222             :   class SgTypeFloat80StorageClass; 
    4223             :   class SgTypeFloat128StorageClass; 
    4224             :   class SgTypeStringStorageClass; 
    4225             :   class SgTypeBoolStorageClass; 
    4226             :   class SgTypeFixedStorageClass; 
    4227             :   class SgTypeMatrixStorageClass; 
    4228             :   class SgTypeTupleStorageClass; 
    4229             :   class SgTypeNullptrStorageClass; 
    4230             :   class SgTypeComplexStorageClass; 
    4231             :   class SgTypeImaginaryStorageClass; 
    4232             :   class SgTypeDefaultStorageClass; 
    4233             :   class SgPointerMemberTypeStorageClass; 
    4234             :   class SgReferenceTypeStorageClass; 
    4235             :   class SgRvalueReferenceTypeStorageClass; 
    4236             :   class SgDeclTypeStorageClass; 
    4237             :   class SgTypeOfTypeStorageClass; 
    4238             :   class SgTypeCAFTeamStorageClass; 
    4239             :   class SgTypeUnsigned128bitIntegerStorageClass; 
    4240             :   class SgTypeSigned128bitIntegerStorageClass; 
    4241             :   class SgTypeLabelStorageClass; 
    4242             :   class SgTemplateTypeStorageClass; 
    4243             :   class SgEnumTypeStorageClass; 
    4244             :   class SgTypedefTypeStorageClass; 
    4245             :   class SgNonrealTypeStorageClass; 
    4246             :   class SgAutoTypeStorageClass; 
    4247             :   class SgModifierTypeStorageClass; 
    4248             :   class SgPartialFunctionModifierTypeStorageClass; 
    4249             :   class SgArrayTypeStorageClass; 
    4250             :   class SgTypeEllipseStorageClass; 
    4251             :   class SgTypeCrayPointerStorageClass; 
    4252             :   class SgPartialFunctionTypeStorageClass; 
    4253             :   class SgMemberFunctionTypeStorageClass; 
    4254             :   class SgFunctionTypeStorageClass; 
    4255             :   class SgPointerTypeStorageClass; 
    4256             :   class SgClassTypeStorageClass; 
    4257             :   class SgNamedTypeStorageClass; 
    4258             :   class SgQualifiedNameTypeStorageClass; 
    4259             :   class SgTypeChar16StorageClass; 
    4260             :   class SgTypeChar32StorageClass; 
    4261             :   class SgTypeStorageClass; 
    4262             :   class SgForStatementStorageClass; 
    4263             :   class SgForInitStatementStorageClass; 
    4264             :   class SgRangeBasedForStatementStorageClass; 
    4265             :   class SgCatchStatementSeqStorageClass; 
    4266             :   class SgFunctionParameterListStorageClass; 
    4267             :   class SgCtorInitializerListStorageClass; 
    4268             :   class SgBasicBlockStorageClass; 
    4269             :   class SgGlobalStorageClass; 
    4270             :   class SgIfStmtStorageClass; 
    4271             :   class SgWhileStmtStorageClass; 
    4272             :   class SgDoWhileStmtStorageClass; 
    4273             :   class SgSwitchStatementStorageClass; 
    4274             :   class SgCatchOptionStmtStorageClass; 
    4275             :   class SgFunctionParameterScopeStorageClass; 
    4276             :   class SgDeclarationScopeStorageClass; 
    4277             :   class SgVariableDefinitionStorageClass; 
    4278             :   class SgStmtDeclarationStatementStorageClass; 
    4279             :   class SgEnumDeclarationStorageClass; 
    4280             :   class SgAsmStmtStorageClass; 
    4281             :   class SgFunctionTypeTableStorageClass; 
    4282             :   class SgExprStatementStorageClass; 
    4283             :   class SgLabelStatementStorageClass; 
    4284             :   class SgCaseOptionStmtStorageClass; 
    4285             :   class SgTryStmtStorageClass; 
    4286             :   class SgDefaultOptionStmtStorageClass; 
    4287             :   class SgBreakStmtStorageClass; 
    4288             :   class SgContinueStmtStorageClass; 
    4289             :   class SgReturnStmtStorageClass; 
    4290             :   class SgGotoStatementStorageClass; 
    4291             :   class SgSpawnStmtStorageClass; 
    4292             :   class SgTemplateTypedefDeclarationStorageClass; 
    4293             :   class SgTemplateInstantiationTypedefDeclarationStorageClass; 
    4294             :   class SgTypedefDeclarationStorageClass; 
    4295             :   class SgNullStatementStorageClass; 
    4296             :   class SgVariantStatementStorageClass; 
    4297             :   class SgPragmaDeclarationStorageClass; 
    4298             :   class SgTemplateClassDeclarationStorageClass; 
    4299             :   class SgTemplateMemberFunctionDeclarationStorageClass; 
    4300             :   class SgTemplateFunctionDeclarationStorageClass; 
    4301             :   class SgTemplateVariableDeclarationStorageClass; 
    4302             :   class SgTemplateDeclarationStorageClass; 
    4303             :   class SgVariableDeclarationStorageClass; 
    4304             :   class SgTemplateInstantiationDeclStorageClass; 
    4305             :   class SgTemplateInstantiationDefnStorageClass; 
    4306             :   class SgTemplateInstantiationFunctionDeclStorageClass; 
    4307             :   class SgTemplateInstantiationMemberFunctionDeclStorageClass; 
    4308             :   class SgNonrealDeclStorageClass; 
    4309             :   class SgWithStatementStorageClass; 
    4310             :   class SgPassStatementStorageClass; 
    4311             :   class SgAssertStmtStorageClass; 
    4312             :   class SgExecStatementStorageClass; 
    4313             :   class SgProgramHeaderStatementStorageClass; 
    4314             :   class SgProcedureHeaderStatementStorageClass; 
    4315             :   class SgEntryStatementStorageClass; 
    4316             :   class SgFortranNonblockedDoStorageClass; 
    4317             :   class SgInterfaceStatementStorageClass; 
    4318             :   class SgParameterStatementStorageClass; 
    4319             :   class SgCommonBlockStorageClass; 
    4320             :   class SgModuleStatementStorageClass; 
    4321             :   class SgUseStatementStorageClass; 
    4322             :   class SgProcessControlStatementStorageClass; 
    4323             :   class SgPrintStatementStorageClass; 
    4324             :   class SgReadStatementStorageClass; 
    4325             :   class SgWriteStatementStorageClass; 
    4326             :   class SgOpenStatementStorageClass; 
    4327             :   class SgCloseStatementStorageClass; 
    4328             :   class SgInquireStatementStorageClass; 
    4329             :   class SgFlushStatementStorageClass; 
    4330             :   class SgBackspaceStatementStorageClass; 
    4331             :   class SgRewindStatementStorageClass; 
    4332             :   class SgEndfileStatementStorageClass; 
    4333             :   class SgWaitStatementStorageClass; 
    4334             :   class SgCAFWithTeamStatementStorageClass; 
    4335             :   class SgFormatStatementStorageClass; 
    4336             :   class SgFortranDoStorageClass; 
    4337             :   class SgForAllStatementStorageClass; 
    4338             :   class SgIOStatementStorageClass; 
    4339             :   class SgSyncAllStatementStorageClass; 
    4340             :   class SgSyncImagesStatementStorageClass; 
    4341             :   class SgSyncMemoryStatementStorageClass; 
    4342             :   class SgSyncTeamStatementStorageClass; 
    4343             :   class SgLockStatementStorageClass; 
    4344             :   class SgUnlockStatementStorageClass; 
    4345             :   class SgImageControlStatementStorageClass; 
    4346             :   class SgUpcNotifyStatementStorageClass; 
    4347             :   class SgUpcWaitStatementStorageClass; 
    4348             :   class SgUpcBarrierStatementStorageClass; 
    4349             :   class SgUpcFenceStatementStorageClass; 
    4350             :   class SgUpcForAllStatementStorageClass; 
    4351             :   class SgUpirSpmdStatementStorageClass; 
    4352             :   class SgOmpLoopStatementStorageClass; 
    4353             :   class SgOmpScanStatementStorageClass; 
    4354             :   class SgOmpTaskloopStatementStorageClass; 
    4355             :   class SgOmpTaskgroupStatementStorageClass; 
    4356             :   class SgOmpDepobjStatementStorageClass; 
    4357             :   class SgOmpTeamsStatementStorageClass; 
    4358             :   class SgOmpCancellationPointStatementStorageClass; 
    4359             :   class SgOmpDeclareMapperStatementStorageClass; 
    4360             :   class SgOmpCancelStatementStorageClass; 
    4361             :   class SgOmpDistributeStatementStorageClass; 
    4362             :   class SgOmpMetadirectiveStatementStorageClass; 
    4363             :   class SgOmpSingleStatementStorageClass; 
    4364             :   class SgOmpTaskStatementStorageClass; 
    4365             :   class SgOmpTargetEnterDataStatementStorageClass; 
    4366             :   class SgOmpTargetExitDataStatementStorageClass; 
    4367             :   class SgUpirWorksharingStatementStorageClass; 
    4368             :   class SgOmpForSimdStatementStorageClass; 
    4369             :   class SgOmpDoStatementStorageClass; 
    4370             :   class SgOmpSectionsStatementStorageClass; 
    4371             :   class SgOmpAtomicStatementStorageClass; 
    4372             :   class SgUpirTaskStatementStorageClass; 
    4373             :   class SgOmpTargetDataStatementStorageClass; 
    4374             :   class SgOmpTargetParallelForStatementStorageClass; 
    4375             :   class SgOmpTargetParallelStatementStorageClass; 
    4376             :   class SgOmpDistributeSimdStatementStorageClass; 
    4377             :   class SgOmpDistributeParallelForStatementStorageClass; 
    4378             :   class SgOmpDistributeParallelForSimdStatementStorageClass; 
    4379             :   class SgOmpTaskloopSimdStatementStorageClass; 
    4380             :   class SgOmpTargetUpdateStatementStorageClass; 
    4381             :   class SgOmpTargetParallelForSimdStatementStorageClass; 
    4382             :   class SgOmpTargetParallelLoopStatementStorageClass; 
    4383             :   class SgOmpTargetSimdStatementStorageClass; 
    4384             :   class SgOmpTargetTeamsStatementStorageClass; 
    4385             :   class SgOmpTargetTeamsDistributeStatementStorageClass; 
    4386             :   class SgOmpTargetTeamsDistributeSimdStatementStorageClass; 
    4387             :   class SgOmpTargetTeamsLoopStatementStorageClass; 
    4388             :   class SgOmpTargetTeamsDistributeParallelForStatementStorageClass; 
    4389             :   class SgOmpTargetTeamsDistributeParallelForSimdStatementStorageClass; 
    4390             :   class SgOmpMasterTaskloopSimdStatementStorageClass; 
    4391             :   class SgOmpParallelMasterTaskloopStatementStorageClass; 
    4392             :   class SgOmpParallelMasterTaskloopSimdStatementStorageClass; 
    4393             :   class SgOmpTeamsDistributeStatementStorageClass; 
    4394             :   class SgOmpTeamsDistributeSimdStatementStorageClass; 
    4395             :   class SgOmpTeamsDistributeParallelForStatementStorageClass; 
    4396             :   class SgOmpTeamsDistributeParallelForSimdStatementStorageClass; 
    4397             :   class SgOmpTeamsLoopStatementStorageClass; 
    4398             :   class SgOmpParallelMasterStatementStorageClass; 
    4399             :   class SgOmpMasterTaskloopStatementStorageClass; 
    4400             :   class SgOmpParallelLoopStatementStorageClass; 
    4401             :   class SgOmpUnrollStatementStorageClass; 
    4402             :   class SgOmpTileStatementStorageClass; 
    4403             :   class SgUpirSimdStatementStorageClass; 
    4404             :   class SgOmpCriticalStatementStorageClass; 
    4405             :   class SgOmpOrderedStatementStorageClass; 
    4406             :   class SgUpirLoopStatementStorageClass; 
    4407             :   class SgUpirLoopParallelStatementStorageClass; 
    4408             :   class SgUpirSyncStatementStorageClass; 
    4409             :   class SgUpirFieldBodyStatementStorageClass; 
    4410             :   class SgOmpMasterStatementStorageClass; 
    4411             :   class SgOmpSectionStatementStorageClass; 
    4412             :   class SgOmpWorkshareStatementStorageClass; 
    4413             :   class SgOmpFlushStatementStorageClass; 
    4414             :   class SgOmpAllocateStatementStorageClass; 
    4415             :   class SgOmpOrderedDependStatementStorageClass; 
    4416             :   class SgUpirBodyStatementStorageClass; 
    4417             :   class SgUpirFieldStatementStorageClass; 
    4418             :   class SgBlockDataStatementStorageClass; 
    4419             :   class SgImplicitStatementStorageClass; 
    4420             :   class SgStatementFunctionStatementStorageClass; 
    4421             :   class SgWhereStatementStorageClass; 
    4422             :   class SgNullifyStatementStorageClass; 
    4423             :   class SgEquivalenceStatementStorageClass; 
    4424             :   class SgDerivedTypeStatementStorageClass; 
    4425             :   class SgAttributeSpecificationStatementStorageClass; 
    4426             :   class SgAllocateStatementStorageClass; 
    4427             :   class SgDeallocateStatementStorageClass; 
    4428             :   class SgContainsStatementStorageClass; 
    4429             :   class SgSequenceStatementStorageClass; 
    4430             :   class SgElseWhereStatementStorageClass; 
    4431             :   class SgArithmeticIfStatementStorageClass; 
    4432             :   class SgAssignStatementStorageClass; 
    4433             :   class SgComputedGotoStatementStorageClass; 
    4434             :   class SgAssignedGotoStatementStorageClass; 
    4435             :   class SgNamelistStatementStorageClass; 
    4436             :   class SgImportStatementStorageClass; 
    4437             :   class SgAssociateStatementStorageClass; 
    4438             :   class SgFortranIncludeLineStorageClass; 
    4439             :   class SgNamespaceDeclarationStatementStorageClass; 
    4440             :   class SgNamespaceAliasDeclarationStatementStorageClass; 
    4441             :   class SgNamespaceDefinitionStatementStorageClass; 
    4442             :   class SgUsingDeclarationStatementStorageClass; 
    4443             :   class SgUsingDirectiveStatementStorageClass; 
    4444             :   class SgTemplateInstantiationDirectiveStatementStorageClass; 
    4445             :   class SgStaticAssertionDeclarationStorageClass; 
    4446             :   class SgTemplateClassDefinitionStorageClass; 
    4447             :   class SgTemplateFunctionDefinitionStorageClass; 
    4448             :   class SgClassDeclarationStorageClass; 
    4449             :   class SgClassDefinitionStorageClass; 
    4450             :   class SgFunctionDefinitionStorageClass; 
    4451             :   class SgScopeStatementStorageClass; 
    4452             :   class SgMemberFunctionDeclarationStorageClass; 
    4453             :   class SgFunctionDeclarationStorageClass; 
    4454             :   class SgIncludeDirectiveStatementStorageClass; 
    4455             :   class SgDefineDirectiveStatementStorageClass; 
    4456             :   class SgUndefDirectiveStatementStorageClass; 
    4457             :   class SgIfdefDirectiveStatementStorageClass; 
    4458             :   class SgIfndefDirectiveStatementStorageClass; 
    4459             :   class SgIfDirectiveStatementStorageClass; 
    4460             :   class SgDeadIfDirectiveStatementStorageClass; 
    4461             :   class SgElseDirectiveStatementStorageClass; 
    4462             :   class SgElseifDirectiveStatementStorageClass; 
    4463             :   class SgEndifDirectiveStatementStorageClass; 
    4464             :   class SgLineDirectiveStatementStorageClass; 
    4465             :   class SgWarningDirectiveStatementStorageClass; 
    4466             :   class SgErrorDirectiveStatementStorageClass; 
    4467             :   class SgEmptyDirectiveStatementStorageClass; 
    4468             :   class SgIncludeNextDirectiveStatementStorageClass; 
    4469             :   class SgIdentDirectiveStatementStorageClass; 
    4470             :   class SgLinemarkerDirectiveStatementStorageClass; 
    4471             :   class SgC_PreprocessorDirectiveStatementStorageClass; 
    4472             :   class SgClinkageStartStatementStorageClass; 
    4473             :   class SgClinkageEndStatementStorageClass; 
    4474             :   class SgClinkageDeclarationStatementStorageClass; 
    4475             :   class SgOmpDeclareSimdStatementStorageClass; 
    4476             :   class SgOmpBarrierStatementStorageClass; 
    4477             :   class SgOmpTaskyieldStatementStorageClass; 
    4478             :   class SgOmpRequiresStatementStorageClass; 
    4479             :   class SgOmpTaskwaitStatementStorageClass; 
    4480             :   class SgOmpThreadprivateStatementStorageClass; 
    4481             :   class SgMicrosoftAttributeDeclarationStorageClass; 
    4482             :   class SgEmptyDeclarationStorageClass; 
    4483             :   class SgDeclarationStatementStorageClass; 
    4484             :   class SgUpirBaseStatementStorageClass; 
    4485             :   class SgStatementStorageClass; 
    4486             :   class SgVarRefExpStorageClass; 
    4487             :   class SgNonrealRefExpStorageClass; 
    4488             :   class SgCompoundLiteralExpStorageClass; 
    4489             :   class SgLabelRefExpStorageClass; 
    4490             :   class SgClassNameRefExpStorageClass; 
    4491             :   class SgFunctionRefExpStorageClass; 
    4492             :   class SgMemberFunctionRefExpStorageClass; 
    4493             :   class SgTemplateFunctionRefExpStorageClass; 
    4494             :   class SgTemplateMemberFunctionRefExpStorageClass; 
    4495             :   class SgSizeOfOpStorageClass; 
    4496             :   class SgAlignOfOpStorageClass; 
    4497             :   class SgNoexceptOpStorageClass; 
    4498             :   class SgTypeExpressionStorageClass; 
    4499             :   class SgLambdaExpStorageClass; 
    4500             :   class SgUpcLocalsizeofExpressionStorageClass; 
    4501             :   class SgUpcBlocksizeofExpressionStorageClass; 
    4502             :   class SgUpcElemsizeofExpressionStorageClass; 
    4503             :   class SgVarArgStartOpStorageClass; 
    4504             :   class SgVarArgStartOneOperandOpStorageClass; 
    4505             :   class SgVarArgOpStorageClass; 
    4506             :   class SgVarArgEndOpStorageClass; 
    4507             :   class SgVarArgCopyOpStorageClass; 
    4508             :   class SgTypeIdOpStorageClass; 
    4509             :   class SgConditionalExpStorageClass; 
    4510             :   class SgNewExpStorageClass; 
    4511             :   class SgDeleteExpStorageClass; 
    4512             :   class SgThisExpStorageClass; 
    4513             :   class SgSuperExpStorageClass; 
    4514             :   class SgClassExpStorageClass; 
    4515             :   class SgRefExpStorageClass; 
    4516             :   class SgAggregateInitializerStorageClass; 
    4517             :   class SgCompoundInitializerStorageClass; 
    4518             :   class SgConstructorInitializerStorageClass; 
    4519             :   class SgAssignInitializerStorageClass; 
    4520             :   class SgBracedInitializerStorageClass; 
    4521             :   class SgExpressionRootStorageClass; 
    4522             :   class SgMinusOpStorageClass; 
    4523             :   class SgUnaryAddOpStorageClass; 
    4524             :   class SgNotOpStorageClass; 
    4525             :   class SgPointerDerefExpStorageClass; 
    4526             :   class SgAddressOfOpStorageClass; 
    4527             :   class SgMinusMinusOpStorageClass; 
    4528             :   class SgPlusPlusOpStorageClass; 
    4529             :   class SgBitComplementOpStorageClass; 
    4530             :   class SgRealPartOpStorageClass; 
    4531             :   class SgImagPartOpStorageClass; 
    4532             :   class SgConjugateOpStorageClass; 
    4533             :   class SgCastExpStorageClass; 
    4534             :   class SgThrowOpStorageClass; 
    4535             :   class SgArrowExpStorageClass; 
    4536             :   class SgDotExpStorageClass; 
    4537             :   class SgDotStarOpStorageClass; 
    4538             :   class SgArrowStarOpStorageClass; 
    4539             :   class SgEqualityOpStorageClass; 
    4540             :   class SgLessThanOpStorageClass; 
    4541             :   class SgGreaterThanOpStorageClass; 
    4542             :   class SgNotEqualOpStorageClass; 
    4543             :   class SgLessOrEqualOpStorageClass; 
    4544             :   class SgGreaterOrEqualOpStorageClass; 
    4545             :   class SgAddOpStorageClass; 
    4546             :   class SgSubtractOpStorageClass; 
    4547             :   class SgMultiplyOpStorageClass; 
    4548             :   class SgDivideOpStorageClass; 
    4549             :   class SgIntegerDivideOpStorageClass; 
    4550             :   class SgModOpStorageClass; 
    4551             :   class SgAndOpStorageClass; 
    4552             :   class SgOrOpStorageClass; 
    4553             :   class SgBitXorOpStorageClass; 
    4554             :   class SgBitAndOpStorageClass; 
    4555             :   class SgBitOrOpStorageClass; 
    4556             :   class SgBitEqvOpStorageClass; 
    4557             :   class SgCommaOpExpStorageClass; 
    4558             :   class SgLshiftOpStorageClass; 
    4559             :   class SgRshiftOpStorageClass; 
    4560             :   class SgPntrArrRefExpStorageClass; 
    4561             :   class SgScopeOpStorageClass; 
    4562             :   class SgAssignOpStorageClass; 
    4563             :   class SgPlusAssignOpStorageClass; 
    4564             :   class SgMinusAssignOpStorageClass; 
    4565             :   class SgAndAssignOpStorageClass; 
    4566             :   class SgIorAssignOpStorageClass; 
    4567             :   class SgMultAssignOpStorageClass; 
    4568             :   class SgDivAssignOpStorageClass; 
    4569             :   class SgModAssignOpStorageClass; 
    4570             :   class SgXorAssignOpStorageClass; 
    4571             :   class SgLshiftAssignOpStorageClass; 
    4572             :   class SgRshiftAssignOpStorageClass; 
    4573             :   class SgIntegerDivideAssignOpStorageClass; 
    4574             :   class SgExponentiationAssignOpStorageClass; 
    4575             :   class SgConcatenationOpStorageClass; 
    4576             :   class SgNaryComparisonOpStorageClass; 
    4577             :   class SgNaryBooleanOpStorageClass; 
    4578             :   class SgBoolValExpStorageClass; 
    4579             :   class SgStringValStorageClass; 
    4580             :   class SgShortValStorageClass; 
    4581             :   class SgCharValStorageClass; 
    4582             :   class SgUnsignedCharValStorageClass; 
    4583             :   class SgWcharValStorageClass; 
    4584             :   class SgChar16ValStorageClass; 
    4585             :   class SgChar32ValStorageClass; 
    4586             :   class SgUnsignedShortValStorageClass; 
    4587             :   class SgIntValStorageClass; 
    4588             :   class SgEnumValStorageClass; 
    4589             :   class SgUnsignedIntValStorageClass; 
    4590             :   class SgLongIntValStorageClass; 
    4591             :   class SgLongLongIntValStorageClass; 
    4592             :   class SgUnsignedLongLongIntValStorageClass; 
    4593             :   class SgUnsignedLongValStorageClass; 
    4594             :   class SgFloatValStorageClass; 
    4595             :   class SgDoubleValStorageClass; 
    4596             :   class SgLongDoubleValStorageClass; 
    4597             :   class SgFloat80ValStorageClass; 
    4598             :   class SgFloat128ValStorageClass; 
    4599             :   class SgNullptrValExpStorageClass; 
    4600             :   class SgVoidValStorageClass; 
    4601             :   class SgFunctionParameterRefExpStorageClass; 
    4602             :   class SgTemplateParameterValStorageClass; 
    4603             :   class SgUpcThreadsStorageClass; 
    4604             :   class SgUpcMythreadStorageClass; 
    4605             :   class SgComplexValStorageClass; 
    4606             :   class SgNullExpressionStorageClass; 
    4607             :   class SgVariantExpressionStorageClass; 
    4608             :   class SgStatementExpressionStorageClass; 
    4609             :   class SgAsmOpStorageClass; 
    4610             :   class SgCudaKernelExecConfigStorageClass; 
    4611             :   class SgCudaKernelCallExpStorageClass; 
    4612             :   class SgLambdaRefExpStorageClass; 
    4613             :   class SgTupleExpStorageClass; 
    4614             :   class SgListExpStorageClass; 
    4615             :   class SgDictionaryExpStorageClass; 
    4616             :   class SgKeyDatumPairStorageClass; 
    4617             :   class SgComprehensionStorageClass; 
    4618             :   class SgListComprehensionStorageClass; 
    4619             :   class SgSetComprehensionStorageClass; 
    4620             :   class SgDictionaryComprehensionStorageClass; 
    4621             :   class SgMembershipOpStorageClass; 
    4622             :   class SgNonMembershipOpStorageClass; 
    4623             :   class SgIsOpStorageClass; 
    4624             :   class SgIsNotOpStorageClass; 
    4625             :   class SgStringConversionStorageClass; 
    4626             :   class SgYieldExpressionStorageClass; 
    4627             :   class SgFoldExpressionStorageClass; 
    4628             :   class SgChooseExpressionStorageClass; 
    4629             :   class SgAwaitExpressionStorageClass; 
    4630             :   class SgSpaceshipOpStorageClass; 
    4631             :   class SgSubscriptExpressionStorageClass; 
    4632             :   class SgColonShapeExpStorageClass; 
    4633             :   class SgAsteriskShapeExpStorageClass; 
    4634             :   class SgIOItemExpressionStorageClass; 
    4635             :   class SgImpliedDoStorageClass; 
    4636             :   class SgExponentiationOpStorageClass; 
    4637             :   class SgUnknownArrayOrFunctionReferenceStorageClass; 
    4638             :   class SgActualArgumentExpressionStorageClass; 
    4639             :   class SgUserDefinedBinaryOpStorageClass; 
    4640             :   class SgPointerAssignOpStorageClass; 
    4641             :   class SgCAFCoExpressionStorageClass; 
    4642             :   class SgDesignatedInitializerStorageClass; 
    4643             :   class SgMatrixExpStorageClass; 
    4644             :   class SgRangeExpStorageClass; 
    4645             :   class SgMagicColonExpStorageClass; 
    4646             :   class SgElementwiseMultiplyOpStorageClass; 
    4647             :   class SgPowerOpStorageClass; 
    4648             :   class SgElementwisePowerOpStorageClass; 
    4649             :   class SgElementwiseDivideOpStorageClass; 
    4650             :   class SgLeftDivideOpStorageClass; 
    4651             :   class SgElementwiseLeftDivideOpStorageClass; 
    4652             :   class SgElementwiseAddOpStorageClass; 
    4653             :   class SgElementwiseSubtractOpStorageClass; 
    4654             :   class SgMatrixTransposeOpStorageClass; 
    4655             :   class SgElementwiseOpStorageClass; 
    4656             :   class SgInitializerStorageClass; 
    4657             :   class SgSIMDLoadStorageClass; 
    4658             :   class SgSIMDBroadcastStorageClass; 
    4659             :   class SgSIMDStoreStorageClass; 
    4660             :   class SgSIMDPartialStoreStorageClass; 
    4661             :   class SgSIMDScalarStoreStorageClass; 
    4662             :   class SgSIMDGatherStorageClass; 
    4663             :   class SgSIMDExplicitGatherStorageClass; 
    4664             :   class SgSIMDScatterStorageClass; 
    4665             :   class SgSIMDAddOpStorageClass; 
    4666             :   class SgSIMDSubOpStorageClass; 
    4667             :   class SgSIMDMulOpStorageClass; 
    4668             :   class SgSIMDDivOpStorageClass; 
    4669             :   class SgSIMDFmaOpStorageClass; 
    4670             :   class SgSIMDBinaryOpStorageClass; 
    4671             :   class SgUserDefinedUnaryOpStorageClass; 
    4672             :   class SgPseudoDestructorRefExpStorageClass; 
    4673             :   class SgUnaryOpStorageClass; 
    4674             :   class SgCompoundAssignOpStorageClass; 
    4675             :   class SgBinaryOpStorageClass; 
    4676             :   class SgNaryOpStorageClass; 
    4677             :   class SgValueExpStorageClass; 
    4678             :   class SgExprListExpStorageClass; 
    4679             :   class SgFunctionCallExpStorageClass; 
    4680             :   class SgCallExpressionStorageClass; 
    4681             :   class SgTypeTraitBuiltinOperatorStorageClass; 
    4682             :   class SgExpressionStorageClass; 
    4683             :   class SgTemplateVariableSymbolStorageClass; 
    4684             :   class SgVariableSymbolStorageClass; 
    4685             :   class SgFunctionTypeSymbolStorageClass; 
    4686             :   class SgTemplateClassSymbolStorageClass; 
    4687             :   class SgClassSymbolStorageClass; 
    4688             :   class SgTemplateSymbolStorageClass; 
    4689             :   class SgEnumSymbolStorageClass; 
    4690             :   class SgEnumFieldSymbolStorageClass; 
    4691             :   class SgTemplateTypedefSymbolStorageClass; 
    4692             :   class SgTypedefSymbolStorageClass; 
    4693             :   class SgTemplateFunctionSymbolStorageClass; 
    4694             :   class SgTemplateMemberFunctionSymbolStorageClass; 
    4695             :   class SgLabelSymbolStorageClass; 
    4696             :   class SgDefaultSymbolStorageClass; 
    4697             :   class SgNamespaceSymbolStorageClass; 
    4698             :   class SgIntrinsicSymbolStorageClass; 
    4699             :   class SgModuleSymbolStorageClass; 
    4700             :   class SgInterfaceSymbolStorageClass; 
    4701             :   class SgCommonSymbolStorageClass; 
    4702             :   class SgRenameSymbolStorageClass; 
    4703             :   class SgMemberFunctionSymbolStorageClass; 
    4704             :   class SgFunctionSymbolStorageClass; 
    4705             :   class SgAliasSymbolStorageClass; 
    4706             :   class SgNonrealSymbolStorageClass; 
    4707             :   class SgSymbolStorageClass; 
    4708             :   class SgCommonBlockObjectStorageClass; 
    4709             :   class SgInitializedNameStorageClass; 
    4710             :   class SgLambdaCaptureStorageClass; 
    4711             :   class SgLambdaCaptureListStorageClass; 
    4712             :   class SgOmpOrderedClauseStorageClass; 
    4713             :   class SgOmpNowaitClauseStorageClass; 
    4714             :   class SgOmpNogroupClauseStorageClass; 
    4715             :   class SgOmpReadClauseStorageClass; 
    4716             :   class SgOmpThreadsClauseStorageClass; 
    4717             :   class SgOmpSimdClauseStorageClass; 
    4718             :   class SgOmpReverseOffloadClauseStorageClass; 
    4719             :   class SgOmpExtImplementationDefinedRequirementClauseStorageClass; 
    4720             :   class SgOmpUnifiedAddressClauseStorageClass; 
    4721             :   class SgOmpUnifiedSharedMemoryClauseStorageClass; 
    4722             :   class SgOmpDynamicAllocatorsClauseStorageClass; 
    4723             :   class SgOmpAtomicDefaultMemOrderClauseStorageClass; 
    4724             :   class SgOmpWriteClauseStorageClass; 
    4725             :   class SgOmpUpdateClauseStorageClass; 
    4726             :   class SgOmpDepobjUpdateClauseStorageClass; 
    4727             :   class SgOmpDestroyClauseStorageClass; 
    4728             :   class SgOmpCaptureClauseStorageClass; 
    4729             :   class SgOmpSeqCstClauseStorageClass; 
    4730             :   class SgOmpAcqRelClauseStorageClass; 
    4731             :   class SgOmpReleaseClauseStorageClass; 
    4732             :   class SgOmpAcquireClauseStorageClass; 
    4733             :   class SgOmpRelaxedClauseStorageClass; 
    4734             :   class SgOmpParallelClauseStorageClass; 
    4735             :   class SgOmpSectionsClauseStorageClass; 
    4736             :   class SgOmpForClauseStorageClass; 
    4737             :   class SgOmpTaskgroupClauseStorageClass; 
    4738             :   class SgOmpBeginClauseStorageClass; 
    4739             :   class SgOmpEndClauseStorageClass; 
    4740             :   class SgOmpUntiedClauseStorageClass; 
    4741             :   class SgOmpMergeableClauseStorageClass; 
    4742             :   class SgOmpDefaultClauseStorageClass; 
    4743             :   class SgOmpAtomicClauseStorageClass; 
    4744             :   class SgOmpProcBindClauseStorageClass; 
    4745             :   class SgOmpOrderClauseStorageClass; 
    4746             :   class SgOmpBindClauseStorageClass; 
    4747             :   class SgOmpInbranchClauseStorageClass; 
    4748             :   class SgOmpNotinbranchClauseStorageClass; 
    4749             :   class SgOmpCollapseClauseStorageClass; 
    4750             :   class SgOmpIfClauseStorageClass; 
    4751             :   class SgOmpFinalClauseStorageClass; 
    4752             :   class SgOmpPriorityClauseStorageClass; 
    4753             :   class SgUpirNumUnitsFieldStorageClass; 
    4754             :   class SgOmpNumTeamsClauseStorageClass; 
    4755             :   class SgOmpGrainsizeClauseStorageClass; 
    4756             :   class SgOmpDetachClauseStorageClass; 
    4757             :   class SgOmpNumTasksClauseStorageClass; 
    4758             :   class SgOmpHintClauseStorageClass; 
    4759             :   class SgOmpThreadLimitClauseStorageClass; 
    4760             :   class SgOmpNontemporalClauseStorageClass; 
    4761             :   class SgOmpInclusiveClauseStorageClass; 
    4762             :   class SgOmpExclusiveClauseStorageClass; 
    4763             :   class SgOmpIsDevicePtrClauseStorageClass; 
    4764             :   class SgOmpUseDevicePtrClauseStorageClass; 
    4765             :   class SgOmpUseDeviceAddrClauseStorageClass; 
    4766             :   class SgOmpDeviceClauseStorageClass; 
    4767             :   class SgOmpSafelenClauseStorageClass; 
    4768             :   class SgOmpSimdlenClauseStorageClass; 
    4769             :   class SgOmpPartialClauseStorageClass; 
    4770             :   class SgOmpFullClauseStorageClass; 
    4771             :   class SgOmpSizesClauseStorageClass; 
    4772             :   class SgUpirBranchFieldStorageClass; 
    4773             :   class SgUpirNestedLevelFieldStorageClass; 
    4774             :   class SgUpirNestedParentFieldStorageClass; 
    4775             :   class SgUpirNestedChildFieldStorageClass; 
    4776             :   class SgUpirSyncFieldStorageClass; 
    4777             :   class SgUpirDataFieldStorageClass; 
    4778             :   class SgUpirTargetFieldStorageClass; 
    4779             :   class SgUpirDataItemFieldStorageClass; 
    4780             :   class SgOmpExpressionClauseStorageClass; 
    4781             :   class SgOmpCopyprivateClauseStorageClass; 
    4782             :   class SgOmpPrivateClauseStorageClass; 
    4783             :   class SgOmpFirstprivateClauseStorageClass; 
    4784             :   class SgOmpSharedClauseStorageClass; 
    4785             :   class SgOmpCopyinClauseStorageClass; 
    4786             :   class SgOmpLastprivateClauseStorageClass; 
    4787             :   class SgOmpReductionClauseStorageClass; 
    4788             :   class SgOmpInReductionClauseStorageClass; 
    4789             :   class SgOmpTaskReductionClauseStorageClass; 
    4790             :   class SgOmpAllocateClauseStorageClass; 
    4791             :   class SgOmpDependClauseStorageClass; 
    4792             :   class SgOmpToClauseStorageClass; 
    4793             :   class SgOmpUsesAllocatorsClauseStorageClass; 
    4794             :   class SgOmpFromClauseStorageClass; 
    4795             :   class SgOmpAffinityClauseStorageClass; 
    4796             :   class SgOmpMapClauseStorageClass; 
    4797             :   class SgOmpLinearClauseStorageClass; 
    4798             :   class SgOmpUniformClauseStorageClass; 
    4799             :   class SgOmpAlignedClauseStorageClass; 
    4800             :   class SgOmpVariablesClauseStorageClass; 
    4801             :   class SgOmpScheduleClauseStorageClass; 
    4802             :   class SgOmpWhenClauseStorageClass; 
    4803             :   class SgOmpDistScheduleClauseStorageClass; 
    4804             :   class SgOmpDefaultmapClauseStorageClass; 
    4805             :   class SgOmpAllocatorClauseStorageClass; 
    4806             :   class SgOmpUsesAllocatorsDefinationStorageClass; 
    4807             :   class SgOmpClauseStorageClass; 
    4808             :   class SgRenamePairStorageClass; 
    4809             :   class SgInterfaceBodyStorageClass; 
    4810             :   class SgHeaderFileBodyStorageClass; 
    4811             :   class SgLocatedNodeSupportStorageClass; 
    4812             :   class SgTokenStorageClass; 
    4813             :   class SgLocatedNodeStorageClass; 
    4814             :   class SgNodeStorageClass; 
    4815             : 
    4816             :   template <class A>
    4817             :   class EasyStorage;
    4818             :   class AstSpecificDataManagingClass;
    4819             : 
    4820             : // ***** end of storage classes declarations **********
    4821             : 
    4822             : 
    4823             : 
    4824             : ROSE_DLL_API std::ostream& operator<<(std::ostream&, const SgName&);
    4825             : 
    4826             : std::ostream& operator<<(std::ostream&, const std::vector<bool>&);
    4827             : 
    4828             : std::ostream& operator<<(std::ostream&, const std::set<int>&);
    4829             : 
    4830             : std::ostream& operator<<(std::ostream&, const std::map<SgNode*,int>&);
    4831             : 
    4832             : std::ostream& operator<<(std::ostream&, const std::map<SgNode*,std::string>&);
    4833             : 
    4834             : std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgDataStatementObject*>&);
    4835             : 
    4836             : std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgDataStatementValue*>&);
    4837             : 
    4838             : std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgCommonBlockObject*>&);
    4839             : 
    4840             : std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgDimensionObject*>&);
    4841             : 
    4842             : std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgLabelSymbol*>&);
    4843             : 
    4844             : std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgFormatItem*>&);
    4845             : 
    4846             : typedef enum 
    4847             : {preorder = 1, postorder = 2, preandpostorder = preorder | postorder} t_traverseOrder;
    4848             : 
    4849             : 
    4850             : #if ROSE_USING_SMALL_GENERATED_HEADER_FILES
    4851             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNode.h"
    4852             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSupport.h"
    4853             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgModifier.h"
    4854             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgModifierNodes.h"
    4855             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgConstVolatileModifier.h"
    4856             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStorageModifier.h"
    4857             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAccessModifier.h"
    4858             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionModifier.h"
    4859             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUPC_AccessModifier.h"
    4860             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSpecialFunctionModifier.h"
    4861             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElaboratedTypeModifier.h"
    4862             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLinkageModifier.h"
    4863             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBaseClassModifier.h"
    4864             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStructureModifier.h"
    4865             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeModifier.h"
    4866             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDeclarationModifier.h"
    4867             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOpenclAccessModeModifier.h"
    4868             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgName.h"
    4869             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSymbolTable.h"
    4870             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAttribute.h"
    4871             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPragma.h"
    4872             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBitAttribute.h"
    4873             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFuncDecl_attr.h"
    4874             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClassDecl_attr.h"
    4875             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/Sg_File_Info.h"
    4876             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFile.h"
    4877             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSourceFile.h"
    4878             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnknownFile.h"
    4879             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgProject.h"
    4880             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOptions.h"
    4881             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnparse_Info.h"
    4882             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBaseClass.h"
    4883             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExpBaseClass.h"
    4884             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNonrealBaseClass.h"
    4885             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypedefSeq.h"
    4886             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateParameter.h"
    4887             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateArgument.h"
    4888             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDirectory.h"
    4889             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFileList.h"
    4890             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDirectoryList.h"
    4891             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionParameterTypeList.h"
    4892             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgQualifiedName.h"
    4893             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateArgumentList.h"
    4894             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateParameterList.h"
    4895             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGraph.h"
    4896             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIncidenceDirectedGraph.h"
    4897             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBidirectionalGraph.h"
    4898             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStringKeyedBidirectionalGraph.h"
    4899             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIntKeyedBidirectionalGraph.h"
    4900             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIncidenceUndirectedGraph.h"
    4901             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGraphNode.h"
    4902             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGraphEdge.h"
    4903             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDirectedGraphEdge.h"
    4904             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUndirectedGraphEdge.h"
    4905             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGraphNodeList.h"
    4906             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGraphEdgeList.h"
    4907             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeTable.h"
    4908             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNameGroup.h"
    4909             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDimensionObject.h"
    4910             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFormatItem.h"
    4911             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFormatItemList.h"
    4912             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDataStatementGroup.h"
    4913             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDataStatementObject.h"
    4914             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIncludeFile.h"
    4915             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDataStatementValue.h"
    4916             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgHeaderFileReport.h"
    4917             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgType.h"
    4918             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeUnknown.h"
    4919             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeChar.h"
    4920             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeSignedChar.h"
    4921             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeUnsignedChar.h"
    4922             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeShort.h"
    4923             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeSignedShort.h"
    4924             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeUnsignedShort.h"
    4925             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeInt.h"
    4926             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeSignedInt.h"
    4927             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeUnsignedInt.h"
    4928             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeLong.h"
    4929             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeSignedLong.h"
    4930             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeUnsignedLong.h"
    4931             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeVoid.h"
    4932             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeGlobalVoid.h"
    4933             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeWchar.h"
    4934             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeFloat.h"
    4935             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeDouble.h"
    4936             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeLongLong.h"
    4937             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeSignedLongLong.h"
    4938             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeUnsignedLongLong.h"
    4939             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeSigned128bitInteger.h"
    4940             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeUnsigned128bitInteger.h"
    4941             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeFloat80.h"
    4942             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeLongDouble.h"
    4943             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeString.h"
    4944             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeBool.h"
    4945             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPointerType.h"
    4946             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPointerMemberType.h"
    4947             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgReferenceType.h"
    4948             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNamedType.h"
    4949             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClassType.h"
    4950             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEnumType.h"
    4951             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypedefType.h"
    4952             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNonrealType.h"
    4953             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgModifierType.h"
    4954             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionType.h"
    4955             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMemberFunctionType.h"
    4956             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPartialFunctionType.h"
    4957             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPartialFunctionModifierType.h"
    4958             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgArrayType.h"
    4959             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeEllipse.h"
    4960             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateType.h"
    4961             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgQualifiedNameType.h"
    4962             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeComplex.h"
    4963             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeImaginary.h"
    4964             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeDefault.h"
    4965             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeCAFTeam.h"
    4966             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeCrayPointer.h"
    4967             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeLabel.h"
    4968             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRvalueReferenceType.h"
    4969             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeNullptr.h"
    4970             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDeclType.h"
    4971             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeOfType.h"
    4972             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeMatrix.h"
    4973             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeTuple.h"
    4974             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeChar16.h"
    4975             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeChar32.h"
    4976             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeFloat128.h"
    4977             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeFixed.h"
    4978             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAutoType.h"
    4979             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLocatedNode.h"
    4980             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgToken.h"
    4981             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLocatedNodeSupport.h"
    4982             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCommonBlockObject.h"
    4983             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgInitializedName.h"
    4984             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgInterfaceBody.h"
    4985             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgHeaderFileBody.h"
    4986             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRenamePair.h"
    4987             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpClause.h"
    4988             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpNowaitClause.h"
    4989             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpReadClause.h"
    4990             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpThreadsClause.h"
    4991             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSimdClause.h"
    4992             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpWriteClause.h"
    4993             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUpdateClause.h"
    4994             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDepobjUpdateClause.h"
    4995             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDestroyClause.h"
    4996             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpCaptureClause.h"
    4997             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpBeginClause.h"
    4998             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpEndClause.h"
    4999             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUntiedClause.h"
    5000             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSeqCstClause.h"
    5001             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAcqRelClause.h"
    5002             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpReleaseClause.h"
    5003             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAcquireClause.h"
    5004             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpRelaxedClause.h"
    5005             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpReverseOffloadClause.h"
    5006             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUnifiedAddressClause.h"
    5007             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUnifiedSharedMemoryClause.h"
    5008             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDynamicAllocatorsClause.h"
    5009             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpParallelClause.h"
    5010             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSectionsClause.h"
    5011             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpForClause.h"
    5012             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskgroupClause.h"
    5013             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpNogroupClause.h"
    5014             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDefaultClause.h"
    5015             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAllocatorClause.h"
    5016             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAtomicClause.h"
    5017             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpProcBindClause.h"
    5018             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpBindClause.h"
    5019             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpOrderClause.h"
    5020             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDistScheduleClause.h"
    5021             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpExpressionClause.h"
    5022             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpOrderedClause.h"
    5023             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpCollapseClause.h"
    5024             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpIfClause.h"
    5025             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirNumUnitsField.h"
    5026             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpNumTeamsClause.h"
    5027             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpThreadLimitClause.h"
    5028             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDeviceClause.h"
    5029             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpHintClause.h"
    5030             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpGrainsizeClause.h"
    5031             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpNumTasksClause.h"
    5032             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDetachClause.h"
    5033             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSafelenClause.h"
    5034             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSimdlenClause.h"
    5035             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpFinalClause.h"
    5036             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpPriorityClause.h"
    5037             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpPartialClause.h"
    5038             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSizesClause.h"
    5039             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpInbranchClause.h"
    5040             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpNotinbranchClause.h"
    5041             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDefaultmapClause.h"
    5042             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAtomicDefaultMemOrderClause.h"
    5043             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpExtImplementationDefinedRequirementClause.h"
    5044             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUsesAllocatorsDefination.h"
    5045             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpVariablesClause.h"
    5046             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpCopyprivateClause.h"
    5047             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpPrivateClause.h"
    5048             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpFirstprivateClause.h"
    5049             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpNontemporalClause.h"
    5050             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpInclusiveClause.h"
    5051             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpExclusiveClause.h"
    5052             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpIsDevicePtrClause.h"
    5053             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUseDevicePtrClause.h"
    5054             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUseDeviceAddrClause.h"
    5055             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSharedClause.h"
    5056             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpCopyinClause.h"
    5057             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpLastprivateClause.h"
    5058             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpReductionClause.h"
    5059             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpInReductionClause.h"
    5060             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskReductionClause.h"
    5061             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpMapClause.h"
    5062             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAllocateClause.h"
    5063             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUniformClause.h"
    5064             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAlignedClause.h"
    5065             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpLinearClause.h"
    5066             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDependClause.h"
    5067             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAffinityClause.h"
    5068             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpToClause.h"
    5069             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpFromClause.h"
    5070             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpScheduleClause.h"
    5071             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpMergeableClause.h"
    5072             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpWhenClause.h"
    5073             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUsesAllocatorsClause.h"
    5074             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpFullClause.h"
    5075             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirBranchField.h"
    5076             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirNestedLevelField.h"
    5077             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirNestedParentField.h"
    5078             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirNestedChildField.h"
    5079             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirSyncField.h"
    5080             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirDataField.h"
    5081             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirTargetField.h"
    5082             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirDataItemField.h"
    5083             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLambdaCapture.h"
    5084             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLambdaCaptureList.h"
    5085             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStatement.h"
    5086             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgScopeStatement.h"
    5087             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGlobal.h"
    5088             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBasicBlock.h"
    5089             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIfStmt.h"
    5090             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgForStatement.h"
    5091             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionDefinition.h"
    5092             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateFunctionDefinition.h"
    5093             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClassDefinition.h"
    5094             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateInstantiationDefn.h"
    5095             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateClassDefinition.h"
    5096             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgWhileStmt.h"
    5097             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDoWhileStmt.h"
    5098             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSwitchStatement.h"
    5099             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCatchOptionStmt.h"
    5100             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNamespaceDefinitionStatement.h"
    5101             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBlockDataStatement.h"
    5102             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAssociateStatement.h"
    5103             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFortranDo.h"
    5104             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFortranNonblockedDo.h"
    5105             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgForAllStatement.h"
    5106             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcForAllStatement.h"
    5107             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCAFWithTeamStatement.h"
    5108             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionParameterScope.h"
    5109             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDeclarationScope.h"
    5110             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRangeBasedForStatement.h"
    5111             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionTypeTable.h"
    5112             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDeclarationStatement.h"
    5113             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionParameterList.h"
    5114             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVariableDeclaration.h"
    5115             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateVariableDeclaration.h"
    5116             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVariableDefinition.h"
    5117             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClinkageDeclarationStatement.h"
    5118             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClinkageStartStatement.h"
    5119             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClinkageEndStatement.h"
    5120             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEnumDeclaration.h"
    5121             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAsmStmt.h"
    5122             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAttributeSpecificationStatement.h"
    5123             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFormatStatement.h"
    5124             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateDeclaration.h"
    5125             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateInstantiationDirectiveStatement.h"
    5126             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUseStatement.h"
    5127             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgParameterStatement.h"
    5128             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNamespaceDeclarationStatement.h"
    5129             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEquivalenceStatement.h"
    5130             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgInterfaceStatement.h"
    5131             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNamespaceAliasDeclarationStatement.h"
    5132             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCommonBlock.h"
    5133             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypedefDeclaration.h"
    5134             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateTypedefDeclaration.h"
    5135             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateInstantiationTypedefDeclaration.h"
    5136             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStatementFunctionStatement.h"
    5137             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCtorInitializerList.h"
    5138             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPragmaDeclaration.h"
    5139             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUsingDirectiveStatement.h"
    5140             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClassDeclaration.h"
    5141             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateClassDeclaration.h"
    5142             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateInstantiationDecl.h"
    5143             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDerivedTypeStatement.h"
    5144             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgModuleStatement.h"
    5145             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgImplicitStatement.h"
    5146             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUsingDeclarationStatement.h"
    5147             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNamelistStatement.h"
    5148             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgImportStatement.h"
    5149             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionDeclaration.h"
    5150             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateFunctionDeclaration.h"
    5151             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMemberFunctionDeclaration.h"
    5152             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateMemberFunctionDeclaration.h"
    5153             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateInstantiationMemberFunctionDecl.h"
    5154             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateInstantiationFunctionDecl.h"
    5155             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgProgramHeaderStatement.h"
    5156             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgProcedureHeaderStatement.h"
    5157             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEntryStatement.h"
    5158             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgContainsStatement.h"
    5159             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgC_PreprocessorDirectiveStatement.h"
    5160             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIncludeDirectiveStatement.h"
    5161             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDefineDirectiveStatement.h"
    5162             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUndefDirectiveStatement.h"
    5163             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIfdefDirectiveStatement.h"
    5164             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIfndefDirectiveStatement.h"
    5165             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIfDirectiveStatement.h"
    5166             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDeadIfDirectiveStatement.h"
    5167             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElseDirectiveStatement.h"
    5168             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElseifDirectiveStatement.h"
    5169             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEndifDirectiveStatement.h"
    5170             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLineDirectiveStatement.h"
    5171             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgWarningDirectiveStatement.h"
    5172             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgErrorDirectiveStatement.h"
    5173             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEmptyDirectiveStatement.h"
    5174             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIncludeNextDirectiveStatement.h"
    5175             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIdentDirectiveStatement.h"
    5176             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLinemarkerDirectiveStatement.h"
    5177             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpThreadprivateStatement.h"
    5178             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpRequiresStatement.h"
    5179             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFortranIncludeLine.h"
    5180             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskwaitStatement.h"
    5181             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStmtDeclarationStatement.h"
    5182             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStaticAssertionDeclaration.h"
    5183             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDeclareSimdStatement.h"
    5184             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMicrosoftAttributeDeclaration.h"
    5185             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNonrealDecl.h"
    5186             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEmptyDeclaration.h"
    5187             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExprStatement.h"
    5188             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLabelStatement.h"
    5189             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCaseOptionStmt.h"
    5190             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTryStmt.h"
    5191             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDefaultOptionStmt.h"
    5192             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBreakStmt.h"
    5193             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgContinueStmt.h"
    5194             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgReturnStmt.h"
    5195             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGotoStatement.h"
    5196             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSpawnStmt.h"
    5197             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNullStatement.h"
    5198             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVariantStatement.h"
    5199             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgForInitStatement.h"
    5200             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCatchStatementSeq.h"
    5201             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgProcessControlStatement.h"
    5202             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIOStatement.h"
    5203             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPrintStatement.h"
    5204             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgReadStatement.h"
    5205             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgWriteStatement.h"
    5206             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOpenStatement.h"
    5207             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCloseStatement.h"
    5208             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgInquireStatement.h"
    5209             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFlushStatement.h"
    5210             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBackspaceStatement.h"
    5211             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRewindStatement.h"
    5212             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEndfileStatement.h"
    5213             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgWaitStatement.h"
    5214             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgWhereStatement.h"
    5215             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElseWhereStatement.h"
    5216             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNullifyStatement.h"
    5217             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgArithmeticIfStatement.h"
    5218             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAssignStatement.h"
    5219             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgComputedGotoStatement.h"
    5220             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAssignedGotoStatement.h"
    5221             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAllocateStatement.h"
    5222             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDeallocateStatement.h"
    5223             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcNotifyStatement.h"
    5224             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcWaitStatement.h"
    5225             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcBarrierStatement.h"
    5226             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcFenceStatement.h"
    5227             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirBaseStatement.h"
    5228             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskyieldStatement.h"
    5229             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpBarrierStatement.h"
    5230             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirBodyStatement.h"
    5231             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpMasterStatement.h"
    5232             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSectionStatement.h"
    5233             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpWorkshareStatement.h"
    5234             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirFieldBodyStatement.h"
    5235             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirSpmdStatement.h"
    5236             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTeamsStatement.h"
    5237             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSingleStatement.h"
    5238             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAtomicStatement.h"
    5239             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpScanStatement.h"
    5240             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpMetadirectiveStatement.h"
    5241             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpLoopStatement.h"
    5242             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpOrderedStatement.h"
    5243             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskgroupStatement.h"
    5244             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskloopStatement.h"
    5245             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDepobjStatement.h"
    5246             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetEnterDataStatement.h"
    5247             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetExitDataStatement.h"
    5248             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpParallelMasterStatement.h"
    5249             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpMasterTaskloopStatement.h"
    5250             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskStatement.h"
    5251             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDoStatement.h"
    5252             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpSectionsStatement.h"
    5253             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirTaskStatement.h"
    5254             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetDataStatement.h"
    5255             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetParallelForStatement.h"
    5256             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpParallelLoopStatement.h"
    5257             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetParallelStatement.h"
    5258             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetParallelForSimdStatement.h"
    5259             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetParallelLoopStatement.h"
    5260             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetSimdStatement.h"
    5261             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetTeamsStatement.h"
    5262             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetTeamsDistributeStatement.h"
    5263             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetTeamsDistributeSimdStatement.h"
    5264             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetTeamsLoopStatement.h"
    5265             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetTeamsDistributeParallelForStatement.h"
    5266             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetTeamsDistributeParallelForSimdStatement.h"
    5267             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDistributeSimdStatement.h"
    5268             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDistributeParallelForStatement.h"
    5269             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDistributeParallelForSimdStatement.h"
    5270             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTaskloopSimdStatement.h"
    5271             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpMasterTaskloopSimdStatement.h"
    5272             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpParallelMasterTaskloopStatement.h"
    5273             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpParallelMasterTaskloopSimdStatement.h"
    5274             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTeamsDistributeStatement.h"
    5275             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTeamsDistributeSimdStatement.h"
    5276             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTeamsDistributeParallelForStatement.h"
    5277             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTeamsDistributeParallelForSimdStatement.h"
    5278             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTeamsLoopStatement.h"
    5279             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpForSimdStatement.h"
    5280             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpCriticalStatement.h"
    5281             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDistributeStatement.h"
    5282             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpUnrollStatement.h"
    5283             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTileStatement.h"
    5284             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirLoopStatement.h"
    5285             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirFieldStatement.h"
    5286             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpCancelStatement.h"
    5287             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpCancellationPointStatement.h"
    5288             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpTargetUpdateStatement.h"
    5289             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpFlushStatement.h"
    5290             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpAllocateStatement.h"
    5291             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpOrderedDependStatement.h"
    5292             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirSyncStatement.h"
    5293             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirLoopParallelStatement.h"
    5294             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirWorksharingStatement.h"
    5295             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpirSimdStatement.h"
    5296             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOmpDeclareMapperStatement.h"
    5297             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSequenceStatement.h"
    5298             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgWithStatement.h"
    5299             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPassStatement.h"
    5300             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAssertStmt.h"
    5301             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExecStatement.h"
    5302             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgImageControlStatement.h"
    5303             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSyncAllStatement.h"
    5304             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSyncImagesStatement.h"
    5305             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSyncMemoryStatement.h"
    5306             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSyncTeamStatement.h"
    5307             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLockStatement.h"
    5308             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnlockStatement.h"
    5309             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExpression.h"
    5310             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnaryOp.h"
    5311             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExpressionRoot.h"
    5312             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMinusOp.h"
    5313             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnaryAddOp.h"
    5314             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNotOp.h"
    5315             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPointerDerefExp.h"
    5316             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAddressOfOp.h"
    5317             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMinusMinusOp.h"
    5318             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPlusPlusOp.h"
    5319             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBitComplementOp.h"
    5320             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCastExp.h"
    5321             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgThrowOp.h"
    5322             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRealPartOp.h"
    5323             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgImagPartOp.h"
    5324             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgConjugateOp.h"
    5325             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUserDefinedUnaryOp.h"
    5326             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMatrixTransposeOp.h"
    5327             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBinaryOp.h"
    5328             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgArrowExp.h"
    5329             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDotExp.h"
    5330             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDotStarOp.h"
    5331             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgArrowStarOp.h"
    5332             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEqualityOp.h"
    5333             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLessThanOp.h"
    5334             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGreaterThanOp.h"
    5335             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNotEqualOp.h"
    5336             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLessOrEqualOp.h"
    5337             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgGreaterOrEqualOp.h"
    5338             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAddOp.h"
    5339             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSubtractOp.h"
    5340             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMultiplyOp.h"
    5341             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDivideOp.h"
    5342             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIntegerDivideOp.h"
    5343             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgModOp.h"
    5344             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAndOp.h"
    5345             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgOrOp.h"
    5346             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBitXorOp.h"
    5347             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBitAndOp.h"
    5348             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBitOrOp.h"
    5349             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBitEqvOp.h"
    5350             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCommaOpExp.h"
    5351             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLshiftOp.h"
    5352             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRshiftOp.h"
    5353             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPntrArrRefExp.h"
    5354             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgScopeOp.h"
    5355             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAssignOp.h"
    5356             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExponentiationOp.h"
    5357             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgConcatenationOp.h"
    5358             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPointerAssignOp.h"
    5359             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUserDefinedBinaryOp.h"
    5360             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCompoundAssignOp.h"
    5361             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPlusAssignOp.h"
    5362             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMinusAssignOp.h"
    5363             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAndAssignOp.h"
    5364             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIorAssignOp.h"
    5365             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMultAssignOp.h"
    5366             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDivAssignOp.h"
    5367             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgModAssignOp.h"
    5368             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgXorAssignOp.h"
    5369             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLshiftAssignOp.h"
    5370             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRshiftAssignOp.h"
    5371             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIntegerDivideAssignOp.h"
    5372             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExponentiationAssignOp.h"
    5373             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMembershipOp.h"
    5374             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSpaceshipOp.h"
    5375             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNonMembershipOp.h"
    5376             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIsOp.h"
    5377             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIsNotOp.h"
    5378             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElementwiseOp.h"
    5379             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElementwiseMultiplyOp.h"
    5380             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElementwisePowerOp.h"
    5381             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElementwiseLeftDivideOp.h"
    5382             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElementwiseDivideOp.h"
    5383             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElementwiseAddOp.h"
    5384             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgElementwiseSubtractOp.h"
    5385             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPowerOp.h"
    5386             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLeftDivideOp.h"
    5387             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDBinaryOp.h"
    5388             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDAddOp.h"
    5389             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDSubOp.h"
    5390             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDMulOp.h"
    5391             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDDivOp.h"
    5392             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDFmaOp.h"
    5393             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDLoad.h"
    5394             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDBroadcast.h"
    5395             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDStore.h"
    5396             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDPartialStore.h"
    5397             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDScalarStore.h"
    5398             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDGather.h"
    5399             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDExplicitGather.h"
    5400             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSIMDScatter.h"
    5401             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgExprListExp.h"
    5402             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgListExp.h"
    5403             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTupleExp.h"
    5404             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMatrixExp.h"
    5405             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVarRefExp.h"
    5406             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClassNameRefExp.h"
    5407             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionRefExp.h"
    5408             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMemberFunctionRefExp.h"
    5409             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgValueExp.h"
    5410             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBoolValExp.h"
    5411             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStringVal.h"
    5412             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgShortVal.h"
    5413             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCharVal.h"
    5414             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnsignedCharVal.h"
    5415             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgWcharVal.h"
    5416             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnsignedShortVal.h"
    5417             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIntVal.h"
    5418             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEnumVal.h"
    5419             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnsignedIntVal.h"
    5420             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLongIntVal.h"
    5421             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLongLongIntVal.h"
    5422             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnsignedLongLongIntVal.h"
    5423             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnsignedLongVal.h"
    5424             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFloatVal.h"
    5425             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDoubleVal.h"
    5426             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLongDoubleVal.h"
    5427             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgComplexVal.h"
    5428             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcThreads.h"
    5429             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcMythread.h"
    5430             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateParameterVal.h"
    5431             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNullptrValExp.h"
    5432             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgChar16Val.h"
    5433             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgChar32Val.h"
    5434             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFloat80Val.h"
    5435             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFloat128Val.h"
    5436             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVoidVal.h"
    5437             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCallExpression.h"
    5438             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionCallExp.h"
    5439             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCudaKernelCallExp.h"
    5440             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSizeOfOp.h"
    5441             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcLocalsizeofExpression.h"
    5442             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcBlocksizeofExpression.h"
    5443             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUpcElemsizeofExpression.h"
    5444             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSuperExp.h"
    5445             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeIdOp.h"
    5446             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgConditionalExp.h"
    5447             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNewExp.h"
    5448             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDeleteExp.h"
    5449             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgThisExp.h"
    5450             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRefExp.h"
    5451             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgInitializer.h"
    5452             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAggregateInitializer.h"
    5453             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCompoundInitializer.h"
    5454             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgConstructorInitializer.h"
    5455             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAssignInitializer.h"
    5456             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDesignatedInitializer.h"
    5457             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgBracedInitializer.h"
    5458             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVarArgStartOp.h"
    5459             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVarArgOp.h"
    5460             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVarArgEndOp.h"
    5461             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVarArgCopyOp.h"
    5462             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVarArgStartOneOperandOp.h"
    5463             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNullExpression.h"
    5464             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVariantExpression.h"
    5465             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSubscriptExpression.h"
    5466             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgColonShapeExp.h"
    5467             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAsteriskShapeExp.h"
    5468             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgImpliedDo.h"
    5469             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIOItemExpression.h"
    5470             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStatementExpression.h"
    5471             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAsmOp.h"
    5472             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLabelRefExp.h"
    5473             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgActualArgumentExpression.h"
    5474             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgUnknownArrayOrFunctionReference.h"
    5475             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgPseudoDestructorRefExp.h"
    5476             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCAFCoExpression.h"
    5477             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCudaKernelExecConfig.h"
    5478             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLambdaRefExp.h"
    5479             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDictionaryExp.h"
    5480             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgKeyDatumPair.h"
    5481             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgComprehension.h"
    5482             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgListComprehension.h"
    5483             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSetComprehension.h"
    5484             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDictionaryComprehension.h"
    5485             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNaryOp.h"
    5486             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNaryBooleanOp.h"
    5487             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNaryComparisonOp.h"
    5488             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgStringConversion.h"
    5489             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgYieldExpression.h"
    5490             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateFunctionRefExp.h"
    5491             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateMemberFunctionRefExp.h"
    5492             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAlignOfOp.h"
    5493             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRangeExp.h"
    5494             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMagicColonExp.h"
    5495             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeTraitBuiltinOperator.h"
    5496             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCompoundLiteralExp.h"
    5497             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypeExpression.h"
    5498             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClassExp.h"
    5499             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionParameterRefExp.h"
    5500             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLambdaExp.h"
    5501             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNoexceptOp.h"
    5502             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNonrealRefExp.h"
    5503             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFoldExpression.h"
    5504             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAwaitExpression.h"
    5505             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgChooseExpression.h"
    5506             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgSymbol.h"
    5507             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgVariableSymbol.h"
    5508             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateVariableSymbol.h"
    5509             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNonrealSymbol.h"
    5510             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionSymbol.h"
    5511             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgMemberFunctionSymbol.h"
    5512             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateMemberFunctionSymbol.h"
    5513             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateFunctionSymbol.h"
    5514             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgRenameSymbol.h"
    5515             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgFunctionTypeSymbol.h"
    5516             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgClassSymbol.h"
    5517             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateClassSymbol.h"
    5518             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateSymbol.h"
    5519             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEnumSymbol.h"
    5520             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgEnumFieldSymbol.h"
    5521             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTypedefSymbol.h"
    5522             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgTemplateTypedefSymbol.h"
    5523             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgLabelSymbol.h"
    5524             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgDefaultSymbol.h"
    5525             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgNamespaceSymbol.h"
    5526             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgIntrinsicSymbol.h"
    5527             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgModuleSymbol.h"
    5528             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgInterfaceSymbol.h"
    5529             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgCommonSymbol.h"
    5530             : #include "GENERATED_CODE_DIRECTORY_Cxx_Grammar/SgAliasSymbol.h"
    5531             : #else // else for ifdef ROSE_USING_SMALL_GENERATED_HEADER_FILES
    5532             : 
    5533             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    5534             : 
    5535             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
    5536             : //      This code is automatically generated for each 
    5537             : //      terminal and non-terminal within the defined 
    5538             : //      grammar.  There is a simple way to change the 
    5539             : //      code to fix bugs etc.  See the ROSE README file
    5540             : //      for directions.
    5541             : 
    5542             : // tps: (02/22/2010): Adding DLL export requirements
    5543             : #include "rosedll.h"
    5544             : 
    5545             : // predeclarations for SgNode
    5546             : 
    5547             : /* #line 5548 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    5548             : /* #line 2 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
    5549             : 
    5550             : 
    5551             : #include <semaphore.h>
    5552             : 
    5553             : // tps (01/27/10): Added essential files..
    5554             : //#include "sage3basic.h"
    5555             : #include <rosePublicConfig.h>
    5556             : #include "setup.h"
    5557             : #include "rangemap.h"
    5558             : #include "Map.h"
    5559             : 
    5560             : #include <boost/serialization/access.hpp>
    5561             : #include <boost/serialization/base_object.hpp>
    5562             : #include <boost/serialization/map.hpp>
    5563             : #include <boost/serialization/set.hpp>
    5564             : #include <boost/serialization/vector.hpp>
    5565             : #include <boost/serialization/version.hpp>
    5566             : #include <boost/unordered_map.hpp>
    5567             : #include <boost/unordered_set.hpp>
    5568             : #include <Sawyer/CommandLine.h>
    5569             : #include <Sawyer/Interval.h>
    5570             : #include <Sawyer/IntervalSet.h>
    5571             : 
    5572             : #include "Cxx_Grammar.h"
    5573             : 
    5574             : #include "processSupport.h"
    5575             : #define __builtin_constant_p(exp) (0)
    5576             : 
    5577             : 
    5578             : class PreprocessingInfo;
    5579             : class AstRegExAttribute;
    5580             : class AstAttribute;
    5581             : class AstAttributeMechanism;
    5582             : 
    5583             : // DQ (8/21/2008): these are from the GenericExec.h (from before we used Robb's work in the new IR nodes).
    5584             : #define NELMTS(X)       (sizeof(X)/sizeof((X)[0]))      /* number of elements in a static-sized array */
    5585             : #define DUMP_FIELD_WIDTH        64                      /* min columns to use for member names in dump() functions */
    5586             : #include <semaphore.h>
    5587             : #ifndef _MSC_VER
    5588             : // mutex does not work on Windows
    5589             : // Pei-Hung (07/28/2016) 'sem_init' has been explicitly marked deprecated in OSX El Capitan
    5590             : #if defined(__APPLE__) && defined(__MACH__)
    5591             : // mutex does not work on Mac
    5592             : #else
    5593             : class mutex
    5594             :    {
    5595             :   // This class was added by Valentin David (summer of 2007) as part of support for Stratego using a Java interface.
    5596             : 
    5597             :      private:
    5598             :           sem_t mut;
    5599             : 
    5600             :      public:
    5601             :           mutex()
    5602             :              {
    5603             :                sem_init(&mut, 1, 1);
    5604             :              }
    5605             : 
    5606             :           void lock()
    5607             :              {
    5608             :                sem_wait(&mut);
    5609             :              }
    5610             : 
    5611             :           void unlock ()
    5612             :              {
    5613             :                sem_post(&mut);
    5614             :              }
    5615             :    };
    5616             : #endif
    5617             : #endif
    5618             : //! Declarations to be placed at the top of the header file for this grammar
    5619             : /*! The typedefs simplify the resulting generated code.  Note that the use of STL
    5620             :     for the list types requires the use of an additional typedef to a pointer of that
    5621             :     list<Type> so that the generation of the code can be done using types that don't
    5622             :     explicitly have the "*" in the type string.  This avoids the automatic assumption
    5623             :     (currently hard coded within ROSETTA) that "*"'d types have a specific interface
    5624             :     which includes set_parent and get_parent member functions.  This is assumption
    5625             :     within ROSETTA may be eliminated in the future.
    5626             :  */
    5627             : 
    5628             : // endif for ifndef ROSE_USE_SWIG_SUPPORT
    5629             : // #endif
    5630             : 
    5631             : // #include "virtualCFG.h"
    5632             : 
    5633             : // Turn on internal debugging by default during development
    5634             : #define SAGE_INTERNAL_DEBUG
    5635             : 
    5636             : #define ROSE_INTEGER_TYPE_MAX_BIT_LENGTH 32
    5637             : 
    5638             : // DQ (8/18/2008): Added support for new IR graph nodes
    5639             : // This is the use of this macro in ROSE, there is another macro with the same name in ROSETTA!
    5640             : // #define OLD_GRAPH_NODES 0
    5641             : 
    5642             : 
    5643             : //! declaration of variable to control internal output of debugging information (default = 0)
    5644             : extern int SAGE_DEBUG;
    5645             : 
    5646             : // Introduce a way to change from std::list to std::vector easily as a test to improve performance of traversals.
    5647             : // This is now moved to ROSE/util/commandLineProcessing/setup.h so that all of ROSE will see it.
    5648             : // define Rose_STL_Container std::list
    5649             : // define Rose_STL_Container std::vector
    5650             : 
    5651             : class SgInitializedName;
    5652             : // DQ (6/1/2004): Change this to be a list of pointers to SgInitializedName (to fix Beata's Bug beata.C)
    5653             : typedef Rose_STL_Container<SgInitializedName*> SgInitializedNamePtrList;
    5654             : typedef SgInitializedNamePtrList*              SgInitializedNamePtrListPtr;
    5655             : 
    5656             : class SgDeclarationStatement;
    5657             : 
    5658             : // DQ (1/28/2016): Different ways of documenting typedefs (none appear to be working with Doxygen).
    5659             : /** \typedef SgDeclarationStatementPtrList
    5660             :     \brief This is socumentation for the following typedef
    5661             :  */
    5662             : typedef Rose_STL_Container<SgDeclarationStatement*> SgDeclarationStatementPtrList;
    5663             : 
    5664             : /** \typedef SgDeclarationStatementPtrListPtr
    5665             :     \brief This is socumentation for the following typedef
    5666             :  */
    5667             : typedef SgDeclarationStatementPtrList*              SgDeclarationStatementPtrListPtr;
    5668             : 
    5669             : class SgStatement;
    5670             : typedef Rose_STL_Container<SgStatement*>    SgStatementPtrList;
    5671             : typedef SgStatementPtrList*                 SgStatementPtrListPtr;
    5672             : 
    5673             : class SgBaseClass;
    5674             : // DQ (6/21/2005): Change from list of SgBaseClass to list of SgBaseClass*
    5675             : typedef Rose_STL_Container<SgBaseClass*>    SgBaseClassPtrList;
    5676             : typedef SgBaseClassPtrList*                 SgBaseClassPtrListPtr;
    5677             : 
    5678             : class SgNode;
    5679             : typedef Rose_STL_Container<SgNode*>         SgNodePtrList;
    5680             : typedef SgNodePtrList*                      SgNodePtrListPtr;
    5681             : 
    5682             : class SgType;
    5683             : typedef Rose_STL_Container<SgType*>         SgTypePtrList;
    5684             : typedef SgTypePtrList*                      SgTypePtrListPtr;
    5685             : 
    5686             : class SgExpression;
    5687             : typedef Rose_STL_Container<SgExpression*>   SgExpressionPtrList;
    5688             : typedef SgExpressionPtrList*                SgExpressionPtrListPtr;
    5689             : 
    5690             : class SgKeyDatumPair;
    5691             : typedef Rose_STL_Container<SgKeyDatumPair*>  SgKeyDatumPairPtrList;
    5692             : 
    5693             : class SgComprehension;
    5694             : typedef Rose_STL_Container<SgComprehension*>  SgComprehensionPtrList;
    5695             : 
    5696             : typedef Rose_STL_Container<VariantT>       VariantTList;
    5697             : 
    5698             : // Liao 9/27/2010: new typedef for SgVarRefExp list
    5699             : class SgVarRefExp;
    5700             : typedef Rose_STL_Container<SgVarRefExp*>   SgVarRefExpPtrList;
    5701             : typedef SgVarRefExpPtrList*                SgVarRefExpPtrListPtr;
    5702             : 
    5703             : class SgAttribute;
    5704             : typedef Rose_STL_Container<SgAttribute*>    SgAttributePtrList;
    5705             : typedef SgAttributePtrList*                 SgAttributePtrListPtr;
    5706             : 
    5707             : // DQ (6/14/2008): I think this should be unsigned char
    5708             : // typedef Rose_STL_Container<char*>           SgCharPtrList;
    5709             : // typedef SgCharPtrList*                      SgCharPtrListPtr;
    5710             : typedef Rose_STL_Container<unsigned char>   SgCharList;
    5711             : typedef SgCharList*                         SgCharListPtr;
    5712             : 
    5713             : typedef SgExpression*                       SgExpressionPtr;
    5714             : typedef SgStatement*                        SgStatementPtr;
    5715             : typedef SgInitializedName*                  SgInitializedNamePtr;
    5716             : 
    5717             : // DQ (4/7/2001) Add SgFile list support for multi-file support within SgProject
    5718             : class SgFile;
    5719             : typedef std::vector<SgFile*>                SgFilePtrList;
    5720             : typedef SgFilePtrList*                      SgFilePtrListPtr;
    5721             : 
    5722             : // DQ (2/27/2019): Modified to add the line number so that we could support adding comments
    5723             : // and CPP directives to shared IR nodes to support multi-file compilation.
    5724             : // DQ (5/22/2006): Added this support so that we could have general way of interpreting STL
    5725             : // containers so that we could simplify that code used to generated code for the destructors.
    5726             : // JJW (6/21/2008): Changed to a unordered vector for performance
    5727             : typedef int                                   SgFileId;
    5728             : typedef std::vector<SgFileId>                 SgFileIdList;
    5729             : // typedef struct { int file_id; int line_number; } SgFileIdLineNumber;
    5730             : // typedef std::vector<SgFileIdLineNumber>          SgFileIdList;
    5731             : typedef int                                   SgFileLineNumber;
    5732             : typedef std::vector<SgFileLineNumber>         SgFileLineNumberList;
    5733             : 
    5734             : // DQ (5/22/2006): Added this support so that we could have general way of interpreting STL
    5735             : // containers so that we could simplify that code used to generated code for the destructors.
    5736             : typedef Rose_STL_Container<std::string>     SgStringList;
    5737             : typedef SgStringList*                       SgStringListPtr;
    5738             : 
    5739             : // DQ (3/10/2007): Added STL set of SgNode* so that we could support existence tests in the
    5740             : // symbol table without a linear search of the symbol table (where we don't use the name).
    5741             : // This test helps detect where symbols may have been inserted into the symbol table using
    5742             : // two different names, or there names changed without properly unloading and reloading the
    5743             : // associated symbol.
    5744             : typedef std::set<SgNode*>                   SgNodeSet;
    5745             : typedef SgNodeSet*                          SgNodeSetPtr;
    5746             : 
    5747             : class ROSEAttributesList;
    5748             : typedef ROSEAttributesList*                 ROSEAttributesListPtr;
    5749             : 
    5750             : class ROSEAttributesListContainer;
    5751             : typedef ROSEAttributesListContainer*        ROSEAttributesListContainerPtr;
    5752             : 
    5753             : // I don't think these are needed
    5754             : // typedef vector<ROSEAttributesListContainer*>         ROSEAttributesListContainerList;
    5755             : // typedef ROSEAttributesListContainerList*             ROSEAttributesListContainerListPtr;
    5756             : 
    5757             : // MK: The data member p_nodes of the SgModifierNodes class is now an
    5758             : // STL vector, therefore we define the following data types
    5759             : typedef std::vector<SgModifierType*>        SgModifierTypePtrVector;
    5760             : // DQ (12/19/2005): This is not used anywhere!
    5761             : // typedef SgModifierTypePtrVector          SgModifierTypePtrVectorPtr;
    5762             : 
    5763             : // DQ (12/6/2003): added bit vector typedef to support addition of more flags
    5764             : // that can be held in a long integer for the Unparse_Info object.
    5765             : typedef std::vector<bool>                   SgBitVector;
    5766             : 
    5767             : // DQ (3/12/2004): Added for template support
    5768             : class SgTemplateParameter;
    5769             : typedef Rose_STL_Container<SgTemplateParameter*> SgTemplateParameterPtrList;
    5770             : typedef SgTemplateParameterPtrList*              SgTemplateParameterPtrListPtr;
    5771             : 
    5772             : // DQ (3/12/2004): Added for template support
    5773             : class SgTemplateArgument;
    5774             : typedef Rose_STL_Container<SgTemplateArgument*>  SgTemplateArgumentPtrList;
    5775             : typedef SgTemplateArgumentPtrList*               SgTemplateArgumentPtrListPtr;
    5776             : 
    5777             : // DQ (9/6/2004): Added for qualified name support (e.g. A::B::C::dataMember)
    5778             : // This form of qualified name support was later removed!
    5779             : // class SgSymbol;
    5780             : // typedef list<SgSymbol*>      SgSymbolPtrList;
    5781             : // typedef SgSymbolPtrList*     SgSymbolPtrListPtr;
    5782             : 
    5783             : // DQ (5/6/2005): Added support for SgDirectory IR node!
    5784             : class SgDirectory;
    5785             : typedef std::vector<SgDirectory*>           SgDirectoryPtrList;
    5786             : typedef SgDirectoryPtrList*                 SgDirectoryPtrListPtr;
    5787             : 
    5788             : // DQ (12/21/2005): Added to support explicit name qualifiers (this provides only global qualifier info so far)
    5789             : class SgQualifiedName;
    5790             : typedef Rose_STL_Container<SgQualifiedName*> SgQualifiedNamePtrList;
    5791             : typedef SgQualifiedNamePtrList*              SgQualifiedNamePtrListPtr;
    5792             : 
    5793             : // DQ (10/4/2006): Add support for storing unique numbers with SgBasicBlock IR nodes.
    5794             : // This mechanism premits unique numbers to be computed and cached and the cache to
    5795             : // be easily invalidated.
    5796             : // Name this as a list since the ROSETTA code generation will use this information.
    5797             : class SgBasicBlock;
    5798             : typedef SgBasicBlock*                       SgBasicBlockPtr;
    5799             : // typedef std::map<SgBasicBlock*,int>      SgBasicBlockPtrList;
    5800             : typedef std::vector<SgBasicBlockPtr>        SgBasicBlockPtrList;
    5801             : typedef SgBasicBlockPtrList*                SgBasicBlockPtrListPtr;
    5802             : 
    5803             : // DQ (11/19/2007): Added support for Fortran namelist statement.
    5804             : typedef Rose_STL_Container<SgNameGroup*>           SgNameGroupPtrList;
    5805             : typedef SgNameGroupPtrList*                        SgNameGroupPtrListPtr;
    5806             : 
    5807             : // DQ (11/20/2007): Added support for Fortran data statement.
    5808             : typedef Rose_STL_Container<SgDataStatementGroup*>  SgDataStatementGroupPtrList;
    5809             : typedef SgDataStatementGroupPtrList*               SgDataStatementGroupPtrListPtr;
    5810             : 
    5811             : // DQ (11/20/2007): Added support for Fortran data statement.
    5812             : typedef Rose_STL_Container<SgDataStatementObject*> SgDataStatementObjectPtrList;
    5813             : typedef SgDataStatementObjectPtrList*              SgDataStatementObjectPtrListPtr;
    5814             : 
    5815             : // DQ (11/20/2007): Added support for Fortran data statement.
    5816             : typedef Rose_STL_Container<SgDataStatementValue*>  SgDataStatementValuePtrList;
    5817             : typedef SgDataStatementValuePtrList*               SgDataStatementValuePtrListPtr;
    5818             : 
    5819             : // DQ (11/21/2007): Added support for common block statements (which can have multiple common blocks)
    5820             : typedef Rose_STL_Container<SgCommonBlockObject*>   SgCommonBlockObjectPtrList;
    5821             : typedef SgCommonBlockObjectPtrList*                SgCommonBlockObjectPtrListPtr;
    5822             : 
    5823             : // DQ (11/21/2007): Added support for dimension statements (which can have multiple entries)
    5824             : typedef Rose_STL_Container<SgDimensionObject*>     SgDimensionObjectPtrList;
    5825             : typedef SgDimensionObjectPtrList*                  SgDimensionObjectPtrListPtr;
    5826             : 
    5827             : // DQ (11/21/2007): Added support for dimension statements (which can have multiple entries)
    5828             : typedef Rose_STL_Container<SgLabelSymbol*>     SgLabelSymbolPtrList;
    5829             : typedef SgLabelSymbolPtrList*                  SgLabelSymbolPtrListPtr;
    5830             : 
    5831             : // DQ (11/21/2007): Added support for format statements (which can have multiple entries)
    5832             : typedef Rose_STL_Container<SgFormatItem*>      SgFormatItemPtrList;
    5833             : typedef SgFormatItemPtrList*                   SgFormatItemPtrListPtr;
    5834             : 
    5835             : typedef Rose_STL_Container<rose_addr_t>  SgAddressList;
    5836             : typedef SgAddressList*                   SgAddressListPtr;
    5837             : 
    5838             : typedef Rose_STL_Container<unsigned>           SgUnsignedList;
    5839             : typedef SgUnsignedList*                        SgUnsignedListPtr;
    5840             : 
    5841             : // DQ (8/7/2008): Added list of size_t types for binary format support.
    5842             : typedef Rose_STL_Container<size_t>             SgSizeTList;
    5843             : typedef SgSizeTList*                           SgSizeTListPtr;
    5844             : 
    5845             : typedef Rose_STL_Container<unsigned char>    SgUnsignedCharList;
    5846             : typedef SgUnsignedCharList*                  SgUnsignedCharListPtr;
    5847             : 
    5848             : // DQ (10/1/2008): Added support for lists of SgModuleStatement where they are
    5849             : // not a part of the current translation unit.  A place for the information in
    5850             : // the *.mod files to be put.  This is just the type declaration for the list.
    5851             : typedef Rose_STL_Container<SgModuleStatement*> SgModuleStatementPtrList;
    5852             : typedef SgModuleStatementPtrList*              SgModuleStatementPtrListPtr;
    5853             : 
    5854             : // DQ (10/4/2008): Support for list of names or rename entries for the SgUseStatement (Fortran 90 support)
    5855             : typedef Rose_STL_Container<SgRenamePair*> SgRenamePairPtrList;
    5856             : typedef SgRenamePairPtrList*              SgRenamePairPtrListPtr;
    5857             : 
    5858             : // DQ (10/6/2008): Added improved support for F90 interfaces using interface bodies.
    5859             : typedef Rose_STL_Container<SgInterfaceBody*> SgInterfaceBodyPtrList;
    5860             : typedef SgInterfaceBodyPtrList*              SgInterfaceBodyPtrListPtr;
    5861             : 
    5862             : // DQ (11/28/2008): Added support for list of integers (used for flag list in SgLinemarkerDirectiveStatement).
    5863             : // typedef std::vector<int>                     SgIntegerList;
    5864             : // Liao, 5/30/2009 types for OpenMP support
    5865             : typedef Rose_STL_Container<SgOmpClause*>   SgOmpClausePtrList;
    5866             : typedef SgOmpClausePtrList*                SgOmpClausePtrListPtr;
    5867             : 
    5868             : typedef Rose_STL_Container<SgOmpSectionStatement*>   SgOmpSectionStatementPtrList;
    5869             : typedef SgOmpSectionStatementPtrList*                SgOmpSectionStatementPtrListPtr;
    5870             : 
    5871             : // DQ (3/6/2014): Added support for Untyped IR nodes.
    5872             : 
    5873             : // Rasmussen (08/25/2022): Removed all untyped Sage nodes. Ultimately it proved easier to
    5874             : // construct regular IR nodes from the Jovial parser. Using the untyped system just led to an
    5875             : // unnecessary step and wasted effort.
    5876             : 
    5877             : // DQ (9/3/2014): Added support for C++11 Lambda expressions.
    5878             : typedef Rose_STL_Container<SgLambdaCapture*>     SgLambdaCapturePtrList;
    5879             : typedef SgLambdaCapturePtrList*                  SgLambdaCapturePtrListPtr;
    5880             : 
    5881             : // DQ (9/15/2018) Add SgSourceFile list support for header file reporting (for unparse headers option).
    5882             : class SgSourceFile;
    5883             : typedef Rose_STL_Container<SgSourceFile*>        SgSourceFilePtrList;
    5884             : typedef SgSourceFilePtrList*                     SgSourceFilePtrListPtr;
    5885             : 
    5886             : // DQ (9/18/2018) Add SgIncludeFile list support for header file reporting (for unparse headers option).
    5887             : class SgIncludeFile;
    5888             : typedef Rose_STL_Container<SgIncludeFile*>        SgIncludeFilePtrList;
    5889             : typedef SgIncludeFilePtrList*                     SgIncludeFilePtrListPtr;
    5890             : 
    5891             : // DQ (10/28/2013): Forward declaration for new token unparsing support.
    5892             : class TokenStreamSequenceToNodeMapping;
    5893             : class FrontierNode;
    5894             : class PreviousAndNextNodeData;
    5895             : 
    5896             : // DQ (11/30/2015): Added support for mapping of the AST to macro expansions.
    5897             : class MacroExpansion;
    5898             : 
    5899             : // DQ (11/20/2010): Added type for SgToken list
    5900             : // Build a type for the SgToken list.
    5901             : typedef Rose_STL_Container<SgToken*> SgTokenPtrList;
    5902             : typedef SgTokenPtrList* SgTokenPtrListPtr;
    5903             : 
    5904             : 
    5905             : // DQ (11/4/2009): Trying to use the boost hash_map support
    5906             : namespace rose_hash
    5907             :    {
    5908             :   // The condition here is not needed for GCC 4.2, but is needed (and does not completely work) for earlier versions
    5909             :      using boost::unordered_map;
    5910             :      using boost::unordered_multimap;
    5911             :      using boost::unordered_set;
    5912             :      using boost::hash;
    5913             : 
    5914             :   // DQ (4/23/2009): These should be put into this namespace so that we don't contaminate the global scope.
    5915             :   // DQ (8/19/2008): This is already defined in src/frontend/SageIII/astMerge/buildMangledNameMap.h
    5916             :      struct eqstr_string
    5917             :         {
    5918             :           bool operator()(const std::string & s1, const std::string & s2) const
    5919             :              {
    5920             :                return s1 == s2;
    5921             :              }
    5922             :         };
    5923             : 
    5924             : /*! \brief Hash name support for symbol tables within ROSE.
    5925             :  */
    5926             :      struct hash_integer
    5927             :         {
    5928             :        // tps (11/17/2009) : Changed this so that it works under Windows.
    5929             :        // CH (4/9/2010): Use boost::hash instead
    5930           0 :           size_t operator()(const int n) const
    5931             :              {
    5932           0 :                return n;
    5933             :              }
    5934             :         };
    5935             : 
    5936             :      struct hash_integer_pair
    5937             :         {
    5938             :        // tps (11/17/2009) : Changed this so that it works under Windows.
    5939             :        // CH (4/9/2010): Use boost::hash instead
    5940             :           size_t operator()(const std::pair<int,int> & p) const
    5941             :              {
    5942             :             // DQ (4/30/2009): This subject should be reviewed!
    5943             :             // Since this is a hash function, it might not a problem if we have
    5944             :             // overflow (also the values should not be so large as to be a problem).
    5945             :                return p.first+p.second;
    5946             :              }
    5947             :         };
    5948             : 
    5949             :   // DQ (4/30/2009): This might already exist for std::pair<>
    5950             :      struct eqstr_integer_pair
    5951             :         {
    5952             :           bool operator()(const std::pair<int,int> & p1, const std::pair<int,int> & p2) const
    5953             :              {
    5954             :                return (p1.first == p2.first) && (p1.second == p2.second);
    5955             :              }
    5956             :         };
    5957             : 
    5958             :      struct eqstr_graph_node
    5959             :         {
    5960             :           bool operator()(const SgGraphNode* p1, const SgGraphNode* p2) const
    5961             :              {
    5962             :                return p1 == p2;
    5963             :              }
    5964             :         };
    5965             : 
    5966             :      struct eqstr_graph_edge
    5967             :         {
    5968             :           bool operator()(const SgGraphNode* p1, const SgGraphNode* p2) const
    5969             :              {
    5970             :                return p1 == p2;
    5971             :              }
    5972             :         };
    5973             : 
    5974             :      struct hash_graph_node
    5975             :         {
    5976             :        // tps (11/17/2009) : Changed this so that it works under Windows.
    5977             :        // CH (4/9/2010): Use boost::hash instead
    5978             :           size_t operator()(const SgGraphNode* ptr) const
    5979             :              {
    5980             :                return (size_t) ptr;
    5981             :              }
    5982             :         };
    5983             :    }
    5984             : 
    5985             : 
    5986             : /*! \brief Hash table support for graph IR nodes within ROSE (uses strings to lookup nodes).
    5987             :  */
    5988             : 
    5989             : // DQ (8/19/2008): Note that "rose_hash" is a namespace defined above.
    5990             : // class rose_hash_multimap : public rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>
    5991             : // tps (11/18/2009) : This cannot be correct since the constructor takes a string not an int.
    5992             : // CH (4/9/2010): Use boost::unordered instead
    5993             : typedef rose_hash::unordered_multimap<std::string, SgGraphNode*> rose_graph_string_node_hash_multimap_base_type;
    5994             : 
    5995             : class rose_graph_string_node_hash_multimap : public rose_graph_string_node_hash_multimap_base_type
    5996             :    {
    5997             :   // Need to document why we are using hash_multimap type here.  Why a hash (obvious), then why a multimap?
    5998             :   // I think a multimap is used to support having no names on the nodes if they are unlabeled.  If the
    5999             :   // nodes are labled then operations on the labled edges are possible using the multimap.  But is there
    6000             :   // a performance trade-off for these choices?
    6001             : 
    6002             :      protected:
    6003             : 
    6004             :        // DQ (4/25/2009): We need to change this name since I think we just want the
    6005             :        // associated IR node in the AST, and not any concept of parent in the graph.
    6006             :           SgNode* parent;
    6007             : 
    6008             :      public:
    6009           0 :           rose_graph_string_node_hash_multimap()
    6010           0 :              : rose_graph_string_node_hash_multimap_base_type(), parent(NULL)
    6011             :              {}
    6012             :                          // tps (11/18/2009) : This cannot be correct since the constructor takes a string not an int.
    6013             : #if 0
    6014             :           rose_graph_string_node_hash_multimap(int sz)
    6015             :              : rose_graph_string_node_hash_multimap_base_type(sz), parent(NULL)
    6016             :              {}
    6017             : #endif
    6018             :           rose_graph_string_node_hash_multimap(const rose_graph_string_node_hash_multimap & rhs)
    6019             :              : rose_graph_string_node_hash_multimap_base_type(rhs),parent(rhs.parent)
    6020             :              {}
    6021             :        // See note (above) about name change to the associated data member for these access functions.
    6022             :           void set_parent(SgNode * new_parent)
    6023             :              {
    6024             :                parent = new_parent;
    6025             :              }
    6026             :           SgNode * get_parent()
    6027             :              {
    6028             :                return parent;
    6029             :              }
    6030             : 
    6031           0 :           void delete_elements()
    6032             :              {
    6033             :              }
    6034             : 
    6035           0 :          ~rose_graph_string_node_hash_multimap()
    6036           0 :              {
    6037           0 :                delete_elements();
    6038             : 
    6039           0 :                parent = NULL;
    6040             :              }
    6041             : 
    6042             : 
    6043             :         friend class AST_FILE_IO;
    6044             :         friend class SgSymbolTableStorageClass;
    6045             :         friend class EasyStorage<rose_graph_string_node_hash_multimap*>;
    6046             :    };
    6047             : 
    6048             : std::ostream & operator<< ( std::ostream & os, const rose_graph_string_node_hash_multimap::iterator & rhm_it );
    6049             : 
    6050             : // DQ (5/1/2009): Temporary typedef to use older name for compatability.
    6051             : typedef rose_graph_string_node_hash_multimap rose_graph_hash_multimap;
    6052             : 
    6053             : 
    6054             : 
    6055             : /*! \brief Hash table support for graph IR nodes within ROSE (used to lookup edges using nodes).
    6056             : 
    6057             :     \internal This class is depricated and it's functionality will be produced using two other hash maps.
    6058             :  */
    6059             : 
    6060             : // DQ (4/29/2009): Added to support ROSE Graph IR nodes
    6061             : // tps (11/18/2009) : This cannot be correct since the constructor takes a string not an int.
    6062             : // CH (4/9/2010): Use boost::unordered instead
    6063             : typedef rose_hash::unordered_multimap<SgGraphNode*, SgGraphEdge*, rose_hash::hash_graph_node, rose_hash::eqstr_graph_node> rose_graph_node_edge_hash_multimap_base_type;
    6064             : class rose_graph_node_edge_hash_multimap : public rose_graph_node_edge_hash_multimap_base_type
    6065             :    {
    6066             :   // This class is used to map nodes to edges in the highest level graph class.
    6067             :   // Different graph classes derived from the SgGraph class contain additional
    6068             :   // maps that contain specific types of edges.
    6069             : 
    6070             :      protected:
    6071             :           SgNode * parent;
    6072             : 
    6073             :      public:
    6074           0 :           rose_graph_node_edge_hash_multimap()
    6075           0 :              : rose_graph_node_edge_hash_multimap_base_type()
    6076             :              {}
    6077             :          // tps (11/18/2009) : This cannot be correct since the constructor takes a string not an int.
    6078             : #if 0
    6079             :           rose_graph_node_edge_hash_multimap(int sz)
    6080             :              : rose_graph_node_edge_hash_multimap_base_type(sz)
    6081             :              {}
    6082             : #endif
    6083             :           rose_graph_node_edge_hash_multimap(const rose_graph_node_edge_hash_multimap& rhs)
    6084             :           // DQ (4/30/2009): This fixed a problem reported by Thomas Panas relative to seg-faults when using the copy constructor (forced his code to use references).
    6085             :           // : rose_hash::unordered_multimap<SgGraphNode*, SgGraphEdge*, rose_hash::hash_graph_node, rose_hash::eqstr_graph_node>((rose_graph_node_edge_hash_multimap)rhs)
    6086             :              : rose_graph_node_edge_hash_multimap_base_type(rhs),parent(rhs.parent)
    6087             :              {}
    6088             : 
    6089             :           void set_parent(SgNode * new_parent)
    6090             :              {
    6091             :                parent = new_parent;
    6092             :              }
    6093             :           SgNode * get_parent()
    6094             :              {
    6095             :                return parent;
    6096             :              }
    6097             : 
    6098           0 :           void delete_elements()
    6099             :              {
    6100             :              }
    6101             : 
    6102           0 :          ~rose_graph_node_edge_hash_multimap()
    6103           0 :              {
    6104           0 :                delete_elements();
    6105             :              }
    6106             : 
    6107             :         friend class AST_FILE_IO;
    6108             :         friend class SgSymbolTableStorageClass;
    6109             :         friend class EasyStorage<rose_graph_node_edge_hash_multimap*>;
    6110             :    };
    6111             : 
    6112             : std::ostream & operator<< ( std::ostream & os, const rose_graph_node_edge_hash_multimap::iterator & rhm_it );
    6113             : 
    6114             : 
    6115             : /*! \brief Hash table support for graph IR nodes within ROSE (used to lookup nodes using node index values).
    6116             :  */
    6117             : 
    6118             : // DQ (4/30/2009): Added to support more of the Graph functionality in new ROSE IR nodes
    6119             : // typedef rose_hash::unordered_map<int,SgGraphNode*, rose_hash::hash_integer, rose_hash::eqstr_graph_node> rose_graph_integer_node_hash_map_base_type
    6120             : // CH (4/9/2010): Use boost::unordered instead
    6121             : //#ifdef _MSCx_VER
    6122             : #if 0
    6123             : typedef rose_hash::unordered_map<int, SgGraphNode*, stdext::hash_compare <int, greater<int> > > rose_graph_integer_node_hash_map_base_type;
    6124             : #else
    6125             : typedef rose_hash::unordered_map<int, SgGraphNode*, rose_hash::hash_integer> rose_graph_integer_node_hash_map_base_type;
    6126             : #endif
    6127           0 : class rose_graph_integer_node_hash_map : public rose_graph_integer_node_hash_map_base_type
    6128             :    {
    6129             :      protected:
    6130             :        // I think this is required by the AST file I/O support.
    6131             :           SgNode * parent;
    6132             : 
    6133             :      public:
    6134           0 :           rose_graph_integer_node_hash_map()
    6135           0 :              : rose_graph_integer_node_hash_map_base_type()
    6136             :              {}
    6137             : // tps (11/18/2009) : Is this constructor wrong? Should it be a pair of (int,SgGraphNode)?
    6138             : #if 0
    6139             : // example from MSDN microsoft hash_map:
    6140             : // hash_map <int, int, hash_compare <int, less<int> > > hm1;
    6141             : //   hm1.insert( Int_Pair( 1, 10 ) );
    6142             :           rose_graph_integer_node_hash_map(int sz)
    6143             :              : rose_graph_integer_node_hash_map_base_type(sz)
    6144             :              {}
    6145             : #endif
    6146           0 :           rose_graph_integer_node_hash_map(const rose_graph_integer_node_hash_map& rhs)
    6147           0 :              : rose_graph_integer_node_hash_map_base_type(rhs),parent(rhs.parent)
    6148             :              {}
    6149             : 
    6150             :           void set_parent(SgNode * new_parent)
    6151             :              {
    6152             :                parent = new_parent;
    6153             :              }
    6154             :           SgNode * get_parent()
    6155             :              {
    6156             :                return parent;
    6157             :              }
    6158             : 
    6159           0 :           void delete_elements()
    6160             :              {
    6161             :              }
    6162             : 
    6163           0 :          ~rose_graph_integer_node_hash_map()
    6164           0 :              {
    6165           0 :                delete_elements();
    6166             :              }
    6167             : 
    6168             :         friend class AST_FILE_IO;
    6169             :         friend class SgSymbolTableStorageClass;
    6170             :         friend class EasyStorage<rose_graph_integer_node_hash_map*>;
    6171             :    };
    6172             : 
    6173             : std::ostream & operator<< ( std::ostream & os, const rose_graph_integer_node_hash_map::iterator & rhm_it );
    6174             : 
    6175             : 
    6176             : 
    6177             : /*! \brief Hash table support for graph IR nodes within ROSE (used to lookup edges using edge index values).
    6178             :  */
    6179             : 
    6180             : // DQ (4/30/2009): Added to support more of the Graph functionality in new ROSE IR nodes
    6181             : // typedef rose_hash::unordered_map<int,SgGraphEdge*, rose_hash::hash_integer, rose_hash::eqstr_graph_edge> rose_graph_integer_edge_hash_map_base_type;
    6182             : // CH (4/9/2010): Use boost::unordered instead
    6183             : //#ifdef _MSCx_VER
    6184             : #if 0
    6185             : typedef rose_hash::unordered_map<int,SgGraphEdge*> rose_graph_integer_edge_hash_map_base_type;
    6186             : #else
    6187             : typedef rose_hash::unordered_map<int,SgGraphEdge*, rose_hash::hash_integer> rose_graph_integer_edge_hash_map_base_type;
    6188             : #endif
    6189           0 : class rose_graph_integer_edge_hash_map : public rose_graph_integer_edge_hash_map_base_type
    6190             :    {
    6191             :   // This class is used to map nodes to edges in the highest level graph class.
    6192             :   // Different graph classes derived from the SgGraph class contain additional
    6193             :   // maps that contain specific types of edges.
    6194             : 
    6195             :      protected:
    6196             :        // I think this is required by the AST file I/O support.
    6197             :           SgNode * parent;
    6198             : 
    6199             :      public:
    6200           0 :           rose_graph_integer_edge_hash_map()
    6201           0 :              : rose_graph_integer_edge_hash_map_base_type()
    6202             :              {}
    6203             : // tps (11/18/2009) : I assume this is wrong, it should be a pair
    6204             : #if 0
    6205             :           rose_graph_integer_edge_hash_map(int sz)
    6206             :              : rose_graph_integer_edge_hash_map_base_type(sz)
    6207             :              {}
    6208             : #endif
    6209           0 :           rose_graph_integer_edge_hash_map(const rose_graph_integer_edge_hash_map& rhs)
    6210           0 :              : rose_graph_integer_edge_hash_map_base_type(rhs),parent(rhs.parent)
    6211             :              {}
    6212             : 
    6213             :           void set_parent(SgNode * new_parent)
    6214             :              {
    6215             :                parent = new_parent;
    6216             :              }
    6217             :           SgNode * get_parent()
    6218             :              {
    6219             :                return parent;
    6220             :              }
    6221             : 
    6222           0 :           void delete_elements()
    6223             :              {
    6224             :              }
    6225             : 
    6226           0 :          ~rose_graph_integer_edge_hash_map()
    6227           0 :              {
    6228           0 :                delete_elements();
    6229             :              }
    6230             : 
    6231             :         friend class AST_FILE_IO;
    6232             :         friend class SgSymbolTableStorageClass;
    6233             :         friend class EasyStorage<rose_graph_integer_edge_hash_map*>;
    6234             :    };
    6235             : 
    6236             : std::ostream & operator<< ( std::ostream & os, const rose_graph_integer_edge_hash_map::iterator & rhm_it );
    6237             : 
    6238             : 
    6239             : 
    6240             : /*! \brief Hash table support for graph IR nodes within ROSE (used to lookup edges using edge index values).
    6241             :  */
    6242             : 
    6243             : // DQ (4/30/2009): Added to support more of the Graph functionality in new ROSE IR nodes
    6244             : // typedef rose_hash::unordered_map<int,SgGraphEdge*, rose_hash::hash_integer, rose_hash::eqstr_graph_edge> rose_graph_integer_edge_hash_multimap_base_type;
    6245             : 
    6246             : typedef rose_hash::unordered_multimap<int,SgGraphEdge*> rose_graph_integer_edge_hash_multimap_base_type;
    6247           0 : class rose_graph_integer_edge_hash_multimap : public rose_graph_integer_edge_hash_multimap_base_type
    6248             :    {
    6249             :   // This class is used to map nodes to edges in the highest level graph class.
    6250             :   // Different graph classes derived from the SgGraph class contain additional
    6251             :   // maps that contain specific types of edges.
    6252             : 
    6253             :      protected:
    6254             :        // I think this is required by the AST file I/O support.
    6255             :           SgNode * parent;
    6256             : 
    6257             :      public:
    6258           0 :           rose_graph_integer_edge_hash_multimap()
    6259           0 :              : rose_graph_integer_edge_hash_multimap_base_type()
    6260             :              {}
    6261             : // tps (11/18/2009) : I assume this is wrong, it should be a pair
    6262             : #if 0
    6263             :           rose_graph_integer_edge_hash_multimap(int sz)
    6264             :              : rose_graph_integer_edge_hash_multimap_base_type(sz)
    6265             :              {}
    6266             : #endif
    6267           0 :           rose_graph_integer_edge_hash_multimap(const rose_graph_integer_edge_hash_multimap& rhs)
    6268           0 :              : rose_graph_integer_edge_hash_multimap_base_type(rhs),parent(rhs.parent)
    6269             :              {}
    6270             : 
    6271             :           void set_parent(SgNode * new_parent)
    6272             :              {
    6273             :                parent = new_parent;
    6274             :              }
    6275             :           SgNode * get_parent()
    6276             :              {
    6277             :                return parent;
    6278             :              }
    6279             : 
    6280           0 :           void delete_elements()
    6281             :              {
    6282             :              }
    6283             : 
    6284           0 :          ~rose_graph_integer_edge_hash_multimap()
    6285           0 :              {
    6286           0 :                delete_elements();
    6287             :              }
    6288             : 
    6289             :         friend class AST_FILE_IO;
    6290             :         friend class SgSymbolTableStorageClass;
    6291             :         friend class EasyStorage<rose_graph_integer_edge_hash_multimap*>;
    6292             :    };
    6293             : 
    6294             : std::ostream & operator<< ( std::ostream & os, const rose_graph_integer_edge_hash_multimap::iterator & rhm_it );
    6295             : 
    6296             : 
    6297             : 
    6298             : /*! \brief Hash table support for graph IR nodes within ROSE (used to lookup edges using node index pairs).
    6299             :  */
    6300             : typedef rose_hash::unordered_multimap<std::pair<int,int>,SgGraphEdge*, rose_hash::hash_integer_pair> rose_graph_integerpair_edge_hash_multimap_base_type;
    6301           0 : class rose_graph_integerpair_edge_hash_multimap : public rose_graph_integerpair_edge_hash_multimap_base_type
    6302             :    {
    6303             :   // This class is used to map nodes to edges in the highest level graph class.
    6304             :   // Different graph classes derived from the SgGraph class contain additional
    6305             :   // maps that contain specific types of edges.
    6306             : 
    6307             :      protected:
    6308             :        // I think this is required by the AST file I/O support.
    6309             :           SgNode * parent;
    6310             : 
    6311             :      public:
    6312           0 :           rose_graph_integerpair_edge_hash_multimap()
    6313           0 :              : rose_graph_integerpair_edge_hash_multimap_base_type()
    6314             :              {}
    6315             : // tps (11/18/2009) : I assume this is wrong, it should be a pair
    6316             : // DQ (12/1/2009): This is not ment to be a pair, it should be an int as part of setting the size of the hash table.
    6317             : #if 0
    6318             :           rose_graph_integerpair_edge_hash_multimap(int sz)
    6319             :              : rose_graph_integerpair_edge_hash_multimap_base_type(sz)
    6320             :              {}
    6321             : #endif
    6322           0 :           rose_graph_integerpair_edge_hash_multimap(const rose_graph_integerpair_edge_hash_multimap& rhs)
    6323           0 :              : rose_graph_integerpair_edge_hash_multimap_base_type(rhs),parent(rhs.parent)
    6324             :              {}
    6325             : 
    6326             :           void set_parent(SgNode * new_parent)
    6327             :              {
    6328             :                parent = new_parent;
    6329             :              }
    6330             :           SgNode * get_parent()
    6331             :              {
    6332             :                return parent;
    6333             :              }
    6334             : 
    6335           0 :           void delete_elements()
    6336             :              {
    6337             :              }
    6338             : 
    6339           0 :          ~rose_graph_integerpair_edge_hash_multimap()
    6340           0 :              {
    6341           0 :                delete_elements();
    6342             :              }
    6343             : 
    6344             :         friend class AST_FILE_IO;
    6345             :         friend class SgSymbolTableStorageClass;
    6346             :         friend class EasyStorage<rose_graph_integerpair_edge_hash_multimap*>;
    6347             :    };
    6348             : 
    6349             : std::ostream & operator<< ( std::ostream & os, const rose_graph_integerpair_edge_hash_multimap::iterator & rhm_it );
    6350             : 
    6351             : 
    6352             : 
    6353             : /*! \brief Hash table support for graph IR nodes within ROSE (used to lookup nodes and edges index values from lables).
    6354             :  */
    6355             : 
    6356             : // DQ (5/1/2009): This is added to support lookup of indexes based on labels (can be used for nodes or edges).
    6357             : // tps (11/18/2009) : This cannot be correct since the constructor takes a string not an int.
    6358             : // CH (4/9/2010): Use boost::unordered instead
    6359             : typedef rose_hash::unordered_multimap<std::string, int> rose_graph_string_integer_hash_multimap_base_type;
    6360           0 : class rose_graph_string_integer_hash_multimap : public rose_graph_string_integer_hash_multimap_base_type
    6361             :    {
    6362             :      protected:
    6363             :        // DQ (4/25/2009): We need to change this name since I think we just want the
    6364             :        // associated IR node in the AST, and not any concept of parent in the graph.
    6365             :           SgNode* parent;
    6366             : 
    6367             :      public:
    6368           0 :           rose_graph_string_integer_hash_multimap()
    6369           0 :              : rose_graph_string_integer_hash_multimap_base_type(), parent(NULL)
    6370             :              {}
    6371             :          // tps (11/18/2009) : This cannot be correct since the constructor takes a string not an int.
    6372             : #if 0
    6373             :           rose_graph_string_integer_hash_multimap(int sz)
    6374             :              : rose_graph_string_integer_hash_multimap_base_type(sz), parent(NULL)
    6375             :              {}
    6376             : #endif
    6377           0 :           rose_graph_string_integer_hash_multimap(const rose_graph_string_integer_hash_multimap & rhs)
    6378           0 :              : rose_graph_string_integer_hash_multimap_base_type(rhs),parent(rhs.parent)
    6379             :              {}
    6380             : 
    6381             :        // See note (above) about name change to the associated data member for these access functions.
    6382             :           void set_parent(SgNode * new_parent)
    6383             :              {
    6384             :                parent = new_parent;
    6385             :              }
    6386             :           SgNode * get_parent()
    6387             :              {
    6388             :                return parent;
    6389             :              }
    6390             : 
    6391           0 :           void delete_elements()
    6392             :              {
    6393             :              }
    6394             : 
    6395           0 :          ~rose_graph_string_integer_hash_multimap()
    6396           0 :              {
    6397           0 :                delete_elements();
    6398             : 
    6399           0 :                parent = NULL;
    6400             :              }
    6401             : 
    6402             :         friend class AST_FILE_IO;
    6403             :         friend class SgSymbolTableStorageClass;
    6404             :         friend class EasyStorage<rose_graph_string_integer_hash_multimap*>;
    6405             :    };
    6406             : 
    6407             : std::ostream & operator<< ( std::ostream & os, const rose_graph_string_integer_hash_multimap::iterator & rhm_it );
    6408             : 
    6409             : // DQ (11/26/2005): Support for visitor pattern.
    6410             : class ROSE_VisitTraversal;
    6411             : class ROSE_VisitorPattern;
    6412             : 
    6413             : // DQ (3/12/2007): Added mangle name map
    6414             : // typedef std::map<SgNode*,std::string>       SgMangledNameList;
    6415             : // typedef SgMangledNameList*                  SgMangledNameListPtr;
    6416             : 
    6417             : // DQ (12/23/2005): support for traversal of AST using visitor pattern
    6418             : ROSE_DLL_API void traverseMemoryPoolNodes          ( ROSE_VisitTraversal & traversal );
    6419             : ROSE_DLL_API void traverseMemoryPoolVisitorPattern ( ROSE_VisitorPattern & visitor );
    6420             : 
    6421             : // DQ (2/9/2006): Added to support traversal over single representative of each IR node
    6422             : // This traversal helps support intrnal tools that call static member functions.
    6423             : ROSE_DLL_API void traverseRepresentativeNodes ( ROSE_VisitTraversal & traversal );
    6424             : 
    6425             : // DQ (6/7/2010): Change the return type to size_t to support larger number of IR nodes
    6426             : // using values that overflow signed values of int.
    6427             : // DQ (1/2/2006): Support for computing the total number of IR nodes in use within an AST
    6428             : // computation is done based on the memory pools (so it is exact).
    6429             : // int numberOfNodes();
    6430             : // int memoryUsage();
    6431             : ROSE_DLL_API size_t numberOfNodes();
    6432             : ROSE_DLL_API size_t memoryUsage();
    6433             : 
    6434             : // DQ: This function is used by the SgNode object to connect the unparser (in ROSE) to the AST.
    6435             : ROSE_DLL_API std::string globalUnparseToString ( const SgNode* astNode, SgUnparse_Info* inputUnparseInfoPointer = NULL );
    6436             : 
    6437             : // DQ: These functions are used by soem specific STL containers to connect the unparser (in ROSE) to the AST (mostly for name qualification).
    6438             : // DQ (9/13/2014): Added support for more general unparsing of STL containers of IR nodes (at least these).
    6439             : ROSE_DLL_API std::string globalUnparseToString ( const SgTemplateParameterPtrList* templateParameterList, SgUnparse_Info* inputUnparseInfoPointer = NULL );
    6440             : ROSE_DLL_API std::string globalUnparseToString ( const SgTemplateArgumentPtrList* templateArgumentList, SgUnparse_Info* inputUnparseInfoPointer = NULL );
    6441             : 
    6442             : 
    6443             : // MS 2002: global type
    6444             : /*! \brief Access to C++ Run Time Information (RTI)
    6445             : 
    6446             :     I'm unclear as to where this is used (Markus put it here, I think).
    6447             : 
    6448             :     \internal This is not a part of the public interface to SAGE III.
    6449             : 
    6450             :  */
    6451      794154 : class RTIMemberData
    6452             :    {
    6453             :   // DQ (12/31/2005): Note that we can't use "using namespace std;"
    6454             :   // to simplify this code, or so it seems.
    6455             :      public:
    6456             :           // The first two of these fields are constants, and so this avoids the constructor
    6457             :           const char* type;
    6458             :           const char* name;
    6459             :           std::string value;
    6460             : 
    6461      377412 :           RTIMemberData(): type(NULL), name(NULL), value() {}
    6462             : 
    6463      377412 :           RTIMemberData(const char* type0, const char* name0, const std::string& value0)
    6464      377412 :              : type(type0), name(name0), value(value0)
    6465             :              {}
    6466             : #if 0 // JJW this should not be used
    6467             :           RTIMemberData(char* type0, char* name0, char* value0)
    6468             :              : type(std::string(type0)), name(std::string(name0)), value(std::string(value0))
    6469             :              {}
    6470             : #endif
    6471             :    };
    6472             : 
    6473             : typedef std::vector<RTIMemberData> RTIReturnType;
    6474             : 
    6475             : struct ReferenceToPointerHandler;
    6476             : 
    6477             : 
    6478             : /*! \brief Supporting class from copy mechanism within ROSE.
    6479             : 
    6480             :     This class forms a base class for the SgShallowCopy and SgTreeCopy
    6481             :     classes to support the control of copying of subtrees (what IR nodes
    6482             :     are copied by a deep or shallow copy).
    6483             : 
    6484             :     To tailor a specific type of copy operation derive a class from this
    6485             :     abstract class and define the clone_node function as required.
    6486             :     context information if required muyst be obtained through local
    6487             :     analysis inside the function using the parent or scope information
    6488             :     at each IR node.
    6489             : 
    6490             :     \note This is an abstract class.
    6491             : 
    6492             :     \internal Used in ROSETTA generated copy functions on each IR node.
    6493             :               The location of this code should perhaps be changed to be in the
    6494             :               generate copy code rather than Node.code in ROSETTA/Grammar.
    6495             :  */
    6496           0 : class SgCopyHelp
    6497             :    {
    6498             :      public:
    6499             :       // STL map type
    6500             :          typedef std::map<const SgNode*,SgNode*> copiedNodeMapType;
    6501             : 
    6502             :      private:
    6503             :       // DQ (10/8/2007): Added support for the depth to be kept track of in the AST copy mechansim.
    6504             :      //! This data member records the depth of the traversal (root node == 0)
    6505             :          int depth;
    6506             : 
    6507             :       // This is mostly used for SgSymbol IR nodes (but will likely be used for other IR nodes in the future.
    6508             :      //! This is internal state used to asscociate pairs of IR nodes copied instead of shared.
    6509             :          copiedNodeMapType copiedNodeMap;
    6510             : 
    6511             :      public:
    6512             : 
    6513             :       // STL map iterator type
    6514             :          typedef copiedNodeMapType::iterator copiedNodeMapTypeIterator;
    6515             : 
    6516             : #if 0
    6517             :        // This function is redundant.  All of its functionality can be placed into the virtual copyAst() member function.
    6518             :           virtual bool clone_node( const SgNode *n ) const = 0;
    6519             : #endif
    6520             : 
    6521             :           virtual SgNode *copyAst( const SgNode *n ) = 0;
    6522             : 
    6523             :        // Default constructor (required to initialize the depth
    6524           0 :           SgCopyHelp() : depth(0) {}
    6525             : 
    6526             :        // Defined the virtual destructor
    6527           0 :           virtual ~SgCopyHelp() {}
    6528             : 
    6529             :        // DQ (10/8/2007): Access functions for the depth (inlined for performance).
    6530       44373 :           int get_depth() { return depth; }
    6531       44373 :           void incrementDepth() { depth++; }
    6532       44373 :           void decrementDepth() { depth--; }
    6533       19498 :           copiedNodeMapType & get_copiedNodeMap() { return copiedNodeMap; }
    6534             : 
    6535             :        // Reset the state saved
    6536             :           void clearState() { depth = 0; copiedNodeMap.clear(); }
    6537             : 
    6538             :        // Added things that generate symbols to the state (could be SgDeclarationStatement or SgInitializedName objects).
    6539             :           void insertCopiedNodePair( const SgNode* key, SgNode* value );
    6540             : 
    6541             :    };
    6542             : 
    6543             : 
    6544             : /*! \brief Supporting class for "Shallow" copies of the AST.
    6545             : 
    6546             :     This class supports only shallow copies of the AST.
    6547             : 
    6548             :  */
    6549           0 : class SgShallowCopy : public SgCopyHelp
    6550             :    {
    6551             :      public:
    6552             : #if 0
    6553             :           bool clone_node( const SgNode *n ) const { return false; }
    6554             : #endif
    6555           0 :           SgNode *copyAst( const SgNode *n ) { return const_cast<SgNode *>(n); }
    6556             : 
    6557             : #if 0
    6558             :        // JJW 10-25-2007 Removed this because using it makes code very prone to bugs
    6559             :        // PC (8/7/2006): static instances of SgCopyHelp subtypes without any attributes
    6560             :        // TODO: make this functionality generic within ROSETTA
    6561             :      private:
    6562             :           static SgShallowCopy *p_static_instance;
    6563             :      public:
    6564             :           static SgShallowCopy &static_instance()
    6565             :              {
    6566             :                if (p_static_instance == NULL)
    6567             :                   {
    6568             :                     p_static_instance = new SgShallowCopy;
    6569             :                   }
    6570             :                return *p_static_instance;
    6571             :              }
    6572             : #endif
    6573             : 
    6574             :    };
    6575             : 
    6576             : 
    6577             : /*! \brief Supporting class for "Deep" copies of the AST.
    6578             : 
    6579             :     This class supports only deep copies of the AST.
    6580             : 
    6581             : \internal The name of this class should perhaps be changed to reflect that it is a "deep" copy.
    6582             : 
    6583             :  */
    6584       71798 : class ROSE_DLL_API SgTreeCopy : public SgCopyHelp
    6585             :    {
    6586             :      public:
    6587             : #if 0
    6588             :           bool clone_node( const SgNode *n ) const;
    6589             : #endif
    6590             :           SgNode *copyAst( const SgNode *n );
    6591             : 
    6592             : #if 0
    6593             :        // JJW 10-25-2007 Removed this because using it makes code very prone to bugs
    6594             :        // PC (8/7/2006): static instances of SgCopyHelp subtypes without any attributes
    6595             :        // TODO: make this functionality generic within ROSETTA
    6596             :      private:
    6597             :           static SgTreeCopy *p_static_instance;
    6598             :      public:
    6599             :           static SgTreeCopy &static_instance()
    6600             :              {
    6601             :                if (p_static_instance == NULL)
    6602             :                   {
    6603             :                     p_static_instance = new SgTreeCopy;
    6604             :                   }
    6605             :                return *p_static_instance;
    6606             :              }
    6607             : #endif
    6608             : 
    6609             :    };
    6610             : 
    6611             : // PC (8/3/2006): Support for subnode capturing
    6612             : /*! \brief Supporting template class for "capturing" copies of the AST.
    6613             : 
    6614             : This class allows for retrieval of the clone of arbitrary source nodes
    6615             : underneath the copied node.
    6616             : 
    6617             : */
    6618             : template <class CopyType>
    6619             : class SgCapturingCopy : public CopyType
    6620             :    {
    6621             :      protected:
    6622             :           std::vector<SgNode *> origList;
    6623             :           std::vector<SgNode *> copyList;
    6624             :      public:
    6625           0 :           SgCapturingCopy( std::vector<SgNode *> origList, const CopyType &base = CopyType() )
    6626             :           // : origList(origList), CopyType(base)
    6627           0 :              :  CopyType(base), origList(origList), copyList(origList.size())
    6628           0 :              { }
    6629           0 :           virtual ~SgCapturingCopy() { }
    6630           0 :           SgNode *copyAst( const SgNode *n )
    6631             :              {
    6632           0 :                SgNode *newNode = CopyType::copyAst(n);
    6633           0 :                int listSize = origList.size();
    6634           0 :                for (int i = 0; i < listSize; i++)
    6635             :                   {
    6636           0 :                     if (origList[i] == n)
    6637             :                        {
    6638           0 :                          copyList[i] = newNode;
    6639             :                        }
    6640             :                   }
    6641           0 :                return newNode;
    6642             :              }
    6643           0 :           const std::vector<SgNode *> &get_copyList()
    6644             :              {
    6645             :                return copyList;
    6646             :              }
    6647             :    };
    6648             : 
    6649             : // DQ (12/22/2005): Jochen's support for a constant (non-NULL) valued pointer
    6650             : // to use to distinguish valid from invalid IR nodes within the memory pools.
    6651             : /*! \brief This Namespace supports the file I/O for the AST.
    6652             :  */
    6653             : namespace AST_FileIO
    6654             :    {
    6655             :   /*! \brief This function returns a static pointer used with SgNode::p_freepointer.
    6656             : 
    6657             :       This function returns
    6658             :       returns an internally held (function local data) static pointer value
    6659             :       used by SgNode::p_freepointer to identify non-NULL value representing
    6660             :       valid IR node in memory pool.  A NULL pointer represents last entry in
    6661             :       the memory pool.  This value allows us to distinguish the entries, and not
    6662             :       require additional memory storage on each IR node.
    6663             :    */
    6664             :      SgNode* IS_VALID_POINTER();
    6665             : 
    6666             :   /*! \brief Similar value as above function for reprentation of subsets of the AST
    6667             :    */
    6668             :      SgNode* TO_BE_COPIED_POINTER();
    6669             :    }
    6670             : 
    6671             : // DQ (12/26/2005): Simple traversal base class for use with ROSE style
    6672             : // traversals.  Need to move this to a different location later.
    6673        2705 : class ROSE_VisitTraversal
    6674             :    {
    6675             :      public:
    6676        5355 :           virtual ~ROSE_VisitTraversal() {};
    6677             :           virtual void visit (SgNode* node) = 0;
    6678        5339 :           void traverseMemoryPool()
    6679             :              {
    6680        5339 :                traverseMemoryPoolNodes(*this);
    6681        2868 :              }
    6682           0 :           void traverseRepresentativeIRnodes()
    6683             :              {
    6684           0 :                traverseRepresentativeNodes(*this);
    6685           0 :              }
    6686             :    };
    6687             : 
    6688             : 
    6689             : // DQ (3/18/2006): Forward declarations of classes used to control and tailor the code generation.
    6690             : class UnparseDelegate;
    6691             : class UnparseFormatHelp;
    6692             : 
    6693             : // DQ (4/19/2006): forward declaration of PreprocessingInfo so that
    6694             : // PreprocessingInfo can follow Sage III class declarations and contain
    6695             : // a Sg_File_Info object (to record the filename of the comments and
    6696             : // CPP directoves).
    6697             : // class PreprocessingInfo;
    6698             : 
    6699             : // DQ (4/32/2006): g++ 4.0.2 requires a forward declaration for this (a friend class declaration is not sufficient!)
    6700             : class AstSpecificDataManagingClassStorageClass;
    6701             : 
    6702             : // 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).
    6703             : std::ostream & operator<< ( std::ostream & os, const Rose_STL_Container<std::string> & l );
    6704             : 
    6705             : // DQ (8/8/2008): Added support for std::multimap<rose_addr_t, rose_addr_t> used in binary file format.
    6706             : std::ostream & operator<< ( std::ostream & os, const std::multimap<rose_addr_t, rose_addr_t> & m );
    6707             : std::ostream & operator<< ( std::ostream & os, const std::vector<std::pair<rose_addr_t, rose_addr_t> > & l );
    6708             : // struct SgAsmGenericFormat::fileDetails;
    6709             : // std::ostream & operator<< ( std::ostream & os, const SgAsmGenericFormat::fileDetails & sb );
    6710             : std::ostream & operator<< ( std::ostream & os, const struct stat & sb );
    6711             : 
    6712             : #if 0
    6713             : // DQ (8/28/2006): This fixes a bug in ROSE where the namespace scope is not defined
    6714             : // to permit get_scope() to return a valid pointer (non NULL) when processing the
    6715             : // STL used in the functions (return types, I think).
    6716             : namespace VirtualCFG
    6717             :    {
    6718             :      int dummy_function_in_predeclared_virtualCFG_namespace(void);
    6719             :    }
    6720             : #endif
    6721             : 
    6722             : // DQ (5/8/2007): Added support for type elaboration lists, hidden type lists, and hidden declaration lists.
    6723             : std::ostream & operator<< ( std::ostream & os, const std::set<SgSymbol*> & l );
    6724             : 
    6725             : 
    6726             : // DQ (8/21/2006): Jeremiah Willcock's Virtual CFG mechanism.
    6727             : //#include "virtualCFG.h"
    6728             : // tps (8/13/2007): working on binary cfg mechanism.
    6729             : //#include "virtualBinCFG.h"
    6730             : 
    6731             : 
    6732             : 
    6733             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
    6734             : 
    6735             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    6736             : 
    6737             : #if 1
    6738             : // Class Definition for SgNode
    6739             : class ROSE_DLL_API SgNode  
    6740             :    {
    6741             :      public:
    6742             : 
    6743             : 
    6744             : /* #line 6745 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    6745             : 
    6746             :           virtual SgNode* copy ( SgCopyHelp& help) const;
    6747             : // Start of memberFunctionString
    6748             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
    6749             : 
    6750             : // *** COMMON CODE SECTION BEGINS HERE ***
    6751             : 
    6752             :     public:
    6753             : 
    6754             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
    6755             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
    6756             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
    6757             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
    6758             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
    6759             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
    6760             : 
    6761             :       /*! \brief returns a string representing the class name */
    6762             :           virtual std::string class_name() const;
    6763             : 
    6764             :       /*! \brief returns new style SageIII enum values */
    6765             :           virtual VariantT variantT() const; // MS: new variant used in tree traversal
    6766             : 
    6767             :       /*! \brief static variant value */
    6768             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
    6769             :        // static const VariantT static_variant = V_SgNode;
    6770             :           enum { static_variant = V_SgNode };
    6771             : 
    6772             :        /* the generated cast function */
    6773             :       /*! \brief Casts pointer from base class to derived class */
    6774             :           ROSE_DLL_API friend       SgNode* isSgNode(       SgNode * s );
    6775             : 
    6776             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
    6777             :           ROSE_DLL_API friend const SgNode* isSgNode( const SgNode * s );
    6778             : 
    6779             :      // ******************************************
    6780             :      // * Memory Pool / New / Delete
    6781             :      // ******************************************
    6782             : 
    6783             :      public:
    6784             :           /// \private
    6785             :           static const unsigned pool_size; //
    6786             :           /// \private
    6787             :           static std::vector<unsigned char *> pools; //
    6788             :           /// \private
    6789             :           static SgNode * next_node; // 
    6790             : 
    6791             :           /// \private
    6792             :           static unsigned long initializeStorageClassArray(SgNodeStorageClass *); //
    6793             : 
    6794             :           /// \private
    6795             :           static void clearMemoryPool(); //
    6796             :           static void deleteMemoryPool(); //
    6797             : 
    6798             :           /// \private
    6799             :           static void extendMemoryPoolForFileIO(); //
    6800             : 
    6801             :           /// \private
    6802             :           static SgNode * getPointerFromGlobalIndex(unsigned long); //
    6803             :           /// \private
    6804             :           static SgNode * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
    6805             : 
    6806             :           /// \private
    6807             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
    6808             :           /// \private
    6809             :           static void resetValidFreepointers(); //
    6810             :           /// \private
    6811             :           static unsigned long getNumberOfLastValidPointer(); //
    6812             : 
    6813             : 
    6814             : #if defined(INLINE_FUNCTIONS)
    6815             :       /*! \brief returns pointer to newly allocated IR node */
    6816             :           inline void *operator new (size_t size);
    6817             : #else
    6818             :       /*! \brief returns pointer to newly allocated IR node */
    6819             :           void *operator new (size_t size);
    6820             : #endif
    6821             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
    6822             :           void operator delete (void* pointer, size_t size);
    6823             : 
    6824             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
    6825           0 :           void operator delete (void* pointer)
    6826             :              {
    6827             :             // This is the generated delete operator...
    6828           0 :                SgNode::operator delete (pointer,sizeof(SgNode));
    6829             :              }
    6830             : 
    6831             :       /*! \brief Returns the total number of IR nodes of this type */
    6832             :           static size_t numberOfNodes();
    6833             : 
    6834             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
    6835             :           static size_t memoryUsage();
    6836             : 
    6837             :       // End of scope which started in IR nodes specific code 
    6838             :       /* */
    6839             : 
    6840             :       /* name Internal Functions
    6841             :           \brief Internal functions ... incomplete-documentation
    6842             : 
    6843             :           These functions have been made public as part of the design, but they are suggested for internal use 
    6844             :           or by particularly knowledgeable users for specialized tools or applications.
    6845             : 
    6846             :           \internal We could not make these private because they are required by user for special purposes. And 
    6847             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
    6848             :          
    6849             :        */
    6850             : 
    6851             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
    6852             :        // overridden in every class by *generated* implementation
    6853             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
    6854             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer();
    6855             :        // MS: 06/28/02 container of names of variables or container indices 
    6856             :        // used used in the traversal to access AST successor nodes
    6857             :        // overridden in every class by *generated* implementation
    6858             :       /*! \brief container of names of variables or container indices used used in the traversal
    6859             :           to access AST successor nodes overridden in every class by *generated* implementation */
    6860             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer();
    6861             : 
    6862             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
    6863             :        // than all the vector copies. The implementation for these functions is generated for each class.
    6864             :       /*! \brief return number of children in the traversal successor list */
    6865             :           virtual size_t get_numberOfTraversalSuccessors();
    6866             :       /*! \brief index-based access to traversal successors by index number */
    6867             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx);
    6868             :       /*! \brief index-based access to traversal successors by child node */
    6869             :           virtual size_t get_childIndex(SgNode *child);
    6870             : 
    6871             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    6872             :        // MS: 08/16/2002 method for generating RTI information
    6873             :       /*! \brief return C++ Runtime-Time-Information */
    6874             :           virtual RTIReturnType roseRTI();
    6875             : #endif
    6876             :       /* */
    6877             : 
    6878             : 
    6879             : 
    6880             :       /* name Deprecated Functions
    6881             :           \brief Deprecated functions ... incomplete-documentation
    6882             : 
    6883             :           These functions have been deprecated from use.
    6884             :        */
    6885             :       /* */
    6886             : 
    6887             :       /*! returns a C style string (char*) representing the class name */
    6888             :           virtual const char* sage_class_name() const  ROSE_DEPRECATED_FUNCTION;
    6889             : 
    6890             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
    6891             :       // getVariant() in #if 0 block to prevent confusing Doxygen
    6892             : #if 0
    6893             :       /*! returns old style Sage II enum values */
    6894             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
    6895             :       /*! returns old style Sage II enum values */
    6896             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
    6897             : #endif
    6898             :       /* */
    6899             : 
    6900             : 
    6901             : 
    6902             : 
    6903             :      public:
    6904             :       /* name Traversal Support Functions
    6905             :           \brief Traversal support functions ... incomplete-documentation
    6906             : 
    6907             :           These functions have been made public as part of the design, but they are suggested for internal use 
    6908             :           or by particularly knowledgable users for specialized tools or applications.
    6909             :        */
    6910             :       /* */
    6911             : 
    6912             :        // DQ (11/26/2005): Support for visitor pattern mechanims
    6913             :        // (inferior to ROSE traversal mechanism, experimental).
    6914             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    6915             :        */
    6916             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
    6917             : 
    6918             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
    6919             :       /*! \brief support for the classic visitor pattern done in GoF */
    6920             :           virtual void accept (ROSE_VisitorPattern & visitor);
    6921             : 
    6922             :        // DQ (12/26/2005): Support for traversal based on the memory pool
    6923             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
    6924             :        */
    6925             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
    6926             : 
    6927             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    6928             :        */
    6929             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
    6930             : 
    6931             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
    6932             :        // This traversal helps support internal tools that call static member functions.
    6933             :        // note: this function operates on the memory pools.
    6934             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
    6935             :        */
    6936             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
    6937             :       /* */
    6938             : 
    6939             : 
    6940             :      public:
    6941             :       /* name Memory Allocation Functions
    6942             :           \brief Memory allocations functions ... incomplete-documentation
    6943             : 
    6944             :           These functions have been made public as part of the design, but they are suggested for internal use 
    6945             :           or by particularly knowledgable users for specialized tools or applications.
    6946             :        */
    6947             :       /* */
    6948             : 
    6949             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    6950             : 
    6951             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    6952             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    6953             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    6954             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    6955             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    6956             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    6957             :           being used with the AST File I/O mechanism.
    6958             :        */
    6959             :           virtual bool isInMemoryPool();
    6960             : 
    6961             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    6962             : 
    6963             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    6964             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    6965             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    6966             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    6967             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    6968             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    6969             :           being used with the AST File I/O mechanism.
    6970             :        */
    6971             :           virtual void checkDataMemberPointersIfInMemoryPool();
    6972             : 
    6973             :       // DQ (4/30/2006): Modified to be a const function.
    6974             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
    6975             : 
    6976             :           This functions is part of general support for many possible tools to operate 
    6977             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
    6978             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
    6979             :           less than the set of pointers used by the AST file I/O. This is part of
    6980             :           work implemented by Andreas, and support tools such as the AST graph generation.
    6981             : 
    6982             :           \warning This function can return unexpected data members and thus the 
    6983             :                    order and the number of elements is unpredicable and subject 
    6984             :                    to change.
    6985             : 
    6986             :           \returns STL vector of pairs of SgNode* and strings
    6987             :        */
    6988             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const;
    6989             : 
    6990             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
    6991             : 
    6992             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
    6993             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
    6994             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
    6995             : 
    6996             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
    6997             :                    and subject to change.
    6998             :        */
    6999             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*);
    7000             : 
    7001             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
    7002             : 
    7003             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
    7004             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
    7005             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
    7006             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
    7007             : 
    7008             :           \warning The mapping on children to integer values could change from release to release of ROSE.
    7009             : 
    7010             :           \returns long
    7011             :        */
    7012             :           virtual long getChildIndex( SgNode* childNode ) const;
    7013             : 
    7014             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
    7015             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    7016             :       /* \brief Constructor for use by AST File I/O Mechanism
    7017             : 
    7018             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
    7019             :           which obtained via fast binary file I/O from disk.
    7020             :        */
    7021             :        // SgNode( SgNodeStorageClass& source );
    7022             : 
    7023             : 
    7024             : 
    7025             : 
    7026             : 
    7027             :  // JH (10/24/2005): methods added to support the ast file IO
    7028             :     private:
    7029             : 
    7030             :       /* name AST Memory Allocation Support Functions
    7031             :           \brief Memory allocations support....
    7032             : 
    7033             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
    7034             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    7035             :           and support the AST File I/O Mechanism.
    7036             :        */
    7037             :       /* */
    7038             : 
    7039             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
    7040             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
    7041             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
    7042             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
    7043             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
    7044             :           a correspinding one in the AST_FILE_IO class!
    7045             :        */
    7046             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    7047             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    7048             :       /* \brief Typedef used for low level memory access.
    7049             :        */
    7050             :        // typedef unsigned char* TestType;
    7051             : 
    7052             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    7053             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    7054             :       /* \brief Typedef used to hold memory addresses as values.
    7055             :        */
    7056             :        // typedef unsigned long  AddressType;
    7057             : 
    7058             : 
    7059             : 
    7060             :        // necessary, to have direct access to the p_freepointer and the private methods !
    7061             :       /*! \brief friend class declaration to support AST File I/O */
    7062             :           friend class AST_FILE_IO;
    7063             : 
    7064             :       /*! \brief friend class declaration to support AST File I/O */
    7065             :           friend class SgNodeStorageClass;
    7066             : 
    7067             :       /*! \brief friend class declaration to support AST File I/O */
    7068             :           friend class AstSpecificDataManagingClass;
    7069             : 
    7070             :       /*! \brief friend class declaration to support AST File I/O */
    7071             :           friend class AstSpecificDataManagingClassStorageClass;
    7072             :     public:
    7073             :       /*! \brief IR node constructor to support AST File I/O */
    7074             :           SgNode( const SgNodeStorageClass& source );
    7075             : 
    7076             :  // private: // JJW hack
    7077             :        /*
    7078             :           name AST Memory Allocation Support Variables
    7079             :           Memory allocations support variables 
    7080             : 
    7081             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
    7082             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    7083             :           and support the AST File I/O Mechanism.
    7084             :        */
    7085             :       /* */
    7086             : 
    7087             :     public:
    7088             : 
    7089             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
    7090             :       // to current node (so that it will work cleanly with build functions to specify patterns).
    7091             :       // virtual SgNode* addRegExpAttribute();
    7092             :       /*! \brief Support for AST matching using regular expression.
    7093             : 
    7094             :           This support is incomplete and the subject of current research to define 
    7095             :           RegEx trees to support inexact matching.
    7096             :        */
    7097             :           SgNode* addRegExpAttribute(std::string s, AstRegExAttribute* a);
    7098             : 
    7099             : // *** COMMON CODE SECTION ENDS HERE ***
    7100             : 
    7101             : 
    7102             : // End of memberFunctionString
    7103             : // Start of memberFunctionString
    7104             : /* #line 1186 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
    7105             : 
    7106             :      public:
    7107             : 
    7108             :       // DQ (7/23/2005): Let these be automatically generated by ROSETTA!
    7109             :       // Opps, these can't be generated by ROSETTA, since it would result
    7110             :       // in the recursive call to set_isModified (endless recursion).
    7111             : 
    7112             :       /*! \brief All nodes in the AST contain a isModified flag used to track changes to the AST.
    7113             : 
    7114             :            This flag can be set but this is typically an internal function used to track the modifications to AST.
    7115             :            Within future unparsing this flag will control where the token stream is used alternatively to the
    7116             :            code generation from the AST.
    7117             :        */
    7118             :           void set_isModified( bool isModified );
    7119             : 
    7120             :       /*! \brief Many nodes can hide other AST nodes and we need to track when outer nodes contain modified nodes even if they are not themselves modified.
    7121             : 
    7122             :           This flag is required to support the unparsing using the token stream.
    7123             :        */
    7124             :           void set_containsTransformation( bool containsTransformation );
    7125             : 
    7126             : 
    7127             :       /*! \brief Acess function for isModified flag
    7128             : 
    7129             :           This flag records if the current IR node has been modified.
    7130             :           It is set to false after and ROSE front-end processing.
    7131             :        */
    7132             :           bool get_isModified() const;
    7133             : 
    7134             :       /*! \brief Acess function for containsTransformation flag
    7135             : 
    7136             :           This flag records if the current IR node has a nested AST node that is marked as being modified.
    7137             :        */
    7138             :           bool get_containsTransformation() const;
    7139             : 
    7140             :       //! All nodes in the AST contain a reference to a parent node
    7141             :           void set_parent ( SgNode* parent );
    7142             : 
    7143             :        //! Access function for parent node.
    7144             :           SgNode* get_parent () const;
    7145             : 
    7146             :        //! Query function for if the input IR nodes is a child of the current IR node.
    7147             :           bool isChild ( SgNode* node ) const;
    7148             : 
    7149             :         // DQ (4/4/2006): Added optional parameter to customize unparsing
    7150             :        //! This function unparses the AST node (excluding comments and unnecessary white space)
    7151             :         // virtual std::string unparseToString(SgUnparse_Info* info = NULL) const;
    7152             :         // Jeremiah (11/9/2007): The default value is not recognized by gdb.
    7153             :            virtual std::string unparseToString(SgUnparse_Info* info) const;
    7154             : 
    7155             :         // DQ (9/6/2010): Move this to the source file (we want to eliminate function definitions in header files).
    7156             :         // The existence of this function addresses a bug in gdb (see comment from Jeremiah (11/9/2007) above).
    7157             :         // inline std::string unparseToString() const { return this->unparseToString(NULL); }
    7158             :            std::string unparseToString() const;
    7159             : 
    7160             :        //! This function unparses the AST node (including comments and white space)
    7161             :           std::string unparseToCompleteString();
    7162             : 
    7163             :       /*! \brief Command line support for this compilation
    7164             :           The command line is saved as a static variable so that it will be available to
    7165             :           support the rewrite mechanism.
    7166             : 
    7167             :           \param argv - vector of strings holding command line arguments
    7168             :           \param newFileName - current file name being used (part of support for multiple files on command line).
    7169             :           \return returns vector of strings.
    7170             :        */
    7171             :           static std::vector<std::string> buildCommandLineToSubstituteTransformationFile( const std::vector<std::string>& argv, std::string newFileName );
    7172             : 
    7173             :        // JJW (10/16/2008): Replace variant() by variantT() and a cast (the
    7174             :        // numbers are the same, but the enumerator names are different)
    7175  1258042213 :           int variant() const ROSE_DEPRECATED_FUNCTION {return (int)this->variantT();}
    7176             : 
    7177             :        // AS (10/22/2007): build function to return class hierachy subtree of a VariantT
    7178             :           static std::vector<VariantT> getClassHierarchySubTreeFunction( VariantT v);
    7179             :           static void getClassHierarchySubTreeFunction( VariantT v, std::vector<VariantT>&);
    7180             : 
    7181             :       /*! \brief DOCS IN HEADER: Access function for p_isVisited flag used previously by the AST traversals.
    7182             : 
    7183             :           \deprecated This function is not used and will be removed.
    7184             :           \return Returns bool; true if previously visited within current AST traversal.
    7185             :        */
    7186             :           bool get_isVisited () const ROSE_DEPRECATED_FUNCTION;
    7187             : 
    7188             :       /*! \brief Access function for p_isVisited flag used previously by the AST traversals.
    7189             : 
    7190             :           \deprecated This function is not used and will be removed.
    7191             :        */
    7192             :           void set_isVisited ( bool isVisited ) ROSE_DEPRECATED_FUNCTION;
    7193             : 
    7194             :       /*! \brief Access function for performance optimizing global mangled name map.
    7195             : 
    7196             :           This mangle name caching is implemented to support better performance.
    7197             :        */
    7198             :           static std::map<SgNode*,std::string> & get_globalMangledNameMap();
    7199             : 
    7200             :       /*! \brief Support to clear the performance optimizing global mangled name map.
    7201             :        */
    7202             :           static void clearGlobalMangledNameMap();
    7203             : 
    7204             :       /*! \brief Access function for lower level optimizing of global mangled name map.
    7205             : 
    7206             :           This mangle name caching is implemented to shorter strings used in the globalMangledNameMap
    7207             :           mechanism.
    7208             :        */
    7209             :           static std::map<std::string, int> & get_shortMangledNameCache();
    7210             : 
    7211             :       /*! \brief Access function for name qualification support (for names).
    7212             : 
    7213             :           This qualified name is stored with reference to where the name is used (as required) instead
    7214             :           of with the IR node of what is names (e.g. function declaration, variable declaration, etc.).
    7215             :        */
    7216             :           static std::map<SgNode*,std::string> & get_globalQualifiedNameMapForNames();
    7217             : 
    7218             :       /*! \brief Access function for name qualification support (for names).
    7219             : 
    7220             :           This qualified name is stored with reference to where the name is used (as required) instead
    7221             :           of with the IR node of what is names (e.g. function declaration, variable declaration, etc.).
    7222             :        */
    7223             :           static void set_globalQualifiedNameMapForNames ( const std::map<SgNode*,std::string> & X );
    7224             : 
    7225             :       /*! \brief Access function for name qualification support (for type).
    7226             : 
    7227             :           This qualified name is stored with reference to where the type is used (as required) instead
    7228             :           of with the IR node representing the type (which are typically shared) (e.g. function return
    7229             :           type, variable type, etc.).
    7230             :        */
    7231             :           static std::map<SgNode*,std::string> & get_globalQualifiedNameMapForTypes();
    7232             : 
    7233             :       /*! \brief Access function for name qualification support (for type).
    7234             : 
    7235             :           This qualified name is stored with reference to where the type is used (as required) instead
    7236             :           of with the IR node representing the type (which are typically shared) (e.g. function return
    7237             :           type, variable type, etc.).
    7238             :        */
    7239             :           static void set_globalQualifiedNameMapForTypes ( const std::map<SgNode*,std::string> & X );
    7240             : 
    7241             :        // DQ (3/13/2019): Added name qualification support for references to types than can embed many types.
    7242             :       /*! \brief Access function for name qualification support (for maps of types).
    7243             : 
    7244             :           This qualified name is stored with reference to where the type is used (as required) instead
    7245             :           of with the IR node representing the type (which are typically shared) (e.g. function return
    7246             :           type, variable type, etc.).
    7247             :        */
    7248             :           static std::map<SgNode*,std::map<SgNode*,std::string> > & get_globalQualifiedNameMapForMapsOfTypes();
    7249             : 
    7250             :        // DQ (3/13/2019): Added name qualification support for references to types than can embed many types.
    7251             :       /*! \brief Access function for name qualification support (for maps of types).
    7252             : 
    7253             :           This qualified name is stored with reference to where the type is used (as required) instead
    7254             :           of with the IR node representing the type (which are typically shared) (e.g. function return
    7255             :           type, variable type, etc.).
    7256             :        */
    7257             :           static void set_globalQualifiedNameMapForMapsOfTypes ( const std::map<SgNode*,std::map<SgNode*,std::string> > & X );
    7258             : 
    7259             :       /*! \brief Access function for name qualification support (for template headers in template declarations).
    7260             : 
    7261             :           This name is stored with reference to where the template declaration is used (as required) instead
    7262             :           of with the IR node (where it could be incorrect).  This design allows it to be computed as needed.
    7263             :           Note that template headers are the substrings "template<typename T>" that apepar in header declarations.
    7264             :           These can be repeated as required for deeply nested templated classes and thus are associated with
    7265             :           name qualification of template declarations (along with the more common form of name qualication
    7266             :           that also applies to template declarations).
    7267             :        */
    7268             :           static std::map<SgNode*,std::string> & get_globalQualifiedNameMapForTemplateHeaders();
    7269             : 
    7270             :       /*! \brief Access function for name qualification support (for template headers in template declarations).
    7271             : 
    7272             :           See documentation in get_globalQualifiedNameMapForTemplateHeaders() (above).
    7273             :        */
    7274             :           static void set_globalQualifiedNameMapForTemplateHeaders ( const std::map<SgNode*,std::string> & X );
    7275             : 
    7276             :       /*! \brief Access function for name qualification support (for names of types).
    7277             : 
    7278             :           This type name is stored with reference to where the type is used (as required) instead
    7279             :           of with the IR node representing the type (which are typically shared) (e.g. function return
    7280             :           type, variable type, etc.).
    7281             :        */
    7282             :           static std::map<SgNode*,std::string> & get_globalTypeNameMap();
    7283             : 
    7284             :       /*! \brief Access function for name qualification support (for names of types).
    7285             : 
    7286             :           This qualified name is stored with reference to where the name is used (as required) instead
    7287             :           of with the IR node of what is names (e.g. function declaration, variable declaration, etc.).
    7288             :        */
    7289             :           static void set_globalTypeNameMap ( const std::map<SgNode*,std::string> & X );
    7290             : 
    7291             : #if 0
    7292             :       /*! \brief Access function for name qualification support (for names in array type dimensions).
    7293             : 
    7294             :           This type name is stored with reference to where the type is used (as required) instead
    7295             :           of with the IR node representing the type (which are typically shared) (e.g. function return
    7296             :           type, variable type, etc.).
    7297             :        */
    7298             :           static std::map<SgNode*,std::vector<std::string> > & get_globalQualifiedNameMapForArrayTypeDimensions();
    7299             : 
    7300             :       /*! \brief Access function for name qualification support (for names in array type dimensions).
    7301             : 
    7302             :           This qualified name is stored with reference to where the name is used (as required) instead
    7303             :           of with the IR node of what is names (e.g. function declaration, variable declaration, etc.).
    7304             :        */
    7305             :           static void set_globalQualifiedNameMapForArrayTypeDimensions ( const std::map<SgNode*, std::vector<std::string> > & X );
    7306             : #endif
    7307             : 
    7308             : #if 0
    7309             :        // DQ (6/21/2011): Added support for the state within the name qualification support to be referenced consistantly independent of recursive calls.
    7310             :       /*! \brief Access function for name qualification support (for names of types).
    7311             : 
    7312             :           This type name is stored with reference to where the type is used (as required) instead
    7313             :           of with the IR node representing the type (which are typically shared) (e.g. function return
    7314             :           type, variable type, etc.).
    7315             :        */
    7316             :           static std::map<SgNode*> & get_globalReferencedNameSet();
    7317             : 
    7318             :       /*! \brief Access function for name qualification support (for names of declarations that have been seen as we traverse the AST).
    7319             : 
    7320             :           This qualified name is stored with reference to where the name is used (as required) instead
    7321             :           of with the IR node of what is names (e.g. function declaration, variable declaration, etc.).
    7322             :        */
    7323             :           static void set_globalReferencedNameSet ( const std::set<SgNode*> & X );
    7324             : #endif
    7325             : 
    7326             : 
    7327             : 
    7328             : 
    7329             :      /* name Persistant Attribute Mechanism
    7330             : 
    7331             :          This is the persistant attribute mechanism for attaching attributed to IR nodes across
    7332             :          multiple passes. Note that these attributes are persistant in that they are preserved
    7333             :          if the AST is written out to a file and read in from a file.  However, virtual function
    7334             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
    7335             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
    7336             :          sophisticated mechanisms are available within the AstAttributeMechanism object
    7337             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
    7338             :          access is required, however mostly only internal tools use this lower level support).
    7339             : 
    7340             :          \internal This used to be a public data member, but has been changed to be a protected
    7341             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
    7342             :          but some of the names and the syntax for calling the interface have changed. The
    7343             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
    7344             :       */
    7345             :      /* */
    7346             :      //! Add a new attribute represented by the named string.
    7347             :          virtual void addNewAttribute(std::string s,AstAttribute* a);
    7348             :      //! Returns attribute of name 's'.
    7349             :          virtual AstAttribute* getAttribute(std::string s) const;
    7350             :      //! Replace existing attribute of name 's' with new AstAttribute.
    7351             :          virtual void updateAttribute(std::string s,AstAttribute* a);  // formerly called: replace in AstAttributeMechanism
    7352             :      /*! \brief This is a wrapper function with the following semantics:
    7353             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
    7354             :          otherwise \b updateAttribute(s,a); is called.
    7355             :       */
    7356             :          virtual void setAttribute(std::string s,AstAttribute* a);
    7357             :      //! Remove attribute of name 's' if present.
    7358             :          virtual void removeAttribute(std::string s);
    7359             :      //! Tests if attribute of name 's' is present.
    7360             :          virtual bool attributeExists(std::string s) const;
    7361             :      //! Returns the number of attributes on this IR node.
    7362             :          virtual int numberOfAttributes() const;
    7363             : 
    7364             :      /*! \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
    7365             :                 a pointer to it is returned, else error.
    7366             : 
    7367             :          This is an access function used for getting the interally held pointer to a valid
    7368             :          AstAttributeMechanism. It provides access to lower level functionality of the
    7369             :          AstAttributeMechanism, put is mostly of use to internal tools.
    7370             :       */
    7371             :          virtual AstAttributeMechanism* get_attributeMechanism() const;
    7372             :      /*!
    7373             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
    7374             : 
    7375             :          This is an access function used for setting the interally held pointer to a valid
    7376             :          AstAttributeMechanism.
    7377             :       */
    7378             :          virtual void set_attributeMechanism(AstAttributeMechanism* a);
    7379             :      /* */
    7380             : 
    7381             : #if ALT_FIXUP_COPY
    7382             :       /* name AST Copy Support Functions
    7383             : 
    7384             :           Support for IR node specific fixup of copy operation.
    7385             :           This function helps reset scopes and build untraversed parts of the
    7386             :           AST that are difficult to have be constructed using the automatically
    7387             :           generated copy functions.
    7388             : 
    7389             :           \implementation These functions are used internally inside the AST copy mechanism.
    7390             :            The public interface for this functionality is given below this section.
    7391             :        */
    7392             :       /* */
    7393             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const;
    7394             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const;
    7395             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const;
    7396             :       /* */
    7397             : #else
    7398             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
    7399             : #endif
    7400             : 
    7401             :       /* name Source Position Information
    7402             :           \brief Support for source code position information of all IR nodes.
    7403             : 
    7404             :           These are the virtual function definitions, they are overloaded for SgLocatedNode
    7405             :           and a few of the SgSupport IR nodes.
    7406             :        */
    7407             :       /* */
    7408             :       /*! \brief File information containing filename, line number, column number,
    7409             :                  and if the SgNode is a part of a new transformation, etc.
    7410             : 
    7411             :           \internal This function is only defined here to make get_file_info usable
    7412             :                     without casting for for different types in polymorphic lists
    7413             :                     actually only defined in SgLocatedNode(s).  It used to be defined
    7414             :                     in the SgLocatedNode class.
    7415             :        */
    7416    61660938 :           virtual Sg_File_Info* get_file_info(void) const { return NULL; }
    7417             : 
    7418             :       /*! \brief New function interface for Sg_File_Info data stores starting
    7419             :                  location of contruct (typically the opening brace or first letter of keyword).
    7420             :        */
    7421           0 :           virtual Sg_File_Info* get_startOfConstruct(void) const {return NULL;}
    7422             : 
    7423             :     /*! \brief New function interface for Sg_File_Info data stores ending
    7424             :                location of contruct (typically the closing brace).
    7425             :      */
    7426        1166 :           virtual Sg_File_Info* get_endOfConstruct(void) const { return NULL; }
    7427             :       /* */
    7428             : 
    7429             :       /* name Control flow graph public functions
    7430             : 
    7431             :           These functions return control flow graph nodes for various positions
    7432             :           around a construct. */
    7433             :       /* */
    7434             : 
    7435             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    7436             : #if 0
    7437             :        // DQ (4/5/2017): Moved these function definition out of the header file to avoid warnings from
    7438             :        // assertion from the header file (OK if it appears once from compiling the source file).
    7439             :      /*! \brief Returns the CFG node for just before this AST node */
    7440             :           VirtualCFG::CFGNode cfgForBeginning()
    7441             :              {
    7442             :               ROSE_ASSERT (this);
    7443             :                return VirtualCFG::CFGNode(this, 0);
    7444             :              }
    7445             : 
    7446             :       /*! \brief Returns the CFG node for just after this AST node */
    7447             :           VirtualCFG::CFGNode cfgForEnd()
    7448             :              {
    7449             :              assert (this);
    7450             :                return VirtualCFG::CFGNode(this, this->cfgIndexForEnd());
    7451             :                   }
    7452             :       /* */
    7453             : #else
    7454             :      /*! \brief Returns the CFG node for just before this AST node */
    7455             :           VirtualCFG::CFGNode cfgForBeginning();
    7456             :       /*! \brief Returns the CFG node for just after this AST node */
    7457             :           VirtualCFG::CFGNode cfgForEnd();
    7458             : #endif
    7459             : #endif
    7460             : 
    7461             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    7462             :       /* name Control flow graph view helper functions
    7463             : 
    7464             :           These functions are used internally inside the control flow graph
    7465             :           view code.  The public interface for this functionality is given
    7466             :           below this section. */
    7467             :       /* */
    7468             : 
    7469             :       /*! \brief Determine the CFG index for the end of this construct. */
    7470             :           virtual unsigned int cfgIndexForEnd() const;
    7471             : 
    7472             :       /*! \brief Determine whether a particular CFG node index is "interesting"
    7473             :           for this kind of node. */
    7474             :           virtual bool cfgIsIndexInteresting(unsigned int index) const;
    7475             : 
    7476             :       /*! \brief Find the index of n in this node's CFG children. */
    7477             :           virtual unsigned int cfgFindChildIndex(SgNode* n);
    7478             : 
    7479             :       /*! \brief Find the index just after n in this node's CFG children. */
    7480             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n);
    7481             : 
    7482             :       /*! \brief Find the out edges of a CFG node -- internal version. */
    7483             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index = false);
    7484             : 
    7485             :       /*! \brief Find the in edges of a CFG node -- internal version. */
    7486             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index = false);
    7487             : #if 0
    7488             :       /*! \brief Find the out edges of a CFG node from a static CFG -- internal version. */
    7489             :           virtual std::vector<SgDirectedGraphEdge*> cfgOutEdges(unsigned int index, StaticCFG::CFG* cfg)
    7490             :           { return cfg->getOutEdges(this, index); }
    7491             : 
    7492             :       /*! \brief Find the in edges of a CFG node from a static CFG -- internal version. */
    7493             :           virtual std::vector<SgDirectedGraphEdge*> cfgInEdges(unsigned int index, StaticCFG::CFG* cfg)
    7494             :           { return cfg->getInEdges(this, index); }
    7495             : #endif
    7496             : #endif
    7497             :       /* */
    7498             : 
    7499             :        // DQ (1/31/2006): These must be built to be static access member functions (so they can't be built by ROSETTA).
    7500             :       /* name Function Type Information
    7501             :              Support for global view of function types used in ROSE.
    7502             :        */
    7503             :       /* */
    7504             :        //! Access function for symbol table specific to function types.
    7505             :           static SgFunctionTypeTable* get_globalFunctionTypeTable();
    7506             :        //! Access function for symbol table specific to function types.
    7507             :           static void set_globalFunctionTypeTable(SgFunctionTypeTable* globalFunctionTypeTable);
    7508             :       /* */
    7509             : 
    7510             :        // DQ (7/22/2010): Added seperate type table to support construction of unique types.
    7511             :        //! Access function for symbol table specific to non-function types.
    7512             :           static SgTypeTable* get_globalTypeTable();
    7513             :        //! Access function for symbol table specific to non-function types.
    7514             :           static void set_globalTypeTable(SgTypeTable* globalTypeTable);
    7515             : 
    7516             :      protected:
    7517             :           static std::vector<std::tuple<unsigned char*, unsigned, VariantT>> all_pools;
    7518             :      public:
    7519             :           static VariantT variantFromPool(SgNode const * n);
    7520             : 
    7521             :       /* \brief Mangled name cache for improved performance of mangled name generation
    7522             :           This mangle name caching is implemented to support better performance.
    7523             :        */
    7524             :        // static std::map<SgNode*,std::string> & get_globalMangledNameMap();
    7525             : 
    7526             :       /*! \brief Computes the number of nodes in the defined subtree of the AST.
    7527             : 
    7528             :           This function is used as a basis for steps in AST isomophism tests.
    7529             :           The implementation uses a traversal of the AST subtree to count the
    7530             :           number of IR nodes. So the complexity if order N in the size of the subtree.
    7531             :        */
    7532             :           int numberOfNodesInSubtree();
    7533             : 
    7534             :       /*! \brief Computes the depth of the current defined subtree of the AST.
    7535             : 
    7536             :           This function is used as a basis for steps in AST isomophism tests.
    7537             :           The implementation uses a traversal of the AST subtree to count the
    7538             :           depth of the AST traversal. So the complexity if order N in the size
    7539             :           of the subtree.
    7540             :        */
    7541             :           int depthOfSubtree();
    7542             : 
    7543             :      protected:
    7544             : 
    7545             :         /*! \brief Final initialization for constructors
    7546             :             This function is called at the end of generated constructors
    7547             :             to allow the specification writer to add special initialization
    7548             :             functions or tests.  Default is to do nothing.  Otherwise it should
    7549             :             be overridden in the spec file, in NewHeaderCode/NewOutlinedCode.
    7550             :         */
    7551             :           virtual void post_construction_initialization();
    7552             : 
    7553             :      private:
    7554             :        // Make the copy constructor private (to avoid it being used)
    7555             :        /* We have to make the copy constructor available so that the SgUnparse_Info
    7556             :           copy constructor can access it, I'm not clear if this is a good idea.
    7557             :         */
    7558             :        // SgNode(const SgNode &); /* private so it can't be used. */
    7559             : 
    7560             :       //! Make the operator= private (to avoid it being used externally)
    7561             :           SgNode & operator= ( const SgNode & X );
    7562             : 
    7563             :      public:
    7564             : 
    7565             : 
    7566             : 
    7567             : // End of memberFunctionString
    7568             : 
    7569             : 
    7570             : 
    7571             : 
    7572             :      public: 
    7573             :          SgNode* get_freepointer() const;
    7574             :          void set_freepointer(SgNode* freepointer);
    7575             : 
    7576             : 
    7577             : 
    7578             : 
    7579             : 
    7580             : 
    7581             : 
    7582             : 
    7583             : 
    7584             : 
    7585             : 
    7586             :      public: 
    7587             :          virtual ~SgNode();
    7588             : 
    7589             : 
    7590             :      public: 
    7591             :          SgNode(); 
    7592             : 
    7593             :     protected:
    7594             : // Start of memberFunctionString
    7595             : SgNode* p_parent;
    7596             :           
    7597             : // End of memberFunctionString
    7598             : // Start of memberFunctionString
    7599             : bool p_isModified;
    7600             :           
    7601             : // End of memberFunctionString
    7602             : // Start of memberFunctionString
    7603             : bool p_containsTransformation;
    7604             :           
    7605             : // End of memberFunctionString
    7606             : // Start of memberFunctionString
    7607             : SgNode* p_freepointer;
    7608             :           
    7609             : // End of memberFunctionString
    7610             : // Start of memberFunctionString
    7611             : static SgFunctionTypeTable* p_globalFunctionTypeTable;
    7612             :           
    7613             : // End of memberFunctionString
    7614             : // Start of memberFunctionString
    7615             : static SgTypeTable* p_globalTypeTable;
    7616             :           
    7617             : // End of memberFunctionString
    7618             : // Start of memberFunctionString
    7619             : static std::map<SgNode*,std::string> p_globalMangledNameMap;
    7620             :           
    7621             : // End of memberFunctionString
    7622             : // Start of memberFunctionString
    7623             : static std::map<std::string, int> p_shortMangledNameCache;
    7624             :           
    7625             : // End of memberFunctionString
    7626             : // Start of memberFunctionString
    7627             : static std::map<SgNode*,std::string> p_globalQualifiedNameMapForNames;
    7628             :           
    7629             : // End of memberFunctionString
    7630             : // Start of memberFunctionString
    7631             : static std::map<SgNode*,std::string> p_globalQualifiedNameMapForTypes;
    7632             :           
    7633             : // End of memberFunctionString
    7634             : // Start of memberFunctionString
    7635             : static std::map<SgNode*,std::string> p_globalQualifiedNameMapForTemplateHeaders;
    7636             :           
    7637             : // End of memberFunctionString
    7638             : // Start of memberFunctionString
    7639             : static std::map<SgNode*,std::string> p_globalTypeNameMap;
    7640             :           
    7641             : // End of memberFunctionString
    7642             : // Start of memberFunctionString
    7643             : static std::map<SgNode*,std::map<SgNode*,std::string> > p_globalQualifiedNameMapForMapsOfTypes;
    7644             :           
    7645             : // End of memberFunctionString
    7646             : 
    7647             :     friend struct Rose::Traits::generated::describe_node_t<SgNode>;
    7648             :     friend struct Rose::Traits::generated::describe_field_t<SgNode, SgNode*,&SgNode::p_parent>;
    7649             :     friend struct Rose::Traits::generated::describe_field_t<SgNode, bool,&SgNode::p_isModified>;
    7650             :     friend struct Rose::Traits::generated::describe_field_t<SgNode, bool,&SgNode::p_containsTransformation>;
    7651             :     friend struct Rose::Traits::generated::describe_field_t<SgNode, SgNode*,&SgNode::p_freepointer>;
    7652             : 
    7653             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    7654             : 
    7655             : 
    7656             :    };
    7657             : #endif
    7658             : 
    7659             : // postdeclarations for SgNode
    7660             : 
    7661             : /* #line 7662 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    7662             : 
    7663             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
    7664             : 
    7665             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    7666             : 
    7667             : 
    7668             : /* #line 7669 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    7669             : 
    7670             : 
    7671             : 
    7672             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    7673             : 
    7674             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
    7675             : //      This code is automatically generated for each 
    7676             : //      terminal and non-terminal within the defined 
    7677             : //      grammar.  There is a simple way to change the 
    7678             : //      code to fix bugs etc.  See the ROSE README file
    7679             : //      for directions.
    7680             : 
    7681             : // tps: (02/22/2010): Adding DLL export requirements
    7682             : #include "rosedll.h"
    7683             : 
    7684             : // predeclarations for SgSupport
    7685             : 
    7686             : /* #line 7687 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    7687             : 
    7688             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
    7689             : 
    7690             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    7691             : 
    7692             : #if 1
    7693             : // Class Definition for SgSupport
    7694             : class ROSE_DLL_API SgSupport  : public SgNode
    7695             :    {
    7696             :      public:
    7697             : 
    7698             : 
    7699             : /* #line 7700 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    7700             : 
    7701             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
    7702             : // Start of memberFunctionString
    7703             : /* #line 3 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
    7704             : 
    7705             :   // This is part of the SgSupport class definition
    7706             : 
    7707             :   // DQ (4/13/2004): Make the copy constructor parameter a const ref instead of just ref parameter
    7708             :   // previously was protected so it couldn't be used (too easily).
    7709             :      private:
    7710             :           SgSupport(const SgSupport &); /* private so it can't be used. */
    7711             :           SgSupport & operator= ( const SgSupport & X );
    7712             : 
    7713             :         private:
    7714             :                 friend class boost::serialization::access;
    7715             :                 template<class S>
    7716             :                 void serialize(S &s, const unsigned /*version*/) {
    7717             :                         s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(SgNode);
    7718             :                         // No data members are serialized at this time, but this serialization function needs to be
    7719             :                         // defined because SgSupport is an indirect base class of SgBinaryComposite, which is
    7720             :                         // serializable.
    7721             :                 }
    7722             : 
    7723             : 
    7724             : // End of memberFunctionString
    7725             : // Start of memberFunctionString
    7726             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
    7727             : 
    7728             : // *** COMMON CODE SECTION BEGINS HERE ***
    7729             : 
    7730             :     public:
    7731             : 
    7732             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
    7733             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
    7734             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
    7735             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
    7736             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
    7737             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
    7738             : 
    7739             :       /*! \brief returns a string representing the class name */
    7740             :           virtual std::string class_name() const override;
    7741             : 
    7742             :       /*! \brief returns new style SageIII enum values */
    7743             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
    7744             : 
    7745             :       /*! \brief static variant value */
    7746             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
    7747             :        // static const VariantT static_variant = V_SgSupport;
    7748             :           enum { static_variant = V_SgSupport };
    7749             : 
    7750             :        /* the generated cast function */
    7751             :       /*! \brief Casts pointer from base class to derived class */
    7752             :           ROSE_DLL_API friend       SgSupport* isSgSupport(       SgNode * s );
    7753             : 
    7754             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
    7755             :           ROSE_DLL_API friend const SgSupport* isSgSupport( const SgNode * s );
    7756             : 
    7757             :      // ******************************************
    7758             :      // * Memory Pool / New / Delete
    7759             :      // ******************************************
    7760             : 
    7761             :      public:
    7762             :           /// \private
    7763             :           static const unsigned pool_size; //
    7764             :           /// \private
    7765             :           static std::vector<unsigned char *> pools; //
    7766             :           /// \private
    7767             :           static SgSupport * next_node; // 
    7768             : 
    7769             :           /// \private
    7770             :           static unsigned long initializeStorageClassArray(SgSupportStorageClass *); //
    7771             : 
    7772             :           /// \private
    7773             :           static void clearMemoryPool(); //
    7774             :           static void deleteMemoryPool(); //
    7775             : 
    7776             :           /// \private
    7777             :           static void extendMemoryPoolForFileIO(); //
    7778             : 
    7779             :           /// \private
    7780             :           static SgSupport * getPointerFromGlobalIndex(unsigned long); //
    7781             :           /// \private
    7782             :           static SgSupport * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
    7783             : 
    7784             :           /// \private
    7785             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
    7786             :           /// \private
    7787             :           static void resetValidFreepointers(); //
    7788             :           /// \private
    7789             :           static unsigned long getNumberOfLastValidPointer(); //
    7790             : 
    7791             : 
    7792             : #if defined(INLINE_FUNCTIONS)
    7793             :       /*! \brief returns pointer to newly allocated IR node */
    7794             :           inline void *operator new (size_t size);
    7795             : #else
    7796             :       /*! \brief returns pointer to newly allocated IR node */
    7797             :           void *operator new (size_t size);
    7798             : #endif
    7799             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
    7800             :           void operator delete (void* pointer, size_t size);
    7801             : 
    7802             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
    7803           0 :           void operator delete (void* pointer)
    7804             :              {
    7805             :             // This is the generated delete operator...
    7806           0 :                SgSupport::operator delete (pointer,sizeof(SgSupport));
    7807             :              }
    7808             : 
    7809             :       /*! \brief Returns the total number of IR nodes of this type */
    7810             :           static size_t numberOfNodes();
    7811             : 
    7812             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
    7813             :           static size_t memoryUsage();
    7814             : 
    7815             :       // End of scope which started in IR nodes specific code 
    7816             :       /* */
    7817             : 
    7818             :       /* name Internal Functions
    7819             :           \brief Internal functions ... incomplete-documentation
    7820             : 
    7821             :           These functions have been made public as part of the design, but they are suggested for internal use 
    7822             :           or by particularly knowledgeable users for specialized tools or applications.
    7823             : 
    7824             :           \internal We could not make these private because they are required by user for special purposes. And 
    7825             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
    7826             :          
    7827             :        */
    7828             : 
    7829             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
    7830             :        // overridden in every class by *generated* implementation
    7831             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
    7832             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
    7833             :        // MS: 06/28/02 container of names of variables or container indices 
    7834             :        // used used in the traversal to access AST successor nodes
    7835             :        // overridden in every class by *generated* implementation
    7836             :       /*! \brief container of names of variables or container indices used used in the traversal
    7837             :           to access AST successor nodes overridden in every class by *generated* implementation */
    7838             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
    7839             : 
    7840             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
    7841             :        // than all the vector copies. The implementation for these functions is generated for each class.
    7842             :       /*! \brief return number of children in the traversal successor list */
    7843             :           virtual size_t get_numberOfTraversalSuccessors() override;
    7844             :       /*! \brief index-based access to traversal successors by index number */
    7845             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
    7846             :       /*! \brief index-based access to traversal successors by child node */
    7847             :           virtual size_t get_childIndex(SgNode *child) override;
    7848             : 
    7849             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    7850             :        // MS: 08/16/2002 method for generating RTI information
    7851             :       /*! \brief return C++ Runtime-Time-Information */
    7852             :           virtual RTIReturnType roseRTI() override;
    7853             : #endif
    7854             :       /* */
    7855             : 
    7856             : 
    7857             : 
    7858             :       /* name Deprecated Functions
    7859             :           \brief Deprecated functions ... incomplete-documentation
    7860             : 
    7861             :           These functions have been deprecated from use.
    7862             :        */
    7863             :       /* */
    7864             : 
    7865             :       /*! returns a C style string (char*) representing the class name */
    7866             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
    7867             : 
    7868             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
    7869             :       // getVariant() in #if 0 block to prevent confusing Doxygen
    7870             : #if 0
    7871             :       /*! returns old style Sage II enum values */
    7872             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
    7873             :       /*! returns old style Sage II enum values */
    7874             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
    7875             : #endif
    7876             :       /* */
    7877             : 
    7878             : 
    7879             : 
    7880             : 
    7881             :      public:
    7882             :       /* name Traversal Support Functions
    7883             :           \brief Traversal support functions ... incomplete-documentation
    7884             : 
    7885             :           These functions have been made public as part of the design, but they are suggested for internal use 
    7886             :           or by particularly knowledgable users for specialized tools or applications.
    7887             :        */
    7888             :       /* */
    7889             : 
    7890             :        // DQ (11/26/2005): Support for visitor pattern mechanims
    7891             :        // (inferior to ROSE traversal mechanism, experimental).
    7892             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    7893             :        */
    7894             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
    7895             : 
    7896             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
    7897             :       /*! \brief support for the classic visitor pattern done in GoF */
    7898             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
    7899             : 
    7900             :        // DQ (12/26/2005): Support for traversal based on the memory pool
    7901             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
    7902             :        */
    7903             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
    7904             : 
    7905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    7906             :        */
    7907             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
    7908             : 
    7909             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
    7910             :        // This traversal helps support internal tools that call static member functions.
    7911             :        // note: this function operates on the memory pools.
    7912             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
    7913             :        */
    7914             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
    7915             :       /* */
    7916             : 
    7917             : 
    7918             :      public:
    7919             :       /* name Memory Allocation Functions
    7920             :           \brief Memory allocations functions ... incomplete-documentation
    7921             : 
    7922             :           These functions have been made public as part of the design, but they are suggested for internal use 
    7923             :           or by particularly knowledgable users for specialized tools or applications.
    7924             :        */
    7925             :       /* */
    7926             : 
    7927             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    7928             : 
    7929             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    7930             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    7931             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    7932             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    7933             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    7934             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    7935             :           being used with the AST File I/O mechanism.
    7936             :        */
    7937             :           virtual bool isInMemoryPool() override;
    7938             : 
    7939             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    7940             : 
    7941             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    7942             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    7943             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    7944             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    7945             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    7946             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    7947             :           being used with the AST File I/O mechanism.
    7948             :        */
    7949             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
    7950             : 
    7951             :       // DQ (4/30/2006): Modified to be a const function.
    7952             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
    7953             : 
    7954             :           This functions is part of general support for many possible tools to operate 
    7955             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
    7956             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
    7957             :           less than the set of pointers used by the AST file I/O. This is part of
    7958             :           work implemented by Andreas, and support tools such as the AST graph generation.
    7959             : 
    7960             :           \warning This function can return unexpected data members and thus the 
    7961             :                    order and the number of elements is unpredicable and subject 
    7962             :                    to change.
    7963             : 
    7964             :           \returns STL vector of pairs of SgNode* and strings
    7965             :        */
    7966             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
    7967             : 
    7968             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
    7969             : 
    7970             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
    7971             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
    7972             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
    7973             : 
    7974             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
    7975             :                    and subject to change.
    7976             :        */
    7977             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
    7978             : 
    7979             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
    7980             : 
    7981             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
    7982             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
    7983             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
    7984             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
    7985             : 
    7986             :           \warning The mapping on children to integer values could change from release to release of ROSE.
    7987             : 
    7988             :           \returns long
    7989             :        */
    7990             :           virtual long getChildIndex( SgNode* childNode ) const override;
    7991             : 
    7992             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
    7993             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    7994             :       /* \brief Constructor for use by AST File I/O Mechanism
    7995             : 
    7996             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
    7997             :           which obtained via fast binary file I/O from disk.
    7998             :        */
    7999             :        // SgSupport( SgSupportStorageClass& source );
    8000             : 
    8001             : 
    8002             : 
    8003             : 
    8004             : 
    8005             :  // JH (10/24/2005): methods added to support the ast file IO
    8006             :     private:
    8007             : 
    8008             :       /* name AST Memory Allocation Support Functions
    8009             :           \brief Memory allocations support....
    8010             : 
    8011             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
    8012             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    8013             :           and support the AST File I/O Mechanism.
    8014             :        */
    8015             :       /* */
    8016             : 
    8017             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
    8018             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
    8019             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
    8020             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
    8021             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
    8022             :           a correspinding one in the AST_FILE_IO class!
    8023             :        */
    8024             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    8025             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8026             :       /* \brief Typedef used for low level memory access.
    8027             :        */
    8028             :        // typedef unsigned char* TestType;
    8029             : 
    8030             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    8031             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8032             :       /* \brief Typedef used to hold memory addresses as values.
    8033             :        */
    8034             :        // typedef unsigned long  AddressType;
    8035             : 
    8036             : 
    8037             : 
    8038             :        // necessary, to have direct access to the p_freepointer and the private methods !
    8039             :       /*! \brief friend class declaration to support AST File I/O */
    8040             :           friend class AST_FILE_IO;
    8041             : 
    8042             :       /*! \brief friend class declaration to support AST File I/O */
    8043             :           friend class SgSupportStorageClass;
    8044             : 
    8045             :       /*! \brief friend class declaration to support AST File I/O */
    8046             :           friend class AstSpecificDataManagingClass;
    8047             : 
    8048             :       /*! \brief friend class declaration to support AST File I/O */
    8049             :           friend class AstSpecificDataManagingClassStorageClass;
    8050             :     public:
    8051             :       /*! \brief IR node constructor to support AST File I/O */
    8052             :           SgSupport( const SgSupportStorageClass& source );
    8053             : 
    8054             :  // private: // JJW hack
    8055             :        /*
    8056             :           name AST Memory Allocation Support Variables
    8057             :           Memory allocations support variables 
    8058             : 
    8059             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
    8060             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    8061             :           and support the AST File I/O Mechanism.
    8062             :        */
    8063             :       /* */
    8064             : 
    8065             :     public:
    8066             : 
    8067             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
    8068             :       // to current node (so that it will work cleanly with build functions to specify patterns).
    8069             :       // virtual SgNode* addRegExpAttribute();
    8070             :       /*! \brief Support for AST matching using regular expression.
    8071             : 
    8072             :           This support is incomplete and the subject of current research to define 
    8073             :           RegEx trees to support inexact matching.
    8074             :        */
    8075             :           SgSupport* addRegExpAttribute(std::string s, AstRegExAttribute* a);
    8076             : 
    8077             : // *** COMMON CODE SECTION ENDS HERE ***
    8078             : 
    8079             : 
    8080             : // End of memberFunctionString
    8081             : // Start of memberFunctionString
    8082             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
    8083             : 
    8084             :      // the generated cast function
    8085             :      // friend ROSE_DLL_API SgSupport* isSgSupport ( SgNode* s );
    8086             : 
    8087             :           typedef SgNode base_node_type;
    8088             : 
    8089             : 
    8090             : // End of memberFunctionString
    8091             : 
    8092             : 
    8093             :      public: 
    8094             :          virtual ~SgSupport();
    8095             : 
    8096             : 
    8097             :      public: 
    8098             :          SgSupport(); 
    8099             : 
    8100             :     protected:
    8101             : 
    8102             :     friend struct Rose::Traits::generated::describe_node_t<SgSupport>;
    8103             : 
    8104             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8105             : 
    8106             : 
    8107             :    };
    8108             : #endif
    8109             : 
    8110             : // postdeclarations for SgSupport
    8111             : 
    8112             : /* #line 8113 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8113             : 
    8114             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
    8115             : 
    8116             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8117             : 
    8118             : 
    8119             : /* #line 8120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8120             : 
    8121             : 
    8122             : 
    8123             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8124             : 
    8125             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
    8126             : //      This code is automatically generated for each 
    8127             : //      terminal and non-terminal within the defined 
    8128             : //      grammar.  There is a simple way to change the 
    8129             : //      code to fix bugs etc.  See the ROSE README file
    8130             : //      for directions.
    8131             : 
    8132             : // tps: (02/22/2010): Adding DLL export requirements
    8133             : #include "rosedll.h"
    8134             : 
    8135             : // predeclarations for SgModifier
    8136             : 
    8137             : /* #line 8138 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8138             : 
    8139             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
    8140             : 
    8141             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8142             : 
    8143             : #if 1
    8144             : // Class Definition for SgModifier
    8145             : class ROSE_DLL_API SgModifier  : public SgSupport
    8146             :    {
    8147             :      public:
    8148             : 
    8149             : 
    8150             : /* #line 8151 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8151             : 
    8152             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
    8153             : // Start of memberFunctionString
    8154             : /* #line 792 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
    8155             : 
    8156             :           SgModifier ( const SgModifier & X );
    8157             :           SgModifier & operator= ( const SgModifier & X );
    8158             : 
    8159             :        // bit handling support used by many derived classes
    8160             :           bool checkBit ( unsigned int bit, const SgBitVector & bitVector ) const;
    8161             :           void setBit   ( unsigned int bit,       SgBitVector & bitVector ) const;
    8162             :           void unsetBit ( unsigned int bit,       SgBitVector & bitVector ) const;
    8163             : 
    8164             : 
    8165             : 
    8166             : // End of memberFunctionString
    8167             : // Start of memberFunctionString
    8168             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
    8169             : 
    8170             : // *** COMMON CODE SECTION BEGINS HERE ***
    8171             : 
    8172             :     public:
    8173             : 
    8174             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
    8175             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
    8176             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
    8177             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
    8178             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
    8179             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
    8180             : 
    8181             :       /*! \brief returns a string representing the class name */
    8182             :           virtual std::string class_name() const override;
    8183             : 
    8184             :       /*! \brief returns new style SageIII enum values */
    8185             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
    8186             : 
    8187             :       /*! \brief static variant value */
    8188             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
    8189             :        // static const VariantT static_variant = V_SgModifier;
    8190             :           enum { static_variant = V_SgModifier };
    8191             : 
    8192             :        /* the generated cast function */
    8193             :       /*! \brief Casts pointer from base class to derived class */
    8194             :           ROSE_DLL_API friend       SgModifier* isSgModifier(       SgNode * s );
    8195             : 
    8196             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
    8197             :           ROSE_DLL_API friend const SgModifier* isSgModifier( const SgNode * s );
    8198             : 
    8199             :      // ******************************************
    8200             :      // * Memory Pool / New / Delete
    8201             :      // ******************************************
    8202             : 
    8203             :      public:
    8204             :           /// \private
    8205             :           static const unsigned pool_size; //
    8206             :           /// \private
    8207             :           static std::vector<unsigned char *> pools; //
    8208             :           /// \private
    8209             :           static SgModifier * next_node; // 
    8210             : 
    8211             :           /// \private
    8212             :           static unsigned long initializeStorageClassArray(SgModifierStorageClass *); //
    8213             : 
    8214             :           /// \private
    8215             :           static void clearMemoryPool(); //
    8216             :           static void deleteMemoryPool(); //
    8217             : 
    8218             :           /// \private
    8219             :           static void extendMemoryPoolForFileIO(); //
    8220             : 
    8221             :           /// \private
    8222             :           static SgModifier * getPointerFromGlobalIndex(unsigned long); //
    8223             :           /// \private
    8224             :           static SgModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
    8225             : 
    8226             :           /// \private
    8227             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
    8228             :           /// \private
    8229             :           static void resetValidFreepointers(); //
    8230             :           /// \private
    8231             :           static unsigned long getNumberOfLastValidPointer(); //
    8232             : 
    8233             : 
    8234             : #if defined(INLINE_FUNCTIONS)
    8235             :       /*! \brief returns pointer to newly allocated IR node */
    8236             :           inline void *operator new (size_t size);
    8237             : #else
    8238             :       /*! \brief returns pointer to newly allocated IR node */
    8239             :           void *operator new (size_t size);
    8240             : #endif
    8241             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
    8242             :           void operator delete (void* pointer, size_t size);
    8243             : 
    8244             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
    8245           0 :           void operator delete (void* pointer)
    8246             :              {
    8247             :             // This is the generated delete operator...
    8248           0 :                SgModifier::operator delete (pointer,sizeof(SgModifier));
    8249             :              }
    8250             : 
    8251             :       /*! \brief Returns the total number of IR nodes of this type */
    8252             :           static size_t numberOfNodes();
    8253             : 
    8254             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
    8255             :           static size_t memoryUsage();
    8256             : 
    8257             :       // End of scope which started in IR nodes specific code 
    8258             :       /* */
    8259             : 
    8260             :       /* name Internal Functions
    8261             :           \brief Internal functions ... incomplete-documentation
    8262             : 
    8263             :           These functions have been made public as part of the design, but they are suggested for internal use 
    8264             :           or by particularly knowledgeable users for specialized tools or applications.
    8265             : 
    8266             :           \internal We could not make these private because they are required by user for special purposes. And 
    8267             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
    8268             :          
    8269             :        */
    8270             : 
    8271             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
    8272             :        // overridden in every class by *generated* implementation
    8273             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
    8274             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
    8275             :        // MS: 06/28/02 container of names of variables or container indices 
    8276             :        // used used in the traversal to access AST successor nodes
    8277             :        // overridden in every class by *generated* implementation
    8278             :       /*! \brief container of names of variables or container indices used used in the traversal
    8279             :           to access AST successor nodes overridden in every class by *generated* implementation */
    8280             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
    8281             : 
    8282             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
    8283             :        // than all the vector copies. The implementation for these functions is generated for each class.
    8284             :       /*! \brief return number of children in the traversal successor list */
    8285             :           virtual size_t get_numberOfTraversalSuccessors() override;
    8286             :       /*! \brief index-based access to traversal successors by index number */
    8287             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
    8288             :       /*! \brief index-based access to traversal successors by child node */
    8289             :           virtual size_t get_childIndex(SgNode *child) override;
    8290             : 
    8291             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    8292             :        // MS: 08/16/2002 method for generating RTI information
    8293             :       /*! \brief return C++ Runtime-Time-Information */
    8294             :           virtual RTIReturnType roseRTI() override;
    8295             : #endif
    8296             :       /* */
    8297             : 
    8298             : 
    8299             : 
    8300             :       /* name Deprecated Functions
    8301             :           \brief Deprecated functions ... incomplete-documentation
    8302             : 
    8303             :           These functions have been deprecated from use.
    8304             :        */
    8305             :       /* */
    8306             : 
    8307             :       /*! returns a C style string (char*) representing the class name */
    8308             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
    8309             : 
    8310             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
    8311             :       // getVariant() in #if 0 block to prevent confusing Doxygen
    8312             : #if 0
    8313             :       /*! returns old style Sage II enum values */
    8314             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
    8315             :       /*! returns old style Sage II enum values */
    8316             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
    8317             : #endif
    8318             :       /* */
    8319             : 
    8320             : 
    8321             : 
    8322             : 
    8323             :      public:
    8324             :       /* name Traversal Support Functions
    8325             :           \brief Traversal support functions ... incomplete-documentation
    8326             : 
    8327             :           These functions have been made public as part of the design, but they are suggested for internal use 
    8328             :           or by particularly knowledgable users for specialized tools or applications.
    8329             :        */
    8330             :       /* */
    8331             : 
    8332             :        // DQ (11/26/2005): Support for visitor pattern mechanims
    8333             :        // (inferior to ROSE traversal mechanism, experimental).
    8334             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    8335             :        */
    8336             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
    8337             : 
    8338             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
    8339             :       /*! \brief support for the classic visitor pattern done in GoF */
    8340             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
    8341             : 
    8342             :        // DQ (12/26/2005): Support for traversal based on the memory pool
    8343             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
    8344             :        */
    8345             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
    8346             : 
    8347             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    8348             :        */
    8349             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
    8350             : 
    8351             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
    8352             :        // This traversal helps support internal tools that call static member functions.
    8353             :        // note: this function operates on the memory pools.
    8354             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
    8355             :        */
    8356             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
    8357             :       /* */
    8358             : 
    8359             : 
    8360             :      public:
    8361             :       /* name Memory Allocation Functions
    8362             :           \brief Memory allocations functions ... incomplete-documentation
    8363             : 
    8364             :           These functions have been made public as part of the design, but they are suggested for internal use 
    8365             :           or by particularly knowledgable users for specialized tools or applications.
    8366             :        */
    8367             :       /* */
    8368             : 
    8369             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    8370             : 
    8371             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    8372             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    8373             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    8374             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    8375             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    8376             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    8377             :           being used with the AST File I/O mechanism.
    8378             :        */
    8379             :           virtual bool isInMemoryPool() override;
    8380             : 
    8381             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    8382             : 
    8383             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    8384             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    8385             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    8386             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    8387             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    8388             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    8389             :           being used with the AST File I/O mechanism.
    8390             :        */
    8391             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
    8392             : 
    8393             :       // DQ (4/30/2006): Modified to be a const function.
    8394             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
    8395             : 
    8396             :           This functions is part of general support for many possible tools to operate 
    8397             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
    8398             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
    8399             :           less than the set of pointers used by the AST file I/O. This is part of
    8400             :           work implemented by Andreas, and support tools such as the AST graph generation.
    8401             : 
    8402             :           \warning This function can return unexpected data members and thus the 
    8403             :                    order and the number of elements is unpredicable and subject 
    8404             :                    to change.
    8405             : 
    8406             :           \returns STL vector of pairs of SgNode* and strings
    8407             :        */
    8408             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
    8409             : 
    8410             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
    8411             : 
    8412             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
    8413             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
    8414             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
    8415             : 
    8416             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
    8417             :                    and subject to change.
    8418             :        */
    8419             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
    8420             : 
    8421             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
    8422             : 
    8423             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
    8424             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
    8425             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
    8426             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
    8427             : 
    8428             :           \warning The mapping on children to integer values could change from release to release of ROSE.
    8429             : 
    8430             :           \returns long
    8431             :        */
    8432             :           virtual long getChildIndex( SgNode* childNode ) const override;
    8433             : 
    8434             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
    8435             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8436             :       /* \brief Constructor for use by AST File I/O Mechanism
    8437             : 
    8438             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
    8439             :           which obtained via fast binary file I/O from disk.
    8440             :        */
    8441             :        // SgModifier( SgModifierStorageClass& source );
    8442             : 
    8443             : 
    8444             : 
    8445             : 
    8446             : 
    8447             :  // JH (10/24/2005): methods added to support the ast file IO
    8448             :     private:
    8449             : 
    8450             :       /* name AST Memory Allocation Support Functions
    8451             :           \brief Memory allocations support....
    8452             : 
    8453             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
    8454             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    8455             :           and support the AST File I/O Mechanism.
    8456             :        */
    8457             :       /* */
    8458             : 
    8459             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
    8460             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
    8461             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
    8462             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
    8463             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
    8464             :           a correspinding one in the AST_FILE_IO class!
    8465             :        */
    8466             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    8467             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8468             :       /* \brief Typedef used for low level memory access.
    8469             :        */
    8470             :        // typedef unsigned char* TestType;
    8471             : 
    8472             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    8473             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8474             :       /* \brief Typedef used to hold memory addresses as values.
    8475             :        */
    8476             :        // typedef unsigned long  AddressType;
    8477             : 
    8478             : 
    8479             : 
    8480             :        // necessary, to have direct access to the p_freepointer and the private methods !
    8481             :       /*! \brief friend class declaration to support AST File I/O */
    8482             :           friend class AST_FILE_IO;
    8483             : 
    8484             :       /*! \brief friend class declaration to support AST File I/O */
    8485             :           friend class SgModifierStorageClass;
    8486             : 
    8487             :       /*! \brief friend class declaration to support AST File I/O */
    8488             :           friend class AstSpecificDataManagingClass;
    8489             : 
    8490             :       /*! \brief friend class declaration to support AST File I/O */
    8491             :           friend class AstSpecificDataManagingClassStorageClass;
    8492             :     public:
    8493             :       /*! \brief IR node constructor to support AST File I/O */
    8494             :           SgModifier( const SgModifierStorageClass& source );
    8495             : 
    8496             :  // private: // JJW hack
    8497             :        /*
    8498             :           name AST Memory Allocation Support Variables
    8499             :           Memory allocations support variables 
    8500             : 
    8501             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
    8502             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    8503             :           and support the AST File I/O Mechanism.
    8504             :        */
    8505             :       /* */
    8506             : 
    8507             :     public:
    8508             : 
    8509             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
    8510             :       // to current node (so that it will work cleanly with build functions to specify patterns).
    8511             :       // virtual SgNode* addRegExpAttribute();
    8512             :       /*! \brief Support for AST matching using regular expression.
    8513             : 
    8514             :           This support is incomplete and the subject of current research to define 
    8515             :           RegEx trees to support inexact matching.
    8516             :        */
    8517             :           SgModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
    8518             : 
    8519             : // *** COMMON CODE SECTION ENDS HERE ***
    8520             : 
    8521             : 
    8522             : // End of memberFunctionString
    8523             : // Start of memberFunctionString
    8524             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
    8525             : 
    8526             :      // the generated cast function
    8527             :      // friend ROSE_DLL_API SgModifier* isSgModifier ( SgNode* s );
    8528             : 
    8529             :           typedef SgSupport base_node_type;
    8530             : 
    8531             : 
    8532             : // End of memberFunctionString
    8533             : 
    8534             : 
    8535             :      public: 
    8536             :          virtual ~SgModifier();
    8537             : 
    8538             : 
    8539             :      public: 
    8540             :          SgModifier(); 
    8541             : 
    8542             :     protected:
    8543             : 
    8544             :     friend struct Rose::Traits::generated::describe_node_t<SgModifier>;
    8545             : 
    8546             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8547             : 
    8548             : 
    8549             :    };
    8550             : #endif
    8551             : 
    8552             : // postdeclarations for SgModifier
    8553             : 
    8554             : /* #line 8555 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8555             : 
    8556             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
    8557             : 
    8558             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8559             : 
    8560             : 
    8561             : /* #line 8562 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8562             : 
    8563             : 
    8564             : 
    8565             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8566             : 
    8567             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
    8568             : //      This code is automatically generated for each 
    8569             : //      terminal and non-terminal within the defined 
    8570             : //      grammar.  There is a simple way to change the 
    8571             : //      code to fix bugs etc.  See the ROSE README file
    8572             : //      for directions.
    8573             : 
    8574             : // tps: (02/22/2010): Adding DLL export requirements
    8575             : #include "rosedll.h"
    8576             : 
    8577             : // predeclarations for SgModifierNodes
    8578             : 
    8579             : /* #line 8580 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8580             : 
    8581             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
    8582             : 
    8583             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    8584             : 
    8585             : #if 1
    8586             : // Class Definition for SgModifierNodes
    8587             : class ROSE_DLL_API SgModifierNodes  : public SgModifier
    8588             :    {
    8589             :      public:
    8590             : 
    8591             : 
    8592             : /* #line 8593 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    8593             : 
    8594             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
    8595             : // Start of memberFunctionString
    8596             : /* #line 804 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
    8597             : 
    8598             :           SgModifierNodes();
    8599             :       // ~SgModifierNodes();
    8600             : 
    8601             :           void post_construction_initialization() override;
    8602             : 
    8603             :        // DQ (2/12/2007): This function is not used.
    8604             :        // SgModifierType* match(SgType*, unsigned int);
    8605             : 
    8606             :        // DQ (2/4/2006): Added mechamism to clear all bits
    8607             :        // void reset();
    8608             : 
    8609             : 
    8610             : 
    8611             : // End of memberFunctionString
    8612             : // Start of memberFunctionString
    8613             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
    8614             : 
    8615             : // *** COMMON CODE SECTION BEGINS HERE ***
    8616             : 
    8617             :     public:
    8618             : 
    8619             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
    8620             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
    8621             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
    8622             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
    8623             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
    8624             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
    8625             : 
    8626             :       /*! \brief returns a string representing the class name */
    8627             :           virtual std::string class_name() const override;
    8628             : 
    8629             :       /*! \brief returns new style SageIII enum values */
    8630             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
    8631             : 
    8632             :       /*! \brief static variant value */
    8633             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
    8634             :        // static const VariantT static_variant = V_SgModifierNodes;
    8635             :           enum { static_variant = V_SgModifierNodes };
    8636             : 
    8637             :        /* the generated cast function */
    8638             :       /*! \brief Casts pointer from base class to derived class */
    8639             :           ROSE_DLL_API friend       SgModifierNodes* isSgModifierNodes(       SgNode * s );
    8640             : 
    8641             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
    8642             :           ROSE_DLL_API friend const SgModifierNodes* isSgModifierNodes( const SgNode * s );
    8643             : 
    8644             :      // ******************************************
    8645             :      // * Memory Pool / New / Delete
    8646             :      // ******************************************
    8647             : 
    8648             :      public:
    8649             :           /// \private
    8650             :           static const unsigned pool_size; //
    8651             :           /// \private
    8652             :           static std::vector<unsigned char *> pools; //
    8653             :           /// \private
    8654             :           static SgModifierNodes * next_node; // 
    8655             : 
    8656             :           /// \private
    8657             :           static unsigned long initializeStorageClassArray(SgModifierNodesStorageClass *); //
    8658             : 
    8659             :           /// \private
    8660             :           static void clearMemoryPool(); //
    8661             :           static void deleteMemoryPool(); //
    8662             : 
    8663             :           /// \private
    8664             :           static void extendMemoryPoolForFileIO(); //
    8665             : 
    8666             :           /// \private
    8667             :           static SgModifierNodes * getPointerFromGlobalIndex(unsigned long); //
    8668             :           /// \private
    8669             :           static SgModifierNodes * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
    8670             : 
    8671             :           /// \private
    8672             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
    8673             :           /// \private
    8674             :           static void resetValidFreepointers(); //
    8675             :           /// \private
    8676             :           static unsigned long getNumberOfLastValidPointer(); //
    8677             : 
    8678             : 
    8679             : #if defined(INLINE_FUNCTIONS)
    8680             :       /*! \brief returns pointer to newly allocated IR node */
    8681             :           inline void *operator new (size_t size);
    8682             : #else
    8683             :       /*! \brief returns pointer to newly allocated IR node */
    8684             :           void *operator new (size_t size);
    8685             : #endif
    8686             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
    8687             :           void operator delete (void* pointer, size_t size);
    8688             : 
    8689             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
    8690           0 :           void operator delete (void* pointer)
    8691             :              {
    8692             :             // This is the generated delete operator...
    8693           0 :                SgModifierNodes::operator delete (pointer,sizeof(SgModifierNodes));
    8694             :              }
    8695             : 
    8696             :       /*! \brief Returns the total number of IR nodes of this type */
    8697             :           static size_t numberOfNodes();
    8698             : 
    8699             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
    8700             :           static size_t memoryUsage();
    8701             : 
    8702             :       // End of scope which started in IR nodes specific code 
    8703             :       /* */
    8704             : 
    8705             :       /* name Internal Functions
    8706             :           \brief Internal functions ... incomplete-documentation
    8707             : 
    8708             :           These functions have been made public as part of the design, but they are suggested for internal use 
    8709             :           or by particularly knowledgeable users for specialized tools or applications.
    8710             : 
    8711             :           \internal We could not make these private because they are required by user for special purposes. And 
    8712             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
    8713             :          
    8714             :        */
    8715             : 
    8716             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
    8717             :        // overridden in every class by *generated* implementation
    8718             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
    8719             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
    8720             :        // MS: 06/28/02 container of names of variables or container indices 
    8721             :        // used used in the traversal to access AST successor nodes
    8722             :        // overridden in every class by *generated* implementation
    8723             :       /*! \brief container of names of variables or container indices used used in the traversal
    8724             :           to access AST successor nodes overridden in every class by *generated* implementation */
    8725             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
    8726             : 
    8727             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
    8728             :        // than all the vector copies. The implementation for these functions is generated for each class.
    8729             :       /*! \brief return number of children in the traversal successor list */
    8730             :           virtual size_t get_numberOfTraversalSuccessors() override;
    8731             :       /*! \brief index-based access to traversal successors by index number */
    8732             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
    8733             :       /*! \brief index-based access to traversal successors by child node */
    8734             :           virtual size_t get_childIndex(SgNode *child) override;
    8735             : 
    8736             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    8737             :        // MS: 08/16/2002 method for generating RTI information
    8738             :       /*! \brief return C++ Runtime-Time-Information */
    8739             :           virtual RTIReturnType roseRTI() override;
    8740             : #endif
    8741             :       /* */
    8742             : 
    8743             : 
    8744             : 
    8745             :       /* name Deprecated Functions
    8746             :           \brief Deprecated functions ... incomplete-documentation
    8747             : 
    8748             :           These functions have been deprecated from use.
    8749             :        */
    8750             :       /* */
    8751             : 
    8752             :       /*! returns a C style string (char*) representing the class name */
    8753             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
    8754             : 
    8755             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
    8756             :       // getVariant() in #if 0 block to prevent confusing Doxygen
    8757             : #if 0
    8758             :       /*! returns old style Sage II enum values */
    8759             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
    8760             :       /*! returns old style Sage II enum values */
    8761             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
    8762             : #endif
    8763             :       /* */
    8764             : 
    8765             : 
    8766             : 
    8767             : 
    8768             :      public:
    8769             :       /* name Traversal Support Functions
    8770             :           \brief Traversal support functions ... incomplete-documentation
    8771             : 
    8772             :           These functions have been made public as part of the design, but they are suggested for internal use 
    8773             :           or by particularly knowledgable users for specialized tools or applications.
    8774             :        */
    8775             :       /* */
    8776             : 
    8777             :        // DQ (11/26/2005): Support for visitor pattern mechanims
    8778             :        // (inferior to ROSE traversal mechanism, experimental).
    8779             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    8780             :        */
    8781             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
    8782             : 
    8783             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
    8784             :       /*! \brief support for the classic visitor pattern done in GoF */
    8785             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
    8786             : 
    8787             :        // DQ (12/26/2005): Support for traversal based on the memory pool
    8788             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
    8789             :        */
    8790             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
    8791             : 
    8792             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    8793             :        */
    8794             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
    8795             : 
    8796             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
    8797             :        // This traversal helps support internal tools that call static member functions.
    8798             :        // note: this function operates on the memory pools.
    8799             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
    8800             :        */
    8801             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
    8802             :       /* */
    8803             : 
    8804             : 
    8805             :      public:
    8806             :       /* name Memory Allocation Functions
    8807             :           \brief Memory allocations functions ... incomplete-documentation
    8808             : 
    8809             :           These functions have been made public as part of the design, but they are suggested for internal use 
    8810             :           or by particularly knowledgable users for specialized tools or applications.
    8811             :        */
    8812             :       /* */
    8813             : 
    8814             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    8815             : 
    8816             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    8817             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    8818             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    8819             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    8820             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    8821             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    8822             :           being used with the AST File I/O mechanism.
    8823             :        */
    8824             :           virtual bool isInMemoryPool() override;
    8825             : 
    8826             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    8827             : 
    8828             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    8829             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    8830             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    8831             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    8832             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    8833             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    8834             :           being used with the AST File I/O mechanism.
    8835             :        */
    8836             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
    8837             : 
    8838             :       // DQ (4/30/2006): Modified to be a const function.
    8839             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
    8840             : 
    8841             :           This functions is part of general support for many possible tools to operate 
    8842             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
    8843             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
    8844             :           less than the set of pointers used by the AST file I/O. This is part of
    8845             :           work implemented by Andreas, and support tools such as the AST graph generation.
    8846             : 
    8847             :           \warning This function can return unexpected data members and thus the 
    8848             :                    order and the number of elements is unpredicable and subject 
    8849             :                    to change.
    8850             : 
    8851             :           \returns STL vector of pairs of SgNode* and strings
    8852             :        */
    8853             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
    8854             : 
    8855             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
    8856             : 
    8857             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
    8858             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
    8859             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
    8860             : 
    8861             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
    8862             :                    and subject to change.
    8863             :        */
    8864             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
    8865             : 
    8866             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
    8867             : 
    8868             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
    8869             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
    8870             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
    8871             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
    8872             : 
    8873             :           \warning The mapping on children to integer values could change from release to release of ROSE.
    8874             : 
    8875             :           \returns long
    8876             :        */
    8877             :           virtual long getChildIndex( SgNode* childNode ) const override;
    8878             : 
    8879             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
    8880             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8881             :       /* \brief Constructor for use by AST File I/O Mechanism
    8882             : 
    8883             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
    8884             :           which obtained via fast binary file I/O from disk.
    8885             :        */
    8886             :        // SgModifierNodes( SgModifierNodesStorageClass& source );
    8887             : 
    8888             : 
    8889             : 
    8890             : 
    8891             : 
    8892             :  // JH (10/24/2005): methods added to support the ast file IO
    8893             :     private:
    8894             : 
    8895             :       /* name AST Memory Allocation Support Functions
    8896             :           \brief Memory allocations support....
    8897             : 
    8898             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
    8899             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    8900             :           and support the AST File I/O Mechanism.
    8901             :        */
    8902             :       /* */
    8903             : 
    8904             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
    8905             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
    8906             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
    8907             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
    8908             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
    8909             :           a correspinding one in the AST_FILE_IO class!
    8910             :        */
    8911             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    8912             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8913             :       /* \brief Typedef used for low level memory access.
    8914             :        */
    8915             :        // typedef unsigned char* TestType;
    8916             : 
    8917             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    8918             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    8919             :       /* \brief Typedef used to hold memory addresses as values.
    8920             :        */
    8921             :        // typedef unsigned long  AddressType;
    8922             : 
    8923             : 
    8924             : 
    8925             :        // necessary, to have direct access to the p_freepointer and the private methods !
    8926             :       /*! \brief friend class declaration to support AST File I/O */
    8927             :           friend class AST_FILE_IO;
    8928             : 
    8929             :       /*! \brief friend class declaration to support AST File I/O */
    8930             :           friend class SgModifierNodesStorageClass;
    8931             : 
    8932             :       /*! \brief friend class declaration to support AST File I/O */
    8933             :           friend class AstSpecificDataManagingClass;
    8934             : 
    8935             :       /*! \brief friend class declaration to support AST File I/O */
    8936             :           friend class AstSpecificDataManagingClassStorageClass;
    8937             :     public:
    8938             :       /*! \brief IR node constructor to support AST File I/O */
    8939             :           SgModifierNodes( const SgModifierNodesStorageClass& source );
    8940             : 
    8941             :  // private: // JJW hack
    8942             :        /*
    8943             :           name AST Memory Allocation Support Variables
    8944             :           Memory allocations support variables 
    8945             : 
    8946             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
    8947             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    8948             :           and support the AST File I/O Mechanism.
    8949             :        */
    8950             :       /* */
    8951             : 
    8952             :     public:
    8953             : 
    8954             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
    8955             :       // to current node (so that it will work cleanly with build functions to specify patterns).
    8956             :       // virtual SgNode* addRegExpAttribute();
    8957             :       /*! \brief Support for AST matching using regular expression.
    8958             : 
    8959             :           This support is incomplete and the subject of current research to define 
    8960             :           RegEx trees to support inexact matching.
    8961             :        */
    8962             :           SgModifierNodes* addRegExpAttribute(std::string s, AstRegExAttribute* a);
    8963             : 
    8964             : // *** COMMON CODE SECTION ENDS HERE ***
    8965             : 
    8966             : 
    8967             : // End of memberFunctionString
    8968             : // Start of memberFunctionString
    8969             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
    8970             : 
    8971             :      // the generated cast function
    8972             :      // friend ROSE_DLL_API SgModifierNodes* isSgModifierNodes ( SgNode* s );
    8973             : 
    8974             :           typedef SgModifier base_node_type;
    8975             : 
    8976             : 
    8977             : // End of memberFunctionString
    8978             : 
    8979             :      public: 
    8980             :          SgModifierTypePtrVector get_nodes() const;
    8981             :          void set_nodes(SgModifierTypePtrVector nodes);
    8982             : 
    8983             :      public: 
    8984             :          SgModifierNodes* get_next() const;
    8985             :          void set_next(SgModifierNodes* next);
    8986             : 
    8987             : 
    8988             :      public: 
    8989             :          virtual ~SgModifierNodes();
    8990             : 
    8991             :     protected:
    8992             : // Start of memberFunctionString
    8993             : SgModifierTypePtrVector p_nodes;
    8994             :           
    8995             : // End of memberFunctionString
    8996             : // Start of memberFunctionString
    8997             : SgModifierNodes* p_next;
    8998             :           
    8999             : // End of memberFunctionString
    9000             : 
    9001             :     friend struct Rose::Traits::generated::describe_node_t<SgModifierNodes>;
    9002             :     friend struct Rose::Traits::generated::describe_field_t<SgModifierNodes, SgModifierTypePtrVector,&SgModifierNodes::p_nodes>;
    9003             :     friend struct Rose::Traits::generated::describe_field_t<SgModifierNodes, SgModifierNodes*,&SgModifierNodes::p_next>;
    9004             : 
    9005             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9006             : 
    9007             : 
    9008             :    };
    9009             : #endif
    9010             : 
    9011             : // postdeclarations for SgModifierNodes
    9012             : 
    9013             : /* #line 9014 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9014             : 
    9015             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
    9016             : 
    9017             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9018             : 
    9019             : 
    9020             : /* #line 9021 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9021             : 
    9022             : 
    9023             : 
    9024             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9025             : 
    9026             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
    9027             : //      This code is automatically generated for each 
    9028             : //      terminal and non-terminal within the defined 
    9029             : //      grammar.  There is a simple way to change the 
    9030             : //      code to fix bugs etc.  See the ROSE README file
    9031             : //      for directions.
    9032             : 
    9033             : // tps: (02/22/2010): Adding DLL export requirements
    9034             : #include "rosedll.h"
    9035             : 
    9036             : // predeclarations for SgConstVolatileModifier
    9037             : 
    9038             : /* #line 9039 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9039             : 
    9040             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
    9041             : 
    9042             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9043             : 
    9044             : #if 1
    9045             : // Class Definition for SgConstVolatileModifier
    9046             : class ROSE_DLL_API SgConstVolatileModifier  : public SgModifier
    9047             :    {
    9048             :      public:
    9049             : 
    9050             : 
    9051             : /* #line 9052 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9052             : 
    9053             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
    9054             : // Start of memberFunctionString
    9055             : /* #line 818 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
    9056             : 
    9057             : 
    9058             :        // const_volatile specifiers (const, volatile)
    9059             : 
    9060             :       /*! \brief Const Volatile Modifier
    9061             : 
    9062             :           Must be either const, volatile, or neither.
    9063             : 
    9064             :           \internal Bit values can support multiple values in a single enum type
    9065             :        */
    9066             :           enum cv_modifier_enum
    9067             :              {
    9068             :                e_unknown,        /*!< Unknown value (error value) */
    9069             :                e_default,        /*!< Default value (default) */
    9070             :                e_const,          /*!< Const qualifier */
    9071             :                e_volatile,       /*!< Volatile qualifier */
    9072             :                e_const_volatile, /*!< Const and Volatile qualifier */
    9073             : 
    9074             :                e_last_modifier /*!< last value (unused, serves as upper bound on values) */
    9075             :              };
    9076             : 
    9077             :        // Copy constructor
    9078             :           SgConstVolatileModifier ( const SgConstVolatileModifier & X );
    9079             : 
    9080             :        // Assignment Operator
    9081             :           SgConstVolatileModifier & operator= ( const SgConstVolatileModifier & X );
    9082             : 
    9083             :           void post_construction_initialization() override;
    9084             : 
    9085             :           bool isUnknown() const;
    9086             :           void setUnknown();
    9087             : 
    9088             :        // DQ (3/21/2005): the default setting is non-const and non-volatile
    9089             :           bool isDefault() const;
    9090             :           void setDefault();
    9091             : 
    9092             :           bool isConst() const;
    9093             :           void setConst();
    9094             : 
    9095             :        // DQ (3/21/2005): We could have a design with no unset function since the cv data is not a bit vector
    9096             :        // the design reflects that a CV modifier is either const or volatile or neither.
    9097             :        // Thus unsetting const would be to set the default value.
    9098             :           void unsetConst();
    9099             : 
    9100             :           bool isVolatile() const;
    9101             :           void setVolatile();
    9102             :        // DQ (3/21/2005): See comment for unsetConst() above
    9103             :           void unsetVolatile();
    9104             : 
    9105             :           std::string displayString() const;
    9106             :           void display ( std::string label ) const;
    9107             :           friend std::ostream & operator<< ( std::ostream & os, const SgConstVolatileModifier & m );
    9108             :           friend bool operator== (const SgConstVolatileModifier& lhs, const SgConstVolatileModifier& rhs);
    9109             : 
    9110             :        // DQ (2/4/2006): Added mechamism to clear all bits
    9111             :           void reset();
    9112             : 
    9113             : 
    9114             : 
    9115             : // End of memberFunctionString
    9116             : // Start of memberFunctionString
    9117             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
    9118             : 
    9119             : // *** COMMON CODE SECTION BEGINS HERE ***
    9120             : 
    9121             :     public:
    9122             : 
    9123             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
    9124             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
    9125             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
    9126             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
    9127             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
    9128             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
    9129             : 
    9130             :       /*! \brief returns a string representing the class name */
    9131             :           virtual std::string class_name() const override;
    9132             : 
    9133             :       /*! \brief returns new style SageIII enum values */
    9134             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
    9135             : 
    9136             :       /*! \brief static variant value */
    9137             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
    9138             :        // static const VariantT static_variant = V_SgConstVolatileModifier;
    9139             :           enum { static_variant = V_SgConstVolatileModifier };
    9140             : 
    9141             :        /* the generated cast function */
    9142             :       /*! \brief Casts pointer from base class to derived class */
    9143             :           ROSE_DLL_API friend       SgConstVolatileModifier* isSgConstVolatileModifier(       SgNode * s );
    9144             : 
    9145             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
    9146             :           ROSE_DLL_API friend const SgConstVolatileModifier* isSgConstVolatileModifier( const SgNode * s );
    9147             : 
    9148             :      // ******************************************
    9149             :      // * Memory Pool / New / Delete
    9150             :      // ******************************************
    9151             : 
    9152             :      public:
    9153             :           /// \private
    9154             :           static const unsigned pool_size; //
    9155             :           /// \private
    9156             :           static std::vector<unsigned char *> pools; //
    9157             :           /// \private
    9158             :           static SgConstVolatileModifier * next_node; // 
    9159             : 
    9160             :           /// \private
    9161             :           static unsigned long initializeStorageClassArray(SgConstVolatileModifierStorageClass *); //
    9162             : 
    9163             :           /// \private
    9164             :           static void clearMemoryPool(); //
    9165             :           static void deleteMemoryPool(); //
    9166             : 
    9167             :           /// \private
    9168             :           static void extendMemoryPoolForFileIO(); //
    9169             : 
    9170             :           /// \private
    9171             :           static SgConstVolatileModifier * getPointerFromGlobalIndex(unsigned long); //
    9172             :           /// \private
    9173             :           static SgConstVolatileModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
    9174             : 
    9175             :           /// \private
    9176             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
    9177             :           /// \private
    9178             :           static void resetValidFreepointers(); //
    9179             :           /// \private
    9180             :           static unsigned long getNumberOfLastValidPointer(); //
    9181             : 
    9182             : 
    9183             : #if defined(INLINE_FUNCTIONS)
    9184             :       /*! \brief returns pointer to newly allocated IR node */
    9185             :           inline void *operator new (size_t size);
    9186             : #else
    9187             :       /*! \brief returns pointer to newly allocated IR node */
    9188             :           void *operator new (size_t size);
    9189             : #endif
    9190             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
    9191             :           void operator delete (void* pointer, size_t size);
    9192             : 
    9193             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
    9194           0 :           void operator delete (void* pointer)
    9195             :              {
    9196             :             // This is the generated delete operator...
    9197           0 :                SgConstVolatileModifier::operator delete (pointer,sizeof(SgConstVolatileModifier));
    9198             :              }
    9199             : 
    9200             :       /*! \brief Returns the total number of IR nodes of this type */
    9201             :           static size_t numberOfNodes();
    9202             : 
    9203             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
    9204             :           static size_t memoryUsage();
    9205             : 
    9206             :       // End of scope which started in IR nodes specific code 
    9207             :       /* */
    9208             : 
    9209             :       /* name Internal Functions
    9210             :           \brief Internal functions ... incomplete-documentation
    9211             : 
    9212             :           These functions have been made public as part of the design, but they are suggested for internal use 
    9213             :           or by particularly knowledgeable users for specialized tools or applications.
    9214             : 
    9215             :           \internal We could not make these private because they are required by user for special purposes. And 
    9216             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
    9217             :          
    9218             :        */
    9219             : 
    9220             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
    9221             :        // overridden in every class by *generated* implementation
    9222             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
    9223             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
    9224             :        // MS: 06/28/02 container of names of variables or container indices 
    9225             :        // used used in the traversal to access AST successor nodes
    9226             :        // overridden in every class by *generated* implementation
    9227             :       /*! \brief container of names of variables or container indices used used in the traversal
    9228             :           to access AST successor nodes overridden in every class by *generated* implementation */
    9229             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
    9230             : 
    9231             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
    9232             :        // than all the vector copies. The implementation for these functions is generated for each class.
    9233             :       /*! \brief return number of children in the traversal successor list */
    9234             :           virtual size_t get_numberOfTraversalSuccessors() override;
    9235             :       /*! \brief index-based access to traversal successors by index number */
    9236             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
    9237             :       /*! \brief index-based access to traversal successors by child node */
    9238             :           virtual size_t get_childIndex(SgNode *child) override;
    9239             : 
    9240             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    9241             :        // MS: 08/16/2002 method for generating RTI information
    9242             :       /*! \brief return C++ Runtime-Time-Information */
    9243             :           virtual RTIReturnType roseRTI() override;
    9244             : #endif
    9245             :       /* */
    9246             : 
    9247             : 
    9248             : 
    9249             :       /* name Deprecated Functions
    9250             :           \brief Deprecated functions ... incomplete-documentation
    9251             : 
    9252             :           These functions have been deprecated from use.
    9253             :        */
    9254             :       /* */
    9255             : 
    9256             :       /*! returns a C style string (char*) representing the class name */
    9257             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
    9258             : 
    9259             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
    9260             :       // getVariant() in #if 0 block to prevent confusing Doxygen
    9261             : #if 0
    9262             :       /*! returns old style Sage II enum values */
    9263             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
    9264             :       /*! returns old style Sage II enum values */
    9265             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
    9266             : #endif
    9267             :       /* */
    9268             : 
    9269             : 
    9270             : 
    9271             : 
    9272             :      public:
    9273             :       /* name Traversal Support Functions
    9274             :           \brief Traversal support functions ... incomplete-documentation
    9275             : 
    9276             :           These functions have been made public as part of the design, but they are suggested for internal use 
    9277             :           or by particularly knowledgable users for specialized tools or applications.
    9278             :        */
    9279             :       /* */
    9280             : 
    9281             :        // DQ (11/26/2005): Support for visitor pattern mechanims
    9282             :        // (inferior to ROSE traversal mechanism, experimental).
    9283             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    9284             :        */
    9285             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
    9286             : 
    9287             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
    9288             :       /*! \brief support for the classic visitor pattern done in GoF */
    9289             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
    9290             : 
    9291             :        // DQ (12/26/2005): Support for traversal based on the memory pool
    9292             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
    9293             :        */
    9294             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
    9295             : 
    9296             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    9297             :        */
    9298             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
    9299             : 
    9300             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
    9301             :        // This traversal helps support internal tools that call static member functions.
    9302             :        // note: this function operates on the memory pools.
    9303             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
    9304             :        */
    9305             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
    9306             :       /* */
    9307             : 
    9308             : 
    9309             :      public:
    9310             :       /* name Memory Allocation Functions
    9311             :           \brief Memory allocations functions ... incomplete-documentation
    9312             : 
    9313             :           These functions have been made public as part of the design, but they are suggested for internal use 
    9314             :           or by particularly knowledgable users for specialized tools or applications.
    9315             :        */
    9316             :       /* */
    9317             : 
    9318             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    9319             : 
    9320             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    9321             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    9322             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    9323             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    9324             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    9325             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    9326             :           being used with the AST File I/O mechanism.
    9327             :        */
    9328             :           virtual bool isInMemoryPool() override;
    9329             : 
    9330             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    9331             : 
    9332             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    9333             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    9334             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    9335             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    9336             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    9337             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    9338             :           being used with the AST File I/O mechanism.
    9339             :        */
    9340             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
    9341             : 
    9342             :       // DQ (4/30/2006): Modified to be a const function.
    9343             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
    9344             : 
    9345             :           This functions is part of general support for many possible tools to operate 
    9346             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
    9347             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
    9348             :           less than the set of pointers used by the AST file I/O. This is part of
    9349             :           work implemented by Andreas, and support tools such as the AST graph generation.
    9350             : 
    9351             :           \warning This function can return unexpected data members and thus the 
    9352             :                    order and the number of elements is unpredicable and subject 
    9353             :                    to change.
    9354             : 
    9355             :           \returns STL vector of pairs of SgNode* and strings
    9356             :        */
    9357             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
    9358             : 
    9359             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
    9360             : 
    9361             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
    9362             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
    9363             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
    9364             : 
    9365             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
    9366             :                    and subject to change.
    9367             :        */
    9368             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
    9369             : 
    9370             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
    9371             : 
    9372             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
    9373             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
    9374             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
    9375             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
    9376             : 
    9377             :           \warning The mapping on children to integer values could change from release to release of ROSE.
    9378             : 
    9379             :           \returns long
    9380             :        */
    9381             :           virtual long getChildIndex( SgNode* childNode ) const override;
    9382             : 
    9383             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
    9384             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    9385             :       /* \brief Constructor for use by AST File I/O Mechanism
    9386             : 
    9387             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
    9388             :           which obtained via fast binary file I/O from disk.
    9389             :        */
    9390             :        // SgConstVolatileModifier( SgConstVolatileModifierStorageClass& source );
    9391             : 
    9392             : 
    9393             : 
    9394             : 
    9395             : 
    9396             :  // JH (10/24/2005): methods added to support the ast file IO
    9397             :     private:
    9398             : 
    9399             :       /* name AST Memory Allocation Support Functions
    9400             :           \brief Memory allocations support....
    9401             : 
    9402             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
    9403             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    9404             :           and support the AST File I/O Mechanism.
    9405             :        */
    9406             :       /* */
    9407             : 
    9408             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
    9409             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
    9410             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
    9411             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
    9412             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
    9413             :           a correspinding one in the AST_FILE_IO class!
    9414             :        */
    9415             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    9416             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    9417             :       /* \brief Typedef used for low level memory access.
    9418             :        */
    9419             :        // typedef unsigned char* TestType;
    9420             : 
    9421             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
    9422             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    9423             :       /* \brief Typedef used to hold memory addresses as values.
    9424             :        */
    9425             :        // typedef unsigned long  AddressType;
    9426             : 
    9427             : 
    9428             : 
    9429             :        // necessary, to have direct access to the p_freepointer and the private methods !
    9430             :       /*! \brief friend class declaration to support AST File I/O */
    9431             :           friend class AST_FILE_IO;
    9432             : 
    9433             :       /*! \brief friend class declaration to support AST File I/O */
    9434             :           friend class SgConstVolatileModifierStorageClass;
    9435             : 
    9436             :       /*! \brief friend class declaration to support AST File I/O */
    9437             :           friend class AstSpecificDataManagingClass;
    9438             : 
    9439             :       /*! \brief friend class declaration to support AST File I/O */
    9440             :           friend class AstSpecificDataManagingClassStorageClass;
    9441             :     public:
    9442             :       /*! \brief IR node constructor to support AST File I/O */
    9443             :           SgConstVolatileModifier( const SgConstVolatileModifierStorageClass& source );
    9444             : 
    9445             :  // private: // JJW hack
    9446             :        /*
    9447             :           name AST Memory Allocation Support Variables
    9448             :           Memory allocations support variables 
    9449             : 
    9450             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
    9451             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
    9452             :           and support the AST File I/O Mechanism.
    9453             :        */
    9454             :       /* */
    9455             : 
    9456             :     public:
    9457             : 
    9458             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
    9459             :       // to current node (so that it will work cleanly with build functions to specify patterns).
    9460             :       // virtual SgNode* addRegExpAttribute();
    9461             :       /*! \brief Support for AST matching using regular expression.
    9462             : 
    9463             :           This support is incomplete and the subject of current research to define 
    9464             :           RegEx trees to support inexact matching.
    9465             :        */
    9466             :           SgConstVolatileModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
    9467             : 
    9468             : // *** COMMON CODE SECTION ENDS HERE ***
    9469             : 
    9470             : 
    9471             : // End of memberFunctionString
    9472             : // Start of memberFunctionString
    9473             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
    9474             : 
    9475             :      // the generated cast function
    9476             :      // friend ROSE_DLL_API SgConstVolatileModifier* isSgConstVolatileModifier ( SgNode* s );
    9477             : 
    9478             :           typedef SgModifier base_node_type;
    9479             : 
    9480             : 
    9481             : // End of memberFunctionString
    9482             : 
    9483             :      public: 
    9484             :          SgConstVolatileModifier::cv_modifier_enum get_modifier() const;
    9485             :          void set_modifier(SgConstVolatileModifier::cv_modifier_enum modifier);
    9486             : 
    9487             : 
    9488             :      public: 
    9489             :          virtual ~SgConstVolatileModifier();
    9490             : 
    9491             : 
    9492             :      public: 
    9493             :          SgConstVolatileModifier(); 
    9494             : 
    9495             :     protected:
    9496             : // Start of memberFunctionString
    9497             : SgConstVolatileModifier::cv_modifier_enum p_modifier;
    9498             :           
    9499             : // End of memberFunctionString
    9500             : 
    9501             :     friend struct Rose::Traits::generated::describe_node_t<SgConstVolatileModifier>;
    9502             :     friend struct Rose::Traits::generated::describe_field_t<SgConstVolatileModifier, SgConstVolatileModifier::cv_modifier_enum,&SgConstVolatileModifier::p_modifier>;
    9503             : 
    9504             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9505             : 
    9506             : 
    9507             :    };
    9508             : #endif
    9509             : 
    9510             : // postdeclarations for SgConstVolatileModifier
    9511             : 
    9512             : /* #line 9513 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9513             : 
    9514             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
    9515             : 
    9516             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9517             : 
    9518             : 
    9519             : /* #line 9520 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9520             : 
    9521             : 
    9522             : 
    9523             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9524             : 
    9525             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
    9526             : //      This code is automatically generated for each 
    9527             : //      terminal and non-terminal within the defined 
    9528             : //      grammar.  There is a simple way to change the 
    9529             : //      code to fix bugs etc.  See the ROSE README file
    9530             : //      for directions.
    9531             : 
    9532             : // tps: (02/22/2010): Adding DLL export requirements
    9533             : #include "rosedll.h"
    9534             : 
    9535             : // predeclarations for SgStorageModifier
    9536             : 
    9537             : /* #line 9538 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9538             : 
    9539             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
    9540             : 
    9541             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
    9542             : 
    9543             : #if 1
    9544             : // Class Definition for SgStorageModifier
    9545             : class ROSE_DLL_API SgStorageModifier  : public SgModifier
    9546             :    {
    9547             :      public:
    9548             : 
    9549             : 
    9550             : /* #line 9551 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
    9551             : 
    9552             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
    9553             : // Start of memberFunctionString
    9554             : /* #line 877 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
    9555             : 
    9556             : 
    9557             :        // storage specifiers (auto, static, register, extern, mutable)
    9558             : 
    9559             :        // C++ grammar defines storage modifier to be only: auto, static, register, extern, mutable
    9560             : 
    9561             :        // DQ (4/6/2004): Added to provide uniform support for storage modifiers
    9562             :       /*! \brief Storage Modifiers (only one value can be specified)
    9563             : 
    9564             :           Storage modifiers are used to specify location or properties of declarations.
    9565             :           For example, static variables in functions are stored in global scope, register
    9566             :           variables are a hint to store the value in a CPU register (mosty ignored by
    9567             :           modern compilers).
    9568             : 
    9569             :           \internal Only one value can be specified (at least in C and C++)
    9570             :        */
    9571             :           enum storage_modifier_enum
    9572             :              {
    9573             :                e_unknown       = 0,  /*!< error value */
    9574             :                e_default       = 1,  /*!< default value */
    9575             :                e_extern        = 2,  /*!< extern storage modifier */
    9576             :                e_static        = 3,  /*!< static storage modifier */
    9577             :                e_auto          = 4,  /*!< auto storage value */
    9578             :                e_unspecified   = 5,  /*!< previous (old) default value, not included in C++ grammar definition of storage modifier */
    9579             :                e_register      = 6,  /*!< register storage modifier */
    9580             :                e_mutable       = 7,  /*!< mutable storage modifier */
    9581             :                e_typedef       = 8,  /*!< not used, not included in C++ grammar definition of storage modifier */
    9582             :                e_asm           = 9,  /*!< not used, not included in C++ grammar definition of storage modifier */
    9583             : #ifdef FORTRAN_SUPPORTED
    9584             :             // included for later FORTRAN support
    9585             :                e_local         = 10, /*!< Auto or static at back end's preference */
    9586             :                e_common        = 11, /*!< A COMMON block */
    9587             :                e_associated    = 12, /*!< Variable is part of an association */
    9588             :                e_intrinsic     = 13, /*!< Intrinsic function or subroutine */
    9589             :                e_pointer_based = 14, /*!< Pointee of a POINTER definition */
    9590             : #endif
    9591             : 
    9592             :             // Rasmussen (02/04/2018): Fortran contiguous array storage attribute
    9593             :                e_contiguous    = 15, /*!< Contiguous array memory-storage attribute */
    9594             : 
    9595             :             // TV (04/08/2010): Support for CUDA storage modifiers
    9596             :                e_cuda_global         = 16, /*!< CUDA, in device's global memory */
    9597             :                e_cuda_constant       = 17, /*!< CUDA, in device's constant memory */
    9598             :                e_cuda_shared         = 18, /*!< CUDA, in device's shared memory */
    9599             :                e_cuda_dynamic_shared = 19, /*!< CUDA, in device's shared memory, dynamically allocated */
    9600             : 
    9601             :            // Rasmussen (03/13/2018): New CUDA storage modifiers
    9602             :                e_cuda_device_memory  = 20, /*!< CUDA, in device's global memory */
    9603             :                e_cuda_managed        = 21, /*!< CUDA, memory managed between host and device */
    9604             :                e_cuda_pinned         = 22, /*!< CUDA, in device's texture memory (read only)  */
    9605             :                e_cuda_texture        = 23, /*!< CUDA, in host's page-locked memory */
    9606             : 
    9607             :                e_last_modifier  /*!< last value (upper bound on range of values, used in error checking) */
    9608             :              };
    9609             : 
    9610             :        // Copy constructor
    9611             :           SgStorageModifier ( const SgStorageModifier & X );
    9612             : 
    9613             :        // Assignment Operator
    9614             :           SgStorageModifier & operator= ( const SgStorageModifier & X );
    9615             : 
    9616             :           void post_construction_initialization() override;
    9617             : 
    9618             :           bool isUnknown() const;
    9619             :           void setUnknown();
    9620             : 
    9621             :           bool isDefault() const;
    9622             :           void setDefault();
    9623             : 
    9624             :           bool isExtern() const;
    9625             :           void setExtern();
    9626             : 
    9627             :           bool isStatic() const;
    9628             :           void setStatic();
    9629             : 
    9630             :           bool isAuto() const;
    9631             :           void setAuto();
    9632             : 
    9633             :           bool isUnspecified() const;
    9634             :           void setUnspecified();
    9635             : 
    9636             :           bool isRegister() const;
    9637             :           void setRegister();
    9638             : 
    9639             :           bool isMutable() const;
    9640             :           void setMutable();
    9641             : 
    9642             :        // This is not used (but is present in the EDG AST)
    9643             :           bool isTypedef() const;
    9644             :           void setTypedef();
    9645             : 
    9646             :        // This is not used (but is present in the EDG AST)
    9647             :           bool isAsm() const;
    9648             :           void setAsm();
    9649             : 
    9650             : #if 0
    9651             :        // DQ (11/18/2007): We store this information differently now!
    9652             : #ifdef FORTRAN_SUPPORTED
    9653             :        // These remaining access functions are specific to FORTRAN
    9654             :           bool isLocal() const;
    9655             :           void setLocal();
    9656             : 
    9657             :           bool isCommon() const;
    9658             :           void setCommon();
    9659             : 
    9660             :           bool isAssociated() const;
    9661             :           void setAssociated();
    9662             : 
    9663             :           bool isIntrinsic() const;
    9664             :           void setIntrinsic();
    9665             : 
    9666             :           bool isPointerBased() const;
    9667             :           void setPointerBased();
    9668             : #endif
    9669             : #endif
    9670             : 
    9671             :        // Rasmussen (02/06/2018): Fortran contiguous array storage attribute
    9672             :           bool isContiguous() const;
    9673             :           void setContiguous();
    9674             : 
    9675             :        // TV (04/08/2010): Support for CUDA storage modifiers
    9676             : 
    9677             :           bool isCudaGlobal() const;
    9678             :           void setCudaGlobal();
    9679             : 
    9680             :           bool isCudaConstant() const;
    9681             :           void setCudaConstant();
    9682             : 
    9683             :           bool isCudaShared() const;
    9684             :           void setCudaShared();
    9685             : 
    9686             :           bool isCudaDynamicShared() const;
    9687             :           void setCudaDynamicShared();
    9688             : 
    9689             :        // Rasmussen (03/13/2018): New CUDA storage modifiers
    9690             : 
    9691             :           bool isCudaDeviceMemory() const;
    9692             :           void setCudaDeviceMemory();
    9693             : 
    9694             :           bool isCudaManaged() const;
    9695             :           void setCudaManaged();
    9696             : 
    9697             :           bool isCudaPinned() const;
    9698             :           void setCudaPinned();
    9699             : 
    9700             :           bool isCudaTexture() const;
    9701             :           void setCudaTexture();
    9702             : 
    9703             :           std::string displayString() const;
    9704             :           void display ( std::string label ) const;
    9705             :           friend std::ostream & operator<< ( std::ostream & os, const SgStorageModifier & m );
    9706             :       friend bool operator== (const SgStorageModifier& lhs, const SgStorageModifier& rhs);
    9707             : 
    9708             :        // DQ (2/4/2006): Added mechamism to clear all bits
    9709             :           void reset();
    9710             : 
    9711             : 
    9712             : 
    9713             : // End of memberFunctionString
    9714             : // Start of memberFunctionString
    9715             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
    9716             : 
    9717             : // *** COMMON CODE SECTION BEGINS HERE ***
    9718             : 
    9719             :     public:
    9720             : 
    9721             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
    9722             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
    9723             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
    9724             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
    9725             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
    9726             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
    9727             : 
    9728             :       /*! \brief returns a string representing the class name */
    9729             :           virtual std::string class_name() const override;
    9730             : 
    9731             :       /*! \brief returns new style SageIII enum values */
    9732             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
    9733             : 
    9734             :       /*! \brief static variant value */
    9735             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
    9736             :        // static const VariantT static_variant = V_SgStorageModifier;
    9737             :           enum { static_variant = V_SgStorageModifier };
    9738             : 
    9739             :        /* the generated cast function */
    9740             :       /*! \brief Casts pointer from base class to derived class */
    9741             :           ROSE_DLL_API friend       SgStorageModifier* isSgStorageModifier(       SgNode * s );
    9742             : 
    9743             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
    9744             :           ROSE_DLL_API friend const SgStorageModifier* isSgStorageModifier( const SgNode * s );
    9745             : 
    9746             :      // ******************************************
    9747             :      // * Memory Pool / New / Delete
    9748             :      // ******************************************
    9749             : 
    9750             :      public:
    9751             :           /// \private
    9752             :           static const unsigned pool_size; //
    9753             :           /// \private
    9754             :           static std::vector<unsigned char *> pools; //
    9755             :           /// \private
    9756             :           static SgStorageModifier * next_node; // 
    9757             : 
    9758             :           /// \private
    9759             :           static unsigned long initializeStorageClassArray(SgStorageModifierStorageClass *); //
    9760             : 
    9761             :           /// \private
    9762             :           static void clearMemoryPool(); //
    9763             :           static void deleteMemoryPool(); //
    9764             : 
    9765             :           /// \private
    9766             :           static void extendMemoryPoolForFileIO(); //
    9767             : 
    9768             :           /// \private
    9769             :           static SgStorageModifier * getPointerFromGlobalIndex(unsigned long); //
    9770             :           /// \private
    9771             :           static SgStorageModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
    9772             : 
    9773             :           /// \private
    9774             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
    9775             :           /// \private
    9776             :           static void resetValidFreepointers(); //
    9777             :           /// \private
    9778             :           static unsigned long getNumberOfLastValidPointer(); //
    9779             : 
    9780             : 
    9781             : #if defined(INLINE_FUNCTIONS)
    9782             :       /*! \brief returns pointer to newly allocated IR node */
    9783             :           inline void *operator new (size_t size);
    9784             : #else
    9785             :       /*! \brief returns pointer to newly allocated IR node */
    9786             :           void *operator new (size_t size);
    9787             : #endif
    9788             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
    9789             :           void operator delete (void* pointer, size_t size);
    9790             : 
    9791             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
    9792      110459 :           void operator delete (void* pointer)
    9793             :              {
    9794             :             // This is the generated delete operator...
    9795      110459 :                SgStorageModifier::operator delete (pointer,sizeof(SgStorageModifier));
    9796             :              }
    9797             : 
    9798             :       /*! \brief Returns the total number of IR nodes of this type */
    9799             :           static size_t numberOfNodes();
    9800             : 
    9801             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
    9802             :           static size_t memoryUsage();
    9803             : 
    9804             :       // End of scope which started in IR nodes specific code 
    9805             :       /* */
    9806             : 
    9807             :       /* name Internal Functions
    9808             :           \brief Internal functions ... incomplete-documentation
    9809             : 
    9810             :           These functions have been made public as part of the design, but they are suggested for internal use 
    9811             :           or by particularly knowledgeable users for specialized tools or applications.
    9812             : 
    9813             :           \internal We could not make these private because they are required by user for special purposes. And 
    9814             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
    9815             :          
    9816             :        */
    9817             : 
    9818             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
    9819             :        // overridden in every class by *generated* implementation
    9820             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
    9821             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
    9822             :        // MS: 06/28/02 container of names of variables or container indices 
    9823             :        // used used in the traversal to access AST successor nodes
    9824             :        // overridden in every class by *generated* implementation
    9825             :       /*! \brief container of names of variables or container indices used used in the traversal
    9826             :           to access AST successor nodes overridden in every class by *generated* implementation */
    9827             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
    9828             : 
    9829             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
    9830             :        // than all the vector copies. The implementation for these functions is generated for each class.
    9831             :       /*! \brief return number of children in the traversal successor list */
    9832             :           virtual size_t get_numberOfTraversalSuccessors() override;
    9833             :       /*! \brief index-based access to traversal successors by index number */
    9834             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
    9835             :       /*! \brief index-based access to traversal successors by child node */
    9836             :           virtual size_t get_childIndex(SgNode *child) override;
    9837             : 
    9838             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
    9839             :        // MS: 08/16/2002 method for generating RTI information
    9840             :       /*! \brief return C++ Runtime-Time-Information */
    9841             :           virtual RTIReturnType roseRTI() override;
    9842             : #endif
    9843             :       /* */
    9844             : 
    9845             : 
    9846             : 
    9847             :       /* name Deprecated Functions
    9848             :           \brief Deprecated functions ... incomplete-documentation
    9849             : 
    9850             :           These functions have been deprecated from use.
    9851             :        */
    9852             :       /* */
    9853             : 
    9854             :       /*! returns a C style string (char*) representing the class name */
    9855             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
    9856             : 
    9857             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
    9858             :       // getVariant() in #if 0 block to prevent confusing Doxygen
    9859             : #if 0
    9860             :       /*! returns old style Sage II enum values */
    9861             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
    9862             :       /*! returns old style Sage II enum values */
    9863             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
    9864             : #endif
    9865             :       /* */
    9866             : 
    9867             : 
    9868             : 
    9869             : 
    9870             :      public:
    9871             :       /* name Traversal Support Functions
    9872             :           \brief Traversal support functions ... incomplete-documentation
    9873             : 
    9874             :           These functions have been made public as part of the design, but they are suggested for internal use 
    9875             :           or by particularly knowledgable users for specialized tools or applications.
    9876             :        */
    9877             :       /* */
    9878             : 
    9879             :        // DQ (11/26/2005): Support for visitor pattern mechanims
    9880             :        // (inferior to ROSE traversal mechanism, experimental).
    9881             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    9882             :        */
    9883             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
    9884             : 
    9885             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
    9886             :       /*! \brief support for the classic visitor pattern done in GoF */
    9887             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
    9888             : 
    9889             :        // DQ (12/26/2005): Support for traversal based on the memory pool
    9890             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
    9891             :        */
    9892             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
    9893             : 
    9894             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
    9895             :        */
    9896             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
    9897             : 
    9898             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
    9899             :        // This traversal helps support internal tools that call static member functions.
    9900             :        // note: this function operates on the memory pools.
    9901             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
    9902             :        */
    9903             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
    9904             :       /* */
    9905             : 
    9906             : 
    9907             :      public:
    9908             :       /* name Memory Allocation Functions
    9909             :           \brief Memory allocations functions ... incomplete-documentation
    9910             : 
    9911             :           These functions have been made public as part of the design, but they are suggested for internal use 
    9912             :           or by particularly knowledgable users for specialized tools or applications.
    9913             :        */
    9914             :       /* */
    9915             : 
    9916             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    9917             : 
    9918             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    9919             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    9920             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    9921             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    9922             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    9923             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    9924             :           being used with the AST File I/O mechanism.
    9925             :        */
    9926             :           virtual bool isInMemoryPool() override;
    9927             : 
    9928             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
    9929             : 
    9930             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
    9931             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
    9932             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
    9933             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
    9934             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
    9935             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
    9936             :           being used with the AST File I/O mechanism.
    9937             :        */
    9938             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
    9939             : 
    9940             :       // DQ (4/30/2006): Modified to be a const function.
    9941             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
    9942             : 
    9943             :           This functions is part of general support for many possible tools to operate 
    9944             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
    9945             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
    9946             :           less than the set of pointers used by the AST file I/O. This is part of
    9947             :           work implemented by Andreas, and support tools such as the AST graph generation.
    9948             : 
    9949             :           \warning This function can return unexpected data members and thus the 
    9950             :                    order and the number of elements is unpredicable and subject 
    9951             :                    to change.
    9952             : 
    9953             :           \returns STL vector of pairs of SgNode* and strings
    9954             :        */
    9955             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
    9956             : 
    9957             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
    9958             : 
    9959             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
    9960             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
    9961             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
    9962             : 
    9963             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
    9964             :                    and subject to change.
    9965             :        */
    9966             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
    9967             : 
    9968             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
    9969             : 
    9970             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
    9971             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
    9972             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
    9973             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
    9974             : 
    9975             :           \warning The mapping on children to integer values could change from release to release of ROSE.
    9976             : 
    9977             :           \returns long
    9978             :        */
    9979             :           virtual long getChildIndex( SgNode* childNode ) const override;
    9980             : 
    9981             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
    9982             :       // comment here (changed to be a C style comment and not be a doxygen comment).
    9983             :       /* \brief Constructor for use by AST File I/O Mechanism
    9984             : 
    9985             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
    9986             :           which obtained via fast binary file I/O from disk.
    9987             :        */
    9988             :        // SgStorageModifier( SgStorageModifierStorageClass& source );
    9989             : 
    9990             : 
    9991             : 
    9992             : 
    9993             : 
    9994             :  // JH (10/24/2005): methods added to support the ast file IO
    9995             :     private:
    9996             : 
    9997             :       /* name AST Memory Allocation Support Functions
    9998             :           \brief Memory allocations support....
    9999             : 
   10000             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   10001             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   10002             :           and support the AST File I/O Mechanism.
   10003             :        */
   10004             :       /* */
   10005             : 
   10006             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   10007             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   10008             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   10009             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   10010             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   10011             :           a correspinding one in the AST_FILE_IO class!
   10012             :        */
   10013             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   10014             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   10015             :       /* \brief Typedef used for low level memory access.
   10016             :        */
   10017             :        // typedef unsigned char* TestType;
   10018             : 
   10019             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   10020             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   10021             :       /* \brief Typedef used to hold memory addresses as values.
   10022             :        */
   10023             :        // typedef unsigned long  AddressType;
   10024             : 
   10025             : 
   10026             : 
   10027             :        // necessary, to have direct access to the p_freepointer and the private methods !
   10028             :       /*! \brief friend class declaration to support AST File I/O */
   10029             :           friend class AST_FILE_IO;
   10030             : 
   10031             :       /*! \brief friend class declaration to support AST File I/O */
   10032             :           friend class SgStorageModifierStorageClass;
   10033             : 
   10034             :       /*! \brief friend class declaration to support AST File I/O */
   10035             :           friend class AstSpecificDataManagingClass;
   10036             : 
   10037             :       /*! \brief friend class declaration to support AST File I/O */
   10038             :           friend class AstSpecificDataManagingClassStorageClass;
   10039             :     public:
   10040             :       /*! \brief IR node constructor to support AST File I/O */
   10041             :           SgStorageModifier( const SgStorageModifierStorageClass& source );
   10042             : 
   10043             :  // private: // JJW hack
   10044             :        /*
   10045             :           name AST Memory Allocation Support Variables
   10046             :           Memory allocations support variables 
   10047             : 
   10048             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   10049             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   10050             :           and support the AST File I/O Mechanism.
   10051             :        */
   10052             :       /* */
   10053             : 
   10054             :     public:
   10055             : 
   10056             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   10057             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   10058             :       // virtual SgNode* addRegExpAttribute();
   10059             :       /*! \brief Support for AST matching using regular expression.
   10060             : 
   10061             :           This support is incomplete and the subject of current research to define 
   10062             :           RegEx trees to support inexact matching.
   10063             :        */
   10064             :           SgStorageModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   10065             : 
   10066             : // *** COMMON CODE SECTION ENDS HERE ***
   10067             : 
   10068             : 
   10069             : // End of memberFunctionString
   10070             : // Start of memberFunctionString
   10071             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   10072             : 
   10073             :      // the generated cast function
   10074             :      // friend ROSE_DLL_API SgStorageModifier* isSgStorageModifier ( SgNode* s );
   10075             : 
   10076             :           typedef SgModifier base_node_type;
   10077             : 
   10078             : 
   10079             : // End of memberFunctionString
   10080             : 
   10081             :      public: 
   10082             :          SgStorageModifier::storage_modifier_enum get_modifier() const;
   10083             :          void set_modifier(SgStorageModifier::storage_modifier_enum modifier);
   10084             : 
   10085             :      public: 
   10086             :          bool get_thread_local_storage() const;
   10087             :          void set_thread_local_storage(bool thread_local_storage);
   10088             : 
   10089             : 
   10090             :      public: 
   10091             :          virtual ~SgStorageModifier();
   10092             : 
   10093             : 
   10094             :      public: 
   10095             :          SgStorageModifier(); 
   10096             : 
   10097             :     protected:
   10098             : // Start of memberFunctionString
   10099             : SgStorageModifier::storage_modifier_enum p_modifier;
   10100             :           
   10101             : // End of memberFunctionString
   10102             : // Start of memberFunctionString
   10103             : bool p_thread_local_storage;
   10104             :           
   10105             : // End of memberFunctionString
   10106             : 
   10107             :     friend struct Rose::Traits::generated::describe_node_t<SgStorageModifier>;
   10108             :     friend struct Rose::Traits::generated::describe_field_t<SgStorageModifier, SgStorageModifier::storage_modifier_enum,&SgStorageModifier::p_modifier>;
   10109             :     friend struct Rose::Traits::generated::describe_field_t<SgStorageModifier, bool,&SgStorageModifier::p_thread_local_storage>;
   10110             : 
   10111             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10112             : 
   10113             : 
   10114             :    };
   10115             : #endif
   10116             : 
   10117             : // postdeclarations for SgStorageModifier
   10118             : 
   10119             : /* #line 10120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10120             : 
   10121             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   10122             : 
   10123             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10124             : 
   10125             : 
   10126             : /* #line 10127 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10127             : 
   10128             : 
   10129             : 
   10130             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10131             : 
   10132             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   10133             : //      This code is automatically generated for each 
   10134             : //      terminal and non-terminal within the defined 
   10135             : //      grammar.  There is a simple way to change the 
   10136             : //      code to fix bugs etc.  See the ROSE README file
   10137             : //      for directions.
   10138             : 
   10139             : // tps: (02/22/2010): Adding DLL export requirements
   10140             : #include "rosedll.h"
   10141             : 
   10142             : // predeclarations for SgAccessModifier
   10143             : 
   10144             : /* #line 10145 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10145             : 
   10146             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   10147             : 
   10148             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10149             : 
   10150             : #if 1
   10151             : // Class Definition for SgAccessModifier
   10152             : class ROSE_DLL_API SgAccessModifier  : public SgModifier
   10153             :    {
   10154             :      public:
   10155             : 
   10156             : 
   10157             : /* #line 10158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10158             : 
   10159             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   10160             : // Start of memberFunctionString
   10161             : /* #line 1035 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   10162             : 
   10163             : 
   10164             :        // access specifiers (private, protected, public)
   10165             : 
   10166             :        // DQ (4/6/2004): Added to provide uniform support for access modifiers
   10167             :       /*! \brief Access Modifiers (only one value can be specified)
   10168             : 
   10169             :           \internal Only one value can be specified (at least in C and C++)
   10170             : 
   10171             :           \note Added an undefined value for Fortran 90 support.
   10172             :        */
   10173             :           enum access_modifier_enum
   10174             :              {
   10175             :                e_unknown   = 0,        /*!< error value */
   10176             :                e_private   = 1,        /*!< private access (local to class members) */
   10177             :                e_protected = 2,        /*!< protected access (local to class members and membrs of derived classes) */
   10178             :                e_public    = 3,        /*!< public access (access within enclosing namespace) */
   10179             : #if 0
   10180             :             // DQ (8/11/2020): Original code.
   10181             :                e_default   = e_public, /*!< default value (public access) */  /*NO_STRINGIFY*/
   10182             :                e_undefined = 4,        /*!< fortran default value */
   10183             : #else
   10184             :             // DQ (8/11/2020): new code for bug Cxx_tests/test2020_28.C.
   10185             :                e_default   = 4,        /*!< default value (public access) */  /*NO_STRINGIFY*/
   10186             :                e_undefined = 5,        /*!< fortran default value */
   10187             : #endif
   10188             :                e_last_modifier         /*!< last value (upper bound on range of values, used in error checking) */
   10189             :              };
   10190             : 
   10191             :        // Copy constructor
   10192             :           SgAccessModifier ( const SgAccessModifier & X );
   10193             : 
   10194             :        // Assignment Operator
   10195             :           SgAccessModifier & operator= ( const SgAccessModifier & X );
   10196             : 
   10197             :           void post_construction_initialization() override;
   10198             : 
   10199             :           bool isUnknown() const;
   10200             :           void setUnknown();
   10201             : 
   10202             :           bool isDefault() const;
   10203             :           void setDefault();
   10204             : 
   10205             :           bool isPrivate() const;
   10206             :           void setPrivate();
   10207             : 
   10208             :           bool isProtected() const;
   10209             :           void setProtected();
   10210             : 
   10211             :           bool isPublic() const;
   10212             :           void setPublic();
   10213             : 
   10214             :        // DQ (11/24/2007): Added support for Fortran staements to have undefined access (default in modules should not be public (or private))
   10215             :           bool isUndefined() const;
   10216             :           void setUndefined();
   10217             : 
   10218             :           std::string displayString() const;
   10219             :           void display ( std::string label ) const;
   10220             :           friend std::ostream & operator<< ( std::ostream & os, const SgAccessModifier & m );
   10221             :       friend bool operator== (const SgAccessModifier& lhs, const SgAccessModifier& rhs);
   10222             : 
   10223             :        // DQ (2/4/2006): Added mechamism to clear all bits
   10224             :           void reset();
   10225             : 
   10226             : 
   10227             : 
   10228             : // End of memberFunctionString
   10229             : // Start of memberFunctionString
   10230             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   10231             : 
   10232             : // *** COMMON CODE SECTION BEGINS HERE ***
   10233             : 
   10234             :     public:
   10235             : 
   10236             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   10237             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   10238             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   10239             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   10240             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   10241             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   10242             : 
   10243             :       /*! \brief returns a string representing the class name */
   10244             :           virtual std::string class_name() const override;
   10245             : 
   10246             :       /*! \brief returns new style SageIII enum values */
   10247             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   10248             : 
   10249             :       /*! \brief static variant value */
   10250             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   10251             :        // static const VariantT static_variant = V_SgAccessModifier;
   10252             :           enum { static_variant = V_SgAccessModifier };
   10253             : 
   10254             :        /* the generated cast function */
   10255             :       /*! \brief Casts pointer from base class to derived class */
   10256             :           ROSE_DLL_API friend       SgAccessModifier* isSgAccessModifier(       SgNode * s );
   10257             : 
   10258             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   10259             :           ROSE_DLL_API friend const SgAccessModifier* isSgAccessModifier( const SgNode * s );
   10260             : 
   10261             :      // ******************************************
   10262             :      // * Memory Pool / New / Delete
   10263             :      // ******************************************
   10264             : 
   10265             :      public:
   10266             :           /// \private
   10267             :           static const unsigned pool_size; //
   10268             :           /// \private
   10269             :           static std::vector<unsigned char *> pools; //
   10270             :           /// \private
   10271             :           static SgAccessModifier * next_node; // 
   10272             : 
   10273             :           /// \private
   10274             :           static unsigned long initializeStorageClassArray(SgAccessModifierStorageClass *); //
   10275             : 
   10276             :           /// \private
   10277             :           static void clearMemoryPool(); //
   10278             :           static void deleteMemoryPool(); //
   10279             : 
   10280             :           /// \private
   10281             :           static void extendMemoryPoolForFileIO(); //
   10282             : 
   10283             :           /// \private
   10284             :           static SgAccessModifier * getPointerFromGlobalIndex(unsigned long); //
   10285             :           /// \private
   10286             :           static SgAccessModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   10287             : 
   10288             :           /// \private
   10289             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   10290             :           /// \private
   10291             :           static void resetValidFreepointers(); //
   10292             :           /// \private
   10293             :           static unsigned long getNumberOfLastValidPointer(); //
   10294             : 
   10295             : 
   10296             : #if defined(INLINE_FUNCTIONS)
   10297             :       /*! \brief returns pointer to newly allocated IR node */
   10298             :           inline void *operator new (size_t size);
   10299             : #else
   10300             :       /*! \brief returns pointer to newly allocated IR node */
   10301             :           void *operator new (size_t size);
   10302             : #endif
   10303             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   10304             :           void operator delete (void* pointer, size_t size);
   10305             : 
   10306             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   10307           0 :           void operator delete (void* pointer)
   10308             :              {
   10309             :             // This is the generated delete operator...
   10310           0 :                SgAccessModifier::operator delete (pointer,sizeof(SgAccessModifier));
   10311             :              }
   10312             : 
   10313             :       /*! \brief Returns the total number of IR nodes of this type */
   10314             :           static size_t numberOfNodes();
   10315             : 
   10316             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   10317             :           static size_t memoryUsage();
   10318             : 
   10319             :       // End of scope which started in IR nodes specific code 
   10320             :       /* */
   10321             : 
   10322             :       /* name Internal Functions
   10323             :           \brief Internal functions ... incomplete-documentation
   10324             : 
   10325             :           These functions have been made public as part of the design, but they are suggested for internal use 
   10326             :           or by particularly knowledgeable users for specialized tools or applications.
   10327             : 
   10328             :           \internal We could not make these private because they are required by user for special purposes. And 
   10329             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   10330             :          
   10331             :        */
   10332             : 
   10333             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   10334             :        // overridden in every class by *generated* implementation
   10335             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   10336             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   10337             :        // MS: 06/28/02 container of names of variables or container indices 
   10338             :        // used used in the traversal to access AST successor nodes
   10339             :        // overridden in every class by *generated* implementation
   10340             :       /*! \brief container of names of variables or container indices used used in the traversal
   10341             :           to access AST successor nodes overridden in every class by *generated* implementation */
   10342             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   10343             : 
   10344             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   10345             :        // than all the vector copies. The implementation for these functions is generated for each class.
   10346             :       /*! \brief return number of children in the traversal successor list */
   10347             :           virtual size_t get_numberOfTraversalSuccessors() override;
   10348             :       /*! \brief index-based access to traversal successors by index number */
   10349             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   10350             :       /*! \brief index-based access to traversal successors by child node */
   10351             :           virtual size_t get_childIndex(SgNode *child) override;
   10352             : 
   10353             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   10354             :        // MS: 08/16/2002 method for generating RTI information
   10355             :       /*! \brief return C++ Runtime-Time-Information */
   10356             :           virtual RTIReturnType roseRTI() override;
   10357             : #endif
   10358             :       /* */
   10359             : 
   10360             : 
   10361             : 
   10362             :       /* name Deprecated Functions
   10363             :           \brief Deprecated functions ... incomplete-documentation
   10364             : 
   10365             :           These functions have been deprecated from use.
   10366             :        */
   10367             :       /* */
   10368             : 
   10369             :       /*! returns a C style string (char*) representing the class name */
   10370             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   10371             : 
   10372             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   10373             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   10374             : #if 0
   10375             :       /*! returns old style Sage II enum values */
   10376             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   10377             :       /*! returns old style Sage II enum values */
   10378             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   10379             : #endif
   10380             :       /* */
   10381             : 
   10382             : 
   10383             : 
   10384             : 
   10385             :      public:
   10386             :       /* name Traversal Support Functions
   10387             :           \brief Traversal support functions ... incomplete-documentation
   10388             : 
   10389             :           These functions have been made public as part of the design, but they are suggested for internal use 
   10390             :           or by particularly knowledgable users for specialized tools or applications.
   10391             :        */
   10392             :       /* */
   10393             : 
   10394             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   10395             :        // (inferior to ROSE traversal mechanism, experimental).
   10396             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   10397             :        */
   10398             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   10399             : 
   10400             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   10401             :       /*! \brief support for the classic visitor pattern done in GoF */
   10402             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   10403             : 
   10404             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   10405             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   10406             :        */
   10407             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   10408             : 
   10409             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   10410             :        */
   10411             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   10412             : 
   10413             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   10414             :        // This traversal helps support internal tools that call static member functions.
   10415             :        // note: this function operates on the memory pools.
   10416             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   10417             :        */
   10418             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   10419             :       /* */
   10420             : 
   10421             : 
   10422             :      public:
   10423             :       /* name Memory Allocation Functions
   10424             :           \brief Memory allocations functions ... incomplete-documentation
   10425             : 
   10426             :           These functions have been made public as part of the design, but they are suggested for internal use 
   10427             :           or by particularly knowledgable users for specialized tools or applications.
   10428             :        */
   10429             :       /* */
   10430             : 
   10431             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   10432             : 
   10433             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   10434             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   10435             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   10436             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   10437             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   10438             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   10439             :           being used with the AST File I/O mechanism.
   10440             :        */
   10441             :           virtual bool isInMemoryPool() override;
   10442             : 
   10443             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   10444             : 
   10445             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   10446             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   10447             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   10448             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   10449             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   10450             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   10451             :           being used with the AST File I/O mechanism.
   10452             :        */
   10453             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   10454             : 
   10455             :       // DQ (4/30/2006): Modified to be a const function.
   10456             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   10457             : 
   10458             :           This functions is part of general support for many possible tools to operate 
   10459             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   10460             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   10461             :           less than the set of pointers used by the AST file I/O. This is part of
   10462             :           work implemented by Andreas, and support tools such as the AST graph generation.
   10463             : 
   10464             :           \warning This function can return unexpected data members and thus the 
   10465             :                    order and the number of elements is unpredicable and subject 
   10466             :                    to change.
   10467             : 
   10468             :           \returns STL vector of pairs of SgNode* and strings
   10469             :        */
   10470             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   10471             : 
   10472             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   10473             : 
   10474             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   10475             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   10476             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   10477             : 
   10478             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   10479             :                    and subject to change.
   10480             :        */
   10481             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   10482             : 
   10483             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   10484             : 
   10485             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   10486             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   10487             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   10488             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   10489             : 
   10490             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   10491             : 
   10492             :           \returns long
   10493             :        */
   10494             :           virtual long getChildIndex( SgNode* childNode ) const override;
   10495             : 
   10496             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   10497             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   10498             :       /* \brief Constructor for use by AST File I/O Mechanism
   10499             : 
   10500             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   10501             :           which obtained via fast binary file I/O from disk.
   10502             :        */
   10503             :        // SgAccessModifier( SgAccessModifierStorageClass& source );
   10504             : 
   10505             : 
   10506             : 
   10507             : 
   10508             : 
   10509             :  // JH (10/24/2005): methods added to support the ast file IO
   10510             :     private:
   10511             : 
   10512             :       /* name AST Memory Allocation Support Functions
   10513             :           \brief Memory allocations support....
   10514             : 
   10515             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   10516             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   10517             :           and support the AST File I/O Mechanism.
   10518             :        */
   10519             :       /* */
   10520             : 
   10521             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   10522             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   10523             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   10524             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   10525             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   10526             :           a correspinding one in the AST_FILE_IO class!
   10527             :        */
   10528             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   10529             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   10530             :       /* \brief Typedef used for low level memory access.
   10531             :        */
   10532             :        // typedef unsigned char* TestType;
   10533             : 
   10534             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   10535             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   10536             :       /* \brief Typedef used to hold memory addresses as values.
   10537             :        */
   10538             :        // typedef unsigned long  AddressType;
   10539             : 
   10540             : 
   10541             : 
   10542             :        // necessary, to have direct access to the p_freepointer and the private methods !
   10543             :       /*! \brief friend class declaration to support AST File I/O */
   10544             :           friend class AST_FILE_IO;
   10545             : 
   10546             :       /*! \brief friend class declaration to support AST File I/O */
   10547             :           friend class SgAccessModifierStorageClass;
   10548             : 
   10549             :       /*! \brief friend class declaration to support AST File I/O */
   10550             :           friend class AstSpecificDataManagingClass;
   10551             : 
   10552             :       /*! \brief friend class declaration to support AST File I/O */
   10553             :           friend class AstSpecificDataManagingClassStorageClass;
   10554             :     public:
   10555             :       /*! \brief IR node constructor to support AST File I/O */
   10556             :           SgAccessModifier( const SgAccessModifierStorageClass& source );
   10557             : 
   10558             :  // private: // JJW hack
   10559             :        /*
   10560             :           name AST Memory Allocation Support Variables
   10561             :           Memory allocations support variables 
   10562             : 
   10563             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   10564             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   10565             :           and support the AST File I/O Mechanism.
   10566             :        */
   10567             :       /* */
   10568             : 
   10569             :     public:
   10570             : 
   10571             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   10572             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   10573             :       // virtual SgNode* addRegExpAttribute();
   10574             :       /*! \brief Support for AST matching using regular expression.
   10575             : 
   10576             :           This support is incomplete and the subject of current research to define 
   10577             :           RegEx trees to support inexact matching.
   10578             :        */
   10579             :           SgAccessModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   10580             : 
   10581             : // *** COMMON CODE SECTION ENDS HERE ***
   10582             : 
   10583             : 
   10584             : // End of memberFunctionString
   10585             : // Start of memberFunctionString
   10586             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   10587             : 
   10588             :      // the generated cast function
   10589             :      // friend ROSE_DLL_API SgAccessModifier* isSgAccessModifier ( SgNode* s );
   10590             : 
   10591             :           typedef SgModifier base_node_type;
   10592             : 
   10593             : 
   10594             : // End of memberFunctionString
   10595             : 
   10596             :      public: 
   10597             :          SgAccessModifier::access_modifier_enum get_modifier() const;
   10598             :          void set_modifier(SgAccessModifier::access_modifier_enum modifier);
   10599             : 
   10600             : 
   10601             :      public: 
   10602             :          virtual ~SgAccessModifier();
   10603             : 
   10604             : 
   10605             :      public: 
   10606             :          SgAccessModifier(); 
   10607             : 
   10608             :     protected:
   10609             : // Start of memberFunctionString
   10610             : SgAccessModifier::access_modifier_enum p_modifier;
   10611             :           
   10612             : // End of memberFunctionString
   10613             : 
   10614             :     friend struct Rose::Traits::generated::describe_node_t<SgAccessModifier>;
   10615             :     friend struct Rose::Traits::generated::describe_field_t<SgAccessModifier, SgAccessModifier::access_modifier_enum,&SgAccessModifier::p_modifier>;
   10616             : 
   10617             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10618             : 
   10619             : 
   10620             :    };
   10621             : #endif
   10622             : 
   10623             : // postdeclarations for SgAccessModifier
   10624             : 
   10625             : /* #line 10626 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10626             : 
   10627             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   10628             : 
   10629             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10630             : 
   10631             : 
   10632             : /* #line 10633 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10633             : 
   10634             : 
   10635             : 
   10636             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10637             : 
   10638             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   10639             : //      This code is automatically generated for each 
   10640             : //      terminal and non-terminal within the defined 
   10641             : //      grammar.  There is a simple way to change the 
   10642             : //      code to fix bugs etc.  See the ROSE README file
   10643             : //      for directions.
   10644             : 
   10645             : // tps: (02/22/2010): Adding DLL export requirements
   10646             : #include "rosedll.h"
   10647             : 
   10648             : // predeclarations for SgFunctionModifier
   10649             : 
   10650             : /* #line 10651 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10651             : 
   10652             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   10653             : 
   10654             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   10655             : 
   10656             : #if 1
   10657             : // Class Definition for SgFunctionModifier
   10658             : class ROSE_DLL_API SgFunctionModifier  : public SgModifier
   10659             :    {
   10660             :      public:
   10661             : 
   10662             : 
   10663             : /* #line 10664 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   10664             : 
   10665             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   10666             : // Start of memberFunctionString
   10667             : /* #line 1101 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   10668             : 
   10669             : 
   10670             :       /*! \brief Function Modifiers (bitvector implementation permits multiple values to be specified)
   10671             : 
   10672             :           Function modifiers (inline, virtual, pure-virtual, explicit).
   10673             : 
   10674             :           \internal Many values can be specified (when the gnu attributes are included), so the implementation uses an STL bit vector.
   10675             :        */
   10676             :           enum function_modifier_enum
   10677             :              {
   10678             :             // Multiple values can be specified at one time
   10679             :             // (e.g. inline and explicit (works in g++!))
   10680             :                e_unknown            = 0, /*!< error value */
   10681             :                e_default            = 1, /*!< default value */
   10682             :                e_inline             = 2, /*!< inlined function */
   10683             :                e_virtual            = 3, /*!< virtual function */
   10684             :                e_pure_virtual       = 4, /*!< pure virtual function */
   10685             :                e_explicit           = 5, /*!< explicit function (avoids type resolution through auto type promotion of function arguments) */
   10686             :             // e_bind               = 6, /*!< Fortran bind attribute for functions (see also type modifier) */
   10687             :                e_pure               = 7, /*!< Fortran pure attribute for functions (see also type modifier) */
   10688             :                e_elemental          = 8, /*!< Fortran elemental attribute for functions (see also type modifier) */
   10689             :                e_recursive          = 9, /*!< Fortran recursive attribute for functions (see also type modifier) */
   10690             : 
   10691             :             // DQ (12/4/2007): Added support for GNU specific attributes
   10692             :                e_gnu_attribute__constructor__            = 10,/*!< GNU specific attribute for (GNU extension) (a separately stored value permits the priority to be specified). */
   10693             :                e_gnu_attribute__destructor__             = 11,/*!< GNU specific attribute for (GNU extension) */
   10694             :                e_gnu_attribute__pure__                   = 12,/*!< GNU specific attribute for (GNU extension) */
   10695             :                e_gnu_attribute__weak__                   = 13,/*!< GNU specific attribute for (GNU extension) */
   10696             :                e_gnu_attribute__unused__                 = 14,/*!< GNU specific attribute for (GNU extension) */
   10697             :                e_gnu_attribute__used__                   = 15,/*!< GNU specific attribute for (GNU extension) */
   10698             :                e_gnu_attribute__deprecated__             = 16,/*!< GNU specific attribute for (GNU extension) */
   10699             :                e_gnu_attribute__malloc__                 = 17,/*!< GNU specific attribute for (GNU extension) */
   10700             :                e_gnu_attribute__naked__                  = 18,/*!< GNU specific attribute for (GNU extension) */
   10701             :                e_gnu_attribute__no_instrument_function__ = 19,/*!< GNU specific attribute for (GNU extension) */
   10702             :                e_gnu_attribute__no_check_memory_usage__  = 20,/*!< GNU specific attribute for (GNU extension) */
   10703             :                e_gnu_attribute__noinline__               = 21,/*!< GNU specific attribute for (GNU extension) */
   10704             :                e_gnu_attribute__always_inline__          = 22,/*!< GNU specific attribute for (GNU extension) */
   10705             :                e_gnu_attribute__nothrow__                = 23,/*!< GNU specific attribute for (GNU extension) */
   10706             :                e_gnu_attribute__weakref__                = 24,/*!< GNU specific attribute for (GNU extension) */
   10707             : 
   10708             :             // TV (04/08/2010): Support for CUDA functions modifiers
   10709             :                e_cuda_device                 = 25, /*!< CUDA device function called from device */
   10710             :                e_cuda_kernel                 = 26, /*!< CUDA kernel */
   10711             :                e_cuda_host                   = 27, /*!< CUDA host function */
   10712             : 
   10713             :             // Rasmussen (03/13/2018): New CUDA function modifiers
   10714             :                e_cuda_global_function        = 28, /*!< CUDA device function called from host */
   10715             :                e_cuda_grid_global            = 29, /*!< CUDA device function called from host */
   10716             : 
   10717             :             // TV (05/03/2010): Support for OpenCL functions modifiers
   10718             :                e_opencl_kernel               = 30, /*!< OpenCL kernel */
   10719             :                e_opencl_vec_type_hint        = 31, /*!< OpenCL */
   10720             :                e_opencl_work_group_size_hint = 32, /*!< OpenCL */
   10721             :                e_opencl_work_group_size_req  = 33, /*!< OpenCL */
   10722             : 
   10723             :             // DQ (4/13/2019): Added C++11 options for function modifiers.
   10724             :                e_marked_default            = 38, /*!< marked using "= default" syntax (different from default enum value) */
   10725             :                e_marked_delete             = 39, /*!< marked using "= delete" syntax */
   10726             : 
   10727             :             // Rasmussen (10/26/2019): Jovial function modifier
   10728             :                e_reentrant                 = 40, /*!< re-entrant function */
   10729             : 
   10730             :                e_last_modifier     /*!< last value (upper bound on range of values, used in error checking) */
   10731             :              };
   10732             : 
   10733             :           // TV (05/03/2010)
   10734             : 
   10735             :              struct opencl_work_group_size_t {
   10736             :               unsigned long int x, y, z;
   10737             :              };
   10738             : 
   10739             :        // Copy constructor
   10740             :           SgFunctionModifier ( const SgFunctionModifier & X );
   10741             : 
   10742             :        // Assignment Operator
   10743             :           SgFunctionModifier & operator= ( const SgFunctionModifier & X );
   10744             : 
   10745             :           void post_construction_initialization() override;
   10746             : 
   10747             :           bool isUnknown() const;
   10748             :           void setUnknown();
   10749             :           void unsetUnknown();
   10750             : 
   10751             :           bool isDefault() const;
   10752             :           void setDefault();
   10753             :           void unsetDefault();
   10754             : 
   10755             :           bool isInline() const;
   10756             :           void setInline();
   10757             :           void unsetInline();
   10758             : 
   10759             :           bool isVirtual() const;
   10760             :           void setVirtual();
   10761             :           void unsetVirtual();
   10762             : 
   10763             :           bool isPureVirtual() const;
   10764             :           void setPureVirtual();
   10765             :           void unsetPureVirtual();
   10766             : 
   10767             :           bool isExplicit() const;
   10768             :           void setExplicit();
   10769             :           void unsetExplicit();
   10770             : #if 0
   10771             :        // DQ (11/21/2007): support for Fortran bind attribute on functions
   10772             :           bool isBind() const;
   10773             :           void setBind();
   10774             :           void unsetBind();
   10775             : #endif
   10776             :        // DQ (11/21/2007): support for Fortran pure attribute on functions
   10777             :           bool isPure() const;
   10778             :           void setPure();
   10779             :           void unsetPure();
   10780             : 
   10781             :        // DQ (11/30/2007): support for Fortran elemental attribute on functions
   10782             :           bool isElemental() const;
   10783             :           void setElemental();
   10784             :           void unsetElemental();
   10785             : 
   10786             :        // DQ (11/30/2007): support for Fortran recursive attribute on functions
   10787             :           bool isRecursive() const;
   10788             :           void setRecursive();
   10789             :           void unsetRecursive();
   10790             : 
   10791             :        // Rasmussen (10/26/2019): support for Jovial reentrant attribute on functions
   10792             :           bool isReentrant() const;
   10793             :           void setReentrant();
   10794             :           void unsetReentrant();
   10795             : 
   10796             :        // DQ (1/3/2009): Added GNU specific attributes
   10797             :           bool isGnuAttributeConstructor() const;
   10798             :           void setGnuAttributeConstructor();
   10799             :           void unsetGnuAttributeConstructor();
   10800             : 
   10801             :           bool isGnuAttributeDestructor() const;
   10802             :           void setGnuAttributeDestructor();
   10803             :           void unsetGnuAttributeDestructor();
   10804             : 
   10805             :           bool isGnuAttributePure() const;
   10806             :           void setGnuAttributePure();
   10807             :           void unsetGnuAttributePure();
   10808             : 
   10809             :           bool isGnuAttributeWeak() const;
   10810             :           void setGnuAttributeWeak();
   10811             :           void unsetGnuAttributeWeak();
   10812             : 
   10813             :           bool isGnuAttributeUnused() const;
   10814             :           void setGnuAttributeUnused();
   10815             :           void unsetGnuAttributeUnused();
   10816             : 
   10817             :           bool isGnuAttributeUsed() const;
   10818             :           void setGnuAttributeUsed();
   10819             :           void unsetGnuAttributeUsed();
   10820             : 
   10821             :           bool isGnuAttributeDeprecated() const;
   10822             :           void setGnuAttributeDeprecated();
   10823             :           void unsetGnuAttributeDeprecated();
   10824             : 
   10825             :           bool isGnuAttributeMalloc() const;
   10826             :           void setGnuAttributeMalloc();
   10827             :           void unsetGnuAttributeMalloc();
   10828             : 
   10829             :           bool isGnuAttributeNaked() const;
   10830             :           void setGnuAttributeNaked();
   10831             :           void unsetGnuAttributeNaked();
   10832             : 
   10833             :           bool isGnuAttributeNoInstrumentFunction() const;
   10834             :           void setGnuAttributeNoInstrumentFunction();
   10835             :           void unsetGnuAttributeNoInstrumentFunction();
   10836             : 
   10837             :           bool isGnuAttributeNoCheckMemoryUsage() const;
   10838             :           void setGnuAttributeNoCheckMemoryUsage();
   10839             :           void unsetGnuAttributeNoCheckMemoryUsage();
   10840             : 
   10841             :           bool isGnuAttributeNoInline() const;
   10842             :           void setGnuAttributeNoInline();
   10843             :           void unsetGnuAttributeNoInline();
   10844             : 
   10845             :           bool isGnuAttributeAlwaysInline() const;
   10846             :           void setGnuAttributeAlwaysInline();
   10847             :           void unsetGnuAttributeAlwaysInline();
   10848             : 
   10849             :           bool isGnuAttributeNoThrow() const;
   10850             :           void setGnuAttributeNoThrow();
   10851             :           void unsetGnuAttributeNoThrow();
   10852             : 
   10853             :           bool isGnuAttributeWeakReference() const;
   10854             :           void setGnuAttributeWeakReference();
   10855             :           void unsetGnuAttributeWeakReference();
   10856             : 
   10857             :        // TV (04/08/2010): Support for CUDA functions modifiers
   10858             : 
   10859             :           bool isCudaDevice() const;
   10860             :           void setCudaDevice();
   10861             :           void unsetCudaDevice();
   10862             : 
   10863             :           bool isCudaKernel() const;
   10864             :           void setCudaKernel();
   10865             :           void unsetCudaKernel();
   10866             : 
   10867             :           bool isCudaHost() const;
   10868             :           void setCudaHost();
   10869             :           void unsetCudaHost();
   10870             : 
   10871             :        // Rasmussen (03/13/2018): New CUDA function modifiers
   10872             : 
   10873             :           bool isCudaGlobalFunction() const;
   10874             :           void setCudaGlobalFunction();
   10875             :           void unsetCudaGlobalFunction();
   10876             : 
   10877             :           bool isCudaGridGlobal() const;
   10878             :           void setCudaGridGlobal();
   10879             :           void unsetCudaGridGlobal();
   10880             : 
   10881             :        // TV (05/03/2010): Support for OpenCL functions modifiers
   10882             : 
   10883             :           bool isOpenclKernel() const;
   10884             :           void setOpenclKernel();
   10885             :           void unsetOpenclKernel();
   10886             : 
   10887             :           bool hasOpenclVecTypeHint() const;
   10888             :           void setOpenclVecTypeHint();
   10889             :           void unsetOpenclVecTypeHint();
   10890             : 
   10891             :           bool hasOpenclWorkGroupSizeHint() const;
   10892             :           void setOpenclWorkGroupSizeHint();
   10893             :           void unsetOpenclWorkGroupSizeHint();
   10894             : 
   10895             :           bool hasOpenclWorkGroupSizeReq() const;
   10896             :           void setOpenclWorkGroupSizeReq();
   10897             :           void unsetOpenclWorkGroupSizeReq();
   10898             : 
   10899             :        // DQ (4/13/2019): Added C++11 options for function modifiers.
   10900             :           bool isMarkedDefault() const;
   10901             :           void setMarkedDefault();
   10902             :           void unsetMarkedDefault();
   10903             : 
   10904             :        // DQ (4/13/2019): Added C++11 options for function modifiers.
   10905             :           bool isMarkedDelete() const;
   10906             :           void setMarkedDelete();
   10907             :           void unsetMarkedDelete();
   10908             : 
   10909             : 
   10910             :           std::string displayString() const;
   10911             :           void display ( std::string label ) const;
   10912             :           friend std::ostream & operator<< ( std::ostream & os, const SgFunctionModifier & m );
   10913             :           friend bool operator== (const SgFunctionModifier& lhs, const SgFunctionModifier& rhs);
   10914             : 
   10915             :        // DQ (2/4/2006): Added mechamism to clear all bits
   10916             :           void reset();
   10917             : 
   10918             : 
   10919             : 
   10920             : // End of memberFunctionString
   10921             : // Start of memberFunctionString
   10922             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   10923             : 
   10924             : // *** COMMON CODE SECTION BEGINS HERE ***
   10925             : 
   10926             :     public:
   10927             : 
   10928             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   10929             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   10930             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   10931             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   10932             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   10933             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   10934             : 
   10935             :       /*! \brief returns a string representing the class name */
   10936             :           virtual std::string class_name() const override;
   10937             : 
   10938             :       /*! \brief returns new style SageIII enum values */
   10939             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   10940             : 
   10941             :       /*! \brief static variant value */
   10942             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   10943             :        // static const VariantT static_variant = V_SgFunctionModifier;
   10944             :           enum { static_variant = V_SgFunctionModifier };
   10945             : 
   10946             :        /* the generated cast function */
   10947             :       /*! \brief Casts pointer from base class to derived class */
   10948             :           ROSE_DLL_API friend       SgFunctionModifier* isSgFunctionModifier(       SgNode * s );
   10949             : 
   10950             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   10951             :           ROSE_DLL_API friend const SgFunctionModifier* isSgFunctionModifier( const SgNode * s );
   10952             : 
   10953             :      // ******************************************
   10954             :      // * Memory Pool / New / Delete
   10955             :      // ******************************************
   10956             : 
   10957             :      public:
   10958             :           /// \private
   10959             :           static const unsigned pool_size; //
   10960             :           /// \private
   10961             :           static std::vector<unsigned char *> pools; //
   10962             :           /// \private
   10963             :           static SgFunctionModifier * next_node; // 
   10964             : 
   10965             :           /// \private
   10966             :           static unsigned long initializeStorageClassArray(SgFunctionModifierStorageClass *); //
   10967             : 
   10968             :           /// \private
   10969             :           static void clearMemoryPool(); //
   10970             :           static void deleteMemoryPool(); //
   10971             : 
   10972             :           /// \private
   10973             :           static void extendMemoryPoolForFileIO(); //
   10974             : 
   10975             :           /// \private
   10976             :           static SgFunctionModifier * getPointerFromGlobalIndex(unsigned long); //
   10977             :           /// \private
   10978             :           static SgFunctionModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   10979             : 
   10980             :           /// \private
   10981             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   10982             :           /// \private
   10983             :           static void resetValidFreepointers(); //
   10984             :           /// \private
   10985             :           static unsigned long getNumberOfLastValidPointer(); //
   10986             : 
   10987             : 
   10988             : #if defined(INLINE_FUNCTIONS)
   10989             :       /*! \brief returns pointer to newly allocated IR node */
   10990             :           inline void *operator new (size_t size);
   10991             : #else
   10992             :       /*! \brief returns pointer to newly allocated IR node */
   10993             :           void *operator new (size_t size);
   10994             : #endif
   10995             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   10996             :           void operator delete (void* pointer, size_t size);
   10997             : 
   10998             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   10999           0 :           void operator delete (void* pointer)
   11000             :              {
   11001             :             // This is the generated delete operator...
   11002           0 :                SgFunctionModifier::operator delete (pointer,sizeof(SgFunctionModifier));
   11003             :              }
   11004             : 
   11005             :       /*! \brief Returns the total number of IR nodes of this type */
   11006             :           static size_t numberOfNodes();
   11007             : 
   11008             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   11009             :           static size_t memoryUsage();
   11010             : 
   11011             :       // End of scope which started in IR nodes specific code 
   11012             :       /* */
   11013             : 
   11014             :       /* name Internal Functions
   11015             :           \brief Internal functions ... incomplete-documentation
   11016             : 
   11017             :           These functions have been made public as part of the design, but they are suggested for internal use 
   11018             :           or by particularly knowledgeable users for specialized tools or applications.
   11019             : 
   11020             :           \internal We could not make these private because they are required by user for special purposes. And 
   11021             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   11022             :          
   11023             :        */
   11024             : 
   11025             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   11026             :        // overridden in every class by *generated* implementation
   11027             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   11028             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   11029             :        // MS: 06/28/02 container of names of variables or container indices 
   11030             :        // used used in the traversal to access AST successor nodes
   11031             :        // overridden in every class by *generated* implementation
   11032             :       /*! \brief container of names of variables or container indices used used in the traversal
   11033             :           to access AST successor nodes overridden in every class by *generated* implementation */
   11034             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   11035             : 
   11036             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   11037             :        // than all the vector copies. The implementation for these functions is generated for each class.
   11038             :       /*! \brief return number of children in the traversal successor list */
   11039             :           virtual size_t get_numberOfTraversalSuccessors() override;
   11040             :       /*! \brief index-based access to traversal successors by index number */
   11041             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   11042             :       /*! \brief index-based access to traversal successors by child node */
   11043             :           virtual size_t get_childIndex(SgNode *child) override;
   11044             : 
   11045             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   11046             :        // MS: 08/16/2002 method for generating RTI information
   11047             :       /*! \brief return C++ Runtime-Time-Information */
   11048             :           virtual RTIReturnType roseRTI() override;
   11049             : #endif
   11050             :       /* */
   11051             : 
   11052             : 
   11053             : 
   11054             :       /* name Deprecated Functions
   11055             :           \brief Deprecated functions ... incomplete-documentation
   11056             : 
   11057             :           These functions have been deprecated from use.
   11058             :        */
   11059             :       /* */
   11060             : 
   11061             :       /*! returns a C style string (char*) representing the class name */
   11062             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   11063             : 
   11064             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   11065             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   11066             : #if 0
   11067             :       /*! returns old style Sage II enum values */
   11068             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   11069             :       /*! returns old style Sage II enum values */
   11070             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   11071             : #endif
   11072             :       /* */
   11073             : 
   11074             : 
   11075             : 
   11076             : 
   11077             :      public:
   11078             :       /* name Traversal Support Functions
   11079             :           \brief Traversal support functions ... incomplete-documentation
   11080             : 
   11081             :           These functions have been made public as part of the design, but they are suggested for internal use 
   11082             :           or by particularly knowledgable users for specialized tools or applications.
   11083             :        */
   11084             :       /* */
   11085             : 
   11086             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   11087             :        // (inferior to ROSE traversal mechanism, experimental).
   11088             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   11089             :        */
   11090             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   11091             : 
   11092             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   11093             :       /*! \brief support for the classic visitor pattern done in GoF */
   11094             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   11095             : 
   11096             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   11097             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   11098             :        */
   11099             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   11100             : 
   11101             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   11102             :        */
   11103             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   11104             : 
   11105             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   11106             :        // This traversal helps support internal tools that call static member functions.
   11107             :        // note: this function operates on the memory pools.
   11108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   11109             :        */
   11110             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   11111             :       /* */
   11112             : 
   11113             : 
   11114             :      public:
   11115             :       /* name Memory Allocation Functions
   11116             :           \brief Memory allocations functions ... incomplete-documentation
   11117             : 
   11118             :           These functions have been made public as part of the design, but they are suggested for internal use 
   11119             :           or by particularly knowledgable users for specialized tools or applications.
   11120             :        */
   11121             :       /* */
   11122             : 
   11123             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   11124             : 
   11125             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   11126             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   11127             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   11128             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   11129             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   11130             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   11131             :           being used with the AST File I/O mechanism.
   11132             :        */
   11133             :           virtual bool isInMemoryPool() override;
   11134             : 
   11135             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   11136             : 
   11137             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   11138             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   11139             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   11140             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   11141             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   11142             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   11143             :           being used with the AST File I/O mechanism.
   11144             :        */
   11145             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   11146             : 
   11147             :       // DQ (4/30/2006): Modified to be a const function.
   11148             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   11149             : 
   11150             :           This functions is part of general support for many possible tools to operate 
   11151             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   11152             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   11153             :           less than the set of pointers used by the AST file I/O. This is part of
   11154             :           work implemented by Andreas, and support tools such as the AST graph generation.
   11155             : 
   11156             :           \warning This function can return unexpected data members and thus the 
   11157             :                    order and the number of elements is unpredicable and subject 
   11158             :                    to change.
   11159             : 
   11160             :           \returns STL vector of pairs of SgNode* and strings
   11161             :        */
   11162             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   11163             : 
   11164             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   11165             : 
   11166             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   11167             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   11168             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   11169             : 
   11170             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   11171             :                    and subject to change.
   11172             :        */
   11173             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   11174             : 
   11175             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   11176             : 
   11177             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   11178             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   11179             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   11180             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   11181             : 
   11182             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   11183             : 
   11184             :           \returns long
   11185             :        */
   11186             :           virtual long getChildIndex( SgNode* childNode ) const override;
   11187             : 
   11188             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   11189             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   11190             :       /* \brief Constructor for use by AST File I/O Mechanism
   11191             : 
   11192             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   11193             :           which obtained via fast binary file I/O from disk.
   11194             :        */
   11195             :        // SgFunctionModifier( SgFunctionModifierStorageClass& source );
   11196             : 
   11197             : 
   11198             : 
   11199             : 
   11200             : 
   11201             :  // JH (10/24/2005): methods added to support the ast file IO
   11202             :     private:
   11203             : 
   11204             :       /* name AST Memory Allocation Support Functions
   11205             :           \brief Memory allocations support....
   11206             : 
   11207             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   11208             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   11209             :           and support the AST File I/O Mechanism.
   11210             :        */
   11211             :       /* */
   11212             : 
   11213             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   11214             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   11215             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   11216             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   11217             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   11218             :           a correspinding one in the AST_FILE_IO class!
   11219             :        */
   11220             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   11221             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   11222             :       /* \brief Typedef used for low level memory access.
   11223             :        */
   11224             :        // typedef unsigned char* TestType;
   11225             : 
   11226             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   11227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   11228             :       /* \brief Typedef used to hold memory addresses as values.
   11229             :        */
   11230             :        // typedef unsigned long  AddressType;
   11231             : 
   11232             : 
   11233             : 
   11234             :        // necessary, to have direct access to the p_freepointer and the private methods !
   11235             :       /*! \brief friend class declaration to support AST File I/O */
   11236             :           friend class AST_FILE_IO;
   11237             : 
   11238             :       /*! \brief friend class declaration to support AST File I/O */
   11239             :           friend class SgFunctionModifierStorageClass;
   11240             : 
   11241             :       /*! \brief friend class declaration to support AST File I/O */
   11242             :           friend class AstSpecificDataManagingClass;
   11243             : 
   11244             :       /*! \brief friend class declaration to support AST File I/O */
   11245             :           friend class AstSpecificDataManagingClassStorageClass;
   11246             :     public:
   11247             :       /*! \brief IR node constructor to support AST File I/O */
   11248             :           SgFunctionModifier( const SgFunctionModifierStorageClass& source );
   11249             : 
   11250             :  // private: // JJW hack
   11251             :        /*
   11252             :           name AST Memory Allocation Support Variables
   11253             :           Memory allocations support variables 
   11254             : 
   11255             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   11256             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   11257             :           and support the AST File I/O Mechanism.
   11258             :        */
   11259             :       /* */
   11260             : 
   11261             :     public:
   11262             : 
   11263             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   11264             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   11265             :       // virtual SgNode* addRegExpAttribute();
   11266             :       /*! \brief Support for AST matching using regular expression.
   11267             : 
   11268             :           This support is incomplete and the subject of current research to define 
   11269             :           RegEx trees to support inexact matching.
   11270             :        */
   11271             :           SgFunctionModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   11272             : 
   11273             : // *** COMMON CODE SECTION ENDS HERE ***
   11274             : 
   11275             : 
   11276             : // End of memberFunctionString
   11277             : // Start of memberFunctionString
   11278             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   11279             : 
   11280             :      // the generated cast function
   11281             :      // friend ROSE_DLL_API SgFunctionModifier* isSgFunctionModifier ( SgNode* s );
   11282             : 
   11283             :           typedef SgModifier base_node_type;
   11284             : 
   11285             : 
   11286             : // End of memberFunctionString
   11287             : 
   11288             :      public: 
   11289             :          SgBitVector get_modifierVector() const;
   11290             :          void set_modifierVector(SgBitVector modifierVector);
   11291             : 
   11292             :      public: 
   11293             :          unsigned long int get_gnu_attribute_constructor_destructor_priority() const;
   11294             :          void set_gnu_attribute_constructor_destructor_priority(unsigned long int gnu_attribute_constructor_destructor_priority);
   11295             : 
   11296             :      public: 
   11297             :          std::string get_gnu_attribute_named_weak_reference() const;
   11298             :          void set_gnu_attribute_named_weak_reference(std::string gnu_attribute_named_weak_reference);
   11299             : 
   11300             :      public: 
   11301             :          std::string get_gnu_attribute_named_alias() const;
   11302             :          void set_gnu_attribute_named_alias(std::string gnu_attribute_named_alias);
   11303             : 
   11304             :      public: 
   11305             :          SgType * get_opencl_vec_type() const;
   11306             :          void set_opencl_vec_type(SgType * opencl_vec_type);
   11307             : 
   11308             :      public: 
   11309             :          SgFunctionModifier::opencl_work_group_size_t get_opencl_work_group_size() const;
   11310             :          void set_opencl_work_group_size(SgFunctionModifier::opencl_work_group_size_t opencl_work_group_size);
   11311             : 
   11312             : 
   11313             :      public: 
   11314             :          virtual ~SgFunctionModifier();
   11315             : 
   11316             : 
   11317             :      public: 
   11318             :          SgFunctionModifier(); 
   11319             : 
   11320             :     protected:
   11321             : // Start of memberFunctionString
   11322             : SgBitVector p_modifierVector;
   11323             :           
   11324             : // End of memberFunctionString
   11325             : // Start of memberFunctionString
   11326             : unsigned long int p_gnu_attribute_constructor_destructor_priority;
   11327             :           
   11328             : // End of memberFunctionString
   11329             : // Start of memberFunctionString
   11330             : std::string p_gnu_attribute_named_weak_reference;
   11331             :           
   11332             : // End of memberFunctionString
   11333             : // Start of memberFunctionString
   11334             : std::string p_gnu_attribute_named_alias;
   11335             :           
   11336             : // End of memberFunctionString
   11337             : // Start of memberFunctionString
   11338             : SgType * p_opencl_vec_type;
   11339             :           
   11340             : // End of memberFunctionString
   11341             : // Start of memberFunctionString
   11342             : SgFunctionModifier::opencl_work_group_size_t p_opencl_work_group_size;
   11343             :           
   11344             : // End of memberFunctionString
   11345             : 
   11346             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionModifier>;
   11347             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionModifier, SgBitVector,&SgFunctionModifier::p_modifierVector>;
   11348             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionModifier, unsigned long int,&SgFunctionModifier::p_gnu_attribute_constructor_destructor_priority>;
   11349             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionModifier, std::string,&SgFunctionModifier::p_gnu_attribute_named_weak_reference>;
   11350             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionModifier, std::string,&SgFunctionModifier::p_gnu_attribute_named_alias>;
   11351             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionModifier, SgType *,&SgFunctionModifier::p_opencl_vec_type>;
   11352             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionModifier, SgFunctionModifier::opencl_work_group_size_t,&SgFunctionModifier::p_opencl_work_group_size>;
   11353             : 
   11354             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11355             : 
   11356             : 
   11357             :    };
   11358             : #endif
   11359             : 
   11360             : // postdeclarations for SgFunctionModifier
   11361             : 
   11362             : /* #line 11363 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11363             : 
   11364             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   11365             : 
   11366             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11367             : 
   11368             : 
   11369             : /* #line 11370 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11370             : 
   11371             : 
   11372             : 
   11373             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11374             : 
   11375             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   11376             : //      This code is automatically generated for each 
   11377             : //      terminal and non-terminal within the defined 
   11378             : //      grammar.  There is a simple way to change the 
   11379             : //      code to fix bugs etc.  See the ROSE README file
   11380             : //      for directions.
   11381             : 
   11382             : // tps: (02/22/2010): Adding DLL export requirements
   11383             : #include "rosedll.h"
   11384             : 
   11385             : // predeclarations for SgUPC_AccessModifier
   11386             : 
   11387             : /* #line 11388 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11388             : 
   11389             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   11390             : 
   11391             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11392             : 
   11393             : #if 1
   11394             : // Class Definition for SgUPC_AccessModifier
   11395             : class ROSE_DLL_API SgUPC_AccessModifier  : public SgModifier
   11396             :    {
   11397             :      public:
   11398             : 
   11399             : 
   11400             : /* #line 11401 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11401             : 
   11402             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   11403             : // Start of memberFunctionString
   11404             : /* #line 1354 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   11405             : 
   11406             : 
   11407             :        // UPC access specifiers (unspecified, shared, strict, relaxed)
   11408             : 
   11409             :       /*! \brief UPC Access Modifiers (only one value can be specified)
   11410             : 
   11411             :           Unified Parallel C modifiers (shared, strict, relaxed).
   11412             : 
   11413             :           \internal Only one value can be specified (at least in C and C++)
   11414             :        */
   11415             :           enum upc_access_modifier_enum
   11416             :              {
   11417             :             // Bit values can support multiple values in a single enum type
   11418             :                e_unknown,       /*!< error value */
   11419             :                e_default,       /*!< default value */
   11420             :             // DQ and Liao (6/13/2008): "shared" can be used with "strict" and "relaxed" so it must be handled separately.
   11421             :             // e_upc_shared,    /*!< UPC shared */
   11422             :                e_upc_strict,    /*!< UPC strict */
   11423             :                e_upc_relaxed,   /*!< UPC relaxed */
   11424             :                e_last_modifier  /*!< last value (upper bound on range of values, used in error checking) */
   11425             :              };
   11426             : 
   11427             :        // Copy constructor
   11428             :           SgUPC_AccessModifier ( const SgUPC_AccessModifier & X );
   11429             : 
   11430             :        // Assignment Operator
   11431             :           SgUPC_AccessModifier & operator= ( const SgUPC_AccessModifier & X );
   11432             : 
   11433             :           void post_construction_initialization() override;
   11434             : 
   11435             :           bool isUnknown() const;
   11436             :           void setUnknown();
   11437             : 
   11438             :           bool isDefault() const;
   11439             :           void setDefault();
   11440             : 
   11441             :        // bool isUPC_Shared() const;
   11442             :        // void setUPC_Shared();
   11443             : 
   11444             :           bool isUPC_Strict() const;
   11445             :           void setUPC_Strict();
   11446             : 
   11447             :           bool isUPC_Relaxed() const;
   11448             :           void setUPC_Relaxed();
   11449             : 
   11450             :           std::string displayString() const;
   11451             :           void display ( std::string label ) const;
   11452             :           friend std::ostream & operator<< ( std::ostream & os, const SgUPC_AccessModifier & m );
   11453             :           friend bool operator== (const SgUPC_AccessModifier& lhs, const SgUPC_AccessModifier& rhs);
   11454             : 
   11455             :        // DQ (2/4/2006): Added mechanism to clear all bits
   11456             :           void reset();
   11457             : 
   11458             : 
   11459             : 
   11460             : // End of memberFunctionString
   11461             : // Start of memberFunctionString
   11462             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   11463             : 
   11464             : // *** COMMON CODE SECTION BEGINS HERE ***
   11465             : 
   11466             :     public:
   11467             : 
   11468             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   11469             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   11470             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   11471             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   11472             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   11473             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   11474             : 
   11475             :       /*! \brief returns a string representing the class name */
   11476             :           virtual std::string class_name() const override;
   11477             : 
   11478             :       /*! \brief returns new style SageIII enum values */
   11479             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   11480             : 
   11481             :       /*! \brief static variant value */
   11482             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   11483             :        // static const VariantT static_variant = V_SgUPC_AccessModifier;
   11484             :           enum { static_variant = V_SgUPC_AccessModifier };
   11485             : 
   11486             :        /* the generated cast function */
   11487             :       /*! \brief Casts pointer from base class to derived class */
   11488             :           ROSE_DLL_API friend       SgUPC_AccessModifier* isSgUPC_AccessModifier(       SgNode * s );
   11489             : 
   11490             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   11491             :           ROSE_DLL_API friend const SgUPC_AccessModifier* isSgUPC_AccessModifier( const SgNode * s );
   11492             : 
   11493             :      // ******************************************
   11494             :      // * Memory Pool / New / Delete
   11495             :      // ******************************************
   11496             : 
   11497             :      public:
   11498             :           /// \private
   11499             :           static const unsigned pool_size; //
   11500             :           /// \private
   11501             :           static std::vector<unsigned char *> pools; //
   11502             :           /// \private
   11503             :           static SgUPC_AccessModifier * next_node; // 
   11504             : 
   11505             :           /// \private
   11506             :           static unsigned long initializeStorageClassArray(SgUPC_AccessModifierStorageClass *); //
   11507             : 
   11508             :           /// \private
   11509             :           static void clearMemoryPool(); //
   11510             :           static void deleteMemoryPool(); //
   11511             : 
   11512             :           /// \private
   11513             :           static void extendMemoryPoolForFileIO(); //
   11514             : 
   11515             :           /// \private
   11516             :           static SgUPC_AccessModifier * getPointerFromGlobalIndex(unsigned long); //
   11517             :           /// \private
   11518             :           static SgUPC_AccessModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   11519             : 
   11520             :           /// \private
   11521             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   11522             :           /// \private
   11523             :           static void resetValidFreepointers(); //
   11524             :           /// \private
   11525             :           static unsigned long getNumberOfLastValidPointer(); //
   11526             : 
   11527             : 
   11528             : #if defined(INLINE_FUNCTIONS)
   11529             :       /*! \brief returns pointer to newly allocated IR node */
   11530             :           inline void *operator new (size_t size);
   11531             : #else
   11532             :       /*! \brief returns pointer to newly allocated IR node */
   11533             :           void *operator new (size_t size);
   11534             : #endif
   11535             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   11536             :           void operator delete (void* pointer, size_t size);
   11537             : 
   11538             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   11539           0 :           void operator delete (void* pointer)
   11540             :              {
   11541             :             // This is the generated delete operator...
   11542           0 :                SgUPC_AccessModifier::operator delete (pointer,sizeof(SgUPC_AccessModifier));
   11543             :              }
   11544             : 
   11545             :       /*! \brief Returns the total number of IR nodes of this type */
   11546             :           static size_t numberOfNodes();
   11547             : 
   11548             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   11549             :           static size_t memoryUsage();
   11550             : 
   11551             :       // End of scope which started in IR nodes specific code 
   11552             :       /* */
   11553             : 
   11554             :       /* name Internal Functions
   11555             :           \brief Internal functions ... incomplete-documentation
   11556             : 
   11557             :           These functions have been made public as part of the design, but they are suggested for internal use 
   11558             :           or by particularly knowledgeable users for specialized tools or applications.
   11559             : 
   11560             :           \internal We could not make these private because they are required by user for special purposes. And 
   11561             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   11562             :          
   11563             :        */
   11564             : 
   11565             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   11566             :        // overridden in every class by *generated* implementation
   11567             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   11568             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   11569             :        // MS: 06/28/02 container of names of variables or container indices 
   11570             :        // used used in the traversal to access AST successor nodes
   11571             :        // overridden in every class by *generated* implementation
   11572             :       /*! \brief container of names of variables or container indices used used in the traversal
   11573             :           to access AST successor nodes overridden in every class by *generated* implementation */
   11574             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   11575             : 
   11576             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   11577             :        // than all the vector copies. The implementation for these functions is generated for each class.
   11578             :       /*! \brief return number of children in the traversal successor list */
   11579             :           virtual size_t get_numberOfTraversalSuccessors() override;
   11580             :       /*! \brief index-based access to traversal successors by index number */
   11581             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   11582             :       /*! \brief index-based access to traversal successors by child node */
   11583             :           virtual size_t get_childIndex(SgNode *child) override;
   11584             : 
   11585             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   11586             :        // MS: 08/16/2002 method for generating RTI information
   11587             :       /*! \brief return C++ Runtime-Time-Information */
   11588             :           virtual RTIReturnType roseRTI() override;
   11589             : #endif
   11590             :       /* */
   11591             : 
   11592             : 
   11593             : 
   11594             :       /* name Deprecated Functions
   11595             :           \brief Deprecated functions ... incomplete-documentation
   11596             : 
   11597             :           These functions have been deprecated from use.
   11598             :        */
   11599             :       /* */
   11600             : 
   11601             :       /*! returns a C style string (char*) representing the class name */
   11602             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   11603             : 
   11604             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   11605             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   11606             : #if 0
   11607             :       /*! returns old style Sage II enum values */
   11608             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   11609             :       /*! returns old style Sage II enum values */
   11610             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   11611             : #endif
   11612             :       /* */
   11613             : 
   11614             : 
   11615             : 
   11616             : 
   11617             :      public:
   11618             :       /* name Traversal Support Functions
   11619             :           \brief Traversal support functions ... incomplete-documentation
   11620             : 
   11621             :           These functions have been made public as part of the design, but they are suggested for internal use 
   11622             :           or by particularly knowledgable users for specialized tools or applications.
   11623             :        */
   11624             :       /* */
   11625             : 
   11626             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   11627             :        // (inferior to ROSE traversal mechanism, experimental).
   11628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   11629             :        */
   11630             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   11631             : 
   11632             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   11633             :       /*! \brief support for the classic visitor pattern done in GoF */
   11634             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   11635             : 
   11636             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   11637             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   11638             :        */
   11639             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   11640             : 
   11641             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   11642             :        */
   11643             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   11644             : 
   11645             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   11646             :        // This traversal helps support internal tools that call static member functions.
   11647             :        // note: this function operates on the memory pools.
   11648             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   11649             :        */
   11650             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   11651             :       /* */
   11652             : 
   11653             : 
   11654             :      public:
   11655             :       /* name Memory Allocation Functions
   11656             :           \brief Memory allocations functions ... incomplete-documentation
   11657             : 
   11658             :           These functions have been made public as part of the design, but they are suggested for internal use 
   11659             :           or by particularly knowledgable users for specialized tools or applications.
   11660             :        */
   11661             :       /* */
   11662             : 
   11663             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   11664             : 
   11665             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   11666             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   11667             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   11668             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   11669             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   11670             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   11671             :           being used with the AST File I/O mechanism.
   11672             :        */
   11673             :           virtual bool isInMemoryPool() override;
   11674             : 
   11675             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   11676             : 
   11677             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   11678             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   11679             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   11680             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   11681             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   11682             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   11683             :           being used with the AST File I/O mechanism.
   11684             :        */
   11685             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   11686             : 
   11687             :       // DQ (4/30/2006): Modified to be a const function.
   11688             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   11689             : 
   11690             :           This functions is part of general support for many possible tools to operate 
   11691             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   11692             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   11693             :           less than the set of pointers used by the AST file I/O. This is part of
   11694             :           work implemented by Andreas, and support tools such as the AST graph generation.
   11695             : 
   11696             :           \warning This function can return unexpected data members and thus the 
   11697             :                    order and the number of elements is unpredicable and subject 
   11698             :                    to change.
   11699             : 
   11700             :           \returns STL vector of pairs of SgNode* and strings
   11701             :        */
   11702             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   11703             : 
   11704             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   11705             : 
   11706             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   11707             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   11708             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   11709             : 
   11710             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   11711             :                    and subject to change.
   11712             :        */
   11713             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   11714             : 
   11715             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   11716             : 
   11717             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   11718             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   11719             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   11720             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   11721             : 
   11722             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   11723             : 
   11724             :           \returns long
   11725             :        */
   11726             :           virtual long getChildIndex( SgNode* childNode ) const override;
   11727             : 
   11728             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   11729             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   11730             :       /* \brief Constructor for use by AST File I/O Mechanism
   11731             : 
   11732             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   11733             :           which obtained via fast binary file I/O from disk.
   11734             :        */
   11735             :        // SgUPC_AccessModifier( SgUPC_AccessModifierStorageClass& source );
   11736             : 
   11737             : 
   11738             : 
   11739             : 
   11740             : 
   11741             :  // JH (10/24/2005): methods added to support the ast file IO
   11742             :     private:
   11743             : 
   11744             :       /* name AST Memory Allocation Support Functions
   11745             :           \brief Memory allocations support....
   11746             : 
   11747             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   11748             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   11749             :           and support the AST File I/O Mechanism.
   11750             :        */
   11751             :       /* */
   11752             : 
   11753             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   11754             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   11755             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   11756             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   11757             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   11758             :           a correspinding one in the AST_FILE_IO class!
   11759             :        */
   11760             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   11761             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   11762             :       /* \brief Typedef used for low level memory access.
   11763             :        */
   11764             :        // typedef unsigned char* TestType;
   11765             : 
   11766             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   11767             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   11768             :       /* \brief Typedef used to hold memory addresses as values.
   11769             :        */
   11770             :        // typedef unsigned long  AddressType;
   11771             : 
   11772             : 
   11773             : 
   11774             :        // necessary, to have direct access to the p_freepointer and the private methods !
   11775             :       /*! \brief friend class declaration to support AST File I/O */
   11776             :           friend class AST_FILE_IO;
   11777             : 
   11778             :       /*! \brief friend class declaration to support AST File I/O */
   11779             :           friend class SgUPC_AccessModifierStorageClass;
   11780             : 
   11781             :       /*! \brief friend class declaration to support AST File I/O */
   11782             :           friend class AstSpecificDataManagingClass;
   11783             : 
   11784             :       /*! \brief friend class declaration to support AST File I/O */
   11785             :           friend class AstSpecificDataManagingClassStorageClass;
   11786             :     public:
   11787             :       /*! \brief IR node constructor to support AST File I/O */
   11788             :           SgUPC_AccessModifier( const SgUPC_AccessModifierStorageClass& source );
   11789             : 
   11790             :  // private: // JJW hack
   11791             :        /*
   11792             :           name AST Memory Allocation Support Variables
   11793             :           Memory allocations support variables 
   11794             : 
   11795             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   11796             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   11797             :           and support the AST File I/O Mechanism.
   11798             :        */
   11799             :       /* */
   11800             : 
   11801             :     public:
   11802             : 
   11803             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   11804             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   11805             :       // virtual SgNode* addRegExpAttribute();
   11806             :       /*! \brief Support for AST matching using regular expression.
   11807             : 
   11808             :           This support is incomplete and the subject of current research to define 
   11809             :           RegEx trees to support inexact matching.
   11810             :        */
   11811             :           SgUPC_AccessModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   11812             : 
   11813             : // *** COMMON CODE SECTION ENDS HERE ***
   11814             : 
   11815             : 
   11816             : // End of memberFunctionString
   11817             : // Start of memberFunctionString
   11818             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   11819             : 
   11820             :      // the generated cast function
   11821             :      // friend ROSE_DLL_API SgUPC_AccessModifier* isSgUPC_AccessModifier ( SgNode* s );
   11822             : 
   11823             :           typedef SgModifier base_node_type;
   11824             : 
   11825             : 
   11826             : // End of memberFunctionString
   11827             : 
   11828             :      public: 
   11829             :          SgUPC_AccessModifier::upc_access_modifier_enum get_modifier() const;
   11830             :          void set_modifier(SgUPC_AccessModifier::upc_access_modifier_enum modifier);
   11831             : 
   11832             :      public: 
   11833             :          bool get_isShared() const;
   11834             :          void set_isShared(bool isShared);
   11835             : 
   11836             :      public: 
   11837             :          long get_layout() const;
   11838             :          void set_layout(long layout);
   11839             : 
   11840             : 
   11841             :      public: 
   11842             :          virtual ~SgUPC_AccessModifier();
   11843             : 
   11844             : 
   11845             :      public: 
   11846             :          SgUPC_AccessModifier(); 
   11847             : 
   11848             :     protected:
   11849             : // Start of memberFunctionString
   11850             : SgUPC_AccessModifier::upc_access_modifier_enum p_modifier;
   11851             :           
   11852             : // End of memberFunctionString
   11853             : // Start of memberFunctionString
   11854             : bool p_isShared;
   11855             :           
   11856             : // End of memberFunctionString
   11857             : // Start of memberFunctionString
   11858             : long p_layout;
   11859             :           
   11860             : // End of memberFunctionString
   11861             : 
   11862             :     friend struct Rose::Traits::generated::describe_node_t<SgUPC_AccessModifier>;
   11863             :     friend struct Rose::Traits::generated::describe_field_t<SgUPC_AccessModifier, SgUPC_AccessModifier::upc_access_modifier_enum,&SgUPC_AccessModifier::p_modifier>;
   11864             :     friend struct Rose::Traits::generated::describe_field_t<SgUPC_AccessModifier, bool,&SgUPC_AccessModifier::p_isShared>;
   11865             :     friend struct Rose::Traits::generated::describe_field_t<SgUPC_AccessModifier, long,&SgUPC_AccessModifier::p_layout>;
   11866             : 
   11867             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11868             : 
   11869             : 
   11870             :    };
   11871             : #endif
   11872             : 
   11873             : // postdeclarations for SgUPC_AccessModifier
   11874             : 
   11875             : /* #line 11876 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11876             : 
   11877             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   11878             : 
   11879             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11880             : 
   11881             : 
   11882             : /* #line 11883 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11883             : 
   11884             : 
   11885             : 
   11886             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11887             : 
   11888             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   11889             : //      This code is automatically generated for each 
   11890             : //      terminal and non-terminal within the defined 
   11891             : //      grammar.  There is a simple way to change the 
   11892             : //      code to fix bugs etc.  See the ROSE README file
   11893             : //      for directions.
   11894             : 
   11895             : // tps: (02/22/2010): Adding DLL export requirements
   11896             : #include "rosedll.h"
   11897             : 
   11898             : // predeclarations for SgSpecialFunctionModifier
   11899             : 
   11900             : /* #line 11901 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11901             : 
   11902             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   11903             : 
   11904             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   11905             : 
   11906             : #if 1
   11907             : // Class Definition for SgSpecialFunctionModifier
   11908             : class ROSE_DLL_API SgSpecialFunctionModifier  : public SgModifier
   11909             :    {
   11910             :      public:
   11911             : 
   11912             : 
   11913             : /* #line 11914 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   11914             : 
   11915             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   11916             : // Start of memberFunctionString
   11917             : /* #line 1460 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   11918             : 
   11919             : 
   11920             :        // special_function specifiers (constructor, destructor, conversion, operator)
   11921             : 
   11922             :       /*! \brief Special Function Modifiers (only one value can be specified)
   11923             : 
   11924             :           Modifier information about (constructor, destructor, conversion operator (cast operator), and operator (general overloaded operators)).
   11925             : 
   11926             :           \internal Only one value can be specified (at least in C and C++)
   11927             :        */
   11928             :           enum special_function_modifier_enum
   11929             :              {
   11930             :                e_unknown            = 0,         /*!< error value */
   11931             :                e_default            = 1,         /*!< Not a special function (default) */
   11932             :                e_none               = e_default, /*!< Not a special function (default) */ /*NO_STRINGIFY*/
   11933             :                e_constructor        = 2,         /*!< A constructor */
   11934             :                e_destructor         = 3,         /*!< A destructor */
   11935             :                e_conversion         = 4,         /*!< A conversion operator function */
   11936             :                e_operator           = 5,         /*!< Any other operator function */
   11937             :                e_uld_operator       = 6,         /*!< ULD operator function (operators on literals) */
   11938             :                e_lambda_entry_point = 7,   /*!< C++11 lambda support */
   11939             :                e_last_modifier            /*!< last value (upper bound on range of values, used in error checking) */
   11940             :              };
   11941             : 
   11942             :        // Copy constructor
   11943             :           SgSpecialFunctionModifier ( const SgSpecialFunctionModifier & X );
   11944             : 
   11945             :        // Assignment Operator
   11946             :           SgSpecialFunctionModifier & operator= ( const SgSpecialFunctionModifier & X );
   11947             : 
   11948             :           void post_construction_initialization() override;
   11949             : 
   11950             :           bool isUnknown() const;
   11951             :           void setUnknown();
   11952             :           void unsetUnknown();
   11953             : 
   11954             :           bool isDefault() const;
   11955             :           void setDefault();
   11956             :           void unsetDefault();
   11957             : 
   11958             :           bool isNotSpecial() const;
   11959             :           void setNotSpecial();
   11960             :           void unsetNotSpecial();
   11961             : 
   11962             :           bool isConstructor() const;
   11963             :           void setConstructor();
   11964             :           void unsetConstructor();
   11965             : 
   11966             :           bool isDestructor() const;
   11967             :           void setDestructor();
   11968             :           void unsetDestructor();
   11969             : 
   11970             :           bool isConversion() const;
   11971             :           void setConversion();
   11972             :           void unsetConversion();
   11973             : 
   11974             :           bool isOperator() const;
   11975             :           void setOperator();
   11976             :           void unsetOperator();
   11977             : 
   11978             :           bool isUldOperator() const;
   11979             :           void setUldOperator();
   11980             :           void unsetUldOperator();
   11981             : 
   11982             :           bool isLambdaEntryPoint() const;
   11983             :           void setLambdaEntryPoint();
   11984             :           void unsetLambdaEntryPoint();
   11985             : 
   11986             :           std::string displayString() const;
   11987             :           void display ( std::string label ) const;
   11988             :           friend std::ostream & operator<< ( std::ostream & os, const SgSpecialFunctionModifier & m );
   11989             :           friend bool operator== (const SgSpecialFunctionModifier& lhs, const SgSpecialFunctionModifier& rhs);
   11990             : 
   11991             :        // DQ (2/4/2006): Added mechamism to clear all bits
   11992             :           void reset();
   11993             : 
   11994             : 
   11995             : 
   11996             : // End of memberFunctionString
   11997             : // Start of memberFunctionString
   11998             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   11999             : 
   12000             : // *** COMMON CODE SECTION BEGINS HERE ***
   12001             : 
   12002             :     public:
   12003             : 
   12004             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   12005             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   12006             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   12007             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   12008             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   12009             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   12010             : 
   12011             :       /*! \brief returns a string representing the class name */
   12012             :           virtual std::string class_name() const override;
   12013             : 
   12014             :       /*! \brief returns new style SageIII enum values */
   12015             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   12016             : 
   12017             :       /*! \brief static variant value */
   12018             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   12019             :        // static const VariantT static_variant = V_SgSpecialFunctionModifier;
   12020             :           enum { static_variant = V_SgSpecialFunctionModifier };
   12021             : 
   12022             :        /* the generated cast function */
   12023             :       /*! \brief Casts pointer from base class to derived class */
   12024             :           ROSE_DLL_API friend       SgSpecialFunctionModifier* isSgSpecialFunctionModifier(       SgNode * s );
   12025             : 
   12026             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   12027             :           ROSE_DLL_API friend const SgSpecialFunctionModifier* isSgSpecialFunctionModifier( const SgNode * s );
   12028             : 
   12029             :      // ******************************************
   12030             :      // * Memory Pool / New / Delete
   12031             :      // ******************************************
   12032             : 
   12033             :      public:
   12034             :           /// \private
   12035             :           static const unsigned pool_size; //
   12036             :           /// \private
   12037             :           static std::vector<unsigned char *> pools; //
   12038             :           /// \private
   12039             :           static SgSpecialFunctionModifier * next_node; // 
   12040             : 
   12041             :           /// \private
   12042             :           static unsigned long initializeStorageClassArray(SgSpecialFunctionModifierStorageClass *); //
   12043             : 
   12044             :           /// \private
   12045             :           static void clearMemoryPool(); //
   12046             :           static void deleteMemoryPool(); //
   12047             : 
   12048             :           /// \private
   12049             :           static void extendMemoryPoolForFileIO(); //
   12050             : 
   12051             :           /// \private
   12052             :           static SgSpecialFunctionModifier * getPointerFromGlobalIndex(unsigned long); //
   12053             :           /// \private
   12054             :           static SgSpecialFunctionModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   12055             : 
   12056             :           /// \private
   12057             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   12058             :           /// \private
   12059             :           static void resetValidFreepointers(); //
   12060             :           /// \private
   12061             :           static unsigned long getNumberOfLastValidPointer(); //
   12062             : 
   12063             : 
   12064             : #if defined(INLINE_FUNCTIONS)
   12065             :       /*! \brief returns pointer to newly allocated IR node */
   12066             :           inline void *operator new (size_t size);
   12067             : #else
   12068             :       /*! \brief returns pointer to newly allocated IR node */
   12069             :           void *operator new (size_t size);
   12070             : #endif
   12071             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   12072             :           void operator delete (void* pointer, size_t size);
   12073             : 
   12074             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   12075           0 :           void operator delete (void* pointer)
   12076             :              {
   12077             :             // This is the generated delete operator...
   12078           0 :                SgSpecialFunctionModifier::operator delete (pointer,sizeof(SgSpecialFunctionModifier));
   12079             :              }
   12080             : 
   12081             :       /*! \brief Returns the total number of IR nodes of this type */
   12082             :           static size_t numberOfNodes();
   12083             : 
   12084             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   12085             :           static size_t memoryUsage();
   12086             : 
   12087             :       // End of scope which started in IR nodes specific code 
   12088             :       /* */
   12089             : 
   12090             :       /* name Internal Functions
   12091             :           \brief Internal functions ... incomplete-documentation
   12092             : 
   12093             :           These functions have been made public as part of the design, but they are suggested for internal use 
   12094             :           or by particularly knowledgeable users for specialized tools or applications.
   12095             : 
   12096             :           \internal We could not make these private because they are required by user for special purposes. And 
   12097             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   12098             :          
   12099             :        */
   12100             : 
   12101             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   12102             :        // overridden in every class by *generated* implementation
   12103             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   12104             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   12105             :        // MS: 06/28/02 container of names of variables or container indices 
   12106             :        // used used in the traversal to access AST successor nodes
   12107             :        // overridden in every class by *generated* implementation
   12108             :       /*! \brief container of names of variables or container indices used used in the traversal
   12109             :           to access AST successor nodes overridden in every class by *generated* implementation */
   12110             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   12111             : 
   12112             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   12113             :        // than all the vector copies. The implementation for these functions is generated for each class.
   12114             :       /*! \brief return number of children in the traversal successor list */
   12115             :           virtual size_t get_numberOfTraversalSuccessors() override;
   12116             :       /*! \brief index-based access to traversal successors by index number */
   12117             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   12118             :       /*! \brief index-based access to traversal successors by child node */
   12119             :           virtual size_t get_childIndex(SgNode *child) override;
   12120             : 
   12121             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   12122             :        // MS: 08/16/2002 method for generating RTI information
   12123             :       /*! \brief return C++ Runtime-Time-Information */
   12124             :           virtual RTIReturnType roseRTI() override;
   12125             : #endif
   12126             :       /* */
   12127             : 
   12128             : 
   12129             : 
   12130             :       /* name Deprecated Functions
   12131             :           \brief Deprecated functions ... incomplete-documentation
   12132             : 
   12133             :           These functions have been deprecated from use.
   12134             :        */
   12135             :       /* */
   12136             : 
   12137             :       /*! returns a C style string (char*) representing the class name */
   12138             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   12139             : 
   12140             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   12141             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   12142             : #if 0
   12143             :       /*! returns old style Sage II enum values */
   12144             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   12145             :       /*! returns old style Sage II enum values */
   12146             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   12147             : #endif
   12148             :       /* */
   12149             : 
   12150             : 
   12151             : 
   12152             : 
   12153             :      public:
   12154             :       /* name Traversal Support Functions
   12155             :           \brief Traversal support functions ... incomplete-documentation
   12156             : 
   12157             :           These functions have been made public as part of the design, but they are suggested for internal use 
   12158             :           or by particularly knowledgable users for specialized tools or applications.
   12159             :        */
   12160             :       /* */
   12161             : 
   12162             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   12163             :        // (inferior to ROSE traversal mechanism, experimental).
   12164             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   12165             :        */
   12166             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   12167             : 
   12168             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   12169             :       /*! \brief support for the classic visitor pattern done in GoF */
   12170             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   12171             : 
   12172             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   12173             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   12174             :        */
   12175             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   12176             : 
   12177             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   12178             :        */
   12179             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   12180             : 
   12181             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   12182             :        // This traversal helps support internal tools that call static member functions.
   12183             :        // note: this function operates on the memory pools.
   12184             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   12185             :        */
   12186             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   12187             :       /* */
   12188             : 
   12189             : 
   12190             :      public:
   12191             :       /* name Memory Allocation Functions
   12192             :           \brief Memory allocations functions ... incomplete-documentation
   12193             : 
   12194             :           These functions have been made public as part of the design, but they are suggested for internal use 
   12195             :           or by particularly knowledgable users for specialized tools or applications.
   12196             :        */
   12197             :       /* */
   12198             : 
   12199             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   12200             : 
   12201             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   12202             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   12203             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   12204             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   12205             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   12206             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   12207             :           being used with the AST File I/O mechanism.
   12208             :        */
   12209             :           virtual bool isInMemoryPool() override;
   12210             : 
   12211             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   12212             : 
   12213             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   12214             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   12215             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   12216             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   12217             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   12218             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   12219             :           being used with the AST File I/O mechanism.
   12220             :        */
   12221             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   12222             : 
   12223             :       // DQ (4/30/2006): Modified to be a const function.
   12224             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   12225             : 
   12226             :           This functions is part of general support for many possible tools to operate 
   12227             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   12228             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   12229             :           less than the set of pointers used by the AST file I/O. This is part of
   12230             :           work implemented by Andreas, and support tools such as the AST graph generation.
   12231             : 
   12232             :           \warning This function can return unexpected data members and thus the 
   12233             :                    order and the number of elements is unpredicable and subject 
   12234             :                    to change.
   12235             : 
   12236             :           \returns STL vector of pairs of SgNode* and strings
   12237             :        */
   12238             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   12239             : 
   12240             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   12241             : 
   12242             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   12243             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   12244             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   12245             : 
   12246             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   12247             :                    and subject to change.
   12248             :        */
   12249             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   12250             : 
   12251             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   12252             : 
   12253             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   12254             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   12255             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   12256             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   12257             : 
   12258             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   12259             : 
   12260             :           \returns long
   12261             :        */
   12262             :           virtual long getChildIndex( SgNode* childNode ) const override;
   12263             : 
   12264             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   12265             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   12266             :       /* \brief Constructor for use by AST File I/O Mechanism
   12267             : 
   12268             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   12269             :           which obtained via fast binary file I/O from disk.
   12270             :        */
   12271             :        // SgSpecialFunctionModifier( SgSpecialFunctionModifierStorageClass& source );
   12272             : 
   12273             : 
   12274             : 
   12275             : 
   12276             : 
   12277             :  // JH (10/24/2005): methods added to support the ast file IO
   12278             :     private:
   12279             : 
   12280             :       /* name AST Memory Allocation Support Functions
   12281             :           \brief Memory allocations support....
   12282             : 
   12283             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   12284             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   12285             :           and support the AST File I/O Mechanism.
   12286             :        */
   12287             :       /* */
   12288             : 
   12289             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   12290             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   12291             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   12292             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   12293             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   12294             :           a correspinding one in the AST_FILE_IO class!
   12295             :        */
   12296             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   12297             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   12298             :       /* \brief Typedef used for low level memory access.
   12299             :        */
   12300             :        // typedef unsigned char* TestType;
   12301             : 
   12302             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   12303             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   12304             :       /* \brief Typedef used to hold memory addresses as values.
   12305             :        */
   12306             :        // typedef unsigned long  AddressType;
   12307             : 
   12308             : 
   12309             : 
   12310             :        // necessary, to have direct access to the p_freepointer and the private methods !
   12311             :       /*! \brief friend class declaration to support AST File I/O */
   12312             :           friend class AST_FILE_IO;
   12313             : 
   12314             :       /*! \brief friend class declaration to support AST File I/O */
   12315             :           friend class SgSpecialFunctionModifierStorageClass;
   12316             : 
   12317             :       /*! \brief friend class declaration to support AST File I/O */
   12318             :           friend class AstSpecificDataManagingClass;
   12319             : 
   12320             :       /*! \brief friend class declaration to support AST File I/O */
   12321             :           friend class AstSpecificDataManagingClassStorageClass;
   12322             :     public:
   12323             :       /*! \brief IR node constructor to support AST File I/O */
   12324             :           SgSpecialFunctionModifier( const SgSpecialFunctionModifierStorageClass& source );
   12325             : 
   12326             :  // private: // JJW hack
   12327             :        /*
   12328             :           name AST Memory Allocation Support Variables
   12329             :           Memory allocations support variables 
   12330             : 
   12331             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   12332             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   12333             :           and support the AST File I/O Mechanism.
   12334             :        */
   12335             :       /* */
   12336             : 
   12337             :     public:
   12338             : 
   12339             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   12340             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   12341             :       // virtual SgNode* addRegExpAttribute();
   12342             :       /*! \brief Support for AST matching using regular expression.
   12343             : 
   12344             :           This support is incomplete and the subject of current research to define 
   12345             :           RegEx trees to support inexact matching.
   12346             :        */
   12347             :           SgSpecialFunctionModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   12348             : 
   12349             : // *** COMMON CODE SECTION ENDS HERE ***
   12350             : 
   12351             : 
   12352             : // End of memberFunctionString
   12353             : // Start of memberFunctionString
   12354             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   12355             : 
   12356             :      // the generated cast function
   12357             :      // friend ROSE_DLL_API SgSpecialFunctionModifier* isSgSpecialFunctionModifier ( SgNode* s );
   12358             : 
   12359             :           typedef SgModifier base_node_type;
   12360             : 
   12361             : 
   12362             : // End of memberFunctionString
   12363             : 
   12364             :      public: 
   12365             :          SgBitVector get_modifierVector() const;
   12366             :          void set_modifierVector(SgBitVector modifierVector);
   12367             : 
   12368             : 
   12369             :      public: 
   12370             :          virtual ~SgSpecialFunctionModifier();
   12371             : 
   12372             : 
   12373             :      public: 
   12374             :          SgSpecialFunctionModifier(); 
   12375             : 
   12376             :     protected:
   12377             : // Start of memberFunctionString
   12378             : SgBitVector p_modifierVector;
   12379             :           
   12380             : // End of memberFunctionString
   12381             : 
   12382             :     friend struct Rose::Traits::generated::describe_node_t<SgSpecialFunctionModifier>;
   12383             :     friend struct Rose::Traits::generated::describe_field_t<SgSpecialFunctionModifier, SgBitVector,&SgSpecialFunctionModifier::p_modifierVector>;
   12384             : 
   12385             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12386             : 
   12387             : 
   12388             :    };
   12389             : #endif
   12390             : 
   12391             : // postdeclarations for SgSpecialFunctionModifier
   12392             : 
   12393             : /* #line 12394 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12394             : 
   12395             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   12396             : 
   12397             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12398             : 
   12399             : 
   12400             : /* #line 12401 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12401             : 
   12402             : 
   12403             : 
   12404             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12405             : 
   12406             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   12407             : //      This code is automatically generated for each 
   12408             : //      terminal and non-terminal within the defined 
   12409             : //      grammar.  There is a simple way to change the 
   12410             : //      code to fix bugs etc.  See the ROSE README file
   12411             : //      for directions.
   12412             : 
   12413             : // tps: (02/22/2010): Adding DLL export requirements
   12414             : #include "rosedll.h"
   12415             : 
   12416             : // predeclarations for SgElaboratedTypeModifier
   12417             : 
   12418             : /* #line 12419 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12419             : 
   12420             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   12421             : 
   12422             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12423             : 
   12424             : #if 1
   12425             : // Class Definition for SgElaboratedTypeModifier
   12426             : class ROSE_DLL_API SgElaboratedTypeModifier  : public SgModifier
   12427             :    {
   12428             :      public:
   12429             : 
   12430             : 
   12431             : /* #line 12432 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12432             : 
   12433             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   12434             : // Start of memberFunctionString
   12435             : /* #line 2151 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   12436             : 
   12437             :        // elaborated-type-specifier (class, struct, union, enum, typename, typename template)
   12438             : 
   12439             :        // DQ (4/6/2004): Added to provide uniform support for access modifiers
   12440             :       /*! \brief Elaborated Type Modifiers (only one value can be specified)
   12441             : 
   12442             :           Modifier information about (class,struct, union, enum, and typename).
   12443             : 
   12444             :           \internal Only one value can be specified (at least in C and C++)
   12445             :        */
   12446             :           enum elaborated_type_modifier_enum
   12447             :              {
   12448             :             // Only one value can be specified ???
   12449             :                e_unknown  = 0, /*!< error value */
   12450             :                e_default  = 1, /*!< default value (default) */
   12451             :                e_class    = 2, /*!< class type */
   12452             :                e_struct   = 3, /*!< struct type */
   12453             :                e_union    = 4, /*!< union type */
   12454             :                e_enum     = 5, /*!< enum type */
   12455             :                e_typename = 6, /*!< typename type */
   12456             :                e_last_modifier /*!< last value (upper bound on range of values, used in error checking) */
   12457             :              };
   12458             : 
   12459             :        // Copy constructor
   12460             :           SgElaboratedTypeModifier ( const SgElaboratedTypeModifier & X );
   12461             : 
   12462             :        // Assignment Operator
   12463             :           SgElaboratedTypeModifier & operator= ( const SgElaboratedTypeModifier & X );
   12464             : 
   12465             :           void post_construction_initialization() override;
   12466             : 
   12467             :           bool isUnknown() const;
   12468             :           void setUnknown();
   12469             : 
   12470             :           bool isDefault() const;
   12471             :           void setDefault();
   12472             : 
   12473             :           bool isClass() const;
   12474             :           void setClass();
   12475             : 
   12476             :           bool isStruct() const;
   12477             :           void setStruct();
   12478             : 
   12479             :           bool isUnion() const;
   12480             :           void setUnion();
   12481             : 
   12482             :           bool isEnum() const;
   12483             :           void setEnum();
   12484             : 
   12485             :           bool isTypename() const;
   12486             :           void setTypename();
   12487             : 
   12488             :           std::string displayString() const;
   12489             :           void display ( std::string label ) const;
   12490             :           friend std::ostream & operator<< ( std::ostream & os, const SgElaboratedTypeModifier & m );
   12491             :       friend bool operator== (const SgElaboratedTypeModifier& lhs, const SgElaboratedTypeModifier& rhs);
   12492             : 
   12493             :        // DQ (2/4/2006): Added mechamism to clear all bits
   12494             :           void reset();
   12495             : 
   12496             : 
   12497             : 
   12498             : // End of memberFunctionString
   12499             : // Start of memberFunctionString
   12500             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   12501             : 
   12502             : // *** COMMON CODE SECTION BEGINS HERE ***
   12503             : 
   12504             :     public:
   12505             : 
   12506             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   12507             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   12508             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   12509             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   12510             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   12511             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   12512             : 
   12513             :       /*! \brief returns a string representing the class name */
   12514             :           virtual std::string class_name() const override;
   12515             : 
   12516             :       /*! \brief returns new style SageIII enum values */
   12517             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   12518             : 
   12519             :       /*! \brief static variant value */
   12520             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   12521             :        // static const VariantT static_variant = V_SgElaboratedTypeModifier;
   12522             :           enum { static_variant = V_SgElaboratedTypeModifier };
   12523             : 
   12524             :        /* the generated cast function */
   12525             :       /*! \brief Casts pointer from base class to derived class */
   12526             :           ROSE_DLL_API friend       SgElaboratedTypeModifier* isSgElaboratedTypeModifier(       SgNode * s );
   12527             : 
   12528             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   12529             :           ROSE_DLL_API friend const SgElaboratedTypeModifier* isSgElaboratedTypeModifier( const SgNode * s );
   12530             : 
   12531             :      // ******************************************
   12532             :      // * Memory Pool / New / Delete
   12533             :      // ******************************************
   12534             : 
   12535             :      public:
   12536             :           /// \private
   12537             :           static const unsigned pool_size; //
   12538             :           /// \private
   12539             :           static std::vector<unsigned char *> pools; //
   12540             :           /// \private
   12541             :           static SgElaboratedTypeModifier * next_node; // 
   12542             : 
   12543             :           /// \private
   12544             :           static unsigned long initializeStorageClassArray(SgElaboratedTypeModifierStorageClass *); //
   12545             : 
   12546             :           /// \private
   12547             :           static void clearMemoryPool(); //
   12548             :           static void deleteMemoryPool(); //
   12549             : 
   12550             :           /// \private
   12551             :           static void extendMemoryPoolForFileIO(); //
   12552             : 
   12553             :           /// \private
   12554             :           static SgElaboratedTypeModifier * getPointerFromGlobalIndex(unsigned long); //
   12555             :           /// \private
   12556             :           static SgElaboratedTypeModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   12557             : 
   12558             :           /// \private
   12559             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   12560             :           /// \private
   12561             :           static void resetValidFreepointers(); //
   12562             :           /// \private
   12563             :           static unsigned long getNumberOfLastValidPointer(); //
   12564             : 
   12565             : 
   12566             : #if defined(INLINE_FUNCTIONS)
   12567             :       /*! \brief returns pointer to newly allocated IR node */
   12568             :           inline void *operator new (size_t size);
   12569             : #else
   12570             :       /*! \brief returns pointer to newly allocated IR node */
   12571             :           void *operator new (size_t size);
   12572             : #endif
   12573             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   12574             :           void operator delete (void* pointer, size_t size);
   12575             : 
   12576             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   12577           0 :           void operator delete (void* pointer)
   12578             :              {
   12579             :             // This is the generated delete operator...
   12580           0 :                SgElaboratedTypeModifier::operator delete (pointer,sizeof(SgElaboratedTypeModifier));
   12581             :              }
   12582             : 
   12583             :       /*! \brief Returns the total number of IR nodes of this type */
   12584             :           static size_t numberOfNodes();
   12585             : 
   12586             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   12587             :           static size_t memoryUsage();
   12588             : 
   12589             :       // End of scope which started in IR nodes specific code 
   12590             :       /* */
   12591             : 
   12592             :       /* name Internal Functions
   12593             :           \brief Internal functions ... incomplete-documentation
   12594             : 
   12595             :           These functions have been made public as part of the design, but they are suggested for internal use 
   12596             :           or by particularly knowledgeable users for specialized tools or applications.
   12597             : 
   12598             :           \internal We could not make these private because they are required by user for special purposes. And 
   12599             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   12600             :          
   12601             :        */
   12602             : 
   12603             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   12604             :        // overridden in every class by *generated* implementation
   12605             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   12606             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   12607             :        // MS: 06/28/02 container of names of variables or container indices 
   12608             :        // used used in the traversal to access AST successor nodes
   12609             :        // overridden in every class by *generated* implementation
   12610             :       /*! \brief container of names of variables or container indices used used in the traversal
   12611             :           to access AST successor nodes overridden in every class by *generated* implementation */
   12612             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   12613             : 
   12614             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   12615             :        // than all the vector copies. The implementation for these functions is generated for each class.
   12616             :       /*! \brief return number of children in the traversal successor list */
   12617             :           virtual size_t get_numberOfTraversalSuccessors() override;
   12618             :       /*! \brief index-based access to traversal successors by index number */
   12619             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   12620             :       /*! \brief index-based access to traversal successors by child node */
   12621             :           virtual size_t get_childIndex(SgNode *child) override;
   12622             : 
   12623             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   12624             :        // MS: 08/16/2002 method for generating RTI information
   12625             :       /*! \brief return C++ Runtime-Time-Information */
   12626             :           virtual RTIReturnType roseRTI() override;
   12627             : #endif
   12628             :       /* */
   12629             : 
   12630             : 
   12631             : 
   12632             :       /* name Deprecated Functions
   12633             :           \brief Deprecated functions ... incomplete-documentation
   12634             : 
   12635             :           These functions have been deprecated from use.
   12636             :        */
   12637             :       /* */
   12638             : 
   12639             :       /*! returns a C style string (char*) representing the class name */
   12640             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   12641             : 
   12642             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   12643             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   12644             : #if 0
   12645             :       /*! returns old style Sage II enum values */
   12646             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   12647             :       /*! returns old style Sage II enum values */
   12648             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   12649             : #endif
   12650             :       /* */
   12651             : 
   12652             : 
   12653             : 
   12654             : 
   12655             :      public:
   12656             :       /* name Traversal Support Functions
   12657             :           \brief Traversal support functions ... incomplete-documentation
   12658             : 
   12659             :           These functions have been made public as part of the design, but they are suggested for internal use 
   12660             :           or by particularly knowledgable users for specialized tools or applications.
   12661             :        */
   12662             :       /* */
   12663             : 
   12664             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   12665             :        // (inferior to ROSE traversal mechanism, experimental).
   12666             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   12667             :        */
   12668             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   12669             : 
   12670             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   12671             :       /*! \brief support for the classic visitor pattern done in GoF */
   12672             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   12673             : 
   12674             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   12675             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   12676             :        */
   12677             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   12678             : 
   12679             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   12680             :        */
   12681             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   12682             : 
   12683             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   12684             :        // This traversal helps support internal tools that call static member functions.
   12685             :        // note: this function operates on the memory pools.
   12686             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   12687             :        */
   12688             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   12689             :       /* */
   12690             : 
   12691             : 
   12692             :      public:
   12693             :       /* name Memory Allocation Functions
   12694             :           \brief Memory allocations functions ... incomplete-documentation
   12695             : 
   12696             :           These functions have been made public as part of the design, but they are suggested for internal use 
   12697             :           or by particularly knowledgable users for specialized tools or applications.
   12698             :        */
   12699             :       /* */
   12700             : 
   12701             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   12702             : 
   12703             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   12704             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   12705             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   12706             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   12707             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   12708             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   12709             :           being used with the AST File I/O mechanism.
   12710             :        */
   12711             :           virtual bool isInMemoryPool() override;
   12712             : 
   12713             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   12714             : 
   12715             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   12716             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   12717             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   12718             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   12719             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   12720             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   12721             :           being used with the AST File I/O mechanism.
   12722             :        */
   12723             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   12724             : 
   12725             :       // DQ (4/30/2006): Modified to be a const function.
   12726             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   12727             : 
   12728             :           This functions is part of general support for many possible tools to operate 
   12729             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   12730             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   12731             :           less than the set of pointers used by the AST file I/O. This is part of
   12732             :           work implemented by Andreas, and support tools such as the AST graph generation.
   12733             : 
   12734             :           \warning This function can return unexpected data members and thus the 
   12735             :                    order and the number of elements is unpredicable and subject 
   12736             :                    to change.
   12737             : 
   12738             :           \returns STL vector of pairs of SgNode* and strings
   12739             :        */
   12740             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   12741             : 
   12742             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   12743             : 
   12744             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   12745             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   12746             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   12747             : 
   12748             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   12749             :                    and subject to change.
   12750             :        */
   12751             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   12752             : 
   12753             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   12754             : 
   12755             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   12756             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   12757             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   12758             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   12759             : 
   12760             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   12761             : 
   12762             :           \returns long
   12763             :        */
   12764             :           virtual long getChildIndex( SgNode* childNode ) const override;
   12765             : 
   12766             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   12767             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   12768             :       /* \brief Constructor for use by AST File I/O Mechanism
   12769             : 
   12770             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   12771             :           which obtained via fast binary file I/O from disk.
   12772             :        */
   12773             :        // SgElaboratedTypeModifier( SgElaboratedTypeModifierStorageClass& source );
   12774             : 
   12775             : 
   12776             : 
   12777             : 
   12778             : 
   12779             :  // JH (10/24/2005): methods added to support the ast file IO
   12780             :     private:
   12781             : 
   12782             :       /* name AST Memory Allocation Support Functions
   12783             :           \brief Memory allocations support....
   12784             : 
   12785             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   12786             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   12787             :           and support the AST File I/O Mechanism.
   12788             :        */
   12789             :       /* */
   12790             : 
   12791             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   12792             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   12793             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   12794             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   12795             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   12796             :           a correspinding one in the AST_FILE_IO class!
   12797             :        */
   12798             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   12799             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   12800             :       /* \brief Typedef used for low level memory access.
   12801             :        */
   12802             :        // typedef unsigned char* TestType;
   12803             : 
   12804             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   12805             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   12806             :       /* \brief Typedef used to hold memory addresses as values.
   12807             :        */
   12808             :        // typedef unsigned long  AddressType;
   12809             : 
   12810             : 
   12811             : 
   12812             :        // necessary, to have direct access to the p_freepointer and the private methods !
   12813             :       /*! \brief friend class declaration to support AST File I/O */
   12814             :           friend class AST_FILE_IO;
   12815             : 
   12816             :       /*! \brief friend class declaration to support AST File I/O */
   12817             :           friend class SgElaboratedTypeModifierStorageClass;
   12818             : 
   12819             :       /*! \brief friend class declaration to support AST File I/O */
   12820             :           friend class AstSpecificDataManagingClass;
   12821             : 
   12822             :       /*! \brief friend class declaration to support AST File I/O */
   12823             :           friend class AstSpecificDataManagingClassStorageClass;
   12824             :     public:
   12825             :       /*! \brief IR node constructor to support AST File I/O */
   12826             :           SgElaboratedTypeModifier( const SgElaboratedTypeModifierStorageClass& source );
   12827             : 
   12828             :  // private: // JJW hack
   12829             :        /*
   12830             :           name AST Memory Allocation Support Variables
   12831             :           Memory allocations support variables 
   12832             : 
   12833             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   12834             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   12835             :           and support the AST File I/O Mechanism.
   12836             :        */
   12837             :       /* */
   12838             : 
   12839             :     public:
   12840             : 
   12841             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   12842             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   12843             :       // virtual SgNode* addRegExpAttribute();
   12844             :       /*! \brief Support for AST matching using regular expression.
   12845             : 
   12846             :           This support is incomplete and the subject of current research to define 
   12847             :           RegEx trees to support inexact matching.
   12848             :        */
   12849             :           SgElaboratedTypeModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   12850             : 
   12851             : // *** COMMON CODE SECTION ENDS HERE ***
   12852             : 
   12853             : 
   12854             : // End of memberFunctionString
   12855             : // Start of memberFunctionString
   12856             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   12857             : 
   12858             :      // the generated cast function
   12859             :      // friend ROSE_DLL_API SgElaboratedTypeModifier* isSgElaboratedTypeModifier ( SgNode* s );
   12860             : 
   12861             :           typedef SgModifier base_node_type;
   12862             : 
   12863             : 
   12864             : // End of memberFunctionString
   12865             : 
   12866             :      public: 
   12867             :          SgElaboratedTypeModifier::elaborated_type_modifier_enum get_modifier() const;
   12868             :          void set_modifier(SgElaboratedTypeModifier::elaborated_type_modifier_enum modifier);
   12869             : 
   12870             : 
   12871             :      public: 
   12872             :          virtual ~SgElaboratedTypeModifier();
   12873             : 
   12874             : 
   12875             :      public: 
   12876             :          SgElaboratedTypeModifier(); 
   12877             : 
   12878             :     protected:
   12879             : // Start of memberFunctionString
   12880             : SgElaboratedTypeModifier::elaborated_type_modifier_enum p_modifier;
   12881             :           
   12882             : // End of memberFunctionString
   12883             : 
   12884             :     friend struct Rose::Traits::generated::describe_node_t<SgElaboratedTypeModifier>;
   12885             :     friend struct Rose::Traits::generated::describe_field_t<SgElaboratedTypeModifier, SgElaboratedTypeModifier::elaborated_type_modifier_enum,&SgElaboratedTypeModifier::p_modifier>;
   12886             : 
   12887             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12888             : 
   12889             : 
   12890             :    };
   12891             : #endif
   12892             : 
   12893             : // postdeclarations for SgElaboratedTypeModifier
   12894             : 
   12895             : /* #line 12896 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12896             : 
   12897             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   12898             : 
   12899             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12900             : 
   12901             : 
   12902             : /* #line 12903 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12903             : 
   12904             : 
   12905             : 
   12906             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12907             : 
   12908             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   12909             : //      This code is automatically generated for each 
   12910             : //      terminal and non-terminal within the defined 
   12911             : //      grammar.  There is a simple way to change the 
   12912             : //      code to fix bugs etc.  See the ROSE README file
   12913             : //      for directions.
   12914             : 
   12915             : // tps: (02/22/2010): Adding DLL export requirements
   12916             : #include "rosedll.h"
   12917             : 
   12918             : // predeclarations for SgLinkageModifier
   12919             : 
   12920             : /* #line 12921 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12921             : 
   12922             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   12923             : 
   12924             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   12925             : 
   12926             : #if 1
   12927             : // Class Definition for SgLinkageModifier
   12928             : class ROSE_DLL_API SgLinkageModifier  : public SgModifier
   12929             :    {
   12930             :      public:
   12931             : 
   12932             : 
   12933             : /* #line 12934 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   12934             : 
   12935             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   12936             : // Start of memberFunctionString
   12937             : /* #line 2213 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   12938             : 
   12939             : 
   12940             :        // linkage-specification (extern, extern "C", extern "C++", extern "Fortran")
   12941             : 
   12942             :        // DQ (4/6/2004): Added to provide uniform support for access modifiers
   12943             :       /*! \brief Linkage Modifiers (only one value can be specified)
   12944             : 
   12945             :           Modifier information about (C linkage, C++ linkage, Fortran linkage, and Fortran 90 linkage).
   12946             : 
   12947             :           \internal Only one value can be specified (at least in C and C++)
   12948             :        */
   12949             :           enum linkage_modifier_enum
   12950             :              {
   12951             :                e_unknown           = 0, /*!< error value */
   12952             :                e_default           = 1, /*!< default value */
   12953             :                e_C_linkage         = 2, /*!< C linkage */
   12954             :                e_Cpp_linkage       = 3, /*!< C++ linkage */
   12955             :                e_fortran_linkage   = 4, /*!< FORTRAN linkage (not really used yet) */
   12956             :                e_fortran90_linkage = 5, /*!< FORTRAN 90 linkage (not really used yet) */
   12957             :                e_last_modifier        /*!< last value (upper bound on range of values, used in error checking) */
   12958             :              };
   12959             : 
   12960             :        // Copy constructor
   12961             :           SgLinkageModifier ( const SgLinkageModifier & X );
   12962             : 
   12963             :        // Assignment Operator
   12964             :           SgLinkageModifier & operator= ( const SgLinkageModifier & X );
   12965             : 
   12966             :           void post_construction_initialization() override;
   12967             : 
   12968             :           bool isUnknown() const;
   12969             :           void setUnknown();
   12970             : 
   12971             :           bool isDefault() const;
   12972             :           void setDefault();
   12973             : 
   12974             :           bool isC_Linkage() const;
   12975             :           void setC_Linkage();
   12976             : 
   12977             :           bool isCppLinkage() const;
   12978             :           void setCppLinkage();
   12979             : 
   12980             :           bool isFortranLinkage() const;
   12981             :           void setFortranLinkage();
   12982             : 
   12983             :           std::string displayString() const;
   12984             :           void display ( std::string label ) const;
   12985             :           friend std::ostream & operator<< ( std::ostream & os, const SgLinkageModifier & m );
   12986             :       friend bool operator== (const SgLinkageModifier& lhs, const SgLinkageModifier& rhs);
   12987             : 
   12988             :        // DQ (2/4/2006): Added mechamism to clear all bits
   12989             :           void reset();
   12990             : 
   12991             : 
   12992             : 
   12993             : // End of memberFunctionString
   12994             : // Start of memberFunctionString
   12995             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   12996             : 
   12997             : // *** COMMON CODE SECTION BEGINS HERE ***
   12998             : 
   12999             :     public:
   13000             : 
   13001             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   13002             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   13003             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   13004             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   13005             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   13006             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   13007             : 
   13008             :       /*! \brief returns a string representing the class name */
   13009             :           virtual std::string class_name() const override;
   13010             : 
   13011             :       /*! \brief returns new style SageIII enum values */
   13012             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   13013             : 
   13014             :       /*! \brief static variant value */
   13015             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   13016             :        // static const VariantT static_variant = V_SgLinkageModifier;
   13017             :           enum { static_variant = V_SgLinkageModifier };
   13018             : 
   13019             :        /* the generated cast function */
   13020             :       /*! \brief Casts pointer from base class to derived class */
   13021             :           ROSE_DLL_API friend       SgLinkageModifier* isSgLinkageModifier(       SgNode * s );
   13022             : 
   13023             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   13024             :           ROSE_DLL_API friend const SgLinkageModifier* isSgLinkageModifier( const SgNode * s );
   13025             : 
   13026             :      // ******************************************
   13027             :      // * Memory Pool / New / Delete
   13028             :      // ******************************************
   13029             : 
   13030             :      public:
   13031             :           /// \private
   13032             :           static const unsigned pool_size; //
   13033             :           /// \private
   13034             :           static std::vector<unsigned char *> pools; //
   13035             :           /// \private
   13036             :           static SgLinkageModifier * next_node; // 
   13037             : 
   13038             :           /// \private
   13039             :           static unsigned long initializeStorageClassArray(SgLinkageModifierStorageClass *); //
   13040             : 
   13041             :           /// \private
   13042             :           static void clearMemoryPool(); //
   13043             :           static void deleteMemoryPool(); //
   13044             : 
   13045             :           /// \private
   13046             :           static void extendMemoryPoolForFileIO(); //
   13047             : 
   13048             :           /// \private
   13049             :           static SgLinkageModifier * getPointerFromGlobalIndex(unsigned long); //
   13050             :           /// \private
   13051             :           static SgLinkageModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   13052             : 
   13053             :           /// \private
   13054             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   13055             :           /// \private
   13056             :           static void resetValidFreepointers(); //
   13057             :           /// \private
   13058             :           static unsigned long getNumberOfLastValidPointer(); //
   13059             : 
   13060             : 
   13061             : #if defined(INLINE_FUNCTIONS)
   13062             :       /*! \brief returns pointer to newly allocated IR node */
   13063             :           inline void *operator new (size_t size);
   13064             : #else
   13065             :       /*! \brief returns pointer to newly allocated IR node */
   13066             :           void *operator new (size_t size);
   13067             : #endif
   13068             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   13069             :           void operator delete (void* pointer, size_t size);
   13070             : 
   13071             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   13072           0 :           void operator delete (void* pointer)
   13073             :              {
   13074             :             // This is the generated delete operator...
   13075           0 :                SgLinkageModifier::operator delete (pointer,sizeof(SgLinkageModifier));
   13076             :              }
   13077             : 
   13078             :       /*! \brief Returns the total number of IR nodes of this type */
   13079             :           static size_t numberOfNodes();
   13080             : 
   13081             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   13082             :           static size_t memoryUsage();
   13083             : 
   13084             :       // End of scope which started in IR nodes specific code 
   13085             :       /* */
   13086             : 
   13087             :       /* name Internal Functions
   13088             :           \brief Internal functions ... incomplete-documentation
   13089             : 
   13090             :           These functions have been made public as part of the design, but they are suggested for internal use 
   13091             :           or by particularly knowledgeable users for specialized tools or applications.
   13092             : 
   13093             :           \internal We could not make these private because they are required by user for special purposes. And 
   13094             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   13095             :          
   13096             :        */
   13097             : 
   13098             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   13099             :        // overridden in every class by *generated* implementation
   13100             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   13101             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   13102             :        // MS: 06/28/02 container of names of variables or container indices 
   13103             :        // used used in the traversal to access AST successor nodes
   13104             :        // overridden in every class by *generated* implementation
   13105             :       /*! \brief container of names of variables or container indices used used in the traversal
   13106             :           to access AST successor nodes overridden in every class by *generated* implementation */
   13107             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   13108             : 
   13109             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   13110             :        // than all the vector copies. The implementation for these functions is generated for each class.
   13111             :       /*! \brief return number of children in the traversal successor list */
   13112             :           virtual size_t get_numberOfTraversalSuccessors() override;
   13113             :       /*! \brief index-based access to traversal successors by index number */
   13114             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   13115             :       /*! \brief index-based access to traversal successors by child node */
   13116             :           virtual size_t get_childIndex(SgNode *child) override;
   13117             : 
   13118             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   13119             :        // MS: 08/16/2002 method for generating RTI information
   13120             :       /*! \brief return C++ Runtime-Time-Information */
   13121             :           virtual RTIReturnType roseRTI() override;
   13122             : #endif
   13123             :       /* */
   13124             : 
   13125             : 
   13126             : 
   13127             :       /* name Deprecated Functions
   13128             :           \brief Deprecated functions ... incomplete-documentation
   13129             : 
   13130             :           These functions have been deprecated from use.
   13131             :        */
   13132             :       /* */
   13133             : 
   13134             :       /*! returns a C style string (char*) representing the class name */
   13135             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   13136             : 
   13137             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   13138             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   13139             : #if 0
   13140             :       /*! returns old style Sage II enum values */
   13141             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   13142             :       /*! returns old style Sage II enum values */
   13143             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   13144             : #endif
   13145             :       /* */
   13146             : 
   13147             : 
   13148             : 
   13149             : 
   13150             :      public:
   13151             :       /* name Traversal Support Functions
   13152             :           \brief Traversal support functions ... incomplete-documentation
   13153             : 
   13154             :           These functions have been made public as part of the design, but they are suggested for internal use 
   13155             :           or by particularly knowledgable users for specialized tools or applications.
   13156             :        */
   13157             :       /* */
   13158             : 
   13159             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   13160             :        // (inferior to ROSE traversal mechanism, experimental).
   13161             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   13162             :        */
   13163             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   13164             : 
   13165             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   13166             :       /*! \brief support for the classic visitor pattern done in GoF */
   13167             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   13168             : 
   13169             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   13170             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   13171             :        */
   13172             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   13173             : 
   13174             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   13175             :        */
   13176             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   13177             : 
   13178             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   13179             :        // This traversal helps support internal tools that call static member functions.
   13180             :        // note: this function operates on the memory pools.
   13181             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   13182             :        */
   13183             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   13184             :       /* */
   13185             : 
   13186             : 
   13187             :      public:
   13188             :       /* name Memory Allocation Functions
   13189             :           \brief Memory allocations functions ... incomplete-documentation
   13190             : 
   13191             :           These functions have been made public as part of the design, but they are suggested for internal use 
   13192             :           or by particularly knowledgable users for specialized tools or applications.
   13193             :        */
   13194             :       /* */
   13195             : 
   13196             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   13197             : 
   13198             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   13199             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   13200             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   13201             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   13202             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   13203             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   13204             :           being used with the AST File I/O mechanism.
   13205             :        */
   13206             :           virtual bool isInMemoryPool() override;
   13207             : 
   13208             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   13209             : 
   13210             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   13211             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   13212             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   13213             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   13214             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   13215             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   13216             :           being used with the AST File I/O mechanism.
   13217             :        */
   13218             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   13219             : 
   13220             :       // DQ (4/30/2006): Modified to be a const function.
   13221             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   13222             : 
   13223             :           This functions is part of general support for many possible tools to operate 
   13224             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   13225             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   13226             :           less than the set of pointers used by the AST file I/O. This is part of
   13227             :           work implemented by Andreas, and support tools such as the AST graph generation.
   13228             : 
   13229             :           \warning This function can return unexpected data members and thus the 
   13230             :                    order and the number of elements is unpredicable and subject 
   13231             :                    to change.
   13232             : 
   13233             :           \returns STL vector of pairs of SgNode* and strings
   13234             :        */
   13235             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   13236             : 
   13237             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   13238             : 
   13239             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   13240             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   13241             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   13242             : 
   13243             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   13244             :                    and subject to change.
   13245             :        */
   13246             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   13247             : 
   13248             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   13249             : 
   13250             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   13251             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   13252             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   13253             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   13254             : 
   13255             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   13256             : 
   13257             :           \returns long
   13258             :        */
   13259             :           virtual long getChildIndex( SgNode* childNode ) const override;
   13260             : 
   13261             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   13262             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   13263             :       /* \brief Constructor for use by AST File I/O Mechanism
   13264             : 
   13265             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   13266             :           which obtained via fast binary file I/O from disk.
   13267             :        */
   13268             :        // SgLinkageModifier( SgLinkageModifierStorageClass& source );
   13269             : 
   13270             : 
   13271             : 
   13272             : 
   13273             : 
   13274             :  // JH (10/24/2005): methods added to support the ast file IO
   13275             :     private:
   13276             : 
   13277             :       /* name AST Memory Allocation Support Functions
   13278             :           \brief Memory allocations support....
   13279             : 
   13280             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   13281             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   13282             :           and support the AST File I/O Mechanism.
   13283             :        */
   13284             :       /* */
   13285             : 
   13286             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   13287             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   13288             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   13289             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   13290             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   13291             :           a correspinding one in the AST_FILE_IO class!
   13292             :        */
   13293             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   13294             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   13295             :       /* \brief Typedef used for low level memory access.
   13296             :        */
   13297             :        // typedef unsigned char* TestType;
   13298             : 
   13299             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   13300             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   13301             :       /* \brief Typedef used to hold memory addresses as values.
   13302             :        */
   13303             :        // typedef unsigned long  AddressType;
   13304             : 
   13305             : 
   13306             : 
   13307             :        // necessary, to have direct access to the p_freepointer and the private methods !
   13308             :       /*! \brief friend class declaration to support AST File I/O */
   13309             :           friend class AST_FILE_IO;
   13310             : 
   13311             :       /*! \brief friend class declaration to support AST File I/O */
   13312             :           friend class SgLinkageModifierStorageClass;
   13313             : 
   13314             :       /*! \brief friend class declaration to support AST File I/O */
   13315             :           friend class AstSpecificDataManagingClass;
   13316             : 
   13317             :       /*! \brief friend class declaration to support AST File I/O */
   13318             :           friend class AstSpecificDataManagingClassStorageClass;
   13319             :     public:
   13320             :       /*! \brief IR node constructor to support AST File I/O */
   13321             :           SgLinkageModifier( const SgLinkageModifierStorageClass& source );
   13322             : 
   13323             :  // private: // JJW hack
   13324             :        /*
   13325             :           name AST Memory Allocation Support Variables
   13326             :           Memory allocations support variables 
   13327             : 
   13328             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   13329             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   13330             :           and support the AST File I/O Mechanism.
   13331             :        */
   13332             :       /* */
   13333             : 
   13334             :     public:
   13335             : 
   13336             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   13337             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   13338             :       // virtual SgNode* addRegExpAttribute();
   13339             :       /*! \brief Support for AST matching using regular expression.
   13340             : 
   13341             :           This support is incomplete and the subject of current research to define 
   13342             :           RegEx trees to support inexact matching.
   13343             :        */
   13344             :           SgLinkageModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   13345             : 
   13346             : // *** COMMON CODE SECTION ENDS HERE ***
   13347             : 
   13348             : 
   13349             : // End of memberFunctionString
   13350             : // Start of memberFunctionString
   13351             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   13352             : 
   13353             :      // the generated cast function
   13354             :      // friend ROSE_DLL_API SgLinkageModifier* isSgLinkageModifier ( SgNode* s );
   13355             : 
   13356             :           typedef SgModifier base_node_type;
   13357             : 
   13358             : 
   13359             : // End of memberFunctionString
   13360             : 
   13361             :      public: 
   13362             :          SgLinkageModifier::linkage_modifier_enum get_modifier() const;
   13363             :          void set_modifier(SgLinkageModifier::linkage_modifier_enum modifier);
   13364             : 
   13365             : 
   13366             :      public: 
   13367             :          virtual ~SgLinkageModifier();
   13368             : 
   13369             : 
   13370             :      public: 
   13371             :          SgLinkageModifier(); 
   13372             : 
   13373             :     protected:
   13374             : // Start of memberFunctionString
   13375             : SgLinkageModifier::linkage_modifier_enum p_modifier;
   13376             :           
   13377             : // End of memberFunctionString
   13378             : 
   13379             :     friend struct Rose::Traits::generated::describe_node_t<SgLinkageModifier>;
   13380             :     friend struct Rose::Traits::generated::describe_field_t<SgLinkageModifier, SgLinkageModifier::linkage_modifier_enum,&SgLinkageModifier::p_modifier>;
   13381             : 
   13382             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13383             : 
   13384             : 
   13385             :    };
   13386             : #endif
   13387             : 
   13388             : // postdeclarations for SgLinkageModifier
   13389             : 
   13390             : /* #line 13391 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13391             : 
   13392             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   13393             : 
   13394             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13395             : 
   13396             : 
   13397             : /* #line 13398 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13398             : 
   13399             : 
   13400             : 
   13401             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13402             : 
   13403             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   13404             : //      This code is automatically generated for each 
   13405             : //      terminal and non-terminal within the defined 
   13406             : //      grammar.  There is a simple way to change the 
   13407             : //      code to fix bugs etc.  See the ROSE README file
   13408             : //      for directions.
   13409             : 
   13410             : // tps: (02/22/2010): Adding DLL export requirements
   13411             : #include "rosedll.h"
   13412             : 
   13413             : // predeclarations for SgBaseClassModifier
   13414             : 
   13415             : /* #line 13416 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13416             : 
   13417             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   13418             : 
   13419             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13420             : 
   13421             : #if 1
   13422             : // Class Definition for SgBaseClassModifier
   13423             : class ROSE_DLL_API SgBaseClassModifier  : public SgModifier
   13424             :    {
   13425             :      public:
   13426             : 
   13427             : 
   13428             : /* #line 13429 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13429             : 
   13430             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   13431             : // Start of memberFunctionString
   13432             : /* #line 2268 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   13433             : 
   13434             :        // base-class-specifier (virtual, access specifiers)
   13435             : 
   13436             :        // DQ (4/6/2004): Added to provide uniform support for access modifiers
   13437             :       /*! \brief Baseclass Modifiers (only one value can be specified)
   13438             : 
   13439             :           Modifier information about (virtual or not).
   13440             : 
   13441             :           \internal Only one value can be specified (at least in C and C++)
   13442             :        */
   13443             :           enum baseclass_modifier_enum
   13444             :              {
   13445             :             // Only one value can be specified (at least in C, what about C++)
   13446             :                e_unknown = 0,  /*!< error value */
   13447             :                e_default = 1,  /*!< default value */
   13448             :                e_virtual = 2,  /*!< virtual value */
   13449             :                e_last_modifier /*!< last value (upper bound on range of values, used in error checking) */
   13450             :              };
   13451             : 
   13452             :        // Copy constructor
   13453             :           SgBaseClassModifier ( const SgBaseClassModifier & X );
   13454             : 
   13455             :        // Assignment Operator
   13456             :           SgBaseClassModifier & operator= ( const SgBaseClassModifier & X );
   13457             : 
   13458             :           void post_construction_initialization() override;
   13459             : 
   13460             :           SgAccessModifier & get_accessModifier();
   13461             :           const SgAccessModifier & get_accessModifier() const;
   13462             : 
   13463             :           bool isUnknown() const;
   13464             :           void setUnknown();
   13465             : 
   13466             :           bool isDefault() const;
   13467             :           void setDefault();
   13468             : 
   13469             :           bool isVirtual() const;
   13470             :           void setVirtual();
   13471             : 
   13472             :           std::string displayString() const;
   13473             :           void display ( std::string label ) const;
   13474             :           friend std::ostream & operator<< ( std::ostream & os, const SgBaseClassModifier & m );
   13475             :       friend bool operator== (const SgBaseClassModifier& lhs, const SgBaseClassModifier& rhs);
   13476             : 
   13477             :        // DQ (2/4/2006): Added mechamism to clear all bits
   13478             :           void reset();
   13479             : 
   13480             : 
   13481             : 
   13482             : // End of memberFunctionString
   13483             : // Start of memberFunctionString
   13484             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   13485             : 
   13486             : // *** COMMON CODE SECTION BEGINS HERE ***
   13487             : 
   13488             :     public:
   13489             : 
   13490             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   13491             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   13492             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   13493             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   13494             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   13495             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   13496             : 
   13497             :       /*! \brief returns a string representing the class name */
   13498             :           virtual std::string class_name() const override;
   13499             : 
   13500             :       /*! \brief returns new style SageIII enum values */
   13501             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   13502             : 
   13503             :       /*! \brief static variant value */
   13504             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   13505             :        // static const VariantT static_variant = V_SgBaseClassModifier;
   13506             :           enum { static_variant = V_SgBaseClassModifier };
   13507             : 
   13508             :        /* the generated cast function */
   13509             :       /*! \brief Casts pointer from base class to derived class */
   13510             :           ROSE_DLL_API friend       SgBaseClassModifier* isSgBaseClassModifier(       SgNode * s );
   13511             : 
   13512             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   13513             :           ROSE_DLL_API friend const SgBaseClassModifier* isSgBaseClassModifier( const SgNode * s );
   13514             : 
   13515             :      // ******************************************
   13516             :      // * Memory Pool / New / Delete
   13517             :      // ******************************************
   13518             : 
   13519             :      public:
   13520             :           /// \private
   13521             :           static const unsigned pool_size; //
   13522             :           /// \private
   13523             :           static std::vector<unsigned char *> pools; //
   13524             :           /// \private
   13525             :           static SgBaseClassModifier * next_node; // 
   13526             : 
   13527             :           /// \private
   13528             :           static unsigned long initializeStorageClassArray(SgBaseClassModifierStorageClass *); //
   13529             : 
   13530             :           /// \private
   13531             :           static void clearMemoryPool(); //
   13532             :           static void deleteMemoryPool(); //
   13533             : 
   13534             :           /// \private
   13535             :           static void extendMemoryPoolForFileIO(); //
   13536             : 
   13537             :           /// \private
   13538             :           static SgBaseClassModifier * getPointerFromGlobalIndex(unsigned long); //
   13539             :           /// \private
   13540             :           static SgBaseClassModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   13541             : 
   13542             :           /// \private
   13543             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   13544             :           /// \private
   13545             :           static void resetValidFreepointers(); //
   13546             :           /// \private
   13547             :           static unsigned long getNumberOfLastValidPointer(); //
   13548             : 
   13549             : 
   13550             : #if defined(INLINE_FUNCTIONS)
   13551             :       /*! \brief returns pointer to newly allocated IR node */
   13552             :           inline void *operator new (size_t size);
   13553             : #else
   13554             :       /*! \brief returns pointer to newly allocated IR node */
   13555             :           void *operator new (size_t size);
   13556             : #endif
   13557             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   13558             :           void operator delete (void* pointer, size_t size);
   13559             : 
   13560             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   13561        1240 :           void operator delete (void* pointer)
   13562             :              {
   13563             :             // This is the generated delete operator...
   13564        1240 :                SgBaseClassModifier::operator delete (pointer,sizeof(SgBaseClassModifier));
   13565             :              }
   13566             : 
   13567             :       /*! \brief Returns the total number of IR nodes of this type */
   13568             :           static size_t numberOfNodes();
   13569             : 
   13570             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   13571             :           static size_t memoryUsage();
   13572             : 
   13573             :       // End of scope which started in IR nodes specific code 
   13574             :       /* */
   13575             : 
   13576             :       /* name Internal Functions
   13577             :           \brief Internal functions ... incomplete-documentation
   13578             : 
   13579             :           These functions have been made public as part of the design, but they are suggested for internal use 
   13580             :           or by particularly knowledgeable users for specialized tools or applications.
   13581             : 
   13582             :           \internal We could not make these private because they are required by user for special purposes. And 
   13583             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   13584             :          
   13585             :        */
   13586             : 
   13587             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   13588             :        // overridden in every class by *generated* implementation
   13589             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   13590             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   13591             :        // MS: 06/28/02 container of names of variables or container indices 
   13592             :        // used used in the traversal to access AST successor nodes
   13593             :        // overridden in every class by *generated* implementation
   13594             :       /*! \brief container of names of variables or container indices used used in the traversal
   13595             :           to access AST successor nodes overridden in every class by *generated* implementation */
   13596             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   13597             : 
   13598             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   13599             :        // than all the vector copies. The implementation for these functions is generated for each class.
   13600             :       /*! \brief return number of children in the traversal successor list */
   13601             :           virtual size_t get_numberOfTraversalSuccessors() override;
   13602             :       /*! \brief index-based access to traversal successors by index number */
   13603             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   13604             :       /*! \brief index-based access to traversal successors by child node */
   13605             :           virtual size_t get_childIndex(SgNode *child) override;
   13606             : 
   13607             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   13608             :        // MS: 08/16/2002 method for generating RTI information
   13609             :       /*! \brief return C++ Runtime-Time-Information */
   13610             :           virtual RTIReturnType roseRTI() override;
   13611             : #endif
   13612             :       /* */
   13613             : 
   13614             : 
   13615             : 
   13616             :       /* name Deprecated Functions
   13617             :           \brief Deprecated functions ... incomplete-documentation
   13618             : 
   13619             :           These functions have been deprecated from use.
   13620             :        */
   13621             :       /* */
   13622             : 
   13623             :       /*! returns a C style string (char*) representing the class name */
   13624             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   13625             : 
   13626             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   13627             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   13628             : #if 0
   13629             :       /*! returns old style Sage II enum values */
   13630             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   13631             :       /*! returns old style Sage II enum values */
   13632             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   13633             : #endif
   13634             :       /* */
   13635             : 
   13636             : 
   13637             : 
   13638             : 
   13639             :      public:
   13640             :       /* name Traversal Support Functions
   13641             :           \brief Traversal support functions ... incomplete-documentation
   13642             : 
   13643             :           These functions have been made public as part of the design, but they are suggested for internal use 
   13644             :           or by particularly knowledgable users for specialized tools or applications.
   13645             :        */
   13646             :       /* */
   13647             : 
   13648             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   13649             :        // (inferior to ROSE traversal mechanism, experimental).
   13650             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   13651             :        */
   13652             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   13653             : 
   13654             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   13655             :       /*! \brief support for the classic visitor pattern done in GoF */
   13656             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   13657             : 
   13658             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   13659             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   13660             :        */
   13661             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   13662             : 
   13663             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   13664             :        */
   13665             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   13666             : 
   13667             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   13668             :        // This traversal helps support internal tools that call static member functions.
   13669             :        // note: this function operates on the memory pools.
   13670             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   13671             :        */
   13672             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   13673             :       /* */
   13674             : 
   13675             : 
   13676             :      public:
   13677             :       /* name Memory Allocation Functions
   13678             :           \brief Memory allocations functions ... incomplete-documentation
   13679             : 
   13680             :           These functions have been made public as part of the design, but they are suggested for internal use 
   13681             :           or by particularly knowledgable users for specialized tools or applications.
   13682             :        */
   13683             :       /* */
   13684             : 
   13685             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   13686             : 
   13687             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   13688             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   13689             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   13690             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   13691             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   13692             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   13693             :           being used with the AST File I/O mechanism.
   13694             :        */
   13695             :           virtual bool isInMemoryPool() override;
   13696             : 
   13697             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   13698             : 
   13699             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   13700             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   13701             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   13702             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   13703             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   13704             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   13705             :           being used with the AST File I/O mechanism.
   13706             :        */
   13707             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   13708             : 
   13709             :       // DQ (4/30/2006): Modified to be a const function.
   13710             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   13711             : 
   13712             :           This functions is part of general support for many possible tools to operate 
   13713             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   13714             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   13715             :           less than the set of pointers used by the AST file I/O. This is part of
   13716             :           work implemented by Andreas, and support tools such as the AST graph generation.
   13717             : 
   13718             :           \warning This function can return unexpected data members and thus the 
   13719             :                    order and the number of elements is unpredicable and subject 
   13720             :                    to change.
   13721             : 
   13722             :           \returns STL vector of pairs of SgNode* and strings
   13723             :        */
   13724             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   13725             : 
   13726             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   13727             : 
   13728             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   13729             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   13730             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   13731             : 
   13732             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   13733             :                    and subject to change.
   13734             :        */
   13735             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   13736             : 
   13737             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   13738             : 
   13739             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   13740             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   13741             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   13742             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   13743             : 
   13744             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   13745             : 
   13746             :           \returns long
   13747             :        */
   13748             :           virtual long getChildIndex( SgNode* childNode ) const override;
   13749             : 
   13750             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   13751             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   13752             :       /* \brief Constructor for use by AST File I/O Mechanism
   13753             : 
   13754             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   13755             :           which obtained via fast binary file I/O from disk.
   13756             :        */
   13757             :        // SgBaseClassModifier( SgBaseClassModifierStorageClass& source );
   13758             : 
   13759             : 
   13760             : 
   13761             : 
   13762             : 
   13763             :  // JH (10/24/2005): methods added to support the ast file IO
   13764             :     private:
   13765             : 
   13766             :       /* name AST Memory Allocation Support Functions
   13767             :           \brief Memory allocations support....
   13768             : 
   13769             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   13770             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   13771             :           and support the AST File I/O Mechanism.
   13772             :        */
   13773             :       /* */
   13774             : 
   13775             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   13776             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   13777             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   13778             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   13779             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   13780             :           a correspinding one in the AST_FILE_IO class!
   13781             :        */
   13782             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   13783             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   13784             :       /* \brief Typedef used for low level memory access.
   13785             :        */
   13786             :        // typedef unsigned char* TestType;
   13787             : 
   13788             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   13789             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   13790             :       /* \brief Typedef used to hold memory addresses as values.
   13791             :        */
   13792             :        // typedef unsigned long  AddressType;
   13793             : 
   13794             : 
   13795             : 
   13796             :        // necessary, to have direct access to the p_freepointer and the private methods !
   13797             :       /*! \brief friend class declaration to support AST File I/O */
   13798             :           friend class AST_FILE_IO;
   13799             : 
   13800             :       /*! \brief friend class declaration to support AST File I/O */
   13801             :           friend class SgBaseClassModifierStorageClass;
   13802             : 
   13803             :       /*! \brief friend class declaration to support AST File I/O */
   13804             :           friend class AstSpecificDataManagingClass;
   13805             : 
   13806             :       /*! \brief friend class declaration to support AST File I/O */
   13807             :           friend class AstSpecificDataManagingClassStorageClass;
   13808             :     public:
   13809             :       /*! \brief IR node constructor to support AST File I/O */
   13810             :           SgBaseClassModifier( const SgBaseClassModifierStorageClass& source );
   13811             : 
   13812             :  // private: // JJW hack
   13813             :        /*
   13814             :           name AST Memory Allocation Support Variables
   13815             :           Memory allocations support variables 
   13816             : 
   13817             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   13818             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   13819             :           and support the AST File I/O Mechanism.
   13820             :        */
   13821             :       /* */
   13822             : 
   13823             :     public:
   13824             : 
   13825             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   13826             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   13827             :       // virtual SgNode* addRegExpAttribute();
   13828             :       /*! \brief Support for AST matching using regular expression.
   13829             : 
   13830             :           This support is incomplete and the subject of current research to define 
   13831             :           RegEx trees to support inexact matching.
   13832             :        */
   13833             :           SgBaseClassModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   13834             : 
   13835             : // *** COMMON CODE SECTION ENDS HERE ***
   13836             : 
   13837             : 
   13838             : // End of memberFunctionString
   13839             : // Start of memberFunctionString
   13840             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   13841             : 
   13842             :      // the generated cast function
   13843             :      // friend ROSE_DLL_API SgBaseClassModifier* isSgBaseClassModifier ( SgNode* s );
   13844             : 
   13845             :           typedef SgModifier base_node_type;
   13846             : 
   13847             : 
   13848             : // End of memberFunctionString
   13849             : 
   13850             :      public: 
   13851             :          SgBaseClassModifier::baseclass_modifier_enum get_modifier() const;
   13852             :          void set_modifier(SgBaseClassModifier::baseclass_modifier_enum modifier);
   13853             : 
   13854             : 
   13855             : 
   13856             :      public: 
   13857             :          virtual ~SgBaseClassModifier();
   13858             : 
   13859             : 
   13860             :      public: 
   13861             :          SgBaseClassModifier(); 
   13862             : 
   13863             :     protected:
   13864             : // Start of memberFunctionString
   13865             : SgBaseClassModifier::baseclass_modifier_enum p_modifier;
   13866             :           
   13867             : // End of memberFunctionString
   13868             : // Start of memberFunctionString
   13869             : SgAccessModifier p_accessModifier;
   13870             :           
   13871             : // End of memberFunctionString
   13872             : 
   13873             :     friend struct Rose::Traits::generated::describe_node_t<SgBaseClassModifier>;
   13874             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClassModifier, SgBaseClassModifier::baseclass_modifier_enum,&SgBaseClassModifier::p_modifier>;
   13875             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClassModifier, SgAccessModifier,&SgBaseClassModifier::p_accessModifier>;
   13876             : 
   13877             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13878             : 
   13879             : 
   13880             :    };
   13881             : #endif
   13882             : 
   13883             : // postdeclarations for SgBaseClassModifier
   13884             : 
   13885             : /* #line 13886 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13886             : 
   13887             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   13888             : 
   13889             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13890             : 
   13891             : 
   13892             : /* #line 13893 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13893             : 
   13894             : 
   13895             : 
   13896             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13897             : 
   13898             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   13899             : //      This code is automatically generated for each 
   13900             : //      terminal and non-terminal within the defined 
   13901             : //      grammar.  There is a simple way to change the 
   13902             : //      code to fix bugs etc.  See the ROSE README file
   13903             : //      for directions.
   13904             : 
   13905             : // tps: (02/22/2010): Adding DLL export requirements
   13906             : #include "rosedll.h"
   13907             : 
   13908             : // predeclarations for SgStructureModifier
   13909             : 
   13910             : /* #line 13911 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13911             : 
   13912             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   13913             : 
   13914             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   13915             : 
   13916             : #if 1
   13917             : // Class Definition for SgStructureModifier
   13918             : class ROSE_DLL_API SgStructureModifier  : public SgModifier
   13919             :    {
   13920             :      public:
   13921             : 
   13922             : 
   13923             : /* #line 13924 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   13924             : 
   13925             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   13926             : // Start of memberFunctionString
   13927             : /* #line 1410 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   13928             : 
   13929             : 
   13930             :        // Jovial structure specifiers (unspecified, parallel, tight)
   13931             : 
   13932             :       /*! \brief Jovial Structure Modifier/Specifier (tight implies serial)
   13933             : 
   13934             :           Jovial Structure Specifier (parallel, tight).
   13935             : 
   13936             :           \internal Only one value can be specified
   13937             :        */
   13938             :           enum jovial_structure_modifier_enum
   13939             :              {
   13940             :                e_unknown,                    /*!< error value */
   13941             :                e_default,                    /*!< jovial table structure is unspecified, indicates serial structure */
   13942             :                e_table_structure_parallel,   /*!< jovial table has parallel structure */
   13943             :                e_table_structure_tight,      /*!< jovial table has serial structure that is tightly packed */
   13944             :                e_last_modifier               /*!< last value (upper bound on range of values, used in error checking) */
   13945             :              };
   13946             : 
   13947             :        // Copy constructor
   13948             :           SgStructureModifier ( const SgStructureModifier & X );
   13949             : 
   13950             :        // Assignment Operator
   13951             :           SgStructureModifier & operator= ( const SgStructureModifier & X );
   13952             : 
   13953             :           void post_construction_initialization() override;
   13954             : 
   13955             :           bool isUnknown() const;
   13956             :           void setUnknown();
   13957             : 
   13958             :           bool isDefault() const;
   13959             :           void setDefault();
   13960             : 
   13961             :           bool isParallel() const;
   13962             :           void setParallel();
   13963             : 
   13964             :           bool isTight() const;
   13965             :           void setTight();
   13966             : 
   13967             :           std::string displayString() const;
   13968             :           void display ( std::string label ) const;
   13969             :           friend std::ostream & operator<< ( std::ostream & os, const SgStructureModifier & m );
   13970             :           friend bool operator== (const SgStructureModifier& lhs, const SgStructureModifier& rhs);
   13971             : 
   13972             :        // Clear all bits
   13973             :           void reset();
   13974             : 
   13975             : 
   13976             : 
   13977             : // End of memberFunctionString
   13978             : // Start of memberFunctionString
   13979             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   13980             : 
   13981             : // *** COMMON CODE SECTION BEGINS HERE ***
   13982             : 
   13983             :     public:
   13984             : 
   13985             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   13986             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   13987             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   13988             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   13989             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   13990             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   13991             : 
   13992             :       /*! \brief returns a string representing the class name */
   13993             :           virtual std::string class_name() const override;
   13994             : 
   13995             :       /*! \brief returns new style SageIII enum values */
   13996             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   13997             : 
   13998             :       /*! \brief static variant value */
   13999             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   14000             :        // static const VariantT static_variant = V_SgStructureModifier;
   14001             :           enum { static_variant = V_SgStructureModifier };
   14002             : 
   14003             :        /* the generated cast function */
   14004             :       /*! \brief Casts pointer from base class to derived class */
   14005             :           ROSE_DLL_API friend       SgStructureModifier* isSgStructureModifier(       SgNode * s );
   14006             : 
   14007             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   14008             :           ROSE_DLL_API friend const SgStructureModifier* isSgStructureModifier( const SgNode * s );
   14009             : 
   14010             :      // ******************************************
   14011             :      // * Memory Pool / New / Delete
   14012             :      // ******************************************
   14013             : 
   14014             :      public:
   14015             :           /// \private
   14016             :           static const unsigned pool_size; //
   14017             :           /// \private
   14018             :           static std::vector<unsigned char *> pools; //
   14019             :           /// \private
   14020             :           static SgStructureModifier * next_node; // 
   14021             : 
   14022             :           /// \private
   14023             :           static unsigned long initializeStorageClassArray(SgStructureModifierStorageClass *); //
   14024             : 
   14025             :           /// \private
   14026             :           static void clearMemoryPool(); //
   14027             :           static void deleteMemoryPool(); //
   14028             : 
   14029             :           /// \private
   14030             :           static void extendMemoryPoolForFileIO(); //
   14031             : 
   14032             :           /// \private
   14033             :           static SgStructureModifier * getPointerFromGlobalIndex(unsigned long); //
   14034             :           /// \private
   14035             :           static SgStructureModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   14036             : 
   14037             :           /// \private
   14038             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   14039             :           /// \private
   14040             :           static void resetValidFreepointers(); //
   14041             :           /// \private
   14042             :           static unsigned long getNumberOfLastValidPointer(); //
   14043             : 
   14044             : 
   14045             : #if defined(INLINE_FUNCTIONS)
   14046             :       /*! \brief returns pointer to newly allocated IR node */
   14047             :           inline void *operator new (size_t size);
   14048             : #else
   14049             :       /*! \brief returns pointer to newly allocated IR node */
   14050             :           void *operator new (size_t size);
   14051             : #endif
   14052             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   14053             :           void operator delete (void* pointer, size_t size);
   14054             : 
   14055             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   14056           0 :           void operator delete (void* pointer)
   14057             :              {
   14058             :             // This is the generated delete operator...
   14059           0 :                SgStructureModifier::operator delete (pointer,sizeof(SgStructureModifier));
   14060             :              }
   14061             : 
   14062             :       /*! \brief Returns the total number of IR nodes of this type */
   14063             :           static size_t numberOfNodes();
   14064             : 
   14065             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   14066             :           static size_t memoryUsage();
   14067             : 
   14068             :       // End of scope which started in IR nodes specific code 
   14069             :       /* */
   14070             : 
   14071             :       /* name Internal Functions
   14072             :           \brief Internal functions ... incomplete-documentation
   14073             : 
   14074             :           These functions have been made public as part of the design, but they are suggested for internal use 
   14075             :           or by particularly knowledgeable users for specialized tools or applications.
   14076             : 
   14077             :           \internal We could not make these private because they are required by user for special purposes. And 
   14078             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   14079             :          
   14080             :        */
   14081             : 
   14082             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   14083             :        // overridden in every class by *generated* implementation
   14084             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   14085             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   14086             :        // MS: 06/28/02 container of names of variables or container indices 
   14087             :        // used used in the traversal to access AST successor nodes
   14088             :        // overridden in every class by *generated* implementation
   14089             :       /*! \brief container of names of variables or container indices used used in the traversal
   14090             :           to access AST successor nodes overridden in every class by *generated* implementation */
   14091             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   14092             : 
   14093             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   14094             :        // than all the vector copies. The implementation for these functions is generated for each class.
   14095             :       /*! \brief return number of children in the traversal successor list */
   14096             :           virtual size_t get_numberOfTraversalSuccessors() override;
   14097             :       /*! \brief index-based access to traversal successors by index number */
   14098             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   14099             :       /*! \brief index-based access to traversal successors by child node */
   14100             :           virtual size_t get_childIndex(SgNode *child) override;
   14101             : 
   14102             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   14103             :        // MS: 08/16/2002 method for generating RTI information
   14104             :       /*! \brief return C++ Runtime-Time-Information */
   14105             :           virtual RTIReturnType roseRTI() override;
   14106             : #endif
   14107             :       /* */
   14108             : 
   14109             : 
   14110             : 
   14111             :       /* name Deprecated Functions
   14112             :           \brief Deprecated functions ... incomplete-documentation
   14113             : 
   14114             :           These functions have been deprecated from use.
   14115             :        */
   14116             :       /* */
   14117             : 
   14118             :       /*! returns a C style string (char*) representing the class name */
   14119             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   14120             : 
   14121             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   14122             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   14123             : #if 0
   14124             :       /*! returns old style Sage II enum values */
   14125             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   14126             :       /*! returns old style Sage II enum values */
   14127             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   14128             : #endif
   14129             :       /* */
   14130             : 
   14131             : 
   14132             : 
   14133             : 
   14134             :      public:
   14135             :       /* name Traversal Support Functions
   14136             :           \brief Traversal support functions ... incomplete-documentation
   14137             : 
   14138             :           These functions have been made public as part of the design, but they are suggested for internal use 
   14139             :           or by particularly knowledgable users for specialized tools or applications.
   14140             :        */
   14141             :       /* */
   14142             : 
   14143             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   14144             :        // (inferior to ROSE traversal mechanism, experimental).
   14145             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   14146             :        */
   14147             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   14148             : 
   14149             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   14150             :       /*! \brief support for the classic visitor pattern done in GoF */
   14151             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   14152             : 
   14153             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   14154             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   14155             :        */
   14156             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   14157             : 
   14158             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   14159             :        */
   14160             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   14161             : 
   14162             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   14163             :        // This traversal helps support internal tools that call static member functions.
   14164             :        // note: this function operates on the memory pools.
   14165             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   14166             :        */
   14167             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   14168             :       /* */
   14169             : 
   14170             : 
   14171             :      public:
   14172             :       /* name Memory Allocation Functions
   14173             :           \brief Memory allocations functions ... incomplete-documentation
   14174             : 
   14175             :           These functions have been made public as part of the design, but they are suggested for internal use 
   14176             :           or by particularly knowledgable users for specialized tools or applications.
   14177             :        */
   14178             :       /* */
   14179             : 
   14180             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   14181             : 
   14182             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   14183             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   14184             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   14185             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   14186             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   14187             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   14188             :           being used with the AST File I/O mechanism.
   14189             :        */
   14190             :           virtual bool isInMemoryPool() override;
   14191             : 
   14192             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   14193             : 
   14194             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   14195             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   14196             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   14197             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   14198             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   14199             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   14200             :           being used with the AST File I/O mechanism.
   14201             :        */
   14202             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   14203             : 
   14204             :       // DQ (4/30/2006): Modified to be a const function.
   14205             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   14206             : 
   14207             :           This functions is part of general support for many possible tools to operate 
   14208             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   14209             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   14210             :           less than the set of pointers used by the AST file I/O. This is part of
   14211             :           work implemented by Andreas, and support tools such as the AST graph generation.
   14212             : 
   14213             :           \warning This function can return unexpected data members and thus the 
   14214             :                    order and the number of elements is unpredicable and subject 
   14215             :                    to change.
   14216             : 
   14217             :           \returns STL vector of pairs of SgNode* and strings
   14218             :        */
   14219             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   14220             : 
   14221             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   14222             : 
   14223             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   14224             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   14225             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   14226             : 
   14227             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   14228             :                    and subject to change.
   14229             :        */
   14230             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   14231             : 
   14232             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   14233             : 
   14234             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   14235             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   14236             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   14237             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   14238             : 
   14239             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   14240             : 
   14241             :           \returns long
   14242             :        */
   14243             :           virtual long getChildIndex( SgNode* childNode ) const override;
   14244             : 
   14245             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   14246             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   14247             :       /* \brief Constructor for use by AST File I/O Mechanism
   14248             : 
   14249             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   14250             :           which obtained via fast binary file I/O from disk.
   14251             :        */
   14252             :        // SgStructureModifier( SgStructureModifierStorageClass& source );
   14253             : 
   14254             : 
   14255             : 
   14256             : 
   14257             : 
   14258             :  // JH (10/24/2005): methods added to support the ast file IO
   14259             :     private:
   14260             : 
   14261             :       /* name AST Memory Allocation Support Functions
   14262             :           \brief Memory allocations support....
   14263             : 
   14264             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   14265             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   14266             :           and support the AST File I/O Mechanism.
   14267             :        */
   14268             :       /* */
   14269             : 
   14270             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   14271             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   14272             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   14273             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   14274             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   14275             :           a correspinding one in the AST_FILE_IO class!
   14276             :        */
   14277             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   14278             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   14279             :       /* \brief Typedef used for low level memory access.
   14280             :        */
   14281             :        // typedef unsigned char* TestType;
   14282             : 
   14283             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   14284             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   14285             :       /* \brief Typedef used to hold memory addresses as values.
   14286             :        */
   14287             :        // typedef unsigned long  AddressType;
   14288             : 
   14289             : 
   14290             : 
   14291             :        // necessary, to have direct access to the p_freepointer and the private methods !
   14292             :       /*! \brief friend class declaration to support AST File I/O */
   14293             :           friend class AST_FILE_IO;
   14294             : 
   14295             :       /*! \brief friend class declaration to support AST File I/O */
   14296             :           friend class SgStructureModifierStorageClass;
   14297             : 
   14298             :       /*! \brief friend class declaration to support AST File I/O */
   14299             :           friend class AstSpecificDataManagingClass;
   14300             : 
   14301             :       /*! \brief friend class declaration to support AST File I/O */
   14302             :           friend class AstSpecificDataManagingClassStorageClass;
   14303             :     public:
   14304             :       /*! \brief IR node constructor to support AST File I/O */
   14305             :           SgStructureModifier( const SgStructureModifierStorageClass& source );
   14306             : 
   14307             :  // private: // JJW hack
   14308             :        /*
   14309             :           name AST Memory Allocation Support Variables
   14310             :           Memory allocations support variables 
   14311             : 
   14312             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   14313             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   14314             :           and support the AST File I/O Mechanism.
   14315             :        */
   14316             :       /* */
   14317             : 
   14318             :     public:
   14319             : 
   14320             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   14321             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   14322             :       // virtual SgNode* addRegExpAttribute();
   14323             :       /*! \brief Support for AST matching using regular expression.
   14324             : 
   14325             :           This support is incomplete and the subject of current research to define 
   14326             :           RegEx trees to support inexact matching.
   14327             :        */
   14328             :           SgStructureModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   14329             : 
   14330             : // *** COMMON CODE SECTION ENDS HERE ***
   14331             : 
   14332             : 
   14333             : // End of memberFunctionString
   14334             : // Start of memberFunctionString
   14335             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   14336             : 
   14337             :      // the generated cast function
   14338             :      // friend ROSE_DLL_API SgStructureModifier* isSgStructureModifier ( SgNode* s );
   14339             : 
   14340             :           typedef SgModifier base_node_type;
   14341             : 
   14342             : 
   14343             : // End of memberFunctionString
   14344             : 
   14345             :      public: 
   14346             :          SgStructureModifier::jovial_structure_modifier_enum get_modifier() const;
   14347             :          void set_modifier(SgStructureModifier::jovial_structure_modifier_enum modifier);
   14348             : 
   14349             :      public: 
   14350             :          int get_bits_per_entry() const;
   14351             :          void set_bits_per_entry(int bits_per_entry);
   14352             : 
   14353             : 
   14354             :      public: 
   14355             :          virtual ~SgStructureModifier();
   14356             : 
   14357             : 
   14358             :      public: 
   14359             :          SgStructureModifier(); 
   14360             : 
   14361             :     protected:
   14362             : // Start of memberFunctionString
   14363             : SgStructureModifier::jovial_structure_modifier_enum p_modifier;
   14364             :           
   14365             : // End of memberFunctionString
   14366             : // Start of memberFunctionString
   14367             : int p_bits_per_entry;
   14368             :           
   14369             : // End of memberFunctionString
   14370             : 
   14371             :     friend struct Rose::Traits::generated::describe_node_t<SgStructureModifier>;
   14372             :     friend struct Rose::Traits::generated::describe_field_t<SgStructureModifier, SgStructureModifier::jovial_structure_modifier_enum,&SgStructureModifier::p_modifier>;
   14373             :     friend struct Rose::Traits::generated::describe_field_t<SgStructureModifier, int,&SgStructureModifier::p_bits_per_entry>;
   14374             : 
   14375             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   14376             : 
   14377             : 
   14378             :    };
   14379             : #endif
   14380             : 
   14381             : // postdeclarations for SgStructureModifier
   14382             : 
   14383             : /* #line 14384 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   14384             : 
   14385             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   14386             : 
   14387             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   14388             : 
   14389             : 
   14390             : /* #line 14391 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   14391             : 
   14392             : 
   14393             : 
   14394             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   14395             : 
   14396             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   14397             : //      This code is automatically generated for each 
   14398             : //      terminal and non-terminal within the defined 
   14399             : //      grammar.  There is a simple way to change the 
   14400             : //      code to fix bugs etc.  See the ROSE README file
   14401             : //      for directions.
   14402             : 
   14403             : // tps: (02/22/2010): Adding DLL export requirements
   14404             : #include "rosedll.h"
   14405             : 
   14406             : // predeclarations for SgTypeModifier
   14407             : 
   14408             : /* #line 14409 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   14409             : 
   14410             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   14411             : 
   14412             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   14413             : 
   14414             : #if 1
   14415             : // Class Definition for SgTypeModifier
   14416             : class ROSE_DLL_API SgTypeModifier  : public SgModifier
   14417             :    {
   14418             :      public:
   14419             : 
   14420             : 
   14421             : /* #line 14422 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   14422             : 
   14423             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   14424             : // Start of memberFunctionString
   14425             : /* #line 1774 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   14426             : 
   14427             : 
   14428             :        // type specifier (elaborated-type-specifier, cv-qualifier, restrict)
   14429             : 
   14430             :        // DQ (9/7/2007): Added Fortran specific values to handle Fortran attribute specifiers.
   14431             :        // DQ (4/6/2004): Added to provide uniform support for type modifiers
   14432             :       /*! \brief Type Modifiers (multiple values can be specified at one time)
   14433             : 
   14434             :           Type modifier information about used for C/C++ and Fortran 77/90/2003.
   14435             :           For Fortran values, each rerpesents a Fortran attribute specifier from section 5.1
   14436             :           of the Fortran 2003 standard.
   14437             : 
   14438             :           \internal These are used in a SgBitVector so that multiple values may be specified.
   14439             :        */
   14440             :           enum type_modifier_enum
   14441             :              {
   14442             :                e_unknown        = 0, /*!< Unknown value (error) */
   14443             :                e_default        = 1, /*!< Unknown value (default) */
   14444             :                e_restrict       = 2, /*!< Restrict qualifier (for C/C++) */
   14445             : 
   14446             :             // Fortran specific modifiers (in Fortran these are called attribute specifiers)
   14447             :             // Note that public and private access attributes are mapped to the C/C++ access modifiers in SgDeclarationModifier
   14448             :             // e_public_access  = 3, /*!< public qualifier (for Fortran 90) */
   14449             :             // e_private_access = 4, /*!< private qualifier (for Fortran 90) */
   14450             :                e_allocatable    = 3, /*!< allocatable attribute specifier (for Fortran 90) */
   14451             :                e_asynchronous   = 4, /*!< asynchronous attribute specifier (for Fortran 2003) */
   14452             :                e_bind           = 5, /*!< bind attribute specifier (for Fortran 2003, this is closely related to the SgLinkageModifier) */
   14453             :                e_data           = 6, /*!< data attribute specifier (for Fortran 77) */
   14454             :                e_dimension      = 7, /*!< dimension attribute specifier (for Fortran 77) */
   14455             :             // This should map to the C/C++ extern modifier in SgStorageModifier
   14456             :             // e_external       = x, /*!< external attribute specifier (for Fortran 77, this is less related to the SgLinkageModifier than the SgStorageModifier) */
   14457             :                e_intent_in      = 8, /*!< intent(in) attribute specifier (for Fortran 90) */
   14458             :                e_intent_out     = 9, /*!< intent(out) attribute specifier (for Fortran 90) */
   14459             :                e_intent_inout   = 10,/*!< intent(inout) attribute specifier (for Fortran 90) */
   14460             :                e_intrinsic      = 11,/*!< intrinsic attribute specifier (for Fortran 90) */
   14461             :                e_optional       = 12,/*!< optional attribute specifier (for Fortran 90) */
   14462             : 
   14463             :             // DQ (8/28/2010): Added support for Fortran 90 type attributes (bind already present, and access-spec handled by C/C++ access modifiers in SgDeclarationModifier
   14464             :                e_extends       = 13,/*!< optional attribute specifier (for Fortran 90) */
   14465             :                e_abstract      = 14,/*!< optional attribute specifier (for Fortran 90) */
   14466             : 
   14467             :             // This should map to const in the SgConstVolatileModifier
   14468             :             // e_parameter      = xx,/*!< parameter attribute specifier (for Fortran 77) */
   14469             : 
   14470             :             // This should be mapped to the SgPointerType in C/C++
   14471             :             // e_pointer        = xx,/*!< pointer attribute specifier (for Fortran 90) */
   14472             :             // Note that protected access attribute is mapped to the C/C++ protected access modifiers in SgDeclarationModifier
   14473             :             // e_protected      = xx,/*!< protected attribute specifier (for Fortran 2003) */
   14474             :                e_save           = 15,/*!< save attribute specifier (for Fortran 77) */
   14475             :                e_target         = 16,/*!< target attribute specifier (for Fortran 90) */
   14476             :                e_value          = 17,/*!< value attribute specifier (for Fortran 2003) */
   14477             :             // This should map to volatile in the SgConstVolatileModifier
   14478             :             // e_volatile       = xx,/*!< volatile attribute specifier (for Fortran 2003) */
   14479             : 
   14480             :             // DQ (12/4/2007): Added support for GNU specific attributes
   14481             :                e_gnu_attribute__unused__             = 18,/*!< GNU specific attribute for (GNU extension) */
   14482             :                e_gnu_attribute__packed__             = 19,/*!< GNU specific attribute for (GNU extension) */
   14483             :                e_gnu_attribute__deprecated__         = 20,/*!< GNU specific attribute for (GNU extension) */
   14484             :                e_gnu_attribute__transparent_union__  = 21,/*!< GNU specific attribute for (GNU extension) */
   14485             :                e_gnu_attribute__noreturn__           = 22,/*!< GNU specific attribute for function type (GNU extension) */
   14486             :                e_gnu_attribute__const__              = 23,/*!< GNU specific attribute for function type (GNU extension) */
   14487             :                e_gnu_attribute__cdecl__              = 24,/*!< GNU specific attribute for function type (GNU extension) */
   14488             :                e_gnu_attribute__stdcall__            = 25,/*!< GNU specific attribute for function type (GNU extension) */
   14489             : 
   14490             :             // DQ (1/3/2009): New GNU attributes not previously supported in ROSE
   14491             :                e_gnu_attribute__warn_unused_result__ = 26,/*!< GNU specific attribute for function type (GNU extension) */
   14492             :                e_gnu_attribute__nonnull__            = 27,/*!< GNU specific attribute for function type (GNU extension) */
   14493             :                e_gnu_attribute__sentinel__           = 28,/*!< GNU specific attribute for function type (GNU extension) */
   14494             : 
   14495             :             // TV (02/27/2012): Address space modifer
   14496             :                e_address_space__                     = 29,/*!< address space modifier, get_address_space_value() give the associated param */
   14497             : 
   14498             :             // TV (02/27/2012): OpenCL related Modifier
   14499             :                e_ocl_global__                        = 30,/*!< OpenCL specific address space modifier */
   14500             :                e_ocl_local__                         = 31,/*!< OpenCL specific address space modifier */
   14501             :                e_ocl_constant__                      = 32,/*!< OpenCL specific address space modifier */
   14502             : 
   14503             :             // TV (03/03/2012): Address space modifer
   14504             :                e_vector_type__                       = 33,/*!< GCC vector type attribute and other vector extentions */
   14505             : 
   14506             :             // DQ (1/24/2016): New GNU attributes not previously supported in ROSE (added to support custom device specification on types).
   14507             :             // This is part of an experiment to support a new feature in CUDA that would allow device specification in the function parameter type.
   14508             :             // I am not certain that it should not already exist, but we don't have it implemented in ROSE.  EDG appears to drop the "__device__"
   14509             :             // keyword, so I am trying to capture it as an attribute.
   14510             :                e_gnu_attribute__device__             = 34,/*!< Using GNU support for general attributes in the contect of parameter type (ROSE extension using GNU attribute extension) */
   14511             : 
   14512             :             // Rasmussen (3/1/2020): numeric type specifiers for Jovial
   14513             :                e_round                               = 35,/*!< Jovial rounding specifier */
   14514             :                e_truncate                            = 36,/*!< Jovial truncation specifier */
   14515             :                e_truncate_towards_zero               = 37,/*!< Jovial truncation towards zero specifier */
   14516             : 
   14517             :             // PP (7/7/21): add support for Ada aliased declarations
   14518             :                e_aliased                             = 38,/*!< Ada aliased variable/parameter/field declaration */
   14519             : 
   14520             :             // Last attribute enum (used for internal bounds checking)
   14521             :                e_last_modifier /*!< last value (upper bound on range of values, used in error checking) */
   14522             :              };
   14523             : 
   14524             :        // DQ (12/4/2007): Added support for gnu attributes representing machine modes (for types)
   14525             :       /*! \brief GNU Extension Machine Mode type modifiers (only a single value can be specified at one time)
   14526             : 
   14527             :           Machine modes type modifier (required for rather exotic levels of source-to-source transformation in Linux.
   14528             :           See http://gcc.gnu.org/onlinedocs/gccint/Machine-Modes.html#Machine-Modes for lots of details.
   14529             : 
   14530             :           \internal These are used in an enum type (and I expect that this makes the storage over head small since the range is explicit).
   14531             :        */
   14532             :           enum gnu_extension_machine_mode_enum
   14533             :              {
   14534             :                e_gnu_extension_machine_mode_unknown     = 0, /*!< Unknown value (error) */
   14535             :                e_gnu_extension_machine_mode_unspecified = 1, /*!< Unknown value (default) */
   14536             :                e_gnu_extension_machine_mode_BImode      = 2, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14537             :                e_gnu_extension_machine_mode_QImode      = 3, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14538             :                e_gnu_extension_machine_mode_HImode      = 4, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14539             :                e_gnu_extension_machine_mode_PSImode     = 5, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14540             :                e_gnu_extension_machine_mode_SImode      = 6, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14541             :                e_gnu_extension_machine_mode_PDImode     = 7, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14542             :                e_gnu_extension_machine_mode_DImode      = 8, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14543             :                e_gnu_extension_machine_mode_TImode      = 9, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14544             :                e_gnu_extension_machine_mode_OImode      = 10, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14545             :                e_gnu_extension_machine_mode_QFmode      = 11, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14546             :                e_gnu_extension_machine_mode_HFmode      = 12, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14547             :                e_gnu_extension_machine_mode_TQFmode     = 13, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14548             :                e_gnu_extension_machine_mode_SFmode      = 14, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14549             :                e_gnu_extension_machine_mode_DFmode      = 15, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14550             :                e_gnu_extension_machine_mode_XFmode      = 16, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14551             :                e_gnu_extension_machine_mode_SDmode      = 17, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14552             :                e_gnu_extension_machine_mode_DDmode      = 18, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14553             :                e_gnu_extension_machine_mode_TDmode      = 19, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14554             :                e_gnu_extension_machine_mode_TFmode      = 20, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14555             :                e_gnu_extension_machine_mode_QQmode      = 21, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14556             :                e_gnu_extension_machine_mode_HQmode      = 22, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14557             :                e_gnu_extension_machine_mode_SQmode      = 23, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14558             :                e_gnu_extension_machine_mode_DQmode      = 24, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14559             :                e_gnu_extension_machine_mode_TQmode      = 25, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14560             :                e_gnu_extension_machine_mode_UQQmode     = 26, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14561             :                e_gnu_extension_machine_mode_UHQmode     = 27, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14562             :                e_gnu_extension_machine_mode_USQmode     = 28, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14563             :                e_gnu_extension_machine_mode_UDQmode     = 29, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14564             :                e_gnu_extension_machine_mode_UTQmode     = 30, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14565             :                e_gnu_extension_machine_mode_HAmode      = 31, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14566             :                e_gnu_extension_machine_mode_SAmode      = 32, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14567             :                e_gnu_extension_machine_mode_DAmode      = 33, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14568             :                e_gnu_extension_machine_mode_TAmode      = 34, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14569             :                e_gnu_extension_machine_mode_UHAmode     = 35, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14570             :                e_gnu_extension_machine_mode_USAmode     = 36, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14571             :                e_gnu_extension_machine_mode_UDAmode     = 37, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14572             :                e_gnu_extension_machine_mode_UTAmode     = 38, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14573             :                e_gnu_extension_machine_mode_CCmode      = 39, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14574             :                e_gnu_extension_machine_mode_BLKmode     = 40, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14575             :                e_gnu_extension_machine_mode_VOIDmode    = 41, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14576             :                e_gnu_extension_machine_mode_QCmode      = 42, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14577             :                e_gnu_extension_machine_mode_HCmode      = 43, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14578             :                e_gnu_extension_machine_mode_SCmode      = 44, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14579             :                e_gnu_extension_machine_mode_DCmode      = 45, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14580             :                e_gnu_extension_machine_mode_XCmode      = 46, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14581             :                e_gnu_extension_machine_mode_TCmode      = 47, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14582             :                e_gnu_extension_machine_mode_CQImode     = 48, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14583             :                e_gnu_extension_machine_mode_CHImode     = 49, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14584             :                e_gnu_extension_machine_mode_CSImode     = 50, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14585             :                e_gnu_extension_machine_mode_CDImode     = 51, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14586             :                e_gnu_extension_machine_mode_CTImode     = 52, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14587             :                e_gnu_extension_machine_mode_COImode     = 53, /*!< GNU specific attribute for fmachine mode (GNU extension) */
   14588             :                e_last_machine_mode /*!< last machine mode value (upper bound on range of values, used in error checking) */
   14589             :              };
   14590             : 
   14591             :        // Copy constructor
   14592             :           SgTypeModifier ( const SgTypeModifier & X );
   14593             : 
   14594             :        // Assignment Operator
   14595             :           SgTypeModifier & operator= ( const SgTypeModifier & X );
   14596             : 
   14597             :        // Convert a single type_modifier_enum to an initializer
   14598             :        // SgTypeModifier ( const SgTypeModifier::type_modifier_enum & m );
   14599             : 
   14600             :           void post_construction_initialization() override;
   14601             : 
   14602             :           SgUPC_AccessModifier     & get_upcModifier();
   14603             :           SgConstVolatileModifier  & get_constVolatileModifier();
   14604             :           SgElaboratedTypeModifier & get_elaboratedTypeModifier();
   14605             : 
   14606             :        // RV (2/2/2006): Added 'const' versions of above member functions.
   14607             :           const SgUPC_AccessModifier     & get_upcModifier(void) const;
   14608             :           const SgConstVolatileModifier  & get_constVolatileModifier(void) const;
   14609             :           const SgElaboratedTypeModifier & get_elaboratedTypeModifier(void) const;
   14610             : 
   14611             :           SgStructureModifier            & get_structureModifier();
   14612             :           const SgStructureModifier      & get_structureModifier() const;
   14613             : 
   14614             :           bool isUnknown() const;
   14615             :           void setUnknown();
   14616             :           void unsetUnknown();
   14617             : 
   14618             :           bool isDefault() const;
   14619             :           void setDefault();
   14620             :           void unsetDefault();
   14621             : 
   14622             :           bool isRestrict() const;
   14623             :           void setRestrict();
   14624             :           void unsetRestrict();
   14625             : 
   14626             :        // Fortran specific attribute
   14627             :           bool isAllocatable() const;
   14628             :           void setAllocatable();
   14629             :           void unsetAllocatable();
   14630             : 
   14631             :        // Fortran specific attribute
   14632             :           bool isBind() const;
   14633             :           void setBind();
   14634             :           void unsetBind();
   14635             : 
   14636             :        // Fortran specific attribute
   14637             :           bool isAsynchronous() const;
   14638             :           void setAsynchronous();
   14639             :           void unsetAsynchronous();
   14640             : 
   14641             :        // Fortran specific attribute
   14642             :           bool isData() const;
   14643             :           void setData();
   14644             :           void unsetData();
   14645             : 
   14646             :        // Fortran specific attribute
   14647             :           bool isDimension() const;
   14648             :           void setDimension();
   14649             :           void unsetDimension();
   14650             : 
   14651             :        // Fortran specific attribute
   14652             :           bool isIntent_in() const;
   14653             :           void setIntent_in();
   14654             :           void unsetIntent_in();
   14655             : 
   14656             :        // Fortran specific attribute
   14657             :           bool isIntent_out() const;
   14658             :           void setIntent_out();
   14659             :           void unsetIntent_out();
   14660             : 
   14661             :        // Fortran specific attribute
   14662             :           bool isIntent_inout() const;
   14663             :           void setIntent_inout();
   14664             :           void unsetIntent_inout();
   14665             : 
   14666             :        // Fortran specific attribute
   14667             :           bool isIntrinsic() const;
   14668             :           void setIntrinsic();
   14669             :           void unsetIntrinsic();
   14670             : 
   14671             :        // Fortran specific attribute
   14672             :           bool isOptional() const;
   14673             :           void setOptional();
   14674             :           void unsetOptional();
   14675             : 
   14676             :        // Fortran specific attribute
   14677             :           bool isSave() const;
   14678             :           void setSave();
   14679             :           void unsetSave();
   14680             : 
   14681             :        // Fortran specific attribute
   14682             :           bool isTarget() const;
   14683             :           void setTarget();
   14684             :           void unsetTarget();
   14685             : 
   14686             :        // Fortran specific attribute
   14687             :           bool isValue() const;
   14688             :           void setValue();
   14689             :           void unsetValue();
   14690             : 
   14691             :        // Fortran specific attribute
   14692             :           bool isExtends() const;
   14693             :           void setExtends();
   14694             :           void unsetExtends();
   14695             : 
   14696             :        // Fortran specific attribute
   14697             :           bool isAbstract() const;
   14698             :           void setAbstract();
   14699             :           void unsetAbstract();
   14700             : 
   14701             :        // DQ (1/3/2009): Added GNU specific attributes
   14702             :           bool isGnuAttributeUnused() const;
   14703             :           void setGnuAttributeUnused();
   14704             :           void unsetGnuAttributeUnused();
   14705             : 
   14706             :           bool isGnuAttributePacked() const;
   14707             :           void setGnuAttributePacked();
   14708             :           void unsetGnuAttributePacked();
   14709             : 
   14710             :           bool isGnuAttributeDeprecated() const;
   14711             :           void setGnuAttributeDeprecated();
   14712             :           void unsetGnuAttributeDeprecated();
   14713             : 
   14714             :           bool isGnuAttributeTransparentUnion() const;
   14715             :           void setGnuAttributeTransparentUnion();
   14716             :           void unsetGnuAttributeTransparentUnion();
   14717             : 
   14718             :           bool isGnuAttributeNoReturn() const;
   14719             :           void setGnuAttributeNoReturn();
   14720             :           void unsetGnuAttributeNoReturn();
   14721             : 
   14722             :           bool isGnuAttributeConst() const;
   14723             :           void setGnuAttributeConst();
   14724             :           void unsetGnuAttributeConst();
   14725             : 
   14726             :           bool isGnuAttributeCdecl() const;
   14727             :           void setGnuAttributeCdecl();
   14728             :           void unsetGnuAttributeCdecl();
   14729             : 
   14730             :           bool isGnuAttributeStdcall() const;
   14731             :           void setGnuAttributeStdcall();
   14732             :           void unsetGnuAttributeStdcall();
   14733             : 
   14734             :           bool isGnuAttributeWarnUnusedResult() const;
   14735             :           void setGnuAttributeWarnUnusedResult();
   14736             :           void unsetGnuAttributeWarnUnusedResult();
   14737             : 
   14738             :           bool isGnuAttributeNonnull() const;
   14739             :           void setGnuAttributeNonnull();
   14740             :           void unsetGnuAttributeNonnull();
   14741             : 
   14742             :           bool isGnuAttributeSentinel() const;
   14743             :           void setGnuAttributeSentinel();
   14744             :           void unsetGnuAttributeSentinel();
   14745             : 
   14746             :           bool haveAddressSpace() const;
   14747             :           void setAddressSpace();
   14748             :           void unsetAddressSpace();
   14749             : 
   14750             :           bool isOpenclGlobal() const;
   14751             :           void setOpenclGlobal();
   14752             :           void unsetOpenclGlobal();
   14753             : 
   14754             :           bool isOpenclLocal() const;
   14755             :           void setOpenclLocal();
   14756             :           void unsetOpenclLocal();
   14757             : 
   14758             :           bool isOpenclConstant() const;
   14759             :           void setOpenclConstant();
   14760             :           void unsetOpenclConstant();
   14761             : 
   14762             :           bool isVectorType() const;
   14763             :           void setVectorType();
   14764             :           void unsetVectorType();
   14765             : 
   14766             :           bool isGnuAttributeDevice() const;
   14767             :           void setGnuAttributeDevice();
   14768             :           void unsetGnuAttributeDevice();
   14769             : 
   14770             :        // Jovial specific attribute
   14771             :           bool isRound() const;
   14772             :           void setRound();
   14773             :           void unsetRound();
   14774             : 
   14775             :        // Jovial specific attribute
   14776             :           bool isTruncate() const;
   14777             :           void setTruncate();
   14778             :           void unsetTruncate();
   14779             : 
   14780             :        // Jovial specific attribute
   14781             :           bool isTruncateTowardsZero() const;
   14782             :           void setTruncateTowardsZero();
   14783             :           void unsetTruncateTowardsZero();
   14784             : 
   14785             :        // Ada attribute for aliased variables, parameters, and components
   14786             :           bool isAliased() const;
   14787             :           void setAliased();
   14788             :           void unsetAliased();
   14789             : 
   14790             :           std::string displayString() const;
   14791             :           void display ( std::string label ) const;
   14792             :           friend std::ostream & operator<< ( std::ostream & os, const SgTypeModifier & m );
   14793             :           friend bool operator== (const SgTypeModifier& lhs, const SgTypeModifier& rhs);
   14794             : 
   14795             :        // DQ (2/4/2006): Added mechamism to clear all bits
   14796             :           void reset();
   14797             : 
   14798             :        // DQ (11/28/2015): We need a better way to support equivalents and difference in the SgTypeModifier.
   14799             :           bool isIdentity() const;
   14800             : 
   14801             : 
   14802             : 
   14803             : // End of memberFunctionString
   14804             : // Start of memberFunctionString
   14805             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   14806             : 
   14807             : // *** COMMON CODE SECTION BEGINS HERE ***
   14808             : 
   14809             :     public:
   14810             : 
   14811             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   14812             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   14813             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   14814             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   14815             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   14816             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   14817             : 
   14818             :       /*! \brief returns a string representing the class name */
   14819             :           virtual std::string class_name() const override;
   14820             : 
   14821             :       /*! \brief returns new style SageIII enum values */
   14822             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   14823             : 
   14824             :       /*! \brief static variant value */
   14825             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   14826             :        // static const VariantT static_variant = V_SgTypeModifier;
   14827             :           enum { static_variant = V_SgTypeModifier };
   14828             : 
   14829             :        /* the generated cast function */
   14830             :       /*! \brief Casts pointer from base class to derived class */
   14831             :           ROSE_DLL_API friend       SgTypeModifier* isSgTypeModifier(       SgNode * s );
   14832             : 
   14833             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   14834             :           ROSE_DLL_API friend const SgTypeModifier* isSgTypeModifier( const SgNode * s );
   14835             : 
   14836             :      // ******************************************
   14837             :      // * Memory Pool / New / Delete
   14838             :      // ******************************************
   14839             : 
   14840             :      public:
   14841             :           /// \private
   14842             :           static const unsigned pool_size; //
   14843             :           /// \private
   14844             :           static std::vector<unsigned char *> pools; //
   14845             :           /// \private
   14846             :           static SgTypeModifier * next_node; // 
   14847             : 
   14848             :           /// \private
   14849             :           static unsigned long initializeStorageClassArray(SgTypeModifierStorageClass *); //
   14850             : 
   14851             :           /// \private
   14852             :           static void clearMemoryPool(); //
   14853             :           static void deleteMemoryPool(); //
   14854             : 
   14855             :           /// \private
   14856             :           static void extendMemoryPoolForFileIO(); //
   14857             : 
   14858             :           /// \private
   14859             :           static SgTypeModifier * getPointerFromGlobalIndex(unsigned long); //
   14860             :           /// \private
   14861             :           static SgTypeModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   14862             : 
   14863             :           /// \private
   14864             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   14865             :           /// \private
   14866             :           static void resetValidFreepointers(); //
   14867             :           /// \private
   14868             :           static unsigned long getNumberOfLastValidPointer(); //
   14869             : 
   14870             : 
   14871             : #if defined(INLINE_FUNCTIONS)
   14872             :       /*! \brief returns pointer to newly allocated IR node */
   14873             :           inline void *operator new (size_t size);
   14874             : #else
   14875             :       /*! \brief returns pointer to newly allocated IR node */
   14876             :           void *operator new (size_t size);
   14877             : #endif
   14878             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   14879             :           void operator delete (void* pointer, size_t size);
   14880             : 
   14881             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   14882           0 :           void operator delete (void* pointer)
   14883             :              {
   14884             :             // This is the generated delete operator...
   14885           0 :                SgTypeModifier::operator delete (pointer,sizeof(SgTypeModifier));
   14886             :              }
   14887             : 
   14888             :       /*! \brief Returns the total number of IR nodes of this type */
   14889             :           static size_t numberOfNodes();
   14890             : 
   14891             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   14892             :           static size_t memoryUsage();
   14893             : 
   14894             :       // End of scope which started in IR nodes specific code 
   14895             :       /* */
   14896             : 
   14897             :       /* name Internal Functions
   14898             :           \brief Internal functions ... incomplete-documentation
   14899             : 
   14900             :           These functions have been made public as part of the design, but they are suggested for internal use 
   14901             :           or by particularly knowledgeable users for specialized tools or applications.
   14902             : 
   14903             :           \internal We could not make these private because they are required by user for special purposes. And 
   14904             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   14905             :          
   14906             :        */
   14907             : 
   14908             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   14909             :        // overridden in every class by *generated* implementation
   14910             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   14911             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   14912             :        // MS: 06/28/02 container of names of variables or container indices 
   14913             :        // used used in the traversal to access AST successor nodes
   14914             :        // overridden in every class by *generated* implementation
   14915             :       /*! \brief container of names of variables or container indices used used in the traversal
   14916             :           to access AST successor nodes overridden in every class by *generated* implementation */
   14917             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   14918             : 
   14919             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   14920             :        // than all the vector copies. The implementation for these functions is generated for each class.
   14921             :       /*! \brief return number of children in the traversal successor list */
   14922             :           virtual size_t get_numberOfTraversalSuccessors() override;
   14923             :       /*! \brief index-based access to traversal successors by index number */
   14924             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   14925             :       /*! \brief index-based access to traversal successors by child node */
   14926             :           virtual size_t get_childIndex(SgNode *child) override;
   14927             : 
   14928             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   14929             :        // MS: 08/16/2002 method for generating RTI information
   14930             :       /*! \brief return C++ Runtime-Time-Information */
   14931             :           virtual RTIReturnType roseRTI() override;
   14932             : #endif
   14933             :       /* */
   14934             : 
   14935             : 
   14936             : 
   14937             :       /* name Deprecated Functions
   14938             :           \brief Deprecated functions ... incomplete-documentation
   14939             : 
   14940             :           These functions have been deprecated from use.
   14941             :        */
   14942             :       /* */
   14943             : 
   14944             :       /*! returns a C style string (char*) representing the class name */
   14945             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   14946             : 
   14947             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   14948             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   14949             : #if 0
   14950             :       /*! returns old style Sage II enum values */
   14951             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   14952             :       /*! returns old style Sage II enum values */
   14953             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   14954             : #endif
   14955             :       /* */
   14956             : 
   14957             : 
   14958             : 
   14959             : 
   14960             :      public:
   14961             :       /* name Traversal Support Functions
   14962             :           \brief Traversal support functions ... incomplete-documentation
   14963             : 
   14964             :           These functions have been made public as part of the design, but they are suggested for internal use 
   14965             :           or by particularly knowledgable users for specialized tools or applications.
   14966             :        */
   14967             :       /* */
   14968             : 
   14969             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   14970             :        // (inferior to ROSE traversal mechanism, experimental).
   14971             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   14972             :        */
   14973             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   14974             : 
   14975             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   14976             :       /*! \brief support for the classic visitor pattern done in GoF */
   14977             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   14978             : 
   14979             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   14980             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   14981             :        */
   14982             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   14983             : 
   14984             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   14985             :        */
   14986             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   14987             : 
   14988             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   14989             :        // This traversal helps support internal tools that call static member functions.
   14990             :        // note: this function operates on the memory pools.
   14991             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   14992             :        */
   14993             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   14994             :       /* */
   14995             : 
   14996             : 
   14997             :      public:
   14998             :       /* name Memory Allocation Functions
   14999             :           \brief Memory allocations functions ... incomplete-documentation
   15000             : 
   15001             :           These functions have been made public as part of the design, but they are suggested for internal use 
   15002             :           or by particularly knowledgable users for specialized tools or applications.
   15003             :        */
   15004             :       /* */
   15005             : 
   15006             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   15007             : 
   15008             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   15009             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   15010             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   15011             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   15012             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   15013             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   15014             :           being used with the AST File I/O mechanism.
   15015             :        */
   15016             :           virtual bool isInMemoryPool() override;
   15017             : 
   15018             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   15019             : 
   15020             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   15021             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   15022             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   15023             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   15024             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   15025             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   15026             :           being used with the AST File I/O mechanism.
   15027             :        */
   15028             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   15029             : 
   15030             :       // DQ (4/30/2006): Modified to be a const function.
   15031             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   15032             : 
   15033             :           This functions is part of general support for many possible tools to operate 
   15034             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   15035             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   15036             :           less than the set of pointers used by the AST file I/O. This is part of
   15037             :           work implemented by Andreas, and support tools such as the AST graph generation.
   15038             : 
   15039             :           \warning This function can return unexpected data members and thus the 
   15040             :                    order and the number of elements is unpredicable and subject 
   15041             :                    to change.
   15042             : 
   15043             :           \returns STL vector of pairs of SgNode* and strings
   15044             :        */
   15045             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   15046             : 
   15047             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   15048             : 
   15049             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   15050             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   15051             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   15052             : 
   15053             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   15054             :                    and subject to change.
   15055             :        */
   15056             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   15057             : 
   15058             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   15059             : 
   15060             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   15061             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   15062             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   15063             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   15064             : 
   15065             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   15066             : 
   15067             :           \returns long
   15068             :        */
   15069             :           virtual long getChildIndex( SgNode* childNode ) const override;
   15070             : 
   15071             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   15072             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   15073             :       /* \brief Constructor for use by AST File I/O Mechanism
   15074             : 
   15075             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   15076             :           which obtained via fast binary file I/O from disk.
   15077             :        */
   15078             :        // SgTypeModifier( SgTypeModifierStorageClass& source );
   15079             : 
   15080             : 
   15081             : 
   15082             : 
   15083             : 
   15084             :  // JH (10/24/2005): methods added to support the ast file IO
   15085             :     private:
   15086             : 
   15087             :       /* name AST Memory Allocation Support Functions
   15088             :           \brief Memory allocations support....
   15089             : 
   15090             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   15091             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   15092             :           and support the AST File I/O Mechanism.
   15093             :        */
   15094             :       /* */
   15095             : 
   15096             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   15097             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   15098             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   15099             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   15100             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   15101             :           a correspinding one in the AST_FILE_IO class!
   15102             :        */
   15103             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   15104             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   15105             :       /* \brief Typedef used for low level memory access.
   15106             :        */
   15107             :        // typedef unsigned char* TestType;
   15108             : 
   15109             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   15110             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   15111             :       /* \brief Typedef used to hold memory addresses as values.
   15112             :        */
   15113             :        // typedef unsigned long  AddressType;
   15114             : 
   15115             : 
   15116             : 
   15117             :        // necessary, to have direct access to the p_freepointer and the private methods !
   15118             :       /*! \brief friend class declaration to support AST File I/O */
   15119             :           friend class AST_FILE_IO;
   15120             : 
   15121             :       /*! \brief friend class declaration to support AST File I/O */
   15122             :           friend class SgTypeModifierStorageClass;
   15123             : 
   15124             :       /*! \brief friend class declaration to support AST File I/O */
   15125             :           friend class AstSpecificDataManagingClass;
   15126             : 
   15127             :       /*! \brief friend class declaration to support AST File I/O */
   15128             :           friend class AstSpecificDataManagingClassStorageClass;
   15129             :     public:
   15130             :       /*! \brief IR node constructor to support AST File I/O */
   15131             :           SgTypeModifier( const SgTypeModifierStorageClass& source );
   15132             : 
   15133             :  // private: // JJW hack
   15134             :        /*
   15135             :           name AST Memory Allocation Support Variables
   15136             :           Memory allocations support variables 
   15137             : 
   15138             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   15139             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   15140             :           and support the AST File I/O Mechanism.
   15141             :        */
   15142             :       /* */
   15143             : 
   15144             :     public:
   15145             : 
   15146             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   15147             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   15148             :       // virtual SgNode* addRegExpAttribute();
   15149             :       /*! \brief Support for AST matching using regular expression.
   15150             : 
   15151             :           This support is incomplete and the subject of current research to define 
   15152             :           RegEx trees to support inexact matching.
   15153             :        */
   15154             :           SgTypeModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   15155             : 
   15156             : // *** COMMON CODE SECTION ENDS HERE ***
   15157             : 
   15158             : 
   15159             : // End of memberFunctionString
   15160             : // Start of memberFunctionString
   15161             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   15162             : 
   15163             :      // the generated cast function
   15164             :      // friend ROSE_DLL_API SgTypeModifier* isSgTypeModifier ( SgNode* s );
   15165             : 
   15166             :           typedef SgModifier base_node_type;
   15167             : 
   15168             : 
   15169             : // End of memberFunctionString
   15170             : 
   15171             :      public: 
   15172             :          SgBitVector get_modifierVector() const;
   15173             :          void set_modifierVector(SgBitVector modifierVector);
   15174             : 
   15175             : 
   15176             : 
   15177             : 
   15178             : 
   15179             : 
   15180             :      public: 
   15181             :          int get_gnu_attribute_alignment() const;
   15182             :          void set_gnu_attribute_alignment(int gnu_attribute_alignment);
   15183             : 
   15184             :      public: 
   15185             :          long get_gnu_attribute_sentinel() const;
   15186             :          void set_gnu_attribute_sentinel(long gnu_attribute_sentinel);
   15187             : 
   15188             :      public: 
   15189             :          unsigned get_address_space_value() const;
   15190             :          void set_address_space_value(unsigned address_space_value);
   15191             : 
   15192             :      public: 
   15193             :          unsigned get_vector_size() const;
   15194             :          void set_vector_size(unsigned vector_size);
   15195             : 
   15196             : 
   15197             :      public: 
   15198             :          virtual ~SgTypeModifier();
   15199             : 
   15200             : 
   15201             :      public: 
   15202             :          SgTypeModifier(); 
   15203             : 
   15204             :     protected:
   15205             : // Start of memberFunctionString
   15206             : SgBitVector p_modifierVector;
   15207             :           
   15208             : // End of memberFunctionString
   15209             : // Start of memberFunctionString
   15210             : SgUPC_AccessModifier p_upcModifier;
   15211             :           
   15212             : // End of memberFunctionString
   15213             : // Start of memberFunctionString
   15214             : SgStructureModifier p_structureModifier;
   15215             :           
   15216             : // End of memberFunctionString
   15217             : // Start of memberFunctionString
   15218             : SgConstVolatileModifier p_constVolatileModifier;
   15219             :           
   15220             : // End of memberFunctionString
   15221             : // Start of memberFunctionString
   15222             : SgElaboratedTypeModifier p_elaboratedTypeModifier;
   15223             :           
   15224             : // End of memberFunctionString
   15225             : // Start of memberFunctionString
   15226             : SgTypeModifier::gnu_extension_machine_mode_enum p_gnu_extension_machine_mode;
   15227             :           
   15228             : // End of memberFunctionString
   15229             : // Start of memberFunctionString
   15230             : int p_gnu_attribute_alignment;
   15231             :           
   15232             : // End of memberFunctionString
   15233             : // Start of memberFunctionString
   15234             : long p_gnu_attribute_sentinel;
   15235             :           
   15236             : // End of memberFunctionString
   15237             : // Start of memberFunctionString
   15238             : unsigned p_address_space_value;
   15239             :           
   15240             : // End of memberFunctionString
   15241             : // Start of memberFunctionString
   15242             : unsigned p_vector_size;
   15243             :           
   15244             : // End of memberFunctionString
   15245             : 
   15246             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeModifier>;
   15247             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, SgBitVector,&SgTypeModifier::p_modifierVector>;
   15248             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, SgUPC_AccessModifier,&SgTypeModifier::p_upcModifier>;
   15249             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, SgStructureModifier,&SgTypeModifier::p_structureModifier>;
   15250             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, SgConstVolatileModifier,&SgTypeModifier::p_constVolatileModifier>;
   15251             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, SgElaboratedTypeModifier,&SgTypeModifier::p_elaboratedTypeModifier>;
   15252             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, SgTypeModifier::gnu_extension_machine_mode_enum,&SgTypeModifier::p_gnu_extension_machine_mode>;
   15253             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, int,&SgTypeModifier::p_gnu_attribute_alignment>;
   15254             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, long,&SgTypeModifier::p_gnu_attribute_sentinel>;
   15255             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, unsigned,&SgTypeModifier::p_address_space_value>;
   15256             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeModifier, unsigned,&SgTypeModifier::p_vector_size>;
   15257             : 
   15258             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   15259             : 
   15260             : 
   15261             :    };
   15262             : #endif
   15263             : 
   15264             : // postdeclarations for SgTypeModifier
   15265             : 
   15266             : /* #line 15267 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   15267             : 
   15268             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   15269             : 
   15270             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   15271             : 
   15272             : 
   15273             : /* #line 15274 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   15274             : 
   15275             : 
   15276             : 
   15277             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   15278             : 
   15279             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   15280             : //      This code is automatically generated for each 
   15281             : //      terminal and non-terminal within the defined 
   15282             : //      grammar.  There is a simple way to change the 
   15283             : //      code to fix bugs etc.  See the ROSE README file
   15284             : //      for directions.
   15285             : 
   15286             : // tps: (02/22/2010): Adding DLL export requirements
   15287             : #include "rosedll.h"
   15288             : 
   15289             : // predeclarations for SgDeclarationModifier
   15290             : 
   15291             : /* #line 15292 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   15292             : 
   15293             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   15294             : 
   15295             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   15296             : 
   15297             : #if 1
   15298             : // Class Definition for SgDeclarationModifier
   15299             : class ROSE_DLL_API SgDeclarationModifier  : public SgModifier
   15300             :    {
   15301             :      public:
   15302             : 
   15303             : 
   15304             : /* #line 15305 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   15305             : 
   15306             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   15307             : // Start of memberFunctionString
   15308             : /* #line 1538 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   15309             : 
   15310             :        // Support for: storage specifiers, type specifiers, function specifiers,
   15311             :        //              friend, typedef, export, throw
   15312             : 
   15313             :       /*! \brief Declaration Modifiers (only one value can be specified)
   15314             : 
   15315             :           Modifier information about (friend, typedef, export, and throw).
   15316             : 
   15317             :           \internal Only one value can be specified (at least in C and C++)
   15318             :        */
   15319             :           enum declaration_modifier_enum
   15320             :              {
   15321             :             // Bit values can support multiple values in a single enum type
   15322             :                e_unknown       = 0,  /*!< Unknown value (error) */
   15323             :                e_default       = 1,  /*!< Default value */
   15324             :                e_friend        = 2,  /*!< Friend qualifier */
   15325             :                e_typedef       = 3,  /*!< Typedef qualifier (not clear if this is used, I don't think typedef is a modifier) */
   15326             :                e_export        = 4,  /*!< Export qualifier */
   15327             :                e_throw         = 5,  /*!< Exception handling support (throw) */
   15328             :                e_bind          = 6,  /*!< Fortran bind attribute for declarations (functions, variable, and classes) */
   15329             :                e_final         = 7,  /*!< PHP, Java, and C++11 support for specification to not be extended */
   15330             :                e_override      = 8,  /*!< C++11 support for specification to not be extended */
   15331             : 
   15332             :                e_ms_declspec_align        = 10, /*!< Microsoft declspec() attributes */
   15333             :                e_ms_declspec_allocate     = 11, /*!< Microsoft declspec() attributes */
   15334             :                e_ms_declspec_appdomain    = 12, /*!< Microsoft declspec() attributes */
   15335             :                e_ms_declspec_code_seg     = 13, /*!< Microsoft declspec() attributes */
   15336             :                e_ms_declspec_deprecated   = 14, /*!< Microsoft declspec() attributes */
   15337             :                e_ms_declspec_dllimport    = 15, /*!< Microsoft declspec() attributes */
   15338             :                e_ms_declspec_dllexport    = 16, /*!< Microsoft declspec() attributes */
   15339             :                e_ms_declspec_jitintrinsic = 17, /*!< Microsoft declspec() attributes */
   15340             :                e_ms_declspec_naked        = 18, /*!< Microsoft declspec() attributes */
   15341             :                e_ms_declspec_noalias      = 19, /*!< Microsoft declspec() attributes */
   15342             :                e_ms_declspec_noinline     = 20, /*!< Microsoft declspec() attributes */
   15343             :                e_ms_declspec_noreturn     = 21, /*!< Microsoft declspec() attributes */
   15344             :                e_ms_declspec_nothrow      = 22, /*!< Microsoft declspec() attributes */
   15345             :                e_ms_declspec_novtable     = 23, /*!< Microsoft declspec() attributes */
   15346             :                e_ms_declspec_process      = 24, /*!< Microsoft declspec() attributes */
   15347             :                e_ms_declspec_property     = 25, /*!< Microsoft declspec() attributes */
   15348             :                e_ms_declspec_restrict     = 26, /*!< Microsoft declspec() attributes */
   15349             :                e_ms_declspec_safebuffers  = 27, /*!< Microsoft declspec() attributes */
   15350             :                e_ms_declspec_selectany    = 28, /*!< Microsoft declspec() attributes */
   15351             :                e_ms_declspec_thread       = 29, /*!< Microsoft declspec() attributes */
   15352             :                e_ms_declspec_uuid         = 30, /*!< Microsoft declspec() attributes */
   15353             : 
   15354             :                e_last_modifier       /*!< last modifier value (upper bound on range of values, used in error checking) */
   15355             :              };
   15356             : 
   15357             :       /*! \brief GNU attribute for visability (only one value can be specified)
   15358             : 
   15359             :           visability values are: default, hidden, protected or internal visibility.
   15360             : 
   15361             :           \internal Only one value can be specified (at least in C and C++)
   15362             :        */
   15363             :           enum gnu_declaration_visability_enum
   15364             :              {
   15365             :                e_unknown_visibility     = 0,  /*!< Unknown value (error) */
   15366             :                e_error_visibility       = 1,  /*!< Error value (error) */
   15367             :                e_unspecified_visibility = 2,  /*!< Unspecified visibility (not the default value) */
   15368             :                e_hidden_visibility      = 3,  /*!< hidden visibility */
   15369             :                e_protected_visibility   = 4,  /*!< protected visibility */
   15370             :                e_internal_visibility    = 5,  /*!< internal visibility (not clear if this is used, I don't think typedef is a modifier) */
   15371             :                e_default_visibility     = 6,  /*!< default visibility */
   15372             :                e_last_visibility_attribute /*!< last visibility attribute (upper bound on range of values, used in error checking) */
   15373             :              };
   15374             : 
   15375             :        // Copy constructor
   15376             :           SgDeclarationModifier ( const SgDeclarationModifier & X );
   15377             : 
   15378             :        // Assignment Operator
   15379             :           SgDeclarationModifier & operator= ( const SgDeclarationModifier & X );
   15380             : 
   15381             :           void post_construction_initialization() override;
   15382             : 
   15383             :           SgTypeModifier    & get_typeModifier();
   15384             :           SgAccessModifier  & get_accessModifier();
   15385             :           SgStorageModifier & get_storageModifier();
   15386             : 
   15387             :           const SgTypeModifier    & get_typeModifier() const;
   15388             :           const SgAccessModifier  & get_accessModifier() const;
   15389             :           const SgStorageModifier & get_storageModifier() const;
   15390             : 
   15391             :           bool isUnknown() const;
   15392             :           void setUnknown();
   15393             :           void unsetUnknown();
   15394             : 
   15395             :           bool isDefault() const;
   15396             :           void setDefault();
   15397             :           void unsetDefault();
   15398             : 
   15399             :           bool isFriend() const;
   15400             :           void setFriend();
   15401             :           void unsetFriend();
   15402             : 
   15403             :           bool isTypedef() const;
   15404             :           void setTypedef();
   15405             :           void unsetTypedef();
   15406             : 
   15407             :           bool isExport() const;
   15408             :           void setExport();
   15409             :           void unsetExport();
   15410             : 
   15411             :           bool isThrow() const;
   15412             :           void setThrow();
   15413             :           void unsetThrow();
   15414             : 
   15415             :        // Fortran specific attribute
   15416             :           bool isBind() const;
   15417             :           void setBind();
   15418             :           void unsetBind();
   15419             : 
   15420             :        // PHP, Java, and C++11 specific attribute
   15421             :           bool isFinal() const;
   15422             :           void setFinal();
   15423             :           void unsetFinal();
   15424             : 
   15425             :        // C++11 specific attribute
   15426             :           bool isOverride() const;
   15427             :           void setOverride();
   15428             :           void unsetOverride();
   15429             : 
   15430             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15431             :           bool is_ms_declspec_align() const;
   15432             :           void set_ms_declspec_align();
   15433             :           void unset_ms_declspec_align();
   15434             : 
   15435             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15436             :           bool is_ms_declspec_allocate() const;
   15437             :           void set_ms_declspec_allocate();
   15438             :           void unset_ms_declspec_allocate();
   15439             : 
   15440             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15441             :           bool is_ms_declspec_appdomain() const;
   15442             :           void set_ms_declspec_appdomain();
   15443             :           void unset_ms_declspec_appdomain();
   15444             : 
   15445             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15446             :           bool is_ms_declspec_code_seg() const;
   15447             :           void set_ms_declspec_code_seg();
   15448             :           void unset_ms_declspec_code_seg();
   15449             : 
   15450             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15451             :           bool is_ms_declspec_deprecated() const;
   15452             :           void set_ms_declspec_deprecated();
   15453             :           void unset_ms_declspec_deprecated();
   15454             : 
   15455             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15456             :           bool is_ms_declspec_dllimport() const;
   15457             :           void set_ms_declspec_dllimport();
   15458             :           void unset_ms_declspec_dllimport();
   15459             : 
   15460             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15461             :           bool is_ms_declspec_dllexport() const;
   15462             :           void set_ms_declspec_dllexport();
   15463             :           void unset_ms_declspec_dllexport();
   15464             : 
   15465             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15466             :           bool is_ms_declspec_jitintrinsic() const;
   15467             :           void set_ms_declspec_jitintrinsic();
   15468             :           void unset_ms_declspec_jitintrinsic();
   15469             : 
   15470             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15471             :           bool is_ms_declspec_naked() const;
   15472             :           void set_ms_declspec_naked();
   15473             :           void unset_ms_declspec_naked();
   15474             : 
   15475             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15476             :           bool is_ms_declspec_noalias() const;
   15477             :           void set_ms_declspec_noalias();
   15478             :           void unset_ms_declspec_noalias();
   15479             : 
   15480             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15481             :           bool is_ms_declspec_noinline() const;
   15482             :           void set_ms_declspec_noinline();
   15483             :           void unset_ms_declspec_noinline();
   15484             : 
   15485             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15486             :           bool is_ms_declspec_noreturn() const;
   15487             :           void set_ms_declspec_noreturn();
   15488             :           void unset_ms_declspec_noreturn();
   15489             : 
   15490             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15491             :           bool is_ms_declspec_nothrow() const;
   15492             :           void set_ms_declspec_nothrow();
   15493             :           void unset_ms_declspec_nothrow();
   15494             : 
   15495             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15496             :           bool is_ms_declspec_novtable() const;
   15497             :           void set_ms_declspec_novtable();
   15498             :           void unset_ms_declspec_novtable();
   15499             : 
   15500             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15501             :           bool is_ms_declspec_process() const;
   15502             :           void set_ms_declspec_process();
   15503             :           void unset_ms_declspec_process();
   15504             : 
   15505             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15506             :           bool is_ms_declspec_property() const;
   15507             :           void set_ms_declspec_property();
   15508             :           void unset_ms_declspec_property();
   15509             : 
   15510             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15511             :           bool is_ms_declspec_restrict() const;
   15512             :           void set_ms_declspec_restrict();
   15513             :           void unset_ms_declspec_restrict();
   15514             : 
   15515             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15516             :           bool is_ms_declspec_safebuffers() const;
   15517             :           void set_ms_declspec_safebuffers();
   15518             :           void unset_ms_declspec_safebuffers();
   15519             : 
   15520             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15521             :           bool is_ms_declspec_selectany() const;
   15522             :           void set_ms_declspec_selectany();
   15523             :           void unset_ms_declspec_selectany();
   15524             : 
   15525             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15526             :           bool is_ms_declspec_thread() const;
   15527             :           void set_ms_declspec_thread();
   15528             :           void unset_ms_declspec_thread();
   15529             : 
   15530             :        // DQ (8/16/2014): Adding non-C++ standard Microsoft specific attributes.
   15531             :           bool is_ms_declspec_uuid() const;
   15532             :           void set_ms_declspec_uuid();
   15533             :           void unset_ms_declspec_uuid();
   15534             : 
   15535             :           std::string displayString() const;
   15536             :           void display ( std::string label ) const;
   15537             :           friend std::ostream & operator<< ( std::ostream & os, const SgDeclarationModifier & m );
   15538             :       friend bool operator== (const SgDeclarationModifier& lhs, const SgDeclarationModifier& rhs);
   15539             : 
   15540             :        // DQ (2/4/2006): Added mechamism to clear all bits
   15541             :           void reset();
   15542             : 
   15543             : 
   15544             : 
   15545             : // End of memberFunctionString
   15546             : // Start of memberFunctionString
   15547             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   15548             : 
   15549             : // *** COMMON CODE SECTION BEGINS HERE ***
   15550             : 
   15551             :     public:
   15552             : 
   15553             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   15554             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   15555             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   15556             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   15557             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   15558             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   15559             : 
   15560             :       /*! \brief returns a string representing the class name */
   15561             :           virtual std::string class_name() const override;
   15562             : 
   15563             :       /*! \brief returns new style SageIII enum values */
   15564             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   15565             : 
   15566             :       /*! \brief static variant value */
   15567             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   15568             :        // static const VariantT static_variant = V_SgDeclarationModifier;
   15569             :           enum { static_variant = V_SgDeclarationModifier };
   15570             : 
   15571             :        /* the generated cast function */
   15572             :       /*! \brief Casts pointer from base class to derived class */
   15573             :           ROSE_DLL_API friend       SgDeclarationModifier* isSgDeclarationModifier(       SgNode * s );
   15574             : 
   15575             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   15576             :           ROSE_DLL_API friend const SgDeclarationModifier* isSgDeclarationModifier( const SgNode * s );
   15577             : 
   15578             :      // ******************************************
   15579             :      // * Memory Pool / New / Delete
   15580             :      // ******************************************
   15581             : 
   15582             :      public:
   15583             :           /// \private
   15584             :           static const unsigned pool_size; //
   15585             :           /// \private
   15586             :           static std::vector<unsigned char *> pools; //
   15587             :           /// \private
   15588             :           static SgDeclarationModifier * next_node; // 
   15589             : 
   15590             :           /// \private
   15591             :           static unsigned long initializeStorageClassArray(SgDeclarationModifierStorageClass *); //
   15592             : 
   15593             :           /// \private
   15594             :           static void clearMemoryPool(); //
   15595             :           static void deleteMemoryPool(); //
   15596             : 
   15597             :           /// \private
   15598             :           static void extendMemoryPoolForFileIO(); //
   15599             : 
   15600             :           /// \private
   15601             :           static SgDeclarationModifier * getPointerFromGlobalIndex(unsigned long); //
   15602             :           /// \private
   15603             :           static SgDeclarationModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   15604             : 
   15605             :           /// \private
   15606             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   15607             :           /// \private
   15608             :           static void resetValidFreepointers(); //
   15609             :           /// \private
   15610             :           static unsigned long getNumberOfLastValidPointer(); //
   15611             : 
   15612             : 
   15613             : #if defined(INLINE_FUNCTIONS)
   15614             :       /*! \brief returns pointer to newly allocated IR node */
   15615             :           inline void *operator new (size_t size);
   15616             : #else
   15617             :       /*! \brief returns pointer to newly allocated IR node */
   15618             :           void *operator new (size_t size);
   15619             : #endif
   15620             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   15621             :           void operator delete (void* pointer, size_t size);
   15622             : 
   15623             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   15624           0 :           void operator delete (void* pointer)
   15625             :              {
   15626             :             // This is the generated delete operator...
   15627           0 :                SgDeclarationModifier::operator delete (pointer,sizeof(SgDeclarationModifier));
   15628             :              }
   15629             : 
   15630             :       /*! \brief Returns the total number of IR nodes of this type */
   15631             :           static size_t numberOfNodes();
   15632             : 
   15633             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   15634             :           static size_t memoryUsage();
   15635             : 
   15636             :       // End of scope which started in IR nodes specific code 
   15637             :       /* */
   15638             : 
   15639             :       /* name Internal Functions
   15640             :           \brief Internal functions ... incomplete-documentation
   15641             : 
   15642             :           These functions have been made public as part of the design, but they are suggested for internal use 
   15643             :           or by particularly knowledgeable users for specialized tools or applications.
   15644             : 
   15645             :           \internal We could not make these private because they are required by user for special purposes. And 
   15646             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   15647             :          
   15648             :        */
   15649             : 
   15650             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   15651             :        // overridden in every class by *generated* implementation
   15652             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   15653             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   15654             :        // MS: 06/28/02 container of names of variables or container indices 
   15655             :        // used used in the traversal to access AST successor nodes
   15656             :        // overridden in every class by *generated* implementation
   15657             :       /*! \brief container of names of variables or container indices used used in the traversal
   15658             :           to access AST successor nodes overridden in every class by *generated* implementation */
   15659             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   15660             : 
   15661             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   15662             :        // than all the vector copies. The implementation for these functions is generated for each class.
   15663             :       /*! \brief return number of children in the traversal successor list */
   15664             :           virtual size_t get_numberOfTraversalSuccessors() override;
   15665             :       /*! \brief index-based access to traversal successors by index number */
   15666             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   15667             :       /*! \brief index-based access to traversal successors by child node */
   15668             :           virtual size_t get_childIndex(SgNode *child) override;
   15669             : 
   15670             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   15671             :        // MS: 08/16/2002 method for generating RTI information
   15672             :       /*! \brief return C++ Runtime-Time-Information */
   15673             :           virtual RTIReturnType roseRTI() override;
   15674             : #endif
   15675             :       /* */
   15676             : 
   15677             : 
   15678             : 
   15679             :       /* name Deprecated Functions
   15680             :           \brief Deprecated functions ... incomplete-documentation
   15681             : 
   15682             :           These functions have been deprecated from use.
   15683             :        */
   15684             :       /* */
   15685             : 
   15686             :       /*! returns a C style string (char*) representing the class name */
   15687             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   15688             : 
   15689             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   15690             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   15691             : #if 0
   15692             :       /*! returns old style Sage II enum values */
   15693             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   15694             :       /*! returns old style Sage II enum values */
   15695             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   15696             : #endif
   15697             :       /* */
   15698             : 
   15699             : 
   15700             : 
   15701             : 
   15702             :      public:
   15703             :       /* name Traversal Support Functions
   15704             :           \brief Traversal support functions ... incomplete-documentation
   15705             : 
   15706             :           These functions have been made public as part of the design, but they are suggested for internal use 
   15707             :           or by particularly knowledgable users for specialized tools or applications.
   15708             :        */
   15709             :       /* */
   15710             : 
   15711             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   15712             :        // (inferior to ROSE traversal mechanism, experimental).
   15713             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   15714             :        */
   15715             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   15716             : 
   15717             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   15718             :       /*! \brief support for the classic visitor pattern done in GoF */
   15719             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   15720             : 
   15721             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   15722             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   15723             :        */
   15724             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   15725             : 
   15726             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   15727             :        */
   15728             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   15729             : 
   15730             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   15731             :        // This traversal helps support internal tools that call static member functions.
   15732             :        // note: this function operates on the memory pools.
   15733             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   15734             :        */
   15735             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   15736             :       /* */
   15737             : 
   15738             : 
   15739             :      public:
   15740             :       /* name Memory Allocation Functions
   15741             :           \brief Memory allocations functions ... incomplete-documentation
   15742             : 
   15743             :           These functions have been made public as part of the design, but they are suggested for internal use 
   15744             :           or by particularly knowledgable users for specialized tools or applications.
   15745             :        */
   15746             :       /* */
   15747             : 
   15748             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   15749             : 
   15750             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   15751             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   15752             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   15753             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   15754             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   15755             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   15756             :           being used with the AST File I/O mechanism.
   15757             :        */
   15758             :           virtual bool isInMemoryPool() override;
   15759             : 
   15760             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   15761             : 
   15762             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   15763             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   15764             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   15765             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   15766             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   15767             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   15768             :           being used with the AST File I/O mechanism.
   15769             :        */
   15770             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   15771             : 
   15772             :       // DQ (4/30/2006): Modified to be a const function.
   15773             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   15774             : 
   15775             :           This functions is part of general support for many possible tools to operate 
   15776             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   15777             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   15778             :           less than the set of pointers used by the AST file I/O. This is part of
   15779             :           work implemented by Andreas, and support tools such as the AST graph generation.
   15780             : 
   15781             :           \warning This function can return unexpected data members and thus the 
   15782             :                    order and the number of elements is unpredicable and subject 
   15783             :                    to change.
   15784             : 
   15785             :           \returns STL vector of pairs of SgNode* and strings
   15786             :        */
   15787             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   15788             : 
   15789             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   15790             : 
   15791             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   15792             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   15793             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   15794             : 
   15795             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   15796             :                    and subject to change.
   15797             :        */
   15798             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   15799             : 
   15800             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   15801             : 
   15802             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   15803             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   15804             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   15805             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   15806             : 
   15807             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   15808             : 
   15809             :           \returns long
   15810             :        */
   15811             :           virtual long getChildIndex( SgNode* childNode ) const override;
   15812             : 
   15813             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   15814             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   15815             :       /* \brief Constructor for use by AST File I/O Mechanism
   15816             : 
   15817             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   15818             :           which obtained via fast binary file I/O from disk.
   15819             :        */
   15820             :        // SgDeclarationModifier( SgDeclarationModifierStorageClass& source );
   15821             : 
   15822             : 
   15823             : 
   15824             : 
   15825             : 
   15826             :  // JH (10/24/2005): methods added to support the ast file IO
   15827             :     private:
   15828             : 
   15829             :       /* name AST Memory Allocation Support Functions
   15830             :           \brief Memory allocations support....
   15831             : 
   15832             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   15833             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   15834             :           and support the AST File I/O Mechanism.
   15835             :        */
   15836             :       /* */
   15837             : 
   15838             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   15839             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   15840             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   15841             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   15842             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   15843             :           a correspinding one in the AST_FILE_IO class!
   15844             :        */
   15845             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   15846             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   15847             :       /* \brief Typedef used for low level memory access.
   15848             :        */
   15849             :        // typedef unsigned char* TestType;
   15850             : 
   15851             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   15852             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   15853             :       /* \brief Typedef used to hold memory addresses as values.
   15854             :        */
   15855             :        // typedef unsigned long  AddressType;
   15856             : 
   15857             : 
   15858             : 
   15859             :        // necessary, to have direct access to the p_freepointer and the private methods !
   15860             :       /*! \brief friend class declaration to support AST File I/O */
   15861             :           friend class AST_FILE_IO;
   15862             : 
   15863             :       /*! \brief friend class declaration to support AST File I/O */
   15864             :           friend class SgDeclarationModifierStorageClass;
   15865             : 
   15866             :       /*! \brief friend class declaration to support AST File I/O */
   15867             :           friend class AstSpecificDataManagingClass;
   15868             : 
   15869             :       /*! \brief friend class declaration to support AST File I/O */
   15870             :           friend class AstSpecificDataManagingClassStorageClass;
   15871             :     public:
   15872             :       /*! \brief IR node constructor to support AST File I/O */
   15873             :           SgDeclarationModifier( const SgDeclarationModifierStorageClass& source );
   15874             : 
   15875             :  // private: // JJW hack
   15876             :        /*
   15877             :           name AST Memory Allocation Support Variables
   15878             :           Memory allocations support variables 
   15879             : 
   15880             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   15881             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   15882             :           and support the AST File I/O Mechanism.
   15883             :        */
   15884             :       /* */
   15885             : 
   15886             :     public:
   15887             : 
   15888             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   15889             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   15890             :       // virtual SgNode* addRegExpAttribute();
   15891             :       /*! \brief Support for AST matching using regular expression.
   15892             : 
   15893             :           This support is incomplete and the subject of current research to define 
   15894             :           RegEx trees to support inexact matching.
   15895             :        */
   15896             :           SgDeclarationModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   15897             : 
   15898             : // *** COMMON CODE SECTION ENDS HERE ***
   15899             : 
   15900             : 
   15901             : // End of memberFunctionString
   15902             : // Start of memberFunctionString
   15903             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   15904             : 
   15905             :      // the generated cast function
   15906             :      // friend ROSE_DLL_API SgDeclarationModifier* isSgDeclarationModifier ( SgNode* s );
   15907             : 
   15908             :           typedef SgModifier base_node_type;
   15909             : 
   15910             : 
   15911             : // End of memberFunctionString
   15912             : 
   15913             :      public: 
   15914             :          SgBitVector get_modifierVector() const;
   15915             :          void set_modifierVector(SgBitVector modifierVector);
   15916             : 
   15917             : 
   15918             : 
   15919             : 
   15920             :      public: 
   15921             :          std::string get_gnu_attribute_section_name() const;
   15922             :          void set_gnu_attribute_section_name(std::string gnu_attribute_section_name);
   15923             : 
   15924             :      public: 
   15925             :          SgDeclarationModifier::gnu_declaration_visability_enum get_gnu_attribute_visability() const;
   15926             :          void set_gnu_attribute_visability(SgDeclarationModifier::gnu_declaration_visability_enum gnu_attribute_visability);
   15927             : 
   15928             :      public: 
   15929             :          std::string get_microsoft_uuid_string() const;
   15930             :          void set_microsoft_uuid_string(std::string microsoft_uuid_string);
   15931             : 
   15932             :      public: 
   15933             :          std::string get_microsoft_property_get_function_name() const;
   15934             :          void set_microsoft_property_get_function_name(std::string microsoft_property_get_function_name);
   15935             : 
   15936             :      public: 
   15937             :          std::string get_microsoft_property_put_function_name() const;
   15938             :          void set_microsoft_property_put_function_name(std::string microsoft_property_put_function_name);
   15939             : 
   15940             : 
   15941             :      public: 
   15942             :          virtual ~SgDeclarationModifier();
   15943             : 
   15944             : 
   15945             :      public: 
   15946             :          SgDeclarationModifier(); 
   15947             : 
   15948             :     protected:
   15949             : // Start of memberFunctionString
   15950             : SgBitVector p_modifierVector;
   15951             :           
   15952             : // End of memberFunctionString
   15953             : // Start of memberFunctionString
   15954             : SgTypeModifier p_typeModifier;
   15955             :           
   15956             : // End of memberFunctionString
   15957             : // Start of memberFunctionString
   15958             : SgAccessModifier p_accessModifier;
   15959             :           
   15960             : // End of memberFunctionString
   15961             : // Start of memberFunctionString
   15962             : SgStorageModifier p_storageModifier;
   15963             :           
   15964             : // End of memberFunctionString
   15965             : // Start of memberFunctionString
   15966             : std::string p_gnu_attribute_section_name;
   15967             :           
   15968             : // End of memberFunctionString
   15969             : // Start of memberFunctionString
   15970             : SgDeclarationModifier::gnu_declaration_visability_enum p_gnu_attribute_visability;
   15971             :           
   15972             : // End of memberFunctionString
   15973             : // Start of memberFunctionString
   15974             : std::string p_microsoft_uuid_string;
   15975             :           
   15976             : // End of memberFunctionString
   15977             : // Start of memberFunctionString
   15978             : std::string p_microsoft_property_get_function_name;
   15979             :           
   15980             : // End of memberFunctionString
   15981             : // Start of memberFunctionString
   15982             : std::string p_microsoft_property_put_function_name;
   15983             :           
   15984             : // End of memberFunctionString
   15985             : 
   15986             :     friend struct Rose::Traits::generated::describe_node_t<SgDeclarationModifier>;
   15987             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, SgBitVector,&SgDeclarationModifier::p_modifierVector>;
   15988             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, SgTypeModifier,&SgDeclarationModifier::p_typeModifier>;
   15989             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, SgAccessModifier,&SgDeclarationModifier::p_accessModifier>;
   15990             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, SgStorageModifier,&SgDeclarationModifier::p_storageModifier>;
   15991             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, std::string,&SgDeclarationModifier::p_gnu_attribute_section_name>;
   15992             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, SgDeclarationModifier::gnu_declaration_visability_enum,&SgDeclarationModifier::p_gnu_attribute_visability>;
   15993             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, std::string,&SgDeclarationModifier::p_microsoft_uuid_string>;
   15994             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, std::string,&SgDeclarationModifier::p_microsoft_property_get_function_name>;
   15995             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationModifier, std::string,&SgDeclarationModifier::p_microsoft_property_put_function_name>;
   15996             : 
   15997             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   15998             : 
   15999             : 
   16000             :    };
   16001             : #endif
   16002             : 
   16003             : // postdeclarations for SgDeclarationModifier
   16004             : 
   16005             : /* #line 16006 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16006             : 
   16007             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   16008             : 
   16009             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16010             : 
   16011             : 
   16012             : /* #line 16013 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16013             : 
   16014             : 
   16015             : 
   16016             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16017             : 
   16018             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   16019             : //      This code is automatically generated for each 
   16020             : //      terminal and non-terminal within the defined 
   16021             : //      grammar.  There is a simple way to change the 
   16022             : //      code to fix bugs etc.  See the ROSE README file
   16023             : //      for directions.
   16024             : 
   16025             : // tps: (02/22/2010): Adding DLL export requirements
   16026             : #include "rosedll.h"
   16027             : 
   16028             : // predeclarations for SgOpenclAccessModeModifier
   16029             : 
   16030             : /* #line 16031 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16031             : 
   16032             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   16033             : 
   16034             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16035             : 
   16036             : #if 1
   16037             : // Class Definition for SgOpenclAccessModeModifier
   16038             : class ROSE_DLL_API SgOpenclAccessModeModifier  : public SgModifier
   16039             :    {
   16040             :      public:
   16041             : 
   16042             : 
   16043             : /* #line 16044 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16044             : 
   16045             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   16046             : // Start of memberFunctionString
   16047             : /* #line 7754 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   16048             : 
   16049             : 
   16050             :        // TV (05/03/2010): OpenCL Access Mode Support
   16051             : 
   16052             :           enum access_mode_modifier_enum
   16053             :              {
   16054             :                e_unknown       = 0,  /*!< error value */
   16055             :                e_default       = 1,  /*!< default value */
   16056             :                e_read_only     = 2,  /*!< read only access mode modifier */
   16057             :                e_write_only    = 3,  /*!< write only access mode modifier */
   16058             :                e_read_write    = 4,  /*!< read-write access mode modifier */
   16059             : 
   16060             :                e_last_modifier  /*!< last value (upper bound on range of values, used in error checking) */
   16061             :              };
   16062             : 
   16063             :        // Copy constructor
   16064             :           SgOpenclAccessModeModifier ( const SgOpenclAccessModeModifier & X );
   16065             : 
   16066             :        // Assignment Operator
   16067             :           SgOpenclAccessModeModifier & operator= ( const SgOpenclAccessModeModifier & X );
   16068             : 
   16069             :           void post_construction_initialization() override;
   16070             : 
   16071             :           bool isUnknown() const;
   16072             :           void setUnknown();
   16073             : 
   16074             :           bool isDefault() const;
   16075             :           void setDefault();
   16076             : 
   16077             :           bool isReadOnly() const;
   16078             :           void setReadOnly();
   16079             : 
   16080             :           bool isWriteOnly() const;
   16081             :           void setWriteOnly();
   16082             : 
   16083             :           bool isReadWrite() const;
   16084             :           void setReadWrite();
   16085             : 
   16086             :           std::string displayString() const;
   16087             :           void display ( std::string label ) const;
   16088             :           friend std::ostream & operator<< ( std::ostream & os, const SgStorageModifier & m );
   16089             : 
   16090             : 
   16091             : 
   16092             : // End of memberFunctionString
   16093             : // Start of memberFunctionString
   16094             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   16095             : 
   16096             : // *** COMMON CODE SECTION BEGINS HERE ***
   16097             : 
   16098             :     public:
   16099             : 
   16100             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   16101             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   16102             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   16103             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   16104             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   16105             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   16106             : 
   16107             :       /*! \brief returns a string representing the class name */
   16108             :           virtual std::string class_name() const override;
   16109             : 
   16110             :       /*! \brief returns new style SageIII enum values */
   16111             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   16112             : 
   16113             :       /*! \brief static variant value */
   16114             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   16115             :        // static const VariantT static_variant = V_SgOpenclAccessModeModifier;
   16116             :           enum { static_variant = V_SgOpenclAccessModeModifier };
   16117             : 
   16118             :        /* the generated cast function */
   16119             :       /*! \brief Casts pointer from base class to derived class */
   16120             :           ROSE_DLL_API friend       SgOpenclAccessModeModifier* isSgOpenclAccessModeModifier(       SgNode * s );
   16121             : 
   16122             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   16123             :           ROSE_DLL_API friend const SgOpenclAccessModeModifier* isSgOpenclAccessModeModifier( const SgNode * s );
   16124             : 
   16125             :      // ******************************************
   16126             :      // * Memory Pool / New / Delete
   16127             :      // ******************************************
   16128             : 
   16129             :      public:
   16130             :           /// \private
   16131             :           static const unsigned pool_size; //
   16132             :           /// \private
   16133             :           static std::vector<unsigned char *> pools; //
   16134             :           /// \private
   16135             :           static SgOpenclAccessModeModifier * next_node; // 
   16136             : 
   16137             :           /// \private
   16138             :           static unsigned long initializeStorageClassArray(SgOpenclAccessModeModifierStorageClass *); //
   16139             : 
   16140             :           /// \private
   16141             :           static void clearMemoryPool(); //
   16142             :           static void deleteMemoryPool(); //
   16143             : 
   16144             :           /// \private
   16145             :           static void extendMemoryPoolForFileIO(); //
   16146             : 
   16147             :           /// \private
   16148             :           static SgOpenclAccessModeModifier * getPointerFromGlobalIndex(unsigned long); //
   16149             :           /// \private
   16150             :           static SgOpenclAccessModeModifier * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   16151             : 
   16152             :           /// \private
   16153             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   16154             :           /// \private
   16155             :           static void resetValidFreepointers(); //
   16156             :           /// \private
   16157             :           static unsigned long getNumberOfLastValidPointer(); //
   16158             : 
   16159             : 
   16160             : #if defined(INLINE_FUNCTIONS)
   16161             :       /*! \brief returns pointer to newly allocated IR node */
   16162             :           inline void *operator new (size_t size);
   16163             : #else
   16164             :       /*! \brief returns pointer to newly allocated IR node */
   16165             :           void *operator new (size_t size);
   16166             : #endif
   16167             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   16168             :           void operator delete (void* pointer, size_t size);
   16169             : 
   16170             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   16171           0 :           void operator delete (void* pointer)
   16172             :              {
   16173             :             // This is the generated delete operator...
   16174           0 :                SgOpenclAccessModeModifier::operator delete (pointer,sizeof(SgOpenclAccessModeModifier));
   16175             :              }
   16176             : 
   16177             :       /*! \brief Returns the total number of IR nodes of this type */
   16178             :           static size_t numberOfNodes();
   16179             : 
   16180             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   16181             :           static size_t memoryUsage();
   16182             : 
   16183             :       // End of scope which started in IR nodes specific code 
   16184             :       /* */
   16185             : 
   16186             :       /* name Internal Functions
   16187             :           \brief Internal functions ... incomplete-documentation
   16188             : 
   16189             :           These functions have been made public as part of the design, but they are suggested for internal use 
   16190             :           or by particularly knowledgeable users for specialized tools or applications.
   16191             : 
   16192             :           \internal We could not make these private because they are required by user for special purposes. And 
   16193             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   16194             :          
   16195             :        */
   16196             : 
   16197             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   16198             :        // overridden in every class by *generated* implementation
   16199             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   16200             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   16201             :        // MS: 06/28/02 container of names of variables or container indices 
   16202             :        // used used in the traversal to access AST successor nodes
   16203             :        // overridden in every class by *generated* implementation
   16204             :       /*! \brief container of names of variables or container indices used used in the traversal
   16205             :           to access AST successor nodes overridden in every class by *generated* implementation */
   16206             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   16207             : 
   16208             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   16209             :        // than all the vector copies. The implementation for these functions is generated for each class.
   16210             :       /*! \brief return number of children in the traversal successor list */
   16211             :           virtual size_t get_numberOfTraversalSuccessors() override;
   16212             :       /*! \brief index-based access to traversal successors by index number */
   16213             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   16214             :       /*! \brief index-based access to traversal successors by child node */
   16215             :           virtual size_t get_childIndex(SgNode *child) override;
   16216             : 
   16217             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   16218             :        // MS: 08/16/2002 method for generating RTI information
   16219             :       /*! \brief return C++ Runtime-Time-Information */
   16220             :           virtual RTIReturnType roseRTI() override;
   16221             : #endif
   16222             :       /* */
   16223             : 
   16224             : 
   16225             : 
   16226             :       /* name Deprecated Functions
   16227             :           \brief Deprecated functions ... incomplete-documentation
   16228             : 
   16229             :           These functions have been deprecated from use.
   16230             :        */
   16231             :       /* */
   16232             : 
   16233             :       /*! returns a C style string (char*) representing the class name */
   16234             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   16235             : 
   16236             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   16237             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   16238             : #if 0
   16239             :       /*! returns old style Sage II enum values */
   16240             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   16241             :       /*! returns old style Sage II enum values */
   16242             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   16243             : #endif
   16244             :       /* */
   16245             : 
   16246             : 
   16247             : 
   16248             : 
   16249             :      public:
   16250             :       /* name Traversal Support Functions
   16251             :           \brief Traversal support functions ... incomplete-documentation
   16252             : 
   16253             :           These functions have been made public as part of the design, but they are suggested for internal use 
   16254             :           or by particularly knowledgable users for specialized tools or applications.
   16255             :        */
   16256             :       /* */
   16257             : 
   16258             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   16259             :        // (inferior to ROSE traversal mechanism, experimental).
   16260             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   16261             :        */
   16262             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   16263             : 
   16264             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   16265             :       /*! \brief support for the classic visitor pattern done in GoF */
   16266             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   16267             : 
   16268             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   16269             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   16270             :        */
   16271             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   16272             : 
   16273             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   16274             :        */
   16275             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   16276             : 
   16277             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   16278             :        // This traversal helps support internal tools that call static member functions.
   16279             :        // note: this function operates on the memory pools.
   16280             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   16281             :        */
   16282             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   16283             :       /* */
   16284             : 
   16285             : 
   16286             :      public:
   16287             :       /* name Memory Allocation Functions
   16288             :           \brief Memory allocations functions ... incomplete-documentation
   16289             : 
   16290             :           These functions have been made public as part of the design, but they are suggested for internal use 
   16291             :           or by particularly knowledgable users for specialized tools or applications.
   16292             :        */
   16293             :       /* */
   16294             : 
   16295             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   16296             : 
   16297             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   16298             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   16299             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   16300             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   16301             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   16302             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   16303             :           being used with the AST File I/O mechanism.
   16304             :        */
   16305             :           virtual bool isInMemoryPool() override;
   16306             : 
   16307             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   16308             : 
   16309             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   16310             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   16311             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   16312             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   16313             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   16314             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   16315             :           being used with the AST File I/O mechanism.
   16316             :        */
   16317             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   16318             : 
   16319             :       // DQ (4/30/2006): Modified to be a const function.
   16320             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   16321             : 
   16322             :           This functions is part of general support for many possible tools to operate 
   16323             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   16324             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   16325             :           less than the set of pointers used by the AST file I/O. This is part of
   16326             :           work implemented by Andreas, and support tools such as the AST graph generation.
   16327             : 
   16328             :           \warning This function can return unexpected data members and thus the 
   16329             :                    order and the number of elements is unpredicable and subject 
   16330             :                    to change.
   16331             : 
   16332             :           \returns STL vector of pairs of SgNode* and strings
   16333             :        */
   16334             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   16335             : 
   16336             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   16337             : 
   16338             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   16339             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   16340             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   16341             : 
   16342             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   16343             :                    and subject to change.
   16344             :        */
   16345             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   16346             : 
   16347             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   16348             : 
   16349             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   16350             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   16351             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   16352             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   16353             : 
   16354             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   16355             : 
   16356             :           \returns long
   16357             :        */
   16358             :           virtual long getChildIndex( SgNode* childNode ) const override;
   16359             : 
   16360             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   16361             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   16362             :       /* \brief Constructor for use by AST File I/O Mechanism
   16363             : 
   16364             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   16365             :           which obtained via fast binary file I/O from disk.
   16366             :        */
   16367             :        // SgOpenclAccessModeModifier( SgOpenclAccessModeModifierStorageClass& source );
   16368             : 
   16369             : 
   16370             : 
   16371             : 
   16372             : 
   16373             :  // JH (10/24/2005): methods added to support the ast file IO
   16374             :     private:
   16375             : 
   16376             :       /* name AST Memory Allocation Support Functions
   16377             :           \brief Memory allocations support....
   16378             : 
   16379             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   16380             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   16381             :           and support the AST File I/O Mechanism.
   16382             :        */
   16383             :       /* */
   16384             : 
   16385             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   16386             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   16387             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   16388             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   16389             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   16390             :           a correspinding one in the AST_FILE_IO class!
   16391             :        */
   16392             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   16393             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   16394             :       /* \brief Typedef used for low level memory access.
   16395             :        */
   16396             :        // typedef unsigned char* TestType;
   16397             : 
   16398             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   16399             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   16400             :       /* \brief Typedef used to hold memory addresses as values.
   16401             :        */
   16402             :        // typedef unsigned long  AddressType;
   16403             : 
   16404             : 
   16405             : 
   16406             :        // necessary, to have direct access to the p_freepointer and the private methods !
   16407             :       /*! \brief friend class declaration to support AST File I/O */
   16408             :           friend class AST_FILE_IO;
   16409             : 
   16410             :       /*! \brief friend class declaration to support AST File I/O */
   16411             :           friend class SgOpenclAccessModeModifierStorageClass;
   16412             : 
   16413             :       /*! \brief friend class declaration to support AST File I/O */
   16414             :           friend class AstSpecificDataManagingClass;
   16415             : 
   16416             :       /*! \brief friend class declaration to support AST File I/O */
   16417             :           friend class AstSpecificDataManagingClassStorageClass;
   16418             :     public:
   16419             :       /*! \brief IR node constructor to support AST File I/O */
   16420             :           SgOpenclAccessModeModifier( const SgOpenclAccessModeModifierStorageClass& source );
   16421             : 
   16422             :  // private: // JJW hack
   16423             :        /*
   16424             :           name AST Memory Allocation Support Variables
   16425             :           Memory allocations support variables 
   16426             : 
   16427             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   16428             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   16429             :           and support the AST File I/O Mechanism.
   16430             :        */
   16431             :       /* */
   16432             : 
   16433             :     public:
   16434             : 
   16435             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   16436             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   16437             :       // virtual SgNode* addRegExpAttribute();
   16438             :       /*! \brief Support for AST matching using regular expression.
   16439             : 
   16440             :           This support is incomplete and the subject of current research to define 
   16441             :           RegEx trees to support inexact matching.
   16442             :        */
   16443             :           SgOpenclAccessModeModifier* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   16444             : 
   16445             : // *** COMMON CODE SECTION ENDS HERE ***
   16446             : 
   16447             : 
   16448             : // End of memberFunctionString
   16449             : // Start of memberFunctionString
   16450             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   16451             : 
   16452             :      // the generated cast function
   16453             :      // friend ROSE_DLL_API SgOpenclAccessModeModifier* isSgOpenclAccessModeModifier ( SgNode* s );
   16454             : 
   16455             :           typedef SgModifier base_node_type;
   16456             : 
   16457             : 
   16458             : // End of memberFunctionString
   16459             : 
   16460             :      public: 
   16461             :          SgOpenclAccessModeModifier::access_mode_modifier_enum get_modifier() const;
   16462             :          void set_modifier(SgOpenclAccessModeModifier::access_mode_modifier_enum modifier);
   16463             : 
   16464             : 
   16465             :      public: 
   16466             :          virtual ~SgOpenclAccessModeModifier();
   16467             : 
   16468             : 
   16469             :      public: 
   16470             :          SgOpenclAccessModeModifier(); 
   16471             : 
   16472             :     protected:
   16473             : // Start of memberFunctionString
   16474             : SgOpenclAccessModeModifier::access_mode_modifier_enum p_modifier;
   16475             :           
   16476             : // End of memberFunctionString
   16477             : 
   16478             :     friend struct Rose::Traits::generated::describe_node_t<SgOpenclAccessModeModifier>;
   16479             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenclAccessModeModifier, SgOpenclAccessModeModifier::access_mode_modifier_enum,&SgOpenclAccessModeModifier::p_modifier>;
   16480             : 
   16481             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16482             : 
   16483             : 
   16484             :    };
   16485             : #endif
   16486             : 
   16487             : // postdeclarations for SgOpenclAccessModeModifier
   16488             : 
   16489             : /* #line 16490 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16490             : 
   16491             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   16492             : 
   16493             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16494             : 
   16495             : 
   16496             : /* #line 16497 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16497             : 
   16498             : 
   16499             : 
   16500             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16501             : 
   16502             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   16503             : //      This code is automatically generated for each 
   16504             : //      terminal and non-terminal within the defined 
   16505             : //      grammar.  There is a simple way to change the 
   16506             : //      code to fix bugs etc.  See the ROSE README file
   16507             : //      for directions.
   16508             : 
   16509             : // tps: (02/22/2010): Adding DLL export requirements
   16510             : #include "rosedll.h"
   16511             : 
   16512             : // predeclarations for SgName
   16513             : 
   16514             : /* #line 16515 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16515             : 
   16516             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   16517             : 
   16518             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16519             : 
   16520             : #if 1
   16521             : // Class Definition for SgName
   16522             : class ROSE_DLL_API SgName  : public SgSupport
   16523             :    {
   16524             :      public:
   16525             : 
   16526             : 
   16527             : /* #line 16528 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16528             : 
   16529             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   16530             : // Start of memberFunctionString
   16531             : /* #line 5563 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   16532             : 
   16533             :        // We need to define the default constructor explicitly
   16534             :        // (else p_char is not initialized properly to NULL)
   16535             :           SgName();
   16536             :           SgName(const char* str);
   16537             :           SgName(const std::string& str);
   16538             :           SgName(const SgName& n);
   16539             : 
   16540             :       // ~SgName();
   16541             : 
   16542             :           int operator!=(const SgName& n1) const;
   16543             :           int operator==(const SgName& n1) const;
   16544             :           int operator< (const SgName& n1) const;
   16545             : 
   16546             :        // DQ (11/27/2010): Added to support case sensitive and case insensitive semantics.
   16547             :           static bool caseInsensitiveEquality ( const SgName & x, const SgName & y );
   16548             : 
   16549             :        // DQ (4/21/2020): I think this might be used but not defined.
   16550             :        // Added to support assignments to string variables.
   16551             :           operator std::string () const;
   16552             : 
   16553             :        // DQ (11/28/2009): Fixed return value of function to be "bool" instead of "int"
   16554             :           bool is_null(void) const;
   16555             :           void replace_space(char t);
   16556             :           SgName& operator<<(const std::string& str);
   16557             : 
   16558             :           static SgName itoname(int val);
   16559             : 
   16560             :           SgName& operator<<(int val);
   16561             :           SgName& operator=(const SgName& n1);
   16562             :           SgName& tail(int n); // keep std::string after n
   16563             :           SgName& head(int n); // keep first n chars
   16564             : 
   16565             :           const char* str() const;
   16566             :           std::string& getString();
   16567             :           const std::string& getString() const;
   16568             : 
   16569             :        // In places where the str() member function is called it is toe get the
   16570             :        // length of the std::string in p_char so it makes since to provide a member
   16571             :        // function to get the length instead of making a the str() function a
   16572             :        // const member function!
   16573             :           unsigned int get_length() const;
   16574             : 
   16575             :        // DQ: We made this a const function to work with the Sage Symbol Table implementation
   16576             :        // But it is a bad idea to have it since it causes problems where it is used.
   16577             :        // EXAMPLE: char* char_pointer = tempSgName;
   16578             :        // this code fragment causes a new SgName object to be build and the pointer to
   16579             :        // the std::string in the new object is returned then the SgName object goes out of
   16580             :        // scope and then reading the std::string causes a purify FMR error!
   16581             :        // It might be that it should not be a const function (this is likely the
   16582             :        // real source of the problem), but I would like to remove it anyway for
   16583             :        // now to simplify the debugging!
   16584             :        // operator char*() const;
   16585             : 
   16586             :        // To handle "assert(p_name != NULL);" where p_name is a SgName
   16587             :        // object, STL requires that the "operator==()" be defined
   16588             :        // (STL builds the "operator!=()" from the "operator==()"
   16589             :           bool operator== (const int) const { return false; }
   16590             : 
   16591             :           void display( const std::string& label ) const;
   16592             : 
   16593             :        // DQ (9/9/2004): Supporting function for building qualified names (specialied std::string concatination)
   16594             :           static SgName assembleQualifiedName(const SgName & scopeQualifiedName, const SgName & localName);
   16595             : 
   16596             :        // DQ (9/9/2004): friend function (string concatination)
   16597             :           ROSE_DLL_API friend SgName operator+(const SgName & n1, const SgName & n2);
   16598             : 
   16599             :        // DQ (11/15/2004): Added to support general string operations (first used in the unparser)
   16600             :           SgName & operator+= (const SgName & n1);
   16601             : 
   16602             :           SgName invertCase() const;
   16603             : 
   16604             : 
   16605             : 
   16606             : // End of memberFunctionString
   16607             : // Start of memberFunctionString
   16608             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   16609             : 
   16610             : // *** COMMON CODE SECTION BEGINS HERE ***
   16611             : 
   16612             :     public:
   16613             : 
   16614             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   16615             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   16616             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   16617             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   16618             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   16619             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   16620             : 
   16621             :       /*! \brief returns a string representing the class name */
   16622             :           virtual std::string class_name() const override;
   16623             : 
   16624             :       /*! \brief returns new style SageIII enum values */
   16625             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   16626             : 
   16627             :       /*! \brief static variant value */
   16628             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   16629             :        // static const VariantT static_variant = V_SgName;
   16630             :           enum { static_variant = V_SgName };
   16631             : 
   16632             :        /* the generated cast function */
   16633             :       /*! \brief Casts pointer from base class to derived class */
   16634             :           ROSE_DLL_API friend       SgName* isSgName(       SgNode * s );
   16635             : 
   16636             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   16637             :           ROSE_DLL_API friend const SgName* isSgName( const SgNode * s );
   16638             : 
   16639             :      // ******************************************
   16640             :      // * Memory Pool / New / Delete
   16641             :      // ******************************************
   16642             : 
   16643             :      public:
   16644             :           /// \private
   16645             :           static const unsigned pool_size; //
   16646             :           /// \private
   16647             :           static std::vector<unsigned char *> pools; //
   16648             :           /// \private
   16649             :           static SgName * next_node; // 
   16650             : 
   16651             :           /// \private
   16652             :           static unsigned long initializeStorageClassArray(SgNameStorageClass *); //
   16653             : 
   16654             :           /// \private
   16655             :           static void clearMemoryPool(); //
   16656             :           static void deleteMemoryPool(); //
   16657             : 
   16658             :           /// \private
   16659             :           static void extendMemoryPoolForFileIO(); //
   16660             : 
   16661             :           /// \private
   16662             :           static SgName * getPointerFromGlobalIndex(unsigned long); //
   16663             :           /// \private
   16664             :           static SgName * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   16665             : 
   16666             :           /// \private
   16667             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   16668             :           /// \private
   16669             :           static void resetValidFreepointers(); //
   16670             :           /// \private
   16671             :           static unsigned long getNumberOfLastValidPointer(); //
   16672             : 
   16673             : 
   16674             : #if defined(INLINE_FUNCTIONS)
   16675             :       /*! \brief returns pointer to newly allocated IR node */
   16676             :           inline void *operator new (size_t size);
   16677             : #else
   16678             :       /*! \brief returns pointer to newly allocated IR node */
   16679             :           void *operator new (size_t size);
   16680             : #endif
   16681             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   16682             :           void operator delete (void* pointer, size_t size);
   16683             : 
   16684             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   16685           0 :           void operator delete (void* pointer)
   16686             :              {
   16687             :             // This is the generated delete operator...
   16688           0 :                SgName::operator delete (pointer,sizeof(SgName));
   16689             :              }
   16690             : 
   16691             :       /*! \brief Returns the total number of IR nodes of this type */
   16692             :           static size_t numberOfNodes();
   16693             : 
   16694             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   16695             :           static size_t memoryUsage();
   16696             : 
   16697             :       // End of scope which started in IR nodes specific code 
   16698             :       /* */
   16699             : 
   16700             :       /* name Internal Functions
   16701             :           \brief Internal functions ... incomplete-documentation
   16702             : 
   16703             :           These functions have been made public as part of the design, but they are suggested for internal use 
   16704             :           or by particularly knowledgeable users for specialized tools or applications.
   16705             : 
   16706             :           \internal We could not make these private because they are required by user for special purposes. And 
   16707             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   16708             :          
   16709             :        */
   16710             : 
   16711             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   16712             :        // overridden in every class by *generated* implementation
   16713             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   16714             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   16715             :        // MS: 06/28/02 container of names of variables or container indices 
   16716             :        // used used in the traversal to access AST successor nodes
   16717             :        // overridden in every class by *generated* implementation
   16718             :       /*! \brief container of names of variables or container indices used used in the traversal
   16719             :           to access AST successor nodes overridden in every class by *generated* implementation */
   16720             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   16721             : 
   16722             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   16723             :        // than all the vector copies. The implementation for these functions is generated for each class.
   16724             :       /*! \brief return number of children in the traversal successor list */
   16725             :           virtual size_t get_numberOfTraversalSuccessors() override;
   16726             :       /*! \brief index-based access to traversal successors by index number */
   16727             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   16728             :       /*! \brief index-based access to traversal successors by child node */
   16729             :           virtual size_t get_childIndex(SgNode *child) override;
   16730             : 
   16731             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   16732             :        // MS: 08/16/2002 method for generating RTI information
   16733             :       /*! \brief return C++ Runtime-Time-Information */
   16734             :           virtual RTIReturnType roseRTI() override;
   16735             : #endif
   16736             :       /* */
   16737             : 
   16738             : 
   16739             : 
   16740             :       /* name Deprecated Functions
   16741             :           \brief Deprecated functions ... incomplete-documentation
   16742             : 
   16743             :           These functions have been deprecated from use.
   16744             :        */
   16745             :       /* */
   16746             : 
   16747             :       /*! returns a C style string (char*) representing the class name */
   16748             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   16749             : 
   16750             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   16751             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   16752             : #if 0
   16753             :       /*! returns old style Sage II enum values */
   16754             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   16755             :       /*! returns old style Sage II enum values */
   16756             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   16757             : #endif
   16758             :       /* */
   16759             : 
   16760             : 
   16761             : 
   16762             : 
   16763             :      public:
   16764             :       /* name Traversal Support Functions
   16765             :           \brief Traversal support functions ... incomplete-documentation
   16766             : 
   16767             :           These functions have been made public as part of the design, but they are suggested for internal use 
   16768             :           or by particularly knowledgable users for specialized tools or applications.
   16769             :        */
   16770             :       /* */
   16771             : 
   16772             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   16773             :        // (inferior to ROSE traversal mechanism, experimental).
   16774             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   16775             :        */
   16776             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   16777             : 
   16778             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   16779             :       /*! \brief support for the classic visitor pattern done in GoF */
   16780             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   16781             : 
   16782             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   16783             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   16784             :        */
   16785             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   16786             : 
   16787             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   16788             :        */
   16789             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   16790             : 
   16791             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   16792             :        // This traversal helps support internal tools that call static member functions.
   16793             :        // note: this function operates on the memory pools.
   16794             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   16795             :        */
   16796             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   16797             :       /* */
   16798             : 
   16799             : 
   16800             :      public:
   16801             :       /* name Memory Allocation Functions
   16802             :           \brief Memory allocations functions ... incomplete-documentation
   16803             : 
   16804             :           These functions have been made public as part of the design, but they are suggested for internal use 
   16805             :           or by particularly knowledgable users for specialized tools or applications.
   16806             :        */
   16807             :       /* */
   16808             : 
   16809             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   16810             : 
   16811             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   16812             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   16813             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   16814             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   16815             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   16816             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   16817             :           being used with the AST File I/O mechanism.
   16818             :        */
   16819             :           virtual bool isInMemoryPool() override;
   16820             : 
   16821             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   16822             : 
   16823             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   16824             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   16825             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   16826             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   16827             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   16828             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   16829             :           being used with the AST File I/O mechanism.
   16830             :        */
   16831             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   16832             : 
   16833             :       // DQ (4/30/2006): Modified to be a const function.
   16834             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   16835             : 
   16836             :           This functions is part of general support for many possible tools to operate 
   16837             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   16838             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   16839             :           less than the set of pointers used by the AST file I/O. This is part of
   16840             :           work implemented by Andreas, and support tools such as the AST graph generation.
   16841             : 
   16842             :           \warning This function can return unexpected data members and thus the 
   16843             :                    order and the number of elements is unpredicable and subject 
   16844             :                    to change.
   16845             : 
   16846             :           \returns STL vector of pairs of SgNode* and strings
   16847             :        */
   16848             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   16849             : 
   16850             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   16851             : 
   16852             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   16853             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   16854             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   16855             : 
   16856             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   16857             :                    and subject to change.
   16858             :        */
   16859             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   16860             : 
   16861             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   16862             : 
   16863             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   16864             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   16865             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   16866             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   16867             : 
   16868             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   16869             : 
   16870             :           \returns long
   16871             :        */
   16872             :           virtual long getChildIndex( SgNode* childNode ) const override;
   16873             : 
   16874             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   16875             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   16876             :       /* \brief Constructor for use by AST File I/O Mechanism
   16877             : 
   16878             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   16879             :           which obtained via fast binary file I/O from disk.
   16880             :        */
   16881             :        // SgName( SgNameStorageClass& source );
   16882             : 
   16883             : 
   16884             : 
   16885             : 
   16886             : 
   16887             :  // JH (10/24/2005): methods added to support the ast file IO
   16888             :     private:
   16889             : 
   16890             :       /* name AST Memory Allocation Support Functions
   16891             :           \brief Memory allocations support....
   16892             : 
   16893             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   16894             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   16895             :           and support the AST File I/O Mechanism.
   16896             :        */
   16897             :       /* */
   16898             : 
   16899             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   16900             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   16901             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   16902             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   16903             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   16904             :           a correspinding one in the AST_FILE_IO class!
   16905             :        */
   16906             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   16907             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   16908             :       /* \brief Typedef used for low level memory access.
   16909             :        */
   16910             :        // typedef unsigned char* TestType;
   16911             : 
   16912             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   16913             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   16914             :       /* \brief Typedef used to hold memory addresses as values.
   16915             :        */
   16916             :        // typedef unsigned long  AddressType;
   16917             : 
   16918             : 
   16919             : 
   16920             :        // necessary, to have direct access to the p_freepointer and the private methods !
   16921             :       /*! \brief friend class declaration to support AST File I/O */
   16922             :           friend class AST_FILE_IO;
   16923             : 
   16924             :       /*! \brief friend class declaration to support AST File I/O */
   16925             :           friend class SgNameStorageClass;
   16926             : 
   16927             :       /*! \brief friend class declaration to support AST File I/O */
   16928             :           friend class AstSpecificDataManagingClass;
   16929             : 
   16930             :       /*! \brief friend class declaration to support AST File I/O */
   16931             :           friend class AstSpecificDataManagingClassStorageClass;
   16932             :     public:
   16933             :       /*! \brief IR node constructor to support AST File I/O */
   16934             :           SgName( const SgNameStorageClass& source );
   16935             : 
   16936             :  // private: // JJW hack
   16937             :        /*
   16938             :           name AST Memory Allocation Support Variables
   16939             :           Memory allocations support variables 
   16940             : 
   16941             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   16942             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   16943             :           and support the AST File I/O Mechanism.
   16944             :        */
   16945             :       /* */
   16946             : 
   16947             :     public:
   16948             : 
   16949             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   16950             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   16951             :       // virtual SgNode* addRegExpAttribute();
   16952             :       /*! \brief Support for AST matching using regular expression.
   16953             : 
   16954             :           This support is incomplete and the subject of current research to define 
   16955             :           RegEx trees to support inexact matching.
   16956             :        */
   16957             :           SgName* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   16958             : 
   16959             : // *** COMMON CODE SECTION ENDS HERE ***
   16960             : 
   16961             : 
   16962             : // End of memberFunctionString
   16963             : // Start of memberFunctionString
   16964             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   16965             : 
   16966             :      // the generated cast function
   16967             :      // friend ROSE_DLL_API SgName* isSgName ( SgNode* s );
   16968             : 
   16969             :           typedef SgSupport base_node_type;
   16970             : 
   16971             : 
   16972             : // End of memberFunctionString
   16973             : 
   16974             : 
   16975             : 
   16976             :      public: 
   16977             :          virtual ~SgName();
   16978             : 
   16979             :     protected:
   16980             : // Start of memberFunctionString
   16981             : std::string p_char;
   16982             :           
   16983             : // End of memberFunctionString
   16984             : 
   16985             :     friend struct Rose::Traits::generated::describe_node_t<SgName>;
   16986             :     friend struct Rose::Traits::generated::describe_field_t<SgName, std::string,&SgName::p_char>;
   16987             : 
   16988             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   16989             : 
   16990             : 
   16991             :    };
   16992             : #endif
   16993             : 
   16994             : // postdeclarations for SgName
   16995             : 
   16996             : /* #line 16997 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   16997             : /* #line 5638 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   16998             : 
   16999             : // extern const SgName defaultName("defaultName");
   17000             : 
   17001             : // DQ (10/5/2007): We no longer need this!
   17002             : // extern const SgName SgdefaultName;
   17003             : 
   17004             : 
   17005             : 
   17006             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   17007             : 
   17008             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   17009             : 
   17010             : 
   17011             : /* #line 17012 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   17012             : 
   17013             : 
   17014             : 
   17015             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   17016             : 
   17017             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   17018             : //      This code is automatically generated for each 
   17019             : //      terminal and non-terminal within the defined 
   17020             : //      grammar.  There is a simple way to change the 
   17021             : //      code to fix bugs etc.  See the ROSE README file
   17022             : //      for directions.
   17023             : 
   17024             : // tps: (02/22/2010): Adding DLL export requirements
   17025             : #include "rosedll.h"
   17026             : 
   17027             : // predeclarations for SgSymbolTable
   17028             : 
   17029             : /* #line 17030 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   17030             : /* #line 4576 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   17031             : 
   17032             : 
   17033             : std::ostream & operator<< ( std::ostream & os, const std::vector<bool> & bv );
   17034             : 
   17035             : // forward class declaration to support case sensitive/insensitive symbol tables.
   17036             : class rose_hash_multimap;
   17037             : 
   17038             : /*! \brief Name equality operator support for symbol tables within ROSE.
   17039             :  */
   17040             : struct eqstr
   17041             :    {
   17042             :   // DQ (12/22/2005): Added constructor to support case insensitive name semantics
   17043             :      const rose_hash_multimap* hash_multimap;
   17044             : 
   17045             :   // DQ (12/22/2005): Added constructor to support case insensitive name semantics
   17046      304102 :      eqstr(const rose_hash_multimap* p) : hash_multimap(p) {}
   17047             : 
   17048             :   // The definition of this function requires the reference to the member function
   17049             :   // rose_hash_multimap::get_case_insensitive_semantics() so it must be seen after
   17050             :   // the rose_hash_multimap class definition.
   17051             :      bool operator()(const SgName & s1, const SgName & s2) const;
   17052             :    };
   17053             : 
   17054             : /*! \brief Hash name support for symbol tables within ROSE.
   17055             :  */
   17056             : struct hash_Name
   17057             :    {
   17058             :   // DQ (12/22/2005): Added constructor to support case insensitive name semantics
   17059             :      const rose_hash_multimap* hash_multimap;
   17060             : 
   17061             :   // CH (4/8/2010): Use boost::unordered instead
   17062             :   // CH (4/13/2010): Use boost::hash<string> instead
   17063             :   // rose_hash::hash<const char*> hasher;
   17064             :      rose_hash::hash<std::string> hasher;
   17065             : 
   17066             :      public:
   17067             :        // DQ (12/22/2005): Added constructor to support case insensitive name semantics
   17068      304102 :           hash_Name(const rose_hash_multimap* p) : hash_multimap(p) {}
   17069             : 
   17070             :        // The definition of this function requires the reference to the member function
   17071             :        // rose_hash_multimap::get_case_insensitive_semantics() so it must be seen after
   17072             :        // the rose_hash_multimap class definition.
   17073             :           size_t operator()(const SgName & name) const;
   17074             :    };
   17075             : 
   17076             : /*! \brief Hash table support for symbol tables within ROSE.
   17077             : 
   17078             :        This hash table support is used by the symbol tables within ROSE.  There is one global
   17079             :     symbol table for all function symbols and then there symbol tables for each scope
   17080             :     (implemented in the SgScopeDeclaration).
   17081             : 
   17082             :     \internal Trivia: The first version was developed by Alin Jula, and as payment I bought him dinner
   17083             :                       when Ken Kennedy visited LLNL (summer of 2005).
   17084             : 
   17085             :  */
   17086             : 
   17087             : // tps (11/19/2009) : Constructor of hash_multimap in MSVS is different
   17088             : // CH (4/8/2010): Use boost::unordered instead
   17089             : 
   17090             : class rose_hash_multimap : public rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>
   17091             :    {
   17092             :      protected:
   17093             :           SgNode * parent;
   17094             :           bool case_insensitive_semantics;
   17095             : 
   17096             :      public:
   17097             :        // DQ (12/22/2005): Added initialization of parent pointer as suggested by Jochen
   17098             : #if 0
   17099             :        // DQ (11/27/2010): Older version of code before adding support for case insensitive behavior.
   17100             :           rose_hash_multimap(bool case_insensitive_semantics = false)
   17101             :           // : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(), parent(NULL)
   17102             :              : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(boost::unordered_detail::default_bucket_count,hash_Name(),eqstr(case_insensitive_semantics)), parent(NULL)
   17103             :              {}
   17104             : 
   17105             :          rose_hash_multimap(int sz, bool case_insensitive_semantics = false)
   17106             :           // : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(sz), parent(NULL)
   17107             :              : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(sz,hash_Name(),eqstr(case_insensitive_semantics)), parent(NULL)
   17108             :              {}
   17109             : 
   17110             :           rose_hash_multimap(const rose_hash_multimap & rhs)
   17111             :              : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(/*(rose_hash_multimap)*/rhs), parent(rhs.parent)
   17112             :              {}
   17113             : #else
   17114             :        // DQ (11/27/2010): Newer version of code after adding support for case insensitive behavior.
   17115       26900 :           rose_hash_multimap()
   17116             :           // : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(boost::unordered_detail::default_bucket_count,hash_Name(this),eqstr(this)), parent(NULL), case_insensitive_semantics(false)
   17117       26900 :              : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(17,hash_Name(this),eqstr(this)), parent(NULL), case_insensitive_semantics(false)
   17118             :              {
   17119             : #if 0
   17120             :             // DQ (11/5/2020): Added debugging support.
   17121             :                printf ("In rose_hash_multimap() default constructor \n");
   17122             : #endif
   17123             :              }
   17124             : 
   17125      277202 :          rose_hash_multimap(int sz)
   17126      277202 :              : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(sz,hash_Name(this),eqstr(this)), parent(NULL), case_insensitive_semantics(false)
   17127             :              {
   17128             : #if 0
   17129             :             // DQ (11/5/2020): Added debugging support.
   17130             :                printf ("In rose_hash_multimap(int sz) constructor \n");
   17131             : #endif
   17132             :              }
   17133             : 
   17134             :           rose_hash_multimap(const rose_hash_multimap & rhs)
   17135             :              : rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>(/*(rose_hash_multimap)*/rhs), parent(rhs.parent), case_insensitive_semantics(rhs.case_insensitive_semantics)
   17136             :              {
   17137             : #if 0
   17138             :             // DQ (11/5/2020): Added debugging support.
   17139             :                printf ("In rose_hash_multimap() copy constructor \n");
   17140             : #endif
   17141             :              }
   17142             : #endif
   17143             :           void set_parent(SgNode * new_parent)
   17144             :              {
   17145             :                parent = new_parent;
   17146             :              }
   17147             : 
   17148             :           SgNode* get_parent() const
   17149             :              {
   17150             :                return parent;
   17151             :              }
   17152             : 
   17153             :        // DQ (11/28/2010): Added support to set/unset case sensitivity in symbol table handling.
   17154         192 :           void set_case_insensitive_semantics(bool b)
   17155             :              {
   17156         192 :                case_insensitive_semantics = b;
   17157         192 :              }
   17158             : 
   17159             :        // DQ (11/28/2010): Added support to set/unset case sensitivity in symbol table handling.
   17160    99759800 :           bool get_case_insensitive_semantics() const
   17161             :              {
   17162    99759800 :                return case_insensitive_semantics;
   17163             :              }
   17164             : 
   17165             :           void delete_elements();
   17166             : 
   17167       54458 :          ~rose_hash_multimap()
   17168       54458 :              {
   17169             : #if 0
   17170             :                printf ("Inside of rose_hash_multimap destructor: this = %p derived from public rose_hash::unordered_multimap<SgName, SgSymbol*, hash_Name, eqstr>: \n",this);
   17171             : #endif
   17172       54458 :                delete_elements();
   17173             : 
   17174             :             // DQ (12/22/2005): Added initialization of parent pointer as suggested by Jochen
   17175       54458 :                parent = NULL;
   17176             :              }
   17177             : 
   17178             :      // JH (01/01/2006) friend class declarations to get direct access to data member for the ast file IO
   17179             :         friend class AST_FILE_IO;
   17180             :         friend class SgSymbolTableStorageClass;
   17181             :         friend class EasyStorage<rose_hash_multimap*>;
   17182             :    };
   17183             : 
   17184             : 
   17185             : std::ostream & operator<< ( std::ostream & os, const rose_hash_multimap::iterator & rhm_it );
   17186             : 
   17187             : 
   17188             : 
   17189             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   17190             : 
   17191             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   17192             : 
   17193             : #if 1
   17194             : // Class Definition for SgSymbolTable
   17195             : class ROSE_DLL_API SgSymbolTable  : public SgSupport
   17196             :    {
   17197             :      public:
   17198             : 
   17199             : 
   17200             : /* #line 17201 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   17201             : 
   17202             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   17203             : // Start of memberFunctionString
   17204             : /* #line 4735 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   17205             : 
   17206             : 
   17207             :        // AJ (10/21/2004): Added support STL based implementation of hash table.
   17208             :        // I have replaced the p_table in the SgSymbolTable from a SgSymbolHashMultimap
   17209             :        // to the STL hash_multimap<SgName,SgSymbol*,..>. The hash function for SgName
   17210             :        // uses the native STL hash function for char* . The methods of SgSymbolTable
   17211             :        // were adjusted (where necessary) to accomodate the STL hash_multimap table.
   17212             :        // What we have now is the old interaface of SgSymbolTable working with STL
   17213             :        // hash_multimap AND the STL interaface through the hash_multimap table.
   17214             : 
   17215             :        // DQ (1/30/2007): Added many member functions back into ROSE, now that we both
   17216             :        // better appriciate why they are required and we are overhaling the symbol
   17217             :        // table interface generally.
   17218             :        // Comment from 9/7/2006):
   17219             :        // Many member functions were removed because they are (with few exceptions,
   17220             :        // where they have been recently restored) infreqently used and too
   17221             :        // much funcionality to support robustly.  Now that we use STL internally
   17222             :        // and we make the STL hash map available, users have all possible access.
   17223             : 
   17224             :        // typedefs to STL container used internally
   17225             :           typedef rose_hash_multimap BaseHashType;
   17226             :           typedef BaseHashType::iterator hash_iterator;
   17227             : 
   17228             :        // Default constructor (builds the hash table using a default size: 17 typically)
   17229             :           SgSymbolTable();
   17230             : 
   17231             :        //! Added to support scopes that have more symbols (e.g. SgGlobal, and the function type table)
   17232             :           SgSymbolTable(int sz);
   17233             : 
   17234             :        // Destructors are automatically generated by ROSETTA and so should not be explicitly represented
   17235             :        // ~SgSymbolTable();
   17236             : 
   17237             :        // General function used to build AST
   17238             :           void insert ( const SgName & name, SgSymbol *sp );
   17239             : 
   17240             : #if 1
   17241             :        // DQ (11/27/2010): Changing the return type to "bool"
   17242             :        // DQ (1/31/2007): Depricated (is not well named and should return bool)
   17243             :        // int  find   ( const SgName & name, SgSymbol *sp, bool case_insensitive = false ) ROSE_DEPRECATED_FUNCTION;
   17244             :           bool find   ( const SgName & name, SgSymbol *sp ) ROSE_DEPRECATED_FUNCTION;
   17245             : #endif
   17246             : 
   17247             :        // DQ (1/31/2007): New functions that will replace the depricated find() member function
   17248             :        // Note that this is log n in complexity
   17249             :           bool exists ( const SgName &, SgSymbol *sp ) const; //! Complexity O(log n), checks for existence of symbol before matching against names.
   17250             : 
   17251             :        // DQ (1/31/2007): This is log n in complexity
   17252             :           bool exists ( const SgName & name) const;               //! Complexity O(log n)
   17253             : 
   17254             :        // DQ (1/31/2007): This is linear in complexity (expensive)
   17255             :           bool exists ( const SgSymbol *sp ) const;           //! Complexity O(n)
   17256             : 
   17257             :        // DQ (2/6/2007): find functions that take the declarations that are internally associated with SgSymbol IR nodes.
   17258             :           SgSymbol* find( const SgInitializedName* initializedName); //! Complexity O(n)
   17259             :           SgSymbol* find( const SgFunctionType* functionType);       //! Complexity O(n)
   17260             :           SgSymbol* find( const SgStatement* statement);             //! Complexity O(n)
   17261             : 
   17262             :        // DQ (1/30/2007): Added general remove function for an explicitly identified SgSymbol
   17263             :           void remove ( const SgSymbol* symbol );  //! Complexity O(log n)
   17264             : 
   17265             :        // DQ (1/30/2007): Added general remove functions for all SgSymbol IR nodes.
   17266             :        // This function will remove all symbols with the specified name (even ones of
   17267             :        // different types, see rest of comment).
   17268             :        // This function is a bit dangerous except for function types since only for the
   17269             :        // function type table are the names unique.  For non-function type symbol
   17270             :        // tables classes and typedefs can have the same name (e.g. "typedef struct X {} X;")
   17271             :        // so removing the name might have unexpected results!
   17272             :           void remove_function_type ( const SgName & name); //! Complexity O(log n)
   17273             : 
   17274             : #if 0
   17275             :        // DQ (1/30/2007): Added remove functions for each sort of SgSymbol IR node
   17276             :        // This removes all the symbols matching the name or name and type of symbol
   17277             :        // These can be dangerous where there are the names in the symbol table are
   17278             :        // not unique and especially when using multiple un-names declarations of
   17279             :        // the same type or symbol.
   17280             :           void remove_function      ( const SgName & );
   17281             :           void remove_class         ( const SgName & );
   17282             :           void remove_enum          ( const SgName & );
   17283             :           void remove_typedef       ( const SgName & );
   17284             :           void remove_label         ( const SgName & );
   17285             :           void remove_var           ( const SgName & );
   17286             :           void remove_enum_field    ( const SgName & );
   17287             :           void remove_function_type ( const SgName & );
   17288             :           void remove_namespace     ( const SgName & );
   17289             : #endif
   17290             : 
   17291             : #if 0
   17292             :        // DQ (11/27/2010): Removing these to avoid updating them to have consistant case handling support (deprecated 4-5 years ago).
   17293             : 
   17294             :        // Used by SgScopeStatement::lookup_symbol(const SgName& n)
   17295             :           SgSymbol* findany(const SgName &) ROSE_DEPRECATED_FUNCTION;
   17296             : 
   17297             :        // Used only for global function type table
   17298             :           SgFunctionTypeSymbol* findfunctype(const SgName&) ROSE_DEPRECATED_FUNCTION;
   17299             : 
   17300             :        // Used by Qing's AST Interface code
   17301             :           SgVariableSymbol*  findvar(const SgName &) ROSE_DEPRECATED_FUNCTION;
   17302             :           SgClassSymbol*     findclass(const SgName &) ROSE_DEPRECATED_FUNCTION;
   17303             :           SgFunctionSymbol*  findfunc(const SgName&) ROSE_DEPRECATED_FUNCTION;
   17304             :           SgFunctionSymbol*  findfunc(const SgName&, const SgType*) ROSE_DEPRECATED_FUNCTION;
   17305             : #endif
   17306             : 
   17307             :        // DQ (1/30/2007): New interface member functions using name.
   17308             :        // These function search first against the name and then iteratively continue through
   17309             :        // the internal STL container to look for an entry that match the name and the type of
   17310             :        // the SgSymbol.  This is optimially fast only for the case where there are unique names.
   17311             :        // SgSymbol* find_any(const SgName & name);                   //! Complexity O(log n) for first match against name, then O(n)
   17312             :           SgSymbol* find_any(const SgName & name, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentList); //! Complexity O(log n) for first match against name, then O(n)
   17313             : 
   17314             :           SgVariableSymbol*  find_variable(const SgName & name);               //! Complexity O(log n) for first match against name, then O(n)
   17315             : 
   17316             : // #ifndef ROSE_USE_SWIG_SUPPORT
   17317             : #ifndef SWIG
   17318             :        // DQ (3/10/2013): These functions are left undefined in the final link step for SWIG support, so remove it from SWIG processing for now.
   17319             : 
   17320             :        // DQ (12/27/2011): Added support for template declarations in the AST.
   17321             :        // SgTemplateVariableSymbol* find_template_variable(const SgName & name);
   17322             :           SgVariableSymbol*         find_nontemplate_variable(const SgName & name); //! Complexity O(log n) for first match against name, then O(n)
   17323             : #endif
   17324             :           SgClassSymbol*     find_class(const SgName & name); //! Complexity O(log n) for first match against name, then O(n)
   17325             : 
   17326             :        // DQ (1/23/2019): This function adds the support to find the SgAlias symbols of a given name.
   17327             :        // This is important in handling the viability of symbols through base classes when private base
   17328             :        // class derivation is used.
   17329             :        // SgAliasSymbol* find_alias(const SgName & nm);
   17330             : 
   17331             :        // DQ (8/10/2013): I have needed to change the API to support more than just template arguments (adding support for template parameters).
   17332             :        // DQ (8/8/2013): I have needed to change the API to support more than just classes.
   17333             :        // DQ (8/22/2012): We need more information to disambiguate where template argument name qualification would be important. See test2012_195.C.
   17334             :        // bool hasMatchingTemplateArgumentsOrNoTemplateArguments(SgTemplateArgumentPtrList* X_templateArgumentsList, SgClassSymbol* classSymbol);
   17335             :        // bool hasMatchingTemplateArgumentsOrNoTemplateArguments(SgTemplateArgumentPtrList* X_templateArgumentsList, SgSymbol* symbol);
   17336             :        // bool hasMatchingTemplateArgumentsOrNoTemplateArguments(SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentsList, SgSymbol* symbol);
   17337             :           bool hasMatchingTemplateParametersArgumentsOrNoTemplateParametersArguments(SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentsList, SgSymbol* symbol);
   17338             :           bool hasMatchingTemplateParametersOrNoTemplateParameters(SgTemplateParameterPtrList* templateParameterList, SgSymbol* symbol);
   17339             :           bool hasMatchingTemplateArgumentsOrNoTemplateArguments(SgTemplateArgumentPtrList* templateArgumentsList, SgSymbol* symbol);
   17340             :        // template <class T> bool hasMatchingTemplateParametersOrArgumentsOrNoTemplateParametersOrArguments(T* templateParametersOrArgumentsList, SgSymbol* symbol);
   17341             :           template <class T> bool hasMatchingTemplateParametersOrArgumentsOrNoTemplateParametersOrArguments(std::vector<T*>* templateParametersOrArgumentsList, SgSymbol* symbol);
   17342             : 
   17343             :           SgClassSymbol* find_class(const SgName & name, SgTemplateArgumentPtrList* templateArgumentsList); //! Complexity O(log n) for first match against name, then O(n)
   17344             : 
   17345             :        // DQ (1/23/2019): This function adds the support to find the SgAlias symbols of a given name.
   17346             :        // This is important in handling the viability of symbols through base classes when private base
   17347             :        // class derivation is used.
   17348             :        // SgAliasSymbol* find_alias(const SgName & name, SgTemplateArgumentPtrList* templateArgumentsList); //! Complexity O(log n) for first match against name, then O(n)
   17349             : 
   17350             :           SgNonrealSymbol*   find_nonreal(const SgName & name, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentsList);
   17351             : 
   17352             :           SgFunctionSymbol* find_function(const SgName& name);                //! Complexity O(log n) for first match against name, then O(n)
   17353             :        // SgFunctionSymbol* find_function(const SgName&, const SgType* name); //! Complexity O(log n) for first match against name, then O(n)
   17354             :           SgFunctionSymbol* find_function(const SgName&, const SgType* name, SgTemplateArgumentPtrList* templateArgumentList = NULL);
   17355             : 
   17356             :           SgFunctionTypeSymbol* find_function_type(const SgName& name);        //! Complexity O(log n) for first match against name, then O(n)
   17357             : 
   17358             :        // Additional find functions (using name)
   17359             :           SgTypedefSymbol*   find_typedef(const SgName & name);    //! Complexity O(log n) for first match against name, then O(n)
   17360             :           SgEnumSymbol*      find_enum(const SgName & name);       //! Complexity O(log n) for first match against name, then O(n)
   17361             :           SgEnumFieldSymbol* find_enum_field(const SgName & name); //! Complexity O(log n) for first match against name, then O(n)
   17362             :           SgLabelSymbol*     find_label(const SgName & name);      //! Complexity O(log n) for first match against name, then O(n)
   17363             :           SgNamespaceSymbol* find_namespace(const SgName & name);  //! Complexity O(log n) for first match against name, then O(n)
   17364             : 
   17365             : #if 0
   17366             :        // DQ (8/13/2013): Since function templates, member function templates, and class templates are symbols not derived from SgTemplateSymbol,
   17367             :        // this function is not very useful since it returns a SgTemplateSymbol.  This was a part of the older pre-EDG4x API.
   17368             :        // DQ (8/10/2013): Added support for specification of template parameters (for member and non-member function overloading) and template arguments (for class specialization).
   17369             :        // SgTemplateSymbol*  find_template(const SgName & name);
   17370             :           SgTemplateSymbol*  find_template(const SgName & name, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentList);
   17371             : #endif
   17372             :        // DQ (5/19/2013): Find the aliasSymbol for which the (aliasSymbol->get_base() == sp).
   17373             :           SgAliasSymbol*     find_aliased_symbol(const SgName & nm, SgSymbol *sp);
   17374             : 
   17375             :        // DQ (12/26/2011): Added more refined level of support for template declarations in the AST.
   17376             :        // SgTemplateClassSymbol* find_template_class (const SgName & nm);
   17377             : 
   17378             : #if 0
   17379             :        // DQ (11/27/2010): Removing these to avoid updating them to have consistant case handling support (deprecated 4-5 years ago).
   17380             :           SgSymbol*          findfirstany() ROSE_DEPRECATED_FUNCTION;
   17381             :           SgVariableSymbol*  findfirstvar() ROSE_DEPRECATED_FUNCTION;
   17382             :           SgClassSymbol*     findfirstclass() ROSE_DEPRECATED_FUNCTION;
   17383             :           SgFunctionSymbol*  findfirstfunction() ROSE_DEPRECATED_FUNCTION;
   17384             : #endif
   17385             :        // DQ (1/30/2007): New interface member functions: get the first symbol using type of SgSymbol
   17386             :           SgSymbol*          find_any();      //! Complexity O(log n) for first match against name, then O(n)
   17387             :           SgVariableSymbol*  find_variable(); //! Complexity O(log n) for first match against name, then O(n)
   17388             :           SgClassSymbol*     find_class();    //! Complexity O(log n) for first match against name, then O(n)
   17389             :           SgFunctionSymbol*  find_function(); //! Complexity O(log n) for first match against name, then O(n)
   17390             : 
   17391             :        // DQ (2/19/2007): this is equivalent to the STL "begin()" function because
   17392             :        // SgFunctionTypeSymbol objects are placed into the global function type table.
   17393             :        // SgFunctionTypeSymbol*  find_function_type();
   17394             : 
   17395             :           SgTypedefSymbol*   find_typedef();    //! Complexity O(log n) for first match against name, then O(n)
   17396             :           SgEnumSymbol*      find_enum();       //! Complexity O(log n) for first match against name, then O(n)
   17397             :           SgEnumFieldSymbol* find_enum_field(); //! Complexity O(log n) for first match against name, then O(n)
   17398             :           SgLabelSymbol*     find_label();      //! Complexity O(log n) for first match against name, then O(n)
   17399             :           SgNamespaceSymbol* find_namespace();  //! Complexity O(log n) for first match against name, then O(n)
   17400             :           SgTemplateSymbol*  find_template();   //! Complexity O(log n) for first match against name, then O(n)
   17401             : 
   17402             :        // DQ (12/27/2011): Added support for template declarations in the AST.
   17403             :        // DQ (12/12/2011): New functions to support template declarations in the AST.
   17404             :        // SgTemplateFunctionSymbol* find_template_function(const SgName& name, const SgType* type);
   17405             :       //! Complexity O(log n) for first match against name, then O(n)
   17406             :        // SgTemplateFunctionSymbol* find_template_function(const SgName& name, const SgType* type, SgTemplateParameterPtrList* templateList, SgTemplateArgumentPtrList* templateArgumentList);
   17407             :           SgTemplateFunctionSymbol* find_template_function(const SgName& name, const SgType* type, SgTemplateParameterPtrList* templateList);
   17408             : 
   17409             :           SgTemplateVariableSymbol* find_template_variable(const SgName& name, SgTemplateParameterPtrList* templateList, SgTemplateArgumentPtrList* templateArgumentsList);
   17410             : 
   17411             :        // DQ (8/10/2013): Adding template parameter support for overloaded templates (note that the
   17412             :        // template arguments for specialization are not required since partial template function
   17413             :        // specialization is not allowed in C++ and any requirement for specialized functions could
   17414             :        // only be for instantiatied template functions which would use a different symbol lookup function.
   17415             :        // SgFunctionSymbol* find_nontemplate_function(const SgName& name, const SgType* type);
   17416             :           SgFunctionSymbol* find_nontemplate_function(const SgName& name, const SgType* type, SgTemplateArgumentPtrList* templateArgumentList);
   17417             : 
   17418             :        // DQ (12/27/2011): Added support for template declarations in the AST.
   17419             :       //! Complexity O(log n) for first match against name, then O(n)
   17420             :        // SgTemplateMemberFunctionSymbol* find_template_member_function(const SgName& name, const SgType* type);
   17421             :        // SgTemplateMemberFunctionSymbol* find_template_member_function(const SgName& name, const SgType* type, SgTemplateParameterPtrList* templateList, SgTemplateArgumentPtrList* templateArgumentList);
   17422             :           SgTemplateMemberFunctionSymbol* find_template_member_function(const SgName& name, const SgType* type, SgTemplateParameterPtrList* templateList);
   17423             :        // SgMemberFunctionSymbol*         find_nontemplate_member_function(const SgName& name, const SgType* type);
   17424             :           SgMemberFunctionSymbol*         find_nontemplate_member_function(const SgName& name, const SgType* type, SgTemplateArgumentPtrList* templateArgumentList);
   17425             : 
   17426             :        // DQ (9/9/2012): We need to pass the template parameters to help disambiguate the symblos using more than just the names.
   17427             :        // SgTemplateClassSymbol* find_template_class   (const SgName& name);                     //! Complexity O(log n) for first match against name, then O(n)
   17428             :           SgTemplateClassSymbol* find_template_class (const SgName & nm, SgTemplateParameterPtrList* templateList, SgTemplateArgumentPtrList* templateArgumentList );
   17429             : 
   17430             :        // DQ (3/8/2017): Adding support for template typedef declarations and their symbol table handling.
   17431             :        // SgTemplateTypedefSymbol* find_template_typedef (const SgName & nm, SgTemplateParameterPtrList* templateList, SgTemplateArgumentPtrList* templateArgumentList );
   17432             :           SgTemplateTypedefSymbol* find_template_typedef (const SgName & nm);
   17433             : 
   17434             :        // SgClassSymbol*         find_nontemplate_class(const SgName& name);                     //! Complexity O(log n) for first match against name, then O(n)
   17435             :           SgClassSymbol*         find_nontemplate_class(const SgName& name, SgTemplateArgumentPtrList* templateArgumentsList); //! Complexity O(log n) for first match against name, then O(n)
   17436             : 
   17437             : #if 0
   17438             :        // DQ (11/27/2010): Removing these to avoid updating them to have consistant case handling support (deprecated 4-5 years ago).
   17439             :           SgSymbol*          nextany() ROSE_DEPRECATED_FUNCTION;
   17440             :           SgVariableSymbol*  nextvar() ROSE_DEPRECATED_FUNCTION;
   17441             :           SgClassSymbol*     nextclass() ROSE_DEPRECATED_FUNCTION;
   17442             : #endif
   17443             :        // Get the next symbol of a specific type, return NULL if not available.
   17444             :        // These functions use state information set by the find functions (either
   17445             :        // the versions using the name or not using a name as a parameter).
   17446             :           SgSymbol*          next_any();        //! Complexity O(n)
   17447             :           SgVariableSymbol*  next_variable();   //! Complexity O(n)
   17448             :           SgClassSymbol*     next_class();      //! Complexity O(n)
   17449             :           SgFunctionSymbol*  next_function();   //! Complexity O(n)
   17450             :           SgTypedefSymbol*   next_typedef();    //! Complexity O(n)
   17451             :           SgEnumSymbol*      next_enum();       //! Complexity O(n)
   17452             :           SgEnumFieldSymbol* next_enum_field(); //! Complexity O(n)
   17453             :           SgLabelSymbol*     next_label();      //! Complexity O(n)
   17454             :           SgNamespaceSymbol* next_namespace();  //! Complexity O(n)
   17455             :           SgTemplateSymbol*  next_template();   //! Complexity O(n)
   17456             : #if 0
   17457             :        // DQ (11/27/2010): Removing these to avoid updating them to have consistant case handling support (deprecated 4-5 years ago).
   17458             :        // for both global function and member functions
   17459             :           SgFunctionSymbol*  nextfunc() ROSE_DEPRECATED_FUNCTION;
   17460             : #endif
   17461             : #if 0
   17462             :        // DQ (9/7/2006): Previously removed functionality, restored by request from Beata at ANL.
   17463             :        // The next for functions have been placed back into the Sage III interface.
   17464             :           SgVariableSymbol*  findfirstvar();
   17465             :           SgVariableSymbol*  nextvar();
   17466             :           SgSymbol*          nextany();
   17467             :           SgSymbol*          findfirstany();
   17468             : #endif
   17469             : #if 0
   17470             :        // DQ (11/27/2010): Removing these to avoid updating them to have consistant case handling support (deprecated 4-5 years ago).
   17471             :        // This is a cute operator to use, but since it can't specify a type of SgSymbol it is not so useful in practice.
   17472             :           SgSymbol* operator[](const SgName &) ROSE_DEPRECATED_FUNCTION;
   17473             : #endif
   17474             :       //! Computes the number of symbols of a specific name
   17475             :           int count(const SgName &) const;
   17476             : 
   17477             :       //! Computes the number of alias symbols of a specific name (used in name qualification support).
   17478             :           int count_aliases(const SgName &) const;
   17479             : 
   17480             :       //! Outputs symbol table information (useful for debugging)
   17481             :           void print( std::string label, VariantT nodeType = V_SgSymbol );
   17482             :           void print();
   17483             :        // void print( std::string label );
   17484             : 
   17485             :        // Output to ostream (this function is not implemented)
   17486             :        // void print(std::ostream&);
   17487             : 
   17488             :       //! Computes the number of symbols in the symbol table (forced to count them, I think, internal STL detail).
   17489             :           int size() const; //! Complexity O(n)
   17490             : 
   17491             :       //! generate an STL set of all symbols (supports AST merge, but may be temporary)
   17492             :           std::set<SgNode*> get_symbols() const;
   17493             : 
   17494             : #if 0
   17495             : // DQ (3/10/2007): This approach in the end, didn't work.  So I think this can be removed!
   17496             :       //! Generate unique name for matching named symbols of the same type (support for AST merge)
   17497             :           unsigned int generateUniqueNumberForMatchingSymbol( SgDeclarationStatement* symbolBasis ) const;
   17498             : #endif
   17499             : 
   17500             :       //! Generates name from any IR node used to generate symbols (only works on specific IR nodes)
   17501             :           SgName get_name( const SgNode* node) const;
   17502             : 
   17503             :        // DQ (11/28/2010): Added case sensitive/insensitive option to symbol table behavior.
   17504             :       /*! \brief Query of scope symbol table behavior (is symbol table behavior case sensitive (C/C++) or case insensitive (Fortran).
   17505             : 
   17506             :           Note that a case insensitive symbol table can only be built that way from the SgSymbolTable constructor
   17507             :           and not be toggled back and forth at will.
   17508             :        */
   17509             :           bool isCaseInsensitive() const;
   17510             :           void setCaseInsensitive(bool b);
   17511             : 
   17512             :        // DQ (3/30/2014): This is a mode introduced to match the C++ handling of symbols of base classes with that of Java.
   17513             :        // This might be temporary, but is at least a part of how we are sorting out the differences between C++ and Java
   17514             :        // for symbols data members in base classes.  In C++ these are represented as SgAliasSymbols in the derived classes
   17515             :        // (permitting access issues to be addressed).  In Java this is less sophisticated and one has to seach the base
   17516             :        // classes explicitly.  This mode permits the semantics of searching for symbols to be handled from the derived class
   17517             :        // directly.  It might be a better design to have the Java symbol handling be a bit more like that of C++, but this
   17518             :        // must be discussed in some detail before we go that far.
   17519             :           static bool get_force_search_of_base_classes();
   17520             :           static void set_force_search_of_base_classes( bool value );
   17521             : 
   17522             :        // DQ (7/12/2014): Adding support for static data member.
   17523             :           static SgNodeSet & get_aliasSymbolCausalNodeSet();
   17524             : 
   17525             :        // DQ (8/3/2019): Display function for static data member.
   17526             :           static void display_aliasSymbolCausalNodeSet();
   17527             : 
   17528             :      protected:
   17529             : 
   17530             : #if 0
   17531             :        // DQ (8/21/2013): This function has been removed in favor of a single low-level (templated) supporting
   17532             :        // function that can optionally handle types (only used to support function lookups).
   17533             :        // DQ (12/26/2011): Refactoring of code into templated support function.
   17534             :        // template<class ReturnType> ReturnType* find_symbol_support (const SgName & nm);
   17535             :           template<class ReturnType> ReturnType* find_symbol_support (const SgName & nm, SgTemplateParameterPtrList* templateParameters = NULL, SgTemplateArgumentPtrList* templateArguments = NULL);
   17536             : #endif
   17537             : 
   17538             :        // DQ (4/14/2017): Test test2017_30.C demonstrates that we need to be able to force the filtering of symbols from templates
   17539             :        // DQ (5/20/2013): Added refactoring of symbol lookup support so that we can handle new namespace support for symbols.
   17540             :        // template<class ReturnType> ReturnType* find_symbol_with_type_support (const SgName & nm, const SgType* type);
   17541             :        // template<class ReturnType> ReturnType* find_symbol_with_type_support (const SgName & nm, const SgType* type, SgTemplateParameterPtrList* templateParameters, SgTemplateArgumentPtrList* templateArgumentList);
   17542             :           template<class ReturnType> ReturnType* find_symbol_with_type_support (const SgName & nm, const SgType* type, SgTemplateParameterPtrList* templateParameters, SgTemplateArgumentPtrList* templateArgumentList, bool filterTemplateSymbols);
   17543             : 
   17544             : #if 0
   17545             :        // DQ (5/20/2013): Added support for better refactoring on the template code so we can use it to support other functions.
   17546             :        // DQ (9/9/2012): Adding more template support (need version of function for template parameters (to disambiguate
   17547             :        // template names, similar to how we do so for template instantiations using the template argument list).
   17548             :        // template<class ReturnType> ReturnType* find_template_symbol_support (const SgName & nm, SgTemplateParameterPtrList* templateParameters, SgTemplateArgumentPtrList* templateArgumentList);
   17549             :           template<class ReturnType,class ReturnTypeDeclaration> ReturnType* find_template_symbol_support (const SgName & nm, SgTemplateParameterPtrList* templateParameters, SgTemplateArgumentPtrList* templateArgumentList);
   17550             : 
   17551             :        // DQ (8/12/2013): This function is redundant and is not replaced by the template function find_symbol_support<SgClassName>(nm,NULL,templateArgumentsList).
   17552             :        // DQ (5/20/2013): Added refactoring of symbol lookup support so that we can handle new namespace support for symbols.
   17553             :           template<class ReturnType> ReturnType* find_symbol_with_template_args_support ( const SgName & nm, SgTemplateArgumentPtrList* templateArgumentsList );
   17554             : #endif
   17555             : 
   17556             :      public:
   17557             : #if 0
   17558             :        // DQ (5/21/2013): This function was moved from the symbol table to the SgScopeStatement so that we could
   17559             :        // make the symbol table access functions private as part of the new namespace symbol table handling.
   17560             :        // DQ (3/13/2012): Added support for organizing how we match function declarations with function symbols.
   17561             :           template<class T>
   17562             :           SgFunctionSymbol* find_symbol_by_type_of_function (const SgName & name, const SgType* func_type);
   17563             : #endif
   17564             : 
   17565             :           size_t maxCollisions();
   17566             : 
   17567             : 
   17568             : 
   17569             : // End of memberFunctionString
   17570             : // Start of memberFunctionString
   17571             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   17572             : 
   17573             : // *** COMMON CODE SECTION BEGINS HERE ***
   17574             : 
   17575             :     public:
   17576             : 
   17577             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   17578             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   17579             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   17580             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   17581             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   17582             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   17583             : 
   17584             :       /*! \brief returns a string representing the class name */
   17585             :           virtual std::string class_name() const override;
   17586             : 
   17587             :       /*! \brief returns new style SageIII enum values */
   17588             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   17589             : 
   17590             :       /*! \brief static variant value */
   17591             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   17592             :        // static const VariantT static_variant = V_SgSymbolTable;
   17593             :           enum { static_variant = V_SgSymbolTable };
   17594             : 
   17595             :        /* the generated cast function */
   17596             :       /*! \brief Casts pointer from base class to derived class */
   17597             :           ROSE_DLL_API friend       SgSymbolTable* isSgSymbolTable(       SgNode * s );
   17598             : 
   17599             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   17600             :           ROSE_DLL_API friend const SgSymbolTable* isSgSymbolTable( const SgNode * s );
   17601             : 
   17602             :      // ******************************************
   17603             :      // * Memory Pool / New / Delete
   17604             :      // ******************************************
   17605             : 
   17606             :      public:
   17607             :           /// \private
   17608             :           static const unsigned pool_size; //
   17609             :           /// \private
   17610             :           static std::vector<unsigned char *> pools; //
   17611             :           /// \private
   17612             :           static SgSymbolTable * next_node; // 
   17613             : 
   17614             :           /// \private
   17615             :           static unsigned long initializeStorageClassArray(SgSymbolTableStorageClass *); //
   17616             : 
   17617             :           /// \private
   17618             :           static void clearMemoryPool(); //
   17619             :           static void deleteMemoryPool(); //
   17620             : 
   17621             :           /// \private
   17622             :           static void extendMemoryPoolForFileIO(); //
   17623             : 
   17624             :           /// \private
   17625             :           static SgSymbolTable * getPointerFromGlobalIndex(unsigned long); //
   17626             :           /// \private
   17627             :           static SgSymbolTable * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   17628             : 
   17629             :           /// \private
   17630             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   17631             :           /// \private
   17632             :           static void resetValidFreepointers(); //
   17633             :           /// \private
   17634             :           static unsigned long getNumberOfLastValidPointer(); //
   17635             : 
   17636             : 
   17637             : #if defined(INLINE_FUNCTIONS)
   17638             :       /*! \brief returns pointer to newly allocated IR node */
   17639             :           inline void *operator new (size_t size);
   17640             : #else
   17641             :       /*! \brief returns pointer to newly allocated IR node */
   17642             :           void *operator new (size_t size);
   17643             : #endif
   17644             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   17645             :           void operator delete (void* pointer, size_t size);
   17646             : 
   17647             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   17648       54458 :           void operator delete (void* pointer)
   17649             :              {
   17650             :             // This is the generated delete operator...
   17651       54458 :                SgSymbolTable::operator delete (pointer,sizeof(SgSymbolTable));
   17652             :              }
   17653             : 
   17654             :       /*! \brief Returns the total number of IR nodes of this type */
   17655             :           static size_t numberOfNodes();
   17656             : 
   17657             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   17658             :           static size_t memoryUsage();
   17659             : 
   17660             :       // End of scope which started in IR nodes specific code 
   17661             :       /* */
   17662             : 
   17663             :       /* name Internal Functions
   17664             :           \brief Internal functions ... incomplete-documentation
   17665             : 
   17666             :           These functions have been made public as part of the design, but they are suggested for internal use 
   17667             :           or by particularly knowledgeable users for specialized tools or applications.
   17668             : 
   17669             :           \internal We could not make these private because they are required by user for special purposes. And 
   17670             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   17671             :          
   17672             :        */
   17673             : 
   17674             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   17675             :        // overridden in every class by *generated* implementation
   17676             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   17677             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   17678             :        // MS: 06/28/02 container of names of variables or container indices 
   17679             :        // used used in the traversal to access AST successor nodes
   17680             :        // overridden in every class by *generated* implementation
   17681             :       /*! \brief container of names of variables or container indices used used in the traversal
   17682             :           to access AST successor nodes overridden in every class by *generated* implementation */
   17683             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   17684             : 
   17685             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   17686             :        // than all the vector copies. The implementation for these functions is generated for each class.
   17687             :       /*! \brief return number of children in the traversal successor list */
   17688             :           virtual size_t get_numberOfTraversalSuccessors() override;
   17689             :       /*! \brief index-based access to traversal successors by index number */
   17690             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   17691             :       /*! \brief index-based access to traversal successors by child node */
   17692             :           virtual size_t get_childIndex(SgNode *child) override;
   17693             : 
   17694             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   17695             :        // MS: 08/16/2002 method for generating RTI information
   17696             :       /*! \brief return C++ Runtime-Time-Information */
   17697             :           virtual RTIReturnType roseRTI() override;
   17698             : #endif
   17699             :       /* */
   17700             : 
   17701             : 
   17702             : 
   17703             :       /* name Deprecated Functions
   17704             :           \brief Deprecated functions ... incomplete-documentation
   17705             : 
   17706             :           These functions have been deprecated from use.
   17707             :        */
   17708             :       /* */
   17709             : 
   17710             :       /*! returns a C style string (char*) representing the class name */
   17711             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   17712             : 
   17713             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   17714             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   17715             : #if 0
   17716             :       /*! returns old style Sage II enum values */
   17717             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   17718             :       /*! returns old style Sage II enum values */
   17719             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   17720             : #endif
   17721             :       /* */
   17722             : 
   17723             : 
   17724             : 
   17725             : 
   17726             :      public:
   17727             :       /* name Traversal Support Functions
   17728             :           \brief Traversal support functions ... incomplete-documentation
   17729             : 
   17730             :           These functions have been made public as part of the design, but they are suggested for internal use 
   17731             :           or by particularly knowledgable users for specialized tools or applications.
   17732             :        */
   17733             :       /* */
   17734             : 
   17735             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   17736             :        // (inferior to ROSE traversal mechanism, experimental).
   17737             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   17738             :        */
   17739             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   17740             : 
   17741             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   17742             :       /*! \brief support for the classic visitor pattern done in GoF */
   17743             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   17744             : 
   17745             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   17746             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   17747             :        */
   17748             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   17749             : 
   17750             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   17751             :        */
   17752             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   17753             : 
   17754             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   17755             :        // This traversal helps support internal tools that call static member functions.
   17756             :        // note: this function operates on the memory pools.
   17757             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   17758             :        */
   17759             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   17760             :       /* */
   17761             : 
   17762             : 
   17763             :      public:
   17764             :       /* name Memory Allocation Functions
   17765             :           \brief Memory allocations functions ... incomplete-documentation
   17766             : 
   17767             :           These functions have been made public as part of the design, but they are suggested for internal use 
   17768             :           or by particularly knowledgable users for specialized tools or applications.
   17769             :        */
   17770             :       /* */
   17771             : 
   17772             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   17773             : 
   17774             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   17775             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   17776             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   17777             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   17778             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   17779             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   17780             :           being used with the AST File I/O mechanism.
   17781             :        */
   17782             :           virtual bool isInMemoryPool() override;
   17783             : 
   17784             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   17785             : 
   17786             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   17787             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   17788             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   17789             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   17790             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   17791             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   17792             :           being used with the AST File I/O mechanism.
   17793             :        */
   17794             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   17795             : 
   17796             :       // DQ (4/30/2006): Modified to be a const function.
   17797             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   17798             : 
   17799             :           This functions is part of general support for many possible tools to operate 
   17800             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   17801             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   17802             :           less than the set of pointers used by the AST file I/O. This is part of
   17803             :           work implemented by Andreas, and support tools such as the AST graph generation.
   17804             : 
   17805             :           \warning This function can return unexpected data members and thus the 
   17806             :                    order and the number of elements is unpredicable and subject 
   17807             :                    to change.
   17808             : 
   17809             :           \returns STL vector of pairs of SgNode* and strings
   17810             :        */
   17811             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   17812             : 
   17813             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   17814             : 
   17815             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   17816             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   17817             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   17818             : 
   17819             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   17820             :                    and subject to change.
   17821             :        */
   17822             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   17823             : 
   17824             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   17825             : 
   17826             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   17827             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   17828             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   17829             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   17830             : 
   17831             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   17832             : 
   17833             :           \returns long
   17834             :        */
   17835             :           virtual long getChildIndex( SgNode* childNode ) const override;
   17836             : 
   17837             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   17838             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   17839             :       /* \brief Constructor for use by AST File I/O Mechanism
   17840             : 
   17841             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   17842             :           which obtained via fast binary file I/O from disk.
   17843             :        */
   17844             :        // SgSymbolTable( SgSymbolTableStorageClass& source );
   17845             : 
   17846             : 
   17847             : 
   17848             : 
   17849             : 
   17850             :  // JH (10/24/2005): methods added to support the ast file IO
   17851             :     private:
   17852             : 
   17853             :       /* name AST Memory Allocation Support Functions
   17854             :           \brief Memory allocations support....
   17855             : 
   17856             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   17857             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   17858             :           and support the AST File I/O Mechanism.
   17859             :        */
   17860             :       /* */
   17861             : 
   17862             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   17863             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   17864             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   17865             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   17866             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   17867             :           a correspinding one in the AST_FILE_IO class!
   17868             :        */
   17869             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   17870             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   17871             :       /* \brief Typedef used for low level memory access.
   17872             :        */
   17873             :        // typedef unsigned char* TestType;
   17874             : 
   17875             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   17876             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   17877             :       /* \brief Typedef used to hold memory addresses as values.
   17878             :        */
   17879             :        // typedef unsigned long  AddressType;
   17880             : 
   17881             : 
   17882             : 
   17883             :        // necessary, to have direct access to the p_freepointer and the private methods !
   17884             :       /*! \brief friend class declaration to support AST File I/O */
   17885             :           friend class AST_FILE_IO;
   17886             : 
   17887             :       /*! \brief friend class declaration to support AST File I/O */
   17888             :           friend class SgSymbolTableStorageClass;
   17889             : 
   17890             :       /*! \brief friend class declaration to support AST File I/O */
   17891             :           friend class AstSpecificDataManagingClass;
   17892             : 
   17893             :       /*! \brief friend class declaration to support AST File I/O */
   17894             :           friend class AstSpecificDataManagingClassStorageClass;
   17895             :     public:
   17896             :       /*! \brief IR node constructor to support AST File I/O */
   17897             :           SgSymbolTable( const SgSymbolTableStorageClass& source );
   17898             : 
   17899             :  // private: // JJW hack
   17900             :        /*
   17901             :           name AST Memory Allocation Support Variables
   17902             :           Memory allocations support variables 
   17903             : 
   17904             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   17905             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   17906             :           and support the AST File I/O Mechanism.
   17907             :        */
   17908             :       /* */
   17909             : 
   17910             :     public:
   17911             : 
   17912             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   17913             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   17914             :       // virtual SgNode* addRegExpAttribute();
   17915             :       /*! \brief Support for AST matching using regular expression.
   17916             : 
   17917             :           This support is incomplete and the subject of current research to define 
   17918             :           RegEx trees to support inexact matching.
   17919             :        */
   17920             :           SgSymbolTable* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   17921             : 
   17922             : // *** COMMON CODE SECTION ENDS HERE ***
   17923             : 
   17924             : 
   17925             : // End of memberFunctionString
   17926             : // Start of memberFunctionString
   17927             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   17928             : 
   17929             :      // the generated cast function
   17930             :      // friend ROSE_DLL_API SgSymbolTable* isSgSymbolTable ( SgNode* s );
   17931             : 
   17932             :           typedef SgSupport base_node_type;
   17933             : 
   17934             : 
   17935             : // End of memberFunctionString
   17936             : 
   17937             : 
   17938             :      public: 
   17939             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
   17940             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
   17941             : 
   17942             :      public: 
   17943             :          bool get_no_name() const;
   17944             :          void set_no_name(bool no_name);
   17945             : 
   17946             :      public: 
   17947             :           rose_hash_multimap* get_table() const;
   17948             :          void set_table( rose_hash_multimap* table);
   17949             : 
   17950             :      public: 
   17951             :          SgNodeSet get_symbolSet() const;
   17952             :          void set_symbolSet(SgNodeSet symbolSet);
   17953             : 
   17954             : 
   17955             : 
   17956             : 
   17957             : 
   17958             :      public: 
   17959             :          virtual ~SgSymbolTable();
   17960             : 
   17961             :     protected:
   17962             : // Start of memberFunctionString
   17963             : hash_iterator p_iterator;
   17964             :           
   17965             : // End of memberFunctionString
   17966             : // Start of memberFunctionString
   17967             : SgName p_name;
   17968             :           
   17969             : // End of memberFunctionString
   17970             : // Start of memberFunctionString
   17971             : bool p_no_name;
   17972             :           
   17973             : // End of memberFunctionString
   17974             : // Start of memberFunctionString
   17975             :  rose_hash_multimap* p_table;
   17976             :           
   17977             : // End of memberFunctionString
   17978             : // Start of memberFunctionString
   17979             : SgNodeSet p_symbolSet;
   17980             :           
   17981             : // End of memberFunctionString
   17982             : // Start of memberFunctionString
   17983             : bool p_case_insensitive;
   17984             :           
   17985             : // End of memberFunctionString
   17986             : // Start of memberFunctionString
   17987             : static SgNodeSet p_aliasSymbolCausalNodeSet;
   17988             :           
   17989             : // End of memberFunctionString
   17990             : // Start of memberFunctionString
   17991             : static bool p_force_search_of_base_classes;
   17992             :           
   17993             : // End of memberFunctionString
   17994             : 
   17995             :     friend struct Rose::Traits::generated::describe_node_t<SgSymbolTable>;
   17996             :     friend struct Rose::Traits::generated::describe_field_t<SgSymbolTable, SgSymbolTable::hash_iterator,&SgSymbolTable::p_iterator>;
   17997             :     friend struct Rose::Traits::generated::describe_field_t<SgSymbolTable, SgName,&SgSymbolTable::p_name>;
   17998             :     friend struct Rose::Traits::generated::describe_field_t<SgSymbolTable, bool,&SgSymbolTable::p_no_name>;
   17999             :     friend struct Rose::Traits::generated::describe_field_t<SgSymbolTable,  rose_hash_multimap*,&SgSymbolTable::p_table>;
   18000             :     friend struct Rose::Traits::generated::describe_field_t<SgSymbolTable, SgNodeSet,&SgSymbolTable::p_symbolSet>;
   18001             :     friend struct Rose::Traits::generated::describe_field_t<SgSymbolTable, bool,&SgSymbolTable::p_case_insensitive>;
   18002             : 
   18003             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18004             : 
   18005             : 
   18006             :    };
   18007             : #endif
   18008             : 
   18009             : // postdeclarations for SgSymbolTable
   18010             : 
   18011             : /* #line 18012 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18012             : /* #line 5100 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   18013             : 
   18014             : 
   18015             : 
   18016             : 
   18017             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   18018             : 
   18019             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18020             : 
   18021             : 
   18022             : /* #line 18023 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18023             : 
   18024             : 
   18025             : 
   18026             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18027             : 
   18028             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   18029             : //      This code is automatically generated for each 
   18030             : //      terminal and non-terminal within the defined 
   18031             : //      grammar.  There is a simple way to change the 
   18032             : //      code to fix bugs etc.  See the ROSE README file
   18033             : //      for directions.
   18034             : 
   18035             : // tps: (02/22/2010): Adding DLL export requirements
   18036             : #include "rosedll.h"
   18037             : 
   18038             : // predeclarations for SgAttribute
   18039             : 
   18040             : /* #line 18041 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18041             : 
   18042             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   18043             : 
   18044             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18045             : 
   18046             : #if 1
   18047             : // Class Definition for SgAttribute
   18048             : class ROSE_DLL_API SgAttribute  : public SgSupport
   18049             :    {
   18050             :      public:
   18051             : 
   18052             : 
   18053             : /* #line 18054 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18054             : 
   18055             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   18056             : // Start of memberFunctionString
   18057             : /* #line 5651 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   18058             : 
   18059             :        // SgAttribute(char* str);
   18060             :           int isSame(const std::string& str);
   18061             : 
   18062             :        // DQ (12/6/2016): This needs to match being const as in the derived class (this also eliminates a compiler warning).
   18063             :        // virtual bool isPragma() { return 0; } // MS02/22/02
   18064           0 :           virtual bool isPragma() const { return 0; }
   18065             : 
   18066             :        // char *get_name() const;
   18067             : 
   18068             :       protected:
   18069             :        // char* p_name;
   18070             : 
   18071             : 
   18072             : 
   18073             : // End of memberFunctionString
   18074             : // Start of memberFunctionString
   18075             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   18076             : 
   18077             : // *** COMMON CODE SECTION BEGINS HERE ***
   18078             : 
   18079             :     public:
   18080             : 
   18081             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   18082             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   18083             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   18084             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   18085             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   18086             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   18087             : 
   18088             :       /*! \brief returns a string representing the class name */
   18089             :           virtual std::string class_name() const override;
   18090             : 
   18091             :       /*! \brief returns new style SageIII enum values */
   18092             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   18093             : 
   18094             :       /*! \brief static variant value */
   18095             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   18096             :        // static const VariantT static_variant = V_SgAttribute;
   18097             :           enum { static_variant = V_SgAttribute };
   18098             : 
   18099             :        /* the generated cast function */
   18100             :       /*! \brief Casts pointer from base class to derived class */
   18101             :           ROSE_DLL_API friend       SgAttribute* isSgAttribute(       SgNode * s );
   18102             : 
   18103             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   18104             :           ROSE_DLL_API friend const SgAttribute* isSgAttribute( const SgNode * s );
   18105             : 
   18106             :      // ******************************************
   18107             :      // * Memory Pool / New / Delete
   18108             :      // ******************************************
   18109             : 
   18110             :      public:
   18111             :           /// \private
   18112             :           static const unsigned pool_size; //
   18113             :           /// \private
   18114             :           static std::vector<unsigned char *> pools; //
   18115             :           /// \private
   18116             :           static SgAttribute * next_node; // 
   18117             : 
   18118             :           /// \private
   18119             :           static unsigned long initializeStorageClassArray(SgAttributeStorageClass *); //
   18120             : 
   18121             :           /// \private
   18122             :           static void clearMemoryPool(); //
   18123             :           static void deleteMemoryPool(); //
   18124             : 
   18125             :           /// \private
   18126             :           static void extendMemoryPoolForFileIO(); //
   18127             : 
   18128             :           /// \private
   18129             :           static SgAttribute * getPointerFromGlobalIndex(unsigned long); //
   18130             :           /// \private
   18131             :           static SgAttribute * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   18132             : 
   18133             :           /// \private
   18134             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   18135             :           /// \private
   18136             :           static void resetValidFreepointers(); //
   18137             :           /// \private
   18138             :           static unsigned long getNumberOfLastValidPointer(); //
   18139             : 
   18140             : 
   18141             : #if defined(INLINE_FUNCTIONS)
   18142             :       /*! \brief returns pointer to newly allocated IR node */
   18143             :           inline void *operator new (size_t size);
   18144             : #else
   18145             :       /*! \brief returns pointer to newly allocated IR node */
   18146             :           void *operator new (size_t size);
   18147             : #endif
   18148             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   18149             :           void operator delete (void* pointer, size_t size);
   18150             : 
   18151             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   18152           0 :           void operator delete (void* pointer)
   18153             :              {
   18154             :             // This is the generated delete operator...
   18155           0 :                SgAttribute::operator delete (pointer,sizeof(SgAttribute));
   18156             :              }
   18157             : 
   18158             :       /*! \brief Returns the total number of IR nodes of this type */
   18159             :           static size_t numberOfNodes();
   18160             : 
   18161             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   18162             :           static size_t memoryUsage();
   18163             : 
   18164             :       // End of scope which started in IR nodes specific code 
   18165             :       /* */
   18166             : 
   18167             :       /* name Internal Functions
   18168             :           \brief Internal functions ... incomplete-documentation
   18169             : 
   18170             :           These functions have been made public as part of the design, but they are suggested for internal use 
   18171             :           or by particularly knowledgeable users for specialized tools or applications.
   18172             : 
   18173             :           \internal We could not make these private because they are required by user for special purposes. And 
   18174             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   18175             :          
   18176             :        */
   18177             : 
   18178             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   18179             :        // overridden in every class by *generated* implementation
   18180             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   18181             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   18182             :        // MS: 06/28/02 container of names of variables or container indices 
   18183             :        // used used in the traversal to access AST successor nodes
   18184             :        // overridden in every class by *generated* implementation
   18185             :       /*! \brief container of names of variables or container indices used used in the traversal
   18186             :           to access AST successor nodes overridden in every class by *generated* implementation */
   18187             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   18188             : 
   18189             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   18190             :        // than all the vector copies. The implementation for these functions is generated for each class.
   18191             :       /*! \brief return number of children in the traversal successor list */
   18192             :           virtual size_t get_numberOfTraversalSuccessors() override;
   18193             :       /*! \brief index-based access to traversal successors by index number */
   18194             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   18195             :       /*! \brief index-based access to traversal successors by child node */
   18196             :           virtual size_t get_childIndex(SgNode *child) override;
   18197             : 
   18198             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   18199             :        // MS: 08/16/2002 method for generating RTI information
   18200             :       /*! \brief return C++ Runtime-Time-Information */
   18201             :           virtual RTIReturnType roseRTI() override;
   18202             : #endif
   18203             :       /* */
   18204             : 
   18205             : 
   18206             : 
   18207             :       /* name Deprecated Functions
   18208             :           \brief Deprecated functions ... incomplete-documentation
   18209             : 
   18210             :           These functions have been deprecated from use.
   18211             :        */
   18212             :       /* */
   18213             : 
   18214             :       /*! returns a C style string (char*) representing the class name */
   18215             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   18216             : 
   18217             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   18218             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   18219             : #if 0
   18220             :       /*! returns old style Sage II enum values */
   18221             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   18222             :       /*! returns old style Sage II enum values */
   18223             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   18224             : #endif
   18225             :       /* */
   18226             : 
   18227             : 
   18228             : 
   18229             : 
   18230             :      public:
   18231             :       /* name Traversal Support Functions
   18232             :           \brief Traversal support functions ... incomplete-documentation
   18233             : 
   18234             :           These functions have been made public as part of the design, but they are suggested for internal use 
   18235             :           or by particularly knowledgable users for specialized tools or applications.
   18236             :        */
   18237             :       /* */
   18238             : 
   18239             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   18240             :        // (inferior to ROSE traversal mechanism, experimental).
   18241             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   18242             :        */
   18243             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   18244             : 
   18245             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   18246             :       /*! \brief support for the classic visitor pattern done in GoF */
   18247             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   18248             : 
   18249             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   18250             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   18251             :        */
   18252             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   18253             : 
   18254             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   18255             :        */
   18256             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   18257             : 
   18258             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   18259             :        // This traversal helps support internal tools that call static member functions.
   18260             :        // note: this function operates on the memory pools.
   18261             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   18262             :        */
   18263             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   18264             :       /* */
   18265             : 
   18266             : 
   18267             :      public:
   18268             :       /* name Memory Allocation Functions
   18269             :           \brief Memory allocations functions ... incomplete-documentation
   18270             : 
   18271             :           These functions have been made public as part of the design, but they are suggested for internal use 
   18272             :           or by particularly knowledgable users for specialized tools or applications.
   18273             :        */
   18274             :       /* */
   18275             : 
   18276             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   18277             : 
   18278             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   18279             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   18280             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   18281             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   18282             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   18283             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   18284             :           being used with the AST File I/O mechanism.
   18285             :        */
   18286             :           virtual bool isInMemoryPool() override;
   18287             : 
   18288             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   18289             : 
   18290             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   18291             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   18292             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   18293             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   18294             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   18295             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   18296             :           being used with the AST File I/O mechanism.
   18297             :        */
   18298             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   18299             : 
   18300             :       // DQ (4/30/2006): Modified to be a const function.
   18301             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   18302             : 
   18303             :           This functions is part of general support for many possible tools to operate 
   18304             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   18305             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   18306             :           less than the set of pointers used by the AST file I/O. This is part of
   18307             :           work implemented by Andreas, and support tools such as the AST graph generation.
   18308             : 
   18309             :           \warning This function can return unexpected data members and thus the 
   18310             :                    order and the number of elements is unpredicable and subject 
   18311             :                    to change.
   18312             : 
   18313             :           \returns STL vector of pairs of SgNode* and strings
   18314             :        */
   18315             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   18316             : 
   18317             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   18318             : 
   18319             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   18320             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   18321             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   18322             : 
   18323             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   18324             :                    and subject to change.
   18325             :        */
   18326             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   18327             : 
   18328             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   18329             : 
   18330             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   18331             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   18332             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   18333             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   18334             : 
   18335             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   18336             : 
   18337             :           \returns long
   18338             :        */
   18339             :           virtual long getChildIndex( SgNode* childNode ) const override;
   18340             : 
   18341             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   18342             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   18343             :       /* \brief Constructor for use by AST File I/O Mechanism
   18344             : 
   18345             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   18346             :           which obtained via fast binary file I/O from disk.
   18347             :        */
   18348             :        // SgAttribute( SgAttributeStorageClass& source );
   18349             : 
   18350             : 
   18351             : 
   18352             : 
   18353             : 
   18354             :  // JH (10/24/2005): methods added to support the ast file IO
   18355             :     private:
   18356             : 
   18357             :       /* name AST Memory Allocation Support Functions
   18358             :           \brief Memory allocations support....
   18359             : 
   18360             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   18361             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   18362             :           and support the AST File I/O Mechanism.
   18363             :        */
   18364             :       /* */
   18365             : 
   18366             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   18367             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   18368             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   18369             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   18370             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   18371             :           a correspinding one in the AST_FILE_IO class!
   18372             :        */
   18373             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   18374             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   18375             :       /* \brief Typedef used for low level memory access.
   18376             :        */
   18377             :        // typedef unsigned char* TestType;
   18378             : 
   18379             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   18380             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   18381             :       /* \brief Typedef used to hold memory addresses as values.
   18382             :        */
   18383             :        // typedef unsigned long  AddressType;
   18384             : 
   18385             : 
   18386             : 
   18387             :        // necessary, to have direct access to the p_freepointer and the private methods !
   18388             :       /*! \brief friend class declaration to support AST File I/O */
   18389             :           friend class AST_FILE_IO;
   18390             : 
   18391             :       /*! \brief friend class declaration to support AST File I/O */
   18392             :           friend class SgAttributeStorageClass;
   18393             : 
   18394             :       /*! \brief friend class declaration to support AST File I/O */
   18395             :           friend class AstSpecificDataManagingClass;
   18396             : 
   18397             :       /*! \brief friend class declaration to support AST File I/O */
   18398             :           friend class AstSpecificDataManagingClassStorageClass;
   18399             :     public:
   18400             :       /*! \brief IR node constructor to support AST File I/O */
   18401             :           SgAttribute( const SgAttributeStorageClass& source );
   18402             : 
   18403             :  // private: // JJW hack
   18404             :        /*
   18405             :           name AST Memory Allocation Support Variables
   18406             :           Memory allocations support variables 
   18407             : 
   18408             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   18409             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   18410             :           and support the AST File I/O Mechanism.
   18411             :        */
   18412             :       /* */
   18413             : 
   18414             :     public:
   18415             : 
   18416             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   18417             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   18418             :       // virtual SgNode* addRegExpAttribute();
   18419             :       /*! \brief Support for AST matching using regular expression.
   18420             : 
   18421             :           This support is incomplete and the subject of current research to define 
   18422             :           RegEx trees to support inexact matching.
   18423             :        */
   18424             :           SgAttribute* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   18425             : 
   18426             : // *** COMMON CODE SECTION ENDS HERE ***
   18427             : 
   18428             : 
   18429             : // End of memberFunctionString
   18430             : // Start of memberFunctionString
   18431             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   18432             : 
   18433             :      // the generated cast function
   18434             :      // friend ROSE_DLL_API SgAttribute* isSgAttribute ( SgNode* s );
   18435             : 
   18436             :           typedef SgSupport base_node_type;
   18437             : 
   18438             : 
   18439             : // End of memberFunctionString
   18440             : 
   18441             :      public: 
   18442             :          std::string get_name() const /* (getDataAccessFunctionPrototypeString) */;
   18443             :          void set_name(std::string name) /* (getDataAccessFunctionPrototypeString) */;
   18444             : 
   18445             : 
   18446             :      public: 
   18447             :          virtual ~SgAttribute();
   18448             : 
   18449             : 
   18450             :      public: 
   18451             :          SgAttribute(std::string name = ""); 
   18452             : 
   18453             :     protected:
   18454             : // Start of memberFunctionString
   18455             : std::string p_name;
   18456             :           
   18457             : // End of memberFunctionString
   18458             : 
   18459             :     friend struct Rose::Traits::generated::describe_node_t<SgAttribute>;
   18460             :     friend struct Rose::Traits::generated::describe_field_t<SgAttribute, std::string,&SgAttribute::p_name>;
   18461             : 
   18462             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18463             : 
   18464             : 
   18465             :    };
   18466             : #endif
   18467             : 
   18468             : // postdeclarations for SgAttribute
   18469             : 
   18470             : /* #line 18471 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18471             : 
   18472             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   18473             : 
   18474             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18475             : 
   18476             : 
   18477             : /* #line 18478 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18478             : 
   18479             : 
   18480             : 
   18481             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18482             : 
   18483             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   18484             : //      This code is automatically generated for each 
   18485             : //      terminal and non-terminal within the defined 
   18486             : //      grammar.  There is a simple way to change the 
   18487             : //      code to fix bugs etc.  See the ROSE README file
   18488             : //      for directions.
   18489             : 
   18490             : // tps: (02/22/2010): Adding DLL export requirements
   18491             : #include "rosedll.h"
   18492             : 
   18493             : // predeclarations for SgPragma
   18494             : 
   18495             : /* #line 18496 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18496             : 
   18497             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   18498             : 
   18499             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   18500             : 
   18501             : #if 1
   18502             : // Class Definition for SgPragma
   18503             : class ROSE_DLL_API SgPragma  : public SgAttribute
   18504             :    {
   18505             :      public:
   18506             : 
   18507             : 
   18508             : /* #line 18509 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   18509             : 
   18510             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   18511             : // Start of memberFunctionString
   18512             : /* #line 5774 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   18513             : 
   18514             :        // SgPragma(char *name);
   18515             : 
   18516             :           void post_construction_initialization() override;
   18517             : 
   18518             :           std::string get_pragma() const;
   18519             :           bool samePragma(const std::string& str);
   18520             :           bool isPragma() const override;
   18521             :           bool gotPrinted() const;
   18522             :           void setPrinted(bool s = true);
   18523             : 
   18524             :        // DQ (8/3/2004): added function to match virtual function in SgNode
   18525             :           Sg_File_Info* get_file_info() const override;
   18526             : 
   18527             : 
   18528             : 
   18529             : // End of memberFunctionString
   18530             : // Start of memberFunctionString
   18531             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   18532             : 
   18533             : 
   18534             :      /* name Persistant Attribute Mechanism
   18535             : 
   18536             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   18537             :          multiple passes. Note that these attributes are persistant in that they are preserved
   18538             :          if the AST is written out to a file and read in from a file.  However, virtual function
   18539             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   18540             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   18541             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   18542             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   18543             :          access is required, however mostly only internal tools use this lower level support).
   18544             : 
   18545             :          \internal This used to be a public data member, but has been changed to be a protected
   18546             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   18547             :          but some of the names and the syntax for calling the interface have changed. The
   18548             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   18549             :       */
   18550             :      /* */
   18551             :      //! Add a new attribute represented by the named string.
   18552             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   18553             :      //! Returns attribute of name 's'.
   18554             :          virtual AstAttribute* getAttribute(std::string s) const override;
   18555             :      //! Replace existing attribute of name 's' with new AstAttribute.
   18556             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   18557             :      /*! \brief This is a wrapper function with the following semantics:
   18558             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   18559             :          otherwise \b updateAttribute(s,a); is called.
   18560             :       */
   18561             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   18562             :      //! Remove attribute of name 's' if present.
   18563             :          virtual void removeAttribute(std::string s) override;
   18564             :      //! Tests if attribute of name 's' is present.
   18565             :          virtual bool attributeExists(std::string s) const override;
   18566             :      //! Returns the number of attributes on this IR node.
   18567             :          virtual int numberOfAttributes() const override;
   18568             : 
   18569             :      /*! \fn AstAttributeMechanism* SgPragma::get_attributeMechanism() const;
   18570             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   18571             :                 a pointer to it is returned, else error.
   18572             : 
   18573             :          This is an access function used for getting the interally held pointer to a valid
   18574             :          AstAttributeMechanism. It provides access to lower level functionality of the
   18575             :          AstAttributeMechanism, put is mostly of use to internal tools.
   18576             :       */
   18577             :      /*! \fn void SgPragma::set_attributeMechanism(AstAttributeMechanism* a);
   18578             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   18579             : 
   18580             :          This is an access function used for setting the interally held pointer to a valid
   18581             :          AstAttributeMechanism.
   18582             :       */
   18583             :      /* */
   18584             : 
   18585             : 
   18586             : 
   18587             : 
   18588             : // End of memberFunctionString
   18589             : // Start of memberFunctionString
   18590             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   18591             : 
   18592             : // *** COMMON CODE SECTION BEGINS HERE ***
   18593             : 
   18594             :     public:
   18595             : 
   18596             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   18597             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   18598             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   18599             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   18600             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   18601             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   18602             : 
   18603             :       /*! \brief returns a string representing the class name */
   18604             :           virtual std::string class_name() const override;
   18605             : 
   18606             :       /*! \brief returns new style SageIII enum values */
   18607             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   18608             : 
   18609             :       /*! \brief static variant value */
   18610             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   18611             :        // static const VariantT static_variant = V_SgPragma;
   18612             :           enum { static_variant = V_SgPragma };
   18613             : 
   18614             :        /* the generated cast function */
   18615             :       /*! \brief Casts pointer from base class to derived class */
   18616             :           ROSE_DLL_API friend       SgPragma* isSgPragma(       SgNode * s );
   18617             : 
   18618             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   18619             :           ROSE_DLL_API friend const SgPragma* isSgPragma( const SgNode * s );
   18620             : 
   18621             :      // ******************************************
   18622             :      // * Memory Pool / New / Delete
   18623             :      // ******************************************
   18624             : 
   18625             :      public:
   18626             :           /// \private
   18627             :           static const unsigned pool_size; //
   18628             :           /// \private
   18629             :           static std::vector<unsigned char *> pools; //
   18630             :           /// \private
   18631             :           static SgPragma * next_node; // 
   18632             : 
   18633             :           /// \private
   18634             :           static unsigned long initializeStorageClassArray(SgPragmaStorageClass *); //
   18635             : 
   18636             :           /// \private
   18637             :           static void clearMemoryPool(); //
   18638             :           static void deleteMemoryPool(); //
   18639             : 
   18640             :           /// \private
   18641             :           static void extendMemoryPoolForFileIO(); //
   18642             : 
   18643             :           /// \private
   18644             :           static SgPragma * getPointerFromGlobalIndex(unsigned long); //
   18645             :           /// \private
   18646             :           static SgPragma * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   18647             : 
   18648             :           /// \private
   18649             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   18650             :           /// \private
   18651             :           static void resetValidFreepointers(); //
   18652             :           /// \private
   18653             :           static unsigned long getNumberOfLastValidPointer(); //
   18654             : 
   18655             : 
   18656             : #if defined(INLINE_FUNCTIONS)
   18657             :       /*! \brief returns pointer to newly allocated IR node */
   18658             :           inline void *operator new (size_t size);
   18659             : #else
   18660             :       /*! \brief returns pointer to newly allocated IR node */
   18661             :           void *operator new (size_t size);
   18662             : #endif
   18663             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   18664             :           void operator delete (void* pointer, size_t size);
   18665             : 
   18666             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   18667         194 :           void operator delete (void* pointer)
   18668             :              {
   18669             :             // This is the generated delete operator...
   18670         194 :                SgPragma::operator delete (pointer,sizeof(SgPragma));
   18671             :              }
   18672             : 
   18673             :       /*! \brief Returns the total number of IR nodes of this type */
   18674             :           static size_t numberOfNodes();
   18675             : 
   18676             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   18677             :           static size_t memoryUsage();
   18678             : 
   18679             :       // End of scope which started in IR nodes specific code 
   18680             :       /* */
   18681             : 
   18682             :       /* name Internal Functions
   18683             :           \brief Internal functions ... incomplete-documentation
   18684             : 
   18685             :           These functions have been made public as part of the design, but they are suggested for internal use 
   18686             :           or by particularly knowledgeable users for specialized tools or applications.
   18687             : 
   18688             :           \internal We could not make these private because they are required by user for special purposes. And 
   18689             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   18690             :          
   18691             :        */
   18692             : 
   18693             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   18694             :        // overridden in every class by *generated* implementation
   18695             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   18696             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   18697             :        // MS: 06/28/02 container of names of variables or container indices 
   18698             :        // used used in the traversal to access AST successor nodes
   18699             :        // overridden in every class by *generated* implementation
   18700             :       /*! \brief container of names of variables or container indices used used in the traversal
   18701             :           to access AST successor nodes overridden in every class by *generated* implementation */
   18702             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   18703             : 
   18704             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   18705             :        // than all the vector copies. The implementation for these functions is generated for each class.
   18706             :       /*! \brief return number of children in the traversal successor list */
   18707             :           virtual size_t get_numberOfTraversalSuccessors() override;
   18708             :       /*! \brief index-based access to traversal successors by index number */
   18709             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   18710             :       /*! \brief index-based access to traversal successors by child node */
   18711             :           virtual size_t get_childIndex(SgNode *child) override;
   18712             : 
   18713             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   18714             :        // MS: 08/16/2002 method for generating RTI information
   18715             :       /*! \brief return C++ Runtime-Time-Information */
   18716             :           virtual RTIReturnType roseRTI() override;
   18717             : #endif
   18718             :       /* */
   18719             : 
   18720             : 
   18721             : 
   18722             :       /* name Deprecated Functions
   18723             :           \brief Deprecated functions ... incomplete-documentation
   18724             : 
   18725             :           These functions have been deprecated from use.
   18726             :        */
   18727             :       /* */
   18728             : 
   18729             :       /*! returns a C style string (char*) representing the class name */
   18730             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   18731             : 
   18732             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   18733             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   18734             : #if 0
   18735             :       /*! returns old style Sage II enum values */
   18736             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   18737             :       /*! returns old style Sage II enum values */
   18738             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   18739             : #endif
   18740             :       /* */
   18741             : 
   18742             : 
   18743             : 
   18744             : 
   18745             :      public:
   18746             :       /* name Traversal Support Functions
   18747             :           \brief Traversal support functions ... incomplete-documentation
   18748             : 
   18749             :           These functions have been made public as part of the design, but they are suggested for internal use 
   18750             :           or by particularly knowledgable users for specialized tools or applications.
   18751             :        */
   18752             :       /* */
   18753             : 
   18754             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   18755             :        // (inferior to ROSE traversal mechanism, experimental).
   18756             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   18757             :        */
   18758             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   18759             : 
   18760             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   18761             :       /*! \brief support for the classic visitor pattern done in GoF */
   18762             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   18763             : 
   18764             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   18765             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   18766             :        */
   18767             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   18768             : 
   18769             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   18770             :        */
   18771             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   18772             : 
   18773             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   18774             :        // This traversal helps support internal tools that call static member functions.
   18775             :        // note: this function operates on the memory pools.
   18776             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   18777             :        */
   18778             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   18779             :       /* */
   18780             : 
   18781             : 
   18782             :      public:
   18783             :       /* name Memory Allocation Functions
   18784             :           \brief Memory allocations functions ... incomplete-documentation
   18785             : 
   18786             :           These functions have been made public as part of the design, but they are suggested for internal use 
   18787             :           or by particularly knowledgable users for specialized tools or applications.
   18788             :        */
   18789             :       /* */
   18790             : 
   18791             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   18792             : 
   18793             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   18794             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   18795             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   18796             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   18797             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   18798             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   18799             :           being used with the AST File I/O mechanism.
   18800             :        */
   18801             :           virtual bool isInMemoryPool() override;
   18802             : 
   18803             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   18804             : 
   18805             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   18806             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   18807             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   18808             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   18809             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   18810             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   18811             :           being used with the AST File I/O mechanism.
   18812             :        */
   18813             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   18814             : 
   18815             :       // DQ (4/30/2006): Modified to be a const function.
   18816             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   18817             : 
   18818             :           This functions is part of general support for many possible tools to operate 
   18819             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   18820             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   18821             :           less than the set of pointers used by the AST file I/O. This is part of
   18822             :           work implemented by Andreas, and support tools such as the AST graph generation.
   18823             : 
   18824             :           \warning This function can return unexpected data members and thus the 
   18825             :                    order and the number of elements is unpredicable and subject 
   18826             :                    to change.
   18827             : 
   18828             :           \returns STL vector of pairs of SgNode* and strings
   18829             :        */
   18830             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   18831             : 
   18832             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   18833             : 
   18834             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   18835             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   18836             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   18837             : 
   18838             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   18839             :                    and subject to change.
   18840             :        */
   18841             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   18842             : 
   18843             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   18844             : 
   18845             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   18846             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   18847             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   18848             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   18849             : 
   18850             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   18851             : 
   18852             :           \returns long
   18853             :        */
   18854             :           virtual long getChildIndex( SgNode* childNode ) const override;
   18855             : 
   18856             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   18857             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   18858             :       /* \brief Constructor for use by AST File I/O Mechanism
   18859             : 
   18860             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   18861             :           which obtained via fast binary file I/O from disk.
   18862             :        */
   18863             :        // SgPragma( SgPragmaStorageClass& source );
   18864             : 
   18865             : 
   18866             : 
   18867             : 
   18868             : 
   18869             :  // JH (10/24/2005): methods added to support the ast file IO
   18870             :     private:
   18871             : 
   18872             :       /* name AST Memory Allocation Support Functions
   18873             :           \brief Memory allocations support....
   18874             : 
   18875             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   18876             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   18877             :           and support the AST File I/O Mechanism.
   18878             :        */
   18879             :       /* */
   18880             : 
   18881             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   18882             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   18883             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   18884             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   18885             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   18886             :           a correspinding one in the AST_FILE_IO class!
   18887             :        */
   18888             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   18889             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   18890             :       /* \brief Typedef used for low level memory access.
   18891             :        */
   18892             :        // typedef unsigned char* TestType;
   18893             : 
   18894             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   18895             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   18896             :       /* \brief Typedef used to hold memory addresses as values.
   18897             :        */
   18898             :        // typedef unsigned long  AddressType;
   18899             : 
   18900             : 
   18901             : 
   18902             :        // necessary, to have direct access to the p_freepointer and the private methods !
   18903             :       /*! \brief friend class declaration to support AST File I/O */
   18904             :           friend class AST_FILE_IO;
   18905             : 
   18906             :       /*! \brief friend class declaration to support AST File I/O */
   18907             :           friend class SgPragmaStorageClass;
   18908             : 
   18909             :       /*! \brief friend class declaration to support AST File I/O */
   18910             :           friend class AstSpecificDataManagingClass;
   18911             : 
   18912             :       /*! \brief friend class declaration to support AST File I/O */
   18913             :           friend class AstSpecificDataManagingClassStorageClass;
   18914             :     public:
   18915             :       /*! \brief IR node constructor to support AST File I/O */
   18916             :           SgPragma( const SgPragmaStorageClass& source );
   18917             : 
   18918             :  // private: // JJW hack
   18919             :        /*
   18920             :           name AST Memory Allocation Support Variables
   18921             :           Memory allocations support variables 
   18922             : 
   18923             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   18924             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   18925             :           and support the AST File I/O Mechanism.
   18926             :        */
   18927             :       /* */
   18928             : 
   18929             :     public:
   18930             : 
   18931             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   18932             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   18933             :       // virtual SgNode* addRegExpAttribute();
   18934             :       /*! \brief Support for AST matching using regular expression.
   18935             : 
   18936             :           This support is incomplete and the subject of current research to define 
   18937             :           RegEx trees to support inexact matching.
   18938             :        */
   18939             :           SgPragma* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   18940             : 
   18941             : // *** COMMON CODE SECTION ENDS HERE ***
   18942             : 
   18943             : 
   18944             : // End of memberFunctionString
   18945             : // Start of memberFunctionString
   18946             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   18947             : 
   18948             :      // the generated cast function
   18949             :      // friend ROSE_DLL_API SgPragma* isSgPragma ( SgNode* s );
   18950             : 
   18951             :           typedef SgAttribute base_node_type;
   18952             : 
   18953             : 
   18954             : // End of memberFunctionString
   18955             : 
   18956             :      public: 
   18957             :          Sg_File_Info* get_startOfConstruct() const override /* (getDataAccessFunctionPrototypeString) */;
   18958             :          void set_startOfConstruct(Sg_File_Info* startOfConstruct) /* (getDataAccessFunctionPrototypeString) */;
   18959             : 
   18960             :      public: 
   18961             :          Sg_File_Info* get_endOfConstruct() const override /* (getDataAccessFunctionPrototypeString) */;
   18962             :          void set_endOfConstruct(Sg_File_Info* endOfConstruct) /* (getDataAccessFunctionPrototypeString) */;
   18963             : 
   18964             : 
   18965             :      public: 
   18966             :          SgExprListExp* get_args() const;
   18967             :          void set_args(SgExprListExp* args);
   18968             : 
   18969             :      public: 
   18970             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   18971             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   18972             : 
   18973             : 
   18974             :      public: 
   18975             :          virtual ~SgPragma();
   18976             : 
   18977             : 
   18978             :      public: 
   18979             :          SgPragma(std::string name = "", Sg_File_Info* startOfConstruct = NULL, Sg_File_Info* endOfConstruct = NULL); 
   18980             : 
   18981             :     protected:
   18982             : // Start of memberFunctionString
   18983             : Sg_File_Info* p_startOfConstruct;
   18984             :           
   18985             : // End of memberFunctionString
   18986             : // Start of memberFunctionString
   18987             : Sg_File_Info* p_endOfConstruct;
   18988             :           
   18989             : // End of memberFunctionString
   18990             : // Start of memberFunctionString
   18991             : short p_printed;
   18992             :           
   18993             : // End of memberFunctionString
   18994             : // Start of memberFunctionString
   18995             : SgExprListExp* p_args;
   18996             :           
   18997             : // End of memberFunctionString
   18998             : // Start of memberFunctionString
   18999             : AstAttributeMechanism* p_attributeMechanism;
   19000             :           
   19001             : // End of memberFunctionString
   19002             : 
   19003             :     friend struct Rose::Traits::generated::describe_node_t<SgPragma>;
   19004             :     friend struct Rose::Traits::generated::describe_field_t<SgPragma, Sg_File_Info*,&SgPragma::p_startOfConstruct>;
   19005             :     friend struct Rose::Traits::generated::describe_field_t<SgPragma, Sg_File_Info*,&SgPragma::p_endOfConstruct>;
   19006             :     friend struct Rose::Traits::generated::describe_field_t<SgPragma, short,&SgPragma::p_printed>;
   19007             :     friend struct Rose::Traits::generated::describe_field_t<SgPragma, SgExprListExp*,&SgPragma::p_args>;
   19008             :     friend struct Rose::Traits::generated::describe_field_t<SgPragma, AstAttributeMechanism*,&SgPragma::p_attributeMechanism>;
   19009             : 
   19010             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19011             : 
   19012             : 
   19013             :    };
   19014             : #endif
   19015             : 
   19016             : // postdeclarations for SgPragma
   19017             : 
   19018             : /* #line 19019 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19019             : 
   19020             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   19021             : 
   19022             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19023             : 
   19024             : 
   19025             : /* #line 19026 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19026             : 
   19027             : 
   19028             : 
   19029             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19030             : 
   19031             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   19032             : //      This code is automatically generated for each 
   19033             : //      terminal and non-terminal within the defined 
   19034             : //      grammar.  There is a simple way to change the 
   19035             : //      code to fix bugs etc.  See the ROSE README file
   19036             : //      for directions.
   19037             : 
   19038             : // tps: (02/22/2010): Adding DLL export requirements
   19039             : #include "rosedll.h"
   19040             : 
   19041             : // predeclarations for SgBitAttribute
   19042             : 
   19043             : /* #line 19044 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19044             : 
   19045             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   19046             : 
   19047             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19048             : 
   19049             : #if 1
   19050             : // Class Definition for SgBitAttribute
   19051             : class ROSE_DLL_API SgBitAttribute  : public SgAttribute
   19052             :    {
   19053             :      public:
   19054             : 
   19055             : 
   19056             : /* #line 19057 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19057             : 
   19058             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   19059             : // Start of memberFunctionString
   19060             : /* #line 5667 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   19061             : 
   19062             :        // SgBitAttribute(char *str);
   19063             : 
   19064             : //        int isAttributeSet(unsigned long int bit) const;
   19065             : //        void setAttribute(unsigned long int bit);
   19066             : //        void unsetAttribute(unsigned long int bit);
   19067             : //        int isPragma() const;
   19068             : 
   19069             :   // private:
   19070             :   //      unsigned long int p_bitflag;
   19071             : 
   19072             : 
   19073             : 
   19074             : // End of memberFunctionString
   19075             : // Start of memberFunctionString
   19076             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   19077             : 
   19078             : // *** COMMON CODE SECTION BEGINS HERE ***
   19079             : 
   19080             :     public:
   19081             : 
   19082             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   19083             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   19084             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   19085             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   19086             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   19087             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   19088             : 
   19089             :       /*! \brief returns a string representing the class name */
   19090             :           virtual std::string class_name() const override;
   19091             : 
   19092             :       /*! \brief returns new style SageIII enum values */
   19093             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   19094             : 
   19095             :       /*! \brief static variant value */
   19096             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   19097             :        // static const VariantT static_variant = V_SgBitAttribute;
   19098             :           enum { static_variant = V_SgBitAttribute };
   19099             : 
   19100             :        /* the generated cast function */
   19101             :       /*! \brief Casts pointer from base class to derived class */
   19102             :           ROSE_DLL_API friend       SgBitAttribute* isSgBitAttribute(       SgNode * s );
   19103             : 
   19104             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   19105             :           ROSE_DLL_API friend const SgBitAttribute* isSgBitAttribute( const SgNode * s );
   19106             : 
   19107             :      // ******************************************
   19108             :      // * Memory Pool / New / Delete
   19109             :      // ******************************************
   19110             : 
   19111             :      public:
   19112             :           /// \private
   19113             :           static const unsigned pool_size; //
   19114             :           /// \private
   19115             :           static std::vector<unsigned char *> pools; //
   19116             :           /// \private
   19117             :           static SgBitAttribute * next_node; // 
   19118             : 
   19119             :           /// \private
   19120             :           static unsigned long initializeStorageClassArray(SgBitAttributeStorageClass *); //
   19121             : 
   19122             :           /// \private
   19123             :           static void clearMemoryPool(); //
   19124             :           static void deleteMemoryPool(); //
   19125             : 
   19126             :           /// \private
   19127             :           static void extendMemoryPoolForFileIO(); //
   19128             : 
   19129             :           /// \private
   19130             :           static SgBitAttribute * getPointerFromGlobalIndex(unsigned long); //
   19131             :           /// \private
   19132             :           static SgBitAttribute * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   19133             : 
   19134             :           /// \private
   19135             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   19136             :           /// \private
   19137             :           static void resetValidFreepointers(); //
   19138             :           /// \private
   19139             :           static unsigned long getNumberOfLastValidPointer(); //
   19140             : 
   19141             : 
   19142             : #if defined(INLINE_FUNCTIONS)
   19143             :       /*! \brief returns pointer to newly allocated IR node */
   19144             :           inline void *operator new (size_t size);
   19145             : #else
   19146             :       /*! \brief returns pointer to newly allocated IR node */
   19147             :           void *operator new (size_t size);
   19148             : #endif
   19149             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   19150             :           void operator delete (void* pointer, size_t size);
   19151             : 
   19152             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   19153           0 :           void operator delete (void* pointer)
   19154             :              {
   19155             :             // This is the generated delete operator...
   19156           0 :                SgBitAttribute::operator delete (pointer,sizeof(SgBitAttribute));
   19157             :              }
   19158             : 
   19159             :       /*! \brief Returns the total number of IR nodes of this type */
   19160             :           static size_t numberOfNodes();
   19161             : 
   19162             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   19163             :           static size_t memoryUsage();
   19164             : 
   19165             :       // End of scope which started in IR nodes specific code 
   19166             :       /* */
   19167             : 
   19168             :       /* name Internal Functions
   19169             :           \brief Internal functions ... incomplete-documentation
   19170             : 
   19171             :           These functions have been made public as part of the design, but they are suggested for internal use 
   19172             :           or by particularly knowledgeable users for specialized tools or applications.
   19173             : 
   19174             :           \internal We could not make these private because they are required by user for special purposes. And 
   19175             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   19176             :          
   19177             :        */
   19178             : 
   19179             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   19180             :        // overridden in every class by *generated* implementation
   19181             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   19182             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   19183             :        // MS: 06/28/02 container of names of variables or container indices 
   19184             :        // used used in the traversal to access AST successor nodes
   19185             :        // overridden in every class by *generated* implementation
   19186             :       /*! \brief container of names of variables or container indices used used in the traversal
   19187             :           to access AST successor nodes overridden in every class by *generated* implementation */
   19188             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   19189             : 
   19190             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   19191             :        // than all the vector copies. The implementation for these functions is generated for each class.
   19192             :       /*! \brief return number of children in the traversal successor list */
   19193             :           virtual size_t get_numberOfTraversalSuccessors() override;
   19194             :       /*! \brief index-based access to traversal successors by index number */
   19195             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   19196             :       /*! \brief index-based access to traversal successors by child node */
   19197             :           virtual size_t get_childIndex(SgNode *child) override;
   19198             : 
   19199             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   19200             :        // MS: 08/16/2002 method for generating RTI information
   19201             :       /*! \brief return C++ Runtime-Time-Information */
   19202             :           virtual RTIReturnType roseRTI() override;
   19203             : #endif
   19204             :       /* */
   19205             : 
   19206             : 
   19207             : 
   19208             :       /* name Deprecated Functions
   19209             :           \brief Deprecated functions ... incomplete-documentation
   19210             : 
   19211             :           These functions have been deprecated from use.
   19212             :        */
   19213             :       /* */
   19214             : 
   19215             :       /*! returns a C style string (char*) representing the class name */
   19216             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   19217             : 
   19218             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   19219             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   19220             : #if 0
   19221             :       /*! returns old style Sage II enum values */
   19222             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   19223             :       /*! returns old style Sage II enum values */
   19224             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   19225             : #endif
   19226             :       /* */
   19227             : 
   19228             : 
   19229             : 
   19230             : 
   19231             :      public:
   19232             :       /* name Traversal Support Functions
   19233             :           \brief Traversal support functions ... incomplete-documentation
   19234             : 
   19235             :           These functions have been made public as part of the design, but they are suggested for internal use 
   19236             :           or by particularly knowledgable users for specialized tools or applications.
   19237             :        */
   19238             :       /* */
   19239             : 
   19240             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   19241             :        // (inferior to ROSE traversal mechanism, experimental).
   19242             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   19243             :        */
   19244             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   19245             : 
   19246             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   19247             :       /*! \brief support for the classic visitor pattern done in GoF */
   19248             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   19249             : 
   19250             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   19251             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   19252             :        */
   19253             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   19254             : 
   19255             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   19256             :        */
   19257             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   19258             : 
   19259             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   19260             :        // This traversal helps support internal tools that call static member functions.
   19261             :        // note: this function operates on the memory pools.
   19262             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   19263             :        */
   19264             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   19265             :       /* */
   19266             : 
   19267             : 
   19268             :      public:
   19269             :       /* name Memory Allocation Functions
   19270             :           \brief Memory allocations functions ... incomplete-documentation
   19271             : 
   19272             :           These functions have been made public as part of the design, but they are suggested for internal use 
   19273             :           or by particularly knowledgable users for specialized tools or applications.
   19274             :        */
   19275             :       /* */
   19276             : 
   19277             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   19278             : 
   19279             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   19280             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   19281             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   19282             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   19283             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   19284             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   19285             :           being used with the AST File I/O mechanism.
   19286             :        */
   19287             :           virtual bool isInMemoryPool() override;
   19288             : 
   19289             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   19290             : 
   19291             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   19292             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   19293             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   19294             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   19295             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   19296             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   19297             :           being used with the AST File I/O mechanism.
   19298             :        */
   19299             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   19300             : 
   19301             :       // DQ (4/30/2006): Modified to be a const function.
   19302             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   19303             : 
   19304             :           This functions is part of general support for many possible tools to operate 
   19305             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   19306             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   19307             :           less than the set of pointers used by the AST file I/O. This is part of
   19308             :           work implemented by Andreas, and support tools such as the AST graph generation.
   19309             : 
   19310             :           \warning This function can return unexpected data members and thus the 
   19311             :                    order and the number of elements is unpredicable and subject 
   19312             :                    to change.
   19313             : 
   19314             :           \returns STL vector of pairs of SgNode* and strings
   19315             :        */
   19316             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   19317             : 
   19318             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   19319             : 
   19320             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   19321             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   19322             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   19323             : 
   19324             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   19325             :                    and subject to change.
   19326             :        */
   19327             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   19328             : 
   19329             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   19330             : 
   19331             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   19332             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   19333             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   19334             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   19335             : 
   19336             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   19337             : 
   19338             :           \returns long
   19339             :        */
   19340             :           virtual long getChildIndex( SgNode* childNode ) const override;
   19341             : 
   19342             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   19343             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   19344             :       /* \brief Constructor for use by AST File I/O Mechanism
   19345             : 
   19346             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   19347             :           which obtained via fast binary file I/O from disk.
   19348             :        */
   19349             :        // SgBitAttribute( SgBitAttributeStorageClass& source );
   19350             : 
   19351             : 
   19352             : 
   19353             : 
   19354             : 
   19355             :  // JH (10/24/2005): methods added to support the ast file IO
   19356             :     private:
   19357             : 
   19358             :       /* name AST Memory Allocation Support Functions
   19359             :           \brief Memory allocations support....
   19360             : 
   19361             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   19362             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   19363             :           and support the AST File I/O Mechanism.
   19364             :        */
   19365             :       /* */
   19366             : 
   19367             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   19368             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   19369             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   19370             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   19371             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   19372             :           a correspinding one in the AST_FILE_IO class!
   19373             :        */
   19374             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   19375             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   19376             :       /* \brief Typedef used for low level memory access.
   19377             :        */
   19378             :        // typedef unsigned char* TestType;
   19379             : 
   19380             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   19381             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   19382             :       /* \brief Typedef used to hold memory addresses as values.
   19383             :        */
   19384             :        // typedef unsigned long  AddressType;
   19385             : 
   19386             : 
   19387             : 
   19388             :        // necessary, to have direct access to the p_freepointer and the private methods !
   19389             :       /*! \brief friend class declaration to support AST File I/O */
   19390             :           friend class AST_FILE_IO;
   19391             : 
   19392             :       /*! \brief friend class declaration to support AST File I/O */
   19393             :           friend class SgBitAttributeStorageClass;
   19394             : 
   19395             :       /*! \brief friend class declaration to support AST File I/O */
   19396             :           friend class AstSpecificDataManagingClass;
   19397             : 
   19398             :       /*! \brief friend class declaration to support AST File I/O */
   19399             :           friend class AstSpecificDataManagingClassStorageClass;
   19400             :     public:
   19401             :       /*! \brief IR node constructor to support AST File I/O */
   19402             :           SgBitAttribute( const SgBitAttributeStorageClass& source );
   19403             : 
   19404             :  // private: // JJW hack
   19405             :        /*
   19406             :           name AST Memory Allocation Support Variables
   19407             :           Memory allocations support variables 
   19408             : 
   19409             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   19410             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   19411             :           and support the AST File I/O Mechanism.
   19412             :        */
   19413             :       /* */
   19414             : 
   19415             :     public:
   19416             : 
   19417             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   19418             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   19419             :       // virtual SgNode* addRegExpAttribute();
   19420             :       /*! \brief Support for AST matching using regular expression.
   19421             : 
   19422             :           This support is incomplete and the subject of current research to define 
   19423             :           RegEx trees to support inexact matching.
   19424             :        */
   19425             :           SgBitAttribute* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   19426             : 
   19427             : // *** COMMON CODE SECTION ENDS HERE ***
   19428             : 
   19429             : 
   19430             : // End of memberFunctionString
   19431             : // Start of memberFunctionString
   19432             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   19433             : 
   19434             :      // the generated cast function
   19435             :      // friend ROSE_DLL_API SgBitAttribute* isSgBitAttribute ( SgNode* s );
   19436             : 
   19437             :           typedef SgAttribute base_node_type;
   19438             : 
   19439             : 
   19440             : // End of memberFunctionString
   19441             : 
   19442             :      public: 
   19443             :          unsigned long int get_bitflag() const;
   19444             :          void set_bitflag(unsigned long int bitflag);
   19445             : 
   19446             : 
   19447             :      public: 
   19448             :          virtual ~SgBitAttribute();
   19449             : 
   19450             : 
   19451             :      public: 
   19452             :          SgBitAttribute(std::string name = "", unsigned long int bitflag = 0); 
   19453             : 
   19454             :     protected:
   19455             : // Start of memberFunctionString
   19456             : unsigned long int p_bitflag;
   19457             :           
   19458             : // End of memberFunctionString
   19459             : 
   19460             :     friend struct Rose::Traits::generated::describe_node_t<SgBitAttribute>;
   19461             :     friend struct Rose::Traits::generated::describe_field_t<SgBitAttribute, unsigned long int,&SgBitAttribute::p_bitflag>;
   19462             : 
   19463             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19464             : 
   19465             : 
   19466             :    };
   19467             : #endif
   19468             : 
   19469             : // postdeclarations for SgBitAttribute
   19470             : 
   19471             : /* #line 19472 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19472             : 
   19473             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   19474             : 
   19475             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19476             : 
   19477             : 
   19478             : /* #line 19479 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19479             : 
   19480             : 
   19481             : 
   19482             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19483             : 
   19484             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   19485             : //      This code is automatically generated for each 
   19486             : //      terminal and non-terminal within the defined 
   19487             : //      grammar.  There is a simple way to change the 
   19488             : //      code to fix bugs etc.  See the ROSE README file
   19489             : //      for directions.
   19490             : 
   19491             : // tps: (02/22/2010): Adding DLL export requirements
   19492             : #include "rosedll.h"
   19493             : 
   19494             : // predeclarations for SgFuncDecl_attr
   19495             : 
   19496             : /* #line 19497 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19497             : 
   19498             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   19499             : 
   19500             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19501             : 
   19502             : #if 1
   19503             : // Class Definition for SgFuncDecl_attr
   19504             : class ROSE_DLL_API SgFuncDecl_attr  : public SgBitAttribute
   19505             :    {
   19506             :      public:
   19507             : 
   19508             : 
   19509             : /* #line 19510 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19510             : 
   19511             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   19512             : // Start of memberFunctionString
   19513             : /* #line 5681 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   19514             : 
   19515             :        // SgFuncDecl_attr();
   19516             :        // void set_suppress_atomic();
   19517             :        // int get_suppress_atomic() const;
   19518             : 
   19519             :        // JH (1/18/2006): Added default constructor explicitly to avoid having it be generated by the compiler
   19520             :           SgFuncDecl_attr();
   19521             : 
   19522             :      private:
   19523             :        // enum { e_suppressatomic = 0x00000001 };
   19524             : 
   19525             : 
   19526             : 
   19527             : // End of memberFunctionString
   19528             : // Start of memberFunctionString
   19529             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   19530             : 
   19531             : // *** COMMON CODE SECTION BEGINS HERE ***
   19532             : 
   19533             :     public:
   19534             : 
   19535             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   19536             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   19537             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   19538             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   19539             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   19540             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   19541             : 
   19542             :       /*! \brief returns a string representing the class name */
   19543             :           virtual std::string class_name() const override;
   19544             : 
   19545             :       /*! \brief returns new style SageIII enum values */
   19546             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   19547             : 
   19548             :       /*! \brief static variant value */
   19549             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   19550             :        // static const VariantT static_variant = V_SgFuncDecl_attr;
   19551             :           enum { static_variant = V_SgFuncDecl_attr };
   19552             : 
   19553             :        /* the generated cast function */
   19554             :       /*! \brief Casts pointer from base class to derived class */
   19555             :           ROSE_DLL_API friend       SgFuncDecl_attr* isSgFuncDecl_attr(       SgNode * s );
   19556             : 
   19557             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   19558             :           ROSE_DLL_API friend const SgFuncDecl_attr* isSgFuncDecl_attr( const SgNode * s );
   19559             : 
   19560             :      // ******************************************
   19561             :      // * Memory Pool / New / Delete
   19562             :      // ******************************************
   19563             : 
   19564             :      public:
   19565             :           /// \private
   19566             :           static const unsigned pool_size; //
   19567             :           /// \private
   19568             :           static std::vector<unsigned char *> pools; //
   19569             :           /// \private
   19570             :           static SgFuncDecl_attr * next_node; // 
   19571             : 
   19572             :           /// \private
   19573             :           static unsigned long initializeStorageClassArray(SgFuncDecl_attrStorageClass *); //
   19574             : 
   19575             :           /// \private
   19576             :           static void clearMemoryPool(); //
   19577             :           static void deleteMemoryPool(); //
   19578             : 
   19579             :           /// \private
   19580             :           static void extendMemoryPoolForFileIO(); //
   19581             : 
   19582             :           /// \private
   19583             :           static SgFuncDecl_attr * getPointerFromGlobalIndex(unsigned long); //
   19584             :           /// \private
   19585             :           static SgFuncDecl_attr * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   19586             : 
   19587             :           /// \private
   19588             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   19589             :           /// \private
   19590             :           static void resetValidFreepointers(); //
   19591             :           /// \private
   19592             :           static unsigned long getNumberOfLastValidPointer(); //
   19593             : 
   19594             : 
   19595             : #if defined(INLINE_FUNCTIONS)
   19596             :       /*! \brief returns pointer to newly allocated IR node */
   19597             :           inline void *operator new (size_t size);
   19598             : #else
   19599             :       /*! \brief returns pointer to newly allocated IR node */
   19600             :           void *operator new (size_t size);
   19601             : #endif
   19602             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   19603             :           void operator delete (void* pointer, size_t size);
   19604             : 
   19605             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   19606           0 :           void operator delete (void* pointer)
   19607             :              {
   19608             :             // This is the generated delete operator...
   19609           0 :                SgFuncDecl_attr::operator delete (pointer,sizeof(SgFuncDecl_attr));
   19610             :              }
   19611             : 
   19612             :       /*! \brief Returns the total number of IR nodes of this type */
   19613             :           static size_t numberOfNodes();
   19614             : 
   19615             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   19616             :           static size_t memoryUsage();
   19617             : 
   19618             :       // End of scope which started in IR nodes specific code 
   19619             :       /* */
   19620             : 
   19621             :       /* name Internal Functions
   19622             :           \brief Internal functions ... incomplete-documentation
   19623             : 
   19624             :           These functions have been made public as part of the design, but they are suggested for internal use 
   19625             :           or by particularly knowledgeable users for specialized tools or applications.
   19626             : 
   19627             :           \internal We could not make these private because they are required by user for special purposes. And 
   19628             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   19629             :          
   19630             :        */
   19631             : 
   19632             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   19633             :        // overridden in every class by *generated* implementation
   19634             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   19635             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   19636             :        // MS: 06/28/02 container of names of variables or container indices 
   19637             :        // used used in the traversal to access AST successor nodes
   19638             :        // overridden in every class by *generated* implementation
   19639             :       /*! \brief container of names of variables or container indices used used in the traversal
   19640             :           to access AST successor nodes overridden in every class by *generated* implementation */
   19641             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   19642             : 
   19643             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   19644             :        // than all the vector copies. The implementation for these functions is generated for each class.
   19645             :       /*! \brief return number of children in the traversal successor list */
   19646             :           virtual size_t get_numberOfTraversalSuccessors() override;
   19647             :       /*! \brief index-based access to traversal successors by index number */
   19648             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   19649             :       /*! \brief index-based access to traversal successors by child node */
   19650             :           virtual size_t get_childIndex(SgNode *child) override;
   19651             : 
   19652             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   19653             :        // MS: 08/16/2002 method for generating RTI information
   19654             :       /*! \brief return C++ Runtime-Time-Information */
   19655             :           virtual RTIReturnType roseRTI() override;
   19656             : #endif
   19657             :       /* */
   19658             : 
   19659             : 
   19660             : 
   19661             :       /* name Deprecated Functions
   19662             :           \brief Deprecated functions ... incomplete-documentation
   19663             : 
   19664             :           These functions have been deprecated from use.
   19665             :        */
   19666             :       /* */
   19667             : 
   19668             :       /*! returns a C style string (char*) representing the class name */
   19669             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   19670             : 
   19671             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   19672             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   19673             : #if 0
   19674             :       /*! returns old style Sage II enum values */
   19675             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   19676             :       /*! returns old style Sage II enum values */
   19677             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   19678             : #endif
   19679             :       /* */
   19680             : 
   19681             : 
   19682             : 
   19683             : 
   19684             :      public:
   19685             :       /* name Traversal Support Functions
   19686             :           \brief Traversal support functions ... incomplete-documentation
   19687             : 
   19688             :           These functions have been made public as part of the design, but they are suggested for internal use 
   19689             :           or by particularly knowledgable users for specialized tools or applications.
   19690             :        */
   19691             :       /* */
   19692             : 
   19693             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   19694             :        // (inferior to ROSE traversal mechanism, experimental).
   19695             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   19696             :        */
   19697             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   19698             : 
   19699             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   19700             :       /*! \brief support for the classic visitor pattern done in GoF */
   19701             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   19702             : 
   19703             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   19704             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   19705             :        */
   19706             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   19707             : 
   19708             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   19709             :        */
   19710             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   19711             : 
   19712             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   19713             :        // This traversal helps support internal tools that call static member functions.
   19714             :        // note: this function operates on the memory pools.
   19715             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   19716             :        */
   19717             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   19718             :       /* */
   19719             : 
   19720             : 
   19721             :      public:
   19722             :       /* name Memory Allocation Functions
   19723             :           \brief Memory allocations functions ... incomplete-documentation
   19724             : 
   19725             :           These functions have been made public as part of the design, but they are suggested for internal use 
   19726             :           or by particularly knowledgable users for specialized tools or applications.
   19727             :        */
   19728             :       /* */
   19729             : 
   19730             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   19731             : 
   19732             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   19733             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   19734             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   19735             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   19736             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   19737             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   19738             :           being used with the AST File I/O mechanism.
   19739             :        */
   19740             :           virtual bool isInMemoryPool() override;
   19741             : 
   19742             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   19743             : 
   19744             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   19745             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   19746             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   19747             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   19748             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   19749             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   19750             :           being used with the AST File I/O mechanism.
   19751             :        */
   19752             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   19753             : 
   19754             :       // DQ (4/30/2006): Modified to be a const function.
   19755             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   19756             : 
   19757             :           This functions is part of general support for many possible tools to operate 
   19758             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   19759             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   19760             :           less than the set of pointers used by the AST file I/O. This is part of
   19761             :           work implemented by Andreas, and support tools such as the AST graph generation.
   19762             : 
   19763             :           \warning This function can return unexpected data members and thus the 
   19764             :                    order and the number of elements is unpredicable and subject 
   19765             :                    to change.
   19766             : 
   19767             :           \returns STL vector of pairs of SgNode* and strings
   19768             :        */
   19769             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   19770             : 
   19771             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   19772             : 
   19773             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   19774             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   19775             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   19776             : 
   19777             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   19778             :                    and subject to change.
   19779             :        */
   19780             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   19781             : 
   19782             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   19783             : 
   19784             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   19785             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   19786             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   19787             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   19788             : 
   19789             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   19790             : 
   19791             :           \returns long
   19792             :        */
   19793             :           virtual long getChildIndex( SgNode* childNode ) const override;
   19794             : 
   19795             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   19796             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   19797             :       /* \brief Constructor for use by AST File I/O Mechanism
   19798             : 
   19799             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   19800             :           which obtained via fast binary file I/O from disk.
   19801             :        */
   19802             :        // SgFuncDecl_attr( SgFuncDecl_attrStorageClass& source );
   19803             : 
   19804             : 
   19805             : 
   19806             : 
   19807             : 
   19808             :  // JH (10/24/2005): methods added to support the ast file IO
   19809             :     private:
   19810             : 
   19811             :       /* name AST Memory Allocation Support Functions
   19812             :           \brief Memory allocations support....
   19813             : 
   19814             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   19815             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   19816             :           and support the AST File I/O Mechanism.
   19817             :        */
   19818             :       /* */
   19819             : 
   19820             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   19821             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   19822             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   19823             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   19824             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   19825             :           a correspinding one in the AST_FILE_IO class!
   19826             :        */
   19827             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   19828             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   19829             :       /* \brief Typedef used for low level memory access.
   19830             :        */
   19831             :        // typedef unsigned char* TestType;
   19832             : 
   19833             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   19834             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   19835             :       /* \brief Typedef used to hold memory addresses as values.
   19836             :        */
   19837             :        // typedef unsigned long  AddressType;
   19838             : 
   19839             : 
   19840             : 
   19841             :        // necessary, to have direct access to the p_freepointer and the private methods !
   19842             :       /*! \brief friend class declaration to support AST File I/O */
   19843             :           friend class AST_FILE_IO;
   19844             : 
   19845             :       /*! \brief friend class declaration to support AST File I/O */
   19846             :           friend class SgFuncDecl_attrStorageClass;
   19847             : 
   19848             :       /*! \brief friend class declaration to support AST File I/O */
   19849             :           friend class AstSpecificDataManagingClass;
   19850             : 
   19851             :       /*! \brief friend class declaration to support AST File I/O */
   19852             :           friend class AstSpecificDataManagingClassStorageClass;
   19853             :     public:
   19854             :       /*! \brief IR node constructor to support AST File I/O */
   19855             :           SgFuncDecl_attr( const SgFuncDecl_attrStorageClass& source );
   19856             : 
   19857             :  // private: // JJW hack
   19858             :        /*
   19859             :           name AST Memory Allocation Support Variables
   19860             :           Memory allocations support variables 
   19861             : 
   19862             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   19863             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   19864             :           and support the AST File I/O Mechanism.
   19865             :        */
   19866             :       /* */
   19867             : 
   19868             :     public:
   19869             : 
   19870             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   19871             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   19872             :       // virtual SgNode* addRegExpAttribute();
   19873             :       /*! \brief Support for AST matching using regular expression.
   19874             : 
   19875             :           This support is incomplete and the subject of current research to define 
   19876             :           RegEx trees to support inexact matching.
   19877             :        */
   19878             :           SgFuncDecl_attr* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   19879             : 
   19880             : // *** COMMON CODE SECTION ENDS HERE ***
   19881             : 
   19882             : 
   19883             : // End of memberFunctionString
   19884             : // Start of memberFunctionString
   19885             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   19886             : 
   19887             :      // the generated cast function
   19888             :      // friend ROSE_DLL_API SgFuncDecl_attr* isSgFuncDecl_attr ( SgNode* s );
   19889             : 
   19890             :           typedef SgBitAttribute base_node_type;
   19891             : 
   19892             : 
   19893             : // End of memberFunctionString
   19894             : 
   19895             : 
   19896             :      public: 
   19897             :          virtual ~SgFuncDecl_attr();
   19898             : 
   19899             :     protected:
   19900             : 
   19901             :     friend struct Rose::Traits::generated::describe_node_t<SgFuncDecl_attr>;
   19902             : 
   19903             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19904             : 
   19905             : 
   19906             :    };
   19907             : #endif
   19908             : 
   19909             : // postdeclarations for SgFuncDecl_attr
   19910             : 
   19911             : /* #line 19912 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19912             : /* #line 5694 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   19913             : 
   19914             : // int get_suppress_atomic(SgFunctionDeclaration *);
   19915             : // void set_suppress_atomic(SgFunctionDeclaration *);
   19916             : 
   19917             : 
   19918             : 
   19919             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   19920             : 
   19921             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19922             : 
   19923             : 
   19924             : /* #line 19925 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19925             : 
   19926             : 
   19927             : 
   19928             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19929             : 
   19930             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   19931             : //      This code is automatically generated for each 
   19932             : //      terminal and non-terminal within the defined 
   19933             : //      grammar.  There is a simple way to change the 
   19934             : //      code to fix bugs etc.  See the ROSE README file
   19935             : //      for directions.
   19936             : 
   19937             : // tps: (02/22/2010): Adding DLL export requirements
   19938             : #include "rosedll.h"
   19939             : 
   19940             : // predeclarations for SgClassDecl_attr
   19941             : 
   19942             : /* #line 19943 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19943             : 
   19944             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   19945             : 
   19946             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   19947             : 
   19948             : #if 1
   19949             : // Class Definition for SgClassDecl_attr
   19950             : class ROSE_DLL_API SgClassDecl_attr  : public SgBitAttribute
   19951             :    {
   19952             :      public:
   19953             : 
   19954             : 
   19955             : /* #line 19956 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   19956             : 
   19957             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   19958             : // Start of memberFunctionString
   19959             : /* #line 5713 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   19960             : 
   19961             :        /* local attribute class to suppress the printing of global keyword */
   19962             : //        SgClassDecl_attr();
   19963             : //        void set_suppress_global();
   19964             : //        int get_suppress_global() const;
   19965             : 
   19966             :        // JH (1/18/2006): Added default constructor explicitly to avoid having it be generated by the compiler
   19967             :           SgClassDecl_attr();
   19968             : 
   19969             :      private:
   19970             : //        enum { e_suppress_global = 0x00000001 };
   19971             : 
   19972             : 
   19973             : 
   19974             : // End of memberFunctionString
   19975             : // Start of memberFunctionString
   19976             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   19977             : 
   19978             : // *** COMMON CODE SECTION BEGINS HERE ***
   19979             : 
   19980             :     public:
   19981             : 
   19982             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   19983             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   19984             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   19985             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   19986             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   19987             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   19988             : 
   19989             :       /*! \brief returns a string representing the class name */
   19990             :           virtual std::string class_name() const override;
   19991             : 
   19992             :       /*! \brief returns new style SageIII enum values */
   19993             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   19994             : 
   19995             :       /*! \brief static variant value */
   19996             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   19997             :        // static const VariantT static_variant = V_SgClassDecl_attr;
   19998             :           enum { static_variant = V_SgClassDecl_attr };
   19999             : 
   20000             :        /* the generated cast function */
   20001             :       /*! \brief Casts pointer from base class to derived class */
   20002             :           ROSE_DLL_API friend       SgClassDecl_attr* isSgClassDecl_attr(       SgNode * s );
   20003             : 
   20004             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   20005             :           ROSE_DLL_API friend const SgClassDecl_attr* isSgClassDecl_attr( const SgNode * s );
   20006             : 
   20007             :      // ******************************************
   20008             :      // * Memory Pool / New / Delete
   20009             :      // ******************************************
   20010             : 
   20011             :      public:
   20012             :           /// \private
   20013             :           static const unsigned pool_size; //
   20014             :           /// \private
   20015             :           static std::vector<unsigned char *> pools; //
   20016             :           /// \private
   20017             :           static SgClassDecl_attr * next_node; // 
   20018             : 
   20019             :           /// \private
   20020             :           static unsigned long initializeStorageClassArray(SgClassDecl_attrStorageClass *); //
   20021             : 
   20022             :           /// \private
   20023             :           static void clearMemoryPool(); //
   20024             :           static void deleteMemoryPool(); //
   20025             : 
   20026             :           /// \private
   20027             :           static void extendMemoryPoolForFileIO(); //
   20028             : 
   20029             :           /// \private
   20030             :           static SgClassDecl_attr * getPointerFromGlobalIndex(unsigned long); //
   20031             :           /// \private
   20032             :           static SgClassDecl_attr * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   20033             : 
   20034             :           /// \private
   20035             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   20036             :           /// \private
   20037             :           static void resetValidFreepointers(); //
   20038             :           /// \private
   20039             :           static unsigned long getNumberOfLastValidPointer(); //
   20040             : 
   20041             : 
   20042             : #if defined(INLINE_FUNCTIONS)
   20043             :       /*! \brief returns pointer to newly allocated IR node */
   20044             :           inline void *operator new (size_t size);
   20045             : #else
   20046             :       /*! \brief returns pointer to newly allocated IR node */
   20047             :           void *operator new (size_t size);
   20048             : #endif
   20049             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   20050             :           void operator delete (void* pointer, size_t size);
   20051             : 
   20052             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   20053           0 :           void operator delete (void* pointer)
   20054             :              {
   20055             :             // This is the generated delete operator...
   20056           0 :                SgClassDecl_attr::operator delete (pointer,sizeof(SgClassDecl_attr));
   20057             :              }
   20058             : 
   20059             :       /*! \brief Returns the total number of IR nodes of this type */
   20060             :           static size_t numberOfNodes();
   20061             : 
   20062             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   20063             :           static size_t memoryUsage();
   20064             : 
   20065             :       // End of scope which started in IR nodes specific code 
   20066             :       /* */
   20067             : 
   20068             :       /* name Internal Functions
   20069             :           \brief Internal functions ... incomplete-documentation
   20070             : 
   20071             :           These functions have been made public as part of the design, but they are suggested for internal use 
   20072             :           or by particularly knowledgeable users for specialized tools or applications.
   20073             : 
   20074             :           \internal We could not make these private because they are required by user for special purposes. And 
   20075             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   20076             :          
   20077             :        */
   20078             : 
   20079             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   20080             :        // overridden in every class by *generated* implementation
   20081             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   20082             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   20083             :        // MS: 06/28/02 container of names of variables or container indices 
   20084             :        // used used in the traversal to access AST successor nodes
   20085             :        // overridden in every class by *generated* implementation
   20086             :       /*! \brief container of names of variables or container indices used used in the traversal
   20087             :           to access AST successor nodes overridden in every class by *generated* implementation */
   20088             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   20089             : 
   20090             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   20091             :        // than all the vector copies. The implementation for these functions is generated for each class.
   20092             :       /*! \brief return number of children in the traversal successor list */
   20093             :           virtual size_t get_numberOfTraversalSuccessors() override;
   20094             :       /*! \brief index-based access to traversal successors by index number */
   20095             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   20096             :       /*! \brief index-based access to traversal successors by child node */
   20097             :           virtual size_t get_childIndex(SgNode *child) override;
   20098             : 
   20099             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   20100             :        // MS: 08/16/2002 method for generating RTI information
   20101             :       /*! \brief return C++ Runtime-Time-Information */
   20102             :           virtual RTIReturnType roseRTI() override;
   20103             : #endif
   20104             :       /* */
   20105             : 
   20106             : 
   20107             : 
   20108             :       /* name Deprecated Functions
   20109             :           \brief Deprecated functions ... incomplete-documentation
   20110             : 
   20111             :           These functions have been deprecated from use.
   20112             :        */
   20113             :       /* */
   20114             : 
   20115             :       /*! returns a C style string (char*) representing the class name */
   20116             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   20117             : 
   20118             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   20119             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   20120             : #if 0
   20121             :       /*! returns old style Sage II enum values */
   20122             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   20123             :       /*! returns old style Sage II enum values */
   20124             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   20125             : #endif
   20126             :       /* */
   20127             : 
   20128             : 
   20129             : 
   20130             : 
   20131             :      public:
   20132             :       /* name Traversal Support Functions
   20133             :           \brief Traversal support functions ... incomplete-documentation
   20134             : 
   20135             :           These functions have been made public as part of the design, but they are suggested for internal use 
   20136             :           or by particularly knowledgable users for specialized tools or applications.
   20137             :        */
   20138             :       /* */
   20139             : 
   20140             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   20141             :        // (inferior to ROSE traversal mechanism, experimental).
   20142             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   20143             :        */
   20144             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   20145             : 
   20146             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   20147             :       /*! \brief support for the classic visitor pattern done in GoF */
   20148             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   20149             : 
   20150             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   20151             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   20152             :        */
   20153             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   20154             : 
   20155             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   20156             :        */
   20157             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   20158             : 
   20159             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   20160             :        // This traversal helps support internal tools that call static member functions.
   20161             :        // note: this function operates on the memory pools.
   20162             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   20163             :        */
   20164             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   20165             :       /* */
   20166             : 
   20167             : 
   20168             :      public:
   20169             :       /* name Memory Allocation Functions
   20170             :           \brief Memory allocations functions ... incomplete-documentation
   20171             : 
   20172             :           These functions have been made public as part of the design, but they are suggested for internal use 
   20173             :           or by particularly knowledgable users for specialized tools or applications.
   20174             :        */
   20175             :       /* */
   20176             : 
   20177             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   20178             : 
   20179             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   20180             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   20181             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   20182             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   20183             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   20184             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   20185             :           being used with the AST File I/O mechanism.
   20186             :        */
   20187             :           virtual bool isInMemoryPool() override;
   20188             : 
   20189             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   20190             : 
   20191             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   20192             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   20193             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   20194             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   20195             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   20196             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   20197             :           being used with the AST File I/O mechanism.
   20198             :        */
   20199             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   20200             : 
   20201             :       // DQ (4/30/2006): Modified to be a const function.
   20202             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   20203             : 
   20204             :           This functions is part of general support for many possible tools to operate 
   20205             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   20206             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   20207             :           less than the set of pointers used by the AST file I/O. This is part of
   20208             :           work implemented by Andreas, and support tools such as the AST graph generation.
   20209             : 
   20210             :           \warning This function can return unexpected data members and thus the 
   20211             :                    order and the number of elements is unpredicable and subject 
   20212             :                    to change.
   20213             : 
   20214             :           \returns STL vector of pairs of SgNode* and strings
   20215             :        */
   20216             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   20217             : 
   20218             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   20219             : 
   20220             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   20221             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   20222             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   20223             : 
   20224             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   20225             :                    and subject to change.
   20226             :        */
   20227             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   20228             : 
   20229             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   20230             : 
   20231             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   20232             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   20233             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   20234             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   20235             : 
   20236             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   20237             : 
   20238             :           \returns long
   20239             :        */
   20240             :           virtual long getChildIndex( SgNode* childNode ) const override;
   20241             : 
   20242             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   20243             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   20244             :       /* \brief Constructor for use by AST File I/O Mechanism
   20245             : 
   20246             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   20247             :           which obtained via fast binary file I/O from disk.
   20248             :        */
   20249             :        // SgClassDecl_attr( SgClassDecl_attrStorageClass& source );
   20250             : 
   20251             : 
   20252             : 
   20253             : 
   20254             : 
   20255             :  // JH (10/24/2005): methods added to support the ast file IO
   20256             :     private:
   20257             : 
   20258             :       /* name AST Memory Allocation Support Functions
   20259             :           \brief Memory allocations support....
   20260             : 
   20261             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   20262             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   20263             :           and support the AST File I/O Mechanism.
   20264             :        */
   20265             :       /* */
   20266             : 
   20267             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   20268             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   20269             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   20270             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   20271             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   20272             :           a correspinding one in the AST_FILE_IO class!
   20273             :        */
   20274             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   20275             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   20276             :       /* \brief Typedef used for low level memory access.
   20277             :        */
   20278             :        // typedef unsigned char* TestType;
   20279             : 
   20280             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   20281             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   20282             :       /* \brief Typedef used to hold memory addresses as values.
   20283             :        */
   20284             :        // typedef unsigned long  AddressType;
   20285             : 
   20286             : 
   20287             : 
   20288             :        // necessary, to have direct access to the p_freepointer and the private methods !
   20289             :       /*! \brief friend class declaration to support AST File I/O */
   20290             :           friend class AST_FILE_IO;
   20291             : 
   20292             :       /*! \brief friend class declaration to support AST File I/O */
   20293             :           friend class SgClassDecl_attrStorageClass;
   20294             : 
   20295             :       /*! \brief friend class declaration to support AST File I/O */
   20296             :           friend class AstSpecificDataManagingClass;
   20297             : 
   20298             :       /*! \brief friend class declaration to support AST File I/O */
   20299             :           friend class AstSpecificDataManagingClassStorageClass;
   20300             :     public:
   20301             :       /*! \brief IR node constructor to support AST File I/O */
   20302             :           SgClassDecl_attr( const SgClassDecl_attrStorageClass& source );
   20303             : 
   20304             :  // private: // JJW hack
   20305             :        /*
   20306             :           name AST Memory Allocation Support Variables
   20307             :           Memory allocations support variables 
   20308             : 
   20309             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   20310             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   20311             :           and support the AST File I/O Mechanism.
   20312             :        */
   20313             :       /* */
   20314             : 
   20315             :     public:
   20316             : 
   20317             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   20318             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   20319             :       // virtual SgNode* addRegExpAttribute();
   20320             :       /*! \brief Support for AST matching using regular expression.
   20321             : 
   20322             :           This support is incomplete and the subject of current research to define 
   20323             :           RegEx trees to support inexact matching.
   20324             :        */
   20325             :           SgClassDecl_attr* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   20326             : 
   20327             : // *** COMMON CODE SECTION ENDS HERE ***
   20328             : 
   20329             : 
   20330             : // End of memberFunctionString
   20331             : // Start of memberFunctionString
   20332             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   20333             : 
   20334             :      // the generated cast function
   20335             :      // friend ROSE_DLL_API SgClassDecl_attr* isSgClassDecl_attr ( SgNode* s );
   20336             : 
   20337             :           typedef SgBitAttribute base_node_type;
   20338             : 
   20339             : 
   20340             : // End of memberFunctionString
   20341             : 
   20342             : 
   20343             :      public: 
   20344             :          virtual ~SgClassDecl_attr();
   20345             : 
   20346             :     protected:
   20347             : 
   20348             :     friend struct Rose::Traits::generated::describe_node_t<SgClassDecl_attr>;
   20349             : 
   20350             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   20351             : 
   20352             : 
   20353             :    };
   20354             : #endif
   20355             : 
   20356             : // postdeclarations for SgClassDecl_attr
   20357             : 
   20358             : /* #line 20359 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   20359             : /* #line 5758 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   20360             : 
   20361             : //int get_suppress_globalSgClassDeclaration *);
   20362             : //void set_suppress_global(SgClassDeclaration *);
   20363             : 
   20364             : 
   20365             : 
   20366             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   20367             : 
   20368             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   20369             : 
   20370             : 
   20371             : /* #line 20372 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   20372             : 
   20373             : 
   20374             : 
   20375             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   20376             : 
   20377             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   20378             : //      This code is automatically generated for each 
   20379             : //      terminal and non-terminal within the defined 
   20380             : //      grammar.  There is a simple way to change the 
   20381             : //      code to fix bugs etc.  See the ROSE README file
   20382             : //      for directions.
   20383             : 
   20384             : // tps: (02/22/2010): Adding DLL export requirements
   20385             : #include "rosedll.h"
   20386             : 
   20387             : // predeclarations for Sg_File_Info
   20388             : 
   20389             : /* #line 20390 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   20390             : 
   20391             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   20392             : 
   20393             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   20394             : 
   20395             : #if 1
   20396             : // Class Definition for Sg_File_Info
   20397             : class ROSE_DLL_API Sg_File_Info  : public SgSupport
   20398             :    {
   20399             :      public:
   20400             : 
   20401             : 
   20402             : /* #line 20403 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   20403             : 
   20404             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   20405             : // Start of memberFunctionString
   20406             : /* #line 5791 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   20407             : 
   20408             : 
   20409             :       /*! \brief Enum type containing classifications if IR nodes.
   20410             : 
   20411             :           This is part of the classification mechanism for IR nodes within ROSE.
   20412             :           Compiler generated code is not output in the code generation phase,
   20413             :           but some compiler generated IR nodes must be output so such nodes are explicitly
   20414             :           marked within the classification process (implemented in ASTFixes.C).
   20415             :              - Examples of transformation IR nodes include:
   20416             :                 -# Any relocated AST subtrees
   20417             :                 -# Any new IR nodes
   20418             :              - Examples of compiler-generated IR nodes include:
   20419             :                 -# Any implicit or unnecessary casts not explicitly represented in the source code
   20420             :                 -# Instantiated templates
   20421             :              - Examples of compiler-generated code marked for output (in code generation phase) include:
   20422             :                 -# Any transformed template instantiations
   20423             :                 -# required templates assigned to specific files (see ROSE prelinking details)
   20424             :              - Examples of shared IR nodes include:
   20425             :                 -# All types (not implemented yet)
   20426             :                 -# All IR nodes shared across originally separate ASTs (see AST Merge Mechanism)
   20427             :              - Examples of frontend specific IR nodes include:
   20428             :                 -# float __builtin_acosf (float __builtin__x);
   20429             :                 -# #define __builtin_va_start va_start
   20430             :                 -# All functions and variables defined in "rose_edg_required_macros_and_functions.h"
   20431             : 
   20432             :           \internal We need constructors taking a value of this type.
   20433             :        */
   20434             :           enum classifier
   20435             :              {
   20436             :                e_transformation                          = 0x1,  /*!< classify as a transformation */
   20437             :                e_compiler_generated                      = 0x2,  /*!< classify as compiler generated */
   20438             :                e_output_in_code_generation               = 0x4,  /*!< classify as required when generating code in unparser (orthogonal concept to transformation and compiler generated) */
   20439             :                e_shared                                  = 0x8,  /*!< classify as a shared IR node (part of evolving support for AST merging) */
   20440             :                e_frontend_specific                       = 0x10, /*!< classify as frontend specific (e.g. gnu compatable function from rose_edg_required_macros_and_functions.h) */
   20441             :                e_source_position_unavailable_in_frontend = 0x20, /*!< classify as explictly unabailable from front-end */
   20442             :                e_comment_or_directive                    = 0x40, /*!< classify as a comment or directive (not a part of the language grammar) */
   20443             :                e_token                                   = 0x80, /*!< classify as a token from the parser (not a part of the language grammar) */
   20444             :             // DQ (4/24/2013): Added support for default arguments.
   20445             :                e_default_argument                        = 0x100,/*!< classify as a default arguement to function call expression */
   20446             :             // DQ (4/24/2013): Added support for implicit cast.
   20447             :                e_implicit_cast                           = 0x200 /*!< classify as a implicit cast */
   20448             :              };
   20449             : 
   20450             :        // ~Sg_File_Info();
   20451             : 
   20452             :        // DQ (5/10/2006): Remove these to simplify implementation.
   20453             :           Sg_File_Info();
   20454             :        // Sg_File_Info(const char* filename, int line = 0, int col = 0) ROSE_DEPRECATED_FUNCTION;
   20455             :           Sg_File_Info(const std::string & filename, int line = 0, int col = 0);
   20456             : 
   20457             :        // DQ (2/15/2003): added copy constructor
   20458             :           Sg_File_Info(const Sg_File_Info & X);
   20459             : 
   20460             :        // DQ (11/6/2008): Added to support construction of objects using Dwarf information.
   20461             :           Sg_File_Info( int file_id, int line, int column );
   20462             : 
   20463             :           void post_construction_initialization() override;
   20464             : 
   20465             :        // ROSE-1499, ROSE-1639 (added const to char*)
   20466             :           void check_file_id(const char * label, bool assertion=true) const;
   20467             : 
   20468             :        // DQ (11/6/2008): Added support for extending the internal static filename to integer id map
   20469             :       //! Access function to permit files referenced in Dwarf to be mapped to integers using the same scheme as for source code.
   20470             :           static int addFilenameToMap ( const std::string & filename );
   20471             : 
   20472             :       //! Returns the number of entries in the filename map
   20473             :           static int numberOfSourceFiles();
   20474             : 
   20475             :           void set_filename (const char* filename) ROSE_DEPRECATED_FUNCTION;
   20476             :           void set_filenameString ( const std::string & filename );
   20477             :           void set_line (int line);
   20478             :           void set_col ( int n );
   20479             :           void display (const std::string label ) const;
   20480             :           void display () const;
   20481             :           std::string displayString (const std::string & label = "") const;
   20482             :           //void output (std::ostream& os) ROSE_DEPRECATED_FUNCTION;
   20483             : 
   20484             :        // DQ (6/11/2007): output static data for debugging
   20485             :           static void display_static_data( const std::string label );
   20486             : 
   20487             :           const char* get_filename() const ROSE_DEPRECATED_FUNCTION;
   20488             :           const std::string& get_filenameString() const;
   20489             :           int   get_line() const;
   20490             :           int   get_col() const;
   20491             : 
   20492             :        // DQ (2/28/2019): Support for multi-file handling.
   20493             :       //! Where this is a shared IR node across multiple files, return the line number location of the IR node for a specific file.
   20494             :           int   get_line(int file_id) const;
   20495             : 
   20496             :           void set_file_id ( int file_id );
   20497             :           int  get_file_id () const;
   20498             : 
   20499             :           std::string get_raw_filename() const;
   20500             :           int  get_raw_line() const;
   20501             :           int  get_raw_col() const;
   20502             : 
   20503             :        // DQ (12/18/2012): Added support for physical filename and line number data.
   20504             :           void set_physical_filename ( const std::string & filename );
   20505             :           std::string get_physical_filename() const;
   20506             :           void set_physical_file_id ( int physical_file_id );
   20507             :           int  get_physical_file_id () const;
   20508             :           void set_physical_line (int line);
   20509             :           int  get_physical_line() const;
   20510             :           void set_physical_source_position_to_match_logical_source_position();
   20511             : 
   20512             :        // DQ (2/28/2019): Support for multi-file handling.
   20513             :       //! Where this is a shared IR node across multiple files, return the line number location of the IR node for a specific file.
   20514             :           int  get_physical_line(int file_id) const;
   20515             : 
   20516             :        // DQ (2/28/2019): This is required because the physical id returned can be dependent on the file id when this is a shared IR node.
   20517             :           int  get_physical_file_id (int file_id) const;
   20518             : 
   20519             :        // DQ (1/23/2013): Added source position sequence information. This work supports the handling of default arguments and addresses
   20520             :        // new future capabilities to ROSE.
   20521             :           void set_source_sequence_number (unsigned int n);
   20522             :           unsigned int get_source_sequence_number() const;
   20523             : 
   20524             :        // DQ (12/22/2006): This copies the line number and column number information and verifies that
   20525             :        // the file name is the same (it does not reset any fo the classification flags).  This is more
   20526             :        // useful than the assignment operator for updating information and is used in the file:
   20527             :        // fixupSourcePositionInformation.C
   20528             :           void updateSourcePosition ( Sg_File_Info* update );
   20529             : 
   20530             :        // DQ (6/20/2005): There are a number of reasons why an IR node might not have a position in the source code
   20531             :        // this function abstracts that query process.
   20532             :           bool hasPositionInSource() const;
   20533             : 
   20534             :        // DQ (6/21/2005): check if this file info object is from the same file
   20535             : 
   20536             :        // DQ (9/5/2008): Switched back to using SgFile instead of SgSourceFile.
   20537             :        // bool isSameFile(SgFile* file) const;
   20538             :        // bool isSameFile(SgSourceFile* file) const;
   20539             :           bool isSameFile(SgFile* file) const;
   20540             : 
   20541             :        // DQ (1/18/2006): Added new function with more useful interface.
   20542             :           bool isSameFile(Sg_File_Info* fileInfo) const;
   20543             :        // DQ (11/1/2006): Alternative use case.
   20544             :           bool isSameFile(const Sg_File_Info & fileInfo) const;
   20545             : 
   20546             :       //! Access function for classification bit field
   20547             :        // bool isOriginal() const;
   20548             :           bool isTransformation() const;
   20549             :        // bool isDeclaration() const ROSE_DEPRECATED_FUNCTION;
   20550             :        // bool isInitialization() const ROSE_DEPRECATED_FUNCTION;
   20551             : 
   20552             :        // DQ (2/21/2005): Added support for specification of compiler generated code (done in front-end translation)
   20553             :           bool isCompilerGenerated() const;
   20554             :           bool isCompilerGeneratedNodeToBeUnparsed() const ROSE_DEPRECATED_FUNCTION;
   20555             :           bool isOutputInCodeGeneration() const;
   20556             :           bool isShared() const;
   20557             :           bool isFrontendSpecific() const;
   20558             :        // bool isUnused1() const;
   20559             : 
   20560             :           bool isSourcePositionUnavailableInFrontend() const;
   20561             :           void unsetSourcePositionUnavailableInFrontend();
   20562             :           void setSourcePositionUnavailableInFrontend();
   20563             : 
   20564             :        // DQ (12/23/2006): Added to support the Sg_File_Info objects used by comments and CPP directives
   20565             :        // (since their parents are NULL, becuase the PreprocessingInfo class is not dirived from a SgNode
   20566             :        // the parent point can't be used to point to it).
   20567             :           bool isCommentOrDirective() const;
   20568             :           void unsetCommentOrDirective();
   20569             :           void setCommentOrDirective();
   20570             : 
   20571             :        // DQ (12/23/2006): Added to support Rama and Andreas's work on handling of token streams within the AST.
   20572             :        // (The Sg_File_Info objects used have NULL parent pointers, becuase the token class is not dirived from a SgNode.
   20573             :           bool isToken() const;
   20574             :           void unsetToken();
   20575             :           void setToken();
   20576             : 
   20577             :        // DQ (4/24/2013): Added support for marking as default argument.  Note that compiler generated is not specific
   20578             :        // enough because even implicit casts would then be confused as default arguments.
   20579             :           bool isDefaultArgument() const;
   20580             :           void unsetDefaultArgument();
   20581             :           void setDefaultArgument();
   20582             : 
   20583             :        // DQ (4/26/2013): Added support for marking as implicit casts.  Note that compiler generated is not
   20584             :        // as specific as we want (though it has worked for a long time, we want a more precise mechanism).
   20585             :           bool isImplicitCast() const;
   20586             :           void unsetImplicitCast();
   20587             :           void setImplicitCast();
   20588             : 
   20589             :       //! Set/unset functions for classification bit field
   20590             :        // void unsetOriginal();
   20591             :        // void setOriginal();
   20592             :           void unsetTransformation();
   20593             :           void setTransformation();
   20594             :        // void unsetDeclaration();
   20595             :        // void setDeclaration();
   20596             :        // void unsetInitialization();
   20597             :        // void setInitialization();
   20598             : 
   20599             :       //! Mark as compiler generated but as required to be output by unparser (e.g. required template instatiations)
   20600             :           void unsetCompilerGeneratedNodeToBeUnparsed() ROSE_DEPRECATED_FUNCTION;
   20601             :           void setCompilerGeneratedNodeToBeUnparsed() ROSE_DEPRECATED_FUNCTION;
   20602             : 
   20603             :       //! Mark as to be output by the unparser (code generator)
   20604             :           void unsetOutputInCodeGeneration();
   20605             :           void setOutputInCodeGeneration();
   20606             : 
   20607             :       //! Support for shared IR nodes (shared via AST merge mechanism)
   20608             :           void unsetShared();
   20609             :           void setShared();
   20610             : 
   20611             :        // DQ (5/6/2006): Added to support gnu compatability mode (incomplete within EDG and
   20612             :        // which we make complete through the declaration of builtin functions as required).
   20613             :           void unsetFrontendSpecific();
   20614             :           void setFrontendSpecific();
   20615             : 
   20616             :        // MK (8/2/05) : Added support for unparsing set, to allow shared nodes to only be unparsed by
   20617             :        //               the appropriate files
   20618             :       //! Add files to the set that should be able to unparse the node
   20619             :           void addFileToUnparse(int file_id);
   20620             :       //! Should this node be unparsed by this file?
   20621             :           bool shouldUnparse(int file_id);
   20622             : 
   20623             :        // DQ (2/21/2005): Added support for specification of compiler generated code (done in front-end translation)
   20624             :           void unsetCompilerGenerated();
   20625             :           void setCompilerGenerated();
   20626             : 
   20627             :        // DQ (8/1/2005): use static function to return new Sg_File_Info object set to default values
   20628             :           static Sg_File_Info* generateDefaultFileInfo();
   20629             : 
   20630             :           static Sg_File_Info* generateDefaultFileInfoForTransformationNode();
   20631             : 
   20632             :        // DQ (1/11/2006): Added static function whicl allows specification of transformation with assignement to
   20633             :        // a specific file (where it would be unparsed). This function will call setOutputInCodeGeneration().
   20634             :           static Sg_File_Info* generateFileInfoForTransformationNode( int file_id );
   20635             :           static Sg_File_Info* generateFileInfoForTransformationNode( std::string filename );
   20636             : 
   20637             :           static Sg_File_Info* generateDefaultFileInfoForCompilerGeneratedNode();
   20638             : 
   20639             : 
   20640             :       //! Get whole bit field fr modifier set
   20641             :           unsigned int get_classificationBitField(void) const;
   20642             :           void set_classificationBitField( unsigned int );
   20643             : 
   20644             :           void set_isPartOfTransformation( bool isPartOfTransformation ) ROSE_DEPRECATED_FUNCTION;
   20645             :           bool get_isPartOfTransformation() ROSE_DEPRECATED_FUNCTION;
   20646             : 
   20647             :           void register_node(SgLocatedNode* node) ROSE_DEPRECATED_FUNCTION; /* register interest */
   20648             :           void deregister_node(SgLocatedNode* node) ROSE_DEPRECATED_FUNCTION;
   20649             : 
   20650             :        // functions added by Dan Quinlan (suggested by Gary Lee)
   20651             :        // int   getCurrentLine () const ROSE_DEPRECATED_FUNCTION;
   20652             :        // std::string getCurrentFilename () const ROSE_DEPRECATED_FUNCTION;
   20653             : 
   20654             :        // int   getReferenceCount() ROSE_DEPRECATED_FUNCTION;
   20655             :        // void  incrementReferenceCount() ROSE_DEPRECATED_FUNCTION;
   20656             :        // void  decrementReferenceCount() ROSE_DEPRECATED_FUNCTION;
   20657             : 
   20658             :        // DQ (7/4/2005): Added to test internal consistancy
   20659             :           bool ok() const;
   20660             :        // bool consistancyCheck() const;
   20661             : 
   20662             :        // MK (8/2/05) : Added functions to interface with fileid maps, in order to eventually
   20663             :        //               restrict access to the maps themselves
   20664             :        // PC and AS (8/29/06) : made function return a const string reference as this will
   20665             :        // eliminate the temporary string within the lifetime of the function.
   20666             :           static const std::string& getFilenameFromID( int id );
   20667             :           static int getIDFromFilename( std::string filename );
   20668             : 
   20669             :        // DQ (11/2/2006): Added simple assignment operator.
   20670             :           Sg_File_Info & operator= ( const Sg_File_Info & X );
   20671             : 
   20672             :        // DQ (9/26/2004): Added operator== to permit testing of reused definitions of defining declarations!
   20673             :           friend bool operator== ( const Sg_File_Info & X, const Sg_File_Info & Y );
   20674             :        // DQ (10/6/2004): Added operator!= to permit testing of reused definitions of defining declarations!
   20675             :           friend bool operator!= ( const Sg_File_Info & X, const Sg_File_Info & Y );
   20676             :        // DQ (10/25/2004): Added operator> to permit testing of strting vs. ending file info object (assert starting < ending)
   20677             :           friend bool operator>  ( const Sg_File_Info & X, const Sg_File_Info & Y );
   20678             :           friend bool operator<  ( const Sg_File_Info & X, const Sg_File_Info & Y );
   20679             :           friend bool operator>= ( const Sg_File_Info & X, const Sg_File_Info & Y );
   20680             :           friend bool operator<= ( const Sg_File_Info & X, const Sg_File_Info & Y );
   20681             : 
   20682             :         // DQ (2/23/2010): Added static access function for static data members (ROSETTA generates only not statuc access functions).
   20683             :        //! Access function for static datamember fileidtoname_map.
   20684             :           static std::map<int, std::string> & get_fileidtoname_map();
   20685             :        //! Access function for map of file names.
   20686             :           static void set_fileidtoname_map(std::map<int, std::string> & X);
   20687             : 
   20688             :         // DQ (2/23/2010): Added static access function for static data members (ROSETTA generates only not statuc access functions).
   20689             :        //! Access function for static datamember nametofileid_map.
   20690             :          static std::map<std::string, int> & get_nametofileid_map();
   20691             :        //! Access function for map of file names.
   20692             :          static void set_nametofileid_map(std::map<std::string,int> & X);
   20693             : 
   20694             :        // MK (7/22/05) This enum is used by the file id mechanism
   20695             :        /*! \brief Enum to hold previously common default values for filename used by the default and static SgNULL_File constructors.
   20696             : 
   20697             :            \internal These values can and likely should disappear in the future.
   20698             :         */
   20699             :           enum p_fileflags {
   20700             :                COPY_FILE_ID                                 = -1, /*!< default value (equivalent to filename with "COPY") */
   20701             :                NULL_FILE_ID                                 = -2, /*!< value equivalent to filename with "NULL_FILE" */
   20702             :                TRANSFORMATION_FILE_ID                       = -3, /*!< value for all nodes marked as part of a translation */
   20703             :                COMPILER_GENERATED_FILE_ID                   = -4, /*!< value for compiler generated IR nodes (NOT marked for output) */
   20704             :                COMPILER_GENERATED_MARKED_FOR_OUTPUT_FILE_ID = -5, /*!< value for compiler generated IR nodes (marked for output, deprecated value) */
   20705             :             // MK (8/2/05) : Added new enum value to facilitate interface to maps. If we try
   20706             :             //               to retrieve the fileid for a filename which isn't in the map, we return
   20707             :             //               BAD_FILE_ID to indicate this.
   20708             :                BAD_FILE_ID = -6   /*!< value returned if there is no file id mapped to given filename */
   20709             :              };
   20710             : 
   20711             : 
   20712             : 
   20713             :        // DQ (2/27/2019): Adding support for access function to list of fileIds and line numbers associated with
   20714             :        // support for multi-file sharing of IR nodes and the support to know there source position information
   20715             :        // from each file.
   20716             :        // const SgFileIdList & get_fileIDsToUnparse () const;
   20717             :        // SgFileIdList & get_fileIDsToUnparse ();
   20718             : 
   20719             : #if 0
   20720             :        // DQ (12/20/2005): These have been placed into ROSETTA
   20721             : 
   20722             :        // MK (7/22/05) These maps are used by the file id mechanism
   20723             :       //! STL map object to hold file id's to strings
   20724             :           static std::map<int, std::string> p_fileidtoname_map;
   20725             :       //! STL map to hold reverse map of p_fileidtoname_map
   20726             :           static std::map<std::string, int> p_nametofileid_map;
   20727             : 
   20728             :        // MK (7/22/05) These maps are used by the file id mechanism
   20729             :       //! This allows us to generate unique file ids for every filename we see.
   20730             :           static int p_max_file_id;
   20731             : #endif
   20732             : 
   20733             : 
   20734             : 
   20735             : // End of memberFunctionString
   20736             : // Start of memberFunctionString
   20737             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   20738             : 
   20739             : // *** COMMON CODE SECTION BEGINS HERE ***
   20740             : 
   20741             :     public:
   20742             : 
   20743             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   20744             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   20745             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   20746             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   20747             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   20748             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   20749             : 
   20750             :       /*! \brief returns a string representing the class name */
   20751             :           virtual std::string class_name() const override;
   20752             : 
   20753             :       /*! \brief returns new style SageIII enum values */
   20754             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   20755             : 
   20756             :       /*! \brief static variant value */
   20757             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   20758             :        // static const VariantT static_variant = V_Sg_File_Info;
   20759             :           enum { static_variant = V_Sg_File_Info };
   20760             : 
   20761             :        /* the generated cast function */
   20762             :       /*! \brief Casts pointer from base class to derived class */
   20763             :           ROSE_DLL_API friend       Sg_File_Info* isSg_File_Info(       SgNode * s );
   20764             : 
   20765             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   20766             :           ROSE_DLL_API friend const Sg_File_Info* isSg_File_Info( const SgNode * s );
   20767             : 
   20768             :      // ******************************************
   20769             :      // * Memory Pool / New / Delete
   20770             :      // ******************************************
   20771             : 
   20772             :      public:
   20773             :           /// \private
   20774             :           static const unsigned pool_size; //
   20775             :           /// \private
   20776             :           static std::vector<unsigned char *> pools; //
   20777             :           /// \private
   20778             :           static Sg_File_Info * next_node; // 
   20779             : 
   20780             :           /// \private
   20781             :           static unsigned long initializeStorageClassArray(Sg_File_InfoStorageClass *); //
   20782             : 
   20783             :           /// \private
   20784             :           static void clearMemoryPool(); //
   20785             :           static void deleteMemoryPool(); //
   20786             : 
   20787             :           /// \private
   20788             :           static void extendMemoryPoolForFileIO(); //
   20789             : 
   20790             :           /// \private
   20791             :           static Sg_File_Info * getPointerFromGlobalIndex(unsigned long); //
   20792             :           /// \private
   20793             :           static Sg_File_Info * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   20794             : 
   20795             :           /// \private
   20796             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   20797             :           /// \private
   20798             :           static void resetValidFreepointers(); //
   20799             :           /// \private
   20800             :           static unsigned long getNumberOfLastValidPointer(); //
   20801             : 
   20802             : 
   20803             : #if defined(INLINE_FUNCTIONS)
   20804             :       /*! \brief returns pointer to newly allocated IR node */
   20805             :           inline void *operator new (size_t size);
   20806             : #else
   20807             :       /*! \brief returns pointer to newly allocated IR node */
   20808             :           void *operator new (size_t size);
   20809             : #endif
   20810             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   20811             :           void operator delete (void* pointer, size_t size);
   20812             : 
   20813             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   20814    25591200 :           void operator delete (void* pointer)
   20815             :              {
   20816             :             // This is the generated delete operator...
   20817    25591200 :                Sg_File_Info::operator delete (pointer,sizeof(Sg_File_Info));
   20818             :              }
   20819             : 
   20820             :       /*! \brief Returns the total number of IR nodes of this type */
   20821             :           static size_t numberOfNodes();
   20822             : 
   20823             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   20824             :           static size_t memoryUsage();
   20825             : 
   20826             :       // End of scope which started in IR nodes specific code 
   20827             :       /* */
   20828             : 
   20829             :       /* name Internal Functions
   20830             :           \brief Internal functions ... incomplete-documentation
   20831             : 
   20832             :           These functions have been made public as part of the design, but they are suggested for internal use 
   20833             :           or by particularly knowledgeable users for specialized tools or applications.
   20834             : 
   20835             :           \internal We could not make these private because they are required by user for special purposes. And 
   20836             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   20837             :          
   20838             :        */
   20839             : 
   20840             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   20841             :        // overridden in every class by *generated* implementation
   20842             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   20843             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   20844             :        // MS: 06/28/02 container of names of variables or container indices 
   20845             :        // used used in the traversal to access AST successor nodes
   20846             :        // overridden in every class by *generated* implementation
   20847             :       /*! \brief container of names of variables or container indices used used in the traversal
   20848             :           to access AST successor nodes overridden in every class by *generated* implementation */
   20849             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   20850             : 
   20851             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   20852             :        // than all the vector copies. The implementation for these functions is generated for each class.
   20853             :       /*! \brief return number of children in the traversal successor list */
   20854             :           virtual size_t get_numberOfTraversalSuccessors() override;
   20855             :       /*! \brief index-based access to traversal successors by index number */
   20856             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   20857             :       /*! \brief index-based access to traversal successors by child node */
   20858             :           virtual size_t get_childIndex(SgNode *child) override;
   20859             : 
   20860             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   20861             :        // MS: 08/16/2002 method for generating RTI information
   20862             :       /*! \brief return C++ Runtime-Time-Information */
   20863             :           virtual RTIReturnType roseRTI() override;
   20864             : #endif
   20865             :       /* */
   20866             : 
   20867             : 
   20868             : 
   20869             :       /* name Deprecated Functions
   20870             :           \brief Deprecated functions ... incomplete-documentation
   20871             : 
   20872             :           These functions have been deprecated from use.
   20873             :        */
   20874             :       /* */
   20875             : 
   20876             :       /*! returns a C style string (char*) representing the class name */
   20877             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   20878             : 
   20879             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   20880             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   20881             : #if 0
   20882             :       /*! returns old style Sage II enum values */
   20883             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   20884             :       /*! returns old style Sage II enum values */
   20885             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   20886             : #endif
   20887             :       /* */
   20888             : 
   20889             : 
   20890             : 
   20891             : 
   20892             :      public:
   20893             :       /* name Traversal Support Functions
   20894             :           \brief Traversal support functions ... incomplete-documentation
   20895             : 
   20896             :           These functions have been made public as part of the design, but they are suggested for internal use 
   20897             :           or by particularly knowledgable users for specialized tools or applications.
   20898             :        */
   20899             :       /* */
   20900             : 
   20901             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   20902             :        // (inferior to ROSE traversal mechanism, experimental).
   20903             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   20904             :        */
   20905             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   20906             : 
   20907             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   20908             :       /*! \brief support for the classic visitor pattern done in GoF */
   20909             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   20910             : 
   20911             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   20912             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   20913             :        */
   20914             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   20915             : 
   20916             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   20917             :        */
   20918             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   20919             : 
   20920             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   20921             :        // This traversal helps support internal tools that call static member functions.
   20922             :        // note: this function operates on the memory pools.
   20923             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   20924             :        */
   20925             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   20926             :       /* */
   20927             : 
   20928             : 
   20929             :      public:
   20930             :       /* name Memory Allocation Functions
   20931             :           \brief Memory allocations functions ... incomplete-documentation
   20932             : 
   20933             :           These functions have been made public as part of the design, but they are suggested for internal use 
   20934             :           or by particularly knowledgable users for specialized tools or applications.
   20935             :        */
   20936             :       /* */
   20937             : 
   20938             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   20939             : 
   20940             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   20941             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   20942             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   20943             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   20944             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   20945             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   20946             :           being used with the AST File I/O mechanism.
   20947             :        */
   20948             :           virtual bool isInMemoryPool() override;
   20949             : 
   20950             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   20951             : 
   20952             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   20953             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   20954             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   20955             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   20956             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   20957             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   20958             :           being used with the AST File I/O mechanism.
   20959             :        */
   20960             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   20961             : 
   20962             :       // DQ (4/30/2006): Modified to be a const function.
   20963             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   20964             : 
   20965             :           This functions is part of general support for many possible tools to operate 
   20966             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   20967             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   20968             :           less than the set of pointers used by the AST file I/O. This is part of
   20969             :           work implemented by Andreas, and support tools such as the AST graph generation.
   20970             : 
   20971             :           \warning This function can return unexpected data members and thus the 
   20972             :                    order and the number of elements is unpredicable and subject 
   20973             :                    to change.
   20974             : 
   20975             :           \returns STL vector of pairs of SgNode* and strings
   20976             :        */
   20977             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   20978             : 
   20979             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   20980             : 
   20981             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   20982             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   20983             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   20984             : 
   20985             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   20986             :                    and subject to change.
   20987             :        */
   20988             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   20989             : 
   20990             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   20991             : 
   20992             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   20993             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   20994             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   20995             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   20996             : 
   20997             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   20998             : 
   20999             :           \returns long
   21000             :        */
   21001             :           virtual long getChildIndex( SgNode* childNode ) const override;
   21002             : 
   21003             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   21004             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   21005             :       /* \brief Constructor for use by AST File I/O Mechanism
   21006             : 
   21007             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   21008             :           which obtained via fast binary file I/O from disk.
   21009             :        */
   21010             :        // Sg_File_Info( Sg_File_InfoStorageClass& source );
   21011             : 
   21012             : 
   21013             : 
   21014             : 
   21015             : 
   21016             :  // JH (10/24/2005): methods added to support the ast file IO
   21017             :     private:
   21018             : 
   21019             :       /* name AST Memory Allocation Support Functions
   21020             :           \brief Memory allocations support....
   21021             : 
   21022             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   21023             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   21024             :           and support the AST File I/O Mechanism.
   21025             :        */
   21026             :       /* */
   21027             : 
   21028             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   21029             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   21030             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   21031             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   21032             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   21033             :           a correspinding one in the AST_FILE_IO class!
   21034             :        */
   21035             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   21036             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   21037             :       /* \brief Typedef used for low level memory access.
   21038             :        */
   21039             :        // typedef unsigned char* TestType;
   21040             : 
   21041             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   21042             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   21043             :       /* \brief Typedef used to hold memory addresses as values.
   21044             :        */
   21045             :        // typedef unsigned long  AddressType;
   21046             : 
   21047             : 
   21048             : 
   21049             :        // necessary, to have direct access to the p_freepointer and the private methods !
   21050             :       /*! \brief friend class declaration to support AST File I/O */
   21051             :           friend class AST_FILE_IO;
   21052             : 
   21053             :       /*! \brief friend class declaration to support AST File I/O */
   21054             :           friend class Sg_File_InfoStorageClass;
   21055             : 
   21056             :       /*! \brief friend class declaration to support AST File I/O */
   21057             :           friend class AstSpecificDataManagingClass;
   21058             : 
   21059             :       /*! \brief friend class declaration to support AST File I/O */
   21060             :           friend class AstSpecificDataManagingClassStorageClass;
   21061             :     public:
   21062             :       /*! \brief IR node constructor to support AST File I/O */
   21063             :           Sg_File_Info( const Sg_File_InfoStorageClass& source );
   21064             : 
   21065             :  // private: // JJW hack
   21066             :        /*
   21067             :           name AST Memory Allocation Support Variables
   21068             :           Memory allocations support variables 
   21069             : 
   21070             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   21071             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   21072             :           and support the AST File I/O Mechanism.
   21073             :        */
   21074             :       /* */
   21075             : 
   21076             :     public:
   21077             : 
   21078             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   21079             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   21080             :       // virtual SgNode* addRegExpAttribute();
   21081             :       /*! \brief Support for AST matching using regular expression.
   21082             : 
   21083             :           This support is incomplete and the subject of current research to define 
   21084             :           RegEx trees to support inexact matching.
   21085             :        */
   21086             :           Sg_File_Info* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   21087             : 
   21088             : // *** COMMON CODE SECTION ENDS HERE ***
   21089             : 
   21090             : 
   21091             : // End of memberFunctionString
   21092             : // Start of memberFunctionString
   21093             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   21094             : 
   21095             :      // the generated cast function
   21096             :      // friend ROSE_DLL_API Sg_File_Info* isSg_File_Info ( SgNode* s );
   21097             : 
   21098             :           typedef SgSupport base_node_type;
   21099             : 
   21100             : 
   21101             : // End of memberFunctionString
   21102             : 
   21103             : 
   21104             : 
   21105             : 
   21106             : 
   21107             : 
   21108             : 
   21109             : 
   21110             :      public: 
   21111             :          const SgFileIdList&  get_fileIDsToUnparse() const;
   21112             :          SgFileIdList& get_fileIDsToUnparse(); 
   21113             : 
   21114             :      public: 
   21115             :          const SgFileLineNumberList&  get_fileLineNumbersToUnparse() const;
   21116             :          SgFileLineNumberList& get_fileLineNumbersToUnparse(); 
   21117             : 
   21118             : 
   21119             : 
   21120             : 
   21121             :      public: 
   21122             :          virtual ~Sg_File_Info();
   21123             : 
   21124             :     protected:
   21125             : // Start of memberFunctionString
   21126             : int p_file_id;
   21127             :           
   21128             : // End of memberFunctionString
   21129             : // Start of memberFunctionString
   21130             : int p_line;
   21131             :           
   21132             : // End of memberFunctionString
   21133             : // Start of memberFunctionString
   21134             : int p_col;
   21135             :           
   21136             : // End of memberFunctionString
   21137             : // Start of memberFunctionString
   21138             : unsigned int p_classificationBitField;
   21139             :           
   21140             : // End of memberFunctionString
   21141             : // Start of memberFunctionString
   21142             : int p_physical_file_id;
   21143             :           
   21144             : // End of memberFunctionString
   21145             : // Start of memberFunctionString
   21146             : int p_physical_line;
   21147             :           
   21148             : // End of memberFunctionString
   21149             : // Start of memberFunctionString
   21150             : unsigned int p_source_sequence_number;
   21151             :           
   21152             : // End of memberFunctionString
   21153             : // Start of memberFunctionString
   21154             : SgFileIdList p_fileIDsToUnparse;
   21155             :           
   21156             : // End of memberFunctionString
   21157             : // Start of memberFunctionString
   21158             : SgFileLineNumberList p_fileLineNumbersToUnparse;
   21159             :           
   21160             : // End of memberFunctionString
   21161             : // Start of memberFunctionString
   21162             : static std::map<int, std::string> p_fileidtoname_map;
   21163             :           
   21164             : // End of memberFunctionString
   21165             : // Start of memberFunctionString
   21166             : static std::map<std::string, int> p_nametofileid_map;
   21167             :           
   21168             : // End of memberFunctionString
   21169             : 
   21170             :     friend struct Rose::Traits::generated::describe_node_t<Sg_File_Info>;
   21171             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, int,&Sg_File_Info::p_file_id>;
   21172             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, int,&Sg_File_Info::p_line>;
   21173             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, int,&Sg_File_Info::p_col>;
   21174             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, unsigned int,&Sg_File_Info::p_classificationBitField>;
   21175             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, int,&Sg_File_Info::p_physical_file_id>;
   21176             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, int,&Sg_File_Info::p_physical_line>;
   21177             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, unsigned int,&Sg_File_Info::p_source_sequence_number>;
   21178             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, SgFileIdList,&Sg_File_Info::p_fileIDsToUnparse>;
   21179             :     friend struct Rose::Traits::generated::describe_field_t<Sg_File_Info, SgFileLineNumberList,&Sg_File_Info::p_fileLineNumbersToUnparse>;
   21180             : 
   21181             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   21182             : 
   21183             : 
   21184             :    };
   21185             : #endif
   21186             : 
   21187             : // postdeclarations for Sg_File_Info
   21188             : 
   21189             : /* #line 21190 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   21190             : /* #line 7590 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   21191             : 
   21192             : //! extern declarations used by the unparser (a default object for many to reference)
   21193             : // extern SgUnparse_Info SgNO_UNPARSE_INFO;
   21194             : 
   21195             : // support function declarations for unparsing
   21196             : //extern void printSgVariant ( std::ostream& os, int x );
   21197             : extern std::string getSgVariant ( int x);
   21198             : 
   21199             : 
   21200             : 
   21201             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   21202             : 
   21203             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   21204             : 
   21205             : 
   21206             : /* #line 21207 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   21207             : 
   21208             : 
   21209             : 
   21210             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   21211             : 
   21212             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   21213             : //      This code is automatically generated for each 
   21214             : //      terminal and non-terminal within the defined 
   21215             : //      grammar.  There is a simple way to change the 
   21216             : //      code to fix bugs etc.  See the ROSE README file
   21217             : //      for directions.
   21218             : 
   21219             : // tps: (02/22/2010): Adding DLL export requirements
   21220             : #include "rosedll.h"
   21221             : 
   21222             : // predeclarations for SgFile
   21223             : 
   21224             : /* #line 21225 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   21225             : 
   21226             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   21227             : 
   21228             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   21229             : 
   21230             : #if 1
   21231             : // Class Definition for SgFile
   21232             : class ROSE_DLL_API SgFile  : public SgSupport
   21233             :    {
   21234             :      public:
   21235             : 
   21236             : 
   21237             : /* #line 21238 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   21238             : 
   21239             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   21240             : // Start of memberFunctionString
   21241             : /* #line 6124 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   21242             : 
   21243             : 
   21244             : private:
   21245             :         friend class boost::serialization::access;
   21246             : 
   21247             :         template<class S>
   21248             :         void serialize(S &s, const unsigned /*version*/) {
   21249             :              s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(SgSupport);
   21250             :              // Most data members are not serialized yet, but this is here because SgFile is a base class of
   21251             :              // SgBinaryComposite whose fields are serialized.
   21252             :         }
   21253             : 
   21254             : public:
   21255             : 
   21256             :        /*! \brief Enum type used to specify output of Fortran as fixed for free format.
   21257             : 
   21258             :            \internal Has no effect on C/C++ code generation.
   21259             :         */
   21260             :           enum outputFormatOption_enum
   21261             :              {
   21262             :                e_unknown_output_format,    /*!< default value (uses filename extension to determine the output format, f77: fixed, F90 and later: free) */
   21263             :                e_fixed_form_output_format, /*!< value used to specify output of Fortran as fixed format */
   21264             :                e_free_form_output_format   /*!< value used to specify output of Fortran as free format */
   21265             :              };
   21266             : 
   21267             : 
   21268             :        /*! \brief Enum type used to specify output language (option used for testing unparsers).
   21269             : 
   21270             :            \internal This is only for testing the unparsers and some language constructs will not unparse.
   21271             :                      This is also a way to play with some language translation ideas, but most useful one
   21272             :                      will require a specialized tranlator to be built.
   21273             :         */
   21274             :        // enum outputLanguageOption_enum
   21275             :           enum languageOption_enum
   21276             :              {
   21277             :                e_error_language,   /*!< error value (uses filename extension to determine the output format, f77: fixed, F90 and later: free) */
   21278             :                e_default_language, /*!< default value (uses filename extension to determine the output format, f77: fixed, F90 and later: free) */
   21279             :                e_C_language,       /*!< value used to specify output of C (for testing C unparser) */
   21280             :                e_Cxx_language,     /*!< value used to specify output of C++ (for testing C++ unparser) */
   21281             :                e_Fortran_language, /*!< value used to specify output of Fortran (for testing the Fortran unparser) */
   21282             :                e_last_language     /*!< upper bound on the range of values supported for the outputLanguageOption_enum */
   21283             :              };
   21284             : 
   21285             : public:
   21286             :           enum standard_enum
   21287             :              {
   21288             :                e_default_standard,
   21289             :                e_c89_standard,
   21290             :                e_c90_standard,
   21291             :                e_c99_standard,
   21292             :                e_c11_standard,
   21293             :                e_c14_standard,
   21294             :                e_c18_standard,
   21295             :                e_upc_standard,
   21296             :                e_cxx98_standard,
   21297             :                e_cxx03_standard,
   21298             :                e_cxx11_standard,
   21299             :                e_cxx14_standard,
   21300             :                e_cxx17_standard,
   21301             :                e_cxx20_standard,
   21302             :                e_upcxx_standard,
   21303             :                e_f77_standard,
   21304             :                e_f90_standard,
   21305             :                e_f95_standard,
   21306             :                e_f03_standard,
   21307             :                e_f08_standard,
   21308             :                e_f18_standard
   21309             :              };
   21310             : 
   21311             : public:
   21312             :           enum standard_enum get_standard(void) const;
   21313             :           void set_standard(enum standard_enum e_std);
   21314             :           void set_default_standard(void);
   21315             : 
   21316             :        // DQ (1/10/2019): Add way to output a string to report standard in debug messages.
   21317             :           std::string display_standard(enum standard_enum e_std);
   21318             : 
   21319             :           bool is_gnu_standard(void) const;
   21320             :           void set_gnu_standard();
   21321             :           void unset_gnu_standard();
   21322             : 
   21323             :           bool get_C89_only (void) const;
   21324             :           void set_C89_only (void);
   21325             : 
   21326             :           bool get_C89_gnu_only (void) const;
   21327             :           void set_C89_gnu_only (void);
   21328             : 
   21329             :           bool get_C90_only (void) const;
   21330             :           void set_C90_only (void);
   21331             : 
   21332             :           bool get_C90_gnu_only (void) const;
   21333             :           void set_C90_gnu_only (void);
   21334             : 
   21335             :           bool get_C99_only (void) const;
   21336             :           void set_C99_only (void);
   21337             : 
   21338             :           bool get_C99_gnu_only (void) const;
   21339             :           void set_C99_gnu_only (void);
   21340             : 
   21341             :           bool get_C11_only (void) const;
   21342             :           void set_C11_only (void);
   21343             : 
   21344             :           bool get_C11_gnu_only (void) const;
   21345             :           void set_C11_gnu_only (void);
   21346             : 
   21347             :           bool get_C14_only (void) const;
   21348             :           void set_C14_only (void);
   21349             : 
   21350             :           bool get_C14_gnu_only (void) const;
   21351             :           void set_C14_gnu_only (void);
   21352             : 
   21353             :           bool get_C18_only (void) const;
   21354             :           void set_C18_only (void);
   21355             : 
   21356             :           bool get_C18_gnu_only (void) const;
   21357             :           void set_C18_gnu_only (void);
   21358             : 
   21359             :           bool get_UPC_only (void) const;
   21360             :           void set_UPC_only (void);
   21361             : 
   21362             :           bool get_Cxx98_only (void) const;
   21363             :           void set_Cxx98_only (void);
   21364             : 
   21365             :           bool get_Cxx98_gnu_only (void) const;
   21366             :           void set_Cxx98_gnu_only (void);
   21367             : 
   21368             :           bool get_Cxx03_only (void) const;
   21369             :           void set_Cxx03_only (void);
   21370             : 
   21371             :           bool get_Cxx03_gnu_only (void) const;
   21372             :           void set_Cxx03_gnu_only (void);
   21373             : 
   21374             :           bool get_Cxx11_only (void) const;
   21375             :           void set_Cxx11_only (void);
   21376             : 
   21377             :           bool get_Cxx11_gnu_only (void) const;
   21378             :           void set_Cxx11_gnu_only (void);
   21379             : 
   21380             :           bool get_Cxx14_only (void) const;
   21381             :           void set_Cxx14_only (void);
   21382             : 
   21383             :           bool get_Cxx14_gnu_only (void) const;
   21384             :           void set_Cxx14_gnu_only (void);
   21385             : 
   21386             :           bool get_Cxx17_only (void) const;
   21387             :           void set_Cxx17_only (void);
   21388             : 
   21389             :           bool get_Cxx17_gnu_only (void) const;
   21390             :           void set_Cxx17_gnu_only (void);
   21391             : 
   21392             :           bool get_Cxx20_only (void) const;
   21393             :           void set_Cxx20_only (void);
   21394             : 
   21395             :           bool get_Cxx20_gnu_only (void) const;
   21396             :           void set_Cxx20_gnu_only (void);
   21397             : 
   21398             :           bool get_UPCxx_only (void) const;
   21399             :           void set_UPCxx_only (void);
   21400             : 
   21401             :           bool get_F77_only     (void) const;
   21402             :           void set_F77_only     (void);
   21403             : 
   21404             :           bool get_F90_only     (void) const;
   21405             :           void set_F90_only     (void);
   21406             : 
   21407             :           bool get_F95_only     (void) const;
   21408             :           void set_F95_only     (void);
   21409             : 
   21410             :           bool get_F2003_only   (void) const;
   21411             :           void set_F2003_only   (void);
   21412             : 
   21413             :           bool get_F2008_only   (void) const;
   21414             :           void set_F2008_only   (void);
   21415             : 
   21416             :           bool get_F2018_only   (void) const;
   21417             :           void set_F2018_only   (void);
   21418             : 
   21419             : public:
   21420             : 
   21421             :       //! The only useful constructor (the argc and argv are the user's command line inputs and the
   21422             :       //! errorCode is the return value assembled from the multiple error codes associated with the
   21423             :       //! different phases of the compilation.  The fileNameIndex is the index into the list of
   21424             :       //! file names input on the user's command line.  We need a way to process them individually!
   21425             :           SgFile ( int & argc, char** & argv,  SgProject* project = NULL );
   21426             :           SgFile(std::vector<std::string>& argv,  SgProject* project = NULL);
   21427             : 
   21428             :        // SgFile ( int & argc, char** & argv, int & errorCode, int fileNameIndex, SgProject* project );
   21429             :        //   virtual void doSetupForConstructor(const std::vector<std::string>& argv, int& errorCode, int fileNameIndex, SgProject* project);
   21430             :        //AS(10/04/08) Changed semantics of doSetupForConstructor to not call frontend
   21431             :           virtual void doSetupForConstructor(const std::vector<std::string>& argv, SgProject* project);
   21432             : 
   21433             :       //! Default constructor (not meant to be used)
   21434             :       //  SgFile() ROSE_DEPRECATED_FUNCTION;
   21435             : 
   21436             :       //! Destructor
   21437             :       // ~SgFile();
   21438             : 
   21439             :       //! Initialization support for constructors
   21440             :           void initialization ();
   21441             : 
   21442             :       //! Unparsing support for generating C++ code from the internal Abstract Syntax Tree (AST)
   21443             :       //  void unparsestdout();
   21444             : 
   21445             :       //! Unparsing support for generating C++ code from the internal Abstract Syntax Tree (AST)
   21446             :       //  void unparse ( std::ostream & os );
   21447             : 
   21448             :        // Root of the Abstract Syntax Tree (AST) representing this file
   21449             :        // (a Sg global declaration scope statement).
   21450             :        // SgGlobal & root() ROSE_DEPRECATED_FUNCTION;
   21451             : 
   21452             :       //! Root of the Abstract Syntax Tree (AST) representing this file
   21453             :        // DQ (7/19/2005): Added to support future name change from "root"
   21454             :        // SgGlobal* get_globalScope() const;
   21455             : 
   21456             :        // DQ (9/5/2008): Support for older name of the SgGlobal in SgSourceFile
   21457             :        // SgGlobal* get_root() const;
   21458             : 
   21459             :        // DQ (3/18/2006): Modified the unparse function interface to permit specification of default
   21460             :        // arguments to control code generation formatting and use of alternative code generation
   21461             :        // approaches (copy based code generation).
   21462             :        // void unparse ();
   21463             :       //! Generate the C++ file representing the AST
   21464             :           void unparse ( UnparseFormatHelp *unparseHelp = NULL, UnparseDelegate* unparseDelagate = NULL );
   21465             : 
   21466             :        // DQ (5/8/2010): Added support to reset the Sg_File_Info (source code position information)
   21467             :        // to be relative to the generated code instead of the original input code.  This is useful when
   21468             :        // we want to output references to the position of language constructs in the generated code
   21469             :        // instead of the original input code.  Also useful for building references to locations in
   21470             :        // automatically generated code.
   21471             :           void resetSourcePositionToGeneratedCode ( UnparseFormatHelp *unparseFormatHelp = NULL );
   21472             : 
   21473             :       //! Member function to compile the resulting output file from unparsing
   21474             :       //  BP : 11/13/2001, modified to include compiler name
   21475             :       //  int compileOutput ( int fileNameIndex, const std::string& compilerName );
   21476             :          int compileOutput ( int fileNameIndex );
   21477             : 
   21478             :        // function to generate PDF output file for AST
   21479             :        // void outputPDF();
   21480             : 
   21481             :       //! associated filename
   21482             :           std::string getFileName() const;
   21483             : 
   21484             :       //! Move this function from ROSE into the AST restructuring tool
   21485             :        // friend void roseDisplayMechanism( SgFile *file );
   21486             : 
   21487             : // #ifndef ROSE_USE_SWIG_SUPPORT
   21488             : #ifndef SWIG
   21489             :        // DQ (3/10/2013): This function is left undefined in the final link step for SWIG support, so remove it from SWIG processing for now.
   21490             :           friend void alternativeSageEdgInterfaceConstruction( SgFile *file );
   21491             : #endif
   21492             : 
   21493             :       //! Move this function from ROSE into the AST restructuring tool
   21494             :        // int callFrontEnd ( int & argc, char** & argv , SgFile & file, int fileNameIndex );
   21495             :        // int callFrontEnd ( int & argc, char** & argv );
   21496             : 
   21497             :        // Get the commandline from where it is stored internally
   21498             :           virtual int callFrontEnd();
   21499             : 
   21500             :       //! Fixups to be run when the whole project has been created (this attaches preprocessing information).
   21501             :        // GB (9/4/2009)
   21502             :           void secondaryPassOverSourceFile();
   21503             : 
   21504             :        // DQ (9/2/2008): Added to factor out detail fo building the AST in callFrontEnd().
   21505             :           virtual int buildAST( std::vector<std::string> argv, std::vector<std::string> inputCommandLine );
   21506             : 
   21507             :        // DQ (6/17/2005): I think that this should be a static function and perhaps moved to SgProject instead of in SgFile
   21508             :       //! Move this function from ROSE into the AST restructuring tool
   21509             :           void processRoseCommandLineOptions ( std::vector<std::string>& argv );
   21510             : 
   21511             :        // DQ (6/21/2005): Added support for backend specific command-line options to be recognized in ROSE
   21512             :        // (required to control template instantiation).  Does not modify input parameters.
   21513             :           void processBackendSpecificCommandLineOptions ( const std::vector<std::string>& argv );
   21514             : 
   21515             :        // DQ (6/17/2005): I think that this should be a static function and perhaps moved to SgProject instead of in SgFile
   21516             :       //! function that removes all rose related options from a command line
   21517             :           static void stripRoseCommandLineOptions ( std::vector<std::string> & argv );
   21518             : 
   21519             :        // DQ (6/17/2005): I think that this should be a static function and perhaps moved to SgProject instead of in SgFile
   21520             :       //! function that removes all EDG related options from a command line
   21521             :           static void stripEdgCommandLineOptions ( std::vector<std::string> & argv );
   21522             : 
   21523             :        // DQ (4/2/2011): Added Fortran specific support to filter command line options from the backend compiler's command line.
   21524             :       //! function that removes all OFP related options from a command line
   21525             :           static void stripFortranCommandLineOptions ( std::vector<std::string> & argv );
   21526             : 
   21527             :        // Pei-Hung (12/20/2021): Added translator support to filter command line options from the backend compiler's command line.
   21528             :       //! function that removes options that should be used only in frontend from a command line
   21529             :           static void stripTranslationCommandLineOptions ( std::vector<std::string> & argv );
   21530             : 
   21531             :        // BP : 11/13/2001, modified to take compiler name
   21532             :           void build_EDG_CommandLine ( std::vector<std::string> & inputCommandLine, std::vector<std::string>& argv, int fileNameIndex );
   21533             : 
   21534             :        // TV: 02/15/12, CLANG also need a command line builder
   21535             :           void build_CLANG_CommandLine ( std::vector<std::string> & inputCommandLine, std::vector<std::string>& argv, int fileNameIndex );
   21536             : 
   21537             :       //! Move this function from ROSE into the AST restructuring tool
   21538             :       //  friend void pdfPrintAbstractSyntaxTreeEDG  ( SgFile *file, bool writeOutHeaderFiles = false );
   21539             :       //  friend void pdfPrintAbstractSyntaxTreeEDG  ( SgFile *file );
   21540             :       //  friend void pdfPrintAbstractSyntaxTreeSage ( SgFile *file, bool writeOutHeaderFiles = false );
   21541             : 
   21542             :        // Move this function from ROSE into the AST restructuring tool (placed here os it can be called)
   21543             :           static void usage ( int status );
   21544             : 
   21545             :       //! Move this function from ROSE into the AST restructuring tool
   21546             :           std::string getWorkingDirectory ();
   21547             :           std::string getSourceDirectory  ();
   21548             : 
   21549             :       //! Generate an output filename from the source file name (xxx.C -> rose_xxx.C -> xxx.o -> xxx)
   21550             :           std::string generateOutputFileName() const;
   21551             : 
   21552             :        // DQ (9/24/2013): I think this is more useful as a static function (and I need it this way in the unparser).
   21553             :       //! Support for C preprocessed files (Fortran only).
   21554             :        // std::string generate_C_preprocessor_intermediate_filename( std::string filename );
   21555             :           static std::string generate_C_preprocessor_intermediate_filename( std::string filename );
   21556             : 
   21557             :        // The unparser and vendor compiler needs access to many variables
   21558             :        // that are protected (Later this should be a member function).
   21559             :        // friend void unparseFile ( SgFile & file );
   21560             :        // friend int compileOutput ( int & argc, char** & argv, SgFile & file );
   21561             :        // BP : 11/13/2001, modified to include compiler name
   21562             :           std::vector<std::string> buildCompilerCommandLineOptions ( std::vector<std::string> & argv, int fileNameIndex, const std::string& compilerName );
   21563             :        // BP : 11/13/2001, modified to include compiler name
   21564             :        // int compileOutput ( std::vector<std::string> & argv, int fileNameIndex, const std::string& compilerName );
   21565             :           int compileOutput ( std::vector<std::string> & argv, int fileNameIndex );
   21566             : 
   21567             :           void display ( const std::string & label ) const;
   21568             : 
   21569             :       //! Test if project is compiled with -prelink as signal that we are prelinking and we have
   21570             :       //! to process the generated code instead of the user's application (to see and instatiate
   21571             :       //! all templates).
   21572             :           bool isPrelinkPhase() const;
   21573             : 
   21574             :       //! Get the SgProject IR node if available (template instantiation information is stored there)
   21575             :           SgProject* get_project();
   21576             : 
   21577             :        // DQ (1/17/2006): Build an explicit copy constructor that returns an error internally
   21578             :           SgFile ( const SgFile & X );
   21579             : 
   21580             :        // DQ (1/18/2006): Added function to be match virtual function on SgNode
   21581             :        // (so that the SgFile's Sg_File_Info object could be accessed).
   21582             :        // Sg_File_Info* get_file_info(void) const;
   21583             : 
   21584             :       //! Sets up the source file name (there should only be one source file in the
   21585             :       //! commandline to a SgFile, there can be multiple ones to a SgProject).
   21586             :       //    void setupSourceFilename ( const std::vector<std::string>& argv );
   21587             : 
   21588             :       //! Access function calling get_startOfConstruct(), provided to support older interface.
   21589             :           Sg_File_Info* get_file_info() const override;
   21590             : 
   21591             :       //! Access function calling set_startOfConstruct(), provided to support older interface.
   21592             :           void set_file_info( Sg_File_Info* fileinfo );
   21593             : 
   21594             :        // DQ (12/23/2008): This sets up the Sg_File_Info in the SgFile and initializes it with the correct name etc.
   21595             :        // This function is called at several locations to build SgSourceFiles of different types (languages).
   21596             :           void initializeSourcePosition( const std::string & sourceFilename );
   21597             : 
   21598             :        // DQ (2/5/2009): This is now a data member at SgProject and SgFile.
   21599             :        // DQ (2/4/2009): Added the data member to the SgProject and tha access function to the SgFile,
   21600             :        // it was previously reversed.
   21601             :        // bool get_binary_only (void) const;
   21602             : 
   21603             :        // DQ (6/13/2013): Added to support to call the frontend after all SgFiles are built up.
   21604             :           void runFrontend(int & nextErrorCode);
   21605             : 
   21606             : #if 0
   21607             : // DQ (9/5/2008): Moved to SgSourceFile
   21608             : #if ALT_FIXUP_COPY
   21609             :        // DQ (11/7/2007): These need to be called separately (see documentation)
   21610             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
   21611             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
   21612             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
   21613             : #else
   21614             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
   21615             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
   21616             : #endif
   21617             : #endif
   21618             : 
   21619             :        // DQ (9/24/2013): Added function to output the name of the language for the generated code.
   21620             :        // static std::string get_outputLanguageOptionName ( outputLanguageOption_enum lang );
   21621             :           static std::string get_outputLanguageOptionName ( languageOption_enum lang );
   21622             : 
   21623             :        // DQ (5/23/2015): Added support for p_skip_unparse_asm_commands to be implemented
   21624             :        // as a static member variable instead of non-static member variable.  See test2015_141.c
   21625             :        // for where this is required.
   21626             :           static void set_skip_unparse_asm_commands( bool b );
   21627             :           static bool get_skip_unparse_asm_commands();
   21628             : 
   21629             :        // DQ (4/24/2021): Added support for p_header_file_unparsing_optimization to be implemented
   21630             :        // as a static member variable instead of non-static member variable.  Part of header file
   21631             :        // optimization support.
   21632             :           static void set_header_file_unparsing_optimization( bool b );
   21633             :           static bool get_header_file_unparsing_optimization();
   21634             : 
   21635             : 
   21636             : 
   21637             : // End of memberFunctionString
   21638             : // Start of memberFunctionString
   21639             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   21640             : 
   21641             : 
   21642             :      /* name Persistant Attribute Mechanism
   21643             : 
   21644             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   21645             :          multiple passes. Note that these attributes are persistant in that they are preserved
   21646             :          if the AST is written out to a file and read in from a file.  However, virtual function
   21647             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   21648             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   21649             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   21650             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   21651             :          access is required, however mostly only internal tools use this lower level support).
   21652             : 
   21653             :          \internal This used to be a public data member, but has been changed to be a protected
   21654             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   21655             :          but some of the names and the syntax for calling the interface have changed. The
   21656             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   21657             :       */
   21658             :      /* */
   21659             :      //! Add a new attribute represented by the named string.
   21660             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   21661             :      //! Returns attribute of name 's'.
   21662             :          virtual AstAttribute* getAttribute(std::string s) const override;
   21663             :      //! Replace existing attribute of name 's' with new AstAttribute.
   21664             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   21665             :      /*! \brief This is a wrapper function with the following semantics:
   21666             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   21667             :          otherwise \b updateAttribute(s,a); is called.
   21668             :       */
   21669             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   21670             :      //! Remove attribute of name 's' if present.
   21671             :          virtual void removeAttribute(std::string s) override;
   21672             :      //! Tests if attribute of name 's' is present.
   21673             :          virtual bool attributeExists(std::string s) const override;
   21674             :      //! Returns the number of attributes on this IR node.
   21675             :          virtual int numberOfAttributes() const override;
   21676             : 
   21677             :      /*! \fn AstAttributeMechanism* SgFile::get_attributeMechanism() const;
   21678             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   21679             :                 a pointer to it is returned, else error.
   21680             : 
   21681             :          This is an access function used for getting the interally held pointer to a valid
   21682             :          AstAttributeMechanism. It provides access to lower level functionality of the
   21683             :          AstAttributeMechanism, put is mostly of use to internal tools.
   21684             :       */
   21685             :      /*! \fn void SgFile::set_attributeMechanism(AstAttributeMechanism* a);
   21686             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   21687             : 
   21688             :          This is an access function used for setting the interally held pointer to a valid
   21689             :          AstAttributeMechanism.
   21690             :       */
   21691             :      /* */
   21692             : 
   21693             : 
   21694             : 
   21695             : 
   21696             : // End of memberFunctionString
   21697             : // Start of memberFunctionString
   21698             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   21699             : 
   21700             : // *** COMMON CODE SECTION BEGINS HERE ***
   21701             : 
   21702             :     public:
   21703             : 
   21704             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   21705             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   21706             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   21707             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   21708             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   21709             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   21710             : 
   21711             :       /*! \brief returns a string representing the class name */
   21712             :           virtual std::string class_name() const override;
   21713             : 
   21714             :       /*! \brief returns new style SageIII enum values */
   21715             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   21716             : 
   21717             :       /*! \brief static variant value */
   21718             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   21719             :        // static const VariantT static_variant = V_SgFile;
   21720             :           enum { static_variant = V_SgFile };
   21721             : 
   21722             :        /* the generated cast function */
   21723             :       /*! \brief Casts pointer from base class to derived class */
   21724             :           ROSE_DLL_API friend       SgFile* isSgFile(       SgNode * s );
   21725             : 
   21726             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   21727             :           ROSE_DLL_API friend const SgFile* isSgFile( const SgNode * s );
   21728             : 
   21729             :      // ******************************************
   21730             :      // * Memory Pool / New / Delete
   21731             :      // ******************************************
   21732             : 
   21733             :      public:
   21734             :           /// \private
   21735             :           static const unsigned pool_size; //
   21736             :           /// \private
   21737             :           static std::vector<unsigned char *> pools; //
   21738             :           /// \private
   21739             :           static SgFile * next_node; // 
   21740             : 
   21741             :           /// \private
   21742             :           static unsigned long initializeStorageClassArray(SgFileStorageClass *); //
   21743             : 
   21744             :           /// \private
   21745             :           static void clearMemoryPool(); //
   21746             :           static void deleteMemoryPool(); //
   21747             : 
   21748             :           /// \private
   21749             :           static void extendMemoryPoolForFileIO(); //
   21750             : 
   21751             :           /// \private
   21752             :           static SgFile * getPointerFromGlobalIndex(unsigned long); //
   21753             :           /// \private
   21754             :           static SgFile * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   21755             : 
   21756             :           /// \private
   21757             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   21758             :           /// \private
   21759             :           static void resetValidFreepointers(); //
   21760             :           /// \private
   21761             :           static unsigned long getNumberOfLastValidPointer(); //
   21762             : 
   21763             : 
   21764             : #if defined(INLINE_FUNCTIONS)
   21765             :       /*! \brief returns pointer to newly allocated IR node */
   21766             :           inline void *operator new (size_t size);
   21767             : #else
   21768             :       /*! \brief returns pointer to newly allocated IR node */
   21769             :           void *operator new (size_t size);
   21770             : #endif
   21771             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   21772             :           void operator delete (void* pointer, size_t size);
   21773             : 
   21774             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   21775           0 :           void operator delete (void* pointer)
   21776             :              {
   21777             :             // This is the generated delete operator...
   21778           0 :                SgFile::operator delete (pointer,sizeof(SgFile));
   21779             :              }
   21780             : 
   21781             :       /*! \brief Returns the total number of IR nodes of this type */
   21782             :           static size_t numberOfNodes();
   21783             : 
   21784             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   21785             :           static size_t memoryUsage();
   21786             : 
   21787             :       // End of scope which started in IR nodes specific code 
   21788             :       /* */
   21789             : 
   21790             :       /* name Internal Functions
   21791             :           \brief Internal functions ... incomplete-documentation
   21792             : 
   21793             :           These functions have been made public as part of the design, but they are suggested for internal use 
   21794             :           or by particularly knowledgeable users for specialized tools or applications.
   21795             : 
   21796             :           \internal We could not make these private because they are required by user for special purposes. And 
   21797             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   21798             :          
   21799             :        */
   21800             : 
   21801             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   21802             :        // overridden in every class by *generated* implementation
   21803             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   21804             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   21805             :        // MS: 06/28/02 container of names of variables or container indices 
   21806             :        // used used in the traversal to access AST successor nodes
   21807             :        // overridden in every class by *generated* implementation
   21808             :       /*! \brief container of names of variables or container indices used used in the traversal
   21809             :           to access AST successor nodes overridden in every class by *generated* implementation */
   21810             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   21811             : 
   21812             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   21813             :        // than all the vector copies. The implementation for these functions is generated for each class.
   21814             :       /*! \brief return number of children in the traversal successor list */
   21815             :           virtual size_t get_numberOfTraversalSuccessors() override;
   21816             :       /*! \brief index-based access to traversal successors by index number */
   21817             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   21818             :       /*! \brief index-based access to traversal successors by child node */
   21819             :           virtual size_t get_childIndex(SgNode *child) override;
   21820             : 
   21821             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   21822             :        // MS: 08/16/2002 method for generating RTI information
   21823             :       /*! \brief return C++ Runtime-Time-Information */
   21824             :           virtual RTIReturnType roseRTI() override;
   21825             : #endif
   21826             :       /* */
   21827             : 
   21828             : 
   21829             : 
   21830             :       /* name Deprecated Functions
   21831             :           \brief Deprecated functions ... incomplete-documentation
   21832             : 
   21833             :           These functions have been deprecated from use.
   21834             :        */
   21835             :       /* */
   21836             : 
   21837             :       /*! returns a C style string (char*) representing the class name */
   21838             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   21839             : 
   21840             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   21841             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   21842             : #if 0
   21843             :       /*! returns old style Sage II enum values */
   21844             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   21845             :       /*! returns old style Sage II enum values */
   21846             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   21847             : #endif
   21848             :       /* */
   21849             : 
   21850             : 
   21851             : 
   21852             : 
   21853             :      public:
   21854             :       /* name Traversal Support Functions
   21855             :           \brief Traversal support functions ... incomplete-documentation
   21856             : 
   21857             :           These functions have been made public as part of the design, but they are suggested for internal use 
   21858             :           or by particularly knowledgable users for specialized tools or applications.
   21859             :        */
   21860             :       /* */
   21861             : 
   21862             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   21863             :        // (inferior to ROSE traversal mechanism, experimental).
   21864             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   21865             :        */
   21866             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   21867             : 
   21868             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   21869             :       /*! \brief support for the classic visitor pattern done in GoF */
   21870             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   21871             : 
   21872             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   21873             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   21874             :        */
   21875             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   21876             : 
   21877             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   21878             :        */
   21879             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   21880             : 
   21881             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   21882             :        // This traversal helps support internal tools that call static member functions.
   21883             :        // note: this function operates on the memory pools.
   21884             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   21885             :        */
   21886             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   21887             :       /* */
   21888             : 
   21889             : 
   21890             :      public:
   21891             :       /* name Memory Allocation Functions
   21892             :           \brief Memory allocations functions ... incomplete-documentation
   21893             : 
   21894             :           These functions have been made public as part of the design, but they are suggested for internal use 
   21895             :           or by particularly knowledgable users for specialized tools or applications.
   21896             :        */
   21897             :       /* */
   21898             : 
   21899             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   21900             : 
   21901             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   21902             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   21903             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   21904             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   21905             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   21906             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   21907             :           being used with the AST File I/O mechanism.
   21908             :        */
   21909             :           virtual bool isInMemoryPool() override;
   21910             : 
   21911             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   21912             : 
   21913             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   21914             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   21915             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   21916             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   21917             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   21918             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   21919             :           being used with the AST File I/O mechanism.
   21920             :        */
   21921             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   21922             : 
   21923             :       // DQ (4/30/2006): Modified to be a const function.
   21924             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   21925             : 
   21926             :           This functions is part of general support for many possible tools to operate 
   21927             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   21928             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   21929             :           less than the set of pointers used by the AST file I/O. This is part of
   21930             :           work implemented by Andreas, and support tools such as the AST graph generation.
   21931             : 
   21932             :           \warning This function can return unexpected data members and thus the 
   21933             :                    order and the number of elements is unpredicable and subject 
   21934             :                    to change.
   21935             : 
   21936             :           \returns STL vector of pairs of SgNode* and strings
   21937             :        */
   21938             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   21939             : 
   21940             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   21941             : 
   21942             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   21943             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   21944             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   21945             : 
   21946             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   21947             :                    and subject to change.
   21948             :        */
   21949             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   21950             : 
   21951             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   21952             : 
   21953             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   21954             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   21955             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   21956             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   21957             : 
   21958             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   21959             : 
   21960             :           \returns long
   21961             :        */
   21962             :           virtual long getChildIndex( SgNode* childNode ) const override;
   21963             : 
   21964             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   21965             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   21966             :       /* \brief Constructor for use by AST File I/O Mechanism
   21967             : 
   21968             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   21969             :           which obtained via fast binary file I/O from disk.
   21970             :        */
   21971             :        // SgFile( SgFileStorageClass& source );
   21972             : 
   21973             : 
   21974             : 
   21975             : 
   21976             : 
   21977             :  // JH (10/24/2005): methods added to support the ast file IO
   21978             :     private:
   21979             : 
   21980             :       /* name AST Memory Allocation Support Functions
   21981             :           \brief Memory allocations support....
   21982             : 
   21983             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   21984             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   21985             :           and support the AST File I/O Mechanism.
   21986             :        */
   21987             :       /* */
   21988             : 
   21989             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   21990             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   21991             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   21992             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   21993             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   21994             :           a correspinding one in the AST_FILE_IO class!
   21995             :        */
   21996             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   21997             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   21998             :       /* \brief Typedef used for low level memory access.
   21999             :        */
   22000             :        // typedef unsigned char* TestType;
   22001             : 
   22002             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   22003             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   22004             :       /* \brief Typedef used to hold memory addresses as values.
   22005             :        */
   22006             :        // typedef unsigned long  AddressType;
   22007             : 
   22008             : 
   22009             : 
   22010             :        // necessary, to have direct access to the p_freepointer and the private methods !
   22011             :       /*! \brief friend class declaration to support AST File I/O */
   22012             :           friend class AST_FILE_IO;
   22013             : 
   22014             :       /*! \brief friend class declaration to support AST File I/O */
   22015             :           friend class SgFileStorageClass;
   22016             : 
   22017             :       /*! \brief friend class declaration to support AST File I/O */
   22018             :           friend class AstSpecificDataManagingClass;
   22019             : 
   22020             :       /*! \brief friend class declaration to support AST File I/O */
   22021             :           friend class AstSpecificDataManagingClassStorageClass;
   22022             :     public:
   22023             :       /*! \brief IR node constructor to support AST File I/O */
   22024             :           SgFile( const SgFileStorageClass& source );
   22025             : 
   22026             :  // private: // JJW hack
   22027             :        /*
   22028             :           name AST Memory Allocation Support Variables
   22029             :           Memory allocations support variables 
   22030             : 
   22031             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   22032             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   22033             :           and support the AST File I/O Mechanism.
   22034             :        */
   22035             :       /* */
   22036             : 
   22037             :     public:
   22038             : 
   22039             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   22040             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   22041             :       // virtual SgNode* addRegExpAttribute();
   22042             :       /*! \brief Support for AST matching using regular expression.
   22043             : 
   22044             :           This support is incomplete and the subject of current research to define 
   22045             :           RegEx trees to support inexact matching.
   22046             :        */
   22047             :           SgFile* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   22048             : 
   22049             : // *** COMMON CODE SECTION ENDS HERE ***
   22050             : 
   22051             : 
   22052             : // End of memberFunctionString
   22053             : // Start of memberFunctionString
   22054             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   22055             : 
   22056             :      // the generated cast function
   22057             :      // friend ROSE_DLL_API SgFile* isSgFile ( SgNode* s );
   22058             : 
   22059             :           typedef SgSupport base_node_type;
   22060             : 
   22061             : 
   22062             : // End of memberFunctionString
   22063             : 
   22064             :      public: 
   22065             :          Sg_File_Info* get_startOfConstruct() const override /* (getDataAccessFunctionPrototypeString) */;
   22066             :          void set_startOfConstruct(Sg_File_Info* startOfConstruct) /* (getDataAccessFunctionPrototypeString) */;
   22067             : 
   22068             :      public: 
   22069             :          SgStringList get_originalCommandLineArgumentList() const;
   22070             :          void set_originalCommandLineArgumentList(SgStringList originalCommandLineArgumentList);
   22071             : 
   22072             :      public: 
   22073             :          int get_verbose() const;
   22074             :          void set_verbose(int verbose);
   22075             : 
   22076             :      public: 
   22077             :          bool get_output_warnings() const;
   22078             :          void set_output_warnings(bool output_warnings);
   22079             : 
   22080             :      public: 
   22081             :          bool get_C_only() const;
   22082             :          void set_C_only(bool C_only);
   22083             : 
   22084             :      public: 
   22085             :          bool get_Cxx_only() const;
   22086             :          void set_Cxx_only(bool Cxx_only);
   22087             : 
   22088             :      public: 
   22089             :          bool get_Fortran_only() const;
   22090             :          void set_Fortran_only(bool Fortran_only);
   22091             : 
   22092             :      public: 
   22093             :          bool get_CoArrayFortran_only() const;
   22094             :          void set_CoArrayFortran_only(bool CoArrayFortran_only);
   22095             : 
   22096             :      public: 
   22097             :          int get_upc_threads() const;
   22098             :          void set_upc_threads(int upc_threads);
   22099             : 
   22100             :      public: 
   22101             :          bool get_Cuda_only() const;
   22102             :          void set_Cuda_only(bool Cuda_only);
   22103             : 
   22104             :      public: 
   22105             :          bool get_OpenCL_only() const;
   22106             :          void set_OpenCL_only(bool OpenCL_only);
   22107             : 
   22108             :      public: 
   22109             :          bool get_requires_C_preprocessor() const;
   22110             :          void set_requires_C_preprocessor(bool requires_C_preprocessor);
   22111             : 
   22112             :      public: 
   22113             :          SgFile::outputFormatOption_enum get_inputFormat() const;
   22114             :          void set_inputFormat(SgFile::outputFormatOption_enum inputFormat);
   22115             : 
   22116             :      public: 
   22117             :          SgFile::outputFormatOption_enum get_outputFormat() const;
   22118             :          void set_outputFormat(SgFile::outputFormatOption_enum outputFormat);
   22119             : 
   22120             :      public: 
   22121             :          SgFile::outputFormatOption_enum get_backendCompileFormat() const;
   22122             :          void set_backendCompileFormat(SgFile::outputFormatOption_enum backendCompileFormat);
   22123             : 
   22124             :      public: 
   22125             :          bool get_fortran_implicit_none() const;
   22126             :          void set_fortran_implicit_none(bool fortran_implicit_none);
   22127             : 
   22128             :      public: 
   22129             :          bool get_openmp() const;
   22130             :          void set_openmp(bool openmp);
   22131             : 
   22132             :      public: 
   22133             :          bool get_openmp_parse_only() const;
   22134             :          void set_openmp_parse_only(bool openmp_parse_only);
   22135             : 
   22136             :      public: 
   22137             :          bool get_openmp_ast_only() const;
   22138             :          void set_openmp_ast_only(bool openmp_ast_only);
   22139             : 
   22140             :      public: 
   22141             :          bool get_openmp_lowering() const;
   22142             :          void set_openmp_lowering(bool openmp_lowering);
   22143             : 
   22144             :      public: 
   22145             :          bool get_openmp_analyzing() const;
   22146             :          void set_openmp_analyzing(bool openmp_analyzing);
   22147             : 
   22148             :      public: 
   22149             :          bool get_cray_pointer_support() const;
   22150             :          void set_cray_pointer_support(bool cray_pointer_support);
   22151             : 
   22152             :      public: 
   22153             :          bool get_failsafe() const;
   22154             :          void set_failsafe(bool failsafe);
   22155             : 
   22156             :      public: 
   22157             :          bool get_output_parser_actions() const;
   22158             :          void set_output_parser_actions(bool output_parser_actions);
   22159             : 
   22160             :      public: 
   22161             :          bool get_exit_after_parser() const;
   22162             :          void set_exit_after_parser(bool exit_after_parser);
   22163             : 
   22164             :      public: 
   22165             :          bool get_skip_syntax_check() const;
   22166             :          void set_skip_syntax_check(bool skip_syntax_check);
   22167             : 
   22168             :      public: 
   22169             :          bool get_skip_parser() const;
   22170             :          void set_skip_parser(bool skip_parser);
   22171             : 
   22172             :      public: 
   22173             :          bool get_relax_syntax_check() const;
   22174             :          void set_relax_syntax_check(bool relax_syntax_check);
   22175             : 
   22176             :      public: 
   22177             :          bool get_skip_translation_from_edg_ast_to_rose_ast() const;
   22178             :          void set_skip_translation_from_edg_ast_to_rose_ast(bool skip_translation_from_edg_ast_to_rose_ast);
   22179             : 
   22180             :      public: 
   22181             :          bool get_skip_transformation() const;
   22182             :          void set_skip_transformation(bool skip_transformation);
   22183             : 
   22184             :      public: 
   22185             :          bool get_skip_unparse() const;
   22186             :          void set_skip_unparse(bool skip_unparse);
   22187             : 
   22188             :      public: 
   22189             :          bool get_skipfinalCompileStep() const;
   22190             :          void set_skipfinalCompileStep(bool skipfinalCompileStep);
   22191             : 
   22192             :      public: 
   22193             :          bool get_unparse_includes() const;
   22194             :          void set_unparse_includes(bool unparse_includes);
   22195             : 
   22196             :      public: 
   22197             :          bool get_unparse_line_directives() const;
   22198             :          void set_unparse_line_directives(bool unparse_line_directives);
   22199             : 
   22200             :      public: 
   22201             :          bool get_unparse_function_calls_using_operator_syntax() const;
   22202             :          void set_unparse_function_calls_using_operator_syntax(bool unparse_function_calls_using_operator_syntax);
   22203             : 
   22204             :      public: 
   22205             :          bool get_unparse_function_calls_using_operator_names() const;
   22206             :          void set_unparse_function_calls_using_operator_names(bool unparse_function_calls_using_operator_names);
   22207             : 
   22208             :      public: 
   22209             :          bool get_unparse_instruction_addresses() const;
   22210             :          void set_unparse_instruction_addresses(bool unparse_instruction_addresses);
   22211             : 
   22212             :      public: 
   22213             :          bool get_unparse_raw_memory_contents() const;
   22214             :          void set_unparse_raw_memory_contents(bool unparse_raw_memory_contents);
   22215             : 
   22216             :      public: 
   22217             :          bool get_unparse_binary_file_format() const;
   22218             :          void set_unparse_binary_file_format(bool unparse_binary_file_format);
   22219             : 
   22220             :      public: 
   22221             :          SgFile::languageOption_enum get_outputLanguage() const;
   22222             :          void set_outputLanguage(SgFile::languageOption_enum outputLanguage);
   22223             : 
   22224             :      public: 
   22225             :          SgFile::languageOption_enum get_inputLanguage() const;
   22226             :          void set_inputLanguage(SgFile::languageOption_enum inputLanguage);
   22227             : 
   22228             :      public: 
   22229             :          std::string get_sourceFileNameWithPath() const;
   22230             :          void set_sourceFileNameWithPath(std::string sourceFileNameWithPath);
   22231             : 
   22232             :      public: 
   22233             :          std::string get_sourceFileNameWithoutPath() const;
   22234             :          void set_sourceFileNameWithoutPath(std::string sourceFileNameWithoutPath);
   22235             : 
   22236             :      public: 
   22237             :          std::string get_unparse_output_filename() const;
   22238             :          void set_unparse_output_filename(std::string unparse_output_filename);
   22239             : 
   22240             :      public: 
   22241             :          std::string get_objectFileNameWithPath() const;
   22242             :          void set_objectFileNameWithPath(std::string objectFileNameWithPath);
   22243             : 
   22244             :      public: 
   22245             :          std::string get_objectFileNameWithoutPath() const;
   22246             :          void set_objectFileNameWithoutPath(std::string objectFileNameWithoutPath);
   22247             : 
   22248             :      public: 
   22249             :          bool get_useBackendOnly() const;
   22250             :          void set_useBackendOnly(bool useBackendOnly);
   22251             : 
   22252             :      public: 
   22253             :          bool get_compileOnly() const;
   22254             :          void set_compileOnly(bool compileOnly);
   22255             : 
   22256             :      public: 
   22257             :          std::string get_savedFrontendCommandLine() const;
   22258             :          void set_savedFrontendCommandLine(std::string savedFrontendCommandLine);
   22259             : 
   22260             :      public: 
   22261             :          bool get_no_implicit_templates() const;
   22262             :          void set_no_implicit_templates(bool no_implicit_templates);
   22263             : 
   22264             :      public: 
   22265             :          bool get_no_implicit_inline_templates() const;
   22266             :          void set_no_implicit_inline_templates(bool no_implicit_inline_templates);
   22267             : 
   22268             :      public: 
   22269             :          bool get_skip_commentsAndDirectives() const;
   22270             :          void set_skip_commentsAndDirectives(bool skip_commentsAndDirectives);
   22271             : 
   22272             :      public: 
   22273             :          bool get_collectAllCommentsAndDirectives() const;
   22274             :          void set_collectAllCommentsAndDirectives(bool collectAllCommentsAndDirectives);
   22275             : 
   22276             :      public: 
   22277             :          bool get_translateCommentsAndDirectivesIntoAST() const;
   22278             :          void set_translateCommentsAndDirectivesIntoAST(bool translateCommentsAndDirectivesIntoAST);
   22279             : 
   22280             :      public: 
   22281             :          bool get_unparseHeaderFiles() const;
   22282             :          void set_unparseHeaderFiles(bool unparseHeaderFiles);
   22283             : 
   22284             :      public: 
   22285             :          ROSEAttributesListContainerPtr get_preprocessorDirectivesAndCommentsList() const;
   22286             :          void set_preprocessorDirectivesAndCommentsList(ROSEAttributesListContainerPtr preprocessorDirectivesAndCommentsList);
   22287             : 
   22288             :      public: 
   22289             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   22290             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   22291             : 
   22292             :      public: 
   22293             :          bool get_KCC_frontend() const;
   22294             :          void set_KCC_frontend(bool KCC_frontend);
   22295             : 
   22296             :      public: 
   22297             :          bool get_new_frontend() const;
   22298             :          void set_new_frontend(bool new_frontend);
   22299             : 
   22300             :      public: 
   22301             :          bool get_disable_edg_backend() const;
   22302             :          void set_disable_edg_backend(bool disable_edg_backend);
   22303             : 
   22304             :      public: 
   22305             :          bool get_disable_sage_backend() const;
   22306             :          void set_disable_sage_backend(bool disable_sage_backend);
   22307             : 
   22308             :      public: 
   22309             :          int get_testingLevel() const;
   22310             :          void set_testingLevel(int testingLevel);
   22311             : 
   22312             :      public: 
   22313             :          bool get_preinit_il() const;
   22314             :          void set_preinit_il(bool preinit_il);
   22315             : 
   22316             :      public: 
   22317             :          bool get_enable_cp_backend() const;
   22318             :          void set_enable_cp_backend(bool enable_cp_backend);
   22319             : 
   22320             :      public: 
   22321             :          bool get_markGeneratedFiles() const;
   22322             :          void set_markGeneratedFiles(bool markGeneratedFiles);
   22323             : 
   22324             :      public: 
   22325             :          bool get_negative_test() const;
   22326             :          void set_negative_test(bool negative_test);
   22327             : 
   22328             :      public: 
   22329             :          bool get_strict_language_handling() const;
   22330             :          void set_strict_language_handling(bool strict_language_handling);
   22331             : 
   22332             :      public: 
   22333             :          bool get_wave() const;
   22334             :          void set_wave(bool wave);
   22335             : 
   22336             :      public: 
   22337             :          int get_embedColorCodesInGeneratedCode() const;
   22338             :          void set_embedColorCodesInGeneratedCode(int embedColorCodesInGeneratedCode);
   22339             : 
   22340             :      public: 
   22341             :          int get_generateSourcePositionCodes() const;
   22342             :          void set_generateSourcePositionCodes(int generateSourcePositionCodes);
   22343             : 
   22344             :      public: 
   22345             :          bool get_sourceFileUsesCppFileExtension() const;
   22346             :          void set_sourceFileUsesCppFileExtension(bool sourceFileUsesCppFileExtension);
   22347             : 
   22348             :      public: 
   22349             :          bool get_sourceFileUsesFortranFileExtension() const;
   22350             :          void set_sourceFileUsesFortranFileExtension(bool sourceFileUsesFortranFileExtension);
   22351             : 
   22352             :      public: 
   22353             :          bool get_sourceFileUsesFortran77FileExtension() const;
   22354             :          void set_sourceFileUsesFortran77FileExtension(bool sourceFileUsesFortran77FileExtension);
   22355             : 
   22356             :      public: 
   22357             :          bool get_sourceFileUsesFortran90FileExtension() const;
   22358             :          void set_sourceFileUsesFortran90FileExtension(bool sourceFileUsesFortran90FileExtension);
   22359             : 
   22360             :      public: 
   22361             :          bool get_sourceFileUsesFortran95FileExtension() const;
   22362             :          void set_sourceFileUsesFortran95FileExtension(bool sourceFileUsesFortran95FileExtension);
   22363             : 
   22364             :      public: 
   22365             :          bool get_sourceFileUsesFortran2003FileExtension() const;
   22366             :          void set_sourceFileUsesFortran2003FileExtension(bool sourceFileUsesFortran2003FileExtension);
   22367             : 
   22368             :      public: 
   22369             :          bool get_sourceFileUsesFortran2008FileExtension() const;
   22370             :          void set_sourceFileUsesFortran2008FileExtension(bool sourceFileUsesFortran2008FileExtension);
   22371             : 
   22372             :      public: 
   22373             :          bool get_sourceFileUsesCoArrayFortranFileExtension() const;
   22374             :          void set_sourceFileUsesCoArrayFortranFileExtension(bool sourceFileUsesCoArrayFortranFileExtension);
   22375             : 
   22376             :      public: 
   22377             :          bool get_sourceFileUsesPHPFileExtension() const;
   22378             :          void set_sourceFileUsesPHPFileExtension(bool sourceFileUsesPHPFileExtension);
   22379             : 
   22380             :      public: 
   22381             :          bool get_sourceFileUsesPythonFileExtension() const;
   22382             :          void set_sourceFileUsesPythonFileExtension(bool sourceFileUsesPythonFileExtension);
   22383             : 
   22384             :      public: 
   22385             :          bool get_sourceFileTypeIsUnknown() const;
   22386             :          void set_sourceFileTypeIsUnknown(bool sourceFileTypeIsUnknown);
   22387             : 
   22388             :      public: 
   22389             :          int get_detect_dangling_pointers() const;
   22390             :          void set_detect_dangling_pointers(int detect_dangling_pointers);
   22391             : 
   22392             :      public: 
   22393             :          bool get_experimental_fortran_frontend() const;
   22394             :          void set_experimental_fortran_frontend(bool experimental_fortran_frontend);
   22395             : 
   22396             :      public: 
   22397             :          bool get_experimental_flang_frontend() const;
   22398             :          void set_experimental_flang_frontend(bool experimental_flang_frontend);
   22399             : 
   22400             :      public: 
   22401             :          bool get_experimental_cuda_fortran_frontend() const;
   22402             :          void set_experimental_cuda_fortran_frontend(bool experimental_cuda_fortran_frontend);
   22403             : 
   22404             :      public: 
   22405             :          bool get_experimental_fortran_frontend_OFP_test() const;
   22406             :          void set_experimental_fortran_frontend_OFP_test(bool experimental_fortran_frontend_OFP_test);
   22407             : 
   22408             :      public: 
   22409             :          bool get_read_executable_file_format_only() const;
   22410             :          void set_read_executable_file_format_only(bool read_executable_file_format_only);
   22411             : 
   22412             :      public: 
   22413             :          bool get_visualize_executable_file_format_skip_symbols() const;
   22414             :          void set_visualize_executable_file_format_skip_symbols(bool visualize_executable_file_format_skip_symbols);
   22415             : 
   22416             :      public: 
   22417             :          bool get_visualize_dwarf_only() const;
   22418             :          void set_visualize_dwarf_only(bool visualize_dwarf_only);
   22419             : 
   22420             :      public: 
   22421             :          bool get_read_instructions_only() const;
   22422             :          void set_read_instructions_only(bool read_instructions_only);
   22423             : 
   22424             : 
   22425             :      public: 
   22426             :          const SgStringList&  get_libraryArchiveObjectFileNameList() const;
   22427             :          SgStringList& get_libraryArchiveObjectFileNameList(); 
   22428             : 
   22429             :      public: 
   22430             :          bool get_isLibraryArchive() const;
   22431             :          void set_isLibraryArchive(bool isLibraryArchive);
   22432             : 
   22433             :      public: 
   22434             :          bool get_isObjectFile() const;
   22435             :          void set_isObjectFile(bool isObjectFile);
   22436             : 
   22437             :      public: 
   22438             :          bool get_unparse_tokens() const;
   22439             :          void set_unparse_tokens(bool unparse_tokens);
   22440             : 
   22441             :      public: 
   22442             :          int get_unparse_tokens_testing() const;
   22443             :          void set_unparse_tokens_testing(int unparse_tokens_testing);
   22444             : 
   22445             :      public: 
   22446             :          bool get_unparse_using_leading_and_trailing_token_mappings() const;
   22447             :          void set_unparse_using_leading_and_trailing_token_mappings(bool unparse_using_leading_and_trailing_token_mappings);
   22448             : 
   22449             :      public: 
   22450             :          bool get_unparse_template_ast() const;
   22451             :          void set_unparse_template_ast(bool unparse_template_ast);
   22452             : 
   22453             :      public: 
   22454             :          bool get_skipAstConsistancyTests() const;
   22455             :          void set_skipAstConsistancyTests(bool skipAstConsistancyTests);
   22456             : 
   22457             :      public: 
   22458             :          bool get_multifile_support() const;
   22459             :          void set_multifile_support(bool multifile_support);
   22460             : 
   22461             :      public: 
   22462             :          bool get_optimization() const;
   22463             :          void set_optimization(bool optimization);
   22464             : 
   22465             :      public: 
   22466             :          bool get_use_token_stream_to_improve_source_position_info() const;
   22467             :          void set_use_token_stream_to_improve_source_position_info(bool use_token_stream_to_improve_source_position_info);
   22468             : 
   22469             :      public: 
   22470             :          bool get_suppress_variable_declaration_normalization() const;
   22471             :          void set_suppress_variable_declaration_normalization(bool suppress_variable_declaration_normalization);
   22472             : 
   22473             :      public: 
   22474             :          bool get_edg_il_to_graphviz() const;
   22475             :          void set_edg_il_to_graphviz(bool edg_il_to_graphviz);
   22476             : 
   22477             :      public: 
   22478             :          bool get_clang_il_to_graphviz() const;
   22479             :          void set_clang_il_to_graphviz(bool clang_il_to_graphviz);
   22480             : 
   22481             :      public: 
   22482             :          bool get_no_optimize_flag_for_frontend() const;
   22483             :          void set_no_optimize_flag_for_frontend(bool no_optimize_flag_for_frontend);
   22484             : 
   22485             :      public: 
   22486             :          bool get_unparse_edg_normalized_method_ROSE_1392() const;
   22487             :          void set_unparse_edg_normalized_method_ROSE_1392(bool unparse_edg_normalized_method_ROSE_1392);
   22488             : 
   22489             : 
   22490             :      public: 
   22491             :          bool get_header_file_unparsing_optimization_source_file() const;
   22492             :          void set_header_file_unparsing_optimization_source_file(bool header_file_unparsing_optimization_source_file);
   22493             : 
   22494             :      public: 
   22495             :          bool get_header_file_unparsing_optimization_header_file() const;
   22496             :          void set_header_file_unparsing_optimization_header_file(bool header_file_unparsing_optimization_header_file);
   22497             : 
   22498             : 
   22499             : 
   22500             :      public: 
   22501             :          int get_frontendErrorCode() const;
   22502             :          void set_frontendErrorCode(int frontendErrorCode);
   22503             : 
   22504             :      public: 
   22505             :          int get_javacErrorCode() const;
   22506             :          void set_javacErrorCode(int javacErrorCode);
   22507             : 
   22508             :      public: 
   22509             :          int get_ecjErrorCode() const;
   22510             :          void set_ecjErrorCode(int ecjErrorCode);
   22511             : 
   22512             :      public: 
   22513             :          int get_midendErrorCode() const;
   22514             :          void set_midendErrorCode(int midendErrorCode);
   22515             : 
   22516             :      public: 
   22517             :          int get_unparserErrorCode() const;
   22518             :          void set_unparserErrorCode(int unparserErrorCode);
   22519             : 
   22520             :      public: 
   22521             :          int get_backendCompilerErrorCode() const;
   22522             :          void set_backendCompilerErrorCode(int backendCompilerErrorCode);
   22523             : 
   22524             :      public: 
   22525             :          bool get_unparsedFileFailedCompilation() const;
   22526             :          void set_unparsedFileFailedCompilation(bool unparsedFileFailedCompilation);
   22527             : 
   22528             : 
   22529             :      public: 
   22530             :          virtual ~SgFile();
   22531             : 
   22532             : 
   22533             :      public: 
   22534             :          SgFile(); 
   22535             : 
   22536             :     protected:
   22537             : // Start of memberFunctionString
   22538             : Sg_File_Info* p_startOfConstruct;
   22539             :           
   22540             : // End of memberFunctionString
   22541             : // Start of memberFunctionString
   22542             : SgStringList p_originalCommandLineArgumentList;
   22543             :           
   22544             : // End of memberFunctionString
   22545             : // Start of memberFunctionString
   22546             : int p_verbose;
   22547             :           
   22548             : // End of memberFunctionString
   22549             : // Start of memberFunctionString
   22550             : bool p_output_warnings;
   22551             :           
   22552             : // End of memberFunctionString
   22553             : // Start of memberFunctionString
   22554             : bool p_C_only;
   22555             :           
   22556             : // End of memberFunctionString
   22557             : // Start of memberFunctionString
   22558             : bool p_Cxx_only;
   22559             :           
   22560             : // End of memberFunctionString
   22561             : // Start of memberFunctionString
   22562             : bool p_Fortran_only;
   22563             :           
   22564             : // End of memberFunctionString
   22565             : // Start of memberFunctionString
   22566             : bool p_CoArrayFortran_only;
   22567             :           
   22568             : // End of memberFunctionString
   22569             : // Start of memberFunctionString
   22570             : int p_upc_threads;
   22571             :           
   22572             : // End of memberFunctionString
   22573             : // Start of memberFunctionString
   22574             : bool p_Cuda_only;
   22575             :           
   22576             : // End of memberFunctionString
   22577             : // Start of memberFunctionString
   22578             : bool p_OpenCL_only;
   22579             :           
   22580             : // End of memberFunctionString
   22581             : // Start of memberFunctionString
   22582             : bool p_requires_C_preprocessor;
   22583             :           
   22584             : // End of memberFunctionString
   22585             : // Start of memberFunctionString
   22586             : SgFile::outputFormatOption_enum p_inputFormat;
   22587             :           
   22588             : // End of memberFunctionString
   22589             : // Start of memberFunctionString
   22590             : SgFile::outputFormatOption_enum p_outputFormat;
   22591             :           
   22592             : // End of memberFunctionString
   22593             : // Start of memberFunctionString
   22594             : SgFile::outputFormatOption_enum p_backendCompileFormat;
   22595             :           
   22596             : // End of memberFunctionString
   22597             : // Start of memberFunctionString
   22598             : bool p_fortran_implicit_none;
   22599             :           
   22600             : // End of memberFunctionString
   22601             : // Start of memberFunctionString
   22602             : bool p_openmp;
   22603             :           
   22604             : // End of memberFunctionString
   22605             : // Start of memberFunctionString
   22606             : bool p_openmp_parse_only;
   22607             :           
   22608             : // End of memberFunctionString
   22609             : // Start of memberFunctionString
   22610             : bool p_openmp_ast_only;
   22611             :           
   22612             : // End of memberFunctionString
   22613             : // Start of memberFunctionString
   22614             : bool p_openmp_lowering;
   22615             :           
   22616             : // End of memberFunctionString
   22617             : // Start of memberFunctionString
   22618             : bool p_openmp_analyzing;
   22619             :           
   22620             : // End of memberFunctionString
   22621             : // Start of memberFunctionString
   22622             : bool p_cray_pointer_support;
   22623             :           
   22624             : // End of memberFunctionString
   22625             : // Start of memberFunctionString
   22626             : bool p_failsafe;
   22627             :           
   22628             : // End of memberFunctionString
   22629             : // Start of memberFunctionString
   22630             : bool p_output_parser_actions;
   22631             :           
   22632             : // End of memberFunctionString
   22633             : // Start of memberFunctionString
   22634             : bool p_exit_after_parser;
   22635             :           
   22636             : // End of memberFunctionString
   22637             : // Start of memberFunctionString
   22638             : bool p_skip_syntax_check;
   22639             :           
   22640             : // End of memberFunctionString
   22641             : // Start of memberFunctionString
   22642             : bool p_skip_parser;
   22643             :           
   22644             : // End of memberFunctionString
   22645             : // Start of memberFunctionString
   22646             : bool p_relax_syntax_check;
   22647             :           
   22648             : // End of memberFunctionString
   22649             : // Start of memberFunctionString
   22650             : bool p_skip_translation_from_edg_ast_to_rose_ast;
   22651             :           
   22652             : // End of memberFunctionString
   22653             : // Start of memberFunctionString
   22654             : bool p_skip_transformation;
   22655             :           
   22656             : // End of memberFunctionString
   22657             : // Start of memberFunctionString
   22658             : bool p_skip_unparse;
   22659             :           
   22660             : // End of memberFunctionString
   22661             : // Start of memberFunctionString
   22662             : bool p_skipfinalCompileStep;
   22663             :           
   22664             : // End of memberFunctionString
   22665             : // Start of memberFunctionString
   22666             : bool p_unparse_includes;
   22667             :           
   22668             : // End of memberFunctionString
   22669             : // Start of memberFunctionString
   22670             : bool p_unparse_line_directives;
   22671             :           
   22672             : // End of memberFunctionString
   22673             : // Start of memberFunctionString
   22674             : bool p_unparse_function_calls_using_operator_syntax;
   22675             :           
   22676             : // End of memberFunctionString
   22677             : // Start of memberFunctionString
   22678             : bool p_unparse_function_calls_using_operator_names;
   22679             :           
   22680             : // End of memberFunctionString
   22681             : // Start of memberFunctionString
   22682             : bool p_unparse_instruction_addresses;
   22683             :           
   22684             : // End of memberFunctionString
   22685             : // Start of memberFunctionString
   22686             : bool p_unparse_raw_memory_contents;
   22687             :           
   22688             : // End of memberFunctionString
   22689             : // Start of memberFunctionString
   22690             : bool p_unparse_binary_file_format;
   22691             :           
   22692             : // End of memberFunctionString
   22693             : // Start of memberFunctionString
   22694             : SgFile::languageOption_enum p_outputLanguage;
   22695             :           
   22696             : // End of memberFunctionString
   22697             : // Start of memberFunctionString
   22698             : SgFile::languageOption_enum p_inputLanguage;
   22699             :           
   22700             : // End of memberFunctionString
   22701             : // Start of memberFunctionString
   22702             : std::string p_sourceFileNameWithPath;
   22703             :           
   22704             : // End of memberFunctionString
   22705             : // Start of memberFunctionString
   22706             : std::string p_sourceFileNameWithoutPath;
   22707             :           
   22708             : // End of memberFunctionString
   22709             : // Start of memberFunctionString
   22710             : std::string p_unparse_output_filename;
   22711             :           
   22712             : // End of memberFunctionString
   22713             : // Start of memberFunctionString
   22714             : std::string p_objectFileNameWithPath;
   22715             :           
   22716             : // End of memberFunctionString
   22717             : // Start of memberFunctionString
   22718             : std::string p_objectFileNameWithoutPath;
   22719             :           
   22720             : // End of memberFunctionString
   22721             : // Start of memberFunctionString
   22722             : bool p_useBackendOnly;
   22723             :           
   22724             : // End of memberFunctionString
   22725             : // Start of memberFunctionString
   22726             : bool p_compileOnly;
   22727             :           
   22728             : // End of memberFunctionString
   22729             : // Start of memberFunctionString
   22730             : std::string p_savedFrontendCommandLine;
   22731             :           
   22732             : // End of memberFunctionString
   22733             : // Start of memberFunctionString
   22734             : bool p_no_implicit_templates;
   22735             :           
   22736             : // End of memberFunctionString
   22737             : // Start of memberFunctionString
   22738             : bool p_no_implicit_inline_templates;
   22739             :           
   22740             : // End of memberFunctionString
   22741             : // Start of memberFunctionString
   22742             : bool p_skip_commentsAndDirectives;
   22743             :           
   22744             : // End of memberFunctionString
   22745             : // Start of memberFunctionString
   22746             : bool p_collectAllCommentsAndDirectives;
   22747             :           
   22748             : // End of memberFunctionString
   22749             : // Start of memberFunctionString
   22750             : bool p_translateCommentsAndDirectivesIntoAST;
   22751             :           
   22752             : // End of memberFunctionString
   22753             : // Start of memberFunctionString
   22754             : bool p_unparseHeaderFiles;
   22755             :           
   22756             : // End of memberFunctionString
   22757             : // Start of memberFunctionString
   22758             : ROSEAttributesListContainerPtr p_preprocessorDirectivesAndCommentsList;
   22759             :           
   22760             : // End of memberFunctionString
   22761             : // Start of memberFunctionString
   22762             : AstAttributeMechanism* p_attributeMechanism;
   22763             :           
   22764             : // End of memberFunctionString
   22765             : // Start of memberFunctionString
   22766             : bool p_KCC_frontend;
   22767             :           
   22768             : // End of memberFunctionString
   22769             : // Start of memberFunctionString
   22770             : bool p_new_frontend;
   22771             :           
   22772             : // End of memberFunctionString
   22773             : // Start of memberFunctionString
   22774             : bool p_disable_edg_backend;
   22775             :           
   22776             : // End of memberFunctionString
   22777             : // Start of memberFunctionString
   22778             : bool p_disable_sage_backend;
   22779             :           
   22780             : // End of memberFunctionString
   22781             : // Start of memberFunctionString
   22782             : int p_testingLevel;
   22783             :           
   22784             : // End of memberFunctionString
   22785             : // Start of memberFunctionString
   22786             : bool p_preinit_il;
   22787             :           
   22788             : // End of memberFunctionString
   22789             : // Start of memberFunctionString
   22790             : bool p_enable_cp_backend;
   22791             :           
   22792             : // End of memberFunctionString
   22793             : // Start of memberFunctionString
   22794             : bool p_markGeneratedFiles;
   22795             :           
   22796             : // End of memberFunctionString
   22797             : // Start of memberFunctionString
   22798             : bool p_negative_test;
   22799             :           
   22800             : // End of memberFunctionString
   22801             : // Start of memberFunctionString
   22802             : bool p_strict_language_handling;
   22803             :           
   22804             : // End of memberFunctionString
   22805             : // Start of memberFunctionString
   22806             : bool p_wave;
   22807             :           
   22808             : // End of memberFunctionString
   22809             : // Start of memberFunctionString
   22810             : int p_embedColorCodesInGeneratedCode;
   22811             :           
   22812             : // End of memberFunctionString
   22813             : // Start of memberFunctionString
   22814             : int p_generateSourcePositionCodes;
   22815             :           
   22816             : // End of memberFunctionString
   22817             : // Start of memberFunctionString
   22818             : bool p_sourceFileUsesCppFileExtension;
   22819             :           
   22820             : // End of memberFunctionString
   22821             : // Start of memberFunctionString
   22822             : bool p_sourceFileUsesFortranFileExtension;
   22823             :           
   22824             : // End of memberFunctionString
   22825             : // Start of memberFunctionString
   22826             : bool p_sourceFileUsesFortran77FileExtension;
   22827             :           
   22828             : // End of memberFunctionString
   22829             : // Start of memberFunctionString
   22830             : bool p_sourceFileUsesFortran90FileExtension;
   22831             :           
   22832             : // End of memberFunctionString
   22833             : // Start of memberFunctionString
   22834             : bool p_sourceFileUsesFortran95FileExtension;
   22835             :           
   22836             : // End of memberFunctionString
   22837             : // Start of memberFunctionString
   22838             : bool p_sourceFileUsesFortran2003FileExtension;
   22839             :           
   22840             : // End of memberFunctionString
   22841             : // Start of memberFunctionString
   22842             : bool p_sourceFileUsesFortran2008FileExtension;
   22843             :           
   22844             : // End of memberFunctionString
   22845             : // Start of memberFunctionString
   22846             : bool p_sourceFileUsesCoArrayFortranFileExtension;
   22847             :           
   22848             : // End of memberFunctionString
   22849             : // Start of memberFunctionString
   22850             : bool p_sourceFileUsesPHPFileExtension;
   22851             :           
   22852             : // End of memberFunctionString
   22853             : // Start of memberFunctionString
   22854             : bool p_sourceFileUsesPythonFileExtension;
   22855             :           
   22856             : // End of memberFunctionString
   22857             : // Start of memberFunctionString
   22858             : bool p_sourceFileTypeIsUnknown;
   22859             :           
   22860             : // End of memberFunctionString
   22861             : // Start of memberFunctionString
   22862             : int p_detect_dangling_pointers;
   22863             :           
   22864             : // End of memberFunctionString
   22865             : // Start of memberFunctionString
   22866             : bool p_experimental_fortran_frontend;
   22867             :           
   22868             : // End of memberFunctionString
   22869             : // Start of memberFunctionString
   22870             : bool p_experimental_flang_frontend;
   22871             :           
   22872             : // End of memberFunctionString
   22873             : // Start of memberFunctionString
   22874             : bool p_experimental_cuda_fortran_frontend;
   22875             :           
   22876             : // End of memberFunctionString
   22877             : // Start of memberFunctionString
   22878             : bool p_experimental_fortran_frontend_OFP_test;
   22879             :           
   22880             : // End of memberFunctionString
   22881             : // Start of memberFunctionString
   22882             : bool p_read_executable_file_format_only;
   22883             :           
   22884             : // End of memberFunctionString
   22885             : // Start of memberFunctionString
   22886             : bool p_visualize_executable_file_format_skip_symbols;
   22887             :           
   22888             : // End of memberFunctionString
   22889             : // Start of memberFunctionString
   22890             : bool p_visualize_dwarf_only;
   22891             :           
   22892             : // End of memberFunctionString
   22893             : // Start of memberFunctionString
   22894             : bool p_read_instructions_only;
   22895             :           
   22896             : // End of memberFunctionString
   22897             : // Start of memberFunctionString
   22898             : static bool p_skip_unparse_asm_commands;
   22899             :           
   22900             : // End of memberFunctionString
   22901             : // Start of memberFunctionString
   22902             : SgStringList p_libraryArchiveObjectFileNameList;
   22903             :           
   22904             : // End of memberFunctionString
   22905             : // Start of memberFunctionString
   22906             : bool p_isLibraryArchive;
   22907             :           
   22908             : // End of memberFunctionString
   22909             : // Start of memberFunctionString
   22910             : bool p_isObjectFile;
   22911             :           
   22912             : // End of memberFunctionString
   22913             : // Start of memberFunctionString
   22914             : bool p_unparse_tokens;
   22915             :           
   22916             : // End of memberFunctionString
   22917             : // Start of memberFunctionString
   22918             : int p_unparse_tokens_testing;
   22919             :           
   22920             : // End of memberFunctionString
   22921             : // Start of memberFunctionString
   22922             : bool p_unparse_using_leading_and_trailing_token_mappings;
   22923             :           
   22924             : // End of memberFunctionString
   22925             : // Start of memberFunctionString
   22926             : bool p_unparse_template_ast;
   22927             :           
   22928             : // End of memberFunctionString
   22929             : // Start of memberFunctionString
   22930             : bool p_skipAstConsistancyTests;
   22931             :           
   22932             : // End of memberFunctionString
   22933             : // Start of memberFunctionString
   22934             : bool p_multifile_support;
   22935             :           
   22936             : // End of memberFunctionString
   22937             : // Start of memberFunctionString
   22938             : bool p_optimization;
   22939             :           
   22940             : // End of memberFunctionString
   22941             : // Start of memberFunctionString
   22942             : bool p_use_token_stream_to_improve_source_position_info;
   22943             :           
   22944             : // End of memberFunctionString
   22945             : // Start of memberFunctionString
   22946             : bool p_suppress_variable_declaration_normalization;
   22947             :           
   22948             : // End of memberFunctionString
   22949             : // Start of memberFunctionString
   22950             : bool p_edg_il_to_graphviz;
   22951             :           
   22952             : // End of memberFunctionString
   22953             : // Start of memberFunctionString
   22954             : bool p_clang_il_to_graphviz;
   22955             :           
   22956             : // End of memberFunctionString
   22957             : // Start of memberFunctionString
   22958             : bool p_no_optimize_flag_for_frontend;
   22959             :           
   22960             : // End of memberFunctionString
   22961             : // Start of memberFunctionString
   22962             : bool p_unparse_edg_normalized_method_ROSE_1392;
   22963             :           
   22964             : // End of memberFunctionString
   22965             : // Start of memberFunctionString
   22966             : static bool p_header_file_unparsing_optimization;
   22967             :           
   22968             : // End of memberFunctionString
   22969             : // Start of memberFunctionString
   22970             : bool p_header_file_unparsing_optimization_source_file;
   22971             :           
   22972             : // End of memberFunctionString
   22973             : // Start of memberFunctionString
   22974             : bool p_header_file_unparsing_optimization_header_file;
   22975             :           
   22976             : // End of memberFunctionString
   22977             : // Start of memberFunctionString
   22978             : SgFile::standard_enum p_standard;
   22979             :           
   22980             : // End of memberFunctionString
   22981             : // Start of memberFunctionString
   22982             : bool p_gnu_standard;
   22983             :           
   22984             : // End of memberFunctionString
   22985             : // Start of memberFunctionString
   22986             : int p_frontendErrorCode;
   22987             :           
   22988             : // End of memberFunctionString
   22989             : // Start of memberFunctionString
   22990             : int p_javacErrorCode;
   22991             :           
   22992             : // End of memberFunctionString
   22993             : // Start of memberFunctionString
   22994             : int p_ecjErrorCode;
   22995             :           
   22996             : // End of memberFunctionString
   22997             : // Start of memberFunctionString
   22998             : int p_midendErrorCode;
   22999             :           
   23000             : // End of memberFunctionString
   23001             : // Start of memberFunctionString
   23002             : int p_unparserErrorCode;
   23003             :           
   23004             : // End of memberFunctionString
   23005             : // Start of memberFunctionString
   23006             : int p_backendCompilerErrorCode;
   23007             :           
   23008             : // End of memberFunctionString
   23009             : // Start of memberFunctionString
   23010             : bool p_unparsedFileFailedCompilation;
   23011             :           
   23012             : // End of memberFunctionString
   23013             : 
   23014             :     friend struct Rose::Traits::generated::describe_node_t<SgFile>;
   23015             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, Sg_File_Info*,&SgFile::p_startOfConstruct>;
   23016             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgStringList,&SgFile::p_originalCommandLineArgumentList>;
   23017             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_verbose>;
   23018             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_output_warnings>;
   23019             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_C_only>;
   23020             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_Cxx_only>;
   23021             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_Fortran_only>;
   23022             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_CoArrayFortran_only>;
   23023             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_upc_threads>;
   23024             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_Cuda_only>;
   23025             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_OpenCL_only>;
   23026             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_requires_C_preprocessor>;
   23027             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgFile::outputFormatOption_enum,&SgFile::p_inputFormat>;
   23028             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgFile::outputFormatOption_enum,&SgFile::p_outputFormat>;
   23029             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgFile::outputFormatOption_enum,&SgFile::p_backendCompileFormat>;
   23030             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_fortran_implicit_none>;
   23031             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_openmp>;
   23032             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_openmp_parse_only>;
   23033             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_openmp_ast_only>;
   23034             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_openmp_lowering>;
   23035             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_openmp_analyzing>;
   23036             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_cray_pointer_support>;
   23037             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_failsafe>;
   23038             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_output_parser_actions>;
   23039             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_exit_after_parser>;
   23040             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skip_syntax_check>;
   23041             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skip_parser>;
   23042             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_relax_syntax_check>;
   23043             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skip_translation_from_edg_ast_to_rose_ast>;
   23044             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skip_transformation>;
   23045             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skip_unparse>;
   23046             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skipfinalCompileStep>;
   23047             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_includes>;
   23048             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_line_directives>;
   23049             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_function_calls_using_operator_syntax>;
   23050             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_function_calls_using_operator_names>;
   23051             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_instruction_addresses>;
   23052             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_raw_memory_contents>;
   23053             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_binary_file_format>;
   23054             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgFile::languageOption_enum,&SgFile::p_outputLanguage>;
   23055             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgFile::languageOption_enum,&SgFile::p_inputLanguage>;
   23056             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, std::string,&SgFile::p_sourceFileNameWithPath>;
   23057             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, std::string,&SgFile::p_sourceFileNameWithoutPath>;
   23058             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, std::string,&SgFile::p_unparse_output_filename>;
   23059             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, std::string,&SgFile::p_objectFileNameWithPath>;
   23060             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, std::string,&SgFile::p_objectFileNameWithoutPath>;
   23061             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_useBackendOnly>;
   23062             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_compileOnly>;
   23063             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, std::string,&SgFile::p_savedFrontendCommandLine>;
   23064             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_no_implicit_templates>;
   23065             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_no_implicit_inline_templates>;
   23066             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skip_commentsAndDirectives>;
   23067             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_collectAllCommentsAndDirectives>;
   23068             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_translateCommentsAndDirectivesIntoAST>;
   23069             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparseHeaderFiles>;
   23070             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, ROSEAttributesListContainerPtr,&SgFile::p_preprocessorDirectivesAndCommentsList>;
   23071             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, AstAttributeMechanism*,&SgFile::p_attributeMechanism>;
   23072             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_KCC_frontend>;
   23073             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_new_frontend>;
   23074             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_disable_edg_backend>;
   23075             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_disable_sage_backend>;
   23076             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_testingLevel>;
   23077             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_preinit_il>;
   23078             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_enable_cp_backend>;
   23079             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_markGeneratedFiles>;
   23080             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_negative_test>;
   23081             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_strict_language_handling>;
   23082             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_wave>;
   23083             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_embedColorCodesInGeneratedCode>;
   23084             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_generateSourcePositionCodes>;
   23085             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesCppFileExtension>;
   23086             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesFortranFileExtension>;
   23087             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesFortran77FileExtension>;
   23088             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesFortran90FileExtension>;
   23089             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesFortran95FileExtension>;
   23090             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesFortran2003FileExtension>;
   23091             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesFortran2008FileExtension>;
   23092             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesCoArrayFortranFileExtension>;
   23093             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesPHPFileExtension>;
   23094             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileUsesPythonFileExtension>;
   23095             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_sourceFileTypeIsUnknown>;
   23096             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_detect_dangling_pointers>;
   23097             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_experimental_fortran_frontend>;
   23098             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_experimental_flang_frontend>;
   23099             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_experimental_cuda_fortran_frontend>;
   23100             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_experimental_fortran_frontend_OFP_test>;
   23101             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_read_executable_file_format_only>;
   23102             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_visualize_executable_file_format_skip_symbols>;
   23103             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_visualize_dwarf_only>;
   23104             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_read_instructions_only>;
   23105             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgStringList,&SgFile::p_libraryArchiveObjectFileNameList>;
   23106             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_isLibraryArchive>;
   23107             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_isObjectFile>;
   23108             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_tokens>;
   23109             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_unparse_tokens_testing>;
   23110             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_using_leading_and_trailing_token_mappings>;
   23111             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_template_ast>;
   23112             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_skipAstConsistancyTests>;
   23113             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_multifile_support>;
   23114             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_optimization>;
   23115             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_use_token_stream_to_improve_source_position_info>;
   23116             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_suppress_variable_declaration_normalization>;
   23117             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_edg_il_to_graphviz>;
   23118             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_clang_il_to_graphviz>;
   23119             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_no_optimize_flag_for_frontend>;
   23120             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparse_edg_normalized_method_ROSE_1392>;
   23121             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_header_file_unparsing_optimization_source_file>;
   23122             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_header_file_unparsing_optimization_header_file>;
   23123             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, SgFile::standard_enum,&SgFile::p_standard>;
   23124             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_gnu_standard>;
   23125             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_frontendErrorCode>;
   23126             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_javacErrorCode>;
   23127             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_ecjErrorCode>;
   23128             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_midendErrorCode>;
   23129             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_unparserErrorCode>;
   23130             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, int,&SgFile::p_backendCompilerErrorCode>;
   23131             :     friend struct Rose::Traits::generated::describe_field_t<SgFile, bool,&SgFile::p_unparsedFileFailedCompilation>;
   23132             : 
   23133             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23134             : 
   23135             : 
   23136             :    };
   23137             : #endif
   23138             : 
   23139             : // postdeclarations for SgFile
   23140             : 
   23141             : /* #line 23142 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23142             : 
   23143             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   23144             : 
   23145             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23146             : 
   23147             : 
   23148             : /* #line 23149 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23149             : 
   23150             : 
   23151             : 
   23152             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23153             : 
   23154             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   23155             : //      This code is automatically generated for each 
   23156             : //      terminal and non-terminal within the defined 
   23157             : //      grammar.  There is a simple way to change the 
   23158             : //      code to fix bugs etc.  See the ROSE README file
   23159             : //      for directions.
   23160             : 
   23161             : // tps: (02/22/2010): Adding DLL export requirements
   23162             : #include "rosedll.h"
   23163             : 
   23164             : // predeclarations for SgSourceFile
   23165             : 
   23166             : /* #line 23167 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23167             : 
   23168             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   23169             : 
   23170             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23171             : 
   23172             : #if 1
   23173             : // Class Definition for SgSourceFile
   23174             : class ROSE_DLL_API SgSourceFile  : public SgFile
   23175             :    {
   23176             :      public:
   23177             : 
   23178             : 
   23179             : /* #line 23180 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23180             : 
   23181             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   23182             : // Start of memberFunctionString
   23183             : /* #line 6519 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   23184             : 
   23185             : #ifndef ROSE_SKIP_COMPILATION_OF_WAVE
   23186             :      public:
   23187             :        // King84 (2010.09.22): Added support for getting the preprocessed token stream and the raw token stream.
   23188             :           typedef boost::wave::cpplexer::lex_token<>  token_type;
   23189             :           typedef std::list<token_type>             LexTokenList;
   23190             :      protected:
   23191             :           LexTokenList rawTokenStream;
   23192             :      public:
   23193           0 :           LexTokenList& get_rawTokenStream() { return rawTokenStream; }
   23194             : #else
   23195             :      public:
   23196             : #endif
   23197             : 
   23198             :        // SgSourceFile ( int & argc, char** & argv, int & errorCode, int fileNameIndex = 0, SgProject* project = NULL );
   23199             :           SgSourceFile(std::vector<std::string>& argv, SgProject* project = NULL);
   23200             :           virtual int callFrontEnd() override;
   23201             :        // SgSourceFile ( const SgSourceFile & X );
   23202             : 
   23203             :       //! Default constructor (not meant to be used)
   23204             :        // SgSourceFile() ROSE_DEPRECATED_FUNCTION;
   23205             : 
   23206             :           virtual int buildAST( std::vector<std::string> argv, std::vector<std::string> inputCommandLine ) override;
   23207             : // #ifdef ROSE_BUILD_FORTRAN_LANGUAGE_SUPPORT // Liao 6/25/2010, support enable-only-c and haskell
   23208             : 
   23209             :       //! Divide up the handling of different languages
   23210             :           int build_Fortran_AST( std::vector<std::string> argv, std::vector<std::string> inputCommandLine );
   23211             : 
   23212             : // #endif
   23213             :           int build_C_and_Cxx_AST( std::vector<std::string> argv, std::vector<std::string> inputCommandLine );
   23214             : 
   23215             :           virtual void doSetupForConstructor(const std::vector<std::string>& argv, SgProject* project) override;
   23216             : 
   23217             :        // DQ (12/19/2008): Added support for translation source position information using CPP linemarkers (this is specific to Fortran).
   23218             :           void processCppLinemarkers();
   23219             : 
   23220             :        // DQ (12/13/2012): Added support for more translation source position information using CPP linemarkers (this is not specific to Fortran).
   23221             :        // void gatherASTSourcePositionsBasedOnDetectedLineDirectives();
   23222             :           void fixupASTSourcePositionsBasedOnDetectedLineDirectives(std::set<int> equivalentFilenames);
   23223             : 
   23224             :        // DQ (9/5/2008): Support for older name of the SgGlobal in SgSourceFile
   23225             :        // SgGlobal* get_root() const;
   23226             : 
   23227             :        // DQ (12/23/2008): This sets up the Sg_File_Info in the SgFile and initializes it with the correct name etc.
   23228             :        // This should be the only place where the SgGlobal (global scope object) is built.
   23229             :           void initializeGlobalScope();
   23230             : 
   23231             : #if ALT_FIXUP_COPY
   23232             :        // DQ (11/7/2007): These need to be called separately (see documentation)
   23233             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
   23234             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
   23235             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
   23236             : #else
   23237             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
   23238             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
   23239             : #endif
   23240             : 
   23241             :        // DQ (1/20/2021): Changed the API to use a pointer to a std::map<SgNode*,TokenStreamSequenceToNodeMapping*> instead of a reference.
   23242             :        // DQ (10/28/2013): Abstract access to the new token subsequence map (currently for statements).
   23243             :        // map<SgNode*,TokenStreamSequenceToNodeMapping*> tokenStreamSequenceMap;
   23244             :        // void set_tokenSubsequenceMap(std::map<SgNode*,TokenStreamSequenceToNodeMapping*> & tokenStreamSequenceMap);
   23245             :           void set_tokenSubsequenceMap(std::map<SgNode*,TokenStreamSequenceToNodeMapping*>* tokenStreamSequenceMap);
   23246             :           std::map<SgNode*,TokenStreamSequenceToNodeMapping*> & get_tokenSubsequenceMap();
   23247             : 
   23248             :        // DQ (11/27/2013): Added support for definition of the token unparsing frontier in the AST.
   23249             :        // void set_token_unparse_frontier(std::vector<FrontierNode*> & tokenStreamSequenceMap);
   23250             :        // std::vector<FrontierNode*> & get_token_unparse_frontier();
   23251             :           void set_token_unparse_frontier(std::map<SgStatement*,FrontierNode*> & tokenStreamSequenceMap);
   23252             :           std::map<SgStatement*,FrontierNode*> & get_token_unparse_frontier();
   23253             : 
   23254             :        // DQ (11/27/2013): Added support for adjacency of nodes in the unparsing frontier in the AST.
   23255             :           void set_token_unparse_frontier_adjacency(std::map<SgNode*,PreviousAndNextNodeData*> & tokenStreamSequenceMap);
   23256             :           std::map<SgNode*,PreviousAndNextNodeData*> & get_token_unparse_frontier_adjacency();
   23257             : 
   23258             :        // DQ (11/29/2013): Added to support access to multi-map of redundant mapping of frontier IR nodes to token subsequences.
   23259             :           void set_redundantlyMappedTokensToStatementMultimap(std::multimap<int,SgStatement*> & X);
   23260             :           std::multimap<int,SgStatement*> & get_redundantlyMappedTokensToStatementMultimap();
   23261             : 
   23262             :        // DQ (11/29/2013): Added to support access to multi-map of redundant mapping of frontier IR nodes to token subsequences.
   23263             :           std::set<int> & get_redundantTokenEndingsSet();
   23264             :           void set_redundantTokenEndingsSet(std::set<int> & X);
   23265             : 
   23266             :        // DQ (9/28/2018): Removed static keyword (I don't think we wnat this to be a static function.
   23267             :        // DQ (11/20/2015): Added support for retrieving representative whitespace in unparsing transformations when using the token-based unparsing.
   23268             :        // static void set_representativeWhitespaceStatementMap(std::map<SgScopeStatement*,SgStatement*> & representativeWhitespaceStatementMap);
   23269             :        // static std::map<SgScopeStatement*,SgStatement*> & get_representativeWhitespaceStatementMap();
   23270             :           void set_representativeWhitespaceStatementMap(std::map<SgScopeStatement*,SgStatement*> & representativeWhitespaceStatementMap);
   23271             :           std::map<SgScopeStatement*,SgStatement*> & get_representativeWhitespaceStatementMap();
   23272             : 
   23273             :        // DQ (9/28/2018): Removed static keyword (I don't think we wnat this to be a static function.
   23274             :        // DQ (11/30/2015): Provide a statement to use as a key in the macro expansion map to get info about macro expansions.
   23275             :        // static void set_macroExpansionMap(std::map<SgStatement*,MacroExpansion*> & macroExpansionMap);
   23276             :        // static std::map<SgStatement*,MacroExpansion*> & get_macroExpansionMap();
   23277             :           void set_macroExpansionMap(std::map<SgStatement*,MacroExpansion*> & macroExpansionMap);
   23278             :           std::map<SgStatement*,MacroExpansion*> & get_macroExpansionMap();
   23279             : 
   23280             : #if 0
   23281             :        // DQ (9/12/2009): Adding support for new name qualification (not ready yet).
   23282             :        // typedef std::vector<SgNode*> NumberToStatementType;
   23283             :        // void buildStatementNumbering( NumberToStatementType & numberToStatementContainer );
   23284             :           void buildStatementNumbering();
   23285             : #endif
   23286             : 
   23287             : 
   23288             : 
   23289             : // End of memberFunctionString
   23290             : // Start of memberFunctionString
   23291             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   23292             : 
   23293             : // *** COMMON CODE SECTION BEGINS HERE ***
   23294             : 
   23295             :     public:
   23296             : 
   23297             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   23298             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   23299             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   23300             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   23301             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   23302             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   23303             : 
   23304             :       /*! \brief returns a string representing the class name */
   23305             :           virtual std::string class_name() const override;
   23306             : 
   23307             :       /*! \brief returns new style SageIII enum values */
   23308             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   23309             : 
   23310             :       /*! \brief static variant value */
   23311             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   23312             :        // static const VariantT static_variant = V_SgSourceFile;
   23313             :           enum { static_variant = V_SgSourceFile };
   23314             : 
   23315             :        /* the generated cast function */
   23316             :       /*! \brief Casts pointer from base class to derived class */
   23317             :           ROSE_DLL_API friend       SgSourceFile* isSgSourceFile(       SgNode * s );
   23318             : 
   23319             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   23320             :           ROSE_DLL_API friend const SgSourceFile* isSgSourceFile( const SgNode * s );
   23321             : 
   23322             :      // ******************************************
   23323             :      // * Memory Pool / New / Delete
   23324             :      // ******************************************
   23325             : 
   23326             :      public:
   23327             :           /// \private
   23328             :           static const unsigned pool_size; //
   23329             :           /// \private
   23330             :           static std::vector<unsigned char *> pools; //
   23331             :           /// \private
   23332             :           static SgSourceFile * next_node; // 
   23333             : 
   23334             :           /// \private
   23335             :           static unsigned long initializeStorageClassArray(SgSourceFileStorageClass *); //
   23336             : 
   23337             :           /// \private
   23338             :           static void clearMemoryPool(); //
   23339             :           static void deleteMemoryPool(); //
   23340             : 
   23341             :           /// \private
   23342             :           static void extendMemoryPoolForFileIO(); //
   23343             : 
   23344             :           /// \private
   23345             :           static SgSourceFile * getPointerFromGlobalIndex(unsigned long); //
   23346             :           /// \private
   23347             :           static SgSourceFile * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   23348             : 
   23349             :           /// \private
   23350             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   23351             :           /// \private
   23352             :           static void resetValidFreepointers(); //
   23353             :           /// \private
   23354             :           static unsigned long getNumberOfLastValidPointer(); //
   23355             : 
   23356             : 
   23357             : #if defined(INLINE_FUNCTIONS)
   23358             :       /*! \brief returns pointer to newly allocated IR node */
   23359             :           inline void *operator new (size_t size);
   23360             : #else
   23361             :       /*! \brief returns pointer to newly allocated IR node */
   23362             :           void *operator new (size_t size);
   23363             : #endif
   23364             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   23365             :           void operator delete (void* pointer, size_t size);
   23366             : 
   23367             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   23368         395 :           void operator delete (void* pointer)
   23369             :              {
   23370             :             // This is the generated delete operator...
   23371         395 :                SgSourceFile::operator delete (pointer,sizeof(SgSourceFile));
   23372             :              }
   23373             : 
   23374             :       /*! \brief Returns the total number of IR nodes of this type */
   23375             :           static size_t numberOfNodes();
   23376             : 
   23377             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   23378             :           static size_t memoryUsage();
   23379             : 
   23380             :       // End of scope which started in IR nodes specific code 
   23381             :       /* */
   23382             : 
   23383             :       /* name Internal Functions
   23384             :           \brief Internal functions ... incomplete-documentation
   23385             : 
   23386             :           These functions have been made public as part of the design, but they are suggested for internal use 
   23387             :           or by particularly knowledgeable users for specialized tools or applications.
   23388             : 
   23389             :           \internal We could not make these private because they are required by user for special purposes. And 
   23390             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   23391             :          
   23392             :        */
   23393             : 
   23394             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   23395             :        // overridden in every class by *generated* implementation
   23396             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   23397             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   23398             :        // MS: 06/28/02 container of names of variables or container indices 
   23399             :        // used used in the traversal to access AST successor nodes
   23400             :        // overridden in every class by *generated* implementation
   23401             :       /*! \brief container of names of variables or container indices used used in the traversal
   23402             :           to access AST successor nodes overridden in every class by *generated* implementation */
   23403             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   23404             : 
   23405             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   23406             :        // than all the vector copies. The implementation for these functions is generated for each class.
   23407             :       /*! \brief return number of children in the traversal successor list */
   23408             :           virtual size_t get_numberOfTraversalSuccessors() override;
   23409             :       /*! \brief index-based access to traversal successors by index number */
   23410             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   23411             :       /*! \brief index-based access to traversal successors by child node */
   23412             :           virtual size_t get_childIndex(SgNode *child) override;
   23413             : 
   23414             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   23415             :        // MS: 08/16/2002 method for generating RTI information
   23416             :       /*! \brief return C++ Runtime-Time-Information */
   23417             :           virtual RTIReturnType roseRTI() override;
   23418             : #endif
   23419             :       /* */
   23420             : 
   23421             : 
   23422             : 
   23423             :       /* name Deprecated Functions
   23424             :           \brief Deprecated functions ... incomplete-documentation
   23425             : 
   23426             :           These functions have been deprecated from use.
   23427             :        */
   23428             :       /* */
   23429             : 
   23430             :       /*! returns a C style string (char*) representing the class name */
   23431             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   23432             : 
   23433             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   23434             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   23435             : #if 0
   23436             :       /*! returns old style Sage II enum values */
   23437             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   23438             :       /*! returns old style Sage II enum values */
   23439             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   23440             : #endif
   23441             :       /* */
   23442             : 
   23443             : 
   23444             : 
   23445             : 
   23446             :      public:
   23447             :       /* name Traversal Support Functions
   23448             :           \brief Traversal support functions ... incomplete-documentation
   23449             : 
   23450             :           These functions have been made public as part of the design, but they are suggested for internal use 
   23451             :           or by particularly knowledgable users for specialized tools or applications.
   23452             :        */
   23453             :       /* */
   23454             : 
   23455             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   23456             :        // (inferior to ROSE traversal mechanism, experimental).
   23457             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   23458             :        */
   23459             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   23460             : 
   23461             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   23462             :       /*! \brief support for the classic visitor pattern done in GoF */
   23463             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   23464             : 
   23465             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   23466             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   23467             :        */
   23468             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   23469             : 
   23470             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   23471             :        */
   23472             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   23473             : 
   23474             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   23475             :        // This traversal helps support internal tools that call static member functions.
   23476             :        // note: this function operates on the memory pools.
   23477             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   23478             :        */
   23479             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   23480             :       /* */
   23481             : 
   23482             : 
   23483             :      public:
   23484             :       /* name Memory Allocation Functions
   23485             :           \brief Memory allocations functions ... incomplete-documentation
   23486             : 
   23487             :           These functions have been made public as part of the design, but they are suggested for internal use 
   23488             :           or by particularly knowledgable users for specialized tools or applications.
   23489             :        */
   23490             :       /* */
   23491             : 
   23492             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   23493             : 
   23494             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   23495             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   23496             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   23497             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   23498             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   23499             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   23500             :           being used with the AST File I/O mechanism.
   23501             :        */
   23502             :           virtual bool isInMemoryPool() override;
   23503             : 
   23504             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   23505             : 
   23506             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   23507             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   23508             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   23509             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   23510             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   23511             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   23512             :           being used with the AST File I/O mechanism.
   23513             :        */
   23514             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   23515             : 
   23516             :       // DQ (4/30/2006): Modified to be a const function.
   23517             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   23518             : 
   23519             :           This functions is part of general support for many possible tools to operate 
   23520             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   23521             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   23522             :           less than the set of pointers used by the AST file I/O. This is part of
   23523             :           work implemented by Andreas, and support tools such as the AST graph generation.
   23524             : 
   23525             :           \warning This function can return unexpected data members and thus the 
   23526             :                    order and the number of elements is unpredicable and subject 
   23527             :                    to change.
   23528             : 
   23529             :           \returns STL vector of pairs of SgNode* and strings
   23530             :        */
   23531             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   23532             : 
   23533             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   23534             : 
   23535             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   23536             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   23537             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   23538             : 
   23539             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   23540             :                    and subject to change.
   23541             :        */
   23542             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   23543             : 
   23544             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   23545             : 
   23546             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   23547             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   23548             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   23549             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   23550             : 
   23551             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   23552             : 
   23553             :           \returns long
   23554             :        */
   23555             :           virtual long getChildIndex( SgNode* childNode ) const override;
   23556             : 
   23557             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   23558             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   23559             :       /* \brief Constructor for use by AST File I/O Mechanism
   23560             : 
   23561             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   23562             :           which obtained via fast binary file I/O from disk.
   23563             :        */
   23564             :        // SgSourceFile( SgSourceFileStorageClass& source );
   23565             : 
   23566             : 
   23567             : 
   23568             : 
   23569             : 
   23570             :  // JH (10/24/2005): methods added to support the ast file IO
   23571             :     private:
   23572             : 
   23573             :       /* name AST Memory Allocation Support Functions
   23574             :           \brief Memory allocations support....
   23575             : 
   23576             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   23577             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   23578             :           and support the AST File I/O Mechanism.
   23579             :        */
   23580             :       /* */
   23581             : 
   23582             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   23583             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   23584             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   23585             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   23586             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   23587             :           a correspinding one in the AST_FILE_IO class!
   23588             :        */
   23589             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   23590             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   23591             :       /* \brief Typedef used for low level memory access.
   23592             :        */
   23593             :        // typedef unsigned char* TestType;
   23594             : 
   23595             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   23596             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   23597             :       /* \brief Typedef used to hold memory addresses as values.
   23598             :        */
   23599             :        // typedef unsigned long  AddressType;
   23600             : 
   23601             : 
   23602             : 
   23603             :        // necessary, to have direct access to the p_freepointer and the private methods !
   23604             :       /*! \brief friend class declaration to support AST File I/O */
   23605             :           friend class AST_FILE_IO;
   23606             : 
   23607             :       /*! \brief friend class declaration to support AST File I/O */
   23608             :           friend class SgSourceFileStorageClass;
   23609             : 
   23610             :       /*! \brief friend class declaration to support AST File I/O */
   23611             :           friend class AstSpecificDataManagingClass;
   23612             : 
   23613             :       /*! \brief friend class declaration to support AST File I/O */
   23614             :           friend class AstSpecificDataManagingClassStorageClass;
   23615             :     public:
   23616             :       /*! \brief IR node constructor to support AST File I/O */
   23617             :           SgSourceFile( const SgSourceFileStorageClass& source );
   23618             : 
   23619             :  // private: // JJW hack
   23620             :        /*
   23621             :           name AST Memory Allocation Support Variables
   23622             :           Memory allocations support variables 
   23623             : 
   23624             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   23625             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   23626             :           and support the AST File I/O Mechanism.
   23627             :        */
   23628             :       /* */
   23629             : 
   23630             :     public:
   23631             : 
   23632             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   23633             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   23634             :       // virtual SgNode* addRegExpAttribute();
   23635             :       /*! \brief Support for AST matching using regular expression.
   23636             : 
   23637             :           This support is incomplete and the subject of current research to define 
   23638             :           RegEx trees to support inexact matching.
   23639             :        */
   23640             :           SgSourceFile* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   23641             : 
   23642             : // *** COMMON CODE SECTION ENDS HERE ***
   23643             : 
   23644             : 
   23645             : // End of memberFunctionString
   23646             : // Start of memberFunctionString
   23647             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   23648             : 
   23649             :      // the generated cast function
   23650             :      // friend ROSE_DLL_API SgSourceFile* isSgSourceFile ( SgNode* s );
   23651             : 
   23652             :           typedef SgFile base_node_type;
   23653             : 
   23654             : 
   23655             : // End of memberFunctionString
   23656             : 
   23657             :      public: 
   23658             :          SgGlobal* get_globalScope() const;
   23659             :          void set_globalScope(SgGlobal* globalScope);
   23660             : 
   23661             :      public: 
   23662             :          const SgModuleStatementPtrList&  get_module_list() const;
   23663             :          SgModuleStatementPtrList& get_module_list(); 
   23664             : 
   23665             :      public: 
   23666             :          const SgTokenPtrList&  get_token_list() const;
   23667             :          SgTokenPtrList& get_token_list(); 
   23668             : 
   23669             :      public: 
   23670             :          SgGlobal* get_temp_holding_scope() const;
   23671             :          void set_temp_holding_scope(SgGlobal* temp_holding_scope);
   23672             : 
   23673             :      public: 
   23674             :          bool get_isHeaderFile() const;
   23675             :          void set_isHeaderFile(bool isHeaderFile);
   23676             : 
   23677             :      public: 
   23678             :          bool get_isHeaderFileIncludedMoreThanOnce() const;
   23679             :          void set_isHeaderFileIncludedMoreThanOnce(bool isHeaderFileIncludedMoreThanOnce);
   23680             : 
   23681             :      public: 
   23682             :          SgHeaderFileReport* get_headerFileReport() const;
   23683             :          void set_headerFileReport(SgHeaderFileReport* headerFileReport);
   23684             : 
   23685             :      public: 
   23686             :          const SgStringList&  get_extraIncludeDirectorySpecifierBeforeList() const;
   23687             :          SgStringList& get_extraIncludeDirectorySpecifierBeforeList(); 
   23688             : 
   23689             :      public: 
   23690             :          const SgStringList&  get_extraIncludeDirectorySpecifierAfterList() const;
   23691             :          SgStringList& get_extraIncludeDirectorySpecifierAfterList(); 
   23692             : 
   23693             :      public: 
   23694             :          SgIncludeFile* get_associated_include_file() const;
   23695             :          void set_associated_include_file(SgIncludeFile* associated_include_file);
   23696             : 
   23697             :      public: 
   23698             :          bool get_processedToIncludeCppDirectivesAndComments() const;
   23699             :          void set_processedToIncludeCppDirectivesAndComments(bool processedToIncludeCppDirectivesAndComments);
   23700             : 
   23701             :      public: 
   23702             :          const SgNodePtrList&  get_extra_nodes_for_namequal_init() const;
   23703             :          SgNodePtrList& get_extra_nodes_for_namequal_init(); 
   23704             : 
   23705             :      public: 
   23706             :          bool get_isDynamicLibrary() const;
   23707             :          void set_isDynamicLibrary(bool isDynamicLibrary);
   23708             : 
   23709             : 
   23710             :      public: 
   23711             :          virtual ~SgSourceFile();
   23712             : 
   23713             : 
   23714             :      public: 
   23715             :          SgSourceFile(); 
   23716             : 
   23717             :     protected:
   23718             : // Start of memberFunctionString
   23719             : SgGlobal* p_globalScope;
   23720             :           
   23721             : // End of memberFunctionString
   23722             : // Start of memberFunctionString
   23723             : SgModuleStatementPtrList p_module_list;
   23724             :           
   23725             : // End of memberFunctionString
   23726             : // Start of memberFunctionString
   23727             : SgTokenPtrList p_token_list;
   23728             :           
   23729             : // End of memberFunctionString
   23730             : // Start of memberFunctionString
   23731             : SgGlobal* p_temp_holding_scope;
   23732             :           
   23733             : // End of memberFunctionString
   23734             : // Start of memberFunctionString
   23735             : bool p_isHeaderFile;
   23736             :           
   23737             : // End of memberFunctionString
   23738             : // Start of memberFunctionString
   23739             : bool p_isHeaderFileIncludedMoreThanOnce;
   23740             :           
   23741             : // End of memberFunctionString
   23742             : // Start of memberFunctionString
   23743             : SgHeaderFileReport* p_headerFileReport;
   23744             :           
   23745             : // End of memberFunctionString
   23746             : // Start of memberFunctionString
   23747             : SgStringList p_extraIncludeDirectorySpecifierBeforeList;
   23748             :           
   23749             : // End of memberFunctionString
   23750             : // Start of memberFunctionString
   23751             : SgStringList p_extraIncludeDirectorySpecifierAfterList;
   23752             :           
   23753             : // End of memberFunctionString
   23754             : // Start of memberFunctionString
   23755             : SgIncludeFile* p_associated_include_file;
   23756             :           
   23757             : // End of memberFunctionString
   23758             : // Start of memberFunctionString
   23759             : bool p_processedToIncludeCppDirectivesAndComments;
   23760             :           
   23761             : // End of memberFunctionString
   23762             : // Start of memberFunctionString
   23763             : SgNodePtrList p_extra_nodes_for_namequal_init;
   23764             :           
   23765             : // End of memberFunctionString
   23766             : // Start of memberFunctionString
   23767             : bool p_isDynamicLibrary;
   23768             :           
   23769             : // End of memberFunctionString
   23770             : 
   23771             :     friend struct Rose::Traits::generated::describe_node_t<SgSourceFile>;
   23772             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgGlobal*,&SgSourceFile::p_globalScope>;
   23773             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgModuleStatementPtrList,&SgSourceFile::p_module_list>;
   23774             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgTokenPtrList,&SgSourceFile::p_token_list>;
   23775             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgGlobal*,&SgSourceFile::p_temp_holding_scope>;
   23776             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, bool,&SgSourceFile::p_isHeaderFile>;
   23777             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, bool,&SgSourceFile::p_isHeaderFileIncludedMoreThanOnce>;
   23778             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgHeaderFileReport*,&SgSourceFile::p_headerFileReport>;
   23779             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgStringList,&SgSourceFile::p_extraIncludeDirectorySpecifierBeforeList>;
   23780             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgStringList,&SgSourceFile::p_extraIncludeDirectorySpecifierAfterList>;
   23781             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgIncludeFile*,&SgSourceFile::p_associated_include_file>;
   23782             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, bool,&SgSourceFile::p_processedToIncludeCppDirectivesAndComments>;
   23783             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, SgNodePtrList,&SgSourceFile::p_extra_nodes_for_namequal_init>;
   23784             :     friend struct Rose::Traits::generated::describe_field_t<SgSourceFile, bool,&SgSourceFile::p_isDynamicLibrary>;
   23785             : 
   23786             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23787             : 
   23788             : 
   23789             :    };
   23790             : #endif
   23791             : 
   23792             : // postdeclarations for SgSourceFile
   23793             : 
   23794             : /* #line 23795 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23795             : 
   23796             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   23797             : 
   23798             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23799             : 
   23800             : 
   23801             : /* #line 23802 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23802             : 
   23803             : 
   23804             : 
   23805             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23806             : 
   23807             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   23808             : //      This code is automatically generated for each 
   23809             : //      terminal and non-terminal within the defined 
   23810             : //      grammar.  There is a simple way to change the 
   23811             : //      code to fix bugs etc.  See the ROSE README file
   23812             : //      for directions.
   23813             : 
   23814             : // tps: (02/22/2010): Adding DLL export requirements
   23815             : #include "rosedll.h"
   23816             : 
   23817             : // predeclarations for SgUnknownFile
   23818             : 
   23819             : /* #line 23820 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23820             : 
   23821             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   23822             : 
   23823             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   23824             : 
   23825             : #if 1
   23826             : // Class Definition for SgUnknownFile
   23827             : class ROSE_DLL_API SgUnknownFile  : public SgFile
   23828             :    {
   23829             :      public:
   23830             : 
   23831             : 
   23832             : /* #line 23833 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   23833             : 
   23834             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   23835             : // Start of memberFunctionString
   23836             : /* #line 6642 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   23837             : 
   23838             :      public:
   23839             :           SgUnknownFile(std::vector<std::string>& argv, SgProject* project = NULL);
   23840             : 
   23841             :           virtual int callFrontEnd() override;
   23842             :           virtual void doSetupForConstructor(const std::vector<std::string>& argv, SgProject* project) override;
   23843             : 
   23844             : 
   23845             : 
   23846             : // End of memberFunctionString
   23847             : // Start of memberFunctionString
   23848             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   23849             : 
   23850             : // *** COMMON CODE SECTION BEGINS HERE ***
   23851             : 
   23852             :     public:
   23853             : 
   23854             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   23855             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   23856             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   23857             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   23858             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   23859             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   23860             : 
   23861             :       /*! \brief returns a string representing the class name */
   23862             :           virtual std::string class_name() const override;
   23863             : 
   23864             :       /*! \brief returns new style SageIII enum values */
   23865             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   23866             : 
   23867             :       /*! \brief static variant value */
   23868             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   23869             :        // static const VariantT static_variant = V_SgUnknownFile;
   23870             :           enum { static_variant = V_SgUnknownFile };
   23871             : 
   23872             :        /* the generated cast function */
   23873             :       /*! \brief Casts pointer from base class to derived class */
   23874             :           ROSE_DLL_API friend       SgUnknownFile* isSgUnknownFile(       SgNode * s );
   23875             : 
   23876             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   23877             :           ROSE_DLL_API friend const SgUnknownFile* isSgUnknownFile( const SgNode * s );
   23878             : 
   23879             :      // ******************************************
   23880             :      // * Memory Pool / New / Delete
   23881             :      // ******************************************
   23882             : 
   23883             :      public:
   23884             :           /// \private
   23885             :           static const unsigned pool_size; //
   23886             :           /// \private
   23887             :           static std::vector<unsigned char *> pools; //
   23888             :           /// \private
   23889             :           static SgUnknownFile * next_node; // 
   23890             : 
   23891             :           /// \private
   23892             :           static unsigned long initializeStorageClassArray(SgUnknownFileStorageClass *); //
   23893             : 
   23894             :           /// \private
   23895             :           static void clearMemoryPool(); //
   23896             :           static void deleteMemoryPool(); //
   23897             : 
   23898             :           /// \private
   23899             :           static void extendMemoryPoolForFileIO(); //
   23900             : 
   23901             :           /// \private
   23902             :           static SgUnknownFile * getPointerFromGlobalIndex(unsigned long); //
   23903             :           /// \private
   23904             :           static SgUnknownFile * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   23905             : 
   23906             :           /// \private
   23907             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   23908             :           /// \private
   23909             :           static void resetValidFreepointers(); //
   23910             :           /// \private
   23911             :           static unsigned long getNumberOfLastValidPointer(); //
   23912             : 
   23913             : 
   23914             : #if defined(INLINE_FUNCTIONS)
   23915             :       /*! \brief returns pointer to newly allocated IR node */
   23916             :           inline void *operator new (size_t size);
   23917             : #else
   23918             :       /*! \brief returns pointer to newly allocated IR node */
   23919             :           void *operator new (size_t size);
   23920             : #endif
   23921             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   23922             :           void operator delete (void* pointer, size_t size);
   23923             : 
   23924             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   23925           0 :           void operator delete (void* pointer)
   23926             :              {
   23927             :             // This is the generated delete operator...
   23928           0 :                SgUnknownFile::operator delete (pointer,sizeof(SgUnknownFile));
   23929             :              }
   23930             : 
   23931             :       /*! \brief Returns the total number of IR nodes of this type */
   23932             :           static size_t numberOfNodes();
   23933             : 
   23934             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   23935             :           static size_t memoryUsage();
   23936             : 
   23937             :       // End of scope which started in IR nodes specific code 
   23938             :       /* */
   23939             : 
   23940             :       /* name Internal Functions
   23941             :           \brief Internal functions ... incomplete-documentation
   23942             : 
   23943             :           These functions have been made public as part of the design, but they are suggested for internal use 
   23944             :           or by particularly knowledgeable users for specialized tools or applications.
   23945             : 
   23946             :           \internal We could not make these private because they are required by user for special purposes. And 
   23947             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   23948             :          
   23949             :        */
   23950             : 
   23951             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   23952             :        // overridden in every class by *generated* implementation
   23953             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   23954             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   23955             :        // MS: 06/28/02 container of names of variables or container indices 
   23956             :        // used used in the traversal to access AST successor nodes
   23957             :        // overridden in every class by *generated* implementation
   23958             :       /*! \brief container of names of variables or container indices used used in the traversal
   23959             :           to access AST successor nodes overridden in every class by *generated* implementation */
   23960             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   23961             : 
   23962             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   23963             :        // than all the vector copies. The implementation for these functions is generated for each class.
   23964             :       /*! \brief return number of children in the traversal successor list */
   23965             :           virtual size_t get_numberOfTraversalSuccessors() override;
   23966             :       /*! \brief index-based access to traversal successors by index number */
   23967             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   23968             :       /*! \brief index-based access to traversal successors by child node */
   23969             :           virtual size_t get_childIndex(SgNode *child) override;
   23970             : 
   23971             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   23972             :        // MS: 08/16/2002 method for generating RTI information
   23973             :       /*! \brief return C++ Runtime-Time-Information */
   23974             :           virtual RTIReturnType roseRTI() override;
   23975             : #endif
   23976             :       /* */
   23977             : 
   23978             : 
   23979             : 
   23980             :       /* name Deprecated Functions
   23981             :           \brief Deprecated functions ... incomplete-documentation
   23982             : 
   23983             :           These functions have been deprecated from use.
   23984             :        */
   23985             :       /* */
   23986             : 
   23987             :       /*! returns a C style string (char*) representing the class name */
   23988             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   23989             : 
   23990             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   23991             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   23992             : #if 0
   23993             :       /*! returns old style Sage II enum values */
   23994             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   23995             :       /*! returns old style Sage II enum values */
   23996             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   23997             : #endif
   23998             :       /* */
   23999             : 
   24000             : 
   24001             : 
   24002             : 
   24003             :      public:
   24004             :       /* name Traversal Support Functions
   24005             :           \brief Traversal support functions ... incomplete-documentation
   24006             : 
   24007             :           These functions have been made public as part of the design, but they are suggested for internal use 
   24008             :           or by particularly knowledgable users for specialized tools or applications.
   24009             :        */
   24010             :       /* */
   24011             : 
   24012             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   24013             :        // (inferior to ROSE traversal mechanism, experimental).
   24014             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   24015             :        */
   24016             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   24017             : 
   24018             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   24019             :       /*! \brief support for the classic visitor pattern done in GoF */
   24020             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   24021             : 
   24022             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   24023             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   24024             :        */
   24025             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   24026             : 
   24027             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   24028             :        */
   24029             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   24030             : 
   24031             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   24032             :        // This traversal helps support internal tools that call static member functions.
   24033             :        // note: this function operates on the memory pools.
   24034             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   24035             :        */
   24036             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   24037             :       /* */
   24038             : 
   24039             : 
   24040             :      public:
   24041             :       /* name Memory Allocation Functions
   24042             :           \brief Memory allocations functions ... incomplete-documentation
   24043             : 
   24044             :           These functions have been made public as part of the design, but they are suggested for internal use 
   24045             :           or by particularly knowledgable users for specialized tools or applications.
   24046             :        */
   24047             :       /* */
   24048             : 
   24049             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   24050             : 
   24051             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   24052             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   24053             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   24054             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   24055             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   24056             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   24057             :           being used with the AST File I/O mechanism.
   24058             :        */
   24059             :           virtual bool isInMemoryPool() override;
   24060             : 
   24061             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   24062             : 
   24063             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   24064             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   24065             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   24066             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   24067             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   24068             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   24069             :           being used with the AST File I/O mechanism.
   24070             :        */
   24071             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   24072             : 
   24073             :       // DQ (4/30/2006): Modified to be a const function.
   24074             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   24075             : 
   24076             :           This functions is part of general support for many possible tools to operate 
   24077             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   24078             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   24079             :           less than the set of pointers used by the AST file I/O. This is part of
   24080             :           work implemented by Andreas, and support tools such as the AST graph generation.
   24081             : 
   24082             :           \warning This function can return unexpected data members and thus the 
   24083             :                    order and the number of elements is unpredicable and subject 
   24084             :                    to change.
   24085             : 
   24086             :           \returns STL vector of pairs of SgNode* and strings
   24087             :        */
   24088             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   24089             : 
   24090             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   24091             : 
   24092             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   24093             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   24094             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   24095             : 
   24096             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   24097             :                    and subject to change.
   24098             :        */
   24099             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   24100             : 
   24101             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   24102             : 
   24103             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   24104             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   24105             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   24106             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   24107             : 
   24108             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   24109             : 
   24110             :           \returns long
   24111             :        */
   24112             :           virtual long getChildIndex( SgNode* childNode ) const override;
   24113             : 
   24114             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   24115             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   24116             :       /* \brief Constructor for use by AST File I/O Mechanism
   24117             : 
   24118             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   24119             :           which obtained via fast binary file I/O from disk.
   24120             :        */
   24121             :        // SgUnknownFile( SgUnknownFileStorageClass& source );
   24122             : 
   24123             : 
   24124             : 
   24125             : 
   24126             : 
   24127             :  // JH (10/24/2005): methods added to support the ast file IO
   24128             :     private:
   24129             : 
   24130             :       /* name AST Memory Allocation Support Functions
   24131             :           \brief Memory allocations support....
   24132             : 
   24133             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   24134             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   24135             :           and support the AST File I/O Mechanism.
   24136             :        */
   24137             :       /* */
   24138             : 
   24139             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   24140             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   24141             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   24142             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   24143             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   24144             :           a correspinding one in the AST_FILE_IO class!
   24145             :        */
   24146             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   24147             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   24148             :       /* \brief Typedef used for low level memory access.
   24149             :        */
   24150             :        // typedef unsigned char* TestType;
   24151             : 
   24152             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   24153             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   24154             :       /* \brief Typedef used to hold memory addresses as values.
   24155             :        */
   24156             :        // typedef unsigned long  AddressType;
   24157             : 
   24158             : 
   24159             : 
   24160             :        // necessary, to have direct access to the p_freepointer and the private methods !
   24161             :       /*! \brief friend class declaration to support AST File I/O */
   24162             :           friend class AST_FILE_IO;
   24163             : 
   24164             :       /*! \brief friend class declaration to support AST File I/O */
   24165             :           friend class SgUnknownFileStorageClass;
   24166             : 
   24167             :       /*! \brief friend class declaration to support AST File I/O */
   24168             :           friend class AstSpecificDataManagingClass;
   24169             : 
   24170             :       /*! \brief friend class declaration to support AST File I/O */
   24171             :           friend class AstSpecificDataManagingClassStorageClass;
   24172             :     public:
   24173             :       /*! \brief IR node constructor to support AST File I/O */
   24174             :           SgUnknownFile( const SgUnknownFileStorageClass& source );
   24175             : 
   24176             :  // private: // JJW hack
   24177             :        /*
   24178             :           name AST Memory Allocation Support Variables
   24179             :           Memory allocations support variables 
   24180             : 
   24181             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   24182             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   24183             :           and support the AST File I/O Mechanism.
   24184             :        */
   24185             :       /* */
   24186             : 
   24187             :     public:
   24188             : 
   24189             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   24190             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   24191             :       // virtual SgNode* addRegExpAttribute();
   24192             :       /*! \brief Support for AST matching using regular expression.
   24193             : 
   24194             :           This support is incomplete and the subject of current research to define 
   24195             :           RegEx trees to support inexact matching.
   24196             :        */
   24197             :           SgUnknownFile* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   24198             : 
   24199             : // *** COMMON CODE SECTION ENDS HERE ***
   24200             : 
   24201             : 
   24202             : // End of memberFunctionString
   24203             : // Start of memberFunctionString
   24204             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   24205             : 
   24206             :      // the generated cast function
   24207             :      // friend ROSE_DLL_API SgUnknownFile* isSgUnknownFile ( SgNode* s );
   24208             : 
   24209             :           typedef SgFile base_node_type;
   24210             : 
   24211             : 
   24212             : // End of memberFunctionString
   24213             : 
   24214             :      public: 
   24215             :          SgGlobal* get_globalScope() const;
   24216             :          void set_globalScope(SgGlobal* globalScope);
   24217             : 
   24218             : 
   24219             :      public: 
   24220             :          virtual ~SgUnknownFile();
   24221             : 
   24222             : 
   24223             :      public: 
   24224             :          SgUnknownFile(); 
   24225             : 
   24226             :     protected:
   24227             : // Start of memberFunctionString
   24228             : SgGlobal* p_globalScope;
   24229             :           
   24230             : // End of memberFunctionString
   24231             : 
   24232             :     friend struct Rose::Traits::generated::describe_node_t<SgUnknownFile>;
   24233             :     friend struct Rose::Traits::generated::describe_field_t<SgUnknownFile, SgGlobal*,&SgUnknownFile::p_globalScope>;
   24234             : 
   24235             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   24236             : 
   24237             : 
   24238             :    };
   24239             : #endif
   24240             : 
   24241             : // postdeclarations for SgUnknownFile
   24242             : 
   24243             : /* #line 24244 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   24244             : 
   24245             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   24246             : 
   24247             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   24248             : 
   24249             : 
   24250             : /* #line 24251 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   24251             : 
   24252             : 
   24253             : 
   24254             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   24255             : 
   24256             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   24257             : //      This code is automatically generated for each 
   24258             : //      terminal and non-terminal within the defined 
   24259             : //      grammar.  There is a simple way to change the 
   24260             : //      code to fix bugs etc.  See the ROSE README file
   24261             : //      for directions.
   24262             : 
   24263             : // tps: (02/22/2010): Adding DLL export requirements
   24264             : #include "rosedll.h"
   24265             : 
   24266             : // predeclarations for SgProject
   24267             : 
   24268             : /* #line 24269 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   24269             : 
   24270             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   24271             : 
   24272             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   24273             : 
   24274             : #if 1
   24275             : // Class Definition for SgProject
   24276             : class ROSE_DLL_API SgProject  : public SgSupport
   24277             :    {
   24278             :      public:
   24279             : 
   24280             : 
   24281             : /* #line 24282 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   24282             : 
   24283             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   24284             : // Start of memberFunctionString
   24285             : /* #line 6677 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   24286             : 
   24287             : 
   24288             : 
   24289             :       /*! Template Instantiation Options */
   24290             :           enum template_instantiation_enum
   24291             :              {
   24292             :                e_unknown  = 0, /*!< error value */
   24293             :                e_default  = 1, /*!< default value */
   24294             :                e_none     = 2, /*!< no template instantiation */
   24295             :                e_used     = 3, /*!< instantiate only templates that are used */
   24296             :                e_all      = 4, /*!< instantiate all possible templates */
   24297             :                e_local    = 5, /*!< instantiate only used templates and instantiate them as local entities */
   24298             :                e_last          /*!< last value (used for error checking) */
   24299             :              };
   24300             : 
   24301             :       //! The only useful constructors (constant folding in the frontend is false by default).
   24302             :           SgProject ( const std::vector<std::string>& argv, bool frontendConstantFolding = false);
   24303             :           SgProject ( int argc, char** argv, bool frontendConstantFolding = false);
   24304             : 
   24305             : #if 0
   24306             :       // DQ (10/16/2005): Depreicated a long time ago, removed it now!
   24307             :       //! Deprecated old constructor (test use of gnu attribute (requires gnu 3.1+))
   24308             :        // SgProject ( int &argc, char** argv, int & errorCode);
   24309             :           SgProject ( int &argc, char** argv, int & errorCode) ROSE_DEPRECATED_FUNCTION;
   24310             : #endif
   24311             : 
   24312             :        // DQ (4/10/2017): Adding support for use of Saywer for command line handling.
   24313             :       //! Use of Saywer support for command line handling (work in progress).
   24314             :           std::vector<std::string> parseCommandLine(std::vector<std::string> argv);
   24315             : 
   24316             :        // DQ (4/10/2017): Adding support for use of Saywer for command line handling.
   24317             :        // Sawyer::CommandLine::SwitchGroup commandLineSwitches();
   24318             : 
   24319             :       //! Use of Saywer support for specification of ROSE specific command line switches (work in progress).
   24320             :           Sawyer::CommandLine::SwitchGroup frontendAllSwitches();
   24321             :           Sawyer::CommandLine::SwitchGroup backendAllSwitches();
   24322             : 
   24323             :       //! process command line and store options in the SgProject object. This options are used by parse und unparse.
   24324             :           void processCommandLine(const std::vector<std::string>& argv);
   24325           0 :           void processCommandLine(int argc, char** argv) { processCommandLine(std::vector<std::string>(argv, argv + argc)); }
   24326             : 
   24327             :       //! parse input file(s)
   24328             :           int parse();
   24329             : 
   24330             :       //! processes command line and parses all files.
   24331             :       //! Error code can be accessed using get_frontendErrorCode()
   24332             :           int parse (const std::vector<std::string>& argv);
   24333             :           int parse (int argc, char** argv) { return parse(std::vector<std::string>(argv, argv + argc)); }
   24334             : 
   24335             :      public:
   24336             : 
   24337             :       //! default constructor (not meant to be used)
   24338             :           SgProject();
   24339             : 
   24340             :       //! Copy constructor (shallow copy, does not do deep copy of the AST)
   24341             :           SgProject( const SgProject & project );
   24342             : 
   24343             :       //! Destructor
   24344             :       // ~SgProject();
   24345             : 
   24346             :       //! The total number of files in this project (equal to the number of source files specified on the command line)
   24347             :           int numberOfFiles() const;
   24348             : 
   24349             :       //! Total number of directories in the project.
   24350             :           int numberOfDirectories() const;
   24351             : 
   24352             :       //! Access function for retriving a SgFile object from the list stored internally
   24353             :       //! This function is depricated and "operator[unsigned int]" should be used instead.
   24354             :           SgFile & get_file ( int i ) const ROSE_DEPRECATED_FUNCTION;
   24355             : 
   24356             :       //! Access function for putting a new SgFile object into the list stored internally
   24357             :       //! This function is depricated and "get_fileList->push_back(SgFile*)" should be used instead.
   24358             :           void set_file ( SgFile & file ) ROSE_DEPRECATED_FUNCTION;
   24359             : 
   24360             :       //! Intended for use with the -rose:keep_going commandline option.
   24361             :       //! \returns A list of files that encountered an error within either
   24362             :       //!          the frontend, unparser, or backend compilation.
   24363             :           SgFilePtrList get_files() const;
   24364             :           SgFilePtrList get_files_with_errors() const;
   24365             :           SgFilePtrList get_files_without_errors() const;
   24366             : 
   24367             :       //! Access function for retriving a SgFile object from the list stored internally
   24368             :           SgFile* operator[]( unsigned int i );
   24369             : 
   24370             :       //! Access function for retriving a SgFile object from the list stored internally, but using the filename with full path.
   24371             :           SgFile* operator[]( std::string filename );
   24372             : 
   24373             :       //! function to generate output for all files in the project (arguments control code generation)
   24374             :        // void unparse();
   24375             :           void unparse ( UnparseFormatHelp *unparseFormatHelp = NULL, UnparseDelegate* unparseDelegate = NULL );
   24376             : 
   24377             :        // DQ (5/8/2010): Added support for resetting the source position information.
   24378             :           void resetSourcePositionToGeneratedCode ( UnparseFormatHelp *unparseFormatHelp = NULL );
   24379             : 
   24380             :       // DQ (10/14/2010): Removing reference to macros defined in rose_config.h.
   24381             :       // DQ (8/29/2005): Added support for classification of back-end compilers (independent of the name invoked to execute them)
   24382             :       //! function to compile the output from unparsing the project
   24383             :        // BP : 11/13/2001, modified to take compiler name
   24384             :        // int compileOutput( char *compilerName = CXX_COMPILER_NAME );
   24385             :        // int compileOutput( const std::string& compilerName = BACKEND_CXX_COMPILER_NAME_WITH_PATH );
   24386             :           int compileOutput();
   24387             :           int RunFrontend();
   24388             : 
   24389             :       // DQ (10/14/2010): Removing reference to macros defined in rose_config.h.
   24390             :       // DQ (8/29/2005): Added support for classification of back-end compilers (independent of the name invoked to execute them)
   24391             :       //! function to preform linking!
   24392             :        // int link ( std::string linkerName = CXX_COMPILER_NAME );
   24393             :        // int link ( std::string linkerName = BACKEND_CXX_COMPILER_NAME_WITH_PATH );
   24394             :           int link ( std::string linkerName );
   24395             : 
   24396             :       // DQ (10/14/2010): Removing reference to macros defined in rose_config.h.
   24397             :       // DQ (8/29/2005): Added support for classification of back-end compilers (independent of the name invoked to execute them)
   24398             :       //! function to preform linking!
   24399             :        // int link ( int argc, char** argv, std::string linkerName = CXX_COMPILER_NAME );
   24400             :        // int link ( const std::vector<std::string>& argv, std::string linkerName = BACKEND_CXX_COMPILER_NAME_WITH_PATH );
   24401             :           int link ( const std::vector<std::string>& argv, std::string linkerName );
   24402             : 
   24403             :        // function to generate PDF output file for AST
   24404             :        // void outputPDF();
   24405             : 
   24406             :       //! global concept of verbose level which controls useful output from the compiler (values greater than zero increase output level)
   24407             :           static int p_verbose;
   24408             : 
   24409             :        // DQ (4/4/2020): Adding support for unparse headers feature specific diagnostics.
   24410             :       //! global concept of verbose level which controls useful output from the unparse headers feature (values greater than zero increase output level)
   24411             :           static int p_unparseHeaderFilesDebug;
   24412             : 
   24413             :       //! Save the command line arguments (argc and argv) for the project (these are needed to process transformations)
   24414             :        // static int project_argc;
   24415             :        // static char** project_argv;
   24416             : 
   24417             :        // DQ (9/2/2008): Removed this redundant function
   24418             :        // DQ: Get list of file names in project (generated from the list of SgFile nodes)
   24419             :        // I think this is redundant with the other lists of filenames!
   24420             :        // Rose_STL_Container<std::string> getFileNames() const;
   24421             : 
   24422             :       //! This function generates a list of files resolved to absolute paths (symbolic links should not be resolved).
   24423             :           Rose_STL_Container<std::string> getAbsolutePathFileNames() const;
   24424             : 
   24425             :       //! DQ: Modified to accept a value on the command line (no longer a boolean variable)
   24426             :       //! value of 0 means quiet and higher values output more information, default value
   24427             :       //! is zero (quiet).
   24428             :           static int get_verbose (void);
   24429             :           static void set_verbose (int);
   24430             : 
   24431             :        // DQ (4/4/2020): Added debugging support for feature specific unparsing of header files.
   24432             :           static int get_unparseHeaderFilesDebug (void);
   24433             :           static void set_unparseHeaderFilesDebug (int);
   24434             : 
   24435             :        // DQ: bool values on the SgFile nodes which can be queried on the SgProject
   24436             :        // nodes (must be the same across all SgFile nodes in the project).
   24437             :           bool get_skip_translation_from_edg_ast_to_rose_ast (void) const;
   24438             :           bool get_skip_transformation (void) const;
   24439             :           bool get_skip_unparse (void) const;
   24440             :           bool get_useBackendOnly (void) const;
   24441             : 
   24442             :        // DQ (4/6/2010): Added to support parsing only option.
   24443             :           bool get_exit_after_parser(void) const;
   24444             : 
   24445             :        // DQ (12/28/2010): Added to support skipping compilation in backendCompilesUsingOriginalInputFile()
   24446             :           bool get_skipfinalCompileStep (void) const;
   24447             : 
   24448             :           void set_C_only       (bool value);
   24449             :           bool get_C_only   (void) const;
   24450             : 
   24451             :           bool get_C89_only (void) const;
   24452             :           bool get_C89_gnu_only (void) const;
   24453             :           bool get_C90_only (void) const;
   24454             :           bool get_C90_gnu_only (void) const;
   24455             :           bool get_C99_only (void) const;
   24456             :           bool get_C99_gnu_only (void) const;
   24457             :           bool get_C11_only (void) const;
   24458             :           bool get_C11_gnu_only (void) const;
   24459             :           bool get_C14_only (void) const;
   24460             :           bool get_C14_gnu_only (void) const;
   24461             : 
   24462             :           void set_Cxx_only     (bool value);
   24463             :           bool get_Cxx_only (void) const;
   24464             : 
   24465             :           bool get_Cxx98_only (void) const;
   24466             :           bool get_Cxx98_gnu_only (void) const;
   24467             :           bool get_Cxx03_only (void) const;
   24468             :           bool get_Cxx03_gnu_only (void) const;
   24469             :           bool get_Cxx11_only (void) const;
   24470             :           bool get_Cxx11_gnu_only (void) const;
   24471             :           bool get_Cxx14_only (void) const;
   24472             :           bool get_Cxx14_gnu_only (void) const;
   24473             :           bool get_Cxx17_only (void) const;
   24474             :           bool get_Cxx17_gnu_only (void) const;
   24475             : 
   24476             :           void set_Fortran_only (bool value);
   24477             :           bool get_Fortran_only (void) const;
   24478             : 
   24479             :           bool get_F77_only     (void) const;
   24480             :           bool get_F90_only     (void) const;
   24481             :           bool get_F95_only     (void) const;
   24482             :           bool get_F2003_only   (void) const;
   24483             :           bool get_F2008_only   (void) const;
   24484             :           bool get_F2018_only   (void) const;
   24485             :           bool get_CoArrayFortran_only (void) const;
   24486             : 
   24487             : 
   24488             :           std::list<std::string> get_Java_classpath (void) const;
   24489             :           void set_Java_classpath (std::list<std::string> param);
   24490             :           std::list<std::string> get_Java_sourcepath (void) const;
   24491             :           void set_Java_sourcepath (std::list<std::string> param);
   24492             :           std::string get_Java_destdir (void) const;
   24493             :           void set_Java_destdir (std::string param);
   24494             :           std::string get_Java_source_destdir (void) const;
   24495             :           void set_Java_source_destdir (std::string param);
   24496             : 
   24497             :           void display ( const std::string & label ) const;
   24498             : 
   24499             :           void initialization();
   24500             : 
   24501             :           friend std::ostream & operator<< ( std::ostream & os, const Rose_STL_Container<std::string> & l );
   24502             : 
   24503             : #if ALT_FIXUP_COPY
   24504             :        // DQ (11/7/2007): These need to be called separately (see documentation)
   24505             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
   24506             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
   24507             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
   24508             : #else
   24509             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
   24510             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
   24511             : #endif
   24512             : 
   24513             :           void skipfinalCompileStep(bool value);
   24514             : 
   24515             :           SgStringList & get_includePathList();
   24516             :           const SgStringList & get_includePathList() const;
   24517             :           void set_includePathList(const SgStringList & includePathList);
   24518             : 
   24519             :           SgStringList & get_excludePathList();
   24520             :           const SgStringList & get_excludePathList() const;
   24521             :           void set_excludePathList(const SgStringList & excludePathList);
   24522             : 
   24523             :           SgStringList & get_includeFileList();
   24524             :           const SgStringList & get_includeFileList() const;
   24525             :           void set_includeFileList(const SgStringList & includeFileList);
   24526             : 
   24527             :           SgStringList & get_excludeFileList();
   24528             :           const SgStringList & get_excludeFileList() const;
   24529             :           void set_excludeFileList(const SgStringList & excludeFileList);
   24530             : 
   24531             :        // negara1 (07/29/2011)
   24532             :           std::string findIncludedFile(PreprocessingInfo* preprocessingInfo);
   24533             : 
   24534             :           int get_detect_dangling_pointers(void) const;
   24535             : 
   24536             : #if ROSE_USING_OLD_PROJECT_FILE_LIST_SUPPORT
   24537             : #else
   24538             :        // DQ (1/21/2010): In this case we want to support the previous interface so that we can transition easily.
   24539             :           SgFilePtrList & get_fileList() const;
   24540             :           void set_fileList(SgFilePtrList & fileList);
   24541             : #endif
   24542             : 
   24543             :        // DQ (8/3/2018): Added support for evaluation of options at the project level (which are normally associated with files).
   24544             :           bool get_unparse_tokens (void) const;
   24545             :        // void set_unparse_tokens (bool value);
   24546             : 
   24547             : 
   24548             : 
   24549             : 
   24550             : 
   24551             : // End of memberFunctionString
   24552             : // Start of memberFunctionString
   24553             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   24554             : 
   24555             : 
   24556             :      /* name Persistant Attribute Mechanism
   24557             : 
   24558             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   24559             :          multiple passes. Note that these attributes are persistant in that they are preserved
   24560             :          if the AST is written out to a file and read in from a file.  However, virtual function
   24561             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   24562             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   24563             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   24564             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   24565             :          access is required, however mostly only internal tools use this lower level support).
   24566             : 
   24567             :          \internal This used to be a public data member, but has been changed to be a protected
   24568             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   24569             :          but some of the names and the syntax for calling the interface have changed. The
   24570             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   24571             :       */
   24572             :      /* */
   24573             :      //! Add a new attribute represented by the named string.
   24574             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   24575             :      //! Returns attribute of name 's'.
   24576             :          virtual AstAttribute* getAttribute(std::string s) const override;
   24577             :      //! Replace existing attribute of name 's' with new AstAttribute.
   24578             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   24579             :      /*! \brief This is a wrapper function with the following semantics:
   24580             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   24581             :          otherwise \b updateAttribute(s,a); is called.
   24582             :       */
   24583             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   24584             :      //! Remove attribute of name 's' if present.
   24585             :          virtual void removeAttribute(std::string s) override;
   24586             :      //! Tests if attribute of name 's' is present.
   24587             :          virtual bool attributeExists(std::string s) const override;
   24588             :      //! Returns the number of attributes on this IR node.
   24589             :          virtual int numberOfAttributes() const override;
   24590             : 
   24591             :      /*! \fn AstAttributeMechanism* SgProject::get_attributeMechanism() const;
   24592             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   24593             :                 a pointer to it is returned, else error.
   24594             : 
   24595             :          This is an access function used for getting the interally held pointer to a valid
   24596             :          AstAttributeMechanism. It provides access to lower level functionality of the
   24597             :          AstAttributeMechanism, put is mostly of use to internal tools.
   24598             :       */
   24599             :      /*! \fn void SgProject::set_attributeMechanism(AstAttributeMechanism* a);
   24600             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   24601             : 
   24602             :          This is an access function used for setting the interally held pointer to a valid
   24603             :          AstAttributeMechanism.
   24604             :       */
   24605             :      /* */
   24606             : 
   24607             : 
   24608             : 
   24609             : 
   24610             : // End of memberFunctionString
   24611             : // Start of memberFunctionString
   24612             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   24613             : 
   24614             : // *** COMMON CODE SECTION BEGINS HERE ***
   24615             : 
   24616             :     public:
   24617             : 
   24618             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   24619             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   24620             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   24621             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   24622             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   24623             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   24624             : 
   24625             :       /*! \brief returns a string representing the class name */
   24626             :           virtual std::string class_name() const override;
   24627             : 
   24628             :       /*! \brief returns new style SageIII enum values */
   24629             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   24630             : 
   24631             :       /*! \brief static variant value */
   24632             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   24633             :        // static const VariantT static_variant = V_SgProject;
   24634             :           enum { static_variant = V_SgProject };
   24635             : 
   24636             :        /* the generated cast function */
   24637             :       /*! \brief Casts pointer from base class to derived class */
   24638             :           ROSE_DLL_API friend       SgProject* isSgProject(       SgNode * s );
   24639             : 
   24640             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   24641             :           ROSE_DLL_API friend const SgProject* isSgProject( const SgNode * s );
   24642             : 
   24643             :      // ******************************************
   24644             :      // * Memory Pool / New / Delete
   24645             :      // ******************************************
   24646             : 
   24647             :      public:
   24648             :           /// \private
   24649             :           static const unsigned pool_size; //
   24650             :           /// \private
   24651             :           static std::vector<unsigned char *> pools; //
   24652             :           /// \private
   24653             :           static SgProject * next_node; // 
   24654             : 
   24655             :           /// \private
   24656             :           static unsigned long initializeStorageClassArray(SgProjectStorageClass *); //
   24657             : 
   24658             :           /// \private
   24659             :           static void clearMemoryPool(); //
   24660             :           static void deleteMemoryPool(); //
   24661             : 
   24662             :           /// \private
   24663             :           static void extendMemoryPoolForFileIO(); //
   24664             : 
   24665             :           /// \private
   24666             :           static SgProject * getPointerFromGlobalIndex(unsigned long); //
   24667             :           /// \private
   24668             :           static SgProject * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   24669             : 
   24670             :           /// \private
   24671             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   24672             :           /// \private
   24673             :           static void resetValidFreepointers(); //
   24674             :           /// \private
   24675             :           static unsigned long getNumberOfLastValidPointer(); //
   24676             : 
   24677             : 
   24678             : #if defined(INLINE_FUNCTIONS)
   24679             :       /*! \brief returns pointer to newly allocated IR node */
   24680             :           inline void *operator new (size_t size);
   24681             : #else
   24682             :       /*! \brief returns pointer to newly allocated IR node */
   24683             :           void *operator new (size_t size);
   24684             : #endif
   24685             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   24686             :           void operator delete (void* pointer, size_t size);
   24687             : 
   24688             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   24689           7 :           void operator delete (void* pointer)
   24690             :              {
   24691             :             // This is the generated delete operator...
   24692           7 :                SgProject::operator delete (pointer,sizeof(SgProject));
   24693             :              }
   24694             : 
   24695             :       /*! \brief Returns the total number of IR nodes of this type */
   24696             :           static size_t numberOfNodes();
   24697             : 
   24698             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   24699             :           static size_t memoryUsage();
   24700             : 
   24701             :       // End of scope which started in IR nodes specific code 
   24702             :       /* */
   24703             : 
   24704             :       /* name Internal Functions
   24705             :           \brief Internal functions ... incomplete-documentation
   24706             : 
   24707             :           These functions have been made public as part of the design, but they are suggested for internal use 
   24708             :           or by particularly knowledgeable users for specialized tools or applications.
   24709             : 
   24710             :           \internal We could not make these private because they are required by user for special purposes. And 
   24711             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   24712             :          
   24713             :        */
   24714             : 
   24715             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   24716             :        // overridden in every class by *generated* implementation
   24717             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   24718             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   24719             :        // MS: 06/28/02 container of names of variables or container indices 
   24720             :        // used used in the traversal to access AST successor nodes
   24721             :        // overridden in every class by *generated* implementation
   24722             :       /*! \brief container of names of variables or container indices used used in the traversal
   24723             :           to access AST successor nodes overridden in every class by *generated* implementation */
   24724             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   24725             : 
   24726             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   24727             :        // than all the vector copies. The implementation for these functions is generated for each class.
   24728             :       /*! \brief return number of children in the traversal successor list */
   24729             :           virtual size_t get_numberOfTraversalSuccessors() override;
   24730             :       /*! \brief index-based access to traversal successors by index number */
   24731             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   24732             :       /*! \brief index-based access to traversal successors by child node */
   24733             :           virtual size_t get_childIndex(SgNode *child) override;
   24734             : 
   24735             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   24736             :        // MS: 08/16/2002 method for generating RTI information
   24737             :       /*! \brief return C++ Runtime-Time-Information */
   24738             :           virtual RTIReturnType roseRTI() override;
   24739             : #endif
   24740             :       /* */
   24741             : 
   24742             : 
   24743             : 
   24744             :       /* name Deprecated Functions
   24745             :           \brief Deprecated functions ... incomplete-documentation
   24746             : 
   24747             :           These functions have been deprecated from use.
   24748             :        */
   24749             :       /* */
   24750             : 
   24751             :       /*! returns a C style string (char*) representing the class name */
   24752             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   24753             : 
   24754             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   24755             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   24756             : #if 0
   24757             :       /*! returns old style Sage II enum values */
   24758             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   24759             :       /*! returns old style Sage II enum values */
   24760             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   24761             : #endif
   24762             :       /* */
   24763             : 
   24764             : 
   24765             : 
   24766             : 
   24767             :      public:
   24768             :       /* name Traversal Support Functions
   24769             :           \brief Traversal support functions ... incomplete-documentation
   24770             : 
   24771             :           These functions have been made public as part of the design, but they are suggested for internal use 
   24772             :           or by particularly knowledgable users for specialized tools or applications.
   24773             :        */
   24774             :       /* */
   24775             : 
   24776             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   24777             :        // (inferior to ROSE traversal mechanism, experimental).
   24778             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   24779             :        */
   24780             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   24781             : 
   24782             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   24783             :       /*! \brief support for the classic visitor pattern done in GoF */
   24784             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   24785             : 
   24786             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   24787             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   24788             :        */
   24789             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   24790             : 
   24791             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   24792             :        */
   24793             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   24794             : 
   24795             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   24796             :        // This traversal helps support internal tools that call static member functions.
   24797             :        // note: this function operates on the memory pools.
   24798             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   24799             :        */
   24800             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   24801             :       /* */
   24802             : 
   24803             : 
   24804             :      public:
   24805             :       /* name Memory Allocation Functions
   24806             :           \brief Memory allocations functions ... incomplete-documentation
   24807             : 
   24808             :           These functions have been made public as part of the design, but they are suggested for internal use 
   24809             :           or by particularly knowledgable users for specialized tools or applications.
   24810             :        */
   24811             :       /* */
   24812             : 
   24813             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   24814             : 
   24815             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   24816             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   24817             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   24818             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   24819             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   24820             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   24821             :           being used with the AST File I/O mechanism.
   24822             :        */
   24823             :           virtual bool isInMemoryPool() override;
   24824             : 
   24825             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   24826             : 
   24827             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   24828             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   24829             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   24830             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   24831             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   24832             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   24833             :           being used with the AST File I/O mechanism.
   24834             :        */
   24835             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   24836             : 
   24837             :       // DQ (4/30/2006): Modified to be a const function.
   24838             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   24839             : 
   24840             :           This functions is part of general support for many possible tools to operate 
   24841             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   24842             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   24843             :           less than the set of pointers used by the AST file I/O. This is part of
   24844             :           work implemented by Andreas, and support tools such as the AST graph generation.
   24845             : 
   24846             :           \warning This function can return unexpected data members and thus the 
   24847             :                    order and the number of elements is unpredicable and subject 
   24848             :                    to change.
   24849             : 
   24850             :           \returns STL vector of pairs of SgNode* and strings
   24851             :        */
   24852             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   24853             : 
   24854             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   24855             : 
   24856             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   24857             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   24858             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   24859             : 
   24860             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   24861             :                    and subject to change.
   24862             :        */
   24863             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   24864             : 
   24865             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   24866             : 
   24867             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   24868             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   24869             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   24870             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   24871             : 
   24872             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   24873             : 
   24874             :           \returns long
   24875             :        */
   24876             :           virtual long getChildIndex( SgNode* childNode ) const override;
   24877             : 
   24878             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   24879             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   24880             :       /* \brief Constructor for use by AST File I/O Mechanism
   24881             : 
   24882             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   24883             :           which obtained via fast binary file I/O from disk.
   24884             :        */
   24885             :        // SgProject( SgProjectStorageClass& source );
   24886             : 
   24887             : 
   24888             : 
   24889             : 
   24890             : 
   24891             :  // JH (10/24/2005): methods added to support the ast file IO
   24892             :     private:
   24893             : 
   24894             :       /* name AST Memory Allocation Support Functions
   24895             :           \brief Memory allocations support....
   24896             : 
   24897             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   24898             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   24899             :           and support the AST File I/O Mechanism.
   24900             :        */
   24901             :       /* */
   24902             : 
   24903             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   24904             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   24905             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   24906             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   24907             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   24908             :           a correspinding one in the AST_FILE_IO class!
   24909             :        */
   24910             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   24911             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   24912             :       /* \brief Typedef used for low level memory access.
   24913             :        */
   24914             :        // typedef unsigned char* TestType;
   24915             : 
   24916             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   24917             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   24918             :       /* \brief Typedef used to hold memory addresses as values.
   24919             :        */
   24920             :        // typedef unsigned long  AddressType;
   24921             : 
   24922             : 
   24923             : 
   24924             :        // necessary, to have direct access to the p_freepointer and the private methods !
   24925             :       /*! \brief friend class declaration to support AST File I/O */
   24926             :           friend class AST_FILE_IO;
   24927             : 
   24928             :       /*! \brief friend class declaration to support AST File I/O */
   24929             :           friend class SgProjectStorageClass;
   24930             : 
   24931             :       /*! \brief friend class declaration to support AST File I/O */
   24932             :           friend class AstSpecificDataManagingClass;
   24933             : 
   24934             :       /*! \brief friend class declaration to support AST File I/O */
   24935             :           friend class AstSpecificDataManagingClassStorageClass;
   24936             :     public:
   24937             :       /*! \brief IR node constructor to support AST File I/O */
   24938             :           SgProject( const SgProjectStorageClass& source );
   24939             : 
   24940             :  // private: // JJW hack
   24941             :        /*
   24942             :           name AST Memory Allocation Support Variables
   24943             :           Memory allocations support variables 
   24944             : 
   24945             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   24946             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   24947             :           and support the AST File I/O Mechanism.
   24948             :        */
   24949             :       /* */
   24950             : 
   24951             :     public:
   24952             : 
   24953             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   24954             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   24955             :       // virtual SgNode* addRegExpAttribute();
   24956             :       /*! \brief Support for AST matching using regular expression.
   24957             : 
   24958             :           This support is incomplete and the subject of current research to define 
   24959             :           RegEx trees to support inexact matching.
   24960             :        */
   24961             :           SgProject* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   24962             : 
   24963             : // *** COMMON CODE SECTION ENDS HERE ***
   24964             : 
   24965             : 
   24966             : // End of memberFunctionString
   24967             : // Start of memberFunctionString
   24968             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   24969             : 
   24970             :      // the generated cast function
   24971             :      // friend ROSE_DLL_API SgProject* isSgProject ( SgNode* s );
   24972             : 
   24973             :           typedef SgSupport base_node_type;
   24974             : 
   24975             : 
   24976             : // End of memberFunctionString
   24977             : 
   24978             :      public: 
   24979             :          SgFileList* get_fileList_ptr() const;
   24980             :          void set_fileList_ptr(SgFileList* fileList_ptr);
   24981             : 
   24982             :      public: 
   24983             :          SgStringList get_originalCommandLineArgumentList() const;
   24984             :          void set_originalCommandLineArgumentList(SgStringList originalCommandLineArgumentList);
   24985             : 
   24986             :      public: 
   24987             :          int get_frontendErrorCode() const;
   24988             :          void set_frontendErrorCode(int frontendErrorCode);
   24989             : 
   24990             :      public: 
   24991             :          int get_javacErrorCode() const;
   24992             :          void set_javacErrorCode(int javacErrorCode);
   24993             : 
   24994             :      public: 
   24995             :          int get_ecjErrorCode() const;
   24996             :          void set_ecjErrorCode(int ecjErrorCode);
   24997             : 
   24998             :      public: 
   24999             :          int get_midendErrorCode() const;
   25000             :          void set_midendErrorCode(int midendErrorCode);
   25001             : 
   25002             :      public: 
   25003             :          int get_backendErrorCode() const;
   25004             :          void set_backendErrorCode(int backendErrorCode);
   25005             : 
   25006             :      public: 
   25007             :          bool get_keep_going() const;
   25008             :          void set_keep_going(bool keep_going);
   25009             : 
   25010             :      public: 
   25011             :          bool get_unparser__clobber_input_file() const;
   25012             :          void set_unparser__clobber_input_file(bool unparser__clobber_input_file);
   25013             : 
   25014             :      public: 
   25015             :          std::string get_outputFileName() const;
   25016             :          void set_outputFileName(std::string outputFileName);
   25017             : 
   25018             :      public: 
   25019             :          const SgStringList&  get_sourceFileNameList() const;
   25020             :          SgStringList& get_sourceFileNameList(); 
   25021             : 
   25022             :      public: 
   25023             :          const SgStringList&  get_objectFileNameList() const;
   25024             :          SgStringList& get_objectFileNameList(); 
   25025             : 
   25026             :      public: 
   25027             :          const SgStringList&  get_libraryFileList() const;
   25028             :          SgStringList& get_libraryFileList(); 
   25029             : 
   25030             :      public: 
   25031             :          const SgStringList&  get_librarySpecifierList() const;
   25032             :          SgStringList& get_librarySpecifierList(); 
   25033             : 
   25034             :      public: 
   25035             :          const SgStringList&  get_libraryDirectorySpecifierList() const;
   25036             :          SgStringList& get_libraryDirectorySpecifierList(); 
   25037             : 
   25038             :      public: 
   25039             :          const SgStringList&  get_includeDirectorySpecifierList() const;
   25040             :          SgStringList& get_includeDirectorySpecifierList(); 
   25041             : 
   25042             :      public: 
   25043             :          const SgStringList&  get_macroSpecifierList() const;
   25044             :          SgStringList& get_macroSpecifierList(); 
   25045             : 
   25046             :      public: 
   25047             :          const SgStringList&  get_preincludeFileList() const;
   25048             :          SgStringList& get_preincludeFileList(); 
   25049             : 
   25050             :      public: 
   25051             :          const SgStringList&  get_preincludeDirectoryList() const;
   25052             :          SgStringList& get_preincludeDirectoryList(); 
   25053             : 
   25054             :      public: 
   25055             :          bool get_compileOnly() const;
   25056             :          void set_compileOnly(bool compileOnly);
   25057             : 
   25058             :      public: 
   25059             :          bool get_wave() const;
   25060             :          void set_wave(bool wave);
   25061             : 
   25062             :      public: 
   25063             :          bool get_prelink() const;
   25064             :          void set_prelink(bool prelink);
   25065             : 
   25066             :      public: 
   25067             :          SgProject::template_instantiation_enum get_template_instantiation_mode() const;
   25068             :          void set_template_instantiation_mode(SgProject::template_instantiation_enum template_instantiation_mode);
   25069             : 
   25070             :      public: 
   25071             :          bool get_ast_merge() const;
   25072             :          void set_ast_merge(bool ast_merge);
   25073             : 
   25074             :      public: 
   25075             :          std::string get_projectSpecificDatabaseFile() const;
   25076             :          void set_projectSpecificDatabaseFile(std::string projectSpecificDatabaseFile);
   25077             : 
   25078             :      public: 
   25079             :          bool get_C_PreprocessorOnly() const;
   25080             :          void set_C_PreprocessorOnly(bool C_PreprocessorOnly);
   25081             : 
   25082             :      public: 
   25083             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   25084             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   25085             : 
   25086             :      public: 
   25087             :          std::string get_compilationPerformanceFile() const;
   25088             :          void set_compilationPerformanceFile(std::string compilationPerformanceFile);
   25089             : 
   25090             : 
   25091             : 
   25092             : 
   25093             : 
   25094             :      public: 
   25095             :          bool get_binary_only() const;
   25096             :          void set_binary_only(bool binary_only);
   25097             : 
   25098             :      public: 
   25099             :          SgDirectoryList* get_directoryList() const;
   25100             :          void set_directoryList(SgDirectoryList* directoryList);
   25101             : 
   25102             : 
   25103             : 
   25104             : 
   25105             : 
   25106             : 
   25107             : 
   25108             : 
   25109             : 
   25110             :      public: 
   25111             :          std::list<std::string> get_Fortran_ofp_jvm_options() const;
   25112             :          void set_Fortran_ofp_jvm_options(std::list<std::string> Fortran_ofp_jvm_options);
   25113             : 
   25114             :      public: 
   25115             :          bool get_openmp_linking() const;
   25116             :          void set_openmp_linking(bool openmp_linking);
   25117             : 
   25118             :      public: 
   25119             :          std::list<std::string> get_Java_ecj_jvm_options() const;
   25120             :          void set_Java_ecj_jvm_options(std::list<std::string> Java_ecj_jvm_options);
   25121             : 
   25122             :      public: 
   25123             :          bool get_Java_batch_mode() const;
   25124             :          void set_Java_batch_mode(bool Java_batch_mode);
   25125             : 
   25126             : 
   25127             : 
   25128             : 
   25129             : 
   25130             :      public: 
   25131             :          bool get_addCppDirectivesToAST() const;
   25132             :          void set_addCppDirectivesToAST(bool addCppDirectivesToAST);
   25133             : 
   25134             :      public: 
   25135             :          std::map<std::string, std::set<PreprocessingInfo*> > get_includingPreprocessingInfosMap() const;
   25136             :          void set_includingPreprocessingInfosMap(std::map<std::string, std::set<PreprocessingInfo*> > includingPreprocessingInfosMap);
   25137             : 
   25138             :      public: 
   25139             :          std::list<std::string> get_quotedIncludesSearchPaths() const;
   25140             :          void set_quotedIncludesSearchPaths(std::list<std::string> quotedIncludesSearchPaths);
   25141             : 
   25142             :      public: 
   25143             :          std::list<std::string> get_bracketedIncludesSearchPaths() const;
   25144             :          void set_bracketedIncludesSearchPaths(std::list<std::string> bracketedIncludesSearchPaths);
   25145             : 
   25146             :      public: 
   25147             :          std::string get_unparseHeaderFilesRootFolder() const;
   25148             :          void set_unparseHeaderFilesRootFolder(std::string unparseHeaderFilesRootFolder);
   25149             : 
   25150             :      public: 
   25151             :          bool get_frontendConstantFolding() const;
   25152             :          void set_frontendConstantFolding(bool frontendConstantFolding);
   25153             : 
   25154             :      public: 
   25155             :          SgGlobal* get_globalScopeAcrossFiles() const;
   25156             :          void set_globalScopeAcrossFiles(SgGlobal* globalScopeAcrossFiles);
   25157             : 
   25158             :      public: 
   25159             :          bool get_unparse_in_same_directory_as_input_file() const;
   25160             :          void set_unparse_in_same_directory_as_input_file(bool unparse_in_same_directory_as_input_file);
   25161             : 
   25162             :      public: 
   25163             :          bool get_stop_after_compilation_do_not_assemble_file() const;
   25164             :          void set_stop_after_compilation_do_not_assemble_file(bool stop_after_compilation_do_not_assemble_file);
   25165             : 
   25166             :      public: 
   25167             :          std::string get_gnuOptionForUndefinedSymbol() const;
   25168             :          void set_gnuOptionForUndefinedSymbol(std::string gnuOptionForUndefinedSymbol);
   25169             : 
   25170             :      public: 
   25171             :          bool get_mode_32_bit() const;
   25172             :          void set_mode_32_bit(bool mode_32_bit);
   25173             : 
   25174             :      public: 
   25175             :          bool get_noclobber_output_file() const;
   25176             :          void set_noclobber_output_file(bool noclobber_output_file);
   25177             : 
   25178             :      public: 
   25179             :          bool get_noclobber_if_different_output_file() const;
   25180             :          void set_noclobber_if_different_output_file(bool noclobber_if_different_output_file);
   25181             : 
   25182             :      public: 
   25183             :          bool get_suppressConstantFoldingPostProcessing() const;
   25184             :          void set_suppressConstantFoldingPostProcessing(bool suppressConstantFoldingPostProcessing);
   25185             : 
   25186             :      public: 
   25187             :          bool get_appendPID() const;
   25188             :          void set_appendPID(bool appendPID);
   25189             : 
   25190             :      public: 
   25191             :          bool get_reportOnHeaderFileUnparsing() const;
   25192             :          void set_reportOnHeaderFileUnparsing(bool reportOnHeaderFileUnparsing);
   25193             : 
   25194             :      public: 
   25195             :          std::string get_applicationRootDirectory() const;
   25196             :          void set_applicationRootDirectory(std::string applicationRootDirectory);
   25197             : 
   25198             :      public: 
   25199             :          bool get_usingApplicationRootDirectory() const;
   25200             :          void set_usingApplicationRootDirectory(bool usingApplicationRootDirectory);
   25201             : 
   25202             :      public: 
   25203             :          bool get_usingDeferredTransformations() const;
   25204             :          void set_usingDeferredTransformations(bool usingDeferredTransformations);
   25205             : 
   25206             :      public: 
   25207             :          std::string get_astfile_out() const;
   25208             :          void set_astfile_out(std::string astfile_out);
   25209             : 
   25210             :      public: 
   25211             :          std::list<std::string> get_astfiles_in() const;
   25212             :          void set_astfiles_in(std::list<std::string> astfiles_in);
   25213             : 
   25214             :      public: 
   25215             :          const SgStringList&  get_extraIncludeDirectorySpecifierBeforeList() const;
   25216             :          SgStringList& get_extraIncludeDirectorySpecifierBeforeList(); 
   25217             : 
   25218             :      public: 
   25219             :          const SgStringList&  get_extraIncludeDirectorySpecifierAfterList() const;
   25220             :          SgStringList& get_extraIncludeDirectorySpecifierAfterList(); 
   25221             : 
   25222             : 
   25223             :      public: 
   25224             :          virtual ~SgProject();
   25225             : 
   25226             :     protected:
   25227             : // Start of memberFunctionString
   25228             : SgFileList* p_fileList_ptr;
   25229             :           
   25230             : // End of memberFunctionString
   25231             : // Start of memberFunctionString
   25232             : SgStringList p_originalCommandLineArgumentList;
   25233             :           
   25234             : // End of memberFunctionString
   25235             : // Start of memberFunctionString
   25236             : int p_frontendErrorCode;
   25237             :           
   25238             : // End of memberFunctionString
   25239             : // Start of memberFunctionString
   25240             : int p_javacErrorCode;
   25241             :           
   25242             : // End of memberFunctionString
   25243             : // Start of memberFunctionString
   25244             : int p_ecjErrorCode;
   25245             :           
   25246             : // End of memberFunctionString
   25247             : // Start of memberFunctionString
   25248             : int p_midendErrorCode;
   25249             :           
   25250             : // End of memberFunctionString
   25251             : // Start of memberFunctionString
   25252             : int p_backendErrorCode;
   25253             :           
   25254             : // End of memberFunctionString
   25255             : // Start of memberFunctionString
   25256             : bool p_keep_going;
   25257             :           
   25258             : // End of memberFunctionString
   25259             : // Start of memberFunctionString
   25260             : bool p_unparser__clobber_input_file;
   25261             :           
   25262             : // End of memberFunctionString
   25263             : // Start of memberFunctionString
   25264             : std::string p_outputFileName;
   25265             :           
   25266             : // End of memberFunctionString
   25267             : // Start of memberFunctionString
   25268             : SgStringList p_sourceFileNameList;
   25269             :           
   25270             : // End of memberFunctionString
   25271             : // Start of memberFunctionString
   25272             : SgStringList p_objectFileNameList;
   25273             :           
   25274             : // End of memberFunctionString
   25275             : // Start of memberFunctionString
   25276             : SgStringList p_libraryFileList;
   25277             :           
   25278             : // End of memberFunctionString
   25279             : // Start of memberFunctionString
   25280             : SgStringList p_librarySpecifierList;
   25281             :           
   25282             : // End of memberFunctionString
   25283             : // Start of memberFunctionString
   25284             : SgStringList p_libraryDirectorySpecifierList;
   25285             :           
   25286             : // End of memberFunctionString
   25287             : // Start of memberFunctionString
   25288             : SgStringList p_includeDirectorySpecifierList;
   25289             :           
   25290             : // End of memberFunctionString
   25291             : // Start of memberFunctionString
   25292             : SgStringList p_macroSpecifierList;
   25293             :           
   25294             : // End of memberFunctionString
   25295             : // Start of memberFunctionString
   25296             : SgStringList p_preincludeFileList;
   25297             :           
   25298             : // End of memberFunctionString
   25299             : // Start of memberFunctionString
   25300             : SgStringList p_preincludeDirectoryList;
   25301             :           
   25302             : // End of memberFunctionString
   25303             : // Start of memberFunctionString
   25304             : bool p_compileOnly;
   25305             :           
   25306             : // End of memberFunctionString
   25307             : // Start of memberFunctionString
   25308             : bool p_wave;
   25309             :           
   25310             : // End of memberFunctionString
   25311             : // Start of memberFunctionString
   25312             : bool p_prelink;
   25313             :           
   25314             : // End of memberFunctionString
   25315             : // Start of memberFunctionString
   25316             : SgProject::template_instantiation_enum p_template_instantiation_mode;
   25317             :           
   25318             : // End of memberFunctionString
   25319             : // Start of memberFunctionString
   25320             : bool p_ast_merge;
   25321             :           
   25322             : // End of memberFunctionString
   25323             : // Start of memberFunctionString
   25324             : std::string p_projectSpecificDatabaseFile;
   25325             :           
   25326             : // End of memberFunctionString
   25327             : // Start of memberFunctionString
   25328             : bool p_C_PreprocessorOnly;
   25329             :           
   25330             : // End of memberFunctionString
   25331             : // Start of memberFunctionString
   25332             : AstAttributeMechanism* p_attributeMechanism;
   25333             :           
   25334             : // End of memberFunctionString
   25335             : // Start of memberFunctionString
   25336             : std::string p_compilationPerformanceFile;
   25337             :           
   25338             : // End of memberFunctionString
   25339             : // Start of memberFunctionString
   25340             : SgStringList p_includePathList;
   25341             :           
   25342             : // End of memberFunctionString
   25343             : // Start of memberFunctionString
   25344             : SgStringList p_excludePathList;
   25345             :           
   25346             : // End of memberFunctionString
   25347             : // Start of memberFunctionString
   25348             : SgStringList p_includeFileList;
   25349             :           
   25350             : // End of memberFunctionString
   25351             : // Start of memberFunctionString
   25352             : SgStringList p_excludeFileList;
   25353             :           
   25354             : // End of memberFunctionString
   25355             : // Start of memberFunctionString
   25356             : bool p_binary_only;
   25357             :           
   25358             : // End of memberFunctionString
   25359             : // Start of memberFunctionString
   25360             : SgDirectoryList* p_directoryList;
   25361             :           
   25362             : // End of memberFunctionString
   25363             : // Start of memberFunctionString
   25364             : bool p_C_only;
   25365             :           
   25366             : // End of memberFunctionString
   25367             : // Start of memberFunctionString
   25368             : bool p_Cxx_only;
   25369             :           
   25370             : // End of memberFunctionString
   25371             : // Start of memberFunctionString
   25372             : bool p_C11_only;
   25373             :           
   25374             : // End of memberFunctionString
   25375             : // Start of memberFunctionString
   25376             : bool p_Cxx0x_only;
   25377             :           
   25378             : // End of memberFunctionString
   25379             : // Start of memberFunctionString
   25380             : bool p_Cxx11_only;
   25381             :           
   25382             : // End of memberFunctionString
   25383             : // Start of memberFunctionString
   25384             : bool p_C14_only;
   25385             :           
   25386             : // End of memberFunctionString
   25387             : // Start of memberFunctionString
   25388             : bool p_Cxx14_only;
   25389             :           
   25390             : // End of memberFunctionString
   25391             : // Start of memberFunctionString
   25392             : bool p_Fortran_only;
   25393             :           
   25394             : // End of memberFunctionString
   25395             : // Start of memberFunctionString
   25396             : std::list<std::string> p_Fortran_ofp_jvm_options;
   25397             :           
   25398             : // End of memberFunctionString
   25399             : // Start of memberFunctionString
   25400             : bool p_openmp_linking;
   25401             :           
   25402             : // End of memberFunctionString
   25403             : // Start of memberFunctionString
   25404             : std::list<std::string> p_Java_ecj_jvm_options;
   25405             :           
   25406             : // End of memberFunctionString
   25407             : // Start of memberFunctionString
   25408             : bool p_Java_batch_mode;
   25409             :           
   25410             : // End of memberFunctionString
   25411             : // Start of memberFunctionString
   25412             : std::list<std::string> p_Java_classpath;
   25413             :           
   25414             : // End of memberFunctionString
   25415             : // Start of memberFunctionString
   25416             : std::list<std::string> p_Java_sourcepath;
   25417             :           
   25418             : // End of memberFunctionString
   25419             : // Start of memberFunctionString
   25420             : std::string p_Java_destdir;
   25421             :           
   25422             : // End of memberFunctionString
   25423             : // Start of memberFunctionString
   25424             : std::string p_Java_source_destdir;
   25425             :           
   25426             : // End of memberFunctionString
   25427             : // Start of memberFunctionString
   25428             : bool p_addCppDirectivesToAST;
   25429             :           
   25430             : // End of memberFunctionString
   25431             : // Start of memberFunctionString
   25432             : std::map<std::string, std::set<PreprocessingInfo*> > p_includingPreprocessingInfosMap;
   25433             :           
   25434             : // End of memberFunctionString
   25435             : // Start of memberFunctionString
   25436             : std::list<std::string> p_quotedIncludesSearchPaths;
   25437             :           
   25438             : // End of memberFunctionString
   25439             : // Start of memberFunctionString
   25440             : std::list<std::string> p_bracketedIncludesSearchPaths;
   25441             :           
   25442             : // End of memberFunctionString
   25443             : // Start of memberFunctionString
   25444             : std::string p_unparseHeaderFilesRootFolder;
   25445             :           
   25446             : // End of memberFunctionString
   25447             : // Start of memberFunctionString
   25448             : bool p_frontendConstantFolding;
   25449             :           
   25450             : // End of memberFunctionString
   25451             : // Start of memberFunctionString
   25452             : SgGlobal* p_globalScopeAcrossFiles;
   25453             :           
   25454             : // End of memberFunctionString
   25455             : // Start of memberFunctionString
   25456             : bool p_unparse_in_same_directory_as_input_file;
   25457             :           
   25458             : // End of memberFunctionString
   25459             : // Start of memberFunctionString
   25460             : bool p_stop_after_compilation_do_not_assemble_file;
   25461             :           
   25462             : // End of memberFunctionString
   25463             : // Start of memberFunctionString
   25464             : std::string p_gnuOptionForUndefinedSymbol;
   25465             :           
   25466             : // End of memberFunctionString
   25467             : // Start of memberFunctionString
   25468             : bool p_mode_32_bit;
   25469             :           
   25470             : // End of memberFunctionString
   25471             : // Start of memberFunctionString
   25472             : bool p_noclobber_output_file;
   25473             :           
   25474             : // End of memberFunctionString
   25475             : // Start of memberFunctionString
   25476             : bool p_noclobber_if_different_output_file;
   25477             :           
   25478             : // End of memberFunctionString
   25479             : // Start of memberFunctionString
   25480             : bool p_suppressConstantFoldingPostProcessing;
   25481             :           
   25482             : // End of memberFunctionString
   25483             : // Start of memberFunctionString
   25484             : bool p_appendPID;
   25485             :           
   25486             : // End of memberFunctionString
   25487             : // Start of memberFunctionString
   25488             : bool p_reportOnHeaderFileUnparsing;
   25489             :           
   25490             : // End of memberFunctionString
   25491             : // Start of memberFunctionString
   25492             : std::string p_applicationRootDirectory;
   25493             :           
   25494             : // End of memberFunctionString
   25495             : // Start of memberFunctionString
   25496             : bool p_usingApplicationRootDirectory;
   25497             :           
   25498             : // End of memberFunctionString
   25499             : // Start of memberFunctionString
   25500             : bool p_usingDeferredTransformations;
   25501             :           
   25502             : // End of memberFunctionString
   25503             : // Start of memberFunctionString
   25504             : std::string p_astfile_out;
   25505             :           
   25506             : // End of memberFunctionString
   25507             : // Start of memberFunctionString
   25508             : std::list<std::string> p_astfiles_in;
   25509             :           
   25510             : // End of memberFunctionString
   25511             : // Start of memberFunctionString
   25512             : SgStringList p_extraIncludeDirectorySpecifierBeforeList;
   25513             :           
   25514             : // End of memberFunctionString
   25515             : // Start of memberFunctionString
   25516             : SgStringList p_extraIncludeDirectorySpecifierAfterList;
   25517             :           
   25518             : // End of memberFunctionString
   25519             : 
   25520             :     friend struct Rose::Traits::generated::describe_node_t<SgProject>;
   25521             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgFileList*,&SgProject::p_fileList_ptr>;
   25522             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_originalCommandLineArgumentList>;
   25523             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, int,&SgProject::p_frontendErrorCode>;
   25524             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, int,&SgProject::p_javacErrorCode>;
   25525             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, int,&SgProject::p_ecjErrorCode>;
   25526             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, int,&SgProject::p_midendErrorCode>;
   25527             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, int,&SgProject::p_backendErrorCode>;
   25528             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_keep_going>;
   25529             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_unparser__clobber_input_file>;
   25530             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_outputFileName>;
   25531             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_sourceFileNameList>;
   25532             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_objectFileNameList>;
   25533             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_libraryFileList>;
   25534             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_librarySpecifierList>;
   25535             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_libraryDirectorySpecifierList>;
   25536             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_includeDirectorySpecifierList>;
   25537             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_macroSpecifierList>;
   25538             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_preincludeFileList>;
   25539             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_preincludeDirectoryList>;
   25540             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_compileOnly>;
   25541             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_wave>;
   25542             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_prelink>;
   25543             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgProject::template_instantiation_enum,&SgProject::p_template_instantiation_mode>;
   25544             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_ast_merge>;
   25545             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_projectSpecificDatabaseFile>;
   25546             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_C_PreprocessorOnly>;
   25547             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, AstAttributeMechanism*,&SgProject::p_attributeMechanism>;
   25548             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_compilationPerformanceFile>;
   25549             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_includePathList>;
   25550             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_excludePathList>;
   25551             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_includeFileList>;
   25552             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_excludeFileList>;
   25553             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_binary_only>;
   25554             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgDirectoryList*,&SgProject::p_directoryList>;
   25555             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_C_only>;
   25556             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_Cxx_only>;
   25557             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_C11_only>;
   25558             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_Cxx0x_only>;
   25559             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_Cxx11_only>;
   25560             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_C14_only>;
   25561             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_Cxx14_only>;
   25562             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_Fortran_only>;
   25563             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::list<std::string>,&SgProject::p_Fortran_ofp_jvm_options>;
   25564             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_openmp_linking>;
   25565             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::list<std::string>,&SgProject::p_Java_ecj_jvm_options>;
   25566             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_Java_batch_mode>;
   25567             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::list<std::string>,&SgProject::p_Java_classpath>;
   25568             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::list<std::string>,&SgProject::p_Java_sourcepath>;
   25569             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_Java_destdir>;
   25570             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_Java_source_destdir>;
   25571             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_addCppDirectivesToAST>;
   25572             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::map<std::string, std::set<PreprocessingInfo*> >,&SgProject::p_includingPreprocessingInfosMap>;
   25573             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::list<std::string>,&SgProject::p_quotedIncludesSearchPaths>;
   25574             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::list<std::string>,&SgProject::p_bracketedIncludesSearchPaths>;
   25575             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_unparseHeaderFilesRootFolder>;
   25576             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_frontendConstantFolding>;
   25577             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgGlobal*,&SgProject::p_globalScopeAcrossFiles>;
   25578             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_unparse_in_same_directory_as_input_file>;
   25579             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_stop_after_compilation_do_not_assemble_file>;
   25580             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_gnuOptionForUndefinedSymbol>;
   25581             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_mode_32_bit>;
   25582             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_noclobber_output_file>;
   25583             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_noclobber_if_different_output_file>;
   25584             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_suppressConstantFoldingPostProcessing>;
   25585             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_appendPID>;
   25586             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_reportOnHeaderFileUnparsing>;
   25587             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_applicationRootDirectory>;
   25588             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_usingApplicationRootDirectory>;
   25589             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, bool,&SgProject::p_usingDeferredTransformations>;
   25590             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::string,&SgProject::p_astfile_out>;
   25591             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, std::list<std::string>,&SgProject::p_astfiles_in>;
   25592             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_extraIncludeDirectorySpecifierBeforeList>;
   25593             :     friend struct Rose::Traits::generated::describe_field_t<SgProject, SgStringList,&SgProject::p_extraIncludeDirectorySpecifierAfterList>;
   25594             : 
   25595             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   25596             : 
   25597             : 
   25598             :    };
   25599             : #endif
   25600             : 
   25601             : // postdeclarations for SgProject
   25602             : 
   25603             : /* #line 25604 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   25604             : 
   25605             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   25606             : 
   25607             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   25608             : 
   25609             : 
   25610             : /* #line 25611 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   25611             : 
   25612             : 
   25613             : 
   25614             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   25615             : 
   25616             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   25617             : //      This code is automatically generated for each 
   25618             : //      terminal and non-terminal within the defined 
   25619             : //      grammar.  There is a simple way to change the 
   25620             : //      code to fix bugs etc.  See the ROSE README file
   25621             : //      for directions.
   25622             : 
   25623             : // tps: (02/22/2010): Adding DLL export requirements
   25624             : #include "rosedll.h"
   25625             : 
   25626             : // predeclarations for SgOptions
   25627             : 
   25628             : /* #line 25629 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   25629             : 
   25630             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   25631             : 
   25632             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   25633             : 
   25634             : #if 1
   25635             : // Class Definition for SgOptions
   25636             : class ROSE_DLL_API SgOptions  : public SgSupport
   25637             :    {
   25638             :      public:
   25639             : 
   25640             : 
   25641             : /* #line 25642 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   25642             : 
   25643             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   25644             : // Start of memberFunctionString
   25645             : /* #line 6943 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   25646             : 
   25647             :   // In general we avoid the definition of member function within the class declaration!
   25648             :   // This is a minor divergence upon this policy.
   25649             : 
   25650             :      friend class Sg_Options& Sg_options();
   25651             :      public:
   25652             :           inline std::ostream& default_output()      { return *p_default_output;}
   25653             :           inline void set_default_output(std::ostream& os){ p_default_output = &os;}
   25654             : 
   25655             :           inline std::ostream& debug_output()        { return *p_debug_output;}
   25656             :           inline void set_debug_output(std::ostream& os)  { p_debug_output = &os;}
   25657             : 
   25658             :           inline std::ostream& error_output()        { return *p_error_output;}
   25659             :           inline void set_error_output(std::ostream& os)  { p_error_output = &os;}
   25660             : 
   25661             :           inline std::ostream& logging_output()      { return *p_logging_output;}
   25662             :           inline void set_logging_output(std::ostream& os){ p_logging_output = &os;}
   25663             : 
   25664             :           inline int debug_level()         {return p_debug_level;}
   25665             :           inline void set_debug_level(int l) { p_debug_level = l; }
   25666             : 
   25667             :           inline int logging_level() {return p_logging_level;}
   25668             :           inline void set_logging(std::ostream& log_file, int level)
   25669             :              { p_logging_level = level; p_logging_output = &log_file; }
   25670             : #if 0
   25671             :   // We need a option to permit the generated constructors to be protected or private
   25672             :      private:
   25673             :           Sg_Options(); /* to stop anyone but Sg_options() instantiating it */
   25674             : #endif
   25675             : 
   25676             : 
   25677             : 
   25678             : // End of memberFunctionString
   25679             : // Start of memberFunctionString
   25680             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   25681             : 
   25682             : // *** COMMON CODE SECTION BEGINS HERE ***
   25683             : 
   25684             :     public:
   25685             : 
   25686             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   25687             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   25688             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   25689             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   25690             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   25691             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   25692             : 
   25693             :       /*! \brief returns a string representing the class name */
   25694             :           virtual std::string class_name() const override;
   25695             : 
   25696             :       /*! \brief returns new style SageIII enum values */
   25697             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   25698             : 
   25699             :       /*! \brief static variant value */
   25700             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   25701             :        // static const VariantT static_variant = V_SgOptions;
   25702             :           enum { static_variant = V_SgOptions };
   25703             : 
   25704             :        /* the generated cast function */
   25705             :       /*! \brief Casts pointer from base class to derived class */
   25706             :           ROSE_DLL_API friend       SgOptions* isSgOptions(       SgNode * s );
   25707             : 
   25708             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   25709             :           ROSE_DLL_API friend const SgOptions* isSgOptions( const SgNode * s );
   25710             : 
   25711             :      // ******************************************
   25712             :      // * Memory Pool / New / Delete
   25713             :      // ******************************************
   25714             : 
   25715             :      public:
   25716             :           /// \private
   25717             :           static const unsigned pool_size; //
   25718             :           /// \private
   25719             :           static std::vector<unsigned char *> pools; //
   25720             :           /// \private
   25721             :           static SgOptions * next_node; // 
   25722             : 
   25723             :           /// \private
   25724             :           static unsigned long initializeStorageClassArray(SgOptionsStorageClass *); //
   25725             : 
   25726             :           /// \private
   25727             :           static void clearMemoryPool(); //
   25728             :           static void deleteMemoryPool(); //
   25729             : 
   25730             :           /// \private
   25731             :           static void extendMemoryPoolForFileIO(); //
   25732             : 
   25733             :           /// \private
   25734             :           static SgOptions * getPointerFromGlobalIndex(unsigned long); //
   25735             :           /// \private
   25736             :           static SgOptions * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   25737             : 
   25738             :           /// \private
   25739             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   25740             :           /// \private
   25741             :           static void resetValidFreepointers(); //
   25742             :           /// \private
   25743             :           static unsigned long getNumberOfLastValidPointer(); //
   25744             : 
   25745             : 
   25746             : #if defined(INLINE_FUNCTIONS)
   25747             :       /*! \brief returns pointer to newly allocated IR node */
   25748             :           inline void *operator new (size_t size);
   25749             : #else
   25750             :       /*! \brief returns pointer to newly allocated IR node */
   25751             :           void *operator new (size_t size);
   25752             : #endif
   25753             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   25754             :           void operator delete (void* pointer, size_t size);
   25755             : 
   25756             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   25757           0 :           void operator delete (void* pointer)
   25758             :              {
   25759             :             // This is the generated delete operator...
   25760           0 :                SgOptions::operator delete (pointer,sizeof(SgOptions));
   25761             :              }
   25762             : 
   25763             :       /*! \brief Returns the total number of IR nodes of this type */
   25764             :           static size_t numberOfNodes();
   25765             : 
   25766             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   25767             :           static size_t memoryUsage();
   25768             : 
   25769             :       // End of scope which started in IR nodes specific code 
   25770             :       /* */
   25771             : 
   25772             :       /* name Internal Functions
   25773             :           \brief Internal functions ... incomplete-documentation
   25774             : 
   25775             :           These functions have been made public as part of the design, but they are suggested for internal use 
   25776             :           or by particularly knowledgeable users for specialized tools or applications.
   25777             : 
   25778             :           \internal We could not make these private because they are required by user for special purposes. And 
   25779             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   25780             :          
   25781             :        */
   25782             : 
   25783             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   25784             :        // overridden in every class by *generated* implementation
   25785             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   25786             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   25787             :        // MS: 06/28/02 container of names of variables or container indices 
   25788             :        // used used in the traversal to access AST successor nodes
   25789             :        // overridden in every class by *generated* implementation
   25790             :       /*! \brief container of names of variables or container indices used used in the traversal
   25791             :           to access AST successor nodes overridden in every class by *generated* implementation */
   25792             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   25793             : 
   25794             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   25795             :        // than all the vector copies. The implementation for these functions is generated for each class.
   25796             :       /*! \brief return number of children in the traversal successor list */
   25797             :           virtual size_t get_numberOfTraversalSuccessors() override;
   25798             :       /*! \brief index-based access to traversal successors by index number */
   25799             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   25800             :       /*! \brief index-based access to traversal successors by child node */
   25801             :           virtual size_t get_childIndex(SgNode *child) override;
   25802             : 
   25803             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   25804             :        // MS: 08/16/2002 method for generating RTI information
   25805             :       /*! \brief return C++ Runtime-Time-Information */
   25806             :           virtual RTIReturnType roseRTI() override;
   25807             : #endif
   25808             :       /* */
   25809             : 
   25810             : 
   25811             : 
   25812             :       /* name Deprecated Functions
   25813             :           \brief Deprecated functions ... incomplete-documentation
   25814             : 
   25815             :           These functions have been deprecated from use.
   25816             :        */
   25817             :       /* */
   25818             : 
   25819             :       /*! returns a C style string (char*) representing the class name */
   25820             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   25821             : 
   25822             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   25823             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   25824             : #if 0
   25825             :       /*! returns old style Sage II enum values */
   25826             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   25827             :       /*! returns old style Sage II enum values */
   25828             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   25829             : #endif
   25830             :       /* */
   25831             : 
   25832             : 
   25833             : 
   25834             : 
   25835             :      public:
   25836             :       /* name Traversal Support Functions
   25837             :           \brief Traversal support functions ... incomplete-documentation
   25838             : 
   25839             :           These functions have been made public as part of the design, but they are suggested for internal use 
   25840             :           or by particularly knowledgable users for specialized tools or applications.
   25841             :        */
   25842             :       /* */
   25843             : 
   25844             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   25845             :        // (inferior to ROSE traversal mechanism, experimental).
   25846             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   25847             :        */
   25848             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   25849             : 
   25850             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   25851             :       /*! \brief support for the classic visitor pattern done in GoF */
   25852             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   25853             : 
   25854             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   25855             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   25856             :        */
   25857             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   25858             : 
   25859             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   25860             :        */
   25861             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   25862             : 
   25863             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   25864             :        // This traversal helps support internal tools that call static member functions.
   25865             :        // note: this function operates on the memory pools.
   25866             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   25867             :        */
   25868             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   25869             :       /* */
   25870             : 
   25871             : 
   25872             :      public:
   25873             :       /* name Memory Allocation Functions
   25874             :           \brief Memory allocations functions ... incomplete-documentation
   25875             : 
   25876             :           These functions have been made public as part of the design, but they are suggested for internal use 
   25877             :           or by particularly knowledgable users for specialized tools or applications.
   25878             :        */
   25879             :       /* */
   25880             : 
   25881             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   25882             : 
   25883             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   25884             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   25885             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   25886             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   25887             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   25888             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   25889             :           being used with the AST File I/O mechanism.
   25890             :        */
   25891             :           virtual bool isInMemoryPool() override;
   25892             : 
   25893             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   25894             : 
   25895             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   25896             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   25897             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   25898             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   25899             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   25900             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   25901             :           being used with the AST File I/O mechanism.
   25902             :        */
   25903             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   25904             : 
   25905             :       // DQ (4/30/2006): Modified to be a const function.
   25906             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   25907             : 
   25908             :           This functions is part of general support for many possible tools to operate 
   25909             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   25910             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   25911             :           less than the set of pointers used by the AST file I/O. This is part of
   25912             :           work implemented by Andreas, and support tools such as the AST graph generation.
   25913             : 
   25914             :           \warning This function can return unexpected data members and thus the 
   25915             :                    order and the number of elements is unpredicable and subject 
   25916             :                    to change.
   25917             : 
   25918             :           \returns STL vector of pairs of SgNode* and strings
   25919             :        */
   25920             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   25921             : 
   25922             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   25923             : 
   25924             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   25925             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   25926             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   25927             : 
   25928             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   25929             :                    and subject to change.
   25930             :        */
   25931             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   25932             : 
   25933             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   25934             : 
   25935             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   25936             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   25937             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   25938             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   25939             : 
   25940             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   25941             : 
   25942             :           \returns long
   25943             :        */
   25944             :           virtual long getChildIndex( SgNode* childNode ) const override;
   25945             : 
   25946             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   25947             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   25948             :       /* \brief Constructor for use by AST File I/O Mechanism
   25949             : 
   25950             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   25951             :           which obtained via fast binary file I/O from disk.
   25952             :        */
   25953             :        // SgOptions( SgOptionsStorageClass& source );
   25954             : 
   25955             : 
   25956             : 
   25957             : 
   25958             : 
   25959             :  // JH (10/24/2005): methods added to support the ast file IO
   25960             :     private:
   25961             : 
   25962             :       /* name AST Memory Allocation Support Functions
   25963             :           \brief Memory allocations support....
   25964             : 
   25965             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   25966             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   25967             :           and support the AST File I/O Mechanism.
   25968             :        */
   25969             :       /* */
   25970             : 
   25971             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   25972             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   25973             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   25974             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   25975             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   25976             :           a correspinding one in the AST_FILE_IO class!
   25977             :        */
   25978             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   25979             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   25980             :       /* \brief Typedef used for low level memory access.
   25981             :        */
   25982             :        // typedef unsigned char* TestType;
   25983             : 
   25984             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   25985             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   25986             :       /* \brief Typedef used to hold memory addresses as values.
   25987             :        */
   25988             :        // typedef unsigned long  AddressType;
   25989             : 
   25990             : 
   25991             : 
   25992             :        // necessary, to have direct access to the p_freepointer and the private methods !
   25993             :       /*! \brief friend class declaration to support AST File I/O */
   25994             :           friend class AST_FILE_IO;
   25995             : 
   25996             :       /*! \brief friend class declaration to support AST File I/O */
   25997             :           friend class SgOptionsStorageClass;
   25998             : 
   25999             :       /*! \brief friend class declaration to support AST File I/O */
   26000             :           friend class AstSpecificDataManagingClass;
   26001             : 
   26002             :       /*! \brief friend class declaration to support AST File I/O */
   26003             :           friend class AstSpecificDataManagingClassStorageClass;
   26004             :     public:
   26005             :       /*! \brief IR node constructor to support AST File I/O */
   26006             :           SgOptions( const SgOptionsStorageClass& source );
   26007             : 
   26008             :  // private: // JJW hack
   26009             :        /*
   26010             :           name AST Memory Allocation Support Variables
   26011             :           Memory allocations support variables 
   26012             : 
   26013             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   26014             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   26015             :           and support the AST File I/O Mechanism.
   26016             :        */
   26017             :       /* */
   26018             : 
   26019             :     public:
   26020             : 
   26021             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   26022             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   26023             :       // virtual SgNode* addRegExpAttribute();
   26024             :       /*! \brief Support for AST matching using regular expression.
   26025             : 
   26026             :           This support is incomplete and the subject of current research to define 
   26027             :           RegEx trees to support inexact matching.
   26028             :        */
   26029             :           SgOptions* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   26030             : 
   26031             : // *** COMMON CODE SECTION ENDS HERE ***
   26032             : 
   26033             : 
   26034             : // End of memberFunctionString
   26035             : // Start of memberFunctionString
   26036             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   26037             : 
   26038             :      // the generated cast function
   26039             :      // friend ROSE_DLL_API SgOptions* isSgOptions ( SgNode* s );
   26040             : 
   26041             :           typedef SgSupport base_node_type;
   26042             : 
   26043             : 
   26044             : // End of memberFunctionString
   26045             : 
   26046             : 
   26047             : 
   26048             : 
   26049             : 
   26050             : 
   26051             : 
   26052             : 
   26053             :      public: 
   26054             :          virtual ~SgOptions();
   26055             : 
   26056             : 
   26057             :      public: 
   26058             :          SgOptions(); 
   26059             : 
   26060             :     protected:
   26061             : // Start of memberFunctionString
   26062             : std::ostream* p_default_output;
   26063             :           
   26064             : // End of memberFunctionString
   26065             : // Start of memberFunctionString
   26066             : std::ostream* p_debug_output;
   26067             :           
   26068             : // End of memberFunctionString
   26069             : // Start of memberFunctionString
   26070             : std::ostream* p_error_output;
   26071             :           
   26072             : // End of memberFunctionString
   26073             : // Start of memberFunctionString
   26074             : std::ostream* p_logging_output;
   26075             :           
   26076             : // End of memberFunctionString
   26077             : // Start of memberFunctionString
   26078             : int p_debug_level;
   26079             :           
   26080             : // End of memberFunctionString
   26081             : // Start of memberFunctionString
   26082             : int p_logging_level;
   26083             :           
   26084             : // End of memberFunctionString
   26085             : 
   26086             :     friend struct Rose::Traits::generated::describe_node_t<SgOptions>;
   26087             :     friend struct Rose::Traits::generated::describe_field_t<SgOptions, std::ostream*,&SgOptions::p_default_output>;
   26088             :     friend struct Rose::Traits::generated::describe_field_t<SgOptions, std::ostream*,&SgOptions::p_debug_output>;
   26089             :     friend struct Rose::Traits::generated::describe_field_t<SgOptions, std::ostream*,&SgOptions::p_error_output>;
   26090             :     friend struct Rose::Traits::generated::describe_field_t<SgOptions, std::ostream*,&SgOptions::p_logging_output>;
   26091             :     friend struct Rose::Traits::generated::describe_field_t<SgOptions, int,&SgOptions::p_debug_level>;
   26092             :     friend struct Rose::Traits::generated::describe_field_t<SgOptions, int,&SgOptions::p_logging_level>;
   26093             : 
   26094             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   26095             : 
   26096             : 
   26097             :    };
   26098             : #endif
   26099             : 
   26100             : // postdeclarations for SgOptions
   26101             : 
   26102             : /* #line 26103 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   26103             : 
   26104             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   26105             : 
   26106             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   26107             : 
   26108             : 
   26109             : /* #line 26110 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   26110             : 
   26111             : 
   26112             : 
   26113             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   26114             : 
   26115             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   26116             : //      This code is automatically generated for each 
   26117             : //      terminal and non-terminal within the defined 
   26118             : //      grammar.  There is a simple way to change the 
   26119             : //      code to fix bugs etc.  See the ROSE README file
   26120             : //      for directions.
   26121             : 
   26122             : // tps: (02/22/2010): Adding DLL export requirements
   26123             : #include "rosedll.h"
   26124             : 
   26125             : // predeclarations for SgUnparse_Info
   26126             : 
   26127             : /* #line 26128 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   26128             : 
   26129             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   26130             : 
   26131             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   26132             : 
   26133             : #if 1
   26134             : // Class Definition for SgUnparse_Info
   26135             : class ROSE_DLL_API SgUnparse_Info  : public SgSupport
   26136             :    {
   26137             :      public:
   26138             : 
   26139             : 
   26140             : /* #line 26141 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   26141             : 
   26142             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   26143             : // Start of memberFunctionString
   26144             : /* #line 6976 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   26145             : 
   26146             :        // This class defines it's data explicitly so that the explicitly defined
   26147             :        // member access functions will be used and none will be generated!
   26148             : 
   26149             :        // Default constructor defined here because the automatically generated constructor
   26150             :        // would not be generated with the error checking that I require to debug the use of
   26151             :        // the SgUnparse_Info object as an inherited attribute in the unparser.
   26152             :           SgUnparse_Info ();
   26153             : 
   26154             :           SgUnparse_Info ( const SgUnparse_Info & X );
   26155             :           SgUnparse_Info & operator= ( const SgUnparse_Info & X );
   26156             : 
   26157             :           void post_construction_initialization() override;
   26158             : 
   26159             :        // DQ (4/16/2003): Notes on how to improve the unparser:
   26160             :        // Rather than having an inherited attribute that stores some context information
   26161             :        // and clearer approach would be to have an inherited attribute that stored all
   26162             :        // the context information.  The SgUnparse_Info object should be abandoned for
   26163             :        // the use of a persistant attribute built using an initial traversal (to set them)
   26164             :        // over the entire tree.  Such a traversal would have to visit every node of
   26165             :        // the AST, because the unparser has to visit every node.
   26166             : 
   26167             :        // DQ (12/6/2003) Need to use a vector<bool> type to store flags so that we can include
   26168             :        // more flags that permited in a 32bit long integer.  We used long long for a while, but
   26169             :        // this does not work with the 3.x gnu g++ compiler (and C++ does not allow enum values to
   26170             :        // be more than long (32 bits on many machines, Intel x86).  Modifying the implementation
   26171             :        // to use an STL vector<bool> type permits an unlimited number of flags (for future growth).
   26172             : 
   26173             :       /*! \brief Options available for unparsing the AST to generate source code
   26174             : 
   26175             :           These options can be set or unset and are passed from each unparse function to any
   26176             :           called unparse functions.  Sometimes a new unparse info object is generated, always
   26177             :           using the copy constructor, so that the options can be modified for unparsing
   26178             :           different parts of the AST.
   26179             : 
   26180             :           \internal This is implemented as a bit vector since it is over 32 bits.
   26181             :        */
   26182             :           enum unparse_type_num
   26183             :              {
   26184             :             //! DQ (11/4/2003): Build a default value to support initialization
   26185             :                b_enum_defaultValue            = 0, /*!< default value */
   26186             :             //! to postponing the printing of name for ptr of function or array etc
   26187             :                b_isPointerToSomething         = 1, /*!< postponing the printing of name for ptr of function or array etc */
   26188             :                b_isReferenceToSomething       = 2, /*!< postponing the printing of name for ptr of function or array etc */
   26189             :             //! if it is in Variable Declaration, output either , or ; for SgExprStmt
   26190             :                b_inVarDecl                    = 3, /*!< if it is in Variable Declaration, output either , or ; for SgExprStmt */
   26191             :             //! in a function header, output type+ symbol
   26192             :                b_inArgList                    = 4, /*!< in a function header, output type+ symbol */
   26193             :             //! no ';' for declaration statement
   26194             :                b_SkipSemiColon                = 5, /*!< no ';' for declaration statement */
   26195             :             //! to setup for printing of enum var in a VariableDeclaration
   26196             :                b_inEnumDecl                   = 6, /*!< setup for printing of enum var in a VariableDeclaration */
   26197             :             //! not really being used (yet)
   26198             :                b_inTemplateList               = 7, /*!< not really being used (yet) */
   26199             :             //! suppress printing of the base type
   26200             :                b_SkipBaseType                 = 8, /*!< suppress printing of the base type */
   26201             :             //! for skip "=" if in aggregate initializer
   26202             :                b_inAggregateInitializer       = 9, /*!< skip "=" if in aggregate initializer */
   26203             :             //! for print both type & sym name
   26204             :                b_isWithType                   = 10, /*!< print both type and sym name */
   26205             :             //! it is in conditional expr
   26206             :                b_inConditional                = 11, /*!< is in conditional expr (context information) */
   26207             :             //! skip printing definition part of a declaration
   26208             :                b_SkipDefinition               = 12, /*!< skip output of definitions (sets b_SkipEnumDefinition, b_SkipFunctionDefinition, and b_SkipClassDefinition */
   26209             :             //! need to put in either class/struct/union keyword
   26210             :                b_SkipClassSpecifier           = 13, /*!< skip the class specifier (modifier) */
   26211             :             //! printing something within a variable declaration
   26212             :                b_inEmbeddedDecl               = 14, /*!< printing something within a variable declaration */
   26213             :             //! suppress the printing of global and atomic
   26214             :                b_SkipGlobal                   = 15, /*!< suppress the printing of global and atomic (hold over from CC++, I think (not used) */
   26215             :                b_SkipAtomic                   = 16, /*!< suppress the printing of global and atomic (hold over from CC++, I think (not used) */
   26216             :             //! used by set/unsetName and set/unsetPrintName to bring down the
   26217             :             //! Name to lower tree structure
   26218             :                b_PrintName                    = 17, /*!< used by set/unsetName and set/unsetPrintName to bring down the Name to lower tree structure */
   26219             :             //! to set the need to check if need access specifier (avoids redundently specific access modifiers)
   26220             :                b_CheckAccess                  = 18, /*!< set the need to check if need access specifier */
   26221             :             //! to skip function qualifiers
   26222             :                b_SkipFunctionQualifier        = 19, /*!< skip function qualifiers */
   26223             :             //! to show that the type above current one is an array
   26224             :                b_isArrayType                  = 20, /*!< show that the type above current one is an array */
   26225             :             //! to indicate that this is at the right hand side of a binary op
   26226             :                b_inRhsExpr                    = 21, /*!< indicate that this is at the right hand side of a binary op */
   26227             :             //! to flag the skipping of () printing in a function call
   26228             :             //! this is for a bug in g++ that can not handle (P::dval->B::mfcall)()
   26229             :             //! skipping the toplevel only
   26230             :                b_SkipParen                    = 22, /*!< skip over output of matching "(" and ")" */
   26231             :             //! for the case that this maybe a function type, separate the outputing of
   26232             :             //! the type info into 2 parts, the return type part and the arg type
   26233             :             //! by default this is always set to 0
   26234             :                b_isTypeSecondPart             = 23, /*!< unparse only second part of type */
   26235             :                b_isTypeFirstPart              = 24, /*!< unparse only first part of type */
   26236             :             //! Added by DQ to permit reuse of unparser code in generation
   26237             :             //! of declarations in rewrite mechanism
   26238             :                b_SkipInitializer              = 25, /*!< skip output of initializers */
   26239             :             //! Added by DQ to permit reuse of unparser code in generation
   26240             :             //! of declarations in rewrite mechanism
   26241             :                b_SkipComments                 = 26, /*!< ignore all comments in unparsing */
   26242             :             //! Added by DQ to permit reuse of unparser code in generation
   26243             :             //! of declarations in rewrite mechanism
   26244             :                b_SkipCPPDirectives            = 27, /*!< ignore all C preprocessor directives (except #pragma which is in the AST) */
   26245             :             //! Added by DQ to permit reuse of unparser code in generation
   26246             :             //! of declarations in rewrite mechanism
   26247             :                b_SkipEnumDefinition           = 28, /*!< skip over enum definition, if available */
   26248             :             //! Added by DQ to permit reuse of unparser code in generation
   26249             :             //! of declarations in rewrite mechanism
   26250             :                b_SkipFunctionDefinition       = 29, /*!< skip over the function definition, if available */
   26251             :             //! Added by DQ to permit reuse of unparser code in generation
   26252             :             //! of declarations in rewrite mechanism
   26253             :                b_SkipClassDefinition          = 30, /*!< skip over the class definition, if available */
   26254             :             //! Added by DQ to permit reuse of unparser code in generation
   26255             :             //! of declarations in rewrite mechanism
   26256             :                b_AddSemiColonAfterDeclaration = 31, /*!< add ';' after declaration */
   26257             :             //! MS: 09/03/02 Added by MS to make unparsing of white space optional
   26258             :             //! currently only used in unparseToCompleteString (by removing whitespaces)
   26259             :             //! I only added it here to follow the design but suggest to use varibles of type bool,
   26260             :             //! and extend the ROSETTA code to add these attributes, and generate the access functions -
   26261             :             //! unfortunately the naming scheme does not comply with ROSETTA's naming scheme for access functions.
   26262             :                b_SkipWhitespaces              = 32, /*!< ignore any unrequired white space */
   26263             :             //! DQ (11/3/2003): made all bit flags 64 bit long so that we could add a few
   26264             :             //! more entries.  Added bit flag to control generation of prefix scope
   26265             :             //! statements. This permits unparsing SgForStmt, SgWhileStmt, SgSwitchStmt,
   26266             :             //! etc., without their body so that we can capture the full context of the
   26267             :             //! declarations associated with such statements.  In the case of SgSwitchStmt
   26268             :             //! it also permits replacement of case statements which are specific to
   26269             :             //! SgSwitchStmt basic blocks and no other basic blocks.  This verifies the
   26270             :             //! correctness of transformation specified.
   26271             :                b_SkipBasicBlock               = 33, /*!< skip over the unparsing of the basic block */
   26272             : 
   26273             :            //! Templates that are modified need to be output, but all other output of a class
   26274             :            //! template only supports the output of the class template name (but in template
   26275             :            //! form, e.g. "Rose_STL_Container<int>").  If the template has not been transformed then we have
   26276             :            //! to control where it is output.  The default can't be to output the template
   26277             :            //! everywhere and then restrict it's use since the unparser can't turn that on,
   26278             :            //! so we have to restrict it everywhere and turn it on in several places.
   26279             :                b_outputClassTemplateName      = 34, /*!< outputClassTemplateName */
   26280             : 
   26281             :             // DQ (5/27/2005): Added support for getting comments and directives output before any inserted
   26282             :             // compiler generated statements.
   26283             :            //! Control output of compiler-generated statements (typically template specialization declarations).
   26284             :            //! this allows the unparing of comments and preprocessor declarations before the compiler-generated
   26285             :            //! statements appearing with any non-compiler-generated statement.
   26286             :                b_outputCompilerGeneratedStatements = 35, /*!< outputCompilerGeneratedStatements */
   26287             : 
   26288             :             // DQ (4/5/2006): Added support for constant folded values to be optionally output
   26289             :            //! Control output of constant folded values.
   26290             :                b_SkipConstantFoldedExpressions = 36, /*!< SkipConstantFoldedExpressions */
   26291             : 
   26292             :             // DQ and PC (6/1/2006): Added Peter's suggested fixes to support unparsing fully qualified names.
   26293             :                b_forceQualifiedNames           = 37, /*!< Force qualified names. */
   26294             : 
   26295             :             // DQ (10/11/2006): This is added to support a default where all qualified names are output.
   26296             :            //! Control output of qualified names (not always wanted).
   26297             :                b_SkipQualifiedNames           = 38, /*!< skip qualified names (e.g. names of defining declarations). */
   26298             : 
   26299             :            //! Control access specifiers use in generated code (public, protected, private).
   26300             :                b_skipCheckAccess               = 39, /*!< Skip access specifier (different from b_CheckAccess, above) */
   26301             : 
   26302             :                b_requiresGlobalNameQualification = 40,/*!< Requires global qualifier on generated name. */
   26303             : 
   26304             :             // DQ (8/10/2006):
   26305             :             // b_isAsmOutputOperand            = 40, /*!< Mark as output operand */
   26306             : 
   26307             :                b_useTypeAttributes             = 41,/*!< Fortran allows type attributes to be used in declarations (for example to dimension a collection of arrays). */
   26308             : 
   26309             :                b_SkipFormatting                = 42,/*!< Fortran code generation requires that we skip some formatting (e.g. column 7 formatting, even if fixed format output). */
   26310             : 
   26311             :             // FMZ: Added for generate fortran xxx.rose_mod file
   26312             :                b_outputFortranModFile      = 43, /*!< Fortran mod file generation */
   26313             : 
   26314             :             // DQ (1/16/2011): Fortran support required.
   26315             :                b_supressStrippedTypeName = 44, /*!< Unparsing of Fortran types with multiple attributes requires skipping the stripped base type name if it has already been output. */
   26316             : 
   26317             :             // DQ (4/13/2013): Added support to unparse code using overloaded operator names or operator syntax (to match the input code).
   26318             :                b_prefixOperator = 45, /*!< Part of support to unparse code using overloaded operator names or operator syntax (to match the input code); this marks prefix operators to be unparsed before the LHS s output. */
   26319             : 
   26320             :             // DQ (2/2/2014): Supress output of array bound in array type.  Used to support array declearations with empty bracket syntax (e.g. int array[];).
   26321             :                b_supressArrayBound = 46, /*!< Supress output of array bound in array type.  Used to support array declearations with empty bracket syntax for secondary (prototype) declarations (e.g. int array[];). */
   26322             : 
   26323             :             // DQ (9/3/2014): Supress output of this operator where compiler generated (required to support lambda function code generation).
   26324             :                b_supressImplicitThisOperator = 47, /*!< Supress output of SgThisExp (required to support lambda function code generation). */
   26325             : 
   26326             :             // DQ (12/5/2014): Record that the statement was partially unparsed using the token stream.
   26327             :                b_unparsedPartiallyUsingTokenStream = 48, /*!< Record that the statement was partially unparsed using the token stream. */
   26328             : 
   26329             :             // DQ (3/25/2015): This is the support required for the offsetof() function family (__offsetof(), __builtin_offsetof(), etc.).
   26330             :                b_skipCompilerGeneratedSubExpressions = 49, /*!< Supress compiler generated subexpressions (used to output fields in the 2nd parameter of the offsetof() function family. */
   26331             : 
   26332             :             // DQ (11/15/2015): Token-based unparsing support for partial token sequence unparsing of lists of statements (controls fromatting).
   26333             :                b_parentStatementListBeingUnparsedUsingPartialTokenSequence = 50, /*!< Controls output formatting (CR's) in mixing unparsing from token stream with unparsing from the AST. */
   26334             : 
   26335             :             // DQ (2/8/2016): Adding support for C++11 specific initialization lists.
   26336             :                b_cxx11_initialization_list = 51, /*!< Indicate when we are in a C++11 specific initialization list. */
   26337             : 
   26338             :             // DQ (2/3/2019): Need to know when we are unparsing the base type within a typedef so that member pointers can be output with parenthesis (see Cxx11_tests/test2019_77.C).
   26339             :            //! to setup unparsing of base types in typedef declarations (for SgPointerMemberType) which requires extra parenthesis.
   26340             :                b_inTypedefDecl             = 52, /*!< setup unparsing of base types in typedef declarations (for SgPointerMemberType) which requires extra parenthesis */
   26341             : 
   26342             :             // DQ (4/13/2019): Generated strings of template instantiations need to sometimes exclude the initial name qualification to avoid it being redundantly generated, see Cxx11_tests/test2019_350.C).
   26343             :                b_SkipNameQualification     = 53, /*!< Skip the use of name qualification (used in generating strings of template instantiations) */
   26344             : 
   26345             :             // DQ (12/26/2019): Use an alternative defining declaration in unparsing of named type, see Cxx11_tests/test2019_518a.C and test2019_518b.C).
   26346             :             // Required to support multiple file handling, and its unparsing.
   26347             :                b_useAlternativeDefiningDeclaration = 54, /*!< Skip the use of name qualification (used in generating strings of template instantiations) */
   26348             : 
   26349             :             // DQ (1/6/2021): Adding support to detect use of unparseToString() functionality.  This is required to avoid premature saving of state
   26350             :             // regarding the static previouslyUnparsedTokenSubsequences which is required to support multiple statements (e.g. a variable declarations
   26351             :             // with containing multiple variables which translates (typically) to multiple variable declarations (each with one variable) within the AST).
   26352             :                b_usedInUparseToStringFunction = 55, /*!< Mark this use as being called from the unparseToString() functions (used in debugging) */
   26353             : 
   26354             :             //! DQ (12/6/2003): Added last value to use a upper bound in loops
   26355             :                UNPARSE_TYPE_LAST /*!< last value used for debugging */
   26356             :              };
   26357             : 
   26358             :       /*! Access modifiers for use with SgUnparseInfo (only) */
   26359             :           enum access_attr_enum
   26360             :              {
   26361             :                a_unset_access     = 1, /*!< default value */
   26362             :                a_private_access   = 2, /*!< private access value */
   26363             :                a_protected_access = 3, /*!< protected access value */
   26364             :                a_public_access    = 4,  /*!< public access value */
   26365             :             // DQ (8/12/2020): added a new value to support when this is not set explicitly (see Cxx_tests/test2020_28.C).
   26366             :                a_default_access   = 5  /*!< public access value */
   26367             :              };
   26368             : 
   26369             :      private:
   26370             : 
   26371             :        // DQ (1/3/2009): This is similar code to what is in SgModifier::checkBit, setBit, unsetBit; so it could be refactored.
   26372             :           bool checkBit(unparse_type_num bit) const;
   26373             :           void setBit(unparse_type_num bit);
   26374             :           void unsetBit(unparse_type_num bit);
   26375             : 
   26376             :      public:
   26377             : 
   26378             :        // access function to SgUnparse_Info
   26379             :           bool isUnsetAccess() const;
   26380             :           void set_isUnsetAccess();
   26381             :           bool isPrivateAccess() const;
   26382             :           void set_isPrivateAccess();
   26383             :           bool isProtectedAccess() const;
   26384             :           void set_isProtectedAccess();
   26385             :           bool isPublicAccess() const;
   26386             :           void set_isPublicAccess();
   26387             : 
   26388             :        // DQ (8/12/2020): Adding a default value for when it is not set explicitly.
   26389             :           bool isDefaultAccess() const;
   26390             :           void set_isDefaultAccess();
   26391             : 
   26392             :           bool isPointerToSomething() const;
   26393             :           void set_isPointerToSomething();
   26394             :           void unset_isPointerToSomething();
   26395             : 
   26396             :           bool isReferenceToSomething() const;
   26397             :           void set_isReferenceToSomething();
   26398             :           void unset_isReferenceToSomething();
   26399             : 
   26400             :           bool inVarDecl() const;
   26401             :           void set_inVarDecl();
   26402             :           void unset_inVarDecl();
   26403             : 
   26404             :           bool inArgList() const;
   26405             :           void set_inArgList();
   26406             :           void unset_inArgList();
   26407             : 
   26408             :           bool SkipSemiColon() const;
   26409             :           void set_SkipSemiColon();
   26410             :           void unset_SkipSemiColon();
   26411             : 
   26412             :           bool inEnumDecl() const;
   26413             :           void set_inEnumDecl();
   26414             :           void unset_inEnumDecl();
   26415             : 
   26416             :           bool inTemplateList() const;
   26417             :           void set_inTemplateList();
   26418             :           void unset_inTemplateList();
   26419             : 
   26420             :           bool SkipBaseType() const;
   26421             :           void set_SkipBaseType();
   26422             :           void unset_SkipBaseType();
   26423             : 
   26424             :           bool inAggregateInitializer() const;
   26425             :           void set_inAggregateInitializer();
   26426             :           void unset_inAggregateInitializer();
   26427             : 
   26428             :           bool isWithType() const;
   26429             :           void set_isWithType();
   26430             :           void unset_isWithType();
   26431             : 
   26432             :           bool inConditional() const;
   26433             :           void set_inConditional();
   26434             :           void unset_inConditional();
   26435             : 
   26436             :           bool SkipDefinition() const;
   26437             :           void set_SkipDefinition();
   26438             :           void unset_SkipDefinition();
   26439             : 
   26440             :           bool SkipClassSpecifier() const;
   26441             :           void set_SkipClassSpecifier();
   26442             :           void unset_SkipClassSpecifier();
   26443             : 
   26444             :           bool inEmbeddedDecl() const;
   26445             :           void set_inEmbeddedDecl();
   26446             :           void unset_inEmbeddedDecl();
   26447             : 
   26448             :           bool SkipGlobal() const;
   26449             :           void set_SkipGlobal();
   26450             :           void unset_SkipGlobal();
   26451             : 
   26452             :           bool SkipAtomic() const;
   26453             :           void set_SkipAtomic();
   26454             :           void unset_SkipAtomic();
   26455             : 
   26456             :           bool PrintName() const;
   26457             :           void set_PrintName();
   26458             :           void unset_PrintName();
   26459             : 
   26460             :           bool CheckAccess() const;
   26461             :           void set_CheckAccess();
   26462             :           void unset_CheckAccess();
   26463             : 
   26464             :           bool SkipFunctionQualifier() const;
   26465             :           void set_SkipFunctionQualifier();
   26466             :           void unset_SkipFunctionQualifier();
   26467             : 
   26468             :           bool isArrayType() const;
   26469             :           void set_isArrayType();
   26470             :           void unset_isArrayType();
   26471             : 
   26472             :           bool inRhsExpr() const;
   26473             :           void set_inRhsExpr();
   26474             :           void unset_inRhsExpr();
   26475             : 
   26476             :           bool SkipParen() const;
   26477             :           void set_SkipParen();
   26478             :           void unset_SkipParen();
   26479             : 
   26480             :        // DQ (5/10/2015): Added documentation for how these are tested, set and unset.
   26481             :       /*! \brief Tests the setting of the flag to permit output of 2nd part of type.
   26482             : 
   26483             :           \internal This and the isTypeFirstPart flag are mutually exclusive.
   26484             :        */
   26485             :           bool isTypeSecondPart() const;
   26486             : 
   26487             :        // DQ (5/10/2015): Added documentation for how these are tested, set and unset.
   26488             :       /*! \brief Sets flag to permit output of 2nd part of type.
   26489             : 
   26490             :           This sets the flag for output of the 2nd part of a type and unsets the flag for the 1st part of the type.
   26491             : 
   26492             :           \internal This and the isTypeFirstPart flag are mutually exclusive.
   26493             :        */
   26494             :           void set_isTypeSecondPart();
   26495             : 
   26496             :        // DQ (5/10/2015): Added documentation for how these are tested, set and unset.
   26497             :       /*! \brief Unsets the flag to permit output of 2nd part of type.
   26498             : 
   26499             :           This only unsets the flag for the output of the 2nd part of a type (no change to the flag for the 1st part of the type).
   26500             : 
   26501             :           \internal This and the isTypeFirstPart flag can both be false or only one can be true.
   26502             :        */
   26503             :           void unset_isTypeSecondPart();
   26504             : 
   26505             :        // DQ (5/10/2015): Added documentation for how these are tested, set and unset.
   26506             :       /*! \brief Tests the setting of the flag to permit output of 1st part of type.
   26507             : 
   26508             :           \internal This and the isTypeFirstPart flag are mutually exclusive.
   26509             :        */
   26510             :           bool isTypeFirstPart() const;
   26511             : 
   26512             :        // DQ (5/10/2015): Added documentation for how these are tested, set and unset.
   26513             :       /*! \brief Sets flag to permit output of 1st part of type.
   26514             : 
   26515             :           This sets the flag for output of the 1st part of a type and unsets the flag for the 2nd part of the type.
   26516             : 
   26517             :           \internal This and the isTypeSecondPart flag are mutually exclusive.
   26518             :        */
   26519             :           void set_isTypeFirstPart();
   26520             : 
   26521             :        // DQ (5/10/2015): Added documentation for how these are tested, set and unset.
   26522             :       /*! \brief Unsets the flag to permit output of 1st part of type.
   26523             : 
   26524             :           This only unsets the flag for the output of the 1st part of a type (not change to the flag for the 2nd part of the type).
   26525             : 
   26526             :           \internal This and the isTypeSecondPart flag can both be false or only one can be true.
   26527             :        */
   26528             :           void unset_isTypeFirstPart();
   26529             : 
   26530             :           bool SkipInitializer() const;
   26531             :           void set_SkipInitializer();
   26532             :           void unset_SkipInitializer();
   26533             : 
   26534             :           bool SkipComments() const;
   26535             :           void set_SkipComments();
   26536             :           void unset_SkipComments();
   26537             : 
   26538             :        // MS: 09/03/03
   26539             :           bool SkipWhitespaces() const;
   26540             :           void set_SkipWhitespaces();
   26541             :           void unset_SkipWhitespaces();
   26542             : 
   26543             :           bool SkipCPPDirectives() const;
   26544             :           void set_SkipCPPDirectives();
   26545             :           void unset_SkipCPPDirectives();
   26546             : 
   26547             :           bool SkipEnumDefinition() const;
   26548             :           void set_SkipEnumDefinition();
   26549             :           void unset_SkipEnumDefinition();
   26550             : 
   26551             :           bool SkipFunctionDefinition() const;
   26552             :           void set_SkipFunctionDefinition();
   26553             :           void unset_SkipFunctionDefinition();
   26554             : 
   26555             :           bool SkipClassDefinition() const;
   26556             :           void set_SkipClassDefinition();
   26557             :           void unset_SkipClassDefinition();
   26558             : 
   26559             :           bool AddSemiColonAfterDeclaration() const;
   26560             :           void set_AddSemiColonAfterDeclaration();
   26561             :           void unset_AddSemiColonAfterDeclaration();
   26562             : 
   26563             :        // DQ (11/04/03): Added to support unparsing control flow (SgForStmt, SgSwitch,
   26564             :        //                etc.) to make prefix more precise. Can't add case to anything
   26565             :        //                but switch, and capture declarations in for loops, for example.
   26566             :           bool SkipBasicBlock() const;
   26567             :           void set_SkipBasicBlock();
   26568             :           void unset_SkipBasicBlock();
   26569             : 
   26570             :        // DQ (3/18/2004): Added to support unparsing of class templates in variables but
   26571             :        // not in in instatiated template declarations (unless the template is transformed
   26572             :        // in which case another test is used).
   26573             :           bool outputClassTemplateName() const;
   26574             :           void set_outputClassTemplateName();
   26575             :           void unset_outputClassTemplateName();
   26576             : 
   26577             :        // DQ (5/27/2005): support (see documentation above)
   26578             :           bool outputCompilerGeneratedStatements() const;
   26579             :           void set_outputCompilerGeneratedStatements();
   26580             :           void unset_outputCompilerGeneratedStatements();
   26581             : 
   26582             :        // DQ (4/5/2006): Added support for constant folded values to be optionally output
   26583             :       //! Control output of constant folded values, the default is to ignore constant
   26584             :       //! folded values and unparse the original code (as if no constant folding were done).
   26585             :       //! (default is unset)
   26586             :           bool SkipConstantFoldedExpressions() const;
   26587             :           void set_SkipConstantFoldedExpressions();
   26588             :           void unset_SkipConstantFoldedExpressions();
   26589             : 
   26590             :        // DQ and PC (6/1/2006): Added Peter's suggested fixes to support unparsing fully qualified names.
   26591             :           bool forceQualifiedNames() const;
   26592             :           void set_forceQualifiedNames();
   26593             :           void unset_forceQualifiedNames();
   26594             : 
   26595             :        // DQ and PC (6/1/2006): Added Peter's suggested fixes to support unparsing fully qualified names.
   26596             :           bool skipCheckAccess() const;
   26597             :           void set_skipCheckAccess();
   26598             :           void unset_skipCheckAccess();
   26599             : 
   26600             :        // DQ (10/11/2006): Added to support new implementation of name qualification
   26601             :           bool SkipQualifiedNames() const;
   26602             :           void set_SkipQualifiedNames();
   26603             :           void unset_SkipQualifiedNames();
   26604             : 
   26605             :           bool requiresGlobalNameQualification() const;
   26606             :           void set_requiresGlobalNameQualification();
   26607             :           void unset_requiresGlobalNameQualification();
   26608             : 
   26609             :        // DQ (9/22/2007): Added optional handling of Fortran type attributes, these may have to be setup for each different kind of type attribute.
   26610             :           bool useTypeAttributes() const;
   26611             :           void set_useTypeAttributes();
   26612             :           void unset_useTypeAttributes();
   26613             : 
   26614             :           bool SkipFormatting() const;
   26615             :           void set_SkipFormatting();
   26616             :           void unset_SkipFormatting();
   26617             : 
   26618             :           bool supressStrippedTypeName() const;
   26619             :           void set_supressStrippedTypeName();
   26620             :           void unset_supressStrippedTypeName();
   26621             : 
   26622             :           std::string get_operator_name();
   26623             :           void set_operator_name(const std::string& on);
   26624             : 
   26625             :           SgName& get_name();
   26626             :           void set_name(const SgName& name);
   26627             :           void unset_name();
   26628             : 
   26629             :           SgDeclarationStatement* get_decl_stmt();
   26630             :           void set_decl_stmt(SgDeclarationStatement* stmt );
   26631             :           void unset_decl_stmt();
   26632             : 
   26633             :           int get_nested_expression();
   26634             :           void set_nested_expression();
   26635             :           void unset_nested_expression();
   26636             : 
   26637             :        // DQ (4/13/2013): Added support to mark output of overloaded operators an prefix operators.
   26638             :           bool isPrefixOperator() const;
   26639             :           void set_prefixOperator();
   26640             :           void unset_prefixOperator();
   26641             : 
   26642             :        // DQ (2/2/2014): Supress output of array bound in array type.  Used to support array declearations with empty bracket syntax (e.g. int array[];).
   26643             :           bool supressArrayBound() const;
   26644             :           void set_supressArrayBound();
   26645             :           void unset_supressArrayBound();
   26646             : 
   26647             :        // DQ (9/3/2014): Supress output of this operator where compiler generated (required to support lambda function code generation).
   26648             :           bool supressImplicitThisOperator() const;
   26649             :           void set_supressImplicitThisOperator();
   26650             :           void unset_supressImplicitThisOperator();
   26651             : 
   26652             :        // DQ (12/5/2014): Record that the statement was partially unparsed using the token stream.
   26653             :           bool unparsedPartiallyUsingTokenStream() const;
   26654             :           void set_unparsedPartiallyUsingTokenStream();
   26655             :           void unset_unparsedPartiallyUsingTokenStream();
   26656             : 
   26657             :        // DQ (3/25/2015): This is the support required for the offsetof() function family (__offsetof(), __builtin_offsetof(), etc.).
   26658             :           bool skipCompilerGeneratedSubExpressions() const;
   26659             :           void set_skipCompilerGeneratedSubExpressions();
   26660             :           void unset_skipCompilerGeneratedSubExpressions();
   26661             : 
   26662             :        // DQ (11/15/2015): Token-based unparsing support for partial token sequence unparsing of lists of statements (controls fromatting).
   26663             :           bool parentStatementListBeingUnparsedUsingPartialTokenSequence() const;
   26664             :           void set_parentStatementListBeingUnparsedUsingPartialTokenSequence();
   26665             :           void unset_parentStatementListBeingUnparsedUsingPartialTokenSequence();
   26666             : 
   26667             :        // DQ (2/8/2016): Adding support for C++11 specific initialization lists.
   26668             :           bool get_cxx11_initialization_list() const;
   26669             :           void set_cxx11_initialization_list();
   26670             :           void unset_cxx11_initialization_list();
   26671             : 
   26672             :        // DQ (2/3/2019): unparsing for base type in typedefs when base type is a member pointer.
   26673             :           bool inTypedefDecl() const;
   26674             :           void set_inTypedefDecl();
   26675             :           void unset_inTypedefDecl();
   26676             : 
   26677             :        // DQ (4/13/2019): unparsing for generated template instantiations need to sometime skip the initial name qualification.
   26678             :           bool SkipNameQualification() const;
   26679             :           void set_SkipNameQualification();
   26680             :           void unset_SkipNameQualification();
   26681             : 
   26682             :        // DQ (12/26/2019): unparsing for defining declarations in named types defined in multiple translation units (multi-file support).
   26683             :           bool useAlternativeDefiningDeclaration() const;
   26684             :           void set_useAlternativeDefiningDeclaration();
   26685             :           void unset_useAlternativeDefiningDeclaration();
   26686             : 
   26687             :        // DQ (1/6/2021): Adding support to detect use of unparseToString() functionality.  This is required to avoid premature saving of state
   26688             :        // regarding the static previouslyUnparsedTokenSubsequences which is required to support multiple statements (e.g. a variable declarations
   26689             :        // with containing multiple variables which translates (typically) to multiple variable declarations (each with one variable) within the AST).
   26690             :           bool usedInUparseToStringFunction() const;
   26691             :           void set_usedInUparseToStringFunction();
   26692             :           void unset_usedInUparseToStringFunction();
   26693             : #if 0
   26694             :        // DQ (11/21/2021): Adding support for types to be unparsed with the context of the correct declaration to support multi-file handling.
   26695             :           SgDeclarationStatement* get_declaration_of_context();
   26696             :           void set_declaration_of_context(SgDeclarationStatement* d);
   26697             : #endif
   26698             :        // DQ (11/21/2021): Adding support for types to be unparsed with the context of the correct declaration to support multi-file handling.
   26699             :           void unset_declaration_of_context();
   26700             : 
   26701             : #if 0
   26702             :    // MK: These access functions are now automatically generated!
   26703             :           SgNamedType *get_current_context();
   26704             :           void set_current_context(SgNamedType *t);
   26705             : #endif
   26706             :           void unset_current_context();
   26707             : 
   26708             :           SgName get_array_index_list();
   26709             : 
   26710             :           void set_array_index_list(SgExpression *e, SgUnparse_Info finfo );
   26711             :           void unset_array_index_list();
   26712             : 
   26713             :        // Support for processing of recursive references to structure tags within the data
   26714             :        // structures that they define.
   26715             :           void addStructureTag ( SgNamedType* structureTag );
   26716             : 
   26717             :       //! Access function for internal STL list of structure tags
   26718             :           SgTypePtrList & getStructureTagList ();
   26719             : 
   26720             :        // DQ (1/9/2007): Modified to make const
   26721             :           void display ( const std::string & label = "") const;
   26722             :           std::string displayString ( const std::string & label ) const;
   26723             : 
   26724             :       /*! \brief Added to debug use of the default constructor
   26725             : 
   26726             :           Added to debug use of the default constructor (to restrict it from being used so that
   26727             :           we could detect where it is being used in place of the copy constructor which should
   26728             :           be used to implement the SgUnparse_Info object correctly as an inherited attribute
   26729             :           within the ROSE unparser.
   26730             :        */
   26731             :        // static bool forceDefaultConstructorToTriggerError;
   26732             : 
   26733             :        // DQ (9/6/2004): Support for list of scopes required to qualify names (e.g. types, data members, member functions, etc.)
   26734             :        // SgSymbolPtrList & get_listOfScopeSymbols();
   26735             :        // void set_listOfScopeSymbols ( const SgSymbolPtrList & l );
   26736             : 
   26737             :        // DQ (1/31/2006): moved static bool forceDefaultConstructorToTriggerError to be built by ROSETTA
   26738             :           static bool get_forceDefaultConstructorToTriggerError();
   26739             :           static void set_forceDefaultConstructorToTriggerError( bool forceDefaultConstructorToTriggerError);
   26740             : 
   26741             :        // FMZ (5/8/2008) Added to support to generate fortran XX.rose_mod file for a module
   26742             :        // the code will based on fortran unparser code
   26743             :           bool outputFortranModFile() const;
   26744             :           void set_outputFortranModFile();
   26745             :           void unset_outputFortranModFile();
   26746             : 
   26747             :        // driscoll6 (6/6/2011) Mutators for p_nestingLevel
   26748             :           void inc_nestingLevel();
   26749             :           void dec_nestingLevel();
   26750             : 
   26751             :        // DQ (8/16/2020): Record when we are in an extern "C" so that we can avoid nesting (see Cxx_tests/test2020_28.C).
   26752             :        // We need to build the access functions directly because of the static data member.
   26753             :           static bool get_extern_C_with_braces();
   26754             :           static void set_extern_C_with_braces( bool extern_C_with_braces );
   26755             : 
   26756             : 
   26757             : 
   26758             : // End of memberFunctionString
   26759             : // Start of memberFunctionString
   26760             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   26761             : 
   26762             : // *** COMMON CODE SECTION BEGINS HERE ***
   26763             : 
   26764             :     public:
   26765             : 
   26766             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   26767             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   26768             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   26769             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   26770             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   26771             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   26772             : 
   26773             :       /*! \brief returns a string representing the class name */
   26774             :           virtual std::string class_name() const override;
   26775             : 
   26776             :       /*! \brief returns new style SageIII enum values */
   26777             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   26778             : 
   26779             :       /*! \brief static variant value */
   26780             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   26781             :        // static const VariantT static_variant = V_SgUnparse_Info;
   26782             :           enum { static_variant = V_SgUnparse_Info };
   26783             : 
   26784             :        /* the generated cast function */
   26785             :       /*! \brief Casts pointer from base class to derived class */
   26786             :           ROSE_DLL_API friend       SgUnparse_Info* isSgUnparse_Info(       SgNode * s );
   26787             : 
   26788             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   26789             :           ROSE_DLL_API friend const SgUnparse_Info* isSgUnparse_Info( const SgNode * s );
   26790             : 
   26791             :      // ******************************************
   26792             :      // * Memory Pool / New / Delete
   26793             :      // ******************************************
   26794             : 
   26795             :      public:
   26796             :           /// \private
   26797             :           static const unsigned pool_size; //
   26798             :           /// \private
   26799             :           static std::vector<unsigned char *> pools; //
   26800             :           /// \private
   26801             :           static SgUnparse_Info * next_node; // 
   26802             : 
   26803             :           /// \private
   26804             :           static unsigned long initializeStorageClassArray(SgUnparse_InfoStorageClass *); //
   26805             : 
   26806             :           /// \private
   26807             :           static void clearMemoryPool(); //
   26808             :           static void deleteMemoryPool(); //
   26809             : 
   26810             :           /// \private
   26811             :           static void extendMemoryPoolForFileIO(); //
   26812             : 
   26813             :           /// \private
   26814             :           static SgUnparse_Info * getPointerFromGlobalIndex(unsigned long); //
   26815             :           /// \private
   26816             :           static SgUnparse_Info * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   26817             : 
   26818             :           /// \private
   26819             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   26820             :           /// \private
   26821             :           static void resetValidFreepointers(); //
   26822             :           /// \private
   26823             :           static unsigned long getNumberOfLastValidPointer(); //
   26824             : 
   26825             : 
   26826             : #if defined(INLINE_FUNCTIONS)
   26827             :       /*! \brief returns pointer to newly allocated IR node */
   26828             :           inline void *operator new (size_t size);
   26829             : #else
   26830             :       /*! \brief returns pointer to newly allocated IR node */
   26831             :           void *operator new (size_t size);
   26832             : #endif
   26833             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   26834             :           void operator delete (void* pointer, size_t size);
   26835             : 
   26836             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   26837     1625440 :           void operator delete (void* pointer)
   26838             :              {
   26839             :             // This is the generated delete operator...
   26840     1625440 :                SgUnparse_Info::operator delete (pointer,sizeof(SgUnparse_Info));
   26841             :              }
   26842             : 
   26843             :       /*! \brief Returns the total number of IR nodes of this type */
   26844             :           static size_t numberOfNodes();
   26845             : 
   26846             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   26847             :           static size_t memoryUsage();
   26848             : 
   26849             :       // End of scope which started in IR nodes specific code 
   26850             :       /* */
   26851             : 
   26852             :       /* name Internal Functions
   26853             :           \brief Internal functions ... incomplete-documentation
   26854             : 
   26855             :           These functions have been made public as part of the design, but they are suggested for internal use 
   26856             :           or by particularly knowledgeable users for specialized tools or applications.
   26857             : 
   26858             :           \internal We could not make these private because they are required by user for special purposes. And 
   26859             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   26860             :          
   26861             :        */
   26862             : 
   26863             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   26864             :        // overridden in every class by *generated* implementation
   26865             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   26866             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   26867             :        // MS: 06/28/02 container of names of variables or container indices 
   26868             :        // used used in the traversal to access AST successor nodes
   26869             :        // overridden in every class by *generated* implementation
   26870             :       /*! \brief container of names of variables or container indices used used in the traversal
   26871             :           to access AST successor nodes overridden in every class by *generated* implementation */
   26872             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   26873             : 
   26874             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   26875             :        // than all the vector copies. The implementation for these functions is generated for each class.
   26876             :       /*! \brief return number of children in the traversal successor list */
   26877             :           virtual size_t get_numberOfTraversalSuccessors() override;
   26878             :       /*! \brief index-based access to traversal successors by index number */
   26879             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   26880             :       /*! \brief index-based access to traversal successors by child node */
   26881             :           virtual size_t get_childIndex(SgNode *child) override;
   26882             : 
   26883             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   26884             :        // MS: 08/16/2002 method for generating RTI information
   26885             :       /*! \brief return C++ Runtime-Time-Information */
   26886             :           virtual RTIReturnType roseRTI() override;
   26887             : #endif
   26888             :       /* */
   26889             : 
   26890             : 
   26891             : 
   26892             :       /* name Deprecated Functions
   26893             :           \brief Deprecated functions ... incomplete-documentation
   26894             : 
   26895             :           These functions have been deprecated from use.
   26896             :        */
   26897             :       /* */
   26898             : 
   26899             :       /*! returns a C style string (char*) representing the class name */
   26900             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   26901             : 
   26902             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   26903             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   26904             : #if 0
   26905             :       /*! returns old style Sage II enum values */
   26906             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   26907             :       /*! returns old style Sage II enum values */
   26908             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   26909             : #endif
   26910             :       /* */
   26911             : 
   26912             : 
   26913             : 
   26914             : 
   26915             :      public:
   26916             :       /* name Traversal Support Functions
   26917             :           \brief Traversal support functions ... incomplete-documentation
   26918             : 
   26919             :           These functions have been made public as part of the design, but they are suggested for internal use 
   26920             :           or by particularly knowledgable users for specialized tools or applications.
   26921             :        */
   26922             :       /* */
   26923             : 
   26924             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   26925             :        // (inferior to ROSE traversal mechanism, experimental).
   26926             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   26927             :        */
   26928             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   26929             : 
   26930             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   26931             :       /*! \brief support for the classic visitor pattern done in GoF */
   26932             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   26933             : 
   26934             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   26935             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   26936             :        */
   26937             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   26938             : 
   26939             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   26940             :        */
   26941             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   26942             : 
   26943             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   26944             :        // This traversal helps support internal tools that call static member functions.
   26945             :        // note: this function operates on the memory pools.
   26946             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   26947             :        */
   26948             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   26949             :       /* */
   26950             : 
   26951             : 
   26952             :      public:
   26953             :       /* name Memory Allocation Functions
   26954             :           \brief Memory allocations functions ... incomplete-documentation
   26955             : 
   26956             :           These functions have been made public as part of the design, but they are suggested for internal use 
   26957             :           or by particularly knowledgable users for specialized tools or applications.
   26958             :        */
   26959             :       /* */
   26960             : 
   26961             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   26962             : 
   26963             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   26964             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   26965             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   26966             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   26967             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   26968             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   26969             :           being used with the AST File I/O mechanism.
   26970             :        */
   26971             :           virtual bool isInMemoryPool() override;
   26972             : 
   26973             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   26974             : 
   26975             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   26976             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   26977             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   26978             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   26979             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   26980             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   26981             :           being used with the AST File I/O mechanism.
   26982             :        */
   26983             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   26984             : 
   26985             :       // DQ (4/30/2006): Modified to be a const function.
   26986             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   26987             : 
   26988             :           This functions is part of general support for many possible tools to operate 
   26989             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   26990             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   26991             :           less than the set of pointers used by the AST file I/O. This is part of
   26992             :           work implemented by Andreas, and support tools such as the AST graph generation.
   26993             : 
   26994             :           \warning This function can return unexpected data members and thus the 
   26995             :                    order and the number of elements is unpredicable and subject 
   26996             :                    to change.
   26997             : 
   26998             :           \returns STL vector of pairs of SgNode* and strings
   26999             :        */
   27000             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   27001             : 
   27002             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   27003             : 
   27004             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   27005             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   27006             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   27007             : 
   27008             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   27009             :                    and subject to change.
   27010             :        */
   27011             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   27012             : 
   27013             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   27014             : 
   27015             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   27016             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   27017             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   27018             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   27019             : 
   27020             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   27021             : 
   27022             :           \returns long
   27023             :        */
   27024             :           virtual long getChildIndex( SgNode* childNode ) const override;
   27025             : 
   27026             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   27027             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   27028             :       /* \brief Constructor for use by AST File I/O Mechanism
   27029             : 
   27030             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   27031             :           which obtained via fast binary file I/O from disk.
   27032             :        */
   27033             :        // SgUnparse_Info( SgUnparse_InfoStorageClass& source );
   27034             : 
   27035             : 
   27036             : 
   27037             : 
   27038             : 
   27039             :  // JH (10/24/2005): methods added to support the ast file IO
   27040             :     private:
   27041             : 
   27042             :       /* name AST Memory Allocation Support Functions
   27043             :           \brief Memory allocations support....
   27044             : 
   27045             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   27046             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   27047             :           and support the AST File I/O Mechanism.
   27048             :        */
   27049             :       /* */
   27050             : 
   27051             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   27052             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   27053             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   27054             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   27055             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   27056             :           a correspinding one in the AST_FILE_IO class!
   27057             :        */
   27058             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   27059             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   27060             :       /* \brief Typedef used for low level memory access.
   27061             :        */
   27062             :        // typedef unsigned char* TestType;
   27063             : 
   27064             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   27065             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   27066             :       /* \brief Typedef used to hold memory addresses as values.
   27067             :        */
   27068             :        // typedef unsigned long  AddressType;
   27069             : 
   27070             : 
   27071             : 
   27072             :        // necessary, to have direct access to the p_freepointer and the private methods !
   27073             :       /*! \brief friend class declaration to support AST File I/O */
   27074             :           friend class AST_FILE_IO;
   27075             : 
   27076             :       /*! \brief friend class declaration to support AST File I/O */
   27077             :           friend class SgUnparse_InfoStorageClass;
   27078             : 
   27079             :       /*! \brief friend class declaration to support AST File I/O */
   27080             :           friend class AstSpecificDataManagingClass;
   27081             : 
   27082             :       /*! \brief friend class declaration to support AST File I/O */
   27083             :           friend class AstSpecificDataManagingClassStorageClass;
   27084             :     public:
   27085             :       /*! \brief IR node constructor to support AST File I/O */
   27086             :           SgUnparse_Info( const SgUnparse_InfoStorageClass& source );
   27087             : 
   27088             :  // private: // JJW hack
   27089             :        /*
   27090             :           name AST Memory Allocation Support Variables
   27091             :           Memory allocations support variables 
   27092             : 
   27093             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   27094             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   27095             :           and support the AST File I/O Mechanism.
   27096             :        */
   27097             :       /* */
   27098             : 
   27099             :     public:
   27100             : 
   27101             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   27102             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   27103             :       // virtual SgNode* addRegExpAttribute();
   27104             :       /*! \brief Support for AST matching using regular expression.
   27105             : 
   27106             :           This support is incomplete and the subject of current research to define 
   27107             :           RegEx trees to support inexact matching.
   27108             :        */
   27109             :           SgUnparse_Info* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   27110             : 
   27111             : // *** COMMON CODE SECTION ENDS HERE ***
   27112             : 
   27113             : 
   27114             : // End of memberFunctionString
   27115             : // Start of memberFunctionString
   27116             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   27117             : 
   27118             :      // the generated cast function
   27119             :      // friend ROSE_DLL_API SgUnparse_Info* isSgUnparse_Info ( SgNode* s );
   27120             : 
   27121             :           typedef SgSupport base_node_type;
   27122             : 
   27123             : 
   27124             : // End of memberFunctionString
   27125             : 
   27126             : 
   27127             :      public: 
   27128             :          int get_access_attribute() const;
   27129             :          void set_access_attribute(int access_attribute);
   27130             : 
   27131             : 
   27132             : 
   27133             : 
   27134             :      public: 
   27135             :          SgDeclarationStatement* get_declstatement_ptr() const;
   27136             :          void set_declstatement_ptr(SgDeclarationStatement* declstatement_ptr);
   27137             : 
   27138             :      public: 
   27139             :          SgDeclarationStatement* get_declaration_of_context() const;
   27140             :          void set_declaration_of_context(SgDeclarationStatement* declaration_of_context);
   27141             : 
   27142             :      public: 
   27143             :          SgNamedType* get_current_context() const;
   27144             :          void set_current_context(SgNamedType* current_context);
   27145             : 
   27146             :      public: 
   27147             :          SgName get_array_index_list() const;
   27148             :          void set_array_index_list(SgName array_index_list);
   27149             : 
   27150             : 
   27151             :      public: 
   27152             :          SgNamespaceDeclarationStatement* get_current_namespace() const;
   27153             :          void set_current_namespace(SgNamespaceDeclarationStatement* current_namespace);
   27154             : 
   27155             : 
   27156             :      public: 
   27157             :          bool get_outputCodeGenerationFormatDelimiters() const;
   27158             :          void set_outputCodeGenerationFormatDelimiters(bool outputCodeGenerationFormatDelimiters);
   27159             : 
   27160             :      public: 
   27161             :          SgQualifiedNamePtrList get_qualifiedNameList() const;
   27162             :          void set_qualifiedNameList(SgQualifiedNamePtrList qualifiedNameList);
   27163             : 
   27164             :      public: 
   27165             :          SgFunctionCallExp* get_current_function_call() const;
   27166             :          void set_current_function_call(SgFunctionCallExp* current_function_call);
   27167             : 
   27168             :      public: 
   27169             :          SgScopeStatement* get_current_scope() const;
   27170             :          void set_current_scope(SgScopeStatement* current_scope);
   27171             : 
   27172             :      public: 
   27173             :          SgNode* get_reference_node_for_qualification() const;
   27174             :          void set_reference_node_for_qualification(SgNode* reference_node_for_qualification);
   27175             : 
   27176             :      public: 
   27177             :          int get_name_qualification_length() const;
   27178             :          void set_name_qualification_length(int name_qualification_length);
   27179             : 
   27180             :      public: 
   27181             :          bool get_type_elaboration_required() const;
   27182             :          void set_type_elaboration_required(bool type_elaboration_required);
   27183             : 
   27184             :      public: 
   27185             :          bool get_global_qualification_required() const;
   27186             :          void set_global_qualification_required(bool global_qualification_required);
   27187             : 
   27188             :      public: 
   27189             :          int get_nestingLevel() const;
   27190             :          void set_nestingLevel(int nestingLevel);
   27191             : 
   27192             :      public: 
   27193             :          SgFile::languageOption_enum get_language() const;
   27194             :          void set_language(SgFile::languageOption_enum language);
   27195             : 
   27196             :      public: 
   27197             :          SgSourceFile* get_current_source_file() const;
   27198             :          void set_current_source_file(SgSourceFile* current_source_file);
   27199             : 
   27200             :      public: 
   27201             :          bool get_use_generated_name_for_template_arguments() const;
   27202             :          void set_use_generated_name_for_template_arguments(bool use_generated_name_for_template_arguments);
   27203             : 
   27204             :      public: 
   27205             :          bool get_user_defined_literal() const;
   27206             :          void set_user_defined_literal(bool user_defined_literal);
   27207             : 
   27208             :      public: 
   27209             :          SgDeclarationStatement* get_declstatement_associated_with_type() const;
   27210             :          void set_declstatement_associated_with_type(SgDeclarationStatement* declstatement_associated_with_type);
   27211             : 
   27212             : 
   27213             :      public: 
   27214             :          bool get_context_for_added_parentheses() const;
   27215             :          void set_context_for_added_parentheses(bool context_for_added_parentheses);
   27216             : 
   27217             : 
   27218             :      public: 
   27219             :          virtual ~SgUnparse_Info();
   27220             : 
   27221             :     protected:
   27222             : // Start of memberFunctionString
   27223             : SgBitVector p_unparse_attribute;
   27224             :           
   27225             : // End of memberFunctionString
   27226             : // Start of memberFunctionString
   27227             : int p_access_attribute;
   27228             :           
   27229             : // End of memberFunctionString
   27230             : // Start of memberFunctionString
   27231             : int p_nested_expression;
   27232             :           
   27233             : // End of memberFunctionString
   27234             : // Start of memberFunctionString
   27235             : std::string p_operator_name;
   27236             :           
   27237             : // End of memberFunctionString
   27238             : // Start of memberFunctionString
   27239             : SgName p_var_name;
   27240             :           
   27241             : // End of memberFunctionString
   27242             : // Start of memberFunctionString
   27243             : SgDeclarationStatement* p_declstatement_ptr;
   27244             :           
   27245             : // End of memberFunctionString
   27246             : // Start of memberFunctionString
   27247             : SgDeclarationStatement* p_declaration_of_context;
   27248             :           
   27249             : // End of memberFunctionString
   27250             : // Start of memberFunctionString
   27251             : SgNamedType* p_current_context;
   27252             :           
   27253             : // End of memberFunctionString
   27254             : // Start of memberFunctionString
   27255             : SgName p_array_index_list;
   27256             :           
   27257             : // End of memberFunctionString
   27258             : // Start of memberFunctionString
   27259             : static SgTypePtrList p_structureTagProcessingList;
   27260             :           
   27261             : // End of memberFunctionString
   27262             : // Start of memberFunctionString
   27263             : SgNamespaceDeclarationStatement* p_current_namespace;
   27264             :           
   27265             : // End of memberFunctionString
   27266             : // Start of memberFunctionString
   27267             : static bool p_forceDefaultConstructorToTriggerError;
   27268             :           
   27269             : // End of memberFunctionString
   27270             : // Start of memberFunctionString
   27271             : bool p_outputCodeGenerationFormatDelimiters;
   27272             :           
   27273             : // End of memberFunctionString
   27274             : // Start of memberFunctionString
   27275             : SgQualifiedNamePtrList p_qualifiedNameList;
   27276             :           
   27277             : // End of memberFunctionString
   27278             : // Start of memberFunctionString
   27279             : SgFunctionCallExp* p_current_function_call;
   27280             :           
   27281             : // End of memberFunctionString
   27282             : // Start of memberFunctionString
   27283             : SgScopeStatement* p_current_scope;
   27284             :           
   27285             : // End of memberFunctionString
   27286             : // Start of memberFunctionString
   27287             : SgNode* p_reference_node_for_qualification;
   27288             :           
   27289             : // End of memberFunctionString
   27290             : // Start of memberFunctionString
   27291             : int p_name_qualification_length;
   27292             :           
   27293             : // End of memberFunctionString
   27294             : // Start of memberFunctionString
   27295             : bool p_type_elaboration_required;
   27296             :           
   27297             : // End of memberFunctionString
   27298             : // Start of memberFunctionString
   27299             : bool p_global_qualification_required;
   27300             :           
   27301             : // End of memberFunctionString
   27302             : // Start of memberFunctionString
   27303             : int p_nestingLevel;
   27304             :           
   27305             : // End of memberFunctionString
   27306             : // Start of memberFunctionString
   27307             : SgFile::languageOption_enum p_language;
   27308             :           
   27309             : // End of memberFunctionString
   27310             : // Start of memberFunctionString
   27311             : SgSourceFile* p_current_source_file;
   27312             :           
   27313             : // End of memberFunctionString
   27314             : // Start of memberFunctionString
   27315             : bool p_use_generated_name_for_template_arguments;
   27316             :           
   27317             : // End of memberFunctionString
   27318             : // Start of memberFunctionString
   27319             : bool p_user_defined_literal;
   27320             :           
   27321             : // End of memberFunctionString
   27322             : // Start of memberFunctionString
   27323             : SgDeclarationStatement* p_declstatement_associated_with_type;
   27324             :           
   27325             : // End of memberFunctionString
   27326             : // Start of memberFunctionString
   27327             : static bool p_extern_C_with_braces;
   27328             :           
   27329             : // End of memberFunctionString
   27330             : // Start of memberFunctionString
   27331             : bool p_context_for_added_parentheses;
   27332             :           
   27333             : // End of memberFunctionString
   27334             : 
   27335             :     friend struct Rose::Traits::generated::describe_node_t<SgUnparse_Info>;
   27336             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgBitVector,&SgUnparse_Info::p_unparse_attribute>;
   27337             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, int,&SgUnparse_Info::p_access_attribute>;
   27338             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, int,&SgUnparse_Info::p_nested_expression>;
   27339             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, std::string,&SgUnparse_Info::p_operator_name>;
   27340             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgName,&SgUnparse_Info::p_var_name>;
   27341             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgDeclarationStatement*,&SgUnparse_Info::p_declstatement_ptr>;
   27342             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgDeclarationStatement*,&SgUnparse_Info::p_declaration_of_context>;
   27343             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgNamedType*,&SgUnparse_Info::p_current_context>;
   27344             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgName,&SgUnparse_Info::p_array_index_list>;
   27345             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgNamespaceDeclarationStatement*,&SgUnparse_Info::p_current_namespace>;
   27346             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, bool,&SgUnparse_Info::p_outputCodeGenerationFormatDelimiters>;
   27347             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgQualifiedNamePtrList,&SgUnparse_Info::p_qualifiedNameList>;
   27348             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgFunctionCallExp*,&SgUnparse_Info::p_current_function_call>;
   27349             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgScopeStatement*,&SgUnparse_Info::p_current_scope>;
   27350             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgNode*,&SgUnparse_Info::p_reference_node_for_qualification>;
   27351             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, int,&SgUnparse_Info::p_name_qualification_length>;
   27352             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, bool,&SgUnparse_Info::p_type_elaboration_required>;
   27353             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, bool,&SgUnparse_Info::p_global_qualification_required>;
   27354             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, int,&SgUnparse_Info::p_nestingLevel>;
   27355             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgFile::languageOption_enum,&SgUnparse_Info::p_language>;
   27356             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgSourceFile*,&SgUnparse_Info::p_current_source_file>;
   27357             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, bool,&SgUnparse_Info::p_use_generated_name_for_template_arguments>;
   27358             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, bool,&SgUnparse_Info::p_user_defined_literal>;
   27359             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, SgDeclarationStatement*,&SgUnparse_Info::p_declstatement_associated_with_type>;
   27360             :     friend struct Rose::Traits::generated::describe_field_t<SgUnparse_Info, bool,&SgUnparse_Info::p_context_for_added_parentheses>;
   27361             : 
   27362             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27363             : 
   27364             : 
   27365             :    };
   27366             : #endif
   27367             : 
   27368             : // postdeclarations for SgUnparse_Info
   27369             : 
   27370             : /* #line 27371 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27371             : 
   27372             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   27373             : 
   27374             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27375             : 
   27376             : 
   27377             : /* #line 27378 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27378             : 
   27379             : 
   27380             : 
   27381             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27382             : 
   27383             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   27384             : //      This code is automatically generated for each 
   27385             : //      terminal and non-terminal within the defined 
   27386             : //      grammar.  There is a simple way to change the 
   27387             : //      code to fix bugs etc.  See the ROSE README file
   27388             : //      for directions.
   27389             : 
   27390             : // tps: (02/22/2010): Adding DLL export requirements
   27391             : #include "rosedll.h"
   27392             : 
   27393             : // predeclarations for SgBaseClass
   27394             : 
   27395             : /* #line 27396 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27396             : 
   27397             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   27398             : 
   27399             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27400             : 
   27401             : #if 1
   27402             : // Class Definition for SgBaseClass
   27403             : class ROSE_DLL_API SgBaseClass  : public SgSupport
   27404             :    {
   27405             :      public:
   27406             : 
   27407             : 
   27408             : /* #line 27409 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27409             : 
   27410             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   27411             : // Start of memberFunctionString
   27412             : /* #line 5109 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   27413             : 
   27414             :      public:
   27415             :           void post_construction_initialization() override;
   27416             : 
   27417             :        // This function should be autogenerated
   27418             :        // SgBaseClass(int specifier=0, SgClassDeclaration* ptr = NULL, int dir = 0);
   27419             :           SgBaseClass(const SgBaseClass& ptr);
   27420             :       // ~SgBaseClass();
   27421             :           SgBaseClass& operator= (const SgBaseClass& ptr);
   27422             :       //  int get_base_specifier() const;
   27423             :       //  SgClassDeclaration* get_base_class() const;
   27424             :       //  SgClassDeclaration* replace_base_class(SgClassDeclaration*);
   27425             : 
   27426             :           bool operator== (const SgBaseClass& ) const;
   27427             :           bool operator< (const SgBaseClass&) const;
   27428             : 
   27429             : #if 0
   27430             :        // DQ (1/21/2019): This should be an automatically generated access function.
   27431             :        // DQ (4/25/2004): Part of new modifier interface
   27432             :           SgBaseClassModifier & get_baseClassModifier();
   27433             : #endif
   27434             : 
   27435             : #if ALT_FIXUP_COPY
   27436             :        // DQ (11/7/2007): These need to be called separately (see documentation)
   27437             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
   27438             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
   27439             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
   27440             : #else
   27441             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
   27442             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
   27443             : #endif
   27444             : 
   27445             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   27446             :           int get_name_qualification_length() const;
   27447             :           void set_name_qualification_length(int name_qualification_length);
   27448             : 
   27449             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   27450             :           bool get_type_elaboration_required() const;
   27451             :           void set_type_elaboration_required(bool type_elaboration_required);
   27452             : 
   27453             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   27454             :           bool get_global_qualification_required() const;
   27455             :           void set_global_qualification_required(bool global_qualification_required);
   27456             : 
   27457             : #if 0
   27458             :   // These are now autogenerated
   27459             :      private:
   27460             :           int p_specifier;
   27461             :           int p_direct;
   27462             :           SgClassDeclaration* p_ptr;
   27463             : #endif
   27464             : 
   27465             :        // DQ (5/29/2011): Added to support for new qualified name generation
   27466             :       //! This function generates the qualified name prefix to be used with the named declaration (only applied to restricted set of declarations where name qualification can be used).
   27467             :           SgName get_qualified_name_prefix() const;
   27468             : 
   27469             : 
   27470             : 
   27471             : // End of memberFunctionString
   27472             : // Start of memberFunctionString
   27473             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   27474             : 
   27475             : // *** COMMON CODE SECTION BEGINS HERE ***
   27476             : 
   27477             :     public:
   27478             : 
   27479             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   27480             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   27481             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   27482             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   27483             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   27484             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   27485             : 
   27486             :       /*! \brief returns a string representing the class name */
   27487             :           virtual std::string class_name() const override;
   27488             : 
   27489             :       /*! \brief returns new style SageIII enum values */
   27490             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   27491             : 
   27492             :       /*! \brief static variant value */
   27493             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   27494             :        // static const VariantT static_variant = V_SgBaseClass;
   27495             :           enum { static_variant = V_SgBaseClass };
   27496             : 
   27497             :        /* the generated cast function */
   27498             :       /*! \brief Casts pointer from base class to derived class */
   27499             :           ROSE_DLL_API friend       SgBaseClass* isSgBaseClass(       SgNode * s );
   27500             : 
   27501             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   27502             :           ROSE_DLL_API friend const SgBaseClass* isSgBaseClass( const SgNode * s );
   27503             : 
   27504             :      // ******************************************
   27505             :      // * Memory Pool / New / Delete
   27506             :      // ******************************************
   27507             : 
   27508             :      public:
   27509             :           /// \private
   27510             :           static const unsigned pool_size; //
   27511             :           /// \private
   27512             :           static std::vector<unsigned char *> pools; //
   27513             :           /// \private
   27514             :           static SgBaseClass * next_node; // 
   27515             : 
   27516             :           /// \private
   27517             :           static unsigned long initializeStorageClassArray(SgBaseClassStorageClass *); //
   27518             : 
   27519             :           /// \private
   27520             :           static void clearMemoryPool(); //
   27521             :           static void deleteMemoryPool(); //
   27522             : 
   27523             :           /// \private
   27524             :           static void extendMemoryPoolForFileIO(); //
   27525             : 
   27526             :           /// \private
   27527             :           static SgBaseClass * getPointerFromGlobalIndex(unsigned long); //
   27528             :           /// \private
   27529             :           static SgBaseClass * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   27530             : 
   27531             :           /// \private
   27532             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   27533             :           /// \private
   27534             :           static void resetValidFreepointers(); //
   27535             :           /// \private
   27536             :           static unsigned long getNumberOfLastValidPointer(); //
   27537             : 
   27538             : 
   27539             : #if defined(INLINE_FUNCTIONS)
   27540             :       /*! \brief returns pointer to newly allocated IR node */
   27541             :           inline void *operator new (size_t size);
   27542             : #else
   27543             :       /*! \brief returns pointer to newly allocated IR node */
   27544             :           void *operator new (size_t size);
   27545             : #endif
   27546             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   27547             :           void operator delete (void* pointer, size_t size);
   27548             : 
   27549             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   27550         840 :           void operator delete (void* pointer)
   27551             :              {
   27552             :             // This is the generated delete operator...
   27553         840 :                SgBaseClass::operator delete (pointer,sizeof(SgBaseClass));
   27554             :              }
   27555             : 
   27556             :       /*! \brief Returns the total number of IR nodes of this type */
   27557             :           static size_t numberOfNodes();
   27558             : 
   27559             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   27560             :           static size_t memoryUsage();
   27561             : 
   27562             :       // End of scope which started in IR nodes specific code 
   27563             :       /* */
   27564             : 
   27565             :       /* name Internal Functions
   27566             :           \brief Internal functions ... incomplete-documentation
   27567             : 
   27568             :           These functions have been made public as part of the design, but they are suggested for internal use 
   27569             :           or by particularly knowledgeable users for specialized tools or applications.
   27570             : 
   27571             :           \internal We could not make these private because they are required by user for special purposes. And 
   27572             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   27573             :          
   27574             :        */
   27575             : 
   27576             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   27577             :        // overridden in every class by *generated* implementation
   27578             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   27579             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   27580             :        // MS: 06/28/02 container of names of variables or container indices 
   27581             :        // used used in the traversal to access AST successor nodes
   27582             :        // overridden in every class by *generated* implementation
   27583             :       /*! \brief container of names of variables or container indices used used in the traversal
   27584             :           to access AST successor nodes overridden in every class by *generated* implementation */
   27585             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   27586             : 
   27587             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   27588             :        // than all the vector copies. The implementation for these functions is generated for each class.
   27589             :       /*! \brief return number of children in the traversal successor list */
   27590             :           virtual size_t get_numberOfTraversalSuccessors() override;
   27591             :       /*! \brief index-based access to traversal successors by index number */
   27592             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   27593             :       /*! \brief index-based access to traversal successors by child node */
   27594             :           virtual size_t get_childIndex(SgNode *child) override;
   27595             : 
   27596             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   27597             :        // MS: 08/16/2002 method for generating RTI information
   27598             :       /*! \brief return C++ Runtime-Time-Information */
   27599             :           virtual RTIReturnType roseRTI() override;
   27600             : #endif
   27601             :       /* */
   27602             : 
   27603             : 
   27604             : 
   27605             :       /* name Deprecated Functions
   27606             :           \brief Deprecated functions ... incomplete-documentation
   27607             : 
   27608             :           These functions have been deprecated from use.
   27609             :        */
   27610             :       /* */
   27611             : 
   27612             :       /*! returns a C style string (char*) representing the class name */
   27613             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   27614             : 
   27615             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   27616             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   27617             : #if 0
   27618             :       /*! returns old style Sage II enum values */
   27619             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   27620             :       /*! returns old style Sage II enum values */
   27621             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   27622             : #endif
   27623             :       /* */
   27624             : 
   27625             : 
   27626             : 
   27627             : 
   27628             :      public:
   27629             :       /* name Traversal Support Functions
   27630             :           \brief Traversal support functions ... incomplete-documentation
   27631             : 
   27632             :           These functions have been made public as part of the design, but they are suggested for internal use 
   27633             :           or by particularly knowledgable users for specialized tools or applications.
   27634             :        */
   27635             :       /* */
   27636             : 
   27637             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   27638             :        // (inferior to ROSE traversal mechanism, experimental).
   27639             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   27640             :        */
   27641             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   27642             : 
   27643             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   27644             :       /*! \brief support for the classic visitor pattern done in GoF */
   27645             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   27646             : 
   27647             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   27648             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   27649             :        */
   27650             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   27651             : 
   27652             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   27653             :        */
   27654             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   27655             : 
   27656             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   27657             :        // This traversal helps support internal tools that call static member functions.
   27658             :        // note: this function operates on the memory pools.
   27659             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   27660             :        */
   27661             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   27662             :       /* */
   27663             : 
   27664             : 
   27665             :      public:
   27666             :       /* name Memory Allocation Functions
   27667             :           \brief Memory allocations functions ... incomplete-documentation
   27668             : 
   27669             :           These functions have been made public as part of the design, but they are suggested for internal use 
   27670             :           or by particularly knowledgable users for specialized tools or applications.
   27671             :        */
   27672             :       /* */
   27673             : 
   27674             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   27675             : 
   27676             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   27677             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   27678             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   27679             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   27680             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   27681             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   27682             :           being used with the AST File I/O mechanism.
   27683             :        */
   27684             :           virtual bool isInMemoryPool() override;
   27685             : 
   27686             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   27687             : 
   27688             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   27689             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   27690             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   27691             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   27692             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   27693             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   27694             :           being used with the AST File I/O mechanism.
   27695             :        */
   27696             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   27697             : 
   27698             :       // DQ (4/30/2006): Modified to be a const function.
   27699             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   27700             : 
   27701             :           This functions is part of general support for many possible tools to operate 
   27702             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   27703             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   27704             :           less than the set of pointers used by the AST file I/O. This is part of
   27705             :           work implemented by Andreas, and support tools such as the AST graph generation.
   27706             : 
   27707             :           \warning This function can return unexpected data members and thus the 
   27708             :                    order and the number of elements is unpredicable and subject 
   27709             :                    to change.
   27710             : 
   27711             :           \returns STL vector of pairs of SgNode* and strings
   27712             :        */
   27713             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   27714             : 
   27715             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   27716             : 
   27717             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   27718             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   27719             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   27720             : 
   27721             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   27722             :                    and subject to change.
   27723             :        */
   27724             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   27725             : 
   27726             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   27727             : 
   27728             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   27729             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   27730             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   27731             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   27732             : 
   27733             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   27734             : 
   27735             :           \returns long
   27736             :        */
   27737             :           virtual long getChildIndex( SgNode* childNode ) const override;
   27738             : 
   27739             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   27740             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   27741             :       /* \brief Constructor for use by AST File I/O Mechanism
   27742             : 
   27743             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   27744             :           which obtained via fast binary file I/O from disk.
   27745             :        */
   27746             :        // SgBaseClass( SgBaseClassStorageClass& source );
   27747             : 
   27748             : 
   27749             : 
   27750             : 
   27751             : 
   27752             :  // JH (10/24/2005): methods added to support the ast file IO
   27753             :     private:
   27754             : 
   27755             :       /* name AST Memory Allocation Support Functions
   27756             :           \brief Memory allocations support....
   27757             : 
   27758             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   27759             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   27760             :           and support the AST File I/O Mechanism.
   27761             :        */
   27762             :       /* */
   27763             : 
   27764             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   27765             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   27766             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   27767             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   27768             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   27769             :           a correspinding one in the AST_FILE_IO class!
   27770             :        */
   27771             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   27772             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   27773             :       /* \brief Typedef used for low level memory access.
   27774             :        */
   27775             :        // typedef unsigned char* TestType;
   27776             : 
   27777             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   27778             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   27779             :       /* \brief Typedef used to hold memory addresses as values.
   27780             :        */
   27781             :        // typedef unsigned long  AddressType;
   27782             : 
   27783             : 
   27784             : 
   27785             :        // necessary, to have direct access to the p_freepointer and the private methods !
   27786             :       /*! \brief friend class declaration to support AST File I/O */
   27787             :           friend class AST_FILE_IO;
   27788             : 
   27789             :       /*! \brief friend class declaration to support AST File I/O */
   27790             :           friend class SgBaseClassStorageClass;
   27791             : 
   27792             :       /*! \brief friend class declaration to support AST File I/O */
   27793             :           friend class AstSpecificDataManagingClass;
   27794             : 
   27795             :       /*! \brief friend class declaration to support AST File I/O */
   27796             :           friend class AstSpecificDataManagingClassStorageClass;
   27797             :     public:
   27798             :       /*! \brief IR node constructor to support AST File I/O */
   27799             :           SgBaseClass( const SgBaseClassStorageClass& source );
   27800             : 
   27801             :  // private: // JJW hack
   27802             :        /*
   27803             :           name AST Memory Allocation Support Variables
   27804             :           Memory allocations support variables 
   27805             : 
   27806             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   27807             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   27808             :           and support the AST File I/O Mechanism.
   27809             :        */
   27810             :       /* */
   27811             : 
   27812             :     public:
   27813             : 
   27814             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   27815             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   27816             :       // virtual SgNode* addRegExpAttribute();
   27817             :       /*! \brief Support for AST matching using regular expression.
   27818             : 
   27819             :           This support is incomplete and the subject of current research to define 
   27820             :           RegEx trees to support inexact matching.
   27821             :        */
   27822             :           SgBaseClass* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   27823             : 
   27824             : // *** COMMON CODE SECTION ENDS HERE ***
   27825             : 
   27826             : 
   27827             : // End of memberFunctionString
   27828             : // Start of memberFunctionString
   27829             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   27830             : 
   27831             :      // the generated cast function
   27832             :      // friend ROSE_DLL_API SgBaseClass* isSgBaseClass ( SgNode* s );
   27833             : 
   27834             :           typedef SgSupport base_node_type;
   27835             : 
   27836             : 
   27837             : // End of memberFunctionString
   27838             : 
   27839             :      public: 
   27840             :          SgClassDeclaration* get_base_class() const;
   27841             :          void set_base_class(SgClassDeclaration* base_class);
   27842             : 
   27843             :      public: 
   27844             :          bool get_isDirectBaseClass() const;
   27845             :          void set_isDirectBaseClass(bool isDirectBaseClass);
   27846             : 
   27847             :      public: 
   27848             :          SgBaseClassModifier* get_baseClassModifier() const;
   27849             :          void set_baseClassModifier(SgBaseClassModifier* baseClassModifier);
   27850             : 
   27851             : 
   27852             : 
   27853             : 
   27854             : 
   27855             :      public: 
   27856             :          virtual ~SgBaseClass();
   27857             : 
   27858             : 
   27859             :      public: 
   27860             :          SgBaseClass(SgClassDeclaration* base_class = NULL, bool isDirectBaseClass = false); 
   27861             : 
   27862             :     protected:
   27863             : // Start of memberFunctionString
   27864             : SgClassDeclaration* p_base_class;
   27865             :           
   27866             : // End of memberFunctionString
   27867             : // Start of memberFunctionString
   27868             : bool p_isDirectBaseClass;
   27869             :           
   27870             : // End of memberFunctionString
   27871             : // Start of memberFunctionString
   27872             : SgBaseClassModifier* p_baseClassModifier;
   27873             :           
   27874             : // End of memberFunctionString
   27875             : // Start of memberFunctionString
   27876             : int p_name_qualification_length;
   27877             :           
   27878             : // End of memberFunctionString
   27879             : // Start of memberFunctionString
   27880             : bool p_type_elaboration_required;
   27881             :           
   27882             : // End of memberFunctionString
   27883             : // Start of memberFunctionString
   27884             : bool p_global_qualification_required;
   27885             :           
   27886             : // End of memberFunctionString
   27887             : 
   27888             :     friend struct Rose::Traits::generated::describe_node_t<SgBaseClass>;
   27889             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClass, SgClassDeclaration*,&SgBaseClass::p_base_class>;
   27890             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClass, bool,&SgBaseClass::p_isDirectBaseClass>;
   27891             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClass, SgBaseClassModifier*,&SgBaseClass::p_baseClassModifier>;
   27892             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClass, int,&SgBaseClass::p_name_qualification_length>;
   27893             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClass, bool,&SgBaseClass::p_type_elaboration_required>;
   27894             :     friend struct Rose::Traits::generated::describe_field_t<SgBaseClass, bool,&SgBaseClass::p_global_qualification_required>;
   27895             : 
   27896             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27897             : 
   27898             : 
   27899             :    };
   27900             : #endif
   27901             : 
   27902             : // postdeclarations for SgBaseClass
   27903             : 
   27904             : /* #line 27905 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27905             : 
   27906             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   27907             : 
   27908             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27909             : 
   27910             : 
   27911             : /* #line 27912 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27912             : 
   27913             : 
   27914             : 
   27915             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27916             : 
   27917             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   27918             : //      This code is automatically generated for each 
   27919             : //      terminal and non-terminal within the defined 
   27920             : //      grammar.  There is a simple way to change the 
   27921             : //      code to fix bugs etc.  See the ROSE README file
   27922             : //      for directions.
   27923             : 
   27924             : // tps: (02/22/2010): Adding DLL export requirements
   27925             : #include "rosedll.h"
   27926             : 
   27927             : // predeclarations for SgExpBaseClass
   27928             : 
   27929             : /* #line 27930 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27930             : 
   27931             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   27932             : 
   27933             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   27934             : 
   27935             : #if 1
   27936             : // Class Definition for SgExpBaseClass
   27937             : class ROSE_DLL_API SgExpBaseClass  : public SgBaseClass
   27938             :    {
   27939             :      public:
   27940             : 
   27941             : 
   27942             : /* #line 27943 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   27943             : 
   27944             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   27945             : // Start of memberFunctionString
   27946             : /* #line 5167 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   27947             : 
   27948             :      public:
   27949             :           void post_construction_initialization() override;
   27950             : 
   27951             : 
   27952             : // End of memberFunctionString
   27953             : // Start of memberFunctionString
   27954             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   27955             : 
   27956             : // *** COMMON CODE SECTION BEGINS HERE ***
   27957             : 
   27958             :     public:
   27959             : 
   27960             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   27961             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   27962             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   27963             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   27964             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   27965             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   27966             : 
   27967             :       /*! \brief returns a string representing the class name */
   27968             :           virtual std::string class_name() const override;
   27969             : 
   27970             :       /*! \brief returns new style SageIII enum values */
   27971             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   27972             : 
   27973             :       /*! \brief static variant value */
   27974             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   27975             :        // static const VariantT static_variant = V_SgExpBaseClass;
   27976             :           enum { static_variant = V_SgExpBaseClass };
   27977             : 
   27978             :        /* the generated cast function */
   27979             :       /*! \brief Casts pointer from base class to derived class */
   27980             :           ROSE_DLL_API friend       SgExpBaseClass* isSgExpBaseClass(       SgNode * s );
   27981             : 
   27982             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   27983             :           ROSE_DLL_API friend const SgExpBaseClass* isSgExpBaseClass( const SgNode * s );
   27984             : 
   27985             :      // ******************************************
   27986             :      // * Memory Pool / New / Delete
   27987             :      // ******************************************
   27988             : 
   27989             :      public:
   27990             :           /// \private
   27991             :           static const unsigned pool_size; //
   27992             :           /// \private
   27993             :           static std::vector<unsigned char *> pools; //
   27994             :           /// \private
   27995             :           static SgExpBaseClass * next_node; // 
   27996             : 
   27997             :           /// \private
   27998             :           static unsigned long initializeStorageClassArray(SgExpBaseClassStorageClass *); //
   27999             : 
   28000             :           /// \private
   28001             :           static void clearMemoryPool(); //
   28002             :           static void deleteMemoryPool(); //
   28003             : 
   28004             :           /// \private
   28005             :           static void extendMemoryPoolForFileIO(); //
   28006             : 
   28007             :           /// \private
   28008             :           static SgExpBaseClass * getPointerFromGlobalIndex(unsigned long); //
   28009             :           /// \private
   28010             :           static SgExpBaseClass * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   28011             : 
   28012             :           /// \private
   28013             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   28014             :           /// \private
   28015             :           static void resetValidFreepointers(); //
   28016             :           /// \private
   28017             :           static unsigned long getNumberOfLastValidPointer(); //
   28018             : 
   28019             : 
   28020             : #if defined(INLINE_FUNCTIONS)
   28021             :       /*! \brief returns pointer to newly allocated IR node */
   28022             :           inline void *operator new (size_t size);
   28023             : #else
   28024             :       /*! \brief returns pointer to newly allocated IR node */
   28025             :           void *operator new (size_t size);
   28026             : #endif
   28027             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   28028             :           void operator delete (void* pointer, size_t size);
   28029             : 
   28030             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   28031           0 :           void operator delete (void* pointer)
   28032             :              {
   28033             :             // This is the generated delete operator...
   28034           0 :                SgExpBaseClass::operator delete (pointer,sizeof(SgExpBaseClass));
   28035             :              }
   28036             : 
   28037             :       /*! \brief Returns the total number of IR nodes of this type */
   28038             :           static size_t numberOfNodes();
   28039             : 
   28040             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   28041             :           static size_t memoryUsage();
   28042             : 
   28043             :       // End of scope which started in IR nodes specific code 
   28044             :       /* */
   28045             : 
   28046             :       /* name Internal Functions
   28047             :           \brief Internal functions ... incomplete-documentation
   28048             : 
   28049             :           These functions have been made public as part of the design, but they are suggested for internal use 
   28050             :           or by particularly knowledgeable users for specialized tools or applications.
   28051             : 
   28052             :           \internal We could not make these private because they are required by user for special purposes. And 
   28053             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   28054             :          
   28055             :        */
   28056             : 
   28057             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   28058             :        // overridden in every class by *generated* implementation
   28059             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   28060             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   28061             :        // MS: 06/28/02 container of names of variables or container indices 
   28062             :        // used used in the traversal to access AST successor nodes
   28063             :        // overridden in every class by *generated* implementation
   28064             :       /*! \brief container of names of variables or container indices used used in the traversal
   28065             :           to access AST successor nodes overridden in every class by *generated* implementation */
   28066             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   28067             : 
   28068             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   28069             :        // than all the vector copies. The implementation for these functions is generated for each class.
   28070             :       /*! \brief return number of children in the traversal successor list */
   28071             :           virtual size_t get_numberOfTraversalSuccessors() override;
   28072             :       /*! \brief index-based access to traversal successors by index number */
   28073             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   28074             :       /*! \brief index-based access to traversal successors by child node */
   28075             :           virtual size_t get_childIndex(SgNode *child) override;
   28076             : 
   28077             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   28078             :        // MS: 08/16/2002 method for generating RTI information
   28079             :       /*! \brief return C++ Runtime-Time-Information */
   28080             :           virtual RTIReturnType roseRTI() override;
   28081             : #endif
   28082             :       /* */
   28083             : 
   28084             : 
   28085             : 
   28086             :       /* name Deprecated Functions
   28087             :           \brief Deprecated functions ... incomplete-documentation
   28088             : 
   28089             :           These functions have been deprecated from use.
   28090             :        */
   28091             :       /* */
   28092             : 
   28093             :       /*! returns a C style string (char*) representing the class name */
   28094             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   28095             : 
   28096             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   28097             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   28098             : #if 0
   28099             :       /*! returns old style Sage II enum values */
   28100             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   28101             :       /*! returns old style Sage II enum values */
   28102             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   28103             : #endif
   28104             :       /* */
   28105             : 
   28106             : 
   28107             : 
   28108             : 
   28109             :      public:
   28110             :       /* name Traversal Support Functions
   28111             :           \brief Traversal support functions ... incomplete-documentation
   28112             : 
   28113             :           These functions have been made public as part of the design, but they are suggested for internal use 
   28114             :           or by particularly knowledgable users for specialized tools or applications.
   28115             :        */
   28116             :       /* */
   28117             : 
   28118             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   28119             :        // (inferior to ROSE traversal mechanism, experimental).
   28120             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   28121             :        */
   28122             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   28123             : 
   28124             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   28125             :       /*! \brief support for the classic visitor pattern done in GoF */
   28126             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   28127             : 
   28128             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   28129             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   28130             :        */
   28131             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   28132             : 
   28133             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   28134             :        */
   28135             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   28136             : 
   28137             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   28138             :        // This traversal helps support internal tools that call static member functions.
   28139             :        // note: this function operates on the memory pools.
   28140             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   28141             :        */
   28142             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   28143             :       /* */
   28144             : 
   28145             : 
   28146             :      public:
   28147             :       /* name Memory Allocation Functions
   28148             :           \brief Memory allocations functions ... incomplete-documentation
   28149             : 
   28150             :           These functions have been made public as part of the design, but they are suggested for internal use 
   28151             :           or by particularly knowledgable users for specialized tools or applications.
   28152             :        */
   28153             :       /* */
   28154             : 
   28155             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   28156             : 
   28157             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   28158             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   28159             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   28160             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   28161             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   28162             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   28163             :           being used with the AST File I/O mechanism.
   28164             :        */
   28165             :           virtual bool isInMemoryPool() override;
   28166             : 
   28167             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   28168             : 
   28169             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   28170             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   28171             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   28172             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   28173             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   28174             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   28175             :           being used with the AST File I/O mechanism.
   28176             :        */
   28177             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   28178             : 
   28179             :       // DQ (4/30/2006): Modified to be a const function.
   28180             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   28181             : 
   28182             :           This functions is part of general support for many possible tools to operate 
   28183             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   28184             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   28185             :           less than the set of pointers used by the AST file I/O. This is part of
   28186             :           work implemented by Andreas, and support tools such as the AST graph generation.
   28187             : 
   28188             :           \warning This function can return unexpected data members and thus the 
   28189             :                    order and the number of elements is unpredicable and subject 
   28190             :                    to change.
   28191             : 
   28192             :           \returns STL vector of pairs of SgNode* and strings
   28193             :        */
   28194             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   28195             : 
   28196             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   28197             : 
   28198             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   28199             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   28200             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   28201             : 
   28202             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   28203             :                    and subject to change.
   28204             :        */
   28205             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   28206             : 
   28207             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   28208             : 
   28209             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   28210             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   28211             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   28212             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   28213             : 
   28214             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   28215             : 
   28216             :           \returns long
   28217             :        */
   28218             :           virtual long getChildIndex( SgNode* childNode ) const override;
   28219             : 
   28220             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   28221             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   28222             :       /* \brief Constructor for use by AST File I/O Mechanism
   28223             : 
   28224             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   28225             :           which obtained via fast binary file I/O from disk.
   28226             :        */
   28227             :        // SgExpBaseClass( SgExpBaseClassStorageClass& source );
   28228             : 
   28229             : 
   28230             : 
   28231             : 
   28232             : 
   28233             :  // JH (10/24/2005): methods added to support the ast file IO
   28234             :     private:
   28235             : 
   28236             :       /* name AST Memory Allocation Support Functions
   28237             :           \brief Memory allocations support....
   28238             : 
   28239             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   28240             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   28241             :           and support the AST File I/O Mechanism.
   28242             :        */
   28243             :       /* */
   28244             : 
   28245             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   28246             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   28247             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   28248             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   28249             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   28250             :           a correspinding one in the AST_FILE_IO class!
   28251             :        */
   28252             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   28253             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   28254             :       /* \brief Typedef used for low level memory access.
   28255             :        */
   28256             :        // typedef unsigned char* TestType;
   28257             : 
   28258             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   28259             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   28260             :       /* \brief Typedef used to hold memory addresses as values.
   28261             :        */
   28262             :        // typedef unsigned long  AddressType;
   28263             : 
   28264             : 
   28265             : 
   28266             :        // necessary, to have direct access to the p_freepointer and the private methods !
   28267             :       /*! \brief friend class declaration to support AST File I/O */
   28268             :           friend class AST_FILE_IO;
   28269             : 
   28270             :       /*! \brief friend class declaration to support AST File I/O */
   28271             :           friend class SgExpBaseClassStorageClass;
   28272             : 
   28273             :       /*! \brief friend class declaration to support AST File I/O */
   28274             :           friend class AstSpecificDataManagingClass;
   28275             : 
   28276             :       /*! \brief friend class declaration to support AST File I/O */
   28277             :           friend class AstSpecificDataManagingClassStorageClass;
   28278             :     public:
   28279             :       /*! \brief IR node constructor to support AST File I/O */
   28280             :           SgExpBaseClass( const SgExpBaseClassStorageClass& source );
   28281             : 
   28282             :  // private: // JJW hack
   28283             :        /*
   28284             :           name AST Memory Allocation Support Variables
   28285             :           Memory allocations support variables 
   28286             : 
   28287             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   28288             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   28289             :           and support the AST File I/O Mechanism.
   28290             :        */
   28291             :       /* */
   28292             : 
   28293             :     public:
   28294             : 
   28295             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   28296             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   28297             :       // virtual SgNode* addRegExpAttribute();
   28298             :       /*! \brief Support for AST matching using regular expression.
   28299             : 
   28300             :           This support is incomplete and the subject of current research to define 
   28301             :           RegEx trees to support inexact matching.
   28302             :        */
   28303             :           SgExpBaseClass* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   28304             : 
   28305             : // *** COMMON CODE SECTION ENDS HERE ***
   28306             : 
   28307             : 
   28308             : // End of memberFunctionString
   28309             : // Start of memberFunctionString
   28310             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   28311             : 
   28312             :      // the generated cast function
   28313             :      // friend ROSE_DLL_API SgExpBaseClass* isSgExpBaseClass ( SgNode* s );
   28314             : 
   28315             :           typedef SgBaseClass base_node_type;
   28316             : 
   28317             : 
   28318             : // End of memberFunctionString
   28319             : 
   28320             :      public: 
   28321             :          SgExpression* get_base_class_exp() const;
   28322             :          void set_base_class_exp(SgExpression* base_class_exp);
   28323             : 
   28324             : 
   28325             :      public: 
   28326             :          virtual ~SgExpBaseClass();
   28327             : 
   28328             : 
   28329             :      public: 
   28330             :          SgExpBaseClass(SgClassDeclaration* base_class = NULL, bool isDirectBaseClass = false, SgExpression* base_class_exp = NULL); 
   28331             : 
   28332             :     protected:
   28333             : // Start of memberFunctionString
   28334             : SgExpression* p_base_class_exp;
   28335             :           
   28336             : // End of memberFunctionString
   28337             : 
   28338             :     friend struct Rose::Traits::generated::describe_node_t<SgExpBaseClass>;
   28339             :     friend struct Rose::Traits::generated::describe_field_t<SgExpBaseClass, SgExpression*,&SgExpBaseClass::p_base_class_exp>;
   28340             : 
   28341             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28342             : 
   28343             : 
   28344             :    };
   28345             : #endif
   28346             : 
   28347             : // postdeclarations for SgExpBaseClass
   28348             : 
   28349             : /* #line 28350 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28350             : 
   28351             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   28352             : 
   28353             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28354             : 
   28355             : 
   28356             : /* #line 28357 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28357             : 
   28358             : 
   28359             : 
   28360             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28361             : 
   28362             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   28363             : //      This code is automatically generated for each 
   28364             : //      terminal and non-terminal within the defined 
   28365             : //      grammar.  There is a simple way to change the 
   28366             : //      code to fix bugs etc.  See the ROSE README file
   28367             : //      for directions.
   28368             : 
   28369             : // tps: (02/22/2010): Adding DLL export requirements
   28370             : #include "rosedll.h"
   28371             : 
   28372             : // predeclarations for SgNonrealBaseClass
   28373             : 
   28374             : /* #line 28375 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28375             : 
   28376             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   28377             : 
   28378             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28379             : 
   28380             : #if 1
   28381             : // Class Definition for SgNonrealBaseClass
   28382             : class ROSE_DLL_API SgNonrealBaseClass  : public SgBaseClass
   28383             :    {
   28384             :      public:
   28385             : 
   28386             : 
   28387             : /* #line 28388 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28388             : 
   28389             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   28390             : // Start of memberFunctionString
   28391             : /* #line 5172 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   28392             : 
   28393             :      public:
   28394             :           void post_construction_initialization() override;
   28395             : 
   28396             : 
   28397             : // End of memberFunctionString
   28398             : // Start of memberFunctionString
   28399             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   28400             : 
   28401             : // *** COMMON CODE SECTION BEGINS HERE ***
   28402             : 
   28403             :     public:
   28404             : 
   28405             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   28406             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   28407             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   28408             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   28409             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   28410             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   28411             : 
   28412             :       /*! \brief returns a string representing the class name */
   28413             :           virtual std::string class_name() const override;
   28414             : 
   28415             :       /*! \brief returns new style SageIII enum values */
   28416             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   28417             : 
   28418             :       /*! \brief static variant value */
   28419             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   28420             :        // static const VariantT static_variant = V_SgNonrealBaseClass;
   28421             :           enum { static_variant = V_SgNonrealBaseClass };
   28422             : 
   28423             :        /* the generated cast function */
   28424             :       /*! \brief Casts pointer from base class to derived class */
   28425             :           ROSE_DLL_API friend       SgNonrealBaseClass* isSgNonrealBaseClass(       SgNode * s );
   28426             : 
   28427             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   28428             :           ROSE_DLL_API friend const SgNonrealBaseClass* isSgNonrealBaseClass( const SgNode * s );
   28429             : 
   28430             :      // ******************************************
   28431             :      // * Memory Pool / New / Delete
   28432             :      // ******************************************
   28433             : 
   28434             :      public:
   28435             :           /// \private
   28436             :           static const unsigned pool_size; //
   28437             :           /// \private
   28438             :           static std::vector<unsigned char *> pools; //
   28439             :           /// \private
   28440             :           static SgNonrealBaseClass * next_node; // 
   28441             : 
   28442             :           /// \private
   28443             :           static unsigned long initializeStorageClassArray(SgNonrealBaseClassStorageClass *); //
   28444             : 
   28445             :           /// \private
   28446             :           static void clearMemoryPool(); //
   28447             :           static void deleteMemoryPool(); //
   28448             : 
   28449             :           /// \private
   28450             :           static void extendMemoryPoolForFileIO(); //
   28451             : 
   28452             :           /// \private
   28453             :           static SgNonrealBaseClass * getPointerFromGlobalIndex(unsigned long); //
   28454             :           /// \private
   28455             :           static SgNonrealBaseClass * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   28456             : 
   28457             :           /// \private
   28458             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   28459             :           /// \private
   28460             :           static void resetValidFreepointers(); //
   28461             :           /// \private
   28462             :           static unsigned long getNumberOfLastValidPointer(); //
   28463             : 
   28464             : 
   28465             : #if defined(INLINE_FUNCTIONS)
   28466             :       /*! \brief returns pointer to newly allocated IR node */
   28467             :           inline void *operator new (size_t size);
   28468             : #else
   28469             :       /*! \brief returns pointer to newly allocated IR node */
   28470             :           void *operator new (size_t size);
   28471             : #endif
   28472             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   28473             :           void operator delete (void* pointer, size_t size);
   28474             : 
   28475             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   28476         400 :           void operator delete (void* pointer)
   28477             :              {
   28478             :             // This is the generated delete operator...
   28479         400 :                SgNonrealBaseClass::operator delete (pointer,sizeof(SgNonrealBaseClass));
   28480             :              }
   28481             : 
   28482             :       /*! \brief Returns the total number of IR nodes of this type */
   28483             :           static size_t numberOfNodes();
   28484             : 
   28485             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   28486             :           static size_t memoryUsage();
   28487             : 
   28488             :       // End of scope which started in IR nodes specific code 
   28489             :       /* */
   28490             : 
   28491             :       /* name Internal Functions
   28492             :           \brief Internal functions ... incomplete-documentation
   28493             : 
   28494             :           These functions have been made public as part of the design, but they are suggested for internal use 
   28495             :           or by particularly knowledgeable users for specialized tools or applications.
   28496             : 
   28497             :           \internal We could not make these private because they are required by user for special purposes. And 
   28498             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   28499             :          
   28500             :        */
   28501             : 
   28502             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   28503             :        // overridden in every class by *generated* implementation
   28504             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   28505             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   28506             :        // MS: 06/28/02 container of names of variables or container indices 
   28507             :        // used used in the traversal to access AST successor nodes
   28508             :        // overridden in every class by *generated* implementation
   28509             :       /*! \brief container of names of variables or container indices used used in the traversal
   28510             :           to access AST successor nodes overridden in every class by *generated* implementation */
   28511             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   28512             : 
   28513             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   28514             :        // than all the vector copies. The implementation for these functions is generated for each class.
   28515             :       /*! \brief return number of children in the traversal successor list */
   28516             :           virtual size_t get_numberOfTraversalSuccessors() override;
   28517             :       /*! \brief index-based access to traversal successors by index number */
   28518             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   28519             :       /*! \brief index-based access to traversal successors by child node */
   28520             :           virtual size_t get_childIndex(SgNode *child) override;
   28521             : 
   28522             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   28523             :        // MS: 08/16/2002 method for generating RTI information
   28524             :       /*! \brief return C++ Runtime-Time-Information */
   28525             :           virtual RTIReturnType roseRTI() override;
   28526             : #endif
   28527             :       /* */
   28528             : 
   28529             : 
   28530             : 
   28531             :       /* name Deprecated Functions
   28532             :           \brief Deprecated functions ... incomplete-documentation
   28533             : 
   28534             :           These functions have been deprecated from use.
   28535             :        */
   28536             :       /* */
   28537             : 
   28538             :       /*! returns a C style string (char*) representing the class name */
   28539             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   28540             : 
   28541             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   28542             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   28543             : #if 0
   28544             :       /*! returns old style Sage II enum values */
   28545             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   28546             :       /*! returns old style Sage II enum values */
   28547             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   28548             : #endif
   28549             :       /* */
   28550             : 
   28551             : 
   28552             : 
   28553             : 
   28554             :      public:
   28555             :       /* name Traversal Support Functions
   28556             :           \brief Traversal support functions ... incomplete-documentation
   28557             : 
   28558             :           These functions have been made public as part of the design, but they are suggested for internal use 
   28559             :           or by particularly knowledgable users for specialized tools or applications.
   28560             :        */
   28561             :       /* */
   28562             : 
   28563             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   28564             :        // (inferior to ROSE traversal mechanism, experimental).
   28565             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   28566             :        */
   28567             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   28568             : 
   28569             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   28570             :       /*! \brief support for the classic visitor pattern done in GoF */
   28571             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   28572             : 
   28573             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   28574             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   28575             :        */
   28576             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   28577             : 
   28578             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   28579             :        */
   28580             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   28581             : 
   28582             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   28583             :        // This traversal helps support internal tools that call static member functions.
   28584             :        // note: this function operates on the memory pools.
   28585             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   28586             :        */
   28587             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   28588             :       /* */
   28589             : 
   28590             : 
   28591             :      public:
   28592             :       /* name Memory Allocation Functions
   28593             :           \brief Memory allocations functions ... incomplete-documentation
   28594             : 
   28595             :           These functions have been made public as part of the design, but they are suggested for internal use 
   28596             :           or by particularly knowledgable users for specialized tools or applications.
   28597             :        */
   28598             :       /* */
   28599             : 
   28600             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   28601             : 
   28602             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   28603             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   28604             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   28605             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   28606             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   28607             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   28608             :           being used with the AST File I/O mechanism.
   28609             :        */
   28610             :           virtual bool isInMemoryPool() override;
   28611             : 
   28612             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   28613             : 
   28614             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   28615             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   28616             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   28617             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   28618             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   28619             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   28620             :           being used with the AST File I/O mechanism.
   28621             :        */
   28622             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   28623             : 
   28624             :       // DQ (4/30/2006): Modified to be a const function.
   28625             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   28626             : 
   28627             :           This functions is part of general support for many possible tools to operate 
   28628             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   28629             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   28630             :           less than the set of pointers used by the AST file I/O. This is part of
   28631             :           work implemented by Andreas, and support tools such as the AST graph generation.
   28632             : 
   28633             :           \warning This function can return unexpected data members and thus the 
   28634             :                    order and the number of elements is unpredicable and subject 
   28635             :                    to change.
   28636             : 
   28637             :           \returns STL vector of pairs of SgNode* and strings
   28638             :        */
   28639             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   28640             : 
   28641             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   28642             : 
   28643             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   28644             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   28645             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   28646             : 
   28647             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   28648             :                    and subject to change.
   28649             :        */
   28650             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   28651             : 
   28652             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   28653             : 
   28654             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   28655             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   28656             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   28657             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   28658             : 
   28659             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   28660             : 
   28661             :           \returns long
   28662             :        */
   28663             :           virtual long getChildIndex( SgNode* childNode ) const override;
   28664             : 
   28665             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   28666             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   28667             :       /* \brief Constructor for use by AST File I/O Mechanism
   28668             : 
   28669             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   28670             :           which obtained via fast binary file I/O from disk.
   28671             :        */
   28672             :        // SgNonrealBaseClass( SgNonrealBaseClassStorageClass& source );
   28673             : 
   28674             : 
   28675             : 
   28676             : 
   28677             : 
   28678             :  // JH (10/24/2005): methods added to support the ast file IO
   28679             :     private:
   28680             : 
   28681             :       /* name AST Memory Allocation Support Functions
   28682             :           \brief Memory allocations support....
   28683             : 
   28684             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   28685             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   28686             :           and support the AST File I/O Mechanism.
   28687             :        */
   28688             :       /* */
   28689             : 
   28690             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   28691             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   28692             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   28693             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   28694             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   28695             :           a correspinding one in the AST_FILE_IO class!
   28696             :        */
   28697             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   28698             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   28699             :       /* \brief Typedef used for low level memory access.
   28700             :        */
   28701             :        // typedef unsigned char* TestType;
   28702             : 
   28703             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   28704             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   28705             :       /* \brief Typedef used to hold memory addresses as values.
   28706             :        */
   28707             :        // typedef unsigned long  AddressType;
   28708             : 
   28709             : 
   28710             : 
   28711             :        // necessary, to have direct access to the p_freepointer and the private methods !
   28712             :       /*! \brief friend class declaration to support AST File I/O */
   28713             :           friend class AST_FILE_IO;
   28714             : 
   28715             :       /*! \brief friend class declaration to support AST File I/O */
   28716             :           friend class SgNonrealBaseClassStorageClass;
   28717             : 
   28718             :       /*! \brief friend class declaration to support AST File I/O */
   28719             :           friend class AstSpecificDataManagingClass;
   28720             : 
   28721             :       /*! \brief friend class declaration to support AST File I/O */
   28722             :           friend class AstSpecificDataManagingClassStorageClass;
   28723             :     public:
   28724             :       /*! \brief IR node constructor to support AST File I/O */
   28725             :           SgNonrealBaseClass( const SgNonrealBaseClassStorageClass& source );
   28726             : 
   28727             :  // private: // JJW hack
   28728             :        /*
   28729             :           name AST Memory Allocation Support Variables
   28730             :           Memory allocations support variables 
   28731             : 
   28732             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   28733             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   28734             :           and support the AST File I/O Mechanism.
   28735             :        */
   28736             :       /* */
   28737             : 
   28738             :     public:
   28739             : 
   28740             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   28741             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   28742             :       // virtual SgNode* addRegExpAttribute();
   28743             :       /*! \brief Support for AST matching using regular expression.
   28744             : 
   28745             :           This support is incomplete and the subject of current research to define 
   28746             :           RegEx trees to support inexact matching.
   28747             :        */
   28748             :           SgNonrealBaseClass* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   28749             : 
   28750             : // *** COMMON CODE SECTION ENDS HERE ***
   28751             : 
   28752             : 
   28753             : // End of memberFunctionString
   28754             : // Start of memberFunctionString
   28755             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   28756             : 
   28757             :      // the generated cast function
   28758             :      // friend ROSE_DLL_API SgNonrealBaseClass* isSgNonrealBaseClass ( SgNode* s );
   28759             : 
   28760             :           typedef SgBaseClass base_node_type;
   28761             : 
   28762             : 
   28763             : // End of memberFunctionString
   28764             : 
   28765             :      public: 
   28766             :          SgNonrealDecl* get_base_class_nonreal() const;
   28767             :          void set_base_class_nonreal(SgNonrealDecl* base_class_nonreal);
   28768             : 
   28769             : 
   28770             :      public: 
   28771             :          virtual ~SgNonrealBaseClass();
   28772             : 
   28773             : 
   28774             :      public: 
   28775             :          SgNonrealBaseClass(SgClassDeclaration* base_class = NULL, bool isDirectBaseClass = false, SgNonrealDecl* base_class_nonreal = NULL); 
   28776             : 
   28777             :     protected:
   28778             : // Start of memberFunctionString
   28779             : SgNonrealDecl* p_base_class_nonreal;
   28780             :           
   28781             : // End of memberFunctionString
   28782             : 
   28783             :     friend struct Rose::Traits::generated::describe_node_t<SgNonrealBaseClass>;
   28784             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealBaseClass, SgNonrealDecl*,&SgNonrealBaseClass::p_base_class_nonreal>;
   28785             : 
   28786             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28787             : 
   28788             : 
   28789             :    };
   28790             : #endif
   28791             : 
   28792             : // postdeclarations for SgNonrealBaseClass
   28793             : 
   28794             : /* #line 28795 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28795             : 
   28796             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   28797             : 
   28798             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28799             : 
   28800             : 
   28801             : /* #line 28802 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28802             : 
   28803             : 
   28804             : 
   28805             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28806             : 
   28807             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   28808             : //      This code is automatically generated for each 
   28809             : //      terminal and non-terminal within the defined 
   28810             : //      grammar.  There is a simple way to change the 
   28811             : //      code to fix bugs etc.  See the ROSE README file
   28812             : //      for directions.
   28813             : 
   28814             : // tps: (02/22/2010): Adding DLL export requirements
   28815             : #include "rosedll.h"
   28816             : 
   28817             : // predeclarations for SgTypedefSeq
   28818             : 
   28819             : /* #line 28820 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28820             : 
   28821             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   28822             : 
   28823             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   28824             : 
   28825             : #if 1
   28826             : // Class Definition for SgTypedefSeq
   28827             : class ROSE_DLL_API SgTypedefSeq  : public SgSupport
   28828             :    {
   28829             :      public:
   28830             : 
   28831             : 
   28832             : /* #line 28833 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   28833             : 
   28834             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   28835             : // Start of memberFunctionString
   28836             : /* #line 21009 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   28837             : 
   28838             :       // Get a const list of input types (types of the parameters list) to this function type (from a cost functionType object)
   28839             :       //! This is the const STL container access function for the STL list of typedef types using the type pointing to this SgTypedefSeq.
   28840             :           const SgTypePtrList & get_typedefs() const;
   28841             : 
   28842             :       // Get the list of input types (types of the parameters list) to this function type
   28843             :       //! This is the non-const STL container access function for the STL list of typedef types using the type pointing to this SgTypedefSeq.
   28844             :           SgTypePtrList & get_typedefs();
   28845             : 
   28846             :       //! Append new typedef to typedef type list
   28847             :           void append_typedef( SgType* what);
   28848             : 
   28849             :       //! Insert new typedef to typedef type list
   28850             :           void insert_typedef(const SgTypePtrList::iterator& where, SgType* what);
   28851             : 
   28852             : 
   28853             : 
   28854             : // End of memberFunctionString
   28855             : // Start of memberFunctionString
   28856             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   28857             : 
   28858             : // *** COMMON CODE SECTION BEGINS HERE ***
   28859             : 
   28860             :     public:
   28861             : 
   28862             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   28863             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   28864             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   28865             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   28866             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   28867             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   28868             : 
   28869             :       /*! \brief returns a string representing the class name */
   28870             :           virtual std::string class_name() const override;
   28871             : 
   28872             :       /*! \brief returns new style SageIII enum values */
   28873             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   28874             : 
   28875             :       /*! \brief static variant value */
   28876             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   28877             :        // static const VariantT static_variant = V_SgTypedefSeq;
   28878             :           enum { static_variant = V_SgTypedefSeq };
   28879             : 
   28880             :        /* the generated cast function */
   28881             :       /*! \brief Casts pointer from base class to derived class */
   28882             :           ROSE_DLL_API friend       SgTypedefSeq* isSgTypedefSeq(       SgNode * s );
   28883             : 
   28884             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   28885             :           ROSE_DLL_API friend const SgTypedefSeq* isSgTypedefSeq( const SgNode * s );
   28886             : 
   28887             :      // ******************************************
   28888             :      // * Memory Pool / New / Delete
   28889             :      // ******************************************
   28890             : 
   28891             :      public:
   28892             :           /// \private
   28893             :           static const unsigned pool_size; //
   28894             :           /// \private
   28895             :           static std::vector<unsigned char *> pools; //
   28896             :           /// \private
   28897             :           static SgTypedefSeq * next_node; // 
   28898             : 
   28899             :           /// \private
   28900             :           static unsigned long initializeStorageClassArray(SgTypedefSeqStorageClass *); //
   28901             : 
   28902             :           /// \private
   28903             :           static void clearMemoryPool(); //
   28904             :           static void deleteMemoryPool(); //
   28905             : 
   28906             :           /// \private
   28907             :           static void extendMemoryPoolForFileIO(); //
   28908             : 
   28909             :           /// \private
   28910             :           static SgTypedefSeq * getPointerFromGlobalIndex(unsigned long); //
   28911             :           /// \private
   28912             :           static SgTypedefSeq * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   28913             : 
   28914             :           /// \private
   28915             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   28916             :           /// \private
   28917             :           static void resetValidFreepointers(); //
   28918             :           /// \private
   28919             :           static unsigned long getNumberOfLastValidPointer(); //
   28920             : 
   28921             : 
   28922             : #if defined(INLINE_FUNCTIONS)
   28923             :       /*! \brief returns pointer to newly allocated IR node */
   28924             :           inline void *operator new (size_t size);
   28925             : #else
   28926             :       /*! \brief returns pointer to newly allocated IR node */
   28927             :           void *operator new (size_t size);
   28928             : #endif
   28929             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   28930             :           void operator delete (void* pointer, size_t size);
   28931             : 
   28932             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   28933      197209 :           void operator delete (void* pointer)
   28934             :              {
   28935             :             // This is the generated delete operator...
   28936      197209 :                SgTypedefSeq::operator delete (pointer,sizeof(SgTypedefSeq));
   28937             :              }
   28938             : 
   28939             :       /*! \brief Returns the total number of IR nodes of this type */
   28940             :           static size_t numberOfNodes();
   28941             : 
   28942             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   28943             :           static size_t memoryUsage();
   28944             : 
   28945             :       // End of scope which started in IR nodes specific code 
   28946             :       /* */
   28947             : 
   28948             :       /* name Internal Functions
   28949             :           \brief Internal functions ... incomplete-documentation
   28950             : 
   28951             :           These functions have been made public as part of the design, but they are suggested for internal use 
   28952             :           or by particularly knowledgeable users for specialized tools or applications.
   28953             : 
   28954             :           \internal We could not make these private because they are required by user for special purposes. And 
   28955             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   28956             :          
   28957             :        */
   28958             : 
   28959             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   28960             :        // overridden in every class by *generated* implementation
   28961             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   28962             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   28963             :        // MS: 06/28/02 container of names of variables or container indices 
   28964             :        // used used in the traversal to access AST successor nodes
   28965             :        // overridden in every class by *generated* implementation
   28966             :       /*! \brief container of names of variables or container indices used used in the traversal
   28967             :           to access AST successor nodes overridden in every class by *generated* implementation */
   28968             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   28969             : 
   28970             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   28971             :        // than all the vector copies. The implementation for these functions is generated for each class.
   28972             :       /*! \brief return number of children in the traversal successor list */
   28973             :           virtual size_t get_numberOfTraversalSuccessors() override;
   28974             :       /*! \brief index-based access to traversal successors by index number */
   28975             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   28976             :       /*! \brief index-based access to traversal successors by child node */
   28977             :           virtual size_t get_childIndex(SgNode *child) override;
   28978             : 
   28979             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   28980             :        // MS: 08/16/2002 method for generating RTI information
   28981             :       /*! \brief return C++ Runtime-Time-Information */
   28982             :           virtual RTIReturnType roseRTI() override;
   28983             : #endif
   28984             :       /* */
   28985             : 
   28986             : 
   28987             : 
   28988             :       /* name Deprecated Functions
   28989             :           \brief Deprecated functions ... incomplete-documentation
   28990             : 
   28991             :           These functions have been deprecated from use.
   28992             :        */
   28993             :       /* */
   28994             : 
   28995             :       /*! returns a C style string (char*) representing the class name */
   28996             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   28997             : 
   28998             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   28999             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   29000             : #if 0
   29001             :       /*! returns old style Sage II enum values */
   29002             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   29003             :       /*! returns old style Sage II enum values */
   29004             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   29005             : #endif
   29006             :       /* */
   29007             : 
   29008             : 
   29009             : 
   29010             : 
   29011             :      public:
   29012             :       /* name Traversal Support Functions
   29013             :           \brief Traversal support functions ... incomplete-documentation
   29014             : 
   29015             :           These functions have been made public as part of the design, but they are suggested for internal use 
   29016             :           or by particularly knowledgable users for specialized tools or applications.
   29017             :        */
   29018             :       /* */
   29019             : 
   29020             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   29021             :        // (inferior to ROSE traversal mechanism, experimental).
   29022             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   29023             :        */
   29024             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   29025             : 
   29026             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   29027             :       /*! \brief support for the classic visitor pattern done in GoF */
   29028             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   29029             : 
   29030             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   29031             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   29032             :        */
   29033             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   29034             : 
   29035             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   29036             :        */
   29037             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   29038             : 
   29039             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   29040             :        // This traversal helps support internal tools that call static member functions.
   29041             :        // note: this function operates on the memory pools.
   29042             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   29043             :        */
   29044             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   29045             :       /* */
   29046             : 
   29047             : 
   29048             :      public:
   29049             :       /* name Memory Allocation Functions
   29050             :           \brief Memory allocations functions ... incomplete-documentation
   29051             : 
   29052             :           These functions have been made public as part of the design, but they are suggested for internal use 
   29053             :           or by particularly knowledgable users for specialized tools or applications.
   29054             :        */
   29055             :       /* */
   29056             : 
   29057             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   29058             : 
   29059             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   29060             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   29061             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   29062             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   29063             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   29064             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   29065             :           being used with the AST File I/O mechanism.
   29066             :        */
   29067             :           virtual bool isInMemoryPool() override;
   29068             : 
   29069             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   29070             : 
   29071             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   29072             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   29073             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   29074             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   29075             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   29076             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   29077             :           being used with the AST File I/O mechanism.
   29078             :        */
   29079             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   29080             : 
   29081             :       // DQ (4/30/2006): Modified to be a const function.
   29082             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   29083             : 
   29084             :           This functions is part of general support for many possible tools to operate 
   29085             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   29086             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   29087             :           less than the set of pointers used by the AST file I/O. This is part of
   29088             :           work implemented by Andreas, and support tools such as the AST graph generation.
   29089             : 
   29090             :           \warning This function can return unexpected data members and thus the 
   29091             :                    order and the number of elements is unpredicable and subject 
   29092             :                    to change.
   29093             : 
   29094             :           \returns STL vector of pairs of SgNode* and strings
   29095             :        */
   29096             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   29097             : 
   29098             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   29099             : 
   29100             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   29101             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   29102             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   29103             : 
   29104             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   29105             :                    and subject to change.
   29106             :        */
   29107             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   29108             : 
   29109             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   29110             : 
   29111             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   29112             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   29113             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   29114             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   29115             : 
   29116             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   29117             : 
   29118             :           \returns long
   29119             :        */
   29120             :           virtual long getChildIndex( SgNode* childNode ) const override;
   29121             : 
   29122             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   29123             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   29124             :       /* \brief Constructor for use by AST File I/O Mechanism
   29125             : 
   29126             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   29127             :           which obtained via fast binary file I/O from disk.
   29128             :        */
   29129             :        // SgTypedefSeq( SgTypedefSeqStorageClass& source );
   29130             : 
   29131             : 
   29132             : 
   29133             : 
   29134             : 
   29135             :  // JH (10/24/2005): methods added to support the ast file IO
   29136             :     private:
   29137             : 
   29138             :       /* name AST Memory Allocation Support Functions
   29139             :           \brief Memory allocations support....
   29140             : 
   29141             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   29142             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   29143             :           and support the AST File I/O Mechanism.
   29144             :        */
   29145             :       /* */
   29146             : 
   29147             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   29148             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   29149             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   29150             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   29151             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   29152             :           a correspinding one in the AST_FILE_IO class!
   29153             :        */
   29154             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   29155             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   29156             :       /* \brief Typedef used for low level memory access.
   29157             :        */
   29158             :        // typedef unsigned char* TestType;
   29159             : 
   29160             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   29161             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   29162             :       /* \brief Typedef used to hold memory addresses as values.
   29163             :        */
   29164             :        // typedef unsigned long  AddressType;
   29165             : 
   29166             : 
   29167             : 
   29168             :        // necessary, to have direct access to the p_freepointer and the private methods !
   29169             :       /*! \brief friend class declaration to support AST File I/O */
   29170             :           friend class AST_FILE_IO;
   29171             : 
   29172             :       /*! \brief friend class declaration to support AST File I/O */
   29173             :           friend class SgTypedefSeqStorageClass;
   29174             : 
   29175             :       /*! \brief friend class declaration to support AST File I/O */
   29176             :           friend class AstSpecificDataManagingClass;
   29177             : 
   29178             :       /*! \brief friend class declaration to support AST File I/O */
   29179             :           friend class AstSpecificDataManagingClassStorageClass;
   29180             :     public:
   29181             :       /*! \brief IR node constructor to support AST File I/O */
   29182             :           SgTypedefSeq( const SgTypedefSeqStorageClass& source );
   29183             : 
   29184             :  // private: // JJW hack
   29185             :        /*
   29186             :           name AST Memory Allocation Support Variables
   29187             :           Memory allocations support variables 
   29188             : 
   29189             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   29190             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   29191             :           and support the AST File I/O Mechanism.
   29192             :        */
   29193             :       /* */
   29194             : 
   29195             :     public:
   29196             : 
   29197             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   29198             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   29199             :       // virtual SgNode* addRegExpAttribute();
   29200             :       /*! \brief Support for AST matching using regular expression.
   29201             : 
   29202             :           This support is incomplete and the subject of current research to define 
   29203             :           RegEx trees to support inexact matching.
   29204             :        */
   29205             :           SgTypedefSeq* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   29206             : 
   29207             : // *** COMMON CODE SECTION ENDS HERE ***
   29208             : 
   29209             : 
   29210             : // End of memberFunctionString
   29211             : // Start of memberFunctionString
   29212             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   29213             : 
   29214             :      // the generated cast function
   29215             :      // friend ROSE_DLL_API SgTypedefSeq* isSgTypedefSeq ( SgNode* s );
   29216             : 
   29217             :           typedef SgSupport base_node_type;
   29218             : 
   29219             : 
   29220             : // End of memberFunctionString
   29221             : 
   29222             : 
   29223             : 
   29224             :      public: 
   29225             :          virtual ~SgTypedefSeq();
   29226             : 
   29227             : 
   29228             :      public: 
   29229             :          SgTypedefSeq(); 
   29230             : 
   29231             :     protected:
   29232             : // Start of memberFunctionString
   29233             : SgTypePtrList p_typedefs;
   29234             :           
   29235             : // End of memberFunctionString
   29236             : 
   29237             :     friend struct Rose::Traits::generated::describe_node_t<SgTypedefSeq>;
   29238             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefSeq, SgTypePtrList,&SgTypedefSeq::p_typedefs>;
   29239             : 
   29240             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29241             : 
   29242             : 
   29243             :    };
   29244             : #endif
   29245             : 
   29246             : // postdeclarations for SgTypedefSeq
   29247             : 
   29248             : /* #line 29249 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29249             : 
   29250             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   29251             : 
   29252             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29253             : 
   29254             : 
   29255             : /* #line 29256 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29256             : 
   29257             : 
   29258             : 
   29259             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29260             : 
   29261             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   29262             : //      This code is automatically generated for each 
   29263             : //      terminal and non-terminal within the defined 
   29264             : //      grammar.  There is a simple way to change the 
   29265             : //      code to fix bugs etc.  See the ROSE README file
   29266             : //      for directions.
   29267             : 
   29268             : // tps: (02/22/2010): Adding DLL export requirements
   29269             : #include "rosedll.h"
   29270             : 
   29271             : // predeclarations for SgTemplateParameter
   29272             : 
   29273             : /* #line 29274 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29274             : 
   29275             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   29276             : 
   29277             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29278             : 
   29279             : #if 1
   29280             : // Class Definition for SgTemplateParameter
   29281             : class ROSE_DLL_API SgTemplateParameter  : public SgSupport
   29282             :    {
   29283             :      public:
   29284             : 
   29285             : 
   29286             : /* #line 29287 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29287             : 
   29288             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   29289             : // Start of memberFunctionString
   29290             : /* #line 7600 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   29291             : 
   29292             :      public:
   29293             : 
   29294             :        // DQ (8/10/2013): We need to unify how to reference the enum values between template parameters and template arguments.
   29295             :        // enum SgTemplateArgument::template_argument_enum;
   29296             :        // typedef SgTemplateArgument::template_argument_enum template_parameter_enum;
   29297             : 
   29298             :       /*! Different uses of a template parameter */
   29299             :           enum template_parameter_enum
   29300             :              {
   29301             :                parameter_undefined = 0, /*!< undefined (error) */
   29302             :                type_parameter      = 1, /*!< type parameter */
   29303             :                nontype_parameter   = 2, /*!< nontype parameter */
   29304             :                template_parameter  = 3  /*!< template parameter */
   29305             :              };
   29306             : 
   29307             :           void post_construction_initialization() override;
   29308             : 
   29309             :        // Different constructors for use in building the different types of parameters possible
   29310             :           SgTemplateParameter ( SgType* parameter               , SgType* defaultParameter );
   29311             :           SgTemplateParameter ( SgExpression* parameter         , SgExpression* defaultParameter );
   29312             :           SgTemplateParameter ( SgTemplateDeclaration* parameter, SgTemplateDeclaration* defaultParameter );
   29313             : 
   29314             :        // DQ (8/10/2013): commonly names functions for SgTemplateParameter and SgTemplateArgument.
   29315             :           static bool is_matching_type    (const SgTemplateParameter & X, const SgTemplateParameter & Y);
   29316             :           static bool is_matching_nontype (const SgTemplateParameter & X, const SgTemplateParameter & Y);
   29317             :           static bool is_matching_template(const SgTemplateParameter & X, const SgTemplateParameter & Y);
   29318             : 
   29319             :        // DQ (5/19/2014): This is added to symetry in the functions that are template on either SgTemplateArgument or SgTemplateParameter.
   29320             :           static bool is_matching_template_pack_expansion (const SgTemplateParameter & X, const SgTemplateParameter & Y);
   29321             : 
   29322             :           static bool is_matching_kind    (const SgTemplateParameter & X, const SgTemplateParameter & Y);
   29323             : 
   29324             :           SgName get_mangled_name (void) const;
   29325             : 
   29326             : 
   29327             : 
   29328             : // End of memberFunctionString
   29329             : // Start of memberFunctionString
   29330             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   29331             : 
   29332             : // *** COMMON CODE SECTION BEGINS HERE ***
   29333             : 
   29334             :     public:
   29335             : 
   29336             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   29337             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   29338             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   29339             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   29340             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   29341             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   29342             : 
   29343             :       /*! \brief returns a string representing the class name */
   29344             :           virtual std::string class_name() const override;
   29345             : 
   29346             :       /*! \brief returns new style SageIII enum values */
   29347             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   29348             : 
   29349             :       /*! \brief static variant value */
   29350             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   29351             :        // static const VariantT static_variant = V_SgTemplateParameter;
   29352             :           enum { static_variant = V_SgTemplateParameter };
   29353             : 
   29354             :        /* the generated cast function */
   29355             :       /*! \brief Casts pointer from base class to derived class */
   29356             :           ROSE_DLL_API friend       SgTemplateParameter* isSgTemplateParameter(       SgNode * s );
   29357             : 
   29358             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   29359             :           ROSE_DLL_API friend const SgTemplateParameter* isSgTemplateParameter( const SgNode * s );
   29360             : 
   29361             :      // ******************************************
   29362             :      // * Memory Pool / New / Delete
   29363             :      // ******************************************
   29364             : 
   29365             :      public:
   29366             :           /// \private
   29367             :           static const unsigned pool_size; //
   29368             :           /// \private
   29369             :           static std::vector<unsigned char *> pools; //
   29370             :           /// \private
   29371             :           static SgTemplateParameter * next_node; // 
   29372             : 
   29373             :           /// \private
   29374             :           static unsigned long initializeStorageClassArray(SgTemplateParameterStorageClass *); //
   29375             : 
   29376             :           /// \private
   29377             :           static void clearMemoryPool(); //
   29378             :           static void deleteMemoryPool(); //
   29379             : 
   29380             :           /// \private
   29381             :           static void extendMemoryPoolForFileIO(); //
   29382             : 
   29383             :           /// \private
   29384             :           static SgTemplateParameter * getPointerFromGlobalIndex(unsigned long); //
   29385             :           /// \private
   29386             :           static SgTemplateParameter * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   29387             : 
   29388             :           /// \private
   29389             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   29390             :           /// \private
   29391             :           static void resetValidFreepointers(); //
   29392             :           /// \private
   29393             :           static unsigned long getNumberOfLastValidPointer(); //
   29394             : 
   29395             : 
   29396             : #if defined(INLINE_FUNCTIONS)
   29397             :       /*! \brief returns pointer to newly allocated IR node */
   29398             :           inline void *operator new (size_t size);
   29399             : #else
   29400             :       /*! \brief returns pointer to newly allocated IR node */
   29401             :           void *operator new (size_t size);
   29402             : #endif
   29403             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   29404             :           void operator delete (void* pointer, size_t size);
   29405             : 
   29406             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   29407        4334 :           void operator delete (void* pointer)
   29408             :              {
   29409             :             // This is the generated delete operator...
   29410        4334 :                SgTemplateParameter::operator delete (pointer,sizeof(SgTemplateParameter));
   29411             :              }
   29412             : 
   29413             :       /*! \brief Returns the total number of IR nodes of this type */
   29414             :           static size_t numberOfNodes();
   29415             : 
   29416             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   29417             :           static size_t memoryUsage();
   29418             : 
   29419             :       // End of scope which started in IR nodes specific code 
   29420             :       /* */
   29421             : 
   29422             :       /* name Internal Functions
   29423             :           \brief Internal functions ... incomplete-documentation
   29424             : 
   29425             :           These functions have been made public as part of the design, but they are suggested for internal use 
   29426             :           or by particularly knowledgeable users for specialized tools or applications.
   29427             : 
   29428             :           \internal We could not make these private because they are required by user for special purposes. And 
   29429             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   29430             :          
   29431             :        */
   29432             : 
   29433             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   29434             :        // overridden in every class by *generated* implementation
   29435             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   29436             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   29437             :        // MS: 06/28/02 container of names of variables or container indices 
   29438             :        // used used in the traversal to access AST successor nodes
   29439             :        // overridden in every class by *generated* implementation
   29440             :       /*! \brief container of names of variables or container indices used used in the traversal
   29441             :           to access AST successor nodes overridden in every class by *generated* implementation */
   29442             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   29443             : 
   29444             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   29445             :        // than all the vector copies. The implementation for these functions is generated for each class.
   29446             :       /*! \brief return number of children in the traversal successor list */
   29447             :           virtual size_t get_numberOfTraversalSuccessors() override;
   29448             :       /*! \brief index-based access to traversal successors by index number */
   29449             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   29450             :       /*! \brief index-based access to traversal successors by child node */
   29451             :           virtual size_t get_childIndex(SgNode *child) override;
   29452             : 
   29453             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   29454             :        // MS: 08/16/2002 method for generating RTI information
   29455             :       /*! \brief return C++ Runtime-Time-Information */
   29456             :           virtual RTIReturnType roseRTI() override;
   29457             : #endif
   29458             :       /* */
   29459             : 
   29460             : 
   29461             : 
   29462             :       /* name Deprecated Functions
   29463             :           \brief Deprecated functions ... incomplete-documentation
   29464             : 
   29465             :           These functions have been deprecated from use.
   29466             :        */
   29467             :       /* */
   29468             : 
   29469             :       /*! returns a C style string (char*) representing the class name */
   29470             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   29471             : 
   29472             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   29473             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   29474             : #if 0
   29475             :       /*! returns old style Sage II enum values */
   29476             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   29477             :       /*! returns old style Sage II enum values */
   29478             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   29479             : #endif
   29480             :       /* */
   29481             : 
   29482             : 
   29483             : 
   29484             : 
   29485             :      public:
   29486             :       /* name Traversal Support Functions
   29487             :           \brief Traversal support functions ... incomplete-documentation
   29488             : 
   29489             :           These functions have been made public as part of the design, but they are suggested for internal use 
   29490             :           or by particularly knowledgable users for specialized tools or applications.
   29491             :        */
   29492             :       /* */
   29493             : 
   29494             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   29495             :        // (inferior to ROSE traversal mechanism, experimental).
   29496             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   29497             :        */
   29498             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   29499             : 
   29500             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   29501             :       /*! \brief support for the classic visitor pattern done in GoF */
   29502             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   29503             : 
   29504             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   29505             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   29506             :        */
   29507             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   29508             : 
   29509             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   29510             :        */
   29511             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   29512             : 
   29513             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   29514             :        // This traversal helps support internal tools that call static member functions.
   29515             :        // note: this function operates on the memory pools.
   29516             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   29517             :        */
   29518             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   29519             :       /* */
   29520             : 
   29521             : 
   29522             :      public:
   29523             :       /* name Memory Allocation Functions
   29524             :           \brief Memory allocations functions ... incomplete-documentation
   29525             : 
   29526             :           These functions have been made public as part of the design, but they are suggested for internal use 
   29527             :           or by particularly knowledgable users for specialized tools or applications.
   29528             :        */
   29529             :       /* */
   29530             : 
   29531             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   29532             : 
   29533             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   29534             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   29535             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   29536             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   29537             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   29538             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   29539             :           being used with the AST File I/O mechanism.
   29540             :        */
   29541             :           virtual bool isInMemoryPool() override;
   29542             : 
   29543             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   29544             : 
   29545             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   29546             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   29547             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   29548             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   29549             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   29550             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   29551             :           being used with the AST File I/O mechanism.
   29552             :        */
   29553             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   29554             : 
   29555             :       // DQ (4/30/2006): Modified to be a const function.
   29556             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   29557             : 
   29558             :           This functions is part of general support for many possible tools to operate 
   29559             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   29560             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   29561             :           less than the set of pointers used by the AST file I/O. This is part of
   29562             :           work implemented by Andreas, and support tools such as the AST graph generation.
   29563             : 
   29564             :           \warning This function can return unexpected data members and thus the 
   29565             :                    order and the number of elements is unpredicable and subject 
   29566             :                    to change.
   29567             : 
   29568             :           \returns STL vector of pairs of SgNode* and strings
   29569             :        */
   29570             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   29571             : 
   29572             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   29573             : 
   29574             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   29575             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   29576             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   29577             : 
   29578             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   29579             :                    and subject to change.
   29580             :        */
   29581             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   29582             : 
   29583             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   29584             : 
   29585             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   29586             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   29587             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   29588             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   29589             : 
   29590             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   29591             : 
   29592             :           \returns long
   29593             :        */
   29594             :           virtual long getChildIndex( SgNode* childNode ) const override;
   29595             : 
   29596             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   29597             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   29598             :       /* \brief Constructor for use by AST File I/O Mechanism
   29599             : 
   29600             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   29601             :           which obtained via fast binary file I/O from disk.
   29602             :        */
   29603             :        // SgTemplateParameter( SgTemplateParameterStorageClass& source );
   29604             : 
   29605             : 
   29606             : 
   29607             : 
   29608             : 
   29609             :  // JH (10/24/2005): methods added to support the ast file IO
   29610             :     private:
   29611             : 
   29612             :       /* name AST Memory Allocation Support Functions
   29613             :           \brief Memory allocations support....
   29614             : 
   29615             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   29616             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   29617             :           and support the AST File I/O Mechanism.
   29618             :        */
   29619             :       /* */
   29620             : 
   29621             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   29622             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   29623             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   29624             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   29625             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   29626             :           a correspinding one in the AST_FILE_IO class!
   29627             :        */
   29628             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   29629             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   29630             :       /* \brief Typedef used for low level memory access.
   29631             :        */
   29632             :        // typedef unsigned char* TestType;
   29633             : 
   29634             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   29635             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   29636             :       /* \brief Typedef used to hold memory addresses as values.
   29637             :        */
   29638             :        // typedef unsigned long  AddressType;
   29639             : 
   29640             : 
   29641             : 
   29642             :        // necessary, to have direct access to the p_freepointer and the private methods !
   29643             :       /*! \brief friend class declaration to support AST File I/O */
   29644             :           friend class AST_FILE_IO;
   29645             : 
   29646             :       /*! \brief friend class declaration to support AST File I/O */
   29647             :           friend class SgTemplateParameterStorageClass;
   29648             : 
   29649             :       /*! \brief friend class declaration to support AST File I/O */
   29650             :           friend class AstSpecificDataManagingClass;
   29651             : 
   29652             :       /*! \brief friend class declaration to support AST File I/O */
   29653             :           friend class AstSpecificDataManagingClassStorageClass;
   29654             :     public:
   29655             :       /*! \brief IR node constructor to support AST File I/O */
   29656             :           SgTemplateParameter( const SgTemplateParameterStorageClass& source );
   29657             : 
   29658             :  // private: // JJW hack
   29659             :        /*
   29660             :           name AST Memory Allocation Support Variables
   29661             :           Memory allocations support variables 
   29662             : 
   29663             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   29664             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   29665             :           and support the AST File I/O Mechanism.
   29666             :        */
   29667             :       /* */
   29668             : 
   29669             :     public:
   29670             : 
   29671             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   29672             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   29673             :       // virtual SgNode* addRegExpAttribute();
   29674             :       /*! \brief Support for AST matching using regular expression.
   29675             : 
   29676             :           This support is incomplete and the subject of current research to define 
   29677             :           RegEx trees to support inexact matching.
   29678             :        */
   29679             :           SgTemplateParameter* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   29680             : 
   29681             : // *** COMMON CODE SECTION ENDS HERE ***
   29682             : 
   29683             : 
   29684             : // End of memberFunctionString
   29685             : // Start of memberFunctionString
   29686             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   29687             : 
   29688             :      // the generated cast function
   29689             :      // friend ROSE_DLL_API SgTemplateParameter* isSgTemplateParameter ( SgNode* s );
   29690             : 
   29691             :           typedef SgSupport base_node_type;
   29692             : 
   29693             : 
   29694             : // End of memberFunctionString
   29695             : 
   29696             :      public: 
   29697             :          SgTemplateParameter::template_parameter_enum get_parameterType() const;
   29698             :          void set_parameterType(SgTemplateParameter::template_parameter_enum parameterType);
   29699             : 
   29700             :      public: 
   29701             :          SgType* get_type() const /* (getDataAccessFunctionPrototypeString) */;
   29702             :          void set_type(SgType* type) /* (getDataAccessFunctionPrototypeString) */;
   29703             : 
   29704             :      public: 
   29705             :          SgType* get_defaultTypeParameter() const;
   29706             :          void set_defaultTypeParameter(SgType* defaultTypeParameter);
   29707             : 
   29708             :      public: 
   29709             :          SgExpression* get_expression() const;
   29710             :          void set_expression(SgExpression* expression);
   29711             : 
   29712             :      public: 
   29713             :          SgExpression* get_defaultExpressionParameter() const;
   29714             :          void set_defaultExpressionParameter(SgExpression* defaultExpressionParameter);
   29715             : 
   29716             :      public: 
   29717             :          SgDeclarationStatement* get_templateDeclaration() const;
   29718             :          void set_templateDeclaration(SgDeclarationStatement* templateDeclaration);
   29719             : 
   29720             :      public: 
   29721             :          SgDeclarationStatement* get_defaultTemplateDeclarationParameter() const;
   29722             :          void set_defaultTemplateDeclarationParameter(SgDeclarationStatement* defaultTemplateDeclarationParameter);
   29723             : 
   29724             :      public: 
   29725             :          SgInitializedName* get_initializedName() const;
   29726             :          void set_initializedName(SgInitializedName* initializedName);
   29727             : 
   29728             : 
   29729             :      public: 
   29730             :          virtual ~SgTemplateParameter();
   29731             : 
   29732             : 
   29733             :      public: 
   29734             :          SgTemplateParameter(SgTemplateParameter::template_parameter_enum parameterType = parameter_undefined, SgType* type = NULL, SgType* defaultTypeParameter = NULL, SgExpression* expression = NULL, SgExpression* defaultExpressionParameter = NULL, SgDeclarationStatement* templateDeclaration = NULL, SgDeclarationStatement* defaultTemplateDeclarationParameter = NULL, SgInitializedName* initializedName = NULL); 
   29735             : 
   29736             :     protected:
   29737             : // Start of memberFunctionString
   29738             : SgTemplateParameter::template_parameter_enum p_parameterType;
   29739             :           
   29740             : // End of memberFunctionString
   29741             : // Start of memberFunctionString
   29742             : SgType* p_type;
   29743             :           
   29744             : // End of memberFunctionString
   29745             : // Start of memberFunctionString
   29746             : SgType* p_defaultTypeParameter;
   29747             :           
   29748             : // End of memberFunctionString
   29749             : // Start of memberFunctionString
   29750             : SgExpression* p_expression;
   29751             :           
   29752             : // End of memberFunctionString
   29753             : // Start of memberFunctionString
   29754             : SgExpression* p_defaultExpressionParameter;
   29755             :           
   29756             : // End of memberFunctionString
   29757             : // Start of memberFunctionString
   29758             : SgDeclarationStatement* p_templateDeclaration;
   29759             :           
   29760             : // End of memberFunctionString
   29761             : // Start of memberFunctionString
   29762             : SgDeclarationStatement* p_defaultTemplateDeclarationParameter;
   29763             :           
   29764             : // End of memberFunctionString
   29765             : // Start of memberFunctionString
   29766             : SgInitializedName* p_initializedName;
   29767             :           
   29768             : // End of memberFunctionString
   29769             : 
   29770             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateParameter>;
   29771             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgTemplateParameter::template_parameter_enum,&SgTemplateParameter::p_parameterType>;
   29772             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgType*,&SgTemplateParameter::p_type>;
   29773             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgType*,&SgTemplateParameter::p_defaultTypeParameter>;
   29774             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgExpression*,&SgTemplateParameter::p_expression>;
   29775             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgExpression*,&SgTemplateParameter::p_defaultExpressionParameter>;
   29776             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgDeclarationStatement*,&SgTemplateParameter::p_templateDeclaration>;
   29777             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgDeclarationStatement*,&SgTemplateParameter::p_defaultTemplateDeclarationParameter>;
   29778             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameter, SgInitializedName*,&SgTemplateParameter::p_initializedName>;
   29779             : 
   29780             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29781             : 
   29782             : 
   29783             :    };
   29784             : #endif
   29785             : 
   29786             : // postdeclarations for SgTemplateParameter
   29787             : 
   29788             : /* #line 29789 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29789             : 
   29790             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   29791             : 
   29792             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29793             : 
   29794             : 
   29795             : /* #line 29796 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29796             : 
   29797             : 
   29798             : 
   29799             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29800             : 
   29801             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   29802             : //      This code is automatically generated for each 
   29803             : //      terminal and non-terminal within the defined 
   29804             : //      grammar.  There is a simple way to change the 
   29805             : //      code to fix bugs etc.  See the ROSE README file
   29806             : //      for directions.
   29807             : 
   29808             : // tps: (02/22/2010): Adding DLL export requirements
   29809             : #include "rosedll.h"
   29810             : 
   29811             : // predeclarations for SgTemplateArgument
   29812             : 
   29813             : /* #line 29814 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29814             : 
   29815             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   29816             : 
   29817             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   29818             : 
   29819             : #if 1
   29820             : // Class Definition for SgTemplateArgument
   29821             : class ROSE_DLL_API SgTemplateArgument  : public SgSupport
   29822             :    {
   29823             :      public:
   29824             : 
   29825             : 
   29826             : /* #line 29827 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   29827             : 
   29828             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   29829             : // Start of memberFunctionString
   29830             : /* #line 7637 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   29831             : 
   29832             :      public:
   29833             : 
   29834             :       /*! Different uses of a template argument */
   29835             :           enum template_argument_enum
   29836             :              {
   29837             :                argument_undefined               = 0, /*!< undefined (error) */
   29838             :                type_argument                    = 1, /*!< type parameter */
   29839             :                nontype_argument                 = 2, /*!< nontype parameter */
   29840             :                template_template_argument       = 3, /*!< template template parameter */
   29841             :                start_of_pack_expansion_argument = 4  /*!< start of pack expansion parameter */
   29842             :              };
   29843             : 
   29844             :           void post_construction_initialization() override;
   29845             : 
   29846             :        // Different constructors for use in building the different types of parameters possible
   29847             :           SgTemplateArgument ( SgType*                      parameter, bool explicitlySpecified );
   29848             :           SgTemplateArgument ( SgExpression*                parameter, bool explicitlySpecified );
   29849             :        // SgTemplateArgument ( SgTemplateInstantiationDecl* parameter, bool explicitlySpecified );
   29850             :           SgTemplateArgument ( SgTemplateDeclaration*       parameter, bool explicitlySpecified );
   29851             : 
   29852             :        // DQ (7/3/2013): Added new type of template argument type to support varadic template arguments.
   29853             :           SgTemplateArgument ( bool explicitlySpecified );
   29854             : 
   29855             :        // RV (2/2/2006): Added mangling for template arguments.
   29856             :       //! Returns the template argument in mangled form.
   29857             :           SgName get_mangled_name (void) const;
   29858             : 
   29859             :       //! Some template arguments have an associated scope (e.g. named types, and template template arguments)
   29860             :           SgScopeStatement* get_scope () const;
   29861             : 
   29862             : #if ALT_FIXUP_COPY
   29863             :        // DQ (11/7/2007): These need to be called separately (see documentation)
   29864             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
   29865             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
   29866             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
   29867             : #else
   29868             :        // DQ (11/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
   29869             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
   29870             : #endif
   29871             : 
   29872             :        // DQ (5/29/2011): Added to support for new qualified name generation
   29873             :       //! This function generates the qualified name prefix to be used with the template argument type.
   29874             :           SgName get_qualified_name_prefix() const;
   29875             : 
   29876             :        // DQ (7/24/2011): Added to support for new qualified name generation
   29877             :       //! This function generates the qualified name prefix to be used with the named declaration (only applied to restricted set of declarations where name qualification can be used).
   29878             :           SgName get_qualified_name_prefix_for_type() const;
   29879             : 
   29880             :        // DQ (8/10/2013): commonly names functions for SgTemplateParameter and SgTemplateArgument.
   29881             :           static bool is_matching_type    (const SgTemplateArgument & X, const SgTemplateArgument & Y);
   29882             :           static bool is_matching_nontype (const SgTemplateArgument & X, const SgTemplateArgument & Y);
   29883             :           static bool is_matching_template(const SgTemplateArgument & X, const SgTemplateArgument & Y);
   29884             : 
   29885             :        // DQ (5/19/2014): This is added to symetry in the functions that are template on either SgTemplateArgument or SgTemplateParameter.
   29886             :           static bool is_matching_template_pack_expansion (const SgTemplateArgument & X, const SgTemplateArgument & Y);
   29887             : 
   29888             :           static bool is_matching_kind    (const SgTemplateArgument & X, const SgTemplateArgument & Y);
   29889             : 
   29890             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   29891             :           int get_name_qualification_length() const;
   29892             :           void set_name_qualification_length(int name_qualification_length);
   29893             : 
   29894             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   29895             :           bool get_type_elaboration_required() const;
   29896             :           void set_type_elaboration_required(bool type_elaboration_required);
   29897             : 
   29898             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   29899             :           bool get_global_qualification_required() const;
   29900             :           void set_global_qualification_required(bool global_qualification_required);
   29901             : 
   29902             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   29903             :           bool get_requiresGlobalNameQualificationOnType() const;
   29904             :           void set_requiresGlobalNameQualificationOnType(bool requiresGlobalNameQualificationOnType);
   29905             : 
   29906             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   29907             :           int get_name_qualification_length_for_type() const;
   29908             :           void set_name_qualification_length_for_type(int name_qualification_length_for_type);
   29909             : 
   29910             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   29911             :           bool get_type_elaboration_required_for_type() const;
   29912             :           void set_type_elaboration_required_for_type(bool type_elaboration_required_for_type);
   29913             : 
   29914             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   29915             :           bool get_global_qualification_required_for_type() const;
   29916             :           void set_global_qualification_required_for_type(bool global_qualification_required_for_type);
   29917             : 
   29918             :        // DQ (5/22/2016): Adding display function for debugging.
   29919             :           void display( const std::string & label) const;
   29920             : 
   29921             :        // DQ (3/10/2018): Adding debugging support.
   29922             :           std::string unparseToStringSupport();
   29923             : 
   29924             :        // DQ (2/10/2019): Adding debugging support.
   29925             :           std::string template_argument_kind () const;
   29926             : 
   29927             :        // DQ (2/10/2019): Refactored support for template unparsing.
   29928             :           bool isTemplateArgumentFromAnonymousClass() const;
   29929             : 
   29930             :        // DQ (2/11/2019): Refactored support for logic to control when template arguments are unparsed.
   29931             :        // Temporarily this code is located in the unparseCxx_expressions.C file.
   29932             :           void outputTemplateArgument(bool & skip_unparsing, bool & stop_unparsing);
   29933             : 
   29934             : 
   29935             : 
   29936             : // End of memberFunctionString
   29937             : // Start of memberFunctionString
   29938             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   29939             : 
   29940             : // *** COMMON CODE SECTION BEGINS HERE ***
   29941             : 
   29942             :     public:
   29943             : 
   29944             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   29945             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   29946             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   29947             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   29948             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   29949             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   29950             : 
   29951             :       /*! \brief returns a string representing the class name */
   29952             :           virtual std::string class_name() const override;
   29953             : 
   29954             :       /*! \brief returns new style SageIII enum values */
   29955             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   29956             : 
   29957             :       /*! \brief static variant value */
   29958             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   29959             :        // static const VariantT static_variant = V_SgTemplateArgument;
   29960             :           enum { static_variant = V_SgTemplateArgument };
   29961             : 
   29962             :        /* the generated cast function */
   29963             :       /*! \brief Casts pointer from base class to derived class */
   29964             :           ROSE_DLL_API friend       SgTemplateArgument* isSgTemplateArgument(       SgNode * s );
   29965             : 
   29966             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   29967             :           ROSE_DLL_API friend const SgTemplateArgument* isSgTemplateArgument( const SgNode * s );
   29968             : 
   29969             :      // ******************************************
   29970             :      // * Memory Pool / New / Delete
   29971             :      // ******************************************
   29972             : 
   29973             :      public:
   29974             :           /// \private
   29975             :           static const unsigned pool_size; //
   29976             :           /// \private
   29977             :           static std::vector<unsigned char *> pools; //
   29978             :           /// \private
   29979             :           static SgTemplateArgument * next_node; // 
   29980             : 
   29981             :           /// \private
   29982             :           static unsigned long initializeStorageClassArray(SgTemplateArgumentStorageClass *); //
   29983             : 
   29984             :           /// \private
   29985             :           static void clearMemoryPool(); //
   29986             :           static void deleteMemoryPool(); //
   29987             : 
   29988             :           /// \private
   29989             :           static void extendMemoryPoolForFileIO(); //
   29990             : 
   29991             :           /// \private
   29992             :           static SgTemplateArgument * getPointerFromGlobalIndex(unsigned long); //
   29993             :           /// \private
   29994             :           static SgTemplateArgument * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   29995             : 
   29996             :           /// \private
   29997             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   29998             :           /// \private
   29999             :           static void resetValidFreepointers(); //
   30000             :           /// \private
   30001             :           static unsigned long getNumberOfLastValidPointer(); //
   30002             : 
   30003             : 
   30004             : #if defined(INLINE_FUNCTIONS)
   30005             :       /*! \brief returns pointer to newly allocated IR node */
   30006             :           inline void *operator new (size_t size);
   30007             : #else
   30008             :       /*! \brief returns pointer to newly allocated IR node */
   30009             :           void *operator new (size_t size);
   30010             : #endif
   30011             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   30012             :           void operator delete (void* pointer, size_t size);
   30013             : 
   30014             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   30015       13450 :           void operator delete (void* pointer)
   30016             :              {
   30017             :             // This is the generated delete operator...
   30018       13450 :                SgTemplateArgument::operator delete (pointer,sizeof(SgTemplateArgument));
   30019             :              }
   30020             : 
   30021             :       /*! \brief Returns the total number of IR nodes of this type */
   30022             :           static size_t numberOfNodes();
   30023             : 
   30024             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   30025             :           static size_t memoryUsage();
   30026             : 
   30027             :       // End of scope which started in IR nodes specific code 
   30028             :       /* */
   30029             : 
   30030             :       /* name Internal Functions
   30031             :           \brief Internal functions ... incomplete-documentation
   30032             : 
   30033             :           These functions have been made public as part of the design, but they are suggested for internal use 
   30034             :           or by particularly knowledgeable users for specialized tools or applications.
   30035             : 
   30036             :           \internal We could not make these private because they are required by user for special purposes. And 
   30037             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   30038             :          
   30039             :        */
   30040             : 
   30041             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   30042             :        // overridden in every class by *generated* implementation
   30043             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   30044             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   30045             :        // MS: 06/28/02 container of names of variables or container indices 
   30046             :        // used used in the traversal to access AST successor nodes
   30047             :        // overridden in every class by *generated* implementation
   30048             :       /*! \brief container of names of variables or container indices used used in the traversal
   30049             :           to access AST successor nodes overridden in every class by *generated* implementation */
   30050             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   30051             : 
   30052             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   30053             :        // than all the vector copies. The implementation for these functions is generated for each class.
   30054             :       /*! \brief return number of children in the traversal successor list */
   30055             :           virtual size_t get_numberOfTraversalSuccessors() override;
   30056             :       /*! \brief index-based access to traversal successors by index number */
   30057             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   30058             :       /*! \brief index-based access to traversal successors by child node */
   30059             :           virtual size_t get_childIndex(SgNode *child) override;
   30060             : 
   30061             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   30062             :        // MS: 08/16/2002 method for generating RTI information
   30063             :       /*! \brief return C++ Runtime-Time-Information */
   30064             :           virtual RTIReturnType roseRTI() override;
   30065             : #endif
   30066             :       /* */
   30067             : 
   30068             : 
   30069             : 
   30070             :       /* name Deprecated Functions
   30071             :           \brief Deprecated functions ... incomplete-documentation
   30072             : 
   30073             :           These functions have been deprecated from use.
   30074             :        */
   30075             :       /* */
   30076             : 
   30077             :       /*! returns a C style string (char*) representing the class name */
   30078             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   30079             : 
   30080             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   30081             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   30082             : #if 0
   30083             :       /*! returns old style Sage II enum values */
   30084             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   30085             :       /*! returns old style Sage II enum values */
   30086             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   30087             : #endif
   30088             :       /* */
   30089             : 
   30090             : 
   30091             : 
   30092             : 
   30093             :      public:
   30094             :       /* name Traversal Support Functions
   30095             :           \brief Traversal support functions ... incomplete-documentation
   30096             : 
   30097             :           These functions have been made public as part of the design, but they are suggested for internal use 
   30098             :           or by particularly knowledgable users for specialized tools or applications.
   30099             :        */
   30100             :       /* */
   30101             : 
   30102             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   30103             :        // (inferior to ROSE traversal mechanism, experimental).
   30104             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   30105             :        */
   30106             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   30107             : 
   30108             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   30109             :       /*! \brief support for the classic visitor pattern done in GoF */
   30110             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   30111             : 
   30112             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   30113             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   30114             :        */
   30115             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   30116             : 
   30117             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   30118             :        */
   30119             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   30120             : 
   30121             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   30122             :        // This traversal helps support internal tools that call static member functions.
   30123             :        // note: this function operates on the memory pools.
   30124             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   30125             :        */
   30126             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   30127             :       /* */
   30128             : 
   30129             : 
   30130             :      public:
   30131             :       /* name Memory Allocation Functions
   30132             :           \brief Memory allocations functions ... incomplete-documentation
   30133             : 
   30134             :           These functions have been made public as part of the design, but they are suggested for internal use 
   30135             :           or by particularly knowledgable users for specialized tools or applications.
   30136             :        */
   30137             :       /* */
   30138             : 
   30139             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   30140             : 
   30141             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   30142             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   30143             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   30144             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   30145             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   30146             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   30147             :           being used with the AST File I/O mechanism.
   30148             :        */
   30149             :           virtual bool isInMemoryPool() override;
   30150             : 
   30151             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   30152             : 
   30153             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   30154             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   30155             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   30156             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   30157             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   30158             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   30159             :           being used with the AST File I/O mechanism.
   30160             :        */
   30161             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   30162             : 
   30163             :       // DQ (4/30/2006): Modified to be a const function.
   30164             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   30165             : 
   30166             :           This functions is part of general support for many possible tools to operate 
   30167             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   30168             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   30169             :           less than the set of pointers used by the AST file I/O. This is part of
   30170             :           work implemented by Andreas, and support tools such as the AST graph generation.
   30171             : 
   30172             :           \warning This function can return unexpected data members and thus the 
   30173             :                    order and the number of elements is unpredicable and subject 
   30174             :                    to change.
   30175             : 
   30176             :           \returns STL vector of pairs of SgNode* and strings
   30177             :        */
   30178             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   30179             : 
   30180             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   30181             : 
   30182             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   30183             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   30184             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   30185             : 
   30186             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   30187             :                    and subject to change.
   30188             :        */
   30189             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   30190             : 
   30191             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   30192             : 
   30193             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   30194             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   30195             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   30196             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   30197             : 
   30198             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   30199             : 
   30200             :           \returns long
   30201             :        */
   30202             :           virtual long getChildIndex( SgNode* childNode ) const override;
   30203             : 
   30204             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   30205             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   30206             :       /* \brief Constructor for use by AST File I/O Mechanism
   30207             : 
   30208             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   30209             :           which obtained via fast binary file I/O from disk.
   30210             :        */
   30211             :        // SgTemplateArgument( SgTemplateArgumentStorageClass& source );
   30212             : 
   30213             : 
   30214             : 
   30215             : 
   30216             : 
   30217             :  // JH (10/24/2005): methods added to support the ast file IO
   30218             :     private:
   30219             : 
   30220             :       /* name AST Memory Allocation Support Functions
   30221             :           \brief Memory allocations support....
   30222             : 
   30223             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   30224             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   30225             :           and support the AST File I/O Mechanism.
   30226             :        */
   30227             :       /* */
   30228             : 
   30229             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   30230             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   30231             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   30232             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   30233             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   30234             :           a correspinding one in the AST_FILE_IO class!
   30235             :        */
   30236             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   30237             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   30238             :       /* \brief Typedef used for low level memory access.
   30239             :        */
   30240             :        // typedef unsigned char* TestType;
   30241             : 
   30242             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   30243             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   30244             :       /* \brief Typedef used to hold memory addresses as values.
   30245             :        */
   30246             :        // typedef unsigned long  AddressType;
   30247             : 
   30248             : 
   30249             : 
   30250             :        // necessary, to have direct access to the p_freepointer and the private methods !
   30251             :       /*! \brief friend class declaration to support AST File I/O */
   30252             :           friend class AST_FILE_IO;
   30253             : 
   30254             :       /*! \brief friend class declaration to support AST File I/O */
   30255             :           friend class SgTemplateArgumentStorageClass;
   30256             : 
   30257             :       /*! \brief friend class declaration to support AST File I/O */
   30258             :           friend class AstSpecificDataManagingClass;
   30259             : 
   30260             :       /*! \brief friend class declaration to support AST File I/O */
   30261             :           friend class AstSpecificDataManagingClassStorageClass;
   30262             :     public:
   30263             :       /*! \brief IR node constructor to support AST File I/O */
   30264             :           SgTemplateArgument( const SgTemplateArgumentStorageClass& source );
   30265             : 
   30266             :  // private: // JJW hack
   30267             :        /*
   30268             :           name AST Memory Allocation Support Variables
   30269             :           Memory allocations support variables 
   30270             : 
   30271             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   30272             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   30273             :           and support the AST File I/O Mechanism.
   30274             :        */
   30275             :       /* */
   30276             : 
   30277             :     public:
   30278             : 
   30279             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   30280             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   30281             :       // virtual SgNode* addRegExpAttribute();
   30282             :       /*! \brief Support for AST matching using regular expression.
   30283             : 
   30284             :           This support is incomplete and the subject of current research to define 
   30285             :           RegEx trees to support inexact matching.
   30286             :        */
   30287             :           SgTemplateArgument* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   30288             : 
   30289             : // *** COMMON CODE SECTION ENDS HERE ***
   30290             : 
   30291             : 
   30292             : // End of memberFunctionString
   30293             : // Start of memberFunctionString
   30294             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   30295             : 
   30296             :      // the generated cast function
   30297             :      // friend ROSE_DLL_API SgTemplateArgument* isSgTemplateArgument ( SgNode* s );
   30298             : 
   30299             :           typedef SgSupport base_node_type;
   30300             : 
   30301             : 
   30302             : // End of memberFunctionString
   30303             : 
   30304             :      public: 
   30305             :          SgTemplateArgument::template_argument_enum get_argumentType() const;
   30306             :          void set_argumentType(SgTemplateArgument::template_argument_enum argumentType);
   30307             : 
   30308             :      public: 
   30309             :          bool get_isArrayBoundUnknownType() const;
   30310             :          void set_isArrayBoundUnknownType(bool isArrayBoundUnknownType);
   30311             : 
   30312             :      public: 
   30313             :          SgType* get_type() const /* (getDataAccessFunctionPrototypeString) */;
   30314             :          void set_type(SgType* type) /* (getDataAccessFunctionPrototypeString) */;
   30315             : 
   30316             :      public: 
   30317             :          SgType* get_unparsable_type_alias() const;
   30318             :          void set_unparsable_type_alias(SgType* unparsable_type_alias);
   30319             : 
   30320             :      public: 
   30321             :          SgExpression* get_expression() const;
   30322             :          void set_expression(SgExpression* expression);
   30323             : 
   30324             :      public: 
   30325             :          SgDeclarationStatement* get_templateDeclaration() const;
   30326             :          void set_templateDeclaration(SgDeclarationStatement* templateDeclaration);
   30327             : 
   30328             :      public: 
   30329             :          SgInitializedName* get_initializedName() const;
   30330             :          void set_initializedName(SgInitializedName* initializedName);
   30331             : 
   30332             :      public: 
   30333             :          bool get_explicitlySpecified() const;
   30334             :          void set_explicitlySpecified(bool explicitlySpecified);
   30335             : 
   30336             : 
   30337             : 
   30338             : 
   30339             : 
   30340             : 
   30341             : 
   30342             : 
   30343             :      public: 
   30344             :          SgTemplateArgument* get_previous_instance() const;
   30345             :          void set_previous_instance(SgTemplateArgument* previous_instance);
   30346             : 
   30347             :      public: 
   30348             :          SgTemplateArgument* get_next_instance() const;
   30349             :          void set_next_instance(SgTemplateArgument* next_instance);
   30350             : 
   30351             :      public: 
   30352             :          bool get_is_pack_element() const;
   30353             :          void set_is_pack_element(bool is_pack_element);
   30354             : 
   30355             : 
   30356             :      public: 
   30357             :          virtual ~SgTemplateArgument();
   30358             : 
   30359             : 
   30360             :      public: 
   30361             :          SgTemplateArgument(SgTemplateArgument::template_argument_enum argumentType = argument_undefined, bool isArrayBoundUnknownType = false, SgType* type = NULL, SgExpression* expression = NULL, SgDeclarationStatement* templateDeclaration = NULL, bool explicitlySpecified = true); 
   30362             : 
   30363             :     protected:
   30364             : // Start of memberFunctionString
   30365             : SgTemplateArgument::template_argument_enum p_argumentType;
   30366             :           
   30367             : // End of memberFunctionString
   30368             : // Start of memberFunctionString
   30369             : bool p_isArrayBoundUnknownType;
   30370             :           
   30371             : // End of memberFunctionString
   30372             : // Start of memberFunctionString
   30373             : SgType* p_type;
   30374             :           
   30375             : // End of memberFunctionString
   30376             : // Start of memberFunctionString
   30377             : SgType* p_unparsable_type_alias;
   30378             :           
   30379             : // End of memberFunctionString
   30380             : // Start of memberFunctionString
   30381             : SgExpression* p_expression;
   30382             :           
   30383             : // End of memberFunctionString
   30384             : // Start of memberFunctionString
   30385             : SgDeclarationStatement* p_templateDeclaration;
   30386             :           
   30387             : // End of memberFunctionString
   30388             : // Start of memberFunctionString
   30389             : SgInitializedName* p_initializedName;
   30390             :           
   30391             : // End of memberFunctionString
   30392             : // Start of memberFunctionString
   30393             : bool p_explicitlySpecified;
   30394             :           
   30395             : // End of memberFunctionString
   30396             : // Start of memberFunctionString
   30397             : int p_name_qualification_length;
   30398             :           
   30399             : // End of memberFunctionString
   30400             : // Start of memberFunctionString
   30401             : bool p_type_elaboration_required;
   30402             :           
   30403             : // End of memberFunctionString
   30404             : // Start of memberFunctionString
   30405             : bool p_global_qualification_required;
   30406             :           
   30407             : // End of memberFunctionString
   30408             : // Start of memberFunctionString
   30409             : bool p_requiresGlobalNameQualificationOnType;
   30410             :           
   30411             : // End of memberFunctionString
   30412             : // Start of memberFunctionString
   30413             : int p_name_qualification_length_for_type;
   30414             :           
   30415             : // End of memberFunctionString
   30416             : // Start of memberFunctionString
   30417             : bool p_type_elaboration_required_for_type;
   30418             :           
   30419             : // End of memberFunctionString
   30420             : // Start of memberFunctionString
   30421             : bool p_global_qualification_required_for_type;
   30422             :           
   30423             : // End of memberFunctionString
   30424             : // Start of memberFunctionString
   30425             : SgTemplateArgument* p_previous_instance;
   30426             :           
   30427             : // End of memberFunctionString
   30428             : // Start of memberFunctionString
   30429             : SgTemplateArgument* p_next_instance;
   30430             :           
   30431             : // End of memberFunctionString
   30432             : // Start of memberFunctionString
   30433             : bool p_is_pack_element;
   30434             :           
   30435             : // End of memberFunctionString
   30436             : 
   30437             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateArgument>;
   30438             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgTemplateArgument::template_argument_enum,&SgTemplateArgument::p_argumentType>;
   30439             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_isArrayBoundUnknownType>;
   30440             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgType*,&SgTemplateArgument::p_type>;
   30441             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgType*,&SgTemplateArgument::p_unparsable_type_alias>;
   30442             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgExpression*,&SgTemplateArgument::p_expression>;
   30443             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgDeclarationStatement*,&SgTemplateArgument::p_templateDeclaration>;
   30444             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgInitializedName*,&SgTemplateArgument::p_initializedName>;
   30445             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_explicitlySpecified>;
   30446             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, int,&SgTemplateArgument::p_name_qualification_length>;
   30447             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_type_elaboration_required>;
   30448             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_global_qualification_required>;
   30449             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_requiresGlobalNameQualificationOnType>;
   30450             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, int,&SgTemplateArgument::p_name_qualification_length_for_type>;
   30451             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_type_elaboration_required_for_type>;
   30452             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_global_qualification_required_for_type>;
   30453             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgTemplateArgument*,&SgTemplateArgument::p_previous_instance>;
   30454             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, SgTemplateArgument*,&SgTemplateArgument::p_next_instance>;
   30455             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgument, bool,&SgTemplateArgument::p_is_pack_element>;
   30456             : 
   30457             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   30458             : 
   30459             : 
   30460             :    };
   30461             : #endif
   30462             : 
   30463             : // postdeclarations for SgTemplateArgument
   30464             : 
   30465             : /* #line 30466 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   30466             : 
   30467             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   30468             : 
   30469             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   30470             : 
   30471             : 
   30472             : /* #line 30473 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   30473             : 
   30474             : 
   30475             : 
   30476             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   30477             : 
   30478             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   30479             : //      This code is automatically generated for each 
   30480             : //      terminal and non-terminal within the defined 
   30481             : //      grammar.  There is a simple way to change the 
   30482             : //      code to fix bugs etc.  See the ROSE README file
   30483             : //      for directions.
   30484             : 
   30485             : // tps: (02/22/2010): Adding DLL export requirements
   30486             : #include "rosedll.h"
   30487             : 
   30488             : // predeclarations for SgDirectory
   30489             : 
   30490             : /* #line 30491 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   30491             : 
   30492             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   30493             : 
   30494             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   30495             : 
   30496             : #if 1
   30497             : // Class Definition for SgDirectory
   30498             : class ROSE_DLL_API SgDirectory  : public SgSupport
   30499             :    {
   30500             :      public:
   30501             : 
   30502             : 
   30503             : /* #line 30504 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   30504             : 
   30505             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   30506             : // Start of memberFunctionString
   30507             : /* #line 6659 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   30508             : 
   30509             :      public:
   30510             :           int numberOfFiles() const;
   30511             :           SgFile* get_file(int i) const;
   30512             : 
   30513             :           int numberOfDirectories() const;
   30514             :           SgDirectory* get_directory(int i) const;
   30515             : 
   30516             :           void post_construction_initialization() override;
   30517             : 
   30518             : 
   30519             : 
   30520             : // End of memberFunctionString
   30521             : // Start of memberFunctionString
   30522             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   30523             : 
   30524             : 
   30525             :      /* name Persistant Attribute Mechanism
   30526             : 
   30527             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   30528             :          multiple passes. Note that these attributes are persistant in that they are preserved
   30529             :          if the AST is written out to a file and read in from a file.  However, virtual function
   30530             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   30531             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   30532             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   30533             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   30534             :          access is required, however mostly only internal tools use this lower level support).
   30535             : 
   30536             :          \internal This used to be a public data member, but has been changed to be a protected
   30537             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   30538             :          but some of the names and the syntax for calling the interface have changed. The
   30539             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   30540             :       */
   30541             :      /* */
   30542             :      //! Add a new attribute represented by the named string.
   30543             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   30544             :      //! Returns attribute of name 's'.
   30545             :          virtual AstAttribute* getAttribute(std::string s) const override;
   30546             :      //! Replace existing attribute of name 's' with new AstAttribute.
   30547             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   30548             :      /*! \brief This is a wrapper function with the following semantics:
   30549             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   30550             :          otherwise \b updateAttribute(s,a); is called.
   30551             :       */
   30552             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   30553             :      //! Remove attribute of name 's' if present.
   30554             :          virtual void removeAttribute(std::string s) override;
   30555             :      //! Tests if attribute of name 's' is present.
   30556             :          virtual bool attributeExists(std::string s) const override;
   30557             :      //! Returns the number of attributes on this IR node.
   30558             :          virtual int numberOfAttributes() const override;
   30559             : 
   30560             :      /*! \fn AstAttributeMechanism* SgDirectory::get_attributeMechanism() const;
   30561             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   30562             :                 a pointer to it is returned, else error.
   30563             : 
   30564             :          This is an access function used for getting the interally held pointer to a valid
   30565             :          AstAttributeMechanism. It provides access to lower level functionality of the
   30566             :          AstAttributeMechanism, put is mostly of use to internal tools.
   30567             :       */
   30568             :      /*! \fn void SgDirectory::set_attributeMechanism(AstAttributeMechanism* a);
   30569             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   30570             : 
   30571             :          This is an access function used for setting the interally held pointer to a valid
   30572             :          AstAttributeMechanism.
   30573             :       */
   30574             :      /* */
   30575             : 
   30576             : 
   30577             : 
   30578             : 
   30579             : // End of memberFunctionString
   30580             : // Start of memberFunctionString
   30581             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   30582             : 
   30583             : // *** COMMON CODE SECTION BEGINS HERE ***
   30584             : 
   30585             :     public:
   30586             : 
   30587             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   30588             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   30589             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   30590             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   30591             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   30592             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   30593             : 
   30594             :       /*! \brief returns a string representing the class name */
   30595             :           virtual std::string class_name() const override;
   30596             : 
   30597             :       /*! \brief returns new style SageIII enum values */
   30598             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   30599             : 
   30600             :       /*! \brief static variant value */
   30601             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   30602             :        // static const VariantT static_variant = V_SgDirectory;
   30603             :           enum { static_variant = V_SgDirectory };
   30604             : 
   30605             :        /* the generated cast function */
   30606             :       /*! \brief Casts pointer from base class to derived class */
   30607             :           ROSE_DLL_API friend       SgDirectory* isSgDirectory(       SgNode * s );
   30608             : 
   30609             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   30610             :           ROSE_DLL_API friend const SgDirectory* isSgDirectory( const SgNode * s );
   30611             : 
   30612             :      // ******************************************
   30613             :      // * Memory Pool / New / Delete
   30614             :      // ******************************************
   30615             : 
   30616             :      public:
   30617             :           /// \private
   30618             :           static const unsigned pool_size; //
   30619             :           /// \private
   30620             :           static std::vector<unsigned char *> pools; //
   30621             :           /// \private
   30622             :           static SgDirectory * next_node; // 
   30623             : 
   30624             :           /// \private
   30625             :           static unsigned long initializeStorageClassArray(SgDirectoryStorageClass *); //
   30626             : 
   30627             :           /// \private
   30628             :           static void clearMemoryPool(); //
   30629             :           static void deleteMemoryPool(); //
   30630             : 
   30631             :           /// \private
   30632             :           static void extendMemoryPoolForFileIO(); //
   30633             : 
   30634             :           /// \private
   30635             :           static SgDirectory * getPointerFromGlobalIndex(unsigned long); //
   30636             :           /// \private
   30637             :           static SgDirectory * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   30638             : 
   30639             :           /// \private
   30640             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   30641             :           /// \private
   30642             :           static void resetValidFreepointers(); //
   30643             :           /// \private
   30644             :           static unsigned long getNumberOfLastValidPointer(); //
   30645             : 
   30646             : 
   30647             : #if defined(INLINE_FUNCTIONS)
   30648             :       /*! \brief returns pointer to newly allocated IR node */
   30649             :           inline void *operator new (size_t size);
   30650             : #else
   30651             :       /*! \brief returns pointer to newly allocated IR node */
   30652             :           void *operator new (size_t size);
   30653             : #endif
   30654             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   30655             :           void operator delete (void* pointer, size_t size);
   30656             : 
   30657             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   30658           0 :           void operator delete (void* pointer)
   30659             :              {
   30660             :             // This is the generated delete operator...
   30661           0 :                SgDirectory::operator delete (pointer,sizeof(SgDirectory));
   30662             :              }
   30663             : 
   30664             :       /*! \brief Returns the total number of IR nodes of this type */
   30665             :           static size_t numberOfNodes();
   30666             : 
   30667             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   30668             :           static size_t memoryUsage();
   30669             : 
   30670             :       // End of scope which started in IR nodes specific code 
   30671             :       /* */
   30672             : 
   30673             :       /* name Internal Functions
   30674             :           \brief Internal functions ... incomplete-documentation
   30675             : 
   30676             :           These functions have been made public as part of the design, but they are suggested for internal use 
   30677             :           or by particularly knowledgeable users for specialized tools or applications.
   30678             : 
   30679             :           \internal We could not make these private because they are required by user for special purposes. And 
   30680             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   30681             :          
   30682             :        */
   30683             : 
   30684             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   30685             :        // overridden in every class by *generated* implementation
   30686             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   30687             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   30688             :        // MS: 06/28/02 container of names of variables or container indices 
   30689             :        // used used in the traversal to access AST successor nodes
   30690             :        // overridden in every class by *generated* implementation
   30691             :       /*! \brief container of names of variables or container indices used used in the traversal
   30692             :           to access AST successor nodes overridden in every class by *generated* implementation */
   30693             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   30694             : 
   30695             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   30696             :        // than all the vector copies. The implementation for these functions is generated for each class.
   30697             :       /*! \brief return number of children in the traversal successor list */
   30698             :           virtual size_t get_numberOfTraversalSuccessors() override;
   30699             :       /*! \brief index-based access to traversal successors by index number */
   30700             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   30701             :       /*! \brief index-based access to traversal successors by child node */
   30702             :           virtual size_t get_childIndex(SgNode *child) override;
   30703             : 
   30704             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   30705             :        // MS: 08/16/2002 method for generating RTI information
   30706             :       /*! \brief return C++ Runtime-Time-Information */
   30707             :           virtual RTIReturnType roseRTI() override;
   30708             : #endif
   30709             :       /* */
   30710             : 
   30711             : 
   30712             : 
   30713             :       /* name Deprecated Functions
   30714             :           \brief Deprecated functions ... incomplete-documentation
   30715             : 
   30716             :           These functions have been deprecated from use.
   30717             :        */
   30718             :       /* */
   30719             : 
   30720             :       /*! returns a C style string (char*) representing the class name */
   30721             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   30722             : 
   30723             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   30724             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   30725             : #if 0
   30726             :       /*! returns old style Sage II enum values */
   30727             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   30728             :       /*! returns old style Sage II enum values */
   30729             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   30730             : #endif
   30731             :       /* */
   30732             : 
   30733             : 
   30734             : 
   30735             : 
   30736             :      public:
   30737             :       /* name Traversal Support Functions
   30738             :           \brief Traversal support functions ... incomplete-documentation
   30739             : 
   30740             :           These functions have been made public as part of the design, but they are suggested for internal use 
   30741             :           or by particularly knowledgable users for specialized tools or applications.
   30742             :        */
   30743             :       /* */
   30744             : 
   30745             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   30746             :        // (inferior to ROSE traversal mechanism, experimental).
   30747             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   30748             :        */
   30749             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   30750             : 
   30751             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   30752             :       /*! \brief support for the classic visitor pattern done in GoF */
   30753             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   30754             : 
   30755             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   30756             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   30757             :        */
   30758             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   30759             : 
   30760             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   30761             :        */
   30762             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   30763             : 
   30764             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   30765             :        // This traversal helps support internal tools that call static member functions.
   30766             :        // note: this function operates on the memory pools.
   30767             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   30768             :        */
   30769             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   30770             :       /* */
   30771             : 
   30772             : 
   30773             :      public:
   30774             :       /* name Memory Allocation Functions
   30775             :           \brief Memory allocations functions ... incomplete-documentation
   30776             : 
   30777             :           These functions have been made public as part of the design, but they are suggested for internal use 
   30778             :           or by particularly knowledgable users for specialized tools or applications.
   30779             :        */
   30780             :       /* */
   30781             : 
   30782             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   30783             : 
   30784             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   30785             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   30786             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   30787             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   30788             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   30789             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   30790             :           being used with the AST File I/O mechanism.
   30791             :        */
   30792             :           virtual bool isInMemoryPool() override;
   30793             : 
   30794             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   30795             : 
   30796             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   30797             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   30798             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   30799             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   30800             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   30801             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   30802             :           being used with the AST File I/O mechanism.
   30803             :        */
   30804             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   30805             : 
   30806             :       // DQ (4/30/2006): Modified to be a const function.
   30807             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   30808             : 
   30809             :           This functions is part of general support for many possible tools to operate 
   30810             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   30811             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   30812             :           less than the set of pointers used by the AST file I/O. This is part of
   30813             :           work implemented by Andreas, and support tools such as the AST graph generation.
   30814             : 
   30815             :           \warning This function can return unexpected data members and thus the 
   30816             :                    order and the number of elements is unpredicable and subject 
   30817             :                    to change.
   30818             : 
   30819             :           \returns STL vector of pairs of SgNode* and strings
   30820             :        */
   30821             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   30822             : 
   30823             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   30824             : 
   30825             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   30826             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   30827             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   30828             : 
   30829             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   30830             :                    and subject to change.
   30831             :        */
   30832             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   30833             : 
   30834             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   30835             : 
   30836             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   30837             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   30838             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   30839             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   30840             : 
   30841             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   30842             : 
   30843             :           \returns long
   30844             :        */
   30845             :           virtual long getChildIndex( SgNode* childNode ) const override;
   30846             : 
   30847             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   30848             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   30849             :       /* \brief Constructor for use by AST File I/O Mechanism
   30850             : 
   30851             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   30852             :           which obtained via fast binary file I/O from disk.
   30853             :        */
   30854             :        // SgDirectory( SgDirectoryStorageClass& source );
   30855             : 
   30856             : 
   30857             : 
   30858             : 
   30859             : 
   30860             :  // JH (10/24/2005): methods added to support the ast file IO
   30861             :     private:
   30862             : 
   30863             :       /* name AST Memory Allocation Support Functions
   30864             :           \brief Memory allocations support....
   30865             : 
   30866             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   30867             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   30868             :           and support the AST File I/O Mechanism.
   30869             :        */
   30870             :       /* */
   30871             : 
   30872             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   30873             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   30874             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   30875             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   30876             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   30877             :           a correspinding one in the AST_FILE_IO class!
   30878             :        */
   30879             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   30880             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   30881             :       /* \brief Typedef used for low level memory access.
   30882             :        */
   30883             :        // typedef unsigned char* TestType;
   30884             : 
   30885             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   30886             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   30887             :       /* \brief Typedef used to hold memory addresses as values.
   30888             :        */
   30889             :        // typedef unsigned long  AddressType;
   30890             : 
   30891             : 
   30892             : 
   30893             :        // necessary, to have direct access to the p_freepointer and the private methods !
   30894             :       /*! \brief friend class declaration to support AST File I/O */
   30895             :           friend class AST_FILE_IO;
   30896             : 
   30897             :       /*! \brief friend class declaration to support AST File I/O */
   30898             :           friend class SgDirectoryStorageClass;
   30899             : 
   30900             :       /*! \brief friend class declaration to support AST File I/O */
   30901             :           friend class AstSpecificDataManagingClass;
   30902             : 
   30903             :       /*! \brief friend class declaration to support AST File I/O */
   30904             :           friend class AstSpecificDataManagingClassStorageClass;
   30905             :     public:
   30906             :       /*! \brief IR node constructor to support AST File I/O */
   30907             :           SgDirectory( const SgDirectoryStorageClass& source );
   30908             : 
   30909             :  // private: // JJW hack
   30910             :        /*
   30911             :           name AST Memory Allocation Support Variables
   30912             :           Memory allocations support variables 
   30913             : 
   30914             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   30915             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   30916             :           and support the AST File I/O Mechanism.
   30917             :        */
   30918             :       /* */
   30919             : 
   30920             :     public:
   30921             : 
   30922             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   30923             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   30924             :       // virtual SgNode* addRegExpAttribute();
   30925             :       /*! \brief Support for AST matching using regular expression.
   30926             : 
   30927             :           This support is incomplete and the subject of current research to define 
   30928             :           RegEx trees to support inexact matching.
   30929             :        */
   30930             :           SgDirectory* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   30931             : 
   30932             : // *** COMMON CODE SECTION ENDS HERE ***
   30933             : 
   30934             : 
   30935             : // End of memberFunctionString
   30936             : // Start of memberFunctionString
   30937             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   30938             : 
   30939             :      // the generated cast function
   30940             :      // friend ROSE_DLL_API SgDirectory* isSgDirectory ( SgNode* s );
   30941             : 
   30942             :           typedef SgSupport base_node_type;
   30943             : 
   30944             : 
   30945             : // End of memberFunctionString
   30946             : 
   30947             :      public: 
   30948             :          std::string get_name() const /* (getDataAccessFunctionPrototypeString) */;
   30949             :          void set_name(std::string name) /* (getDataAccessFunctionPrototypeString) */;
   30950             : 
   30951             :      public: 
   30952             :          SgFileList* get_fileList() const;
   30953             :          void set_fileList(SgFileList* fileList);
   30954             : 
   30955             :      public: 
   30956             :          SgDirectoryList* get_directoryList() const;
   30957             :          void set_directoryList(SgDirectoryList* directoryList);
   30958             : 
   30959             :      public: 
   30960             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   30961             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   30962             : 
   30963             : 
   30964             :      public: 
   30965             :          virtual ~SgDirectory();
   30966             : 
   30967             : 
   30968             :      public: 
   30969             :          SgDirectory(std::string name = ""); 
   30970             : 
   30971             :     protected:
   30972             : // Start of memberFunctionString
   30973             : std::string p_name;
   30974             :           
   30975             : // End of memberFunctionString
   30976             : // Start of memberFunctionString
   30977             : SgFileList* p_fileList;
   30978             :           
   30979             : // End of memberFunctionString
   30980             : // Start of memberFunctionString
   30981             : SgDirectoryList* p_directoryList;
   30982             :           
   30983             : // End of memberFunctionString
   30984             : // Start of memberFunctionString
   30985             : AstAttributeMechanism* p_attributeMechanism;
   30986             :           
   30987             : // End of memberFunctionString
   30988             : 
   30989             :     friend struct Rose::Traits::generated::describe_node_t<SgDirectory>;
   30990             :     friend struct Rose::Traits::generated::describe_field_t<SgDirectory, std::string,&SgDirectory::p_name>;
   30991             :     friend struct Rose::Traits::generated::describe_field_t<SgDirectory, SgFileList*,&SgDirectory::p_fileList>;
   30992             :     friend struct Rose::Traits::generated::describe_field_t<SgDirectory, SgDirectoryList*,&SgDirectory::p_directoryList>;
   30993             :     friend struct Rose::Traits::generated::describe_field_t<SgDirectory, AstAttributeMechanism*,&SgDirectory::p_attributeMechanism>;
   30994             : 
   30995             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   30996             : 
   30997             : 
   30998             :    };
   30999             : #endif
   31000             : 
   31001             : // postdeclarations for SgDirectory
   31002             : 
   31003             : /* #line 31004 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31004             : 
   31005             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   31006             : 
   31007             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31008             : 
   31009             : 
   31010             : /* #line 31011 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31011             : 
   31012             : 
   31013             : 
   31014             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31015             : 
   31016             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   31017             : //      This code is automatically generated for each 
   31018             : //      terminal and non-terminal within the defined 
   31019             : //      grammar.  There is a simple way to change the 
   31020             : //      code to fix bugs etc.  See the ROSE README file
   31021             : //      for directions.
   31022             : 
   31023             : // tps: (02/22/2010): Adding DLL export requirements
   31024             : #include "rosedll.h"
   31025             : 
   31026             : // predeclarations for SgFileList
   31027             : 
   31028             : /* #line 31029 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31029             : 
   31030             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   31031             : 
   31032             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31033             : 
   31034             : #if 1
   31035             : // Class Definition for SgFileList
   31036             : class ROSE_DLL_API SgFileList  : public SgSupport
   31037             :    {
   31038             :      public:
   31039             : 
   31040             : 
   31041             : /* #line 31042 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31042             : 
   31043             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   31044             : // Start of memberFunctionString
   31045             : /* #line 6653 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   31046             : 
   31047             :      public:
   31048             : 
   31049             : 
   31050             : 
   31051             : // End of memberFunctionString
   31052             : // Start of memberFunctionString
   31053             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   31054             : 
   31055             : 
   31056             :      /* name Persistant Attribute Mechanism
   31057             : 
   31058             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   31059             :          multiple passes. Note that these attributes are persistant in that they are preserved
   31060             :          if the AST is written out to a file and read in from a file.  However, virtual function
   31061             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   31062             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   31063             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   31064             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   31065             :          access is required, however mostly only internal tools use this lower level support).
   31066             : 
   31067             :          \internal This used to be a public data member, but has been changed to be a protected
   31068             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   31069             :          but some of the names and the syntax for calling the interface have changed. The
   31070             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   31071             :       */
   31072             :      /* */
   31073             :      //! Add a new attribute represented by the named string.
   31074             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   31075             :      //! Returns attribute of name 's'.
   31076             :          virtual AstAttribute* getAttribute(std::string s) const override;
   31077             :      //! Replace existing attribute of name 's' with new AstAttribute.
   31078             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   31079             :      /*! \brief This is a wrapper function with the following semantics:
   31080             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   31081             :          otherwise \b updateAttribute(s,a); is called.
   31082             :       */
   31083             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   31084             :      //! Remove attribute of name 's' if present.
   31085             :          virtual void removeAttribute(std::string s) override;
   31086             :      //! Tests if attribute of name 's' is present.
   31087             :          virtual bool attributeExists(std::string s) const override;
   31088             :      //! Returns the number of attributes on this IR node.
   31089             :          virtual int numberOfAttributes() const override;
   31090             : 
   31091             :      /*! \fn AstAttributeMechanism* SgFileList::get_attributeMechanism() const;
   31092             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   31093             :                 a pointer to it is returned, else error.
   31094             : 
   31095             :          This is an access function used for getting the interally held pointer to a valid
   31096             :          AstAttributeMechanism. It provides access to lower level functionality of the
   31097             :          AstAttributeMechanism, put is mostly of use to internal tools.
   31098             :       */
   31099             :      /*! \fn void SgFileList::set_attributeMechanism(AstAttributeMechanism* a);
   31100             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   31101             : 
   31102             :          This is an access function used for setting the interally held pointer to a valid
   31103             :          AstAttributeMechanism.
   31104             :       */
   31105             :      /* */
   31106             : 
   31107             : 
   31108             : 
   31109             : 
   31110             : // End of memberFunctionString
   31111             : // Start of memberFunctionString
   31112             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   31113             : 
   31114             : // *** COMMON CODE SECTION BEGINS HERE ***
   31115             : 
   31116             :     public:
   31117             : 
   31118             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   31119             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   31120             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   31121             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   31122             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   31123             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   31124             : 
   31125             :       /*! \brief returns a string representing the class name */
   31126             :           virtual std::string class_name() const override;
   31127             : 
   31128             :       /*! \brief returns new style SageIII enum values */
   31129             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   31130             : 
   31131             :       /*! \brief static variant value */
   31132             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   31133             :        // static const VariantT static_variant = V_SgFileList;
   31134             :           enum { static_variant = V_SgFileList };
   31135             : 
   31136             :        /* the generated cast function */
   31137             :       /*! \brief Casts pointer from base class to derived class */
   31138             :           ROSE_DLL_API friend       SgFileList* isSgFileList(       SgNode * s );
   31139             : 
   31140             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   31141             :           ROSE_DLL_API friend const SgFileList* isSgFileList( const SgNode * s );
   31142             : 
   31143             :      // ******************************************
   31144             :      // * Memory Pool / New / Delete
   31145             :      // ******************************************
   31146             : 
   31147             :      public:
   31148             :           /// \private
   31149             :           static const unsigned pool_size; //
   31150             :           /// \private
   31151             :           static std::vector<unsigned char *> pools; //
   31152             :           /// \private
   31153             :           static SgFileList * next_node; // 
   31154             : 
   31155             :           /// \private
   31156             :           static unsigned long initializeStorageClassArray(SgFileListStorageClass *); //
   31157             : 
   31158             :           /// \private
   31159             :           static void clearMemoryPool(); //
   31160             :           static void deleteMemoryPool(); //
   31161             : 
   31162             :           /// \private
   31163             :           static void extendMemoryPoolForFileIO(); //
   31164             : 
   31165             :           /// \private
   31166             :           static SgFileList * getPointerFromGlobalIndex(unsigned long); //
   31167             :           /// \private
   31168             :           static SgFileList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   31169             : 
   31170             :           /// \private
   31171             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   31172             :           /// \private
   31173             :           static void resetValidFreepointers(); //
   31174             :           /// \private
   31175             :           static unsigned long getNumberOfLastValidPointer(); //
   31176             : 
   31177             : 
   31178             : #if defined(INLINE_FUNCTIONS)
   31179             :       /*! \brief returns pointer to newly allocated IR node */
   31180             :           inline void *operator new (size_t size);
   31181             : #else
   31182             :       /*! \brief returns pointer to newly allocated IR node */
   31183             :           void *operator new (size_t size);
   31184             : #endif
   31185             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   31186             :           void operator delete (void* pointer, size_t size);
   31187             : 
   31188             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   31189           7 :           void operator delete (void* pointer)
   31190             :              {
   31191             :             // This is the generated delete operator...
   31192           7 :                SgFileList::operator delete (pointer,sizeof(SgFileList));
   31193             :              }
   31194             : 
   31195             :       /*! \brief Returns the total number of IR nodes of this type */
   31196             :           static size_t numberOfNodes();
   31197             : 
   31198             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   31199             :           static size_t memoryUsage();
   31200             : 
   31201             :       // End of scope which started in IR nodes specific code 
   31202             :       /* */
   31203             : 
   31204             :       /* name Internal Functions
   31205             :           \brief Internal functions ... incomplete-documentation
   31206             : 
   31207             :           These functions have been made public as part of the design, but they are suggested for internal use 
   31208             :           or by particularly knowledgeable users for specialized tools or applications.
   31209             : 
   31210             :           \internal We could not make these private because they are required by user for special purposes. And 
   31211             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   31212             :          
   31213             :        */
   31214             : 
   31215             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   31216             :        // overridden in every class by *generated* implementation
   31217             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   31218             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   31219             :        // MS: 06/28/02 container of names of variables or container indices 
   31220             :        // used used in the traversal to access AST successor nodes
   31221             :        // overridden in every class by *generated* implementation
   31222             :       /*! \brief container of names of variables or container indices used used in the traversal
   31223             :           to access AST successor nodes overridden in every class by *generated* implementation */
   31224             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   31225             : 
   31226             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   31227             :        // than all the vector copies. The implementation for these functions is generated for each class.
   31228             :       /*! \brief return number of children in the traversal successor list */
   31229             :           virtual size_t get_numberOfTraversalSuccessors() override;
   31230             :       /*! \brief index-based access to traversal successors by index number */
   31231             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   31232             :       /*! \brief index-based access to traversal successors by child node */
   31233             :           virtual size_t get_childIndex(SgNode *child) override;
   31234             : 
   31235             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   31236             :        // MS: 08/16/2002 method for generating RTI information
   31237             :       /*! \brief return C++ Runtime-Time-Information */
   31238             :           virtual RTIReturnType roseRTI() override;
   31239             : #endif
   31240             :       /* */
   31241             : 
   31242             : 
   31243             : 
   31244             :       /* name Deprecated Functions
   31245             :           \brief Deprecated functions ... incomplete-documentation
   31246             : 
   31247             :           These functions have been deprecated from use.
   31248             :        */
   31249             :       /* */
   31250             : 
   31251             :       /*! returns a C style string (char*) representing the class name */
   31252             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   31253             : 
   31254             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   31255             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   31256             : #if 0
   31257             :       /*! returns old style Sage II enum values */
   31258             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   31259             :       /*! returns old style Sage II enum values */
   31260             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   31261             : #endif
   31262             :       /* */
   31263             : 
   31264             : 
   31265             : 
   31266             : 
   31267             :      public:
   31268             :       /* name Traversal Support Functions
   31269             :           \brief Traversal support functions ... incomplete-documentation
   31270             : 
   31271             :           These functions have been made public as part of the design, but they are suggested for internal use 
   31272             :           or by particularly knowledgable users for specialized tools or applications.
   31273             :        */
   31274             :       /* */
   31275             : 
   31276             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   31277             :        // (inferior to ROSE traversal mechanism, experimental).
   31278             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   31279             :        */
   31280             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   31281             : 
   31282             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   31283             :       /*! \brief support for the classic visitor pattern done in GoF */
   31284             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   31285             : 
   31286             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   31287             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   31288             :        */
   31289             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   31290             : 
   31291             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   31292             :        */
   31293             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   31294             : 
   31295             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   31296             :        // This traversal helps support internal tools that call static member functions.
   31297             :        // note: this function operates on the memory pools.
   31298             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   31299             :        */
   31300             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   31301             :       /* */
   31302             : 
   31303             : 
   31304             :      public:
   31305             :       /* name Memory Allocation Functions
   31306             :           \brief Memory allocations functions ... incomplete-documentation
   31307             : 
   31308             :           These functions have been made public as part of the design, but they are suggested for internal use 
   31309             :           or by particularly knowledgable users for specialized tools or applications.
   31310             :        */
   31311             :       /* */
   31312             : 
   31313             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   31314             : 
   31315             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   31316             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   31317             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   31318             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   31319             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   31320             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   31321             :           being used with the AST File I/O mechanism.
   31322             :        */
   31323             :           virtual bool isInMemoryPool() override;
   31324             : 
   31325             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   31326             : 
   31327             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   31328             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   31329             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   31330             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   31331             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   31332             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   31333             :           being used with the AST File I/O mechanism.
   31334             :        */
   31335             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   31336             : 
   31337             :       // DQ (4/30/2006): Modified to be a const function.
   31338             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   31339             : 
   31340             :           This functions is part of general support for many possible tools to operate 
   31341             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   31342             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   31343             :           less than the set of pointers used by the AST file I/O. This is part of
   31344             :           work implemented by Andreas, and support tools such as the AST graph generation.
   31345             : 
   31346             :           \warning This function can return unexpected data members and thus the 
   31347             :                    order and the number of elements is unpredicable and subject 
   31348             :                    to change.
   31349             : 
   31350             :           \returns STL vector of pairs of SgNode* and strings
   31351             :        */
   31352             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   31353             : 
   31354             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   31355             : 
   31356             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   31357             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   31358             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   31359             : 
   31360             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   31361             :                    and subject to change.
   31362             :        */
   31363             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   31364             : 
   31365             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   31366             : 
   31367             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   31368             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   31369             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   31370             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   31371             : 
   31372             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   31373             : 
   31374             :           \returns long
   31375             :        */
   31376             :           virtual long getChildIndex( SgNode* childNode ) const override;
   31377             : 
   31378             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   31379             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   31380             :       /* \brief Constructor for use by AST File I/O Mechanism
   31381             : 
   31382             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   31383             :           which obtained via fast binary file I/O from disk.
   31384             :        */
   31385             :        // SgFileList( SgFileListStorageClass& source );
   31386             : 
   31387             : 
   31388             : 
   31389             : 
   31390             : 
   31391             :  // JH (10/24/2005): methods added to support the ast file IO
   31392             :     private:
   31393             : 
   31394             :       /* name AST Memory Allocation Support Functions
   31395             :           \brief Memory allocations support....
   31396             : 
   31397             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   31398             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   31399             :           and support the AST File I/O Mechanism.
   31400             :        */
   31401             :       /* */
   31402             : 
   31403             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   31404             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   31405             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   31406             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   31407             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   31408             :           a correspinding one in the AST_FILE_IO class!
   31409             :        */
   31410             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   31411             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   31412             :       /* \brief Typedef used for low level memory access.
   31413             :        */
   31414             :        // typedef unsigned char* TestType;
   31415             : 
   31416             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   31417             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   31418             :       /* \brief Typedef used to hold memory addresses as values.
   31419             :        */
   31420             :        // typedef unsigned long  AddressType;
   31421             : 
   31422             : 
   31423             : 
   31424             :        // necessary, to have direct access to the p_freepointer and the private methods !
   31425             :       /*! \brief friend class declaration to support AST File I/O */
   31426             :           friend class AST_FILE_IO;
   31427             : 
   31428             :       /*! \brief friend class declaration to support AST File I/O */
   31429             :           friend class SgFileListStorageClass;
   31430             : 
   31431             :       /*! \brief friend class declaration to support AST File I/O */
   31432             :           friend class AstSpecificDataManagingClass;
   31433             : 
   31434             :       /*! \brief friend class declaration to support AST File I/O */
   31435             :           friend class AstSpecificDataManagingClassStorageClass;
   31436             :     public:
   31437             :       /*! \brief IR node constructor to support AST File I/O */
   31438             :           SgFileList( const SgFileListStorageClass& source );
   31439             : 
   31440             :  // private: // JJW hack
   31441             :        /*
   31442             :           name AST Memory Allocation Support Variables
   31443             :           Memory allocations support variables 
   31444             : 
   31445             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   31446             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   31447             :           and support the AST File I/O Mechanism.
   31448             :        */
   31449             :       /* */
   31450             : 
   31451             :     public:
   31452             : 
   31453             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   31454             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   31455             :       // virtual SgNode* addRegExpAttribute();
   31456             :       /*! \brief Support for AST matching using regular expression.
   31457             : 
   31458             :           This support is incomplete and the subject of current research to define 
   31459             :           RegEx trees to support inexact matching.
   31460             :        */
   31461             :           SgFileList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   31462             : 
   31463             : // *** COMMON CODE SECTION ENDS HERE ***
   31464             : 
   31465             : 
   31466             : // End of memberFunctionString
   31467             : // Start of memberFunctionString
   31468             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   31469             : 
   31470             :      // the generated cast function
   31471             :      // friend ROSE_DLL_API SgFileList* isSgFileList ( SgNode* s );
   31472             : 
   31473             :           typedef SgSupport base_node_type;
   31474             : 
   31475             : 
   31476             : // End of memberFunctionString
   31477             : 
   31478             :      public: 
   31479             :          const SgFilePtrList&  get_listOfFiles() const;
   31480             :          SgFilePtrList& get_listOfFiles(); 
   31481             : 
   31482             :      public: 
   31483             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   31484             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   31485             : 
   31486             : 
   31487             :      public: 
   31488             :          virtual ~SgFileList();
   31489             : 
   31490             : 
   31491             :      public: 
   31492             :          SgFileList(); 
   31493             : 
   31494             :     protected:
   31495             : // Start of memberFunctionString
   31496             : SgFilePtrList p_listOfFiles;
   31497             :           
   31498             : // End of memberFunctionString
   31499             : // Start of memberFunctionString
   31500             : AstAttributeMechanism* p_attributeMechanism;
   31501             :           
   31502             : // End of memberFunctionString
   31503             : 
   31504             :     friend struct Rose::Traits::generated::describe_node_t<SgFileList>;
   31505             :     friend struct Rose::Traits::generated::describe_field_t<SgFileList, SgFilePtrList,&SgFileList::p_listOfFiles>;
   31506             :     friend struct Rose::Traits::generated::describe_field_t<SgFileList, AstAttributeMechanism*,&SgFileList::p_attributeMechanism>;
   31507             : 
   31508             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31509             : 
   31510             : 
   31511             :    };
   31512             : #endif
   31513             : 
   31514             : // postdeclarations for SgFileList
   31515             : 
   31516             : /* #line 31517 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31517             : 
   31518             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   31519             : 
   31520             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31521             : 
   31522             : 
   31523             : /* #line 31524 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31524             : 
   31525             : 
   31526             : 
   31527             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31528             : 
   31529             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   31530             : //      This code is automatically generated for each 
   31531             : //      terminal and non-terminal within the defined 
   31532             : //      grammar.  There is a simple way to change the 
   31533             : //      code to fix bugs etc.  See the ROSE README file
   31534             : //      for directions.
   31535             : 
   31536             : // tps: (02/22/2010): Adding DLL export requirements
   31537             : #include "rosedll.h"
   31538             : 
   31539             : // predeclarations for SgDirectoryList
   31540             : 
   31541             : /* #line 31542 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31542             : 
   31543             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   31544             : 
   31545             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31546             : 
   31547             : #if 1
   31548             : // Class Definition for SgDirectoryList
   31549             : class ROSE_DLL_API SgDirectoryList  : public SgSupport
   31550             :    {
   31551             :      public:
   31552             : 
   31553             : 
   31554             : /* #line 31555 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31555             : 
   31556             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   31557             : // Start of memberFunctionString
   31558             : /* #line 6672 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   31559             : 
   31560             :      public:
   31561             : 
   31562             : 
   31563             : 
   31564             : // End of memberFunctionString
   31565             : // Start of memberFunctionString
   31566             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   31567             : 
   31568             : // *** COMMON CODE SECTION BEGINS HERE ***
   31569             : 
   31570             :     public:
   31571             : 
   31572             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   31573             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   31574             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   31575             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   31576             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   31577             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   31578             : 
   31579             :       /*! \brief returns a string representing the class name */
   31580             :           virtual std::string class_name() const override;
   31581             : 
   31582             :       /*! \brief returns new style SageIII enum values */
   31583             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   31584             : 
   31585             :       /*! \brief static variant value */
   31586             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   31587             :        // static const VariantT static_variant = V_SgDirectoryList;
   31588             :           enum { static_variant = V_SgDirectoryList };
   31589             : 
   31590             :        /* the generated cast function */
   31591             :       /*! \brief Casts pointer from base class to derived class */
   31592             :           ROSE_DLL_API friend       SgDirectoryList* isSgDirectoryList(       SgNode * s );
   31593             : 
   31594             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   31595             :           ROSE_DLL_API friend const SgDirectoryList* isSgDirectoryList( const SgNode * s );
   31596             : 
   31597             :      // ******************************************
   31598             :      // * Memory Pool / New / Delete
   31599             :      // ******************************************
   31600             : 
   31601             :      public:
   31602             :           /// \private
   31603             :           static const unsigned pool_size; //
   31604             :           /// \private
   31605             :           static std::vector<unsigned char *> pools; //
   31606             :           /// \private
   31607             :           static SgDirectoryList * next_node; // 
   31608             : 
   31609             :           /// \private
   31610             :           static unsigned long initializeStorageClassArray(SgDirectoryListStorageClass *); //
   31611             : 
   31612             :           /// \private
   31613             :           static void clearMemoryPool(); //
   31614             :           static void deleteMemoryPool(); //
   31615             : 
   31616             :           /// \private
   31617             :           static void extendMemoryPoolForFileIO(); //
   31618             : 
   31619             :           /// \private
   31620             :           static SgDirectoryList * getPointerFromGlobalIndex(unsigned long); //
   31621             :           /// \private
   31622             :           static SgDirectoryList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   31623             : 
   31624             :           /// \private
   31625             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   31626             :           /// \private
   31627             :           static void resetValidFreepointers(); //
   31628             :           /// \private
   31629             :           static unsigned long getNumberOfLastValidPointer(); //
   31630             : 
   31631             : 
   31632             : #if defined(INLINE_FUNCTIONS)
   31633             :       /*! \brief returns pointer to newly allocated IR node */
   31634             :           inline void *operator new (size_t size);
   31635             : #else
   31636             :       /*! \brief returns pointer to newly allocated IR node */
   31637             :           void *operator new (size_t size);
   31638             : #endif
   31639             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   31640             :           void operator delete (void* pointer, size_t size);
   31641             : 
   31642             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   31643           7 :           void operator delete (void* pointer)
   31644             :              {
   31645             :             // This is the generated delete operator...
   31646           7 :                SgDirectoryList::operator delete (pointer,sizeof(SgDirectoryList));
   31647             :              }
   31648             : 
   31649             :       /*! \brief Returns the total number of IR nodes of this type */
   31650             :           static size_t numberOfNodes();
   31651             : 
   31652             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   31653             :           static size_t memoryUsage();
   31654             : 
   31655             :       // End of scope which started in IR nodes specific code 
   31656             :       /* */
   31657             : 
   31658             :       /* name Internal Functions
   31659             :           \brief Internal functions ... incomplete-documentation
   31660             : 
   31661             :           These functions have been made public as part of the design, but they are suggested for internal use 
   31662             :           or by particularly knowledgeable users for specialized tools or applications.
   31663             : 
   31664             :           \internal We could not make these private because they are required by user for special purposes. And 
   31665             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   31666             :          
   31667             :        */
   31668             : 
   31669             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   31670             :        // overridden in every class by *generated* implementation
   31671             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   31672             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   31673             :        // MS: 06/28/02 container of names of variables or container indices 
   31674             :        // used used in the traversal to access AST successor nodes
   31675             :        // overridden in every class by *generated* implementation
   31676             :       /*! \brief container of names of variables or container indices used used in the traversal
   31677             :           to access AST successor nodes overridden in every class by *generated* implementation */
   31678             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   31679             : 
   31680             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   31681             :        // than all the vector copies. The implementation for these functions is generated for each class.
   31682             :       /*! \brief return number of children in the traversal successor list */
   31683             :           virtual size_t get_numberOfTraversalSuccessors() override;
   31684             :       /*! \brief index-based access to traversal successors by index number */
   31685             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   31686             :       /*! \brief index-based access to traversal successors by child node */
   31687             :           virtual size_t get_childIndex(SgNode *child) override;
   31688             : 
   31689             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   31690             :        // MS: 08/16/2002 method for generating RTI information
   31691             :       /*! \brief return C++ Runtime-Time-Information */
   31692             :           virtual RTIReturnType roseRTI() override;
   31693             : #endif
   31694             :       /* */
   31695             : 
   31696             : 
   31697             : 
   31698             :       /* name Deprecated Functions
   31699             :           \brief Deprecated functions ... incomplete-documentation
   31700             : 
   31701             :           These functions have been deprecated from use.
   31702             :        */
   31703             :       /* */
   31704             : 
   31705             :       /*! returns a C style string (char*) representing the class name */
   31706             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   31707             : 
   31708             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   31709             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   31710             : #if 0
   31711             :       /*! returns old style Sage II enum values */
   31712             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   31713             :       /*! returns old style Sage II enum values */
   31714             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   31715             : #endif
   31716             :       /* */
   31717             : 
   31718             : 
   31719             : 
   31720             : 
   31721             :      public:
   31722             :       /* name Traversal Support Functions
   31723             :           \brief Traversal support functions ... incomplete-documentation
   31724             : 
   31725             :           These functions have been made public as part of the design, but they are suggested for internal use 
   31726             :           or by particularly knowledgable users for specialized tools or applications.
   31727             :        */
   31728             :       /* */
   31729             : 
   31730             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   31731             :        // (inferior to ROSE traversal mechanism, experimental).
   31732             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   31733             :        */
   31734             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   31735             : 
   31736             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   31737             :       /*! \brief support for the classic visitor pattern done in GoF */
   31738             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   31739             : 
   31740             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   31741             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   31742             :        */
   31743             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   31744             : 
   31745             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   31746             :        */
   31747             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   31748             : 
   31749             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   31750             :        // This traversal helps support internal tools that call static member functions.
   31751             :        // note: this function operates on the memory pools.
   31752             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   31753             :        */
   31754             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   31755             :       /* */
   31756             : 
   31757             : 
   31758             :      public:
   31759             :       /* name Memory Allocation Functions
   31760             :           \brief Memory allocations functions ... incomplete-documentation
   31761             : 
   31762             :           These functions have been made public as part of the design, but they are suggested for internal use 
   31763             :           or by particularly knowledgable users for specialized tools or applications.
   31764             :        */
   31765             :       /* */
   31766             : 
   31767             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   31768             : 
   31769             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   31770             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   31771             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   31772             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   31773             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   31774             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   31775             :           being used with the AST File I/O mechanism.
   31776             :        */
   31777             :           virtual bool isInMemoryPool() override;
   31778             : 
   31779             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   31780             : 
   31781             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   31782             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   31783             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   31784             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   31785             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   31786             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   31787             :           being used with the AST File I/O mechanism.
   31788             :        */
   31789             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   31790             : 
   31791             :       // DQ (4/30/2006): Modified to be a const function.
   31792             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   31793             : 
   31794             :           This functions is part of general support for many possible tools to operate 
   31795             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   31796             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   31797             :           less than the set of pointers used by the AST file I/O. This is part of
   31798             :           work implemented by Andreas, and support tools such as the AST graph generation.
   31799             : 
   31800             :           \warning This function can return unexpected data members and thus the 
   31801             :                    order and the number of elements is unpredicable and subject 
   31802             :                    to change.
   31803             : 
   31804             :           \returns STL vector of pairs of SgNode* and strings
   31805             :        */
   31806             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   31807             : 
   31808             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   31809             : 
   31810             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   31811             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   31812             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   31813             : 
   31814             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   31815             :                    and subject to change.
   31816             :        */
   31817             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   31818             : 
   31819             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   31820             : 
   31821             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   31822             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   31823             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   31824             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   31825             : 
   31826             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   31827             : 
   31828             :           \returns long
   31829             :        */
   31830             :           virtual long getChildIndex( SgNode* childNode ) const override;
   31831             : 
   31832             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   31833             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   31834             :       /* \brief Constructor for use by AST File I/O Mechanism
   31835             : 
   31836             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   31837             :           which obtained via fast binary file I/O from disk.
   31838             :        */
   31839             :        // SgDirectoryList( SgDirectoryListStorageClass& source );
   31840             : 
   31841             : 
   31842             : 
   31843             : 
   31844             : 
   31845             :  // JH (10/24/2005): methods added to support the ast file IO
   31846             :     private:
   31847             : 
   31848             :       /* name AST Memory Allocation Support Functions
   31849             :           \brief Memory allocations support....
   31850             : 
   31851             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   31852             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   31853             :           and support the AST File I/O Mechanism.
   31854             :        */
   31855             :       /* */
   31856             : 
   31857             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   31858             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   31859             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   31860             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   31861             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   31862             :           a correspinding one in the AST_FILE_IO class!
   31863             :        */
   31864             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   31865             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   31866             :       /* \brief Typedef used for low level memory access.
   31867             :        */
   31868             :        // typedef unsigned char* TestType;
   31869             : 
   31870             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   31871             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   31872             :       /* \brief Typedef used to hold memory addresses as values.
   31873             :        */
   31874             :        // typedef unsigned long  AddressType;
   31875             : 
   31876             : 
   31877             : 
   31878             :        // necessary, to have direct access to the p_freepointer and the private methods !
   31879             :       /*! \brief friend class declaration to support AST File I/O */
   31880             :           friend class AST_FILE_IO;
   31881             : 
   31882             :       /*! \brief friend class declaration to support AST File I/O */
   31883             :           friend class SgDirectoryListStorageClass;
   31884             : 
   31885             :       /*! \brief friend class declaration to support AST File I/O */
   31886             :           friend class AstSpecificDataManagingClass;
   31887             : 
   31888             :       /*! \brief friend class declaration to support AST File I/O */
   31889             :           friend class AstSpecificDataManagingClassStorageClass;
   31890             :     public:
   31891             :       /*! \brief IR node constructor to support AST File I/O */
   31892             :           SgDirectoryList( const SgDirectoryListStorageClass& source );
   31893             : 
   31894             :  // private: // JJW hack
   31895             :        /*
   31896             :           name AST Memory Allocation Support Variables
   31897             :           Memory allocations support variables 
   31898             : 
   31899             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   31900             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   31901             :           and support the AST File I/O Mechanism.
   31902             :        */
   31903             :       /* */
   31904             : 
   31905             :     public:
   31906             : 
   31907             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   31908             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   31909             :       // virtual SgNode* addRegExpAttribute();
   31910             :       /*! \brief Support for AST matching using regular expression.
   31911             : 
   31912             :           This support is incomplete and the subject of current research to define 
   31913             :           RegEx trees to support inexact matching.
   31914             :        */
   31915             :           SgDirectoryList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   31916             : 
   31917             : // *** COMMON CODE SECTION ENDS HERE ***
   31918             : 
   31919             : 
   31920             : // End of memberFunctionString
   31921             : // Start of memberFunctionString
   31922             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   31923             : 
   31924             :      // the generated cast function
   31925             :      // friend ROSE_DLL_API SgDirectoryList* isSgDirectoryList ( SgNode* s );
   31926             : 
   31927             :           typedef SgSupport base_node_type;
   31928             : 
   31929             : 
   31930             : // End of memberFunctionString
   31931             : 
   31932             :      public: 
   31933             :          const SgDirectoryPtrList&  get_listOfDirectories() const;
   31934             :          SgDirectoryPtrList& get_listOfDirectories(); 
   31935             : 
   31936             : 
   31937             :      public: 
   31938             :          virtual ~SgDirectoryList();
   31939             : 
   31940             : 
   31941             :      public: 
   31942             :          SgDirectoryList(); 
   31943             : 
   31944             :     protected:
   31945             : // Start of memberFunctionString
   31946             : SgDirectoryPtrList p_listOfDirectories;
   31947             :           
   31948             : // End of memberFunctionString
   31949             : 
   31950             :     friend struct Rose::Traits::generated::describe_node_t<SgDirectoryList>;
   31951             :     friend struct Rose::Traits::generated::describe_field_t<SgDirectoryList, SgDirectoryPtrList,&SgDirectoryList::p_listOfDirectories>;
   31952             : 
   31953             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31954             : 
   31955             : 
   31956             :    };
   31957             : #endif
   31958             : 
   31959             : // postdeclarations for SgDirectoryList
   31960             : 
   31961             : /* #line 31962 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31962             : 
   31963             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   31964             : 
   31965             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31966             : 
   31967             : 
   31968             : /* #line 31969 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31969             : 
   31970             : 
   31971             : 
   31972             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31973             : 
   31974             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   31975             : //      This code is automatically generated for each 
   31976             : //      terminal and non-terminal within the defined 
   31977             : //      grammar.  There is a simple way to change the 
   31978             : //      code to fix bugs etc.  See the ROSE README file
   31979             : //      for directions.
   31980             : 
   31981             : // tps: (02/22/2010): Adding DLL export requirements
   31982             : #include "rosedll.h"
   31983             : 
   31984             : // predeclarations for SgFunctionParameterTypeList
   31985             : 
   31986             : /* #line 31987 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   31987             : 
   31988             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   31989             : 
   31990             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   31991             : 
   31992             : #if 1
   31993             : // Class Definition for SgFunctionParameterTypeList
   31994             : class ROSE_DLL_API SgFunctionParameterTypeList  : public SgSupport
   31995             :    {
   31996             :      public:
   31997             : 
   31998             : 
   31999             : /* #line 32000 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32000             : 
   32001             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   32002             : // Start of memberFunctionString
   32003             : /* #line 21049 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   32004             : 
   32005             :       //! Get a const list of input types (types of the parameters list) to this function type (from a cost functionType object)
   32006             :           const SgTypePtrList & get_arguments() const;
   32007             : 
   32008             :       //! Get the list of input types (types of the parameters list) to this function type
   32009             :           SgTypePtrList & get_arguments();
   32010             : 
   32011             :        // WAS: void append_argument(const SgTypePtr& what);
   32012             :        // WAS: void insert_argument(const SgTypePtrList::iterator& where, const SgTypePtr & what)
   32013             : 
   32014             :       //! Append new argument to argument type list
   32015             :           void append_argument( SgType* what);
   32016             : 
   32017             :       //! Insert new argument to argument type list
   32018             :           void insert_argument(const SgTypePtrList::iterator& where, SgType* what);
   32019             : 
   32020             :        // DQ (1/18/2006): Added default constructor explicitly to avoid having it be generated by the compiler
   32021             :           SgFunctionParameterTypeList();
   32022             : 
   32023             : 
   32024             : 
   32025             : // End of memberFunctionString
   32026             : // Start of memberFunctionString
   32027             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   32028             : 
   32029             : // *** COMMON CODE SECTION BEGINS HERE ***
   32030             : 
   32031             :     public:
   32032             : 
   32033             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   32034             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   32035             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   32036             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   32037             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   32038             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   32039             : 
   32040             :       /*! \brief returns a string representing the class name */
   32041             :           virtual std::string class_name() const override;
   32042             : 
   32043             :       /*! \brief returns new style SageIII enum values */
   32044             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   32045             : 
   32046             :       /*! \brief static variant value */
   32047             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   32048             :        // static const VariantT static_variant = V_SgFunctionParameterTypeList;
   32049             :           enum { static_variant = V_SgFunctionParameterTypeList };
   32050             : 
   32051             :        /* the generated cast function */
   32052             :       /*! \brief Casts pointer from base class to derived class */
   32053             :           ROSE_DLL_API friend       SgFunctionParameterTypeList* isSgFunctionParameterTypeList(       SgNode * s );
   32054             : 
   32055             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   32056             :           ROSE_DLL_API friend const SgFunctionParameterTypeList* isSgFunctionParameterTypeList( const SgNode * s );
   32057             : 
   32058             :      // ******************************************
   32059             :      // * Memory Pool / New / Delete
   32060             :      // ******************************************
   32061             : 
   32062             :      public:
   32063             :           /// \private
   32064             :           static const unsigned pool_size; //
   32065             :           /// \private
   32066             :           static std::vector<unsigned char *> pools; //
   32067             :           /// \private
   32068             :           static SgFunctionParameterTypeList * next_node; // 
   32069             : 
   32070             :           /// \private
   32071             :           static unsigned long initializeStorageClassArray(SgFunctionParameterTypeListStorageClass *); //
   32072             : 
   32073             :           /// \private
   32074             :           static void clearMemoryPool(); //
   32075             :           static void deleteMemoryPool(); //
   32076             : 
   32077             :           /// \private
   32078             :           static void extendMemoryPoolForFileIO(); //
   32079             : 
   32080             :           /// \private
   32081             :           static SgFunctionParameterTypeList * getPointerFromGlobalIndex(unsigned long); //
   32082             :           /// \private
   32083             :           static SgFunctionParameterTypeList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   32084             : 
   32085             :           /// \private
   32086             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   32087             :           /// \private
   32088             :           static void resetValidFreepointers(); //
   32089             :           /// \private
   32090             :           static unsigned long getNumberOfLastValidPointer(); //
   32091             : 
   32092             : 
   32093             : #if defined(INLINE_FUNCTIONS)
   32094             :       /*! \brief returns pointer to newly allocated IR node */
   32095             :           inline void *operator new (size_t size);
   32096             : #else
   32097             :       /*! \brief returns pointer to newly allocated IR node */
   32098             :           void *operator new (size_t size);
   32099             : #endif
   32100             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   32101             :           void operator delete (void* pointer, size_t size);
   32102             : 
   32103             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   32104     2332860 :           void operator delete (void* pointer)
   32105             :              {
   32106             :             // This is the generated delete operator...
   32107     2332860 :                SgFunctionParameterTypeList::operator delete (pointer,sizeof(SgFunctionParameterTypeList));
   32108             :              }
   32109             : 
   32110             :       /*! \brief Returns the total number of IR nodes of this type */
   32111             :           static size_t numberOfNodes();
   32112             : 
   32113             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   32114             :           static size_t memoryUsage();
   32115             : 
   32116             :       // End of scope which started in IR nodes specific code 
   32117             :       /* */
   32118             : 
   32119             :       /* name Internal Functions
   32120             :           \brief Internal functions ... incomplete-documentation
   32121             : 
   32122             :           These functions have been made public as part of the design, but they are suggested for internal use 
   32123             :           or by particularly knowledgeable users for specialized tools or applications.
   32124             : 
   32125             :           \internal We could not make these private because they are required by user for special purposes. And 
   32126             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   32127             :          
   32128             :        */
   32129             : 
   32130             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   32131             :        // overridden in every class by *generated* implementation
   32132             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   32133             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   32134             :        // MS: 06/28/02 container of names of variables or container indices 
   32135             :        // used used in the traversal to access AST successor nodes
   32136             :        // overridden in every class by *generated* implementation
   32137             :       /*! \brief container of names of variables or container indices used used in the traversal
   32138             :           to access AST successor nodes overridden in every class by *generated* implementation */
   32139             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   32140             : 
   32141             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   32142             :        // than all the vector copies. The implementation for these functions is generated for each class.
   32143             :       /*! \brief return number of children in the traversal successor list */
   32144             :           virtual size_t get_numberOfTraversalSuccessors() override;
   32145             :       /*! \brief index-based access to traversal successors by index number */
   32146             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   32147             :       /*! \brief index-based access to traversal successors by child node */
   32148             :           virtual size_t get_childIndex(SgNode *child) override;
   32149             : 
   32150             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   32151             :        // MS: 08/16/2002 method for generating RTI information
   32152             :       /*! \brief return C++ Runtime-Time-Information */
   32153             :           virtual RTIReturnType roseRTI() override;
   32154             : #endif
   32155             :       /* */
   32156             : 
   32157             : 
   32158             : 
   32159             :       /* name Deprecated Functions
   32160             :           \brief Deprecated functions ... incomplete-documentation
   32161             : 
   32162             :           These functions have been deprecated from use.
   32163             :        */
   32164             :       /* */
   32165             : 
   32166             :       /*! returns a C style string (char*) representing the class name */
   32167             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   32168             : 
   32169             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   32170             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   32171             : #if 0
   32172             :       /*! returns old style Sage II enum values */
   32173             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   32174             :       /*! returns old style Sage II enum values */
   32175             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   32176             : #endif
   32177             :       /* */
   32178             : 
   32179             : 
   32180             : 
   32181             : 
   32182             :      public:
   32183             :       /* name Traversal Support Functions
   32184             :           \brief Traversal support functions ... incomplete-documentation
   32185             : 
   32186             :           These functions have been made public as part of the design, but they are suggested for internal use 
   32187             :           or by particularly knowledgable users for specialized tools or applications.
   32188             :        */
   32189             :       /* */
   32190             : 
   32191             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   32192             :        // (inferior to ROSE traversal mechanism, experimental).
   32193             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   32194             :        */
   32195             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   32196             : 
   32197             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   32198             :       /*! \brief support for the classic visitor pattern done in GoF */
   32199             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   32200             : 
   32201             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   32202             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   32203             :        */
   32204             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   32205             : 
   32206             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   32207             :        */
   32208             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   32209             : 
   32210             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   32211             :        // This traversal helps support internal tools that call static member functions.
   32212             :        // note: this function operates on the memory pools.
   32213             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   32214             :        */
   32215             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   32216             :       /* */
   32217             : 
   32218             : 
   32219             :      public:
   32220             :       /* name Memory Allocation Functions
   32221             :           \brief Memory allocations functions ... incomplete-documentation
   32222             : 
   32223             :           These functions have been made public as part of the design, but they are suggested for internal use 
   32224             :           or by particularly knowledgable users for specialized tools or applications.
   32225             :        */
   32226             :       /* */
   32227             : 
   32228             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   32229             : 
   32230             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   32231             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   32232             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   32233             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   32234             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   32235             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   32236             :           being used with the AST File I/O mechanism.
   32237             :        */
   32238             :           virtual bool isInMemoryPool() override;
   32239             : 
   32240             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   32241             : 
   32242             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   32243             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   32244             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   32245             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   32246             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   32247             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   32248             :           being used with the AST File I/O mechanism.
   32249             :        */
   32250             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   32251             : 
   32252             :       // DQ (4/30/2006): Modified to be a const function.
   32253             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   32254             : 
   32255             :           This functions is part of general support for many possible tools to operate 
   32256             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   32257             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   32258             :           less than the set of pointers used by the AST file I/O. This is part of
   32259             :           work implemented by Andreas, and support tools such as the AST graph generation.
   32260             : 
   32261             :           \warning This function can return unexpected data members and thus the 
   32262             :                    order and the number of elements is unpredicable and subject 
   32263             :                    to change.
   32264             : 
   32265             :           \returns STL vector of pairs of SgNode* and strings
   32266             :        */
   32267             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   32268             : 
   32269             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   32270             : 
   32271             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   32272             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   32273             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   32274             : 
   32275             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   32276             :                    and subject to change.
   32277             :        */
   32278             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   32279             : 
   32280             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   32281             : 
   32282             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   32283             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   32284             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   32285             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   32286             : 
   32287             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   32288             : 
   32289             :           \returns long
   32290             :        */
   32291             :           virtual long getChildIndex( SgNode* childNode ) const override;
   32292             : 
   32293             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   32294             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   32295             :       /* \brief Constructor for use by AST File I/O Mechanism
   32296             : 
   32297             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   32298             :           which obtained via fast binary file I/O from disk.
   32299             :        */
   32300             :        // SgFunctionParameterTypeList( SgFunctionParameterTypeListStorageClass& source );
   32301             : 
   32302             : 
   32303             : 
   32304             : 
   32305             : 
   32306             :  // JH (10/24/2005): methods added to support the ast file IO
   32307             :     private:
   32308             : 
   32309             :       /* name AST Memory Allocation Support Functions
   32310             :           \brief Memory allocations support....
   32311             : 
   32312             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   32313             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   32314             :           and support the AST File I/O Mechanism.
   32315             :        */
   32316             :       /* */
   32317             : 
   32318             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   32319             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   32320             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   32321             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   32322             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   32323             :           a correspinding one in the AST_FILE_IO class!
   32324             :        */
   32325             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   32326             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   32327             :       /* \brief Typedef used for low level memory access.
   32328             :        */
   32329             :        // typedef unsigned char* TestType;
   32330             : 
   32331             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   32332             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   32333             :       /* \brief Typedef used to hold memory addresses as values.
   32334             :        */
   32335             :        // typedef unsigned long  AddressType;
   32336             : 
   32337             : 
   32338             : 
   32339             :        // necessary, to have direct access to the p_freepointer and the private methods !
   32340             :       /*! \brief friend class declaration to support AST File I/O */
   32341             :           friend class AST_FILE_IO;
   32342             : 
   32343             :       /*! \brief friend class declaration to support AST File I/O */
   32344             :           friend class SgFunctionParameterTypeListStorageClass;
   32345             : 
   32346             :       /*! \brief friend class declaration to support AST File I/O */
   32347             :           friend class AstSpecificDataManagingClass;
   32348             : 
   32349             :       /*! \brief friend class declaration to support AST File I/O */
   32350             :           friend class AstSpecificDataManagingClassStorageClass;
   32351             :     public:
   32352             :       /*! \brief IR node constructor to support AST File I/O */
   32353             :           SgFunctionParameterTypeList( const SgFunctionParameterTypeListStorageClass& source );
   32354             : 
   32355             :  // private: // JJW hack
   32356             :        /*
   32357             :           name AST Memory Allocation Support Variables
   32358             :           Memory allocations support variables 
   32359             : 
   32360             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   32361             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   32362             :           and support the AST File I/O Mechanism.
   32363             :        */
   32364             :       /* */
   32365             : 
   32366             :     public:
   32367             : 
   32368             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   32369             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   32370             :       // virtual SgNode* addRegExpAttribute();
   32371             :       /*! \brief Support for AST matching using regular expression.
   32372             : 
   32373             :           This support is incomplete and the subject of current research to define 
   32374             :           RegEx trees to support inexact matching.
   32375             :        */
   32376             :           SgFunctionParameterTypeList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   32377             : 
   32378             : // *** COMMON CODE SECTION ENDS HERE ***
   32379             : 
   32380             : 
   32381             : // End of memberFunctionString
   32382             : // Start of memberFunctionString
   32383             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   32384             : 
   32385             :      // the generated cast function
   32386             :      // friend ROSE_DLL_API SgFunctionParameterTypeList* isSgFunctionParameterTypeList ( SgNode* s );
   32387             : 
   32388             :           typedef SgSupport base_node_type;
   32389             : 
   32390             : 
   32391             : // End of memberFunctionString
   32392             : 
   32393             : 
   32394             : 
   32395             :      public: 
   32396             :          virtual ~SgFunctionParameterTypeList();
   32397             : 
   32398             :     protected:
   32399             : // Start of memberFunctionString
   32400             : SgTypePtrList p_arguments;
   32401             :           
   32402             : // End of memberFunctionString
   32403             : 
   32404             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionParameterTypeList>;
   32405             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionParameterTypeList, SgTypePtrList,&SgFunctionParameterTypeList::p_arguments>;
   32406             : 
   32407             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32408             : 
   32409             : 
   32410             :    };
   32411             : #endif
   32412             : 
   32413             : // postdeclarations for SgFunctionParameterTypeList
   32414             : 
   32415             : /* #line 32416 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32416             : 
   32417             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   32418             : 
   32419             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32420             : 
   32421             : 
   32422             : /* #line 32423 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32423             : 
   32424             : 
   32425             : 
   32426             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32427             : 
   32428             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   32429             : //      This code is automatically generated for each 
   32430             : //      terminal and non-terminal within the defined 
   32431             : //      grammar.  There is a simple way to change the 
   32432             : //      code to fix bugs etc.  See the ROSE README file
   32433             : //      for directions.
   32434             : 
   32435             : // tps: (02/22/2010): Adding DLL export requirements
   32436             : #include "rosedll.h"
   32437             : 
   32438             : // predeclarations for SgQualifiedName
   32439             : 
   32440             : /* #line 32441 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32441             : 
   32442             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   32443             : 
   32444             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32445             : 
   32446             : #if 1
   32447             : // Class Definition for SgQualifiedName
   32448             : class ROSE_DLL_API SgQualifiedName  : public SgSupport
   32449             :    {
   32450             :      public:
   32451             : 
   32452             : 
   32453             : /* #line 32454 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32454             : 
   32455             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   32456             : // Start of memberFunctionString
   32457             : /* #line 5647 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   32458             : 
   32459             : 
   32460             : 
   32461             : // End of memberFunctionString
   32462             : // Start of memberFunctionString
   32463             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   32464             : 
   32465             : // *** COMMON CODE SECTION BEGINS HERE ***
   32466             : 
   32467             :     public:
   32468             : 
   32469             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   32470             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   32471             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   32472             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   32473             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   32474             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   32475             : 
   32476             :       /*! \brief returns a string representing the class name */
   32477             :           virtual std::string class_name() const override;
   32478             : 
   32479             :       /*! \brief returns new style SageIII enum values */
   32480             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   32481             : 
   32482             :       /*! \brief static variant value */
   32483             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   32484             :        // static const VariantT static_variant = V_SgQualifiedName;
   32485             :           enum { static_variant = V_SgQualifiedName };
   32486             : 
   32487             :        /* the generated cast function */
   32488             :       /*! \brief Casts pointer from base class to derived class */
   32489             :           ROSE_DLL_API friend       SgQualifiedName* isSgQualifiedName(       SgNode * s );
   32490             : 
   32491             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   32492             :           ROSE_DLL_API friend const SgQualifiedName* isSgQualifiedName( const SgNode * s );
   32493             : 
   32494             :      // ******************************************
   32495             :      // * Memory Pool / New / Delete
   32496             :      // ******************************************
   32497             : 
   32498             :      public:
   32499             :           /// \private
   32500             :           static const unsigned pool_size; //
   32501             :           /// \private
   32502             :           static std::vector<unsigned char *> pools; //
   32503             :           /// \private
   32504             :           static SgQualifiedName * next_node; // 
   32505             : 
   32506             :           /// \private
   32507             :           static unsigned long initializeStorageClassArray(SgQualifiedNameStorageClass *); //
   32508             : 
   32509             :           /// \private
   32510             :           static void clearMemoryPool(); //
   32511             :           static void deleteMemoryPool(); //
   32512             : 
   32513             :           /// \private
   32514             :           static void extendMemoryPoolForFileIO(); //
   32515             : 
   32516             :           /// \private
   32517             :           static SgQualifiedName * getPointerFromGlobalIndex(unsigned long); //
   32518             :           /// \private
   32519             :           static SgQualifiedName * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   32520             : 
   32521             :           /// \private
   32522             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   32523             :           /// \private
   32524             :           static void resetValidFreepointers(); //
   32525             :           /// \private
   32526             :           static unsigned long getNumberOfLastValidPointer(); //
   32527             : 
   32528             : 
   32529             : #if defined(INLINE_FUNCTIONS)
   32530             :       /*! \brief returns pointer to newly allocated IR node */
   32531             :           inline void *operator new (size_t size);
   32532             : #else
   32533             :       /*! \brief returns pointer to newly allocated IR node */
   32534             :           void *operator new (size_t size);
   32535             : #endif
   32536             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   32537             :           void operator delete (void* pointer, size_t size);
   32538             : 
   32539             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   32540           0 :           void operator delete (void* pointer)
   32541             :              {
   32542             :             // This is the generated delete operator...
   32543           0 :                SgQualifiedName::operator delete (pointer,sizeof(SgQualifiedName));
   32544             :              }
   32545             : 
   32546             :       /*! \brief Returns the total number of IR nodes of this type */
   32547             :           static size_t numberOfNodes();
   32548             : 
   32549             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   32550             :           static size_t memoryUsage();
   32551             : 
   32552             :       // End of scope which started in IR nodes specific code 
   32553             :       /* */
   32554             : 
   32555             :       /* name Internal Functions
   32556             :           \brief Internal functions ... incomplete-documentation
   32557             : 
   32558             :           These functions have been made public as part of the design, but they are suggested for internal use 
   32559             :           or by particularly knowledgeable users for specialized tools or applications.
   32560             : 
   32561             :           \internal We could not make these private because they are required by user for special purposes. And 
   32562             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   32563             :          
   32564             :        */
   32565             : 
   32566             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   32567             :        // overridden in every class by *generated* implementation
   32568             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   32569             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   32570             :        // MS: 06/28/02 container of names of variables or container indices 
   32571             :        // used used in the traversal to access AST successor nodes
   32572             :        // overridden in every class by *generated* implementation
   32573             :       /*! \brief container of names of variables or container indices used used in the traversal
   32574             :           to access AST successor nodes overridden in every class by *generated* implementation */
   32575             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   32576             : 
   32577             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   32578             :        // than all the vector copies. The implementation for these functions is generated for each class.
   32579             :       /*! \brief return number of children in the traversal successor list */
   32580             :           virtual size_t get_numberOfTraversalSuccessors() override;
   32581             :       /*! \brief index-based access to traversal successors by index number */
   32582             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   32583             :       /*! \brief index-based access to traversal successors by child node */
   32584             :           virtual size_t get_childIndex(SgNode *child) override;
   32585             : 
   32586             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   32587             :        // MS: 08/16/2002 method for generating RTI information
   32588             :       /*! \brief return C++ Runtime-Time-Information */
   32589             :           virtual RTIReturnType roseRTI() override;
   32590             : #endif
   32591             :       /* */
   32592             : 
   32593             : 
   32594             : 
   32595             :       /* name Deprecated Functions
   32596             :           \brief Deprecated functions ... incomplete-documentation
   32597             : 
   32598             :           These functions have been deprecated from use.
   32599             :        */
   32600             :       /* */
   32601             : 
   32602             :       /*! returns a C style string (char*) representing the class name */
   32603             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   32604             : 
   32605             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   32606             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   32607             : #if 0
   32608             :       /*! returns old style Sage II enum values */
   32609             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   32610             :       /*! returns old style Sage II enum values */
   32611             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   32612             : #endif
   32613             :       /* */
   32614             : 
   32615             : 
   32616             : 
   32617             : 
   32618             :      public:
   32619             :       /* name Traversal Support Functions
   32620             :           \brief Traversal support functions ... incomplete-documentation
   32621             : 
   32622             :           These functions have been made public as part of the design, but they are suggested for internal use 
   32623             :           or by particularly knowledgable users for specialized tools or applications.
   32624             :        */
   32625             :       /* */
   32626             : 
   32627             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   32628             :        // (inferior to ROSE traversal mechanism, experimental).
   32629             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   32630             :        */
   32631             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   32632             : 
   32633             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   32634             :       /*! \brief support for the classic visitor pattern done in GoF */
   32635             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   32636             : 
   32637             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   32638             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   32639             :        */
   32640             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   32641             : 
   32642             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   32643             :        */
   32644             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   32645             : 
   32646             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   32647             :        // This traversal helps support internal tools that call static member functions.
   32648             :        // note: this function operates on the memory pools.
   32649             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   32650             :        */
   32651             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   32652             :       /* */
   32653             : 
   32654             : 
   32655             :      public:
   32656             :       /* name Memory Allocation Functions
   32657             :           \brief Memory allocations functions ... incomplete-documentation
   32658             : 
   32659             :           These functions have been made public as part of the design, but they are suggested for internal use 
   32660             :           or by particularly knowledgable users for specialized tools or applications.
   32661             :        */
   32662             :       /* */
   32663             : 
   32664             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   32665             : 
   32666             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   32667             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   32668             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   32669             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   32670             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   32671             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   32672             :           being used with the AST File I/O mechanism.
   32673             :        */
   32674             :           virtual bool isInMemoryPool() override;
   32675             : 
   32676             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   32677             : 
   32678             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   32679             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   32680             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   32681             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   32682             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   32683             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   32684             :           being used with the AST File I/O mechanism.
   32685             :        */
   32686             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   32687             : 
   32688             :       // DQ (4/30/2006): Modified to be a const function.
   32689             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   32690             : 
   32691             :           This functions is part of general support for many possible tools to operate 
   32692             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   32693             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   32694             :           less than the set of pointers used by the AST file I/O. This is part of
   32695             :           work implemented by Andreas, and support tools such as the AST graph generation.
   32696             : 
   32697             :           \warning This function can return unexpected data members and thus the 
   32698             :                    order and the number of elements is unpredicable and subject 
   32699             :                    to change.
   32700             : 
   32701             :           \returns STL vector of pairs of SgNode* and strings
   32702             :        */
   32703             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   32704             : 
   32705             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   32706             : 
   32707             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   32708             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   32709             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   32710             : 
   32711             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   32712             :                    and subject to change.
   32713             :        */
   32714             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   32715             : 
   32716             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   32717             : 
   32718             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   32719             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   32720             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   32721             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   32722             : 
   32723             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   32724             : 
   32725             :           \returns long
   32726             :        */
   32727             :           virtual long getChildIndex( SgNode* childNode ) const override;
   32728             : 
   32729             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   32730             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   32731             :       /* \brief Constructor for use by AST File I/O Mechanism
   32732             : 
   32733             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   32734             :           which obtained via fast binary file I/O from disk.
   32735             :        */
   32736             :        // SgQualifiedName( SgQualifiedNameStorageClass& source );
   32737             : 
   32738             : 
   32739             : 
   32740             : 
   32741             : 
   32742             :  // JH (10/24/2005): methods added to support the ast file IO
   32743             :     private:
   32744             : 
   32745             :       /* name AST Memory Allocation Support Functions
   32746             :           \brief Memory allocations support....
   32747             : 
   32748             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   32749             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   32750             :           and support the AST File I/O Mechanism.
   32751             :        */
   32752             :       /* */
   32753             : 
   32754             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   32755             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   32756             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   32757             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   32758             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   32759             :           a correspinding one in the AST_FILE_IO class!
   32760             :        */
   32761             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   32762             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   32763             :       /* \brief Typedef used for low level memory access.
   32764             :        */
   32765             :        // typedef unsigned char* TestType;
   32766             : 
   32767             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   32768             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   32769             :       /* \brief Typedef used to hold memory addresses as values.
   32770             :        */
   32771             :        // typedef unsigned long  AddressType;
   32772             : 
   32773             : 
   32774             : 
   32775             :        // necessary, to have direct access to the p_freepointer and the private methods !
   32776             :       /*! \brief friend class declaration to support AST File I/O */
   32777             :           friend class AST_FILE_IO;
   32778             : 
   32779             :       /*! \brief friend class declaration to support AST File I/O */
   32780             :           friend class SgQualifiedNameStorageClass;
   32781             : 
   32782             :       /*! \brief friend class declaration to support AST File I/O */
   32783             :           friend class AstSpecificDataManagingClass;
   32784             : 
   32785             :       /*! \brief friend class declaration to support AST File I/O */
   32786             :           friend class AstSpecificDataManagingClassStorageClass;
   32787             :     public:
   32788             :       /*! \brief IR node constructor to support AST File I/O */
   32789             :           SgQualifiedName( const SgQualifiedNameStorageClass& source );
   32790             : 
   32791             :  // private: // JJW hack
   32792             :        /*
   32793             :           name AST Memory Allocation Support Variables
   32794             :           Memory allocations support variables 
   32795             : 
   32796             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   32797             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   32798             :           and support the AST File I/O Mechanism.
   32799             :        */
   32800             :       /* */
   32801             : 
   32802             :     public:
   32803             : 
   32804             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   32805             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   32806             :       // virtual SgNode* addRegExpAttribute();
   32807             :       /*! \brief Support for AST matching using regular expression.
   32808             : 
   32809             :           This support is incomplete and the subject of current research to define 
   32810             :           RegEx trees to support inexact matching.
   32811             :        */
   32812             :           SgQualifiedName* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   32813             : 
   32814             : // *** COMMON CODE SECTION ENDS HERE ***
   32815             : 
   32816             : 
   32817             : // End of memberFunctionString
   32818             : // Start of memberFunctionString
   32819             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   32820             : 
   32821             :      // the generated cast function
   32822             :      // friend ROSE_DLL_API SgQualifiedName* isSgQualifiedName ( SgNode* s );
   32823             : 
   32824             :           typedef SgSupport base_node_type;
   32825             : 
   32826             : 
   32827             : // End of memberFunctionString
   32828             : 
   32829             :      public: 
   32830             :          SgScopeStatement* get_scope() const /* (getDataAccessFunctionPrototypeString) */;
   32831             :          void set_scope(SgScopeStatement* scope) /* (getDataAccessFunctionPrototypeString) */;
   32832             : 
   32833             : 
   32834             :      public: 
   32835             :          virtual ~SgQualifiedName();
   32836             : 
   32837             : 
   32838             :      public: 
   32839             :          SgQualifiedName(SgScopeStatement* scope = NULL); 
   32840             : 
   32841             :     protected:
   32842             : // Start of memberFunctionString
   32843             : SgScopeStatement* p_scope;
   32844             :           
   32845             : // End of memberFunctionString
   32846             : 
   32847             :     friend struct Rose::Traits::generated::describe_node_t<SgQualifiedName>;
   32848             :     friend struct Rose::Traits::generated::describe_field_t<SgQualifiedName, SgScopeStatement*,&SgQualifiedName::p_scope>;
   32849             : 
   32850             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32851             : 
   32852             : 
   32853             :    };
   32854             : #endif
   32855             : 
   32856             : // postdeclarations for SgQualifiedName
   32857             : 
   32858             : /* #line 32859 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32859             : 
   32860             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   32861             : 
   32862             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32863             : 
   32864             : 
   32865             : /* #line 32866 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32866             : 
   32867             : 
   32868             : 
   32869             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32870             : 
   32871             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   32872             : //      This code is automatically generated for each 
   32873             : //      terminal and non-terminal within the defined 
   32874             : //      grammar.  There is a simple way to change the 
   32875             : //      code to fix bugs etc.  See the ROSE README file
   32876             : //      for directions.
   32877             : 
   32878             : // tps: (02/22/2010): Adding DLL export requirements
   32879             : #include "rosedll.h"
   32880             : 
   32881             : // predeclarations for SgTemplateArgumentList
   32882             : 
   32883             : /* #line 32884 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32884             : 
   32885             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   32886             : 
   32887             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   32888             : 
   32889             : #if 1
   32890             : // Class Definition for SgTemplateArgumentList
   32891             : class ROSE_DLL_API SgTemplateArgumentList  : public SgSupport
   32892             :    {
   32893             :      public:
   32894             : 
   32895             : 
   32896             : /* #line 32897 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   32897             : 
   32898             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   32899             : // Start of memberFunctionString
   32900             : /* #line 7746 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   32901             : 
   32902             : 
   32903             :        // DQ (2/10/2019): I think this IR node is no longer used.
   32904             :        // DQ (3/10/2018): Adding debugging support.
   32905             :        // std::string unparseToStringSupport();
   32906             : 
   32907             : 
   32908             : 
   32909             : // End of memberFunctionString
   32910             : // Start of memberFunctionString
   32911             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   32912             : 
   32913             : // *** COMMON CODE SECTION BEGINS HERE ***
   32914             : 
   32915             :     public:
   32916             : 
   32917             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   32918             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   32919             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   32920             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   32921             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   32922             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   32923             : 
   32924             :       /*! \brief returns a string representing the class name */
   32925             :           virtual std::string class_name() const override;
   32926             : 
   32927             :       /*! \brief returns new style SageIII enum values */
   32928             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   32929             : 
   32930             :       /*! \brief static variant value */
   32931             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   32932             :        // static const VariantT static_variant = V_SgTemplateArgumentList;
   32933             :           enum { static_variant = V_SgTemplateArgumentList };
   32934             : 
   32935             :        /* the generated cast function */
   32936             :       /*! \brief Casts pointer from base class to derived class */
   32937             :           ROSE_DLL_API friend       SgTemplateArgumentList* isSgTemplateArgumentList(       SgNode * s );
   32938             : 
   32939             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   32940             :           ROSE_DLL_API friend const SgTemplateArgumentList* isSgTemplateArgumentList( const SgNode * s );
   32941             : 
   32942             :      // ******************************************
   32943             :      // * Memory Pool / New / Delete
   32944             :      // ******************************************
   32945             : 
   32946             :      public:
   32947             :           /// \private
   32948             :           static const unsigned pool_size; //
   32949             :           /// \private
   32950             :           static std::vector<unsigned char *> pools; //
   32951             :           /// \private
   32952             :           static SgTemplateArgumentList * next_node; // 
   32953             : 
   32954             :           /// \private
   32955             :           static unsigned long initializeStorageClassArray(SgTemplateArgumentListStorageClass *); //
   32956             : 
   32957             :           /// \private
   32958             :           static void clearMemoryPool(); //
   32959             :           static void deleteMemoryPool(); //
   32960             : 
   32961             :           /// \private
   32962             :           static void extendMemoryPoolForFileIO(); //
   32963             : 
   32964             :           /// \private
   32965             :           static SgTemplateArgumentList * getPointerFromGlobalIndex(unsigned long); //
   32966             :           /// \private
   32967             :           static SgTemplateArgumentList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   32968             : 
   32969             :           /// \private
   32970             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   32971             :           /// \private
   32972             :           static void resetValidFreepointers(); //
   32973             :           /// \private
   32974             :           static unsigned long getNumberOfLastValidPointer(); //
   32975             : 
   32976             : 
   32977             : #if defined(INLINE_FUNCTIONS)
   32978             :       /*! \brief returns pointer to newly allocated IR node */
   32979             :           inline void *operator new (size_t size);
   32980             : #else
   32981             :       /*! \brief returns pointer to newly allocated IR node */
   32982             :           void *operator new (size_t size);
   32983             : #endif
   32984             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   32985             :           void operator delete (void* pointer, size_t size);
   32986             : 
   32987             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   32988           0 :           void operator delete (void* pointer)
   32989             :              {
   32990             :             // This is the generated delete operator...
   32991           0 :                SgTemplateArgumentList::operator delete (pointer,sizeof(SgTemplateArgumentList));
   32992             :              }
   32993             : 
   32994             :       /*! \brief Returns the total number of IR nodes of this type */
   32995             :           static size_t numberOfNodes();
   32996             : 
   32997             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   32998             :           static size_t memoryUsage();
   32999             : 
   33000             :       // End of scope which started in IR nodes specific code 
   33001             :       /* */
   33002             : 
   33003             :       /* name Internal Functions
   33004             :           \brief Internal functions ... incomplete-documentation
   33005             : 
   33006             :           These functions have been made public as part of the design, but they are suggested for internal use 
   33007             :           or by particularly knowledgeable users for specialized tools or applications.
   33008             : 
   33009             :           \internal We could not make these private because they are required by user for special purposes. And 
   33010             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   33011             :          
   33012             :        */
   33013             : 
   33014             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   33015             :        // overridden in every class by *generated* implementation
   33016             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   33017             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   33018             :        // MS: 06/28/02 container of names of variables or container indices 
   33019             :        // used used in the traversal to access AST successor nodes
   33020             :        // overridden in every class by *generated* implementation
   33021             :       /*! \brief container of names of variables or container indices used used in the traversal
   33022             :           to access AST successor nodes overridden in every class by *generated* implementation */
   33023             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   33024             : 
   33025             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   33026             :        // than all the vector copies. The implementation for these functions is generated for each class.
   33027             :       /*! \brief return number of children in the traversal successor list */
   33028             :           virtual size_t get_numberOfTraversalSuccessors() override;
   33029             :       /*! \brief index-based access to traversal successors by index number */
   33030             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   33031             :       /*! \brief index-based access to traversal successors by child node */
   33032             :           virtual size_t get_childIndex(SgNode *child) override;
   33033             : 
   33034             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   33035             :        // MS: 08/16/2002 method for generating RTI information
   33036             :       /*! \brief return C++ Runtime-Time-Information */
   33037             :           virtual RTIReturnType roseRTI() override;
   33038             : #endif
   33039             :       /* */
   33040             : 
   33041             : 
   33042             : 
   33043             :       /* name Deprecated Functions
   33044             :           \brief Deprecated functions ... incomplete-documentation
   33045             : 
   33046             :           These functions have been deprecated from use.
   33047             :        */
   33048             :       /* */
   33049             : 
   33050             :       /*! returns a C style string (char*) representing the class name */
   33051             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   33052             : 
   33053             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   33054             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   33055             : #if 0
   33056             :       /*! returns old style Sage II enum values */
   33057             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   33058             :       /*! returns old style Sage II enum values */
   33059             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   33060             : #endif
   33061             :       /* */
   33062             : 
   33063             : 
   33064             : 
   33065             : 
   33066             :      public:
   33067             :       /* name Traversal Support Functions
   33068             :           \brief Traversal support functions ... incomplete-documentation
   33069             : 
   33070             :           These functions have been made public as part of the design, but they are suggested for internal use 
   33071             :           or by particularly knowledgable users for specialized tools or applications.
   33072             :        */
   33073             :       /* */
   33074             : 
   33075             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   33076             :        // (inferior to ROSE traversal mechanism, experimental).
   33077             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   33078             :        */
   33079             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   33080             : 
   33081             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   33082             :       /*! \brief support for the classic visitor pattern done in GoF */
   33083             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   33084             : 
   33085             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   33086             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   33087             :        */
   33088             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   33089             : 
   33090             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   33091             :        */
   33092             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   33093             : 
   33094             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   33095             :        // This traversal helps support internal tools that call static member functions.
   33096             :        // note: this function operates on the memory pools.
   33097             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   33098             :        */
   33099             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   33100             :       /* */
   33101             : 
   33102             : 
   33103             :      public:
   33104             :       /* name Memory Allocation Functions
   33105             :           \brief Memory allocations functions ... incomplete-documentation
   33106             : 
   33107             :           These functions have been made public as part of the design, but they are suggested for internal use 
   33108             :           or by particularly knowledgable users for specialized tools or applications.
   33109             :        */
   33110             :       /* */
   33111             : 
   33112             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   33113             : 
   33114             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   33115             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   33116             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   33117             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   33118             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   33119             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   33120             :           being used with the AST File I/O mechanism.
   33121             :        */
   33122             :           virtual bool isInMemoryPool() override;
   33123             : 
   33124             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   33125             : 
   33126             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   33127             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   33128             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   33129             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   33130             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   33131             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   33132             :           being used with the AST File I/O mechanism.
   33133             :        */
   33134             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   33135             : 
   33136             :       // DQ (4/30/2006): Modified to be a const function.
   33137             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   33138             : 
   33139             :           This functions is part of general support for many possible tools to operate 
   33140             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   33141             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   33142             :           less than the set of pointers used by the AST file I/O. This is part of
   33143             :           work implemented by Andreas, and support tools such as the AST graph generation.
   33144             : 
   33145             :           \warning This function can return unexpected data members and thus the 
   33146             :                    order and the number of elements is unpredicable and subject 
   33147             :                    to change.
   33148             : 
   33149             :           \returns STL vector of pairs of SgNode* and strings
   33150             :        */
   33151             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   33152             : 
   33153             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   33154             : 
   33155             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   33156             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   33157             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   33158             : 
   33159             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   33160             :                    and subject to change.
   33161             :        */
   33162             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   33163             : 
   33164             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   33165             : 
   33166             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   33167             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   33168             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   33169             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   33170             : 
   33171             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   33172             : 
   33173             :           \returns long
   33174             :        */
   33175             :           virtual long getChildIndex( SgNode* childNode ) const override;
   33176             : 
   33177             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   33178             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   33179             :       /* \brief Constructor for use by AST File I/O Mechanism
   33180             : 
   33181             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   33182             :           which obtained via fast binary file I/O from disk.
   33183             :        */
   33184             :        // SgTemplateArgumentList( SgTemplateArgumentListStorageClass& source );
   33185             : 
   33186             : 
   33187             : 
   33188             : 
   33189             : 
   33190             :  // JH (10/24/2005): methods added to support the ast file IO
   33191             :     private:
   33192             : 
   33193             :       /* name AST Memory Allocation Support Functions
   33194             :           \brief Memory allocations support....
   33195             : 
   33196             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   33197             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   33198             :           and support the AST File I/O Mechanism.
   33199             :        */
   33200             :       /* */
   33201             : 
   33202             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   33203             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   33204             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   33205             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   33206             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   33207             :           a correspinding one in the AST_FILE_IO class!
   33208             :        */
   33209             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   33210             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   33211             :       /* \brief Typedef used for low level memory access.
   33212             :        */
   33213             :        // typedef unsigned char* TestType;
   33214             : 
   33215             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   33216             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   33217             :       /* \brief Typedef used to hold memory addresses as values.
   33218             :        */
   33219             :        // typedef unsigned long  AddressType;
   33220             : 
   33221             : 
   33222             : 
   33223             :        // necessary, to have direct access to the p_freepointer and the private methods !
   33224             :       /*! \brief friend class declaration to support AST File I/O */
   33225             :           friend class AST_FILE_IO;
   33226             : 
   33227             :       /*! \brief friend class declaration to support AST File I/O */
   33228             :           friend class SgTemplateArgumentListStorageClass;
   33229             : 
   33230             :       /*! \brief friend class declaration to support AST File I/O */
   33231             :           friend class AstSpecificDataManagingClass;
   33232             : 
   33233             :       /*! \brief friend class declaration to support AST File I/O */
   33234             :           friend class AstSpecificDataManagingClassStorageClass;
   33235             :     public:
   33236             :       /*! \brief IR node constructor to support AST File I/O */
   33237             :           SgTemplateArgumentList( const SgTemplateArgumentListStorageClass& source );
   33238             : 
   33239             :  // private: // JJW hack
   33240             :        /*
   33241             :           name AST Memory Allocation Support Variables
   33242             :           Memory allocations support variables 
   33243             : 
   33244             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   33245             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   33246             :           and support the AST File I/O Mechanism.
   33247             :        */
   33248             :       /* */
   33249             : 
   33250             :     public:
   33251             : 
   33252             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   33253             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   33254             :       // virtual SgNode* addRegExpAttribute();
   33255             :       /*! \brief Support for AST matching using regular expression.
   33256             : 
   33257             :           This support is incomplete and the subject of current research to define 
   33258             :           RegEx trees to support inexact matching.
   33259             :        */
   33260             :           SgTemplateArgumentList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   33261             : 
   33262             : // *** COMMON CODE SECTION ENDS HERE ***
   33263             : 
   33264             : 
   33265             : // End of memberFunctionString
   33266             : // Start of memberFunctionString
   33267             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   33268             : 
   33269             :      // the generated cast function
   33270             :      // friend ROSE_DLL_API SgTemplateArgumentList* isSgTemplateArgumentList ( SgNode* s );
   33271             : 
   33272             :           typedef SgSupport base_node_type;
   33273             : 
   33274             : 
   33275             : // End of memberFunctionString
   33276             : 
   33277             :      public: 
   33278             :          SgTemplateArgumentPtrList get_args() const;
   33279             :          void set_args(SgTemplateArgumentPtrList args);
   33280             : 
   33281             : 
   33282             :      public: 
   33283             :          virtual ~SgTemplateArgumentList();
   33284             : 
   33285             : 
   33286             :      public: 
   33287             :          SgTemplateArgumentList(); 
   33288             : 
   33289             :     protected:
   33290             : // Start of memberFunctionString
   33291             : SgTemplateArgumentPtrList p_args;
   33292             :           
   33293             : // End of memberFunctionString
   33294             : 
   33295             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateArgumentList>;
   33296             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateArgumentList, SgTemplateArgumentPtrList,&SgTemplateArgumentList::p_args>;
   33297             : 
   33298             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33299             : 
   33300             : 
   33301             :    };
   33302             : #endif
   33303             : 
   33304             : // postdeclarations for SgTemplateArgumentList
   33305             : 
   33306             : /* #line 33307 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33307             : 
   33308             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   33309             : 
   33310             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33311             : 
   33312             : 
   33313             : /* #line 33314 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33314             : 
   33315             : 
   33316             : 
   33317             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33318             : 
   33319             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   33320             : //      This code is automatically generated for each 
   33321             : //      terminal and non-terminal within the defined 
   33322             : //      grammar.  There is a simple way to change the 
   33323             : //      code to fix bugs etc.  See the ROSE README file
   33324             : //      for directions.
   33325             : 
   33326             : // tps: (02/22/2010): Adding DLL export requirements
   33327             : #include "rosedll.h"
   33328             : 
   33329             : // predeclarations for SgTemplateParameterList
   33330             : 
   33331             : /* #line 33332 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33332             : 
   33333             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   33334             : 
   33335             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33336             : 
   33337             : #if 1
   33338             : // Class Definition for SgTemplateParameterList
   33339             : class ROSE_DLL_API SgTemplateParameterList  : public SgSupport
   33340             :    {
   33341             :      public:
   33342             : 
   33343             : 
   33344             : /* #line 33345 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33345             : 
   33346             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   33347             : // Start of memberFunctionString
   33348             : /* #line 7743 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   33349             : 
   33350             : 
   33351             : 
   33352             : // End of memberFunctionString
   33353             : // Start of memberFunctionString
   33354             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   33355             : 
   33356             : // *** COMMON CODE SECTION BEGINS HERE ***
   33357             : 
   33358             :     public:
   33359             : 
   33360             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   33361             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   33362             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   33363             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   33364             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   33365             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   33366             : 
   33367             :       /*! \brief returns a string representing the class name */
   33368             :           virtual std::string class_name() const override;
   33369             : 
   33370             :       /*! \brief returns new style SageIII enum values */
   33371             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   33372             : 
   33373             :       /*! \brief static variant value */
   33374             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   33375             :        // static const VariantT static_variant = V_SgTemplateParameterList;
   33376             :           enum { static_variant = V_SgTemplateParameterList };
   33377             : 
   33378             :        /* the generated cast function */
   33379             :       /*! \brief Casts pointer from base class to derived class */
   33380             :           ROSE_DLL_API friend       SgTemplateParameterList* isSgTemplateParameterList(       SgNode * s );
   33381             : 
   33382             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   33383             :           ROSE_DLL_API friend const SgTemplateParameterList* isSgTemplateParameterList( const SgNode * s );
   33384             : 
   33385             :      // ******************************************
   33386             :      // * Memory Pool / New / Delete
   33387             :      // ******************************************
   33388             : 
   33389             :      public:
   33390             :           /// \private
   33391             :           static const unsigned pool_size; //
   33392             :           /// \private
   33393             :           static std::vector<unsigned char *> pools; //
   33394             :           /// \private
   33395             :           static SgTemplateParameterList * next_node; // 
   33396             : 
   33397             :           /// \private
   33398             :           static unsigned long initializeStorageClassArray(SgTemplateParameterListStorageClass *); //
   33399             : 
   33400             :           /// \private
   33401             :           static void clearMemoryPool(); //
   33402             :           static void deleteMemoryPool(); //
   33403             : 
   33404             :           /// \private
   33405             :           static void extendMemoryPoolForFileIO(); //
   33406             : 
   33407             :           /// \private
   33408             :           static SgTemplateParameterList * getPointerFromGlobalIndex(unsigned long); //
   33409             :           /// \private
   33410             :           static SgTemplateParameterList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   33411             : 
   33412             :           /// \private
   33413             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   33414             :           /// \private
   33415             :           static void resetValidFreepointers(); //
   33416             :           /// \private
   33417             :           static unsigned long getNumberOfLastValidPointer(); //
   33418             : 
   33419             : 
   33420             : #if defined(INLINE_FUNCTIONS)
   33421             :       /*! \brief returns pointer to newly allocated IR node */
   33422             :           inline void *operator new (size_t size);
   33423             : #else
   33424             :       /*! \brief returns pointer to newly allocated IR node */
   33425             :           void *operator new (size_t size);
   33426             : #endif
   33427             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   33428             :           void operator delete (void* pointer, size_t size);
   33429             : 
   33430             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   33431           0 :           void operator delete (void* pointer)
   33432             :              {
   33433             :             // This is the generated delete operator...
   33434           0 :                SgTemplateParameterList::operator delete (pointer,sizeof(SgTemplateParameterList));
   33435             :              }
   33436             : 
   33437             :       /*! \brief Returns the total number of IR nodes of this type */
   33438             :           static size_t numberOfNodes();
   33439             : 
   33440             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   33441             :           static size_t memoryUsage();
   33442             : 
   33443             :       // End of scope which started in IR nodes specific code 
   33444             :       /* */
   33445             : 
   33446             :       /* name Internal Functions
   33447             :           \brief Internal functions ... incomplete-documentation
   33448             : 
   33449             :           These functions have been made public as part of the design, but they are suggested for internal use 
   33450             :           or by particularly knowledgeable users for specialized tools or applications.
   33451             : 
   33452             :           \internal We could not make these private because they are required by user for special purposes. And 
   33453             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   33454             :          
   33455             :        */
   33456             : 
   33457             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   33458             :        // overridden in every class by *generated* implementation
   33459             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   33460             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   33461             :        // MS: 06/28/02 container of names of variables or container indices 
   33462             :        // used used in the traversal to access AST successor nodes
   33463             :        // overridden in every class by *generated* implementation
   33464             :       /*! \brief container of names of variables or container indices used used in the traversal
   33465             :           to access AST successor nodes overridden in every class by *generated* implementation */
   33466             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   33467             : 
   33468             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   33469             :        // than all the vector copies. The implementation for these functions is generated for each class.
   33470             :       /*! \brief return number of children in the traversal successor list */
   33471             :           virtual size_t get_numberOfTraversalSuccessors() override;
   33472             :       /*! \brief index-based access to traversal successors by index number */
   33473             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   33474             :       /*! \brief index-based access to traversal successors by child node */
   33475             :           virtual size_t get_childIndex(SgNode *child) override;
   33476             : 
   33477             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   33478             :        // MS: 08/16/2002 method for generating RTI information
   33479             :       /*! \brief return C++ Runtime-Time-Information */
   33480             :           virtual RTIReturnType roseRTI() override;
   33481             : #endif
   33482             :       /* */
   33483             : 
   33484             : 
   33485             : 
   33486             :       /* name Deprecated Functions
   33487             :           \brief Deprecated functions ... incomplete-documentation
   33488             : 
   33489             :           These functions have been deprecated from use.
   33490             :        */
   33491             :       /* */
   33492             : 
   33493             :       /*! returns a C style string (char*) representing the class name */
   33494             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   33495             : 
   33496             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   33497             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   33498             : #if 0
   33499             :       /*! returns old style Sage II enum values */
   33500             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   33501             :       /*! returns old style Sage II enum values */
   33502             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   33503             : #endif
   33504             :       /* */
   33505             : 
   33506             : 
   33507             : 
   33508             : 
   33509             :      public:
   33510             :       /* name Traversal Support Functions
   33511             :           \brief Traversal support functions ... incomplete-documentation
   33512             : 
   33513             :           These functions have been made public as part of the design, but they are suggested for internal use 
   33514             :           or by particularly knowledgable users for specialized tools or applications.
   33515             :        */
   33516             :       /* */
   33517             : 
   33518             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   33519             :        // (inferior to ROSE traversal mechanism, experimental).
   33520             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   33521             :        */
   33522             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   33523             : 
   33524             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   33525             :       /*! \brief support for the classic visitor pattern done in GoF */
   33526             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   33527             : 
   33528             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   33529             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   33530             :        */
   33531             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   33532             : 
   33533             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   33534             :        */
   33535             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   33536             : 
   33537             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   33538             :        // This traversal helps support internal tools that call static member functions.
   33539             :        // note: this function operates on the memory pools.
   33540             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   33541             :        */
   33542             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   33543             :       /* */
   33544             : 
   33545             : 
   33546             :      public:
   33547             :       /* name Memory Allocation Functions
   33548             :           \brief Memory allocations functions ... incomplete-documentation
   33549             : 
   33550             :           These functions have been made public as part of the design, but they are suggested for internal use 
   33551             :           or by particularly knowledgable users for specialized tools or applications.
   33552             :        */
   33553             :       /* */
   33554             : 
   33555             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   33556             : 
   33557             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   33558             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   33559             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   33560             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   33561             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   33562             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   33563             :           being used with the AST File I/O mechanism.
   33564             :        */
   33565             :           virtual bool isInMemoryPool() override;
   33566             : 
   33567             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   33568             : 
   33569             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   33570             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   33571             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   33572             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   33573             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   33574             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   33575             :           being used with the AST File I/O mechanism.
   33576             :        */
   33577             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   33578             : 
   33579             :       // DQ (4/30/2006): Modified to be a const function.
   33580             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   33581             : 
   33582             :           This functions is part of general support for many possible tools to operate 
   33583             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   33584             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   33585             :           less than the set of pointers used by the AST file I/O. This is part of
   33586             :           work implemented by Andreas, and support tools such as the AST graph generation.
   33587             : 
   33588             :           \warning This function can return unexpected data members and thus the 
   33589             :                    order and the number of elements is unpredicable and subject 
   33590             :                    to change.
   33591             : 
   33592             :           \returns STL vector of pairs of SgNode* and strings
   33593             :        */
   33594             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   33595             : 
   33596             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   33597             : 
   33598             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   33599             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   33600             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   33601             : 
   33602             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   33603             :                    and subject to change.
   33604             :        */
   33605             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   33606             : 
   33607             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   33608             : 
   33609             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   33610             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   33611             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   33612             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   33613             : 
   33614             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   33615             : 
   33616             :           \returns long
   33617             :        */
   33618             :           virtual long getChildIndex( SgNode* childNode ) const override;
   33619             : 
   33620             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   33621             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   33622             :       /* \brief Constructor for use by AST File I/O Mechanism
   33623             : 
   33624             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   33625             :           which obtained via fast binary file I/O from disk.
   33626             :        */
   33627             :        // SgTemplateParameterList( SgTemplateParameterListStorageClass& source );
   33628             : 
   33629             : 
   33630             : 
   33631             : 
   33632             : 
   33633             :  // JH (10/24/2005): methods added to support the ast file IO
   33634             :     private:
   33635             : 
   33636             :       /* name AST Memory Allocation Support Functions
   33637             :           \brief Memory allocations support....
   33638             : 
   33639             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   33640             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   33641             :           and support the AST File I/O Mechanism.
   33642             :        */
   33643             :       /* */
   33644             : 
   33645             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   33646             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   33647             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   33648             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   33649             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   33650             :           a correspinding one in the AST_FILE_IO class!
   33651             :        */
   33652             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   33653             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   33654             :       /* \brief Typedef used for low level memory access.
   33655             :        */
   33656             :        // typedef unsigned char* TestType;
   33657             : 
   33658             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   33659             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   33660             :       /* \brief Typedef used to hold memory addresses as values.
   33661             :        */
   33662             :        // typedef unsigned long  AddressType;
   33663             : 
   33664             : 
   33665             : 
   33666             :        // necessary, to have direct access to the p_freepointer and the private methods !
   33667             :       /*! \brief friend class declaration to support AST File I/O */
   33668             :           friend class AST_FILE_IO;
   33669             : 
   33670             :       /*! \brief friend class declaration to support AST File I/O */
   33671             :           friend class SgTemplateParameterListStorageClass;
   33672             : 
   33673             :       /*! \brief friend class declaration to support AST File I/O */
   33674             :           friend class AstSpecificDataManagingClass;
   33675             : 
   33676             :       /*! \brief friend class declaration to support AST File I/O */
   33677             :           friend class AstSpecificDataManagingClassStorageClass;
   33678             :     public:
   33679             :       /*! \brief IR node constructor to support AST File I/O */
   33680             :           SgTemplateParameterList( const SgTemplateParameterListStorageClass& source );
   33681             : 
   33682             :  // private: // JJW hack
   33683             :        /*
   33684             :           name AST Memory Allocation Support Variables
   33685             :           Memory allocations support variables 
   33686             : 
   33687             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   33688             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   33689             :           and support the AST File I/O Mechanism.
   33690             :        */
   33691             :       /* */
   33692             : 
   33693             :     public:
   33694             : 
   33695             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   33696             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   33697             :       // virtual SgNode* addRegExpAttribute();
   33698             :       /*! \brief Support for AST matching using regular expression.
   33699             : 
   33700             :           This support is incomplete and the subject of current research to define 
   33701             :           RegEx trees to support inexact matching.
   33702             :        */
   33703             :           SgTemplateParameterList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   33704             : 
   33705             : // *** COMMON CODE SECTION ENDS HERE ***
   33706             : 
   33707             : 
   33708             : // End of memberFunctionString
   33709             : // Start of memberFunctionString
   33710             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   33711             : 
   33712             :      // the generated cast function
   33713             :      // friend ROSE_DLL_API SgTemplateParameterList* isSgTemplateParameterList ( SgNode* s );
   33714             : 
   33715             :           typedef SgSupport base_node_type;
   33716             : 
   33717             : 
   33718             : // End of memberFunctionString
   33719             : 
   33720             :      public: 
   33721             :          SgTemplateParameterPtrList get_args() const;
   33722             :          void set_args(SgTemplateParameterPtrList args);
   33723             : 
   33724             : 
   33725             :      public: 
   33726             :          virtual ~SgTemplateParameterList();
   33727             : 
   33728             : 
   33729             :      public: 
   33730             :          SgTemplateParameterList(); 
   33731             : 
   33732             :     protected:
   33733             : // Start of memberFunctionString
   33734             : SgTemplateParameterPtrList p_args;
   33735             :           
   33736             : // End of memberFunctionString
   33737             : 
   33738             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateParameterList>;
   33739             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameterList, SgTemplateParameterPtrList,&SgTemplateParameterList::p_args>;
   33740             : 
   33741             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33742             : 
   33743             : 
   33744             :    };
   33745             : #endif
   33746             : 
   33747             : // postdeclarations for SgTemplateParameterList
   33748             : 
   33749             : /* #line 33750 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33750             : 
   33751             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   33752             : 
   33753             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33754             : 
   33755             : 
   33756             : /* #line 33757 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33757             : 
   33758             : 
   33759             : 
   33760             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33761             : 
   33762             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   33763             : //      This code is automatically generated for each 
   33764             : //      terminal and non-terminal within the defined 
   33765             : //      grammar.  There is a simple way to change the 
   33766             : //      code to fix bugs etc.  See the ROSE README file
   33767             : //      for directions.
   33768             : 
   33769             : // tps: (02/22/2010): Adding DLL export requirements
   33770             : #include "rosedll.h"
   33771             : 
   33772             : // predeclarations for SgGraph
   33773             : 
   33774             : /* #line 33775 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33775             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   33776             : 
   33777             : 
   33778             : #if 0
   33779             : // Required for Boost Spanning Tree support.
   33780             : #include <boost/graph/adjacency_list.hpp>
   33781             : #include <boost/graph/kruskal_min_spanning_tree.hpp>
   33782             : #endif
   33783             : /*!
   33784             :     Doxygen documentation for graph class (should maybe be put with the rest of the
   33785             : doxygen documentation in docs/testDoxygen directory instead).
   33786             : 
   33787             : 
   33788             : */
   33789             : 
   33790             : 
   33791             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   33792             : 
   33793             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   33794             : 
   33795             : #if 1
   33796             : // Class Definition for SgGraph
   33797             : class ROSE_DLL_API SgGraph  : public SgSupport
   33798             :    {
   33799             :      public:
   33800             : 
   33801             : 
   33802             : /* #line 33803 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   33803             : 
   33804             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   33805             : // Start of memberFunctionString
   33806             : /* #line 485 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   33807             : 
   33808             : 
   33809             :       /*! \brief Edge Type
   33810             : 
   33811             :           Values used to indicate types of edges used for program analysis.
   33812             :        */
   33813             :           enum GraphEdgeType
   33814             :              {
   33815             :             // DQ (4/29/2009): Added an error value
   33816             :                e_type_error, /*!< error value */
   33817             :                none,         /*!< none ??? */
   33818             :                cfg,          /*!< edge used for Control Flow Graph */
   33819             :                usage,        /*!< usage??? */
   33820             :                e_last_type   /*!< last value (unused, serves as upper bound on values) */
   33821             :              };
   33822             : 
   33823             :       /*! \brief Graph Properties
   33824             : 
   33825             :           Values used to indicate types of graphs used for program analysis.
   33826             :        */
   33827             :           enum GraphProperties
   33828             :              {
   33829             :             // DQ (4/29/2009): Added an error value
   33830             :                e_property_error,    /*!< error value */
   33831             :                name,                /*!< name of the node */
   33832             :                type,                /*!< name of the node */
   33833             :                nodest_jmp,          /*!< this a jump without dest */
   33834             :                itself_call,         /*!< this call calls itself */
   33835             :                nodest_call,         /*!< call without dest */
   33836             :                interrupt,           /*!< interrupt (int) */
   33837             :                eval,                /*!< dfa : evaluation */
   33838             :                regs,                /*!< dfa : registers */
   33839             :                done,                /*!< dfa : indicates that this node has successfully been visited */
   33840             :                dfa_standard,        /*!< dfa_standard_node color */  // dfa_standard_node color
   33841             :                dfa_resolved_func,   /*!< a function that has been resolved by dfa */
   33842             :                dfa_unresolved_func, /*!< a function that cant be resolved by dfa */
   33843             :                dfa_variable,        /*!< defines the variable found by dfa */
   33844             :                dfa_conditional_def, /*!< specifies the nodes that are defines but also conditional instructions */
   33845             :                edgeLabel,           /*!< ??? */
   33846             :                visitedCounter,      /*!< counts the amount of a node being visited during dfa */
   33847             :                variable,            /*!< stores the string of the variable */
   33848             :                dfa_bufferoverflow,  /*!< indicates buffer overflow */
   33849             :                e_last_property      /*!< last value (unused, serves as upper bound on values) */
   33850             :              };
   33851             : 
   33852             : 
   33853             : 
   33854             : #if 0
   33855             : 
   33856             :   // DQ (4/29/2009): Boost graph Type
   33857             :  //! Boost Graph Type used to represent ROSE graphs within Boost Graph Algorithms.
   33858             :      typedef boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS, boost::no_property, boost::property < boost::edge_weight_t, int > > BoostGraphType;
   33859             : 
   33860             :  //! Supporting graph types required by Boost Graph Library.
   33861             :      typedef boost::graph_traits < BoostGraphType >::edge_descriptor   BoostEdgeDescriptor;
   33862             : 
   33863             :   // DQ (4/29/2009): We might need this in the future, but not now!
   33864             :   // typedef boost::graph_traits < BoostGraphType >::vertex_descriptor BoostVertexDescriptor;
   33865             : 
   33866             : #endif
   33867             : 
   33868             : 
   33869             :  //! Simple edge type used to input data to Boost algorithms
   33870             :      typedef std::pair<int, int> BoostEdgeType;
   33871             : 
   33872             :   // DQ (4/29/2009): Added support for boost edges to be used in boost graph library algorithms.
   33873             :   // We need this local type so that the member access functions for data members of this type can be resolved.
   33874             :   // typedef std::vector<SgGraph::BoostEdgeType> SgBoostEdgeList;
   33875             :      typedef std::vector<BoostEdgeType> SgBoostEdgeList;
   33876             :   // typedef SgBoostEdgeList* SgBoostEdgeListPtr;
   33877             : 
   33878             :   // DQ (4/29/2009): Added support for boost edges to be used in boost graph library algorithms.
   33879             :      typedef std::vector<int> SgBoostEdgeWeightList;
   33880             :   // typedef SgBoostEdgeWeightList* SgBoostEdgeWeightListPtr;
   33881             : 
   33882             :      int hashCode( const char* p, int len) const; // hash a character array
   33883             :   // void initialize_graph_id();
   33884             :      void append_properties( int addr, const std::string & prop );
   33885             : 
   33886             :  //! Support for adding SgGraphNode to SgGraph.
   33887             :      SgGraphNode* addNode( const std::string & name = "", SgNode* sg_node = NULL);
   33888             : 
   33889             :  //! Add support for externally build SgGraphNode objects
   33890             :      SgGraphNode* addNode( SgGraphNode* node );
   33891             : 
   33892             :  //! Support for adding SgGraphEdge to SgGraph.
   33893             :      SgGraphEdge* addEdge( SgGraphNode* a, SgGraphNode* b, const std::string & name = "");
   33894             : 
   33895             :  //! Add support for externally build SgGraphNode objects
   33896             :      SgGraphEdge* addEdge( SgGraphEdge* edge );
   33897             : 
   33898             :      void post_construction_initialization() override;
   33899             : 
   33900             :  //! Support for Boost Minimum Spanning Tree.
   33901             :   // std::vector <BoostEdgeDescriptor> generateSpanningTree();
   33902             :      std::vector <SgGraphEdge*> generateSpanningTree();
   33903             : 
   33904             :      // tps (4/30/2009): Added properties for nodes and edges
   33905             :      // todo: this will be replaced with AstAttributes once the graph conversion is done.
   33906             :       std::string getProperty(SgGraph::GraphProperties property, SgGraphNode* node);
   33907             :     std::string getProperty(SgGraph::GraphProperties property, SgGraphEdge* edge);
   33908             :     void setProperty(SgGraph::GraphProperties property, SgGraphNode* node, std::string value);
   33909             :     void setProperty(SgGraph::GraphProperties property, SgGraphEdge* edge, std::string value);
   33910             : 
   33911             :   // tps (4/30/2009): The following are functions on the graph that were used before
   33912             :   // in the old graph implementation
   33913             :     //std::set<SgGraphEdge*> getEdge(SgGraphNode* src, SgGraphNode* trg);
   33914             :         void checkIfGraphNodeExists(const std::string& trg_mnemonic, std::vector<SgGraphNode*>& nodes);
   33915             : //SgGraphNode* checkIfGraphNodeExists(std::string& trg_mnemonic);
   33916             : 
   33917             : 
   33918             : 
   33919             :  //! Check if the node is present in the graph.
   33920             :      bool exists( SgGraphNode* node );
   33921             : 
   33922             :  //! Check if the edge is present in the graph.
   33923             :      bool exists( SgGraphEdge* edge );
   33924             : 
   33925             : 
   33926             :  //! Builds a set of edges that are associated with a specific node.
   33927             :      std::set<SgGraphEdge*> computeEdgeSet( SgGraphNode* node );
   33928             : 
   33929             :   //! Integer index version of "std::set<SgGraphEdge*> computeEdgeSet( SgGraphNode* node );"
   33930             :      std::set<int> computeEdgeSet( int node_index );
   33931             : 
   33932             :  //! Build set of node index pairs associated with node index (one of the value of the pair will be equal to the input node_index).
   33933             :      std::set< std::pair<int,int> > computeNodeIndexPairSet( int node_index );
   33934             : 
   33935             :  //! Builds a set of node index values associated with a label.
   33936             :      std::set<SgGraphNode*> computeNodeSet( const std::string & label );
   33937             : 
   33938             :  //! Builds a set of all nodes in the graph.
   33939             :      std::set<SgGraphNode*> computeNodeSet();
   33940             : 
   33941             :   //! Integer index version of "std::set<SgGraphNode*> computeNodeSet( const std::string & label );"
   33942             :      std::set<int> computeNodeIndexSet( const std::string & label );
   33943             : 
   33944             :   // Number of nodes in graph.
   33945             :      size_t numberOfGraphNodes() const;
   33946             : 
   33947             :   // Number of edges in graph.
   33948             :      size_t numberOfGraphEdges() const;
   33949             : 
   33950             :      void display_node_index_to_edge_multimap() const;
   33951             :      void display_node_index_to_node_map() const;
   33952             :      void display_edge_index_to_edge_map() const;
   33953             :      void display_node_index_pair_to_edge_multimap() const;
   33954             :      void display_string_to_node_index_multimap() const;
   33955             :      void display_string_to_edge_index_multimap() const;
   33956             : 
   33957             : #ifdef ROSE_USING_GRAPH_IR_NODES_FOR_BACKWARD_COMPATABILITY
   33958             :      void display_nodes() const;
   33959             :      void display_edges() const;
   33960             : #endif
   33961             : 
   33962             : //! Resize the internal hash tables based on the number of nodes (hash_maps and hash_multimaps for edges are made larger by multiplying by the value "numberOfEdges" ).
   33963             :      void resize_hash_maps( size_t numberOfNodes, size_t numberOfEdges = 10 );
   33964             : 
   33965             :   //! Report the size in bytes of the graph (includes all edges and ndes from all hash_maps and hash_multimaps).
   33966             :      size_t memory_usage();
   33967             : 
   33968             : 
   33969             : 
   33970             : // End of memberFunctionString
   33971             : // Start of memberFunctionString
   33972             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   33973             : 
   33974             : 
   33975             :      /* name Persistant Attribute Mechanism
   33976             : 
   33977             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   33978             :          multiple passes. Note that these attributes are persistant in that they are preserved
   33979             :          if the AST is written out to a file and read in from a file.  However, virtual function
   33980             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   33981             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   33982             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   33983             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   33984             :          access is required, however mostly only internal tools use this lower level support).
   33985             : 
   33986             :          \internal This used to be a public data member, but has been changed to be a protected
   33987             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   33988             :          but some of the names and the syntax for calling the interface have changed. The
   33989             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   33990             :       */
   33991             :      /* */
   33992             :      //! Add a new attribute represented by the named string.
   33993             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   33994             :      //! Returns attribute of name 's'.
   33995             :          virtual AstAttribute* getAttribute(std::string s) const override;
   33996             :      //! Replace existing attribute of name 's' with new AstAttribute.
   33997             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   33998             :      /*! \brief This is a wrapper function with the following semantics:
   33999             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   34000             :          otherwise \b updateAttribute(s,a); is called.
   34001             :       */
   34002             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   34003             :      //! Remove attribute of name 's' if present.
   34004             :          virtual void removeAttribute(std::string s) override;
   34005             :      //! Tests if attribute of name 's' is present.
   34006             :          virtual bool attributeExists(std::string s) const override;
   34007             :      //! Returns the number of attributes on this IR node.
   34008             :          virtual int numberOfAttributes() const override;
   34009             : 
   34010             :      /*! \fn AstAttributeMechanism* SgGraph::get_attributeMechanism() const;
   34011             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   34012             :                 a pointer to it is returned, else error.
   34013             : 
   34014             :          This is an access function used for getting the interally held pointer to a valid
   34015             :          AstAttributeMechanism. It provides access to lower level functionality of the
   34016             :          AstAttributeMechanism, put is mostly of use to internal tools.
   34017             :       */
   34018             :      /*! \fn void SgGraph::set_attributeMechanism(AstAttributeMechanism* a);
   34019             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   34020             : 
   34021             :          This is an access function used for setting the interally held pointer to a valid
   34022             :          AstAttributeMechanism.
   34023             :       */
   34024             :      /* */
   34025             : 
   34026             : 
   34027             : 
   34028             : 
   34029             : // End of memberFunctionString
   34030             : // Start of memberFunctionString
   34031             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   34032             : 
   34033             : // *** COMMON CODE SECTION BEGINS HERE ***
   34034             : 
   34035             :     public:
   34036             : 
   34037             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   34038             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   34039             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   34040             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   34041             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   34042             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   34043             : 
   34044             :       /*! \brief returns a string representing the class name */
   34045             :           virtual std::string class_name() const override;
   34046             : 
   34047             :       /*! \brief returns new style SageIII enum values */
   34048             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   34049             : 
   34050             :       /*! \brief static variant value */
   34051             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   34052             :        // static const VariantT static_variant = V_SgGraph;
   34053             :           enum { static_variant = V_SgGraph };
   34054             : 
   34055             :        /* the generated cast function */
   34056             :       /*! \brief Casts pointer from base class to derived class */
   34057             :           ROSE_DLL_API friend       SgGraph* isSgGraph(       SgNode * s );
   34058             : 
   34059             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   34060             :           ROSE_DLL_API friend const SgGraph* isSgGraph( const SgNode * s );
   34061             : 
   34062             :      // ******************************************
   34063             :      // * Memory Pool / New / Delete
   34064             :      // ******************************************
   34065             : 
   34066             :      public:
   34067             :           /// \private
   34068             :           static const unsigned pool_size; //
   34069             :           /// \private
   34070             :           static std::vector<unsigned char *> pools; //
   34071             :           /// \private
   34072             :           static SgGraph * next_node; // 
   34073             : 
   34074             :           /// \private
   34075             :           static unsigned long initializeStorageClassArray(SgGraphStorageClass *); //
   34076             : 
   34077             :           /// \private
   34078             :           static void clearMemoryPool(); //
   34079             :           static void deleteMemoryPool(); //
   34080             : 
   34081             :           /// \private
   34082             :           static void extendMemoryPoolForFileIO(); //
   34083             : 
   34084             :           /// \private
   34085             :           static SgGraph * getPointerFromGlobalIndex(unsigned long); //
   34086             :           /// \private
   34087             :           static SgGraph * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   34088             : 
   34089             :           /// \private
   34090             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   34091             :           /// \private
   34092             :           static void resetValidFreepointers(); //
   34093             :           /// \private
   34094             :           static unsigned long getNumberOfLastValidPointer(); //
   34095             : 
   34096             : 
   34097             : #if defined(INLINE_FUNCTIONS)
   34098             :       /*! \brief returns pointer to newly allocated IR node */
   34099             :           inline void *operator new (size_t size);
   34100             : #else
   34101             :       /*! \brief returns pointer to newly allocated IR node */
   34102             :           void *operator new (size_t size);
   34103             : #endif
   34104             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   34105             :           void operator delete (void* pointer, size_t size);
   34106             : 
   34107             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   34108           0 :           void operator delete (void* pointer)
   34109             :              {
   34110             :             // This is the generated delete operator...
   34111           0 :                SgGraph::operator delete (pointer,sizeof(SgGraph));
   34112             :              }
   34113             : 
   34114             :       /*! \brief Returns the total number of IR nodes of this type */
   34115             :           static size_t numberOfNodes();
   34116             : 
   34117             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   34118             :           static size_t memoryUsage();
   34119             : 
   34120             :       // End of scope which started in IR nodes specific code 
   34121             :       /* */
   34122             : 
   34123             :       /* name Internal Functions
   34124             :           \brief Internal functions ... incomplete-documentation
   34125             : 
   34126             :           These functions have been made public as part of the design, but they are suggested for internal use 
   34127             :           or by particularly knowledgeable users for specialized tools or applications.
   34128             : 
   34129             :           \internal We could not make these private because they are required by user for special purposes. And 
   34130             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   34131             :          
   34132             :        */
   34133             : 
   34134             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   34135             :        // overridden in every class by *generated* implementation
   34136             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   34137             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   34138             :        // MS: 06/28/02 container of names of variables or container indices 
   34139             :        // used used in the traversal to access AST successor nodes
   34140             :        // overridden in every class by *generated* implementation
   34141             :       /*! \brief container of names of variables or container indices used used in the traversal
   34142             :           to access AST successor nodes overridden in every class by *generated* implementation */
   34143             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   34144             : 
   34145             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   34146             :        // than all the vector copies. The implementation for these functions is generated for each class.
   34147             :       /*! \brief return number of children in the traversal successor list */
   34148             :           virtual size_t get_numberOfTraversalSuccessors() override;
   34149             :       /*! \brief index-based access to traversal successors by index number */
   34150             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   34151             :       /*! \brief index-based access to traversal successors by child node */
   34152             :           virtual size_t get_childIndex(SgNode *child) override;
   34153             : 
   34154             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   34155             :        // MS: 08/16/2002 method for generating RTI information
   34156             :       /*! \brief return C++ Runtime-Time-Information */
   34157             :           virtual RTIReturnType roseRTI() override;
   34158             : #endif
   34159             :       /* */
   34160             : 
   34161             : 
   34162             : 
   34163             :       /* name Deprecated Functions
   34164             :           \brief Deprecated functions ... incomplete-documentation
   34165             : 
   34166             :           These functions have been deprecated from use.
   34167             :        */
   34168             :       /* */
   34169             : 
   34170             :       /*! returns a C style string (char*) representing the class name */
   34171             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   34172             : 
   34173             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   34174             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   34175             : #if 0
   34176             :       /*! returns old style Sage II enum values */
   34177             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   34178             :       /*! returns old style Sage II enum values */
   34179             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   34180             : #endif
   34181             :       /* */
   34182             : 
   34183             : 
   34184             : 
   34185             : 
   34186             :      public:
   34187             :       /* name Traversal Support Functions
   34188             :           \brief Traversal support functions ... incomplete-documentation
   34189             : 
   34190             :           These functions have been made public as part of the design, but they are suggested for internal use 
   34191             :           or by particularly knowledgable users for specialized tools or applications.
   34192             :        */
   34193             :       /* */
   34194             : 
   34195             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   34196             :        // (inferior to ROSE traversal mechanism, experimental).
   34197             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   34198             :        */
   34199             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   34200             : 
   34201             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   34202             :       /*! \brief support for the classic visitor pattern done in GoF */
   34203             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   34204             : 
   34205             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   34206             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   34207             :        */
   34208             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   34209             : 
   34210             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   34211             :        */
   34212             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   34213             : 
   34214             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   34215             :        // This traversal helps support internal tools that call static member functions.
   34216             :        // note: this function operates on the memory pools.
   34217             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   34218             :        */
   34219             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   34220             :       /* */
   34221             : 
   34222             : 
   34223             :      public:
   34224             :       /* name Memory Allocation Functions
   34225             :           \brief Memory allocations functions ... incomplete-documentation
   34226             : 
   34227             :           These functions have been made public as part of the design, but they are suggested for internal use 
   34228             :           or by particularly knowledgable users for specialized tools or applications.
   34229             :        */
   34230             :       /* */
   34231             : 
   34232             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   34233             : 
   34234             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   34235             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   34236             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   34237             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   34238             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   34239             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   34240             :           being used with the AST File I/O mechanism.
   34241             :        */
   34242             :           virtual bool isInMemoryPool() override;
   34243             : 
   34244             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   34245             : 
   34246             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   34247             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   34248             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   34249             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   34250             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   34251             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   34252             :           being used with the AST File I/O mechanism.
   34253             :        */
   34254             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   34255             : 
   34256             :       // DQ (4/30/2006): Modified to be a const function.
   34257             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   34258             : 
   34259             :           This functions is part of general support for many possible tools to operate 
   34260             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   34261             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   34262             :           less than the set of pointers used by the AST file I/O. This is part of
   34263             :           work implemented by Andreas, and support tools such as the AST graph generation.
   34264             : 
   34265             :           \warning This function can return unexpected data members and thus the 
   34266             :                    order and the number of elements is unpredicable and subject 
   34267             :                    to change.
   34268             : 
   34269             :           \returns STL vector of pairs of SgNode* and strings
   34270             :        */
   34271             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   34272             : 
   34273             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   34274             : 
   34275             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   34276             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   34277             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   34278             : 
   34279             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   34280             :                    and subject to change.
   34281             :        */
   34282             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   34283             : 
   34284             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   34285             : 
   34286             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   34287             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   34288             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   34289             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   34290             : 
   34291             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   34292             : 
   34293             :           \returns long
   34294             :        */
   34295             :           virtual long getChildIndex( SgNode* childNode ) const override;
   34296             : 
   34297             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   34298             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   34299             :       /* \brief Constructor for use by AST File I/O Mechanism
   34300             : 
   34301             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   34302             :           which obtained via fast binary file I/O from disk.
   34303             :        */
   34304             :        // SgGraph( SgGraphStorageClass& source );
   34305             : 
   34306             : 
   34307             : 
   34308             : 
   34309             : 
   34310             :  // JH (10/24/2005): methods added to support the ast file IO
   34311             :     private:
   34312             : 
   34313             :       /* name AST Memory Allocation Support Functions
   34314             :           \brief Memory allocations support....
   34315             : 
   34316             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   34317             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   34318             :           and support the AST File I/O Mechanism.
   34319             :        */
   34320             :       /* */
   34321             : 
   34322             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   34323             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   34324             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   34325             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   34326             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   34327             :           a correspinding one in the AST_FILE_IO class!
   34328             :        */
   34329             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   34330             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   34331             :       /* \brief Typedef used for low level memory access.
   34332             :        */
   34333             :        // typedef unsigned char* TestType;
   34334             : 
   34335             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   34336             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   34337             :       /* \brief Typedef used to hold memory addresses as values.
   34338             :        */
   34339             :        // typedef unsigned long  AddressType;
   34340             : 
   34341             : 
   34342             : 
   34343             :        // necessary, to have direct access to the p_freepointer and the private methods !
   34344             :       /*! \brief friend class declaration to support AST File I/O */
   34345             :           friend class AST_FILE_IO;
   34346             : 
   34347             :       /*! \brief friend class declaration to support AST File I/O */
   34348             :           friend class SgGraphStorageClass;
   34349             : 
   34350             :       /*! \brief friend class declaration to support AST File I/O */
   34351             :           friend class AstSpecificDataManagingClass;
   34352             : 
   34353             :       /*! \brief friend class declaration to support AST File I/O */
   34354             :           friend class AstSpecificDataManagingClassStorageClass;
   34355             :     public:
   34356             :       /*! \brief IR node constructor to support AST File I/O */
   34357             :           SgGraph( const SgGraphStorageClass& source );
   34358             : 
   34359             :  // private: // JJW hack
   34360             :        /*
   34361             :           name AST Memory Allocation Support Variables
   34362             :           Memory allocations support variables 
   34363             : 
   34364             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   34365             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   34366             :           and support the AST File I/O Mechanism.
   34367             :        */
   34368             :       /* */
   34369             : 
   34370             :     public:
   34371             : 
   34372             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   34373             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   34374             :       // virtual SgNode* addRegExpAttribute();
   34375             :       /*! \brief Support for AST matching using regular expression.
   34376             : 
   34377             :           This support is incomplete and the subject of current research to define 
   34378             :           RegEx trees to support inexact matching.
   34379             :        */
   34380             :           SgGraph* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   34381             : 
   34382             : // *** COMMON CODE SECTION ENDS HERE ***
   34383             : 
   34384             : 
   34385             : // End of memberFunctionString
   34386             : // Start of memberFunctionString
   34387             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   34388             : 
   34389             :      // the generated cast function
   34390             :      // friend ROSE_DLL_API SgGraph* isSgGraph ( SgNode* s );
   34391             : 
   34392             :           typedef SgSupport base_node_type;
   34393             : 
   34394             : 
   34395             : // End of memberFunctionString
   34396             : 
   34397             :      public: 
   34398             :          std::string get_name() const /* (getDataAccessFunctionPrototypeString) */;
   34399             :          void set_name(std::string name) /* (getDataAccessFunctionPrototypeString) */;
   34400             : 
   34401             :      public: 
   34402             :          const rose_graph_integer_node_hash_map&  get_node_index_to_node_map() const;
   34403             :          rose_graph_integer_node_hash_map& get_node_index_to_node_map(); 
   34404             : 
   34405             :      public: 
   34406             :          const rose_graph_integer_edge_hash_map&  get_edge_index_to_edge_map() const;
   34407             :          rose_graph_integer_edge_hash_map& get_edge_index_to_edge_map(); 
   34408             : 
   34409             :      public: 
   34410             :          const rose_graph_integerpair_edge_hash_multimap&  get_node_index_pair_to_edge_multimap() const;
   34411             :          rose_graph_integerpair_edge_hash_multimap& get_node_index_pair_to_edge_multimap(); 
   34412             : 
   34413             :      public: 
   34414             :          const rose_graph_string_integer_hash_multimap&  get_string_to_node_index_multimap() const;
   34415             :          rose_graph_string_integer_hash_multimap& get_string_to_node_index_multimap(); 
   34416             : 
   34417             :      public: 
   34418             :          const rose_graph_string_integer_hash_multimap&  get_string_to_edge_index_multimap() const;
   34419             :          rose_graph_string_integer_hash_multimap& get_string_to_edge_index_multimap(); 
   34420             : 
   34421             :      public: 
   34422             :          const rose_graph_integer_edge_hash_multimap&  get_node_index_to_edge_multimap() const;
   34423             :          rose_graph_integer_edge_hash_multimap& get_node_index_to_edge_multimap(); 
   34424             : 
   34425             :      public: 
   34426             :          int get_index() const;
   34427             :          void set_index(int index);
   34428             : 
   34429             : 
   34430             :      public: 
   34431             :          const SgBoostEdgeList&  get_boost_edges() const;
   34432             :          SgBoostEdgeList& get_boost_edges(); 
   34433             : 
   34434             :      public: 
   34435             :          const SgBoostEdgeWeightList&  get_boost_edge_weights() const;
   34436             :          SgBoostEdgeWeightList& get_boost_edge_weights(); 
   34437             : 
   34438             :      public: 
   34439             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   34440             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   34441             : 
   34442             :      public: 
   34443             :          const std::map<int, std::string>&  get_properties() const;
   34444             :          std::map<int, std::string>& get_properties(); 
   34445             : 
   34446             : 
   34447             :      public: 
   34448             :          virtual ~SgGraph();
   34449             : 
   34450             : 
   34451             :      public: 
   34452             :          SgGraph(std::string name = ""); 
   34453             : 
   34454             :     protected:
   34455             : // Start of memberFunctionString
   34456             : std::string p_name;
   34457             :           
   34458             : // End of memberFunctionString
   34459             : // Start of memberFunctionString
   34460             : rose_graph_integer_node_hash_map p_node_index_to_node_map;
   34461             :           
   34462             : // End of memberFunctionString
   34463             : // Start of memberFunctionString
   34464             : rose_graph_integer_edge_hash_map p_edge_index_to_edge_map;
   34465             :           
   34466             : // End of memberFunctionString
   34467             : // Start of memberFunctionString
   34468             : rose_graph_integerpair_edge_hash_multimap p_node_index_pair_to_edge_multimap;
   34469             :           
   34470             : // End of memberFunctionString
   34471             : // Start of memberFunctionString
   34472             : rose_graph_string_integer_hash_multimap p_string_to_node_index_multimap;
   34473             :           
   34474             : // End of memberFunctionString
   34475             : // Start of memberFunctionString
   34476             : rose_graph_string_integer_hash_multimap p_string_to_edge_index_multimap;
   34477             :           
   34478             : // End of memberFunctionString
   34479             : // Start of memberFunctionString
   34480             : rose_graph_integer_edge_hash_multimap p_node_index_to_edge_multimap;
   34481             :           
   34482             : // End of memberFunctionString
   34483             : // Start of memberFunctionString
   34484             : int p_index;
   34485             :           
   34486             : // End of memberFunctionString
   34487             : // Start of memberFunctionString
   34488             : static int p_index_counter;
   34489             :           
   34490             : // End of memberFunctionString
   34491             : // Start of memberFunctionString
   34492             : SgBoostEdgeList p_boost_edges;
   34493             :           
   34494             : // End of memberFunctionString
   34495             : // Start of memberFunctionString
   34496             : SgBoostEdgeWeightList p_boost_edge_weights;
   34497             :           
   34498             : // End of memberFunctionString
   34499             : // Start of memberFunctionString
   34500             : AstAttributeMechanism* p_attributeMechanism;
   34501             :           
   34502             : // End of memberFunctionString
   34503             : // Start of memberFunctionString
   34504             : std::map<int, std::string> p_properties;
   34505             :           
   34506             : // End of memberFunctionString
   34507             : 
   34508             :     friend struct Rose::Traits::generated::describe_node_t<SgGraph>;
   34509             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, std::string,&SgGraph::p_name>;
   34510             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, rose_graph_integer_node_hash_map,&SgGraph::p_node_index_to_node_map>;
   34511             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, rose_graph_integer_edge_hash_map,&SgGraph::p_edge_index_to_edge_map>;
   34512             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, rose_graph_integerpair_edge_hash_multimap,&SgGraph::p_node_index_pair_to_edge_multimap>;
   34513             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, rose_graph_string_integer_hash_multimap,&SgGraph::p_string_to_node_index_multimap>;
   34514             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, rose_graph_string_integer_hash_multimap,&SgGraph::p_string_to_edge_index_multimap>;
   34515             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, rose_graph_integer_edge_hash_multimap,&SgGraph::p_node_index_to_edge_multimap>;
   34516             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, int,&SgGraph::p_index>;
   34517             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, SgBoostEdgeList,&SgGraph::p_boost_edges>;
   34518             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, SgBoostEdgeWeightList,&SgGraph::p_boost_edge_weights>;
   34519             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, AstAttributeMechanism*,&SgGraph::p_attributeMechanism>;
   34520             :     friend struct Rose::Traits::generated::describe_field_t<SgGraph, std::map<int, std::string>,&SgGraph::p_properties>;
   34521             : 
   34522             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   34523             : 
   34524             : 
   34525             :    };
   34526             : #endif
   34527             : 
   34528             : // postdeclarations for SgGraph
   34529             : 
   34530             : /* #line 34531 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   34531             : /* #line 649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   34532             : 
   34533             : 
   34534             : 
   34535             : // DQ (4/29/2009): Added support for boost edges to be used in boost graph library algorithms.
   34536             : // We need this global type so that the member access functions (defined outside the class)
   34537             : // for data members of this type can be resolved.
   34538             : typedef SgGraph::SgBoostEdgeList SgBoostEdgeList;
   34539             : typedef SgBoostEdgeList* SgBoostEdgeListPtr;
   34540             : 
   34541             : // DQ (4/29/2009): Added support for boost edges to be used in boost graph library algorithms.
   34542             : typedef SgGraph::SgBoostEdgeWeightList SgBoostEdgeWeightList;
   34543             : typedef SgBoostEdgeWeightList* SgBoostEdgeWeightListPtr;
   34544             : 
   34545             : 
   34546             : // Supporting graph type required by Boost Graph Library.
   34547             : // typedef boost::graph_traits < SgGraph::BoostGraphType >::edge_descriptor BoostEdgeDescriptor;
   34548             : 
   34549             : 
   34550             : 
   34551             : 
   34552             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   34553             : 
   34554             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   34555             : 
   34556             : 
   34557             : /* #line 34558 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   34558             : 
   34559             : 
   34560             : 
   34561             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   34562             : 
   34563             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   34564             : //      This code is automatically generated for each 
   34565             : //      terminal and non-terminal within the defined 
   34566             : //      grammar.  There is a simple way to change the 
   34567             : //      code to fix bugs etc.  See the ROSE README file
   34568             : //      for directions.
   34569             : 
   34570             : // tps: (02/22/2010): Adding DLL export requirements
   34571             : #include "rosedll.h"
   34572             : 
   34573             : // predeclarations for SgIncidenceDirectedGraph
   34574             : 
   34575             : /* #line 34576 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   34576             : 
   34577             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   34578             : 
   34579             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   34580             : 
   34581             : #if 1
   34582             : // Class Definition for SgIncidenceDirectedGraph
   34583             : class ROSE_DLL_API SgIncidenceDirectedGraph  : public SgGraph
   34584             :    {
   34585             :      public:
   34586             : 
   34587             : 
   34588             : /* #line 34589 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   34589             : 
   34590             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   34591             : // Start of memberFunctionString
   34592             : /* #line 744 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   34593             : 
   34594             :   // tps (4/30/2009): The following are functions on the graph that were used before
   34595             :   // in the old graph implementation
   34596             :       std::set<SgGraphEdge*> getEdge(SgGraphNode* src);
   34597             :       bool checkIfGraphEdgeExists(SgGraphNode* src);
   34598             : 
   34599             :      void post_construction_initialization() override;
   34600             : 
   34601             :  //! Support for adding SgGraphEdge to SgGraph.
   34602             :      SgDirectedGraphEdge* addDirectedEdge( SgGraphNode* a, SgGraphNode* b, const std::string & name = "");
   34603             : 
   34604             :  //! Add support for externally build SgGraphNode objects
   34605             :      SgDirectedGraphEdge* addDirectedEdge( SgDirectedGraphEdge* edge  );
   34606             : 
   34607             :  //! Remove an edge from graph
   34608             :      bool removeDirectedEdge( SgDirectedGraphEdge* edge  );
   34609             : 
   34610             :   // tps (4/30/2009): Added to support functionality for DirectedGraphs
   34611             :      void getSuccessors(const SgGraphNode* node, std::vector <SgGraphNode*>& vec ) const;
   34612             :      void getPredecessors(const SgGraphNode* node, std::vector <SgGraphNode*>& vec ) const;
   34613             :      std::set<SgDirectedGraphEdge*> getDirectedEdge(SgGraphNode* src, SgGraphNode* trg);
   34614             :      bool checkIfDirectedGraphEdgeExists(SgGraphNode* src, SgGraphNode* trg);
   34615             : 
   34616             :   // DQ (8/18/2009): Added support for construction of sets of edges.
   34617             :      std::set<SgDirectedGraphEdge*> computeEdgeSetIn( SgGraphNode* node );
   34618             :      std::set<int> computeEdgeSetIn( int node_index );
   34619             :      std::set<SgDirectedGraphEdge*> computeEdgeSetOut( SgGraphNode* node );
   34620             :      std::set<int> computeEdgeSetOut( int node_index );
   34621             : 
   34622             : 
   34623             : 
   34624             : // End of memberFunctionString
   34625             : // Start of memberFunctionString
   34626             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   34627             : 
   34628             : // *** COMMON CODE SECTION BEGINS HERE ***
   34629             : 
   34630             :     public:
   34631             : 
   34632             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   34633             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   34634             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   34635             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   34636             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   34637             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   34638             : 
   34639             :       /*! \brief returns a string representing the class name */
   34640             :           virtual std::string class_name() const override;
   34641             : 
   34642             :       /*! \brief returns new style SageIII enum values */
   34643             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   34644             : 
   34645             :       /*! \brief static variant value */
   34646             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   34647             :        // static const VariantT static_variant = V_SgIncidenceDirectedGraph;
   34648             :           enum { static_variant = V_SgIncidenceDirectedGraph };
   34649             : 
   34650             :        /* the generated cast function */
   34651             :       /*! \brief Casts pointer from base class to derived class */
   34652             :           ROSE_DLL_API friend       SgIncidenceDirectedGraph* isSgIncidenceDirectedGraph(       SgNode * s );
   34653             : 
   34654             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   34655             :           ROSE_DLL_API friend const SgIncidenceDirectedGraph* isSgIncidenceDirectedGraph( const SgNode * s );
   34656             : 
   34657             :      // ******************************************
   34658             :      // * Memory Pool / New / Delete
   34659             :      // ******************************************
   34660             : 
   34661             :      public:
   34662             :           /// \private
   34663             :           static const unsigned pool_size; //
   34664             :           /// \private
   34665             :           static std::vector<unsigned char *> pools; //
   34666             :           /// \private
   34667             :           static SgIncidenceDirectedGraph * next_node; // 
   34668             : 
   34669             :           /// \private
   34670             :           static unsigned long initializeStorageClassArray(SgIncidenceDirectedGraphStorageClass *); //
   34671             : 
   34672             :           /// \private
   34673             :           static void clearMemoryPool(); //
   34674             :           static void deleteMemoryPool(); //
   34675             : 
   34676             :           /// \private
   34677             :           static void extendMemoryPoolForFileIO(); //
   34678             : 
   34679             :           /// \private
   34680             :           static SgIncidenceDirectedGraph * getPointerFromGlobalIndex(unsigned long); //
   34681             :           /// \private
   34682             :           static SgIncidenceDirectedGraph * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   34683             : 
   34684             :           /// \private
   34685             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   34686             :           /// \private
   34687             :           static void resetValidFreepointers(); //
   34688             :           /// \private
   34689             :           static unsigned long getNumberOfLastValidPointer(); //
   34690             : 
   34691             : 
   34692             : #if defined(INLINE_FUNCTIONS)
   34693             :       /*! \brief returns pointer to newly allocated IR node */
   34694             :           inline void *operator new (size_t size);
   34695             : #else
   34696             :       /*! \brief returns pointer to newly allocated IR node */
   34697             :           void *operator new (size_t size);
   34698             : #endif
   34699             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   34700             :           void operator delete (void* pointer, size_t size);
   34701             : 
   34702             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   34703           0 :           void operator delete (void* pointer)
   34704             :              {
   34705             :             // This is the generated delete operator...
   34706           0 :                SgIncidenceDirectedGraph::operator delete (pointer,sizeof(SgIncidenceDirectedGraph));
   34707             :              }
   34708             : 
   34709             :       /*! \brief Returns the total number of IR nodes of this type */
   34710             :           static size_t numberOfNodes();
   34711             : 
   34712             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   34713             :           static size_t memoryUsage();
   34714             : 
   34715             :       // End of scope which started in IR nodes specific code 
   34716             :       /* */
   34717             : 
   34718             :       /* name Internal Functions
   34719             :           \brief Internal functions ... incomplete-documentation
   34720             : 
   34721             :           These functions have been made public as part of the design, but they are suggested for internal use 
   34722             :           or by particularly knowledgeable users for specialized tools or applications.
   34723             : 
   34724             :           \internal We could not make these private because they are required by user for special purposes. And 
   34725             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   34726             :          
   34727             :        */
   34728             : 
   34729             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   34730             :        // overridden in every class by *generated* implementation
   34731             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   34732             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   34733             :        // MS: 06/28/02 container of names of variables or container indices 
   34734             :        // used used in the traversal to access AST successor nodes
   34735             :        // overridden in every class by *generated* implementation
   34736             :       /*! \brief container of names of variables or container indices used used in the traversal
   34737             :           to access AST successor nodes overridden in every class by *generated* implementation */
   34738             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   34739             : 
   34740             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   34741             :        // than all the vector copies. The implementation for these functions is generated for each class.
   34742             :       /*! \brief return number of children in the traversal successor list */
   34743             :           virtual size_t get_numberOfTraversalSuccessors() override;
   34744             :       /*! \brief index-based access to traversal successors by index number */
   34745             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   34746             :       /*! \brief index-based access to traversal successors by child node */
   34747             :           virtual size_t get_childIndex(SgNode *child) override;
   34748             : 
   34749             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   34750             :        // MS: 08/16/2002 method for generating RTI information
   34751             :       /*! \brief return C++ Runtime-Time-Information */
   34752             :           virtual RTIReturnType roseRTI() override;
   34753             : #endif
   34754             :       /* */
   34755             : 
   34756             : 
   34757             : 
   34758             :       /* name Deprecated Functions
   34759             :           \brief Deprecated functions ... incomplete-documentation
   34760             : 
   34761             :           These functions have been deprecated from use.
   34762             :        */
   34763             :       /* */
   34764             : 
   34765             :       /*! returns a C style string (char*) representing the class name */
   34766             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   34767             : 
   34768             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   34769             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   34770             : #if 0
   34771             :       /*! returns old style Sage II enum values */
   34772             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   34773             :       /*! returns old style Sage II enum values */
   34774             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   34775             : #endif
   34776             :       /* */
   34777             : 
   34778             : 
   34779             : 
   34780             : 
   34781             :      public:
   34782             :       /* name Traversal Support Functions
   34783             :           \brief Traversal support functions ... incomplete-documentation
   34784             : 
   34785             :           These functions have been made public as part of the design, but they are suggested for internal use 
   34786             :           or by particularly knowledgable users for specialized tools or applications.
   34787             :        */
   34788             :       /* */
   34789             : 
   34790             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   34791             :        // (inferior to ROSE traversal mechanism, experimental).
   34792             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   34793             :        */
   34794             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   34795             : 
   34796             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   34797             :       /*! \brief support for the classic visitor pattern done in GoF */
   34798             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   34799             : 
   34800             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   34801             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   34802             :        */
   34803             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   34804             : 
   34805             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   34806             :        */
   34807             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   34808             : 
   34809             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   34810             :        // This traversal helps support internal tools that call static member functions.
   34811             :        // note: this function operates on the memory pools.
   34812             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   34813             :        */
   34814             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   34815             :       /* */
   34816             : 
   34817             : 
   34818             :      public:
   34819             :       /* name Memory Allocation Functions
   34820             :           \brief Memory allocations functions ... incomplete-documentation
   34821             : 
   34822             :           These functions have been made public as part of the design, but they are suggested for internal use 
   34823             :           or by particularly knowledgable users for specialized tools or applications.
   34824             :        */
   34825             :       /* */
   34826             : 
   34827             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   34828             : 
   34829             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   34830             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   34831             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   34832             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   34833             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   34834             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   34835             :           being used with the AST File I/O mechanism.
   34836             :        */
   34837             :           virtual bool isInMemoryPool() override;
   34838             : 
   34839             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   34840             : 
   34841             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   34842             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   34843             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   34844             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   34845             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   34846             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   34847             :           being used with the AST File I/O mechanism.
   34848             :        */
   34849             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   34850             : 
   34851             :       // DQ (4/30/2006): Modified to be a const function.
   34852             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   34853             : 
   34854             :           This functions is part of general support for many possible tools to operate 
   34855             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   34856             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   34857             :           less than the set of pointers used by the AST file I/O. This is part of
   34858             :           work implemented by Andreas, and support tools such as the AST graph generation.
   34859             : 
   34860             :           \warning This function can return unexpected data members and thus the 
   34861             :                    order and the number of elements is unpredicable and subject 
   34862             :                    to change.
   34863             : 
   34864             :           \returns STL vector of pairs of SgNode* and strings
   34865             :        */
   34866             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   34867             : 
   34868             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   34869             : 
   34870             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   34871             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   34872             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   34873             : 
   34874             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   34875             :                    and subject to change.
   34876             :        */
   34877             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   34878             : 
   34879             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   34880             : 
   34881             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   34882             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   34883             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   34884             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   34885             : 
   34886             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   34887             : 
   34888             :           \returns long
   34889             :        */
   34890             :           virtual long getChildIndex( SgNode* childNode ) const override;
   34891             : 
   34892             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   34893             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   34894             :       /* \brief Constructor for use by AST File I/O Mechanism
   34895             : 
   34896             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   34897             :           which obtained via fast binary file I/O from disk.
   34898             :        */
   34899             :        // SgIncidenceDirectedGraph( SgIncidenceDirectedGraphStorageClass& source );
   34900             : 
   34901             : 
   34902             : 
   34903             : 
   34904             : 
   34905             :  // JH (10/24/2005): methods added to support the ast file IO
   34906             :     private:
   34907             : 
   34908             :       /* name AST Memory Allocation Support Functions
   34909             :           \brief Memory allocations support....
   34910             : 
   34911             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   34912             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   34913             :           and support the AST File I/O Mechanism.
   34914             :        */
   34915             :       /* */
   34916             : 
   34917             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   34918             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   34919             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   34920             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   34921             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   34922             :           a correspinding one in the AST_FILE_IO class!
   34923             :        */
   34924             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   34925             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   34926             :       /* \brief Typedef used for low level memory access.
   34927             :        */
   34928             :        // typedef unsigned char* TestType;
   34929             : 
   34930             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   34931             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   34932             :       /* \brief Typedef used to hold memory addresses as values.
   34933             :        */
   34934             :        // typedef unsigned long  AddressType;
   34935             : 
   34936             : 
   34937             : 
   34938             :        // necessary, to have direct access to the p_freepointer and the private methods !
   34939             :       /*! \brief friend class declaration to support AST File I/O */
   34940             :           friend class AST_FILE_IO;
   34941             : 
   34942             :       /*! \brief friend class declaration to support AST File I/O */
   34943             :           friend class SgIncidenceDirectedGraphStorageClass;
   34944             : 
   34945             :       /*! \brief friend class declaration to support AST File I/O */
   34946             :           friend class AstSpecificDataManagingClass;
   34947             : 
   34948             :       /*! \brief friend class declaration to support AST File I/O */
   34949             :           friend class AstSpecificDataManagingClassStorageClass;
   34950             :     public:
   34951             :       /*! \brief IR node constructor to support AST File I/O */
   34952             :           SgIncidenceDirectedGraph( const SgIncidenceDirectedGraphStorageClass& source );
   34953             : 
   34954             :  // private: // JJW hack
   34955             :        /*
   34956             :           name AST Memory Allocation Support Variables
   34957             :           Memory allocations support variables 
   34958             : 
   34959             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   34960             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   34961             :           and support the AST File I/O Mechanism.
   34962             :        */
   34963             :       /* */
   34964             : 
   34965             :     public:
   34966             : 
   34967             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   34968             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   34969             :       // virtual SgNode* addRegExpAttribute();
   34970             :       /*! \brief Support for AST matching using regular expression.
   34971             : 
   34972             :           This support is incomplete and the subject of current research to define 
   34973             :           RegEx trees to support inexact matching.
   34974             :        */
   34975             :           SgIncidenceDirectedGraph* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   34976             : 
   34977             : // *** COMMON CODE SECTION ENDS HERE ***
   34978             : 
   34979             : 
   34980             : // End of memberFunctionString
   34981             : // Start of memberFunctionString
   34982             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   34983             : 
   34984             :      // the generated cast function
   34985             :      // friend ROSE_DLL_API SgIncidenceDirectedGraph* isSgIncidenceDirectedGraph ( SgNode* s );
   34986             : 
   34987             :           typedef SgGraph base_node_type;
   34988             : 
   34989             : 
   34990             : // End of memberFunctionString
   34991             : 
   34992             :      public: 
   34993             :          const rose_graph_integer_edge_hash_multimap&  get_node_index_to_edge_multimap_edgesOut() const;
   34994             :          rose_graph_integer_edge_hash_multimap& get_node_index_to_edge_multimap_edgesOut(); 
   34995             : 
   34996             :      public: 
   34997             :          const rose_graph_integer_edge_hash_multimap&  get_node_index_to_edge_multimap_edgesIn() const;
   34998             :          rose_graph_integer_edge_hash_multimap& get_node_index_to_edge_multimap_edgesIn(); 
   34999             : 
   35000             : 
   35001             :      public: 
   35002             :          virtual ~SgIncidenceDirectedGraph();
   35003             : 
   35004             : 
   35005             :      public: 
   35006             :          SgIncidenceDirectedGraph(std::string name = ""); 
   35007             : 
   35008             :     protected:
   35009             : // Start of memberFunctionString
   35010             : rose_graph_integer_edge_hash_multimap p_node_index_to_edge_multimap_edgesOut;
   35011             :           
   35012             : // End of memberFunctionString
   35013             : // Start of memberFunctionString
   35014             : rose_graph_integer_edge_hash_multimap p_node_index_to_edge_multimap_edgesIn;
   35015             :           
   35016             : // End of memberFunctionString
   35017             : 
   35018             :     friend struct Rose::Traits::generated::describe_node_t<SgIncidenceDirectedGraph>;
   35019             :     friend struct Rose::Traits::generated::describe_field_t<SgIncidenceDirectedGraph, rose_graph_integer_edge_hash_multimap,&SgIncidenceDirectedGraph::p_node_index_to_edge_multimap_edgesOut>;
   35020             :     friend struct Rose::Traits::generated::describe_field_t<SgIncidenceDirectedGraph, rose_graph_integer_edge_hash_multimap,&SgIncidenceDirectedGraph::p_node_index_to_edge_multimap_edgesIn>;
   35021             : 
   35022             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35023             : 
   35024             : 
   35025             :    };
   35026             : #endif
   35027             : 
   35028             : // postdeclarations for SgIncidenceDirectedGraph
   35029             : 
   35030             : /* #line 35031 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35031             : 
   35032             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   35033             : 
   35034             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35035             : 
   35036             : 
   35037             : /* #line 35038 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35038             : 
   35039             : 
   35040             : 
   35041             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35042             : 
   35043             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   35044             : //      This code is automatically generated for each 
   35045             : //      terminal and non-terminal within the defined 
   35046             : //      grammar.  There is a simple way to change the 
   35047             : //      code to fix bugs etc.  See the ROSE README file
   35048             : //      for directions.
   35049             : 
   35050             : // tps: (02/22/2010): Adding DLL export requirements
   35051             : #include "rosedll.h"
   35052             : 
   35053             : // predeclarations for SgBidirectionalGraph
   35054             : 
   35055             : /* #line 35056 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35056             : 
   35057             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   35058             : 
   35059             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35060             : 
   35061             : #if 1
   35062             : // Class Definition for SgBidirectionalGraph
   35063             : class ROSE_DLL_API SgBidirectionalGraph  : public SgIncidenceDirectedGraph
   35064             :    {
   35065             :      public:
   35066             : 
   35067             : 
   35068             : /* #line 35069 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35069             : 
   35070             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   35071             : // Start of memberFunctionString
   35072             : /* #line 776 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   35073             : 
   35074             : 
   35075             : 
   35076             : // End of memberFunctionString
   35077             : // Start of memberFunctionString
   35078             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   35079             : 
   35080             : // *** COMMON CODE SECTION BEGINS HERE ***
   35081             : 
   35082             :     public:
   35083             : 
   35084             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   35085             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   35086             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   35087             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   35088             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   35089             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   35090             : 
   35091             :       /*! \brief returns a string representing the class name */
   35092             :           virtual std::string class_name() const override;
   35093             : 
   35094             :       /*! \brief returns new style SageIII enum values */
   35095             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   35096             : 
   35097             :       /*! \brief static variant value */
   35098             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   35099             :        // static const VariantT static_variant = V_SgBidirectionalGraph;
   35100             :           enum { static_variant = V_SgBidirectionalGraph };
   35101             : 
   35102             :        /* the generated cast function */
   35103             :       /*! \brief Casts pointer from base class to derived class */
   35104             :           ROSE_DLL_API friend       SgBidirectionalGraph* isSgBidirectionalGraph(       SgNode * s );
   35105             : 
   35106             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   35107             :           ROSE_DLL_API friend const SgBidirectionalGraph* isSgBidirectionalGraph( const SgNode * s );
   35108             : 
   35109             :      // ******************************************
   35110             :      // * Memory Pool / New / Delete
   35111             :      // ******************************************
   35112             : 
   35113             :      public:
   35114             :           /// \private
   35115             :           static const unsigned pool_size; //
   35116             :           /// \private
   35117             :           static std::vector<unsigned char *> pools; //
   35118             :           /// \private
   35119             :           static SgBidirectionalGraph * next_node; // 
   35120             : 
   35121             :           /// \private
   35122             :           static unsigned long initializeStorageClassArray(SgBidirectionalGraphStorageClass *); //
   35123             : 
   35124             :           /// \private
   35125             :           static void clearMemoryPool(); //
   35126             :           static void deleteMemoryPool(); //
   35127             : 
   35128             :           /// \private
   35129             :           static void extendMemoryPoolForFileIO(); //
   35130             : 
   35131             :           /// \private
   35132             :           static SgBidirectionalGraph * getPointerFromGlobalIndex(unsigned long); //
   35133             :           /// \private
   35134             :           static SgBidirectionalGraph * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   35135             : 
   35136             :           /// \private
   35137             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   35138             :           /// \private
   35139             :           static void resetValidFreepointers(); //
   35140             :           /// \private
   35141             :           static unsigned long getNumberOfLastValidPointer(); //
   35142             : 
   35143             : 
   35144             : #if defined(INLINE_FUNCTIONS)
   35145             :       /*! \brief returns pointer to newly allocated IR node */
   35146             :           inline void *operator new (size_t size);
   35147             : #else
   35148             :       /*! \brief returns pointer to newly allocated IR node */
   35149             :           void *operator new (size_t size);
   35150             : #endif
   35151             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   35152             :           void operator delete (void* pointer, size_t size);
   35153             : 
   35154             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   35155           0 :           void operator delete (void* pointer)
   35156             :              {
   35157             :             // This is the generated delete operator...
   35158           0 :                SgBidirectionalGraph::operator delete (pointer,sizeof(SgBidirectionalGraph));
   35159             :              }
   35160             : 
   35161             :       /*! \brief Returns the total number of IR nodes of this type */
   35162             :           static size_t numberOfNodes();
   35163             : 
   35164             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   35165             :           static size_t memoryUsage();
   35166             : 
   35167             :       // End of scope which started in IR nodes specific code 
   35168             :       /* */
   35169             : 
   35170             :       /* name Internal Functions
   35171             :           \brief Internal functions ... incomplete-documentation
   35172             : 
   35173             :           These functions have been made public as part of the design, but they are suggested for internal use 
   35174             :           or by particularly knowledgeable users for specialized tools or applications.
   35175             : 
   35176             :           \internal We could not make these private because they are required by user for special purposes. And 
   35177             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   35178             :          
   35179             :        */
   35180             : 
   35181             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   35182             :        // overridden in every class by *generated* implementation
   35183             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   35184             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   35185             :        // MS: 06/28/02 container of names of variables or container indices 
   35186             :        // used used in the traversal to access AST successor nodes
   35187             :        // overridden in every class by *generated* implementation
   35188             :       /*! \brief container of names of variables or container indices used used in the traversal
   35189             :           to access AST successor nodes overridden in every class by *generated* implementation */
   35190             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   35191             : 
   35192             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   35193             :        // than all the vector copies. The implementation for these functions is generated for each class.
   35194             :       /*! \brief return number of children in the traversal successor list */
   35195             :           virtual size_t get_numberOfTraversalSuccessors() override;
   35196             :       /*! \brief index-based access to traversal successors by index number */
   35197             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   35198             :       /*! \brief index-based access to traversal successors by child node */
   35199             :           virtual size_t get_childIndex(SgNode *child) override;
   35200             : 
   35201             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   35202             :        // MS: 08/16/2002 method for generating RTI information
   35203             :       /*! \brief return C++ Runtime-Time-Information */
   35204             :           virtual RTIReturnType roseRTI() override;
   35205             : #endif
   35206             :       /* */
   35207             : 
   35208             : 
   35209             : 
   35210             :       /* name Deprecated Functions
   35211             :           \brief Deprecated functions ... incomplete-documentation
   35212             : 
   35213             :           These functions have been deprecated from use.
   35214             :        */
   35215             :       /* */
   35216             : 
   35217             :       /*! returns a C style string (char*) representing the class name */
   35218             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   35219             : 
   35220             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   35221             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   35222             : #if 0
   35223             :       /*! returns old style Sage II enum values */
   35224             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   35225             :       /*! returns old style Sage II enum values */
   35226             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   35227             : #endif
   35228             :       /* */
   35229             : 
   35230             : 
   35231             : 
   35232             : 
   35233             :      public:
   35234             :       /* name Traversal Support Functions
   35235             :           \brief Traversal support functions ... incomplete-documentation
   35236             : 
   35237             :           These functions have been made public as part of the design, but they are suggested for internal use 
   35238             :           or by particularly knowledgable users for specialized tools or applications.
   35239             :        */
   35240             :       /* */
   35241             : 
   35242             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   35243             :        // (inferior to ROSE traversal mechanism, experimental).
   35244             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   35245             :        */
   35246             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   35247             : 
   35248             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   35249             :       /*! \brief support for the classic visitor pattern done in GoF */
   35250             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   35251             : 
   35252             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   35253             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   35254             :        */
   35255             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   35256             : 
   35257             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   35258             :        */
   35259             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   35260             : 
   35261             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   35262             :        // This traversal helps support internal tools that call static member functions.
   35263             :        // note: this function operates on the memory pools.
   35264             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   35265             :        */
   35266             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   35267             :       /* */
   35268             : 
   35269             : 
   35270             :      public:
   35271             :       /* name Memory Allocation Functions
   35272             :           \brief Memory allocations functions ... incomplete-documentation
   35273             : 
   35274             :           These functions have been made public as part of the design, but they are suggested for internal use 
   35275             :           or by particularly knowledgable users for specialized tools or applications.
   35276             :        */
   35277             :       /* */
   35278             : 
   35279             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   35280             : 
   35281             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   35282             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   35283             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   35284             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   35285             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   35286             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   35287             :           being used with the AST File I/O mechanism.
   35288             :        */
   35289             :           virtual bool isInMemoryPool() override;
   35290             : 
   35291             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   35292             : 
   35293             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   35294             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   35295             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   35296             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   35297             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   35298             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   35299             :           being used with the AST File I/O mechanism.
   35300             :        */
   35301             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   35302             : 
   35303             :       // DQ (4/30/2006): Modified to be a const function.
   35304             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   35305             : 
   35306             :           This functions is part of general support for many possible tools to operate 
   35307             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   35308             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   35309             :           less than the set of pointers used by the AST file I/O. This is part of
   35310             :           work implemented by Andreas, and support tools such as the AST graph generation.
   35311             : 
   35312             :           \warning This function can return unexpected data members and thus the 
   35313             :                    order and the number of elements is unpredicable and subject 
   35314             :                    to change.
   35315             : 
   35316             :           \returns STL vector of pairs of SgNode* and strings
   35317             :        */
   35318             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   35319             : 
   35320             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   35321             : 
   35322             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   35323             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   35324             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   35325             : 
   35326             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   35327             :                    and subject to change.
   35328             :        */
   35329             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   35330             : 
   35331             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   35332             : 
   35333             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   35334             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   35335             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   35336             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   35337             : 
   35338             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   35339             : 
   35340             :           \returns long
   35341             :        */
   35342             :           virtual long getChildIndex( SgNode* childNode ) const override;
   35343             : 
   35344             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   35345             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   35346             :       /* \brief Constructor for use by AST File I/O Mechanism
   35347             : 
   35348             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   35349             :           which obtained via fast binary file I/O from disk.
   35350             :        */
   35351             :        // SgBidirectionalGraph( SgBidirectionalGraphStorageClass& source );
   35352             : 
   35353             : 
   35354             : 
   35355             : 
   35356             : 
   35357             :  // JH (10/24/2005): methods added to support the ast file IO
   35358             :     private:
   35359             : 
   35360             :       /* name AST Memory Allocation Support Functions
   35361             :           \brief Memory allocations support....
   35362             : 
   35363             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   35364             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   35365             :           and support the AST File I/O Mechanism.
   35366             :        */
   35367             :       /* */
   35368             : 
   35369             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   35370             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   35371             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   35372             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   35373             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   35374             :           a correspinding one in the AST_FILE_IO class!
   35375             :        */
   35376             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   35377             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   35378             :       /* \brief Typedef used for low level memory access.
   35379             :        */
   35380             :        // typedef unsigned char* TestType;
   35381             : 
   35382             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   35383             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   35384             :       /* \brief Typedef used to hold memory addresses as values.
   35385             :        */
   35386             :        // typedef unsigned long  AddressType;
   35387             : 
   35388             : 
   35389             : 
   35390             :        // necessary, to have direct access to the p_freepointer and the private methods !
   35391             :       /*! \brief friend class declaration to support AST File I/O */
   35392             :           friend class AST_FILE_IO;
   35393             : 
   35394             :       /*! \brief friend class declaration to support AST File I/O */
   35395             :           friend class SgBidirectionalGraphStorageClass;
   35396             : 
   35397             :       /*! \brief friend class declaration to support AST File I/O */
   35398             :           friend class AstSpecificDataManagingClass;
   35399             : 
   35400             :       /*! \brief friend class declaration to support AST File I/O */
   35401             :           friend class AstSpecificDataManagingClassStorageClass;
   35402             :     public:
   35403             :       /*! \brief IR node constructor to support AST File I/O */
   35404             :           SgBidirectionalGraph( const SgBidirectionalGraphStorageClass& source );
   35405             : 
   35406             :  // private: // JJW hack
   35407             :        /*
   35408             :           name AST Memory Allocation Support Variables
   35409             :           Memory allocations support variables 
   35410             : 
   35411             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   35412             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   35413             :           and support the AST File I/O Mechanism.
   35414             :        */
   35415             :       /* */
   35416             : 
   35417             :     public:
   35418             : 
   35419             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   35420             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   35421             :       // virtual SgNode* addRegExpAttribute();
   35422             :       /*! \brief Support for AST matching using regular expression.
   35423             : 
   35424             :           This support is incomplete and the subject of current research to define 
   35425             :           RegEx trees to support inexact matching.
   35426             :        */
   35427             :           SgBidirectionalGraph* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   35428             : 
   35429             : // *** COMMON CODE SECTION ENDS HERE ***
   35430             : 
   35431             : 
   35432             : // End of memberFunctionString
   35433             : // Start of memberFunctionString
   35434             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   35435             : 
   35436             :      // the generated cast function
   35437             :      // friend ROSE_DLL_API SgBidirectionalGraph* isSgBidirectionalGraph ( SgNode* s );
   35438             : 
   35439             :           typedef SgIncidenceDirectedGraph base_node_type;
   35440             : 
   35441             : 
   35442             : // End of memberFunctionString
   35443             : 
   35444             : 
   35445             :      public: 
   35446             :          virtual ~SgBidirectionalGraph();
   35447             : 
   35448             : 
   35449             :      public: 
   35450             :          SgBidirectionalGraph(std::string name = ""); 
   35451             : 
   35452             :     protected:
   35453             : 
   35454             :     friend struct Rose::Traits::generated::describe_node_t<SgBidirectionalGraph>;
   35455             : 
   35456             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35457             : 
   35458             : 
   35459             :    };
   35460             : #endif
   35461             : 
   35462             : // postdeclarations for SgBidirectionalGraph
   35463             : 
   35464             : /* #line 35465 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35465             : 
   35466             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   35467             : 
   35468             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35469             : 
   35470             : 
   35471             : /* #line 35472 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35472             : 
   35473             : 
   35474             : 
   35475             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35476             : 
   35477             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   35478             : //      This code is automatically generated for each 
   35479             : //      terminal and non-terminal within the defined 
   35480             : //      grammar.  There is a simple way to change the 
   35481             : //      code to fix bugs etc.  See the ROSE README file
   35482             : //      for directions.
   35483             : 
   35484             : // tps: (02/22/2010): Adding DLL export requirements
   35485             : #include "rosedll.h"
   35486             : 
   35487             : // predeclarations for SgStringKeyedBidirectionalGraph
   35488             : 
   35489             : /* #line 35490 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35490             : 
   35491             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   35492             : 
   35493             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35494             : 
   35495             : #if 1
   35496             : // Class Definition for SgStringKeyedBidirectionalGraph
   35497             : class ROSE_DLL_API SgStringKeyedBidirectionalGraph  : public SgBidirectionalGraph
   35498             :    {
   35499             :      public:
   35500             : 
   35501             : 
   35502             : /* #line 35503 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35503             : 
   35504             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   35505             : // Start of memberFunctionString
   35506             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   35507             : 
   35508             : // *** COMMON CODE SECTION BEGINS HERE ***
   35509             : 
   35510             :     public:
   35511             : 
   35512             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   35513             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   35514             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   35515             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   35516             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   35517             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   35518             : 
   35519             :       /*! \brief returns a string representing the class name */
   35520             :           virtual std::string class_name() const override;
   35521             : 
   35522             :       /*! \brief returns new style SageIII enum values */
   35523             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   35524             : 
   35525             :       /*! \brief static variant value */
   35526             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   35527             :        // static const VariantT static_variant = V_SgStringKeyedBidirectionalGraph;
   35528             :           enum { static_variant = V_SgStringKeyedBidirectionalGraph };
   35529             : 
   35530             :        /* the generated cast function */
   35531             :       /*! \brief Casts pointer from base class to derived class */
   35532             :           ROSE_DLL_API friend       SgStringKeyedBidirectionalGraph* isSgStringKeyedBidirectionalGraph(       SgNode * s );
   35533             : 
   35534             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   35535             :           ROSE_DLL_API friend const SgStringKeyedBidirectionalGraph* isSgStringKeyedBidirectionalGraph( const SgNode * s );
   35536             : 
   35537             :      // ******************************************
   35538             :      // * Memory Pool / New / Delete
   35539             :      // ******************************************
   35540             : 
   35541             :      public:
   35542             :           /// \private
   35543             :           static const unsigned pool_size; //
   35544             :           /// \private
   35545             :           static std::vector<unsigned char *> pools; //
   35546             :           /// \private
   35547             :           static SgStringKeyedBidirectionalGraph * next_node; // 
   35548             : 
   35549             :           /// \private
   35550             :           static unsigned long initializeStorageClassArray(SgStringKeyedBidirectionalGraphStorageClass *); //
   35551             : 
   35552             :           /// \private
   35553             :           static void clearMemoryPool(); //
   35554             :           static void deleteMemoryPool(); //
   35555             : 
   35556             :           /// \private
   35557             :           static void extendMemoryPoolForFileIO(); //
   35558             : 
   35559             :           /// \private
   35560             :           static SgStringKeyedBidirectionalGraph * getPointerFromGlobalIndex(unsigned long); //
   35561             :           /// \private
   35562             :           static SgStringKeyedBidirectionalGraph * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   35563             : 
   35564             :           /// \private
   35565             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   35566             :           /// \private
   35567             :           static void resetValidFreepointers(); //
   35568             :           /// \private
   35569             :           static unsigned long getNumberOfLastValidPointer(); //
   35570             : 
   35571             : 
   35572             : #if defined(INLINE_FUNCTIONS)
   35573             :       /*! \brief returns pointer to newly allocated IR node */
   35574             :           inline void *operator new (size_t size);
   35575             : #else
   35576             :       /*! \brief returns pointer to newly allocated IR node */
   35577             :           void *operator new (size_t size);
   35578             : #endif
   35579             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   35580             :           void operator delete (void* pointer, size_t size);
   35581             : 
   35582             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   35583           0 :           void operator delete (void* pointer)
   35584             :              {
   35585             :             // This is the generated delete operator...
   35586           0 :                SgStringKeyedBidirectionalGraph::operator delete (pointer,sizeof(SgStringKeyedBidirectionalGraph));
   35587             :              }
   35588             : 
   35589             :       /*! \brief Returns the total number of IR nodes of this type */
   35590             :           static size_t numberOfNodes();
   35591             : 
   35592             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   35593             :           static size_t memoryUsage();
   35594             : 
   35595             :       // End of scope which started in IR nodes specific code 
   35596             :       /* */
   35597             : 
   35598             :       /* name Internal Functions
   35599             :           \brief Internal functions ... incomplete-documentation
   35600             : 
   35601             :           These functions have been made public as part of the design, but they are suggested for internal use 
   35602             :           or by particularly knowledgeable users for specialized tools or applications.
   35603             : 
   35604             :           \internal We could not make these private because they are required by user for special purposes. And 
   35605             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   35606             :          
   35607             :        */
   35608             : 
   35609             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   35610             :        // overridden in every class by *generated* implementation
   35611             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   35612             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   35613             :        // MS: 06/28/02 container of names of variables or container indices 
   35614             :        // used used in the traversal to access AST successor nodes
   35615             :        // overridden in every class by *generated* implementation
   35616             :       /*! \brief container of names of variables or container indices used used in the traversal
   35617             :           to access AST successor nodes overridden in every class by *generated* implementation */
   35618             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   35619             : 
   35620             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   35621             :        // than all the vector copies. The implementation for these functions is generated for each class.
   35622             :       /*! \brief return number of children in the traversal successor list */
   35623             :           virtual size_t get_numberOfTraversalSuccessors() override;
   35624             :       /*! \brief index-based access to traversal successors by index number */
   35625             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   35626             :       /*! \brief index-based access to traversal successors by child node */
   35627             :           virtual size_t get_childIndex(SgNode *child) override;
   35628             : 
   35629             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   35630             :        // MS: 08/16/2002 method for generating RTI information
   35631             :       /*! \brief return C++ Runtime-Time-Information */
   35632             :           virtual RTIReturnType roseRTI() override;
   35633             : #endif
   35634             :       /* */
   35635             : 
   35636             : 
   35637             : 
   35638             :       /* name Deprecated Functions
   35639             :           \brief Deprecated functions ... incomplete-documentation
   35640             : 
   35641             :           These functions have been deprecated from use.
   35642             :        */
   35643             :       /* */
   35644             : 
   35645             :       /*! returns a C style string (char*) representing the class name */
   35646             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   35647             : 
   35648             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   35649             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   35650             : #if 0
   35651             :       /*! returns old style Sage II enum values */
   35652             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   35653             :       /*! returns old style Sage II enum values */
   35654             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   35655             : #endif
   35656             :       /* */
   35657             : 
   35658             : 
   35659             : 
   35660             : 
   35661             :      public:
   35662             :       /* name Traversal Support Functions
   35663             :           \brief Traversal support functions ... incomplete-documentation
   35664             : 
   35665             :           These functions have been made public as part of the design, but they are suggested for internal use 
   35666             :           or by particularly knowledgable users for specialized tools or applications.
   35667             :        */
   35668             :       /* */
   35669             : 
   35670             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   35671             :        // (inferior to ROSE traversal mechanism, experimental).
   35672             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   35673             :        */
   35674             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   35675             : 
   35676             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   35677             :       /*! \brief support for the classic visitor pattern done in GoF */
   35678             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   35679             : 
   35680             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   35681             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   35682             :        */
   35683             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   35684             : 
   35685             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   35686             :        */
   35687             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   35688             : 
   35689             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   35690             :        // This traversal helps support internal tools that call static member functions.
   35691             :        // note: this function operates on the memory pools.
   35692             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   35693             :        */
   35694             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   35695             :       /* */
   35696             : 
   35697             : 
   35698             :      public:
   35699             :       /* name Memory Allocation Functions
   35700             :           \brief Memory allocations functions ... incomplete-documentation
   35701             : 
   35702             :           These functions have been made public as part of the design, but they are suggested for internal use 
   35703             :           or by particularly knowledgable users for specialized tools or applications.
   35704             :        */
   35705             :       /* */
   35706             : 
   35707             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   35708             : 
   35709             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   35710             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   35711             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   35712             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   35713             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   35714             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   35715             :           being used with the AST File I/O mechanism.
   35716             :        */
   35717             :           virtual bool isInMemoryPool() override;
   35718             : 
   35719             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   35720             : 
   35721             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   35722             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   35723             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   35724             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   35725             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   35726             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   35727             :           being used with the AST File I/O mechanism.
   35728             :        */
   35729             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   35730             : 
   35731             :       // DQ (4/30/2006): Modified to be a const function.
   35732             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   35733             : 
   35734             :           This functions is part of general support for many possible tools to operate 
   35735             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   35736             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   35737             :           less than the set of pointers used by the AST file I/O. This is part of
   35738             :           work implemented by Andreas, and support tools such as the AST graph generation.
   35739             : 
   35740             :           \warning This function can return unexpected data members and thus the 
   35741             :                    order and the number of elements is unpredicable and subject 
   35742             :                    to change.
   35743             : 
   35744             :           \returns STL vector of pairs of SgNode* and strings
   35745             :        */
   35746             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   35747             : 
   35748             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   35749             : 
   35750             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   35751             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   35752             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   35753             : 
   35754             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   35755             :                    and subject to change.
   35756             :        */
   35757             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   35758             : 
   35759             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   35760             : 
   35761             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   35762             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   35763             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   35764             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   35765             : 
   35766             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   35767             : 
   35768             :           \returns long
   35769             :        */
   35770             :           virtual long getChildIndex( SgNode* childNode ) const override;
   35771             : 
   35772             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   35773             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   35774             :       /* \brief Constructor for use by AST File I/O Mechanism
   35775             : 
   35776             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   35777             :           which obtained via fast binary file I/O from disk.
   35778             :        */
   35779             :        // SgStringKeyedBidirectionalGraph( SgStringKeyedBidirectionalGraphStorageClass& source );
   35780             : 
   35781             : 
   35782             : 
   35783             : 
   35784             : 
   35785             :  // JH (10/24/2005): methods added to support the ast file IO
   35786             :     private:
   35787             : 
   35788             :       /* name AST Memory Allocation Support Functions
   35789             :           \brief Memory allocations support....
   35790             : 
   35791             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   35792             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   35793             :           and support the AST File I/O Mechanism.
   35794             :        */
   35795             :       /* */
   35796             : 
   35797             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   35798             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   35799             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   35800             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   35801             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   35802             :           a correspinding one in the AST_FILE_IO class!
   35803             :        */
   35804             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   35805             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   35806             :       /* \brief Typedef used for low level memory access.
   35807             :        */
   35808             :        // typedef unsigned char* TestType;
   35809             : 
   35810             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   35811             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   35812             :       /* \brief Typedef used to hold memory addresses as values.
   35813             :        */
   35814             :        // typedef unsigned long  AddressType;
   35815             : 
   35816             : 
   35817             : 
   35818             :        // necessary, to have direct access to the p_freepointer and the private methods !
   35819             :       /*! \brief friend class declaration to support AST File I/O */
   35820             :           friend class AST_FILE_IO;
   35821             : 
   35822             :       /*! \brief friend class declaration to support AST File I/O */
   35823             :           friend class SgStringKeyedBidirectionalGraphStorageClass;
   35824             : 
   35825             :       /*! \brief friend class declaration to support AST File I/O */
   35826             :           friend class AstSpecificDataManagingClass;
   35827             : 
   35828             :       /*! \brief friend class declaration to support AST File I/O */
   35829             :           friend class AstSpecificDataManagingClassStorageClass;
   35830             :     public:
   35831             :       /*! \brief IR node constructor to support AST File I/O */
   35832             :           SgStringKeyedBidirectionalGraph( const SgStringKeyedBidirectionalGraphStorageClass& source );
   35833             : 
   35834             :  // private: // JJW hack
   35835             :        /*
   35836             :           name AST Memory Allocation Support Variables
   35837             :           Memory allocations support variables 
   35838             : 
   35839             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   35840             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   35841             :           and support the AST File I/O Mechanism.
   35842             :        */
   35843             :       /* */
   35844             : 
   35845             :     public:
   35846             : 
   35847             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   35848             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   35849             :       // virtual SgNode* addRegExpAttribute();
   35850             :       /*! \brief Support for AST matching using regular expression.
   35851             : 
   35852             :           This support is incomplete and the subject of current research to define 
   35853             :           RegEx trees to support inexact matching.
   35854             :        */
   35855             :           SgStringKeyedBidirectionalGraph* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   35856             : 
   35857             : // *** COMMON CODE SECTION ENDS HERE ***
   35858             : 
   35859             : 
   35860             : // End of memberFunctionString
   35861             : // Start of memberFunctionString
   35862             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   35863             : 
   35864             :      // the generated cast function
   35865             :      // friend ROSE_DLL_API SgStringKeyedBidirectionalGraph* isSgStringKeyedBidirectionalGraph ( SgNode* s );
   35866             : 
   35867             :           typedef SgBidirectionalGraph base_node_type;
   35868             : 
   35869             : 
   35870             : // End of memberFunctionString
   35871             : 
   35872             : 
   35873             :      public: 
   35874             :          virtual ~SgStringKeyedBidirectionalGraph();
   35875             : 
   35876             : 
   35877             :      public: 
   35878             :          SgStringKeyedBidirectionalGraph(std::string name = ""); 
   35879             : 
   35880             :     protected:
   35881             : 
   35882             :     friend struct Rose::Traits::generated::describe_node_t<SgStringKeyedBidirectionalGraph>;
   35883             : 
   35884             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35885             : 
   35886             : 
   35887             :    };
   35888             : #endif
   35889             : 
   35890             : // postdeclarations for SgStringKeyedBidirectionalGraph
   35891             : 
   35892             : /* #line 35893 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35893             : 
   35894             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   35895             : 
   35896             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35897             : 
   35898             : 
   35899             : /* #line 35900 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35900             : 
   35901             : 
   35902             : 
   35903             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35904             : 
   35905             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   35906             : //      This code is automatically generated for each 
   35907             : //      terminal and non-terminal within the defined 
   35908             : //      grammar.  There is a simple way to change the 
   35909             : //      code to fix bugs etc.  See the ROSE README file
   35910             : //      for directions.
   35911             : 
   35912             : // tps: (02/22/2010): Adding DLL export requirements
   35913             : #include "rosedll.h"
   35914             : 
   35915             : // predeclarations for SgIntKeyedBidirectionalGraph
   35916             : 
   35917             : /* #line 35918 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35918             : 
   35919             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   35920             : 
   35921             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   35922             : 
   35923             : #if 1
   35924             : // Class Definition for SgIntKeyedBidirectionalGraph
   35925             : class ROSE_DLL_API SgIntKeyedBidirectionalGraph  : public SgBidirectionalGraph
   35926             :    {
   35927             :      public:
   35928             : 
   35929             : 
   35930             : /* #line 35931 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   35931             : 
   35932             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   35933             : // Start of memberFunctionString
   35934             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   35935             : 
   35936             : // *** COMMON CODE SECTION BEGINS HERE ***
   35937             : 
   35938             :     public:
   35939             : 
   35940             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   35941             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   35942             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   35943             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   35944             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   35945             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   35946             : 
   35947             :       /*! \brief returns a string representing the class name */
   35948             :           virtual std::string class_name() const override;
   35949             : 
   35950             :       /*! \brief returns new style SageIII enum values */
   35951             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   35952             : 
   35953             :       /*! \brief static variant value */
   35954             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   35955             :        // static const VariantT static_variant = V_SgIntKeyedBidirectionalGraph;
   35956             :           enum { static_variant = V_SgIntKeyedBidirectionalGraph };
   35957             : 
   35958             :        /* the generated cast function */
   35959             :       /*! \brief Casts pointer from base class to derived class */
   35960             :           ROSE_DLL_API friend       SgIntKeyedBidirectionalGraph* isSgIntKeyedBidirectionalGraph(       SgNode * s );
   35961             : 
   35962             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   35963             :           ROSE_DLL_API friend const SgIntKeyedBidirectionalGraph* isSgIntKeyedBidirectionalGraph( const SgNode * s );
   35964             : 
   35965             :      // ******************************************
   35966             :      // * Memory Pool / New / Delete
   35967             :      // ******************************************
   35968             : 
   35969             :      public:
   35970             :           /// \private
   35971             :           static const unsigned pool_size; //
   35972             :           /// \private
   35973             :           static std::vector<unsigned char *> pools; //
   35974             :           /// \private
   35975             :           static SgIntKeyedBidirectionalGraph * next_node; // 
   35976             : 
   35977             :           /// \private
   35978             :           static unsigned long initializeStorageClassArray(SgIntKeyedBidirectionalGraphStorageClass *); //
   35979             : 
   35980             :           /// \private
   35981             :           static void clearMemoryPool(); //
   35982             :           static void deleteMemoryPool(); //
   35983             : 
   35984             :           /// \private
   35985             :           static void extendMemoryPoolForFileIO(); //
   35986             : 
   35987             :           /// \private
   35988             :           static SgIntKeyedBidirectionalGraph * getPointerFromGlobalIndex(unsigned long); //
   35989             :           /// \private
   35990             :           static SgIntKeyedBidirectionalGraph * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   35991             : 
   35992             :           /// \private
   35993             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   35994             :           /// \private
   35995             :           static void resetValidFreepointers(); //
   35996             :           /// \private
   35997             :           static unsigned long getNumberOfLastValidPointer(); //
   35998             : 
   35999             : 
   36000             : #if defined(INLINE_FUNCTIONS)
   36001             :       /*! \brief returns pointer to newly allocated IR node */
   36002             :           inline void *operator new (size_t size);
   36003             : #else
   36004             :       /*! \brief returns pointer to newly allocated IR node */
   36005             :           void *operator new (size_t size);
   36006             : #endif
   36007             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   36008             :           void operator delete (void* pointer, size_t size);
   36009             : 
   36010             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   36011           0 :           void operator delete (void* pointer)
   36012             :              {
   36013             :             // This is the generated delete operator...
   36014           0 :                SgIntKeyedBidirectionalGraph::operator delete (pointer,sizeof(SgIntKeyedBidirectionalGraph));
   36015             :              }
   36016             : 
   36017             :       /*! \brief Returns the total number of IR nodes of this type */
   36018             :           static size_t numberOfNodes();
   36019             : 
   36020             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   36021             :           static size_t memoryUsage();
   36022             : 
   36023             :       // End of scope which started in IR nodes specific code 
   36024             :       /* */
   36025             : 
   36026             :       /* name Internal Functions
   36027             :           \brief Internal functions ... incomplete-documentation
   36028             : 
   36029             :           These functions have been made public as part of the design, but they are suggested for internal use 
   36030             :           or by particularly knowledgeable users for specialized tools or applications.
   36031             : 
   36032             :           \internal We could not make these private because they are required by user for special purposes. And 
   36033             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   36034             :          
   36035             :        */
   36036             : 
   36037             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   36038             :        // overridden in every class by *generated* implementation
   36039             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   36040             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   36041             :        // MS: 06/28/02 container of names of variables or container indices 
   36042             :        // used used in the traversal to access AST successor nodes
   36043             :        // overridden in every class by *generated* implementation
   36044             :       /*! \brief container of names of variables or container indices used used in the traversal
   36045             :           to access AST successor nodes overridden in every class by *generated* implementation */
   36046             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   36047             : 
   36048             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   36049             :        // than all the vector copies. The implementation for these functions is generated for each class.
   36050             :       /*! \brief return number of children in the traversal successor list */
   36051             :           virtual size_t get_numberOfTraversalSuccessors() override;
   36052             :       /*! \brief index-based access to traversal successors by index number */
   36053             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   36054             :       /*! \brief index-based access to traversal successors by child node */
   36055             :           virtual size_t get_childIndex(SgNode *child) override;
   36056             : 
   36057             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   36058             :        // MS: 08/16/2002 method for generating RTI information
   36059             :       /*! \brief return C++ Runtime-Time-Information */
   36060             :           virtual RTIReturnType roseRTI() override;
   36061             : #endif
   36062             :       /* */
   36063             : 
   36064             : 
   36065             : 
   36066             :       /* name Deprecated Functions
   36067             :           \brief Deprecated functions ... incomplete-documentation
   36068             : 
   36069             :           These functions have been deprecated from use.
   36070             :        */
   36071             :       /* */
   36072             : 
   36073             :       /*! returns a C style string (char*) representing the class name */
   36074             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   36075             : 
   36076             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   36077             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   36078             : #if 0
   36079             :       /*! returns old style Sage II enum values */
   36080             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   36081             :       /*! returns old style Sage II enum values */
   36082             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   36083             : #endif
   36084             :       /* */
   36085             : 
   36086             : 
   36087             : 
   36088             : 
   36089             :      public:
   36090             :       /* name Traversal Support Functions
   36091             :           \brief Traversal support functions ... incomplete-documentation
   36092             : 
   36093             :           These functions have been made public as part of the design, but they are suggested for internal use 
   36094             :           or by particularly knowledgable users for specialized tools or applications.
   36095             :        */
   36096             :       /* */
   36097             : 
   36098             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   36099             :        // (inferior to ROSE traversal mechanism, experimental).
   36100             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   36101             :        */
   36102             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   36103             : 
   36104             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   36105             :       /*! \brief support for the classic visitor pattern done in GoF */
   36106             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   36107             : 
   36108             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   36109             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   36110             :        */
   36111             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   36112             : 
   36113             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   36114             :        */
   36115             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   36116             : 
   36117             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   36118             :        // This traversal helps support internal tools that call static member functions.
   36119             :        // note: this function operates on the memory pools.
   36120             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   36121             :        */
   36122             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   36123             :       /* */
   36124             : 
   36125             : 
   36126             :      public:
   36127             :       /* name Memory Allocation Functions
   36128             :           \brief Memory allocations functions ... incomplete-documentation
   36129             : 
   36130             :           These functions have been made public as part of the design, but they are suggested for internal use 
   36131             :           or by particularly knowledgable users for specialized tools or applications.
   36132             :        */
   36133             :       /* */
   36134             : 
   36135             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   36136             : 
   36137             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   36138             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   36139             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   36140             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   36141             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   36142             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   36143             :           being used with the AST File I/O mechanism.
   36144             :        */
   36145             :           virtual bool isInMemoryPool() override;
   36146             : 
   36147             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   36148             : 
   36149             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   36150             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   36151             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   36152             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   36153             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   36154             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   36155             :           being used with the AST File I/O mechanism.
   36156             :        */
   36157             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   36158             : 
   36159             :       // DQ (4/30/2006): Modified to be a const function.
   36160             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   36161             : 
   36162             :           This functions is part of general support for many possible tools to operate 
   36163             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   36164             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   36165             :           less than the set of pointers used by the AST file I/O. This is part of
   36166             :           work implemented by Andreas, and support tools such as the AST graph generation.
   36167             : 
   36168             :           \warning This function can return unexpected data members and thus the 
   36169             :                    order and the number of elements is unpredicable and subject 
   36170             :                    to change.
   36171             : 
   36172             :           \returns STL vector of pairs of SgNode* and strings
   36173             :        */
   36174             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   36175             : 
   36176             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   36177             : 
   36178             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   36179             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   36180             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   36181             : 
   36182             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   36183             :                    and subject to change.
   36184             :        */
   36185             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   36186             : 
   36187             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   36188             : 
   36189             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   36190             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   36191             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   36192             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   36193             : 
   36194             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   36195             : 
   36196             :           \returns long
   36197             :        */
   36198             :           virtual long getChildIndex( SgNode* childNode ) const override;
   36199             : 
   36200             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   36201             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   36202             :       /* \brief Constructor for use by AST File I/O Mechanism
   36203             : 
   36204             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   36205             :           which obtained via fast binary file I/O from disk.
   36206             :        */
   36207             :        // SgIntKeyedBidirectionalGraph( SgIntKeyedBidirectionalGraphStorageClass& source );
   36208             : 
   36209             : 
   36210             : 
   36211             : 
   36212             : 
   36213             :  // JH (10/24/2005): methods added to support the ast file IO
   36214             :     private:
   36215             : 
   36216             :       /* name AST Memory Allocation Support Functions
   36217             :           \brief Memory allocations support....
   36218             : 
   36219             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   36220             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   36221             :           and support the AST File I/O Mechanism.
   36222             :        */
   36223             :       /* */
   36224             : 
   36225             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   36226             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   36227             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   36228             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   36229             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   36230             :           a correspinding one in the AST_FILE_IO class!
   36231             :        */
   36232             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   36233             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   36234             :       /* \brief Typedef used for low level memory access.
   36235             :        */
   36236             :        // typedef unsigned char* TestType;
   36237             : 
   36238             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   36239             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   36240             :       /* \brief Typedef used to hold memory addresses as values.
   36241             :        */
   36242             :        // typedef unsigned long  AddressType;
   36243             : 
   36244             : 
   36245             : 
   36246             :        // necessary, to have direct access to the p_freepointer and the private methods !
   36247             :       /*! \brief friend class declaration to support AST File I/O */
   36248             :           friend class AST_FILE_IO;
   36249             : 
   36250             :       /*! \brief friend class declaration to support AST File I/O */
   36251             :           friend class SgIntKeyedBidirectionalGraphStorageClass;
   36252             : 
   36253             :       /*! \brief friend class declaration to support AST File I/O */
   36254             :           friend class AstSpecificDataManagingClass;
   36255             : 
   36256             :       /*! \brief friend class declaration to support AST File I/O */
   36257             :           friend class AstSpecificDataManagingClassStorageClass;
   36258             :     public:
   36259             :       /*! \brief IR node constructor to support AST File I/O */
   36260             :           SgIntKeyedBidirectionalGraph( const SgIntKeyedBidirectionalGraphStorageClass& source );
   36261             : 
   36262             :  // private: // JJW hack
   36263             :        /*
   36264             :           name AST Memory Allocation Support Variables
   36265             :           Memory allocations support variables 
   36266             : 
   36267             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   36268             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   36269             :           and support the AST File I/O Mechanism.
   36270             :        */
   36271             :       /* */
   36272             : 
   36273             :     public:
   36274             : 
   36275             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   36276             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   36277             :       // virtual SgNode* addRegExpAttribute();
   36278             :       /*! \brief Support for AST matching using regular expression.
   36279             : 
   36280             :           This support is incomplete and the subject of current research to define 
   36281             :           RegEx trees to support inexact matching.
   36282             :        */
   36283             :           SgIntKeyedBidirectionalGraph* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   36284             : 
   36285             : // *** COMMON CODE SECTION ENDS HERE ***
   36286             : 
   36287             : 
   36288             : // End of memberFunctionString
   36289             : // Start of memberFunctionString
   36290             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   36291             : 
   36292             :      // the generated cast function
   36293             :      // friend ROSE_DLL_API SgIntKeyedBidirectionalGraph* isSgIntKeyedBidirectionalGraph ( SgNode* s );
   36294             : 
   36295             :           typedef SgBidirectionalGraph base_node_type;
   36296             : 
   36297             : 
   36298             : // End of memberFunctionString
   36299             : 
   36300             : 
   36301             :      public: 
   36302             :          virtual ~SgIntKeyedBidirectionalGraph();
   36303             : 
   36304             : 
   36305             :      public: 
   36306             :          SgIntKeyedBidirectionalGraph(std::string name = ""); 
   36307             : 
   36308             :     protected:
   36309             : 
   36310             :     friend struct Rose::Traits::generated::describe_node_t<SgIntKeyedBidirectionalGraph>;
   36311             : 
   36312             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36313             : 
   36314             : 
   36315             :    };
   36316             : #endif
   36317             : 
   36318             : // postdeclarations for SgIntKeyedBidirectionalGraph
   36319             : 
   36320             : /* #line 36321 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36321             : 
   36322             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   36323             : 
   36324             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36325             : 
   36326             : 
   36327             : /* #line 36328 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36328             : 
   36329             : 
   36330             : 
   36331             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36332             : 
   36333             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   36334             : //      This code is automatically generated for each 
   36335             : //      terminal and non-terminal within the defined 
   36336             : //      grammar.  There is a simple way to change the 
   36337             : //      code to fix bugs etc.  See the ROSE README file
   36338             : //      for directions.
   36339             : 
   36340             : // tps: (02/22/2010): Adding DLL export requirements
   36341             : #include "rosedll.h"
   36342             : 
   36343             : // predeclarations for SgIncidenceUndirectedGraph
   36344             : 
   36345             : /* #line 36346 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36346             : 
   36347             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   36348             : 
   36349             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36350             : 
   36351             : #if 1
   36352             : // Class Definition for SgIncidenceUndirectedGraph
   36353             : class ROSE_DLL_API SgIncidenceUndirectedGraph  : public SgGraph
   36354             :    {
   36355             :      public:
   36356             : 
   36357             : 
   36358             : /* #line 36359 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36359             : 
   36360             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   36361             : // Start of memberFunctionString
   36362             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   36363             : 
   36364             : 
   36365             : 
   36366             : // End of memberFunctionString
   36367             : // Start of memberFunctionString
   36368             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   36369             : 
   36370             : // *** COMMON CODE SECTION BEGINS HERE ***
   36371             : 
   36372             :     public:
   36373             : 
   36374             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   36375             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   36376             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   36377             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   36378             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   36379             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   36380             : 
   36381             :       /*! \brief returns a string representing the class name */
   36382             :           virtual std::string class_name() const override;
   36383             : 
   36384             :       /*! \brief returns new style SageIII enum values */
   36385             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   36386             : 
   36387             :       /*! \brief static variant value */
   36388             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   36389             :        // static const VariantT static_variant = V_SgIncidenceUndirectedGraph;
   36390             :           enum { static_variant = V_SgIncidenceUndirectedGraph };
   36391             : 
   36392             :        /* the generated cast function */
   36393             :       /*! \brief Casts pointer from base class to derived class */
   36394             :           ROSE_DLL_API friend       SgIncidenceUndirectedGraph* isSgIncidenceUndirectedGraph(       SgNode * s );
   36395             : 
   36396             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   36397             :           ROSE_DLL_API friend const SgIncidenceUndirectedGraph* isSgIncidenceUndirectedGraph( const SgNode * s );
   36398             : 
   36399             :      // ******************************************
   36400             :      // * Memory Pool / New / Delete
   36401             :      // ******************************************
   36402             : 
   36403             :      public:
   36404             :           /// \private
   36405             :           static const unsigned pool_size; //
   36406             :           /// \private
   36407             :           static std::vector<unsigned char *> pools; //
   36408             :           /// \private
   36409             :           static SgIncidenceUndirectedGraph * next_node; // 
   36410             : 
   36411             :           /// \private
   36412             :           static unsigned long initializeStorageClassArray(SgIncidenceUndirectedGraphStorageClass *); //
   36413             : 
   36414             :           /// \private
   36415             :           static void clearMemoryPool(); //
   36416             :           static void deleteMemoryPool(); //
   36417             : 
   36418             :           /// \private
   36419             :           static void extendMemoryPoolForFileIO(); //
   36420             : 
   36421             :           /// \private
   36422             :           static SgIncidenceUndirectedGraph * getPointerFromGlobalIndex(unsigned long); //
   36423             :           /// \private
   36424             :           static SgIncidenceUndirectedGraph * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   36425             : 
   36426             :           /// \private
   36427             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   36428             :           /// \private
   36429             :           static void resetValidFreepointers(); //
   36430             :           /// \private
   36431             :           static unsigned long getNumberOfLastValidPointer(); //
   36432             : 
   36433             : 
   36434             : #if defined(INLINE_FUNCTIONS)
   36435             :       /*! \brief returns pointer to newly allocated IR node */
   36436             :           inline void *operator new (size_t size);
   36437             : #else
   36438             :       /*! \brief returns pointer to newly allocated IR node */
   36439             :           void *operator new (size_t size);
   36440             : #endif
   36441             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   36442             :           void operator delete (void* pointer, size_t size);
   36443             : 
   36444             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   36445           0 :           void operator delete (void* pointer)
   36446             :              {
   36447             :             // This is the generated delete operator...
   36448           0 :                SgIncidenceUndirectedGraph::operator delete (pointer,sizeof(SgIncidenceUndirectedGraph));
   36449             :              }
   36450             : 
   36451             :       /*! \brief Returns the total number of IR nodes of this type */
   36452             :           static size_t numberOfNodes();
   36453             : 
   36454             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   36455             :           static size_t memoryUsage();
   36456             : 
   36457             :       // End of scope which started in IR nodes specific code 
   36458             :       /* */
   36459             : 
   36460             :       /* name Internal Functions
   36461             :           \brief Internal functions ... incomplete-documentation
   36462             : 
   36463             :           These functions have been made public as part of the design, but they are suggested for internal use 
   36464             :           or by particularly knowledgeable users for specialized tools or applications.
   36465             : 
   36466             :           \internal We could not make these private because they are required by user for special purposes. And 
   36467             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   36468             :          
   36469             :        */
   36470             : 
   36471             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   36472             :        // overridden in every class by *generated* implementation
   36473             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   36474             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   36475             :        // MS: 06/28/02 container of names of variables or container indices 
   36476             :        // used used in the traversal to access AST successor nodes
   36477             :        // overridden in every class by *generated* implementation
   36478             :       /*! \brief container of names of variables or container indices used used in the traversal
   36479             :           to access AST successor nodes overridden in every class by *generated* implementation */
   36480             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   36481             : 
   36482             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   36483             :        // than all the vector copies. The implementation for these functions is generated for each class.
   36484             :       /*! \brief return number of children in the traversal successor list */
   36485             :           virtual size_t get_numberOfTraversalSuccessors() override;
   36486             :       /*! \brief index-based access to traversal successors by index number */
   36487             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   36488             :       /*! \brief index-based access to traversal successors by child node */
   36489             :           virtual size_t get_childIndex(SgNode *child) override;
   36490             : 
   36491             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   36492             :        // MS: 08/16/2002 method for generating RTI information
   36493             :       /*! \brief return C++ Runtime-Time-Information */
   36494             :           virtual RTIReturnType roseRTI() override;
   36495             : #endif
   36496             :       /* */
   36497             : 
   36498             : 
   36499             : 
   36500             :       /* name Deprecated Functions
   36501             :           \brief Deprecated functions ... incomplete-documentation
   36502             : 
   36503             :           These functions have been deprecated from use.
   36504             :        */
   36505             :       /* */
   36506             : 
   36507             :       /*! returns a C style string (char*) representing the class name */
   36508             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   36509             : 
   36510             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   36511             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   36512             : #if 0
   36513             :       /*! returns old style Sage II enum values */
   36514             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   36515             :       /*! returns old style Sage II enum values */
   36516             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   36517             : #endif
   36518             :       /* */
   36519             : 
   36520             : 
   36521             : 
   36522             : 
   36523             :      public:
   36524             :       /* name Traversal Support Functions
   36525             :           \brief Traversal support functions ... incomplete-documentation
   36526             : 
   36527             :           These functions have been made public as part of the design, but they are suggested for internal use 
   36528             :           or by particularly knowledgable users for specialized tools or applications.
   36529             :        */
   36530             :       /* */
   36531             : 
   36532             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   36533             :        // (inferior to ROSE traversal mechanism, experimental).
   36534             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   36535             :        */
   36536             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   36537             : 
   36538             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   36539             :       /*! \brief support for the classic visitor pattern done in GoF */
   36540             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   36541             : 
   36542             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   36543             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   36544             :        */
   36545             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   36546             : 
   36547             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   36548             :        */
   36549             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   36550             : 
   36551             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   36552             :        // This traversal helps support internal tools that call static member functions.
   36553             :        // note: this function operates on the memory pools.
   36554             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   36555             :        */
   36556             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   36557             :       /* */
   36558             : 
   36559             : 
   36560             :      public:
   36561             :       /* name Memory Allocation Functions
   36562             :           \brief Memory allocations functions ... incomplete-documentation
   36563             : 
   36564             :           These functions have been made public as part of the design, but they are suggested for internal use 
   36565             :           or by particularly knowledgable users for specialized tools or applications.
   36566             :        */
   36567             :       /* */
   36568             : 
   36569             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   36570             : 
   36571             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   36572             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   36573             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   36574             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   36575             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   36576             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   36577             :           being used with the AST File I/O mechanism.
   36578             :        */
   36579             :           virtual bool isInMemoryPool() override;
   36580             : 
   36581             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   36582             : 
   36583             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   36584             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   36585             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   36586             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   36587             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   36588             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   36589             :           being used with the AST File I/O mechanism.
   36590             :        */
   36591             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   36592             : 
   36593             :       // DQ (4/30/2006): Modified to be a const function.
   36594             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   36595             : 
   36596             :           This functions is part of general support for many possible tools to operate 
   36597             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   36598             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   36599             :           less than the set of pointers used by the AST file I/O. This is part of
   36600             :           work implemented by Andreas, and support tools such as the AST graph generation.
   36601             : 
   36602             :           \warning This function can return unexpected data members and thus the 
   36603             :                    order and the number of elements is unpredicable and subject 
   36604             :                    to change.
   36605             : 
   36606             :           \returns STL vector of pairs of SgNode* and strings
   36607             :        */
   36608             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   36609             : 
   36610             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   36611             : 
   36612             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   36613             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   36614             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   36615             : 
   36616             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   36617             :                    and subject to change.
   36618             :        */
   36619             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   36620             : 
   36621             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   36622             : 
   36623             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   36624             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   36625             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   36626             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   36627             : 
   36628             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   36629             : 
   36630             :           \returns long
   36631             :        */
   36632             :           virtual long getChildIndex( SgNode* childNode ) const override;
   36633             : 
   36634             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   36635             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   36636             :       /* \brief Constructor for use by AST File I/O Mechanism
   36637             : 
   36638             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   36639             :           which obtained via fast binary file I/O from disk.
   36640             :        */
   36641             :        // SgIncidenceUndirectedGraph( SgIncidenceUndirectedGraphStorageClass& source );
   36642             : 
   36643             : 
   36644             : 
   36645             : 
   36646             : 
   36647             :  // JH (10/24/2005): methods added to support the ast file IO
   36648             :     private:
   36649             : 
   36650             :       /* name AST Memory Allocation Support Functions
   36651             :           \brief Memory allocations support....
   36652             : 
   36653             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   36654             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   36655             :           and support the AST File I/O Mechanism.
   36656             :        */
   36657             :       /* */
   36658             : 
   36659             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   36660             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   36661             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   36662             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   36663             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   36664             :           a correspinding one in the AST_FILE_IO class!
   36665             :        */
   36666             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   36667             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   36668             :       /* \brief Typedef used for low level memory access.
   36669             :        */
   36670             :        // typedef unsigned char* TestType;
   36671             : 
   36672             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   36673             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   36674             :       /* \brief Typedef used to hold memory addresses as values.
   36675             :        */
   36676             :        // typedef unsigned long  AddressType;
   36677             : 
   36678             : 
   36679             : 
   36680             :        // necessary, to have direct access to the p_freepointer and the private methods !
   36681             :       /*! \brief friend class declaration to support AST File I/O */
   36682             :           friend class AST_FILE_IO;
   36683             : 
   36684             :       /*! \brief friend class declaration to support AST File I/O */
   36685             :           friend class SgIncidenceUndirectedGraphStorageClass;
   36686             : 
   36687             :       /*! \brief friend class declaration to support AST File I/O */
   36688             :           friend class AstSpecificDataManagingClass;
   36689             : 
   36690             :       /*! \brief friend class declaration to support AST File I/O */
   36691             :           friend class AstSpecificDataManagingClassStorageClass;
   36692             :     public:
   36693             :       /*! \brief IR node constructor to support AST File I/O */
   36694             :           SgIncidenceUndirectedGraph( const SgIncidenceUndirectedGraphStorageClass& source );
   36695             : 
   36696             :  // private: // JJW hack
   36697             :        /*
   36698             :           name AST Memory Allocation Support Variables
   36699             :           Memory allocations support variables 
   36700             : 
   36701             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   36702             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   36703             :           and support the AST File I/O Mechanism.
   36704             :        */
   36705             :       /* */
   36706             : 
   36707             :     public:
   36708             : 
   36709             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   36710             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   36711             :       // virtual SgNode* addRegExpAttribute();
   36712             :       /*! \brief Support for AST matching using regular expression.
   36713             : 
   36714             :           This support is incomplete and the subject of current research to define 
   36715             :           RegEx trees to support inexact matching.
   36716             :        */
   36717             :           SgIncidenceUndirectedGraph* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   36718             : 
   36719             : // *** COMMON CODE SECTION ENDS HERE ***
   36720             : 
   36721             : 
   36722             : // End of memberFunctionString
   36723             : // Start of memberFunctionString
   36724             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   36725             : 
   36726             :      // the generated cast function
   36727             :      // friend ROSE_DLL_API SgIncidenceUndirectedGraph* isSgIncidenceUndirectedGraph ( SgNode* s );
   36728             : 
   36729             :           typedef SgGraph base_node_type;
   36730             : 
   36731             : 
   36732             : // End of memberFunctionString
   36733             : 
   36734             : 
   36735             :      public: 
   36736             :          virtual ~SgIncidenceUndirectedGraph();
   36737             : 
   36738             : 
   36739             :      public: 
   36740             :          SgIncidenceUndirectedGraph(std::string name = ""); 
   36741             : 
   36742             :     protected:
   36743             : 
   36744             :     friend struct Rose::Traits::generated::describe_node_t<SgIncidenceUndirectedGraph>;
   36745             : 
   36746             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36747             : 
   36748             : 
   36749             :    };
   36750             : #endif
   36751             : 
   36752             : // postdeclarations for SgIncidenceUndirectedGraph
   36753             : 
   36754             : /* #line 36755 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36755             : 
   36756             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   36757             : 
   36758             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36759             : 
   36760             : 
   36761             : /* #line 36762 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36762             : 
   36763             : 
   36764             : 
   36765             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36766             : 
   36767             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   36768             : //      This code is automatically generated for each 
   36769             : //      terminal and non-terminal within the defined 
   36770             : //      grammar.  There is a simple way to change the 
   36771             : //      code to fix bugs etc.  See the ROSE README file
   36772             : //      for directions.
   36773             : 
   36774             : // tps: (02/22/2010): Adding DLL export requirements
   36775             : #include "rosedll.h"
   36776             : 
   36777             : // predeclarations for SgGraphNode
   36778             : 
   36779             : /* #line 36780 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36780             : 
   36781             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   36782             : 
   36783             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   36784             : 
   36785             : #if 1
   36786             : // Class Definition for SgGraphNode
   36787             : class ROSE_DLL_API SgGraphNode  : public SgSupport
   36788             :    {
   36789             :      public:
   36790             : 
   36791             : 
   36792             : /* #line 36793 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   36793             : 
   36794             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   36795             : // Start of memberFunctionString
   36796             : /* #line 670 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   36797             : 
   36798             :      void append_properties( int addr, const std::string & prop );
   36799             : 
   36800             :      void post_construction_initialization() override;
   36801             : 
   36802             : 
   36803             : // End of memberFunctionString
   36804             : // Start of memberFunctionString
   36805             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   36806             : 
   36807             : 
   36808             :      /* name Persistant Attribute Mechanism
   36809             : 
   36810             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   36811             :          multiple passes. Note that these attributes are persistant in that they are preserved
   36812             :          if the AST is written out to a file and read in from a file.  However, virtual function
   36813             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   36814             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   36815             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   36816             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   36817             :          access is required, however mostly only internal tools use this lower level support).
   36818             : 
   36819             :          \internal This used to be a public data member, but has been changed to be a protected
   36820             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   36821             :          but some of the names and the syntax for calling the interface have changed. The
   36822             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   36823             :       */
   36824             :      /* */
   36825             :      //! Add a new attribute represented by the named string.
   36826             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   36827             :      //! Returns attribute of name 's'.
   36828             :          virtual AstAttribute* getAttribute(std::string s) const override;
   36829             :      //! Replace existing attribute of name 's' with new AstAttribute.
   36830             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   36831             :      /*! \brief This is a wrapper function with the following semantics:
   36832             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   36833             :          otherwise \b updateAttribute(s,a); is called.
   36834             :       */
   36835             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   36836             :      //! Remove attribute of name 's' if present.
   36837             :          virtual void removeAttribute(std::string s) override;
   36838             :      //! Tests if attribute of name 's' is present.
   36839             :          virtual bool attributeExists(std::string s) const override;
   36840             :      //! Returns the number of attributes on this IR node.
   36841             :          virtual int numberOfAttributes() const override;
   36842             : 
   36843             :      /*! \fn AstAttributeMechanism* SgGraphNode::get_attributeMechanism() const;
   36844             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   36845             :                 a pointer to it is returned, else error.
   36846             : 
   36847             :          This is an access function used for getting the interally held pointer to a valid
   36848             :          AstAttributeMechanism. It provides access to lower level functionality of the
   36849             :          AstAttributeMechanism, put is mostly of use to internal tools.
   36850             :       */
   36851             :      /*! \fn void SgGraphNode::set_attributeMechanism(AstAttributeMechanism* a);
   36852             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   36853             : 
   36854             :          This is an access function used for setting the interally held pointer to a valid
   36855             :          AstAttributeMechanism.
   36856             :       */
   36857             :      /* */
   36858             : 
   36859             : 
   36860             : 
   36861             : 
   36862             : // End of memberFunctionString
   36863             : // Start of memberFunctionString
   36864             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   36865             : 
   36866             : // *** COMMON CODE SECTION BEGINS HERE ***
   36867             : 
   36868             :     public:
   36869             : 
   36870             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   36871             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   36872             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   36873             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   36874             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   36875             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   36876             : 
   36877             :       /*! \brief returns a string representing the class name */
   36878             :           virtual std::string class_name() const override;
   36879             : 
   36880             :       /*! \brief returns new style SageIII enum values */
   36881             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   36882             : 
   36883             :       /*! \brief static variant value */
   36884             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   36885             :        // static const VariantT static_variant = V_SgGraphNode;
   36886             :           enum { static_variant = V_SgGraphNode };
   36887             : 
   36888             :        /* the generated cast function */
   36889             :       /*! \brief Casts pointer from base class to derived class */
   36890             :           ROSE_DLL_API friend       SgGraphNode* isSgGraphNode(       SgNode * s );
   36891             : 
   36892             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   36893             :           ROSE_DLL_API friend const SgGraphNode* isSgGraphNode( const SgNode * s );
   36894             : 
   36895             :      // ******************************************
   36896             :      // * Memory Pool / New / Delete
   36897             :      // ******************************************
   36898             : 
   36899             :      public:
   36900             :           /// \private
   36901             :           static const unsigned pool_size; //
   36902             :           /// \private
   36903             :           static std::vector<unsigned char *> pools; //
   36904             :           /// \private
   36905             :           static SgGraphNode * next_node; // 
   36906             : 
   36907             :           /// \private
   36908             :           static unsigned long initializeStorageClassArray(SgGraphNodeStorageClass *); //
   36909             : 
   36910             :           /// \private
   36911             :           static void clearMemoryPool(); //
   36912             :           static void deleteMemoryPool(); //
   36913             : 
   36914             :           /// \private
   36915             :           static void extendMemoryPoolForFileIO(); //
   36916             : 
   36917             :           /// \private
   36918             :           static SgGraphNode * getPointerFromGlobalIndex(unsigned long); //
   36919             :           /// \private
   36920             :           static SgGraphNode * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   36921             : 
   36922             :           /// \private
   36923             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   36924             :           /// \private
   36925             :           static void resetValidFreepointers(); //
   36926             :           /// \private
   36927             :           static unsigned long getNumberOfLastValidPointer(); //
   36928             : 
   36929             : 
   36930             : #if defined(INLINE_FUNCTIONS)
   36931             :       /*! \brief returns pointer to newly allocated IR node */
   36932             :           inline void *operator new (size_t size);
   36933             : #else
   36934             :       /*! \brief returns pointer to newly allocated IR node */
   36935             :           void *operator new (size_t size);
   36936             : #endif
   36937             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   36938             :           void operator delete (void* pointer, size_t size);
   36939             : 
   36940             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   36941           0 :           void operator delete (void* pointer)
   36942             :              {
   36943             :             // This is the generated delete operator...
   36944           0 :                SgGraphNode::operator delete (pointer,sizeof(SgGraphNode));
   36945             :              }
   36946             : 
   36947             :       /*! \brief Returns the total number of IR nodes of this type */
   36948             :           static size_t numberOfNodes();
   36949             : 
   36950             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   36951             :           static size_t memoryUsage();
   36952             : 
   36953             :       // End of scope which started in IR nodes specific code 
   36954             :       /* */
   36955             : 
   36956             :       /* name Internal Functions
   36957             :           \brief Internal functions ... incomplete-documentation
   36958             : 
   36959             :           These functions have been made public as part of the design, but they are suggested for internal use 
   36960             :           or by particularly knowledgeable users for specialized tools or applications.
   36961             : 
   36962             :           \internal We could not make these private because they are required by user for special purposes. And 
   36963             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   36964             :          
   36965             :        */
   36966             : 
   36967             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   36968             :        // overridden in every class by *generated* implementation
   36969             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   36970             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   36971             :        // MS: 06/28/02 container of names of variables or container indices 
   36972             :        // used used in the traversal to access AST successor nodes
   36973             :        // overridden in every class by *generated* implementation
   36974             :       /*! \brief container of names of variables or container indices used used in the traversal
   36975             :           to access AST successor nodes overridden in every class by *generated* implementation */
   36976             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   36977             : 
   36978             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   36979             :        // than all the vector copies. The implementation for these functions is generated for each class.
   36980             :       /*! \brief return number of children in the traversal successor list */
   36981             :           virtual size_t get_numberOfTraversalSuccessors() override;
   36982             :       /*! \brief index-based access to traversal successors by index number */
   36983             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   36984             :       /*! \brief index-based access to traversal successors by child node */
   36985             :           virtual size_t get_childIndex(SgNode *child) override;
   36986             : 
   36987             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   36988             :        // MS: 08/16/2002 method for generating RTI information
   36989             :       /*! \brief return C++ Runtime-Time-Information */
   36990             :           virtual RTIReturnType roseRTI() override;
   36991             : #endif
   36992             :       /* */
   36993             : 
   36994             : 
   36995             : 
   36996             :       /* name Deprecated Functions
   36997             :           \brief Deprecated functions ... incomplete-documentation
   36998             : 
   36999             :           These functions have been deprecated from use.
   37000             :        */
   37001             :       /* */
   37002             : 
   37003             :       /*! returns a C style string (char*) representing the class name */
   37004             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   37005             : 
   37006             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   37007             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   37008             : #if 0
   37009             :       /*! returns old style Sage II enum values */
   37010             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   37011             :       /*! returns old style Sage II enum values */
   37012             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   37013             : #endif
   37014             :       /* */
   37015             : 
   37016             : 
   37017             : 
   37018             : 
   37019             :      public:
   37020             :       /* name Traversal Support Functions
   37021             :           \brief Traversal support functions ... incomplete-documentation
   37022             : 
   37023             :           These functions have been made public as part of the design, but they are suggested for internal use 
   37024             :           or by particularly knowledgable users for specialized tools or applications.
   37025             :        */
   37026             :       /* */
   37027             : 
   37028             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   37029             :        // (inferior to ROSE traversal mechanism, experimental).
   37030             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   37031             :        */
   37032             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   37033             : 
   37034             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   37035             :       /*! \brief support for the classic visitor pattern done in GoF */
   37036             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   37037             : 
   37038             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   37039             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   37040             :        */
   37041             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   37042             : 
   37043             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   37044             :        */
   37045             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   37046             : 
   37047             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   37048             :        // This traversal helps support internal tools that call static member functions.
   37049             :        // note: this function operates on the memory pools.
   37050             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   37051             :        */
   37052             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   37053             :       /* */
   37054             : 
   37055             : 
   37056             :      public:
   37057             :       /* name Memory Allocation Functions
   37058             :           \brief Memory allocations functions ... incomplete-documentation
   37059             : 
   37060             :           These functions have been made public as part of the design, but they are suggested for internal use 
   37061             :           or by particularly knowledgable users for specialized tools or applications.
   37062             :        */
   37063             :       /* */
   37064             : 
   37065             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   37066             : 
   37067             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   37068             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   37069             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   37070             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   37071             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   37072             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   37073             :           being used with the AST File I/O mechanism.
   37074             :        */
   37075             :           virtual bool isInMemoryPool() override;
   37076             : 
   37077             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   37078             : 
   37079             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   37080             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   37081             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   37082             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   37083             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   37084             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   37085             :           being used with the AST File I/O mechanism.
   37086             :        */
   37087             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   37088             : 
   37089             :       // DQ (4/30/2006): Modified to be a const function.
   37090             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   37091             : 
   37092             :           This functions is part of general support for many possible tools to operate 
   37093             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   37094             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   37095             :           less than the set of pointers used by the AST file I/O. This is part of
   37096             :           work implemented by Andreas, and support tools such as the AST graph generation.
   37097             : 
   37098             :           \warning This function can return unexpected data members and thus the 
   37099             :                    order and the number of elements is unpredicable and subject 
   37100             :                    to change.
   37101             : 
   37102             :           \returns STL vector of pairs of SgNode* and strings
   37103             :        */
   37104             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   37105             : 
   37106             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   37107             : 
   37108             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   37109             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   37110             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   37111             : 
   37112             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   37113             :                    and subject to change.
   37114             :        */
   37115             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   37116             : 
   37117             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   37118             : 
   37119             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   37120             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   37121             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   37122             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   37123             : 
   37124             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   37125             : 
   37126             :           \returns long
   37127             :        */
   37128             :           virtual long getChildIndex( SgNode* childNode ) const override;
   37129             : 
   37130             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   37131             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   37132             :       /* \brief Constructor for use by AST File I/O Mechanism
   37133             : 
   37134             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   37135             :           which obtained via fast binary file I/O from disk.
   37136             :        */
   37137             :        // SgGraphNode( SgGraphNodeStorageClass& source );
   37138             : 
   37139             : 
   37140             : 
   37141             : 
   37142             : 
   37143             :  // JH (10/24/2005): methods added to support the ast file IO
   37144             :     private:
   37145             : 
   37146             :       /* name AST Memory Allocation Support Functions
   37147             :           \brief Memory allocations support....
   37148             : 
   37149             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   37150             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   37151             :           and support the AST File I/O Mechanism.
   37152             :        */
   37153             :       /* */
   37154             : 
   37155             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   37156             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   37157             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   37158             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   37159             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   37160             :           a correspinding one in the AST_FILE_IO class!
   37161             :        */
   37162             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   37163             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   37164             :       /* \brief Typedef used for low level memory access.
   37165             :        */
   37166             :        // typedef unsigned char* TestType;
   37167             : 
   37168             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   37169             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   37170             :       /* \brief Typedef used to hold memory addresses as values.
   37171             :        */
   37172             :        // typedef unsigned long  AddressType;
   37173             : 
   37174             : 
   37175             : 
   37176             :        // necessary, to have direct access to the p_freepointer and the private methods !
   37177             :       /*! \brief friend class declaration to support AST File I/O */
   37178             :           friend class AST_FILE_IO;
   37179             : 
   37180             :       /*! \brief friend class declaration to support AST File I/O */
   37181             :           friend class SgGraphNodeStorageClass;
   37182             : 
   37183             :       /*! \brief friend class declaration to support AST File I/O */
   37184             :           friend class AstSpecificDataManagingClass;
   37185             : 
   37186             :       /*! \brief friend class declaration to support AST File I/O */
   37187             :           friend class AstSpecificDataManagingClassStorageClass;
   37188             :     public:
   37189             :       /*! \brief IR node constructor to support AST File I/O */
   37190             :           SgGraphNode( const SgGraphNodeStorageClass& source );
   37191             : 
   37192             :  // private: // JJW hack
   37193             :        /*
   37194             :           name AST Memory Allocation Support Variables
   37195             :           Memory allocations support variables 
   37196             : 
   37197             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   37198             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   37199             :           and support the AST File I/O Mechanism.
   37200             :        */
   37201             :       /* */
   37202             : 
   37203             :     public:
   37204             : 
   37205             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   37206             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   37207             :       // virtual SgNode* addRegExpAttribute();
   37208             :       /*! \brief Support for AST matching using regular expression.
   37209             : 
   37210             :           This support is incomplete and the subject of current research to define 
   37211             :           RegEx trees to support inexact matching.
   37212             :        */
   37213             :           SgGraphNode* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   37214             : 
   37215             : // *** COMMON CODE SECTION ENDS HERE ***
   37216             : 
   37217             : 
   37218             : // End of memberFunctionString
   37219             : // Start of memberFunctionString
   37220             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   37221             : 
   37222             :      // the generated cast function
   37223             :      // friend ROSE_DLL_API SgGraphNode* isSgGraphNode ( SgNode* s );
   37224             : 
   37225             :           typedef SgSupport base_node_type;
   37226             : 
   37227             : 
   37228             : // End of memberFunctionString
   37229             : 
   37230             :      public: 
   37231             :          std::string get_name() const /* (getDataAccessFunctionPrototypeString) */;
   37232             :          void set_name(std::string name) /* (getDataAccessFunctionPrototypeString) */;
   37233             : 
   37234             :      public: 
   37235             :          SgNode* get_SgNode() const;
   37236             :          void set_SgNode(SgNode* SgNode);
   37237             : 
   37238             :      public: 
   37239             :          int get_index() const;
   37240             :          void set_index(int index);
   37241             : 
   37242             : 
   37243             :      public: 
   37244             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   37245             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   37246             : 
   37247             :      public: 
   37248             :          const std::map<int, std::string>&  get_properties() const;
   37249             :          std::map<int, std::string>& get_properties(); 
   37250             : 
   37251             : 
   37252             :      public: 
   37253             :          virtual ~SgGraphNode();
   37254             : 
   37255             : 
   37256             :      public: 
   37257             :          SgGraphNode(std::string name = ""); 
   37258             : 
   37259             :     protected:
   37260             : // Start of memberFunctionString
   37261             : std::string p_name;
   37262             :           
   37263             : // End of memberFunctionString
   37264             : // Start of memberFunctionString
   37265             : SgNode* p_SgNode;
   37266             :           
   37267             : // End of memberFunctionString
   37268             : // Start of memberFunctionString
   37269             : int p_index;
   37270             :           
   37271             : // End of memberFunctionString
   37272             : // Start of memberFunctionString
   37273             : static int p_index_counter;
   37274             :           
   37275             : // End of memberFunctionString
   37276             : // Start of memberFunctionString
   37277             : AstAttributeMechanism* p_attributeMechanism;
   37278             :           
   37279             : // End of memberFunctionString
   37280             : // Start of memberFunctionString
   37281             : std::map<int, std::string> p_properties;
   37282             :           
   37283             : // End of memberFunctionString
   37284             : 
   37285             :     friend struct Rose::Traits::generated::describe_node_t<SgGraphNode>;
   37286             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphNode, std::string,&SgGraphNode::p_name>;
   37287             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphNode, SgNode*,&SgGraphNode::p_SgNode>;
   37288             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphNode, int,&SgGraphNode::p_index>;
   37289             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphNode, AstAttributeMechanism*,&SgGraphNode::p_attributeMechanism>;
   37290             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphNode, std::map<int, std::string>,&SgGraphNode::p_properties>;
   37291             : 
   37292             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37293             : 
   37294             : 
   37295             :    };
   37296             : #endif
   37297             : 
   37298             : // postdeclarations for SgGraphNode
   37299             : 
   37300             : /* #line 37301 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37301             : 
   37302             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   37303             : 
   37304             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37305             : 
   37306             : 
   37307             : /* #line 37308 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37308             : 
   37309             : 
   37310             : 
   37311             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37312             : 
   37313             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   37314             : //      This code is automatically generated for each 
   37315             : //      terminal and non-terminal within the defined 
   37316             : //      grammar.  There is a simple way to change the 
   37317             : //      code to fix bugs etc.  See the ROSE README file
   37318             : //      for directions.
   37319             : 
   37320             : // tps: (02/22/2010): Adding DLL export requirements
   37321             : #include "rosedll.h"
   37322             : 
   37323             : // predeclarations for SgGraphEdge
   37324             : 
   37325             : /* #line 37326 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37326             : 
   37327             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   37328             : 
   37329             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37330             : 
   37331             : #if 1
   37332             : // Class Definition for SgGraphEdge
   37333             : class ROSE_DLL_API SgGraphEdge  : public SgSupport
   37334             :    {
   37335             :      public:
   37336             : 
   37337             : 
   37338             : /* #line 37339 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37339             : 
   37340             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   37341             : // Start of memberFunctionString
   37342             : /* #line 677 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   37343             : 
   37344             :      void append_properties( int addr, const std::string & prop );
   37345             : 
   37346             :      void post_construction_initialization() override;
   37347             : 
   37348             : 
   37349             : // End of memberFunctionString
   37350             : // Start of memberFunctionString
   37351             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   37352             : 
   37353             : 
   37354             :      /* name Persistant Attribute Mechanism
   37355             : 
   37356             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   37357             :          multiple passes. Note that these attributes are persistant in that they are preserved
   37358             :          if the AST is written out to a file and read in from a file.  However, virtual function
   37359             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   37360             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   37361             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   37362             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   37363             :          access is required, however mostly only internal tools use this lower level support).
   37364             : 
   37365             :          \internal This used to be a public data member, but has been changed to be a protected
   37366             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   37367             :          but some of the names and the syntax for calling the interface have changed. The
   37368             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   37369             :       */
   37370             :      /* */
   37371             :      //! Add a new attribute represented by the named string.
   37372             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   37373             :      //! Returns attribute of name 's'.
   37374             :          virtual AstAttribute* getAttribute(std::string s) const override;
   37375             :      //! Replace existing attribute of name 's' with new AstAttribute.
   37376             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   37377             :      /*! \brief This is a wrapper function with the following semantics:
   37378             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   37379             :          otherwise \b updateAttribute(s,a); is called.
   37380             :       */
   37381             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   37382             :      //! Remove attribute of name 's' if present.
   37383             :          virtual void removeAttribute(std::string s) override;
   37384             :      //! Tests if attribute of name 's' is present.
   37385             :          virtual bool attributeExists(std::string s) const override;
   37386             :      //! Returns the number of attributes on this IR node.
   37387             :          virtual int numberOfAttributes() const override;
   37388             : 
   37389             :      /*! \fn AstAttributeMechanism* SgGraphEdge::get_attributeMechanism() const;
   37390             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   37391             :                 a pointer to it is returned, else error.
   37392             : 
   37393             :          This is an access function used for getting the interally held pointer to a valid
   37394             :          AstAttributeMechanism. It provides access to lower level functionality of the
   37395             :          AstAttributeMechanism, put is mostly of use to internal tools.
   37396             :       */
   37397             :      /*! \fn void SgGraphEdge::set_attributeMechanism(AstAttributeMechanism* a);
   37398             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   37399             : 
   37400             :          This is an access function used for setting the interally held pointer to a valid
   37401             :          AstAttributeMechanism.
   37402             :       */
   37403             :      /* */
   37404             : 
   37405             : 
   37406             : 
   37407             : 
   37408             : // End of memberFunctionString
   37409             : // Start of memberFunctionString
   37410             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   37411             : 
   37412             : // *** COMMON CODE SECTION BEGINS HERE ***
   37413             : 
   37414             :     public:
   37415             : 
   37416             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   37417             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   37418             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   37419             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   37420             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   37421             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   37422             : 
   37423             :       /*! \brief returns a string representing the class name */
   37424             :           virtual std::string class_name() const override;
   37425             : 
   37426             :       /*! \brief returns new style SageIII enum values */
   37427             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   37428             : 
   37429             :       /*! \brief static variant value */
   37430             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   37431             :        // static const VariantT static_variant = V_SgGraphEdge;
   37432             :           enum { static_variant = V_SgGraphEdge };
   37433             : 
   37434             :        /* the generated cast function */
   37435             :       /*! \brief Casts pointer from base class to derived class */
   37436             :           ROSE_DLL_API friend       SgGraphEdge* isSgGraphEdge(       SgNode * s );
   37437             : 
   37438             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   37439             :           ROSE_DLL_API friend const SgGraphEdge* isSgGraphEdge( const SgNode * s );
   37440             : 
   37441             :      // ******************************************
   37442             :      // * Memory Pool / New / Delete
   37443             :      // ******************************************
   37444             : 
   37445             :      public:
   37446             :           /// \private
   37447             :           static const unsigned pool_size; //
   37448             :           /// \private
   37449             :           static std::vector<unsigned char *> pools; //
   37450             :           /// \private
   37451             :           static SgGraphEdge * next_node; // 
   37452             : 
   37453             :           /// \private
   37454             :           static unsigned long initializeStorageClassArray(SgGraphEdgeStorageClass *); //
   37455             : 
   37456             :           /// \private
   37457             :           static void clearMemoryPool(); //
   37458             :           static void deleteMemoryPool(); //
   37459             : 
   37460             :           /// \private
   37461             :           static void extendMemoryPoolForFileIO(); //
   37462             : 
   37463             :           /// \private
   37464             :           static SgGraphEdge * getPointerFromGlobalIndex(unsigned long); //
   37465             :           /// \private
   37466             :           static SgGraphEdge * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   37467             : 
   37468             :           /// \private
   37469             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   37470             :           /// \private
   37471             :           static void resetValidFreepointers(); //
   37472             :           /// \private
   37473             :           static unsigned long getNumberOfLastValidPointer(); //
   37474             : 
   37475             : 
   37476             : #if defined(INLINE_FUNCTIONS)
   37477             :       /*! \brief returns pointer to newly allocated IR node */
   37478             :           inline void *operator new (size_t size);
   37479             : #else
   37480             :       /*! \brief returns pointer to newly allocated IR node */
   37481             :           void *operator new (size_t size);
   37482             : #endif
   37483             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   37484             :           void operator delete (void* pointer, size_t size);
   37485             : 
   37486             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   37487           0 :           void operator delete (void* pointer)
   37488             :              {
   37489             :             // This is the generated delete operator...
   37490           0 :                SgGraphEdge::operator delete (pointer,sizeof(SgGraphEdge));
   37491             :              }
   37492             : 
   37493             :       /*! \brief Returns the total number of IR nodes of this type */
   37494             :           static size_t numberOfNodes();
   37495             : 
   37496             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   37497             :           static size_t memoryUsage();
   37498             : 
   37499             :       // End of scope which started in IR nodes specific code 
   37500             :       /* */
   37501             : 
   37502             :       /* name Internal Functions
   37503             :           \brief Internal functions ... incomplete-documentation
   37504             : 
   37505             :           These functions have been made public as part of the design, but they are suggested for internal use 
   37506             :           or by particularly knowledgeable users for specialized tools or applications.
   37507             : 
   37508             :           \internal We could not make these private because they are required by user for special purposes. And 
   37509             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   37510             :          
   37511             :        */
   37512             : 
   37513             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   37514             :        // overridden in every class by *generated* implementation
   37515             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   37516             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   37517             :        // MS: 06/28/02 container of names of variables or container indices 
   37518             :        // used used in the traversal to access AST successor nodes
   37519             :        // overridden in every class by *generated* implementation
   37520             :       /*! \brief container of names of variables or container indices used used in the traversal
   37521             :           to access AST successor nodes overridden in every class by *generated* implementation */
   37522             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   37523             : 
   37524             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   37525             :        // than all the vector copies. The implementation for these functions is generated for each class.
   37526             :       /*! \brief return number of children in the traversal successor list */
   37527             :           virtual size_t get_numberOfTraversalSuccessors() override;
   37528             :       /*! \brief index-based access to traversal successors by index number */
   37529             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   37530             :       /*! \brief index-based access to traversal successors by child node */
   37531             :           virtual size_t get_childIndex(SgNode *child) override;
   37532             : 
   37533             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   37534             :        // MS: 08/16/2002 method for generating RTI information
   37535             :       /*! \brief return C++ Runtime-Time-Information */
   37536             :           virtual RTIReturnType roseRTI() override;
   37537             : #endif
   37538             :       /* */
   37539             : 
   37540             : 
   37541             : 
   37542             :       /* name Deprecated Functions
   37543             :           \brief Deprecated functions ... incomplete-documentation
   37544             : 
   37545             :           These functions have been deprecated from use.
   37546             :        */
   37547             :       /* */
   37548             : 
   37549             :       /*! returns a C style string (char*) representing the class name */
   37550             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   37551             : 
   37552             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   37553             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   37554             : #if 0
   37555             :       /*! returns old style Sage II enum values */
   37556             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   37557             :       /*! returns old style Sage II enum values */
   37558             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   37559             : #endif
   37560             :       /* */
   37561             : 
   37562             : 
   37563             : 
   37564             : 
   37565             :      public:
   37566             :       /* name Traversal Support Functions
   37567             :           \brief Traversal support functions ... incomplete-documentation
   37568             : 
   37569             :           These functions have been made public as part of the design, but they are suggested for internal use 
   37570             :           or by particularly knowledgable users for specialized tools or applications.
   37571             :        */
   37572             :       /* */
   37573             : 
   37574             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   37575             :        // (inferior to ROSE traversal mechanism, experimental).
   37576             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   37577             :        */
   37578             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   37579             : 
   37580             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   37581             :       /*! \brief support for the classic visitor pattern done in GoF */
   37582             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   37583             : 
   37584             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   37585             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   37586             :        */
   37587             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   37588             : 
   37589             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   37590             :        */
   37591             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   37592             : 
   37593             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   37594             :        // This traversal helps support internal tools that call static member functions.
   37595             :        // note: this function operates on the memory pools.
   37596             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   37597             :        */
   37598             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   37599             :       /* */
   37600             : 
   37601             : 
   37602             :      public:
   37603             :       /* name Memory Allocation Functions
   37604             :           \brief Memory allocations functions ... incomplete-documentation
   37605             : 
   37606             :           These functions have been made public as part of the design, but they are suggested for internal use 
   37607             :           or by particularly knowledgable users for specialized tools or applications.
   37608             :        */
   37609             :       /* */
   37610             : 
   37611             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   37612             : 
   37613             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   37614             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   37615             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   37616             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   37617             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   37618             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   37619             :           being used with the AST File I/O mechanism.
   37620             :        */
   37621             :           virtual bool isInMemoryPool() override;
   37622             : 
   37623             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   37624             : 
   37625             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   37626             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   37627             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   37628             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   37629             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   37630             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   37631             :           being used with the AST File I/O mechanism.
   37632             :        */
   37633             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   37634             : 
   37635             :       // DQ (4/30/2006): Modified to be a const function.
   37636             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   37637             : 
   37638             :           This functions is part of general support for many possible tools to operate 
   37639             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   37640             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   37641             :           less than the set of pointers used by the AST file I/O. This is part of
   37642             :           work implemented by Andreas, and support tools such as the AST graph generation.
   37643             : 
   37644             :           \warning This function can return unexpected data members and thus the 
   37645             :                    order and the number of elements is unpredicable and subject 
   37646             :                    to change.
   37647             : 
   37648             :           \returns STL vector of pairs of SgNode* and strings
   37649             :        */
   37650             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   37651             : 
   37652             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   37653             : 
   37654             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   37655             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   37656             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   37657             : 
   37658             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   37659             :                    and subject to change.
   37660             :        */
   37661             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   37662             : 
   37663             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   37664             : 
   37665             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   37666             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   37667             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   37668             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   37669             : 
   37670             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   37671             : 
   37672             :           \returns long
   37673             :        */
   37674             :           virtual long getChildIndex( SgNode* childNode ) const override;
   37675             : 
   37676             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   37677             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   37678             :       /* \brief Constructor for use by AST File I/O Mechanism
   37679             : 
   37680             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   37681             :           which obtained via fast binary file I/O from disk.
   37682             :        */
   37683             :        // SgGraphEdge( SgGraphEdgeStorageClass& source );
   37684             : 
   37685             : 
   37686             : 
   37687             : 
   37688             : 
   37689             :  // JH (10/24/2005): methods added to support the ast file IO
   37690             :     private:
   37691             : 
   37692             :       /* name AST Memory Allocation Support Functions
   37693             :           \brief Memory allocations support....
   37694             : 
   37695             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   37696             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   37697             :           and support the AST File I/O Mechanism.
   37698             :        */
   37699             :       /* */
   37700             : 
   37701             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   37702             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   37703             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   37704             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   37705             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   37706             :           a correspinding one in the AST_FILE_IO class!
   37707             :        */
   37708             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   37709             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   37710             :       /* \brief Typedef used for low level memory access.
   37711             :        */
   37712             :        // typedef unsigned char* TestType;
   37713             : 
   37714             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   37715             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   37716             :       /* \brief Typedef used to hold memory addresses as values.
   37717             :        */
   37718             :        // typedef unsigned long  AddressType;
   37719             : 
   37720             : 
   37721             : 
   37722             :        // necessary, to have direct access to the p_freepointer and the private methods !
   37723             :       /*! \brief friend class declaration to support AST File I/O */
   37724             :           friend class AST_FILE_IO;
   37725             : 
   37726             :       /*! \brief friend class declaration to support AST File I/O */
   37727             :           friend class SgGraphEdgeStorageClass;
   37728             : 
   37729             :       /*! \brief friend class declaration to support AST File I/O */
   37730             :           friend class AstSpecificDataManagingClass;
   37731             : 
   37732             :       /*! \brief friend class declaration to support AST File I/O */
   37733             :           friend class AstSpecificDataManagingClassStorageClass;
   37734             :     public:
   37735             :       /*! \brief IR node constructor to support AST File I/O */
   37736             :           SgGraphEdge( const SgGraphEdgeStorageClass& source );
   37737             : 
   37738             :  // private: // JJW hack
   37739             :        /*
   37740             :           name AST Memory Allocation Support Variables
   37741             :           Memory allocations support variables 
   37742             : 
   37743             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   37744             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   37745             :           and support the AST File I/O Mechanism.
   37746             :        */
   37747             :       /* */
   37748             : 
   37749             :     public:
   37750             : 
   37751             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   37752             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   37753             :       // virtual SgNode* addRegExpAttribute();
   37754             :       /*! \brief Support for AST matching using regular expression.
   37755             : 
   37756             :           This support is incomplete and the subject of current research to define 
   37757             :           RegEx trees to support inexact matching.
   37758             :        */
   37759             :           SgGraphEdge* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   37760             : 
   37761             : // *** COMMON CODE SECTION ENDS HERE ***
   37762             : 
   37763             : 
   37764             : // End of memberFunctionString
   37765             : // Start of memberFunctionString
   37766             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   37767             : 
   37768             :      // the generated cast function
   37769             :      // friend ROSE_DLL_API SgGraphEdge* isSgGraphEdge ( SgNode* s );
   37770             : 
   37771             :           typedef SgSupport base_node_type;
   37772             : 
   37773             : 
   37774             : // End of memberFunctionString
   37775             : 
   37776             :      public: 
   37777             :          SgGraphNode* get_node_A() const;
   37778             :          void set_node_A(SgGraphNode* node_A);
   37779             : 
   37780             :      public: 
   37781             :          SgGraphNode* get_node_B() const;
   37782             :          void set_node_B(SgGraphNode* node_B);
   37783             : 
   37784             :      public: 
   37785             :          std::string get_name() const /* (getDataAccessFunctionPrototypeString) */;
   37786             :          void set_name(std::string name) /* (getDataAccessFunctionPrototypeString) */;
   37787             : 
   37788             :      public: 
   37789             :          int get_index() const;
   37790             :          void set_index(int index);
   37791             : 
   37792             : 
   37793             :      public: 
   37794             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   37795             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   37796             : 
   37797             :      public: 
   37798             :          const std::map<int, std::string>&  get_properties() const;
   37799             :          std::map<int, std::string>& get_properties(); 
   37800             : 
   37801             : 
   37802             :      public: 
   37803             :          virtual ~SgGraphEdge();
   37804             : 
   37805             : 
   37806             :      public: 
   37807             :          SgGraphEdge(SgGraphNode* node_A = NULL, SgGraphNode* node_B = NULL, std::string name = ""); 
   37808             : 
   37809             :     protected:
   37810             : // Start of memberFunctionString
   37811             : SgGraphNode* p_node_A;
   37812             :           
   37813             : // End of memberFunctionString
   37814             : // Start of memberFunctionString
   37815             : SgGraphNode* p_node_B;
   37816             :           
   37817             : // End of memberFunctionString
   37818             : // Start of memberFunctionString
   37819             : std::string p_name;
   37820             :           
   37821             : // End of memberFunctionString
   37822             : // Start of memberFunctionString
   37823             : int p_index;
   37824             :           
   37825             : // End of memberFunctionString
   37826             : // Start of memberFunctionString
   37827             : static int p_index_counter;
   37828             :           
   37829             : // End of memberFunctionString
   37830             : // Start of memberFunctionString
   37831             : AstAttributeMechanism* p_attributeMechanism;
   37832             :           
   37833             : // End of memberFunctionString
   37834             : // Start of memberFunctionString
   37835             : std::map<int, std::string> p_properties;
   37836             :           
   37837             : // End of memberFunctionString
   37838             : 
   37839             :     friend struct Rose::Traits::generated::describe_node_t<SgGraphEdge>;
   37840             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphEdge, SgGraphNode*,&SgGraphEdge::p_node_A>;
   37841             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphEdge, SgGraphNode*,&SgGraphEdge::p_node_B>;
   37842             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphEdge, std::string,&SgGraphEdge::p_name>;
   37843             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphEdge, int,&SgGraphEdge::p_index>;
   37844             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphEdge, AstAttributeMechanism*,&SgGraphEdge::p_attributeMechanism>;
   37845             :     friend struct Rose::Traits::generated::describe_field_t<SgGraphEdge, std::map<int, std::string>,&SgGraphEdge::p_properties>;
   37846             : 
   37847             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37848             : 
   37849             : 
   37850             :    };
   37851             : #endif
   37852             : 
   37853             : // postdeclarations for SgGraphEdge
   37854             : 
   37855             : /* #line 37856 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37856             : 
   37857             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   37858             : 
   37859             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37860             : 
   37861             : 
   37862             : /* #line 37863 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37863             : 
   37864             : 
   37865             : 
   37866             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37867             : 
   37868             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   37869             : //      This code is automatically generated for each 
   37870             : //      terminal and non-terminal within the defined 
   37871             : //      grammar.  There is a simple way to change the 
   37872             : //      code to fix bugs etc.  See the ROSE README file
   37873             : //      for directions.
   37874             : 
   37875             : // tps: (02/22/2010): Adding DLL export requirements
   37876             : #include "rosedll.h"
   37877             : 
   37878             : // predeclarations for SgDirectedGraphEdge
   37879             : 
   37880             : /* #line 37881 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37881             : 
   37882             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   37883             : 
   37884             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   37885             : 
   37886             : #if 1
   37887             : // Class Definition for SgDirectedGraphEdge
   37888             : class ROSE_DLL_API SgDirectedGraphEdge  : public SgGraphEdge
   37889             :    {
   37890             :      public:
   37891             : 
   37892             : 
   37893             : /* #line 37894 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   37894             : 
   37895             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   37896             : // Start of memberFunctionString
   37897             : /* #line 684 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   37898             : 
   37899             :      public:
   37900             :        // DQ (8/18/2008): This is part of the OLD interface introduced for backward compatability!
   37901             :           SgDirectedGraphEdge(std::string name, std::string type, int n, SgGraphNode* from, SgGraphNode* to);
   37902             : 
   37903           0 :           SgGraphNode* get_from() { return p_node_A; }
   37904           0 :           SgGraphNode* get_to()   { return p_node_B; }
   37905             : 
   37906             : 
   37907             : // End of memberFunctionString
   37908             : // Start of memberFunctionString
   37909             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   37910             : 
   37911             : // *** COMMON CODE SECTION BEGINS HERE ***
   37912             : 
   37913             :     public:
   37914             : 
   37915             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   37916             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   37917             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   37918             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   37919             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   37920             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   37921             : 
   37922             :       /*! \brief returns a string representing the class name */
   37923             :           virtual std::string class_name() const override;
   37924             : 
   37925             :       /*! \brief returns new style SageIII enum values */
   37926             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   37927             : 
   37928             :       /*! \brief static variant value */
   37929             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   37930             :        // static const VariantT static_variant = V_SgDirectedGraphEdge;
   37931             :           enum { static_variant = V_SgDirectedGraphEdge };
   37932             : 
   37933             :        /* the generated cast function */
   37934             :       /*! \brief Casts pointer from base class to derived class */
   37935             :           ROSE_DLL_API friend       SgDirectedGraphEdge* isSgDirectedGraphEdge(       SgNode * s );
   37936             : 
   37937             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   37938             :           ROSE_DLL_API friend const SgDirectedGraphEdge* isSgDirectedGraphEdge( const SgNode * s );
   37939             : 
   37940             :      // ******************************************
   37941             :      // * Memory Pool / New / Delete
   37942             :      // ******************************************
   37943             : 
   37944             :      public:
   37945             :           /// \private
   37946             :           static const unsigned pool_size; //
   37947             :           /// \private
   37948             :           static std::vector<unsigned char *> pools; //
   37949             :           /// \private
   37950             :           static SgDirectedGraphEdge * next_node; // 
   37951             : 
   37952             :           /// \private
   37953             :           static unsigned long initializeStorageClassArray(SgDirectedGraphEdgeStorageClass *); //
   37954             : 
   37955             :           /// \private
   37956             :           static void clearMemoryPool(); //
   37957             :           static void deleteMemoryPool(); //
   37958             : 
   37959             :           /// \private
   37960             :           static void extendMemoryPoolForFileIO(); //
   37961             : 
   37962             :           /// \private
   37963             :           static SgDirectedGraphEdge * getPointerFromGlobalIndex(unsigned long); //
   37964             :           /// \private
   37965             :           static SgDirectedGraphEdge * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   37966             : 
   37967             :           /// \private
   37968             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   37969             :           /// \private
   37970             :           static void resetValidFreepointers(); //
   37971             :           /// \private
   37972             :           static unsigned long getNumberOfLastValidPointer(); //
   37973             : 
   37974             : 
   37975             : #if defined(INLINE_FUNCTIONS)
   37976             :       /*! \brief returns pointer to newly allocated IR node */
   37977             :           inline void *operator new (size_t size);
   37978             : #else
   37979             :       /*! \brief returns pointer to newly allocated IR node */
   37980             :           void *operator new (size_t size);
   37981             : #endif
   37982             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   37983             :           void operator delete (void* pointer, size_t size);
   37984             : 
   37985             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   37986           0 :           void operator delete (void* pointer)
   37987             :              {
   37988             :             // This is the generated delete operator...
   37989           0 :                SgDirectedGraphEdge::operator delete (pointer,sizeof(SgDirectedGraphEdge));
   37990             :              }
   37991             : 
   37992             :       /*! \brief Returns the total number of IR nodes of this type */
   37993             :           static size_t numberOfNodes();
   37994             : 
   37995             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   37996             :           static size_t memoryUsage();
   37997             : 
   37998             :       // End of scope which started in IR nodes specific code 
   37999             :       /* */
   38000             : 
   38001             :       /* name Internal Functions
   38002             :           \brief Internal functions ... incomplete-documentation
   38003             : 
   38004             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38005             :           or by particularly knowledgeable users for specialized tools or applications.
   38006             : 
   38007             :           \internal We could not make these private because they are required by user for special purposes. And 
   38008             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   38009             :          
   38010             :        */
   38011             : 
   38012             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   38013             :        // overridden in every class by *generated* implementation
   38014             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   38015             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   38016             :        // MS: 06/28/02 container of names of variables or container indices 
   38017             :        // used used in the traversal to access AST successor nodes
   38018             :        // overridden in every class by *generated* implementation
   38019             :       /*! \brief container of names of variables or container indices used used in the traversal
   38020             :           to access AST successor nodes overridden in every class by *generated* implementation */
   38021             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   38022             : 
   38023             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   38024             :        // than all the vector copies. The implementation for these functions is generated for each class.
   38025             :       /*! \brief return number of children in the traversal successor list */
   38026             :           virtual size_t get_numberOfTraversalSuccessors() override;
   38027             :       /*! \brief index-based access to traversal successors by index number */
   38028             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   38029             :       /*! \brief index-based access to traversal successors by child node */
   38030             :           virtual size_t get_childIndex(SgNode *child) override;
   38031             : 
   38032             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   38033             :        // MS: 08/16/2002 method for generating RTI information
   38034             :       /*! \brief return C++ Runtime-Time-Information */
   38035             :           virtual RTIReturnType roseRTI() override;
   38036             : #endif
   38037             :       /* */
   38038             : 
   38039             : 
   38040             : 
   38041             :       /* name Deprecated Functions
   38042             :           \brief Deprecated functions ... incomplete-documentation
   38043             : 
   38044             :           These functions have been deprecated from use.
   38045             :        */
   38046             :       /* */
   38047             : 
   38048             :       /*! returns a C style string (char*) representing the class name */
   38049             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   38050             : 
   38051             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   38052             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   38053             : #if 0
   38054             :       /*! returns old style Sage II enum values */
   38055             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   38056             :       /*! returns old style Sage II enum values */
   38057             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   38058             : #endif
   38059             :       /* */
   38060             : 
   38061             : 
   38062             : 
   38063             : 
   38064             :      public:
   38065             :       /* name Traversal Support Functions
   38066             :           \brief Traversal support functions ... incomplete-documentation
   38067             : 
   38068             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38069             :           or by particularly knowledgable users for specialized tools or applications.
   38070             :        */
   38071             :       /* */
   38072             : 
   38073             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   38074             :        // (inferior to ROSE traversal mechanism, experimental).
   38075             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   38076             :        */
   38077             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   38078             : 
   38079             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   38080             :       /*! \brief support for the classic visitor pattern done in GoF */
   38081             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   38082             : 
   38083             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   38084             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   38085             :        */
   38086             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   38087             : 
   38088             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   38089             :        */
   38090             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   38091             : 
   38092             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   38093             :        // This traversal helps support internal tools that call static member functions.
   38094             :        // note: this function operates on the memory pools.
   38095             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   38096             :        */
   38097             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   38098             :       /* */
   38099             : 
   38100             : 
   38101             :      public:
   38102             :       /* name Memory Allocation Functions
   38103             :           \brief Memory allocations functions ... incomplete-documentation
   38104             : 
   38105             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38106             :           or by particularly knowledgable users for specialized tools or applications.
   38107             :        */
   38108             :       /* */
   38109             : 
   38110             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   38111             : 
   38112             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   38113             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   38114             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   38115             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   38116             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   38117             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   38118             :           being used with the AST File I/O mechanism.
   38119             :        */
   38120             :           virtual bool isInMemoryPool() override;
   38121             : 
   38122             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   38123             : 
   38124             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   38125             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   38126             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   38127             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   38128             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   38129             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   38130             :           being used with the AST File I/O mechanism.
   38131             :        */
   38132             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   38133             : 
   38134             :       // DQ (4/30/2006): Modified to be a const function.
   38135             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   38136             : 
   38137             :           This functions is part of general support for many possible tools to operate 
   38138             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   38139             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   38140             :           less than the set of pointers used by the AST file I/O. This is part of
   38141             :           work implemented by Andreas, and support tools such as the AST graph generation.
   38142             : 
   38143             :           \warning This function can return unexpected data members and thus the 
   38144             :                    order and the number of elements is unpredicable and subject 
   38145             :                    to change.
   38146             : 
   38147             :           \returns STL vector of pairs of SgNode* and strings
   38148             :        */
   38149             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   38150             : 
   38151             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   38152             : 
   38153             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   38154             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   38155             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   38156             : 
   38157             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   38158             :                    and subject to change.
   38159             :        */
   38160             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   38161             : 
   38162             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   38163             : 
   38164             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   38165             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   38166             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   38167             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   38168             : 
   38169             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   38170             : 
   38171             :           \returns long
   38172             :        */
   38173             :           virtual long getChildIndex( SgNode* childNode ) const override;
   38174             : 
   38175             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   38176             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   38177             :       /* \brief Constructor for use by AST File I/O Mechanism
   38178             : 
   38179             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   38180             :           which obtained via fast binary file I/O from disk.
   38181             :        */
   38182             :        // SgDirectedGraphEdge( SgDirectedGraphEdgeStorageClass& source );
   38183             : 
   38184             : 
   38185             : 
   38186             : 
   38187             : 
   38188             :  // JH (10/24/2005): methods added to support the ast file IO
   38189             :     private:
   38190             : 
   38191             :       /* name AST Memory Allocation Support Functions
   38192             :           \brief Memory allocations support....
   38193             : 
   38194             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   38195             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   38196             :           and support the AST File I/O Mechanism.
   38197             :        */
   38198             :       /* */
   38199             : 
   38200             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   38201             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   38202             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   38203             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   38204             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   38205             :           a correspinding one in the AST_FILE_IO class!
   38206             :        */
   38207             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   38208             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   38209             :       /* \brief Typedef used for low level memory access.
   38210             :        */
   38211             :        // typedef unsigned char* TestType;
   38212             : 
   38213             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   38214             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   38215             :       /* \brief Typedef used to hold memory addresses as values.
   38216             :        */
   38217             :        // typedef unsigned long  AddressType;
   38218             : 
   38219             : 
   38220             : 
   38221             :        // necessary, to have direct access to the p_freepointer and the private methods !
   38222             :       /*! \brief friend class declaration to support AST File I/O */
   38223             :           friend class AST_FILE_IO;
   38224             : 
   38225             :       /*! \brief friend class declaration to support AST File I/O */
   38226             :           friend class SgDirectedGraphEdgeStorageClass;
   38227             : 
   38228             :       /*! \brief friend class declaration to support AST File I/O */
   38229             :           friend class AstSpecificDataManagingClass;
   38230             : 
   38231             :       /*! \brief friend class declaration to support AST File I/O */
   38232             :           friend class AstSpecificDataManagingClassStorageClass;
   38233             :     public:
   38234             :       /*! \brief IR node constructor to support AST File I/O */
   38235             :           SgDirectedGraphEdge( const SgDirectedGraphEdgeStorageClass& source );
   38236             : 
   38237             :  // private: // JJW hack
   38238             :        /*
   38239             :           name AST Memory Allocation Support Variables
   38240             :           Memory allocations support variables 
   38241             : 
   38242             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   38243             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   38244             :           and support the AST File I/O Mechanism.
   38245             :        */
   38246             :       /* */
   38247             : 
   38248             :     public:
   38249             : 
   38250             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   38251             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   38252             :       // virtual SgNode* addRegExpAttribute();
   38253             :       /*! \brief Support for AST matching using regular expression.
   38254             : 
   38255             :           This support is incomplete and the subject of current research to define 
   38256             :           RegEx trees to support inexact matching.
   38257             :        */
   38258             :           SgDirectedGraphEdge* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   38259             : 
   38260             : // *** COMMON CODE SECTION ENDS HERE ***
   38261             : 
   38262             : 
   38263             : // End of memberFunctionString
   38264             : // Start of memberFunctionString
   38265             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   38266             : 
   38267             :      // the generated cast function
   38268             :      // friend ROSE_DLL_API SgDirectedGraphEdge* isSgDirectedGraphEdge ( SgNode* s );
   38269             : 
   38270             :           typedef SgGraphEdge base_node_type;
   38271             : 
   38272             : 
   38273             : // End of memberFunctionString
   38274             : 
   38275             : 
   38276             :      public: 
   38277             :          virtual ~SgDirectedGraphEdge();
   38278             : 
   38279             : 
   38280             :      public: 
   38281             :          SgDirectedGraphEdge(SgGraphNode* node_A = NULL, SgGraphNode* node_B = NULL, std::string name = ""); 
   38282             : 
   38283             :     protected:
   38284             : 
   38285             :     friend struct Rose::Traits::generated::describe_node_t<SgDirectedGraphEdge>;
   38286             : 
   38287             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38288             : 
   38289             : 
   38290             :    };
   38291             : #endif
   38292             : 
   38293             : // postdeclarations for SgDirectedGraphEdge
   38294             : 
   38295             : /* #line 38296 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38296             : 
   38297             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   38298             : 
   38299             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38300             : 
   38301             : 
   38302             : /* #line 38303 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38303             : 
   38304             : 
   38305             : 
   38306             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38307             : 
   38308             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   38309             : //      This code is automatically generated for each 
   38310             : //      terminal and non-terminal within the defined 
   38311             : //      grammar.  There is a simple way to change the 
   38312             : //      code to fix bugs etc.  See the ROSE README file
   38313             : //      for directions.
   38314             : 
   38315             : // tps: (02/22/2010): Adding DLL export requirements
   38316             : #include "rosedll.h"
   38317             : 
   38318             : // predeclarations for SgUndirectedGraphEdge
   38319             : 
   38320             : /* #line 38321 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38321             : 
   38322             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   38323             : 
   38324             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38325             : 
   38326             : #if 1
   38327             : // Class Definition for SgUndirectedGraphEdge
   38328             : class ROSE_DLL_API SgUndirectedGraphEdge  : public SgGraphEdge
   38329             :    {
   38330             :      public:
   38331             : 
   38332             : 
   38333             : /* #line 38334 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38334             : 
   38335             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   38336             : // Start of memberFunctionString
   38337             : /* #line 730 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   38338             : 
   38339             :           SgGraphNode* get_node1() { return p_node_A; }
   38340             :           SgGraphNode* get_node2() { return p_node_B; }
   38341             : 
   38342             : 
   38343             : // End of memberFunctionString
   38344             : // Start of memberFunctionString
   38345             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   38346             : 
   38347             : // *** COMMON CODE SECTION BEGINS HERE ***
   38348             : 
   38349             :     public:
   38350             : 
   38351             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   38352             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   38353             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   38354             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   38355             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   38356             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   38357             : 
   38358             :       /*! \brief returns a string representing the class name */
   38359             :           virtual std::string class_name() const override;
   38360             : 
   38361             :       /*! \brief returns new style SageIII enum values */
   38362             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   38363             : 
   38364             :       /*! \brief static variant value */
   38365             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   38366             :        // static const VariantT static_variant = V_SgUndirectedGraphEdge;
   38367             :           enum { static_variant = V_SgUndirectedGraphEdge };
   38368             : 
   38369             :        /* the generated cast function */
   38370             :       /*! \brief Casts pointer from base class to derived class */
   38371             :           ROSE_DLL_API friend       SgUndirectedGraphEdge* isSgUndirectedGraphEdge(       SgNode * s );
   38372             : 
   38373             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   38374             :           ROSE_DLL_API friend const SgUndirectedGraphEdge* isSgUndirectedGraphEdge( const SgNode * s );
   38375             : 
   38376             :      // ******************************************
   38377             :      // * Memory Pool / New / Delete
   38378             :      // ******************************************
   38379             : 
   38380             :      public:
   38381             :           /// \private
   38382             :           static const unsigned pool_size; //
   38383             :           /// \private
   38384             :           static std::vector<unsigned char *> pools; //
   38385             :           /// \private
   38386             :           static SgUndirectedGraphEdge * next_node; // 
   38387             : 
   38388             :           /// \private
   38389             :           static unsigned long initializeStorageClassArray(SgUndirectedGraphEdgeStorageClass *); //
   38390             : 
   38391             :           /// \private
   38392             :           static void clearMemoryPool(); //
   38393             :           static void deleteMemoryPool(); //
   38394             : 
   38395             :           /// \private
   38396             :           static void extendMemoryPoolForFileIO(); //
   38397             : 
   38398             :           /// \private
   38399             :           static SgUndirectedGraphEdge * getPointerFromGlobalIndex(unsigned long); //
   38400             :           /// \private
   38401             :           static SgUndirectedGraphEdge * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   38402             : 
   38403             :           /// \private
   38404             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   38405             :           /// \private
   38406             :           static void resetValidFreepointers(); //
   38407             :           /// \private
   38408             :           static unsigned long getNumberOfLastValidPointer(); //
   38409             : 
   38410             : 
   38411             : #if defined(INLINE_FUNCTIONS)
   38412             :       /*! \brief returns pointer to newly allocated IR node */
   38413             :           inline void *operator new (size_t size);
   38414             : #else
   38415             :       /*! \brief returns pointer to newly allocated IR node */
   38416             :           void *operator new (size_t size);
   38417             : #endif
   38418             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   38419             :           void operator delete (void* pointer, size_t size);
   38420             : 
   38421             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   38422           0 :           void operator delete (void* pointer)
   38423             :              {
   38424             :             // This is the generated delete operator...
   38425           0 :                SgUndirectedGraphEdge::operator delete (pointer,sizeof(SgUndirectedGraphEdge));
   38426             :              }
   38427             : 
   38428             :       /*! \brief Returns the total number of IR nodes of this type */
   38429             :           static size_t numberOfNodes();
   38430             : 
   38431             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   38432             :           static size_t memoryUsage();
   38433             : 
   38434             :       // End of scope which started in IR nodes specific code 
   38435             :       /* */
   38436             : 
   38437             :       /* name Internal Functions
   38438             :           \brief Internal functions ... incomplete-documentation
   38439             : 
   38440             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38441             :           or by particularly knowledgeable users for specialized tools or applications.
   38442             : 
   38443             :           \internal We could not make these private because they are required by user for special purposes. And 
   38444             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   38445             :          
   38446             :        */
   38447             : 
   38448             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   38449             :        // overridden in every class by *generated* implementation
   38450             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   38451             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   38452             :        // MS: 06/28/02 container of names of variables or container indices 
   38453             :        // used used in the traversal to access AST successor nodes
   38454             :        // overridden in every class by *generated* implementation
   38455             :       /*! \brief container of names of variables or container indices used used in the traversal
   38456             :           to access AST successor nodes overridden in every class by *generated* implementation */
   38457             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   38458             : 
   38459             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   38460             :        // than all the vector copies. The implementation for these functions is generated for each class.
   38461             :       /*! \brief return number of children in the traversal successor list */
   38462             :           virtual size_t get_numberOfTraversalSuccessors() override;
   38463             :       /*! \brief index-based access to traversal successors by index number */
   38464             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   38465             :       /*! \brief index-based access to traversal successors by child node */
   38466             :           virtual size_t get_childIndex(SgNode *child) override;
   38467             : 
   38468             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   38469             :        // MS: 08/16/2002 method for generating RTI information
   38470             :       /*! \brief return C++ Runtime-Time-Information */
   38471             :           virtual RTIReturnType roseRTI() override;
   38472             : #endif
   38473             :       /* */
   38474             : 
   38475             : 
   38476             : 
   38477             :       /* name Deprecated Functions
   38478             :           \brief Deprecated functions ... incomplete-documentation
   38479             : 
   38480             :           These functions have been deprecated from use.
   38481             :        */
   38482             :       /* */
   38483             : 
   38484             :       /*! returns a C style string (char*) representing the class name */
   38485             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   38486             : 
   38487             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   38488             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   38489             : #if 0
   38490             :       /*! returns old style Sage II enum values */
   38491             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   38492             :       /*! returns old style Sage II enum values */
   38493             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   38494             : #endif
   38495             :       /* */
   38496             : 
   38497             : 
   38498             : 
   38499             : 
   38500             :      public:
   38501             :       /* name Traversal Support Functions
   38502             :           \brief Traversal support functions ... incomplete-documentation
   38503             : 
   38504             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38505             :           or by particularly knowledgable users for specialized tools or applications.
   38506             :        */
   38507             :       /* */
   38508             : 
   38509             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   38510             :        // (inferior to ROSE traversal mechanism, experimental).
   38511             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   38512             :        */
   38513             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   38514             : 
   38515             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   38516             :       /*! \brief support for the classic visitor pattern done in GoF */
   38517             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   38518             : 
   38519             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   38520             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   38521             :        */
   38522             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   38523             : 
   38524             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   38525             :        */
   38526             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   38527             : 
   38528             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   38529             :        // This traversal helps support internal tools that call static member functions.
   38530             :        // note: this function operates on the memory pools.
   38531             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   38532             :        */
   38533             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   38534             :       /* */
   38535             : 
   38536             : 
   38537             :      public:
   38538             :       /* name Memory Allocation Functions
   38539             :           \brief Memory allocations functions ... incomplete-documentation
   38540             : 
   38541             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38542             :           or by particularly knowledgable users for specialized tools or applications.
   38543             :        */
   38544             :       /* */
   38545             : 
   38546             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   38547             : 
   38548             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   38549             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   38550             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   38551             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   38552             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   38553             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   38554             :           being used with the AST File I/O mechanism.
   38555             :        */
   38556             :           virtual bool isInMemoryPool() override;
   38557             : 
   38558             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   38559             : 
   38560             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   38561             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   38562             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   38563             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   38564             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   38565             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   38566             :           being used with the AST File I/O mechanism.
   38567             :        */
   38568             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   38569             : 
   38570             :       // DQ (4/30/2006): Modified to be a const function.
   38571             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   38572             : 
   38573             :           This functions is part of general support for many possible tools to operate 
   38574             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   38575             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   38576             :           less than the set of pointers used by the AST file I/O. This is part of
   38577             :           work implemented by Andreas, and support tools such as the AST graph generation.
   38578             : 
   38579             :           \warning This function can return unexpected data members and thus the 
   38580             :                    order and the number of elements is unpredicable and subject 
   38581             :                    to change.
   38582             : 
   38583             :           \returns STL vector of pairs of SgNode* and strings
   38584             :        */
   38585             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   38586             : 
   38587             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   38588             : 
   38589             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   38590             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   38591             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   38592             : 
   38593             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   38594             :                    and subject to change.
   38595             :        */
   38596             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   38597             : 
   38598             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   38599             : 
   38600             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   38601             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   38602             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   38603             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   38604             : 
   38605             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   38606             : 
   38607             :           \returns long
   38608             :        */
   38609             :           virtual long getChildIndex( SgNode* childNode ) const override;
   38610             : 
   38611             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   38612             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   38613             :       /* \brief Constructor for use by AST File I/O Mechanism
   38614             : 
   38615             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   38616             :           which obtained via fast binary file I/O from disk.
   38617             :        */
   38618             :        // SgUndirectedGraphEdge( SgUndirectedGraphEdgeStorageClass& source );
   38619             : 
   38620             : 
   38621             : 
   38622             : 
   38623             : 
   38624             :  // JH (10/24/2005): methods added to support the ast file IO
   38625             :     private:
   38626             : 
   38627             :       /* name AST Memory Allocation Support Functions
   38628             :           \brief Memory allocations support....
   38629             : 
   38630             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   38631             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   38632             :           and support the AST File I/O Mechanism.
   38633             :        */
   38634             :       /* */
   38635             : 
   38636             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   38637             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   38638             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   38639             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   38640             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   38641             :           a correspinding one in the AST_FILE_IO class!
   38642             :        */
   38643             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   38644             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   38645             :       /* \brief Typedef used for low level memory access.
   38646             :        */
   38647             :        // typedef unsigned char* TestType;
   38648             : 
   38649             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   38650             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   38651             :       /* \brief Typedef used to hold memory addresses as values.
   38652             :        */
   38653             :        // typedef unsigned long  AddressType;
   38654             : 
   38655             : 
   38656             : 
   38657             :        // necessary, to have direct access to the p_freepointer and the private methods !
   38658             :       /*! \brief friend class declaration to support AST File I/O */
   38659             :           friend class AST_FILE_IO;
   38660             : 
   38661             :       /*! \brief friend class declaration to support AST File I/O */
   38662             :           friend class SgUndirectedGraphEdgeStorageClass;
   38663             : 
   38664             :       /*! \brief friend class declaration to support AST File I/O */
   38665             :           friend class AstSpecificDataManagingClass;
   38666             : 
   38667             :       /*! \brief friend class declaration to support AST File I/O */
   38668             :           friend class AstSpecificDataManagingClassStorageClass;
   38669             :     public:
   38670             :       /*! \brief IR node constructor to support AST File I/O */
   38671             :           SgUndirectedGraphEdge( const SgUndirectedGraphEdgeStorageClass& source );
   38672             : 
   38673             :  // private: // JJW hack
   38674             :        /*
   38675             :           name AST Memory Allocation Support Variables
   38676             :           Memory allocations support variables 
   38677             : 
   38678             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   38679             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   38680             :           and support the AST File I/O Mechanism.
   38681             :        */
   38682             :       /* */
   38683             : 
   38684             :     public:
   38685             : 
   38686             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   38687             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   38688             :       // virtual SgNode* addRegExpAttribute();
   38689             :       /*! \brief Support for AST matching using regular expression.
   38690             : 
   38691             :           This support is incomplete and the subject of current research to define 
   38692             :           RegEx trees to support inexact matching.
   38693             :        */
   38694             :           SgUndirectedGraphEdge* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   38695             : 
   38696             : // *** COMMON CODE SECTION ENDS HERE ***
   38697             : 
   38698             : 
   38699             : // End of memberFunctionString
   38700             : // Start of memberFunctionString
   38701             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   38702             : 
   38703             :      // the generated cast function
   38704             :      // friend ROSE_DLL_API SgUndirectedGraphEdge* isSgUndirectedGraphEdge ( SgNode* s );
   38705             : 
   38706             :           typedef SgGraphEdge base_node_type;
   38707             : 
   38708             : 
   38709             : // End of memberFunctionString
   38710             : 
   38711             : 
   38712             :      public: 
   38713             :          virtual ~SgUndirectedGraphEdge();
   38714             : 
   38715             : 
   38716             :      public: 
   38717             :          SgUndirectedGraphEdge(SgGraphNode* node_A = NULL, SgGraphNode* node_B = NULL, std::string name = ""); 
   38718             : 
   38719             :     protected:
   38720             : 
   38721             :     friend struct Rose::Traits::generated::describe_node_t<SgUndirectedGraphEdge>;
   38722             : 
   38723             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38724             : 
   38725             : 
   38726             :    };
   38727             : #endif
   38728             : 
   38729             : // postdeclarations for SgUndirectedGraphEdge
   38730             : 
   38731             : /* #line 38732 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38732             : 
   38733             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   38734             : 
   38735             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38736             : 
   38737             : 
   38738             : /* #line 38739 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38739             : 
   38740             : 
   38741             : 
   38742             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38743             : 
   38744             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   38745             : //      This code is automatically generated for each 
   38746             : //      terminal and non-terminal within the defined 
   38747             : //      grammar.  There is a simple way to change the 
   38748             : //      code to fix bugs etc.  See the ROSE README file
   38749             : //      for directions.
   38750             : 
   38751             : // tps: (02/22/2010): Adding DLL export requirements
   38752             : #include "rosedll.h"
   38753             : 
   38754             : // predeclarations for SgGraphNodeList
   38755             : 
   38756             : /* #line 38757 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38757             : 
   38758             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   38759             : 
   38760             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   38761             : 
   38762             : #if 1
   38763             : // Class Definition for SgGraphNodeList
   38764             : class ROSE_DLL_API SgGraphNodeList  : public SgSupport
   38765             :    {
   38766             :      public:
   38767             : 
   38768             : 
   38769             : /* #line 38770 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   38770             : 
   38771             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   38772             : // Start of memberFunctionString
   38773             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   38774             : 
   38775             : // *** COMMON CODE SECTION BEGINS HERE ***
   38776             : 
   38777             :     public:
   38778             : 
   38779             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   38780             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   38781             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   38782             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   38783             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   38784             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   38785             : 
   38786             :       /*! \brief returns a string representing the class name */
   38787             :           virtual std::string class_name() const override;
   38788             : 
   38789             :       /*! \brief returns new style SageIII enum values */
   38790             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   38791             : 
   38792             :       /*! \brief static variant value */
   38793             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   38794             :        // static const VariantT static_variant = V_SgGraphNodeList;
   38795             :           enum { static_variant = V_SgGraphNodeList };
   38796             : 
   38797             :        /* the generated cast function */
   38798             :       /*! \brief Casts pointer from base class to derived class */
   38799             :           ROSE_DLL_API friend       SgGraphNodeList* isSgGraphNodeList(       SgNode * s );
   38800             : 
   38801             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   38802             :           ROSE_DLL_API friend const SgGraphNodeList* isSgGraphNodeList( const SgNode * s );
   38803             : 
   38804             :      // ******************************************
   38805             :      // * Memory Pool / New / Delete
   38806             :      // ******************************************
   38807             : 
   38808             :      public:
   38809             :           /// \private
   38810             :           static const unsigned pool_size; //
   38811             :           /// \private
   38812             :           static std::vector<unsigned char *> pools; //
   38813             :           /// \private
   38814             :           static SgGraphNodeList * next_node; // 
   38815             : 
   38816             :           /// \private
   38817             :           static unsigned long initializeStorageClassArray(SgGraphNodeListStorageClass *); //
   38818             : 
   38819             :           /// \private
   38820             :           static void clearMemoryPool(); //
   38821             :           static void deleteMemoryPool(); //
   38822             : 
   38823             :           /// \private
   38824             :           static void extendMemoryPoolForFileIO(); //
   38825             : 
   38826             :           /// \private
   38827             :           static SgGraphNodeList * getPointerFromGlobalIndex(unsigned long); //
   38828             :           /// \private
   38829             :           static SgGraphNodeList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   38830             : 
   38831             :           /// \private
   38832             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   38833             :           /// \private
   38834             :           static void resetValidFreepointers(); //
   38835             :           /// \private
   38836             :           static unsigned long getNumberOfLastValidPointer(); //
   38837             : 
   38838             : 
   38839             : #if defined(INLINE_FUNCTIONS)
   38840             :       /*! \brief returns pointer to newly allocated IR node */
   38841             :           inline void *operator new (size_t size);
   38842             : #else
   38843             :       /*! \brief returns pointer to newly allocated IR node */
   38844             :           void *operator new (size_t size);
   38845             : #endif
   38846             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   38847             :           void operator delete (void* pointer, size_t size);
   38848             : 
   38849             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   38850           0 :           void operator delete (void* pointer)
   38851             :              {
   38852             :             // This is the generated delete operator...
   38853           0 :                SgGraphNodeList::operator delete (pointer,sizeof(SgGraphNodeList));
   38854             :              }
   38855             : 
   38856             :       /*! \brief Returns the total number of IR nodes of this type */
   38857             :           static size_t numberOfNodes();
   38858             : 
   38859             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   38860             :           static size_t memoryUsage();
   38861             : 
   38862             :       // End of scope which started in IR nodes specific code 
   38863             :       /* */
   38864             : 
   38865             :       /* name Internal Functions
   38866             :           \brief Internal functions ... incomplete-documentation
   38867             : 
   38868             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38869             :           or by particularly knowledgeable users for specialized tools or applications.
   38870             : 
   38871             :           \internal We could not make these private because they are required by user for special purposes. And 
   38872             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   38873             :          
   38874             :        */
   38875             : 
   38876             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   38877             :        // overridden in every class by *generated* implementation
   38878             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   38879             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   38880             :        // MS: 06/28/02 container of names of variables or container indices 
   38881             :        // used used in the traversal to access AST successor nodes
   38882             :        // overridden in every class by *generated* implementation
   38883             :       /*! \brief container of names of variables or container indices used used in the traversal
   38884             :           to access AST successor nodes overridden in every class by *generated* implementation */
   38885             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   38886             : 
   38887             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   38888             :        // than all the vector copies. The implementation for these functions is generated for each class.
   38889             :       /*! \brief return number of children in the traversal successor list */
   38890             :           virtual size_t get_numberOfTraversalSuccessors() override;
   38891             :       /*! \brief index-based access to traversal successors by index number */
   38892             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   38893             :       /*! \brief index-based access to traversal successors by child node */
   38894             :           virtual size_t get_childIndex(SgNode *child) override;
   38895             : 
   38896             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   38897             :        // MS: 08/16/2002 method for generating RTI information
   38898             :       /*! \brief return C++ Runtime-Time-Information */
   38899             :           virtual RTIReturnType roseRTI() override;
   38900             : #endif
   38901             :       /* */
   38902             : 
   38903             : 
   38904             : 
   38905             :       /* name Deprecated Functions
   38906             :           \brief Deprecated functions ... incomplete-documentation
   38907             : 
   38908             :           These functions have been deprecated from use.
   38909             :        */
   38910             :       /* */
   38911             : 
   38912             :       /*! returns a C style string (char*) representing the class name */
   38913             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   38914             : 
   38915             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   38916             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   38917             : #if 0
   38918             :       /*! returns old style Sage II enum values */
   38919             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   38920             :       /*! returns old style Sage II enum values */
   38921             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   38922             : #endif
   38923             :       /* */
   38924             : 
   38925             : 
   38926             : 
   38927             : 
   38928             :      public:
   38929             :       /* name Traversal Support Functions
   38930             :           \brief Traversal support functions ... incomplete-documentation
   38931             : 
   38932             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38933             :           or by particularly knowledgable users for specialized tools or applications.
   38934             :        */
   38935             :       /* */
   38936             : 
   38937             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   38938             :        // (inferior to ROSE traversal mechanism, experimental).
   38939             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   38940             :        */
   38941             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   38942             : 
   38943             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   38944             :       /*! \brief support for the classic visitor pattern done in GoF */
   38945             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   38946             : 
   38947             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   38948             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   38949             :        */
   38950             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   38951             : 
   38952             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   38953             :        */
   38954             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   38955             : 
   38956             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   38957             :        // This traversal helps support internal tools that call static member functions.
   38958             :        // note: this function operates on the memory pools.
   38959             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   38960             :        */
   38961             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   38962             :       /* */
   38963             : 
   38964             : 
   38965             :      public:
   38966             :       /* name Memory Allocation Functions
   38967             :           \brief Memory allocations functions ... incomplete-documentation
   38968             : 
   38969             :           These functions have been made public as part of the design, but they are suggested for internal use 
   38970             :           or by particularly knowledgable users for specialized tools or applications.
   38971             :        */
   38972             :       /* */
   38973             : 
   38974             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   38975             : 
   38976             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   38977             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   38978             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   38979             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   38980             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   38981             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   38982             :           being used with the AST File I/O mechanism.
   38983             :        */
   38984             :           virtual bool isInMemoryPool() override;
   38985             : 
   38986             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   38987             : 
   38988             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   38989             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   38990             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   38991             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   38992             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   38993             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   38994             :           being used with the AST File I/O mechanism.
   38995             :        */
   38996             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   38997             : 
   38998             :       // DQ (4/30/2006): Modified to be a const function.
   38999             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   39000             : 
   39001             :           This functions is part of general support for many possible tools to operate 
   39002             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   39003             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   39004             :           less than the set of pointers used by the AST file I/O. This is part of
   39005             :           work implemented by Andreas, and support tools such as the AST graph generation.
   39006             : 
   39007             :           \warning This function can return unexpected data members and thus the 
   39008             :                    order and the number of elements is unpredicable and subject 
   39009             :                    to change.
   39010             : 
   39011             :           \returns STL vector of pairs of SgNode* and strings
   39012             :        */
   39013             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   39014             : 
   39015             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   39016             : 
   39017             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   39018             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   39019             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   39020             : 
   39021             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   39022             :                    and subject to change.
   39023             :        */
   39024             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   39025             : 
   39026             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   39027             : 
   39028             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   39029             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   39030             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   39031             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   39032             : 
   39033             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   39034             : 
   39035             :           \returns long
   39036             :        */
   39037             :           virtual long getChildIndex( SgNode* childNode ) const override;
   39038             : 
   39039             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   39040             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39041             :       /* \brief Constructor for use by AST File I/O Mechanism
   39042             : 
   39043             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   39044             :           which obtained via fast binary file I/O from disk.
   39045             :        */
   39046             :        // SgGraphNodeList( SgGraphNodeListStorageClass& source );
   39047             : 
   39048             : 
   39049             : 
   39050             : 
   39051             : 
   39052             :  // JH (10/24/2005): methods added to support the ast file IO
   39053             :     private:
   39054             : 
   39055             :       /* name AST Memory Allocation Support Functions
   39056             :           \brief Memory allocations support....
   39057             : 
   39058             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   39059             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   39060             :           and support the AST File I/O Mechanism.
   39061             :        */
   39062             :       /* */
   39063             : 
   39064             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   39065             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   39066             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   39067             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   39068             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   39069             :           a correspinding one in the AST_FILE_IO class!
   39070             :        */
   39071             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   39072             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39073             :       /* \brief Typedef used for low level memory access.
   39074             :        */
   39075             :        // typedef unsigned char* TestType;
   39076             : 
   39077             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   39078             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39079             :       /* \brief Typedef used to hold memory addresses as values.
   39080             :        */
   39081             :        // typedef unsigned long  AddressType;
   39082             : 
   39083             : 
   39084             : 
   39085             :        // necessary, to have direct access to the p_freepointer and the private methods !
   39086             :       /*! \brief friend class declaration to support AST File I/O */
   39087             :           friend class AST_FILE_IO;
   39088             : 
   39089             :       /*! \brief friend class declaration to support AST File I/O */
   39090             :           friend class SgGraphNodeListStorageClass;
   39091             : 
   39092             :       /*! \brief friend class declaration to support AST File I/O */
   39093             :           friend class AstSpecificDataManagingClass;
   39094             : 
   39095             :       /*! \brief friend class declaration to support AST File I/O */
   39096             :           friend class AstSpecificDataManagingClassStorageClass;
   39097             :     public:
   39098             :       /*! \brief IR node constructor to support AST File I/O */
   39099             :           SgGraphNodeList( const SgGraphNodeListStorageClass& source );
   39100             : 
   39101             :  // private: // JJW hack
   39102             :        /*
   39103             :           name AST Memory Allocation Support Variables
   39104             :           Memory allocations support variables 
   39105             : 
   39106             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   39107             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   39108             :           and support the AST File I/O Mechanism.
   39109             :        */
   39110             :       /* */
   39111             : 
   39112             :     public:
   39113             : 
   39114             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   39115             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   39116             :       // virtual SgNode* addRegExpAttribute();
   39117             :       /*! \brief Support for AST matching using regular expression.
   39118             : 
   39119             :           This support is incomplete and the subject of current research to define 
   39120             :           RegEx trees to support inexact matching.
   39121             :        */
   39122             :           SgGraphNodeList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   39123             : 
   39124             : // *** COMMON CODE SECTION ENDS HERE ***
   39125             : 
   39126             : 
   39127             : // End of memberFunctionString
   39128             : // Start of memberFunctionString
   39129             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   39130             : 
   39131             :      // the generated cast function
   39132             :      // friend ROSE_DLL_API SgGraphNodeList* isSgGraphNodeList ( SgNode* s );
   39133             : 
   39134             :           typedef SgSupport base_node_type;
   39135             : 
   39136             : 
   39137             : // End of memberFunctionString
   39138             : 
   39139             : 
   39140             :      public: 
   39141             :          virtual ~SgGraphNodeList();
   39142             : 
   39143             : 
   39144             :      public: 
   39145             :          SgGraphNodeList(); 
   39146             : 
   39147             :     protected:
   39148             : 
   39149             :     friend struct Rose::Traits::generated::describe_node_t<SgGraphNodeList>;
   39150             : 
   39151             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39152             : 
   39153             : 
   39154             :    };
   39155             : #endif
   39156             : 
   39157             : // postdeclarations for SgGraphNodeList
   39158             : 
   39159             : /* #line 39160 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39160             : 
   39161             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   39162             : 
   39163             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39164             : 
   39165             : 
   39166             : /* #line 39167 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39167             : 
   39168             : 
   39169             : 
   39170             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39171             : 
   39172             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   39173             : //      This code is automatically generated for each 
   39174             : //      terminal and non-terminal within the defined 
   39175             : //      grammar.  There is a simple way to change the 
   39176             : //      code to fix bugs etc.  See the ROSE README file
   39177             : //      for directions.
   39178             : 
   39179             : // tps: (02/22/2010): Adding DLL export requirements
   39180             : #include "rosedll.h"
   39181             : 
   39182             : // predeclarations for SgGraphEdgeList
   39183             : 
   39184             : /* #line 39185 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39185             : 
   39186             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   39187             : 
   39188             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39189             : 
   39190             : #if 1
   39191             : // Class Definition for SgGraphEdgeList
   39192             : class ROSE_DLL_API SgGraphEdgeList  : public SgSupport
   39193             :    {
   39194             :      public:
   39195             : 
   39196             : 
   39197             : /* #line 39198 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39198             : 
   39199             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   39200             : // Start of memberFunctionString
   39201             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   39202             : 
   39203             : // *** COMMON CODE SECTION BEGINS HERE ***
   39204             : 
   39205             :     public:
   39206             : 
   39207             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   39208             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   39209             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   39210             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   39211             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   39212             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   39213             : 
   39214             :       /*! \brief returns a string representing the class name */
   39215             :           virtual std::string class_name() const override;
   39216             : 
   39217             :       /*! \brief returns new style SageIII enum values */
   39218             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   39219             : 
   39220             :       /*! \brief static variant value */
   39221             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   39222             :        // static const VariantT static_variant = V_SgGraphEdgeList;
   39223             :           enum { static_variant = V_SgGraphEdgeList };
   39224             : 
   39225             :        /* the generated cast function */
   39226             :       /*! \brief Casts pointer from base class to derived class */
   39227             :           ROSE_DLL_API friend       SgGraphEdgeList* isSgGraphEdgeList(       SgNode * s );
   39228             : 
   39229             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   39230             :           ROSE_DLL_API friend const SgGraphEdgeList* isSgGraphEdgeList( const SgNode * s );
   39231             : 
   39232             :      // ******************************************
   39233             :      // * Memory Pool / New / Delete
   39234             :      // ******************************************
   39235             : 
   39236             :      public:
   39237             :           /// \private
   39238             :           static const unsigned pool_size; //
   39239             :           /// \private
   39240             :           static std::vector<unsigned char *> pools; //
   39241             :           /// \private
   39242             :           static SgGraphEdgeList * next_node; // 
   39243             : 
   39244             :           /// \private
   39245             :           static unsigned long initializeStorageClassArray(SgGraphEdgeListStorageClass *); //
   39246             : 
   39247             :           /// \private
   39248             :           static void clearMemoryPool(); //
   39249             :           static void deleteMemoryPool(); //
   39250             : 
   39251             :           /// \private
   39252             :           static void extendMemoryPoolForFileIO(); //
   39253             : 
   39254             :           /// \private
   39255             :           static SgGraphEdgeList * getPointerFromGlobalIndex(unsigned long); //
   39256             :           /// \private
   39257             :           static SgGraphEdgeList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   39258             : 
   39259             :           /// \private
   39260             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   39261             :           /// \private
   39262             :           static void resetValidFreepointers(); //
   39263             :           /// \private
   39264             :           static unsigned long getNumberOfLastValidPointer(); //
   39265             : 
   39266             : 
   39267             : #if defined(INLINE_FUNCTIONS)
   39268             :       /*! \brief returns pointer to newly allocated IR node */
   39269             :           inline void *operator new (size_t size);
   39270             : #else
   39271             :       /*! \brief returns pointer to newly allocated IR node */
   39272             :           void *operator new (size_t size);
   39273             : #endif
   39274             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   39275             :           void operator delete (void* pointer, size_t size);
   39276             : 
   39277             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   39278           0 :           void operator delete (void* pointer)
   39279             :              {
   39280             :             // This is the generated delete operator...
   39281           0 :                SgGraphEdgeList::operator delete (pointer,sizeof(SgGraphEdgeList));
   39282             :              }
   39283             : 
   39284             :       /*! \brief Returns the total number of IR nodes of this type */
   39285             :           static size_t numberOfNodes();
   39286             : 
   39287             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   39288             :           static size_t memoryUsage();
   39289             : 
   39290             :       // End of scope which started in IR nodes specific code 
   39291             :       /* */
   39292             : 
   39293             :       /* name Internal Functions
   39294             :           \brief Internal functions ... incomplete-documentation
   39295             : 
   39296             :           These functions have been made public as part of the design, but they are suggested for internal use 
   39297             :           or by particularly knowledgeable users for specialized tools or applications.
   39298             : 
   39299             :           \internal We could not make these private because they are required by user for special purposes. And 
   39300             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   39301             :          
   39302             :        */
   39303             : 
   39304             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   39305             :        // overridden in every class by *generated* implementation
   39306             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   39307             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   39308             :        // MS: 06/28/02 container of names of variables or container indices 
   39309             :        // used used in the traversal to access AST successor nodes
   39310             :        // overridden in every class by *generated* implementation
   39311             :       /*! \brief container of names of variables or container indices used used in the traversal
   39312             :           to access AST successor nodes overridden in every class by *generated* implementation */
   39313             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   39314             : 
   39315             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   39316             :        // than all the vector copies. The implementation for these functions is generated for each class.
   39317             :       /*! \brief return number of children in the traversal successor list */
   39318             :           virtual size_t get_numberOfTraversalSuccessors() override;
   39319             :       /*! \brief index-based access to traversal successors by index number */
   39320             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   39321             :       /*! \brief index-based access to traversal successors by child node */
   39322             :           virtual size_t get_childIndex(SgNode *child) override;
   39323             : 
   39324             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   39325             :        // MS: 08/16/2002 method for generating RTI information
   39326             :       /*! \brief return C++ Runtime-Time-Information */
   39327             :           virtual RTIReturnType roseRTI() override;
   39328             : #endif
   39329             :       /* */
   39330             : 
   39331             : 
   39332             : 
   39333             :       /* name Deprecated Functions
   39334             :           \brief Deprecated functions ... incomplete-documentation
   39335             : 
   39336             :           These functions have been deprecated from use.
   39337             :        */
   39338             :       /* */
   39339             : 
   39340             :       /*! returns a C style string (char*) representing the class name */
   39341             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   39342             : 
   39343             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   39344             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   39345             : #if 0
   39346             :       /*! returns old style Sage II enum values */
   39347             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   39348             :       /*! returns old style Sage II enum values */
   39349             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   39350             : #endif
   39351             :       /* */
   39352             : 
   39353             : 
   39354             : 
   39355             : 
   39356             :      public:
   39357             :       /* name Traversal Support Functions
   39358             :           \brief Traversal support functions ... incomplete-documentation
   39359             : 
   39360             :           These functions have been made public as part of the design, but they are suggested for internal use 
   39361             :           or by particularly knowledgable users for specialized tools or applications.
   39362             :        */
   39363             :       /* */
   39364             : 
   39365             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   39366             :        // (inferior to ROSE traversal mechanism, experimental).
   39367             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   39368             :        */
   39369             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   39370             : 
   39371             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   39372             :       /*! \brief support for the classic visitor pattern done in GoF */
   39373             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   39374             : 
   39375             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   39376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   39377             :        */
   39378             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   39379             : 
   39380             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   39381             :        */
   39382             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   39383             : 
   39384             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   39385             :        // This traversal helps support internal tools that call static member functions.
   39386             :        // note: this function operates on the memory pools.
   39387             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   39388             :        */
   39389             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   39390             :       /* */
   39391             : 
   39392             : 
   39393             :      public:
   39394             :       /* name Memory Allocation Functions
   39395             :           \brief Memory allocations functions ... incomplete-documentation
   39396             : 
   39397             :           These functions have been made public as part of the design, but they are suggested for internal use 
   39398             :           or by particularly knowledgable users for specialized tools or applications.
   39399             :        */
   39400             :       /* */
   39401             : 
   39402             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   39403             : 
   39404             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   39405             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   39406             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   39407             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   39408             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   39409             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   39410             :           being used with the AST File I/O mechanism.
   39411             :        */
   39412             :           virtual bool isInMemoryPool() override;
   39413             : 
   39414             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   39415             : 
   39416             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   39417             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   39418             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   39419             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   39420             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   39421             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   39422             :           being used with the AST File I/O mechanism.
   39423             :        */
   39424             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   39425             : 
   39426             :       // DQ (4/30/2006): Modified to be a const function.
   39427             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   39428             : 
   39429             :           This functions is part of general support for many possible tools to operate 
   39430             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   39431             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   39432             :           less than the set of pointers used by the AST file I/O. This is part of
   39433             :           work implemented by Andreas, and support tools such as the AST graph generation.
   39434             : 
   39435             :           \warning This function can return unexpected data members and thus the 
   39436             :                    order and the number of elements is unpredicable and subject 
   39437             :                    to change.
   39438             : 
   39439             :           \returns STL vector of pairs of SgNode* and strings
   39440             :        */
   39441             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   39442             : 
   39443             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   39444             : 
   39445             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   39446             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   39447             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   39448             : 
   39449             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   39450             :                    and subject to change.
   39451             :        */
   39452             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   39453             : 
   39454             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   39455             : 
   39456             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   39457             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   39458             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   39459             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   39460             : 
   39461             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   39462             : 
   39463             :           \returns long
   39464             :        */
   39465             :           virtual long getChildIndex( SgNode* childNode ) const override;
   39466             : 
   39467             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   39468             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39469             :       /* \brief Constructor for use by AST File I/O Mechanism
   39470             : 
   39471             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   39472             :           which obtained via fast binary file I/O from disk.
   39473             :        */
   39474             :        // SgGraphEdgeList( SgGraphEdgeListStorageClass& source );
   39475             : 
   39476             : 
   39477             : 
   39478             : 
   39479             : 
   39480             :  // JH (10/24/2005): methods added to support the ast file IO
   39481             :     private:
   39482             : 
   39483             :       /* name AST Memory Allocation Support Functions
   39484             :           \brief Memory allocations support....
   39485             : 
   39486             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   39487             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   39488             :           and support the AST File I/O Mechanism.
   39489             :        */
   39490             :       /* */
   39491             : 
   39492             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   39493             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   39494             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   39495             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   39496             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   39497             :           a correspinding one in the AST_FILE_IO class!
   39498             :        */
   39499             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   39500             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39501             :       /* \brief Typedef used for low level memory access.
   39502             :        */
   39503             :        // typedef unsigned char* TestType;
   39504             : 
   39505             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   39506             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39507             :       /* \brief Typedef used to hold memory addresses as values.
   39508             :        */
   39509             :        // typedef unsigned long  AddressType;
   39510             : 
   39511             : 
   39512             : 
   39513             :        // necessary, to have direct access to the p_freepointer and the private methods !
   39514             :       /*! \brief friend class declaration to support AST File I/O */
   39515             :           friend class AST_FILE_IO;
   39516             : 
   39517             :       /*! \brief friend class declaration to support AST File I/O */
   39518             :           friend class SgGraphEdgeListStorageClass;
   39519             : 
   39520             :       /*! \brief friend class declaration to support AST File I/O */
   39521             :           friend class AstSpecificDataManagingClass;
   39522             : 
   39523             :       /*! \brief friend class declaration to support AST File I/O */
   39524             :           friend class AstSpecificDataManagingClassStorageClass;
   39525             :     public:
   39526             :       /*! \brief IR node constructor to support AST File I/O */
   39527             :           SgGraphEdgeList( const SgGraphEdgeListStorageClass& source );
   39528             : 
   39529             :  // private: // JJW hack
   39530             :        /*
   39531             :           name AST Memory Allocation Support Variables
   39532             :           Memory allocations support variables 
   39533             : 
   39534             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   39535             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   39536             :           and support the AST File I/O Mechanism.
   39537             :        */
   39538             :       /* */
   39539             : 
   39540             :     public:
   39541             : 
   39542             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   39543             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   39544             :       // virtual SgNode* addRegExpAttribute();
   39545             :       /*! \brief Support for AST matching using regular expression.
   39546             : 
   39547             :           This support is incomplete and the subject of current research to define 
   39548             :           RegEx trees to support inexact matching.
   39549             :        */
   39550             :           SgGraphEdgeList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   39551             : 
   39552             : // *** COMMON CODE SECTION ENDS HERE ***
   39553             : 
   39554             : 
   39555             : // End of memberFunctionString
   39556             : // Start of memberFunctionString
   39557             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   39558             : 
   39559             :      // the generated cast function
   39560             :      // friend ROSE_DLL_API SgGraphEdgeList* isSgGraphEdgeList ( SgNode* s );
   39561             : 
   39562             :           typedef SgSupport base_node_type;
   39563             : 
   39564             : 
   39565             : // End of memberFunctionString
   39566             : 
   39567             : 
   39568             :      public: 
   39569             :          virtual ~SgGraphEdgeList();
   39570             : 
   39571             : 
   39572             :      public: 
   39573             :          SgGraphEdgeList(); 
   39574             : 
   39575             :     protected:
   39576             : 
   39577             :     friend struct Rose::Traits::generated::describe_node_t<SgGraphEdgeList>;
   39578             : 
   39579             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39580             : 
   39581             : 
   39582             :    };
   39583             : #endif
   39584             : 
   39585             : // postdeclarations for SgGraphEdgeList
   39586             : 
   39587             : /* #line 39588 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39588             : 
   39589             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   39590             : 
   39591             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39592             : 
   39593             : 
   39594             : /* #line 39595 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39595             : 
   39596             : 
   39597             : 
   39598             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39599             : 
   39600             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   39601             : //      This code is automatically generated for each 
   39602             : //      terminal and non-terminal within the defined 
   39603             : //      grammar.  There is a simple way to change the 
   39604             : //      code to fix bugs etc.  See the ROSE README file
   39605             : //      for directions.
   39606             : 
   39607             : // tps: (02/22/2010): Adding DLL export requirements
   39608             : #include "rosedll.h"
   39609             : 
   39610             : // predeclarations for SgTypeTable
   39611             : 
   39612             : /* #line 39613 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39613             : 
   39614             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   39615             : 
   39616             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   39617             : 
   39618             : #if 1
   39619             : // Class Definition for SgTypeTable
   39620             : class ROSE_DLL_API SgTypeTable  : public SgSupport
   39621             :    {
   39622             :      public:
   39623             : 
   39624             : 
   39625             : /* #line 39626 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   39626             : 
   39627             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   39628             : // Start of memberFunctionString
   39629             : /* #line 2432 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   39630             : 
   39631             :           SgTypeTable ();
   39632             :           void insert_type(const SgName&, SgType *);
   39633             : 
   39634             :           SgType* lookup_type (const SgName&);
   39635             : 
   39636             :        // DQ (7/22/2010): Added to support AST merge.
   39637             :           void remove_type(const SgName&);
   39638             : 
   39639             :           void print_typetable(std::ostream& os = std::cout);
   39640             : 
   39641             : 
   39642             : 
   39643             : // End of memberFunctionString
   39644             : // Start of memberFunctionString
   39645             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   39646             : 
   39647             : // *** COMMON CODE SECTION BEGINS HERE ***
   39648             : 
   39649             :     public:
   39650             : 
   39651             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   39652             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   39653             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   39654             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   39655             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   39656             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   39657             : 
   39658             :       /*! \brief returns a string representing the class name */
   39659             :           virtual std::string class_name() const override;
   39660             : 
   39661             :       /*! \brief returns new style SageIII enum values */
   39662             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   39663             : 
   39664             :       /*! \brief static variant value */
   39665             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   39666             :        // static const VariantT static_variant = V_SgTypeTable;
   39667             :           enum { static_variant = V_SgTypeTable };
   39668             : 
   39669             :        /* the generated cast function */
   39670             :       /*! \brief Casts pointer from base class to derived class */
   39671             :           ROSE_DLL_API friend       SgTypeTable* isSgTypeTable(       SgNode * s );
   39672             : 
   39673             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   39674             :           ROSE_DLL_API friend const SgTypeTable* isSgTypeTable( const SgNode * s );
   39675             : 
   39676             :      // ******************************************
   39677             :      // * Memory Pool / New / Delete
   39678             :      // ******************************************
   39679             : 
   39680             :      public:
   39681             :           /// \private
   39682             :           static const unsigned pool_size; //
   39683             :           /// \private
   39684             :           static std::vector<unsigned char *> pools; //
   39685             :           /// \private
   39686             :           static SgTypeTable * next_node; // 
   39687             : 
   39688             :           /// \private
   39689             :           static unsigned long initializeStorageClassArray(SgTypeTableStorageClass *); //
   39690             : 
   39691             :           /// \private
   39692             :           static void clearMemoryPool(); //
   39693             :           static void deleteMemoryPool(); //
   39694             : 
   39695             :           /// \private
   39696             :           static void extendMemoryPoolForFileIO(); //
   39697             : 
   39698             :           /// \private
   39699             :           static SgTypeTable * getPointerFromGlobalIndex(unsigned long); //
   39700             :           /// \private
   39701             :           static SgTypeTable * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   39702             : 
   39703             :           /// \private
   39704             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   39705             :           /// \private
   39706             :           static void resetValidFreepointers(); //
   39707             :           /// \private
   39708             :           static unsigned long getNumberOfLastValidPointer(); //
   39709             : 
   39710             : 
   39711             : #if defined(INLINE_FUNCTIONS)
   39712             :       /*! \brief returns pointer to newly allocated IR node */
   39713             :           inline void *operator new (size_t size);
   39714             : #else
   39715             :       /*! \brief returns pointer to newly allocated IR node */
   39716             :           void *operator new (size_t size);
   39717             : #endif
   39718             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   39719             :           void operator delete (void* pointer, size_t size);
   39720             : 
   39721             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   39722       27229 :           void operator delete (void* pointer)
   39723             :              {
   39724             :             // This is the generated delete operator...
   39725       27229 :                SgTypeTable::operator delete (pointer,sizeof(SgTypeTable));
   39726             :              }
   39727             : 
   39728             :       /*! \brief Returns the total number of IR nodes of this type */
   39729             :           static size_t numberOfNodes();
   39730             : 
   39731             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   39732             :           static size_t memoryUsage();
   39733             : 
   39734             :       // End of scope which started in IR nodes specific code 
   39735             :       /* */
   39736             : 
   39737             :       /* name Internal Functions
   39738             :           \brief Internal functions ... incomplete-documentation
   39739             : 
   39740             :           These functions have been made public as part of the design, but they are suggested for internal use 
   39741             :           or by particularly knowledgeable users for specialized tools or applications.
   39742             : 
   39743             :           \internal We could not make these private because they are required by user for special purposes. And 
   39744             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   39745             :          
   39746             :        */
   39747             : 
   39748             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   39749             :        // overridden in every class by *generated* implementation
   39750             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   39751             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   39752             :        // MS: 06/28/02 container of names of variables or container indices 
   39753             :        // used used in the traversal to access AST successor nodes
   39754             :        // overridden in every class by *generated* implementation
   39755             :       /*! \brief container of names of variables or container indices used used in the traversal
   39756             :           to access AST successor nodes overridden in every class by *generated* implementation */
   39757             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   39758             : 
   39759             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   39760             :        // than all the vector copies. The implementation for these functions is generated for each class.
   39761             :       /*! \brief return number of children in the traversal successor list */
   39762             :           virtual size_t get_numberOfTraversalSuccessors() override;
   39763             :       /*! \brief index-based access to traversal successors by index number */
   39764             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   39765             :       /*! \brief index-based access to traversal successors by child node */
   39766             :           virtual size_t get_childIndex(SgNode *child) override;
   39767             : 
   39768             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   39769             :        // MS: 08/16/2002 method for generating RTI information
   39770             :       /*! \brief return C++ Runtime-Time-Information */
   39771             :           virtual RTIReturnType roseRTI() override;
   39772             : #endif
   39773             :       /* */
   39774             : 
   39775             : 
   39776             : 
   39777             :       /* name Deprecated Functions
   39778             :           \brief Deprecated functions ... incomplete-documentation
   39779             : 
   39780             :           These functions have been deprecated from use.
   39781             :        */
   39782             :       /* */
   39783             : 
   39784             :       /*! returns a C style string (char*) representing the class name */
   39785             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   39786             : 
   39787             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   39788             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   39789             : #if 0
   39790             :       /*! returns old style Sage II enum values */
   39791             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   39792             :       /*! returns old style Sage II enum values */
   39793             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   39794             : #endif
   39795             :       /* */
   39796             : 
   39797             : 
   39798             : 
   39799             : 
   39800             :      public:
   39801             :       /* name Traversal Support Functions
   39802             :           \brief Traversal support functions ... incomplete-documentation
   39803             : 
   39804             :           These functions have been made public as part of the design, but they are suggested for internal use 
   39805             :           or by particularly knowledgable users for specialized tools or applications.
   39806             :        */
   39807             :       /* */
   39808             : 
   39809             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   39810             :        // (inferior to ROSE traversal mechanism, experimental).
   39811             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   39812             :        */
   39813             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   39814             : 
   39815             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   39816             :       /*! \brief support for the classic visitor pattern done in GoF */
   39817             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   39818             : 
   39819             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   39820             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   39821             :        */
   39822             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   39823             : 
   39824             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   39825             :        */
   39826             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   39827             : 
   39828             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   39829             :        // This traversal helps support internal tools that call static member functions.
   39830             :        // note: this function operates on the memory pools.
   39831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   39832             :        */
   39833             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   39834             :       /* */
   39835             : 
   39836             : 
   39837             :      public:
   39838             :       /* name Memory Allocation Functions
   39839             :           \brief Memory allocations functions ... incomplete-documentation
   39840             : 
   39841             :           These functions have been made public as part of the design, but they are suggested for internal use 
   39842             :           or by particularly knowledgable users for specialized tools or applications.
   39843             :        */
   39844             :       /* */
   39845             : 
   39846             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   39847             : 
   39848             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   39849             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   39850             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   39851             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   39852             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   39853             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   39854             :           being used with the AST File I/O mechanism.
   39855             :        */
   39856             :           virtual bool isInMemoryPool() override;
   39857             : 
   39858             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   39859             : 
   39860             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   39861             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   39862             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   39863             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   39864             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   39865             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   39866             :           being used with the AST File I/O mechanism.
   39867             :        */
   39868             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   39869             : 
   39870             :       // DQ (4/30/2006): Modified to be a const function.
   39871             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   39872             : 
   39873             :           This functions is part of general support for many possible tools to operate 
   39874             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   39875             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   39876             :           less than the set of pointers used by the AST file I/O. This is part of
   39877             :           work implemented by Andreas, and support tools such as the AST graph generation.
   39878             : 
   39879             :           \warning This function can return unexpected data members and thus the 
   39880             :                    order and the number of elements is unpredicable and subject 
   39881             :                    to change.
   39882             : 
   39883             :           \returns STL vector of pairs of SgNode* and strings
   39884             :        */
   39885             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   39886             : 
   39887             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   39888             : 
   39889             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   39890             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   39891             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   39892             : 
   39893             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   39894             :                    and subject to change.
   39895             :        */
   39896             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   39897             : 
   39898             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   39899             : 
   39900             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   39901             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   39902             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   39903             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   39904             : 
   39905             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   39906             : 
   39907             :           \returns long
   39908             :        */
   39909             :           virtual long getChildIndex( SgNode* childNode ) const override;
   39910             : 
   39911             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   39912             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39913             :       /* \brief Constructor for use by AST File I/O Mechanism
   39914             : 
   39915             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   39916             :           which obtained via fast binary file I/O from disk.
   39917             :        */
   39918             :        // SgTypeTable( SgTypeTableStorageClass& source );
   39919             : 
   39920             : 
   39921             : 
   39922             : 
   39923             : 
   39924             :  // JH (10/24/2005): methods added to support the ast file IO
   39925             :     private:
   39926             : 
   39927             :       /* name AST Memory Allocation Support Functions
   39928             :           \brief Memory allocations support....
   39929             : 
   39930             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   39931             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   39932             :           and support the AST File I/O Mechanism.
   39933             :        */
   39934             :       /* */
   39935             : 
   39936             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   39937             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   39938             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   39939             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   39940             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   39941             :           a correspinding one in the AST_FILE_IO class!
   39942             :        */
   39943             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   39944             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39945             :       /* \brief Typedef used for low level memory access.
   39946             :        */
   39947             :        // typedef unsigned char* TestType;
   39948             : 
   39949             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   39950             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   39951             :       /* \brief Typedef used to hold memory addresses as values.
   39952             :        */
   39953             :        // typedef unsigned long  AddressType;
   39954             : 
   39955             : 
   39956             : 
   39957             :        // necessary, to have direct access to the p_freepointer and the private methods !
   39958             :       /*! \brief friend class declaration to support AST File I/O */
   39959             :           friend class AST_FILE_IO;
   39960             : 
   39961             :       /*! \brief friend class declaration to support AST File I/O */
   39962             :           friend class SgTypeTableStorageClass;
   39963             : 
   39964             :       /*! \brief friend class declaration to support AST File I/O */
   39965             :           friend class AstSpecificDataManagingClass;
   39966             : 
   39967             :       /*! \brief friend class declaration to support AST File I/O */
   39968             :           friend class AstSpecificDataManagingClassStorageClass;
   39969             :     public:
   39970             :       /*! \brief IR node constructor to support AST File I/O */
   39971             :           SgTypeTable( const SgTypeTableStorageClass& source );
   39972             : 
   39973             :  // private: // JJW hack
   39974             :        /*
   39975             :           name AST Memory Allocation Support Variables
   39976             :           Memory allocations support variables 
   39977             : 
   39978             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   39979             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   39980             :           and support the AST File I/O Mechanism.
   39981             :        */
   39982             :       /* */
   39983             : 
   39984             :     public:
   39985             : 
   39986             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   39987             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   39988             :       // virtual SgNode* addRegExpAttribute();
   39989             :       /*! \brief Support for AST matching using regular expression.
   39990             : 
   39991             :           This support is incomplete and the subject of current research to define 
   39992             :           RegEx trees to support inexact matching.
   39993             :        */
   39994             :           SgTypeTable* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   39995             : 
   39996             : // *** COMMON CODE SECTION ENDS HERE ***
   39997             : 
   39998             : 
   39999             : // End of memberFunctionString
   40000             : // Start of memberFunctionString
   40001             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   40002             : 
   40003             :      // the generated cast function
   40004             :      // friend ROSE_DLL_API SgTypeTable* isSgTypeTable ( SgNode* s );
   40005             : 
   40006             :           typedef SgSupport base_node_type;
   40007             : 
   40008             : 
   40009             : // End of memberFunctionString
   40010             : 
   40011             :      public: 
   40012             :          SgSymbolTable* get_type_table() const;
   40013             :          void set_type_table(SgSymbolTable* type_table);
   40014             : 
   40015             : 
   40016             :      public: 
   40017             :          virtual ~SgTypeTable();
   40018             : 
   40019             :     protected:
   40020             : // Start of memberFunctionString
   40021             : SgSymbolTable* p_type_table;
   40022             :           
   40023             : // End of memberFunctionString
   40024             : 
   40025             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeTable>;
   40026             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeTable, SgSymbolTable*,&SgTypeTable::p_type_table>;
   40027             : 
   40028             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40029             : 
   40030             : 
   40031             :    };
   40032             : #endif
   40033             : 
   40034             : // postdeclarations for SgTypeTable
   40035             : 
   40036             : /* #line 40037 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40037             : 
   40038             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   40039             : 
   40040             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40041             : 
   40042             : 
   40043             : /* #line 40044 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40044             : 
   40045             : 
   40046             : 
   40047             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40048             : 
   40049             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   40050             : //      This code is automatically generated for each 
   40051             : //      terminal and non-terminal within the defined 
   40052             : //      grammar.  There is a simple way to change the 
   40053             : //      code to fix bugs etc.  See the ROSE README file
   40054             : //      for directions.
   40055             : 
   40056             : // tps: (02/22/2010): Adding DLL export requirements
   40057             : #include "rosedll.h"
   40058             : 
   40059             : // predeclarations for SgNameGroup
   40060             : 
   40061             : /* #line 40062 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40062             : 
   40063             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   40064             : 
   40065             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40066             : 
   40067             : #if 1
   40068             : // Class Definition for SgNameGroup
   40069             : class ROSE_DLL_API SgNameGroup  : public SgSupport
   40070             :    {
   40071             :      public:
   40072             : 
   40073             : 
   40074             : /* #line 40075 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40075             : 
   40076             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   40077             : // Start of memberFunctionString
   40078             : /* #line 2374 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   40079             : 
   40080             :           const SgStringList & get_name_list() const;
   40081             :           SgStringList & get_name_list();
   40082             : 
   40083             : 
   40084             : // End of memberFunctionString
   40085             : // Start of memberFunctionString
   40086             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   40087             : 
   40088             : // *** COMMON CODE SECTION BEGINS HERE ***
   40089             : 
   40090             :     public:
   40091             : 
   40092             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   40093             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   40094             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   40095             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   40096             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   40097             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   40098             : 
   40099             :       /*! \brief returns a string representing the class name */
   40100             :           virtual std::string class_name() const override;
   40101             : 
   40102             :       /*! \brief returns new style SageIII enum values */
   40103             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   40104             : 
   40105             :       /*! \brief static variant value */
   40106             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   40107             :        // static const VariantT static_variant = V_SgNameGroup;
   40108             :           enum { static_variant = V_SgNameGroup };
   40109             : 
   40110             :        /* the generated cast function */
   40111             :       /*! \brief Casts pointer from base class to derived class */
   40112             :           ROSE_DLL_API friend       SgNameGroup* isSgNameGroup(       SgNode * s );
   40113             : 
   40114             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   40115             :           ROSE_DLL_API friend const SgNameGroup* isSgNameGroup( const SgNode * s );
   40116             : 
   40117             :      // ******************************************
   40118             :      // * Memory Pool / New / Delete
   40119             :      // ******************************************
   40120             : 
   40121             :      public:
   40122             :           /// \private
   40123             :           static const unsigned pool_size; //
   40124             :           /// \private
   40125             :           static std::vector<unsigned char *> pools; //
   40126             :           /// \private
   40127             :           static SgNameGroup * next_node; // 
   40128             : 
   40129             :           /// \private
   40130             :           static unsigned long initializeStorageClassArray(SgNameGroupStorageClass *); //
   40131             : 
   40132             :           /// \private
   40133             :           static void clearMemoryPool(); //
   40134             :           static void deleteMemoryPool(); //
   40135             : 
   40136             :           /// \private
   40137             :           static void extendMemoryPoolForFileIO(); //
   40138             : 
   40139             :           /// \private
   40140             :           static SgNameGroup * getPointerFromGlobalIndex(unsigned long); //
   40141             :           /// \private
   40142             :           static SgNameGroup * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   40143             : 
   40144             :           /// \private
   40145             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   40146             :           /// \private
   40147             :           static void resetValidFreepointers(); //
   40148             :           /// \private
   40149             :           static unsigned long getNumberOfLastValidPointer(); //
   40150             : 
   40151             : 
   40152             : #if defined(INLINE_FUNCTIONS)
   40153             :       /*! \brief returns pointer to newly allocated IR node */
   40154             :           inline void *operator new (size_t size);
   40155             : #else
   40156             :       /*! \brief returns pointer to newly allocated IR node */
   40157             :           void *operator new (size_t size);
   40158             : #endif
   40159             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   40160             :           void operator delete (void* pointer, size_t size);
   40161             : 
   40162             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   40163           0 :           void operator delete (void* pointer)
   40164             :              {
   40165             :             // This is the generated delete operator...
   40166           0 :                SgNameGroup::operator delete (pointer,sizeof(SgNameGroup));
   40167             :              }
   40168             : 
   40169             :       /*! \brief Returns the total number of IR nodes of this type */
   40170             :           static size_t numberOfNodes();
   40171             : 
   40172             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   40173             :           static size_t memoryUsage();
   40174             : 
   40175             :       // End of scope which started in IR nodes specific code 
   40176             :       /* */
   40177             : 
   40178             :       /* name Internal Functions
   40179             :           \brief Internal functions ... incomplete-documentation
   40180             : 
   40181             :           These functions have been made public as part of the design, but they are suggested for internal use 
   40182             :           or by particularly knowledgeable users for specialized tools or applications.
   40183             : 
   40184             :           \internal We could not make these private because they are required by user for special purposes. And 
   40185             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   40186             :          
   40187             :        */
   40188             : 
   40189             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   40190             :        // overridden in every class by *generated* implementation
   40191             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   40192             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   40193             :        // MS: 06/28/02 container of names of variables or container indices 
   40194             :        // used used in the traversal to access AST successor nodes
   40195             :        // overridden in every class by *generated* implementation
   40196             :       /*! \brief container of names of variables or container indices used used in the traversal
   40197             :           to access AST successor nodes overridden in every class by *generated* implementation */
   40198             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   40199             : 
   40200             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   40201             :        // than all the vector copies. The implementation for these functions is generated for each class.
   40202             :       /*! \brief return number of children in the traversal successor list */
   40203             :           virtual size_t get_numberOfTraversalSuccessors() override;
   40204             :       /*! \brief index-based access to traversal successors by index number */
   40205             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   40206             :       /*! \brief index-based access to traversal successors by child node */
   40207             :           virtual size_t get_childIndex(SgNode *child) override;
   40208             : 
   40209             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   40210             :        // MS: 08/16/2002 method for generating RTI information
   40211             :       /*! \brief return C++ Runtime-Time-Information */
   40212             :           virtual RTIReturnType roseRTI() override;
   40213             : #endif
   40214             :       /* */
   40215             : 
   40216             : 
   40217             : 
   40218             :       /* name Deprecated Functions
   40219             :           \brief Deprecated functions ... incomplete-documentation
   40220             : 
   40221             :           These functions have been deprecated from use.
   40222             :        */
   40223             :       /* */
   40224             : 
   40225             :       /*! returns a C style string (char*) representing the class name */
   40226             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   40227             : 
   40228             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   40229             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   40230             : #if 0
   40231             :       /*! returns old style Sage II enum values */
   40232             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   40233             :       /*! returns old style Sage II enum values */
   40234             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   40235             : #endif
   40236             :       /* */
   40237             : 
   40238             : 
   40239             : 
   40240             : 
   40241             :      public:
   40242             :       /* name Traversal Support Functions
   40243             :           \brief Traversal support functions ... incomplete-documentation
   40244             : 
   40245             :           These functions have been made public as part of the design, but they are suggested for internal use 
   40246             :           or by particularly knowledgable users for specialized tools or applications.
   40247             :        */
   40248             :       /* */
   40249             : 
   40250             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   40251             :        // (inferior to ROSE traversal mechanism, experimental).
   40252             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   40253             :        */
   40254             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   40255             : 
   40256             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   40257             :       /*! \brief support for the classic visitor pattern done in GoF */
   40258             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   40259             : 
   40260             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   40261             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   40262             :        */
   40263             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   40264             : 
   40265             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   40266             :        */
   40267             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   40268             : 
   40269             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   40270             :        // This traversal helps support internal tools that call static member functions.
   40271             :        // note: this function operates on the memory pools.
   40272             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   40273             :        */
   40274             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   40275             :       /* */
   40276             : 
   40277             : 
   40278             :      public:
   40279             :       /* name Memory Allocation Functions
   40280             :           \brief Memory allocations functions ... incomplete-documentation
   40281             : 
   40282             :           These functions have been made public as part of the design, but they are suggested for internal use 
   40283             :           or by particularly knowledgable users for specialized tools or applications.
   40284             :        */
   40285             :       /* */
   40286             : 
   40287             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   40288             : 
   40289             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   40290             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   40291             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   40292             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   40293             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   40294             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   40295             :           being used with the AST File I/O mechanism.
   40296             :        */
   40297             :           virtual bool isInMemoryPool() override;
   40298             : 
   40299             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   40300             : 
   40301             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   40302             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   40303             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   40304             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   40305             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   40306             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   40307             :           being used with the AST File I/O mechanism.
   40308             :        */
   40309             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   40310             : 
   40311             :       // DQ (4/30/2006): Modified to be a const function.
   40312             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   40313             : 
   40314             :           This functions is part of general support for many possible tools to operate 
   40315             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   40316             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   40317             :           less than the set of pointers used by the AST file I/O. This is part of
   40318             :           work implemented by Andreas, and support tools such as the AST graph generation.
   40319             : 
   40320             :           \warning This function can return unexpected data members and thus the 
   40321             :                    order and the number of elements is unpredicable and subject 
   40322             :                    to change.
   40323             : 
   40324             :           \returns STL vector of pairs of SgNode* and strings
   40325             :        */
   40326             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   40327             : 
   40328             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   40329             : 
   40330             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   40331             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   40332             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   40333             : 
   40334             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   40335             :                    and subject to change.
   40336             :        */
   40337             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   40338             : 
   40339             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   40340             : 
   40341             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   40342             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   40343             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   40344             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   40345             : 
   40346             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   40347             : 
   40348             :           \returns long
   40349             :        */
   40350             :           virtual long getChildIndex( SgNode* childNode ) const override;
   40351             : 
   40352             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   40353             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   40354             :       /* \brief Constructor for use by AST File I/O Mechanism
   40355             : 
   40356             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   40357             :           which obtained via fast binary file I/O from disk.
   40358             :        */
   40359             :        // SgNameGroup( SgNameGroupStorageClass& source );
   40360             : 
   40361             : 
   40362             : 
   40363             : 
   40364             : 
   40365             :  // JH (10/24/2005): methods added to support the ast file IO
   40366             :     private:
   40367             : 
   40368             :       /* name AST Memory Allocation Support Functions
   40369             :           \brief Memory allocations support....
   40370             : 
   40371             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   40372             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   40373             :           and support the AST File I/O Mechanism.
   40374             :        */
   40375             :       /* */
   40376             : 
   40377             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   40378             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   40379             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   40380             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   40381             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   40382             :           a correspinding one in the AST_FILE_IO class!
   40383             :        */
   40384             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   40385             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   40386             :       /* \brief Typedef used for low level memory access.
   40387             :        */
   40388             :        // typedef unsigned char* TestType;
   40389             : 
   40390             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   40391             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   40392             :       /* \brief Typedef used to hold memory addresses as values.
   40393             :        */
   40394             :        // typedef unsigned long  AddressType;
   40395             : 
   40396             : 
   40397             : 
   40398             :        // necessary, to have direct access to the p_freepointer and the private methods !
   40399             :       /*! \brief friend class declaration to support AST File I/O */
   40400             :           friend class AST_FILE_IO;
   40401             : 
   40402             :       /*! \brief friend class declaration to support AST File I/O */
   40403             :           friend class SgNameGroupStorageClass;
   40404             : 
   40405             :       /*! \brief friend class declaration to support AST File I/O */
   40406             :           friend class AstSpecificDataManagingClass;
   40407             : 
   40408             :       /*! \brief friend class declaration to support AST File I/O */
   40409             :           friend class AstSpecificDataManagingClassStorageClass;
   40410             :     public:
   40411             :       /*! \brief IR node constructor to support AST File I/O */
   40412             :           SgNameGroup( const SgNameGroupStorageClass& source );
   40413             : 
   40414             :  // private: // JJW hack
   40415             :        /*
   40416             :           name AST Memory Allocation Support Variables
   40417             :           Memory allocations support variables 
   40418             : 
   40419             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   40420             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   40421             :           and support the AST File I/O Mechanism.
   40422             :        */
   40423             :       /* */
   40424             : 
   40425             :     public:
   40426             : 
   40427             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   40428             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   40429             :       // virtual SgNode* addRegExpAttribute();
   40430             :       /*! \brief Support for AST matching using regular expression.
   40431             : 
   40432             :           This support is incomplete and the subject of current research to define 
   40433             :           RegEx trees to support inexact matching.
   40434             :        */
   40435             :           SgNameGroup* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   40436             : 
   40437             : // *** COMMON CODE SECTION ENDS HERE ***
   40438             : 
   40439             : 
   40440             : // End of memberFunctionString
   40441             : // Start of memberFunctionString
   40442             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   40443             : 
   40444             :      // the generated cast function
   40445             :      // friend ROSE_DLL_API SgNameGroup* isSgNameGroup ( SgNode* s );
   40446             : 
   40447             :           typedef SgSupport base_node_type;
   40448             : 
   40449             : 
   40450             : // End of memberFunctionString
   40451             : 
   40452             :      public: 
   40453             :          std::string get_group_name() const;
   40454             :          void set_group_name(std::string group_name);
   40455             : 
   40456             : 
   40457             : 
   40458             :      public: 
   40459             :          virtual ~SgNameGroup();
   40460             : 
   40461             : 
   40462             :      public: 
   40463             :          SgNameGroup(); 
   40464             : 
   40465             :     protected:
   40466             : // Start of memberFunctionString
   40467             : std::string p_group_name;
   40468             :           
   40469             : // End of memberFunctionString
   40470             : // Start of memberFunctionString
   40471             : SgStringList p_name_list;
   40472             :           
   40473             : // End of memberFunctionString
   40474             : 
   40475             :     friend struct Rose::Traits::generated::describe_node_t<SgNameGroup>;
   40476             :     friend struct Rose::Traits::generated::describe_field_t<SgNameGroup, std::string,&SgNameGroup::p_group_name>;
   40477             :     friend struct Rose::Traits::generated::describe_field_t<SgNameGroup, SgStringList,&SgNameGroup::p_name_list>;
   40478             : 
   40479             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40480             : 
   40481             : 
   40482             :    };
   40483             : #endif
   40484             : 
   40485             : // postdeclarations for SgNameGroup
   40486             : 
   40487             : /* #line 40488 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40488             : 
   40489             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   40490             : 
   40491             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40492             : 
   40493             : 
   40494             : /* #line 40495 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40495             : 
   40496             : 
   40497             : 
   40498             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40499             : 
   40500             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   40501             : //      This code is automatically generated for each 
   40502             : //      terminal and non-terminal within the defined 
   40503             : //      grammar.  There is a simple way to change the 
   40504             : //      code to fix bugs etc.  See the ROSE README file
   40505             : //      for directions.
   40506             : 
   40507             : // tps: (02/22/2010): Adding DLL export requirements
   40508             : #include "rosedll.h"
   40509             : 
   40510             : // predeclarations for SgDimensionObject
   40511             : 
   40512             : /* #line 40513 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40513             : 
   40514             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   40515             : 
   40516             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40517             : 
   40518             : #if 1
   40519             : // Class Definition for SgDimensionObject
   40520             : class ROSE_DLL_API SgDimensionObject  : public SgSupport
   40521             :    {
   40522             :      public:
   40523             : 
   40524             : 
   40525             : /* #line 40526 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40526             : 
   40527             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   40528             : // Start of memberFunctionString
   40529             : /* #line 2384 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   40530             : 
   40531             : 
   40532             : 
   40533             : // End of memberFunctionString
   40534             : // Start of memberFunctionString
   40535             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   40536             : 
   40537             : // *** COMMON CODE SECTION BEGINS HERE ***
   40538             : 
   40539             :     public:
   40540             : 
   40541             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   40542             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   40543             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   40544             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   40545             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   40546             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   40547             : 
   40548             :       /*! \brief returns a string representing the class name */
   40549             :           virtual std::string class_name() const override;
   40550             : 
   40551             :       /*! \brief returns new style SageIII enum values */
   40552             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   40553             : 
   40554             :       /*! \brief static variant value */
   40555             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   40556             :        // static const VariantT static_variant = V_SgDimensionObject;
   40557             :           enum { static_variant = V_SgDimensionObject };
   40558             : 
   40559             :        /* the generated cast function */
   40560             :       /*! \brief Casts pointer from base class to derived class */
   40561             :           ROSE_DLL_API friend       SgDimensionObject* isSgDimensionObject(       SgNode * s );
   40562             : 
   40563             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   40564             :           ROSE_DLL_API friend const SgDimensionObject* isSgDimensionObject( const SgNode * s );
   40565             : 
   40566             :      // ******************************************
   40567             :      // * Memory Pool / New / Delete
   40568             :      // ******************************************
   40569             : 
   40570             :      public:
   40571             :           /// \private
   40572             :           static const unsigned pool_size; //
   40573             :           /// \private
   40574             :           static std::vector<unsigned char *> pools; //
   40575             :           /// \private
   40576             :           static SgDimensionObject * next_node; // 
   40577             : 
   40578             :           /// \private
   40579             :           static unsigned long initializeStorageClassArray(SgDimensionObjectStorageClass *); //
   40580             : 
   40581             :           /// \private
   40582             :           static void clearMemoryPool(); //
   40583             :           static void deleteMemoryPool(); //
   40584             : 
   40585             :           /// \private
   40586             :           static void extendMemoryPoolForFileIO(); //
   40587             : 
   40588             :           /// \private
   40589             :           static SgDimensionObject * getPointerFromGlobalIndex(unsigned long); //
   40590             :           /// \private
   40591             :           static SgDimensionObject * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   40592             : 
   40593             :           /// \private
   40594             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   40595             :           /// \private
   40596             :           static void resetValidFreepointers(); //
   40597             :           /// \private
   40598             :           static unsigned long getNumberOfLastValidPointer(); //
   40599             : 
   40600             : 
   40601             : #if defined(INLINE_FUNCTIONS)
   40602             :       /*! \brief returns pointer to newly allocated IR node */
   40603             :           inline void *operator new (size_t size);
   40604             : #else
   40605             :       /*! \brief returns pointer to newly allocated IR node */
   40606             :           void *operator new (size_t size);
   40607             : #endif
   40608             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   40609             :           void operator delete (void* pointer, size_t size);
   40610             : 
   40611             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   40612           0 :           void operator delete (void* pointer)
   40613             :              {
   40614             :             // This is the generated delete operator...
   40615           0 :                SgDimensionObject::operator delete (pointer,sizeof(SgDimensionObject));
   40616             :              }
   40617             : 
   40618             :       /*! \brief Returns the total number of IR nodes of this type */
   40619             :           static size_t numberOfNodes();
   40620             : 
   40621             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   40622             :           static size_t memoryUsage();
   40623             : 
   40624             :       // End of scope which started in IR nodes specific code 
   40625             :       /* */
   40626             : 
   40627             :       /* name Internal Functions
   40628             :           \brief Internal functions ... incomplete-documentation
   40629             : 
   40630             :           These functions have been made public as part of the design, but they are suggested for internal use 
   40631             :           or by particularly knowledgeable users for specialized tools or applications.
   40632             : 
   40633             :           \internal We could not make these private because they are required by user for special purposes. And 
   40634             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   40635             :          
   40636             :        */
   40637             : 
   40638             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   40639             :        // overridden in every class by *generated* implementation
   40640             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   40641             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   40642             :        // MS: 06/28/02 container of names of variables or container indices 
   40643             :        // used used in the traversal to access AST successor nodes
   40644             :        // overridden in every class by *generated* implementation
   40645             :       /*! \brief container of names of variables or container indices used used in the traversal
   40646             :           to access AST successor nodes overridden in every class by *generated* implementation */
   40647             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   40648             : 
   40649             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   40650             :        // than all the vector copies. The implementation for these functions is generated for each class.
   40651             :       /*! \brief return number of children in the traversal successor list */
   40652             :           virtual size_t get_numberOfTraversalSuccessors() override;
   40653             :       /*! \brief index-based access to traversal successors by index number */
   40654             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   40655             :       /*! \brief index-based access to traversal successors by child node */
   40656             :           virtual size_t get_childIndex(SgNode *child) override;
   40657             : 
   40658             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   40659             :        // MS: 08/16/2002 method for generating RTI information
   40660             :       /*! \brief return C++ Runtime-Time-Information */
   40661             :           virtual RTIReturnType roseRTI() override;
   40662             : #endif
   40663             :       /* */
   40664             : 
   40665             : 
   40666             : 
   40667             :       /* name Deprecated Functions
   40668             :           \brief Deprecated functions ... incomplete-documentation
   40669             : 
   40670             :           These functions have been deprecated from use.
   40671             :        */
   40672             :       /* */
   40673             : 
   40674             :       /*! returns a C style string (char*) representing the class name */
   40675             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   40676             : 
   40677             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   40678             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   40679             : #if 0
   40680             :       /*! returns old style Sage II enum values */
   40681             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   40682             :       /*! returns old style Sage II enum values */
   40683             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   40684             : #endif
   40685             :       /* */
   40686             : 
   40687             : 
   40688             : 
   40689             : 
   40690             :      public:
   40691             :       /* name Traversal Support Functions
   40692             :           \brief Traversal support functions ... incomplete-documentation
   40693             : 
   40694             :           These functions have been made public as part of the design, but they are suggested for internal use 
   40695             :           or by particularly knowledgable users for specialized tools or applications.
   40696             :        */
   40697             :       /* */
   40698             : 
   40699             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   40700             :        // (inferior to ROSE traversal mechanism, experimental).
   40701             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   40702             :        */
   40703             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   40704             : 
   40705             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   40706             :       /*! \brief support for the classic visitor pattern done in GoF */
   40707             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   40708             : 
   40709             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   40710             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   40711             :        */
   40712             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   40713             : 
   40714             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   40715             :        */
   40716             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   40717             : 
   40718             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   40719             :        // This traversal helps support internal tools that call static member functions.
   40720             :        // note: this function operates on the memory pools.
   40721             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   40722             :        */
   40723             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   40724             :       /* */
   40725             : 
   40726             : 
   40727             :      public:
   40728             :       /* name Memory Allocation Functions
   40729             :           \brief Memory allocations functions ... incomplete-documentation
   40730             : 
   40731             :           These functions have been made public as part of the design, but they are suggested for internal use 
   40732             :           or by particularly knowledgable users for specialized tools or applications.
   40733             :        */
   40734             :       /* */
   40735             : 
   40736             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   40737             : 
   40738             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   40739             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   40740             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   40741             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   40742             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   40743             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   40744             :           being used with the AST File I/O mechanism.
   40745             :        */
   40746             :           virtual bool isInMemoryPool() override;
   40747             : 
   40748             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   40749             : 
   40750             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   40751             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   40752             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   40753             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   40754             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   40755             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   40756             :           being used with the AST File I/O mechanism.
   40757             :        */
   40758             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   40759             : 
   40760             :       // DQ (4/30/2006): Modified to be a const function.
   40761             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   40762             : 
   40763             :           This functions is part of general support for many possible tools to operate 
   40764             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   40765             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   40766             :           less than the set of pointers used by the AST file I/O. This is part of
   40767             :           work implemented by Andreas, and support tools such as the AST graph generation.
   40768             : 
   40769             :           \warning This function can return unexpected data members and thus the 
   40770             :                    order and the number of elements is unpredicable and subject 
   40771             :                    to change.
   40772             : 
   40773             :           \returns STL vector of pairs of SgNode* and strings
   40774             :        */
   40775             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   40776             : 
   40777             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   40778             : 
   40779             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   40780             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   40781             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   40782             : 
   40783             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   40784             :                    and subject to change.
   40785             :        */
   40786             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   40787             : 
   40788             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   40789             : 
   40790             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   40791             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   40792             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   40793             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   40794             : 
   40795             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   40796             : 
   40797             :           \returns long
   40798             :        */
   40799             :           virtual long getChildIndex( SgNode* childNode ) const override;
   40800             : 
   40801             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   40802             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   40803             :       /* \brief Constructor for use by AST File I/O Mechanism
   40804             : 
   40805             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   40806             :           which obtained via fast binary file I/O from disk.
   40807             :        */
   40808             :        // SgDimensionObject( SgDimensionObjectStorageClass& source );
   40809             : 
   40810             : 
   40811             : 
   40812             : 
   40813             : 
   40814             :  // JH (10/24/2005): methods added to support the ast file IO
   40815             :     private:
   40816             : 
   40817             :       /* name AST Memory Allocation Support Functions
   40818             :           \brief Memory allocations support....
   40819             : 
   40820             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   40821             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   40822             :           and support the AST File I/O Mechanism.
   40823             :        */
   40824             :       /* */
   40825             : 
   40826             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   40827             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   40828             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   40829             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   40830             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   40831             :           a correspinding one in the AST_FILE_IO class!
   40832             :        */
   40833             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   40834             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   40835             :       /* \brief Typedef used for low level memory access.
   40836             :        */
   40837             :        // typedef unsigned char* TestType;
   40838             : 
   40839             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   40840             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   40841             :       /* \brief Typedef used to hold memory addresses as values.
   40842             :        */
   40843             :        // typedef unsigned long  AddressType;
   40844             : 
   40845             : 
   40846             : 
   40847             :        // necessary, to have direct access to the p_freepointer and the private methods !
   40848             :       /*! \brief friend class declaration to support AST File I/O */
   40849             :           friend class AST_FILE_IO;
   40850             : 
   40851             :       /*! \brief friend class declaration to support AST File I/O */
   40852             :           friend class SgDimensionObjectStorageClass;
   40853             : 
   40854             :       /*! \brief friend class declaration to support AST File I/O */
   40855             :           friend class AstSpecificDataManagingClass;
   40856             : 
   40857             :       /*! \brief friend class declaration to support AST File I/O */
   40858             :           friend class AstSpecificDataManagingClassStorageClass;
   40859             :     public:
   40860             :       /*! \brief IR node constructor to support AST File I/O */
   40861             :           SgDimensionObject( const SgDimensionObjectStorageClass& source );
   40862             : 
   40863             :  // private: // JJW hack
   40864             :        /*
   40865             :           name AST Memory Allocation Support Variables
   40866             :           Memory allocations support variables 
   40867             : 
   40868             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   40869             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   40870             :           and support the AST File I/O Mechanism.
   40871             :        */
   40872             :       /* */
   40873             : 
   40874             :     public:
   40875             : 
   40876             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   40877             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   40878             :       // virtual SgNode* addRegExpAttribute();
   40879             :       /*! \brief Support for AST matching using regular expression.
   40880             : 
   40881             :           This support is incomplete and the subject of current research to define 
   40882             :           RegEx trees to support inexact matching.
   40883             :        */
   40884             :           SgDimensionObject* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   40885             : 
   40886             : // *** COMMON CODE SECTION ENDS HERE ***
   40887             : 
   40888             : 
   40889             : // End of memberFunctionString
   40890             : // Start of memberFunctionString
   40891             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   40892             : 
   40893             :      // the generated cast function
   40894             :      // friend ROSE_DLL_API SgDimensionObject* isSgDimensionObject ( SgNode* s );
   40895             : 
   40896             :           typedef SgSupport base_node_type;
   40897             : 
   40898             : 
   40899             : // End of memberFunctionString
   40900             : 
   40901             :      public: 
   40902             :          SgInitializedName* get_array() const;
   40903             :          void set_array(SgInitializedName* array);
   40904             : 
   40905             :      public: 
   40906             :          SgExprListExp* get_shape() const;
   40907             :          void set_shape(SgExprListExp* shape);
   40908             : 
   40909             : 
   40910             :      public: 
   40911             :          virtual ~SgDimensionObject();
   40912             : 
   40913             : 
   40914             :      public: 
   40915             :          SgDimensionObject(); 
   40916             : 
   40917             :     protected:
   40918             : // Start of memberFunctionString
   40919             : SgInitializedName* p_array;
   40920             :           
   40921             : // End of memberFunctionString
   40922             : // Start of memberFunctionString
   40923             : SgExprListExp* p_shape;
   40924             :           
   40925             : // End of memberFunctionString
   40926             : 
   40927             :     friend struct Rose::Traits::generated::describe_node_t<SgDimensionObject>;
   40928             :     friend struct Rose::Traits::generated::describe_field_t<SgDimensionObject, SgInitializedName*,&SgDimensionObject::p_array>;
   40929             :     friend struct Rose::Traits::generated::describe_field_t<SgDimensionObject, SgExprListExp*,&SgDimensionObject::p_shape>;
   40930             : 
   40931             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40932             : 
   40933             : 
   40934             :    };
   40935             : #endif
   40936             : 
   40937             : // postdeclarations for SgDimensionObject
   40938             : 
   40939             : /* #line 40940 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40940             : 
   40941             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   40942             : 
   40943             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40944             : 
   40945             : 
   40946             : /* #line 40947 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40947             : 
   40948             : 
   40949             : 
   40950             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40951             : 
   40952             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   40953             : //      This code is automatically generated for each 
   40954             : //      terminal and non-terminal within the defined 
   40955             : //      grammar.  There is a simple way to change the 
   40956             : //      code to fix bugs etc.  See the ROSE README file
   40957             : //      for directions.
   40958             : 
   40959             : // tps: (02/22/2010): Adding DLL export requirements
   40960             : #include "rosedll.h"
   40961             : 
   40962             : // predeclarations for SgFormatItem
   40963             : 
   40964             : /* #line 40965 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40965             : 
   40966             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   40967             : 
   40968             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   40969             : 
   40970             : #if 1
   40971             : // Class Definition for SgFormatItem
   40972             : class ROSE_DLL_API SgFormatItem  : public SgSupport
   40973             :    {
   40974             :      public:
   40975             : 
   40976             : 
   40977             : /* #line 40978 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   40978             : 
   40979             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   40980             : // Start of memberFunctionString
   40981             : /* #line 2419 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   40982             : 
   40983             : 
   40984             : 
   40985             : // End of memberFunctionString
   40986             : // Start of memberFunctionString
   40987             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   40988             : 
   40989             : // *** COMMON CODE SECTION BEGINS HERE ***
   40990             : 
   40991             :     public:
   40992             : 
   40993             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   40994             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   40995             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   40996             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   40997             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   40998             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   40999             : 
   41000             :       /*! \brief returns a string representing the class name */
   41001             :           virtual std::string class_name() const override;
   41002             : 
   41003             :       /*! \brief returns new style SageIII enum values */
   41004             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   41005             : 
   41006             :       /*! \brief static variant value */
   41007             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   41008             :        // static const VariantT static_variant = V_SgFormatItem;
   41009             :           enum { static_variant = V_SgFormatItem };
   41010             : 
   41011             :        /* the generated cast function */
   41012             :       /*! \brief Casts pointer from base class to derived class */
   41013             :           ROSE_DLL_API friend       SgFormatItem* isSgFormatItem(       SgNode * s );
   41014             : 
   41015             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   41016             :           ROSE_DLL_API friend const SgFormatItem* isSgFormatItem( const SgNode * s );
   41017             : 
   41018             :      // ******************************************
   41019             :      // * Memory Pool / New / Delete
   41020             :      // ******************************************
   41021             : 
   41022             :      public:
   41023             :           /// \private
   41024             :           static const unsigned pool_size; //
   41025             :           /// \private
   41026             :           static std::vector<unsigned char *> pools; //
   41027             :           /// \private
   41028             :           static SgFormatItem * next_node; // 
   41029             : 
   41030             :           /// \private
   41031             :           static unsigned long initializeStorageClassArray(SgFormatItemStorageClass *); //
   41032             : 
   41033             :           /// \private
   41034             :           static void clearMemoryPool(); //
   41035             :           static void deleteMemoryPool(); //
   41036             : 
   41037             :           /// \private
   41038             :           static void extendMemoryPoolForFileIO(); //
   41039             : 
   41040             :           /// \private
   41041             :           static SgFormatItem * getPointerFromGlobalIndex(unsigned long); //
   41042             :           /// \private
   41043             :           static SgFormatItem * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   41044             : 
   41045             :           /// \private
   41046             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   41047             :           /// \private
   41048             :           static void resetValidFreepointers(); //
   41049             :           /// \private
   41050             :           static unsigned long getNumberOfLastValidPointer(); //
   41051             : 
   41052             : 
   41053             : #if defined(INLINE_FUNCTIONS)
   41054             :       /*! \brief returns pointer to newly allocated IR node */
   41055             :           inline void *operator new (size_t size);
   41056             : #else
   41057             :       /*! \brief returns pointer to newly allocated IR node */
   41058             :           void *operator new (size_t size);
   41059             : #endif
   41060             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   41061             :           void operator delete (void* pointer, size_t size);
   41062             : 
   41063             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   41064           0 :           void operator delete (void* pointer)
   41065             :              {
   41066             :             // This is the generated delete operator...
   41067           0 :                SgFormatItem::operator delete (pointer,sizeof(SgFormatItem));
   41068             :              }
   41069             : 
   41070             :       /*! \brief Returns the total number of IR nodes of this type */
   41071             :           static size_t numberOfNodes();
   41072             : 
   41073             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   41074             :           static size_t memoryUsage();
   41075             : 
   41076             :       // End of scope which started in IR nodes specific code 
   41077             :       /* */
   41078             : 
   41079             :       /* name Internal Functions
   41080             :           \brief Internal functions ... incomplete-documentation
   41081             : 
   41082             :           These functions have been made public as part of the design, but they are suggested for internal use 
   41083             :           or by particularly knowledgeable users for specialized tools or applications.
   41084             : 
   41085             :           \internal We could not make these private because they are required by user for special purposes. And 
   41086             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   41087             :          
   41088             :        */
   41089             : 
   41090             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   41091             :        // overridden in every class by *generated* implementation
   41092             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   41093             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   41094             :        // MS: 06/28/02 container of names of variables or container indices 
   41095             :        // used used in the traversal to access AST successor nodes
   41096             :        // overridden in every class by *generated* implementation
   41097             :       /*! \brief container of names of variables or container indices used used in the traversal
   41098             :           to access AST successor nodes overridden in every class by *generated* implementation */
   41099             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   41100             : 
   41101             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   41102             :        // than all the vector copies. The implementation for these functions is generated for each class.
   41103             :       /*! \brief return number of children in the traversal successor list */
   41104             :           virtual size_t get_numberOfTraversalSuccessors() override;
   41105             :       /*! \brief index-based access to traversal successors by index number */
   41106             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   41107             :       /*! \brief index-based access to traversal successors by child node */
   41108             :           virtual size_t get_childIndex(SgNode *child) override;
   41109             : 
   41110             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   41111             :        // MS: 08/16/2002 method for generating RTI information
   41112             :       /*! \brief return C++ Runtime-Time-Information */
   41113             :           virtual RTIReturnType roseRTI() override;
   41114             : #endif
   41115             :       /* */
   41116             : 
   41117             : 
   41118             : 
   41119             :       /* name Deprecated Functions
   41120             :           \brief Deprecated functions ... incomplete-documentation
   41121             : 
   41122             :           These functions have been deprecated from use.
   41123             :        */
   41124             :       /* */
   41125             : 
   41126             :       /*! returns a C style string (char*) representing the class name */
   41127             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   41128             : 
   41129             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   41130             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   41131             : #if 0
   41132             :       /*! returns old style Sage II enum values */
   41133             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   41134             :       /*! returns old style Sage II enum values */
   41135             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   41136             : #endif
   41137             :       /* */
   41138             : 
   41139             : 
   41140             : 
   41141             : 
   41142             :      public:
   41143             :       /* name Traversal Support Functions
   41144             :           \brief Traversal support functions ... incomplete-documentation
   41145             : 
   41146             :           These functions have been made public as part of the design, but they are suggested for internal use 
   41147             :           or by particularly knowledgable users for specialized tools or applications.
   41148             :        */
   41149             :       /* */
   41150             : 
   41151             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   41152             :        // (inferior to ROSE traversal mechanism, experimental).
   41153             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   41154             :        */
   41155             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   41156             : 
   41157             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   41158             :       /*! \brief support for the classic visitor pattern done in GoF */
   41159             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   41160             : 
   41161             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   41162             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   41163             :        */
   41164             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   41165             : 
   41166             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   41167             :        */
   41168             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   41169             : 
   41170             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   41171             :        // This traversal helps support internal tools that call static member functions.
   41172             :        // note: this function operates on the memory pools.
   41173             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   41174             :        */
   41175             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   41176             :       /* */
   41177             : 
   41178             : 
   41179             :      public:
   41180             :       /* name Memory Allocation Functions
   41181             :           \brief Memory allocations functions ... incomplete-documentation
   41182             : 
   41183             :           These functions have been made public as part of the design, but they are suggested for internal use 
   41184             :           or by particularly knowledgable users for specialized tools or applications.
   41185             :        */
   41186             :       /* */
   41187             : 
   41188             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   41189             : 
   41190             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   41191             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   41192             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   41193             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   41194             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   41195             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   41196             :           being used with the AST File I/O mechanism.
   41197             :        */
   41198             :           virtual bool isInMemoryPool() override;
   41199             : 
   41200             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   41201             : 
   41202             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   41203             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   41204             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   41205             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   41206             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   41207             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   41208             :           being used with the AST File I/O mechanism.
   41209             :        */
   41210             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   41211             : 
   41212             :       // DQ (4/30/2006): Modified to be a const function.
   41213             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   41214             : 
   41215             :           This functions is part of general support for many possible tools to operate 
   41216             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   41217             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   41218             :           less than the set of pointers used by the AST file I/O. This is part of
   41219             :           work implemented by Andreas, and support tools such as the AST graph generation.
   41220             : 
   41221             :           \warning This function can return unexpected data members and thus the 
   41222             :                    order and the number of elements is unpredicable and subject 
   41223             :                    to change.
   41224             : 
   41225             :           \returns STL vector of pairs of SgNode* and strings
   41226             :        */
   41227             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   41228             : 
   41229             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   41230             : 
   41231             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   41232             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   41233             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   41234             : 
   41235             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   41236             :                    and subject to change.
   41237             :        */
   41238             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   41239             : 
   41240             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   41241             : 
   41242             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   41243             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   41244             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   41245             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   41246             : 
   41247             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   41248             : 
   41249             :           \returns long
   41250             :        */
   41251             :           virtual long getChildIndex( SgNode* childNode ) const override;
   41252             : 
   41253             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   41254             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   41255             :       /* \brief Constructor for use by AST File I/O Mechanism
   41256             : 
   41257             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   41258             :           which obtained via fast binary file I/O from disk.
   41259             :        */
   41260             :        // SgFormatItem( SgFormatItemStorageClass& source );
   41261             : 
   41262             : 
   41263             : 
   41264             : 
   41265             : 
   41266             :  // JH (10/24/2005): methods added to support the ast file IO
   41267             :     private:
   41268             : 
   41269             :       /* name AST Memory Allocation Support Functions
   41270             :           \brief Memory allocations support....
   41271             : 
   41272             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   41273             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   41274             :           and support the AST File I/O Mechanism.
   41275             :        */
   41276             :       /* */
   41277             : 
   41278             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   41279             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   41280             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   41281             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   41282             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   41283             :           a correspinding one in the AST_FILE_IO class!
   41284             :        */
   41285             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   41286             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   41287             :       /* \brief Typedef used for low level memory access.
   41288             :        */
   41289             :        // typedef unsigned char* TestType;
   41290             : 
   41291             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   41292             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   41293             :       /* \brief Typedef used to hold memory addresses as values.
   41294             :        */
   41295             :        // typedef unsigned long  AddressType;
   41296             : 
   41297             : 
   41298             : 
   41299             :        // necessary, to have direct access to the p_freepointer and the private methods !
   41300             :       /*! \brief friend class declaration to support AST File I/O */
   41301             :           friend class AST_FILE_IO;
   41302             : 
   41303             :       /*! \brief friend class declaration to support AST File I/O */
   41304             :           friend class SgFormatItemStorageClass;
   41305             : 
   41306             :       /*! \brief friend class declaration to support AST File I/O */
   41307             :           friend class AstSpecificDataManagingClass;
   41308             : 
   41309             :       /*! \brief friend class declaration to support AST File I/O */
   41310             :           friend class AstSpecificDataManagingClassStorageClass;
   41311             :     public:
   41312             :       /*! \brief IR node constructor to support AST File I/O */
   41313             :           SgFormatItem( const SgFormatItemStorageClass& source );
   41314             : 
   41315             :  // private: // JJW hack
   41316             :        /*
   41317             :           name AST Memory Allocation Support Variables
   41318             :           Memory allocations support variables 
   41319             : 
   41320             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   41321             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   41322             :           and support the AST File I/O Mechanism.
   41323             :        */
   41324             :       /* */
   41325             : 
   41326             :     public:
   41327             : 
   41328             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   41329             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   41330             :       // virtual SgNode* addRegExpAttribute();
   41331             :       /*! \brief Support for AST matching using regular expression.
   41332             : 
   41333             :           This support is incomplete and the subject of current research to define 
   41334             :           RegEx trees to support inexact matching.
   41335             :        */
   41336             :           SgFormatItem* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   41337             : 
   41338             : // *** COMMON CODE SECTION ENDS HERE ***
   41339             : 
   41340             : 
   41341             : // End of memberFunctionString
   41342             : // Start of memberFunctionString
   41343             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   41344             : 
   41345             :      // the generated cast function
   41346             :      // friend ROSE_DLL_API SgFormatItem* isSgFormatItem ( SgNode* s );
   41347             : 
   41348             :           typedef SgSupport base_node_type;
   41349             : 
   41350             : 
   41351             : // End of memberFunctionString
   41352             : 
   41353             :      public: 
   41354             :          int get_repeat_specification() const;
   41355             :          void set_repeat_specification(int repeat_specification);
   41356             : 
   41357             :      public: 
   41358             :          SgExpression* get_data() const;
   41359             :          void set_data(SgExpression* data);
   41360             : 
   41361             :      public: 
   41362             :          SgFormatItemList* get_format_item_list() const;
   41363             :          void set_format_item_list(SgFormatItemList* format_item_list);
   41364             : 
   41365             : 
   41366             :      public: 
   41367             :          virtual ~SgFormatItem();
   41368             : 
   41369             : 
   41370             :      public: 
   41371             :          SgFormatItem(); 
   41372             : 
   41373             :     protected:
   41374             : // Start of memberFunctionString
   41375             : int p_repeat_specification;
   41376             :           
   41377             : // End of memberFunctionString
   41378             : // Start of memberFunctionString
   41379             : SgExpression* p_data;
   41380             :           
   41381             : // End of memberFunctionString
   41382             : // Start of memberFunctionString
   41383             : SgFormatItemList* p_format_item_list;
   41384             :           
   41385             : // End of memberFunctionString
   41386             : 
   41387             :     friend struct Rose::Traits::generated::describe_node_t<SgFormatItem>;
   41388             :     friend struct Rose::Traits::generated::describe_field_t<SgFormatItem, int,&SgFormatItem::p_repeat_specification>;
   41389             :     friend struct Rose::Traits::generated::describe_field_t<SgFormatItem, SgExpression*,&SgFormatItem::p_data>;
   41390             :     friend struct Rose::Traits::generated::describe_field_t<SgFormatItem, SgFormatItemList*,&SgFormatItem::p_format_item_list>;
   41391             : 
   41392             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41393             : 
   41394             : 
   41395             :    };
   41396             : #endif
   41397             : 
   41398             : // postdeclarations for SgFormatItem
   41399             : 
   41400             : /* #line 41401 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41401             : 
   41402             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   41403             : 
   41404             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41405             : 
   41406             : 
   41407             : /* #line 41408 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41408             : 
   41409             : 
   41410             : 
   41411             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41412             : 
   41413             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   41414             : //      This code is automatically generated for each 
   41415             : //      terminal and non-terminal within the defined 
   41416             : //      grammar.  There is a simple way to change the 
   41417             : //      code to fix bugs etc.  See the ROSE README file
   41418             : //      for directions.
   41419             : 
   41420             : // tps: (02/22/2010): Adding DLL export requirements
   41421             : #include "rosedll.h"
   41422             : 
   41423             : // predeclarations for SgFormatItemList
   41424             : 
   41425             : /* #line 41426 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41426             : 
   41427             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   41428             : 
   41429             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41430             : 
   41431             : #if 1
   41432             : // Class Definition for SgFormatItemList
   41433             : class ROSE_DLL_API SgFormatItemList  : public SgSupport
   41434             :    {
   41435             :      public:
   41436             : 
   41437             : 
   41438             : /* #line 41439 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41439             : 
   41440             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   41441             : // Start of memberFunctionString
   41442             : /* #line 2423 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   41443             : 
   41444             : 
   41445             :           const SgFormatItemPtrList & get_format_item_list() const;
   41446             :           SgFormatItemPtrList & get_format_item_list();
   41447             :           void set_format_item_list ( const SgFormatItemPtrList & formatItemList );
   41448             : 
   41449             : 
   41450             : 
   41451             : // End of memberFunctionString
   41452             : // Start of memberFunctionString
   41453             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   41454             : 
   41455             : // *** COMMON CODE SECTION BEGINS HERE ***
   41456             : 
   41457             :     public:
   41458             : 
   41459             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   41460             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   41461             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   41462             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   41463             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   41464             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   41465             : 
   41466             :       /*! \brief returns a string representing the class name */
   41467             :           virtual std::string class_name() const override;
   41468             : 
   41469             :       /*! \brief returns new style SageIII enum values */
   41470             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   41471             : 
   41472             :       /*! \brief static variant value */
   41473             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   41474             :        // static const VariantT static_variant = V_SgFormatItemList;
   41475             :           enum { static_variant = V_SgFormatItemList };
   41476             : 
   41477             :        /* the generated cast function */
   41478             :       /*! \brief Casts pointer from base class to derived class */
   41479             :           ROSE_DLL_API friend       SgFormatItemList* isSgFormatItemList(       SgNode * s );
   41480             : 
   41481             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   41482             :           ROSE_DLL_API friend const SgFormatItemList* isSgFormatItemList( const SgNode * s );
   41483             : 
   41484             :      // ******************************************
   41485             :      // * Memory Pool / New / Delete
   41486             :      // ******************************************
   41487             : 
   41488             :      public:
   41489             :           /// \private
   41490             :           static const unsigned pool_size; //
   41491             :           /// \private
   41492             :           static std::vector<unsigned char *> pools; //
   41493             :           /// \private
   41494             :           static SgFormatItemList * next_node; // 
   41495             : 
   41496             :           /// \private
   41497             :           static unsigned long initializeStorageClassArray(SgFormatItemListStorageClass *); //
   41498             : 
   41499             :           /// \private
   41500             :           static void clearMemoryPool(); //
   41501             :           static void deleteMemoryPool(); //
   41502             : 
   41503             :           /// \private
   41504             :           static void extendMemoryPoolForFileIO(); //
   41505             : 
   41506             :           /// \private
   41507             :           static SgFormatItemList * getPointerFromGlobalIndex(unsigned long); //
   41508             :           /// \private
   41509             :           static SgFormatItemList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   41510             : 
   41511             :           /// \private
   41512             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   41513             :           /// \private
   41514             :           static void resetValidFreepointers(); //
   41515             :           /// \private
   41516             :           static unsigned long getNumberOfLastValidPointer(); //
   41517             : 
   41518             : 
   41519             : #if defined(INLINE_FUNCTIONS)
   41520             :       /*! \brief returns pointer to newly allocated IR node */
   41521             :           inline void *operator new (size_t size);
   41522             : #else
   41523             :       /*! \brief returns pointer to newly allocated IR node */
   41524             :           void *operator new (size_t size);
   41525             : #endif
   41526             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   41527             :           void operator delete (void* pointer, size_t size);
   41528             : 
   41529             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   41530           0 :           void operator delete (void* pointer)
   41531             :              {
   41532             :             // This is the generated delete operator...
   41533           0 :                SgFormatItemList::operator delete (pointer,sizeof(SgFormatItemList));
   41534             :              }
   41535             : 
   41536             :       /*! \brief Returns the total number of IR nodes of this type */
   41537             :           static size_t numberOfNodes();
   41538             : 
   41539             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   41540             :           static size_t memoryUsage();
   41541             : 
   41542             :       // End of scope which started in IR nodes specific code 
   41543             :       /* */
   41544             : 
   41545             :       /* name Internal Functions
   41546             :           \brief Internal functions ... incomplete-documentation
   41547             : 
   41548             :           These functions have been made public as part of the design, but they are suggested for internal use 
   41549             :           or by particularly knowledgeable users for specialized tools or applications.
   41550             : 
   41551             :           \internal We could not make these private because they are required by user for special purposes. And 
   41552             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   41553             :          
   41554             :        */
   41555             : 
   41556             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   41557             :        // overridden in every class by *generated* implementation
   41558             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   41559             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   41560             :        // MS: 06/28/02 container of names of variables or container indices 
   41561             :        // used used in the traversal to access AST successor nodes
   41562             :        // overridden in every class by *generated* implementation
   41563             :       /*! \brief container of names of variables or container indices used used in the traversal
   41564             :           to access AST successor nodes overridden in every class by *generated* implementation */
   41565             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   41566             : 
   41567             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   41568             :        // than all the vector copies. The implementation for these functions is generated for each class.
   41569             :       /*! \brief return number of children in the traversal successor list */
   41570             :           virtual size_t get_numberOfTraversalSuccessors() override;
   41571             :       /*! \brief index-based access to traversal successors by index number */
   41572             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   41573             :       /*! \brief index-based access to traversal successors by child node */
   41574             :           virtual size_t get_childIndex(SgNode *child) override;
   41575             : 
   41576             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   41577             :        // MS: 08/16/2002 method for generating RTI information
   41578             :       /*! \brief return C++ Runtime-Time-Information */
   41579             :           virtual RTIReturnType roseRTI() override;
   41580             : #endif
   41581             :       /* */
   41582             : 
   41583             : 
   41584             : 
   41585             :       /* name Deprecated Functions
   41586             :           \brief Deprecated functions ... incomplete-documentation
   41587             : 
   41588             :           These functions have been deprecated from use.
   41589             :        */
   41590             :       /* */
   41591             : 
   41592             :       /*! returns a C style string (char*) representing the class name */
   41593             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   41594             : 
   41595             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   41596             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   41597             : #if 0
   41598             :       /*! returns old style Sage II enum values */
   41599             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   41600             :       /*! returns old style Sage II enum values */
   41601             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   41602             : #endif
   41603             :       /* */
   41604             : 
   41605             : 
   41606             : 
   41607             : 
   41608             :      public:
   41609             :       /* name Traversal Support Functions
   41610             :           \brief Traversal support functions ... incomplete-documentation
   41611             : 
   41612             :           These functions have been made public as part of the design, but they are suggested for internal use 
   41613             :           or by particularly knowledgable users for specialized tools or applications.
   41614             :        */
   41615             :       /* */
   41616             : 
   41617             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   41618             :        // (inferior to ROSE traversal mechanism, experimental).
   41619             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   41620             :        */
   41621             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   41622             : 
   41623             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   41624             :       /*! \brief support for the classic visitor pattern done in GoF */
   41625             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   41626             : 
   41627             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   41628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   41629             :        */
   41630             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   41631             : 
   41632             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   41633             :        */
   41634             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   41635             : 
   41636             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   41637             :        // This traversal helps support internal tools that call static member functions.
   41638             :        // note: this function operates on the memory pools.
   41639             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   41640             :        */
   41641             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   41642             :       /* */
   41643             : 
   41644             : 
   41645             :      public:
   41646             :       /* name Memory Allocation Functions
   41647             :           \brief Memory allocations functions ... incomplete-documentation
   41648             : 
   41649             :           These functions have been made public as part of the design, but they are suggested for internal use 
   41650             :           or by particularly knowledgable users for specialized tools or applications.
   41651             :        */
   41652             :       /* */
   41653             : 
   41654             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   41655             : 
   41656             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   41657             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   41658             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   41659             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   41660             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   41661             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   41662             :           being used with the AST File I/O mechanism.
   41663             :        */
   41664             :           virtual bool isInMemoryPool() override;
   41665             : 
   41666             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   41667             : 
   41668             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   41669             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   41670             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   41671             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   41672             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   41673             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   41674             :           being used with the AST File I/O mechanism.
   41675             :        */
   41676             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   41677             : 
   41678             :       // DQ (4/30/2006): Modified to be a const function.
   41679             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   41680             : 
   41681             :           This functions is part of general support for many possible tools to operate 
   41682             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   41683             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   41684             :           less than the set of pointers used by the AST file I/O. This is part of
   41685             :           work implemented by Andreas, and support tools such as the AST graph generation.
   41686             : 
   41687             :           \warning This function can return unexpected data members and thus the 
   41688             :                    order and the number of elements is unpredicable and subject 
   41689             :                    to change.
   41690             : 
   41691             :           \returns STL vector of pairs of SgNode* and strings
   41692             :        */
   41693             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   41694             : 
   41695             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   41696             : 
   41697             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   41698             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   41699             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   41700             : 
   41701             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   41702             :                    and subject to change.
   41703             :        */
   41704             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   41705             : 
   41706             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   41707             : 
   41708             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   41709             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   41710             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   41711             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   41712             : 
   41713             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   41714             : 
   41715             :           \returns long
   41716             :        */
   41717             :           virtual long getChildIndex( SgNode* childNode ) const override;
   41718             : 
   41719             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   41720             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   41721             :       /* \brief Constructor for use by AST File I/O Mechanism
   41722             : 
   41723             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   41724             :           which obtained via fast binary file I/O from disk.
   41725             :        */
   41726             :        // SgFormatItemList( SgFormatItemListStorageClass& source );
   41727             : 
   41728             : 
   41729             : 
   41730             : 
   41731             : 
   41732             :  // JH (10/24/2005): methods added to support the ast file IO
   41733             :     private:
   41734             : 
   41735             :       /* name AST Memory Allocation Support Functions
   41736             :           \brief Memory allocations support....
   41737             : 
   41738             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   41739             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   41740             :           and support the AST File I/O Mechanism.
   41741             :        */
   41742             :       /* */
   41743             : 
   41744             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   41745             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   41746             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   41747             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   41748             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   41749             :           a correspinding one in the AST_FILE_IO class!
   41750             :        */
   41751             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   41752             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   41753             :       /* \brief Typedef used for low level memory access.
   41754             :        */
   41755             :        // typedef unsigned char* TestType;
   41756             : 
   41757             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   41758             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   41759             :       /* \brief Typedef used to hold memory addresses as values.
   41760             :        */
   41761             :        // typedef unsigned long  AddressType;
   41762             : 
   41763             : 
   41764             : 
   41765             :        // necessary, to have direct access to the p_freepointer and the private methods !
   41766             :       /*! \brief friend class declaration to support AST File I/O */
   41767             :           friend class AST_FILE_IO;
   41768             : 
   41769             :       /*! \brief friend class declaration to support AST File I/O */
   41770             :           friend class SgFormatItemListStorageClass;
   41771             : 
   41772             :       /*! \brief friend class declaration to support AST File I/O */
   41773             :           friend class AstSpecificDataManagingClass;
   41774             : 
   41775             :       /*! \brief friend class declaration to support AST File I/O */
   41776             :           friend class AstSpecificDataManagingClassStorageClass;
   41777             :     public:
   41778             :       /*! \brief IR node constructor to support AST File I/O */
   41779             :           SgFormatItemList( const SgFormatItemListStorageClass& source );
   41780             : 
   41781             :  // private: // JJW hack
   41782             :        /*
   41783             :           name AST Memory Allocation Support Variables
   41784             :           Memory allocations support variables 
   41785             : 
   41786             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   41787             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   41788             :           and support the AST File I/O Mechanism.
   41789             :        */
   41790             :       /* */
   41791             : 
   41792             :     public:
   41793             : 
   41794             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   41795             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   41796             :       // virtual SgNode* addRegExpAttribute();
   41797             :       /*! \brief Support for AST matching using regular expression.
   41798             : 
   41799             :           This support is incomplete and the subject of current research to define 
   41800             :           RegEx trees to support inexact matching.
   41801             :        */
   41802             :           SgFormatItemList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   41803             : 
   41804             : // *** COMMON CODE SECTION ENDS HERE ***
   41805             : 
   41806             : 
   41807             : // End of memberFunctionString
   41808             : // Start of memberFunctionString
   41809             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   41810             : 
   41811             :      // the generated cast function
   41812             :      // friend ROSE_DLL_API SgFormatItemList* isSgFormatItemList ( SgNode* s );
   41813             : 
   41814             :           typedef SgSupport base_node_type;
   41815             : 
   41816             : 
   41817             : // End of memberFunctionString
   41818             : 
   41819             : 
   41820             : 
   41821             :      public: 
   41822             :          virtual ~SgFormatItemList();
   41823             : 
   41824             : 
   41825             :      public: 
   41826             :          SgFormatItemList(); 
   41827             : 
   41828             :     protected:
   41829             : // Start of memberFunctionString
   41830             : SgFormatItemPtrList p_format_item_list;
   41831             :           
   41832             : // End of memberFunctionString
   41833             : 
   41834             :     friend struct Rose::Traits::generated::describe_node_t<SgFormatItemList>;
   41835             :     friend struct Rose::Traits::generated::describe_field_t<SgFormatItemList, SgFormatItemPtrList,&SgFormatItemList::p_format_item_list>;
   41836             : 
   41837             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41838             : 
   41839             : 
   41840             :    };
   41841             : #endif
   41842             : 
   41843             : // postdeclarations for SgFormatItemList
   41844             : 
   41845             : /* #line 41846 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41846             : 
   41847             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   41848             : 
   41849             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41850             : 
   41851             : 
   41852             : /* #line 41853 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41853             : 
   41854             : 
   41855             : 
   41856             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41857             : 
   41858             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   41859             : //      This code is automatically generated for each 
   41860             : //      terminal and non-terminal within the defined 
   41861             : //      grammar.  There is a simple way to change the 
   41862             : //      code to fix bugs etc.  See the ROSE README file
   41863             : //      for directions.
   41864             : 
   41865             : // tps: (02/22/2010): Adding DLL export requirements
   41866             : #include "rosedll.h"
   41867             : 
   41868             : // predeclarations for SgDataStatementGroup
   41869             : 
   41870             : /* #line 41871 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41871             : 
   41872             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   41873             : 
   41874             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   41875             : 
   41876             : #if 1
   41877             : // Class Definition for SgDataStatementGroup
   41878             : class ROSE_DLL_API SgDataStatementGroup  : public SgSupport
   41879             :    {
   41880             :      public:
   41881             : 
   41882             : 
   41883             : /* #line 41884 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   41884             : 
   41885             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   41886             : // Start of memberFunctionString
   41887             : /* #line 2388 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   41888             : 
   41889             : 
   41890             :           const SgDataStatementObjectPtrList & get_object_list() const;
   41891             :           SgDataStatementObjectPtrList & get_object_list();
   41892             : 
   41893             :           const SgDataStatementValuePtrList & get_value_list() const;
   41894             :           SgDataStatementValuePtrList & get_value_list();
   41895             : 
   41896             : 
   41897             : 
   41898             : // End of memberFunctionString
   41899             : // Start of memberFunctionString
   41900             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   41901             : 
   41902             : // *** COMMON CODE SECTION BEGINS HERE ***
   41903             : 
   41904             :     public:
   41905             : 
   41906             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   41907             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   41908             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   41909             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   41910             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   41911             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   41912             : 
   41913             :       /*! \brief returns a string representing the class name */
   41914             :           virtual std::string class_name() const override;
   41915             : 
   41916             :       /*! \brief returns new style SageIII enum values */
   41917             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   41918             : 
   41919             :       /*! \brief static variant value */
   41920             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   41921             :        // static const VariantT static_variant = V_SgDataStatementGroup;
   41922             :           enum { static_variant = V_SgDataStatementGroup };
   41923             : 
   41924             :        /* the generated cast function */
   41925             :       /*! \brief Casts pointer from base class to derived class */
   41926             :           ROSE_DLL_API friend       SgDataStatementGroup* isSgDataStatementGroup(       SgNode * s );
   41927             : 
   41928             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   41929             :           ROSE_DLL_API friend const SgDataStatementGroup* isSgDataStatementGroup( const SgNode * s );
   41930             : 
   41931             :      // ******************************************
   41932             :      // * Memory Pool / New / Delete
   41933             :      // ******************************************
   41934             : 
   41935             :      public:
   41936             :           /// \private
   41937             :           static const unsigned pool_size; //
   41938             :           /// \private
   41939             :           static std::vector<unsigned char *> pools; //
   41940             :           /// \private
   41941             :           static SgDataStatementGroup * next_node; // 
   41942             : 
   41943             :           /// \private
   41944             :           static unsigned long initializeStorageClassArray(SgDataStatementGroupStorageClass *); //
   41945             : 
   41946             :           /// \private
   41947             :           static void clearMemoryPool(); //
   41948             :           static void deleteMemoryPool(); //
   41949             : 
   41950             :           /// \private
   41951             :           static void extendMemoryPoolForFileIO(); //
   41952             : 
   41953             :           /// \private
   41954             :           static SgDataStatementGroup * getPointerFromGlobalIndex(unsigned long); //
   41955             :           /// \private
   41956             :           static SgDataStatementGroup * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   41957             : 
   41958             :           /// \private
   41959             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   41960             :           /// \private
   41961             :           static void resetValidFreepointers(); //
   41962             :           /// \private
   41963             :           static unsigned long getNumberOfLastValidPointer(); //
   41964             : 
   41965             : 
   41966             : #if defined(INLINE_FUNCTIONS)
   41967             :       /*! \brief returns pointer to newly allocated IR node */
   41968             :           inline void *operator new (size_t size);
   41969             : #else
   41970             :       /*! \brief returns pointer to newly allocated IR node */
   41971             :           void *operator new (size_t size);
   41972             : #endif
   41973             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   41974             :           void operator delete (void* pointer, size_t size);
   41975             : 
   41976             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   41977           0 :           void operator delete (void* pointer)
   41978             :              {
   41979             :             // This is the generated delete operator...
   41980           0 :                SgDataStatementGroup::operator delete (pointer,sizeof(SgDataStatementGroup));
   41981             :              }
   41982             : 
   41983             :       /*! \brief Returns the total number of IR nodes of this type */
   41984             :           static size_t numberOfNodes();
   41985             : 
   41986             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   41987             :           static size_t memoryUsage();
   41988             : 
   41989             :       // End of scope which started in IR nodes specific code 
   41990             :       /* */
   41991             : 
   41992             :       /* name Internal Functions
   41993             :           \brief Internal functions ... incomplete-documentation
   41994             : 
   41995             :           These functions have been made public as part of the design, but they are suggested for internal use 
   41996             :           or by particularly knowledgeable users for specialized tools or applications.
   41997             : 
   41998             :           \internal We could not make these private because they are required by user for special purposes. And 
   41999             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   42000             :          
   42001             :        */
   42002             : 
   42003             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   42004             :        // overridden in every class by *generated* implementation
   42005             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   42006             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   42007             :        // MS: 06/28/02 container of names of variables or container indices 
   42008             :        // used used in the traversal to access AST successor nodes
   42009             :        // overridden in every class by *generated* implementation
   42010             :       /*! \brief container of names of variables or container indices used used in the traversal
   42011             :           to access AST successor nodes overridden in every class by *generated* implementation */
   42012             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   42013             : 
   42014             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   42015             :        // than all the vector copies. The implementation for these functions is generated for each class.
   42016             :       /*! \brief return number of children in the traversal successor list */
   42017             :           virtual size_t get_numberOfTraversalSuccessors() override;
   42018             :       /*! \brief index-based access to traversal successors by index number */
   42019             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   42020             :       /*! \brief index-based access to traversal successors by child node */
   42021             :           virtual size_t get_childIndex(SgNode *child) override;
   42022             : 
   42023             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   42024             :        // MS: 08/16/2002 method for generating RTI information
   42025             :       /*! \brief return C++ Runtime-Time-Information */
   42026             :           virtual RTIReturnType roseRTI() override;
   42027             : #endif
   42028             :       /* */
   42029             : 
   42030             : 
   42031             : 
   42032             :       /* name Deprecated Functions
   42033             :           \brief Deprecated functions ... incomplete-documentation
   42034             : 
   42035             :           These functions have been deprecated from use.
   42036             :        */
   42037             :       /* */
   42038             : 
   42039             :       /*! returns a C style string (char*) representing the class name */
   42040             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   42041             : 
   42042             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   42043             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   42044             : #if 0
   42045             :       /*! returns old style Sage II enum values */
   42046             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   42047             :       /*! returns old style Sage II enum values */
   42048             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   42049             : #endif
   42050             :       /* */
   42051             : 
   42052             : 
   42053             : 
   42054             : 
   42055             :      public:
   42056             :       /* name Traversal Support Functions
   42057             :           \brief Traversal support functions ... incomplete-documentation
   42058             : 
   42059             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42060             :           or by particularly knowledgable users for specialized tools or applications.
   42061             :        */
   42062             :       /* */
   42063             : 
   42064             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   42065             :        // (inferior to ROSE traversal mechanism, experimental).
   42066             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   42067             :        */
   42068             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   42069             : 
   42070             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   42071             :       /*! \brief support for the classic visitor pattern done in GoF */
   42072             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   42073             : 
   42074             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   42075             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   42076             :        */
   42077             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   42078             : 
   42079             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   42080             :        */
   42081             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   42082             : 
   42083             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   42084             :        // This traversal helps support internal tools that call static member functions.
   42085             :        // note: this function operates on the memory pools.
   42086             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   42087             :        */
   42088             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   42089             :       /* */
   42090             : 
   42091             : 
   42092             :      public:
   42093             :       /* name Memory Allocation Functions
   42094             :           \brief Memory allocations functions ... incomplete-documentation
   42095             : 
   42096             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42097             :           or by particularly knowledgable users for specialized tools or applications.
   42098             :        */
   42099             :       /* */
   42100             : 
   42101             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   42102             : 
   42103             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   42104             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   42105             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   42106             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   42107             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   42108             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   42109             :           being used with the AST File I/O mechanism.
   42110             :        */
   42111             :           virtual bool isInMemoryPool() override;
   42112             : 
   42113             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   42114             : 
   42115             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   42116             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   42117             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   42118             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   42119             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   42120             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   42121             :           being used with the AST File I/O mechanism.
   42122             :        */
   42123             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   42124             : 
   42125             :       // DQ (4/30/2006): Modified to be a const function.
   42126             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   42127             : 
   42128             :           This functions is part of general support for many possible tools to operate 
   42129             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   42130             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   42131             :           less than the set of pointers used by the AST file I/O. This is part of
   42132             :           work implemented by Andreas, and support tools such as the AST graph generation.
   42133             : 
   42134             :           \warning This function can return unexpected data members and thus the 
   42135             :                    order and the number of elements is unpredicable and subject 
   42136             :                    to change.
   42137             : 
   42138             :           \returns STL vector of pairs of SgNode* and strings
   42139             :        */
   42140             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   42141             : 
   42142             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   42143             : 
   42144             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   42145             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   42146             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   42147             : 
   42148             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   42149             :                    and subject to change.
   42150             :        */
   42151             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   42152             : 
   42153             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   42154             : 
   42155             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   42156             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   42157             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   42158             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   42159             : 
   42160             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   42161             : 
   42162             :           \returns long
   42163             :        */
   42164             :           virtual long getChildIndex( SgNode* childNode ) const override;
   42165             : 
   42166             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   42167             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   42168             :       /* \brief Constructor for use by AST File I/O Mechanism
   42169             : 
   42170             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   42171             :           which obtained via fast binary file I/O from disk.
   42172             :        */
   42173             :        // SgDataStatementGroup( SgDataStatementGroupStorageClass& source );
   42174             : 
   42175             : 
   42176             : 
   42177             : 
   42178             : 
   42179             :  // JH (10/24/2005): methods added to support the ast file IO
   42180             :     private:
   42181             : 
   42182             :       /* name AST Memory Allocation Support Functions
   42183             :           \brief Memory allocations support....
   42184             : 
   42185             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   42186             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   42187             :           and support the AST File I/O Mechanism.
   42188             :        */
   42189             :       /* */
   42190             : 
   42191             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   42192             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   42193             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   42194             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   42195             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   42196             :           a correspinding one in the AST_FILE_IO class!
   42197             :        */
   42198             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   42199             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   42200             :       /* \brief Typedef used for low level memory access.
   42201             :        */
   42202             :        // typedef unsigned char* TestType;
   42203             : 
   42204             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   42205             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   42206             :       /* \brief Typedef used to hold memory addresses as values.
   42207             :        */
   42208             :        // typedef unsigned long  AddressType;
   42209             : 
   42210             : 
   42211             : 
   42212             :        // necessary, to have direct access to the p_freepointer and the private methods !
   42213             :       /*! \brief friend class declaration to support AST File I/O */
   42214             :           friend class AST_FILE_IO;
   42215             : 
   42216             :       /*! \brief friend class declaration to support AST File I/O */
   42217             :           friend class SgDataStatementGroupStorageClass;
   42218             : 
   42219             :       /*! \brief friend class declaration to support AST File I/O */
   42220             :           friend class AstSpecificDataManagingClass;
   42221             : 
   42222             :       /*! \brief friend class declaration to support AST File I/O */
   42223             :           friend class AstSpecificDataManagingClassStorageClass;
   42224             :     public:
   42225             :       /*! \brief IR node constructor to support AST File I/O */
   42226             :           SgDataStatementGroup( const SgDataStatementGroupStorageClass& source );
   42227             : 
   42228             :  // private: // JJW hack
   42229             :        /*
   42230             :           name AST Memory Allocation Support Variables
   42231             :           Memory allocations support variables 
   42232             : 
   42233             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   42234             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   42235             :           and support the AST File I/O Mechanism.
   42236             :        */
   42237             :       /* */
   42238             : 
   42239             :     public:
   42240             : 
   42241             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   42242             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   42243             :       // virtual SgNode* addRegExpAttribute();
   42244             :       /*! \brief Support for AST matching using regular expression.
   42245             : 
   42246             :           This support is incomplete and the subject of current research to define 
   42247             :           RegEx trees to support inexact matching.
   42248             :        */
   42249             :           SgDataStatementGroup* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   42250             : 
   42251             : // *** COMMON CODE SECTION ENDS HERE ***
   42252             : 
   42253             : 
   42254             : // End of memberFunctionString
   42255             : // Start of memberFunctionString
   42256             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   42257             : 
   42258             :      // the generated cast function
   42259             :      // friend ROSE_DLL_API SgDataStatementGroup* isSgDataStatementGroup ( SgNode* s );
   42260             : 
   42261             :           typedef SgSupport base_node_type;
   42262             : 
   42263             : 
   42264             : // End of memberFunctionString
   42265             : 
   42266             : 
   42267             : 
   42268             : 
   42269             :      public: 
   42270             :          virtual ~SgDataStatementGroup();
   42271             : 
   42272             : 
   42273             :      public: 
   42274             :          SgDataStatementGroup(); 
   42275             : 
   42276             :     protected:
   42277             : // Start of memberFunctionString
   42278             : SgDataStatementObjectPtrList p_object_list;
   42279             :           
   42280             : // End of memberFunctionString
   42281             : // Start of memberFunctionString
   42282             : SgDataStatementValuePtrList p_value_list;
   42283             :           
   42284             : // End of memberFunctionString
   42285             : 
   42286             :     friend struct Rose::Traits::generated::describe_node_t<SgDataStatementGroup>;
   42287             :     friend struct Rose::Traits::generated::describe_field_t<SgDataStatementGroup, SgDataStatementObjectPtrList,&SgDataStatementGroup::p_object_list>;
   42288             :     friend struct Rose::Traits::generated::describe_field_t<SgDataStatementGroup, SgDataStatementValuePtrList,&SgDataStatementGroup::p_value_list>;
   42289             : 
   42290             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42291             : 
   42292             : 
   42293             :    };
   42294             : #endif
   42295             : 
   42296             : // postdeclarations for SgDataStatementGroup
   42297             : 
   42298             : /* #line 42299 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42299             : 
   42300             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   42301             : 
   42302             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42303             : 
   42304             : 
   42305             : /* #line 42306 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42306             : 
   42307             : 
   42308             : 
   42309             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42310             : 
   42311             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   42312             : //      This code is automatically generated for each 
   42313             : //      terminal and non-terminal within the defined 
   42314             : //      grammar.  There is a simple way to change the 
   42315             : //      code to fix bugs etc.  See the ROSE README file
   42316             : //      for directions.
   42317             : 
   42318             : // tps: (02/22/2010): Adding DLL export requirements
   42319             : #include "rosedll.h"
   42320             : 
   42321             : // predeclarations for SgDataStatementObject
   42322             : 
   42323             : /* #line 42324 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42324             : 
   42325             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   42326             : 
   42327             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42328             : 
   42329             : #if 1
   42330             : // Class Definition for SgDataStatementObject
   42331             : class ROSE_DLL_API SgDataStatementObject  : public SgSupport
   42332             :    {
   42333             :      public:
   42334             : 
   42335             : 
   42336             : /* #line 42337 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42337             : 
   42338             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   42339             : // Start of memberFunctionString
   42340             : /* #line 2398 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   42341             : 
   42342             : 
   42343             : 
   42344             : // End of memberFunctionString
   42345             : // Start of memberFunctionString
   42346             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   42347             : 
   42348             : // *** COMMON CODE SECTION BEGINS HERE ***
   42349             : 
   42350             :     public:
   42351             : 
   42352             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   42353             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   42354             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   42355             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   42356             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   42357             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   42358             : 
   42359             :       /*! \brief returns a string representing the class name */
   42360             :           virtual std::string class_name() const override;
   42361             : 
   42362             :       /*! \brief returns new style SageIII enum values */
   42363             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   42364             : 
   42365             :       /*! \brief static variant value */
   42366             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   42367             :        // static const VariantT static_variant = V_SgDataStatementObject;
   42368             :           enum { static_variant = V_SgDataStatementObject };
   42369             : 
   42370             :        /* the generated cast function */
   42371             :       /*! \brief Casts pointer from base class to derived class */
   42372             :           ROSE_DLL_API friend       SgDataStatementObject* isSgDataStatementObject(       SgNode * s );
   42373             : 
   42374             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   42375             :           ROSE_DLL_API friend const SgDataStatementObject* isSgDataStatementObject( const SgNode * s );
   42376             : 
   42377             :      // ******************************************
   42378             :      // * Memory Pool / New / Delete
   42379             :      // ******************************************
   42380             : 
   42381             :      public:
   42382             :           /// \private
   42383             :           static const unsigned pool_size; //
   42384             :           /// \private
   42385             :           static std::vector<unsigned char *> pools; //
   42386             :           /// \private
   42387             :           static SgDataStatementObject * next_node; // 
   42388             : 
   42389             :           /// \private
   42390             :           static unsigned long initializeStorageClassArray(SgDataStatementObjectStorageClass *); //
   42391             : 
   42392             :           /// \private
   42393             :           static void clearMemoryPool(); //
   42394             :           static void deleteMemoryPool(); //
   42395             : 
   42396             :           /// \private
   42397             :           static void extendMemoryPoolForFileIO(); //
   42398             : 
   42399             :           /// \private
   42400             :           static SgDataStatementObject * getPointerFromGlobalIndex(unsigned long); //
   42401             :           /// \private
   42402             :           static SgDataStatementObject * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   42403             : 
   42404             :           /// \private
   42405             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   42406             :           /// \private
   42407             :           static void resetValidFreepointers(); //
   42408             :           /// \private
   42409             :           static unsigned long getNumberOfLastValidPointer(); //
   42410             : 
   42411             : 
   42412             : #if defined(INLINE_FUNCTIONS)
   42413             :       /*! \brief returns pointer to newly allocated IR node */
   42414             :           inline void *operator new (size_t size);
   42415             : #else
   42416             :       /*! \brief returns pointer to newly allocated IR node */
   42417             :           void *operator new (size_t size);
   42418             : #endif
   42419             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   42420             :           void operator delete (void* pointer, size_t size);
   42421             : 
   42422             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   42423           0 :           void operator delete (void* pointer)
   42424             :              {
   42425             :             // This is the generated delete operator...
   42426           0 :                SgDataStatementObject::operator delete (pointer,sizeof(SgDataStatementObject));
   42427             :              }
   42428             : 
   42429             :       /*! \brief Returns the total number of IR nodes of this type */
   42430             :           static size_t numberOfNodes();
   42431             : 
   42432             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   42433             :           static size_t memoryUsage();
   42434             : 
   42435             :       // End of scope which started in IR nodes specific code 
   42436             :       /* */
   42437             : 
   42438             :       /* name Internal Functions
   42439             :           \brief Internal functions ... incomplete-documentation
   42440             : 
   42441             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42442             :           or by particularly knowledgeable users for specialized tools or applications.
   42443             : 
   42444             :           \internal We could not make these private because they are required by user for special purposes. And 
   42445             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   42446             :          
   42447             :        */
   42448             : 
   42449             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   42450             :        // overridden in every class by *generated* implementation
   42451             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   42452             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   42453             :        // MS: 06/28/02 container of names of variables or container indices 
   42454             :        // used used in the traversal to access AST successor nodes
   42455             :        // overridden in every class by *generated* implementation
   42456             :       /*! \brief container of names of variables or container indices used used in the traversal
   42457             :           to access AST successor nodes overridden in every class by *generated* implementation */
   42458             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   42459             : 
   42460             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   42461             :        // than all the vector copies. The implementation for these functions is generated for each class.
   42462             :       /*! \brief return number of children in the traversal successor list */
   42463             :           virtual size_t get_numberOfTraversalSuccessors() override;
   42464             :       /*! \brief index-based access to traversal successors by index number */
   42465             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   42466             :       /*! \brief index-based access to traversal successors by child node */
   42467             :           virtual size_t get_childIndex(SgNode *child) override;
   42468             : 
   42469             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   42470             :        // MS: 08/16/2002 method for generating RTI information
   42471             :       /*! \brief return C++ Runtime-Time-Information */
   42472             :           virtual RTIReturnType roseRTI() override;
   42473             : #endif
   42474             :       /* */
   42475             : 
   42476             : 
   42477             : 
   42478             :       /* name Deprecated Functions
   42479             :           \brief Deprecated functions ... incomplete-documentation
   42480             : 
   42481             :           These functions have been deprecated from use.
   42482             :        */
   42483             :       /* */
   42484             : 
   42485             :       /*! returns a C style string (char*) representing the class name */
   42486             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   42487             : 
   42488             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   42489             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   42490             : #if 0
   42491             :       /*! returns old style Sage II enum values */
   42492             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   42493             :       /*! returns old style Sage II enum values */
   42494             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   42495             : #endif
   42496             :       /* */
   42497             : 
   42498             : 
   42499             : 
   42500             : 
   42501             :      public:
   42502             :       /* name Traversal Support Functions
   42503             :           \brief Traversal support functions ... incomplete-documentation
   42504             : 
   42505             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42506             :           or by particularly knowledgable users for specialized tools or applications.
   42507             :        */
   42508             :       /* */
   42509             : 
   42510             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   42511             :        // (inferior to ROSE traversal mechanism, experimental).
   42512             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   42513             :        */
   42514             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   42515             : 
   42516             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   42517             :       /*! \brief support for the classic visitor pattern done in GoF */
   42518             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   42519             : 
   42520             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   42521             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   42522             :        */
   42523             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   42524             : 
   42525             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   42526             :        */
   42527             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   42528             : 
   42529             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   42530             :        // This traversal helps support internal tools that call static member functions.
   42531             :        // note: this function operates on the memory pools.
   42532             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   42533             :        */
   42534             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   42535             :       /* */
   42536             : 
   42537             : 
   42538             :      public:
   42539             :       /* name Memory Allocation Functions
   42540             :           \brief Memory allocations functions ... incomplete-documentation
   42541             : 
   42542             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42543             :           or by particularly knowledgable users for specialized tools or applications.
   42544             :        */
   42545             :       /* */
   42546             : 
   42547             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   42548             : 
   42549             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   42550             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   42551             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   42552             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   42553             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   42554             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   42555             :           being used with the AST File I/O mechanism.
   42556             :        */
   42557             :           virtual bool isInMemoryPool() override;
   42558             : 
   42559             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   42560             : 
   42561             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   42562             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   42563             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   42564             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   42565             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   42566             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   42567             :           being used with the AST File I/O mechanism.
   42568             :        */
   42569             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   42570             : 
   42571             :       // DQ (4/30/2006): Modified to be a const function.
   42572             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   42573             : 
   42574             :           This functions is part of general support for many possible tools to operate 
   42575             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   42576             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   42577             :           less than the set of pointers used by the AST file I/O. This is part of
   42578             :           work implemented by Andreas, and support tools such as the AST graph generation.
   42579             : 
   42580             :           \warning This function can return unexpected data members and thus the 
   42581             :                    order and the number of elements is unpredicable and subject 
   42582             :                    to change.
   42583             : 
   42584             :           \returns STL vector of pairs of SgNode* and strings
   42585             :        */
   42586             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   42587             : 
   42588             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   42589             : 
   42590             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   42591             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   42592             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   42593             : 
   42594             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   42595             :                    and subject to change.
   42596             :        */
   42597             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   42598             : 
   42599             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   42600             : 
   42601             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   42602             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   42603             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   42604             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   42605             : 
   42606             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   42607             : 
   42608             :           \returns long
   42609             :        */
   42610             :           virtual long getChildIndex( SgNode* childNode ) const override;
   42611             : 
   42612             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   42613             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   42614             :       /* \brief Constructor for use by AST File I/O Mechanism
   42615             : 
   42616             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   42617             :           which obtained via fast binary file I/O from disk.
   42618             :        */
   42619             :        // SgDataStatementObject( SgDataStatementObjectStorageClass& source );
   42620             : 
   42621             : 
   42622             : 
   42623             : 
   42624             : 
   42625             :  // JH (10/24/2005): methods added to support the ast file IO
   42626             :     private:
   42627             : 
   42628             :       /* name AST Memory Allocation Support Functions
   42629             :           \brief Memory allocations support....
   42630             : 
   42631             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   42632             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   42633             :           and support the AST File I/O Mechanism.
   42634             :        */
   42635             :       /* */
   42636             : 
   42637             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   42638             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   42639             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   42640             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   42641             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   42642             :           a correspinding one in the AST_FILE_IO class!
   42643             :        */
   42644             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   42645             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   42646             :       /* \brief Typedef used for low level memory access.
   42647             :        */
   42648             :        // typedef unsigned char* TestType;
   42649             : 
   42650             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   42651             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   42652             :       /* \brief Typedef used to hold memory addresses as values.
   42653             :        */
   42654             :        // typedef unsigned long  AddressType;
   42655             : 
   42656             : 
   42657             : 
   42658             :        // necessary, to have direct access to the p_freepointer and the private methods !
   42659             :       /*! \brief friend class declaration to support AST File I/O */
   42660             :           friend class AST_FILE_IO;
   42661             : 
   42662             :       /*! \brief friend class declaration to support AST File I/O */
   42663             :           friend class SgDataStatementObjectStorageClass;
   42664             : 
   42665             :       /*! \brief friend class declaration to support AST File I/O */
   42666             :           friend class AstSpecificDataManagingClass;
   42667             : 
   42668             :       /*! \brief friend class declaration to support AST File I/O */
   42669             :           friend class AstSpecificDataManagingClassStorageClass;
   42670             :     public:
   42671             :       /*! \brief IR node constructor to support AST File I/O */
   42672             :           SgDataStatementObject( const SgDataStatementObjectStorageClass& source );
   42673             : 
   42674             :  // private: // JJW hack
   42675             :        /*
   42676             :           name AST Memory Allocation Support Variables
   42677             :           Memory allocations support variables 
   42678             : 
   42679             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   42680             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   42681             :           and support the AST File I/O Mechanism.
   42682             :        */
   42683             :       /* */
   42684             : 
   42685             :     public:
   42686             : 
   42687             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   42688             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   42689             :       // virtual SgNode* addRegExpAttribute();
   42690             :       /*! \brief Support for AST matching using regular expression.
   42691             : 
   42692             :           This support is incomplete and the subject of current research to define 
   42693             :           RegEx trees to support inexact matching.
   42694             :        */
   42695             :           SgDataStatementObject* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   42696             : 
   42697             : // *** COMMON CODE SECTION ENDS HERE ***
   42698             : 
   42699             : 
   42700             : // End of memberFunctionString
   42701             : // Start of memberFunctionString
   42702             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   42703             : 
   42704             :      // the generated cast function
   42705             :      // friend ROSE_DLL_API SgDataStatementObject* isSgDataStatementObject ( SgNode* s );
   42706             : 
   42707             :           typedef SgSupport base_node_type;
   42708             : 
   42709             : 
   42710             : // End of memberFunctionString
   42711             : 
   42712             :      public: 
   42713             :          SgExprListExp* get_variableReference_list() const;
   42714             :          void set_variableReference_list(SgExprListExp* variableReference_list);
   42715             : 
   42716             : 
   42717             :      public: 
   42718             :          virtual ~SgDataStatementObject();
   42719             : 
   42720             : 
   42721             :      public: 
   42722             :          SgDataStatementObject(); 
   42723             : 
   42724             :     protected:
   42725             : // Start of memberFunctionString
   42726             : SgExprListExp* p_variableReference_list;
   42727             :           
   42728             : // End of memberFunctionString
   42729             : 
   42730             :     friend struct Rose::Traits::generated::describe_node_t<SgDataStatementObject>;
   42731             :     friend struct Rose::Traits::generated::describe_field_t<SgDataStatementObject, SgExprListExp*,&SgDataStatementObject::p_variableReference_list>;
   42732             : 
   42733             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42734             : 
   42735             : 
   42736             :    };
   42737             : #endif
   42738             : 
   42739             : // postdeclarations for SgDataStatementObject
   42740             : 
   42741             : /* #line 42742 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42742             : 
   42743             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   42744             : 
   42745             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42746             : 
   42747             : 
   42748             : /* #line 42749 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42749             : 
   42750             : 
   42751             : 
   42752             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42753             : 
   42754             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   42755             : //      This code is automatically generated for each 
   42756             : //      terminal and non-terminal within the defined 
   42757             : //      grammar.  There is a simple way to change the 
   42758             : //      code to fix bugs etc.  See the ROSE README file
   42759             : //      for directions.
   42760             : 
   42761             : // tps: (02/22/2010): Adding DLL export requirements
   42762             : #include "rosedll.h"
   42763             : 
   42764             : // predeclarations for SgIncludeFile
   42765             : 
   42766             : /* #line 42767 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42767             : 
   42768             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   42769             : 
   42770             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   42771             : 
   42772             : #if 1
   42773             : // Class Definition for SgIncludeFile
   42774             : class ROSE_DLL_API SgIncludeFile  : public SgSupport
   42775             :    {
   42776             :      public:
   42777             : 
   42778             : 
   42779             : /* #line 42780 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   42780             : 
   42781             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   42782             : // Start of memberFunctionString
   42783             : /* #line 6625 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   42784             : 
   42785             : 
   42786             : 
   42787             : // End of memberFunctionString
   42788             : // Start of memberFunctionString
   42789             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   42790             : 
   42791             : // *** COMMON CODE SECTION BEGINS HERE ***
   42792             : 
   42793             :     public:
   42794             : 
   42795             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   42796             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   42797             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   42798             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   42799             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   42800             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   42801             : 
   42802             :       /*! \brief returns a string representing the class name */
   42803             :           virtual std::string class_name() const override;
   42804             : 
   42805             :       /*! \brief returns new style SageIII enum values */
   42806             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   42807             : 
   42808             :       /*! \brief static variant value */
   42809             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   42810             :        // static const VariantT static_variant = V_SgIncludeFile;
   42811             :           enum { static_variant = V_SgIncludeFile };
   42812             : 
   42813             :        /* the generated cast function */
   42814             :       /*! \brief Casts pointer from base class to derived class */
   42815             :           ROSE_DLL_API friend       SgIncludeFile* isSgIncludeFile(       SgNode * s );
   42816             : 
   42817             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   42818             :           ROSE_DLL_API friend const SgIncludeFile* isSgIncludeFile( const SgNode * s );
   42819             : 
   42820             :      // ******************************************
   42821             :      // * Memory Pool / New / Delete
   42822             :      // ******************************************
   42823             : 
   42824             :      public:
   42825             :           /// \private
   42826             :           static const unsigned pool_size; //
   42827             :           /// \private
   42828             :           static std::vector<unsigned char *> pools; //
   42829             :           /// \private
   42830             :           static SgIncludeFile * next_node; // 
   42831             : 
   42832             :           /// \private
   42833             :           static unsigned long initializeStorageClassArray(SgIncludeFileStorageClass *); //
   42834             : 
   42835             :           /// \private
   42836             :           static void clearMemoryPool(); //
   42837             :           static void deleteMemoryPool(); //
   42838             : 
   42839             :           /// \private
   42840             :           static void extendMemoryPoolForFileIO(); //
   42841             : 
   42842             :           /// \private
   42843             :           static SgIncludeFile * getPointerFromGlobalIndex(unsigned long); //
   42844             :           /// \private
   42845             :           static SgIncludeFile * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   42846             : 
   42847             :           /// \private
   42848             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   42849             :           /// \private
   42850             :           static void resetValidFreepointers(); //
   42851             :           /// \private
   42852             :           static unsigned long getNumberOfLastValidPointer(); //
   42853             : 
   42854             : 
   42855             : #if defined(INLINE_FUNCTIONS)
   42856             :       /*! \brief returns pointer to newly allocated IR node */
   42857             :           inline void *operator new (size_t size);
   42858             : #else
   42859             :       /*! \brief returns pointer to newly allocated IR node */
   42860             :           void *operator new (size_t size);
   42861             : #endif
   42862             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   42863             :           void operator delete (void* pointer, size_t size);
   42864             : 
   42865             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   42866         448 :           void operator delete (void* pointer)
   42867             :              {
   42868             :             // This is the generated delete operator...
   42869         448 :                SgIncludeFile::operator delete (pointer,sizeof(SgIncludeFile));
   42870             :              }
   42871             : 
   42872             :       /*! \brief Returns the total number of IR nodes of this type */
   42873             :           static size_t numberOfNodes();
   42874             : 
   42875             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   42876             :           static size_t memoryUsage();
   42877             : 
   42878             :       // End of scope which started in IR nodes specific code 
   42879             :       /* */
   42880             : 
   42881             :       /* name Internal Functions
   42882             :           \brief Internal functions ... incomplete-documentation
   42883             : 
   42884             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42885             :           or by particularly knowledgeable users for specialized tools or applications.
   42886             : 
   42887             :           \internal We could not make these private because they are required by user for special purposes. And 
   42888             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   42889             :          
   42890             :        */
   42891             : 
   42892             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   42893             :        // overridden in every class by *generated* implementation
   42894             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   42895             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   42896             :        // MS: 06/28/02 container of names of variables or container indices 
   42897             :        // used used in the traversal to access AST successor nodes
   42898             :        // overridden in every class by *generated* implementation
   42899             :       /*! \brief container of names of variables or container indices used used in the traversal
   42900             :           to access AST successor nodes overridden in every class by *generated* implementation */
   42901             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   42902             : 
   42903             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   42904             :        // than all the vector copies. The implementation for these functions is generated for each class.
   42905             :       /*! \brief return number of children in the traversal successor list */
   42906             :           virtual size_t get_numberOfTraversalSuccessors() override;
   42907             :       /*! \brief index-based access to traversal successors by index number */
   42908             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   42909             :       /*! \brief index-based access to traversal successors by child node */
   42910             :           virtual size_t get_childIndex(SgNode *child) override;
   42911             : 
   42912             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   42913             :        // MS: 08/16/2002 method for generating RTI information
   42914             :       /*! \brief return C++ Runtime-Time-Information */
   42915             :           virtual RTIReturnType roseRTI() override;
   42916             : #endif
   42917             :       /* */
   42918             : 
   42919             : 
   42920             : 
   42921             :       /* name Deprecated Functions
   42922             :           \brief Deprecated functions ... incomplete-documentation
   42923             : 
   42924             :           These functions have been deprecated from use.
   42925             :        */
   42926             :       /* */
   42927             : 
   42928             :       /*! returns a C style string (char*) representing the class name */
   42929             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   42930             : 
   42931             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   42932             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   42933             : #if 0
   42934             :       /*! returns old style Sage II enum values */
   42935             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   42936             :       /*! returns old style Sage II enum values */
   42937             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   42938             : #endif
   42939             :       /* */
   42940             : 
   42941             : 
   42942             : 
   42943             : 
   42944             :      public:
   42945             :       /* name Traversal Support Functions
   42946             :           \brief Traversal support functions ... incomplete-documentation
   42947             : 
   42948             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42949             :           or by particularly knowledgable users for specialized tools or applications.
   42950             :        */
   42951             :       /* */
   42952             : 
   42953             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   42954             :        // (inferior to ROSE traversal mechanism, experimental).
   42955             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   42956             :        */
   42957             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   42958             : 
   42959             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   42960             :       /*! \brief support for the classic visitor pattern done in GoF */
   42961             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   42962             : 
   42963             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   42964             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   42965             :        */
   42966             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   42967             : 
   42968             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   42969             :        */
   42970             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   42971             : 
   42972             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   42973             :        // This traversal helps support internal tools that call static member functions.
   42974             :        // note: this function operates on the memory pools.
   42975             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   42976             :        */
   42977             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   42978             :       /* */
   42979             : 
   42980             : 
   42981             :      public:
   42982             :       /* name Memory Allocation Functions
   42983             :           \brief Memory allocations functions ... incomplete-documentation
   42984             : 
   42985             :           These functions have been made public as part of the design, but they are suggested for internal use 
   42986             :           or by particularly knowledgable users for specialized tools or applications.
   42987             :        */
   42988             :       /* */
   42989             : 
   42990             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   42991             : 
   42992             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   42993             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   42994             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   42995             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   42996             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   42997             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   42998             :           being used with the AST File I/O mechanism.
   42999             :        */
   43000             :           virtual bool isInMemoryPool() override;
   43001             : 
   43002             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   43003             : 
   43004             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   43005             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   43006             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   43007             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   43008             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   43009             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   43010             :           being used with the AST File I/O mechanism.
   43011             :        */
   43012             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   43013             : 
   43014             :       // DQ (4/30/2006): Modified to be a const function.
   43015             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   43016             : 
   43017             :           This functions is part of general support for many possible tools to operate 
   43018             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   43019             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   43020             :           less than the set of pointers used by the AST file I/O. This is part of
   43021             :           work implemented by Andreas, and support tools such as the AST graph generation.
   43022             : 
   43023             :           \warning This function can return unexpected data members and thus the 
   43024             :                    order and the number of elements is unpredicable and subject 
   43025             :                    to change.
   43026             : 
   43027             :           \returns STL vector of pairs of SgNode* and strings
   43028             :        */
   43029             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   43030             : 
   43031             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   43032             : 
   43033             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   43034             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   43035             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   43036             : 
   43037             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   43038             :                    and subject to change.
   43039             :        */
   43040             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   43041             : 
   43042             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   43043             : 
   43044             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   43045             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   43046             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   43047             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   43048             : 
   43049             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   43050             : 
   43051             :           \returns long
   43052             :        */
   43053             :           virtual long getChildIndex( SgNode* childNode ) const override;
   43054             : 
   43055             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   43056             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   43057             :       /* \brief Constructor for use by AST File I/O Mechanism
   43058             : 
   43059             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   43060             :           which obtained via fast binary file I/O from disk.
   43061             :        */
   43062             :        // SgIncludeFile( SgIncludeFileStorageClass& source );
   43063             : 
   43064             : 
   43065             : 
   43066             : 
   43067             : 
   43068             :  // JH (10/24/2005): methods added to support the ast file IO
   43069             :     private:
   43070             : 
   43071             :       /* name AST Memory Allocation Support Functions
   43072             :           \brief Memory allocations support....
   43073             : 
   43074             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   43075             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   43076             :           and support the AST File I/O Mechanism.
   43077             :        */
   43078             :       /* */
   43079             : 
   43080             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   43081             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   43082             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   43083             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   43084             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   43085             :           a correspinding one in the AST_FILE_IO class!
   43086             :        */
   43087             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   43088             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   43089             :       /* \brief Typedef used for low level memory access.
   43090             :        */
   43091             :        // typedef unsigned char* TestType;
   43092             : 
   43093             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   43094             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   43095             :       /* \brief Typedef used to hold memory addresses as values.
   43096             :        */
   43097             :        // typedef unsigned long  AddressType;
   43098             : 
   43099             : 
   43100             : 
   43101             :        // necessary, to have direct access to the p_freepointer and the private methods !
   43102             :       /*! \brief friend class declaration to support AST File I/O */
   43103             :           friend class AST_FILE_IO;
   43104             : 
   43105             :       /*! \brief friend class declaration to support AST File I/O */
   43106             :           friend class SgIncludeFileStorageClass;
   43107             : 
   43108             :       /*! \brief friend class declaration to support AST File I/O */
   43109             :           friend class AstSpecificDataManagingClass;
   43110             : 
   43111             :       /*! \brief friend class declaration to support AST File I/O */
   43112             :           friend class AstSpecificDataManagingClassStorageClass;
   43113             :     public:
   43114             :       /*! \brief IR node constructor to support AST File I/O */
   43115             :           SgIncludeFile( const SgIncludeFileStorageClass& source );
   43116             : 
   43117             :  // private: // JJW hack
   43118             :        /*
   43119             :           name AST Memory Allocation Support Variables
   43120             :           Memory allocations support variables 
   43121             : 
   43122             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   43123             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   43124             :           and support the AST File I/O Mechanism.
   43125             :        */
   43126             :       /* */
   43127             : 
   43128             :     public:
   43129             : 
   43130             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   43131             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   43132             :       // virtual SgNode* addRegExpAttribute();
   43133             :       /*! \brief Support for AST matching using regular expression.
   43134             : 
   43135             :           This support is incomplete and the subject of current research to define 
   43136             :           RegEx trees to support inexact matching.
   43137             :        */
   43138             :           SgIncludeFile* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   43139             : 
   43140             : // *** COMMON CODE SECTION ENDS HERE ***
   43141             : 
   43142             : 
   43143             : // End of memberFunctionString
   43144             : // Start of memberFunctionString
   43145             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   43146             : 
   43147             :      // the generated cast function
   43148             :      // friend ROSE_DLL_API SgIncludeFile* isSgIncludeFile ( SgNode* s );
   43149             : 
   43150             :           typedef SgSupport base_node_type;
   43151             : 
   43152             : 
   43153             : // End of memberFunctionString
   43154             : 
   43155             :      public: 
   43156             :          SgName get_filename() const;
   43157             :          void set_filename(SgName filename);
   43158             : 
   43159             :      public: 
   43160             :          SgSourceFile* get_source_file() const;
   43161             :          void set_source_file(SgSourceFile* source_file);
   43162             : 
   43163             :      public: 
   43164             :          const SgIncludeFilePtrList&  get_include_file_list() const;
   43165             :          SgIncludeFilePtrList& get_include_file_list(); 
   43166             : 
   43167             :      public: 
   43168             :          unsigned int get_first_source_sequence_number() const;
   43169             :          void set_first_source_sequence_number(unsigned int first_source_sequence_number);
   43170             : 
   43171             :      public: 
   43172             :          unsigned int get_last_source_sequence_number() const;
   43173             :          void set_last_source_sequence_number(unsigned int last_source_sequence_number);
   43174             : 
   43175             :      public: 
   43176             :          bool get_isIncludedMoreThanOnce() const;
   43177             :          void set_isIncludedMoreThanOnce(bool isIncludedMoreThanOnce);
   43178             : 
   43179             :      public: 
   43180             :          bool get_isPrimaryUse() const;
   43181             :          void set_isPrimaryUse(bool isPrimaryUse);
   43182             : 
   43183             :      public: 
   43184             :          std::string get_file_hash() const;
   43185             :          void set_file_hash(std::string file_hash);
   43186             : 
   43187             :      public: 
   43188             :          SgName get_name_used_in_include_directive() const;
   43189             :          void set_name_used_in_include_directive(SgName name_used_in_include_directive);
   43190             : 
   43191             :      public: 
   43192             :          SgSourceFile* get_source_file_of_translation_unit() const;
   43193             :          void set_source_file_of_translation_unit(SgSourceFile* source_file_of_translation_unit);
   43194             : 
   43195             :      public: 
   43196             :          SgSourceFile* get_including_source_file() const;
   43197             :          void set_including_source_file(SgSourceFile* including_source_file);
   43198             : 
   43199             :      public: 
   43200             :          SgIncludeFile* get_parent_include_file() const;
   43201             :          void set_parent_include_file(SgIncludeFile* parent_include_file);
   43202             : 
   43203             :      public: 
   43204             :          bool get_isSystemInclude() const;
   43205             :          void set_isSystemInclude(bool isSystemInclude);
   43206             : 
   43207             :      public: 
   43208             :          bool get_isPreinclude() const;
   43209             :          void set_isPreinclude(bool isPreinclude);
   43210             : 
   43211             :      public: 
   43212             :          bool get_requires_explict_path_for_unparsed_headers() const;
   43213             :          void set_requires_explict_path_for_unparsed_headers(bool requires_explict_path_for_unparsed_headers);
   43214             : 
   43215             :      public: 
   43216             :          bool get_can_be_supported_using_token_based_unparsing() const;
   43217             :          void set_can_be_supported_using_token_based_unparsing(bool can_be_supported_using_token_based_unparsing);
   43218             : 
   43219             :      public: 
   43220             :          SgName get_directory_prefix() const;
   43221             :          void set_directory_prefix(SgName directory_prefix);
   43222             : 
   43223             :      public: 
   43224             :          SgName get_name_without_path() const;
   43225             :          void set_name_without_path(SgName name_without_path);
   43226             : 
   43227             :      public: 
   43228             :          SgName get_applicationRootDirectory() const;
   43229             :          void set_applicationRootDirectory(SgName applicationRootDirectory);
   43230             : 
   43231             :      public: 
   43232             :          bool get_will_be_unparsed() const;
   43233             :          void set_will_be_unparsed(bool will_be_unparsed);
   43234             : 
   43235             :      public: 
   43236             :          bool get_isRoseSystemInclude() const;
   43237             :          void set_isRoseSystemInclude(bool isRoseSystemInclude);
   43238             : 
   43239             :      public: 
   43240             :          bool get_from_system_include_dir() const;
   43241             :          void set_from_system_include_dir(bool from_system_include_dir);
   43242             : 
   43243             :      public: 
   43244             :          bool get_preinclude_macros_only() const;
   43245             :          void set_preinclude_macros_only(bool preinclude_macros_only);
   43246             : 
   43247             :      public: 
   43248             :          bool get_isApplicationFile() const;
   43249             :          void set_isApplicationFile(bool isApplicationFile);
   43250             : 
   43251             :      public: 
   43252             :          bool get_isRootSourceFile() const;
   43253             :          void set_isRootSourceFile(bool isRootSourceFile);
   43254             : 
   43255             :      public: 
   43256             :          SgStatement* get_firstStatement() const;
   43257             :          void set_firstStatement(SgStatement* firstStatement);
   43258             : 
   43259             :      public: 
   43260             :          SgStatement* get_lastStatement() const;
   43261             :          void set_lastStatement(SgStatement* lastStatement);
   43262             : 
   43263             : 
   43264             :      public: 
   43265             :          virtual ~SgIncludeFile();
   43266             : 
   43267             : 
   43268             :      public: 
   43269             :          SgIncludeFile(SgName filename = ""); 
   43270             : 
   43271             :     protected:
   43272             : // Start of memberFunctionString
   43273             : SgName p_filename;
   43274             :           
   43275             : // End of memberFunctionString
   43276             : // Start of memberFunctionString
   43277             : SgSourceFile* p_source_file;
   43278             :           
   43279             : // End of memberFunctionString
   43280             : // Start of memberFunctionString
   43281             : SgIncludeFilePtrList p_include_file_list;
   43282             :           
   43283             : // End of memberFunctionString
   43284             : // Start of memberFunctionString
   43285             : unsigned int p_first_source_sequence_number;
   43286             :           
   43287             : // End of memberFunctionString
   43288             : // Start of memberFunctionString
   43289             : unsigned int p_last_source_sequence_number;
   43290             :           
   43291             : // End of memberFunctionString
   43292             : // Start of memberFunctionString
   43293             : bool p_isIncludedMoreThanOnce;
   43294             :           
   43295             : // End of memberFunctionString
   43296             : // Start of memberFunctionString
   43297             : bool p_isPrimaryUse;
   43298             :           
   43299             : // End of memberFunctionString
   43300             : // Start of memberFunctionString
   43301             : std::string p_file_hash;
   43302             :           
   43303             : // End of memberFunctionString
   43304             : // Start of memberFunctionString
   43305             : SgName p_name_used_in_include_directive;
   43306             :           
   43307             : // End of memberFunctionString
   43308             : // Start of memberFunctionString
   43309             : SgSourceFile* p_source_file_of_translation_unit;
   43310             :           
   43311             : // End of memberFunctionString
   43312             : // Start of memberFunctionString
   43313             : SgSourceFile* p_including_source_file;
   43314             :           
   43315             : // End of memberFunctionString
   43316             : // Start of memberFunctionString
   43317             : SgIncludeFile* p_parent_include_file;
   43318             :           
   43319             : // End of memberFunctionString
   43320             : // Start of memberFunctionString
   43321             : bool p_isSystemInclude;
   43322             :           
   43323             : // End of memberFunctionString
   43324             : // Start of memberFunctionString
   43325             : bool p_isPreinclude;
   43326             :           
   43327             : // End of memberFunctionString
   43328             : // Start of memberFunctionString
   43329             : bool p_requires_explict_path_for_unparsed_headers;
   43330             :           
   43331             : // End of memberFunctionString
   43332             : // Start of memberFunctionString
   43333             : bool p_can_be_supported_using_token_based_unparsing;
   43334             :           
   43335             : // End of memberFunctionString
   43336             : // Start of memberFunctionString
   43337             : SgName p_directory_prefix;
   43338             :           
   43339             : // End of memberFunctionString
   43340             : // Start of memberFunctionString
   43341             : SgName p_name_without_path;
   43342             :           
   43343             : // End of memberFunctionString
   43344             : // Start of memberFunctionString
   43345             : SgName p_applicationRootDirectory;
   43346             :           
   43347             : // End of memberFunctionString
   43348             : // Start of memberFunctionString
   43349             : bool p_will_be_unparsed;
   43350             :           
   43351             : // End of memberFunctionString
   43352             : // Start of memberFunctionString
   43353             : bool p_isRoseSystemInclude;
   43354             :           
   43355             : // End of memberFunctionString
   43356             : // Start of memberFunctionString
   43357             : bool p_from_system_include_dir;
   43358             :           
   43359             : // End of memberFunctionString
   43360             : // Start of memberFunctionString
   43361             : bool p_preinclude_macros_only;
   43362             :           
   43363             : // End of memberFunctionString
   43364             : // Start of memberFunctionString
   43365             : bool p_isApplicationFile;
   43366             :           
   43367             : // End of memberFunctionString
   43368             : // Start of memberFunctionString
   43369             : bool p_isRootSourceFile;
   43370             :           
   43371             : // End of memberFunctionString
   43372             : // Start of memberFunctionString
   43373             : SgStatement* p_firstStatement;
   43374             :           
   43375             : // End of memberFunctionString
   43376             : // Start of memberFunctionString
   43377             : SgStatement* p_lastStatement;
   43378             :           
   43379             : // End of memberFunctionString
   43380             : 
   43381             :     friend struct Rose::Traits::generated::describe_node_t<SgIncludeFile>;
   43382             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgName,&SgIncludeFile::p_filename>;
   43383             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgSourceFile*,&SgIncludeFile::p_source_file>;
   43384             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgIncludeFilePtrList,&SgIncludeFile::p_include_file_list>;
   43385             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, unsigned int,&SgIncludeFile::p_first_source_sequence_number>;
   43386             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, unsigned int,&SgIncludeFile::p_last_source_sequence_number>;
   43387             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_isIncludedMoreThanOnce>;
   43388             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_isPrimaryUse>;
   43389             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, std::string,&SgIncludeFile::p_file_hash>;
   43390             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgName,&SgIncludeFile::p_name_used_in_include_directive>;
   43391             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgSourceFile*,&SgIncludeFile::p_source_file_of_translation_unit>;
   43392             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgSourceFile*,&SgIncludeFile::p_including_source_file>;
   43393             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgIncludeFile*,&SgIncludeFile::p_parent_include_file>;
   43394             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_isSystemInclude>;
   43395             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_isPreinclude>;
   43396             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_requires_explict_path_for_unparsed_headers>;
   43397             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_can_be_supported_using_token_based_unparsing>;
   43398             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgName,&SgIncludeFile::p_directory_prefix>;
   43399             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgName,&SgIncludeFile::p_name_without_path>;
   43400             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgName,&SgIncludeFile::p_applicationRootDirectory>;
   43401             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_will_be_unparsed>;
   43402             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_isRoseSystemInclude>;
   43403             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_from_system_include_dir>;
   43404             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_preinclude_macros_only>;
   43405             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_isApplicationFile>;
   43406             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, bool,&SgIncludeFile::p_isRootSourceFile>;
   43407             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgStatement*,&SgIncludeFile::p_firstStatement>;
   43408             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeFile, SgStatement*,&SgIncludeFile::p_lastStatement>;
   43409             : 
   43410             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43411             : 
   43412             : 
   43413             :    };
   43414             : #endif
   43415             : 
   43416             : // postdeclarations for SgIncludeFile
   43417             : 
   43418             : /* #line 43419 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43419             : 
   43420             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   43421             : 
   43422             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43423             : 
   43424             : 
   43425             : /* #line 43426 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43426             : 
   43427             : 
   43428             : 
   43429             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43430             : 
   43431             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   43432             : //      This code is automatically generated for each 
   43433             : //      terminal and non-terminal within the defined 
   43434             : //      grammar.  There is a simple way to change the 
   43435             : //      code to fix bugs etc.  See the ROSE README file
   43436             : //      for directions.
   43437             : 
   43438             : // tps: (02/22/2010): Adding DLL export requirements
   43439             : #include "rosedll.h"
   43440             : 
   43441             : // predeclarations for SgDataStatementValue
   43442             : 
   43443             : /* #line 43444 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43444             : 
   43445             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   43446             : 
   43447             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43448             : 
   43449             : #if 1
   43450             : // Class Definition for SgDataStatementValue
   43451             : class ROSE_DLL_API SgDataStatementValue  : public SgSupport
   43452             :    {
   43453             :      public:
   43454             : 
   43455             : 
   43456             : /* #line 43457 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43457             : 
   43458             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   43459             : // Start of memberFunctionString
   43460             : /* #line 2401 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   43461             : 
   43462             : 
   43463             :       //! Support for Fortran data statement
   43464             :           enum data_statement_value_enum
   43465             :              {
   43466             :                e_unknown           = 0, /*!< error value */
   43467             :                e_default           = 1, /*!< default value */
   43468             :                e_explict_list      = 2, /*!< list of value expressions */
   43469             :                e_implicit_list     = 3, /*!< repeat-count * value */
   43470             :                e_implied_do        = 4, /*!< implied do loop initializer */
   43471             :                e_last_initializer_form  /*!< last value (upper bound on range of values, used in error checking) */
   43472             :              };
   43473             : 
   43474             :           void post_construction_initialization() override;
   43475             : 
   43476             : 
   43477             : 
   43478             : // End of memberFunctionString
   43479             : // Start of memberFunctionString
   43480             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   43481             : 
   43482             : // *** COMMON CODE SECTION BEGINS HERE ***
   43483             : 
   43484             :     public:
   43485             : 
   43486             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   43487             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   43488             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   43489             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   43490             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   43491             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   43492             : 
   43493             :       /*! \brief returns a string representing the class name */
   43494             :           virtual std::string class_name() const override;
   43495             : 
   43496             :       /*! \brief returns new style SageIII enum values */
   43497             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   43498             : 
   43499             :       /*! \brief static variant value */
   43500             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   43501             :        // static const VariantT static_variant = V_SgDataStatementValue;
   43502             :           enum { static_variant = V_SgDataStatementValue };
   43503             : 
   43504             :        /* the generated cast function */
   43505             :       /*! \brief Casts pointer from base class to derived class */
   43506             :           ROSE_DLL_API friend       SgDataStatementValue* isSgDataStatementValue(       SgNode * s );
   43507             : 
   43508             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   43509             :           ROSE_DLL_API friend const SgDataStatementValue* isSgDataStatementValue( const SgNode * s );
   43510             : 
   43511             :      // ******************************************
   43512             :      // * Memory Pool / New / Delete
   43513             :      // ******************************************
   43514             : 
   43515             :      public:
   43516             :           /// \private
   43517             :           static const unsigned pool_size; //
   43518             :           /// \private
   43519             :           static std::vector<unsigned char *> pools; //
   43520             :           /// \private
   43521             :           static SgDataStatementValue * next_node; // 
   43522             : 
   43523             :           /// \private
   43524             :           static unsigned long initializeStorageClassArray(SgDataStatementValueStorageClass *); //
   43525             : 
   43526             :           /// \private
   43527             :           static void clearMemoryPool(); //
   43528             :           static void deleteMemoryPool(); //
   43529             : 
   43530             :           /// \private
   43531             :           static void extendMemoryPoolForFileIO(); //
   43532             : 
   43533             :           /// \private
   43534             :           static SgDataStatementValue * getPointerFromGlobalIndex(unsigned long); //
   43535             :           /// \private
   43536             :           static SgDataStatementValue * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   43537             : 
   43538             :           /// \private
   43539             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   43540             :           /// \private
   43541             :           static void resetValidFreepointers(); //
   43542             :           /// \private
   43543             :           static unsigned long getNumberOfLastValidPointer(); //
   43544             : 
   43545             : 
   43546             : #if defined(INLINE_FUNCTIONS)
   43547             :       /*! \brief returns pointer to newly allocated IR node */
   43548             :           inline void *operator new (size_t size);
   43549             : #else
   43550             :       /*! \brief returns pointer to newly allocated IR node */
   43551             :           void *operator new (size_t size);
   43552             : #endif
   43553             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   43554             :           void operator delete (void* pointer, size_t size);
   43555             : 
   43556             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   43557           0 :           void operator delete (void* pointer)
   43558             :              {
   43559             :             // This is the generated delete operator...
   43560           0 :                SgDataStatementValue::operator delete (pointer,sizeof(SgDataStatementValue));
   43561             :              }
   43562             : 
   43563             :       /*! \brief Returns the total number of IR nodes of this type */
   43564             :           static size_t numberOfNodes();
   43565             : 
   43566             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   43567             :           static size_t memoryUsage();
   43568             : 
   43569             :       // End of scope which started in IR nodes specific code 
   43570             :       /* */
   43571             : 
   43572             :       /* name Internal Functions
   43573             :           \brief Internal functions ... incomplete-documentation
   43574             : 
   43575             :           These functions have been made public as part of the design, but they are suggested for internal use 
   43576             :           or by particularly knowledgeable users for specialized tools or applications.
   43577             : 
   43578             :           \internal We could not make these private because they are required by user for special purposes. And 
   43579             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   43580             :          
   43581             :        */
   43582             : 
   43583             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   43584             :        // overridden in every class by *generated* implementation
   43585             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   43586             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   43587             :        // MS: 06/28/02 container of names of variables or container indices 
   43588             :        // used used in the traversal to access AST successor nodes
   43589             :        // overridden in every class by *generated* implementation
   43590             :       /*! \brief container of names of variables or container indices used used in the traversal
   43591             :           to access AST successor nodes overridden in every class by *generated* implementation */
   43592             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   43593             : 
   43594             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   43595             :        // than all the vector copies. The implementation for these functions is generated for each class.
   43596             :       /*! \brief return number of children in the traversal successor list */
   43597             :           virtual size_t get_numberOfTraversalSuccessors() override;
   43598             :       /*! \brief index-based access to traversal successors by index number */
   43599             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   43600             :       /*! \brief index-based access to traversal successors by child node */
   43601             :           virtual size_t get_childIndex(SgNode *child) override;
   43602             : 
   43603             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   43604             :        // MS: 08/16/2002 method for generating RTI information
   43605             :       /*! \brief return C++ Runtime-Time-Information */
   43606             :           virtual RTIReturnType roseRTI() override;
   43607             : #endif
   43608             :       /* */
   43609             : 
   43610             : 
   43611             : 
   43612             :       /* name Deprecated Functions
   43613             :           \brief Deprecated functions ... incomplete-documentation
   43614             : 
   43615             :           These functions have been deprecated from use.
   43616             :        */
   43617             :       /* */
   43618             : 
   43619             :       /*! returns a C style string (char*) representing the class name */
   43620             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   43621             : 
   43622             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   43623             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   43624             : #if 0
   43625             :       /*! returns old style Sage II enum values */
   43626             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   43627             :       /*! returns old style Sage II enum values */
   43628             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   43629             : #endif
   43630             :       /* */
   43631             : 
   43632             : 
   43633             : 
   43634             : 
   43635             :      public:
   43636             :       /* name Traversal Support Functions
   43637             :           \brief Traversal support functions ... incomplete-documentation
   43638             : 
   43639             :           These functions have been made public as part of the design, but they are suggested for internal use 
   43640             :           or by particularly knowledgable users for specialized tools or applications.
   43641             :        */
   43642             :       /* */
   43643             : 
   43644             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   43645             :        // (inferior to ROSE traversal mechanism, experimental).
   43646             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   43647             :        */
   43648             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   43649             : 
   43650             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   43651             :       /*! \brief support for the classic visitor pattern done in GoF */
   43652             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   43653             : 
   43654             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   43655             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   43656             :        */
   43657             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   43658             : 
   43659             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   43660             :        */
   43661             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   43662             : 
   43663             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   43664             :        // This traversal helps support internal tools that call static member functions.
   43665             :        // note: this function operates on the memory pools.
   43666             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   43667             :        */
   43668             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   43669             :       /* */
   43670             : 
   43671             : 
   43672             :      public:
   43673             :       /* name Memory Allocation Functions
   43674             :           \brief Memory allocations functions ... incomplete-documentation
   43675             : 
   43676             :           These functions have been made public as part of the design, but they are suggested for internal use 
   43677             :           or by particularly knowledgable users for specialized tools or applications.
   43678             :        */
   43679             :       /* */
   43680             : 
   43681             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   43682             : 
   43683             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   43684             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   43685             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   43686             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   43687             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   43688             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   43689             :           being used with the AST File I/O mechanism.
   43690             :        */
   43691             :           virtual bool isInMemoryPool() override;
   43692             : 
   43693             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   43694             : 
   43695             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   43696             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   43697             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   43698             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   43699             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   43700             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   43701             :           being used with the AST File I/O mechanism.
   43702             :        */
   43703             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   43704             : 
   43705             :       // DQ (4/30/2006): Modified to be a const function.
   43706             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   43707             : 
   43708             :           This functions is part of general support for many possible tools to operate 
   43709             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   43710             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   43711             :           less than the set of pointers used by the AST file I/O. This is part of
   43712             :           work implemented by Andreas, and support tools such as the AST graph generation.
   43713             : 
   43714             :           \warning This function can return unexpected data members and thus the 
   43715             :                    order and the number of elements is unpredicable and subject 
   43716             :                    to change.
   43717             : 
   43718             :           \returns STL vector of pairs of SgNode* and strings
   43719             :        */
   43720             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   43721             : 
   43722             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   43723             : 
   43724             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   43725             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   43726             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   43727             : 
   43728             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   43729             :                    and subject to change.
   43730             :        */
   43731             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   43732             : 
   43733             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   43734             : 
   43735             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   43736             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   43737             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   43738             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   43739             : 
   43740             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   43741             : 
   43742             :           \returns long
   43743             :        */
   43744             :           virtual long getChildIndex( SgNode* childNode ) const override;
   43745             : 
   43746             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   43747             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   43748             :       /* \brief Constructor for use by AST File I/O Mechanism
   43749             : 
   43750             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   43751             :           which obtained via fast binary file I/O from disk.
   43752             :        */
   43753             :        // SgDataStatementValue( SgDataStatementValueStorageClass& source );
   43754             : 
   43755             : 
   43756             : 
   43757             : 
   43758             : 
   43759             :  // JH (10/24/2005): methods added to support the ast file IO
   43760             :     private:
   43761             : 
   43762             :       /* name AST Memory Allocation Support Functions
   43763             :           \brief Memory allocations support....
   43764             : 
   43765             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   43766             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   43767             :           and support the AST File I/O Mechanism.
   43768             :        */
   43769             :       /* */
   43770             : 
   43771             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   43772             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   43773             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   43774             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   43775             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   43776             :           a correspinding one in the AST_FILE_IO class!
   43777             :        */
   43778             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   43779             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   43780             :       /* \brief Typedef used for low level memory access.
   43781             :        */
   43782             :        // typedef unsigned char* TestType;
   43783             : 
   43784             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   43785             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   43786             :       /* \brief Typedef used to hold memory addresses as values.
   43787             :        */
   43788             :        // typedef unsigned long  AddressType;
   43789             : 
   43790             : 
   43791             : 
   43792             :        // necessary, to have direct access to the p_freepointer and the private methods !
   43793             :       /*! \brief friend class declaration to support AST File I/O */
   43794             :           friend class AST_FILE_IO;
   43795             : 
   43796             :       /*! \brief friend class declaration to support AST File I/O */
   43797             :           friend class SgDataStatementValueStorageClass;
   43798             : 
   43799             :       /*! \brief friend class declaration to support AST File I/O */
   43800             :           friend class AstSpecificDataManagingClass;
   43801             : 
   43802             :       /*! \brief friend class declaration to support AST File I/O */
   43803             :           friend class AstSpecificDataManagingClassStorageClass;
   43804             :     public:
   43805             :       /*! \brief IR node constructor to support AST File I/O */
   43806             :           SgDataStatementValue( const SgDataStatementValueStorageClass& source );
   43807             : 
   43808             :  // private: // JJW hack
   43809             :        /*
   43810             :           name AST Memory Allocation Support Variables
   43811             :           Memory allocations support variables 
   43812             : 
   43813             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   43814             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   43815             :           and support the AST File I/O Mechanism.
   43816             :        */
   43817             :       /* */
   43818             : 
   43819             :     public:
   43820             : 
   43821             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   43822             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   43823             :       // virtual SgNode* addRegExpAttribute();
   43824             :       /*! \brief Support for AST matching using regular expression.
   43825             : 
   43826             :           This support is incomplete and the subject of current research to define 
   43827             :           RegEx trees to support inexact matching.
   43828             :        */
   43829             :           SgDataStatementValue* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   43830             : 
   43831             : // *** COMMON CODE SECTION ENDS HERE ***
   43832             : 
   43833             : 
   43834             : // End of memberFunctionString
   43835             : // Start of memberFunctionString
   43836             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   43837             : 
   43838             :      // the generated cast function
   43839             :      // friend ROSE_DLL_API SgDataStatementValue* isSgDataStatementValue ( SgNode* s );
   43840             : 
   43841             :           typedef SgSupport base_node_type;
   43842             : 
   43843             : 
   43844             : // End of memberFunctionString
   43845             : 
   43846             :      public: 
   43847             :          SgDataStatementValue::data_statement_value_enum get_data_initialization_format() const;
   43848             :          void set_data_initialization_format(SgDataStatementValue::data_statement_value_enum data_initialization_format);
   43849             : 
   43850             :      public: 
   43851             :          SgExprListExp* get_initializer_list() const;
   43852             :          void set_initializer_list(SgExprListExp* initializer_list);
   43853             : 
   43854             :      public: 
   43855             :          SgExpression* get_repeat_expression() const;
   43856             :          void set_repeat_expression(SgExpression* repeat_expression);
   43857             : 
   43858             :      public: 
   43859             :          SgExpression* get_constant_expression() const;
   43860             :          void set_constant_expression(SgExpression* constant_expression);
   43861             : 
   43862             : 
   43863             :      public: 
   43864             :          virtual ~SgDataStatementValue();
   43865             : 
   43866             : 
   43867             :      public: 
   43868             :          SgDataStatementValue(SgDataStatementValue::data_statement_value_enum data_initialization_format = SgDataStatementValue::e_unknown); 
   43869             : 
   43870             :     protected:
   43871             : // Start of memberFunctionString
   43872             : SgDataStatementValue::data_statement_value_enum p_data_initialization_format;
   43873             :           
   43874             : // End of memberFunctionString
   43875             : // Start of memberFunctionString
   43876             : SgExprListExp* p_initializer_list;
   43877             :           
   43878             : // End of memberFunctionString
   43879             : // Start of memberFunctionString
   43880             : SgExpression* p_repeat_expression;
   43881             :           
   43882             : // End of memberFunctionString
   43883             : // Start of memberFunctionString
   43884             : SgExpression* p_constant_expression;
   43885             :           
   43886             : // End of memberFunctionString
   43887             : 
   43888             :     friend struct Rose::Traits::generated::describe_node_t<SgDataStatementValue>;
   43889             :     friend struct Rose::Traits::generated::describe_field_t<SgDataStatementValue, SgDataStatementValue::data_statement_value_enum,&SgDataStatementValue::p_data_initialization_format>;
   43890             :     friend struct Rose::Traits::generated::describe_field_t<SgDataStatementValue, SgExprListExp*,&SgDataStatementValue::p_initializer_list>;
   43891             :     friend struct Rose::Traits::generated::describe_field_t<SgDataStatementValue, SgExpression*,&SgDataStatementValue::p_repeat_expression>;
   43892             :     friend struct Rose::Traits::generated::describe_field_t<SgDataStatementValue, SgExpression*,&SgDataStatementValue::p_constant_expression>;
   43893             : 
   43894             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43895             : 
   43896             : 
   43897             :    };
   43898             : #endif
   43899             : 
   43900             : // postdeclarations for SgDataStatementValue
   43901             : 
   43902             : /* #line 43903 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43903             : 
   43904             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   43905             : 
   43906             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43907             : 
   43908             : 
   43909             : /* #line 43910 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43910             : 
   43911             : 
   43912             : 
   43913             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43914             : 
   43915             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   43916             : //      This code is automatically generated for each 
   43917             : //      terminal and non-terminal within the defined 
   43918             : //      grammar.  There is a simple way to change the 
   43919             : //      code to fix bugs etc.  See the ROSE README file
   43920             : //      for directions.
   43921             : 
   43922             : // tps: (02/22/2010): Adding DLL export requirements
   43923             : #include "rosedll.h"
   43924             : 
   43925             : // predeclarations for SgHeaderFileReport
   43926             : 
   43927             : /* #line 43928 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43928             : 
   43929             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   43930             : 
   43931             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   43932             : 
   43933             : #if 1
   43934             : // Class Definition for SgHeaderFileReport
   43935             : class ROSE_DLL_API SgHeaderFileReport  : public SgSupport
   43936             :    {
   43937             :      public:
   43938             : 
   43939             : 
   43940             : /* #line 43941 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   43941             : 
   43942             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   43943             : // Start of memberFunctionString
   43944             : /* #line 6629 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   43945             : 
   43946             :      private:
   43947             :        // Define these as private so that we can control and/or eliminate their use.
   43948             :        // SgHeaderFileReport( const SgHeaderFileReport & X );
   43949             :        // SgHeaderFileReport & operator= ( const SgHeaderFileReport & X );
   43950             : 
   43951             :      public:
   43952             :           void display( const std::string & label) const;
   43953             : 
   43954             :        // SgHeaderFileReport( SgSourceFile* sourceFile );
   43955             : 
   43956             : 
   43957             : 
   43958             : // End of memberFunctionString
   43959             : // Start of memberFunctionString
   43960             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   43961             : 
   43962             : // *** COMMON CODE SECTION BEGINS HERE ***
   43963             : 
   43964             :     public:
   43965             : 
   43966             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   43967             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   43968             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   43969             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   43970             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   43971             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   43972             : 
   43973             :       /*! \brief returns a string representing the class name */
   43974             :           virtual std::string class_name() const override;
   43975             : 
   43976             :       /*! \brief returns new style SageIII enum values */
   43977             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   43978             : 
   43979             :       /*! \brief static variant value */
   43980             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   43981             :        // static const VariantT static_variant = V_SgHeaderFileReport;
   43982             :           enum { static_variant = V_SgHeaderFileReport };
   43983             : 
   43984             :        /* the generated cast function */
   43985             :       /*! \brief Casts pointer from base class to derived class */
   43986             :           ROSE_DLL_API friend       SgHeaderFileReport* isSgHeaderFileReport(       SgNode * s );
   43987             : 
   43988             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   43989             :           ROSE_DLL_API friend const SgHeaderFileReport* isSgHeaderFileReport( const SgNode * s );
   43990             : 
   43991             :      // ******************************************
   43992             :      // * Memory Pool / New / Delete
   43993             :      // ******************************************
   43994             : 
   43995             :      public:
   43996             :           /// \private
   43997             :           static const unsigned pool_size; //
   43998             :           /// \private
   43999             :           static std::vector<unsigned char *> pools; //
   44000             :           /// \private
   44001             :           static SgHeaderFileReport * next_node; // 
   44002             : 
   44003             :           /// \private
   44004             :           static unsigned long initializeStorageClassArray(SgHeaderFileReportStorageClass *); //
   44005             : 
   44006             :           /// \private
   44007             :           static void clearMemoryPool(); //
   44008             :           static void deleteMemoryPool(); //
   44009             : 
   44010             :           /// \private
   44011             :           static void extendMemoryPoolForFileIO(); //
   44012             : 
   44013             :           /// \private
   44014             :           static SgHeaderFileReport * getPointerFromGlobalIndex(unsigned long); //
   44015             :           /// \private
   44016             :           static SgHeaderFileReport * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   44017             : 
   44018             :           /// \private
   44019             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   44020             :           /// \private
   44021             :           static void resetValidFreepointers(); //
   44022             :           /// \private
   44023             :           static unsigned long getNumberOfLastValidPointer(); //
   44024             : 
   44025             : 
   44026             : #if defined(INLINE_FUNCTIONS)
   44027             :       /*! \brief returns pointer to newly allocated IR node */
   44028             :           inline void *operator new (size_t size);
   44029             : #else
   44030             :       /*! \brief returns pointer to newly allocated IR node */
   44031             :           void *operator new (size_t size);
   44032             : #endif
   44033             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   44034             :           void operator delete (void* pointer, size_t size);
   44035             : 
   44036             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   44037           0 :           void operator delete (void* pointer)
   44038             :              {
   44039             :             // This is the generated delete operator...
   44040           0 :                SgHeaderFileReport::operator delete (pointer,sizeof(SgHeaderFileReport));
   44041             :              }
   44042             : 
   44043             :       /*! \brief Returns the total number of IR nodes of this type */
   44044             :           static size_t numberOfNodes();
   44045             : 
   44046             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   44047             :           static size_t memoryUsage();
   44048             : 
   44049             :       // End of scope which started in IR nodes specific code 
   44050             :       /* */
   44051             : 
   44052             :       /* name Internal Functions
   44053             :           \brief Internal functions ... incomplete-documentation
   44054             : 
   44055             :           These functions have been made public as part of the design, but they are suggested for internal use 
   44056             :           or by particularly knowledgeable users for specialized tools or applications.
   44057             : 
   44058             :           \internal We could not make these private because they are required by user for special purposes. And 
   44059             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   44060             :          
   44061             :        */
   44062             : 
   44063             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   44064             :        // overridden in every class by *generated* implementation
   44065             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   44066             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   44067             :        // MS: 06/28/02 container of names of variables or container indices 
   44068             :        // used used in the traversal to access AST successor nodes
   44069             :        // overridden in every class by *generated* implementation
   44070             :       /*! \brief container of names of variables or container indices used used in the traversal
   44071             :           to access AST successor nodes overridden in every class by *generated* implementation */
   44072             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   44073             : 
   44074             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   44075             :        // than all the vector copies. The implementation for these functions is generated for each class.
   44076             :       /*! \brief return number of children in the traversal successor list */
   44077             :           virtual size_t get_numberOfTraversalSuccessors() override;
   44078             :       /*! \brief index-based access to traversal successors by index number */
   44079             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   44080             :       /*! \brief index-based access to traversal successors by child node */
   44081             :           virtual size_t get_childIndex(SgNode *child) override;
   44082             : 
   44083             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   44084             :        // MS: 08/16/2002 method for generating RTI information
   44085             :       /*! \brief return C++ Runtime-Time-Information */
   44086             :           virtual RTIReturnType roseRTI() override;
   44087             : #endif
   44088             :       /* */
   44089             : 
   44090             : 
   44091             : 
   44092             :       /* name Deprecated Functions
   44093             :           \brief Deprecated functions ... incomplete-documentation
   44094             : 
   44095             :           These functions have been deprecated from use.
   44096             :        */
   44097             :       /* */
   44098             : 
   44099             :       /*! returns a C style string (char*) representing the class name */
   44100             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   44101             : 
   44102             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   44103             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   44104             : #if 0
   44105             :       /*! returns old style Sage II enum values */
   44106             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   44107             :       /*! returns old style Sage II enum values */
   44108             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   44109             : #endif
   44110             :       /* */
   44111             : 
   44112             : 
   44113             : 
   44114             : 
   44115             :      public:
   44116             :       /* name Traversal Support Functions
   44117             :           \brief Traversal support functions ... incomplete-documentation
   44118             : 
   44119             :           These functions have been made public as part of the design, but they are suggested for internal use 
   44120             :           or by particularly knowledgable users for specialized tools or applications.
   44121             :        */
   44122             :       /* */
   44123             : 
   44124             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   44125             :        // (inferior to ROSE traversal mechanism, experimental).
   44126             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   44127             :        */
   44128             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   44129             : 
   44130             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   44131             :       /*! \brief support for the classic visitor pattern done in GoF */
   44132             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   44133             : 
   44134             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   44135             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   44136             :        */
   44137             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   44138             : 
   44139             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   44140             :        */
   44141             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   44142             : 
   44143             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   44144             :        // This traversal helps support internal tools that call static member functions.
   44145             :        // note: this function operates on the memory pools.
   44146             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   44147             :        */
   44148             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   44149             :       /* */
   44150             : 
   44151             : 
   44152             :      public:
   44153             :       /* name Memory Allocation Functions
   44154             :           \brief Memory allocations functions ... incomplete-documentation
   44155             : 
   44156             :           These functions have been made public as part of the design, but they are suggested for internal use 
   44157             :           or by particularly knowledgable users for specialized tools or applications.
   44158             :        */
   44159             :       /* */
   44160             : 
   44161             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   44162             : 
   44163             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   44164             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   44165             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   44166             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   44167             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   44168             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   44169             :           being used with the AST File I/O mechanism.
   44170             :        */
   44171             :           virtual bool isInMemoryPool() override;
   44172             : 
   44173             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   44174             : 
   44175             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   44176             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   44177             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   44178             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   44179             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   44180             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   44181             :           being used with the AST File I/O mechanism.
   44182             :        */
   44183             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   44184             : 
   44185             :       // DQ (4/30/2006): Modified to be a const function.
   44186             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   44187             : 
   44188             :           This functions is part of general support for many possible tools to operate 
   44189             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   44190             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   44191             :           less than the set of pointers used by the AST file I/O. This is part of
   44192             :           work implemented by Andreas, and support tools such as the AST graph generation.
   44193             : 
   44194             :           \warning This function can return unexpected data members and thus the 
   44195             :                    order and the number of elements is unpredicable and subject 
   44196             :                    to change.
   44197             : 
   44198             :           \returns STL vector of pairs of SgNode* and strings
   44199             :        */
   44200             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   44201             : 
   44202             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   44203             : 
   44204             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   44205             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   44206             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   44207             : 
   44208             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   44209             :                    and subject to change.
   44210             :        */
   44211             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   44212             : 
   44213             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   44214             : 
   44215             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   44216             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   44217             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   44218             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   44219             : 
   44220             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   44221             : 
   44222             :           \returns long
   44223             :        */
   44224             :           virtual long getChildIndex( SgNode* childNode ) const override;
   44225             : 
   44226             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   44227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   44228             :       /* \brief Constructor for use by AST File I/O Mechanism
   44229             : 
   44230             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   44231             :           which obtained via fast binary file I/O from disk.
   44232             :        */
   44233             :        // SgHeaderFileReport( SgHeaderFileReportStorageClass& source );
   44234             : 
   44235             : 
   44236             : 
   44237             : 
   44238             : 
   44239             :  // JH (10/24/2005): methods added to support the ast file IO
   44240             :     private:
   44241             : 
   44242             :       /* name AST Memory Allocation Support Functions
   44243             :           \brief Memory allocations support....
   44244             : 
   44245             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   44246             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   44247             :           and support the AST File I/O Mechanism.
   44248             :        */
   44249             :       /* */
   44250             : 
   44251             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   44252             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   44253             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   44254             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   44255             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   44256             :           a correspinding one in the AST_FILE_IO class!
   44257             :        */
   44258             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   44259             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   44260             :       /* \brief Typedef used for low level memory access.
   44261             :        */
   44262             :        // typedef unsigned char* TestType;
   44263             : 
   44264             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   44265             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   44266             :       /* \brief Typedef used to hold memory addresses as values.
   44267             :        */
   44268             :        // typedef unsigned long  AddressType;
   44269             : 
   44270             : 
   44271             : 
   44272             :        // necessary, to have direct access to the p_freepointer and the private methods !
   44273             :       /*! \brief friend class declaration to support AST File I/O */
   44274             :           friend class AST_FILE_IO;
   44275             : 
   44276             :       /*! \brief friend class declaration to support AST File I/O */
   44277             :           friend class SgHeaderFileReportStorageClass;
   44278             : 
   44279             :       /*! \brief friend class declaration to support AST File I/O */
   44280             :           friend class AstSpecificDataManagingClass;
   44281             : 
   44282             :       /*! \brief friend class declaration to support AST File I/O */
   44283             :           friend class AstSpecificDataManagingClassStorageClass;
   44284             :     public:
   44285             :       /*! \brief IR node constructor to support AST File I/O */
   44286             :           SgHeaderFileReport( const SgHeaderFileReportStorageClass& source );
   44287             : 
   44288             :  // private: // JJW hack
   44289             :        /*
   44290             :           name AST Memory Allocation Support Variables
   44291             :           Memory allocations support variables 
   44292             : 
   44293             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   44294             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   44295             :           and support the AST File I/O Mechanism.
   44296             :        */
   44297             :       /* */
   44298             : 
   44299             :     public:
   44300             : 
   44301             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   44302             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   44303             :       // virtual SgNode* addRegExpAttribute();
   44304             :       /*! \brief Support for AST matching using regular expression.
   44305             : 
   44306             :           This support is incomplete and the subject of current research to define 
   44307             :           RegEx trees to support inexact matching.
   44308             :        */
   44309             :           SgHeaderFileReport* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   44310             : 
   44311             : // *** COMMON CODE SECTION ENDS HERE ***
   44312             : 
   44313             : 
   44314             : // End of memberFunctionString
   44315             : // Start of memberFunctionString
   44316             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   44317             : 
   44318             :      // the generated cast function
   44319             :      // friend ROSE_DLL_API SgHeaderFileReport* isSgHeaderFileReport ( SgNode* s );
   44320             : 
   44321             :           typedef SgSupport base_node_type;
   44322             : 
   44323             : 
   44324             : // End of memberFunctionString
   44325             : 
   44326             :      public: 
   44327             :          SgSourceFile* get_source_file() const;
   44328             :          void set_source_file(SgSourceFile* source_file);
   44329             : 
   44330             :      public: 
   44331             :          const SgSourceFilePtrList&  get_include_file_list() const;
   44332             :          SgSourceFilePtrList& get_include_file_list(); 
   44333             : 
   44334             : 
   44335             :      public: 
   44336             :          virtual ~SgHeaderFileReport();
   44337             : 
   44338             : 
   44339             :      public: 
   44340             :          SgHeaderFileReport(SgSourceFile* source_file  = NULL); 
   44341             : 
   44342             :     protected:
   44343             : // Start of memberFunctionString
   44344             : SgSourceFile* p_source_file;
   44345             :           
   44346             : // End of memberFunctionString
   44347             : // Start of memberFunctionString
   44348             : SgSourceFilePtrList p_include_file_list;
   44349             :           
   44350             : // End of memberFunctionString
   44351             : 
   44352             :     friend struct Rose::Traits::generated::describe_node_t<SgHeaderFileReport>;
   44353             :     friend struct Rose::Traits::generated::describe_field_t<SgHeaderFileReport, SgSourceFile*,&SgHeaderFileReport::p_source_file>;
   44354             :     friend struct Rose::Traits::generated::describe_field_t<SgHeaderFileReport, SgSourceFilePtrList,&SgHeaderFileReport::p_include_file_list>;
   44355             : 
   44356             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   44357             : 
   44358             : 
   44359             :    };
   44360             : #endif
   44361             : 
   44362             : // postdeclarations for SgHeaderFileReport
   44363             : 
   44364             : /* #line 44365 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   44365             : 
   44366             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   44367             : 
   44368             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   44369             : 
   44370             : 
   44371             : /* #line 44372 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   44372             : 
   44373             : 
   44374             : 
   44375             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   44376             : 
   44377             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   44378             : //      This code is automatically generated for each 
   44379             : //      terminal and non-terminal within the defined 
   44380             : //      grammar.  There is a simple way to change the 
   44381             : //      code to fix bugs etc.  See the ROSE README file
   44382             : //      for directions.
   44383             : 
   44384             : // tps: (02/22/2010): Adding DLL export requirements
   44385             : #include "rosedll.h"
   44386             : 
   44387             : // predeclarations for SgType
   44388             : 
   44389             : /* #line 44390 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   44390             : 
   44391             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   44392             : 
   44393             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   44394             : 
   44395             : #if 1
   44396             : // Class Definition for SgType
   44397             : class ROSE_DLL_API SgType  : public SgNode
   44398             :    {
   44399             :      public:
   44400             : 
   44401             : 
   44402             : /* #line 44403 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   44403             : 
   44404             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   44405             : // Start of memberFunctionString
   44406             : /* #line 7 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   44407             : 
   44408             : 
   44409             :  /*  This class forms a base class for all of the types represented in the C++ grammar.
   44410             :      All types are derived from this class and thus contain the following functionality.
   44411             :   */
   44412             : 
   44413             :      public:
   44414             :       /*
   44415             :           \if documentDevelopmentVersionUsingDoxygen
   44416             :           name Friend Classes
   44417             :                \brief Friend classes declarations
   44418             : 
   44419             :           \endif
   44420             :        */
   44421             :           friend class SgPointerType;         //!< provide access to private data
   44422             :           friend class SgReferenceType;       //!< provide access to private data
   44423             :           friend class SgRvalueReferenceType; //!< provide access to private data
   44424             :           friend class SgDeclType;            //!< provide access to private data
   44425             :           friend class SgTypedefType;         //!< provide access to private data
   44426             :           friend class SgTypeOfType;          //!< provide access to private data
   44427             :        /*! */
   44428             : 
   44429             :      public:
   44430             :       /*! \if documentDevelopmentVersionUsingDoxygen
   44431             :                \brief default constructor
   44432             : 
   44433             :                Default constructor and destructors are not documented in user
   44434             :                interface \ref defaultConstructorDestructorDocumentationPage.
   44435             :                \sa \ref defaultConstructorDestructorDocumentationPage
   44436             :           \endif
   44437             :        */
   44438             :           SgType();
   44439             : 
   44440             :       /*! \brief copy constructor
   44441             : 
   44442             :           The Copy constructor is provide to support the AST copy mechanism, where
   44443             :           types are copied to support copying of named types.
   44444             :        */
   44445             :           SgType(const SgType & X);
   44446             : 
   44447             :        // RV (1/30/2006)
   44448             :       /*! Returns a mangled string representation of this type.
   44449             :           Equivalent types have the same mangled string.
   44450             :        */
   44451             :           virtual SgName get_mangled (void) const;
   44452             : 
   44453             :        // SKW (3/1/2011): Added these explicit declarations since we no longer build them automatically
   44454             :           virtual SgExpression * get_type_kind () const;
   44455             :           virtual void set_type_kind ( SgExpression* type_kind );
   44456             : 
   44457             :       /*!
   44458             :           name Numerical Modifiers
   44459             :           \brief Compute numerical properties of type.
   44460             : 
   44461             :           These define numeric properties of the type (e.g. int, float, etc.)
   44462             : 
   44463             :           \internal Return type should be changed to "bool."
   44464             :        */
   44465             :           bool isUnsignedType() const;  //!< There are many sorts of unsigned types (this queries an arbitrary type).
   44466             :           bool isIntegerType() const;   //!< There are many sorts of integer types (this queries an arbitrary type).
   44467             :           bool isFloatType() const;     //!< There are several sorts of float types (this queries an arbitrary type).
   44468             : 
   44469             :        // DQ (4/20/2019): Added support to detect primative types (which don't require name qualification).
   44470             :           bool isPrimativeType() const;   //!< There are many sorts of primative types (this queries an arbitrary type).
   44471             :        /*! */
   44472             : 
   44473             :        // DQ (10/11/2007): These sorts of values are usually handled as enum fields in ROSE. They could be redone at some point.
   44474             :        // PC and AS new variables to support a flexible stripType() which takes an bit array as a paramater
   44475             :           static const unsigned char STRIP_MODIFIER_TYPE         = ((unsigned char) 1 << 0); // 0x01
   44476             :           static const unsigned char STRIP_REFERENCE_TYPE        = ((unsigned char) 1 << 1); // 0x02
   44477             :           static const unsigned char STRIP_RVALUE_REFERENCE_TYPE = ((unsigned char) 1 << 2); // 0x04
   44478             :           static const unsigned char STRIP_POINTER_TYPE          = ((unsigned char) 1 << 3); // 0x08
   44479             :           static const unsigned char STRIP_ARRAY_TYPE            = ((unsigned char) 1 << 4); // 0x16
   44480             :           static const unsigned char STRIP_TYPEDEF_TYPE          = ((unsigned char) 1 << 5); // 0x32
   44481             : 
   44482             :        // DQ (4/15/2019): Adding specific support for pointer to member (SgPointerMemberType) since we don't always
   44483             :        // want to strip it and we need better control over this.  Since SgPointerMemberType is derived from SgPointerType
   44484             :        // (which might be a design mistake) it was handled along with SgPointer but for name qualification we need the
   44485             :        // stripType function to have greater expresiveness.
   44486             :           static const unsigned char STRIP_POINTER_MEMBER_TYPE   = ((unsigned char) 1 << 6); // 0x64
   44487             : 
   44488             :       /*! \brief Some types store internal SgType pointers explicitly while others compute them from other data.  This function is true if it has a data member that is a type (pointer, array, etc.).
   44489             : 
   44490             :           Result is true if it stores a type explicitly as a data member, else false.
   44491             : 
   44492             :           \internal True only if this is either a SgPointerType, SgReferenceType, PointerMemberType,
   44493             :                     ModifierType, QualifiedNameType, FunctionType,
   44494             :                     MemberFunctionType, SgArrayType, TypeComplex, or TypeImaginary.
   44495             :        */
   44496             :           bool hasExplicitType();
   44497             : 
   44498             :       /*! \brief Some types can hide other type IR nodes internally.  This function is true if it can hide another type (pointer, array, etc.).
   44499             : 
   44500             :           Result is true if it can hide a one or more types, else false.
   44501             : 
   44502             :           \internal True only if this is either a SgPointerType, SgArrayType, SgReferenceType, SgTypedefType, SgFunctionType, or SgModifierType.
   44503             :        */
   44504             :           bool containsInternalTypes();
   44505             : 
   44506             :       /*! \brief Generate a container of types hidden in the input type.
   44507             : 
   44508             :           Returns a vector of types hidden in the input type (pointer, array, etc.).
   44509             : 
   44510             :           \internal Order of types in vector is not significant (e.g. for SgFunctionType IR nodes).
   44511             :        */
   44512             :           Rose_STL_Container<SgType*> getInternalTypes() const;
   44513             : 
   44514             :       /*! \brief Reset the base type.
   44515             :           This function resets the base type.  It is an error to call it for types where containsInternalTypes() == false.
   44516             :        */
   44517             :           void reset_base_type(SgType* baseType);
   44518             : 
   44519             :       /*! \brief Return the base type of the associated type.
   44520             :           The base type is important when dealing with pointers, arrays, etc.
   44521             :        */
   44522             :           SgType* findBaseType() const;
   44523             : 
   44524             :           SgType * dereference();              //!< Returns type hidden behind pointer of reference.
   44525             :           const SgType * dereference() const ; //!< Returns type hidden behind pointer of reference.
   44526             : 
   44527             :        // DQ (6/21/2005): Added to support getting a deeply nested types quickly and easily.
   44528             :       //! Returns hidden type beneath layers of typedefs, pointers, references, modifiers, array representation, etc.
   44529             :       //  SgType* stripType(unsigned char bit_array = STRIP_MODIFIER_TYPE | STRIP_REFERENCE_TYPE | STRIP_RVALUE_REFERENCE_TYPE | STRIP_POINTER_TYPE | STRIP_ARRAY_TYPE | STRIP_TYPEDEF_TYPE ) const;
   44530             :           SgType* stripType(unsigned char bit_array = STRIP_MODIFIER_TYPE | STRIP_REFERENCE_TYPE | STRIP_RVALUE_REFERENCE_TYPE |
   44531             :                                                       STRIP_POINTER_TYPE  | STRIP_ARRAY_TYPE     | STRIP_TYPEDEF_TYPE          | STRIP_POINTER_MEMBER_TYPE ) const;
   44532             : 
   44533             :        // DQ (6/30/2005): Added to support invistigation of hidden types
   44534             :       //! This only strips away typedefs and modifiers (specialized usage).
   44535             :           SgType* stripTypedefsAndModifiers() const;
   44536             : 
   44537             :        // DQ (6/30/2005): Would these functions also be useful?
   44538             :        // SgType* stripTypedefs() const;
   44539             :        // SgType* stripModifiers() const;
   44540             : 
   44541             :        // DQ (7/26/2010): Now we finally need this function!
   44542             :        // Generates a new SgModifierType with modifiers set according to input parameter.
   44543             :        // SgModifierType* matchModifiers(unsigned int f);
   44544             : 
   44545             :        // void printName(SgUnparse_Info& ui, ostream& os);
   44546             : 
   44547             : #if 0
   44548             :        // This codes was part of an experiment to distinguish struct tag { int x; } X; from struct tag X;
   44549             :        // It turns out that the declaration of the tag in this case in placed into the EDG orphan list
   44550             :        // as a type and that we don't require this mechanism (thought we might in the future so for now
   44551             :        // it is just commented out.
   44552             : 
   44553             :        // DQ Added to support unparsing of autonomous declarations
   44554             :        // Support for variable declearations where the type is explicitly defined as a structure
   44555             :           enum useWithinDeclarationEnum {
   44556             :            // handle cases of struct B btag { int x; } b_1st; and struct btag b_2nd;
   44557             :                e_first_declaration          = 0x00000001,
   44558             :            // distinguish between B { int x; } b; and B btag { int x; } b;
   44559             :                e_autonomous_tag_declaration = 0x00000002
   44560             :                                     };
   44561             :           useWithinDeclarationEnum p_useWithinDeclaration;
   44562             : 
   44563             :        // These are for support of the useWithinDeclaration variable
   44564             :           bool isFirstDeclaration() const;
   44565             :           void setFirstDeclaration();
   44566             :           void unsetFirstDeclaration();
   44567             :           bool isAutonomousTagDeclaration() const;
   44568             :           void setAutonomousTagDeclaration();
   44569             :           void unsetAutonomousTagDeclaration();
   44570             : #endif
   44571             : 
   44572             :        // DQ (9/7/2007): Support for Fortran attribute specifiers
   44573             :           enum fortran_attribute_specifiers_enum
   44574             :              {
   44575             :                e_unknown_attribute_specifier = 0,
   44576             :                e_public_access,
   44577             :                e_private_access,
   44578             :                e_allocatable,
   44579             :                e_asynchronous,
   44580             :                e_bind,
   44581             :                e_data,
   44582             :                e_dimension,
   44583             :                e_intent,
   44584             :                e_optional,
   44585             :                e_parameter,
   44586             :                e_pointer,
   44587             :                e_protected,
   44588             :                e_save,
   44589             :                e_target,
   44590             :                e_value,
   44591             :                e_volatile,
   44592             :                e_last_attribute_specifier
   44593             :              };
   44594             : 
   44595             : 
   44596             : 
   44597             :       /*
   44598             :           name Conversion Functions
   44599             :           \brief Simple conversion functions.
   44600             :           \internal Not sure these are useful when using the string interface.
   44601             :        */
   44602             :       //! performs simple conversions
   44603             :           static SgType * arithmetic_conversions(SgType *, SgType *);
   44604             : 
   44605             :       //! handles promotion to integer
   44606             :           static SgType * integer_promotion     (SgType *, SgType *);
   44607             : 
   44608             :       //! handles promotion to float
   44609             :           static SgType * float_promotion       (SgType *, SgType *);
   44610             :       /*! */
   44611             : 
   44612             :        // DQ (4/27/2005): Added protected function to support refactored code for name mangling
   44613             :      protected:
   44614             :       //! \deprecated by RV (2/2/2006)
   44615             :           SgName mangledNameSupport(SgName & fname, SgUnparse_Info& info);
   44616             : 
   44617             :      public:
   44618             : 
   44619             :        // DQ (7/24/2010): Added static function to distiquish which types (very few) are
   44620             :        // required to use the local type table for types built during AST construction.
   44621             :        // This is required to support that we don't always know the scope of a type while
   44622             :        // it is being constructed (while it's declarations are being constructed).
   44623             :           static bool handledUsingLocalTable( SgType* t );
   44624             : 
   44625             :        // DQ (7/30/2010): This function gets the scope from either the C/C++ or Fortran
   44626             :        // procesing so that the local type table in each scope can be referenced.
   44627             :           static SgScopeStatement* getCurrentScope();
   44628             : 
   44629             :           SgDeclarationStatement* getAssociatedDeclaration() const;
   44630             : 
   44631             : #if 0
   44632             :        // DQ (11/28/2015): This has been moved from the SgModifierType class to the SgType class since it is a general requirement.
   44633             :        // DQ (11/28/2015): Adding operator==() function to use in symbol table lookup when template
   44634             :        // arguments or parameters resolve to SgModifierType and we need to know if it is the same type.
   44635             :        // One might expect that with type tables they would only be the same if there were the same
   44636             :        // pointer, but I think this is not alwasy true for SgModifierType nodes.
   44637             :        // bool operator== (const SgType & Y) const;
   44638             : #endif
   44639             :        // DQ (12/8/2015): Insead of the operator==(), we require a more nuanced approach.
   44640             :        // There are concepts of type equivalence (where for example a typedef of an int would
   44641             :        // be the same type as the int) and type intechangablity, where two equivalent types will
   44642             :        // can be substituted for each other (which might not be possible if one of them has
   44643             :        // only private access permissions.
   44644             :       //! Type equivalence is the concept of equality between types independent of access permissions (e.g. private or protected types in a class).
   44645             :           bool isEquivalentType (const SgType * other_type) const;
   44646             : 
   44647             : 
   44648             : 
   44649             : // End of memberFunctionString
   44650             : // Start of memberFunctionString
   44651             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   44652             : 
   44653             : 
   44654             :      /* name Persistant Attribute Mechanism
   44655             : 
   44656             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   44657             :          multiple passes. Note that these attributes are persistant in that they are preserved
   44658             :          if the AST is written out to a file and read in from a file.  However, virtual function
   44659             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   44660             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   44661             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   44662             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   44663             :          access is required, however mostly only internal tools use this lower level support).
   44664             : 
   44665             :          \internal This used to be a public data member, but has been changed to be a protected
   44666             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   44667             :          but some of the names and the syntax for calling the interface have changed. The
   44668             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   44669             :       */
   44670             :      /* */
   44671             :      //! Add a new attribute represented by the named string.
   44672             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   44673             :      //! Returns attribute of name 's'.
   44674             :          virtual AstAttribute* getAttribute(std::string s) const override;
   44675             :      //! Replace existing attribute of name 's' with new AstAttribute.
   44676             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   44677             :      /*! \brief This is a wrapper function with the following semantics:
   44678             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   44679             :          otherwise \b updateAttribute(s,a); is called.
   44680             :       */
   44681             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   44682             :      //! Remove attribute of name 's' if present.
   44683             :          virtual void removeAttribute(std::string s) override;
   44684             :      //! Tests if attribute of name 's' is present.
   44685             :          virtual bool attributeExists(std::string s) const override;
   44686             :      //! Returns the number of attributes on this IR node.
   44687             :          virtual int numberOfAttributes() const override;
   44688             : 
   44689             :      /*! \fn AstAttributeMechanism* SgType::get_attributeMechanism() const;
   44690             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   44691             :                 a pointer to it is returned, else error.
   44692             : 
   44693             :          This is an access function used for getting the interally held pointer to a valid
   44694             :          AstAttributeMechanism. It provides access to lower level functionality of the
   44695             :          AstAttributeMechanism, put is mostly of use to internal tools.
   44696             :       */
   44697             :      /*! \fn void SgType::set_attributeMechanism(AstAttributeMechanism* a);
   44698             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   44699             : 
   44700             :          This is an access function used for setting the interally held pointer to a valid
   44701             :          AstAttributeMechanism.
   44702             :       */
   44703             :      /* */
   44704             : 
   44705             : 
   44706             : 
   44707             : 
   44708             : // End of memberFunctionString
   44709             : // Start of memberFunctionString
   44710             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   44711             : 
   44712             : // *** COMMON CODE SECTION BEGINS HERE ***
   44713             : 
   44714             :     public:
   44715             : 
   44716             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   44717             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   44718             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   44719             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   44720             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   44721             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   44722             : 
   44723             :       /*! \brief returns a string representing the class name */
   44724             :           virtual std::string class_name() const override;
   44725             : 
   44726             :       /*! \brief returns new style SageIII enum values */
   44727             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   44728             : 
   44729             :       /*! \brief static variant value */
   44730             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   44731             :        // static const VariantT static_variant = V_SgType;
   44732             :           enum { static_variant = V_SgType };
   44733             : 
   44734             :        /* the generated cast function */
   44735             :       /*! \brief Casts pointer from base class to derived class */
   44736             :           ROSE_DLL_API friend       SgType* isSgType(       SgNode * s );
   44737             : 
   44738             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   44739             :           ROSE_DLL_API friend const SgType* isSgType( const SgNode * s );
   44740             : 
   44741             :      // ******************************************
   44742             :      // * Memory Pool / New / Delete
   44743             :      // ******************************************
   44744             : 
   44745             :      public:
   44746             :           /// \private
   44747             :           static const unsigned pool_size; //
   44748             :           /// \private
   44749             :           static std::vector<unsigned char *> pools; //
   44750             :           /// \private
   44751             :           static SgType * next_node; // 
   44752             : 
   44753             :           /// \private
   44754             :           static unsigned long initializeStorageClassArray(SgTypeStorageClass *); //
   44755             : 
   44756             :           /// \private
   44757             :           static void clearMemoryPool(); //
   44758             :           static void deleteMemoryPool(); //
   44759             : 
   44760             :           /// \private
   44761             :           static void extendMemoryPoolForFileIO(); //
   44762             : 
   44763             :           /// \private
   44764             :           static SgType * getPointerFromGlobalIndex(unsigned long); //
   44765             :           /// \private
   44766             :           static SgType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   44767             : 
   44768             :           /// \private
   44769             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   44770             :           /// \private
   44771             :           static void resetValidFreepointers(); //
   44772             :           /// \private
   44773             :           static unsigned long getNumberOfLastValidPointer(); //
   44774             : 
   44775             : 
   44776             : #if defined(INLINE_FUNCTIONS)
   44777             :       /*! \brief returns pointer to newly allocated IR node */
   44778             :           inline void *operator new (size_t size);
   44779             : #else
   44780             :       /*! \brief returns pointer to newly allocated IR node */
   44781             :           void *operator new (size_t size);
   44782             : #endif
   44783             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   44784             :           void operator delete (void* pointer, size_t size);
   44785             : 
   44786             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   44787           0 :           void operator delete (void* pointer)
   44788             :              {
   44789             :             // This is the generated delete operator...
   44790           0 :                SgType::operator delete (pointer,sizeof(SgType));
   44791             :              }
   44792             : 
   44793             :       /*! \brief Returns the total number of IR nodes of this type */
   44794             :           static size_t numberOfNodes();
   44795             : 
   44796             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   44797             :           static size_t memoryUsage();
   44798             : 
   44799             :       // End of scope which started in IR nodes specific code 
   44800             :       /* */
   44801             : 
   44802             :       /* name Internal Functions
   44803             :           \brief Internal functions ... incomplete-documentation
   44804             : 
   44805             :           These functions have been made public as part of the design, but they are suggested for internal use 
   44806             :           or by particularly knowledgeable users for specialized tools or applications.
   44807             : 
   44808             :           \internal We could not make these private because they are required by user for special purposes. And 
   44809             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   44810             :          
   44811             :        */
   44812             : 
   44813             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   44814             :        // overridden in every class by *generated* implementation
   44815             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   44816             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   44817             :        // MS: 06/28/02 container of names of variables or container indices 
   44818             :        // used used in the traversal to access AST successor nodes
   44819             :        // overridden in every class by *generated* implementation
   44820             :       /*! \brief container of names of variables or container indices used used in the traversal
   44821             :           to access AST successor nodes overridden in every class by *generated* implementation */
   44822             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   44823             : 
   44824             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   44825             :        // than all the vector copies. The implementation for these functions is generated for each class.
   44826             :       /*! \brief return number of children in the traversal successor list */
   44827             :           virtual size_t get_numberOfTraversalSuccessors() override;
   44828             :       /*! \brief index-based access to traversal successors by index number */
   44829             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   44830             :       /*! \brief index-based access to traversal successors by child node */
   44831             :           virtual size_t get_childIndex(SgNode *child) override;
   44832             : 
   44833             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   44834             :        // MS: 08/16/2002 method for generating RTI information
   44835             :       /*! \brief return C++ Runtime-Time-Information */
   44836             :           virtual RTIReturnType roseRTI() override;
   44837             : #endif
   44838             :       /* */
   44839             : 
   44840             : 
   44841             : 
   44842             :       /* name Deprecated Functions
   44843             :           \brief Deprecated functions ... incomplete-documentation
   44844             : 
   44845             :           These functions have been deprecated from use.
   44846             :        */
   44847             :       /* */
   44848             : 
   44849             :       /*! returns a C style string (char*) representing the class name */
   44850             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   44851             : 
   44852             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   44853             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   44854             : #if 0
   44855             :       /*! returns old style Sage II enum values */
   44856             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   44857             :       /*! returns old style Sage II enum values */
   44858             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   44859             : #endif
   44860             :       /* */
   44861             : 
   44862             : 
   44863             : 
   44864             : 
   44865             :      public:
   44866             :       /* name Traversal Support Functions
   44867             :           \brief Traversal support functions ... incomplete-documentation
   44868             : 
   44869             :           These functions have been made public as part of the design, but they are suggested for internal use 
   44870             :           or by particularly knowledgable users for specialized tools or applications.
   44871             :        */
   44872             :       /* */
   44873             : 
   44874             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   44875             :        // (inferior to ROSE traversal mechanism, experimental).
   44876             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   44877             :        */
   44878             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   44879             : 
   44880             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   44881             :       /*! \brief support for the classic visitor pattern done in GoF */
   44882             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   44883             : 
   44884             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   44885             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   44886             :        */
   44887             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   44888             : 
   44889             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   44890             :        */
   44891             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   44892             : 
   44893             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   44894             :        // This traversal helps support internal tools that call static member functions.
   44895             :        // note: this function operates on the memory pools.
   44896             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   44897             :        */
   44898             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   44899             :       /* */
   44900             : 
   44901             : 
   44902             :      public:
   44903             :       /* name Memory Allocation Functions
   44904             :           \brief Memory allocations functions ... incomplete-documentation
   44905             : 
   44906             :           These functions have been made public as part of the design, but they are suggested for internal use 
   44907             :           or by particularly knowledgable users for specialized tools or applications.
   44908             :        */
   44909             :       /* */
   44910             : 
   44911             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   44912             : 
   44913             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   44914             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   44915             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   44916             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   44917             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   44918             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   44919             :           being used with the AST File I/O mechanism.
   44920             :        */
   44921             :           virtual bool isInMemoryPool() override;
   44922             : 
   44923             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   44924             : 
   44925             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   44926             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   44927             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   44928             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   44929             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   44930             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   44931             :           being used with the AST File I/O mechanism.
   44932             :        */
   44933             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   44934             : 
   44935             :       // DQ (4/30/2006): Modified to be a const function.
   44936             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   44937             : 
   44938             :           This functions is part of general support for many possible tools to operate 
   44939             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   44940             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   44941             :           less than the set of pointers used by the AST file I/O. This is part of
   44942             :           work implemented by Andreas, and support tools such as the AST graph generation.
   44943             : 
   44944             :           \warning This function can return unexpected data members and thus the 
   44945             :                    order and the number of elements is unpredicable and subject 
   44946             :                    to change.
   44947             : 
   44948             :           \returns STL vector of pairs of SgNode* and strings
   44949             :        */
   44950             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   44951             : 
   44952             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   44953             : 
   44954             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   44955             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   44956             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   44957             : 
   44958             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   44959             :                    and subject to change.
   44960             :        */
   44961             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   44962             : 
   44963             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   44964             : 
   44965             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   44966             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   44967             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   44968             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   44969             : 
   44970             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   44971             : 
   44972             :           \returns long
   44973             :        */
   44974             :           virtual long getChildIndex( SgNode* childNode ) const override;
   44975             : 
   44976             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   44977             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   44978             :       /* \brief Constructor for use by AST File I/O Mechanism
   44979             : 
   44980             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   44981             :           which obtained via fast binary file I/O from disk.
   44982             :        */
   44983             :        // SgType( SgTypeStorageClass& source );
   44984             : 
   44985             : 
   44986             : 
   44987             : 
   44988             : 
   44989             :  // JH (10/24/2005): methods added to support the ast file IO
   44990             :     private:
   44991             : 
   44992             :       /* name AST Memory Allocation Support Functions
   44993             :           \brief Memory allocations support....
   44994             : 
   44995             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   44996             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   44997             :           and support the AST File I/O Mechanism.
   44998             :        */
   44999             :       /* */
   45000             : 
   45001             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   45002             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   45003             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   45004             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   45005             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   45006             :           a correspinding one in the AST_FILE_IO class!
   45007             :        */
   45008             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   45009             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   45010             :       /* \brief Typedef used for low level memory access.
   45011             :        */
   45012             :        // typedef unsigned char* TestType;
   45013             : 
   45014             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   45015             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   45016             :       /* \brief Typedef used to hold memory addresses as values.
   45017             :        */
   45018             :        // typedef unsigned long  AddressType;
   45019             : 
   45020             : 
   45021             : 
   45022             :        // necessary, to have direct access to the p_freepointer and the private methods !
   45023             :       /*! \brief friend class declaration to support AST File I/O */
   45024             :           friend class AST_FILE_IO;
   45025             : 
   45026             :       /*! \brief friend class declaration to support AST File I/O */
   45027             :           friend class SgTypeStorageClass;
   45028             : 
   45029             :       /*! \brief friend class declaration to support AST File I/O */
   45030             :           friend class AstSpecificDataManagingClass;
   45031             : 
   45032             :       /*! \brief friend class declaration to support AST File I/O */
   45033             :           friend class AstSpecificDataManagingClassStorageClass;
   45034             :     public:
   45035             :       /*! \brief IR node constructor to support AST File I/O */
   45036             :           SgType( const SgTypeStorageClass& source );
   45037             : 
   45038             :  // private: // JJW hack
   45039             :        /*
   45040             :           name AST Memory Allocation Support Variables
   45041             :           Memory allocations support variables 
   45042             : 
   45043             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   45044             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   45045             :           and support the AST File I/O Mechanism.
   45046             :        */
   45047             :       /* */
   45048             : 
   45049             :     public:
   45050             : 
   45051             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   45052             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   45053             :       // virtual SgNode* addRegExpAttribute();
   45054             :       /*! \brief Support for AST matching using regular expression.
   45055             : 
   45056             :           This support is incomplete and the subject of current research to define 
   45057             :           RegEx trees to support inexact matching.
   45058             :        */
   45059             :           SgType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   45060             : 
   45061             : // *** COMMON CODE SECTION ENDS HERE ***
   45062             : 
   45063             : 
   45064             : // End of memberFunctionString
   45065             : // Start of memberFunctionString
   45066             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   45067             : 
   45068             :      // the generated cast function
   45069             :      // friend ROSE_DLL_API SgType* isSgType ( SgNode* s );
   45070             : 
   45071             :           typedef SgNode base_node_type;
   45072             : 
   45073             : 
   45074             : // End of memberFunctionString
   45075             : 
   45076             :      public: 
   45077             :          bool get_isCoArray() const;
   45078             :          void set_isCoArray(bool isCoArray);
   45079             : 
   45080             :      public: 
   45081             :          int get_substitutedForTemplateParam() const;
   45082             :          void set_substitutedForTemplateParam(int substitutedForTemplateParam);
   45083             : 
   45084             :      public: 
   45085             :          SgReferenceType* get_ref_to() const;
   45086             :          void set_ref_to(SgReferenceType* ref_to);
   45087             : 
   45088             :      public: 
   45089             :          SgPointerType* get_ptr_to() const;
   45090             :          void set_ptr_to(SgPointerType* ptr_to);
   45091             : 
   45092             :      public: 
   45093             :          SgModifierNodes* get_modifiers() const;
   45094             :          void set_modifiers(SgModifierNodes* modifiers);
   45095             : 
   45096             :      public: 
   45097             :          SgTypedefSeq* get_typedefs() const;
   45098             :          void set_typedefs(SgTypedefSeq* typedefs);
   45099             : 
   45100             :      public: 
   45101             :          SgRvalueReferenceType* get_rvalue_ref_to() const;
   45102             :          void set_rvalue_ref_to(SgRvalueReferenceType* rvalue_ref_to);
   45103             : 
   45104             :      public: 
   45105             :          SgDeclType* get_decltype_ref_to() const;
   45106             :          void set_decltype_ref_to(SgDeclType* decltype_ref_to);
   45107             : 
   45108             :      public: 
   45109             :          SgTypeOfType* get_typeof_ref_to() const;
   45110             :          void set_typeof_ref_to(SgTypeOfType* typeof_ref_to);
   45111             : 
   45112             : 
   45113             :      public: 
   45114             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   45115             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   45116             : 
   45117             : 
   45118             :      public: 
   45119             :          virtual ~SgType();
   45120             : 
   45121             :     protected:
   45122             : // Start of memberFunctionString
   45123             : bool p_isCoArray;
   45124             :           
   45125             : // End of memberFunctionString
   45126             : // Start of memberFunctionString
   45127             : int p_substitutedForTemplateParam;
   45128             :           
   45129             : // End of memberFunctionString
   45130             : // Start of memberFunctionString
   45131             : SgReferenceType* p_ref_to;
   45132             :           
   45133             : // End of memberFunctionString
   45134             : // Start of memberFunctionString
   45135             : SgPointerType* p_ptr_to;
   45136             :           
   45137             : // End of memberFunctionString
   45138             : // Start of memberFunctionString
   45139             : SgModifierNodes* p_modifiers;
   45140             :           
   45141             : // End of memberFunctionString
   45142             : // Start of memberFunctionString
   45143             : SgTypedefSeq* p_typedefs;
   45144             :           
   45145             : // End of memberFunctionString
   45146             : // Start of memberFunctionString
   45147             : SgRvalueReferenceType* p_rvalue_ref_to;
   45148             :           
   45149             : // End of memberFunctionString
   45150             : // Start of memberFunctionString
   45151             : SgDeclType* p_decltype_ref_to;
   45152             :           
   45153             : // End of memberFunctionString
   45154             : // Start of memberFunctionString
   45155             : SgTypeOfType* p_typeof_ref_to;
   45156             :           
   45157             : // End of memberFunctionString
   45158             : // Start of memberFunctionString
   45159             : SgExpression* p_type_kind;
   45160             :           
   45161             : // End of memberFunctionString
   45162             : // Start of memberFunctionString
   45163             : AstAttributeMechanism* p_attributeMechanism;
   45164             :           
   45165             : // End of memberFunctionString
   45166             : 
   45167             :     friend struct Rose::Traits::generated::describe_node_t<SgType>;
   45168             :     friend struct Rose::Traits::generated::describe_field_t<SgType, bool,&SgType::p_isCoArray>;
   45169             :     friend struct Rose::Traits::generated::describe_field_t<SgType, int,&SgType::p_substitutedForTemplateParam>;
   45170             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgReferenceType*,&SgType::p_ref_to>;
   45171             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgPointerType*,&SgType::p_ptr_to>;
   45172             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgModifierNodes*,&SgType::p_modifiers>;
   45173             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgTypedefSeq*,&SgType::p_typedefs>;
   45174             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgRvalueReferenceType*,&SgType::p_rvalue_ref_to>;
   45175             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgDeclType*,&SgType::p_decltype_ref_to>;
   45176             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgTypeOfType*,&SgType::p_typeof_ref_to>;
   45177             :     friend struct Rose::Traits::generated::describe_field_t<SgType, SgExpression*,&SgType::p_type_kind>;
   45178             :     friend struct Rose::Traits::generated::describe_field_t<SgType, AstAttributeMechanism*,&SgType::p_attributeMechanism>;
   45179             : 
   45180             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45181             : 
   45182             : 
   45183             :    };
   45184             : #endif
   45185             : 
   45186             : // postdeclarations for SgType
   45187             : 
   45188             : /* #line 45189 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45189             : 
   45190             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   45191             : 
   45192             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45193             : 
   45194             : 
   45195             : /* #line 45196 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45196             : 
   45197             : 
   45198             : 
   45199             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45200             : 
   45201             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   45202             : //      This code is automatically generated for each 
   45203             : //      terminal and non-terminal within the defined 
   45204             : //      grammar.  There is a simple way to change the 
   45205             : //      code to fix bugs etc.  See the ROSE README file
   45206             : //      for directions.
   45207             : 
   45208             : // tps: (02/22/2010): Adding DLL export requirements
   45209             : #include "rosedll.h"
   45210             : 
   45211             : // predeclarations for SgTypeUnknown
   45212             : 
   45213             : /* #line 45214 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45214             : 
   45215             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   45216             : 
   45217             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45218             : 
   45219             : #if 1
   45220             : // Class Definition for SgTypeUnknown
   45221             : class ROSE_DLL_API SgTypeUnknown  : public SgType
   45222             :    {
   45223             :      public:
   45224             : 
   45225             : 
   45226             : /* #line 45227 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45227             : 
   45228             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   45229             : // Start of memberFunctionString
   45230             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   45231             : 
   45232             : // *** COMMON CODE SECTION BEGINS HERE ***
   45233             : 
   45234             :     public:
   45235             : 
   45236             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   45237             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   45238             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   45239             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   45240             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   45241             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   45242             : 
   45243             :       /*! \brief returns a string representing the class name */
   45244             :           virtual std::string class_name() const override;
   45245             : 
   45246             :       /*! \brief returns new style SageIII enum values */
   45247             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   45248             : 
   45249             :       /*! \brief static variant value */
   45250             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   45251             :        // static const VariantT static_variant = V_SgTypeUnknown;
   45252             :           enum { static_variant = V_SgTypeUnknown };
   45253             : 
   45254             :        /* the generated cast function */
   45255             :       /*! \brief Casts pointer from base class to derived class */
   45256             :           ROSE_DLL_API friend       SgTypeUnknown* isSgTypeUnknown(       SgNode * s );
   45257             : 
   45258             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   45259             :           ROSE_DLL_API friend const SgTypeUnknown* isSgTypeUnknown( const SgNode * s );
   45260             : 
   45261             :      // ******************************************
   45262             :      // * Memory Pool / New / Delete
   45263             :      // ******************************************
   45264             : 
   45265             :      public:
   45266             :           /// \private
   45267             :           static const unsigned pool_size; //
   45268             :           /// \private
   45269             :           static std::vector<unsigned char *> pools; //
   45270             :           /// \private
   45271             :           static SgTypeUnknown * next_node; // 
   45272             : 
   45273             :           /// \private
   45274             :           static unsigned long initializeStorageClassArray(SgTypeUnknownStorageClass *); //
   45275             : 
   45276             :           /// \private
   45277             :           static void clearMemoryPool(); //
   45278             :           static void deleteMemoryPool(); //
   45279             : 
   45280             :           /// \private
   45281             :           static void extendMemoryPoolForFileIO(); //
   45282             : 
   45283             :           /// \private
   45284             :           static SgTypeUnknown * getPointerFromGlobalIndex(unsigned long); //
   45285             :           /// \private
   45286             :           static SgTypeUnknown * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   45287             : 
   45288             :           /// \private
   45289             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   45290             :           /// \private
   45291             :           static void resetValidFreepointers(); //
   45292             :           /// \private
   45293             :           static unsigned long getNumberOfLastValidPointer(); //
   45294             : 
   45295             : 
   45296             : #if defined(INLINE_FUNCTIONS)
   45297             :       /*! \brief returns pointer to newly allocated IR node */
   45298             :           inline void *operator new (size_t size);
   45299             : #else
   45300             :       /*! \brief returns pointer to newly allocated IR node */
   45301             :           void *operator new (size_t size);
   45302             : #endif
   45303             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   45304             :           void operator delete (void* pointer, size_t size);
   45305             : 
   45306             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   45307       19619 :           void operator delete (void* pointer)
   45308             :              {
   45309             :             // This is the generated delete operator...
   45310       19619 :                SgTypeUnknown::operator delete (pointer,sizeof(SgTypeUnknown));
   45311             :              }
   45312             : 
   45313             :       /*! \brief Returns the total number of IR nodes of this type */
   45314             :           static size_t numberOfNodes();
   45315             : 
   45316             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   45317             :           static size_t memoryUsage();
   45318             : 
   45319             :       // End of scope which started in IR nodes specific code 
   45320             :       /* */
   45321             : 
   45322             :       /* name Internal Functions
   45323             :           \brief Internal functions ... incomplete-documentation
   45324             : 
   45325             :           These functions have been made public as part of the design, but they are suggested for internal use 
   45326             :           or by particularly knowledgeable users for specialized tools or applications.
   45327             : 
   45328             :           \internal We could not make these private because they are required by user for special purposes. And 
   45329             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   45330             :          
   45331             :        */
   45332             : 
   45333             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   45334             :        // overridden in every class by *generated* implementation
   45335             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   45336             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   45337             :        // MS: 06/28/02 container of names of variables or container indices 
   45338             :        // used used in the traversal to access AST successor nodes
   45339             :        // overridden in every class by *generated* implementation
   45340             :       /*! \brief container of names of variables or container indices used used in the traversal
   45341             :           to access AST successor nodes overridden in every class by *generated* implementation */
   45342             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   45343             : 
   45344             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   45345             :        // than all the vector copies. The implementation for these functions is generated for each class.
   45346             :       /*! \brief return number of children in the traversal successor list */
   45347             :           virtual size_t get_numberOfTraversalSuccessors() override;
   45348             :       /*! \brief index-based access to traversal successors by index number */
   45349             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   45350             :       /*! \brief index-based access to traversal successors by child node */
   45351             :           virtual size_t get_childIndex(SgNode *child) override;
   45352             : 
   45353             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   45354             :        // MS: 08/16/2002 method for generating RTI information
   45355             :       /*! \brief return C++ Runtime-Time-Information */
   45356             :           virtual RTIReturnType roseRTI() override;
   45357             : #endif
   45358             :       /* */
   45359             : 
   45360             : 
   45361             : 
   45362             :       /* name Deprecated Functions
   45363             :           \brief Deprecated functions ... incomplete-documentation
   45364             : 
   45365             :           These functions have been deprecated from use.
   45366             :        */
   45367             :       /* */
   45368             : 
   45369             :       /*! returns a C style string (char*) representing the class name */
   45370             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   45371             : 
   45372             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   45373             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   45374             : #if 0
   45375             :       /*! returns old style Sage II enum values */
   45376             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   45377             :       /*! returns old style Sage II enum values */
   45378             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   45379             : #endif
   45380             :       /* */
   45381             : 
   45382             : 
   45383             : 
   45384             : 
   45385             :      public:
   45386             :       /* name Traversal Support Functions
   45387             :           \brief Traversal support functions ... incomplete-documentation
   45388             : 
   45389             :           These functions have been made public as part of the design, but they are suggested for internal use 
   45390             :           or by particularly knowledgable users for specialized tools or applications.
   45391             :        */
   45392             :       /* */
   45393             : 
   45394             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   45395             :        // (inferior to ROSE traversal mechanism, experimental).
   45396             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   45397             :        */
   45398             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   45399             : 
   45400             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   45401             :       /*! \brief support for the classic visitor pattern done in GoF */
   45402             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   45403             : 
   45404             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   45405             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   45406             :        */
   45407             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   45408             : 
   45409             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   45410             :        */
   45411             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   45412             : 
   45413             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   45414             :        // This traversal helps support internal tools that call static member functions.
   45415             :        // note: this function operates on the memory pools.
   45416             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   45417             :        */
   45418             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   45419             :       /* */
   45420             : 
   45421             : 
   45422             :      public:
   45423             :       /* name Memory Allocation Functions
   45424             :           \brief Memory allocations functions ... incomplete-documentation
   45425             : 
   45426             :           These functions have been made public as part of the design, but they are suggested for internal use 
   45427             :           or by particularly knowledgable users for specialized tools or applications.
   45428             :        */
   45429             :       /* */
   45430             : 
   45431             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   45432             : 
   45433             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   45434             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   45435             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   45436             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   45437             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   45438             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   45439             :           being used with the AST File I/O mechanism.
   45440             :        */
   45441             :           virtual bool isInMemoryPool() override;
   45442             : 
   45443             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   45444             : 
   45445             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   45446             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   45447             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   45448             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   45449             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   45450             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   45451             :           being used with the AST File I/O mechanism.
   45452             :        */
   45453             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   45454             : 
   45455             :       // DQ (4/30/2006): Modified to be a const function.
   45456             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   45457             : 
   45458             :           This functions is part of general support for many possible tools to operate 
   45459             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   45460             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   45461             :           less than the set of pointers used by the AST file I/O. This is part of
   45462             :           work implemented by Andreas, and support tools such as the AST graph generation.
   45463             : 
   45464             :           \warning This function can return unexpected data members and thus the 
   45465             :                    order and the number of elements is unpredicable and subject 
   45466             :                    to change.
   45467             : 
   45468             :           \returns STL vector of pairs of SgNode* and strings
   45469             :        */
   45470             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   45471             : 
   45472             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   45473             : 
   45474             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   45475             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   45476             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   45477             : 
   45478             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   45479             :                    and subject to change.
   45480             :        */
   45481             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   45482             : 
   45483             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   45484             : 
   45485             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   45486             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   45487             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   45488             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   45489             : 
   45490             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   45491             : 
   45492             :           \returns long
   45493             :        */
   45494             :           virtual long getChildIndex( SgNode* childNode ) const override;
   45495             : 
   45496             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   45497             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   45498             :       /* \brief Constructor for use by AST File I/O Mechanism
   45499             : 
   45500             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   45501             :           which obtained via fast binary file I/O from disk.
   45502             :        */
   45503             :        // SgTypeUnknown( SgTypeUnknownStorageClass& source );
   45504             : 
   45505             : 
   45506             : 
   45507             : 
   45508             : 
   45509             :  // JH (10/24/2005): methods added to support the ast file IO
   45510             :     private:
   45511             : 
   45512             :       /* name AST Memory Allocation Support Functions
   45513             :           \brief Memory allocations support....
   45514             : 
   45515             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   45516             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   45517             :           and support the AST File I/O Mechanism.
   45518             :        */
   45519             :       /* */
   45520             : 
   45521             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   45522             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   45523             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   45524             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   45525             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   45526             :           a correspinding one in the AST_FILE_IO class!
   45527             :        */
   45528             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   45529             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   45530             :       /* \brief Typedef used for low level memory access.
   45531             :        */
   45532             :        // typedef unsigned char* TestType;
   45533             : 
   45534             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   45535             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   45536             :       /* \brief Typedef used to hold memory addresses as values.
   45537             :        */
   45538             :        // typedef unsigned long  AddressType;
   45539             : 
   45540             : 
   45541             : 
   45542             :        // necessary, to have direct access to the p_freepointer and the private methods !
   45543             :       /*! \brief friend class declaration to support AST File I/O */
   45544             :           friend class AST_FILE_IO;
   45545             : 
   45546             :       /*! \brief friend class declaration to support AST File I/O */
   45547             :           friend class SgTypeUnknownStorageClass;
   45548             : 
   45549             :       /*! \brief friend class declaration to support AST File I/O */
   45550             :           friend class AstSpecificDataManagingClass;
   45551             : 
   45552             :       /*! \brief friend class declaration to support AST File I/O */
   45553             :           friend class AstSpecificDataManagingClassStorageClass;
   45554             :     public:
   45555             :       /*! \brief IR node constructor to support AST File I/O */
   45556             :           SgTypeUnknown( const SgTypeUnknownStorageClass& source );
   45557             : 
   45558             :  // private: // JJW hack
   45559             :        /*
   45560             :           name AST Memory Allocation Support Variables
   45561             :           Memory allocations support variables 
   45562             : 
   45563             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   45564             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   45565             :           and support the AST File I/O Mechanism.
   45566             :        */
   45567             :       /* */
   45568             : 
   45569             :     public:
   45570             : 
   45571             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   45572             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   45573             :       // virtual SgNode* addRegExpAttribute();
   45574             :       /*! \brief Support for AST matching using regular expression.
   45575             : 
   45576             :           This support is incomplete and the subject of current research to define 
   45577             :           RegEx trees to support inexact matching.
   45578             :        */
   45579             :           SgTypeUnknown* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   45580             : 
   45581             : // *** COMMON CODE SECTION ENDS HERE ***
   45582             : 
   45583             : 
   45584             : // End of memberFunctionString
   45585             : // Start of memberFunctionString
   45586             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   45587             : 
   45588             :      // the generated cast function
   45589             :      // friend ROSE_DLL_API SgTypeUnknown* isSgTypeUnknown ( SgNode* s );
   45590             : 
   45591             :           typedef SgType base_node_type;
   45592             : 
   45593             : 
   45594             : // End of memberFunctionString
   45595             : // Start of memberFunctionString
   45596             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   45597             : 
   45598             :        // SgName get_mangled ( SgUnparse_Info & info );
   45599             : 
   45600             :       //! Mangled name support for unparser support
   45601             :        // SgName get_mangled ( SgUnparse_Info & info );
   45602             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   45603             :           virtual SgName get_mangled (void) const override;
   45604             : 
   45605             : 
   45606             : 
   45607             : // End of memberFunctionString
   45608             : // Start of memberFunctionString
   45609             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   45610             : 
   45611             :       //! example of type used where construction is particularly simple
   45612             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   45613             :        // static SgTypeUnknown builtin_type;
   45614             :        // static SgTypeUnknown* builtin_type;
   45615             : 
   45616             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   45617             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   45618             :        // own data member and associated access function.
   45619             :        // static SgTypeUnknown* get_builtin_type();
   45620             : 
   45621             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   45622             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   45623             :        // own data member and associated access function.
   45624             :        // static void set_builtin_type(SgTypeUnknown* builtin_type);
   45625             : 
   45626             :       //! function returns example of type
   45627             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   45628             :        // static SgTypeUnknown* createType(void);
   45629             :           static SgTypeUnknown* createType(SgExpression* optional_fortran_type_kind = NULL);
   45630             : 
   45631             : 
   45632             : // End of memberFunctionString
   45633             : 
   45634             :      public: 
   45635             :          std::string get_type_name() const;
   45636             :          void set_type_name(std::string type_name);
   45637             : 
   45638             :      public: 
   45639             :          bool get_has_type_name() const;
   45640             :          void set_has_type_name(bool has_type_name);
   45641             : 
   45642             : 
   45643             : 
   45644             :      public: 
   45645             :          virtual ~SgTypeUnknown();
   45646             : 
   45647             : 
   45648             :      public: 
   45649             :          SgTypeUnknown(); 
   45650             : 
   45651             :     protected:
   45652             : // Start of memberFunctionString
   45653             : std::string p_type_name;
   45654             :           
   45655             : // End of memberFunctionString
   45656             : // Start of memberFunctionString
   45657             : bool p_has_type_name;
   45658             :           
   45659             : // End of memberFunctionString
   45660             : // Start of memberFunctionString
   45661             : static SgTypeUnknown* p_builtin_type;
   45662             :           
   45663             : // End of memberFunctionString
   45664             : 
   45665             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeUnknown>;
   45666             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeUnknown, std::string,&SgTypeUnknown::p_type_name>;
   45667             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeUnknown, bool,&SgTypeUnknown::p_has_type_name>;
   45668             : 
   45669             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45670             : 
   45671             : 
   45672             :    };
   45673             : #endif
   45674             : 
   45675             : // postdeclarations for SgTypeUnknown
   45676             : 
   45677             : /* #line 45678 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45678             : 
   45679             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   45680             : 
   45681             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45682             : 
   45683             : 
   45684             : /* #line 45685 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45685             : 
   45686             : 
   45687             : 
   45688             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45689             : 
   45690             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   45691             : //      This code is automatically generated for each 
   45692             : //      terminal and non-terminal within the defined 
   45693             : //      grammar.  There is a simple way to change the 
   45694             : //      code to fix bugs etc.  See the ROSE README file
   45695             : //      for directions.
   45696             : 
   45697             : // tps: (02/22/2010): Adding DLL export requirements
   45698             : #include "rosedll.h"
   45699             : 
   45700             : // predeclarations for SgTypeChar
   45701             : 
   45702             : /* #line 45703 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45703             : 
   45704             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   45705             : 
   45706             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   45707             : 
   45708             : #if 1
   45709             : // Class Definition for SgTypeChar
   45710             : class ROSE_DLL_API SgTypeChar  : public SgType
   45711             :    {
   45712             :      public:
   45713             : 
   45714             : 
   45715             : /* #line 45716 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   45716             : 
   45717             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   45718             : // Start of memberFunctionString
   45719             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   45720             : 
   45721             : // *** COMMON CODE SECTION BEGINS HERE ***
   45722             : 
   45723             :     public:
   45724             : 
   45725             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   45726             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   45727             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   45728             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   45729             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   45730             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   45731             : 
   45732             :       /*! \brief returns a string representing the class name */
   45733             :           virtual std::string class_name() const override;
   45734             : 
   45735             :       /*! \brief returns new style SageIII enum values */
   45736             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   45737             : 
   45738             :       /*! \brief static variant value */
   45739             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   45740             :        // static const VariantT static_variant = V_SgTypeChar;
   45741             :           enum { static_variant = V_SgTypeChar };
   45742             : 
   45743             :        /* the generated cast function */
   45744             :       /*! \brief Casts pointer from base class to derived class */
   45745             :           ROSE_DLL_API friend       SgTypeChar* isSgTypeChar(       SgNode * s );
   45746             : 
   45747             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   45748             :           ROSE_DLL_API friend const SgTypeChar* isSgTypeChar( const SgNode * s );
   45749             : 
   45750             :      // ******************************************
   45751             :      // * Memory Pool / New / Delete
   45752             :      // ******************************************
   45753             : 
   45754             :      public:
   45755             :           /// \private
   45756             :           static const unsigned pool_size; //
   45757             :           /// \private
   45758             :           static std::vector<unsigned char *> pools; //
   45759             :           /// \private
   45760             :           static SgTypeChar * next_node; // 
   45761             : 
   45762             :           /// \private
   45763             :           static unsigned long initializeStorageClassArray(SgTypeCharStorageClass *); //
   45764             : 
   45765             :           /// \private
   45766             :           static void clearMemoryPool(); //
   45767             :           static void deleteMemoryPool(); //
   45768             : 
   45769             :           /// \private
   45770             :           static void extendMemoryPoolForFileIO(); //
   45771             : 
   45772             :           /// \private
   45773             :           static SgTypeChar * getPointerFromGlobalIndex(unsigned long); //
   45774             :           /// \private
   45775             :           static SgTypeChar * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   45776             : 
   45777             :           /// \private
   45778             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   45779             :           /// \private
   45780             :           static void resetValidFreepointers(); //
   45781             :           /// \private
   45782             :           static unsigned long getNumberOfLastValidPointer(); //
   45783             : 
   45784             : 
   45785             : #if defined(INLINE_FUNCTIONS)
   45786             :       /*! \brief returns pointer to newly allocated IR node */
   45787             :           inline void *operator new (size_t size);
   45788             : #else
   45789             :       /*! \brief returns pointer to newly allocated IR node */
   45790             :           void *operator new (size_t size);
   45791             : #endif
   45792             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   45793             :           void operator delete (void* pointer, size_t size);
   45794             : 
   45795             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   45796         497 :           void operator delete (void* pointer)
   45797             :              {
   45798             :             // This is the generated delete operator...
   45799         497 :                SgTypeChar::operator delete (pointer,sizeof(SgTypeChar));
   45800             :              }
   45801             : 
   45802             :       /*! \brief Returns the total number of IR nodes of this type */
   45803             :           static size_t numberOfNodes();
   45804             : 
   45805             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   45806             :           static size_t memoryUsage();
   45807             : 
   45808             :       // End of scope which started in IR nodes specific code 
   45809             :       /* */
   45810             : 
   45811             :       /* name Internal Functions
   45812             :           \brief Internal functions ... incomplete-documentation
   45813             : 
   45814             :           These functions have been made public as part of the design, but they are suggested for internal use 
   45815             :           or by particularly knowledgeable users for specialized tools or applications.
   45816             : 
   45817             :           \internal We could not make these private because they are required by user for special purposes. And 
   45818             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   45819             :          
   45820             :        */
   45821             : 
   45822             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   45823             :        // overridden in every class by *generated* implementation
   45824             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   45825             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   45826             :        // MS: 06/28/02 container of names of variables or container indices 
   45827             :        // used used in the traversal to access AST successor nodes
   45828             :        // overridden in every class by *generated* implementation
   45829             :       /*! \brief container of names of variables or container indices used used in the traversal
   45830             :           to access AST successor nodes overridden in every class by *generated* implementation */
   45831             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   45832             : 
   45833             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   45834             :        // than all the vector copies. The implementation for these functions is generated for each class.
   45835             :       /*! \brief return number of children in the traversal successor list */
   45836             :           virtual size_t get_numberOfTraversalSuccessors() override;
   45837             :       /*! \brief index-based access to traversal successors by index number */
   45838             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   45839             :       /*! \brief index-based access to traversal successors by child node */
   45840             :           virtual size_t get_childIndex(SgNode *child) override;
   45841             : 
   45842             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   45843             :        // MS: 08/16/2002 method for generating RTI information
   45844             :       /*! \brief return C++ Runtime-Time-Information */
   45845             :           virtual RTIReturnType roseRTI() override;
   45846             : #endif
   45847             :       /* */
   45848             : 
   45849             : 
   45850             : 
   45851             :       /* name Deprecated Functions
   45852             :           \brief Deprecated functions ... incomplete-documentation
   45853             : 
   45854             :           These functions have been deprecated from use.
   45855             :        */
   45856             :       /* */
   45857             : 
   45858             :       /*! returns a C style string (char*) representing the class name */
   45859             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   45860             : 
   45861             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   45862             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   45863             : #if 0
   45864             :       /*! returns old style Sage II enum values */
   45865             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   45866             :       /*! returns old style Sage II enum values */
   45867             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   45868             : #endif
   45869             :       /* */
   45870             : 
   45871             : 
   45872             : 
   45873             : 
   45874             :      public:
   45875             :       /* name Traversal Support Functions
   45876             :           \brief Traversal support functions ... incomplete-documentation
   45877             : 
   45878             :           These functions have been made public as part of the design, but they are suggested for internal use 
   45879             :           or by particularly knowledgable users for specialized tools or applications.
   45880             :        */
   45881             :       /* */
   45882             : 
   45883             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   45884             :        // (inferior to ROSE traversal mechanism, experimental).
   45885             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   45886             :        */
   45887             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   45888             : 
   45889             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   45890             :       /*! \brief support for the classic visitor pattern done in GoF */
   45891             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   45892             : 
   45893             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   45894             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   45895             :        */
   45896             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   45897             : 
   45898             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   45899             :        */
   45900             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   45901             : 
   45902             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   45903             :        // This traversal helps support internal tools that call static member functions.
   45904             :        // note: this function operates on the memory pools.
   45905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   45906             :        */
   45907             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   45908             :       /* */
   45909             : 
   45910             : 
   45911             :      public:
   45912             :       /* name Memory Allocation Functions
   45913             :           \brief Memory allocations functions ... incomplete-documentation
   45914             : 
   45915             :           These functions have been made public as part of the design, but they are suggested for internal use 
   45916             :           or by particularly knowledgable users for specialized tools or applications.
   45917             :        */
   45918             :       /* */
   45919             : 
   45920             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   45921             : 
   45922             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   45923             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   45924             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   45925             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   45926             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   45927             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   45928             :           being used with the AST File I/O mechanism.
   45929             :        */
   45930             :           virtual bool isInMemoryPool() override;
   45931             : 
   45932             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   45933             : 
   45934             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   45935             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   45936             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   45937             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   45938             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   45939             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   45940             :           being used with the AST File I/O mechanism.
   45941             :        */
   45942             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   45943             : 
   45944             :       // DQ (4/30/2006): Modified to be a const function.
   45945             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   45946             : 
   45947             :           This functions is part of general support for many possible tools to operate 
   45948             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   45949             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   45950             :           less than the set of pointers used by the AST file I/O. This is part of
   45951             :           work implemented by Andreas, and support tools such as the AST graph generation.
   45952             : 
   45953             :           \warning This function can return unexpected data members and thus the 
   45954             :                    order and the number of elements is unpredicable and subject 
   45955             :                    to change.
   45956             : 
   45957             :           \returns STL vector of pairs of SgNode* and strings
   45958             :        */
   45959             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   45960             : 
   45961             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   45962             : 
   45963             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   45964             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   45965             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   45966             : 
   45967             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   45968             :                    and subject to change.
   45969             :        */
   45970             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   45971             : 
   45972             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   45973             : 
   45974             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   45975             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   45976             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   45977             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   45978             : 
   45979             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   45980             : 
   45981             :           \returns long
   45982             :        */
   45983             :           virtual long getChildIndex( SgNode* childNode ) const override;
   45984             : 
   45985             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   45986             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   45987             :       /* \brief Constructor for use by AST File I/O Mechanism
   45988             : 
   45989             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   45990             :           which obtained via fast binary file I/O from disk.
   45991             :        */
   45992             :        // SgTypeChar( SgTypeCharStorageClass& source );
   45993             : 
   45994             : 
   45995             : 
   45996             : 
   45997             : 
   45998             :  // JH (10/24/2005): methods added to support the ast file IO
   45999             :     private:
   46000             : 
   46001             :       /* name AST Memory Allocation Support Functions
   46002             :           \brief Memory allocations support....
   46003             : 
   46004             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   46005             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   46006             :           and support the AST File I/O Mechanism.
   46007             :        */
   46008             :       /* */
   46009             : 
   46010             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   46011             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   46012             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   46013             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   46014             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   46015             :           a correspinding one in the AST_FILE_IO class!
   46016             :        */
   46017             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   46018             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46019             :       /* \brief Typedef used for low level memory access.
   46020             :        */
   46021             :        // typedef unsigned char* TestType;
   46022             : 
   46023             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   46024             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46025             :       /* \brief Typedef used to hold memory addresses as values.
   46026             :        */
   46027             :        // typedef unsigned long  AddressType;
   46028             : 
   46029             : 
   46030             : 
   46031             :        // necessary, to have direct access to the p_freepointer and the private methods !
   46032             :       /*! \brief friend class declaration to support AST File I/O */
   46033             :           friend class AST_FILE_IO;
   46034             : 
   46035             :       /*! \brief friend class declaration to support AST File I/O */
   46036             :           friend class SgTypeCharStorageClass;
   46037             : 
   46038             :       /*! \brief friend class declaration to support AST File I/O */
   46039             :           friend class AstSpecificDataManagingClass;
   46040             : 
   46041             :       /*! \brief friend class declaration to support AST File I/O */
   46042             :           friend class AstSpecificDataManagingClassStorageClass;
   46043             :     public:
   46044             :       /*! \brief IR node constructor to support AST File I/O */
   46045             :           SgTypeChar( const SgTypeCharStorageClass& source );
   46046             : 
   46047             :  // private: // JJW hack
   46048             :        /*
   46049             :           name AST Memory Allocation Support Variables
   46050             :           Memory allocations support variables 
   46051             : 
   46052             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   46053             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   46054             :           and support the AST File I/O Mechanism.
   46055             :        */
   46056             :       /* */
   46057             : 
   46058             :     public:
   46059             : 
   46060             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   46061             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   46062             :       // virtual SgNode* addRegExpAttribute();
   46063             :       /*! \brief Support for AST matching using regular expression.
   46064             : 
   46065             :           This support is incomplete and the subject of current research to define 
   46066             :           RegEx trees to support inexact matching.
   46067             :        */
   46068             :           SgTypeChar* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   46069             : 
   46070             : // *** COMMON CODE SECTION ENDS HERE ***
   46071             : 
   46072             : 
   46073             : // End of memberFunctionString
   46074             : // Start of memberFunctionString
   46075             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   46076             : 
   46077             :      // the generated cast function
   46078             :      // friend ROSE_DLL_API SgTypeChar* isSgTypeChar ( SgNode* s );
   46079             : 
   46080             :           typedef SgType base_node_type;
   46081             : 
   46082             : 
   46083             : // End of memberFunctionString
   46084             : // Start of memberFunctionString
   46085             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   46086             : 
   46087             :        // SgName get_mangled ( SgUnparse_Info & info );
   46088             : 
   46089             :       //! Mangled name support for unparser support
   46090             :        // SgName get_mangled ( SgUnparse_Info & info );
   46091             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   46092             :           virtual SgName get_mangled (void) const override;
   46093             : 
   46094             : 
   46095             : 
   46096             : // End of memberFunctionString
   46097             : // Start of memberFunctionString
   46098             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   46099             : 
   46100             :       //! example of type used where construction is particularly simple
   46101             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   46102             :        // static SgTypeChar builtin_type;
   46103             :        // static SgTypeChar* builtin_type;
   46104             : 
   46105             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   46106             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   46107             :        // own data member and associated access function.
   46108             :        // static SgTypeChar* get_builtin_type();
   46109             : 
   46110             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   46111             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   46112             :        // own data member and associated access function.
   46113             :        // static void set_builtin_type(SgTypeChar* builtin_type);
   46114             : 
   46115             :       //! function returns example of type
   46116             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   46117             :        // static SgTypeChar* createType(void);
   46118             :           static SgTypeChar* createType(SgExpression* optional_fortran_type_kind = NULL);
   46119             : 
   46120             : 
   46121             : // End of memberFunctionString
   46122             : 
   46123             : 
   46124             : 
   46125             :      public: 
   46126             :          virtual ~SgTypeChar();
   46127             : 
   46128             : 
   46129             :      public: 
   46130             :          SgTypeChar(); 
   46131             : 
   46132             :     protected:
   46133             : // Start of memberFunctionString
   46134             : static SgTypeChar* p_builtin_type;
   46135             :           
   46136             : // End of memberFunctionString
   46137             : 
   46138             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeChar>;
   46139             : 
   46140             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46141             : 
   46142             : 
   46143             :    };
   46144             : #endif
   46145             : 
   46146             : // postdeclarations for SgTypeChar
   46147             : 
   46148             : /* #line 46149 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46149             : 
   46150             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   46151             : 
   46152             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46153             : 
   46154             : 
   46155             : /* #line 46156 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46156             : 
   46157             : 
   46158             : 
   46159             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46160             : 
   46161             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   46162             : //      This code is automatically generated for each 
   46163             : //      terminal and non-terminal within the defined 
   46164             : //      grammar.  There is a simple way to change the 
   46165             : //      code to fix bugs etc.  See the ROSE README file
   46166             : //      for directions.
   46167             : 
   46168             : // tps: (02/22/2010): Adding DLL export requirements
   46169             : #include "rosedll.h"
   46170             : 
   46171             : // predeclarations for SgTypeSignedChar
   46172             : 
   46173             : /* #line 46174 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46174             : 
   46175             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   46176             : 
   46177             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46178             : 
   46179             : #if 1
   46180             : // Class Definition for SgTypeSignedChar
   46181             : class ROSE_DLL_API SgTypeSignedChar  : public SgType
   46182             :    {
   46183             :      public:
   46184             : 
   46185             : 
   46186             : /* #line 46187 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46187             : 
   46188             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   46189             : // Start of memberFunctionString
   46190             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   46191             : 
   46192             : // *** COMMON CODE SECTION BEGINS HERE ***
   46193             : 
   46194             :     public:
   46195             : 
   46196             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   46197             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   46198             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   46199             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   46200             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   46201             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   46202             : 
   46203             :       /*! \brief returns a string representing the class name */
   46204             :           virtual std::string class_name() const override;
   46205             : 
   46206             :       /*! \brief returns new style SageIII enum values */
   46207             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   46208             : 
   46209             :       /*! \brief static variant value */
   46210             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   46211             :        // static const VariantT static_variant = V_SgTypeSignedChar;
   46212             :           enum { static_variant = V_SgTypeSignedChar };
   46213             : 
   46214             :        /* the generated cast function */
   46215             :       /*! \brief Casts pointer from base class to derived class */
   46216             :           ROSE_DLL_API friend       SgTypeSignedChar* isSgTypeSignedChar(       SgNode * s );
   46217             : 
   46218             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   46219             :           ROSE_DLL_API friend const SgTypeSignedChar* isSgTypeSignedChar( const SgNode * s );
   46220             : 
   46221             :      // ******************************************
   46222             :      // * Memory Pool / New / Delete
   46223             :      // ******************************************
   46224             : 
   46225             :      public:
   46226             :           /// \private
   46227             :           static const unsigned pool_size; //
   46228             :           /// \private
   46229             :           static std::vector<unsigned char *> pools; //
   46230             :           /// \private
   46231             :           static SgTypeSignedChar * next_node; // 
   46232             : 
   46233             :           /// \private
   46234             :           static unsigned long initializeStorageClassArray(SgTypeSignedCharStorageClass *); //
   46235             : 
   46236             :           /// \private
   46237             :           static void clearMemoryPool(); //
   46238             :           static void deleteMemoryPool(); //
   46239             : 
   46240             :           /// \private
   46241             :           static void extendMemoryPoolForFileIO(); //
   46242             : 
   46243             :           /// \private
   46244             :           static SgTypeSignedChar * getPointerFromGlobalIndex(unsigned long); //
   46245             :           /// \private
   46246             :           static SgTypeSignedChar * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   46247             : 
   46248             :           /// \private
   46249             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   46250             :           /// \private
   46251             :           static void resetValidFreepointers(); //
   46252             :           /// \private
   46253             :           static unsigned long getNumberOfLastValidPointer(); //
   46254             : 
   46255             : 
   46256             : #if defined(INLINE_FUNCTIONS)
   46257             :       /*! \brief returns pointer to newly allocated IR node */
   46258             :           inline void *operator new (size_t size);
   46259             : #else
   46260             :       /*! \brief returns pointer to newly allocated IR node */
   46261             :           void *operator new (size_t size);
   46262             : #endif
   46263             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   46264             :           void operator delete (void* pointer, size_t size);
   46265             : 
   46266             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   46267           4 :           void operator delete (void* pointer)
   46268             :              {
   46269             :             // This is the generated delete operator...
   46270           4 :                SgTypeSignedChar::operator delete (pointer,sizeof(SgTypeSignedChar));
   46271             :              }
   46272             : 
   46273             :       /*! \brief Returns the total number of IR nodes of this type */
   46274             :           static size_t numberOfNodes();
   46275             : 
   46276             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   46277             :           static size_t memoryUsage();
   46278             : 
   46279             :       // End of scope which started in IR nodes specific code 
   46280             :       /* */
   46281             : 
   46282             :       /* name Internal Functions
   46283             :           \brief Internal functions ... incomplete-documentation
   46284             : 
   46285             :           These functions have been made public as part of the design, but they are suggested for internal use 
   46286             :           or by particularly knowledgeable users for specialized tools or applications.
   46287             : 
   46288             :           \internal We could not make these private because they are required by user for special purposes. And 
   46289             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   46290             :          
   46291             :        */
   46292             : 
   46293             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   46294             :        // overridden in every class by *generated* implementation
   46295             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   46296             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   46297             :        // MS: 06/28/02 container of names of variables or container indices 
   46298             :        // used used in the traversal to access AST successor nodes
   46299             :        // overridden in every class by *generated* implementation
   46300             :       /*! \brief container of names of variables or container indices used used in the traversal
   46301             :           to access AST successor nodes overridden in every class by *generated* implementation */
   46302             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   46303             : 
   46304             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   46305             :        // than all the vector copies. The implementation for these functions is generated for each class.
   46306             :       /*! \brief return number of children in the traversal successor list */
   46307             :           virtual size_t get_numberOfTraversalSuccessors() override;
   46308             :       /*! \brief index-based access to traversal successors by index number */
   46309             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   46310             :       /*! \brief index-based access to traversal successors by child node */
   46311             :           virtual size_t get_childIndex(SgNode *child) override;
   46312             : 
   46313             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   46314             :        // MS: 08/16/2002 method for generating RTI information
   46315             :       /*! \brief return C++ Runtime-Time-Information */
   46316             :           virtual RTIReturnType roseRTI() override;
   46317             : #endif
   46318             :       /* */
   46319             : 
   46320             : 
   46321             : 
   46322             :       /* name Deprecated Functions
   46323             :           \brief Deprecated functions ... incomplete-documentation
   46324             : 
   46325             :           These functions have been deprecated from use.
   46326             :        */
   46327             :       /* */
   46328             : 
   46329             :       /*! returns a C style string (char*) representing the class name */
   46330             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   46331             : 
   46332             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   46333             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   46334             : #if 0
   46335             :       /*! returns old style Sage II enum values */
   46336             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   46337             :       /*! returns old style Sage II enum values */
   46338             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   46339             : #endif
   46340             :       /* */
   46341             : 
   46342             : 
   46343             : 
   46344             : 
   46345             :      public:
   46346             :       /* name Traversal Support Functions
   46347             :           \brief Traversal support functions ... incomplete-documentation
   46348             : 
   46349             :           These functions have been made public as part of the design, but they are suggested for internal use 
   46350             :           or by particularly knowledgable users for specialized tools or applications.
   46351             :        */
   46352             :       /* */
   46353             : 
   46354             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   46355             :        // (inferior to ROSE traversal mechanism, experimental).
   46356             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   46357             :        */
   46358             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   46359             : 
   46360             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   46361             :       /*! \brief support for the classic visitor pattern done in GoF */
   46362             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   46363             : 
   46364             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   46365             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   46366             :        */
   46367             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   46368             : 
   46369             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   46370             :        */
   46371             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   46372             : 
   46373             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   46374             :        // This traversal helps support internal tools that call static member functions.
   46375             :        // note: this function operates on the memory pools.
   46376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   46377             :        */
   46378             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   46379             :       /* */
   46380             : 
   46381             : 
   46382             :      public:
   46383             :       /* name Memory Allocation Functions
   46384             :           \brief Memory allocations functions ... incomplete-documentation
   46385             : 
   46386             :           These functions have been made public as part of the design, but they are suggested for internal use 
   46387             :           or by particularly knowledgable users for specialized tools or applications.
   46388             :        */
   46389             :       /* */
   46390             : 
   46391             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   46392             : 
   46393             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   46394             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   46395             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   46396             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   46397             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   46398             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   46399             :           being used with the AST File I/O mechanism.
   46400             :        */
   46401             :           virtual bool isInMemoryPool() override;
   46402             : 
   46403             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   46404             : 
   46405             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   46406             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   46407             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   46408             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   46409             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   46410             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   46411             :           being used with the AST File I/O mechanism.
   46412             :        */
   46413             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   46414             : 
   46415             :       // DQ (4/30/2006): Modified to be a const function.
   46416             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   46417             : 
   46418             :           This functions is part of general support for many possible tools to operate 
   46419             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   46420             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   46421             :           less than the set of pointers used by the AST file I/O. This is part of
   46422             :           work implemented by Andreas, and support tools such as the AST graph generation.
   46423             : 
   46424             :           \warning This function can return unexpected data members and thus the 
   46425             :                    order and the number of elements is unpredicable and subject 
   46426             :                    to change.
   46427             : 
   46428             :           \returns STL vector of pairs of SgNode* and strings
   46429             :        */
   46430             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   46431             : 
   46432             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   46433             : 
   46434             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   46435             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   46436             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   46437             : 
   46438             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   46439             :                    and subject to change.
   46440             :        */
   46441             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   46442             : 
   46443             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   46444             : 
   46445             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   46446             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   46447             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   46448             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   46449             : 
   46450             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   46451             : 
   46452             :           \returns long
   46453             :        */
   46454             :           virtual long getChildIndex( SgNode* childNode ) const override;
   46455             : 
   46456             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   46457             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46458             :       /* \brief Constructor for use by AST File I/O Mechanism
   46459             : 
   46460             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   46461             :           which obtained via fast binary file I/O from disk.
   46462             :        */
   46463             :        // SgTypeSignedChar( SgTypeSignedCharStorageClass& source );
   46464             : 
   46465             : 
   46466             : 
   46467             : 
   46468             : 
   46469             :  // JH (10/24/2005): methods added to support the ast file IO
   46470             :     private:
   46471             : 
   46472             :       /* name AST Memory Allocation Support Functions
   46473             :           \brief Memory allocations support....
   46474             : 
   46475             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   46476             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   46477             :           and support the AST File I/O Mechanism.
   46478             :        */
   46479             :       /* */
   46480             : 
   46481             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   46482             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   46483             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   46484             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   46485             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   46486             :           a correspinding one in the AST_FILE_IO class!
   46487             :        */
   46488             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   46489             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46490             :       /* \brief Typedef used for low level memory access.
   46491             :        */
   46492             :        // typedef unsigned char* TestType;
   46493             : 
   46494             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   46495             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46496             :       /* \brief Typedef used to hold memory addresses as values.
   46497             :        */
   46498             :        // typedef unsigned long  AddressType;
   46499             : 
   46500             : 
   46501             : 
   46502             :        // necessary, to have direct access to the p_freepointer and the private methods !
   46503             :       /*! \brief friend class declaration to support AST File I/O */
   46504             :           friend class AST_FILE_IO;
   46505             : 
   46506             :       /*! \brief friend class declaration to support AST File I/O */
   46507             :           friend class SgTypeSignedCharStorageClass;
   46508             : 
   46509             :       /*! \brief friend class declaration to support AST File I/O */
   46510             :           friend class AstSpecificDataManagingClass;
   46511             : 
   46512             :       /*! \brief friend class declaration to support AST File I/O */
   46513             :           friend class AstSpecificDataManagingClassStorageClass;
   46514             :     public:
   46515             :       /*! \brief IR node constructor to support AST File I/O */
   46516             :           SgTypeSignedChar( const SgTypeSignedCharStorageClass& source );
   46517             : 
   46518             :  // private: // JJW hack
   46519             :        /*
   46520             :           name AST Memory Allocation Support Variables
   46521             :           Memory allocations support variables 
   46522             : 
   46523             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   46524             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   46525             :           and support the AST File I/O Mechanism.
   46526             :        */
   46527             :       /* */
   46528             : 
   46529             :     public:
   46530             : 
   46531             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   46532             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   46533             :       // virtual SgNode* addRegExpAttribute();
   46534             :       /*! \brief Support for AST matching using regular expression.
   46535             : 
   46536             :           This support is incomplete and the subject of current research to define 
   46537             :           RegEx trees to support inexact matching.
   46538             :        */
   46539             :           SgTypeSignedChar* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   46540             : 
   46541             : // *** COMMON CODE SECTION ENDS HERE ***
   46542             : 
   46543             : 
   46544             : // End of memberFunctionString
   46545             : // Start of memberFunctionString
   46546             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   46547             : 
   46548             :      // the generated cast function
   46549             :      // friend ROSE_DLL_API SgTypeSignedChar* isSgTypeSignedChar ( SgNode* s );
   46550             : 
   46551             :           typedef SgType base_node_type;
   46552             : 
   46553             : 
   46554             : // End of memberFunctionString
   46555             : // Start of memberFunctionString
   46556             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   46557             : 
   46558             :        // SgName get_mangled ( SgUnparse_Info & info );
   46559             : 
   46560             :       //! Mangled name support for unparser support
   46561             :        // SgName get_mangled ( SgUnparse_Info & info );
   46562             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   46563             :           virtual SgName get_mangled (void) const override;
   46564             : 
   46565             : 
   46566             : 
   46567             : // End of memberFunctionString
   46568             : // Start of memberFunctionString
   46569             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   46570             : 
   46571             :       //! example of type used where construction is particularly simple
   46572             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   46573             :        // static SgTypeSignedChar builtin_type;
   46574             :        // static SgTypeSignedChar* builtin_type;
   46575             : 
   46576             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   46577             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   46578             :        // own data member and associated access function.
   46579             :        // static SgTypeSignedChar* get_builtin_type();
   46580             : 
   46581             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   46582             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   46583             :        // own data member and associated access function.
   46584             :        // static void set_builtin_type(SgTypeSignedChar* builtin_type);
   46585             : 
   46586             :       //! function returns example of type
   46587             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   46588             :        // static SgTypeSignedChar* createType(void);
   46589             :           static SgTypeSignedChar* createType(SgExpression* optional_fortran_type_kind = NULL);
   46590             : 
   46591             : 
   46592             : // End of memberFunctionString
   46593             : 
   46594             : 
   46595             : 
   46596             :      public: 
   46597             :          virtual ~SgTypeSignedChar();
   46598             : 
   46599             : 
   46600             :      public: 
   46601             :          SgTypeSignedChar(); 
   46602             : 
   46603             :     protected:
   46604             : // Start of memberFunctionString
   46605             : static SgTypeSignedChar* p_builtin_type;
   46606             :           
   46607             : // End of memberFunctionString
   46608             : 
   46609             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeSignedChar>;
   46610             : 
   46611             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46612             : 
   46613             : 
   46614             :    };
   46615             : #endif
   46616             : 
   46617             : // postdeclarations for SgTypeSignedChar
   46618             : 
   46619             : /* #line 46620 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46620             : 
   46621             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   46622             : 
   46623             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46624             : 
   46625             : 
   46626             : /* #line 46627 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46627             : 
   46628             : 
   46629             : 
   46630             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46631             : 
   46632             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   46633             : //      This code is automatically generated for each 
   46634             : //      terminal and non-terminal within the defined 
   46635             : //      grammar.  There is a simple way to change the 
   46636             : //      code to fix bugs etc.  See the ROSE README file
   46637             : //      for directions.
   46638             : 
   46639             : // tps: (02/22/2010): Adding DLL export requirements
   46640             : #include "rosedll.h"
   46641             : 
   46642             : // predeclarations for SgTypeUnsignedChar
   46643             : 
   46644             : /* #line 46645 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46645             : 
   46646             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   46647             : 
   46648             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   46649             : 
   46650             : #if 1
   46651             : // Class Definition for SgTypeUnsignedChar
   46652             : class ROSE_DLL_API SgTypeUnsignedChar  : public SgType
   46653             :    {
   46654             :      public:
   46655             : 
   46656             : 
   46657             : /* #line 46658 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   46658             : 
   46659             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   46660             : // Start of memberFunctionString
   46661             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   46662             : 
   46663             : // *** COMMON CODE SECTION BEGINS HERE ***
   46664             : 
   46665             :     public:
   46666             : 
   46667             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   46668             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   46669             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   46670             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   46671             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   46672             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   46673             : 
   46674             :       /*! \brief returns a string representing the class name */
   46675             :           virtual std::string class_name() const override;
   46676             : 
   46677             :       /*! \brief returns new style SageIII enum values */
   46678             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   46679             : 
   46680             :       /*! \brief static variant value */
   46681             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   46682             :        // static const VariantT static_variant = V_SgTypeUnsignedChar;
   46683             :           enum { static_variant = V_SgTypeUnsignedChar };
   46684             : 
   46685             :        /* the generated cast function */
   46686             :       /*! \brief Casts pointer from base class to derived class */
   46687             :           ROSE_DLL_API friend       SgTypeUnsignedChar* isSgTypeUnsignedChar(       SgNode * s );
   46688             : 
   46689             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   46690             :           ROSE_DLL_API friend const SgTypeUnsignedChar* isSgTypeUnsignedChar( const SgNode * s );
   46691             : 
   46692             :      // ******************************************
   46693             :      // * Memory Pool / New / Delete
   46694             :      // ******************************************
   46695             : 
   46696             :      public:
   46697             :           /// \private
   46698             :           static const unsigned pool_size; //
   46699             :           /// \private
   46700             :           static std::vector<unsigned char *> pools; //
   46701             :           /// \private
   46702             :           static SgTypeUnsignedChar * next_node; // 
   46703             : 
   46704             :           /// \private
   46705             :           static unsigned long initializeStorageClassArray(SgTypeUnsignedCharStorageClass *); //
   46706             : 
   46707             :           /// \private
   46708             :           static void clearMemoryPool(); //
   46709             :           static void deleteMemoryPool(); //
   46710             : 
   46711             :           /// \private
   46712             :           static void extendMemoryPoolForFileIO(); //
   46713             : 
   46714             :           /// \private
   46715             :           static SgTypeUnsignedChar * getPointerFromGlobalIndex(unsigned long); //
   46716             :           /// \private
   46717             :           static SgTypeUnsignedChar * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   46718             : 
   46719             :           /// \private
   46720             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   46721             :           /// \private
   46722             :           static void resetValidFreepointers(); //
   46723             :           /// \private
   46724             :           static unsigned long getNumberOfLastValidPointer(); //
   46725             : 
   46726             : 
   46727             : #if defined(INLINE_FUNCTIONS)
   46728             :       /*! \brief returns pointer to newly allocated IR node */
   46729             :           inline void *operator new (size_t size);
   46730             : #else
   46731             :       /*! \brief returns pointer to newly allocated IR node */
   46732             :           void *operator new (size_t size);
   46733             : #endif
   46734             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   46735             :           void operator delete (void* pointer, size_t size);
   46736             : 
   46737             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   46738          11 :           void operator delete (void* pointer)
   46739             :              {
   46740             :             // This is the generated delete operator...
   46741          11 :                SgTypeUnsignedChar::operator delete (pointer,sizeof(SgTypeUnsignedChar));
   46742             :              }
   46743             : 
   46744             :       /*! \brief Returns the total number of IR nodes of this type */
   46745             :           static size_t numberOfNodes();
   46746             : 
   46747             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   46748             :           static size_t memoryUsage();
   46749             : 
   46750             :       // End of scope which started in IR nodes specific code 
   46751             :       /* */
   46752             : 
   46753             :       /* name Internal Functions
   46754             :           \brief Internal functions ... incomplete-documentation
   46755             : 
   46756             :           These functions have been made public as part of the design, but they are suggested for internal use 
   46757             :           or by particularly knowledgeable users for specialized tools or applications.
   46758             : 
   46759             :           \internal We could not make these private because they are required by user for special purposes. And 
   46760             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   46761             :          
   46762             :        */
   46763             : 
   46764             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   46765             :        // overridden in every class by *generated* implementation
   46766             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   46767             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   46768             :        // MS: 06/28/02 container of names of variables or container indices 
   46769             :        // used used in the traversal to access AST successor nodes
   46770             :        // overridden in every class by *generated* implementation
   46771             :       /*! \brief container of names of variables or container indices used used in the traversal
   46772             :           to access AST successor nodes overridden in every class by *generated* implementation */
   46773             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   46774             : 
   46775             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   46776             :        // than all the vector copies. The implementation for these functions is generated for each class.
   46777             :       /*! \brief return number of children in the traversal successor list */
   46778             :           virtual size_t get_numberOfTraversalSuccessors() override;
   46779             :       /*! \brief index-based access to traversal successors by index number */
   46780             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   46781             :       /*! \brief index-based access to traversal successors by child node */
   46782             :           virtual size_t get_childIndex(SgNode *child) override;
   46783             : 
   46784             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   46785             :        // MS: 08/16/2002 method for generating RTI information
   46786             :       /*! \brief return C++ Runtime-Time-Information */
   46787             :           virtual RTIReturnType roseRTI() override;
   46788             : #endif
   46789             :       /* */
   46790             : 
   46791             : 
   46792             : 
   46793             :       /* name Deprecated Functions
   46794             :           \brief Deprecated functions ... incomplete-documentation
   46795             : 
   46796             :           These functions have been deprecated from use.
   46797             :        */
   46798             :       /* */
   46799             : 
   46800             :       /*! returns a C style string (char*) representing the class name */
   46801             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   46802             : 
   46803             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   46804             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   46805             : #if 0
   46806             :       /*! returns old style Sage II enum values */
   46807             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   46808             :       /*! returns old style Sage II enum values */
   46809             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   46810             : #endif
   46811             :       /* */
   46812             : 
   46813             : 
   46814             : 
   46815             : 
   46816             :      public:
   46817             :       /* name Traversal Support Functions
   46818             :           \brief Traversal support functions ... incomplete-documentation
   46819             : 
   46820             :           These functions have been made public as part of the design, but they are suggested for internal use 
   46821             :           or by particularly knowledgable users for specialized tools or applications.
   46822             :        */
   46823             :       /* */
   46824             : 
   46825             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   46826             :        // (inferior to ROSE traversal mechanism, experimental).
   46827             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   46828             :        */
   46829             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   46830             : 
   46831             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   46832             :       /*! \brief support for the classic visitor pattern done in GoF */
   46833             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   46834             : 
   46835             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   46836             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   46837             :        */
   46838             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   46839             : 
   46840             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   46841             :        */
   46842             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   46843             : 
   46844             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   46845             :        // This traversal helps support internal tools that call static member functions.
   46846             :        // note: this function operates on the memory pools.
   46847             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   46848             :        */
   46849             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   46850             :       /* */
   46851             : 
   46852             : 
   46853             :      public:
   46854             :       /* name Memory Allocation Functions
   46855             :           \brief Memory allocations functions ... incomplete-documentation
   46856             : 
   46857             :           These functions have been made public as part of the design, but they are suggested for internal use 
   46858             :           or by particularly knowledgable users for specialized tools or applications.
   46859             :        */
   46860             :       /* */
   46861             : 
   46862             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   46863             : 
   46864             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   46865             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   46866             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   46867             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   46868             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   46869             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   46870             :           being used with the AST File I/O mechanism.
   46871             :        */
   46872             :           virtual bool isInMemoryPool() override;
   46873             : 
   46874             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   46875             : 
   46876             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   46877             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   46878             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   46879             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   46880             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   46881             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   46882             :           being used with the AST File I/O mechanism.
   46883             :        */
   46884             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   46885             : 
   46886             :       // DQ (4/30/2006): Modified to be a const function.
   46887             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   46888             : 
   46889             :           This functions is part of general support for many possible tools to operate 
   46890             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   46891             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   46892             :           less than the set of pointers used by the AST file I/O. This is part of
   46893             :           work implemented by Andreas, and support tools such as the AST graph generation.
   46894             : 
   46895             :           \warning This function can return unexpected data members and thus the 
   46896             :                    order and the number of elements is unpredicable and subject 
   46897             :                    to change.
   46898             : 
   46899             :           \returns STL vector of pairs of SgNode* and strings
   46900             :        */
   46901             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   46902             : 
   46903             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   46904             : 
   46905             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   46906             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   46907             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   46908             : 
   46909             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   46910             :                    and subject to change.
   46911             :        */
   46912             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   46913             : 
   46914             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   46915             : 
   46916             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   46917             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   46918             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   46919             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   46920             : 
   46921             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   46922             : 
   46923             :           \returns long
   46924             :        */
   46925             :           virtual long getChildIndex( SgNode* childNode ) const override;
   46926             : 
   46927             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   46928             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46929             :       /* \brief Constructor for use by AST File I/O Mechanism
   46930             : 
   46931             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   46932             :           which obtained via fast binary file I/O from disk.
   46933             :        */
   46934             :        // SgTypeUnsignedChar( SgTypeUnsignedCharStorageClass& source );
   46935             : 
   46936             : 
   46937             : 
   46938             : 
   46939             : 
   46940             :  // JH (10/24/2005): methods added to support the ast file IO
   46941             :     private:
   46942             : 
   46943             :       /* name AST Memory Allocation Support Functions
   46944             :           \brief Memory allocations support....
   46945             : 
   46946             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   46947             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   46948             :           and support the AST File I/O Mechanism.
   46949             :        */
   46950             :       /* */
   46951             : 
   46952             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   46953             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   46954             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   46955             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   46956             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   46957             :           a correspinding one in the AST_FILE_IO class!
   46958             :        */
   46959             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   46960             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46961             :       /* \brief Typedef used for low level memory access.
   46962             :        */
   46963             :        // typedef unsigned char* TestType;
   46964             : 
   46965             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   46966             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   46967             :       /* \brief Typedef used to hold memory addresses as values.
   46968             :        */
   46969             :        // typedef unsigned long  AddressType;
   46970             : 
   46971             : 
   46972             : 
   46973             :        // necessary, to have direct access to the p_freepointer and the private methods !
   46974             :       /*! \brief friend class declaration to support AST File I/O */
   46975             :           friend class AST_FILE_IO;
   46976             : 
   46977             :       /*! \brief friend class declaration to support AST File I/O */
   46978             :           friend class SgTypeUnsignedCharStorageClass;
   46979             : 
   46980             :       /*! \brief friend class declaration to support AST File I/O */
   46981             :           friend class AstSpecificDataManagingClass;
   46982             : 
   46983             :       /*! \brief friend class declaration to support AST File I/O */
   46984             :           friend class AstSpecificDataManagingClassStorageClass;
   46985             :     public:
   46986             :       /*! \brief IR node constructor to support AST File I/O */
   46987             :           SgTypeUnsignedChar( const SgTypeUnsignedCharStorageClass& source );
   46988             : 
   46989             :  // private: // JJW hack
   46990             :        /*
   46991             :           name AST Memory Allocation Support Variables
   46992             :           Memory allocations support variables 
   46993             : 
   46994             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   46995             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   46996             :           and support the AST File I/O Mechanism.
   46997             :        */
   46998             :       /* */
   46999             : 
   47000             :     public:
   47001             : 
   47002             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   47003             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   47004             :       // virtual SgNode* addRegExpAttribute();
   47005             :       /*! \brief Support for AST matching using regular expression.
   47006             : 
   47007             :           This support is incomplete and the subject of current research to define 
   47008             :           RegEx trees to support inexact matching.
   47009             :        */
   47010             :           SgTypeUnsignedChar* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   47011             : 
   47012             : // *** COMMON CODE SECTION ENDS HERE ***
   47013             : 
   47014             : 
   47015             : // End of memberFunctionString
   47016             : // Start of memberFunctionString
   47017             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   47018             : 
   47019             :      // the generated cast function
   47020             :      // friend ROSE_DLL_API SgTypeUnsignedChar* isSgTypeUnsignedChar ( SgNode* s );
   47021             : 
   47022             :           typedef SgType base_node_type;
   47023             : 
   47024             : 
   47025             : // End of memberFunctionString
   47026             : // Start of memberFunctionString
   47027             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   47028             : 
   47029             :        // SgName get_mangled ( SgUnparse_Info & info );
   47030             : 
   47031             :       //! Mangled name support for unparser support
   47032             :        // SgName get_mangled ( SgUnparse_Info & info );
   47033             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   47034             :           virtual SgName get_mangled (void) const override;
   47035             : 
   47036             : 
   47037             : 
   47038             : // End of memberFunctionString
   47039             : // Start of memberFunctionString
   47040             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   47041             : 
   47042             :       //! example of type used where construction is particularly simple
   47043             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   47044             :        // static SgTypeUnsignedChar builtin_type;
   47045             :        // static SgTypeUnsignedChar* builtin_type;
   47046             : 
   47047             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   47048             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   47049             :        // own data member and associated access function.
   47050             :        // static SgTypeUnsignedChar* get_builtin_type();
   47051             : 
   47052             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   47053             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   47054             :        // own data member and associated access function.
   47055             :        // static void set_builtin_type(SgTypeUnsignedChar* builtin_type);
   47056             : 
   47057             :       //! function returns example of type
   47058             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   47059             :        // static SgTypeUnsignedChar* createType(void);
   47060             :           static SgTypeUnsignedChar* createType(SgExpression* optional_fortran_type_kind = NULL);
   47061             : 
   47062             : 
   47063             : // End of memberFunctionString
   47064             : 
   47065             : 
   47066             : 
   47067             :      public: 
   47068             :          virtual ~SgTypeUnsignedChar();
   47069             : 
   47070             : 
   47071             :      public: 
   47072             :          SgTypeUnsignedChar(); 
   47073             : 
   47074             :     protected:
   47075             : // Start of memberFunctionString
   47076             : static SgTypeUnsignedChar* p_builtin_type;
   47077             :           
   47078             : // End of memberFunctionString
   47079             : 
   47080             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeUnsignedChar>;
   47081             : 
   47082             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47083             : 
   47084             : 
   47085             :    };
   47086             : #endif
   47087             : 
   47088             : // postdeclarations for SgTypeUnsignedChar
   47089             : 
   47090             : /* #line 47091 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47091             : 
   47092             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   47093             : 
   47094             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47095             : 
   47096             : 
   47097             : /* #line 47098 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47098             : 
   47099             : 
   47100             : 
   47101             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47102             : 
   47103             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   47104             : //      This code is automatically generated for each 
   47105             : //      terminal and non-terminal within the defined 
   47106             : //      grammar.  There is a simple way to change the 
   47107             : //      code to fix bugs etc.  See the ROSE README file
   47108             : //      for directions.
   47109             : 
   47110             : // tps: (02/22/2010): Adding DLL export requirements
   47111             : #include "rosedll.h"
   47112             : 
   47113             : // predeclarations for SgTypeShort
   47114             : 
   47115             : /* #line 47116 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47116             : 
   47117             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   47118             : 
   47119             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47120             : 
   47121             : #if 1
   47122             : // Class Definition for SgTypeShort
   47123             : class ROSE_DLL_API SgTypeShort  : public SgType
   47124             :    {
   47125             :      public:
   47126             : 
   47127             : 
   47128             : /* #line 47129 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47129             : 
   47130             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   47131             : // Start of memberFunctionString
   47132             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   47133             : 
   47134             : // *** COMMON CODE SECTION BEGINS HERE ***
   47135             : 
   47136             :     public:
   47137             : 
   47138             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   47139             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   47140             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   47141             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   47142             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   47143             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   47144             : 
   47145             :       /*! \brief returns a string representing the class name */
   47146             :           virtual std::string class_name() const override;
   47147             : 
   47148             :       /*! \brief returns new style SageIII enum values */
   47149             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   47150             : 
   47151             :       /*! \brief static variant value */
   47152             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   47153             :        // static const VariantT static_variant = V_SgTypeShort;
   47154             :           enum { static_variant = V_SgTypeShort };
   47155             : 
   47156             :        /* the generated cast function */
   47157             :       /*! \brief Casts pointer from base class to derived class */
   47158             :           ROSE_DLL_API friend       SgTypeShort* isSgTypeShort(       SgNode * s );
   47159             : 
   47160             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   47161             :           ROSE_DLL_API friend const SgTypeShort* isSgTypeShort( const SgNode * s );
   47162             : 
   47163             :      // ******************************************
   47164             :      // * Memory Pool / New / Delete
   47165             :      // ******************************************
   47166             : 
   47167             :      public:
   47168             :           /// \private
   47169             :           static const unsigned pool_size; //
   47170             :           /// \private
   47171             :           static std::vector<unsigned char *> pools; //
   47172             :           /// \private
   47173             :           static SgTypeShort * next_node; // 
   47174             : 
   47175             :           /// \private
   47176             :           static unsigned long initializeStorageClassArray(SgTypeShortStorageClass *); //
   47177             : 
   47178             :           /// \private
   47179             :           static void clearMemoryPool(); //
   47180             :           static void deleteMemoryPool(); //
   47181             : 
   47182             :           /// \private
   47183             :           static void extendMemoryPoolForFileIO(); //
   47184             : 
   47185             :           /// \private
   47186             :           static SgTypeShort * getPointerFromGlobalIndex(unsigned long); //
   47187             :           /// \private
   47188             :           static SgTypeShort * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   47189             : 
   47190             :           /// \private
   47191             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   47192             :           /// \private
   47193             :           static void resetValidFreepointers(); //
   47194             :           /// \private
   47195             :           static unsigned long getNumberOfLastValidPointer(); //
   47196             : 
   47197             : 
   47198             : #if defined(INLINE_FUNCTIONS)
   47199             :       /*! \brief returns pointer to newly allocated IR node */
   47200             :           inline void *operator new (size_t size);
   47201             : #else
   47202             :       /*! \brief returns pointer to newly allocated IR node */
   47203             :           void *operator new (size_t size);
   47204             : #endif
   47205             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   47206             :           void operator delete (void* pointer, size_t size);
   47207             : 
   47208             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   47209          11 :           void operator delete (void* pointer)
   47210             :              {
   47211             :             // This is the generated delete operator...
   47212          11 :                SgTypeShort::operator delete (pointer,sizeof(SgTypeShort));
   47213             :              }
   47214             : 
   47215             :       /*! \brief Returns the total number of IR nodes of this type */
   47216             :           static size_t numberOfNodes();
   47217             : 
   47218             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   47219             :           static size_t memoryUsage();
   47220             : 
   47221             :       // End of scope which started in IR nodes specific code 
   47222             :       /* */
   47223             : 
   47224             :       /* name Internal Functions
   47225             :           \brief Internal functions ... incomplete-documentation
   47226             : 
   47227             :           These functions have been made public as part of the design, but they are suggested for internal use 
   47228             :           or by particularly knowledgeable users for specialized tools or applications.
   47229             : 
   47230             :           \internal We could not make these private because they are required by user for special purposes. And 
   47231             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   47232             :          
   47233             :        */
   47234             : 
   47235             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   47236             :        // overridden in every class by *generated* implementation
   47237             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   47238             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   47239             :        // MS: 06/28/02 container of names of variables or container indices 
   47240             :        // used used in the traversal to access AST successor nodes
   47241             :        // overridden in every class by *generated* implementation
   47242             :       /*! \brief container of names of variables or container indices used used in the traversal
   47243             :           to access AST successor nodes overridden in every class by *generated* implementation */
   47244             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   47245             : 
   47246             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   47247             :        // than all the vector copies. The implementation for these functions is generated for each class.
   47248             :       /*! \brief return number of children in the traversal successor list */
   47249             :           virtual size_t get_numberOfTraversalSuccessors() override;
   47250             :       /*! \brief index-based access to traversal successors by index number */
   47251             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   47252             :       /*! \brief index-based access to traversal successors by child node */
   47253             :           virtual size_t get_childIndex(SgNode *child) override;
   47254             : 
   47255             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   47256             :        // MS: 08/16/2002 method for generating RTI information
   47257             :       /*! \brief return C++ Runtime-Time-Information */
   47258             :           virtual RTIReturnType roseRTI() override;
   47259             : #endif
   47260             :       /* */
   47261             : 
   47262             : 
   47263             : 
   47264             :       /* name Deprecated Functions
   47265             :           \brief Deprecated functions ... incomplete-documentation
   47266             : 
   47267             :           These functions have been deprecated from use.
   47268             :        */
   47269             :       /* */
   47270             : 
   47271             :       /*! returns a C style string (char*) representing the class name */
   47272             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   47273             : 
   47274             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   47275             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   47276             : #if 0
   47277             :       /*! returns old style Sage II enum values */
   47278             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   47279             :       /*! returns old style Sage II enum values */
   47280             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   47281             : #endif
   47282             :       /* */
   47283             : 
   47284             : 
   47285             : 
   47286             : 
   47287             :      public:
   47288             :       /* name Traversal Support Functions
   47289             :           \brief Traversal support functions ... incomplete-documentation
   47290             : 
   47291             :           These functions have been made public as part of the design, but they are suggested for internal use 
   47292             :           or by particularly knowledgable users for specialized tools or applications.
   47293             :        */
   47294             :       /* */
   47295             : 
   47296             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   47297             :        // (inferior to ROSE traversal mechanism, experimental).
   47298             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   47299             :        */
   47300             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   47301             : 
   47302             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   47303             :       /*! \brief support for the classic visitor pattern done in GoF */
   47304             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   47305             : 
   47306             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   47307             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   47308             :        */
   47309             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   47310             : 
   47311             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   47312             :        */
   47313             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   47314             : 
   47315             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   47316             :        // This traversal helps support internal tools that call static member functions.
   47317             :        // note: this function operates on the memory pools.
   47318             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   47319             :        */
   47320             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   47321             :       /* */
   47322             : 
   47323             : 
   47324             :      public:
   47325             :       /* name Memory Allocation Functions
   47326             :           \brief Memory allocations functions ... incomplete-documentation
   47327             : 
   47328             :           These functions have been made public as part of the design, but they are suggested for internal use 
   47329             :           or by particularly knowledgable users for specialized tools or applications.
   47330             :        */
   47331             :       /* */
   47332             : 
   47333             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   47334             : 
   47335             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   47336             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   47337             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   47338             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   47339             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   47340             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   47341             :           being used with the AST File I/O mechanism.
   47342             :        */
   47343             :           virtual bool isInMemoryPool() override;
   47344             : 
   47345             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   47346             : 
   47347             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   47348             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   47349             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   47350             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   47351             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   47352             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   47353             :           being used with the AST File I/O mechanism.
   47354             :        */
   47355             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   47356             : 
   47357             :       // DQ (4/30/2006): Modified to be a const function.
   47358             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   47359             : 
   47360             :           This functions is part of general support for many possible tools to operate 
   47361             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   47362             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   47363             :           less than the set of pointers used by the AST file I/O. This is part of
   47364             :           work implemented by Andreas, and support tools such as the AST graph generation.
   47365             : 
   47366             :           \warning This function can return unexpected data members and thus the 
   47367             :                    order and the number of elements is unpredicable and subject 
   47368             :                    to change.
   47369             : 
   47370             :           \returns STL vector of pairs of SgNode* and strings
   47371             :        */
   47372             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   47373             : 
   47374             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   47375             : 
   47376             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   47377             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   47378             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   47379             : 
   47380             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   47381             :                    and subject to change.
   47382             :        */
   47383             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   47384             : 
   47385             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   47386             : 
   47387             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   47388             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   47389             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   47390             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   47391             : 
   47392             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   47393             : 
   47394             :           \returns long
   47395             :        */
   47396             :           virtual long getChildIndex( SgNode* childNode ) const override;
   47397             : 
   47398             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   47399             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   47400             :       /* \brief Constructor for use by AST File I/O Mechanism
   47401             : 
   47402             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   47403             :           which obtained via fast binary file I/O from disk.
   47404             :        */
   47405             :        // SgTypeShort( SgTypeShortStorageClass& source );
   47406             : 
   47407             : 
   47408             : 
   47409             : 
   47410             : 
   47411             :  // JH (10/24/2005): methods added to support the ast file IO
   47412             :     private:
   47413             : 
   47414             :       /* name AST Memory Allocation Support Functions
   47415             :           \brief Memory allocations support....
   47416             : 
   47417             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   47418             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   47419             :           and support the AST File I/O Mechanism.
   47420             :        */
   47421             :       /* */
   47422             : 
   47423             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   47424             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   47425             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   47426             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   47427             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   47428             :           a correspinding one in the AST_FILE_IO class!
   47429             :        */
   47430             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   47431             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   47432             :       /* \brief Typedef used for low level memory access.
   47433             :        */
   47434             :        // typedef unsigned char* TestType;
   47435             : 
   47436             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   47437             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   47438             :       /* \brief Typedef used to hold memory addresses as values.
   47439             :        */
   47440             :        // typedef unsigned long  AddressType;
   47441             : 
   47442             : 
   47443             : 
   47444             :        // necessary, to have direct access to the p_freepointer and the private methods !
   47445             :       /*! \brief friend class declaration to support AST File I/O */
   47446             :           friend class AST_FILE_IO;
   47447             : 
   47448             :       /*! \brief friend class declaration to support AST File I/O */
   47449             :           friend class SgTypeShortStorageClass;
   47450             : 
   47451             :       /*! \brief friend class declaration to support AST File I/O */
   47452             :           friend class AstSpecificDataManagingClass;
   47453             : 
   47454             :       /*! \brief friend class declaration to support AST File I/O */
   47455             :           friend class AstSpecificDataManagingClassStorageClass;
   47456             :     public:
   47457             :       /*! \brief IR node constructor to support AST File I/O */
   47458             :           SgTypeShort( const SgTypeShortStorageClass& source );
   47459             : 
   47460             :  // private: // JJW hack
   47461             :        /*
   47462             :           name AST Memory Allocation Support Variables
   47463             :           Memory allocations support variables 
   47464             : 
   47465             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   47466             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   47467             :           and support the AST File I/O Mechanism.
   47468             :        */
   47469             :       /* */
   47470             : 
   47471             :     public:
   47472             : 
   47473             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   47474             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   47475             :       // virtual SgNode* addRegExpAttribute();
   47476             :       /*! \brief Support for AST matching using regular expression.
   47477             : 
   47478             :           This support is incomplete and the subject of current research to define 
   47479             :           RegEx trees to support inexact matching.
   47480             :        */
   47481             :           SgTypeShort* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   47482             : 
   47483             : // *** COMMON CODE SECTION ENDS HERE ***
   47484             : 
   47485             : 
   47486             : // End of memberFunctionString
   47487             : // Start of memberFunctionString
   47488             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   47489             : 
   47490             :      // the generated cast function
   47491             :      // friend ROSE_DLL_API SgTypeShort* isSgTypeShort ( SgNode* s );
   47492             : 
   47493             :           typedef SgType base_node_type;
   47494             : 
   47495             : 
   47496             : // End of memberFunctionString
   47497             : // Start of memberFunctionString
   47498             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   47499             : 
   47500             :        // SgName get_mangled ( SgUnparse_Info & info );
   47501             : 
   47502             :       //! Mangled name support for unparser support
   47503             :        // SgName get_mangled ( SgUnparse_Info & info );
   47504             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   47505             :           virtual SgName get_mangled (void) const override;
   47506             : 
   47507             : 
   47508             : 
   47509             : // End of memberFunctionString
   47510             : // Start of memberFunctionString
   47511             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   47512             : 
   47513             :       //! example of type used where construction is particularly simple
   47514             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   47515             :        // static SgTypeShort builtin_type;
   47516             :        // static SgTypeShort* builtin_type;
   47517             : 
   47518             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   47519             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   47520             :        // own data member and associated access function.
   47521             :        // static SgTypeShort* get_builtin_type();
   47522             : 
   47523             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   47524             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   47525             :        // own data member and associated access function.
   47526             :        // static void set_builtin_type(SgTypeShort* builtin_type);
   47527             : 
   47528             :       //! function returns example of type
   47529             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   47530             :        // static SgTypeShort* createType(void);
   47531             :           static SgTypeShort* createType(SgExpression* optional_fortran_type_kind = NULL);
   47532             : 
   47533             : 
   47534             : // End of memberFunctionString
   47535             : 
   47536             : 
   47537             : 
   47538             :      public: 
   47539             :          virtual ~SgTypeShort();
   47540             : 
   47541             : 
   47542             :      public: 
   47543             :          SgTypeShort(); 
   47544             : 
   47545             :     protected:
   47546             : // Start of memberFunctionString
   47547             : static SgTypeShort* p_builtin_type;
   47548             :           
   47549             : // End of memberFunctionString
   47550             : 
   47551             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeShort>;
   47552             : 
   47553             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47554             : 
   47555             : 
   47556             :    };
   47557             : #endif
   47558             : 
   47559             : // postdeclarations for SgTypeShort
   47560             : 
   47561             : /* #line 47562 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47562             : 
   47563             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   47564             : 
   47565             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47566             : 
   47567             : 
   47568             : /* #line 47569 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47569             : 
   47570             : 
   47571             : 
   47572             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47573             : 
   47574             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   47575             : //      This code is automatically generated for each 
   47576             : //      terminal and non-terminal within the defined 
   47577             : //      grammar.  There is a simple way to change the 
   47578             : //      code to fix bugs etc.  See the ROSE README file
   47579             : //      for directions.
   47580             : 
   47581             : // tps: (02/22/2010): Adding DLL export requirements
   47582             : #include "rosedll.h"
   47583             : 
   47584             : // predeclarations for SgTypeSignedShort
   47585             : 
   47586             : /* #line 47587 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47587             : 
   47588             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   47589             : 
   47590             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   47591             : 
   47592             : #if 1
   47593             : // Class Definition for SgTypeSignedShort
   47594             : class ROSE_DLL_API SgTypeSignedShort  : public SgType
   47595             :    {
   47596             :      public:
   47597             : 
   47598             : 
   47599             : /* #line 47600 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   47600             : 
   47601             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   47602             : // Start of memberFunctionString
   47603             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   47604             : 
   47605             : // *** COMMON CODE SECTION BEGINS HERE ***
   47606             : 
   47607             :     public:
   47608             : 
   47609             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   47610             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   47611             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   47612             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   47613             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   47614             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   47615             : 
   47616             :       /*! \brief returns a string representing the class name */
   47617             :           virtual std::string class_name() const override;
   47618             : 
   47619             :       /*! \brief returns new style SageIII enum values */
   47620             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   47621             : 
   47622             :       /*! \brief static variant value */
   47623             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   47624             :        // static const VariantT static_variant = V_SgTypeSignedShort;
   47625             :           enum { static_variant = V_SgTypeSignedShort };
   47626             : 
   47627             :        /* the generated cast function */
   47628             :       /*! \brief Casts pointer from base class to derived class */
   47629             :           ROSE_DLL_API friend       SgTypeSignedShort* isSgTypeSignedShort(       SgNode * s );
   47630             : 
   47631             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   47632             :           ROSE_DLL_API friend const SgTypeSignedShort* isSgTypeSignedShort( const SgNode * s );
   47633             : 
   47634             :      // ******************************************
   47635             :      // * Memory Pool / New / Delete
   47636             :      // ******************************************
   47637             : 
   47638             :      public:
   47639             :           /// \private
   47640             :           static const unsigned pool_size; //
   47641             :           /// \private
   47642             :           static std::vector<unsigned char *> pools; //
   47643             :           /// \private
   47644             :           static SgTypeSignedShort * next_node; // 
   47645             : 
   47646             :           /// \private
   47647             :           static unsigned long initializeStorageClassArray(SgTypeSignedShortStorageClass *); //
   47648             : 
   47649             :           /// \private
   47650             :           static void clearMemoryPool(); //
   47651             :           static void deleteMemoryPool(); //
   47652             : 
   47653             :           /// \private
   47654             :           static void extendMemoryPoolForFileIO(); //
   47655             : 
   47656             :           /// \private
   47657             :           static SgTypeSignedShort * getPointerFromGlobalIndex(unsigned long); //
   47658             :           /// \private
   47659             :           static SgTypeSignedShort * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   47660             : 
   47661             :           /// \private
   47662             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   47663             :           /// \private
   47664             :           static void resetValidFreepointers(); //
   47665             :           /// \private
   47666             :           static unsigned long getNumberOfLastValidPointer(); //
   47667             : 
   47668             : 
   47669             : #if defined(INLINE_FUNCTIONS)
   47670             :       /*! \brief returns pointer to newly allocated IR node */
   47671             :           inline void *operator new (size_t size);
   47672             : #else
   47673             :       /*! \brief returns pointer to newly allocated IR node */
   47674             :           void *operator new (size_t size);
   47675             : #endif
   47676             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   47677             :           void operator delete (void* pointer, size_t size);
   47678             : 
   47679             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   47680           4 :           void operator delete (void* pointer)
   47681             :              {
   47682             :             // This is the generated delete operator...
   47683           4 :                SgTypeSignedShort::operator delete (pointer,sizeof(SgTypeSignedShort));
   47684             :              }
   47685             : 
   47686             :       /*! \brief Returns the total number of IR nodes of this type */
   47687             :           static size_t numberOfNodes();
   47688             : 
   47689             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   47690             :           static size_t memoryUsage();
   47691             : 
   47692             :       // End of scope which started in IR nodes specific code 
   47693             :       /* */
   47694             : 
   47695             :       /* name Internal Functions
   47696             :           \brief Internal functions ... incomplete-documentation
   47697             : 
   47698             :           These functions have been made public as part of the design, but they are suggested for internal use 
   47699             :           or by particularly knowledgeable users for specialized tools or applications.
   47700             : 
   47701             :           \internal We could not make these private because they are required by user for special purposes. And 
   47702             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   47703             :          
   47704             :        */
   47705             : 
   47706             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   47707             :        // overridden in every class by *generated* implementation
   47708             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   47709             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   47710             :        // MS: 06/28/02 container of names of variables or container indices 
   47711             :        // used used in the traversal to access AST successor nodes
   47712             :        // overridden in every class by *generated* implementation
   47713             :       /*! \brief container of names of variables or container indices used used in the traversal
   47714             :           to access AST successor nodes overridden in every class by *generated* implementation */
   47715             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   47716             : 
   47717             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   47718             :        // than all the vector copies. The implementation for these functions is generated for each class.
   47719             :       /*! \brief return number of children in the traversal successor list */
   47720             :           virtual size_t get_numberOfTraversalSuccessors() override;
   47721             :       /*! \brief index-based access to traversal successors by index number */
   47722             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   47723             :       /*! \brief index-based access to traversal successors by child node */
   47724             :           virtual size_t get_childIndex(SgNode *child) override;
   47725             : 
   47726             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   47727             :        // MS: 08/16/2002 method for generating RTI information
   47728             :       /*! \brief return C++ Runtime-Time-Information */
   47729             :           virtual RTIReturnType roseRTI() override;
   47730             : #endif
   47731             :       /* */
   47732             : 
   47733             : 
   47734             : 
   47735             :       /* name Deprecated Functions
   47736             :           \brief Deprecated functions ... incomplete-documentation
   47737             : 
   47738             :           These functions have been deprecated from use.
   47739             :        */
   47740             :       /* */
   47741             : 
   47742             :       /*! returns a C style string (char*) representing the class name */
   47743             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   47744             : 
   47745             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   47746             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   47747             : #if 0
   47748             :       /*! returns old style Sage II enum values */
   47749             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   47750             :       /*! returns old style Sage II enum values */
   47751             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   47752             : #endif
   47753             :       /* */
   47754             : 
   47755             : 
   47756             : 
   47757             : 
   47758             :      public:
   47759             :       /* name Traversal Support Functions
   47760             :           \brief Traversal support functions ... incomplete-documentation
   47761             : 
   47762             :           These functions have been made public as part of the design, but they are suggested for internal use 
   47763             :           or by particularly knowledgable users for specialized tools or applications.
   47764             :        */
   47765             :       /* */
   47766             : 
   47767             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   47768             :        // (inferior to ROSE traversal mechanism, experimental).
   47769             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   47770             :        */
   47771             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   47772             : 
   47773             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   47774             :       /*! \brief support for the classic visitor pattern done in GoF */
   47775             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   47776             : 
   47777             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   47778             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   47779             :        */
   47780             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   47781             : 
   47782             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   47783             :        */
   47784             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   47785             : 
   47786             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   47787             :        // This traversal helps support internal tools that call static member functions.
   47788             :        // note: this function operates on the memory pools.
   47789             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   47790             :        */
   47791             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   47792             :       /* */
   47793             : 
   47794             : 
   47795             :      public:
   47796             :       /* name Memory Allocation Functions
   47797             :           \brief Memory allocations functions ... incomplete-documentation
   47798             : 
   47799             :           These functions have been made public as part of the design, but they are suggested for internal use 
   47800             :           or by particularly knowledgable users for specialized tools or applications.
   47801             :        */
   47802             :       /* */
   47803             : 
   47804             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   47805             : 
   47806             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   47807             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   47808             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   47809             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   47810             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   47811             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   47812             :           being used with the AST File I/O mechanism.
   47813             :        */
   47814             :           virtual bool isInMemoryPool() override;
   47815             : 
   47816             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   47817             : 
   47818             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   47819             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   47820             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   47821             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   47822             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   47823             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   47824             :           being used with the AST File I/O mechanism.
   47825             :        */
   47826             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   47827             : 
   47828             :       // DQ (4/30/2006): Modified to be a const function.
   47829             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   47830             : 
   47831             :           This functions is part of general support for many possible tools to operate 
   47832             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   47833             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   47834             :           less than the set of pointers used by the AST file I/O. This is part of
   47835             :           work implemented by Andreas, and support tools such as the AST graph generation.
   47836             : 
   47837             :           \warning This function can return unexpected data members and thus the 
   47838             :                    order and the number of elements is unpredicable and subject 
   47839             :                    to change.
   47840             : 
   47841             :           \returns STL vector of pairs of SgNode* and strings
   47842             :        */
   47843             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   47844             : 
   47845             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   47846             : 
   47847             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   47848             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   47849             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   47850             : 
   47851             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   47852             :                    and subject to change.
   47853             :        */
   47854             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   47855             : 
   47856             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   47857             : 
   47858             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   47859             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   47860             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   47861             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   47862             : 
   47863             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   47864             : 
   47865             :           \returns long
   47866             :        */
   47867             :           virtual long getChildIndex( SgNode* childNode ) const override;
   47868             : 
   47869             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   47870             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   47871             :       /* \brief Constructor for use by AST File I/O Mechanism
   47872             : 
   47873             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   47874             :           which obtained via fast binary file I/O from disk.
   47875             :        */
   47876             :        // SgTypeSignedShort( SgTypeSignedShortStorageClass& source );
   47877             : 
   47878             : 
   47879             : 
   47880             : 
   47881             : 
   47882             :  // JH (10/24/2005): methods added to support the ast file IO
   47883             :     private:
   47884             : 
   47885             :       /* name AST Memory Allocation Support Functions
   47886             :           \brief Memory allocations support....
   47887             : 
   47888             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   47889             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   47890             :           and support the AST File I/O Mechanism.
   47891             :        */
   47892             :       /* */
   47893             : 
   47894             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   47895             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   47896             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   47897             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   47898             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   47899             :           a correspinding one in the AST_FILE_IO class!
   47900             :        */
   47901             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   47902             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   47903             :       /* \brief Typedef used for low level memory access.
   47904             :        */
   47905             :        // typedef unsigned char* TestType;
   47906             : 
   47907             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   47908             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   47909             :       /* \brief Typedef used to hold memory addresses as values.
   47910             :        */
   47911             :        // typedef unsigned long  AddressType;
   47912             : 
   47913             : 
   47914             : 
   47915             :        // necessary, to have direct access to the p_freepointer and the private methods !
   47916             :       /*! \brief friend class declaration to support AST File I/O */
   47917             :           friend class AST_FILE_IO;
   47918             : 
   47919             :       /*! \brief friend class declaration to support AST File I/O */
   47920             :           friend class SgTypeSignedShortStorageClass;
   47921             : 
   47922             :       /*! \brief friend class declaration to support AST File I/O */
   47923             :           friend class AstSpecificDataManagingClass;
   47924             : 
   47925             :       /*! \brief friend class declaration to support AST File I/O */
   47926             :           friend class AstSpecificDataManagingClassStorageClass;
   47927             :     public:
   47928             :       /*! \brief IR node constructor to support AST File I/O */
   47929             :           SgTypeSignedShort( const SgTypeSignedShortStorageClass& source );
   47930             : 
   47931             :  // private: // JJW hack
   47932             :        /*
   47933             :           name AST Memory Allocation Support Variables
   47934             :           Memory allocations support variables 
   47935             : 
   47936             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   47937             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   47938             :           and support the AST File I/O Mechanism.
   47939             :        */
   47940             :       /* */
   47941             : 
   47942             :     public:
   47943             : 
   47944             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   47945             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   47946             :       // virtual SgNode* addRegExpAttribute();
   47947             :       /*! \brief Support for AST matching using regular expression.
   47948             : 
   47949             :           This support is incomplete and the subject of current research to define 
   47950             :           RegEx trees to support inexact matching.
   47951             :        */
   47952             :           SgTypeSignedShort* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   47953             : 
   47954             : // *** COMMON CODE SECTION ENDS HERE ***
   47955             : 
   47956             : 
   47957             : // End of memberFunctionString
   47958             : // Start of memberFunctionString
   47959             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   47960             : 
   47961             :      // the generated cast function
   47962             :      // friend ROSE_DLL_API SgTypeSignedShort* isSgTypeSignedShort ( SgNode* s );
   47963             : 
   47964             :           typedef SgType base_node_type;
   47965             : 
   47966             : 
   47967             : // End of memberFunctionString
   47968             : // Start of memberFunctionString
   47969             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   47970             : 
   47971             :        // SgName get_mangled ( SgUnparse_Info & info );
   47972             : 
   47973             :       //! Mangled name support for unparser support
   47974             :        // SgName get_mangled ( SgUnparse_Info & info );
   47975             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   47976             :           virtual SgName get_mangled (void) const override;
   47977             : 
   47978             : 
   47979             : 
   47980             : // End of memberFunctionString
   47981             : // Start of memberFunctionString
   47982             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   47983             : 
   47984             :       //! example of type used where construction is particularly simple
   47985             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   47986             :        // static SgTypeSignedShort builtin_type;
   47987             :        // static SgTypeSignedShort* builtin_type;
   47988             : 
   47989             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   47990             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   47991             :        // own data member and associated access function.
   47992             :        // static SgTypeSignedShort* get_builtin_type();
   47993             : 
   47994             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   47995             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   47996             :        // own data member and associated access function.
   47997             :        // static void set_builtin_type(SgTypeSignedShort* builtin_type);
   47998             : 
   47999             :       //! function returns example of type
   48000             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   48001             :        // static SgTypeSignedShort* createType(void);
   48002             :           static SgTypeSignedShort* createType(SgExpression* optional_fortran_type_kind = NULL);
   48003             : 
   48004             : 
   48005             : // End of memberFunctionString
   48006             : 
   48007             : 
   48008             : 
   48009             :      public: 
   48010             :          virtual ~SgTypeSignedShort();
   48011             : 
   48012             : 
   48013             :      public: 
   48014             :          SgTypeSignedShort(); 
   48015             : 
   48016             :     protected:
   48017             : // Start of memberFunctionString
   48018             : static SgTypeSignedShort* p_builtin_type;
   48019             :           
   48020             : // End of memberFunctionString
   48021             : 
   48022             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeSignedShort>;
   48023             : 
   48024             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48025             : 
   48026             : 
   48027             :    };
   48028             : #endif
   48029             : 
   48030             : // postdeclarations for SgTypeSignedShort
   48031             : 
   48032             : /* #line 48033 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48033             : 
   48034             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   48035             : 
   48036             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48037             : 
   48038             : 
   48039             : /* #line 48040 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48040             : 
   48041             : 
   48042             : 
   48043             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48044             : 
   48045             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   48046             : //      This code is automatically generated for each 
   48047             : //      terminal and non-terminal within the defined 
   48048             : //      grammar.  There is a simple way to change the 
   48049             : //      code to fix bugs etc.  See the ROSE README file
   48050             : //      for directions.
   48051             : 
   48052             : // tps: (02/22/2010): Adding DLL export requirements
   48053             : #include "rosedll.h"
   48054             : 
   48055             : // predeclarations for SgTypeUnsignedShort
   48056             : 
   48057             : /* #line 48058 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48058             : 
   48059             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   48060             : 
   48061             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48062             : 
   48063             : #if 1
   48064             : // Class Definition for SgTypeUnsignedShort
   48065             : class ROSE_DLL_API SgTypeUnsignedShort  : public SgType
   48066             :    {
   48067             :      public:
   48068             : 
   48069             : 
   48070             : /* #line 48071 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48071             : 
   48072             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   48073             : // Start of memberFunctionString
   48074             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   48075             : 
   48076             : // *** COMMON CODE SECTION BEGINS HERE ***
   48077             : 
   48078             :     public:
   48079             : 
   48080             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   48081             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   48082             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   48083             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   48084             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   48085             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   48086             : 
   48087             :       /*! \brief returns a string representing the class name */
   48088             :           virtual std::string class_name() const override;
   48089             : 
   48090             :       /*! \brief returns new style SageIII enum values */
   48091             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   48092             : 
   48093             :       /*! \brief static variant value */
   48094             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   48095             :        // static const VariantT static_variant = V_SgTypeUnsignedShort;
   48096             :           enum { static_variant = V_SgTypeUnsignedShort };
   48097             : 
   48098             :        /* the generated cast function */
   48099             :       /*! \brief Casts pointer from base class to derived class */
   48100             :           ROSE_DLL_API friend       SgTypeUnsignedShort* isSgTypeUnsignedShort(       SgNode * s );
   48101             : 
   48102             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   48103             :           ROSE_DLL_API friend const SgTypeUnsignedShort* isSgTypeUnsignedShort( const SgNode * s );
   48104             : 
   48105             :      // ******************************************
   48106             :      // * Memory Pool / New / Delete
   48107             :      // ******************************************
   48108             : 
   48109             :      public:
   48110             :           /// \private
   48111             :           static const unsigned pool_size; //
   48112             :           /// \private
   48113             :           static std::vector<unsigned char *> pools; //
   48114             :           /// \private
   48115             :           static SgTypeUnsignedShort * next_node; // 
   48116             : 
   48117             :           /// \private
   48118             :           static unsigned long initializeStorageClassArray(SgTypeUnsignedShortStorageClass *); //
   48119             : 
   48120             :           /// \private
   48121             :           static void clearMemoryPool(); //
   48122             :           static void deleteMemoryPool(); //
   48123             : 
   48124             :           /// \private
   48125             :           static void extendMemoryPoolForFileIO(); //
   48126             : 
   48127             :           /// \private
   48128             :           static SgTypeUnsignedShort * getPointerFromGlobalIndex(unsigned long); //
   48129             :           /// \private
   48130             :           static SgTypeUnsignedShort * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   48131             : 
   48132             :           /// \private
   48133             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   48134             :           /// \private
   48135             :           static void resetValidFreepointers(); //
   48136             :           /// \private
   48137             :           static unsigned long getNumberOfLastValidPointer(); //
   48138             : 
   48139             : 
   48140             : #if defined(INLINE_FUNCTIONS)
   48141             :       /*! \brief returns pointer to newly allocated IR node */
   48142             :           inline void *operator new (size_t size);
   48143             : #else
   48144             :       /*! \brief returns pointer to newly allocated IR node */
   48145             :           void *operator new (size_t size);
   48146             : #endif
   48147             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   48148             :           void operator delete (void* pointer, size_t size);
   48149             : 
   48150             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   48151          11 :           void operator delete (void* pointer)
   48152             :              {
   48153             :             // This is the generated delete operator...
   48154          11 :                SgTypeUnsignedShort::operator delete (pointer,sizeof(SgTypeUnsignedShort));
   48155             :              }
   48156             : 
   48157             :       /*! \brief Returns the total number of IR nodes of this type */
   48158             :           static size_t numberOfNodes();
   48159             : 
   48160             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   48161             :           static size_t memoryUsage();
   48162             : 
   48163             :       // End of scope which started in IR nodes specific code 
   48164             :       /* */
   48165             : 
   48166             :       /* name Internal Functions
   48167             :           \brief Internal functions ... incomplete-documentation
   48168             : 
   48169             :           These functions have been made public as part of the design, but they are suggested for internal use 
   48170             :           or by particularly knowledgeable users for specialized tools or applications.
   48171             : 
   48172             :           \internal We could not make these private because they are required by user for special purposes. And 
   48173             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   48174             :          
   48175             :        */
   48176             : 
   48177             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   48178             :        // overridden in every class by *generated* implementation
   48179             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   48180             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   48181             :        // MS: 06/28/02 container of names of variables or container indices 
   48182             :        // used used in the traversal to access AST successor nodes
   48183             :        // overridden in every class by *generated* implementation
   48184             :       /*! \brief container of names of variables or container indices used used in the traversal
   48185             :           to access AST successor nodes overridden in every class by *generated* implementation */
   48186             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   48187             : 
   48188             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   48189             :        // than all the vector copies. The implementation for these functions is generated for each class.
   48190             :       /*! \brief return number of children in the traversal successor list */
   48191             :           virtual size_t get_numberOfTraversalSuccessors() override;
   48192             :       /*! \brief index-based access to traversal successors by index number */
   48193             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   48194             :       /*! \brief index-based access to traversal successors by child node */
   48195             :           virtual size_t get_childIndex(SgNode *child) override;
   48196             : 
   48197             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   48198             :        // MS: 08/16/2002 method for generating RTI information
   48199             :       /*! \brief return C++ Runtime-Time-Information */
   48200             :           virtual RTIReturnType roseRTI() override;
   48201             : #endif
   48202             :       /* */
   48203             : 
   48204             : 
   48205             : 
   48206             :       /* name Deprecated Functions
   48207             :           \brief Deprecated functions ... incomplete-documentation
   48208             : 
   48209             :           These functions have been deprecated from use.
   48210             :        */
   48211             :       /* */
   48212             : 
   48213             :       /*! returns a C style string (char*) representing the class name */
   48214             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   48215             : 
   48216             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   48217             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   48218             : #if 0
   48219             :       /*! returns old style Sage II enum values */
   48220             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   48221             :       /*! returns old style Sage II enum values */
   48222             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   48223             : #endif
   48224             :       /* */
   48225             : 
   48226             : 
   48227             : 
   48228             : 
   48229             :      public:
   48230             :       /* name Traversal Support Functions
   48231             :           \brief Traversal support functions ... incomplete-documentation
   48232             : 
   48233             :           These functions have been made public as part of the design, but they are suggested for internal use 
   48234             :           or by particularly knowledgable users for specialized tools or applications.
   48235             :        */
   48236             :       /* */
   48237             : 
   48238             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   48239             :        // (inferior to ROSE traversal mechanism, experimental).
   48240             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   48241             :        */
   48242             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   48243             : 
   48244             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   48245             :       /*! \brief support for the classic visitor pattern done in GoF */
   48246             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   48247             : 
   48248             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   48249             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   48250             :        */
   48251             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   48252             : 
   48253             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   48254             :        */
   48255             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   48256             : 
   48257             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   48258             :        // This traversal helps support internal tools that call static member functions.
   48259             :        // note: this function operates on the memory pools.
   48260             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   48261             :        */
   48262             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   48263             :       /* */
   48264             : 
   48265             : 
   48266             :      public:
   48267             :       /* name Memory Allocation Functions
   48268             :           \brief Memory allocations functions ... incomplete-documentation
   48269             : 
   48270             :           These functions have been made public as part of the design, but they are suggested for internal use 
   48271             :           or by particularly knowledgable users for specialized tools or applications.
   48272             :        */
   48273             :       /* */
   48274             : 
   48275             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   48276             : 
   48277             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   48278             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   48279             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   48280             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   48281             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   48282             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   48283             :           being used with the AST File I/O mechanism.
   48284             :        */
   48285             :           virtual bool isInMemoryPool() override;
   48286             : 
   48287             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   48288             : 
   48289             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   48290             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   48291             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   48292             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   48293             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   48294             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   48295             :           being used with the AST File I/O mechanism.
   48296             :        */
   48297             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   48298             : 
   48299             :       // DQ (4/30/2006): Modified to be a const function.
   48300             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   48301             : 
   48302             :           This functions is part of general support for many possible tools to operate 
   48303             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   48304             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   48305             :           less than the set of pointers used by the AST file I/O. This is part of
   48306             :           work implemented by Andreas, and support tools such as the AST graph generation.
   48307             : 
   48308             :           \warning This function can return unexpected data members and thus the 
   48309             :                    order and the number of elements is unpredicable and subject 
   48310             :                    to change.
   48311             : 
   48312             :           \returns STL vector of pairs of SgNode* and strings
   48313             :        */
   48314             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   48315             : 
   48316             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   48317             : 
   48318             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   48319             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   48320             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   48321             : 
   48322             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   48323             :                    and subject to change.
   48324             :        */
   48325             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   48326             : 
   48327             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   48328             : 
   48329             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   48330             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   48331             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   48332             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   48333             : 
   48334             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   48335             : 
   48336             :           \returns long
   48337             :        */
   48338             :           virtual long getChildIndex( SgNode* childNode ) const override;
   48339             : 
   48340             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   48341             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   48342             :       /* \brief Constructor for use by AST File I/O Mechanism
   48343             : 
   48344             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   48345             :           which obtained via fast binary file I/O from disk.
   48346             :        */
   48347             :        // SgTypeUnsignedShort( SgTypeUnsignedShortStorageClass& source );
   48348             : 
   48349             : 
   48350             : 
   48351             : 
   48352             : 
   48353             :  // JH (10/24/2005): methods added to support the ast file IO
   48354             :     private:
   48355             : 
   48356             :       /* name AST Memory Allocation Support Functions
   48357             :           \brief Memory allocations support....
   48358             : 
   48359             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   48360             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   48361             :           and support the AST File I/O Mechanism.
   48362             :        */
   48363             :       /* */
   48364             : 
   48365             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   48366             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   48367             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   48368             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   48369             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   48370             :           a correspinding one in the AST_FILE_IO class!
   48371             :        */
   48372             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   48373             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   48374             :       /* \brief Typedef used for low level memory access.
   48375             :        */
   48376             :        // typedef unsigned char* TestType;
   48377             : 
   48378             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   48379             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   48380             :       /* \brief Typedef used to hold memory addresses as values.
   48381             :        */
   48382             :        // typedef unsigned long  AddressType;
   48383             : 
   48384             : 
   48385             : 
   48386             :        // necessary, to have direct access to the p_freepointer and the private methods !
   48387             :       /*! \brief friend class declaration to support AST File I/O */
   48388             :           friend class AST_FILE_IO;
   48389             : 
   48390             :       /*! \brief friend class declaration to support AST File I/O */
   48391             :           friend class SgTypeUnsignedShortStorageClass;
   48392             : 
   48393             :       /*! \brief friend class declaration to support AST File I/O */
   48394             :           friend class AstSpecificDataManagingClass;
   48395             : 
   48396             :       /*! \brief friend class declaration to support AST File I/O */
   48397             :           friend class AstSpecificDataManagingClassStorageClass;
   48398             :     public:
   48399             :       /*! \brief IR node constructor to support AST File I/O */
   48400             :           SgTypeUnsignedShort( const SgTypeUnsignedShortStorageClass& source );
   48401             : 
   48402             :  // private: // JJW hack
   48403             :        /*
   48404             :           name AST Memory Allocation Support Variables
   48405             :           Memory allocations support variables 
   48406             : 
   48407             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   48408             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   48409             :           and support the AST File I/O Mechanism.
   48410             :        */
   48411             :       /* */
   48412             : 
   48413             :     public:
   48414             : 
   48415             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   48416             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   48417             :       // virtual SgNode* addRegExpAttribute();
   48418             :       /*! \brief Support for AST matching using regular expression.
   48419             : 
   48420             :           This support is incomplete and the subject of current research to define 
   48421             :           RegEx trees to support inexact matching.
   48422             :        */
   48423             :           SgTypeUnsignedShort* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   48424             : 
   48425             : // *** COMMON CODE SECTION ENDS HERE ***
   48426             : 
   48427             : 
   48428             : // End of memberFunctionString
   48429             : // Start of memberFunctionString
   48430             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   48431             : 
   48432             :      // the generated cast function
   48433             :      // friend ROSE_DLL_API SgTypeUnsignedShort* isSgTypeUnsignedShort ( SgNode* s );
   48434             : 
   48435             :           typedef SgType base_node_type;
   48436             : 
   48437             : 
   48438             : // End of memberFunctionString
   48439             : // Start of memberFunctionString
   48440             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   48441             : 
   48442             :        // SgName get_mangled ( SgUnparse_Info & info );
   48443             : 
   48444             :       //! Mangled name support for unparser support
   48445             :        // SgName get_mangled ( SgUnparse_Info & info );
   48446             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   48447             :           virtual SgName get_mangled (void) const override;
   48448             : 
   48449             : 
   48450             : 
   48451             : // End of memberFunctionString
   48452             : // Start of memberFunctionString
   48453             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   48454             : 
   48455             :       //! example of type used where construction is particularly simple
   48456             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   48457             :        // static SgTypeUnsignedShort builtin_type;
   48458             :        // static SgTypeUnsignedShort* builtin_type;
   48459             : 
   48460             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   48461             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   48462             :        // own data member and associated access function.
   48463             :        // static SgTypeUnsignedShort* get_builtin_type();
   48464             : 
   48465             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   48466             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   48467             :        // own data member and associated access function.
   48468             :        // static void set_builtin_type(SgTypeUnsignedShort* builtin_type);
   48469             : 
   48470             :       //! function returns example of type
   48471             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   48472             :        // static SgTypeUnsignedShort* createType(void);
   48473             :           static SgTypeUnsignedShort* createType(SgExpression* optional_fortran_type_kind = NULL);
   48474             : 
   48475             : 
   48476             : // End of memberFunctionString
   48477             : 
   48478             : 
   48479             : 
   48480             :      public: 
   48481             :          virtual ~SgTypeUnsignedShort();
   48482             : 
   48483             : 
   48484             :      public: 
   48485             :          SgTypeUnsignedShort(); 
   48486             : 
   48487             :     protected:
   48488             : // Start of memberFunctionString
   48489             : static SgTypeUnsignedShort* p_builtin_type;
   48490             :           
   48491             : // End of memberFunctionString
   48492             : 
   48493             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeUnsignedShort>;
   48494             : 
   48495             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48496             : 
   48497             : 
   48498             :    };
   48499             : #endif
   48500             : 
   48501             : // postdeclarations for SgTypeUnsignedShort
   48502             : 
   48503             : /* #line 48504 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48504             : 
   48505             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   48506             : 
   48507             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48508             : 
   48509             : 
   48510             : /* #line 48511 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48511             : 
   48512             : 
   48513             : 
   48514             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48515             : 
   48516             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   48517             : //      This code is automatically generated for each 
   48518             : //      terminal and non-terminal within the defined 
   48519             : //      grammar.  There is a simple way to change the 
   48520             : //      code to fix bugs etc.  See the ROSE README file
   48521             : //      for directions.
   48522             : 
   48523             : // tps: (02/22/2010): Adding DLL export requirements
   48524             : #include "rosedll.h"
   48525             : 
   48526             : // predeclarations for SgTypeInt
   48527             : 
   48528             : /* #line 48529 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48529             : 
   48530             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   48531             : 
   48532             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48533             : 
   48534             : #if 1
   48535             : // Class Definition for SgTypeInt
   48536             : class ROSE_DLL_API SgTypeInt  : public SgType
   48537             :    {
   48538             :      public:
   48539             : 
   48540             : 
   48541             : /* #line 48542 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   48542             : 
   48543             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   48544             : // Start of memberFunctionString
   48545             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   48546             : 
   48547             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   48548             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   48549             :        // own data member and associated access function.
   48550             :        // static SgTypeInt* get_builtin_type();
   48551             : 
   48552             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   48553             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   48554             :        // own data member and associated access function.
   48555             :        // static void set_builtin_type(SgTypeInt* builtin_type);
   48556             : 
   48557             :       //! more sophisticated version for more complex types like SgTypeInt (types whose constructors take parameters)
   48558             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   48559             :        // static SgTypeInt* createType(int sz = 0);
   48560             :           static SgTypeInt* createType(int sz = 0, SgExpression* optional_fortran_type_kind = NULL);
   48561             : 
   48562             : 
   48563             : // End of memberFunctionString
   48564             : // Start of memberFunctionString
   48565             : /* #line 308 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   48566             : 
   48567             :        // static SgTypeInt* get_builtin_type();
   48568             :        // static void set_builtin_type(SgTypeInt* builtin_type);
   48569             : 
   48570             :        //! builtin_type variable specific to the SgArrayType object (for maxBitLength=32 bit integers)
   48571             :        // Could not use maxBitLength in array size below (so I just used the #define value directly).
   48572             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   48573             :        // static SgTypeInt builtin_type[ROSE_INTEGER_TYPE_MAX_BIT_LENGTH];
   48574             :        // static SgTypeInt* builtin_type[ROSE_INTEGER_TYPE_MAX_BIT_LENGTH];
   48575             : 
   48576             : 
   48577             : // End of memberFunctionString
   48578             : // Start of memberFunctionString
   48579             : /* #line 896 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   48580             : 
   48581             :        // DQ (12/26/2005): C++ allows initialization in-class of static const, but it is not very portable yet.
   48582             :        // static const int maxBitLength = ROSE_INTEGER_TYPE_MAX_BIT_LENGTH;
   48583             :           static const int maxBitLength; // = ROSE_INTEGER_TYPE_MAX_BIT_LENGTH;
   48584             : 
   48585             :        // DQ (12/26/2005): Supporting function for traverseMemoryPool
   48586             :        // where static IR nodes (only isn soem SgType IR nodes) are
   48587             :        // present and must be traversed using specially generated code.
   48588             :        // virtual void executeVisitorMemberFunctionOnBuiltinData(ROSE_Visitor & visitor);
   48589             : 
   48590             : 
   48591             : // End of memberFunctionString
   48592             : // Start of memberFunctionString
   48593             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   48594             : 
   48595             : // *** COMMON CODE SECTION BEGINS HERE ***
   48596             : 
   48597             :     public:
   48598             : 
   48599             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   48600             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   48601             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   48602             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   48603             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   48604             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   48605             : 
   48606             :       /*! \brief returns a string representing the class name */
   48607             :           virtual std::string class_name() const override;
   48608             : 
   48609             :       /*! \brief returns new style SageIII enum values */
   48610             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   48611             : 
   48612             :       /*! \brief static variant value */
   48613             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   48614             :        // static const VariantT static_variant = V_SgTypeInt;
   48615             :           enum { static_variant = V_SgTypeInt };
   48616             : 
   48617             :        /* the generated cast function */
   48618             :       /*! \brief Casts pointer from base class to derived class */
   48619             :           ROSE_DLL_API friend       SgTypeInt* isSgTypeInt(       SgNode * s );
   48620             : 
   48621             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   48622             :           ROSE_DLL_API friend const SgTypeInt* isSgTypeInt( const SgNode * s );
   48623             : 
   48624             :      // ******************************************
   48625             :      // * Memory Pool / New / Delete
   48626             :      // ******************************************
   48627             : 
   48628             :      public:
   48629             :           /// \private
   48630             :           static const unsigned pool_size; //
   48631             :           /// \private
   48632             :           static std::vector<unsigned char *> pools; //
   48633             :           /// \private
   48634             :           static SgTypeInt * next_node; // 
   48635             : 
   48636             :           /// \private
   48637             :           static unsigned long initializeStorageClassArray(SgTypeIntStorageClass *); //
   48638             : 
   48639             :           /// \private
   48640             :           static void clearMemoryPool(); //
   48641             :           static void deleteMemoryPool(); //
   48642             : 
   48643             :           /// \private
   48644             :           static void extendMemoryPoolForFileIO(); //
   48645             : 
   48646             :           /// \private
   48647             :           static SgTypeInt * getPointerFromGlobalIndex(unsigned long); //
   48648             :           /// \private
   48649             :           static SgTypeInt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   48650             : 
   48651             :           /// \private
   48652             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   48653             :           /// \private
   48654             :           static void resetValidFreepointers(); //
   48655             :           /// \private
   48656             :           static unsigned long getNumberOfLastValidPointer(); //
   48657             : 
   48658             : 
   48659             : #if defined(INLINE_FUNCTIONS)
   48660             :       /*! \brief returns pointer to newly allocated IR node */
   48661             :           inline void *operator new (size_t size);
   48662             : #else
   48663             :       /*! \brief returns pointer to newly allocated IR node */
   48664             :           void *operator new (size_t size);
   48665             : #endif
   48666             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   48667             :           void operator delete (void* pointer, size_t size);
   48668             : 
   48669             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   48670       17554 :           void operator delete (void* pointer)
   48671             :              {
   48672             :             // This is the generated delete operator...
   48673       17554 :                SgTypeInt::operator delete (pointer,sizeof(SgTypeInt));
   48674             :              }
   48675             : 
   48676             :       /*! \brief Returns the total number of IR nodes of this type */
   48677             :           static size_t numberOfNodes();
   48678             : 
   48679             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   48680             :           static size_t memoryUsage();
   48681             : 
   48682             :       // End of scope which started in IR nodes specific code 
   48683             :       /* */
   48684             : 
   48685             :       /* name Internal Functions
   48686             :           \brief Internal functions ... incomplete-documentation
   48687             : 
   48688             :           These functions have been made public as part of the design, but they are suggested for internal use 
   48689             :           or by particularly knowledgeable users for specialized tools or applications.
   48690             : 
   48691             :           \internal We could not make these private because they are required by user for special purposes. And 
   48692             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   48693             :          
   48694             :        */
   48695             : 
   48696             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   48697             :        // overridden in every class by *generated* implementation
   48698             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   48699             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   48700             :        // MS: 06/28/02 container of names of variables or container indices 
   48701             :        // used used in the traversal to access AST successor nodes
   48702             :        // overridden in every class by *generated* implementation
   48703             :       /*! \brief container of names of variables or container indices used used in the traversal
   48704             :           to access AST successor nodes overridden in every class by *generated* implementation */
   48705             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   48706             : 
   48707             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   48708             :        // than all the vector copies. The implementation for these functions is generated for each class.
   48709             :       /*! \brief return number of children in the traversal successor list */
   48710             :           virtual size_t get_numberOfTraversalSuccessors() override;
   48711             :       /*! \brief index-based access to traversal successors by index number */
   48712             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   48713             :       /*! \brief index-based access to traversal successors by child node */
   48714             :           virtual size_t get_childIndex(SgNode *child) override;
   48715             : 
   48716             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   48717             :        // MS: 08/16/2002 method for generating RTI information
   48718             :       /*! \brief return C++ Runtime-Time-Information */
   48719             :           virtual RTIReturnType roseRTI() override;
   48720             : #endif
   48721             :       /* */
   48722             : 
   48723             : 
   48724             : 
   48725             :       /* name Deprecated Functions
   48726             :           \brief Deprecated functions ... incomplete-documentation
   48727             : 
   48728             :           These functions have been deprecated from use.
   48729             :        */
   48730             :       /* */
   48731             : 
   48732             :       /*! returns a C style string (char*) representing the class name */
   48733             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   48734             : 
   48735             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   48736             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   48737             : #if 0
   48738             :       /*! returns old style Sage II enum values */
   48739             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   48740             :       /*! returns old style Sage II enum values */
   48741             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   48742             : #endif
   48743             :       /* */
   48744             : 
   48745             : 
   48746             : 
   48747             : 
   48748             :      public:
   48749             :       /* name Traversal Support Functions
   48750             :           \brief Traversal support functions ... incomplete-documentation
   48751             : 
   48752             :           These functions have been made public as part of the design, but they are suggested for internal use 
   48753             :           or by particularly knowledgable users for specialized tools or applications.
   48754             :        */
   48755             :       /* */
   48756             : 
   48757             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   48758             :        // (inferior to ROSE traversal mechanism, experimental).
   48759             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   48760             :        */
   48761             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   48762             : 
   48763             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   48764             :       /*! \brief support for the classic visitor pattern done in GoF */
   48765             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   48766             : 
   48767             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   48768             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   48769             :        */
   48770             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   48771             : 
   48772             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   48773             :        */
   48774             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   48775             : 
   48776             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   48777             :        // This traversal helps support internal tools that call static member functions.
   48778             :        // note: this function operates on the memory pools.
   48779             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   48780             :        */
   48781             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   48782             :       /* */
   48783             : 
   48784             : 
   48785             :      public:
   48786             :       /* name Memory Allocation Functions
   48787             :           \brief Memory allocations functions ... incomplete-documentation
   48788             : 
   48789             :           These functions have been made public as part of the design, but they are suggested for internal use 
   48790             :           or by particularly knowledgable users for specialized tools or applications.
   48791             :        */
   48792             :       /* */
   48793             : 
   48794             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   48795             : 
   48796             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   48797             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   48798             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   48799             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   48800             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   48801             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   48802             :           being used with the AST File I/O mechanism.
   48803             :        */
   48804             :           virtual bool isInMemoryPool() override;
   48805             : 
   48806             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   48807             : 
   48808             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   48809             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   48810             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   48811             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   48812             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   48813             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   48814             :           being used with the AST File I/O mechanism.
   48815             :        */
   48816             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   48817             : 
   48818             :       // DQ (4/30/2006): Modified to be a const function.
   48819             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   48820             : 
   48821             :           This functions is part of general support for many possible tools to operate 
   48822             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   48823             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   48824             :           less than the set of pointers used by the AST file I/O. This is part of
   48825             :           work implemented by Andreas, and support tools such as the AST graph generation.
   48826             : 
   48827             :           \warning This function can return unexpected data members and thus the 
   48828             :                    order and the number of elements is unpredicable and subject 
   48829             :                    to change.
   48830             : 
   48831             :           \returns STL vector of pairs of SgNode* and strings
   48832             :        */
   48833             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   48834             : 
   48835             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   48836             : 
   48837             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   48838             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   48839             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   48840             : 
   48841             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   48842             :                    and subject to change.
   48843             :        */
   48844             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   48845             : 
   48846             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   48847             : 
   48848             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   48849             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   48850             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   48851             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   48852             : 
   48853             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   48854             : 
   48855             :           \returns long
   48856             :        */
   48857             :           virtual long getChildIndex( SgNode* childNode ) const override;
   48858             : 
   48859             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   48860             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   48861             :       /* \brief Constructor for use by AST File I/O Mechanism
   48862             : 
   48863             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   48864             :           which obtained via fast binary file I/O from disk.
   48865             :        */
   48866             :        // SgTypeInt( SgTypeIntStorageClass& source );
   48867             : 
   48868             : 
   48869             : 
   48870             : 
   48871             : 
   48872             :  // JH (10/24/2005): methods added to support the ast file IO
   48873             :     private:
   48874             : 
   48875             :       /* name AST Memory Allocation Support Functions
   48876             :           \brief Memory allocations support....
   48877             : 
   48878             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   48879             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   48880             :           and support the AST File I/O Mechanism.
   48881             :        */
   48882             :       /* */
   48883             : 
   48884             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   48885             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   48886             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   48887             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   48888             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   48889             :           a correspinding one in the AST_FILE_IO class!
   48890             :        */
   48891             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   48892             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   48893             :       /* \brief Typedef used for low level memory access.
   48894             :        */
   48895             :        // typedef unsigned char* TestType;
   48896             : 
   48897             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   48898             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   48899             :       /* \brief Typedef used to hold memory addresses as values.
   48900             :        */
   48901             :        // typedef unsigned long  AddressType;
   48902             : 
   48903             : 
   48904             : 
   48905             :        // necessary, to have direct access to the p_freepointer and the private methods !
   48906             :       /*! \brief friend class declaration to support AST File I/O */
   48907             :           friend class AST_FILE_IO;
   48908             : 
   48909             :       /*! \brief friend class declaration to support AST File I/O */
   48910             :           friend class SgTypeIntStorageClass;
   48911             : 
   48912             :       /*! \brief friend class declaration to support AST File I/O */
   48913             :           friend class AstSpecificDataManagingClass;
   48914             : 
   48915             :       /*! \brief friend class declaration to support AST File I/O */
   48916             :           friend class AstSpecificDataManagingClassStorageClass;
   48917             :     public:
   48918             :       /*! \brief IR node constructor to support AST File I/O */
   48919             :           SgTypeInt( const SgTypeIntStorageClass& source );
   48920             : 
   48921             :  // private: // JJW hack
   48922             :        /*
   48923             :           name AST Memory Allocation Support Variables
   48924             :           Memory allocations support variables 
   48925             : 
   48926             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   48927             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   48928             :           and support the AST File I/O Mechanism.
   48929             :        */
   48930             :       /* */
   48931             : 
   48932             :     public:
   48933             : 
   48934             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   48935             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   48936             :       // virtual SgNode* addRegExpAttribute();
   48937             :       /*! \brief Support for AST matching using regular expression.
   48938             : 
   48939             :           This support is incomplete and the subject of current research to define 
   48940             :           RegEx trees to support inexact matching.
   48941             :        */
   48942             :           SgTypeInt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   48943             : 
   48944             : // *** COMMON CODE SECTION ENDS HERE ***
   48945             : 
   48946             : 
   48947             : // End of memberFunctionString
   48948             : // Start of memberFunctionString
   48949             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   48950             : 
   48951             :      // the generated cast function
   48952             :      // friend ROSE_DLL_API SgTypeInt* isSgTypeInt ( SgNode* s );
   48953             : 
   48954             :           typedef SgType base_node_type;
   48955             : 
   48956             : 
   48957             : // End of memberFunctionString
   48958             : // Start of memberFunctionString
   48959             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   48960             : 
   48961             :        // SgName get_mangled ( SgUnparse_Info & info );
   48962             : 
   48963             :       //! Mangled name support for unparser support
   48964             :        // SgName get_mangled ( SgUnparse_Info & info );
   48965             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   48966             :           virtual SgName get_mangled (void) const override;
   48967             : 
   48968             : 
   48969             : 
   48970             : // End of memberFunctionString
   48971             : 
   48972             : 
   48973             :      public: 
   48974             :          int get_field_size() const;
   48975             :          void set_field_size(int field_size);
   48976             : 
   48977             : 
   48978             :      public: 
   48979             :          virtual ~SgTypeInt();
   48980             : 
   48981             : 
   48982             :      public: 
   48983             :          SgTypeInt(int field_size = 0); 
   48984             : 
   48985             :     protected:
   48986             : // Start of memberFunctionString
   48987             : static SgTypeInt* p_builtin_type;
   48988             :           
   48989             : // End of memberFunctionString
   48990             : // Start of memberFunctionString
   48991             : int p_field_size;
   48992             :           
   48993             : // End of memberFunctionString
   48994             : 
   48995             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeInt>;
   48996             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeInt, int,&SgTypeInt::p_field_size>;
   48997             : 
   48998             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   48999             : 
   49000             : 
   49001             :    };
   49002             : #endif
   49003             : 
   49004             : // postdeclarations for SgTypeInt
   49005             : 
   49006             : /* #line 49007 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49007             : 
   49008             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   49009             : 
   49010             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49011             : 
   49012             : 
   49013             : /* #line 49014 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49014             : 
   49015             : 
   49016             : 
   49017             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49018             : 
   49019             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   49020             : //      This code is automatically generated for each 
   49021             : //      terminal and non-terminal within the defined 
   49022             : //      grammar.  There is a simple way to change the 
   49023             : //      code to fix bugs etc.  See the ROSE README file
   49024             : //      for directions.
   49025             : 
   49026             : // tps: (02/22/2010): Adding DLL export requirements
   49027             : #include "rosedll.h"
   49028             : 
   49029             : // predeclarations for SgTypeSignedInt
   49030             : 
   49031             : /* #line 49032 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49032             : 
   49033             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   49034             : 
   49035             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49036             : 
   49037             : #if 1
   49038             : // Class Definition for SgTypeSignedInt
   49039             : class ROSE_DLL_API SgTypeSignedInt  : public SgType
   49040             :    {
   49041             :      public:
   49042             : 
   49043             : 
   49044             : /* #line 49045 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49045             : 
   49046             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   49047             : // Start of memberFunctionString
   49048             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   49049             : 
   49050             : // *** COMMON CODE SECTION BEGINS HERE ***
   49051             : 
   49052             :     public:
   49053             : 
   49054             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   49055             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   49056             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   49057             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   49058             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   49059             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   49060             : 
   49061             :       /*! \brief returns a string representing the class name */
   49062             :           virtual std::string class_name() const override;
   49063             : 
   49064             :       /*! \brief returns new style SageIII enum values */
   49065             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   49066             : 
   49067             :       /*! \brief static variant value */
   49068             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   49069             :        // static const VariantT static_variant = V_SgTypeSignedInt;
   49070             :           enum { static_variant = V_SgTypeSignedInt };
   49071             : 
   49072             :        /* the generated cast function */
   49073             :       /*! \brief Casts pointer from base class to derived class */
   49074             :           ROSE_DLL_API friend       SgTypeSignedInt* isSgTypeSignedInt(       SgNode * s );
   49075             : 
   49076             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   49077             :           ROSE_DLL_API friend const SgTypeSignedInt* isSgTypeSignedInt( const SgNode * s );
   49078             : 
   49079             :      // ******************************************
   49080             :      // * Memory Pool / New / Delete
   49081             :      // ******************************************
   49082             : 
   49083             :      public:
   49084             :           /// \private
   49085             :           static const unsigned pool_size; //
   49086             :           /// \private
   49087             :           static std::vector<unsigned char *> pools; //
   49088             :           /// \private
   49089             :           static SgTypeSignedInt * next_node; // 
   49090             : 
   49091             :           /// \private
   49092             :           static unsigned long initializeStorageClassArray(SgTypeSignedIntStorageClass *); //
   49093             : 
   49094             :           /// \private
   49095             :           static void clearMemoryPool(); //
   49096             :           static void deleteMemoryPool(); //
   49097             : 
   49098             :           /// \private
   49099             :           static void extendMemoryPoolForFileIO(); //
   49100             : 
   49101             :           /// \private
   49102             :           static SgTypeSignedInt * getPointerFromGlobalIndex(unsigned long); //
   49103             :           /// \private
   49104             :           static SgTypeSignedInt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   49105             : 
   49106             :           /// \private
   49107             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   49108             :           /// \private
   49109             :           static void resetValidFreepointers(); //
   49110             :           /// \private
   49111             :           static unsigned long getNumberOfLastValidPointer(); //
   49112             : 
   49113             : 
   49114             : #if defined(INLINE_FUNCTIONS)
   49115             :       /*! \brief returns pointer to newly allocated IR node */
   49116             :           inline void *operator new (size_t size);
   49117             : #else
   49118             :       /*! \brief returns pointer to newly allocated IR node */
   49119             :           void *operator new (size_t size);
   49120             : #endif
   49121             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   49122             :           void operator delete (void* pointer, size_t size);
   49123             : 
   49124             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   49125           4 :           void operator delete (void* pointer)
   49126             :              {
   49127             :             // This is the generated delete operator...
   49128           4 :                SgTypeSignedInt::operator delete (pointer,sizeof(SgTypeSignedInt));
   49129             :              }
   49130             : 
   49131             :       /*! \brief Returns the total number of IR nodes of this type */
   49132             :           static size_t numberOfNodes();
   49133             : 
   49134             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   49135             :           static size_t memoryUsage();
   49136             : 
   49137             :       // End of scope which started in IR nodes specific code 
   49138             :       /* */
   49139             : 
   49140             :       /* name Internal Functions
   49141             :           \brief Internal functions ... incomplete-documentation
   49142             : 
   49143             :           These functions have been made public as part of the design, but they are suggested for internal use 
   49144             :           or by particularly knowledgeable users for specialized tools or applications.
   49145             : 
   49146             :           \internal We could not make these private because they are required by user for special purposes. And 
   49147             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   49148             :          
   49149             :        */
   49150             : 
   49151             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   49152             :        // overridden in every class by *generated* implementation
   49153             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   49154             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   49155             :        // MS: 06/28/02 container of names of variables or container indices 
   49156             :        // used used in the traversal to access AST successor nodes
   49157             :        // overridden in every class by *generated* implementation
   49158             :       /*! \brief container of names of variables or container indices used used in the traversal
   49159             :           to access AST successor nodes overridden in every class by *generated* implementation */
   49160             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   49161             : 
   49162             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   49163             :        // than all the vector copies. The implementation for these functions is generated for each class.
   49164             :       /*! \brief return number of children in the traversal successor list */
   49165             :           virtual size_t get_numberOfTraversalSuccessors() override;
   49166             :       /*! \brief index-based access to traversal successors by index number */
   49167             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   49168             :       /*! \brief index-based access to traversal successors by child node */
   49169             :           virtual size_t get_childIndex(SgNode *child) override;
   49170             : 
   49171             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   49172             :        // MS: 08/16/2002 method for generating RTI information
   49173             :       /*! \brief return C++ Runtime-Time-Information */
   49174             :           virtual RTIReturnType roseRTI() override;
   49175             : #endif
   49176             :       /* */
   49177             : 
   49178             : 
   49179             : 
   49180             :       /* name Deprecated Functions
   49181             :           \brief Deprecated functions ... incomplete-documentation
   49182             : 
   49183             :           These functions have been deprecated from use.
   49184             :        */
   49185             :       /* */
   49186             : 
   49187             :       /*! returns a C style string (char*) representing the class name */
   49188             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   49189             : 
   49190             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   49191             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   49192             : #if 0
   49193             :       /*! returns old style Sage II enum values */
   49194             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   49195             :       /*! returns old style Sage II enum values */
   49196             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   49197             : #endif
   49198             :       /* */
   49199             : 
   49200             : 
   49201             : 
   49202             : 
   49203             :      public:
   49204             :       /* name Traversal Support Functions
   49205             :           \brief Traversal support functions ... incomplete-documentation
   49206             : 
   49207             :           These functions have been made public as part of the design, but they are suggested for internal use 
   49208             :           or by particularly knowledgable users for specialized tools or applications.
   49209             :        */
   49210             :       /* */
   49211             : 
   49212             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   49213             :        // (inferior to ROSE traversal mechanism, experimental).
   49214             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   49215             :        */
   49216             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   49217             : 
   49218             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   49219             :       /*! \brief support for the classic visitor pattern done in GoF */
   49220             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   49221             : 
   49222             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   49223             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   49224             :        */
   49225             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   49226             : 
   49227             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   49228             :        */
   49229             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   49230             : 
   49231             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   49232             :        // This traversal helps support internal tools that call static member functions.
   49233             :        // note: this function operates on the memory pools.
   49234             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   49235             :        */
   49236             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   49237             :       /* */
   49238             : 
   49239             : 
   49240             :      public:
   49241             :       /* name Memory Allocation Functions
   49242             :           \brief Memory allocations functions ... incomplete-documentation
   49243             : 
   49244             :           These functions have been made public as part of the design, but they are suggested for internal use 
   49245             :           or by particularly knowledgable users for specialized tools or applications.
   49246             :        */
   49247             :       /* */
   49248             : 
   49249             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   49250             : 
   49251             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   49252             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   49253             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   49254             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   49255             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   49256             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   49257             :           being used with the AST File I/O mechanism.
   49258             :        */
   49259             :           virtual bool isInMemoryPool() override;
   49260             : 
   49261             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   49262             : 
   49263             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   49264             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   49265             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   49266             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   49267             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   49268             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   49269             :           being used with the AST File I/O mechanism.
   49270             :        */
   49271             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   49272             : 
   49273             :       // DQ (4/30/2006): Modified to be a const function.
   49274             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   49275             : 
   49276             :           This functions is part of general support for many possible tools to operate 
   49277             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   49278             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   49279             :           less than the set of pointers used by the AST file I/O. This is part of
   49280             :           work implemented by Andreas, and support tools such as the AST graph generation.
   49281             : 
   49282             :           \warning This function can return unexpected data members and thus the 
   49283             :                    order and the number of elements is unpredicable and subject 
   49284             :                    to change.
   49285             : 
   49286             :           \returns STL vector of pairs of SgNode* and strings
   49287             :        */
   49288             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   49289             : 
   49290             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   49291             : 
   49292             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   49293             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   49294             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   49295             : 
   49296             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   49297             :                    and subject to change.
   49298             :        */
   49299             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   49300             : 
   49301             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   49302             : 
   49303             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   49304             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   49305             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   49306             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   49307             : 
   49308             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   49309             : 
   49310             :           \returns long
   49311             :        */
   49312             :           virtual long getChildIndex( SgNode* childNode ) const override;
   49313             : 
   49314             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   49315             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   49316             :       /* \brief Constructor for use by AST File I/O Mechanism
   49317             : 
   49318             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   49319             :           which obtained via fast binary file I/O from disk.
   49320             :        */
   49321             :        // SgTypeSignedInt( SgTypeSignedIntStorageClass& source );
   49322             : 
   49323             : 
   49324             : 
   49325             : 
   49326             : 
   49327             :  // JH (10/24/2005): methods added to support the ast file IO
   49328             :     private:
   49329             : 
   49330             :       /* name AST Memory Allocation Support Functions
   49331             :           \brief Memory allocations support....
   49332             : 
   49333             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   49334             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   49335             :           and support the AST File I/O Mechanism.
   49336             :        */
   49337             :       /* */
   49338             : 
   49339             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   49340             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   49341             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   49342             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   49343             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   49344             :           a correspinding one in the AST_FILE_IO class!
   49345             :        */
   49346             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   49347             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   49348             :       /* \brief Typedef used for low level memory access.
   49349             :        */
   49350             :        // typedef unsigned char* TestType;
   49351             : 
   49352             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   49353             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   49354             :       /* \brief Typedef used to hold memory addresses as values.
   49355             :        */
   49356             :        // typedef unsigned long  AddressType;
   49357             : 
   49358             : 
   49359             : 
   49360             :        // necessary, to have direct access to the p_freepointer and the private methods !
   49361             :       /*! \brief friend class declaration to support AST File I/O */
   49362             :           friend class AST_FILE_IO;
   49363             : 
   49364             :       /*! \brief friend class declaration to support AST File I/O */
   49365             :           friend class SgTypeSignedIntStorageClass;
   49366             : 
   49367             :       /*! \brief friend class declaration to support AST File I/O */
   49368             :           friend class AstSpecificDataManagingClass;
   49369             : 
   49370             :       /*! \brief friend class declaration to support AST File I/O */
   49371             :           friend class AstSpecificDataManagingClassStorageClass;
   49372             :     public:
   49373             :       /*! \brief IR node constructor to support AST File I/O */
   49374             :           SgTypeSignedInt( const SgTypeSignedIntStorageClass& source );
   49375             : 
   49376             :  // private: // JJW hack
   49377             :        /*
   49378             :           name AST Memory Allocation Support Variables
   49379             :           Memory allocations support variables 
   49380             : 
   49381             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   49382             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   49383             :           and support the AST File I/O Mechanism.
   49384             :        */
   49385             :       /* */
   49386             : 
   49387             :     public:
   49388             : 
   49389             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   49390             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   49391             :       // virtual SgNode* addRegExpAttribute();
   49392             :       /*! \brief Support for AST matching using regular expression.
   49393             : 
   49394             :           This support is incomplete and the subject of current research to define 
   49395             :           RegEx trees to support inexact matching.
   49396             :        */
   49397             :           SgTypeSignedInt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   49398             : 
   49399             : // *** COMMON CODE SECTION ENDS HERE ***
   49400             : 
   49401             : 
   49402             : // End of memberFunctionString
   49403             : // Start of memberFunctionString
   49404             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   49405             : 
   49406             :      // the generated cast function
   49407             :      // friend ROSE_DLL_API SgTypeSignedInt* isSgTypeSignedInt ( SgNode* s );
   49408             : 
   49409             :           typedef SgType base_node_type;
   49410             : 
   49411             : 
   49412             : // End of memberFunctionString
   49413             : // Start of memberFunctionString
   49414             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   49415             : 
   49416             :        // SgName get_mangled ( SgUnparse_Info & info );
   49417             : 
   49418             :       //! Mangled name support for unparser support
   49419             :        // SgName get_mangled ( SgUnparse_Info & info );
   49420             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   49421             :           virtual SgName get_mangled (void) const override;
   49422             : 
   49423             : 
   49424             : 
   49425             : // End of memberFunctionString
   49426             : // Start of memberFunctionString
   49427             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   49428             : 
   49429             :       //! example of type used where construction is particularly simple
   49430             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   49431             :        // static SgTypeSignedInt builtin_type;
   49432             :        // static SgTypeSignedInt* builtin_type;
   49433             : 
   49434             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   49435             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   49436             :        // own data member and associated access function.
   49437             :        // static SgTypeSignedInt* get_builtin_type();
   49438             : 
   49439             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   49440             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   49441             :        // own data member and associated access function.
   49442             :        // static void set_builtin_type(SgTypeSignedInt* builtin_type);
   49443             : 
   49444             :       //! function returns example of type
   49445             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   49446             :        // static SgTypeSignedInt* createType(void);
   49447             :           static SgTypeSignedInt* createType(SgExpression* optional_fortran_type_kind = NULL);
   49448             : 
   49449             : 
   49450             : // End of memberFunctionString
   49451             : 
   49452             : 
   49453             : 
   49454             :      public: 
   49455             :          virtual ~SgTypeSignedInt();
   49456             : 
   49457             : 
   49458             :      public: 
   49459             :          SgTypeSignedInt(); 
   49460             : 
   49461             :     protected:
   49462             : // Start of memberFunctionString
   49463             : static SgTypeSignedInt* p_builtin_type;
   49464             :           
   49465             : // End of memberFunctionString
   49466             : 
   49467             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeSignedInt>;
   49468             : 
   49469             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49470             : 
   49471             : 
   49472             :    };
   49473             : #endif
   49474             : 
   49475             : // postdeclarations for SgTypeSignedInt
   49476             : 
   49477             : /* #line 49478 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49478             : 
   49479             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   49480             : 
   49481             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49482             : 
   49483             : 
   49484             : /* #line 49485 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49485             : 
   49486             : 
   49487             : 
   49488             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49489             : 
   49490             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   49491             : //      This code is automatically generated for each 
   49492             : //      terminal and non-terminal within the defined 
   49493             : //      grammar.  There is a simple way to change the 
   49494             : //      code to fix bugs etc.  See the ROSE README file
   49495             : //      for directions.
   49496             : 
   49497             : // tps: (02/22/2010): Adding DLL export requirements
   49498             : #include "rosedll.h"
   49499             : 
   49500             : // predeclarations for SgTypeUnsignedInt
   49501             : 
   49502             : /* #line 49503 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49503             : 
   49504             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   49505             : 
   49506             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49507             : 
   49508             : #if 1
   49509             : // Class Definition for SgTypeUnsignedInt
   49510             : class ROSE_DLL_API SgTypeUnsignedInt  : public SgType
   49511             :    {
   49512             :      public:
   49513             : 
   49514             : 
   49515             : /* #line 49516 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49516             : 
   49517             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   49518             : // Start of memberFunctionString
   49519             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   49520             : 
   49521             : // *** COMMON CODE SECTION BEGINS HERE ***
   49522             : 
   49523             :     public:
   49524             : 
   49525             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   49526             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   49527             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   49528             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   49529             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   49530             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   49531             : 
   49532             :       /*! \brief returns a string representing the class name */
   49533             :           virtual std::string class_name() const override;
   49534             : 
   49535             :       /*! \brief returns new style SageIII enum values */
   49536             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   49537             : 
   49538             :       /*! \brief static variant value */
   49539             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   49540             :        // static const VariantT static_variant = V_SgTypeUnsignedInt;
   49541             :           enum { static_variant = V_SgTypeUnsignedInt };
   49542             : 
   49543             :        /* the generated cast function */
   49544             :       /*! \brief Casts pointer from base class to derived class */
   49545             :           ROSE_DLL_API friend       SgTypeUnsignedInt* isSgTypeUnsignedInt(       SgNode * s );
   49546             : 
   49547             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   49548             :           ROSE_DLL_API friend const SgTypeUnsignedInt* isSgTypeUnsignedInt( const SgNode * s );
   49549             : 
   49550             :      // ******************************************
   49551             :      // * Memory Pool / New / Delete
   49552             :      // ******************************************
   49553             : 
   49554             :      public:
   49555             :           /// \private
   49556             :           static const unsigned pool_size; //
   49557             :           /// \private
   49558             :           static std::vector<unsigned char *> pools; //
   49559             :           /// \private
   49560             :           static SgTypeUnsignedInt * next_node; // 
   49561             : 
   49562             :           /// \private
   49563             :           static unsigned long initializeStorageClassArray(SgTypeUnsignedIntStorageClass *); //
   49564             : 
   49565             :           /// \private
   49566             :           static void clearMemoryPool(); //
   49567             :           static void deleteMemoryPool(); //
   49568             : 
   49569             :           /// \private
   49570             :           static void extendMemoryPoolForFileIO(); //
   49571             : 
   49572             :           /// \private
   49573             :           static SgTypeUnsignedInt * getPointerFromGlobalIndex(unsigned long); //
   49574             :           /// \private
   49575             :           static SgTypeUnsignedInt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   49576             : 
   49577             :           /// \private
   49578             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   49579             :           /// \private
   49580             :           static void resetValidFreepointers(); //
   49581             :           /// \private
   49582             :           static unsigned long getNumberOfLastValidPointer(); //
   49583             : 
   49584             : 
   49585             : #if defined(INLINE_FUNCTIONS)
   49586             :       /*! \brief returns pointer to newly allocated IR node */
   49587             :           inline void *operator new (size_t size);
   49588             : #else
   49589             :       /*! \brief returns pointer to newly allocated IR node */
   49590             :           void *operator new (size_t size);
   49591             : #endif
   49592             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   49593             :           void operator delete (void* pointer, size_t size);
   49594             : 
   49595             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   49596        1473 :           void operator delete (void* pointer)
   49597             :              {
   49598             :             // This is the generated delete operator...
   49599        1473 :                SgTypeUnsignedInt::operator delete (pointer,sizeof(SgTypeUnsignedInt));
   49600             :              }
   49601             : 
   49602             :       /*! \brief Returns the total number of IR nodes of this type */
   49603             :           static size_t numberOfNodes();
   49604             : 
   49605             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   49606             :           static size_t memoryUsage();
   49607             : 
   49608             :       // End of scope which started in IR nodes specific code 
   49609             :       /* */
   49610             : 
   49611             :       /* name Internal Functions
   49612             :           \brief Internal functions ... incomplete-documentation
   49613             : 
   49614             :           These functions have been made public as part of the design, but they are suggested for internal use 
   49615             :           or by particularly knowledgeable users for specialized tools or applications.
   49616             : 
   49617             :           \internal We could not make these private because they are required by user for special purposes. And 
   49618             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   49619             :          
   49620             :        */
   49621             : 
   49622             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   49623             :        // overridden in every class by *generated* implementation
   49624             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   49625             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   49626             :        // MS: 06/28/02 container of names of variables or container indices 
   49627             :        // used used in the traversal to access AST successor nodes
   49628             :        // overridden in every class by *generated* implementation
   49629             :       /*! \brief container of names of variables or container indices used used in the traversal
   49630             :           to access AST successor nodes overridden in every class by *generated* implementation */
   49631             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   49632             : 
   49633             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   49634             :        // than all the vector copies. The implementation for these functions is generated for each class.
   49635             :       /*! \brief return number of children in the traversal successor list */
   49636             :           virtual size_t get_numberOfTraversalSuccessors() override;
   49637             :       /*! \brief index-based access to traversal successors by index number */
   49638             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   49639             :       /*! \brief index-based access to traversal successors by child node */
   49640             :           virtual size_t get_childIndex(SgNode *child) override;
   49641             : 
   49642             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   49643             :        // MS: 08/16/2002 method for generating RTI information
   49644             :       /*! \brief return C++ Runtime-Time-Information */
   49645             :           virtual RTIReturnType roseRTI() override;
   49646             : #endif
   49647             :       /* */
   49648             : 
   49649             : 
   49650             : 
   49651             :       /* name Deprecated Functions
   49652             :           \brief Deprecated functions ... incomplete-documentation
   49653             : 
   49654             :           These functions have been deprecated from use.
   49655             :        */
   49656             :       /* */
   49657             : 
   49658             :       /*! returns a C style string (char*) representing the class name */
   49659             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   49660             : 
   49661             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   49662             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   49663             : #if 0
   49664             :       /*! returns old style Sage II enum values */
   49665             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   49666             :       /*! returns old style Sage II enum values */
   49667             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   49668             : #endif
   49669             :       /* */
   49670             : 
   49671             : 
   49672             : 
   49673             : 
   49674             :      public:
   49675             :       /* name Traversal Support Functions
   49676             :           \brief Traversal support functions ... incomplete-documentation
   49677             : 
   49678             :           These functions have been made public as part of the design, but they are suggested for internal use 
   49679             :           or by particularly knowledgable users for specialized tools or applications.
   49680             :        */
   49681             :       /* */
   49682             : 
   49683             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   49684             :        // (inferior to ROSE traversal mechanism, experimental).
   49685             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   49686             :        */
   49687             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   49688             : 
   49689             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   49690             :       /*! \brief support for the classic visitor pattern done in GoF */
   49691             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   49692             : 
   49693             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   49694             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   49695             :        */
   49696             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   49697             : 
   49698             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   49699             :        */
   49700             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   49701             : 
   49702             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   49703             :        // This traversal helps support internal tools that call static member functions.
   49704             :        // note: this function operates on the memory pools.
   49705             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   49706             :        */
   49707             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   49708             :       /* */
   49709             : 
   49710             : 
   49711             :      public:
   49712             :       /* name Memory Allocation Functions
   49713             :           \brief Memory allocations functions ... incomplete-documentation
   49714             : 
   49715             :           These functions have been made public as part of the design, but they are suggested for internal use 
   49716             :           or by particularly knowledgable users for specialized tools or applications.
   49717             :        */
   49718             :       /* */
   49719             : 
   49720             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   49721             : 
   49722             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   49723             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   49724             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   49725             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   49726             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   49727             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   49728             :           being used with the AST File I/O mechanism.
   49729             :        */
   49730             :           virtual bool isInMemoryPool() override;
   49731             : 
   49732             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   49733             : 
   49734             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   49735             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   49736             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   49737             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   49738             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   49739             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   49740             :           being used with the AST File I/O mechanism.
   49741             :        */
   49742             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   49743             : 
   49744             :       // DQ (4/30/2006): Modified to be a const function.
   49745             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   49746             : 
   49747             :           This functions is part of general support for many possible tools to operate 
   49748             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   49749             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   49750             :           less than the set of pointers used by the AST file I/O. This is part of
   49751             :           work implemented by Andreas, and support tools such as the AST graph generation.
   49752             : 
   49753             :           \warning This function can return unexpected data members and thus the 
   49754             :                    order and the number of elements is unpredicable and subject 
   49755             :                    to change.
   49756             : 
   49757             :           \returns STL vector of pairs of SgNode* and strings
   49758             :        */
   49759             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   49760             : 
   49761             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   49762             : 
   49763             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   49764             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   49765             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   49766             : 
   49767             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   49768             :                    and subject to change.
   49769             :        */
   49770             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   49771             : 
   49772             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   49773             : 
   49774             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   49775             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   49776             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   49777             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   49778             : 
   49779             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   49780             : 
   49781             :           \returns long
   49782             :        */
   49783             :           virtual long getChildIndex( SgNode* childNode ) const override;
   49784             : 
   49785             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   49786             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   49787             :       /* \brief Constructor for use by AST File I/O Mechanism
   49788             : 
   49789             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   49790             :           which obtained via fast binary file I/O from disk.
   49791             :        */
   49792             :        // SgTypeUnsignedInt( SgTypeUnsignedIntStorageClass& source );
   49793             : 
   49794             : 
   49795             : 
   49796             : 
   49797             : 
   49798             :  // JH (10/24/2005): methods added to support the ast file IO
   49799             :     private:
   49800             : 
   49801             :       /* name AST Memory Allocation Support Functions
   49802             :           \brief Memory allocations support....
   49803             : 
   49804             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   49805             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   49806             :           and support the AST File I/O Mechanism.
   49807             :        */
   49808             :       /* */
   49809             : 
   49810             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   49811             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   49812             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   49813             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   49814             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   49815             :           a correspinding one in the AST_FILE_IO class!
   49816             :        */
   49817             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   49818             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   49819             :       /* \brief Typedef used for low level memory access.
   49820             :        */
   49821             :        // typedef unsigned char* TestType;
   49822             : 
   49823             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   49824             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   49825             :       /* \brief Typedef used to hold memory addresses as values.
   49826             :        */
   49827             :        // typedef unsigned long  AddressType;
   49828             : 
   49829             : 
   49830             : 
   49831             :        // necessary, to have direct access to the p_freepointer and the private methods !
   49832             :       /*! \brief friend class declaration to support AST File I/O */
   49833             :           friend class AST_FILE_IO;
   49834             : 
   49835             :       /*! \brief friend class declaration to support AST File I/O */
   49836             :           friend class SgTypeUnsignedIntStorageClass;
   49837             : 
   49838             :       /*! \brief friend class declaration to support AST File I/O */
   49839             :           friend class AstSpecificDataManagingClass;
   49840             : 
   49841             :       /*! \brief friend class declaration to support AST File I/O */
   49842             :           friend class AstSpecificDataManagingClassStorageClass;
   49843             :     public:
   49844             :       /*! \brief IR node constructor to support AST File I/O */
   49845             :           SgTypeUnsignedInt( const SgTypeUnsignedIntStorageClass& source );
   49846             : 
   49847             :  // private: // JJW hack
   49848             :        /*
   49849             :           name AST Memory Allocation Support Variables
   49850             :           Memory allocations support variables 
   49851             : 
   49852             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   49853             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   49854             :           and support the AST File I/O Mechanism.
   49855             :        */
   49856             :       /* */
   49857             : 
   49858             :     public:
   49859             : 
   49860             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   49861             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   49862             :       // virtual SgNode* addRegExpAttribute();
   49863             :       /*! \brief Support for AST matching using regular expression.
   49864             : 
   49865             :           This support is incomplete and the subject of current research to define 
   49866             :           RegEx trees to support inexact matching.
   49867             :        */
   49868             :           SgTypeUnsignedInt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   49869             : 
   49870             : // *** COMMON CODE SECTION ENDS HERE ***
   49871             : 
   49872             : 
   49873             : // End of memberFunctionString
   49874             : // Start of memberFunctionString
   49875             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   49876             : 
   49877             :      // the generated cast function
   49878             :      // friend ROSE_DLL_API SgTypeUnsignedInt* isSgTypeUnsignedInt ( SgNode* s );
   49879             : 
   49880             :           typedef SgType base_node_type;
   49881             : 
   49882             : 
   49883             : // End of memberFunctionString
   49884             : // Start of memberFunctionString
   49885             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   49886             : 
   49887             :        // SgName get_mangled ( SgUnparse_Info & info );
   49888             : 
   49889             :       //! Mangled name support for unparser support
   49890             :        // SgName get_mangled ( SgUnparse_Info & info );
   49891             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   49892             :           virtual SgName get_mangled (void) const override;
   49893             : 
   49894             : 
   49895             : 
   49896             : // End of memberFunctionString
   49897             : // Start of memberFunctionString
   49898             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   49899             : 
   49900             :       //! example of type used where construction is particularly simple
   49901             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   49902             :        // static SgTypeUnsignedInt builtin_type;
   49903             :        // static SgTypeUnsignedInt* builtin_type;
   49904             : 
   49905             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   49906             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   49907             :        // own data member and associated access function.
   49908             :        // static SgTypeUnsignedInt* get_builtin_type();
   49909             : 
   49910             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   49911             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   49912             :        // own data member and associated access function.
   49913             :        // static void set_builtin_type(SgTypeUnsignedInt* builtin_type);
   49914             : 
   49915             :       //! function returns example of type
   49916             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   49917             :        // static SgTypeUnsignedInt* createType(void);
   49918             :           static SgTypeUnsignedInt* createType(SgExpression* optional_fortran_type_kind = NULL);
   49919             : 
   49920             : 
   49921             : // End of memberFunctionString
   49922             : 
   49923             : 
   49924             : 
   49925             :      public: 
   49926             :          virtual ~SgTypeUnsignedInt();
   49927             : 
   49928             : 
   49929             :      public: 
   49930             :          SgTypeUnsignedInt(); 
   49931             : 
   49932             :     protected:
   49933             : // Start of memberFunctionString
   49934             : static SgTypeUnsignedInt* p_builtin_type;
   49935             :           
   49936             : // End of memberFunctionString
   49937             : 
   49938             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeUnsignedInt>;
   49939             : 
   49940             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49941             : 
   49942             : 
   49943             :    };
   49944             : #endif
   49945             : 
   49946             : // postdeclarations for SgTypeUnsignedInt
   49947             : 
   49948             : /* #line 49949 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49949             : 
   49950             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   49951             : 
   49952             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49953             : 
   49954             : 
   49955             : /* #line 49956 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49956             : 
   49957             : 
   49958             : 
   49959             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49960             : 
   49961             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   49962             : //      This code is automatically generated for each 
   49963             : //      terminal and non-terminal within the defined 
   49964             : //      grammar.  There is a simple way to change the 
   49965             : //      code to fix bugs etc.  See the ROSE README file
   49966             : //      for directions.
   49967             : 
   49968             : // tps: (02/22/2010): Adding DLL export requirements
   49969             : #include "rosedll.h"
   49970             : 
   49971             : // predeclarations for SgTypeLong
   49972             : 
   49973             : /* #line 49974 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49974             : 
   49975             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   49976             : 
   49977             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   49978             : 
   49979             : #if 1
   49980             : // Class Definition for SgTypeLong
   49981             : class ROSE_DLL_API SgTypeLong  : public SgType
   49982             :    {
   49983             :      public:
   49984             : 
   49985             : 
   49986             : /* #line 49987 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   49987             : 
   49988             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   49989             : // Start of memberFunctionString
   49990             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   49991             : 
   49992             : // *** COMMON CODE SECTION BEGINS HERE ***
   49993             : 
   49994             :     public:
   49995             : 
   49996             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   49997             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   49998             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   49999             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   50000             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   50001             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   50002             : 
   50003             :       /*! \brief returns a string representing the class name */
   50004             :           virtual std::string class_name() const override;
   50005             : 
   50006             :       /*! \brief returns new style SageIII enum values */
   50007             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   50008             : 
   50009             :       /*! \brief static variant value */
   50010             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   50011             :        // static const VariantT static_variant = V_SgTypeLong;
   50012             :           enum { static_variant = V_SgTypeLong };
   50013             : 
   50014             :        /* the generated cast function */
   50015             :       /*! \brief Casts pointer from base class to derived class */
   50016             :           ROSE_DLL_API friend       SgTypeLong* isSgTypeLong(       SgNode * s );
   50017             : 
   50018             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   50019             :           ROSE_DLL_API friend const SgTypeLong* isSgTypeLong( const SgNode * s );
   50020             : 
   50021             :      // ******************************************
   50022             :      // * Memory Pool / New / Delete
   50023             :      // ******************************************
   50024             : 
   50025             :      public:
   50026             :           /// \private
   50027             :           static const unsigned pool_size; //
   50028             :           /// \private
   50029             :           static std::vector<unsigned char *> pools; //
   50030             :           /// \private
   50031             :           static SgTypeLong * next_node; // 
   50032             : 
   50033             :           /// \private
   50034             :           static unsigned long initializeStorageClassArray(SgTypeLongStorageClass *); //
   50035             : 
   50036             :           /// \private
   50037             :           static void clearMemoryPool(); //
   50038             :           static void deleteMemoryPool(); //
   50039             : 
   50040             :           /// \private
   50041             :           static void extendMemoryPoolForFileIO(); //
   50042             : 
   50043             :           /// \private
   50044             :           static SgTypeLong * getPointerFromGlobalIndex(unsigned long); //
   50045             :           /// \private
   50046             :           static SgTypeLong * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   50047             : 
   50048             :           /// \private
   50049             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   50050             :           /// \private
   50051             :           static void resetValidFreepointers(); //
   50052             :           /// \private
   50053             :           static unsigned long getNumberOfLastValidPointer(); //
   50054             : 
   50055             : 
   50056             : #if defined(INLINE_FUNCTIONS)
   50057             :       /*! \brief returns pointer to newly allocated IR node */
   50058             :           inline void *operator new (size_t size);
   50059             : #else
   50060             :       /*! \brief returns pointer to newly allocated IR node */
   50061             :           void *operator new (size_t size);
   50062             : #endif
   50063             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   50064             :           void operator delete (void* pointer, size_t size);
   50065             : 
   50066             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   50067         173 :           void operator delete (void* pointer)
   50068             :              {
   50069             :             // This is the generated delete operator...
   50070         173 :                SgTypeLong::operator delete (pointer,sizeof(SgTypeLong));
   50071             :              }
   50072             : 
   50073             :       /*! \brief Returns the total number of IR nodes of this type */
   50074             :           static size_t numberOfNodes();
   50075             : 
   50076             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   50077             :           static size_t memoryUsage();
   50078             : 
   50079             :       // End of scope which started in IR nodes specific code 
   50080             :       /* */
   50081             : 
   50082             :       /* name Internal Functions
   50083             :           \brief Internal functions ... incomplete-documentation
   50084             : 
   50085             :           These functions have been made public as part of the design, but they are suggested for internal use 
   50086             :           or by particularly knowledgeable users for specialized tools or applications.
   50087             : 
   50088             :           \internal We could not make these private because they are required by user for special purposes. And 
   50089             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   50090             :          
   50091             :        */
   50092             : 
   50093             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   50094             :        // overridden in every class by *generated* implementation
   50095             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   50096             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   50097             :        // MS: 06/28/02 container of names of variables or container indices 
   50098             :        // used used in the traversal to access AST successor nodes
   50099             :        // overridden in every class by *generated* implementation
   50100             :       /*! \brief container of names of variables or container indices used used in the traversal
   50101             :           to access AST successor nodes overridden in every class by *generated* implementation */
   50102             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   50103             : 
   50104             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   50105             :        // than all the vector copies. The implementation for these functions is generated for each class.
   50106             :       /*! \brief return number of children in the traversal successor list */
   50107             :           virtual size_t get_numberOfTraversalSuccessors() override;
   50108             :       /*! \brief index-based access to traversal successors by index number */
   50109             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   50110             :       /*! \brief index-based access to traversal successors by child node */
   50111             :           virtual size_t get_childIndex(SgNode *child) override;
   50112             : 
   50113             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   50114             :        // MS: 08/16/2002 method for generating RTI information
   50115             :       /*! \brief return C++ Runtime-Time-Information */
   50116             :           virtual RTIReturnType roseRTI() override;
   50117             : #endif
   50118             :       /* */
   50119             : 
   50120             : 
   50121             : 
   50122             :       /* name Deprecated Functions
   50123             :           \brief Deprecated functions ... incomplete-documentation
   50124             : 
   50125             :           These functions have been deprecated from use.
   50126             :        */
   50127             :       /* */
   50128             : 
   50129             :       /*! returns a C style string (char*) representing the class name */
   50130             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   50131             : 
   50132             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   50133             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   50134             : #if 0
   50135             :       /*! returns old style Sage II enum values */
   50136             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   50137             :       /*! returns old style Sage II enum values */
   50138             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   50139             : #endif
   50140             :       /* */
   50141             : 
   50142             : 
   50143             : 
   50144             : 
   50145             :      public:
   50146             :       /* name Traversal Support Functions
   50147             :           \brief Traversal support functions ... incomplete-documentation
   50148             : 
   50149             :           These functions have been made public as part of the design, but they are suggested for internal use 
   50150             :           or by particularly knowledgable users for specialized tools or applications.
   50151             :        */
   50152             :       /* */
   50153             : 
   50154             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   50155             :        // (inferior to ROSE traversal mechanism, experimental).
   50156             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   50157             :        */
   50158             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   50159             : 
   50160             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   50161             :       /*! \brief support for the classic visitor pattern done in GoF */
   50162             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   50163             : 
   50164             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   50165             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   50166             :        */
   50167             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   50168             : 
   50169             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   50170             :        */
   50171             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   50172             : 
   50173             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   50174             :        // This traversal helps support internal tools that call static member functions.
   50175             :        // note: this function operates on the memory pools.
   50176             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   50177             :        */
   50178             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   50179             :       /* */
   50180             : 
   50181             : 
   50182             :      public:
   50183             :       /* name Memory Allocation Functions
   50184             :           \brief Memory allocations functions ... incomplete-documentation
   50185             : 
   50186             :           These functions have been made public as part of the design, but they are suggested for internal use 
   50187             :           or by particularly knowledgable users for specialized tools or applications.
   50188             :        */
   50189             :       /* */
   50190             : 
   50191             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   50192             : 
   50193             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   50194             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   50195             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   50196             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   50197             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   50198             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   50199             :           being used with the AST File I/O mechanism.
   50200             :        */
   50201             :           virtual bool isInMemoryPool() override;
   50202             : 
   50203             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   50204             : 
   50205             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   50206             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   50207             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   50208             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   50209             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   50210             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   50211             :           being used with the AST File I/O mechanism.
   50212             :        */
   50213             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   50214             : 
   50215             :       // DQ (4/30/2006): Modified to be a const function.
   50216             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   50217             : 
   50218             :           This functions is part of general support for many possible tools to operate 
   50219             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   50220             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   50221             :           less than the set of pointers used by the AST file I/O. This is part of
   50222             :           work implemented by Andreas, and support tools such as the AST graph generation.
   50223             : 
   50224             :           \warning This function can return unexpected data members and thus the 
   50225             :                    order and the number of elements is unpredicable and subject 
   50226             :                    to change.
   50227             : 
   50228             :           \returns STL vector of pairs of SgNode* and strings
   50229             :        */
   50230             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   50231             : 
   50232             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   50233             : 
   50234             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   50235             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   50236             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   50237             : 
   50238             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   50239             :                    and subject to change.
   50240             :        */
   50241             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   50242             : 
   50243             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   50244             : 
   50245             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   50246             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   50247             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   50248             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   50249             : 
   50250             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   50251             : 
   50252             :           \returns long
   50253             :        */
   50254             :           virtual long getChildIndex( SgNode* childNode ) const override;
   50255             : 
   50256             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   50257             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   50258             :       /* \brief Constructor for use by AST File I/O Mechanism
   50259             : 
   50260             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   50261             :           which obtained via fast binary file I/O from disk.
   50262             :        */
   50263             :        // SgTypeLong( SgTypeLongStorageClass& source );
   50264             : 
   50265             : 
   50266             : 
   50267             : 
   50268             : 
   50269             :  // JH (10/24/2005): methods added to support the ast file IO
   50270             :     private:
   50271             : 
   50272             :       /* name AST Memory Allocation Support Functions
   50273             :           \brief Memory allocations support....
   50274             : 
   50275             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   50276             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   50277             :           and support the AST File I/O Mechanism.
   50278             :        */
   50279             :       /* */
   50280             : 
   50281             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   50282             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   50283             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   50284             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   50285             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   50286             :           a correspinding one in the AST_FILE_IO class!
   50287             :        */
   50288             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   50289             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   50290             :       /* \brief Typedef used for low level memory access.
   50291             :        */
   50292             :        // typedef unsigned char* TestType;
   50293             : 
   50294             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   50295             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   50296             :       /* \brief Typedef used to hold memory addresses as values.
   50297             :        */
   50298             :        // typedef unsigned long  AddressType;
   50299             : 
   50300             : 
   50301             : 
   50302             :        // necessary, to have direct access to the p_freepointer and the private methods !
   50303             :       /*! \brief friend class declaration to support AST File I/O */
   50304             :           friend class AST_FILE_IO;
   50305             : 
   50306             :       /*! \brief friend class declaration to support AST File I/O */
   50307             :           friend class SgTypeLongStorageClass;
   50308             : 
   50309             :       /*! \brief friend class declaration to support AST File I/O */
   50310             :           friend class AstSpecificDataManagingClass;
   50311             : 
   50312             :       /*! \brief friend class declaration to support AST File I/O */
   50313             :           friend class AstSpecificDataManagingClassStorageClass;
   50314             :     public:
   50315             :       /*! \brief IR node constructor to support AST File I/O */
   50316             :           SgTypeLong( const SgTypeLongStorageClass& source );
   50317             : 
   50318             :  // private: // JJW hack
   50319             :        /*
   50320             :           name AST Memory Allocation Support Variables
   50321             :           Memory allocations support variables 
   50322             : 
   50323             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   50324             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   50325             :           and support the AST File I/O Mechanism.
   50326             :        */
   50327             :       /* */
   50328             : 
   50329             :     public:
   50330             : 
   50331             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   50332             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   50333             :       // virtual SgNode* addRegExpAttribute();
   50334             :       /*! \brief Support for AST matching using regular expression.
   50335             : 
   50336             :           This support is incomplete and the subject of current research to define 
   50337             :           RegEx trees to support inexact matching.
   50338             :        */
   50339             :           SgTypeLong* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   50340             : 
   50341             : // *** COMMON CODE SECTION ENDS HERE ***
   50342             : 
   50343             : 
   50344             : // End of memberFunctionString
   50345             : // Start of memberFunctionString
   50346             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   50347             : 
   50348             :      // the generated cast function
   50349             :      // friend ROSE_DLL_API SgTypeLong* isSgTypeLong ( SgNode* s );
   50350             : 
   50351             :           typedef SgType base_node_type;
   50352             : 
   50353             : 
   50354             : // End of memberFunctionString
   50355             : // Start of memberFunctionString
   50356             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   50357             : 
   50358             :        // SgName get_mangled ( SgUnparse_Info & info );
   50359             : 
   50360             :       //! Mangled name support for unparser support
   50361             :        // SgName get_mangled ( SgUnparse_Info & info );
   50362             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   50363             :           virtual SgName get_mangled (void) const override;
   50364             : 
   50365             : 
   50366             : 
   50367             : // End of memberFunctionString
   50368             : // Start of memberFunctionString
   50369             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   50370             : 
   50371             :       //! example of type used where construction is particularly simple
   50372             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   50373             :        // static SgTypeLong builtin_type;
   50374             :        // static SgTypeLong* builtin_type;
   50375             : 
   50376             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   50377             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   50378             :        // own data member and associated access function.
   50379             :        // static SgTypeLong* get_builtin_type();
   50380             : 
   50381             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   50382             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   50383             :        // own data member and associated access function.
   50384             :        // static void set_builtin_type(SgTypeLong* builtin_type);
   50385             : 
   50386             :       //! function returns example of type
   50387             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   50388             :        // static SgTypeLong* createType(void);
   50389             :           static SgTypeLong* createType(SgExpression* optional_fortran_type_kind = NULL);
   50390             : 
   50391             : 
   50392             : // End of memberFunctionString
   50393             : 
   50394             : 
   50395             : 
   50396             :      public: 
   50397             :          virtual ~SgTypeLong();
   50398             : 
   50399             : 
   50400             :      public: 
   50401             :          SgTypeLong(); 
   50402             : 
   50403             :     protected:
   50404             : // Start of memberFunctionString
   50405             : static SgTypeLong* p_builtin_type;
   50406             :           
   50407             : // End of memberFunctionString
   50408             : 
   50409             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeLong>;
   50410             : 
   50411             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50412             : 
   50413             : 
   50414             :    };
   50415             : #endif
   50416             : 
   50417             : // postdeclarations for SgTypeLong
   50418             : 
   50419             : /* #line 50420 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50420             : 
   50421             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   50422             : 
   50423             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50424             : 
   50425             : 
   50426             : /* #line 50427 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50427             : 
   50428             : 
   50429             : 
   50430             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50431             : 
   50432             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   50433             : //      This code is automatically generated for each 
   50434             : //      terminal and non-terminal within the defined 
   50435             : //      grammar.  There is a simple way to change the 
   50436             : //      code to fix bugs etc.  See the ROSE README file
   50437             : //      for directions.
   50438             : 
   50439             : // tps: (02/22/2010): Adding DLL export requirements
   50440             : #include "rosedll.h"
   50441             : 
   50442             : // predeclarations for SgTypeSignedLong
   50443             : 
   50444             : /* #line 50445 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50445             : 
   50446             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   50447             : 
   50448             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50449             : 
   50450             : #if 1
   50451             : // Class Definition for SgTypeSignedLong
   50452             : class ROSE_DLL_API SgTypeSignedLong  : public SgType
   50453             :    {
   50454             :      public:
   50455             : 
   50456             : 
   50457             : /* #line 50458 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50458             : 
   50459             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   50460             : // Start of memberFunctionString
   50461             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   50462             : 
   50463             : // *** COMMON CODE SECTION BEGINS HERE ***
   50464             : 
   50465             :     public:
   50466             : 
   50467             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   50468             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   50469             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   50470             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   50471             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   50472             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   50473             : 
   50474             :       /*! \brief returns a string representing the class name */
   50475             :           virtual std::string class_name() const override;
   50476             : 
   50477             :       /*! \brief returns new style SageIII enum values */
   50478             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   50479             : 
   50480             :       /*! \brief static variant value */
   50481             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   50482             :        // static const VariantT static_variant = V_SgTypeSignedLong;
   50483             :           enum { static_variant = V_SgTypeSignedLong };
   50484             : 
   50485             :        /* the generated cast function */
   50486             :       /*! \brief Casts pointer from base class to derived class */
   50487             :           ROSE_DLL_API friend       SgTypeSignedLong* isSgTypeSignedLong(       SgNode * s );
   50488             : 
   50489             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   50490             :           ROSE_DLL_API friend const SgTypeSignedLong* isSgTypeSignedLong( const SgNode * s );
   50491             : 
   50492             :      // ******************************************
   50493             :      // * Memory Pool / New / Delete
   50494             :      // ******************************************
   50495             : 
   50496             :      public:
   50497             :           /// \private
   50498             :           static const unsigned pool_size; //
   50499             :           /// \private
   50500             :           static std::vector<unsigned char *> pools; //
   50501             :           /// \private
   50502             :           static SgTypeSignedLong * next_node; // 
   50503             : 
   50504             :           /// \private
   50505             :           static unsigned long initializeStorageClassArray(SgTypeSignedLongStorageClass *); //
   50506             : 
   50507             :           /// \private
   50508             :           static void clearMemoryPool(); //
   50509             :           static void deleteMemoryPool(); //
   50510             : 
   50511             :           /// \private
   50512             :           static void extendMemoryPoolForFileIO(); //
   50513             : 
   50514             :           /// \private
   50515             :           static SgTypeSignedLong * getPointerFromGlobalIndex(unsigned long); //
   50516             :           /// \private
   50517             :           static SgTypeSignedLong * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   50518             : 
   50519             :           /// \private
   50520             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   50521             :           /// \private
   50522             :           static void resetValidFreepointers(); //
   50523             :           /// \private
   50524             :           static unsigned long getNumberOfLastValidPointer(); //
   50525             : 
   50526             : 
   50527             : #if defined(INLINE_FUNCTIONS)
   50528             :       /*! \brief returns pointer to newly allocated IR node */
   50529             :           inline void *operator new (size_t size);
   50530             : #else
   50531             :       /*! \brief returns pointer to newly allocated IR node */
   50532             :           void *operator new (size_t size);
   50533             : #endif
   50534             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   50535             :           void operator delete (void* pointer, size_t size);
   50536             : 
   50537             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   50538           4 :           void operator delete (void* pointer)
   50539             :              {
   50540             :             // This is the generated delete operator...
   50541           4 :                SgTypeSignedLong::operator delete (pointer,sizeof(SgTypeSignedLong));
   50542             :              }
   50543             : 
   50544             :       /*! \brief Returns the total number of IR nodes of this type */
   50545             :           static size_t numberOfNodes();
   50546             : 
   50547             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   50548             :           static size_t memoryUsage();
   50549             : 
   50550             :       // End of scope which started in IR nodes specific code 
   50551             :       /* */
   50552             : 
   50553             :       /* name Internal Functions
   50554             :           \brief Internal functions ... incomplete-documentation
   50555             : 
   50556             :           These functions have been made public as part of the design, but they are suggested for internal use 
   50557             :           or by particularly knowledgeable users for specialized tools or applications.
   50558             : 
   50559             :           \internal We could not make these private because they are required by user for special purposes. And 
   50560             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   50561             :          
   50562             :        */
   50563             : 
   50564             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   50565             :        // overridden in every class by *generated* implementation
   50566             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   50567             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   50568             :        // MS: 06/28/02 container of names of variables or container indices 
   50569             :        // used used in the traversal to access AST successor nodes
   50570             :        // overridden in every class by *generated* implementation
   50571             :       /*! \brief container of names of variables or container indices used used in the traversal
   50572             :           to access AST successor nodes overridden in every class by *generated* implementation */
   50573             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   50574             : 
   50575             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   50576             :        // than all the vector copies. The implementation for these functions is generated for each class.
   50577             :       /*! \brief return number of children in the traversal successor list */
   50578             :           virtual size_t get_numberOfTraversalSuccessors() override;
   50579             :       /*! \brief index-based access to traversal successors by index number */
   50580             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   50581             :       /*! \brief index-based access to traversal successors by child node */
   50582             :           virtual size_t get_childIndex(SgNode *child) override;
   50583             : 
   50584             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   50585             :        // MS: 08/16/2002 method for generating RTI information
   50586             :       /*! \brief return C++ Runtime-Time-Information */
   50587             :           virtual RTIReturnType roseRTI() override;
   50588             : #endif
   50589             :       /* */
   50590             : 
   50591             : 
   50592             : 
   50593             :       /* name Deprecated Functions
   50594             :           \brief Deprecated functions ... incomplete-documentation
   50595             : 
   50596             :           These functions have been deprecated from use.
   50597             :        */
   50598             :       /* */
   50599             : 
   50600             :       /*! returns a C style string (char*) representing the class name */
   50601             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   50602             : 
   50603             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   50604             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   50605             : #if 0
   50606             :       /*! returns old style Sage II enum values */
   50607             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   50608             :       /*! returns old style Sage II enum values */
   50609             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   50610             : #endif
   50611             :       /* */
   50612             : 
   50613             : 
   50614             : 
   50615             : 
   50616             :      public:
   50617             :       /* name Traversal Support Functions
   50618             :           \brief Traversal support functions ... incomplete-documentation
   50619             : 
   50620             :           These functions have been made public as part of the design, but they are suggested for internal use 
   50621             :           or by particularly knowledgable users for specialized tools or applications.
   50622             :        */
   50623             :       /* */
   50624             : 
   50625             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   50626             :        // (inferior to ROSE traversal mechanism, experimental).
   50627             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   50628             :        */
   50629             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   50630             : 
   50631             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   50632             :       /*! \brief support for the classic visitor pattern done in GoF */
   50633             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   50634             : 
   50635             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   50636             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   50637             :        */
   50638             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   50639             : 
   50640             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   50641             :        */
   50642             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   50643             : 
   50644             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   50645             :        // This traversal helps support internal tools that call static member functions.
   50646             :        // note: this function operates on the memory pools.
   50647             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   50648             :        */
   50649             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   50650             :       /* */
   50651             : 
   50652             : 
   50653             :      public:
   50654             :       /* name Memory Allocation Functions
   50655             :           \brief Memory allocations functions ... incomplete-documentation
   50656             : 
   50657             :           These functions have been made public as part of the design, but they are suggested for internal use 
   50658             :           or by particularly knowledgable users for specialized tools or applications.
   50659             :        */
   50660             :       /* */
   50661             : 
   50662             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   50663             : 
   50664             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   50665             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   50666             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   50667             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   50668             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   50669             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   50670             :           being used with the AST File I/O mechanism.
   50671             :        */
   50672             :           virtual bool isInMemoryPool() override;
   50673             : 
   50674             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   50675             : 
   50676             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   50677             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   50678             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   50679             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   50680             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   50681             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   50682             :           being used with the AST File I/O mechanism.
   50683             :        */
   50684             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   50685             : 
   50686             :       // DQ (4/30/2006): Modified to be a const function.
   50687             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   50688             : 
   50689             :           This functions is part of general support for many possible tools to operate 
   50690             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   50691             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   50692             :           less than the set of pointers used by the AST file I/O. This is part of
   50693             :           work implemented by Andreas, and support tools such as the AST graph generation.
   50694             : 
   50695             :           \warning This function can return unexpected data members and thus the 
   50696             :                    order and the number of elements is unpredicable and subject 
   50697             :                    to change.
   50698             : 
   50699             :           \returns STL vector of pairs of SgNode* and strings
   50700             :        */
   50701             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   50702             : 
   50703             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   50704             : 
   50705             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   50706             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   50707             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   50708             : 
   50709             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   50710             :                    and subject to change.
   50711             :        */
   50712             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   50713             : 
   50714             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   50715             : 
   50716             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   50717             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   50718             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   50719             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   50720             : 
   50721             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   50722             : 
   50723             :           \returns long
   50724             :        */
   50725             :           virtual long getChildIndex( SgNode* childNode ) const override;
   50726             : 
   50727             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   50728             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   50729             :       /* \brief Constructor for use by AST File I/O Mechanism
   50730             : 
   50731             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   50732             :           which obtained via fast binary file I/O from disk.
   50733             :        */
   50734             :        // SgTypeSignedLong( SgTypeSignedLongStorageClass& source );
   50735             : 
   50736             : 
   50737             : 
   50738             : 
   50739             : 
   50740             :  // JH (10/24/2005): methods added to support the ast file IO
   50741             :     private:
   50742             : 
   50743             :       /* name AST Memory Allocation Support Functions
   50744             :           \brief Memory allocations support....
   50745             : 
   50746             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   50747             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   50748             :           and support the AST File I/O Mechanism.
   50749             :        */
   50750             :       /* */
   50751             : 
   50752             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   50753             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   50754             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   50755             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   50756             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   50757             :           a correspinding one in the AST_FILE_IO class!
   50758             :        */
   50759             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   50760             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   50761             :       /* \brief Typedef used for low level memory access.
   50762             :        */
   50763             :        // typedef unsigned char* TestType;
   50764             : 
   50765             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   50766             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   50767             :       /* \brief Typedef used to hold memory addresses as values.
   50768             :        */
   50769             :        // typedef unsigned long  AddressType;
   50770             : 
   50771             : 
   50772             : 
   50773             :        // necessary, to have direct access to the p_freepointer and the private methods !
   50774             :       /*! \brief friend class declaration to support AST File I/O */
   50775             :           friend class AST_FILE_IO;
   50776             : 
   50777             :       /*! \brief friend class declaration to support AST File I/O */
   50778             :           friend class SgTypeSignedLongStorageClass;
   50779             : 
   50780             :       /*! \brief friend class declaration to support AST File I/O */
   50781             :           friend class AstSpecificDataManagingClass;
   50782             : 
   50783             :       /*! \brief friend class declaration to support AST File I/O */
   50784             :           friend class AstSpecificDataManagingClassStorageClass;
   50785             :     public:
   50786             :       /*! \brief IR node constructor to support AST File I/O */
   50787             :           SgTypeSignedLong( const SgTypeSignedLongStorageClass& source );
   50788             : 
   50789             :  // private: // JJW hack
   50790             :        /*
   50791             :           name AST Memory Allocation Support Variables
   50792             :           Memory allocations support variables 
   50793             : 
   50794             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   50795             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   50796             :           and support the AST File I/O Mechanism.
   50797             :        */
   50798             :       /* */
   50799             : 
   50800             :     public:
   50801             : 
   50802             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   50803             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   50804             :       // virtual SgNode* addRegExpAttribute();
   50805             :       /*! \brief Support for AST matching using regular expression.
   50806             : 
   50807             :           This support is incomplete and the subject of current research to define 
   50808             :           RegEx trees to support inexact matching.
   50809             :        */
   50810             :           SgTypeSignedLong* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   50811             : 
   50812             : // *** COMMON CODE SECTION ENDS HERE ***
   50813             : 
   50814             : 
   50815             : // End of memberFunctionString
   50816             : // Start of memberFunctionString
   50817             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   50818             : 
   50819             :      // the generated cast function
   50820             :      // friend ROSE_DLL_API SgTypeSignedLong* isSgTypeSignedLong ( SgNode* s );
   50821             : 
   50822             :           typedef SgType base_node_type;
   50823             : 
   50824             : 
   50825             : // End of memberFunctionString
   50826             : // Start of memberFunctionString
   50827             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   50828             : 
   50829             :        // SgName get_mangled ( SgUnparse_Info & info );
   50830             : 
   50831             :       //! Mangled name support for unparser support
   50832             :        // SgName get_mangled ( SgUnparse_Info & info );
   50833             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   50834             :           virtual SgName get_mangled (void) const override;
   50835             : 
   50836             : 
   50837             : 
   50838             : // End of memberFunctionString
   50839             : // Start of memberFunctionString
   50840             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   50841             : 
   50842             :       //! example of type used where construction is particularly simple
   50843             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   50844             :        // static SgTypeSignedLong builtin_type;
   50845             :        // static SgTypeSignedLong* builtin_type;
   50846             : 
   50847             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   50848             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   50849             :        // own data member and associated access function.
   50850             :        // static SgTypeSignedLong* get_builtin_type();
   50851             : 
   50852             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   50853             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   50854             :        // own data member and associated access function.
   50855             :        // static void set_builtin_type(SgTypeSignedLong* builtin_type);
   50856             : 
   50857             :       //! function returns example of type
   50858             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   50859             :        // static SgTypeSignedLong* createType(void);
   50860             :           static SgTypeSignedLong* createType(SgExpression* optional_fortran_type_kind = NULL);
   50861             : 
   50862             : 
   50863             : // End of memberFunctionString
   50864             : 
   50865             : 
   50866             : 
   50867             :      public: 
   50868             :          virtual ~SgTypeSignedLong();
   50869             : 
   50870             : 
   50871             :      public: 
   50872             :          SgTypeSignedLong(); 
   50873             : 
   50874             :     protected:
   50875             : // Start of memberFunctionString
   50876             : static SgTypeSignedLong* p_builtin_type;
   50877             :           
   50878             : // End of memberFunctionString
   50879             : 
   50880             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeSignedLong>;
   50881             : 
   50882             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50883             : 
   50884             : 
   50885             :    };
   50886             : #endif
   50887             : 
   50888             : // postdeclarations for SgTypeSignedLong
   50889             : 
   50890             : /* #line 50891 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50891             : 
   50892             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   50893             : 
   50894             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50895             : 
   50896             : 
   50897             : /* #line 50898 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50898             : 
   50899             : 
   50900             : 
   50901             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50902             : 
   50903             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   50904             : //      This code is automatically generated for each 
   50905             : //      terminal and non-terminal within the defined 
   50906             : //      grammar.  There is a simple way to change the 
   50907             : //      code to fix bugs etc.  See the ROSE README file
   50908             : //      for directions.
   50909             : 
   50910             : // tps: (02/22/2010): Adding DLL export requirements
   50911             : #include "rosedll.h"
   50912             : 
   50913             : // predeclarations for SgTypeUnsignedLong
   50914             : 
   50915             : /* #line 50916 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50916             : 
   50917             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   50918             : 
   50919             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   50920             : 
   50921             : #if 1
   50922             : // Class Definition for SgTypeUnsignedLong
   50923             : class ROSE_DLL_API SgTypeUnsignedLong  : public SgType
   50924             :    {
   50925             :      public:
   50926             : 
   50927             : 
   50928             : /* #line 50929 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   50929             : 
   50930             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   50931             : // Start of memberFunctionString
   50932             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   50933             : 
   50934             : // *** COMMON CODE SECTION BEGINS HERE ***
   50935             : 
   50936             :     public:
   50937             : 
   50938             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   50939             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   50940             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   50941             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   50942             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   50943             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   50944             : 
   50945             :       /*! \brief returns a string representing the class name */
   50946             :           virtual std::string class_name() const override;
   50947             : 
   50948             :       /*! \brief returns new style SageIII enum values */
   50949             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   50950             : 
   50951             :       /*! \brief static variant value */
   50952             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   50953             :        // static const VariantT static_variant = V_SgTypeUnsignedLong;
   50954             :           enum { static_variant = V_SgTypeUnsignedLong };
   50955             : 
   50956             :        /* the generated cast function */
   50957             :       /*! \brief Casts pointer from base class to derived class */
   50958             :           ROSE_DLL_API friend       SgTypeUnsignedLong* isSgTypeUnsignedLong(       SgNode * s );
   50959             : 
   50960             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   50961             :           ROSE_DLL_API friend const SgTypeUnsignedLong* isSgTypeUnsignedLong( const SgNode * s );
   50962             : 
   50963             :      // ******************************************
   50964             :      // * Memory Pool / New / Delete
   50965             :      // ******************************************
   50966             : 
   50967             :      public:
   50968             :           /// \private
   50969             :           static const unsigned pool_size; //
   50970             :           /// \private
   50971             :           static std::vector<unsigned char *> pools; //
   50972             :           /// \private
   50973             :           static SgTypeUnsignedLong * next_node; // 
   50974             : 
   50975             :           /// \private
   50976             :           static unsigned long initializeStorageClassArray(SgTypeUnsignedLongStorageClass *); //
   50977             : 
   50978             :           /// \private
   50979             :           static void clearMemoryPool(); //
   50980             :           static void deleteMemoryPool(); //
   50981             : 
   50982             :           /// \private
   50983             :           static void extendMemoryPoolForFileIO(); //
   50984             : 
   50985             :           /// \private
   50986             :           static SgTypeUnsignedLong * getPointerFromGlobalIndex(unsigned long); //
   50987             :           /// \private
   50988             :           static SgTypeUnsignedLong * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   50989             : 
   50990             :           /// \private
   50991             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   50992             :           /// \private
   50993             :           static void resetValidFreepointers(); //
   50994             :           /// \private
   50995             :           static unsigned long getNumberOfLastValidPointer(); //
   50996             : 
   50997             : 
   50998             : #if defined(INLINE_FUNCTIONS)
   50999             :       /*! \brief returns pointer to newly allocated IR node */
   51000             :           inline void *operator new (size_t size);
   51001             : #else
   51002             :       /*! \brief returns pointer to newly allocated IR node */
   51003             :           void *operator new (size_t size);
   51004             : #endif
   51005             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   51006             :           void operator delete (void* pointer, size_t size);
   51007             : 
   51008             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   51009         784 :           void operator delete (void* pointer)
   51010             :              {
   51011             :             // This is the generated delete operator...
   51012         784 :                SgTypeUnsignedLong::operator delete (pointer,sizeof(SgTypeUnsignedLong));
   51013             :              }
   51014             : 
   51015             :       /*! \brief Returns the total number of IR nodes of this type */
   51016             :           static size_t numberOfNodes();
   51017             : 
   51018             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   51019             :           static size_t memoryUsage();
   51020             : 
   51021             :       // End of scope which started in IR nodes specific code 
   51022             :       /* */
   51023             : 
   51024             :       /* name Internal Functions
   51025             :           \brief Internal functions ... incomplete-documentation
   51026             : 
   51027             :           These functions have been made public as part of the design, but they are suggested for internal use 
   51028             :           or by particularly knowledgeable users for specialized tools or applications.
   51029             : 
   51030             :           \internal We could not make these private because they are required by user for special purposes. And 
   51031             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   51032             :          
   51033             :        */
   51034             : 
   51035             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   51036             :        // overridden in every class by *generated* implementation
   51037             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   51038             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   51039             :        // MS: 06/28/02 container of names of variables or container indices 
   51040             :        // used used in the traversal to access AST successor nodes
   51041             :        // overridden in every class by *generated* implementation
   51042             :       /*! \brief container of names of variables or container indices used used in the traversal
   51043             :           to access AST successor nodes overridden in every class by *generated* implementation */
   51044             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   51045             : 
   51046             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   51047             :        // than all the vector copies. The implementation for these functions is generated for each class.
   51048             :       /*! \brief return number of children in the traversal successor list */
   51049             :           virtual size_t get_numberOfTraversalSuccessors() override;
   51050             :       /*! \brief index-based access to traversal successors by index number */
   51051             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   51052             :       /*! \brief index-based access to traversal successors by child node */
   51053             :           virtual size_t get_childIndex(SgNode *child) override;
   51054             : 
   51055             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   51056             :        // MS: 08/16/2002 method for generating RTI information
   51057             :       /*! \brief return C++ Runtime-Time-Information */
   51058             :           virtual RTIReturnType roseRTI() override;
   51059             : #endif
   51060             :       /* */
   51061             : 
   51062             : 
   51063             : 
   51064             :       /* name Deprecated Functions
   51065             :           \brief Deprecated functions ... incomplete-documentation
   51066             : 
   51067             :           These functions have been deprecated from use.
   51068             :        */
   51069             :       /* */
   51070             : 
   51071             :       /*! returns a C style string (char*) representing the class name */
   51072             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   51073             : 
   51074             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   51075             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   51076             : #if 0
   51077             :       /*! returns old style Sage II enum values */
   51078             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   51079             :       /*! returns old style Sage II enum values */
   51080             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   51081             : #endif
   51082             :       /* */
   51083             : 
   51084             : 
   51085             : 
   51086             : 
   51087             :      public:
   51088             :       /* name Traversal Support Functions
   51089             :           \brief Traversal support functions ... incomplete-documentation
   51090             : 
   51091             :           These functions have been made public as part of the design, but they are suggested for internal use 
   51092             :           or by particularly knowledgable users for specialized tools or applications.
   51093             :        */
   51094             :       /* */
   51095             : 
   51096             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   51097             :        // (inferior to ROSE traversal mechanism, experimental).
   51098             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   51099             :        */
   51100             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   51101             : 
   51102             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   51103             :       /*! \brief support for the classic visitor pattern done in GoF */
   51104             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   51105             : 
   51106             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   51107             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   51108             :        */
   51109             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   51110             : 
   51111             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   51112             :        */
   51113             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   51114             : 
   51115             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   51116             :        // This traversal helps support internal tools that call static member functions.
   51117             :        // note: this function operates on the memory pools.
   51118             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   51119             :        */
   51120             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   51121             :       /* */
   51122             : 
   51123             : 
   51124             :      public:
   51125             :       /* name Memory Allocation Functions
   51126             :           \brief Memory allocations functions ... incomplete-documentation
   51127             : 
   51128             :           These functions have been made public as part of the design, but they are suggested for internal use 
   51129             :           or by particularly knowledgable users for specialized tools or applications.
   51130             :        */
   51131             :       /* */
   51132             : 
   51133             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   51134             : 
   51135             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   51136             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   51137             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   51138             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   51139             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   51140             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   51141             :           being used with the AST File I/O mechanism.
   51142             :        */
   51143             :           virtual bool isInMemoryPool() override;
   51144             : 
   51145             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   51146             : 
   51147             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   51148             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   51149             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   51150             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   51151             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   51152             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   51153             :           being used with the AST File I/O mechanism.
   51154             :        */
   51155             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   51156             : 
   51157             :       // DQ (4/30/2006): Modified to be a const function.
   51158             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   51159             : 
   51160             :           This functions is part of general support for many possible tools to operate 
   51161             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   51162             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   51163             :           less than the set of pointers used by the AST file I/O. This is part of
   51164             :           work implemented by Andreas, and support tools such as the AST graph generation.
   51165             : 
   51166             :           \warning This function can return unexpected data members and thus the 
   51167             :                    order and the number of elements is unpredicable and subject 
   51168             :                    to change.
   51169             : 
   51170             :           \returns STL vector of pairs of SgNode* and strings
   51171             :        */
   51172             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   51173             : 
   51174             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   51175             : 
   51176             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   51177             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   51178             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   51179             : 
   51180             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   51181             :                    and subject to change.
   51182             :        */
   51183             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   51184             : 
   51185             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   51186             : 
   51187             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   51188             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   51189             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   51190             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   51191             : 
   51192             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   51193             : 
   51194             :           \returns long
   51195             :        */
   51196             :           virtual long getChildIndex( SgNode* childNode ) const override;
   51197             : 
   51198             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   51199             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   51200             :       /* \brief Constructor for use by AST File I/O Mechanism
   51201             : 
   51202             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   51203             :           which obtained via fast binary file I/O from disk.
   51204             :        */
   51205             :        // SgTypeUnsignedLong( SgTypeUnsignedLongStorageClass& source );
   51206             : 
   51207             : 
   51208             : 
   51209             : 
   51210             : 
   51211             :  // JH (10/24/2005): methods added to support the ast file IO
   51212             :     private:
   51213             : 
   51214             :       /* name AST Memory Allocation Support Functions
   51215             :           \brief Memory allocations support....
   51216             : 
   51217             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   51218             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   51219             :           and support the AST File I/O Mechanism.
   51220             :        */
   51221             :       /* */
   51222             : 
   51223             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   51224             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   51225             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   51226             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   51227             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   51228             :           a correspinding one in the AST_FILE_IO class!
   51229             :        */
   51230             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   51231             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   51232             :       /* \brief Typedef used for low level memory access.
   51233             :        */
   51234             :        // typedef unsigned char* TestType;
   51235             : 
   51236             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   51237             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   51238             :       /* \brief Typedef used to hold memory addresses as values.
   51239             :        */
   51240             :        // typedef unsigned long  AddressType;
   51241             : 
   51242             : 
   51243             : 
   51244             :        // necessary, to have direct access to the p_freepointer and the private methods !
   51245             :       /*! \brief friend class declaration to support AST File I/O */
   51246             :           friend class AST_FILE_IO;
   51247             : 
   51248             :       /*! \brief friend class declaration to support AST File I/O */
   51249             :           friend class SgTypeUnsignedLongStorageClass;
   51250             : 
   51251             :       /*! \brief friend class declaration to support AST File I/O */
   51252             :           friend class AstSpecificDataManagingClass;
   51253             : 
   51254             :       /*! \brief friend class declaration to support AST File I/O */
   51255             :           friend class AstSpecificDataManagingClassStorageClass;
   51256             :     public:
   51257             :       /*! \brief IR node constructor to support AST File I/O */
   51258             :           SgTypeUnsignedLong( const SgTypeUnsignedLongStorageClass& source );
   51259             : 
   51260             :  // private: // JJW hack
   51261             :        /*
   51262             :           name AST Memory Allocation Support Variables
   51263             :           Memory allocations support variables 
   51264             : 
   51265             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   51266             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   51267             :           and support the AST File I/O Mechanism.
   51268             :        */
   51269             :       /* */
   51270             : 
   51271             :     public:
   51272             : 
   51273             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   51274             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   51275             :       // virtual SgNode* addRegExpAttribute();
   51276             :       /*! \brief Support for AST matching using regular expression.
   51277             : 
   51278             :           This support is incomplete and the subject of current research to define 
   51279             :           RegEx trees to support inexact matching.
   51280             :        */
   51281             :           SgTypeUnsignedLong* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   51282             : 
   51283             : // *** COMMON CODE SECTION ENDS HERE ***
   51284             : 
   51285             : 
   51286             : // End of memberFunctionString
   51287             : // Start of memberFunctionString
   51288             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   51289             : 
   51290             :      // the generated cast function
   51291             :      // friend ROSE_DLL_API SgTypeUnsignedLong* isSgTypeUnsignedLong ( SgNode* s );
   51292             : 
   51293             :           typedef SgType base_node_type;
   51294             : 
   51295             : 
   51296             : // End of memberFunctionString
   51297             : // Start of memberFunctionString
   51298             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   51299             : 
   51300             :        // SgName get_mangled ( SgUnparse_Info & info );
   51301             : 
   51302             :       //! Mangled name support for unparser support
   51303             :        // SgName get_mangled ( SgUnparse_Info & info );
   51304             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   51305             :           virtual SgName get_mangled (void) const override;
   51306             : 
   51307             : 
   51308             : 
   51309             : // End of memberFunctionString
   51310             : // Start of memberFunctionString
   51311             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   51312             : 
   51313             :       //! example of type used where construction is particularly simple
   51314             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   51315             :        // static SgTypeUnsignedLong builtin_type;
   51316             :        // static SgTypeUnsignedLong* builtin_type;
   51317             : 
   51318             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   51319             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   51320             :        // own data member and associated access function.
   51321             :        // static SgTypeUnsignedLong* get_builtin_type();
   51322             : 
   51323             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   51324             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   51325             :        // own data member and associated access function.
   51326             :        // static void set_builtin_type(SgTypeUnsignedLong* builtin_type);
   51327             : 
   51328             :       //! function returns example of type
   51329             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   51330             :        // static SgTypeUnsignedLong* createType(void);
   51331             :           static SgTypeUnsignedLong* createType(SgExpression* optional_fortran_type_kind = NULL);
   51332             : 
   51333             : 
   51334             : // End of memberFunctionString
   51335             : 
   51336             : 
   51337             : 
   51338             :      public: 
   51339             :          virtual ~SgTypeUnsignedLong();
   51340             : 
   51341             : 
   51342             :      public: 
   51343             :          SgTypeUnsignedLong(); 
   51344             : 
   51345             :     protected:
   51346             : // Start of memberFunctionString
   51347             : static SgTypeUnsignedLong* p_builtin_type;
   51348             :           
   51349             : // End of memberFunctionString
   51350             : 
   51351             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeUnsignedLong>;
   51352             : 
   51353             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51354             : 
   51355             : 
   51356             :    };
   51357             : #endif
   51358             : 
   51359             : // postdeclarations for SgTypeUnsignedLong
   51360             : 
   51361             : /* #line 51362 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51362             : 
   51363             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   51364             : 
   51365             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51366             : 
   51367             : 
   51368             : /* #line 51369 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51369             : 
   51370             : 
   51371             : 
   51372             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51373             : 
   51374             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   51375             : //      This code is automatically generated for each 
   51376             : //      terminal and non-terminal within the defined 
   51377             : //      grammar.  There is a simple way to change the 
   51378             : //      code to fix bugs etc.  See the ROSE README file
   51379             : //      for directions.
   51380             : 
   51381             : // tps: (02/22/2010): Adding DLL export requirements
   51382             : #include "rosedll.h"
   51383             : 
   51384             : // predeclarations for SgTypeVoid
   51385             : 
   51386             : /* #line 51387 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51387             : 
   51388             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   51389             : 
   51390             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51391             : 
   51392             : #if 1
   51393             : // Class Definition for SgTypeVoid
   51394             : class ROSE_DLL_API SgTypeVoid  : public SgType
   51395             :    {
   51396             :      public:
   51397             : 
   51398             : 
   51399             : /* #line 51400 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51400             : 
   51401             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   51402             : // Start of memberFunctionString
   51403             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   51404             : 
   51405             : // *** COMMON CODE SECTION BEGINS HERE ***
   51406             : 
   51407             :     public:
   51408             : 
   51409             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   51410             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   51411             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   51412             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   51413             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   51414             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   51415             : 
   51416             :       /*! \brief returns a string representing the class name */
   51417             :           virtual std::string class_name() const override;
   51418             : 
   51419             :       /*! \brief returns new style SageIII enum values */
   51420             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   51421             : 
   51422             :       /*! \brief static variant value */
   51423             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   51424             :        // static const VariantT static_variant = V_SgTypeVoid;
   51425             :           enum { static_variant = V_SgTypeVoid };
   51426             : 
   51427             :        /* the generated cast function */
   51428             :       /*! \brief Casts pointer from base class to derived class */
   51429             :           ROSE_DLL_API friend       SgTypeVoid* isSgTypeVoid(       SgNode * s );
   51430             : 
   51431             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   51432             :           ROSE_DLL_API friend const SgTypeVoid* isSgTypeVoid( const SgNode * s );
   51433             : 
   51434             :      // ******************************************
   51435             :      // * Memory Pool / New / Delete
   51436             :      // ******************************************
   51437             : 
   51438             :      public:
   51439             :           /// \private
   51440             :           static const unsigned pool_size; //
   51441             :           /// \private
   51442             :           static std::vector<unsigned char *> pools; //
   51443             :           /// \private
   51444             :           static SgTypeVoid * next_node; // 
   51445             : 
   51446             :           /// \private
   51447             :           static unsigned long initializeStorageClassArray(SgTypeVoidStorageClass *); //
   51448             : 
   51449             :           /// \private
   51450             :           static void clearMemoryPool(); //
   51451             :           static void deleteMemoryPool(); //
   51452             : 
   51453             :           /// \private
   51454             :           static void extendMemoryPoolForFileIO(); //
   51455             : 
   51456             :           /// \private
   51457             :           static SgTypeVoid * getPointerFromGlobalIndex(unsigned long); //
   51458             :           /// \private
   51459             :           static SgTypeVoid * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   51460             : 
   51461             :           /// \private
   51462             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   51463             :           /// \private
   51464             :           static void resetValidFreepointers(); //
   51465             :           /// \private
   51466             :           static unsigned long getNumberOfLastValidPointer(); //
   51467             : 
   51468             : 
   51469             : #if defined(INLINE_FUNCTIONS)
   51470             :       /*! \brief returns pointer to newly allocated IR node */
   51471             :           inline void *operator new (size_t size);
   51472             : #else
   51473             :       /*! \brief returns pointer to newly allocated IR node */
   51474             :           void *operator new (size_t size);
   51475             : #endif
   51476             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   51477             :           void operator delete (void* pointer, size_t size);
   51478             : 
   51479             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   51480         592 :           void operator delete (void* pointer)
   51481             :              {
   51482             :             // This is the generated delete operator...
   51483         592 :                SgTypeVoid::operator delete (pointer,sizeof(SgTypeVoid));
   51484             :              }
   51485             : 
   51486             :       /*! \brief Returns the total number of IR nodes of this type */
   51487             :           static size_t numberOfNodes();
   51488             : 
   51489             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   51490             :           static size_t memoryUsage();
   51491             : 
   51492             :       // End of scope which started in IR nodes specific code 
   51493             :       /* */
   51494             : 
   51495             :       /* name Internal Functions
   51496             :           \brief Internal functions ... incomplete-documentation
   51497             : 
   51498             :           These functions have been made public as part of the design, but they are suggested for internal use 
   51499             :           or by particularly knowledgeable users for specialized tools or applications.
   51500             : 
   51501             :           \internal We could not make these private because they are required by user for special purposes. And 
   51502             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   51503             :          
   51504             :        */
   51505             : 
   51506             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   51507             :        // overridden in every class by *generated* implementation
   51508             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   51509             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   51510             :        // MS: 06/28/02 container of names of variables or container indices 
   51511             :        // used used in the traversal to access AST successor nodes
   51512             :        // overridden in every class by *generated* implementation
   51513             :       /*! \brief container of names of variables or container indices used used in the traversal
   51514             :           to access AST successor nodes overridden in every class by *generated* implementation */
   51515             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   51516             : 
   51517             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   51518             :        // than all the vector copies. The implementation for these functions is generated for each class.
   51519             :       /*! \brief return number of children in the traversal successor list */
   51520             :           virtual size_t get_numberOfTraversalSuccessors() override;
   51521             :       /*! \brief index-based access to traversal successors by index number */
   51522             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   51523             :       /*! \brief index-based access to traversal successors by child node */
   51524             :           virtual size_t get_childIndex(SgNode *child) override;
   51525             : 
   51526             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   51527             :        // MS: 08/16/2002 method for generating RTI information
   51528             :       /*! \brief return C++ Runtime-Time-Information */
   51529             :           virtual RTIReturnType roseRTI() override;
   51530             : #endif
   51531             :       /* */
   51532             : 
   51533             : 
   51534             : 
   51535             :       /* name Deprecated Functions
   51536             :           \brief Deprecated functions ... incomplete-documentation
   51537             : 
   51538             :           These functions have been deprecated from use.
   51539             :        */
   51540             :       /* */
   51541             : 
   51542             :       /*! returns a C style string (char*) representing the class name */
   51543             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   51544             : 
   51545             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   51546             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   51547             : #if 0
   51548             :       /*! returns old style Sage II enum values */
   51549             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   51550             :       /*! returns old style Sage II enum values */
   51551             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   51552             : #endif
   51553             :       /* */
   51554             : 
   51555             : 
   51556             : 
   51557             : 
   51558             :      public:
   51559             :       /* name Traversal Support Functions
   51560             :           \brief Traversal support functions ... incomplete-documentation
   51561             : 
   51562             :           These functions have been made public as part of the design, but they are suggested for internal use 
   51563             :           or by particularly knowledgable users for specialized tools or applications.
   51564             :        */
   51565             :       /* */
   51566             : 
   51567             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   51568             :        // (inferior to ROSE traversal mechanism, experimental).
   51569             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   51570             :        */
   51571             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   51572             : 
   51573             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   51574             :       /*! \brief support for the classic visitor pattern done in GoF */
   51575             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   51576             : 
   51577             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   51578             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   51579             :        */
   51580             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   51581             : 
   51582             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   51583             :        */
   51584             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   51585             : 
   51586             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   51587             :        // This traversal helps support internal tools that call static member functions.
   51588             :        // note: this function operates on the memory pools.
   51589             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   51590             :        */
   51591             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   51592             :       /* */
   51593             : 
   51594             : 
   51595             :      public:
   51596             :       /* name Memory Allocation Functions
   51597             :           \brief Memory allocations functions ... incomplete-documentation
   51598             : 
   51599             :           These functions have been made public as part of the design, but they are suggested for internal use 
   51600             :           or by particularly knowledgable users for specialized tools or applications.
   51601             :        */
   51602             :       /* */
   51603             : 
   51604             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   51605             : 
   51606             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   51607             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   51608             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   51609             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   51610             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   51611             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   51612             :           being used with the AST File I/O mechanism.
   51613             :        */
   51614             :           virtual bool isInMemoryPool() override;
   51615             : 
   51616             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   51617             : 
   51618             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   51619             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   51620             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   51621             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   51622             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   51623             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   51624             :           being used with the AST File I/O mechanism.
   51625             :        */
   51626             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   51627             : 
   51628             :       // DQ (4/30/2006): Modified to be a const function.
   51629             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   51630             : 
   51631             :           This functions is part of general support for many possible tools to operate 
   51632             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   51633             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   51634             :           less than the set of pointers used by the AST file I/O. This is part of
   51635             :           work implemented by Andreas, and support tools such as the AST graph generation.
   51636             : 
   51637             :           \warning This function can return unexpected data members and thus the 
   51638             :                    order and the number of elements is unpredicable and subject 
   51639             :                    to change.
   51640             : 
   51641             :           \returns STL vector of pairs of SgNode* and strings
   51642             :        */
   51643             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   51644             : 
   51645             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   51646             : 
   51647             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   51648             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   51649             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   51650             : 
   51651             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   51652             :                    and subject to change.
   51653             :        */
   51654             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   51655             : 
   51656             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   51657             : 
   51658             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   51659             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   51660             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   51661             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   51662             : 
   51663             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   51664             : 
   51665             :           \returns long
   51666             :        */
   51667             :           virtual long getChildIndex( SgNode* childNode ) const override;
   51668             : 
   51669             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   51670             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   51671             :       /* \brief Constructor for use by AST File I/O Mechanism
   51672             : 
   51673             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   51674             :           which obtained via fast binary file I/O from disk.
   51675             :        */
   51676             :        // SgTypeVoid( SgTypeVoidStorageClass& source );
   51677             : 
   51678             : 
   51679             : 
   51680             : 
   51681             : 
   51682             :  // JH (10/24/2005): methods added to support the ast file IO
   51683             :     private:
   51684             : 
   51685             :       /* name AST Memory Allocation Support Functions
   51686             :           \brief Memory allocations support....
   51687             : 
   51688             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   51689             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   51690             :           and support the AST File I/O Mechanism.
   51691             :        */
   51692             :       /* */
   51693             : 
   51694             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   51695             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   51696             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   51697             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   51698             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   51699             :           a correspinding one in the AST_FILE_IO class!
   51700             :        */
   51701             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   51702             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   51703             :       /* \brief Typedef used for low level memory access.
   51704             :        */
   51705             :        // typedef unsigned char* TestType;
   51706             : 
   51707             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   51708             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   51709             :       /* \brief Typedef used to hold memory addresses as values.
   51710             :        */
   51711             :        // typedef unsigned long  AddressType;
   51712             : 
   51713             : 
   51714             : 
   51715             :        // necessary, to have direct access to the p_freepointer and the private methods !
   51716             :       /*! \brief friend class declaration to support AST File I/O */
   51717             :           friend class AST_FILE_IO;
   51718             : 
   51719             :       /*! \brief friend class declaration to support AST File I/O */
   51720             :           friend class SgTypeVoidStorageClass;
   51721             : 
   51722             :       /*! \brief friend class declaration to support AST File I/O */
   51723             :           friend class AstSpecificDataManagingClass;
   51724             : 
   51725             :       /*! \brief friend class declaration to support AST File I/O */
   51726             :           friend class AstSpecificDataManagingClassStorageClass;
   51727             :     public:
   51728             :       /*! \brief IR node constructor to support AST File I/O */
   51729             :           SgTypeVoid( const SgTypeVoidStorageClass& source );
   51730             : 
   51731             :  // private: // JJW hack
   51732             :        /*
   51733             :           name AST Memory Allocation Support Variables
   51734             :           Memory allocations support variables 
   51735             : 
   51736             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   51737             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   51738             :           and support the AST File I/O Mechanism.
   51739             :        */
   51740             :       /* */
   51741             : 
   51742             :     public:
   51743             : 
   51744             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   51745             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   51746             :       // virtual SgNode* addRegExpAttribute();
   51747             :       /*! \brief Support for AST matching using regular expression.
   51748             : 
   51749             :           This support is incomplete and the subject of current research to define 
   51750             :           RegEx trees to support inexact matching.
   51751             :        */
   51752             :           SgTypeVoid* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   51753             : 
   51754             : // *** COMMON CODE SECTION ENDS HERE ***
   51755             : 
   51756             : 
   51757             : // End of memberFunctionString
   51758             : // Start of memberFunctionString
   51759             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   51760             : 
   51761             :      // the generated cast function
   51762             :      // friend ROSE_DLL_API SgTypeVoid* isSgTypeVoid ( SgNode* s );
   51763             : 
   51764             :           typedef SgType base_node_type;
   51765             : 
   51766             : 
   51767             : // End of memberFunctionString
   51768             : // Start of memberFunctionString
   51769             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   51770             : 
   51771             :        // SgName get_mangled ( SgUnparse_Info & info );
   51772             : 
   51773             :       //! Mangled name support for unparser support
   51774             :        // SgName get_mangled ( SgUnparse_Info & info );
   51775             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   51776             :           virtual SgName get_mangled (void) const override;
   51777             : 
   51778             : 
   51779             : 
   51780             : // End of memberFunctionString
   51781             : // Start of memberFunctionString
   51782             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   51783             : 
   51784             :       //! example of type used where construction is particularly simple
   51785             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   51786             :        // static SgTypeVoid builtin_type;
   51787             :        // static SgTypeVoid* builtin_type;
   51788             : 
   51789             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   51790             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   51791             :        // own data member and associated access function.
   51792             :        // static SgTypeVoid* get_builtin_type();
   51793             : 
   51794             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   51795             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   51796             :        // own data member and associated access function.
   51797             :        // static void set_builtin_type(SgTypeVoid* builtin_type);
   51798             : 
   51799             :       //! function returns example of type
   51800             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   51801             :        // static SgTypeVoid* createType(void);
   51802             :           static SgTypeVoid* createType(SgExpression* optional_fortran_type_kind = NULL);
   51803             : 
   51804             : 
   51805             : // End of memberFunctionString
   51806             : 
   51807             : 
   51808             : 
   51809             :      public: 
   51810             :          virtual ~SgTypeVoid();
   51811             : 
   51812             : 
   51813             :      public: 
   51814             :          SgTypeVoid(); 
   51815             : 
   51816             :     protected:
   51817             : // Start of memberFunctionString
   51818             : static SgTypeVoid* p_builtin_type;
   51819             :           
   51820             : // End of memberFunctionString
   51821             : 
   51822             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeVoid>;
   51823             : 
   51824             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51825             : 
   51826             : 
   51827             :    };
   51828             : #endif
   51829             : 
   51830             : // postdeclarations for SgTypeVoid
   51831             : 
   51832             : /* #line 51833 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51833             : 
   51834             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   51835             : 
   51836             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51837             : 
   51838             : 
   51839             : /* #line 51840 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51840             : 
   51841             : 
   51842             : 
   51843             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51844             : 
   51845             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   51846             : //      This code is automatically generated for each 
   51847             : //      terminal and non-terminal within the defined 
   51848             : //      grammar.  There is a simple way to change the 
   51849             : //      code to fix bugs etc.  See the ROSE README file
   51850             : //      for directions.
   51851             : 
   51852             : // tps: (02/22/2010): Adding DLL export requirements
   51853             : #include "rosedll.h"
   51854             : 
   51855             : // predeclarations for SgTypeGlobalVoid
   51856             : 
   51857             : /* #line 51858 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51858             : 
   51859             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   51860             : 
   51861             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   51862             : 
   51863             : #if 1
   51864             : // Class Definition for SgTypeGlobalVoid
   51865             : class ROSE_DLL_API SgTypeGlobalVoid  : public SgType
   51866             :    {
   51867             :      public:
   51868             : 
   51869             : 
   51870             : /* #line 51871 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   51871             : 
   51872             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   51873             : // Start of memberFunctionString
   51874             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   51875             : 
   51876             : // *** COMMON CODE SECTION BEGINS HERE ***
   51877             : 
   51878             :     public:
   51879             : 
   51880             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   51881             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   51882             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   51883             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   51884             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   51885             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   51886             : 
   51887             :       /*! \brief returns a string representing the class name */
   51888             :           virtual std::string class_name() const override;
   51889             : 
   51890             :       /*! \brief returns new style SageIII enum values */
   51891             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   51892             : 
   51893             :       /*! \brief static variant value */
   51894             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   51895             :        // static const VariantT static_variant = V_SgTypeGlobalVoid;
   51896             :           enum { static_variant = V_SgTypeGlobalVoid };
   51897             : 
   51898             :        /* the generated cast function */
   51899             :       /*! \brief Casts pointer from base class to derived class */
   51900             :           ROSE_DLL_API friend       SgTypeGlobalVoid* isSgTypeGlobalVoid(       SgNode * s );
   51901             : 
   51902             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   51903             :           ROSE_DLL_API friend const SgTypeGlobalVoid* isSgTypeGlobalVoid( const SgNode * s );
   51904             : 
   51905             :      // ******************************************
   51906             :      // * Memory Pool / New / Delete
   51907             :      // ******************************************
   51908             : 
   51909             :      public:
   51910             :           /// \private
   51911             :           static const unsigned pool_size; //
   51912             :           /// \private
   51913             :           static std::vector<unsigned char *> pools; //
   51914             :           /// \private
   51915             :           static SgTypeGlobalVoid * next_node; // 
   51916             : 
   51917             :           /// \private
   51918             :           static unsigned long initializeStorageClassArray(SgTypeGlobalVoidStorageClass *); //
   51919             : 
   51920             :           /// \private
   51921             :           static void clearMemoryPool(); //
   51922             :           static void deleteMemoryPool(); //
   51923             : 
   51924             :           /// \private
   51925             :           static void extendMemoryPoolForFileIO(); //
   51926             : 
   51927             :           /// \private
   51928             :           static SgTypeGlobalVoid * getPointerFromGlobalIndex(unsigned long); //
   51929             :           /// \private
   51930             :           static SgTypeGlobalVoid * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   51931             : 
   51932             :           /// \private
   51933             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   51934             :           /// \private
   51935             :           static void resetValidFreepointers(); //
   51936             :           /// \private
   51937             :           static unsigned long getNumberOfLastValidPointer(); //
   51938             : 
   51939             : 
   51940             : #if defined(INLINE_FUNCTIONS)
   51941             :       /*! \brief returns pointer to newly allocated IR node */
   51942             :           inline void *operator new (size_t size);
   51943             : #else
   51944             :       /*! \brief returns pointer to newly allocated IR node */
   51945             :           void *operator new (size_t size);
   51946             : #endif
   51947             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   51948             :           void operator delete (void* pointer, size_t size);
   51949             : 
   51950             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   51951           0 :           void operator delete (void* pointer)
   51952             :              {
   51953             :             // This is the generated delete operator...
   51954           0 :                SgTypeGlobalVoid::operator delete (pointer,sizeof(SgTypeGlobalVoid));
   51955             :              }
   51956             : 
   51957             :       /*! \brief Returns the total number of IR nodes of this type */
   51958             :           static size_t numberOfNodes();
   51959             : 
   51960             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   51961             :           static size_t memoryUsage();
   51962             : 
   51963             :       // End of scope which started in IR nodes specific code 
   51964             :       /* */
   51965             : 
   51966             :       /* name Internal Functions
   51967             :           \brief Internal functions ... incomplete-documentation
   51968             : 
   51969             :           These functions have been made public as part of the design, but they are suggested for internal use 
   51970             :           or by particularly knowledgeable users for specialized tools or applications.
   51971             : 
   51972             :           \internal We could not make these private because they are required by user for special purposes. And 
   51973             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   51974             :          
   51975             :        */
   51976             : 
   51977             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   51978             :        // overridden in every class by *generated* implementation
   51979             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   51980             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   51981             :        // MS: 06/28/02 container of names of variables or container indices 
   51982             :        // used used in the traversal to access AST successor nodes
   51983             :        // overridden in every class by *generated* implementation
   51984             :       /*! \brief container of names of variables or container indices used used in the traversal
   51985             :           to access AST successor nodes overridden in every class by *generated* implementation */
   51986             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   51987             : 
   51988             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   51989             :        // than all the vector copies. The implementation for these functions is generated for each class.
   51990             :       /*! \brief return number of children in the traversal successor list */
   51991             :           virtual size_t get_numberOfTraversalSuccessors() override;
   51992             :       /*! \brief index-based access to traversal successors by index number */
   51993             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   51994             :       /*! \brief index-based access to traversal successors by child node */
   51995             :           virtual size_t get_childIndex(SgNode *child) override;
   51996             : 
   51997             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   51998             :        // MS: 08/16/2002 method for generating RTI information
   51999             :       /*! \brief return C++ Runtime-Time-Information */
   52000             :           virtual RTIReturnType roseRTI() override;
   52001             : #endif
   52002             :       /* */
   52003             : 
   52004             : 
   52005             : 
   52006             :       /* name Deprecated Functions
   52007             :           \brief Deprecated functions ... incomplete-documentation
   52008             : 
   52009             :           These functions have been deprecated from use.
   52010             :        */
   52011             :       /* */
   52012             : 
   52013             :       /*! returns a C style string (char*) representing the class name */
   52014             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   52015             : 
   52016             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   52017             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   52018             : #if 0
   52019             :       /*! returns old style Sage II enum values */
   52020             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   52021             :       /*! returns old style Sage II enum values */
   52022             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   52023             : #endif
   52024             :       /* */
   52025             : 
   52026             : 
   52027             : 
   52028             : 
   52029             :      public:
   52030             :       /* name Traversal Support Functions
   52031             :           \brief Traversal support functions ... incomplete-documentation
   52032             : 
   52033             :           These functions have been made public as part of the design, but they are suggested for internal use 
   52034             :           or by particularly knowledgable users for specialized tools or applications.
   52035             :        */
   52036             :       /* */
   52037             : 
   52038             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   52039             :        // (inferior to ROSE traversal mechanism, experimental).
   52040             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   52041             :        */
   52042             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   52043             : 
   52044             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   52045             :       /*! \brief support for the classic visitor pattern done in GoF */
   52046             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   52047             : 
   52048             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   52049             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   52050             :        */
   52051             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   52052             : 
   52053             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   52054             :        */
   52055             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   52056             : 
   52057             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   52058             :        // This traversal helps support internal tools that call static member functions.
   52059             :        // note: this function operates on the memory pools.
   52060             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   52061             :        */
   52062             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   52063             :       /* */
   52064             : 
   52065             : 
   52066             :      public:
   52067             :       /* name Memory Allocation Functions
   52068             :           \brief Memory allocations functions ... incomplete-documentation
   52069             : 
   52070             :           These functions have been made public as part of the design, but they are suggested for internal use 
   52071             :           or by particularly knowledgable users for specialized tools or applications.
   52072             :        */
   52073             :       /* */
   52074             : 
   52075             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   52076             : 
   52077             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   52078             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   52079             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   52080             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   52081             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   52082             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   52083             :           being used with the AST File I/O mechanism.
   52084             :        */
   52085             :           virtual bool isInMemoryPool() override;
   52086             : 
   52087             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   52088             : 
   52089             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   52090             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   52091             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   52092             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   52093             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   52094             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   52095             :           being used with the AST File I/O mechanism.
   52096             :        */
   52097             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   52098             : 
   52099             :       // DQ (4/30/2006): Modified to be a const function.
   52100             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   52101             : 
   52102             :           This functions is part of general support for many possible tools to operate 
   52103             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   52104             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   52105             :           less than the set of pointers used by the AST file I/O. This is part of
   52106             :           work implemented by Andreas, and support tools such as the AST graph generation.
   52107             : 
   52108             :           \warning This function can return unexpected data members and thus the 
   52109             :                    order and the number of elements is unpredicable and subject 
   52110             :                    to change.
   52111             : 
   52112             :           \returns STL vector of pairs of SgNode* and strings
   52113             :        */
   52114             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   52115             : 
   52116             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   52117             : 
   52118             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   52119             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   52120             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   52121             : 
   52122             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   52123             :                    and subject to change.
   52124             :        */
   52125             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   52126             : 
   52127             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   52128             : 
   52129             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   52130             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   52131             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   52132             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   52133             : 
   52134             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   52135             : 
   52136             :           \returns long
   52137             :        */
   52138             :           virtual long getChildIndex( SgNode* childNode ) const override;
   52139             : 
   52140             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   52141             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   52142             :       /* \brief Constructor for use by AST File I/O Mechanism
   52143             : 
   52144             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   52145             :           which obtained via fast binary file I/O from disk.
   52146             :        */
   52147             :        // SgTypeGlobalVoid( SgTypeGlobalVoidStorageClass& source );
   52148             : 
   52149             : 
   52150             : 
   52151             : 
   52152             : 
   52153             :  // JH (10/24/2005): methods added to support the ast file IO
   52154             :     private:
   52155             : 
   52156             :       /* name AST Memory Allocation Support Functions
   52157             :           \brief Memory allocations support....
   52158             : 
   52159             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   52160             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   52161             :           and support the AST File I/O Mechanism.
   52162             :        */
   52163             :       /* */
   52164             : 
   52165             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   52166             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   52167             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   52168             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   52169             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   52170             :           a correspinding one in the AST_FILE_IO class!
   52171             :        */
   52172             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   52173             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   52174             :       /* \brief Typedef used for low level memory access.
   52175             :        */
   52176             :        // typedef unsigned char* TestType;
   52177             : 
   52178             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   52179             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   52180             :       /* \brief Typedef used to hold memory addresses as values.
   52181             :        */
   52182             :        // typedef unsigned long  AddressType;
   52183             : 
   52184             : 
   52185             : 
   52186             :        // necessary, to have direct access to the p_freepointer and the private methods !
   52187             :       /*! \brief friend class declaration to support AST File I/O */
   52188             :           friend class AST_FILE_IO;
   52189             : 
   52190             :       /*! \brief friend class declaration to support AST File I/O */
   52191             :           friend class SgTypeGlobalVoidStorageClass;
   52192             : 
   52193             :       /*! \brief friend class declaration to support AST File I/O */
   52194             :           friend class AstSpecificDataManagingClass;
   52195             : 
   52196             :       /*! \brief friend class declaration to support AST File I/O */
   52197             :           friend class AstSpecificDataManagingClassStorageClass;
   52198             :     public:
   52199             :       /*! \brief IR node constructor to support AST File I/O */
   52200             :           SgTypeGlobalVoid( const SgTypeGlobalVoidStorageClass& source );
   52201             : 
   52202             :  // private: // JJW hack
   52203             :        /*
   52204             :           name AST Memory Allocation Support Variables
   52205             :           Memory allocations support variables 
   52206             : 
   52207             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   52208             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   52209             :           and support the AST File I/O Mechanism.
   52210             :        */
   52211             :       /* */
   52212             : 
   52213             :     public:
   52214             : 
   52215             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   52216             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   52217             :       // virtual SgNode* addRegExpAttribute();
   52218             :       /*! \brief Support for AST matching using regular expression.
   52219             : 
   52220             :           This support is incomplete and the subject of current research to define 
   52221             :           RegEx trees to support inexact matching.
   52222             :        */
   52223             :           SgTypeGlobalVoid* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   52224             : 
   52225             : // *** COMMON CODE SECTION ENDS HERE ***
   52226             : 
   52227             : 
   52228             : // End of memberFunctionString
   52229             : // Start of memberFunctionString
   52230             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   52231             : 
   52232             :      // the generated cast function
   52233             :      // friend ROSE_DLL_API SgTypeGlobalVoid* isSgTypeGlobalVoid ( SgNode* s );
   52234             : 
   52235             :           typedef SgType base_node_type;
   52236             : 
   52237             : 
   52238             : // End of memberFunctionString
   52239             : // Start of memberFunctionString
   52240             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   52241             : 
   52242             :        // SgName get_mangled ( SgUnparse_Info & info );
   52243             : 
   52244             :       //! Mangled name support for unparser support
   52245             :        // SgName get_mangled ( SgUnparse_Info & info );
   52246             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   52247             :           virtual SgName get_mangled (void) const override;
   52248             : 
   52249             : 
   52250             : 
   52251             : // End of memberFunctionString
   52252             : // Start of memberFunctionString
   52253             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   52254             : 
   52255             :       //! example of type used where construction is particularly simple
   52256             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   52257             :        // static SgTypeGlobalVoid builtin_type;
   52258             :        // static SgTypeGlobalVoid* builtin_type;
   52259             : 
   52260             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   52261             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   52262             :        // own data member and associated access function.
   52263             :        // static SgTypeGlobalVoid* get_builtin_type();
   52264             : 
   52265             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   52266             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   52267             :        // own data member and associated access function.
   52268             :        // static void set_builtin_type(SgTypeGlobalVoid* builtin_type);
   52269             : 
   52270             :       //! function returns example of type
   52271             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   52272             :        // static SgTypeGlobalVoid* createType(void);
   52273             :           static SgTypeGlobalVoid* createType(SgExpression* optional_fortran_type_kind = NULL);
   52274             : 
   52275             : 
   52276             : // End of memberFunctionString
   52277             : 
   52278             : 
   52279             : 
   52280             :      public: 
   52281             :          virtual ~SgTypeGlobalVoid();
   52282             : 
   52283             : 
   52284             :      public: 
   52285             :          SgTypeGlobalVoid(); 
   52286             : 
   52287             :     protected:
   52288             : // Start of memberFunctionString
   52289             : static SgTypeGlobalVoid* p_builtin_type;
   52290             :           
   52291             : // End of memberFunctionString
   52292             : 
   52293             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeGlobalVoid>;
   52294             : 
   52295             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52296             : 
   52297             : 
   52298             :    };
   52299             : #endif
   52300             : 
   52301             : // postdeclarations for SgTypeGlobalVoid
   52302             : 
   52303             : /* #line 52304 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52304             : 
   52305             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   52306             : 
   52307             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52308             : 
   52309             : 
   52310             : /* #line 52311 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52311             : 
   52312             : 
   52313             : 
   52314             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52315             : 
   52316             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   52317             : //      This code is automatically generated for each 
   52318             : //      terminal and non-terminal within the defined 
   52319             : //      grammar.  There is a simple way to change the 
   52320             : //      code to fix bugs etc.  See the ROSE README file
   52321             : //      for directions.
   52322             : 
   52323             : // tps: (02/22/2010): Adding DLL export requirements
   52324             : #include "rosedll.h"
   52325             : 
   52326             : // predeclarations for SgTypeWchar
   52327             : 
   52328             : /* #line 52329 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52329             : 
   52330             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   52331             : 
   52332             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52333             : 
   52334             : #if 1
   52335             : // Class Definition for SgTypeWchar
   52336             : class ROSE_DLL_API SgTypeWchar  : public SgType
   52337             :    {
   52338             :      public:
   52339             : 
   52340             : 
   52341             : /* #line 52342 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52342             : 
   52343             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   52344             : // Start of memberFunctionString
   52345             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   52346             : 
   52347             : // *** COMMON CODE SECTION BEGINS HERE ***
   52348             : 
   52349             :     public:
   52350             : 
   52351             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   52352             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   52353             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   52354             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   52355             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   52356             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   52357             : 
   52358             :       /*! \brief returns a string representing the class name */
   52359             :           virtual std::string class_name() const override;
   52360             : 
   52361             :       /*! \brief returns new style SageIII enum values */
   52362             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   52363             : 
   52364             :       /*! \brief static variant value */
   52365             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   52366             :        // static const VariantT static_variant = V_SgTypeWchar;
   52367             :           enum { static_variant = V_SgTypeWchar };
   52368             : 
   52369             :        /* the generated cast function */
   52370             :       /*! \brief Casts pointer from base class to derived class */
   52371             :           ROSE_DLL_API friend       SgTypeWchar* isSgTypeWchar(       SgNode * s );
   52372             : 
   52373             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   52374             :           ROSE_DLL_API friend const SgTypeWchar* isSgTypeWchar( const SgNode * s );
   52375             : 
   52376             :      // ******************************************
   52377             :      // * Memory Pool / New / Delete
   52378             :      // ******************************************
   52379             : 
   52380             :      public:
   52381             :           /// \private
   52382             :           static const unsigned pool_size; //
   52383             :           /// \private
   52384             :           static std::vector<unsigned char *> pools; //
   52385             :           /// \private
   52386             :           static SgTypeWchar * next_node; // 
   52387             : 
   52388             :           /// \private
   52389             :           static unsigned long initializeStorageClassArray(SgTypeWcharStorageClass *); //
   52390             : 
   52391             :           /// \private
   52392             :           static void clearMemoryPool(); //
   52393             :           static void deleteMemoryPool(); //
   52394             : 
   52395             :           /// \private
   52396             :           static void extendMemoryPoolForFileIO(); //
   52397             : 
   52398             :           /// \private
   52399             :           static SgTypeWchar * getPointerFromGlobalIndex(unsigned long); //
   52400             :           /// \private
   52401             :           static SgTypeWchar * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   52402             : 
   52403             :           /// \private
   52404             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   52405             :           /// \private
   52406             :           static void resetValidFreepointers(); //
   52407             :           /// \private
   52408             :           static unsigned long getNumberOfLastValidPointer(); //
   52409             : 
   52410             : 
   52411             : #if defined(INLINE_FUNCTIONS)
   52412             :       /*! \brief returns pointer to newly allocated IR node */
   52413             :           inline void *operator new (size_t size);
   52414             : #else
   52415             :       /*! \brief returns pointer to newly allocated IR node */
   52416             :           void *operator new (size_t size);
   52417             : #endif
   52418             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   52419             :           void operator delete (void* pointer, size_t size);
   52420             : 
   52421             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   52422           2 :           void operator delete (void* pointer)
   52423             :              {
   52424             :             // This is the generated delete operator...
   52425           2 :                SgTypeWchar::operator delete (pointer,sizeof(SgTypeWchar));
   52426             :              }
   52427             : 
   52428             :       /*! \brief Returns the total number of IR nodes of this type */
   52429             :           static size_t numberOfNodes();
   52430             : 
   52431             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   52432             :           static size_t memoryUsage();
   52433             : 
   52434             :       // End of scope which started in IR nodes specific code 
   52435             :       /* */
   52436             : 
   52437             :       /* name Internal Functions
   52438             :           \brief Internal functions ... incomplete-documentation
   52439             : 
   52440             :           These functions have been made public as part of the design, but they are suggested for internal use 
   52441             :           or by particularly knowledgeable users for specialized tools or applications.
   52442             : 
   52443             :           \internal We could not make these private because they are required by user for special purposes. And 
   52444             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   52445             :          
   52446             :        */
   52447             : 
   52448             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   52449             :        // overridden in every class by *generated* implementation
   52450             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   52451             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   52452             :        // MS: 06/28/02 container of names of variables or container indices 
   52453             :        // used used in the traversal to access AST successor nodes
   52454             :        // overridden in every class by *generated* implementation
   52455             :       /*! \brief container of names of variables or container indices used used in the traversal
   52456             :           to access AST successor nodes overridden in every class by *generated* implementation */
   52457             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   52458             : 
   52459             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   52460             :        // than all the vector copies. The implementation for these functions is generated for each class.
   52461             :       /*! \brief return number of children in the traversal successor list */
   52462             :           virtual size_t get_numberOfTraversalSuccessors() override;
   52463             :       /*! \brief index-based access to traversal successors by index number */
   52464             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   52465             :       /*! \brief index-based access to traversal successors by child node */
   52466             :           virtual size_t get_childIndex(SgNode *child) override;
   52467             : 
   52468             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   52469             :        // MS: 08/16/2002 method for generating RTI information
   52470             :       /*! \brief return C++ Runtime-Time-Information */
   52471             :           virtual RTIReturnType roseRTI() override;
   52472             : #endif
   52473             :       /* */
   52474             : 
   52475             : 
   52476             : 
   52477             :       /* name Deprecated Functions
   52478             :           \brief Deprecated functions ... incomplete-documentation
   52479             : 
   52480             :           These functions have been deprecated from use.
   52481             :        */
   52482             :       /* */
   52483             : 
   52484             :       /*! returns a C style string (char*) representing the class name */
   52485             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   52486             : 
   52487             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   52488             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   52489             : #if 0
   52490             :       /*! returns old style Sage II enum values */
   52491             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   52492             :       /*! returns old style Sage II enum values */
   52493             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   52494             : #endif
   52495             :       /* */
   52496             : 
   52497             : 
   52498             : 
   52499             : 
   52500             :      public:
   52501             :       /* name Traversal Support Functions
   52502             :           \brief Traversal support functions ... incomplete-documentation
   52503             : 
   52504             :           These functions have been made public as part of the design, but they are suggested for internal use 
   52505             :           or by particularly knowledgable users for specialized tools or applications.
   52506             :        */
   52507             :       /* */
   52508             : 
   52509             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   52510             :        // (inferior to ROSE traversal mechanism, experimental).
   52511             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   52512             :        */
   52513             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   52514             : 
   52515             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   52516             :       /*! \brief support for the classic visitor pattern done in GoF */
   52517             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   52518             : 
   52519             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   52520             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   52521             :        */
   52522             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   52523             : 
   52524             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   52525             :        */
   52526             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   52527             : 
   52528             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   52529             :        // This traversal helps support internal tools that call static member functions.
   52530             :        // note: this function operates on the memory pools.
   52531             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   52532             :        */
   52533             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   52534             :       /* */
   52535             : 
   52536             : 
   52537             :      public:
   52538             :       /* name Memory Allocation Functions
   52539             :           \brief Memory allocations functions ... incomplete-documentation
   52540             : 
   52541             :           These functions have been made public as part of the design, but they are suggested for internal use 
   52542             :           or by particularly knowledgable users for specialized tools or applications.
   52543             :        */
   52544             :       /* */
   52545             : 
   52546             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   52547             : 
   52548             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   52549             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   52550             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   52551             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   52552             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   52553             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   52554             :           being used with the AST File I/O mechanism.
   52555             :        */
   52556             :           virtual bool isInMemoryPool() override;
   52557             : 
   52558             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   52559             : 
   52560             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   52561             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   52562             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   52563             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   52564             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   52565             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   52566             :           being used with the AST File I/O mechanism.
   52567             :        */
   52568             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   52569             : 
   52570             :       // DQ (4/30/2006): Modified to be a const function.
   52571             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   52572             : 
   52573             :           This functions is part of general support for many possible tools to operate 
   52574             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   52575             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   52576             :           less than the set of pointers used by the AST file I/O. This is part of
   52577             :           work implemented by Andreas, and support tools such as the AST graph generation.
   52578             : 
   52579             :           \warning This function can return unexpected data members and thus the 
   52580             :                    order and the number of elements is unpredicable and subject 
   52581             :                    to change.
   52582             : 
   52583             :           \returns STL vector of pairs of SgNode* and strings
   52584             :        */
   52585             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   52586             : 
   52587             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   52588             : 
   52589             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   52590             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   52591             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   52592             : 
   52593             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   52594             :                    and subject to change.
   52595             :        */
   52596             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   52597             : 
   52598             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   52599             : 
   52600             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   52601             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   52602             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   52603             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   52604             : 
   52605             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   52606             : 
   52607             :           \returns long
   52608             :        */
   52609             :           virtual long getChildIndex( SgNode* childNode ) const override;
   52610             : 
   52611             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   52612             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   52613             :       /* \brief Constructor for use by AST File I/O Mechanism
   52614             : 
   52615             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   52616             :           which obtained via fast binary file I/O from disk.
   52617             :        */
   52618             :        // SgTypeWchar( SgTypeWcharStorageClass& source );
   52619             : 
   52620             : 
   52621             : 
   52622             : 
   52623             : 
   52624             :  // JH (10/24/2005): methods added to support the ast file IO
   52625             :     private:
   52626             : 
   52627             :       /* name AST Memory Allocation Support Functions
   52628             :           \brief Memory allocations support....
   52629             : 
   52630             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   52631             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   52632             :           and support the AST File I/O Mechanism.
   52633             :        */
   52634             :       /* */
   52635             : 
   52636             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   52637             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   52638             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   52639             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   52640             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   52641             :           a correspinding one in the AST_FILE_IO class!
   52642             :        */
   52643             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   52644             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   52645             :       /* \brief Typedef used for low level memory access.
   52646             :        */
   52647             :        // typedef unsigned char* TestType;
   52648             : 
   52649             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   52650             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   52651             :       /* \brief Typedef used to hold memory addresses as values.
   52652             :        */
   52653             :        // typedef unsigned long  AddressType;
   52654             : 
   52655             : 
   52656             : 
   52657             :        // necessary, to have direct access to the p_freepointer and the private methods !
   52658             :       /*! \brief friend class declaration to support AST File I/O */
   52659             :           friend class AST_FILE_IO;
   52660             : 
   52661             :       /*! \brief friend class declaration to support AST File I/O */
   52662             :           friend class SgTypeWcharStorageClass;
   52663             : 
   52664             :       /*! \brief friend class declaration to support AST File I/O */
   52665             :           friend class AstSpecificDataManagingClass;
   52666             : 
   52667             :       /*! \brief friend class declaration to support AST File I/O */
   52668             :           friend class AstSpecificDataManagingClassStorageClass;
   52669             :     public:
   52670             :       /*! \brief IR node constructor to support AST File I/O */
   52671             :           SgTypeWchar( const SgTypeWcharStorageClass& source );
   52672             : 
   52673             :  // private: // JJW hack
   52674             :        /*
   52675             :           name AST Memory Allocation Support Variables
   52676             :           Memory allocations support variables 
   52677             : 
   52678             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   52679             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   52680             :           and support the AST File I/O Mechanism.
   52681             :        */
   52682             :       /* */
   52683             : 
   52684             :     public:
   52685             : 
   52686             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   52687             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   52688             :       // virtual SgNode* addRegExpAttribute();
   52689             :       /*! \brief Support for AST matching using regular expression.
   52690             : 
   52691             :           This support is incomplete and the subject of current research to define 
   52692             :           RegEx trees to support inexact matching.
   52693             :        */
   52694             :           SgTypeWchar* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   52695             : 
   52696             : // *** COMMON CODE SECTION ENDS HERE ***
   52697             : 
   52698             : 
   52699             : // End of memberFunctionString
   52700             : // Start of memberFunctionString
   52701             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   52702             : 
   52703             :      // the generated cast function
   52704             :      // friend ROSE_DLL_API SgTypeWchar* isSgTypeWchar ( SgNode* s );
   52705             : 
   52706             :           typedef SgType base_node_type;
   52707             : 
   52708             : 
   52709             : // End of memberFunctionString
   52710             : // Start of memberFunctionString
   52711             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   52712             : 
   52713             :        // SgName get_mangled ( SgUnparse_Info & info );
   52714             : 
   52715             :       //! Mangled name support for unparser support
   52716             :        // SgName get_mangled ( SgUnparse_Info & info );
   52717             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   52718             :           virtual SgName get_mangled (void) const override;
   52719             : 
   52720             : 
   52721             : 
   52722             : // End of memberFunctionString
   52723             : // Start of memberFunctionString
   52724             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   52725             : 
   52726             :       //! example of type used where construction is particularly simple
   52727             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   52728             :        // static SgTypeWchar builtin_type;
   52729             :        // static SgTypeWchar* builtin_type;
   52730             : 
   52731             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   52732             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   52733             :        // own data member and associated access function.
   52734             :        // static SgTypeWchar* get_builtin_type();
   52735             : 
   52736             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   52737             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   52738             :        // own data member and associated access function.
   52739             :        // static void set_builtin_type(SgTypeWchar* builtin_type);
   52740             : 
   52741             :       //! function returns example of type
   52742             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   52743             :        // static SgTypeWchar* createType(void);
   52744             :           static SgTypeWchar* createType(SgExpression* optional_fortran_type_kind = NULL);
   52745             : 
   52746             : 
   52747             : // End of memberFunctionString
   52748             : 
   52749             : 
   52750             : 
   52751             :      public: 
   52752             :          virtual ~SgTypeWchar();
   52753             : 
   52754             : 
   52755             :      public: 
   52756             :          SgTypeWchar(); 
   52757             : 
   52758             :     protected:
   52759             : // Start of memberFunctionString
   52760             : static SgTypeWchar* p_builtin_type;
   52761             :           
   52762             : // End of memberFunctionString
   52763             : 
   52764             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeWchar>;
   52765             : 
   52766             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52767             : 
   52768             : 
   52769             :    };
   52770             : #endif
   52771             : 
   52772             : // postdeclarations for SgTypeWchar
   52773             : 
   52774             : /* #line 52775 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52775             : 
   52776             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   52777             : 
   52778             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52779             : 
   52780             : 
   52781             : /* #line 52782 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52782             : 
   52783             : 
   52784             : 
   52785             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52786             : 
   52787             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   52788             : //      This code is automatically generated for each 
   52789             : //      terminal and non-terminal within the defined 
   52790             : //      grammar.  There is a simple way to change the 
   52791             : //      code to fix bugs etc.  See the ROSE README file
   52792             : //      for directions.
   52793             : 
   52794             : // tps: (02/22/2010): Adding DLL export requirements
   52795             : #include "rosedll.h"
   52796             : 
   52797             : // predeclarations for SgTypeFloat
   52798             : 
   52799             : /* #line 52800 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52800             : 
   52801             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   52802             : 
   52803             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   52804             : 
   52805             : #if 1
   52806             : // Class Definition for SgTypeFloat
   52807             : class ROSE_DLL_API SgTypeFloat  : public SgType
   52808             :    {
   52809             :      public:
   52810             : 
   52811             : 
   52812             : /* #line 52813 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   52813             : 
   52814             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   52815             : // Start of memberFunctionString
   52816             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   52817             : 
   52818             : // *** COMMON CODE SECTION BEGINS HERE ***
   52819             : 
   52820             :     public:
   52821             : 
   52822             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   52823             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   52824             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   52825             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   52826             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   52827             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   52828             : 
   52829             :       /*! \brief returns a string representing the class name */
   52830             :           virtual std::string class_name() const override;
   52831             : 
   52832             :       /*! \brief returns new style SageIII enum values */
   52833             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   52834             : 
   52835             :       /*! \brief static variant value */
   52836             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   52837             :        // static const VariantT static_variant = V_SgTypeFloat;
   52838             :           enum { static_variant = V_SgTypeFloat };
   52839             : 
   52840             :        /* the generated cast function */
   52841             :       /*! \brief Casts pointer from base class to derived class */
   52842             :           ROSE_DLL_API friend       SgTypeFloat* isSgTypeFloat(       SgNode * s );
   52843             : 
   52844             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   52845             :           ROSE_DLL_API friend const SgTypeFloat* isSgTypeFloat( const SgNode * s );
   52846             : 
   52847             :      // ******************************************
   52848             :      // * Memory Pool / New / Delete
   52849             :      // ******************************************
   52850             : 
   52851             :      public:
   52852             :           /// \private
   52853             :           static const unsigned pool_size; //
   52854             :           /// \private
   52855             :           static std::vector<unsigned char *> pools; //
   52856             :           /// \private
   52857             :           static SgTypeFloat * next_node; // 
   52858             : 
   52859             :           /// \private
   52860             :           static unsigned long initializeStorageClassArray(SgTypeFloatStorageClass *); //
   52861             : 
   52862             :           /// \private
   52863             :           static void clearMemoryPool(); //
   52864             :           static void deleteMemoryPool(); //
   52865             : 
   52866             :           /// \private
   52867             :           static void extendMemoryPoolForFileIO(); //
   52868             : 
   52869             :           /// \private
   52870             :           static SgTypeFloat * getPointerFromGlobalIndex(unsigned long); //
   52871             :           /// \private
   52872             :           static SgTypeFloat * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   52873             : 
   52874             :           /// \private
   52875             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   52876             :           /// \private
   52877             :           static void resetValidFreepointers(); //
   52878             :           /// \private
   52879             :           static unsigned long getNumberOfLastValidPointer(); //
   52880             : 
   52881             : 
   52882             : #if defined(INLINE_FUNCTIONS)
   52883             :       /*! \brief returns pointer to newly allocated IR node */
   52884             :           inline void *operator new (size_t size);
   52885             : #else
   52886             :       /*! \brief returns pointer to newly allocated IR node */
   52887             :           void *operator new (size_t size);
   52888             : #endif
   52889             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   52890             :           void operator delete (void* pointer, size_t size);
   52891             : 
   52892             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   52893         828 :           void operator delete (void* pointer)
   52894             :              {
   52895             :             // This is the generated delete operator...
   52896         828 :                SgTypeFloat::operator delete (pointer,sizeof(SgTypeFloat));
   52897             :              }
   52898             : 
   52899             :       /*! \brief Returns the total number of IR nodes of this type */
   52900             :           static size_t numberOfNodes();
   52901             : 
   52902             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   52903             :           static size_t memoryUsage();
   52904             : 
   52905             :       // End of scope which started in IR nodes specific code 
   52906             :       /* */
   52907             : 
   52908             :       /* name Internal Functions
   52909             :           \brief Internal functions ... incomplete-documentation
   52910             : 
   52911             :           These functions have been made public as part of the design, but they are suggested for internal use 
   52912             :           or by particularly knowledgeable users for specialized tools or applications.
   52913             : 
   52914             :           \internal We could not make these private because they are required by user for special purposes. And 
   52915             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   52916             :          
   52917             :        */
   52918             : 
   52919             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   52920             :        // overridden in every class by *generated* implementation
   52921             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   52922             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   52923             :        // MS: 06/28/02 container of names of variables or container indices 
   52924             :        // used used in the traversal to access AST successor nodes
   52925             :        // overridden in every class by *generated* implementation
   52926             :       /*! \brief container of names of variables or container indices used used in the traversal
   52927             :           to access AST successor nodes overridden in every class by *generated* implementation */
   52928             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   52929             : 
   52930             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   52931             :        // than all the vector copies. The implementation for these functions is generated for each class.
   52932             :       /*! \brief return number of children in the traversal successor list */
   52933             :           virtual size_t get_numberOfTraversalSuccessors() override;
   52934             :       /*! \brief index-based access to traversal successors by index number */
   52935             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   52936             :       /*! \brief index-based access to traversal successors by child node */
   52937             :           virtual size_t get_childIndex(SgNode *child) override;
   52938             : 
   52939             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   52940             :        // MS: 08/16/2002 method for generating RTI information
   52941             :       /*! \brief return C++ Runtime-Time-Information */
   52942             :           virtual RTIReturnType roseRTI() override;
   52943             : #endif
   52944             :       /* */
   52945             : 
   52946             : 
   52947             : 
   52948             :       /* name Deprecated Functions
   52949             :           \brief Deprecated functions ... incomplete-documentation
   52950             : 
   52951             :           These functions have been deprecated from use.
   52952             :        */
   52953             :       /* */
   52954             : 
   52955             :       /*! returns a C style string (char*) representing the class name */
   52956             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   52957             : 
   52958             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   52959             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   52960             : #if 0
   52961             :       /*! returns old style Sage II enum values */
   52962             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   52963             :       /*! returns old style Sage II enum values */
   52964             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   52965             : #endif
   52966             :       /* */
   52967             : 
   52968             : 
   52969             : 
   52970             : 
   52971             :      public:
   52972             :       /* name Traversal Support Functions
   52973             :           \brief Traversal support functions ... incomplete-documentation
   52974             : 
   52975             :           These functions have been made public as part of the design, but they are suggested for internal use 
   52976             :           or by particularly knowledgable users for specialized tools or applications.
   52977             :        */
   52978             :       /* */
   52979             : 
   52980             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   52981             :        // (inferior to ROSE traversal mechanism, experimental).
   52982             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   52983             :        */
   52984             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   52985             : 
   52986             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   52987             :       /*! \brief support for the classic visitor pattern done in GoF */
   52988             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   52989             : 
   52990             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   52991             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   52992             :        */
   52993             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   52994             : 
   52995             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   52996             :        */
   52997             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   52998             : 
   52999             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   53000             :        // This traversal helps support internal tools that call static member functions.
   53001             :        // note: this function operates on the memory pools.
   53002             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   53003             :        */
   53004             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   53005             :       /* */
   53006             : 
   53007             : 
   53008             :      public:
   53009             :       /* name Memory Allocation Functions
   53010             :           \brief Memory allocations functions ... incomplete-documentation
   53011             : 
   53012             :           These functions have been made public as part of the design, but they are suggested for internal use 
   53013             :           or by particularly knowledgable users for specialized tools or applications.
   53014             :        */
   53015             :       /* */
   53016             : 
   53017             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   53018             : 
   53019             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   53020             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   53021             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   53022             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   53023             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   53024             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   53025             :           being used with the AST File I/O mechanism.
   53026             :        */
   53027             :           virtual bool isInMemoryPool() override;
   53028             : 
   53029             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   53030             : 
   53031             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   53032             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   53033             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   53034             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   53035             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   53036             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   53037             :           being used with the AST File I/O mechanism.
   53038             :        */
   53039             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   53040             : 
   53041             :       // DQ (4/30/2006): Modified to be a const function.
   53042             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   53043             : 
   53044             :           This functions is part of general support for many possible tools to operate 
   53045             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   53046             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   53047             :           less than the set of pointers used by the AST file I/O. This is part of
   53048             :           work implemented by Andreas, and support tools such as the AST graph generation.
   53049             : 
   53050             :           \warning This function can return unexpected data members and thus the 
   53051             :                    order and the number of elements is unpredicable and subject 
   53052             :                    to change.
   53053             : 
   53054             :           \returns STL vector of pairs of SgNode* and strings
   53055             :        */
   53056             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   53057             : 
   53058             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   53059             : 
   53060             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   53061             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   53062             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   53063             : 
   53064             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   53065             :                    and subject to change.
   53066             :        */
   53067             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   53068             : 
   53069             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   53070             : 
   53071             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   53072             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   53073             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   53074             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   53075             : 
   53076             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   53077             : 
   53078             :           \returns long
   53079             :        */
   53080             :           virtual long getChildIndex( SgNode* childNode ) const override;
   53081             : 
   53082             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   53083             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   53084             :       /* \brief Constructor for use by AST File I/O Mechanism
   53085             : 
   53086             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   53087             :           which obtained via fast binary file I/O from disk.
   53088             :        */
   53089             :        // SgTypeFloat( SgTypeFloatStorageClass& source );
   53090             : 
   53091             : 
   53092             : 
   53093             : 
   53094             : 
   53095             :  // JH (10/24/2005): methods added to support the ast file IO
   53096             :     private:
   53097             : 
   53098             :       /* name AST Memory Allocation Support Functions
   53099             :           \brief Memory allocations support....
   53100             : 
   53101             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   53102             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   53103             :           and support the AST File I/O Mechanism.
   53104             :        */
   53105             :       /* */
   53106             : 
   53107             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   53108             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   53109             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   53110             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   53111             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   53112             :           a correspinding one in the AST_FILE_IO class!
   53113             :        */
   53114             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   53115             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   53116             :       /* \brief Typedef used for low level memory access.
   53117             :        */
   53118             :        // typedef unsigned char* TestType;
   53119             : 
   53120             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   53121             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   53122             :       /* \brief Typedef used to hold memory addresses as values.
   53123             :        */
   53124             :        // typedef unsigned long  AddressType;
   53125             : 
   53126             : 
   53127             : 
   53128             :        // necessary, to have direct access to the p_freepointer and the private methods !
   53129             :       /*! \brief friend class declaration to support AST File I/O */
   53130             :           friend class AST_FILE_IO;
   53131             : 
   53132             :       /*! \brief friend class declaration to support AST File I/O */
   53133             :           friend class SgTypeFloatStorageClass;
   53134             : 
   53135             :       /*! \brief friend class declaration to support AST File I/O */
   53136             :           friend class AstSpecificDataManagingClass;
   53137             : 
   53138             :       /*! \brief friend class declaration to support AST File I/O */
   53139             :           friend class AstSpecificDataManagingClassStorageClass;
   53140             :     public:
   53141             :       /*! \brief IR node constructor to support AST File I/O */
   53142             :           SgTypeFloat( const SgTypeFloatStorageClass& source );
   53143             : 
   53144             :  // private: // JJW hack
   53145             :        /*
   53146             :           name AST Memory Allocation Support Variables
   53147             :           Memory allocations support variables 
   53148             : 
   53149             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   53150             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   53151             :           and support the AST File I/O Mechanism.
   53152             :        */
   53153             :       /* */
   53154             : 
   53155             :     public:
   53156             : 
   53157             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   53158             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   53159             :       // virtual SgNode* addRegExpAttribute();
   53160             :       /*! \brief Support for AST matching using regular expression.
   53161             : 
   53162             :           This support is incomplete and the subject of current research to define 
   53163             :           RegEx trees to support inexact matching.
   53164             :        */
   53165             :           SgTypeFloat* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   53166             : 
   53167             : // *** COMMON CODE SECTION ENDS HERE ***
   53168             : 
   53169             : 
   53170             : // End of memberFunctionString
   53171             : // Start of memberFunctionString
   53172             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   53173             : 
   53174             :      // the generated cast function
   53175             :      // friend ROSE_DLL_API SgTypeFloat* isSgTypeFloat ( SgNode* s );
   53176             : 
   53177             :           typedef SgType base_node_type;
   53178             : 
   53179             : 
   53180             : // End of memberFunctionString
   53181             : // Start of memberFunctionString
   53182             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   53183             : 
   53184             :        // SgName get_mangled ( SgUnparse_Info & info );
   53185             : 
   53186             :       //! Mangled name support for unparser support
   53187             :        // SgName get_mangled ( SgUnparse_Info & info );
   53188             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   53189             :           virtual SgName get_mangled (void) const override;
   53190             : 
   53191             : 
   53192             : 
   53193             : // End of memberFunctionString
   53194             : // Start of memberFunctionString
   53195             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   53196             : 
   53197             :       //! example of type used where construction is particularly simple
   53198             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   53199             :        // static SgTypeFloat builtin_type;
   53200             :        // static SgTypeFloat* builtin_type;
   53201             : 
   53202             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   53203             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   53204             :        // own data member and associated access function.
   53205             :        // static SgTypeFloat* get_builtin_type();
   53206             : 
   53207             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   53208             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   53209             :        // own data member and associated access function.
   53210             :        // static void set_builtin_type(SgTypeFloat* builtin_type);
   53211             : 
   53212             :       //! function returns example of type
   53213             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   53214             :        // static SgTypeFloat* createType(void);
   53215             :           static SgTypeFloat* createType(SgExpression* optional_fortran_type_kind = NULL);
   53216             : 
   53217             : 
   53218             : // End of memberFunctionString
   53219             : 
   53220             : 
   53221             : 
   53222             :      public: 
   53223             :          virtual ~SgTypeFloat();
   53224             : 
   53225             : 
   53226             :      public: 
   53227             :          SgTypeFloat(); 
   53228             : 
   53229             :     protected:
   53230             : // Start of memberFunctionString
   53231             : static SgTypeFloat* p_builtin_type;
   53232             :           
   53233             : // End of memberFunctionString
   53234             : 
   53235             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeFloat>;
   53236             : 
   53237             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53238             : 
   53239             : 
   53240             :    };
   53241             : #endif
   53242             : 
   53243             : // postdeclarations for SgTypeFloat
   53244             : 
   53245             : /* #line 53246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53246             : 
   53247             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   53248             : 
   53249             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53250             : 
   53251             : 
   53252             : /* #line 53253 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53253             : 
   53254             : 
   53255             : 
   53256             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53257             : 
   53258             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   53259             : //      This code is automatically generated for each 
   53260             : //      terminal and non-terminal within the defined 
   53261             : //      grammar.  There is a simple way to change the 
   53262             : //      code to fix bugs etc.  See the ROSE README file
   53263             : //      for directions.
   53264             : 
   53265             : // tps: (02/22/2010): Adding DLL export requirements
   53266             : #include "rosedll.h"
   53267             : 
   53268             : // predeclarations for SgTypeDouble
   53269             : 
   53270             : /* #line 53271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53271             : 
   53272             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   53273             : 
   53274             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53275             : 
   53276             : #if 1
   53277             : // Class Definition for SgTypeDouble
   53278             : class ROSE_DLL_API SgTypeDouble  : public SgType
   53279             :    {
   53280             :      public:
   53281             : 
   53282             : 
   53283             : /* #line 53284 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53284             : 
   53285             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   53286             : // Start of memberFunctionString
   53287             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   53288             : 
   53289             : // *** COMMON CODE SECTION BEGINS HERE ***
   53290             : 
   53291             :     public:
   53292             : 
   53293             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   53294             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   53295             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   53296             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   53297             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   53298             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   53299             : 
   53300             :       /*! \brief returns a string representing the class name */
   53301             :           virtual std::string class_name() const override;
   53302             : 
   53303             :       /*! \brief returns new style SageIII enum values */
   53304             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   53305             : 
   53306             :       /*! \brief static variant value */
   53307             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   53308             :        // static const VariantT static_variant = V_SgTypeDouble;
   53309             :           enum { static_variant = V_SgTypeDouble };
   53310             : 
   53311             :        /* the generated cast function */
   53312             :       /*! \brief Casts pointer from base class to derived class */
   53313             :           ROSE_DLL_API friend       SgTypeDouble* isSgTypeDouble(       SgNode * s );
   53314             : 
   53315             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   53316             :           ROSE_DLL_API friend const SgTypeDouble* isSgTypeDouble( const SgNode * s );
   53317             : 
   53318             :      // ******************************************
   53319             :      // * Memory Pool / New / Delete
   53320             :      // ******************************************
   53321             : 
   53322             :      public:
   53323             :           /// \private
   53324             :           static const unsigned pool_size; //
   53325             :           /// \private
   53326             :           static std::vector<unsigned char *> pools; //
   53327             :           /// \private
   53328             :           static SgTypeDouble * next_node; // 
   53329             : 
   53330             :           /// \private
   53331             :           static unsigned long initializeStorageClassArray(SgTypeDoubleStorageClass *); //
   53332             : 
   53333             :           /// \private
   53334             :           static void clearMemoryPool(); //
   53335             :           static void deleteMemoryPool(); //
   53336             : 
   53337             :           /// \private
   53338             :           static void extendMemoryPoolForFileIO(); //
   53339             : 
   53340             :           /// \private
   53341             :           static SgTypeDouble * getPointerFromGlobalIndex(unsigned long); //
   53342             :           /// \private
   53343             :           static SgTypeDouble * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   53344             : 
   53345             :           /// \private
   53346             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   53347             :           /// \private
   53348             :           static void resetValidFreepointers(); //
   53349             :           /// \private
   53350             :           static unsigned long getNumberOfLastValidPointer(); //
   53351             : 
   53352             : 
   53353             : #if defined(INLINE_FUNCTIONS)
   53354             :       /*! \brief returns pointer to newly allocated IR node */
   53355             :           inline void *operator new (size_t size);
   53356             : #else
   53357             :       /*! \brief returns pointer to newly allocated IR node */
   53358             :           void *operator new (size_t size);
   53359             : #endif
   53360             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   53361             :           void operator delete (void* pointer, size_t size);
   53362             : 
   53363             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   53364       11851 :           void operator delete (void* pointer)
   53365             :              {
   53366             :             // This is the generated delete operator...
   53367       11851 :                SgTypeDouble::operator delete (pointer,sizeof(SgTypeDouble));
   53368             :              }
   53369             : 
   53370             :       /*! \brief Returns the total number of IR nodes of this type */
   53371             :           static size_t numberOfNodes();
   53372             : 
   53373             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   53374             :           static size_t memoryUsage();
   53375             : 
   53376             :       // End of scope which started in IR nodes specific code 
   53377             :       /* */
   53378             : 
   53379             :       /* name Internal Functions
   53380             :           \brief Internal functions ... incomplete-documentation
   53381             : 
   53382             :           These functions have been made public as part of the design, but they are suggested for internal use 
   53383             :           or by particularly knowledgeable users for specialized tools or applications.
   53384             : 
   53385             :           \internal We could not make these private because they are required by user for special purposes. And 
   53386             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   53387             :          
   53388             :        */
   53389             : 
   53390             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   53391             :        // overridden in every class by *generated* implementation
   53392             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   53393             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   53394             :        // MS: 06/28/02 container of names of variables or container indices 
   53395             :        // used used in the traversal to access AST successor nodes
   53396             :        // overridden in every class by *generated* implementation
   53397             :       /*! \brief container of names of variables or container indices used used in the traversal
   53398             :           to access AST successor nodes overridden in every class by *generated* implementation */
   53399             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   53400             : 
   53401             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   53402             :        // than all the vector copies. The implementation for these functions is generated for each class.
   53403             :       /*! \brief return number of children in the traversal successor list */
   53404             :           virtual size_t get_numberOfTraversalSuccessors() override;
   53405             :       /*! \brief index-based access to traversal successors by index number */
   53406             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   53407             :       /*! \brief index-based access to traversal successors by child node */
   53408             :           virtual size_t get_childIndex(SgNode *child) override;
   53409             : 
   53410             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   53411             :        // MS: 08/16/2002 method for generating RTI information
   53412             :       /*! \brief return C++ Runtime-Time-Information */
   53413             :           virtual RTIReturnType roseRTI() override;
   53414             : #endif
   53415             :       /* */
   53416             : 
   53417             : 
   53418             : 
   53419             :       /* name Deprecated Functions
   53420             :           \brief Deprecated functions ... incomplete-documentation
   53421             : 
   53422             :           These functions have been deprecated from use.
   53423             :        */
   53424             :       /* */
   53425             : 
   53426             :       /*! returns a C style string (char*) representing the class name */
   53427             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   53428             : 
   53429             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   53430             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   53431             : #if 0
   53432             :       /*! returns old style Sage II enum values */
   53433             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   53434             :       /*! returns old style Sage II enum values */
   53435             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   53436             : #endif
   53437             :       /* */
   53438             : 
   53439             : 
   53440             : 
   53441             : 
   53442             :      public:
   53443             :       /* name Traversal Support Functions
   53444             :           \brief Traversal support functions ... incomplete-documentation
   53445             : 
   53446             :           These functions have been made public as part of the design, but they are suggested for internal use 
   53447             :           or by particularly knowledgable users for specialized tools or applications.
   53448             :        */
   53449             :       /* */
   53450             : 
   53451             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   53452             :        // (inferior to ROSE traversal mechanism, experimental).
   53453             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   53454             :        */
   53455             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   53456             : 
   53457             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   53458             :       /*! \brief support for the classic visitor pattern done in GoF */
   53459             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   53460             : 
   53461             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   53462             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   53463             :        */
   53464             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   53465             : 
   53466             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   53467             :        */
   53468             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   53469             : 
   53470             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   53471             :        // This traversal helps support internal tools that call static member functions.
   53472             :        // note: this function operates on the memory pools.
   53473             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   53474             :        */
   53475             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   53476             :       /* */
   53477             : 
   53478             : 
   53479             :      public:
   53480             :       /* name Memory Allocation Functions
   53481             :           \brief Memory allocations functions ... incomplete-documentation
   53482             : 
   53483             :           These functions have been made public as part of the design, but they are suggested for internal use 
   53484             :           or by particularly knowledgable users for specialized tools or applications.
   53485             :        */
   53486             :       /* */
   53487             : 
   53488             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   53489             : 
   53490             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   53491             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   53492             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   53493             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   53494             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   53495             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   53496             :           being used with the AST File I/O mechanism.
   53497             :        */
   53498             :           virtual bool isInMemoryPool() override;
   53499             : 
   53500             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   53501             : 
   53502             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   53503             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   53504             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   53505             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   53506             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   53507             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   53508             :           being used with the AST File I/O mechanism.
   53509             :        */
   53510             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   53511             : 
   53512             :       // DQ (4/30/2006): Modified to be a const function.
   53513             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   53514             : 
   53515             :           This functions is part of general support for many possible tools to operate 
   53516             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   53517             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   53518             :           less than the set of pointers used by the AST file I/O. This is part of
   53519             :           work implemented by Andreas, and support tools such as the AST graph generation.
   53520             : 
   53521             :           \warning This function can return unexpected data members and thus the 
   53522             :                    order and the number of elements is unpredicable and subject 
   53523             :                    to change.
   53524             : 
   53525             :           \returns STL vector of pairs of SgNode* and strings
   53526             :        */
   53527             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   53528             : 
   53529             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   53530             : 
   53531             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   53532             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   53533             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   53534             : 
   53535             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   53536             :                    and subject to change.
   53537             :        */
   53538             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   53539             : 
   53540             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   53541             : 
   53542             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   53543             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   53544             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   53545             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   53546             : 
   53547             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   53548             : 
   53549             :           \returns long
   53550             :        */
   53551             :           virtual long getChildIndex( SgNode* childNode ) const override;
   53552             : 
   53553             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   53554             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   53555             :       /* \brief Constructor for use by AST File I/O Mechanism
   53556             : 
   53557             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   53558             :           which obtained via fast binary file I/O from disk.
   53559             :        */
   53560             :        // SgTypeDouble( SgTypeDoubleStorageClass& source );
   53561             : 
   53562             : 
   53563             : 
   53564             : 
   53565             : 
   53566             :  // JH (10/24/2005): methods added to support the ast file IO
   53567             :     private:
   53568             : 
   53569             :       /* name AST Memory Allocation Support Functions
   53570             :           \brief Memory allocations support....
   53571             : 
   53572             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   53573             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   53574             :           and support the AST File I/O Mechanism.
   53575             :        */
   53576             :       /* */
   53577             : 
   53578             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   53579             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   53580             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   53581             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   53582             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   53583             :           a correspinding one in the AST_FILE_IO class!
   53584             :        */
   53585             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   53586             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   53587             :       /* \brief Typedef used for low level memory access.
   53588             :        */
   53589             :        // typedef unsigned char* TestType;
   53590             : 
   53591             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   53592             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   53593             :       /* \brief Typedef used to hold memory addresses as values.
   53594             :        */
   53595             :        // typedef unsigned long  AddressType;
   53596             : 
   53597             : 
   53598             : 
   53599             :        // necessary, to have direct access to the p_freepointer and the private methods !
   53600             :       /*! \brief friend class declaration to support AST File I/O */
   53601             :           friend class AST_FILE_IO;
   53602             : 
   53603             :       /*! \brief friend class declaration to support AST File I/O */
   53604             :           friend class SgTypeDoubleStorageClass;
   53605             : 
   53606             :       /*! \brief friend class declaration to support AST File I/O */
   53607             :           friend class AstSpecificDataManagingClass;
   53608             : 
   53609             :       /*! \brief friend class declaration to support AST File I/O */
   53610             :           friend class AstSpecificDataManagingClassStorageClass;
   53611             :     public:
   53612             :       /*! \brief IR node constructor to support AST File I/O */
   53613             :           SgTypeDouble( const SgTypeDoubleStorageClass& source );
   53614             : 
   53615             :  // private: // JJW hack
   53616             :        /*
   53617             :           name AST Memory Allocation Support Variables
   53618             :           Memory allocations support variables 
   53619             : 
   53620             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   53621             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   53622             :           and support the AST File I/O Mechanism.
   53623             :        */
   53624             :       /* */
   53625             : 
   53626             :     public:
   53627             : 
   53628             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   53629             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   53630             :       // virtual SgNode* addRegExpAttribute();
   53631             :       /*! \brief Support for AST matching using regular expression.
   53632             : 
   53633             :           This support is incomplete and the subject of current research to define 
   53634             :           RegEx trees to support inexact matching.
   53635             :        */
   53636             :           SgTypeDouble* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   53637             : 
   53638             : // *** COMMON CODE SECTION ENDS HERE ***
   53639             : 
   53640             : 
   53641             : // End of memberFunctionString
   53642             : // Start of memberFunctionString
   53643             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   53644             : 
   53645             :      // the generated cast function
   53646             :      // friend ROSE_DLL_API SgTypeDouble* isSgTypeDouble ( SgNode* s );
   53647             : 
   53648             :           typedef SgType base_node_type;
   53649             : 
   53650             : 
   53651             : // End of memberFunctionString
   53652             : // Start of memberFunctionString
   53653             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   53654             : 
   53655             :        // SgName get_mangled ( SgUnparse_Info & info );
   53656             : 
   53657             :       //! Mangled name support for unparser support
   53658             :        // SgName get_mangled ( SgUnparse_Info & info );
   53659             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   53660             :           virtual SgName get_mangled (void) const override;
   53661             : 
   53662             : 
   53663             : 
   53664             : // End of memberFunctionString
   53665             : // Start of memberFunctionString
   53666             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   53667             : 
   53668             :       //! example of type used where construction is particularly simple
   53669             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   53670             :        // static SgTypeDouble builtin_type;
   53671             :        // static SgTypeDouble* builtin_type;
   53672             : 
   53673             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   53674             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   53675             :        // own data member and associated access function.
   53676             :        // static SgTypeDouble* get_builtin_type();
   53677             : 
   53678             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   53679             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   53680             :        // own data member and associated access function.
   53681             :        // static void set_builtin_type(SgTypeDouble* builtin_type);
   53682             : 
   53683             :       //! function returns example of type
   53684             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   53685             :        // static SgTypeDouble* createType(void);
   53686             :           static SgTypeDouble* createType(SgExpression* optional_fortran_type_kind = NULL);
   53687             : 
   53688             : 
   53689             : // End of memberFunctionString
   53690             : 
   53691             : 
   53692             : 
   53693             :      public: 
   53694             :          virtual ~SgTypeDouble();
   53695             : 
   53696             : 
   53697             :      public: 
   53698             :          SgTypeDouble(); 
   53699             : 
   53700             :     protected:
   53701             : // Start of memberFunctionString
   53702             : static SgTypeDouble* p_builtin_type;
   53703             :           
   53704             : // End of memberFunctionString
   53705             : 
   53706             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeDouble>;
   53707             : 
   53708             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53709             : 
   53710             : 
   53711             :    };
   53712             : #endif
   53713             : 
   53714             : // postdeclarations for SgTypeDouble
   53715             : 
   53716             : /* #line 53717 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53717             : 
   53718             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   53719             : 
   53720             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53721             : 
   53722             : 
   53723             : /* #line 53724 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53724             : 
   53725             : 
   53726             : 
   53727             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53728             : 
   53729             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   53730             : //      This code is automatically generated for each 
   53731             : //      terminal and non-terminal within the defined 
   53732             : //      grammar.  There is a simple way to change the 
   53733             : //      code to fix bugs etc.  See the ROSE README file
   53734             : //      for directions.
   53735             : 
   53736             : // tps: (02/22/2010): Adding DLL export requirements
   53737             : #include "rosedll.h"
   53738             : 
   53739             : // predeclarations for SgTypeLongLong
   53740             : 
   53741             : /* #line 53742 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53742             : 
   53743             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   53744             : 
   53745             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   53746             : 
   53747             : #if 1
   53748             : // Class Definition for SgTypeLongLong
   53749             : class ROSE_DLL_API SgTypeLongLong  : public SgType
   53750             :    {
   53751             :      public:
   53752             : 
   53753             : 
   53754             : /* #line 53755 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   53755             : 
   53756             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   53757             : // Start of memberFunctionString
   53758             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   53759             : 
   53760             : // *** COMMON CODE SECTION BEGINS HERE ***
   53761             : 
   53762             :     public:
   53763             : 
   53764             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   53765             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   53766             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   53767             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   53768             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   53769             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   53770             : 
   53771             :       /*! \brief returns a string representing the class name */
   53772             :           virtual std::string class_name() const override;
   53773             : 
   53774             :       /*! \brief returns new style SageIII enum values */
   53775             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   53776             : 
   53777             :       /*! \brief static variant value */
   53778             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   53779             :        // static const VariantT static_variant = V_SgTypeLongLong;
   53780             :           enum { static_variant = V_SgTypeLongLong };
   53781             : 
   53782             :        /* the generated cast function */
   53783             :       /*! \brief Casts pointer from base class to derived class */
   53784             :           ROSE_DLL_API friend       SgTypeLongLong* isSgTypeLongLong(       SgNode * s );
   53785             : 
   53786             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   53787             :           ROSE_DLL_API friend const SgTypeLongLong* isSgTypeLongLong( const SgNode * s );
   53788             : 
   53789             :      // ******************************************
   53790             :      // * Memory Pool / New / Delete
   53791             :      // ******************************************
   53792             : 
   53793             :      public:
   53794             :           /// \private
   53795             :           static const unsigned pool_size; //
   53796             :           /// \private
   53797             :           static std::vector<unsigned char *> pools; //
   53798             :           /// \private
   53799             :           static SgTypeLongLong * next_node; // 
   53800             : 
   53801             :           /// \private
   53802             :           static unsigned long initializeStorageClassArray(SgTypeLongLongStorageClass *); //
   53803             : 
   53804             :           /// \private
   53805             :           static void clearMemoryPool(); //
   53806             :           static void deleteMemoryPool(); //
   53807             : 
   53808             :           /// \private
   53809             :           static void extendMemoryPoolForFileIO(); //
   53810             : 
   53811             :           /// \private
   53812             :           static SgTypeLongLong * getPointerFromGlobalIndex(unsigned long); //
   53813             :           /// \private
   53814             :           static SgTypeLongLong * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   53815             : 
   53816             :           /// \private
   53817             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   53818             :           /// \private
   53819             :           static void resetValidFreepointers(); //
   53820             :           /// \private
   53821             :           static unsigned long getNumberOfLastValidPointer(); //
   53822             : 
   53823             : 
   53824             : #if defined(INLINE_FUNCTIONS)
   53825             :       /*! \brief returns pointer to newly allocated IR node */
   53826             :           inline void *operator new (size_t size);
   53827             : #else
   53828             :       /*! \brief returns pointer to newly allocated IR node */
   53829             :           void *operator new (size_t size);
   53830             : #endif
   53831             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   53832             :           void operator delete (void* pointer, size_t size);
   53833             : 
   53834             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   53835           9 :           void operator delete (void* pointer)
   53836             :              {
   53837             :             // This is the generated delete operator...
   53838           9 :                SgTypeLongLong::operator delete (pointer,sizeof(SgTypeLongLong));
   53839             :              }
   53840             : 
   53841             :       /*! \brief Returns the total number of IR nodes of this type */
   53842             :           static size_t numberOfNodes();
   53843             : 
   53844             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   53845             :           static size_t memoryUsage();
   53846             : 
   53847             :       // End of scope which started in IR nodes specific code 
   53848             :       /* */
   53849             : 
   53850             :       /* name Internal Functions
   53851             :           \brief Internal functions ... incomplete-documentation
   53852             : 
   53853             :           These functions have been made public as part of the design, but they are suggested for internal use 
   53854             :           or by particularly knowledgeable users for specialized tools or applications.
   53855             : 
   53856             :           \internal We could not make these private because they are required by user for special purposes. And 
   53857             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   53858             :          
   53859             :        */
   53860             : 
   53861             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   53862             :        // overridden in every class by *generated* implementation
   53863             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   53864             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   53865             :        // MS: 06/28/02 container of names of variables or container indices 
   53866             :        // used used in the traversal to access AST successor nodes
   53867             :        // overridden in every class by *generated* implementation
   53868             :       /*! \brief container of names of variables or container indices used used in the traversal
   53869             :           to access AST successor nodes overridden in every class by *generated* implementation */
   53870             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   53871             : 
   53872             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   53873             :        // than all the vector copies. The implementation for these functions is generated for each class.
   53874             :       /*! \brief return number of children in the traversal successor list */
   53875             :           virtual size_t get_numberOfTraversalSuccessors() override;
   53876             :       /*! \brief index-based access to traversal successors by index number */
   53877             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   53878             :       /*! \brief index-based access to traversal successors by child node */
   53879             :           virtual size_t get_childIndex(SgNode *child) override;
   53880             : 
   53881             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   53882             :        // MS: 08/16/2002 method for generating RTI information
   53883             :       /*! \brief return C++ Runtime-Time-Information */
   53884             :           virtual RTIReturnType roseRTI() override;
   53885             : #endif
   53886             :       /* */
   53887             : 
   53888             : 
   53889             : 
   53890             :       /* name Deprecated Functions
   53891             :           \brief Deprecated functions ... incomplete-documentation
   53892             : 
   53893             :           These functions have been deprecated from use.
   53894             :        */
   53895             :       /* */
   53896             : 
   53897             :       /*! returns a C style string (char*) representing the class name */
   53898             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   53899             : 
   53900             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   53901             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   53902             : #if 0
   53903             :       /*! returns old style Sage II enum values */
   53904             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   53905             :       /*! returns old style Sage II enum values */
   53906             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   53907             : #endif
   53908             :       /* */
   53909             : 
   53910             : 
   53911             : 
   53912             : 
   53913             :      public:
   53914             :       /* name Traversal Support Functions
   53915             :           \brief Traversal support functions ... incomplete-documentation
   53916             : 
   53917             :           These functions have been made public as part of the design, but they are suggested for internal use 
   53918             :           or by particularly knowledgable users for specialized tools or applications.
   53919             :        */
   53920             :       /* */
   53921             : 
   53922             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   53923             :        // (inferior to ROSE traversal mechanism, experimental).
   53924             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   53925             :        */
   53926             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   53927             : 
   53928             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   53929             :       /*! \brief support for the classic visitor pattern done in GoF */
   53930             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   53931             : 
   53932             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   53933             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   53934             :        */
   53935             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   53936             : 
   53937             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   53938             :        */
   53939             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   53940             : 
   53941             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   53942             :        // This traversal helps support internal tools that call static member functions.
   53943             :        // note: this function operates on the memory pools.
   53944             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   53945             :        */
   53946             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   53947             :       /* */
   53948             : 
   53949             : 
   53950             :      public:
   53951             :       /* name Memory Allocation Functions
   53952             :           \brief Memory allocations functions ... incomplete-documentation
   53953             : 
   53954             :           These functions have been made public as part of the design, but they are suggested for internal use 
   53955             :           or by particularly knowledgable users for specialized tools or applications.
   53956             :        */
   53957             :       /* */
   53958             : 
   53959             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   53960             : 
   53961             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   53962             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   53963             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   53964             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   53965             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   53966             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   53967             :           being used with the AST File I/O mechanism.
   53968             :        */
   53969             :           virtual bool isInMemoryPool() override;
   53970             : 
   53971             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   53972             : 
   53973             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   53974             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   53975             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   53976             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   53977             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   53978             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   53979             :           being used with the AST File I/O mechanism.
   53980             :        */
   53981             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   53982             : 
   53983             :       // DQ (4/30/2006): Modified to be a const function.
   53984             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   53985             : 
   53986             :           This functions is part of general support for many possible tools to operate 
   53987             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   53988             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   53989             :           less than the set of pointers used by the AST file I/O. This is part of
   53990             :           work implemented by Andreas, and support tools such as the AST graph generation.
   53991             : 
   53992             :           \warning This function can return unexpected data members and thus the 
   53993             :                    order and the number of elements is unpredicable and subject 
   53994             :                    to change.
   53995             : 
   53996             :           \returns STL vector of pairs of SgNode* and strings
   53997             :        */
   53998             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   53999             : 
   54000             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   54001             : 
   54002             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   54003             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   54004             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   54005             : 
   54006             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   54007             :                    and subject to change.
   54008             :        */
   54009             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   54010             : 
   54011             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   54012             : 
   54013             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   54014             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   54015             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   54016             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   54017             : 
   54018             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   54019             : 
   54020             :           \returns long
   54021             :        */
   54022             :           virtual long getChildIndex( SgNode* childNode ) const override;
   54023             : 
   54024             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   54025             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   54026             :       /* \brief Constructor for use by AST File I/O Mechanism
   54027             : 
   54028             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   54029             :           which obtained via fast binary file I/O from disk.
   54030             :        */
   54031             :        // SgTypeLongLong( SgTypeLongLongStorageClass& source );
   54032             : 
   54033             : 
   54034             : 
   54035             : 
   54036             : 
   54037             :  // JH (10/24/2005): methods added to support the ast file IO
   54038             :     private:
   54039             : 
   54040             :       /* name AST Memory Allocation Support Functions
   54041             :           \brief Memory allocations support....
   54042             : 
   54043             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   54044             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   54045             :           and support the AST File I/O Mechanism.
   54046             :        */
   54047             :       /* */
   54048             : 
   54049             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   54050             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   54051             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   54052             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   54053             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   54054             :           a correspinding one in the AST_FILE_IO class!
   54055             :        */
   54056             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   54057             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   54058             :       /* \brief Typedef used for low level memory access.
   54059             :        */
   54060             :        // typedef unsigned char* TestType;
   54061             : 
   54062             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   54063             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   54064             :       /* \brief Typedef used to hold memory addresses as values.
   54065             :        */
   54066             :        // typedef unsigned long  AddressType;
   54067             : 
   54068             : 
   54069             : 
   54070             :        // necessary, to have direct access to the p_freepointer and the private methods !
   54071             :       /*! \brief friend class declaration to support AST File I/O */
   54072             :           friend class AST_FILE_IO;
   54073             : 
   54074             :       /*! \brief friend class declaration to support AST File I/O */
   54075             :           friend class SgTypeLongLongStorageClass;
   54076             : 
   54077             :       /*! \brief friend class declaration to support AST File I/O */
   54078             :           friend class AstSpecificDataManagingClass;
   54079             : 
   54080             :       /*! \brief friend class declaration to support AST File I/O */
   54081             :           friend class AstSpecificDataManagingClassStorageClass;
   54082             :     public:
   54083             :       /*! \brief IR node constructor to support AST File I/O */
   54084             :           SgTypeLongLong( const SgTypeLongLongStorageClass& source );
   54085             : 
   54086             :  // private: // JJW hack
   54087             :        /*
   54088             :           name AST Memory Allocation Support Variables
   54089             :           Memory allocations support variables 
   54090             : 
   54091             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   54092             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   54093             :           and support the AST File I/O Mechanism.
   54094             :        */
   54095             :       /* */
   54096             : 
   54097             :     public:
   54098             : 
   54099             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   54100             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   54101             :       // virtual SgNode* addRegExpAttribute();
   54102             :       /*! \brief Support for AST matching using regular expression.
   54103             : 
   54104             :           This support is incomplete and the subject of current research to define 
   54105             :           RegEx trees to support inexact matching.
   54106             :        */
   54107             :           SgTypeLongLong* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   54108             : 
   54109             : // *** COMMON CODE SECTION ENDS HERE ***
   54110             : 
   54111             : 
   54112             : // End of memberFunctionString
   54113             : // Start of memberFunctionString
   54114             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   54115             : 
   54116             :      // the generated cast function
   54117             :      // friend ROSE_DLL_API SgTypeLongLong* isSgTypeLongLong ( SgNode* s );
   54118             : 
   54119             :           typedef SgType base_node_type;
   54120             : 
   54121             : 
   54122             : // End of memberFunctionString
   54123             : // Start of memberFunctionString
   54124             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   54125             : 
   54126             :        // SgName get_mangled ( SgUnparse_Info & info );
   54127             : 
   54128             :       //! Mangled name support for unparser support
   54129             :        // SgName get_mangled ( SgUnparse_Info & info );
   54130             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   54131             :           virtual SgName get_mangled (void) const override;
   54132             : 
   54133             : 
   54134             : 
   54135             : // End of memberFunctionString
   54136             : // Start of memberFunctionString
   54137             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   54138             : 
   54139             :       //! example of type used where construction is particularly simple
   54140             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   54141             :        // static SgTypeLongLong builtin_type;
   54142             :        // static SgTypeLongLong* builtin_type;
   54143             : 
   54144             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   54145             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   54146             :        // own data member and associated access function.
   54147             :        // static SgTypeLongLong* get_builtin_type();
   54148             : 
   54149             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   54150             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   54151             :        // own data member and associated access function.
   54152             :        // static void set_builtin_type(SgTypeLongLong* builtin_type);
   54153             : 
   54154             :       //! function returns example of type
   54155             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   54156             :        // static SgTypeLongLong* createType(void);
   54157             :           static SgTypeLongLong* createType(SgExpression* optional_fortran_type_kind = NULL);
   54158             : 
   54159             : 
   54160             : // End of memberFunctionString
   54161             : 
   54162             : 
   54163             : 
   54164             :      public: 
   54165             :          virtual ~SgTypeLongLong();
   54166             : 
   54167             : 
   54168             :      public: 
   54169             :          SgTypeLongLong(); 
   54170             : 
   54171             :     protected:
   54172             : // Start of memberFunctionString
   54173             : static SgTypeLongLong* p_builtin_type;
   54174             :           
   54175             : // End of memberFunctionString
   54176             : 
   54177             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeLongLong>;
   54178             : 
   54179             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54180             : 
   54181             : 
   54182             :    };
   54183             : #endif
   54184             : 
   54185             : // postdeclarations for SgTypeLongLong
   54186             : 
   54187             : /* #line 54188 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54188             : 
   54189             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   54190             : 
   54191             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54192             : 
   54193             : 
   54194             : /* #line 54195 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54195             : 
   54196             : 
   54197             : 
   54198             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54199             : 
   54200             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   54201             : //      This code is automatically generated for each 
   54202             : //      terminal and non-terminal within the defined 
   54203             : //      grammar.  There is a simple way to change the 
   54204             : //      code to fix bugs etc.  See the ROSE README file
   54205             : //      for directions.
   54206             : 
   54207             : // tps: (02/22/2010): Adding DLL export requirements
   54208             : #include "rosedll.h"
   54209             : 
   54210             : // predeclarations for SgTypeSignedLongLong
   54211             : 
   54212             : /* #line 54213 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54213             : 
   54214             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   54215             : 
   54216             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54217             : 
   54218             : #if 1
   54219             : // Class Definition for SgTypeSignedLongLong
   54220             : class ROSE_DLL_API SgTypeSignedLongLong  : public SgType
   54221             :    {
   54222             :      public:
   54223             : 
   54224             : 
   54225             : /* #line 54226 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54226             : 
   54227             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   54228             : // Start of memberFunctionString
   54229             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   54230             : 
   54231             : // *** COMMON CODE SECTION BEGINS HERE ***
   54232             : 
   54233             :     public:
   54234             : 
   54235             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   54236             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   54237             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   54238             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   54239             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   54240             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   54241             : 
   54242             :       /*! \brief returns a string representing the class name */
   54243             :           virtual std::string class_name() const override;
   54244             : 
   54245             :       /*! \brief returns new style SageIII enum values */
   54246             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   54247             : 
   54248             :       /*! \brief static variant value */
   54249             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   54250             :        // static const VariantT static_variant = V_SgTypeSignedLongLong;
   54251             :           enum { static_variant = V_SgTypeSignedLongLong };
   54252             : 
   54253             :        /* the generated cast function */
   54254             :       /*! \brief Casts pointer from base class to derived class */
   54255             :           ROSE_DLL_API friend       SgTypeSignedLongLong* isSgTypeSignedLongLong(       SgNode * s );
   54256             : 
   54257             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   54258             :           ROSE_DLL_API friend const SgTypeSignedLongLong* isSgTypeSignedLongLong( const SgNode * s );
   54259             : 
   54260             :      // ******************************************
   54261             :      // * Memory Pool / New / Delete
   54262             :      // ******************************************
   54263             : 
   54264             :      public:
   54265             :           /// \private
   54266             :           static const unsigned pool_size; //
   54267             :           /// \private
   54268             :           static std::vector<unsigned char *> pools; //
   54269             :           /// \private
   54270             :           static SgTypeSignedLongLong * next_node; // 
   54271             : 
   54272             :           /// \private
   54273             :           static unsigned long initializeStorageClassArray(SgTypeSignedLongLongStorageClass *); //
   54274             : 
   54275             :           /// \private
   54276             :           static void clearMemoryPool(); //
   54277             :           static void deleteMemoryPool(); //
   54278             : 
   54279             :           /// \private
   54280             :           static void extendMemoryPoolForFileIO(); //
   54281             : 
   54282             :           /// \private
   54283             :           static SgTypeSignedLongLong * getPointerFromGlobalIndex(unsigned long); //
   54284             :           /// \private
   54285             :           static SgTypeSignedLongLong * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   54286             : 
   54287             :           /// \private
   54288             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   54289             :           /// \private
   54290             :           static void resetValidFreepointers(); //
   54291             :           /// \private
   54292             :           static unsigned long getNumberOfLastValidPointer(); //
   54293             : 
   54294             : 
   54295             : #if defined(INLINE_FUNCTIONS)
   54296             :       /*! \brief returns pointer to newly allocated IR node */
   54297             :           inline void *operator new (size_t size);
   54298             : #else
   54299             :       /*! \brief returns pointer to newly allocated IR node */
   54300             :           void *operator new (size_t size);
   54301             : #endif
   54302             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   54303             :           void operator delete (void* pointer, size_t size);
   54304             : 
   54305             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   54306           2 :           void operator delete (void* pointer)
   54307             :              {
   54308             :             // This is the generated delete operator...
   54309           2 :                SgTypeSignedLongLong::operator delete (pointer,sizeof(SgTypeSignedLongLong));
   54310             :              }
   54311             : 
   54312             :       /*! \brief Returns the total number of IR nodes of this type */
   54313             :           static size_t numberOfNodes();
   54314             : 
   54315             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   54316             :           static size_t memoryUsage();
   54317             : 
   54318             :       // End of scope which started in IR nodes specific code 
   54319             :       /* */
   54320             : 
   54321             :       /* name Internal Functions
   54322             :           \brief Internal functions ... incomplete-documentation
   54323             : 
   54324             :           These functions have been made public as part of the design, but they are suggested for internal use 
   54325             :           or by particularly knowledgeable users for specialized tools or applications.
   54326             : 
   54327             :           \internal We could not make these private because they are required by user for special purposes. And 
   54328             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   54329             :          
   54330             :        */
   54331             : 
   54332             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   54333             :        // overridden in every class by *generated* implementation
   54334             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   54335             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   54336             :        // MS: 06/28/02 container of names of variables or container indices 
   54337             :        // used used in the traversal to access AST successor nodes
   54338             :        // overridden in every class by *generated* implementation
   54339             :       /*! \brief container of names of variables or container indices used used in the traversal
   54340             :           to access AST successor nodes overridden in every class by *generated* implementation */
   54341             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   54342             : 
   54343             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   54344             :        // than all the vector copies. The implementation for these functions is generated for each class.
   54345             :       /*! \brief return number of children in the traversal successor list */
   54346             :           virtual size_t get_numberOfTraversalSuccessors() override;
   54347             :       /*! \brief index-based access to traversal successors by index number */
   54348             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   54349             :       /*! \brief index-based access to traversal successors by child node */
   54350             :           virtual size_t get_childIndex(SgNode *child) override;
   54351             : 
   54352             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   54353             :        // MS: 08/16/2002 method for generating RTI information
   54354             :       /*! \brief return C++ Runtime-Time-Information */
   54355             :           virtual RTIReturnType roseRTI() override;
   54356             : #endif
   54357             :       /* */
   54358             : 
   54359             : 
   54360             : 
   54361             :       /* name Deprecated Functions
   54362             :           \brief Deprecated functions ... incomplete-documentation
   54363             : 
   54364             :           These functions have been deprecated from use.
   54365             :        */
   54366             :       /* */
   54367             : 
   54368             :       /*! returns a C style string (char*) representing the class name */
   54369             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   54370             : 
   54371             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   54372             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   54373             : #if 0
   54374             :       /*! returns old style Sage II enum values */
   54375             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   54376             :       /*! returns old style Sage II enum values */
   54377             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   54378             : #endif
   54379             :       /* */
   54380             : 
   54381             : 
   54382             : 
   54383             : 
   54384             :      public:
   54385             :       /* name Traversal Support Functions
   54386             :           \brief Traversal support functions ... incomplete-documentation
   54387             : 
   54388             :           These functions have been made public as part of the design, but they are suggested for internal use 
   54389             :           or by particularly knowledgable users for specialized tools or applications.
   54390             :        */
   54391             :       /* */
   54392             : 
   54393             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   54394             :        // (inferior to ROSE traversal mechanism, experimental).
   54395             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   54396             :        */
   54397             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   54398             : 
   54399             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   54400             :       /*! \brief support for the classic visitor pattern done in GoF */
   54401             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   54402             : 
   54403             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   54404             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   54405             :        */
   54406             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   54407             : 
   54408             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   54409             :        */
   54410             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   54411             : 
   54412             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   54413             :        // This traversal helps support internal tools that call static member functions.
   54414             :        // note: this function operates on the memory pools.
   54415             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   54416             :        */
   54417             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   54418             :       /* */
   54419             : 
   54420             : 
   54421             :      public:
   54422             :       /* name Memory Allocation Functions
   54423             :           \brief Memory allocations functions ... incomplete-documentation
   54424             : 
   54425             :           These functions have been made public as part of the design, but they are suggested for internal use 
   54426             :           or by particularly knowledgable users for specialized tools or applications.
   54427             :        */
   54428             :       /* */
   54429             : 
   54430             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   54431             : 
   54432             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   54433             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   54434             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   54435             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   54436             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   54437             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   54438             :           being used with the AST File I/O mechanism.
   54439             :        */
   54440             :           virtual bool isInMemoryPool() override;
   54441             : 
   54442             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   54443             : 
   54444             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   54445             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   54446             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   54447             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   54448             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   54449             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   54450             :           being used with the AST File I/O mechanism.
   54451             :        */
   54452             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   54453             : 
   54454             :       // DQ (4/30/2006): Modified to be a const function.
   54455             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   54456             : 
   54457             :           This functions is part of general support for many possible tools to operate 
   54458             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   54459             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   54460             :           less than the set of pointers used by the AST file I/O. This is part of
   54461             :           work implemented by Andreas, and support tools such as the AST graph generation.
   54462             : 
   54463             :           \warning This function can return unexpected data members and thus the 
   54464             :                    order and the number of elements is unpredicable and subject 
   54465             :                    to change.
   54466             : 
   54467             :           \returns STL vector of pairs of SgNode* and strings
   54468             :        */
   54469             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   54470             : 
   54471             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   54472             : 
   54473             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   54474             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   54475             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   54476             : 
   54477             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   54478             :                    and subject to change.
   54479             :        */
   54480             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   54481             : 
   54482             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   54483             : 
   54484             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   54485             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   54486             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   54487             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   54488             : 
   54489             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   54490             : 
   54491             :           \returns long
   54492             :        */
   54493             :           virtual long getChildIndex( SgNode* childNode ) const override;
   54494             : 
   54495             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   54496             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   54497             :       /* \brief Constructor for use by AST File I/O Mechanism
   54498             : 
   54499             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   54500             :           which obtained via fast binary file I/O from disk.
   54501             :        */
   54502             :        // SgTypeSignedLongLong( SgTypeSignedLongLongStorageClass& source );
   54503             : 
   54504             : 
   54505             : 
   54506             : 
   54507             : 
   54508             :  // JH (10/24/2005): methods added to support the ast file IO
   54509             :     private:
   54510             : 
   54511             :       /* name AST Memory Allocation Support Functions
   54512             :           \brief Memory allocations support....
   54513             : 
   54514             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   54515             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   54516             :           and support the AST File I/O Mechanism.
   54517             :        */
   54518             :       /* */
   54519             : 
   54520             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   54521             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   54522             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   54523             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   54524             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   54525             :           a correspinding one in the AST_FILE_IO class!
   54526             :        */
   54527             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   54528             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   54529             :       /* \brief Typedef used for low level memory access.
   54530             :        */
   54531             :        // typedef unsigned char* TestType;
   54532             : 
   54533             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   54534             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   54535             :       /* \brief Typedef used to hold memory addresses as values.
   54536             :        */
   54537             :        // typedef unsigned long  AddressType;
   54538             : 
   54539             : 
   54540             : 
   54541             :        // necessary, to have direct access to the p_freepointer and the private methods !
   54542             :       /*! \brief friend class declaration to support AST File I/O */
   54543             :           friend class AST_FILE_IO;
   54544             : 
   54545             :       /*! \brief friend class declaration to support AST File I/O */
   54546             :           friend class SgTypeSignedLongLongStorageClass;
   54547             : 
   54548             :       /*! \brief friend class declaration to support AST File I/O */
   54549             :           friend class AstSpecificDataManagingClass;
   54550             : 
   54551             :       /*! \brief friend class declaration to support AST File I/O */
   54552             :           friend class AstSpecificDataManagingClassStorageClass;
   54553             :     public:
   54554             :       /*! \brief IR node constructor to support AST File I/O */
   54555             :           SgTypeSignedLongLong( const SgTypeSignedLongLongStorageClass& source );
   54556             : 
   54557             :  // private: // JJW hack
   54558             :        /*
   54559             :           name AST Memory Allocation Support Variables
   54560             :           Memory allocations support variables 
   54561             : 
   54562             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   54563             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   54564             :           and support the AST File I/O Mechanism.
   54565             :        */
   54566             :       /* */
   54567             : 
   54568             :     public:
   54569             : 
   54570             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   54571             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   54572             :       // virtual SgNode* addRegExpAttribute();
   54573             :       /*! \brief Support for AST matching using regular expression.
   54574             : 
   54575             :           This support is incomplete and the subject of current research to define 
   54576             :           RegEx trees to support inexact matching.
   54577             :        */
   54578             :           SgTypeSignedLongLong* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   54579             : 
   54580             : // *** COMMON CODE SECTION ENDS HERE ***
   54581             : 
   54582             : 
   54583             : // End of memberFunctionString
   54584             : // Start of memberFunctionString
   54585             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   54586             : 
   54587             :      // the generated cast function
   54588             :      // friend ROSE_DLL_API SgTypeSignedLongLong* isSgTypeSignedLongLong ( SgNode* s );
   54589             : 
   54590             :           typedef SgType base_node_type;
   54591             : 
   54592             : 
   54593             : // End of memberFunctionString
   54594             : // Start of memberFunctionString
   54595             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   54596             : 
   54597             :        // SgName get_mangled ( SgUnparse_Info & info );
   54598             : 
   54599             :       //! Mangled name support for unparser support
   54600             :        // SgName get_mangled ( SgUnparse_Info & info );
   54601             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   54602             :           virtual SgName get_mangled (void) const override;
   54603             : 
   54604             : 
   54605             : 
   54606             : // End of memberFunctionString
   54607             : // Start of memberFunctionString
   54608             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   54609             : 
   54610             :       //! example of type used where construction is particularly simple
   54611             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   54612             :        // static SgTypeSignedLongLong builtin_type;
   54613             :        // static SgTypeSignedLongLong* builtin_type;
   54614             : 
   54615             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   54616             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   54617             :        // own data member and associated access function.
   54618             :        // static SgTypeSignedLongLong* get_builtin_type();
   54619             : 
   54620             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   54621             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   54622             :        // own data member and associated access function.
   54623             :        // static void set_builtin_type(SgTypeSignedLongLong* builtin_type);
   54624             : 
   54625             :       //! function returns example of type
   54626             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   54627             :        // static SgTypeSignedLongLong* createType(void);
   54628             :           static SgTypeSignedLongLong* createType(SgExpression* optional_fortran_type_kind = NULL);
   54629             : 
   54630             : 
   54631             : // End of memberFunctionString
   54632             : 
   54633             : 
   54634             : 
   54635             :      public: 
   54636             :          virtual ~SgTypeSignedLongLong();
   54637             : 
   54638             : 
   54639             :      public: 
   54640             :          SgTypeSignedLongLong(); 
   54641             : 
   54642             :     protected:
   54643             : // Start of memberFunctionString
   54644             : static SgTypeSignedLongLong* p_builtin_type;
   54645             :           
   54646             : // End of memberFunctionString
   54647             : 
   54648             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeSignedLongLong>;
   54649             : 
   54650             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54651             : 
   54652             : 
   54653             :    };
   54654             : #endif
   54655             : 
   54656             : // postdeclarations for SgTypeSignedLongLong
   54657             : 
   54658             : /* #line 54659 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54659             : 
   54660             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   54661             : 
   54662             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54663             : 
   54664             : 
   54665             : /* #line 54666 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54666             : 
   54667             : 
   54668             : 
   54669             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54670             : 
   54671             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   54672             : //      This code is automatically generated for each 
   54673             : //      terminal and non-terminal within the defined 
   54674             : //      grammar.  There is a simple way to change the 
   54675             : //      code to fix bugs etc.  See the ROSE README file
   54676             : //      for directions.
   54677             : 
   54678             : // tps: (02/22/2010): Adding DLL export requirements
   54679             : #include "rosedll.h"
   54680             : 
   54681             : // predeclarations for SgTypeUnsignedLongLong
   54682             : 
   54683             : /* #line 54684 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54684             : 
   54685             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   54686             : 
   54687             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   54688             : 
   54689             : #if 1
   54690             : // Class Definition for SgTypeUnsignedLongLong
   54691             : class ROSE_DLL_API SgTypeUnsignedLongLong  : public SgType
   54692             :    {
   54693             :      public:
   54694             : 
   54695             : 
   54696             : /* #line 54697 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   54697             : 
   54698             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   54699             : // Start of memberFunctionString
   54700             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   54701             : 
   54702             : // *** COMMON CODE SECTION BEGINS HERE ***
   54703             : 
   54704             :     public:
   54705             : 
   54706             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   54707             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   54708             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   54709             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   54710             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   54711             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   54712             : 
   54713             :       /*! \brief returns a string representing the class name */
   54714             :           virtual std::string class_name() const override;
   54715             : 
   54716             :       /*! \brief returns new style SageIII enum values */
   54717             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   54718             : 
   54719             :       /*! \brief static variant value */
   54720             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   54721             :        // static const VariantT static_variant = V_SgTypeUnsignedLongLong;
   54722             :           enum { static_variant = V_SgTypeUnsignedLongLong };
   54723             : 
   54724             :        /* the generated cast function */
   54725             :       /*! \brief Casts pointer from base class to derived class */
   54726             :           ROSE_DLL_API friend       SgTypeUnsignedLongLong* isSgTypeUnsignedLongLong(       SgNode * s );
   54727             : 
   54728             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   54729             :           ROSE_DLL_API friend const SgTypeUnsignedLongLong* isSgTypeUnsignedLongLong( const SgNode * s );
   54730             : 
   54731             :      // ******************************************
   54732             :      // * Memory Pool / New / Delete
   54733             :      // ******************************************
   54734             : 
   54735             :      public:
   54736             :           /// \private
   54737             :           static const unsigned pool_size; //
   54738             :           /// \private
   54739             :           static std::vector<unsigned char *> pools; //
   54740             :           /// \private
   54741             :           static SgTypeUnsignedLongLong * next_node; // 
   54742             : 
   54743             :           /// \private
   54744             :           static unsigned long initializeStorageClassArray(SgTypeUnsignedLongLongStorageClass *); //
   54745             : 
   54746             :           /// \private
   54747             :           static void clearMemoryPool(); //
   54748             :           static void deleteMemoryPool(); //
   54749             : 
   54750             :           /// \private
   54751             :           static void extendMemoryPoolForFileIO(); //
   54752             : 
   54753             :           /// \private
   54754             :           static SgTypeUnsignedLongLong * getPointerFromGlobalIndex(unsigned long); //
   54755             :           /// \private
   54756             :           static SgTypeUnsignedLongLong * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   54757             : 
   54758             :           /// \private
   54759             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   54760             :           /// \private
   54761             :           static void resetValidFreepointers(); //
   54762             :           /// \private
   54763             :           static unsigned long getNumberOfLastValidPointer(); //
   54764             : 
   54765             : 
   54766             : #if defined(INLINE_FUNCTIONS)
   54767             :       /*! \brief returns pointer to newly allocated IR node */
   54768             :           inline void *operator new (size_t size);
   54769             : #else
   54770             :       /*! \brief returns pointer to newly allocated IR node */
   54771             :           void *operator new (size_t size);
   54772             : #endif
   54773             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   54774             :           void operator delete (void* pointer, size_t size);
   54775             : 
   54776             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   54777          11 :           void operator delete (void* pointer)
   54778             :              {
   54779             :             // This is the generated delete operator...
   54780          11 :                SgTypeUnsignedLongLong::operator delete (pointer,sizeof(SgTypeUnsignedLongLong));
   54781             :              }
   54782             : 
   54783             :       /*! \brief Returns the total number of IR nodes of this type */
   54784             :           static size_t numberOfNodes();
   54785             : 
   54786             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   54787             :           static size_t memoryUsage();
   54788             : 
   54789             :       // End of scope which started in IR nodes specific code 
   54790             :       /* */
   54791             : 
   54792             :       /* name Internal Functions
   54793             :           \brief Internal functions ... incomplete-documentation
   54794             : 
   54795             :           These functions have been made public as part of the design, but they are suggested for internal use 
   54796             :           or by particularly knowledgeable users for specialized tools or applications.
   54797             : 
   54798             :           \internal We could not make these private because they are required by user for special purposes. And 
   54799             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   54800             :          
   54801             :        */
   54802             : 
   54803             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   54804             :        // overridden in every class by *generated* implementation
   54805             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   54806             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   54807             :        // MS: 06/28/02 container of names of variables or container indices 
   54808             :        // used used in the traversal to access AST successor nodes
   54809             :        // overridden in every class by *generated* implementation
   54810             :       /*! \brief container of names of variables or container indices used used in the traversal
   54811             :           to access AST successor nodes overridden in every class by *generated* implementation */
   54812             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   54813             : 
   54814             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   54815             :        // than all the vector copies. The implementation for these functions is generated for each class.
   54816             :       /*! \brief return number of children in the traversal successor list */
   54817             :           virtual size_t get_numberOfTraversalSuccessors() override;
   54818             :       /*! \brief index-based access to traversal successors by index number */
   54819             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   54820             :       /*! \brief index-based access to traversal successors by child node */
   54821             :           virtual size_t get_childIndex(SgNode *child) override;
   54822             : 
   54823             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   54824             :        // MS: 08/16/2002 method for generating RTI information
   54825             :       /*! \brief return C++ Runtime-Time-Information */
   54826             :           virtual RTIReturnType roseRTI() override;
   54827             : #endif
   54828             :       /* */
   54829             : 
   54830             : 
   54831             : 
   54832             :       /* name Deprecated Functions
   54833             :           \brief Deprecated functions ... incomplete-documentation
   54834             : 
   54835             :           These functions have been deprecated from use.
   54836             :        */
   54837             :       /* */
   54838             : 
   54839             :       /*! returns a C style string (char*) representing the class name */
   54840             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   54841             : 
   54842             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   54843             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   54844             : #if 0
   54845             :       /*! returns old style Sage II enum values */
   54846             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   54847             :       /*! returns old style Sage II enum values */
   54848             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   54849             : #endif
   54850             :       /* */
   54851             : 
   54852             : 
   54853             : 
   54854             : 
   54855             :      public:
   54856             :       /* name Traversal Support Functions
   54857             :           \brief Traversal support functions ... incomplete-documentation
   54858             : 
   54859             :           These functions have been made public as part of the design, but they are suggested for internal use 
   54860             :           or by particularly knowledgable users for specialized tools or applications.
   54861             :        */
   54862             :       /* */
   54863             : 
   54864             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   54865             :        // (inferior to ROSE traversal mechanism, experimental).
   54866             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   54867             :        */
   54868             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   54869             : 
   54870             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   54871             :       /*! \brief support for the classic visitor pattern done in GoF */
   54872             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   54873             : 
   54874             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   54875             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   54876             :        */
   54877             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   54878             : 
   54879             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   54880             :        */
   54881             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   54882             : 
   54883             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   54884             :        // This traversal helps support internal tools that call static member functions.
   54885             :        // note: this function operates on the memory pools.
   54886             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   54887             :        */
   54888             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   54889             :       /* */
   54890             : 
   54891             : 
   54892             :      public:
   54893             :       /* name Memory Allocation Functions
   54894             :           \brief Memory allocations functions ... incomplete-documentation
   54895             : 
   54896             :           These functions have been made public as part of the design, but they are suggested for internal use 
   54897             :           or by particularly knowledgable users for specialized tools or applications.
   54898             :        */
   54899             :       /* */
   54900             : 
   54901             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   54902             : 
   54903             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   54904             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   54905             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   54906             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   54907             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   54908             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   54909             :           being used with the AST File I/O mechanism.
   54910             :        */
   54911             :           virtual bool isInMemoryPool() override;
   54912             : 
   54913             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   54914             : 
   54915             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   54916             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   54917             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   54918             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   54919             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   54920             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   54921             :           being used with the AST File I/O mechanism.
   54922             :        */
   54923             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   54924             : 
   54925             :       // DQ (4/30/2006): Modified to be a const function.
   54926             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   54927             : 
   54928             :           This functions is part of general support for many possible tools to operate 
   54929             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   54930             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   54931             :           less than the set of pointers used by the AST file I/O. This is part of
   54932             :           work implemented by Andreas, and support tools such as the AST graph generation.
   54933             : 
   54934             :           \warning This function can return unexpected data members and thus the 
   54935             :                    order and the number of elements is unpredicable and subject 
   54936             :                    to change.
   54937             : 
   54938             :           \returns STL vector of pairs of SgNode* and strings
   54939             :        */
   54940             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   54941             : 
   54942             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   54943             : 
   54944             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   54945             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   54946             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   54947             : 
   54948             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   54949             :                    and subject to change.
   54950             :        */
   54951             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   54952             : 
   54953             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   54954             : 
   54955             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   54956             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   54957             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   54958             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   54959             : 
   54960             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   54961             : 
   54962             :           \returns long
   54963             :        */
   54964             :           virtual long getChildIndex( SgNode* childNode ) const override;
   54965             : 
   54966             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   54967             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   54968             :       /* \brief Constructor for use by AST File I/O Mechanism
   54969             : 
   54970             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   54971             :           which obtained via fast binary file I/O from disk.
   54972             :        */
   54973             :        // SgTypeUnsignedLongLong( SgTypeUnsignedLongLongStorageClass& source );
   54974             : 
   54975             : 
   54976             : 
   54977             : 
   54978             : 
   54979             :  // JH (10/24/2005): methods added to support the ast file IO
   54980             :     private:
   54981             : 
   54982             :       /* name AST Memory Allocation Support Functions
   54983             :           \brief Memory allocations support....
   54984             : 
   54985             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   54986             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   54987             :           and support the AST File I/O Mechanism.
   54988             :        */
   54989             :       /* */
   54990             : 
   54991             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   54992             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   54993             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   54994             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   54995             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   54996             :           a correspinding one in the AST_FILE_IO class!
   54997             :        */
   54998             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   54999             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55000             :       /* \brief Typedef used for low level memory access.
   55001             :        */
   55002             :        // typedef unsigned char* TestType;
   55003             : 
   55004             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   55005             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55006             :       /* \brief Typedef used to hold memory addresses as values.
   55007             :        */
   55008             :        // typedef unsigned long  AddressType;
   55009             : 
   55010             : 
   55011             : 
   55012             :        // necessary, to have direct access to the p_freepointer and the private methods !
   55013             :       /*! \brief friend class declaration to support AST File I/O */
   55014             :           friend class AST_FILE_IO;
   55015             : 
   55016             :       /*! \brief friend class declaration to support AST File I/O */
   55017             :           friend class SgTypeUnsignedLongLongStorageClass;
   55018             : 
   55019             :       /*! \brief friend class declaration to support AST File I/O */
   55020             :           friend class AstSpecificDataManagingClass;
   55021             : 
   55022             :       /*! \brief friend class declaration to support AST File I/O */
   55023             :           friend class AstSpecificDataManagingClassStorageClass;
   55024             :     public:
   55025             :       /*! \brief IR node constructor to support AST File I/O */
   55026             :           SgTypeUnsignedLongLong( const SgTypeUnsignedLongLongStorageClass& source );
   55027             : 
   55028             :  // private: // JJW hack
   55029             :        /*
   55030             :           name AST Memory Allocation Support Variables
   55031             :           Memory allocations support variables 
   55032             : 
   55033             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   55034             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   55035             :           and support the AST File I/O Mechanism.
   55036             :        */
   55037             :       /* */
   55038             : 
   55039             :     public:
   55040             : 
   55041             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   55042             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   55043             :       // virtual SgNode* addRegExpAttribute();
   55044             :       /*! \brief Support for AST matching using regular expression.
   55045             : 
   55046             :           This support is incomplete and the subject of current research to define 
   55047             :           RegEx trees to support inexact matching.
   55048             :        */
   55049             :           SgTypeUnsignedLongLong* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   55050             : 
   55051             : // *** COMMON CODE SECTION ENDS HERE ***
   55052             : 
   55053             : 
   55054             : // End of memberFunctionString
   55055             : // Start of memberFunctionString
   55056             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   55057             : 
   55058             :      // the generated cast function
   55059             :      // friend ROSE_DLL_API SgTypeUnsignedLongLong* isSgTypeUnsignedLongLong ( SgNode* s );
   55060             : 
   55061             :           typedef SgType base_node_type;
   55062             : 
   55063             : 
   55064             : // End of memberFunctionString
   55065             : // Start of memberFunctionString
   55066             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   55067             : 
   55068             :        // SgName get_mangled ( SgUnparse_Info & info );
   55069             : 
   55070             :       //! Mangled name support for unparser support
   55071             :        // SgName get_mangled ( SgUnparse_Info & info );
   55072             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   55073             :           virtual SgName get_mangled (void) const override;
   55074             : 
   55075             : 
   55076             : 
   55077             : // End of memberFunctionString
   55078             : // Start of memberFunctionString
   55079             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   55080             : 
   55081             :       //! example of type used where construction is particularly simple
   55082             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   55083             :        // static SgTypeUnsignedLongLong builtin_type;
   55084             :        // static SgTypeUnsignedLongLong* builtin_type;
   55085             : 
   55086             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   55087             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   55088             :        // own data member and associated access function.
   55089             :        // static SgTypeUnsignedLongLong* get_builtin_type();
   55090             : 
   55091             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   55092             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   55093             :        // own data member and associated access function.
   55094             :        // static void set_builtin_type(SgTypeUnsignedLongLong* builtin_type);
   55095             : 
   55096             :       //! function returns example of type
   55097             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   55098             :        // static SgTypeUnsignedLongLong* createType(void);
   55099             :           static SgTypeUnsignedLongLong* createType(SgExpression* optional_fortran_type_kind = NULL);
   55100             : 
   55101             : 
   55102             : // End of memberFunctionString
   55103             : 
   55104             : 
   55105             : 
   55106             :      public: 
   55107             :          virtual ~SgTypeUnsignedLongLong();
   55108             : 
   55109             : 
   55110             :      public: 
   55111             :          SgTypeUnsignedLongLong(); 
   55112             : 
   55113             :     protected:
   55114             : // Start of memberFunctionString
   55115             : static SgTypeUnsignedLongLong* p_builtin_type;
   55116             :           
   55117             : // End of memberFunctionString
   55118             : 
   55119             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeUnsignedLongLong>;
   55120             : 
   55121             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55122             : 
   55123             : 
   55124             :    };
   55125             : #endif
   55126             : 
   55127             : // postdeclarations for SgTypeUnsignedLongLong
   55128             : 
   55129             : /* #line 55130 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55130             : 
   55131             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   55132             : 
   55133             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55134             : 
   55135             : 
   55136             : /* #line 55137 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55137             : 
   55138             : 
   55139             : 
   55140             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55141             : 
   55142             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   55143             : //      This code is automatically generated for each 
   55144             : //      terminal and non-terminal within the defined 
   55145             : //      grammar.  There is a simple way to change the 
   55146             : //      code to fix bugs etc.  See the ROSE README file
   55147             : //      for directions.
   55148             : 
   55149             : // tps: (02/22/2010): Adding DLL export requirements
   55150             : #include "rosedll.h"
   55151             : 
   55152             : // predeclarations for SgTypeSigned128bitInteger
   55153             : 
   55154             : /* #line 55155 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55155             : 
   55156             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   55157             : 
   55158             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55159             : 
   55160             : #if 1
   55161             : // Class Definition for SgTypeSigned128bitInteger
   55162             : class ROSE_DLL_API SgTypeSigned128bitInteger  : public SgType
   55163             :    {
   55164             :      public:
   55165             : 
   55166             : 
   55167             : /* #line 55168 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55168             : 
   55169             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   55170             : // Start of memberFunctionString
   55171             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   55172             : 
   55173             : // *** COMMON CODE SECTION BEGINS HERE ***
   55174             : 
   55175             :     public:
   55176             : 
   55177             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   55178             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   55179             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   55180             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   55181             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   55182             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   55183             : 
   55184             :       /*! \brief returns a string representing the class name */
   55185             :           virtual std::string class_name() const override;
   55186             : 
   55187             :       /*! \brief returns new style SageIII enum values */
   55188             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   55189             : 
   55190             :       /*! \brief static variant value */
   55191             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   55192             :        // static const VariantT static_variant = V_SgTypeSigned128bitInteger;
   55193             :           enum { static_variant = V_SgTypeSigned128bitInteger };
   55194             : 
   55195             :        /* the generated cast function */
   55196             :       /*! \brief Casts pointer from base class to derived class */
   55197             :           ROSE_DLL_API friend       SgTypeSigned128bitInteger* isSgTypeSigned128bitInteger(       SgNode * s );
   55198             : 
   55199             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   55200             :           ROSE_DLL_API friend const SgTypeSigned128bitInteger* isSgTypeSigned128bitInteger( const SgNode * s );
   55201             : 
   55202             :      // ******************************************
   55203             :      // * Memory Pool / New / Delete
   55204             :      // ******************************************
   55205             : 
   55206             :      public:
   55207             :           /// \private
   55208             :           static const unsigned pool_size; //
   55209             :           /// \private
   55210             :           static std::vector<unsigned char *> pools; //
   55211             :           /// \private
   55212             :           static SgTypeSigned128bitInteger * next_node; // 
   55213             : 
   55214             :           /// \private
   55215             :           static unsigned long initializeStorageClassArray(SgTypeSigned128bitIntegerStorageClass *); //
   55216             : 
   55217             :           /// \private
   55218             :           static void clearMemoryPool(); //
   55219             :           static void deleteMemoryPool(); //
   55220             : 
   55221             :           /// \private
   55222             :           static void extendMemoryPoolForFileIO(); //
   55223             : 
   55224             :           /// \private
   55225             :           static SgTypeSigned128bitInteger * getPointerFromGlobalIndex(unsigned long); //
   55226             :           /// \private
   55227             :           static SgTypeSigned128bitInteger * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   55228             : 
   55229             :           /// \private
   55230             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   55231             :           /// \private
   55232             :           static void resetValidFreepointers(); //
   55233             :           /// \private
   55234             :           static unsigned long getNumberOfLastValidPointer(); //
   55235             : 
   55236             : 
   55237             : #if defined(INLINE_FUNCTIONS)
   55238             :       /*! \brief returns pointer to newly allocated IR node */
   55239             :           inline void *operator new (size_t size);
   55240             : #else
   55241             :       /*! \brief returns pointer to newly allocated IR node */
   55242             :           void *operator new (size_t size);
   55243             : #endif
   55244             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   55245             :           void operator delete (void* pointer, size_t size);
   55246             : 
   55247             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   55248           6 :           void operator delete (void* pointer)
   55249             :              {
   55250             :             // This is the generated delete operator...
   55251           6 :                SgTypeSigned128bitInteger::operator delete (pointer,sizeof(SgTypeSigned128bitInteger));
   55252             :              }
   55253             : 
   55254             :       /*! \brief Returns the total number of IR nodes of this type */
   55255             :           static size_t numberOfNodes();
   55256             : 
   55257             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   55258             :           static size_t memoryUsage();
   55259             : 
   55260             :       // End of scope which started in IR nodes specific code 
   55261             :       /* */
   55262             : 
   55263             :       /* name Internal Functions
   55264             :           \brief Internal functions ... incomplete-documentation
   55265             : 
   55266             :           These functions have been made public as part of the design, but they are suggested for internal use 
   55267             :           or by particularly knowledgeable users for specialized tools or applications.
   55268             : 
   55269             :           \internal We could not make these private because they are required by user for special purposes. And 
   55270             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   55271             :          
   55272             :        */
   55273             : 
   55274             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   55275             :        // overridden in every class by *generated* implementation
   55276             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   55277             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   55278             :        // MS: 06/28/02 container of names of variables or container indices 
   55279             :        // used used in the traversal to access AST successor nodes
   55280             :        // overridden in every class by *generated* implementation
   55281             :       /*! \brief container of names of variables or container indices used used in the traversal
   55282             :           to access AST successor nodes overridden in every class by *generated* implementation */
   55283             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   55284             : 
   55285             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   55286             :        // than all the vector copies. The implementation for these functions is generated for each class.
   55287             :       /*! \brief return number of children in the traversal successor list */
   55288             :           virtual size_t get_numberOfTraversalSuccessors() override;
   55289             :       /*! \brief index-based access to traversal successors by index number */
   55290             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   55291             :       /*! \brief index-based access to traversal successors by child node */
   55292             :           virtual size_t get_childIndex(SgNode *child) override;
   55293             : 
   55294             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   55295             :        // MS: 08/16/2002 method for generating RTI information
   55296             :       /*! \brief return C++ Runtime-Time-Information */
   55297             :           virtual RTIReturnType roseRTI() override;
   55298             : #endif
   55299             :       /* */
   55300             : 
   55301             : 
   55302             : 
   55303             :       /* name Deprecated Functions
   55304             :           \brief Deprecated functions ... incomplete-documentation
   55305             : 
   55306             :           These functions have been deprecated from use.
   55307             :        */
   55308             :       /* */
   55309             : 
   55310             :       /*! returns a C style string (char*) representing the class name */
   55311             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   55312             : 
   55313             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   55314             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   55315             : #if 0
   55316             :       /*! returns old style Sage II enum values */
   55317             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   55318             :       /*! returns old style Sage II enum values */
   55319             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   55320             : #endif
   55321             :       /* */
   55322             : 
   55323             : 
   55324             : 
   55325             : 
   55326             :      public:
   55327             :       /* name Traversal Support Functions
   55328             :           \brief Traversal support functions ... incomplete-documentation
   55329             : 
   55330             :           These functions have been made public as part of the design, but they are suggested for internal use 
   55331             :           or by particularly knowledgable users for specialized tools or applications.
   55332             :        */
   55333             :       /* */
   55334             : 
   55335             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   55336             :        // (inferior to ROSE traversal mechanism, experimental).
   55337             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   55338             :        */
   55339             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   55340             : 
   55341             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   55342             :       /*! \brief support for the classic visitor pattern done in GoF */
   55343             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   55344             : 
   55345             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   55346             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   55347             :        */
   55348             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   55349             : 
   55350             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   55351             :        */
   55352             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   55353             : 
   55354             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   55355             :        // This traversal helps support internal tools that call static member functions.
   55356             :        // note: this function operates on the memory pools.
   55357             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   55358             :        */
   55359             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   55360             :       /* */
   55361             : 
   55362             : 
   55363             :      public:
   55364             :       /* name Memory Allocation Functions
   55365             :           \brief Memory allocations functions ... incomplete-documentation
   55366             : 
   55367             :           These functions have been made public as part of the design, but they are suggested for internal use 
   55368             :           or by particularly knowledgable users for specialized tools or applications.
   55369             :        */
   55370             :       /* */
   55371             : 
   55372             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   55373             : 
   55374             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   55375             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   55376             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   55377             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   55378             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   55379             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   55380             :           being used with the AST File I/O mechanism.
   55381             :        */
   55382             :           virtual bool isInMemoryPool() override;
   55383             : 
   55384             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   55385             : 
   55386             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   55387             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   55388             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   55389             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   55390             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   55391             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   55392             :           being used with the AST File I/O mechanism.
   55393             :        */
   55394             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   55395             : 
   55396             :       // DQ (4/30/2006): Modified to be a const function.
   55397             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   55398             : 
   55399             :           This functions is part of general support for many possible tools to operate 
   55400             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   55401             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   55402             :           less than the set of pointers used by the AST file I/O. This is part of
   55403             :           work implemented by Andreas, and support tools such as the AST graph generation.
   55404             : 
   55405             :           \warning This function can return unexpected data members and thus the 
   55406             :                    order and the number of elements is unpredicable and subject 
   55407             :                    to change.
   55408             : 
   55409             :           \returns STL vector of pairs of SgNode* and strings
   55410             :        */
   55411             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   55412             : 
   55413             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   55414             : 
   55415             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   55416             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   55417             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   55418             : 
   55419             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   55420             :                    and subject to change.
   55421             :        */
   55422             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   55423             : 
   55424             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   55425             : 
   55426             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   55427             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   55428             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   55429             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   55430             : 
   55431             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   55432             : 
   55433             :           \returns long
   55434             :        */
   55435             :           virtual long getChildIndex( SgNode* childNode ) const override;
   55436             : 
   55437             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   55438             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55439             :       /* \brief Constructor for use by AST File I/O Mechanism
   55440             : 
   55441             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   55442             :           which obtained via fast binary file I/O from disk.
   55443             :        */
   55444             :        // SgTypeSigned128bitInteger( SgTypeSigned128bitIntegerStorageClass& source );
   55445             : 
   55446             : 
   55447             : 
   55448             : 
   55449             : 
   55450             :  // JH (10/24/2005): methods added to support the ast file IO
   55451             :     private:
   55452             : 
   55453             :       /* name AST Memory Allocation Support Functions
   55454             :           \brief Memory allocations support....
   55455             : 
   55456             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   55457             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   55458             :           and support the AST File I/O Mechanism.
   55459             :        */
   55460             :       /* */
   55461             : 
   55462             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   55463             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   55464             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   55465             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   55466             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   55467             :           a correspinding one in the AST_FILE_IO class!
   55468             :        */
   55469             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   55470             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55471             :       /* \brief Typedef used for low level memory access.
   55472             :        */
   55473             :        // typedef unsigned char* TestType;
   55474             : 
   55475             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   55476             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55477             :       /* \brief Typedef used to hold memory addresses as values.
   55478             :        */
   55479             :        // typedef unsigned long  AddressType;
   55480             : 
   55481             : 
   55482             : 
   55483             :        // necessary, to have direct access to the p_freepointer and the private methods !
   55484             :       /*! \brief friend class declaration to support AST File I/O */
   55485             :           friend class AST_FILE_IO;
   55486             : 
   55487             :       /*! \brief friend class declaration to support AST File I/O */
   55488             :           friend class SgTypeSigned128bitIntegerStorageClass;
   55489             : 
   55490             :       /*! \brief friend class declaration to support AST File I/O */
   55491             :           friend class AstSpecificDataManagingClass;
   55492             : 
   55493             :       /*! \brief friend class declaration to support AST File I/O */
   55494             :           friend class AstSpecificDataManagingClassStorageClass;
   55495             :     public:
   55496             :       /*! \brief IR node constructor to support AST File I/O */
   55497             :           SgTypeSigned128bitInteger( const SgTypeSigned128bitIntegerStorageClass& source );
   55498             : 
   55499             :  // private: // JJW hack
   55500             :        /*
   55501             :           name AST Memory Allocation Support Variables
   55502             :           Memory allocations support variables 
   55503             : 
   55504             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   55505             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   55506             :           and support the AST File I/O Mechanism.
   55507             :        */
   55508             :       /* */
   55509             : 
   55510             :     public:
   55511             : 
   55512             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   55513             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   55514             :       // virtual SgNode* addRegExpAttribute();
   55515             :       /*! \brief Support for AST matching using regular expression.
   55516             : 
   55517             :           This support is incomplete and the subject of current research to define 
   55518             :           RegEx trees to support inexact matching.
   55519             :        */
   55520             :           SgTypeSigned128bitInteger* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   55521             : 
   55522             : // *** COMMON CODE SECTION ENDS HERE ***
   55523             : 
   55524             : 
   55525             : // End of memberFunctionString
   55526             : // Start of memberFunctionString
   55527             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   55528             : 
   55529             :      // the generated cast function
   55530             :      // friend ROSE_DLL_API SgTypeSigned128bitInteger* isSgTypeSigned128bitInteger ( SgNode* s );
   55531             : 
   55532             :           typedef SgType base_node_type;
   55533             : 
   55534             : 
   55535             : // End of memberFunctionString
   55536             : // Start of memberFunctionString
   55537             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   55538             : 
   55539             :        // SgName get_mangled ( SgUnparse_Info & info );
   55540             : 
   55541             :       //! Mangled name support for unparser support
   55542             :        // SgName get_mangled ( SgUnparse_Info & info );
   55543             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   55544             :           virtual SgName get_mangled (void) const override;
   55545             : 
   55546             : 
   55547             : 
   55548             : // End of memberFunctionString
   55549             : // Start of memberFunctionString
   55550             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   55551             : 
   55552             :       //! example of type used where construction is particularly simple
   55553             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   55554             :        // static SgTypeSigned128bitInteger builtin_type;
   55555             :        // static SgTypeSigned128bitInteger* builtin_type;
   55556             : 
   55557             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   55558             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   55559             :        // own data member and associated access function.
   55560             :        // static SgTypeSigned128bitInteger* get_builtin_type();
   55561             : 
   55562             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   55563             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   55564             :        // own data member and associated access function.
   55565             :        // static void set_builtin_type(SgTypeSigned128bitInteger* builtin_type);
   55566             : 
   55567             :       //! function returns example of type
   55568             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   55569             :        // static SgTypeSigned128bitInteger* createType(void);
   55570             :           static SgTypeSigned128bitInteger* createType(SgExpression* optional_fortran_type_kind = NULL);
   55571             : 
   55572             : 
   55573             : // End of memberFunctionString
   55574             : 
   55575             : 
   55576             : 
   55577             :      public: 
   55578             :          virtual ~SgTypeSigned128bitInteger();
   55579             : 
   55580             : 
   55581             :      public: 
   55582             :          SgTypeSigned128bitInteger(); 
   55583             : 
   55584             :     protected:
   55585             : // Start of memberFunctionString
   55586             : static SgTypeSigned128bitInteger* p_builtin_type;
   55587             :           
   55588             : // End of memberFunctionString
   55589             : 
   55590             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeSigned128bitInteger>;
   55591             : 
   55592             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55593             : 
   55594             : 
   55595             :    };
   55596             : #endif
   55597             : 
   55598             : // postdeclarations for SgTypeSigned128bitInteger
   55599             : 
   55600             : /* #line 55601 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55601             : 
   55602             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   55603             : 
   55604             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55605             : 
   55606             : 
   55607             : /* #line 55608 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55608             : 
   55609             : 
   55610             : 
   55611             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55612             : 
   55613             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   55614             : //      This code is automatically generated for each 
   55615             : //      terminal and non-terminal within the defined 
   55616             : //      grammar.  There is a simple way to change the 
   55617             : //      code to fix bugs etc.  See the ROSE README file
   55618             : //      for directions.
   55619             : 
   55620             : // tps: (02/22/2010): Adding DLL export requirements
   55621             : #include "rosedll.h"
   55622             : 
   55623             : // predeclarations for SgTypeUnsigned128bitInteger
   55624             : 
   55625             : /* #line 55626 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55626             : 
   55627             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   55628             : 
   55629             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   55630             : 
   55631             : #if 1
   55632             : // Class Definition for SgTypeUnsigned128bitInteger
   55633             : class ROSE_DLL_API SgTypeUnsigned128bitInteger  : public SgType
   55634             :    {
   55635             :      public:
   55636             : 
   55637             : 
   55638             : /* #line 55639 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   55639             : 
   55640             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   55641             : // Start of memberFunctionString
   55642             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   55643             : 
   55644             : // *** COMMON CODE SECTION BEGINS HERE ***
   55645             : 
   55646             :     public:
   55647             : 
   55648             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   55649             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   55650             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   55651             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   55652             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   55653             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   55654             : 
   55655             :       /*! \brief returns a string representing the class name */
   55656             :           virtual std::string class_name() const override;
   55657             : 
   55658             :       /*! \brief returns new style SageIII enum values */
   55659             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   55660             : 
   55661             :       /*! \brief static variant value */
   55662             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   55663             :        // static const VariantT static_variant = V_SgTypeUnsigned128bitInteger;
   55664             :           enum { static_variant = V_SgTypeUnsigned128bitInteger };
   55665             : 
   55666             :        /* the generated cast function */
   55667             :       /*! \brief Casts pointer from base class to derived class */
   55668             :           ROSE_DLL_API friend       SgTypeUnsigned128bitInteger* isSgTypeUnsigned128bitInteger(       SgNode * s );
   55669             : 
   55670             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   55671             :           ROSE_DLL_API friend const SgTypeUnsigned128bitInteger* isSgTypeUnsigned128bitInteger( const SgNode * s );
   55672             : 
   55673             :      // ******************************************
   55674             :      // * Memory Pool / New / Delete
   55675             :      // ******************************************
   55676             : 
   55677             :      public:
   55678             :           /// \private
   55679             :           static const unsigned pool_size; //
   55680             :           /// \private
   55681             :           static std::vector<unsigned char *> pools; //
   55682             :           /// \private
   55683             :           static SgTypeUnsigned128bitInteger * next_node; // 
   55684             : 
   55685             :           /// \private
   55686             :           static unsigned long initializeStorageClassArray(SgTypeUnsigned128bitIntegerStorageClass *); //
   55687             : 
   55688             :           /// \private
   55689             :           static void clearMemoryPool(); //
   55690             :           static void deleteMemoryPool(); //
   55691             : 
   55692             :           /// \private
   55693             :           static void extendMemoryPoolForFileIO(); //
   55694             : 
   55695             :           /// \private
   55696             :           static SgTypeUnsigned128bitInteger * getPointerFromGlobalIndex(unsigned long); //
   55697             :           /// \private
   55698             :           static SgTypeUnsigned128bitInteger * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   55699             : 
   55700             :           /// \private
   55701             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   55702             :           /// \private
   55703             :           static void resetValidFreepointers(); //
   55704             :           /// \private
   55705             :           static unsigned long getNumberOfLastValidPointer(); //
   55706             : 
   55707             : 
   55708             : #if defined(INLINE_FUNCTIONS)
   55709             :       /*! \brief returns pointer to newly allocated IR node */
   55710             :           inline void *operator new (size_t size);
   55711             : #else
   55712             :       /*! \brief returns pointer to newly allocated IR node */
   55713             :           void *operator new (size_t size);
   55714             : #endif
   55715             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   55716             :           void operator delete (void* pointer, size_t size);
   55717             : 
   55718             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   55719           2 :           void operator delete (void* pointer)
   55720             :              {
   55721             :             // This is the generated delete operator...
   55722           2 :                SgTypeUnsigned128bitInteger::operator delete (pointer,sizeof(SgTypeUnsigned128bitInteger));
   55723             :              }
   55724             : 
   55725             :       /*! \brief Returns the total number of IR nodes of this type */
   55726             :           static size_t numberOfNodes();
   55727             : 
   55728             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   55729             :           static size_t memoryUsage();
   55730             : 
   55731             :       // End of scope which started in IR nodes specific code 
   55732             :       /* */
   55733             : 
   55734             :       /* name Internal Functions
   55735             :           \brief Internal functions ... incomplete-documentation
   55736             : 
   55737             :           These functions have been made public as part of the design, but they are suggested for internal use 
   55738             :           or by particularly knowledgeable users for specialized tools or applications.
   55739             : 
   55740             :           \internal We could not make these private because they are required by user for special purposes. And 
   55741             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   55742             :          
   55743             :        */
   55744             : 
   55745             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   55746             :        // overridden in every class by *generated* implementation
   55747             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   55748             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   55749             :        // MS: 06/28/02 container of names of variables or container indices 
   55750             :        // used used in the traversal to access AST successor nodes
   55751             :        // overridden in every class by *generated* implementation
   55752             :       /*! \brief container of names of variables or container indices used used in the traversal
   55753             :           to access AST successor nodes overridden in every class by *generated* implementation */
   55754             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   55755             : 
   55756             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   55757             :        // than all the vector copies. The implementation for these functions is generated for each class.
   55758             :       /*! \brief return number of children in the traversal successor list */
   55759             :           virtual size_t get_numberOfTraversalSuccessors() override;
   55760             :       /*! \brief index-based access to traversal successors by index number */
   55761             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   55762             :       /*! \brief index-based access to traversal successors by child node */
   55763             :           virtual size_t get_childIndex(SgNode *child) override;
   55764             : 
   55765             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   55766             :        // MS: 08/16/2002 method for generating RTI information
   55767             :       /*! \brief return C++ Runtime-Time-Information */
   55768             :           virtual RTIReturnType roseRTI() override;
   55769             : #endif
   55770             :       /* */
   55771             : 
   55772             : 
   55773             : 
   55774             :       /* name Deprecated Functions
   55775             :           \brief Deprecated functions ... incomplete-documentation
   55776             : 
   55777             :           These functions have been deprecated from use.
   55778             :        */
   55779             :       /* */
   55780             : 
   55781             :       /*! returns a C style string (char*) representing the class name */
   55782             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   55783             : 
   55784             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   55785             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   55786             : #if 0
   55787             :       /*! returns old style Sage II enum values */
   55788             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   55789             :       /*! returns old style Sage II enum values */
   55790             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   55791             : #endif
   55792             :       /* */
   55793             : 
   55794             : 
   55795             : 
   55796             : 
   55797             :      public:
   55798             :       /* name Traversal Support Functions
   55799             :           \brief Traversal support functions ... incomplete-documentation
   55800             : 
   55801             :           These functions have been made public as part of the design, but they are suggested for internal use 
   55802             :           or by particularly knowledgable users for specialized tools or applications.
   55803             :        */
   55804             :       /* */
   55805             : 
   55806             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   55807             :        // (inferior to ROSE traversal mechanism, experimental).
   55808             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   55809             :        */
   55810             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   55811             : 
   55812             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   55813             :       /*! \brief support for the classic visitor pattern done in GoF */
   55814             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   55815             : 
   55816             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   55817             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   55818             :        */
   55819             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   55820             : 
   55821             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   55822             :        */
   55823             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   55824             : 
   55825             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   55826             :        // This traversal helps support internal tools that call static member functions.
   55827             :        // note: this function operates on the memory pools.
   55828             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   55829             :        */
   55830             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   55831             :       /* */
   55832             : 
   55833             : 
   55834             :      public:
   55835             :       /* name Memory Allocation Functions
   55836             :           \brief Memory allocations functions ... incomplete-documentation
   55837             : 
   55838             :           These functions have been made public as part of the design, but they are suggested for internal use 
   55839             :           or by particularly knowledgable users for specialized tools or applications.
   55840             :        */
   55841             :       /* */
   55842             : 
   55843             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   55844             : 
   55845             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   55846             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   55847             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   55848             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   55849             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   55850             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   55851             :           being used with the AST File I/O mechanism.
   55852             :        */
   55853             :           virtual bool isInMemoryPool() override;
   55854             : 
   55855             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   55856             : 
   55857             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   55858             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   55859             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   55860             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   55861             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   55862             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   55863             :           being used with the AST File I/O mechanism.
   55864             :        */
   55865             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   55866             : 
   55867             :       // DQ (4/30/2006): Modified to be a const function.
   55868             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   55869             : 
   55870             :           This functions is part of general support for many possible tools to operate 
   55871             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   55872             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   55873             :           less than the set of pointers used by the AST file I/O. This is part of
   55874             :           work implemented by Andreas, and support tools such as the AST graph generation.
   55875             : 
   55876             :           \warning This function can return unexpected data members and thus the 
   55877             :                    order and the number of elements is unpredicable and subject 
   55878             :                    to change.
   55879             : 
   55880             :           \returns STL vector of pairs of SgNode* and strings
   55881             :        */
   55882             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   55883             : 
   55884             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   55885             : 
   55886             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   55887             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   55888             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   55889             : 
   55890             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   55891             :                    and subject to change.
   55892             :        */
   55893             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   55894             : 
   55895             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   55896             : 
   55897             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   55898             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   55899             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   55900             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   55901             : 
   55902             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   55903             : 
   55904             :           \returns long
   55905             :        */
   55906             :           virtual long getChildIndex( SgNode* childNode ) const override;
   55907             : 
   55908             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   55909             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55910             :       /* \brief Constructor for use by AST File I/O Mechanism
   55911             : 
   55912             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   55913             :           which obtained via fast binary file I/O from disk.
   55914             :        */
   55915             :        // SgTypeUnsigned128bitInteger( SgTypeUnsigned128bitIntegerStorageClass& source );
   55916             : 
   55917             : 
   55918             : 
   55919             : 
   55920             : 
   55921             :  // JH (10/24/2005): methods added to support the ast file IO
   55922             :     private:
   55923             : 
   55924             :       /* name AST Memory Allocation Support Functions
   55925             :           \brief Memory allocations support....
   55926             : 
   55927             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   55928             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   55929             :           and support the AST File I/O Mechanism.
   55930             :        */
   55931             :       /* */
   55932             : 
   55933             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   55934             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   55935             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   55936             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   55937             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   55938             :           a correspinding one in the AST_FILE_IO class!
   55939             :        */
   55940             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   55941             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55942             :       /* \brief Typedef used for low level memory access.
   55943             :        */
   55944             :        // typedef unsigned char* TestType;
   55945             : 
   55946             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   55947             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   55948             :       /* \brief Typedef used to hold memory addresses as values.
   55949             :        */
   55950             :        // typedef unsigned long  AddressType;
   55951             : 
   55952             : 
   55953             : 
   55954             :        // necessary, to have direct access to the p_freepointer and the private methods !
   55955             :       /*! \brief friend class declaration to support AST File I/O */
   55956             :           friend class AST_FILE_IO;
   55957             : 
   55958             :       /*! \brief friend class declaration to support AST File I/O */
   55959             :           friend class SgTypeUnsigned128bitIntegerStorageClass;
   55960             : 
   55961             :       /*! \brief friend class declaration to support AST File I/O */
   55962             :           friend class AstSpecificDataManagingClass;
   55963             : 
   55964             :       /*! \brief friend class declaration to support AST File I/O */
   55965             :           friend class AstSpecificDataManagingClassStorageClass;
   55966             :     public:
   55967             :       /*! \brief IR node constructor to support AST File I/O */
   55968             :           SgTypeUnsigned128bitInteger( const SgTypeUnsigned128bitIntegerStorageClass& source );
   55969             : 
   55970             :  // private: // JJW hack
   55971             :        /*
   55972             :           name AST Memory Allocation Support Variables
   55973             :           Memory allocations support variables 
   55974             : 
   55975             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   55976             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   55977             :           and support the AST File I/O Mechanism.
   55978             :        */
   55979             :       /* */
   55980             : 
   55981             :     public:
   55982             : 
   55983             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   55984             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   55985             :       // virtual SgNode* addRegExpAttribute();
   55986             :       /*! \brief Support for AST matching using regular expression.
   55987             : 
   55988             :           This support is incomplete and the subject of current research to define 
   55989             :           RegEx trees to support inexact matching.
   55990             :        */
   55991             :           SgTypeUnsigned128bitInteger* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   55992             : 
   55993             : // *** COMMON CODE SECTION ENDS HERE ***
   55994             : 
   55995             : 
   55996             : // End of memberFunctionString
   55997             : // Start of memberFunctionString
   55998             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   55999             : 
   56000             :      // the generated cast function
   56001             :      // friend ROSE_DLL_API SgTypeUnsigned128bitInteger* isSgTypeUnsigned128bitInteger ( SgNode* s );
   56002             : 
   56003             :           typedef SgType base_node_type;
   56004             : 
   56005             : 
   56006             : // End of memberFunctionString
   56007             : // Start of memberFunctionString
   56008             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   56009             : 
   56010             :        // SgName get_mangled ( SgUnparse_Info & info );
   56011             : 
   56012             :       //! Mangled name support for unparser support
   56013             :        // SgName get_mangled ( SgUnparse_Info & info );
   56014             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   56015             :           virtual SgName get_mangled (void) const override;
   56016             : 
   56017             : 
   56018             : 
   56019             : // End of memberFunctionString
   56020             : // Start of memberFunctionString
   56021             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   56022             : 
   56023             :       //! example of type used where construction is particularly simple
   56024             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   56025             :        // static SgTypeUnsigned128bitInteger builtin_type;
   56026             :        // static SgTypeUnsigned128bitInteger* builtin_type;
   56027             : 
   56028             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   56029             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   56030             :        // own data member and associated access function.
   56031             :        // static SgTypeUnsigned128bitInteger* get_builtin_type();
   56032             : 
   56033             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   56034             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   56035             :        // own data member and associated access function.
   56036             :        // static void set_builtin_type(SgTypeUnsigned128bitInteger* builtin_type);
   56037             : 
   56038             :       //! function returns example of type
   56039             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   56040             :        // static SgTypeUnsigned128bitInteger* createType(void);
   56041             :           static SgTypeUnsigned128bitInteger* createType(SgExpression* optional_fortran_type_kind = NULL);
   56042             : 
   56043             : 
   56044             : // End of memberFunctionString
   56045             : 
   56046             : 
   56047             : 
   56048             :      public: 
   56049             :          virtual ~SgTypeUnsigned128bitInteger();
   56050             : 
   56051             : 
   56052             :      public: 
   56053             :          SgTypeUnsigned128bitInteger(); 
   56054             : 
   56055             :     protected:
   56056             : // Start of memberFunctionString
   56057             : static SgTypeUnsigned128bitInteger* p_builtin_type;
   56058             :           
   56059             : // End of memberFunctionString
   56060             : 
   56061             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeUnsigned128bitInteger>;
   56062             : 
   56063             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56064             : 
   56065             : 
   56066             :    };
   56067             : #endif
   56068             : 
   56069             : // postdeclarations for SgTypeUnsigned128bitInteger
   56070             : 
   56071             : /* #line 56072 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56072             : 
   56073             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   56074             : 
   56075             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56076             : 
   56077             : 
   56078             : /* #line 56079 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56079             : 
   56080             : 
   56081             : 
   56082             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56083             : 
   56084             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   56085             : //      This code is automatically generated for each 
   56086             : //      terminal and non-terminal within the defined 
   56087             : //      grammar.  There is a simple way to change the 
   56088             : //      code to fix bugs etc.  See the ROSE README file
   56089             : //      for directions.
   56090             : 
   56091             : // tps: (02/22/2010): Adding DLL export requirements
   56092             : #include "rosedll.h"
   56093             : 
   56094             : // predeclarations for SgTypeFloat80
   56095             : 
   56096             : /* #line 56097 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56097             : 
   56098             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   56099             : 
   56100             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56101             : 
   56102             : #if 1
   56103             : // Class Definition for SgTypeFloat80
   56104             : class ROSE_DLL_API SgTypeFloat80  : public SgType
   56105             :    {
   56106             :      public:
   56107             : 
   56108             : 
   56109             : /* #line 56110 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56110             : 
   56111             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   56112             : // Start of memberFunctionString
   56113             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   56114             : 
   56115             : // *** COMMON CODE SECTION BEGINS HERE ***
   56116             : 
   56117             :     public:
   56118             : 
   56119             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   56120             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   56121             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   56122             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   56123             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   56124             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   56125             : 
   56126             :       /*! \brief returns a string representing the class name */
   56127             :           virtual std::string class_name() const override;
   56128             : 
   56129             :       /*! \brief returns new style SageIII enum values */
   56130             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   56131             : 
   56132             :       /*! \brief static variant value */
   56133             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   56134             :        // static const VariantT static_variant = V_SgTypeFloat80;
   56135             :           enum { static_variant = V_SgTypeFloat80 };
   56136             : 
   56137             :        /* the generated cast function */
   56138             :       /*! \brief Casts pointer from base class to derived class */
   56139             :           ROSE_DLL_API friend       SgTypeFloat80* isSgTypeFloat80(       SgNode * s );
   56140             : 
   56141             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   56142             :           ROSE_DLL_API friend const SgTypeFloat80* isSgTypeFloat80( const SgNode * s );
   56143             : 
   56144             :      // ******************************************
   56145             :      // * Memory Pool / New / Delete
   56146             :      // ******************************************
   56147             : 
   56148             :      public:
   56149             :           /// \private
   56150             :           static const unsigned pool_size; //
   56151             :           /// \private
   56152             :           static std::vector<unsigned char *> pools; //
   56153             :           /// \private
   56154             :           static SgTypeFloat80 * next_node; // 
   56155             : 
   56156             :           /// \private
   56157             :           static unsigned long initializeStorageClassArray(SgTypeFloat80StorageClass *); //
   56158             : 
   56159             :           /// \private
   56160             :           static void clearMemoryPool(); //
   56161             :           static void deleteMemoryPool(); //
   56162             : 
   56163             :           /// \private
   56164             :           static void extendMemoryPoolForFileIO(); //
   56165             : 
   56166             :           /// \private
   56167             :           static SgTypeFloat80 * getPointerFromGlobalIndex(unsigned long); //
   56168             :           /// \private
   56169             :           static SgTypeFloat80 * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   56170             : 
   56171             :           /// \private
   56172             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   56173             :           /// \private
   56174             :           static void resetValidFreepointers(); //
   56175             :           /// \private
   56176             :           static unsigned long getNumberOfLastValidPointer(); //
   56177             : 
   56178             : 
   56179             : #if defined(INLINE_FUNCTIONS)
   56180             :       /*! \brief returns pointer to newly allocated IR node */
   56181             :           inline void *operator new (size_t size);
   56182             : #else
   56183             :       /*! \brief returns pointer to newly allocated IR node */
   56184             :           void *operator new (size_t size);
   56185             : #endif
   56186             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   56187             :           void operator delete (void* pointer, size_t size);
   56188             : 
   56189             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   56190           0 :           void operator delete (void* pointer)
   56191             :              {
   56192             :             // This is the generated delete operator...
   56193           0 :                SgTypeFloat80::operator delete (pointer,sizeof(SgTypeFloat80));
   56194             :              }
   56195             : 
   56196             :       /*! \brief Returns the total number of IR nodes of this type */
   56197             :           static size_t numberOfNodes();
   56198             : 
   56199             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   56200             :           static size_t memoryUsage();
   56201             : 
   56202             :       // End of scope which started in IR nodes specific code 
   56203             :       /* */
   56204             : 
   56205             :       /* name Internal Functions
   56206             :           \brief Internal functions ... incomplete-documentation
   56207             : 
   56208             :           These functions have been made public as part of the design, but they are suggested for internal use 
   56209             :           or by particularly knowledgeable users for specialized tools or applications.
   56210             : 
   56211             :           \internal We could not make these private because they are required by user for special purposes. And 
   56212             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   56213             :          
   56214             :        */
   56215             : 
   56216             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   56217             :        // overridden in every class by *generated* implementation
   56218             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   56219             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   56220             :        // MS: 06/28/02 container of names of variables or container indices 
   56221             :        // used used in the traversal to access AST successor nodes
   56222             :        // overridden in every class by *generated* implementation
   56223             :       /*! \brief container of names of variables or container indices used used in the traversal
   56224             :           to access AST successor nodes overridden in every class by *generated* implementation */
   56225             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   56226             : 
   56227             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   56228             :        // than all the vector copies. The implementation for these functions is generated for each class.
   56229             :       /*! \brief return number of children in the traversal successor list */
   56230             :           virtual size_t get_numberOfTraversalSuccessors() override;
   56231             :       /*! \brief index-based access to traversal successors by index number */
   56232             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   56233             :       /*! \brief index-based access to traversal successors by child node */
   56234             :           virtual size_t get_childIndex(SgNode *child) override;
   56235             : 
   56236             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   56237             :        // MS: 08/16/2002 method for generating RTI information
   56238             :       /*! \brief return C++ Runtime-Time-Information */
   56239             :           virtual RTIReturnType roseRTI() override;
   56240             : #endif
   56241             :       /* */
   56242             : 
   56243             : 
   56244             : 
   56245             :       /* name Deprecated Functions
   56246             :           \brief Deprecated functions ... incomplete-documentation
   56247             : 
   56248             :           These functions have been deprecated from use.
   56249             :        */
   56250             :       /* */
   56251             : 
   56252             :       /*! returns a C style string (char*) representing the class name */
   56253             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   56254             : 
   56255             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   56256             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   56257             : #if 0
   56258             :       /*! returns old style Sage II enum values */
   56259             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   56260             :       /*! returns old style Sage II enum values */
   56261             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   56262             : #endif
   56263             :       /* */
   56264             : 
   56265             : 
   56266             : 
   56267             : 
   56268             :      public:
   56269             :       /* name Traversal Support Functions
   56270             :           \brief Traversal support functions ... incomplete-documentation
   56271             : 
   56272             :           These functions have been made public as part of the design, but they are suggested for internal use 
   56273             :           or by particularly knowledgable users for specialized tools or applications.
   56274             :        */
   56275             :       /* */
   56276             : 
   56277             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   56278             :        // (inferior to ROSE traversal mechanism, experimental).
   56279             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   56280             :        */
   56281             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   56282             : 
   56283             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   56284             :       /*! \brief support for the classic visitor pattern done in GoF */
   56285             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   56286             : 
   56287             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   56288             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   56289             :        */
   56290             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   56291             : 
   56292             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   56293             :        */
   56294             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   56295             : 
   56296             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   56297             :        // This traversal helps support internal tools that call static member functions.
   56298             :        // note: this function operates on the memory pools.
   56299             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   56300             :        */
   56301             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   56302             :       /* */
   56303             : 
   56304             : 
   56305             :      public:
   56306             :       /* name Memory Allocation Functions
   56307             :           \brief Memory allocations functions ... incomplete-documentation
   56308             : 
   56309             :           These functions have been made public as part of the design, but they are suggested for internal use 
   56310             :           or by particularly knowledgable users for specialized tools or applications.
   56311             :        */
   56312             :       /* */
   56313             : 
   56314             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   56315             : 
   56316             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   56317             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   56318             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   56319             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   56320             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   56321             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   56322             :           being used with the AST File I/O mechanism.
   56323             :        */
   56324             :           virtual bool isInMemoryPool() override;
   56325             : 
   56326             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   56327             : 
   56328             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   56329             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   56330             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   56331             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   56332             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   56333             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   56334             :           being used with the AST File I/O mechanism.
   56335             :        */
   56336             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   56337             : 
   56338             :       // DQ (4/30/2006): Modified to be a const function.
   56339             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   56340             : 
   56341             :           This functions is part of general support for many possible tools to operate 
   56342             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   56343             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   56344             :           less than the set of pointers used by the AST file I/O. This is part of
   56345             :           work implemented by Andreas, and support tools such as the AST graph generation.
   56346             : 
   56347             :           \warning This function can return unexpected data members and thus the 
   56348             :                    order and the number of elements is unpredicable and subject 
   56349             :                    to change.
   56350             : 
   56351             :           \returns STL vector of pairs of SgNode* and strings
   56352             :        */
   56353             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   56354             : 
   56355             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   56356             : 
   56357             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   56358             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   56359             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   56360             : 
   56361             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   56362             :                    and subject to change.
   56363             :        */
   56364             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   56365             : 
   56366             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   56367             : 
   56368             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   56369             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   56370             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   56371             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   56372             : 
   56373             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   56374             : 
   56375             :           \returns long
   56376             :        */
   56377             :           virtual long getChildIndex( SgNode* childNode ) const override;
   56378             : 
   56379             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   56380             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   56381             :       /* \brief Constructor for use by AST File I/O Mechanism
   56382             : 
   56383             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   56384             :           which obtained via fast binary file I/O from disk.
   56385             :        */
   56386             :        // SgTypeFloat80( SgTypeFloat80StorageClass& source );
   56387             : 
   56388             : 
   56389             : 
   56390             : 
   56391             : 
   56392             :  // JH (10/24/2005): methods added to support the ast file IO
   56393             :     private:
   56394             : 
   56395             :       /* name AST Memory Allocation Support Functions
   56396             :           \brief Memory allocations support....
   56397             : 
   56398             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   56399             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   56400             :           and support the AST File I/O Mechanism.
   56401             :        */
   56402             :       /* */
   56403             : 
   56404             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   56405             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   56406             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   56407             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   56408             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   56409             :           a correspinding one in the AST_FILE_IO class!
   56410             :        */
   56411             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   56412             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   56413             :       /* \brief Typedef used for low level memory access.
   56414             :        */
   56415             :        // typedef unsigned char* TestType;
   56416             : 
   56417             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   56418             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   56419             :       /* \brief Typedef used to hold memory addresses as values.
   56420             :        */
   56421             :        // typedef unsigned long  AddressType;
   56422             : 
   56423             : 
   56424             : 
   56425             :        // necessary, to have direct access to the p_freepointer and the private methods !
   56426             :       /*! \brief friend class declaration to support AST File I/O */
   56427             :           friend class AST_FILE_IO;
   56428             : 
   56429             :       /*! \brief friend class declaration to support AST File I/O */
   56430             :           friend class SgTypeFloat80StorageClass;
   56431             : 
   56432             :       /*! \brief friend class declaration to support AST File I/O */
   56433             :           friend class AstSpecificDataManagingClass;
   56434             : 
   56435             :       /*! \brief friend class declaration to support AST File I/O */
   56436             :           friend class AstSpecificDataManagingClassStorageClass;
   56437             :     public:
   56438             :       /*! \brief IR node constructor to support AST File I/O */
   56439             :           SgTypeFloat80( const SgTypeFloat80StorageClass& source );
   56440             : 
   56441             :  // private: // JJW hack
   56442             :        /*
   56443             :           name AST Memory Allocation Support Variables
   56444             :           Memory allocations support variables 
   56445             : 
   56446             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   56447             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   56448             :           and support the AST File I/O Mechanism.
   56449             :        */
   56450             :       /* */
   56451             : 
   56452             :     public:
   56453             : 
   56454             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   56455             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   56456             :       // virtual SgNode* addRegExpAttribute();
   56457             :       /*! \brief Support for AST matching using regular expression.
   56458             : 
   56459             :           This support is incomplete and the subject of current research to define 
   56460             :           RegEx trees to support inexact matching.
   56461             :        */
   56462             :           SgTypeFloat80* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   56463             : 
   56464             : // *** COMMON CODE SECTION ENDS HERE ***
   56465             : 
   56466             : 
   56467             : // End of memberFunctionString
   56468             : // Start of memberFunctionString
   56469             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   56470             : 
   56471             :      // the generated cast function
   56472             :      // friend ROSE_DLL_API SgTypeFloat80* isSgTypeFloat80 ( SgNode* s );
   56473             : 
   56474             :           typedef SgType base_node_type;
   56475             : 
   56476             : 
   56477             : // End of memberFunctionString
   56478             : // Start of memberFunctionString
   56479             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   56480             : 
   56481             :        // SgName get_mangled ( SgUnparse_Info & info );
   56482             : 
   56483             :       //! Mangled name support for unparser support
   56484             :        // SgName get_mangled ( SgUnparse_Info & info );
   56485             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   56486             :           virtual SgName get_mangled (void) const override;
   56487             : 
   56488             : 
   56489             : 
   56490             : // End of memberFunctionString
   56491             : // Start of memberFunctionString
   56492             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   56493             : 
   56494             :       //! example of type used where construction is particularly simple
   56495             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   56496             :        // static SgTypeFloat80 builtin_type;
   56497             :        // static SgTypeFloat80* builtin_type;
   56498             : 
   56499             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   56500             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   56501             :        // own data member and associated access function.
   56502             :        // static SgTypeFloat80* get_builtin_type();
   56503             : 
   56504             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   56505             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   56506             :        // own data member and associated access function.
   56507             :        // static void set_builtin_type(SgTypeFloat80* builtin_type);
   56508             : 
   56509             :       //! function returns example of type
   56510             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   56511             :        // static SgTypeFloat80* createType(void);
   56512             :           static SgTypeFloat80* createType(SgExpression* optional_fortran_type_kind = NULL);
   56513             : 
   56514             : 
   56515             : // End of memberFunctionString
   56516             : 
   56517             : 
   56518             : 
   56519             :      public: 
   56520             :          virtual ~SgTypeFloat80();
   56521             : 
   56522             : 
   56523             :      public: 
   56524             :          SgTypeFloat80(); 
   56525             : 
   56526             :     protected:
   56527             : // Start of memberFunctionString
   56528             : static SgTypeFloat80* p_builtin_type;
   56529             :           
   56530             : // End of memberFunctionString
   56531             : 
   56532             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeFloat80>;
   56533             : 
   56534             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56535             : 
   56536             : 
   56537             :    };
   56538             : #endif
   56539             : 
   56540             : // postdeclarations for SgTypeFloat80
   56541             : 
   56542             : /* #line 56543 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56543             : 
   56544             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   56545             : 
   56546             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56547             : 
   56548             : 
   56549             : /* #line 56550 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56550             : 
   56551             : 
   56552             : 
   56553             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56554             : 
   56555             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   56556             : //      This code is automatically generated for each 
   56557             : //      terminal and non-terminal within the defined 
   56558             : //      grammar.  There is a simple way to change the 
   56559             : //      code to fix bugs etc.  See the ROSE README file
   56560             : //      for directions.
   56561             : 
   56562             : // tps: (02/22/2010): Adding DLL export requirements
   56563             : #include "rosedll.h"
   56564             : 
   56565             : // predeclarations for SgTypeLongDouble
   56566             : 
   56567             : /* #line 56568 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56568             : 
   56569             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   56570             : 
   56571             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   56572             : 
   56573             : #if 1
   56574             : // Class Definition for SgTypeLongDouble
   56575             : class ROSE_DLL_API SgTypeLongDouble  : public SgType
   56576             :    {
   56577             :      public:
   56578             : 
   56579             : 
   56580             : /* #line 56581 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   56581             : 
   56582             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   56583             : // Start of memberFunctionString
   56584             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   56585             : 
   56586             : // *** COMMON CODE SECTION BEGINS HERE ***
   56587             : 
   56588             :     public:
   56589             : 
   56590             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   56591             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   56592             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   56593             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   56594             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   56595             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   56596             : 
   56597             :       /*! \brief returns a string representing the class name */
   56598             :           virtual std::string class_name() const override;
   56599             : 
   56600             :       /*! \brief returns new style SageIII enum values */
   56601             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   56602             : 
   56603             :       /*! \brief static variant value */
   56604             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   56605             :        // static const VariantT static_variant = V_SgTypeLongDouble;
   56606             :           enum { static_variant = V_SgTypeLongDouble };
   56607             : 
   56608             :        /* the generated cast function */
   56609             :       /*! \brief Casts pointer from base class to derived class */
   56610             :           ROSE_DLL_API friend       SgTypeLongDouble* isSgTypeLongDouble(       SgNode * s );
   56611             : 
   56612             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   56613             :           ROSE_DLL_API friend const SgTypeLongDouble* isSgTypeLongDouble( const SgNode * s );
   56614             : 
   56615             :      // ******************************************
   56616             :      // * Memory Pool / New / Delete
   56617             :      // ******************************************
   56618             : 
   56619             :      public:
   56620             :           /// \private
   56621             :           static const unsigned pool_size; //
   56622             :           /// \private
   56623             :           static std::vector<unsigned char *> pools; //
   56624             :           /// \private
   56625             :           static SgTypeLongDouble * next_node; // 
   56626             : 
   56627             :           /// \private
   56628             :           static unsigned long initializeStorageClassArray(SgTypeLongDoubleStorageClass *); //
   56629             : 
   56630             :           /// \private
   56631             :           static void clearMemoryPool(); //
   56632             :           static void deleteMemoryPool(); //
   56633             : 
   56634             :           /// \private
   56635             :           static void extendMemoryPoolForFileIO(); //
   56636             : 
   56637             :           /// \private
   56638             :           static SgTypeLongDouble * getPointerFromGlobalIndex(unsigned long); //
   56639             :           /// \private
   56640             :           static SgTypeLongDouble * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   56641             : 
   56642             :           /// \private
   56643             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   56644             :           /// \private
   56645             :           static void resetValidFreepointers(); //
   56646             :           /// \private
   56647             :           static unsigned long getNumberOfLastValidPointer(); //
   56648             : 
   56649             : 
   56650             : #if defined(INLINE_FUNCTIONS)
   56651             :       /*! \brief returns pointer to newly allocated IR node */
   56652             :           inline void *operator new (size_t size);
   56653             : #else
   56654             :       /*! \brief returns pointer to newly allocated IR node */
   56655             :           void *operator new (size_t size);
   56656             : #endif
   56657             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   56658             :           void operator delete (void* pointer, size_t size);
   56659             : 
   56660             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   56661         331 :           void operator delete (void* pointer)
   56662             :              {
   56663             :             // This is the generated delete operator...
   56664         331 :                SgTypeLongDouble::operator delete (pointer,sizeof(SgTypeLongDouble));
   56665             :              }
   56666             : 
   56667             :       /*! \brief Returns the total number of IR nodes of this type */
   56668             :           static size_t numberOfNodes();
   56669             : 
   56670             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   56671             :           static size_t memoryUsage();
   56672             : 
   56673             :       // End of scope which started in IR nodes specific code 
   56674             :       /* */
   56675             : 
   56676             :       /* name Internal Functions
   56677             :           \brief Internal functions ... incomplete-documentation
   56678             : 
   56679             :           These functions have been made public as part of the design, but they are suggested for internal use 
   56680             :           or by particularly knowledgeable users for specialized tools or applications.
   56681             : 
   56682             :           \internal We could not make these private because they are required by user for special purposes. And 
   56683             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   56684             :          
   56685             :        */
   56686             : 
   56687             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   56688             :        // overridden in every class by *generated* implementation
   56689             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   56690             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   56691             :        // MS: 06/28/02 container of names of variables or container indices 
   56692             :        // used used in the traversal to access AST successor nodes
   56693             :        // overridden in every class by *generated* implementation
   56694             :       /*! \brief container of names of variables or container indices used used in the traversal
   56695             :           to access AST successor nodes overridden in every class by *generated* implementation */
   56696             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   56697             : 
   56698             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   56699             :        // than all the vector copies. The implementation for these functions is generated for each class.
   56700             :       /*! \brief return number of children in the traversal successor list */
   56701             :           virtual size_t get_numberOfTraversalSuccessors() override;
   56702             :       /*! \brief index-based access to traversal successors by index number */
   56703             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   56704             :       /*! \brief index-based access to traversal successors by child node */
   56705             :           virtual size_t get_childIndex(SgNode *child) override;
   56706             : 
   56707             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   56708             :        // MS: 08/16/2002 method for generating RTI information
   56709             :       /*! \brief return C++ Runtime-Time-Information */
   56710             :           virtual RTIReturnType roseRTI() override;
   56711             : #endif
   56712             :       /* */
   56713             : 
   56714             : 
   56715             : 
   56716             :       /* name Deprecated Functions
   56717             :           \brief Deprecated functions ... incomplete-documentation
   56718             : 
   56719             :           These functions have been deprecated from use.
   56720             :        */
   56721             :       /* */
   56722             : 
   56723             :       /*! returns a C style string (char*) representing the class name */
   56724             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   56725             : 
   56726             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   56727             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   56728             : #if 0
   56729             :       /*! returns old style Sage II enum values */
   56730             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   56731             :       /*! returns old style Sage II enum values */
   56732             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   56733             : #endif
   56734             :       /* */
   56735             : 
   56736             : 
   56737             : 
   56738             : 
   56739             :      public:
   56740             :       /* name Traversal Support Functions
   56741             :           \brief Traversal support functions ... incomplete-documentation
   56742             : 
   56743             :           These functions have been made public as part of the design, but they are suggested for internal use 
   56744             :           or by particularly knowledgable users for specialized tools or applications.
   56745             :        */
   56746             :       /* */
   56747             : 
   56748             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   56749             :        // (inferior to ROSE traversal mechanism, experimental).
   56750             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   56751             :        */
   56752             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   56753             : 
   56754             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   56755             :       /*! \brief support for the classic visitor pattern done in GoF */
   56756             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   56757             : 
   56758             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   56759             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   56760             :        */
   56761             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   56762             : 
   56763             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   56764             :        */
   56765             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   56766             : 
   56767             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   56768             :        // This traversal helps support internal tools that call static member functions.
   56769             :        // note: this function operates on the memory pools.
   56770             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   56771             :        */
   56772             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   56773             :       /* */
   56774             : 
   56775             : 
   56776             :      public:
   56777             :       /* name Memory Allocation Functions
   56778             :           \brief Memory allocations functions ... incomplete-documentation
   56779             : 
   56780             :           These functions have been made public as part of the design, but they are suggested for internal use 
   56781             :           or by particularly knowledgable users for specialized tools or applications.
   56782             :        */
   56783             :       /* */
   56784             : 
   56785             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   56786             : 
   56787             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   56788             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   56789             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   56790             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   56791             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   56792             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   56793             :           being used with the AST File I/O mechanism.
   56794             :        */
   56795             :           virtual bool isInMemoryPool() override;
   56796             : 
   56797             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   56798             : 
   56799             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   56800             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   56801             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   56802             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   56803             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   56804             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   56805             :           being used with the AST File I/O mechanism.
   56806             :        */
   56807             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   56808             : 
   56809             :       // DQ (4/30/2006): Modified to be a const function.
   56810             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   56811             : 
   56812             :           This functions is part of general support for many possible tools to operate 
   56813             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   56814             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   56815             :           less than the set of pointers used by the AST file I/O. This is part of
   56816             :           work implemented by Andreas, and support tools such as the AST graph generation.
   56817             : 
   56818             :           \warning This function can return unexpected data members and thus the 
   56819             :                    order and the number of elements is unpredicable and subject 
   56820             :                    to change.
   56821             : 
   56822             :           \returns STL vector of pairs of SgNode* and strings
   56823             :        */
   56824             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   56825             : 
   56826             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   56827             : 
   56828             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   56829             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   56830             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   56831             : 
   56832             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   56833             :                    and subject to change.
   56834             :        */
   56835             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   56836             : 
   56837             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   56838             : 
   56839             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   56840             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   56841             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   56842             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   56843             : 
   56844             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   56845             : 
   56846             :           \returns long
   56847             :        */
   56848             :           virtual long getChildIndex( SgNode* childNode ) const override;
   56849             : 
   56850             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   56851             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   56852             :       /* \brief Constructor for use by AST File I/O Mechanism
   56853             : 
   56854             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   56855             :           which obtained via fast binary file I/O from disk.
   56856             :        */
   56857             :        // SgTypeLongDouble( SgTypeLongDoubleStorageClass& source );
   56858             : 
   56859             : 
   56860             : 
   56861             : 
   56862             : 
   56863             :  // JH (10/24/2005): methods added to support the ast file IO
   56864             :     private:
   56865             : 
   56866             :       /* name AST Memory Allocation Support Functions
   56867             :           \brief Memory allocations support....
   56868             : 
   56869             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   56870             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   56871             :           and support the AST File I/O Mechanism.
   56872             :        */
   56873             :       /* */
   56874             : 
   56875             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   56876             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   56877             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   56878             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   56879             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   56880             :           a correspinding one in the AST_FILE_IO class!
   56881             :        */
   56882             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   56883             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   56884             :       /* \brief Typedef used for low level memory access.
   56885             :        */
   56886             :        // typedef unsigned char* TestType;
   56887             : 
   56888             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   56889             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   56890             :       /* \brief Typedef used to hold memory addresses as values.
   56891             :        */
   56892             :        // typedef unsigned long  AddressType;
   56893             : 
   56894             : 
   56895             : 
   56896             :        // necessary, to have direct access to the p_freepointer and the private methods !
   56897             :       /*! \brief friend class declaration to support AST File I/O */
   56898             :           friend class AST_FILE_IO;
   56899             : 
   56900             :       /*! \brief friend class declaration to support AST File I/O */
   56901             :           friend class SgTypeLongDoubleStorageClass;
   56902             : 
   56903             :       /*! \brief friend class declaration to support AST File I/O */
   56904             :           friend class AstSpecificDataManagingClass;
   56905             : 
   56906             :       /*! \brief friend class declaration to support AST File I/O */
   56907             :           friend class AstSpecificDataManagingClassStorageClass;
   56908             :     public:
   56909             :       /*! \brief IR node constructor to support AST File I/O */
   56910             :           SgTypeLongDouble( const SgTypeLongDoubleStorageClass& source );
   56911             : 
   56912             :  // private: // JJW hack
   56913             :        /*
   56914             :           name AST Memory Allocation Support Variables
   56915             :           Memory allocations support variables 
   56916             : 
   56917             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   56918             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   56919             :           and support the AST File I/O Mechanism.
   56920             :        */
   56921             :       /* */
   56922             : 
   56923             :     public:
   56924             : 
   56925             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   56926             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   56927             :       // virtual SgNode* addRegExpAttribute();
   56928             :       /*! \brief Support for AST matching using regular expression.
   56929             : 
   56930             :           This support is incomplete and the subject of current research to define 
   56931             :           RegEx trees to support inexact matching.
   56932             :        */
   56933             :           SgTypeLongDouble* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   56934             : 
   56935             : // *** COMMON CODE SECTION ENDS HERE ***
   56936             : 
   56937             : 
   56938             : // End of memberFunctionString
   56939             : // Start of memberFunctionString
   56940             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   56941             : 
   56942             :      // the generated cast function
   56943             :      // friend ROSE_DLL_API SgTypeLongDouble* isSgTypeLongDouble ( SgNode* s );
   56944             : 
   56945             :           typedef SgType base_node_type;
   56946             : 
   56947             : 
   56948             : // End of memberFunctionString
   56949             : // Start of memberFunctionString
   56950             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   56951             : 
   56952             :        // SgName get_mangled ( SgUnparse_Info & info );
   56953             : 
   56954             :       //! Mangled name support for unparser support
   56955             :        // SgName get_mangled ( SgUnparse_Info & info );
   56956             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   56957             :           virtual SgName get_mangled (void) const override;
   56958             : 
   56959             : 
   56960             : 
   56961             : // End of memberFunctionString
   56962             : // Start of memberFunctionString
   56963             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   56964             : 
   56965             :       //! example of type used where construction is particularly simple
   56966             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   56967             :        // static SgTypeLongDouble builtin_type;
   56968             :        // static SgTypeLongDouble* builtin_type;
   56969             : 
   56970             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   56971             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   56972             :        // own data member and associated access function.
   56973             :        // static SgTypeLongDouble* get_builtin_type();
   56974             : 
   56975             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   56976             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   56977             :        // own data member and associated access function.
   56978             :        // static void set_builtin_type(SgTypeLongDouble* builtin_type);
   56979             : 
   56980             :       //! function returns example of type
   56981             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   56982             :        // static SgTypeLongDouble* createType(void);
   56983             :           static SgTypeLongDouble* createType(SgExpression* optional_fortran_type_kind = NULL);
   56984             : 
   56985             : 
   56986             : // End of memberFunctionString
   56987             : 
   56988             : 
   56989             : 
   56990             :      public: 
   56991             :          virtual ~SgTypeLongDouble();
   56992             : 
   56993             : 
   56994             :      public: 
   56995             :          SgTypeLongDouble(); 
   56996             : 
   56997             :     protected:
   56998             : // Start of memberFunctionString
   56999             : static SgTypeLongDouble* p_builtin_type;
   57000             :           
   57001             : // End of memberFunctionString
   57002             : 
   57003             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeLongDouble>;
   57004             : 
   57005             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57006             : 
   57007             : 
   57008             :    };
   57009             : #endif
   57010             : 
   57011             : // postdeclarations for SgTypeLongDouble
   57012             : 
   57013             : /* #line 57014 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57014             : 
   57015             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   57016             : 
   57017             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57018             : 
   57019             : 
   57020             : /* #line 57021 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57021             : 
   57022             : 
   57023             : 
   57024             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57025             : 
   57026             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   57027             : //      This code is automatically generated for each 
   57028             : //      terminal and non-terminal within the defined 
   57029             : //      grammar.  There is a simple way to change the 
   57030             : //      code to fix bugs etc.  See the ROSE README file
   57031             : //      for directions.
   57032             : 
   57033             : // tps: (02/22/2010): Adding DLL export requirements
   57034             : #include "rosedll.h"
   57035             : 
   57036             : // predeclarations for SgTypeString
   57037             : 
   57038             : /* #line 57039 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57039             : 
   57040             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   57041             : 
   57042             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57043             : 
   57044             : #if 1
   57045             : // Class Definition for SgTypeString
   57046             : class ROSE_DLL_API SgTypeString  : public SgType
   57047             :    {
   57048             :      public:
   57049             : 
   57050             : 
   57051             : /* #line 57052 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57052             : 
   57053             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   57054             : // Start of memberFunctionString
   57055             : /* #line 945 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   57056             : 
   57057             :        // DQ (8/17/2010): Support for Fortran use of SgTypeString.
   57058             :        // static SgTypeString* createType(SgExpression*, size_t length, SgExpression* optional_fortran_type_kind = NULL);
   57059             :           static SgTypeString* createType(SgExpression*, SgExpression* optional_fortran_type_kind = NULL);
   57060             : 
   57061             :       //! Performs final initialization of data members (called by constructors)
   57062             :           void post_construction_initialization() override;
   57063             : 
   57064             : 
   57065             : // End of memberFunctionString
   57066             : // Start of memberFunctionString
   57067             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   57068             : 
   57069             : // *** COMMON CODE SECTION BEGINS HERE ***
   57070             : 
   57071             :     public:
   57072             : 
   57073             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   57074             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   57075             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   57076             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   57077             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   57078             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   57079             : 
   57080             :       /*! \brief returns a string representing the class name */
   57081             :           virtual std::string class_name() const override;
   57082             : 
   57083             :       /*! \brief returns new style SageIII enum values */
   57084             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   57085             : 
   57086             :       /*! \brief static variant value */
   57087             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   57088             :        // static const VariantT static_variant = V_SgTypeString;
   57089             :           enum { static_variant = V_SgTypeString };
   57090             : 
   57091             :        /* the generated cast function */
   57092             :       /*! \brief Casts pointer from base class to derived class */
   57093             :           ROSE_DLL_API friend       SgTypeString* isSgTypeString(       SgNode * s );
   57094             : 
   57095             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   57096             :           ROSE_DLL_API friend const SgTypeString* isSgTypeString( const SgNode * s );
   57097             : 
   57098             :      // ******************************************
   57099             :      // * Memory Pool / New / Delete
   57100             :      // ******************************************
   57101             : 
   57102             :      public:
   57103             :           /// \private
   57104             :           static const unsigned pool_size; //
   57105             :           /// \private
   57106             :           static std::vector<unsigned char *> pools; //
   57107             :           /// \private
   57108             :           static SgTypeString * next_node; // 
   57109             : 
   57110             :           /// \private
   57111             :           static unsigned long initializeStorageClassArray(SgTypeStringStorageClass *); //
   57112             : 
   57113             :           /// \private
   57114             :           static void clearMemoryPool(); //
   57115             :           static void deleteMemoryPool(); //
   57116             : 
   57117             :           /// \private
   57118             :           static void extendMemoryPoolForFileIO(); //
   57119             : 
   57120             :           /// \private
   57121             :           static SgTypeString * getPointerFromGlobalIndex(unsigned long); //
   57122             :           /// \private
   57123             :           static SgTypeString * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   57124             : 
   57125             :           /// \private
   57126             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   57127             :           /// \private
   57128             :           static void resetValidFreepointers(); //
   57129             :           /// \private
   57130             :           static unsigned long getNumberOfLastValidPointer(); //
   57131             : 
   57132             : 
   57133             : #if defined(INLINE_FUNCTIONS)
   57134             :       /*! \brief returns pointer to newly allocated IR node */
   57135             :           inline void *operator new (size_t size);
   57136             : #else
   57137             :       /*! \brief returns pointer to newly allocated IR node */
   57138             :           void *operator new (size_t size);
   57139             : #endif
   57140             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   57141             :           void operator delete (void* pointer, size_t size);
   57142             : 
   57143             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   57144         109 :           void operator delete (void* pointer)
   57145             :              {
   57146             :             // This is the generated delete operator...
   57147         109 :                SgTypeString::operator delete (pointer,sizeof(SgTypeString));
   57148             :              }
   57149             : 
   57150             :       /*! \brief Returns the total number of IR nodes of this type */
   57151             :           static size_t numberOfNodes();
   57152             : 
   57153             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   57154             :           static size_t memoryUsage();
   57155             : 
   57156             :       // End of scope which started in IR nodes specific code 
   57157             :       /* */
   57158             : 
   57159             :       /* name Internal Functions
   57160             :           \brief Internal functions ... incomplete-documentation
   57161             : 
   57162             :           These functions have been made public as part of the design, but they are suggested for internal use 
   57163             :           or by particularly knowledgeable users for specialized tools or applications.
   57164             : 
   57165             :           \internal We could not make these private because they are required by user for special purposes. And 
   57166             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   57167             :          
   57168             :        */
   57169             : 
   57170             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   57171             :        // overridden in every class by *generated* implementation
   57172             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   57173             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   57174             :        // MS: 06/28/02 container of names of variables or container indices 
   57175             :        // used used in the traversal to access AST successor nodes
   57176             :        // overridden in every class by *generated* implementation
   57177             :       /*! \brief container of names of variables or container indices used used in the traversal
   57178             :           to access AST successor nodes overridden in every class by *generated* implementation */
   57179             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   57180             : 
   57181             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   57182             :        // than all the vector copies. The implementation for these functions is generated for each class.
   57183             :       /*! \brief return number of children in the traversal successor list */
   57184             :           virtual size_t get_numberOfTraversalSuccessors() override;
   57185             :       /*! \brief index-based access to traversal successors by index number */
   57186             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   57187             :       /*! \brief index-based access to traversal successors by child node */
   57188             :           virtual size_t get_childIndex(SgNode *child) override;
   57189             : 
   57190             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   57191             :        // MS: 08/16/2002 method for generating RTI information
   57192             :       /*! \brief return C++ Runtime-Time-Information */
   57193             :           virtual RTIReturnType roseRTI() override;
   57194             : #endif
   57195             :       /* */
   57196             : 
   57197             : 
   57198             : 
   57199             :       /* name Deprecated Functions
   57200             :           \brief Deprecated functions ... incomplete-documentation
   57201             : 
   57202             :           These functions have been deprecated from use.
   57203             :        */
   57204             :       /* */
   57205             : 
   57206             :       /*! returns a C style string (char*) representing the class name */
   57207             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   57208             : 
   57209             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   57210             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   57211             : #if 0
   57212             :       /*! returns old style Sage II enum values */
   57213             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   57214             :       /*! returns old style Sage II enum values */
   57215             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   57216             : #endif
   57217             :       /* */
   57218             : 
   57219             : 
   57220             : 
   57221             : 
   57222             :      public:
   57223             :       /* name Traversal Support Functions
   57224             :           \brief Traversal support functions ... incomplete-documentation
   57225             : 
   57226             :           These functions have been made public as part of the design, but they are suggested for internal use 
   57227             :           or by particularly knowledgable users for specialized tools or applications.
   57228             :        */
   57229             :       /* */
   57230             : 
   57231             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   57232             :        // (inferior to ROSE traversal mechanism, experimental).
   57233             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   57234             :        */
   57235             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   57236             : 
   57237             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   57238             :       /*! \brief support for the classic visitor pattern done in GoF */
   57239             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   57240             : 
   57241             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   57242             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   57243             :        */
   57244             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   57245             : 
   57246             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   57247             :        */
   57248             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   57249             : 
   57250             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   57251             :        // This traversal helps support internal tools that call static member functions.
   57252             :        // note: this function operates on the memory pools.
   57253             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   57254             :        */
   57255             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   57256             :       /* */
   57257             : 
   57258             : 
   57259             :      public:
   57260             :       /* name Memory Allocation Functions
   57261             :           \brief Memory allocations functions ... incomplete-documentation
   57262             : 
   57263             :           These functions have been made public as part of the design, but they are suggested for internal use 
   57264             :           or by particularly knowledgable users for specialized tools or applications.
   57265             :        */
   57266             :       /* */
   57267             : 
   57268             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   57269             : 
   57270             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   57271             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   57272             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   57273             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   57274             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   57275             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   57276             :           being used with the AST File I/O mechanism.
   57277             :        */
   57278             :           virtual bool isInMemoryPool() override;
   57279             : 
   57280             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   57281             : 
   57282             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   57283             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   57284             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   57285             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   57286             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   57287             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   57288             :           being used with the AST File I/O mechanism.
   57289             :        */
   57290             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   57291             : 
   57292             :       // DQ (4/30/2006): Modified to be a const function.
   57293             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   57294             : 
   57295             :           This functions is part of general support for many possible tools to operate 
   57296             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   57297             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   57298             :           less than the set of pointers used by the AST file I/O. This is part of
   57299             :           work implemented by Andreas, and support tools such as the AST graph generation.
   57300             : 
   57301             :           \warning This function can return unexpected data members and thus the 
   57302             :                    order and the number of elements is unpredicable and subject 
   57303             :                    to change.
   57304             : 
   57305             :           \returns STL vector of pairs of SgNode* and strings
   57306             :        */
   57307             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   57308             : 
   57309             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   57310             : 
   57311             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   57312             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   57313             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   57314             : 
   57315             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   57316             :                    and subject to change.
   57317             :        */
   57318             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   57319             : 
   57320             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   57321             : 
   57322             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   57323             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   57324             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   57325             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   57326             : 
   57327             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   57328             : 
   57329             :           \returns long
   57330             :        */
   57331             :           virtual long getChildIndex( SgNode* childNode ) const override;
   57332             : 
   57333             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   57334             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   57335             :       /* \brief Constructor for use by AST File I/O Mechanism
   57336             : 
   57337             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   57338             :           which obtained via fast binary file I/O from disk.
   57339             :        */
   57340             :        // SgTypeString( SgTypeStringStorageClass& source );
   57341             : 
   57342             : 
   57343             : 
   57344             : 
   57345             : 
   57346             :  // JH (10/24/2005): methods added to support the ast file IO
   57347             :     private:
   57348             : 
   57349             :       /* name AST Memory Allocation Support Functions
   57350             :           \brief Memory allocations support....
   57351             : 
   57352             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   57353             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   57354             :           and support the AST File I/O Mechanism.
   57355             :        */
   57356             :       /* */
   57357             : 
   57358             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   57359             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   57360             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   57361             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   57362             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   57363             :           a correspinding one in the AST_FILE_IO class!
   57364             :        */
   57365             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   57366             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   57367             :       /* \brief Typedef used for low level memory access.
   57368             :        */
   57369             :        // typedef unsigned char* TestType;
   57370             : 
   57371             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   57372             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   57373             :       /* \brief Typedef used to hold memory addresses as values.
   57374             :        */
   57375             :        // typedef unsigned long  AddressType;
   57376             : 
   57377             : 
   57378             : 
   57379             :        // necessary, to have direct access to the p_freepointer and the private methods !
   57380             :       /*! \brief friend class declaration to support AST File I/O */
   57381             :           friend class AST_FILE_IO;
   57382             : 
   57383             :       /*! \brief friend class declaration to support AST File I/O */
   57384             :           friend class SgTypeStringStorageClass;
   57385             : 
   57386             :       /*! \brief friend class declaration to support AST File I/O */
   57387             :           friend class AstSpecificDataManagingClass;
   57388             : 
   57389             :       /*! \brief friend class declaration to support AST File I/O */
   57390             :           friend class AstSpecificDataManagingClassStorageClass;
   57391             :     public:
   57392             :       /*! \brief IR node constructor to support AST File I/O */
   57393             :           SgTypeString( const SgTypeStringStorageClass& source );
   57394             : 
   57395             :  // private: // JJW hack
   57396             :        /*
   57397             :           name AST Memory Allocation Support Variables
   57398             :           Memory allocations support variables 
   57399             : 
   57400             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   57401             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   57402             :           and support the AST File I/O Mechanism.
   57403             :        */
   57404             :       /* */
   57405             : 
   57406             :     public:
   57407             : 
   57408             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   57409             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   57410             :       // virtual SgNode* addRegExpAttribute();
   57411             :       /*! \brief Support for AST matching using regular expression.
   57412             : 
   57413             :           This support is incomplete and the subject of current research to define 
   57414             :           RegEx trees to support inexact matching.
   57415             :        */
   57416             :           SgTypeString* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   57417             : 
   57418             : // *** COMMON CODE SECTION ENDS HERE ***
   57419             : 
   57420             : 
   57421             : // End of memberFunctionString
   57422             : // Start of memberFunctionString
   57423             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   57424             : 
   57425             :      // the generated cast function
   57426             :      // friend ROSE_DLL_API SgTypeString* isSgTypeString ( SgNode* s );
   57427             : 
   57428             :           typedef SgType base_node_type;
   57429             : 
   57430             : 
   57431             : // End of memberFunctionString
   57432             : // Start of memberFunctionString
   57433             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   57434             : 
   57435             :        // SgName get_mangled ( SgUnparse_Info & info );
   57436             : 
   57437             :       //! Mangled name support for unparser support
   57438             :        // SgName get_mangled ( SgUnparse_Info & info );
   57439             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   57440             :           virtual SgName get_mangled (void) const override;
   57441             : 
   57442             : 
   57443             : 
   57444             : // End of memberFunctionString
   57445             : 
   57446             :      public: 
   57447             :          SgExpression* get_lengthExpression() const;
   57448             :          void set_lengthExpression(SgExpression* lengthExpression);
   57449             : 
   57450             : 
   57451             :      public: 
   57452             :          virtual ~SgTypeString();
   57453             : 
   57454             : 
   57455             :      public: 
   57456             :          SgTypeString(SgExpression* lengthExpression = NULL); 
   57457             : 
   57458             :     protected:
   57459             : // Start of memberFunctionString
   57460             : SgExpression* p_lengthExpression;
   57461             :           
   57462             : // End of memberFunctionString
   57463             : 
   57464             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeString>;
   57465             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeString, SgExpression*,&SgTypeString::p_lengthExpression>;
   57466             : 
   57467             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57468             : 
   57469             : 
   57470             :    };
   57471             : #endif
   57472             : 
   57473             : // postdeclarations for SgTypeString
   57474             : 
   57475             : /* #line 57476 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57476             : 
   57477             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   57478             : 
   57479             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57480             : 
   57481             : 
   57482             : /* #line 57483 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57483             : 
   57484             : 
   57485             : 
   57486             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57487             : 
   57488             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   57489             : //      This code is automatically generated for each 
   57490             : //      terminal and non-terminal within the defined 
   57491             : //      grammar.  There is a simple way to change the 
   57492             : //      code to fix bugs etc.  See the ROSE README file
   57493             : //      for directions.
   57494             : 
   57495             : // tps: (02/22/2010): Adding DLL export requirements
   57496             : #include "rosedll.h"
   57497             : 
   57498             : // predeclarations for SgTypeBool
   57499             : 
   57500             : /* #line 57501 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57501             : 
   57502             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   57503             : 
   57504             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57505             : 
   57506             : #if 1
   57507             : // Class Definition for SgTypeBool
   57508             : class ROSE_DLL_API SgTypeBool  : public SgType
   57509             :    {
   57510             :      public:
   57511             : 
   57512             : 
   57513             : /* #line 57514 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57514             : 
   57515             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   57516             : // Start of memberFunctionString
   57517             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   57518             : 
   57519             : // *** COMMON CODE SECTION BEGINS HERE ***
   57520             : 
   57521             :     public:
   57522             : 
   57523             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   57524             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   57525             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   57526             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   57527             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   57528             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   57529             : 
   57530             :       /*! \brief returns a string representing the class name */
   57531             :           virtual std::string class_name() const override;
   57532             : 
   57533             :       /*! \brief returns new style SageIII enum values */
   57534             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   57535             : 
   57536             :       /*! \brief static variant value */
   57537             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   57538             :        // static const VariantT static_variant = V_SgTypeBool;
   57539             :           enum { static_variant = V_SgTypeBool };
   57540             : 
   57541             :        /* the generated cast function */
   57542             :       /*! \brief Casts pointer from base class to derived class */
   57543             :           ROSE_DLL_API friend       SgTypeBool* isSgTypeBool(       SgNode * s );
   57544             : 
   57545             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   57546             :           ROSE_DLL_API friend const SgTypeBool* isSgTypeBool( const SgNode * s );
   57547             : 
   57548             :      // ******************************************
   57549             :      // * Memory Pool / New / Delete
   57550             :      // ******************************************
   57551             : 
   57552             :      public:
   57553             :           /// \private
   57554             :           static const unsigned pool_size; //
   57555             :           /// \private
   57556             :           static std::vector<unsigned char *> pools; //
   57557             :           /// \private
   57558             :           static SgTypeBool * next_node; // 
   57559             : 
   57560             :           /// \private
   57561             :           static unsigned long initializeStorageClassArray(SgTypeBoolStorageClass *); //
   57562             : 
   57563             :           /// \private
   57564             :           static void clearMemoryPool(); //
   57565             :           static void deleteMemoryPool(); //
   57566             : 
   57567             :           /// \private
   57568             :           static void extendMemoryPoolForFileIO(); //
   57569             : 
   57570             :           /// \private
   57571             :           static SgTypeBool * getPointerFromGlobalIndex(unsigned long); //
   57572             :           /// \private
   57573             :           static SgTypeBool * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   57574             : 
   57575             :           /// \private
   57576             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   57577             :           /// \private
   57578             :           static void resetValidFreepointers(); //
   57579             :           /// \private
   57580             :           static unsigned long getNumberOfLastValidPointer(); //
   57581             : 
   57582             : 
   57583             : #if defined(INLINE_FUNCTIONS)
   57584             :       /*! \brief returns pointer to newly allocated IR node */
   57585             :           inline void *operator new (size_t size);
   57586             : #else
   57587             :       /*! \brief returns pointer to newly allocated IR node */
   57588             :           void *operator new (size_t size);
   57589             : #endif
   57590             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   57591             :           void operator delete (void* pointer, size_t size);
   57592             : 
   57593             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   57594       26768 :           void operator delete (void* pointer)
   57595             :              {
   57596             :             // This is the generated delete operator...
   57597       26768 :                SgTypeBool::operator delete (pointer,sizeof(SgTypeBool));
   57598             :              }
   57599             : 
   57600             :       /*! \brief Returns the total number of IR nodes of this type */
   57601             :           static size_t numberOfNodes();
   57602             : 
   57603             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   57604             :           static size_t memoryUsage();
   57605             : 
   57606             :       // End of scope which started in IR nodes specific code 
   57607             :       /* */
   57608             : 
   57609             :       /* name Internal Functions
   57610             :           \brief Internal functions ... incomplete-documentation
   57611             : 
   57612             :           These functions have been made public as part of the design, but they are suggested for internal use 
   57613             :           or by particularly knowledgeable users for specialized tools or applications.
   57614             : 
   57615             :           \internal We could not make these private because they are required by user for special purposes. And 
   57616             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   57617             :          
   57618             :        */
   57619             : 
   57620             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   57621             :        // overridden in every class by *generated* implementation
   57622             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   57623             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   57624             :        // MS: 06/28/02 container of names of variables or container indices 
   57625             :        // used used in the traversal to access AST successor nodes
   57626             :        // overridden in every class by *generated* implementation
   57627             :       /*! \brief container of names of variables or container indices used used in the traversal
   57628             :           to access AST successor nodes overridden in every class by *generated* implementation */
   57629             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   57630             : 
   57631             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   57632             :        // than all the vector copies. The implementation for these functions is generated for each class.
   57633             :       /*! \brief return number of children in the traversal successor list */
   57634             :           virtual size_t get_numberOfTraversalSuccessors() override;
   57635             :       /*! \brief index-based access to traversal successors by index number */
   57636             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   57637             :       /*! \brief index-based access to traversal successors by child node */
   57638             :           virtual size_t get_childIndex(SgNode *child) override;
   57639             : 
   57640             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   57641             :        // MS: 08/16/2002 method for generating RTI information
   57642             :       /*! \brief return C++ Runtime-Time-Information */
   57643             :           virtual RTIReturnType roseRTI() override;
   57644             : #endif
   57645             :       /* */
   57646             : 
   57647             : 
   57648             : 
   57649             :       /* name Deprecated Functions
   57650             :           \brief Deprecated functions ... incomplete-documentation
   57651             : 
   57652             :           These functions have been deprecated from use.
   57653             :        */
   57654             :       /* */
   57655             : 
   57656             :       /*! returns a C style string (char*) representing the class name */
   57657             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   57658             : 
   57659             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   57660             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   57661             : #if 0
   57662             :       /*! returns old style Sage II enum values */
   57663             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   57664             :       /*! returns old style Sage II enum values */
   57665             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   57666             : #endif
   57667             :       /* */
   57668             : 
   57669             : 
   57670             : 
   57671             : 
   57672             :      public:
   57673             :       /* name Traversal Support Functions
   57674             :           \brief Traversal support functions ... incomplete-documentation
   57675             : 
   57676             :           These functions have been made public as part of the design, but they are suggested for internal use 
   57677             :           or by particularly knowledgable users for specialized tools or applications.
   57678             :        */
   57679             :       /* */
   57680             : 
   57681             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   57682             :        // (inferior to ROSE traversal mechanism, experimental).
   57683             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   57684             :        */
   57685             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   57686             : 
   57687             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   57688             :       /*! \brief support for the classic visitor pattern done in GoF */
   57689             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   57690             : 
   57691             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   57692             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   57693             :        */
   57694             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   57695             : 
   57696             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   57697             :        */
   57698             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   57699             : 
   57700             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   57701             :        // This traversal helps support internal tools that call static member functions.
   57702             :        // note: this function operates on the memory pools.
   57703             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   57704             :        */
   57705             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   57706             :       /* */
   57707             : 
   57708             : 
   57709             :      public:
   57710             :       /* name Memory Allocation Functions
   57711             :           \brief Memory allocations functions ... incomplete-documentation
   57712             : 
   57713             :           These functions have been made public as part of the design, but they are suggested for internal use 
   57714             :           or by particularly knowledgable users for specialized tools or applications.
   57715             :        */
   57716             :       /* */
   57717             : 
   57718             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   57719             : 
   57720             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   57721             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   57722             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   57723             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   57724             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   57725             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   57726             :           being used with the AST File I/O mechanism.
   57727             :        */
   57728             :           virtual bool isInMemoryPool() override;
   57729             : 
   57730             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   57731             : 
   57732             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   57733             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   57734             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   57735             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   57736             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   57737             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   57738             :           being used with the AST File I/O mechanism.
   57739             :        */
   57740             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   57741             : 
   57742             :       // DQ (4/30/2006): Modified to be a const function.
   57743             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   57744             : 
   57745             :           This functions is part of general support for many possible tools to operate 
   57746             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   57747             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   57748             :           less than the set of pointers used by the AST file I/O. This is part of
   57749             :           work implemented by Andreas, and support tools such as the AST graph generation.
   57750             : 
   57751             :           \warning This function can return unexpected data members and thus the 
   57752             :                    order and the number of elements is unpredicable and subject 
   57753             :                    to change.
   57754             : 
   57755             :           \returns STL vector of pairs of SgNode* and strings
   57756             :        */
   57757             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   57758             : 
   57759             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   57760             : 
   57761             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   57762             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   57763             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   57764             : 
   57765             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   57766             :                    and subject to change.
   57767             :        */
   57768             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   57769             : 
   57770             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   57771             : 
   57772             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   57773             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   57774             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   57775             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   57776             : 
   57777             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   57778             : 
   57779             :           \returns long
   57780             :        */
   57781             :           virtual long getChildIndex( SgNode* childNode ) const override;
   57782             : 
   57783             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   57784             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   57785             :       /* \brief Constructor for use by AST File I/O Mechanism
   57786             : 
   57787             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   57788             :           which obtained via fast binary file I/O from disk.
   57789             :        */
   57790             :        // SgTypeBool( SgTypeBoolStorageClass& source );
   57791             : 
   57792             : 
   57793             : 
   57794             : 
   57795             : 
   57796             :  // JH (10/24/2005): methods added to support the ast file IO
   57797             :     private:
   57798             : 
   57799             :       /* name AST Memory Allocation Support Functions
   57800             :           \brief Memory allocations support....
   57801             : 
   57802             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   57803             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   57804             :           and support the AST File I/O Mechanism.
   57805             :        */
   57806             :       /* */
   57807             : 
   57808             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   57809             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   57810             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   57811             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   57812             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   57813             :           a correspinding one in the AST_FILE_IO class!
   57814             :        */
   57815             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   57816             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   57817             :       /* \brief Typedef used for low level memory access.
   57818             :        */
   57819             :        // typedef unsigned char* TestType;
   57820             : 
   57821             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   57822             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   57823             :       /* \brief Typedef used to hold memory addresses as values.
   57824             :        */
   57825             :        // typedef unsigned long  AddressType;
   57826             : 
   57827             : 
   57828             : 
   57829             :        // necessary, to have direct access to the p_freepointer and the private methods !
   57830             :       /*! \brief friend class declaration to support AST File I/O */
   57831             :           friend class AST_FILE_IO;
   57832             : 
   57833             :       /*! \brief friend class declaration to support AST File I/O */
   57834             :           friend class SgTypeBoolStorageClass;
   57835             : 
   57836             :       /*! \brief friend class declaration to support AST File I/O */
   57837             :           friend class AstSpecificDataManagingClass;
   57838             : 
   57839             :       /*! \brief friend class declaration to support AST File I/O */
   57840             :           friend class AstSpecificDataManagingClassStorageClass;
   57841             :     public:
   57842             :       /*! \brief IR node constructor to support AST File I/O */
   57843             :           SgTypeBool( const SgTypeBoolStorageClass& source );
   57844             : 
   57845             :  // private: // JJW hack
   57846             :        /*
   57847             :           name AST Memory Allocation Support Variables
   57848             :           Memory allocations support variables 
   57849             : 
   57850             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   57851             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   57852             :           and support the AST File I/O Mechanism.
   57853             :        */
   57854             :       /* */
   57855             : 
   57856             :     public:
   57857             : 
   57858             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   57859             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   57860             :       // virtual SgNode* addRegExpAttribute();
   57861             :       /*! \brief Support for AST matching using regular expression.
   57862             : 
   57863             :           This support is incomplete and the subject of current research to define 
   57864             :           RegEx trees to support inexact matching.
   57865             :        */
   57866             :           SgTypeBool* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   57867             : 
   57868             : // *** COMMON CODE SECTION ENDS HERE ***
   57869             : 
   57870             : 
   57871             : // End of memberFunctionString
   57872             : // Start of memberFunctionString
   57873             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   57874             : 
   57875             :      // the generated cast function
   57876             :      // friend ROSE_DLL_API SgTypeBool* isSgTypeBool ( SgNode* s );
   57877             : 
   57878             :           typedef SgType base_node_type;
   57879             : 
   57880             : 
   57881             : // End of memberFunctionString
   57882             : // Start of memberFunctionString
   57883             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   57884             : 
   57885             :        // SgName get_mangled ( SgUnparse_Info & info );
   57886             : 
   57887             :       //! Mangled name support for unparser support
   57888             :        // SgName get_mangled ( SgUnparse_Info & info );
   57889             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   57890             :           virtual SgName get_mangled (void) const override;
   57891             : 
   57892             : 
   57893             : 
   57894             : // End of memberFunctionString
   57895             : // Start of memberFunctionString
   57896             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   57897             : 
   57898             :       //! example of type used where construction is particularly simple
   57899             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   57900             :        // static SgTypeBool builtin_type;
   57901             :        // static SgTypeBool* builtin_type;
   57902             : 
   57903             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   57904             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   57905             :        // own data member and associated access function.
   57906             :        // static SgTypeBool* get_builtin_type();
   57907             : 
   57908             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   57909             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   57910             :        // own data member and associated access function.
   57911             :        // static void set_builtin_type(SgTypeBool* builtin_type);
   57912             : 
   57913             :       //! function returns example of type
   57914             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   57915             :        // static SgTypeBool* createType(void);
   57916             :           static SgTypeBool* createType(SgExpression* optional_fortran_type_kind = NULL);
   57917             : 
   57918             : 
   57919             : // End of memberFunctionString
   57920             : 
   57921             : 
   57922             : 
   57923             :      public: 
   57924             :          virtual ~SgTypeBool();
   57925             : 
   57926             : 
   57927             :      public: 
   57928             :          SgTypeBool(); 
   57929             : 
   57930             :     protected:
   57931             : // Start of memberFunctionString
   57932             : static SgTypeBool* p_builtin_type;
   57933             :           
   57934             : // End of memberFunctionString
   57935             : 
   57936             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeBool>;
   57937             : 
   57938             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57939             : 
   57940             : 
   57941             :    };
   57942             : #endif
   57943             : 
   57944             : // postdeclarations for SgTypeBool
   57945             : 
   57946             : /* #line 57947 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57947             : 
   57948             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   57949             : 
   57950             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57951             : 
   57952             : 
   57953             : /* #line 57954 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57954             : 
   57955             : 
   57956             : 
   57957             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57958             : 
   57959             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   57960             : //      This code is automatically generated for each 
   57961             : //      terminal and non-terminal within the defined 
   57962             : //      grammar.  There is a simple way to change the 
   57963             : //      code to fix bugs etc.  See the ROSE README file
   57964             : //      for directions.
   57965             : 
   57966             : // tps: (02/22/2010): Adding DLL export requirements
   57967             : #include "rosedll.h"
   57968             : 
   57969             : // predeclarations for SgPointerType
   57970             : 
   57971             : /* #line 57972 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57972             : 
   57973             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   57974             : 
   57975             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   57976             : 
   57977             : #if 1
   57978             : // Class Definition for SgPointerType
   57979             : class ROSE_DLL_API SgPointerType  : public SgType
   57980             :    {
   57981             :      public:
   57982             : 
   57983             : 
   57984             : /* #line 57985 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   57985             : 
   57986             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   57987             : // Start of memberFunctionString
   57988             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   57989             : 
   57990             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   57991             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   57992             :        // own data member and associated access function.
   57993             :        // static SgPointerType* get_builtin_type();
   57994             : 
   57995             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   57996             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   57997             :        // own data member and associated access function.
   57998             :        // static void set_builtin_type(SgPointerType* builtin_type);
   57999             : 
   58000             :       //! more sophisticated version for more complex types like SgPointerType (types whose constructors take parameters)
   58001             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   58002             :        // static SgPointerType* createType(SgType* type = NULL);
   58003             :           static SgPointerType* createType(SgType* type = NULL, SgExpression* optional_fortran_type_kind = NULL);
   58004             : 
   58005             : 
   58006             : // End of memberFunctionString
   58007             : // Start of memberFunctionString
   58008             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   58009             : 
   58010             : // *** COMMON CODE SECTION BEGINS HERE ***
   58011             : 
   58012             :     public:
   58013             : 
   58014             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   58015             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   58016             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   58017             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   58018             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   58019             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   58020             : 
   58021             :       /*! \brief returns a string representing the class name */
   58022             :           virtual std::string class_name() const override;
   58023             : 
   58024             :       /*! \brief returns new style SageIII enum values */
   58025             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   58026             : 
   58027             :       /*! \brief static variant value */
   58028             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   58029             :        // static const VariantT static_variant = V_SgPointerType;
   58030             :           enum { static_variant = V_SgPointerType };
   58031             : 
   58032             :        /* the generated cast function */
   58033             :       /*! \brief Casts pointer from base class to derived class */
   58034             :           ROSE_DLL_API friend       SgPointerType* isSgPointerType(       SgNode * s );
   58035             : 
   58036             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   58037             :           ROSE_DLL_API friend const SgPointerType* isSgPointerType( const SgNode * s );
   58038             : 
   58039             :      // ******************************************
   58040             :      // * Memory Pool / New / Delete
   58041             :      // ******************************************
   58042             : 
   58043             :      public:
   58044             :           /// \private
   58045             :           static const unsigned pool_size; //
   58046             :           /// \private
   58047             :           static std::vector<unsigned char *> pools; //
   58048             :           /// \private
   58049             :           static SgPointerType * next_node; // 
   58050             : 
   58051             :           /// \private
   58052             :           static unsigned long initializeStorageClassArray(SgPointerTypeStorageClass *); //
   58053             : 
   58054             :           /// \private
   58055             :           static void clearMemoryPool(); //
   58056             :           static void deleteMemoryPool(); //
   58057             : 
   58058             :           /// \private
   58059             :           static void extendMemoryPoolForFileIO(); //
   58060             : 
   58061             :           /// \private
   58062             :           static SgPointerType * getPointerFromGlobalIndex(unsigned long); //
   58063             :           /// \private
   58064             :           static SgPointerType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   58065             : 
   58066             :           /// \private
   58067             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   58068             :           /// \private
   58069             :           static void resetValidFreepointers(); //
   58070             :           /// \private
   58071             :           static unsigned long getNumberOfLastValidPointer(); //
   58072             : 
   58073             : 
   58074             : #if defined(INLINE_FUNCTIONS)
   58075             :       /*! \brief returns pointer to newly allocated IR node */
   58076             :           inline void *operator new (size_t size);
   58077             : #else
   58078             :       /*! \brief returns pointer to newly allocated IR node */
   58079             :           void *operator new (size_t size);
   58080             : #endif
   58081             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   58082             :           void operator delete (void* pointer, size_t size);
   58083             : 
   58084             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   58085        1382 :           void operator delete (void* pointer)
   58086             :              {
   58087             :             // This is the generated delete operator...
   58088        1382 :                SgPointerType::operator delete (pointer,sizeof(SgPointerType));
   58089             :              }
   58090             : 
   58091             :       /*! \brief Returns the total number of IR nodes of this type */
   58092             :           static size_t numberOfNodes();
   58093             : 
   58094             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   58095             :           static size_t memoryUsage();
   58096             : 
   58097             :       // End of scope which started in IR nodes specific code 
   58098             :       /* */
   58099             : 
   58100             :       /* name Internal Functions
   58101             :           \brief Internal functions ... incomplete-documentation
   58102             : 
   58103             :           These functions have been made public as part of the design, but they are suggested for internal use 
   58104             :           or by particularly knowledgeable users for specialized tools or applications.
   58105             : 
   58106             :           \internal We could not make these private because they are required by user for special purposes. And 
   58107             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   58108             :          
   58109             :        */
   58110             : 
   58111             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   58112             :        // overridden in every class by *generated* implementation
   58113             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   58114             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   58115             :        // MS: 06/28/02 container of names of variables or container indices 
   58116             :        // used used in the traversal to access AST successor nodes
   58117             :        // overridden in every class by *generated* implementation
   58118             :       /*! \brief container of names of variables or container indices used used in the traversal
   58119             :           to access AST successor nodes overridden in every class by *generated* implementation */
   58120             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   58121             : 
   58122             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   58123             :        // than all the vector copies. The implementation for these functions is generated for each class.
   58124             :       /*! \brief return number of children in the traversal successor list */
   58125             :           virtual size_t get_numberOfTraversalSuccessors() override;
   58126             :       /*! \brief index-based access to traversal successors by index number */
   58127             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   58128             :       /*! \brief index-based access to traversal successors by child node */
   58129             :           virtual size_t get_childIndex(SgNode *child) override;
   58130             : 
   58131             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   58132             :        // MS: 08/16/2002 method for generating RTI information
   58133             :       /*! \brief return C++ Runtime-Time-Information */
   58134             :           virtual RTIReturnType roseRTI() override;
   58135             : #endif
   58136             :       /* */
   58137             : 
   58138             : 
   58139             : 
   58140             :       /* name Deprecated Functions
   58141             :           \brief Deprecated functions ... incomplete-documentation
   58142             : 
   58143             :           These functions have been deprecated from use.
   58144             :        */
   58145             :       /* */
   58146             : 
   58147             :       /*! returns a C style string (char*) representing the class name */
   58148             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   58149             : 
   58150             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   58151             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   58152             : #if 0
   58153             :       /*! returns old style Sage II enum values */
   58154             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   58155             :       /*! returns old style Sage II enum values */
   58156             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   58157             : #endif
   58158             :       /* */
   58159             : 
   58160             : 
   58161             : 
   58162             : 
   58163             :      public:
   58164             :       /* name Traversal Support Functions
   58165             :           \brief Traversal support functions ... incomplete-documentation
   58166             : 
   58167             :           These functions have been made public as part of the design, but they are suggested for internal use 
   58168             :           or by particularly knowledgable users for specialized tools or applications.
   58169             :        */
   58170             :       /* */
   58171             : 
   58172             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   58173             :        // (inferior to ROSE traversal mechanism, experimental).
   58174             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   58175             :        */
   58176             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   58177             : 
   58178             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   58179             :       /*! \brief support for the classic visitor pattern done in GoF */
   58180             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   58181             : 
   58182             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   58183             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   58184             :        */
   58185             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   58186             : 
   58187             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   58188             :        */
   58189             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   58190             : 
   58191             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   58192             :        // This traversal helps support internal tools that call static member functions.
   58193             :        // note: this function operates on the memory pools.
   58194             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   58195             :        */
   58196             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   58197             :       /* */
   58198             : 
   58199             : 
   58200             :      public:
   58201             :       /* name Memory Allocation Functions
   58202             :           \brief Memory allocations functions ... incomplete-documentation
   58203             : 
   58204             :           These functions have been made public as part of the design, but they are suggested for internal use 
   58205             :           or by particularly knowledgable users for specialized tools or applications.
   58206             :        */
   58207             :       /* */
   58208             : 
   58209             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   58210             : 
   58211             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   58212             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   58213             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   58214             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   58215             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   58216             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   58217             :           being used with the AST File I/O mechanism.
   58218             :        */
   58219             :           virtual bool isInMemoryPool() override;
   58220             : 
   58221             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   58222             : 
   58223             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   58224             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   58225             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   58226             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   58227             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   58228             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   58229             :           being used with the AST File I/O mechanism.
   58230             :        */
   58231             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   58232             : 
   58233             :       // DQ (4/30/2006): Modified to be a const function.
   58234             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   58235             : 
   58236             :           This functions is part of general support for many possible tools to operate 
   58237             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   58238             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   58239             :           less than the set of pointers used by the AST file I/O. This is part of
   58240             :           work implemented by Andreas, and support tools such as the AST graph generation.
   58241             : 
   58242             :           \warning This function can return unexpected data members and thus the 
   58243             :                    order and the number of elements is unpredicable and subject 
   58244             :                    to change.
   58245             : 
   58246             :           \returns STL vector of pairs of SgNode* and strings
   58247             :        */
   58248             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   58249             : 
   58250             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   58251             : 
   58252             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   58253             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   58254             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   58255             : 
   58256             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   58257             :                    and subject to change.
   58258             :        */
   58259             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   58260             : 
   58261             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   58262             : 
   58263             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   58264             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   58265             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   58266             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   58267             : 
   58268             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   58269             : 
   58270             :           \returns long
   58271             :        */
   58272             :           virtual long getChildIndex( SgNode* childNode ) const override;
   58273             : 
   58274             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   58275             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   58276             :       /* \brief Constructor for use by AST File I/O Mechanism
   58277             : 
   58278             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   58279             :           which obtained via fast binary file I/O from disk.
   58280             :        */
   58281             :        // SgPointerType( SgPointerTypeStorageClass& source );
   58282             : 
   58283             : 
   58284             : 
   58285             : 
   58286             : 
   58287             :  // JH (10/24/2005): methods added to support the ast file IO
   58288             :     private:
   58289             : 
   58290             :       /* name AST Memory Allocation Support Functions
   58291             :           \brief Memory allocations support....
   58292             : 
   58293             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   58294             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   58295             :           and support the AST File I/O Mechanism.
   58296             :        */
   58297             :       /* */
   58298             : 
   58299             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   58300             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   58301             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   58302             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   58303             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   58304             :           a correspinding one in the AST_FILE_IO class!
   58305             :        */
   58306             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   58307             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   58308             :       /* \brief Typedef used for low level memory access.
   58309             :        */
   58310             :        // typedef unsigned char* TestType;
   58311             : 
   58312             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   58313             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   58314             :       /* \brief Typedef used to hold memory addresses as values.
   58315             :        */
   58316             :        // typedef unsigned long  AddressType;
   58317             : 
   58318             : 
   58319             : 
   58320             :        // necessary, to have direct access to the p_freepointer and the private methods !
   58321             :       /*! \brief friend class declaration to support AST File I/O */
   58322             :           friend class AST_FILE_IO;
   58323             : 
   58324             :       /*! \brief friend class declaration to support AST File I/O */
   58325             :           friend class SgPointerTypeStorageClass;
   58326             : 
   58327             :       /*! \brief friend class declaration to support AST File I/O */
   58328             :           friend class AstSpecificDataManagingClass;
   58329             : 
   58330             :       /*! \brief friend class declaration to support AST File I/O */
   58331             :           friend class AstSpecificDataManagingClassStorageClass;
   58332             :     public:
   58333             :       /*! \brief IR node constructor to support AST File I/O */
   58334             :           SgPointerType( const SgPointerTypeStorageClass& source );
   58335             : 
   58336             :  // private: // JJW hack
   58337             :        /*
   58338             :           name AST Memory Allocation Support Variables
   58339             :           Memory allocations support variables 
   58340             : 
   58341             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   58342             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   58343             :           and support the AST File I/O Mechanism.
   58344             :        */
   58345             :       /* */
   58346             : 
   58347             :     public:
   58348             : 
   58349             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   58350             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   58351             :       // virtual SgNode* addRegExpAttribute();
   58352             :       /*! \brief Support for AST matching using regular expression.
   58353             : 
   58354             :           This support is incomplete and the subject of current research to define 
   58355             :           RegEx trees to support inexact matching.
   58356             :        */
   58357             :           SgPointerType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   58358             : 
   58359             : // *** COMMON CODE SECTION ENDS HERE ***
   58360             : 
   58361             : 
   58362             : // End of memberFunctionString
   58363             : // Start of memberFunctionString
   58364             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   58365             : 
   58366             :      // the generated cast function
   58367             :      // friend ROSE_DLL_API SgPointerType* isSgPointerType ( SgNode* s );
   58368             : 
   58369             :           typedef SgType base_node_type;
   58370             : 
   58371             : 
   58372             : // End of memberFunctionString
   58373             : // Start of memberFunctionString
   58374             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   58375             : 
   58376             :        // SgName get_mangled ( SgUnparse_Info & info );
   58377             : 
   58378             :       //! Mangled name support for unparser support
   58379             :        // SgName get_mangled ( SgUnparse_Info & info );
   58380             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   58381             :           virtual SgName get_mangled (void) const override;
   58382             : 
   58383             : 
   58384             : 
   58385             : // End of memberFunctionString
   58386             : 
   58387             :      public: 
   58388             :          SgType* get_base_type() const;
   58389             :          void set_base_type(SgType* base_type);
   58390             : 
   58391             : 
   58392             :      public: 
   58393             :          virtual ~SgPointerType();
   58394             : 
   58395             : 
   58396             :      public: 
   58397             :          SgPointerType(SgType* base_type = NULL); 
   58398             : 
   58399             :     protected:
   58400             : // Start of memberFunctionString
   58401             : SgType* p_base_type;
   58402             :           
   58403             : // End of memberFunctionString
   58404             : 
   58405             :     friend struct Rose::Traits::generated::describe_node_t<SgPointerType>;
   58406             :     friend struct Rose::Traits::generated::describe_field_t<SgPointerType, SgType*,&SgPointerType::p_base_type>;
   58407             : 
   58408             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58409             : 
   58410             : 
   58411             :    };
   58412             : #endif
   58413             : 
   58414             : // postdeclarations for SgPointerType
   58415             : 
   58416             : /* #line 58417 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58417             : 
   58418             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   58419             : 
   58420             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58421             : 
   58422             : 
   58423             : /* #line 58424 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58424             : 
   58425             : 
   58426             : 
   58427             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58428             : 
   58429             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   58430             : //      This code is automatically generated for each 
   58431             : //      terminal and non-terminal within the defined 
   58432             : //      grammar.  There is a simple way to change the 
   58433             : //      code to fix bugs etc.  See the ROSE README file
   58434             : //      for directions.
   58435             : 
   58436             : // tps: (02/22/2010): Adding DLL export requirements
   58437             : #include "rosedll.h"
   58438             : 
   58439             : // predeclarations for SgPointerMemberType
   58440             : 
   58441             : /* #line 58442 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58442             : 
   58443             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   58444             : 
   58445             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58446             : 
   58447             : #if 1
   58448             : // Class Definition for SgPointerMemberType
   58449             : class ROSE_DLL_API SgPointerMemberType  : public SgPointerType
   58450             :    {
   58451             :      public:
   58452             : 
   58453             : 
   58454             : /* #line 58455 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58455             : 
   58456             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   58457             : // Start of memberFunctionString
   58458             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   58459             : 
   58460             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   58461             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   58462             :        // own data member and associated access function.
   58463             :        // static SgPointerMemberType* get_builtin_type();
   58464             : 
   58465             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   58466             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   58467             :        // own data member and associated access function.
   58468             :        // static void set_builtin_type(SgPointerMemberType* builtin_type);
   58469             : 
   58470             :       //! more sophisticated version for more complex types like SgPointerMemberType (types whose constructors take parameters)
   58471             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   58472             :        // static SgPointerMemberType* createType(SgType* type = NULL, SgType* class_type = NULL);
   58473             :           static SgPointerMemberType* createType(SgType* type = NULL, SgType* class_type = NULL, SgExpression* optional_fortran_type_kind = NULL);
   58474             : 
   58475             : 
   58476             : // End of memberFunctionString
   58477             : // Start of memberFunctionString
   58478             : /* #line 927 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   58479             : 
   58480             :        //! The API to this function has been changed to support returning a SgDeclarationStatement.
   58481             :        // DQ (4/11/2019): This alllows it to support both the cases where a definition might not
   58482             :        // exist and the case of a pointer to member of a nonreal type.
   58483             :        // The old functionality is represented in the get_class_definition_of() function.
   58484             :           SgDeclarationStatement* get_class_declaration_of() const;
   58485             : 
   58486             :       //! \deprecated The class_of property has been replaced by the class_type property, an SgType
   58487             :           SgClassDefinition* get_class_definition_of() const;
   58488             : 
   58489             :        // DQ (4/20/2019): Renamed these to make them more clear, since there are two locations for name qualification in a SgPointerMemberType.
   58490             :        // DQ (4/18/2019): Added support for name qualification of type chains of SgPointerMemberType.
   58491             :        // SgName get_qualified_name_prefix() const;
   58492             :           SgName get_qualified_name_prefix_for_class_of() const;
   58493             :           SgName get_qualified_name_prefix_for_base_type() const;
   58494             : 
   58495             : 
   58496             : 
   58497             : // End of memberFunctionString
   58498             : // Start of memberFunctionString
   58499             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   58500             : 
   58501             : // *** COMMON CODE SECTION BEGINS HERE ***
   58502             : 
   58503             :     public:
   58504             : 
   58505             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   58506             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   58507             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   58508             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   58509             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   58510             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   58511             : 
   58512             :       /*! \brief returns a string representing the class name */
   58513             :           virtual std::string class_name() const override;
   58514             : 
   58515             :       /*! \brief returns new style SageIII enum values */
   58516             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   58517             : 
   58518             :       /*! \brief static variant value */
   58519             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   58520             :        // static const VariantT static_variant = V_SgPointerMemberType;
   58521             :           enum { static_variant = V_SgPointerMemberType };
   58522             : 
   58523             :        /* the generated cast function */
   58524             :       /*! \brief Casts pointer from base class to derived class */
   58525             :           ROSE_DLL_API friend       SgPointerMemberType* isSgPointerMemberType(       SgNode * s );
   58526             : 
   58527             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   58528             :           ROSE_DLL_API friend const SgPointerMemberType* isSgPointerMemberType( const SgNode * s );
   58529             : 
   58530             :      // ******************************************
   58531             :      // * Memory Pool / New / Delete
   58532             :      // ******************************************
   58533             : 
   58534             :      public:
   58535             :           /// \private
   58536             :           static const unsigned pool_size; //
   58537             :           /// \private
   58538             :           static std::vector<unsigned char *> pools; //
   58539             :           /// \private
   58540             :           static SgPointerMemberType * next_node; // 
   58541             : 
   58542             :           /// \private
   58543             :           static unsigned long initializeStorageClassArray(SgPointerMemberTypeStorageClass *); //
   58544             : 
   58545             :           /// \private
   58546             :           static void clearMemoryPool(); //
   58547             :           static void deleteMemoryPool(); //
   58548             : 
   58549             :           /// \private
   58550             :           static void extendMemoryPoolForFileIO(); //
   58551             : 
   58552             :           /// \private
   58553             :           static SgPointerMemberType * getPointerFromGlobalIndex(unsigned long); //
   58554             :           /// \private
   58555             :           static SgPointerMemberType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   58556             : 
   58557             :           /// \private
   58558             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   58559             :           /// \private
   58560             :           static void resetValidFreepointers(); //
   58561             :           /// \private
   58562             :           static unsigned long getNumberOfLastValidPointer(); //
   58563             : 
   58564             : 
   58565             : #if defined(INLINE_FUNCTIONS)
   58566             :       /*! \brief returns pointer to newly allocated IR node */
   58567             :           inline void *operator new (size_t size);
   58568             : #else
   58569             :       /*! \brief returns pointer to newly allocated IR node */
   58570             :           void *operator new (size_t size);
   58571             : #endif
   58572             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   58573             :           void operator delete (void* pointer, size_t size);
   58574             : 
   58575             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   58576          58 :           void operator delete (void* pointer)
   58577             :              {
   58578             :             // This is the generated delete operator...
   58579          58 :                SgPointerMemberType::operator delete (pointer,sizeof(SgPointerMemberType));
   58580             :              }
   58581             : 
   58582             :       /*! \brief Returns the total number of IR nodes of this type */
   58583             :           static size_t numberOfNodes();
   58584             : 
   58585             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   58586             :           static size_t memoryUsage();
   58587             : 
   58588             :       // End of scope which started in IR nodes specific code 
   58589             :       /* */
   58590             : 
   58591             :       /* name Internal Functions
   58592             :           \brief Internal functions ... incomplete-documentation
   58593             : 
   58594             :           These functions have been made public as part of the design, but they are suggested for internal use 
   58595             :           or by particularly knowledgeable users for specialized tools or applications.
   58596             : 
   58597             :           \internal We could not make these private because they are required by user for special purposes. And 
   58598             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   58599             :          
   58600             :        */
   58601             : 
   58602             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   58603             :        // overridden in every class by *generated* implementation
   58604             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   58605             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   58606             :        // MS: 06/28/02 container of names of variables or container indices 
   58607             :        // used used in the traversal to access AST successor nodes
   58608             :        // overridden in every class by *generated* implementation
   58609             :       /*! \brief container of names of variables or container indices used used in the traversal
   58610             :           to access AST successor nodes overridden in every class by *generated* implementation */
   58611             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   58612             : 
   58613             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   58614             :        // than all the vector copies. The implementation for these functions is generated for each class.
   58615             :       /*! \brief return number of children in the traversal successor list */
   58616             :           virtual size_t get_numberOfTraversalSuccessors() override;
   58617             :       /*! \brief index-based access to traversal successors by index number */
   58618             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   58619             :       /*! \brief index-based access to traversal successors by child node */
   58620             :           virtual size_t get_childIndex(SgNode *child) override;
   58621             : 
   58622             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   58623             :        // MS: 08/16/2002 method for generating RTI information
   58624             :       /*! \brief return C++ Runtime-Time-Information */
   58625             :           virtual RTIReturnType roseRTI() override;
   58626             : #endif
   58627             :       /* */
   58628             : 
   58629             : 
   58630             : 
   58631             :       /* name Deprecated Functions
   58632             :           \brief Deprecated functions ... incomplete-documentation
   58633             : 
   58634             :           These functions have been deprecated from use.
   58635             :        */
   58636             :       /* */
   58637             : 
   58638             :       /*! returns a C style string (char*) representing the class name */
   58639             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   58640             : 
   58641             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   58642             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   58643             : #if 0
   58644             :       /*! returns old style Sage II enum values */
   58645             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   58646             :       /*! returns old style Sage II enum values */
   58647             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   58648             : #endif
   58649             :       /* */
   58650             : 
   58651             : 
   58652             : 
   58653             : 
   58654             :      public:
   58655             :       /* name Traversal Support Functions
   58656             :           \brief Traversal support functions ... incomplete-documentation
   58657             : 
   58658             :           These functions have been made public as part of the design, but they are suggested for internal use 
   58659             :           or by particularly knowledgable users for specialized tools or applications.
   58660             :        */
   58661             :       /* */
   58662             : 
   58663             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   58664             :        // (inferior to ROSE traversal mechanism, experimental).
   58665             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   58666             :        */
   58667             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   58668             : 
   58669             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   58670             :       /*! \brief support for the classic visitor pattern done in GoF */
   58671             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   58672             : 
   58673             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   58674             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   58675             :        */
   58676             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   58677             : 
   58678             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   58679             :        */
   58680             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   58681             : 
   58682             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   58683             :        // This traversal helps support internal tools that call static member functions.
   58684             :        // note: this function operates on the memory pools.
   58685             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   58686             :        */
   58687             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   58688             :       /* */
   58689             : 
   58690             : 
   58691             :      public:
   58692             :       /* name Memory Allocation Functions
   58693             :           \brief Memory allocations functions ... incomplete-documentation
   58694             : 
   58695             :           These functions have been made public as part of the design, but they are suggested for internal use 
   58696             :           or by particularly knowledgable users for specialized tools or applications.
   58697             :        */
   58698             :       /* */
   58699             : 
   58700             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   58701             : 
   58702             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   58703             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   58704             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   58705             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   58706             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   58707             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   58708             :           being used with the AST File I/O mechanism.
   58709             :        */
   58710             :           virtual bool isInMemoryPool() override;
   58711             : 
   58712             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   58713             : 
   58714             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   58715             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   58716             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   58717             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   58718             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   58719             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   58720             :           being used with the AST File I/O mechanism.
   58721             :        */
   58722             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   58723             : 
   58724             :       // DQ (4/30/2006): Modified to be a const function.
   58725             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   58726             : 
   58727             :           This functions is part of general support for many possible tools to operate 
   58728             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   58729             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   58730             :           less than the set of pointers used by the AST file I/O. This is part of
   58731             :           work implemented by Andreas, and support tools such as the AST graph generation.
   58732             : 
   58733             :           \warning This function can return unexpected data members and thus the 
   58734             :                    order and the number of elements is unpredicable and subject 
   58735             :                    to change.
   58736             : 
   58737             :           \returns STL vector of pairs of SgNode* and strings
   58738             :        */
   58739             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   58740             : 
   58741             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   58742             : 
   58743             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   58744             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   58745             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   58746             : 
   58747             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   58748             :                    and subject to change.
   58749             :        */
   58750             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   58751             : 
   58752             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   58753             : 
   58754             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   58755             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   58756             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   58757             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   58758             : 
   58759             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   58760             : 
   58761             :           \returns long
   58762             :        */
   58763             :           virtual long getChildIndex( SgNode* childNode ) const override;
   58764             : 
   58765             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   58766             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   58767             :       /* \brief Constructor for use by AST File I/O Mechanism
   58768             : 
   58769             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   58770             :           which obtained via fast binary file I/O from disk.
   58771             :        */
   58772             :        // SgPointerMemberType( SgPointerMemberTypeStorageClass& source );
   58773             : 
   58774             : 
   58775             : 
   58776             : 
   58777             : 
   58778             :  // JH (10/24/2005): methods added to support the ast file IO
   58779             :     private:
   58780             : 
   58781             :       /* name AST Memory Allocation Support Functions
   58782             :           \brief Memory allocations support....
   58783             : 
   58784             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   58785             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   58786             :           and support the AST File I/O Mechanism.
   58787             :        */
   58788             :       /* */
   58789             : 
   58790             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   58791             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   58792             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   58793             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   58794             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   58795             :           a correspinding one in the AST_FILE_IO class!
   58796             :        */
   58797             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   58798             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   58799             :       /* \brief Typedef used for low level memory access.
   58800             :        */
   58801             :        // typedef unsigned char* TestType;
   58802             : 
   58803             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   58804             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   58805             :       /* \brief Typedef used to hold memory addresses as values.
   58806             :        */
   58807             :        // typedef unsigned long  AddressType;
   58808             : 
   58809             : 
   58810             : 
   58811             :        // necessary, to have direct access to the p_freepointer and the private methods !
   58812             :       /*! \brief friend class declaration to support AST File I/O */
   58813             :           friend class AST_FILE_IO;
   58814             : 
   58815             :       /*! \brief friend class declaration to support AST File I/O */
   58816             :           friend class SgPointerMemberTypeStorageClass;
   58817             : 
   58818             :       /*! \brief friend class declaration to support AST File I/O */
   58819             :           friend class AstSpecificDataManagingClass;
   58820             : 
   58821             :       /*! \brief friend class declaration to support AST File I/O */
   58822             :           friend class AstSpecificDataManagingClassStorageClass;
   58823             :     public:
   58824             :       /*! \brief IR node constructor to support AST File I/O */
   58825             :           SgPointerMemberType( const SgPointerMemberTypeStorageClass& source );
   58826             : 
   58827             :  // private: // JJW hack
   58828             :        /*
   58829             :           name AST Memory Allocation Support Variables
   58830             :           Memory allocations support variables 
   58831             : 
   58832             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   58833             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   58834             :           and support the AST File I/O Mechanism.
   58835             :        */
   58836             :       /* */
   58837             : 
   58838             :     public:
   58839             : 
   58840             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   58841             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   58842             :       // virtual SgNode* addRegExpAttribute();
   58843             :       /*! \brief Support for AST matching using regular expression.
   58844             : 
   58845             :           This support is incomplete and the subject of current research to define 
   58846             :           RegEx trees to support inexact matching.
   58847             :        */
   58848             :           SgPointerMemberType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   58849             : 
   58850             : // *** COMMON CODE SECTION ENDS HERE ***
   58851             : 
   58852             : 
   58853             : // End of memberFunctionString
   58854             : // Start of memberFunctionString
   58855             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   58856             : 
   58857             :      // the generated cast function
   58858             :      // friend ROSE_DLL_API SgPointerMemberType* isSgPointerMemberType ( SgNode* s );
   58859             : 
   58860             :           typedef SgPointerType base_node_type;
   58861             : 
   58862             : 
   58863             : // End of memberFunctionString
   58864             : // Start of memberFunctionString
   58865             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   58866             : 
   58867             :        // SgName get_mangled ( SgUnparse_Info & info );
   58868             : 
   58869             :       //! Mangled name support for unparser support
   58870             :        // SgName get_mangled ( SgUnparse_Info & info );
   58871             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   58872             :           virtual SgName get_mangled (void) const override;
   58873             : 
   58874             : 
   58875             : 
   58876             : // End of memberFunctionString
   58877             : 
   58878             :      public: 
   58879             :          SgType* get_class_type() const;
   58880             :          void set_class_type(SgType* class_type);
   58881             : 
   58882             : 
   58883             :      public: 
   58884             :          virtual ~SgPointerMemberType();
   58885             : 
   58886             : 
   58887             :      public: 
   58888             :          SgPointerMemberType(SgType* base_type = NULL, SgType* class_type = NULL); 
   58889             : 
   58890             :     protected:
   58891             : // Start of memberFunctionString
   58892             : SgType* p_class_type;
   58893             :           
   58894             : // End of memberFunctionString
   58895             : 
   58896             :     friend struct Rose::Traits::generated::describe_node_t<SgPointerMemberType>;
   58897             :     friend struct Rose::Traits::generated::describe_field_t<SgPointerMemberType, SgType*,&SgPointerMemberType::p_class_type>;
   58898             : 
   58899             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58900             : 
   58901             : 
   58902             :    };
   58903             : #endif
   58904             : 
   58905             : // postdeclarations for SgPointerMemberType
   58906             : 
   58907             : /* #line 58908 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58908             : 
   58909             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   58910             : 
   58911             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58912             : 
   58913             : 
   58914             : /* #line 58915 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58915             : 
   58916             : 
   58917             : 
   58918             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58919             : 
   58920             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   58921             : //      This code is automatically generated for each 
   58922             : //      terminal and non-terminal within the defined 
   58923             : //      grammar.  There is a simple way to change the 
   58924             : //      code to fix bugs etc.  See the ROSE README file
   58925             : //      for directions.
   58926             : 
   58927             : // tps: (02/22/2010): Adding DLL export requirements
   58928             : #include "rosedll.h"
   58929             : 
   58930             : // predeclarations for SgReferenceType
   58931             : 
   58932             : /* #line 58933 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58933             : 
   58934             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   58935             : 
   58936             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   58937             : 
   58938             : #if 1
   58939             : // Class Definition for SgReferenceType
   58940             : class ROSE_DLL_API SgReferenceType  : public SgType
   58941             :    {
   58942             :      public:
   58943             : 
   58944             : 
   58945             : /* #line 58946 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   58946             : 
   58947             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   58948             : // Start of memberFunctionString
   58949             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   58950             : 
   58951             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   58952             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   58953             :        // own data member and associated access function.
   58954             :        // static SgReferenceType* get_builtin_type();
   58955             : 
   58956             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   58957             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   58958             :        // own data member and associated access function.
   58959             :        // static void set_builtin_type(SgReferenceType* builtin_type);
   58960             : 
   58961             :       //! more sophisticated version for more complex types like SgReferenceType (types whose constructors take parameters)
   58962             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   58963             :        // static SgReferenceType* createType(SgType* type = NULL);
   58964             :           static SgReferenceType* createType(SgType* type = NULL, SgExpression* optional_fortran_type_kind = NULL);
   58965             : 
   58966             : 
   58967             : // End of memberFunctionString
   58968             : // Start of memberFunctionString
   58969             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   58970             : 
   58971             : // *** COMMON CODE SECTION BEGINS HERE ***
   58972             : 
   58973             :     public:
   58974             : 
   58975             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   58976             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   58977             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   58978             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   58979             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   58980             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   58981             : 
   58982             :       /*! \brief returns a string representing the class name */
   58983             :           virtual std::string class_name() const override;
   58984             : 
   58985             :       /*! \brief returns new style SageIII enum values */
   58986             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   58987             : 
   58988             :       /*! \brief static variant value */
   58989             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   58990             :        // static const VariantT static_variant = V_SgReferenceType;
   58991             :           enum { static_variant = V_SgReferenceType };
   58992             : 
   58993             :        /* the generated cast function */
   58994             :       /*! \brief Casts pointer from base class to derived class */
   58995             :           ROSE_DLL_API friend       SgReferenceType* isSgReferenceType(       SgNode * s );
   58996             : 
   58997             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   58998             :           ROSE_DLL_API friend const SgReferenceType* isSgReferenceType( const SgNode * s );
   58999             : 
   59000             :      // ******************************************
   59001             :      // * Memory Pool / New / Delete
   59002             :      // ******************************************
   59003             : 
   59004             :      public:
   59005             :           /// \private
   59006             :           static const unsigned pool_size; //
   59007             :           /// \private
   59008             :           static std::vector<unsigned char *> pools; //
   59009             :           /// \private
   59010             :           static SgReferenceType * next_node; // 
   59011             : 
   59012             :           /// \private
   59013             :           static unsigned long initializeStorageClassArray(SgReferenceTypeStorageClass *); //
   59014             : 
   59015             :           /// \private
   59016             :           static void clearMemoryPool(); //
   59017             :           static void deleteMemoryPool(); //
   59018             : 
   59019             :           /// \private
   59020             :           static void extendMemoryPoolForFileIO(); //
   59021             : 
   59022             :           /// \private
   59023             :           static SgReferenceType * getPointerFromGlobalIndex(unsigned long); //
   59024             :           /// \private
   59025             :           static SgReferenceType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   59026             : 
   59027             :           /// \private
   59028             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   59029             :           /// \private
   59030             :           static void resetValidFreepointers(); //
   59031             :           /// \private
   59032             :           static unsigned long getNumberOfLastValidPointer(); //
   59033             : 
   59034             : 
   59035             : #if defined(INLINE_FUNCTIONS)
   59036             :       /*! \brief returns pointer to newly allocated IR node */
   59037             :           inline void *operator new (size_t size);
   59038             : #else
   59039             :       /*! \brief returns pointer to newly allocated IR node */
   59040             :           void *operator new (size_t size);
   59041             : #endif
   59042             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   59043             :           void operator delete (void* pointer, size_t size);
   59044             : 
   59045             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   59046        1452 :           void operator delete (void* pointer)
   59047             :              {
   59048             :             // This is the generated delete operator...
   59049        1452 :                SgReferenceType::operator delete (pointer,sizeof(SgReferenceType));
   59050             :              }
   59051             : 
   59052             :       /*! \brief Returns the total number of IR nodes of this type */
   59053             :           static size_t numberOfNodes();
   59054             : 
   59055             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   59056             :           static size_t memoryUsage();
   59057             : 
   59058             :       // End of scope which started in IR nodes specific code 
   59059             :       /* */
   59060             : 
   59061             :       /* name Internal Functions
   59062             :           \brief Internal functions ... incomplete-documentation
   59063             : 
   59064             :           These functions have been made public as part of the design, but they are suggested for internal use 
   59065             :           or by particularly knowledgeable users for specialized tools or applications.
   59066             : 
   59067             :           \internal We could not make these private because they are required by user for special purposes. And 
   59068             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   59069             :          
   59070             :        */
   59071             : 
   59072             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   59073             :        // overridden in every class by *generated* implementation
   59074             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   59075             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   59076             :        // MS: 06/28/02 container of names of variables or container indices 
   59077             :        // used used in the traversal to access AST successor nodes
   59078             :        // overridden in every class by *generated* implementation
   59079             :       /*! \brief container of names of variables or container indices used used in the traversal
   59080             :           to access AST successor nodes overridden in every class by *generated* implementation */
   59081             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   59082             : 
   59083             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   59084             :        // than all the vector copies. The implementation for these functions is generated for each class.
   59085             :       /*! \brief return number of children in the traversal successor list */
   59086             :           virtual size_t get_numberOfTraversalSuccessors() override;
   59087             :       /*! \brief index-based access to traversal successors by index number */
   59088             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   59089             :       /*! \brief index-based access to traversal successors by child node */
   59090             :           virtual size_t get_childIndex(SgNode *child) override;
   59091             : 
   59092             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   59093             :        // MS: 08/16/2002 method for generating RTI information
   59094             :       /*! \brief return C++ Runtime-Time-Information */
   59095             :           virtual RTIReturnType roseRTI() override;
   59096             : #endif
   59097             :       /* */
   59098             : 
   59099             : 
   59100             : 
   59101             :       /* name Deprecated Functions
   59102             :           \brief Deprecated functions ... incomplete-documentation
   59103             : 
   59104             :           These functions have been deprecated from use.
   59105             :        */
   59106             :       /* */
   59107             : 
   59108             :       /*! returns a C style string (char*) representing the class name */
   59109             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   59110             : 
   59111             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   59112             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   59113             : #if 0
   59114             :       /*! returns old style Sage II enum values */
   59115             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   59116             :       /*! returns old style Sage II enum values */
   59117             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   59118             : #endif
   59119             :       /* */
   59120             : 
   59121             : 
   59122             : 
   59123             : 
   59124             :      public:
   59125             :       /* name Traversal Support Functions
   59126             :           \brief Traversal support functions ... incomplete-documentation
   59127             : 
   59128             :           These functions have been made public as part of the design, but they are suggested for internal use 
   59129             :           or by particularly knowledgable users for specialized tools or applications.
   59130             :        */
   59131             :       /* */
   59132             : 
   59133             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   59134             :        // (inferior to ROSE traversal mechanism, experimental).
   59135             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   59136             :        */
   59137             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   59138             : 
   59139             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   59140             :       /*! \brief support for the classic visitor pattern done in GoF */
   59141             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   59142             : 
   59143             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   59144             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   59145             :        */
   59146             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   59147             : 
   59148             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   59149             :        */
   59150             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   59151             : 
   59152             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   59153             :        // This traversal helps support internal tools that call static member functions.
   59154             :        // note: this function operates on the memory pools.
   59155             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   59156             :        */
   59157             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   59158             :       /* */
   59159             : 
   59160             : 
   59161             :      public:
   59162             :       /* name Memory Allocation Functions
   59163             :           \brief Memory allocations functions ... incomplete-documentation
   59164             : 
   59165             :           These functions have been made public as part of the design, but they are suggested for internal use 
   59166             :           or by particularly knowledgable users for specialized tools or applications.
   59167             :        */
   59168             :       /* */
   59169             : 
   59170             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   59171             : 
   59172             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   59173             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   59174             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   59175             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   59176             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   59177             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   59178             :           being used with the AST File I/O mechanism.
   59179             :        */
   59180             :           virtual bool isInMemoryPool() override;
   59181             : 
   59182             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   59183             : 
   59184             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   59185             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   59186             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   59187             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   59188             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   59189             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   59190             :           being used with the AST File I/O mechanism.
   59191             :        */
   59192             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   59193             : 
   59194             :       // DQ (4/30/2006): Modified to be a const function.
   59195             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   59196             : 
   59197             :           This functions is part of general support for many possible tools to operate 
   59198             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   59199             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   59200             :           less than the set of pointers used by the AST file I/O. This is part of
   59201             :           work implemented by Andreas, and support tools such as the AST graph generation.
   59202             : 
   59203             :           \warning This function can return unexpected data members and thus the 
   59204             :                    order and the number of elements is unpredicable and subject 
   59205             :                    to change.
   59206             : 
   59207             :           \returns STL vector of pairs of SgNode* and strings
   59208             :        */
   59209             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   59210             : 
   59211             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   59212             : 
   59213             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   59214             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   59215             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   59216             : 
   59217             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   59218             :                    and subject to change.
   59219             :        */
   59220             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   59221             : 
   59222             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   59223             : 
   59224             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   59225             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   59226             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   59227             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   59228             : 
   59229             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   59230             : 
   59231             :           \returns long
   59232             :        */
   59233             :           virtual long getChildIndex( SgNode* childNode ) const override;
   59234             : 
   59235             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   59236             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   59237             :       /* \brief Constructor for use by AST File I/O Mechanism
   59238             : 
   59239             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   59240             :           which obtained via fast binary file I/O from disk.
   59241             :        */
   59242             :        // SgReferenceType( SgReferenceTypeStorageClass& source );
   59243             : 
   59244             : 
   59245             : 
   59246             : 
   59247             : 
   59248             :  // JH (10/24/2005): methods added to support the ast file IO
   59249             :     private:
   59250             : 
   59251             :       /* name AST Memory Allocation Support Functions
   59252             :           \brief Memory allocations support....
   59253             : 
   59254             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   59255             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   59256             :           and support the AST File I/O Mechanism.
   59257             :        */
   59258             :       /* */
   59259             : 
   59260             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   59261             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   59262             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   59263             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   59264             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   59265             :           a correspinding one in the AST_FILE_IO class!
   59266             :        */
   59267             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   59268             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   59269             :       /* \brief Typedef used for low level memory access.
   59270             :        */
   59271             :        // typedef unsigned char* TestType;
   59272             : 
   59273             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   59274             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   59275             :       /* \brief Typedef used to hold memory addresses as values.
   59276             :        */
   59277             :        // typedef unsigned long  AddressType;
   59278             : 
   59279             : 
   59280             : 
   59281             :        // necessary, to have direct access to the p_freepointer and the private methods !
   59282             :       /*! \brief friend class declaration to support AST File I/O */
   59283             :           friend class AST_FILE_IO;
   59284             : 
   59285             :       /*! \brief friend class declaration to support AST File I/O */
   59286             :           friend class SgReferenceTypeStorageClass;
   59287             : 
   59288             :       /*! \brief friend class declaration to support AST File I/O */
   59289             :           friend class AstSpecificDataManagingClass;
   59290             : 
   59291             :       /*! \brief friend class declaration to support AST File I/O */
   59292             :           friend class AstSpecificDataManagingClassStorageClass;
   59293             :     public:
   59294             :       /*! \brief IR node constructor to support AST File I/O */
   59295             :           SgReferenceType( const SgReferenceTypeStorageClass& source );
   59296             : 
   59297             :  // private: // JJW hack
   59298             :        /*
   59299             :           name AST Memory Allocation Support Variables
   59300             :           Memory allocations support variables 
   59301             : 
   59302             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   59303             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   59304             :           and support the AST File I/O Mechanism.
   59305             :        */
   59306             :       /* */
   59307             : 
   59308             :     public:
   59309             : 
   59310             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   59311             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   59312             :       // virtual SgNode* addRegExpAttribute();
   59313             :       /*! \brief Support for AST matching using regular expression.
   59314             : 
   59315             :           This support is incomplete and the subject of current research to define 
   59316             :           RegEx trees to support inexact matching.
   59317             :        */
   59318             :           SgReferenceType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   59319             : 
   59320             : // *** COMMON CODE SECTION ENDS HERE ***
   59321             : 
   59322             : 
   59323             : // End of memberFunctionString
   59324             : // Start of memberFunctionString
   59325             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   59326             : 
   59327             :      // the generated cast function
   59328             :      // friend ROSE_DLL_API SgReferenceType* isSgReferenceType ( SgNode* s );
   59329             : 
   59330             :           typedef SgType base_node_type;
   59331             : 
   59332             : 
   59333             : // End of memberFunctionString
   59334             : // Start of memberFunctionString
   59335             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   59336             : 
   59337             :        // SgName get_mangled ( SgUnparse_Info & info );
   59338             : 
   59339             :       //! Mangled name support for unparser support
   59340             :        // SgName get_mangled ( SgUnparse_Info & info );
   59341             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   59342             :           virtual SgName get_mangled (void) const override;
   59343             : 
   59344             : 
   59345             : 
   59346             : // End of memberFunctionString
   59347             : 
   59348             :      public: 
   59349             :          SgType* get_base_type() const;
   59350             :          void set_base_type(SgType* base_type);
   59351             : 
   59352             : 
   59353             :      public: 
   59354             :          virtual ~SgReferenceType();
   59355             : 
   59356             : 
   59357             :      public: 
   59358             :          SgReferenceType(SgType* base_type = NULL); 
   59359             : 
   59360             :     protected:
   59361             : // Start of memberFunctionString
   59362             : SgType* p_base_type;
   59363             :           
   59364             : // End of memberFunctionString
   59365             : 
   59366             :     friend struct Rose::Traits::generated::describe_node_t<SgReferenceType>;
   59367             :     friend struct Rose::Traits::generated::describe_field_t<SgReferenceType, SgType*,&SgReferenceType::p_base_type>;
   59368             : 
   59369             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59370             : 
   59371             : 
   59372             :    };
   59373             : #endif
   59374             : 
   59375             : // postdeclarations for SgReferenceType
   59376             : 
   59377             : /* #line 59378 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59378             : 
   59379             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   59380             : 
   59381             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59382             : 
   59383             : 
   59384             : /* #line 59385 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59385             : 
   59386             : 
   59387             : 
   59388             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59389             : 
   59390             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   59391             : //      This code is automatically generated for each 
   59392             : //      terminal and non-terminal within the defined 
   59393             : //      grammar.  There is a simple way to change the 
   59394             : //      code to fix bugs etc.  See the ROSE README file
   59395             : //      for directions.
   59396             : 
   59397             : // tps: (02/22/2010): Adding DLL export requirements
   59398             : #include "rosedll.h"
   59399             : 
   59400             : // predeclarations for SgNamedType
   59401             : 
   59402             : /* #line 59403 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59403             : 
   59404             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   59405             : 
   59406             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59407             : 
   59408             : #if 1
   59409             : // Class Definition for SgNamedType
   59410             : class ROSE_DLL_API SgNamedType  : public SgType
   59411             :    {
   59412             :      public:
   59413             : 
   59414             : 
   59415             : /* #line 59416 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59416             : 
   59417             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   59418             : // Start of memberFunctionString
   59419             : /* #line 356 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   59420             : 
   59421             :        //! Gets name of the type (useful for debugging, unparsing, etc.)
   59422             :        /*! Avoid making abstract base classes (if we can) because in the
   59423             :            automated generation of code we want to avoid placing constraints
   59424             :            on derived classes.
   59425             :         */
   59426             :        // virtual SgName get_name() const = 0;
   59427             :           virtual SgName get_name() const;
   59428             : 
   59429             :           SgNamedType ( const SgNamedType & X );
   59430             : 
   59431             : 
   59432             : // End of memberFunctionString
   59433             : // Start of memberFunctionString
   59434             : /* #line 379 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   59435             : 
   59436             :       //! Used for the SgNamedType object (base class for the SgClassType, SgTypedefType and the SgEnumType object)
   59437             :           SgName get_qualified_name() const;
   59438             : 
   59439             : 
   59440             : // End of memberFunctionString
   59441             : // Start of memberFunctionString
   59442             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   59443             : 
   59444             : // *** COMMON CODE SECTION BEGINS HERE ***
   59445             : 
   59446             :     public:
   59447             : 
   59448             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   59449             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   59450             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   59451             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   59452             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   59453             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   59454             : 
   59455             :       /*! \brief returns a string representing the class name */
   59456             :           virtual std::string class_name() const override;
   59457             : 
   59458             :       /*! \brief returns new style SageIII enum values */
   59459             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   59460             : 
   59461             :       /*! \brief static variant value */
   59462             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   59463             :        // static const VariantT static_variant = V_SgNamedType;
   59464             :           enum { static_variant = V_SgNamedType };
   59465             : 
   59466             :        /* the generated cast function */
   59467             :       /*! \brief Casts pointer from base class to derived class */
   59468             :           ROSE_DLL_API friend       SgNamedType* isSgNamedType(       SgNode * s );
   59469             : 
   59470             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   59471             :           ROSE_DLL_API friend const SgNamedType* isSgNamedType( const SgNode * s );
   59472             : 
   59473             :      // ******************************************
   59474             :      // * Memory Pool / New / Delete
   59475             :      // ******************************************
   59476             : 
   59477             :      public:
   59478             :           /// \private
   59479             :           static const unsigned pool_size; //
   59480             :           /// \private
   59481             :           static std::vector<unsigned char *> pools; //
   59482             :           /// \private
   59483             :           static SgNamedType * next_node; // 
   59484             : 
   59485             :           /// \private
   59486             :           static unsigned long initializeStorageClassArray(SgNamedTypeStorageClass *); //
   59487             : 
   59488             :           /// \private
   59489             :           static void clearMemoryPool(); //
   59490             :           static void deleteMemoryPool(); //
   59491             : 
   59492             :           /// \private
   59493             :           static void extendMemoryPoolForFileIO(); //
   59494             : 
   59495             :           /// \private
   59496             :           static SgNamedType * getPointerFromGlobalIndex(unsigned long); //
   59497             :           /// \private
   59498             :           static SgNamedType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   59499             : 
   59500             :           /// \private
   59501             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   59502             :           /// \private
   59503             :           static void resetValidFreepointers(); //
   59504             :           /// \private
   59505             :           static unsigned long getNumberOfLastValidPointer(); //
   59506             : 
   59507             : 
   59508             : #if defined(INLINE_FUNCTIONS)
   59509             :       /*! \brief returns pointer to newly allocated IR node */
   59510             :           inline void *operator new (size_t size);
   59511             : #else
   59512             :       /*! \brief returns pointer to newly allocated IR node */
   59513             :           void *operator new (size_t size);
   59514             : #endif
   59515             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   59516             :           void operator delete (void* pointer, size_t size);
   59517             : 
   59518             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   59519           0 :           void operator delete (void* pointer)
   59520             :              {
   59521             :             // This is the generated delete operator...
   59522           0 :                SgNamedType::operator delete (pointer,sizeof(SgNamedType));
   59523             :              }
   59524             : 
   59525             :       /*! \brief Returns the total number of IR nodes of this type */
   59526             :           static size_t numberOfNodes();
   59527             : 
   59528             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   59529             :           static size_t memoryUsage();
   59530             : 
   59531             :       // End of scope which started in IR nodes specific code 
   59532             :       /* */
   59533             : 
   59534             :       /* name Internal Functions
   59535             :           \brief Internal functions ... incomplete-documentation
   59536             : 
   59537             :           These functions have been made public as part of the design, but they are suggested for internal use 
   59538             :           or by particularly knowledgeable users for specialized tools or applications.
   59539             : 
   59540             :           \internal We could not make these private because they are required by user for special purposes. And 
   59541             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   59542             :          
   59543             :        */
   59544             : 
   59545             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   59546             :        // overridden in every class by *generated* implementation
   59547             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   59548             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   59549             :        // MS: 06/28/02 container of names of variables or container indices 
   59550             :        // used used in the traversal to access AST successor nodes
   59551             :        // overridden in every class by *generated* implementation
   59552             :       /*! \brief container of names of variables or container indices used used in the traversal
   59553             :           to access AST successor nodes overridden in every class by *generated* implementation */
   59554             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   59555             : 
   59556             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   59557             :        // than all the vector copies. The implementation for these functions is generated for each class.
   59558             :       /*! \brief return number of children in the traversal successor list */
   59559             :           virtual size_t get_numberOfTraversalSuccessors() override;
   59560             :       /*! \brief index-based access to traversal successors by index number */
   59561             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   59562             :       /*! \brief index-based access to traversal successors by child node */
   59563             :           virtual size_t get_childIndex(SgNode *child) override;
   59564             : 
   59565             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   59566             :        // MS: 08/16/2002 method for generating RTI information
   59567             :       /*! \brief return C++ Runtime-Time-Information */
   59568             :           virtual RTIReturnType roseRTI() override;
   59569             : #endif
   59570             :       /* */
   59571             : 
   59572             : 
   59573             : 
   59574             :       /* name Deprecated Functions
   59575             :           \brief Deprecated functions ... incomplete-documentation
   59576             : 
   59577             :           These functions have been deprecated from use.
   59578             :        */
   59579             :       /* */
   59580             : 
   59581             :       /*! returns a C style string (char*) representing the class name */
   59582             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   59583             : 
   59584             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   59585             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   59586             : #if 0
   59587             :       /*! returns old style Sage II enum values */
   59588             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   59589             :       /*! returns old style Sage II enum values */
   59590             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   59591             : #endif
   59592             :       /* */
   59593             : 
   59594             : 
   59595             : 
   59596             : 
   59597             :      public:
   59598             :       /* name Traversal Support Functions
   59599             :           \brief Traversal support functions ... incomplete-documentation
   59600             : 
   59601             :           These functions have been made public as part of the design, but they are suggested for internal use 
   59602             :           or by particularly knowledgable users for specialized tools or applications.
   59603             :        */
   59604             :       /* */
   59605             : 
   59606             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   59607             :        // (inferior to ROSE traversal mechanism, experimental).
   59608             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   59609             :        */
   59610             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   59611             : 
   59612             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   59613             :       /*! \brief support for the classic visitor pattern done in GoF */
   59614             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   59615             : 
   59616             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   59617             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   59618             :        */
   59619             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   59620             : 
   59621             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   59622             :        */
   59623             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   59624             : 
   59625             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   59626             :        // This traversal helps support internal tools that call static member functions.
   59627             :        // note: this function operates on the memory pools.
   59628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   59629             :        */
   59630             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   59631             :       /* */
   59632             : 
   59633             : 
   59634             :      public:
   59635             :       /* name Memory Allocation Functions
   59636             :           \brief Memory allocations functions ... incomplete-documentation
   59637             : 
   59638             :           These functions have been made public as part of the design, but they are suggested for internal use 
   59639             :           or by particularly knowledgable users for specialized tools or applications.
   59640             :        */
   59641             :       /* */
   59642             : 
   59643             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   59644             : 
   59645             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   59646             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   59647             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   59648             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   59649             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   59650             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   59651             :           being used with the AST File I/O mechanism.
   59652             :        */
   59653             :           virtual bool isInMemoryPool() override;
   59654             : 
   59655             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   59656             : 
   59657             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   59658             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   59659             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   59660             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   59661             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   59662             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   59663             :           being used with the AST File I/O mechanism.
   59664             :        */
   59665             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   59666             : 
   59667             :       // DQ (4/30/2006): Modified to be a const function.
   59668             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   59669             : 
   59670             :           This functions is part of general support for many possible tools to operate 
   59671             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   59672             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   59673             :           less than the set of pointers used by the AST file I/O. This is part of
   59674             :           work implemented by Andreas, and support tools such as the AST graph generation.
   59675             : 
   59676             :           \warning This function can return unexpected data members and thus the 
   59677             :                    order and the number of elements is unpredicable and subject 
   59678             :                    to change.
   59679             : 
   59680             :           \returns STL vector of pairs of SgNode* and strings
   59681             :        */
   59682             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   59683             : 
   59684             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   59685             : 
   59686             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   59687             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   59688             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   59689             : 
   59690             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   59691             :                    and subject to change.
   59692             :        */
   59693             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   59694             : 
   59695             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   59696             : 
   59697             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   59698             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   59699             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   59700             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   59701             : 
   59702             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   59703             : 
   59704             :           \returns long
   59705             :        */
   59706             :           virtual long getChildIndex( SgNode* childNode ) const override;
   59707             : 
   59708             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   59709             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   59710             :       /* \brief Constructor for use by AST File I/O Mechanism
   59711             : 
   59712             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   59713             :           which obtained via fast binary file I/O from disk.
   59714             :        */
   59715             :        // SgNamedType( SgNamedTypeStorageClass& source );
   59716             : 
   59717             : 
   59718             : 
   59719             : 
   59720             : 
   59721             :  // JH (10/24/2005): methods added to support the ast file IO
   59722             :     private:
   59723             : 
   59724             :       /* name AST Memory Allocation Support Functions
   59725             :           \brief Memory allocations support....
   59726             : 
   59727             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   59728             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   59729             :           and support the AST File I/O Mechanism.
   59730             :        */
   59731             :       /* */
   59732             : 
   59733             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   59734             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   59735             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   59736             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   59737             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   59738             :           a correspinding one in the AST_FILE_IO class!
   59739             :        */
   59740             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   59741             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   59742             :       /* \brief Typedef used for low level memory access.
   59743             :        */
   59744             :        // typedef unsigned char* TestType;
   59745             : 
   59746             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   59747             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   59748             :       /* \brief Typedef used to hold memory addresses as values.
   59749             :        */
   59750             :        // typedef unsigned long  AddressType;
   59751             : 
   59752             : 
   59753             : 
   59754             :        // necessary, to have direct access to the p_freepointer and the private methods !
   59755             :       /*! \brief friend class declaration to support AST File I/O */
   59756             :           friend class AST_FILE_IO;
   59757             : 
   59758             :       /*! \brief friend class declaration to support AST File I/O */
   59759             :           friend class SgNamedTypeStorageClass;
   59760             : 
   59761             :       /*! \brief friend class declaration to support AST File I/O */
   59762             :           friend class AstSpecificDataManagingClass;
   59763             : 
   59764             :       /*! \brief friend class declaration to support AST File I/O */
   59765             :           friend class AstSpecificDataManagingClassStorageClass;
   59766             :     public:
   59767             :       /*! \brief IR node constructor to support AST File I/O */
   59768             :           SgNamedType( const SgNamedTypeStorageClass& source );
   59769             : 
   59770             :  // private: // JJW hack
   59771             :        /*
   59772             :           name AST Memory Allocation Support Variables
   59773             :           Memory allocations support variables 
   59774             : 
   59775             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   59776             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   59777             :           and support the AST File I/O Mechanism.
   59778             :        */
   59779             :       /* */
   59780             : 
   59781             :     public:
   59782             : 
   59783             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   59784             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   59785             :       // virtual SgNode* addRegExpAttribute();
   59786             :       /*! \brief Support for AST matching using regular expression.
   59787             : 
   59788             :           This support is incomplete and the subject of current research to define 
   59789             :           RegEx trees to support inexact matching.
   59790             :        */
   59791             :           SgNamedType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   59792             : 
   59793             : // *** COMMON CODE SECTION ENDS HERE ***
   59794             : 
   59795             : 
   59796             : // End of memberFunctionString
   59797             : // Start of memberFunctionString
   59798             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   59799             : 
   59800             :      // the generated cast function
   59801             :      // friend ROSE_DLL_API SgNamedType* isSgNamedType ( SgNode* s );
   59802             : 
   59803             :           typedef SgType base_node_type;
   59804             : 
   59805             : 
   59806             : // End of memberFunctionString
   59807             : // Start of memberFunctionString
   59808             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   59809             : 
   59810             :       //! example of type used where construction is particularly simple
   59811             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   59812             :        // static SgNamedType builtin_type;
   59813             :        // static SgNamedType* builtin_type;
   59814             : 
   59815             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   59816             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   59817             :        // own data member and associated access function.
   59818             :        // static SgNamedType* get_builtin_type();
   59819             : 
   59820             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   59821             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   59822             :        // own data member and associated access function.
   59823             :        // static void set_builtin_type(SgNamedType* builtin_type);
   59824             : 
   59825             :       //! function returns example of type
   59826             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   59827             :        // static SgNamedType* createType(void);
   59828             :           static SgNamedType* createType(SgExpression* optional_fortran_type_kind = NULL);
   59829             : 
   59830             : 
   59831             : // End of memberFunctionString
   59832             : 
   59833             : 
   59834             :      public: 
   59835             :          SgDeclarationStatement* get_declaration() const;
   59836             :          void set_declaration(SgDeclarationStatement* declaration);
   59837             : 
   59838             :      public: 
   59839             :          bool get_autonomous_declaration() const;
   59840             :          void set_autonomous_declaration(bool autonomous_declaration);
   59841             : 
   59842             :      public: 
   59843             :          bool get_is_from_template_parameter() const;
   59844             :          void set_is_from_template_parameter(bool is_from_template_parameter);
   59845             : 
   59846             : 
   59847             :      public: 
   59848             :          virtual ~SgNamedType();
   59849             : 
   59850             : 
   59851             :      public: 
   59852             :          SgNamedType(SgDeclarationStatement* declaration = NULL); 
   59853             : 
   59854             :     protected:
   59855             : // Start of memberFunctionString
   59856             : static SgNamedType* p_builtin_type;
   59857             :           
   59858             : // End of memberFunctionString
   59859             : // Start of memberFunctionString
   59860             : SgDeclarationStatement* p_declaration;
   59861             :           
   59862             : // End of memberFunctionString
   59863             : // Start of memberFunctionString
   59864             : bool p_autonomous_declaration;
   59865             :           
   59866             : // End of memberFunctionString
   59867             : // Start of memberFunctionString
   59868             : bool p_is_from_template_parameter;
   59869             :           
   59870             : // End of memberFunctionString
   59871             : 
   59872             :     friend struct Rose::Traits::generated::describe_node_t<SgNamedType>;
   59873             :     friend struct Rose::Traits::generated::describe_field_t<SgNamedType, SgDeclarationStatement*,&SgNamedType::p_declaration>;
   59874             :     friend struct Rose::Traits::generated::describe_field_t<SgNamedType, bool,&SgNamedType::p_autonomous_declaration>;
   59875             :     friend struct Rose::Traits::generated::describe_field_t<SgNamedType, bool,&SgNamedType::p_is_from_template_parameter>;
   59876             : 
   59877             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59878             : 
   59879             : 
   59880             :    };
   59881             : #endif
   59882             : 
   59883             : // postdeclarations for SgNamedType
   59884             : 
   59885             : /* #line 59886 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59886             : 
   59887             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   59888             : 
   59889             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59890             : 
   59891             : 
   59892             : /* #line 59893 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59893             : 
   59894             : 
   59895             : 
   59896             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59897             : 
   59898             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   59899             : //      This code is automatically generated for each 
   59900             : //      terminal and non-terminal within the defined 
   59901             : //      grammar.  There is a simple way to change the 
   59902             : //      code to fix bugs etc.  See the ROSE README file
   59903             : //      for directions.
   59904             : 
   59905             : // tps: (02/22/2010): Adding DLL export requirements
   59906             : #include "rosedll.h"
   59907             : 
   59908             : // predeclarations for SgClassType
   59909             : 
   59910             : /* #line 59911 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59911             : 
   59912             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   59913             : 
   59914             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   59915             : 
   59916             : #if 1
   59917             : // Class Definition for SgClassType
   59918             : class ROSE_DLL_API SgClassType  : public SgNamedType
   59919             :    {
   59920             :      public:
   59921             : 
   59922             : 
   59923             : /* #line 59924 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   59924             : 
   59925             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   59926             : // Start of memberFunctionString
   59927             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   59928             : 
   59929             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   59930             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   59931             :        // own data member and associated access function.
   59932             :        // static SgClassType* get_builtin_type();
   59933             : 
   59934             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   59935             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   59936             :        // own data member and associated access function.
   59937             :        // static void set_builtin_type(SgClassType* builtin_type);
   59938             : 
   59939             :       //! more sophisticated version for more complex types like SgClassType (types whose constructors take parameters)
   59940             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   59941             :        // static SgClassType* createType(SgDeclarationStatement* decl = NULL);
   59942             :           static SgClassType* createType(SgDeclarationStatement* decl = NULL, SgExpression* optional_fortran_type_kind = NULL);
   59943             : 
   59944             : 
   59945             : // End of memberFunctionString
   59946             : // Start of memberFunctionString
   59947             : /* #line 391 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   59948             : 
   59949             :           SgClassType ( const SgClassType & X );
   59950             : 
   59951             : 
   59952             : // End of memberFunctionString
   59953             : // Start of memberFunctionString
   59954             : /* #line 369 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   59955             : 
   59956             :       //! Support for some classes which have pure virtual function in base classes.
   59957             :       /*! For the classes derived from where the pure  virtual "virtual SgName get_name() = 0;"
   59958             :           This applies to the SgClassType, SgTypedef and the
   59959             :           SgEnumType (derived from SgNamedType)
   59960             :        */
   59961             :           SgName get_name() const override;
   59962             : 
   59963             : 
   59964             : // End of memberFunctionString
   59965             : // Start of memberFunctionString
   59966             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   59967             : 
   59968             : // *** COMMON CODE SECTION BEGINS HERE ***
   59969             : 
   59970             :     public:
   59971             : 
   59972             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   59973             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   59974             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   59975             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   59976             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   59977             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   59978             : 
   59979             :       /*! \brief returns a string representing the class name */
   59980             :           virtual std::string class_name() const override;
   59981             : 
   59982             :       /*! \brief returns new style SageIII enum values */
   59983             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   59984             : 
   59985             :       /*! \brief static variant value */
   59986             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   59987             :        // static const VariantT static_variant = V_SgClassType;
   59988             :           enum { static_variant = V_SgClassType };
   59989             : 
   59990             :        /* the generated cast function */
   59991             :       /*! \brief Casts pointer from base class to derived class */
   59992             :           ROSE_DLL_API friend       SgClassType* isSgClassType(       SgNode * s );
   59993             : 
   59994             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   59995             :           ROSE_DLL_API friend const SgClassType* isSgClassType( const SgNode * s );
   59996             : 
   59997             :      // ******************************************
   59998             :      // * Memory Pool / New / Delete
   59999             :      // ******************************************
   60000             : 
   60001             :      public:
   60002             :           /// \private
   60003             :           static const unsigned pool_size; //
   60004             :           /// \private
   60005             :           static std::vector<unsigned char *> pools; //
   60006             :           /// \private
   60007             :           static SgClassType * next_node; // 
   60008             : 
   60009             :           /// \private
   60010             :           static unsigned long initializeStorageClassArray(SgClassTypeStorageClass *); //
   60011             : 
   60012             :           /// \private
   60013             :           static void clearMemoryPool(); //
   60014             :           static void deleteMemoryPool(); //
   60015             : 
   60016             :           /// \private
   60017             :           static void extendMemoryPoolForFileIO(); //
   60018             : 
   60019             :           /// \private
   60020             :           static SgClassType * getPointerFromGlobalIndex(unsigned long); //
   60021             :           /// \private
   60022             :           static SgClassType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   60023             : 
   60024             :           /// \private
   60025             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   60026             :           /// \private
   60027             :           static void resetValidFreepointers(); //
   60028             :           /// \private
   60029             :           static unsigned long getNumberOfLastValidPointer(); //
   60030             : 
   60031             : 
   60032             : #if defined(INLINE_FUNCTIONS)
   60033             :       /*! \brief returns pointer to newly allocated IR node */
   60034             :           inline void *operator new (size_t size);
   60035             : #else
   60036             :       /*! \brief returns pointer to newly allocated IR node */
   60037             :           void *operator new (size_t size);
   60038             : #endif
   60039             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   60040             :           void operator delete (void* pointer, size_t size);
   60041             : 
   60042             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   60043        3032 :           void operator delete (void* pointer)
   60044             :              {
   60045             :             // This is the generated delete operator...
   60046        3032 :                SgClassType::operator delete (pointer,sizeof(SgClassType));
   60047             :              }
   60048             : 
   60049             :       /*! \brief Returns the total number of IR nodes of this type */
   60050             :           static size_t numberOfNodes();
   60051             : 
   60052             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   60053             :           static size_t memoryUsage();
   60054             : 
   60055             :       // End of scope which started in IR nodes specific code 
   60056             :       /* */
   60057             : 
   60058             :       /* name Internal Functions
   60059             :           \brief Internal functions ... incomplete-documentation
   60060             : 
   60061             :           These functions have been made public as part of the design, but they are suggested for internal use 
   60062             :           or by particularly knowledgeable users for specialized tools or applications.
   60063             : 
   60064             :           \internal We could not make these private because they are required by user for special purposes. And 
   60065             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   60066             :          
   60067             :        */
   60068             : 
   60069             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   60070             :        // overridden in every class by *generated* implementation
   60071             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   60072             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   60073             :        // MS: 06/28/02 container of names of variables or container indices 
   60074             :        // used used in the traversal to access AST successor nodes
   60075             :        // overridden in every class by *generated* implementation
   60076             :       /*! \brief container of names of variables or container indices used used in the traversal
   60077             :           to access AST successor nodes overridden in every class by *generated* implementation */
   60078             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   60079             : 
   60080             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   60081             :        // than all the vector copies. The implementation for these functions is generated for each class.
   60082             :       /*! \brief return number of children in the traversal successor list */
   60083             :           virtual size_t get_numberOfTraversalSuccessors() override;
   60084             :       /*! \brief index-based access to traversal successors by index number */
   60085             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   60086             :       /*! \brief index-based access to traversal successors by child node */
   60087             :           virtual size_t get_childIndex(SgNode *child) override;
   60088             : 
   60089             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   60090             :        // MS: 08/16/2002 method for generating RTI information
   60091             :       /*! \brief return C++ Runtime-Time-Information */
   60092             :           virtual RTIReturnType roseRTI() override;
   60093             : #endif
   60094             :       /* */
   60095             : 
   60096             : 
   60097             : 
   60098             :       /* name Deprecated Functions
   60099             :           \brief Deprecated functions ... incomplete-documentation
   60100             : 
   60101             :           These functions have been deprecated from use.
   60102             :        */
   60103             :       /* */
   60104             : 
   60105             :       /*! returns a C style string (char*) representing the class name */
   60106             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   60107             : 
   60108             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   60109             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   60110             : #if 0
   60111             :       /*! returns old style Sage II enum values */
   60112             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   60113             :       /*! returns old style Sage II enum values */
   60114             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   60115             : #endif
   60116             :       /* */
   60117             : 
   60118             : 
   60119             : 
   60120             : 
   60121             :      public:
   60122             :       /* name Traversal Support Functions
   60123             :           \brief Traversal support functions ... incomplete-documentation
   60124             : 
   60125             :           These functions have been made public as part of the design, but they are suggested for internal use 
   60126             :           or by particularly knowledgable users for specialized tools or applications.
   60127             :        */
   60128             :       /* */
   60129             : 
   60130             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   60131             :        // (inferior to ROSE traversal mechanism, experimental).
   60132             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   60133             :        */
   60134             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   60135             : 
   60136             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   60137             :       /*! \brief support for the classic visitor pattern done in GoF */
   60138             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   60139             : 
   60140             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   60141             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   60142             :        */
   60143             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   60144             : 
   60145             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   60146             :        */
   60147             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   60148             : 
   60149             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   60150             :        // This traversal helps support internal tools that call static member functions.
   60151             :        // note: this function operates on the memory pools.
   60152             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   60153             :        */
   60154             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   60155             :       /* */
   60156             : 
   60157             : 
   60158             :      public:
   60159             :       /* name Memory Allocation Functions
   60160             :           \brief Memory allocations functions ... incomplete-documentation
   60161             : 
   60162             :           These functions have been made public as part of the design, but they are suggested for internal use 
   60163             :           or by particularly knowledgable users for specialized tools or applications.
   60164             :        */
   60165             :       /* */
   60166             : 
   60167             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   60168             : 
   60169             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   60170             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   60171             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   60172             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   60173             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   60174             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   60175             :           being used with the AST File I/O mechanism.
   60176             :        */
   60177             :           virtual bool isInMemoryPool() override;
   60178             : 
   60179             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   60180             : 
   60181             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   60182             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   60183             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   60184             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   60185             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   60186             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   60187             :           being used with the AST File I/O mechanism.
   60188             :        */
   60189             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   60190             : 
   60191             :       // DQ (4/30/2006): Modified to be a const function.
   60192             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   60193             : 
   60194             :           This functions is part of general support for many possible tools to operate 
   60195             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   60196             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   60197             :           less than the set of pointers used by the AST file I/O. This is part of
   60198             :           work implemented by Andreas, and support tools such as the AST graph generation.
   60199             : 
   60200             :           \warning This function can return unexpected data members and thus the 
   60201             :                    order and the number of elements is unpredicable and subject 
   60202             :                    to change.
   60203             : 
   60204             :           \returns STL vector of pairs of SgNode* and strings
   60205             :        */
   60206             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   60207             : 
   60208             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   60209             : 
   60210             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   60211             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   60212             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   60213             : 
   60214             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   60215             :                    and subject to change.
   60216             :        */
   60217             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   60218             : 
   60219             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   60220             : 
   60221             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   60222             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   60223             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   60224             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   60225             : 
   60226             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   60227             : 
   60228             :           \returns long
   60229             :        */
   60230             :           virtual long getChildIndex( SgNode* childNode ) const override;
   60231             : 
   60232             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   60233             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   60234             :       /* \brief Constructor for use by AST File I/O Mechanism
   60235             : 
   60236             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   60237             :           which obtained via fast binary file I/O from disk.
   60238             :        */
   60239             :        // SgClassType( SgClassTypeStorageClass& source );
   60240             : 
   60241             : 
   60242             : 
   60243             : 
   60244             : 
   60245             :  // JH (10/24/2005): methods added to support the ast file IO
   60246             :     private:
   60247             : 
   60248             :       /* name AST Memory Allocation Support Functions
   60249             :           \brief Memory allocations support....
   60250             : 
   60251             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   60252             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   60253             :           and support the AST File I/O Mechanism.
   60254             :        */
   60255             :       /* */
   60256             : 
   60257             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   60258             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   60259             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   60260             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   60261             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   60262             :           a correspinding one in the AST_FILE_IO class!
   60263             :        */
   60264             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   60265             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   60266             :       /* \brief Typedef used for low level memory access.
   60267             :        */
   60268             :        // typedef unsigned char* TestType;
   60269             : 
   60270             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   60271             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   60272             :       /* \brief Typedef used to hold memory addresses as values.
   60273             :        */
   60274             :        // typedef unsigned long  AddressType;
   60275             : 
   60276             : 
   60277             : 
   60278             :        // necessary, to have direct access to the p_freepointer and the private methods !
   60279             :       /*! \brief friend class declaration to support AST File I/O */
   60280             :           friend class AST_FILE_IO;
   60281             : 
   60282             :       /*! \brief friend class declaration to support AST File I/O */
   60283             :           friend class SgClassTypeStorageClass;
   60284             : 
   60285             :       /*! \brief friend class declaration to support AST File I/O */
   60286             :           friend class AstSpecificDataManagingClass;
   60287             : 
   60288             :       /*! \brief friend class declaration to support AST File I/O */
   60289             :           friend class AstSpecificDataManagingClassStorageClass;
   60290             :     public:
   60291             :       /*! \brief IR node constructor to support AST File I/O */
   60292             :           SgClassType( const SgClassTypeStorageClass& source );
   60293             : 
   60294             :  // private: // JJW hack
   60295             :        /*
   60296             :           name AST Memory Allocation Support Variables
   60297             :           Memory allocations support variables 
   60298             : 
   60299             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   60300             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   60301             :           and support the AST File I/O Mechanism.
   60302             :        */
   60303             :       /* */
   60304             : 
   60305             :     public:
   60306             : 
   60307             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   60308             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   60309             :       // virtual SgNode* addRegExpAttribute();
   60310             :       /*! \brief Support for AST matching using regular expression.
   60311             : 
   60312             :           This support is incomplete and the subject of current research to define 
   60313             :           RegEx trees to support inexact matching.
   60314             :        */
   60315             :           SgClassType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   60316             : 
   60317             : // *** COMMON CODE SECTION ENDS HERE ***
   60318             : 
   60319             : 
   60320             : // End of memberFunctionString
   60321             : // Start of memberFunctionString
   60322             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   60323             : 
   60324             :      // the generated cast function
   60325             :      // friend ROSE_DLL_API SgClassType* isSgClassType ( SgNode* s );
   60326             : 
   60327             :           typedef SgNamedType base_node_type;
   60328             : 
   60329             : 
   60330             : // End of memberFunctionString
   60331             : // Start of memberFunctionString
   60332             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60333             : 
   60334             :        // SgName get_mangled ( SgUnparse_Info & info );
   60335             : 
   60336             :       //! Mangled name support for unparser support
   60337             :        // SgName get_mangled ( SgUnparse_Info & info );
   60338             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   60339             :           virtual SgName get_mangled (void) const override;
   60340             : 
   60341             : 
   60342             : 
   60343             : // End of memberFunctionString
   60344             : 
   60345             :      public: 
   60346             :          bool get_packed() const;
   60347             :          void set_packed(bool packed);
   60348             : 
   60349             : 
   60350             :      public: 
   60351             :          virtual ~SgClassType();
   60352             : 
   60353             : 
   60354             :      public: 
   60355             :          SgClassType(SgDeclarationStatement* declaration = NULL); 
   60356             : 
   60357             :     protected:
   60358             : // Start of memberFunctionString
   60359             : bool p_packed;
   60360             :           
   60361             : // End of memberFunctionString
   60362             : 
   60363             :     friend struct Rose::Traits::generated::describe_node_t<SgClassType>;
   60364             :     friend struct Rose::Traits::generated::describe_field_t<SgClassType, bool,&SgClassType::p_packed>;
   60365             : 
   60366             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60367             : 
   60368             : 
   60369             :    };
   60370             : #endif
   60371             : 
   60372             : // postdeclarations for SgClassType
   60373             : 
   60374             : /* #line 60375 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60375             : 
   60376             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   60377             : 
   60378             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60379             : 
   60380             : 
   60381             : /* #line 60382 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60382             : 
   60383             : 
   60384             : 
   60385             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60386             : 
   60387             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   60388             : //      This code is automatically generated for each 
   60389             : //      terminal and non-terminal within the defined 
   60390             : //      grammar.  There is a simple way to change the 
   60391             : //      code to fix bugs etc.  See the ROSE README file
   60392             : //      for directions.
   60393             : 
   60394             : // tps: (02/22/2010): Adding DLL export requirements
   60395             : #include "rosedll.h"
   60396             : 
   60397             : // predeclarations for SgEnumType
   60398             : 
   60399             : /* #line 60400 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60400             : 
   60401             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   60402             : 
   60403             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60404             : 
   60405             : #if 1
   60406             : // Class Definition for SgEnumType
   60407             : class ROSE_DLL_API SgEnumType  : public SgNamedType
   60408             :    {
   60409             :      public:
   60410             : 
   60411             : 
   60412             : /* #line 60413 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60413             : 
   60414             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   60415             : // Start of memberFunctionString
   60416             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60417             : 
   60418             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   60419             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   60420             :        // own data member and associated access function.
   60421             :        // static SgEnumType* get_builtin_type();
   60422             : 
   60423             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   60424             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   60425             :        // own data member and associated access function.
   60426             :        // static void set_builtin_type(SgEnumType* builtin_type);
   60427             : 
   60428             :       //! more sophisticated version for more complex types like SgEnumType (types whose constructors take parameters)
   60429             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   60430             :        // static SgEnumType* createType(SgEnumDeclaration* decl = NULL);
   60431             :           static SgEnumType* createType(SgEnumDeclaration* decl = NULL, SgExpression* optional_fortran_type_kind = NULL);
   60432             : 
   60433             : 
   60434             : // End of memberFunctionString
   60435             : // Start of memberFunctionString
   60436             : /* #line 408 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60437             : 
   60438             :           SgEnumType ( const SgEnumType & X );
   60439             : 
   60440             : 
   60441             : // End of memberFunctionString
   60442             : // Start of memberFunctionString
   60443             : /* #line 369 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60444             : 
   60445             :       //! Support for some classes which have pure virtual function in base classes.
   60446             :       /*! For the classes derived from where the pure  virtual "virtual SgName get_name() = 0;"
   60447             :           This applies to the SgClassType, SgTypedef and the
   60448             :           SgEnumType (derived from SgNamedType)
   60449             :        */
   60450             :           SgName get_name() const override;
   60451             : 
   60452             : 
   60453             : // End of memberFunctionString
   60454             : // Start of memberFunctionString
   60455             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   60456             : 
   60457             : // *** COMMON CODE SECTION BEGINS HERE ***
   60458             : 
   60459             :     public:
   60460             : 
   60461             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   60462             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   60463             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   60464             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   60465             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   60466             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   60467             : 
   60468             :       /*! \brief returns a string representing the class name */
   60469             :           virtual std::string class_name() const override;
   60470             : 
   60471             :       /*! \brief returns new style SageIII enum values */
   60472             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   60473             : 
   60474             :       /*! \brief static variant value */
   60475             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   60476             :        // static const VariantT static_variant = V_SgEnumType;
   60477             :           enum { static_variant = V_SgEnumType };
   60478             : 
   60479             :        /* the generated cast function */
   60480             :       /*! \brief Casts pointer from base class to derived class */
   60481             :           ROSE_DLL_API friend       SgEnumType* isSgEnumType(       SgNode * s );
   60482             : 
   60483             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   60484             :           ROSE_DLL_API friend const SgEnumType* isSgEnumType( const SgNode * s );
   60485             : 
   60486             :      // ******************************************
   60487             :      // * Memory Pool / New / Delete
   60488             :      // ******************************************
   60489             : 
   60490             :      public:
   60491             :           /// \private
   60492             :           static const unsigned pool_size; //
   60493             :           /// \private
   60494             :           static std::vector<unsigned char *> pools; //
   60495             :           /// \private
   60496             :           static SgEnumType * next_node; // 
   60497             : 
   60498             :           /// \private
   60499             :           static unsigned long initializeStorageClassArray(SgEnumTypeStorageClass *); //
   60500             : 
   60501             :           /// \private
   60502             :           static void clearMemoryPool(); //
   60503             :           static void deleteMemoryPool(); //
   60504             : 
   60505             :           /// \private
   60506             :           static void extendMemoryPoolForFileIO(); //
   60507             : 
   60508             :           /// \private
   60509             :           static SgEnumType * getPointerFromGlobalIndex(unsigned long); //
   60510             :           /// \private
   60511             :           static SgEnumType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   60512             : 
   60513             :           /// \private
   60514             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   60515             :           /// \private
   60516             :           static void resetValidFreepointers(); //
   60517             :           /// \private
   60518             :           static unsigned long getNumberOfLastValidPointer(); //
   60519             : 
   60520             : 
   60521             : #if defined(INLINE_FUNCTIONS)
   60522             :       /*! \brief returns pointer to newly allocated IR node */
   60523             :           inline void *operator new (size_t size);
   60524             : #else
   60525             :       /*! \brief returns pointer to newly allocated IR node */
   60526             :           void *operator new (size_t size);
   60527             : #endif
   60528             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   60529             :           void operator delete (void* pointer, size_t size);
   60530             : 
   60531             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   60532        1624 :           void operator delete (void* pointer)
   60533             :              {
   60534             :             // This is the generated delete operator...
   60535        1624 :                SgEnumType::operator delete (pointer,sizeof(SgEnumType));
   60536             :              }
   60537             : 
   60538             :       /*! \brief Returns the total number of IR nodes of this type */
   60539             :           static size_t numberOfNodes();
   60540             : 
   60541             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   60542             :           static size_t memoryUsage();
   60543             : 
   60544             :       // End of scope which started in IR nodes specific code 
   60545             :       /* */
   60546             : 
   60547             :       /* name Internal Functions
   60548             :           \brief Internal functions ... incomplete-documentation
   60549             : 
   60550             :           These functions have been made public as part of the design, but they are suggested for internal use 
   60551             :           or by particularly knowledgeable users for specialized tools or applications.
   60552             : 
   60553             :           \internal We could not make these private because they are required by user for special purposes. And 
   60554             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   60555             :          
   60556             :        */
   60557             : 
   60558             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   60559             :        // overridden in every class by *generated* implementation
   60560             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   60561             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   60562             :        // MS: 06/28/02 container of names of variables or container indices 
   60563             :        // used used in the traversal to access AST successor nodes
   60564             :        // overridden in every class by *generated* implementation
   60565             :       /*! \brief container of names of variables or container indices used used in the traversal
   60566             :           to access AST successor nodes overridden in every class by *generated* implementation */
   60567             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   60568             : 
   60569             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   60570             :        // than all the vector copies. The implementation for these functions is generated for each class.
   60571             :       /*! \brief return number of children in the traversal successor list */
   60572             :           virtual size_t get_numberOfTraversalSuccessors() override;
   60573             :       /*! \brief index-based access to traversal successors by index number */
   60574             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   60575             :       /*! \brief index-based access to traversal successors by child node */
   60576             :           virtual size_t get_childIndex(SgNode *child) override;
   60577             : 
   60578             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   60579             :        // MS: 08/16/2002 method for generating RTI information
   60580             :       /*! \brief return C++ Runtime-Time-Information */
   60581             :           virtual RTIReturnType roseRTI() override;
   60582             : #endif
   60583             :       /* */
   60584             : 
   60585             : 
   60586             : 
   60587             :       /* name Deprecated Functions
   60588             :           \brief Deprecated functions ... incomplete-documentation
   60589             : 
   60590             :           These functions have been deprecated from use.
   60591             :        */
   60592             :       /* */
   60593             : 
   60594             :       /*! returns a C style string (char*) representing the class name */
   60595             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   60596             : 
   60597             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   60598             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   60599             : #if 0
   60600             :       /*! returns old style Sage II enum values */
   60601             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   60602             :       /*! returns old style Sage II enum values */
   60603             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   60604             : #endif
   60605             :       /* */
   60606             : 
   60607             : 
   60608             : 
   60609             : 
   60610             :      public:
   60611             :       /* name Traversal Support Functions
   60612             :           \brief Traversal support functions ... incomplete-documentation
   60613             : 
   60614             :           These functions have been made public as part of the design, but they are suggested for internal use 
   60615             :           or by particularly knowledgable users for specialized tools or applications.
   60616             :        */
   60617             :       /* */
   60618             : 
   60619             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   60620             :        // (inferior to ROSE traversal mechanism, experimental).
   60621             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   60622             :        */
   60623             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   60624             : 
   60625             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   60626             :       /*! \brief support for the classic visitor pattern done in GoF */
   60627             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   60628             : 
   60629             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   60630             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   60631             :        */
   60632             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   60633             : 
   60634             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   60635             :        */
   60636             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   60637             : 
   60638             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   60639             :        // This traversal helps support internal tools that call static member functions.
   60640             :        // note: this function operates on the memory pools.
   60641             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   60642             :        */
   60643             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   60644             :       /* */
   60645             : 
   60646             : 
   60647             :      public:
   60648             :       /* name Memory Allocation Functions
   60649             :           \brief Memory allocations functions ... incomplete-documentation
   60650             : 
   60651             :           These functions have been made public as part of the design, but they are suggested for internal use 
   60652             :           or by particularly knowledgable users for specialized tools or applications.
   60653             :        */
   60654             :       /* */
   60655             : 
   60656             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   60657             : 
   60658             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   60659             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   60660             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   60661             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   60662             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   60663             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   60664             :           being used with the AST File I/O mechanism.
   60665             :        */
   60666             :           virtual bool isInMemoryPool() override;
   60667             : 
   60668             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   60669             : 
   60670             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   60671             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   60672             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   60673             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   60674             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   60675             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   60676             :           being used with the AST File I/O mechanism.
   60677             :        */
   60678             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   60679             : 
   60680             :       // DQ (4/30/2006): Modified to be a const function.
   60681             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   60682             : 
   60683             :           This functions is part of general support for many possible tools to operate 
   60684             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   60685             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   60686             :           less than the set of pointers used by the AST file I/O. This is part of
   60687             :           work implemented by Andreas, and support tools such as the AST graph generation.
   60688             : 
   60689             :           \warning This function can return unexpected data members and thus the 
   60690             :                    order and the number of elements is unpredicable and subject 
   60691             :                    to change.
   60692             : 
   60693             :           \returns STL vector of pairs of SgNode* and strings
   60694             :        */
   60695             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   60696             : 
   60697             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   60698             : 
   60699             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   60700             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   60701             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   60702             : 
   60703             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   60704             :                    and subject to change.
   60705             :        */
   60706             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   60707             : 
   60708             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   60709             : 
   60710             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   60711             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   60712             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   60713             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   60714             : 
   60715             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   60716             : 
   60717             :           \returns long
   60718             :        */
   60719             :           virtual long getChildIndex( SgNode* childNode ) const override;
   60720             : 
   60721             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   60722             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   60723             :       /* \brief Constructor for use by AST File I/O Mechanism
   60724             : 
   60725             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   60726             :           which obtained via fast binary file I/O from disk.
   60727             :        */
   60728             :        // SgEnumType( SgEnumTypeStorageClass& source );
   60729             : 
   60730             : 
   60731             : 
   60732             : 
   60733             : 
   60734             :  // JH (10/24/2005): methods added to support the ast file IO
   60735             :     private:
   60736             : 
   60737             :       /* name AST Memory Allocation Support Functions
   60738             :           \brief Memory allocations support....
   60739             : 
   60740             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   60741             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   60742             :           and support the AST File I/O Mechanism.
   60743             :        */
   60744             :       /* */
   60745             : 
   60746             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   60747             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   60748             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   60749             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   60750             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   60751             :           a correspinding one in the AST_FILE_IO class!
   60752             :        */
   60753             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   60754             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   60755             :       /* \brief Typedef used for low level memory access.
   60756             :        */
   60757             :        // typedef unsigned char* TestType;
   60758             : 
   60759             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   60760             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   60761             :       /* \brief Typedef used to hold memory addresses as values.
   60762             :        */
   60763             :        // typedef unsigned long  AddressType;
   60764             : 
   60765             : 
   60766             : 
   60767             :        // necessary, to have direct access to the p_freepointer and the private methods !
   60768             :       /*! \brief friend class declaration to support AST File I/O */
   60769             :           friend class AST_FILE_IO;
   60770             : 
   60771             :       /*! \brief friend class declaration to support AST File I/O */
   60772             :           friend class SgEnumTypeStorageClass;
   60773             : 
   60774             :       /*! \brief friend class declaration to support AST File I/O */
   60775             :           friend class AstSpecificDataManagingClass;
   60776             : 
   60777             :       /*! \brief friend class declaration to support AST File I/O */
   60778             :           friend class AstSpecificDataManagingClassStorageClass;
   60779             :     public:
   60780             :       /*! \brief IR node constructor to support AST File I/O */
   60781             :           SgEnumType( const SgEnumTypeStorageClass& source );
   60782             : 
   60783             :  // private: // JJW hack
   60784             :        /*
   60785             :           name AST Memory Allocation Support Variables
   60786             :           Memory allocations support variables 
   60787             : 
   60788             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   60789             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   60790             :           and support the AST File I/O Mechanism.
   60791             :        */
   60792             :       /* */
   60793             : 
   60794             :     public:
   60795             : 
   60796             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   60797             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   60798             :       // virtual SgNode* addRegExpAttribute();
   60799             :       /*! \brief Support for AST matching using regular expression.
   60800             : 
   60801             :           This support is incomplete and the subject of current research to define 
   60802             :           RegEx trees to support inexact matching.
   60803             :        */
   60804             :           SgEnumType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   60805             : 
   60806             : // *** COMMON CODE SECTION ENDS HERE ***
   60807             : 
   60808             : 
   60809             : // End of memberFunctionString
   60810             : // Start of memberFunctionString
   60811             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   60812             : 
   60813             :      // the generated cast function
   60814             :      // friend ROSE_DLL_API SgEnumType* isSgEnumType ( SgNode* s );
   60815             : 
   60816             :           typedef SgNamedType base_node_type;
   60817             : 
   60818             : 
   60819             : // End of memberFunctionString
   60820             : // Start of memberFunctionString
   60821             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60822             : 
   60823             :        // SgName get_mangled ( SgUnparse_Info & info );
   60824             : 
   60825             :       //! Mangled name support for unparser support
   60826             :        // SgName get_mangled ( SgUnparse_Info & info );
   60827             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   60828             :           virtual SgName get_mangled (void) const override;
   60829             : 
   60830             : 
   60831             : 
   60832             : // End of memberFunctionString
   60833             : 
   60834             : 
   60835             :      public: 
   60836             :          virtual ~SgEnumType();
   60837             : 
   60838             : 
   60839             :      public: 
   60840             :          SgEnumType(SgDeclarationStatement* declaration = NULL); 
   60841             : 
   60842             :     protected:
   60843             : 
   60844             :     friend struct Rose::Traits::generated::describe_node_t<SgEnumType>;
   60845             : 
   60846             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60847             : 
   60848             : 
   60849             :    };
   60850             : #endif
   60851             : 
   60852             : // postdeclarations for SgEnumType
   60853             : 
   60854             : /* #line 60855 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60855             : 
   60856             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   60857             : 
   60858             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60859             : 
   60860             : 
   60861             : /* #line 60862 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60862             : 
   60863             : 
   60864             : 
   60865             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60866             : 
   60867             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   60868             : //      This code is automatically generated for each 
   60869             : //      terminal and non-terminal within the defined 
   60870             : //      grammar.  There is a simple way to change the 
   60871             : //      code to fix bugs etc.  See the ROSE README file
   60872             : //      for directions.
   60873             : 
   60874             : // tps: (02/22/2010): Adding DLL export requirements
   60875             : #include "rosedll.h"
   60876             : 
   60877             : // predeclarations for SgTypedefType
   60878             : 
   60879             : /* #line 60880 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60880             : 
   60881             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   60882             : 
   60883             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   60884             : 
   60885             : #if 1
   60886             : // Class Definition for SgTypedefType
   60887             : class ROSE_DLL_API SgTypedefType  : public SgNamedType
   60888             :    {
   60889             :      public:
   60890             : 
   60891             : 
   60892             : /* #line 60893 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   60893             : 
   60894             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   60895             : // Start of memberFunctionString
   60896             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60897             : 
   60898             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   60899             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   60900             :        // own data member and associated access function.
   60901             :        // static SgTypedefType* get_builtin_type();
   60902             : 
   60903             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   60904             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   60905             :        // own data member and associated access function.
   60906             :        // static void set_builtin_type(SgTypedefType* builtin_type);
   60907             : 
   60908             :       //! more sophisticated version for more complex types like SgTypedefType (types whose constructors take parameters)
   60909             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   60910             :        // static SgTypedefType* createType(SgTypedefDeclaration* decl = NULL);
   60911             :           static SgTypedefType* createType(SgTypedefDeclaration* decl = NULL, SgExpression* optional_fortran_type_kind = NULL);
   60912             : 
   60913             : 
   60914             : // End of memberFunctionString
   60915             : // Start of memberFunctionString
   60916             : /* #line 369 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60917             : 
   60918             :       //! Support for some classes which have pure virtual function in base classes.
   60919             :       /*! For the classes derived from where the pure  virtual "virtual SgName get_name() = 0;"
   60920             :           This applies to the SgClassType, SgTypedef and the
   60921             :           SgEnumType (derived from SgNamedType)
   60922             :        */
   60923             :           SgName get_name() const override;
   60924             : 
   60925             : 
   60926             : // End of memberFunctionString
   60927             : // Start of memberFunctionString
   60928             : /* #line 385 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60929             : 
   60930             :       //! This is used in the SgTypedefType object (is not associated with a base_type data field)
   60931             :           SgType* get_base_type() const;
   60932             : 
   60933             : 
   60934             : // End of memberFunctionString
   60935             : // Start of memberFunctionString
   60936             : /* #line 348 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   60937             : 
   60938             : 
   60939             :        // DQ (10/18/2007): Added copy constructor so that the typedef lists on each type could be updated properly.
   60940             :       //! Copy constructor to support AST copy mechanism.
   60941             :           SgTypedefType ( const SgTypedefType & X );
   60942             : 
   60943             : 
   60944             : 
   60945             : // End of memberFunctionString
   60946             : // Start of memberFunctionString
   60947             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   60948             : 
   60949             : // *** COMMON CODE SECTION BEGINS HERE ***
   60950             : 
   60951             :     public:
   60952             : 
   60953             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   60954             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   60955             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   60956             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   60957             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   60958             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   60959             : 
   60960             :       /*! \brief returns a string representing the class name */
   60961             :           virtual std::string class_name() const override;
   60962             : 
   60963             :       /*! \brief returns new style SageIII enum values */
   60964             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   60965             : 
   60966             :       /*! \brief static variant value */
   60967             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   60968             :        // static const VariantT static_variant = V_SgTypedefType;
   60969             :           enum { static_variant = V_SgTypedefType };
   60970             : 
   60971             :        /* the generated cast function */
   60972             :       /*! \brief Casts pointer from base class to derived class */
   60973             :           ROSE_DLL_API friend       SgTypedefType* isSgTypedefType(       SgNode * s );
   60974             : 
   60975             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   60976             :           ROSE_DLL_API friend const SgTypedefType* isSgTypedefType( const SgNode * s );
   60977             : 
   60978             :      // ******************************************
   60979             :      // * Memory Pool / New / Delete
   60980             :      // ******************************************
   60981             : 
   60982             :      public:
   60983             :           /// \private
   60984             :           static const unsigned pool_size; //
   60985             :           /// \private
   60986             :           static std::vector<unsigned char *> pools; //
   60987             :           /// \private
   60988             :           static SgTypedefType * next_node; // 
   60989             : 
   60990             :           /// \private
   60991             :           static unsigned long initializeStorageClassArray(SgTypedefTypeStorageClass *); //
   60992             : 
   60993             :           /// \private
   60994             :           static void clearMemoryPool(); //
   60995             :           static void deleteMemoryPool(); //
   60996             : 
   60997             :           /// \private
   60998             :           static void extendMemoryPoolForFileIO(); //
   60999             : 
   61000             :           /// \private
   61001             :           static SgTypedefType * getPointerFromGlobalIndex(unsigned long); //
   61002             :           /// \private
   61003             :           static SgTypedefType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   61004             : 
   61005             :           /// \private
   61006             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   61007             :           /// \private
   61008             :           static void resetValidFreepointers(); //
   61009             :           /// \private
   61010             :           static unsigned long getNumberOfLastValidPointer(); //
   61011             : 
   61012             : 
   61013             : #if defined(INLINE_FUNCTIONS)
   61014             :       /*! \brief returns pointer to newly allocated IR node */
   61015             :           inline void *operator new (size_t size);
   61016             : #else
   61017             :       /*! \brief returns pointer to newly allocated IR node */
   61018             :           void *operator new (size_t size);
   61019             : #endif
   61020             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   61021             :           void operator delete (void* pointer, size_t size);
   61022             : 
   61023             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   61024        3696 :           void operator delete (void* pointer)
   61025             :              {
   61026             :             // This is the generated delete operator...
   61027        3696 :                SgTypedefType::operator delete (pointer,sizeof(SgTypedefType));
   61028             :              }
   61029             : 
   61030             :       /*! \brief Returns the total number of IR nodes of this type */
   61031             :           static size_t numberOfNodes();
   61032             : 
   61033             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   61034             :           static size_t memoryUsage();
   61035             : 
   61036             :       // End of scope which started in IR nodes specific code 
   61037             :       /* */
   61038             : 
   61039             :       /* name Internal Functions
   61040             :           \brief Internal functions ... incomplete-documentation
   61041             : 
   61042             :           These functions have been made public as part of the design, but they are suggested for internal use 
   61043             :           or by particularly knowledgeable users for specialized tools or applications.
   61044             : 
   61045             :           \internal We could not make these private because they are required by user for special purposes. And 
   61046             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   61047             :          
   61048             :        */
   61049             : 
   61050             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   61051             :        // overridden in every class by *generated* implementation
   61052             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   61053             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   61054             :        // MS: 06/28/02 container of names of variables or container indices 
   61055             :        // used used in the traversal to access AST successor nodes
   61056             :        // overridden in every class by *generated* implementation
   61057             :       /*! \brief container of names of variables or container indices used used in the traversal
   61058             :           to access AST successor nodes overridden in every class by *generated* implementation */
   61059             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   61060             : 
   61061             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   61062             :        // than all the vector copies. The implementation for these functions is generated for each class.
   61063             :       /*! \brief return number of children in the traversal successor list */
   61064             :           virtual size_t get_numberOfTraversalSuccessors() override;
   61065             :       /*! \brief index-based access to traversal successors by index number */
   61066             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   61067             :       /*! \brief index-based access to traversal successors by child node */
   61068             :           virtual size_t get_childIndex(SgNode *child) override;
   61069             : 
   61070             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   61071             :        // MS: 08/16/2002 method for generating RTI information
   61072             :       /*! \brief return C++ Runtime-Time-Information */
   61073             :           virtual RTIReturnType roseRTI() override;
   61074             : #endif
   61075             :       /* */
   61076             : 
   61077             : 
   61078             : 
   61079             :       /* name Deprecated Functions
   61080             :           \brief Deprecated functions ... incomplete-documentation
   61081             : 
   61082             :           These functions have been deprecated from use.
   61083             :        */
   61084             :       /* */
   61085             : 
   61086             :       /*! returns a C style string (char*) representing the class name */
   61087             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   61088             : 
   61089             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   61090             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   61091             : #if 0
   61092             :       /*! returns old style Sage II enum values */
   61093             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   61094             :       /*! returns old style Sage II enum values */
   61095             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   61096             : #endif
   61097             :       /* */
   61098             : 
   61099             : 
   61100             : 
   61101             : 
   61102             :      public:
   61103             :       /* name Traversal Support Functions
   61104             :           \brief Traversal support functions ... incomplete-documentation
   61105             : 
   61106             :           These functions have been made public as part of the design, but they are suggested for internal use 
   61107             :           or by particularly knowledgable users for specialized tools or applications.
   61108             :        */
   61109             :       /* */
   61110             : 
   61111             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   61112             :        // (inferior to ROSE traversal mechanism, experimental).
   61113             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   61114             :        */
   61115             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   61116             : 
   61117             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   61118             :       /*! \brief support for the classic visitor pattern done in GoF */
   61119             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   61120             : 
   61121             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   61122             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   61123             :        */
   61124             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   61125             : 
   61126             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   61127             :        */
   61128             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   61129             : 
   61130             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   61131             :        // This traversal helps support internal tools that call static member functions.
   61132             :        // note: this function operates on the memory pools.
   61133             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   61134             :        */
   61135             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   61136             :       /* */
   61137             : 
   61138             : 
   61139             :      public:
   61140             :       /* name Memory Allocation Functions
   61141             :           \brief Memory allocations functions ... incomplete-documentation
   61142             : 
   61143             :           These functions have been made public as part of the design, but they are suggested for internal use 
   61144             :           or by particularly knowledgable users for specialized tools or applications.
   61145             :        */
   61146             :       /* */
   61147             : 
   61148             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   61149             : 
   61150             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   61151             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   61152             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   61153             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   61154             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   61155             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   61156             :           being used with the AST File I/O mechanism.
   61157             :        */
   61158             :           virtual bool isInMemoryPool() override;
   61159             : 
   61160             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   61161             : 
   61162             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   61163             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   61164             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   61165             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   61166             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   61167             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   61168             :           being used with the AST File I/O mechanism.
   61169             :        */
   61170             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   61171             : 
   61172             :       // DQ (4/30/2006): Modified to be a const function.
   61173             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   61174             : 
   61175             :           This functions is part of general support for many possible tools to operate 
   61176             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   61177             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   61178             :           less than the set of pointers used by the AST file I/O. This is part of
   61179             :           work implemented by Andreas, and support tools such as the AST graph generation.
   61180             : 
   61181             :           \warning This function can return unexpected data members and thus the 
   61182             :                    order and the number of elements is unpredicable and subject 
   61183             :                    to change.
   61184             : 
   61185             :           \returns STL vector of pairs of SgNode* and strings
   61186             :        */
   61187             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   61188             : 
   61189             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   61190             : 
   61191             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   61192             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   61193             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   61194             : 
   61195             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   61196             :                    and subject to change.
   61197             :        */
   61198             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   61199             : 
   61200             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   61201             : 
   61202             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   61203             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   61204             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   61205             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   61206             : 
   61207             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   61208             : 
   61209             :           \returns long
   61210             :        */
   61211             :           virtual long getChildIndex( SgNode* childNode ) const override;
   61212             : 
   61213             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   61214             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   61215             :       /* \brief Constructor for use by AST File I/O Mechanism
   61216             : 
   61217             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   61218             :           which obtained via fast binary file I/O from disk.
   61219             :        */
   61220             :        // SgTypedefType( SgTypedefTypeStorageClass& source );
   61221             : 
   61222             : 
   61223             : 
   61224             : 
   61225             : 
   61226             :  // JH (10/24/2005): methods added to support the ast file IO
   61227             :     private:
   61228             : 
   61229             :       /* name AST Memory Allocation Support Functions
   61230             :           \brief Memory allocations support....
   61231             : 
   61232             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   61233             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   61234             :           and support the AST File I/O Mechanism.
   61235             :        */
   61236             :       /* */
   61237             : 
   61238             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   61239             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   61240             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   61241             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   61242             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   61243             :           a correspinding one in the AST_FILE_IO class!
   61244             :        */
   61245             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   61246             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   61247             :       /* \brief Typedef used for low level memory access.
   61248             :        */
   61249             :        // typedef unsigned char* TestType;
   61250             : 
   61251             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   61252             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   61253             :       /* \brief Typedef used to hold memory addresses as values.
   61254             :        */
   61255             :        // typedef unsigned long  AddressType;
   61256             : 
   61257             : 
   61258             : 
   61259             :        // necessary, to have direct access to the p_freepointer and the private methods !
   61260             :       /*! \brief friend class declaration to support AST File I/O */
   61261             :           friend class AST_FILE_IO;
   61262             : 
   61263             :       /*! \brief friend class declaration to support AST File I/O */
   61264             :           friend class SgTypedefTypeStorageClass;
   61265             : 
   61266             :       /*! \brief friend class declaration to support AST File I/O */
   61267             :           friend class AstSpecificDataManagingClass;
   61268             : 
   61269             :       /*! \brief friend class declaration to support AST File I/O */
   61270             :           friend class AstSpecificDataManagingClassStorageClass;
   61271             :     public:
   61272             :       /*! \brief IR node constructor to support AST File I/O */
   61273             :           SgTypedefType( const SgTypedefTypeStorageClass& source );
   61274             : 
   61275             :  // private: // JJW hack
   61276             :        /*
   61277             :           name AST Memory Allocation Support Variables
   61278             :           Memory allocations support variables 
   61279             : 
   61280             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   61281             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   61282             :           and support the AST File I/O Mechanism.
   61283             :        */
   61284             :       /* */
   61285             : 
   61286             :     public:
   61287             : 
   61288             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   61289             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   61290             :       // virtual SgNode* addRegExpAttribute();
   61291             :       /*! \brief Support for AST matching using regular expression.
   61292             : 
   61293             :           This support is incomplete and the subject of current research to define 
   61294             :           RegEx trees to support inexact matching.
   61295             :        */
   61296             :           SgTypedefType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   61297             : 
   61298             : // *** COMMON CODE SECTION ENDS HERE ***
   61299             : 
   61300             : 
   61301             : // End of memberFunctionString
   61302             : // Start of memberFunctionString
   61303             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   61304             : 
   61305             :      // the generated cast function
   61306             :      // friend ROSE_DLL_API SgTypedefType* isSgTypedefType ( SgNode* s );
   61307             : 
   61308             :           typedef SgNamedType base_node_type;
   61309             : 
   61310             : 
   61311             : // End of memberFunctionString
   61312             : // Start of memberFunctionString
   61313             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   61314             : 
   61315             :        // SgName get_mangled ( SgUnparse_Info & info );
   61316             : 
   61317             :       //! Mangled name support for unparser support
   61318             :        // SgName get_mangled ( SgUnparse_Info & info );
   61319             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   61320             :           virtual SgName get_mangled (void) const override;
   61321             : 
   61322             : 
   61323             : 
   61324             : // End of memberFunctionString
   61325             : 
   61326             :      public: 
   61327             :          SgSymbol* get_parent_scope() const;
   61328             :          void set_parent_scope(SgSymbol* parent_scope);
   61329             : 
   61330             : 
   61331             :      public: 
   61332             :          virtual ~SgTypedefType();
   61333             : 
   61334             : 
   61335             :      public: 
   61336             :          SgTypedefType(SgDeclarationStatement* declaration = NULL, SgSymbol* parent_scope = NULL); 
   61337             : 
   61338             :     protected:
   61339             : // Start of memberFunctionString
   61340             : SgSymbol* p_parent_scope;
   61341             :           
   61342             : // End of memberFunctionString
   61343             : 
   61344             :     friend struct Rose::Traits::generated::describe_node_t<SgTypedefType>;
   61345             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefType, SgSymbol*,&SgTypedefType::p_parent_scope>;
   61346             : 
   61347             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61348             : 
   61349             : 
   61350             :    };
   61351             : #endif
   61352             : 
   61353             : // postdeclarations for SgTypedefType
   61354             : 
   61355             : /* #line 61356 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61356             : 
   61357             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   61358             : 
   61359             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61360             : 
   61361             : 
   61362             : /* #line 61363 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61363             : 
   61364             : 
   61365             : 
   61366             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61367             : 
   61368             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   61369             : //      This code is automatically generated for each 
   61370             : //      terminal and non-terminal within the defined 
   61371             : //      grammar.  There is a simple way to change the 
   61372             : //      code to fix bugs etc.  See the ROSE README file
   61373             : //      for directions.
   61374             : 
   61375             : // tps: (02/22/2010): Adding DLL export requirements
   61376             : #include "rosedll.h"
   61377             : 
   61378             : // predeclarations for SgNonrealType
   61379             : 
   61380             : /* #line 61381 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61381             : 
   61382             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   61383             : 
   61384             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61385             : 
   61386             : #if 1
   61387             : // Class Definition for SgNonrealType
   61388             : class ROSE_DLL_API SgNonrealType  : public SgNamedType
   61389             :    {
   61390             :      public:
   61391             : 
   61392             : 
   61393             : /* #line 61394 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61394             : 
   61395             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   61396             : // Start of memberFunctionString
   61397             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   61398             : 
   61399             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   61400             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   61401             :        // own data member and associated access function.
   61402             :        // static SgNonrealType* get_builtin_type();
   61403             : 
   61404             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   61405             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   61406             :        // own data member and associated access function.
   61407             :        // static void set_builtin_type(SgNonrealType* builtin_type);
   61408             : 
   61409             :       //! more sophisticated version for more complex types like SgNonrealType (types whose constructors take parameters)
   61410             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   61411             :        // static SgNonrealType* createType(SgNonrealDecl* decl = NULL);
   61412             :           static SgNonrealType* createType(SgNonrealDecl* decl = NULL, SgExpression* optional_fortran_type_kind = NULL);
   61413             : 
   61414             : 
   61415             : // End of memberFunctionString
   61416             : // Start of memberFunctionString
   61417             : /* #line 395 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   61418             : 
   61419             :           SgNonrealType ( const SgNonrealType & X );
   61420             : //        virtual SgName get_mangled(void) const;
   61421             : //        virtual SgName get_name() const;
   61422             : 
   61423             : 
   61424             : // End of memberFunctionString
   61425             : // Start of memberFunctionString
   61426             : /* #line 369 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   61427             : 
   61428             :       //! Support for some classes which have pure virtual function in base classes.
   61429             :       /*! For the classes derived from where the pure  virtual "virtual SgName get_name() = 0;"
   61430             :           This applies to the SgClassType, SgTypedef and the
   61431             :           SgEnumType (derived from SgNamedType)
   61432             :        */
   61433             :           SgName get_name() const override;
   61434             : 
   61435             : 
   61436             : // End of memberFunctionString
   61437             : // Start of memberFunctionString
   61438             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   61439             : 
   61440             : // *** COMMON CODE SECTION BEGINS HERE ***
   61441             : 
   61442             :     public:
   61443             : 
   61444             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   61445             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   61446             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   61447             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   61448             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   61449             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   61450             : 
   61451             :       /*! \brief returns a string representing the class name */
   61452             :           virtual std::string class_name() const override;
   61453             : 
   61454             :       /*! \brief returns new style SageIII enum values */
   61455             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   61456             : 
   61457             :       /*! \brief static variant value */
   61458             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   61459             :        // static const VariantT static_variant = V_SgNonrealType;
   61460             :           enum { static_variant = V_SgNonrealType };
   61461             : 
   61462             :        /* the generated cast function */
   61463             :       /*! \brief Casts pointer from base class to derived class */
   61464             :           ROSE_DLL_API friend       SgNonrealType* isSgNonrealType(       SgNode * s );
   61465             : 
   61466             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   61467             :           ROSE_DLL_API friend const SgNonrealType* isSgNonrealType( const SgNode * s );
   61468             : 
   61469             :      // ******************************************
   61470             :      // * Memory Pool / New / Delete
   61471             :      // ******************************************
   61472             : 
   61473             :      public:
   61474             :           /// \private
   61475             :           static const unsigned pool_size; //
   61476             :           /// \private
   61477             :           static std::vector<unsigned char *> pools; //
   61478             :           /// \private
   61479             :           static SgNonrealType * next_node; // 
   61480             : 
   61481             :           /// \private
   61482             :           static unsigned long initializeStorageClassArray(SgNonrealTypeStorageClass *); //
   61483             : 
   61484             :           /// \private
   61485             :           static void clearMemoryPool(); //
   61486             :           static void deleteMemoryPool(); //
   61487             : 
   61488             :           /// \private
   61489             :           static void extendMemoryPoolForFileIO(); //
   61490             : 
   61491             :           /// \private
   61492             :           static SgNonrealType * getPointerFromGlobalIndex(unsigned long); //
   61493             :           /// \private
   61494             :           static SgNonrealType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   61495             : 
   61496             :           /// \private
   61497             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   61498             :           /// \private
   61499             :           static void resetValidFreepointers(); //
   61500             :           /// \private
   61501             :           static unsigned long getNumberOfLastValidPointer(); //
   61502             : 
   61503             : 
   61504             : #if defined(INLINE_FUNCTIONS)
   61505             :       /*! \brief returns pointer to newly allocated IR node */
   61506             :           inline void *operator new (size_t size);
   61507             : #else
   61508             :       /*! \brief returns pointer to newly allocated IR node */
   61509             :           void *operator new (size_t size);
   61510             : #endif
   61511             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   61512             :           void operator delete (void* pointer, size_t size);
   61513             : 
   61514             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   61515       10160 :           void operator delete (void* pointer)
   61516             :              {
   61517             :             // This is the generated delete operator...
   61518       10160 :                SgNonrealType::operator delete (pointer,sizeof(SgNonrealType));
   61519             :              }
   61520             : 
   61521             :       /*! \brief Returns the total number of IR nodes of this type */
   61522             :           static size_t numberOfNodes();
   61523             : 
   61524             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   61525             :           static size_t memoryUsage();
   61526             : 
   61527             :       // End of scope which started in IR nodes specific code 
   61528             :       /* */
   61529             : 
   61530             :       /* name Internal Functions
   61531             :           \brief Internal functions ... incomplete-documentation
   61532             : 
   61533             :           These functions have been made public as part of the design, but they are suggested for internal use 
   61534             :           or by particularly knowledgeable users for specialized tools or applications.
   61535             : 
   61536             :           \internal We could not make these private because they are required by user for special purposes. And 
   61537             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   61538             :          
   61539             :        */
   61540             : 
   61541             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   61542             :        // overridden in every class by *generated* implementation
   61543             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   61544             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   61545             :        // MS: 06/28/02 container of names of variables or container indices 
   61546             :        // used used in the traversal to access AST successor nodes
   61547             :        // overridden in every class by *generated* implementation
   61548             :       /*! \brief container of names of variables or container indices used used in the traversal
   61549             :           to access AST successor nodes overridden in every class by *generated* implementation */
   61550             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   61551             : 
   61552             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   61553             :        // than all the vector copies. The implementation for these functions is generated for each class.
   61554             :       /*! \brief return number of children in the traversal successor list */
   61555             :           virtual size_t get_numberOfTraversalSuccessors() override;
   61556             :       /*! \brief index-based access to traversal successors by index number */
   61557             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   61558             :       /*! \brief index-based access to traversal successors by child node */
   61559             :           virtual size_t get_childIndex(SgNode *child) override;
   61560             : 
   61561             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   61562             :        // MS: 08/16/2002 method for generating RTI information
   61563             :       /*! \brief return C++ Runtime-Time-Information */
   61564             :           virtual RTIReturnType roseRTI() override;
   61565             : #endif
   61566             :       /* */
   61567             : 
   61568             : 
   61569             : 
   61570             :       /* name Deprecated Functions
   61571             :           \brief Deprecated functions ... incomplete-documentation
   61572             : 
   61573             :           These functions have been deprecated from use.
   61574             :        */
   61575             :       /* */
   61576             : 
   61577             :       /*! returns a C style string (char*) representing the class name */
   61578             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   61579             : 
   61580             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   61581             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   61582             : #if 0
   61583             :       /*! returns old style Sage II enum values */
   61584             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   61585             :       /*! returns old style Sage II enum values */
   61586             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   61587             : #endif
   61588             :       /* */
   61589             : 
   61590             : 
   61591             : 
   61592             : 
   61593             :      public:
   61594             :       /* name Traversal Support Functions
   61595             :           \brief Traversal support functions ... incomplete-documentation
   61596             : 
   61597             :           These functions have been made public as part of the design, but they are suggested for internal use 
   61598             :           or by particularly knowledgable users for specialized tools or applications.
   61599             :        */
   61600             :       /* */
   61601             : 
   61602             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   61603             :        // (inferior to ROSE traversal mechanism, experimental).
   61604             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   61605             :        */
   61606             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   61607             : 
   61608             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   61609             :       /*! \brief support for the classic visitor pattern done in GoF */
   61610             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   61611             : 
   61612             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   61613             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   61614             :        */
   61615             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   61616             : 
   61617             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   61618             :        */
   61619             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   61620             : 
   61621             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   61622             :        // This traversal helps support internal tools that call static member functions.
   61623             :        // note: this function operates on the memory pools.
   61624             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   61625             :        */
   61626             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   61627             :       /* */
   61628             : 
   61629             : 
   61630             :      public:
   61631             :       /* name Memory Allocation Functions
   61632             :           \brief Memory allocations functions ... incomplete-documentation
   61633             : 
   61634             :           These functions have been made public as part of the design, but they are suggested for internal use 
   61635             :           or by particularly knowledgable users for specialized tools or applications.
   61636             :        */
   61637             :       /* */
   61638             : 
   61639             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   61640             : 
   61641             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   61642             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   61643             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   61644             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   61645             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   61646             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   61647             :           being used with the AST File I/O mechanism.
   61648             :        */
   61649             :           virtual bool isInMemoryPool() override;
   61650             : 
   61651             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   61652             : 
   61653             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   61654             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   61655             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   61656             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   61657             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   61658             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   61659             :           being used with the AST File I/O mechanism.
   61660             :        */
   61661             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   61662             : 
   61663             :       // DQ (4/30/2006): Modified to be a const function.
   61664             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   61665             : 
   61666             :           This functions is part of general support for many possible tools to operate 
   61667             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   61668             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   61669             :           less than the set of pointers used by the AST file I/O. This is part of
   61670             :           work implemented by Andreas, and support tools such as the AST graph generation.
   61671             : 
   61672             :           \warning This function can return unexpected data members and thus the 
   61673             :                    order and the number of elements is unpredicable and subject 
   61674             :                    to change.
   61675             : 
   61676             :           \returns STL vector of pairs of SgNode* and strings
   61677             :        */
   61678             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   61679             : 
   61680             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   61681             : 
   61682             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   61683             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   61684             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   61685             : 
   61686             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   61687             :                    and subject to change.
   61688             :        */
   61689             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   61690             : 
   61691             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   61692             : 
   61693             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   61694             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   61695             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   61696             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   61697             : 
   61698             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   61699             : 
   61700             :           \returns long
   61701             :        */
   61702             :           virtual long getChildIndex( SgNode* childNode ) const override;
   61703             : 
   61704             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   61705             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   61706             :       /* \brief Constructor for use by AST File I/O Mechanism
   61707             : 
   61708             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   61709             :           which obtained via fast binary file I/O from disk.
   61710             :        */
   61711             :        // SgNonrealType( SgNonrealTypeStorageClass& source );
   61712             : 
   61713             : 
   61714             : 
   61715             : 
   61716             : 
   61717             :  // JH (10/24/2005): methods added to support the ast file IO
   61718             :     private:
   61719             : 
   61720             :       /* name AST Memory Allocation Support Functions
   61721             :           \brief Memory allocations support....
   61722             : 
   61723             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   61724             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   61725             :           and support the AST File I/O Mechanism.
   61726             :        */
   61727             :       /* */
   61728             : 
   61729             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   61730             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   61731             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   61732             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   61733             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   61734             :           a correspinding one in the AST_FILE_IO class!
   61735             :        */
   61736             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   61737             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   61738             :       /* \brief Typedef used for low level memory access.
   61739             :        */
   61740             :        // typedef unsigned char* TestType;
   61741             : 
   61742             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   61743             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   61744             :       /* \brief Typedef used to hold memory addresses as values.
   61745             :        */
   61746             :        // typedef unsigned long  AddressType;
   61747             : 
   61748             : 
   61749             : 
   61750             :        // necessary, to have direct access to the p_freepointer and the private methods !
   61751             :       /*! \brief friend class declaration to support AST File I/O */
   61752             :           friend class AST_FILE_IO;
   61753             : 
   61754             :       /*! \brief friend class declaration to support AST File I/O */
   61755             :           friend class SgNonrealTypeStorageClass;
   61756             : 
   61757             :       /*! \brief friend class declaration to support AST File I/O */
   61758             :           friend class AstSpecificDataManagingClass;
   61759             : 
   61760             :       /*! \brief friend class declaration to support AST File I/O */
   61761             :           friend class AstSpecificDataManagingClassStorageClass;
   61762             :     public:
   61763             :       /*! \brief IR node constructor to support AST File I/O */
   61764             :           SgNonrealType( const SgNonrealTypeStorageClass& source );
   61765             : 
   61766             :  // private: // JJW hack
   61767             :        /*
   61768             :           name AST Memory Allocation Support Variables
   61769             :           Memory allocations support variables 
   61770             : 
   61771             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   61772             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   61773             :           and support the AST File I/O Mechanism.
   61774             :        */
   61775             :       /* */
   61776             : 
   61777             :     public:
   61778             : 
   61779             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   61780             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   61781             :       // virtual SgNode* addRegExpAttribute();
   61782             :       /*! \brief Support for AST matching using regular expression.
   61783             : 
   61784             :           This support is incomplete and the subject of current research to define 
   61785             :           RegEx trees to support inexact matching.
   61786             :        */
   61787             :           SgNonrealType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   61788             : 
   61789             : // *** COMMON CODE SECTION ENDS HERE ***
   61790             : 
   61791             : 
   61792             : // End of memberFunctionString
   61793             : // Start of memberFunctionString
   61794             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   61795             : 
   61796             :      // the generated cast function
   61797             :      // friend ROSE_DLL_API SgNonrealType* isSgNonrealType ( SgNode* s );
   61798             : 
   61799             :           typedef SgNamedType base_node_type;
   61800             : 
   61801             : 
   61802             : // End of memberFunctionString
   61803             : // Start of memberFunctionString
   61804             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   61805             : 
   61806             :        // SgName get_mangled ( SgUnparse_Info & info );
   61807             : 
   61808             :       //! Mangled name support for unparser support
   61809             :        // SgName get_mangled ( SgUnparse_Info & info );
   61810             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   61811             :           virtual SgName get_mangled (void) const override;
   61812             : 
   61813             : 
   61814             : 
   61815             : // End of memberFunctionString
   61816             : 
   61817             : 
   61818             :      public: 
   61819             :          virtual ~SgNonrealType();
   61820             : 
   61821             : 
   61822             :      public: 
   61823             :          SgNonrealType(SgDeclarationStatement* declaration = NULL); 
   61824             : 
   61825             :     protected:
   61826             : 
   61827             :     friend struct Rose::Traits::generated::describe_node_t<SgNonrealType>;
   61828             : 
   61829             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61830             : 
   61831             : 
   61832             :    };
   61833             : #endif
   61834             : 
   61835             : // postdeclarations for SgNonrealType
   61836             : 
   61837             : /* #line 61838 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61838             : 
   61839             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   61840             : 
   61841             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61842             : 
   61843             : 
   61844             : /* #line 61845 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61845             : 
   61846             : 
   61847             : 
   61848             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61849             : 
   61850             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   61851             : //      This code is automatically generated for each 
   61852             : //      terminal and non-terminal within the defined 
   61853             : //      grammar.  There is a simple way to change the 
   61854             : //      code to fix bugs etc.  See the ROSE README file
   61855             : //      for directions.
   61856             : 
   61857             : // tps: (02/22/2010): Adding DLL export requirements
   61858             : #include "rosedll.h"
   61859             : 
   61860             : // predeclarations for SgModifierType
   61861             : 
   61862             : /* #line 61863 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61863             : 
   61864             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   61865             : 
   61866             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   61867             : 
   61868             : #if 1
   61869             : // Class Definition for SgModifierType
   61870             : class ROSE_DLL_API SgModifierType  : public SgType
   61871             :    {
   61872             :      public:
   61873             : 
   61874             : 
   61875             : /* #line 61876 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   61876             : 
   61877             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   61878             : // Start of memberFunctionString
   61879             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   61880             : 
   61881             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   61882             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   61883             :        // own data member and associated access function.
   61884             :        // static SgModifierType* get_builtin_type();
   61885             : 
   61886             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   61887             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   61888             :        // own data member and associated access function.
   61889             :        // static void set_builtin_type(SgModifierType* builtin_type);
   61890             : 
   61891             :       //! more sophisticated version for more complex types like SgModifierType (types whose constructors take parameters)
   61892             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   61893             :        // static SgModifierType* createType(SgType* type = NULL, unsigned int x = 0);
   61894             :           static SgModifierType* createType(SgType* type = NULL, unsigned int x = 0, SgExpression* optional_fortran_type_kind = NULL);
   61895             : 
   61896             : 
   61897             : // End of memberFunctionString
   61898             : // Start of memberFunctionString
   61899             : /* #line 417 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   61900             : 
   61901             : 
   61902             :        // name TypeModifierGroup3 Type Modifiers
   61903             :       /*
   61904             :           name Type Modifiers
   61905             :           \brief Compute modifier values.
   61906             : 
   61907             :           These return false in the implementation of the virtual functions
   61908             :           in SgType and are overridden here.
   61909             : 
   61910             :           \internal Return type should be changed to "bool."
   61911             :           \todo implement type modifier query functions in SgType class.
   61912             :        */
   61913             : #if 0
   61914             :       //! Tests for declaration as const
   61915             :           bool isConst() const ;
   61916             :       //! Test for declaration as volatile
   61917             :           bool isVolatile() const ;
   61918             :       //! Tests for declaration as restrict
   61919             :           bool isRestrict() const ;
   61920             :       //! Tests for declaration as UPC shared
   61921             :           bool isUPC_Shared() const ;
   61922             :       //! Tests for declaration as UPC strict
   61923             :           bool isUPC_Strict() const ;
   61924             :       //! Tests for declaration as UPC relaxed
   61925             :           bool isUPC_Relaxed() const ;
   61926             : #endif
   61927             :        /*! */
   61928             : 
   61929             :   // DQ (7/28/2010): Make this private so that we can support API that would force the type table to be used.
   61930             :   // Users should use the build functions to construct modifier types (SgModifierType IR nodes) with different
   61931             :   // flags set.
   61932             :   // private:
   61933             :       //! Access function for modifier
   61934             :           SgTypeModifier & get_typeModifier();
   61935             : 
   61936             :        // RV (2/2/2006): Added a 'const' version
   61937             :           const SgTypeModifier& get_typeModifier (void) const;
   61938             : 
   61939             :   // DQ (7/28/2010): Make this public as the end of the previous private region.
   61940             :      public:
   61941             :        // friend namespace SageBuilder;
   61942             :        // friend SgModifierType* SageBuilder::buildConstType(SgType* base_type /*=NULL*/);
   61943             : 
   61944             :           static SgModifierType* insertModifierTypeIntoTypeTable( SgModifierType* result );
   61945             : 
   61946             : #if 0
   61947             :        // DQ (11/28/2015): This has been move to the SgType class since it is a general requirement.
   61948             :        // DQ (11/28/2015): Adding operator==() function to use in symbol table lookup when template
   61949             :        // arguments or parameters resolve to SgModifierType and we need to know if it is the same type.
   61950             :        // One might expect that with type tables they would only be the same if there were the same
   61951             :        // pointer, but I think this is not alwasy true for SgModifierType nodes.
   61952             :        // bool operator== (const SgModifierType & X, const SgModifierType & Y);
   61953             :           bool operator== (const SgModifierType & Y) const;
   61954             : #endif
   61955             : #if 0
   61956             :           void unsetRestrict();
   61957             :           void setRestrict();
   61958             :           void unsetConst();
   61959             :           void setConst();
   61960             :           void unsetVolatile();
   61961             :           void setVolatile();
   61962             :           void unsetUPC_Shared();
   61963             :           void setUPC_Shared();
   61964             :           void unsetUPC_Strict();
   61965             :           void setUPC_Strict();
   61966             :           void unsetUPC_Relaxed();
   61967             :           void setUPC_Relaxed();
   61968             : #endif
   61969             : 
   61970             : #if 0
   61971             :        // Tests not implemented!
   61972             : 
   61973             :       //! Tests for declaration as extern
   61974             :           bool isExtern() const ;
   61975             :       //! Tests for declaration as typedef
   61976             :           bool isTypedef() const ;
   61977             :       //! Tests for declaration as virtual
   61978             :           bool isVirtual() const ;
   61979             :       //! Test for declaration as protected
   61980             :           bool isProtected() const ;
   61981             :       //! Test for declaration as private
   61982             :           bool isPrivate() const ;
   61983             :       //! Test for declaration as public
   61984             :           bool isPublic() const ;
   61985             :       //! Test for declaration as auto (default)
   61986             :           bool isAuto() const ;
   61987             : #endif
   61988             : 
   61989             : #if 0
   61990             :       //! Enum type containing all modifiers
   61991             :           enum modifiers
   61992             :              {
   61993             :                m_volatile = 0x01, //!< storage modifier
   61994             :                m_global   = 0x02, //!< not use by ROSE
   61995             :                m_sync     = 0x04, //!< not use by ROSE
   61996             :                m_const    = 0x08, //!< const modifier
   61997             :                m_restrict = 0x10,//!< support for restrict keyword (specifies non-aliased pointers)
   61998             :                m_shared   = 0x20, //!< UPC shared modifier
   61999             :                m_strict   = 0x40, //!< UPC strict modifier
   62000             :                m_relaxed  = 0x80, //!< UPC relaxed modifier
   62001             :              };
   62002             : 
   62003             :        //! mask bits on
   62004             :           void set_modifier   (int flag);
   62005             : 
   62006             :        //! mask bits off
   62007             :           void unset_modifier (int flag);
   62008             : 
   62009             :       //! Access function for modifiers
   62010             :           bool isConst() const;
   62011             :           bool isSync() const;
   62012             :           bool isGlobal() const;
   62013             :           bool isVolatile() const;
   62014             :           bool isRestrict() const;
   62015             : 
   62016             :        // UPC specific
   62017             :           bool isShared() const;
   62018             :           bool isStrict() const;
   62019             :           bool isRelaxed() const;
   62020             : 
   62021             :       //! Set/unset functions for specific modifiers
   62022             :           void unsetSync();
   62023             :           void setSync();
   62024             :           void unsetGlobal();
   62025             :           void setGlobal();
   62026             :           void unsetConst();
   62027             :           void setConst();
   62028             :           void unsetRestrict();
   62029             :           void setRestrict();
   62030             : 
   62031             :        // UPC specific
   62032             :           void unsetShared();
   62033             :           void setShared();
   62034             :           void unsetStrict();
   62035             :           void setStrict();
   62036             :           void unsetRelaxed();
   62037             :           void setRelaxed();
   62038             : 
   62039             :       //! Get whole bit field fr modifier set
   62040             :           unsigned int bitfield(void);
   62041             : #endif
   62042             : 
   62043             : #if 0
   62044             :        // DQ (4/6/2004): Added to provide uniform support for type modifiers
   62045             :           enum type_modifier_enum
   62046             :              {
   62047             :             // Bit values can support multiple values in a single enum type
   62048             :                e_unknown     =   0x000,   // Unknown value (default)
   62049             :                e_const       =   0x001,   // Const qualifier
   62050             :                e_volatile    =   0x002,   // Volatile qualifier
   62051             :                e_restrict    =   0x004,   // Restrict qualifier
   62052             :                e_unaligned   =   0x008,   // Microsoft __unaligned qualifier
   62053             :                e_near        =   0x010,   // near
   62054             :                e_far         =   0x020,   // far
   62055             :                e_upc_shared  =   0x040,   // UPC shared
   62056             :                e_upc_strict  =   0x080,   // UPC strict
   62057             :                e_upc_relaxed =   0x100,   // UPC relaxed
   62058             :                e_last_type_modifier = 0x200
   62059             :              };
   62060             : 
   62061             :        // DQ (4/6/2004): Added to provide uniform support for storage modifiers
   62062             :           enum storage_modifier_enum
   62063             :              {
   62064             :             // Only one value can be specified (at least in C, what about C++)
   62065             :                e_unknown_storage,
   62066             :                e_extern,
   62067             :                e_static,
   62068             :                e_auto,
   62069             :                e_unspecified,
   62070             :                e_typedef,
   62071             :                e_register,
   62072             :                e_asm,
   62073             : #ifdef FORTRAN_SUPPORTED
   62074             :                e_local,              // Auto or static at back end's preference
   62075             :                e_common,             // A COMMON block
   62076             :                e_associated,         // Variable is part of an association
   62077             :                e_intrinsic,          // Intrinsic function or subroutine
   62078             :                e_pointer_based,      // Pointee of a POINTER definition
   62079             : #endif
   62080             :                e_last_storage_modifier
   62081             :              };
   62082             : 
   62083             :        // DQ (4/6/2004): Added to provide uniform support for access modifiers
   62084             :           enum access_modifier_enum
   62085             :              {
   62086             :             // Only one value can be specified (at least in C, what about C++)
   62087             :                e_unknown_access,
   62088             :                e_private,
   62089             :                e_protected,
   62090             :                e_public,
   62091             :                e_virtual,  // support for virtual base class (applies only in case of inheritance)
   62092             :                e_last_access_modifier
   62093             :              };
   62094             : 
   62095             :           int checkBit(type_modifier_enum bit) const;
   62096             :           void setBit(type_modifier_enum bit);
   62097             :           void unsetBit(type_modifier_enum bit);
   62098             : #endif
   62099             : 
   62100             : #if 0
   62101             :        // DQ (4/13/2004): This new design organizes the modifiers in SAGE
   62102             : 
   62103             :       //! Modifier Interface (implementation is hidden in specific modifier objects)
   62104             :       //! Type Modifier Support
   62105             : 
   62106             :        // Interface from cv-specifier in type-specifier
   62107             :           int isConst() const;
   62108             :           void setConst();
   62109             :           void unsetConst();
   62110             : 
   62111             :        // Interface from cv-specifier in type-specifier
   62112             :           int isVolatile() const;
   62113             :           void setVolatile();
   62114             :           void unsetVolatile();
   62115             : 
   62116             :        // Interface from type-specifier
   62117             :           int isRestrict() const;
   62118             :           void setRestrict();
   62119             :           void unsetRestrict();
   62120             : #if 0
   62121             :           int isUnaligned() const;
   62122             :           void setUnaligned();
   62123             :           void unsetUnaligned();
   62124             : 
   62125             :           int isNear() const;
   62126             :           void setNear();
   62127             :           void unsetNear();
   62128             : 
   62129             :           int isFar() const;
   62130             :           void setFar();
   62131             :           void unsetFar();
   62132             : #endif
   62133             :           int isUPC_Shared() const;
   62134             :           void setUPC_Shared();
   62135             :           void unsetUPC_Shared();
   62136             : 
   62137             :           int isUPC_Strict() const;
   62138             :           void setUPC_Strict();
   62139             :           void unsetUPC_Strict();
   62140             : 
   62141             :           int isUPC_Relaxed() const;
   62142             :           void setUPC_Relaxed();
   62143             :           void unsetUPC_Relaxed();
   62144             : 
   62145             :       //! Storage Modifier Support
   62146             :           int isUnknownStorage() const;
   62147             :           void setUnknownStorage();
   62148             : 
   62149             :           int isExtern() const;
   62150             :           void setExtern();
   62151             : 
   62152             :           int isStatic() const;
   62153             :           void setStatic();
   62154             : 
   62155             :           int isAuto() const;
   62156             :           void setAuto();
   62157             : 
   62158             :           int isUnspecified() const;
   62159             :           void setUnspecified();
   62160             : 
   62161             :        // This is not used (but is present in the EDG AST)
   62162             :           int isTypedef() const;
   62163             :           void setTypedef();
   62164             : 
   62165             :           int isRegister() const;
   62166             :           void setRegister();
   62167             : 
   62168             :           int isAsm() const;
   62169             :           void setAsm();
   62170             : 
   62171             : #ifdef FORTRAN_SUPPORTED
   62172             :        // These remaining access functions are specific to FORTRAN
   62173             :           int isLocal() const;
   62174             :           void setLocal();
   62175             : 
   62176             :           int isCommon() const;
   62177             :           void setCommon();
   62178             : 
   62179             :           int isAssociated() const;
   62180             :           void setAssociated();
   62181             : 
   62182             :           int isIntrinsic() const;
   62183             :           void setIntrinsic();
   62184             : 
   62185             :           int isPointerBased() const;
   62186             :           void setPointerBased();
   62187             : #endif
   62188             : 
   62189             :       //! Access Modifier Support
   62190             :           int isUnknownAccess() const;
   62191             :           void setUnknownAccess();
   62192             : 
   62193             :           int isPrivate() const;
   62194             :           void setPrivate();
   62195             : 
   62196             :           int isProtected() const;
   62197             :           void setProtected();
   62198             : 
   62199             :           int isPublic() const;
   62200             :           void setPublic();
   62201             : 
   62202             :           int isVirtual() const;
   62203             :           void setVirtual();
   62204             : 
   62205             :       //! Get whole bit field fr modifier set
   62206             :           unsigned int bitfield(void);
   62207             : #endif
   62208             : 
   62209             :       //! Performs final initialization of data members (called by constructors)
   62210             :           void post_construction_initialization() override;
   62211             : 
   62212             : 
   62213             : 
   62214             : // End of memberFunctionString
   62215             : // Start of memberFunctionString
   62216             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   62217             : 
   62218             : // *** COMMON CODE SECTION BEGINS HERE ***
   62219             : 
   62220             :     public:
   62221             : 
   62222             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   62223             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   62224             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   62225             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   62226             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   62227             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   62228             : 
   62229             :       /*! \brief returns a string representing the class name */
   62230             :           virtual std::string class_name() const override;
   62231             : 
   62232             :       /*! \brief returns new style SageIII enum values */
   62233             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   62234             : 
   62235             :       /*! \brief static variant value */
   62236             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   62237             :        // static const VariantT static_variant = V_SgModifierType;
   62238             :           enum { static_variant = V_SgModifierType };
   62239             : 
   62240             :        /* the generated cast function */
   62241             :       /*! \brief Casts pointer from base class to derived class */
   62242             :           ROSE_DLL_API friend       SgModifierType* isSgModifierType(       SgNode * s );
   62243             : 
   62244             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   62245             :           ROSE_DLL_API friend const SgModifierType* isSgModifierType( const SgNode * s );
   62246             : 
   62247             :      // ******************************************
   62248             :      // * Memory Pool / New / Delete
   62249             :      // ******************************************
   62250             : 
   62251             :      public:
   62252             :           /// \private
   62253             :           static const unsigned pool_size; //
   62254             :           /// \private
   62255             :           static std::vector<unsigned char *> pools; //
   62256             :           /// \private
   62257             :           static SgModifierType * next_node; // 
   62258             : 
   62259             :           /// \private
   62260             :           static unsigned long initializeStorageClassArray(SgModifierTypeStorageClass *); //
   62261             : 
   62262             :           /// \private
   62263             :           static void clearMemoryPool(); //
   62264             :           static void deleteMemoryPool(); //
   62265             : 
   62266             :           /// \private
   62267             :           static void extendMemoryPoolForFileIO(); //
   62268             : 
   62269             :           /// \private
   62270             :           static SgModifierType * getPointerFromGlobalIndex(unsigned long); //
   62271             :           /// \private
   62272             :           static SgModifierType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   62273             : 
   62274             :           /// \private
   62275             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   62276             :           /// \private
   62277             :           static void resetValidFreepointers(); //
   62278             :           /// \private
   62279             :           static unsigned long getNumberOfLastValidPointer(); //
   62280             : 
   62281             : 
   62282             : #if defined(INLINE_FUNCTIONS)
   62283             :       /*! \brief returns pointer to newly allocated IR node */
   62284             :           inline void *operator new (size_t size);
   62285             : #else
   62286             :       /*! \brief returns pointer to newly allocated IR node */
   62287             :           void *operator new (size_t size);
   62288             : #endif
   62289             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   62290             :           void operator delete (void* pointer, size_t size);
   62291             : 
   62292             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   62293        1906 :           void operator delete (void* pointer)
   62294             :              {
   62295             :             // This is the generated delete operator...
   62296        1906 :                SgModifierType::operator delete (pointer,sizeof(SgModifierType));
   62297             :              }
   62298             : 
   62299             :       /*! \brief Returns the total number of IR nodes of this type */
   62300             :           static size_t numberOfNodes();
   62301             : 
   62302             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   62303             :           static size_t memoryUsage();
   62304             : 
   62305             :       // End of scope which started in IR nodes specific code 
   62306             :       /* */
   62307             : 
   62308             :       /* name Internal Functions
   62309             :           \brief Internal functions ... incomplete-documentation
   62310             : 
   62311             :           These functions have been made public as part of the design, but they are suggested for internal use 
   62312             :           or by particularly knowledgeable users for specialized tools or applications.
   62313             : 
   62314             :           \internal We could not make these private because they are required by user for special purposes. And 
   62315             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   62316             :          
   62317             :        */
   62318             : 
   62319             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   62320             :        // overridden in every class by *generated* implementation
   62321             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   62322             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   62323             :        // MS: 06/28/02 container of names of variables or container indices 
   62324             :        // used used in the traversal to access AST successor nodes
   62325             :        // overridden in every class by *generated* implementation
   62326             :       /*! \brief container of names of variables or container indices used used in the traversal
   62327             :           to access AST successor nodes overridden in every class by *generated* implementation */
   62328             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   62329             : 
   62330             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   62331             :        // than all the vector copies. The implementation for these functions is generated for each class.
   62332             :       /*! \brief return number of children in the traversal successor list */
   62333             :           virtual size_t get_numberOfTraversalSuccessors() override;
   62334             :       /*! \brief index-based access to traversal successors by index number */
   62335             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   62336             :       /*! \brief index-based access to traversal successors by child node */
   62337             :           virtual size_t get_childIndex(SgNode *child) override;
   62338             : 
   62339             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   62340             :        // MS: 08/16/2002 method for generating RTI information
   62341             :       /*! \brief return C++ Runtime-Time-Information */
   62342             :           virtual RTIReturnType roseRTI() override;
   62343             : #endif
   62344             :       /* */
   62345             : 
   62346             : 
   62347             : 
   62348             :       /* name Deprecated Functions
   62349             :           \brief Deprecated functions ... incomplete-documentation
   62350             : 
   62351             :           These functions have been deprecated from use.
   62352             :        */
   62353             :       /* */
   62354             : 
   62355             :       /*! returns a C style string (char*) representing the class name */
   62356             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   62357             : 
   62358             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   62359             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   62360             : #if 0
   62361             :       /*! returns old style Sage II enum values */
   62362             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   62363             :       /*! returns old style Sage II enum values */
   62364             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   62365             : #endif
   62366             :       /* */
   62367             : 
   62368             : 
   62369             : 
   62370             : 
   62371             :      public:
   62372             :       /* name Traversal Support Functions
   62373             :           \brief Traversal support functions ... incomplete-documentation
   62374             : 
   62375             :           These functions have been made public as part of the design, but they are suggested for internal use 
   62376             :           or by particularly knowledgable users for specialized tools or applications.
   62377             :        */
   62378             :       /* */
   62379             : 
   62380             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   62381             :        // (inferior to ROSE traversal mechanism, experimental).
   62382             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   62383             :        */
   62384             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   62385             : 
   62386             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   62387             :       /*! \brief support for the classic visitor pattern done in GoF */
   62388             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   62389             : 
   62390             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   62391             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   62392             :        */
   62393             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   62394             : 
   62395             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   62396             :        */
   62397             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   62398             : 
   62399             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   62400             :        // This traversal helps support internal tools that call static member functions.
   62401             :        // note: this function operates on the memory pools.
   62402             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   62403             :        */
   62404             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   62405             :       /* */
   62406             : 
   62407             : 
   62408             :      public:
   62409             :       /* name Memory Allocation Functions
   62410             :           \brief Memory allocations functions ... incomplete-documentation
   62411             : 
   62412             :           These functions have been made public as part of the design, but they are suggested for internal use 
   62413             :           or by particularly knowledgable users for specialized tools or applications.
   62414             :        */
   62415             :       /* */
   62416             : 
   62417             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   62418             : 
   62419             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   62420             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   62421             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   62422             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   62423             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   62424             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   62425             :           being used with the AST File I/O mechanism.
   62426             :        */
   62427             :           virtual bool isInMemoryPool() override;
   62428             : 
   62429             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   62430             : 
   62431             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   62432             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   62433             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   62434             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   62435             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   62436             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   62437             :           being used with the AST File I/O mechanism.
   62438             :        */
   62439             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   62440             : 
   62441             :       // DQ (4/30/2006): Modified to be a const function.
   62442             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   62443             : 
   62444             :           This functions is part of general support for many possible tools to operate 
   62445             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   62446             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   62447             :           less than the set of pointers used by the AST file I/O. This is part of
   62448             :           work implemented by Andreas, and support tools such as the AST graph generation.
   62449             : 
   62450             :           \warning This function can return unexpected data members and thus the 
   62451             :                    order and the number of elements is unpredicable and subject 
   62452             :                    to change.
   62453             : 
   62454             :           \returns STL vector of pairs of SgNode* and strings
   62455             :        */
   62456             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   62457             : 
   62458             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   62459             : 
   62460             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   62461             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   62462             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   62463             : 
   62464             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   62465             :                    and subject to change.
   62466             :        */
   62467             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   62468             : 
   62469             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   62470             : 
   62471             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   62472             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   62473             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   62474             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   62475             : 
   62476             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   62477             : 
   62478             :           \returns long
   62479             :        */
   62480             :           virtual long getChildIndex( SgNode* childNode ) const override;
   62481             : 
   62482             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   62483             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   62484             :       /* \brief Constructor for use by AST File I/O Mechanism
   62485             : 
   62486             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   62487             :           which obtained via fast binary file I/O from disk.
   62488             :        */
   62489             :        // SgModifierType( SgModifierTypeStorageClass& source );
   62490             : 
   62491             : 
   62492             : 
   62493             : 
   62494             : 
   62495             :  // JH (10/24/2005): methods added to support the ast file IO
   62496             :     private:
   62497             : 
   62498             :       /* name AST Memory Allocation Support Functions
   62499             :           \brief Memory allocations support....
   62500             : 
   62501             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   62502             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   62503             :           and support the AST File I/O Mechanism.
   62504             :        */
   62505             :       /* */
   62506             : 
   62507             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   62508             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   62509             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   62510             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   62511             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   62512             :           a correspinding one in the AST_FILE_IO class!
   62513             :        */
   62514             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   62515             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   62516             :       /* \brief Typedef used for low level memory access.
   62517             :        */
   62518             :        // typedef unsigned char* TestType;
   62519             : 
   62520             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   62521             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   62522             :       /* \brief Typedef used to hold memory addresses as values.
   62523             :        */
   62524             :        // typedef unsigned long  AddressType;
   62525             : 
   62526             : 
   62527             : 
   62528             :        // necessary, to have direct access to the p_freepointer and the private methods !
   62529             :       /*! \brief friend class declaration to support AST File I/O */
   62530             :           friend class AST_FILE_IO;
   62531             : 
   62532             :       /*! \brief friend class declaration to support AST File I/O */
   62533             :           friend class SgModifierTypeStorageClass;
   62534             : 
   62535             :       /*! \brief friend class declaration to support AST File I/O */
   62536             :           friend class AstSpecificDataManagingClass;
   62537             : 
   62538             :       /*! \brief friend class declaration to support AST File I/O */
   62539             :           friend class AstSpecificDataManagingClassStorageClass;
   62540             :     public:
   62541             :       /*! \brief IR node constructor to support AST File I/O */
   62542             :           SgModifierType( const SgModifierTypeStorageClass& source );
   62543             : 
   62544             :  // private: // JJW hack
   62545             :        /*
   62546             :           name AST Memory Allocation Support Variables
   62547             :           Memory allocations support variables 
   62548             : 
   62549             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   62550             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   62551             :           and support the AST File I/O Mechanism.
   62552             :        */
   62553             :       /* */
   62554             : 
   62555             :     public:
   62556             : 
   62557             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   62558             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   62559             :       // virtual SgNode* addRegExpAttribute();
   62560             :       /*! \brief Support for AST matching using regular expression.
   62561             : 
   62562             :           This support is incomplete and the subject of current research to define 
   62563             :           RegEx trees to support inexact matching.
   62564             :        */
   62565             :           SgModifierType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   62566             : 
   62567             : // *** COMMON CODE SECTION ENDS HERE ***
   62568             : 
   62569             : 
   62570             : // End of memberFunctionString
   62571             : // Start of memberFunctionString
   62572             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   62573             : 
   62574             :      // the generated cast function
   62575             :      // friend ROSE_DLL_API SgModifierType* isSgModifierType ( SgNode* s );
   62576             : 
   62577             :           typedef SgType base_node_type;
   62578             : 
   62579             : 
   62580             : // End of memberFunctionString
   62581             : // Start of memberFunctionString
   62582             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   62583             : 
   62584             :        // SgName get_mangled ( SgUnparse_Info & info );
   62585             : 
   62586             :       //! Mangled name support for unparser support
   62587             :        // SgName get_mangled ( SgUnparse_Info & info );
   62588             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   62589             :           virtual SgName get_mangled (void) const override;
   62590             : 
   62591             : 
   62592             : 
   62593             : // End of memberFunctionString
   62594             : 
   62595             :      public: 
   62596             :          SgType* get_base_type() const;
   62597             :          void set_base_type(SgType* base_type);
   62598             : 
   62599             : 
   62600             :      public: 
   62601             :          char* get_frontend_type_reference() const;
   62602             :          void set_frontend_type_reference(char* frontend_type_reference);
   62603             : 
   62604             : 
   62605             :      public: 
   62606             :          virtual ~SgModifierType();
   62607             : 
   62608             : 
   62609             :      public: 
   62610             :          SgModifierType(SgType* base_type = NULL); 
   62611             : 
   62612             :     protected:
   62613             : // Start of memberFunctionString
   62614             : SgType* p_base_type;
   62615             :           
   62616             : // End of memberFunctionString
   62617             : // Start of memberFunctionString
   62618             : SgTypeModifier p_typeModifier;
   62619             :           
   62620             : // End of memberFunctionString
   62621             : // Start of memberFunctionString
   62622             : char* p_frontend_type_reference;
   62623             :           
   62624             : // End of memberFunctionString
   62625             : 
   62626             :     friend struct Rose::Traits::generated::describe_node_t<SgModifierType>;
   62627             :     friend struct Rose::Traits::generated::describe_field_t<SgModifierType, SgType*,&SgModifierType::p_base_type>;
   62628             :     friend struct Rose::Traits::generated::describe_field_t<SgModifierType, SgTypeModifier,&SgModifierType::p_typeModifier>;
   62629             :     friend struct Rose::Traits::generated::describe_field_t<SgModifierType, char*,&SgModifierType::p_frontend_type_reference>;
   62630             : 
   62631             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   62632             : 
   62633             : 
   62634             :    };
   62635             : #endif
   62636             : 
   62637             : // postdeclarations for SgModifierType
   62638             : 
   62639             : /* #line 62640 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   62640             : 
   62641             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   62642             : 
   62643             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   62644             : 
   62645             : 
   62646             : /* #line 62647 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   62647             : 
   62648             : 
   62649             : 
   62650             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   62651             : 
   62652             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   62653             : //      This code is automatically generated for each 
   62654             : //      terminal and non-terminal within the defined 
   62655             : //      grammar.  There is a simple way to change the 
   62656             : //      code to fix bugs etc.  See the ROSE README file
   62657             : //      for directions.
   62658             : 
   62659             : // tps: (02/22/2010): Adding DLL export requirements
   62660             : #include "rosedll.h"
   62661             : 
   62662             : // predeclarations for SgFunctionType
   62663             : 
   62664             : /* #line 62665 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   62665             : 
   62666             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   62667             : 
   62668             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   62669             : 
   62670             : #if 1
   62671             : // Class Definition for SgFunctionType
   62672             : class ROSE_DLL_API SgFunctionType  : public SgType
   62673             :    {
   62674             :      public:
   62675             : 
   62676             : 
   62677             : /* #line 62678 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   62678             : 
   62679             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   62680             : // Start of memberFunctionString
   62681             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   62682             : 
   62683             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   62684             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   62685             :        // own data member and associated access function.
   62686             :        // static SgFunctionType* get_builtin_type();
   62687             : 
   62688             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   62689             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   62690             :        // own data member and associated access function.
   62691             :        // static void set_builtin_type(SgFunctionType* builtin_type);
   62692             : 
   62693             :       //! more sophisticated version for more complex types like SgFunctionType (types whose constructors take parameters)
   62694             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   62695             :        // static SgFunctionType* createType(SgPartialFunctionType* type = NULL);
   62696             :           static SgFunctionType* createType(SgPartialFunctionType* type = NULL, SgExpression* optional_fortran_type_kind = NULL);
   62697             : 
   62698             : 
   62699             : // End of memberFunctionString
   62700             : // Start of memberFunctionString
   62701             : /* #line 747 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   62702             : 
   62703             : 
   62704             :       //! Constructor for building a function type
   62705             :           SgFunctionType(SgPartialFunctionType *);
   62706             : 
   62707             :        // static SgFunctionType* createType(SgPartialFunctionType *);
   62708             : 
   62709             :       //! Performs final initialization of data members (called by constructors)
   62710             :           void post_construction_initialization () override;
   62711             : 
   62712             :       // Get a const list of input types (types of the parameters list) to this function type (from a cost functionType object)
   62713             :       //! This is a const convience access function to the STL container of types in the child IR node (SgFunctionParameterTypeList* p_argument_list).
   62714             :           const SgTypePtrList & get_arguments() const;
   62715             : 
   62716             :       // Get the list of input types (types of the parameters list) to this function type
   62717             :       //! This is a non-const convience access function to the STL container of types in the child IR node (SgFunctionParameterTypeList* p_argument_list).
   62718             :           SgTypePtrList & get_arguments();
   62719             : 
   62720             :        // WAS: void append_argument(const SgTypePtr& what);
   62721             :        // WAS: void insert_argument(const SgTypePtrList::iterator& where, const SgTypePtr & what)
   62722             : 
   62723             :       //! Append new argument to argument type list
   62724             :           void append_argument( SgType* what);
   62725             : 
   62726             :       //! Insert new argument to argument type list
   62727             :           void insert_argument(const SgTypePtrList::iterator& where, SgType* what);
   62728             : 
   62729             :       //! get the mangled name (this version is used in unparsing)
   62730             :       /*! This version can be tailored using the input SgUnparse_Info parameter.
   62731             :        */
   62732             :        // DQ (2/7/2006): Removed as a test
   62733             :        // virtual SgName get_mangled_name ( SgUnparse_Info & info );
   62734             : 
   62735             :       //! get the mangled name
   62736             :       //! get the mangled name \deprecated by RV (2/2/2006)
   62737             :           virtual SgName get_mangled_type ();
   62738             : 
   62739             :       //! I forget why this is here.
   62740             :       //  SgFunctionType* mkAnotherType(SgType *);
   62741             : 
   62742             :       //! I forget why this is here.
   62743             :       //  void sym_print(std::ostream& os);
   62744             : 
   62745             :           SgSymbol* get_symbol_from_symbol_table() const;
   62746             : 
   62747             :        // TV (04/18/11): For support of shared function type.
   62748             :           static SgName get_mangled(SgType* return_type, SgFunctionParameterTypeList * typeList);
   62749             : 
   62750             : 
   62751             : 
   62752             : // End of memberFunctionString
   62753             : // Start of memberFunctionString
   62754             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   62755             : 
   62756             : // *** COMMON CODE SECTION BEGINS HERE ***
   62757             : 
   62758             :     public:
   62759             : 
   62760             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   62761             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   62762             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   62763             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   62764             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   62765             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   62766             : 
   62767             :       /*! \brief returns a string representing the class name */
   62768             :           virtual std::string class_name() const override;
   62769             : 
   62770             :       /*! \brief returns new style SageIII enum values */
   62771             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   62772             : 
   62773             :       /*! \brief static variant value */
   62774             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   62775             :        // static const VariantT static_variant = V_SgFunctionType;
   62776             :           enum { static_variant = V_SgFunctionType };
   62777             : 
   62778             :        /* the generated cast function */
   62779             :       /*! \brief Casts pointer from base class to derived class */
   62780             :           ROSE_DLL_API friend       SgFunctionType* isSgFunctionType(       SgNode * s );
   62781             : 
   62782             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   62783             :           ROSE_DLL_API friend const SgFunctionType* isSgFunctionType( const SgNode * s );
   62784             : 
   62785             :      // ******************************************
   62786             :      // * Memory Pool / New / Delete
   62787             :      // ******************************************
   62788             : 
   62789             :      public:
   62790             :           /// \private
   62791             :           static const unsigned pool_size; //
   62792             :           /// \private
   62793             :           static std::vector<unsigned char *> pools; //
   62794             :           /// \private
   62795             :           static SgFunctionType * next_node; // 
   62796             : 
   62797             :           /// \private
   62798             :           static unsigned long initializeStorageClassArray(SgFunctionTypeStorageClass *); //
   62799             : 
   62800             :           /// \private
   62801             :           static void clearMemoryPool(); //
   62802             :           static void deleteMemoryPool(); //
   62803             : 
   62804             :           /// \private
   62805             :           static void extendMemoryPoolForFileIO(); //
   62806             : 
   62807             :           /// \private
   62808             :           static SgFunctionType * getPointerFromGlobalIndex(unsigned long); //
   62809             :           /// \private
   62810             :           static SgFunctionType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   62811             : 
   62812             :           /// \private
   62813             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   62814             :           /// \private
   62815             :           static void resetValidFreepointers(); //
   62816             :           /// \private
   62817             :           static unsigned long getNumberOfLastValidPointer(); //
   62818             : 
   62819             : 
   62820             : #if defined(INLINE_FUNCTIONS)
   62821             :       /*! \brief returns pointer to newly allocated IR node */
   62822             :           inline void *operator new (size_t size);
   62823             : #else
   62824             :       /*! \brief returns pointer to newly allocated IR node */
   62825             :           void *operator new (size_t size);
   62826             : #endif
   62827             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   62828             :           void operator delete (void* pointer, size_t size);
   62829             : 
   62830             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   62831        6299 :           void operator delete (void* pointer)
   62832             :              {
   62833             :             // This is the generated delete operator...
   62834        6299 :                SgFunctionType::operator delete (pointer,sizeof(SgFunctionType));
   62835             :              }
   62836             : 
   62837             :       /*! \brief Returns the total number of IR nodes of this type */
   62838             :           static size_t numberOfNodes();
   62839             : 
   62840             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   62841             :           static size_t memoryUsage();
   62842             : 
   62843             :       // End of scope which started in IR nodes specific code 
   62844             :       /* */
   62845             : 
   62846             :       /* name Internal Functions
   62847             :           \brief Internal functions ... incomplete-documentation
   62848             : 
   62849             :           These functions have been made public as part of the design, but they are suggested for internal use 
   62850             :           or by particularly knowledgeable users for specialized tools or applications.
   62851             : 
   62852             :           \internal We could not make these private because they are required by user for special purposes. And 
   62853             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   62854             :          
   62855             :        */
   62856             : 
   62857             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   62858             :        // overridden in every class by *generated* implementation
   62859             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   62860             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   62861             :        // MS: 06/28/02 container of names of variables or container indices 
   62862             :        // used used in the traversal to access AST successor nodes
   62863             :        // overridden in every class by *generated* implementation
   62864             :       /*! \brief container of names of variables or container indices used used in the traversal
   62865             :           to access AST successor nodes overridden in every class by *generated* implementation */
   62866             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   62867             : 
   62868             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   62869             :        // than all the vector copies. The implementation for these functions is generated for each class.
   62870             :       /*! \brief return number of children in the traversal successor list */
   62871             :           virtual size_t get_numberOfTraversalSuccessors() override;
   62872             :       /*! \brief index-based access to traversal successors by index number */
   62873             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   62874             :       /*! \brief index-based access to traversal successors by child node */
   62875             :           virtual size_t get_childIndex(SgNode *child) override;
   62876             : 
   62877             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   62878             :        // MS: 08/16/2002 method for generating RTI information
   62879             :       /*! \brief return C++ Runtime-Time-Information */
   62880             :           virtual RTIReturnType roseRTI() override;
   62881             : #endif
   62882             :       /* */
   62883             : 
   62884             : 
   62885             : 
   62886             :       /* name Deprecated Functions
   62887             :           \brief Deprecated functions ... incomplete-documentation
   62888             : 
   62889             :           These functions have been deprecated from use.
   62890             :        */
   62891             :       /* */
   62892             : 
   62893             :       /*! returns a C style string (char*) representing the class name */
   62894             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   62895             : 
   62896             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   62897             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   62898             : #if 0
   62899             :       /*! returns old style Sage II enum values */
   62900             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   62901             :       /*! returns old style Sage II enum values */
   62902             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   62903             : #endif
   62904             :       /* */
   62905             : 
   62906             : 
   62907             : 
   62908             : 
   62909             :      public:
   62910             :       /* name Traversal Support Functions
   62911             :           \brief Traversal support functions ... incomplete-documentation
   62912             : 
   62913             :           These functions have been made public as part of the design, but they are suggested for internal use 
   62914             :           or by particularly knowledgable users for specialized tools or applications.
   62915             :        */
   62916             :       /* */
   62917             : 
   62918             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   62919             :        // (inferior to ROSE traversal mechanism, experimental).
   62920             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   62921             :        */
   62922             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   62923             : 
   62924             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   62925             :       /*! \brief support for the classic visitor pattern done in GoF */
   62926             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   62927             : 
   62928             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   62929             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   62930             :        */
   62931             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   62932             : 
   62933             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   62934             :        */
   62935             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   62936             : 
   62937             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   62938             :        // This traversal helps support internal tools that call static member functions.
   62939             :        // note: this function operates on the memory pools.
   62940             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   62941             :        */
   62942             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   62943             :       /* */
   62944             : 
   62945             : 
   62946             :      public:
   62947             :       /* name Memory Allocation Functions
   62948             :           \brief Memory allocations functions ... incomplete-documentation
   62949             : 
   62950             :           These functions have been made public as part of the design, but they are suggested for internal use 
   62951             :           or by particularly knowledgable users for specialized tools or applications.
   62952             :        */
   62953             :       /* */
   62954             : 
   62955             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   62956             : 
   62957             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   62958             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   62959             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   62960             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   62961             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   62962             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   62963             :           being used with the AST File I/O mechanism.
   62964             :        */
   62965             :           virtual bool isInMemoryPool() override;
   62966             : 
   62967             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   62968             : 
   62969             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   62970             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   62971             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   62972             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   62973             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   62974             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   62975             :           being used with the AST File I/O mechanism.
   62976             :        */
   62977             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   62978             : 
   62979             :       // DQ (4/30/2006): Modified to be a const function.
   62980             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   62981             : 
   62982             :           This functions is part of general support for many possible tools to operate 
   62983             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   62984             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   62985             :           less than the set of pointers used by the AST file I/O. This is part of
   62986             :           work implemented by Andreas, and support tools such as the AST graph generation.
   62987             : 
   62988             :           \warning This function can return unexpected data members and thus the 
   62989             :                    order and the number of elements is unpredicable and subject 
   62990             :                    to change.
   62991             : 
   62992             :           \returns STL vector of pairs of SgNode* and strings
   62993             :        */
   62994             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   62995             : 
   62996             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   62997             : 
   62998             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   62999             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   63000             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   63001             : 
   63002             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   63003             :                    and subject to change.
   63004             :        */
   63005             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   63006             : 
   63007             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   63008             : 
   63009             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   63010             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   63011             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   63012             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   63013             : 
   63014             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   63015             : 
   63016             :           \returns long
   63017             :        */
   63018             :           virtual long getChildIndex( SgNode* childNode ) const override;
   63019             : 
   63020             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   63021             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   63022             :       /* \brief Constructor for use by AST File I/O Mechanism
   63023             : 
   63024             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   63025             :           which obtained via fast binary file I/O from disk.
   63026             :        */
   63027             :        // SgFunctionType( SgFunctionTypeStorageClass& source );
   63028             : 
   63029             : 
   63030             : 
   63031             : 
   63032             : 
   63033             :  // JH (10/24/2005): methods added to support the ast file IO
   63034             :     private:
   63035             : 
   63036             :       /* name AST Memory Allocation Support Functions
   63037             :           \brief Memory allocations support....
   63038             : 
   63039             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   63040             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   63041             :           and support the AST File I/O Mechanism.
   63042             :        */
   63043             :       /* */
   63044             : 
   63045             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   63046             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   63047             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   63048             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   63049             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   63050             :           a correspinding one in the AST_FILE_IO class!
   63051             :        */
   63052             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   63053             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   63054             :       /* \brief Typedef used for low level memory access.
   63055             :        */
   63056             :        // typedef unsigned char* TestType;
   63057             : 
   63058             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   63059             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   63060             :       /* \brief Typedef used to hold memory addresses as values.
   63061             :        */
   63062             :        // typedef unsigned long  AddressType;
   63063             : 
   63064             : 
   63065             : 
   63066             :        // necessary, to have direct access to the p_freepointer and the private methods !
   63067             :       /*! \brief friend class declaration to support AST File I/O */
   63068             :           friend class AST_FILE_IO;
   63069             : 
   63070             :       /*! \brief friend class declaration to support AST File I/O */
   63071             :           friend class SgFunctionTypeStorageClass;
   63072             : 
   63073             :       /*! \brief friend class declaration to support AST File I/O */
   63074             :           friend class AstSpecificDataManagingClass;
   63075             : 
   63076             :       /*! \brief friend class declaration to support AST File I/O */
   63077             :           friend class AstSpecificDataManagingClassStorageClass;
   63078             :     public:
   63079             :       /*! \brief IR node constructor to support AST File I/O */
   63080             :           SgFunctionType( const SgFunctionTypeStorageClass& source );
   63081             : 
   63082             :  // private: // JJW hack
   63083             :        /*
   63084             :           name AST Memory Allocation Support Variables
   63085             :           Memory allocations support variables 
   63086             : 
   63087             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   63088             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   63089             :           and support the AST File I/O Mechanism.
   63090             :        */
   63091             :       /* */
   63092             : 
   63093             :     public:
   63094             : 
   63095             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   63096             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   63097             :       // virtual SgNode* addRegExpAttribute();
   63098             :       /*! \brief Support for AST matching using regular expression.
   63099             : 
   63100             :           This support is incomplete and the subject of current research to define 
   63101             :           RegEx trees to support inexact matching.
   63102             :        */
   63103             :           SgFunctionType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   63104             : 
   63105             : // *** COMMON CODE SECTION ENDS HERE ***
   63106             : 
   63107             : 
   63108             : // End of memberFunctionString
   63109             : // Start of memberFunctionString
   63110             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   63111             : 
   63112             :      // the generated cast function
   63113             :      // friend ROSE_DLL_API SgFunctionType* isSgFunctionType ( SgNode* s );
   63114             : 
   63115             :           typedef SgType base_node_type;
   63116             : 
   63117             : 
   63118             : // End of memberFunctionString
   63119             : // Start of memberFunctionString
   63120             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   63121             : 
   63122             :        // SgName get_mangled ( SgUnparse_Info & info );
   63123             : 
   63124             :       //! Mangled name support for unparser support
   63125             :        // SgName get_mangled ( SgUnparse_Info & info );
   63126             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   63127             :           virtual SgName get_mangled (void) const override;
   63128             : 
   63129             : 
   63130             : 
   63131             : // End of memberFunctionString
   63132             : 
   63133             :      public: 
   63134             :          SgType* get_return_type() const;
   63135             :          void set_return_type(SgType* return_type);
   63136             : 
   63137             :      public: 
   63138             :          bool get_has_ellipses() const;
   63139             :          void set_has_ellipses(bool has_ellipses);
   63140             : 
   63141             :      public: 
   63142             :          SgType* get_orig_return_type() const;
   63143             :          void set_orig_return_type(SgType* orig_return_type);
   63144             : 
   63145             :      public: 
   63146             :          SgFunctionParameterTypeList* get_argument_list() const;
   63147             :          void set_argument_list(SgFunctionParameterTypeList* argument_list);
   63148             : 
   63149             : 
   63150             :      public: 
   63151             :          virtual ~SgFunctionType();
   63152             : 
   63153             : 
   63154             :      public: 
   63155             :          SgFunctionType(SgType* return_type = NULL, bool has_ellipses = true); 
   63156             : 
   63157             :     protected:
   63158             : // Start of memberFunctionString
   63159             : SgType* p_return_type;
   63160             :           
   63161             : // End of memberFunctionString
   63162             : // Start of memberFunctionString
   63163             : bool p_has_ellipses;
   63164             :           
   63165             : // End of memberFunctionString
   63166             : // Start of memberFunctionString
   63167             : SgType* p_orig_return_type;
   63168             :           
   63169             : // End of memberFunctionString
   63170             : // Start of memberFunctionString
   63171             : SgFunctionParameterTypeList* p_argument_list;
   63172             :           
   63173             : // End of memberFunctionString
   63174             : 
   63175             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionType>;
   63176             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionType, SgType*,&SgFunctionType::p_return_type>;
   63177             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionType, bool,&SgFunctionType::p_has_ellipses>;
   63178             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionType, SgType*,&SgFunctionType::p_orig_return_type>;
   63179             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionType, SgFunctionParameterTypeList*,&SgFunctionType::p_argument_list>;
   63180             : 
   63181             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63182             : 
   63183             : 
   63184             :    };
   63185             : #endif
   63186             : 
   63187             : // postdeclarations for SgFunctionType
   63188             : 
   63189             : /* #line 63190 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63190             : 
   63191             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   63192             : 
   63193             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63194             : 
   63195             : 
   63196             : /* #line 63197 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63197             : 
   63198             : 
   63199             : 
   63200             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63201             : 
   63202             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   63203             : //      This code is automatically generated for each 
   63204             : //      terminal and non-terminal within the defined 
   63205             : //      grammar.  There is a simple way to change the 
   63206             : //      code to fix bugs etc.  See the ROSE README file
   63207             : //      for directions.
   63208             : 
   63209             : // tps: (02/22/2010): Adding DLL export requirements
   63210             : #include "rosedll.h"
   63211             : 
   63212             : // predeclarations for SgMemberFunctionType
   63213             : 
   63214             : /* #line 63215 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63215             : 
   63216             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   63217             : 
   63218             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63219             : 
   63220             : #if 1
   63221             : // Class Definition for SgMemberFunctionType
   63222             : class ROSE_DLL_API SgMemberFunctionType  : public SgFunctionType
   63223             :    {
   63224             :      public:
   63225             : 
   63226             : 
   63227             : /* #line 63228 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63228             : 
   63229             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   63230             : // Start of memberFunctionString
   63231             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   63232             : 
   63233             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   63234             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   63235             :        // own data member and associated access function.
   63236             :        // static SgMemberFunctionType* get_builtin_type();
   63237             : 
   63238             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   63239             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   63240             :        // own data member and associated access function.
   63241             :        // static void set_builtin_type(SgMemberFunctionType* builtin_type);
   63242             : 
   63243             :       //! more sophisticated version for more complex types like SgMemberFunctionType (types whose constructors take parameters)
   63244             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   63245             :        // static SgMemberFunctionType* createType(SgPartialFunctionType* type = NULL);
   63246             :           static SgMemberFunctionType* createType(SgPartialFunctionType* type = NULL, SgExpression* optional_fortran_type_kind = NULL);
   63247             : 
   63248             : 
   63249             : // End of memberFunctionString
   63250             : // Start of memberFunctionString
   63251             : /* #line 797 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   63252             : 
   63253             : 
   63254             :       //! Constructor
   63255             :           SgMemberFunctionType(SgPartialFunctionType *);
   63256             : 
   63257             :       //! Performs final initialization of data members (called by constructors)
   63258             :           void post_construction_initialization() override;
   63259             : 
   63260             : #if 1
   63261             :       //! Enum for const and volatile function modifiers
   63262             :           enum mfunc_specifier_enum
   63263             :              {
   63264             :                e_const     =     0x00000001,
   63265             :                e_volatile  =     0x00000002,
   63266             :                e_restrict  =     0x00000004,
   63267             : 
   63268             :             // DQ (1/9/2020): Added reference qualifiers (C++11 feature).
   63269             :                e_ref_qualifier_lvalue = 0x00000008,
   63270             :                e_ref_qualifier_rvalue = 0x00000010
   63271             :              };
   63272             : 
   63273             :        // static SgMemberFunctionType* createType(SgPartialFunctionType *);
   63274             : 
   63275             : #if 0
   63276             :       //! const access/set/unset member functions for member function type
   63277             :           int isUnknownFunc();
   63278             :           void setUnknownFunc();
   63279             : 
   63280             :       //! const access/set/unset member functions for member function type
   63281             :           int isDefaultFunc();
   63282             :           void setDefaultFunc();
   63283             : #endif
   63284             :       //! const access/set/unset member functions for member function type
   63285             :           bool isConstFunc() const; // RV (2/1/2006): Made 'const' member
   63286             :           void setConstFunc();
   63287             :           void unsetConstFunc();
   63288             : 
   63289             :       //! volatile access/set/unset member functions for member function type
   63290             :           bool isVolatileFunc() const; // RV (2/1/2006): Made 'const' member
   63291             :           void setVolatileFunc();
   63292             :           void unsetVolatileFunc();
   63293             : #if 1
   63294             :        // DQ (3/8/2012): Enabled the use of rescrict recorded in the function type.
   63295             :       //! restrict access/set/unset member functions for member function type
   63296             :           bool isRestrictFunc() const;
   63297             :           void setRestrictFunc();
   63298             :           void unsetRestrictFunc();
   63299             : #endif
   63300             : 
   63301             :        // DQ (1/9/2020): Enabled the use of reference qualification recorded in the function type.
   63302             :       //! L-value reference access/set/unset member functions and member function type
   63303             :           bool isLvalueReferenceFunc() const;
   63304             :           void setLvalueReferenceFunc();
   63305             :           void unsetLvalueReferenceFunc();
   63306             : 
   63307             :       //! R-value reference access/set/unset member functions and member function type
   63308             :           bool isRvalueReferenceFunc() const;
   63309             :           void setRvalueReferenceFunc();
   63310             :           void unsetRvalueReferenceFunc();
   63311             : #endif
   63312             : 
   63313             :        // void set_mfunc_specifier(unsigned long i);
   63314             :        // SgName get_mangled(SgUnparse_Info &);
   63315             : 
   63316             :       //! Mangled name support for unparser
   63317             :       //  SgName get_mangled_name(SgUnparse_Info&);
   63318             : 
   63319             :       //! Mangled name support
   63320             :        // SgName get_mangled_type();
   63321             :        // RV (2/1/2006): Changed signature, and removed 'get_mangled_type()'.
   63322             :           virtual SgName get_mangled_name (void) const;
   63323             : 
   63324             :        // DQ (12/6/2012): Adding member function specifier data (since this will be a part of the generated mangled name).
   63325             :        // DQ (12/3/2011): Added better support for member function name mangling (symetric with SgFunctionType).
   63326             :        // static SgName get_mangled(SgType* ret_type, SgFunctionParameterTypeList* typeList, SgClassType* classType );
   63327             :           static SgName get_mangled(SgType* ret_type, SgFunctionParameterTypeList* typeList, SgType* classType, unsigned int mfunc_specifier );
   63328             : 
   63329             :       //! I forget why this is here.
   63330             :           SgMemberFunctionType * mkAnotherType(SgType *);
   63331             : 
   63332             :       //! \deprecated The struct_name property has been replaced by the class_type property, an SgType
   63333             :           SgClassDefinition* get_struct_name() const;
   63334             : 
   63335             : 
   63336             : 
   63337             : // End of memberFunctionString
   63338             : // Start of memberFunctionString
   63339             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   63340             : 
   63341             : // *** COMMON CODE SECTION BEGINS HERE ***
   63342             : 
   63343             :     public:
   63344             : 
   63345             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   63346             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   63347             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   63348             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   63349             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   63350             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   63351             : 
   63352             :       /*! \brief returns a string representing the class name */
   63353             :           virtual std::string class_name() const override;
   63354             : 
   63355             :       /*! \brief returns new style SageIII enum values */
   63356             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   63357             : 
   63358             :       /*! \brief static variant value */
   63359             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   63360             :        // static const VariantT static_variant = V_SgMemberFunctionType;
   63361             :           enum { static_variant = V_SgMemberFunctionType };
   63362             : 
   63363             :        /* the generated cast function */
   63364             :       /*! \brief Casts pointer from base class to derived class */
   63365             :           ROSE_DLL_API friend       SgMemberFunctionType* isSgMemberFunctionType(       SgNode * s );
   63366             : 
   63367             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   63368             :           ROSE_DLL_API friend const SgMemberFunctionType* isSgMemberFunctionType( const SgNode * s );
   63369             : 
   63370             :      // ******************************************
   63371             :      // * Memory Pool / New / Delete
   63372             :      // ******************************************
   63373             : 
   63374             :      public:
   63375             :           /// \private
   63376             :           static const unsigned pool_size; //
   63377             :           /// \private
   63378             :           static std::vector<unsigned char *> pools; //
   63379             :           /// \private
   63380             :           static SgMemberFunctionType * next_node; // 
   63381             : 
   63382             :           /// \private
   63383             :           static unsigned long initializeStorageClassArray(SgMemberFunctionTypeStorageClass *); //
   63384             : 
   63385             :           /// \private
   63386             :           static void clearMemoryPool(); //
   63387             :           static void deleteMemoryPool(); //
   63388             : 
   63389             :           /// \private
   63390             :           static void extendMemoryPoolForFileIO(); //
   63391             : 
   63392             :           /// \private
   63393             :           static SgMemberFunctionType * getPointerFromGlobalIndex(unsigned long); //
   63394             :           /// \private
   63395             :           static SgMemberFunctionType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   63396             : 
   63397             :           /// \private
   63398             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   63399             :           /// \private
   63400             :           static void resetValidFreepointers(); //
   63401             :           /// \private
   63402             :           static unsigned long getNumberOfLastValidPointer(); //
   63403             : 
   63404             : 
   63405             : #if defined(INLINE_FUNCTIONS)
   63406             :       /*! \brief returns pointer to newly allocated IR node */
   63407             :           inline void *operator new (size_t size);
   63408             : #else
   63409             :       /*! \brief returns pointer to newly allocated IR node */
   63410             :           void *operator new (size_t size);
   63411             : #endif
   63412             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   63413             :           void operator delete (void* pointer, size_t size);
   63414             : 
   63415             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   63416        4334 :           void operator delete (void* pointer)
   63417             :              {
   63418             :             // This is the generated delete operator...
   63419        4334 :                SgMemberFunctionType::operator delete (pointer,sizeof(SgMemberFunctionType));
   63420             :              }
   63421             : 
   63422             :       /*! \brief Returns the total number of IR nodes of this type */
   63423             :           static size_t numberOfNodes();
   63424             : 
   63425             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   63426             :           static size_t memoryUsage();
   63427             : 
   63428             :       // End of scope which started in IR nodes specific code 
   63429             :       /* */
   63430             : 
   63431             :       /* name Internal Functions
   63432             :           \brief Internal functions ... incomplete-documentation
   63433             : 
   63434             :           These functions have been made public as part of the design, but they are suggested for internal use 
   63435             :           or by particularly knowledgeable users for specialized tools or applications.
   63436             : 
   63437             :           \internal We could not make these private because they are required by user for special purposes. And 
   63438             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   63439             :          
   63440             :        */
   63441             : 
   63442             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   63443             :        // overridden in every class by *generated* implementation
   63444             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   63445             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   63446             :        // MS: 06/28/02 container of names of variables or container indices 
   63447             :        // used used in the traversal to access AST successor nodes
   63448             :        // overridden in every class by *generated* implementation
   63449             :       /*! \brief container of names of variables or container indices used used in the traversal
   63450             :           to access AST successor nodes overridden in every class by *generated* implementation */
   63451             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   63452             : 
   63453             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   63454             :        // than all the vector copies. The implementation for these functions is generated for each class.
   63455             :       /*! \brief return number of children in the traversal successor list */
   63456             :           virtual size_t get_numberOfTraversalSuccessors() override;
   63457             :       /*! \brief index-based access to traversal successors by index number */
   63458             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   63459             :       /*! \brief index-based access to traversal successors by child node */
   63460             :           virtual size_t get_childIndex(SgNode *child) override;
   63461             : 
   63462             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   63463             :        // MS: 08/16/2002 method for generating RTI information
   63464             :       /*! \brief return C++ Runtime-Time-Information */
   63465             :           virtual RTIReturnType roseRTI() override;
   63466             : #endif
   63467             :       /* */
   63468             : 
   63469             : 
   63470             : 
   63471             :       /* name Deprecated Functions
   63472             :           \brief Deprecated functions ... incomplete-documentation
   63473             : 
   63474             :           These functions have been deprecated from use.
   63475             :        */
   63476             :       /* */
   63477             : 
   63478             :       /*! returns a C style string (char*) representing the class name */
   63479             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   63480             : 
   63481             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   63482             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   63483             : #if 0
   63484             :       /*! returns old style Sage II enum values */
   63485             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   63486             :       /*! returns old style Sage II enum values */
   63487             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   63488             : #endif
   63489             :       /* */
   63490             : 
   63491             : 
   63492             : 
   63493             : 
   63494             :      public:
   63495             :       /* name Traversal Support Functions
   63496             :           \brief Traversal support functions ... incomplete-documentation
   63497             : 
   63498             :           These functions have been made public as part of the design, but they are suggested for internal use 
   63499             :           or by particularly knowledgable users for specialized tools or applications.
   63500             :        */
   63501             :       /* */
   63502             : 
   63503             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   63504             :        // (inferior to ROSE traversal mechanism, experimental).
   63505             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   63506             :        */
   63507             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   63508             : 
   63509             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   63510             :       /*! \brief support for the classic visitor pattern done in GoF */
   63511             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   63512             : 
   63513             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   63514             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   63515             :        */
   63516             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   63517             : 
   63518             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   63519             :        */
   63520             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   63521             : 
   63522             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   63523             :        // This traversal helps support internal tools that call static member functions.
   63524             :        // note: this function operates on the memory pools.
   63525             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   63526             :        */
   63527             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   63528             :       /* */
   63529             : 
   63530             : 
   63531             :      public:
   63532             :       /* name Memory Allocation Functions
   63533             :           \brief Memory allocations functions ... incomplete-documentation
   63534             : 
   63535             :           These functions have been made public as part of the design, but they are suggested for internal use 
   63536             :           or by particularly knowledgable users for specialized tools or applications.
   63537             :        */
   63538             :       /* */
   63539             : 
   63540             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   63541             : 
   63542             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   63543             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   63544             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   63545             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   63546             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   63547             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   63548             :           being used with the AST File I/O mechanism.
   63549             :        */
   63550             :           virtual bool isInMemoryPool() override;
   63551             : 
   63552             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   63553             : 
   63554             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   63555             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   63556             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   63557             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   63558             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   63559             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   63560             :           being used with the AST File I/O mechanism.
   63561             :        */
   63562             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   63563             : 
   63564             :       // DQ (4/30/2006): Modified to be a const function.
   63565             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   63566             : 
   63567             :           This functions is part of general support for many possible tools to operate 
   63568             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   63569             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   63570             :           less than the set of pointers used by the AST file I/O. This is part of
   63571             :           work implemented by Andreas, and support tools such as the AST graph generation.
   63572             : 
   63573             :           \warning This function can return unexpected data members and thus the 
   63574             :                    order and the number of elements is unpredicable and subject 
   63575             :                    to change.
   63576             : 
   63577             :           \returns STL vector of pairs of SgNode* and strings
   63578             :        */
   63579             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   63580             : 
   63581             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   63582             : 
   63583             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   63584             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   63585             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   63586             : 
   63587             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   63588             :                    and subject to change.
   63589             :        */
   63590             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   63591             : 
   63592             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   63593             : 
   63594             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   63595             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   63596             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   63597             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   63598             : 
   63599             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   63600             : 
   63601             :           \returns long
   63602             :        */
   63603             :           virtual long getChildIndex( SgNode* childNode ) const override;
   63604             : 
   63605             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   63606             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   63607             :       /* \brief Constructor for use by AST File I/O Mechanism
   63608             : 
   63609             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   63610             :           which obtained via fast binary file I/O from disk.
   63611             :        */
   63612             :        // SgMemberFunctionType( SgMemberFunctionTypeStorageClass& source );
   63613             : 
   63614             : 
   63615             : 
   63616             : 
   63617             : 
   63618             :  // JH (10/24/2005): methods added to support the ast file IO
   63619             :     private:
   63620             : 
   63621             :       /* name AST Memory Allocation Support Functions
   63622             :           \brief Memory allocations support....
   63623             : 
   63624             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   63625             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   63626             :           and support the AST File I/O Mechanism.
   63627             :        */
   63628             :       /* */
   63629             : 
   63630             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   63631             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   63632             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   63633             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   63634             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   63635             :           a correspinding one in the AST_FILE_IO class!
   63636             :        */
   63637             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   63638             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   63639             :       /* \brief Typedef used for low level memory access.
   63640             :        */
   63641             :        // typedef unsigned char* TestType;
   63642             : 
   63643             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   63644             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   63645             :       /* \brief Typedef used to hold memory addresses as values.
   63646             :        */
   63647             :        // typedef unsigned long  AddressType;
   63648             : 
   63649             : 
   63650             : 
   63651             :        // necessary, to have direct access to the p_freepointer and the private methods !
   63652             :       /*! \brief friend class declaration to support AST File I/O */
   63653             :           friend class AST_FILE_IO;
   63654             : 
   63655             :       /*! \brief friend class declaration to support AST File I/O */
   63656             :           friend class SgMemberFunctionTypeStorageClass;
   63657             : 
   63658             :       /*! \brief friend class declaration to support AST File I/O */
   63659             :           friend class AstSpecificDataManagingClass;
   63660             : 
   63661             :       /*! \brief friend class declaration to support AST File I/O */
   63662             :           friend class AstSpecificDataManagingClassStorageClass;
   63663             :     public:
   63664             :       /*! \brief IR node constructor to support AST File I/O */
   63665             :           SgMemberFunctionType( const SgMemberFunctionTypeStorageClass& source );
   63666             : 
   63667             :  // private: // JJW hack
   63668             :        /*
   63669             :           name AST Memory Allocation Support Variables
   63670             :           Memory allocations support variables 
   63671             : 
   63672             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   63673             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   63674             :           and support the AST File I/O Mechanism.
   63675             :        */
   63676             :       /* */
   63677             : 
   63678             :     public:
   63679             : 
   63680             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   63681             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   63682             :       // virtual SgNode* addRegExpAttribute();
   63683             :       /*! \brief Support for AST matching using regular expression.
   63684             : 
   63685             :           This support is incomplete and the subject of current research to define 
   63686             :           RegEx trees to support inexact matching.
   63687             :        */
   63688             :           SgMemberFunctionType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   63689             : 
   63690             : // *** COMMON CODE SECTION ENDS HERE ***
   63691             : 
   63692             : 
   63693             : // End of memberFunctionString
   63694             : // Start of memberFunctionString
   63695             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   63696             : 
   63697             :      // the generated cast function
   63698             :      // friend ROSE_DLL_API SgMemberFunctionType* isSgMemberFunctionType ( SgNode* s );
   63699             : 
   63700             :           typedef SgFunctionType base_node_type;
   63701             : 
   63702             : 
   63703             : // End of memberFunctionString
   63704             : // Start of memberFunctionString
   63705             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   63706             : 
   63707             :        // SgName get_mangled ( SgUnparse_Info & info );
   63708             : 
   63709             :       //! Mangled name support for unparser support
   63710             :        // SgName get_mangled ( SgUnparse_Info & info );
   63711             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   63712             :           virtual SgName get_mangled (void) const override;
   63713             : 
   63714             : 
   63715             : 
   63716             : // End of memberFunctionString
   63717             : 
   63718             :      public: 
   63719             :          SgType* get_class_type() const;
   63720             :          void set_class_type(SgType* class_type);
   63721             : 
   63722             :      public: 
   63723             :          unsigned int get_mfunc_specifier() const;
   63724             :          void set_mfunc_specifier(unsigned int mfunc_specifier);
   63725             : 
   63726             :      public: 
   63727             :          unsigned int get_ref_qualifiers() const;
   63728             :          void set_ref_qualifiers(unsigned int ref_qualifiers);
   63729             : 
   63730             : 
   63731             :      public: 
   63732             :          virtual ~SgMemberFunctionType();
   63733             : 
   63734             : 
   63735             :      public: 
   63736             :          SgMemberFunctionType(SgType* return_type = NULL, bool has_ellipses = true, SgType* class_type = NULL, unsigned int mfunc_specifier = 0, unsigned int ref_qualifiers = 0); 
   63737             : 
   63738             :     protected:
   63739             : // Start of memberFunctionString
   63740             : SgType* p_class_type;
   63741             :           
   63742             : // End of memberFunctionString
   63743             : // Start of memberFunctionString
   63744             : unsigned int p_mfunc_specifier;
   63745             :           
   63746             : // End of memberFunctionString
   63747             : // Start of memberFunctionString
   63748             : unsigned int p_ref_qualifiers;
   63749             :           
   63750             : // End of memberFunctionString
   63751             : 
   63752             :     friend struct Rose::Traits::generated::describe_node_t<SgMemberFunctionType>;
   63753             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionType, SgType*,&SgMemberFunctionType::p_class_type>;
   63754             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionType, unsigned int,&SgMemberFunctionType::p_mfunc_specifier>;
   63755             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionType, unsigned int,&SgMemberFunctionType::p_ref_qualifiers>;
   63756             : 
   63757             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63758             : 
   63759             : 
   63760             :    };
   63761             : #endif
   63762             : 
   63763             : // postdeclarations for SgMemberFunctionType
   63764             : 
   63765             : /* #line 63766 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63766             : 
   63767             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   63768             : 
   63769             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63770             : 
   63771             : 
   63772             : /* #line 63773 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63773             : 
   63774             : 
   63775             : 
   63776             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63777             : 
   63778             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   63779             : //      This code is automatically generated for each 
   63780             : //      terminal and non-terminal within the defined 
   63781             : //      grammar.  There is a simple way to change the 
   63782             : //      code to fix bugs etc.  See the ROSE README file
   63783             : //      for directions.
   63784             : 
   63785             : // tps: (02/22/2010): Adding DLL export requirements
   63786             : #include "rosedll.h"
   63787             : 
   63788             : // predeclarations for SgPartialFunctionType
   63789             : 
   63790             : /* #line 63791 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63791             : 
   63792             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   63793             : 
   63794             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   63795             : 
   63796             : #if 1
   63797             : // Class Definition for SgPartialFunctionType
   63798             : class ROSE_DLL_API SgPartialFunctionType  : public SgMemberFunctionType
   63799             :    {
   63800             :      public:
   63801             : 
   63802             : 
   63803             : /* #line 63804 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   63804             : 
   63805             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   63806             : // Start of memberFunctionString
   63807             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   63808             : 
   63809             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   63810             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   63811             :        // own data member and associated access function.
   63812             :        // static SgPartialFunctionType* get_builtin_type();
   63813             : 
   63814             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   63815             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   63816             :        // own data member and associated access function.
   63817             :        // static void set_builtin_type(SgPartialFunctionType* builtin_type);
   63818             : 
   63819             :       //! more sophisticated version for more complex types like SgPartialFunctionType (types whose constructors take parameters)
   63820             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   63821             :        // static SgPartialFunctionType* createType(SgType* type = NULL);
   63822             :           static SgPartialFunctionType* createType(SgType* type = NULL, SgExpression* optional_fortran_type_kind = NULL);
   63823             : 
   63824             : 
   63825             : // End of memberFunctionString
   63826             : // Start of memberFunctionString
   63827             : /* #line 883 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   63828             : 
   63829             :           void post_construction_initialization () override;
   63830             : 
   63831             : 
   63832             : // End of memberFunctionString
   63833             : // Start of memberFunctionString
   63834             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   63835             : 
   63836             : // *** COMMON CODE SECTION BEGINS HERE ***
   63837             : 
   63838             :     public:
   63839             : 
   63840             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   63841             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   63842             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   63843             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   63844             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   63845             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   63846             : 
   63847             :       /*! \brief returns a string representing the class name */
   63848             :           virtual std::string class_name() const override;
   63849             : 
   63850             :       /*! \brief returns new style SageIII enum values */
   63851             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   63852             : 
   63853             :       /*! \brief static variant value */
   63854             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   63855             :        // static const VariantT static_variant = V_SgPartialFunctionType;
   63856             :           enum { static_variant = V_SgPartialFunctionType };
   63857             : 
   63858             :        /* the generated cast function */
   63859             :       /*! \brief Casts pointer from base class to derived class */
   63860             :           ROSE_DLL_API friend       SgPartialFunctionType* isSgPartialFunctionType(       SgNode * s );
   63861             : 
   63862             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   63863             :           ROSE_DLL_API friend const SgPartialFunctionType* isSgPartialFunctionType( const SgNode * s );
   63864             : 
   63865             :      // ******************************************
   63866             :      // * Memory Pool / New / Delete
   63867             :      // ******************************************
   63868             : 
   63869             :      public:
   63870             :           /// \private
   63871             :           static const unsigned pool_size; //
   63872             :           /// \private
   63873             :           static std::vector<unsigned char *> pools; //
   63874             :           /// \private
   63875             :           static SgPartialFunctionType * next_node; // 
   63876             : 
   63877             :           /// \private
   63878             :           static unsigned long initializeStorageClassArray(SgPartialFunctionTypeStorageClass *); //
   63879             : 
   63880             :           /// \private
   63881             :           static void clearMemoryPool(); //
   63882             :           static void deleteMemoryPool(); //
   63883             : 
   63884             :           /// \private
   63885             :           static void extendMemoryPoolForFileIO(); //
   63886             : 
   63887             :           /// \private
   63888             :           static SgPartialFunctionType * getPointerFromGlobalIndex(unsigned long); //
   63889             :           /// \private
   63890             :           static SgPartialFunctionType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   63891             : 
   63892             :           /// \private
   63893             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   63894             :           /// \private
   63895             :           static void resetValidFreepointers(); //
   63896             :           /// \private
   63897             :           static unsigned long getNumberOfLastValidPointer(); //
   63898             : 
   63899             : 
   63900             : #if defined(INLINE_FUNCTIONS)
   63901             :       /*! \brief returns pointer to newly allocated IR node */
   63902             :           inline void *operator new (size_t size);
   63903             : #else
   63904             :       /*! \brief returns pointer to newly allocated IR node */
   63905             :           void *operator new (size_t size);
   63906             : #endif
   63907             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   63908             :           void operator delete (void* pointer, size_t size);
   63909             : 
   63910             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   63911       19092 :           void operator delete (void* pointer)
   63912             :              {
   63913             :             // This is the generated delete operator...
   63914       19092 :                SgPartialFunctionType::operator delete (pointer,sizeof(SgPartialFunctionType));
   63915             :              }
   63916             : 
   63917             :       /*! \brief Returns the total number of IR nodes of this type */
   63918             :           static size_t numberOfNodes();
   63919             : 
   63920             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   63921             :           static size_t memoryUsage();
   63922             : 
   63923             :       // End of scope which started in IR nodes specific code 
   63924             :       /* */
   63925             : 
   63926             :       /* name Internal Functions
   63927             :           \brief Internal functions ... incomplete-documentation
   63928             : 
   63929             :           These functions have been made public as part of the design, but they are suggested for internal use 
   63930             :           or by particularly knowledgeable users for specialized tools or applications.
   63931             : 
   63932             :           \internal We could not make these private because they are required by user for special purposes. And 
   63933             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   63934             :          
   63935             :        */
   63936             : 
   63937             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   63938             :        // overridden in every class by *generated* implementation
   63939             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   63940             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   63941             :        // MS: 06/28/02 container of names of variables or container indices 
   63942             :        // used used in the traversal to access AST successor nodes
   63943             :        // overridden in every class by *generated* implementation
   63944             :       /*! \brief container of names of variables or container indices used used in the traversal
   63945             :           to access AST successor nodes overridden in every class by *generated* implementation */
   63946             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   63947             : 
   63948             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   63949             :        // than all the vector copies. The implementation for these functions is generated for each class.
   63950             :       /*! \brief return number of children in the traversal successor list */
   63951             :           virtual size_t get_numberOfTraversalSuccessors() override;
   63952             :       /*! \brief index-based access to traversal successors by index number */
   63953             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   63954             :       /*! \brief index-based access to traversal successors by child node */
   63955             :           virtual size_t get_childIndex(SgNode *child) override;
   63956             : 
   63957             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   63958             :        // MS: 08/16/2002 method for generating RTI information
   63959             :       /*! \brief return C++ Runtime-Time-Information */
   63960             :           virtual RTIReturnType roseRTI() override;
   63961             : #endif
   63962             :       /* */
   63963             : 
   63964             : 
   63965             : 
   63966             :       /* name Deprecated Functions
   63967             :           \brief Deprecated functions ... incomplete-documentation
   63968             : 
   63969             :           These functions have been deprecated from use.
   63970             :        */
   63971             :       /* */
   63972             : 
   63973             :       /*! returns a C style string (char*) representing the class name */
   63974             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   63975             : 
   63976             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   63977             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   63978             : #if 0
   63979             :       /*! returns old style Sage II enum values */
   63980             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   63981             :       /*! returns old style Sage II enum values */
   63982             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   63983             : #endif
   63984             :       /* */
   63985             : 
   63986             : 
   63987             : 
   63988             : 
   63989             :      public:
   63990             :       /* name Traversal Support Functions
   63991             :           \brief Traversal support functions ... incomplete-documentation
   63992             : 
   63993             :           These functions have been made public as part of the design, but they are suggested for internal use 
   63994             :           or by particularly knowledgable users for specialized tools or applications.
   63995             :        */
   63996             :       /* */
   63997             : 
   63998             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   63999             :        // (inferior to ROSE traversal mechanism, experimental).
   64000             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   64001             :        */
   64002             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   64003             : 
   64004             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   64005             :       /*! \brief support for the classic visitor pattern done in GoF */
   64006             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   64007             : 
   64008             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   64009             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   64010             :        */
   64011             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   64012             : 
   64013             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   64014             :        */
   64015             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   64016             : 
   64017             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   64018             :        // This traversal helps support internal tools that call static member functions.
   64019             :        // note: this function operates on the memory pools.
   64020             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   64021             :        */
   64022             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   64023             :       /* */
   64024             : 
   64025             : 
   64026             :      public:
   64027             :       /* name Memory Allocation Functions
   64028             :           \brief Memory allocations functions ... incomplete-documentation
   64029             : 
   64030             :           These functions have been made public as part of the design, but they are suggested for internal use 
   64031             :           or by particularly knowledgable users for specialized tools or applications.
   64032             :        */
   64033             :       /* */
   64034             : 
   64035             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   64036             : 
   64037             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   64038             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   64039             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   64040             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   64041             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   64042             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   64043             :           being used with the AST File I/O mechanism.
   64044             :        */
   64045             :           virtual bool isInMemoryPool() override;
   64046             : 
   64047             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   64048             : 
   64049             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   64050             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   64051             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   64052             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   64053             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   64054             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   64055             :           being used with the AST File I/O mechanism.
   64056             :        */
   64057             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   64058             : 
   64059             :       // DQ (4/30/2006): Modified to be a const function.
   64060             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   64061             : 
   64062             :           This functions is part of general support for many possible tools to operate 
   64063             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   64064             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   64065             :           less than the set of pointers used by the AST file I/O. This is part of
   64066             :           work implemented by Andreas, and support tools such as the AST graph generation.
   64067             : 
   64068             :           \warning This function can return unexpected data members and thus the 
   64069             :                    order and the number of elements is unpredicable and subject 
   64070             :                    to change.
   64071             : 
   64072             :           \returns STL vector of pairs of SgNode* and strings
   64073             :        */
   64074             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   64075             : 
   64076             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   64077             : 
   64078             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   64079             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   64080             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   64081             : 
   64082             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   64083             :                    and subject to change.
   64084             :        */
   64085             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   64086             : 
   64087             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   64088             : 
   64089             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   64090             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   64091             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   64092             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   64093             : 
   64094             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   64095             : 
   64096             :           \returns long
   64097             :        */
   64098             :           virtual long getChildIndex( SgNode* childNode ) const override;
   64099             : 
   64100             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   64101             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   64102             :       /* \brief Constructor for use by AST File I/O Mechanism
   64103             : 
   64104             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   64105             :           which obtained via fast binary file I/O from disk.
   64106             :        */
   64107             :        // SgPartialFunctionType( SgPartialFunctionTypeStorageClass& source );
   64108             : 
   64109             : 
   64110             : 
   64111             : 
   64112             : 
   64113             :  // JH (10/24/2005): methods added to support the ast file IO
   64114             :     private:
   64115             : 
   64116             :       /* name AST Memory Allocation Support Functions
   64117             :           \brief Memory allocations support....
   64118             : 
   64119             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   64120             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   64121             :           and support the AST File I/O Mechanism.
   64122             :        */
   64123             :       /* */
   64124             : 
   64125             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   64126             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   64127             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   64128             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   64129             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   64130             :           a correspinding one in the AST_FILE_IO class!
   64131             :        */
   64132             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   64133             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   64134             :       /* \brief Typedef used for low level memory access.
   64135             :        */
   64136             :        // typedef unsigned char* TestType;
   64137             : 
   64138             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   64139             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   64140             :       /* \brief Typedef used to hold memory addresses as values.
   64141             :        */
   64142             :        // typedef unsigned long  AddressType;
   64143             : 
   64144             : 
   64145             : 
   64146             :        // necessary, to have direct access to the p_freepointer and the private methods !
   64147             :       /*! \brief friend class declaration to support AST File I/O */
   64148             :           friend class AST_FILE_IO;
   64149             : 
   64150             :       /*! \brief friend class declaration to support AST File I/O */
   64151             :           friend class SgPartialFunctionTypeStorageClass;
   64152             : 
   64153             :       /*! \brief friend class declaration to support AST File I/O */
   64154             :           friend class AstSpecificDataManagingClass;
   64155             : 
   64156             :       /*! \brief friend class declaration to support AST File I/O */
   64157             :           friend class AstSpecificDataManagingClassStorageClass;
   64158             :     public:
   64159             :       /*! \brief IR node constructor to support AST File I/O */
   64160             :           SgPartialFunctionType( const SgPartialFunctionTypeStorageClass& source );
   64161             : 
   64162             :  // private: // JJW hack
   64163             :        /*
   64164             :           name AST Memory Allocation Support Variables
   64165             :           Memory allocations support variables 
   64166             : 
   64167             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   64168             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   64169             :           and support the AST File I/O Mechanism.
   64170             :        */
   64171             :       /* */
   64172             : 
   64173             :     public:
   64174             : 
   64175             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   64176             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   64177             :       // virtual SgNode* addRegExpAttribute();
   64178             :       /*! \brief Support for AST matching using regular expression.
   64179             : 
   64180             :           This support is incomplete and the subject of current research to define 
   64181             :           RegEx trees to support inexact matching.
   64182             :        */
   64183             :           SgPartialFunctionType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   64184             : 
   64185             : // *** COMMON CODE SECTION ENDS HERE ***
   64186             : 
   64187             : 
   64188             : // End of memberFunctionString
   64189             : // Start of memberFunctionString
   64190             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   64191             : 
   64192             :      // the generated cast function
   64193             :      // friend ROSE_DLL_API SgPartialFunctionType* isSgPartialFunctionType ( SgNode* s );
   64194             : 
   64195             :           typedef SgMemberFunctionType base_node_type;
   64196             : 
   64197             : 
   64198             : // End of memberFunctionString
   64199             : 
   64200             : 
   64201             :      public: 
   64202             :          virtual ~SgPartialFunctionType();
   64203             : 
   64204             : 
   64205             :      public: 
   64206             :          SgPartialFunctionType(SgType* return_type = NULL, bool has_ellipses = true, SgType* class_type = NULL, unsigned int mfunc_specifier = 0, unsigned int ref_qualifiers = 0); 
   64207             : 
   64208             :     protected:
   64209             : 
   64210             :     friend struct Rose::Traits::generated::describe_node_t<SgPartialFunctionType>;
   64211             : 
   64212             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64213             : 
   64214             : 
   64215             :    };
   64216             : #endif
   64217             : 
   64218             : // postdeclarations for SgPartialFunctionType
   64219             : 
   64220             : /* #line 64221 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64221             : 
   64222             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   64223             : 
   64224             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64225             : 
   64226             : 
   64227             : /* #line 64228 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64228             : 
   64229             : 
   64230             : 
   64231             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64232             : 
   64233             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   64234             : //      This code is automatically generated for each 
   64235             : //      terminal and non-terminal within the defined 
   64236             : //      grammar.  There is a simple way to change the 
   64237             : //      code to fix bugs etc.  See the ROSE README file
   64238             : //      for directions.
   64239             : 
   64240             : // tps: (02/22/2010): Adding DLL export requirements
   64241             : #include "rosedll.h"
   64242             : 
   64243             : // predeclarations for SgPartialFunctionModifierType
   64244             : 
   64245             : /* #line 64246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64246             : 
   64247             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   64248             : 
   64249             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64250             : 
   64251             : #if 1
   64252             : // Class Definition for SgPartialFunctionModifierType
   64253             : class ROSE_DLL_API SgPartialFunctionModifierType  : public SgPartialFunctionType
   64254             :    {
   64255             :      public:
   64256             : 
   64257             : 
   64258             : /* #line 64259 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64259             : 
   64260             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   64261             : // Start of memberFunctionString
   64262             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   64263             : 
   64264             : // *** COMMON CODE SECTION BEGINS HERE ***
   64265             : 
   64266             :     public:
   64267             : 
   64268             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   64269             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   64270             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   64271             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   64272             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   64273             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   64274             : 
   64275             :       /*! \brief returns a string representing the class name */
   64276             :           virtual std::string class_name() const override;
   64277             : 
   64278             :       /*! \brief returns new style SageIII enum values */
   64279             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   64280             : 
   64281             :       /*! \brief static variant value */
   64282             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   64283             :        // static const VariantT static_variant = V_SgPartialFunctionModifierType;
   64284             :           enum { static_variant = V_SgPartialFunctionModifierType };
   64285             : 
   64286             :        /* the generated cast function */
   64287             :       /*! \brief Casts pointer from base class to derived class */
   64288             :           ROSE_DLL_API friend       SgPartialFunctionModifierType* isSgPartialFunctionModifierType(       SgNode * s );
   64289             : 
   64290             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   64291             :           ROSE_DLL_API friend const SgPartialFunctionModifierType* isSgPartialFunctionModifierType( const SgNode * s );
   64292             : 
   64293             :      // ******************************************
   64294             :      // * Memory Pool / New / Delete
   64295             :      // ******************************************
   64296             : 
   64297             :      public:
   64298             :           /// \private
   64299             :           static const unsigned pool_size; //
   64300             :           /// \private
   64301             :           static std::vector<unsigned char *> pools; //
   64302             :           /// \private
   64303             :           static SgPartialFunctionModifierType * next_node; // 
   64304             : 
   64305             :           /// \private
   64306             :           static unsigned long initializeStorageClassArray(SgPartialFunctionModifierTypeStorageClass *); //
   64307             : 
   64308             :           /// \private
   64309             :           static void clearMemoryPool(); //
   64310             :           static void deleteMemoryPool(); //
   64311             : 
   64312             :           /// \private
   64313             :           static void extendMemoryPoolForFileIO(); //
   64314             : 
   64315             :           /// \private
   64316             :           static SgPartialFunctionModifierType * getPointerFromGlobalIndex(unsigned long); //
   64317             :           /// \private
   64318             :           static SgPartialFunctionModifierType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   64319             : 
   64320             :           /// \private
   64321             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   64322             :           /// \private
   64323             :           static void resetValidFreepointers(); //
   64324             :           /// \private
   64325             :           static unsigned long getNumberOfLastValidPointer(); //
   64326             : 
   64327             : 
   64328             : #if defined(INLINE_FUNCTIONS)
   64329             :       /*! \brief returns pointer to newly allocated IR node */
   64330             :           inline void *operator new (size_t size);
   64331             : #else
   64332             :       /*! \brief returns pointer to newly allocated IR node */
   64333             :           void *operator new (size_t size);
   64334             : #endif
   64335             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   64336             :           void operator delete (void* pointer, size_t size);
   64337             : 
   64338             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   64339           0 :           void operator delete (void* pointer)
   64340             :              {
   64341             :             // This is the generated delete operator...
   64342           0 :                SgPartialFunctionModifierType::operator delete (pointer,sizeof(SgPartialFunctionModifierType));
   64343             :              }
   64344             : 
   64345             :       /*! \brief Returns the total number of IR nodes of this type */
   64346             :           static size_t numberOfNodes();
   64347             : 
   64348             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   64349             :           static size_t memoryUsage();
   64350             : 
   64351             :       // End of scope which started in IR nodes specific code 
   64352             :       /* */
   64353             : 
   64354             :       /* name Internal Functions
   64355             :           \brief Internal functions ... incomplete-documentation
   64356             : 
   64357             :           These functions have been made public as part of the design, but they are suggested for internal use 
   64358             :           or by particularly knowledgeable users for specialized tools or applications.
   64359             : 
   64360             :           \internal We could not make these private because they are required by user for special purposes. And 
   64361             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   64362             :          
   64363             :        */
   64364             : 
   64365             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   64366             :        // overridden in every class by *generated* implementation
   64367             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   64368             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   64369             :        // MS: 06/28/02 container of names of variables or container indices 
   64370             :        // used used in the traversal to access AST successor nodes
   64371             :        // overridden in every class by *generated* implementation
   64372             :       /*! \brief container of names of variables or container indices used used in the traversal
   64373             :           to access AST successor nodes overridden in every class by *generated* implementation */
   64374             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   64375             : 
   64376             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   64377             :        // than all the vector copies. The implementation for these functions is generated for each class.
   64378             :       /*! \brief return number of children in the traversal successor list */
   64379             :           virtual size_t get_numberOfTraversalSuccessors() override;
   64380             :       /*! \brief index-based access to traversal successors by index number */
   64381             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   64382             :       /*! \brief index-based access to traversal successors by child node */
   64383             :           virtual size_t get_childIndex(SgNode *child) override;
   64384             : 
   64385             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   64386             :        // MS: 08/16/2002 method for generating RTI information
   64387             :       /*! \brief return C++ Runtime-Time-Information */
   64388             :           virtual RTIReturnType roseRTI() override;
   64389             : #endif
   64390             :       /* */
   64391             : 
   64392             : 
   64393             : 
   64394             :       /* name Deprecated Functions
   64395             :           \brief Deprecated functions ... incomplete-documentation
   64396             : 
   64397             :           These functions have been deprecated from use.
   64398             :        */
   64399             :       /* */
   64400             : 
   64401             :       /*! returns a C style string (char*) representing the class name */
   64402             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   64403             : 
   64404             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   64405             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   64406             : #if 0
   64407             :       /*! returns old style Sage II enum values */
   64408             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   64409             :       /*! returns old style Sage II enum values */
   64410             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   64411             : #endif
   64412             :       /* */
   64413             : 
   64414             : 
   64415             : 
   64416             : 
   64417             :      public:
   64418             :       /* name Traversal Support Functions
   64419             :           \brief Traversal support functions ... incomplete-documentation
   64420             : 
   64421             :           These functions have been made public as part of the design, but they are suggested for internal use 
   64422             :           or by particularly knowledgable users for specialized tools or applications.
   64423             :        */
   64424             :       /* */
   64425             : 
   64426             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   64427             :        // (inferior to ROSE traversal mechanism, experimental).
   64428             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   64429             :        */
   64430             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   64431             : 
   64432             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   64433             :       /*! \brief support for the classic visitor pattern done in GoF */
   64434             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   64435             : 
   64436             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   64437             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   64438             :        */
   64439             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   64440             : 
   64441             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   64442             :        */
   64443             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   64444             : 
   64445             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   64446             :        // This traversal helps support internal tools that call static member functions.
   64447             :        // note: this function operates on the memory pools.
   64448             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   64449             :        */
   64450             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   64451             :       /* */
   64452             : 
   64453             : 
   64454             :      public:
   64455             :       /* name Memory Allocation Functions
   64456             :           \brief Memory allocations functions ... incomplete-documentation
   64457             : 
   64458             :           These functions have been made public as part of the design, but they are suggested for internal use 
   64459             :           or by particularly knowledgable users for specialized tools or applications.
   64460             :        */
   64461             :       /* */
   64462             : 
   64463             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   64464             : 
   64465             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   64466             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   64467             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   64468             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   64469             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   64470             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   64471             :           being used with the AST File I/O mechanism.
   64472             :        */
   64473             :           virtual bool isInMemoryPool() override;
   64474             : 
   64475             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   64476             : 
   64477             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   64478             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   64479             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   64480             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   64481             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   64482             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   64483             :           being used with the AST File I/O mechanism.
   64484             :        */
   64485             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   64486             : 
   64487             :       // DQ (4/30/2006): Modified to be a const function.
   64488             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   64489             : 
   64490             :           This functions is part of general support for many possible tools to operate 
   64491             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   64492             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   64493             :           less than the set of pointers used by the AST file I/O. This is part of
   64494             :           work implemented by Andreas, and support tools such as the AST graph generation.
   64495             : 
   64496             :           \warning This function can return unexpected data members and thus the 
   64497             :                    order and the number of elements is unpredicable and subject 
   64498             :                    to change.
   64499             : 
   64500             :           \returns STL vector of pairs of SgNode* and strings
   64501             :        */
   64502             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   64503             : 
   64504             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   64505             : 
   64506             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   64507             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   64508             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   64509             : 
   64510             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   64511             :                    and subject to change.
   64512             :        */
   64513             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   64514             : 
   64515             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   64516             : 
   64517             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   64518             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   64519             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   64520             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   64521             : 
   64522             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   64523             : 
   64524             :           \returns long
   64525             :        */
   64526             :           virtual long getChildIndex( SgNode* childNode ) const override;
   64527             : 
   64528             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   64529             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   64530             :       /* \brief Constructor for use by AST File I/O Mechanism
   64531             : 
   64532             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   64533             :           which obtained via fast binary file I/O from disk.
   64534             :        */
   64535             :        // SgPartialFunctionModifierType( SgPartialFunctionModifierTypeStorageClass& source );
   64536             : 
   64537             : 
   64538             : 
   64539             : 
   64540             : 
   64541             :  // JH (10/24/2005): methods added to support the ast file IO
   64542             :     private:
   64543             : 
   64544             :       /* name AST Memory Allocation Support Functions
   64545             :           \brief Memory allocations support....
   64546             : 
   64547             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   64548             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   64549             :           and support the AST File I/O Mechanism.
   64550             :        */
   64551             :       /* */
   64552             : 
   64553             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   64554             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   64555             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   64556             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   64557             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   64558             :           a correspinding one in the AST_FILE_IO class!
   64559             :        */
   64560             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   64561             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   64562             :       /* \brief Typedef used for low level memory access.
   64563             :        */
   64564             :        // typedef unsigned char* TestType;
   64565             : 
   64566             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   64567             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   64568             :       /* \brief Typedef used to hold memory addresses as values.
   64569             :        */
   64570             :        // typedef unsigned long  AddressType;
   64571             : 
   64572             : 
   64573             : 
   64574             :        // necessary, to have direct access to the p_freepointer and the private methods !
   64575             :       /*! \brief friend class declaration to support AST File I/O */
   64576             :           friend class AST_FILE_IO;
   64577             : 
   64578             :       /*! \brief friend class declaration to support AST File I/O */
   64579             :           friend class SgPartialFunctionModifierTypeStorageClass;
   64580             : 
   64581             :       /*! \brief friend class declaration to support AST File I/O */
   64582             :           friend class AstSpecificDataManagingClass;
   64583             : 
   64584             :       /*! \brief friend class declaration to support AST File I/O */
   64585             :           friend class AstSpecificDataManagingClassStorageClass;
   64586             :     public:
   64587             :       /*! \brief IR node constructor to support AST File I/O */
   64588             :           SgPartialFunctionModifierType( const SgPartialFunctionModifierTypeStorageClass& source );
   64589             : 
   64590             :  // private: // JJW hack
   64591             :        /*
   64592             :           name AST Memory Allocation Support Variables
   64593             :           Memory allocations support variables 
   64594             : 
   64595             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   64596             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   64597             :           and support the AST File I/O Mechanism.
   64598             :        */
   64599             :       /* */
   64600             : 
   64601             :     public:
   64602             : 
   64603             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   64604             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   64605             :       // virtual SgNode* addRegExpAttribute();
   64606             :       /*! \brief Support for AST matching using regular expression.
   64607             : 
   64608             :           This support is incomplete and the subject of current research to define 
   64609             :           RegEx trees to support inexact matching.
   64610             :        */
   64611             :           SgPartialFunctionModifierType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   64612             : 
   64613             : // *** COMMON CODE SECTION ENDS HERE ***
   64614             : 
   64615             : 
   64616             : // End of memberFunctionString
   64617             : // Start of memberFunctionString
   64618             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   64619             : 
   64620             :      // the generated cast function
   64621             :      // friend ROSE_DLL_API SgPartialFunctionModifierType* isSgPartialFunctionModifierType ( SgNode* s );
   64622             : 
   64623             :           typedef SgPartialFunctionType base_node_type;
   64624             : 
   64625             : 
   64626             : // End of memberFunctionString
   64627             : // Start of memberFunctionString
   64628             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   64629             : 
   64630             :        // SgName get_mangled ( SgUnparse_Info & info );
   64631             : 
   64632             :       //! Mangled name support for unparser support
   64633             :        // SgName get_mangled ( SgUnparse_Info & info );
   64634             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   64635             :           virtual SgName get_mangled (void) const override;
   64636             : 
   64637             : 
   64638             : 
   64639             : // End of memberFunctionString
   64640             : // Start of memberFunctionString
   64641             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   64642             : 
   64643             :       //! example of type used where construction is particularly simple
   64644             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   64645             :        // static SgPartialFunctionModifierType builtin_type;
   64646             :        // static SgPartialFunctionModifierType* builtin_type;
   64647             : 
   64648             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   64649             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   64650             :        // own data member and associated access function.
   64651             :        // static SgPartialFunctionModifierType* get_builtin_type();
   64652             : 
   64653             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   64654             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   64655             :        // own data member and associated access function.
   64656             :        // static void set_builtin_type(SgPartialFunctionModifierType* builtin_type);
   64657             : 
   64658             :       //! function returns example of type
   64659             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   64660             :        // static SgPartialFunctionModifierType* createType(void);
   64661             :           static SgPartialFunctionModifierType* createType(SgExpression* optional_fortran_type_kind = NULL);
   64662             : 
   64663             : 
   64664             : // End of memberFunctionString
   64665             : 
   64666             : 
   64667             : 
   64668             :      public: 
   64669             :          virtual ~SgPartialFunctionModifierType();
   64670             : 
   64671             : 
   64672             :      public: 
   64673             :          SgPartialFunctionModifierType(SgType* return_type = NULL, bool has_ellipses = true, SgType* class_type = NULL, unsigned int mfunc_specifier = 0, unsigned int ref_qualifiers = 0); 
   64674             : 
   64675             :     protected:
   64676             : // Start of memberFunctionString
   64677             : static SgPartialFunctionModifierType* p_builtin_type;
   64678             :           
   64679             : // End of memberFunctionString
   64680             : 
   64681             :     friend struct Rose::Traits::generated::describe_node_t<SgPartialFunctionModifierType>;
   64682             : 
   64683             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64684             : 
   64685             : 
   64686             :    };
   64687             : #endif
   64688             : 
   64689             : // postdeclarations for SgPartialFunctionModifierType
   64690             : 
   64691             : /* #line 64692 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64692             : 
   64693             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   64694             : 
   64695             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64696             : 
   64697             : 
   64698             : /* #line 64699 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64699             : 
   64700             : 
   64701             : 
   64702             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64703             : 
   64704             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   64705             : //      This code is automatically generated for each 
   64706             : //      terminal and non-terminal within the defined 
   64707             : //      grammar.  There is a simple way to change the 
   64708             : //      code to fix bugs etc.  See the ROSE README file
   64709             : //      for directions.
   64710             : 
   64711             : // tps: (02/22/2010): Adding DLL export requirements
   64712             : #include "rosedll.h"
   64713             : 
   64714             : // predeclarations for SgArrayType
   64715             : 
   64716             : /* #line 64717 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64717             : 
   64718             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   64719             : 
   64720             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   64721             : 
   64722             : #if 1
   64723             : // Class Definition for SgArrayType
   64724             : class ROSE_DLL_API SgArrayType  : public SgType
   64725             :    {
   64726             :      public:
   64727             : 
   64728             : 
   64729             : /* #line 64730 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   64730             : 
   64731             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   64732             : // Start of memberFunctionString
   64733             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   64734             : 
   64735             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   64736             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   64737             :        // own data member and associated access function.
   64738             :        // static SgArrayType* get_builtin_type();
   64739             : 
   64740             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   64741             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   64742             :        // own data member and associated access function.
   64743             :        // static void set_builtin_type(SgArrayType* builtin_type);
   64744             : 
   64745             :       //! more sophisticated version for more complex types like SgArrayType (types whose constructors take parameters)
   64746             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   64747             :        // static SgArrayType* createType(SgType* type = NULL, SgExpression* expr = NULL);
   64748             :           static SgArrayType* createType(SgType* type = NULL, SgExpression* expr = NULL, SgExpression* optional_fortran_type_kind = NULL);
   64749             : 
   64750             : 
   64751             : // End of memberFunctionString
   64752             : // Start of memberFunctionString
   64753             : /* #line 991 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   64754             : 
   64755             : 
   64756             :        // DQ (3/22/2017): I would like to remove this function if possible.
   64757             :        // DQ (3/22/2017): Added the get_name() function prototype directly so that
   64758             :        // it could be differentiated from where it is a virtual function.
   64759             :           SgName get_name() const;
   64760             : 
   64761             : 
   64762             : 
   64763             : // End of memberFunctionString
   64764             : // Start of memberFunctionString
   64765             : /* #line 379 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   64766             : 
   64767             :       //! Used for the SgNamedType object (base class for the SgClassType, SgTypedefType and the SgEnumType object)
   64768             :           SgName get_qualified_name() const;
   64769             : 
   64770             : 
   64771             : // End of memberFunctionString
   64772             : // Start of memberFunctionString
   64773             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   64774             : 
   64775             : // *** COMMON CODE SECTION BEGINS HERE ***
   64776             : 
   64777             :     public:
   64778             : 
   64779             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   64780             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   64781             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   64782             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   64783             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   64784             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   64785             : 
   64786             :       /*! \brief returns a string representing the class name */
   64787             :           virtual std::string class_name() const override;
   64788             : 
   64789             :       /*! \brief returns new style SageIII enum values */
   64790             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   64791             : 
   64792             :       /*! \brief static variant value */
   64793             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   64794             :        // static const VariantT static_variant = V_SgArrayType;
   64795             :           enum { static_variant = V_SgArrayType };
   64796             : 
   64797             :        /* the generated cast function */
   64798             :       /*! \brief Casts pointer from base class to derived class */
   64799             :           ROSE_DLL_API friend       SgArrayType* isSgArrayType(       SgNode * s );
   64800             : 
   64801             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   64802             :           ROSE_DLL_API friend const SgArrayType* isSgArrayType( const SgNode * s );
   64803             : 
   64804             :      // ******************************************
   64805             :      // * Memory Pool / New / Delete
   64806             :      // ******************************************
   64807             : 
   64808             :      public:
   64809             :           /// \private
   64810             :           static const unsigned pool_size; //
   64811             :           /// \private
   64812             :           static std::vector<unsigned char *> pools; //
   64813             :           /// \private
   64814             :           static SgArrayType * next_node; // 
   64815             : 
   64816             :           /// \private
   64817             :           static unsigned long initializeStorageClassArray(SgArrayTypeStorageClass *); //
   64818             : 
   64819             :           /// \private
   64820             :           static void clearMemoryPool(); //
   64821             :           static void deleteMemoryPool(); //
   64822             : 
   64823             :           /// \private
   64824             :           static void extendMemoryPoolForFileIO(); //
   64825             : 
   64826             :           /// \private
   64827             :           static SgArrayType * getPointerFromGlobalIndex(unsigned long); //
   64828             :           /// \private
   64829             :           static SgArrayType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   64830             : 
   64831             :           /// \private
   64832             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   64833             :           /// \private
   64834             :           static void resetValidFreepointers(); //
   64835             :           /// \private
   64836             :           static unsigned long getNumberOfLastValidPointer(); //
   64837             : 
   64838             : 
   64839             : #if defined(INLINE_FUNCTIONS)
   64840             :       /*! \brief returns pointer to newly allocated IR node */
   64841             :           inline void *operator new (size_t size);
   64842             : #else
   64843             :       /*! \brief returns pointer to newly allocated IR node */
   64844             :           void *operator new (size_t size);
   64845             : #endif
   64846             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   64847             :           void operator delete (void* pointer, size_t size);
   64848             : 
   64849             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   64850         216 :           void operator delete (void* pointer)
   64851             :              {
   64852             :             // This is the generated delete operator...
   64853         216 :                SgArrayType::operator delete (pointer,sizeof(SgArrayType));
   64854             :              }
   64855             : 
   64856             :       /*! \brief Returns the total number of IR nodes of this type */
   64857             :           static size_t numberOfNodes();
   64858             : 
   64859             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   64860             :           static size_t memoryUsage();
   64861             : 
   64862             :       // End of scope which started in IR nodes specific code 
   64863             :       /* */
   64864             : 
   64865             :       /* name Internal Functions
   64866             :           \brief Internal functions ... incomplete-documentation
   64867             : 
   64868             :           These functions have been made public as part of the design, but they are suggested for internal use 
   64869             :           or by particularly knowledgeable users for specialized tools or applications.
   64870             : 
   64871             :           \internal We could not make these private because they are required by user for special purposes. And 
   64872             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   64873             :          
   64874             :        */
   64875             : 
   64876             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   64877             :        // overridden in every class by *generated* implementation
   64878             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   64879             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   64880             :        // MS: 06/28/02 container of names of variables or container indices 
   64881             :        // used used in the traversal to access AST successor nodes
   64882             :        // overridden in every class by *generated* implementation
   64883             :       /*! \brief container of names of variables or container indices used used in the traversal
   64884             :           to access AST successor nodes overridden in every class by *generated* implementation */
   64885             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   64886             : 
   64887             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   64888             :        // than all the vector copies. The implementation for these functions is generated for each class.
   64889             :       /*! \brief return number of children in the traversal successor list */
   64890             :           virtual size_t get_numberOfTraversalSuccessors() override;
   64891             :       /*! \brief index-based access to traversal successors by index number */
   64892             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   64893             :       /*! \brief index-based access to traversal successors by child node */
   64894             :           virtual size_t get_childIndex(SgNode *child) override;
   64895             : 
   64896             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   64897             :        // MS: 08/16/2002 method for generating RTI information
   64898             :       /*! \brief return C++ Runtime-Time-Information */
   64899             :           virtual RTIReturnType roseRTI() override;
   64900             : #endif
   64901             :       /* */
   64902             : 
   64903             : 
   64904             : 
   64905             :       /* name Deprecated Functions
   64906             :           \brief Deprecated functions ... incomplete-documentation
   64907             : 
   64908             :           These functions have been deprecated from use.
   64909             :        */
   64910             :       /* */
   64911             : 
   64912             :       /*! returns a C style string (char*) representing the class name */
   64913             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   64914             : 
   64915             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   64916             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   64917             : #if 0
   64918             :       /*! returns old style Sage II enum values */
   64919             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   64920             :       /*! returns old style Sage II enum values */
   64921             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   64922             : #endif
   64923             :       /* */
   64924             : 
   64925             : 
   64926             : 
   64927             : 
   64928             :      public:
   64929             :       /* name Traversal Support Functions
   64930             :           \brief Traversal support functions ... incomplete-documentation
   64931             : 
   64932             :           These functions have been made public as part of the design, but they are suggested for internal use 
   64933             :           or by particularly knowledgable users for specialized tools or applications.
   64934             :        */
   64935             :       /* */
   64936             : 
   64937             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   64938             :        // (inferior to ROSE traversal mechanism, experimental).
   64939             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   64940             :        */
   64941             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   64942             : 
   64943             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   64944             :       /*! \brief support for the classic visitor pattern done in GoF */
   64945             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   64946             : 
   64947             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   64948             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   64949             :        */
   64950             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   64951             : 
   64952             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   64953             :        */
   64954             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   64955             : 
   64956             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   64957             :        // This traversal helps support internal tools that call static member functions.
   64958             :        // note: this function operates on the memory pools.
   64959             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   64960             :        */
   64961             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   64962             :       /* */
   64963             : 
   64964             : 
   64965             :      public:
   64966             :       /* name Memory Allocation Functions
   64967             :           \brief Memory allocations functions ... incomplete-documentation
   64968             : 
   64969             :           These functions have been made public as part of the design, but they are suggested for internal use 
   64970             :           or by particularly knowledgable users for specialized tools or applications.
   64971             :        */
   64972             :       /* */
   64973             : 
   64974             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   64975             : 
   64976             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   64977             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   64978             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   64979             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   64980             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   64981             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   64982             :           being used with the AST File I/O mechanism.
   64983             :        */
   64984             :           virtual bool isInMemoryPool() override;
   64985             : 
   64986             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   64987             : 
   64988             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   64989             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   64990             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   64991             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   64992             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   64993             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   64994             :           being used with the AST File I/O mechanism.
   64995             :        */
   64996             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   64997             : 
   64998             :       // DQ (4/30/2006): Modified to be a const function.
   64999             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   65000             : 
   65001             :           This functions is part of general support for many possible tools to operate 
   65002             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   65003             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   65004             :           less than the set of pointers used by the AST file I/O. This is part of
   65005             :           work implemented by Andreas, and support tools such as the AST graph generation.
   65006             : 
   65007             :           \warning This function can return unexpected data members and thus the 
   65008             :                    order and the number of elements is unpredicable and subject 
   65009             :                    to change.
   65010             : 
   65011             :           \returns STL vector of pairs of SgNode* and strings
   65012             :        */
   65013             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   65014             : 
   65015             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   65016             : 
   65017             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   65018             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   65019             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   65020             : 
   65021             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   65022             :                    and subject to change.
   65023             :        */
   65024             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   65025             : 
   65026             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   65027             : 
   65028             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   65029             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   65030             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   65031             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   65032             : 
   65033             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   65034             : 
   65035             :           \returns long
   65036             :        */
   65037             :           virtual long getChildIndex( SgNode* childNode ) const override;
   65038             : 
   65039             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   65040             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   65041             :       /* \brief Constructor for use by AST File I/O Mechanism
   65042             : 
   65043             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   65044             :           which obtained via fast binary file I/O from disk.
   65045             :        */
   65046             :        // SgArrayType( SgArrayTypeStorageClass& source );
   65047             : 
   65048             : 
   65049             : 
   65050             : 
   65051             : 
   65052             :  // JH (10/24/2005): methods added to support the ast file IO
   65053             :     private:
   65054             : 
   65055             :       /* name AST Memory Allocation Support Functions
   65056             :           \brief Memory allocations support....
   65057             : 
   65058             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   65059             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   65060             :           and support the AST File I/O Mechanism.
   65061             :        */
   65062             :       /* */
   65063             : 
   65064             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   65065             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   65066             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   65067             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   65068             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   65069             :           a correspinding one in the AST_FILE_IO class!
   65070             :        */
   65071             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   65072             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   65073             :       /* \brief Typedef used for low level memory access.
   65074             :        */
   65075             :        // typedef unsigned char* TestType;
   65076             : 
   65077             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   65078             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   65079             :       /* \brief Typedef used to hold memory addresses as values.
   65080             :        */
   65081             :        // typedef unsigned long  AddressType;
   65082             : 
   65083             : 
   65084             : 
   65085             :        // necessary, to have direct access to the p_freepointer and the private methods !
   65086             :       /*! \brief friend class declaration to support AST File I/O */
   65087             :           friend class AST_FILE_IO;
   65088             : 
   65089             :       /*! \brief friend class declaration to support AST File I/O */
   65090             :           friend class SgArrayTypeStorageClass;
   65091             : 
   65092             :       /*! \brief friend class declaration to support AST File I/O */
   65093             :           friend class AstSpecificDataManagingClass;
   65094             : 
   65095             :       /*! \brief friend class declaration to support AST File I/O */
   65096             :           friend class AstSpecificDataManagingClassStorageClass;
   65097             :     public:
   65098             :       /*! \brief IR node constructor to support AST File I/O */
   65099             :           SgArrayType( const SgArrayTypeStorageClass& source );
   65100             : 
   65101             :  // private: // JJW hack
   65102             :        /*
   65103             :           name AST Memory Allocation Support Variables
   65104             :           Memory allocations support variables 
   65105             : 
   65106             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   65107             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   65108             :           and support the AST File I/O Mechanism.
   65109             :        */
   65110             :       /* */
   65111             : 
   65112             :     public:
   65113             : 
   65114             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   65115             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   65116             :       // virtual SgNode* addRegExpAttribute();
   65117             :       /*! \brief Support for AST matching using regular expression.
   65118             : 
   65119             :           This support is incomplete and the subject of current research to define 
   65120             :           RegEx trees to support inexact matching.
   65121             :        */
   65122             :           SgArrayType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   65123             : 
   65124             : // *** COMMON CODE SECTION ENDS HERE ***
   65125             : 
   65126             : 
   65127             : // End of memberFunctionString
   65128             : // Start of memberFunctionString
   65129             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   65130             : 
   65131             :      // the generated cast function
   65132             :      // friend ROSE_DLL_API SgArrayType* isSgArrayType ( SgNode* s );
   65133             : 
   65134             :           typedef SgType base_node_type;
   65135             : 
   65136             : 
   65137             : // End of memberFunctionString
   65138             : // Start of memberFunctionString
   65139             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   65140             : 
   65141             :        // SgName get_mangled ( SgUnparse_Info & info );
   65142             : 
   65143             :       //! Mangled name support for unparser support
   65144             :        // SgName get_mangled ( SgUnparse_Info & info );
   65145             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   65146             :           virtual SgName get_mangled (void) const override;
   65147             : 
   65148             : 
   65149             : 
   65150             : // End of memberFunctionString
   65151             : 
   65152             :      public: 
   65153             :          SgType* get_base_type() const;
   65154             :          void set_base_type(SgType* base_type);
   65155             : 
   65156             :      public: 
   65157             :          SgExpression* get_index() const;
   65158             :          void set_index(SgExpression* index);
   65159             : 
   65160             :      public: 
   65161             :          SgExprListExp* get_dim_info() const;
   65162             :          void set_dim_info(SgExprListExp* dim_info);
   65163             : 
   65164             :      public: 
   65165             :          int get_rank() const;
   65166             :          void set_rank(int rank);
   65167             : 
   65168             :      public: 
   65169             :          int get_number_of_elements() const;
   65170             :          void set_number_of_elements(int number_of_elements);
   65171             : 
   65172             :      public: 
   65173             :          bool get_is_variable_length_array() const;
   65174             :          void set_is_variable_length_array(bool is_variable_length_array);
   65175             : 
   65176             : 
   65177             :      public: 
   65178             :          virtual ~SgArrayType();
   65179             : 
   65180             : 
   65181             :      public: 
   65182             :          SgArrayType(SgType* base_type = NULL, SgExpression* index = NULL); 
   65183             : 
   65184             :     protected:
   65185             : // Start of memberFunctionString
   65186             : SgType* p_base_type;
   65187             :           
   65188             : // End of memberFunctionString
   65189             : // Start of memberFunctionString
   65190             : SgExpression* p_index;
   65191             :           
   65192             : // End of memberFunctionString
   65193             : // Start of memberFunctionString
   65194             : SgExprListExp* p_dim_info;
   65195             :           
   65196             : // End of memberFunctionString
   65197             : // Start of memberFunctionString
   65198             : int p_rank;
   65199             :           
   65200             : // End of memberFunctionString
   65201             : // Start of memberFunctionString
   65202             : int p_number_of_elements;
   65203             :           
   65204             : // End of memberFunctionString
   65205             : // Start of memberFunctionString
   65206             : bool p_is_variable_length_array;
   65207             :           
   65208             : // End of memberFunctionString
   65209             : 
   65210             :     friend struct Rose::Traits::generated::describe_node_t<SgArrayType>;
   65211             :     friend struct Rose::Traits::generated::describe_field_t<SgArrayType, SgType*,&SgArrayType::p_base_type>;
   65212             :     friend struct Rose::Traits::generated::describe_field_t<SgArrayType, SgExpression*,&SgArrayType::p_index>;
   65213             :     friend struct Rose::Traits::generated::describe_field_t<SgArrayType, SgExprListExp*,&SgArrayType::p_dim_info>;
   65214             :     friend struct Rose::Traits::generated::describe_field_t<SgArrayType, int,&SgArrayType::p_rank>;
   65215             :     friend struct Rose::Traits::generated::describe_field_t<SgArrayType, int,&SgArrayType::p_number_of_elements>;
   65216             :     friend struct Rose::Traits::generated::describe_field_t<SgArrayType, bool,&SgArrayType::p_is_variable_length_array>;
   65217             : 
   65218             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65219             : 
   65220             : 
   65221             :    };
   65222             : #endif
   65223             : 
   65224             : // postdeclarations for SgArrayType
   65225             : 
   65226             : /* #line 65227 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65227             : 
   65228             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   65229             : 
   65230             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65231             : 
   65232             : 
   65233             : /* #line 65234 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65234             : 
   65235             : 
   65236             : 
   65237             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65238             : 
   65239             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   65240             : //      This code is automatically generated for each 
   65241             : //      terminal and non-terminal within the defined 
   65242             : //      grammar.  There is a simple way to change the 
   65243             : //      code to fix bugs etc.  See the ROSE README file
   65244             : //      for directions.
   65245             : 
   65246             : // tps: (02/22/2010): Adding DLL export requirements
   65247             : #include "rosedll.h"
   65248             : 
   65249             : // predeclarations for SgTypeEllipse
   65250             : 
   65251             : /* #line 65252 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65252             : 
   65253             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   65254             : 
   65255             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65256             : 
   65257             : #if 1
   65258             : // Class Definition for SgTypeEllipse
   65259             : class ROSE_DLL_API SgTypeEllipse  : public SgType
   65260             :    {
   65261             :      public:
   65262             : 
   65263             : 
   65264             : /* #line 65265 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65265             : 
   65266             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   65267             : // Start of memberFunctionString
   65268             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   65269             : 
   65270             : // *** COMMON CODE SECTION BEGINS HERE ***
   65271             : 
   65272             :     public:
   65273             : 
   65274             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   65275             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   65276             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   65277             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   65278             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   65279             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   65280             : 
   65281             :       /*! \brief returns a string representing the class name */
   65282             :           virtual std::string class_name() const override;
   65283             : 
   65284             :       /*! \brief returns new style SageIII enum values */
   65285             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   65286             : 
   65287             :       /*! \brief static variant value */
   65288             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   65289             :        // static const VariantT static_variant = V_SgTypeEllipse;
   65290             :           enum { static_variant = V_SgTypeEllipse };
   65291             : 
   65292             :        /* the generated cast function */
   65293             :       /*! \brief Casts pointer from base class to derived class */
   65294             :           ROSE_DLL_API friend       SgTypeEllipse* isSgTypeEllipse(       SgNode * s );
   65295             : 
   65296             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   65297             :           ROSE_DLL_API friend const SgTypeEllipse* isSgTypeEllipse( const SgNode * s );
   65298             : 
   65299             :      // ******************************************
   65300             :      // * Memory Pool / New / Delete
   65301             :      // ******************************************
   65302             : 
   65303             :      public:
   65304             :           /// \private
   65305             :           static const unsigned pool_size; //
   65306             :           /// \private
   65307             :           static std::vector<unsigned char *> pools; //
   65308             :           /// \private
   65309             :           static SgTypeEllipse * next_node; // 
   65310             : 
   65311             :           /// \private
   65312             :           static unsigned long initializeStorageClassArray(SgTypeEllipseStorageClass *); //
   65313             : 
   65314             :           /// \private
   65315             :           static void clearMemoryPool(); //
   65316             :           static void deleteMemoryPool(); //
   65317             : 
   65318             :           /// \private
   65319             :           static void extendMemoryPoolForFileIO(); //
   65320             : 
   65321             :           /// \private
   65322             :           static SgTypeEllipse * getPointerFromGlobalIndex(unsigned long); //
   65323             :           /// \private
   65324             :           static SgTypeEllipse * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   65325             : 
   65326             :           /// \private
   65327             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   65328             :           /// \private
   65329             :           static void resetValidFreepointers(); //
   65330             :           /// \private
   65331             :           static unsigned long getNumberOfLastValidPointer(); //
   65332             : 
   65333             : 
   65334             : #if defined(INLINE_FUNCTIONS)
   65335             :       /*! \brief returns pointer to newly allocated IR node */
   65336             :           inline void *operator new (size_t size);
   65337             : #else
   65338             :       /*! \brief returns pointer to newly allocated IR node */
   65339             :           void *operator new (size_t size);
   65340             : #endif
   65341             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   65342             :           void operator delete (void* pointer, size_t size);
   65343             : 
   65344             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   65345       28132 :           void operator delete (void* pointer)
   65346             :              {
   65347             :             // This is the generated delete operator...
   65348       28132 :                SgTypeEllipse::operator delete (pointer,sizeof(SgTypeEllipse));
   65349             :              }
   65350             : 
   65351             :       /*! \brief Returns the total number of IR nodes of this type */
   65352             :           static size_t numberOfNodes();
   65353             : 
   65354             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   65355             :           static size_t memoryUsage();
   65356             : 
   65357             :       // End of scope which started in IR nodes specific code 
   65358             :       /* */
   65359             : 
   65360             :       /* name Internal Functions
   65361             :           \brief Internal functions ... incomplete-documentation
   65362             : 
   65363             :           These functions have been made public as part of the design, but they are suggested for internal use 
   65364             :           or by particularly knowledgeable users for specialized tools or applications.
   65365             : 
   65366             :           \internal We could not make these private because they are required by user for special purposes. And 
   65367             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   65368             :          
   65369             :        */
   65370             : 
   65371             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   65372             :        // overridden in every class by *generated* implementation
   65373             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   65374             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   65375             :        // MS: 06/28/02 container of names of variables or container indices 
   65376             :        // used used in the traversal to access AST successor nodes
   65377             :        // overridden in every class by *generated* implementation
   65378             :       /*! \brief container of names of variables or container indices used used in the traversal
   65379             :           to access AST successor nodes overridden in every class by *generated* implementation */
   65380             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   65381             : 
   65382             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   65383             :        // than all the vector copies. The implementation for these functions is generated for each class.
   65384             :       /*! \brief return number of children in the traversal successor list */
   65385             :           virtual size_t get_numberOfTraversalSuccessors() override;
   65386             :       /*! \brief index-based access to traversal successors by index number */
   65387             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   65388             :       /*! \brief index-based access to traversal successors by child node */
   65389             :           virtual size_t get_childIndex(SgNode *child) override;
   65390             : 
   65391             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   65392             :        // MS: 08/16/2002 method for generating RTI information
   65393             :       /*! \brief return C++ Runtime-Time-Information */
   65394             :           virtual RTIReturnType roseRTI() override;
   65395             : #endif
   65396             :       /* */
   65397             : 
   65398             : 
   65399             : 
   65400             :       /* name Deprecated Functions
   65401             :           \brief Deprecated functions ... incomplete-documentation
   65402             : 
   65403             :           These functions have been deprecated from use.
   65404             :        */
   65405             :       /* */
   65406             : 
   65407             :       /*! returns a C style string (char*) representing the class name */
   65408             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   65409             : 
   65410             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   65411             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   65412             : #if 0
   65413             :       /*! returns old style Sage II enum values */
   65414             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   65415             :       /*! returns old style Sage II enum values */
   65416             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   65417             : #endif
   65418             :       /* */
   65419             : 
   65420             : 
   65421             : 
   65422             : 
   65423             :      public:
   65424             :       /* name Traversal Support Functions
   65425             :           \brief Traversal support functions ... incomplete-documentation
   65426             : 
   65427             :           These functions have been made public as part of the design, but they are suggested for internal use 
   65428             :           or by particularly knowledgable users for specialized tools or applications.
   65429             :        */
   65430             :       /* */
   65431             : 
   65432             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   65433             :        // (inferior to ROSE traversal mechanism, experimental).
   65434             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   65435             :        */
   65436             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   65437             : 
   65438             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   65439             :       /*! \brief support for the classic visitor pattern done in GoF */
   65440             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   65441             : 
   65442             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   65443             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   65444             :        */
   65445             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   65446             : 
   65447             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   65448             :        */
   65449             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   65450             : 
   65451             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   65452             :        // This traversal helps support internal tools that call static member functions.
   65453             :        // note: this function operates on the memory pools.
   65454             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   65455             :        */
   65456             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   65457             :       /* */
   65458             : 
   65459             : 
   65460             :      public:
   65461             :       /* name Memory Allocation Functions
   65462             :           \brief Memory allocations functions ... incomplete-documentation
   65463             : 
   65464             :           These functions have been made public as part of the design, but they are suggested for internal use 
   65465             :           or by particularly knowledgable users for specialized tools or applications.
   65466             :        */
   65467             :       /* */
   65468             : 
   65469             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   65470             : 
   65471             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   65472             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   65473             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   65474             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   65475             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   65476             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   65477             :           being used with the AST File I/O mechanism.
   65478             :        */
   65479             :           virtual bool isInMemoryPool() override;
   65480             : 
   65481             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   65482             : 
   65483             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   65484             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   65485             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   65486             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   65487             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   65488             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   65489             :           being used with the AST File I/O mechanism.
   65490             :        */
   65491             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   65492             : 
   65493             :       // DQ (4/30/2006): Modified to be a const function.
   65494             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   65495             : 
   65496             :           This functions is part of general support for many possible tools to operate 
   65497             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   65498             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   65499             :           less than the set of pointers used by the AST file I/O. This is part of
   65500             :           work implemented by Andreas, and support tools such as the AST graph generation.
   65501             : 
   65502             :           \warning This function can return unexpected data members and thus the 
   65503             :                    order and the number of elements is unpredicable and subject 
   65504             :                    to change.
   65505             : 
   65506             :           \returns STL vector of pairs of SgNode* and strings
   65507             :        */
   65508             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   65509             : 
   65510             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   65511             : 
   65512             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   65513             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   65514             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   65515             : 
   65516             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   65517             :                    and subject to change.
   65518             :        */
   65519             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   65520             : 
   65521             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   65522             : 
   65523             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   65524             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   65525             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   65526             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   65527             : 
   65528             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   65529             : 
   65530             :           \returns long
   65531             :        */
   65532             :           virtual long getChildIndex( SgNode* childNode ) const override;
   65533             : 
   65534             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   65535             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   65536             :       /* \brief Constructor for use by AST File I/O Mechanism
   65537             : 
   65538             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   65539             :           which obtained via fast binary file I/O from disk.
   65540             :        */
   65541             :        // SgTypeEllipse( SgTypeEllipseStorageClass& source );
   65542             : 
   65543             : 
   65544             : 
   65545             : 
   65546             : 
   65547             :  // JH (10/24/2005): methods added to support the ast file IO
   65548             :     private:
   65549             : 
   65550             :       /* name AST Memory Allocation Support Functions
   65551             :           \brief Memory allocations support....
   65552             : 
   65553             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   65554             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   65555             :           and support the AST File I/O Mechanism.
   65556             :        */
   65557             :       /* */
   65558             : 
   65559             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   65560             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   65561             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   65562             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   65563             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   65564             :           a correspinding one in the AST_FILE_IO class!
   65565             :        */
   65566             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   65567             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   65568             :       /* \brief Typedef used for low level memory access.
   65569             :        */
   65570             :        // typedef unsigned char* TestType;
   65571             : 
   65572             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   65573             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   65574             :       /* \brief Typedef used to hold memory addresses as values.
   65575             :        */
   65576             :        // typedef unsigned long  AddressType;
   65577             : 
   65578             : 
   65579             : 
   65580             :        // necessary, to have direct access to the p_freepointer and the private methods !
   65581             :       /*! \brief friend class declaration to support AST File I/O */
   65582             :           friend class AST_FILE_IO;
   65583             : 
   65584             :       /*! \brief friend class declaration to support AST File I/O */
   65585             :           friend class SgTypeEllipseStorageClass;
   65586             : 
   65587             :       /*! \brief friend class declaration to support AST File I/O */
   65588             :           friend class AstSpecificDataManagingClass;
   65589             : 
   65590             :       /*! \brief friend class declaration to support AST File I/O */
   65591             :           friend class AstSpecificDataManagingClassStorageClass;
   65592             :     public:
   65593             :       /*! \brief IR node constructor to support AST File I/O */
   65594             :           SgTypeEllipse( const SgTypeEllipseStorageClass& source );
   65595             : 
   65596             :  // private: // JJW hack
   65597             :        /*
   65598             :           name AST Memory Allocation Support Variables
   65599             :           Memory allocations support variables 
   65600             : 
   65601             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   65602             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   65603             :           and support the AST File I/O Mechanism.
   65604             :        */
   65605             :       /* */
   65606             : 
   65607             :     public:
   65608             : 
   65609             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   65610             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   65611             :       // virtual SgNode* addRegExpAttribute();
   65612             :       /*! \brief Support for AST matching using regular expression.
   65613             : 
   65614             :           This support is incomplete and the subject of current research to define 
   65615             :           RegEx trees to support inexact matching.
   65616             :        */
   65617             :           SgTypeEllipse* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   65618             : 
   65619             : // *** COMMON CODE SECTION ENDS HERE ***
   65620             : 
   65621             : 
   65622             : // End of memberFunctionString
   65623             : // Start of memberFunctionString
   65624             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   65625             : 
   65626             :      // the generated cast function
   65627             :      // friend ROSE_DLL_API SgTypeEllipse* isSgTypeEllipse ( SgNode* s );
   65628             : 
   65629             :           typedef SgType base_node_type;
   65630             : 
   65631             : 
   65632             : // End of memberFunctionString
   65633             : // Start of memberFunctionString
   65634             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   65635             : 
   65636             :        // SgName get_mangled ( SgUnparse_Info & info );
   65637             : 
   65638             :       //! Mangled name support for unparser support
   65639             :        // SgName get_mangled ( SgUnparse_Info & info );
   65640             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   65641             :           virtual SgName get_mangled (void) const override;
   65642             : 
   65643             : 
   65644             : 
   65645             : // End of memberFunctionString
   65646             : // Start of memberFunctionString
   65647             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   65648             : 
   65649             :       //! example of type used where construction is particularly simple
   65650             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   65651             :        // static SgTypeEllipse builtin_type;
   65652             :        // static SgTypeEllipse* builtin_type;
   65653             : 
   65654             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   65655             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   65656             :        // own data member and associated access function.
   65657             :        // static SgTypeEllipse* get_builtin_type();
   65658             : 
   65659             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   65660             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   65661             :        // own data member and associated access function.
   65662             :        // static void set_builtin_type(SgTypeEllipse* builtin_type);
   65663             : 
   65664             :       //! function returns example of type
   65665             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   65666             :        // static SgTypeEllipse* createType(void);
   65667             :           static SgTypeEllipse* createType(SgExpression* optional_fortran_type_kind = NULL);
   65668             : 
   65669             : 
   65670             : // End of memberFunctionString
   65671             : 
   65672             : 
   65673             : 
   65674             :      public: 
   65675             :          virtual ~SgTypeEllipse();
   65676             : 
   65677             : 
   65678             :      public: 
   65679             :          SgTypeEllipse(); 
   65680             : 
   65681             :     protected:
   65682             : // Start of memberFunctionString
   65683             : static SgTypeEllipse* p_builtin_type;
   65684             :           
   65685             : // End of memberFunctionString
   65686             : 
   65687             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeEllipse>;
   65688             : 
   65689             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65690             : 
   65691             : 
   65692             :    };
   65693             : #endif
   65694             : 
   65695             : // postdeclarations for SgTypeEllipse
   65696             : 
   65697             : /* #line 65698 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65698             : 
   65699             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   65700             : 
   65701             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65702             : 
   65703             : 
   65704             : /* #line 65705 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65705             : 
   65706             : 
   65707             : 
   65708             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65709             : 
   65710             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   65711             : //      This code is automatically generated for each 
   65712             : //      terminal and non-terminal within the defined 
   65713             : //      grammar.  There is a simple way to change the 
   65714             : //      code to fix bugs etc.  See the ROSE README file
   65715             : //      for directions.
   65716             : 
   65717             : // tps: (02/22/2010): Adding DLL export requirements
   65718             : #include "rosedll.h"
   65719             : 
   65720             : // predeclarations for SgTemplateType
   65721             : 
   65722             : /* #line 65723 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65723             : 
   65724             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   65725             : 
   65726             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   65727             : 
   65728             : #if 1
   65729             : // Class Definition for SgTemplateType
   65730             : class ROSE_DLL_API SgTemplateType  : public SgType
   65731             :    {
   65732             :      public:
   65733             : 
   65734             : 
   65735             : /* #line 65736 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   65736             : 
   65737             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   65738             : // Start of memberFunctionString
   65739             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   65740             : 
   65741             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   65742             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   65743             :        // own data member and associated access function.
   65744             :        // static SgTemplateType* get_builtin_type();
   65745             : 
   65746             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   65747             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   65748             :        // own data member and associated access function.
   65749             :        // static void set_builtin_type(SgTemplateType* builtin_type);
   65750             : 
   65751             :       //! more sophisticated version for more complex types like SgTemplateType (types whose constructors take parameters)
   65752             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   65753             :        // static SgTemplateType* createType(SgTemplateDeclaration* decl = NULL);
   65754             :           static SgTemplateType* createType(SgTemplateDeclaration* decl = NULL, SgExpression* optional_fortran_type_kind = NULL);
   65755             : 
   65756             : 
   65757             : // End of memberFunctionString
   65758             : // Start of memberFunctionString
   65759             : /* #line 413 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   65760             : 
   65761             : 
   65762             : 
   65763             : // End of memberFunctionString
   65764             : // Start of memberFunctionString
   65765             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   65766             : 
   65767             : // *** COMMON CODE SECTION BEGINS HERE ***
   65768             : 
   65769             :     public:
   65770             : 
   65771             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   65772             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   65773             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   65774             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   65775             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   65776             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   65777             : 
   65778             :       /*! \brief returns a string representing the class name */
   65779             :           virtual std::string class_name() const override;
   65780             : 
   65781             :       /*! \brief returns new style SageIII enum values */
   65782             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   65783             : 
   65784             :       /*! \brief static variant value */
   65785             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   65786             :        // static const VariantT static_variant = V_SgTemplateType;
   65787             :           enum { static_variant = V_SgTemplateType };
   65788             : 
   65789             :        /* the generated cast function */
   65790             :       /*! \brief Casts pointer from base class to derived class */
   65791             :           ROSE_DLL_API friend       SgTemplateType* isSgTemplateType(       SgNode * s );
   65792             : 
   65793             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   65794             :           ROSE_DLL_API friend const SgTemplateType* isSgTemplateType( const SgNode * s );
   65795             : 
   65796             :      // ******************************************
   65797             :      // * Memory Pool / New / Delete
   65798             :      // ******************************************
   65799             : 
   65800             :      public:
   65801             :           /// \private
   65802             :           static const unsigned pool_size; //
   65803             :           /// \private
   65804             :           static std::vector<unsigned char *> pools; //
   65805             :           /// \private
   65806             :           static SgTemplateType * next_node; // 
   65807             : 
   65808             :           /// \private
   65809             :           static unsigned long initializeStorageClassArray(SgTemplateTypeStorageClass *); //
   65810             : 
   65811             :           /// \private
   65812             :           static void clearMemoryPool(); //
   65813             :           static void deleteMemoryPool(); //
   65814             : 
   65815             :           /// \private
   65816             :           static void extendMemoryPoolForFileIO(); //
   65817             : 
   65818             :           /// \private
   65819             :           static SgTemplateType * getPointerFromGlobalIndex(unsigned long); //
   65820             :           /// \private
   65821             :           static SgTemplateType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   65822             : 
   65823             :           /// \private
   65824             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   65825             :           /// \private
   65826             :           static void resetValidFreepointers(); //
   65827             :           /// \private
   65828             :           static unsigned long getNumberOfLastValidPointer(); //
   65829             : 
   65830             : 
   65831             : #if defined(INLINE_FUNCTIONS)
   65832             :       /*! \brief returns pointer to newly allocated IR node */
   65833             :           inline void *operator new (size_t size);
   65834             : #else
   65835             :       /*! \brief returns pointer to newly allocated IR node */
   65836             :           void *operator new (size_t size);
   65837             : #endif
   65838             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   65839             :           void operator delete (void* pointer, size_t size);
   65840             : 
   65841             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   65842           0 :           void operator delete (void* pointer)
   65843             :              {
   65844             :             // This is the generated delete operator...
   65845           0 :                SgTemplateType::operator delete (pointer,sizeof(SgTemplateType));
   65846             :              }
   65847             : 
   65848             :       /*! \brief Returns the total number of IR nodes of this type */
   65849             :           static size_t numberOfNodes();
   65850             : 
   65851             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   65852             :           static size_t memoryUsage();
   65853             : 
   65854             :       // End of scope which started in IR nodes specific code 
   65855             :       /* */
   65856             : 
   65857             :       /* name Internal Functions
   65858             :           \brief Internal functions ... incomplete-documentation
   65859             : 
   65860             :           These functions have been made public as part of the design, but they are suggested for internal use 
   65861             :           or by particularly knowledgeable users for specialized tools or applications.
   65862             : 
   65863             :           \internal We could not make these private because they are required by user for special purposes. And 
   65864             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   65865             :          
   65866             :        */
   65867             : 
   65868             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   65869             :        // overridden in every class by *generated* implementation
   65870             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   65871             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   65872             :        // MS: 06/28/02 container of names of variables or container indices 
   65873             :        // used used in the traversal to access AST successor nodes
   65874             :        // overridden in every class by *generated* implementation
   65875             :       /*! \brief container of names of variables or container indices used used in the traversal
   65876             :           to access AST successor nodes overridden in every class by *generated* implementation */
   65877             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   65878             : 
   65879             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   65880             :        // than all the vector copies. The implementation for these functions is generated for each class.
   65881             :       /*! \brief return number of children in the traversal successor list */
   65882             :           virtual size_t get_numberOfTraversalSuccessors() override;
   65883             :       /*! \brief index-based access to traversal successors by index number */
   65884             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   65885             :       /*! \brief index-based access to traversal successors by child node */
   65886             :           virtual size_t get_childIndex(SgNode *child) override;
   65887             : 
   65888             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   65889             :        // MS: 08/16/2002 method for generating RTI information
   65890             :       /*! \brief return C++ Runtime-Time-Information */
   65891             :           virtual RTIReturnType roseRTI() override;
   65892             : #endif
   65893             :       /* */
   65894             : 
   65895             : 
   65896             : 
   65897             :       /* name Deprecated Functions
   65898             :           \brief Deprecated functions ... incomplete-documentation
   65899             : 
   65900             :           These functions have been deprecated from use.
   65901             :        */
   65902             :       /* */
   65903             : 
   65904             :       /*! returns a C style string (char*) representing the class name */
   65905             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   65906             : 
   65907             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   65908             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   65909             : #if 0
   65910             :       /*! returns old style Sage II enum values */
   65911             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   65912             :       /*! returns old style Sage II enum values */
   65913             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   65914             : #endif
   65915             :       /* */
   65916             : 
   65917             : 
   65918             : 
   65919             : 
   65920             :      public:
   65921             :       /* name Traversal Support Functions
   65922             :           \brief Traversal support functions ... incomplete-documentation
   65923             : 
   65924             :           These functions have been made public as part of the design, but they are suggested for internal use 
   65925             :           or by particularly knowledgable users for specialized tools or applications.
   65926             :        */
   65927             :       /* */
   65928             : 
   65929             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   65930             :        // (inferior to ROSE traversal mechanism, experimental).
   65931             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   65932             :        */
   65933             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   65934             : 
   65935             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   65936             :       /*! \brief support for the classic visitor pattern done in GoF */
   65937             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   65938             : 
   65939             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   65940             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   65941             :        */
   65942             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   65943             : 
   65944             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   65945             :        */
   65946             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   65947             : 
   65948             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   65949             :        // This traversal helps support internal tools that call static member functions.
   65950             :        // note: this function operates on the memory pools.
   65951             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   65952             :        */
   65953             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   65954             :       /* */
   65955             : 
   65956             : 
   65957             :      public:
   65958             :       /* name Memory Allocation Functions
   65959             :           \brief Memory allocations functions ... incomplete-documentation
   65960             : 
   65961             :           These functions have been made public as part of the design, but they are suggested for internal use 
   65962             :           or by particularly knowledgable users for specialized tools or applications.
   65963             :        */
   65964             :       /* */
   65965             : 
   65966             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   65967             : 
   65968             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   65969             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   65970             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   65971             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   65972             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   65973             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   65974             :           being used with the AST File I/O mechanism.
   65975             :        */
   65976             :           virtual bool isInMemoryPool() override;
   65977             : 
   65978             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   65979             : 
   65980             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   65981             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   65982             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   65983             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   65984             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   65985             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   65986             :           being used with the AST File I/O mechanism.
   65987             :        */
   65988             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   65989             : 
   65990             :       // DQ (4/30/2006): Modified to be a const function.
   65991             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   65992             : 
   65993             :           This functions is part of general support for many possible tools to operate 
   65994             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   65995             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   65996             :           less than the set of pointers used by the AST file I/O. This is part of
   65997             :           work implemented by Andreas, and support tools such as the AST graph generation.
   65998             : 
   65999             :           \warning This function can return unexpected data members and thus the 
   66000             :                    order and the number of elements is unpredicable and subject 
   66001             :                    to change.
   66002             : 
   66003             :           \returns STL vector of pairs of SgNode* and strings
   66004             :        */
   66005             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   66006             : 
   66007             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   66008             : 
   66009             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   66010             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   66011             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   66012             : 
   66013             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   66014             :                    and subject to change.
   66015             :        */
   66016             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   66017             : 
   66018             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   66019             : 
   66020             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   66021             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   66022             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   66023             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   66024             : 
   66025             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   66026             : 
   66027             :           \returns long
   66028             :        */
   66029             :           virtual long getChildIndex( SgNode* childNode ) const override;
   66030             : 
   66031             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   66032             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   66033             :       /* \brief Constructor for use by AST File I/O Mechanism
   66034             : 
   66035             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   66036             :           which obtained via fast binary file I/O from disk.
   66037             :        */
   66038             :        // SgTemplateType( SgTemplateTypeStorageClass& source );
   66039             : 
   66040             : 
   66041             : 
   66042             : 
   66043             : 
   66044             :  // JH (10/24/2005): methods added to support the ast file IO
   66045             :     private:
   66046             : 
   66047             :       /* name AST Memory Allocation Support Functions
   66048             :           \brief Memory allocations support....
   66049             : 
   66050             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   66051             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   66052             :           and support the AST File I/O Mechanism.
   66053             :        */
   66054             :       /* */
   66055             : 
   66056             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   66057             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   66058             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   66059             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   66060             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   66061             :           a correspinding one in the AST_FILE_IO class!
   66062             :        */
   66063             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   66064             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   66065             :       /* \brief Typedef used for low level memory access.
   66066             :        */
   66067             :        // typedef unsigned char* TestType;
   66068             : 
   66069             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   66070             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   66071             :       /* \brief Typedef used to hold memory addresses as values.
   66072             :        */
   66073             :        // typedef unsigned long  AddressType;
   66074             : 
   66075             : 
   66076             : 
   66077             :        // necessary, to have direct access to the p_freepointer and the private methods !
   66078             :       /*! \brief friend class declaration to support AST File I/O */
   66079             :           friend class AST_FILE_IO;
   66080             : 
   66081             :       /*! \brief friend class declaration to support AST File I/O */
   66082             :           friend class SgTemplateTypeStorageClass;
   66083             : 
   66084             :       /*! \brief friend class declaration to support AST File I/O */
   66085             :           friend class AstSpecificDataManagingClass;
   66086             : 
   66087             :       /*! \brief friend class declaration to support AST File I/O */
   66088             :           friend class AstSpecificDataManagingClassStorageClass;
   66089             :     public:
   66090             :       /*! \brief IR node constructor to support AST File I/O */
   66091             :           SgTemplateType( const SgTemplateTypeStorageClass& source );
   66092             : 
   66093             :  // private: // JJW hack
   66094             :        /*
   66095             :           name AST Memory Allocation Support Variables
   66096             :           Memory allocations support variables 
   66097             : 
   66098             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   66099             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   66100             :           and support the AST File I/O Mechanism.
   66101             :        */
   66102             :       /* */
   66103             : 
   66104             :     public:
   66105             : 
   66106             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   66107             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   66108             :       // virtual SgNode* addRegExpAttribute();
   66109             :       /*! \brief Support for AST matching using regular expression.
   66110             : 
   66111             :           This support is incomplete and the subject of current research to define 
   66112             :           RegEx trees to support inexact matching.
   66113             :        */
   66114             :           SgTemplateType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   66115             : 
   66116             : // *** COMMON CODE SECTION ENDS HERE ***
   66117             : 
   66118             : 
   66119             : // End of memberFunctionString
   66120             : // Start of memberFunctionString
   66121             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   66122             : 
   66123             :      // the generated cast function
   66124             :      // friend ROSE_DLL_API SgTemplateType* isSgTemplateType ( SgNode* s );
   66125             : 
   66126             :           typedef SgType base_node_type;
   66127             : 
   66128             : 
   66129             : // End of memberFunctionString
   66130             : // Start of memberFunctionString
   66131             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   66132             : 
   66133             :        // SgName get_mangled ( SgUnparse_Info & info );
   66134             : 
   66135             :       //! Mangled name support for unparser support
   66136             :        // SgName get_mangled ( SgUnparse_Info & info );
   66137             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   66138             :           virtual SgName get_mangled (void) const override;
   66139             : 
   66140             : 
   66141             : 
   66142             : // End of memberFunctionString
   66143             : 
   66144             :      public: 
   66145             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
   66146             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
   66147             : 
   66148             :      public: 
   66149             :          int get_template_parameter_position() const;
   66150             :          void set_template_parameter_position(int template_parameter_position);
   66151             : 
   66152             :      public: 
   66153             :          int get_template_parameter_depth() const;
   66154             :          void set_template_parameter_depth(int template_parameter_depth);
   66155             : 
   66156             :      public: 
   66157             :          SgType * get_class_type() const;
   66158             :          void set_class_type(SgType * class_type);
   66159             : 
   66160             :      public: 
   66161             :          SgType * get_parent_class_type() const;
   66162             :          void set_parent_class_type(SgType * parent_class_type);
   66163             : 
   66164             :      public: 
   66165             :          SgTemplateParameter * get_template_parameter() const;
   66166             :          void set_template_parameter(SgTemplateParameter * template_parameter);
   66167             : 
   66168             :      public: 
   66169             :          const SgTemplateArgumentPtrList&  get_tpl_args() const;
   66170             :          SgTemplateArgumentPtrList& get_tpl_args(); 
   66171             : 
   66172             :      public: 
   66173             :          const SgTemplateArgumentPtrList&  get_part_spec_tpl_args() const;
   66174             :          SgTemplateArgumentPtrList& get_part_spec_tpl_args(); 
   66175             : 
   66176             :      public: 
   66177             :          bool get_packed() const;
   66178             :          void set_packed(bool packed);
   66179             : 
   66180             : 
   66181             :      public: 
   66182             :          virtual ~SgTemplateType();
   66183             : 
   66184             : 
   66185             :      public: 
   66186             :          SgTemplateType(SgName name = ""); 
   66187             : 
   66188             :     protected:
   66189             : // Start of memberFunctionString
   66190             : SgName p_name;
   66191             :           
   66192             : // End of memberFunctionString
   66193             : // Start of memberFunctionString
   66194             : int p_template_parameter_position;
   66195             :           
   66196             : // End of memberFunctionString
   66197             : // Start of memberFunctionString
   66198             : int p_template_parameter_depth;
   66199             :           
   66200             : // End of memberFunctionString
   66201             : // Start of memberFunctionString
   66202             : SgType * p_class_type;
   66203             :           
   66204             : // End of memberFunctionString
   66205             : // Start of memberFunctionString
   66206             : SgType * p_parent_class_type;
   66207             :           
   66208             : // End of memberFunctionString
   66209             : // Start of memberFunctionString
   66210             : SgTemplateParameter * p_template_parameter;
   66211             :           
   66212             : // End of memberFunctionString
   66213             : // Start of memberFunctionString
   66214             : SgTemplateArgumentPtrList p_tpl_args;
   66215             :           
   66216             : // End of memberFunctionString
   66217             : // Start of memberFunctionString
   66218             : SgTemplateArgumentPtrList p_part_spec_tpl_args;
   66219             :           
   66220             : // End of memberFunctionString
   66221             : // Start of memberFunctionString
   66222             : bool p_packed;
   66223             :           
   66224             : // End of memberFunctionString
   66225             : 
   66226             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateType>;
   66227             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, SgName,&SgTemplateType::p_name>;
   66228             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, int,&SgTemplateType::p_template_parameter_position>;
   66229             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, int,&SgTemplateType::p_template_parameter_depth>;
   66230             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, SgType *,&SgTemplateType::p_class_type>;
   66231             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, SgType *,&SgTemplateType::p_parent_class_type>;
   66232             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, SgTemplateParameter *,&SgTemplateType::p_template_parameter>;
   66233             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, SgTemplateArgumentPtrList,&SgTemplateType::p_tpl_args>;
   66234             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, SgTemplateArgumentPtrList,&SgTemplateType::p_part_spec_tpl_args>;
   66235             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateType, bool,&SgTemplateType::p_packed>;
   66236             : 
   66237             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66238             : 
   66239             : 
   66240             :    };
   66241             : #endif
   66242             : 
   66243             : // postdeclarations for SgTemplateType
   66244             : 
   66245             : /* #line 66246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66246             : 
   66247             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   66248             : 
   66249             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66250             : 
   66251             : 
   66252             : /* #line 66253 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66253             : 
   66254             : 
   66255             : 
   66256             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66257             : 
   66258             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   66259             : //      This code is automatically generated for each 
   66260             : //      terminal and non-terminal within the defined 
   66261             : //      grammar.  There is a simple way to change the 
   66262             : //      code to fix bugs etc.  See the ROSE README file
   66263             : //      for directions.
   66264             : 
   66265             : // tps: (02/22/2010): Adding DLL export requirements
   66266             : #include "rosedll.h"
   66267             : 
   66268             : // predeclarations for SgQualifiedNameType
   66269             : 
   66270             : /* #line 66271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66271             : 
   66272             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   66273             : 
   66274             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66275             : 
   66276             : #if 1
   66277             : // Class Definition for SgQualifiedNameType
   66278             : class ROSE_DLL_API SgQualifiedNameType  : public SgType
   66279             :    {
   66280             :      public:
   66281             : 
   66282             : 
   66283             : /* #line 66284 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66284             : 
   66285             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   66286             : // Start of memberFunctionString
   66287             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   66288             : 
   66289             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   66290             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   66291             :        // own data member and associated access function.
   66292             :        // static SgQualifiedNameType* get_builtin_type();
   66293             : 
   66294             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   66295             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   66296             :        // own data member and associated access function.
   66297             :        // static void set_builtin_type(SgQualifiedNameType* builtin_type);
   66298             : 
   66299             :       //! more sophisticated version for more complex types like SgQualifiedNameType (types whose constructors take parameters)
   66300             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   66301             :        // static SgQualifiedNameType* createType(SgType* type = NULL, unsigned int x = 0);
   66302             :           static SgQualifiedNameType* createType(SgType* type = NULL, unsigned int x = 0, SgExpression* optional_fortran_type_kind = NULL);
   66303             : 
   66304             : 
   66305             : // End of memberFunctionString
   66306             : // Start of memberFunctionString
   66307             : /* #line 732 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   66308             : 
   66309             :           SgName get_prefix() const;
   66310             : 
   66311             :        // SgName get_mangled (void) const;
   66312             : 
   66313             :        // DQ (10/10/2006): Handle qualified name list at the declarations directly, instead of at the types.
   66314             :        // At present these are useful for SgVariableDeclaration and SgTypedefDeclaration, but likely others
   66315             :        // at some point.
   66316             :           SgQualifiedNamePtrList & get_qualifiedNameList();
   66317             :           const SgQualifiedNamePtrList & get_qualifiedNameList() const;
   66318             :           void set_qualifiedNameList( const SgQualifiedNamePtrList & x );
   66319             : 
   66320             : 
   66321             : 
   66322             : // End of memberFunctionString
   66323             : // Start of memberFunctionString
   66324             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   66325             : 
   66326             : // *** COMMON CODE SECTION BEGINS HERE ***
   66327             : 
   66328             :     public:
   66329             : 
   66330             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   66331             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   66332             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   66333             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   66334             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   66335             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   66336             : 
   66337             :       /*! \brief returns a string representing the class name */
   66338             :           virtual std::string class_name() const override;
   66339             : 
   66340             :       /*! \brief returns new style SageIII enum values */
   66341             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   66342             : 
   66343             :       /*! \brief static variant value */
   66344             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   66345             :        // static const VariantT static_variant = V_SgQualifiedNameType;
   66346             :           enum { static_variant = V_SgQualifiedNameType };
   66347             : 
   66348             :        /* the generated cast function */
   66349             :       /*! \brief Casts pointer from base class to derived class */
   66350             :           ROSE_DLL_API friend       SgQualifiedNameType* isSgQualifiedNameType(       SgNode * s );
   66351             : 
   66352             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   66353             :           ROSE_DLL_API friend const SgQualifiedNameType* isSgQualifiedNameType( const SgNode * s );
   66354             : 
   66355             :      // ******************************************
   66356             :      // * Memory Pool / New / Delete
   66357             :      // ******************************************
   66358             : 
   66359             :      public:
   66360             :           /// \private
   66361             :           static const unsigned pool_size; //
   66362             :           /// \private
   66363             :           static std::vector<unsigned char *> pools; //
   66364             :           /// \private
   66365             :           static SgQualifiedNameType * next_node; // 
   66366             : 
   66367             :           /// \private
   66368             :           static unsigned long initializeStorageClassArray(SgQualifiedNameTypeStorageClass *); //
   66369             : 
   66370             :           /// \private
   66371             :           static void clearMemoryPool(); //
   66372             :           static void deleteMemoryPool(); //
   66373             : 
   66374             :           /// \private
   66375             :           static void extendMemoryPoolForFileIO(); //
   66376             : 
   66377             :           /// \private
   66378             :           static SgQualifiedNameType * getPointerFromGlobalIndex(unsigned long); //
   66379             :           /// \private
   66380             :           static SgQualifiedNameType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   66381             : 
   66382             :           /// \private
   66383             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   66384             :           /// \private
   66385             :           static void resetValidFreepointers(); //
   66386             :           /// \private
   66387             :           static unsigned long getNumberOfLastValidPointer(); //
   66388             : 
   66389             : 
   66390             : #if defined(INLINE_FUNCTIONS)
   66391             :       /*! \brief returns pointer to newly allocated IR node */
   66392             :           inline void *operator new (size_t size);
   66393             : #else
   66394             :       /*! \brief returns pointer to newly allocated IR node */
   66395             :           void *operator new (size_t size);
   66396             : #endif
   66397             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   66398             :           void operator delete (void* pointer, size_t size);
   66399             : 
   66400             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   66401           0 :           void operator delete (void* pointer)
   66402             :              {
   66403             :             // This is the generated delete operator...
   66404           0 :                SgQualifiedNameType::operator delete (pointer,sizeof(SgQualifiedNameType));
   66405             :              }
   66406             : 
   66407             :       /*! \brief Returns the total number of IR nodes of this type */
   66408             :           static size_t numberOfNodes();
   66409             : 
   66410             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   66411             :           static size_t memoryUsage();
   66412             : 
   66413             :       // End of scope which started in IR nodes specific code 
   66414             :       /* */
   66415             : 
   66416             :       /* name Internal Functions
   66417             :           \brief Internal functions ... incomplete-documentation
   66418             : 
   66419             :           These functions have been made public as part of the design, but they are suggested for internal use 
   66420             :           or by particularly knowledgeable users for specialized tools or applications.
   66421             : 
   66422             :           \internal We could not make these private because they are required by user for special purposes. And 
   66423             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   66424             :          
   66425             :        */
   66426             : 
   66427             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   66428             :        // overridden in every class by *generated* implementation
   66429             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   66430             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   66431             :        // MS: 06/28/02 container of names of variables or container indices 
   66432             :        // used used in the traversal to access AST successor nodes
   66433             :        // overridden in every class by *generated* implementation
   66434             :       /*! \brief container of names of variables or container indices used used in the traversal
   66435             :           to access AST successor nodes overridden in every class by *generated* implementation */
   66436             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   66437             : 
   66438             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   66439             :        // than all the vector copies. The implementation for these functions is generated for each class.
   66440             :       /*! \brief return number of children in the traversal successor list */
   66441             :           virtual size_t get_numberOfTraversalSuccessors() override;
   66442             :       /*! \brief index-based access to traversal successors by index number */
   66443             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   66444             :       /*! \brief index-based access to traversal successors by child node */
   66445             :           virtual size_t get_childIndex(SgNode *child) override;
   66446             : 
   66447             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   66448             :        // MS: 08/16/2002 method for generating RTI information
   66449             :       /*! \brief return C++ Runtime-Time-Information */
   66450             :           virtual RTIReturnType roseRTI() override;
   66451             : #endif
   66452             :       /* */
   66453             : 
   66454             : 
   66455             : 
   66456             :       /* name Deprecated Functions
   66457             :           \brief Deprecated functions ... incomplete-documentation
   66458             : 
   66459             :           These functions have been deprecated from use.
   66460             :        */
   66461             :       /* */
   66462             : 
   66463             :       /*! returns a C style string (char*) representing the class name */
   66464             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   66465             : 
   66466             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   66467             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   66468             : #if 0
   66469             :       /*! returns old style Sage II enum values */
   66470             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   66471             :       /*! returns old style Sage II enum values */
   66472             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   66473             : #endif
   66474             :       /* */
   66475             : 
   66476             : 
   66477             : 
   66478             : 
   66479             :      public:
   66480             :       /* name Traversal Support Functions
   66481             :           \brief Traversal support functions ... incomplete-documentation
   66482             : 
   66483             :           These functions have been made public as part of the design, but they are suggested for internal use 
   66484             :           or by particularly knowledgable users for specialized tools or applications.
   66485             :        */
   66486             :       /* */
   66487             : 
   66488             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   66489             :        // (inferior to ROSE traversal mechanism, experimental).
   66490             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   66491             :        */
   66492             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   66493             : 
   66494             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   66495             :       /*! \brief support for the classic visitor pattern done in GoF */
   66496             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   66497             : 
   66498             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   66499             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   66500             :        */
   66501             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   66502             : 
   66503             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   66504             :        */
   66505             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   66506             : 
   66507             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   66508             :        // This traversal helps support internal tools that call static member functions.
   66509             :        // note: this function operates on the memory pools.
   66510             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   66511             :        */
   66512             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   66513             :       /* */
   66514             : 
   66515             : 
   66516             :      public:
   66517             :       /* name Memory Allocation Functions
   66518             :           \brief Memory allocations functions ... incomplete-documentation
   66519             : 
   66520             :           These functions have been made public as part of the design, but they are suggested for internal use 
   66521             :           or by particularly knowledgable users for specialized tools or applications.
   66522             :        */
   66523             :       /* */
   66524             : 
   66525             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   66526             : 
   66527             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   66528             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   66529             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   66530             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   66531             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   66532             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   66533             :           being used with the AST File I/O mechanism.
   66534             :        */
   66535             :           virtual bool isInMemoryPool() override;
   66536             : 
   66537             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   66538             : 
   66539             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   66540             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   66541             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   66542             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   66543             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   66544             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   66545             :           being used with the AST File I/O mechanism.
   66546             :        */
   66547             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   66548             : 
   66549             :       // DQ (4/30/2006): Modified to be a const function.
   66550             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   66551             : 
   66552             :           This functions is part of general support for many possible tools to operate 
   66553             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   66554             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   66555             :           less than the set of pointers used by the AST file I/O. This is part of
   66556             :           work implemented by Andreas, and support tools such as the AST graph generation.
   66557             : 
   66558             :           \warning This function can return unexpected data members and thus the 
   66559             :                    order and the number of elements is unpredicable and subject 
   66560             :                    to change.
   66561             : 
   66562             :           \returns STL vector of pairs of SgNode* and strings
   66563             :        */
   66564             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   66565             : 
   66566             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   66567             : 
   66568             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   66569             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   66570             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   66571             : 
   66572             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   66573             :                    and subject to change.
   66574             :        */
   66575             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   66576             : 
   66577             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   66578             : 
   66579             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   66580             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   66581             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   66582             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   66583             : 
   66584             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   66585             : 
   66586             :           \returns long
   66587             :        */
   66588             :           virtual long getChildIndex( SgNode* childNode ) const override;
   66589             : 
   66590             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   66591             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   66592             :       /* \brief Constructor for use by AST File I/O Mechanism
   66593             : 
   66594             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   66595             :           which obtained via fast binary file I/O from disk.
   66596             :        */
   66597             :        // SgQualifiedNameType( SgQualifiedNameTypeStorageClass& source );
   66598             : 
   66599             : 
   66600             : 
   66601             : 
   66602             : 
   66603             :  // JH (10/24/2005): methods added to support the ast file IO
   66604             :     private:
   66605             : 
   66606             :       /* name AST Memory Allocation Support Functions
   66607             :           \brief Memory allocations support....
   66608             : 
   66609             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   66610             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   66611             :           and support the AST File I/O Mechanism.
   66612             :        */
   66613             :       /* */
   66614             : 
   66615             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   66616             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   66617             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   66618             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   66619             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   66620             :           a correspinding one in the AST_FILE_IO class!
   66621             :        */
   66622             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   66623             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   66624             :       /* \brief Typedef used for low level memory access.
   66625             :        */
   66626             :        // typedef unsigned char* TestType;
   66627             : 
   66628             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   66629             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   66630             :       /* \brief Typedef used to hold memory addresses as values.
   66631             :        */
   66632             :        // typedef unsigned long  AddressType;
   66633             : 
   66634             : 
   66635             : 
   66636             :        // necessary, to have direct access to the p_freepointer and the private methods !
   66637             :       /*! \brief friend class declaration to support AST File I/O */
   66638             :           friend class AST_FILE_IO;
   66639             : 
   66640             :       /*! \brief friend class declaration to support AST File I/O */
   66641             :           friend class SgQualifiedNameTypeStorageClass;
   66642             : 
   66643             :       /*! \brief friend class declaration to support AST File I/O */
   66644             :           friend class AstSpecificDataManagingClass;
   66645             : 
   66646             :       /*! \brief friend class declaration to support AST File I/O */
   66647             :           friend class AstSpecificDataManagingClassStorageClass;
   66648             :     public:
   66649             :       /*! \brief IR node constructor to support AST File I/O */
   66650             :           SgQualifiedNameType( const SgQualifiedNameTypeStorageClass& source );
   66651             : 
   66652             :  // private: // JJW hack
   66653             :        /*
   66654             :           name AST Memory Allocation Support Variables
   66655             :           Memory allocations support variables 
   66656             : 
   66657             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   66658             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   66659             :           and support the AST File I/O Mechanism.
   66660             :        */
   66661             :       /* */
   66662             : 
   66663             :     public:
   66664             : 
   66665             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   66666             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   66667             :       // virtual SgNode* addRegExpAttribute();
   66668             :       /*! \brief Support for AST matching using regular expression.
   66669             : 
   66670             :           This support is incomplete and the subject of current research to define 
   66671             :           RegEx trees to support inexact matching.
   66672             :        */
   66673             :           SgQualifiedNameType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   66674             : 
   66675             : // *** COMMON CODE SECTION ENDS HERE ***
   66676             : 
   66677             : 
   66678             : // End of memberFunctionString
   66679             : // Start of memberFunctionString
   66680             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   66681             : 
   66682             :      // the generated cast function
   66683             :      // friend ROSE_DLL_API SgQualifiedNameType* isSgQualifiedNameType ( SgNode* s );
   66684             : 
   66685             :           typedef SgType base_node_type;
   66686             : 
   66687             : 
   66688             : // End of memberFunctionString
   66689             : // Start of memberFunctionString
   66690             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   66691             : 
   66692             :        // SgName get_mangled ( SgUnparse_Info & info );
   66693             : 
   66694             :       //! Mangled name support for unparser support
   66695             :        // SgName get_mangled ( SgUnparse_Info & info );
   66696             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   66697             :           virtual SgName get_mangled (void) const override;
   66698             : 
   66699             : 
   66700             : 
   66701             : // End of memberFunctionString
   66702             : 
   66703             :      public: 
   66704             :          SgType* get_base_type() const;
   66705             :          void set_base_type(SgType* base_type);
   66706             : 
   66707             : 
   66708             : 
   66709             :      public: 
   66710             :          virtual ~SgQualifiedNameType();
   66711             : 
   66712             : 
   66713             :      public: 
   66714             :          SgQualifiedNameType(SgType* base_type = NULL); 
   66715             : 
   66716             :     protected:
   66717             : // Start of memberFunctionString
   66718             : SgType* p_base_type;
   66719             :           
   66720             : // End of memberFunctionString
   66721             : // Start of memberFunctionString
   66722             : SgQualifiedNamePtrList p_qualifiedNameList;
   66723             :           
   66724             : // End of memberFunctionString
   66725             : 
   66726             :     friend struct Rose::Traits::generated::describe_node_t<SgQualifiedNameType>;
   66727             :     friend struct Rose::Traits::generated::describe_field_t<SgQualifiedNameType, SgType*,&SgQualifiedNameType::p_base_type>;
   66728             :     friend struct Rose::Traits::generated::describe_field_t<SgQualifiedNameType, SgQualifiedNamePtrList,&SgQualifiedNameType::p_qualifiedNameList>;
   66729             : 
   66730             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66731             : 
   66732             : 
   66733             :    };
   66734             : #endif
   66735             : 
   66736             : // postdeclarations for SgQualifiedNameType
   66737             : 
   66738             : /* #line 66739 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66739             : 
   66740             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   66741             : 
   66742             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66743             : 
   66744             : 
   66745             : /* #line 66746 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66746             : 
   66747             : 
   66748             : 
   66749             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66750             : 
   66751             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   66752             : //      This code is automatically generated for each 
   66753             : //      terminal and non-terminal within the defined 
   66754             : //      grammar.  There is a simple way to change the 
   66755             : //      code to fix bugs etc.  See the ROSE README file
   66756             : //      for directions.
   66757             : 
   66758             : // tps: (02/22/2010): Adding DLL export requirements
   66759             : #include "rosedll.h"
   66760             : 
   66761             : // predeclarations for SgTypeComplex
   66762             : 
   66763             : /* #line 66764 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66764             : 
   66765             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   66766             : 
   66767             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   66768             : 
   66769             : #if 1
   66770             : // Class Definition for SgTypeComplex
   66771             : class ROSE_DLL_API SgTypeComplex  : public SgType
   66772             :    {
   66773             :      public:
   66774             : 
   66775             : 
   66776             : /* #line 66777 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   66777             : 
   66778             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   66779             : // Start of memberFunctionString
   66780             : /* #line 907 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   66781             : 
   66782             :       //! function returns example of type
   66783             :        // static SgTypeComplex* createType(SgType* base_type);
   66784             :           static SgTypeComplex* createType(SgType* base_type, SgExpression* optional_fortran_type_kind = NULL);
   66785             :        // SKW (3/1/2011): Added these explicit declarations since we no longer build them automatically
   66786             :           virtual SgExpression* get_type_kind () const override;
   66787             :           virtual void set_type_kind ( SgExpression* type_kind ) override;
   66788             : 
   66789             : 
   66790             : // End of memberFunctionString
   66791             : // Start of memberFunctionString
   66792             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   66793             : 
   66794             : // *** COMMON CODE SECTION BEGINS HERE ***
   66795             : 
   66796             :     public:
   66797             : 
   66798             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   66799             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   66800             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   66801             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   66802             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   66803             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   66804             : 
   66805             :       /*! \brief returns a string representing the class name */
   66806             :           virtual std::string class_name() const override;
   66807             : 
   66808             :       /*! \brief returns new style SageIII enum values */
   66809             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   66810             : 
   66811             :       /*! \brief static variant value */
   66812             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   66813             :        // static const VariantT static_variant = V_SgTypeComplex;
   66814             :           enum { static_variant = V_SgTypeComplex };
   66815             : 
   66816             :        /* the generated cast function */
   66817             :       /*! \brief Casts pointer from base class to derived class */
   66818             :           ROSE_DLL_API friend       SgTypeComplex* isSgTypeComplex(       SgNode * s );
   66819             : 
   66820             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   66821             :           ROSE_DLL_API friend const SgTypeComplex* isSgTypeComplex( const SgNode * s );
   66822             : 
   66823             :      // ******************************************
   66824             :      // * Memory Pool / New / Delete
   66825             :      // ******************************************
   66826             : 
   66827             :      public:
   66828             :           /// \private
   66829             :           static const unsigned pool_size; //
   66830             :           /// \private
   66831             :           static std::vector<unsigned char *> pools; //
   66832             :           /// \private
   66833             :           static SgTypeComplex * next_node; // 
   66834             : 
   66835             :           /// \private
   66836             :           static unsigned long initializeStorageClassArray(SgTypeComplexStorageClass *); //
   66837             : 
   66838             :           /// \private
   66839             :           static void clearMemoryPool(); //
   66840             :           static void deleteMemoryPool(); //
   66841             : 
   66842             :           /// \private
   66843             :           static void extendMemoryPoolForFileIO(); //
   66844             : 
   66845             :           /// \private
   66846             :           static SgTypeComplex * getPointerFromGlobalIndex(unsigned long); //
   66847             :           /// \private
   66848             :           static SgTypeComplex * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   66849             : 
   66850             :           /// \private
   66851             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   66852             :           /// \private
   66853             :           static void resetValidFreepointers(); //
   66854             :           /// \private
   66855             :           static unsigned long getNumberOfLastValidPointer(); //
   66856             : 
   66857             : 
   66858             : #if defined(INLINE_FUNCTIONS)
   66859             :       /*! \brief returns pointer to newly allocated IR node */
   66860             :           inline void *operator new (size_t size);
   66861             : #else
   66862             :       /*! \brief returns pointer to newly allocated IR node */
   66863             :           void *operator new (size_t size);
   66864             : #endif
   66865             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   66866             :           void operator delete (void* pointer, size_t size);
   66867             : 
   66868             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   66869          14 :           void operator delete (void* pointer)
   66870             :              {
   66871             :             // This is the generated delete operator...
   66872          14 :                SgTypeComplex::operator delete (pointer,sizeof(SgTypeComplex));
   66873             :              }
   66874             : 
   66875             :       /*! \brief Returns the total number of IR nodes of this type */
   66876             :           static size_t numberOfNodes();
   66877             : 
   66878             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   66879             :           static size_t memoryUsage();
   66880             : 
   66881             :       // End of scope which started in IR nodes specific code 
   66882             :       /* */
   66883             : 
   66884             :       /* name Internal Functions
   66885             :           \brief Internal functions ... incomplete-documentation
   66886             : 
   66887             :           These functions have been made public as part of the design, but they are suggested for internal use 
   66888             :           or by particularly knowledgeable users for specialized tools or applications.
   66889             : 
   66890             :           \internal We could not make these private because they are required by user for special purposes. And 
   66891             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   66892             :          
   66893             :        */
   66894             : 
   66895             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   66896             :        // overridden in every class by *generated* implementation
   66897             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   66898             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   66899             :        // MS: 06/28/02 container of names of variables or container indices 
   66900             :        // used used in the traversal to access AST successor nodes
   66901             :        // overridden in every class by *generated* implementation
   66902             :       /*! \brief container of names of variables or container indices used used in the traversal
   66903             :           to access AST successor nodes overridden in every class by *generated* implementation */
   66904             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   66905             : 
   66906             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   66907             :        // than all the vector copies. The implementation for these functions is generated for each class.
   66908             :       /*! \brief return number of children in the traversal successor list */
   66909             :           virtual size_t get_numberOfTraversalSuccessors() override;
   66910             :       /*! \brief index-based access to traversal successors by index number */
   66911             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   66912             :       /*! \brief index-based access to traversal successors by child node */
   66913             :           virtual size_t get_childIndex(SgNode *child) override;
   66914             : 
   66915             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   66916             :        // MS: 08/16/2002 method for generating RTI information
   66917             :       /*! \brief return C++ Runtime-Time-Information */
   66918             :           virtual RTIReturnType roseRTI() override;
   66919             : #endif
   66920             :       /* */
   66921             : 
   66922             : 
   66923             : 
   66924             :       /* name Deprecated Functions
   66925             :           \brief Deprecated functions ... incomplete-documentation
   66926             : 
   66927             :           These functions have been deprecated from use.
   66928             :        */
   66929             :       /* */
   66930             : 
   66931             :       /*! returns a C style string (char*) representing the class name */
   66932             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   66933             : 
   66934             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   66935             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   66936             : #if 0
   66937             :       /*! returns old style Sage II enum values */
   66938             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   66939             :       /*! returns old style Sage II enum values */
   66940             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   66941             : #endif
   66942             :       /* */
   66943             : 
   66944             : 
   66945             : 
   66946             : 
   66947             :      public:
   66948             :       /* name Traversal Support Functions
   66949             :           \brief Traversal support functions ... incomplete-documentation
   66950             : 
   66951             :           These functions have been made public as part of the design, but they are suggested for internal use 
   66952             :           or by particularly knowledgable users for specialized tools or applications.
   66953             :        */
   66954             :       /* */
   66955             : 
   66956             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   66957             :        // (inferior to ROSE traversal mechanism, experimental).
   66958             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   66959             :        */
   66960             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   66961             : 
   66962             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   66963             :       /*! \brief support for the classic visitor pattern done in GoF */
   66964             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   66965             : 
   66966             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   66967             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   66968             :        */
   66969             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   66970             : 
   66971             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   66972             :        */
   66973             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   66974             : 
   66975             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   66976             :        // This traversal helps support internal tools that call static member functions.
   66977             :        // note: this function operates on the memory pools.
   66978             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   66979             :        */
   66980             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   66981             :       /* */
   66982             : 
   66983             : 
   66984             :      public:
   66985             :       /* name Memory Allocation Functions
   66986             :           \brief Memory allocations functions ... incomplete-documentation
   66987             : 
   66988             :           These functions have been made public as part of the design, but they are suggested for internal use 
   66989             :           or by particularly knowledgable users for specialized tools or applications.
   66990             :        */
   66991             :       /* */
   66992             : 
   66993             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   66994             : 
   66995             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   66996             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   66997             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   66998             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   66999             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   67000             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   67001             :           being used with the AST File I/O mechanism.
   67002             :        */
   67003             :           virtual bool isInMemoryPool() override;
   67004             : 
   67005             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   67006             : 
   67007             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   67008             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   67009             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   67010             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   67011             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   67012             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   67013             :           being used with the AST File I/O mechanism.
   67014             :        */
   67015             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   67016             : 
   67017             :       // DQ (4/30/2006): Modified to be a const function.
   67018             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   67019             : 
   67020             :           This functions is part of general support for many possible tools to operate 
   67021             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   67022             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   67023             :           less than the set of pointers used by the AST file I/O. This is part of
   67024             :           work implemented by Andreas, and support tools such as the AST graph generation.
   67025             : 
   67026             :           \warning This function can return unexpected data members and thus the 
   67027             :                    order and the number of elements is unpredicable and subject 
   67028             :                    to change.
   67029             : 
   67030             :           \returns STL vector of pairs of SgNode* and strings
   67031             :        */
   67032             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   67033             : 
   67034             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   67035             : 
   67036             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   67037             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   67038             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   67039             : 
   67040             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   67041             :                    and subject to change.
   67042             :        */
   67043             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   67044             : 
   67045             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   67046             : 
   67047             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   67048             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   67049             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   67050             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   67051             : 
   67052             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   67053             : 
   67054             :           \returns long
   67055             :        */
   67056             :           virtual long getChildIndex( SgNode* childNode ) const override;
   67057             : 
   67058             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   67059             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   67060             :       /* \brief Constructor for use by AST File I/O Mechanism
   67061             : 
   67062             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   67063             :           which obtained via fast binary file I/O from disk.
   67064             :        */
   67065             :        // SgTypeComplex( SgTypeComplexStorageClass& source );
   67066             : 
   67067             : 
   67068             : 
   67069             : 
   67070             : 
   67071             :  // JH (10/24/2005): methods added to support the ast file IO
   67072             :     private:
   67073             : 
   67074             :       /* name AST Memory Allocation Support Functions
   67075             :           \brief Memory allocations support....
   67076             : 
   67077             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   67078             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   67079             :           and support the AST File I/O Mechanism.
   67080             :        */
   67081             :       /* */
   67082             : 
   67083             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   67084             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   67085             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   67086             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   67087             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   67088             :           a correspinding one in the AST_FILE_IO class!
   67089             :        */
   67090             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   67091             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   67092             :       /* \brief Typedef used for low level memory access.
   67093             :        */
   67094             :        // typedef unsigned char* TestType;
   67095             : 
   67096             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   67097             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   67098             :       /* \brief Typedef used to hold memory addresses as values.
   67099             :        */
   67100             :        // typedef unsigned long  AddressType;
   67101             : 
   67102             : 
   67103             : 
   67104             :        // necessary, to have direct access to the p_freepointer and the private methods !
   67105             :       /*! \brief friend class declaration to support AST File I/O */
   67106             :           friend class AST_FILE_IO;
   67107             : 
   67108             :       /*! \brief friend class declaration to support AST File I/O */
   67109             :           friend class SgTypeComplexStorageClass;
   67110             : 
   67111             :       /*! \brief friend class declaration to support AST File I/O */
   67112             :           friend class AstSpecificDataManagingClass;
   67113             : 
   67114             :       /*! \brief friend class declaration to support AST File I/O */
   67115             :           friend class AstSpecificDataManagingClassStorageClass;
   67116             :     public:
   67117             :       /*! \brief IR node constructor to support AST File I/O */
   67118             :           SgTypeComplex( const SgTypeComplexStorageClass& source );
   67119             : 
   67120             :  // private: // JJW hack
   67121             :        /*
   67122             :           name AST Memory Allocation Support Variables
   67123             :           Memory allocations support variables 
   67124             : 
   67125             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   67126             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   67127             :           and support the AST File I/O Mechanism.
   67128             :        */
   67129             :       /* */
   67130             : 
   67131             :     public:
   67132             : 
   67133             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   67134             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   67135             :       // virtual SgNode* addRegExpAttribute();
   67136             :       /*! \brief Support for AST matching using regular expression.
   67137             : 
   67138             :           This support is incomplete and the subject of current research to define 
   67139             :           RegEx trees to support inexact matching.
   67140             :        */
   67141             :           SgTypeComplex* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   67142             : 
   67143             : // *** COMMON CODE SECTION ENDS HERE ***
   67144             : 
   67145             : 
   67146             : // End of memberFunctionString
   67147             : // Start of memberFunctionString
   67148             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   67149             : 
   67150             :      // the generated cast function
   67151             :      // friend ROSE_DLL_API SgTypeComplex* isSgTypeComplex ( SgNode* s );
   67152             : 
   67153             :           typedef SgType base_node_type;
   67154             : 
   67155             : 
   67156             : // End of memberFunctionString
   67157             : // Start of memberFunctionString
   67158             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   67159             : 
   67160             :        // SgName get_mangled ( SgUnparse_Info & info );
   67161             : 
   67162             :       //! Mangled name support for unparser support
   67163             :        // SgName get_mangled ( SgUnparse_Info & info );
   67164             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   67165             :           virtual SgName get_mangled (void) const override;
   67166             : 
   67167             : 
   67168             : 
   67169             : // End of memberFunctionString
   67170             : 
   67171             :      public: 
   67172             :          SgType* get_base_type() const;
   67173             :          void set_base_type(SgType* base_type);
   67174             : 
   67175             : 
   67176             :      public: 
   67177             :          virtual ~SgTypeComplex();
   67178             : 
   67179             : 
   67180             :      public: 
   67181             :          SgTypeComplex(SgType* base_type = NULL); 
   67182             : 
   67183             :     protected:
   67184             : // Start of memberFunctionString
   67185             : SgType* p_base_type;
   67186             :           
   67187             : // End of memberFunctionString
   67188             : 
   67189             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeComplex>;
   67190             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeComplex, SgType*,&SgTypeComplex::p_base_type>;
   67191             : 
   67192             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67193             : 
   67194             : 
   67195             :    };
   67196             : #endif
   67197             : 
   67198             : // postdeclarations for SgTypeComplex
   67199             : 
   67200             : /* #line 67201 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67201             : 
   67202             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   67203             : 
   67204             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67205             : 
   67206             : 
   67207             : /* #line 67208 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67208             : 
   67209             : 
   67210             : 
   67211             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67212             : 
   67213             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   67214             : //      This code is automatically generated for each 
   67215             : //      terminal and non-terminal within the defined 
   67216             : //      grammar.  There is a simple way to change the 
   67217             : //      code to fix bugs etc.  See the ROSE README file
   67218             : //      for directions.
   67219             : 
   67220             : // tps: (02/22/2010): Adding DLL export requirements
   67221             : #include "rosedll.h"
   67222             : 
   67223             : // predeclarations for SgTypeImaginary
   67224             : 
   67225             : /* #line 67226 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67226             : 
   67227             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   67228             : 
   67229             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67230             : 
   67231             : #if 1
   67232             : // Class Definition for SgTypeImaginary
   67233             : class ROSE_DLL_API SgTypeImaginary  : public SgType
   67234             :    {
   67235             :      public:
   67236             : 
   67237             : 
   67238             : /* #line 67239 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67239             : 
   67240             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   67241             : // Start of memberFunctionString
   67242             : /* #line 907 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   67243             : 
   67244             :       //! function returns example of type
   67245             :        // static SgTypeImaginary* createType(SgType* base_type);
   67246             :           static SgTypeImaginary* createType(SgType* base_type, SgExpression* optional_fortran_type_kind = NULL);
   67247             :        // SKW (3/1/2011): Added these explicit declarations since we no longer build them automatically
   67248             :           virtual SgExpression* get_type_kind () const override;
   67249             :           virtual void set_type_kind ( SgExpression* type_kind ) override;
   67250             : 
   67251             : 
   67252             : // End of memberFunctionString
   67253             : // Start of memberFunctionString
   67254             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   67255             : 
   67256             : // *** COMMON CODE SECTION BEGINS HERE ***
   67257             : 
   67258             :     public:
   67259             : 
   67260             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   67261             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   67262             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   67263             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   67264             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   67265             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   67266             : 
   67267             :       /*! \brief returns a string representing the class name */
   67268             :           virtual std::string class_name() const override;
   67269             : 
   67270             :       /*! \brief returns new style SageIII enum values */
   67271             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   67272             : 
   67273             :       /*! \brief static variant value */
   67274             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   67275             :        // static const VariantT static_variant = V_SgTypeImaginary;
   67276             :           enum { static_variant = V_SgTypeImaginary };
   67277             : 
   67278             :        /* the generated cast function */
   67279             :       /*! \brief Casts pointer from base class to derived class */
   67280             :           ROSE_DLL_API friend       SgTypeImaginary* isSgTypeImaginary(       SgNode * s );
   67281             : 
   67282             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   67283             :           ROSE_DLL_API friend const SgTypeImaginary* isSgTypeImaginary( const SgNode * s );
   67284             : 
   67285             :      // ******************************************
   67286             :      // * Memory Pool / New / Delete
   67287             :      // ******************************************
   67288             : 
   67289             :      public:
   67290             :           /// \private
   67291             :           static const unsigned pool_size; //
   67292             :           /// \private
   67293             :           static std::vector<unsigned char *> pools; //
   67294             :           /// \private
   67295             :           static SgTypeImaginary * next_node; // 
   67296             : 
   67297             :           /// \private
   67298             :           static unsigned long initializeStorageClassArray(SgTypeImaginaryStorageClass *); //
   67299             : 
   67300             :           /// \private
   67301             :           static void clearMemoryPool(); //
   67302             :           static void deleteMemoryPool(); //
   67303             : 
   67304             :           /// \private
   67305             :           static void extendMemoryPoolForFileIO(); //
   67306             : 
   67307             :           /// \private
   67308             :           static SgTypeImaginary * getPointerFromGlobalIndex(unsigned long); //
   67309             :           /// \private
   67310             :           static SgTypeImaginary * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   67311             : 
   67312             :           /// \private
   67313             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   67314             :           /// \private
   67315             :           static void resetValidFreepointers(); //
   67316             :           /// \private
   67317             :           static unsigned long getNumberOfLastValidPointer(); //
   67318             : 
   67319             : 
   67320             : #if defined(INLINE_FUNCTIONS)
   67321             :       /*! \brief returns pointer to newly allocated IR node */
   67322             :           inline void *operator new (size_t size);
   67323             : #else
   67324             :       /*! \brief returns pointer to newly allocated IR node */
   67325             :           void *operator new (size_t size);
   67326             : #endif
   67327             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   67328             :           void operator delete (void* pointer, size_t size);
   67329             : 
   67330             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   67331           0 :           void operator delete (void* pointer)
   67332             :              {
   67333             :             // This is the generated delete operator...
   67334           0 :                SgTypeImaginary::operator delete (pointer,sizeof(SgTypeImaginary));
   67335             :              }
   67336             : 
   67337             :       /*! \brief Returns the total number of IR nodes of this type */
   67338             :           static size_t numberOfNodes();
   67339             : 
   67340             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   67341             :           static size_t memoryUsage();
   67342             : 
   67343             :       // End of scope which started in IR nodes specific code 
   67344             :       /* */
   67345             : 
   67346             :       /* name Internal Functions
   67347             :           \brief Internal functions ... incomplete-documentation
   67348             : 
   67349             :           These functions have been made public as part of the design, but they are suggested for internal use 
   67350             :           or by particularly knowledgeable users for specialized tools or applications.
   67351             : 
   67352             :           \internal We could not make these private because they are required by user for special purposes. And 
   67353             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   67354             :          
   67355             :        */
   67356             : 
   67357             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   67358             :        // overridden in every class by *generated* implementation
   67359             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   67360             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   67361             :        // MS: 06/28/02 container of names of variables or container indices 
   67362             :        // used used in the traversal to access AST successor nodes
   67363             :        // overridden in every class by *generated* implementation
   67364             :       /*! \brief container of names of variables or container indices used used in the traversal
   67365             :           to access AST successor nodes overridden in every class by *generated* implementation */
   67366             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   67367             : 
   67368             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   67369             :        // than all the vector copies. The implementation for these functions is generated for each class.
   67370             :       /*! \brief return number of children in the traversal successor list */
   67371             :           virtual size_t get_numberOfTraversalSuccessors() override;
   67372             :       /*! \brief index-based access to traversal successors by index number */
   67373             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   67374             :       /*! \brief index-based access to traversal successors by child node */
   67375             :           virtual size_t get_childIndex(SgNode *child) override;
   67376             : 
   67377             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   67378             :        // MS: 08/16/2002 method for generating RTI information
   67379             :       /*! \brief return C++ Runtime-Time-Information */
   67380             :           virtual RTIReturnType roseRTI() override;
   67381             : #endif
   67382             :       /* */
   67383             : 
   67384             : 
   67385             : 
   67386             :       /* name Deprecated Functions
   67387             :           \brief Deprecated functions ... incomplete-documentation
   67388             : 
   67389             :           These functions have been deprecated from use.
   67390             :        */
   67391             :       /* */
   67392             : 
   67393             :       /*! returns a C style string (char*) representing the class name */
   67394             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   67395             : 
   67396             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   67397             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   67398             : #if 0
   67399             :       /*! returns old style Sage II enum values */
   67400             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   67401             :       /*! returns old style Sage II enum values */
   67402             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   67403             : #endif
   67404             :       /* */
   67405             : 
   67406             : 
   67407             : 
   67408             : 
   67409             :      public:
   67410             :       /* name Traversal Support Functions
   67411             :           \brief Traversal support functions ... incomplete-documentation
   67412             : 
   67413             :           These functions have been made public as part of the design, but they are suggested for internal use 
   67414             :           or by particularly knowledgable users for specialized tools or applications.
   67415             :        */
   67416             :       /* */
   67417             : 
   67418             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   67419             :        // (inferior to ROSE traversal mechanism, experimental).
   67420             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   67421             :        */
   67422             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   67423             : 
   67424             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   67425             :       /*! \brief support for the classic visitor pattern done in GoF */
   67426             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   67427             : 
   67428             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   67429             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   67430             :        */
   67431             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   67432             : 
   67433             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   67434             :        */
   67435             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   67436             : 
   67437             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   67438             :        // This traversal helps support internal tools that call static member functions.
   67439             :        // note: this function operates on the memory pools.
   67440             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   67441             :        */
   67442             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   67443             :       /* */
   67444             : 
   67445             : 
   67446             :      public:
   67447             :       /* name Memory Allocation Functions
   67448             :           \brief Memory allocations functions ... incomplete-documentation
   67449             : 
   67450             :           These functions have been made public as part of the design, but they are suggested for internal use 
   67451             :           or by particularly knowledgable users for specialized tools or applications.
   67452             :        */
   67453             :       /* */
   67454             : 
   67455             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   67456             : 
   67457             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   67458             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   67459             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   67460             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   67461             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   67462             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   67463             :           being used with the AST File I/O mechanism.
   67464             :        */
   67465             :           virtual bool isInMemoryPool() override;
   67466             : 
   67467             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   67468             : 
   67469             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   67470             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   67471             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   67472             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   67473             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   67474             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   67475             :           being used with the AST File I/O mechanism.
   67476             :        */
   67477             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   67478             : 
   67479             :       // DQ (4/30/2006): Modified to be a const function.
   67480             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   67481             : 
   67482             :           This functions is part of general support for many possible tools to operate 
   67483             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   67484             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   67485             :           less than the set of pointers used by the AST file I/O. This is part of
   67486             :           work implemented by Andreas, and support tools such as the AST graph generation.
   67487             : 
   67488             :           \warning This function can return unexpected data members and thus the 
   67489             :                    order and the number of elements is unpredicable and subject 
   67490             :                    to change.
   67491             : 
   67492             :           \returns STL vector of pairs of SgNode* and strings
   67493             :        */
   67494             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   67495             : 
   67496             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   67497             : 
   67498             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   67499             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   67500             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   67501             : 
   67502             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   67503             :                    and subject to change.
   67504             :        */
   67505             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   67506             : 
   67507             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   67508             : 
   67509             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   67510             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   67511             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   67512             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   67513             : 
   67514             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   67515             : 
   67516             :           \returns long
   67517             :        */
   67518             :           virtual long getChildIndex( SgNode* childNode ) const override;
   67519             : 
   67520             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   67521             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   67522             :       /* \brief Constructor for use by AST File I/O Mechanism
   67523             : 
   67524             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   67525             :           which obtained via fast binary file I/O from disk.
   67526             :        */
   67527             :        // SgTypeImaginary( SgTypeImaginaryStorageClass& source );
   67528             : 
   67529             : 
   67530             : 
   67531             : 
   67532             : 
   67533             :  // JH (10/24/2005): methods added to support the ast file IO
   67534             :     private:
   67535             : 
   67536             :       /* name AST Memory Allocation Support Functions
   67537             :           \brief Memory allocations support....
   67538             : 
   67539             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   67540             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   67541             :           and support the AST File I/O Mechanism.
   67542             :        */
   67543             :       /* */
   67544             : 
   67545             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   67546             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   67547             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   67548             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   67549             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   67550             :           a correspinding one in the AST_FILE_IO class!
   67551             :        */
   67552             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   67553             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   67554             :       /* \brief Typedef used for low level memory access.
   67555             :        */
   67556             :        // typedef unsigned char* TestType;
   67557             : 
   67558             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   67559             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   67560             :       /* \brief Typedef used to hold memory addresses as values.
   67561             :        */
   67562             :        // typedef unsigned long  AddressType;
   67563             : 
   67564             : 
   67565             : 
   67566             :        // necessary, to have direct access to the p_freepointer and the private methods !
   67567             :       /*! \brief friend class declaration to support AST File I/O */
   67568             :           friend class AST_FILE_IO;
   67569             : 
   67570             :       /*! \brief friend class declaration to support AST File I/O */
   67571             :           friend class SgTypeImaginaryStorageClass;
   67572             : 
   67573             :       /*! \brief friend class declaration to support AST File I/O */
   67574             :           friend class AstSpecificDataManagingClass;
   67575             : 
   67576             :       /*! \brief friend class declaration to support AST File I/O */
   67577             :           friend class AstSpecificDataManagingClassStorageClass;
   67578             :     public:
   67579             :       /*! \brief IR node constructor to support AST File I/O */
   67580             :           SgTypeImaginary( const SgTypeImaginaryStorageClass& source );
   67581             : 
   67582             :  // private: // JJW hack
   67583             :        /*
   67584             :           name AST Memory Allocation Support Variables
   67585             :           Memory allocations support variables 
   67586             : 
   67587             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   67588             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   67589             :           and support the AST File I/O Mechanism.
   67590             :        */
   67591             :       /* */
   67592             : 
   67593             :     public:
   67594             : 
   67595             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   67596             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   67597             :       // virtual SgNode* addRegExpAttribute();
   67598             :       /*! \brief Support for AST matching using regular expression.
   67599             : 
   67600             :           This support is incomplete and the subject of current research to define 
   67601             :           RegEx trees to support inexact matching.
   67602             :        */
   67603             :           SgTypeImaginary* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   67604             : 
   67605             : // *** COMMON CODE SECTION ENDS HERE ***
   67606             : 
   67607             : 
   67608             : // End of memberFunctionString
   67609             : // Start of memberFunctionString
   67610             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   67611             : 
   67612             :      // the generated cast function
   67613             :      // friend ROSE_DLL_API SgTypeImaginary* isSgTypeImaginary ( SgNode* s );
   67614             : 
   67615             :           typedef SgType base_node_type;
   67616             : 
   67617             : 
   67618             : // End of memberFunctionString
   67619             : // Start of memberFunctionString
   67620             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   67621             : 
   67622             :        // SgName get_mangled ( SgUnparse_Info & info );
   67623             : 
   67624             :       //! Mangled name support for unparser support
   67625             :        // SgName get_mangled ( SgUnparse_Info & info );
   67626             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   67627             :           virtual SgName get_mangled (void) const override;
   67628             : 
   67629             : 
   67630             : 
   67631             : // End of memberFunctionString
   67632             : 
   67633             :      public: 
   67634             :          SgType* get_base_type() const;
   67635             :          void set_base_type(SgType* base_type);
   67636             : 
   67637             : 
   67638             :      public: 
   67639             :          virtual ~SgTypeImaginary();
   67640             : 
   67641             : 
   67642             :      public: 
   67643             :          SgTypeImaginary(SgType* base_type = NULL); 
   67644             : 
   67645             :     protected:
   67646             : // Start of memberFunctionString
   67647             : SgType* p_base_type;
   67648             :           
   67649             : // End of memberFunctionString
   67650             : 
   67651             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeImaginary>;
   67652             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeImaginary, SgType*,&SgTypeImaginary::p_base_type>;
   67653             : 
   67654             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67655             : 
   67656             : 
   67657             :    };
   67658             : #endif
   67659             : 
   67660             : // postdeclarations for SgTypeImaginary
   67661             : 
   67662             : /* #line 67663 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67663             : 
   67664             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   67665             : 
   67666             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67667             : 
   67668             : 
   67669             : /* #line 67670 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67670             : 
   67671             : 
   67672             : 
   67673             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67674             : 
   67675             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   67676             : //      This code is automatically generated for each 
   67677             : //      terminal and non-terminal within the defined 
   67678             : //      grammar.  There is a simple way to change the 
   67679             : //      code to fix bugs etc.  See the ROSE README file
   67680             : //      for directions.
   67681             : 
   67682             : // tps: (02/22/2010): Adding DLL export requirements
   67683             : #include "rosedll.h"
   67684             : 
   67685             : // predeclarations for SgTypeDefault
   67686             : 
   67687             : /* #line 67688 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67688             : 
   67689             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   67690             : 
   67691             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   67692             : 
   67693             : #if 1
   67694             : // Class Definition for SgTypeDefault
   67695             : class ROSE_DLL_API SgTypeDefault  : public SgType
   67696             :    {
   67697             :      public:
   67698             : 
   67699             : 
   67700             : /* #line 67701 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   67701             : 
   67702             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   67703             : // Start of memberFunctionString
   67704             : /* #line 954 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   67705             : 
   67706             : 
   67707             :        // Generated a mangled name that accounts for the stored name internally.
   67708             :        // SgName get_mangled (void) const;
   67709             : 
   67710             :       //! Default type creation to support intermediate types built during parsing (required for fortran only).
   67711             :           static SgTypeDefault* createType ( const SgName & nameOfType );
   67712             : 
   67713             : 
   67714             : 
   67715             : // End of memberFunctionString
   67716             : // Start of memberFunctionString
   67717             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   67718             : 
   67719             : // *** COMMON CODE SECTION BEGINS HERE ***
   67720             : 
   67721             :     public:
   67722             : 
   67723             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   67724             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   67725             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   67726             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   67727             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   67728             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   67729             : 
   67730             :       /*! \brief returns a string representing the class name */
   67731             :           virtual std::string class_name() const override;
   67732             : 
   67733             :       /*! \brief returns new style SageIII enum values */
   67734             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   67735             : 
   67736             :       /*! \brief static variant value */
   67737             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   67738             :        // static const VariantT static_variant = V_SgTypeDefault;
   67739             :           enum { static_variant = V_SgTypeDefault };
   67740             : 
   67741             :        /* the generated cast function */
   67742             :       /*! \brief Casts pointer from base class to derived class */
   67743             :           ROSE_DLL_API friend       SgTypeDefault* isSgTypeDefault(       SgNode * s );
   67744             : 
   67745             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   67746             :           ROSE_DLL_API friend const SgTypeDefault* isSgTypeDefault( const SgNode * s );
   67747             : 
   67748             :      // ******************************************
   67749             :      // * Memory Pool / New / Delete
   67750             :      // ******************************************
   67751             : 
   67752             :      public:
   67753             :           /// \private
   67754             :           static const unsigned pool_size; //
   67755             :           /// \private
   67756             :           static std::vector<unsigned char *> pools; //
   67757             :           /// \private
   67758             :           static SgTypeDefault * next_node; // 
   67759             : 
   67760             :           /// \private
   67761             :           static unsigned long initializeStorageClassArray(SgTypeDefaultStorageClass *); //
   67762             : 
   67763             :           /// \private
   67764             :           static void clearMemoryPool(); //
   67765             :           static void deleteMemoryPool(); //
   67766             : 
   67767             :           /// \private
   67768             :           static void extendMemoryPoolForFileIO(); //
   67769             : 
   67770             :           /// \private
   67771             :           static SgTypeDefault * getPointerFromGlobalIndex(unsigned long); //
   67772             :           /// \private
   67773             :           static SgTypeDefault * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   67774             : 
   67775             :           /// \private
   67776             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   67777             :           /// \private
   67778             :           static void resetValidFreepointers(); //
   67779             :           /// \private
   67780             :           static unsigned long getNumberOfLastValidPointer(); //
   67781             : 
   67782             : 
   67783             : #if defined(INLINE_FUNCTIONS)
   67784             :       /*! \brief returns pointer to newly allocated IR node */
   67785             :           inline void *operator new (size_t size);
   67786             : #else
   67787             :       /*! \brief returns pointer to newly allocated IR node */
   67788             :           void *operator new (size_t size);
   67789             : #endif
   67790             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   67791             :           void operator delete (void* pointer, size_t size);
   67792             : 
   67793             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   67794       34213 :           void operator delete (void* pointer)
   67795             :              {
   67796             :             // This is the generated delete operator...
   67797       34213 :                SgTypeDefault::operator delete (pointer,sizeof(SgTypeDefault));
   67798             :              }
   67799             : 
   67800             :       /*! \brief Returns the total number of IR nodes of this type */
   67801             :           static size_t numberOfNodes();
   67802             : 
   67803             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   67804             :           static size_t memoryUsage();
   67805             : 
   67806             :       // End of scope which started in IR nodes specific code 
   67807             :       /* */
   67808             : 
   67809             :       /* name Internal Functions
   67810             :           \brief Internal functions ... incomplete-documentation
   67811             : 
   67812             :           These functions have been made public as part of the design, but they are suggested for internal use 
   67813             :           or by particularly knowledgeable users for specialized tools or applications.
   67814             : 
   67815             :           \internal We could not make these private because they are required by user for special purposes. And 
   67816             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   67817             :          
   67818             :        */
   67819             : 
   67820             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   67821             :        // overridden in every class by *generated* implementation
   67822             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   67823             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   67824             :        // MS: 06/28/02 container of names of variables or container indices 
   67825             :        // used used in the traversal to access AST successor nodes
   67826             :        // overridden in every class by *generated* implementation
   67827             :       /*! \brief container of names of variables or container indices used used in the traversal
   67828             :           to access AST successor nodes overridden in every class by *generated* implementation */
   67829             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   67830             : 
   67831             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   67832             :        // than all the vector copies. The implementation for these functions is generated for each class.
   67833             :       /*! \brief return number of children in the traversal successor list */
   67834             :           virtual size_t get_numberOfTraversalSuccessors() override;
   67835             :       /*! \brief index-based access to traversal successors by index number */
   67836             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   67837             :       /*! \brief index-based access to traversal successors by child node */
   67838             :           virtual size_t get_childIndex(SgNode *child) override;
   67839             : 
   67840             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   67841             :        // MS: 08/16/2002 method for generating RTI information
   67842             :       /*! \brief return C++ Runtime-Time-Information */
   67843             :           virtual RTIReturnType roseRTI() override;
   67844             : #endif
   67845             :       /* */
   67846             : 
   67847             : 
   67848             : 
   67849             :       /* name Deprecated Functions
   67850             :           \brief Deprecated functions ... incomplete-documentation
   67851             : 
   67852             :           These functions have been deprecated from use.
   67853             :        */
   67854             :       /* */
   67855             : 
   67856             :       /*! returns a C style string (char*) representing the class name */
   67857             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   67858             : 
   67859             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   67860             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   67861             : #if 0
   67862             :       /*! returns old style Sage II enum values */
   67863             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   67864             :       /*! returns old style Sage II enum values */
   67865             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   67866             : #endif
   67867             :       /* */
   67868             : 
   67869             : 
   67870             : 
   67871             : 
   67872             :      public:
   67873             :       /* name Traversal Support Functions
   67874             :           \brief Traversal support functions ... incomplete-documentation
   67875             : 
   67876             :           These functions have been made public as part of the design, but they are suggested for internal use 
   67877             :           or by particularly knowledgable users for specialized tools or applications.
   67878             :        */
   67879             :       /* */
   67880             : 
   67881             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   67882             :        // (inferior to ROSE traversal mechanism, experimental).
   67883             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   67884             :        */
   67885             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   67886             : 
   67887             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   67888             :       /*! \brief support for the classic visitor pattern done in GoF */
   67889             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   67890             : 
   67891             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   67892             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   67893             :        */
   67894             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   67895             : 
   67896             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   67897             :        */
   67898             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   67899             : 
   67900             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   67901             :        // This traversal helps support internal tools that call static member functions.
   67902             :        // note: this function operates on the memory pools.
   67903             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   67904             :        */
   67905             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   67906             :       /* */
   67907             : 
   67908             : 
   67909             :      public:
   67910             :       /* name Memory Allocation Functions
   67911             :           \brief Memory allocations functions ... incomplete-documentation
   67912             : 
   67913             :           These functions have been made public as part of the design, but they are suggested for internal use 
   67914             :           or by particularly knowledgable users for specialized tools or applications.
   67915             :        */
   67916             :       /* */
   67917             : 
   67918             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   67919             : 
   67920             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   67921             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   67922             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   67923             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   67924             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   67925             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   67926             :           being used with the AST File I/O mechanism.
   67927             :        */
   67928             :           virtual bool isInMemoryPool() override;
   67929             : 
   67930             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   67931             : 
   67932             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   67933             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   67934             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   67935             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   67936             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   67937             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   67938             :           being used with the AST File I/O mechanism.
   67939             :        */
   67940             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   67941             : 
   67942             :       // DQ (4/30/2006): Modified to be a const function.
   67943             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   67944             : 
   67945             :           This functions is part of general support for many possible tools to operate 
   67946             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   67947             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   67948             :           less than the set of pointers used by the AST file I/O. This is part of
   67949             :           work implemented by Andreas, and support tools such as the AST graph generation.
   67950             : 
   67951             :           \warning This function can return unexpected data members and thus the 
   67952             :                    order and the number of elements is unpredicable and subject 
   67953             :                    to change.
   67954             : 
   67955             :           \returns STL vector of pairs of SgNode* and strings
   67956             :        */
   67957             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   67958             : 
   67959             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   67960             : 
   67961             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   67962             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   67963             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   67964             : 
   67965             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   67966             :                    and subject to change.
   67967             :        */
   67968             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   67969             : 
   67970             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   67971             : 
   67972             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   67973             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   67974             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   67975             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   67976             : 
   67977             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   67978             : 
   67979             :           \returns long
   67980             :        */
   67981             :           virtual long getChildIndex( SgNode* childNode ) const override;
   67982             : 
   67983             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   67984             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   67985             :       /* \brief Constructor for use by AST File I/O Mechanism
   67986             : 
   67987             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   67988             :           which obtained via fast binary file I/O from disk.
   67989             :        */
   67990             :        // SgTypeDefault( SgTypeDefaultStorageClass& source );
   67991             : 
   67992             : 
   67993             : 
   67994             : 
   67995             : 
   67996             :  // JH (10/24/2005): methods added to support the ast file IO
   67997             :     private:
   67998             : 
   67999             :       /* name AST Memory Allocation Support Functions
   68000             :           \brief Memory allocations support....
   68001             : 
   68002             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   68003             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   68004             :           and support the AST File I/O Mechanism.
   68005             :        */
   68006             :       /* */
   68007             : 
   68008             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   68009             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   68010             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   68011             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   68012             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   68013             :           a correspinding one in the AST_FILE_IO class!
   68014             :        */
   68015             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   68016             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68017             :       /* \brief Typedef used for low level memory access.
   68018             :        */
   68019             :        // typedef unsigned char* TestType;
   68020             : 
   68021             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   68022             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68023             :       /* \brief Typedef used to hold memory addresses as values.
   68024             :        */
   68025             :        // typedef unsigned long  AddressType;
   68026             : 
   68027             : 
   68028             : 
   68029             :        // necessary, to have direct access to the p_freepointer and the private methods !
   68030             :       /*! \brief friend class declaration to support AST File I/O */
   68031             :           friend class AST_FILE_IO;
   68032             : 
   68033             :       /*! \brief friend class declaration to support AST File I/O */
   68034             :           friend class SgTypeDefaultStorageClass;
   68035             : 
   68036             :       /*! \brief friend class declaration to support AST File I/O */
   68037             :           friend class AstSpecificDataManagingClass;
   68038             : 
   68039             :       /*! \brief friend class declaration to support AST File I/O */
   68040             :           friend class AstSpecificDataManagingClassStorageClass;
   68041             :     public:
   68042             :       /*! \brief IR node constructor to support AST File I/O */
   68043             :           SgTypeDefault( const SgTypeDefaultStorageClass& source );
   68044             : 
   68045             :  // private: // JJW hack
   68046             :        /*
   68047             :           name AST Memory Allocation Support Variables
   68048             :           Memory allocations support variables 
   68049             : 
   68050             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   68051             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   68052             :           and support the AST File I/O Mechanism.
   68053             :        */
   68054             :       /* */
   68055             : 
   68056             :     public:
   68057             : 
   68058             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   68059             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   68060             :       // virtual SgNode* addRegExpAttribute();
   68061             :       /*! \brief Support for AST matching using regular expression.
   68062             : 
   68063             :           This support is incomplete and the subject of current research to define 
   68064             :           RegEx trees to support inexact matching.
   68065             :        */
   68066             :           SgTypeDefault* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   68067             : 
   68068             : // *** COMMON CODE SECTION ENDS HERE ***
   68069             : 
   68070             : 
   68071             : // End of memberFunctionString
   68072             : // Start of memberFunctionString
   68073             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   68074             : 
   68075             :      // the generated cast function
   68076             :      // friend ROSE_DLL_API SgTypeDefault* isSgTypeDefault ( SgNode* s );
   68077             : 
   68078             :           typedef SgType base_node_type;
   68079             : 
   68080             : 
   68081             : // End of memberFunctionString
   68082             : // Start of memberFunctionString
   68083             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   68084             : 
   68085             :        // SgName get_mangled ( SgUnparse_Info & info );
   68086             : 
   68087             :       //! Mangled name support for unparser support
   68088             :        // SgName get_mangled ( SgUnparse_Info & info );
   68089             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   68090             :           virtual SgName get_mangled (void) const override;
   68091             : 
   68092             : 
   68093             : 
   68094             : // End of memberFunctionString
   68095             : // Start of memberFunctionString
   68096             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   68097             : 
   68098             :       //! example of type used where construction is particularly simple
   68099             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   68100             :        // static SgTypeDefault builtin_type;
   68101             :        // static SgTypeDefault* builtin_type;
   68102             : 
   68103             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   68104             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   68105             :        // own data member and associated access function.
   68106             :        // static SgTypeDefault* get_builtin_type();
   68107             : 
   68108             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   68109             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   68110             :        // own data member and associated access function.
   68111             :        // static void set_builtin_type(SgTypeDefault* builtin_type);
   68112             : 
   68113             :       //! function returns example of type
   68114             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   68115             :        // static SgTypeDefault* createType(void);
   68116             :           static SgTypeDefault* createType(SgExpression* optional_fortran_type_kind = NULL);
   68117             : 
   68118             : 
   68119             : // End of memberFunctionString
   68120             : 
   68121             : 
   68122             :      public: 
   68123             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
   68124             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
   68125             : 
   68126             : 
   68127             :      public: 
   68128             :          virtual ~SgTypeDefault();
   68129             : 
   68130             : 
   68131             :      public: 
   68132             :          SgTypeDefault(); 
   68133             : 
   68134             :     protected:
   68135             : // Start of memberFunctionString
   68136             : static SgTypeDefault* p_builtin_type;
   68137             :           
   68138             : // End of memberFunctionString
   68139             : // Start of memberFunctionString
   68140             : SgName p_name;
   68141             :           
   68142             : // End of memberFunctionString
   68143             : 
   68144             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeDefault>;
   68145             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeDefault, SgName,&SgTypeDefault::p_name>;
   68146             : 
   68147             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68148             : 
   68149             : 
   68150             :    };
   68151             : #endif
   68152             : 
   68153             : // postdeclarations for SgTypeDefault
   68154             : 
   68155             : /* #line 68156 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68156             : 
   68157             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   68158             : 
   68159             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68160             : 
   68161             : 
   68162             : /* #line 68163 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68163             : 
   68164             : 
   68165             : 
   68166             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68167             : 
   68168             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   68169             : //      This code is automatically generated for each 
   68170             : //      terminal and non-terminal within the defined 
   68171             : //      grammar.  There is a simple way to change the 
   68172             : //      code to fix bugs etc.  See the ROSE README file
   68173             : //      for directions.
   68174             : 
   68175             : // tps: (02/22/2010): Adding DLL export requirements
   68176             : #include "rosedll.h"
   68177             : 
   68178             : // predeclarations for SgTypeCAFTeam
   68179             : 
   68180             : /* #line 68181 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68181             : 
   68182             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   68183             : 
   68184             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68185             : 
   68186             : #if 1
   68187             : // Class Definition for SgTypeCAFTeam
   68188             : class ROSE_DLL_API SgTypeCAFTeam  : public SgType
   68189             :    {
   68190             :      public:
   68191             : 
   68192             : 
   68193             : /* #line 68194 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68194             : 
   68195             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   68196             : // Start of memberFunctionString
   68197             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   68198             : 
   68199             : // *** COMMON CODE SECTION BEGINS HERE ***
   68200             : 
   68201             :     public:
   68202             : 
   68203             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   68204             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   68205             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   68206             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   68207             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   68208             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   68209             : 
   68210             :       /*! \brief returns a string representing the class name */
   68211             :           virtual std::string class_name() const override;
   68212             : 
   68213             :       /*! \brief returns new style SageIII enum values */
   68214             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   68215             : 
   68216             :       /*! \brief static variant value */
   68217             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   68218             :        // static const VariantT static_variant = V_SgTypeCAFTeam;
   68219             :           enum { static_variant = V_SgTypeCAFTeam };
   68220             : 
   68221             :        /* the generated cast function */
   68222             :       /*! \brief Casts pointer from base class to derived class */
   68223             :           ROSE_DLL_API friend       SgTypeCAFTeam* isSgTypeCAFTeam(       SgNode * s );
   68224             : 
   68225             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   68226             :           ROSE_DLL_API friend const SgTypeCAFTeam* isSgTypeCAFTeam( const SgNode * s );
   68227             : 
   68228             :      // ******************************************
   68229             :      // * Memory Pool / New / Delete
   68230             :      // ******************************************
   68231             : 
   68232             :      public:
   68233             :           /// \private
   68234             :           static const unsigned pool_size; //
   68235             :           /// \private
   68236             :           static std::vector<unsigned char *> pools; //
   68237             :           /// \private
   68238             :           static SgTypeCAFTeam * next_node; // 
   68239             : 
   68240             :           /// \private
   68241             :           static unsigned long initializeStorageClassArray(SgTypeCAFTeamStorageClass *); //
   68242             : 
   68243             :           /// \private
   68244             :           static void clearMemoryPool(); //
   68245             :           static void deleteMemoryPool(); //
   68246             : 
   68247             :           /// \private
   68248             :           static void extendMemoryPoolForFileIO(); //
   68249             : 
   68250             :           /// \private
   68251             :           static SgTypeCAFTeam * getPointerFromGlobalIndex(unsigned long); //
   68252             :           /// \private
   68253             :           static SgTypeCAFTeam * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   68254             : 
   68255             :           /// \private
   68256             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   68257             :           /// \private
   68258             :           static void resetValidFreepointers(); //
   68259             :           /// \private
   68260             :           static unsigned long getNumberOfLastValidPointer(); //
   68261             : 
   68262             : 
   68263             : #if defined(INLINE_FUNCTIONS)
   68264             :       /*! \brief returns pointer to newly allocated IR node */
   68265             :           inline void *operator new (size_t size);
   68266             : #else
   68267             :       /*! \brief returns pointer to newly allocated IR node */
   68268             :           void *operator new (size_t size);
   68269             : #endif
   68270             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   68271             :           void operator delete (void* pointer, size_t size);
   68272             : 
   68273             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   68274           0 :           void operator delete (void* pointer)
   68275             :              {
   68276             :             // This is the generated delete operator...
   68277           0 :                SgTypeCAFTeam::operator delete (pointer,sizeof(SgTypeCAFTeam));
   68278             :              }
   68279             : 
   68280             :       /*! \brief Returns the total number of IR nodes of this type */
   68281             :           static size_t numberOfNodes();
   68282             : 
   68283             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   68284             :           static size_t memoryUsage();
   68285             : 
   68286             :       // End of scope which started in IR nodes specific code 
   68287             :       /* */
   68288             : 
   68289             :       /* name Internal Functions
   68290             :           \brief Internal functions ... incomplete-documentation
   68291             : 
   68292             :           These functions have been made public as part of the design, but they are suggested for internal use 
   68293             :           or by particularly knowledgeable users for specialized tools or applications.
   68294             : 
   68295             :           \internal We could not make these private because they are required by user for special purposes. And 
   68296             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   68297             :          
   68298             :        */
   68299             : 
   68300             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   68301             :        // overridden in every class by *generated* implementation
   68302             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   68303             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   68304             :        // MS: 06/28/02 container of names of variables or container indices 
   68305             :        // used used in the traversal to access AST successor nodes
   68306             :        // overridden in every class by *generated* implementation
   68307             :       /*! \brief container of names of variables or container indices used used in the traversal
   68308             :           to access AST successor nodes overridden in every class by *generated* implementation */
   68309             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   68310             : 
   68311             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   68312             :        // than all the vector copies. The implementation for these functions is generated for each class.
   68313             :       /*! \brief return number of children in the traversal successor list */
   68314             :           virtual size_t get_numberOfTraversalSuccessors() override;
   68315             :       /*! \brief index-based access to traversal successors by index number */
   68316             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   68317             :       /*! \brief index-based access to traversal successors by child node */
   68318             :           virtual size_t get_childIndex(SgNode *child) override;
   68319             : 
   68320             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   68321             :        // MS: 08/16/2002 method for generating RTI information
   68322             :       /*! \brief return C++ Runtime-Time-Information */
   68323             :           virtual RTIReturnType roseRTI() override;
   68324             : #endif
   68325             :       /* */
   68326             : 
   68327             : 
   68328             : 
   68329             :       /* name Deprecated Functions
   68330             :           \brief Deprecated functions ... incomplete-documentation
   68331             : 
   68332             :           These functions have been deprecated from use.
   68333             :        */
   68334             :       /* */
   68335             : 
   68336             :       /*! returns a C style string (char*) representing the class name */
   68337             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   68338             : 
   68339             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   68340             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   68341             : #if 0
   68342             :       /*! returns old style Sage II enum values */
   68343             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   68344             :       /*! returns old style Sage II enum values */
   68345             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   68346             : #endif
   68347             :       /* */
   68348             : 
   68349             : 
   68350             : 
   68351             : 
   68352             :      public:
   68353             :       /* name Traversal Support Functions
   68354             :           \brief Traversal support functions ... incomplete-documentation
   68355             : 
   68356             :           These functions have been made public as part of the design, but they are suggested for internal use 
   68357             :           or by particularly knowledgable users for specialized tools or applications.
   68358             :        */
   68359             :       /* */
   68360             : 
   68361             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   68362             :        // (inferior to ROSE traversal mechanism, experimental).
   68363             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   68364             :        */
   68365             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   68366             : 
   68367             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   68368             :       /*! \brief support for the classic visitor pattern done in GoF */
   68369             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   68370             : 
   68371             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   68372             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   68373             :        */
   68374             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   68375             : 
   68376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   68377             :        */
   68378             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   68379             : 
   68380             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   68381             :        // This traversal helps support internal tools that call static member functions.
   68382             :        // note: this function operates on the memory pools.
   68383             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   68384             :        */
   68385             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   68386             :       /* */
   68387             : 
   68388             : 
   68389             :      public:
   68390             :       /* name Memory Allocation Functions
   68391             :           \brief Memory allocations functions ... incomplete-documentation
   68392             : 
   68393             :           These functions have been made public as part of the design, but they are suggested for internal use 
   68394             :           or by particularly knowledgable users for specialized tools or applications.
   68395             :        */
   68396             :       /* */
   68397             : 
   68398             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   68399             : 
   68400             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   68401             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   68402             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   68403             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   68404             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   68405             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   68406             :           being used with the AST File I/O mechanism.
   68407             :        */
   68408             :           virtual bool isInMemoryPool() override;
   68409             : 
   68410             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   68411             : 
   68412             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   68413             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   68414             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   68415             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   68416             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   68417             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   68418             :           being used with the AST File I/O mechanism.
   68419             :        */
   68420             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   68421             : 
   68422             :       // DQ (4/30/2006): Modified to be a const function.
   68423             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   68424             : 
   68425             :           This functions is part of general support for many possible tools to operate 
   68426             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   68427             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   68428             :           less than the set of pointers used by the AST file I/O. This is part of
   68429             :           work implemented by Andreas, and support tools such as the AST graph generation.
   68430             : 
   68431             :           \warning This function can return unexpected data members and thus the 
   68432             :                    order and the number of elements is unpredicable and subject 
   68433             :                    to change.
   68434             : 
   68435             :           \returns STL vector of pairs of SgNode* and strings
   68436             :        */
   68437             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   68438             : 
   68439             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   68440             : 
   68441             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   68442             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   68443             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   68444             : 
   68445             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   68446             :                    and subject to change.
   68447             :        */
   68448             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   68449             : 
   68450             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   68451             : 
   68452             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   68453             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   68454             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   68455             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   68456             : 
   68457             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   68458             : 
   68459             :           \returns long
   68460             :        */
   68461             :           virtual long getChildIndex( SgNode* childNode ) const override;
   68462             : 
   68463             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   68464             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68465             :       /* \brief Constructor for use by AST File I/O Mechanism
   68466             : 
   68467             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   68468             :           which obtained via fast binary file I/O from disk.
   68469             :        */
   68470             :        // SgTypeCAFTeam( SgTypeCAFTeamStorageClass& source );
   68471             : 
   68472             : 
   68473             : 
   68474             : 
   68475             : 
   68476             :  // JH (10/24/2005): methods added to support the ast file IO
   68477             :     private:
   68478             : 
   68479             :       /* name AST Memory Allocation Support Functions
   68480             :           \brief Memory allocations support....
   68481             : 
   68482             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   68483             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   68484             :           and support the AST File I/O Mechanism.
   68485             :        */
   68486             :       /* */
   68487             : 
   68488             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   68489             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   68490             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   68491             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   68492             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   68493             :           a correspinding one in the AST_FILE_IO class!
   68494             :        */
   68495             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   68496             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68497             :       /* \brief Typedef used for low level memory access.
   68498             :        */
   68499             :        // typedef unsigned char* TestType;
   68500             : 
   68501             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   68502             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68503             :       /* \brief Typedef used to hold memory addresses as values.
   68504             :        */
   68505             :        // typedef unsigned long  AddressType;
   68506             : 
   68507             : 
   68508             : 
   68509             :        // necessary, to have direct access to the p_freepointer and the private methods !
   68510             :       /*! \brief friend class declaration to support AST File I/O */
   68511             :           friend class AST_FILE_IO;
   68512             : 
   68513             :       /*! \brief friend class declaration to support AST File I/O */
   68514             :           friend class SgTypeCAFTeamStorageClass;
   68515             : 
   68516             :       /*! \brief friend class declaration to support AST File I/O */
   68517             :           friend class AstSpecificDataManagingClass;
   68518             : 
   68519             :       /*! \brief friend class declaration to support AST File I/O */
   68520             :           friend class AstSpecificDataManagingClassStorageClass;
   68521             :     public:
   68522             :       /*! \brief IR node constructor to support AST File I/O */
   68523             :           SgTypeCAFTeam( const SgTypeCAFTeamStorageClass& source );
   68524             : 
   68525             :  // private: // JJW hack
   68526             :        /*
   68527             :           name AST Memory Allocation Support Variables
   68528             :           Memory allocations support variables 
   68529             : 
   68530             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   68531             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   68532             :           and support the AST File I/O Mechanism.
   68533             :        */
   68534             :       /* */
   68535             : 
   68536             :     public:
   68537             : 
   68538             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   68539             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   68540             :       // virtual SgNode* addRegExpAttribute();
   68541             :       /*! \brief Support for AST matching using regular expression.
   68542             : 
   68543             :           This support is incomplete and the subject of current research to define 
   68544             :           RegEx trees to support inexact matching.
   68545             :        */
   68546             :           SgTypeCAFTeam* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   68547             : 
   68548             : // *** COMMON CODE SECTION ENDS HERE ***
   68549             : 
   68550             : 
   68551             : // End of memberFunctionString
   68552             : // Start of memberFunctionString
   68553             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   68554             : 
   68555             :      // the generated cast function
   68556             :      // friend ROSE_DLL_API SgTypeCAFTeam* isSgTypeCAFTeam ( SgNode* s );
   68557             : 
   68558             :           typedef SgType base_node_type;
   68559             : 
   68560             : 
   68561             : // End of memberFunctionString
   68562             : // Start of memberFunctionString
   68563             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   68564             : 
   68565             :        // SgName get_mangled ( SgUnparse_Info & info );
   68566             : 
   68567             :       //! Mangled name support for unparser support
   68568             :        // SgName get_mangled ( SgUnparse_Info & info );
   68569             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   68570             :           virtual SgName get_mangled (void) const override;
   68571             : 
   68572             : 
   68573             : 
   68574             : // End of memberFunctionString
   68575             : // Start of memberFunctionString
   68576             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   68577             : 
   68578             :       //! example of type used where construction is particularly simple
   68579             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   68580             :        // static SgTypeCAFTeam builtin_type;
   68581             :        // static SgTypeCAFTeam* builtin_type;
   68582             : 
   68583             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   68584             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   68585             :        // own data member and associated access function.
   68586             :        // static SgTypeCAFTeam* get_builtin_type();
   68587             : 
   68588             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   68589             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   68590             :        // own data member and associated access function.
   68591             :        // static void set_builtin_type(SgTypeCAFTeam* builtin_type);
   68592             : 
   68593             :       //! function returns example of type
   68594             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   68595             :        // static SgTypeCAFTeam* createType(void);
   68596             :           static SgTypeCAFTeam* createType(SgExpression* optional_fortran_type_kind = NULL);
   68597             : 
   68598             : 
   68599             : // End of memberFunctionString
   68600             : 
   68601             : 
   68602             : 
   68603             :      public: 
   68604             :          virtual ~SgTypeCAFTeam();
   68605             : 
   68606             : 
   68607             :      public: 
   68608             :          SgTypeCAFTeam(); 
   68609             : 
   68610             :     protected:
   68611             : // Start of memberFunctionString
   68612             : static SgTypeCAFTeam* p_builtin_type;
   68613             :           
   68614             : // End of memberFunctionString
   68615             : 
   68616             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeCAFTeam>;
   68617             : 
   68618             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68619             : 
   68620             : 
   68621             :    };
   68622             : #endif
   68623             : 
   68624             : // postdeclarations for SgTypeCAFTeam
   68625             : 
   68626             : /* #line 68627 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68627             : 
   68628             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   68629             : 
   68630             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68631             : 
   68632             : 
   68633             : /* #line 68634 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68634             : 
   68635             : 
   68636             : 
   68637             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68638             : 
   68639             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   68640             : //      This code is automatically generated for each 
   68641             : //      terminal and non-terminal within the defined 
   68642             : //      grammar.  There is a simple way to change the 
   68643             : //      code to fix bugs etc.  See the ROSE README file
   68644             : //      for directions.
   68645             : 
   68646             : // tps: (02/22/2010): Adding DLL export requirements
   68647             : #include "rosedll.h"
   68648             : 
   68649             : // predeclarations for SgTypeCrayPointer
   68650             : 
   68651             : /* #line 68652 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68652             : 
   68653             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   68654             : 
   68655             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   68656             : 
   68657             : #if 1
   68658             : // Class Definition for SgTypeCrayPointer
   68659             : class ROSE_DLL_API SgTypeCrayPointer  : public SgType
   68660             :    {
   68661             :      public:
   68662             : 
   68663             : 
   68664             : /* #line 68665 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   68665             : 
   68666             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   68667             : // Start of memberFunctionString
   68668             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   68669             : 
   68670             : // *** COMMON CODE SECTION BEGINS HERE ***
   68671             : 
   68672             :     public:
   68673             : 
   68674             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   68675             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   68676             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   68677             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   68678             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   68679             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   68680             : 
   68681             :       /*! \brief returns a string representing the class name */
   68682             :           virtual std::string class_name() const override;
   68683             : 
   68684             :       /*! \brief returns new style SageIII enum values */
   68685             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   68686             : 
   68687             :       /*! \brief static variant value */
   68688             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   68689             :        // static const VariantT static_variant = V_SgTypeCrayPointer;
   68690             :           enum { static_variant = V_SgTypeCrayPointer };
   68691             : 
   68692             :        /* the generated cast function */
   68693             :       /*! \brief Casts pointer from base class to derived class */
   68694             :           ROSE_DLL_API friend       SgTypeCrayPointer* isSgTypeCrayPointer(       SgNode * s );
   68695             : 
   68696             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   68697             :           ROSE_DLL_API friend const SgTypeCrayPointer* isSgTypeCrayPointer( const SgNode * s );
   68698             : 
   68699             :      // ******************************************
   68700             :      // * Memory Pool / New / Delete
   68701             :      // ******************************************
   68702             : 
   68703             :      public:
   68704             :           /// \private
   68705             :           static const unsigned pool_size; //
   68706             :           /// \private
   68707             :           static std::vector<unsigned char *> pools; //
   68708             :           /// \private
   68709             :           static SgTypeCrayPointer * next_node; // 
   68710             : 
   68711             :           /// \private
   68712             :           static unsigned long initializeStorageClassArray(SgTypeCrayPointerStorageClass *); //
   68713             : 
   68714             :           /// \private
   68715             :           static void clearMemoryPool(); //
   68716             :           static void deleteMemoryPool(); //
   68717             : 
   68718             :           /// \private
   68719             :           static void extendMemoryPoolForFileIO(); //
   68720             : 
   68721             :           /// \private
   68722             :           static SgTypeCrayPointer * getPointerFromGlobalIndex(unsigned long); //
   68723             :           /// \private
   68724             :           static SgTypeCrayPointer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   68725             : 
   68726             :           /// \private
   68727             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   68728             :           /// \private
   68729             :           static void resetValidFreepointers(); //
   68730             :           /// \private
   68731             :           static unsigned long getNumberOfLastValidPointer(); //
   68732             : 
   68733             : 
   68734             : #if defined(INLINE_FUNCTIONS)
   68735             :       /*! \brief returns pointer to newly allocated IR node */
   68736             :           inline void *operator new (size_t size);
   68737             : #else
   68738             :       /*! \brief returns pointer to newly allocated IR node */
   68739             :           void *operator new (size_t size);
   68740             : #endif
   68741             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   68742             :           void operator delete (void* pointer, size_t size);
   68743             : 
   68744             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   68745           0 :           void operator delete (void* pointer)
   68746             :              {
   68747             :             // This is the generated delete operator...
   68748           0 :                SgTypeCrayPointer::operator delete (pointer,sizeof(SgTypeCrayPointer));
   68749             :              }
   68750             : 
   68751             :       /*! \brief Returns the total number of IR nodes of this type */
   68752             :           static size_t numberOfNodes();
   68753             : 
   68754             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   68755             :           static size_t memoryUsage();
   68756             : 
   68757             :       // End of scope which started in IR nodes specific code 
   68758             :       /* */
   68759             : 
   68760             :       /* name Internal Functions
   68761             :           \brief Internal functions ... incomplete-documentation
   68762             : 
   68763             :           These functions have been made public as part of the design, but they are suggested for internal use 
   68764             :           or by particularly knowledgeable users for specialized tools or applications.
   68765             : 
   68766             :           \internal We could not make these private because they are required by user for special purposes. And 
   68767             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   68768             :          
   68769             :        */
   68770             : 
   68771             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   68772             :        // overridden in every class by *generated* implementation
   68773             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   68774             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   68775             :        // MS: 06/28/02 container of names of variables or container indices 
   68776             :        // used used in the traversal to access AST successor nodes
   68777             :        // overridden in every class by *generated* implementation
   68778             :       /*! \brief container of names of variables or container indices used used in the traversal
   68779             :           to access AST successor nodes overridden in every class by *generated* implementation */
   68780             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   68781             : 
   68782             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   68783             :        // than all the vector copies. The implementation for these functions is generated for each class.
   68784             :       /*! \brief return number of children in the traversal successor list */
   68785             :           virtual size_t get_numberOfTraversalSuccessors() override;
   68786             :       /*! \brief index-based access to traversal successors by index number */
   68787             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   68788             :       /*! \brief index-based access to traversal successors by child node */
   68789             :           virtual size_t get_childIndex(SgNode *child) override;
   68790             : 
   68791             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   68792             :        // MS: 08/16/2002 method for generating RTI information
   68793             :       /*! \brief return C++ Runtime-Time-Information */
   68794             :           virtual RTIReturnType roseRTI() override;
   68795             : #endif
   68796             :       /* */
   68797             : 
   68798             : 
   68799             : 
   68800             :       /* name Deprecated Functions
   68801             :           \brief Deprecated functions ... incomplete-documentation
   68802             : 
   68803             :           These functions have been deprecated from use.
   68804             :        */
   68805             :       /* */
   68806             : 
   68807             :       /*! returns a C style string (char*) representing the class name */
   68808             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   68809             : 
   68810             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   68811             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   68812             : #if 0
   68813             :       /*! returns old style Sage II enum values */
   68814             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   68815             :       /*! returns old style Sage II enum values */
   68816             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   68817             : #endif
   68818             :       /* */
   68819             : 
   68820             : 
   68821             : 
   68822             : 
   68823             :      public:
   68824             :       /* name Traversal Support Functions
   68825             :           \brief Traversal support functions ... incomplete-documentation
   68826             : 
   68827             :           These functions have been made public as part of the design, but they are suggested for internal use 
   68828             :           or by particularly knowledgable users for specialized tools or applications.
   68829             :        */
   68830             :       /* */
   68831             : 
   68832             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   68833             :        // (inferior to ROSE traversal mechanism, experimental).
   68834             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   68835             :        */
   68836             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   68837             : 
   68838             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   68839             :       /*! \brief support for the classic visitor pattern done in GoF */
   68840             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   68841             : 
   68842             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   68843             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   68844             :        */
   68845             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   68846             : 
   68847             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   68848             :        */
   68849             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   68850             : 
   68851             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   68852             :        // This traversal helps support internal tools that call static member functions.
   68853             :        // note: this function operates on the memory pools.
   68854             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   68855             :        */
   68856             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   68857             :       /* */
   68858             : 
   68859             : 
   68860             :      public:
   68861             :       /* name Memory Allocation Functions
   68862             :           \brief Memory allocations functions ... incomplete-documentation
   68863             : 
   68864             :           These functions have been made public as part of the design, but they are suggested for internal use 
   68865             :           or by particularly knowledgable users for specialized tools or applications.
   68866             :        */
   68867             :       /* */
   68868             : 
   68869             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   68870             : 
   68871             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   68872             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   68873             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   68874             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   68875             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   68876             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   68877             :           being used with the AST File I/O mechanism.
   68878             :        */
   68879             :           virtual bool isInMemoryPool() override;
   68880             : 
   68881             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   68882             : 
   68883             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   68884             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   68885             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   68886             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   68887             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   68888             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   68889             :           being used with the AST File I/O mechanism.
   68890             :        */
   68891             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   68892             : 
   68893             :       // DQ (4/30/2006): Modified to be a const function.
   68894             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   68895             : 
   68896             :           This functions is part of general support for many possible tools to operate 
   68897             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   68898             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   68899             :           less than the set of pointers used by the AST file I/O. This is part of
   68900             :           work implemented by Andreas, and support tools such as the AST graph generation.
   68901             : 
   68902             :           \warning This function can return unexpected data members and thus the 
   68903             :                    order and the number of elements is unpredicable and subject 
   68904             :                    to change.
   68905             : 
   68906             :           \returns STL vector of pairs of SgNode* and strings
   68907             :        */
   68908             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   68909             : 
   68910             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   68911             : 
   68912             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   68913             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   68914             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   68915             : 
   68916             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   68917             :                    and subject to change.
   68918             :        */
   68919             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   68920             : 
   68921             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   68922             : 
   68923             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   68924             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   68925             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   68926             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   68927             : 
   68928             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   68929             : 
   68930             :           \returns long
   68931             :        */
   68932             :           virtual long getChildIndex( SgNode* childNode ) const override;
   68933             : 
   68934             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   68935             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68936             :       /* \brief Constructor for use by AST File I/O Mechanism
   68937             : 
   68938             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   68939             :           which obtained via fast binary file I/O from disk.
   68940             :        */
   68941             :        // SgTypeCrayPointer( SgTypeCrayPointerStorageClass& source );
   68942             : 
   68943             : 
   68944             : 
   68945             : 
   68946             : 
   68947             :  // JH (10/24/2005): methods added to support the ast file IO
   68948             :     private:
   68949             : 
   68950             :       /* name AST Memory Allocation Support Functions
   68951             :           \brief Memory allocations support....
   68952             : 
   68953             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   68954             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   68955             :           and support the AST File I/O Mechanism.
   68956             :        */
   68957             :       /* */
   68958             : 
   68959             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   68960             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   68961             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   68962             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   68963             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   68964             :           a correspinding one in the AST_FILE_IO class!
   68965             :        */
   68966             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   68967             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68968             :       /* \brief Typedef used for low level memory access.
   68969             :        */
   68970             :        // typedef unsigned char* TestType;
   68971             : 
   68972             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   68973             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   68974             :       /* \brief Typedef used to hold memory addresses as values.
   68975             :        */
   68976             :        // typedef unsigned long  AddressType;
   68977             : 
   68978             : 
   68979             : 
   68980             :        // necessary, to have direct access to the p_freepointer and the private methods !
   68981             :       /*! \brief friend class declaration to support AST File I/O */
   68982             :           friend class AST_FILE_IO;
   68983             : 
   68984             :       /*! \brief friend class declaration to support AST File I/O */
   68985             :           friend class SgTypeCrayPointerStorageClass;
   68986             : 
   68987             :       /*! \brief friend class declaration to support AST File I/O */
   68988             :           friend class AstSpecificDataManagingClass;
   68989             : 
   68990             :       /*! \brief friend class declaration to support AST File I/O */
   68991             :           friend class AstSpecificDataManagingClassStorageClass;
   68992             :     public:
   68993             :       /*! \brief IR node constructor to support AST File I/O */
   68994             :           SgTypeCrayPointer( const SgTypeCrayPointerStorageClass& source );
   68995             : 
   68996             :  // private: // JJW hack
   68997             :        /*
   68998             :           name AST Memory Allocation Support Variables
   68999             :           Memory allocations support variables 
   69000             : 
   69001             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   69002             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   69003             :           and support the AST File I/O Mechanism.
   69004             :        */
   69005             :       /* */
   69006             : 
   69007             :     public:
   69008             : 
   69009             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   69010             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   69011             :       // virtual SgNode* addRegExpAttribute();
   69012             :       /*! \brief Support for AST matching using regular expression.
   69013             : 
   69014             :           This support is incomplete and the subject of current research to define 
   69015             :           RegEx trees to support inexact matching.
   69016             :        */
   69017             :           SgTypeCrayPointer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   69018             : 
   69019             : // *** COMMON CODE SECTION ENDS HERE ***
   69020             : 
   69021             : 
   69022             : // End of memberFunctionString
   69023             : // Start of memberFunctionString
   69024             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   69025             : 
   69026             :      // the generated cast function
   69027             :      // friend ROSE_DLL_API SgTypeCrayPointer* isSgTypeCrayPointer ( SgNode* s );
   69028             : 
   69029             :           typedef SgType base_node_type;
   69030             : 
   69031             : 
   69032             : // End of memberFunctionString
   69033             : // Start of memberFunctionString
   69034             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   69035             : 
   69036             :        // SgName get_mangled ( SgUnparse_Info & info );
   69037             : 
   69038             :       //! Mangled name support for unparser support
   69039             :        // SgName get_mangled ( SgUnparse_Info & info );
   69040             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   69041             :           virtual SgName get_mangled (void) const override;
   69042             : 
   69043             : 
   69044             : 
   69045             : // End of memberFunctionString
   69046             : // Start of memberFunctionString
   69047             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   69048             : 
   69049             :       //! example of type used where construction is particularly simple
   69050             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   69051             :        // static SgTypeCrayPointer builtin_type;
   69052             :        // static SgTypeCrayPointer* builtin_type;
   69053             : 
   69054             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   69055             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   69056             :        // own data member and associated access function.
   69057             :        // static SgTypeCrayPointer* get_builtin_type();
   69058             : 
   69059             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   69060             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   69061             :        // own data member and associated access function.
   69062             :        // static void set_builtin_type(SgTypeCrayPointer* builtin_type);
   69063             : 
   69064             :       //! function returns example of type
   69065             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   69066             :        // static SgTypeCrayPointer* createType(void);
   69067             :           static SgTypeCrayPointer* createType(SgExpression* optional_fortran_type_kind = NULL);
   69068             : 
   69069             : 
   69070             : // End of memberFunctionString
   69071             : 
   69072             : 
   69073             : 
   69074             :      public: 
   69075             :          virtual ~SgTypeCrayPointer();
   69076             : 
   69077             : 
   69078             :      public: 
   69079             :          SgTypeCrayPointer(); 
   69080             : 
   69081             :     protected:
   69082             : // Start of memberFunctionString
   69083             : static SgTypeCrayPointer* p_builtin_type;
   69084             :           
   69085             : // End of memberFunctionString
   69086             : 
   69087             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeCrayPointer>;
   69088             : 
   69089             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69090             : 
   69091             : 
   69092             :    };
   69093             : #endif
   69094             : 
   69095             : // postdeclarations for SgTypeCrayPointer
   69096             : 
   69097             : /* #line 69098 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69098             : 
   69099             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   69100             : 
   69101             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69102             : 
   69103             : 
   69104             : /* #line 69105 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69105             : 
   69106             : 
   69107             : 
   69108             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69109             : 
   69110             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   69111             : //      This code is automatically generated for each 
   69112             : //      terminal and non-terminal within the defined 
   69113             : //      grammar.  There is a simple way to change the 
   69114             : //      code to fix bugs etc.  See the ROSE README file
   69115             : //      for directions.
   69116             : 
   69117             : // tps: (02/22/2010): Adding DLL export requirements
   69118             : #include "rosedll.h"
   69119             : 
   69120             : // predeclarations for SgTypeLabel
   69121             : 
   69122             : /* #line 69123 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69123             : 
   69124             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   69125             : 
   69126             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69127             : 
   69128             : #if 1
   69129             : // Class Definition for SgTypeLabel
   69130             : class ROSE_DLL_API SgTypeLabel  : public SgType
   69131             :    {
   69132             :      public:
   69133             : 
   69134             : 
   69135             : /* #line 69136 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69136             : 
   69137             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   69138             : // Start of memberFunctionString
   69139             : /* #line 964 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   69140             : 
   69141             : 
   69142             :        // Generated a mangled name that accounts for the stored name internally.
   69143             :        // SgName get_mangled (void) const;
   69144             : 
   69145             :       //! Label type creation to support intermediate types built during parsing (required for fortran only).
   69146             :           static SgTypeLabel* createType ( const SgName & nameOfType );
   69147             : 
   69148             : 
   69149             : 
   69150             : // End of memberFunctionString
   69151             : // Start of memberFunctionString
   69152             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   69153             : 
   69154             : // *** COMMON CODE SECTION BEGINS HERE ***
   69155             : 
   69156             :     public:
   69157             : 
   69158             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   69159             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   69160             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   69161             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   69162             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   69163             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   69164             : 
   69165             :       /*! \brief returns a string representing the class name */
   69166             :           virtual std::string class_name() const override;
   69167             : 
   69168             :       /*! \brief returns new style SageIII enum values */
   69169             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   69170             : 
   69171             :       /*! \brief static variant value */
   69172             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   69173             :        // static const VariantT static_variant = V_SgTypeLabel;
   69174             :           enum { static_variant = V_SgTypeLabel };
   69175             : 
   69176             :        /* the generated cast function */
   69177             :       /*! \brief Casts pointer from base class to derived class */
   69178             :           ROSE_DLL_API friend       SgTypeLabel* isSgTypeLabel(       SgNode * s );
   69179             : 
   69180             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   69181             :           ROSE_DLL_API friend const SgTypeLabel* isSgTypeLabel( const SgNode * s );
   69182             : 
   69183             :      // ******************************************
   69184             :      // * Memory Pool / New / Delete
   69185             :      // ******************************************
   69186             : 
   69187             :      public:
   69188             :           /// \private
   69189             :           static const unsigned pool_size; //
   69190             :           /// \private
   69191             :           static std::vector<unsigned char *> pools; //
   69192             :           /// \private
   69193             :           static SgTypeLabel * next_node; // 
   69194             : 
   69195             :           /// \private
   69196             :           static unsigned long initializeStorageClassArray(SgTypeLabelStorageClass *); //
   69197             : 
   69198             :           /// \private
   69199             :           static void clearMemoryPool(); //
   69200             :           static void deleteMemoryPool(); //
   69201             : 
   69202             :           /// \private
   69203             :           static void extendMemoryPoolForFileIO(); //
   69204             : 
   69205             :           /// \private
   69206             :           static SgTypeLabel * getPointerFromGlobalIndex(unsigned long); //
   69207             :           /// \private
   69208             :           static SgTypeLabel * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   69209             : 
   69210             :           /// \private
   69211             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   69212             :           /// \private
   69213             :           static void resetValidFreepointers(); //
   69214             :           /// \private
   69215             :           static unsigned long getNumberOfLastValidPointer(); //
   69216             : 
   69217             : 
   69218             : #if defined(INLINE_FUNCTIONS)
   69219             :       /*! \brief returns pointer to newly allocated IR node */
   69220             :           inline void *operator new (size_t size);
   69221             : #else
   69222             :       /*! \brief returns pointer to newly allocated IR node */
   69223             :           void *operator new (size_t size);
   69224             : #endif
   69225             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   69226             :           void operator delete (void* pointer, size_t size);
   69227             : 
   69228             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   69229           0 :           void operator delete (void* pointer)
   69230             :              {
   69231             :             // This is the generated delete operator...
   69232           0 :                SgTypeLabel::operator delete (pointer,sizeof(SgTypeLabel));
   69233             :              }
   69234             : 
   69235             :       /*! \brief Returns the total number of IR nodes of this type */
   69236             :           static size_t numberOfNodes();
   69237             : 
   69238             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   69239             :           static size_t memoryUsage();
   69240             : 
   69241             :       // End of scope which started in IR nodes specific code 
   69242             :       /* */
   69243             : 
   69244             :       /* name Internal Functions
   69245             :           \brief Internal functions ... incomplete-documentation
   69246             : 
   69247             :           These functions have been made public as part of the design, but they are suggested for internal use 
   69248             :           or by particularly knowledgeable users for specialized tools or applications.
   69249             : 
   69250             :           \internal We could not make these private because they are required by user for special purposes. And 
   69251             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   69252             :          
   69253             :        */
   69254             : 
   69255             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   69256             :        // overridden in every class by *generated* implementation
   69257             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   69258             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   69259             :        // MS: 06/28/02 container of names of variables or container indices 
   69260             :        // used used in the traversal to access AST successor nodes
   69261             :        // overridden in every class by *generated* implementation
   69262             :       /*! \brief container of names of variables or container indices used used in the traversal
   69263             :           to access AST successor nodes overridden in every class by *generated* implementation */
   69264             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   69265             : 
   69266             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   69267             :        // than all the vector copies. The implementation for these functions is generated for each class.
   69268             :       /*! \brief return number of children in the traversal successor list */
   69269             :           virtual size_t get_numberOfTraversalSuccessors() override;
   69270             :       /*! \brief index-based access to traversal successors by index number */
   69271             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   69272             :       /*! \brief index-based access to traversal successors by child node */
   69273             :           virtual size_t get_childIndex(SgNode *child) override;
   69274             : 
   69275             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   69276             :        // MS: 08/16/2002 method for generating RTI information
   69277             :       /*! \brief return C++ Runtime-Time-Information */
   69278             :           virtual RTIReturnType roseRTI() override;
   69279             : #endif
   69280             :       /* */
   69281             : 
   69282             : 
   69283             : 
   69284             :       /* name Deprecated Functions
   69285             :           \brief Deprecated functions ... incomplete-documentation
   69286             : 
   69287             :           These functions have been deprecated from use.
   69288             :        */
   69289             :       /* */
   69290             : 
   69291             :       /*! returns a C style string (char*) representing the class name */
   69292             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   69293             : 
   69294             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   69295             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   69296             : #if 0
   69297             :       /*! returns old style Sage II enum values */
   69298             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   69299             :       /*! returns old style Sage II enum values */
   69300             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   69301             : #endif
   69302             :       /* */
   69303             : 
   69304             : 
   69305             : 
   69306             : 
   69307             :      public:
   69308             :       /* name Traversal Support Functions
   69309             :           \brief Traversal support functions ... incomplete-documentation
   69310             : 
   69311             :           These functions have been made public as part of the design, but they are suggested for internal use 
   69312             :           or by particularly knowledgable users for specialized tools or applications.
   69313             :        */
   69314             :       /* */
   69315             : 
   69316             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   69317             :        // (inferior to ROSE traversal mechanism, experimental).
   69318             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   69319             :        */
   69320             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   69321             : 
   69322             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   69323             :       /*! \brief support for the classic visitor pattern done in GoF */
   69324             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   69325             : 
   69326             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   69327             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   69328             :        */
   69329             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   69330             : 
   69331             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   69332             :        */
   69333             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   69334             : 
   69335             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   69336             :        // This traversal helps support internal tools that call static member functions.
   69337             :        // note: this function operates on the memory pools.
   69338             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   69339             :        */
   69340             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   69341             :       /* */
   69342             : 
   69343             : 
   69344             :      public:
   69345             :       /* name Memory Allocation Functions
   69346             :           \brief Memory allocations functions ... incomplete-documentation
   69347             : 
   69348             :           These functions have been made public as part of the design, but they are suggested for internal use 
   69349             :           or by particularly knowledgable users for specialized tools or applications.
   69350             :        */
   69351             :       /* */
   69352             : 
   69353             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   69354             : 
   69355             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   69356             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   69357             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   69358             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   69359             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   69360             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   69361             :           being used with the AST File I/O mechanism.
   69362             :        */
   69363             :           virtual bool isInMemoryPool() override;
   69364             : 
   69365             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   69366             : 
   69367             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   69368             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   69369             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   69370             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   69371             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   69372             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   69373             :           being used with the AST File I/O mechanism.
   69374             :        */
   69375             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   69376             : 
   69377             :       // DQ (4/30/2006): Modified to be a const function.
   69378             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   69379             : 
   69380             :           This functions is part of general support for many possible tools to operate 
   69381             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   69382             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   69383             :           less than the set of pointers used by the AST file I/O. This is part of
   69384             :           work implemented by Andreas, and support tools such as the AST graph generation.
   69385             : 
   69386             :           \warning This function can return unexpected data members and thus the 
   69387             :                    order and the number of elements is unpredicable and subject 
   69388             :                    to change.
   69389             : 
   69390             :           \returns STL vector of pairs of SgNode* and strings
   69391             :        */
   69392             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   69393             : 
   69394             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   69395             : 
   69396             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   69397             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   69398             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   69399             : 
   69400             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   69401             :                    and subject to change.
   69402             :        */
   69403             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   69404             : 
   69405             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   69406             : 
   69407             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   69408             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   69409             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   69410             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   69411             : 
   69412             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   69413             : 
   69414             :           \returns long
   69415             :        */
   69416             :           virtual long getChildIndex( SgNode* childNode ) const override;
   69417             : 
   69418             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   69419             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   69420             :       /* \brief Constructor for use by AST File I/O Mechanism
   69421             : 
   69422             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   69423             :           which obtained via fast binary file I/O from disk.
   69424             :        */
   69425             :        // SgTypeLabel( SgTypeLabelStorageClass& source );
   69426             : 
   69427             : 
   69428             : 
   69429             : 
   69430             : 
   69431             :  // JH (10/24/2005): methods added to support the ast file IO
   69432             :     private:
   69433             : 
   69434             :       /* name AST Memory Allocation Support Functions
   69435             :           \brief Memory allocations support....
   69436             : 
   69437             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   69438             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   69439             :           and support the AST File I/O Mechanism.
   69440             :        */
   69441             :       /* */
   69442             : 
   69443             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   69444             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   69445             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   69446             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   69447             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   69448             :           a correspinding one in the AST_FILE_IO class!
   69449             :        */
   69450             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   69451             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   69452             :       /* \brief Typedef used for low level memory access.
   69453             :        */
   69454             :        // typedef unsigned char* TestType;
   69455             : 
   69456             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   69457             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   69458             :       /* \brief Typedef used to hold memory addresses as values.
   69459             :        */
   69460             :        // typedef unsigned long  AddressType;
   69461             : 
   69462             : 
   69463             : 
   69464             :        // necessary, to have direct access to the p_freepointer and the private methods !
   69465             :       /*! \brief friend class declaration to support AST File I/O */
   69466             :           friend class AST_FILE_IO;
   69467             : 
   69468             :       /*! \brief friend class declaration to support AST File I/O */
   69469             :           friend class SgTypeLabelStorageClass;
   69470             : 
   69471             :       /*! \brief friend class declaration to support AST File I/O */
   69472             :           friend class AstSpecificDataManagingClass;
   69473             : 
   69474             :       /*! \brief friend class declaration to support AST File I/O */
   69475             :           friend class AstSpecificDataManagingClassStorageClass;
   69476             :     public:
   69477             :       /*! \brief IR node constructor to support AST File I/O */
   69478             :           SgTypeLabel( const SgTypeLabelStorageClass& source );
   69479             : 
   69480             :  // private: // JJW hack
   69481             :        /*
   69482             :           name AST Memory Allocation Support Variables
   69483             :           Memory allocations support variables 
   69484             : 
   69485             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   69486             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   69487             :           and support the AST File I/O Mechanism.
   69488             :        */
   69489             :       /* */
   69490             : 
   69491             :     public:
   69492             : 
   69493             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   69494             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   69495             :       // virtual SgNode* addRegExpAttribute();
   69496             :       /*! \brief Support for AST matching using regular expression.
   69497             : 
   69498             :           This support is incomplete and the subject of current research to define 
   69499             :           RegEx trees to support inexact matching.
   69500             :        */
   69501             :           SgTypeLabel* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   69502             : 
   69503             : // *** COMMON CODE SECTION ENDS HERE ***
   69504             : 
   69505             : 
   69506             : // End of memberFunctionString
   69507             : // Start of memberFunctionString
   69508             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   69509             : 
   69510             :      // the generated cast function
   69511             :      // friend ROSE_DLL_API SgTypeLabel* isSgTypeLabel ( SgNode* s );
   69512             : 
   69513             :           typedef SgType base_node_type;
   69514             : 
   69515             : 
   69516             : // End of memberFunctionString
   69517             : // Start of memberFunctionString
   69518             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   69519             : 
   69520             :        // SgName get_mangled ( SgUnparse_Info & info );
   69521             : 
   69522             :       //! Mangled name support for unparser support
   69523             :        // SgName get_mangled ( SgUnparse_Info & info );
   69524             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   69525             :           virtual SgName get_mangled (void) const override;
   69526             : 
   69527             : 
   69528             : 
   69529             : // End of memberFunctionString
   69530             : // Start of memberFunctionString
   69531             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   69532             : 
   69533             :       //! example of type used where construction is particularly simple
   69534             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   69535             :        // static SgTypeLabel builtin_type;
   69536             :        // static SgTypeLabel* builtin_type;
   69537             : 
   69538             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   69539             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   69540             :        // own data member and associated access function.
   69541             :        // static SgTypeLabel* get_builtin_type();
   69542             : 
   69543             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   69544             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   69545             :        // own data member and associated access function.
   69546             :        // static void set_builtin_type(SgTypeLabel* builtin_type);
   69547             : 
   69548             :       //! function returns example of type
   69549             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   69550             :        // static SgTypeLabel* createType(void);
   69551             :           static SgTypeLabel* createType(SgExpression* optional_fortran_type_kind = NULL);
   69552             : 
   69553             : 
   69554             : // End of memberFunctionString
   69555             : 
   69556             : 
   69557             :      public: 
   69558             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
   69559             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
   69560             : 
   69561             : 
   69562             :      public: 
   69563             :          virtual ~SgTypeLabel();
   69564             : 
   69565             : 
   69566             :      public: 
   69567             :          SgTypeLabel(); 
   69568             : 
   69569             :     protected:
   69570             : // Start of memberFunctionString
   69571             : static SgTypeLabel* p_builtin_type;
   69572             :           
   69573             : // End of memberFunctionString
   69574             : // Start of memberFunctionString
   69575             : SgName p_name;
   69576             :           
   69577             : // End of memberFunctionString
   69578             : 
   69579             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeLabel>;
   69580             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeLabel, SgName,&SgTypeLabel::p_name>;
   69581             : 
   69582             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69583             : 
   69584             : 
   69585             :    };
   69586             : #endif
   69587             : 
   69588             : // postdeclarations for SgTypeLabel
   69589             : 
   69590             : /* #line 69591 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69591             : 
   69592             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   69593             : 
   69594             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69595             : 
   69596             : 
   69597             : /* #line 69598 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69598             : 
   69599             : 
   69600             : 
   69601             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69602             : 
   69603             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   69604             : //      This code is automatically generated for each 
   69605             : //      terminal and non-terminal within the defined 
   69606             : //      grammar.  There is a simple way to change the 
   69607             : //      code to fix bugs etc.  See the ROSE README file
   69608             : //      for directions.
   69609             : 
   69610             : // tps: (02/22/2010): Adding DLL export requirements
   69611             : #include "rosedll.h"
   69612             : 
   69613             : // predeclarations for SgRvalueReferenceType
   69614             : 
   69615             : /* #line 69616 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69616             : 
   69617             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   69618             : 
   69619             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   69620             : 
   69621             : #if 1
   69622             : // Class Definition for SgRvalueReferenceType
   69623             : class ROSE_DLL_API SgRvalueReferenceType  : public SgType
   69624             :    {
   69625             :      public:
   69626             : 
   69627             : 
   69628             : /* #line 69629 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   69629             : 
   69630             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   69631             : // Start of memberFunctionString
   69632             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   69633             : 
   69634             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   69635             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   69636             :        // own data member and associated access function.
   69637             :        // static SgRvalueReferenceType* get_builtin_type();
   69638             : 
   69639             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   69640             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   69641             :        // own data member and associated access function.
   69642             :        // static void set_builtin_type(SgRvalueReferenceType* builtin_type);
   69643             : 
   69644             :       //! more sophisticated version for more complex types like SgRvalueReferenceType (types whose constructors take parameters)
   69645             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   69646             :        // static SgRvalueReferenceType* createType(SgType* type = NULL);
   69647             :           static SgRvalueReferenceType* createType(SgType* type = NULL, SgExpression* optional_fortran_type_kind = NULL);
   69648             : 
   69649             : 
   69650             : // End of memberFunctionString
   69651             : // Start of memberFunctionString
   69652             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   69653             : 
   69654             : // *** COMMON CODE SECTION BEGINS HERE ***
   69655             : 
   69656             :     public:
   69657             : 
   69658             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   69659             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   69660             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   69661             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   69662             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   69663             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   69664             : 
   69665             :       /*! \brief returns a string representing the class name */
   69666             :           virtual std::string class_name() const override;
   69667             : 
   69668             :       /*! \brief returns new style SageIII enum values */
   69669             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   69670             : 
   69671             :       /*! \brief static variant value */
   69672             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   69673             :        // static const VariantT static_variant = V_SgRvalueReferenceType;
   69674             :           enum { static_variant = V_SgRvalueReferenceType };
   69675             : 
   69676             :        /* the generated cast function */
   69677             :       /*! \brief Casts pointer from base class to derived class */
   69678             :           ROSE_DLL_API friend       SgRvalueReferenceType* isSgRvalueReferenceType(       SgNode * s );
   69679             : 
   69680             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   69681             :           ROSE_DLL_API friend const SgRvalueReferenceType* isSgRvalueReferenceType( const SgNode * s );
   69682             : 
   69683             :      // ******************************************
   69684             :      // * Memory Pool / New / Delete
   69685             :      // ******************************************
   69686             : 
   69687             :      public:
   69688             :           /// \private
   69689             :           static const unsigned pool_size; //
   69690             :           /// \private
   69691             :           static std::vector<unsigned char *> pools; //
   69692             :           /// \private
   69693             :           static SgRvalueReferenceType * next_node; // 
   69694             : 
   69695             :           /// \private
   69696             :           static unsigned long initializeStorageClassArray(SgRvalueReferenceTypeStorageClass *); //
   69697             : 
   69698             :           /// \private
   69699             :           static void clearMemoryPool(); //
   69700             :           static void deleteMemoryPool(); //
   69701             : 
   69702             :           /// \private
   69703             :           static void extendMemoryPoolForFileIO(); //
   69704             : 
   69705             :           /// \private
   69706             :           static SgRvalueReferenceType * getPointerFromGlobalIndex(unsigned long); //
   69707             :           /// \private
   69708             :           static SgRvalueReferenceType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   69709             : 
   69710             :           /// \private
   69711             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   69712             :           /// \private
   69713             :           static void resetValidFreepointers(); //
   69714             :           /// \private
   69715             :           static unsigned long getNumberOfLastValidPointer(); //
   69716             : 
   69717             : 
   69718             : #if defined(INLINE_FUNCTIONS)
   69719             :       /*! \brief returns pointer to newly allocated IR node */
   69720             :           inline void *operator new (size_t size);
   69721             : #else
   69722             :       /*! \brief returns pointer to newly allocated IR node */
   69723             :           void *operator new (size_t size);
   69724             : #endif
   69725             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   69726             :           void operator delete (void* pointer, size_t size);
   69727             : 
   69728             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   69729         364 :           void operator delete (void* pointer)
   69730             :              {
   69731             :             // This is the generated delete operator...
   69732         364 :                SgRvalueReferenceType::operator delete (pointer,sizeof(SgRvalueReferenceType));
   69733             :              }
   69734             : 
   69735             :       /*! \brief Returns the total number of IR nodes of this type */
   69736             :           static size_t numberOfNodes();
   69737             : 
   69738             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   69739             :           static size_t memoryUsage();
   69740             : 
   69741             :       // End of scope which started in IR nodes specific code 
   69742             :       /* */
   69743             : 
   69744             :       /* name Internal Functions
   69745             :           \brief Internal functions ... incomplete-documentation
   69746             : 
   69747             :           These functions have been made public as part of the design, but they are suggested for internal use 
   69748             :           or by particularly knowledgeable users for specialized tools or applications.
   69749             : 
   69750             :           \internal We could not make these private because they are required by user for special purposes. And 
   69751             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   69752             :          
   69753             :        */
   69754             : 
   69755             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   69756             :        // overridden in every class by *generated* implementation
   69757             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   69758             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   69759             :        // MS: 06/28/02 container of names of variables or container indices 
   69760             :        // used used in the traversal to access AST successor nodes
   69761             :        // overridden in every class by *generated* implementation
   69762             :       /*! \brief container of names of variables or container indices used used in the traversal
   69763             :           to access AST successor nodes overridden in every class by *generated* implementation */
   69764             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   69765             : 
   69766             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   69767             :        // than all the vector copies. The implementation for these functions is generated for each class.
   69768             :       /*! \brief return number of children in the traversal successor list */
   69769             :           virtual size_t get_numberOfTraversalSuccessors() override;
   69770             :       /*! \brief index-based access to traversal successors by index number */
   69771             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   69772             :       /*! \brief index-based access to traversal successors by child node */
   69773             :           virtual size_t get_childIndex(SgNode *child) override;
   69774             : 
   69775             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   69776             :        // MS: 08/16/2002 method for generating RTI information
   69777             :       /*! \brief return C++ Runtime-Time-Information */
   69778             :           virtual RTIReturnType roseRTI() override;
   69779             : #endif
   69780             :       /* */
   69781             : 
   69782             : 
   69783             : 
   69784             :       /* name Deprecated Functions
   69785             :           \brief Deprecated functions ... incomplete-documentation
   69786             : 
   69787             :           These functions have been deprecated from use.
   69788             :        */
   69789             :       /* */
   69790             : 
   69791             :       /*! returns a C style string (char*) representing the class name */
   69792             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   69793             : 
   69794             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   69795             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   69796             : #if 0
   69797             :       /*! returns old style Sage II enum values */
   69798             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   69799             :       /*! returns old style Sage II enum values */
   69800             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   69801             : #endif
   69802             :       /* */
   69803             : 
   69804             : 
   69805             : 
   69806             : 
   69807             :      public:
   69808             :       /* name Traversal Support Functions
   69809             :           \brief Traversal support functions ... incomplete-documentation
   69810             : 
   69811             :           These functions have been made public as part of the design, but they are suggested for internal use 
   69812             :           or by particularly knowledgable users for specialized tools or applications.
   69813             :        */
   69814             :       /* */
   69815             : 
   69816             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   69817             :        // (inferior to ROSE traversal mechanism, experimental).
   69818             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   69819             :        */
   69820             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   69821             : 
   69822             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   69823             :       /*! \brief support for the classic visitor pattern done in GoF */
   69824             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   69825             : 
   69826             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   69827             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   69828             :        */
   69829             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   69830             : 
   69831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   69832             :        */
   69833             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   69834             : 
   69835             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   69836             :        // This traversal helps support internal tools that call static member functions.
   69837             :        // note: this function operates on the memory pools.
   69838             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   69839             :        */
   69840             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   69841             :       /* */
   69842             : 
   69843             : 
   69844             :      public:
   69845             :       /* name Memory Allocation Functions
   69846             :           \brief Memory allocations functions ... incomplete-documentation
   69847             : 
   69848             :           These functions have been made public as part of the design, but they are suggested for internal use 
   69849             :           or by particularly knowledgable users for specialized tools or applications.
   69850             :        */
   69851             :       /* */
   69852             : 
   69853             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   69854             : 
   69855             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   69856             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   69857             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   69858             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   69859             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   69860             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   69861             :           being used with the AST File I/O mechanism.
   69862             :        */
   69863             :           virtual bool isInMemoryPool() override;
   69864             : 
   69865             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   69866             : 
   69867             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   69868             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   69869             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   69870             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   69871             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   69872             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   69873             :           being used with the AST File I/O mechanism.
   69874             :        */
   69875             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   69876             : 
   69877             :       // DQ (4/30/2006): Modified to be a const function.
   69878             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   69879             : 
   69880             :           This functions is part of general support for many possible tools to operate 
   69881             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   69882             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   69883             :           less than the set of pointers used by the AST file I/O. This is part of
   69884             :           work implemented by Andreas, and support tools such as the AST graph generation.
   69885             : 
   69886             :           \warning This function can return unexpected data members and thus the 
   69887             :                    order and the number of elements is unpredicable and subject 
   69888             :                    to change.
   69889             : 
   69890             :           \returns STL vector of pairs of SgNode* and strings
   69891             :        */
   69892             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   69893             : 
   69894             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   69895             : 
   69896             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   69897             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   69898             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   69899             : 
   69900             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   69901             :                    and subject to change.
   69902             :        */
   69903             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   69904             : 
   69905             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   69906             : 
   69907             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   69908             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   69909             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   69910             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   69911             : 
   69912             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   69913             : 
   69914             :           \returns long
   69915             :        */
   69916             :           virtual long getChildIndex( SgNode* childNode ) const override;
   69917             : 
   69918             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   69919             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   69920             :       /* \brief Constructor for use by AST File I/O Mechanism
   69921             : 
   69922             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   69923             :           which obtained via fast binary file I/O from disk.
   69924             :        */
   69925             :        // SgRvalueReferenceType( SgRvalueReferenceTypeStorageClass& source );
   69926             : 
   69927             : 
   69928             : 
   69929             : 
   69930             : 
   69931             :  // JH (10/24/2005): methods added to support the ast file IO
   69932             :     private:
   69933             : 
   69934             :       /* name AST Memory Allocation Support Functions
   69935             :           \brief Memory allocations support....
   69936             : 
   69937             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   69938             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   69939             :           and support the AST File I/O Mechanism.
   69940             :        */
   69941             :       /* */
   69942             : 
   69943             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   69944             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   69945             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   69946             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   69947             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   69948             :           a correspinding one in the AST_FILE_IO class!
   69949             :        */
   69950             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   69951             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   69952             :       /* \brief Typedef used for low level memory access.
   69953             :        */
   69954             :        // typedef unsigned char* TestType;
   69955             : 
   69956             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   69957             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   69958             :       /* \brief Typedef used to hold memory addresses as values.
   69959             :        */
   69960             :        // typedef unsigned long  AddressType;
   69961             : 
   69962             : 
   69963             : 
   69964             :        // necessary, to have direct access to the p_freepointer and the private methods !
   69965             :       /*! \brief friend class declaration to support AST File I/O */
   69966             :           friend class AST_FILE_IO;
   69967             : 
   69968             :       /*! \brief friend class declaration to support AST File I/O */
   69969             :           friend class SgRvalueReferenceTypeStorageClass;
   69970             : 
   69971             :       /*! \brief friend class declaration to support AST File I/O */
   69972             :           friend class AstSpecificDataManagingClass;
   69973             : 
   69974             :       /*! \brief friend class declaration to support AST File I/O */
   69975             :           friend class AstSpecificDataManagingClassStorageClass;
   69976             :     public:
   69977             :       /*! \brief IR node constructor to support AST File I/O */
   69978             :           SgRvalueReferenceType( const SgRvalueReferenceTypeStorageClass& source );
   69979             : 
   69980             :  // private: // JJW hack
   69981             :        /*
   69982             :           name AST Memory Allocation Support Variables
   69983             :           Memory allocations support variables 
   69984             : 
   69985             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   69986             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   69987             :           and support the AST File I/O Mechanism.
   69988             :        */
   69989             :       /* */
   69990             : 
   69991             :     public:
   69992             : 
   69993             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   69994             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   69995             :       // virtual SgNode* addRegExpAttribute();
   69996             :       /*! \brief Support for AST matching using regular expression.
   69997             : 
   69998             :           This support is incomplete and the subject of current research to define 
   69999             :           RegEx trees to support inexact matching.
   70000             :        */
   70001             :           SgRvalueReferenceType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   70002             : 
   70003             : // *** COMMON CODE SECTION ENDS HERE ***
   70004             : 
   70005             : 
   70006             : // End of memberFunctionString
   70007             : // Start of memberFunctionString
   70008             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   70009             : 
   70010             :      // the generated cast function
   70011             :      // friend ROSE_DLL_API SgRvalueReferenceType* isSgRvalueReferenceType ( SgNode* s );
   70012             : 
   70013             :           typedef SgType base_node_type;
   70014             : 
   70015             : 
   70016             : // End of memberFunctionString
   70017             : // Start of memberFunctionString
   70018             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   70019             : 
   70020             :        // SgName get_mangled ( SgUnparse_Info & info );
   70021             : 
   70022             :       //! Mangled name support for unparser support
   70023             :        // SgName get_mangled ( SgUnparse_Info & info );
   70024             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   70025             :           virtual SgName get_mangled (void) const override;
   70026             : 
   70027             : 
   70028             : 
   70029             : // End of memberFunctionString
   70030             : 
   70031             :      public: 
   70032             :          SgType* get_base_type() const;
   70033             :          void set_base_type(SgType* base_type);
   70034             : 
   70035             : 
   70036             :      public: 
   70037             :          virtual ~SgRvalueReferenceType();
   70038             : 
   70039             : 
   70040             :      public: 
   70041             :          SgRvalueReferenceType(SgType* base_type = NULL); 
   70042             : 
   70043             :     protected:
   70044             : // Start of memberFunctionString
   70045             : SgType* p_base_type;
   70046             :           
   70047             : // End of memberFunctionString
   70048             : 
   70049             :     friend struct Rose::Traits::generated::describe_node_t<SgRvalueReferenceType>;
   70050             :     friend struct Rose::Traits::generated::describe_field_t<SgRvalueReferenceType, SgType*,&SgRvalueReferenceType::p_base_type>;
   70051             : 
   70052             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70053             : 
   70054             : 
   70055             :    };
   70056             : #endif
   70057             : 
   70058             : // postdeclarations for SgRvalueReferenceType
   70059             : 
   70060             : /* #line 70061 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70061             : 
   70062             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   70063             : 
   70064             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70065             : 
   70066             : 
   70067             : /* #line 70068 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70068             : 
   70069             : 
   70070             : 
   70071             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70072             : 
   70073             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   70074             : //      This code is automatically generated for each 
   70075             : //      terminal and non-terminal within the defined 
   70076             : //      grammar.  There is a simple way to change the 
   70077             : //      code to fix bugs etc.  See the ROSE README file
   70078             : //      for directions.
   70079             : 
   70080             : // tps: (02/22/2010): Adding DLL export requirements
   70081             : #include "rosedll.h"
   70082             : 
   70083             : // predeclarations for SgTypeNullptr
   70084             : 
   70085             : /* #line 70086 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70086             : 
   70087             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   70088             : 
   70089             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70090             : 
   70091             : #if 1
   70092             : // Class Definition for SgTypeNullptr
   70093             : class ROSE_DLL_API SgTypeNullptr  : public SgType
   70094             :    {
   70095             :      public:
   70096             : 
   70097             : 
   70098             : /* #line 70099 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70099             : 
   70100             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   70101             : // Start of memberFunctionString
   70102             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   70103             : 
   70104             : // *** COMMON CODE SECTION BEGINS HERE ***
   70105             : 
   70106             :     public:
   70107             : 
   70108             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   70109             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   70110             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   70111             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   70112             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   70113             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   70114             : 
   70115             :       /*! \brief returns a string representing the class name */
   70116             :           virtual std::string class_name() const override;
   70117             : 
   70118             :       /*! \brief returns new style SageIII enum values */
   70119             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   70120             : 
   70121             :       /*! \brief static variant value */
   70122             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   70123             :        // static const VariantT static_variant = V_SgTypeNullptr;
   70124             :           enum { static_variant = V_SgTypeNullptr };
   70125             : 
   70126             :        /* the generated cast function */
   70127             :       /*! \brief Casts pointer from base class to derived class */
   70128             :           ROSE_DLL_API friend       SgTypeNullptr* isSgTypeNullptr(       SgNode * s );
   70129             : 
   70130             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   70131             :           ROSE_DLL_API friend const SgTypeNullptr* isSgTypeNullptr( const SgNode * s );
   70132             : 
   70133             :      // ******************************************
   70134             :      // * Memory Pool / New / Delete
   70135             :      // ******************************************
   70136             : 
   70137             :      public:
   70138             :           /// \private
   70139             :           static const unsigned pool_size; //
   70140             :           /// \private
   70141             :           static std::vector<unsigned char *> pools; //
   70142             :           /// \private
   70143             :           static SgTypeNullptr * next_node; // 
   70144             : 
   70145             :           /// \private
   70146             :           static unsigned long initializeStorageClassArray(SgTypeNullptrStorageClass *); //
   70147             : 
   70148             :           /// \private
   70149             :           static void clearMemoryPool(); //
   70150             :           static void deleteMemoryPool(); //
   70151             : 
   70152             :           /// \private
   70153             :           static void extendMemoryPoolForFileIO(); //
   70154             : 
   70155             :           /// \private
   70156             :           static SgTypeNullptr * getPointerFromGlobalIndex(unsigned long); //
   70157             :           /// \private
   70158             :           static SgTypeNullptr * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   70159             : 
   70160             :           /// \private
   70161             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   70162             :           /// \private
   70163             :           static void resetValidFreepointers(); //
   70164             :           /// \private
   70165             :           static unsigned long getNumberOfLastValidPointer(); //
   70166             : 
   70167             : 
   70168             : #if defined(INLINE_FUNCTIONS)
   70169             :       /*! \brief returns pointer to newly allocated IR node */
   70170             :           inline void *operator new (size_t size);
   70171             : #else
   70172             :       /*! \brief returns pointer to newly allocated IR node */
   70173             :           void *operator new (size_t size);
   70174             : #endif
   70175             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   70176             :           void operator delete (void* pointer, size_t size);
   70177             : 
   70178             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   70179         185 :           void operator delete (void* pointer)
   70180             :              {
   70181             :             // This is the generated delete operator...
   70182         185 :                SgTypeNullptr::operator delete (pointer,sizeof(SgTypeNullptr));
   70183             :              }
   70184             : 
   70185             :       /*! \brief Returns the total number of IR nodes of this type */
   70186             :           static size_t numberOfNodes();
   70187             : 
   70188             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   70189             :           static size_t memoryUsage();
   70190             : 
   70191             :       // End of scope which started in IR nodes specific code 
   70192             :       /* */
   70193             : 
   70194             :       /* name Internal Functions
   70195             :           \brief Internal functions ... incomplete-documentation
   70196             : 
   70197             :           These functions have been made public as part of the design, but they are suggested for internal use 
   70198             :           or by particularly knowledgeable users for specialized tools or applications.
   70199             : 
   70200             :           \internal We could not make these private because they are required by user for special purposes. And 
   70201             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   70202             :          
   70203             :        */
   70204             : 
   70205             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   70206             :        // overridden in every class by *generated* implementation
   70207             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   70208             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   70209             :        // MS: 06/28/02 container of names of variables or container indices 
   70210             :        // used used in the traversal to access AST successor nodes
   70211             :        // overridden in every class by *generated* implementation
   70212             :       /*! \brief container of names of variables or container indices used used in the traversal
   70213             :           to access AST successor nodes overridden in every class by *generated* implementation */
   70214             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   70215             : 
   70216             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   70217             :        // than all the vector copies. The implementation for these functions is generated for each class.
   70218             :       /*! \brief return number of children in the traversal successor list */
   70219             :           virtual size_t get_numberOfTraversalSuccessors() override;
   70220             :       /*! \brief index-based access to traversal successors by index number */
   70221             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   70222             :       /*! \brief index-based access to traversal successors by child node */
   70223             :           virtual size_t get_childIndex(SgNode *child) override;
   70224             : 
   70225             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   70226             :        // MS: 08/16/2002 method for generating RTI information
   70227             :       /*! \brief return C++ Runtime-Time-Information */
   70228             :           virtual RTIReturnType roseRTI() override;
   70229             : #endif
   70230             :       /* */
   70231             : 
   70232             : 
   70233             : 
   70234             :       /* name Deprecated Functions
   70235             :           \brief Deprecated functions ... incomplete-documentation
   70236             : 
   70237             :           These functions have been deprecated from use.
   70238             :        */
   70239             :       /* */
   70240             : 
   70241             :       /*! returns a C style string (char*) representing the class name */
   70242             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   70243             : 
   70244             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   70245             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   70246             : #if 0
   70247             :       /*! returns old style Sage II enum values */
   70248             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   70249             :       /*! returns old style Sage II enum values */
   70250             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   70251             : #endif
   70252             :       /* */
   70253             : 
   70254             : 
   70255             : 
   70256             : 
   70257             :      public:
   70258             :       /* name Traversal Support Functions
   70259             :           \brief Traversal support functions ... incomplete-documentation
   70260             : 
   70261             :           These functions have been made public as part of the design, but they are suggested for internal use 
   70262             :           or by particularly knowledgable users for specialized tools or applications.
   70263             :        */
   70264             :       /* */
   70265             : 
   70266             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   70267             :        // (inferior to ROSE traversal mechanism, experimental).
   70268             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   70269             :        */
   70270             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   70271             : 
   70272             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   70273             :       /*! \brief support for the classic visitor pattern done in GoF */
   70274             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   70275             : 
   70276             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   70277             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   70278             :        */
   70279             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   70280             : 
   70281             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   70282             :        */
   70283             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   70284             : 
   70285             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   70286             :        // This traversal helps support internal tools that call static member functions.
   70287             :        // note: this function operates on the memory pools.
   70288             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   70289             :        */
   70290             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   70291             :       /* */
   70292             : 
   70293             : 
   70294             :      public:
   70295             :       /* name Memory Allocation Functions
   70296             :           \brief Memory allocations functions ... incomplete-documentation
   70297             : 
   70298             :           These functions have been made public as part of the design, but they are suggested for internal use 
   70299             :           or by particularly knowledgable users for specialized tools or applications.
   70300             :        */
   70301             :       /* */
   70302             : 
   70303             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   70304             : 
   70305             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   70306             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   70307             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   70308             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   70309             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   70310             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   70311             :           being used with the AST File I/O mechanism.
   70312             :        */
   70313             :           virtual bool isInMemoryPool() override;
   70314             : 
   70315             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   70316             : 
   70317             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   70318             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   70319             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   70320             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   70321             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   70322             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   70323             :           being used with the AST File I/O mechanism.
   70324             :        */
   70325             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   70326             : 
   70327             :       // DQ (4/30/2006): Modified to be a const function.
   70328             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   70329             : 
   70330             :           This functions is part of general support for many possible tools to operate 
   70331             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   70332             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   70333             :           less than the set of pointers used by the AST file I/O. This is part of
   70334             :           work implemented by Andreas, and support tools such as the AST graph generation.
   70335             : 
   70336             :           \warning This function can return unexpected data members and thus the 
   70337             :                    order and the number of elements is unpredicable and subject 
   70338             :                    to change.
   70339             : 
   70340             :           \returns STL vector of pairs of SgNode* and strings
   70341             :        */
   70342             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   70343             : 
   70344             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   70345             : 
   70346             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   70347             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   70348             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   70349             : 
   70350             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   70351             :                    and subject to change.
   70352             :        */
   70353             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   70354             : 
   70355             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   70356             : 
   70357             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   70358             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   70359             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   70360             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   70361             : 
   70362             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   70363             : 
   70364             :           \returns long
   70365             :        */
   70366             :           virtual long getChildIndex( SgNode* childNode ) const override;
   70367             : 
   70368             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   70369             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   70370             :       /* \brief Constructor for use by AST File I/O Mechanism
   70371             : 
   70372             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   70373             :           which obtained via fast binary file I/O from disk.
   70374             :        */
   70375             :        // SgTypeNullptr( SgTypeNullptrStorageClass& source );
   70376             : 
   70377             : 
   70378             : 
   70379             : 
   70380             : 
   70381             :  // JH (10/24/2005): methods added to support the ast file IO
   70382             :     private:
   70383             : 
   70384             :       /* name AST Memory Allocation Support Functions
   70385             :           \brief Memory allocations support....
   70386             : 
   70387             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   70388             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   70389             :           and support the AST File I/O Mechanism.
   70390             :        */
   70391             :       /* */
   70392             : 
   70393             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   70394             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   70395             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   70396             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   70397             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   70398             :           a correspinding one in the AST_FILE_IO class!
   70399             :        */
   70400             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   70401             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   70402             :       /* \brief Typedef used for low level memory access.
   70403             :        */
   70404             :        // typedef unsigned char* TestType;
   70405             : 
   70406             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   70407             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   70408             :       /* \brief Typedef used to hold memory addresses as values.
   70409             :        */
   70410             :        // typedef unsigned long  AddressType;
   70411             : 
   70412             : 
   70413             : 
   70414             :        // necessary, to have direct access to the p_freepointer and the private methods !
   70415             :       /*! \brief friend class declaration to support AST File I/O */
   70416             :           friend class AST_FILE_IO;
   70417             : 
   70418             :       /*! \brief friend class declaration to support AST File I/O */
   70419             :           friend class SgTypeNullptrStorageClass;
   70420             : 
   70421             :       /*! \brief friend class declaration to support AST File I/O */
   70422             :           friend class AstSpecificDataManagingClass;
   70423             : 
   70424             :       /*! \brief friend class declaration to support AST File I/O */
   70425             :           friend class AstSpecificDataManagingClassStorageClass;
   70426             :     public:
   70427             :       /*! \brief IR node constructor to support AST File I/O */
   70428             :           SgTypeNullptr( const SgTypeNullptrStorageClass& source );
   70429             : 
   70430             :  // private: // JJW hack
   70431             :        /*
   70432             :           name AST Memory Allocation Support Variables
   70433             :           Memory allocations support variables 
   70434             : 
   70435             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   70436             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   70437             :           and support the AST File I/O Mechanism.
   70438             :        */
   70439             :       /* */
   70440             : 
   70441             :     public:
   70442             : 
   70443             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   70444             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   70445             :       // virtual SgNode* addRegExpAttribute();
   70446             :       /*! \brief Support for AST matching using regular expression.
   70447             : 
   70448             :           This support is incomplete and the subject of current research to define 
   70449             :           RegEx trees to support inexact matching.
   70450             :        */
   70451             :           SgTypeNullptr* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   70452             : 
   70453             : // *** COMMON CODE SECTION ENDS HERE ***
   70454             : 
   70455             : 
   70456             : // End of memberFunctionString
   70457             : // Start of memberFunctionString
   70458             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   70459             : 
   70460             :      // the generated cast function
   70461             :      // friend ROSE_DLL_API SgTypeNullptr* isSgTypeNullptr ( SgNode* s );
   70462             : 
   70463             :           typedef SgType base_node_type;
   70464             : 
   70465             : 
   70466             : // End of memberFunctionString
   70467             : // Start of memberFunctionString
   70468             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   70469             : 
   70470             :        // SgName get_mangled ( SgUnparse_Info & info );
   70471             : 
   70472             :       //! Mangled name support for unparser support
   70473             :        // SgName get_mangled ( SgUnparse_Info & info );
   70474             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   70475             :           virtual SgName get_mangled (void) const override;
   70476             : 
   70477             : 
   70478             : 
   70479             : // End of memberFunctionString
   70480             : // Start of memberFunctionString
   70481             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   70482             : 
   70483             :       //! example of type used where construction is particularly simple
   70484             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   70485             :        // static SgTypeNullptr builtin_type;
   70486             :        // static SgTypeNullptr* builtin_type;
   70487             : 
   70488             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   70489             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   70490             :        // own data member and associated access function.
   70491             :        // static SgTypeNullptr* get_builtin_type();
   70492             : 
   70493             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   70494             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   70495             :        // own data member and associated access function.
   70496             :        // static void set_builtin_type(SgTypeNullptr* builtin_type);
   70497             : 
   70498             :       //! function returns example of type
   70499             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   70500             :        // static SgTypeNullptr* createType(void);
   70501             :           static SgTypeNullptr* createType(SgExpression* optional_fortran_type_kind = NULL);
   70502             : 
   70503             : 
   70504             : // End of memberFunctionString
   70505             : 
   70506             : 
   70507             : 
   70508             :      public: 
   70509             :          virtual ~SgTypeNullptr();
   70510             : 
   70511             : 
   70512             :      public: 
   70513             :          SgTypeNullptr(); 
   70514             : 
   70515             :     protected:
   70516             : // Start of memberFunctionString
   70517             : static SgTypeNullptr* p_builtin_type;
   70518             :           
   70519             : // End of memberFunctionString
   70520             : 
   70521             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeNullptr>;
   70522             : 
   70523             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70524             : 
   70525             : 
   70526             :    };
   70527             : #endif
   70528             : 
   70529             : // postdeclarations for SgTypeNullptr
   70530             : 
   70531             : /* #line 70532 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70532             : 
   70533             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   70534             : 
   70535             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70536             : 
   70537             : 
   70538             : /* #line 70539 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70539             : 
   70540             : 
   70541             : 
   70542             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70543             : 
   70544             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   70545             : //      This code is automatically generated for each 
   70546             : //      terminal and non-terminal within the defined 
   70547             : //      grammar.  There is a simple way to change the 
   70548             : //      code to fix bugs etc.  See the ROSE README file
   70549             : //      for directions.
   70550             : 
   70551             : // tps: (02/22/2010): Adding DLL export requirements
   70552             : #include "rosedll.h"
   70553             : 
   70554             : // predeclarations for SgDeclType
   70555             : 
   70556             : /* #line 70557 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70557             : 
   70558             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   70559             : 
   70560             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   70561             : 
   70562             : #if 1
   70563             : // Class Definition for SgDeclType
   70564             : class ROSE_DLL_API SgDeclType  : public SgType
   70565             :    {
   70566             :      public:
   70567             : 
   70568             : 
   70569             : /* #line 70570 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   70570             : 
   70571             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   70572             : // Start of memberFunctionString
   70573             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   70574             : 
   70575             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   70576             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   70577             :        // own data member and associated access function.
   70578             :        // static SgDeclType* get_builtin_type();
   70579             : 
   70580             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   70581             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   70582             :        // own data member and associated access function.
   70583             :        // static void set_builtin_type(SgDeclType* builtin_type);
   70584             : 
   70585             :       //! more sophisticated version for more complex types like SgDeclType (types whose constructors take parameters)
   70586             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   70587             :        // static SgDeclType* createType(SgExpression* expr = NULL);
   70588             :           static SgDeclType* createType(SgExpression* expr = NULL, SgExpression* optional_fortran_type_kind = NULL);
   70589             : 
   70590             : 
   70591             : // End of memberFunctionString
   70592             : // Start of memberFunctionString
   70593             : /* #line 975 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   70594             : 
   70595             : 
   70596             :           void set_base_type(SgType* base_type);
   70597             : 
   70598             : 
   70599             : 
   70600             : // End of memberFunctionString
   70601             : // Start of memberFunctionString
   70602             : /* #line 385 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   70603             : 
   70604             :       //! This is used in the SgTypedefType object (is not associated with a base_type data field)
   70605             :           SgType* get_base_type() const;
   70606             : 
   70607             : 
   70608             : // End of memberFunctionString
   70609             : // Start of memberFunctionString
   70610             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   70611             : 
   70612             : // *** COMMON CODE SECTION BEGINS HERE ***
   70613             : 
   70614             :     public:
   70615             : 
   70616             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   70617             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   70618             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   70619             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   70620             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   70621             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   70622             : 
   70623             :       /*! \brief returns a string representing the class name */
   70624             :           virtual std::string class_name() const override;
   70625             : 
   70626             :       /*! \brief returns new style SageIII enum values */
   70627             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   70628             : 
   70629             :       /*! \brief static variant value */
   70630             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   70631             :        // static const VariantT static_variant = V_SgDeclType;
   70632             :           enum { static_variant = V_SgDeclType };
   70633             : 
   70634             :        /* the generated cast function */
   70635             :       /*! \brief Casts pointer from base class to derived class */
   70636             :           ROSE_DLL_API friend       SgDeclType* isSgDeclType(       SgNode * s );
   70637             : 
   70638             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   70639             :           ROSE_DLL_API friend const SgDeclType* isSgDeclType( const SgNode * s );
   70640             : 
   70641             :      // ******************************************
   70642             :      // * Memory Pool / New / Delete
   70643             :      // ******************************************
   70644             : 
   70645             :      public:
   70646             :           /// \private
   70647             :           static const unsigned pool_size; //
   70648             :           /// \private
   70649             :           static std::vector<unsigned char *> pools; //
   70650             :           /// \private
   70651             :           static SgDeclType * next_node; // 
   70652             : 
   70653             :           /// \private
   70654             :           static unsigned long initializeStorageClassArray(SgDeclTypeStorageClass *); //
   70655             : 
   70656             :           /// \private
   70657             :           static void clearMemoryPool(); //
   70658             :           static void deleteMemoryPool(); //
   70659             : 
   70660             :           /// \private
   70661             :           static void extendMemoryPoolForFileIO(); //
   70662             : 
   70663             :           /// \private
   70664             :           static SgDeclType * getPointerFromGlobalIndex(unsigned long); //
   70665             :           /// \private
   70666             :           static SgDeclType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   70667             : 
   70668             :           /// \private
   70669             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   70670             :           /// \private
   70671             :           static void resetValidFreepointers(); //
   70672             :           /// \private
   70673             :           static unsigned long getNumberOfLastValidPointer(); //
   70674             : 
   70675             : 
   70676             : #if defined(INLINE_FUNCTIONS)
   70677             :       /*! \brief returns pointer to newly allocated IR node */
   70678             :           inline void *operator new (size_t size);
   70679             : #else
   70680             :       /*! \brief returns pointer to newly allocated IR node */
   70681             :           void *operator new (size_t size);
   70682             : #endif
   70683             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   70684             :           void operator delete (void* pointer, size_t size);
   70685             : 
   70686             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   70687         337 :           void operator delete (void* pointer)
   70688             :              {
   70689             :             // This is the generated delete operator...
   70690         337 :                SgDeclType::operator delete (pointer,sizeof(SgDeclType));
   70691             :              }
   70692             : 
   70693             :       /*! \brief Returns the total number of IR nodes of this type */
   70694             :           static size_t numberOfNodes();
   70695             : 
   70696             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   70697             :           static size_t memoryUsage();
   70698             : 
   70699             :       // End of scope which started in IR nodes specific code 
   70700             :       /* */
   70701             : 
   70702             :       /* name Internal Functions
   70703             :           \brief Internal functions ... incomplete-documentation
   70704             : 
   70705             :           These functions have been made public as part of the design, but they are suggested for internal use 
   70706             :           or by particularly knowledgeable users for specialized tools or applications.
   70707             : 
   70708             :           \internal We could not make these private because they are required by user for special purposes. And 
   70709             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   70710             :          
   70711             :        */
   70712             : 
   70713             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   70714             :        // overridden in every class by *generated* implementation
   70715             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   70716             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   70717             :        // MS: 06/28/02 container of names of variables or container indices 
   70718             :        // used used in the traversal to access AST successor nodes
   70719             :        // overridden in every class by *generated* implementation
   70720             :       /*! \brief container of names of variables or container indices used used in the traversal
   70721             :           to access AST successor nodes overridden in every class by *generated* implementation */
   70722             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   70723             : 
   70724             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   70725             :        // than all the vector copies. The implementation for these functions is generated for each class.
   70726             :       /*! \brief return number of children in the traversal successor list */
   70727             :           virtual size_t get_numberOfTraversalSuccessors() override;
   70728             :       /*! \brief index-based access to traversal successors by index number */
   70729             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   70730             :       /*! \brief index-based access to traversal successors by child node */
   70731             :           virtual size_t get_childIndex(SgNode *child) override;
   70732             : 
   70733             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   70734             :        // MS: 08/16/2002 method for generating RTI information
   70735             :       /*! \brief return C++ Runtime-Time-Information */
   70736             :           virtual RTIReturnType roseRTI() override;
   70737             : #endif
   70738             :       /* */
   70739             : 
   70740             : 
   70741             : 
   70742             :       /* name Deprecated Functions
   70743             :           \brief Deprecated functions ... incomplete-documentation
   70744             : 
   70745             :           These functions have been deprecated from use.
   70746             :        */
   70747             :       /* */
   70748             : 
   70749             :       /*! returns a C style string (char*) representing the class name */
   70750             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   70751             : 
   70752             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   70753             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   70754             : #if 0
   70755             :       /*! returns old style Sage II enum values */
   70756             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   70757             :       /*! returns old style Sage II enum values */
   70758             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   70759             : #endif
   70760             :       /* */
   70761             : 
   70762             : 
   70763             : 
   70764             : 
   70765             :      public:
   70766             :       /* name Traversal Support Functions
   70767             :           \brief Traversal support functions ... incomplete-documentation
   70768             : 
   70769             :           These functions have been made public as part of the design, but they are suggested for internal use 
   70770             :           or by particularly knowledgable users for specialized tools or applications.
   70771             :        */
   70772             :       /* */
   70773             : 
   70774             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   70775             :        // (inferior to ROSE traversal mechanism, experimental).
   70776             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   70777             :        */
   70778             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   70779             : 
   70780             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   70781             :       /*! \brief support for the classic visitor pattern done in GoF */
   70782             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   70783             : 
   70784             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   70785             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   70786             :        */
   70787             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   70788             : 
   70789             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   70790             :        */
   70791             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   70792             : 
   70793             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   70794             :        // This traversal helps support internal tools that call static member functions.
   70795             :        // note: this function operates on the memory pools.
   70796             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   70797             :        */
   70798             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   70799             :       /* */
   70800             : 
   70801             : 
   70802             :      public:
   70803             :       /* name Memory Allocation Functions
   70804             :           \brief Memory allocations functions ... incomplete-documentation
   70805             : 
   70806             :           These functions have been made public as part of the design, but they are suggested for internal use 
   70807             :           or by particularly knowledgable users for specialized tools or applications.
   70808             :        */
   70809             :       /* */
   70810             : 
   70811             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   70812             : 
   70813             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   70814             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   70815             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   70816             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   70817             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   70818             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   70819             :           being used with the AST File I/O mechanism.
   70820             :        */
   70821             :           virtual bool isInMemoryPool() override;
   70822             : 
   70823             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   70824             : 
   70825             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   70826             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   70827             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   70828             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   70829             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   70830             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   70831             :           being used with the AST File I/O mechanism.
   70832             :        */
   70833             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   70834             : 
   70835             :       // DQ (4/30/2006): Modified to be a const function.
   70836             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   70837             : 
   70838             :           This functions is part of general support for many possible tools to operate 
   70839             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   70840             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   70841             :           less than the set of pointers used by the AST file I/O. This is part of
   70842             :           work implemented by Andreas, and support tools such as the AST graph generation.
   70843             : 
   70844             :           \warning This function can return unexpected data members and thus the 
   70845             :                    order and the number of elements is unpredicable and subject 
   70846             :                    to change.
   70847             : 
   70848             :           \returns STL vector of pairs of SgNode* and strings
   70849             :        */
   70850             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   70851             : 
   70852             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   70853             : 
   70854             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   70855             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   70856             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   70857             : 
   70858             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   70859             :                    and subject to change.
   70860             :        */
   70861             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   70862             : 
   70863             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   70864             : 
   70865             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   70866             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   70867             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   70868             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   70869             : 
   70870             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   70871             : 
   70872             :           \returns long
   70873             :        */
   70874             :           virtual long getChildIndex( SgNode* childNode ) const override;
   70875             : 
   70876             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   70877             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   70878             :       /* \brief Constructor for use by AST File I/O Mechanism
   70879             : 
   70880             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   70881             :           which obtained via fast binary file I/O from disk.
   70882             :        */
   70883             :        // SgDeclType( SgDeclTypeStorageClass& source );
   70884             : 
   70885             : 
   70886             : 
   70887             : 
   70888             : 
   70889             :  // JH (10/24/2005): methods added to support the ast file IO
   70890             :     private:
   70891             : 
   70892             :       /* name AST Memory Allocation Support Functions
   70893             :           \brief Memory allocations support....
   70894             : 
   70895             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   70896             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   70897             :           and support the AST File I/O Mechanism.
   70898             :        */
   70899             :       /* */
   70900             : 
   70901             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   70902             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   70903             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   70904             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   70905             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   70906             :           a correspinding one in the AST_FILE_IO class!
   70907             :        */
   70908             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   70909             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   70910             :       /* \brief Typedef used for low level memory access.
   70911             :        */
   70912             :        // typedef unsigned char* TestType;
   70913             : 
   70914             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   70915             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   70916             :       /* \brief Typedef used to hold memory addresses as values.
   70917             :        */
   70918             :        // typedef unsigned long  AddressType;
   70919             : 
   70920             : 
   70921             : 
   70922             :        // necessary, to have direct access to the p_freepointer and the private methods !
   70923             :       /*! \brief friend class declaration to support AST File I/O */
   70924             :           friend class AST_FILE_IO;
   70925             : 
   70926             :       /*! \brief friend class declaration to support AST File I/O */
   70927             :           friend class SgDeclTypeStorageClass;
   70928             : 
   70929             :       /*! \brief friend class declaration to support AST File I/O */
   70930             :           friend class AstSpecificDataManagingClass;
   70931             : 
   70932             :       /*! \brief friend class declaration to support AST File I/O */
   70933             :           friend class AstSpecificDataManagingClassStorageClass;
   70934             :     public:
   70935             :       /*! \brief IR node constructor to support AST File I/O */
   70936             :           SgDeclType( const SgDeclTypeStorageClass& source );
   70937             : 
   70938             :  // private: // JJW hack
   70939             :        /*
   70940             :           name AST Memory Allocation Support Variables
   70941             :           Memory allocations support variables 
   70942             : 
   70943             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   70944             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   70945             :           and support the AST File I/O Mechanism.
   70946             :        */
   70947             :       /* */
   70948             : 
   70949             :     public:
   70950             : 
   70951             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   70952             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   70953             :       // virtual SgNode* addRegExpAttribute();
   70954             :       /*! \brief Support for AST matching using regular expression.
   70955             : 
   70956             :           This support is incomplete and the subject of current research to define 
   70957             :           RegEx trees to support inexact matching.
   70958             :        */
   70959             :           SgDeclType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   70960             : 
   70961             : // *** COMMON CODE SECTION ENDS HERE ***
   70962             : 
   70963             : 
   70964             : // End of memberFunctionString
   70965             : // Start of memberFunctionString
   70966             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   70967             : 
   70968             :      // the generated cast function
   70969             :      // friend ROSE_DLL_API SgDeclType* isSgDeclType ( SgNode* s );
   70970             : 
   70971             :           typedef SgType base_node_type;
   70972             : 
   70973             : 
   70974             : // End of memberFunctionString
   70975             : // Start of memberFunctionString
   70976             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   70977             : 
   70978             :        // SgName get_mangled ( SgUnparse_Info & info );
   70979             : 
   70980             :       //! Mangled name support for unparser support
   70981             :        // SgName get_mangled ( SgUnparse_Info & info );
   70982             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   70983             :           virtual SgName get_mangled (void) const override;
   70984             : 
   70985             : 
   70986             : 
   70987             : // End of memberFunctionString
   70988             : 
   70989             :      public: 
   70990             :          SgExpression* get_base_expression() const;
   70991             :          void set_base_expression(SgExpression* base_expression);
   70992             : 
   70993             : 
   70994             : 
   70995             :      public: 
   70996             :          virtual ~SgDeclType();
   70997             : 
   70998             : 
   70999             :      public: 
   71000             :          SgDeclType(SgExpression* base_expression = NULL, SgType* base_type = NULL); 
   71001             : 
   71002             :     protected:
   71003             : // Start of memberFunctionString
   71004             : SgExpression* p_base_expression;
   71005             :           
   71006             : // End of memberFunctionString
   71007             : // Start of memberFunctionString
   71008             : SgType* p_base_type;
   71009             :           
   71010             : // End of memberFunctionString
   71011             : 
   71012             :     friend struct Rose::Traits::generated::describe_node_t<SgDeclType>;
   71013             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclType, SgExpression*,&SgDeclType::p_base_expression>;
   71014             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclType, SgType*,&SgDeclType::p_base_type>;
   71015             : 
   71016             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71017             : 
   71018             : 
   71019             :    };
   71020             : #endif
   71021             : 
   71022             : // postdeclarations for SgDeclType
   71023             : 
   71024             : /* #line 71025 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71025             : 
   71026             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   71027             : 
   71028             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71029             : 
   71030             : 
   71031             : /* #line 71032 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71032             : 
   71033             : 
   71034             : 
   71035             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71036             : 
   71037             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   71038             : //      This code is automatically generated for each 
   71039             : //      terminal and non-terminal within the defined 
   71040             : //      grammar.  There is a simple way to change the 
   71041             : //      code to fix bugs etc.  See the ROSE README file
   71042             : //      for directions.
   71043             : 
   71044             : // tps: (02/22/2010): Adding DLL export requirements
   71045             : #include "rosedll.h"
   71046             : 
   71047             : // predeclarations for SgTypeOfType
   71048             : 
   71049             : /* #line 71050 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71050             : 
   71051             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   71052             : 
   71053             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71054             : 
   71055             : #if 1
   71056             : // Class Definition for SgTypeOfType
   71057             : class ROSE_DLL_API SgTypeOfType  : public SgType
   71058             :    {
   71059             :      public:
   71060             : 
   71061             : 
   71062             : /* #line 71063 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71063             : 
   71064             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   71065             : // Start of memberFunctionString
   71066             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   71067             : 
   71068             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   71069             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   71070             :        // own data member and associated access function.
   71071             :        // static SgTypeOfType* get_builtin_type();
   71072             : 
   71073             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   71074             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   71075             :        // own data member and associated access function.
   71076             :        // static void set_builtin_type(SgTypeOfType* builtin_type);
   71077             : 
   71078             :       //! more sophisticated version for more complex types like SgTypeOfType (types whose constructors take parameters)
   71079             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   71080             :        // static SgTypeOfType* createType(SgExpression* expr = NULL);
   71081             :           static SgTypeOfType* createType(SgExpression* expr = NULL, SgExpression* optional_fortran_type_kind = NULL);
   71082             : 
   71083             : 
   71084             : // End of memberFunctionString
   71085             : // Start of memberFunctionString
   71086             : /* #line 982 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   71087             : 
   71088             : 
   71089             :           static SgTypeOfType* createType(SgType* base_type, SgExpression* optional_fortran_type_kind = NULL);
   71090             : 
   71091             :           void set_base_type(SgType* base_type);
   71092             : 
   71093             : 
   71094             : 
   71095             : // End of memberFunctionString
   71096             : // Start of memberFunctionString
   71097             : /* #line 385 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   71098             : 
   71099             :       //! This is used in the SgTypedefType object (is not associated with a base_type data field)
   71100             :           SgType* get_base_type() const;
   71101             : 
   71102             : 
   71103             : // End of memberFunctionString
   71104             : // Start of memberFunctionString
   71105             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   71106             : 
   71107             : // *** COMMON CODE SECTION BEGINS HERE ***
   71108             : 
   71109             :     public:
   71110             : 
   71111             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   71112             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   71113             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   71114             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   71115             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   71116             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   71117             : 
   71118             :       /*! \brief returns a string representing the class name */
   71119             :           virtual std::string class_name() const override;
   71120             : 
   71121             :       /*! \brief returns new style SageIII enum values */
   71122             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   71123             : 
   71124             :       /*! \brief static variant value */
   71125             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   71126             :        // static const VariantT static_variant = V_SgTypeOfType;
   71127             :           enum { static_variant = V_SgTypeOfType };
   71128             : 
   71129             :        /* the generated cast function */
   71130             :       /*! \brief Casts pointer from base class to derived class */
   71131             :           ROSE_DLL_API friend       SgTypeOfType* isSgTypeOfType(       SgNode * s );
   71132             : 
   71133             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   71134             :           ROSE_DLL_API friend const SgTypeOfType* isSgTypeOfType( const SgNode * s );
   71135             : 
   71136             :      // ******************************************
   71137             :      // * Memory Pool / New / Delete
   71138             :      // ******************************************
   71139             : 
   71140             :      public:
   71141             :           /// \private
   71142             :           static const unsigned pool_size; //
   71143             :           /// \private
   71144             :           static std::vector<unsigned char *> pools; //
   71145             :           /// \private
   71146             :           static SgTypeOfType * next_node; // 
   71147             : 
   71148             :           /// \private
   71149             :           static unsigned long initializeStorageClassArray(SgTypeOfTypeStorageClass *); //
   71150             : 
   71151             :           /// \private
   71152             :           static void clearMemoryPool(); //
   71153             :           static void deleteMemoryPool(); //
   71154             : 
   71155             :           /// \private
   71156             :           static void extendMemoryPoolForFileIO(); //
   71157             : 
   71158             :           /// \private
   71159             :           static SgTypeOfType * getPointerFromGlobalIndex(unsigned long); //
   71160             :           /// \private
   71161             :           static SgTypeOfType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   71162             : 
   71163             :           /// \private
   71164             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   71165             :           /// \private
   71166             :           static void resetValidFreepointers(); //
   71167             :           /// \private
   71168             :           static unsigned long getNumberOfLastValidPointer(); //
   71169             : 
   71170             : 
   71171             : #if defined(INLINE_FUNCTIONS)
   71172             :       /*! \brief returns pointer to newly allocated IR node */
   71173             :           inline void *operator new (size_t size);
   71174             : #else
   71175             :       /*! \brief returns pointer to newly allocated IR node */
   71176             :           void *operator new (size_t size);
   71177             : #endif
   71178             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   71179             :           void operator delete (void* pointer, size_t size);
   71180             : 
   71181             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   71182           6 :           void operator delete (void* pointer)
   71183             :              {
   71184             :             // This is the generated delete operator...
   71185           6 :                SgTypeOfType::operator delete (pointer,sizeof(SgTypeOfType));
   71186             :              }
   71187             : 
   71188             :       /*! \brief Returns the total number of IR nodes of this type */
   71189             :           static size_t numberOfNodes();
   71190             : 
   71191             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   71192             :           static size_t memoryUsage();
   71193             : 
   71194             :       // End of scope which started in IR nodes specific code 
   71195             :       /* */
   71196             : 
   71197             :       /* name Internal Functions
   71198             :           \brief Internal functions ... incomplete-documentation
   71199             : 
   71200             :           These functions have been made public as part of the design, but they are suggested for internal use 
   71201             :           or by particularly knowledgeable users for specialized tools or applications.
   71202             : 
   71203             :           \internal We could not make these private because they are required by user for special purposes. And 
   71204             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   71205             :          
   71206             :        */
   71207             : 
   71208             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   71209             :        // overridden in every class by *generated* implementation
   71210             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   71211             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   71212             :        // MS: 06/28/02 container of names of variables or container indices 
   71213             :        // used used in the traversal to access AST successor nodes
   71214             :        // overridden in every class by *generated* implementation
   71215             :       /*! \brief container of names of variables or container indices used used in the traversal
   71216             :           to access AST successor nodes overridden in every class by *generated* implementation */
   71217             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   71218             : 
   71219             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   71220             :        // than all the vector copies. The implementation for these functions is generated for each class.
   71221             :       /*! \brief return number of children in the traversal successor list */
   71222             :           virtual size_t get_numberOfTraversalSuccessors() override;
   71223             :       /*! \brief index-based access to traversal successors by index number */
   71224             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   71225             :       /*! \brief index-based access to traversal successors by child node */
   71226             :           virtual size_t get_childIndex(SgNode *child) override;
   71227             : 
   71228             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   71229             :        // MS: 08/16/2002 method for generating RTI information
   71230             :       /*! \brief return C++ Runtime-Time-Information */
   71231             :           virtual RTIReturnType roseRTI() override;
   71232             : #endif
   71233             :       /* */
   71234             : 
   71235             : 
   71236             : 
   71237             :       /* name Deprecated Functions
   71238             :           \brief Deprecated functions ... incomplete-documentation
   71239             : 
   71240             :           These functions have been deprecated from use.
   71241             :        */
   71242             :       /* */
   71243             : 
   71244             :       /*! returns a C style string (char*) representing the class name */
   71245             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   71246             : 
   71247             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   71248             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   71249             : #if 0
   71250             :       /*! returns old style Sage II enum values */
   71251             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   71252             :       /*! returns old style Sage II enum values */
   71253             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   71254             : #endif
   71255             :       /* */
   71256             : 
   71257             : 
   71258             : 
   71259             : 
   71260             :      public:
   71261             :       /* name Traversal Support Functions
   71262             :           \brief Traversal support functions ... incomplete-documentation
   71263             : 
   71264             :           These functions have been made public as part of the design, but they are suggested for internal use 
   71265             :           or by particularly knowledgable users for specialized tools or applications.
   71266             :        */
   71267             :       /* */
   71268             : 
   71269             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   71270             :        // (inferior to ROSE traversal mechanism, experimental).
   71271             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   71272             :        */
   71273             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   71274             : 
   71275             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   71276             :       /*! \brief support for the classic visitor pattern done in GoF */
   71277             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   71278             : 
   71279             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   71280             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   71281             :        */
   71282             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   71283             : 
   71284             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   71285             :        */
   71286             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   71287             : 
   71288             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   71289             :        // This traversal helps support internal tools that call static member functions.
   71290             :        // note: this function operates on the memory pools.
   71291             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   71292             :        */
   71293             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   71294             :       /* */
   71295             : 
   71296             : 
   71297             :      public:
   71298             :       /* name Memory Allocation Functions
   71299             :           \brief Memory allocations functions ... incomplete-documentation
   71300             : 
   71301             :           These functions have been made public as part of the design, but they are suggested for internal use 
   71302             :           or by particularly knowledgable users for specialized tools or applications.
   71303             :        */
   71304             :       /* */
   71305             : 
   71306             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   71307             : 
   71308             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   71309             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   71310             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   71311             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   71312             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   71313             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   71314             :           being used with the AST File I/O mechanism.
   71315             :        */
   71316             :           virtual bool isInMemoryPool() override;
   71317             : 
   71318             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   71319             : 
   71320             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   71321             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   71322             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   71323             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   71324             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   71325             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   71326             :           being used with the AST File I/O mechanism.
   71327             :        */
   71328             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   71329             : 
   71330             :       // DQ (4/30/2006): Modified to be a const function.
   71331             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   71332             : 
   71333             :           This functions is part of general support for many possible tools to operate 
   71334             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   71335             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   71336             :           less than the set of pointers used by the AST file I/O. This is part of
   71337             :           work implemented by Andreas, and support tools such as the AST graph generation.
   71338             : 
   71339             :           \warning This function can return unexpected data members and thus the 
   71340             :                    order and the number of elements is unpredicable and subject 
   71341             :                    to change.
   71342             : 
   71343             :           \returns STL vector of pairs of SgNode* and strings
   71344             :        */
   71345             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   71346             : 
   71347             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   71348             : 
   71349             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   71350             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   71351             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   71352             : 
   71353             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   71354             :                    and subject to change.
   71355             :        */
   71356             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   71357             : 
   71358             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   71359             : 
   71360             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   71361             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   71362             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   71363             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   71364             : 
   71365             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   71366             : 
   71367             :           \returns long
   71368             :        */
   71369             :           virtual long getChildIndex( SgNode* childNode ) const override;
   71370             : 
   71371             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   71372             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   71373             :       /* \brief Constructor for use by AST File I/O Mechanism
   71374             : 
   71375             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   71376             :           which obtained via fast binary file I/O from disk.
   71377             :        */
   71378             :        // SgTypeOfType( SgTypeOfTypeStorageClass& source );
   71379             : 
   71380             : 
   71381             : 
   71382             : 
   71383             : 
   71384             :  // JH (10/24/2005): methods added to support the ast file IO
   71385             :     private:
   71386             : 
   71387             :       /* name AST Memory Allocation Support Functions
   71388             :           \brief Memory allocations support....
   71389             : 
   71390             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   71391             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   71392             :           and support the AST File I/O Mechanism.
   71393             :        */
   71394             :       /* */
   71395             : 
   71396             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   71397             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   71398             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   71399             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   71400             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   71401             :           a correspinding one in the AST_FILE_IO class!
   71402             :        */
   71403             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   71404             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   71405             :       /* \brief Typedef used for low level memory access.
   71406             :        */
   71407             :        // typedef unsigned char* TestType;
   71408             : 
   71409             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   71410             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   71411             :       /* \brief Typedef used to hold memory addresses as values.
   71412             :        */
   71413             :        // typedef unsigned long  AddressType;
   71414             : 
   71415             : 
   71416             : 
   71417             :        // necessary, to have direct access to the p_freepointer and the private methods !
   71418             :       /*! \brief friend class declaration to support AST File I/O */
   71419             :           friend class AST_FILE_IO;
   71420             : 
   71421             :       /*! \brief friend class declaration to support AST File I/O */
   71422             :           friend class SgTypeOfTypeStorageClass;
   71423             : 
   71424             :       /*! \brief friend class declaration to support AST File I/O */
   71425             :           friend class AstSpecificDataManagingClass;
   71426             : 
   71427             :       /*! \brief friend class declaration to support AST File I/O */
   71428             :           friend class AstSpecificDataManagingClassStorageClass;
   71429             :     public:
   71430             :       /*! \brief IR node constructor to support AST File I/O */
   71431             :           SgTypeOfType( const SgTypeOfTypeStorageClass& source );
   71432             : 
   71433             :  // private: // JJW hack
   71434             :        /*
   71435             :           name AST Memory Allocation Support Variables
   71436             :           Memory allocations support variables 
   71437             : 
   71438             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   71439             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   71440             :           and support the AST File I/O Mechanism.
   71441             :        */
   71442             :       /* */
   71443             : 
   71444             :     public:
   71445             : 
   71446             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   71447             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   71448             :       // virtual SgNode* addRegExpAttribute();
   71449             :       /*! \brief Support for AST matching using regular expression.
   71450             : 
   71451             :           This support is incomplete and the subject of current research to define 
   71452             :           RegEx trees to support inexact matching.
   71453             :        */
   71454             :           SgTypeOfType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   71455             : 
   71456             : // *** COMMON CODE SECTION ENDS HERE ***
   71457             : 
   71458             : 
   71459             : // End of memberFunctionString
   71460             : // Start of memberFunctionString
   71461             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   71462             : 
   71463             :      // the generated cast function
   71464             :      // friend ROSE_DLL_API SgTypeOfType* isSgTypeOfType ( SgNode* s );
   71465             : 
   71466             :           typedef SgType base_node_type;
   71467             : 
   71468             : 
   71469             : // End of memberFunctionString
   71470             : // Start of memberFunctionString
   71471             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   71472             : 
   71473             :        // SgName get_mangled ( SgUnparse_Info & info );
   71474             : 
   71475             :       //! Mangled name support for unparser support
   71476             :        // SgName get_mangled ( SgUnparse_Info & info );
   71477             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   71478             :           virtual SgName get_mangled (void) const override;
   71479             : 
   71480             : 
   71481             : 
   71482             : // End of memberFunctionString
   71483             : 
   71484             :      public: 
   71485             :          SgExpression* get_base_expression() const;
   71486             :          void set_base_expression(SgExpression* base_expression);
   71487             : 
   71488             : 
   71489             : 
   71490             :      public: 
   71491             :          virtual ~SgTypeOfType();
   71492             : 
   71493             : 
   71494             :      public: 
   71495             :          SgTypeOfType(SgExpression* base_expression = NULL, SgType* base_type = NULL); 
   71496             : 
   71497             :     protected:
   71498             : // Start of memberFunctionString
   71499             : SgExpression* p_base_expression;
   71500             :           
   71501             : // End of memberFunctionString
   71502             : // Start of memberFunctionString
   71503             : SgType* p_base_type;
   71504             :           
   71505             : // End of memberFunctionString
   71506             : 
   71507             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeOfType>;
   71508             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeOfType, SgExpression*,&SgTypeOfType::p_base_expression>;
   71509             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeOfType, SgType*,&SgTypeOfType::p_base_type>;
   71510             : 
   71511             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71512             : 
   71513             : 
   71514             :    };
   71515             : #endif
   71516             : 
   71517             : // postdeclarations for SgTypeOfType
   71518             : 
   71519             : /* #line 71520 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71520             : 
   71521             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   71522             : 
   71523             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71524             : 
   71525             : 
   71526             : /* #line 71527 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71527             : 
   71528             : 
   71529             : 
   71530             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71531             : 
   71532             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   71533             : //      This code is automatically generated for each 
   71534             : //      terminal and non-terminal within the defined 
   71535             : //      grammar.  There is a simple way to change the 
   71536             : //      code to fix bugs etc.  See the ROSE README file
   71537             : //      for directions.
   71538             : 
   71539             : // tps: (02/22/2010): Adding DLL export requirements
   71540             : #include "rosedll.h"
   71541             : 
   71542             : // predeclarations for SgTypeMatrix
   71543             : 
   71544             : /* #line 71545 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71545             : 
   71546             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   71547             : 
   71548             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71549             : 
   71550             : #if 1
   71551             : // Class Definition for SgTypeMatrix
   71552             : class ROSE_DLL_API SgTypeMatrix  : public SgType
   71553             :    {
   71554             :      public:
   71555             : 
   71556             : 
   71557             : /* #line 71558 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   71558             : 
   71559             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   71560             : // Start of memberFunctionString
   71561             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   71562             : 
   71563             : // *** COMMON CODE SECTION BEGINS HERE ***
   71564             : 
   71565             :     public:
   71566             : 
   71567             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   71568             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   71569             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   71570             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   71571             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   71572             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   71573             : 
   71574             :       /*! \brief returns a string representing the class name */
   71575             :           virtual std::string class_name() const override;
   71576             : 
   71577             :       /*! \brief returns new style SageIII enum values */
   71578             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   71579             : 
   71580             :       /*! \brief static variant value */
   71581             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   71582             :        // static const VariantT static_variant = V_SgTypeMatrix;
   71583             :           enum { static_variant = V_SgTypeMatrix };
   71584             : 
   71585             :        /* the generated cast function */
   71586             :       /*! \brief Casts pointer from base class to derived class */
   71587             :           ROSE_DLL_API friend       SgTypeMatrix* isSgTypeMatrix(       SgNode * s );
   71588             : 
   71589             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   71590             :           ROSE_DLL_API friend const SgTypeMatrix* isSgTypeMatrix( const SgNode * s );
   71591             : 
   71592             :      // ******************************************
   71593             :      // * Memory Pool / New / Delete
   71594             :      // ******************************************
   71595             : 
   71596             :      public:
   71597             :           /// \private
   71598             :           static const unsigned pool_size; //
   71599             :           /// \private
   71600             :           static std::vector<unsigned char *> pools; //
   71601             :           /// \private
   71602             :           static SgTypeMatrix * next_node; // 
   71603             : 
   71604             :           /// \private
   71605             :           static unsigned long initializeStorageClassArray(SgTypeMatrixStorageClass *); //
   71606             : 
   71607             :           /// \private
   71608             :           static void clearMemoryPool(); //
   71609             :           static void deleteMemoryPool(); //
   71610             : 
   71611             :           /// \private
   71612             :           static void extendMemoryPoolForFileIO(); //
   71613             : 
   71614             :           /// \private
   71615             :           static SgTypeMatrix * getPointerFromGlobalIndex(unsigned long); //
   71616             :           /// \private
   71617             :           static SgTypeMatrix * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   71618             : 
   71619             :           /// \private
   71620             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   71621             :           /// \private
   71622             :           static void resetValidFreepointers(); //
   71623             :           /// \private
   71624             :           static unsigned long getNumberOfLastValidPointer(); //
   71625             : 
   71626             : 
   71627             : #if defined(INLINE_FUNCTIONS)
   71628             :       /*! \brief returns pointer to newly allocated IR node */
   71629             :           inline void *operator new (size_t size);
   71630             : #else
   71631             :       /*! \brief returns pointer to newly allocated IR node */
   71632             :           void *operator new (size_t size);
   71633             : #endif
   71634             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   71635             :           void operator delete (void* pointer, size_t size);
   71636             : 
   71637             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   71638           0 :           void operator delete (void* pointer)
   71639             :              {
   71640             :             // This is the generated delete operator...
   71641           0 :                SgTypeMatrix::operator delete (pointer,sizeof(SgTypeMatrix));
   71642             :              }
   71643             : 
   71644             :       /*! \brief Returns the total number of IR nodes of this type */
   71645             :           static size_t numberOfNodes();
   71646             : 
   71647             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   71648             :           static size_t memoryUsage();
   71649             : 
   71650             :       // End of scope which started in IR nodes specific code 
   71651             :       /* */
   71652             : 
   71653             :       /* name Internal Functions
   71654             :           \brief Internal functions ... incomplete-documentation
   71655             : 
   71656             :           These functions have been made public as part of the design, but they are suggested for internal use 
   71657             :           or by particularly knowledgeable users for specialized tools or applications.
   71658             : 
   71659             :           \internal We could not make these private because they are required by user for special purposes. And 
   71660             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   71661             :          
   71662             :        */
   71663             : 
   71664             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   71665             :        // overridden in every class by *generated* implementation
   71666             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   71667             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   71668             :        // MS: 06/28/02 container of names of variables or container indices 
   71669             :        // used used in the traversal to access AST successor nodes
   71670             :        // overridden in every class by *generated* implementation
   71671             :       /*! \brief container of names of variables or container indices used used in the traversal
   71672             :           to access AST successor nodes overridden in every class by *generated* implementation */
   71673             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   71674             : 
   71675             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   71676             :        // than all the vector copies. The implementation for these functions is generated for each class.
   71677             :       /*! \brief return number of children in the traversal successor list */
   71678             :           virtual size_t get_numberOfTraversalSuccessors() override;
   71679             :       /*! \brief index-based access to traversal successors by index number */
   71680             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   71681             :       /*! \brief index-based access to traversal successors by child node */
   71682             :           virtual size_t get_childIndex(SgNode *child) override;
   71683             : 
   71684             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   71685             :        // MS: 08/16/2002 method for generating RTI information
   71686             :       /*! \brief return C++ Runtime-Time-Information */
   71687             :           virtual RTIReturnType roseRTI() override;
   71688             : #endif
   71689             :       /* */
   71690             : 
   71691             : 
   71692             : 
   71693             :       /* name Deprecated Functions
   71694             :           \brief Deprecated functions ... incomplete-documentation
   71695             : 
   71696             :           These functions have been deprecated from use.
   71697             :        */
   71698             :       /* */
   71699             : 
   71700             :       /*! returns a C style string (char*) representing the class name */
   71701             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   71702             : 
   71703             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   71704             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   71705             : #if 0
   71706             :       /*! returns old style Sage II enum values */
   71707             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   71708             :       /*! returns old style Sage II enum values */
   71709             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   71710             : #endif
   71711             :       /* */
   71712             : 
   71713             : 
   71714             : 
   71715             : 
   71716             :      public:
   71717             :       /* name Traversal Support Functions
   71718             :           \brief Traversal support functions ... incomplete-documentation
   71719             : 
   71720             :           These functions have been made public as part of the design, but they are suggested for internal use 
   71721             :           or by particularly knowledgable users for specialized tools or applications.
   71722             :        */
   71723             :       /* */
   71724             : 
   71725             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   71726             :        // (inferior to ROSE traversal mechanism, experimental).
   71727             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   71728             :        */
   71729             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   71730             : 
   71731             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   71732             :       /*! \brief support for the classic visitor pattern done in GoF */
   71733             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   71734             : 
   71735             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   71736             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   71737             :        */
   71738             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   71739             : 
   71740             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   71741             :        */
   71742             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   71743             : 
   71744             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   71745             :        // This traversal helps support internal tools that call static member functions.
   71746             :        // note: this function operates on the memory pools.
   71747             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   71748             :        */
   71749             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   71750             :       /* */
   71751             : 
   71752             : 
   71753             :      public:
   71754             :       /* name Memory Allocation Functions
   71755             :           \brief Memory allocations functions ... incomplete-documentation
   71756             : 
   71757             :           These functions have been made public as part of the design, but they are suggested for internal use 
   71758             :           or by particularly knowledgable users for specialized tools or applications.
   71759             :        */
   71760             :       /* */
   71761             : 
   71762             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   71763             : 
   71764             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   71765             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   71766             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   71767             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   71768             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   71769             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   71770             :           being used with the AST File I/O mechanism.
   71771             :        */
   71772             :           virtual bool isInMemoryPool() override;
   71773             : 
   71774             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   71775             : 
   71776             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   71777             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   71778             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   71779             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   71780             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   71781             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   71782             :           being used with the AST File I/O mechanism.
   71783             :        */
   71784             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   71785             : 
   71786             :       // DQ (4/30/2006): Modified to be a const function.
   71787             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   71788             : 
   71789             :           This functions is part of general support for many possible tools to operate 
   71790             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   71791             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   71792             :           less than the set of pointers used by the AST file I/O. This is part of
   71793             :           work implemented by Andreas, and support tools such as the AST graph generation.
   71794             : 
   71795             :           \warning This function can return unexpected data members and thus the 
   71796             :                    order and the number of elements is unpredicable and subject 
   71797             :                    to change.
   71798             : 
   71799             :           \returns STL vector of pairs of SgNode* and strings
   71800             :        */
   71801             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   71802             : 
   71803             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   71804             : 
   71805             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   71806             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   71807             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   71808             : 
   71809             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   71810             :                    and subject to change.
   71811             :        */
   71812             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   71813             : 
   71814             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   71815             : 
   71816             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   71817             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   71818             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   71819             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   71820             : 
   71821             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   71822             : 
   71823             :           \returns long
   71824             :        */
   71825             :           virtual long getChildIndex( SgNode* childNode ) const override;
   71826             : 
   71827             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   71828             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   71829             :       /* \brief Constructor for use by AST File I/O Mechanism
   71830             : 
   71831             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   71832             :           which obtained via fast binary file I/O from disk.
   71833             :        */
   71834             :        // SgTypeMatrix( SgTypeMatrixStorageClass& source );
   71835             : 
   71836             : 
   71837             : 
   71838             : 
   71839             : 
   71840             :  // JH (10/24/2005): methods added to support the ast file IO
   71841             :     private:
   71842             : 
   71843             :       /* name AST Memory Allocation Support Functions
   71844             :           \brief Memory allocations support....
   71845             : 
   71846             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   71847             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   71848             :           and support the AST File I/O Mechanism.
   71849             :        */
   71850             :       /* */
   71851             : 
   71852             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   71853             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   71854             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   71855             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   71856             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   71857             :           a correspinding one in the AST_FILE_IO class!
   71858             :        */
   71859             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   71860             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   71861             :       /* \brief Typedef used for low level memory access.
   71862             :        */
   71863             :        // typedef unsigned char* TestType;
   71864             : 
   71865             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   71866             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   71867             :       /* \brief Typedef used to hold memory addresses as values.
   71868             :        */
   71869             :        // typedef unsigned long  AddressType;
   71870             : 
   71871             : 
   71872             : 
   71873             :        // necessary, to have direct access to the p_freepointer and the private methods !
   71874             :       /*! \brief friend class declaration to support AST File I/O */
   71875             :           friend class AST_FILE_IO;
   71876             : 
   71877             :       /*! \brief friend class declaration to support AST File I/O */
   71878             :           friend class SgTypeMatrixStorageClass;
   71879             : 
   71880             :       /*! \brief friend class declaration to support AST File I/O */
   71881             :           friend class AstSpecificDataManagingClass;
   71882             : 
   71883             :       /*! \brief friend class declaration to support AST File I/O */
   71884             :           friend class AstSpecificDataManagingClassStorageClass;
   71885             :     public:
   71886             :       /*! \brief IR node constructor to support AST File I/O */
   71887             :           SgTypeMatrix( const SgTypeMatrixStorageClass& source );
   71888             : 
   71889             :  // private: // JJW hack
   71890             :        /*
   71891             :           name AST Memory Allocation Support Variables
   71892             :           Memory allocations support variables 
   71893             : 
   71894             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   71895             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   71896             :           and support the AST File I/O Mechanism.
   71897             :        */
   71898             :       /* */
   71899             : 
   71900             :     public:
   71901             : 
   71902             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   71903             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   71904             :       // virtual SgNode* addRegExpAttribute();
   71905             :       /*! \brief Support for AST matching using regular expression.
   71906             : 
   71907             :           This support is incomplete and the subject of current research to define 
   71908             :           RegEx trees to support inexact matching.
   71909             :        */
   71910             :           SgTypeMatrix* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   71911             : 
   71912             : // *** COMMON CODE SECTION ENDS HERE ***
   71913             : 
   71914             : 
   71915             : // End of memberFunctionString
   71916             : // Start of memberFunctionString
   71917             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   71918             : 
   71919             :      // the generated cast function
   71920             :      // friend ROSE_DLL_API SgTypeMatrix* isSgTypeMatrix ( SgNode* s );
   71921             : 
   71922             :           typedef SgType base_node_type;
   71923             : 
   71924             : 
   71925             : // End of memberFunctionString
   71926             : // Start of memberFunctionString
   71927             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   71928             : 
   71929             :        // SgName get_mangled ( SgUnparse_Info & info );
   71930             : 
   71931             :       //! Mangled name support for unparser support
   71932             :        // SgName get_mangled ( SgUnparse_Info & info );
   71933             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   71934             :           virtual SgName get_mangled (void) const override;
   71935             : 
   71936             : 
   71937             : 
   71938             : // End of memberFunctionString
   71939             : // Start of memberFunctionString
   71940             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   71941             : 
   71942             :       //! example of type used where construction is particularly simple
   71943             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   71944             :        // static SgTypeMatrix builtin_type;
   71945             :        // static SgTypeMatrix* builtin_type;
   71946             : 
   71947             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   71948             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   71949             :        // own data member and associated access function.
   71950             :        // static SgTypeMatrix* get_builtin_type();
   71951             : 
   71952             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   71953             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   71954             :        // own data member and associated access function.
   71955             :        // static void set_builtin_type(SgTypeMatrix* builtin_type);
   71956             : 
   71957             :       //! function returns example of type
   71958             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   71959             :        // static SgTypeMatrix* createType(void);
   71960             :           static SgTypeMatrix* createType(SgExpression* optional_fortran_type_kind = NULL);
   71961             : 
   71962             : 
   71963             : // End of memberFunctionString
   71964             : 
   71965             : 
   71966             :      public: 
   71967             :          SgType* get_base_type() const;
   71968             :          void set_base_type(SgType* base_type);
   71969             : 
   71970             : 
   71971             :      public: 
   71972             :          virtual ~SgTypeMatrix();
   71973             : 
   71974             : 
   71975             :      public: 
   71976             :          SgTypeMatrix(); 
   71977             : 
   71978             :     protected:
   71979             : // Start of memberFunctionString
   71980             : static SgTypeMatrix* p_builtin_type;
   71981             :           
   71982             : // End of memberFunctionString
   71983             : // Start of memberFunctionString
   71984             : SgType* p_base_type;
   71985             :           
   71986             : // End of memberFunctionString
   71987             : 
   71988             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeMatrix>;
   71989             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeMatrix, SgType*,&SgTypeMatrix::p_base_type>;
   71990             : 
   71991             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   71992             : 
   71993             : 
   71994             :    };
   71995             : #endif
   71996             : 
   71997             : // postdeclarations for SgTypeMatrix
   71998             : 
   71999             : /* #line 72000 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72000             : 
   72001             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   72002             : 
   72003             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72004             : 
   72005             : 
   72006             : /* #line 72007 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72007             : 
   72008             : 
   72009             : 
   72010             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72011             : 
   72012             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   72013             : //      This code is automatically generated for each 
   72014             : //      terminal and non-terminal within the defined 
   72015             : //      grammar.  There is a simple way to change the 
   72016             : //      code to fix bugs etc.  See the ROSE README file
   72017             : //      for directions.
   72018             : 
   72019             : // tps: (02/22/2010): Adding DLL export requirements
   72020             : #include "rosedll.h"
   72021             : 
   72022             : // predeclarations for SgTypeTuple
   72023             : 
   72024             : /* #line 72025 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72025             : 
   72026             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   72027             : 
   72028             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72029             : 
   72030             : #if 1
   72031             : // Class Definition for SgTypeTuple
   72032             : class ROSE_DLL_API SgTypeTuple  : public SgType
   72033             :    {
   72034             :      public:
   72035             : 
   72036             : 
   72037             : /* #line 72038 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72038             : 
   72039             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   72040             : // Start of memberFunctionString
   72041             : /* #line 917 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   72042             : 
   72043             :     SgTypePtrList& get_types();
   72044             :     const SgTypePtrList& get_types() const;
   72045             : 
   72046             :     void prepend_type(SgType *what);
   72047             :     void append_type(SgType *what);
   72048             : 
   72049             : 
   72050             : 
   72051             : // End of memberFunctionString
   72052             : // Start of memberFunctionString
   72053             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   72054             : 
   72055             : // *** COMMON CODE SECTION BEGINS HERE ***
   72056             : 
   72057             :     public:
   72058             : 
   72059             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   72060             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   72061             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   72062             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   72063             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   72064             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   72065             : 
   72066             :       /*! \brief returns a string representing the class name */
   72067             :           virtual std::string class_name() const override;
   72068             : 
   72069             :       /*! \brief returns new style SageIII enum values */
   72070             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   72071             : 
   72072             :       /*! \brief static variant value */
   72073             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   72074             :        // static const VariantT static_variant = V_SgTypeTuple;
   72075             :           enum { static_variant = V_SgTypeTuple };
   72076             : 
   72077             :        /* the generated cast function */
   72078             :       /*! \brief Casts pointer from base class to derived class */
   72079             :           ROSE_DLL_API friend       SgTypeTuple* isSgTypeTuple(       SgNode * s );
   72080             : 
   72081             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   72082             :           ROSE_DLL_API friend const SgTypeTuple* isSgTypeTuple( const SgNode * s );
   72083             : 
   72084             :      // ******************************************
   72085             :      // * Memory Pool / New / Delete
   72086             :      // ******************************************
   72087             : 
   72088             :      public:
   72089             :           /// \private
   72090             :           static const unsigned pool_size; //
   72091             :           /// \private
   72092             :           static std::vector<unsigned char *> pools; //
   72093             :           /// \private
   72094             :           static SgTypeTuple * next_node; // 
   72095             : 
   72096             :           /// \private
   72097             :           static unsigned long initializeStorageClassArray(SgTypeTupleStorageClass *); //
   72098             : 
   72099             :           /// \private
   72100             :           static void clearMemoryPool(); //
   72101             :           static void deleteMemoryPool(); //
   72102             : 
   72103             :           /// \private
   72104             :           static void extendMemoryPoolForFileIO(); //
   72105             : 
   72106             :           /// \private
   72107             :           static SgTypeTuple * getPointerFromGlobalIndex(unsigned long); //
   72108             :           /// \private
   72109             :           static SgTypeTuple * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   72110             : 
   72111             :           /// \private
   72112             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   72113             :           /// \private
   72114             :           static void resetValidFreepointers(); //
   72115             :           /// \private
   72116             :           static unsigned long getNumberOfLastValidPointer(); //
   72117             : 
   72118             : 
   72119             : #if defined(INLINE_FUNCTIONS)
   72120             :       /*! \brief returns pointer to newly allocated IR node */
   72121             :           inline void *operator new (size_t size);
   72122             : #else
   72123             :       /*! \brief returns pointer to newly allocated IR node */
   72124             :           void *operator new (size_t size);
   72125             : #endif
   72126             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   72127             :           void operator delete (void* pointer, size_t size);
   72128             : 
   72129             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   72130           0 :           void operator delete (void* pointer)
   72131             :              {
   72132             :             // This is the generated delete operator...
   72133           0 :                SgTypeTuple::operator delete (pointer,sizeof(SgTypeTuple));
   72134             :              }
   72135             : 
   72136             :       /*! \brief Returns the total number of IR nodes of this type */
   72137             :           static size_t numberOfNodes();
   72138             : 
   72139             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   72140             :           static size_t memoryUsage();
   72141             : 
   72142             :       // End of scope which started in IR nodes specific code 
   72143             :       /* */
   72144             : 
   72145             :       /* name Internal Functions
   72146             :           \brief Internal functions ... incomplete-documentation
   72147             : 
   72148             :           These functions have been made public as part of the design, but they are suggested for internal use 
   72149             :           or by particularly knowledgeable users for specialized tools or applications.
   72150             : 
   72151             :           \internal We could not make these private because they are required by user for special purposes. And 
   72152             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   72153             :          
   72154             :        */
   72155             : 
   72156             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   72157             :        // overridden in every class by *generated* implementation
   72158             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   72159             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   72160             :        // MS: 06/28/02 container of names of variables or container indices 
   72161             :        // used used in the traversal to access AST successor nodes
   72162             :        // overridden in every class by *generated* implementation
   72163             :       /*! \brief container of names of variables or container indices used used in the traversal
   72164             :           to access AST successor nodes overridden in every class by *generated* implementation */
   72165             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   72166             : 
   72167             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   72168             :        // than all the vector copies. The implementation for these functions is generated for each class.
   72169             :       /*! \brief return number of children in the traversal successor list */
   72170             :           virtual size_t get_numberOfTraversalSuccessors() override;
   72171             :       /*! \brief index-based access to traversal successors by index number */
   72172             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   72173             :       /*! \brief index-based access to traversal successors by child node */
   72174             :           virtual size_t get_childIndex(SgNode *child) override;
   72175             : 
   72176             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   72177             :        // MS: 08/16/2002 method for generating RTI information
   72178             :       /*! \brief return C++ Runtime-Time-Information */
   72179             :           virtual RTIReturnType roseRTI() override;
   72180             : #endif
   72181             :       /* */
   72182             : 
   72183             : 
   72184             : 
   72185             :       /* name Deprecated Functions
   72186             :           \brief Deprecated functions ... incomplete-documentation
   72187             : 
   72188             :           These functions have been deprecated from use.
   72189             :        */
   72190             :       /* */
   72191             : 
   72192             :       /*! returns a C style string (char*) representing the class name */
   72193             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   72194             : 
   72195             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   72196             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   72197             : #if 0
   72198             :       /*! returns old style Sage II enum values */
   72199             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   72200             :       /*! returns old style Sage II enum values */
   72201             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   72202             : #endif
   72203             :       /* */
   72204             : 
   72205             : 
   72206             : 
   72207             : 
   72208             :      public:
   72209             :       /* name Traversal Support Functions
   72210             :           \brief Traversal support functions ... incomplete-documentation
   72211             : 
   72212             :           These functions have been made public as part of the design, but they are suggested for internal use 
   72213             :           or by particularly knowledgable users for specialized tools or applications.
   72214             :        */
   72215             :       /* */
   72216             : 
   72217             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   72218             :        // (inferior to ROSE traversal mechanism, experimental).
   72219             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   72220             :        */
   72221             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   72222             : 
   72223             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   72224             :       /*! \brief support for the classic visitor pattern done in GoF */
   72225             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   72226             : 
   72227             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   72228             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   72229             :        */
   72230             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   72231             : 
   72232             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   72233             :        */
   72234             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   72235             : 
   72236             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   72237             :        // This traversal helps support internal tools that call static member functions.
   72238             :        // note: this function operates on the memory pools.
   72239             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   72240             :        */
   72241             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   72242             :       /* */
   72243             : 
   72244             : 
   72245             :      public:
   72246             :       /* name Memory Allocation Functions
   72247             :           \brief Memory allocations functions ... incomplete-documentation
   72248             : 
   72249             :           These functions have been made public as part of the design, but they are suggested for internal use 
   72250             :           or by particularly knowledgable users for specialized tools or applications.
   72251             :        */
   72252             :       /* */
   72253             : 
   72254             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   72255             : 
   72256             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   72257             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   72258             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   72259             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   72260             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   72261             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   72262             :           being used with the AST File I/O mechanism.
   72263             :        */
   72264             :           virtual bool isInMemoryPool() override;
   72265             : 
   72266             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   72267             : 
   72268             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   72269             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   72270             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   72271             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   72272             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   72273             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   72274             :           being used with the AST File I/O mechanism.
   72275             :        */
   72276             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   72277             : 
   72278             :       // DQ (4/30/2006): Modified to be a const function.
   72279             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   72280             : 
   72281             :           This functions is part of general support for many possible tools to operate 
   72282             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   72283             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   72284             :           less than the set of pointers used by the AST file I/O. This is part of
   72285             :           work implemented by Andreas, and support tools such as the AST graph generation.
   72286             : 
   72287             :           \warning This function can return unexpected data members and thus the 
   72288             :                    order and the number of elements is unpredicable and subject 
   72289             :                    to change.
   72290             : 
   72291             :           \returns STL vector of pairs of SgNode* and strings
   72292             :        */
   72293             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   72294             : 
   72295             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   72296             : 
   72297             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   72298             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   72299             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   72300             : 
   72301             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   72302             :                    and subject to change.
   72303             :        */
   72304             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   72305             : 
   72306             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   72307             : 
   72308             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   72309             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   72310             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   72311             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   72312             : 
   72313             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   72314             : 
   72315             :           \returns long
   72316             :        */
   72317             :           virtual long getChildIndex( SgNode* childNode ) const override;
   72318             : 
   72319             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   72320             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   72321             :       /* \brief Constructor for use by AST File I/O Mechanism
   72322             : 
   72323             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   72324             :           which obtained via fast binary file I/O from disk.
   72325             :        */
   72326             :        // SgTypeTuple( SgTypeTupleStorageClass& source );
   72327             : 
   72328             : 
   72329             : 
   72330             : 
   72331             : 
   72332             :  // JH (10/24/2005): methods added to support the ast file IO
   72333             :     private:
   72334             : 
   72335             :       /* name AST Memory Allocation Support Functions
   72336             :           \brief Memory allocations support....
   72337             : 
   72338             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   72339             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   72340             :           and support the AST File I/O Mechanism.
   72341             :        */
   72342             :       /* */
   72343             : 
   72344             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   72345             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   72346             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   72347             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   72348             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   72349             :           a correspinding one in the AST_FILE_IO class!
   72350             :        */
   72351             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   72352             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   72353             :       /* \brief Typedef used for low level memory access.
   72354             :        */
   72355             :        // typedef unsigned char* TestType;
   72356             : 
   72357             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   72358             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   72359             :       /* \brief Typedef used to hold memory addresses as values.
   72360             :        */
   72361             :        // typedef unsigned long  AddressType;
   72362             : 
   72363             : 
   72364             : 
   72365             :        // necessary, to have direct access to the p_freepointer and the private methods !
   72366             :       /*! \brief friend class declaration to support AST File I/O */
   72367             :           friend class AST_FILE_IO;
   72368             : 
   72369             :       /*! \brief friend class declaration to support AST File I/O */
   72370             :           friend class SgTypeTupleStorageClass;
   72371             : 
   72372             :       /*! \brief friend class declaration to support AST File I/O */
   72373             :           friend class AstSpecificDataManagingClass;
   72374             : 
   72375             :       /*! \brief friend class declaration to support AST File I/O */
   72376             :           friend class AstSpecificDataManagingClassStorageClass;
   72377             :     public:
   72378             :       /*! \brief IR node constructor to support AST File I/O */
   72379             :           SgTypeTuple( const SgTypeTupleStorageClass& source );
   72380             : 
   72381             :  // private: // JJW hack
   72382             :        /*
   72383             :           name AST Memory Allocation Support Variables
   72384             :           Memory allocations support variables 
   72385             : 
   72386             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   72387             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   72388             :           and support the AST File I/O Mechanism.
   72389             :        */
   72390             :       /* */
   72391             : 
   72392             :     public:
   72393             : 
   72394             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   72395             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   72396             :       // virtual SgNode* addRegExpAttribute();
   72397             :       /*! \brief Support for AST matching using regular expression.
   72398             : 
   72399             :           This support is incomplete and the subject of current research to define 
   72400             :           RegEx trees to support inexact matching.
   72401             :        */
   72402             :           SgTypeTuple* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   72403             : 
   72404             : // *** COMMON CODE SECTION ENDS HERE ***
   72405             : 
   72406             : 
   72407             : // End of memberFunctionString
   72408             : // Start of memberFunctionString
   72409             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   72410             : 
   72411             :      // the generated cast function
   72412             :      // friend ROSE_DLL_API SgTypeTuple* isSgTypeTuple ( SgNode* s );
   72413             : 
   72414             :           typedef SgType base_node_type;
   72415             : 
   72416             : 
   72417             : // End of memberFunctionString
   72418             : // Start of memberFunctionString
   72419             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   72420             : 
   72421             :        // SgName get_mangled ( SgUnparse_Info & info );
   72422             : 
   72423             :       //! Mangled name support for unparser support
   72424             :        // SgName get_mangled ( SgUnparse_Info & info );
   72425             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   72426             :           virtual SgName get_mangled (void) const override;
   72427             : 
   72428             : 
   72429             : 
   72430             : // End of memberFunctionString
   72431             : // Start of memberFunctionString
   72432             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   72433             : 
   72434             :       //! example of type used where construction is particularly simple
   72435             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   72436             :        // static SgTypeTuple builtin_type;
   72437             :        // static SgTypeTuple* builtin_type;
   72438             : 
   72439             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   72440             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   72441             :        // own data member and associated access function.
   72442             :        // static SgTypeTuple* get_builtin_type();
   72443             : 
   72444             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   72445             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   72446             :        // own data member and associated access function.
   72447             :        // static void set_builtin_type(SgTypeTuple* builtin_type);
   72448             : 
   72449             :       //! function returns example of type
   72450             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   72451             :        // static SgTypeTuple* createType(void);
   72452             :           static SgTypeTuple* createType(SgExpression* optional_fortran_type_kind = NULL);
   72453             : 
   72454             : 
   72455             : // End of memberFunctionString
   72456             : 
   72457             : 
   72458             : 
   72459             : 
   72460             :      public: 
   72461             :          virtual ~SgTypeTuple();
   72462             : 
   72463             : 
   72464             :      public: 
   72465             :          SgTypeTuple(); 
   72466             : 
   72467             :     protected:
   72468             : // Start of memberFunctionString
   72469             : static SgTypeTuple* p_builtin_type;
   72470             :           
   72471             : // End of memberFunctionString
   72472             : // Start of memberFunctionString
   72473             : SgTypePtrList p_types;
   72474             :           
   72475             : // End of memberFunctionString
   72476             : 
   72477             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeTuple>;
   72478             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeTuple, SgTypePtrList,&SgTypeTuple::p_types>;
   72479             : 
   72480             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72481             : 
   72482             : 
   72483             :    };
   72484             : #endif
   72485             : 
   72486             : // postdeclarations for SgTypeTuple
   72487             : 
   72488             : /* #line 72489 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72489             : 
   72490             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   72491             : 
   72492             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72493             : 
   72494             : 
   72495             : /* #line 72496 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72496             : 
   72497             : 
   72498             : 
   72499             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72500             : 
   72501             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   72502             : //      This code is automatically generated for each 
   72503             : //      terminal and non-terminal within the defined 
   72504             : //      grammar.  There is a simple way to change the 
   72505             : //      code to fix bugs etc.  See the ROSE README file
   72506             : //      for directions.
   72507             : 
   72508             : // tps: (02/22/2010): Adding DLL export requirements
   72509             : #include "rosedll.h"
   72510             : 
   72511             : // predeclarations for SgTypeChar16
   72512             : 
   72513             : /* #line 72514 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72514             : 
   72515             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   72516             : 
   72517             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72518             : 
   72519             : #if 1
   72520             : // Class Definition for SgTypeChar16
   72521             : class ROSE_DLL_API SgTypeChar16  : public SgType
   72522             :    {
   72523             :      public:
   72524             : 
   72525             : 
   72526             : /* #line 72527 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72527             : 
   72528             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   72529             : // Start of memberFunctionString
   72530             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   72531             : 
   72532             : // *** COMMON CODE SECTION BEGINS HERE ***
   72533             : 
   72534             :     public:
   72535             : 
   72536             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   72537             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   72538             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   72539             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   72540             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   72541             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   72542             : 
   72543             :       /*! \brief returns a string representing the class name */
   72544             :           virtual std::string class_name() const override;
   72545             : 
   72546             :       /*! \brief returns new style SageIII enum values */
   72547             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   72548             : 
   72549             :       /*! \brief static variant value */
   72550             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   72551             :        // static const VariantT static_variant = V_SgTypeChar16;
   72552             :           enum { static_variant = V_SgTypeChar16 };
   72553             : 
   72554             :        /* the generated cast function */
   72555             :       /*! \brief Casts pointer from base class to derived class */
   72556             :           ROSE_DLL_API friend       SgTypeChar16* isSgTypeChar16(       SgNode * s );
   72557             : 
   72558             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   72559             :           ROSE_DLL_API friend const SgTypeChar16* isSgTypeChar16( const SgNode * s );
   72560             : 
   72561             :      // ******************************************
   72562             :      // * Memory Pool / New / Delete
   72563             :      // ******************************************
   72564             : 
   72565             :      public:
   72566             :           /// \private
   72567             :           static const unsigned pool_size; //
   72568             :           /// \private
   72569             :           static std::vector<unsigned char *> pools; //
   72570             :           /// \private
   72571             :           static SgTypeChar16 * next_node; // 
   72572             : 
   72573             :           /// \private
   72574             :           static unsigned long initializeStorageClassArray(SgTypeChar16StorageClass *); //
   72575             : 
   72576             :           /// \private
   72577             :           static void clearMemoryPool(); //
   72578             :           static void deleteMemoryPool(); //
   72579             : 
   72580             :           /// \private
   72581             :           static void extendMemoryPoolForFileIO(); //
   72582             : 
   72583             :           /// \private
   72584             :           static SgTypeChar16 * getPointerFromGlobalIndex(unsigned long); //
   72585             :           /// \private
   72586             :           static SgTypeChar16 * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   72587             : 
   72588             :           /// \private
   72589             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   72590             :           /// \private
   72591             :           static void resetValidFreepointers(); //
   72592             :           /// \private
   72593             :           static unsigned long getNumberOfLastValidPointer(); //
   72594             : 
   72595             : 
   72596             : #if defined(INLINE_FUNCTIONS)
   72597             :       /*! \brief returns pointer to newly allocated IR node */
   72598             :           inline void *operator new (size_t size);
   72599             : #else
   72600             :       /*! \brief returns pointer to newly allocated IR node */
   72601             :           void *operator new (size_t size);
   72602             : #endif
   72603             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   72604             :           void operator delete (void* pointer, size_t size);
   72605             : 
   72606             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   72607           2 :           void operator delete (void* pointer)
   72608             :              {
   72609             :             // This is the generated delete operator...
   72610           2 :                SgTypeChar16::operator delete (pointer,sizeof(SgTypeChar16));
   72611             :              }
   72612             : 
   72613             :       /*! \brief Returns the total number of IR nodes of this type */
   72614             :           static size_t numberOfNodes();
   72615             : 
   72616             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   72617             :           static size_t memoryUsage();
   72618             : 
   72619             :       // End of scope which started in IR nodes specific code 
   72620             :       /* */
   72621             : 
   72622             :       /* name Internal Functions
   72623             :           \brief Internal functions ... incomplete-documentation
   72624             : 
   72625             :           These functions have been made public as part of the design, but they are suggested for internal use 
   72626             :           or by particularly knowledgeable users for specialized tools or applications.
   72627             : 
   72628             :           \internal We could not make these private because they are required by user for special purposes. And 
   72629             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   72630             :          
   72631             :        */
   72632             : 
   72633             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   72634             :        // overridden in every class by *generated* implementation
   72635             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   72636             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   72637             :        // MS: 06/28/02 container of names of variables or container indices 
   72638             :        // used used in the traversal to access AST successor nodes
   72639             :        // overridden in every class by *generated* implementation
   72640             :       /*! \brief container of names of variables or container indices used used in the traversal
   72641             :           to access AST successor nodes overridden in every class by *generated* implementation */
   72642             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   72643             : 
   72644             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   72645             :        // than all the vector copies. The implementation for these functions is generated for each class.
   72646             :       /*! \brief return number of children in the traversal successor list */
   72647             :           virtual size_t get_numberOfTraversalSuccessors() override;
   72648             :       /*! \brief index-based access to traversal successors by index number */
   72649             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   72650             :       /*! \brief index-based access to traversal successors by child node */
   72651             :           virtual size_t get_childIndex(SgNode *child) override;
   72652             : 
   72653             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   72654             :        // MS: 08/16/2002 method for generating RTI information
   72655             :       /*! \brief return C++ Runtime-Time-Information */
   72656             :           virtual RTIReturnType roseRTI() override;
   72657             : #endif
   72658             :       /* */
   72659             : 
   72660             : 
   72661             : 
   72662             :       /* name Deprecated Functions
   72663             :           \brief Deprecated functions ... incomplete-documentation
   72664             : 
   72665             :           These functions have been deprecated from use.
   72666             :        */
   72667             :       /* */
   72668             : 
   72669             :       /*! returns a C style string (char*) representing the class name */
   72670             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   72671             : 
   72672             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   72673             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   72674             : #if 0
   72675             :       /*! returns old style Sage II enum values */
   72676             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   72677             :       /*! returns old style Sage II enum values */
   72678             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   72679             : #endif
   72680             :       /* */
   72681             : 
   72682             : 
   72683             : 
   72684             : 
   72685             :      public:
   72686             :       /* name Traversal Support Functions
   72687             :           \brief Traversal support functions ... incomplete-documentation
   72688             : 
   72689             :           These functions have been made public as part of the design, but they are suggested for internal use 
   72690             :           or by particularly knowledgable users for specialized tools or applications.
   72691             :        */
   72692             :       /* */
   72693             : 
   72694             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   72695             :        // (inferior to ROSE traversal mechanism, experimental).
   72696             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   72697             :        */
   72698             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   72699             : 
   72700             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   72701             :       /*! \brief support for the classic visitor pattern done in GoF */
   72702             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   72703             : 
   72704             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   72705             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   72706             :        */
   72707             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   72708             : 
   72709             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   72710             :        */
   72711             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   72712             : 
   72713             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   72714             :        // This traversal helps support internal tools that call static member functions.
   72715             :        // note: this function operates on the memory pools.
   72716             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   72717             :        */
   72718             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   72719             :       /* */
   72720             : 
   72721             : 
   72722             :      public:
   72723             :       /* name Memory Allocation Functions
   72724             :           \brief Memory allocations functions ... incomplete-documentation
   72725             : 
   72726             :           These functions have been made public as part of the design, but they are suggested for internal use 
   72727             :           or by particularly knowledgable users for specialized tools or applications.
   72728             :        */
   72729             :       /* */
   72730             : 
   72731             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   72732             : 
   72733             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   72734             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   72735             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   72736             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   72737             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   72738             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   72739             :           being used with the AST File I/O mechanism.
   72740             :        */
   72741             :           virtual bool isInMemoryPool() override;
   72742             : 
   72743             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   72744             : 
   72745             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   72746             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   72747             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   72748             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   72749             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   72750             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   72751             :           being used with the AST File I/O mechanism.
   72752             :        */
   72753             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   72754             : 
   72755             :       // DQ (4/30/2006): Modified to be a const function.
   72756             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   72757             : 
   72758             :           This functions is part of general support for many possible tools to operate 
   72759             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   72760             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   72761             :           less than the set of pointers used by the AST file I/O. This is part of
   72762             :           work implemented by Andreas, and support tools such as the AST graph generation.
   72763             : 
   72764             :           \warning This function can return unexpected data members and thus the 
   72765             :                    order and the number of elements is unpredicable and subject 
   72766             :                    to change.
   72767             : 
   72768             :           \returns STL vector of pairs of SgNode* and strings
   72769             :        */
   72770             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   72771             : 
   72772             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   72773             : 
   72774             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   72775             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   72776             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   72777             : 
   72778             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   72779             :                    and subject to change.
   72780             :        */
   72781             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   72782             : 
   72783             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   72784             : 
   72785             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   72786             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   72787             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   72788             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   72789             : 
   72790             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   72791             : 
   72792             :           \returns long
   72793             :        */
   72794             :           virtual long getChildIndex( SgNode* childNode ) const override;
   72795             : 
   72796             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   72797             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   72798             :       /* \brief Constructor for use by AST File I/O Mechanism
   72799             : 
   72800             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   72801             :           which obtained via fast binary file I/O from disk.
   72802             :        */
   72803             :        // SgTypeChar16( SgTypeChar16StorageClass& source );
   72804             : 
   72805             : 
   72806             : 
   72807             : 
   72808             : 
   72809             :  // JH (10/24/2005): methods added to support the ast file IO
   72810             :     private:
   72811             : 
   72812             :       /* name AST Memory Allocation Support Functions
   72813             :           \brief Memory allocations support....
   72814             : 
   72815             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   72816             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   72817             :           and support the AST File I/O Mechanism.
   72818             :        */
   72819             :       /* */
   72820             : 
   72821             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   72822             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   72823             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   72824             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   72825             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   72826             :           a correspinding one in the AST_FILE_IO class!
   72827             :        */
   72828             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   72829             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   72830             :       /* \brief Typedef used for low level memory access.
   72831             :        */
   72832             :        // typedef unsigned char* TestType;
   72833             : 
   72834             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   72835             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   72836             :       /* \brief Typedef used to hold memory addresses as values.
   72837             :        */
   72838             :        // typedef unsigned long  AddressType;
   72839             : 
   72840             : 
   72841             : 
   72842             :        // necessary, to have direct access to the p_freepointer and the private methods !
   72843             :       /*! \brief friend class declaration to support AST File I/O */
   72844             :           friend class AST_FILE_IO;
   72845             : 
   72846             :       /*! \brief friend class declaration to support AST File I/O */
   72847             :           friend class SgTypeChar16StorageClass;
   72848             : 
   72849             :       /*! \brief friend class declaration to support AST File I/O */
   72850             :           friend class AstSpecificDataManagingClass;
   72851             : 
   72852             :       /*! \brief friend class declaration to support AST File I/O */
   72853             :           friend class AstSpecificDataManagingClassStorageClass;
   72854             :     public:
   72855             :       /*! \brief IR node constructor to support AST File I/O */
   72856             :           SgTypeChar16( const SgTypeChar16StorageClass& source );
   72857             : 
   72858             :  // private: // JJW hack
   72859             :        /*
   72860             :           name AST Memory Allocation Support Variables
   72861             :           Memory allocations support variables 
   72862             : 
   72863             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   72864             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   72865             :           and support the AST File I/O Mechanism.
   72866             :        */
   72867             :       /* */
   72868             : 
   72869             :     public:
   72870             : 
   72871             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   72872             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   72873             :       // virtual SgNode* addRegExpAttribute();
   72874             :       /*! \brief Support for AST matching using regular expression.
   72875             : 
   72876             :           This support is incomplete and the subject of current research to define 
   72877             :           RegEx trees to support inexact matching.
   72878             :        */
   72879             :           SgTypeChar16* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   72880             : 
   72881             : // *** COMMON CODE SECTION ENDS HERE ***
   72882             : 
   72883             : 
   72884             : // End of memberFunctionString
   72885             : // Start of memberFunctionString
   72886             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   72887             : 
   72888             :      // the generated cast function
   72889             :      // friend ROSE_DLL_API SgTypeChar16* isSgTypeChar16 ( SgNode* s );
   72890             : 
   72891             :           typedef SgType base_node_type;
   72892             : 
   72893             : 
   72894             : // End of memberFunctionString
   72895             : // Start of memberFunctionString
   72896             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   72897             : 
   72898             :        // SgName get_mangled ( SgUnparse_Info & info );
   72899             : 
   72900             :       //! Mangled name support for unparser support
   72901             :        // SgName get_mangled ( SgUnparse_Info & info );
   72902             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   72903             :           virtual SgName get_mangled (void) const override;
   72904             : 
   72905             : 
   72906             : 
   72907             : // End of memberFunctionString
   72908             : // Start of memberFunctionString
   72909             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   72910             : 
   72911             :       //! example of type used where construction is particularly simple
   72912             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   72913             :        // static SgTypeChar16 builtin_type;
   72914             :        // static SgTypeChar16* builtin_type;
   72915             : 
   72916             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   72917             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   72918             :        // own data member and associated access function.
   72919             :        // static SgTypeChar16* get_builtin_type();
   72920             : 
   72921             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   72922             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   72923             :        // own data member and associated access function.
   72924             :        // static void set_builtin_type(SgTypeChar16* builtin_type);
   72925             : 
   72926             :       //! function returns example of type
   72927             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   72928             :        // static SgTypeChar16* createType(void);
   72929             :           static SgTypeChar16* createType(SgExpression* optional_fortran_type_kind = NULL);
   72930             : 
   72931             : 
   72932             : // End of memberFunctionString
   72933             : 
   72934             : 
   72935             : 
   72936             :      public: 
   72937             :          virtual ~SgTypeChar16();
   72938             : 
   72939             : 
   72940             :      public: 
   72941             :          SgTypeChar16(); 
   72942             : 
   72943             :     protected:
   72944             : // Start of memberFunctionString
   72945             : static SgTypeChar16* p_builtin_type;
   72946             :           
   72947             : // End of memberFunctionString
   72948             : 
   72949             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeChar16>;
   72950             : 
   72951             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72952             : 
   72953             : 
   72954             :    };
   72955             : #endif
   72956             : 
   72957             : // postdeclarations for SgTypeChar16
   72958             : 
   72959             : /* #line 72960 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72960             : 
   72961             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   72962             : 
   72963             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72964             : 
   72965             : 
   72966             : /* #line 72967 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72967             : 
   72968             : 
   72969             : 
   72970             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72971             : 
   72972             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   72973             : //      This code is automatically generated for each 
   72974             : //      terminal and non-terminal within the defined 
   72975             : //      grammar.  There is a simple way to change the 
   72976             : //      code to fix bugs etc.  See the ROSE README file
   72977             : //      for directions.
   72978             : 
   72979             : // tps: (02/22/2010): Adding DLL export requirements
   72980             : #include "rosedll.h"
   72981             : 
   72982             : // predeclarations for SgTypeChar32
   72983             : 
   72984             : /* #line 72985 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72985             : 
   72986             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   72987             : 
   72988             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   72989             : 
   72990             : #if 1
   72991             : // Class Definition for SgTypeChar32
   72992             : class ROSE_DLL_API SgTypeChar32  : public SgType
   72993             :    {
   72994             :      public:
   72995             : 
   72996             : 
   72997             : /* #line 72998 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   72998             : 
   72999             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   73000             : // Start of memberFunctionString
   73001             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   73002             : 
   73003             : // *** COMMON CODE SECTION BEGINS HERE ***
   73004             : 
   73005             :     public:
   73006             : 
   73007             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   73008             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   73009             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   73010             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   73011             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   73012             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   73013             : 
   73014             :       /*! \brief returns a string representing the class name */
   73015             :           virtual std::string class_name() const override;
   73016             : 
   73017             :       /*! \brief returns new style SageIII enum values */
   73018             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   73019             : 
   73020             :       /*! \brief static variant value */
   73021             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   73022             :        // static const VariantT static_variant = V_SgTypeChar32;
   73023             :           enum { static_variant = V_SgTypeChar32 };
   73024             : 
   73025             :        /* the generated cast function */
   73026             :       /*! \brief Casts pointer from base class to derived class */
   73027             :           ROSE_DLL_API friend       SgTypeChar32* isSgTypeChar32(       SgNode * s );
   73028             : 
   73029             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   73030             :           ROSE_DLL_API friend const SgTypeChar32* isSgTypeChar32( const SgNode * s );
   73031             : 
   73032             :      // ******************************************
   73033             :      // * Memory Pool / New / Delete
   73034             :      // ******************************************
   73035             : 
   73036             :      public:
   73037             :           /// \private
   73038             :           static const unsigned pool_size; //
   73039             :           /// \private
   73040             :           static std::vector<unsigned char *> pools; //
   73041             :           /// \private
   73042             :           static SgTypeChar32 * next_node; // 
   73043             : 
   73044             :           /// \private
   73045             :           static unsigned long initializeStorageClassArray(SgTypeChar32StorageClass *); //
   73046             : 
   73047             :           /// \private
   73048             :           static void clearMemoryPool(); //
   73049             :           static void deleteMemoryPool(); //
   73050             : 
   73051             :           /// \private
   73052             :           static void extendMemoryPoolForFileIO(); //
   73053             : 
   73054             :           /// \private
   73055             :           static SgTypeChar32 * getPointerFromGlobalIndex(unsigned long); //
   73056             :           /// \private
   73057             :           static SgTypeChar32 * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   73058             : 
   73059             :           /// \private
   73060             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   73061             :           /// \private
   73062             :           static void resetValidFreepointers(); //
   73063             :           /// \private
   73064             :           static unsigned long getNumberOfLastValidPointer(); //
   73065             : 
   73066             : 
   73067             : #if defined(INLINE_FUNCTIONS)
   73068             :       /*! \brief returns pointer to newly allocated IR node */
   73069             :           inline void *operator new (size_t size);
   73070             : #else
   73071             :       /*! \brief returns pointer to newly allocated IR node */
   73072             :           void *operator new (size_t size);
   73073             : #endif
   73074             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   73075             :           void operator delete (void* pointer, size_t size);
   73076             : 
   73077             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   73078           2 :           void operator delete (void* pointer)
   73079             :              {
   73080             :             // This is the generated delete operator...
   73081           2 :                SgTypeChar32::operator delete (pointer,sizeof(SgTypeChar32));
   73082             :              }
   73083             : 
   73084             :       /*! \brief Returns the total number of IR nodes of this type */
   73085             :           static size_t numberOfNodes();
   73086             : 
   73087             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   73088             :           static size_t memoryUsage();
   73089             : 
   73090             :       // End of scope which started in IR nodes specific code 
   73091             :       /* */
   73092             : 
   73093             :       /* name Internal Functions
   73094             :           \brief Internal functions ... incomplete-documentation
   73095             : 
   73096             :           These functions have been made public as part of the design, but they are suggested for internal use 
   73097             :           or by particularly knowledgeable users for specialized tools or applications.
   73098             : 
   73099             :           \internal We could not make these private because they are required by user for special purposes. And 
   73100             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   73101             :          
   73102             :        */
   73103             : 
   73104             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   73105             :        // overridden in every class by *generated* implementation
   73106             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   73107             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   73108             :        // MS: 06/28/02 container of names of variables or container indices 
   73109             :        // used used in the traversal to access AST successor nodes
   73110             :        // overridden in every class by *generated* implementation
   73111             :       /*! \brief container of names of variables or container indices used used in the traversal
   73112             :           to access AST successor nodes overridden in every class by *generated* implementation */
   73113             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   73114             : 
   73115             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   73116             :        // than all the vector copies. The implementation for these functions is generated for each class.
   73117             :       /*! \brief return number of children in the traversal successor list */
   73118             :           virtual size_t get_numberOfTraversalSuccessors() override;
   73119             :       /*! \brief index-based access to traversal successors by index number */
   73120             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   73121             :       /*! \brief index-based access to traversal successors by child node */
   73122             :           virtual size_t get_childIndex(SgNode *child) override;
   73123             : 
   73124             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   73125             :        // MS: 08/16/2002 method for generating RTI information
   73126             :       /*! \brief return C++ Runtime-Time-Information */
   73127             :           virtual RTIReturnType roseRTI() override;
   73128             : #endif
   73129             :       /* */
   73130             : 
   73131             : 
   73132             : 
   73133             :       /* name Deprecated Functions
   73134             :           \brief Deprecated functions ... incomplete-documentation
   73135             : 
   73136             :           These functions have been deprecated from use.
   73137             :        */
   73138             :       /* */
   73139             : 
   73140             :       /*! returns a C style string (char*) representing the class name */
   73141             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   73142             : 
   73143             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   73144             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   73145             : #if 0
   73146             :       /*! returns old style Sage II enum values */
   73147             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   73148             :       /*! returns old style Sage II enum values */
   73149             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   73150             : #endif
   73151             :       /* */
   73152             : 
   73153             : 
   73154             : 
   73155             : 
   73156             :      public:
   73157             :       /* name Traversal Support Functions
   73158             :           \brief Traversal support functions ... incomplete-documentation
   73159             : 
   73160             :           These functions have been made public as part of the design, but they are suggested for internal use 
   73161             :           or by particularly knowledgable users for specialized tools or applications.
   73162             :        */
   73163             :       /* */
   73164             : 
   73165             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   73166             :        // (inferior to ROSE traversal mechanism, experimental).
   73167             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   73168             :        */
   73169             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   73170             : 
   73171             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   73172             :       /*! \brief support for the classic visitor pattern done in GoF */
   73173             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   73174             : 
   73175             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   73176             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   73177             :        */
   73178             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   73179             : 
   73180             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   73181             :        */
   73182             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   73183             : 
   73184             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   73185             :        // This traversal helps support internal tools that call static member functions.
   73186             :        // note: this function operates on the memory pools.
   73187             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   73188             :        */
   73189             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   73190             :       /* */
   73191             : 
   73192             : 
   73193             :      public:
   73194             :       /* name Memory Allocation Functions
   73195             :           \brief Memory allocations functions ... incomplete-documentation
   73196             : 
   73197             :           These functions have been made public as part of the design, but they are suggested for internal use 
   73198             :           or by particularly knowledgable users for specialized tools or applications.
   73199             :        */
   73200             :       /* */
   73201             : 
   73202             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   73203             : 
   73204             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   73205             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   73206             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   73207             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   73208             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   73209             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   73210             :           being used with the AST File I/O mechanism.
   73211             :        */
   73212             :           virtual bool isInMemoryPool() override;
   73213             : 
   73214             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   73215             : 
   73216             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   73217             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   73218             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   73219             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   73220             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   73221             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   73222             :           being used with the AST File I/O mechanism.
   73223             :        */
   73224             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   73225             : 
   73226             :       // DQ (4/30/2006): Modified to be a const function.
   73227             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   73228             : 
   73229             :           This functions is part of general support for many possible tools to operate 
   73230             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   73231             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   73232             :           less than the set of pointers used by the AST file I/O. This is part of
   73233             :           work implemented by Andreas, and support tools such as the AST graph generation.
   73234             : 
   73235             :           \warning This function can return unexpected data members and thus the 
   73236             :                    order and the number of elements is unpredicable and subject 
   73237             :                    to change.
   73238             : 
   73239             :           \returns STL vector of pairs of SgNode* and strings
   73240             :        */
   73241             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   73242             : 
   73243             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   73244             : 
   73245             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   73246             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   73247             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   73248             : 
   73249             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   73250             :                    and subject to change.
   73251             :        */
   73252             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   73253             : 
   73254             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   73255             : 
   73256             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   73257             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   73258             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   73259             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   73260             : 
   73261             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   73262             : 
   73263             :           \returns long
   73264             :        */
   73265             :           virtual long getChildIndex( SgNode* childNode ) const override;
   73266             : 
   73267             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   73268             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   73269             :       /* \brief Constructor for use by AST File I/O Mechanism
   73270             : 
   73271             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   73272             :           which obtained via fast binary file I/O from disk.
   73273             :        */
   73274             :        // SgTypeChar32( SgTypeChar32StorageClass& source );
   73275             : 
   73276             : 
   73277             : 
   73278             : 
   73279             : 
   73280             :  // JH (10/24/2005): methods added to support the ast file IO
   73281             :     private:
   73282             : 
   73283             :       /* name AST Memory Allocation Support Functions
   73284             :           \brief Memory allocations support....
   73285             : 
   73286             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   73287             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   73288             :           and support the AST File I/O Mechanism.
   73289             :        */
   73290             :       /* */
   73291             : 
   73292             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   73293             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   73294             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   73295             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   73296             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   73297             :           a correspinding one in the AST_FILE_IO class!
   73298             :        */
   73299             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   73300             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   73301             :       /* \brief Typedef used for low level memory access.
   73302             :        */
   73303             :        // typedef unsigned char* TestType;
   73304             : 
   73305             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   73306             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   73307             :       /* \brief Typedef used to hold memory addresses as values.
   73308             :        */
   73309             :        // typedef unsigned long  AddressType;
   73310             : 
   73311             : 
   73312             : 
   73313             :        // necessary, to have direct access to the p_freepointer and the private methods !
   73314             :       /*! \brief friend class declaration to support AST File I/O */
   73315             :           friend class AST_FILE_IO;
   73316             : 
   73317             :       /*! \brief friend class declaration to support AST File I/O */
   73318             :           friend class SgTypeChar32StorageClass;
   73319             : 
   73320             :       /*! \brief friend class declaration to support AST File I/O */
   73321             :           friend class AstSpecificDataManagingClass;
   73322             : 
   73323             :       /*! \brief friend class declaration to support AST File I/O */
   73324             :           friend class AstSpecificDataManagingClassStorageClass;
   73325             :     public:
   73326             :       /*! \brief IR node constructor to support AST File I/O */
   73327             :           SgTypeChar32( const SgTypeChar32StorageClass& source );
   73328             : 
   73329             :  // private: // JJW hack
   73330             :        /*
   73331             :           name AST Memory Allocation Support Variables
   73332             :           Memory allocations support variables 
   73333             : 
   73334             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   73335             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   73336             :           and support the AST File I/O Mechanism.
   73337             :        */
   73338             :       /* */
   73339             : 
   73340             :     public:
   73341             : 
   73342             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   73343             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   73344             :       // virtual SgNode* addRegExpAttribute();
   73345             :       /*! \brief Support for AST matching using regular expression.
   73346             : 
   73347             :           This support is incomplete and the subject of current research to define 
   73348             :           RegEx trees to support inexact matching.
   73349             :        */
   73350             :           SgTypeChar32* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   73351             : 
   73352             : // *** COMMON CODE SECTION ENDS HERE ***
   73353             : 
   73354             : 
   73355             : // End of memberFunctionString
   73356             : // Start of memberFunctionString
   73357             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   73358             : 
   73359             :      // the generated cast function
   73360             :      // friend ROSE_DLL_API SgTypeChar32* isSgTypeChar32 ( SgNode* s );
   73361             : 
   73362             :           typedef SgType base_node_type;
   73363             : 
   73364             : 
   73365             : // End of memberFunctionString
   73366             : // Start of memberFunctionString
   73367             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   73368             : 
   73369             :        // SgName get_mangled ( SgUnparse_Info & info );
   73370             : 
   73371             :       //! Mangled name support for unparser support
   73372             :        // SgName get_mangled ( SgUnparse_Info & info );
   73373             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   73374             :           virtual SgName get_mangled (void) const override;
   73375             : 
   73376             : 
   73377             : 
   73378             : // End of memberFunctionString
   73379             : // Start of memberFunctionString
   73380             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   73381             : 
   73382             :       //! example of type used where construction is particularly simple
   73383             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   73384             :        // static SgTypeChar32 builtin_type;
   73385             :        // static SgTypeChar32* builtin_type;
   73386             : 
   73387             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   73388             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   73389             :        // own data member and associated access function.
   73390             :        // static SgTypeChar32* get_builtin_type();
   73391             : 
   73392             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   73393             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   73394             :        // own data member and associated access function.
   73395             :        // static void set_builtin_type(SgTypeChar32* builtin_type);
   73396             : 
   73397             :       //! function returns example of type
   73398             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   73399             :        // static SgTypeChar32* createType(void);
   73400             :           static SgTypeChar32* createType(SgExpression* optional_fortran_type_kind = NULL);
   73401             : 
   73402             : 
   73403             : // End of memberFunctionString
   73404             : 
   73405             : 
   73406             : 
   73407             :      public: 
   73408             :          virtual ~SgTypeChar32();
   73409             : 
   73410             : 
   73411             :      public: 
   73412             :          SgTypeChar32(); 
   73413             : 
   73414             :     protected:
   73415             : // Start of memberFunctionString
   73416             : static SgTypeChar32* p_builtin_type;
   73417             :           
   73418             : // End of memberFunctionString
   73419             : 
   73420             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeChar32>;
   73421             : 
   73422             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73423             : 
   73424             : 
   73425             :    };
   73426             : #endif
   73427             : 
   73428             : // postdeclarations for SgTypeChar32
   73429             : 
   73430             : /* #line 73431 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73431             : 
   73432             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   73433             : 
   73434             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73435             : 
   73436             : 
   73437             : /* #line 73438 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73438             : 
   73439             : 
   73440             : 
   73441             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73442             : 
   73443             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   73444             : //      This code is automatically generated for each 
   73445             : //      terminal and non-terminal within the defined 
   73446             : //      grammar.  There is a simple way to change the 
   73447             : //      code to fix bugs etc.  See the ROSE README file
   73448             : //      for directions.
   73449             : 
   73450             : // tps: (02/22/2010): Adding DLL export requirements
   73451             : #include "rosedll.h"
   73452             : 
   73453             : // predeclarations for SgTypeFloat128
   73454             : 
   73455             : /* #line 73456 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73456             : 
   73457             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   73458             : 
   73459             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73460             : 
   73461             : #if 1
   73462             : // Class Definition for SgTypeFloat128
   73463             : class ROSE_DLL_API SgTypeFloat128  : public SgType
   73464             :    {
   73465             :      public:
   73466             : 
   73467             : 
   73468             : /* #line 73469 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73469             : 
   73470             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   73471             : // Start of memberFunctionString
   73472             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   73473             : 
   73474             : // *** COMMON CODE SECTION BEGINS HERE ***
   73475             : 
   73476             :     public:
   73477             : 
   73478             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   73479             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   73480             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   73481             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   73482             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   73483             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   73484             : 
   73485             :       /*! \brief returns a string representing the class name */
   73486             :           virtual std::string class_name() const override;
   73487             : 
   73488             :       /*! \brief returns new style SageIII enum values */
   73489             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   73490             : 
   73491             :       /*! \brief static variant value */
   73492             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   73493             :        // static const VariantT static_variant = V_SgTypeFloat128;
   73494             :           enum { static_variant = V_SgTypeFloat128 };
   73495             : 
   73496             :        /* the generated cast function */
   73497             :       /*! \brief Casts pointer from base class to derived class */
   73498             :           ROSE_DLL_API friend       SgTypeFloat128* isSgTypeFloat128(       SgNode * s );
   73499             : 
   73500             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   73501             :           ROSE_DLL_API friend const SgTypeFloat128* isSgTypeFloat128( const SgNode * s );
   73502             : 
   73503             :      // ******************************************
   73504             :      // * Memory Pool / New / Delete
   73505             :      // ******************************************
   73506             : 
   73507             :      public:
   73508             :           /// \private
   73509             :           static const unsigned pool_size; //
   73510             :           /// \private
   73511             :           static std::vector<unsigned char *> pools; //
   73512             :           /// \private
   73513             :           static SgTypeFloat128 * next_node; // 
   73514             : 
   73515             :           /// \private
   73516             :           static unsigned long initializeStorageClassArray(SgTypeFloat128StorageClass *); //
   73517             : 
   73518             :           /// \private
   73519             :           static void clearMemoryPool(); //
   73520             :           static void deleteMemoryPool(); //
   73521             : 
   73522             :           /// \private
   73523             :           static void extendMemoryPoolForFileIO(); //
   73524             : 
   73525             :           /// \private
   73526             :           static SgTypeFloat128 * getPointerFromGlobalIndex(unsigned long); //
   73527             :           /// \private
   73528             :           static SgTypeFloat128 * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   73529             : 
   73530             :           /// \private
   73531             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   73532             :           /// \private
   73533             :           static void resetValidFreepointers(); //
   73534             :           /// \private
   73535             :           static unsigned long getNumberOfLastValidPointer(); //
   73536             : 
   73537             : 
   73538             : #if defined(INLINE_FUNCTIONS)
   73539             :       /*! \brief returns pointer to newly allocated IR node */
   73540             :           inline void *operator new (size_t size);
   73541             : #else
   73542             :       /*! \brief returns pointer to newly allocated IR node */
   73543             :           void *operator new (size_t size);
   73544             : #endif
   73545             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   73546             :           void operator delete (void* pointer, size_t size);
   73547             : 
   73548             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   73549          15 :           void operator delete (void* pointer)
   73550             :              {
   73551             :             // This is the generated delete operator...
   73552          15 :                SgTypeFloat128::operator delete (pointer,sizeof(SgTypeFloat128));
   73553             :              }
   73554             : 
   73555             :       /*! \brief Returns the total number of IR nodes of this type */
   73556             :           static size_t numberOfNodes();
   73557             : 
   73558             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   73559             :           static size_t memoryUsage();
   73560             : 
   73561             :       // End of scope which started in IR nodes specific code 
   73562             :       /* */
   73563             : 
   73564             :       /* name Internal Functions
   73565             :           \brief Internal functions ... incomplete-documentation
   73566             : 
   73567             :           These functions have been made public as part of the design, but they are suggested for internal use 
   73568             :           or by particularly knowledgeable users for specialized tools or applications.
   73569             : 
   73570             :           \internal We could not make these private because they are required by user for special purposes. And 
   73571             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   73572             :          
   73573             :        */
   73574             : 
   73575             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   73576             :        // overridden in every class by *generated* implementation
   73577             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   73578             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   73579             :        // MS: 06/28/02 container of names of variables or container indices 
   73580             :        // used used in the traversal to access AST successor nodes
   73581             :        // overridden in every class by *generated* implementation
   73582             :       /*! \brief container of names of variables or container indices used used in the traversal
   73583             :           to access AST successor nodes overridden in every class by *generated* implementation */
   73584             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   73585             : 
   73586             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   73587             :        // than all the vector copies. The implementation for these functions is generated for each class.
   73588             :       /*! \brief return number of children in the traversal successor list */
   73589             :           virtual size_t get_numberOfTraversalSuccessors() override;
   73590             :       /*! \brief index-based access to traversal successors by index number */
   73591             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   73592             :       /*! \brief index-based access to traversal successors by child node */
   73593             :           virtual size_t get_childIndex(SgNode *child) override;
   73594             : 
   73595             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   73596             :        // MS: 08/16/2002 method for generating RTI information
   73597             :       /*! \brief return C++ Runtime-Time-Information */
   73598             :           virtual RTIReturnType roseRTI() override;
   73599             : #endif
   73600             :       /* */
   73601             : 
   73602             : 
   73603             : 
   73604             :       /* name Deprecated Functions
   73605             :           \brief Deprecated functions ... incomplete-documentation
   73606             : 
   73607             :           These functions have been deprecated from use.
   73608             :        */
   73609             :       /* */
   73610             : 
   73611             :       /*! returns a C style string (char*) representing the class name */
   73612             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   73613             : 
   73614             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   73615             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   73616             : #if 0
   73617             :       /*! returns old style Sage II enum values */
   73618             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   73619             :       /*! returns old style Sage II enum values */
   73620             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   73621             : #endif
   73622             :       /* */
   73623             : 
   73624             : 
   73625             : 
   73626             : 
   73627             :      public:
   73628             :       /* name Traversal Support Functions
   73629             :           \brief Traversal support functions ... incomplete-documentation
   73630             : 
   73631             :           These functions have been made public as part of the design, but they are suggested for internal use 
   73632             :           or by particularly knowledgable users for specialized tools or applications.
   73633             :        */
   73634             :       /* */
   73635             : 
   73636             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   73637             :        // (inferior to ROSE traversal mechanism, experimental).
   73638             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   73639             :        */
   73640             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   73641             : 
   73642             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   73643             :       /*! \brief support for the classic visitor pattern done in GoF */
   73644             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   73645             : 
   73646             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   73647             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   73648             :        */
   73649             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   73650             : 
   73651             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   73652             :        */
   73653             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   73654             : 
   73655             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   73656             :        // This traversal helps support internal tools that call static member functions.
   73657             :        // note: this function operates on the memory pools.
   73658             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   73659             :        */
   73660             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   73661             :       /* */
   73662             : 
   73663             : 
   73664             :      public:
   73665             :       /* name Memory Allocation Functions
   73666             :           \brief Memory allocations functions ... incomplete-documentation
   73667             : 
   73668             :           These functions have been made public as part of the design, but they are suggested for internal use 
   73669             :           or by particularly knowledgable users for specialized tools or applications.
   73670             :        */
   73671             :       /* */
   73672             : 
   73673             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   73674             : 
   73675             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   73676             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   73677             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   73678             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   73679             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   73680             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   73681             :           being used with the AST File I/O mechanism.
   73682             :        */
   73683             :           virtual bool isInMemoryPool() override;
   73684             : 
   73685             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   73686             : 
   73687             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   73688             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   73689             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   73690             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   73691             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   73692             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   73693             :           being used with the AST File I/O mechanism.
   73694             :        */
   73695             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   73696             : 
   73697             :       // DQ (4/30/2006): Modified to be a const function.
   73698             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   73699             : 
   73700             :           This functions is part of general support for many possible tools to operate 
   73701             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   73702             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   73703             :           less than the set of pointers used by the AST file I/O. This is part of
   73704             :           work implemented by Andreas, and support tools such as the AST graph generation.
   73705             : 
   73706             :           \warning This function can return unexpected data members and thus the 
   73707             :                    order and the number of elements is unpredicable and subject 
   73708             :                    to change.
   73709             : 
   73710             :           \returns STL vector of pairs of SgNode* and strings
   73711             :        */
   73712             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   73713             : 
   73714             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   73715             : 
   73716             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   73717             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   73718             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   73719             : 
   73720             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   73721             :                    and subject to change.
   73722             :        */
   73723             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   73724             : 
   73725             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   73726             : 
   73727             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   73728             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   73729             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   73730             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   73731             : 
   73732             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   73733             : 
   73734             :           \returns long
   73735             :        */
   73736             :           virtual long getChildIndex( SgNode* childNode ) const override;
   73737             : 
   73738             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   73739             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   73740             :       /* \brief Constructor for use by AST File I/O Mechanism
   73741             : 
   73742             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   73743             :           which obtained via fast binary file I/O from disk.
   73744             :        */
   73745             :        // SgTypeFloat128( SgTypeFloat128StorageClass& source );
   73746             : 
   73747             : 
   73748             : 
   73749             : 
   73750             : 
   73751             :  // JH (10/24/2005): methods added to support the ast file IO
   73752             :     private:
   73753             : 
   73754             :       /* name AST Memory Allocation Support Functions
   73755             :           \brief Memory allocations support....
   73756             : 
   73757             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   73758             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   73759             :           and support the AST File I/O Mechanism.
   73760             :        */
   73761             :       /* */
   73762             : 
   73763             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   73764             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   73765             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   73766             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   73767             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   73768             :           a correspinding one in the AST_FILE_IO class!
   73769             :        */
   73770             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   73771             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   73772             :       /* \brief Typedef used for low level memory access.
   73773             :        */
   73774             :        // typedef unsigned char* TestType;
   73775             : 
   73776             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   73777             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   73778             :       /* \brief Typedef used to hold memory addresses as values.
   73779             :        */
   73780             :        // typedef unsigned long  AddressType;
   73781             : 
   73782             : 
   73783             : 
   73784             :        // necessary, to have direct access to the p_freepointer and the private methods !
   73785             :       /*! \brief friend class declaration to support AST File I/O */
   73786             :           friend class AST_FILE_IO;
   73787             : 
   73788             :       /*! \brief friend class declaration to support AST File I/O */
   73789             :           friend class SgTypeFloat128StorageClass;
   73790             : 
   73791             :       /*! \brief friend class declaration to support AST File I/O */
   73792             :           friend class AstSpecificDataManagingClass;
   73793             : 
   73794             :       /*! \brief friend class declaration to support AST File I/O */
   73795             :           friend class AstSpecificDataManagingClassStorageClass;
   73796             :     public:
   73797             :       /*! \brief IR node constructor to support AST File I/O */
   73798             :           SgTypeFloat128( const SgTypeFloat128StorageClass& source );
   73799             : 
   73800             :  // private: // JJW hack
   73801             :        /*
   73802             :           name AST Memory Allocation Support Variables
   73803             :           Memory allocations support variables 
   73804             : 
   73805             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   73806             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   73807             :           and support the AST File I/O Mechanism.
   73808             :        */
   73809             :       /* */
   73810             : 
   73811             :     public:
   73812             : 
   73813             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   73814             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   73815             :       // virtual SgNode* addRegExpAttribute();
   73816             :       /*! \brief Support for AST matching using regular expression.
   73817             : 
   73818             :           This support is incomplete and the subject of current research to define 
   73819             :           RegEx trees to support inexact matching.
   73820             :        */
   73821             :           SgTypeFloat128* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   73822             : 
   73823             : // *** COMMON CODE SECTION ENDS HERE ***
   73824             : 
   73825             : 
   73826             : // End of memberFunctionString
   73827             : // Start of memberFunctionString
   73828             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   73829             : 
   73830             :      // the generated cast function
   73831             :      // friend ROSE_DLL_API SgTypeFloat128* isSgTypeFloat128 ( SgNode* s );
   73832             : 
   73833             :           typedef SgType base_node_type;
   73834             : 
   73835             : 
   73836             : // End of memberFunctionString
   73837             : // Start of memberFunctionString
   73838             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   73839             : 
   73840             :        // SgName get_mangled ( SgUnparse_Info & info );
   73841             : 
   73842             :       //! Mangled name support for unparser support
   73843             :        // SgName get_mangled ( SgUnparse_Info & info );
   73844             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   73845             :           virtual SgName get_mangled (void) const override;
   73846             : 
   73847             : 
   73848             : 
   73849             : // End of memberFunctionString
   73850             : // Start of memberFunctionString
   73851             : /* #line 267 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   73852             : 
   73853             :       //! example of type used where construction is particularly simple
   73854             :        // DQ (1/31/2006): Modified to build all types in the memory pools
   73855             :        // static SgTypeFloat128 builtin_type;
   73856             :        // static SgTypeFloat128* builtin_type;
   73857             : 
   73858             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   73859             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   73860             :        // own data member and associated access function.
   73861             :        // static SgTypeFloat128* get_builtin_type();
   73862             : 
   73863             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   73864             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   73865             :        // own data member and associated access function.
   73866             :        // static void set_builtin_type(SgTypeFloat128* builtin_type);
   73867             : 
   73868             :       //! function returns example of type
   73869             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   73870             :        // static SgTypeFloat128* createType(void);
   73871             :           static SgTypeFloat128* createType(SgExpression* optional_fortran_type_kind = NULL);
   73872             : 
   73873             : 
   73874             : // End of memberFunctionString
   73875             : 
   73876             : 
   73877             : 
   73878             :      public: 
   73879             :          virtual ~SgTypeFloat128();
   73880             : 
   73881             : 
   73882             :      public: 
   73883             :          SgTypeFloat128(); 
   73884             : 
   73885             :     protected:
   73886             : // Start of memberFunctionString
   73887             : static SgTypeFloat128* p_builtin_type;
   73888             :           
   73889             : // End of memberFunctionString
   73890             : 
   73891             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeFloat128>;
   73892             : 
   73893             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73894             : 
   73895             : 
   73896             :    };
   73897             : #endif
   73898             : 
   73899             : // postdeclarations for SgTypeFloat128
   73900             : 
   73901             : /* #line 73902 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73902             : 
   73903             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   73904             : 
   73905             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73906             : 
   73907             : 
   73908             : /* #line 73909 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73909             : 
   73910             : 
   73911             : 
   73912             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73913             : 
   73914             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   73915             : //      This code is automatically generated for each 
   73916             : //      terminal and non-terminal within the defined 
   73917             : //      grammar.  There is a simple way to change the 
   73918             : //      code to fix bugs etc.  See the ROSE README file
   73919             : //      for directions.
   73920             : 
   73921             : // tps: (02/22/2010): Adding DLL export requirements
   73922             : #include "rosedll.h"
   73923             : 
   73924             : // predeclarations for SgTypeFixed
   73925             : 
   73926             : /* #line 73927 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73927             : 
   73928             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   73929             : 
   73930             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   73931             : 
   73932             : #if 1
   73933             : // Class Definition for SgTypeFixed
   73934             : class ROSE_DLL_API SgTypeFixed  : public SgType
   73935             :    {
   73936             :      public:
   73937             : 
   73938             : 
   73939             : /* #line 73940 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   73940             : 
   73941             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   73942             : // Start of memberFunctionString
   73943             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   73944             : 
   73945             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   73946             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   73947             :        // own data member and associated access function.
   73948             :        // static SgTypeFixed* get_builtin_type();
   73949             : 
   73950             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   73951             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   73952             :        // own data member and associated access function.
   73953             :        // static void set_builtin_type(SgTypeFixed* builtin_type);
   73954             : 
   73955             :       //! more sophisticated version for more complex types like SgTypeFixed (types whose constructors take parameters)
   73956             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   73957             :        // static SgTypeFixed* createType(SgExpression* scale = NULL, SgExpression* fraction = NULL);
   73958             :           static SgTypeFixed* createType(SgExpression* scale = NULL, SgExpression* fraction = NULL, SgExpression* optional_fortran_type_kind = NULL);
   73959             : 
   73960             : 
   73961             : // End of memberFunctionString
   73962             : // Start of memberFunctionString
   73963             : /* #line 1001 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   73964             : 
   73965             :       // SgName get_name() const;
   73966             : 
   73967             : 
   73968             : // End of memberFunctionString
   73969             : // Start of memberFunctionString
   73970             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   73971             : 
   73972             : // *** COMMON CODE SECTION BEGINS HERE ***
   73973             : 
   73974             :     public:
   73975             : 
   73976             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   73977             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   73978             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   73979             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   73980             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   73981             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   73982             : 
   73983             :       /*! \brief returns a string representing the class name */
   73984             :           virtual std::string class_name() const override;
   73985             : 
   73986             :       /*! \brief returns new style SageIII enum values */
   73987             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   73988             : 
   73989             :       /*! \brief static variant value */
   73990             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   73991             :        // static const VariantT static_variant = V_SgTypeFixed;
   73992             :           enum { static_variant = V_SgTypeFixed };
   73993             : 
   73994             :        /* the generated cast function */
   73995             :       /*! \brief Casts pointer from base class to derived class */
   73996             :           ROSE_DLL_API friend       SgTypeFixed* isSgTypeFixed(       SgNode * s );
   73997             : 
   73998             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   73999             :           ROSE_DLL_API friend const SgTypeFixed* isSgTypeFixed( const SgNode * s );
   74000             : 
   74001             :      // ******************************************
   74002             :      // * Memory Pool / New / Delete
   74003             :      // ******************************************
   74004             : 
   74005             :      public:
   74006             :           /// \private
   74007             :           static const unsigned pool_size; //
   74008             :           /// \private
   74009             :           static std::vector<unsigned char *> pools; //
   74010             :           /// \private
   74011             :           static SgTypeFixed * next_node; // 
   74012             : 
   74013             :           /// \private
   74014             :           static unsigned long initializeStorageClassArray(SgTypeFixedStorageClass *); //
   74015             : 
   74016             :           /// \private
   74017             :           static void clearMemoryPool(); //
   74018             :           static void deleteMemoryPool(); //
   74019             : 
   74020             :           /// \private
   74021             :           static void extendMemoryPoolForFileIO(); //
   74022             : 
   74023             :           /// \private
   74024             :           static SgTypeFixed * getPointerFromGlobalIndex(unsigned long); //
   74025             :           /// \private
   74026             :           static SgTypeFixed * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   74027             : 
   74028             :           /// \private
   74029             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   74030             :           /// \private
   74031             :           static void resetValidFreepointers(); //
   74032             :           /// \private
   74033             :           static unsigned long getNumberOfLastValidPointer(); //
   74034             : 
   74035             : 
   74036             : #if defined(INLINE_FUNCTIONS)
   74037             :       /*! \brief returns pointer to newly allocated IR node */
   74038             :           inline void *operator new (size_t size);
   74039             : #else
   74040             :       /*! \brief returns pointer to newly allocated IR node */
   74041             :           void *operator new (size_t size);
   74042             : #endif
   74043             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   74044             :           void operator delete (void* pointer, size_t size);
   74045             : 
   74046             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   74047           0 :           void operator delete (void* pointer)
   74048             :              {
   74049             :             // This is the generated delete operator...
   74050           0 :                SgTypeFixed::operator delete (pointer,sizeof(SgTypeFixed));
   74051             :              }
   74052             : 
   74053             :       /*! \brief Returns the total number of IR nodes of this type */
   74054             :           static size_t numberOfNodes();
   74055             : 
   74056             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   74057             :           static size_t memoryUsage();
   74058             : 
   74059             :       // End of scope which started in IR nodes specific code 
   74060             :       /* */
   74061             : 
   74062             :       /* name Internal Functions
   74063             :           \brief Internal functions ... incomplete-documentation
   74064             : 
   74065             :           These functions have been made public as part of the design, but they are suggested for internal use 
   74066             :           or by particularly knowledgeable users for specialized tools or applications.
   74067             : 
   74068             :           \internal We could not make these private because they are required by user for special purposes. And 
   74069             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   74070             :          
   74071             :        */
   74072             : 
   74073             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   74074             :        // overridden in every class by *generated* implementation
   74075             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   74076             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   74077             :        // MS: 06/28/02 container of names of variables or container indices 
   74078             :        // used used in the traversal to access AST successor nodes
   74079             :        // overridden in every class by *generated* implementation
   74080             :       /*! \brief container of names of variables or container indices used used in the traversal
   74081             :           to access AST successor nodes overridden in every class by *generated* implementation */
   74082             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   74083             : 
   74084             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   74085             :        // than all the vector copies. The implementation for these functions is generated for each class.
   74086             :       /*! \brief return number of children in the traversal successor list */
   74087             :           virtual size_t get_numberOfTraversalSuccessors() override;
   74088             :       /*! \brief index-based access to traversal successors by index number */
   74089             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   74090             :       /*! \brief index-based access to traversal successors by child node */
   74091             :           virtual size_t get_childIndex(SgNode *child) override;
   74092             : 
   74093             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   74094             :        // MS: 08/16/2002 method for generating RTI information
   74095             :       /*! \brief return C++ Runtime-Time-Information */
   74096             :           virtual RTIReturnType roseRTI() override;
   74097             : #endif
   74098             :       /* */
   74099             : 
   74100             : 
   74101             : 
   74102             :       /* name Deprecated Functions
   74103             :           \brief Deprecated functions ... incomplete-documentation
   74104             : 
   74105             :           These functions have been deprecated from use.
   74106             :        */
   74107             :       /* */
   74108             : 
   74109             :       /*! returns a C style string (char*) representing the class name */
   74110             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   74111             : 
   74112             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   74113             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   74114             : #if 0
   74115             :       /*! returns old style Sage II enum values */
   74116             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   74117             :       /*! returns old style Sage II enum values */
   74118             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   74119             : #endif
   74120             :       /* */
   74121             : 
   74122             : 
   74123             : 
   74124             : 
   74125             :      public:
   74126             :       /* name Traversal Support Functions
   74127             :           \brief Traversal support functions ... incomplete-documentation
   74128             : 
   74129             :           These functions have been made public as part of the design, but they are suggested for internal use 
   74130             :           or by particularly knowledgable users for specialized tools or applications.
   74131             :        */
   74132             :       /* */
   74133             : 
   74134             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   74135             :        // (inferior to ROSE traversal mechanism, experimental).
   74136             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   74137             :        */
   74138             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   74139             : 
   74140             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   74141             :       /*! \brief support for the classic visitor pattern done in GoF */
   74142             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   74143             : 
   74144             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   74145             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   74146             :        */
   74147             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   74148             : 
   74149             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   74150             :        */
   74151             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   74152             : 
   74153             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   74154             :        // This traversal helps support internal tools that call static member functions.
   74155             :        // note: this function operates on the memory pools.
   74156             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   74157             :        */
   74158             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   74159             :       /* */
   74160             : 
   74161             : 
   74162             :      public:
   74163             :       /* name Memory Allocation Functions
   74164             :           \brief Memory allocations functions ... incomplete-documentation
   74165             : 
   74166             :           These functions have been made public as part of the design, but they are suggested for internal use 
   74167             :           or by particularly knowledgable users for specialized tools or applications.
   74168             :        */
   74169             :       /* */
   74170             : 
   74171             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   74172             : 
   74173             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   74174             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   74175             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   74176             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   74177             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   74178             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   74179             :           being used with the AST File I/O mechanism.
   74180             :        */
   74181             :           virtual bool isInMemoryPool() override;
   74182             : 
   74183             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   74184             : 
   74185             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   74186             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   74187             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   74188             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   74189             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   74190             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   74191             :           being used with the AST File I/O mechanism.
   74192             :        */
   74193             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   74194             : 
   74195             :       // DQ (4/30/2006): Modified to be a const function.
   74196             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   74197             : 
   74198             :           This functions is part of general support for many possible tools to operate 
   74199             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   74200             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   74201             :           less than the set of pointers used by the AST file I/O. This is part of
   74202             :           work implemented by Andreas, and support tools such as the AST graph generation.
   74203             : 
   74204             :           \warning This function can return unexpected data members and thus the 
   74205             :                    order and the number of elements is unpredicable and subject 
   74206             :                    to change.
   74207             : 
   74208             :           \returns STL vector of pairs of SgNode* and strings
   74209             :        */
   74210             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   74211             : 
   74212             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   74213             : 
   74214             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   74215             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   74216             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   74217             : 
   74218             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   74219             :                    and subject to change.
   74220             :        */
   74221             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   74222             : 
   74223             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   74224             : 
   74225             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   74226             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   74227             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   74228             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   74229             : 
   74230             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   74231             : 
   74232             :           \returns long
   74233             :        */
   74234             :           virtual long getChildIndex( SgNode* childNode ) const override;
   74235             : 
   74236             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   74237             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   74238             :       /* \brief Constructor for use by AST File I/O Mechanism
   74239             : 
   74240             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   74241             :           which obtained via fast binary file I/O from disk.
   74242             :        */
   74243             :        // SgTypeFixed( SgTypeFixedStorageClass& source );
   74244             : 
   74245             : 
   74246             : 
   74247             : 
   74248             : 
   74249             :  // JH (10/24/2005): methods added to support the ast file IO
   74250             :     private:
   74251             : 
   74252             :       /* name AST Memory Allocation Support Functions
   74253             :           \brief Memory allocations support....
   74254             : 
   74255             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   74256             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   74257             :           and support the AST File I/O Mechanism.
   74258             :        */
   74259             :       /* */
   74260             : 
   74261             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   74262             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   74263             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   74264             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   74265             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   74266             :           a correspinding one in the AST_FILE_IO class!
   74267             :        */
   74268             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   74269             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   74270             :       /* \brief Typedef used for low level memory access.
   74271             :        */
   74272             :        // typedef unsigned char* TestType;
   74273             : 
   74274             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   74275             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   74276             :       /* \brief Typedef used to hold memory addresses as values.
   74277             :        */
   74278             :        // typedef unsigned long  AddressType;
   74279             : 
   74280             : 
   74281             : 
   74282             :        // necessary, to have direct access to the p_freepointer and the private methods !
   74283             :       /*! \brief friend class declaration to support AST File I/O */
   74284             :           friend class AST_FILE_IO;
   74285             : 
   74286             :       /*! \brief friend class declaration to support AST File I/O */
   74287             :           friend class SgTypeFixedStorageClass;
   74288             : 
   74289             :       /*! \brief friend class declaration to support AST File I/O */
   74290             :           friend class AstSpecificDataManagingClass;
   74291             : 
   74292             :       /*! \brief friend class declaration to support AST File I/O */
   74293             :           friend class AstSpecificDataManagingClassStorageClass;
   74294             :     public:
   74295             :       /*! \brief IR node constructor to support AST File I/O */
   74296             :           SgTypeFixed( const SgTypeFixedStorageClass& source );
   74297             : 
   74298             :  // private: // JJW hack
   74299             :        /*
   74300             :           name AST Memory Allocation Support Variables
   74301             :           Memory allocations support variables 
   74302             : 
   74303             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   74304             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   74305             :           and support the AST File I/O Mechanism.
   74306             :        */
   74307             :       /* */
   74308             : 
   74309             :     public:
   74310             : 
   74311             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   74312             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   74313             :       // virtual SgNode* addRegExpAttribute();
   74314             :       /*! \brief Support for AST matching using regular expression.
   74315             : 
   74316             :           This support is incomplete and the subject of current research to define 
   74317             :           RegEx trees to support inexact matching.
   74318             :        */
   74319             :           SgTypeFixed* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   74320             : 
   74321             : // *** COMMON CODE SECTION ENDS HERE ***
   74322             : 
   74323             : 
   74324             : // End of memberFunctionString
   74325             : // Start of memberFunctionString
   74326             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   74327             : 
   74328             :      // the generated cast function
   74329             :      // friend ROSE_DLL_API SgTypeFixed* isSgTypeFixed ( SgNode* s );
   74330             : 
   74331             :           typedef SgType base_node_type;
   74332             : 
   74333             : 
   74334             : // End of memberFunctionString
   74335             : // Start of memberFunctionString
   74336             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   74337             : 
   74338             :        // SgName get_mangled ( SgUnparse_Info & info );
   74339             : 
   74340             :       //! Mangled name support for unparser support
   74341             :        // SgName get_mangled ( SgUnparse_Info & info );
   74342             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   74343             :           virtual SgName get_mangled (void) const override;
   74344             : 
   74345             : 
   74346             : 
   74347             : // End of memberFunctionString
   74348             : 
   74349             :      public: 
   74350             :          SgExpression* get_scale() const;
   74351             :          void set_scale(SgExpression* scale);
   74352             : 
   74353             :      public: 
   74354             :          SgExpression* get_fraction() const;
   74355             :          void set_fraction(SgExpression* fraction);
   74356             : 
   74357             : 
   74358             :      public: 
   74359             :          virtual ~SgTypeFixed();
   74360             : 
   74361             : 
   74362             :      public: 
   74363             :          SgTypeFixed(SgExpression* scale = NULL, SgExpression* fraction = NULL); 
   74364             : 
   74365             :     protected:
   74366             : // Start of memberFunctionString
   74367             : SgExpression* p_scale;
   74368             :           
   74369             : // End of memberFunctionString
   74370             : // Start of memberFunctionString
   74371             : SgExpression* p_fraction;
   74372             :           
   74373             : // End of memberFunctionString
   74374             : 
   74375             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeFixed>;
   74376             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeFixed, SgExpression*,&SgTypeFixed::p_scale>;
   74377             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeFixed, SgExpression*,&SgTypeFixed::p_fraction>;
   74378             : 
   74379             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74380             : 
   74381             : 
   74382             :    };
   74383             : #endif
   74384             : 
   74385             : // postdeclarations for SgTypeFixed
   74386             : 
   74387             : /* #line 74388 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74388             : 
   74389             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   74390             : 
   74391             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74392             : 
   74393             : 
   74394             : /* #line 74395 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74395             : 
   74396             : 
   74397             : 
   74398             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74399             : 
   74400             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   74401             : //      This code is automatically generated for each 
   74402             : //      terminal and non-terminal within the defined 
   74403             : //      grammar.  There is a simple way to change the 
   74404             : //      code to fix bugs etc.  See the ROSE README file
   74405             : //      for directions.
   74406             : 
   74407             : // tps: (02/22/2010): Adding DLL export requirements
   74408             : #include "rosedll.h"
   74409             : 
   74410             : // predeclarations for SgAutoType
   74411             : 
   74412             : /* #line 74413 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74413             : 
   74414             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   74415             : 
   74416             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74417             : 
   74418             : #if 1
   74419             : // Class Definition for SgAutoType
   74420             : class ROSE_DLL_API SgAutoType  : public SgType
   74421             :    {
   74422             :      public:
   74423             : 
   74424             : 
   74425             : /* #line 74426 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74426             : 
   74427             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   74428             : // Start of memberFunctionString
   74429             : /* #line 290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   74430             : 
   74431             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   74432             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   74433             :        // own data member and associated access function.
   74434             :        // static SgAutoType* get_builtin_type();
   74435             : 
   74436             :        // DQ (6/18/2007): This does not appear to be used anywhere in ROSE.  It is no longer required
   74437             :        // since we don't store the type explicitly anymore except in a few IR nodes which have there
   74438             :        // own data member and associated access function.
   74439             :        // static void set_builtin_type(SgAutoType* builtin_type);
   74440             : 
   74441             :       //! more sophisticated version for more complex types like SgAutoType (types whose constructors take parameters)
   74442             :        // DQ (10/4/2010): Added support for optional Fotran type_kind specification.
   74443             :        // static SgAutoType* createType(SgNode* node = NULL);
   74444             :           static SgAutoType* createType(SgNode* node = NULL, SgExpression* optional_fortran_type_kind = NULL);
   74445             : 
   74446             : 
   74447             : // End of memberFunctionString
   74448             : // Start of memberFunctionString
   74449             : /* #line 401 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   74450             : 
   74451             :           SgAutoType ( const SgAutoType & X );
   74452             : //        virtual SgName get_mangled(void) const;
   74453             : //        virtual SgName get_name() const;
   74454             : 
   74455             : 
   74456             : // End of memberFunctionString
   74457             : // Start of memberFunctionString
   74458             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   74459             : 
   74460             : // *** COMMON CODE SECTION BEGINS HERE ***
   74461             : 
   74462             :     public:
   74463             : 
   74464             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   74465             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   74466             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   74467             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   74468             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   74469             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   74470             : 
   74471             :       /*! \brief returns a string representing the class name */
   74472             :           virtual std::string class_name() const override;
   74473             : 
   74474             :       /*! \brief returns new style SageIII enum values */
   74475             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   74476             : 
   74477             :       /*! \brief static variant value */
   74478             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   74479             :        // static const VariantT static_variant = V_SgAutoType;
   74480             :           enum { static_variant = V_SgAutoType };
   74481             : 
   74482             :        /* the generated cast function */
   74483             :       /*! \brief Casts pointer from base class to derived class */
   74484             :           ROSE_DLL_API friend       SgAutoType* isSgAutoType(       SgNode * s );
   74485             : 
   74486             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   74487             :           ROSE_DLL_API friend const SgAutoType* isSgAutoType( const SgNode * s );
   74488             : 
   74489             :      // ******************************************
   74490             :      // * Memory Pool / New / Delete
   74491             :      // ******************************************
   74492             : 
   74493             :      public:
   74494             :           /// \private
   74495             :           static const unsigned pool_size; //
   74496             :           /// \private
   74497             :           static std::vector<unsigned char *> pools; //
   74498             :           /// \private
   74499             :           static SgAutoType * next_node; // 
   74500             : 
   74501             :           /// \private
   74502             :           static unsigned long initializeStorageClassArray(SgAutoTypeStorageClass *); //
   74503             : 
   74504             :           /// \private
   74505             :           static void clearMemoryPool(); //
   74506             :           static void deleteMemoryPool(); //
   74507             : 
   74508             :           /// \private
   74509             :           static void extendMemoryPoolForFileIO(); //
   74510             : 
   74511             :           /// \private
   74512             :           static SgAutoType * getPointerFromGlobalIndex(unsigned long); //
   74513             :           /// \private
   74514             :           static SgAutoType * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   74515             : 
   74516             :           /// \private
   74517             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   74518             :           /// \private
   74519             :           static void resetValidFreepointers(); //
   74520             :           /// \private
   74521             :           static unsigned long getNumberOfLastValidPointer(); //
   74522             : 
   74523             : 
   74524             : #if defined(INLINE_FUNCTIONS)
   74525             :       /*! \brief returns pointer to newly allocated IR node */
   74526             :           inline void *operator new (size_t size);
   74527             : #else
   74528             :       /*! \brief returns pointer to newly allocated IR node */
   74529             :           void *operator new (size_t size);
   74530             : #endif
   74531             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   74532             :           void operator delete (void* pointer, size_t size);
   74533             : 
   74534             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   74535          28 :           void operator delete (void* pointer)
   74536             :              {
   74537             :             // This is the generated delete operator...
   74538          28 :                SgAutoType::operator delete (pointer,sizeof(SgAutoType));
   74539             :              }
   74540             : 
   74541             :       /*! \brief Returns the total number of IR nodes of this type */
   74542             :           static size_t numberOfNodes();
   74543             : 
   74544             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   74545             :           static size_t memoryUsage();
   74546             : 
   74547             :       // End of scope which started in IR nodes specific code 
   74548             :       /* */
   74549             : 
   74550             :       /* name Internal Functions
   74551             :           \brief Internal functions ... incomplete-documentation
   74552             : 
   74553             :           These functions have been made public as part of the design, but they are suggested for internal use 
   74554             :           or by particularly knowledgeable users for specialized tools or applications.
   74555             : 
   74556             :           \internal We could not make these private because they are required by user for special purposes. And 
   74557             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   74558             :          
   74559             :        */
   74560             : 
   74561             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   74562             :        // overridden in every class by *generated* implementation
   74563             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   74564             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   74565             :        // MS: 06/28/02 container of names of variables or container indices 
   74566             :        // used used in the traversal to access AST successor nodes
   74567             :        // overridden in every class by *generated* implementation
   74568             :       /*! \brief container of names of variables or container indices used used in the traversal
   74569             :           to access AST successor nodes overridden in every class by *generated* implementation */
   74570             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   74571             : 
   74572             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   74573             :        // than all the vector copies. The implementation for these functions is generated for each class.
   74574             :       /*! \brief return number of children in the traversal successor list */
   74575             :           virtual size_t get_numberOfTraversalSuccessors() override;
   74576             :       /*! \brief index-based access to traversal successors by index number */
   74577             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   74578             :       /*! \brief index-based access to traversal successors by child node */
   74579             :           virtual size_t get_childIndex(SgNode *child) override;
   74580             : 
   74581             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   74582             :        // MS: 08/16/2002 method for generating RTI information
   74583             :       /*! \brief return C++ Runtime-Time-Information */
   74584             :           virtual RTIReturnType roseRTI() override;
   74585             : #endif
   74586             :       /* */
   74587             : 
   74588             : 
   74589             : 
   74590             :       /* name Deprecated Functions
   74591             :           \brief Deprecated functions ... incomplete-documentation
   74592             : 
   74593             :           These functions have been deprecated from use.
   74594             :        */
   74595             :       /* */
   74596             : 
   74597             :       /*! returns a C style string (char*) representing the class name */
   74598             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   74599             : 
   74600             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   74601             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   74602             : #if 0
   74603             :       /*! returns old style Sage II enum values */
   74604             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   74605             :       /*! returns old style Sage II enum values */
   74606             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   74607             : #endif
   74608             :       /* */
   74609             : 
   74610             : 
   74611             : 
   74612             : 
   74613             :      public:
   74614             :       /* name Traversal Support Functions
   74615             :           \brief Traversal support functions ... incomplete-documentation
   74616             : 
   74617             :           These functions have been made public as part of the design, but they are suggested for internal use 
   74618             :           or by particularly knowledgable users for specialized tools or applications.
   74619             :        */
   74620             :       /* */
   74621             : 
   74622             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   74623             :        // (inferior to ROSE traversal mechanism, experimental).
   74624             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   74625             :        */
   74626             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   74627             : 
   74628             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   74629             :       /*! \brief support for the classic visitor pattern done in GoF */
   74630             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   74631             : 
   74632             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   74633             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   74634             :        */
   74635             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   74636             : 
   74637             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   74638             :        */
   74639             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   74640             : 
   74641             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   74642             :        // This traversal helps support internal tools that call static member functions.
   74643             :        // note: this function operates on the memory pools.
   74644             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   74645             :        */
   74646             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   74647             :       /* */
   74648             : 
   74649             : 
   74650             :      public:
   74651             :       /* name Memory Allocation Functions
   74652             :           \brief Memory allocations functions ... incomplete-documentation
   74653             : 
   74654             :           These functions have been made public as part of the design, but they are suggested for internal use 
   74655             :           or by particularly knowledgable users for specialized tools or applications.
   74656             :        */
   74657             :       /* */
   74658             : 
   74659             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   74660             : 
   74661             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   74662             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   74663             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   74664             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   74665             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   74666             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   74667             :           being used with the AST File I/O mechanism.
   74668             :        */
   74669             :           virtual bool isInMemoryPool() override;
   74670             : 
   74671             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   74672             : 
   74673             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   74674             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   74675             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   74676             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   74677             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   74678             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   74679             :           being used with the AST File I/O mechanism.
   74680             :        */
   74681             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   74682             : 
   74683             :       // DQ (4/30/2006): Modified to be a const function.
   74684             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   74685             : 
   74686             :           This functions is part of general support for many possible tools to operate 
   74687             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   74688             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   74689             :           less than the set of pointers used by the AST file I/O. This is part of
   74690             :           work implemented by Andreas, and support tools such as the AST graph generation.
   74691             : 
   74692             :           \warning This function can return unexpected data members and thus the 
   74693             :                    order and the number of elements is unpredicable and subject 
   74694             :                    to change.
   74695             : 
   74696             :           \returns STL vector of pairs of SgNode* and strings
   74697             :        */
   74698             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   74699             : 
   74700             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   74701             : 
   74702             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   74703             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   74704             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   74705             : 
   74706             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   74707             :                    and subject to change.
   74708             :        */
   74709             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   74710             : 
   74711             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   74712             : 
   74713             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   74714             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   74715             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   74716             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   74717             : 
   74718             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   74719             : 
   74720             :           \returns long
   74721             :        */
   74722             :           virtual long getChildIndex( SgNode* childNode ) const override;
   74723             : 
   74724             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   74725             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   74726             :       /* \brief Constructor for use by AST File I/O Mechanism
   74727             : 
   74728             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   74729             :           which obtained via fast binary file I/O from disk.
   74730             :        */
   74731             :        // SgAutoType( SgAutoTypeStorageClass& source );
   74732             : 
   74733             : 
   74734             : 
   74735             : 
   74736             : 
   74737             :  // JH (10/24/2005): methods added to support the ast file IO
   74738             :     private:
   74739             : 
   74740             :       /* name AST Memory Allocation Support Functions
   74741             :           \brief Memory allocations support....
   74742             : 
   74743             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   74744             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   74745             :           and support the AST File I/O Mechanism.
   74746             :        */
   74747             :       /* */
   74748             : 
   74749             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   74750             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   74751             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   74752             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   74753             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   74754             :           a correspinding one in the AST_FILE_IO class!
   74755             :        */
   74756             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   74757             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   74758             :       /* \brief Typedef used for low level memory access.
   74759             :        */
   74760             :        // typedef unsigned char* TestType;
   74761             : 
   74762             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   74763             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   74764             :       /* \brief Typedef used to hold memory addresses as values.
   74765             :        */
   74766             :        // typedef unsigned long  AddressType;
   74767             : 
   74768             : 
   74769             : 
   74770             :        // necessary, to have direct access to the p_freepointer and the private methods !
   74771             :       /*! \brief friend class declaration to support AST File I/O */
   74772             :           friend class AST_FILE_IO;
   74773             : 
   74774             :       /*! \brief friend class declaration to support AST File I/O */
   74775             :           friend class SgAutoTypeStorageClass;
   74776             : 
   74777             :       /*! \brief friend class declaration to support AST File I/O */
   74778             :           friend class AstSpecificDataManagingClass;
   74779             : 
   74780             :       /*! \brief friend class declaration to support AST File I/O */
   74781             :           friend class AstSpecificDataManagingClassStorageClass;
   74782             :     public:
   74783             :       /*! \brief IR node constructor to support AST File I/O */
   74784             :           SgAutoType( const SgAutoTypeStorageClass& source );
   74785             : 
   74786             :  // private: // JJW hack
   74787             :        /*
   74788             :           name AST Memory Allocation Support Variables
   74789             :           Memory allocations support variables 
   74790             : 
   74791             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   74792             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   74793             :           and support the AST File I/O Mechanism.
   74794             :        */
   74795             :       /* */
   74796             : 
   74797             :     public:
   74798             : 
   74799             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   74800             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   74801             :       // virtual SgNode* addRegExpAttribute();
   74802             :       /*! \brief Support for AST matching using regular expression.
   74803             : 
   74804             :           This support is incomplete and the subject of current research to define 
   74805             :           RegEx trees to support inexact matching.
   74806             :        */
   74807             :           SgAutoType* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   74808             : 
   74809             : // *** COMMON CODE SECTION ENDS HERE ***
   74810             : 
   74811             : 
   74812             : // End of memberFunctionString
   74813             : // Start of memberFunctionString
   74814             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   74815             : 
   74816             :      // the generated cast function
   74817             :      // friend ROSE_DLL_API SgAutoType* isSgAutoType ( SgNode* s );
   74818             : 
   74819             :           typedef SgType base_node_type;
   74820             : 
   74821             : 
   74822             : // End of memberFunctionString
   74823             : // Start of memberFunctionString
   74824             : /* #line 338 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Type.code" */
   74825             : 
   74826             :        // SgName get_mangled ( SgUnparse_Info & info );
   74827             : 
   74828             :       //! Mangled name support for unparser support
   74829             :        // SgName get_mangled ( SgUnparse_Info & info );
   74830             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info.
   74831             :           virtual SgName get_mangled (void) const override;
   74832             : 
   74833             : 
   74834             : 
   74835             : // End of memberFunctionString
   74836             : 
   74837             : 
   74838             :      public: 
   74839             :          virtual ~SgAutoType();
   74840             : 
   74841             : 
   74842             :      public: 
   74843             :          SgAutoType(); 
   74844             : 
   74845             :     protected:
   74846             : 
   74847             :     friend struct Rose::Traits::generated::describe_node_t<SgAutoType>;
   74848             : 
   74849             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74850             : 
   74851             : 
   74852             :    };
   74853             : #endif
   74854             : 
   74855             : // postdeclarations for SgAutoType
   74856             : 
   74857             : /* #line 74858 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74858             : 
   74859             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   74860             : 
   74861             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74862             : 
   74863             : 
   74864             : /* #line 74865 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74865             : 
   74866             : 
   74867             : 
   74868             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74869             : 
   74870             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   74871             : //      This code is automatically generated for each 
   74872             : //      terminal and non-terminal within the defined 
   74873             : //      grammar.  There is a simple way to change the 
   74874             : //      code to fix bugs etc.  See the ROSE README file
   74875             : //      for directions.
   74876             : 
   74877             : // tps: (02/22/2010): Adding DLL export requirements
   74878             : #include "rosedll.h"
   74879             : 
   74880             : // predeclarations for SgLocatedNode
   74881             : 
   74882             : /* #line 74883 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74883             : 
   74884             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   74885             : 
   74886             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   74887             : 
   74888             : #if 1
   74889             : // Class Definition for SgLocatedNode
   74890             : class ROSE_DLL_API SgLocatedNode  : public SgNode
   74891             :    {
   74892             :      public:
   74893             : 
   74894             : 
   74895             : /* #line 74896 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   74896             : 
   74897             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   74898             : // Start of memberFunctionString
   74899             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
   74900             : 
   74901             :      public:
   74902             : 
   74903             : #if 0
   74904             :       //! This enum type is used to hold values controling if new comments/directives are added
   74905             :       //! to the front of back of the AttachedPreprocessingInfoType (typedef to a list of
   74906             :       //! PreprocessorInfo objects).
   74907             :           enum PositionOfPreprocessingInfoInListType
   74908             :              {
   74909             :                defaultValue                   = 0, // let the zero value be an error value
   74910             :                prependPreprocessingInfoToList = 1, // Prepend the new PreprocessingInfo object to the list
   74911             :                appendPreprocessingInfoToList  = 2  // Append the new PreprocessingInfo object to the list
   74912             :              };
   74913             : #endif
   74914             : 
   74915             :        // ~SgLocatedNode();
   74916             : 
   74917             :        // void setlineNumber(unsigned long new_line);
   74918             : 
   74919             :        // virtual bool _print(int depth) const; /* prints file info */
   74920             : 
   74921             :        // DQ (8/20/2004): Make this depricated since we should remove this (or should we?)
   74922             :        // If we want to preserve it we should make it a member function of SgNode?
   74923             :        // Function added by DQ (7/22/2001)
   74924             :        // const char* getFileName() ROSE_DEPRECATED_FUNCTION;
   74925             :           const std::string & getFilenameString() const;
   74926             : 
   74927             :      protected:
   74928             :      // void delete_file_info();
   74929             :      // void directives(ostream& os);
   74930             :         void post_construction_initialization() override;
   74931             : 
   74932             :      private:
   74933             :           SgLocatedNode( const SgLocatedNode & X ); /* until we know what to do with it */
   74934             : 
   74935             :      public:
   74936             :        // [MK] Member function to
   74937             :        // ! attach PreprocessingInfo object to the node. It can only prepend or append the info. to the existing list of preprocessing info.
   74938             :        // void addToAttachedPreprocessingInfo(PreprocessingInfo *prepInfoPtr);
   74939             :           void addToAttachedPreprocessingInfo( PreprocessingInfo *prepInfoPtr, PreprocessingInfo::RelativePositionType locationInList = PreprocessingInfo::after );
   74940             : 
   74941             :         // Liao 1/27/2015
   74942             :         //! Insert prepInfo After (or before if last parameter is false) an anchor info ptr  in the list of preprocessing info attached to the current node. This is useful to insert things in the middle.
   74943             :           void insertToAttachedPreprocessingInfo( PreprocessingInfo *prepInfoPtr, PreprocessingInfo* anchorInfoPtr, bool insertAfter = true);
   74944             : 
   74945             :        // DQ (2/6/2003):
   74946             :        /*! \brief Interface function to implement original SAGE interface to
   74947             :                   SgFile_Info objects.
   74948             : 
   74949             :           This function is added explicitly to provide the older interface to the file_info
   74950             :           pointer which has been removed and replaced with two Sg_File_Info pointers to mark the
   74951             :           start and end of the located node object (previously we only stored the starting location).
   74952             :           This function still returns the starting location of the construct.
   74953             :         */
   74954             :           virtual Sg_File_Info* get_file_info() const override;
   74955             : 
   74956             :       //! Access function calls set_startingConstruct(Sg_File_Info*) member function
   74957             :           virtual void set_file_info(Sg_File_Info* X);
   74958             : 
   74959             :       /*! \brief Allow IR nodes (mostly SgLocatedNode) to be marked as compiler generated.
   74960             : 
   74961             :           Since the flag for isCompilerGenerated is stored in the Sg_File_Info, and because there
   74962             :           are up to three of these for the source position information to be comprehensive, this
   74963             :           function permits a mechanism to have them be set uniformally.  Warnings are issued if
   74964             :           they are not set uniformally.
   74965             : 
   74966             :           \internal This function marks the Sg_File_Info objects that must already be present.
   74967             :        */
   74968             :           void setCompilerGenerated ();
   74969             :           void unsetCompilerGenerated ();
   74970             : 
   74971             :        // DQ (7/5/2014): Added interface function to simplify code.
   74972             :       /*! \brief Simple test for if this is a compiler generated node.
   74973             : 
   74974             :           This is a simpler interface to check the settings of this associated flag in the multiple Sg_File_Info objects.
   74975             : 
   74976             :           \internal This function also checks the consistancy of the setting in the different Sg_File_Info objects.
   74977             :        */
   74978             :           bool isCompilerGenerated () const;
   74979             : 
   74980             :       /*! \brief Allow IR nodes (mostly SgLocatedNode) to be marked as a transformation.
   74981             : 
   74982             :           Since the flag for isTransformation is stored in the Sg_File_Info, and because there
   74983             :           are up to three of these for the source position information to be comprehensive, this
   74984             :           function permits a mechanism to have them be set uniformally.  Warnings are issued if
   74985             :           they are not set uniformally.
   74986             : 
   74987             :           \internal This function marks the Sg_File_Info objects that must already be present.
   74988             :        */
   74989             :           void setTransformation ();
   74990             :           void unsetTransformation ();
   74991             : 
   74992             :        // DQ (12/4/2014): Added interface function to simplify code.
   74993             :       /*! \brief Simple test for if this is a part of a transformation.
   74994             : 
   74995             :           This is a simpler interface to check the settings of this associated flag in the multiple Sg_File_Info objects.
   74996             : 
   74997             :           \internal This function also checks the consistancy of the setting in the different Sg_File_Info objects.
   74998             :        */
   74999             :           bool isTransformation () const;
   75000             : 
   75001             :       /*! \brief Allow IR nodes (mostly SgLocatedNode) to be marked as front-end specific (generated by the front-end to support a specific backend compiler; e.g. GNU gcc and g++).
   75002             : 
   75003             :           Since the flag for isFrontendSpecific is stored in the Sg_File_Info, and because there
   75004             :           are up to three of these for the source position information to be comprehensive, this
   75005             :           function permits a mechanism to have them be set uniformally.  Warnings are issued if
   75006             :           they are not set uniformally.
   75007             : 
   75008             :           \internal This function marks the Sg_File_Info objects that must already be present.
   75009             :        */
   75010             :           void setFrontendSpecific ();
   75011             :           void unsetFrontendSpecific ();
   75012             : 
   75013             :        // DQ (12/21/2019): Added interface function to simplify code.
   75014             :       /*! \brief Simple test for if this is a frontend specific IR node.
   75015             : 
   75016             :           This is a simpler interface to check the settings of this associated flag in the multiple Sg_File_Info objects.
   75017             : 
   75018             :           \internal This function also checks the consistancy of the setting in the different Sg_File_Info objects.
   75019             :        */
   75020             :           bool isFrontendSpecific () const;
   75021             : 
   75022             :       /*! \brief Allow IR nodes (mostly SgLocatedNode) to be marked as shared.
   75023             : 
   75024             :           Since the flag for isShared is stored in the Sg_File_Info, and because there
   75025             :           are up to three of these for the source position information to be comprehensive, this
   75026             :           function permits a mechanism to have them be set uniformally.  Warnings are issued if
   75027             :           they are not set uniformally.
   75028             : 
   75029             :           \internal This function marks the Sg_File_Info objects that must already be present.
   75030             :        */
   75031             :           void setShared();
   75032             :           void unsetShared();
   75033             : 
   75034             :        // DQ (12/21/2019): Added interface function to simplify code.
   75035             :       /*! \brief Simple test for if this is a shared IR node.
   75036             : 
   75037             :           This is a simpler interface to check the settings of this associated flag in the multiple Sg_File_Info objects.
   75038             : 
   75039             :           \internal This function also checks the consistancy of the setting in the different Sg_File_Info objects.
   75040             :        */
   75041             :           bool isShared () const;
   75042             : 
   75043             :       /*! \brief Allow IR nodes (mostly SgLocatedNode) to be marked as to when the information was unavilable in the front-end (even if it typically is there are special cases).
   75044             : 
   75045             :           Since the flag for isSourcePositionUnavailableInFrontend is stored in the Sg_File_Info, and because there
   75046             :           are up to three of these for the source position information to be comprehensive, this
   75047             :           function permits a mechanism to have them be set uniformally.  Warnings are issued if
   75048             :           they are not set uniformally.
   75049             : 
   75050             :           \internal This function marks the Sg_File_Info objects that must already be present.
   75051             :        */
   75052             :           void setSourcePositionUnavailableInFrontend();
   75053             :           void unsetSourcePositionUnavailableInFrontend();
   75054             : 
   75055             :       /*! \brief Allow IR nodes (mostly SgLocatedNode) to be marked as to when the information was unavilable in the front-end (even if it typically is there are special cases).
   75056             : 
   75057             :           Since the flag for isOutputInCodeGeneration is stored in the Sg_File_Info, and because there
   75058             :           are up to three of these for the source position information to be comprehensive, this
   75059             :           function permits a mechanism to have them be set uniformally.  Warnings are issued if
   75060             :           they are not set uniformally.
   75061             : 
   75062             :           \internal This function marks the Sg_File_Info objects that must already be present.
   75063             :        */
   75064             :           void setOutputInCodeGeneration();
   75065             :           void unsetOutputInCodeGeneration();
   75066             : 
   75067             :       /*! \brief Allow IR nodes (mostly SgLocatedNode) to be queried for there physical file ID.
   75068             : 
   75069             :           Since the value for the physical_file_id is stored in the Sg_File_Info, and because there
   75070             :           are up to three of these for the source position information to be comprehensive, this
   75071             :           function permits a mechanism to have them be queried uniformally.  Warnings are issued if
   75072             :           they are not set uniformally.
   75073             : 
   75074             :           \internal This function marks the Sg_File_Info objects that must already be present.
   75075             :        */
   75076             :           int get_physical_file_id();
   75077             : 
   75078             : #if ALT_FIXUP_COPY
   75079             :        // DQ (11/7/2007): These need to be called separately (see documentation)
   75080             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
   75081             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
   75082             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
   75083             : #else
   75084             :        // DQ (11/1/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
   75085             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
   75086             : #endif
   75087             : 
   75088             :       /*! \brief Computes the number of nodes in the defined subtree of the AST.
   75089             : 
   75090             :           This function is used as a basis for steps in AST isomophism tests.
   75091             :        */
   75092             :        // PC (7/9/2009): This function is not defined.
   75093             :        // size_t numberOfNodesInSubtree();
   75094             : 
   75095             :      public:
   75096             : 
   75097             : // #ifndef ROSE_USE_SWIG_SUPPORT
   75098             : #ifndef SWIG
   75099             :        // [MK] Member function to access attached preprocessing info
   75100             :           AttachedPreprocessingInfoType*& getAttachedPreprocessingInfo(void);
   75101             : #endif
   75102             : 
   75103             :        // DQ (4/10/2006): This is replaced by a better interface for attributes.
   75104             :        // DQ (1/2/2006): Added attribute mechanism to SgLocatedNode
   75105             :        // AstAttributeMechanism & attribute();
   75106             : 
   75107             :        // DQ (12/30/2009): This is moved to be a member function instead of a local inlined
   75108             :        // function in global scope.  This implementation better supports the optional use
   75109             :        // of smaller separate files generated by ROSETTA. The name is changed to both be
   75110             :        // more clear and match the naming convention in ROSE.
   75111             :        // inline Sg_File_Info* New_File_Info( SgLocatedNode *p)
   75112             :        // Sg_File_Info* New_File_Info( SgLocatedNode *p);
   75113             :           Sg_File_Info* generateMatchingFileInfo();
   75114             : 
   75115             : 
   75116             : 
   75117             : // End of memberFunctionString
   75118             : // Start of memberFunctionString
   75119             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   75120             : 
   75121             : 
   75122             :      /* name Persistant Attribute Mechanism
   75123             : 
   75124             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   75125             :          multiple passes. Note that these attributes are persistant in that they are preserved
   75126             :          if the AST is written out to a file and read in from a file.  However, virtual function
   75127             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   75128             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   75129             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   75130             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   75131             :          access is required, however mostly only internal tools use this lower level support).
   75132             : 
   75133             :          \internal This used to be a public data member, but has been changed to be a protected
   75134             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   75135             :          but some of the names and the syntax for calling the interface have changed. The
   75136             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   75137             :       */
   75138             :      /* */
   75139             :      //! Add a new attribute represented by the named string.
   75140             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   75141             :      //! Returns attribute of name 's'.
   75142             :          virtual AstAttribute* getAttribute(std::string s) const override;
   75143             :      //! Replace existing attribute of name 's' with new AstAttribute.
   75144             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   75145             :      /*! \brief This is a wrapper function with the following semantics:
   75146             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   75147             :          otherwise \b updateAttribute(s,a); is called.
   75148             :       */
   75149             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   75150             :      //! Remove attribute of name 's' if present.
   75151             :          virtual void removeAttribute(std::string s) override;
   75152             :      //! Tests if attribute of name 's' is present.
   75153             :          virtual bool attributeExists(std::string s) const override;
   75154             :      //! Returns the number of attributes on this IR node.
   75155             :          virtual int numberOfAttributes() const override;
   75156             : 
   75157             :      /*! \fn AstAttributeMechanism* SgLocatedNode::get_attributeMechanism() const;
   75158             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   75159             :                 a pointer to it is returned, else error.
   75160             : 
   75161             :          This is an access function used for getting the interally held pointer to a valid
   75162             :          AstAttributeMechanism. It provides access to lower level functionality of the
   75163             :          AstAttributeMechanism, put is mostly of use to internal tools.
   75164             :       */
   75165             :      /*! \fn void SgLocatedNode::set_attributeMechanism(AstAttributeMechanism* a);
   75166             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   75167             : 
   75168             :          This is an access function used for setting the interally held pointer to a valid
   75169             :          AstAttributeMechanism.
   75170             :       */
   75171             :      /* */
   75172             : 
   75173             : 
   75174             : 
   75175             : 
   75176             : // End of memberFunctionString
   75177             : // Start of memberFunctionString
   75178             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   75179             : 
   75180             : // *** COMMON CODE SECTION BEGINS HERE ***
   75181             : 
   75182             :     public:
   75183             : 
   75184             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   75185             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   75186             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   75187             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   75188             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   75189             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   75190             : 
   75191             :       /*! \brief returns a string representing the class name */
   75192             :           virtual std::string class_name() const override;
   75193             : 
   75194             :       /*! \brief returns new style SageIII enum values */
   75195             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   75196             : 
   75197             :       /*! \brief static variant value */
   75198             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   75199             :        // static const VariantT static_variant = V_SgLocatedNode;
   75200             :           enum { static_variant = V_SgLocatedNode };
   75201             : 
   75202             :        /* the generated cast function */
   75203             :       /*! \brief Casts pointer from base class to derived class */
   75204             :           ROSE_DLL_API friend       SgLocatedNode* isSgLocatedNode(       SgNode * s );
   75205             : 
   75206             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   75207             :           ROSE_DLL_API friend const SgLocatedNode* isSgLocatedNode( const SgNode * s );
   75208             : 
   75209             :      // ******************************************
   75210             :      // * Memory Pool / New / Delete
   75211             :      // ******************************************
   75212             : 
   75213             :      public:
   75214             :           /// \private
   75215             :           static const unsigned pool_size; //
   75216             :           /// \private
   75217             :           static std::vector<unsigned char *> pools; //
   75218             :           /// \private
   75219             :           static SgLocatedNode * next_node; // 
   75220             : 
   75221             :           /// \private
   75222             :           static unsigned long initializeStorageClassArray(SgLocatedNodeStorageClass *); //
   75223             : 
   75224             :           /// \private
   75225             :           static void clearMemoryPool(); //
   75226             :           static void deleteMemoryPool(); //
   75227             : 
   75228             :           /// \private
   75229             :           static void extendMemoryPoolForFileIO(); //
   75230             : 
   75231             :           /// \private
   75232             :           static SgLocatedNode * getPointerFromGlobalIndex(unsigned long); //
   75233             :           /// \private
   75234             :           static SgLocatedNode * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   75235             : 
   75236             :           /// \private
   75237             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   75238             :           /// \private
   75239             :           static void resetValidFreepointers(); //
   75240             :           /// \private
   75241             :           static unsigned long getNumberOfLastValidPointer(); //
   75242             : 
   75243             : 
   75244             : #if defined(INLINE_FUNCTIONS)
   75245             :       /*! \brief returns pointer to newly allocated IR node */
   75246             :           inline void *operator new (size_t size);
   75247             : #else
   75248             :       /*! \brief returns pointer to newly allocated IR node */
   75249             :           void *operator new (size_t size);
   75250             : #endif
   75251             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   75252             :           void operator delete (void* pointer, size_t size);
   75253             : 
   75254             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   75255           0 :           void operator delete (void* pointer)
   75256             :              {
   75257             :             // This is the generated delete operator...
   75258           0 :                SgLocatedNode::operator delete (pointer,sizeof(SgLocatedNode));
   75259             :              }
   75260             : 
   75261             :       /*! \brief Returns the total number of IR nodes of this type */
   75262             :           static size_t numberOfNodes();
   75263             : 
   75264             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   75265             :           static size_t memoryUsage();
   75266             : 
   75267             :       // End of scope which started in IR nodes specific code 
   75268             :       /* */
   75269             : 
   75270             :       /* name Internal Functions
   75271             :           \brief Internal functions ... incomplete-documentation
   75272             : 
   75273             :           These functions have been made public as part of the design, but they are suggested for internal use 
   75274             :           or by particularly knowledgeable users for specialized tools or applications.
   75275             : 
   75276             :           \internal We could not make these private because they are required by user for special purposes. And 
   75277             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   75278             :          
   75279             :        */
   75280             : 
   75281             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   75282             :        // overridden in every class by *generated* implementation
   75283             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   75284             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   75285             :        // MS: 06/28/02 container of names of variables or container indices 
   75286             :        // used used in the traversal to access AST successor nodes
   75287             :        // overridden in every class by *generated* implementation
   75288             :       /*! \brief container of names of variables or container indices used used in the traversal
   75289             :           to access AST successor nodes overridden in every class by *generated* implementation */
   75290             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   75291             : 
   75292             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   75293             :        // than all the vector copies. The implementation for these functions is generated for each class.
   75294             :       /*! \brief return number of children in the traversal successor list */
   75295             :           virtual size_t get_numberOfTraversalSuccessors() override;
   75296             :       /*! \brief index-based access to traversal successors by index number */
   75297             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   75298             :       /*! \brief index-based access to traversal successors by child node */
   75299             :           virtual size_t get_childIndex(SgNode *child) override;
   75300             : 
   75301             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   75302             :        // MS: 08/16/2002 method for generating RTI information
   75303             :       /*! \brief return C++ Runtime-Time-Information */
   75304             :           virtual RTIReturnType roseRTI() override;
   75305             : #endif
   75306             :       /* */
   75307             : 
   75308             : 
   75309             : 
   75310             :       /* name Deprecated Functions
   75311             :           \brief Deprecated functions ... incomplete-documentation
   75312             : 
   75313             :           These functions have been deprecated from use.
   75314             :        */
   75315             :       /* */
   75316             : 
   75317             :       /*! returns a C style string (char*) representing the class name */
   75318             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   75319             : 
   75320             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   75321             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   75322             : #if 0
   75323             :       /*! returns old style Sage II enum values */
   75324             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   75325             :       /*! returns old style Sage II enum values */
   75326             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   75327             : #endif
   75328             :       /* */
   75329             : 
   75330             : 
   75331             : 
   75332             : 
   75333             :      public:
   75334             :       /* name Traversal Support Functions
   75335             :           \brief Traversal support functions ... incomplete-documentation
   75336             : 
   75337             :           These functions have been made public as part of the design, but they are suggested for internal use 
   75338             :           or by particularly knowledgable users for specialized tools or applications.
   75339             :        */
   75340             :       /* */
   75341             : 
   75342             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   75343             :        // (inferior to ROSE traversal mechanism, experimental).
   75344             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   75345             :        */
   75346             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   75347             : 
   75348             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   75349             :       /*! \brief support for the classic visitor pattern done in GoF */
   75350             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   75351             : 
   75352             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   75353             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   75354             :        */
   75355             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   75356             : 
   75357             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   75358             :        */
   75359             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   75360             : 
   75361             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   75362             :        // This traversal helps support internal tools that call static member functions.
   75363             :        // note: this function operates on the memory pools.
   75364             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   75365             :        */
   75366             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   75367             :       /* */
   75368             : 
   75369             : 
   75370             :      public:
   75371             :       /* name Memory Allocation Functions
   75372             :           \brief Memory allocations functions ... incomplete-documentation
   75373             : 
   75374             :           These functions have been made public as part of the design, but they are suggested for internal use 
   75375             :           or by particularly knowledgable users for specialized tools or applications.
   75376             :        */
   75377             :       /* */
   75378             : 
   75379             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   75380             : 
   75381             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   75382             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   75383             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   75384             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   75385             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   75386             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   75387             :           being used with the AST File I/O mechanism.
   75388             :        */
   75389             :           virtual bool isInMemoryPool() override;
   75390             : 
   75391             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   75392             : 
   75393             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   75394             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   75395             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   75396             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   75397             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   75398             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   75399             :           being used with the AST File I/O mechanism.
   75400             :        */
   75401             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   75402             : 
   75403             :       // DQ (4/30/2006): Modified to be a const function.
   75404             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   75405             : 
   75406             :           This functions is part of general support for many possible tools to operate 
   75407             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   75408             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   75409             :           less than the set of pointers used by the AST file I/O. This is part of
   75410             :           work implemented by Andreas, and support tools such as the AST graph generation.
   75411             : 
   75412             :           \warning This function can return unexpected data members and thus the 
   75413             :                    order and the number of elements is unpredicable and subject 
   75414             :                    to change.
   75415             : 
   75416             :           \returns STL vector of pairs of SgNode* and strings
   75417             :        */
   75418             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   75419             : 
   75420             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   75421             : 
   75422             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   75423             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   75424             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   75425             : 
   75426             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   75427             :                    and subject to change.
   75428             :        */
   75429             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   75430             : 
   75431             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   75432             : 
   75433             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   75434             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   75435             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   75436             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   75437             : 
   75438             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   75439             : 
   75440             :           \returns long
   75441             :        */
   75442             :           virtual long getChildIndex( SgNode* childNode ) const override;
   75443             : 
   75444             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   75445             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   75446             :       /* \brief Constructor for use by AST File I/O Mechanism
   75447             : 
   75448             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   75449             :           which obtained via fast binary file I/O from disk.
   75450             :        */
   75451             :        // SgLocatedNode( SgLocatedNodeStorageClass& source );
   75452             : 
   75453             : 
   75454             : 
   75455             : 
   75456             : 
   75457             :  // JH (10/24/2005): methods added to support the ast file IO
   75458             :     private:
   75459             : 
   75460             :       /* name AST Memory Allocation Support Functions
   75461             :           \brief Memory allocations support....
   75462             : 
   75463             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   75464             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   75465             :           and support the AST File I/O Mechanism.
   75466             :        */
   75467             :       /* */
   75468             : 
   75469             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   75470             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   75471             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   75472             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   75473             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   75474             :           a correspinding one in the AST_FILE_IO class!
   75475             :        */
   75476             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   75477             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   75478             :       /* \brief Typedef used for low level memory access.
   75479             :        */
   75480             :        // typedef unsigned char* TestType;
   75481             : 
   75482             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   75483             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   75484             :       /* \brief Typedef used to hold memory addresses as values.
   75485             :        */
   75486             :        // typedef unsigned long  AddressType;
   75487             : 
   75488             : 
   75489             : 
   75490             :        // necessary, to have direct access to the p_freepointer and the private methods !
   75491             :       /*! \brief friend class declaration to support AST File I/O */
   75492             :           friend class AST_FILE_IO;
   75493             : 
   75494             :       /*! \brief friend class declaration to support AST File I/O */
   75495             :           friend class SgLocatedNodeStorageClass;
   75496             : 
   75497             :       /*! \brief friend class declaration to support AST File I/O */
   75498             :           friend class AstSpecificDataManagingClass;
   75499             : 
   75500             :       /*! \brief friend class declaration to support AST File I/O */
   75501             :           friend class AstSpecificDataManagingClassStorageClass;
   75502             :     public:
   75503             :       /*! \brief IR node constructor to support AST File I/O */
   75504             :           SgLocatedNode( const SgLocatedNodeStorageClass& source );
   75505             : 
   75506             :  // private: // JJW hack
   75507             :        /*
   75508             :           name AST Memory Allocation Support Variables
   75509             :           Memory allocations support variables 
   75510             : 
   75511             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   75512             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   75513             :           and support the AST File I/O Mechanism.
   75514             :        */
   75515             :       /* */
   75516             : 
   75517             :     public:
   75518             : 
   75519             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   75520             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   75521             :       // virtual SgNode* addRegExpAttribute();
   75522             :       /*! \brief Support for AST matching using regular expression.
   75523             : 
   75524             :           This support is incomplete and the subject of current research to define 
   75525             :           RegEx trees to support inexact matching.
   75526             :        */
   75527             :           SgLocatedNode* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   75528             : 
   75529             : // *** COMMON CODE SECTION ENDS HERE ***
   75530             : 
   75531             : 
   75532             : // End of memberFunctionString
   75533             : // Start of memberFunctionString
   75534             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   75535             : 
   75536             :      // the generated cast function
   75537             :      // friend ROSE_DLL_API SgLocatedNode* isSgLocatedNode ( SgNode* s );
   75538             : 
   75539             :           typedef SgNode base_node_type;
   75540             : 
   75541             : 
   75542             : // End of memberFunctionString
   75543             : 
   75544             :      public: 
   75545             :          Sg_File_Info* get_startOfConstruct() const override /* (getDataAccessFunctionPrototypeString) */;
   75546             :          void set_startOfConstruct(Sg_File_Info* startOfConstruct) /* (getDataAccessFunctionPrototypeString) */;
   75547             : 
   75548             :      public: 
   75549             :          Sg_File_Info* get_endOfConstruct() const override /* (getDataAccessFunctionPrototypeString) */;
   75550             :          void set_endOfConstruct(Sg_File_Info* endOfConstruct) /* (getDataAccessFunctionPrototypeString) */;
   75551             : 
   75552             :      public: 
   75553             :          AttachedPreprocessingInfoType* get_attachedPreprocessingInfoPtr() const;
   75554             :          void set_attachedPreprocessingInfoPtr(AttachedPreprocessingInfoType* attachedPreprocessingInfoPtr);
   75555             : 
   75556             :      public: 
   75557             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
   75558             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
   75559             : 
   75560             :      public: 
   75561             :          bool get_containsTransformationToSurroundingWhitespace() const;
   75562             :          void set_containsTransformationToSurroundingWhitespace(bool containsTransformationToSurroundingWhitespace);
   75563             : 
   75564             : 
   75565             :      public: 
   75566             :          virtual ~SgLocatedNode();
   75567             : 
   75568             : 
   75569             :      public: 
   75570             :          SgLocatedNode(Sg_File_Info* startOfConstruct = NULL); 
   75571             : 
   75572             :     protected:
   75573             : // Start of memberFunctionString
   75574             : Sg_File_Info* p_startOfConstruct;
   75575             :           
   75576             : // End of memberFunctionString
   75577             : // Start of memberFunctionString
   75578             : Sg_File_Info* p_endOfConstruct;
   75579             :           
   75580             : // End of memberFunctionString
   75581             : // Start of memberFunctionString
   75582             : AttachedPreprocessingInfoType* p_attachedPreprocessingInfoPtr;
   75583             :           
   75584             : // End of memberFunctionString
   75585             : // Start of memberFunctionString
   75586             : AstAttributeMechanism* p_attributeMechanism;
   75587             :           
   75588             : // End of memberFunctionString
   75589             : // Start of memberFunctionString
   75590             : bool p_containsTransformationToSurroundingWhitespace;
   75591             :           
   75592             : // End of memberFunctionString
   75593             : 
   75594             :     friend struct Rose::Traits::generated::describe_node_t<SgLocatedNode>;
   75595             :     friend struct Rose::Traits::generated::describe_field_t<SgLocatedNode, Sg_File_Info*,&SgLocatedNode::p_startOfConstruct>;
   75596             :     friend struct Rose::Traits::generated::describe_field_t<SgLocatedNode, Sg_File_Info*,&SgLocatedNode::p_endOfConstruct>;
   75597             :     friend struct Rose::Traits::generated::describe_field_t<SgLocatedNode, AttachedPreprocessingInfoType*,&SgLocatedNode::p_attachedPreprocessingInfoPtr>;
   75598             :     friend struct Rose::Traits::generated::describe_field_t<SgLocatedNode, AstAttributeMechanism*,&SgLocatedNode::p_attributeMechanism>;
   75599             :     friend struct Rose::Traits::generated::describe_field_t<SgLocatedNode, bool,&SgLocatedNode::p_containsTransformationToSurroundingWhitespace>;
   75600             : 
   75601             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   75602             : 
   75603             : 
   75604             :    };
   75605             : #endif
   75606             : 
   75607             : // postdeclarations for SgLocatedNode
   75608             : 
   75609             : /* #line 75610 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   75610             : 
   75611             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   75612             : 
   75613             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   75614             : 
   75615             : 
   75616             : /* #line 75617 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   75617             : 
   75618             : 
   75619             : 
   75620             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   75621             : 
   75622             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   75623             : //      This code is automatically generated for each 
   75624             : //      terminal and non-terminal within the defined 
   75625             : //      grammar.  There is a simple way to change the 
   75626             : //      code to fix bugs etc.  See the ROSE README file
   75627             : //      for directions.
   75628             : 
   75629             : // tps: (02/22/2010): Adding DLL export requirements
   75630             : #include "rosedll.h"
   75631             : 
   75632             : // predeclarations for SgToken
   75633             : 
   75634             : /* #line 75635 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   75635             : 
   75636             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   75637             : 
   75638             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   75639             : 
   75640             : #if 1
   75641             : // Class Definition for SgToken
   75642             : class ROSE_DLL_API SgToken  : public SgLocatedNode
   75643             :    {
   75644             :      public:
   75645             : 
   75646             : 
   75647             : /* #line 75648 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   75648             : 
   75649             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   75650             : // Start of memberFunctionString
   75651             : /* #line 218 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
   75652             : 
   75653             : // DQ (3/24/2007): These are added from Rama's
   75654             : // work on the lexical analysis of Fortran.  There will
   75655             : // be similar values for C and C++ (and Python at some point).
   75656             : 
   75657             : // DQ (3/24/2007): We should put this in a namespace or rename it.
   75658             : struct token_element
   75659             :    {
   75660             :      std::string token_lexeme;
   75661             :      int token_id;
   75662             :    };
   75663             : 
   75664             : // DQ (4/14/2007): New enum values are language specific to clarity.
   75665             : // The "index + language_specific_offset" permits IR node enum values
   75666             : // that will be grouped appropriately.
   75667             : // DQ (3/24/2007): first versions of tokens using "ROSE_" prefix was judged overdone.
   75668             : // Language specific enum values for Fortran 2003 tokens
   75669             : // enum ROSE_Fortran_Identifiers
   75670             : enum ROSE_Fortran_Keywords
   75671             :    {
   75672             :       FORTRAN_ABSTRACT = 0 + 0,
   75673             :       FORTRAN_ACCESS = 1 + 0,
   75674             :       FORTRAN_ACTION = 2 + 0,
   75675             :       FORTRAN_ALLOCATE = 3 + 0,
   75676             :       FORTRAN_ALLOCATABLE = 4 + 0,
   75677             :       FORTRAN_ASSIGN = 5 + 0,
   75678             :       FORTRAN_ASSOCIATE = 6 + 0,
   75679             :       FORTRAN_ASYNCHRONOUS = 7 + 0,
   75680             :       FORTRAN_BACKSPACE = 8 + 0,
   75681             :       FORTRAN_BIND = 9 + 0,
   75682             :       FORTRAN_BLANK = 10 + 0,
   75683             :       FORTRAN_BLOCK_DATA = 11 + 0,
   75684             :       FORTRAN_CALL = 12 + 0,
   75685             :       FORTRAN_CHARACTER = 13 + 0,
   75686             :       FORTRAN_CLASS = 14 + 0,
   75687             :       FORTRAN_CLOSE = 15 + 0,
   75688             :       FORTRAN_CONTINUE = 16 + 0,
   75689             :       FORTRAN_CYCLE = 17 + 0,
   75690             :       FORTRAN_CASE = 18 + 0,
   75691             :       FORTRAN_COMMON = 19 + 0,
   75692             :       FORTRAN_COMPLEX = 20 + 0,
   75693             :       FORTRAN_CONTAINS = 21 + 0,
   75694             :       FORTRAN_DEALLOCATE = 22 + 0,
   75695             :       FORTRAN_DATA = 23 + 0,
   75696             :       FORTRAN_DEFERRED = 24 + 0,
   75697             :       FORTRAN_DELIM = 25 + 0,
   75698             :       FORTRAN_DIMENSION = 26 + 0,
   75699             :       FORTRAN_DO = 27 + 0,
   75700             :       FORTRAN_DT = 28 + 0,
   75701             :       FORTRAN_DOUBLEPRECISION = 29 + 0,
   75702             :       FORTRAN_ENCODING = 30 + 0,
   75703             :       FORTRAN_END_CASE = 31 + 0,
   75704             :       FORTRAN_ENDDO = 32 + 0,
   75705             :       FORTRAN_END_FILE = 33 + 0,
   75706             :       FORTRAN_END_ENUM = 34 + 0,
   75707             :       FORTRAN_END_INTERFACE = 35 + 0,
   75708             :       FORTRAN_END_TYPE = 36 + 0,
   75709             :       FORTRAN_ERR = 37 + 0,
   75710             :       FORTRAN_ERRMSG = 38 + 0,
   75711             :       FORTRAN_EXIT = 39 + 0,
   75712             :       FORTRAN_ELSE = 40 + 0,
   75713             :       FORTRAN_ELSEWHERE = 41 + 0,
   75714             :       FORTRAN_ELSEIF = 42 + 0,
   75715             :       FORTRAN_ENDIF = 43 + 0,
   75716             :       FORTRAN_ENTRY = 44 + 0,
   75717             :       FORTRAN_END = 45 + 0,
   75718             :       FORTRAN_ENUM = 46 + 0,
   75719             :       FORTRAN_ENUMERATOR = 47 + 0,
   75720             :       FORTRAN_EQUIVALENCE = 48 + 0,
   75721             :       FORTRAN_EXTERNAL = 49 + 0,
   75722             :       FORTRAN_EXTENDS = 50 + 0,
   75723             :       FORTRAN_FILE = 51 + 0,
   75724             :       FORTRAN_FINAL = 52 + 0,
   75725             :       FORTRAN_FMT = 53 + 0,
   75726             :       FORTRAN_FORALL = 54 + 0,
   75727             :       FORTRAN_FORM = 55 + 0,
   75728             :       FORTRAN_FORMATTED = 56 + 0,
   75729             :       FORTRAN_FORMAT = 57 + 0,
   75730             :       FORTRAN_FLUSH = 58 + 0,
   75731             :       FORTRAN_FUNCTION = 59 + 0,
   75732             :       FORTRAN_GENERIC = 60 + 0,
   75733             :       FORTRAN_GOTO = 61 + 0,
   75734             :       FORTRAN_ID = 62 + 0,
   75735             :       FORTRAN_IF = 63 + 0,
   75736             :       FORTRAN_INQUIRE = 64 + 0,
   75737             :       FORTRAN_INTEGER = 65 + 0,
   75738             :       FORTRAN_IOMSG = 66 + 0,
   75739             :       FORTRAN_IOSTAT = 67 + 0,
   75740             :       FORTRAN_IMPLICIT = 68 + 0,
   75741             :       FORTRAN_IMPLICIT_NONE = 69 + 0,
   75742             :       FORTRAN_IMPORT = 70 + 0,
   75743             :       FORTRAN_INTERFACE = 71 + 0,
   75744             :       FORTRAN_INTENT = 72 + 0,
   75745             :       FORTRAN_INTRINSIC = 73 + 0,
   75746             :       FORTRAN_LEN = 74 + 0,
   75747             :       FORTRAN_LOGICAL = 75 + 0,
   75748             :       FORTRAN_KIND = 76 + 0,
   75749             :       FORTRAN_MODULE_PROC = 77 + 0,
   75750             :       FORTRAN_MODULE = 78 + 0,
   75751             :       FORTRAN_NON_INTRINSIC = 79 + 0,
   75752             :       FORTRAN_NON_OVERRIDABLE = 80 + 0,
   75753             :       FORTRAN_NULL = 81 + 0,
   75754             :       FORTRAN_NULLIFY = 82 + 0,
   75755             :       FORTRAN_NAMELIST = 83 + 0,
   75756             :       FORTRAN_NML = 84 + 0,
   75757             :       FORTRAN_NONE = 85 + 0,
   75758             :       FORTRAN_NOPASS = 86 + 0,
   75759             :       FORTRAN_ONLY = 87 + 0,
   75760             :       FORTRAN_OPEN = 88 + 0,
   75761             :       FORTRAN_OPTIONAL = 89 + 0,
   75762             :       FORTRAN_PARAMETER = 90 + 0,
   75763             :       FORTRAN_PASS = 91 + 0,
   75764             :       FORTRAN_PAUSE = 92 + 0,
   75765             :       FORTRAN_POINTER = 93 + 0,
   75766             :       FORTRAN_PRINT = 94 + 0,
   75767             :       FORTRAN_PRIVATE = 95 + 0,
   75768             :       FORTRAN_PROCEDURE = 96 + 0,
   75769             :       FORTRAN_PROGRAM = 97 + 0,
   75770             :       FORTRAN_PROTECTED = 98 + 0,
   75771             :       FORTRAN_READ = 99 + 0,
   75772             :       FORTRAN_REAL = 100 + 0,
   75773             :       FORTRAN_RETURN = 101 + 0,
   75774             :       FORTRAN_REWIND = 102 + 0,
   75775             :       FORTRAN_ROUND = 103 + 0,
   75776             :       FORTRAN_SELECTCASE = 104 + 0,
   75777             :       FORTRAN_SELECTTYPE = 105 + 0,
   75778             :       FORTRAN_SEQUENCE = 106 + 0,
   75779             :       FORTRAN_SAVE = 107 + 0,
   75780             :       FORTRAN_SIGN = 108 + 0,
   75781             :       FORTRAN_SIZE = 109 + 0,
   75782             :       FORTRAN_SOURCE = 110 + 0,
   75783             :       FORTRAN_STAT = 111 + 0,
   75784             :       FORTRAN_STOP = 112 + 0,
   75785             :       FORTRAN_SUBROUTINE = 113 + 0,
   75786             :       FORTRAN_TARGET = 114 + 0,
   75787             :       FORTRAN_THEN = 115 + 0,
   75788             :       FORTRAN_DERIVED_DECL = 116 + 0,
   75789             :       FORTRAN_TYPEIS = 117 + 0,
   75790             :       FORTRAN_UNFORMATTED = 118 + 0,
   75791             :       FORTRAN_UNIT = 119 + 0,
   75792             :       FORTRAN_USE = 120 + 0,
   75793             :       FORTRAN_VALUE = 121 + 0,
   75794             :       FORTRAN_VOLATILE = 122 + 0,
   75795             :       FORTRAN_WAIT = 123 + 0,
   75796             :       FORTRAN_WHERE = 124 + 0,
   75797             :       FORTRAN_WRITE = 125 + 0,
   75798             : 
   75799             :    // DQ (11/27/2013): Added missing entries.
   75800             :       FORTRAN_END_PROGRAM = 126 + 0,
   75801             :       FORTRAN_END_FUNCTION = 127 + 0,
   75802             :       FORTRAN_END_SUBROUTINE = 128 + 0,
   75803             :       FORTRAN_END_MODULE = 129 + 0,
   75804             :       FORTRAN_END_BLOCK_DATA = 130 + 0,
   75805             :       FORTRAN_SUBMODULE = 131 + 0,
   75806             :       FORTRAN_END_SUBMODULE = 132 + 0,
   75807             :       FORTRAN_DOUBLE_COMPLEX = 133 + 0,
   75808             :       FORTRAN_TYPE = 134 + 0,
   75809             :       FORTRAN_ABSTRACT_INTERFACE = 135 + 0,
   75810             :       FORTRAN_ERROR_STOP = 136 + 0,
   75811             :       FORTRAN_CONTIGUOUS = 137 + 0,
   75812             :       FORTRAN_PUBLIC = 138 + 0,
   75813             : 
   75814             :    // Function prefix keywords (Module keyword created above)
   75815             :       FORTRAN_ELEMENTAL = 139 + 0,
   75816             :       FORTRAN_IMPURE = 140 + 0,
   75817             :       FORTRAN_PURE = 141 + 0,
   75818             :       FORTRAN_RECURSIVE = 142 + 0,
   75819             : 
   75820             :    // IntentSpec keywords (these are combined keywords, perhaps should be done differently)
   75821             :       FORTRAN_INTENT_IN = 143 + 0,
   75822             :       FORTRAN_INTENT_OUT = 144 + 0,
   75823             :       FORTRAN_INTENT_INOUT = 145 + 0,
   75824             : 
   75825             :       FORTRAN_ASSIGNMENT = 146 + 0,
   75826             :       FORTRAN_OPERATOR = 147 + 0,
   75827             : 
   75828             :       FORTRAN_READ_FORMATTED = 148 + 0,
   75829             :       FORTRAN_READ_UNFORMATTED = 149 + 0,
   75830             :       FORTRAN_WRITE_FORMATTED = 150 + 0,
   75831             :       FORTRAN_WRITE_UNFORMATTED = 151 + 0,
   75832             : 
   75833             :       FORTRAN_UNKNOWN = 152 + 0
   75834             :    };
   75835             : 
   75836             : // Language specific enum values for C and C++ tokens
   75837             : enum ROSE_C_CXX_keywords
   75838             :    {
   75839             :       C_CXX_ASM = 0 + 500,
   75840             :       C_CXX_AUTO = 1 + 500,
   75841             :       C_CXX_BOOL = 2 + 500,
   75842             :       C_CXX_BREAK = 3 + 500,
   75843             :       C_CXX_CASE = 4 + 500,
   75844             :       C_CXX_CATCH = 5 + 500,
   75845             :       C_CXX_CHAR = 6 + 500,
   75846             :       C_CXX_CLASS = 7 + 500,
   75847             :       C_CXX_CONST = 8 + 500,
   75848             :       C_CXX_CONSTCAST = 9 + 500,
   75849             :       C_CXX_CONTINUE = 10 + 500,
   75850             :       C_CXX_DEFAULT = 11 + 500,
   75851             :       C_CXX_DEFINED = 12 + 500,
   75852             :       C_CXX_DELETE = 13 + 500,
   75853             :       C_CXX_DO = 14 + 500,
   75854             :       C_CXX_DOUBLE = 15 + 500,
   75855             :       C_CXX_DYNAMICCAST = 16 + 500,
   75856             :       C_CXX_ELSE = 17 + 500,
   75857             :       C_CXX_ENUM = 18 + 500,
   75858             :       C_CXX_EXPLICIT = 19 + 500,
   75859             :       C_CXX_EXPORT = 20 + 500,
   75860             :       C_CXX_EXTERN = 21 + 500,
   75861             :       C_CXX_FALSE = 22 + 500,
   75862             :       C_CXX_FLOAT = 23 + 500,
   75863             :       C_CXX_FOR = 24 + 500,
   75864             :       C_CXX_FRIEND = 25 + 500,
   75865             :       C_CXX_GOTO = 26 + 500,
   75866             :       C_CXX_IF = 27 + 500,
   75867             :       C_CXX_INLINE = 28 + 500,
   75868             :       C_CXX_INT = 29 + 500,
   75869             :       C_CXX_LONG = 30 + 500,
   75870             :       C_CXX_MUTABLE = 31 + 500,
   75871             :       C_CXX_NAMESPACE = 32 + 500,
   75872             :       C_CXX_NEW = 33 + 500,
   75873             :       C_CXX_OPERATOR = 34 + 500,
   75874             :       C_CXX_PRIVATE = 35 + 500,
   75875             :       C_CXX_PROTECTED = 36 + 500,
   75876             :       C_CXX_PUBLIC = 37 + 500,
   75877             :       C_CXX_REGISTER = 38 + 500,
   75878             :       C_CXX_REINTERPRETCAST = 39 + 500,
   75879             :       C_CXX_RETURN = 40 + 500,
   75880             :       C_CXX_SHORT = 41 + 500,
   75881             :       C_CXX_SIGNED = 42 + 500,
   75882             :       C_CXX_SIZEOF = 43 + 500,
   75883             :       C_CXX_STATIC = 44 + 500,
   75884             :       C_CXX_STATICCAST = 45 + 500,
   75885             :       C_CXX_STRUCT = 46 + 500,
   75886             :       C_CXX_SWITCH = 47 + 500,
   75887             :       C_CXX_TEMPLATE = 48 + 500,
   75888             :       C_CXX_THIS = 49 + 500,
   75889             :       C_CXX_THROW = 50 + 500,
   75890             :       C_CXX_TRY = 51 + 500,
   75891             :       C_CXX_TRUE = 52 + 500,
   75892             :       C_CXX_TYPEDEF = 53 + 500,
   75893             :       C_CXX_TYPEID = 54 + 500,
   75894             :       C_CXX_TYPENAME = 55 + 500,
   75895             :       C_CXX_UNION = 56 + 500,
   75896             :       C_CXX_UNSIGNED = 57 + 500,
   75897             :       C_CXX_USING = 58 + 500,
   75898             :       C_CXX_VIRTUAL = 59 + 500,
   75899             :       C_CXX_VOID = 60 + 500,
   75900             :       C_CXX_VOLATILE = 61 + 500,
   75901             :       C_CXX_WCHART = 62 + 500,
   75902             :       C_CXX_WHILE = 63 + 500
   75903             :    };
   75904             : 
   75905             : // Language specific token enums for Fortran intrinsic operators
   75906             : enum ROSE_Fortran_Operators
   75907             :    {
   75908             :       FORTRAN_INTRINSIC_PLUS = 0 + 10000,
   75909             :       FORTRAN_INTRINSIC_MINUS = 1 + 10000,
   75910             :       FORTRAN_INTRINSIC_POWER = 2 + 10000,
   75911             :       FORTRAN_INTRINSIC_CONCAT = 3 + 10000,
   75912             :       FORTRAN_INTRINSIC_TIMES = 4 + 10000,
   75913             :       FORTRAN_INTRINSIC_DIVIDE = 5 + 10000,
   75914             :       FORTRAN_INTRINSIC_AND = 6 + 10000,
   75915             :       FORTRAN_INTRINSIC_OR = 7 + 10000,
   75916             :       FORTRAN_INTRINSIC_EQV = 8 + 10000,
   75917             :       FORTRAN_INTRINSIC_NEQV = 9 + 10000,
   75918             :       FORTRAN_INTRINSIC_EQ = 10 + 10000,
   75919             :       FORTRAN_INTRINSIC_NE = 11 + 10000,
   75920             :       FORTRAN_INTRINSIC_GE = 12 + 10000,
   75921             :       FORTRAN_INTRINSIC_LE = 13 + 10000,
   75922             :       FORTRAN_INTRINSIC_LT = 14 + 10000,
   75923             :       FORTRAN_INTRINSIC_GT = 15 + 10000,
   75924             :       FORTRAN_INTRINSIC_NOT = 16 + 10000,
   75925             :       FORTRAN_INTRINSIC_OLDEQ = 17 + 10000,
   75926             :       FORTRAN_INTRINSIC_OLDNE = 18 + 10000,
   75927             :       FORTRAN_INTRINSIC_OLDGE = 19 + 10000,
   75928             :       FORTRAN_INTRINSIC_OLDLE = 20 + 10000,
   75929             :       FORTRAN_INTRINSIC_OLDLT = 21 + 10000,
   75930             :       FORTRAN_INTRINSIC_OLDGT = 22 + 10000
   75931             :    };
   75932             : 
   75933             : enum ROSE_C_CXX_Operators
   75934             :    {
   75935             :       C_CXX_AND = 0 + 50000,
   75936             :       C_CXX_ANDAND = 1 + 50000,
   75937             :       C_CXX_ASSIGN = 2 + 50000,
   75938             :       C_CXX_ANDASSIGN = 3 + 50000,
   75939             :       C_CXX_OR = 4 + 50000,
   75940             :       C_CXX_ORASSIGN = 5 + 50000,
   75941             :       C_CXX_XOR = 6 + 50000,
   75942             :       C_CXX_XORASSIGN = 7 + 50000,
   75943             :       C_CXX_COMMA = 8 + 50000,
   75944             :       C_CXX_COLON = 9 + 50000,
   75945             :       C_CXX_DIVIDE = 10 + 50000,
   75946             :       C_CXX_DIVIDEASSIGN = 11 + 50000,
   75947             :       C_CXX_DOT = 12 + 50000,
   75948             :       C_CXX_DOTSTAR = 13 + 50000,
   75949             :       C_CXX_ELLIPSIS = 14 + 50000,
   75950             :       C_CXX_EQUAL = 15 + 50000,
   75951             :       C_CXX_GREATER = 16 + 50000,
   75952             :       C_CXX_GREATEREQUAL = 17 + 50000,
   75953             :       C_CXX_LEFTBRACE = 18 + 50000,
   75954             :       C_CXX_LESS = 19 + 50000,
   75955             :       C_CXX_LESSEQUAL = 20 + 50000,
   75956             :       C_CXX_LEFTPAREN = 21 + 50000,
   75957             :       C_CXX_LEFTBRACKET = 22 + 50000,
   75958             :       C_CXX_MINUS = 23 + 50000,
   75959             :       C_CXX_MINUSASSIGN = 24 + 50000,
   75960             :       C_CXX_MINUSMINUS = 25 + 50000,
   75961             :       C_CXX_PERCENT = 26 + 50000,
   75962             :       C_CXX_PERCENTASSIGN = 27 + 50000,
   75963             :       C_CXX_NOT = 28 + 50000,
   75964             :       C_CXX_NOTEQUAL = 29 + 50000,
   75965             :       C_CXX_OROR = 30 + 50000,
   75966             :       C_CXX_PLUS = 31 + 50000,
   75967             :       C_CXX_PLUSASSIGN = 32 + 50000,
   75968             :       C_CXX_PLUSPLUS = 33 + 50000,
   75969             :       C_CXX_ARROW = 34 + 50000,
   75970             :       C_CXX_ARROWSTAR = 35 + 50000,
   75971             :       C_CXX_QUESTION_MARK = 36 + 50000,
   75972             :       C_CXX_RIGHTBRACE = 37 + 50000,
   75973             :       C_CXX_RIGHTPAREN = 38 + 50000,
   75974             :       C_CXX_RIGHTBRACKET = 39 + 50000,
   75975             :       C_CXX_COLON_COLON = 40 + 50000,
   75976             :       C_CXX_SEMICOLON = 41 + 50000,
   75977             :       C_CXX_SHIFTLEFT = 42 + 50000,
   75978             :       C_CXX_SHIFTLEFTASSIGN = 43 + 50000,
   75979             :       C_CXX_SHIFTRIGHT = 44 + 50000,
   75980             :       C_CXX_SHIFTRIGHTASSIGN = 45 + 50000,
   75981             :       C_CXX_STAR = 46 + 50000,
   75982             :       C_CXX_COMPL = 47 + 50000,
   75983             :       C_CXX_STARASSIGN = 48 + 50000,
   75984             :       C_CXX_POUND_POUND = 49 + 50000,
   75985             :       C_CXX_POUND = 50 + 50000,
   75986             :       C_CXX_AND_ALT = 51 + 50000,
   75987             :       C_CXX_ANDASSIGN_ALT = 52 + 50000,
   75988             :       C_CXX_OR_ALT = 53 + 50000,
   75989             :       C_CXX_ORASSIGN_ALT = 54 + 50000,
   75990             :       C_CXX_XOR_ALT = 55 + 50000,
   75991             :       C_CXX_XORASSIGN_ALT = 56 + 50000,
   75992             :       C_CXX_LEFTBRACE_ALT = 57 + 50000,
   75993             :       C_CXX_LEFTBRACKET_ALT = 58 + 50000,
   75994             :       C_CXX_NOT_ALT = 59 + 50000,
   75995             :       C_CXX_NOTEQUAL_ALT = 60 + 50000,
   75996             :       C_CXX_RIGHTBRACE_ALT = 61 + 50000,
   75997             :       C_CXX_RIGHTBRACKET_ALT = 62 + 50000,
   75998             :       C_CXX_COMPL_ALT = 63 + 50000,
   75999             :       C_CXX_POUND_POUND_ALT = 64 + 50000,
   76000             :       C_CXX_POUND_ALT = 65 + 50000,
   76001             :       C_CXX_OR_TRIGRAPH = 66 + 50000,
   76002             :       C_CXX_XOR_TRIGRAPH = 67 + 50000,
   76003             :       C_CXX_LEFTBRACE_TRIGRAPH = 68 + 50000,
   76004             :       C_CXX_LEFTBRACKET_TRIGRAPH = 69 + 50000,
   76005             :       C_CXX_RIGHTBRACE_TRIGRAPH = 70 + 50000,
   76006             :       C_CXX_RIGHTBRACKET_TRIGRAPH = 71 + 50000,
   76007             :       C_CXX_COMPL_TRIGRAPH = 72 + 50000,
   76008             :       C_CXX_POUND_POUND_TRIGRAPH = 73 + 50000,
   76009             :       C_CXX_POUND_TRIGRAPH = 74 + 50000
   76010             :    };
   76011             : 
   76012             : // Fortran specific additional token classifications
   76013             : enum ROSE_Fortran_Additional_Info
   76014             :    {
   76015             :       FORTRAN_COMMENTS = 0 + 100000,
   76016             :       FORTRAN_STRING_LITERALS = 1 + 100000,
   76017             :       FORTRAN_IDENTIFIER = 2 + 100000,
   76018             :       FORTRAN_UNIDENTIFIED_TOKEN = 3 + 100000,
   76019             :       FORTRAN_ERROR = 4 + 100000
   76020             :    };
   76021             : 
   76022             :      public:
   76023             :        // DQ (4/14/2007): Modified to make this a const array
   76024             :           static const token_element ROSE_Fortran_keyword_map[127];
   76025             : 
   76026             :        // DQ (11/20/2015): Added function to detect CR to support unparsing of whitespace defined up to an including only the first CR.
   76027             :           bool isCarriageReturn() const;
   76028             : 
   76029             : 
   76030             : 
   76031             : // End of memberFunctionString
   76032             : // Start of memberFunctionString
   76033             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   76034             : 
   76035             : // *** COMMON CODE SECTION BEGINS HERE ***
   76036             : 
   76037             :     public:
   76038             : 
   76039             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   76040             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   76041             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   76042             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   76043             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   76044             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   76045             : 
   76046             :       /*! \brief returns a string representing the class name */
   76047             :           virtual std::string class_name() const override;
   76048             : 
   76049             :       /*! \brief returns new style SageIII enum values */
   76050             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   76051             : 
   76052             :       /*! \brief static variant value */
   76053             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   76054             :        // static const VariantT static_variant = V_SgToken;
   76055             :           enum { static_variant = V_SgToken };
   76056             : 
   76057             :        /* the generated cast function */
   76058             :       /*! \brief Casts pointer from base class to derived class */
   76059             :           ROSE_DLL_API friend       SgToken* isSgToken(       SgNode * s );
   76060             : 
   76061             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   76062             :           ROSE_DLL_API friend const SgToken* isSgToken( const SgNode * s );
   76063             : 
   76064             :      // ******************************************
   76065             :      // * Memory Pool / New / Delete
   76066             :      // ******************************************
   76067             : 
   76068             :      public:
   76069             :           /// \private
   76070             :           static const unsigned pool_size; //
   76071             :           /// \private
   76072             :           static std::vector<unsigned char *> pools; //
   76073             :           /// \private
   76074             :           static SgToken * next_node; // 
   76075             : 
   76076             :           /// \private
   76077             :           static unsigned long initializeStorageClassArray(SgTokenStorageClass *); //
   76078             : 
   76079             :           /// \private
   76080             :           static void clearMemoryPool(); //
   76081             :           static void deleteMemoryPool(); //
   76082             : 
   76083             :           /// \private
   76084             :           static void extendMemoryPoolForFileIO(); //
   76085             : 
   76086             :           /// \private
   76087             :           static SgToken * getPointerFromGlobalIndex(unsigned long); //
   76088             :           /// \private
   76089             :           static SgToken * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   76090             : 
   76091             :           /// \private
   76092             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   76093             :           /// \private
   76094             :           static void resetValidFreepointers(); //
   76095             :           /// \private
   76096             :           static unsigned long getNumberOfLastValidPointer(); //
   76097             : 
   76098             : 
   76099             : #if defined(INLINE_FUNCTIONS)
   76100             :       /*! \brief returns pointer to newly allocated IR node */
   76101             :           inline void *operator new (size_t size);
   76102             : #else
   76103             :       /*! \brief returns pointer to newly allocated IR node */
   76104             :           void *operator new (size_t size);
   76105             : #endif
   76106             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   76107             :           void operator delete (void* pointer, size_t size);
   76108             : 
   76109             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   76110           0 :           void operator delete (void* pointer)
   76111             :              {
   76112             :             // This is the generated delete operator...
   76113           0 :                SgToken::operator delete (pointer,sizeof(SgToken));
   76114             :              }
   76115             : 
   76116             :       /*! \brief Returns the total number of IR nodes of this type */
   76117             :           static size_t numberOfNodes();
   76118             : 
   76119             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   76120             :           static size_t memoryUsage();
   76121             : 
   76122             :       // End of scope which started in IR nodes specific code 
   76123             :       /* */
   76124             : 
   76125             :       /* name Internal Functions
   76126             :           \brief Internal functions ... incomplete-documentation
   76127             : 
   76128             :           These functions have been made public as part of the design, but they are suggested for internal use 
   76129             :           or by particularly knowledgeable users for specialized tools or applications.
   76130             : 
   76131             :           \internal We could not make these private because they are required by user for special purposes. And 
   76132             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   76133             :          
   76134             :        */
   76135             : 
   76136             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   76137             :        // overridden in every class by *generated* implementation
   76138             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   76139             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   76140             :        // MS: 06/28/02 container of names of variables or container indices 
   76141             :        // used used in the traversal to access AST successor nodes
   76142             :        // overridden in every class by *generated* implementation
   76143             :       /*! \brief container of names of variables or container indices used used in the traversal
   76144             :           to access AST successor nodes overridden in every class by *generated* implementation */
   76145             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   76146             : 
   76147             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   76148             :        // than all the vector copies. The implementation for these functions is generated for each class.
   76149             :       /*! \brief return number of children in the traversal successor list */
   76150             :           virtual size_t get_numberOfTraversalSuccessors() override;
   76151             :       /*! \brief index-based access to traversal successors by index number */
   76152             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   76153             :       /*! \brief index-based access to traversal successors by child node */
   76154             :           virtual size_t get_childIndex(SgNode *child) override;
   76155             : 
   76156             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   76157             :        // MS: 08/16/2002 method for generating RTI information
   76158             :       /*! \brief return C++ Runtime-Time-Information */
   76159             :           virtual RTIReturnType roseRTI() override;
   76160             : #endif
   76161             :       /* */
   76162             : 
   76163             : 
   76164             : 
   76165             :       /* name Deprecated Functions
   76166             :           \brief Deprecated functions ... incomplete-documentation
   76167             : 
   76168             :           These functions have been deprecated from use.
   76169             :        */
   76170             :       /* */
   76171             : 
   76172             :       /*! returns a C style string (char*) representing the class name */
   76173             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   76174             : 
   76175             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   76176             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   76177             : #if 0
   76178             :       /*! returns old style Sage II enum values */
   76179             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   76180             :       /*! returns old style Sage II enum values */
   76181             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   76182             : #endif
   76183             :       /* */
   76184             : 
   76185             : 
   76186             : 
   76187             : 
   76188             :      public:
   76189             :       /* name Traversal Support Functions
   76190             :           \brief Traversal support functions ... incomplete-documentation
   76191             : 
   76192             :           These functions have been made public as part of the design, but they are suggested for internal use 
   76193             :           or by particularly knowledgable users for specialized tools or applications.
   76194             :        */
   76195             :       /* */
   76196             : 
   76197             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   76198             :        // (inferior to ROSE traversal mechanism, experimental).
   76199             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   76200             :        */
   76201             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   76202             : 
   76203             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   76204             :       /*! \brief support for the classic visitor pattern done in GoF */
   76205             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   76206             : 
   76207             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   76208             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   76209             :        */
   76210             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   76211             : 
   76212             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   76213             :        */
   76214             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   76215             : 
   76216             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   76217             :        // This traversal helps support internal tools that call static member functions.
   76218             :        // note: this function operates on the memory pools.
   76219             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   76220             :        */
   76221             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   76222             :       /* */
   76223             : 
   76224             : 
   76225             :      public:
   76226             :       /* name Memory Allocation Functions
   76227             :           \brief Memory allocations functions ... incomplete-documentation
   76228             : 
   76229             :           These functions have been made public as part of the design, but they are suggested for internal use 
   76230             :           or by particularly knowledgable users for specialized tools or applications.
   76231             :        */
   76232             :       /* */
   76233             : 
   76234             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   76235             : 
   76236             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   76237             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   76238             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   76239             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   76240             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   76241             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   76242             :           being used with the AST File I/O mechanism.
   76243             :        */
   76244             :           virtual bool isInMemoryPool() override;
   76245             : 
   76246             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   76247             : 
   76248             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   76249             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   76250             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   76251             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   76252             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   76253             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   76254             :           being used with the AST File I/O mechanism.
   76255             :        */
   76256             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   76257             : 
   76258             :       // DQ (4/30/2006): Modified to be a const function.
   76259             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   76260             : 
   76261             :           This functions is part of general support for many possible tools to operate 
   76262             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   76263             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   76264             :           less than the set of pointers used by the AST file I/O. This is part of
   76265             :           work implemented by Andreas, and support tools such as the AST graph generation.
   76266             : 
   76267             :           \warning This function can return unexpected data members and thus the 
   76268             :                    order and the number of elements is unpredicable and subject 
   76269             :                    to change.
   76270             : 
   76271             :           \returns STL vector of pairs of SgNode* and strings
   76272             :        */
   76273             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   76274             : 
   76275             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   76276             : 
   76277             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   76278             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   76279             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   76280             : 
   76281             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   76282             :                    and subject to change.
   76283             :        */
   76284             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   76285             : 
   76286             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   76287             : 
   76288             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   76289             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   76290             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   76291             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   76292             : 
   76293             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   76294             : 
   76295             :           \returns long
   76296             :        */
   76297             :           virtual long getChildIndex( SgNode* childNode ) const override;
   76298             : 
   76299             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   76300             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   76301             :       /* \brief Constructor for use by AST File I/O Mechanism
   76302             : 
   76303             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   76304             :           which obtained via fast binary file I/O from disk.
   76305             :        */
   76306             :        // SgToken( SgTokenStorageClass& source );
   76307             : 
   76308             : 
   76309             : 
   76310             : 
   76311             : 
   76312             :  // JH (10/24/2005): methods added to support the ast file IO
   76313             :     private:
   76314             : 
   76315             :       /* name AST Memory Allocation Support Functions
   76316             :           \brief Memory allocations support....
   76317             : 
   76318             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   76319             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   76320             :           and support the AST File I/O Mechanism.
   76321             :        */
   76322             :       /* */
   76323             : 
   76324             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   76325             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   76326             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   76327             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   76328             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   76329             :           a correspinding one in the AST_FILE_IO class!
   76330             :        */
   76331             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   76332             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   76333             :       /* \brief Typedef used for low level memory access.
   76334             :        */
   76335             :        // typedef unsigned char* TestType;
   76336             : 
   76337             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   76338             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   76339             :       /* \brief Typedef used to hold memory addresses as values.
   76340             :        */
   76341             :        // typedef unsigned long  AddressType;
   76342             : 
   76343             : 
   76344             : 
   76345             :        // necessary, to have direct access to the p_freepointer and the private methods !
   76346             :       /*! \brief friend class declaration to support AST File I/O */
   76347             :           friend class AST_FILE_IO;
   76348             : 
   76349             :       /*! \brief friend class declaration to support AST File I/O */
   76350             :           friend class SgTokenStorageClass;
   76351             : 
   76352             :       /*! \brief friend class declaration to support AST File I/O */
   76353             :           friend class AstSpecificDataManagingClass;
   76354             : 
   76355             :       /*! \brief friend class declaration to support AST File I/O */
   76356             :           friend class AstSpecificDataManagingClassStorageClass;
   76357             :     public:
   76358             :       /*! \brief IR node constructor to support AST File I/O */
   76359             :           SgToken( const SgTokenStorageClass& source );
   76360             : 
   76361             :  // private: // JJW hack
   76362             :        /*
   76363             :           name AST Memory Allocation Support Variables
   76364             :           Memory allocations support variables 
   76365             : 
   76366             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   76367             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   76368             :           and support the AST File I/O Mechanism.
   76369             :        */
   76370             :       /* */
   76371             : 
   76372             :     public:
   76373             : 
   76374             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   76375             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   76376             :       // virtual SgNode* addRegExpAttribute();
   76377             :       /*! \brief Support for AST matching using regular expression.
   76378             : 
   76379             :           This support is incomplete and the subject of current research to define 
   76380             :           RegEx trees to support inexact matching.
   76381             :        */
   76382             :           SgToken* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   76383             : 
   76384             : // *** COMMON CODE SECTION ENDS HERE ***
   76385             : 
   76386             : 
   76387             : // End of memberFunctionString
   76388             : // Start of memberFunctionString
   76389             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   76390             : 
   76391             :      // the generated cast function
   76392             :      // friend ROSE_DLL_API SgToken* isSgToken ( SgNode* s );
   76393             : 
   76394             :           typedef SgLocatedNode base_node_type;
   76395             : 
   76396             : 
   76397             : // End of memberFunctionString
   76398             : 
   76399             :      public: 
   76400             :          std::string get_lexeme_string() const;
   76401             :          void set_lexeme_string(std::string lexeme_string);
   76402             : 
   76403             :      public: 
   76404             :          unsigned int get_classification_code() const;
   76405             :          void set_classification_code(unsigned int classification_code);
   76406             : 
   76407             : 
   76408             :      public: 
   76409             :          virtual ~SgToken();
   76410             : 
   76411             : 
   76412             :      public: 
   76413             :          SgToken(Sg_File_Info* startOfConstruct , std::string lexeme_string = "", unsigned int classification_code = 0); 
   76414             :          SgToken(std::string lexeme_string, unsigned int classification_code); 
   76415             : 
   76416             :     protected:
   76417             : // Start of memberFunctionString
   76418             : std::string p_lexeme_string;
   76419             :           
   76420             : // End of memberFunctionString
   76421             : // Start of memberFunctionString
   76422             : unsigned int p_classification_code;
   76423             :           
   76424             : // End of memberFunctionString
   76425             : 
   76426             :     friend struct Rose::Traits::generated::describe_node_t<SgToken>;
   76427             :     friend struct Rose::Traits::generated::describe_field_t<SgToken, std::string,&SgToken::p_lexeme_string>;
   76428             :     friend struct Rose::Traits::generated::describe_field_t<SgToken, unsigned int,&SgToken::p_classification_code>;
   76429             : 
   76430             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76431             : 
   76432             : 
   76433             :    };
   76434             : #endif
   76435             : 
   76436             : // postdeclarations for SgToken
   76437             : 
   76438             : /* #line 76439 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76439             : 
   76440             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   76441             : 
   76442             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76443             : 
   76444             : 
   76445             : /* #line 76446 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76446             : 
   76447             : 
   76448             : 
   76449             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76450             : 
   76451             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   76452             : //      This code is automatically generated for each 
   76453             : //      terminal and non-terminal within the defined 
   76454             : //      grammar.  There is a simple way to change the 
   76455             : //      code to fix bugs etc.  See the ROSE README file
   76456             : //      for directions.
   76457             : 
   76458             : // tps: (02/22/2010): Adding DLL export requirements
   76459             : #include "rosedll.h"
   76460             : 
   76461             : // predeclarations for SgLocatedNodeSupport
   76462             : 
   76463             : /* #line 76464 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76464             : 
   76465             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   76466             : 
   76467             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76468             : 
   76469             : #if 1
   76470             : // Class Definition for SgLocatedNodeSupport
   76471             : class ROSE_DLL_API SgLocatedNodeSupport  : public SgLocatedNode
   76472             :    {
   76473             :      public:
   76474             : 
   76475             : 
   76476             : /* #line 76477 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76477             : 
   76478             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   76479             : // Start of memberFunctionString
   76480             : /* #line 598 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
   76481             : 
   76482             : 
   76483             : 
   76484             : // End of memberFunctionString
   76485             : // Start of memberFunctionString
   76486             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   76487             : 
   76488             : // *** COMMON CODE SECTION BEGINS HERE ***
   76489             : 
   76490             :     public:
   76491             : 
   76492             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   76493             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   76494             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   76495             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   76496             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   76497             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   76498             : 
   76499             :       /*! \brief returns a string representing the class name */
   76500             :           virtual std::string class_name() const override;
   76501             : 
   76502             :       /*! \brief returns new style SageIII enum values */
   76503             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   76504             : 
   76505             :       /*! \brief static variant value */
   76506             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   76507             :        // static const VariantT static_variant = V_SgLocatedNodeSupport;
   76508             :           enum { static_variant = V_SgLocatedNodeSupport };
   76509             : 
   76510             :        /* the generated cast function */
   76511             :       /*! \brief Casts pointer from base class to derived class */
   76512             :           ROSE_DLL_API friend       SgLocatedNodeSupport* isSgLocatedNodeSupport(       SgNode * s );
   76513             : 
   76514             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   76515             :           ROSE_DLL_API friend const SgLocatedNodeSupport* isSgLocatedNodeSupport( const SgNode * s );
   76516             : 
   76517             :      // ******************************************
   76518             :      // * Memory Pool / New / Delete
   76519             :      // ******************************************
   76520             : 
   76521             :      public:
   76522             :           /// \private
   76523             :           static const unsigned pool_size; //
   76524             :           /// \private
   76525             :           static std::vector<unsigned char *> pools; //
   76526             :           /// \private
   76527             :           static SgLocatedNodeSupport * next_node; // 
   76528             : 
   76529             :           /// \private
   76530             :           static unsigned long initializeStorageClassArray(SgLocatedNodeSupportStorageClass *); //
   76531             : 
   76532             :           /// \private
   76533             :           static void clearMemoryPool(); //
   76534             :           static void deleteMemoryPool(); //
   76535             : 
   76536             :           /// \private
   76537             :           static void extendMemoryPoolForFileIO(); //
   76538             : 
   76539             :           /// \private
   76540             :           static SgLocatedNodeSupport * getPointerFromGlobalIndex(unsigned long); //
   76541             :           /// \private
   76542             :           static SgLocatedNodeSupport * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   76543             : 
   76544             :           /// \private
   76545             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   76546             :           /// \private
   76547             :           static void resetValidFreepointers(); //
   76548             :           /// \private
   76549             :           static unsigned long getNumberOfLastValidPointer(); //
   76550             : 
   76551             : 
   76552             : #if defined(INLINE_FUNCTIONS)
   76553             :       /*! \brief returns pointer to newly allocated IR node */
   76554             :           inline void *operator new (size_t size);
   76555             : #else
   76556             :       /*! \brief returns pointer to newly allocated IR node */
   76557             :           void *operator new (size_t size);
   76558             : #endif
   76559             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   76560             :           void operator delete (void* pointer, size_t size);
   76561             : 
   76562             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   76563           0 :           void operator delete (void* pointer)
   76564             :              {
   76565             :             // This is the generated delete operator...
   76566           0 :                SgLocatedNodeSupport::operator delete (pointer,sizeof(SgLocatedNodeSupport));
   76567             :              }
   76568             : 
   76569             :       /*! \brief Returns the total number of IR nodes of this type */
   76570             :           static size_t numberOfNodes();
   76571             : 
   76572             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   76573             :           static size_t memoryUsage();
   76574             : 
   76575             :       // End of scope which started in IR nodes specific code 
   76576             :       /* */
   76577             : 
   76578             :       /* name Internal Functions
   76579             :           \brief Internal functions ... incomplete-documentation
   76580             : 
   76581             :           These functions have been made public as part of the design, but they are suggested for internal use 
   76582             :           or by particularly knowledgeable users for specialized tools or applications.
   76583             : 
   76584             :           \internal We could not make these private because they are required by user for special purposes. And 
   76585             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   76586             :          
   76587             :        */
   76588             : 
   76589             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   76590             :        // overridden in every class by *generated* implementation
   76591             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   76592             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   76593             :        // MS: 06/28/02 container of names of variables or container indices 
   76594             :        // used used in the traversal to access AST successor nodes
   76595             :        // overridden in every class by *generated* implementation
   76596             :       /*! \brief container of names of variables or container indices used used in the traversal
   76597             :           to access AST successor nodes overridden in every class by *generated* implementation */
   76598             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   76599             : 
   76600             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   76601             :        // than all the vector copies. The implementation for these functions is generated for each class.
   76602             :       /*! \brief return number of children in the traversal successor list */
   76603             :           virtual size_t get_numberOfTraversalSuccessors() override;
   76604             :       /*! \brief index-based access to traversal successors by index number */
   76605             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   76606             :       /*! \brief index-based access to traversal successors by child node */
   76607             :           virtual size_t get_childIndex(SgNode *child) override;
   76608             : 
   76609             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   76610             :        // MS: 08/16/2002 method for generating RTI information
   76611             :       /*! \brief return C++ Runtime-Time-Information */
   76612             :           virtual RTIReturnType roseRTI() override;
   76613             : #endif
   76614             :       /* */
   76615             : 
   76616             : 
   76617             : 
   76618             :       /* name Deprecated Functions
   76619             :           \brief Deprecated functions ... incomplete-documentation
   76620             : 
   76621             :           These functions have been deprecated from use.
   76622             :        */
   76623             :       /* */
   76624             : 
   76625             :       /*! returns a C style string (char*) representing the class name */
   76626             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   76627             : 
   76628             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   76629             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   76630             : #if 0
   76631             :       /*! returns old style Sage II enum values */
   76632             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   76633             :       /*! returns old style Sage II enum values */
   76634             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   76635             : #endif
   76636             :       /* */
   76637             : 
   76638             : 
   76639             : 
   76640             : 
   76641             :      public:
   76642             :       /* name Traversal Support Functions
   76643             :           \brief Traversal support functions ... incomplete-documentation
   76644             : 
   76645             :           These functions have been made public as part of the design, but they are suggested for internal use 
   76646             :           or by particularly knowledgable users for specialized tools or applications.
   76647             :        */
   76648             :       /* */
   76649             : 
   76650             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   76651             :        // (inferior to ROSE traversal mechanism, experimental).
   76652             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   76653             :        */
   76654             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   76655             : 
   76656             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   76657             :       /*! \brief support for the classic visitor pattern done in GoF */
   76658             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   76659             : 
   76660             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   76661             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   76662             :        */
   76663             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   76664             : 
   76665             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   76666             :        */
   76667             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   76668             : 
   76669             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   76670             :        // This traversal helps support internal tools that call static member functions.
   76671             :        // note: this function operates on the memory pools.
   76672             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   76673             :        */
   76674             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   76675             :       /* */
   76676             : 
   76677             : 
   76678             :      public:
   76679             :       /* name Memory Allocation Functions
   76680             :           \brief Memory allocations functions ... incomplete-documentation
   76681             : 
   76682             :           These functions have been made public as part of the design, but they are suggested for internal use 
   76683             :           or by particularly knowledgable users for specialized tools or applications.
   76684             :        */
   76685             :       /* */
   76686             : 
   76687             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   76688             : 
   76689             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   76690             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   76691             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   76692             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   76693             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   76694             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   76695             :           being used with the AST File I/O mechanism.
   76696             :        */
   76697             :           virtual bool isInMemoryPool() override;
   76698             : 
   76699             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   76700             : 
   76701             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   76702             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   76703             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   76704             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   76705             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   76706             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   76707             :           being used with the AST File I/O mechanism.
   76708             :        */
   76709             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   76710             : 
   76711             :       // DQ (4/30/2006): Modified to be a const function.
   76712             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   76713             : 
   76714             :           This functions is part of general support for many possible tools to operate 
   76715             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   76716             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   76717             :           less than the set of pointers used by the AST file I/O. This is part of
   76718             :           work implemented by Andreas, and support tools such as the AST graph generation.
   76719             : 
   76720             :           \warning This function can return unexpected data members and thus the 
   76721             :                    order and the number of elements is unpredicable and subject 
   76722             :                    to change.
   76723             : 
   76724             :           \returns STL vector of pairs of SgNode* and strings
   76725             :        */
   76726             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   76727             : 
   76728             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   76729             : 
   76730             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   76731             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   76732             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   76733             : 
   76734             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   76735             :                    and subject to change.
   76736             :        */
   76737             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   76738             : 
   76739             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   76740             : 
   76741             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   76742             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   76743             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   76744             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   76745             : 
   76746             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   76747             : 
   76748             :           \returns long
   76749             :        */
   76750             :           virtual long getChildIndex( SgNode* childNode ) const override;
   76751             : 
   76752             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   76753             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   76754             :       /* \brief Constructor for use by AST File I/O Mechanism
   76755             : 
   76756             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   76757             :           which obtained via fast binary file I/O from disk.
   76758             :        */
   76759             :        // SgLocatedNodeSupport( SgLocatedNodeSupportStorageClass& source );
   76760             : 
   76761             : 
   76762             : 
   76763             : 
   76764             : 
   76765             :  // JH (10/24/2005): methods added to support the ast file IO
   76766             :     private:
   76767             : 
   76768             :       /* name AST Memory Allocation Support Functions
   76769             :           \brief Memory allocations support....
   76770             : 
   76771             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   76772             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   76773             :           and support the AST File I/O Mechanism.
   76774             :        */
   76775             :       /* */
   76776             : 
   76777             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   76778             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   76779             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   76780             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   76781             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   76782             :           a correspinding one in the AST_FILE_IO class!
   76783             :        */
   76784             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   76785             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   76786             :       /* \brief Typedef used for low level memory access.
   76787             :        */
   76788             :        // typedef unsigned char* TestType;
   76789             : 
   76790             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   76791             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   76792             :       /* \brief Typedef used to hold memory addresses as values.
   76793             :        */
   76794             :        // typedef unsigned long  AddressType;
   76795             : 
   76796             : 
   76797             : 
   76798             :        // necessary, to have direct access to the p_freepointer and the private methods !
   76799             :       /*! \brief friend class declaration to support AST File I/O */
   76800             :           friend class AST_FILE_IO;
   76801             : 
   76802             :       /*! \brief friend class declaration to support AST File I/O */
   76803             :           friend class SgLocatedNodeSupportStorageClass;
   76804             : 
   76805             :       /*! \brief friend class declaration to support AST File I/O */
   76806             :           friend class AstSpecificDataManagingClass;
   76807             : 
   76808             :       /*! \brief friend class declaration to support AST File I/O */
   76809             :           friend class AstSpecificDataManagingClassStorageClass;
   76810             :     public:
   76811             :       /*! \brief IR node constructor to support AST File I/O */
   76812             :           SgLocatedNodeSupport( const SgLocatedNodeSupportStorageClass& source );
   76813             : 
   76814             :  // private: // JJW hack
   76815             :        /*
   76816             :           name AST Memory Allocation Support Variables
   76817             :           Memory allocations support variables 
   76818             : 
   76819             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   76820             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   76821             :           and support the AST File I/O Mechanism.
   76822             :        */
   76823             :       /* */
   76824             : 
   76825             :     public:
   76826             : 
   76827             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   76828             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   76829             :       // virtual SgNode* addRegExpAttribute();
   76830             :       /*! \brief Support for AST matching using regular expression.
   76831             : 
   76832             :           This support is incomplete and the subject of current research to define 
   76833             :           RegEx trees to support inexact matching.
   76834             :        */
   76835             :           SgLocatedNodeSupport* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   76836             : 
   76837             : // *** COMMON CODE SECTION ENDS HERE ***
   76838             : 
   76839             : 
   76840             : // End of memberFunctionString
   76841             : // Start of memberFunctionString
   76842             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   76843             : 
   76844             :      // the generated cast function
   76845             :      // friend ROSE_DLL_API SgLocatedNodeSupport* isSgLocatedNodeSupport ( SgNode* s );
   76846             : 
   76847             :           typedef SgLocatedNode base_node_type;
   76848             : 
   76849             : 
   76850             : // End of memberFunctionString
   76851             : 
   76852             : 
   76853             :      public: 
   76854             :          virtual ~SgLocatedNodeSupport();
   76855             : 
   76856             : 
   76857             :      public: 
   76858             :          SgLocatedNodeSupport(Sg_File_Info* startOfConstruct ); 
   76859             :          SgLocatedNodeSupport(); 
   76860             : 
   76861             :     protected:
   76862             : 
   76863             :     friend struct Rose::Traits::generated::describe_node_t<SgLocatedNodeSupport>;
   76864             : 
   76865             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76866             : 
   76867             : 
   76868             :    };
   76869             : #endif
   76870             : 
   76871             : // postdeclarations for SgLocatedNodeSupport
   76872             : 
   76873             : /* #line 76874 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76874             : 
   76875             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   76876             : 
   76877             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76878             : 
   76879             : 
   76880             : /* #line 76881 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76881             : 
   76882             : 
   76883             : 
   76884             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76885             : 
   76886             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   76887             : //      This code is automatically generated for each 
   76888             : //      terminal and non-terminal within the defined 
   76889             : //      grammar.  There is a simple way to change the 
   76890             : //      code to fix bugs etc.  See the ROSE README file
   76891             : //      for directions.
   76892             : 
   76893             : // tps: (02/22/2010): Adding DLL export requirements
   76894             : #include "rosedll.h"
   76895             : 
   76896             : // predeclarations for SgCommonBlockObject
   76897             : 
   76898             : /* #line 76899 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76899             : 
   76900             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   76901             : 
   76902             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   76903             : 
   76904             : #if 1
   76905             : // Class Definition for SgCommonBlockObject
   76906             : class ROSE_DLL_API SgCommonBlockObject  : public SgLocatedNodeSupport
   76907             :    {
   76908             :      public:
   76909             : 
   76910             : 
   76911             : /* #line 76912 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   76912             : 
   76913             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   76914             : // Start of memberFunctionString
   76915             : /* #line 2380 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   76916             : 
   76917             : 
   76918             : 
   76919             : // End of memberFunctionString
   76920             : // Start of memberFunctionString
   76921             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   76922             : 
   76923             : // *** COMMON CODE SECTION BEGINS HERE ***
   76924             : 
   76925             :     public:
   76926             : 
   76927             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   76928             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   76929             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   76930             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   76931             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   76932             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   76933             : 
   76934             :       /*! \brief returns a string representing the class name */
   76935             :           virtual std::string class_name() const override;
   76936             : 
   76937             :       /*! \brief returns new style SageIII enum values */
   76938             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   76939             : 
   76940             :       /*! \brief static variant value */
   76941             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   76942             :        // static const VariantT static_variant = V_SgCommonBlockObject;
   76943             :           enum { static_variant = V_SgCommonBlockObject };
   76944             : 
   76945             :        /* the generated cast function */
   76946             :       /*! \brief Casts pointer from base class to derived class */
   76947             :           ROSE_DLL_API friend       SgCommonBlockObject* isSgCommonBlockObject(       SgNode * s );
   76948             : 
   76949             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   76950             :           ROSE_DLL_API friend const SgCommonBlockObject* isSgCommonBlockObject( const SgNode * s );
   76951             : 
   76952             :      // ******************************************
   76953             :      // * Memory Pool / New / Delete
   76954             :      // ******************************************
   76955             : 
   76956             :      public:
   76957             :           /// \private
   76958             :           static const unsigned pool_size; //
   76959             :           /// \private
   76960             :           static std::vector<unsigned char *> pools; //
   76961             :           /// \private
   76962             :           static SgCommonBlockObject * next_node; // 
   76963             : 
   76964             :           /// \private
   76965             :           static unsigned long initializeStorageClassArray(SgCommonBlockObjectStorageClass *); //
   76966             : 
   76967             :           /// \private
   76968             :           static void clearMemoryPool(); //
   76969             :           static void deleteMemoryPool(); //
   76970             : 
   76971             :           /// \private
   76972             :           static void extendMemoryPoolForFileIO(); //
   76973             : 
   76974             :           /// \private
   76975             :           static SgCommonBlockObject * getPointerFromGlobalIndex(unsigned long); //
   76976             :           /// \private
   76977             :           static SgCommonBlockObject * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   76978             : 
   76979             :           /// \private
   76980             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   76981             :           /// \private
   76982             :           static void resetValidFreepointers(); //
   76983             :           /// \private
   76984             :           static unsigned long getNumberOfLastValidPointer(); //
   76985             : 
   76986             : 
   76987             : #if defined(INLINE_FUNCTIONS)
   76988             :       /*! \brief returns pointer to newly allocated IR node */
   76989             :           inline void *operator new (size_t size);
   76990             : #else
   76991             :       /*! \brief returns pointer to newly allocated IR node */
   76992             :           void *operator new (size_t size);
   76993             : #endif
   76994             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   76995             :           void operator delete (void* pointer, size_t size);
   76996             : 
   76997             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   76998           0 :           void operator delete (void* pointer)
   76999             :              {
   77000             :             // This is the generated delete operator...
   77001           0 :                SgCommonBlockObject::operator delete (pointer,sizeof(SgCommonBlockObject));
   77002             :              }
   77003             : 
   77004             :       /*! \brief Returns the total number of IR nodes of this type */
   77005             :           static size_t numberOfNodes();
   77006             : 
   77007             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   77008             :           static size_t memoryUsage();
   77009             : 
   77010             :       // End of scope which started in IR nodes specific code 
   77011             :       /* */
   77012             : 
   77013             :       /* name Internal Functions
   77014             :           \brief Internal functions ... incomplete-documentation
   77015             : 
   77016             :           These functions have been made public as part of the design, but they are suggested for internal use 
   77017             :           or by particularly knowledgeable users for specialized tools or applications.
   77018             : 
   77019             :           \internal We could not make these private because they are required by user for special purposes. And 
   77020             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   77021             :          
   77022             :        */
   77023             : 
   77024             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   77025             :        // overridden in every class by *generated* implementation
   77026             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   77027             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   77028             :        // MS: 06/28/02 container of names of variables or container indices 
   77029             :        // used used in the traversal to access AST successor nodes
   77030             :        // overridden in every class by *generated* implementation
   77031             :       /*! \brief container of names of variables or container indices used used in the traversal
   77032             :           to access AST successor nodes overridden in every class by *generated* implementation */
   77033             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   77034             : 
   77035             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   77036             :        // than all the vector copies. The implementation for these functions is generated for each class.
   77037             :       /*! \brief return number of children in the traversal successor list */
   77038             :           virtual size_t get_numberOfTraversalSuccessors() override;
   77039             :       /*! \brief index-based access to traversal successors by index number */
   77040             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   77041             :       /*! \brief index-based access to traversal successors by child node */
   77042             :           virtual size_t get_childIndex(SgNode *child) override;
   77043             : 
   77044             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   77045             :        // MS: 08/16/2002 method for generating RTI information
   77046             :       /*! \brief return C++ Runtime-Time-Information */
   77047             :           virtual RTIReturnType roseRTI() override;
   77048             : #endif
   77049             :       /* */
   77050             : 
   77051             : 
   77052             : 
   77053             :       /* name Deprecated Functions
   77054             :           \brief Deprecated functions ... incomplete-documentation
   77055             : 
   77056             :           These functions have been deprecated from use.
   77057             :        */
   77058             :       /* */
   77059             : 
   77060             :       /*! returns a C style string (char*) representing the class name */
   77061             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   77062             : 
   77063             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   77064             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   77065             : #if 0
   77066             :       /*! returns old style Sage II enum values */
   77067             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   77068             :       /*! returns old style Sage II enum values */
   77069             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   77070             : #endif
   77071             :       /* */
   77072             : 
   77073             : 
   77074             : 
   77075             : 
   77076             :      public:
   77077             :       /* name Traversal Support Functions
   77078             :           \brief Traversal support functions ... incomplete-documentation
   77079             : 
   77080             :           These functions have been made public as part of the design, but they are suggested for internal use 
   77081             :           or by particularly knowledgable users for specialized tools or applications.
   77082             :        */
   77083             :       /* */
   77084             : 
   77085             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   77086             :        // (inferior to ROSE traversal mechanism, experimental).
   77087             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   77088             :        */
   77089             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   77090             : 
   77091             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   77092             :       /*! \brief support for the classic visitor pattern done in GoF */
   77093             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   77094             : 
   77095             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   77096             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   77097             :        */
   77098             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   77099             : 
   77100             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   77101             :        */
   77102             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   77103             : 
   77104             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   77105             :        // This traversal helps support internal tools that call static member functions.
   77106             :        // note: this function operates on the memory pools.
   77107             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   77108             :        */
   77109             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   77110             :       /* */
   77111             : 
   77112             : 
   77113             :      public:
   77114             :       /* name Memory Allocation Functions
   77115             :           \brief Memory allocations functions ... incomplete-documentation
   77116             : 
   77117             :           These functions have been made public as part of the design, but they are suggested for internal use 
   77118             :           or by particularly knowledgable users for specialized tools or applications.
   77119             :        */
   77120             :       /* */
   77121             : 
   77122             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   77123             : 
   77124             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   77125             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   77126             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   77127             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   77128             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   77129             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   77130             :           being used with the AST File I/O mechanism.
   77131             :        */
   77132             :           virtual bool isInMemoryPool() override;
   77133             : 
   77134             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   77135             : 
   77136             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   77137             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   77138             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   77139             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   77140             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   77141             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   77142             :           being used with the AST File I/O mechanism.
   77143             :        */
   77144             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   77145             : 
   77146             :       // DQ (4/30/2006): Modified to be a const function.
   77147             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   77148             : 
   77149             :           This functions is part of general support for many possible tools to operate 
   77150             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   77151             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   77152             :           less than the set of pointers used by the AST file I/O. This is part of
   77153             :           work implemented by Andreas, and support tools such as the AST graph generation.
   77154             : 
   77155             :           \warning This function can return unexpected data members and thus the 
   77156             :                    order and the number of elements is unpredicable and subject 
   77157             :                    to change.
   77158             : 
   77159             :           \returns STL vector of pairs of SgNode* and strings
   77160             :        */
   77161             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   77162             : 
   77163             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   77164             : 
   77165             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   77166             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   77167             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   77168             : 
   77169             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   77170             :                    and subject to change.
   77171             :        */
   77172             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   77173             : 
   77174             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   77175             : 
   77176             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   77177             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   77178             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   77179             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   77180             : 
   77181             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   77182             : 
   77183             :           \returns long
   77184             :        */
   77185             :           virtual long getChildIndex( SgNode* childNode ) const override;
   77186             : 
   77187             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   77188             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   77189             :       /* \brief Constructor for use by AST File I/O Mechanism
   77190             : 
   77191             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   77192             :           which obtained via fast binary file I/O from disk.
   77193             :        */
   77194             :        // SgCommonBlockObject( SgCommonBlockObjectStorageClass& source );
   77195             : 
   77196             : 
   77197             : 
   77198             : 
   77199             : 
   77200             :  // JH (10/24/2005): methods added to support the ast file IO
   77201             :     private:
   77202             : 
   77203             :       /* name AST Memory Allocation Support Functions
   77204             :           \brief Memory allocations support....
   77205             : 
   77206             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   77207             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   77208             :           and support the AST File I/O Mechanism.
   77209             :        */
   77210             :       /* */
   77211             : 
   77212             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   77213             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   77214             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   77215             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   77216             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   77217             :           a correspinding one in the AST_FILE_IO class!
   77218             :        */
   77219             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   77220             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   77221             :       /* \brief Typedef used for low level memory access.
   77222             :        */
   77223             :        // typedef unsigned char* TestType;
   77224             : 
   77225             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   77226             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   77227             :       /* \brief Typedef used to hold memory addresses as values.
   77228             :        */
   77229             :        // typedef unsigned long  AddressType;
   77230             : 
   77231             : 
   77232             : 
   77233             :        // necessary, to have direct access to the p_freepointer and the private methods !
   77234             :       /*! \brief friend class declaration to support AST File I/O */
   77235             :           friend class AST_FILE_IO;
   77236             : 
   77237             :       /*! \brief friend class declaration to support AST File I/O */
   77238             :           friend class SgCommonBlockObjectStorageClass;
   77239             : 
   77240             :       /*! \brief friend class declaration to support AST File I/O */
   77241             :           friend class AstSpecificDataManagingClass;
   77242             : 
   77243             :       /*! \brief friend class declaration to support AST File I/O */
   77244             :           friend class AstSpecificDataManagingClassStorageClass;
   77245             :     public:
   77246             :       /*! \brief IR node constructor to support AST File I/O */
   77247             :           SgCommonBlockObject( const SgCommonBlockObjectStorageClass& source );
   77248             : 
   77249             :  // private: // JJW hack
   77250             :        /*
   77251             :           name AST Memory Allocation Support Variables
   77252             :           Memory allocations support variables 
   77253             : 
   77254             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   77255             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   77256             :           and support the AST File I/O Mechanism.
   77257             :        */
   77258             :       /* */
   77259             : 
   77260             :     public:
   77261             : 
   77262             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   77263             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   77264             :       // virtual SgNode* addRegExpAttribute();
   77265             :       /*! \brief Support for AST matching using regular expression.
   77266             : 
   77267             :           This support is incomplete and the subject of current research to define 
   77268             :           RegEx trees to support inexact matching.
   77269             :        */
   77270             :           SgCommonBlockObject* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   77271             : 
   77272             : // *** COMMON CODE SECTION ENDS HERE ***
   77273             : 
   77274             : 
   77275             : // End of memberFunctionString
   77276             : // Start of memberFunctionString
   77277             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   77278             : 
   77279             :      // the generated cast function
   77280             :      // friend ROSE_DLL_API SgCommonBlockObject* isSgCommonBlockObject ( SgNode* s );
   77281             : 
   77282             :           typedef SgLocatedNodeSupport base_node_type;
   77283             : 
   77284             : 
   77285             : // End of memberFunctionString
   77286             : 
   77287             :      public: 
   77288             :          std::string get_block_name() const;
   77289             :          void set_block_name(std::string block_name);
   77290             : 
   77291             :      public: 
   77292             :          SgExprListExp* get_variable_reference_list() const;
   77293             :          void set_variable_reference_list(SgExprListExp* variable_reference_list);
   77294             : 
   77295             : 
   77296             :      public: 
   77297             :          virtual ~SgCommonBlockObject();
   77298             : 
   77299             : 
   77300             :      public: 
   77301             :          SgCommonBlockObject(Sg_File_Info* startOfConstruct ); 
   77302             :          SgCommonBlockObject(); 
   77303             : 
   77304             :     protected:
   77305             : // Start of memberFunctionString
   77306             : std::string p_block_name;
   77307             :           
   77308             : // End of memberFunctionString
   77309             : // Start of memberFunctionString
   77310             : SgExprListExp* p_variable_reference_list;
   77311             :           
   77312             : // End of memberFunctionString
   77313             : 
   77314             :     friend struct Rose::Traits::generated::describe_node_t<SgCommonBlockObject>;
   77315             :     friend struct Rose::Traits::generated::describe_field_t<SgCommonBlockObject, std::string,&SgCommonBlockObject::p_block_name>;
   77316             :     friend struct Rose::Traits::generated::describe_field_t<SgCommonBlockObject, SgExprListExp*,&SgCommonBlockObject::p_variable_reference_list>;
   77317             : 
   77318             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   77319             : 
   77320             : 
   77321             :    };
   77322             : #endif
   77323             : 
   77324             : // postdeclarations for SgCommonBlockObject
   77325             : 
   77326             : /* #line 77327 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   77327             : 
   77328             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   77329             : 
   77330             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   77331             : 
   77332             : 
   77333             : /* #line 77334 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   77334             : 
   77335             : 
   77336             : 
   77337             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   77338             : 
   77339             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   77340             : //      This code is automatically generated for each 
   77341             : //      terminal and non-terminal within the defined 
   77342             : //      grammar.  There is a simple way to change the 
   77343             : //      code to fix bugs etc.  See the ROSE README file
   77344             : //      for directions.
   77345             : 
   77346             : // tps: (02/22/2010): Adding DLL export requirements
   77347             : #include "rosedll.h"
   77348             : 
   77349             : // predeclarations for SgInitializedName
   77350             : 
   77351             : /* #line 77352 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   77352             : 
   77353             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   77354             : 
   77355             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   77356             : 
   77357             : #if 1
   77358             : // Class Definition for SgInitializedName
   77359             : class ROSE_DLL_API SgInitializedName  : public SgLocatedNodeSupport
   77360             :    {
   77361             :      public:
   77362             : 
   77363             : 
   77364             : /* #line 77365 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   77365             : 
   77366             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   77367             : // Start of memberFunctionString
   77368             : /* #line 5178 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   77369             : 
   77370             : 
   77371             :      public:
   77372             : 
   77373             :       /*! \brief Preinitialization Enum (only one value can be specified)
   77374             : 
   77375             :           Initialization information which I forget the details of ...
   77376             : 
   77377             :           \internal Only one value can be specified (at least in C and C++)
   77378             :        */
   77379             :           enum preinitialization_enum
   77380             :              {
   77381             :             // When used as entries in the preinitialization list we record extra data require to reset instantiated template names
   77382             :                e_unknown_preinitialization = 0, /*!< default value */
   77383             :                e_virtual_base_class        = 1, /*!< virtual base class value */
   77384             :                e_nonvirtual_base_class     = 2, /*!< nonvirtual base class value */
   77385             :                e_data_member               = 3, /*!< data member value */
   77386             :                e_delegation_constructor    = 4, /*!< delegation constructor (C++11 feature) */
   77387             :                e_last_preinitialization         /*!< last value (upper bound on range of values, used in error checking) */
   77388             :              };
   77389             : 
   77390             :       /*! \brief Register names (x86 specific GNU names).
   77391             : 
   77392             :           \internal These are all machine-specific.
   77393             :        */
   77394             :           enum asm_register_name_enum
   77395             :              {
   77396             :                e_invalid_register = 0,  /*!< error value */
   77397             :                e_memory_register,       /*!< memory */
   77398             :                e_register_a,
   77399             :                e_register_b,
   77400             :                e_register_c,
   77401             :                e_register_d,            /*!< eax, ebx, ecx, edx */
   77402             :                e_register_si,
   77403             :                e_register_di,
   77404             :                e_register_bp,
   77405             :                e_register_sp,           /*!< esi, edi, ebp, esp */
   77406             :                e_register_r8,
   77407             :                e_register_r9,
   77408             :                e_register_r10,
   77409             :                e_register_r11,          /*!< x86-64 extra integer registers */
   77410             :                e_register_r12,
   77411             :                e_register_r13,
   77412             :                e_register_r14,
   77413             :                e_register_r15,
   77414             :                e_register_st0,
   77415             :                e_register_st1,
   77416             :                e_register_st2,
   77417             :                e_register_st3,          /*!< 80387 floating point stack */
   77418             :                e_register_st4,
   77419             :                e_register_st5,
   77420             :                e_register_st6,
   77421             :                e_register_st7,
   77422             :                e_register_mm0,
   77423             :                e_register_mm1,
   77424             :                e_register_mm2,
   77425             :                e_register_mm3,          /*!< MMX registers */
   77426             :                e_register_mm4,
   77427             :                e_register_mm5,
   77428             :                e_register_mm6,
   77429             :                e_register_mm7,
   77430             :                e_register_f0,
   77431             :                e_register_f1,
   77432             :                e_register_f2,
   77433             :                e_register_f3,           /*!< SSE/SSE2 registers */
   77434             :                e_register_f4,
   77435             :                e_register_f5,
   77436             :                e_register_f6,
   77437             :                e_register_f7,
   77438             :                e_register_f8,
   77439             :                e_register_f9,
   77440             :                e_register_f10,
   77441             :                e_register_f11,          /*!< x86-64 extra SSE registers */
   77442             :                e_register_f12,
   77443             :                e_register_f13,
   77444             :                e_register_f14,
   77445             :                e_register_f15,
   77446             :                e_register_flags,
   77447             :                e_register_fpsr,
   77448             :                e_register_dirflag,      /*!< control registers */
   77449             :                e_register_f16,
   77450             :                e_register_f17,
   77451             :                e_register_f18,
   77452             :                e_register_f19,
   77453             :                e_register_f20,
   77454             :                e_unrecognized_register, /*!< used to represent an unrecognized register. */
   77455             :                e_last_register
   77456             :              };
   77457             : 
   77458             :        // DQ (1/3/2009): This might imply that we need a variable modifier (SgVariableModifier
   77459             :        // (as a new IR node, but for now implement these directly since they are GNU specific
   77460             :        // attributes (extensions)).
   77461             :           enum gnu_variable_attribute_enum
   77462             :              {
   77463             :             // DQ (12/4/2007): Added support for GNU specific attributes
   77464             :                e_gnu_attribute__weak__                   = 0, /*!< GNU specific attribute for (GNU extension) */
   77465             :                e_gnu_attribute__unused__                 = 1, /*!< GNU specific attribute for (GNU extension) */
   77466             :                e_gnu_attribute__used__                   = 2, /*!< GNU specific attribute for (GNU extension) */
   77467             :                e_gnu_attribute__deprecated__             = 3, /*!< GNU specific attribute for (GNU extension) */
   77468             :                e_gnu_attribute__nocommon__               = 4, /*!< GNU specific attribute for (GNU extension) */
   77469             :                e_gnu_attribute__transparent_union__      = 5, /*!< GNU specific attribute for (GNU extension) */
   77470             :                e_gnu_attribute__weakref__                = 6,/*!< GNU specific attribute for (GNU extension) */
   77471             : 
   77472             :             // DQ (12/30/2013): Added support fo packing for variables (e.g. field values), instead of just there types.
   77473             :             // Also, fixed bug where packed was same enum value as weakref
   77474             :                e_gnu_attribute__packed__                 = 7,/*!< GNU specific attribute for (GNU extension) */
   77475             : 
   77476             :             // DQ (1/6/2014): Added support for GNU noreturn attribute
   77477             :                e_gnu_attribute__noreturn__               = 8,/*!< GNU specific attribute for (GNU extension) */
   77478             :                e_gnu_attribute__noreorder__              = 9,/*!< GNU specific attribute for (GNU extension) */
   77479             : 
   77480             :                e_ms_declspec_parameter_appdomain    = 10, /*!< Microsoft declspec() attributes */
   77481             :                e_ms_declspec_parameter_deprecated   = 11, /*!< Microsoft declspec() attributes */
   77482             :                e_ms_declspec_parameter_dllimport    = 12, /*!< Microsoft declspec() attributes */
   77483             :                e_ms_declspec_parameter_dllexport    = 13, /*!< Microsoft declspec() attributes */
   77484             :                e_ms_declspec_parameter_novtable     = 14, /*!< Microsoft declspec() attributes */
   77485             :                e_ms_declspec_parameter_process      = 15, /*!< Microsoft declspec() attributes */
   77486             :                e_ms_declspec_parameter_property     = 16, /*!< Microsoft declspec() attributes */
   77487             :                e_ms_declspec_parameter_restrict     = 17, /*!< Microsoft declspec() attributes */
   77488             :                e_ms_declspec_parameter_selectany    = 18, /*!< Microsoft declspec() attributes */
   77489             :                e_ms_declspec_parameter_thread       = 19, /*!< Microsoft declspec() attributes */
   77490             :                e_ms_declspec_parameter_uuid         = 20, /*!< Microsoft declspec() attributes */
   77491             : 
   77492             :                e_last_gnu_variable_attribute /*!< last value (upper bound on range of values, used in error checking) */
   77493             :              };
   77494             : 
   77495             :         // driscoll6 (8/4/11): support for excess specifiers in python (*args and **kwargs)
   77496             :           enum excess_specifier_enum
   77497             :              {
   77498             :                e_excess_specifier_none = 0,
   77499             :                e_excess_specifier_positionals,
   77500             :                e_excess_specifier_keywords,
   77501             :                e_excess_specifier_last /* sentry */
   77502             :              };
   77503             : 
   77504             :           bool checkBit ( unsigned int bit ) const;
   77505             :           void setBit ( unsigned int bit );
   77506             :           void unsetBit ( unsigned int bit );
   77507             : 
   77508             :           bool isGnuAttributeWeak() const;
   77509             :           void setGnuAttributeWeak();
   77510             :           void unsetGnuAttributeWeak();
   77511             : 
   77512             :           bool isGnuAttributeUnused() const;
   77513             :           void setGnuAttributeUnused();
   77514             :           void unsetGnuAttributeUnused();
   77515             : 
   77516             :           bool isGnuAttributeUsed() const;
   77517             :           void setGnuAttributeUsed();
   77518             :           void unsetGnuAttributeUsed();
   77519             : 
   77520             :           bool isGnuAttributeDeprecated() const;
   77521             :           void setGnuAttributeDeprecated();
   77522             :           void unsetGnuAttributeDeprecated();
   77523             : 
   77524             :           bool isGnuAttributeNoCommon() const;
   77525             :           void setGnuAttributeNoCommon();
   77526             :           void unsetGnuAttributeNoCommon();
   77527             : 
   77528             :           bool isGnuAttributeTransparentUnion() const;
   77529             :           void setGnuAttributeTransparentUnion();
   77530             :           void unsetGnuAttributeTransparentUnion();
   77531             : 
   77532             :           bool isGnuAttributeWeakReference() const;
   77533             :           void setGnuAttributeWeakReference();
   77534             :           void unsetGnuAttributeWeakReference();
   77535             : 
   77536             :        // DQ (12/30/2013): Added support fo packing for variables (e.g. field values), instead of just there types.
   77537             :        // The differences are represented in test codes: test2013_104.c and test2013_113.c.
   77538             :           bool isGnuAttributePacked() const;
   77539             :           void setGnuAttributePacked();
   77540             :           void unsetGnuAttributePacked();
   77541             : 
   77542             :        // DQ (1/6/2014): Added support for noreturn attribute on function parameters (appies only for function pointers used as function parameters).
   77543             :           bool isGnuAttributeNoReturn() const;
   77544             :           void setGnuAttributeNoReturn();
   77545             :           void unsetGnuAttributeNoReturn();
   77546             : 
   77547             :           bool isGnuAttributeNoReorder() const;
   77548             :           void setGnuAttributeNoReorder();
   77549             :           void unsetGnuAttributeNoReorder();
   77550             : 
   77551             : #if 0
   77552             :  // DQ (8/17/2014): Associated Microsoft attributes that are valid in a function parameter.
   77553             :     appdomain
   77554             :     deprecated
   77555             :     dllimport
   77556             :     dllexport
   77557             :     novtable
   77558             :     process
   77559             :     restrict
   77560             :     selectany
   77561             :     thread
   77562             :     uuid(" ComObjectGUID ")
   77563             : #endif
   77564             : 
   77565             :           bool is_ms_declspec_parameter_appdomain() const;
   77566             :           void set_ms_declspec_parameter_appdomain();
   77567             :           void unset_ms_declspec_parameter_appdomain();
   77568             : 
   77569             :           bool is_ms_declspec_parameter_deprecated() const;
   77570             :           void set_ms_declspec_parameter_deprecated();
   77571             :           void unset_ms_declspec_parameter_deprecated();
   77572             : 
   77573             :           bool is_ms_declspec_parameter_dllimport() const;
   77574             :           void set_ms_declspec_parameter_dllimport();
   77575             :           void unset_ms_declspec_parameter_dllimport();
   77576             : 
   77577             :           bool is_ms_declspec_parameter_dllexport() const;
   77578             :           void set_ms_declspec_parameter_dllexport();
   77579             :           void unset_ms_declspec_parameter_dllexport();
   77580             : 
   77581             :           bool is_ms_declspec_parameter_novtable() const;
   77582             :           void set_ms_declspec_parameter_novtable();
   77583             :           void unset_ms_declspec_parameter_novtable();
   77584             : 
   77585             :           bool is_ms_declspec_parameter_process() const;
   77586             :           void set_ms_declspec_parameter_process();
   77587             :           void unset_ms_declspec_parameter_process();
   77588             : 
   77589             :           bool is_ms_declspec_parameter_restrict() const;
   77590             :           void set_ms_declspec_parameter_restrict();
   77591             :           void unset_ms_declspec_parameter_restrict();
   77592             : 
   77593             :           bool is_ms_declspec_parameter_selectany() const;
   77594             :           void set_ms_declspec_parameter_selectany();
   77595             :           void unset_ms_declspec_parameter_selectany();
   77596             : 
   77597             :           bool is_ms_declspec_parameter_thread() const;
   77598             :           void set_ms_declspec_parameter_thread();
   77599             :           void unset_ms_declspec_parameter_thread();
   77600             : 
   77601             :           bool is_ms_declspec_parameter_uuid() const;
   77602             :           void set_ms_declspec_parameter_uuid();
   77603             :           void unset_ms_declspec_parameter_uuid();
   77604             : 
   77605             :           void post_construction_initialization() override;
   77606             : 
   77607             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   77608             :        // Overriding SgNode versions of these
   77609             :           virtual unsigned int cfgIndexForEnd() const override;
   77610             :           virtual bool cfgIsIndexInteresting(unsigned int index) const override;
   77611             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
   77612             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
   77613             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
   77614             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
   77615             : #endif
   77616             : 
   77617             :           SgStorageModifier & get_storageModifier();
   77618             : 
   77619             :        // DQ (8/10/2010): Added const version of this function!
   77620             :           const SgStorageModifier & get_storageModifier() const;
   77621             : 
   77622             :       //  These are automatically generated! (not an option currently)
   77623             :       //  SgInitializedName();
   77624             :       // ~SgInitializedName();
   77625             :           SgInitializedName(
   77626             :                const SgName& name,
   77627             :                SgType *typeptr,
   77628             :                SgInitializer* iptr = 0,
   77629             :                SgDeclarationStatement *declptr = 0,
   77630             : //  QY 11/2/04  removed itemptr
   77631             : //               SgInitializedName *itemptr = 0,
   77632             :                SgInitializedName *prev_decl_item = 0 ) ROSE_DEPRECATED_FUNCTION;
   77633             : 
   77634             :        // DQ (8/4/2006): New constructor that explicitly includes the Sg_File_Info and SgScopeStatement (recently added data members)
   77635             :           SgInitializedName ( Sg_File_Info* fileInfo, const SgName& name, SgType *typeptr, SgInitializer* iptr,
   77636             :                               SgDeclarationStatement *declptr, SgScopeStatement* scope, SgInitializedName *prev_itemptr );
   77637             : 
   77638             : #ifdef BUILD_X_VERSION_TERMINALS
   77639             :           SgInitializedName(
   77640             :                const SgName& name,
   77641             :                SgType *typeptr,
   77642             :                SgInitializer* iptr = 0,
   77643             :                SgX_DeclarationStatement *declptr = 0,
   77644             : //               SgInitializedName *itemptr = 0,
   77645             :                SgInitializedName *prev_decl_item = 0 );
   77646             : #endif
   77647             : 
   77648             :        // DQ (10/13/2014): Adding a default constructor for compatability with what was previously the API before the newer aterm support.
   77649             :           SgInitializedName() ROSE_DEPRECATED_FUNCTION;
   77650             : 
   77651             :           SgInitializedName(const SgInitializedName& ptr);
   77652             : 
   77653             :           SgInitializedName& operator= (const SgInitializedName& ptr);
   77654             : 
   77655             :           bool operator== (const SgInitializedName& ) const;
   77656             :           bool operator< (const SgInitializedName&) const;
   77657             : 
   77658             :        // DQ (10/9/2007): Use the ROSETTA generated version to test failure
   77659             :        // DQ (10/5/2007): This custom function to match the version that would be automatically by ROSETTA, but we
   77660             :        // want to have a custom version of set_name(SgName name) that permits names to be reset (unloaded from the
   77661             :        // symbol table are reloaded into the symbol table).
   77662             :        // SgName get_name() const;
   77663             : 
   77664             :        // DQ (10/9/2007): Use the ROSETTA generated version to test failure
   77665             :        // DQ (10/5/2007): Put back into place afterhaving been removed by accident in 12/xx/2004
   77666             :        // AJ (10/21/2004): Added function to support changing names of symbols, note that void set_name(SgName name)
   77667             :        // would be the automatically generated function.
   77668             :        // void set_name(SgName name);
   77669             :        // int set_name(SgName new_name);
   77670             : 
   77671             :           SgType *get_type() const;
   77672             :           void set_type(SgType *t);
   77673             : 
   77674             :           SgInitializer *get_initializer() const;
   77675             :           void set_initializer(SgInitializer* i);
   77676             : 
   77677             : #ifdef BUILD_X_VERSION_TERMINALS
   77678             :        // Modified from SAGE (added access functions for X version of DeclarationStatement data member
   77679             :           SgX_DeclarationStatement *get_X_declaration() const;
   77680             :           void set_X_declaration(SgX_DeclarationStatement* decl);
   77681             : #endif
   77682             : 
   77683             :           SgDeclarationStatement *get_declaration() const;
   77684             :          // void set_declaration(SgDeclarationStatement* decl);
   77685             : 
   77686             :           SgDeclarationStatement *get_definition() const;
   77687             :           void set_definition(SgDeclarationStatement* def);
   77688             : 
   77689             :        // DQ (8/2/2004): Force an explicit function matching the virtual function defined in SgNode
   77690             :        // Sg_File_Info* get_file_info() const;
   77691             : 
   77692             :       //! Returns the name with appropriate qualified names representing nested scopes
   77693             :           SgName get_qualified_name() const;
   77694             : 
   77695             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
   77696             :           virtual SgName get_mangled_name(void) const;
   77697             : 
   77698             :        // DQ (11/6/2006): use this to return the startOfConstruct source position.
   77699             :        //   virtual Sg_File_Info* get_file_info(void) const;
   77700             :        //   virtual void set_file_info(Sg_File_Info* X);
   77701             : 
   77702             :        // DQ (2/6/2007): Added support to get the symbol from the declaration (via the symbol table in the scope)
   77703             :       //! Get the associated SgSymbol from the symbol table located in the scope, without considering possible prev_decl_item. Internal use only. Users should use search_for_symbol_from_symbol_table() instead.
   77704             :           SgSymbol* get_symbol_from_symbol_table() const;
   77705             : 
   77706             :        // PC (10/1/2009): Added support to get the symbol from the correct associated declaration
   77707             :        //! User interface for retrieving the associated symbol. It searches through the possible chain of prev_decl_item.
   77708             :           SgSymbol* search_for_symbol_from_symbol_table() const;
   77709             : 
   77710             : #if ALT_FIXUP_COPY
   77711             :        // DQ (11/7/2007): These need to be called separately (see documentation)
   77712             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
   77713             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
   77714             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
   77715             : #else
   77716             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
   77717             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
   77718             : #endif
   77719             : 
   77720             :        // DQ (12/16/2013): Added support for name qualification on SgInitializedName for use in preinitialization lists.
   77721             :           SgName get_qualified_name_prefix() const;
   77722             : 
   77723             :        // DQ (3/21/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   77724             :           int get_name_qualification_length() const;
   77725             :           void set_name_qualification_length(int name_qualification_length_for_type);
   77726             : 
   77727             :        // DQ (3/31/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   77728             :           bool get_type_elaboration_required() const;
   77729             :           void set_type_elaboration_required(bool type_elaboration_required_for_type);
   77730             : 
   77731             :        // DQ (3/31/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   77732             :           bool get_global_qualification_required() const;
   77733             :           void set_global_qualification_required(bool global_qualification_required_for_type);
   77734             : 
   77735             :        // DQ (5/29/2011): Added to support for new qualified name generation
   77736             :       //! This function generates the qualified name prefix to be used with the named declaration (only applied to restricted set of declarations where name qualification can be used).
   77737             :           SgName get_qualified_name_prefix_for_type() const;
   77738             : 
   77739             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   77740             :           int get_name_qualification_length_for_type() const;
   77741             :           void set_name_qualification_length_for_type(int name_qualification_length_for_type);
   77742             : 
   77743             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   77744             :           bool get_type_elaboration_required_for_type() const;
   77745             :           void set_type_elaboration_required_for_type(bool type_elaboration_required_for_type);
   77746             : 
   77747             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
   77748             :           bool get_global_qualification_required_for_type() const;
   77749             :           void set_global_qualification_required_for_type(bool global_qualification_required_for_type);
   77750             : 
   77751             : 
   77752             : 
   77753             : // End of memberFunctionString
   77754             : // Start of memberFunctionString
   77755             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   77756             : 
   77757             : 
   77758             :      /* name Persistant Attribute Mechanism
   77759             : 
   77760             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
   77761             :          multiple passes. Note that these attributes are persistant in that they are preserved
   77762             :          if the AST is written out to a file and read in from a file.  However, virtual function
   77763             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
   77764             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
   77765             :          sophisticated mechanisms are available within the AstAttributeMechanism object
   77766             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
   77767             :          access is required, however mostly only internal tools use this lower level support).
   77768             : 
   77769             :          \internal This used to be a public data member, but has been changed to be a protected
   77770             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
   77771             :          but some of the names and the syntax for calling the interface have changed. The
   77772             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
   77773             :       */
   77774             :      /* */
   77775             :      //! Add a new attribute represented by the named string.
   77776             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
   77777             :      //! Returns attribute of name 's'.
   77778             :          virtual AstAttribute* getAttribute(std::string s) const override;
   77779             :      //! Replace existing attribute of name 's' with new AstAttribute.
   77780             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
   77781             :      /*! \brief This is a wrapper function with the following semantics:
   77782             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
   77783             :          otherwise \b updateAttribute(s,a); is called.
   77784             :       */
   77785             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
   77786             :      //! Remove attribute of name 's' if present.
   77787             :          virtual void removeAttribute(std::string s) override;
   77788             :      //! Tests if attribute of name 's' is present.
   77789             :          virtual bool attributeExists(std::string s) const override;
   77790             :      //! Returns the number of attributes on this IR node.
   77791             :          virtual int numberOfAttributes() const override;
   77792             : 
   77793             :      /*! \fn AstAttributeMechanism* SgInitializedName::get_attributeMechanism() const;
   77794             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
   77795             :                 a pointer to it is returned, else error.
   77796             : 
   77797             :          This is an access function used for getting the interally held pointer to a valid
   77798             :          AstAttributeMechanism. It provides access to lower level functionality of the
   77799             :          AstAttributeMechanism, put is mostly of use to internal tools.
   77800             :       */
   77801             :      /*! \fn void SgInitializedName::set_attributeMechanism(AstAttributeMechanism* a);
   77802             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
   77803             : 
   77804             :          This is an access function used for setting the interally held pointer to a valid
   77805             :          AstAttributeMechanism.
   77806             :       */
   77807             :      /* */
   77808             : 
   77809             : 
   77810             : 
   77811             : 
   77812             : // End of memberFunctionString
   77813             : // Start of memberFunctionString
   77814             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   77815             : 
   77816             : // *** COMMON CODE SECTION BEGINS HERE ***
   77817             : 
   77818             :     public:
   77819             : 
   77820             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   77821             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   77822             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   77823             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   77824             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   77825             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   77826             : 
   77827             :       /*! \brief returns a string representing the class name */
   77828             :           virtual std::string class_name() const override;
   77829             : 
   77830             :       /*! \brief returns new style SageIII enum values */
   77831             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   77832             : 
   77833             :       /*! \brief static variant value */
   77834             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   77835             :        // static const VariantT static_variant = V_SgInitializedName;
   77836             :           enum { static_variant = V_SgInitializedName };
   77837             : 
   77838             :        /* the generated cast function */
   77839             :       /*! \brief Casts pointer from base class to derived class */
   77840             :           ROSE_DLL_API friend       SgInitializedName* isSgInitializedName(       SgNode * s );
   77841             : 
   77842             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   77843             :           ROSE_DLL_API friend const SgInitializedName* isSgInitializedName( const SgNode * s );
   77844             : 
   77845             :      // ******************************************
   77846             :      // * Memory Pool / New / Delete
   77847             :      // ******************************************
   77848             : 
   77849             :      public:
   77850             :           /// \private
   77851             :           static const unsigned pool_size; //
   77852             :           /// \private
   77853             :           static std::vector<unsigned char *> pools; //
   77854             :           /// \private
   77855             :           static SgInitializedName * next_node; // 
   77856             : 
   77857             :           /// \private
   77858             :           static unsigned long initializeStorageClassArray(SgInitializedNameStorageClass *); //
   77859             : 
   77860             :           /// \private
   77861             :           static void clearMemoryPool(); //
   77862             :           static void deleteMemoryPool(); //
   77863             : 
   77864             :           /// \private
   77865             :           static void extendMemoryPoolForFileIO(); //
   77866             : 
   77867             :           /// \private
   77868             :           static SgInitializedName * getPointerFromGlobalIndex(unsigned long); //
   77869             :           /// \private
   77870             :           static SgInitializedName * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   77871             : 
   77872             :           /// \private
   77873             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   77874             :           /// \private
   77875             :           static void resetValidFreepointers(); //
   77876             :           /// \private
   77877             :           static unsigned long getNumberOfLastValidPointer(); //
   77878             : 
   77879             : 
   77880             : #if defined(INLINE_FUNCTIONS)
   77881             :       /*! \brief returns pointer to newly allocated IR node */
   77882             :           inline void *operator new (size_t size);
   77883             : #else
   77884             :       /*! \brief returns pointer to newly allocated IR node */
   77885             :           void *operator new (size_t size);
   77886             : #endif
   77887             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   77888             :           void operator delete (void* pointer, size_t size);
   77889             : 
   77890             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   77891      110459 :           void operator delete (void* pointer)
   77892             :              {
   77893             :             // This is the generated delete operator...
   77894      110459 :                SgInitializedName::operator delete (pointer,sizeof(SgInitializedName));
   77895             :              }
   77896             : 
   77897             :       /*! \brief Returns the total number of IR nodes of this type */
   77898             :           static size_t numberOfNodes();
   77899             : 
   77900             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   77901             :           static size_t memoryUsage();
   77902             : 
   77903             :       // End of scope which started in IR nodes specific code 
   77904             :       /* */
   77905             : 
   77906             :       /* name Internal Functions
   77907             :           \brief Internal functions ... incomplete-documentation
   77908             : 
   77909             :           These functions have been made public as part of the design, but they are suggested for internal use 
   77910             :           or by particularly knowledgeable users for specialized tools or applications.
   77911             : 
   77912             :           \internal We could not make these private because they are required by user for special purposes. And 
   77913             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   77914             :          
   77915             :        */
   77916             : 
   77917             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   77918             :        // overridden in every class by *generated* implementation
   77919             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   77920             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   77921             :        // MS: 06/28/02 container of names of variables or container indices 
   77922             :        // used used in the traversal to access AST successor nodes
   77923             :        // overridden in every class by *generated* implementation
   77924             :       /*! \brief container of names of variables or container indices used used in the traversal
   77925             :           to access AST successor nodes overridden in every class by *generated* implementation */
   77926             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   77927             : 
   77928             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   77929             :        // than all the vector copies. The implementation for these functions is generated for each class.
   77930             :       /*! \brief return number of children in the traversal successor list */
   77931             :           virtual size_t get_numberOfTraversalSuccessors() override;
   77932             :       /*! \brief index-based access to traversal successors by index number */
   77933             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   77934             :       /*! \brief index-based access to traversal successors by child node */
   77935             :           virtual size_t get_childIndex(SgNode *child) override;
   77936             : 
   77937             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   77938             :        // MS: 08/16/2002 method for generating RTI information
   77939             :       /*! \brief return C++ Runtime-Time-Information */
   77940             :           virtual RTIReturnType roseRTI() override;
   77941             : #endif
   77942             :       /* */
   77943             : 
   77944             : 
   77945             : 
   77946             :       /* name Deprecated Functions
   77947             :           \brief Deprecated functions ... incomplete-documentation
   77948             : 
   77949             :           These functions have been deprecated from use.
   77950             :        */
   77951             :       /* */
   77952             : 
   77953             :       /*! returns a C style string (char*) representing the class name */
   77954             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   77955             : 
   77956             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   77957             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   77958             : #if 0
   77959             :       /*! returns old style Sage II enum values */
   77960             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   77961             :       /*! returns old style Sage II enum values */
   77962             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   77963             : #endif
   77964             :       /* */
   77965             : 
   77966             : 
   77967             : 
   77968             : 
   77969             :      public:
   77970             :       /* name Traversal Support Functions
   77971             :           \brief Traversal support functions ... incomplete-documentation
   77972             : 
   77973             :           These functions have been made public as part of the design, but they are suggested for internal use 
   77974             :           or by particularly knowledgable users for specialized tools or applications.
   77975             :        */
   77976             :       /* */
   77977             : 
   77978             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   77979             :        // (inferior to ROSE traversal mechanism, experimental).
   77980             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   77981             :        */
   77982             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   77983             : 
   77984             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   77985             :       /*! \brief support for the classic visitor pattern done in GoF */
   77986             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   77987             : 
   77988             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   77989             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   77990             :        */
   77991             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   77992             : 
   77993             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   77994             :        */
   77995             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   77996             : 
   77997             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   77998             :        // This traversal helps support internal tools that call static member functions.
   77999             :        // note: this function operates on the memory pools.
   78000             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   78001             :        */
   78002             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   78003             :       /* */
   78004             : 
   78005             : 
   78006             :      public:
   78007             :       /* name Memory Allocation Functions
   78008             :           \brief Memory allocations functions ... incomplete-documentation
   78009             : 
   78010             :           These functions have been made public as part of the design, but they are suggested for internal use 
   78011             :           or by particularly knowledgable users for specialized tools or applications.
   78012             :        */
   78013             :       /* */
   78014             : 
   78015             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   78016             : 
   78017             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   78018             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   78019             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   78020             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   78021             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   78022             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   78023             :           being used with the AST File I/O mechanism.
   78024             :        */
   78025             :           virtual bool isInMemoryPool() override;
   78026             : 
   78027             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   78028             : 
   78029             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   78030             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   78031             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   78032             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   78033             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   78034             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   78035             :           being used with the AST File I/O mechanism.
   78036             :        */
   78037             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   78038             : 
   78039             :       // DQ (4/30/2006): Modified to be a const function.
   78040             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   78041             : 
   78042             :           This functions is part of general support for many possible tools to operate 
   78043             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   78044             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   78045             :           less than the set of pointers used by the AST file I/O. This is part of
   78046             :           work implemented by Andreas, and support tools such as the AST graph generation.
   78047             : 
   78048             :           \warning This function can return unexpected data members and thus the 
   78049             :                    order and the number of elements is unpredicable and subject 
   78050             :                    to change.
   78051             : 
   78052             :           \returns STL vector of pairs of SgNode* and strings
   78053             :        */
   78054             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   78055             : 
   78056             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   78057             : 
   78058             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   78059             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   78060             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   78061             : 
   78062             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   78063             :                    and subject to change.
   78064             :        */
   78065             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   78066             : 
   78067             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   78068             : 
   78069             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   78070             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   78071             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   78072             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   78073             : 
   78074             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   78075             : 
   78076             :           \returns long
   78077             :        */
   78078             :           virtual long getChildIndex( SgNode* childNode ) const override;
   78079             : 
   78080             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   78081             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   78082             :       /* \brief Constructor for use by AST File I/O Mechanism
   78083             : 
   78084             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   78085             :           which obtained via fast binary file I/O from disk.
   78086             :        */
   78087             :        // SgInitializedName( SgInitializedNameStorageClass& source );
   78088             : 
   78089             : 
   78090             : 
   78091             : 
   78092             : 
   78093             :  // JH (10/24/2005): methods added to support the ast file IO
   78094             :     private:
   78095             : 
   78096             :       /* name AST Memory Allocation Support Functions
   78097             :           \brief Memory allocations support....
   78098             : 
   78099             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   78100             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   78101             :           and support the AST File I/O Mechanism.
   78102             :        */
   78103             :       /* */
   78104             : 
   78105             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   78106             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   78107             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   78108             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   78109             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   78110             :           a correspinding one in the AST_FILE_IO class!
   78111             :        */
   78112             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   78113             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   78114             :       /* \brief Typedef used for low level memory access.
   78115             :        */
   78116             :        // typedef unsigned char* TestType;
   78117             : 
   78118             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   78119             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   78120             :       /* \brief Typedef used to hold memory addresses as values.
   78121             :        */
   78122             :        // typedef unsigned long  AddressType;
   78123             : 
   78124             : 
   78125             : 
   78126             :        // necessary, to have direct access to the p_freepointer and the private methods !
   78127             :       /*! \brief friend class declaration to support AST File I/O */
   78128             :           friend class AST_FILE_IO;
   78129             : 
   78130             :       /*! \brief friend class declaration to support AST File I/O */
   78131             :           friend class SgInitializedNameStorageClass;
   78132             : 
   78133             :       /*! \brief friend class declaration to support AST File I/O */
   78134             :           friend class AstSpecificDataManagingClass;
   78135             : 
   78136             :       /*! \brief friend class declaration to support AST File I/O */
   78137             :           friend class AstSpecificDataManagingClassStorageClass;
   78138             :     public:
   78139             :       /*! \brief IR node constructor to support AST File I/O */
   78140             :           SgInitializedName( const SgInitializedNameStorageClass& source );
   78141             : 
   78142             :  // private: // JJW hack
   78143             :        /*
   78144             :           name AST Memory Allocation Support Variables
   78145             :           Memory allocations support variables 
   78146             : 
   78147             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   78148             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   78149             :           and support the AST File I/O Mechanism.
   78150             :        */
   78151             :       /* */
   78152             : 
   78153             :     public:
   78154             : 
   78155             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   78156             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   78157             :       // virtual SgNode* addRegExpAttribute();
   78158             :       /*! \brief Support for AST matching using regular expression.
   78159             : 
   78160             :           This support is incomplete and the subject of current research to define 
   78161             :           RegEx trees to support inexact matching.
   78162             :        */
   78163             :           SgInitializedName* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   78164             : 
   78165             : // *** COMMON CODE SECTION ENDS HERE ***
   78166             : 
   78167             : 
   78168             : // End of memberFunctionString
   78169             : // Start of memberFunctionString
   78170             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   78171             : 
   78172             :      // the generated cast function
   78173             :      // friend ROSE_DLL_API SgInitializedName* isSgInitializedName ( SgNode* s );
   78174             : 
   78175             :           typedef SgLocatedNodeSupport base_node_type;
   78176             : 
   78177             : 
   78178             : // End of memberFunctionString
   78179             : 
   78180             :      public: 
   78181             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
   78182             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
   78183             : 
   78184             :      public: 
   78185             :          std::string get_microsoft_uuid_string() const;
   78186             :          void set_microsoft_uuid_string(std::string microsoft_uuid_string);
   78187             : 
   78188             :      public: 
   78189             :          SgType* get_typeptr() const;
   78190             :          void set_typeptr(SgType* typeptr);
   78191             : 
   78192             :      public: 
   78193             :          SgInitializer* get_initptr() const;
   78194             :          void set_initptr(SgInitializer* initptr);
   78195             : 
   78196             :      public: 
   78197             :          SgInitializedName* get_prev_decl_item() const;
   78198             :          void set_prev_decl_item(SgInitializedName* prev_decl_item);
   78199             : 
   78200             : 
   78201             :      public: 
   78202             :          SgDeclarationStatement* get_declptr() const;
   78203             :          void set_declptr(SgDeclarationStatement* declptr);
   78204             : 
   78205             : 
   78206             :      public: 
   78207             :          SgScopeStatement* get_scope() const /* (getDataAccessFunctionPrototypeString) */;
   78208             :          void set_scope(SgScopeStatement* scope) /* (getDataAccessFunctionPrototypeString) */;
   78209             : 
   78210             :      public: 
   78211             :          SgInitializedName::preinitialization_enum get_preinitialization() const;
   78212             :          void set_preinitialization(SgInitializedName::preinitialization_enum preinitialization);
   78213             : 
   78214             :      public: 
   78215             :          bool get_isCoArray() const;
   78216             :          void set_isCoArray(bool isCoArray);
   78217             : 
   78218             :      public: 
   78219             :          SgInitializedName::asm_register_name_enum get_register_name_code() const;
   78220             :          void set_register_name_code(SgInitializedName::asm_register_name_enum register_name_code);
   78221             : 
   78222             :      public: 
   78223             :          SgInitializedName::excess_specifier_enum get_excess_specifier() const;
   78224             :          void set_excess_specifier(SgInitializedName::excess_specifier_enum excess_specifier);
   78225             : 
   78226             :      public: 
   78227             :          std::string get_register_name_string() const;
   78228             :          void set_register_name_string(std::string register_name_string);
   78229             : 
   78230             :      public: 
   78231             :          bool get_requiresGlobalNameQualificationOnType() const;
   78232             :          void set_requiresGlobalNameQualificationOnType(bool requiresGlobalNameQualificationOnType);
   78233             : 
   78234             :      public: 
   78235             :          bool get_shapeDeferred() const;
   78236             :          void set_shapeDeferred(bool shapeDeferred);
   78237             : 
   78238             :      public: 
   78239             :          bool get_initializationDeferred() const;
   78240             :          void set_initializationDeferred(bool initializationDeferred);
   78241             : 
   78242             :      public: 
   78243             :          SgBitVector get_gnu_attribute_modifierVector() const;
   78244             :          void set_gnu_attribute_modifierVector(SgBitVector gnu_attribute_modifierVector);
   78245             : 
   78246             :      public: 
   78247             :          unsigned long int get_gnu_attribute_initialization_priority() const;
   78248             :          void set_gnu_attribute_initialization_priority(unsigned long int gnu_attribute_initialization_priority);
   78249             : 
   78250             :      public: 
   78251             :          std::string get_gnu_attribute_named_weak_reference() const;
   78252             :          void set_gnu_attribute_named_weak_reference(std::string gnu_attribute_named_weak_reference);
   78253             : 
   78254             :      public: 
   78255             :          std::string get_gnu_attribute_named_alias() const;
   78256             :          void set_gnu_attribute_named_alias(std::string gnu_attribute_named_alias);
   78257             : 
   78258             :      public: 
   78259             :          std::string get_gnu_attribute_cleanup_function() const;
   78260             :          void set_gnu_attribute_cleanup_function(std::string gnu_attribute_cleanup_function);
   78261             : 
   78262             :      public: 
   78263             :          std::string get_gnu_attribute_section_name() const;
   78264             :          void set_gnu_attribute_section_name(std::string gnu_attribute_section_name);
   78265             : 
   78266             :      public: 
   78267             :          int get_gnu_attribute_alignment() const;
   78268             :          void set_gnu_attribute_alignment(int gnu_attribute_alignment);
   78269             : 
   78270             :      public: 
   78271             :          SgDeclarationModifier::gnu_declaration_visability_enum get_gnu_attribute_visability() const;
   78272             :          void set_gnu_attribute_visability(SgDeclarationModifier::gnu_declaration_visability_enum gnu_attribute_visability);
   78273             : 
   78274             :      public: 
   78275             :          bool get_protected_declaration() const;
   78276             :          void set_protected_declaration(bool protected_declaration);
   78277             : 
   78278             : 
   78279             : 
   78280             : 
   78281             : 
   78282             : 
   78283             : 
   78284             :      public: 
   78285             :          bool get_hasArrayTypeWithEmptyBracketSyntax() const;
   78286             :          void set_hasArrayTypeWithEmptyBracketSyntax(bool hasArrayTypeWithEmptyBracketSyntax);
   78287             : 
   78288             :      public: 
   78289             :          bool get_using_C11_Alignas_keyword() const;
   78290             :          void set_using_C11_Alignas_keyword(bool using_C11_Alignas_keyword);
   78291             : 
   78292             :      public: 
   78293             :          SgNode* get_constant_or_type_argument_for_Alignas_keyword() const;
   78294             :          void set_constant_or_type_argument_for_Alignas_keyword(SgNode* constant_or_type_argument_for_Alignas_keyword);
   78295             : 
   78296             :      public: 
   78297             :          bool get_using_auto_keyword() const;
   78298             :          void set_using_auto_keyword(bool using_auto_keyword);
   78299             : 
   78300             :      public: 
   78301             :          SgType * get_auto_decltype() const;
   78302             :          void set_auto_decltype(SgType * auto_decltype);
   78303             : 
   78304             :      public: 
   78305             :          bool get_using_device_keyword() const;
   78306             :          void set_using_device_keyword(bool using_device_keyword);
   78307             : 
   78308             :      public: 
   78309             :          bool get_is_braced_initialized() const;
   78310             :          void set_is_braced_initialized(bool is_braced_initialized);
   78311             : 
   78312             :      public: 
   78313             :          bool get_using_assignment_copy_constructor_syntax() const;
   78314             :          void set_using_assignment_copy_constructor_syntax(bool using_assignment_copy_constructor_syntax);
   78315             : 
   78316             :      public: 
   78317             :          bool get_needs_definitions() const;
   78318             :          void set_needs_definitions(bool needs_definitions);
   78319             : 
   78320             :      public: 
   78321             :          bool get_is_parameter_pack() const;
   78322             :          void set_is_parameter_pack(bool is_parameter_pack);
   78323             : 
   78324             :      public: 
   78325             :          bool get_is_pack_element() const;
   78326             :          void set_is_pack_element(bool is_pack_element);
   78327             : 
   78328             : 
   78329             :      public: 
   78330             :          virtual ~SgInitializedName();
   78331             : 
   78332             : 
   78333             :      public: 
   78334             :          SgInitializedName(Sg_File_Info* startOfConstruct , SgName name = NULL, SgType* typeptr = NULL); 
   78335             :          SgInitializedName(SgName name, SgType* typeptr); 
   78336             : 
   78337             :     protected:
   78338             : // Start of memberFunctionString
   78339             : SgName p_name;
   78340             :           
   78341             : // End of memberFunctionString
   78342             : // Start of memberFunctionString
   78343             : std::string p_microsoft_uuid_string;
   78344             :           
   78345             : // End of memberFunctionString
   78346             : // Start of memberFunctionString
   78347             : SgType* p_typeptr;
   78348             :           
   78349             : // End of memberFunctionString
   78350             : // Start of memberFunctionString
   78351             : SgInitializer* p_initptr;
   78352             :           
   78353             : // End of memberFunctionString
   78354             : // Start of memberFunctionString
   78355             : SgInitializedName* p_prev_decl_item;
   78356             :           
   78357             : // End of memberFunctionString
   78358             : // Start of memberFunctionString
   78359             : bool p_is_initializer;
   78360             :           
   78361             : // End of memberFunctionString
   78362             : // Start of memberFunctionString
   78363             : SgDeclarationStatement* p_declptr;
   78364             :           
   78365             : // End of memberFunctionString
   78366             : // Start of memberFunctionString
   78367             : SgStorageModifier* p_storageModifier;
   78368             :           
   78369             : // End of memberFunctionString
   78370             : // Start of memberFunctionString
   78371             : SgScopeStatement* p_scope;
   78372             :           
   78373             : // End of memberFunctionString
   78374             : // Start of memberFunctionString
   78375             : SgInitializedName::preinitialization_enum p_preinitialization;
   78376             :           
   78377             : // End of memberFunctionString
   78378             : // Start of memberFunctionString
   78379             : bool p_isCoArray;
   78380             :           
   78381             : // End of memberFunctionString
   78382             : // Start of memberFunctionString
   78383             : SgInitializedName::asm_register_name_enum p_register_name_code;
   78384             :           
   78385             : // End of memberFunctionString
   78386             : // Start of memberFunctionString
   78387             : SgInitializedName::excess_specifier_enum p_excess_specifier;
   78388             :           
   78389             : // End of memberFunctionString
   78390             : // Start of memberFunctionString
   78391             : std::string p_register_name_string;
   78392             :           
   78393             : // End of memberFunctionString
   78394             : // Start of memberFunctionString
   78395             : bool p_requiresGlobalNameQualificationOnType;
   78396             :           
   78397             : // End of memberFunctionString
   78398             : // Start of memberFunctionString
   78399             : bool p_shapeDeferred;
   78400             :           
   78401             : // End of memberFunctionString
   78402             : // Start of memberFunctionString
   78403             : bool p_initializationDeferred;
   78404             :           
   78405             : // End of memberFunctionString
   78406             : // Start of memberFunctionString
   78407             : SgBitVector p_gnu_attribute_modifierVector;
   78408             :           
   78409             : // End of memberFunctionString
   78410             : // Start of memberFunctionString
   78411             : unsigned long int p_gnu_attribute_initialization_priority;
   78412             :           
   78413             : // End of memberFunctionString
   78414             : // Start of memberFunctionString
   78415             : std::string p_gnu_attribute_named_weak_reference;
   78416             :           
   78417             : // End of memberFunctionString
   78418             : // Start of memberFunctionString
   78419             : std::string p_gnu_attribute_named_alias;
   78420             :           
   78421             : // End of memberFunctionString
   78422             : // Start of memberFunctionString
   78423             : std::string p_gnu_attribute_cleanup_function;
   78424             :           
   78425             : // End of memberFunctionString
   78426             : // Start of memberFunctionString
   78427             : std::string p_gnu_attribute_section_name;
   78428             :           
   78429             : // End of memberFunctionString
   78430             : // Start of memberFunctionString
   78431             : int p_gnu_attribute_alignment;
   78432             :           
   78433             : // End of memberFunctionString
   78434             : // Start of memberFunctionString
   78435             : SgDeclarationModifier::gnu_declaration_visability_enum p_gnu_attribute_visability;
   78436             :           
   78437             : // End of memberFunctionString
   78438             : // Start of memberFunctionString
   78439             : bool p_protected_declaration;
   78440             :           
   78441             : // End of memberFunctionString
   78442             : // Start of memberFunctionString
   78443             : int p_name_qualification_length;
   78444             :           
   78445             : // End of memberFunctionString
   78446             : // Start of memberFunctionString
   78447             : bool p_type_elaboration_required;
   78448             :           
   78449             : // End of memberFunctionString
   78450             : // Start of memberFunctionString
   78451             : bool p_global_qualification_required;
   78452             :           
   78453             : // End of memberFunctionString
   78454             : // Start of memberFunctionString
   78455             : int p_name_qualification_length_for_type;
   78456             :           
   78457             : // End of memberFunctionString
   78458             : // Start of memberFunctionString
   78459             : bool p_type_elaboration_required_for_type;
   78460             :           
   78461             : // End of memberFunctionString
   78462             : // Start of memberFunctionString
   78463             : bool p_global_qualification_required_for_type;
   78464             :           
   78465             : // End of memberFunctionString
   78466             : // Start of memberFunctionString
   78467             : bool p_hasArrayTypeWithEmptyBracketSyntax;
   78468             :           
   78469             : // End of memberFunctionString
   78470             : // Start of memberFunctionString
   78471             : bool p_using_C11_Alignas_keyword;
   78472             :           
   78473             : // End of memberFunctionString
   78474             : // Start of memberFunctionString
   78475             : SgNode* p_constant_or_type_argument_for_Alignas_keyword;
   78476             :           
   78477             : // End of memberFunctionString
   78478             : // Start of memberFunctionString
   78479             : bool p_using_auto_keyword;
   78480             :           
   78481             : // End of memberFunctionString
   78482             : // Start of memberFunctionString
   78483             : SgType * p_auto_decltype;
   78484             :           
   78485             : // End of memberFunctionString
   78486             : // Start of memberFunctionString
   78487             : bool p_using_device_keyword;
   78488             :           
   78489             : // End of memberFunctionString
   78490             : // Start of memberFunctionString
   78491             : bool p_is_braced_initialized;
   78492             :           
   78493             : // End of memberFunctionString
   78494             : // Start of memberFunctionString
   78495             : bool p_using_assignment_copy_constructor_syntax;
   78496             :           
   78497             : // End of memberFunctionString
   78498             : // Start of memberFunctionString
   78499             : bool p_needs_definitions;
   78500             :           
   78501             : // End of memberFunctionString
   78502             : // Start of memberFunctionString
   78503             : bool p_is_parameter_pack;
   78504             :           
   78505             : // End of memberFunctionString
   78506             : // Start of memberFunctionString
   78507             : bool p_is_pack_element;
   78508             :           
   78509             : // End of memberFunctionString
   78510             : 
   78511             :     friend struct Rose::Traits::generated::describe_node_t<SgInitializedName>;
   78512             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgName,&SgInitializedName::p_name>;
   78513             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, std::string,&SgInitializedName::p_microsoft_uuid_string>;
   78514             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgType*,&SgInitializedName::p_typeptr>;
   78515             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgInitializer*,&SgInitializedName::p_initptr>;
   78516             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgInitializedName*,&SgInitializedName::p_prev_decl_item>;
   78517             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_is_initializer>;
   78518             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgDeclarationStatement*,&SgInitializedName::p_declptr>;
   78519             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgStorageModifier*,&SgInitializedName::p_storageModifier>;
   78520             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgScopeStatement*,&SgInitializedName::p_scope>;
   78521             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgInitializedName::preinitialization_enum,&SgInitializedName::p_preinitialization>;
   78522             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_isCoArray>;
   78523             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgInitializedName::asm_register_name_enum,&SgInitializedName::p_register_name_code>;
   78524             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgInitializedName::excess_specifier_enum,&SgInitializedName::p_excess_specifier>;
   78525             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, std::string,&SgInitializedName::p_register_name_string>;
   78526             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_requiresGlobalNameQualificationOnType>;
   78527             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_shapeDeferred>;
   78528             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_initializationDeferred>;
   78529             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgBitVector,&SgInitializedName::p_gnu_attribute_modifierVector>;
   78530             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, unsigned long int,&SgInitializedName::p_gnu_attribute_initialization_priority>;
   78531             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, std::string,&SgInitializedName::p_gnu_attribute_named_weak_reference>;
   78532             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, std::string,&SgInitializedName::p_gnu_attribute_named_alias>;
   78533             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, std::string,&SgInitializedName::p_gnu_attribute_cleanup_function>;
   78534             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, std::string,&SgInitializedName::p_gnu_attribute_section_name>;
   78535             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, int,&SgInitializedName::p_gnu_attribute_alignment>;
   78536             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgDeclarationModifier::gnu_declaration_visability_enum,&SgInitializedName::p_gnu_attribute_visability>;
   78537             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_protected_declaration>;
   78538             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, int,&SgInitializedName::p_name_qualification_length>;
   78539             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_type_elaboration_required>;
   78540             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_global_qualification_required>;
   78541             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, int,&SgInitializedName::p_name_qualification_length_for_type>;
   78542             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_type_elaboration_required_for_type>;
   78543             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_global_qualification_required_for_type>;
   78544             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_hasArrayTypeWithEmptyBracketSyntax>;
   78545             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_using_C11_Alignas_keyword>;
   78546             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgNode*,&SgInitializedName::p_constant_or_type_argument_for_Alignas_keyword>;
   78547             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_using_auto_keyword>;
   78548             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, SgType *,&SgInitializedName::p_auto_decltype>;
   78549             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_using_device_keyword>;
   78550             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_is_braced_initialized>;
   78551             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_using_assignment_copy_constructor_syntax>;
   78552             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_needs_definitions>;
   78553             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_is_parameter_pack>;
   78554             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializedName, bool,&SgInitializedName::p_is_pack_element>;
   78555             : 
   78556             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   78557             : 
   78558             : 
   78559             :    };
   78560             : #endif
   78561             : 
   78562             : // postdeclarations for SgInitializedName
   78563             : 
   78564             : /* #line 78565 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   78565             : 
   78566             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   78567             : 
   78568             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   78569             : 
   78570             : 
   78571             : /* #line 78572 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   78572             : 
   78573             : 
   78574             : 
   78575             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   78576             : 
   78577             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   78578             : //      This code is automatically generated for each 
   78579             : //      terminal and non-terminal within the defined 
   78580             : //      grammar.  There is a simple way to change the 
   78581             : //      code to fix bugs etc.  See the ROSE README file
   78582             : //      for directions.
   78583             : 
   78584             : // tps: (02/22/2010): Adding DLL export requirements
   78585             : #include "rosedll.h"
   78586             : 
   78587             : // predeclarations for SgInterfaceBody
   78588             : 
   78589             : /* #line 78590 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   78590             : 
   78591             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   78592             : 
   78593             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   78594             : 
   78595             : #if 1
   78596             : // Class Definition for SgInterfaceBody
   78597             : class ROSE_DLL_API SgInterfaceBody  : public SgLocatedNodeSupport
   78598             :    {
   78599             :      public:
   78600             : 
   78601             : 
   78602             : /* #line 78603 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   78603             : 
   78604             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   78605             : // Start of memberFunctionString
   78606             : /* #line 607 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
   78607             : 
   78608             : 
   78609             : 
   78610             : 
   78611             : // End of memberFunctionString
   78612             : // Start of memberFunctionString
   78613             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   78614             : 
   78615             : // *** COMMON CODE SECTION BEGINS HERE ***
   78616             : 
   78617             :     public:
   78618             : 
   78619             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   78620             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   78621             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   78622             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   78623             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   78624             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   78625             : 
   78626             :       /*! \brief returns a string representing the class name */
   78627             :           virtual std::string class_name() const override;
   78628             : 
   78629             :       /*! \brief returns new style SageIII enum values */
   78630             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   78631             : 
   78632             :       /*! \brief static variant value */
   78633             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   78634             :        // static const VariantT static_variant = V_SgInterfaceBody;
   78635             :           enum { static_variant = V_SgInterfaceBody };
   78636             : 
   78637             :        /* the generated cast function */
   78638             :       /*! \brief Casts pointer from base class to derived class */
   78639             :           ROSE_DLL_API friend       SgInterfaceBody* isSgInterfaceBody(       SgNode * s );
   78640             : 
   78641             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   78642             :           ROSE_DLL_API friend const SgInterfaceBody* isSgInterfaceBody( const SgNode * s );
   78643             : 
   78644             :      // ******************************************
   78645             :      // * Memory Pool / New / Delete
   78646             :      // ******************************************
   78647             : 
   78648             :      public:
   78649             :           /// \private
   78650             :           static const unsigned pool_size; //
   78651             :           /// \private
   78652             :           static std::vector<unsigned char *> pools; //
   78653             :           /// \private
   78654             :           static SgInterfaceBody * next_node; // 
   78655             : 
   78656             :           /// \private
   78657             :           static unsigned long initializeStorageClassArray(SgInterfaceBodyStorageClass *); //
   78658             : 
   78659             :           /// \private
   78660             :           static void clearMemoryPool(); //
   78661             :           static void deleteMemoryPool(); //
   78662             : 
   78663             :           /// \private
   78664             :           static void extendMemoryPoolForFileIO(); //
   78665             : 
   78666             :           /// \private
   78667             :           static SgInterfaceBody * getPointerFromGlobalIndex(unsigned long); //
   78668             :           /// \private
   78669             :           static SgInterfaceBody * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   78670             : 
   78671             :           /// \private
   78672             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   78673             :           /// \private
   78674             :           static void resetValidFreepointers(); //
   78675             :           /// \private
   78676             :           static unsigned long getNumberOfLastValidPointer(); //
   78677             : 
   78678             : 
   78679             : #if defined(INLINE_FUNCTIONS)
   78680             :       /*! \brief returns pointer to newly allocated IR node */
   78681             :           inline void *operator new (size_t size);
   78682             : #else
   78683             :       /*! \brief returns pointer to newly allocated IR node */
   78684             :           void *operator new (size_t size);
   78685             : #endif
   78686             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   78687             :           void operator delete (void* pointer, size_t size);
   78688             : 
   78689             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   78690           0 :           void operator delete (void* pointer)
   78691             :              {
   78692             :             // This is the generated delete operator...
   78693           0 :                SgInterfaceBody::operator delete (pointer,sizeof(SgInterfaceBody));
   78694             :              }
   78695             : 
   78696             :       /*! \brief Returns the total number of IR nodes of this type */
   78697             :           static size_t numberOfNodes();
   78698             : 
   78699             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   78700             :           static size_t memoryUsage();
   78701             : 
   78702             :       // End of scope which started in IR nodes specific code 
   78703             :       /* */
   78704             : 
   78705             :       /* name Internal Functions
   78706             :           \brief Internal functions ... incomplete-documentation
   78707             : 
   78708             :           These functions have been made public as part of the design, but they are suggested for internal use 
   78709             :           or by particularly knowledgeable users for specialized tools or applications.
   78710             : 
   78711             :           \internal We could not make these private because they are required by user for special purposes. And 
   78712             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   78713             :          
   78714             :        */
   78715             : 
   78716             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   78717             :        // overridden in every class by *generated* implementation
   78718             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   78719             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   78720             :        // MS: 06/28/02 container of names of variables or container indices 
   78721             :        // used used in the traversal to access AST successor nodes
   78722             :        // overridden in every class by *generated* implementation
   78723             :       /*! \brief container of names of variables or container indices used used in the traversal
   78724             :           to access AST successor nodes overridden in every class by *generated* implementation */
   78725             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   78726             : 
   78727             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   78728             :        // than all the vector copies. The implementation for these functions is generated for each class.
   78729             :       /*! \brief return number of children in the traversal successor list */
   78730             :           virtual size_t get_numberOfTraversalSuccessors() override;
   78731             :       /*! \brief index-based access to traversal successors by index number */
   78732             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   78733             :       /*! \brief index-based access to traversal successors by child node */
   78734             :           virtual size_t get_childIndex(SgNode *child) override;
   78735             : 
   78736             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   78737             :        // MS: 08/16/2002 method for generating RTI information
   78738             :       /*! \brief return C++ Runtime-Time-Information */
   78739             :           virtual RTIReturnType roseRTI() override;
   78740             : #endif
   78741             :       /* */
   78742             : 
   78743             : 
   78744             : 
   78745             :       /* name Deprecated Functions
   78746             :           \brief Deprecated functions ... incomplete-documentation
   78747             : 
   78748             :           These functions have been deprecated from use.
   78749             :        */
   78750             :       /* */
   78751             : 
   78752             :       /*! returns a C style string (char*) representing the class name */
   78753             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   78754             : 
   78755             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   78756             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   78757             : #if 0
   78758             :       /*! returns old style Sage II enum values */
   78759             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   78760             :       /*! returns old style Sage II enum values */
   78761             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   78762             : #endif
   78763             :       /* */
   78764             : 
   78765             : 
   78766             : 
   78767             : 
   78768             :      public:
   78769             :       /* name Traversal Support Functions
   78770             :           \brief Traversal support functions ... incomplete-documentation
   78771             : 
   78772             :           These functions have been made public as part of the design, but they are suggested for internal use 
   78773             :           or by particularly knowledgable users for specialized tools or applications.
   78774             :        */
   78775             :       /* */
   78776             : 
   78777             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   78778             :        // (inferior to ROSE traversal mechanism, experimental).
   78779             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   78780             :        */
   78781             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   78782             : 
   78783             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   78784             :       /*! \brief support for the classic visitor pattern done in GoF */
   78785             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   78786             : 
   78787             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   78788             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   78789             :        */
   78790             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   78791             : 
   78792             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   78793             :        */
   78794             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   78795             : 
   78796             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   78797             :        // This traversal helps support internal tools that call static member functions.
   78798             :        // note: this function operates on the memory pools.
   78799             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   78800             :        */
   78801             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   78802             :       /* */
   78803             : 
   78804             : 
   78805             :      public:
   78806             :       /* name Memory Allocation Functions
   78807             :           \brief Memory allocations functions ... incomplete-documentation
   78808             : 
   78809             :           These functions have been made public as part of the design, but they are suggested for internal use 
   78810             :           or by particularly knowledgable users for specialized tools or applications.
   78811             :        */
   78812             :       /* */
   78813             : 
   78814             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   78815             : 
   78816             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   78817             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   78818             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   78819             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   78820             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   78821             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   78822             :           being used with the AST File I/O mechanism.
   78823             :        */
   78824             :           virtual bool isInMemoryPool() override;
   78825             : 
   78826             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   78827             : 
   78828             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   78829             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   78830             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   78831             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   78832             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   78833             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   78834             :           being used with the AST File I/O mechanism.
   78835             :        */
   78836             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   78837             : 
   78838             :       // DQ (4/30/2006): Modified to be a const function.
   78839             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   78840             : 
   78841             :           This functions is part of general support for many possible tools to operate 
   78842             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   78843             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   78844             :           less than the set of pointers used by the AST file I/O. This is part of
   78845             :           work implemented by Andreas, and support tools such as the AST graph generation.
   78846             : 
   78847             :           \warning This function can return unexpected data members and thus the 
   78848             :                    order and the number of elements is unpredicable and subject 
   78849             :                    to change.
   78850             : 
   78851             :           \returns STL vector of pairs of SgNode* and strings
   78852             :        */
   78853             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   78854             : 
   78855             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   78856             : 
   78857             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   78858             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   78859             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   78860             : 
   78861             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   78862             :                    and subject to change.
   78863             :        */
   78864             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   78865             : 
   78866             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   78867             : 
   78868             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   78869             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   78870             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   78871             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   78872             : 
   78873             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   78874             : 
   78875             :           \returns long
   78876             :        */
   78877             :           virtual long getChildIndex( SgNode* childNode ) const override;
   78878             : 
   78879             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   78880             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   78881             :       /* \brief Constructor for use by AST File I/O Mechanism
   78882             : 
   78883             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   78884             :           which obtained via fast binary file I/O from disk.
   78885             :        */
   78886             :        // SgInterfaceBody( SgInterfaceBodyStorageClass& source );
   78887             : 
   78888             : 
   78889             : 
   78890             : 
   78891             : 
   78892             :  // JH (10/24/2005): methods added to support the ast file IO
   78893             :     private:
   78894             : 
   78895             :       /* name AST Memory Allocation Support Functions
   78896             :           \brief Memory allocations support....
   78897             : 
   78898             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   78899             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   78900             :           and support the AST File I/O Mechanism.
   78901             :        */
   78902             :       /* */
   78903             : 
   78904             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   78905             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   78906             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   78907             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   78908             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   78909             :           a correspinding one in the AST_FILE_IO class!
   78910             :        */
   78911             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   78912             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   78913             :       /* \brief Typedef used for low level memory access.
   78914             :        */
   78915             :        // typedef unsigned char* TestType;
   78916             : 
   78917             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   78918             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   78919             :       /* \brief Typedef used to hold memory addresses as values.
   78920             :        */
   78921             :        // typedef unsigned long  AddressType;
   78922             : 
   78923             : 
   78924             : 
   78925             :        // necessary, to have direct access to the p_freepointer and the private methods !
   78926             :       /*! \brief friend class declaration to support AST File I/O */
   78927             :           friend class AST_FILE_IO;
   78928             : 
   78929             :       /*! \brief friend class declaration to support AST File I/O */
   78930             :           friend class SgInterfaceBodyStorageClass;
   78931             : 
   78932             :       /*! \brief friend class declaration to support AST File I/O */
   78933             :           friend class AstSpecificDataManagingClass;
   78934             : 
   78935             :       /*! \brief friend class declaration to support AST File I/O */
   78936             :           friend class AstSpecificDataManagingClassStorageClass;
   78937             :     public:
   78938             :       /*! \brief IR node constructor to support AST File I/O */
   78939             :           SgInterfaceBody( const SgInterfaceBodyStorageClass& source );
   78940             : 
   78941             :  // private: // JJW hack
   78942             :        /*
   78943             :           name AST Memory Allocation Support Variables
   78944             :           Memory allocations support variables 
   78945             : 
   78946             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   78947             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   78948             :           and support the AST File I/O Mechanism.
   78949             :        */
   78950             :       /* */
   78951             : 
   78952             :     public:
   78953             : 
   78954             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   78955             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   78956             :       // virtual SgNode* addRegExpAttribute();
   78957             :       /*! \brief Support for AST matching using regular expression.
   78958             : 
   78959             :           This support is incomplete and the subject of current research to define 
   78960             :           RegEx trees to support inexact matching.
   78961             :        */
   78962             :           SgInterfaceBody* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   78963             : 
   78964             : // *** COMMON CODE SECTION ENDS HERE ***
   78965             : 
   78966             : 
   78967             : // End of memberFunctionString
   78968             : // Start of memberFunctionString
   78969             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   78970             : 
   78971             :      // the generated cast function
   78972             :      // friend ROSE_DLL_API SgInterfaceBody* isSgInterfaceBody ( SgNode* s );
   78973             : 
   78974             :           typedef SgLocatedNodeSupport base_node_type;
   78975             : 
   78976             : 
   78977             : // End of memberFunctionString
   78978             : 
   78979             :      public: 
   78980             :          SgName get_function_name() const;
   78981             :          void set_function_name(SgName function_name);
   78982             : 
   78983             :      public: 
   78984             :          SgFunctionDeclaration* get_functionDeclaration() const;
   78985             :          void set_functionDeclaration(SgFunctionDeclaration* functionDeclaration);
   78986             : 
   78987             :      public: 
   78988             :          bool get_use_function_name() const;
   78989             :          void set_use_function_name(bool use_function_name);
   78990             : 
   78991             : 
   78992             :      public: 
   78993             :          virtual ~SgInterfaceBody();
   78994             : 
   78995             : 
   78996             :      public: 
   78997             :          SgInterfaceBody(Sg_File_Info* startOfConstruct , SgName function_name = "", SgFunctionDeclaration* functionDeclaration = NULL, bool use_function_name = false); 
   78998             :          SgInterfaceBody(SgName function_name, SgFunctionDeclaration* functionDeclaration, bool use_function_name); 
   78999             : 
   79000             :     protected:
   79001             : // Start of memberFunctionString
   79002             : SgName p_function_name;
   79003             :           
   79004             : // End of memberFunctionString
   79005             : // Start of memberFunctionString
   79006             : SgFunctionDeclaration* p_functionDeclaration;
   79007             :           
   79008             : // End of memberFunctionString
   79009             : // Start of memberFunctionString
   79010             : bool p_use_function_name;
   79011             :           
   79012             : // End of memberFunctionString
   79013             : 
   79014             :     friend struct Rose::Traits::generated::describe_node_t<SgInterfaceBody>;
   79015             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceBody, SgName,&SgInterfaceBody::p_function_name>;
   79016             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceBody, SgFunctionDeclaration*,&SgInterfaceBody::p_functionDeclaration>;
   79017             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceBody, bool,&SgInterfaceBody::p_use_function_name>;
   79018             : 
   79019             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79020             : 
   79021             : 
   79022             :    };
   79023             : #endif
   79024             : 
   79025             : // postdeclarations for SgInterfaceBody
   79026             : 
   79027             : /* #line 79028 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79028             : 
   79029             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   79030             : 
   79031             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79032             : 
   79033             : 
   79034             : /* #line 79035 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79035             : 
   79036             : 
   79037             : 
   79038             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79039             : 
   79040             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   79041             : //      This code is automatically generated for each 
   79042             : //      terminal and non-terminal within the defined 
   79043             : //      grammar.  There is a simple way to change the 
   79044             : //      code to fix bugs etc.  See the ROSE README file
   79045             : //      for directions.
   79046             : 
   79047             : // tps: (02/22/2010): Adding DLL export requirements
   79048             : #include "rosedll.h"
   79049             : 
   79050             : // predeclarations for SgHeaderFileBody
   79051             : 
   79052             : /* #line 79053 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79053             : 
   79054             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   79055             : 
   79056             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79057             : 
   79058             : #if 1
   79059             : // Class Definition for SgHeaderFileBody
   79060             : class ROSE_DLL_API SgHeaderFileBody  : public SgLocatedNodeSupport
   79061             :    {
   79062             :      public:
   79063             : 
   79064             : 
   79065             : /* #line 79066 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79066             : 
   79067             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   79068             : // Start of memberFunctionString
   79069             : /* #line 611 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
   79070             : 
   79071             : 
   79072             : 
   79073             : 
   79074             : // End of memberFunctionString
   79075             : // Start of memberFunctionString
   79076             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   79077             : 
   79078             : // *** COMMON CODE SECTION BEGINS HERE ***
   79079             : 
   79080             :     public:
   79081             : 
   79082             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   79083             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   79084             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   79085             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   79086             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   79087             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   79088             : 
   79089             :       /*! \brief returns a string representing the class name */
   79090             :           virtual std::string class_name() const override;
   79091             : 
   79092             :       /*! \brief returns new style SageIII enum values */
   79093             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   79094             : 
   79095             :       /*! \brief static variant value */
   79096             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   79097             :        // static const VariantT static_variant = V_SgHeaderFileBody;
   79098             :           enum { static_variant = V_SgHeaderFileBody };
   79099             : 
   79100             :        /* the generated cast function */
   79101             :       /*! \brief Casts pointer from base class to derived class */
   79102             :           ROSE_DLL_API friend       SgHeaderFileBody* isSgHeaderFileBody(       SgNode * s );
   79103             : 
   79104             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   79105             :           ROSE_DLL_API friend const SgHeaderFileBody* isSgHeaderFileBody( const SgNode * s );
   79106             : 
   79107             :      // ******************************************
   79108             :      // * Memory Pool / New / Delete
   79109             :      // ******************************************
   79110             : 
   79111             :      public:
   79112             :           /// \private
   79113             :           static const unsigned pool_size; //
   79114             :           /// \private
   79115             :           static std::vector<unsigned char *> pools; //
   79116             :           /// \private
   79117             :           static SgHeaderFileBody * next_node; // 
   79118             : 
   79119             :           /// \private
   79120             :           static unsigned long initializeStorageClassArray(SgHeaderFileBodyStorageClass *); //
   79121             : 
   79122             :           /// \private
   79123             :           static void clearMemoryPool(); //
   79124             :           static void deleteMemoryPool(); //
   79125             : 
   79126             :           /// \private
   79127             :           static void extendMemoryPoolForFileIO(); //
   79128             : 
   79129             :           /// \private
   79130             :           static SgHeaderFileBody * getPointerFromGlobalIndex(unsigned long); //
   79131             :           /// \private
   79132             :           static SgHeaderFileBody * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   79133             : 
   79134             :           /// \private
   79135             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   79136             :           /// \private
   79137             :           static void resetValidFreepointers(); //
   79138             :           /// \private
   79139             :           static unsigned long getNumberOfLastValidPointer(); //
   79140             : 
   79141             : 
   79142             : #if defined(INLINE_FUNCTIONS)
   79143             :       /*! \brief returns pointer to newly allocated IR node */
   79144             :           inline void *operator new (size_t size);
   79145             : #else
   79146             :       /*! \brief returns pointer to newly allocated IR node */
   79147             :           void *operator new (size_t size);
   79148             : #endif
   79149             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   79150             :           void operator delete (void* pointer, size_t size);
   79151             : 
   79152             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   79153           0 :           void operator delete (void* pointer)
   79154             :              {
   79155             :             // This is the generated delete operator...
   79156           0 :                SgHeaderFileBody::operator delete (pointer,sizeof(SgHeaderFileBody));
   79157             :              }
   79158             : 
   79159             :       /*! \brief Returns the total number of IR nodes of this type */
   79160             :           static size_t numberOfNodes();
   79161             : 
   79162             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   79163             :           static size_t memoryUsage();
   79164             : 
   79165             :       // End of scope which started in IR nodes specific code 
   79166             :       /* */
   79167             : 
   79168             :       /* name Internal Functions
   79169             :           \brief Internal functions ... incomplete-documentation
   79170             : 
   79171             :           These functions have been made public as part of the design, but they are suggested for internal use 
   79172             :           or by particularly knowledgeable users for specialized tools or applications.
   79173             : 
   79174             :           \internal We could not make these private because they are required by user for special purposes. And 
   79175             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   79176             :          
   79177             :        */
   79178             : 
   79179             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   79180             :        // overridden in every class by *generated* implementation
   79181             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   79182             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   79183             :        // MS: 06/28/02 container of names of variables or container indices 
   79184             :        // used used in the traversal to access AST successor nodes
   79185             :        // overridden in every class by *generated* implementation
   79186             :       /*! \brief container of names of variables or container indices used used in the traversal
   79187             :           to access AST successor nodes overridden in every class by *generated* implementation */
   79188             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   79189             : 
   79190             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   79191             :        // than all the vector copies. The implementation for these functions is generated for each class.
   79192             :       /*! \brief return number of children in the traversal successor list */
   79193             :           virtual size_t get_numberOfTraversalSuccessors() override;
   79194             :       /*! \brief index-based access to traversal successors by index number */
   79195             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   79196             :       /*! \brief index-based access to traversal successors by child node */
   79197             :           virtual size_t get_childIndex(SgNode *child) override;
   79198             : 
   79199             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   79200             :        // MS: 08/16/2002 method for generating RTI information
   79201             :       /*! \brief return C++ Runtime-Time-Information */
   79202             :           virtual RTIReturnType roseRTI() override;
   79203             : #endif
   79204             :       /* */
   79205             : 
   79206             : 
   79207             : 
   79208             :       /* name Deprecated Functions
   79209             :           \brief Deprecated functions ... incomplete-documentation
   79210             : 
   79211             :           These functions have been deprecated from use.
   79212             :        */
   79213             :       /* */
   79214             : 
   79215             :       /*! returns a C style string (char*) representing the class name */
   79216             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   79217             : 
   79218             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   79219             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   79220             : #if 0
   79221             :       /*! returns old style Sage II enum values */
   79222             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   79223             :       /*! returns old style Sage II enum values */
   79224             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   79225             : #endif
   79226             :       /* */
   79227             : 
   79228             : 
   79229             : 
   79230             : 
   79231             :      public:
   79232             :       /* name Traversal Support Functions
   79233             :           \brief Traversal support functions ... incomplete-documentation
   79234             : 
   79235             :           These functions have been made public as part of the design, but they are suggested for internal use 
   79236             :           or by particularly knowledgable users for specialized tools or applications.
   79237             :        */
   79238             :       /* */
   79239             : 
   79240             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   79241             :        // (inferior to ROSE traversal mechanism, experimental).
   79242             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   79243             :        */
   79244             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   79245             : 
   79246             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   79247             :       /*! \brief support for the classic visitor pattern done in GoF */
   79248             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   79249             : 
   79250             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   79251             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   79252             :        */
   79253             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   79254             : 
   79255             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   79256             :        */
   79257             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   79258             : 
   79259             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   79260             :        // This traversal helps support internal tools that call static member functions.
   79261             :        // note: this function operates on the memory pools.
   79262             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   79263             :        */
   79264             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   79265             :       /* */
   79266             : 
   79267             : 
   79268             :      public:
   79269             :       /* name Memory Allocation Functions
   79270             :           \brief Memory allocations functions ... incomplete-documentation
   79271             : 
   79272             :           These functions have been made public as part of the design, but they are suggested for internal use 
   79273             :           or by particularly knowledgable users for specialized tools or applications.
   79274             :        */
   79275             :       /* */
   79276             : 
   79277             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   79278             : 
   79279             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   79280             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   79281             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   79282             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   79283             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   79284             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   79285             :           being used with the AST File I/O mechanism.
   79286             :        */
   79287             :           virtual bool isInMemoryPool() override;
   79288             : 
   79289             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   79290             : 
   79291             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   79292             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   79293             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   79294             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   79295             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   79296             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   79297             :           being used with the AST File I/O mechanism.
   79298             :        */
   79299             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   79300             : 
   79301             :       // DQ (4/30/2006): Modified to be a const function.
   79302             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   79303             : 
   79304             :           This functions is part of general support for many possible tools to operate 
   79305             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   79306             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   79307             :           less than the set of pointers used by the AST file I/O. This is part of
   79308             :           work implemented by Andreas, and support tools such as the AST graph generation.
   79309             : 
   79310             :           \warning This function can return unexpected data members and thus the 
   79311             :                    order and the number of elements is unpredicable and subject 
   79312             :                    to change.
   79313             : 
   79314             :           \returns STL vector of pairs of SgNode* and strings
   79315             :        */
   79316             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   79317             : 
   79318             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   79319             : 
   79320             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   79321             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   79322             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   79323             : 
   79324             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   79325             :                    and subject to change.
   79326             :        */
   79327             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   79328             : 
   79329             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   79330             : 
   79331             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   79332             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   79333             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   79334             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   79335             : 
   79336             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   79337             : 
   79338             :           \returns long
   79339             :        */
   79340             :           virtual long getChildIndex( SgNode* childNode ) const override;
   79341             : 
   79342             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   79343             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   79344             :       /* \brief Constructor for use by AST File I/O Mechanism
   79345             : 
   79346             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   79347             :           which obtained via fast binary file I/O from disk.
   79348             :        */
   79349             :        // SgHeaderFileBody( SgHeaderFileBodyStorageClass& source );
   79350             : 
   79351             : 
   79352             : 
   79353             : 
   79354             : 
   79355             :  // JH (10/24/2005): methods added to support the ast file IO
   79356             :     private:
   79357             : 
   79358             :       /* name AST Memory Allocation Support Functions
   79359             :           \brief Memory allocations support....
   79360             : 
   79361             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   79362             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   79363             :           and support the AST File I/O Mechanism.
   79364             :        */
   79365             :       /* */
   79366             : 
   79367             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   79368             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   79369             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   79370             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   79371             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   79372             :           a correspinding one in the AST_FILE_IO class!
   79373             :        */
   79374             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   79375             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   79376             :       /* \brief Typedef used for low level memory access.
   79377             :        */
   79378             :        // typedef unsigned char* TestType;
   79379             : 
   79380             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   79381             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   79382             :       /* \brief Typedef used to hold memory addresses as values.
   79383             :        */
   79384             :        // typedef unsigned long  AddressType;
   79385             : 
   79386             : 
   79387             : 
   79388             :        // necessary, to have direct access to the p_freepointer and the private methods !
   79389             :       /*! \brief friend class declaration to support AST File I/O */
   79390             :           friend class AST_FILE_IO;
   79391             : 
   79392             :       /*! \brief friend class declaration to support AST File I/O */
   79393             :           friend class SgHeaderFileBodyStorageClass;
   79394             : 
   79395             :       /*! \brief friend class declaration to support AST File I/O */
   79396             :           friend class AstSpecificDataManagingClass;
   79397             : 
   79398             :       /*! \brief friend class declaration to support AST File I/O */
   79399             :           friend class AstSpecificDataManagingClassStorageClass;
   79400             :     public:
   79401             :       /*! \brief IR node constructor to support AST File I/O */
   79402             :           SgHeaderFileBody( const SgHeaderFileBodyStorageClass& source );
   79403             : 
   79404             :  // private: // JJW hack
   79405             :        /*
   79406             :           name AST Memory Allocation Support Variables
   79407             :           Memory allocations support variables 
   79408             : 
   79409             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   79410             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   79411             :           and support the AST File I/O Mechanism.
   79412             :        */
   79413             :       /* */
   79414             : 
   79415             :     public:
   79416             : 
   79417             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   79418             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   79419             :       // virtual SgNode* addRegExpAttribute();
   79420             :       /*! \brief Support for AST matching using regular expression.
   79421             : 
   79422             :           This support is incomplete and the subject of current research to define 
   79423             :           RegEx trees to support inexact matching.
   79424             :        */
   79425             :           SgHeaderFileBody* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   79426             : 
   79427             : // *** COMMON CODE SECTION ENDS HERE ***
   79428             : 
   79429             : 
   79430             : // End of memberFunctionString
   79431             : // Start of memberFunctionString
   79432             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   79433             : 
   79434             :      // the generated cast function
   79435             :      // friend ROSE_DLL_API SgHeaderFileBody* isSgHeaderFileBody ( SgNode* s );
   79436             : 
   79437             :           typedef SgLocatedNodeSupport base_node_type;
   79438             : 
   79439             : 
   79440             : // End of memberFunctionString
   79441             : 
   79442             :      public: 
   79443             :          SgSourceFile* get_include_file() const;
   79444             :          void set_include_file(SgSourceFile* include_file);
   79445             : 
   79446             : 
   79447             :      public: 
   79448             :          virtual ~SgHeaderFileBody();
   79449             : 
   79450             : 
   79451             :      public: 
   79452             :          SgHeaderFileBody(Sg_File_Info* startOfConstruct ); 
   79453             :          SgHeaderFileBody(); 
   79454             : 
   79455             :     protected:
   79456             : // Start of memberFunctionString
   79457             : SgSourceFile* p_include_file;
   79458             :           
   79459             : // End of memberFunctionString
   79460             : 
   79461             :     friend struct Rose::Traits::generated::describe_node_t<SgHeaderFileBody>;
   79462             :     friend struct Rose::Traits::generated::describe_field_t<SgHeaderFileBody, SgSourceFile*,&SgHeaderFileBody::p_include_file>;
   79463             : 
   79464             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79465             : 
   79466             : 
   79467             :    };
   79468             : #endif
   79469             : 
   79470             : // postdeclarations for SgHeaderFileBody
   79471             : 
   79472             : /* #line 79473 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79473             : 
   79474             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   79475             : 
   79476             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79477             : 
   79478             : 
   79479             : /* #line 79480 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79480             : 
   79481             : 
   79482             : 
   79483             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79484             : 
   79485             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   79486             : //      This code is automatically generated for each 
   79487             : //      terminal and non-terminal within the defined 
   79488             : //      grammar.  There is a simple way to change the 
   79489             : //      code to fix bugs etc.  See the ROSE README file
   79490             : //      for directions.
   79491             : 
   79492             : // tps: (02/22/2010): Adding DLL export requirements
   79493             : #include "rosedll.h"
   79494             : 
   79495             : // predeclarations for SgRenamePair
   79496             : 
   79497             : /* #line 79498 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79498             : 
   79499             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   79500             : 
   79501             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79502             : 
   79503             : #if 1
   79504             : // Class Definition for SgRenamePair
   79505             : class ROSE_DLL_API SgRenamePair  : public SgLocatedNodeSupport
   79506             :    {
   79507             :      public:
   79508             : 
   79509             : 
   79510             : /* #line 79511 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79511             : 
   79512             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   79513             : // Start of memberFunctionString
   79514             : /* #line 601 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
   79515             : 
   79516             : 
   79517             :           bool isRename() const;
   79518             : 
   79519             : 
   79520             : 
   79521             : // End of memberFunctionString
   79522             : // Start of memberFunctionString
   79523             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   79524             : 
   79525             : // *** COMMON CODE SECTION BEGINS HERE ***
   79526             : 
   79527             :     public:
   79528             : 
   79529             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   79530             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   79531             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   79532             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   79533             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   79534             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   79535             : 
   79536             :       /*! \brief returns a string representing the class name */
   79537             :           virtual std::string class_name() const override;
   79538             : 
   79539             :       /*! \brief returns new style SageIII enum values */
   79540             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   79541             : 
   79542             :       /*! \brief static variant value */
   79543             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   79544             :        // static const VariantT static_variant = V_SgRenamePair;
   79545             :           enum { static_variant = V_SgRenamePair };
   79546             : 
   79547             :        /* the generated cast function */
   79548             :       /*! \brief Casts pointer from base class to derived class */
   79549             :           ROSE_DLL_API friend       SgRenamePair* isSgRenamePair(       SgNode * s );
   79550             : 
   79551             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   79552             :           ROSE_DLL_API friend const SgRenamePair* isSgRenamePair( const SgNode * s );
   79553             : 
   79554             :      // ******************************************
   79555             :      // * Memory Pool / New / Delete
   79556             :      // ******************************************
   79557             : 
   79558             :      public:
   79559             :           /// \private
   79560             :           static const unsigned pool_size; //
   79561             :           /// \private
   79562             :           static std::vector<unsigned char *> pools; //
   79563             :           /// \private
   79564             :           static SgRenamePair * next_node; // 
   79565             : 
   79566             :           /// \private
   79567             :           static unsigned long initializeStorageClassArray(SgRenamePairStorageClass *); //
   79568             : 
   79569             :           /// \private
   79570             :           static void clearMemoryPool(); //
   79571             :           static void deleteMemoryPool(); //
   79572             : 
   79573             :           /// \private
   79574             :           static void extendMemoryPoolForFileIO(); //
   79575             : 
   79576             :           /// \private
   79577             :           static SgRenamePair * getPointerFromGlobalIndex(unsigned long); //
   79578             :           /// \private
   79579             :           static SgRenamePair * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   79580             : 
   79581             :           /// \private
   79582             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   79583             :           /// \private
   79584             :           static void resetValidFreepointers(); //
   79585             :           /// \private
   79586             :           static unsigned long getNumberOfLastValidPointer(); //
   79587             : 
   79588             : 
   79589             : #if defined(INLINE_FUNCTIONS)
   79590             :       /*! \brief returns pointer to newly allocated IR node */
   79591             :           inline void *operator new (size_t size);
   79592             : #else
   79593             :       /*! \brief returns pointer to newly allocated IR node */
   79594             :           void *operator new (size_t size);
   79595             : #endif
   79596             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   79597             :           void operator delete (void* pointer, size_t size);
   79598             : 
   79599             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   79600           0 :           void operator delete (void* pointer)
   79601             :              {
   79602             :             // This is the generated delete operator...
   79603           0 :                SgRenamePair::operator delete (pointer,sizeof(SgRenamePair));
   79604             :              }
   79605             : 
   79606             :       /*! \brief Returns the total number of IR nodes of this type */
   79607             :           static size_t numberOfNodes();
   79608             : 
   79609             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   79610             :           static size_t memoryUsage();
   79611             : 
   79612             :       // End of scope which started in IR nodes specific code 
   79613             :       /* */
   79614             : 
   79615             :       /* name Internal Functions
   79616             :           \brief Internal functions ... incomplete-documentation
   79617             : 
   79618             :           These functions have been made public as part of the design, but they are suggested for internal use 
   79619             :           or by particularly knowledgeable users for specialized tools or applications.
   79620             : 
   79621             :           \internal We could not make these private because they are required by user for special purposes. And 
   79622             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   79623             :          
   79624             :        */
   79625             : 
   79626             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   79627             :        // overridden in every class by *generated* implementation
   79628             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   79629             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   79630             :        // MS: 06/28/02 container of names of variables or container indices 
   79631             :        // used used in the traversal to access AST successor nodes
   79632             :        // overridden in every class by *generated* implementation
   79633             :       /*! \brief container of names of variables or container indices used used in the traversal
   79634             :           to access AST successor nodes overridden in every class by *generated* implementation */
   79635             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   79636             : 
   79637             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   79638             :        // than all the vector copies. The implementation for these functions is generated for each class.
   79639             :       /*! \brief return number of children in the traversal successor list */
   79640             :           virtual size_t get_numberOfTraversalSuccessors() override;
   79641             :       /*! \brief index-based access to traversal successors by index number */
   79642             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   79643             :       /*! \brief index-based access to traversal successors by child node */
   79644             :           virtual size_t get_childIndex(SgNode *child) override;
   79645             : 
   79646             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   79647             :        // MS: 08/16/2002 method for generating RTI information
   79648             :       /*! \brief return C++ Runtime-Time-Information */
   79649             :           virtual RTIReturnType roseRTI() override;
   79650             : #endif
   79651             :       /* */
   79652             : 
   79653             : 
   79654             : 
   79655             :       /* name Deprecated Functions
   79656             :           \brief Deprecated functions ... incomplete-documentation
   79657             : 
   79658             :           These functions have been deprecated from use.
   79659             :        */
   79660             :       /* */
   79661             : 
   79662             :       /*! returns a C style string (char*) representing the class name */
   79663             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   79664             : 
   79665             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   79666             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   79667             : #if 0
   79668             :       /*! returns old style Sage II enum values */
   79669             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   79670             :       /*! returns old style Sage II enum values */
   79671             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   79672             : #endif
   79673             :       /* */
   79674             : 
   79675             : 
   79676             : 
   79677             : 
   79678             :      public:
   79679             :       /* name Traversal Support Functions
   79680             :           \brief Traversal support functions ... incomplete-documentation
   79681             : 
   79682             :           These functions have been made public as part of the design, but they are suggested for internal use 
   79683             :           or by particularly knowledgable users for specialized tools or applications.
   79684             :        */
   79685             :       /* */
   79686             : 
   79687             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   79688             :        // (inferior to ROSE traversal mechanism, experimental).
   79689             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   79690             :        */
   79691             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   79692             : 
   79693             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   79694             :       /*! \brief support for the classic visitor pattern done in GoF */
   79695             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   79696             : 
   79697             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   79698             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   79699             :        */
   79700             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   79701             : 
   79702             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   79703             :        */
   79704             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   79705             : 
   79706             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   79707             :        // This traversal helps support internal tools that call static member functions.
   79708             :        // note: this function operates on the memory pools.
   79709             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   79710             :        */
   79711             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   79712             :       /* */
   79713             : 
   79714             : 
   79715             :      public:
   79716             :       /* name Memory Allocation Functions
   79717             :           \brief Memory allocations functions ... incomplete-documentation
   79718             : 
   79719             :           These functions have been made public as part of the design, but they are suggested for internal use 
   79720             :           or by particularly knowledgable users for specialized tools or applications.
   79721             :        */
   79722             :       /* */
   79723             : 
   79724             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   79725             : 
   79726             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   79727             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   79728             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   79729             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   79730             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   79731             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   79732             :           being used with the AST File I/O mechanism.
   79733             :        */
   79734             :           virtual bool isInMemoryPool() override;
   79735             : 
   79736             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   79737             : 
   79738             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   79739             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   79740             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   79741             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   79742             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   79743             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   79744             :           being used with the AST File I/O mechanism.
   79745             :        */
   79746             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   79747             : 
   79748             :       // DQ (4/30/2006): Modified to be a const function.
   79749             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   79750             : 
   79751             :           This functions is part of general support for many possible tools to operate 
   79752             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   79753             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   79754             :           less than the set of pointers used by the AST file I/O. This is part of
   79755             :           work implemented by Andreas, and support tools such as the AST graph generation.
   79756             : 
   79757             :           \warning This function can return unexpected data members and thus the 
   79758             :                    order and the number of elements is unpredicable and subject 
   79759             :                    to change.
   79760             : 
   79761             :           \returns STL vector of pairs of SgNode* and strings
   79762             :        */
   79763             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   79764             : 
   79765             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   79766             : 
   79767             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   79768             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   79769             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   79770             : 
   79771             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   79772             :                    and subject to change.
   79773             :        */
   79774             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   79775             : 
   79776             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   79777             : 
   79778             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   79779             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   79780             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   79781             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   79782             : 
   79783             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   79784             : 
   79785             :           \returns long
   79786             :        */
   79787             :           virtual long getChildIndex( SgNode* childNode ) const override;
   79788             : 
   79789             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   79790             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   79791             :       /* \brief Constructor for use by AST File I/O Mechanism
   79792             : 
   79793             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   79794             :           which obtained via fast binary file I/O from disk.
   79795             :        */
   79796             :        // SgRenamePair( SgRenamePairStorageClass& source );
   79797             : 
   79798             : 
   79799             : 
   79800             : 
   79801             : 
   79802             :  // JH (10/24/2005): methods added to support the ast file IO
   79803             :     private:
   79804             : 
   79805             :       /* name AST Memory Allocation Support Functions
   79806             :           \brief Memory allocations support....
   79807             : 
   79808             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   79809             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   79810             :           and support the AST File I/O Mechanism.
   79811             :        */
   79812             :       /* */
   79813             : 
   79814             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   79815             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   79816             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   79817             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   79818             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   79819             :           a correspinding one in the AST_FILE_IO class!
   79820             :        */
   79821             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   79822             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   79823             :       /* \brief Typedef used for low level memory access.
   79824             :        */
   79825             :        // typedef unsigned char* TestType;
   79826             : 
   79827             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   79828             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   79829             :       /* \brief Typedef used to hold memory addresses as values.
   79830             :        */
   79831             :        // typedef unsigned long  AddressType;
   79832             : 
   79833             : 
   79834             : 
   79835             :        // necessary, to have direct access to the p_freepointer and the private methods !
   79836             :       /*! \brief friend class declaration to support AST File I/O */
   79837             :           friend class AST_FILE_IO;
   79838             : 
   79839             :       /*! \brief friend class declaration to support AST File I/O */
   79840             :           friend class SgRenamePairStorageClass;
   79841             : 
   79842             :       /*! \brief friend class declaration to support AST File I/O */
   79843             :           friend class AstSpecificDataManagingClass;
   79844             : 
   79845             :       /*! \brief friend class declaration to support AST File I/O */
   79846             :           friend class AstSpecificDataManagingClassStorageClass;
   79847             :     public:
   79848             :       /*! \brief IR node constructor to support AST File I/O */
   79849             :           SgRenamePair( const SgRenamePairStorageClass& source );
   79850             : 
   79851             :  // private: // JJW hack
   79852             :        /*
   79853             :           name AST Memory Allocation Support Variables
   79854             :           Memory allocations support variables 
   79855             : 
   79856             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   79857             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   79858             :           and support the AST File I/O Mechanism.
   79859             :        */
   79860             :       /* */
   79861             : 
   79862             :     public:
   79863             : 
   79864             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   79865             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   79866             :       // virtual SgNode* addRegExpAttribute();
   79867             :       /*! \brief Support for AST matching using regular expression.
   79868             : 
   79869             :           This support is incomplete and the subject of current research to define 
   79870             :           RegEx trees to support inexact matching.
   79871             :        */
   79872             :           SgRenamePair* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   79873             : 
   79874             : // *** COMMON CODE SECTION ENDS HERE ***
   79875             : 
   79876             : 
   79877             : // End of memberFunctionString
   79878             : // Start of memberFunctionString
   79879             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   79880             : 
   79881             :      // the generated cast function
   79882             :      // friend ROSE_DLL_API SgRenamePair* isSgRenamePair ( SgNode* s );
   79883             : 
   79884             :           typedef SgLocatedNodeSupport base_node_type;
   79885             : 
   79886             : 
   79887             : // End of memberFunctionString
   79888             : 
   79889             :      public: 
   79890             :          SgName get_local_name() const;
   79891             :          void set_local_name(SgName local_name);
   79892             : 
   79893             :      public: 
   79894             :          SgName get_use_name() const;
   79895             :          void set_use_name(SgName use_name);
   79896             : 
   79897             : 
   79898             :      public: 
   79899             :          virtual ~SgRenamePair();
   79900             : 
   79901             : 
   79902             :      public: 
   79903             :          SgRenamePair(Sg_File_Info* startOfConstruct , SgName local_name = "", SgName use_name = ""); 
   79904             :          SgRenamePair(SgName local_name, SgName use_name); 
   79905             : 
   79906             :     protected:
   79907             : // Start of memberFunctionString
   79908             : SgName p_local_name;
   79909             :           
   79910             : // End of memberFunctionString
   79911             : // Start of memberFunctionString
   79912             : SgName p_use_name;
   79913             :           
   79914             : // End of memberFunctionString
   79915             : 
   79916             :     friend struct Rose::Traits::generated::describe_node_t<SgRenamePair>;
   79917             :     friend struct Rose::Traits::generated::describe_field_t<SgRenamePair, SgName,&SgRenamePair::p_local_name>;
   79918             :     friend struct Rose::Traits::generated::describe_field_t<SgRenamePair, SgName,&SgRenamePair::p_use_name>;
   79919             : 
   79920             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79921             : 
   79922             : 
   79923             :    };
   79924             : #endif
   79925             : 
   79926             : // postdeclarations for SgRenamePair
   79927             : 
   79928             : /* #line 79929 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79929             : 
   79930             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   79931             : 
   79932             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79933             : 
   79934             : 
   79935             : /* #line 79936 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79936             : 
   79937             : 
   79938             : 
   79939             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79940             : 
   79941             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   79942             : //      This code is automatically generated for each 
   79943             : //      terminal and non-terminal within the defined 
   79944             : //      grammar.  There is a simple way to change the 
   79945             : //      code to fix bugs etc.  See the ROSE README file
   79946             : //      for directions.
   79947             : 
   79948             : // tps: (02/22/2010): Adding DLL export requirements
   79949             : #include "rosedll.h"
   79950             : 
   79951             : // predeclarations for SgOmpClause
   79952             : 
   79953             : /* #line 79954 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79954             : 
   79955             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   79956             : 
   79957             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   79958             : 
   79959             : #if 1
   79960             : // Class Definition for SgOmpClause
   79961             : class ROSE_DLL_API SgOmpClause  : public SgLocatedNodeSupport
   79962             :    {
   79963             :      public:
   79964             : 
   79965             : 
   79966             : /* #line 79967 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   79967             : 
   79968             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   79969             : // Start of memberFunctionString
   79970             : /* #line 42 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
   79971             : 
   79972             :   /*!\brief  OpenMP default clause values
   79973             :        */
   79974             : 
   79975             :        // Liao (5/30/2009): Added support for reduction clauses within an OpenMP directive
   79976             :         enum omp_default_option_enum{
   79977             :           e_omp_default_unknown =0,
   79978             :           e_omp_default_variant,
   79979             :           //4 values for default clause
   79980             :           //C/C++ default values
   79981             :           e_omp_default_none,
   79982             :           e_omp_default_shared,
   79983             :           //Fortran default values
   79984             :           e_omp_default_private,
   79985             :           e_omp_default_firstprivate,
   79986             :           e_omp_default_last
   79987             :         };
   79988             : 
   79989             :         enum omp_schedule_kind_enum{
   79990             :           e_omp_schedule_kind_unspecified,
   79991             :           e_omp_schedule_kind_static,
   79992             :           e_omp_schedule_kind_dynamic,
   79993             :           e_omp_schedule_kind_guided,
   79994             :           e_omp_schedule_kind_auto,
   79995             :           e_omp_schedule_kind_runtime
   79996             :         };
   79997             : 
   79998             :         enum omp_schedule_modifier_enum{
   79999             :           e_omp_schedule_modifier_unspecified,
   80000             :           e_omp_schedule_modifier_monotonic,
   80001             :           e_omp_schedule_modifier_nonmonotonic,
   80002             :           e_omp_schedule_modifier_simd
   80003             :         };
   80004             : 
   80005             :         enum omp_in_reduction_identifier_enum
   80006             :         {
   80007             :             e_omp_in_reduction_identifier_unspecified,
   80008             :             e_omp_in_reduction_identifier_plus, //+
   80009             :             e_omp_in_reduction_identifier_mul,  //*
   80010             :             e_omp_in_reduction_identifier_minus, // -
   80011             : 
   80012             :             e_omp_in_reduction_identifier_bitand, // &
   80013             :             e_omp_in_reduction_identifier_bitor,  // |
   80014             :             e_omp_in_reduction_identifier_bitxor,  // ^
   80015             :             e_omp_in_reduction_identifier_logand,  // &&
   80016             :             e_omp_in_reduction_identifier_logor,   // ||
   80017             : 
   80018             :             e_omp_in_reduction_identifier_and, // .and.
   80019             :             e_omp_in_reduction_identifier_or, // .or.
   80020             :             e_omp_in_reduction_identifier_eqv,   // fortran .eqv.
   80021             :             e_omp_in_reduction_identifier_neqv,   // fortran .neqv.
   80022             :             e_omp_in_reduction_identifier_max,
   80023             :             e_omp_in_reduction_identifier_min,
   80024             :             e_omp_in_reduction_identifier_iand,
   80025             :             e_omp_in_reduction_identifier_ior,
   80026             :             e_omp_in_reduction_identifier_ieor,
   80027             :             e_omp_in_reduction_user_defined_identifier,
   80028             :             e_omp_in_reduction_identifier_last
   80029             : 
   80030             :         };
   80031             : 
   80032             :         enum omp_task_reduction_identifier_enum
   80033             :         {
   80034             :             e_omp_task_reduction_identifier_unspecified,
   80035             :             e_omp_task_reduction_identifier_plus, //+
   80036             :             e_omp_task_reduction_identifier_mul,  //*
   80037             :             e_omp_task_reduction_identifier_minus, // -
   80038             : 
   80039             :             e_omp_task_reduction_identifier_bitand, // &
   80040             :             e_omp_task_reduction_identifier_bitor,  // |
   80041             :             e_omp_task_reduction_identifier_bitxor,  // ^
   80042             :             e_omp_task_reduction_identifier_logand,  // &&
   80043             :             e_omp_task_reduction_identifier_logor,   // ||
   80044             : 
   80045             :             e_omp_task_reduction_identifier_and, // .and.
   80046             :             e_omp_task_reduction_identifier_or, // .or.
   80047             :             e_omp_task_reduction_identifier_eqv,   // fortran .eqv.
   80048             :             e_omp_task_reduction_identifier_neqv,   // fortran .neqv.
   80049             :             e_omp_task_reduction_identifier_max,
   80050             :             e_omp_task_reduction_identifier_min,
   80051             :             e_omp_task_reduction_identifier_iand,
   80052             :             e_omp_task_reduction_identifier_ior,
   80053             :             e_omp_task_reduction_identifier_ieor,
   80054             :             e_omp_task_reduction_user_defined_identifier,
   80055             :             e_omp_task_reduction_identifier_last
   80056             : 
   80057             :         };
   80058             : 
   80059             :         enum omp_defaultmap_behavior_enum
   80060             :         {
   80061             :             e_omp_defaultmap_behavior_unspecified,
   80062             :             e_omp_defaultmap_behavior_alloc,
   80063             :             e_omp_defaultmap_behavior_to,
   80064             :             e_omp_defaultmap_behavior_from,
   80065             :             e_omp_defaultmap_behavior_tofrom,
   80066             :             e_omp_defaultmap_behavior_firstprivate,
   80067             :             e_omp_defaultmap_behavior_none,
   80068             :             e_omp_defaultmap_behavior_default
   80069             :         };
   80070             : 
   80071             :         enum omp_defaultmap_category_enum
   80072             :         {
   80073             :             e_omp_defaultmap_category_unspecified,
   80074             :             e_omp_defaultmap_category_scalar,
   80075             :             e_omp_defaultmap_category_aggregate,
   80076             :             e_omp_defaultmap_category_pointer,
   80077             :             e_omp_defaultmap_category_allocatable
   80078             :         };
   80079             : 
   80080             :         enum omp_reduction_identifier_enum
   80081             :         {
   80082             :             e_omp_reduction_unknown,
   80083             :             // reduction operations
   80084             :             //8 operand for C/C++
   80085             :              //  shared 3 common operators for both C and Fortran
   80086             :             e_omp_reduction_plus, //+
   80087             :             e_omp_reduction_mul,  //*
   80088             :             e_omp_reduction_minus, // -
   80089             : 
   80090             :             e_omp_reduction_bitand, // &
   80091             :             e_omp_reduction_bitor,  // |
   80092             :             e_omp_reduction_bitxor,  // ^
   80093             :             e_omp_reduction_logand,  // &&
   80094             :             e_omp_reduction_logor,   // ||
   80095             : 
   80096             :             e_omp_reduction_and, // .and.
   80097             :             e_omp_reduction_or, // .or.
   80098             :             e_omp_reduction_eqv,   // fortran .eqv.
   80099             :             e_omp_reduction_neqv,   // fortran .neqv.
   80100             :             e_omp_reduction_max,
   80101             :             e_omp_reduction_min,
   80102             :             e_omp_reduction_iand,
   80103             :             e_omp_reduction_ior,
   80104             :             e_omp_reduction_ieor,
   80105             :             e_omp_reduction_user_defined_identifier,
   80106             :             e_omp_reduction_last
   80107             : 
   80108             :         };
   80109             : 
   80110             :         enum omp_reduction_modifier_enum
   80111             :         {
   80112             :             e_omp_reduction_modifier_unknown,
   80113             :             e_omp_reduction_inscan,
   80114             :             e_omp_reduction_task,
   80115             :             e_omp_reduction_default
   80116             :         };
   80117             : 
   80118             :         enum omp_linear_modifier_enum
   80119             :         {
   80120             :             e_omp_linear_modifier_unspecified,
   80121             :             e_omp_linear_modifier_ref,
   80122             :             e_omp_linear_modifier_val,
   80123             :             e_omp_linear_modifier_uval
   80124             :         };
   80125             : 
   80126             :         enum omp_device_modifier_enum
   80127             :         {
   80128             :             e_omp_device_modifier_unspecified,
   80129             :             e_omp_device_modifier_ancestor,
   80130             :             e_omp_device_modifier_device_num
   80131             :         };
   80132             : 
   80133             :         enum omp_lastprivate_modifier_enum
   80134             :         {
   80135             :             e_omp_lastprivate_modifier_unspecified,
   80136             :             e_omp_lastprivate_conditional
   80137             :         };
   80138             : 
   80139             :         enum omp_when_context_kind_enum
   80140             :         {
   80141             :             e_omp_when_context_kind_unknown = 0,
   80142             :             e_omp_when_context_kind_host,
   80143             :             e_omp_when_context_kind_nohost,
   80144             :             e_omp_when_context_kind_any,
   80145             :             e_omp_when_context_kind_cpu,
   80146             :             e_omp_when_context_kind_gpu,
   80147             :             e_omp_when_context_kind_fpga
   80148             :         };
   80149             : 
   80150             :         enum omp_when_context_vendor_enum
   80151             :         {
   80152             :             e_omp_when_context_vendor_unspecified = 0,
   80153             :             e_omp_when_context_vendor_amd,
   80154             :             e_omp_when_context_vendor_arm,
   80155             :             e_omp_when_context_vendor_bsc,
   80156             :             e_omp_when_context_vendor_cray,
   80157             :             e_omp_when_context_vendor_fujitsu,
   80158             :             e_omp_when_context_vendor_gnu,
   80159             :             e_omp_when_context_vendor_ibm,
   80160             :             e_omp_when_context_vendor_intel,
   80161             :             e_omp_when_context_vendor_llvm,
   80162             :             e_omp_when_context_vendor_pgi,
   80163             :             e_omp_when_context_vendor_ti,
   80164             :             e_omp_when_context_vendor_unknown
   80165             :         };
   80166             : 
   80167             :         enum omp_allocate_modifier_enum
   80168             :         {
   80169             :             e_omp_allocate_modifier_unknown,
   80170             : 
   80171             :             e_omp_allocate_default_mem_alloc,
   80172             :             e_omp_allocate_large_cap_mem_alloc,
   80173             :             e_omp_allocate_const_mem_alloc,
   80174             :             e_omp_allocate_high_bw_mem_alloc,
   80175             :             e_omp_allocate_low_lat_mem_alloc,
   80176             :             e_omp_allocate_cgroup_mem_alloc,
   80177             :             e_omp_allocate_pteam_mem_alloc,
   80178             :             e_omp_allocate_thread_mem_alloc,
   80179             : 
   80180             :             e_omp_allocate_user_defined_modifier
   80181             :         };
   80182             : 
   80183             :         enum omp_allocator_modifier_enum
   80184             :         {
   80185             :             e_omp_allocator_modifier_unknown,
   80186             : 
   80187             :             e_omp_allocator_default_mem_alloc,
   80188             :             e_omp_allocator_large_cap_mem_alloc,
   80189             :             e_omp_allocator_const_mem_alloc,
   80190             :             e_omp_allocator_high_bw_mem_alloc,
   80191             :             e_omp_allocator_low_lat_mem_alloc,
   80192             :             e_omp_allocator_cgroup_mem_alloc,
   80193             :             e_omp_allocator_pteam_mem_alloc,
   80194             :             e_omp_allocator_thread_mem_alloc,
   80195             : 
   80196             :             e_omp_allocator_user_defined_modifier
   80197             :         };
   80198             : 
   80199             :         enum omp_uses_allocators_allocator_enum
   80200             :         {
   80201             :             e_omp_uses_allocators_allocator_unknown,
   80202             : 
   80203             :             e_omp_uses_allocators_allocator_default_mem_alloc,
   80204             :             e_omp_uses_allocators_allocator_large_cap_mem_alloc,
   80205             :             e_omp_uses_allocators_allocator_const_mem_alloc,
   80206             :             e_omp_uses_allocators_allocator_high_bw_mem_alloc,
   80207             :             e_omp_uses_allocators_allocator_low_lat_mem_alloc,
   80208             :             e_omp_uses_allocators_allocator_cgroup_mem_alloc,
   80209             :             e_omp_uses_allocators_allocator_pteam_mem_alloc,
   80210             :             e_omp_uses_allocators_allocator_thread_mem_alloc,
   80211             : 
   80212             :             e_omp_uses_allocators_allocator_user_defined
   80213             :         };
   80214             : 
   80215             :         enum omp_to_kind_enum
   80216             :          {
   80217             :              e_omp_to_kind_unknown,
   80218             :              e_omp_to_kind_mapper
   80219             :          };
   80220             : 
   80221             :          enum omp_from_kind_enum
   80222             :          {
   80223             :              e_omp_from_kind_unknown,
   80224             :              e_omp_from_kind_mapper
   80225             :          };
   80226             : 
   80227             :         enum omp_dependence_type_enum
   80228             :         {
   80229             :             e_omp_depend_unspecified,
   80230             :             e_omp_depend_in,
   80231             :             e_omp_depend_out,
   80232             :             e_omp_depend_inout,
   80233             :             e_omp_depend_mutexinoutset,
   80234             :             e_omp_depend_depobj,
   80235             :             e_omp_depend_source,
   80236             :             e_omp_depend_sink
   80237             :         };
   80238             : 
   80239             :         enum omp_depend_modifier_enum
   80240             :         {
   80241             :             e_omp_depend_modifier_unspecified,
   80242             :             e_omp_depend_modifier_iterator
   80243             :         };
   80244             : 
   80245             :         enum omp_affinity_modifier_enum
   80246             :         {
   80247             :             e_omp_affinity_modifier_unspecified,
   80248             :             e_omp_affinity_modifier_iterator
   80249             :         };
   80250             : 
   80251             :         enum upir_target_type_enum
   80252             :         {
   80253             :             e_upir_target_unspecified,
   80254             :             e_upir_target_cpu,
   80255             :             e_upir_target_gpu,
   80256             :             e_upir_target_cluster
   80257             :         };
   80258             : 
   80259             :         enum upir_data_sharing_enum
   80260             :         {
   80261             :             e_upir_data_sharing_unspecified,
   80262             :             e_upir_data_sharing_shared,
   80263             :             e_upir_data_sharing_private,
   80264             :             e_upir_data_sharing_firstprivate,
   80265             :             e_upir_data_sharing_lastprivate,
   80266             :             e_upir_data_sharing_reduction
   80267             :         };
   80268             : 
   80269             :         enum upir_data_mapping_enum
   80270             :         {
   80271             :             e_upir_data_mapping_unspecified,
   80272             :             e_upir_data_mapping_to,
   80273             :             e_upir_data_mapping_from,
   80274             :             e_upir_data_mapping_tofrom,
   80275             :             e_upir_data_mapping_allocate,
   80276             :             e_upir_data_mapping_none
   80277             :         };
   80278             : 
   80279             :         enum upir_property_visibility_enum
   80280             :         {
   80281             :             e_upir_property_visibility_unspecified,
   80282             :             e_upir_property_visibility_implicit,
   80283             :             e_upir_property_visibility_explicit
   80284             :         };
   80285             : 
   80286             :         enum upir_data_access_enum
   80287             :         {
   80288             :             e_upir_data_access_unspecified,
   80289             :             e_upir_data_access_read_only,
   80290             :             e_upir_data_access_write_only,
   80291             :             e_upir_data_access_read_write
   80292             :         };
   80293             : 
   80294             :         enum upir_data_distribution_pattern_enum
   80295             :         {
   80296             :             e_upir_data_distribution_pattern_unspecified,
   80297             :             e_upir_data_distribution_pattern_block,
   80298             :             e_upir_data_distribution_pattern_cyclic,
   80299             :             e_upir_data_distribution_pattern_linear,
   80300             :             e_upir_data_distribution_pattern_loop
   80301             :         };
   80302             : 
   80303             :         enum upir_data_allocator_enum
   80304             :         {
   80305             :             e_upir_data_allocator_unspecified,
   80306             :             e_upir_data_allocator_default_mem_alloc,
   80307             :             e_upir_data_allocator_large_cap_mem_alloc
   80308             :         };
   80309             : 
   80310             :         enum upir_data_deallocator_enum
   80311             :         {
   80312             :             e_upir_data_deallocator_unspecified,
   80313             :             e_upir_data_deallocator_default_mem_dealloc,
   80314             :             e_upir_data_deallocator_large_cap_mem_dealloc
   80315             :         };
   80316             : 
   80317             :         // Liao 1/22/2012: experimental support for OpenMP Accelerator model
   80318             :         enum omp_map_operator_enum
   80319             :         {
   80320             :           e_omp_map_unknown,
   80321             :           e_omp_map_alloc,
   80322             :           e_omp_map_to,
   80323             :           e_omp_map_from,
   80324             :           e_omp_map_tofrom,
   80325             :           e_omp_map_last
   80326             :         };
   80327             : 
   80328             :         // Liao, 11/11/2015: experimental support for data distribution policies
   80329             :         enum omp_map_dist_data_enum
   80330             :         {
   80331             :           e_omp_map_dist_data_unknown,
   80332             :           e_omp_map_dist_data_duplicate,
   80333             :           e_omp_map_dist_data_block,
   80334             :           e_omp_map_dist_data_cyclic,
   80335             :           e_omp_map_dist_data_last
   80336             :         };
   80337             : 
   80338             :         // Support thread affinity clause  proc_bind(master|close|spread)
   80339             :         enum omp_proc_bind_policy_enum
   80340             :         {
   80341             :           e_omp_proc_bind_policy_unknown,
   80342             :           e_omp_proc_bind_policy_master,
   80343             :           e_omp_proc_bind_policy_close,
   80344             :           e_omp_proc_bind_policy_spread,
   80345             :           e_omp_proc_bind_policy_last
   80346             :         };
   80347             : 
   80348             :         enum omp_bind_binding_enum
   80349             :         {
   80350             :             e_omp_bind_binding_unspecified,
   80351             :             e_omp_bind_binding_teams,
   80352             :             e_omp_bind_binding_parallel,
   80353             :             e_omp_bind_binding_thread
   80354             :         };
   80355             : 
   80356             :         enum omp_atomic_default_mem_order_kind_enum
   80357             :         {
   80358             :             e_omp_atomic_default_mem_order_kind_unspecified,
   80359             :             e_omp_atomic_default_mem_order_kind_seq_cst,
   80360             :             e_omp_atomic_default_mem_order_kind_acq_rel,
   80361             :             e_omp_atomic_default_mem_order_kind_relaxed
   80362             :         };
   80363             : 
   80364             :         enum omp_order_kind_enum
   80365             :         {
   80366             :           e_omp_order_kind_unspecified,
   80367             :           e_omp_order_kind_concurrent,
   80368             :         };
   80369             : 
   80370             :         enum omp_dist_schedule_kind_enum
   80371             :         {
   80372             :           e_omp_dist_schedule_kind_unspecified,
   80373             :           e_omp_dist_schedule_kind_static,
   80374             :         };
   80375             : 
   80376             :         enum omp_atomic_clause_enum
   80377             :         {
   80378             :           e_omp_atomic_clause_unknown,
   80379             :           e_omp_atomic_clause_read,
   80380             :           e_omp_atomic_clause_write,
   80381             :           e_omp_atomic_clause_update,
   80382             :           e_omp_atomic_clause_capture
   80383             :         };
   80384             : 
   80385             :         enum omp_if_modifier_enum
   80386             :         {
   80387             :             e_omp_if_modifier_unknown,
   80388             :             e_omp_if_parallel,
   80389             :             e_omp_if_simd,
   80390             :             e_omp_if_target,
   80391             :             e_omp_if_cancel,
   80392             :             e_omp_if_taskloop,
   80393             :             e_omp_if_target_data,
   80394             :             e_omp_if_target_enter_data,
   80395             :             e_omp_if_target_exit_data,
   80396             :             e_omp_if_task,
   80397             :             e_omp_if_target_update
   80398             :         };
   80399             : 
   80400             :         enum omp_depobj_modifier_enum
   80401             :         {
   80402             :             e_omp_depobj_modifier_unknown,
   80403             :             e_omp_depobj_modifier_in,
   80404             :             e_omp_depobj_modifier_out,
   80405             :             e_omp_depobj_modifier_inout,
   80406             :             e_omp_depobj_modifier_mutexinoutset,
   80407             :             e_omp_depobj_modifier_depobj,
   80408             :             e_omp_depobj_modifier_sink,
   80409             :             e_omp_depobj_modifier_source
   80410             :         };
   80411             : 
   80412             : 
   80413             : 
   80414             : 
   80415             : // End of memberFunctionString
   80416             : // Start of memberFunctionString
   80417             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   80418             : 
   80419             : // *** COMMON CODE SECTION BEGINS HERE ***
   80420             : 
   80421             :     public:
   80422             : 
   80423             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   80424             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   80425             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   80426             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   80427             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   80428             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   80429             : 
   80430             :       /*! \brief returns a string representing the class name */
   80431             :           virtual std::string class_name() const override;
   80432             : 
   80433             :       /*! \brief returns new style SageIII enum values */
   80434             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   80435             : 
   80436             :       /*! \brief static variant value */
   80437             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   80438             :        // static const VariantT static_variant = V_SgOmpClause;
   80439             :           enum { static_variant = V_SgOmpClause };
   80440             : 
   80441             :        /* the generated cast function */
   80442             :       /*! \brief Casts pointer from base class to derived class */
   80443             :           ROSE_DLL_API friend       SgOmpClause* isSgOmpClause(       SgNode * s );
   80444             : 
   80445             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   80446             :           ROSE_DLL_API friend const SgOmpClause* isSgOmpClause( const SgNode * s );
   80447             : 
   80448             :      // ******************************************
   80449             :      // * Memory Pool / New / Delete
   80450             :      // ******************************************
   80451             : 
   80452             :      public:
   80453             :           /// \private
   80454             :           static const unsigned pool_size; //
   80455             :           /// \private
   80456             :           static std::vector<unsigned char *> pools; //
   80457             :           /// \private
   80458             :           static SgOmpClause * next_node; // 
   80459             : 
   80460             :           /// \private
   80461             :           static unsigned long initializeStorageClassArray(SgOmpClauseStorageClass *); //
   80462             : 
   80463             :           /// \private
   80464             :           static void clearMemoryPool(); //
   80465             :           static void deleteMemoryPool(); //
   80466             : 
   80467             :           /// \private
   80468             :           static void extendMemoryPoolForFileIO(); //
   80469             : 
   80470             :           /// \private
   80471             :           static SgOmpClause * getPointerFromGlobalIndex(unsigned long); //
   80472             :           /// \private
   80473             :           static SgOmpClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   80474             : 
   80475             :           /// \private
   80476             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   80477             :           /// \private
   80478             :           static void resetValidFreepointers(); //
   80479             :           /// \private
   80480             :           static unsigned long getNumberOfLastValidPointer(); //
   80481             : 
   80482             : 
   80483             : #if defined(INLINE_FUNCTIONS)
   80484             :       /*! \brief returns pointer to newly allocated IR node */
   80485             :           inline void *operator new (size_t size);
   80486             : #else
   80487             :       /*! \brief returns pointer to newly allocated IR node */
   80488             :           void *operator new (size_t size);
   80489             : #endif
   80490             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   80491             :           void operator delete (void* pointer, size_t size);
   80492             : 
   80493             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   80494           0 :           void operator delete (void* pointer)
   80495             :              {
   80496             :             // This is the generated delete operator...
   80497           0 :                SgOmpClause::operator delete (pointer,sizeof(SgOmpClause));
   80498             :              }
   80499             : 
   80500             :       /*! \brief Returns the total number of IR nodes of this type */
   80501             :           static size_t numberOfNodes();
   80502             : 
   80503             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   80504             :           static size_t memoryUsage();
   80505             : 
   80506             :       // End of scope which started in IR nodes specific code 
   80507             :       /* */
   80508             : 
   80509             :       /* name Internal Functions
   80510             :           \brief Internal functions ... incomplete-documentation
   80511             : 
   80512             :           These functions have been made public as part of the design, but they are suggested for internal use 
   80513             :           or by particularly knowledgeable users for specialized tools or applications.
   80514             : 
   80515             :           \internal We could not make these private because they are required by user for special purposes. And 
   80516             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   80517             :          
   80518             :        */
   80519             : 
   80520             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   80521             :        // overridden in every class by *generated* implementation
   80522             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   80523             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   80524             :        // MS: 06/28/02 container of names of variables or container indices 
   80525             :        // used used in the traversal to access AST successor nodes
   80526             :        // overridden in every class by *generated* implementation
   80527             :       /*! \brief container of names of variables or container indices used used in the traversal
   80528             :           to access AST successor nodes overridden in every class by *generated* implementation */
   80529             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   80530             : 
   80531             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   80532             :        // than all the vector copies. The implementation for these functions is generated for each class.
   80533             :       /*! \brief return number of children in the traversal successor list */
   80534             :           virtual size_t get_numberOfTraversalSuccessors() override;
   80535             :       /*! \brief index-based access to traversal successors by index number */
   80536             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   80537             :       /*! \brief index-based access to traversal successors by child node */
   80538             :           virtual size_t get_childIndex(SgNode *child) override;
   80539             : 
   80540             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   80541             :        // MS: 08/16/2002 method for generating RTI information
   80542             :       /*! \brief return C++ Runtime-Time-Information */
   80543             :           virtual RTIReturnType roseRTI() override;
   80544             : #endif
   80545             :       /* */
   80546             : 
   80547             : 
   80548             : 
   80549             :       /* name Deprecated Functions
   80550             :           \brief Deprecated functions ... incomplete-documentation
   80551             : 
   80552             :           These functions have been deprecated from use.
   80553             :        */
   80554             :       /* */
   80555             : 
   80556             :       /*! returns a C style string (char*) representing the class name */
   80557             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   80558             : 
   80559             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   80560             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   80561             : #if 0
   80562             :       /*! returns old style Sage II enum values */
   80563             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   80564             :       /*! returns old style Sage II enum values */
   80565             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   80566             : #endif
   80567             :       /* */
   80568             : 
   80569             : 
   80570             : 
   80571             : 
   80572             :      public:
   80573             :       /* name Traversal Support Functions
   80574             :           \brief Traversal support functions ... incomplete-documentation
   80575             : 
   80576             :           These functions have been made public as part of the design, but they are suggested for internal use 
   80577             :           or by particularly knowledgable users for specialized tools or applications.
   80578             :        */
   80579             :       /* */
   80580             : 
   80581             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   80582             :        // (inferior to ROSE traversal mechanism, experimental).
   80583             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   80584             :        */
   80585             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   80586             : 
   80587             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   80588             :       /*! \brief support for the classic visitor pattern done in GoF */
   80589             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   80590             : 
   80591             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   80592             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   80593             :        */
   80594             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   80595             : 
   80596             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   80597             :        */
   80598             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   80599             : 
   80600             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   80601             :        // This traversal helps support internal tools that call static member functions.
   80602             :        // note: this function operates on the memory pools.
   80603             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   80604             :        */
   80605             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   80606             :       /* */
   80607             : 
   80608             : 
   80609             :      public:
   80610             :       /* name Memory Allocation Functions
   80611             :           \brief Memory allocations functions ... incomplete-documentation
   80612             : 
   80613             :           These functions have been made public as part of the design, but they are suggested for internal use 
   80614             :           or by particularly knowledgable users for specialized tools or applications.
   80615             :        */
   80616             :       /* */
   80617             : 
   80618             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   80619             : 
   80620             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   80621             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   80622             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   80623             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   80624             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   80625             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   80626             :           being used with the AST File I/O mechanism.
   80627             :        */
   80628             :           virtual bool isInMemoryPool() override;
   80629             : 
   80630             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   80631             : 
   80632             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   80633             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   80634             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   80635             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   80636             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   80637             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   80638             :           being used with the AST File I/O mechanism.
   80639             :        */
   80640             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   80641             : 
   80642             :       // DQ (4/30/2006): Modified to be a const function.
   80643             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   80644             : 
   80645             :           This functions is part of general support for many possible tools to operate 
   80646             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   80647             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   80648             :           less than the set of pointers used by the AST file I/O. This is part of
   80649             :           work implemented by Andreas, and support tools such as the AST graph generation.
   80650             : 
   80651             :           \warning This function can return unexpected data members and thus the 
   80652             :                    order and the number of elements is unpredicable and subject 
   80653             :                    to change.
   80654             : 
   80655             :           \returns STL vector of pairs of SgNode* and strings
   80656             :        */
   80657             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   80658             : 
   80659             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   80660             : 
   80661             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   80662             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   80663             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   80664             : 
   80665             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   80666             :                    and subject to change.
   80667             :        */
   80668             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   80669             : 
   80670             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   80671             : 
   80672             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   80673             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   80674             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   80675             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   80676             : 
   80677             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   80678             : 
   80679             :           \returns long
   80680             :        */
   80681             :           virtual long getChildIndex( SgNode* childNode ) const override;
   80682             : 
   80683             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   80684             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   80685             :       /* \brief Constructor for use by AST File I/O Mechanism
   80686             : 
   80687             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   80688             :           which obtained via fast binary file I/O from disk.
   80689             :        */
   80690             :        // SgOmpClause( SgOmpClauseStorageClass& source );
   80691             : 
   80692             : 
   80693             : 
   80694             : 
   80695             : 
   80696             :  // JH (10/24/2005): methods added to support the ast file IO
   80697             :     private:
   80698             : 
   80699             :       /* name AST Memory Allocation Support Functions
   80700             :           \brief Memory allocations support....
   80701             : 
   80702             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   80703             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   80704             :           and support the AST File I/O Mechanism.
   80705             :        */
   80706             :       /* */
   80707             : 
   80708             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   80709             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   80710             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   80711             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   80712             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   80713             :           a correspinding one in the AST_FILE_IO class!
   80714             :        */
   80715             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   80716             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   80717             :       /* \brief Typedef used for low level memory access.
   80718             :        */
   80719             :        // typedef unsigned char* TestType;
   80720             : 
   80721             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   80722             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   80723             :       /* \brief Typedef used to hold memory addresses as values.
   80724             :        */
   80725             :        // typedef unsigned long  AddressType;
   80726             : 
   80727             : 
   80728             : 
   80729             :        // necessary, to have direct access to the p_freepointer and the private methods !
   80730             :       /*! \brief friend class declaration to support AST File I/O */
   80731             :           friend class AST_FILE_IO;
   80732             : 
   80733             :       /*! \brief friend class declaration to support AST File I/O */
   80734             :           friend class SgOmpClauseStorageClass;
   80735             : 
   80736             :       /*! \brief friend class declaration to support AST File I/O */
   80737             :           friend class AstSpecificDataManagingClass;
   80738             : 
   80739             :       /*! \brief friend class declaration to support AST File I/O */
   80740             :           friend class AstSpecificDataManagingClassStorageClass;
   80741             :     public:
   80742             :       /*! \brief IR node constructor to support AST File I/O */
   80743             :           SgOmpClause( const SgOmpClauseStorageClass& source );
   80744             : 
   80745             :  // private: // JJW hack
   80746             :        /*
   80747             :           name AST Memory Allocation Support Variables
   80748             :           Memory allocations support variables 
   80749             : 
   80750             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   80751             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   80752             :           and support the AST File I/O Mechanism.
   80753             :        */
   80754             :       /* */
   80755             : 
   80756             :     public:
   80757             : 
   80758             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   80759             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   80760             :       // virtual SgNode* addRegExpAttribute();
   80761             :       /*! \brief Support for AST matching using regular expression.
   80762             : 
   80763             :           This support is incomplete and the subject of current research to define 
   80764             :           RegEx trees to support inexact matching.
   80765             :        */
   80766             :           SgOmpClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   80767             : 
   80768             : // *** COMMON CODE SECTION ENDS HERE ***
   80769             : 
   80770             : 
   80771             : // End of memberFunctionString
   80772             : // Start of memberFunctionString
   80773             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   80774             : 
   80775             :      // the generated cast function
   80776             :      // friend ROSE_DLL_API SgOmpClause* isSgOmpClause ( SgNode* s );
   80777             : 
   80778             :           typedef SgLocatedNodeSupport base_node_type;
   80779             : 
   80780             : 
   80781             : // End of memberFunctionString
   80782             : 
   80783             : 
   80784             :      public: 
   80785             :          virtual ~SgOmpClause();
   80786             : 
   80787             : 
   80788             :      public: 
   80789             :          SgOmpClause(Sg_File_Info* startOfConstruct ); 
   80790             :          SgOmpClause(); 
   80791             : 
   80792             :     protected:
   80793             : 
   80794             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpClause>;
   80795             : 
   80796             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   80797             : 
   80798             : 
   80799             :    };
   80800             : #endif
   80801             : 
   80802             : // postdeclarations for SgOmpClause
   80803             : 
   80804             : /* #line 80805 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   80805             : 
   80806             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   80807             : 
   80808             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   80809             : 
   80810             : 
   80811             : /* #line 80812 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   80812             : 
   80813             : 
   80814             : 
   80815             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   80816             : 
   80817             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   80818             : //      This code is automatically generated for each 
   80819             : //      terminal and non-terminal within the defined 
   80820             : //      grammar.  There is a simple way to change the 
   80821             : //      code to fix bugs etc.  See the ROSE README file
   80822             : //      for directions.
   80823             : 
   80824             : // tps: (02/22/2010): Adding DLL export requirements
   80825             : #include "rosedll.h"
   80826             : 
   80827             : // predeclarations for SgOmpNowaitClause
   80828             : 
   80829             : /* #line 80830 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   80830             : 
   80831             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   80832             : 
   80833             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   80834             : 
   80835             : #if 1
   80836             : // Class Definition for SgOmpNowaitClause
   80837             : class ROSE_DLL_API SgOmpNowaitClause  : public SgOmpClause
   80838             :    {
   80839             :      public:
   80840             : 
   80841             : 
   80842             : /* #line 80843 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   80843             : 
   80844             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   80845             : // Start of memberFunctionString
   80846             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   80847             : 
   80848             : // *** COMMON CODE SECTION BEGINS HERE ***
   80849             : 
   80850             :     public:
   80851             : 
   80852             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   80853             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   80854             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   80855             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   80856             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   80857             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   80858             : 
   80859             :       /*! \brief returns a string representing the class name */
   80860             :           virtual std::string class_name() const override;
   80861             : 
   80862             :       /*! \brief returns new style SageIII enum values */
   80863             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   80864             : 
   80865             :       /*! \brief static variant value */
   80866             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   80867             :        // static const VariantT static_variant = V_SgOmpNowaitClause;
   80868             :           enum { static_variant = V_SgOmpNowaitClause };
   80869             : 
   80870             :        /* the generated cast function */
   80871             :       /*! \brief Casts pointer from base class to derived class */
   80872             :           ROSE_DLL_API friend       SgOmpNowaitClause* isSgOmpNowaitClause(       SgNode * s );
   80873             : 
   80874             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   80875             :           ROSE_DLL_API friend const SgOmpNowaitClause* isSgOmpNowaitClause( const SgNode * s );
   80876             : 
   80877             :      // ******************************************
   80878             :      // * Memory Pool / New / Delete
   80879             :      // ******************************************
   80880             : 
   80881             :      public:
   80882             :           /// \private
   80883             :           static const unsigned pool_size; //
   80884             :           /// \private
   80885             :           static std::vector<unsigned char *> pools; //
   80886             :           /// \private
   80887             :           static SgOmpNowaitClause * next_node; // 
   80888             : 
   80889             :           /// \private
   80890             :           static unsigned long initializeStorageClassArray(SgOmpNowaitClauseStorageClass *); //
   80891             : 
   80892             :           /// \private
   80893             :           static void clearMemoryPool(); //
   80894             :           static void deleteMemoryPool(); //
   80895             : 
   80896             :           /// \private
   80897             :           static void extendMemoryPoolForFileIO(); //
   80898             : 
   80899             :           /// \private
   80900             :           static SgOmpNowaitClause * getPointerFromGlobalIndex(unsigned long); //
   80901             :           /// \private
   80902             :           static SgOmpNowaitClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   80903             : 
   80904             :           /// \private
   80905             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   80906             :           /// \private
   80907             :           static void resetValidFreepointers(); //
   80908             :           /// \private
   80909             :           static unsigned long getNumberOfLastValidPointer(); //
   80910             : 
   80911             : 
   80912             : #if defined(INLINE_FUNCTIONS)
   80913             :       /*! \brief returns pointer to newly allocated IR node */
   80914             :           inline void *operator new (size_t size);
   80915             : #else
   80916             :       /*! \brief returns pointer to newly allocated IR node */
   80917             :           void *operator new (size_t size);
   80918             : #endif
   80919             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   80920             :           void operator delete (void* pointer, size_t size);
   80921             : 
   80922             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   80923           0 :           void operator delete (void* pointer)
   80924             :              {
   80925             :             // This is the generated delete operator...
   80926           0 :                SgOmpNowaitClause::operator delete (pointer,sizeof(SgOmpNowaitClause));
   80927             :              }
   80928             : 
   80929             :       /*! \brief Returns the total number of IR nodes of this type */
   80930             :           static size_t numberOfNodes();
   80931             : 
   80932             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   80933             :           static size_t memoryUsage();
   80934             : 
   80935             :       // End of scope which started in IR nodes specific code 
   80936             :       /* */
   80937             : 
   80938             :       /* name Internal Functions
   80939             :           \brief Internal functions ... incomplete-documentation
   80940             : 
   80941             :           These functions have been made public as part of the design, but they are suggested for internal use 
   80942             :           or by particularly knowledgeable users for specialized tools or applications.
   80943             : 
   80944             :           \internal We could not make these private because they are required by user for special purposes. And 
   80945             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   80946             :          
   80947             :        */
   80948             : 
   80949             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   80950             :        // overridden in every class by *generated* implementation
   80951             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   80952             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   80953             :        // MS: 06/28/02 container of names of variables or container indices 
   80954             :        // used used in the traversal to access AST successor nodes
   80955             :        // overridden in every class by *generated* implementation
   80956             :       /*! \brief container of names of variables or container indices used used in the traversal
   80957             :           to access AST successor nodes overridden in every class by *generated* implementation */
   80958             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   80959             : 
   80960             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   80961             :        // than all the vector copies. The implementation for these functions is generated for each class.
   80962             :       /*! \brief return number of children in the traversal successor list */
   80963             :           virtual size_t get_numberOfTraversalSuccessors() override;
   80964             :       /*! \brief index-based access to traversal successors by index number */
   80965             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   80966             :       /*! \brief index-based access to traversal successors by child node */
   80967             :           virtual size_t get_childIndex(SgNode *child) override;
   80968             : 
   80969             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   80970             :        // MS: 08/16/2002 method for generating RTI information
   80971             :       /*! \brief return C++ Runtime-Time-Information */
   80972             :           virtual RTIReturnType roseRTI() override;
   80973             : #endif
   80974             :       /* */
   80975             : 
   80976             : 
   80977             : 
   80978             :       /* name Deprecated Functions
   80979             :           \brief Deprecated functions ... incomplete-documentation
   80980             : 
   80981             :           These functions have been deprecated from use.
   80982             :        */
   80983             :       /* */
   80984             : 
   80985             :       /*! returns a C style string (char*) representing the class name */
   80986             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   80987             : 
   80988             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   80989             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   80990             : #if 0
   80991             :       /*! returns old style Sage II enum values */
   80992             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   80993             :       /*! returns old style Sage II enum values */
   80994             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   80995             : #endif
   80996             :       /* */
   80997             : 
   80998             : 
   80999             : 
   81000             : 
   81001             :      public:
   81002             :       /* name Traversal Support Functions
   81003             :           \brief Traversal support functions ... incomplete-documentation
   81004             : 
   81005             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81006             :           or by particularly knowledgable users for specialized tools or applications.
   81007             :        */
   81008             :       /* */
   81009             : 
   81010             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   81011             :        // (inferior to ROSE traversal mechanism, experimental).
   81012             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   81013             :        */
   81014             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   81015             : 
   81016             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   81017             :       /*! \brief support for the classic visitor pattern done in GoF */
   81018             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   81019             : 
   81020             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   81021             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   81022             :        */
   81023             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   81024             : 
   81025             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   81026             :        */
   81027             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   81028             : 
   81029             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   81030             :        // This traversal helps support internal tools that call static member functions.
   81031             :        // note: this function operates on the memory pools.
   81032             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   81033             :        */
   81034             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   81035             :       /* */
   81036             : 
   81037             : 
   81038             :      public:
   81039             :       /* name Memory Allocation Functions
   81040             :           \brief Memory allocations functions ... incomplete-documentation
   81041             : 
   81042             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81043             :           or by particularly knowledgable users for specialized tools or applications.
   81044             :        */
   81045             :       /* */
   81046             : 
   81047             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   81048             : 
   81049             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   81050             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   81051             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   81052             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   81053             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   81054             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   81055             :           being used with the AST File I/O mechanism.
   81056             :        */
   81057             :           virtual bool isInMemoryPool() override;
   81058             : 
   81059             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   81060             : 
   81061             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   81062             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   81063             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   81064             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   81065             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   81066             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   81067             :           being used with the AST File I/O mechanism.
   81068             :        */
   81069             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   81070             : 
   81071             :       // DQ (4/30/2006): Modified to be a const function.
   81072             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   81073             : 
   81074             :           This functions is part of general support for many possible tools to operate 
   81075             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   81076             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   81077             :           less than the set of pointers used by the AST file I/O. This is part of
   81078             :           work implemented by Andreas, and support tools such as the AST graph generation.
   81079             : 
   81080             :           \warning This function can return unexpected data members and thus the 
   81081             :                    order and the number of elements is unpredicable and subject 
   81082             :                    to change.
   81083             : 
   81084             :           \returns STL vector of pairs of SgNode* and strings
   81085             :        */
   81086             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   81087             : 
   81088             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   81089             : 
   81090             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   81091             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   81092             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   81093             : 
   81094             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   81095             :                    and subject to change.
   81096             :        */
   81097             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   81098             : 
   81099             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   81100             : 
   81101             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   81102             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   81103             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   81104             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   81105             : 
   81106             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   81107             : 
   81108             :           \returns long
   81109             :        */
   81110             :           virtual long getChildIndex( SgNode* childNode ) const override;
   81111             : 
   81112             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   81113             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   81114             :       /* \brief Constructor for use by AST File I/O Mechanism
   81115             : 
   81116             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   81117             :           which obtained via fast binary file I/O from disk.
   81118             :        */
   81119             :        // SgOmpNowaitClause( SgOmpNowaitClauseStorageClass& source );
   81120             : 
   81121             : 
   81122             : 
   81123             : 
   81124             : 
   81125             :  // JH (10/24/2005): methods added to support the ast file IO
   81126             :     private:
   81127             : 
   81128             :       /* name AST Memory Allocation Support Functions
   81129             :           \brief Memory allocations support....
   81130             : 
   81131             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   81132             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   81133             :           and support the AST File I/O Mechanism.
   81134             :        */
   81135             :       /* */
   81136             : 
   81137             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   81138             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   81139             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   81140             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   81141             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   81142             :           a correspinding one in the AST_FILE_IO class!
   81143             :        */
   81144             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   81145             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   81146             :       /* \brief Typedef used for low level memory access.
   81147             :        */
   81148             :        // typedef unsigned char* TestType;
   81149             : 
   81150             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   81151             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   81152             :       /* \brief Typedef used to hold memory addresses as values.
   81153             :        */
   81154             :        // typedef unsigned long  AddressType;
   81155             : 
   81156             : 
   81157             : 
   81158             :        // necessary, to have direct access to the p_freepointer and the private methods !
   81159             :       /*! \brief friend class declaration to support AST File I/O */
   81160             :           friend class AST_FILE_IO;
   81161             : 
   81162             :       /*! \brief friend class declaration to support AST File I/O */
   81163             :           friend class SgOmpNowaitClauseStorageClass;
   81164             : 
   81165             :       /*! \brief friend class declaration to support AST File I/O */
   81166             :           friend class AstSpecificDataManagingClass;
   81167             : 
   81168             :       /*! \brief friend class declaration to support AST File I/O */
   81169             :           friend class AstSpecificDataManagingClassStorageClass;
   81170             :     public:
   81171             :       /*! \brief IR node constructor to support AST File I/O */
   81172             :           SgOmpNowaitClause( const SgOmpNowaitClauseStorageClass& source );
   81173             : 
   81174             :  // private: // JJW hack
   81175             :        /*
   81176             :           name AST Memory Allocation Support Variables
   81177             :           Memory allocations support variables 
   81178             : 
   81179             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   81180             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   81181             :           and support the AST File I/O Mechanism.
   81182             :        */
   81183             :       /* */
   81184             : 
   81185             :     public:
   81186             : 
   81187             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   81188             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   81189             :       // virtual SgNode* addRegExpAttribute();
   81190             :       /*! \brief Support for AST matching using regular expression.
   81191             : 
   81192             :           This support is incomplete and the subject of current research to define 
   81193             :           RegEx trees to support inexact matching.
   81194             :        */
   81195             :           SgOmpNowaitClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   81196             : 
   81197             : // *** COMMON CODE SECTION ENDS HERE ***
   81198             : 
   81199             : 
   81200             : // End of memberFunctionString
   81201             : // Start of memberFunctionString
   81202             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   81203             : 
   81204             :      // the generated cast function
   81205             :      // friend ROSE_DLL_API SgOmpNowaitClause* isSgOmpNowaitClause ( SgNode* s );
   81206             : 
   81207             :           typedef SgOmpClause base_node_type;
   81208             : 
   81209             : 
   81210             : // End of memberFunctionString
   81211             : 
   81212             : 
   81213             :      public: 
   81214             :          virtual ~SgOmpNowaitClause();
   81215             : 
   81216             : 
   81217             :      public: 
   81218             :          SgOmpNowaitClause(Sg_File_Info* startOfConstruct ); 
   81219             :          SgOmpNowaitClause(); 
   81220             : 
   81221             :     protected:
   81222             : 
   81223             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpNowaitClause>;
   81224             : 
   81225             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81226             : 
   81227             : 
   81228             :    };
   81229             : #endif
   81230             : 
   81231             : // postdeclarations for SgOmpNowaitClause
   81232             : 
   81233             : /* #line 81234 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81234             : 
   81235             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   81236             : 
   81237             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81238             : 
   81239             : 
   81240             : /* #line 81241 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81241             : 
   81242             : 
   81243             : 
   81244             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81245             : 
   81246             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   81247             : //      This code is automatically generated for each 
   81248             : //      terminal and non-terminal within the defined 
   81249             : //      grammar.  There is a simple way to change the 
   81250             : //      code to fix bugs etc.  See the ROSE README file
   81251             : //      for directions.
   81252             : 
   81253             : // tps: (02/22/2010): Adding DLL export requirements
   81254             : #include "rosedll.h"
   81255             : 
   81256             : // predeclarations for SgOmpReadClause
   81257             : 
   81258             : /* #line 81259 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81259             : 
   81260             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   81261             : 
   81262             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81263             : 
   81264             : #if 1
   81265             : // Class Definition for SgOmpReadClause
   81266             : class ROSE_DLL_API SgOmpReadClause  : public SgOmpClause
   81267             :    {
   81268             :      public:
   81269             : 
   81270             : 
   81271             : /* #line 81272 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81272             : 
   81273             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   81274             : // Start of memberFunctionString
   81275             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   81276             : 
   81277             : // *** COMMON CODE SECTION BEGINS HERE ***
   81278             : 
   81279             :     public:
   81280             : 
   81281             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   81282             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   81283             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   81284             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   81285             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   81286             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   81287             : 
   81288             :       /*! \brief returns a string representing the class name */
   81289             :           virtual std::string class_name() const override;
   81290             : 
   81291             :       /*! \brief returns new style SageIII enum values */
   81292             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   81293             : 
   81294             :       /*! \brief static variant value */
   81295             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   81296             :        // static const VariantT static_variant = V_SgOmpReadClause;
   81297             :           enum { static_variant = V_SgOmpReadClause };
   81298             : 
   81299             :        /* the generated cast function */
   81300             :       /*! \brief Casts pointer from base class to derived class */
   81301             :           ROSE_DLL_API friend       SgOmpReadClause* isSgOmpReadClause(       SgNode * s );
   81302             : 
   81303             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   81304             :           ROSE_DLL_API friend const SgOmpReadClause* isSgOmpReadClause( const SgNode * s );
   81305             : 
   81306             :      // ******************************************
   81307             :      // * Memory Pool / New / Delete
   81308             :      // ******************************************
   81309             : 
   81310             :      public:
   81311             :           /// \private
   81312             :           static const unsigned pool_size; //
   81313             :           /// \private
   81314             :           static std::vector<unsigned char *> pools; //
   81315             :           /// \private
   81316             :           static SgOmpReadClause * next_node; // 
   81317             : 
   81318             :           /// \private
   81319             :           static unsigned long initializeStorageClassArray(SgOmpReadClauseStorageClass *); //
   81320             : 
   81321             :           /// \private
   81322             :           static void clearMemoryPool(); //
   81323             :           static void deleteMemoryPool(); //
   81324             : 
   81325             :           /// \private
   81326             :           static void extendMemoryPoolForFileIO(); //
   81327             : 
   81328             :           /// \private
   81329             :           static SgOmpReadClause * getPointerFromGlobalIndex(unsigned long); //
   81330             :           /// \private
   81331             :           static SgOmpReadClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   81332             : 
   81333             :           /// \private
   81334             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   81335             :           /// \private
   81336             :           static void resetValidFreepointers(); //
   81337             :           /// \private
   81338             :           static unsigned long getNumberOfLastValidPointer(); //
   81339             : 
   81340             : 
   81341             : #if defined(INLINE_FUNCTIONS)
   81342             :       /*! \brief returns pointer to newly allocated IR node */
   81343             :           inline void *operator new (size_t size);
   81344             : #else
   81345             :       /*! \brief returns pointer to newly allocated IR node */
   81346             :           void *operator new (size_t size);
   81347             : #endif
   81348             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   81349             :           void operator delete (void* pointer, size_t size);
   81350             : 
   81351             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   81352           0 :           void operator delete (void* pointer)
   81353             :              {
   81354             :             // This is the generated delete operator...
   81355           0 :                SgOmpReadClause::operator delete (pointer,sizeof(SgOmpReadClause));
   81356             :              }
   81357             : 
   81358             :       /*! \brief Returns the total number of IR nodes of this type */
   81359             :           static size_t numberOfNodes();
   81360             : 
   81361             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   81362             :           static size_t memoryUsage();
   81363             : 
   81364             :       // End of scope which started in IR nodes specific code 
   81365             :       /* */
   81366             : 
   81367             :       /* name Internal Functions
   81368             :           \brief Internal functions ... incomplete-documentation
   81369             : 
   81370             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81371             :           or by particularly knowledgeable users for specialized tools or applications.
   81372             : 
   81373             :           \internal We could not make these private because they are required by user for special purposes. And 
   81374             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   81375             :          
   81376             :        */
   81377             : 
   81378             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   81379             :        // overridden in every class by *generated* implementation
   81380             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   81381             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   81382             :        // MS: 06/28/02 container of names of variables or container indices 
   81383             :        // used used in the traversal to access AST successor nodes
   81384             :        // overridden in every class by *generated* implementation
   81385             :       /*! \brief container of names of variables or container indices used used in the traversal
   81386             :           to access AST successor nodes overridden in every class by *generated* implementation */
   81387             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   81388             : 
   81389             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   81390             :        // than all the vector copies. The implementation for these functions is generated for each class.
   81391             :       /*! \brief return number of children in the traversal successor list */
   81392             :           virtual size_t get_numberOfTraversalSuccessors() override;
   81393             :       /*! \brief index-based access to traversal successors by index number */
   81394             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   81395             :       /*! \brief index-based access to traversal successors by child node */
   81396             :           virtual size_t get_childIndex(SgNode *child) override;
   81397             : 
   81398             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   81399             :        // MS: 08/16/2002 method for generating RTI information
   81400             :       /*! \brief return C++ Runtime-Time-Information */
   81401             :           virtual RTIReturnType roseRTI() override;
   81402             : #endif
   81403             :       /* */
   81404             : 
   81405             : 
   81406             : 
   81407             :       /* name Deprecated Functions
   81408             :           \brief Deprecated functions ... incomplete-documentation
   81409             : 
   81410             :           These functions have been deprecated from use.
   81411             :        */
   81412             :       /* */
   81413             : 
   81414             :       /*! returns a C style string (char*) representing the class name */
   81415             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   81416             : 
   81417             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   81418             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   81419             : #if 0
   81420             :       /*! returns old style Sage II enum values */
   81421             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   81422             :       /*! returns old style Sage II enum values */
   81423             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   81424             : #endif
   81425             :       /* */
   81426             : 
   81427             : 
   81428             : 
   81429             : 
   81430             :      public:
   81431             :       /* name Traversal Support Functions
   81432             :           \brief Traversal support functions ... incomplete-documentation
   81433             : 
   81434             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81435             :           or by particularly knowledgable users for specialized tools or applications.
   81436             :        */
   81437             :       /* */
   81438             : 
   81439             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   81440             :        // (inferior to ROSE traversal mechanism, experimental).
   81441             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   81442             :        */
   81443             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   81444             : 
   81445             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   81446             :       /*! \brief support for the classic visitor pattern done in GoF */
   81447             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   81448             : 
   81449             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   81450             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   81451             :        */
   81452             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   81453             : 
   81454             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   81455             :        */
   81456             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   81457             : 
   81458             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   81459             :        // This traversal helps support internal tools that call static member functions.
   81460             :        // note: this function operates on the memory pools.
   81461             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   81462             :        */
   81463             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   81464             :       /* */
   81465             : 
   81466             : 
   81467             :      public:
   81468             :       /* name Memory Allocation Functions
   81469             :           \brief Memory allocations functions ... incomplete-documentation
   81470             : 
   81471             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81472             :           or by particularly knowledgable users for specialized tools or applications.
   81473             :        */
   81474             :       /* */
   81475             : 
   81476             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   81477             : 
   81478             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   81479             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   81480             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   81481             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   81482             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   81483             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   81484             :           being used with the AST File I/O mechanism.
   81485             :        */
   81486             :           virtual bool isInMemoryPool() override;
   81487             : 
   81488             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   81489             : 
   81490             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   81491             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   81492             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   81493             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   81494             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   81495             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   81496             :           being used with the AST File I/O mechanism.
   81497             :        */
   81498             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   81499             : 
   81500             :       // DQ (4/30/2006): Modified to be a const function.
   81501             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   81502             : 
   81503             :           This functions is part of general support for many possible tools to operate 
   81504             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   81505             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   81506             :           less than the set of pointers used by the AST file I/O. This is part of
   81507             :           work implemented by Andreas, and support tools such as the AST graph generation.
   81508             : 
   81509             :           \warning This function can return unexpected data members and thus the 
   81510             :                    order and the number of elements is unpredicable and subject 
   81511             :                    to change.
   81512             : 
   81513             :           \returns STL vector of pairs of SgNode* and strings
   81514             :        */
   81515             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   81516             : 
   81517             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   81518             : 
   81519             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   81520             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   81521             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   81522             : 
   81523             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   81524             :                    and subject to change.
   81525             :        */
   81526             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   81527             : 
   81528             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   81529             : 
   81530             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   81531             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   81532             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   81533             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   81534             : 
   81535             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   81536             : 
   81537             :           \returns long
   81538             :        */
   81539             :           virtual long getChildIndex( SgNode* childNode ) const override;
   81540             : 
   81541             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   81542             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   81543             :       /* \brief Constructor for use by AST File I/O Mechanism
   81544             : 
   81545             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   81546             :           which obtained via fast binary file I/O from disk.
   81547             :        */
   81548             :        // SgOmpReadClause( SgOmpReadClauseStorageClass& source );
   81549             : 
   81550             : 
   81551             : 
   81552             : 
   81553             : 
   81554             :  // JH (10/24/2005): methods added to support the ast file IO
   81555             :     private:
   81556             : 
   81557             :       /* name AST Memory Allocation Support Functions
   81558             :           \brief Memory allocations support....
   81559             : 
   81560             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   81561             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   81562             :           and support the AST File I/O Mechanism.
   81563             :        */
   81564             :       /* */
   81565             : 
   81566             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   81567             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   81568             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   81569             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   81570             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   81571             :           a correspinding one in the AST_FILE_IO class!
   81572             :        */
   81573             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   81574             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   81575             :       /* \brief Typedef used for low level memory access.
   81576             :        */
   81577             :        // typedef unsigned char* TestType;
   81578             : 
   81579             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   81580             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   81581             :       /* \brief Typedef used to hold memory addresses as values.
   81582             :        */
   81583             :        // typedef unsigned long  AddressType;
   81584             : 
   81585             : 
   81586             : 
   81587             :        // necessary, to have direct access to the p_freepointer and the private methods !
   81588             :       /*! \brief friend class declaration to support AST File I/O */
   81589             :           friend class AST_FILE_IO;
   81590             : 
   81591             :       /*! \brief friend class declaration to support AST File I/O */
   81592             :           friend class SgOmpReadClauseStorageClass;
   81593             : 
   81594             :       /*! \brief friend class declaration to support AST File I/O */
   81595             :           friend class AstSpecificDataManagingClass;
   81596             : 
   81597             :       /*! \brief friend class declaration to support AST File I/O */
   81598             :           friend class AstSpecificDataManagingClassStorageClass;
   81599             :     public:
   81600             :       /*! \brief IR node constructor to support AST File I/O */
   81601             :           SgOmpReadClause( const SgOmpReadClauseStorageClass& source );
   81602             : 
   81603             :  // private: // JJW hack
   81604             :        /*
   81605             :           name AST Memory Allocation Support Variables
   81606             :           Memory allocations support variables 
   81607             : 
   81608             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   81609             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   81610             :           and support the AST File I/O Mechanism.
   81611             :        */
   81612             :       /* */
   81613             : 
   81614             :     public:
   81615             : 
   81616             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   81617             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   81618             :       // virtual SgNode* addRegExpAttribute();
   81619             :       /*! \brief Support for AST matching using regular expression.
   81620             : 
   81621             :           This support is incomplete and the subject of current research to define 
   81622             :           RegEx trees to support inexact matching.
   81623             :        */
   81624             :           SgOmpReadClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   81625             : 
   81626             : // *** COMMON CODE SECTION ENDS HERE ***
   81627             : 
   81628             : 
   81629             : // End of memberFunctionString
   81630             : // Start of memberFunctionString
   81631             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   81632             : 
   81633             :      // the generated cast function
   81634             :      // friend ROSE_DLL_API SgOmpReadClause* isSgOmpReadClause ( SgNode* s );
   81635             : 
   81636             :           typedef SgOmpClause base_node_type;
   81637             : 
   81638             : 
   81639             : // End of memberFunctionString
   81640             : 
   81641             : 
   81642             :      public: 
   81643             :          virtual ~SgOmpReadClause();
   81644             : 
   81645             : 
   81646             :      public: 
   81647             :          SgOmpReadClause(Sg_File_Info* startOfConstruct ); 
   81648             :          SgOmpReadClause(); 
   81649             : 
   81650             :     protected:
   81651             : 
   81652             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpReadClause>;
   81653             : 
   81654             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81655             : 
   81656             : 
   81657             :    };
   81658             : #endif
   81659             : 
   81660             : // postdeclarations for SgOmpReadClause
   81661             : 
   81662             : /* #line 81663 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81663             : 
   81664             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   81665             : 
   81666             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81667             : 
   81668             : 
   81669             : /* #line 81670 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81670             : 
   81671             : 
   81672             : 
   81673             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81674             : 
   81675             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   81676             : //      This code is automatically generated for each 
   81677             : //      terminal and non-terminal within the defined 
   81678             : //      grammar.  There is a simple way to change the 
   81679             : //      code to fix bugs etc.  See the ROSE README file
   81680             : //      for directions.
   81681             : 
   81682             : // tps: (02/22/2010): Adding DLL export requirements
   81683             : #include "rosedll.h"
   81684             : 
   81685             : // predeclarations for SgOmpThreadsClause
   81686             : 
   81687             : /* #line 81688 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81688             : 
   81689             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   81690             : 
   81691             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   81692             : 
   81693             : #if 1
   81694             : // Class Definition for SgOmpThreadsClause
   81695             : class ROSE_DLL_API SgOmpThreadsClause  : public SgOmpClause
   81696             :    {
   81697             :      public:
   81698             : 
   81699             : 
   81700             : /* #line 81701 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   81701             : 
   81702             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   81703             : // Start of memberFunctionString
   81704             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   81705             : 
   81706             : // *** COMMON CODE SECTION BEGINS HERE ***
   81707             : 
   81708             :     public:
   81709             : 
   81710             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   81711             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   81712             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   81713             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   81714             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   81715             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   81716             : 
   81717             :       /*! \brief returns a string representing the class name */
   81718             :           virtual std::string class_name() const override;
   81719             : 
   81720             :       /*! \brief returns new style SageIII enum values */
   81721             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   81722             : 
   81723             :       /*! \brief static variant value */
   81724             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   81725             :        // static const VariantT static_variant = V_SgOmpThreadsClause;
   81726             :           enum { static_variant = V_SgOmpThreadsClause };
   81727             : 
   81728             :        /* the generated cast function */
   81729             :       /*! \brief Casts pointer from base class to derived class */
   81730             :           ROSE_DLL_API friend       SgOmpThreadsClause* isSgOmpThreadsClause(       SgNode * s );
   81731             : 
   81732             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   81733             :           ROSE_DLL_API friend const SgOmpThreadsClause* isSgOmpThreadsClause( const SgNode * s );
   81734             : 
   81735             :      // ******************************************
   81736             :      // * Memory Pool / New / Delete
   81737             :      // ******************************************
   81738             : 
   81739             :      public:
   81740             :           /// \private
   81741             :           static const unsigned pool_size; //
   81742             :           /// \private
   81743             :           static std::vector<unsigned char *> pools; //
   81744             :           /// \private
   81745             :           static SgOmpThreadsClause * next_node; // 
   81746             : 
   81747             :           /// \private
   81748             :           static unsigned long initializeStorageClassArray(SgOmpThreadsClauseStorageClass *); //
   81749             : 
   81750             :           /// \private
   81751             :           static void clearMemoryPool(); //
   81752             :           static void deleteMemoryPool(); //
   81753             : 
   81754             :           /// \private
   81755             :           static void extendMemoryPoolForFileIO(); //
   81756             : 
   81757             :           /// \private
   81758             :           static SgOmpThreadsClause * getPointerFromGlobalIndex(unsigned long); //
   81759             :           /// \private
   81760             :           static SgOmpThreadsClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   81761             : 
   81762             :           /// \private
   81763             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   81764             :           /// \private
   81765             :           static void resetValidFreepointers(); //
   81766             :           /// \private
   81767             :           static unsigned long getNumberOfLastValidPointer(); //
   81768             : 
   81769             : 
   81770             : #if defined(INLINE_FUNCTIONS)
   81771             :       /*! \brief returns pointer to newly allocated IR node */
   81772             :           inline void *operator new (size_t size);
   81773             : #else
   81774             :       /*! \brief returns pointer to newly allocated IR node */
   81775             :           void *operator new (size_t size);
   81776             : #endif
   81777             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   81778             :           void operator delete (void* pointer, size_t size);
   81779             : 
   81780             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   81781           0 :           void operator delete (void* pointer)
   81782             :              {
   81783             :             // This is the generated delete operator...
   81784           0 :                SgOmpThreadsClause::operator delete (pointer,sizeof(SgOmpThreadsClause));
   81785             :              }
   81786             : 
   81787             :       /*! \brief Returns the total number of IR nodes of this type */
   81788             :           static size_t numberOfNodes();
   81789             : 
   81790             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   81791             :           static size_t memoryUsage();
   81792             : 
   81793             :       // End of scope which started in IR nodes specific code 
   81794             :       /* */
   81795             : 
   81796             :       /* name Internal Functions
   81797             :           \brief Internal functions ... incomplete-documentation
   81798             : 
   81799             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81800             :           or by particularly knowledgeable users for specialized tools or applications.
   81801             : 
   81802             :           \internal We could not make these private because they are required by user for special purposes. And 
   81803             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   81804             :          
   81805             :        */
   81806             : 
   81807             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   81808             :        // overridden in every class by *generated* implementation
   81809             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   81810             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   81811             :        // MS: 06/28/02 container of names of variables or container indices 
   81812             :        // used used in the traversal to access AST successor nodes
   81813             :        // overridden in every class by *generated* implementation
   81814             :       /*! \brief container of names of variables or container indices used used in the traversal
   81815             :           to access AST successor nodes overridden in every class by *generated* implementation */
   81816             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   81817             : 
   81818             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   81819             :        // than all the vector copies. The implementation for these functions is generated for each class.
   81820             :       /*! \brief return number of children in the traversal successor list */
   81821             :           virtual size_t get_numberOfTraversalSuccessors() override;
   81822             :       /*! \brief index-based access to traversal successors by index number */
   81823             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   81824             :       /*! \brief index-based access to traversal successors by child node */
   81825             :           virtual size_t get_childIndex(SgNode *child) override;
   81826             : 
   81827             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   81828             :        // MS: 08/16/2002 method for generating RTI information
   81829             :       /*! \brief return C++ Runtime-Time-Information */
   81830             :           virtual RTIReturnType roseRTI() override;
   81831             : #endif
   81832             :       /* */
   81833             : 
   81834             : 
   81835             : 
   81836             :       /* name Deprecated Functions
   81837             :           \brief Deprecated functions ... incomplete-documentation
   81838             : 
   81839             :           These functions have been deprecated from use.
   81840             :        */
   81841             :       /* */
   81842             : 
   81843             :       /*! returns a C style string (char*) representing the class name */
   81844             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   81845             : 
   81846             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   81847             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   81848             : #if 0
   81849             :       /*! returns old style Sage II enum values */
   81850             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   81851             :       /*! returns old style Sage II enum values */
   81852             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   81853             : #endif
   81854             :       /* */
   81855             : 
   81856             : 
   81857             : 
   81858             : 
   81859             :      public:
   81860             :       /* name Traversal Support Functions
   81861             :           \brief Traversal support functions ... incomplete-documentation
   81862             : 
   81863             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81864             :           or by particularly knowledgable users for specialized tools or applications.
   81865             :        */
   81866             :       /* */
   81867             : 
   81868             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   81869             :        // (inferior to ROSE traversal mechanism, experimental).
   81870             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   81871             :        */
   81872             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   81873             : 
   81874             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   81875             :       /*! \brief support for the classic visitor pattern done in GoF */
   81876             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   81877             : 
   81878             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   81879             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   81880             :        */
   81881             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   81882             : 
   81883             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   81884             :        */
   81885             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   81886             : 
   81887             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   81888             :        // This traversal helps support internal tools that call static member functions.
   81889             :        // note: this function operates on the memory pools.
   81890             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   81891             :        */
   81892             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   81893             :       /* */
   81894             : 
   81895             : 
   81896             :      public:
   81897             :       /* name Memory Allocation Functions
   81898             :           \brief Memory allocations functions ... incomplete-documentation
   81899             : 
   81900             :           These functions have been made public as part of the design, but they are suggested for internal use 
   81901             :           or by particularly knowledgable users for specialized tools or applications.
   81902             :        */
   81903             :       /* */
   81904             : 
   81905             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   81906             : 
   81907             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   81908             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   81909             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   81910             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   81911             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   81912             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   81913             :           being used with the AST File I/O mechanism.
   81914             :        */
   81915             :           virtual bool isInMemoryPool() override;
   81916             : 
   81917             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   81918             : 
   81919             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   81920             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   81921             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   81922             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   81923             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   81924             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   81925             :           being used with the AST File I/O mechanism.
   81926             :        */
   81927             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   81928             : 
   81929             :       // DQ (4/30/2006): Modified to be a const function.
   81930             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   81931             : 
   81932             :           This functions is part of general support for many possible tools to operate 
   81933             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   81934             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   81935             :           less than the set of pointers used by the AST file I/O. This is part of
   81936             :           work implemented by Andreas, and support tools such as the AST graph generation.
   81937             : 
   81938             :           \warning This function can return unexpected data members and thus the 
   81939             :                    order and the number of elements is unpredicable and subject 
   81940             :                    to change.
   81941             : 
   81942             :           \returns STL vector of pairs of SgNode* and strings
   81943             :        */
   81944             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   81945             : 
   81946             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   81947             : 
   81948             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   81949             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   81950             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   81951             : 
   81952             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   81953             :                    and subject to change.
   81954             :        */
   81955             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   81956             : 
   81957             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   81958             : 
   81959             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   81960             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   81961             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   81962             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   81963             : 
   81964             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   81965             : 
   81966             :           \returns long
   81967             :        */
   81968             :           virtual long getChildIndex( SgNode* childNode ) const override;
   81969             : 
   81970             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   81971             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   81972             :       /* \brief Constructor for use by AST File I/O Mechanism
   81973             : 
   81974             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   81975             :           which obtained via fast binary file I/O from disk.
   81976             :        */
   81977             :        // SgOmpThreadsClause( SgOmpThreadsClauseStorageClass& source );
   81978             : 
   81979             : 
   81980             : 
   81981             : 
   81982             : 
   81983             :  // JH (10/24/2005): methods added to support the ast file IO
   81984             :     private:
   81985             : 
   81986             :       /* name AST Memory Allocation Support Functions
   81987             :           \brief Memory allocations support....
   81988             : 
   81989             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   81990             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   81991             :           and support the AST File I/O Mechanism.
   81992             :        */
   81993             :       /* */
   81994             : 
   81995             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   81996             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   81997             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   81998             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   81999             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   82000             :           a correspinding one in the AST_FILE_IO class!
   82001             :        */
   82002             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   82003             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82004             :       /* \brief Typedef used for low level memory access.
   82005             :        */
   82006             :        // typedef unsigned char* TestType;
   82007             : 
   82008             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   82009             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82010             :       /* \brief Typedef used to hold memory addresses as values.
   82011             :        */
   82012             :        // typedef unsigned long  AddressType;
   82013             : 
   82014             : 
   82015             : 
   82016             :        // necessary, to have direct access to the p_freepointer and the private methods !
   82017             :       /*! \brief friend class declaration to support AST File I/O */
   82018             :           friend class AST_FILE_IO;
   82019             : 
   82020             :       /*! \brief friend class declaration to support AST File I/O */
   82021             :           friend class SgOmpThreadsClauseStorageClass;
   82022             : 
   82023             :       /*! \brief friend class declaration to support AST File I/O */
   82024             :           friend class AstSpecificDataManagingClass;
   82025             : 
   82026             :       /*! \brief friend class declaration to support AST File I/O */
   82027             :           friend class AstSpecificDataManagingClassStorageClass;
   82028             :     public:
   82029             :       /*! \brief IR node constructor to support AST File I/O */
   82030             :           SgOmpThreadsClause( const SgOmpThreadsClauseStorageClass& source );
   82031             : 
   82032             :  // private: // JJW hack
   82033             :        /*
   82034             :           name AST Memory Allocation Support Variables
   82035             :           Memory allocations support variables 
   82036             : 
   82037             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   82038             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   82039             :           and support the AST File I/O Mechanism.
   82040             :        */
   82041             :       /* */
   82042             : 
   82043             :     public:
   82044             : 
   82045             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   82046             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   82047             :       // virtual SgNode* addRegExpAttribute();
   82048             :       /*! \brief Support for AST matching using regular expression.
   82049             : 
   82050             :           This support is incomplete and the subject of current research to define 
   82051             :           RegEx trees to support inexact matching.
   82052             :        */
   82053             :           SgOmpThreadsClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   82054             : 
   82055             : // *** COMMON CODE SECTION ENDS HERE ***
   82056             : 
   82057             : 
   82058             : // End of memberFunctionString
   82059             : // Start of memberFunctionString
   82060             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   82061             : 
   82062             :      // the generated cast function
   82063             :      // friend ROSE_DLL_API SgOmpThreadsClause* isSgOmpThreadsClause ( SgNode* s );
   82064             : 
   82065             :           typedef SgOmpClause base_node_type;
   82066             : 
   82067             : 
   82068             : // End of memberFunctionString
   82069             : 
   82070             : 
   82071             :      public: 
   82072             :          virtual ~SgOmpThreadsClause();
   82073             : 
   82074             : 
   82075             :      public: 
   82076             :          SgOmpThreadsClause(Sg_File_Info* startOfConstruct ); 
   82077             :          SgOmpThreadsClause(); 
   82078             : 
   82079             :     protected:
   82080             : 
   82081             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpThreadsClause>;
   82082             : 
   82083             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82084             : 
   82085             : 
   82086             :    };
   82087             : #endif
   82088             : 
   82089             : // postdeclarations for SgOmpThreadsClause
   82090             : 
   82091             : /* #line 82092 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82092             : 
   82093             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   82094             : 
   82095             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82096             : 
   82097             : 
   82098             : /* #line 82099 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82099             : 
   82100             : 
   82101             : 
   82102             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82103             : 
   82104             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   82105             : //      This code is automatically generated for each 
   82106             : //      terminal and non-terminal within the defined 
   82107             : //      grammar.  There is a simple way to change the 
   82108             : //      code to fix bugs etc.  See the ROSE README file
   82109             : //      for directions.
   82110             : 
   82111             : // tps: (02/22/2010): Adding DLL export requirements
   82112             : #include "rosedll.h"
   82113             : 
   82114             : // predeclarations for SgOmpSimdClause
   82115             : 
   82116             : /* #line 82117 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82117             : 
   82118             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   82119             : 
   82120             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82121             : 
   82122             : #if 1
   82123             : // Class Definition for SgOmpSimdClause
   82124             : class ROSE_DLL_API SgOmpSimdClause  : public SgOmpClause
   82125             :    {
   82126             :      public:
   82127             : 
   82128             : 
   82129             : /* #line 82130 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82130             : 
   82131             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   82132             : // Start of memberFunctionString
   82133             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   82134             : 
   82135             : // *** COMMON CODE SECTION BEGINS HERE ***
   82136             : 
   82137             :     public:
   82138             : 
   82139             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   82140             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   82141             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   82142             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   82143             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   82144             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   82145             : 
   82146             :       /*! \brief returns a string representing the class name */
   82147             :           virtual std::string class_name() const override;
   82148             : 
   82149             :       /*! \brief returns new style SageIII enum values */
   82150             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   82151             : 
   82152             :       /*! \brief static variant value */
   82153             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   82154             :        // static const VariantT static_variant = V_SgOmpSimdClause;
   82155             :           enum { static_variant = V_SgOmpSimdClause };
   82156             : 
   82157             :        /* the generated cast function */
   82158             :       /*! \brief Casts pointer from base class to derived class */
   82159             :           ROSE_DLL_API friend       SgOmpSimdClause* isSgOmpSimdClause(       SgNode * s );
   82160             : 
   82161             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   82162             :           ROSE_DLL_API friend const SgOmpSimdClause* isSgOmpSimdClause( const SgNode * s );
   82163             : 
   82164             :      // ******************************************
   82165             :      // * Memory Pool / New / Delete
   82166             :      // ******************************************
   82167             : 
   82168             :      public:
   82169             :           /// \private
   82170             :           static const unsigned pool_size; //
   82171             :           /// \private
   82172             :           static std::vector<unsigned char *> pools; //
   82173             :           /// \private
   82174             :           static SgOmpSimdClause * next_node; // 
   82175             : 
   82176             :           /// \private
   82177             :           static unsigned long initializeStorageClassArray(SgOmpSimdClauseStorageClass *); //
   82178             : 
   82179             :           /// \private
   82180             :           static void clearMemoryPool(); //
   82181             :           static void deleteMemoryPool(); //
   82182             : 
   82183             :           /// \private
   82184             :           static void extendMemoryPoolForFileIO(); //
   82185             : 
   82186             :           /// \private
   82187             :           static SgOmpSimdClause * getPointerFromGlobalIndex(unsigned long); //
   82188             :           /// \private
   82189             :           static SgOmpSimdClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   82190             : 
   82191             :           /// \private
   82192             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   82193             :           /// \private
   82194             :           static void resetValidFreepointers(); //
   82195             :           /// \private
   82196             :           static unsigned long getNumberOfLastValidPointer(); //
   82197             : 
   82198             : 
   82199             : #if defined(INLINE_FUNCTIONS)
   82200             :       /*! \brief returns pointer to newly allocated IR node */
   82201             :           inline void *operator new (size_t size);
   82202             : #else
   82203             :       /*! \brief returns pointer to newly allocated IR node */
   82204             :           void *operator new (size_t size);
   82205             : #endif
   82206             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   82207             :           void operator delete (void* pointer, size_t size);
   82208             : 
   82209             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   82210           0 :           void operator delete (void* pointer)
   82211             :              {
   82212             :             // This is the generated delete operator...
   82213           0 :                SgOmpSimdClause::operator delete (pointer,sizeof(SgOmpSimdClause));
   82214             :              }
   82215             : 
   82216             :       /*! \brief Returns the total number of IR nodes of this type */
   82217             :           static size_t numberOfNodes();
   82218             : 
   82219             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   82220             :           static size_t memoryUsage();
   82221             : 
   82222             :       // End of scope which started in IR nodes specific code 
   82223             :       /* */
   82224             : 
   82225             :       /* name Internal Functions
   82226             :           \brief Internal functions ... incomplete-documentation
   82227             : 
   82228             :           These functions have been made public as part of the design, but they are suggested for internal use 
   82229             :           or by particularly knowledgeable users for specialized tools or applications.
   82230             : 
   82231             :           \internal We could not make these private because they are required by user for special purposes. And 
   82232             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   82233             :          
   82234             :        */
   82235             : 
   82236             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   82237             :        // overridden in every class by *generated* implementation
   82238             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   82239             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   82240             :        // MS: 06/28/02 container of names of variables or container indices 
   82241             :        // used used in the traversal to access AST successor nodes
   82242             :        // overridden in every class by *generated* implementation
   82243             :       /*! \brief container of names of variables or container indices used used in the traversal
   82244             :           to access AST successor nodes overridden in every class by *generated* implementation */
   82245             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   82246             : 
   82247             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   82248             :        // than all the vector copies. The implementation for these functions is generated for each class.
   82249             :       /*! \brief return number of children in the traversal successor list */
   82250             :           virtual size_t get_numberOfTraversalSuccessors() override;
   82251             :       /*! \brief index-based access to traversal successors by index number */
   82252             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   82253             :       /*! \brief index-based access to traversal successors by child node */
   82254             :           virtual size_t get_childIndex(SgNode *child) override;
   82255             : 
   82256             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   82257             :        // MS: 08/16/2002 method for generating RTI information
   82258             :       /*! \brief return C++ Runtime-Time-Information */
   82259             :           virtual RTIReturnType roseRTI() override;
   82260             : #endif
   82261             :       /* */
   82262             : 
   82263             : 
   82264             : 
   82265             :       /* name Deprecated Functions
   82266             :           \brief Deprecated functions ... incomplete-documentation
   82267             : 
   82268             :           These functions have been deprecated from use.
   82269             :        */
   82270             :       /* */
   82271             : 
   82272             :       /*! returns a C style string (char*) representing the class name */
   82273             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   82274             : 
   82275             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   82276             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   82277             : #if 0
   82278             :       /*! returns old style Sage II enum values */
   82279             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   82280             :       /*! returns old style Sage II enum values */
   82281             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   82282             : #endif
   82283             :       /* */
   82284             : 
   82285             : 
   82286             : 
   82287             : 
   82288             :      public:
   82289             :       /* name Traversal Support Functions
   82290             :           \brief Traversal support functions ... incomplete-documentation
   82291             : 
   82292             :           These functions have been made public as part of the design, but they are suggested for internal use 
   82293             :           or by particularly knowledgable users for specialized tools or applications.
   82294             :        */
   82295             :       /* */
   82296             : 
   82297             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   82298             :        // (inferior to ROSE traversal mechanism, experimental).
   82299             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   82300             :        */
   82301             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   82302             : 
   82303             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   82304             :       /*! \brief support for the classic visitor pattern done in GoF */
   82305             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   82306             : 
   82307             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   82308             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   82309             :        */
   82310             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   82311             : 
   82312             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   82313             :        */
   82314             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   82315             : 
   82316             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   82317             :        // This traversal helps support internal tools that call static member functions.
   82318             :        // note: this function operates on the memory pools.
   82319             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   82320             :        */
   82321             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   82322             :       /* */
   82323             : 
   82324             : 
   82325             :      public:
   82326             :       /* name Memory Allocation Functions
   82327             :           \brief Memory allocations functions ... incomplete-documentation
   82328             : 
   82329             :           These functions have been made public as part of the design, but they are suggested for internal use 
   82330             :           or by particularly knowledgable users for specialized tools or applications.
   82331             :        */
   82332             :       /* */
   82333             : 
   82334             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   82335             : 
   82336             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   82337             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   82338             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   82339             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   82340             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   82341             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   82342             :           being used with the AST File I/O mechanism.
   82343             :        */
   82344             :           virtual bool isInMemoryPool() override;
   82345             : 
   82346             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   82347             : 
   82348             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   82349             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   82350             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   82351             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   82352             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   82353             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   82354             :           being used with the AST File I/O mechanism.
   82355             :        */
   82356             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   82357             : 
   82358             :       // DQ (4/30/2006): Modified to be a const function.
   82359             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   82360             : 
   82361             :           This functions is part of general support for many possible tools to operate 
   82362             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   82363             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   82364             :           less than the set of pointers used by the AST file I/O. This is part of
   82365             :           work implemented by Andreas, and support tools such as the AST graph generation.
   82366             : 
   82367             :           \warning This function can return unexpected data members and thus the 
   82368             :                    order and the number of elements is unpredicable and subject 
   82369             :                    to change.
   82370             : 
   82371             :           \returns STL vector of pairs of SgNode* and strings
   82372             :        */
   82373             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   82374             : 
   82375             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   82376             : 
   82377             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   82378             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   82379             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   82380             : 
   82381             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   82382             :                    and subject to change.
   82383             :        */
   82384             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   82385             : 
   82386             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   82387             : 
   82388             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   82389             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   82390             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   82391             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   82392             : 
   82393             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   82394             : 
   82395             :           \returns long
   82396             :        */
   82397             :           virtual long getChildIndex( SgNode* childNode ) const override;
   82398             : 
   82399             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   82400             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82401             :       /* \brief Constructor for use by AST File I/O Mechanism
   82402             : 
   82403             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   82404             :           which obtained via fast binary file I/O from disk.
   82405             :        */
   82406             :        // SgOmpSimdClause( SgOmpSimdClauseStorageClass& source );
   82407             : 
   82408             : 
   82409             : 
   82410             : 
   82411             : 
   82412             :  // JH (10/24/2005): methods added to support the ast file IO
   82413             :     private:
   82414             : 
   82415             :       /* name AST Memory Allocation Support Functions
   82416             :           \brief Memory allocations support....
   82417             : 
   82418             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   82419             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   82420             :           and support the AST File I/O Mechanism.
   82421             :        */
   82422             :       /* */
   82423             : 
   82424             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   82425             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   82426             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   82427             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   82428             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   82429             :           a correspinding one in the AST_FILE_IO class!
   82430             :        */
   82431             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   82432             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82433             :       /* \brief Typedef used for low level memory access.
   82434             :        */
   82435             :        // typedef unsigned char* TestType;
   82436             : 
   82437             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   82438             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82439             :       /* \brief Typedef used to hold memory addresses as values.
   82440             :        */
   82441             :        // typedef unsigned long  AddressType;
   82442             : 
   82443             : 
   82444             : 
   82445             :        // necessary, to have direct access to the p_freepointer and the private methods !
   82446             :       /*! \brief friend class declaration to support AST File I/O */
   82447             :           friend class AST_FILE_IO;
   82448             : 
   82449             :       /*! \brief friend class declaration to support AST File I/O */
   82450             :           friend class SgOmpSimdClauseStorageClass;
   82451             : 
   82452             :       /*! \brief friend class declaration to support AST File I/O */
   82453             :           friend class AstSpecificDataManagingClass;
   82454             : 
   82455             :       /*! \brief friend class declaration to support AST File I/O */
   82456             :           friend class AstSpecificDataManagingClassStorageClass;
   82457             :     public:
   82458             :       /*! \brief IR node constructor to support AST File I/O */
   82459             :           SgOmpSimdClause( const SgOmpSimdClauseStorageClass& source );
   82460             : 
   82461             :  // private: // JJW hack
   82462             :        /*
   82463             :           name AST Memory Allocation Support Variables
   82464             :           Memory allocations support variables 
   82465             : 
   82466             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   82467             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   82468             :           and support the AST File I/O Mechanism.
   82469             :        */
   82470             :       /* */
   82471             : 
   82472             :     public:
   82473             : 
   82474             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   82475             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   82476             :       // virtual SgNode* addRegExpAttribute();
   82477             :       /*! \brief Support for AST matching using regular expression.
   82478             : 
   82479             :           This support is incomplete and the subject of current research to define 
   82480             :           RegEx trees to support inexact matching.
   82481             :        */
   82482             :           SgOmpSimdClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   82483             : 
   82484             : // *** COMMON CODE SECTION ENDS HERE ***
   82485             : 
   82486             : 
   82487             : // End of memberFunctionString
   82488             : // Start of memberFunctionString
   82489             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   82490             : 
   82491             :      // the generated cast function
   82492             :      // friend ROSE_DLL_API SgOmpSimdClause* isSgOmpSimdClause ( SgNode* s );
   82493             : 
   82494             :           typedef SgOmpClause base_node_type;
   82495             : 
   82496             : 
   82497             : // End of memberFunctionString
   82498             : 
   82499             : 
   82500             :      public: 
   82501             :          virtual ~SgOmpSimdClause();
   82502             : 
   82503             : 
   82504             :      public: 
   82505             :          SgOmpSimdClause(Sg_File_Info* startOfConstruct ); 
   82506             :          SgOmpSimdClause(); 
   82507             : 
   82508             :     protected:
   82509             : 
   82510             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSimdClause>;
   82511             : 
   82512             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82513             : 
   82514             : 
   82515             :    };
   82516             : #endif
   82517             : 
   82518             : // postdeclarations for SgOmpSimdClause
   82519             : 
   82520             : /* #line 82521 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82521             : 
   82522             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   82523             : 
   82524             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82525             : 
   82526             : 
   82527             : /* #line 82528 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82528             : 
   82529             : 
   82530             : 
   82531             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82532             : 
   82533             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   82534             : //      This code is automatically generated for each 
   82535             : //      terminal and non-terminal within the defined 
   82536             : //      grammar.  There is a simple way to change the 
   82537             : //      code to fix bugs etc.  See the ROSE README file
   82538             : //      for directions.
   82539             : 
   82540             : // tps: (02/22/2010): Adding DLL export requirements
   82541             : #include "rosedll.h"
   82542             : 
   82543             : // predeclarations for SgOmpWriteClause
   82544             : 
   82545             : /* #line 82546 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82546             : 
   82547             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   82548             : 
   82549             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82550             : 
   82551             : #if 1
   82552             : // Class Definition for SgOmpWriteClause
   82553             : class ROSE_DLL_API SgOmpWriteClause  : public SgOmpClause
   82554             :    {
   82555             :      public:
   82556             : 
   82557             : 
   82558             : /* #line 82559 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82559             : 
   82560             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   82561             : // Start of memberFunctionString
   82562             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   82563             : 
   82564             : // *** COMMON CODE SECTION BEGINS HERE ***
   82565             : 
   82566             :     public:
   82567             : 
   82568             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   82569             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   82570             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   82571             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   82572             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   82573             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   82574             : 
   82575             :       /*! \brief returns a string representing the class name */
   82576             :           virtual std::string class_name() const override;
   82577             : 
   82578             :       /*! \brief returns new style SageIII enum values */
   82579             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   82580             : 
   82581             :       /*! \brief static variant value */
   82582             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   82583             :        // static const VariantT static_variant = V_SgOmpWriteClause;
   82584             :           enum { static_variant = V_SgOmpWriteClause };
   82585             : 
   82586             :        /* the generated cast function */
   82587             :       /*! \brief Casts pointer from base class to derived class */
   82588             :           ROSE_DLL_API friend       SgOmpWriteClause* isSgOmpWriteClause(       SgNode * s );
   82589             : 
   82590             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   82591             :           ROSE_DLL_API friend const SgOmpWriteClause* isSgOmpWriteClause( const SgNode * s );
   82592             : 
   82593             :      // ******************************************
   82594             :      // * Memory Pool / New / Delete
   82595             :      // ******************************************
   82596             : 
   82597             :      public:
   82598             :           /// \private
   82599             :           static const unsigned pool_size; //
   82600             :           /// \private
   82601             :           static std::vector<unsigned char *> pools; //
   82602             :           /// \private
   82603             :           static SgOmpWriteClause * next_node; // 
   82604             : 
   82605             :           /// \private
   82606             :           static unsigned long initializeStorageClassArray(SgOmpWriteClauseStorageClass *); //
   82607             : 
   82608             :           /// \private
   82609             :           static void clearMemoryPool(); //
   82610             :           static void deleteMemoryPool(); //
   82611             : 
   82612             :           /// \private
   82613             :           static void extendMemoryPoolForFileIO(); //
   82614             : 
   82615             :           /// \private
   82616             :           static SgOmpWriteClause * getPointerFromGlobalIndex(unsigned long); //
   82617             :           /// \private
   82618             :           static SgOmpWriteClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   82619             : 
   82620             :           /// \private
   82621             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   82622             :           /// \private
   82623             :           static void resetValidFreepointers(); //
   82624             :           /// \private
   82625             :           static unsigned long getNumberOfLastValidPointer(); //
   82626             : 
   82627             : 
   82628             : #if defined(INLINE_FUNCTIONS)
   82629             :       /*! \brief returns pointer to newly allocated IR node */
   82630             :           inline void *operator new (size_t size);
   82631             : #else
   82632             :       /*! \brief returns pointer to newly allocated IR node */
   82633             :           void *operator new (size_t size);
   82634             : #endif
   82635             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   82636             :           void operator delete (void* pointer, size_t size);
   82637             : 
   82638             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   82639           0 :           void operator delete (void* pointer)
   82640             :              {
   82641             :             // This is the generated delete operator...
   82642           0 :                SgOmpWriteClause::operator delete (pointer,sizeof(SgOmpWriteClause));
   82643             :              }
   82644             : 
   82645             :       /*! \brief Returns the total number of IR nodes of this type */
   82646             :           static size_t numberOfNodes();
   82647             : 
   82648             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   82649             :           static size_t memoryUsage();
   82650             : 
   82651             :       // End of scope which started in IR nodes specific code 
   82652             :       /* */
   82653             : 
   82654             :       /* name Internal Functions
   82655             :           \brief Internal functions ... incomplete-documentation
   82656             : 
   82657             :           These functions have been made public as part of the design, but they are suggested for internal use 
   82658             :           or by particularly knowledgeable users for specialized tools or applications.
   82659             : 
   82660             :           \internal We could not make these private because they are required by user for special purposes. And 
   82661             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   82662             :          
   82663             :        */
   82664             : 
   82665             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   82666             :        // overridden in every class by *generated* implementation
   82667             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   82668             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   82669             :        // MS: 06/28/02 container of names of variables or container indices 
   82670             :        // used used in the traversal to access AST successor nodes
   82671             :        // overridden in every class by *generated* implementation
   82672             :       /*! \brief container of names of variables or container indices used used in the traversal
   82673             :           to access AST successor nodes overridden in every class by *generated* implementation */
   82674             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   82675             : 
   82676             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   82677             :        // than all the vector copies. The implementation for these functions is generated for each class.
   82678             :       /*! \brief return number of children in the traversal successor list */
   82679             :           virtual size_t get_numberOfTraversalSuccessors() override;
   82680             :       /*! \brief index-based access to traversal successors by index number */
   82681             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   82682             :       /*! \brief index-based access to traversal successors by child node */
   82683             :           virtual size_t get_childIndex(SgNode *child) override;
   82684             : 
   82685             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   82686             :        // MS: 08/16/2002 method for generating RTI information
   82687             :       /*! \brief return C++ Runtime-Time-Information */
   82688             :           virtual RTIReturnType roseRTI() override;
   82689             : #endif
   82690             :       /* */
   82691             : 
   82692             : 
   82693             : 
   82694             :       /* name Deprecated Functions
   82695             :           \brief Deprecated functions ... incomplete-documentation
   82696             : 
   82697             :           These functions have been deprecated from use.
   82698             :        */
   82699             :       /* */
   82700             : 
   82701             :       /*! returns a C style string (char*) representing the class name */
   82702             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   82703             : 
   82704             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   82705             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   82706             : #if 0
   82707             :       /*! returns old style Sage II enum values */
   82708             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   82709             :       /*! returns old style Sage II enum values */
   82710             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   82711             : #endif
   82712             :       /* */
   82713             : 
   82714             : 
   82715             : 
   82716             : 
   82717             :      public:
   82718             :       /* name Traversal Support Functions
   82719             :           \brief Traversal support functions ... incomplete-documentation
   82720             : 
   82721             :           These functions have been made public as part of the design, but they are suggested for internal use 
   82722             :           or by particularly knowledgable users for specialized tools or applications.
   82723             :        */
   82724             :       /* */
   82725             : 
   82726             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   82727             :        // (inferior to ROSE traversal mechanism, experimental).
   82728             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   82729             :        */
   82730             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   82731             : 
   82732             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   82733             :       /*! \brief support for the classic visitor pattern done in GoF */
   82734             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   82735             : 
   82736             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   82737             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   82738             :        */
   82739             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   82740             : 
   82741             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   82742             :        */
   82743             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   82744             : 
   82745             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   82746             :        // This traversal helps support internal tools that call static member functions.
   82747             :        // note: this function operates on the memory pools.
   82748             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   82749             :        */
   82750             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   82751             :       /* */
   82752             : 
   82753             : 
   82754             :      public:
   82755             :       /* name Memory Allocation Functions
   82756             :           \brief Memory allocations functions ... incomplete-documentation
   82757             : 
   82758             :           These functions have been made public as part of the design, but they are suggested for internal use 
   82759             :           or by particularly knowledgable users for specialized tools or applications.
   82760             :        */
   82761             :       /* */
   82762             : 
   82763             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   82764             : 
   82765             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   82766             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   82767             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   82768             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   82769             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   82770             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   82771             :           being used with the AST File I/O mechanism.
   82772             :        */
   82773             :           virtual bool isInMemoryPool() override;
   82774             : 
   82775             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   82776             : 
   82777             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   82778             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   82779             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   82780             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   82781             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   82782             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   82783             :           being used with the AST File I/O mechanism.
   82784             :        */
   82785             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   82786             : 
   82787             :       // DQ (4/30/2006): Modified to be a const function.
   82788             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   82789             : 
   82790             :           This functions is part of general support for many possible tools to operate 
   82791             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   82792             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   82793             :           less than the set of pointers used by the AST file I/O. This is part of
   82794             :           work implemented by Andreas, and support tools such as the AST graph generation.
   82795             : 
   82796             :           \warning This function can return unexpected data members and thus the 
   82797             :                    order and the number of elements is unpredicable and subject 
   82798             :                    to change.
   82799             : 
   82800             :           \returns STL vector of pairs of SgNode* and strings
   82801             :        */
   82802             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   82803             : 
   82804             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   82805             : 
   82806             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   82807             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   82808             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   82809             : 
   82810             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   82811             :                    and subject to change.
   82812             :        */
   82813             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   82814             : 
   82815             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   82816             : 
   82817             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   82818             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   82819             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   82820             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   82821             : 
   82822             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   82823             : 
   82824             :           \returns long
   82825             :        */
   82826             :           virtual long getChildIndex( SgNode* childNode ) const override;
   82827             : 
   82828             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   82829             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82830             :       /* \brief Constructor for use by AST File I/O Mechanism
   82831             : 
   82832             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   82833             :           which obtained via fast binary file I/O from disk.
   82834             :        */
   82835             :        // SgOmpWriteClause( SgOmpWriteClauseStorageClass& source );
   82836             : 
   82837             : 
   82838             : 
   82839             : 
   82840             : 
   82841             :  // JH (10/24/2005): methods added to support the ast file IO
   82842             :     private:
   82843             : 
   82844             :       /* name AST Memory Allocation Support Functions
   82845             :           \brief Memory allocations support....
   82846             : 
   82847             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   82848             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   82849             :           and support the AST File I/O Mechanism.
   82850             :        */
   82851             :       /* */
   82852             : 
   82853             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   82854             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   82855             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   82856             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   82857             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   82858             :           a correspinding one in the AST_FILE_IO class!
   82859             :        */
   82860             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   82861             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82862             :       /* \brief Typedef used for low level memory access.
   82863             :        */
   82864             :        // typedef unsigned char* TestType;
   82865             : 
   82866             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   82867             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   82868             :       /* \brief Typedef used to hold memory addresses as values.
   82869             :        */
   82870             :        // typedef unsigned long  AddressType;
   82871             : 
   82872             : 
   82873             : 
   82874             :        // necessary, to have direct access to the p_freepointer and the private methods !
   82875             :       /*! \brief friend class declaration to support AST File I/O */
   82876             :           friend class AST_FILE_IO;
   82877             : 
   82878             :       /*! \brief friend class declaration to support AST File I/O */
   82879             :           friend class SgOmpWriteClauseStorageClass;
   82880             : 
   82881             :       /*! \brief friend class declaration to support AST File I/O */
   82882             :           friend class AstSpecificDataManagingClass;
   82883             : 
   82884             :       /*! \brief friend class declaration to support AST File I/O */
   82885             :           friend class AstSpecificDataManagingClassStorageClass;
   82886             :     public:
   82887             :       /*! \brief IR node constructor to support AST File I/O */
   82888             :           SgOmpWriteClause( const SgOmpWriteClauseStorageClass& source );
   82889             : 
   82890             :  // private: // JJW hack
   82891             :        /*
   82892             :           name AST Memory Allocation Support Variables
   82893             :           Memory allocations support variables 
   82894             : 
   82895             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   82896             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   82897             :           and support the AST File I/O Mechanism.
   82898             :        */
   82899             :       /* */
   82900             : 
   82901             :     public:
   82902             : 
   82903             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   82904             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   82905             :       // virtual SgNode* addRegExpAttribute();
   82906             :       /*! \brief Support for AST matching using regular expression.
   82907             : 
   82908             :           This support is incomplete and the subject of current research to define 
   82909             :           RegEx trees to support inexact matching.
   82910             :        */
   82911             :           SgOmpWriteClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   82912             : 
   82913             : // *** COMMON CODE SECTION ENDS HERE ***
   82914             : 
   82915             : 
   82916             : // End of memberFunctionString
   82917             : // Start of memberFunctionString
   82918             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   82919             : 
   82920             :      // the generated cast function
   82921             :      // friend ROSE_DLL_API SgOmpWriteClause* isSgOmpWriteClause ( SgNode* s );
   82922             : 
   82923             :           typedef SgOmpClause base_node_type;
   82924             : 
   82925             : 
   82926             : // End of memberFunctionString
   82927             : 
   82928             : 
   82929             :      public: 
   82930             :          virtual ~SgOmpWriteClause();
   82931             : 
   82932             : 
   82933             :      public: 
   82934             :          SgOmpWriteClause(Sg_File_Info* startOfConstruct ); 
   82935             :          SgOmpWriteClause(); 
   82936             : 
   82937             :     protected:
   82938             : 
   82939             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpWriteClause>;
   82940             : 
   82941             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82942             : 
   82943             : 
   82944             :    };
   82945             : #endif
   82946             : 
   82947             : // postdeclarations for SgOmpWriteClause
   82948             : 
   82949             : /* #line 82950 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82950             : 
   82951             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   82952             : 
   82953             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82954             : 
   82955             : 
   82956             : /* #line 82957 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82957             : 
   82958             : 
   82959             : 
   82960             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82961             : 
   82962             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   82963             : //      This code is automatically generated for each 
   82964             : //      terminal and non-terminal within the defined 
   82965             : //      grammar.  There is a simple way to change the 
   82966             : //      code to fix bugs etc.  See the ROSE README file
   82967             : //      for directions.
   82968             : 
   82969             : // tps: (02/22/2010): Adding DLL export requirements
   82970             : #include "rosedll.h"
   82971             : 
   82972             : // predeclarations for SgOmpUpdateClause
   82973             : 
   82974             : /* #line 82975 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82975             : 
   82976             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   82977             : 
   82978             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   82979             : 
   82980             : #if 1
   82981             : // Class Definition for SgOmpUpdateClause
   82982             : class ROSE_DLL_API SgOmpUpdateClause  : public SgOmpClause
   82983             :    {
   82984             :      public:
   82985             : 
   82986             : 
   82987             : /* #line 82988 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   82988             : 
   82989             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   82990             : // Start of memberFunctionString
   82991             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   82992             : 
   82993             : // *** COMMON CODE SECTION BEGINS HERE ***
   82994             : 
   82995             :     public:
   82996             : 
   82997             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   82998             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   82999             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   83000             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   83001             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   83002             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   83003             : 
   83004             :       /*! \brief returns a string representing the class name */
   83005             :           virtual std::string class_name() const override;
   83006             : 
   83007             :       /*! \brief returns new style SageIII enum values */
   83008             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   83009             : 
   83010             :       /*! \brief static variant value */
   83011             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   83012             :        // static const VariantT static_variant = V_SgOmpUpdateClause;
   83013             :           enum { static_variant = V_SgOmpUpdateClause };
   83014             : 
   83015             :        /* the generated cast function */
   83016             :       /*! \brief Casts pointer from base class to derived class */
   83017             :           ROSE_DLL_API friend       SgOmpUpdateClause* isSgOmpUpdateClause(       SgNode * s );
   83018             : 
   83019             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   83020             :           ROSE_DLL_API friend const SgOmpUpdateClause* isSgOmpUpdateClause( const SgNode * s );
   83021             : 
   83022             :      // ******************************************
   83023             :      // * Memory Pool / New / Delete
   83024             :      // ******************************************
   83025             : 
   83026             :      public:
   83027             :           /// \private
   83028             :           static const unsigned pool_size; //
   83029             :           /// \private
   83030             :           static std::vector<unsigned char *> pools; //
   83031             :           /// \private
   83032             :           static SgOmpUpdateClause * next_node; // 
   83033             : 
   83034             :           /// \private
   83035             :           static unsigned long initializeStorageClassArray(SgOmpUpdateClauseStorageClass *); //
   83036             : 
   83037             :           /// \private
   83038             :           static void clearMemoryPool(); //
   83039             :           static void deleteMemoryPool(); //
   83040             : 
   83041             :           /// \private
   83042             :           static void extendMemoryPoolForFileIO(); //
   83043             : 
   83044             :           /// \private
   83045             :           static SgOmpUpdateClause * getPointerFromGlobalIndex(unsigned long); //
   83046             :           /// \private
   83047             :           static SgOmpUpdateClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   83048             : 
   83049             :           /// \private
   83050             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   83051             :           /// \private
   83052             :           static void resetValidFreepointers(); //
   83053             :           /// \private
   83054             :           static unsigned long getNumberOfLastValidPointer(); //
   83055             : 
   83056             : 
   83057             : #if defined(INLINE_FUNCTIONS)
   83058             :       /*! \brief returns pointer to newly allocated IR node */
   83059             :           inline void *operator new (size_t size);
   83060             : #else
   83061             :       /*! \brief returns pointer to newly allocated IR node */
   83062             :           void *operator new (size_t size);
   83063             : #endif
   83064             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   83065             :           void operator delete (void* pointer, size_t size);
   83066             : 
   83067             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   83068           0 :           void operator delete (void* pointer)
   83069             :              {
   83070             :             // This is the generated delete operator...
   83071           0 :                SgOmpUpdateClause::operator delete (pointer,sizeof(SgOmpUpdateClause));
   83072             :              }
   83073             : 
   83074             :       /*! \brief Returns the total number of IR nodes of this type */
   83075             :           static size_t numberOfNodes();
   83076             : 
   83077             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   83078             :           static size_t memoryUsage();
   83079             : 
   83080             :       // End of scope which started in IR nodes specific code 
   83081             :       /* */
   83082             : 
   83083             :       /* name Internal Functions
   83084             :           \brief Internal functions ... incomplete-documentation
   83085             : 
   83086             :           These functions have been made public as part of the design, but they are suggested for internal use 
   83087             :           or by particularly knowledgeable users for specialized tools or applications.
   83088             : 
   83089             :           \internal We could not make these private because they are required by user for special purposes. And 
   83090             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   83091             :          
   83092             :        */
   83093             : 
   83094             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   83095             :        // overridden in every class by *generated* implementation
   83096             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   83097             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   83098             :        // MS: 06/28/02 container of names of variables or container indices 
   83099             :        // used used in the traversal to access AST successor nodes
   83100             :        // overridden in every class by *generated* implementation
   83101             :       /*! \brief container of names of variables or container indices used used in the traversal
   83102             :           to access AST successor nodes overridden in every class by *generated* implementation */
   83103             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   83104             : 
   83105             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   83106             :        // than all the vector copies. The implementation for these functions is generated for each class.
   83107             :       /*! \brief return number of children in the traversal successor list */
   83108             :           virtual size_t get_numberOfTraversalSuccessors() override;
   83109             :       /*! \brief index-based access to traversal successors by index number */
   83110             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   83111             :       /*! \brief index-based access to traversal successors by child node */
   83112             :           virtual size_t get_childIndex(SgNode *child) override;
   83113             : 
   83114             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   83115             :        // MS: 08/16/2002 method for generating RTI information
   83116             :       /*! \brief return C++ Runtime-Time-Information */
   83117             :           virtual RTIReturnType roseRTI() override;
   83118             : #endif
   83119             :       /* */
   83120             : 
   83121             : 
   83122             : 
   83123             :       /* name Deprecated Functions
   83124             :           \brief Deprecated functions ... incomplete-documentation
   83125             : 
   83126             :           These functions have been deprecated from use.
   83127             :        */
   83128             :       /* */
   83129             : 
   83130             :       /*! returns a C style string (char*) representing the class name */
   83131             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   83132             : 
   83133             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   83134             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   83135             : #if 0
   83136             :       /*! returns old style Sage II enum values */
   83137             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   83138             :       /*! returns old style Sage II enum values */
   83139             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   83140             : #endif
   83141             :       /* */
   83142             : 
   83143             : 
   83144             : 
   83145             : 
   83146             :      public:
   83147             :       /* name Traversal Support Functions
   83148             :           \brief Traversal support functions ... incomplete-documentation
   83149             : 
   83150             :           These functions have been made public as part of the design, but they are suggested for internal use 
   83151             :           or by particularly knowledgable users for specialized tools or applications.
   83152             :        */
   83153             :       /* */
   83154             : 
   83155             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   83156             :        // (inferior to ROSE traversal mechanism, experimental).
   83157             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   83158             :        */
   83159             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   83160             : 
   83161             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   83162             :       /*! \brief support for the classic visitor pattern done in GoF */
   83163             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   83164             : 
   83165             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   83166             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   83167             :        */
   83168             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   83169             : 
   83170             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   83171             :        */
   83172             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   83173             : 
   83174             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   83175             :        // This traversal helps support internal tools that call static member functions.
   83176             :        // note: this function operates on the memory pools.
   83177             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   83178             :        */
   83179             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   83180             :       /* */
   83181             : 
   83182             : 
   83183             :      public:
   83184             :       /* name Memory Allocation Functions
   83185             :           \brief Memory allocations functions ... incomplete-documentation
   83186             : 
   83187             :           These functions have been made public as part of the design, but they are suggested for internal use 
   83188             :           or by particularly knowledgable users for specialized tools or applications.
   83189             :        */
   83190             :       /* */
   83191             : 
   83192             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   83193             : 
   83194             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   83195             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   83196             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   83197             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   83198             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   83199             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   83200             :           being used with the AST File I/O mechanism.
   83201             :        */
   83202             :           virtual bool isInMemoryPool() override;
   83203             : 
   83204             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   83205             : 
   83206             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   83207             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   83208             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   83209             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   83210             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   83211             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   83212             :           being used with the AST File I/O mechanism.
   83213             :        */
   83214             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   83215             : 
   83216             :       // DQ (4/30/2006): Modified to be a const function.
   83217             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   83218             : 
   83219             :           This functions is part of general support for many possible tools to operate 
   83220             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   83221             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   83222             :           less than the set of pointers used by the AST file I/O. This is part of
   83223             :           work implemented by Andreas, and support tools such as the AST graph generation.
   83224             : 
   83225             :           \warning This function can return unexpected data members and thus the 
   83226             :                    order and the number of elements is unpredicable and subject 
   83227             :                    to change.
   83228             : 
   83229             :           \returns STL vector of pairs of SgNode* and strings
   83230             :        */
   83231             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   83232             : 
   83233             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   83234             : 
   83235             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   83236             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   83237             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   83238             : 
   83239             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   83240             :                    and subject to change.
   83241             :        */
   83242             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   83243             : 
   83244             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   83245             : 
   83246             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   83247             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   83248             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   83249             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   83250             : 
   83251             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   83252             : 
   83253             :           \returns long
   83254             :        */
   83255             :           virtual long getChildIndex( SgNode* childNode ) const override;
   83256             : 
   83257             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   83258             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   83259             :       /* \brief Constructor for use by AST File I/O Mechanism
   83260             : 
   83261             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   83262             :           which obtained via fast binary file I/O from disk.
   83263             :        */
   83264             :        // SgOmpUpdateClause( SgOmpUpdateClauseStorageClass& source );
   83265             : 
   83266             : 
   83267             : 
   83268             : 
   83269             : 
   83270             :  // JH (10/24/2005): methods added to support the ast file IO
   83271             :     private:
   83272             : 
   83273             :       /* name AST Memory Allocation Support Functions
   83274             :           \brief Memory allocations support....
   83275             : 
   83276             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   83277             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   83278             :           and support the AST File I/O Mechanism.
   83279             :        */
   83280             :       /* */
   83281             : 
   83282             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   83283             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   83284             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   83285             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   83286             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   83287             :           a correspinding one in the AST_FILE_IO class!
   83288             :        */
   83289             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   83290             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   83291             :       /* \brief Typedef used for low level memory access.
   83292             :        */
   83293             :        // typedef unsigned char* TestType;
   83294             : 
   83295             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   83296             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   83297             :       /* \brief Typedef used to hold memory addresses as values.
   83298             :        */
   83299             :        // typedef unsigned long  AddressType;
   83300             : 
   83301             : 
   83302             : 
   83303             :        // necessary, to have direct access to the p_freepointer and the private methods !
   83304             :       /*! \brief friend class declaration to support AST File I/O */
   83305             :           friend class AST_FILE_IO;
   83306             : 
   83307             :       /*! \brief friend class declaration to support AST File I/O */
   83308             :           friend class SgOmpUpdateClauseStorageClass;
   83309             : 
   83310             :       /*! \brief friend class declaration to support AST File I/O */
   83311             :           friend class AstSpecificDataManagingClass;
   83312             : 
   83313             :       /*! \brief friend class declaration to support AST File I/O */
   83314             :           friend class AstSpecificDataManagingClassStorageClass;
   83315             :     public:
   83316             :       /*! \brief IR node constructor to support AST File I/O */
   83317             :           SgOmpUpdateClause( const SgOmpUpdateClauseStorageClass& source );
   83318             : 
   83319             :  // private: // JJW hack
   83320             :        /*
   83321             :           name AST Memory Allocation Support Variables
   83322             :           Memory allocations support variables 
   83323             : 
   83324             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   83325             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   83326             :           and support the AST File I/O Mechanism.
   83327             :        */
   83328             :       /* */
   83329             : 
   83330             :     public:
   83331             : 
   83332             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   83333             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   83334             :       // virtual SgNode* addRegExpAttribute();
   83335             :       /*! \brief Support for AST matching using regular expression.
   83336             : 
   83337             :           This support is incomplete and the subject of current research to define 
   83338             :           RegEx trees to support inexact matching.
   83339             :        */
   83340             :           SgOmpUpdateClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   83341             : 
   83342             : // *** COMMON CODE SECTION ENDS HERE ***
   83343             : 
   83344             : 
   83345             : // End of memberFunctionString
   83346             : // Start of memberFunctionString
   83347             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   83348             : 
   83349             :      // the generated cast function
   83350             :      // friend ROSE_DLL_API SgOmpUpdateClause* isSgOmpUpdateClause ( SgNode* s );
   83351             : 
   83352             :           typedef SgOmpClause base_node_type;
   83353             : 
   83354             : 
   83355             : // End of memberFunctionString
   83356             : 
   83357             : 
   83358             :      public: 
   83359             :          virtual ~SgOmpUpdateClause();
   83360             : 
   83361             : 
   83362             :      public: 
   83363             :          SgOmpUpdateClause(Sg_File_Info* startOfConstruct ); 
   83364             :          SgOmpUpdateClause(); 
   83365             : 
   83366             :     protected:
   83367             : 
   83368             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUpdateClause>;
   83369             : 
   83370             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83371             : 
   83372             : 
   83373             :    };
   83374             : #endif
   83375             : 
   83376             : // postdeclarations for SgOmpUpdateClause
   83377             : 
   83378             : /* #line 83379 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83379             : 
   83380             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   83381             : 
   83382             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83383             : 
   83384             : 
   83385             : /* #line 83386 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83386             : 
   83387             : 
   83388             : 
   83389             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83390             : 
   83391             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   83392             : //      This code is automatically generated for each 
   83393             : //      terminal and non-terminal within the defined 
   83394             : //      grammar.  There is a simple way to change the 
   83395             : //      code to fix bugs etc.  See the ROSE README file
   83396             : //      for directions.
   83397             : 
   83398             : // tps: (02/22/2010): Adding DLL export requirements
   83399             : #include "rosedll.h"
   83400             : 
   83401             : // predeclarations for SgOmpDepobjUpdateClause
   83402             : 
   83403             : /* #line 83404 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83404             : 
   83405             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   83406             : 
   83407             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83408             : 
   83409             : #if 1
   83410             : // Class Definition for SgOmpDepobjUpdateClause
   83411             : class ROSE_DLL_API SgOmpDepobjUpdateClause  : public SgOmpClause
   83412             :    {
   83413             :      public:
   83414             : 
   83415             : 
   83416             : /* #line 83417 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83417             : 
   83418             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   83419             : // Start of memberFunctionString
   83420             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   83421             : 
   83422             : // *** COMMON CODE SECTION BEGINS HERE ***
   83423             : 
   83424             :     public:
   83425             : 
   83426             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   83427             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   83428             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   83429             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   83430             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   83431             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   83432             : 
   83433             :       /*! \brief returns a string representing the class name */
   83434             :           virtual std::string class_name() const override;
   83435             : 
   83436             :       /*! \brief returns new style SageIII enum values */
   83437             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   83438             : 
   83439             :       /*! \brief static variant value */
   83440             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   83441             :        // static const VariantT static_variant = V_SgOmpDepobjUpdateClause;
   83442             :           enum { static_variant = V_SgOmpDepobjUpdateClause };
   83443             : 
   83444             :        /* the generated cast function */
   83445             :       /*! \brief Casts pointer from base class to derived class */
   83446             :           ROSE_DLL_API friend       SgOmpDepobjUpdateClause* isSgOmpDepobjUpdateClause(       SgNode * s );
   83447             : 
   83448             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   83449             :           ROSE_DLL_API friend const SgOmpDepobjUpdateClause* isSgOmpDepobjUpdateClause( const SgNode * s );
   83450             : 
   83451             :      // ******************************************
   83452             :      // * Memory Pool / New / Delete
   83453             :      // ******************************************
   83454             : 
   83455             :      public:
   83456             :           /// \private
   83457             :           static const unsigned pool_size; //
   83458             :           /// \private
   83459             :           static std::vector<unsigned char *> pools; //
   83460             :           /// \private
   83461             :           static SgOmpDepobjUpdateClause * next_node; // 
   83462             : 
   83463             :           /// \private
   83464             :           static unsigned long initializeStorageClassArray(SgOmpDepobjUpdateClauseStorageClass *); //
   83465             : 
   83466             :           /// \private
   83467             :           static void clearMemoryPool(); //
   83468             :           static void deleteMemoryPool(); //
   83469             : 
   83470             :           /// \private
   83471             :           static void extendMemoryPoolForFileIO(); //
   83472             : 
   83473             :           /// \private
   83474             :           static SgOmpDepobjUpdateClause * getPointerFromGlobalIndex(unsigned long); //
   83475             :           /// \private
   83476             :           static SgOmpDepobjUpdateClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   83477             : 
   83478             :           /// \private
   83479             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   83480             :           /// \private
   83481             :           static void resetValidFreepointers(); //
   83482             :           /// \private
   83483             :           static unsigned long getNumberOfLastValidPointer(); //
   83484             : 
   83485             : 
   83486             : #if defined(INLINE_FUNCTIONS)
   83487             :       /*! \brief returns pointer to newly allocated IR node */
   83488             :           inline void *operator new (size_t size);
   83489             : #else
   83490             :       /*! \brief returns pointer to newly allocated IR node */
   83491             :           void *operator new (size_t size);
   83492             : #endif
   83493             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   83494             :           void operator delete (void* pointer, size_t size);
   83495             : 
   83496             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   83497           0 :           void operator delete (void* pointer)
   83498             :              {
   83499             :             // This is the generated delete operator...
   83500           0 :                SgOmpDepobjUpdateClause::operator delete (pointer,sizeof(SgOmpDepobjUpdateClause));
   83501             :              }
   83502             : 
   83503             :       /*! \brief Returns the total number of IR nodes of this type */
   83504             :           static size_t numberOfNodes();
   83505             : 
   83506             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   83507             :           static size_t memoryUsage();
   83508             : 
   83509             :       // End of scope which started in IR nodes specific code 
   83510             :       /* */
   83511             : 
   83512             :       /* name Internal Functions
   83513             :           \brief Internal functions ... incomplete-documentation
   83514             : 
   83515             :           These functions have been made public as part of the design, but they are suggested for internal use 
   83516             :           or by particularly knowledgeable users for specialized tools or applications.
   83517             : 
   83518             :           \internal We could not make these private because they are required by user for special purposes. And 
   83519             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   83520             :          
   83521             :        */
   83522             : 
   83523             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   83524             :        // overridden in every class by *generated* implementation
   83525             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   83526             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   83527             :        // MS: 06/28/02 container of names of variables or container indices 
   83528             :        // used used in the traversal to access AST successor nodes
   83529             :        // overridden in every class by *generated* implementation
   83530             :       /*! \brief container of names of variables or container indices used used in the traversal
   83531             :           to access AST successor nodes overridden in every class by *generated* implementation */
   83532             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   83533             : 
   83534             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   83535             :        // than all the vector copies. The implementation for these functions is generated for each class.
   83536             :       /*! \brief return number of children in the traversal successor list */
   83537             :           virtual size_t get_numberOfTraversalSuccessors() override;
   83538             :       /*! \brief index-based access to traversal successors by index number */
   83539             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   83540             :       /*! \brief index-based access to traversal successors by child node */
   83541             :           virtual size_t get_childIndex(SgNode *child) override;
   83542             : 
   83543             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   83544             :        // MS: 08/16/2002 method for generating RTI information
   83545             :       /*! \brief return C++ Runtime-Time-Information */
   83546             :           virtual RTIReturnType roseRTI() override;
   83547             : #endif
   83548             :       /* */
   83549             : 
   83550             : 
   83551             : 
   83552             :       /* name Deprecated Functions
   83553             :           \brief Deprecated functions ... incomplete-documentation
   83554             : 
   83555             :           These functions have been deprecated from use.
   83556             :        */
   83557             :       /* */
   83558             : 
   83559             :       /*! returns a C style string (char*) representing the class name */
   83560             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   83561             : 
   83562             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   83563             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   83564             : #if 0
   83565             :       /*! returns old style Sage II enum values */
   83566             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   83567             :       /*! returns old style Sage II enum values */
   83568             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   83569             : #endif
   83570             :       /* */
   83571             : 
   83572             : 
   83573             : 
   83574             : 
   83575             :      public:
   83576             :       /* name Traversal Support Functions
   83577             :           \brief Traversal support functions ... incomplete-documentation
   83578             : 
   83579             :           These functions have been made public as part of the design, but they are suggested for internal use 
   83580             :           or by particularly knowledgable users for specialized tools or applications.
   83581             :        */
   83582             :       /* */
   83583             : 
   83584             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   83585             :        // (inferior to ROSE traversal mechanism, experimental).
   83586             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   83587             :        */
   83588             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   83589             : 
   83590             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   83591             :       /*! \brief support for the classic visitor pattern done in GoF */
   83592             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   83593             : 
   83594             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   83595             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   83596             :        */
   83597             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   83598             : 
   83599             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   83600             :        */
   83601             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   83602             : 
   83603             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   83604             :        // This traversal helps support internal tools that call static member functions.
   83605             :        // note: this function operates on the memory pools.
   83606             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   83607             :        */
   83608             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   83609             :       /* */
   83610             : 
   83611             : 
   83612             :      public:
   83613             :       /* name Memory Allocation Functions
   83614             :           \brief Memory allocations functions ... incomplete-documentation
   83615             : 
   83616             :           These functions have been made public as part of the design, but they are suggested for internal use 
   83617             :           or by particularly knowledgable users for specialized tools or applications.
   83618             :        */
   83619             :       /* */
   83620             : 
   83621             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   83622             : 
   83623             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   83624             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   83625             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   83626             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   83627             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   83628             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   83629             :           being used with the AST File I/O mechanism.
   83630             :        */
   83631             :           virtual bool isInMemoryPool() override;
   83632             : 
   83633             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   83634             : 
   83635             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   83636             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   83637             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   83638             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   83639             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   83640             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   83641             :           being used with the AST File I/O mechanism.
   83642             :        */
   83643             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   83644             : 
   83645             :       // DQ (4/30/2006): Modified to be a const function.
   83646             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   83647             : 
   83648             :           This functions is part of general support for many possible tools to operate 
   83649             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   83650             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   83651             :           less than the set of pointers used by the AST file I/O. This is part of
   83652             :           work implemented by Andreas, and support tools such as the AST graph generation.
   83653             : 
   83654             :           \warning This function can return unexpected data members and thus the 
   83655             :                    order and the number of elements is unpredicable and subject 
   83656             :                    to change.
   83657             : 
   83658             :           \returns STL vector of pairs of SgNode* and strings
   83659             :        */
   83660             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   83661             : 
   83662             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   83663             : 
   83664             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   83665             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   83666             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   83667             : 
   83668             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   83669             :                    and subject to change.
   83670             :        */
   83671             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   83672             : 
   83673             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   83674             : 
   83675             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   83676             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   83677             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   83678             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   83679             : 
   83680             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   83681             : 
   83682             :           \returns long
   83683             :        */
   83684             :           virtual long getChildIndex( SgNode* childNode ) const override;
   83685             : 
   83686             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   83687             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   83688             :       /* \brief Constructor for use by AST File I/O Mechanism
   83689             : 
   83690             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   83691             :           which obtained via fast binary file I/O from disk.
   83692             :        */
   83693             :        // SgOmpDepobjUpdateClause( SgOmpDepobjUpdateClauseStorageClass& source );
   83694             : 
   83695             : 
   83696             : 
   83697             : 
   83698             : 
   83699             :  // JH (10/24/2005): methods added to support the ast file IO
   83700             :     private:
   83701             : 
   83702             :       /* name AST Memory Allocation Support Functions
   83703             :           \brief Memory allocations support....
   83704             : 
   83705             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   83706             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   83707             :           and support the AST File I/O Mechanism.
   83708             :        */
   83709             :       /* */
   83710             : 
   83711             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   83712             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   83713             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   83714             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   83715             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   83716             :           a correspinding one in the AST_FILE_IO class!
   83717             :        */
   83718             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   83719             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   83720             :       /* \brief Typedef used for low level memory access.
   83721             :        */
   83722             :        // typedef unsigned char* TestType;
   83723             : 
   83724             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   83725             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   83726             :       /* \brief Typedef used to hold memory addresses as values.
   83727             :        */
   83728             :        // typedef unsigned long  AddressType;
   83729             : 
   83730             : 
   83731             : 
   83732             :        // necessary, to have direct access to the p_freepointer and the private methods !
   83733             :       /*! \brief friend class declaration to support AST File I/O */
   83734             :           friend class AST_FILE_IO;
   83735             : 
   83736             :       /*! \brief friend class declaration to support AST File I/O */
   83737             :           friend class SgOmpDepobjUpdateClauseStorageClass;
   83738             : 
   83739             :       /*! \brief friend class declaration to support AST File I/O */
   83740             :           friend class AstSpecificDataManagingClass;
   83741             : 
   83742             :       /*! \brief friend class declaration to support AST File I/O */
   83743             :           friend class AstSpecificDataManagingClassStorageClass;
   83744             :     public:
   83745             :       /*! \brief IR node constructor to support AST File I/O */
   83746             :           SgOmpDepobjUpdateClause( const SgOmpDepobjUpdateClauseStorageClass& source );
   83747             : 
   83748             :  // private: // JJW hack
   83749             :        /*
   83750             :           name AST Memory Allocation Support Variables
   83751             :           Memory allocations support variables 
   83752             : 
   83753             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   83754             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   83755             :           and support the AST File I/O Mechanism.
   83756             :        */
   83757             :       /* */
   83758             : 
   83759             :     public:
   83760             : 
   83761             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   83762             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   83763             :       // virtual SgNode* addRegExpAttribute();
   83764             :       /*! \brief Support for AST matching using regular expression.
   83765             : 
   83766             :           This support is incomplete and the subject of current research to define 
   83767             :           RegEx trees to support inexact matching.
   83768             :        */
   83769             :           SgOmpDepobjUpdateClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   83770             : 
   83771             : // *** COMMON CODE SECTION ENDS HERE ***
   83772             : 
   83773             : 
   83774             : // End of memberFunctionString
   83775             : // Start of memberFunctionString
   83776             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   83777             : 
   83778             :      // the generated cast function
   83779             :      // friend ROSE_DLL_API SgOmpDepobjUpdateClause* isSgOmpDepobjUpdateClause ( SgNode* s );
   83780             : 
   83781             :           typedef SgOmpClause base_node_type;
   83782             : 
   83783             : 
   83784             : // End of memberFunctionString
   83785             : 
   83786             :      public: 
   83787             :          SgOmpClause::omp_depobj_modifier_enum get_modifier() const;
   83788             :          void set_modifier(SgOmpClause::omp_depobj_modifier_enum modifier);
   83789             : 
   83790             : 
   83791             :      public: 
   83792             :          virtual ~SgOmpDepobjUpdateClause();
   83793             : 
   83794             : 
   83795             :      public: 
   83796             :          SgOmpDepobjUpdateClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_depobj_modifier_enum modifier =e_omp_depobj_modifier_unknown); 
   83797             :          SgOmpDepobjUpdateClause(SgOmpClause::omp_depobj_modifier_enum modifier); 
   83798             : 
   83799             :     protected:
   83800             : // Start of memberFunctionString
   83801             : SgOmpClause::omp_depobj_modifier_enum p_modifier;
   83802             :           
   83803             : // End of memberFunctionString
   83804             : 
   83805             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDepobjUpdateClause>;
   83806             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDepobjUpdateClause, SgOmpClause::omp_depobj_modifier_enum,&SgOmpDepobjUpdateClause::p_modifier>;
   83807             : 
   83808             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83809             : 
   83810             : 
   83811             :    };
   83812             : #endif
   83813             : 
   83814             : // postdeclarations for SgOmpDepobjUpdateClause
   83815             : 
   83816             : /* #line 83817 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83817             : 
   83818             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   83819             : 
   83820             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83821             : 
   83822             : 
   83823             : /* #line 83824 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83824             : 
   83825             : 
   83826             : 
   83827             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83828             : 
   83829             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   83830             : //      This code is automatically generated for each 
   83831             : //      terminal and non-terminal within the defined 
   83832             : //      grammar.  There is a simple way to change the 
   83833             : //      code to fix bugs etc.  See the ROSE README file
   83834             : //      for directions.
   83835             : 
   83836             : // tps: (02/22/2010): Adding DLL export requirements
   83837             : #include "rosedll.h"
   83838             : 
   83839             : // predeclarations for SgOmpDestroyClause
   83840             : 
   83841             : /* #line 83842 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83842             : 
   83843             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   83844             : 
   83845             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   83846             : 
   83847             : #if 1
   83848             : // Class Definition for SgOmpDestroyClause
   83849             : class ROSE_DLL_API SgOmpDestroyClause  : public SgOmpClause
   83850             :    {
   83851             :      public:
   83852             : 
   83853             : 
   83854             : /* #line 83855 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   83855             : 
   83856             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   83857             : // Start of memberFunctionString
   83858             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   83859             : 
   83860             : // *** COMMON CODE SECTION BEGINS HERE ***
   83861             : 
   83862             :     public:
   83863             : 
   83864             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   83865             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   83866             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   83867             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   83868             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   83869             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   83870             : 
   83871             :       /*! \brief returns a string representing the class name */
   83872             :           virtual std::string class_name() const override;
   83873             : 
   83874             :       /*! \brief returns new style SageIII enum values */
   83875             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   83876             : 
   83877             :       /*! \brief static variant value */
   83878             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   83879             :        // static const VariantT static_variant = V_SgOmpDestroyClause;
   83880             :           enum { static_variant = V_SgOmpDestroyClause };
   83881             : 
   83882             :        /* the generated cast function */
   83883             :       /*! \brief Casts pointer from base class to derived class */
   83884             :           ROSE_DLL_API friend       SgOmpDestroyClause* isSgOmpDestroyClause(       SgNode * s );
   83885             : 
   83886             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   83887             :           ROSE_DLL_API friend const SgOmpDestroyClause* isSgOmpDestroyClause( const SgNode * s );
   83888             : 
   83889             :      // ******************************************
   83890             :      // * Memory Pool / New / Delete
   83891             :      // ******************************************
   83892             : 
   83893             :      public:
   83894             :           /// \private
   83895             :           static const unsigned pool_size; //
   83896             :           /// \private
   83897             :           static std::vector<unsigned char *> pools; //
   83898             :           /// \private
   83899             :           static SgOmpDestroyClause * next_node; // 
   83900             : 
   83901             :           /// \private
   83902             :           static unsigned long initializeStorageClassArray(SgOmpDestroyClauseStorageClass *); //
   83903             : 
   83904             :           /// \private
   83905             :           static void clearMemoryPool(); //
   83906             :           static void deleteMemoryPool(); //
   83907             : 
   83908             :           /// \private
   83909             :           static void extendMemoryPoolForFileIO(); //
   83910             : 
   83911             :           /// \private
   83912             :           static SgOmpDestroyClause * getPointerFromGlobalIndex(unsigned long); //
   83913             :           /// \private
   83914             :           static SgOmpDestroyClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   83915             : 
   83916             :           /// \private
   83917             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   83918             :           /// \private
   83919             :           static void resetValidFreepointers(); //
   83920             :           /// \private
   83921             :           static unsigned long getNumberOfLastValidPointer(); //
   83922             : 
   83923             : 
   83924             : #if defined(INLINE_FUNCTIONS)
   83925             :       /*! \brief returns pointer to newly allocated IR node */
   83926             :           inline void *operator new (size_t size);
   83927             : #else
   83928             :       /*! \brief returns pointer to newly allocated IR node */
   83929             :           void *operator new (size_t size);
   83930             : #endif
   83931             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   83932             :           void operator delete (void* pointer, size_t size);
   83933             : 
   83934             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   83935           0 :           void operator delete (void* pointer)
   83936             :              {
   83937             :             // This is the generated delete operator...
   83938           0 :                SgOmpDestroyClause::operator delete (pointer,sizeof(SgOmpDestroyClause));
   83939             :              }
   83940             : 
   83941             :       /*! \brief Returns the total number of IR nodes of this type */
   83942             :           static size_t numberOfNodes();
   83943             : 
   83944             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   83945             :           static size_t memoryUsage();
   83946             : 
   83947             :       // End of scope which started in IR nodes specific code 
   83948             :       /* */
   83949             : 
   83950             :       /* name Internal Functions
   83951             :           \brief Internal functions ... incomplete-documentation
   83952             : 
   83953             :           These functions have been made public as part of the design, but they are suggested for internal use 
   83954             :           or by particularly knowledgeable users for specialized tools or applications.
   83955             : 
   83956             :           \internal We could not make these private because they are required by user for special purposes. And 
   83957             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   83958             :          
   83959             :        */
   83960             : 
   83961             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   83962             :        // overridden in every class by *generated* implementation
   83963             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   83964             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   83965             :        // MS: 06/28/02 container of names of variables or container indices 
   83966             :        // used used in the traversal to access AST successor nodes
   83967             :        // overridden in every class by *generated* implementation
   83968             :       /*! \brief container of names of variables or container indices used used in the traversal
   83969             :           to access AST successor nodes overridden in every class by *generated* implementation */
   83970             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   83971             : 
   83972             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   83973             :        // than all the vector copies. The implementation for these functions is generated for each class.
   83974             :       /*! \brief return number of children in the traversal successor list */
   83975             :           virtual size_t get_numberOfTraversalSuccessors() override;
   83976             :       /*! \brief index-based access to traversal successors by index number */
   83977             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   83978             :       /*! \brief index-based access to traversal successors by child node */
   83979             :           virtual size_t get_childIndex(SgNode *child) override;
   83980             : 
   83981             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   83982             :        // MS: 08/16/2002 method for generating RTI information
   83983             :       /*! \brief return C++ Runtime-Time-Information */
   83984             :           virtual RTIReturnType roseRTI() override;
   83985             : #endif
   83986             :       /* */
   83987             : 
   83988             : 
   83989             : 
   83990             :       /* name Deprecated Functions
   83991             :           \brief Deprecated functions ... incomplete-documentation
   83992             : 
   83993             :           These functions have been deprecated from use.
   83994             :        */
   83995             :       /* */
   83996             : 
   83997             :       /*! returns a C style string (char*) representing the class name */
   83998             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   83999             : 
   84000             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   84001             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   84002             : #if 0
   84003             :       /*! returns old style Sage II enum values */
   84004             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   84005             :       /*! returns old style Sage II enum values */
   84006             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   84007             : #endif
   84008             :       /* */
   84009             : 
   84010             : 
   84011             : 
   84012             : 
   84013             :      public:
   84014             :       /* name Traversal Support Functions
   84015             :           \brief Traversal support functions ... incomplete-documentation
   84016             : 
   84017             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84018             :           or by particularly knowledgable users for specialized tools or applications.
   84019             :        */
   84020             :       /* */
   84021             : 
   84022             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   84023             :        // (inferior to ROSE traversal mechanism, experimental).
   84024             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   84025             :        */
   84026             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   84027             : 
   84028             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   84029             :       /*! \brief support for the classic visitor pattern done in GoF */
   84030             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   84031             : 
   84032             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   84033             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   84034             :        */
   84035             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   84036             : 
   84037             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   84038             :        */
   84039             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   84040             : 
   84041             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   84042             :        // This traversal helps support internal tools that call static member functions.
   84043             :        // note: this function operates on the memory pools.
   84044             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   84045             :        */
   84046             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   84047             :       /* */
   84048             : 
   84049             : 
   84050             :      public:
   84051             :       /* name Memory Allocation Functions
   84052             :           \brief Memory allocations functions ... incomplete-documentation
   84053             : 
   84054             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84055             :           or by particularly knowledgable users for specialized tools or applications.
   84056             :        */
   84057             :       /* */
   84058             : 
   84059             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   84060             : 
   84061             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   84062             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   84063             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   84064             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   84065             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   84066             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   84067             :           being used with the AST File I/O mechanism.
   84068             :        */
   84069             :           virtual bool isInMemoryPool() override;
   84070             : 
   84071             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   84072             : 
   84073             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   84074             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   84075             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   84076             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   84077             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   84078             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   84079             :           being used with the AST File I/O mechanism.
   84080             :        */
   84081             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   84082             : 
   84083             :       // DQ (4/30/2006): Modified to be a const function.
   84084             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   84085             : 
   84086             :           This functions is part of general support for many possible tools to operate 
   84087             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   84088             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   84089             :           less than the set of pointers used by the AST file I/O. This is part of
   84090             :           work implemented by Andreas, and support tools such as the AST graph generation.
   84091             : 
   84092             :           \warning This function can return unexpected data members and thus the 
   84093             :                    order and the number of elements is unpredicable and subject 
   84094             :                    to change.
   84095             : 
   84096             :           \returns STL vector of pairs of SgNode* and strings
   84097             :        */
   84098             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   84099             : 
   84100             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   84101             : 
   84102             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   84103             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   84104             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   84105             : 
   84106             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   84107             :                    and subject to change.
   84108             :        */
   84109             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   84110             : 
   84111             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   84112             : 
   84113             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   84114             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   84115             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   84116             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   84117             : 
   84118             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   84119             : 
   84120             :           \returns long
   84121             :        */
   84122             :           virtual long getChildIndex( SgNode* childNode ) const override;
   84123             : 
   84124             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   84125             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   84126             :       /* \brief Constructor for use by AST File I/O Mechanism
   84127             : 
   84128             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   84129             :           which obtained via fast binary file I/O from disk.
   84130             :        */
   84131             :        // SgOmpDestroyClause( SgOmpDestroyClauseStorageClass& source );
   84132             : 
   84133             : 
   84134             : 
   84135             : 
   84136             : 
   84137             :  // JH (10/24/2005): methods added to support the ast file IO
   84138             :     private:
   84139             : 
   84140             :       /* name AST Memory Allocation Support Functions
   84141             :           \brief Memory allocations support....
   84142             : 
   84143             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   84144             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   84145             :           and support the AST File I/O Mechanism.
   84146             :        */
   84147             :       /* */
   84148             : 
   84149             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   84150             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   84151             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   84152             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   84153             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   84154             :           a correspinding one in the AST_FILE_IO class!
   84155             :        */
   84156             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   84157             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   84158             :       /* \brief Typedef used for low level memory access.
   84159             :        */
   84160             :        // typedef unsigned char* TestType;
   84161             : 
   84162             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   84163             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   84164             :       /* \brief Typedef used to hold memory addresses as values.
   84165             :        */
   84166             :        // typedef unsigned long  AddressType;
   84167             : 
   84168             : 
   84169             : 
   84170             :        // necessary, to have direct access to the p_freepointer and the private methods !
   84171             :       /*! \brief friend class declaration to support AST File I/O */
   84172             :           friend class AST_FILE_IO;
   84173             : 
   84174             :       /*! \brief friend class declaration to support AST File I/O */
   84175             :           friend class SgOmpDestroyClauseStorageClass;
   84176             : 
   84177             :       /*! \brief friend class declaration to support AST File I/O */
   84178             :           friend class AstSpecificDataManagingClass;
   84179             : 
   84180             :       /*! \brief friend class declaration to support AST File I/O */
   84181             :           friend class AstSpecificDataManagingClassStorageClass;
   84182             :     public:
   84183             :       /*! \brief IR node constructor to support AST File I/O */
   84184             :           SgOmpDestroyClause( const SgOmpDestroyClauseStorageClass& source );
   84185             : 
   84186             :  // private: // JJW hack
   84187             :        /*
   84188             :           name AST Memory Allocation Support Variables
   84189             :           Memory allocations support variables 
   84190             : 
   84191             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   84192             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   84193             :           and support the AST File I/O Mechanism.
   84194             :        */
   84195             :       /* */
   84196             : 
   84197             :     public:
   84198             : 
   84199             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   84200             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   84201             :       // virtual SgNode* addRegExpAttribute();
   84202             :       /*! \brief Support for AST matching using regular expression.
   84203             : 
   84204             :           This support is incomplete and the subject of current research to define 
   84205             :           RegEx trees to support inexact matching.
   84206             :        */
   84207             :           SgOmpDestroyClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   84208             : 
   84209             : // *** COMMON CODE SECTION ENDS HERE ***
   84210             : 
   84211             : 
   84212             : // End of memberFunctionString
   84213             : // Start of memberFunctionString
   84214             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   84215             : 
   84216             :      // the generated cast function
   84217             :      // friend ROSE_DLL_API SgOmpDestroyClause* isSgOmpDestroyClause ( SgNode* s );
   84218             : 
   84219             :           typedef SgOmpClause base_node_type;
   84220             : 
   84221             : 
   84222             : // End of memberFunctionString
   84223             : 
   84224             : 
   84225             :      public: 
   84226             :          virtual ~SgOmpDestroyClause();
   84227             : 
   84228             : 
   84229             :      public: 
   84230             :          SgOmpDestroyClause(Sg_File_Info* startOfConstruct ); 
   84231             :          SgOmpDestroyClause(); 
   84232             : 
   84233             :     protected:
   84234             : 
   84235             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDestroyClause>;
   84236             : 
   84237             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84238             : 
   84239             : 
   84240             :    };
   84241             : #endif
   84242             : 
   84243             : // postdeclarations for SgOmpDestroyClause
   84244             : 
   84245             : /* #line 84246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84246             : 
   84247             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   84248             : 
   84249             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84250             : 
   84251             : 
   84252             : /* #line 84253 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84253             : 
   84254             : 
   84255             : 
   84256             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84257             : 
   84258             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   84259             : //      This code is automatically generated for each 
   84260             : //      terminal and non-terminal within the defined 
   84261             : //      grammar.  There is a simple way to change the 
   84262             : //      code to fix bugs etc.  See the ROSE README file
   84263             : //      for directions.
   84264             : 
   84265             : // tps: (02/22/2010): Adding DLL export requirements
   84266             : #include "rosedll.h"
   84267             : 
   84268             : // predeclarations for SgOmpCaptureClause
   84269             : 
   84270             : /* #line 84271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84271             : 
   84272             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   84273             : 
   84274             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84275             : 
   84276             : #if 1
   84277             : // Class Definition for SgOmpCaptureClause
   84278             : class ROSE_DLL_API SgOmpCaptureClause  : public SgOmpClause
   84279             :    {
   84280             :      public:
   84281             : 
   84282             : 
   84283             : /* #line 84284 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84284             : 
   84285             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   84286             : // Start of memberFunctionString
   84287             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   84288             : 
   84289             : // *** COMMON CODE SECTION BEGINS HERE ***
   84290             : 
   84291             :     public:
   84292             : 
   84293             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   84294             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   84295             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   84296             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   84297             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   84298             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   84299             : 
   84300             :       /*! \brief returns a string representing the class name */
   84301             :           virtual std::string class_name() const override;
   84302             : 
   84303             :       /*! \brief returns new style SageIII enum values */
   84304             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   84305             : 
   84306             :       /*! \brief static variant value */
   84307             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   84308             :        // static const VariantT static_variant = V_SgOmpCaptureClause;
   84309             :           enum { static_variant = V_SgOmpCaptureClause };
   84310             : 
   84311             :        /* the generated cast function */
   84312             :       /*! \brief Casts pointer from base class to derived class */
   84313             :           ROSE_DLL_API friend       SgOmpCaptureClause* isSgOmpCaptureClause(       SgNode * s );
   84314             : 
   84315             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   84316             :           ROSE_DLL_API friend const SgOmpCaptureClause* isSgOmpCaptureClause( const SgNode * s );
   84317             : 
   84318             :      // ******************************************
   84319             :      // * Memory Pool / New / Delete
   84320             :      // ******************************************
   84321             : 
   84322             :      public:
   84323             :           /// \private
   84324             :           static const unsigned pool_size; //
   84325             :           /// \private
   84326             :           static std::vector<unsigned char *> pools; //
   84327             :           /// \private
   84328             :           static SgOmpCaptureClause * next_node; // 
   84329             : 
   84330             :           /// \private
   84331             :           static unsigned long initializeStorageClassArray(SgOmpCaptureClauseStorageClass *); //
   84332             : 
   84333             :           /// \private
   84334             :           static void clearMemoryPool(); //
   84335             :           static void deleteMemoryPool(); //
   84336             : 
   84337             :           /// \private
   84338             :           static void extendMemoryPoolForFileIO(); //
   84339             : 
   84340             :           /// \private
   84341             :           static SgOmpCaptureClause * getPointerFromGlobalIndex(unsigned long); //
   84342             :           /// \private
   84343             :           static SgOmpCaptureClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   84344             : 
   84345             :           /// \private
   84346             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   84347             :           /// \private
   84348             :           static void resetValidFreepointers(); //
   84349             :           /// \private
   84350             :           static unsigned long getNumberOfLastValidPointer(); //
   84351             : 
   84352             : 
   84353             : #if defined(INLINE_FUNCTIONS)
   84354             :       /*! \brief returns pointer to newly allocated IR node */
   84355             :           inline void *operator new (size_t size);
   84356             : #else
   84357             :       /*! \brief returns pointer to newly allocated IR node */
   84358             :           void *operator new (size_t size);
   84359             : #endif
   84360             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   84361             :           void operator delete (void* pointer, size_t size);
   84362             : 
   84363             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   84364           0 :           void operator delete (void* pointer)
   84365             :              {
   84366             :             // This is the generated delete operator...
   84367           0 :                SgOmpCaptureClause::operator delete (pointer,sizeof(SgOmpCaptureClause));
   84368             :              }
   84369             : 
   84370             :       /*! \brief Returns the total number of IR nodes of this type */
   84371             :           static size_t numberOfNodes();
   84372             : 
   84373             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   84374             :           static size_t memoryUsage();
   84375             : 
   84376             :       // End of scope which started in IR nodes specific code 
   84377             :       /* */
   84378             : 
   84379             :       /* name Internal Functions
   84380             :           \brief Internal functions ... incomplete-documentation
   84381             : 
   84382             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84383             :           or by particularly knowledgeable users for specialized tools or applications.
   84384             : 
   84385             :           \internal We could not make these private because they are required by user for special purposes. And 
   84386             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   84387             :          
   84388             :        */
   84389             : 
   84390             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   84391             :        // overridden in every class by *generated* implementation
   84392             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   84393             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   84394             :        // MS: 06/28/02 container of names of variables or container indices 
   84395             :        // used used in the traversal to access AST successor nodes
   84396             :        // overridden in every class by *generated* implementation
   84397             :       /*! \brief container of names of variables or container indices used used in the traversal
   84398             :           to access AST successor nodes overridden in every class by *generated* implementation */
   84399             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   84400             : 
   84401             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   84402             :        // than all the vector copies. The implementation for these functions is generated for each class.
   84403             :       /*! \brief return number of children in the traversal successor list */
   84404             :           virtual size_t get_numberOfTraversalSuccessors() override;
   84405             :       /*! \brief index-based access to traversal successors by index number */
   84406             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   84407             :       /*! \brief index-based access to traversal successors by child node */
   84408             :           virtual size_t get_childIndex(SgNode *child) override;
   84409             : 
   84410             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   84411             :        // MS: 08/16/2002 method for generating RTI information
   84412             :       /*! \brief return C++ Runtime-Time-Information */
   84413             :           virtual RTIReturnType roseRTI() override;
   84414             : #endif
   84415             :       /* */
   84416             : 
   84417             : 
   84418             : 
   84419             :       /* name Deprecated Functions
   84420             :           \brief Deprecated functions ... incomplete-documentation
   84421             : 
   84422             :           These functions have been deprecated from use.
   84423             :        */
   84424             :       /* */
   84425             : 
   84426             :       /*! returns a C style string (char*) representing the class name */
   84427             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   84428             : 
   84429             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   84430             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   84431             : #if 0
   84432             :       /*! returns old style Sage II enum values */
   84433             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   84434             :       /*! returns old style Sage II enum values */
   84435             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   84436             : #endif
   84437             :       /* */
   84438             : 
   84439             : 
   84440             : 
   84441             : 
   84442             :      public:
   84443             :       /* name Traversal Support Functions
   84444             :           \brief Traversal support functions ... incomplete-documentation
   84445             : 
   84446             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84447             :           or by particularly knowledgable users for specialized tools or applications.
   84448             :        */
   84449             :       /* */
   84450             : 
   84451             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   84452             :        // (inferior to ROSE traversal mechanism, experimental).
   84453             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   84454             :        */
   84455             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   84456             : 
   84457             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   84458             :       /*! \brief support for the classic visitor pattern done in GoF */
   84459             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   84460             : 
   84461             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   84462             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   84463             :        */
   84464             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   84465             : 
   84466             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   84467             :        */
   84468             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   84469             : 
   84470             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   84471             :        // This traversal helps support internal tools that call static member functions.
   84472             :        // note: this function operates on the memory pools.
   84473             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   84474             :        */
   84475             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   84476             :       /* */
   84477             : 
   84478             : 
   84479             :      public:
   84480             :       /* name Memory Allocation Functions
   84481             :           \brief Memory allocations functions ... incomplete-documentation
   84482             : 
   84483             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84484             :           or by particularly knowledgable users for specialized tools or applications.
   84485             :        */
   84486             :       /* */
   84487             : 
   84488             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   84489             : 
   84490             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   84491             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   84492             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   84493             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   84494             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   84495             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   84496             :           being used with the AST File I/O mechanism.
   84497             :        */
   84498             :           virtual bool isInMemoryPool() override;
   84499             : 
   84500             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   84501             : 
   84502             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   84503             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   84504             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   84505             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   84506             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   84507             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   84508             :           being used with the AST File I/O mechanism.
   84509             :        */
   84510             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   84511             : 
   84512             :       // DQ (4/30/2006): Modified to be a const function.
   84513             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   84514             : 
   84515             :           This functions is part of general support for many possible tools to operate 
   84516             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   84517             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   84518             :           less than the set of pointers used by the AST file I/O. This is part of
   84519             :           work implemented by Andreas, and support tools such as the AST graph generation.
   84520             : 
   84521             :           \warning This function can return unexpected data members and thus the 
   84522             :                    order and the number of elements is unpredicable and subject 
   84523             :                    to change.
   84524             : 
   84525             :           \returns STL vector of pairs of SgNode* and strings
   84526             :        */
   84527             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   84528             : 
   84529             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   84530             : 
   84531             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   84532             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   84533             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   84534             : 
   84535             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   84536             :                    and subject to change.
   84537             :        */
   84538             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   84539             : 
   84540             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   84541             : 
   84542             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   84543             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   84544             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   84545             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   84546             : 
   84547             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   84548             : 
   84549             :           \returns long
   84550             :        */
   84551             :           virtual long getChildIndex( SgNode* childNode ) const override;
   84552             : 
   84553             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   84554             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   84555             :       /* \brief Constructor for use by AST File I/O Mechanism
   84556             : 
   84557             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   84558             :           which obtained via fast binary file I/O from disk.
   84559             :        */
   84560             :        // SgOmpCaptureClause( SgOmpCaptureClauseStorageClass& source );
   84561             : 
   84562             : 
   84563             : 
   84564             : 
   84565             : 
   84566             :  // JH (10/24/2005): methods added to support the ast file IO
   84567             :     private:
   84568             : 
   84569             :       /* name AST Memory Allocation Support Functions
   84570             :           \brief Memory allocations support....
   84571             : 
   84572             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   84573             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   84574             :           and support the AST File I/O Mechanism.
   84575             :        */
   84576             :       /* */
   84577             : 
   84578             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   84579             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   84580             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   84581             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   84582             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   84583             :           a correspinding one in the AST_FILE_IO class!
   84584             :        */
   84585             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   84586             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   84587             :       /* \brief Typedef used for low level memory access.
   84588             :        */
   84589             :        // typedef unsigned char* TestType;
   84590             : 
   84591             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   84592             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   84593             :       /* \brief Typedef used to hold memory addresses as values.
   84594             :        */
   84595             :        // typedef unsigned long  AddressType;
   84596             : 
   84597             : 
   84598             : 
   84599             :        // necessary, to have direct access to the p_freepointer and the private methods !
   84600             :       /*! \brief friend class declaration to support AST File I/O */
   84601             :           friend class AST_FILE_IO;
   84602             : 
   84603             :       /*! \brief friend class declaration to support AST File I/O */
   84604             :           friend class SgOmpCaptureClauseStorageClass;
   84605             : 
   84606             :       /*! \brief friend class declaration to support AST File I/O */
   84607             :           friend class AstSpecificDataManagingClass;
   84608             : 
   84609             :       /*! \brief friend class declaration to support AST File I/O */
   84610             :           friend class AstSpecificDataManagingClassStorageClass;
   84611             :     public:
   84612             :       /*! \brief IR node constructor to support AST File I/O */
   84613             :           SgOmpCaptureClause( const SgOmpCaptureClauseStorageClass& source );
   84614             : 
   84615             :  // private: // JJW hack
   84616             :        /*
   84617             :           name AST Memory Allocation Support Variables
   84618             :           Memory allocations support variables 
   84619             : 
   84620             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   84621             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   84622             :           and support the AST File I/O Mechanism.
   84623             :        */
   84624             :       /* */
   84625             : 
   84626             :     public:
   84627             : 
   84628             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   84629             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   84630             :       // virtual SgNode* addRegExpAttribute();
   84631             :       /*! \brief Support for AST matching using regular expression.
   84632             : 
   84633             :           This support is incomplete and the subject of current research to define 
   84634             :           RegEx trees to support inexact matching.
   84635             :        */
   84636             :           SgOmpCaptureClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   84637             : 
   84638             : // *** COMMON CODE SECTION ENDS HERE ***
   84639             : 
   84640             : 
   84641             : // End of memberFunctionString
   84642             : // Start of memberFunctionString
   84643             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   84644             : 
   84645             :      // the generated cast function
   84646             :      // friend ROSE_DLL_API SgOmpCaptureClause* isSgOmpCaptureClause ( SgNode* s );
   84647             : 
   84648             :           typedef SgOmpClause base_node_type;
   84649             : 
   84650             : 
   84651             : // End of memberFunctionString
   84652             : 
   84653             : 
   84654             :      public: 
   84655             :          virtual ~SgOmpCaptureClause();
   84656             : 
   84657             : 
   84658             :      public: 
   84659             :          SgOmpCaptureClause(Sg_File_Info* startOfConstruct ); 
   84660             :          SgOmpCaptureClause(); 
   84661             : 
   84662             :     protected:
   84663             : 
   84664             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpCaptureClause>;
   84665             : 
   84666             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84667             : 
   84668             : 
   84669             :    };
   84670             : #endif
   84671             : 
   84672             : // postdeclarations for SgOmpCaptureClause
   84673             : 
   84674             : /* #line 84675 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84675             : 
   84676             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   84677             : 
   84678             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84679             : 
   84680             : 
   84681             : /* #line 84682 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84682             : 
   84683             : 
   84684             : 
   84685             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84686             : 
   84687             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   84688             : //      This code is automatically generated for each 
   84689             : //      terminal and non-terminal within the defined 
   84690             : //      grammar.  There is a simple way to change the 
   84691             : //      code to fix bugs etc.  See the ROSE README file
   84692             : //      for directions.
   84693             : 
   84694             : // tps: (02/22/2010): Adding DLL export requirements
   84695             : #include "rosedll.h"
   84696             : 
   84697             : // predeclarations for SgOmpBeginClause
   84698             : 
   84699             : /* #line 84700 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84700             : 
   84701             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   84702             : 
   84703             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   84704             : 
   84705             : #if 1
   84706             : // Class Definition for SgOmpBeginClause
   84707             : class ROSE_DLL_API SgOmpBeginClause  : public SgOmpClause
   84708             :    {
   84709             :      public:
   84710             : 
   84711             : 
   84712             : /* #line 84713 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   84713             : 
   84714             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   84715             : // Start of memberFunctionString
   84716             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   84717             : 
   84718             : // *** COMMON CODE SECTION BEGINS HERE ***
   84719             : 
   84720             :     public:
   84721             : 
   84722             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   84723             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   84724             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   84725             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   84726             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   84727             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   84728             : 
   84729             :       /*! \brief returns a string representing the class name */
   84730             :           virtual std::string class_name() const override;
   84731             : 
   84732             :       /*! \brief returns new style SageIII enum values */
   84733             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   84734             : 
   84735             :       /*! \brief static variant value */
   84736             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   84737             :        // static const VariantT static_variant = V_SgOmpBeginClause;
   84738             :           enum { static_variant = V_SgOmpBeginClause };
   84739             : 
   84740             :        /* the generated cast function */
   84741             :       /*! \brief Casts pointer from base class to derived class */
   84742             :           ROSE_DLL_API friend       SgOmpBeginClause* isSgOmpBeginClause(       SgNode * s );
   84743             : 
   84744             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   84745             :           ROSE_DLL_API friend const SgOmpBeginClause* isSgOmpBeginClause( const SgNode * s );
   84746             : 
   84747             :      // ******************************************
   84748             :      // * Memory Pool / New / Delete
   84749             :      // ******************************************
   84750             : 
   84751             :      public:
   84752             :           /// \private
   84753             :           static const unsigned pool_size; //
   84754             :           /// \private
   84755             :           static std::vector<unsigned char *> pools; //
   84756             :           /// \private
   84757             :           static SgOmpBeginClause * next_node; // 
   84758             : 
   84759             :           /// \private
   84760             :           static unsigned long initializeStorageClassArray(SgOmpBeginClauseStorageClass *); //
   84761             : 
   84762             :           /// \private
   84763             :           static void clearMemoryPool(); //
   84764             :           static void deleteMemoryPool(); //
   84765             : 
   84766             :           /// \private
   84767             :           static void extendMemoryPoolForFileIO(); //
   84768             : 
   84769             :           /// \private
   84770             :           static SgOmpBeginClause * getPointerFromGlobalIndex(unsigned long); //
   84771             :           /// \private
   84772             :           static SgOmpBeginClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   84773             : 
   84774             :           /// \private
   84775             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   84776             :           /// \private
   84777             :           static void resetValidFreepointers(); //
   84778             :           /// \private
   84779             :           static unsigned long getNumberOfLastValidPointer(); //
   84780             : 
   84781             : 
   84782             : #if defined(INLINE_FUNCTIONS)
   84783             :       /*! \brief returns pointer to newly allocated IR node */
   84784             :           inline void *operator new (size_t size);
   84785             : #else
   84786             :       /*! \brief returns pointer to newly allocated IR node */
   84787             :           void *operator new (size_t size);
   84788             : #endif
   84789             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   84790             :           void operator delete (void* pointer, size_t size);
   84791             : 
   84792             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   84793           0 :           void operator delete (void* pointer)
   84794             :              {
   84795             :             // This is the generated delete operator...
   84796           0 :                SgOmpBeginClause::operator delete (pointer,sizeof(SgOmpBeginClause));
   84797             :              }
   84798             : 
   84799             :       /*! \brief Returns the total number of IR nodes of this type */
   84800             :           static size_t numberOfNodes();
   84801             : 
   84802             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   84803             :           static size_t memoryUsage();
   84804             : 
   84805             :       // End of scope which started in IR nodes specific code 
   84806             :       /* */
   84807             : 
   84808             :       /* name Internal Functions
   84809             :           \brief Internal functions ... incomplete-documentation
   84810             : 
   84811             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84812             :           or by particularly knowledgeable users for specialized tools or applications.
   84813             : 
   84814             :           \internal We could not make these private because they are required by user for special purposes. And 
   84815             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   84816             :          
   84817             :        */
   84818             : 
   84819             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   84820             :        // overridden in every class by *generated* implementation
   84821             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   84822             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   84823             :        // MS: 06/28/02 container of names of variables or container indices 
   84824             :        // used used in the traversal to access AST successor nodes
   84825             :        // overridden in every class by *generated* implementation
   84826             :       /*! \brief container of names of variables or container indices used used in the traversal
   84827             :           to access AST successor nodes overridden in every class by *generated* implementation */
   84828             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   84829             : 
   84830             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   84831             :        // than all the vector copies. The implementation for these functions is generated for each class.
   84832             :       /*! \brief return number of children in the traversal successor list */
   84833             :           virtual size_t get_numberOfTraversalSuccessors() override;
   84834             :       /*! \brief index-based access to traversal successors by index number */
   84835             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   84836             :       /*! \brief index-based access to traversal successors by child node */
   84837             :           virtual size_t get_childIndex(SgNode *child) override;
   84838             : 
   84839             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   84840             :        // MS: 08/16/2002 method for generating RTI information
   84841             :       /*! \brief return C++ Runtime-Time-Information */
   84842             :           virtual RTIReturnType roseRTI() override;
   84843             : #endif
   84844             :       /* */
   84845             : 
   84846             : 
   84847             : 
   84848             :       /* name Deprecated Functions
   84849             :           \brief Deprecated functions ... incomplete-documentation
   84850             : 
   84851             :           These functions have been deprecated from use.
   84852             :        */
   84853             :       /* */
   84854             : 
   84855             :       /*! returns a C style string (char*) representing the class name */
   84856             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   84857             : 
   84858             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   84859             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   84860             : #if 0
   84861             :       /*! returns old style Sage II enum values */
   84862             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   84863             :       /*! returns old style Sage II enum values */
   84864             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   84865             : #endif
   84866             :       /* */
   84867             : 
   84868             : 
   84869             : 
   84870             : 
   84871             :      public:
   84872             :       /* name Traversal Support Functions
   84873             :           \brief Traversal support functions ... incomplete-documentation
   84874             : 
   84875             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84876             :           or by particularly knowledgable users for specialized tools or applications.
   84877             :        */
   84878             :       /* */
   84879             : 
   84880             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   84881             :        // (inferior to ROSE traversal mechanism, experimental).
   84882             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   84883             :        */
   84884             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   84885             : 
   84886             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   84887             :       /*! \brief support for the classic visitor pattern done in GoF */
   84888             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   84889             : 
   84890             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   84891             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   84892             :        */
   84893             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   84894             : 
   84895             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   84896             :        */
   84897             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   84898             : 
   84899             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   84900             :        // This traversal helps support internal tools that call static member functions.
   84901             :        // note: this function operates on the memory pools.
   84902             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   84903             :        */
   84904             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   84905             :       /* */
   84906             : 
   84907             : 
   84908             :      public:
   84909             :       /* name Memory Allocation Functions
   84910             :           \brief Memory allocations functions ... incomplete-documentation
   84911             : 
   84912             :           These functions have been made public as part of the design, but they are suggested for internal use 
   84913             :           or by particularly knowledgable users for specialized tools or applications.
   84914             :        */
   84915             :       /* */
   84916             : 
   84917             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   84918             : 
   84919             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   84920             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   84921             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   84922             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   84923             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   84924             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   84925             :           being used with the AST File I/O mechanism.
   84926             :        */
   84927             :           virtual bool isInMemoryPool() override;
   84928             : 
   84929             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   84930             : 
   84931             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   84932             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   84933             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   84934             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   84935             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   84936             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   84937             :           being used with the AST File I/O mechanism.
   84938             :        */
   84939             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   84940             : 
   84941             :       // DQ (4/30/2006): Modified to be a const function.
   84942             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   84943             : 
   84944             :           This functions is part of general support for many possible tools to operate 
   84945             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   84946             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   84947             :           less than the set of pointers used by the AST file I/O. This is part of
   84948             :           work implemented by Andreas, and support tools such as the AST graph generation.
   84949             : 
   84950             :           \warning This function can return unexpected data members and thus the 
   84951             :                    order and the number of elements is unpredicable and subject 
   84952             :                    to change.
   84953             : 
   84954             :           \returns STL vector of pairs of SgNode* and strings
   84955             :        */
   84956             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   84957             : 
   84958             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   84959             : 
   84960             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   84961             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   84962             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   84963             : 
   84964             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   84965             :                    and subject to change.
   84966             :        */
   84967             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   84968             : 
   84969             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   84970             : 
   84971             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   84972             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   84973             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   84974             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   84975             : 
   84976             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   84977             : 
   84978             :           \returns long
   84979             :        */
   84980             :           virtual long getChildIndex( SgNode* childNode ) const override;
   84981             : 
   84982             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   84983             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   84984             :       /* \brief Constructor for use by AST File I/O Mechanism
   84985             : 
   84986             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   84987             :           which obtained via fast binary file I/O from disk.
   84988             :        */
   84989             :        // SgOmpBeginClause( SgOmpBeginClauseStorageClass& source );
   84990             : 
   84991             : 
   84992             : 
   84993             : 
   84994             : 
   84995             :  // JH (10/24/2005): methods added to support the ast file IO
   84996             :     private:
   84997             : 
   84998             :       /* name AST Memory Allocation Support Functions
   84999             :           \brief Memory allocations support....
   85000             : 
   85001             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   85002             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   85003             :           and support the AST File I/O Mechanism.
   85004             :        */
   85005             :       /* */
   85006             : 
   85007             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   85008             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   85009             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   85010             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   85011             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   85012             :           a correspinding one in the AST_FILE_IO class!
   85013             :        */
   85014             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   85015             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85016             :       /* \brief Typedef used for low level memory access.
   85017             :        */
   85018             :        // typedef unsigned char* TestType;
   85019             : 
   85020             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   85021             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85022             :       /* \brief Typedef used to hold memory addresses as values.
   85023             :        */
   85024             :        // typedef unsigned long  AddressType;
   85025             : 
   85026             : 
   85027             : 
   85028             :        // necessary, to have direct access to the p_freepointer and the private methods !
   85029             :       /*! \brief friend class declaration to support AST File I/O */
   85030             :           friend class AST_FILE_IO;
   85031             : 
   85032             :       /*! \brief friend class declaration to support AST File I/O */
   85033             :           friend class SgOmpBeginClauseStorageClass;
   85034             : 
   85035             :       /*! \brief friend class declaration to support AST File I/O */
   85036             :           friend class AstSpecificDataManagingClass;
   85037             : 
   85038             :       /*! \brief friend class declaration to support AST File I/O */
   85039             :           friend class AstSpecificDataManagingClassStorageClass;
   85040             :     public:
   85041             :       /*! \brief IR node constructor to support AST File I/O */
   85042             :           SgOmpBeginClause( const SgOmpBeginClauseStorageClass& source );
   85043             : 
   85044             :  // private: // JJW hack
   85045             :        /*
   85046             :           name AST Memory Allocation Support Variables
   85047             :           Memory allocations support variables 
   85048             : 
   85049             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   85050             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   85051             :           and support the AST File I/O Mechanism.
   85052             :        */
   85053             :       /* */
   85054             : 
   85055             :     public:
   85056             : 
   85057             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   85058             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   85059             :       // virtual SgNode* addRegExpAttribute();
   85060             :       /*! \brief Support for AST matching using regular expression.
   85061             : 
   85062             :           This support is incomplete and the subject of current research to define 
   85063             :           RegEx trees to support inexact matching.
   85064             :        */
   85065             :           SgOmpBeginClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   85066             : 
   85067             : // *** COMMON CODE SECTION ENDS HERE ***
   85068             : 
   85069             : 
   85070             : // End of memberFunctionString
   85071             : // Start of memberFunctionString
   85072             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   85073             : 
   85074             :      // the generated cast function
   85075             :      // friend ROSE_DLL_API SgOmpBeginClause* isSgOmpBeginClause ( SgNode* s );
   85076             : 
   85077             :           typedef SgOmpClause base_node_type;
   85078             : 
   85079             : 
   85080             : // End of memberFunctionString
   85081             : 
   85082             : 
   85083             :      public: 
   85084             :          virtual ~SgOmpBeginClause();
   85085             : 
   85086             : 
   85087             :      public: 
   85088             :          SgOmpBeginClause(Sg_File_Info* startOfConstruct ); 
   85089             :          SgOmpBeginClause(); 
   85090             : 
   85091             :     protected:
   85092             : 
   85093             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpBeginClause>;
   85094             : 
   85095             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85096             : 
   85097             : 
   85098             :    };
   85099             : #endif
   85100             : 
   85101             : // postdeclarations for SgOmpBeginClause
   85102             : 
   85103             : /* #line 85104 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85104             : 
   85105             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   85106             : 
   85107             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85108             : 
   85109             : 
   85110             : /* #line 85111 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85111             : 
   85112             : 
   85113             : 
   85114             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85115             : 
   85116             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   85117             : //      This code is automatically generated for each 
   85118             : //      terminal and non-terminal within the defined 
   85119             : //      grammar.  There is a simple way to change the 
   85120             : //      code to fix bugs etc.  See the ROSE README file
   85121             : //      for directions.
   85122             : 
   85123             : // tps: (02/22/2010): Adding DLL export requirements
   85124             : #include "rosedll.h"
   85125             : 
   85126             : // predeclarations for SgOmpEndClause
   85127             : 
   85128             : /* #line 85129 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85129             : 
   85130             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   85131             : 
   85132             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85133             : 
   85134             : #if 1
   85135             : // Class Definition for SgOmpEndClause
   85136             : class ROSE_DLL_API SgOmpEndClause  : public SgOmpClause
   85137             :    {
   85138             :      public:
   85139             : 
   85140             : 
   85141             : /* #line 85142 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85142             : 
   85143             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   85144             : // Start of memberFunctionString
   85145             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   85146             : 
   85147             : // *** COMMON CODE SECTION BEGINS HERE ***
   85148             : 
   85149             :     public:
   85150             : 
   85151             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   85152             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   85153             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   85154             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   85155             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   85156             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   85157             : 
   85158             :       /*! \brief returns a string representing the class name */
   85159             :           virtual std::string class_name() const override;
   85160             : 
   85161             :       /*! \brief returns new style SageIII enum values */
   85162             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   85163             : 
   85164             :       /*! \brief static variant value */
   85165             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   85166             :        // static const VariantT static_variant = V_SgOmpEndClause;
   85167             :           enum { static_variant = V_SgOmpEndClause };
   85168             : 
   85169             :        /* the generated cast function */
   85170             :       /*! \brief Casts pointer from base class to derived class */
   85171             :           ROSE_DLL_API friend       SgOmpEndClause* isSgOmpEndClause(       SgNode * s );
   85172             : 
   85173             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   85174             :           ROSE_DLL_API friend const SgOmpEndClause* isSgOmpEndClause( const SgNode * s );
   85175             : 
   85176             :      // ******************************************
   85177             :      // * Memory Pool / New / Delete
   85178             :      // ******************************************
   85179             : 
   85180             :      public:
   85181             :           /// \private
   85182             :           static const unsigned pool_size; //
   85183             :           /// \private
   85184             :           static std::vector<unsigned char *> pools; //
   85185             :           /// \private
   85186             :           static SgOmpEndClause * next_node; // 
   85187             : 
   85188             :           /// \private
   85189             :           static unsigned long initializeStorageClassArray(SgOmpEndClauseStorageClass *); //
   85190             : 
   85191             :           /// \private
   85192             :           static void clearMemoryPool(); //
   85193             :           static void deleteMemoryPool(); //
   85194             : 
   85195             :           /// \private
   85196             :           static void extendMemoryPoolForFileIO(); //
   85197             : 
   85198             :           /// \private
   85199             :           static SgOmpEndClause * getPointerFromGlobalIndex(unsigned long); //
   85200             :           /// \private
   85201             :           static SgOmpEndClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   85202             : 
   85203             :           /// \private
   85204             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   85205             :           /// \private
   85206             :           static void resetValidFreepointers(); //
   85207             :           /// \private
   85208             :           static unsigned long getNumberOfLastValidPointer(); //
   85209             : 
   85210             : 
   85211             : #if defined(INLINE_FUNCTIONS)
   85212             :       /*! \brief returns pointer to newly allocated IR node */
   85213             :           inline void *operator new (size_t size);
   85214             : #else
   85215             :       /*! \brief returns pointer to newly allocated IR node */
   85216             :           void *operator new (size_t size);
   85217             : #endif
   85218             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   85219             :           void operator delete (void* pointer, size_t size);
   85220             : 
   85221             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   85222           0 :           void operator delete (void* pointer)
   85223             :              {
   85224             :             // This is the generated delete operator...
   85225           0 :                SgOmpEndClause::operator delete (pointer,sizeof(SgOmpEndClause));
   85226             :              }
   85227             : 
   85228             :       /*! \brief Returns the total number of IR nodes of this type */
   85229             :           static size_t numberOfNodes();
   85230             : 
   85231             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   85232             :           static size_t memoryUsage();
   85233             : 
   85234             :       // End of scope which started in IR nodes specific code 
   85235             :       /* */
   85236             : 
   85237             :       /* name Internal Functions
   85238             :           \brief Internal functions ... incomplete-documentation
   85239             : 
   85240             :           These functions have been made public as part of the design, but they are suggested for internal use 
   85241             :           or by particularly knowledgeable users for specialized tools or applications.
   85242             : 
   85243             :           \internal We could not make these private because they are required by user for special purposes. And 
   85244             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   85245             :          
   85246             :        */
   85247             : 
   85248             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   85249             :        // overridden in every class by *generated* implementation
   85250             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   85251             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   85252             :        // MS: 06/28/02 container of names of variables or container indices 
   85253             :        // used used in the traversal to access AST successor nodes
   85254             :        // overridden in every class by *generated* implementation
   85255             :       /*! \brief container of names of variables or container indices used used in the traversal
   85256             :           to access AST successor nodes overridden in every class by *generated* implementation */
   85257             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   85258             : 
   85259             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   85260             :        // than all the vector copies. The implementation for these functions is generated for each class.
   85261             :       /*! \brief return number of children in the traversal successor list */
   85262             :           virtual size_t get_numberOfTraversalSuccessors() override;
   85263             :       /*! \brief index-based access to traversal successors by index number */
   85264             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   85265             :       /*! \brief index-based access to traversal successors by child node */
   85266             :           virtual size_t get_childIndex(SgNode *child) override;
   85267             : 
   85268             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   85269             :        // MS: 08/16/2002 method for generating RTI information
   85270             :       /*! \brief return C++ Runtime-Time-Information */
   85271             :           virtual RTIReturnType roseRTI() override;
   85272             : #endif
   85273             :       /* */
   85274             : 
   85275             : 
   85276             : 
   85277             :       /* name Deprecated Functions
   85278             :           \brief Deprecated functions ... incomplete-documentation
   85279             : 
   85280             :           These functions have been deprecated from use.
   85281             :        */
   85282             :       /* */
   85283             : 
   85284             :       /*! returns a C style string (char*) representing the class name */
   85285             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   85286             : 
   85287             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   85288             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   85289             : #if 0
   85290             :       /*! returns old style Sage II enum values */
   85291             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   85292             :       /*! returns old style Sage II enum values */
   85293             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   85294             : #endif
   85295             :       /* */
   85296             : 
   85297             : 
   85298             : 
   85299             : 
   85300             :      public:
   85301             :       /* name Traversal Support Functions
   85302             :           \brief Traversal support functions ... incomplete-documentation
   85303             : 
   85304             :           These functions have been made public as part of the design, but they are suggested for internal use 
   85305             :           or by particularly knowledgable users for specialized tools or applications.
   85306             :        */
   85307             :       /* */
   85308             : 
   85309             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   85310             :        // (inferior to ROSE traversal mechanism, experimental).
   85311             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   85312             :        */
   85313             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   85314             : 
   85315             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   85316             :       /*! \brief support for the classic visitor pattern done in GoF */
   85317             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   85318             : 
   85319             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   85320             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   85321             :        */
   85322             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   85323             : 
   85324             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   85325             :        */
   85326             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   85327             : 
   85328             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   85329             :        // This traversal helps support internal tools that call static member functions.
   85330             :        // note: this function operates on the memory pools.
   85331             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   85332             :        */
   85333             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   85334             :       /* */
   85335             : 
   85336             : 
   85337             :      public:
   85338             :       /* name Memory Allocation Functions
   85339             :           \brief Memory allocations functions ... incomplete-documentation
   85340             : 
   85341             :           These functions have been made public as part of the design, but they are suggested for internal use 
   85342             :           or by particularly knowledgable users for specialized tools or applications.
   85343             :        */
   85344             :       /* */
   85345             : 
   85346             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   85347             : 
   85348             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   85349             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   85350             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   85351             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   85352             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   85353             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   85354             :           being used with the AST File I/O mechanism.
   85355             :        */
   85356             :           virtual bool isInMemoryPool() override;
   85357             : 
   85358             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   85359             : 
   85360             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   85361             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   85362             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   85363             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   85364             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   85365             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   85366             :           being used with the AST File I/O mechanism.
   85367             :        */
   85368             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   85369             : 
   85370             :       // DQ (4/30/2006): Modified to be a const function.
   85371             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   85372             : 
   85373             :           This functions is part of general support for many possible tools to operate 
   85374             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   85375             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   85376             :           less than the set of pointers used by the AST file I/O. This is part of
   85377             :           work implemented by Andreas, and support tools such as the AST graph generation.
   85378             : 
   85379             :           \warning This function can return unexpected data members and thus the 
   85380             :                    order and the number of elements is unpredicable and subject 
   85381             :                    to change.
   85382             : 
   85383             :           \returns STL vector of pairs of SgNode* and strings
   85384             :        */
   85385             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   85386             : 
   85387             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   85388             : 
   85389             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   85390             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   85391             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   85392             : 
   85393             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   85394             :                    and subject to change.
   85395             :        */
   85396             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   85397             : 
   85398             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   85399             : 
   85400             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   85401             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   85402             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   85403             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   85404             : 
   85405             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   85406             : 
   85407             :           \returns long
   85408             :        */
   85409             :           virtual long getChildIndex( SgNode* childNode ) const override;
   85410             : 
   85411             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   85412             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85413             :       /* \brief Constructor for use by AST File I/O Mechanism
   85414             : 
   85415             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   85416             :           which obtained via fast binary file I/O from disk.
   85417             :        */
   85418             :        // SgOmpEndClause( SgOmpEndClauseStorageClass& source );
   85419             : 
   85420             : 
   85421             : 
   85422             : 
   85423             : 
   85424             :  // JH (10/24/2005): methods added to support the ast file IO
   85425             :     private:
   85426             : 
   85427             :       /* name AST Memory Allocation Support Functions
   85428             :           \brief Memory allocations support....
   85429             : 
   85430             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   85431             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   85432             :           and support the AST File I/O Mechanism.
   85433             :        */
   85434             :       /* */
   85435             : 
   85436             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   85437             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   85438             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   85439             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   85440             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   85441             :           a correspinding one in the AST_FILE_IO class!
   85442             :        */
   85443             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   85444             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85445             :       /* \brief Typedef used for low level memory access.
   85446             :        */
   85447             :        // typedef unsigned char* TestType;
   85448             : 
   85449             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   85450             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85451             :       /* \brief Typedef used to hold memory addresses as values.
   85452             :        */
   85453             :        // typedef unsigned long  AddressType;
   85454             : 
   85455             : 
   85456             : 
   85457             :        // necessary, to have direct access to the p_freepointer and the private methods !
   85458             :       /*! \brief friend class declaration to support AST File I/O */
   85459             :           friend class AST_FILE_IO;
   85460             : 
   85461             :       /*! \brief friend class declaration to support AST File I/O */
   85462             :           friend class SgOmpEndClauseStorageClass;
   85463             : 
   85464             :       /*! \brief friend class declaration to support AST File I/O */
   85465             :           friend class AstSpecificDataManagingClass;
   85466             : 
   85467             :       /*! \brief friend class declaration to support AST File I/O */
   85468             :           friend class AstSpecificDataManagingClassStorageClass;
   85469             :     public:
   85470             :       /*! \brief IR node constructor to support AST File I/O */
   85471             :           SgOmpEndClause( const SgOmpEndClauseStorageClass& source );
   85472             : 
   85473             :  // private: // JJW hack
   85474             :        /*
   85475             :           name AST Memory Allocation Support Variables
   85476             :           Memory allocations support variables 
   85477             : 
   85478             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   85479             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   85480             :           and support the AST File I/O Mechanism.
   85481             :        */
   85482             :       /* */
   85483             : 
   85484             :     public:
   85485             : 
   85486             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   85487             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   85488             :       // virtual SgNode* addRegExpAttribute();
   85489             :       /*! \brief Support for AST matching using regular expression.
   85490             : 
   85491             :           This support is incomplete and the subject of current research to define 
   85492             :           RegEx trees to support inexact matching.
   85493             :        */
   85494             :           SgOmpEndClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   85495             : 
   85496             : // *** COMMON CODE SECTION ENDS HERE ***
   85497             : 
   85498             : 
   85499             : // End of memberFunctionString
   85500             : // Start of memberFunctionString
   85501             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   85502             : 
   85503             :      // the generated cast function
   85504             :      // friend ROSE_DLL_API SgOmpEndClause* isSgOmpEndClause ( SgNode* s );
   85505             : 
   85506             :           typedef SgOmpClause base_node_type;
   85507             : 
   85508             : 
   85509             : // End of memberFunctionString
   85510             : 
   85511             : 
   85512             :      public: 
   85513             :          virtual ~SgOmpEndClause();
   85514             : 
   85515             : 
   85516             :      public: 
   85517             :          SgOmpEndClause(Sg_File_Info* startOfConstruct ); 
   85518             :          SgOmpEndClause(); 
   85519             : 
   85520             :     protected:
   85521             : 
   85522             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpEndClause>;
   85523             : 
   85524             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85525             : 
   85526             : 
   85527             :    };
   85528             : #endif
   85529             : 
   85530             : // postdeclarations for SgOmpEndClause
   85531             : 
   85532             : /* #line 85533 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85533             : 
   85534             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   85535             : 
   85536             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85537             : 
   85538             : 
   85539             : /* #line 85540 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85540             : 
   85541             : 
   85542             : 
   85543             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85544             : 
   85545             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   85546             : //      This code is automatically generated for each 
   85547             : //      terminal and non-terminal within the defined 
   85548             : //      grammar.  There is a simple way to change the 
   85549             : //      code to fix bugs etc.  See the ROSE README file
   85550             : //      for directions.
   85551             : 
   85552             : // tps: (02/22/2010): Adding DLL export requirements
   85553             : #include "rosedll.h"
   85554             : 
   85555             : // predeclarations for SgOmpUntiedClause
   85556             : 
   85557             : /* #line 85558 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85558             : 
   85559             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   85560             : 
   85561             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85562             : 
   85563             : #if 1
   85564             : // Class Definition for SgOmpUntiedClause
   85565             : class ROSE_DLL_API SgOmpUntiedClause  : public SgOmpClause
   85566             :    {
   85567             :      public:
   85568             : 
   85569             : 
   85570             : /* #line 85571 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85571             : 
   85572             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   85573             : // Start of memberFunctionString
   85574             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   85575             : 
   85576             : // *** COMMON CODE SECTION BEGINS HERE ***
   85577             : 
   85578             :     public:
   85579             : 
   85580             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   85581             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   85582             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   85583             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   85584             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   85585             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   85586             : 
   85587             :       /*! \brief returns a string representing the class name */
   85588             :           virtual std::string class_name() const override;
   85589             : 
   85590             :       /*! \brief returns new style SageIII enum values */
   85591             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   85592             : 
   85593             :       /*! \brief static variant value */
   85594             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   85595             :        // static const VariantT static_variant = V_SgOmpUntiedClause;
   85596             :           enum { static_variant = V_SgOmpUntiedClause };
   85597             : 
   85598             :        /* the generated cast function */
   85599             :       /*! \brief Casts pointer from base class to derived class */
   85600             :           ROSE_DLL_API friend       SgOmpUntiedClause* isSgOmpUntiedClause(       SgNode * s );
   85601             : 
   85602             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   85603             :           ROSE_DLL_API friend const SgOmpUntiedClause* isSgOmpUntiedClause( const SgNode * s );
   85604             : 
   85605             :      // ******************************************
   85606             :      // * Memory Pool / New / Delete
   85607             :      // ******************************************
   85608             : 
   85609             :      public:
   85610             :           /// \private
   85611             :           static const unsigned pool_size; //
   85612             :           /// \private
   85613             :           static std::vector<unsigned char *> pools; //
   85614             :           /// \private
   85615             :           static SgOmpUntiedClause * next_node; // 
   85616             : 
   85617             :           /// \private
   85618             :           static unsigned long initializeStorageClassArray(SgOmpUntiedClauseStorageClass *); //
   85619             : 
   85620             :           /// \private
   85621             :           static void clearMemoryPool(); //
   85622             :           static void deleteMemoryPool(); //
   85623             : 
   85624             :           /// \private
   85625             :           static void extendMemoryPoolForFileIO(); //
   85626             : 
   85627             :           /// \private
   85628             :           static SgOmpUntiedClause * getPointerFromGlobalIndex(unsigned long); //
   85629             :           /// \private
   85630             :           static SgOmpUntiedClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   85631             : 
   85632             :           /// \private
   85633             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   85634             :           /// \private
   85635             :           static void resetValidFreepointers(); //
   85636             :           /// \private
   85637             :           static unsigned long getNumberOfLastValidPointer(); //
   85638             : 
   85639             : 
   85640             : #if defined(INLINE_FUNCTIONS)
   85641             :       /*! \brief returns pointer to newly allocated IR node */
   85642             :           inline void *operator new (size_t size);
   85643             : #else
   85644             :       /*! \brief returns pointer to newly allocated IR node */
   85645             :           void *operator new (size_t size);
   85646             : #endif
   85647             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   85648             :           void operator delete (void* pointer, size_t size);
   85649             : 
   85650             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   85651           0 :           void operator delete (void* pointer)
   85652             :              {
   85653             :             // This is the generated delete operator...
   85654           0 :                SgOmpUntiedClause::operator delete (pointer,sizeof(SgOmpUntiedClause));
   85655             :              }
   85656             : 
   85657             :       /*! \brief Returns the total number of IR nodes of this type */
   85658             :           static size_t numberOfNodes();
   85659             : 
   85660             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   85661             :           static size_t memoryUsage();
   85662             : 
   85663             :       // End of scope which started in IR nodes specific code 
   85664             :       /* */
   85665             : 
   85666             :       /* name Internal Functions
   85667             :           \brief Internal functions ... incomplete-documentation
   85668             : 
   85669             :           These functions have been made public as part of the design, but they are suggested for internal use 
   85670             :           or by particularly knowledgeable users for specialized tools or applications.
   85671             : 
   85672             :           \internal We could not make these private because they are required by user for special purposes. And 
   85673             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   85674             :          
   85675             :        */
   85676             : 
   85677             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   85678             :        // overridden in every class by *generated* implementation
   85679             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   85680             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   85681             :        // MS: 06/28/02 container of names of variables or container indices 
   85682             :        // used used in the traversal to access AST successor nodes
   85683             :        // overridden in every class by *generated* implementation
   85684             :       /*! \brief container of names of variables or container indices used used in the traversal
   85685             :           to access AST successor nodes overridden in every class by *generated* implementation */
   85686             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   85687             : 
   85688             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   85689             :        // than all the vector copies. The implementation for these functions is generated for each class.
   85690             :       /*! \brief return number of children in the traversal successor list */
   85691             :           virtual size_t get_numberOfTraversalSuccessors() override;
   85692             :       /*! \brief index-based access to traversal successors by index number */
   85693             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   85694             :       /*! \brief index-based access to traversal successors by child node */
   85695             :           virtual size_t get_childIndex(SgNode *child) override;
   85696             : 
   85697             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   85698             :        // MS: 08/16/2002 method for generating RTI information
   85699             :       /*! \brief return C++ Runtime-Time-Information */
   85700             :           virtual RTIReturnType roseRTI() override;
   85701             : #endif
   85702             :       /* */
   85703             : 
   85704             : 
   85705             : 
   85706             :       /* name Deprecated Functions
   85707             :           \brief Deprecated functions ... incomplete-documentation
   85708             : 
   85709             :           These functions have been deprecated from use.
   85710             :        */
   85711             :       /* */
   85712             : 
   85713             :       /*! returns a C style string (char*) representing the class name */
   85714             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   85715             : 
   85716             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   85717             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   85718             : #if 0
   85719             :       /*! returns old style Sage II enum values */
   85720             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   85721             :       /*! returns old style Sage II enum values */
   85722             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   85723             : #endif
   85724             :       /* */
   85725             : 
   85726             : 
   85727             : 
   85728             : 
   85729             :      public:
   85730             :       /* name Traversal Support Functions
   85731             :           \brief Traversal support functions ... incomplete-documentation
   85732             : 
   85733             :           These functions have been made public as part of the design, but they are suggested for internal use 
   85734             :           or by particularly knowledgable users for specialized tools or applications.
   85735             :        */
   85736             :       /* */
   85737             : 
   85738             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   85739             :        // (inferior to ROSE traversal mechanism, experimental).
   85740             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   85741             :        */
   85742             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   85743             : 
   85744             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   85745             :       /*! \brief support for the classic visitor pattern done in GoF */
   85746             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   85747             : 
   85748             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   85749             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   85750             :        */
   85751             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   85752             : 
   85753             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   85754             :        */
   85755             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   85756             : 
   85757             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   85758             :        // This traversal helps support internal tools that call static member functions.
   85759             :        // note: this function operates on the memory pools.
   85760             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   85761             :        */
   85762             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   85763             :       /* */
   85764             : 
   85765             : 
   85766             :      public:
   85767             :       /* name Memory Allocation Functions
   85768             :           \brief Memory allocations functions ... incomplete-documentation
   85769             : 
   85770             :           These functions have been made public as part of the design, but they are suggested for internal use 
   85771             :           or by particularly knowledgable users for specialized tools or applications.
   85772             :        */
   85773             :       /* */
   85774             : 
   85775             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   85776             : 
   85777             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   85778             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   85779             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   85780             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   85781             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   85782             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   85783             :           being used with the AST File I/O mechanism.
   85784             :        */
   85785             :           virtual bool isInMemoryPool() override;
   85786             : 
   85787             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   85788             : 
   85789             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   85790             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   85791             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   85792             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   85793             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   85794             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   85795             :           being used with the AST File I/O mechanism.
   85796             :        */
   85797             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   85798             : 
   85799             :       // DQ (4/30/2006): Modified to be a const function.
   85800             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   85801             : 
   85802             :           This functions is part of general support for many possible tools to operate 
   85803             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   85804             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   85805             :           less than the set of pointers used by the AST file I/O. This is part of
   85806             :           work implemented by Andreas, and support tools such as the AST graph generation.
   85807             : 
   85808             :           \warning This function can return unexpected data members and thus the 
   85809             :                    order and the number of elements is unpredicable and subject 
   85810             :                    to change.
   85811             : 
   85812             :           \returns STL vector of pairs of SgNode* and strings
   85813             :        */
   85814             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   85815             : 
   85816             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   85817             : 
   85818             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   85819             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   85820             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   85821             : 
   85822             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   85823             :                    and subject to change.
   85824             :        */
   85825             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   85826             : 
   85827             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   85828             : 
   85829             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   85830             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   85831             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   85832             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   85833             : 
   85834             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   85835             : 
   85836             :           \returns long
   85837             :        */
   85838             :           virtual long getChildIndex( SgNode* childNode ) const override;
   85839             : 
   85840             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   85841             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85842             :       /* \brief Constructor for use by AST File I/O Mechanism
   85843             : 
   85844             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   85845             :           which obtained via fast binary file I/O from disk.
   85846             :        */
   85847             :        // SgOmpUntiedClause( SgOmpUntiedClauseStorageClass& source );
   85848             : 
   85849             : 
   85850             : 
   85851             : 
   85852             : 
   85853             :  // JH (10/24/2005): methods added to support the ast file IO
   85854             :     private:
   85855             : 
   85856             :       /* name AST Memory Allocation Support Functions
   85857             :           \brief Memory allocations support....
   85858             : 
   85859             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   85860             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   85861             :           and support the AST File I/O Mechanism.
   85862             :        */
   85863             :       /* */
   85864             : 
   85865             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   85866             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   85867             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   85868             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   85869             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   85870             :           a correspinding one in the AST_FILE_IO class!
   85871             :        */
   85872             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   85873             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85874             :       /* \brief Typedef used for low level memory access.
   85875             :        */
   85876             :        // typedef unsigned char* TestType;
   85877             : 
   85878             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   85879             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   85880             :       /* \brief Typedef used to hold memory addresses as values.
   85881             :        */
   85882             :        // typedef unsigned long  AddressType;
   85883             : 
   85884             : 
   85885             : 
   85886             :        // necessary, to have direct access to the p_freepointer and the private methods !
   85887             :       /*! \brief friend class declaration to support AST File I/O */
   85888             :           friend class AST_FILE_IO;
   85889             : 
   85890             :       /*! \brief friend class declaration to support AST File I/O */
   85891             :           friend class SgOmpUntiedClauseStorageClass;
   85892             : 
   85893             :       /*! \brief friend class declaration to support AST File I/O */
   85894             :           friend class AstSpecificDataManagingClass;
   85895             : 
   85896             :       /*! \brief friend class declaration to support AST File I/O */
   85897             :           friend class AstSpecificDataManagingClassStorageClass;
   85898             :     public:
   85899             :       /*! \brief IR node constructor to support AST File I/O */
   85900             :           SgOmpUntiedClause( const SgOmpUntiedClauseStorageClass& source );
   85901             : 
   85902             :  // private: // JJW hack
   85903             :        /*
   85904             :           name AST Memory Allocation Support Variables
   85905             :           Memory allocations support variables 
   85906             : 
   85907             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   85908             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   85909             :           and support the AST File I/O Mechanism.
   85910             :        */
   85911             :       /* */
   85912             : 
   85913             :     public:
   85914             : 
   85915             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   85916             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   85917             :       // virtual SgNode* addRegExpAttribute();
   85918             :       /*! \brief Support for AST matching using regular expression.
   85919             : 
   85920             :           This support is incomplete and the subject of current research to define 
   85921             :           RegEx trees to support inexact matching.
   85922             :        */
   85923             :           SgOmpUntiedClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   85924             : 
   85925             : // *** COMMON CODE SECTION ENDS HERE ***
   85926             : 
   85927             : 
   85928             : // End of memberFunctionString
   85929             : // Start of memberFunctionString
   85930             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   85931             : 
   85932             :      // the generated cast function
   85933             :      // friend ROSE_DLL_API SgOmpUntiedClause* isSgOmpUntiedClause ( SgNode* s );
   85934             : 
   85935             :           typedef SgOmpClause base_node_type;
   85936             : 
   85937             : 
   85938             : // End of memberFunctionString
   85939             : 
   85940             : 
   85941             :      public: 
   85942             :          virtual ~SgOmpUntiedClause();
   85943             : 
   85944             : 
   85945             :      public: 
   85946             :          SgOmpUntiedClause(Sg_File_Info* startOfConstruct ); 
   85947             :          SgOmpUntiedClause(); 
   85948             : 
   85949             :     protected:
   85950             : 
   85951             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUntiedClause>;
   85952             : 
   85953             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85954             : 
   85955             : 
   85956             :    };
   85957             : #endif
   85958             : 
   85959             : // postdeclarations for SgOmpUntiedClause
   85960             : 
   85961             : /* #line 85962 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85962             : 
   85963             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   85964             : 
   85965             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85966             : 
   85967             : 
   85968             : /* #line 85969 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85969             : 
   85970             : 
   85971             : 
   85972             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85973             : 
   85974             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   85975             : //      This code is automatically generated for each 
   85976             : //      terminal and non-terminal within the defined 
   85977             : //      grammar.  There is a simple way to change the 
   85978             : //      code to fix bugs etc.  See the ROSE README file
   85979             : //      for directions.
   85980             : 
   85981             : // tps: (02/22/2010): Adding DLL export requirements
   85982             : #include "rosedll.h"
   85983             : 
   85984             : // predeclarations for SgOmpSeqCstClause
   85985             : 
   85986             : /* #line 85987 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   85987             : 
   85988             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   85989             : 
   85990             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   85991             : 
   85992             : #if 1
   85993             : // Class Definition for SgOmpSeqCstClause
   85994             : class ROSE_DLL_API SgOmpSeqCstClause  : public SgOmpClause
   85995             :    {
   85996             :      public:
   85997             : 
   85998             : 
   85999             : /* #line 86000 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86000             : 
   86001             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   86002             : // Start of memberFunctionString
   86003             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   86004             : 
   86005             : // *** COMMON CODE SECTION BEGINS HERE ***
   86006             : 
   86007             :     public:
   86008             : 
   86009             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   86010             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   86011             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   86012             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   86013             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   86014             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   86015             : 
   86016             :       /*! \brief returns a string representing the class name */
   86017             :           virtual std::string class_name() const override;
   86018             : 
   86019             :       /*! \brief returns new style SageIII enum values */
   86020             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   86021             : 
   86022             :       /*! \brief static variant value */
   86023             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   86024             :        // static const VariantT static_variant = V_SgOmpSeqCstClause;
   86025             :           enum { static_variant = V_SgOmpSeqCstClause };
   86026             : 
   86027             :        /* the generated cast function */
   86028             :       /*! \brief Casts pointer from base class to derived class */
   86029             :           ROSE_DLL_API friend       SgOmpSeqCstClause* isSgOmpSeqCstClause(       SgNode * s );
   86030             : 
   86031             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   86032             :           ROSE_DLL_API friend const SgOmpSeqCstClause* isSgOmpSeqCstClause( const SgNode * s );
   86033             : 
   86034             :      // ******************************************
   86035             :      // * Memory Pool / New / Delete
   86036             :      // ******************************************
   86037             : 
   86038             :      public:
   86039             :           /// \private
   86040             :           static const unsigned pool_size; //
   86041             :           /// \private
   86042             :           static std::vector<unsigned char *> pools; //
   86043             :           /// \private
   86044             :           static SgOmpSeqCstClause * next_node; // 
   86045             : 
   86046             :           /// \private
   86047             :           static unsigned long initializeStorageClassArray(SgOmpSeqCstClauseStorageClass *); //
   86048             : 
   86049             :           /// \private
   86050             :           static void clearMemoryPool(); //
   86051             :           static void deleteMemoryPool(); //
   86052             : 
   86053             :           /// \private
   86054             :           static void extendMemoryPoolForFileIO(); //
   86055             : 
   86056             :           /// \private
   86057             :           static SgOmpSeqCstClause * getPointerFromGlobalIndex(unsigned long); //
   86058             :           /// \private
   86059             :           static SgOmpSeqCstClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   86060             : 
   86061             :           /// \private
   86062             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   86063             :           /// \private
   86064             :           static void resetValidFreepointers(); //
   86065             :           /// \private
   86066             :           static unsigned long getNumberOfLastValidPointer(); //
   86067             : 
   86068             : 
   86069             : #if defined(INLINE_FUNCTIONS)
   86070             :       /*! \brief returns pointer to newly allocated IR node */
   86071             :           inline void *operator new (size_t size);
   86072             : #else
   86073             :       /*! \brief returns pointer to newly allocated IR node */
   86074             :           void *operator new (size_t size);
   86075             : #endif
   86076             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   86077             :           void operator delete (void* pointer, size_t size);
   86078             : 
   86079             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   86080           0 :           void operator delete (void* pointer)
   86081             :              {
   86082             :             // This is the generated delete operator...
   86083           0 :                SgOmpSeqCstClause::operator delete (pointer,sizeof(SgOmpSeqCstClause));
   86084             :              }
   86085             : 
   86086             :       /*! \brief Returns the total number of IR nodes of this type */
   86087             :           static size_t numberOfNodes();
   86088             : 
   86089             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   86090             :           static size_t memoryUsage();
   86091             : 
   86092             :       // End of scope which started in IR nodes specific code 
   86093             :       /* */
   86094             : 
   86095             :       /* name Internal Functions
   86096             :           \brief Internal functions ... incomplete-documentation
   86097             : 
   86098             :           These functions have been made public as part of the design, but they are suggested for internal use 
   86099             :           or by particularly knowledgeable users for specialized tools or applications.
   86100             : 
   86101             :           \internal We could not make these private because they are required by user for special purposes. And 
   86102             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   86103             :          
   86104             :        */
   86105             : 
   86106             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   86107             :        // overridden in every class by *generated* implementation
   86108             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   86109             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   86110             :        // MS: 06/28/02 container of names of variables or container indices 
   86111             :        // used used in the traversal to access AST successor nodes
   86112             :        // overridden in every class by *generated* implementation
   86113             :       /*! \brief container of names of variables or container indices used used in the traversal
   86114             :           to access AST successor nodes overridden in every class by *generated* implementation */
   86115             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   86116             : 
   86117             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   86118             :        // than all the vector copies. The implementation for these functions is generated for each class.
   86119             :       /*! \brief return number of children in the traversal successor list */
   86120             :           virtual size_t get_numberOfTraversalSuccessors() override;
   86121             :       /*! \brief index-based access to traversal successors by index number */
   86122             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   86123             :       /*! \brief index-based access to traversal successors by child node */
   86124             :           virtual size_t get_childIndex(SgNode *child) override;
   86125             : 
   86126             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   86127             :        // MS: 08/16/2002 method for generating RTI information
   86128             :       /*! \brief return C++ Runtime-Time-Information */
   86129             :           virtual RTIReturnType roseRTI() override;
   86130             : #endif
   86131             :       /* */
   86132             : 
   86133             : 
   86134             : 
   86135             :       /* name Deprecated Functions
   86136             :           \brief Deprecated functions ... incomplete-documentation
   86137             : 
   86138             :           These functions have been deprecated from use.
   86139             :        */
   86140             :       /* */
   86141             : 
   86142             :       /*! returns a C style string (char*) representing the class name */
   86143             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   86144             : 
   86145             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   86146             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   86147             : #if 0
   86148             :       /*! returns old style Sage II enum values */
   86149             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   86150             :       /*! returns old style Sage II enum values */
   86151             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   86152             : #endif
   86153             :       /* */
   86154             : 
   86155             : 
   86156             : 
   86157             : 
   86158             :      public:
   86159             :       /* name Traversal Support Functions
   86160             :           \brief Traversal support functions ... incomplete-documentation
   86161             : 
   86162             :           These functions have been made public as part of the design, but they are suggested for internal use 
   86163             :           or by particularly knowledgable users for specialized tools or applications.
   86164             :        */
   86165             :       /* */
   86166             : 
   86167             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   86168             :        // (inferior to ROSE traversal mechanism, experimental).
   86169             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   86170             :        */
   86171             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   86172             : 
   86173             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   86174             :       /*! \brief support for the classic visitor pattern done in GoF */
   86175             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   86176             : 
   86177             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   86178             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   86179             :        */
   86180             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   86181             : 
   86182             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   86183             :        */
   86184             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   86185             : 
   86186             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   86187             :        // This traversal helps support internal tools that call static member functions.
   86188             :        // note: this function operates on the memory pools.
   86189             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   86190             :        */
   86191             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   86192             :       /* */
   86193             : 
   86194             : 
   86195             :      public:
   86196             :       /* name Memory Allocation Functions
   86197             :           \brief Memory allocations functions ... incomplete-documentation
   86198             : 
   86199             :           These functions have been made public as part of the design, but they are suggested for internal use 
   86200             :           or by particularly knowledgable users for specialized tools or applications.
   86201             :        */
   86202             :       /* */
   86203             : 
   86204             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   86205             : 
   86206             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   86207             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   86208             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   86209             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   86210             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   86211             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   86212             :           being used with the AST File I/O mechanism.
   86213             :        */
   86214             :           virtual bool isInMemoryPool() override;
   86215             : 
   86216             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   86217             : 
   86218             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   86219             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   86220             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   86221             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   86222             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   86223             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   86224             :           being used with the AST File I/O mechanism.
   86225             :        */
   86226             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   86227             : 
   86228             :       // DQ (4/30/2006): Modified to be a const function.
   86229             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   86230             : 
   86231             :           This functions is part of general support for many possible tools to operate 
   86232             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   86233             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   86234             :           less than the set of pointers used by the AST file I/O. This is part of
   86235             :           work implemented by Andreas, and support tools such as the AST graph generation.
   86236             : 
   86237             :           \warning This function can return unexpected data members and thus the 
   86238             :                    order and the number of elements is unpredicable and subject 
   86239             :                    to change.
   86240             : 
   86241             :           \returns STL vector of pairs of SgNode* and strings
   86242             :        */
   86243             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   86244             : 
   86245             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   86246             : 
   86247             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   86248             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   86249             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   86250             : 
   86251             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   86252             :                    and subject to change.
   86253             :        */
   86254             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   86255             : 
   86256             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   86257             : 
   86258             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   86259             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   86260             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   86261             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   86262             : 
   86263             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   86264             : 
   86265             :           \returns long
   86266             :        */
   86267             :           virtual long getChildIndex( SgNode* childNode ) const override;
   86268             : 
   86269             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   86270             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   86271             :       /* \brief Constructor for use by AST File I/O Mechanism
   86272             : 
   86273             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   86274             :           which obtained via fast binary file I/O from disk.
   86275             :        */
   86276             :        // SgOmpSeqCstClause( SgOmpSeqCstClauseStorageClass& source );
   86277             : 
   86278             : 
   86279             : 
   86280             : 
   86281             : 
   86282             :  // JH (10/24/2005): methods added to support the ast file IO
   86283             :     private:
   86284             : 
   86285             :       /* name AST Memory Allocation Support Functions
   86286             :           \brief Memory allocations support....
   86287             : 
   86288             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   86289             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   86290             :           and support the AST File I/O Mechanism.
   86291             :        */
   86292             :       /* */
   86293             : 
   86294             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   86295             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   86296             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   86297             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   86298             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   86299             :           a correspinding one in the AST_FILE_IO class!
   86300             :        */
   86301             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   86302             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   86303             :       /* \brief Typedef used for low level memory access.
   86304             :        */
   86305             :        // typedef unsigned char* TestType;
   86306             : 
   86307             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   86308             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   86309             :       /* \brief Typedef used to hold memory addresses as values.
   86310             :        */
   86311             :        // typedef unsigned long  AddressType;
   86312             : 
   86313             : 
   86314             : 
   86315             :        // necessary, to have direct access to the p_freepointer and the private methods !
   86316             :       /*! \brief friend class declaration to support AST File I/O */
   86317             :           friend class AST_FILE_IO;
   86318             : 
   86319             :       /*! \brief friend class declaration to support AST File I/O */
   86320             :           friend class SgOmpSeqCstClauseStorageClass;
   86321             : 
   86322             :       /*! \brief friend class declaration to support AST File I/O */
   86323             :           friend class AstSpecificDataManagingClass;
   86324             : 
   86325             :       /*! \brief friend class declaration to support AST File I/O */
   86326             :           friend class AstSpecificDataManagingClassStorageClass;
   86327             :     public:
   86328             :       /*! \brief IR node constructor to support AST File I/O */
   86329             :           SgOmpSeqCstClause( const SgOmpSeqCstClauseStorageClass& source );
   86330             : 
   86331             :  // private: // JJW hack
   86332             :        /*
   86333             :           name AST Memory Allocation Support Variables
   86334             :           Memory allocations support variables 
   86335             : 
   86336             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   86337             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   86338             :           and support the AST File I/O Mechanism.
   86339             :        */
   86340             :       /* */
   86341             : 
   86342             :     public:
   86343             : 
   86344             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   86345             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   86346             :       // virtual SgNode* addRegExpAttribute();
   86347             :       /*! \brief Support for AST matching using regular expression.
   86348             : 
   86349             :           This support is incomplete and the subject of current research to define 
   86350             :           RegEx trees to support inexact matching.
   86351             :        */
   86352             :           SgOmpSeqCstClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   86353             : 
   86354             : // *** COMMON CODE SECTION ENDS HERE ***
   86355             : 
   86356             : 
   86357             : // End of memberFunctionString
   86358             : // Start of memberFunctionString
   86359             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   86360             : 
   86361             :      // the generated cast function
   86362             :      // friend ROSE_DLL_API SgOmpSeqCstClause* isSgOmpSeqCstClause ( SgNode* s );
   86363             : 
   86364             :           typedef SgOmpClause base_node_type;
   86365             : 
   86366             : 
   86367             : // End of memberFunctionString
   86368             : 
   86369             : 
   86370             :      public: 
   86371             :          virtual ~SgOmpSeqCstClause();
   86372             : 
   86373             : 
   86374             :      public: 
   86375             :          SgOmpSeqCstClause(Sg_File_Info* startOfConstruct ); 
   86376             :          SgOmpSeqCstClause(); 
   86377             : 
   86378             :     protected:
   86379             : 
   86380             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSeqCstClause>;
   86381             : 
   86382             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86383             : 
   86384             : 
   86385             :    };
   86386             : #endif
   86387             : 
   86388             : // postdeclarations for SgOmpSeqCstClause
   86389             : 
   86390             : /* #line 86391 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86391             : 
   86392             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   86393             : 
   86394             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86395             : 
   86396             : 
   86397             : /* #line 86398 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86398             : 
   86399             : 
   86400             : 
   86401             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86402             : 
   86403             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   86404             : //      This code is automatically generated for each 
   86405             : //      terminal and non-terminal within the defined 
   86406             : //      grammar.  There is a simple way to change the 
   86407             : //      code to fix bugs etc.  See the ROSE README file
   86408             : //      for directions.
   86409             : 
   86410             : // tps: (02/22/2010): Adding DLL export requirements
   86411             : #include "rosedll.h"
   86412             : 
   86413             : // predeclarations for SgOmpAcqRelClause
   86414             : 
   86415             : /* #line 86416 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86416             : 
   86417             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   86418             : 
   86419             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86420             : 
   86421             : #if 1
   86422             : // Class Definition for SgOmpAcqRelClause
   86423             : class ROSE_DLL_API SgOmpAcqRelClause  : public SgOmpClause
   86424             :    {
   86425             :      public:
   86426             : 
   86427             : 
   86428             : /* #line 86429 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86429             : 
   86430             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   86431             : // Start of memberFunctionString
   86432             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   86433             : 
   86434             : // *** COMMON CODE SECTION BEGINS HERE ***
   86435             : 
   86436             :     public:
   86437             : 
   86438             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   86439             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   86440             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   86441             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   86442             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   86443             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   86444             : 
   86445             :       /*! \brief returns a string representing the class name */
   86446             :           virtual std::string class_name() const override;
   86447             : 
   86448             :       /*! \brief returns new style SageIII enum values */
   86449             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   86450             : 
   86451             :       /*! \brief static variant value */
   86452             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   86453             :        // static const VariantT static_variant = V_SgOmpAcqRelClause;
   86454             :           enum { static_variant = V_SgOmpAcqRelClause };
   86455             : 
   86456             :        /* the generated cast function */
   86457             :       /*! \brief Casts pointer from base class to derived class */
   86458             :           ROSE_DLL_API friend       SgOmpAcqRelClause* isSgOmpAcqRelClause(       SgNode * s );
   86459             : 
   86460             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   86461             :           ROSE_DLL_API friend const SgOmpAcqRelClause* isSgOmpAcqRelClause( const SgNode * s );
   86462             : 
   86463             :      // ******************************************
   86464             :      // * Memory Pool / New / Delete
   86465             :      // ******************************************
   86466             : 
   86467             :      public:
   86468             :           /// \private
   86469             :           static const unsigned pool_size; //
   86470             :           /// \private
   86471             :           static std::vector<unsigned char *> pools; //
   86472             :           /// \private
   86473             :           static SgOmpAcqRelClause * next_node; // 
   86474             : 
   86475             :           /// \private
   86476             :           static unsigned long initializeStorageClassArray(SgOmpAcqRelClauseStorageClass *); //
   86477             : 
   86478             :           /// \private
   86479             :           static void clearMemoryPool(); //
   86480             :           static void deleteMemoryPool(); //
   86481             : 
   86482             :           /// \private
   86483             :           static void extendMemoryPoolForFileIO(); //
   86484             : 
   86485             :           /// \private
   86486             :           static SgOmpAcqRelClause * getPointerFromGlobalIndex(unsigned long); //
   86487             :           /// \private
   86488             :           static SgOmpAcqRelClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   86489             : 
   86490             :           /// \private
   86491             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   86492             :           /// \private
   86493             :           static void resetValidFreepointers(); //
   86494             :           /// \private
   86495             :           static unsigned long getNumberOfLastValidPointer(); //
   86496             : 
   86497             : 
   86498             : #if defined(INLINE_FUNCTIONS)
   86499             :       /*! \brief returns pointer to newly allocated IR node */
   86500             :           inline void *operator new (size_t size);
   86501             : #else
   86502             :       /*! \brief returns pointer to newly allocated IR node */
   86503             :           void *operator new (size_t size);
   86504             : #endif
   86505             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   86506             :           void operator delete (void* pointer, size_t size);
   86507             : 
   86508             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   86509           0 :           void operator delete (void* pointer)
   86510             :              {
   86511             :             // This is the generated delete operator...
   86512           0 :                SgOmpAcqRelClause::operator delete (pointer,sizeof(SgOmpAcqRelClause));
   86513             :              }
   86514             : 
   86515             :       /*! \brief Returns the total number of IR nodes of this type */
   86516             :           static size_t numberOfNodes();
   86517             : 
   86518             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   86519             :           static size_t memoryUsage();
   86520             : 
   86521             :       // End of scope which started in IR nodes specific code 
   86522             :       /* */
   86523             : 
   86524             :       /* name Internal Functions
   86525             :           \brief Internal functions ... incomplete-documentation
   86526             : 
   86527             :           These functions have been made public as part of the design, but they are suggested for internal use 
   86528             :           or by particularly knowledgeable users for specialized tools or applications.
   86529             : 
   86530             :           \internal We could not make these private because they are required by user for special purposes. And 
   86531             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   86532             :          
   86533             :        */
   86534             : 
   86535             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   86536             :        // overridden in every class by *generated* implementation
   86537             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   86538             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   86539             :        // MS: 06/28/02 container of names of variables or container indices 
   86540             :        // used used in the traversal to access AST successor nodes
   86541             :        // overridden in every class by *generated* implementation
   86542             :       /*! \brief container of names of variables or container indices used used in the traversal
   86543             :           to access AST successor nodes overridden in every class by *generated* implementation */
   86544             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   86545             : 
   86546             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   86547             :        // than all the vector copies. The implementation for these functions is generated for each class.
   86548             :       /*! \brief return number of children in the traversal successor list */
   86549             :           virtual size_t get_numberOfTraversalSuccessors() override;
   86550             :       /*! \brief index-based access to traversal successors by index number */
   86551             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   86552             :       /*! \brief index-based access to traversal successors by child node */
   86553             :           virtual size_t get_childIndex(SgNode *child) override;
   86554             : 
   86555             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   86556             :        // MS: 08/16/2002 method for generating RTI information
   86557             :       /*! \brief return C++ Runtime-Time-Information */
   86558             :           virtual RTIReturnType roseRTI() override;
   86559             : #endif
   86560             :       /* */
   86561             : 
   86562             : 
   86563             : 
   86564             :       /* name Deprecated Functions
   86565             :           \brief Deprecated functions ... incomplete-documentation
   86566             : 
   86567             :           These functions have been deprecated from use.
   86568             :        */
   86569             :       /* */
   86570             : 
   86571             :       /*! returns a C style string (char*) representing the class name */
   86572             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   86573             : 
   86574             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   86575             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   86576             : #if 0
   86577             :       /*! returns old style Sage II enum values */
   86578             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   86579             :       /*! returns old style Sage II enum values */
   86580             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   86581             : #endif
   86582             :       /* */
   86583             : 
   86584             : 
   86585             : 
   86586             : 
   86587             :      public:
   86588             :       /* name Traversal Support Functions
   86589             :           \brief Traversal support functions ... incomplete-documentation
   86590             : 
   86591             :           These functions have been made public as part of the design, but they are suggested for internal use 
   86592             :           or by particularly knowledgable users for specialized tools or applications.
   86593             :        */
   86594             :       /* */
   86595             : 
   86596             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   86597             :        // (inferior to ROSE traversal mechanism, experimental).
   86598             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   86599             :        */
   86600             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   86601             : 
   86602             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   86603             :       /*! \brief support for the classic visitor pattern done in GoF */
   86604             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   86605             : 
   86606             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   86607             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   86608             :        */
   86609             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   86610             : 
   86611             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   86612             :        */
   86613             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   86614             : 
   86615             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   86616             :        // This traversal helps support internal tools that call static member functions.
   86617             :        // note: this function operates on the memory pools.
   86618             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   86619             :        */
   86620             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   86621             :       /* */
   86622             : 
   86623             : 
   86624             :      public:
   86625             :       /* name Memory Allocation Functions
   86626             :           \brief Memory allocations functions ... incomplete-documentation
   86627             : 
   86628             :           These functions have been made public as part of the design, but they are suggested for internal use 
   86629             :           or by particularly knowledgable users for specialized tools or applications.
   86630             :        */
   86631             :       /* */
   86632             : 
   86633             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   86634             : 
   86635             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   86636             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   86637             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   86638             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   86639             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   86640             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   86641             :           being used with the AST File I/O mechanism.
   86642             :        */
   86643             :           virtual bool isInMemoryPool() override;
   86644             : 
   86645             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   86646             : 
   86647             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   86648             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   86649             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   86650             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   86651             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   86652             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   86653             :           being used with the AST File I/O mechanism.
   86654             :        */
   86655             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   86656             : 
   86657             :       // DQ (4/30/2006): Modified to be a const function.
   86658             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   86659             : 
   86660             :           This functions is part of general support for many possible tools to operate 
   86661             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   86662             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   86663             :           less than the set of pointers used by the AST file I/O. This is part of
   86664             :           work implemented by Andreas, and support tools such as the AST graph generation.
   86665             : 
   86666             :           \warning This function can return unexpected data members and thus the 
   86667             :                    order and the number of elements is unpredicable and subject 
   86668             :                    to change.
   86669             : 
   86670             :           \returns STL vector of pairs of SgNode* and strings
   86671             :        */
   86672             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   86673             : 
   86674             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   86675             : 
   86676             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   86677             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   86678             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   86679             : 
   86680             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   86681             :                    and subject to change.
   86682             :        */
   86683             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   86684             : 
   86685             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   86686             : 
   86687             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   86688             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   86689             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   86690             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   86691             : 
   86692             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   86693             : 
   86694             :           \returns long
   86695             :        */
   86696             :           virtual long getChildIndex( SgNode* childNode ) const override;
   86697             : 
   86698             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   86699             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   86700             :       /* \brief Constructor for use by AST File I/O Mechanism
   86701             : 
   86702             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   86703             :           which obtained via fast binary file I/O from disk.
   86704             :        */
   86705             :        // SgOmpAcqRelClause( SgOmpAcqRelClauseStorageClass& source );
   86706             : 
   86707             : 
   86708             : 
   86709             : 
   86710             : 
   86711             :  // JH (10/24/2005): methods added to support the ast file IO
   86712             :     private:
   86713             : 
   86714             :       /* name AST Memory Allocation Support Functions
   86715             :           \brief Memory allocations support....
   86716             : 
   86717             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   86718             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   86719             :           and support the AST File I/O Mechanism.
   86720             :        */
   86721             :       /* */
   86722             : 
   86723             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   86724             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   86725             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   86726             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   86727             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   86728             :           a correspinding one in the AST_FILE_IO class!
   86729             :        */
   86730             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   86731             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   86732             :       /* \brief Typedef used for low level memory access.
   86733             :        */
   86734             :        // typedef unsigned char* TestType;
   86735             : 
   86736             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   86737             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   86738             :       /* \brief Typedef used to hold memory addresses as values.
   86739             :        */
   86740             :        // typedef unsigned long  AddressType;
   86741             : 
   86742             : 
   86743             : 
   86744             :        // necessary, to have direct access to the p_freepointer and the private methods !
   86745             :       /*! \brief friend class declaration to support AST File I/O */
   86746             :           friend class AST_FILE_IO;
   86747             : 
   86748             :       /*! \brief friend class declaration to support AST File I/O */
   86749             :           friend class SgOmpAcqRelClauseStorageClass;
   86750             : 
   86751             :       /*! \brief friend class declaration to support AST File I/O */
   86752             :           friend class AstSpecificDataManagingClass;
   86753             : 
   86754             :       /*! \brief friend class declaration to support AST File I/O */
   86755             :           friend class AstSpecificDataManagingClassStorageClass;
   86756             :     public:
   86757             :       /*! \brief IR node constructor to support AST File I/O */
   86758             :           SgOmpAcqRelClause( const SgOmpAcqRelClauseStorageClass& source );
   86759             : 
   86760             :  // private: // JJW hack
   86761             :        /*
   86762             :           name AST Memory Allocation Support Variables
   86763             :           Memory allocations support variables 
   86764             : 
   86765             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   86766             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   86767             :           and support the AST File I/O Mechanism.
   86768             :        */
   86769             :       /* */
   86770             : 
   86771             :     public:
   86772             : 
   86773             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   86774             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   86775             :       // virtual SgNode* addRegExpAttribute();
   86776             :       /*! \brief Support for AST matching using regular expression.
   86777             : 
   86778             :           This support is incomplete and the subject of current research to define 
   86779             :           RegEx trees to support inexact matching.
   86780             :        */
   86781             :           SgOmpAcqRelClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   86782             : 
   86783             : // *** COMMON CODE SECTION ENDS HERE ***
   86784             : 
   86785             : 
   86786             : // End of memberFunctionString
   86787             : // Start of memberFunctionString
   86788             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   86789             : 
   86790             :      // the generated cast function
   86791             :      // friend ROSE_DLL_API SgOmpAcqRelClause* isSgOmpAcqRelClause ( SgNode* s );
   86792             : 
   86793             :           typedef SgOmpClause base_node_type;
   86794             : 
   86795             : 
   86796             : // End of memberFunctionString
   86797             : 
   86798             : 
   86799             :      public: 
   86800             :          virtual ~SgOmpAcqRelClause();
   86801             : 
   86802             : 
   86803             :      public: 
   86804             :          SgOmpAcqRelClause(Sg_File_Info* startOfConstruct ); 
   86805             :          SgOmpAcqRelClause(); 
   86806             : 
   86807             :     protected:
   86808             : 
   86809             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAcqRelClause>;
   86810             : 
   86811             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86812             : 
   86813             : 
   86814             :    };
   86815             : #endif
   86816             : 
   86817             : // postdeclarations for SgOmpAcqRelClause
   86818             : 
   86819             : /* #line 86820 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86820             : 
   86821             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   86822             : 
   86823             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86824             : 
   86825             : 
   86826             : /* #line 86827 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86827             : 
   86828             : 
   86829             : 
   86830             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86831             : 
   86832             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   86833             : //      This code is automatically generated for each 
   86834             : //      terminal and non-terminal within the defined 
   86835             : //      grammar.  There is a simple way to change the 
   86836             : //      code to fix bugs etc.  See the ROSE README file
   86837             : //      for directions.
   86838             : 
   86839             : // tps: (02/22/2010): Adding DLL export requirements
   86840             : #include "rosedll.h"
   86841             : 
   86842             : // predeclarations for SgOmpReleaseClause
   86843             : 
   86844             : /* #line 86845 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86845             : 
   86846             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   86847             : 
   86848             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   86849             : 
   86850             : #if 1
   86851             : // Class Definition for SgOmpReleaseClause
   86852             : class ROSE_DLL_API SgOmpReleaseClause  : public SgOmpClause
   86853             :    {
   86854             :      public:
   86855             : 
   86856             : 
   86857             : /* #line 86858 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   86858             : 
   86859             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   86860             : // Start of memberFunctionString
   86861             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   86862             : 
   86863             : // *** COMMON CODE SECTION BEGINS HERE ***
   86864             : 
   86865             :     public:
   86866             : 
   86867             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   86868             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   86869             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   86870             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   86871             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   86872             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   86873             : 
   86874             :       /*! \brief returns a string representing the class name */
   86875             :           virtual std::string class_name() const override;
   86876             : 
   86877             :       /*! \brief returns new style SageIII enum values */
   86878             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   86879             : 
   86880             :       /*! \brief static variant value */
   86881             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   86882             :        // static const VariantT static_variant = V_SgOmpReleaseClause;
   86883             :           enum { static_variant = V_SgOmpReleaseClause };
   86884             : 
   86885             :        /* the generated cast function */
   86886             :       /*! \brief Casts pointer from base class to derived class */
   86887             :           ROSE_DLL_API friend       SgOmpReleaseClause* isSgOmpReleaseClause(       SgNode * s );
   86888             : 
   86889             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   86890             :           ROSE_DLL_API friend const SgOmpReleaseClause* isSgOmpReleaseClause( const SgNode * s );
   86891             : 
   86892             :      // ******************************************
   86893             :      // * Memory Pool / New / Delete
   86894             :      // ******************************************
   86895             : 
   86896             :      public:
   86897             :           /// \private
   86898             :           static const unsigned pool_size; //
   86899             :           /// \private
   86900             :           static std::vector<unsigned char *> pools; //
   86901             :           /// \private
   86902             :           static SgOmpReleaseClause * next_node; // 
   86903             : 
   86904             :           /// \private
   86905             :           static unsigned long initializeStorageClassArray(SgOmpReleaseClauseStorageClass *); //
   86906             : 
   86907             :           /// \private
   86908             :           static void clearMemoryPool(); //
   86909             :           static void deleteMemoryPool(); //
   86910             : 
   86911             :           /// \private
   86912             :           static void extendMemoryPoolForFileIO(); //
   86913             : 
   86914             :           /// \private
   86915             :           static SgOmpReleaseClause * getPointerFromGlobalIndex(unsigned long); //
   86916             :           /// \private
   86917             :           static SgOmpReleaseClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   86918             : 
   86919             :           /// \private
   86920             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   86921             :           /// \private
   86922             :           static void resetValidFreepointers(); //
   86923             :           /// \private
   86924             :           static unsigned long getNumberOfLastValidPointer(); //
   86925             : 
   86926             : 
   86927             : #if defined(INLINE_FUNCTIONS)
   86928             :       /*! \brief returns pointer to newly allocated IR node */
   86929             :           inline void *operator new (size_t size);
   86930             : #else
   86931             :       /*! \brief returns pointer to newly allocated IR node */
   86932             :           void *operator new (size_t size);
   86933             : #endif
   86934             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   86935             :           void operator delete (void* pointer, size_t size);
   86936             : 
   86937             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   86938           0 :           void operator delete (void* pointer)
   86939             :              {
   86940             :             // This is the generated delete operator...
   86941           0 :                SgOmpReleaseClause::operator delete (pointer,sizeof(SgOmpReleaseClause));
   86942             :              }
   86943             : 
   86944             :       /*! \brief Returns the total number of IR nodes of this type */
   86945             :           static size_t numberOfNodes();
   86946             : 
   86947             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   86948             :           static size_t memoryUsage();
   86949             : 
   86950             :       // End of scope which started in IR nodes specific code 
   86951             :       /* */
   86952             : 
   86953             :       /* name Internal Functions
   86954             :           \brief Internal functions ... incomplete-documentation
   86955             : 
   86956             :           These functions have been made public as part of the design, but they are suggested for internal use 
   86957             :           or by particularly knowledgeable users for specialized tools or applications.
   86958             : 
   86959             :           \internal We could not make these private because they are required by user for special purposes. And 
   86960             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   86961             :          
   86962             :        */
   86963             : 
   86964             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   86965             :        // overridden in every class by *generated* implementation
   86966             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   86967             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   86968             :        // MS: 06/28/02 container of names of variables or container indices 
   86969             :        // used used in the traversal to access AST successor nodes
   86970             :        // overridden in every class by *generated* implementation
   86971             :       /*! \brief container of names of variables or container indices used used in the traversal
   86972             :           to access AST successor nodes overridden in every class by *generated* implementation */
   86973             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   86974             : 
   86975             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   86976             :        // than all the vector copies. The implementation for these functions is generated for each class.
   86977             :       /*! \brief return number of children in the traversal successor list */
   86978             :           virtual size_t get_numberOfTraversalSuccessors() override;
   86979             :       /*! \brief index-based access to traversal successors by index number */
   86980             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   86981             :       /*! \brief index-based access to traversal successors by child node */
   86982             :           virtual size_t get_childIndex(SgNode *child) override;
   86983             : 
   86984             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   86985             :        // MS: 08/16/2002 method for generating RTI information
   86986             :       /*! \brief return C++ Runtime-Time-Information */
   86987             :           virtual RTIReturnType roseRTI() override;
   86988             : #endif
   86989             :       /* */
   86990             : 
   86991             : 
   86992             : 
   86993             :       /* name Deprecated Functions
   86994             :           \brief Deprecated functions ... incomplete-documentation
   86995             : 
   86996             :           These functions have been deprecated from use.
   86997             :        */
   86998             :       /* */
   86999             : 
   87000             :       /*! returns a C style string (char*) representing the class name */
   87001             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   87002             : 
   87003             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   87004             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   87005             : #if 0
   87006             :       /*! returns old style Sage II enum values */
   87007             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   87008             :       /*! returns old style Sage II enum values */
   87009             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   87010             : #endif
   87011             :       /* */
   87012             : 
   87013             : 
   87014             : 
   87015             : 
   87016             :      public:
   87017             :       /* name Traversal Support Functions
   87018             :           \brief Traversal support functions ... incomplete-documentation
   87019             : 
   87020             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87021             :           or by particularly knowledgable users for specialized tools or applications.
   87022             :        */
   87023             :       /* */
   87024             : 
   87025             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   87026             :        // (inferior to ROSE traversal mechanism, experimental).
   87027             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   87028             :        */
   87029             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   87030             : 
   87031             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   87032             :       /*! \brief support for the classic visitor pattern done in GoF */
   87033             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   87034             : 
   87035             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   87036             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   87037             :        */
   87038             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   87039             : 
   87040             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   87041             :        */
   87042             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   87043             : 
   87044             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   87045             :        // This traversal helps support internal tools that call static member functions.
   87046             :        // note: this function operates on the memory pools.
   87047             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   87048             :        */
   87049             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   87050             :       /* */
   87051             : 
   87052             : 
   87053             :      public:
   87054             :       /* name Memory Allocation Functions
   87055             :           \brief Memory allocations functions ... incomplete-documentation
   87056             : 
   87057             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87058             :           or by particularly knowledgable users for specialized tools or applications.
   87059             :        */
   87060             :       /* */
   87061             : 
   87062             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   87063             : 
   87064             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   87065             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   87066             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   87067             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   87068             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   87069             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   87070             :           being used with the AST File I/O mechanism.
   87071             :        */
   87072             :           virtual bool isInMemoryPool() override;
   87073             : 
   87074             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   87075             : 
   87076             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   87077             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   87078             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   87079             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   87080             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   87081             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   87082             :           being used with the AST File I/O mechanism.
   87083             :        */
   87084             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   87085             : 
   87086             :       // DQ (4/30/2006): Modified to be a const function.
   87087             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   87088             : 
   87089             :           This functions is part of general support for many possible tools to operate 
   87090             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   87091             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   87092             :           less than the set of pointers used by the AST file I/O. This is part of
   87093             :           work implemented by Andreas, and support tools such as the AST graph generation.
   87094             : 
   87095             :           \warning This function can return unexpected data members and thus the 
   87096             :                    order and the number of elements is unpredicable and subject 
   87097             :                    to change.
   87098             : 
   87099             :           \returns STL vector of pairs of SgNode* and strings
   87100             :        */
   87101             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   87102             : 
   87103             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   87104             : 
   87105             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   87106             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   87107             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   87108             : 
   87109             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   87110             :                    and subject to change.
   87111             :        */
   87112             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   87113             : 
   87114             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   87115             : 
   87116             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   87117             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   87118             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   87119             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   87120             : 
   87121             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   87122             : 
   87123             :           \returns long
   87124             :        */
   87125             :           virtual long getChildIndex( SgNode* childNode ) const override;
   87126             : 
   87127             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   87128             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   87129             :       /* \brief Constructor for use by AST File I/O Mechanism
   87130             : 
   87131             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   87132             :           which obtained via fast binary file I/O from disk.
   87133             :        */
   87134             :        // SgOmpReleaseClause( SgOmpReleaseClauseStorageClass& source );
   87135             : 
   87136             : 
   87137             : 
   87138             : 
   87139             : 
   87140             :  // JH (10/24/2005): methods added to support the ast file IO
   87141             :     private:
   87142             : 
   87143             :       /* name AST Memory Allocation Support Functions
   87144             :           \brief Memory allocations support....
   87145             : 
   87146             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   87147             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   87148             :           and support the AST File I/O Mechanism.
   87149             :        */
   87150             :       /* */
   87151             : 
   87152             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   87153             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   87154             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   87155             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   87156             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   87157             :           a correspinding one in the AST_FILE_IO class!
   87158             :        */
   87159             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   87160             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   87161             :       /* \brief Typedef used for low level memory access.
   87162             :        */
   87163             :        // typedef unsigned char* TestType;
   87164             : 
   87165             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   87166             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   87167             :       /* \brief Typedef used to hold memory addresses as values.
   87168             :        */
   87169             :        // typedef unsigned long  AddressType;
   87170             : 
   87171             : 
   87172             : 
   87173             :        // necessary, to have direct access to the p_freepointer and the private methods !
   87174             :       /*! \brief friend class declaration to support AST File I/O */
   87175             :           friend class AST_FILE_IO;
   87176             : 
   87177             :       /*! \brief friend class declaration to support AST File I/O */
   87178             :           friend class SgOmpReleaseClauseStorageClass;
   87179             : 
   87180             :       /*! \brief friend class declaration to support AST File I/O */
   87181             :           friend class AstSpecificDataManagingClass;
   87182             : 
   87183             :       /*! \brief friend class declaration to support AST File I/O */
   87184             :           friend class AstSpecificDataManagingClassStorageClass;
   87185             :     public:
   87186             :       /*! \brief IR node constructor to support AST File I/O */
   87187             :           SgOmpReleaseClause( const SgOmpReleaseClauseStorageClass& source );
   87188             : 
   87189             :  // private: // JJW hack
   87190             :        /*
   87191             :           name AST Memory Allocation Support Variables
   87192             :           Memory allocations support variables 
   87193             : 
   87194             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   87195             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   87196             :           and support the AST File I/O Mechanism.
   87197             :        */
   87198             :       /* */
   87199             : 
   87200             :     public:
   87201             : 
   87202             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   87203             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   87204             :       // virtual SgNode* addRegExpAttribute();
   87205             :       /*! \brief Support for AST matching using regular expression.
   87206             : 
   87207             :           This support is incomplete and the subject of current research to define 
   87208             :           RegEx trees to support inexact matching.
   87209             :        */
   87210             :           SgOmpReleaseClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   87211             : 
   87212             : // *** COMMON CODE SECTION ENDS HERE ***
   87213             : 
   87214             : 
   87215             : // End of memberFunctionString
   87216             : // Start of memberFunctionString
   87217             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   87218             : 
   87219             :      // the generated cast function
   87220             :      // friend ROSE_DLL_API SgOmpReleaseClause* isSgOmpReleaseClause ( SgNode* s );
   87221             : 
   87222             :           typedef SgOmpClause base_node_type;
   87223             : 
   87224             : 
   87225             : // End of memberFunctionString
   87226             : 
   87227             : 
   87228             :      public: 
   87229             :          virtual ~SgOmpReleaseClause();
   87230             : 
   87231             : 
   87232             :      public: 
   87233             :          SgOmpReleaseClause(Sg_File_Info* startOfConstruct ); 
   87234             :          SgOmpReleaseClause(); 
   87235             : 
   87236             :     protected:
   87237             : 
   87238             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpReleaseClause>;
   87239             : 
   87240             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87241             : 
   87242             : 
   87243             :    };
   87244             : #endif
   87245             : 
   87246             : // postdeclarations for SgOmpReleaseClause
   87247             : 
   87248             : /* #line 87249 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87249             : 
   87250             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   87251             : 
   87252             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87253             : 
   87254             : 
   87255             : /* #line 87256 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87256             : 
   87257             : 
   87258             : 
   87259             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87260             : 
   87261             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   87262             : //      This code is automatically generated for each 
   87263             : //      terminal and non-terminal within the defined 
   87264             : //      grammar.  There is a simple way to change the 
   87265             : //      code to fix bugs etc.  See the ROSE README file
   87266             : //      for directions.
   87267             : 
   87268             : // tps: (02/22/2010): Adding DLL export requirements
   87269             : #include "rosedll.h"
   87270             : 
   87271             : // predeclarations for SgOmpAcquireClause
   87272             : 
   87273             : /* #line 87274 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87274             : 
   87275             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   87276             : 
   87277             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87278             : 
   87279             : #if 1
   87280             : // Class Definition for SgOmpAcquireClause
   87281             : class ROSE_DLL_API SgOmpAcquireClause  : public SgOmpClause
   87282             :    {
   87283             :      public:
   87284             : 
   87285             : 
   87286             : /* #line 87287 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87287             : 
   87288             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   87289             : // Start of memberFunctionString
   87290             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   87291             : 
   87292             : // *** COMMON CODE SECTION BEGINS HERE ***
   87293             : 
   87294             :     public:
   87295             : 
   87296             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   87297             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   87298             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   87299             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   87300             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   87301             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   87302             : 
   87303             :       /*! \brief returns a string representing the class name */
   87304             :           virtual std::string class_name() const override;
   87305             : 
   87306             :       /*! \brief returns new style SageIII enum values */
   87307             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   87308             : 
   87309             :       /*! \brief static variant value */
   87310             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   87311             :        // static const VariantT static_variant = V_SgOmpAcquireClause;
   87312             :           enum { static_variant = V_SgOmpAcquireClause };
   87313             : 
   87314             :        /* the generated cast function */
   87315             :       /*! \brief Casts pointer from base class to derived class */
   87316             :           ROSE_DLL_API friend       SgOmpAcquireClause* isSgOmpAcquireClause(       SgNode * s );
   87317             : 
   87318             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   87319             :           ROSE_DLL_API friend const SgOmpAcquireClause* isSgOmpAcquireClause( const SgNode * s );
   87320             : 
   87321             :      // ******************************************
   87322             :      // * Memory Pool / New / Delete
   87323             :      // ******************************************
   87324             : 
   87325             :      public:
   87326             :           /// \private
   87327             :           static const unsigned pool_size; //
   87328             :           /// \private
   87329             :           static std::vector<unsigned char *> pools; //
   87330             :           /// \private
   87331             :           static SgOmpAcquireClause * next_node; // 
   87332             : 
   87333             :           /// \private
   87334             :           static unsigned long initializeStorageClassArray(SgOmpAcquireClauseStorageClass *); //
   87335             : 
   87336             :           /// \private
   87337             :           static void clearMemoryPool(); //
   87338             :           static void deleteMemoryPool(); //
   87339             : 
   87340             :           /// \private
   87341             :           static void extendMemoryPoolForFileIO(); //
   87342             : 
   87343             :           /// \private
   87344             :           static SgOmpAcquireClause * getPointerFromGlobalIndex(unsigned long); //
   87345             :           /// \private
   87346             :           static SgOmpAcquireClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   87347             : 
   87348             :           /// \private
   87349             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   87350             :           /// \private
   87351             :           static void resetValidFreepointers(); //
   87352             :           /// \private
   87353             :           static unsigned long getNumberOfLastValidPointer(); //
   87354             : 
   87355             : 
   87356             : #if defined(INLINE_FUNCTIONS)
   87357             :       /*! \brief returns pointer to newly allocated IR node */
   87358             :           inline void *operator new (size_t size);
   87359             : #else
   87360             :       /*! \brief returns pointer to newly allocated IR node */
   87361             :           void *operator new (size_t size);
   87362             : #endif
   87363             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   87364             :           void operator delete (void* pointer, size_t size);
   87365             : 
   87366             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   87367           0 :           void operator delete (void* pointer)
   87368             :              {
   87369             :             // This is the generated delete operator...
   87370           0 :                SgOmpAcquireClause::operator delete (pointer,sizeof(SgOmpAcquireClause));
   87371             :              }
   87372             : 
   87373             :       /*! \brief Returns the total number of IR nodes of this type */
   87374             :           static size_t numberOfNodes();
   87375             : 
   87376             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   87377             :           static size_t memoryUsage();
   87378             : 
   87379             :       // End of scope which started in IR nodes specific code 
   87380             :       /* */
   87381             : 
   87382             :       /* name Internal Functions
   87383             :           \brief Internal functions ... incomplete-documentation
   87384             : 
   87385             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87386             :           or by particularly knowledgeable users for specialized tools or applications.
   87387             : 
   87388             :           \internal We could not make these private because they are required by user for special purposes. And 
   87389             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   87390             :          
   87391             :        */
   87392             : 
   87393             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   87394             :        // overridden in every class by *generated* implementation
   87395             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   87396             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   87397             :        // MS: 06/28/02 container of names of variables or container indices 
   87398             :        // used used in the traversal to access AST successor nodes
   87399             :        // overridden in every class by *generated* implementation
   87400             :       /*! \brief container of names of variables or container indices used used in the traversal
   87401             :           to access AST successor nodes overridden in every class by *generated* implementation */
   87402             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   87403             : 
   87404             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   87405             :        // than all the vector copies. The implementation for these functions is generated for each class.
   87406             :       /*! \brief return number of children in the traversal successor list */
   87407             :           virtual size_t get_numberOfTraversalSuccessors() override;
   87408             :       /*! \brief index-based access to traversal successors by index number */
   87409             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   87410             :       /*! \brief index-based access to traversal successors by child node */
   87411             :           virtual size_t get_childIndex(SgNode *child) override;
   87412             : 
   87413             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   87414             :        // MS: 08/16/2002 method for generating RTI information
   87415             :       /*! \brief return C++ Runtime-Time-Information */
   87416             :           virtual RTIReturnType roseRTI() override;
   87417             : #endif
   87418             :       /* */
   87419             : 
   87420             : 
   87421             : 
   87422             :       /* name Deprecated Functions
   87423             :           \brief Deprecated functions ... incomplete-documentation
   87424             : 
   87425             :           These functions have been deprecated from use.
   87426             :        */
   87427             :       /* */
   87428             : 
   87429             :       /*! returns a C style string (char*) representing the class name */
   87430             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   87431             : 
   87432             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   87433             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   87434             : #if 0
   87435             :       /*! returns old style Sage II enum values */
   87436             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   87437             :       /*! returns old style Sage II enum values */
   87438             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   87439             : #endif
   87440             :       /* */
   87441             : 
   87442             : 
   87443             : 
   87444             : 
   87445             :      public:
   87446             :       /* name Traversal Support Functions
   87447             :           \brief Traversal support functions ... incomplete-documentation
   87448             : 
   87449             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87450             :           or by particularly knowledgable users for specialized tools or applications.
   87451             :        */
   87452             :       /* */
   87453             : 
   87454             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   87455             :        // (inferior to ROSE traversal mechanism, experimental).
   87456             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   87457             :        */
   87458             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   87459             : 
   87460             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   87461             :       /*! \brief support for the classic visitor pattern done in GoF */
   87462             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   87463             : 
   87464             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   87465             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   87466             :        */
   87467             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   87468             : 
   87469             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   87470             :        */
   87471             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   87472             : 
   87473             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   87474             :        // This traversal helps support internal tools that call static member functions.
   87475             :        // note: this function operates on the memory pools.
   87476             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   87477             :        */
   87478             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   87479             :       /* */
   87480             : 
   87481             : 
   87482             :      public:
   87483             :       /* name Memory Allocation Functions
   87484             :           \brief Memory allocations functions ... incomplete-documentation
   87485             : 
   87486             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87487             :           or by particularly knowledgable users for specialized tools or applications.
   87488             :        */
   87489             :       /* */
   87490             : 
   87491             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   87492             : 
   87493             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   87494             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   87495             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   87496             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   87497             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   87498             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   87499             :           being used with the AST File I/O mechanism.
   87500             :        */
   87501             :           virtual bool isInMemoryPool() override;
   87502             : 
   87503             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   87504             : 
   87505             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   87506             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   87507             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   87508             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   87509             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   87510             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   87511             :           being used with the AST File I/O mechanism.
   87512             :        */
   87513             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   87514             : 
   87515             :       // DQ (4/30/2006): Modified to be a const function.
   87516             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   87517             : 
   87518             :           This functions is part of general support for many possible tools to operate 
   87519             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   87520             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   87521             :           less than the set of pointers used by the AST file I/O. This is part of
   87522             :           work implemented by Andreas, and support tools such as the AST graph generation.
   87523             : 
   87524             :           \warning This function can return unexpected data members and thus the 
   87525             :                    order and the number of elements is unpredicable and subject 
   87526             :                    to change.
   87527             : 
   87528             :           \returns STL vector of pairs of SgNode* and strings
   87529             :        */
   87530             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   87531             : 
   87532             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   87533             : 
   87534             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   87535             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   87536             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   87537             : 
   87538             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   87539             :                    and subject to change.
   87540             :        */
   87541             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   87542             : 
   87543             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   87544             : 
   87545             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   87546             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   87547             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   87548             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   87549             : 
   87550             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   87551             : 
   87552             :           \returns long
   87553             :        */
   87554             :           virtual long getChildIndex( SgNode* childNode ) const override;
   87555             : 
   87556             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   87557             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   87558             :       /* \brief Constructor for use by AST File I/O Mechanism
   87559             : 
   87560             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   87561             :           which obtained via fast binary file I/O from disk.
   87562             :        */
   87563             :        // SgOmpAcquireClause( SgOmpAcquireClauseStorageClass& source );
   87564             : 
   87565             : 
   87566             : 
   87567             : 
   87568             : 
   87569             :  // JH (10/24/2005): methods added to support the ast file IO
   87570             :     private:
   87571             : 
   87572             :       /* name AST Memory Allocation Support Functions
   87573             :           \brief Memory allocations support....
   87574             : 
   87575             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   87576             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   87577             :           and support the AST File I/O Mechanism.
   87578             :        */
   87579             :       /* */
   87580             : 
   87581             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   87582             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   87583             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   87584             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   87585             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   87586             :           a correspinding one in the AST_FILE_IO class!
   87587             :        */
   87588             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   87589             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   87590             :       /* \brief Typedef used for low level memory access.
   87591             :        */
   87592             :        // typedef unsigned char* TestType;
   87593             : 
   87594             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   87595             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   87596             :       /* \brief Typedef used to hold memory addresses as values.
   87597             :        */
   87598             :        // typedef unsigned long  AddressType;
   87599             : 
   87600             : 
   87601             : 
   87602             :        // necessary, to have direct access to the p_freepointer and the private methods !
   87603             :       /*! \brief friend class declaration to support AST File I/O */
   87604             :           friend class AST_FILE_IO;
   87605             : 
   87606             :       /*! \brief friend class declaration to support AST File I/O */
   87607             :           friend class SgOmpAcquireClauseStorageClass;
   87608             : 
   87609             :       /*! \brief friend class declaration to support AST File I/O */
   87610             :           friend class AstSpecificDataManagingClass;
   87611             : 
   87612             :       /*! \brief friend class declaration to support AST File I/O */
   87613             :           friend class AstSpecificDataManagingClassStorageClass;
   87614             :     public:
   87615             :       /*! \brief IR node constructor to support AST File I/O */
   87616             :           SgOmpAcquireClause( const SgOmpAcquireClauseStorageClass& source );
   87617             : 
   87618             :  // private: // JJW hack
   87619             :        /*
   87620             :           name AST Memory Allocation Support Variables
   87621             :           Memory allocations support variables 
   87622             : 
   87623             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   87624             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   87625             :           and support the AST File I/O Mechanism.
   87626             :        */
   87627             :       /* */
   87628             : 
   87629             :     public:
   87630             : 
   87631             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   87632             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   87633             :       // virtual SgNode* addRegExpAttribute();
   87634             :       /*! \brief Support for AST matching using regular expression.
   87635             : 
   87636             :           This support is incomplete and the subject of current research to define 
   87637             :           RegEx trees to support inexact matching.
   87638             :        */
   87639             :           SgOmpAcquireClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   87640             : 
   87641             : // *** COMMON CODE SECTION ENDS HERE ***
   87642             : 
   87643             : 
   87644             : // End of memberFunctionString
   87645             : // Start of memberFunctionString
   87646             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   87647             : 
   87648             :      // the generated cast function
   87649             :      // friend ROSE_DLL_API SgOmpAcquireClause* isSgOmpAcquireClause ( SgNode* s );
   87650             : 
   87651             :           typedef SgOmpClause base_node_type;
   87652             : 
   87653             : 
   87654             : // End of memberFunctionString
   87655             : 
   87656             : 
   87657             :      public: 
   87658             :          virtual ~SgOmpAcquireClause();
   87659             : 
   87660             : 
   87661             :      public: 
   87662             :          SgOmpAcquireClause(Sg_File_Info* startOfConstruct ); 
   87663             :          SgOmpAcquireClause(); 
   87664             : 
   87665             :     protected:
   87666             : 
   87667             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAcquireClause>;
   87668             : 
   87669             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87670             : 
   87671             : 
   87672             :    };
   87673             : #endif
   87674             : 
   87675             : // postdeclarations for SgOmpAcquireClause
   87676             : 
   87677             : /* #line 87678 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87678             : 
   87679             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   87680             : 
   87681             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87682             : 
   87683             : 
   87684             : /* #line 87685 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87685             : 
   87686             : 
   87687             : 
   87688             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87689             : 
   87690             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   87691             : //      This code is automatically generated for each 
   87692             : //      terminal and non-terminal within the defined 
   87693             : //      grammar.  There is a simple way to change the 
   87694             : //      code to fix bugs etc.  See the ROSE README file
   87695             : //      for directions.
   87696             : 
   87697             : // tps: (02/22/2010): Adding DLL export requirements
   87698             : #include "rosedll.h"
   87699             : 
   87700             : // predeclarations for SgOmpRelaxedClause
   87701             : 
   87702             : /* #line 87703 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87703             : 
   87704             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   87705             : 
   87706             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   87707             : 
   87708             : #if 1
   87709             : // Class Definition for SgOmpRelaxedClause
   87710             : class ROSE_DLL_API SgOmpRelaxedClause  : public SgOmpClause
   87711             :    {
   87712             :      public:
   87713             : 
   87714             : 
   87715             : /* #line 87716 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   87716             : 
   87717             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   87718             : // Start of memberFunctionString
   87719             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   87720             : 
   87721             : // *** COMMON CODE SECTION BEGINS HERE ***
   87722             : 
   87723             :     public:
   87724             : 
   87725             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   87726             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   87727             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   87728             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   87729             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   87730             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   87731             : 
   87732             :       /*! \brief returns a string representing the class name */
   87733             :           virtual std::string class_name() const override;
   87734             : 
   87735             :       /*! \brief returns new style SageIII enum values */
   87736             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   87737             : 
   87738             :       /*! \brief static variant value */
   87739             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   87740             :        // static const VariantT static_variant = V_SgOmpRelaxedClause;
   87741             :           enum { static_variant = V_SgOmpRelaxedClause };
   87742             : 
   87743             :        /* the generated cast function */
   87744             :       /*! \brief Casts pointer from base class to derived class */
   87745             :           ROSE_DLL_API friend       SgOmpRelaxedClause* isSgOmpRelaxedClause(       SgNode * s );
   87746             : 
   87747             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   87748             :           ROSE_DLL_API friend const SgOmpRelaxedClause* isSgOmpRelaxedClause( const SgNode * s );
   87749             : 
   87750             :      // ******************************************
   87751             :      // * Memory Pool / New / Delete
   87752             :      // ******************************************
   87753             : 
   87754             :      public:
   87755             :           /// \private
   87756             :           static const unsigned pool_size; //
   87757             :           /// \private
   87758             :           static std::vector<unsigned char *> pools; //
   87759             :           /// \private
   87760             :           static SgOmpRelaxedClause * next_node; // 
   87761             : 
   87762             :           /// \private
   87763             :           static unsigned long initializeStorageClassArray(SgOmpRelaxedClauseStorageClass *); //
   87764             : 
   87765             :           /// \private
   87766             :           static void clearMemoryPool(); //
   87767             :           static void deleteMemoryPool(); //
   87768             : 
   87769             :           /// \private
   87770             :           static void extendMemoryPoolForFileIO(); //
   87771             : 
   87772             :           /// \private
   87773             :           static SgOmpRelaxedClause * getPointerFromGlobalIndex(unsigned long); //
   87774             :           /// \private
   87775             :           static SgOmpRelaxedClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   87776             : 
   87777             :           /// \private
   87778             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   87779             :           /// \private
   87780             :           static void resetValidFreepointers(); //
   87781             :           /// \private
   87782             :           static unsigned long getNumberOfLastValidPointer(); //
   87783             : 
   87784             : 
   87785             : #if defined(INLINE_FUNCTIONS)
   87786             :       /*! \brief returns pointer to newly allocated IR node */
   87787             :           inline void *operator new (size_t size);
   87788             : #else
   87789             :       /*! \brief returns pointer to newly allocated IR node */
   87790             :           void *operator new (size_t size);
   87791             : #endif
   87792             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   87793             :           void operator delete (void* pointer, size_t size);
   87794             : 
   87795             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   87796           0 :           void operator delete (void* pointer)
   87797             :              {
   87798             :             // This is the generated delete operator...
   87799           0 :                SgOmpRelaxedClause::operator delete (pointer,sizeof(SgOmpRelaxedClause));
   87800             :              }
   87801             : 
   87802             :       /*! \brief Returns the total number of IR nodes of this type */
   87803             :           static size_t numberOfNodes();
   87804             : 
   87805             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   87806             :           static size_t memoryUsage();
   87807             : 
   87808             :       // End of scope which started in IR nodes specific code 
   87809             :       /* */
   87810             : 
   87811             :       /* name Internal Functions
   87812             :           \brief Internal functions ... incomplete-documentation
   87813             : 
   87814             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87815             :           or by particularly knowledgeable users for specialized tools or applications.
   87816             : 
   87817             :           \internal We could not make these private because they are required by user for special purposes. And 
   87818             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   87819             :          
   87820             :        */
   87821             : 
   87822             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   87823             :        // overridden in every class by *generated* implementation
   87824             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   87825             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   87826             :        // MS: 06/28/02 container of names of variables or container indices 
   87827             :        // used used in the traversal to access AST successor nodes
   87828             :        // overridden in every class by *generated* implementation
   87829             :       /*! \brief container of names of variables or container indices used used in the traversal
   87830             :           to access AST successor nodes overridden in every class by *generated* implementation */
   87831             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   87832             : 
   87833             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   87834             :        // than all the vector copies. The implementation for these functions is generated for each class.
   87835             :       /*! \brief return number of children in the traversal successor list */
   87836             :           virtual size_t get_numberOfTraversalSuccessors() override;
   87837             :       /*! \brief index-based access to traversal successors by index number */
   87838             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   87839             :       /*! \brief index-based access to traversal successors by child node */
   87840             :           virtual size_t get_childIndex(SgNode *child) override;
   87841             : 
   87842             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   87843             :        // MS: 08/16/2002 method for generating RTI information
   87844             :       /*! \brief return C++ Runtime-Time-Information */
   87845             :           virtual RTIReturnType roseRTI() override;
   87846             : #endif
   87847             :       /* */
   87848             : 
   87849             : 
   87850             : 
   87851             :       /* name Deprecated Functions
   87852             :           \brief Deprecated functions ... incomplete-documentation
   87853             : 
   87854             :           These functions have been deprecated from use.
   87855             :        */
   87856             :       /* */
   87857             : 
   87858             :       /*! returns a C style string (char*) representing the class name */
   87859             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   87860             : 
   87861             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   87862             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   87863             : #if 0
   87864             :       /*! returns old style Sage II enum values */
   87865             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   87866             :       /*! returns old style Sage II enum values */
   87867             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   87868             : #endif
   87869             :       /* */
   87870             : 
   87871             : 
   87872             : 
   87873             : 
   87874             :      public:
   87875             :       /* name Traversal Support Functions
   87876             :           \brief Traversal support functions ... incomplete-documentation
   87877             : 
   87878             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87879             :           or by particularly knowledgable users for specialized tools or applications.
   87880             :        */
   87881             :       /* */
   87882             : 
   87883             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   87884             :        // (inferior to ROSE traversal mechanism, experimental).
   87885             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   87886             :        */
   87887             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   87888             : 
   87889             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   87890             :       /*! \brief support for the classic visitor pattern done in GoF */
   87891             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   87892             : 
   87893             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   87894             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   87895             :        */
   87896             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   87897             : 
   87898             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   87899             :        */
   87900             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   87901             : 
   87902             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   87903             :        // This traversal helps support internal tools that call static member functions.
   87904             :        // note: this function operates on the memory pools.
   87905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   87906             :        */
   87907             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   87908             :       /* */
   87909             : 
   87910             : 
   87911             :      public:
   87912             :       /* name Memory Allocation Functions
   87913             :           \brief Memory allocations functions ... incomplete-documentation
   87914             : 
   87915             :           These functions have been made public as part of the design, but they are suggested for internal use 
   87916             :           or by particularly knowledgable users for specialized tools or applications.
   87917             :        */
   87918             :       /* */
   87919             : 
   87920             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   87921             : 
   87922             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   87923             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   87924             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   87925             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   87926             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   87927             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   87928             :           being used with the AST File I/O mechanism.
   87929             :        */
   87930             :           virtual bool isInMemoryPool() override;
   87931             : 
   87932             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   87933             : 
   87934             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   87935             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   87936             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   87937             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   87938             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   87939             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   87940             :           being used with the AST File I/O mechanism.
   87941             :        */
   87942             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   87943             : 
   87944             :       // DQ (4/30/2006): Modified to be a const function.
   87945             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   87946             : 
   87947             :           This functions is part of general support for many possible tools to operate 
   87948             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   87949             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   87950             :           less than the set of pointers used by the AST file I/O. This is part of
   87951             :           work implemented by Andreas, and support tools such as the AST graph generation.
   87952             : 
   87953             :           \warning This function can return unexpected data members and thus the 
   87954             :                    order and the number of elements is unpredicable and subject 
   87955             :                    to change.
   87956             : 
   87957             :           \returns STL vector of pairs of SgNode* and strings
   87958             :        */
   87959             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   87960             : 
   87961             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   87962             : 
   87963             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   87964             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   87965             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   87966             : 
   87967             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   87968             :                    and subject to change.
   87969             :        */
   87970             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   87971             : 
   87972             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   87973             : 
   87974             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   87975             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   87976             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   87977             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   87978             : 
   87979             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   87980             : 
   87981             :           \returns long
   87982             :        */
   87983             :           virtual long getChildIndex( SgNode* childNode ) const override;
   87984             : 
   87985             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   87986             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   87987             :       /* \brief Constructor for use by AST File I/O Mechanism
   87988             : 
   87989             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   87990             :           which obtained via fast binary file I/O from disk.
   87991             :        */
   87992             :        // SgOmpRelaxedClause( SgOmpRelaxedClauseStorageClass& source );
   87993             : 
   87994             : 
   87995             : 
   87996             : 
   87997             : 
   87998             :  // JH (10/24/2005): methods added to support the ast file IO
   87999             :     private:
   88000             : 
   88001             :       /* name AST Memory Allocation Support Functions
   88002             :           \brief Memory allocations support....
   88003             : 
   88004             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   88005             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   88006             :           and support the AST File I/O Mechanism.
   88007             :        */
   88008             :       /* */
   88009             : 
   88010             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   88011             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   88012             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   88013             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   88014             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   88015             :           a correspinding one in the AST_FILE_IO class!
   88016             :        */
   88017             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   88018             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88019             :       /* \brief Typedef used for low level memory access.
   88020             :        */
   88021             :        // typedef unsigned char* TestType;
   88022             : 
   88023             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   88024             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88025             :       /* \brief Typedef used to hold memory addresses as values.
   88026             :        */
   88027             :        // typedef unsigned long  AddressType;
   88028             : 
   88029             : 
   88030             : 
   88031             :        // necessary, to have direct access to the p_freepointer and the private methods !
   88032             :       /*! \brief friend class declaration to support AST File I/O */
   88033             :           friend class AST_FILE_IO;
   88034             : 
   88035             :       /*! \brief friend class declaration to support AST File I/O */
   88036             :           friend class SgOmpRelaxedClauseStorageClass;
   88037             : 
   88038             :       /*! \brief friend class declaration to support AST File I/O */
   88039             :           friend class AstSpecificDataManagingClass;
   88040             : 
   88041             :       /*! \brief friend class declaration to support AST File I/O */
   88042             :           friend class AstSpecificDataManagingClassStorageClass;
   88043             :     public:
   88044             :       /*! \brief IR node constructor to support AST File I/O */
   88045             :           SgOmpRelaxedClause( const SgOmpRelaxedClauseStorageClass& source );
   88046             : 
   88047             :  // private: // JJW hack
   88048             :        /*
   88049             :           name AST Memory Allocation Support Variables
   88050             :           Memory allocations support variables 
   88051             : 
   88052             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   88053             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   88054             :           and support the AST File I/O Mechanism.
   88055             :        */
   88056             :       /* */
   88057             : 
   88058             :     public:
   88059             : 
   88060             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   88061             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   88062             :       // virtual SgNode* addRegExpAttribute();
   88063             :       /*! \brief Support for AST matching using regular expression.
   88064             : 
   88065             :           This support is incomplete and the subject of current research to define 
   88066             :           RegEx trees to support inexact matching.
   88067             :        */
   88068             :           SgOmpRelaxedClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   88069             : 
   88070             : // *** COMMON CODE SECTION ENDS HERE ***
   88071             : 
   88072             : 
   88073             : // End of memberFunctionString
   88074             : // Start of memberFunctionString
   88075             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   88076             : 
   88077             :      // the generated cast function
   88078             :      // friend ROSE_DLL_API SgOmpRelaxedClause* isSgOmpRelaxedClause ( SgNode* s );
   88079             : 
   88080             :           typedef SgOmpClause base_node_type;
   88081             : 
   88082             : 
   88083             : // End of memberFunctionString
   88084             : 
   88085             : 
   88086             :      public: 
   88087             :          virtual ~SgOmpRelaxedClause();
   88088             : 
   88089             : 
   88090             :      public: 
   88091             :          SgOmpRelaxedClause(Sg_File_Info* startOfConstruct ); 
   88092             :          SgOmpRelaxedClause(); 
   88093             : 
   88094             :     protected:
   88095             : 
   88096             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpRelaxedClause>;
   88097             : 
   88098             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88099             : 
   88100             : 
   88101             :    };
   88102             : #endif
   88103             : 
   88104             : // postdeclarations for SgOmpRelaxedClause
   88105             : 
   88106             : /* #line 88107 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88107             : 
   88108             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   88109             : 
   88110             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88111             : 
   88112             : 
   88113             : /* #line 88114 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88114             : 
   88115             : 
   88116             : 
   88117             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88118             : 
   88119             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   88120             : //      This code is automatically generated for each 
   88121             : //      terminal and non-terminal within the defined 
   88122             : //      grammar.  There is a simple way to change the 
   88123             : //      code to fix bugs etc.  See the ROSE README file
   88124             : //      for directions.
   88125             : 
   88126             : // tps: (02/22/2010): Adding DLL export requirements
   88127             : #include "rosedll.h"
   88128             : 
   88129             : // predeclarations for SgOmpReverseOffloadClause
   88130             : 
   88131             : /* #line 88132 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88132             : 
   88133             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   88134             : 
   88135             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88136             : 
   88137             : #if 1
   88138             : // Class Definition for SgOmpReverseOffloadClause
   88139             : class ROSE_DLL_API SgOmpReverseOffloadClause  : public SgOmpClause
   88140             :    {
   88141             :      public:
   88142             : 
   88143             : 
   88144             : /* #line 88145 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88145             : 
   88146             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   88147             : // Start of memberFunctionString
   88148             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   88149             : 
   88150             : // *** COMMON CODE SECTION BEGINS HERE ***
   88151             : 
   88152             :     public:
   88153             : 
   88154             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   88155             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   88156             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   88157             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   88158             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   88159             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   88160             : 
   88161             :       /*! \brief returns a string representing the class name */
   88162             :           virtual std::string class_name() const override;
   88163             : 
   88164             :       /*! \brief returns new style SageIII enum values */
   88165             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   88166             : 
   88167             :       /*! \brief static variant value */
   88168             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   88169             :        // static const VariantT static_variant = V_SgOmpReverseOffloadClause;
   88170             :           enum { static_variant = V_SgOmpReverseOffloadClause };
   88171             : 
   88172             :        /* the generated cast function */
   88173             :       /*! \brief Casts pointer from base class to derived class */
   88174             :           ROSE_DLL_API friend       SgOmpReverseOffloadClause* isSgOmpReverseOffloadClause(       SgNode * s );
   88175             : 
   88176             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   88177             :           ROSE_DLL_API friend const SgOmpReverseOffloadClause* isSgOmpReverseOffloadClause( const SgNode * s );
   88178             : 
   88179             :      // ******************************************
   88180             :      // * Memory Pool / New / Delete
   88181             :      // ******************************************
   88182             : 
   88183             :      public:
   88184             :           /// \private
   88185             :           static const unsigned pool_size; //
   88186             :           /// \private
   88187             :           static std::vector<unsigned char *> pools; //
   88188             :           /// \private
   88189             :           static SgOmpReverseOffloadClause * next_node; // 
   88190             : 
   88191             :           /// \private
   88192             :           static unsigned long initializeStorageClassArray(SgOmpReverseOffloadClauseStorageClass *); //
   88193             : 
   88194             :           /// \private
   88195             :           static void clearMemoryPool(); //
   88196             :           static void deleteMemoryPool(); //
   88197             : 
   88198             :           /// \private
   88199             :           static void extendMemoryPoolForFileIO(); //
   88200             : 
   88201             :           /// \private
   88202             :           static SgOmpReverseOffloadClause * getPointerFromGlobalIndex(unsigned long); //
   88203             :           /// \private
   88204             :           static SgOmpReverseOffloadClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   88205             : 
   88206             :           /// \private
   88207             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   88208             :           /// \private
   88209             :           static void resetValidFreepointers(); //
   88210             :           /// \private
   88211             :           static unsigned long getNumberOfLastValidPointer(); //
   88212             : 
   88213             : 
   88214             : #if defined(INLINE_FUNCTIONS)
   88215             :       /*! \brief returns pointer to newly allocated IR node */
   88216             :           inline void *operator new (size_t size);
   88217             : #else
   88218             :       /*! \brief returns pointer to newly allocated IR node */
   88219             :           void *operator new (size_t size);
   88220             : #endif
   88221             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   88222             :           void operator delete (void* pointer, size_t size);
   88223             : 
   88224             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   88225           0 :           void operator delete (void* pointer)
   88226             :              {
   88227             :             // This is the generated delete operator...
   88228           0 :                SgOmpReverseOffloadClause::operator delete (pointer,sizeof(SgOmpReverseOffloadClause));
   88229             :              }
   88230             : 
   88231             :       /*! \brief Returns the total number of IR nodes of this type */
   88232             :           static size_t numberOfNodes();
   88233             : 
   88234             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   88235             :           static size_t memoryUsage();
   88236             : 
   88237             :       // End of scope which started in IR nodes specific code 
   88238             :       /* */
   88239             : 
   88240             :       /* name Internal Functions
   88241             :           \brief Internal functions ... incomplete-documentation
   88242             : 
   88243             :           These functions have been made public as part of the design, but they are suggested for internal use 
   88244             :           or by particularly knowledgeable users for specialized tools or applications.
   88245             : 
   88246             :           \internal We could not make these private because they are required by user for special purposes. And 
   88247             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   88248             :          
   88249             :        */
   88250             : 
   88251             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   88252             :        // overridden in every class by *generated* implementation
   88253             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   88254             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   88255             :        // MS: 06/28/02 container of names of variables or container indices 
   88256             :        // used used in the traversal to access AST successor nodes
   88257             :        // overridden in every class by *generated* implementation
   88258             :       /*! \brief container of names of variables or container indices used used in the traversal
   88259             :           to access AST successor nodes overridden in every class by *generated* implementation */
   88260             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   88261             : 
   88262             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   88263             :        // than all the vector copies. The implementation for these functions is generated for each class.
   88264             :       /*! \brief return number of children in the traversal successor list */
   88265             :           virtual size_t get_numberOfTraversalSuccessors() override;
   88266             :       /*! \brief index-based access to traversal successors by index number */
   88267             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   88268             :       /*! \brief index-based access to traversal successors by child node */
   88269             :           virtual size_t get_childIndex(SgNode *child) override;
   88270             : 
   88271             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   88272             :        // MS: 08/16/2002 method for generating RTI information
   88273             :       /*! \brief return C++ Runtime-Time-Information */
   88274             :           virtual RTIReturnType roseRTI() override;
   88275             : #endif
   88276             :       /* */
   88277             : 
   88278             : 
   88279             : 
   88280             :       /* name Deprecated Functions
   88281             :           \brief Deprecated functions ... incomplete-documentation
   88282             : 
   88283             :           These functions have been deprecated from use.
   88284             :        */
   88285             :       /* */
   88286             : 
   88287             :       /*! returns a C style string (char*) representing the class name */
   88288             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   88289             : 
   88290             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   88291             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   88292             : #if 0
   88293             :       /*! returns old style Sage II enum values */
   88294             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   88295             :       /*! returns old style Sage II enum values */
   88296             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   88297             : #endif
   88298             :       /* */
   88299             : 
   88300             : 
   88301             : 
   88302             : 
   88303             :      public:
   88304             :       /* name Traversal Support Functions
   88305             :           \brief Traversal support functions ... incomplete-documentation
   88306             : 
   88307             :           These functions have been made public as part of the design, but they are suggested for internal use 
   88308             :           or by particularly knowledgable users for specialized tools or applications.
   88309             :        */
   88310             :       /* */
   88311             : 
   88312             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   88313             :        // (inferior to ROSE traversal mechanism, experimental).
   88314             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   88315             :        */
   88316             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   88317             : 
   88318             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   88319             :       /*! \brief support for the classic visitor pattern done in GoF */
   88320             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   88321             : 
   88322             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   88323             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   88324             :        */
   88325             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   88326             : 
   88327             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   88328             :        */
   88329             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   88330             : 
   88331             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   88332             :        // This traversal helps support internal tools that call static member functions.
   88333             :        // note: this function operates on the memory pools.
   88334             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   88335             :        */
   88336             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   88337             :       /* */
   88338             : 
   88339             : 
   88340             :      public:
   88341             :       /* name Memory Allocation Functions
   88342             :           \brief Memory allocations functions ... incomplete-documentation
   88343             : 
   88344             :           These functions have been made public as part of the design, but they are suggested for internal use 
   88345             :           or by particularly knowledgable users for specialized tools or applications.
   88346             :        */
   88347             :       /* */
   88348             : 
   88349             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   88350             : 
   88351             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   88352             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   88353             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   88354             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   88355             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   88356             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   88357             :           being used with the AST File I/O mechanism.
   88358             :        */
   88359             :           virtual bool isInMemoryPool() override;
   88360             : 
   88361             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   88362             : 
   88363             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   88364             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   88365             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   88366             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   88367             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   88368             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   88369             :           being used with the AST File I/O mechanism.
   88370             :        */
   88371             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   88372             : 
   88373             :       // DQ (4/30/2006): Modified to be a const function.
   88374             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   88375             : 
   88376             :           This functions is part of general support for many possible tools to operate 
   88377             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   88378             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   88379             :           less than the set of pointers used by the AST file I/O. This is part of
   88380             :           work implemented by Andreas, and support tools such as the AST graph generation.
   88381             : 
   88382             :           \warning This function can return unexpected data members and thus the 
   88383             :                    order and the number of elements is unpredicable and subject 
   88384             :                    to change.
   88385             : 
   88386             :           \returns STL vector of pairs of SgNode* and strings
   88387             :        */
   88388             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   88389             : 
   88390             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   88391             : 
   88392             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   88393             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   88394             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   88395             : 
   88396             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   88397             :                    and subject to change.
   88398             :        */
   88399             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   88400             : 
   88401             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   88402             : 
   88403             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   88404             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   88405             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   88406             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   88407             : 
   88408             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   88409             : 
   88410             :           \returns long
   88411             :        */
   88412             :           virtual long getChildIndex( SgNode* childNode ) const override;
   88413             : 
   88414             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   88415             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88416             :       /* \brief Constructor for use by AST File I/O Mechanism
   88417             : 
   88418             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   88419             :           which obtained via fast binary file I/O from disk.
   88420             :        */
   88421             :        // SgOmpReverseOffloadClause( SgOmpReverseOffloadClauseStorageClass& source );
   88422             : 
   88423             : 
   88424             : 
   88425             : 
   88426             : 
   88427             :  // JH (10/24/2005): methods added to support the ast file IO
   88428             :     private:
   88429             : 
   88430             :       /* name AST Memory Allocation Support Functions
   88431             :           \brief Memory allocations support....
   88432             : 
   88433             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   88434             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   88435             :           and support the AST File I/O Mechanism.
   88436             :        */
   88437             :       /* */
   88438             : 
   88439             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   88440             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   88441             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   88442             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   88443             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   88444             :           a correspinding one in the AST_FILE_IO class!
   88445             :        */
   88446             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   88447             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88448             :       /* \brief Typedef used for low level memory access.
   88449             :        */
   88450             :        // typedef unsigned char* TestType;
   88451             : 
   88452             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   88453             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88454             :       /* \brief Typedef used to hold memory addresses as values.
   88455             :        */
   88456             :        // typedef unsigned long  AddressType;
   88457             : 
   88458             : 
   88459             : 
   88460             :        // necessary, to have direct access to the p_freepointer and the private methods !
   88461             :       /*! \brief friend class declaration to support AST File I/O */
   88462             :           friend class AST_FILE_IO;
   88463             : 
   88464             :       /*! \brief friend class declaration to support AST File I/O */
   88465             :           friend class SgOmpReverseOffloadClauseStorageClass;
   88466             : 
   88467             :       /*! \brief friend class declaration to support AST File I/O */
   88468             :           friend class AstSpecificDataManagingClass;
   88469             : 
   88470             :       /*! \brief friend class declaration to support AST File I/O */
   88471             :           friend class AstSpecificDataManagingClassStorageClass;
   88472             :     public:
   88473             :       /*! \brief IR node constructor to support AST File I/O */
   88474             :           SgOmpReverseOffloadClause( const SgOmpReverseOffloadClauseStorageClass& source );
   88475             : 
   88476             :  // private: // JJW hack
   88477             :        /*
   88478             :           name AST Memory Allocation Support Variables
   88479             :           Memory allocations support variables 
   88480             : 
   88481             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   88482             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   88483             :           and support the AST File I/O Mechanism.
   88484             :        */
   88485             :       /* */
   88486             : 
   88487             :     public:
   88488             : 
   88489             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   88490             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   88491             :       // virtual SgNode* addRegExpAttribute();
   88492             :       /*! \brief Support for AST matching using regular expression.
   88493             : 
   88494             :           This support is incomplete and the subject of current research to define 
   88495             :           RegEx trees to support inexact matching.
   88496             :        */
   88497             :           SgOmpReverseOffloadClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   88498             : 
   88499             : // *** COMMON CODE SECTION ENDS HERE ***
   88500             : 
   88501             : 
   88502             : // End of memberFunctionString
   88503             : // Start of memberFunctionString
   88504             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   88505             : 
   88506             :      // the generated cast function
   88507             :      // friend ROSE_DLL_API SgOmpReverseOffloadClause* isSgOmpReverseOffloadClause ( SgNode* s );
   88508             : 
   88509             :           typedef SgOmpClause base_node_type;
   88510             : 
   88511             : 
   88512             : // End of memberFunctionString
   88513             : 
   88514             : 
   88515             :      public: 
   88516             :          virtual ~SgOmpReverseOffloadClause();
   88517             : 
   88518             : 
   88519             :      public: 
   88520             :          SgOmpReverseOffloadClause(Sg_File_Info* startOfConstruct ); 
   88521             :          SgOmpReverseOffloadClause(); 
   88522             : 
   88523             :     protected:
   88524             : 
   88525             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpReverseOffloadClause>;
   88526             : 
   88527             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88528             : 
   88529             : 
   88530             :    };
   88531             : #endif
   88532             : 
   88533             : // postdeclarations for SgOmpReverseOffloadClause
   88534             : 
   88535             : /* #line 88536 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88536             : 
   88537             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   88538             : 
   88539             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88540             : 
   88541             : 
   88542             : /* #line 88543 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88543             : 
   88544             : 
   88545             : 
   88546             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88547             : 
   88548             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   88549             : //      This code is automatically generated for each 
   88550             : //      terminal and non-terminal within the defined 
   88551             : //      grammar.  There is a simple way to change the 
   88552             : //      code to fix bugs etc.  See the ROSE README file
   88553             : //      for directions.
   88554             : 
   88555             : // tps: (02/22/2010): Adding DLL export requirements
   88556             : #include "rosedll.h"
   88557             : 
   88558             : // predeclarations for SgOmpUnifiedAddressClause
   88559             : 
   88560             : /* #line 88561 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88561             : 
   88562             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   88563             : 
   88564             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88565             : 
   88566             : #if 1
   88567             : // Class Definition for SgOmpUnifiedAddressClause
   88568             : class ROSE_DLL_API SgOmpUnifiedAddressClause  : public SgOmpClause
   88569             :    {
   88570             :      public:
   88571             : 
   88572             : 
   88573             : /* #line 88574 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88574             : 
   88575             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   88576             : // Start of memberFunctionString
   88577             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   88578             : 
   88579             : // *** COMMON CODE SECTION BEGINS HERE ***
   88580             : 
   88581             :     public:
   88582             : 
   88583             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   88584             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   88585             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   88586             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   88587             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   88588             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   88589             : 
   88590             :       /*! \brief returns a string representing the class name */
   88591             :           virtual std::string class_name() const override;
   88592             : 
   88593             :       /*! \brief returns new style SageIII enum values */
   88594             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   88595             : 
   88596             :       /*! \brief static variant value */
   88597             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   88598             :        // static const VariantT static_variant = V_SgOmpUnifiedAddressClause;
   88599             :           enum { static_variant = V_SgOmpUnifiedAddressClause };
   88600             : 
   88601             :        /* the generated cast function */
   88602             :       /*! \brief Casts pointer from base class to derived class */
   88603             :           ROSE_DLL_API friend       SgOmpUnifiedAddressClause* isSgOmpUnifiedAddressClause(       SgNode * s );
   88604             : 
   88605             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   88606             :           ROSE_DLL_API friend const SgOmpUnifiedAddressClause* isSgOmpUnifiedAddressClause( const SgNode * s );
   88607             : 
   88608             :      // ******************************************
   88609             :      // * Memory Pool / New / Delete
   88610             :      // ******************************************
   88611             : 
   88612             :      public:
   88613             :           /// \private
   88614             :           static const unsigned pool_size; //
   88615             :           /// \private
   88616             :           static std::vector<unsigned char *> pools; //
   88617             :           /// \private
   88618             :           static SgOmpUnifiedAddressClause * next_node; // 
   88619             : 
   88620             :           /// \private
   88621             :           static unsigned long initializeStorageClassArray(SgOmpUnifiedAddressClauseStorageClass *); //
   88622             : 
   88623             :           /// \private
   88624             :           static void clearMemoryPool(); //
   88625             :           static void deleteMemoryPool(); //
   88626             : 
   88627             :           /// \private
   88628             :           static void extendMemoryPoolForFileIO(); //
   88629             : 
   88630             :           /// \private
   88631             :           static SgOmpUnifiedAddressClause * getPointerFromGlobalIndex(unsigned long); //
   88632             :           /// \private
   88633             :           static SgOmpUnifiedAddressClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   88634             : 
   88635             :           /// \private
   88636             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   88637             :           /// \private
   88638             :           static void resetValidFreepointers(); //
   88639             :           /// \private
   88640             :           static unsigned long getNumberOfLastValidPointer(); //
   88641             : 
   88642             : 
   88643             : #if defined(INLINE_FUNCTIONS)
   88644             :       /*! \brief returns pointer to newly allocated IR node */
   88645             :           inline void *operator new (size_t size);
   88646             : #else
   88647             :       /*! \brief returns pointer to newly allocated IR node */
   88648             :           void *operator new (size_t size);
   88649             : #endif
   88650             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   88651             :           void operator delete (void* pointer, size_t size);
   88652             : 
   88653             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   88654           0 :           void operator delete (void* pointer)
   88655             :              {
   88656             :             // This is the generated delete operator...
   88657           0 :                SgOmpUnifiedAddressClause::operator delete (pointer,sizeof(SgOmpUnifiedAddressClause));
   88658             :              }
   88659             : 
   88660             :       /*! \brief Returns the total number of IR nodes of this type */
   88661             :           static size_t numberOfNodes();
   88662             : 
   88663             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   88664             :           static size_t memoryUsage();
   88665             : 
   88666             :       // End of scope which started in IR nodes specific code 
   88667             :       /* */
   88668             : 
   88669             :       /* name Internal Functions
   88670             :           \brief Internal functions ... incomplete-documentation
   88671             : 
   88672             :           These functions have been made public as part of the design, but they are suggested for internal use 
   88673             :           or by particularly knowledgeable users for specialized tools or applications.
   88674             : 
   88675             :           \internal We could not make these private because they are required by user for special purposes. And 
   88676             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   88677             :          
   88678             :        */
   88679             : 
   88680             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   88681             :        // overridden in every class by *generated* implementation
   88682             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   88683             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   88684             :        // MS: 06/28/02 container of names of variables or container indices 
   88685             :        // used used in the traversal to access AST successor nodes
   88686             :        // overridden in every class by *generated* implementation
   88687             :       /*! \brief container of names of variables or container indices used used in the traversal
   88688             :           to access AST successor nodes overridden in every class by *generated* implementation */
   88689             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   88690             : 
   88691             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   88692             :        // than all the vector copies. The implementation for these functions is generated for each class.
   88693             :       /*! \brief return number of children in the traversal successor list */
   88694             :           virtual size_t get_numberOfTraversalSuccessors() override;
   88695             :       /*! \brief index-based access to traversal successors by index number */
   88696             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   88697             :       /*! \brief index-based access to traversal successors by child node */
   88698             :           virtual size_t get_childIndex(SgNode *child) override;
   88699             : 
   88700             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   88701             :        // MS: 08/16/2002 method for generating RTI information
   88702             :       /*! \brief return C++ Runtime-Time-Information */
   88703             :           virtual RTIReturnType roseRTI() override;
   88704             : #endif
   88705             :       /* */
   88706             : 
   88707             : 
   88708             : 
   88709             :       /* name Deprecated Functions
   88710             :           \brief Deprecated functions ... incomplete-documentation
   88711             : 
   88712             :           These functions have been deprecated from use.
   88713             :        */
   88714             :       /* */
   88715             : 
   88716             :       /*! returns a C style string (char*) representing the class name */
   88717             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   88718             : 
   88719             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   88720             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   88721             : #if 0
   88722             :       /*! returns old style Sage II enum values */
   88723             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   88724             :       /*! returns old style Sage II enum values */
   88725             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   88726             : #endif
   88727             :       /* */
   88728             : 
   88729             : 
   88730             : 
   88731             : 
   88732             :      public:
   88733             :       /* name Traversal Support Functions
   88734             :           \brief Traversal support functions ... incomplete-documentation
   88735             : 
   88736             :           These functions have been made public as part of the design, but they are suggested for internal use 
   88737             :           or by particularly knowledgable users for specialized tools or applications.
   88738             :        */
   88739             :       /* */
   88740             : 
   88741             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   88742             :        // (inferior to ROSE traversal mechanism, experimental).
   88743             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   88744             :        */
   88745             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   88746             : 
   88747             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   88748             :       /*! \brief support for the classic visitor pattern done in GoF */
   88749             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   88750             : 
   88751             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   88752             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   88753             :        */
   88754             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   88755             : 
   88756             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   88757             :        */
   88758             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   88759             : 
   88760             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   88761             :        // This traversal helps support internal tools that call static member functions.
   88762             :        // note: this function operates on the memory pools.
   88763             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   88764             :        */
   88765             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   88766             :       /* */
   88767             : 
   88768             : 
   88769             :      public:
   88770             :       /* name Memory Allocation Functions
   88771             :           \brief Memory allocations functions ... incomplete-documentation
   88772             : 
   88773             :           These functions have been made public as part of the design, but they are suggested for internal use 
   88774             :           or by particularly knowledgable users for specialized tools or applications.
   88775             :        */
   88776             :       /* */
   88777             : 
   88778             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   88779             : 
   88780             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   88781             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   88782             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   88783             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   88784             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   88785             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   88786             :           being used with the AST File I/O mechanism.
   88787             :        */
   88788             :           virtual bool isInMemoryPool() override;
   88789             : 
   88790             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   88791             : 
   88792             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   88793             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   88794             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   88795             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   88796             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   88797             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   88798             :           being used with the AST File I/O mechanism.
   88799             :        */
   88800             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   88801             : 
   88802             :       // DQ (4/30/2006): Modified to be a const function.
   88803             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   88804             : 
   88805             :           This functions is part of general support for many possible tools to operate 
   88806             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   88807             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   88808             :           less than the set of pointers used by the AST file I/O. This is part of
   88809             :           work implemented by Andreas, and support tools such as the AST graph generation.
   88810             : 
   88811             :           \warning This function can return unexpected data members and thus the 
   88812             :                    order and the number of elements is unpredicable and subject 
   88813             :                    to change.
   88814             : 
   88815             :           \returns STL vector of pairs of SgNode* and strings
   88816             :        */
   88817             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   88818             : 
   88819             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   88820             : 
   88821             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   88822             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   88823             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   88824             : 
   88825             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   88826             :                    and subject to change.
   88827             :        */
   88828             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   88829             : 
   88830             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   88831             : 
   88832             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   88833             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   88834             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   88835             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   88836             : 
   88837             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   88838             : 
   88839             :           \returns long
   88840             :        */
   88841             :           virtual long getChildIndex( SgNode* childNode ) const override;
   88842             : 
   88843             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   88844             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88845             :       /* \brief Constructor for use by AST File I/O Mechanism
   88846             : 
   88847             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   88848             :           which obtained via fast binary file I/O from disk.
   88849             :        */
   88850             :        // SgOmpUnifiedAddressClause( SgOmpUnifiedAddressClauseStorageClass& source );
   88851             : 
   88852             : 
   88853             : 
   88854             : 
   88855             : 
   88856             :  // JH (10/24/2005): methods added to support the ast file IO
   88857             :     private:
   88858             : 
   88859             :       /* name AST Memory Allocation Support Functions
   88860             :           \brief Memory allocations support....
   88861             : 
   88862             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   88863             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   88864             :           and support the AST File I/O Mechanism.
   88865             :        */
   88866             :       /* */
   88867             : 
   88868             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   88869             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   88870             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   88871             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   88872             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   88873             :           a correspinding one in the AST_FILE_IO class!
   88874             :        */
   88875             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   88876             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88877             :       /* \brief Typedef used for low level memory access.
   88878             :        */
   88879             :        // typedef unsigned char* TestType;
   88880             : 
   88881             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   88882             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   88883             :       /* \brief Typedef used to hold memory addresses as values.
   88884             :        */
   88885             :        // typedef unsigned long  AddressType;
   88886             : 
   88887             : 
   88888             : 
   88889             :        // necessary, to have direct access to the p_freepointer and the private methods !
   88890             :       /*! \brief friend class declaration to support AST File I/O */
   88891             :           friend class AST_FILE_IO;
   88892             : 
   88893             :       /*! \brief friend class declaration to support AST File I/O */
   88894             :           friend class SgOmpUnifiedAddressClauseStorageClass;
   88895             : 
   88896             :       /*! \brief friend class declaration to support AST File I/O */
   88897             :           friend class AstSpecificDataManagingClass;
   88898             : 
   88899             :       /*! \brief friend class declaration to support AST File I/O */
   88900             :           friend class AstSpecificDataManagingClassStorageClass;
   88901             :     public:
   88902             :       /*! \brief IR node constructor to support AST File I/O */
   88903             :           SgOmpUnifiedAddressClause( const SgOmpUnifiedAddressClauseStorageClass& source );
   88904             : 
   88905             :  // private: // JJW hack
   88906             :        /*
   88907             :           name AST Memory Allocation Support Variables
   88908             :           Memory allocations support variables 
   88909             : 
   88910             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   88911             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   88912             :           and support the AST File I/O Mechanism.
   88913             :        */
   88914             :       /* */
   88915             : 
   88916             :     public:
   88917             : 
   88918             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   88919             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   88920             :       // virtual SgNode* addRegExpAttribute();
   88921             :       /*! \brief Support for AST matching using regular expression.
   88922             : 
   88923             :           This support is incomplete and the subject of current research to define 
   88924             :           RegEx trees to support inexact matching.
   88925             :        */
   88926             :           SgOmpUnifiedAddressClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   88927             : 
   88928             : // *** COMMON CODE SECTION ENDS HERE ***
   88929             : 
   88930             : 
   88931             : // End of memberFunctionString
   88932             : // Start of memberFunctionString
   88933             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   88934             : 
   88935             :      // the generated cast function
   88936             :      // friend ROSE_DLL_API SgOmpUnifiedAddressClause* isSgOmpUnifiedAddressClause ( SgNode* s );
   88937             : 
   88938             :           typedef SgOmpClause base_node_type;
   88939             : 
   88940             : 
   88941             : // End of memberFunctionString
   88942             : 
   88943             : 
   88944             :      public: 
   88945             :          virtual ~SgOmpUnifiedAddressClause();
   88946             : 
   88947             : 
   88948             :      public: 
   88949             :          SgOmpUnifiedAddressClause(Sg_File_Info* startOfConstruct ); 
   88950             :          SgOmpUnifiedAddressClause(); 
   88951             : 
   88952             :     protected:
   88953             : 
   88954             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUnifiedAddressClause>;
   88955             : 
   88956             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88957             : 
   88958             : 
   88959             :    };
   88960             : #endif
   88961             : 
   88962             : // postdeclarations for SgOmpUnifiedAddressClause
   88963             : 
   88964             : /* #line 88965 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88965             : 
   88966             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   88967             : 
   88968             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88969             : 
   88970             : 
   88971             : /* #line 88972 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88972             : 
   88973             : 
   88974             : 
   88975             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88976             : 
   88977             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   88978             : //      This code is automatically generated for each 
   88979             : //      terminal and non-terminal within the defined 
   88980             : //      grammar.  There is a simple way to change the 
   88981             : //      code to fix bugs etc.  See the ROSE README file
   88982             : //      for directions.
   88983             : 
   88984             : // tps: (02/22/2010): Adding DLL export requirements
   88985             : #include "rosedll.h"
   88986             : 
   88987             : // predeclarations for SgOmpUnifiedSharedMemoryClause
   88988             : 
   88989             : /* #line 88990 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   88990             : 
   88991             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   88992             : 
   88993             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   88994             : 
   88995             : #if 1
   88996             : // Class Definition for SgOmpUnifiedSharedMemoryClause
   88997             : class ROSE_DLL_API SgOmpUnifiedSharedMemoryClause  : public SgOmpClause
   88998             :    {
   88999             :      public:
   89000             : 
   89001             : 
   89002             : /* #line 89003 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89003             : 
   89004             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   89005             : // Start of memberFunctionString
   89006             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   89007             : 
   89008             : // *** COMMON CODE SECTION BEGINS HERE ***
   89009             : 
   89010             :     public:
   89011             : 
   89012             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   89013             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   89014             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   89015             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   89016             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   89017             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   89018             : 
   89019             :       /*! \brief returns a string representing the class name */
   89020             :           virtual std::string class_name() const override;
   89021             : 
   89022             :       /*! \brief returns new style SageIII enum values */
   89023             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   89024             : 
   89025             :       /*! \brief static variant value */
   89026             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   89027             :        // static const VariantT static_variant = V_SgOmpUnifiedSharedMemoryClause;
   89028             :           enum { static_variant = V_SgOmpUnifiedSharedMemoryClause };
   89029             : 
   89030             :        /* the generated cast function */
   89031             :       /*! \brief Casts pointer from base class to derived class */
   89032             :           ROSE_DLL_API friend       SgOmpUnifiedSharedMemoryClause* isSgOmpUnifiedSharedMemoryClause(       SgNode * s );
   89033             : 
   89034             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   89035             :           ROSE_DLL_API friend const SgOmpUnifiedSharedMemoryClause* isSgOmpUnifiedSharedMemoryClause( const SgNode * s );
   89036             : 
   89037             :      // ******************************************
   89038             :      // * Memory Pool / New / Delete
   89039             :      // ******************************************
   89040             : 
   89041             :      public:
   89042             :           /// \private
   89043             :           static const unsigned pool_size; //
   89044             :           /// \private
   89045             :           static std::vector<unsigned char *> pools; //
   89046             :           /// \private
   89047             :           static SgOmpUnifiedSharedMemoryClause * next_node; // 
   89048             : 
   89049             :           /// \private
   89050             :           static unsigned long initializeStorageClassArray(SgOmpUnifiedSharedMemoryClauseStorageClass *); //
   89051             : 
   89052             :           /// \private
   89053             :           static void clearMemoryPool(); //
   89054             :           static void deleteMemoryPool(); //
   89055             : 
   89056             :           /// \private
   89057             :           static void extendMemoryPoolForFileIO(); //
   89058             : 
   89059             :           /// \private
   89060             :           static SgOmpUnifiedSharedMemoryClause * getPointerFromGlobalIndex(unsigned long); //
   89061             :           /// \private
   89062             :           static SgOmpUnifiedSharedMemoryClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   89063             : 
   89064             :           /// \private
   89065             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   89066             :           /// \private
   89067             :           static void resetValidFreepointers(); //
   89068             :           /// \private
   89069             :           static unsigned long getNumberOfLastValidPointer(); //
   89070             : 
   89071             : 
   89072             : #if defined(INLINE_FUNCTIONS)
   89073             :       /*! \brief returns pointer to newly allocated IR node */
   89074             :           inline void *operator new (size_t size);
   89075             : #else
   89076             :       /*! \brief returns pointer to newly allocated IR node */
   89077             :           void *operator new (size_t size);
   89078             : #endif
   89079             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   89080             :           void operator delete (void* pointer, size_t size);
   89081             : 
   89082             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   89083           0 :           void operator delete (void* pointer)
   89084             :              {
   89085             :             // This is the generated delete operator...
   89086           0 :                SgOmpUnifiedSharedMemoryClause::operator delete (pointer,sizeof(SgOmpUnifiedSharedMemoryClause));
   89087             :              }
   89088             : 
   89089             :       /*! \brief Returns the total number of IR nodes of this type */
   89090             :           static size_t numberOfNodes();
   89091             : 
   89092             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   89093             :           static size_t memoryUsage();
   89094             : 
   89095             :       // End of scope which started in IR nodes specific code 
   89096             :       /* */
   89097             : 
   89098             :       /* name Internal Functions
   89099             :           \brief Internal functions ... incomplete-documentation
   89100             : 
   89101             :           These functions have been made public as part of the design, but they are suggested for internal use 
   89102             :           or by particularly knowledgeable users for specialized tools or applications.
   89103             : 
   89104             :           \internal We could not make these private because they are required by user for special purposes. And 
   89105             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   89106             :          
   89107             :        */
   89108             : 
   89109             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   89110             :        // overridden in every class by *generated* implementation
   89111             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   89112             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   89113             :        // MS: 06/28/02 container of names of variables or container indices 
   89114             :        // used used in the traversal to access AST successor nodes
   89115             :        // overridden in every class by *generated* implementation
   89116             :       /*! \brief container of names of variables or container indices used used in the traversal
   89117             :           to access AST successor nodes overridden in every class by *generated* implementation */
   89118             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   89119             : 
   89120             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   89121             :        // than all the vector copies. The implementation for these functions is generated for each class.
   89122             :       /*! \brief return number of children in the traversal successor list */
   89123             :           virtual size_t get_numberOfTraversalSuccessors() override;
   89124             :       /*! \brief index-based access to traversal successors by index number */
   89125             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   89126             :       /*! \brief index-based access to traversal successors by child node */
   89127             :           virtual size_t get_childIndex(SgNode *child) override;
   89128             : 
   89129             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   89130             :        // MS: 08/16/2002 method for generating RTI information
   89131             :       /*! \brief return C++ Runtime-Time-Information */
   89132             :           virtual RTIReturnType roseRTI() override;
   89133             : #endif
   89134             :       /* */
   89135             : 
   89136             : 
   89137             : 
   89138             :       /* name Deprecated Functions
   89139             :           \brief Deprecated functions ... incomplete-documentation
   89140             : 
   89141             :           These functions have been deprecated from use.
   89142             :        */
   89143             :       /* */
   89144             : 
   89145             :       /*! returns a C style string (char*) representing the class name */
   89146             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   89147             : 
   89148             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   89149             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   89150             : #if 0
   89151             :       /*! returns old style Sage II enum values */
   89152             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   89153             :       /*! returns old style Sage II enum values */
   89154             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   89155             : #endif
   89156             :       /* */
   89157             : 
   89158             : 
   89159             : 
   89160             : 
   89161             :      public:
   89162             :       /* name Traversal Support Functions
   89163             :           \brief Traversal support functions ... incomplete-documentation
   89164             : 
   89165             :           These functions have been made public as part of the design, but they are suggested for internal use 
   89166             :           or by particularly knowledgable users for specialized tools or applications.
   89167             :        */
   89168             :       /* */
   89169             : 
   89170             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   89171             :        // (inferior to ROSE traversal mechanism, experimental).
   89172             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   89173             :        */
   89174             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   89175             : 
   89176             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   89177             :       /*! \brief support for the classic visitor pattern done in GoF */
   89178             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   89179             : 
   89180             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   89181             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   89182             :        */
   89183             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   89184             : 
   89185             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   89186             :        */
   89187             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   89188             : 
   89189             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   89190             :        // This traversal helps support internal tools that call static member functions.
   89191             :        // note: this function operates on the memory pools.
   89192             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   89193             :        */
   89194             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   89195             :       /* */
   89196             : 
   89197             : 
   89198             :      public:
   89199             :       /* name Memory Allocation Functions
   89200             :           \brief Memory allocations functions ... incomplete-documentation
   89201             : 
   89202             :           These functions have been made public as part of the design, but they are suggested for internal use 
   89203             :           or by particularly knowledgable users for specialized tools or applications.
   89204             :        */
   89205             :       /* */
   89206             : 
   89207             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   89208             : 
   89209             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   89210             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   89211             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   89212             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   89213             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   89214             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   89215             :           being used with the AST File I/O mechanism.
   89216             :        */
   89217             :           virtual bool isInMemoryPool() override;
   89218             : 
   89219             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   89220             : 
   89221             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   89222             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   89223             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   89224             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   89225             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   89226             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   89227             :           being used with the AST File I/O mechanism.
   89228             :        */
   89229             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   89230             : 
   89231             :       // DQ (4/30/2006): Modified to be a const function.
   89232             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   89233             : 
   89234             :           This functions is part of general support for many possible tools to operate 
   89235             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   89236             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   89237             :           less than the set of pointers used by the AST file I/O. This is part of
   89238             :           work implemented by Andreas, and support tools such as the AST graph generation.
   89239             : 
   89240             :           \warning This function can return unexpected data members and thus the 
   89241             :                    order and the number of elements is unpredicable and subject 
   89242             :                    to change.
   89243             : 
   89244             :           \returns STL vector of pairs of SgNode* and strings
   89245             :        */
   89246             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   89247             : 
   89248             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   89249             : 
   89250             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   89251             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   89252             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   89253             : 
   89254             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   89255             :                    and subject to change.
   89256             :        */
   89257             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   89258             : 
   89259             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   89260             : 
   89261             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   89262             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   89263             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   89264             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   89265             : 
   89266             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   89267             : 
   89268             :           \returns long
   89269             :        */
   89270             :           virtual long getChildIndex( SgNode* childNode ) const override;
   89271             : 
   89272             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   89273             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   89274             :       /* \brief Constructor for use by AST File I/O Mechanism
   89275             : 
   89276             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   89277             :           which obtained via fast binary file I/O from disk.
   89278             :        */
   89279             :        // SgOmpUnifiedSharedMemoryClause( SgOmpUnifiedSharedMemoryClauseStorageClass& source );
   89280             : 
   89281             : 
   89282             : 
   89283             : 
   89284             : 
   89285             :  // JH (10/24/2005): methods added to support the ast file IO
   89286             :     private:
   89287             : 
   89288             :       /* name AST Memory Allocation Support Functions
   89289             :           \brief Memory allocations support....
   89290             : 
   89291             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   89292             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   89293             :           and support the AST File I/O Mechanism.
   89294             :        */
   89295             :       /* */
   89296             : 
   89297             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   89298             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   89299             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   89300             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   89301             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   89302             :           a correspinding one in the AST_FILE_IO class!
   89303             :        */
   89304             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   89305             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   89306             :       /* \brief Typedef used for low level memory access.
   89307             :        */
   89308             :        // typedef unsigned char* TestType;
   89309             : 
   89310             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   89311             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   89312             :       /* \brief Typedef used to hold memory addresses as values.
   89313             :        */
   89314             :        // typedef unsigned long  AddressType;
   89315             : 
   89316             : 
   89317             : 
   89318             :        // necessary, to have direct access to the p_freepointer and the private methods !
   89319             :       /*! \brief friend class declaration to support AST File I/O */
   89320             :           friend class AST_FILE_IO;
   89321             : 
   89322             :       /*! \brief friend class declaration to support AST File I/O */
   89323             :           friend class SgOmpUnifiedSharedMemoryClauseStorageClass;
   89324             : 
   89325             :       /*! \brief friend class declaration to support AST File I/O */
   89326             :           friend class AstSpecificDataManagingClass;
   89327             : 
   89328             :       /*! \brief friend class declaration to support AST File I/O */
   89329             :           friend class AstSpecificDataManagingClassStorageClass;
   89330             :     public:
   89331             :       /*! \brief IR node constructor to support AST File I/O */
   89332             :           SgOmpUnifiedSharedMemoryClause( const SgOmpUnifiedSharedMemoryClauseStorageClass& source );
   89333             : 
   89334             :  // private: // JJW hack
   89335             :        /*
   89336             :           name AST Memory Allocation Support Variables
   89337             :           Memory allocations support variables 
   89338             : 
   89339             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   89340             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   89341             :           and support the AST File I/O Mechanism.
   89342             :        */
   89343             :       /* */
   89344             : 
   89345             :     public:
   89346             : 
   89347             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   89348             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   89349             :       // virtual SgNode* addRegExpAttribute();
   89350             :       /*! \brief Support for AST matching using regular expression.
   89351             : 
   89352             :           This support is incomplete and the subject of current research to define 
   89353             :           RegEx trees to support inexact matching.
   89354             :        */
   89355             :           SgOmpUnifiedSharedMemoryClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   89356             : 
   89357             : // *** COMMON CODE SECTION ENDS HERE ***
   89358             : 
   89359             : 
   89360             : // End of memberFunctionString
   89361             : // Start of memberFunctionString
   89362             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   89363             : 
   89364             :      // the generated cast function
   89365             :      // friend ROSE_DLL_API SgOmpUnifiedSharedMemoryClause* isSgOmpUnifiedSharedMemoryClause ( SgNode* s );
   89366             : 
   89367             :           typedef SgOmpClause base_node_type;
   89368             : 
   89369             : 
   89370             : // End of memberFunctionString
   89371             : 
   89372             : 
   89373             :      public: 
   89374             :          virtual ~SgOmpUnifiedSharedMemoryClause();
   89375             : 
   89376             : 
   89377             :      public: 
   89378             :          SgOmpUnifiedSharedMemoryClause(Sg_File_Info* startOfConstruct ); 
   89379             :          SgOmpUnifiedSharedMemoryClause(); 
   89380             : 
   89381             :     protected:
   89382             : 
   89383             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUnifiedSharedMemoryClause>;
   89384             : 
   89385             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89386             : 
   89387             : 
   89388             :    };
   89389             : #endif
   89390             : 
   89391             : // postdeclarations for SgOmpUnifiedSharedMemoryClause
   89392             : 
   89393             : /* #line 89394 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89394             : 
   89395             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   89396             : 
   89397             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89398             : 
   89399             : 
   89400             : /* #line 89401 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89401             : 
   89402             : 
   89403             : 
   89404             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89405             : 
   89406             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   89407             : //      This code is automatically generated for each 
   89408             : //      terminal and non-terminal within the defined 
   89409             : //      grammar.  There is a simple way to change the 
   89410             : //      code to fix bugs etc.  See the ROSE README file
   89411             : //      for directions.
   89412             : 
   89413             : // tps: (02/22/2010): Adding DLL export requirements
   89414             : #include "rosedll.h"
   89415             : 
   89416             : // predeclarations for SgOmpDynamicAllocatorsClause
   89417             : 
   89418             : /* #line 89419 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89419             : 
   89420             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   89421             : 
   89422             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89423             : 
   89424             : #if 1
   89425             : // Class Definition for SgOmpDynamicAllocatorsClause
   89426             : class ROSE_DLL_API SgOmpDynamicAllocatorsClause  : public SgOmpClause
   89427             :    {
   89428             :      public:
   89429             : 
   89430             : 
   89431             : /* #line 89432 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89432             : 
   89433             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   89434             : // Start of memberFunctionString
   89435             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   89436             : 
   89437             : // *** COMMON CODE SECTION BEGINS HERE ***
   89438             : 
   89439             :     public:
   89440             : 
   89441             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   89442             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   89443             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   89444             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   89445             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   89446             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   89447             : 
   89448             :       /*! \brief returns a string representing the class name */
   89449             :           virtual std::string class_name() const override;
   89450             : 
   89451             :       /*! \brief returns new style SageIII enum values */
   89452             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   89453             : 
   89454             :       /*! \brief static variant value */
   89455             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   89456             :        // static const VariantT static_variant = V_SgOmpDynamicAllocatorsClause;
   89457             :           enum { static_variant = V_SgOmpDynamicAllocatorsClause };
   89458             : 
   89459             :        /* the generated cast function */
   89460             :       /*! \brief Casts pointer from base class to derived class */
   89461             :           ROSE_DLL_API friend       SgOmpDynamicAllocatorsClause* isSgOmpDynamicAllocatorsClause(       SgNode * s );
   89462             : 
   89463             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   89464             :           ROSE_DLL_API friend const SgOmpDynamicAllocatorsClause* isSgOmpDynamicAllocatorsClause( const SgNode * s );
   89465             : 
   89466             :      // ******************************************
   89467             :      // * Memory Pool / New / Delete
   89468             :      // ******************************************
   89469             : 
   89470             :      public:
   89471             :           /// \private
   89472             :           static const unsigned pool_size; //
   89473             :           /// \private
   89474             :           static std::vector<unsigned char *> pools; //
   89475             :           /// \private
   89476             :           static SgOmpDynamicAllocatorsClause * next_node; // 
   89477             : 
   89478             :           /// \private
   89479             :           static unsigned long initializeStorageClassArray(SgOmpDynamicAllocatorsClauseStorageClass *); //
   89480             : 
   89481             :           /// \private
   89482             :           static void clearMemoryPool(); //
   89483             :           static void deleteMemoryPool(); //
   89484             : 
   89485             :           /// \private
   89486             :           static void extendMemoryPoolForFileIO(); //
   89487             : 
   89488             :           /// \private
   89489             :           static SgOmpDynamicAllocatorsClause * getPointerFromGlobalIndex(unsigned long); //
   89490             :           /// \private
   89491             :           static SgOmpDynamicAllocatorsClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   89492             : 
   89493             :           /// \private
   89494             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   89495             :           /// \private
   89496             :           static void resetValidFreepointers(); //
   89497             :           /// \private
   89498             :           static unsigned long getNumberOfLastValidPointer(); //
   89499             : 
   89500             : 
   89501             : #if defined(INLINE_FUNCTIONS)
   89502             :       /*! \brief returns pointer to newly allocated IR node */
   89503             :           inline void *operator new (size_t size);
   89504             : #else
   89505             :       /*! \brief returns pointer to newly allocated IR node */
   89506             :           void *operator new (size_t size);
   89507             : #endif
   89508             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   89509             :           void operator delete (void* pointer, size_t size);
   89510             : 
   89511             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   89512           0 :           void operator delete (void* pointer)
   89513             :              {
   89514             :             // This is the generated delete operator...
   89515           0 :                SgOmpDynamicAllocatorsClause::operator delete (pointer,sizeof(SgOmpDynamicAllocatorsClause));
   89516             :              }
   89517             : 
   89518             :       /*! \brief Returns the total number of IR nodes of this type */
   89519             :           static size_t numberOfNodes();
   89520             : 
   89521             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   89522             :           static size_t memoryUsage();
   89523             : 
   89524             :       // End of scope which started in IR nodes specific code 
   89525             :       /* */
   89526             : 
   89527             :       /* name Internal Functions
   89528             :           \brief Internal functions ... incomplete-documentation
   89529             : 
   89530             :           These functions have been made public as part of the design, but they are suggested for internal use 
   89531             :           or by particularly knowledgeable users for specialized tools or applications.
   89532             : 
   89533             :           \internal We could not make these private because they are required by user for special purposes. And 
   89534             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   89535             :          
   89536             :        */
   89537             : 
   89538             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   89539             :        // overridden in every class by *generated* implementation
   89540             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   89541             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   89542             :        // MS: 06/28/02 container of names of variables or container indices 
   89543             :        // used used in the traversal to access AST successor nodes
   89544             :        // overridden in every class by *generated* implementation
   89545             :       /*! \brief container of names of variables or container indices used used in the traversal
   89546             :           to access AST successor nodes overridden in every class by *generated* implementation */
   89547             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   89548             : 
   89549             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   89550             :        // than all the vector copies. The implementation for these functions is generated for each class.
   89551             :       /*! \brief return number of children in the traversal successor list */
   89552             :           virtual size_t get_numberOfTraversalSuccessors() override;
   89553             :       /*! \brief index-based access to traversal successors by index number */
   89554             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   89555             :       /*! \brief index-based access to traversal successors by child node */
   89556             :           virtual size_t get_childIndex(SgNode *child) override;
   89557             : 
   89558             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   89559             :        // MS: 08/16/2002 method for generating RTI information
   89560             :       /*! \brief return C++ Runtime-Time-Information */
   89561             :           virtual RTIReturnType roseRTI() override;
   89562             : #endif
   89563             :       /* */
   89564             : 
   89565             : 
   89566             : 
   89567             :       /* name Deprecated Functions
   89568             :           \brief Deprecated functions ... incomplete-documentation
   89569             : 
   89570             :           These functions have been deprecated from use.
   89571             :        */
   89572             :       /* */
   89573             : 
   89574             :       /*! returns a C style string (char*) representing the class name */
   89575             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   89576             : 
   89577             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   89578             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   89579             : #if 0
   89580             :       /*! returns old style Sage II enum values */
   89581             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   89582             :       /*! returns old style Sage II enum values */
   89583             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   89584             : #endif
   89585             :       /* */
   89586             : 
   89587             : 
   89588             : 
   89589             : 
   89590             :      public:
   89591             :       /* name Traversal Support Functions
   89592             :           \brief Traversal support functions ... incomplete-documentation
   89593             : 
   89594             :           These functions have been made public as part of the design, but they are suggested for internal use 
   89595             :           or by particularly knowledgable users for specialized tools or applications.
   89596             :        */
   89597             :       /* */
   89598             : 
   89599             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   89600             :        // (inferior to ROSE traversal mechanism, experimental).
   89601             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   89602             :        */
   89603             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   89604             : 
   89605             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   89606             :       /*! \brief support for the classic visitor pattern done in GoF */
   89607             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   89608             : 
   89609             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   89610             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   89611             :        */
   89612             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   89613             : 
   89614             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   89615             :        */
   89616             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   89617             : 
   89618             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   89619             :        // This traversal helps support internal tools that call static member functions.
   89620             :        // note: this function operates on the memory pools.
   89621             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   89622             :        */
   89623             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   89624             :       /* */
   89625             : 
   89626             : 
   89627             :      public:
   89628             :       /* name Memory Allocation Functions
   89629             :           \brief Memory allocations functions ... incomplete-documentation
   89630             : 
   89631             :           These functions have been made public as part of the design, but they are suggested for internal use 
   89632             :           or by particularly knowledgable users for specialized tools or applications.
   89633             :        */
   89634             :       /* */
   89635             : 
   89636             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   89637             : 
   89638             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   89639             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   89640             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   89641             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   89642             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   89643             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   89644             :           being used with the AST File I/O mechanism.
   89645             :        */
   89646             :           virtual bool isInMemoryPool() override;
   89647             : 
   89648             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   89649             : 
   89650             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   89651             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   89652             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   89653             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   89654             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   89655             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   89656             :           being used with the AST File I/O mechanism.
   89657             :        */
   89658             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   89659             : 
   89660             :       // DQ (4/30/2006): Modified to be a const function.
   89661             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   89662             : 
   89663             :           This functions is part of general support for many possible tools to operate 
   89664             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   89665             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   89666             :           less than the set of pointers used by the AST file I/O. This is part of
   89667             :           work implemented by Andreas, and support tools such as the AST graph generation.
   89668             : 
   89669             :           \warning This function can return unexpected data members and thus the 
   89670             :                    order and the number of elements is unpredicable and subject 
   89671             :                    to change.
   89672             : 
   89673             :           \returns STL vector of pairs of SgNode* and strings
   89674             :        */
   89675             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   89676             : 
   89677             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   89678             : 
   89679             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   89680             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   89681             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   89682             : 
   89683             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   89684             :                    and subject to change.
   89685             :        */
   89686             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   89687             : 
   89688             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   89689             : 
   89690             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   89691             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   89692             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   89693             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   89694             : 
   89695             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   89696             : 
   89697             :           \returns long
   89698             :        */
   89699             :           virtual long getChildIndex( SgNode* childNode ) const override;
   89700             : 
   89701             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   89702             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   89703             :       /* \brief Constructor for use by AST File I/O Mechanism
   89704             : 
   89705             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   89706             :           which obtained via fast binary file I/O from disk.
   89707             :        */
   89708             :        // SgOmpDynamicAllocatorsClause( SgOmpDynamicAllocatorsClauseStorageClass& source );
   89709             : 
   89710             : 
   89711             : 
   89712             : 
   89713             : 
   89714             :  // JH (10/24/2005): methods added to support the ast file IO
   89715             :     private:
   89716             : 
   89717             :       /* name AST Memory Allocation Support Functions
   89718             :           \brief Memory allocations support....
   89719             : 
   89720             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   89721             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   89722             :           and support the AST File I/O Mechanism.
   89723             :        */
   89724             :       /* */
   89725             : 
   89726             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   89727             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   89728             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   89729             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   89730             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   89731             :           a correspinding one in the AST_FILE_IO class!
   89732             :        */
   89733             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   89734             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   89735             :       /* \brief Typedef used for low level memory access.
   89736             :        */
   89737             :        // typedef unsigned char* TestType;
   89738             : 
   89739             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   89740             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   89741             :       /* \brief Typedef used to hold memory addresses as values.
   89742             :        */
   89743             :        // typedef unsigned long  AddressType;
   89744             : 
   89745             : 
   89746             : 
   89747             :        // necessary, to have direct access to the p_freepointer and the private methods !
   89748             :       /*! \brief friend class declaration to support AST File I/O */
   89749             :           friend class AST_FILE_IO;
   89750             : 
   89751             :       /*! \brief friend class declaration to support AST File I/O */
   89752             :           friend class SgOmpDynamicAllocatorsClauseStorageClass;
   89753             : 
   89754             :       /*! \brief friend class declaration to support AST File I/O */
   89755             :           friend class AstSpecificDataManagingClass;
   89756             : 
   89757             :       /*! \brief friend class declaration to support AST File I/O */
   89758             :           friend class AstSpecificDataManagingClassStorageClass;
   89759             :     public:
   89760             :       /*! \brief IR node constructor to support AST File I/O */
   89761             :           SgOmpDynamicAllocatorsClause( const SgOmpDynamicAllocatorsClauseStorageClass& source );
   89762             : 
   89763             :  // private: // JJW hack
   89764             :        /*
   89765             :           name AST Memory Allocation Support Variables
   89766             :           Memory allocations support variables 
   89767             : 
   89768             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   89769             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   89770             :           and support the AST File I/O Mechanism.
   89771             :        */
   89772             :       /* */
   89773             : 
   89774             :     public:
   89775             : 
   89776             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   89777             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   89778             :       // virtual SgNode* addRegExpAttribute();
   89779             :       /*! \brief Support for AST matching using regular expression.
   89780             : 
   89781             :           This support is incomplete and the subject of current research to define 
   89782             :           RegEx trees to support inexact matching.
   89783             :        */
   89784             :           SgOmpDynamicAllocatorsClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   89785             : 
   89786             : // *** COMMON CODE SECTION ENDS HERE ***
   89787             : 
   89788             : 
   89789             : // End of memberFunctionString
   89790             : // Start of memberFunctionString
   89791             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   89792             : 
   89793             :      // the generated cast function
   89794             :      // friend ROSE_DLL_API SgOmpDynamicAllocatorsClause* isSgOmpDynamicAllocatorsClause ( SgNode* s );
   89795             : 
   89796             :           typedef SgOmpClause base_node_type;
   89797             : 
   89798             : 
   89799             : // End of memberFunctionString
   89800             : 
   89801             : 
   89802             :      public: 
   89803             :          virtual ~SgOmpDynamicAllocatorsClause();
   89804             : 
   89805             : 
   89806             :      public: 
   89807             :          SgOmpDynamicAllocatorsClause(Sg_File_Info* startOfConstruct ); 
   89808             :          SgOmpDynamicAllocatorsClause(); 
   89809             : 
   89810             :     protected:
   89811             : 
   89812             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDynamicAllocatorsClause>;
   89813             : 
   89814             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89815             : 
   89816             : 
   89817             :    };
   89818             : #endif
   89819             : 
   89820             : // postdeclarations for SgOmpDynamicAllocatorsClause
   89821             : 
   89822             : /* #line 89823 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89823             : 
   89824             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   89825             : 
   89826             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89827             : 
   89828             : 
   89829             : /* #line 89830 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89830             : 
   89831             : 
   89832             : 
   89833             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89834             : 
   89835             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   89836             : //      This code is automatically generated for each 
   89837             : //      terminal and non-terminal within the defined 
   89838             : //      grammar.  There is a simple way to change the 
   89839             : //      code to fix bugs etc.  See the ROSE README file
   89840             : //      for directions.
   89841             : 
   89842             : // tps: (02/22/2010): Adding DLL export requirements
   89843             : #include "rosedll.h"
   89844             : 
   89845             : // predeclarations for SgOmpParallelClause
   89846             : 
   89847             : /* #line 89848 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89848             : 
   89849             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   89850             : 
   89851             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   89852             : 
   89853             : #if 1
   89854             : // Class Definition for SgOmpParallelClause
   89855             : class ROSE_DLL_API SgOmpParallelClause  : public SgOmpClause
   89856             :    {
   89857             :      public:
   89858             : 
   89859             : 
   89860             : /* #line 89861 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   89861             : 
   89862             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   89863             : // Start of memberFunctionString
   89864             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   89865             : 
   89866             : // *** COMMON CODE SECTION BEGINS HERE ***
   89867             : 
   89868             :     public:
   89869             : 
   89870             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   89871             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   89872             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   89873             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   89874             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   89875             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   89876             : 
   89877             :       /*! \brief returns a string representing the class name */
   89878             :           virtual std::string class_name() const override;
   89879             : 
   89880             :       /*! \brief returns new style SageIII enum values */
   89881             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   89882             : 
   89883             :       /*! \brief static variant value */
   89884             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   89885             :        // static const VariantT static_variant = V_SgOmpParallelClause;
   89886             :           enum { static_variant = V_SgOmpParallelClause };
   89887             : 
   89888             :        /* the generated cast function */
   89889             :       /*! \brief Casts pointer from base class to derived class */
   89890             :           ROSE_DLL_API friend       SgOmpParallelClause* isSgOmpParallelClause(       SgNode * s );
   89891             : 
   89892             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   89893             :           ROSE_DLL_API friend const SgOmpParallelClause* isSgOmpParallelClause( const SgNode * s );
   89894             : 
   89895             :      // ******************************************
   89896             :      // * Memory Pool / New / Delete
   89897             :      // ******************************************
   89898             : 
   89899             :      public:
   89900             :           /// \private
   89901             :           static const unsigned pool_size; //
   89902             :           /// \private
   89903             :           static std::vector<unsigned char *> pools; //
   89904             :           /// \private
   89905             :           static SgOmpParallelClause * next_node; // 
   89906             : 
   89907             :           /// \private
   89908             :           static unsigned long initializeStorageClassArray(SgOmpParallelClauseStorageClass *); //
   89909             : 
   89910             :           /// \private
   89911             :           static void clearMemoryPool(); //
   89912             :           static void deleteMemoryPool(); //
   89913             : 
   89914             :           /// \private
   89915             :           static void extendMemoryPoolForFileIO(); //
   89916             : 
   89917             :           /// \private
   89918             :           static SgOmpParallelClause * getPointerFromGlobalIndex(unsigned long); //
   89919             :           /// \private
   89920             :           static SgOmpParallelClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   89921             : 
   89922             :           /// \private
   89923             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   89924             :           /// \private
   89925             :           static void resetValidFreepointers(); //
   89926             :           /// \private
   89927             :           static unsigned long getNumberOfLastValidPointer(); //
   89928             : 
   89929             : 
   89930             : #if defined(INLINE_FUNCTIONS)
   89931             :       /*! \brief returns pointer to newly allocated IR node */
   89932             :           inline void *operator new (size_t size);
   89933             : #else
   89934             :       /*! \brief returns pointer to newly allocated IR node */
   89935             :           void *operator new (size_t size);
   89936             : #endif
   89937             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   89938             :           void operator delete (void* pointer, size_t size);
   89939             : 
   89940             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   89941           0 :           void operator delete (void* pointer)
   89942             :              {
   89943             :             // This is the generated delete operator...
   89944           0 :                SgOmpParallelClause::operator delete (pointer,sizeof(SgOmpParallelClause));
   89945             :              }
   89946             : 
   89947             :       /*! \brief Returns the total number of IR nodes of this type */
   89948             :           static size_t numberOfNodes();
   89949             : 
   89950             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   89951             :           static size_t memoryUsage();
   89952             : 
   89953             :       // End of scope which started in IR nodes specific code 
   89954             :       /* */
   89955             : 
   89956             :       /* name Internal Functions
   89957             :           \brief Internal functions ... incomplete-documentation
   89958             : 
   89959             :           These functions have been made public as part of the design, but they are suggested for internal use 
   89960             :           or by particularly knowledgeable users for specialized tools or applications.
   89961             : 
   89962             :           \internal We could not make these private because they are required by user for special purposes. And 
   89963             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   89964             :          
   89965             :        */
   89966             : 
   89967             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   89968             :        // overridden in every class by *generated* implementation
   89969             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   89970             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   89971             :        // MS: 06/28/02 container of names of variables or container indices 
   89972             :        // used used in the traversal to access AST successor nodes
   89973             :        // overridden in every class by *generated* implementation
   89974             :       /*! \brief container of names of variables or container indices used used in the traversal
   89975             :           to access AST successor nodes overridden in every class by *generated* implementation */
   89976             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   89977             : 
   89978             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   89979             :        // than all the vector copies. The implementation for these functions is generated for each class.
   89980             :       /*! \brief return number of children in the traversal successor list */
   89981             :           virtual size_t get_numberOfTraversalSuccessors() override;
   89982             :       /*! \brief index-based access to traversal successors by index number */
   89983             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   89984             :       /*! \brief index-based access to traversal successors by child node */
   89985             :           virtual size_t get_childIndex(SgNode *child) override;
   89986             : 
   89987             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   89988             :        // MS: 08/16/2002 method for generating RTI information
   89989             :       /*! \brief return C++ Runtime-Time-Information */
   89990             :           virtual RTIReturnType roseRTI() override;
   89991             : #endif
   89992             :       /* */
   89993             : 
   89994             : 
   89995             : 
   89996             :       /* name Deprecated Functions
   89997             :           \brief Deprecated functions ... incomplete-documentation
   89998             : 
   89999             :           These functions have been deprecated from use.
   90000             :        */
   90001             :       /* */
   90002             : 
   90003             :       /*! returns a C style string (char*) representing the class name */
   90004             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   90005             : 
   90006             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   90007             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   90008             : #if 0
   90009             :       /*! returns old style Sage II enum values */
   90010             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   90011             :       /*! returns old style Sage II enum values */
   90012             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   90013             : #endif
   90014             :       /* */
   90015             : 
   90016             : 
   90017             : 
   90018             : 
   90019             :      public:
   90020             :       /* name Traversal Support Functions
   90021             :           \brief Traversal support functions ... incomplete-documentation
   90022             : 
   90023             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90024             :           or by particularly knowledgable users for specialized tools or applications.
   90025             :        */
   90026             :       /* */
   90027             : 
   90028             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   90029             :        // (inferior to ROSE traversal mechanism, experimental).
   90030             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   90031             :        */
   90032             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   90033             : 
   90034             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   90035             :       /*! \brief support for the classic visitor pattern done in GoF */
   90036             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   90037             : 
   90038             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   90039             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   90040             :        */
   90041             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   90042             : 
   90043             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   90044             :        */
   90045             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   90046             : 
   90047             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   90048             :        // This traversal helps support internal tools that call static member functions.
   90049             :        // note: this function operates on the memory pools.
   90050             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   90051             :        */
   90052             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   90053             :       /* */
   90054             : 
   90055             : 
   90056             :      public:
   90057             :       /* name Memory Allocation Functions
   90058             :           \brief Memory allocations functions ... incomplete-documentation
   90059             : 
   90060             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90061             :           or by particularly knowledgable users for specialized tools or applications.
   90062             :        */
   90063             :       /* */
   90064             : 
   90065             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   90066             : 
   90067             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   90068             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   90069             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   90070             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   90071             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   90072             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   90073             :           being used with the AST File I/O mechanism.
   90074             :        */
   90075             :           virtual bool isInMemoryPool() override;
   90076             : 
   90077             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   90078             : 
   90079             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   90080             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   90081             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   90082             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   90083             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   90084             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   90085             :           being used with the AST File I/O mechanism.
   90086             :        */
   90087             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   90088             : 
   90089             :       // DQ (4/30/2006): Modified to be a const function.
   90090             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   90091             : 
   90092             :           This functions is part of general support for many possible tools to operate 
   90093             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   90094             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   90095             :           less than the set of pointers used by the AST file I/O. This is part of
   90096             :           work implemented by Andreas, and support tools such as the AST graph generation.
   90097             : 
   90098             :           \warning This function can return unexpected data members and thus the 
   90099             :                    order and the number of elements is unpredicable and subject 
   90100             :                    to change.
   90101             : 
   90102             :           \returns STL vector of pairs of SgNode* and strings
   90103             :        */
   90104             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   90105             : 
   90106             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   90107             : 
   90108             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   90109             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   90110             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   90111             : 
   90112             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   90113             :                    and subject to change.
   90114             :        */
   90115             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   90116             : 
   90117             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   90118             : 
   90119             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   90120             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   90121             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   90122             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   90123             : 
   90124             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   90125             : 
   90126             :           \returns long
   90127             :        */
   90128             :           virtual long getChildIndex( SgNode* childNode ) const override;
   90129             : 
   90130             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   90131             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   90132             :       /* \brief Constructor for use by AST File I/O Mechanism
   90133             : 
   90134             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   90135             :           which obtained via fast binary file I/O from disk.
   90136             :        */
   90137             :        // SgOmpParallelClause( SgOmpParallelClauseStorageClass& source );
   90138             : 
   90139             : 
   90140             : 
   90141             : 
   90142             : 
   90143             :  // JH (10/24/2005): methods added to support the ast file IO
   90144             :     private:
   90145             : 
   90146             :       /* name AST Memory Allocation Support Functions
   90147             :           \brief Memory allocations support....
   90148             : 
   90149             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   90150             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   90151             :           and support the AST File I/O Mechanism.
   90152             :        */
   90153             :       /* */
   90154             : 
   90155             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   90156             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   90157             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   90158             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   90159             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   90160             :           a correspinding one in the AST_FILE_IO class!
   90161             :        */
   90162             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   90163             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   90164             :       /* \brief Typedef used for low level memory access.
   90165             :        */
   90166             :        // typedef unsigned char* TestType;
   90167             : 
   90168             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   90169             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   90170             :       /* \brief Typedef used to hold memory addresses as values.
   90171             :        */
   90172             :        // typedef unsigned long  AddressType;
   90173             : 
   90174             : 
   90175             : 
   90176             :        // necessary, to have direct access to the p_freepointer and the private methods !
   90177             :       /*! \brief friend class declaration to support AST File I/O */
   90178             :           friend class AST_FILE_IO;
   90179             : 
   90180             :       /*! \brief friend class declaration to support AST File I/O */
   90181             :           friend class SgOmpParallelClauseStorageClass;
   90182             : 
   90183             :       /*! \brief friend class declaration to support AST File I/O */
   90184             :           friend class AstSpecificDataManagingClass;
   90185             : 
   90186             :       /*! \brief friend class declaration to support AST File I/O */
   90187             :           friend class AstSpecificDataManagingClassStorageClass;
   90188             :     public:
   90189             :       /*! \brief IR node constructor to support AST File I/O */
   90190             :           SgOmpParallelClause( const SgOmpParallelClauseStorageClass& source );
   90191             : 
   90192             :  // private: // JJW hack
   90193             :        /*
   90194             :           name AST Memory Allocation Support Variables
   90195             :           Memory allocations support variables 
   90196             : 
   90197             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   90198             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   90199             :           and support the AST File I/O Mechanism.
   90200             :        */
   90201             :       /* */
   90202             : 
   90203             :     public:
   90204             : 
   90205             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   90206             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   90207             :       // virtual SgNode* addRegExpAttribute();
   90208             :       /*! \brief Support for AST matching using regular expression.
   90209             : 
   90210             :           This support is incomplete and the subject of current research to define 
   90211             :           RegEx trees to support inexact matching.
   90212             :        */
   90213             :           SgOmpParallelClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   90214             : 
   90215             : // *** COMMON CODE SECTION ENDS HERE ***
   90216             : 
   90217             : 
   90218             : // End of memberFunctionString
   90219             : // Start of memberFunctionString
   90220             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   90221             : 
   90222             :      // the generated cast function
   90223             :      // friend ROSE_DLL_API SgOmpParallelClause* isSgOmpParallelClause ( SgNode* s );
   90224             : 
   90225             :           typedef SgOmpClause base_node_type;
   90226             : 
   90227             : 
   90228             : // End of memberFunctionString
   90229             : 
   90230             : 
   90231             :      public: 
   90232             :          virtual ~SgOmpParallelClause();
   90233             : 
   90234             : 
   90235             :      public: 
   90236             :          SgOmpParallelClause(Sg_File_Info* startOfConstruct ); 
   90237             :          SgOmpParallelClause(); 
   90238             : 
   90239             :     protected:
   90240             : 
   90241             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpParallelClause>;
   90242             : 
   90243             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90244             : 
   90245             : 
   90246             :    };
   90247             : #endif
   90248             : 
   90249             : // postdeclarations for SgOmpParallelClause
   90250             : 
   90251             : /* #line 90252 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90252             : 
   90253             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   90254             : 
   90255             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90256             : 
   90257             : 
   90258             : /* #line 90259 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90259             : 
   90260             : 
   90261             : 
   90262             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90263             : 
   90264             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   90265             : //      This code is automatically generated for each 
   90266             : //      terminal and non-terminal within the defined 
   90267             : //      grammar.  There is a simple way to change the 
   90268             : //      code to fix bugs etc.  See the ROSE README file
   90269             : //      for directions.
   90270             : 
   90271             : // tps: (02/22/2010): Adding DLL export requirements
   90272             : #include "rosedll.h"
   90273             : 
   90274             : // predeclarations for SgOmpSectionsClause
   90275             : 
   90276             : /* #line 90277 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90277             : 
   90278             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   90279             : 
   90280             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90281             : 
   90282             : #if 1
   90283             : // Class Definition for SgOmpSectionsClause
   90284             : class ROSE_DLL_API SgOmpSectionsClause  : public SgOmpClause
   90285             :    {
   90286             :      public:
   90287             : 
   90288             : 
   90289             : /* #line 90290 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90290             : 
   90291             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   90292             : // Start of memberFunctionString
   90293             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   90294             : 
   90295             : // *** COMMON CODE SECTION BEGINS HERE ***
   90296             : 
   90297             :     public:
   90298             : 
   90299             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   90300             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   90301             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   90302             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   90303             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   90304             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   90305             : 
   90306             :       /*! \brief returns a string representing the class name */
   90307             :           virtual std::string class_name() const override;
   90308             : 
   90309             :       /*! \brief returns new style SageIII enum values */
   90310             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   90311             : 
   90312             :       /*! \brief static variant value */
   90313             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   90314             :        // static const VariantT static_variant = V_SgOmpSectionsClause;
   90315             :           enum { static_variant = V_SgOmpSectionsClause };
   90316             : 
   90317             :        /* the generated cast function */
   90318             :       /*! \brief Casts pointer from base class to derived class */
   90319             :           ROSE_DLL_API friend       SgOmpSectionsClause* isSgOmpSectionsClause(       SgNode * s );
   90320             : 
   90321             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   90322             :           ROSE_DLL_API friend const SgOmpSectionsClause* isSgOmpSectionsClause( const SgNode * s );
   90323             : 
   90324             :      // ******************************************
   90325             :      // * Memory Pool / New / Delete
   90326             :      // ******************************************
   90327             : 
   90328             :      public:
   90329             :           /// \private
   90330             :           static const unsigned pool_size; //
   90331             :           /// \private
   90332             :           static std::vector<unsigned char *> pools; //
   90333             :           /// \private
   90334             :           static SgOmpSectionsClause * next_node; // 
   90335             : 
   90336             :           /// \private
   90337             :           static unsigned long initializeStorageClassArray(SgOmpSectionsClauseStorageClass *); //
   90338             : 
   90339             :           /// \private
   90340             :           static void clearMemoryPool(); //
   90341             :           static void deleteMemoryPool(); //
   90342             : 
   90343             :           /// \private
   90344             :           static void extendMemoryPoolForFileIO(); //
   90345             : 
   90346             :           /// \private
   90347             :           static SgOmpSectionsClause * getPointerFromGlobalIndex(unsigned long); //
   90348             :           /// \private
   90349             :           static SgOmpSectionsClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   90350             : 
   90351             :           /// \private
   90352             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   90353             :           /// \private
   90354             :           static void resetValidFreepointers(); //
   90355             :           /// \private
   90356             :           static unsigned long getNumberOfLastValidPointer(); //
   90357             : 
   90358             : 
   90359             : #if defined(INLINE_FUNCTIONS)
   90360             :       /*! \brief returns pointer to newly allocated IR node */
   90361             :           inline void *operator new (size_t size);
   90362             : #else
   90363             :       /*! \brief returns pointer to newly allocated IR node */
   90364             :           void *operator new (size_t size);
   90365             : #endif
   90366             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   90367             :           void operator delete (void* pointer, size_t size);
   90368             : 
   90369             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   90370           0 :           void operator delete (void* pointer)
   90371             :              {
   90372             :             // This is the generated delete operator...
   90373           0 :                SgOmpSectionsClause::operator delete (pointer,sizeof(SgOmpSectionsClause));
   90374             :              }
   90375             : 
   90376             :       /*! \brief Returns the total number of IR nodes of this type */
   90377             :           static size_t numberOfNodes();
   90378             : 
   90379             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   90380             :           static size_t memoryUsage();
   90381             : 
   90382             :       // End of scope which started in IR nodes specific code 
   90383             :       /* */
   90384             : 
   90385             :       /* name Internal Functions
   90386             :           \brief Internal functions ... incomplete-documentation
   90387             : 
   90388             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90389             :           or by particularly knowledgeable users for specialized tools or applications.
   90390             : 
   90391             :           \internal We could not make these private because they are required by user for special purposes. And 
   90392             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   90393             :          
   90394             :        */
   90395             : 
   90396             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   90397             :        // overridden in every class by *generated* implementation
   90398             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   90399             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   90400             :        // MS: 06/28/02 container of names of variables or container indices 
   90401             :        // used used in the traversal to access AST successor nodes
   90402             :        // overridden in every class by *generated* implementation
   90403             :       /*! \brief container of names of variables or container indices used used in the traversal
   90404             :           to access AST successor nodes overridden in every class by *generated* implementation */
   90405             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   90406             : 
   90407             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   90408             :        // than all the vector copies. The implementation for these functions is generated for each class.
   90409             :       /*! \brief return number of children in the traversal successor list */
   90410             :           virtual size_t get_numberOfTraversalSuccessors() override;
   90411             :       /*! \brief index-based access to traversal successors by index number */
   90412             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   90413             :       /*! \brief index-based access to traversal successors by child node */
   90414             :           virtual size_t get_childIndex(SgNode *child) override;
   90415             : 
   90416             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   90417             :        // MS: 08/16/2002 method for generating RTI information
   90418             :       /*! \brief return C++ Runtime-Time-Information */
   90419             :           virtual RTIReturnType roseRTI() override;
   90420             : #endif
   90421             :       /* */
   90422             : 
   90423             : 
   90424             : 
   90425             :       /* name Deprecated Functions
   90426             :           \brief Deprecated functions ... incomplete-documentation
   90427             : 
   90428             :           These functions have been deprecated from use.
   90429             :        */
   90430             :       /* */
   90431             : 
   90432             :       /*! returns a C style string (char*) representing the class name */
   90433             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   90434             : 
   90435             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   90436             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   90437             : #if 0
   90438             :       /*! returns old style Sage II enum values */
   90439             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   90440             :       /*! returns old style Sage II enum values */
   90441             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   90442             : #endif
   90443             :       /* */
   90444             : 
   90445             : 
   90446             : 
   90447             : 
   90448             :      public:
   90449             :       /* name Traversal Support Functions
   90450             :           \brief Traversal support functions ... incomplete-documentation
   90451             : 
   90452             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90453             :           or by particularly knowledgable users for specialized tools or applications.
   90454             :        */
   90455             :       /* */
   90456             : 
   90457             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   90458             :        // (inferior to ROSE traversal mechanism, experimental).
   90459             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   90460             :        */
   90461             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   90462             : 
   90463             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   90464             :       /*! \brief support for the classic visitor pattern done in GoF */
   90465             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   90466             : 
   90467             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   90468             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   90469             :        */
   90470             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   90471             : 
   90472             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   90473             :        */
   90474             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   90475             : 
   90476             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   90477             :        // This traversal helps support internal tools that call static member functions.
   90478             :        // note: this function operates on the memory pools.
   90479             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   90480             :        */
   90481             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   90482             :       /* */
   90483             : 
   90484             : 
   90485             :      public:
   90486             :       /* name Memory Allocation Functions
   90487             :           \brief Memory allocations functions ... incomplete-documentation
   90488             : 
   90489             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90490             :           or by particularly knowledgable users for specialized tools or applications.
   90491             :        */
   90492             :       /* */
   90493             : 
   90494             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   90495             : 
   90496             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   90497             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   90498             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   90499             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   90500             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   90501             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   90502             :           being used with the AST File I/O mechanism.
   90503             :        */
   90504             :           virtual bool isInMemoryPool() override;
   90505             : 
   90506             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   90507             : 
   90508             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   90509             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   90510             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   90511             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   90512             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   90513             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   90514             :           being used with the AST File I/O mechanism.
   90515             :        */
   90516             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   90517             : 
   90518             :       // DQ (4/30/2006): Modified to be a const function.
   90519             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   90520             : 
   90521             :           This functions is part of general support for many possible tools to operate 
   90522             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   90523             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   90524             :           less than the set of pointers used by the AST file I/O. This is part of
   90525             :           work implemented by Andreas, and support tools such as the AST graph generation.
   90526             : 
   90527             :           \warning This function can return unexpected data members and thus the 
   90528             :                    order and the number of elements is unpredicable and subject 
   90529             :                    to change.
   90530             : 
   90531             :           \returns STL vector of pairs of SgNode* and strings
   90532             :        */
   90533             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   90534             : 
   90535             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   90536             : 
   90537             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   90538             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   90539             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   90540             : 
   90541             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   90542             :                    and subject to change.
   90543             :        */
   90544             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   90545             : 
   90546             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   90547             : 
   90548             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   90549             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   90550             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   90551             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   90552             : 
   90553             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   90554             : 
   90555             :           \returns long
   90556             :        */
   90557             :           virtual long getChildIndex( SgNode* childNode ) const override;
   90558             : 
   90559             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   90560             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   90561             :       /* \brief Constructor for use by AST File I/O Mechanism
   90562             : 
   90563             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   90564             :           which obtained via fast binary file I/O from disk.
   90565             :        */
   90566             :        // SgOmpSectionsClause( SgOmpSectionsClauseStorageClass& source );
   90567             : 
   90568             : 
   90569             : 
   90570             : 
   90571             : 
   90572             :  // JH (10/24/2005): methods added to support the ast file IO
   90573             :     private:
   90574             : 
   90575             :       /* name AST Memory Allocation Support Functions
   90576             :           \brief Memory allocations support....
   90577             : 
   90578             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   90579             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   90580             :           and support the AST File I/O Mechanism.
   90581             :        */
   90582             :       /* */
   90583             : 
   90584             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   90585             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   90586             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   90587             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   90588             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   90589             :           a correspinding one in the AST_FILE_IO class!
   90590             :        */
   90591             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   90592             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   90593             :       /* \brief Typedef used for low level memory access.
   90594             :        */
   90595             :        // typedef unsigned char* TestType;
   90596             : 
   90597             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   90598             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   90599             :       /* \brief Typedef used to hold memory addresses as values.
   90600             :        */
   90601             :        // typedef unsigned long  AddressType;
   90602             : 
   90603             : 
   90604             : 
   90605             :        // necessary, to have direct access to the p_freepointer and the private methods !
   90606             :       /*! \brief friend class declaration to support AST File I/O */
   90607             :           friend class AST_FILE_IO;
   90608             : 
   90609             :       /*! \brief friend class declaration to support AST File I/O */
   90610             :           friend class SgOmpSectionsClauseStorageClass;
   90611             : 
   90612             :       /*! \brief friend class declaration to support AST File I/O */
   90613             :           friend class AstSpecificDataManagingClass;
   90614             : 
   90615             :       /*! \brief friend class declaration to support AST File I/O */
   90616             :           friend class AstSpecificDataManagingClassStorageClass;
   90617             :     public:
   90618             :       /*! \brief IR node constructor to support AST File I/O */
   90619             :           SgOmpSectionsClause( const SgOmpSectionsClauseStorageClass& source );
   90620             : 
   90621             :  // private: // JJW hack
   90622             :        /*
   90623             :           name AST Memory Allocation Support Variables
   90624             :           Memory allocations support variables 
   90625             : 
   90626             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   90627             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   90628             :           and support the AST File I/O Mechanism.
   90629             :        */
   90630             :       /* */
   90631             : 
   90632             :     public:
   90633             : 
   90634             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   90635             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   90636             :       // virtual SgNode* addRegExpAttribute();
   90637             :       /*! \brief Support for AST matching using regular expression.
   90638             : 
   90639             :           This support is incomplete and the subject of current research to define 
   90640             :           RegEx trees to support inexact matching.
   90641             :        */
   90642             :           SgOmpSectionsClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   90643             : 
   90644             : // *** COMMON CODE SECTION ENDS HERE ***
   90645             : 
   90646             : 
   90647             : // End of memberFunctionString
   90648             : // Start of memberFunctionString
   90649             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   90650             : 
   90651             :      // the generated cast function
   90652             :      // friend ROSE_DLL_API SgOmpSectionsClause* isSgOmpSectionsClause ( SgNode* s );
   90653             : 
   90654             :           typedef SgOmpClause base_node_type;
   90655             : 
   90656             : 
   90657             : // End of memberFunctionString
   90658             : 
   90659             : 
   90660             :      public: 
   90661             :          virtual ~SgOmpSectionsClause();
   90662             : 
   90663             : 
   90664             :      public: 
   90665             :          SgOmpSectionsClause(Sg_File_Info* startOfConstruct ); 
   90666             :          SgOmpSectionsClause(); 
   90667             : 
   90668             :     protected:
   90669             : 
   90670             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSectionsClause>;
   90671             : 
   90672             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90673             : 
   90674             : 
   90675             :    };
   90676             : #endif
   90677             : 
   90678             : // postdeclarations for SgOmpSectionsClause
   90679             : 
   90680             : /* #line 90681 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90681             : 
   90682             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   90683             : 
   90684             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90685             : 
   90686             : 
   90687             : /* #line 90688 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90688             : 
   90689             : 
   90690             : 
   90691             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90692             : 
   90693             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   90694             : //      This code is automatically generated for each 
   90695             : //      terminal and non-terminal within the defined 
   90696             : //      grammar.  There is a simple way to change the 
   90697             : //      code to fix bugs etc.  See the ROSE README file
   90698             : //      for directions.
   90699             : 
   90700             : // tps: (02/22/2010): Adding DLL export requirements
   90701             : #include "rosedll.h"
   90702             : 
   90703             : // predeclarations for SgOmpForClause
   90704             : 
   90705             : /* #line 90706 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90706             : 
   90707             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   90708             : 
   90709             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   90710             : 
   90711             : #if 1
   90712             : // Class Definition for SgOmpForClause
   90713             : class ROSE_DLL_API SgOmpForClause  : public SgOmpClause
   90714             :    {
   90715             :      public:
   90716             : 
   90717             : 
   90718             : /* #line 90719 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   90719             : 
   90720             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   90721             : // Start of memberFunctionString
   90722             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   90723             : 
   90724             : // *** COMMON CODE SECTION BEGINS HERE ***
   90725             : 
   90726             :     public:
   90727             : 
   90728             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   90729             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   90730             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   90731             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   90732             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   90733             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   90734             : 
   90735             :       /*! \brief returns a string representing the class name */
   90736             :           virtual std::string class_name() const override;
   90737             : 
   90738             :       /*! \brief returns new style SageIII enum values */
   90739             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   90740             : 
   90741             :       /*! \brief static variant value */
   90742             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   90743             :        // static const VariantT static_variant = V_SgOmpForClause;
   90744             :           enum { static_variant = V_SgOmpForClause };
   90745             : 
   90746             :        /* the generated cast function */
   90747             :       /*! \brief Casts pointer from base class to derived class */
   90748             :           ROSE_DLL_API friend       SgOmpForClause* isSgOmpForClause(       SgNode * s );
   90749             : 
   90750             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   90751             :           ROSE_DLL_API friend const SgOmpForClause* isSgOmpForClause( const SgNode * s );
   90752             : 
   90753             :      // ******************************************
   90754             :      // * Memory Pool / New / Delete
   90755             :      // ******************************************
   90756             : 
   90757             :      public:
   90758             :           /// \private
   90759             :           static const unsigned pool_size; //
   90760             :           /// \private
   90761             :           static std::vector<unsigned char *> pools; //
   90762             :           /// \private
   90763             :           static SgOmpForClause * next_node; // 
   90764             : 
   90765             :           /// \private
   90766             :           static unsigned long initializeStorageClassArray(SgOmpForClauseStorageClass *); //
   90767             : 
   90768             :           /// \private
   90769             :           static void clearMemoryPool(); //
   90770             :           static void deleteMemoryPool(); //
   90771             : 
   90772             :           /// \private
   90773             :           static void extendMemoryPoolForFileIO(); //
   90774             : 
   90775             :           /// \private
   90776             :           static SgOmpForClause * getPointerFromGlobalIndex(unsigned long); //
   90777             :           /// \private
   90778             :           static SgOmpForClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   90779             : 
   90780             :           /// \private
   90781             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   90782             :           /// \private
   90783             :           static void resetValidFreepointers(); //
   90784             :           /// \private
   90785             :           static unsigned long getNumberOfLastValidPointer(); //
   90786             : 
   90787             : 
   90788             : #if defined(INLINE_FUNCTIONS)
   90789             :       /*! \brief returns pointer to newly allocated IR node */
   90790             :           inline void *operator new (size_t size);
   90791             : #else
   90792             :       /*! \brief returns pointer to newly allocated IR node */
   90793             :           void *operator new (size_t size);
   90794             : #endif
   90795             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   90796             :           void operator delete (void* pointer, size_t size);
   90797             : 
   90798             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   90799           0 :           void operator delete (void* pointer)
   90800             :              {
   90801             :             // This is the generated delete operator...
   90802           0 :                SgOmpForClause::operator delete (pointer,sizeof(SgOmpForClause));
   90803             :              }
   90804             : 
   90805             :       /*! \brief Returns the total number of IR nodes of this type */
   90806             :           static size_t numberOfNodes();
   90807             : 
   90808             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   90809             :           static size_t memoryUsage();
   90810             : 
   90811             :       // End of scope which started in IR nodes specific code 
   90812             :       /* */
   90813             : 
   90814             :       /* name Internal Functions
   90815             :           \brief Internal functions ... incomplete-documentation
   90816             : 
   90817             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90818             :           or by particularly knowledgeable users for specialized tools or applications.
   90819             : 
   90820             :           \internal We could not make these private because they are required by user for special purposes. And 
   90821             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   90822             :          
   90823             :        */
   90824             : 
   90825             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   90826             :        // overridden in every class by *generated* implementation
   90827             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   90828             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   90829             :        // MS: 06/28/02 container of names of variables or container indices 
   90830             :        // used used in the traversal to access AST successor nodes
   90831             :        // overridden in every class by *generated* implementation
   90832             :       /*! \brief container of names of variables or container indices used used in the traversal
   90833             :           to access AST successor nodes overridden in every class by *generated* implementation */
   90834             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   90835             : 
   90836             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   90837             :        // than all the vector copies. The implementation for these functions is generated for each class.
   90838             :       /*! \brief return number of children in the traversal successor list */
   90839             :           virtual size_t get_numberOfTraversalSuccessors() override;
   90840             :       /*! \brief index-based access to traversal successors by index number */
   90841             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   90842             :       /*! \brief index-based access to traversal successors by child node */
   90843             :           virtual size_t get_childIndex(SgNode *child) override;
   90844             : 
   90845             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   90846             :        // MS: 08/16/2002 method for generating RTI information
   90847             :       /*! \brief return C++ Runtime-Time-Information */
   90848             :           virtual RTIReturnType roseRTI() override;
   90849             : #endif
   90850             :       /* */
   90851             : 
   90852             : 
   90853             : 
   90854             :       /* name Deprecated Functions
   90855             :           \brief Deprecated functions ... incomplete-documentation
   90856             : 
   90857             :           These functions have been deprecated from use.
   90858             :        */
   90859             :       /* */
   90860             : 
   90861             :       /*! returns a C style string (char*) representing the class name */
   90862             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   90863             : 
   90864             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   90865             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   90866             : #if 0
   90867             :       /*! returns old style Sage II enum values */
   90868             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   90869             :       /*! returns old style Sage II enum values */
   90870             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   90871             : #endif
   90872             :       /* */
   90873             : 
   90874             : 
   90875             : 
   90876             : 
   90877             :      public:
   90878             :       /* name Traversal Support Functions
   90879             :           \brief Traversal support functions ... incomplete-documentation
   90880             : 
   90881             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90882             :           or by particularly knowledgable users for specialized tools or applications.
   90883             :        */
   90884             :       /* */
   90885             : 
   90886             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   90887             :        // (inferior to ROSE traversal mechanism, experimental).
   90888             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   90889             :        */
   90890             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   90891             : 
   90892             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   90893             :       /*! \brief support for the classic visitor pattern done in GoF */
   90894             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   90895             : 
   90896             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   90897             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   90898             :        */
   90899             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   90900             : 
   90901             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   90902             :        */
   90903             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   90904             : 
   90905             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   90906             :        // This traversal helps support internal tools that call static member functions.
   90907             :        // note: this function operates on the memory pools.
   90908             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   90909             :        */
   90910             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   90911             :       /* */
   90912             : 
   90913             : 
   90914             :      public:
   90915             :       /* name Memory Allocation Functions
   90916             :           \brief Memory allocations functions ... incomplete-documentation
   90917             : 
   90918             :           These functions have been made public as part of the design, but they are suggested for internal use 
   90919             :           or by particularly knowledgable users for specialized tools or applications.
   90920             :        */
   90921             :       /* */
   90922             : 
   90923             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   90924             : 
   90925             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   90926             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   90927             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   90928             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   90929             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   90930             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   90931             :           being used with the AST File I/O mechanism.
   90932             :        */
   90933             :           virtual bool isInMemoryPool() override;
   90934             : 
   90935             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   90936             : 
   90937             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   90938             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   90939             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   90940             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   90941             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   90942             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   90943             :           being used with the AST File I/O mechanism.
   90944             :        */
   90945             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   90946             : 
   90947             :       // DQ (4/30/2006): Modified to be a const function.
   90948             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   90949             : 
   90950             :           This functions is part of general support for many possible tools to operate 
   90951             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   90952             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   90953             :           less than the set of pointers used by the AST file I/O. This is part of
   90954             :           work implemented by Andreas, and support tools such as the AST graph generation.
   90955             : 
   90956             :           \warning This function can return unexpected data members and thus the 
   90957             :                    order and the number of elements is unpredicable and subject 
   90958             :                    to change.
   90959             : 
   90960             :           \returns STL vector of pairs of SgNode* and strings
   90961             :        */
   90962             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   90963             : 
   90964             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   90965             : 
   90966             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   90967             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   90968             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   90969             : 
   90970             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   90971             :                    and subject to change.
   90972             :        */
   90973             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   90974             : 
   90975             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   90976             : 
   90977             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   90978             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   90979             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   90980             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   90981             : 
   90982             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   90983             : 
   90984             :           \returns long
   90985             :        */
   90986             :           virtual long getChildIndex( SgNode* childNode ) const override;
   90987             : 
   90988             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   90989             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   90990             :       /* \brief Constructor for use by AST File I/O Mechanism
   90991             : 
   90992             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   90993             :           which obtained via fast binary file I/O from disk.
   90994             :        */
   90995             :        // SgOmpForClause( SgOmpForClauseStorageClass& source );
   90996             : 
   90997             : 
   90998             : 
   90999             : 
   91000             : 
   91001             :  // JH (10/24/2005): methods added to support the ast file IO
   91002             :     private:
   91003             : 
   91004             :       /* name AST Memory Allocation Support Functions
   91005             :           \brief Memory allocations support....
   91006             : 
   91007             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   91008             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   91009             :           and support the AST File I/O Mechanism.
   91010             :        */
   91011             :       /* */
   91012             : 
   91013             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   91014             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   91015             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   91016             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   91017             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   91018             :           a correspinding one in the AST_FILE_IO class!
   91019             :        */
   91020             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   91021             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91022             :       /* \brief Typedef used for low level memory access.
   91023             :        */
   91024             :        // typedef unsigned char* TestType;
   91025             : 
   91026             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   91027             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91028             :       /* \brief Typedef used to hold memory addresses as values.
   91029             :        */
   91030             :        // typedef unsigned long  AddressType;
   91031             : 
   91032             : 
   91033             : 
   91034             :        // necessary, to have direct access to the p_freepointer and the private methods !
   91035             :       /*! \brief friend class declaration to support AST File I/O */
   91036             :           friend class AST_FILE_IO;
   91037             : 
   91038             :       /*! \brief friend class declaration to support AST File I/O */
   91039             :           friend class SgOmpForClauseStorageClass;
   91040             : 
   91041             :       /*! \brief friend class declaration to support AST File I/O */
   91042             :           friend class AstSpecificDataManagingClass;
   91043             : 
   91044             :       /*! \brief friend class declaration to support AST File I/O */
   91045             :           friend class AstSpecificDataManagingClassStorageClass;
   91046             :     public:
   91047             :       /*! \brief IR node constructor to support AST File I/O */
   91048             :           SgOmpForClause( const SgOmpForClauseStorageClass& source );
   91049             : 
   91050             :  // private: // JJW hack
   91051             :        /*
   91052             :           name AST Memory Allocation Support Variables
   91053             :           Memory allocations support variables 
   91054             : 
   91055             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   91056             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   91057             :           and support the AST File I/O Mechanism.
   91058             :        */
   91059             :       /* */
   91060             : 
   91061             :     public:
   91062             : 
   91063             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   91064             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   91065             :       // virtual SgNode* addRegExpAttribute();
   91066             :       /*! \brief Support for AST matching using regular expression.
   91067             : 
   91068             :           This support is incomplete and the subject of current research to define 
   91069             :           RegEx trees to support inexact matching.
   91070             :        */
   91071             :           SgOmpForClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   91072             : 
   91073             : // *** COMMON CODE SECTION ENDS HERE ***
   91074             : 
   91075             : 
   91076             : // End of memberFunctionString
   91077             : // Start of memberFunctionString
   91078             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   91079             : 
   91080             :      // the generated cast function
   91081             :      // friend ROSE_DLL_API SgOmpForClause* isSgOmpForClause ( SgNode* s );
   91082             : 
   91083             :           typedef SgOmpClause base_node_type;
   91084             : 
   91085             : 
   91086             : // End of memberFunctionString
   91087             : 
   91088             : 
   91089             :      public: 
   91090             :          virtual ~SgOmpForClause();
   91091             : 
   91092             : 
   91093             :      public: 
   91094             :          SgOmpForClause(Sg_File_Info* startOfConstruct ); 
   91095             :          SgOmpForClause(); 
   91096             : 
   91097             :     protected:
   91098             : 
   91099             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpForClause>;
   91100             : 
   91101             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91102             : 
   91103             : 
   91104             :    };
   91105             : #endif
   91106             : 
   91107             : // postdeclarations for SgOmpForClause
   91108             : 
   91109             : /* #line 91110 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91110             : 
   91111             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   91112             : 
   91113             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91114             : 
   91115             : 
   91116             : /* #line 91117 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91117             : 
   91118             : 
   91119             : 
   91120             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91121             : 
   91122             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   91123             : //      This code is automatically generated for each 
   91124             : //      terminal and non-terminal within the defined 
   91125             : //      grammar.  There is a simple way to change the 
   91126             : //      code to fix bugs etc.  See the ROSE README file
   91127             : //      for directions.
   91128             : 
   91129             : // tps: (02/22/2010): Adding DLL export requirements
   91130             : #include "rosedll.h"
   91131             : 
   91132             : // predeclarations for SgOmpTaskgroupClause
   91133             : 
   91134             : /* #line 91135 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91135             : 
   91136             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   91137             : 
   91138             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91139             : 
   91140             : #if 1
   91141             : // Class Definition for SgOmpTaskgroupClause
   91142             : class ROSE_DLL_API SgOmpTaskgroupClause  : public SgOmpClause
   91143             :    {
   91144             :      public:
   91145             : 
   91146             : 
   91147             : /* #line 91148 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91148             : 
   91149             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   91150             : // Start of memberFunctionString
   91151             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   91152             : 
   91153             : // *** COMMON CODE SECTION BEGINS HERE ***
   91154             : 
   91155             :     public:
   91156             : 
   91157             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   91158             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   91159             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   91160             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   91161             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   91162             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   91163             : 
   91164             :       /*! \brief returns a string representing the class name */
   91165             :           virtual std::string class_name() const override;
   91166             : 
   91167             :       /*! \brief returns new style SageIII enum values */
   91168             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   91169             : 
   91170             :       /*! \brief static variant value */
   91171             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   91172             :        // static const VariantT static_variant = V_SgOmpTaskgroupClause;
   91173             :           enum { static_variant = V_SgOmpTaskgroupClause };
   91174             : 
   91175             :        /* the generated cast function */
   91176             :       /*! \brief Casts pointer from base class to derived class */
   91177             :           ROSE_DLL_API friend       SgOmpTaskgroupClause* isSgOmpTaskgroupClause(       SgNode * s );
   91178             : 
   91179             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   91180             :           ROSE_DLL_API friend const SgOmpTaskgroupClause* isSgOmpTaskgroupClause( const SgNode * s );
   91181             : 
   91182             :      // ******************************************
   91183             :      // * Memory Pool / New / Delete
   91184             :      // ******************************************
   91185             : 
   91186             :      public:
   91187             :           /// \private
   91188             :           static const unsigned pool_size; //
   91189             :           /// \private
   91190             :           static std::vector<unsigned char *> pools; //
   91191             :           /// \private
   91192             :           static SgOmpTaskgroupClause * next_node; // 
   91193             : 
   91194             :           /// \private
   91195             :           static unsigned long initializeStorageClassArray(SgOmpTaskgroupClauseStorageClass *); //
   91196             : 
   91197             :           /// \private
   91198             :           static void clearMemoryPool(); //
   91199             :           static void deleteMemoryPool(); //
   91200             : 
   91201             :           /// \private
   91202             :           static void extendMemoryPoolForFileIO(); //
   91203             : 
   91204             :           /// \private
   91205             :           static SgOmpTaskgroupClause * getPointerFromGlobalIndex(unsigned long); //
   91206             :           /// \private
   91207             :           static SgOmpTaskgroupClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   91208             : 
   91209             :           /// \private
   91210             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   91211             :           /// \private
   91212             :           static void resetValidFreepointers(); //
   91213             :           /// \private
   91214             :           static unsigned long getNumberOfLastValidPointer(); //
   91215             : 
   91216             : 
   91217             : #if defined(INLINE_FUNCTIONS)
   91218             :       /*! \brief returns pointer to newly allocated IR node */
   91219             :           inline void *operator new (size_t size);
   91220             : #else
   91221             :       /*! \brief returns pointer to newly allocated IR node */
   91222             :           void *operator new (size_t size);
   91223             : #endif
   91224             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   91225             :           void operator delete (void* pointer, size_t size);
   91226             : 
   91227             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   91228           0 :           void operator delete (void* pointer)
   91229             :              {
   91230             :             // This is the generated delete operator...
   91231           0 :                SgOmpTaskgroupClause::operator delete (pointer,sizeof(SgOmpTaskgroupClause));
   91232             :              }
   91233             : 
   91234             :       /*! \brief Returns the total number of IR nodes of this type */
   91235             :           static size_t numberOfNodes();
   91236             : 
   91237             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   91238             :           static size_t memoryUsage();
   91239             : 
   91240             :       // End of scope which started in IR nodes specific code 
   91241             :       /* */
   91242             : 
   91243             :       /* name Internal Functions
   91244             :           \brief Internal functions ... incomplete-documentation
   91245             : 
   91246             :           These functions have been made public as part of the design, but they are suggested for internal use 
   91247             :           or by particularly knowledgeable users for specialized tools or applications.
   91248             : 
   91249             :           \internal We could not make these private because they are required by user for special purposes. And 
   91250             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   91251             :          
   91252             :        */
   91253             : 
   91254             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   91255             :        // overridden in every class by *generated* implementation
   91256             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   91257             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   91258             :        // MS: 06/28/02 container of names of variables or container indices 
   91259             :        // used used in the traversal to access AST successor nodes
   91260             :        // overridden in every class by *generated* implementation
   91261             :       /*! \brief container of names of variables or container indices used used in the traversal
   91262             :           to access AST successor nodes overridden in every class by *generated* implementation */
   91263             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   91264             : 
   91265             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   91266             :        // than all the vector copies. The implementation for these functions is generated for each class.
   91267             :       /*! \brief return number of children in the traversal successor list */
   91268             :           virtual size_t get_numberOfTraversalSuccessors() override;
   91269             :       /*! \brief index-based access to traversal successors by index number */
   91270             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   91271             :       /*! \brief index-based access to traversal successors by child node */
   91272             :           virtual size_t get_childIndex(SgNode *child) override;
   91273             : 
   91274             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   91275             :        // MS: 08/16/2002 method for generating RTI information
   91276             :       /*! \brief return C++ Runtime-Time-Information */
   91277             :           virtual RTIReturnType roseRTI() override;
   91278             : #endif
   91279             :       /* */
   91280             : 
   91281             : 
   91282             : 
   91283             :       /* name Deprecated Functions
   91284             :           \brief Deprecated functions ... incomplete-documentation
   91285             : 
   91286             :           These functions have been deprecated from use.
   91287             :        */
   91288             :       /* */
   91289             : 
   91290             :       /*! returns a C style string (char*) representing the class name */
   91291             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   91292             : 
   91293             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   91294             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   91295             : #if 0
   91296             :       /*! returns old style Sage II enum values */
   91297             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   91298             :       /*! returns old style Sage II enum values */
   91299             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   91300             : #endif
   91301             :       /* */
   91302             : 
   91303             : 
   91304             : 
   91305             : 
   91306             :      public:
   91307             :       /* name Traversal Support Functions
   91308             :           \brief Traversal support functions ... incomplete-documentation
   91309             : 
   91310             :           These functions have been made public as part of the design, but they are suggested for internal use 
   91311             :           or by particularly knowledgable users for specialized tools or applications.
   91312             :        */
   91313             :       /* */
   91314             : 
   91315             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   91316             :        // (inferior to ROSE traversal mechanism, experimental).
   91317             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   91318             :        */
   91319             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   91320             : 
   91321             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   91322             :       /*! \brief support for the classic visitor pattern done in GoF */
   91323             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   91324             : 
   91325             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   91326             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   91327             :        */
   91328             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   91329             : 
   91330             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   91331             :        */
   91332             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   91333             : 
   91334             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   91335             :        // This traversal helps support internal tools that call static member functions.
   91336             :        // note: this function operates on the memory pools.
   91337             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   91338             :        */
   91339             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   91340             :       /* */
   91341             : 
   91342             : 
   91343             :      public:
   91344             :       /* name Memory Allocation Functions
   91345             :           \brief Memory allocations functions ... incomplete-documentation
   91346             : 
   91347             :           These functions have been made public as part of the design, but they are suggested for internal use 
   91348             :           or by particularly knowledgable users for specialized tools or applications.
   91349             :        */
   91350             :       /* */
   91351             : 
   91352             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   91353             : 
   91354             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   91355             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   91356             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   91357             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   91358             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   91359             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   91360             :           being used with the AST File I/O mechanism.
   91361             :        */
   91362             :           virtual bool isInMemoryPool() override;
   91363             : 
   91364             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   91365             : 
   91366             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   91367             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   91368             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   91369             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   91370             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   91371             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   91372             :           being used with the AST File I/O mechanism.
   91373             :        */
   91374             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   91375             : 
   91376             :       // DQ (4/30/2006): Modified to be a const function.
   91377             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   91378             : 
   91379             :           This functions is part of general support for many possible tools to operate 
   91380             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   91381             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   91382             :           less than the set of pointers used by the AST file I/O. This is part of
   91383             :           work implemented by Andreas, and support tools such as the AST graph generation.
   91384             : 
   91385             :           \warning This function can return unexpected data members and thus the 
   91386             :                    order and the number of elements is unpredicable and subject 
   91387             :                    to change.
   91388             : 
   91389             :           \returns STL vector of pairs of SgNode* and strings
   91390             :        */
   91391             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   91392             : 
   91393             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   91394             : 
   91395             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   91396             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   91397             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   91398             : 
   91399             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   91400             :                    and subject to change.
   91401             :        */
   91402             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   91403             : 
   91404             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   91405             : 
   91406             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   91407             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   91408             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   91409             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   91410             : 
   91411             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   91412             : 
   91413             :           \returns long
   91414             :        */
   91415             :           virtual long getChildIndex( SgNode* childNode ) const override;
   91416             : 
   91417             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   91418             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91419             :       /* \brief Constructor for use by AST File I/O Mechanism
   91420             : 
   91421             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   91422             :           which obtained via fast binary file I/O from disk.
   91423             :        */
   91424             :        // SgOmpTaskgroupClause( SgOmpTaskgroupClauseStorageClass& source );
   91425             : 
   91426             : 
   91427             : 
   91428             : 
   91429             : 
   91430             :  // JH (10/24/2005): methods added to support the ast file IO
   91431             :     private:
   91432             : 
   91433             :       /* name AST Memory Allocation Support Functions
   91434             :           \brief Memory allocations support....
   91435             : 
   91436             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   91437             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   91438             :           and support the AST File I/O Mechanism.
   91439             :        */
   91440             :       /* */
   91441             : 
   91442             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   91443             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   91444             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   91445             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   91446             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   91447             :           a correspinding one in the AST_FILE_IO class!
   91448             :        */
   91449             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   91450             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91451             :       /* \brief Typedef used for low level memory access.
   91452             :        */
   91453             :        // typedef unsigned char* TestType;
   91454             : 
   91455             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   91456             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91457             :       /* \brief Typedef used to hold memory addresses as values.
   91458             :        */
   91459             :        // typedef unsigned long  AddressType;
   91460             : 
   91461             : 
   91462             : 
   91463             :        // necessary, to have direct access to the p_freepointer and the private methods !
   91464             :       /*! \brief friend class declaration to support AST File I/O */
   91465             :           friend class AST_FILE_IO;
   91466             : 
   91467             :       /*! \brief friend class declaration to support AST File I/O */
   91468             :           friend class SgOmpTaskgroupClauseStorageClass;
   91469             : 
   91470             :       /*! \brief friend class declaration to support AST File I/O */
   91471             :           friend class AstSpecificDataManagingClass;
   91472             : 
   91473             :       /*! \brief friend class declaration to support AST File I/O */
   91474             :           friend class AstSpecificDataManagingClassStorageClass;
   91475             :     public:
   91476             :       /*! \brief IR node constructor to support AST File I/O */
   91477             :           SgOmpTaskgroupClause( const SgOmpTaskgroupClauseStorageClass& source );
   91478             : 
   91479             :  // private: // JJW hack
   91480             :        /*
   91481             :           name AST Memory Allocation Support Variables
   91482             :           Memory allocations support variables 
   91483             : 
   91484             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   91485             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   91486             :           and support the AST File I/O Mechanism.
   91487             :        */
   91488             :       /* */
   91489             : 
   91490             :     public:
   91491             : 
   91492             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   91493             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   91494             :       // virtual SgNode* addRegExpAttribute();
   91495             :       /*! \brief Support for AST matching using regular expression.
   91496             : 
   91497             :           This support is incomplete and the subject of current research to define 
   91498             :           RegEx trees to support inexact matching.
   91499             :        */
   91500             :           SgOmpTaskgroupClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   91501             : 
   91502             : // *** COMMON CODE SECTION ENDS HERE ***
   91503             : 
   91504             : 
   91505             : // End of memberFunctionString
   91506             : // Start of memberFunctionString
   91507             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   91508             : 
   91509             :      // the generated cast function
   91510             :      // friend ROSE_DLL_API SgOmpTaskgroupClause* isSgOmpTaskgroupClause ( SgNode* s );
   91511             : 
   91512             :           typedef SgOmpClause base_node_type;
   91513             : 
   91514             : 
   91515             : // End of memberFunctionString
   91516             : 
   91517             : 
   91518             :      public: 
   91519             :          virtual ~SgOmpTaskgroupClause();
   91520             : 
   91521             : 
   91522             :      public: 
   91523             :          SgOmpTaskgroupClause(Sg_File_Info* startOfConstruct ); 
   91524             :          SgOmpTaskgroupClause(); 
   91525             : 
   91526             :     protected:
   91527             : 
   91528             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskgroupClause>;
   91529             : 
   91530             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91531             : 
   91532             : 
   91533             :    };
   91534             : #endif
   91535             : 
   91536             : // postdeclarations for SgOmpTaskgroupClause
   91537             : 
   91538             : /* #line 91539 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91539             : 
   91540             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   91541             : 
   91542             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91543             : 
   91544             : 
   91545             : /* #line 91546 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91546             : 
   91547             : 
   91548             : 
   91549             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91550             : 
   91551             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   91552             : //      This code is automatically generated for each 
   91553             : //      terminal and non-terminal within the defined 
   91554             : //      grammar.  There is a simple way to change the 
   91555             : //      code to fix bugs etc.  See the ROSE README file
   91556             : //      for directions.
   91557             : 
   91558             : // tps: (02/22/2010): Adding DLL export requirements
   91559             : #include "rosedll.h"
   91560             : 
   91561             : // predeclarations for SgOmpNogroupClause
   91562             : 
   91563             : /* #line 91564 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91564             : 
   91565             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   91566             : 
   91567             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91568             : 
   91569             : #if 1
   91570             : // Class Definition for SgOmpNogroupClause
   91571             : class ROSE_DLL_API SgOmpNogroupClause  : public SgOmpClause
   91572             :    {
   91573             :      public:
   91574             : 
   91575             : 
   91576             : /* #line 91577 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91577             : 
   91578             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   91579             : // Start of memberFunctionString
   91580             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   91581             : 
   91582             : // *** COMMON CODE SECTION BEGINS HERE ***
   91583             : 
   91584             :     public:
   91585             : 
   91586             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   91587             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   91588             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   91589             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   91590             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   91591             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   91592             : 
   91593             :       /*! \brief returns a string representing the class name */
   91594             :           virtual std::string class_name() const override;
   91595             : 
   91596             :       /*! \brief returns new style SageIII enum values */
   91597             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   91598             : 
   91599             :       /*! \brief static variant value */
   91600             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   91601             :        // static const VariantT static_variant = V_SgOmpNogroupClause;
   91602             :           enum { static_variant = V_SgOmpNogroupClause };
   91603             : 
   91604             :        /* the generated cast function */
   91605             :       /*! \brief Casts pointer from base class to derived class */
   91606             :           ROSE_DLL_API friend       SgOmpNogroupClause* isSgOmpNogroupClause(       SgNode * s );
   91607             : 
   91608             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   91609             :           ROSE_DLL_API friend const SgOmpNogroupClause* isSgOmpNogroupClause( const SgNode * s );
   91610             : 
   91611             :      // ******************************************
   91612             :      // * Memory Pool / New / Delete
   91613             :      // ******************************************
   91614             : 
   91615             :      public:
   91616             :           /// \private
   91617             :           static const unsigned pool_size; //
   91618             :           /// \private
   91619             :           static std::vector<unsigned char *> pools; //
   91620             :           /// \private
   91621             :           static SgOmpNogroupClause * next_node; // 
   91622             : 
   91623             :           /// \private
   91624             :           static unsigned long initializeStorageClassArray(SgOmpNogroupClauseStorageClass *); //
   91625             : 
   91626             :           /// \private
   91627             :           static void clearMemoryPool(); //
   91628             :           static void deleteMemoryPool(); //
   91629             : 
   91630             :           /// \private
   91631             :           static void extendMemoryPoolForFileIO(); //
   91632             : 
   91633             :           /// \private
   91634             :           static SgOmpNogroupClause * getPointerFromGlobalIndex(unsigned long); //
   91635             :           /// \private
   91636             :           static SgOmpNogroupClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   91637             : 
   91638             :           /// \private
   91639             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   91640             :           /// \private
   91641             :           static void resetValidFreepointers(); //
   91642             :           /// \private
   91643             :           static unsigned long getNumberOfLastValidPointer(); //
   91644             : 
   91645             : 
   91646             : #if defined(INLINE_FUNCTIONS)
   91647             :       /*! \brief returns pointer to newly allocated IR node */
   91648             :           inline void *operator new (size_t size);
   91649             : #else
   91650             :       /*! \brief returns pointer to newly allocated IR node */
   91651             :           void *operator new (size_t size);
   91652             : #endif
   91653             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   91654             :           void operator delete (void* pointer, size_t size);
   91655             : 
   91656             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   91657           0 :           void operator delete (void* pointer)
   91658             :              {
   91659             :             // This is the generated delete operator...
   91660           0 :                SgOmpNogroupClause::operator delete (pointer,sizeof(SgOmpNogroupClause));
   91661             :              }
   91662             : 
   91663             :       /*! \brief Returns the total number of IR nodes of this type */
   91664             :           static size_t numberOfNodes();
   91665             : 
   91666             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   91667             :           static size_t memoryUsage();
   91668             : 
   91669             :       // End of scope which started in IR nodes specific code 
   91670             :       /* */
   91671             : 
   91672             :       /* name Internal Functions
   91673             :           \brief Internal functions ... incomplete-documentation
   91674             : 
   91675             :           These functions have been made public as part of the design, but they are suggested for internal use 
   91676             :           or by particularly knowledgeable users for specialized tools or applications.
   91677             : 
   91678             :           \internal We could not make these private because they are required by user for special purposes. And 
   91679             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   91680             :          
   91681             :        */
   91682             : 
   91683             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   91684             :        // overridden in every class by *generated* implementation
   91685             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   91686             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   91687             :        // MS: 06/28/02 container of names of variables or container indices 
   91688             :        // used used in the traversal to access AST successor nodes
   91689             :        // overridden in every class by *generated* implementation
   91690             :       /*! \brief container of names of variables or container indices used used in the traversal
   91691             :           to access AST successor nodes overridden in every class by *generated* implementation */
   91692             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   91693             : 
   91694             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   91695             :        // than all the vector copies. The implementation for these functions is generated for each class.
   91696             :       /*! \brief return number of children in the traversal successor list */
   91697             :           virtual size_t get_numberOfTraversalSuccessors() override;
   91698             :       /*! \brief index-based access to traversal successors by index number */
   91699             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   91700             :       /*! \brief index-based access to traversal successors by child node */
   91701             :           virtual size_t get_childIndex(SgNode *child) override;
   91702             : 
   91703             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   91704             :        // MS: 08/16/2002 method for generating RTI information
   91705             :       /*! \brief return C++ Runtime-Time-Information */
   91706             :           virtual RTIReturnType roseRTI() override;
   91707             : #endif
   91708             :       /* */
   91709             : 
   91710             : 
   91711             : 
   91712             :       /* name Deprecated Functions
   91713             :           \brief Deprecated functions ... incomplete-documentation
   91714             : 
   91715             :           These functions have been deprecated from use.
   91716             :        */
   91717             :       /* */
   91718             : 
   91719             :       /*! returns a C style string (char*) representing the class name */
   91720             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   91721             : 
   91722             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   91723             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   91724             : #if 0
   91725             :       /*! returns old style Sage II enum values */
   91726             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   91727             :       /*! returns old style Sage II enum values */
   91728             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   91729             : #endif
   91730             :       /* */
   91731             : 
   91732             : 
   91733             : 
   91734             : 
   91735             :      public:
   91736             :       /* name Traversal Support Functions
   91737             :           \brief Traversal support functions ... incomplete-documentation
   91738             : 
   91739             :           These functions have been made public as part of the design, but they are suggested for internal use 
   91740             :           or by particularly knowledgable users for specialized tools or applications.
   91741             :        */
   91742             :       /* */
   91743             : 
   91744             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   91745             :        // (inferior to ROSE traversal mechanism, experimental).
   91746             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   91747             :        */
   91748             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   91749             : 
   91750             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   91751             :       /*! \brief support for the classic visitor pattern done in GoF */
   91752             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   91753             : 
   91754             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   91755             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   91756             :        */
   91757             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   91758             : 
   91759             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   91760             :        */
   91761             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   91762             : 
   91763             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   91764             :        // This traversal helps support internal tools that call static member functions.
   91765             :        // note: this function operates on the memory pools.
   91766             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   91767             :        */
   91768             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   91769             :       /* */
   91770             : 
   91771             : 
   91772             :      public:
   91773             :       /* name Memory Allocation Functions
   91774             :           \brief Memory allocations functions ... incomplete-documentation
   91775             : 
   91776             :           These functions have been made public as part of the design, but they are suggested for internal use 
   91777             :           or by particularly knowledgable users for specialized tools or applications.
   91778             :        */
   91779             :       /* */
   91780             : 
   91781             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   91782             : 
   91783             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   91784             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   91785             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   91786             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   91787             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   91788             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   91789             :           being used with the AST File I/O mechanism.
   91790             :        */
   91791             :           virtual bool isInMemoryPool() override;
   91792             : 
   91793             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   91794             : 
   91795             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   91796             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   91797             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   91798             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   91799             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   91800             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   91801             :           being used with the AST File I/O mechanism.
   91802             :        */
   91803             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   91804             : 
   91805             :       // DQ (4/30/2006): Modified to be a const function.
   91806             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   91807             : 
   91808             :           This functions is part of general support for many possible tools to operate 
   91809             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   91810             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   91811             :           less than the set of pointers used by the AST file I/O. This is part of
   91812             :           work implemented by Andreas, and support tools such as the AST graph generation.
   91813             : 
   91814             :           \warning This function can return unexpected data members and thus the 
   91815             :                    order and the number of elements is unpredicable and subject 
   91816             :                    to change.
   91817             : 
   91818             :           \returns STL vector of pairs of SgNode* and strings
   91819             :        */
   91820             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   91821             : 
   91822             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   91823             : 
   91824             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   91825             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   91826             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   91827             : 
   91828             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   91829             :                    and subject to change.
   91830             :        */
   91831             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   91832             : 
   91833             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   91834             : 
   91835             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   91836             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   91837             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   91838             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   91839             : 
   91840             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   91841             : 
   91842             :           \returns long
   91843             :        */
   91844             :           virtual long getChildIndex( SgNode* childNode ) const override;
   91845             : 
   91846             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   91847             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91848             :       /* \brief Constructor for use by AST File I/O Mechanism
   91849             : 
   91850             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   91851             :           which obtained via fast binary file I/O from disk.
   91852             :        */
   91853             :        // SgOmpNogroupClause( SgOmpNogroupClauseStorageClass& source );
   91854             : 
   91855             : 
   91856             : 
   91857             : 
   91858             : 
   91859             :  // JH (10/24/2005): methods added to support the ast file IO
   91860             :     private:
   91861             : 
   91862             :       /* name AST Memory Allocation Support Functions
   91863             :           \brief Memory allocations support....
   91864             : 
   91865             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   91866             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   91867             :           and support the AST File I/O Mechanism.
   91868             :        */
   91869             :       /* */
   91870             : 
   91871             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   91872             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   91873             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   91874             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   91875             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   91876             :           a correspinding one in the AST_FILE_IO class!
   91877             :        */
   91878             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   91879             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91880             :       /* \brief Typedef used for low level memory access.
   91881             :        */
   91882             :        // typedef unsigned char* TestType;
   91883             : 
   91884             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   91885             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   91886             :       /* \brief Typedef used to hold memory addresses as values.
   91887             :        */
   91888             :        // typedef unsigned long  AddressType;
   91889             : 
   91890             : 
   91891             : 
   91892             :        // necessary, to have direct access to the p_freepointer and the private methods !
   91893             :       /*! \brief friend class declaration to support AST File I/O */
   91894             :           friend class AST_FILE_IO;
   91895             : 
   91896             :       /*! \brief friend class declaration to support AST File I/O */
   91897             :           friend class SgOmpNogroupClauseStorageClass;
   91898             : 
   91899             :       /*! \brief friend class declaration to support AST File I/O */
   91900             :           friend class AstSpecificDataManagingClass;
   91901             : 
   91902             :       /*! \brief friend class declaration to support AST File I/O */
   91903             :           friend class AstSpecificDataManagingClassStorageClass;
   91904             :     public:
   91905             :       /*! \brief IR node constructor to support AST File I/O */
   91906             :           SgOmpNogroupClause( const SgOmpNogroupClauseStorageClass& source );
   91907             : 
   91908             :  // private: // JJW hack
   91909             :        /*
   91910             :           name AST Memory Allocation Support Variables
   91911             :           Memory allocations support variables 
   91912             : 
   91913             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   91914             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   91915             :           and support the AST File I/O Mechanism.
   91916             :        */
   91917             :       /* */
   91918             : 
   91919             :     public:
   91920             : 
   91921             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   91922             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   91923             :       // virtual SgNode* addRegExpAttribute();
   91924             :       /*! \brief Support for AST matching using regular expression.
   91925             : 
   91926             :           This support is incomplete and the subject of current research to define 
   91927             :           RegEx trees to support inexact matching.
   91928             :        */
   91929             :           SgOmpNogroupClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   91930             : 
   91931             : // *** COMMON CODE SECTION ENDS HERE ***
   91932             : 
   91933             : 
   91934             : // End of memberFunctionString
   91935             : // Start of memberFunctionString
   91936             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   91937             : 
   91938             :      // the generated cast function
   91939             :      // friend ROSE_DLL_API SgOmpNogroupClause* isSgOmpNogroupClause ( SgNode* s );
   91940             : 
   91941             :           typedef SgOmpClause base_node_type;
   91942             : 
   91943             : 
   91944             : // End of memberFunctionString
   91945             : 
   91946             : 
   91947             :      public: 
   91948             :          virtual ~SgOmpNogroupClause();
   91949             : 
   91950             : 
   91951             :      public: 
   91952             :          SgOmpNogroupClause(Sg_File_Info* startOfConstruct ); 
   91953             :          SgOmpNogroupClause(); 
   91954             : 
   91955             :     protected:
   91956             : 
   91957             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpNogroupClause>;
   91958             : 
   91959             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91960             : 
   91961             : 
   91962             :    };
   91963             : #endif
   91964             : 
   91965             : // postdeclarations for SgOmpNogroupClause
   91966             : 
   91967             : /* #line 91968 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91968             : 
   91969             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   91970             : 
   91971             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91972             : 
   91973             : 
   91974             : /* #line 91975 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91975             : 
   91976             : 
   91977             : 
   91978             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91979             : 
   91980             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   91981             : //      This code is automatically generated for each 
   91982             : //      terminal and non-terminal within the defined 
   91983             : //      grammar.  There is a simple way to change the 
   91984             : //      code to fix bugs etc.  See the ROSE README file
   91985             : //      for directions.
   91986             : 
   91987             : // tps: (02/22/2010): Adding DLL export requirements
   91988             : #include "rosedll.h"
   91989             : 
   91990             : // predeclarations for SgOmpDefaultClause
   91991             : 
   91992             : /* #line 91993 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   91993             : 
   91994             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   91995             : 
   91996             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   91997             : 
   91998             : #if 1
   91999             : // Class Definition for SgOmpDefaultClause
   92000             : class ROSE_DLL_API SgOmpDefaultClause  : public SgOmpClause
   92001             :    {
   92002             :      public:
   92003             : 
   92004             : 
   92005             : /* #line 92006 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92006             : 
   92007             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   92008             : // Start of memberFunctionString
   92009             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   92010             : 
   92011             : // *** COMMON CODE SECTION BEGINS HERE ***
   92012             : 
   92013             :     public:
   92014             : 
   92015             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   92016             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   92017             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   92018             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   92019             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   92020             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   92021             : 
   92022             :       /*! \brief returns a string representing the class name */
   92023             :           virtual std::string class_name() const override;
   92024             : 
   92025             :       /*! \brief returns new style SageIII enum values */
   92026             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   92027             : 
   92028             :       /*! \brief static variant value */
   92029             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   92030             :        // static const VariantT static_variant = V_SgOmpDefaultClause;
   92031             :           enum { static_variant = V_SgOmpDefaultClause };
   92032             : 
   92033             :        /* the generated cast function */
   92034             :       /*! \brief Casts pointer from base class to derived class */
   92035             :           ROSE_DLL_API friend       SgOmpDefaultClause* isSgOmpDefaultClause(       SgNode * s );
   92036             : 
   92037             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   92038             :           ROSE_DLL_API friend const SgOmpDefaultClause* isSgOmpDefaultClause( const SgNode * s );
   92039             : 
   92040             :      // ******************************************
   92041             :      // * Memory Pool / New / Delete
   92042             :      // ******************************************
   92043             : 
   92044             :      public:
   92045             :           /// \private
   92046             :           static const unsigned pool_size; //
   92047             :           /// \private
   92048             :           static std::vector<unsigned char *> pools; //
   92049             :           /// \private
   92050             :           static SgOmpDefaultClause * next_node; // 
   92051             : 
   92052             :           /// \private
   92053             :           static unsigned long initializeStorageClassArray(SgOmpDefaultClauseStorageClass *); //
   92054             : 
   92055             :           /// \private
   92056             :           static void clearMemoryPool(); //
   92057             :           static void deleteMemoryPool(); //
   92058             : 
   92059             :           /// \private
   92060             :           static void extendMemoryPoolForFileIO(); //
   92061             : 
   92062             :           /// \private
   92063             :           static SgOmpDefaultClause * getPointerFromGlobalIndex(unsigned long); //
   92064             :           /// \private
   92065             :           static SgOmpDefaultClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   92066             : 
   92067             :           /// \private
   92068             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   92069             :           /// \private
   92070             :           static void resetValidFreepointers(); //
   92071             :           /// \private
   92072             :           static unsigned long getNumberOfLastValidPointer(); //
   92073             : 
   92074             : 
   92075             : #if defined(INLINE_FUNCTIONS)
   92076             :       /*! \brief returns pointer to newly allocated IR node */
   92077             :           inline void *operator new (size_t size);
   92078             : #else
   92079             :       /*! \brief returns pointer to newly allocated IR node */
   92080             :           void *operator new (size_t size);
   92081             : #endif
   92082             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   92083             :           void operator delete (void* pointer, size_t size);
   92084             : 
   92085             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   92086           0 :           void operator delete (void* pointer)
   92087             :              {
   92088             :             // This is the generated delete operator...
   92089           0 :                SgOmpDefaultClause::operator delete (pointer,sizeof(SgOmpDefaultClause));
   92090             :              }
   92091             : 
   92092             :       /*! \brief Returns the total number of IR nodes of this type */
   92093             :           static size_t numberOfNodes();
   92094             : 
   92095             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   92096             :           static size_t memoryUsage();
   92097             : 
   92098             :       // End of scope which started in IR nodes specific code 
   92099             :       /* */
   92100             : 
   92101             :       /* name Internal Functions
   92102             :           \brief Internal functions ... incomplete-documentation
   92103             : 
   92104             :           These functions have been made public as part of the design, but they are suggested for internal use 
   92105             :           or by particularly knowledgeable users for specialized tools or applications.
   92106             : 
   92107             :           \internal We could not make these private because they are required by user for special purposes. And 
   92108             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   92109             :          
   92110             :        */
   92111             : 
   92112             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   92113             :        // overridden in every class by *generated* implementation
   92114             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   92115             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   92116             :        // MS: 06/28/02 container of names of variables or container indices 
   92117             :        // used used in the traversal to access AST successor nodes
   92118             :        // overridden in every class by *generated* implementation
   92119             :       /*! \brief container of names of variables or container indices used used in the traversal
   92120             :           to access AST successor nodes overridden in every class by *generated* implementation */
   92121             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   92122             : 
   92123             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   92124             :        // than all the vector copies. The implementation for these functions is generated for each class.
   92125             :       /*! \brief return number of children in the traversal successor list */
   92126             :           virtual size_t get_numberOfTraversalSuccessors() override;
   92127             :       /*! \brief index-based access to traversal successors by index number */
   92128             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   92129             :       /*! \brief index-based access to traversal successors by child node */
   92130             :           virtual size_t get_childIndex(SgNode *child) override;
   92131             : 
   92132             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   92133             :        // MS: 08/16/2002 method for generating RTI information
   92134             :       /*! \brief return C++ Runtime-Time-Information */
   92135             :           virtual RTIReturnType roseRTI() override;
   92136             : #endif
   92137             :       /* */
   92138             : 
   92139             : 
   92140             : 
   92141             :       /* name Deprecated Functions
   92142             :           \brief Deprecated functions ... incomplete-documentation
   92143             : 
   92144             :           These functions have been deprecated from use.
   92145             :        */
   92146             :       /* */
   92147             : 
   92148             :       /*! returns a C style string (char*) representing the class name */
   92149             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   92150             : 
   92151             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   92152             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   92153             : #if 0
   92154             :       /*! returns old style Sage II enum values */
   92155             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   92156             :       /*! returns old style Sage II enum values */
   92157             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   92158             : #endif
   92159             :       /* */
   92160             : 
   92161             : 
   92162             : 
   92163             : 
   92164             :      public:
   92165             :       /* name Traversal Support Functions
   92166             :           \brief Traversal support functions ... incomplete-documentation
   92167             : 
   92168             :           These functions have been made public as part of the design, but they are suggested for internal use 
   92169             :           or by particularly knowledgable users for specialized tools or applications.
   92170             :        */
   92171             :       /* */
   92172             : 
   92173             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   92174             :        // (inferior to ROSE traversal mechanism, experimental).
   92175             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   92176             :        */
   92177             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   92178             : 
   92179             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   92180             :       /*! \brief support for the classic visitor pattern done in GoF */
   92181             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   92182             : 
   92183             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   92184             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   92185             :        */
   92186             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   92187             : 
   92188             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   92189             :        */
   92190             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   92191             : 
   92192             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   92193             :        // This traversal helps support internal tools that call static member functions.
   92194             :        // note: this function operates on the memory pools.
   92195             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   92196             :        */
   92197             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   92198             :       /* */
   92199             : 
   92200             : 
   92201             :      public:
   92202             :       /* name Memory Allocation Functions
   92203             :           \brief Memory allocations functions ... incomplete-documentation
   92204             : 
   92205             :           These functions have been made public as part of the design, but they are suggested for internal use 
   92206             :           or by particularly knowledgable users for specialized tools or applications.
   92207             :        */
   92208             :       /* */
   92209             : 
   92210             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   92211             : 
   92212             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   92213             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   92214             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   92215             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   92216             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   92217             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   92218             :           being used with the AST File I/O mechanism.
   92219             :        */
   92220             :           virtual bool isInMemoryPool() override;
   92221             : 
   92222             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   92223             : 
   92224             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   92225             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   92226             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   92227             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   92228             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   92229             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   92230             :           being used with the AST File I/O mechanism.
   92231             :        */
   92232             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   92233             : 
   92234             :       // DQ (4/30/2006): Modified to be a const function.
   92235             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   92236             : 
   92237             :           This functions is part of general support for many possible tools to operate 
   92238             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   92239             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   92240             :           less than the set of pointers used by the AST file I/O. This is part of
   92241             :           work implemented by Andreas, and support tools such as the AST graph generation.
   92242             : 
   92243             :           \warning This function can return unexpected data members and thus the 
   92244             :                    order and the number of elements is unpredicable and subject 
   92245             :                    to change.
   92246             : 
   92247             :           \returns STL vector of pairs of SgNode* and strings
   92248             :        */
   92249             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   92250             : 
   92251             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   92252             : 
   92253             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   92254             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   92255             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   92256             : 
   92257             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   92258             :                    and subject to change.
   92259             :        */
   92260             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   92261             : 
   92262             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   92263             : 
   92264             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   92265             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   92266             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   92267             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   92268             : 
   92269             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   92270             : 
   92271             :           \returns long
   92272             :        */
   92273             :           virtual long getChildIndex( SgNode* childNode ) const override;
   92274             : 
   92275             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   92276             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   92277             :       /* \brief Constructor for use by AST File I/O Mechanism
   92278             : 
   92279             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   92280             :           which obtained via fast binary file I/O from disk.
   92281             :        */
   92282             :        // SgOmpDefaultClause( SgOmpDefaultClauseStorageClass& source );
   92283             : 
   92284             : 
   92285             : 
   92286             : 
   92287             : 
   92288             :  // JH (10/24/2005): methods added to support the ast file IO
   92289             :     private:
   92290             : 
   92291             :       /* name AST Memory Allocation Support Functions
   92292             :           \brief Memory allocations support....
   92293             : 
   92294             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   92295             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   92296             :           and support the AST File I/O Mechanism.
   92297             :        */
   92298             :       /* */
   92299             : 
   92300             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   92301             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   92302             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   92303             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   92304             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   92305             :           a correspinding one in the AST_FILE_IO class!
   92306             :        */
   92307             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   92308             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   92309             :       /* \brief Typedef used for low level memory access.
   92310             :        */
   92311             :        // typedef unsigned char* TestType;
   92312             : 
   92313             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   92314             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   92315             :       /* \brief Typedef used to hold memory addresses as values.
   92316             :        */
   92317             :        // typedef unsigned long  AddressType;
   92318             : 
   92319             : 
   92320             : 
   92321             :        // necessary, to have direct access to the p_freepointer and the private methods !
   92322             :       /*! \brief friend class declaration to support AST File I/O */
   92323             :           friend class AST_FILE_IO;
   92324             : 
   92325             :       /*! \brief friend class declaration to support AST File I/O */
   92326             :           friend class SgOmpDefaultClauseStorageClass;
   92327             : 
   92328             :       /*! \brief friend class declaration to support AST File I/O */
   92329             :           friend class AstSpecificDataManagingClass;
   92330             : 
   92331             :       /*! \brief friend class declaration to support AST File I/O */
   92332             :           friend class AstSpecificDataManagingClassStorageClass;
   92333             :     public:
   92334             :       /*! \brief IR node constructor to support AST File I/O */
   92335             :           SgOmpDefaultClause( const SgOmpDefaultClauseStorageClass& source );
   92336             : 
   92337             :  // private: // JJW hack
   92338             :        /*
   92339             :           name AST Memory Allocation Support Variables
   92340             :           Memory allocations support variables 
   92341             : 
   92342             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   92343             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   92344             :           and support the AST File I/O Mechanism.
   92345             :        */
   92346             :       /* */
   92347             : 
   92348             :     public:
   92349             : 
   92350             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   92351             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   92352             :       // virtual SgNode* addRegExpAttribute();
   92353             :       /*! \brief Support for AST matching using regular expression.
   92354             : 
   92355             :           This support is incomplete and the subject of current research to define 
   92356             :           RegEx trees to support inexact matching.
   92357             :        */
   92358             :           SgOmpDefaultClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   92359             : 
   92360             : // *** COMMON CODE SECTION ENDS HERE ***
   92361             : 
   92362             : 
   92363             : // End of memberFunctionString
   92364             : // Start of memberFunctionString
   92365             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   92366             : 
   92367             :      // the generated cast function
   92368             :      // friend ROSE_DLL_API SgOmpDefaultClause* isSgOmpDefaultClause ( SgNode* s );
   92369             : 
   92370             :           typedef SgOmpClause base_node_type;
   92371             : 
   92372             : 
   92373             : // End of memberFunctionString
   92374             : 
   92375             :      public: 
   92376             :          SgOmpClause::omp_default_option_enum get_data_sharing() const;
   92377             :          void set_data_sharing(SgOmpClause::omp_default_option_enum data_sharing);
   92378             : 
   92379             :      public: 
   92380             :          SgStatement* get_variant_directive() const;
   92381             :          void set_variant_directive(SgStatement* variant_directive);
   92382             : 
   92383             : 
   92384             :      public: 
   92385             :          virtual ~SgOmpDefaultClause();
   92386             : 
   92387             : 
   92388             :      public: 
   92389             :          SgOmpDefaultClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_default_option_enum data_sharing =e_omp_default_unknown, SgStatement* variant_directive = NULL); 
   92390             :          SgOmpDefaultClause(SgOmpClause::omp_default_option_enum data_sharing, SgStatement* variant_directive); 
   92391             : 
   92392             :     protected:
   92393             : // Start of memberFunctionString
   92394             : SgOmpClause::omp_default_option_enum p_data_sharing;
   92395             :           
   92396             : // End of memberFunctionString
   92397             : // Start of memberFunctionString
   92398             : SgStatement* p_variant_directive;
   92399             :           
   92400             : // End of memberFunctionString
   92401             : 
   92402             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDefaultClause>;
   92403             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDefaultClause, SgOmpClause::omp_default_option_enum,&SgOmpDefaultClause::p_data_sharing>;
   92404             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDefaultClause, SgStatement*,&SgOmpDefaultClause::p_variant_directive>;
   92405             : 
   92406             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92407             : 
   92408             : 
   92409             :    };
   92410             : #endif
   92411             : 
   92412             : // postdeclarations for SgOmpDefaultClause
   92413             : 
   92414             : /* #line 92415 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92415             : 
   92416             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   92417             : 
   92418             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92419             : 
   92420             : 
   92421             : /* #line 92422 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92422             : 
   92423             : 
   92424             : 
   92425             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92426             : 
   92427             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   92428             : //      This code is automatically generated for each 
   92429             : //      terminal and non-terminal within the defined 
   92430             : //      grammar.  There is a simple way to change the 
   92431             : //      code to fix bugs etc.  See the ROSE README file
   92432             : //      for directions.
   92433             : 
   92434             : // tps: (02/22/2010): Adding DLL export requirements
   92435             : #include "rosedll.h"
   92436             : 
   92437             : // predeclarations for SgOmpAllocatorClause
   92438             : 
   92439             : /* #line 92440 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92440             : 
   92441             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   92442             : 
   92443             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92444             : 
   92445             : #if 1
   92446             : // Class Definition for SgOmpAllocatorClause
   92447             : class ROSE_DLL_API SgOmpAllocatorClause  : public SgOmpClause
   92448             :    {
   92449             :      public:
   92450             : 
   92451             : 
   92452             : /* #line 92453 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92453             : 
   92454             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   92455             : // Start of memberFunctionString
   92456             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   92457             : 
   92458             : // *** COMMON CODE SECTION BEGINS HERE ***
   92459             : 
   92460             :     public:
   92461             : 
   92462             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   92463             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   92464             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   92465             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   92466             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   92467             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   92468             : 
   92469             :       /*! \brief returns a string representing the class name */
   92470             :           virtual std::string class_name() const override;
   92471             : 
   92472             :       /*! \brief returns new style SageIII enum values */
   92473             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   92474             : 
   92475             :       /*! \brief static variant value */
   92476             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   92477             :        // static const VariantT static_variant = V_SgOmpAllocatorClause;
   92478             :           enum { static_variant = V_SgOmpAllocatorClause };
   92479             : 
   92480             :        /* the generated cast function */
   92481             :       /*! \brief Casts pointer from base class to derived class */
   92482             :           ROSE_DLL_API friend       SgOmpAllocatorClause* isSgOmpAllocatorClause(       SgNode * s );
   92483             : 
   92484             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   92485             :           ROSE_DLL_API friend const SgOmpAllocatorClause* isSgOmpAllocatorClause( const SgNode * s );
   92486             : 
   92487             :      // ******************************************
   92488             :      // * Memory Pool / New / Delete
   92489             :      // ******************************************
   92490             : 
   92491             :      public:
   92492             :           /// \private
   92493             :           static const unsigned pool_size; //
   92494             :           /// \private
   92495             :           static std::vector<unsigned char *> pools; //
   92496             :           /// \private
   92497             :           static SgOmpAllocatorClause * next_node; // 
   92498             : 
   92499             :           /// \private
   92500             :           static unsigned long initializeStorageClassArray(SgOmpAllocatorClauseStorageClass *); //
   92501             : 
   92502             :           /// \private
   92503             :           static void clearMemoryPool(); //
   92504             :           static void deleteMemoryPool(); //
   92505             : 
   92506             :           /// \private
   92507             :           static void extendMemoryPoolForFileIO(); //
   92508             : 
   92509             :           /// \private
   92510             :           static SgOmpAllocatorClause * getPointerFromGlobalIndex(unsigned long); //
   92511             :           /// \private
   92512             :           static SgOmpAllocatorClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   92513             : 
   92514             :           /// \private
   92515             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   92516             :           /// \private
   92517             :           static void resetValidFreepointers(); //
   92518             :           /// \private
   92519             :           static unsigned long getNumberOfLastValidPointer(); //
   92520             : 
   92521             : 
   92522             : #if defined(INLINE_FUNCTIONS)
   92523             :       /*! \brief returns pointer to newly allocated IR node */
   92524             :           inline void *operator new (size_t size);
   92525             : #else
   92526             :       /*! \brief returns pointer to newly allocated IR node */
   92527             :           void *operator new (size_t size);
   92528             : #endif
   92529             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   92530             :           void operator delete (void* pointer, size_t size);
   92531             : 
   92532             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   92533           0 :           void operator delete (void* pointer)
   92534             :              {
   92535             :             // This is the generated delete operator...
   92536           0 :                SgOmpAllocatorClause::operator delete (pointer,sizeof(SgOmpAllocatorClause));
   92537             :              }
   92538             : 
   92539             :       /*! \brief Returns the total number of IR nodes of this type */
   92540             :           static size_t numberOfNodes();
   92541             : 
   92542             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   92543             :           static size_t memoryUsage();
   92544             : 
   92545             :       // End of scope which started in IR nodes specific code 
   92546             :       /* */
   92547             : 
   92548             :       /* name Internal Functions
   92549             :           \brief Internal functions ... incomplete-documentation
   92550             : 
   92551             :           These functions have been made public as part of the design, but they are suggested for internal use 
   92552             :           or by particularly knowledgeable users for specialized tools or applications.
   92553             : 
   92554             :           \internal We could not make these private because they are required by user for special purposes. And 
   92555             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   92556             :          
   92557             :        */
   92558             : 
   92559             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   92560             :        // overridden in every class by *generated* implementation
   92561             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   92562             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   92563             :        // MS: 06/28/02 container of names of variables or container indices 
   92564             :        // used used in the traversal to access AST successor nodes
   92565             :        // overridden in every class by *generated* implementation
   92566             :       /*! \brief container of names of variables or container indices used used in the traversal
   92567             :           to access AST successor nodes overridden in every class by *generated* implementation */
   92568             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   92569             : 
   92570             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   92571             :        // than all the vector copies. The implementation for these functions is generated for each class.
   92572             :       /*! \brief return number of children in the traversal successor list */
   92573             :           virtual size_t get_numberOfTraversalSuccessors() override;
   92574             :       /*! \brief index-based access to traversal successors by index number */
   92575             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   92576             :       /*! \brief index-based access to traversal successors by child node */
   92577             :           virtual size_t get_childIndex(SgNode *child) override;
   92578             : 
   92579             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   92580             :        // MS: 08/16/2002 method for generating RTI information
   92581             :       /*! \brief return C++ Runtime-Time-Information */
   92582             :           virtual RTIReturnType roseRTI() override;
   92583             : #endif
   92584             :       /* */
   92585             : 
   92586             : 
   92587             : 
   92588             :       /* name Deprecated Functions
   92589             :           \brief Deprecated functions ... incomplete-documentation
   92590             : 
   92591             :           These functions have been deprecated from use.
   92592             :        */
   92593             :       /* */
   92594             : 
   92595             :       /*! returns a C style string (char*) representing the class name */
   92596             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   92597             : 
   92598             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   92599             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   92600             : #if 0
   92601             :       /*! returns old style Sage II enum values */
   92602             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   92603             :       /*! returns old style Sage II enum values */
   92604             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   92605             : #endif
   92606             :       /* */
   92607             : 
   92608             : 
   92609             : 
   92610             : 
   92611             :      public:
   92612             :       /* name Traversal Support Functions
   92613             :           \brief Traversal support functions ... incomplete-documentation
   92614             : 
   92615             :           These functions have been made public as part of the design, but they are suggested for internal use 
   92616             :           or by particularly knowledgable users for specialized tools or applications.
   92617             :        */
   92618             :       /* */
   92619             : 
   92620             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   92621             :        // (inferior to ROSE traversal mechanism, experimental).
   92622             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   92623             :        */
   92624             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   92625             : 
   92626             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   92627             :       /*! \brief support for the classic visitor pattern done in GoF */
   92628             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   92629             : 
   92630             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   92631             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   92632             :        */
   92633             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   92634             : 
   92635             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   92636             :        */
   92637             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   92638             : 
   92639             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   92640             :        // This traversal helps support internal tools that call static member functions.
   92641             :        // note: this function operates on the memory pools.
   92642             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   92643             :        */
   92644             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   92645             :       /* */
   92646             : 
   92647             : 
   92648             :      public:
   92649             :       /* name Memory Allocation Functions
   92650             :           \brief Memory allocations functions ... incomplete-documentation
   92651             : 
   92652             :           These functions have been made public as part of the design, but they are suggested for internal use 
   92653             :           or by particularly knowledgable users for specialized tools or applications.
   92654             :        */
   92655             :       /* */
   92656             : 
   92657             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   92658             : 
   92659             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   92660             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   92661             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   92662             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   92663             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   92664             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   92665             :           being used with the AST File I/O mechanism.
   92666             :        */
   92667             :           virtual bool isInMemoryPool() override;
   92668             : 
   92669             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   92670             : 
   92671             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   92672             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   92673             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   92674             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   92675             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   92676             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   92677             :           being used with the AST File I/O mechanism.
   92678             :        */
   92679             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   92680             : 
   92681             :       // DQ (4/30/2006): Modified to be a const function.
   92682             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   92683             : 
   92684             :           This functions is part of general support for many possible tools to operate 
   92685             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   92686             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   92687             :           less than the set of pointers used by the AST file I/O. This is part of
   92688             :           work implemented by Andreas, and support tools such as the AST graph generation.
   92689             : 
   92690             :           \warning This function can return unexpected data members and thus the 
   92691             :                    order and the number of elements is unpredicable and subject 
   92692             :                    to change.
   92693             : 
   92694             :           \returns STL vector of pairs of SgNode* and strings
   92695             :        */
   92696             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   92697             : 
   92698             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   92699             : 
   92700             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   92701             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   92702             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   92703             : 
   92704             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   92705             :                    and subject to change.
   92706             :        */
   92707             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   92708             : 
   92709             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   92710             : 
   92711             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   92712             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   92713             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   92714             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   92715             : 
   92716             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   92717             : 
   92718             :           \returns long
   92719             :        */
   92720             :           virtual long getChildIndex( SgNode* childNode ) const override;
   92721             : 
   92722             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   92723             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   92724             :       /* \brief Constructor for use by AST File I/O Mechanism
   92725             : 
   92726             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   92727             :           which obtained via fast binary file I/O from disk.
   92728             :        */
   92729             :        // SgOmpAllocatorClause( SgOmpAllocatorClauseStorageClass& source );
   92730             : 
   92731             : 
   92732             : 
   92733             : 
   92734             : 
   92735             :  // JH (10/24/2005): methods added to support the ast file IO
   92736             :     private:
   92737             : 
   92738             :       /* name AST Memory Allocation Support Functions
   92739             :           \brief Memory allocations support....
   92740             : 
   92741             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   92742             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   92743             :           and support the AST File I/O Mechanism.
   92744             :        */
   92745             :       /* */
   92746             : 
   92747             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   92748             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   92749             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   92750             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   92751             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   92752             :           a correspinding one in the AST_FILE_IO class!
   92753             :        */
   92754             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   92755             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   92756             :       /* \brief Typedef used for low level memory access.
   92757             :        */
   92758             :        // typedef unsigned char* TestType;
   92759             : 
   92760             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   92761             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   92762             :       /* \brief Typedef used to hold memory addresses as values.
   92763             :        */
   92764             :        // typedef unsigned long  AddressType;
   92765             : 
   92766             : 
   92767             : 
   92768             :        // necessary, to have direct access to the p_freepointer and the private methods !
   92769             :       /*! \brief friend class declaration to support AST File I/O */
   92770             :           friend class AST_FILE_IO;
   92771             : 
   92772             :       /*! \brief friend class declaration to support AST File I/O */
   92773             :           friend class SgOmpAllocatorClauseStorageClass;
   92774             : 
   92775             :       /*! \brief friend class declaration to support AST File I/O */
   92776             :           friend class AstSpecificDataManagingClass;
   92777             : 
   92778             :       /*! \brief friend class declaration to support AST File I/O */
   92779             :           friend class AstSpecificDataManagingClassStorageClass;
   92780             :     public:
   92781             :       /*! \brief IR node constructor to support AST File I/O */
   92782             :           SgOmpAllocatorClause( const SgOmpAllocatorClauseStorageClass& source );
   92783             : 
   92784             :  // private: // JJW hack
   92785             :        /*
   92786             :           name AST Memory Allocation Support Variables
   92787             :           Memory allocations support variables 
   92788             : 
   92789             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   92790             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   92791             :           and support the AST File I/O Mechanism.
   92792             :        */
   92793             :       /* */
   92794             : 
   92795             :     public:
   92796             : 
   92797             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   92798             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   92799             :       // virtual SgNode* addRegExpAttribute();
   92800             :       /*! \brief Support for AST matching using regular expression.
   92801             : 
   92802             :           This support is incomplete and the subject of current research to define 
   92803             :           RegEx trees to support inexact matching.
   92804             :        */
   92805             :           SgOmpAllocatorClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   92806             : 
   92807             : // *** COMMON CODE SECTION ENDS HERE ***
   92808             : 
   92809             : 
   92810             : // End of memberFunctionString
   92811             : // Start of memberFunctionString
   92812             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   92813             : 
   92814             :      // the generated cast function
   92815             :      // friend ROSE_DLL_API SgOmpAllocatorClause* isSgOmpAllocatorClause ( SgNode* s );
   92816             : 
   92817             :           typedef SgOmpClause base_node_type;
   92818             : 
   92819             : 
   92820             : // End of memberFunctionString
   92821             : 
   92822             :      public: 
   92823             :          SgOmpClause::omp_allocator_modifier_enum get_modifier() const;
   92824             :          void set_modifier(SgOmpClause::omp_allocator_modifier_enum modifier);
   92825             : 
   92826             :      public: 
   92827             :          SgExpression* get_user_defined_modifier() const;
   92828             :          void set_user_defined_modifier(SgExpression* user_defined_modifier);
   92829             : 
   92830             : 
   92831             :      public: 
   92832             :          virtual ~SgOmpAllocatorClause();
   92833             : 
   92834             : 
   92835             :      public: 
   92836             :          SgOmpAllocatorClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_allocator_modifier_enum modifier =e_omp_allocator_modifier_unknown, SgExpression* user_defined_modifier = NULL); 
   92837             :          SgOmpAllocatorClause(SgOmpClause::omp_allocator_modifier_enum modifier, SgExpression* user_defined_modifier); 
   92838             : 
   92839             :     protected:
   92840             : // Start of memberFunctionString
   92841             : SgOmpClause::omp_allocator_modifier_enum p_modifier;
   92842             :           
   92843             : // End of memberFunctionString
   92844             : // Start of memberFunctionString
   92845             : SgExpression* p_user_defined_modifier;
   92846             :           
   92847             : // End of memberFunctionString
   92848             : 
   92849             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAllocatorClause>;
   92850             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAllocatorClause, SgOmpClause::omp_allocator_modifier_enum,&SgOmpAllocatorClause::p_modifier>;
   92851             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAllocatorClause, SgExpression*,&SgOmpAllocatorClause::p_user_defined_modifier>;
   92852             : 
   92853             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92854             : 
   92855             : 
   92856             :    };
   92857             : #endif
   92858             : 
   92859             : // postdeclarations for SgOmpAllocatorClause
   92860             : 
   92861             : /* #line 92862 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92862             : 
   92863             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   92864             : 
   92865             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92866             : 
   92867             : 
   92868             : /* #line 92869 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92869             : 
   92870             : 
   92871             : 
   92872             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92873             : 
   92874             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   92875             : //      This code is automatically generated for each 
   92876             : //      terminal and non-terminal within the defined 
   92877             : //      grammar.  There is a simple way to change the 
   92878             : //      code to fix bugs etc.  See the ROSE README file
   92879             : //      for directions.
   92880             : 
   92881             : // tps: (02/22/2010): Adding DLL export requirements
   92882             : #include "rosedll.h"
   92883             : 
   92884             : // predeclarations for SgOmpAtomicClause
   92885             : 
   92886             : /* #line 92887 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92887             : 
   92888             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   92889             : 
   92890             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   92891             : 
   92892             : #if 1
   92893             : // Class Definition for SgOmpAtomicClause
   92894             : class ROSE_DLL_API SgOmpAtomicClause  : public SgOmpClause
   92895             :    {
   92896             :      public:
   92897             : 
   92898             : 
   92899             : /* #line 92900 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   92900             : 
   92901             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   92902             : // Start of memberFunctionString
   92903             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   92904             : 
   92905             : // *** COMMON CODE SECTION BEGINS HERE ***
   92906             : 
   92907             :     public:
   92908             : 
   92909             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   92910             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   92911             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   92912             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   92913             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   92914             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   92915             : 
   92916             :       /*! \brief returns a string representing the class name */
   92917             :           virtual std::string class_name() const override;
   92918             : 
   92919             :       /*! \brief returns new style SageIII enum values */
   92920             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   92921             : 
   92922             :       /*! \brief static variant value */
   92923             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   92924             :        // static const VariantT static_variant = V_SgOmpAtomicClause;
   92925             :           enum { static_variant = V_SgOmpAtomicClause };
   92926             : 
   92927             :        /* the generated cast function */
   92928             :       /*! \brief Casts pointer from base class to derived class */
   92929             :           ROSE_DLL_API friend       SgOmpAtomicClause* isSgOmpAtomicClause(       SgNode * s );
   92930             : 
   92931             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   92932             :           ROSE_DLL_API friend const SgOmpAtomicClause* isSgOmpAtomicClause( const SgNode * s );
   92933             : 
   92934             :      // ******************************************
   92935             :      // * Memory Pool / New / Delete
   92936             :      // ******************************************
   92937             : 
   92938             :      public:
   92939             :           /// \private
   92940             :           static const unsigned pool_size; //
   92941             :           /// \private
   92942             :           static std::vector<unsigned char *> pools; //
   92943             :           /// \private
   92944             :           static SgOmpAtomicClause * next_node; // 
   92945             : 
   92946             :           /// \private
   92947             :           static unsigned long initializeStorageClassArray(SgOmpAtomicClauseStorageClass *); //
   92948             : 
   92949             :           /// \private
   92950             :           static void clearMemoryPool(); //
   92951             :           static void deleteMemoryPool(); //
   92952             : 
   92953             :           /// \private
   92954             :           static void extendMemoryPoolForFileIO(); //
   92955             : 
   92956             :           /// \private
   92957             :           static SgOmpAtomicClause * getPointerFromGlobalIndex(unsigned long); //
   92958             :           /// \private
   92959             :           static SgOmpAtomicClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   92960             : 
   92961             :           /// \private
   92962             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   92963             :           /// \private
   92964             :           static void resetValidFreepointers(); //
   92965             :           /// \private
   92966             :           static unsigned long getNumberOfLastValidPointer(); //
   92967             : 
   92968             : 
   92969             : #if defined(INLINE_FUNCTIONS)
   92970             :       /*! \brief returns pointer to newly allocated IR node */
   92971             :           inline void *operator new (size_t size);
   92972             : #else
   92973             :       /*! \brief returns pointer to newly allocated IR node */
   92974             :           void *operator new (size_t size);
   92975             : #endif
   92976             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   92977             :           void operator delete (void* pointer, size_t size);
   92978             : 
   92979             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   92980           0 :           void operator delete (void* pointer)
   92981             :              {
   92982             :             // This is the generated delete operator...
   92983           0 :                SgOmpAtomicClause::operator delete (pointer,sizeof(SgOmpAtomicClause));
   92984             :              }
   92985             : 
   92986             :       /*! \brief Returns the total number of IR nodes of this type */
   92987             :           static size_t numberOfNodes();
   92988             : 
   92989             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   92990             :           static size_t memoryUsage();
   92991             : 
   92992             :       // End of scope which started in IR nodes specific code 
   92993             :       /* */
   92994             : 
   92995             :       /* name Internal Functions
   92996             :           \brief Internal functions ... incomplete-documentation
   92997             : 
   92998             :           These functions have been made public as part of the design, but they are suggested for internal use 
   92999             :           or by particularly knowledgeable users for specialized tools or applications.
   93000             : 
   93001             :           \internal We could not make these private because they are required by user for special purposes. And 
   93002             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   93003             :          
   93004             :        */
   93005             : 
   93006             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   93007             :        // overridden in every class by *generated* implementation
   93008             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   93009             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   93010             :        // MS: 06/28/02 container of names of variables or container indices 
   93011             :        // used used in the traversal to access AST successor nodes
   93012             :        // overridden in every class by *generated* implementation
   93013             :       /*! \brief container of names of variables or container indices used used in the traversal
   93014             :           to access AST successor nodes overridden in every class by *generated* implementation */
   93015             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   93016             : 
   93017             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   93018             :        // than all the vector copies. The implementation for these functions is generated for each class.
   93019             :       /*! \brief return number of children in the traversal successor list */
   93020             :           virtual size_t get_numberOfTraversalSuccessors() override;
   93021             :       /*! \brief index-based access to traversal successors by index number */
   93022             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   93023             :       /*! \brief index-based access to traversal successors by child node */
   93024             :           virtual size_t get_childIndex(SgNode *child) override;
   93025             : 
   93026             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   93027             :        // MS: 08/16/2002 method for generating RTI information
   93028             :       /*! \brief return C++ Runtime-Time-Information */
   93029             :           virtual RTIReturnType roseRTI() override;
   93030             : #endif
   93031             :       /* */
   93032             : 
   93033             : 
   93034             : 
   93035             :       /* name Deprecated Functions
   93036             :           \brief Deprecated functions ... incomplete-documentation
   93037             : 
   93038             :           These functions have been deprecated from use.
   93039             :        */
   93040             :       /* */
   93041             : 
   93042             :       /*! returns a C style string (char*) representing the class name */
   93043             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   93044             : 
   93045             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   93046             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   93047             : #if 0
   93048             :       /*! returns old style Sage II enum values */
   93049             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   93050             :       /*! returns old style Sage II enum values */
   93051             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   93052             : #endif
   93053             :       /* */
   93054             : 
   93055             : 
   93056             : 
   93057             : 
   93058             :      public:
   93059             :       /* name Traversal Support Functions
   93060             :           \brief Traversal support functions ... incomplete-documentation
   93061             : 
   93062             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93063             :           or by particularly knowledgable users for specialized tools or applications.
   93064             :        */
   93065             :       /* */
   93066             : 
   93067             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   93068             :        // (inferior to ROSE traversal mechanism, experimental).
   93069             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   93070             :        */
   93071             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   93072             : 
   93073             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   93074             :       /*! \brief support for the classic visitor pattern done in GoF */
   93075             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   93076             : 
   93077             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   93078             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   93079             :        */
   93080             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   93081             : 
   93082             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   93083             :        */
   93084             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   93085             : 
   93086             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   93087             :        // This traversal helps support internal tools that call static member functions.
   93088             :        // note: this function operates on the memory pools.
   93089             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   93090             :        */
   93091             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   93092             :       /* */
   93093             : 
   93094             : 
   93095             :      public:
   93096             :       /* name Memory Allocation Functions
   93097             :           \brief Memory allocations functions ... incomplete-documentation
   93098             : 
   93099             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93100             :           or by particularly knowledgable users for specialized tools or applications.
   93101             :        */
   93102             :       /* */
   93103             : 
   93104             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   93105             : 
   93106             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   93107             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   93108             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   93109             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   93110             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   93111             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   93112             :           being used with the AST File I/O mechanism.
   93113             :        */
   93114             :           virtual bool isInMemoryPool() override;
   93115             : 
   93116             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   93117             : 
   93118             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   93119             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   93120             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   93121             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   93122             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   93123             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   93124             :           being used with the AST File I/O mechanism.
   93125             :        */
   93126             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   93127             : 
   93128             :       // DQ (4/30/2006): Modified to be a const function.
   93129             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   93130             : 
   93131             :           This functions is part of general support for many possible tools to operate 
   93132             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   93133             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   93134             :           less than the set of pointers used by the AST file I/O. This is part of
   93135             :           work implemented by Andreas, and support tools such as the AST graph generation.
   93136             : 
   93137             :           \warning This function can return unexpected data members and thus the 
   93138             :                    order and the number of elements is unpredicable and subject 
   93139             :                    to change.
   93140             : 
   93141             :           \returns STL vector of pairs of SgNode* and strings
   93142             :        */
   93143             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   93144             : 
   93145             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   93146             : 
   93147             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   93148             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   93149             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   93150             : 
   93151             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   93152             :                    and subject to change.
   93153             :        */
   93154             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   93155             : 
   93156             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   93157             : 
   93158             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   93159             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   93160             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   93161             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   93162             : 
   93163             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   93164             : 
   93165             :           \returns long
   93166             :        */
   93167             :           virtual long getChildIndex( SgNode* childNode ) const override;
   93168             : 
   93169             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   93170             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   93171             :       /* \brief Constructor for use by AST File I/O Mechanism
   93172             : 
   93173             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   93174             :           which obtained via fast binary file I/O from disk.
   93175             :        */
   93176             :        // SgOmpAtomicClause( SgOmpAtomicClauseStorageClass& source );
   93177             : 
   93178             : 
   93179             : 
   93180             : 
   93181             : 
   93182             :  // JH (10/24/2005): methods added to support the ast file IO
   93183             :     private:
   93184             : 
   93185             :       /* name AST Memory Allocation Support Functions
   93186             :           \brief Memory allocations support....
   93187             : 
   93188             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   93189             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   93190             :           and support the AST File I/O Mechanism.
   93191             :        */
   93192             :       /* */
   93193             : 
   93194             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   93195             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   93196             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   93197             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   93198             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   93199             :           a correspinding one in the AST_FILE_IO class!
   93200             :        */
   93201             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   93202             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   93203             :       /* \brief Typedef used for low level memory access.
   93204             :        */
   93205             :        // typedef unsigned char* TestType;
   93206             : 
   93207             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   93208             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   93209             :       /* \brief Typedef used to hold memory addresses as values.
   93210             :        */
   93211             :        // typedef unsigned long  AddressType;
   93212             : 
   93213             : 
   93214             : 
   93215             :        // necessary, to have direct access to the p_freepointer and the private methods !
   93216             :       /*! \brief friend class declaration to support AST File I/O */
   93217             :           friend class AST_FILE_IO;
   93218             : 
   93219             :       /*! \brief friend class declaration to support AST File I/O */
   93220             :           friend class SgOmpAtomicClauseStorageClass;
   93221             : 
   93222             :       /*! \brief friend class declaration to support AST File I/O */
   93223             :           friend class AstSpecificDataManagingClass;
   93224             : 
   93225             :       /*! \brief friend class declaration to support AST File I/O */
   93226             :           friend class AstSpecificDataManagingClassStorageClass;
   93227             :     public:
   93228             :       /*! \brief IR node constructor to support AST File I/O */
   93229             :           SgOmpAtomicClause( const SgOmpAtomicClauseStorageClass& source );
   93230             : 
   93231             :  // private: // JJW hack
   93232             :        /*
   93233             :           name AST Memory Allocation Support Variables
   93234             :           Memory allocations support variables 
   93235             : 
   93236             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   93237             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   93238             :           and support the AST File I/O Mechanism.
   93239             :        */
   93240             :       /* */
   93241             : 
   93242             :     public:
   93243             : 
   93244             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   93245             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   93246             :       // virtual SgNode* addRegExpAttribute();
   93247             :       /*! \brief Support for AST matching using regular expression.
   93248             : 
   93249             :           This support is incomplete and the subject of current research to define 
   93250             :           RegEx trees to support inexact matching.
   93251             :        */
   93252             :           SgOmpAtomicClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   93253             : 
   93254             : // *** COMMON CODE SECTION ENDS HERE ***
   93255             : 
   93256             : 
   93257             : // End of memberFunctionString
   93258             : // Start of memberFunctionString
   93259             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   93260             : 
   93261             :      // the generated cast function
   93262             :      // friend ROSE_DLL_API SgOmpAtomicClause* isSgOmpAtomicClause ( SgNode* s );
   93263             : 
   93264             :           typedef SgOmpClause base_node_type;
   93265             : 
   93266             : 
   93267             : // End of memberFunctionString
   93268             : 
   93269             :      public: 
   93270             :          SgOmpClause::omp_atomic_clause_enum get_atomicity() const;
   93271             :          void set_atomicity(SgOmpClause::omp_atomic_clause_enum atomicity);
   93272             : 
   93273             : 
   93274             :      public: 
   93275             :          virtual ~SgOmpAtomicClause();
   93276             : 
   93277             : 
   93278             :      public: 
   93279             :          SgOmpAtomicClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_atomic_clause_enum atomicity =e_omp_atomic_clause_unknown); 
   93280             :          SgOmpAtomicClause(SgOmpClause::omp_atomic_clause_enum atomicity); 
   93281             : 
   93282             :     protected:
   93283             : // Start of memberFunctionString
   93284             : SgOmpClause::omp_atomic_clause_enum p_atomicity;
   93285             :           
   93286             : // End of memberFunctionString
   93287             : 
   93288             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAtomicClause>;
   93289             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAtomicClause, SgOmpClause::omp_atomic_clause_enum,&SgOmpAtomicClause::p_atomicity>;
   93290             : 
   93291             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93292             : 
   93293             : 
   93294             :    };
   93295             : #endif
   93296             : 
   93297             : // postdeclarations for SgOmpAtomicClause
   93298             : 
   93299             : /* #line 93300 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93300             : 
   93301             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   93302             : 
   93303             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93304             : 
   93305             : 
   93306             : /* #line 93307 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93307             : 
   93308             : 
   93309             : 
   93310             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93311             : 
   93312             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   93313             : //      This code is automatically generated for each 
   93314             : //      terminal and non-terminal within the defined 
   93315             : //      grammar.  There is a simple way to change the 
   93316             : //      code to fix bugs etc.  See the ROSE README file
   93317             : //      for directions.
   93318             : 
   93319             : // tps: (02/22/2010): Adding DLL export requirements
   93320             : #include "rosedll.h"
   93321             : 
   93322             : // predeclarations for SgOmpProcBindClause
   93323             : 
   93324             : /* #line 93325 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93325             : 
   93326             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   93327             : 
   93328             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93329             : 
   93330             : #if 1
   93331             : // Class Definition for SgOmpProcBindClause
   93332             : class ROSE_DLL_API SgOmpProcBindClause  : public SgOmpClause
   93333             :    {
   93334             :      public:
   93335             : 
   93336             : 
   93337             : /* #line 93338 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93338             : 
   93339             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   93340             : // Start of memberFunctionString
   93341             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   93342             : 
   93343             : // *** COMMON CODE SECTION BEGINS HERE ***
   93344             : 
   93345             :     public:
   93346             : 
   93347             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   93348             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   93349             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   93350             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   93351             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   93352             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   93353             : 
   93354             :       /*! \brief returns a string representing the class name */
   93355             :           virtual std::string class_name() const override;
   93356             : 
   93357             :       /*! \brief returns new style SageIII enum values */
   93358             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   93359             : 
   93360             :       /*! \brief static variant value */
   93361             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   93362             :        // static const VariantT static_variant = V_SgOmpProcBindClause;
   93363             :           enum { static_variant = V_SgOmpProcBindClause };
   93364             : 
   93365             :        /* the generated cast function */
   93366             :       /*! \brief Casts pointer from base class to derived class */
   93367             :           ROSE_DLL_API friend       SgOmpProcBindClause* isSgOmpProcBindClause(       SgNode * s );
   93368             : 
   93369             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   93370             :           ROSE_DLL_API friend const SgOmpProcBindClause* isSgOmpProcBindClause( const SgNode * s );
   93371             : 
   93372             :      // ******************************************
   93373             :      // * Memory Pool / New / Delete
   93374             :      // ******************************************
   93375             : 
   93376             :      public:
   93377             :           /// \private
   93378             :           static const unsigned pool_size; //
   93379             :           /// \private
   93380             :           static std::vector<unsigned char *> pools; //
   93381             :           /// \private
   93382             :           static SgOmpProcBindClause * next_node; // 
   93383             : 
   93384             :           /// \private
   93385             :           static unsigned long initializeStorageClassArray(SgOmpProcBindClauseStorageClass *); //
   93386             : 
   93387             :           /// \private
   93388             :           static void clearMemoryPool(); //
   93389             :           static void deleteMemoryPool(); //
   93390             : 
   93391             :           /// \private
   93392             :           static void extendMemoryPoolForFileIO(); //
   93393             : 
   93394             :           /// \private
   93395             :           static SgOmpProcBindClause * getPointerFromGlobalIndex(unsigned long); //
   93396             :           /// \private
   93397             :           static SgOmpProcBindClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   93398             : 
   93399             :           /// \private
   93400             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   93401             :           /// \private
   93402             :           static void resetValidFreepointers(); //
   93403             :           /// \private
   93404             :           static unsigned long getNumberOfLastValidPointer(); //
   93405             : 
   93406             : 
   93407             : #if defined(INLINE_FUNCTIONS)
   93408             :       /*! \brief returns pointer to newly allocated IR node */
   93409             :           inline void *operator new (size_t size);
   93410             : #else
   93411             :       /*! \brief returns pointer to newly allocated IR node */
   93412             :           void *operator new (size_t size);
   93413             : #endif
   93414             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   93415             :           void operator delete (void* pointer, size_t size);
   93416             : 
   93417             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   93418           0 :           void operator delete (void* pointer)
   93419             :              {
   93420             :             // This is the generated delete operator...
   93421           0 :                SgOmpProcBindClause::operator delete (pointer,sizeof(SgOmpProcBindClause));
   93422             :              }
   93423             : 
   93424             :       /*! \brief Returns the total number of IR nodes of this type */
   93425             :           static size_t numberOfNodes();
   93426             : 
   93427             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   93428             :           static size_t memoryUsage();
   93429             : 
   93430             :       // End of scope which started in IR nodes specific code 
   93431             :       /* */
   93432             : 
   93433             :       /* name Internal Functions
   93434             :           \brief Internal functions ... incomplete-documentation
   93435             : 
   93436             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93437             :           or by particularly knowledgeable users for specialized tools or applications.
   93438             : 
   93439             :           \internal We could not make these private because they are required by user for special purposes. And 
   93440             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   93441             :          
   93442             :        */
   93443             : 
   93444             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   93445             :        // overridden in every class by *generated* implementation
   93446             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   93447             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   93448             :        // MS: 06/28/02 container of names of variables or container indices 
   93449             :        // used used in the traversal to access AST successor nodes
   93450             :        // overridden in every class by *generated* implementation
   93451             :       /*! \brief container of names of variables or container indices used used in the traversal
   93452             :           to access AST successor nodes overridden in every class by *generated* implementation */
   93453             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   93454             : 
   93455             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   93456             :        // than all the vector copies. The implementation for these functions is generated for each class.
   93457             :       /*! \brief return number of children in the traversal successor list */
   93458             :           virtual size_t get_numberOfTraversalSuccessors() override;
   93459             :       /*! \brief index-based access to traversal successors by index number */
   93460             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   93461             :       /*! \brief index-based access to traversal successors by child node */
   93462             :           virtual size_t get_childIndex(SgNode *child) override;
   93463             : 
   93464             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   93465             :        // MS: 08/16/2002 method for generating RTI information
   93466             :       /*! \brief return C++ Runtime-Time-Information */
   93467             :           virtual RTIReturnType roseRTI() override;
   93468             : #endif
   93469             :       /* */
   93470             : 
   93471             : 
   93472             : 
   93473             :       /* name Deprecated Functions
   93474             :           \brief Deprecated functions ... incomplete-documentation
   93475             : 
   93476             :           These functions have been deprecated from use.
   93477             :        */
   93478             :       /* */
   93479             : 
   93480             :       /*! returns a C style string (char*) representing the class name */
   93481             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   93482             : 
   93483             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   93484             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   93485             : #if 0
   93486             :       /*! returns old style Sage II enum values */
   93487             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   93488             :       /*! returns old style Sage II enum values */
   93489             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   93490             : #endif
   93491             :       /* */
   93492             : 
   93493             : 
   93494             : 
   93495             : 
   93496             :      public:
   93497             :       /* name Traversal Support Functions
   93498             :           \brief Traversal support functions ... incomplete-documentation
   93499             : 
   93500             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93501             :           or by particularly knowledgable users for specialized tools or applications.
   93502             :        */
   93503             :       /* */
   93504             : 
   93505             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   93506             :        // (inferior to ROSE traversal mechanism, experimental).
   93507             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   93508             :        */
   93509             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   93510             : 
   93511             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   93512             :       /*! \brief support for the classic visitor pattern done in GoF */
   93513             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   93514             : 
   93515             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   93516             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   93517             :        */
   93518             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   93519             : 
   93520             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   93521             :        */
   93522             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   93523             : 
   93524             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   93525             :        // This traversal helps support internal tools that call static member functions.
   93526             :        // note: this function operates on the memory pools.
   93527             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   93528             :        */
   93529             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   93530             :       /* */
   93531             : 
   93532             : 
   93533             :      public:
   93534             :       /* name Memory Allocation Functions
   93535             :           \brief Memory allocations functions ... incomplete-documentation
   93536             : 
   93537             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93538             :           or by particularly knowledgable users for specialized tools or applications.
   93539             :        */
   93540             :       /* */
   93541             : 
   93542             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   93543             : 
   93544             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   93545             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   93546             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   93547             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   93548             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   93549             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   93550             :           being used with the AST File I/O mechanism.
   93551             :        */
   93552             :           virtual bool isInMemoryPool() override;
   93553             : 
   93554             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   93555             : 
   93556             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   93557             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   93558             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   93559             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   93560             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   93561             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   93562             :           being used with the AST File I/O mechanism.
   93563             :        */
   93564             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   93565             : 
   93566             :       // DQ (4/30/2006): Modified to be a const function.
   93567             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   93568             : 
   93569             :           This functions is part of general support for many possible tools to operate 
   93570             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   93571             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   93572             :           less than the set of pointers used by the AST file I/O. This is part of
   93573             :           work implemented by Andreas, and support tools such as the AST graph generation.
   93574             : 
   93575             :           \warning This function can return unexpected data members and thus the 
   93576             :                    order and the number of elements is unpredicable and subject 
   93577             :                    to change.
   93578             : 
   93579             :           \returns STL vector of pairs of SgNode* and strings
   93580             :        */
   93581             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   93582             : 
   93583             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   93584             : 
   93585             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   93586             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   93587             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   93588             : 
   93589             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   93590             :                    and subject to change.
   93591             :        */
   93592             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   93593             : 
   93594             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   93595             : 
   93596             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   93597             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   93598             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   93599             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   93600             : 
   93601             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   93602             : 
   93603             :           \returns long
   93604             :        */
   93605             :           virtual long getChildIndex( SgNode* childNode ) const override;
   93606             : 
   93607             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   93608             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   93609             :       /* \brief Constructor for use by AST File I/O Mechanism
   93610             : 
   93611             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   93612             :           which obtained via fast binary file I/O from disk.
   93613             :        */
   93614             :        // SgOmpProcBindClause( SgOmpProcBindClauseStorageClass& source );
   93615             : 
   93616             : 
   93617             : 
   93618             : 
   93619             : 
   93620             :  // JH (10/24/2005): methods added to support the ast file IO
   93621             :     private:
   93622             : 
   93623             :       /* name AST Memory Allocation Support Functions
   93624             :           \brief Memory allocations support....
   93625             : 
   93626             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   93627             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   93628             :           and support the AST File I/O Mechanism.
   93629             :        */
   93630             :       /* */
   93631             : 
   93632             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   93633             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   93634             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   93635             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   93636             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   93637             :           a correspinding one in the AST_FILE_IO class!
   93638             :        */
   93639             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   93640             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   93641             :       /* \brief Typedef used for low level memory access.
   93642             :        */
   93643             :        // typedef unsigned char* TestType;
   93644             : 
   93645             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   93646             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   93647             :       /* \brief Typedef used to hold memory addresses as values.
   93648             :        */
   93649             :        // typedef unsigned long  AddressType;
   93650             : 
   93651             : 
   93652             : 
   93653             :        // necessary, to have direct access to the p_freepointer and the private methods !
   93654             :       /*! \brief friend class declaration to support AST File I/O */
   93655             :           friend class AST_FILE_IO;
   93656             : 
   93657             :       /*! \brief friend class declaration to support AST File I/O */
   93658             :           friend class SgOmpProcBindClauseStorageClass;
   93659             : 
   93660             :       /*! \brief friend class declaration to support AST File I/O */
   93661             :           friend class AstSpecificDataManagingClass;
   93662             : 
   93663             :       /*! \brief friend class declaration to support AST File I/O */
   93664             :           friend class AstSpecificDataManagingClassStorageClass;
   93665             :     public:
   93666             :       /*! \brief IR node constructor to support AST File I/O */
   93667             :           SgOmpProcBindClause( const SgOmpProcBindClauseStorageClass& source );
   93668             : 
   93669             :  // private: // JJW hack
   93670             :        /*
   93671             :           name AST Memory Allocation Support Variables
   93672             :           Memory allocations support variables 
   93673             : 
   93674             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   93675             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   93676             :           and support the AST File I/O Mechanism.
   93677             :        */
   93678             :       /* */
   93679             : 
   93680             :     public:
   93681             : 
   93682             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   93683             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   93684             :       // virtual SgNode* addRegExpAttribute();
   93685             :       /*! \brief Support for AST matching using regular expression.
   93686             : 
   93687             :           This support is incomplete and the subject of current research to define 
   93688             :           RegEx trees to support inexact matching.
   93689             :        */
   93690             :           SgOmpProcBindClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   93691             : 
   93692             : // *** COMMON CODE SECTION ENDS HERE ***
   93693             : 
   93694             : 
   93695             : // End of memberFunctionString
   93696             : // Start of memberFunctionString
   93697             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   93698             : 
   93699             :      // the generated cast function
   93700             :      // friend ROSE_DLL_API SgOmpProcBindClause* isSgOmpProcBindClause ( SgNode* s );
   93701             : 
   93702             :           typedef SgOmpClause base_node_type;
   93703             : 
   93704             : 
   93705             : // End of memberFunctionString
   93706             : 
   93707             :      public: 
   93708             :          SgOmpClause::omp_proc_bind_policy_enum get_policy() const;
   93709             :          void set_policy(SgOmpClause::omp_proc_bind_policy_enum policy);
   93710             : 
   93711             : 
   93712             :      public: 
   93713             :          virtual ~SgOmpProcBindClause();
   93714             : 
   93715             : 
   93716             :      public: 
   93717             :          SgOmpProcBindClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_proc_bind_policy_enum policy =e_omp_proc_bind_policy_unknown); 
   93718             :          SgOmpProcBindClause(SgOmpClause::omp_proc_bind_policy_enum policy); 
   93719             : 
   93720             :     protected:
   93721             : // Start of memberFunctionString
   93722             : SgOmpClause::omp_proc_bind_policy_enum p_policy;
   93723             :           
   93724             : // End of memberFunctionString
   93725             : 
   93726             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpProcBindClause>;
   93727             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpProcBindClause, SgOmpClause::omp_proc_bind_policy_enum,&SgOmpProcBindClause::p_policy>;
   93728             : 
   93729             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93730             : 
   93731             : 
   93732             :    };
   93733             : #endif
   93734             : 
   93735             : // postdeclarations for SgOmpProcBindClause
   93736             : 
   93737             : /* #line 93738 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93738             : 
   93739             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   93740             : 
   93741             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93742             : 
   93743             : 
   93744             : /* #line 93745 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93745             : 
   93746             : 
   93747             : 
   93748             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93749             : 
   93750             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   93751             : //      This code is automatically generated for each 
   93752             : //      terminal and non-terminal within the defined 
   93753             : //      grammar.  There is a simple way to change the 
   93754             : //      code to fix bugs etc.  See the ROSE README file
   93755             : //      for directions.
   93756             : 
   93757             : // tps: (02/22/2010): Adding DLL export requirements
   93758             : #include "rosedll.h"
   93759             : 
   93760             : // predeclarations for SgOmpBindClause
   93761             : 
   93762             : /* #line 93763 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93763             : 
   93764             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   93765             : 
   93766             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   93767             : 
   93768             : #if 1
   93769             : // Class Definition for SgOmpBindClause
   93770             : class ROSE_DLL_API SgOmpBindClause  : public SgOmpClause
   93771             :    {
   93772             :      public:
   93773             : 
   93774             : 
   93775             : /* #line 93776 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   93776             : 
   93777             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   93778             : // Start of memberFunctionString
   93779             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   93780             : 
   93781             : // *** COMMON CODE SECTION BEGINS HERE ***
   93782             : 
   93783             :     public:
   93784             : 
   93785             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   93786             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   93787             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   93788             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   93789             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   93790             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   93791             : 
   93792             :       /*! \brief returns a string representing the class name */
   93793             :           virtual std::string class_name() const override;
   93794             : 
   93795             :       /*! \brief returns new style SageIII enum values */
   93796             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   93797             : 
   93798             :       /*! \brief static variant value */
   93799             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   93800             :        // static const VariantT static_variant = V_SgOmpBindClause;
   93801             :           enum { static_variant = V_SgOmpBindClause };
   93802             : 
   93803             :        /* the generated cast function */
   93804             :       /*! \brief Casts pointer from base class to derived class */
   93805             :           ROSE_DLL_API friend       SgOmpBindClause* isSgOmpBindClause(       SgNode * s );
   93806             : 
   93807             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   93808             :           ROSE_DLL_API friend const SgOmpBindClause* isSgOmpBindClause( const SgNode * s );
   93809             : 
   93810             :      // ******************************************
   93811             :      // * Memory Pool / New / Delete
   93812             :      // ******************************************
   93813             : 
   93814             :      public:
   93815             :           /// \private
   93816             :           static const unsigned pool_size; //
   93817             :           /// \private
   93818             :           static std::vector<unsigned char *> pools; //
   93819             :           /// \private
   93820             :           static SgOmpBindClause * next_node; // 
   93821             : 
   93822             :           /// \private
   93823             :           static unsigned long initializeStorageClassArray(SgOmpBindClauseStorageClass *); //
   93824             : 
   93825             :           /// \private
   93826             :           static void clearMemoryPool(); //
   93827             :           static void deleteMemoryPool(); //
   93828             : 
   93829             :           /// \private
   93830             :           static void extendMemoryPoolForFileIO(); //
   93831             : 
   93832             :           /// \private
   93833             :           static SgOmpBindClause * getPointerFromGlobalIndex(unsigned long); //
   93834             :           /// \private
   93835             :           static SgOmpBindClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   93836             : 
   93837             :           /// \private
   93838             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   93839             :           /// \private
   93840             :           static void resetValidFreepointers(); //
   93841             :           /// \private
   93842             :           static unsigned long getNumberOfLastValidPointer(); //
   93843             : 
   93844             : 
   93845             : #if defined(INLINE_FUNCTIONS)
   93846             :       /*! \brief returns pointer to newly allocated IR node */
   93847             :           inline void *operator new (size_t size);
   93848             : #else
   93849             :       /*! \brief returns pointer to newly allocated IR node */
   93850             :           void *operator new (size_t size);
   93851             : #endif
   93852             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   93853             :           void operator delete (void* pointer, size_t size);
   93854             : 
   93855             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   93856           0 :           void operator delete (void* pointer)
   93857             :              {
   93858             :             // This is the generated delete operator...
   93859           0 :                SgOmpBindClause::operator delete (pointer,sizeof(SgOmpBindClause));
   93860             :              }
   93861             : 
   93862             :       /*! \brief Returns the total number of IR nodes of this type */
   93863             :           static size_t numberOfNodes();
   93864             : 
   93865             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   93866             :           static size_t memoryUsage();
   93867             : 
   93868             :       // End of scope which started in IR nodes specific code 
   93869             :       /* */
   93870             : 
   93871             :       /* name Internal Functions
   93872             :           \brief Internal functions ... incomplete-documentation
   93873             : 
   93874             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93875             :           or by particularly knowledgeable users for specialized tools or applications.
   93876             : 
   93877             :           \internal We could not make these private because they are required by user for special purposes. And 
   93878             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   93879             :          
   93880             :        */
   93881             : 
   93882             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   93883             :        // overridden in every class by *generated* implementation
   93884             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   93885             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   93886             :        // MS: 06/28/02 container of names of variables or container indices 
   93887             :        // used used in the traversal to access AST successor nodes
   93888             :        // overridden in every class by *generated* implementation
   93889             :       /*! \brief container of names of variables or container indices used used in the traversal
   93890             :           to access AST successor nodes overridden in every class by *generated* implementation */
   93891             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   93892             : 
   93893             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   93894             :        // than all the vector copies. The implementation for these functions is generated for each class.
   93895             :       /*! \brief return number of children in the traversal successor list */
   93896             :           virtual size_t get_numberOfTraversalSuccessors() override;
   93897             :       /*! \brief index-based access to traversal successors by index number */
   93898             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   93899             :       /*! \brief index-based access to traversal successors by child node */
   93900             :           virtual size_t get_childIndex(SgNode *child) override;
   93901             : 
   93902             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   93903             :        // MS: 08/16/2002 method for generating RTI information
   93904             :       /*! \brief return C++ Runtime-Time-Information */
   93905             :           virtual RTIReturnType roseRTI() override;
   93906             : #endif
   93907             :       /* */
   93908             : 
   93909             : 
   93910             : 
   93911             :       /* name Deprecated Functions
   93912             :           \brief Deprecated functions ... incomplete-documentation
   93913             : 
   93914             :           These functions have been deprecated from use.
   93915             :        */
   93916             :       /* */
   93917             : 
   93918             :       /*! returns a C style string (char*) representing the class name */
   93919             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   93920             : 
   93921             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   93922             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   93923             : #if 0
   93924             :       /*! returns old style Sage II enum values */
   93925             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   93926             :       /*! returns old style Sage II enum values */
   93927             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   93928             : #endif
   93929             :       /* */
   93930             : 
   93931             : 
   93932             : 
   93933             : 
   93934             :      public:
   93935             :       /* name Traversal Support Functions
   93936             :           \brief Traversal support functions ... incomplete-documentation
   93937             : 
   93938             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93939             :           or by particularly knowledgable users for specialized tools or applications.
   93940             :        */
   93941             :       /* */
   93942             : 
   93943             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   93944             :        // (inferior to ROSE traversal mechanism, experimental).
   93945             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   93946             :        */
   93947             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   93948             : 
   93949             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   93950             :       /*! \brief support for the classic visitor pattern done in GoF */
   93951             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   93952             : 
   93953             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   93954             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   93955             :        */
   93956             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   93957             : 
   93958             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   93959             :        */
   93960             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   93961             : 
   93962             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   93963             :        // This traversal helps support internal tools that call static member functions.
   93964             :        // note: this function operates on the memory pools.
   93965             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   93966             :        */
   93967             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   93968             :       /* */
   93969             : 
   93970             : 
   93971             :      public:
   93972             :       /* name Memory Allocation Functions
   93973             :           \brief Memory allocations functions ... incomplete-documentation
   93974             : 
   93975             :           These functions have been made public as part of the design, but they are suggested for internal use 
   93976             :           or by particularly knowledgable users for specialized tools or applications.
   93977             :        */
   93978             :       /* */
   93979             : 
   93980             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   93981             : 
   93982             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   93983             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   93984             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   93985             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   93986             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   93987             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   93988             :           being used with the AST File I/O mechanism.
   93989             :        */
   93990             :           virtual bool isInMemoryPool() override;
   93991             : 
   93992             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   93993             : 
   93994             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   93995             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   93996             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   93997             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   93998             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   93999             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   94000             :           being used with the AST File I/O mechanism.
   94001             :        */
   94002             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   94003             : 
   94004             :       // DQ (4/30/2006): Modified to be a const function.
   94005             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   94006             : 
   94007             :           This functions is part of general support for many possible tools to operate 
   94008             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   94009             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   94010             :           less than the set of pointers used by the AST file I/O. This is part of
   94011             :           work implemented by Andreas, and support tools such as the AST graph generation.
   94012             : 
   94013             :           \warning This function can return unexpected data members and thus the 
   94014             :                    order and the number of elements is unpredicable and subject 
   94015             :                    to change.
   94016             : 
   94017             :           \returns STL vector of pairs of SgNode* and strings
   94018             :        */
   94019             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   94020             : 
   94021             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   94022             : 
   94023             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   94024             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   94025             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   94026             : 
   94027             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   94028             :                    and subject to change.
   94029             :        */
   94030             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   94031             : 
   94032             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   94033             : 
   94034             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   94035             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   94036             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   94037             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   94038             : 
   94039             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   94040             : 
   94041             :           \returns long
   94042             :        */
   94043             :           virtual long getChildIndex( SgNode* childNode ) const override;
   94044             : 
   94045             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   94046             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94047             :       /* \brief Constructor for use by AST File I/O Mechanism
   94048             : 
   94049             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   94050             :           which obtained via fast binary file I/O from disk.
   94051             :        */
   94052             :        // SgOmpBindClause( SgOmpBindClauseStorageClass& source );
   94053             : 
   94054             : 
   94055             : 
   94056             : 
   94057             : 
   94058             :  // JH (10/24/2005): methods added to support the ast file IO
   94059             :     private:
   94060             : 
   94061             :       /* name AST Memory Allocation Support Functions
   94062             :           \brief Memory allocations support....
   94063             : 
   94064             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   94065             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   94066             :           and support the AST File I/O Mechanism.
   94067             :        */
   94068             :       /* */
   94069             : 
   94070             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   94071             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   94072             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   94073             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   94074             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   94075             :           a correspinding one in the AST_FILE_IO class!
   94076             :        */
   94077             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   94078             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94079             :       /* \brief Typedef used for low level memory access.
   94080             :        */
   94081             :        // typedef unsigned char* TestType;
   94082             : 
   94083             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   94084             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94085             :       /* \brief Typedef used to hold memory addresses as values.
   94086             :        */
   94087             :        // typedef unsigned long  AddressType;
   94088             : 
   94089             : 
   94090             : 
   94091             :        // necessary, to have direct access to the p_freepointer and the private methods !
   94092             :       /*! \brief friend class declaration to support AST File I/O */
   94093             :           friend class AST_FILE_IO;
   94094             : 
   94095             :       /*! \brief friend class declaration to support AST File I/O */
   94096             :           friend class SgOmpBindClauseStorageClass;
   94097             : 
   94098             :       /*! \brief friend class declaration to support AST File I/O */
   94099             :           friend class AstSpecificDataManagingClass;
   94100             : 
   94101             :       /*! \brief friend class declaration to support AST File I/O */
   94102             :           friend class AstSpecificDataManagingClassStorageClass;
   94103             :     public:
   94104             :       /*! \brief IR node constructor to support AST File I/O */
   94105             :           SgOmpBindClause( const SgOmpBindClauseStorageClass& source );
   94106             : 
   94107             :  // private: // JJW hack
   94108             :        /*
   94109             :           name AST Memory Allocation Support Variables
   94110             :           Memory allocations support variables 
   94111             : 
   94112             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   94113             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   94114             :           and support the AST File I/O Mechanism.
   94115             :        */
   94116             :       /* */
   94117             : 
   94118             :     public:
   94119             : 
   94120             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   94121             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   94122             :       // virtual SgNode* addRegExpAttribute();
   94123             :       /*! \brief Support for AST matching using regular expression.
   94124             : 
   94125             :           This support is incomplete and the subject of current research to define 
   94126             :           RegEx trees to support inexact matching.
   94127             :        */
   94128             :           SgOmpBindClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   94129             : 
   94130             : // *** COMMON CODE SECTION ENDS HERE ***
   94131             : 
   94132             : 
   94133             : // End of memberFunctionString
   94134             : // Start of memberFunctionString
   94135             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   94136             : 
   94137             :      // the generated cast function
   94138             :      // friend ROSE_DLL_API SgOmpBindClause* isSgOmpBindClause ( SgNode* s );
   94139             : 
   94140             :           typedef SgOmpClause base_node_type;
   94141             : 
   94142             : 
   94143             : // End of memberFunctionString
   94144             : 
   94145             :      public: 
   94146             :          SgOmpClause::omp_bind_binding_enum get_binding() const;
   94147             :          void set_binding(SgOmpClause::omp_bind_binding_enum binding);
   94148             : 
   94149             : 
   94150             :      public: 
   94151             :          virtual ~SgOmpBindClause();
   94152             : 
   94153             : 
   94154             :      public: 
   94155             :          SgOmpBindClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_bind_binding_enum binding =e_omp_bind_binding_unspecified); 
   94156             :          SgOmpBindClause(SgOmpClause::omp_bind_binding_enum binding); 
   94157             : 
   94158             :     protected:
   94159             : // Start of memberFunctionString
   94160             : SgOmpClause::omp_bind_binding_enum p_binding;
   94161             :           
   94162             : // End of memberFunctionString
   94163             : 
   94164             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpBindClause>;
   94165             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpBindClause, SgOmpClause::omp_bind_binding_enum,&SgOmpBindClause::p_binding>;
   94166             : 
   94167             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94168             : 
   94169             : 
   94170             :    };
   94171             : #endif
   94172             : 
   94173             : // postdeclarations for SgOmpBindClause
   94174             : 
   94175             : /* #line 94176 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94176             : 
   94177             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   94178             : 
   94179             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94180             : 
   94181             : 
   94182             : /* #line 94183 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94183             : 
   94184             : 
   94185             : 
   94186             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94187             : 
   94188             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   94189             : //      This code is automatically generated for each 
   94190             : //      terminal and non-terminal within the defined 
   94191             : //      grammar.  There is a simple way to change the 
   94192             : //      code to fix bugs etc.  See the ROSE README file
   94193             : //      for directions.
   94194             : 
   94195             : // tps: (02/22/2010): Adding DLL export requirements
   94196             : #include "rosedll.h"
   94197             : 
   94198             : // predeclarations for SgOmpOrderClause
   94199             : 
   94200             : /* #line 94201 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94201             : 
   94202             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   94203             : 
   94204             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94205             : 
   94206             : #if 1
   94207             : // Class Definition for SgOmpOrderClause
   94208             : class ROSE_DLL_API SgOmpOrderClause  : public SgOmpClause
   94209             :    {
   94210             :      public:
   94211             : 
   94212             : 
   94213             : /* #line 94214 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94214             : 
   94215             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   94216             : // Start of memberFunctionString
   94217             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   94218             : 
   94219             : // *** COMMON CODE SECTION BEGINS HERE ***
   94220             : 
   94221             :     public:
   94222             : 
   94223             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   94224             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   94225             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   94226             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   94227             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   94228             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   94229             : 
   94230             :       /*! \brief returns a string representing the class name */
   94231             :           virtual std::string class_name() const override;
   94232             : 
   94233             :       /*! \brief returns new style SageIII enum values */
   94234             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   94235             : 
   94236             :       /*! \brief static variant value */
   94237             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   94238             :        // static const VariantT static_variant = V_SgOmpOrderClause;
   94239             :           enum { static_variant = V_SgOmpOrderClause };
   94240             : 
   94241             :        /* the generated cast function */
   94242             :       /*! \brief Casts pointer from base class to derived class */
   94243             :           ROSE_DLL_API friend       SgOmpOrderClause* isSgOmpOrderClause(       SgNode * s );
   94244             : 
   94245             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   94246             :           ROSE_DLL_API friend const SgOmpOrderClause* isSgOmpOrderClause( const SgNode * s );
   94247             : 
   94248             :      // ******************************************
   94249             :      // * Memory Pool / New / Delete
   94250             :      // ******************************************
   94251             : 
   94252             :      public:
   94253             :           /// \private
   94254             :           static const unsigned pool_size; //
   94255             :           /// \private
   94256             :           static std::vector<unsigned char *> pools; //
   94257             :           /// \private
   94258             :           static SgOmpOrderClause * next_node; // 
   94259             : 
   94260             :           /// \private
   94261             :           static unsigned long initializeStorageClassArray(SgOmpOrderClauseStorageClass *); //
   94262             : 
   94263             :           /// \private
   94264             :           static void clearMemoryPool(); //
   94265             :           static void deleteMemoryPool(); //
   94266             : 
   94267             :           /// \private
   94268             :           static void extendMemoryPoolForFileIO(); //
   94269             : 
   94270             :           /// \private
   94271             :           static SgOmpOrderClause * getPointerFromGlobalIndex(unsigned long); //
   94272             :           /// \private
   94273             :           static SgOmpOrderClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   94274             : 
   94275             :           /// \private
   94276             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   94277             :           /// \private
   94278             :           static void resetValidFreepointers(); //
   94279             :           /// \private
   94280             :           static unsigned long getNumberOfLastValidPointer(); //
   94281             : 
   94282             : 
   94283             : #if defined(INLINE_FUNCTIONS)
   94284             :       /*! \brief returns pointer to newly allocated IR node */
   94285             :           inline void *operator new (size_t size);
   94286             : #else
   94287             :       /*! \brief returns pointer to newly allocated IR node */
   94288             :           void *operator new (size_t size);
   94289             : #endif
   94290             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   94291             :           void operator delete (void* pointer, size_t size);
   94292             : 
   94293             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   94294           0 :           void operator delete (void* pointer)
   94295             :              {
   94296             :             // This is the generated delete operator...
   94297           0 :                SgOmpOrderClause::operator delete (pointer,sizeof(SgOmpOrderClause));
   94298             :              }
   94299             : 
   94300             :       /*! \brief Returns the total number of IR nodes of this type */
   94301             :           static size_t numberOfNodes();
   94302             : 
   94303             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   94304             :           static size_t memoryUsage();
   94305             : 
   94306             :       // End of scope which started in IR nodes specific code 
   94307             :       /* */
   94308             : 
   94309             :       /* name Internal Functions
   94310             :           \brief Internal functions ... incomplete-documentation
   94311             : 
   94312             :           These functions have been made public as part of the design, but they are suggested for internal use 
   94313             :           or by particularly knowledgeable users for specialized tools or applications.
   94314             : 
   94315             :           \internal We could not make these private because they are required by user for special purposes. And 
   94316             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   94317             :          
   94318             :        */
   94319             : 
   94320             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   94321             :        // overridden in every class by *generated* implementation
   94322             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   94323             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   94324             :        // MS: 06/28/02 container of names of variables or container indices 
   94325             :        // used used in the traversal to access AST successor nodes
   94326             :        // overridden in every class by *generated* implementation
   94327             :       /*! \brief container of names of variables or container indices used used in the traversal
   94328             :           to access AST successor nodes overridden in every class by *generated* implementation */
   94329             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   94330             : 
   94331             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   94332             :        // than all the vector copies. The implementation for these functions is generated for each class.
   94333             :       /*! \brief return number of children in the traversal successor list */
   94334             :           virtual size_t get_numberOfTraversalSuccessors() override;
   94335             :       /*! \brief index-based access to traversal successors by index number */
   94336             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   94337             :       /*! \brief index-based access to traversal successors by child node */
   94338             :           virtual size_t get_childIndex(SgNode *child) override;
   94339             : 
   94340             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   94341             :        // MS: 08/16/2002 method for generating RTI information
   94342             :       /*! \brief return C++ Runtime-Time-Information */
   94343             :           virtual RTIReturnType roseRTI() override;
   94344             : #endif
   94345             :       /* */
   94346             : 
   94347             : 
   94348             : 
   94349             :       /* name Deprecated Functions
   94350             :           \brief Deprecated functions ... incomplete-documentation
   94351             : 
   94352             :           These functions have been deprecated from use.
   94353             :        */
   94354             :       /* */
   94355             : 
   94356             :       /*! returns a C style string (char*) representing the class name */
   94357             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   94358             : 
   94359             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   94360             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   94361             : #if 0
   94362             :       /*! returns old style Sage II enum values */
   94363             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   94364             :       /*! returns old style Sage II enum values */
   94365             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   94366             : #endif
   94367             :       /* */
   94368             : 
   94369             : 
   94370             : 
   94371             : 
   94372             :      public:
   94373             :       /* name Traversal Support Functions
   94374             :           \brief Traversal support functions ... incomplete-documentation
   94375             : 
   94376             :           These functions have been made public as part of the design, but they are suggested for internal use 
   94377             :           or by particularly knowledgable users for specialized tools or applications.
   94378             :        */
   94379             :       /* */
   94380             : 
   94381             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   94382             :        // (inferior to ROSE traversal mechanism, experimental).
   94383             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   94384             :        */
   94385             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   94386             : 
   94387             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   94388             :       /*! \brief support for the classic visitor pattern done in GoF */
   94389             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   94390             : 
   94391             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   94392             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   94393             :        */
   94394             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   94395             : 
   94396             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   94397             :        */
   94398             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   94399             : 
   94400             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   94401             :        // This traversal helps support internal tools that call static member functions.
   94402             :        // note: this function operates on the memory pools.
   94403             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   94404             :        */
   94405             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   94406             :       /* */
   94407             : 
   94408             : 
   94409             :      public:
   94410             :       /* name Memory Allocation Functions
   94411             :           \brief Memory allocations functions ... incomplete-documentation
   94412             : 
   94413             :           These functions have been made public as part of the design, but they are suggested for internal use 
   94414             :           or by particularly knowledgable users for specialized tools or applications.
   94415             :        */
   94416             :       /* */
   94417             : 
   94418             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   94419             : 
   94420             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   94421             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   94422             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   94423             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   94424             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   94425             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   94426             :           being used with the AST File I/O mechanism.
   94427             :        */
   94428             :           virtual bool isInMemoryPool() override;
   94429             : 
   94430             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   94431             : 
   94432             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   94433             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   94434             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   94435             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   94436             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   94437             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   94438             :           being used with the AST File I/O mechanism.
   94439             :        */
   94440             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   94441             : 
   94442             :       // DQ (4/30/2006): Modified to be a const function.
   94443             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   94444             : 
   94445             :           This functions is part of general support for many possible tools to operate 
   94446             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   94447             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   94448             :           less than the set of pointers used by the AST file I/O. This is part of
   94449             :           work implemented by Andreas, and support tools such as the AST graph generation.
   94450             : 
   94451             :           \warning This function can return unexpected data members and thus the 
   94452             :                    order and the number of elements is unpredicable and subject 
   94453             :                    to change.
   94454             : 
   94455             :           \returns STL vector of pairs of SgNode* and strings
   94456             :        */
   94457             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   94458             : 
   94459             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   94460             : 
   94461             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   94462             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   94463             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   94464             : 
   94465             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   94466             :                    and subject to change.
   94467             :        */
   94468             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   94469             : 
   94470             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   94471             : 
   94472             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   94473             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   94474             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   94475             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   94476             : 
   94477             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   94478             : 
   94479             :           \returns long
   94480             :        */
   94481             :           virtual long getChildIndex( SgNode* childNode ) const override;
   94482             : 
   94483             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   94484             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94485             :       /* \brief Constructor for use by AST File I/O Mechanism
   94486             : 
   94487             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   94488             :           which obtained via fast binary file I/O from disk.
   94489             :        */
   94490             :        // SgOmpOrderClause( SgOmpOrderClauseStorageClass& source );
   94491             : 
   94492             : 
   94493             : 
   94494             : 
   94495             : 
   94496             :  // JH (10/24/2005): methods added to support the ast file IO
   94497             :     private:
   94498             : 
   94499             :       /* name AST Memory Allocation Support Functions
   94500             :           \brief Memory allocations support....
   94501             : 
   94502             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   94503             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   94504             :           and support the AST File I/O Mechanism.
   94505             :        */
   94506             :       /* */
   94507             : 
   94508             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   94509             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   94510             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   94511             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   94512             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   94513             :           a correspinding one in the AST_FILE_IO class!
   94514             :        */
   94515             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   94516             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94517             :       /* \brief Typedef used for low level memory access.
   94518             :        */
   94519             :        // typedef unsigned char* TestType;
   94520             : 
   94521             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   94522             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94523             :       /* \brief Typedef used to hold memory addresses as values.
   94524             :        */
   94525             :        // typedef unsigned long  AddressType;
   94526             : 
   94527             : 
   94528             : 
   94529             :        // necessary, to have direct access to the p_freepointer and the private methods !
   94530             :       /*! \brief friend class declaration to support AST File I/O */
   94531             :           friend class AST_FILE_IO;
   94532             : 
   94533             :       /*! \brief friend class declaration to support AST File I/O */
   94534             :           friend class SgOmpOrderClauseStorageClass;
   94535             : 
   94536             :       /*! \brief friend class declaration to support AST File I/O */
   94537             :           friend class AstSpecificDataManagingClass;
   94538             : 
   94539             :       /*! \brief friend class declaration to support AST File I/O */
   94540             :           friend class AstSpecificDataManagingClassStorageClass;
   94541             :     public:
   94542             :       /*! \brief IR node constructor to support AST File I/O */
   94543             :           SgOmpOrderClause( const SgOmpOrderClauseStorageClass& source );
   94544             : 
   94545             :  // private: // JJW hack
   94546             :        /*
   94547             :           name AST Memory Allocation Support Variables
   94548             :           Memory allocations support variables 
   94549             : 
   94550             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   94551             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   94552             :           and support the AST File I/O Mechanism.
   94553             :        */
   94554             :       /* */
   94555             : 
   94556             :     public:
   94557             : 
   94558             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   94559             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   94560             :       // virtual SgNode* addRegExpAttribute();
   94561             :       /*! \brief Support for AST matching using regular expression.
   94562             : 
   94563             :           This support is incomplete and the subject of current research to define 
   94564             :           RegEx trees to support inexact matching.
   94565             :        */
   94566             :           SgOmpOrderClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   94567             : 
   94568             : // *** COMMON CODE SECTION ENDS HERE ***
   94569             : 
   94570             : 
   94571             : // End of memberFunctionString
   94572             : // Start of memberFunctionString
   94573             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   94574             : 
   94575             :      // the generated cast function
   94576             :      // friend ROSE_DLL_API SgOmpOrderClause* isSgOmpOrderClause ( SgNode* s );
   94577             : 
   94578             :           typedef SgOmpClause base_node_type;
   94579             : 
   94580             : 
   94581             : // End of memberFunctionString
   94582             : 
   94583             :      public: 
   94584             :          SgOmpClause::omp_order_kind_enum get_kind() const;
   94585             :          void set_kind(SgOmpClause::omp_order_kind_enum kind);
   94586             : 
   94587             : 
   94588             :      public: 
   94589             :          virtual ~SgOmpOrderClause();
   94590             : 
   94591             : 
   94592             :      public: 
   94593             :          SgOmpOrderClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_order_kind_enum kind =e_omp_order_kind_unspecified); 
   94594             :          SgOmpOrderClause(SgOmpClause::omp_order_kind_enum kind); 
   94595             : 
   94596             :     protected:
   94597             : // Start of memberFunctionString
   94598             : SgOmpClause::omp_order_kind_enum p_kind;
   94599             :           
   94600             : // End of memberFunctionString
   94601             : 
   94602             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpOrderClause>;
   94603             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpOrderClause, SgOmpClause::omp_order_kind_enum,&SgOmpOrderClause::p_kind>;
   94604             : 
   94605             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94606             : 
   94607             : 
   94608             :    };
   94609             : #endif
   94610             : 
   94611             : // postdeclarations for SgOmpOrderClause
   94612             : 
   94613             : /* #line 94614 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94614             : 
   94615             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   94616             : 
   94617             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94618             : 
   94619             : 
   94620             : /* #line 94621 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94621             : 
   94622             : 
   94623             : 
   94624             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94625             : 
   94626             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   94627             : //      This code is automatically generated for each 
   94628             : //      terminal and non-terminal within the defined 
   94629             : //      grammar.  There is a simple way to change the 
   94630             : //      code to fix bugs etc.  See the ROSE README file
   94631             : //      for directions.
   94632             : 
   94633             : // tps: (02/22/2010): Adding DLL export requirements
   94634             : #include "rosedll.h"
   94635             : 
   94636             : // predeclarations for SgOmpDistScheduleClause
   94637             : 
   94638             : /* #line 94639 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94639             : 
   94640             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   94641             : 
   94642             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   94643             : 
   94644             : #if 1
   94645             : // Class Definition for SgOmpDistScheduleClause
   94646             : class ROSE_DLL_API SgOmpDistScheduleClause  : public SgOmpClause
   94647             :    {
   94648             :      public:
   94649             : 
   94650             : 
   94651             : /* #line 94652 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   94652             : 
   94653             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   94654             : // Start of memberFunctionString
   94655             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   94656             : 
   94657             : // *** COMMON CODE SECTION BEGINS HERE ***
   94658             : 
   94659             :     public:
   94660             : 
   94661             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   94662             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   94663             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   94664             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   94665             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   94666             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   94667             : 
   94668             :       /*! \brief returns a string representing the class name */
   94669             :           virtual std::string class_name() const override;
   94670             : 
   94671             :       /*! \brief returns new style SageIII enum values */
   94672             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   94673             : 
   94674             :       /*! \brief static variant value */
   94675             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   94676             :        // static const VariantT static_variant = V_SgOmpDistScheduleClause;
   94677             :           enum { static_variant = V_SgOmpDistScheduleClause };
   94678             : 
   94679             :        /* the generated cast function */
   94680             :       /*! \brief Casts pointer from base class to derived class */
   94681             :           ROSE_DLL_API friend       SgOmpDistScheduleClause* isSgOmpDistScheduleClause(       SgNode * s );
   94682             : 
   94683             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   94684             :           ROSE_DLL_API friend const SgOmpDistScheduleClause* isSgOmpDistScheduleClause( const SgNode * s );
   94685             : 
   94686             :      // ******************************************
   94687             :      // * Memory Pool / New / Delete
   94688             :      // ******************************************
   94689             : 
   94690             :      public:
   94691             :           /// \private
   94692             :           static const unsigned pool_size; //
   94693             :           /// \private
   94694             :           static std::vector<unsigned char *> pools; //
   94695             :           /// \private
   94696             :           static SgOmpDistScheduleClause * next_node; // 
   94697             : 
   94698             :           /// \private
   94699             :           static unsigned long initializeStorageClassArray(SgOmpDistScheduleClauseStorageClass *); //
   94700             : 
   94701             :           /// \private
   94702             :           static void clearMemoryPool(); //
   94703             :           static void deleteMemoryPool(); //
   94704             : 
   94705             :           /// \private
   94706             :           static void extendMemoryPoolForFileIO(); //
   94707             : 
   94708             :           /// \private
   94709             :           static SgOmpDistScheduleClause * getPointerFromGlobalIndex(unsigned long); //
   94710             :           /// \private
   94711             :           static SgOmpDistScheduleClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   94712             : 
   94713             :           /// \private
   94714             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   94715             :           /// \private
   94716             :           static void resetValidFreepointers(); //
   94717             :           /// \private
   94718             :           static unsigned long getNumberOfLastValidPointer(); //
   94719             : 
   94720             : 
   94721             : #if defined(INLINE_FUNCTIONS)
   94722             :       /*! \brief returns pointer to newly allocated IR node */
   94723             :           inline void *operator new (size_t size);
   94724             : #else
   94725             :       /*! \brief returns pointer to newly allocated IR node */
   94726             :           void *operator new (size_t size);
   94727             : #endif
   94728             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   94729             :           void operator delete (void* pointer, size_t size);
   94730             : 
   94731             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   94732           0 :           void operator delete (void* pointer)
   94733             :              {
   94734             :             // This is the generated delete operator...
   94735           0 :                SgOmpDistScheduleClause::operator delete (pointer,sizeof(SgOmpDistScheduleClause));
   94736             :              }
   94737             : 
   94738             :       /*! \brief Returns the total number of IR nodes of this type */
   94739             :           static size_t numberOfNodes();
   94740             : 
   94741             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   94742             :           static size_t memoryUsage();
   94743             : 
   94744             :       // End of scope which started in IR nodes specific code 
   94745             :       /* */
   94746             : 
   94747             :       /* name Internal Functions
   94748             :           \brief Internal functions ... incomplete-documentation
   94749             : 
   94750             :           These functions have been made public as part of the design, but they are suggested for internal use 
   94751             :           or by particularly knowledgeable users for specialized tools or applications.
   94752             : 
   94753             :           \internal We could not make these private because they are required by user for special purposes. And 
   94754             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   94755             :          
   94756             :        */
   94757             : 
   94758             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   94759             :        // overridden in every class by *generated* implementation
   94760             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   94761             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   94762             :        // MS: 06/28/02 container of names of variables or container indices 
   94763             :        // used used in the traversal to access AST successor nodes
   94764             :        // overridden in every class by *generated* implementation
   94765             :       /*! \brief container of names of variables or container indices used used in the traversal
   94766             :           to access AST successor nodes overridden in every class by *generated* implementation */
   94767             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   94768             : 
   94769             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   94770             :        // than all the vector copies. The implementation for these functions is generated for each class.
   94771             :       /*! \brief return number of children in the traversal successor list */
   94772             :           virtual size_t get_numberOfTraversalSuccessors() override;
   94773             :       /*! \brief index-based access to traversal successors by index number */
   94774             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   94775             :       /*! \brief index-based access to traversal successors by child node */
   94776             :           virtual size_t get_childIndex(SgNode *child) override;
   94777             : 
   94778             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   94779             :        // MS: 08/16/2002 method for generating RTI information
   94780             :       /*! \brief return C++ Runtime-Time-Information */
   94781             :           virtual RTIReturnType roseRTI() override;
   94782             : #endif
   94783             :       /* */
   94784             : 
   94785             : 
   94786             : 
   94787             :       /* name Deprecated Functions
   94788             :           \brief Deprecated functions ... incomplete-documentation
   94789             : 
   94790             :           These functions have been deprecated from use.
   94791             :        */
   94792             :       /* */
   94793             : 
   94794             :       /*! returns a C style string (char*) representing the class name */
   94795             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   94796             : 
   94797             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   94798             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   94799             : #if 0
   94800             :       /*! returns old style Sage II enum values */
   94801             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   94802             :       /*! returns old style Sage II enum values */
   94803             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   94804             : #endif
   94805             :       /* */
   94806             : 
   94807             : 
   94808             : 
   94809             : 
   94810             :      public:
   94811             :       /* name Traversal Support Functions
   94812             :           \brief Traversal support functions ... incomplete-documentation
   94813             : 
   94814             :           These functions have been made public as part of the design, but they are suggested for internal use 
   94815             :           or by particularly knowledgable users for specialized tools or applications.
   94816             :        */
   94817             :       /* */
   94818             : 
   94819             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   94820             :        // (inferior to ROSE traversal mechanism, experimental).
   94821             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   94822             :        */
   94823             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   94824             : 
   94825             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   94826             :       /*! \brief support for the classic visitor pattern done in GoF */
   94827             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   94828             : 
   94829             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   94830             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   94831             :        */
   94832             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   94833             : 
   94834             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   94835             :        */
   94836             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   94837             : 
   94838             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   94839             :        // This traversal helps support internal tools that call static member functions.
   94840             :        // note: this function operates on the memory pools.
   94841             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   94842             :        */
   94843             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   94844             :       /* */
   94845             : 
   94846             : 
   94847             :      public:
   94848             :       /* name Memory Allocation Functions
   94849             :           \brief Memory allocations functions ... incomplete-documentation
   94850             : 
   94851             :           These functions have been made public as part of the design, but they are suggested for internal use 
   94852             :           or by particularly knowledgable users for specialized tools or applications.
   94853             :        */
   94854             :       /* */
   94855             : 
   94856             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   94857             : 
   94858             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   94859             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   94860             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   94861             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   94862             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   94863             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   94864             :           being used with the AST File I/O mechanism.
   94865             :        */
   94866             :           virtual bool isInMemoryPool() override;
   94867             : 
   94868             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   94869             : 
   94870             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   94871             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   94872             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   94873             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   94874             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   94875             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   94876             :           being used with the AST File I/O mechanism.
   94877             :        */
   94878             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   94879             : 
   94880             :       // DQ (4/30/2006): Modified to be a const function.
   94881             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   94882             : 
   94883             :           This functions is part of general support for many possible tools to operate 
   94884             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   94885             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   94886             :           less than the set of pointers used by the AST file I/O. This is part of
   94887             :           work implemented by Andreas, and support tools such as the AST graph generation.
   94888             : 
   94889             :           \warning This function can return unexpected data members and thus the 
   94890             :                    order and the number of elements is unpredicable and subject 
   94891             :                    to change.
   94892             : 
   94893             :           \returns STL vector of pairs of SgNode* and strings
   94894             :        */
   94895             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   94896             : 
   94897             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   94898             : 
   94899             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   94900             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   94901             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   94902             : 
   94903             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   94904             :                    and subject to change.
   94905             :        */
   94906             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   94907             : 
   94908             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   94909             : 
   94910             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   94911             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   94912             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   94913             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   94914             : 
   94915             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   94916             : 
   94917             :           \returns long
   94918             :        */
   94919             :           virtual long getChildIndex( SgNode* childNode ) const override;
   94920             : 
   94921             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   94922             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94923             :       /* \brief Constructor for use by AST File I/O Mechanism
   94924             : 
   94925             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   94926             :           which obtained via fast binary file I/O from disk.
   94927             :        */
   94928             :        // SgOmpDistScheduleClause( SgOmpDistScheduleClauseStorageClass& source );
   94929             : 
   94930             : 
   94931             : 
   94932             : 
   94933             : 
   94934             :  // JH (10/24/2005): methods added to support the ast file IO
   94935             :     private:
   94936             : 
   94937             :       /* name AST Memory Allocation Support Functions
   94938             :           \brief Memory allocations support....
   94939             : 
   94940             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   94941             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   94942             :           and support the AST File I/O Mechanism.
   94943             :        */
   94944             :       /* */
   94945             : 
   94946             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   94947             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   94948             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   94949             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   94950             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   94951             :           a correspinding one in the AST_FILE_IO class!
   94952             :        */
   94953             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   94954             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94955             :       /* \brief Typedef used for low level memory access.
   94956             :        */
   94957             :        // typedef unsigned char* TestType;
   94958             : 
   94959             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   94960             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   94961             :       /* \brief Typedef used to hold memory addresses as values.
   94962             :        */
   94963             :        // typedef unsigned long  AddressType;
   94964             : 
   94965             : 
   94966             : 
   94967             :        // necessary, to have direct access to the p_freepointer and the private methods !
   94968             :       /*! \brief friend class declaration to support AST File I/O */
   94969             :           friend class AST_FILE_IO;
   94970             : 
   94971             :       /*! \brief friend class declaration to support AST File I/O */
   94972             :           friend class SgOmpDistScheduleClauseStorageClass;
   94973             : 
   94974             :       /*! \brief friend class declaration to support AST File I/O */
   94975             :           friend class AstSpecificDataManagingClass;
   94976             : 
   94977             :       /*! \brief friend class declaration to support AST File I/O */
   94978             :           friend class AstSpecificDataManagingClassStorageClass;
   94979             :     public:
   94980             :       /*! \brief IR node constructor to support AST File I/O */
   94981             :           SgOmpDistScheduleClause( const SgOmpDistScheduleClauseStorageClass& source );
   94982             : 
   94983             :  // private: // JJW hack
   94984             :        /*
   94985             :           name AST Memory Allocation Support Variables
   94986             :           Memory allocations support variables 
   94987             : 
   94988             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   94989             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   94990             :           and support the AST File I/O Mechanism.
   94991             :        */
   94992             :       /* */
   94993             : 
   94994             :     public:
   94995             : 
   94996             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   94997             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   94998             :       // virtual SgNode* addRegExpAttribute();
   94999             :       /*! \brief Support for AST matching using regular expression.
   95000             : 
   95001             :           This support is incomplete and the subject of current research to define 
   95002             :           RegEx trees to support inexact matching.
   95003             :        */
   95004             :           SgOmpDistScheduleClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   95005             : 
   95006             : // *** COMMON CODE SECTION ENDS HERE ***
   95007             : 
   95008             : 
   95009             : // End of memberFunctionString
   95010             : // Start of memberFunctionString
   95011             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   95012             : 
   95013             :      // the generated cast function
   95014             :      // friend ROSE_DLL_API SgOmpDistScheduleClause* isSgOmpDistScheduleClause ( SgNode* s );
   95015             : 
   95016             :           typedef SgOmpClause base_node_type;
   95017             : 
   95018             : 
   95019             : // End of memberFunctionString
   95020             : 
   95021             :      public: 
   95022             :          SgOmpClause::omp_dist_schedule_kind_enum get_kind() const;
   95023             :          void set_kind(SgOmpClause::omp_dist_schedule_kind_enum kind);
   95024             : 
   95025             :      public: 
   95026             :          SgExpression* get_chunk_size() const;
   95027             :          void set_chunk_size(SgExpression* chunk_size);
   95028             : 
   95029             : 
   95030             :      public: 
   95031             :          virtual ~SgOmpDistScheduleClause();
   95032             : 
   95033             : 
   95034             :      public: 
   95035             :          SgOmpDistScheduleClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_dist_schedule_kind_enum kind =e_omp_dist_schedule_kind_unspecified, SgExpression* chunk_size = NULL); 
   95036             :          SgOmpDistScheduleClause(SgOmpClause::omp_dist_schedule_kind_enum kind, SgExpression* chunk_size); 
   95037             : 
   95038             :     protected:
   95039             : // Start of memberFunctionString
   95040             : SgOmpClause::omp_dist_schedule_kind_enum p_kind;
   95041             :           
   95042             : // End of memberFunctionString
   95043             : // Start of memberFunctionString
   95044             : SgExpression* p_chunk_size;
   95045             :           
   95046             : // End of memberFunctionString
   95047             : 
   95048             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDistScheduleClause>;
   95049             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDistScheduleClause, SgOmpClause::omp_dist_schedule_kind_enum,&SgOmpDistScheduleClause::p_kind>;
   95050             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDistScheduleClause, SgExpression*,&SgOmpDistScheduleClause::p_chunk_size>;
   95051             : 
   95052             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95053             : 
   95054             : 
   95055             :    };
   95056             : #endif
   95057             : 
   95058             : // postdeclarations for SgOmpDistScheduleClause
   95059             : 
   95060             : /* #line 95061 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95061             : 
   95062             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   95063             : 
   95064             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95065             : 
   95066             : 
   95067             : /* #line 95068 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95068             : 
   95069             : 
   95070             : 
   95071             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95072             : 
   95073             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   95074             : //      This code is automatically generated for each 
   95075             : //      terminal and non-terminal within the defined 
   95076             : //      grammar.  There is a simple way to change the 
   95077             : //      code to fix bugs etc.  See the ROSE README file
   95078             : //      for directions.
   95079             : 
   95080             : // tps: (02/22/2010): Adding DLL export requirements
   95081             : #include "rosedll.h"
   95082             : 
   95083             : // predeclarations for SgOmpExpressionClause
   95084             : 
   95085             : /* #line 95086 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95086             : 
   95087             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   95088             : 
   95089             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95090             : 
   95091             : #if 1
   95092             : // Class Definition for SgOmpExpressionClause
   95093             : class ROSE_DLL_API SgOmpExpressionClause  : public SgOmpClause
   95094             :    {
   95095             :      public:
   95096             : 
   95097             : 
   95098             : /* #line 95099 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95099             : 
   95100             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   95101             : // Start of memberFunctionString
   95102             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   95103             : 
   95104             : // *** COMMON CODE SECTION BEGINS HERE ***
   95105             : 
   95106             :     public:
   95107             : 
   95108             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   95109             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   95110             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   95111             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   95112             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   95113             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   95114             : 
   95115             :       /*! \brief returns a string representing the class name */
   95116             :           virtual std::string class_name() const override;
   95117             : 
   95118             :       /*! \brief returns new style SageIII enum values */
   95119             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   95120             : 
   95121             :       /*! \brief static variant value */
   95122             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   95123             :        // static const VariantT static_variant = V_SgOmpExpressionClause;
   95124             :           enum { static_variant = V_SgOmpExpressionClause };
   95125             : 
   95126             :        /* the generated cast function */
   95127             :       /*! \brief Casts pointer from base class to derived class */
   95128             :           ROSE_DLL_API friend       SgOmpExpressionClause* isSgOmpExpressionClause(       SgNode * s );
   95129             : 
   95130             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   95131             :           ROSE_DLL_API friend const SgOmpExpressionClause* isSgOmpExpressionClause( const SgNode * s );
   95132             : 
   95133             :      // ******************************************
   95134             :      // * Memory Pool / New / Delete
   95135             :      // ******************************************
   95136             : 
   95137             :      public:
   95138             :           /// \private
   95139             :           static const unsigned pool_size; //
   95140             :           /// \private
   95141             :           static std::vector<unsigned char *> pools; //
   95142             :           /// \private
   95143             :           static SgOmpExpressionClause * next_node; // 
   95144             : 
   95145             :           /// \private
   95146             :           static unsigned long initializeStorageClassArray(SgOmpExpressionClauseStorageClass *); //
   95147             : 
   95148             :           /// \private
   95149             :           static void clearMemoryPool(); //
   95150             :           static void deleteMemoryPool(); //
   95151             : 
   95152             :           /// \private
   95153             :           static void extendMemoryPoolForFileIO(); //
   95154             : 
   95155             :           /// \private
   95156             :           static SgOmpExpressionClause * getPointerFromGlobalIndex(unsigned long); //
   95157             :           /// \private
   95158             :           static SgOmpExpressionClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   95159             : 
   95160             :           /// \private
   95161             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   95162             :           /// \private
   95163             :           static void resetValidFreepointers(); //
   95164             :           /// \private
   95165             :           static unsigned long getNumberOfLastValidPointer(); //
   95166             : 
   95167             : 
   95168             : #if defined(INLINE_FUNCTIONS)
   95169             :       /*! \brief returns pointer to newly allocated IR node */
   95170             :           inline void *operator new (size_t size);
   95171             : #else
   95172             :       /*! \brief returns pointer to newly allocated IR node */
   95173             :           void *operator new (size_t size);
   95174             : #endif
   95175             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   95176             :           void operator delete (void* pointer, size_t size);
   95177             : 
   95178             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   95179           0 :           void operator delete (void* pointer)
   95180             :              {
   95181             :             // This is the generated delete operator...
   95182           0 :                SgOmpExpressionClause::operator delete (pointer,sizeof(SgOmpExpressionClause));
   95183             :              }
   95184             : 
   95185             :       /*! \brief Returns the total number of IR nodes of this type */
   95186             :           static size_t numberOfNodes();
   95187             : 
   95188             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   95189             :           static size_t memoryUsage();
   95190             : 
   95191             :       // End of scope which started in IR nodes specific code 
   95192             :       /* */
   95193             : 
   95194             :       /* name Internal Functions
   95195             :           \brief Internal functions ... incomplete-documentation
   95196             : 
   95197             :           These functions have been made public as part of the design, but they are suggested for internal use 
   95198             :           or by particularly knowledgeable users for specialized tools or applications.
   95199             : 
   95200             :           \internal We could not make these private because they are required by user for special purposes. And 
   95201             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   95202             :          
   95203             :        */
   95204             : 
   95205             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   95206             :        // overridden in every class by *generated* implementation
   95207             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   95208             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   95209             :        // MS: 06/28/02 container of names of variables or container indices 
   95210             :        // used used in the traversal to access AST successor nodes
   95211             :        // overridden in every class by *generated* implementation
   95212             :       /*! \brief container of names of variables or container indices used used in the traversal
   95213             :           to access AST successor nodes overridden in every class by *generated* implementation */
   95214             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   95215             : 
   95216             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   95217             :        // than all the vector copies. The implementation for these functions is generated for each class.
   95218             :       /*! \brief return number of children in the traversal successor list */
   95219             :           virtual size_t get_numberOfTraversalSuccessors() override;
   95220             :       /*! \brief index-based access to traversal successors by index number */
   95221             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   95222             :       /*! \brief index-based access to traversal successors by child node */
   95223             :           virtual size_t get_childIndex(SgNode *child) override;
   95224             : 
   95225             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   95226             :        // MS: 08/16/2002 method for generating RTI information
   95227             :       /*! \brief return C++ Runtime-Time-Information */
   95228             :           virtual RTIReturnType roseRTI() override;
   95229             : #endif
   95230             :       /* */
   95231             : 
   95232             : 
   95233             : 
   95234             :       /* name Deprecated Functions
   95235             :           \brief Deprecated functions ... incomplete-documentation
   95236             : 
   95237             :           These functions have been deprecated from use.
   95238             :        */
   95239             :       /* */
   95240             : 
   95241             :       /*! returns a C style string (char*) representing the class name */
   95242             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   95243             : 
   95244             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   95245             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   95246             : #if 0
   95247             :       /*! returns old style Sage II enum values */
   95248             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   95249             :       /*! returns old style Sage II enum values */
   95250             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   95251             : #endif
   95252             :       /* */
   95253             : 
   95254             : 
   95255             : 
   95256             : 
   95257             :      public:
   95258             :       /* name Traversal Support Functions
   95259             :           \brief Traversal support functions ... incomplete-documentation
   95260             : 
   95261             :           These functions have been made public as part of the design, but they are suggested for internal use 
   95262             :           or by particularly knowledgable users for specialized tools or applications.
   95263             :        */
   95264             :       /* */
   95265             : 
   95266             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   95267             :        // (inferior to ROSE traversal mechanism, experimental).
   95268             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   95269             :        */
   95270             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   95271             : 
   95272             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   95273             :       /*! \brief support for the classic visitor pattern done in GoF */
   95274             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   95275             : 
   95276             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   95277             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   95278             :        */
   95279             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   95280             : 
   95281             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   95282             :        */
   95283             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   95284             : 
   95285             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   95286             :        // This traversal helps support internal tools that call static member functions.
   95287             :        // note: this function operates on the memory pools.
   95288             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   95289             :        */
   95290             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   95291             :       /* */
   95292             : 
   95293             : 
   95294             :      public:
   95295             :       /* name Memory Allocation Functions
   95296             :           \brief Memory allocations functions ... incomplete-documentation
   95297             : 
   95298             :           These functions have been made public as part of the design, but they are suggested for internal use 
   95299             :           or by particularly knowledgable users for specialized tools or applications.
   95300             :        */
   95301             :       /* */
   95302             : 
   95303             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   95304             : 
   95305             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   95306             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   95307             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   95308             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   95309             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   95310             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   95311             :           being used with the AST File I/O mechanism.
   95312             :        */
   95313             :           virtual bool isInMemoryPool() override;
   95314             : 
   95315             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   95316             : 
   95317             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   95318             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   95319             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   95320             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   95321             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   95322             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   95323             :           being used with the AST File I/O mechanism.
   95324             :        */
   95325             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   95326             : 
   95327             :       // DQ (4/30/2006): Modified to be a const function.
   95328             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   95329             : 
   95330             :           This functions is part of general support for many possible tools to operate 
   95331             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   95332             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   95333             :           less than the set of pointers used by the AST file I/O. This is part of
   95334             :           work implemented by Andreas, and support tools such as the AST graph generation.
   95335             : 
   95336             :           \warning This function can return unexpected data members and thus the 
   95337             :                    order and the number of elements is unpredicable and subject 
   95338             :                    to change.
   95339             : 
   95340             :           \returns STL vector of pairs of SgNode* and strings
   95341             :        */
   95342             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   95343             : 
   95344             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   95345             : 
   95346             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   95347             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   95348             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   95349             : 
   95350             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   95351             :                    and subject to change.
   95352             :        */
   95353             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   95354             : 
   95355             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   95356             : 
   95357             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   95358             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   95359             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   95360             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   95361             : 
   95362             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   95363             : 
   95364             :           \returns long
   95365             :        */
   95366             :           virtual long getChildIndex( SgNode* childNode ) const override;
   95367             : 
   95368             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   95369             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   95370             :       /* \brief Constructor for use by AST File I/O Mechanism
   95371             : 
   95372             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   95373             :           which obtained via fast binary file I/O from disk.
   95374             :        */
   95375             :        // SgOmpExpressionClause( SgOmpExpressionClauseStorageClass& source );
   95376             : 
   95377             : 
   95378             : 
   95379             : 
   95380             : 
   95381             :  // JH (10/24/2005): methods added to support the ast file IO
   95382             :     private:
   95383             : 
   95384             :       /* name AST Memory Allocation Support Functions
   95385             :           \brief Memory allocations support....
   95386             : 
   95387             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   95388             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   95389             :           and support the AST File I/O Mechanism.
   95390             :        */
   95391             :       /* */
   95392             : 
   95393             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   95394             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   95395             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   95396             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   95397             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   95398             :           a correspinding one in the AST_FILE_IO class!
   95399             :        */
   95400             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   95401             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   95402             :       /* \brief Typedef used for low level memory access.
   95403             :        */
   95404             :        // typedef unsigned char* TestType;
   95405             : 
   95406             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   95407             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   95408             :       /* \brief Typedef used to hold memory addresses as values.
   95409             :        */
   95410             :        // typedef unsigned long  AddressType;
   95411             : 
   95412             : 
   95413             : 
   95414             :        // necessary, to have direct access to the p_freepointer and the private methods !
   95415             :       /*! \brief friend class declaration to support AST File I/O */
   95416             :           friend class AST_FILE_IO;
   95417             : 
   95418             :       /*! \brief friend class declaration to support AST File I/O */
   95419             :           friend class SgOmpExpressionClauseStorageClass;
   95420             : 
   95421             :       /*! \brief friend class declaration to support AST File I/O */
   95422             :           friend class AstSpecificDataManagingClass;
   95423             : 
   95424             :       /*! \brief friend class declaration to support AST File I/O */
   95425             :           friend class AstSpecificDataManagingClassStorageClass;
   95426             :     public:
   95427             :       /*! \brief IR node constructor to support AST File I/O */
   95428             :           SgOmpExpressionClause( const SgOmpExpressionClauseStorageClass& source );
   95429             : 
   95430             :  // private: // JJW hack
   95431             :        /*
   95432             :           name AST Memory Allocation Support Variables
   95433             :           Memory allocations support variables 
   95434             : 
   95435             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   95436             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   95437             :           and support the AST File I/O Mechanism.
   95438             :        */
   95439             :       /* */
   95440             : 
   95441             :     public:
   95442             : 
   95443             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   95444             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   95445             :       // virtual SgNode* addRegExpAttribute();
   95446             :       /*! \brief Support for AST matching using regular expression.
   95447             : 
   95448             :           This support is incomplete and the subject of current research to define 
   95449             :           RegEx trees to support inexact matching.
   95450             :        */
   95451             :           SgOmpExpressionClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   95452             : 
   95453             : // *** COMMON CODE SECTION ENDS HERE ***
   95454             : 
   95455             : 
   95456             : // End of memberFunctionString
   95457             : // Start of memberFunctionString
   95458             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   95459             : 
   95460             :      // the generated cast function
   95461             :      // friend ROSE_DLL_API SgOmpExpressionClause* isSgOmpExpressionClause ( SgNode* s );
   95462             : 
   95463             :           typedef SgOmpClause base_node_type;
   95464             : 
   95465             : 
   95466             : // End of memberFunctionString
   95467             : 
   95468             :      public: 
   95469             :          SgExpression* get_expression() const;
   95470             :          void set_expression(SgExpression* expression);
   95471             : 
   95472             : 
   95473             :      public: 
   95474             :          virtual ~SgOmpExpressionClause();
   95475             : 
   95476             : 
   95477             :      public: 
   95478             :          SgOmpExpressionClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   95479             :          SgOmpExpressionClause(SgExpression* expression); 
   95480             : 
   95481             :     protected:
   95482             : // Start of memberFunctionString
   95483             : SgExpression* p_expression;
   95484             :           
   95485             : // End of memberFunctionString
   95486             : 
   95487             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpExpressionClause>;
   95488             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpExpressionClause, SgExpression*,&SgOmpExpressionClause::p_expression>;
   95489             : 
   95490             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95491             : 
   95492             : 
   95493             :    };
   95494             : #endif
   95495             : 
   95496             : // postdeclarations for SgOmpExpressionClause
   95497             : 
   95498             : /* #line 95499 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95499             : 
   95500             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   95501             : 
   95502             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95503             : 
   95504             : 
   95505             : /* #line 95506 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95506             : 
   95507             : 
   95508             : 
   95509             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95510             : 
   95511             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   95512             : //      This code is automatically generated for each 
   95513             : //      terminal and non-terminal within the defined 
   95514             : //      grammar.  There is a simple way to change the 
   95515             : //      code to fix bugs etc.  See the ROSE README file
   95516             : //      for directions.
   95517             : 
   95518             : // tps: (02/22/2010): Adding DLL export requirements
   95519             : #include "rosedll.h"
   95520             : 
   95521             : // predeclarations for SgOmpOrderedClause
   95522             : 
   95523             : /* #line 95524 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95524             : 
   95525             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   95526             : 
   95527             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95528             : 
   95529             : #if 1
   95530             : // Class Definition for SgOmpOrderedClause
   95531             : class ROSE_DLL_API SgOmpOrderedClause  : public SgOmpExpressionClause
   95532             :    {
   95533             :      public:
   95534             : 
   95535             : 
   95536             : /* #line 95537 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95537             : 
   95538             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   95539             : // Start of memberFunctionString
   95540             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   95541             : 
   95542             : // *** COMMON CODE SECTION BEGINS HERE ***
   95543             : 
   95544             :     public:
   95545             : 
   95546             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   95547             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   95548             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   95549             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   95550             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   95551             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   95552             : 
   95553             :       /*! \brief returns a string representing the class name */
   95554             :           virtual std::string class_name() const override;
   95555             : 
   95556             :       /*! \brief returns new style SageIII enum values */
   95557             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   95558             : 
   95559             :       /*! \brief static variant value */
   95560             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   95561             :        // static const VariantT static_variant = V_SgOmpOrderedClause;
   95562             :           enum { static_variant = V_SgOmpOrderedClause };
   95563             : 
   95564             :        /* the generated cast function */
   95565             :       /*! \brief Casts pointer from base class to derived class */
   95566             :           ROSE_DLL_API friend       SgOmpOrderedClause* isSgOmpOrderedClause(       SgNode * s );
   95567             : 
   95568             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   95569             :           ROSE_DLL_API friend const SgOmpOrderedClause* isSgOmpOrderedClause( const SgNode * s );
   95570             : 
   95571             :      // ******************************************
   95572             :      // * Memory Pool / New / Delete
   95573             :      // ******************************************
   95574             : 
   95575             :      public:
   95576             :           /// \private
   95577             :           static const unsigned pool_size; //
   95578             :           /// \private
   95579             :           static std::vector<unsigned char *> pools; //
   95580             :           /// \private
   95581             :           static SgOmpOrderedClause * next_node; // 
   95582             : 
   95583             :           /// \private
   95584             :           static unsigned long initializeStorageClassArray(SgOmpOrderedClauseStorageClass *); //
   95585             : 
   95586             :           /// \private
   95587             :           static void clearMemoryPool(); //
   95588             :           static void deleteMemoryPool(); //
   95589             : 
   95590             :           /// \private
   95591             :           static void extendMemoryPoolForFileIO(); //
   95592             : 
   95593             :           /// \private
   95594             :           static SgOmpOrderedClause * getPointerFromGlobalIndex(unsigned long); //
   95595             :           /// \private
   95596             :           static SgOmpOrderedClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   95597             : 
   95598             :           /// \private
   95599             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   95600             :           /// \private
   95601             :           static void resetValidFreepointers(); //
   95602             :           /// \private
   95603             :           static unsigned long getNumberOfLastValidPointer(); //
   95604             : 
   95605             : 
   95606             : #if defined(INLINE_FUNCTIONS)
   95607             :       /*! \brief returns pointer to newly allocated IR node */
   95608             :           inline void *operator new (size_t size);
   95609             : #else
   95610             :       /*! \brief returns pointer to newly allocated IR node */
   95611             :           void *operator new (size_t size);
   95612             : #endif
   95613             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   95614             :           void operator delete (void* pointer, size_t size);
   95615             : 
   95616             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   95617           0 :           void operator delete (void* pointer)
   95618             :              {
   95619             :             // This is the generated delete operator...
   95620           0 :                SgOmpOrderedClause::operator delete (pointer,sizeof(SgOmpOrderedClause));
   95621             :              }
   95622             : 
   95623             :       /*! \brief Returns the total number of IR nodes of this type */
   95624             :           static size_t numberOfNodes();
   95625             : 
   95626             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   95627             :           static size_t memoryUsage();
   95628             : 
   95629             :       // End of scope which started in IR nodes specific code 
   95630             :       /* */
   95631             : 
   95632             :       /* name Internal Functions
   95633             :           \brief Internal functions ... incomplete-documentation
   95634             : 
   95635             :           These functions have been made public as part of the design, but they are suggested for internal use 
   95636             :           or by particularly knowledgeable users for specialized tools or applications.
   95637             : 
   95638             :           \internal We could not make these private because they are required by user for special purposes. And 
   95639             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   95640             :          
   95641             :        */
   95642             : 
   95643             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   95644             :        // overridden in every class by *generated* implementation
   95645             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   95646             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   95647             :        // MS: 06/28/02 container of names of variables or container indices 
   95648             :        // used used in the traversal to access AST successor nodes
   95649             :        // overridden in every class by *generated* implementation
   95650             :       /*! \brief container of names of variables or container indices used used in the traversal
   95651             :           to access AST successor nodes overridden in every class by *generated* implementation */
   95652             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   95653             : 
   95654             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   95655             :        // than all the vector copies. The implementation for these functions is generated for each class.
   95656             :       /*! \brief return number of children in the traversal successor list */
   95657             :           virtual size_t get_numberOfTraversalSuccessors() override;
   95658             :       /*! \brief index-based access to traversal successors by index number */
   95659             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   95660             :       /*! \brief index-based access to traversal successors by child node */
   95661             :           virtual size_t get_childIndex(SgNode *child) override;
   95662             : 
   95663             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   95664             :        // MS: 08/16/2002 method for generating RTI information
   95665             :       /*! \brief return C++ Runtime-Time-Information */
   95666             :           virtual RTIReturnType roseRTI() override;
   95667             : #endif
   95668             :       /* */
   95669             : 
   95670             : 
   95671             : 
   95672             :       /* name Deprecated Functions
   95673             :           \brief Deprecated functions ... incomplete-documentation
   95674             : 
   95675             :           These functions have been deprecated from use.
   95676             :        */
   95677             :       /* */
   95678             : 
   95679             :       /*! returns a C style string (char*) representing the class name */
   95680             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   95681             : 
   95682             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   95683             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   95684             : #if 0
   95685             :       /*! returns old style Sage II enum values */
   95686             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   95687             :       /*! returns old style Sage II enum values */
   95688             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   95689             : #endif
   95690             :       /* */
   95691             : 
   95692             : 
   95693             : 
   95694             : 
   95695             :      public:
   95696             :       /* name Traversal Support Functions
   95697             :           \brief Traversal support functions ... incomplete-documentation
   95698             : 
   95699             :           These functions have been made public as part of the design, but they are suggested for internal use 
   95700             :           or by particularly knowledgable users for specialized tools or applications.
   95701             :        */
   95702             :       /* */
   95703             : 
   95704             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   95705             :        // (inferior to ROSE traversal mechanism, experimental).
   95706             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   95707             :        */
   95708             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   95709             : 
   95710             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   95711             :       /*! \brief support for the classic visitor pattern done in GoF */
   95712             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   95713             : 
   95714             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   95715             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   95716             :        */
   95717             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   95718             : 
   95719             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   95720             :        */
   95721             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   95722             : 
   95723             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   95724             :        // This traversal helps support internal tools that call static member functions.
   95725             :        // note: this function operates on the memory pools.
   95726             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   95727             :        */
   95728             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   95729             :       /* */
   95730             : 
   95731             : 
   95732             :      public:
   95733             :       /* name Memory Allocation Functions
   95734             :           \brief Memory allocations functions ... incomplete-documentation
   95735             : 
   95736             :           These functions have been made public as part of the design, but they are suggested for internal use 
   95737             :           or by particularly knowledgable users for specialized tools or applications.
   95738             :        */
   95739             :       /* */
   95740             : 
   95741             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   95742             : 
   95743             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   95744             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   95745             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   95746             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   95747             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   95748             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   95749             :           being used with the AST File I/O mechanism.
   95750             :        */
   95751             :           virtual bool isInMemoryPool() override;
   95752             : 
   95753             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   95754             : 
   95755             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   95756             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   95757             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   95758             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   95759             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   95760             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   95761             :           being used with the AST File I/O mechanism.
   95762             :        */
   95763             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   95764             : 
   95765             :       // DQ (4/30/2006): Modified to be a const function.
   95766             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   95767             : 
   95768             :           This functions is part of general support for many possible tools to operate 
   95769             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   95770             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   95771             :           less than the set of pointers used by the AST file I/O. This is part of
   95772             :           work implemented by Andreas, and support tools such as the AST graph generation.
   95773             : 
   95774             :           \warning This function can return unexpected data members and thus the 
   95775             :                    order and the number of elements is unpredicable and subject 
   95776             :                    to change.
   95777             : 
   95778             :           \returns STL vector of pairs of SgNode* and strings
   95779             :        */
   95780             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   95781             : 
   95782             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   95783             : 
   95784             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   95785             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   95786             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   95787             : 
   95788             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   95789             :                    and subject to change.
   95790             :        */
   95791             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   95792             : 
   95793             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   95794             : 
   95795             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   95796             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   95797             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   95798             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   95799             : 
   95800             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   95801             : 
   95802             :           \returns long
   95803             :        */
   95804             :           virtual long getChildIndex( SgNode* childNode ) const override;
   95805             : 
   95806             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   95807             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   95808             :       /* \brief Constructor for use by AST File I/O Mechanism
   95809             : 
   95810             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   95811             :           which obtained via fast binary file I/O from disk.
   95812             :        */
   95813             :        // SgOmpOrderedClause( SgOmpOrderedClauseStorageClass& source );
   95814             : 
   95815             : 
   95816             : 
   95817             : 
   95818             : 
   95819             :  // JH (10/24/2005): methods added to support the ast file IO
   95820             :     private:
   95821             : 
   95822             :       /* name AST Memory Allocation Support Functions
   95823             :           \brief Memory allocations support....
   95824             : 
   95825             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   95826             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   95827             :           and support the AST File I/O Mechanism.
   95828             :        */
   95829             :       /* */
   95830             : 
   95831             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   95832             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   95833             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   95834             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   95835             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   95836             :           a correspinding one in the AST_FILE_IO class!
   95837             :        */
   95838             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   95839             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   95840             :       /* \brief Typedef used for low level memory access.
   95841             :        */
   95842             :        // typedef unsigned char* TestType;
   95843             : 
   95844             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   95845             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   95846             :       /* \brief Typedef used to hold memory addresses as values.
   95847             :        */
   95848             :        // typedef unsigned long  AddressType;
   95849             : 
   95850             : 
   95851             : 
   95852             :        // necessary, to have direct access to the p_freepointer and the private methods !
   95853             :       /*! \brief friend class declaration to support AST File I/O */
   95854             :           friend class AST_FILE_IO;
   95855             : 
   95856             :       /*! \brief friend class declaration to support AST File I/O */
   95857             :           friend class SgOmpOrderedClauseStorageClass;
   95858             : 
   95859             :       /*! \brief friend class declaration to support AST File I/O */
   95860             :           friend class AstSpecificDataManagingClass;
   95861             : 
   95862             :       /*! \brief friend class declaration to support AST File I/O */
   95863             :           friend class AstSpecificDataManagingClassStorageClass;
   95864             :     public:
   95865             :       /*! \brief IR node constructor to support AST File I/O */
   95866             :           SgOmpOrderedClause( const SgOmpOrderedClauseStorageClass& source );
   95867             : 
   95868             :  // private: // JJW hack
   95869             :        /*
   95870             :           name AST Memory Allocation Support Variables
   95871             :           Memory allocations support variables 
   95872             : 
   95873             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   95874             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   95875             :           and support the AST File I/O Mechanism.
   95876             :        */
   95877             :       /* */
   95878             : 
   95879             :     public:
   95880             : 
   95881             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   95882             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   95883             :       // virtual SgNode* addRegExpAttribute();
   95884             :       /*! \brief Support for AST matching using regular expression.
   95885             : 
   95886             :           This support is incomplete and the subject of current research to define 
   95887             :           RegEx trees to support inexact matching.
   95888             :        */
   95889             :           SgOmpOrderedClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   95890             : 
   95891             : // *** COMMON CODE SECTION ENDS HERE ***
   95892             : 
   95893             : 
   95894             : // End of memberFunctionString
   95895             : // Start of memberFunctionString
   95896             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   95897             : 
   95898             :      // the generated cast function
   95899             :      // friend ROSE_DLL_API SgOmpOrderedClause* isSgOmpOrderedClause ( SgNode* s );
   95900             : 
   95901             :           typedef SgOmpExpressionClause base_node_type;
   95902             : 
   95903             : 
   95904             : // End of memberFunctionString
   95905             : 
   95906             : 
   95907             :      public: 
   95908             :          virtual ~SgOmpOrderedClause();
   95909             : 
   95910             : 
   95911             :      public: 
   95912             :          SgOmpOrderedClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   95913             :          SgOmpOrderedClause(SgExpression* expression); 
   95914             : 
   95915             :     protected:
   95916             : 
   95917             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpOrderedClause>;
   95918             : 
   95919             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95920             : 
   95921             : 
   95922             :    };
   95923             : #endif
   95924             : 
   95925             : // postdeclarations for SgOmpOrderedClause
   95926             : 
   95927             : /* #line 95928 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95928             : 
   95929             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   95930             : 
   95931             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95932             : 
   95933             : 
   95934             : /* #line 95935 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95935             : 
   95936             : 
   95937             : 
   95938             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95939             : 
   95940             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   95941             : //      This code is automatically generated for each 
   95942             : //      terminal and non-terminal within the defined 
   95943             : //      grammar.  There is a simple way to change the 
   95944             : //      code to fix bugs etc.  See the ROSE README file
   95945             : //      for directions.
   95946             : 
   95947             : // tps: (02/22/2010): Adding DLL export requirements
   95948             : #include "rosedll.h"
   95949             : 
   95950             : // predeclarations for SgOmpCollapseClause
   95951             : 
   95952             : /* #line 95953 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95953             : 
   95954             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   95955             : 
   95956             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   95957             : 
   95958             : #if 1
   95959             : // Class Definition for SgOmpCollapseClause
   95960             : class ROSE_DLL_API SgOmpCollapseClause  : public SgOmpExpressionClause
   95961             :    {
   95962             :      public:
   95963             : 
   95964             : 
   95965             : /* #line 95966 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   95966             : 
   95967             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   95968             : // Start of memberFunctionString
   95969             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   95970             : 
   95971             : // *** COMMON CODE SECTION BEGINS HERE ***
   95972             : 
   95973             :     public:
   95974             : 
   95975             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   95976             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   95977             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   95978             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   95979             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   95980             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   95981             : 
   95982             :       /*! \brief returns a string representing the class name */
   95983             :           virtual std::string class_name() const override;
   95984             : 
   95985             :       /*! \brief returns new style SageIII enum values */
   95986             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   95987             : 
   95988             :       /*! \brief static variant value */
   95989             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   95990             :        // static const VariantT static_variant = V_SgOmpCollapseClause;
   95991             :           enum { static_variant = V_SgOmpCollapseClause };
   95992             : 
   95993             :        /* the generated cast function */
   95994             :       /*! \brief Casts pointer from base class to derived class */
   95995             :           ROSE_DLL_API friend       SgOmpCollapseClause* isSgOmpCollapseClause(       SgNode * s );
   95996             : 
   95997             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   95998             :           ROSE_DLL_API friend const SgOmpCollapseClause* isSgOmpCollapseClause( const SgNode * s );
   95999             : 
   96000             :      // ******************************************
   96001             :      // * Memory Pool / New / Delete
   96002             :      // ******************************************
   96003             : 
   96004             :      public:
   96005             :           /// \private
   96006             :           static const unsigned pool_size; //
   96007             :           /// \private
   96008             :           static std::vector<unsigned char *> pools; //
   96009             :           /// \private
   96010             :           static SgOmpCollapseClause * next_node; // 
   96011             : 
   96012             :           /// \private
   96013             :           static unsigned long initializeStorageClassArray(SgOmpCollapseClauseStorageClass *); //
   96014             : 
   96015             :           /// \private
   96016             :           static void clearMemoryPool(); //
   96017             :           static void deleteMemoryPool(); //
   96018             : 
   96019             :           /// \private
   96020             :           static void extendMemoryPoolForFileIO(); //
   96021             : 
   96022             :           /// \private
   96023             :           static SgOmpCollapseClause * getPointerFromGlobalIndex(unsigned long); //
   96024             :           /// \private
   96025             :           static SgOmpCollapseClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   96026             : 
   96027             :           /// \private
   96028             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   96029             :           /// \private
   96030             :           static void resetValidFreepointers(); //
   96031             :           /// \private
   96032             :           static unsigned long getNumberOfLastValidPointer(); //
   96033             : 
   96034             : 
   96035             : #if defined(INLINE_FUNCTIONS)
   96036             :       /*! \brief returns pointer to newly allocated IR node */
   96037             :           inline void *operator new (size_t size);
   96038             : #else
   96039             :       /*! \brief returns pointer to newly allocated IR node */
   96040             :           void *operator new (size_t size);
   96041             : #endif
   96042             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   96043             :           void operator delete (void* pointer, size_t size);
   96044             : 
   96045             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   96046           0 :           void operator delete (void* pointer)
   96047             :              {
   96048             :             // This is the generated delete operator...
   96049           0 :                SgOmpCollapseClause::operator delete (pointer,sizeof(SgOmpCollapseClause));
   96050             :              }
   96051             : 
   96052             :       /*! \brief Returns the total number of IR nodes of this type */
   96053             :           static size_t numberOfNodes();
   96054             : 
   96055             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   96056             :           static size_t memoryUsage();
   96057             : 
   96058             :       // End of scope which started in IR nodes specific code 
   96059             :       /* */
   96060             : 
   96061             :       /* name Internal Functions
   96062             :           \brief Internal functions ... incomplete-documentation
   96063             : 
   96064             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96065             :           or by particularly knowledgeable users for specialized tools or applications.
   96066             : 
   96067             :           \internal We could not make these private because they are required by user for special purposes. And 
   96068             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   96069             :          
   96070             :        */
   96071             : 
   96072             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   96073             :        // overridden in every class by *generated* implementation
   96074             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   96075             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   96076             :        // MS: 06/28/02 container of names of variables or container indices 
   96077             :        // used used in the traversal to access AST successor nodes
   96078             :        // overridden in every class by *generated* implementation
   96079             :       /*! \brief container of names of variables or container indices used used in the traversal
   96080             :           to access AST successor nodes overridden in every class by *generated* implementation */
   96081             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   96082             : 
   96083             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   96084             :        // than all the vector copies. The implementation for these functions is generated for each class.
   96085             :       /*! \brief return number of children in the traversal successor list */
   96086             :           virtual size_t get_numberOfTraversalSuccessors() override;
   96087             :       /*! \brief index-based access to traversal successors by index number */
   96088             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   96089             :       /*! \brief index-based access to traversal successors by child node */
   96090             :           virtual size_t get_childIndex(SgNode *child) override;
   96091             : 
   96092             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   96093             :        // MS: 08/16/2002 method for generating RTI information
   96094             :       /*! \brief return C++ Runtime-Time-Information */
   96095             :           virtual RTIReturnType roseRTI() override;
   96096             : #endif
   96097             :       /* */
   96098             : 
   96099             : 
   96100             : 
   96101             :       /* name Deprecated Functions
   96102             :           \brief Deprecated functions ... incomplete-documentation
   96103             : 
   96104             :           These functions have been deprecated from use.
   96105             :        */
   96106             :       /* */
   96107             : 
   96108             :       /*! returns a C style string (char*) representing the class name */
   96109             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   96110             : 
   96111             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   96112             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   96113             : #if 0
   96114             :       /*! returns old style Sage II enum values */
   96115             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   96116             :       /*! returns old style Sage II enum values */
   96117             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   96118             : #endif
   96119             :       /* */
   96120             : 
   96121             : 
   96122             : 
   96123             : 
   96124             :      public:
   96125             :       /* name Traversal Support Functions
   96126             :           \brief Traversal support functions ... incomplete-documentation
   96127             : 
   96128             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96129             :           or by particularly knowledgable users for specialized tools or applications.
   96130             :        */
   96131             :       /* */
   96132             : 
   96133             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   96134             :        // (inferior to ROSE traversal mechanism, experimental).
   96135             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   96136             :        */
   96137             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   96138             : 
   96139             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   96140             :       /*! \brief support for the classic visitor pattern done in GoF */
   96141             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   96142             : 
   96143             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   96144             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   96145             :        */
   96146             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   96147             : 
   96148             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   96149             :        */
   96150             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   96151             : 
   96152             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   96153             :        // This traversal helps support internal tools that call static member functions.
   96154             :        // note: this function operates on the memory pools.
   96155             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   96156             :        */
   96157             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   96158             :       /* */
   96159             : 
   96160             : 
   96161             :      public:
   96162             :       /* name Memory Allocation Functions
   96163             :           \brief Memory allocations functions ... incomplete-documentation
   96164             : 
   96165             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96166             :           or by particularly knowledgable users for specialized tools or applications.
   96167             :        */
   96168             :       /* */
   96169             : 
   96170             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   96171             : 
   96172             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   96173             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   96174             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   96175             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   96176             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   96177             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   96178             :           being used with the AST File I/O mechanism.
   96179             :        */
   96180             :           virtual bool isInMemoryPool() override;
   96181             : 
   96182             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   96183             : 
   96184             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   96185             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   96186             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   96187             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   96188             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   96189             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   96190             :           being used with the AST File I/O mechanism.
   96191             :        */
   96192             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   96193             : 
   96194             :       // DQ (4/30/2006): Modified to be a const function.
   96195             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   96196             : 
   96197             :           This functions is part of general support for many possible tools to operate 
   96198             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   96199             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   96200             :           less than the set of pointers used by the AST file I/O. This is part of
   96201             :           work implemented by Andreas, and support tools such as the AST graph generation.
   96202             : 
   96203             :           \warning This function can return unexpected data members and thus the 
   96204             :                    order and the number of elements is unpredicable and subject 
   96205             :                    to change.
   96206             : 
   96207             :           \returns STL vector of pairs of SgNode* and strings
   96208             :        */
   96209             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   96210             : 
   96211             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   96212             : 
   96213             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   96214             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   96215             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   96216             : 
   96217             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   96218             :                    and subject to change.
   96219             :        */
   96220             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   96221             : 
   96222             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   96223             : 
   96224             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   96225             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   96226             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   96227             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   96228             : 
   96229             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   96230             : 
   96231             :           \returns long
   96232             :        */
   96233             :           virtual long getChildIndex( SgNode* childNode ) const override;
   96234             : 
   96235             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   96236             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   96237             :       /* \brief Constructor for use by AST File I/O Mechanism
   96238             : 
   96239             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   96240             :           which obtained via fast binary file I/O from disk.
   96241             :        */
   96242             :        // SgOmpCollapseClause( SgOmpCollapseClauseStorageClass& source );
   96243             : 
   96244             : 
   96245             : 
   96246             : 
   96247             : 
   96248             :  // JH (10/24/2005): methods added to support the ast file IO
   96249             :     private:
   96250             : 
   96251             :       /* name AST Memory Allocation Support Functions
   96252             :           \brief Memory allocations support....
   96253             : 
   96254             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   96255             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   96256             :           and support the AST File I/O Mechanism.
   96257             :        */
   96258             :       /* */
   96259             : 
   96260             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   96261             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   96262             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   96263             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   96264             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   96265             :           a correspinding one in the AST_FILE_IO class!
   96266             :        */
   96267             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   96268             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   96269             :       /* \brief Typedef used for low level memory access.
   96270             :        */
   96271             :        // typedef unsigned char* TestType;
   96272             : 
   96273             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   96274             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   96275             :       /* \brief Typedef used to hold memory addresses as values.
   96276             :        */
   96277             :        // typedef unsigned long  AddressType;
   96278             : 
   96279             : 
   96280             : 
   96281             :        // necessary, to have direct access to the p_freepointer and the private methods !
   96282             :       /*! \brief friend class declaration to support AST File I/O */
   96283             :           friend class AST_FILE_IO;
   96284             : 
   96285             :       /*! \brief friend class declaration to support AST File I/O */
   96286             :           friend class SgOmpCollapseClauseStorageClass;
   96287             : 
   96288             :       /*! \brief friend class declaration to support AST File I/O */
   96289             :           friend class AstSpecificDataManagingClass;
   96290             : 
   96291             :       /*! \brief friend class declaration to support AST File I/O */
   96292             :           friend class AstSpecificDataManagingClassStorageClass;
   96293             :     public:
   96294             :       /*! \brief IR node constructor to support AST File I/O */
   96295             :           SgOmpCollapseClause( const SgOmpCollapseClauseStorageClass& source );
   96296             : 
   96297             :  // private: // JJW hack
   96298             :        /*
   96299             :           name AST Memory Allocation Support Variables
   96300             :           Memory allocations support variables 
   96301             : 
   96302             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   96303             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   96304             :           and support the AST File I/O Mechanism.
   96305             :        */
   96306             :       /* */
   96307             : 
   96308             :     public:
   96309             : 
   96310             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   96311             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   96312             :       // virtual SgNode* addRegExpAttribute();
   96313             :       /*! \brief Support for AST matching using regular expression.
   96314             : 
   96315             :           This support is incomplete and the subject of current research to define 
   96316             :           RegEx trees to support inexact matching.
   96317             :        */
   96318             :           SgOmpCollapseClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   96319             : 
   96320             : // *** COMMON CODE SECTION ENDS HERE ***
   96321             : 
   96322             : 
   96323             : // End of memberFunctionString
   96324             : // Start of memberFunctionString
   96325             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   96326             : 
   96327             :      // the generated cast function
   96328             :      // friend ROSE_DLL_API SgOmpCollapseClause* isSgOmpCollapseClause ( SgNode* s );
   96329             : 
   96330             :           typedef SgOmpExpressionClause base_node_type;
   96331             : 
   96332             : 
   96333             : // End of memberFunctionString
   96334             : 
   96335             : 
   96336             :      public: 
   96337             :          virtual ~SgOmpCollapseClause();
   96338             : 
   96339             : 
   96340             :      public: 
   96341             :          SgOmpCollapseClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   96342             :          SgOmpCollapseClause(SgExpression* expression); 
   96343             : 
   96344             :     protected:
   96345             : 
   96346             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpCollapseClause>;
   96347             : 
   96348             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96349             : 
   96350             : 
   96351             :    };
   96352             : #endif
   96353             : 
   96354             : // postdeclarations for SgOmpCollapseClause
   96355             : 
   96356             : /* #line 96357 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96357             : 
   96358             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   96359             : 
   96360             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96361             : 
   96362             : 
   96363             : /* #line 96364 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96364             : 
   96365             : 
   96366             : 
   96367             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96368             : 
   96369             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   96370             : //      This code is automatically generated for each 
   96371             : //      terminal and non-terminal within the defined 
   96372             : //      grammar.  There is a simple way to change the 
   96373             : //      code to fix bugs etc.  See the ROSE README file
   96374             : //      for directions.
   96375             : 
   96376             : // tps: (02/22/2010): Adding DLL export requirements
   96377             : #include "rosedll.h"
   96378             : 
   96379             : // predeclarations for SgOmpIfClause
   96380             : 
   96381             : /* #line 96382 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96382             : 
   96383             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   96384             : 
   96385             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96386             : 
   96387             : #if 1
   96388             : // Class Definition for SgOmpIfClause
   96389             : class ROSE_DLL_API SgOmpIfClause  : public SgOmpExpressionClause
   96390             :    {
   96391             :      public:
   96392             : 
   96393             : 
   96394             : /* #line 96395 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96395             : 
   96396             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   96397             : // Start of memberFunctionString
   96398             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   96399             : 
   96400             : // *** COMMON CODE SECTION BEGINS HERE ***
   96401             : 
   96402             :     public:
   96403             : 
   96404             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   96405             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   96406             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   96407             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   96408             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   96409             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   96410             : 
   96411             :       /*! \brief returns a string representing the class name */
   96412             :           virtual std::string class_name() const override;
   96413             : 
   96414             :       /*! \brief returns new style SageIII enum values */
   96415             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   96416             : 
   96417             :       /*! \brief static variant value */
   96418             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   96419             :        // static const VariantT static_variant = V_SgOmpIfClause;
   96420             :           enum { static_variant = V_SgOmpIfClause };
   96421             : 
   96422             :        /* the generated cast function */
   96423             :       /*! \brief Casts pointer from base class to derived class */
   96424             :           ROSE_DLL_API friend       SgOmpIfClause* isSgOmpIfClause(       SgNode * s );
   96425             : 
   96426             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   96427             :           ROSE_DLL_API friend const SgOmpIfClause* isSgOmpIfClause( const SgNode * s );
   96428             : 
   96429             :      // ******************************************
   96430             :      // * Memory Pool / New / Delete
   96431             :      // ******************************************
   96432             : 
   96433             :      public:
   96434             :           /// \private
   96435             :           static const unsigned pool_size; //
   96436             :           /// \private
   96437             :           static std::vector<unsigned char *> pools; //
   96438             :           /// \private
   96439             :           static SgOmpIfClause * next_node; // 
   96440             : 
   96441             :           /// \private
   96442             :           static unsigned long initializeStorageClassArray(SgOmpIfClauseStorageClass *); //
   96443             : 
   96444             :           /// \private
   96445             :           static void clearMemoryPool(); //
   96446             :           static void deleteMemoryPool(); //
   96447             : 
   96448             :           /// \private
   96449             :           static void extendMemoryPoolForFileIO(); //
   96450             : 
   96451             :           /// \private
   96452             :           static SgOmpIfClause * getPointerFromGlobalIndex(unsigned long); //
   96453             :           /// \private
   96454             :           static SgOmpIfClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   96455             : 
   96456             :           /// \private
   96457             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   96458             :           /// \private
   96459             :           static void resetValidFreepointers(); //
   96460             :           /// \private
   96461             :           static unsigned long getNumberOfLastValidPointer(); //
   96462             : 
   96463             : 
   96464             : #if defined(INLINE_FUNCTIONS)
   96465             :       /*! \brief returns pointer to newly allocated IR node */
   96466             :           inline void *operator new (size_t size);
   96467             : #else
   96468             :       /*! \brief returns pointer to newly allocated IR node */
   96469             :           void *operator new (size_t size);
   96470             : #endif
   96471             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   96472             :           void operator delete (void* pointer, size_t size);
   96473             : 
   96474             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   96475           0 :           void operator delete (void* pointer)
   96476             :              {
   96477             :             // This is the generated delete operator...
   96478           0 :                SgOmpIfClause::operator delete (pointer,sizeof(SgOmpIfClause));
   96479             :              }
   96480             : 
   96481             :       /*! \brief Returns the total number of IR nodes of this type */
   96482             :           static size_t numberOfNodes();
   96483             : 
   96484             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   96485             :           static size_t memoryUsage();
   96486             : 
   96487             :       // End of scope which started in IR nodes specific code 
   96488             :       /* */
   96489             : 
   96490             :       /* name Internal Functions
   96491             :           \brief Internal functions ... incomplete-documentation
   96492             : 
   96493             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96494             :           or by particularly knowledgeable users for specialized tools or applications.
   96495             : 
   96496             :           \internal We could not make these private because they are required by user for special purposes. And 
   96497             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   96498             :          
   96499             :        */
   96500             : 
   96501             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   96502             :        // overridden in every class by *generated* implementation
   96503             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   96504             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   96505             :        // MS: 06/28/02 container of names of variables or container indices 
   96506             :        // used used in the traversal to access AST successor nodes
   96507             :        // overridden in every class by *generated* implementation
   96508             :       /*! \brief container of names of variables or container indices used used in the traversal
   96509             :           to access AST successor nodes overridden in every class by *generated* implementation */
   96510             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   96511             : 
   96512             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   96513             :        // than all the vector copies. The implementation for these functions is generated for each class.
   96514             :       /*! \brief return number of children in the traversal successor list */
   96515             :           virtual size_t get_numberOfTraversalSuccessors() override;
   96516             :       /*! \brief index-based access to traversal successors by index number */
   96517             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   96518             :       /*! \brief index-based access to traversal successors by child node */
   96519             :           virtual size_t get_childIndex(SgNode *child) override;
   96520             : 
   96521             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   96522             :        // MS: 08/16/2002 method for generating RTI information
   96523             :       /*! \brief return C++ Runtime-Time-Information */
   96524             :           virtual RTIReturnType roseRTI() override;
   96525             : #endif
   96526             :       /* */
   96527             : 
   96528             : 
   96529             : 
   96530             :       /* name Deprecated Functions
   96531             :           \brief Deprecated functions ... incomplete-documentation
   96532             : 
   96533             :           These functions have been deprecated from use.
   96534             :        */
   96535             :       /* */
   96536             : 
   96537             :       /*! returns a C style string (char*) representing the class name */
   96538             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   96539             : 
   96540             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   96541             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   96542             : #if 0
   96543             :       /*! returns old style Sage II enum values */
   96544             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   96545             :       /*! returns old style Sage II enum values */
   96546             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   96547             : #endif
   96548             :       /* */
   96549             : 
   96550             : 
   96551             : 
   96552             : 
   96553             :      public:
   96554             :       /* name Traversal Support Functions
   96555             :           \brief Traversal support functions ... incomplete-documentation
   96556             : 
   96557             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96558             :           or by particularly knowledgable users for specialized tools or applications.
   96559             :        */
   96560             :       /* */
   96561             : 
   96562             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   96563             :        // (inferior to ROSE traversal mechanism, experimental).
   96564             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   96565             :        */
   96566             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   96567             : 
   96568             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   96569             :       /*! \brief support for the classic visitor pattern done in GoF */
   96570             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   96571             : 
   96572             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   96573             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   96574             :        */
   96575             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   96576             : 
   96577             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   96578             :        */
   96579             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   96580             : 
   96581             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   96582             :        // This traversal helps support internal tools that call static member functions.
   96583             :        // note: this function operates on the memory pools.
   96584             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   96585             :        */
   96586             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   96587             :       /* */
   96588             : 
   96589             : 
   96590             :      public:
   96591             :       /* name Memory Allocation Functions
   96592             :           \brief Memory allocations functions ... incomplete-documentation
   96593             : 
   96594             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96595             :           or by particularly knowledgable users for specialized tools or applications.
   96596             :        */
   96597             :       /* */
   96598             : 
   96599             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   96600             : 
   96601             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   96602             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   96603             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   96604             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   96605             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   96606             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   96607             :           being used with the AST File I/O mechanism.
   96608             :        */
   96609             :           virtual bool isInMemoryPool() override;
   96610             : 
   96611             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   96612             : 
   96613             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   96614             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   96615             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   96616             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   96617             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   96618             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   96619             :           being used with the AST File I/O mechanism.
   96620             :        */
   96621             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   96622             : 
   96623             :       // DQ (4/30/2006): Modified to be a const function.
   96624             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   96625             : 
   96626             :           This functions is part of general support for many possible tools to operate 
   96627             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   96628             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   96629             :           less than the set of pointers used by the AST file I/O. This is part of
   96630             :           work implemented by Andreas, and support tools such as the AST graph generation.
   96631             : 
   96632             :           \warning This function can return unexpected data members and thus the 
   96633             :                    order and the number of elements is unpredicable and subject 
   96634             :                    to change.
   96635             : 
   96636             :           \returns STL vector of pairs of SgNode* and strings
   96637             :        */
   96638             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   96639             : 
   96640             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   96641             : 
   96642             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   96643             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   96644             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   96645             : 
   96646             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   96647             :                    and subject to change.
   96648             :        */
   96649             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   96650             : 
   96651             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   96652             : 
   96653             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   96654             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   96655             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   96656             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   96657             : 
   96658             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   96659             : 
   96660             :           \returns long
   96661             :        */
   96662             :           virtual long getChildIndex( SgNode* childNode ) const override;
   96663             : 
   96664             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   96665             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   96666             :       /* \brief Constructor for use by AST File I/O Mechanism
   96667             : 
   96668             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   96669             :           which obtained via fast binary file I/O from disk.
   96670             :        */
   96671             :        // SgOmpIfClause( SgOmpIfClauseStorageClass& source );
   96672             : 
   96673             : 
   96674             : 
   96675             : 
   96676             : 
   96677             :  // JH (10/24/2005): methods added to support the ast file IO
   96678             :     private:
   96679             : 
   96680             :       /* name AST Memory Allocation Support Functions
   96681             :           \brief Memory allocations support....
   96682             : 
   96683             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   96684             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   96685             :           and support the AST File I/O Mechanism.
   96686             :        */
   96687             :       /* */
   96688             : 
   96689             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   96690             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   96691             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   96692             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   96693             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   96694             :           a correspinding one in the AST_FILE_IO class!
   96695             :        */
   96696             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   96697             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   96698             :       /* \brief Typedef used for low level memory access.
   96699             :        */
   96700             :        // typedef unsigned char* TestType;
   96701             : 
   96702             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   96703             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   96704             :       /* \brief Typedef used to hold memory addresses as values.
   96705             :        */
   96706             :        // typedef unsigned long  AddressType;
   96707             : 
   96708             : 
   96709             : 
   96710             :        // necessary, to have direct access to the p_freepointer and the private methods !
   96711             :       /*! \brief friend class declaration to support AST File I/O */
   96712             :           friend class AST_FILE_IO;
   96713             : 
   96714             :       /*! \brief friend class declaration to support AST File I/O */
   96715             :           friend class SgOmpIfClauseStorageClass;
   96716             : 
   96717             :       /*! \brief friend class declaration to support AST File I/O */
   96718             :           friend class AstSpecificDataManagingClass;
   96719             : 
   96720             :       /*! \brief friend class declaration to support AST File I/O */
   96721             :           friend class AstSpecificDataManagingClassStorageClass;
   96722             :     public:
   96723             :       /*! \brief IR node constructor to support AST File I/O */
   96724             :           SgOmpIfClause( const SgOmpIfClauseStorageClass& source );
   96725             : 
   96726             :  // private: // JJW hack
   96727             :        /*
   96728             :           name AST Memory Allocation Support Variables
   96729             :           Memory allocations support variables 
   96730             : 
   96731             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   96732             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   96733             :           and support the AST File I/O Mechanism.
   96734             :        */
   96735             :       /* */
   96736             : 
   96737             :     public:
   96738             : 
   96739             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   96740             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   96741             :       // virtual SgNode* addRegExpAttribute();
   96742             :       /*! \brief Support for AST matching using regular expression.
   96743             : 
   96744             :           This support is incomplete and the subject of current research to define 
   96745             :           RegEx trees to support inexact matching.
   96746             :        */
   96747             :           SgOmpIfClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   96748             : 
   96749             : // *** COMMON CODE SECTION ENDS HERE ***
   96750             : 
   96751             : 
   96752             : // End of memberFunctionString
   96753             : // Start of memberFunctionString
   96754             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   96755             : 
   96756             :      // the generated cast function
   96757             :      // friend ROSE_DLL_API SgOmpIfClause* isSgOmpIfClause ( SgNode* s );
   96758             : 
   96759             :           typedef SgOmpExpressionClause base_node_type;
   96760             : 
   96761             : 
   96762             : // End of memberFunctionString
   96763             : 
   96764             :      public: 
   96765             :          SgOmpClause::omp_if_modifier_enum get_modifier() const;
   96766             :          void set_modifier(SgOmpClause::omp_if_modifier_enum modifier);
   96767             : 
   96768             : 
   96769             :      public: 
   96770             :          virtual ~SgOmpIfClause();
   96771             : 
   96772             : 
   96773             :      public: 
   96774             :          SgOmpIfClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL, SgOmpClause::omp_if_modifier_enum modifier =e_omp_if_modifier_unknown); 
   96775             :          SgOmpIfClause(SgExpression* expression, SgOmpClause::omp_if_modifier_enum modifier); 
   96776             : 
   96777             :     protected:
   96778             : // Start of memberFunctionString
   96779             : SgOmpClause::omp_if_modifier_enum p_modifier;
   96780             :           
   96781             : // End of memberFunctionString
   96782             : 
   96783             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpIfClause>;
   96784             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpIfClause, SgOmpClause::omp_if_modifier_enum,&SgOmpIfClause::p_modifier>;
   96785             : 
   96786             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96787             : 
   96788             : 
   96789             :    };
   96790             : #endif
   96791             : 
   96792             : // postdeclarations for SgOmpIfClause
   96793             : 
   96794             : /* #line 96795 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96795             : 
   96796             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   96797             : 
   96798             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96799             : 
   96800             : 
   96801             : /* #line 96802 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96802             : 
   96803             : 
   96804             : 
   96805             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96806             : 
   96807             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   96808             : //      This code is automatically generated for each 
   96809             : //      terminal and non-terminal within the defined 
   96810             : //      grammar.  There is a simple way to change the 
   96811             : //      code to fix bugs etc.  See the ROSE README file
   96812             : //      for directions.
   96813             : 
   96814             : // tps: (02/22/2010): Adding DLL export requirements
   96815             : #include "rosedll.h"
   96816             : 
   96817             : // predeclarations for SgUpirNumUnitsField
   96818             : 
   96819             : /* #line 96820 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96820             : 
   96821             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   96822             : 
   96823             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   96824             : 
   96825             : #if 1
   96826             : // Class Definition for SgUpirNumUnitsField
   96827             : class ROSE_DLL_API SgUpirNumUnitsField  : public SgOmpExpressionClause
   96828             :    {
   96829             :      public:
   96830             : 
   96831             : 
   96832             : /* #line 96833 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   96833             : 
   96834             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   96835             : // Start of memberFunctionString
   96836             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   96837             : 
   96838             : // *** COMMON CODE SECTION BEGINS HERE ***
   96839             : 
   96840             :     public:
   96841             : 
   96842             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   96843             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   96844             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   96845             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   96846             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   96847             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   96848             : 
   96849             :       /*! \brief returns a string representing the class name */
   96850             :           virtual std::string class_name() const override;
   96851             : 
   96852             :       /*! \brief returns new style SageIII enum values */
   96853             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   96854             : 
   96855             :       /*! \brief static variant value */
   96856             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   96857             :        // static const VariantT static_variant = V_SgUpirNumUnitsField;
   96858             :           enum { static_variant = V_SgUpirNumUnitsField };
   96859             : 
   96860             :        /* the generated cast function */
   96861             :       /*! \brief Casts pointer from base class to derived class */
   96862             :           ROSE_DLL_API friend       SgUpirNumUnitsField* isSgUpirNumUnitsField(       SgNode * s );
   96863             : 
   96864             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   96865             :           ROSE_DLL_API friend const SgUpirNumUnitsField* isSgUpirNumUnitsField( const SgNode * s );
   96866             : 
   96867             :      // ******************************************
   96868             :      // * Memory Pool / New / Delete
   96869             :      // ******************************************
   96870             : 
   96871             :      public:
   96872             :           /// \private
   96873             :           static const unsigned pool_size; //
   96874             :           /// \private
   96875             :           static std::vector<unsigned char *> pools; //
   96876             :           /// \private
   96877             :           static SgUpirNumUnitsField * next_node; // 
   96878             : 
   96879             :           /// \private
   96880             :           static unsigned long initializeStorageClassArray(SgUpirNumUnitsFieldStorageClass *); //
   96881             : 
   96882             :           /// \private
   96883             :           static void clearMemoryPool(); //
   96884             :           static void deleteMemoryPool(); //
   96885             : 
   96886             :           /// \private
   96887             :           static void extendMemoryPoolForFileIO(); //
   96888             : 
   96889             :           /// \private
   96890             :           static SgUpirNumUnitsField * getPointerFromGlobalIndex(unsigned long); //
   96891             :           /// \private
   96892             :           static SgUpirNumUnitsField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   96893             : 
   96894             :           /// \private
   96895             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   96896             :           /// \private
   96897             :           static void resetValidFreepointers(); //
   96898             :           /// \private
   96899             :           static unsigned long getNumberOfLastValidPointer(); //
   96900             : 
   96901             : 
   96902             : #if defined(INLINE_FUNCTIONS)
   96903             :       /*! \brief returns pointer to newly allocated IR node */
   96904             :           inline void *operator new (size_t size);
   96905             : #else
   96906             :       /*! \brief returns pointer to newly allocated IR node */
   96907             :           void *operator new (size_t size);
   96908             : #endif
   96909             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   96910             :           void operator delete (void* pointer, size_t size);
   96911             : 
   96912             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   96913           0 :           void operator delete (void* pointer)
   96914             :              {
   96915             :             // This is the generated delete operator...
   96916           0 :                SgUpirNumUnitsField::operator delete (pointer,sizeof(SgUpirNumUnitsField));
   96917             :              }
   96918             : 
   96919             :       /*! \brief Returns the total number of IR nodes of this type */
   96920             :           static size_t numberOfNodes();
   96921             : 
   96922             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   96923             :           static size_t memoryUsage();
   96924             : 
   96925             :       // End of scope which started in IR nodes specific code 
   96926             :       /* */
   96927             : 
   96928             :       /* name Internal Functions
   96929             :           \brief Internal functions ... incomplete-documentation
   96930             : 
   96931             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96932             :           or by particularly knowledgeable users for specialized tools or applications.
   96933             : 
   96934             :           \internal We could not make these private because they are required by user for special purposes. And 
   96935             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   96936             :          
   96937             :        */
   96938             : 
   96939             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   96940             :        // overridden in every class by *generated* implementation
   96941             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   96942             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   96943             :        // MS: 06/28/02 container of names of variables or container indices 
   96944             :        // used used in the traversal to access AST successor nodes
   96945             :        // overridden in every class by *generated* implementation
   96946             :       /*! \brief container of names of variables or container indices used used in the traversal
   96947             :           to access AST successor nodes overridden in every class by *generated* implementation */
   96948             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   96949             : 
   96950             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   96951             :        // than all the vector copies. The implementation for these functions is generated for each class.
   96952             :       /*! \brief return number of children in the traversal successor list */
   96953             :           virtual size_t get_numberOfTraversalSuccessors() override;
   96954             :       /*! \brief index-based access to traversal successors by index number */
   96955             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   96956             :       /*! \brief index-based access to traversal successors by child node */
   96957             :           virtual size_t get_childIndex(SgNode *child) override;
   96958             : 
   96959             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   96960             :        // MS: 08/16/2002 method for generating RTI information
   96961             :       /*! \brief return C++ Runtime-Time-Information */
   96962             :           virtual RTIReturnType roseRTI() override;
   96963             : #endif
   96964             :       /* */
   96965             : 
   96966             : 
   96967             : 
   96968             :       /* name Deprecated Functions
   96969             :           \brief Deprecated functions ... incomplete-documentation
   96970             : 
   96971             :           These functions have been deprecated from use.
   96972             :        */
   96973             :       /* */
   96974             : 
   96975             :       /*! returns a C style string (char*) representing the class name */
   96976             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   96977             : 
   96978             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   96979             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   96980             : #if 0
   96981             :       /*! returns old style Sage II enum values */
   96982             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   96983             :       /*! returns old style Sage II enum values */
   96984             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   96985             : #endif
   96986             :       /* */
   96987             : 
   96988             : 
   96989             : 
   96990             : 
   96991             :      public:
   96992             :       /* name Traversal Support Functions
   96993             :           \brief Traversal support functions ... incomplete-documentation
   96994             : 
   96995             :           These functions have been made public as part of the design, but they are suggested for internal use 
   96996             :           or by particularly knowledgable users for specialized tools or applications.
   96997             :        */
   96998             :       /* */
   96999             : 
   97000             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   97001             :        // (inferior to ROSE traversal mechanism, experimental).
   97002             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   97003             :        */
   97004             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   97005             : 
   97006             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   97007             :       /*! \brief support for the classic visitor pattern done in GoF */
   97008             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   97009             : 
   97010             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   97011             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   97012             :        */
   97013             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   97014             : 
   97015             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   97016             :        */
   97017             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   97018             : 
   97019             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   97020             :        // This traversal helps support internal tools that call static member functions.
   97021             :        // note: this function operates on the memory pools.
   97022             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   97023             :        */
   97024             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   97025             :       /* */
   97026             : 
   97027             : 
   97028             :      public:
   97029             :       /* name Memory Allocation Functions
   97030             :           \brief Memory allocations functions ... incomplete-documentation
   97031             : 
   97032             :           These functions have been made public as part of the design, but they are suggested for internal use 
   97033             :           or by particularly knowledgable users for specialized tools or applications.
   97034             :        */
   97035             :       /* */
   97036             : 
   97037             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   97038             : 
   97039             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   97040             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   97041             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   97042             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   97043             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   97044             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   97045             :           being used with the AST File I/O mechanism.
   97046             :        */
   97047             :           virtual bool isInMemoryPool() override;
   97048             : 
   97049             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   97050             : 
   97051             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   97052             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   97053             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   97054             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   97055             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   97056             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   97057             :           being used with the AST File I/O mechanism.
   97058             :        */
   97059             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   97060             : 
   97061             :       // DQ (4/30/2006): Modified to be a const function.
   97062             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   97063             : 
   97064             :           This functions is part of general support for many possible tools to operate 
   97065             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   97066             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   97067             :           less than the set of pointers used by the AST file I/O. This is part of
   97068             :           work implemented by Andreas, and support tools such as the AST graph generation.
   97069             : 
   97070             :           \warning This function can return unexpected data members and thus the 
   97071             :                    order and the number of elements is unpredicable and subject 
   97072             :                    to change.
   97073             : 
   97074             :           \returns STL vector of pairs of SgNode* and strings
   97075             :        */
   97076             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   97077             : 
   97078             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   97079             : 
   97080             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   97081             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   97082             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   97083             : 
   97084             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   97085             :                    and subject to change.
   97086             :        */
   97087             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   97088             : 
   97089             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   97090             : 
   97091             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   97092             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   97093             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   97094             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   97095             : 
   97096             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   97097             : 
   97098             :           \returns long
   97099             :        */
   97100             :           virtual long getChildIndex( SgNode* childNode ) const override;
   97101             : 
   97102             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   97103             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97104             :       /* \brief Constructor for use by AST File I/O Mechanism
   97105             : 
   97106             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   97107             :           which obtained via fast binary file I/O from disk.
   97108             :        */
   97109             :        // SgUpirNumUnitsField( SgUpirNumUnitsFieldStorageClass& source );
   97110             : 
   97111             : 
   97112             : 
   97113             : 
   97114             : 
   97115             :  // JH (10/24/2005): methods added to support the ast file IO
   97116             :     private:
   97117             : 
   97118             :       /* name AST Memory Allocation Support Functions
   97119             :           \brief Memory allocations support....
   97120             : 
   97121             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   97122             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   97123             :           and support the AST File I/O Mechanism.
   97124             :        */
   97125             :       /* */
   97126             : 
   97127             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   97128             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   97129             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   97130             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   97131             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   97132             :           a correspinding one in the AST_FILE_IO class!
   97133             :        */
   97134             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   97135             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97136             :       /* \brief Typedef used for low level memory access.
   97137             :        */
   97138             :        // typedef unsigned char* TestType;
   97139             : 
   97140             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   97141             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97142             :       /* \brief Typedef used to hold memory addresses as values.
   97143             :        */
   97144             :        // typedef unsigned long  AddressType;
   97145             : 
   97146             : 
   97147             : 
   97148             :        // necessary, to have direct access to the p_freepointer and the private methods !
   97149             :       /*! \brief friend class declaration to support AST File I/O */
   97150             :           friend class AST_FILE_IO;
   97151             : 
   97152             :       /*! \brief friend class declaration to support AST File I/O */
   97153             :           friend class SgUpirNumUnitsFieldStorageClass;
   97154             : 
   97155             :       /*! \brief friend class declaration to support AST File I/O */
   97156             :           friend class AstSpecificDataManagingClass;
   97157             : 
   97158             :       /*! \brief friend class declaration to support AST File I/O */
   97159             :           friend class AstSpecificDataManagingClassStorageClass;
   97160             :     public:
   97161             :       /*! \brief IR node constructor to support AST File I/O */
   97162             :           SgUpirNumUnitsField( const SgUpirNumUnitsFieldStorageClass& source );
   97163             : 
   97164             :  // private: // JJW hack
   97165             :        /*
   97166             :           name AST Memory Allocation Support Variables
   97167             :           Memory allocations support variables 
   97168             : 
   97169             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   97170             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   97171             :           and support the AST File I/O Mechanism.
   97172             :        */
   97173             :       /* */
   97174             : 
   97175             :     public:
   97176             : 
   97177             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   97178             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   97179             :       // virtual SgNode* addRegExpAttribute();
   97180             :       /*! \brief Support for AST matching using regular expression.
   97181             : 
   97182             :           This support is incomplete and the subject of current research to define 
   97183             :           RegEx trees to support inexact matching.
   97184             :        */
   97185             :           SgUpirNumUnitsField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   97186             : 
   97187             : // *** COMMON CODE SECTION ENDS HERE ***
   97188             : 
   97189             : 
   97190             : // End of memberFunctionString
   97191             : // Start of memberFunctionString
   97192             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   97193             : 
   97194             :      // the generated cast function
   97195             :      // friend ROSE_DLL_API SgUpirNumUnitsField* isSgUpirNumUnitsField ( SgNode* s );
   97196             : 
   97197             :           typedef SgOmpExpressionClause base_node_type;
   97198             : 
   97199             : 
   97200             : // End of memberFunctionString
   97201             : 
   97202             : 
   97203             :      public: 
   97204             :          virtual ~SgUpirNumUnitsField();
   97205             : 
   97206             : 
   97207             :      public: 
   97208             :          SgUpirNumUnitsField(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   97209             :          SgUpirNumUnitsField(SgExpression* expression); 
   97210             : 
   97211             :     protected:
   97212             : 
   97213             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirNumUnitsField>;
   97214             : 
   97215             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97216             : 
   97217             : 
   97218             :    };
   97219             : #endif
   97220             : 
   97221             : // postdeclarations for SgUpirNumUnitsField
   97222             : 
   97223             : /* #line 97224 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97224             : 
   97225             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   97226             : 
   97227             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97228             : 
   97229             : 
   97230             : /* #line 97231 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97231             : 
   97232             : 
   97233             : 
   97234             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97235             : 
   97236             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   97237             : //      This code is automatically generated for each 
   97238             : //      terminal and non-terminal within the defined 
   97239             : //      grammar.  There is a simple way to change the 
   97240             : //      code to fix bugs etc.  See the ROSE README file
   97241             : //      for directions.
   97242             : 
   97243             : // tps: (02/22/2010): Adding DLL export requirements
   97244             : #include "rosedll.h"
   97245             : 
   97246             : // predeclarations for SgOmpNumTeamsClause
   97247             : 
   97248             : /* #line 97249 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97249             : 
   97250             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   97251             : 
   97252             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97253             : 
   97254             : #if 1
   97255             : // Class Definition for SgOmpNumTeamsClause
   97256             : class ROSE_DLL_API SgOmpNumTeamsClause  : public SgOmpExpressionClause
   97257             :    {
   97258             :      public:
   97259             : 
   97260             : 
   97261             : /* #line 97262 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97262             : 
   97263             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   97264             : // Start of memberFunctionString
   97265             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   97266             : 
   97267             : // *** COMMON CODE SECTION BEGINS HERE ***
   97268             : 
   97269             :     public:
   97270             : 
   97271             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   97272             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   97273             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   97274             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   97275             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   97276             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   97277             : 
   97278             :       /*! \brief returns a string representing the class name */
   97279             :           virtual std::string class_name() const override;
   97280             : 
   97281             :       /*! \brief returns new style SageIII enum values */
   97282             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   97283             : 
   97284             :       /*! \brief static variant value */
   97285             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   97286             :        // static const VariantT static_variant = V_SgOmpNumTeamsClause;
   97287             :           enum { static_variant = V_SgOmpNumTeamsClause };
   97288             : 
   97289             :        /* the generated cast function */
   97290             :       /*! \brief Casts pointer from base class to derived class */
   97291             :           ROSE_DLL_API friend       SgOmpNumTeamsClause* isSgOmpNumTeamsClause(       SgNode * s );
   97292             : 
   97293             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   97294             :           ROSE_DLL_API friend const SgOmpNumTeamsClause* isSgOmpNumTeamsClause( const SgNode * s );
   97295             : 
   97296             :      // ******************************************
   97297             :      // * Memory Pool / New / Delete
   97298             :      // ******************************************
   97299             : 
   97300             :      public:
   97301             :           /// \private
   97302             :           static const unsigned pool_size; //
   97303             :           /// \private
   97304             :           static std::vector<unsigned char *> pools; //
   97305             :           /// \private
   97306             :           static SgOmpNumTeamsClause * next_node; // 
   97307             : 
   97308             :           /// \private
   97309             :           static unsigned long initializeStorageClassArray(SgOmpNumTeamsClauseStorageClass *); //
   97310             : 
   97311             :           /// \private
   97312             :           static void clearMemoryPool(); //
   97313             :           static void deleteMemoryPool(); //
   97314             : 
   97315             :           /// \private
   97316             :           static void extendMemoryPoolForFileIO(); //
   97317             : 
   97318             :           /// \private
   97319             :           static SgOmpNumTeamsClause * getPointerFromGlobalIndex(unsigned long); //
   97320             :           /// \private
   97321             :           static SgOmpNumTeamsClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   97322             : 
   97323             :           /// \private
   97324             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   97325             :           /// \private
   97326             :           static void resetValidFreepointers(); //
   97327             :           /// \private
   97328             :           static unsigned long getNumberOfLastValidPointer(); //
   97329             : 
   97330             : 
   97331             : #if defined(INLINE_FUNCTIONS)
   97332             :       /*! \brief returns pointer to newly allocated IR node */
   97333             :           inline void *operator new (size_t size);
   97334             : #else
   97335             :       /*! \brief returns pointer to newly allocated IR node */
   97336             :           void *operator new (size_t size);
   97337             : #endif
   97338             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   97339             :           void operator delete (void* pointer, size_t size);
   97340             : 
   97341             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   97342           0 :           void operator delete (void* pointer)
   97343             :              {
   97344             :             // This is the generated delete operator...
   97345           0 :                SgOmpNumTeamsClause::operator delete (pointer,sizeof(SgOmpNumTeamsClause));
   97346             :              }
   97347             : 
   97348             :       /*! \brief Returns the total number of IR nodes of this type */
   97349             :           static size_t numberOfNodes();
   97350             : 
   97351             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   97352             :           static size_t memoryUsage();
   97353             : 
   97354             :       // End of scope which started in IR nodes specific code 
   97355             :       /* */
   97356             : 
   97357             :       /* name Internal Functions
   97358             :           \brief Internal functions ... incomplete-documentation
   97359             : 
   97360             :           These functions have been made public as part of the design, but they are suggested for internal use 
   97361             :           or by particularly knowledgeable users for specialized tools or applications.
   97362             : 
   97363             :           \internal We could not make these private because they are required by user for special purposes. And 
   97364             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   97365             :          
   97366             :        */
   97367             : 
   97368             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   97369             :        // overridden in every class by *generated* implementation
   97370             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   97371             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   97372             :        // MS: 06/28/02 container of names of variables or container indices 
   97373             :        // used used in the traversal to access AST successor nodes
   97374             :        // overridden in every class by *generated* implementation
   97375             :       /*! \brief container of names of variables or container indices used used in the traversal
   97376             :           to access AST successor nodes overridden in every class by *generated* implementation */
   97377             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   97378             : 
   97379             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   97380             :        // than all the vector copies. The implementation for these functions is generated for each class.
   97381             :       /*! \brief return number of children in the traversal successor list */
   97382             :           virtual size_t get_numberOfTraversalSuccessors() override;
   97383             :       /*! \brief index-based access to traversal successors by index number */
   97384             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   97385             :       /*! \brief index-based access to traversal successors by child node */
   97386             :           virtual size_t get_childIndex(SgNode *child) override;
   97387             : 
   97388             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   97389             :        // MS: 08/16/2002 method for generating RTI information
   97390             :       /*! \brief return C++ Runtime-Time-Information */
   97391             :           virtual RTIReturnType roseRTI() override;
   97392             : #endif
   97393             :       /* */
   97394             : 
   97395             : 
   97396             : 
   97397             :       /* name Deprecated Functions
   97398             :           \brief Deprecated functions ... incomplete-documentation
   97399             : 
   97400             :           These functions have been deprecated from use.
   97401             :        */
   97402             :       /* */
   97403             : 
   97404             :       /*! returns a C style string (char*) representing the class name */
   97405             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   97406             : 
   97407             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   97408             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   97409             : #if 0
   97410             :       /*! returns old style Sage II enum values */
   97411             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   97412             :       /*! returns old style Sage II enum values */
   97413             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   97414             : #endif
   97415             :       /* */
   97416             : 
   97417             : 
   97418             : 
   97419             : 
   97420             :      public:
   97421             :       /* name Traversal Support Functions
   97422             :           \brief Traversal support functions ... incomplete-documentation
   97423             : 
   97424             :           These functions have been made public as part of the design, but they are suggested for internal use 
   97425             :           or by particularly knowledgable users for specialized tools or applications.
   97426             :        */
   97427             :       /* */
   97428             : 
   97429             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   97430             :        // (inferior to ROSE traversal mechanism, experimental).
   97431             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   97432             :        */
   97433             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   97434             : 
   97435             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   97436             :       /*! \brief support for the classic visitor pattern done in GoF */
   97437             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   97438             : 
   97439             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   97440             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   97441             :        */
   97442             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   97443             : 
   97444             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   97445             :        */
   97446             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   97447             : 
   97448             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   97449             :        // This traversal helps support internal tools that call static member functions.
   97450             :        // note: this function operates on the memory pools.
   97451             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   97452             :        */
   97453             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   97454             :       /* */
   97455             : 
   97456             : 
   97457             :      public:
   97458             :       /* name Memory Allocation Functions
   97459             :           \brief Memory allocations functions ... incomplete-documentation
   97460             : 
   97461             :           These functions have been made public as part of the design, but they are suggested for internal use 
   97462             :           or by particularly knowledgable users for specialized tools or applications.
   97463             :        */
   97464             :       /* */
   97465             : 
   97466             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   97467             : 
   97468             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   97469             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   97470             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   97471             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   97472             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   97473             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   97474             :           being used with the AST File I/O mechanism.
   97475             :        */
   97476             :           virtual bool isInMemoryPool() override;
   97477             : 
   97478             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   97479             : 
   97480             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   97481             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   97482             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   97483             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   97484             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   97485             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   97486             :           being used with the AST File I/O mechanism.
   97487             :        */
   97488             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   97489             : 
   97490             :       // DQ (4/30/2006): Modified to be a const function.
   97491             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   97492             : 
   97493             :           This functions is part of general support for many possible tools to operate 
   97494             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   97495             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   97496             :           less than the set of pointers used by the AST file I/O. This is part of
   97497             :           work implemented by Andreas, and support tools such as the AST graph generation.
   97498             : 
   97499             :           \warning This function can return unexpected data members and thus the 
   97500             :                    order and the number of elements is unpredicable and subject 
   97501             :                    to change.
   97502             : 
   97503             :           \returns STL vector of pairs of SgNode* and strings
   97504             :        */
   97505             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   97506             : 
   97507             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   97508             : 
   97509             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   97510             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   97511             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   97512             : 
   97513             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   97514             :                    and subject to change.
   97515             :        */
   97516             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   97517             : 
   97518             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   97519             : 
   97520             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   97521             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   97522             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   97523             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   97524             : 
   97525             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   97526             : 
   97527             :           \returns long
   97528             :        */
   97529             :           virtual long getChildIndex( SgNode* childNode ) const override;
   97530             : 
   97531             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   97532             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97533             :       /* \brief Constructor for use by AST File I/O Mechanism
   97534             : 
   97535             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   97536             :           which obtained via fast binary file I/O from disk.
   97537             :        */
   97538             :        // SgOmpNumTeamsClause( SgOmpNumTeamsClauseStorageClass& source );
   97539             : 
   97540             : 
   97541             : 
   97542             : 
   97543             : 
   97544             :  // JH (10/24/2005): methods added to support the ast file IO
   97545             :     private:
   97546             : 
   97547             :       /* name AST Memory Allocation Support Functions
   97548             :           \brief Memory allocations support....
   97549             : 
   97550             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   97551             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   97552             :           and support the AST File I/O Mechanism.
   97553             :        */
   97554             :       /* */
   97555             : 
   97556             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   97557             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   97558             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   97559             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   97560             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   97561             :           a correspinding one in the AST_FILE_IO class!
   97562             :        */
   97563             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   97564             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97565             :       /* \brief Typedef used for low level memory access.
   97566             :        */
   97567             :        // typedef unsigned char* TestType;
   97568             : 
   97569             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   97570             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97571             :       /* \brief Typedef used to hold memory addresses as values.
   97572             :        */
   97573             :        // typedef unsigned long  AddressType;
   97574             : 
   97575             : 
   97576             : 
   97577             :        // necessary, to have direct access to the p_freepointer and the private methods !
   97578             :       /*! \brief friend class declaration to support AST File I/O */
   97579             :           friend class AST_FILE_IO;
   97580             : 
   97581             :       /*! \brief friend class declaration to support AST File I/O */
   97582             :           friend class SgOmpNumTeamsClauseStorageClass;
   97583             : 
   97584             :       /*! \brief friend class declaration to support AST File I/O */
   97585             :           friend class AstSpecificDataManagingClass;
   97586             : 
   97587             :       /*! \brief friend class declaration to support AST File I/O */
   97588             :           friend class AstSpecificDataManagingClassStorageClass;
   97589             :     public:
   97590             :       /*! \brief IR node constructor to support AST File I/O */
   97591             :           SgOmpNumTeamsClause( const SgOmpNumTeamsClauseStorageClass& source );
   97592             : 
   97593             :  // private: // JJW hack
   97594             :        /*
   97595             :           name AST Memory Allocation Support Variables
   97596             :           Memory allocations support variables 
   97597             : 
   97598             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   97599             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   97600             :           and support the AST File I/O Mechanism.
   97601             :        */
   97602             :       /* */
   97603             : 
   97604             :     public:
   97605             : 
   97606             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   97607             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   97608             :       // virtual SgNode* addRegExpAttribute();
   97609             :       /*! \brief Support for AST matching using regular expression.
   97610             : 
   97611             :           This support is incomplete and the subject of current research to define 
   97612             :           RegEx trees to support inexact matching.
   97613             :        */
   97614             :           SgOmpNumTeamsClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   97615             : 
   97616             : // *** COMMON CODE SECTION ENDS HERE ***
   97617             : 
   97618             : 
   97619             : // End of memberFunctionString
   97620             : // Start of memberFunctionString
   97621             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   97622             : 
   97623             :      // the generated cast function
   97624             :      // friend ROSE_DLL_API SgOmpNumTeamsClause* isSgOmpNumTeamsClause ( SgNode* s );
   97625             : 
   97626             :           typedef SgOmpExpressionClause base_node_type;
   97627             : 
   97628             : 
   97629             : // End of memberFunctionString
   97630             : 
   97631             : 
   97632             :      public: 
   97633             :          virtual ~SgOmpNumTeamsClause();
   97634             : 
   97635             : 
   97636             :      public: 
   97637             :          SgOmpNumTeamsClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   97638             :          SgOmpNumTeamsClause(SgExpression* expression); 
   97639             : 
   97640             :     protected:
   97641             : 
   97642             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpNumTeamsClause>;
   97643             : 
   97644             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97645             : 
   97646             : 
   97647             :    };
   97648             : #endif
   97649             : 
   97650             : // postdeclarations for SgOmpNumTeamsClause
   97651             : 
   97652             : /* #line 97653 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97653             : 
   97654             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   97655             : 
   97656             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97657             : 
   97658             : 
   97659             : /* #line 97660 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97660             : 
   97661             : 
   97662             : 
   97663             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97664             : 
   97665             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   97666             : //      This code is automatically generated for each 
   97667             : //      terminal and non-terminal within the defined 
   97668             : //      grammar.  There is a simple way to change the 
   97669             : //      code to fix bugs etc.  See the ROSE README file
   97670             : //      for directions.
   97671             : 
   97672             : // tps: (02/22/2010): Adding DLL export requirements
   97673             : #include "rosedll.h"
   97674             : 
   97675             : // predeclarations for SgOmpThreadLimitClause
   97676             : 
   97677             : /* #line 97678 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97678             : 
   97679             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   97680             : 
   97681             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   97682             : 
   97683             : #if 1
   97684             : // Class Definition for SgOmpThreadLimitClause
   97685             : class ROSE_DLL_API SgOmpThreadLimitClause  : public SgOmpExpressionClause
   97686             :    {
   97687             :      public:
   97688             : 
   97689             : 
   97690             : /* #line 97691 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   97691             : 
   97692             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   97693             : // Start of memberFunctionString
   97694             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   97695             : 
   97696             : // *** COMMON CODE SECTION BEGINS HERE ***
   97697             : 
   97698             :     public:
   97699             : 
   97700             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   97701             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   97702             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   97703             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   97704             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   97705             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   97706             : 
   97707             :       /*! \brief returns a string representing the class name */
   97708             :           virtual std::string class_name() const override;
   97709             : 
   97710             :       /*! \brief returns new style SageIII enum values */
   97711             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   97712             : 
   97713             :       /*! \brief static variant value */
   97714             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   97715             :        // static const VariantT static_variant = V_SgOmpThreadLimitClause;
   97716             :           enum { static_variant = V_SgOmpThreadLimitClause };
   97717             : 
   97718             :        /* the generated cast function */
   97719             :       /*! \brief Casts pointer from base class to derived class */
   97720             :           ROSE_DLL_API friend       SgOmpThreadLimitClause* isSgOmpThreadLimitClause(       SgNode * s );
   97721             : 
   97722             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   97723             :           ROSE_DLL_API friend const SgOmpThreadLimitClause* isSgOmpThreadLimitClause( const SgNode * s );
   97724             : 
   97725             :      // ******************************************
   97726             :      // * Memory Pool / New / Delete
   97727             :      // ******************************************
   97728             : 
   97729             :      public:
   97730             :           /// \private
   97731             :           static const unsigned pool_size; //
   97732             :           /// \private
   97733             :           static std::vector<unsigned char *> pools; //
   97734             :           /// \private
   97735             :           static SgOmpThreadLimitClause * next_node; // 
   97736             : 
   97737             :           /// \private
   97738             :           static unsigned long initializeStorageClassArray(SgOmpThreadLimitClauseStorageClass *); //
   97739             : 
   97740             :           /// \private
   97741             :           static void clearMemoryPool(); //
   97742             :           static void deleteMemoryPool(); //
   97743             : 
   97744             :           /// \private
   97745             :           static void extendMemoryPoolForFileIO(); //
   97746             : 
   97747             :           /// \private
   97748             :           static SgOmpThreadLimitClause * getPointerFromGlobalIndex(unsigned long); //
   97749             :           /// \private
   97750             :           static SgOmpThreadLimitClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   97751             : 
   97752             :           /// \private
   97753             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   97754             :           /// \private
   97755             :           static void resetValidFreepointers(); //
   97756             :           /// \private
   97757             :           static unsigned long getNumberOfLastValidPointer(); //
   97758             : 
   97759             : 
   97760             : #if defined(INLINE_FUNCTIONS)
   97761             :       /*! \brief returns pointer to newly allocated IR node */
   97762             :           inline void *operator new (size_t size);
   97763             : #else
   97764             :       /*! \brief returns pointer to newly allocated IR node */
   97765             :           void *operator new (size_t size);
   97766             : #endif
   97767             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   97768             :           void operator delete (void* pointer, size_t size);
   97769             : 
   97770             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   97771           0 :           void operator delete (void* pointer)
   97772             :              {
   97773             :             // This is the generated delete operator...
   97774           0 :                SgOmpThreadLimitClause::operator delete (pointer,sizeof(SgOmpThreadLimitClause));
   97775             :              }
   97776             : 
   97777             :       /*! \brief Returns the total number of IR nodes of this type */
   97778             :           static size_t numberOfNodes();
   97779             : 
   97780             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   97781             :           static size_t memoryUsage();
   97782             : 
   97783             :       // End of scope which started in IR nodes specific code 
   97784             :       /* */
   97785             : 
   97786             :       /* name Internal Functions
   97787             :           \brief Internal functions ... incomplete-documentation
   97788             : 
   97789             :           These functions have been made public as part of the design, but they are suggested for internal use 
   97790             :           or by particularly knowledgeable users for specialized tools or applications.
   97791             : 
   97792             :           \internal We could not make these private because they are required by user for special purposes. And 
   97793             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   97794             :          
   97795             :        */
   97796             : 
   97797             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   97798             :        // overridden in every class by *generated* implementation
   97799             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   97800             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   97801             :        // MS: 06/28/02 container of names of variables or container indices 
   97802             :        // used used in the traversal to access AST successor nodes
   97803             :        // overridden in every class by *generated* implementation
   97804             :       /*! \brief container of names of variables or container indices used used in the traversal
   97805             :           to access AST successor nodes overridden in every class by *generated* implementation */
   97806             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   97807             : 
   97808             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   97809             :        // than all the vector copies. The implementation for these functions is generated for each class.
   97810             :       /*! \brief return number of children in the traversal successor list */
   97811             :           virtual size_t get_numberOfTraversalSuccessors() override;
   97812             :       /*! \brief index-based access to traversal successors by index number */
   97813             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   97814             :       /*! \brief index-based access to traversal successors by child node */
   97815             :           virtual size_t get_childIndex(SgNode *child) override;
   97816             : 
   97817             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   97818             :        // MS: 08/16/2002 method for generating RTI information
   97819             :       /*! \brief return C++ Runtime-Time-Information */
   97820             :           virtual RTIReturnType roseRTI() override;
   97821             : #endif
   97822             :       /* */
   97823             : 
   97824             : 
   97825             : 
   97826             :       /* name Deprecated Functions
   97827             :           \brief Deprecated functions ... incomplete-documentation
   97828             : 
   97829             :           These functions have been deprecated from use.
   97830             :        */
   97831             :       /* */
   97832             : 
   97833             :       /*! returns a C style string (char*) representing the class name */
   97834             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   97835             : 
   97836             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   97837             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   97838             : #if 0
   97839             :       /*! returns old style Sage II enum values */
   97840             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   97841             :       /*! returns old style Sage II enum values */
   97842             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   97843             : #endif
   97844             :       /* */
   97845             : 
   97846             : 
   97847             : 
   97848             : 
   97849             :      public:
   97850             :       /* name Traversal Support Functions
   97851             :           \brief Traversal support functions ... incomplete-documentation
   97852             : 
   97853             :           These functions have been made public as part of the design, but they are suggested for internal use 
   97854             :           or by particularly knowledgable users for specialized tools or applications.
   97855             :        */
   97856             :       /* */
   97857             : 
   97858             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   97859             :        // (inferior to ROSE traversal mechanism, experimental).
   97860             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   97861             :        */
   97862             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   97863             : 
   97864             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   97865             :       /*! \brief support for the classic visitor pattern done in GoF */
   97866             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   97867             : 
   97868             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   97869             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   97870             :        */
   97871             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   97872             : 
   97873             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   97874             :        */
   97875             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   97876             : 
   97877             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   97878             :        // This traversal helps support internal tools that call static member functions.
   97879             :        // note: this function operates on the memory pools.
   97880             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   97881             :        */
   97882             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   97883             :       /* */
   97884             : 
   97885             : 
   97886             :      public:
   97887             :       /* name Memory Allocation Functions
   97888             :           \brief Memory allocations functions ... incomplete-documentation
   97889             : 
   97890             :           These functions have been made public as part of the design, but they are suggested for internal use 
   97891             :           or by particularly knowledgable users for specialized tools or applications.
   97892             :        */
   97893             :       /* */
   97894             : 
   97895             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   97896             : 
   97897             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   97898             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   97899             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   97900             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   97901             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   97902             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   97903             :           being used with the AST File I/O mechanism.
   97904             :        */
   97905             :           virtual bool isInMemoryPool() override;
   97906             : 
   97907             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   97908             : 
   97909             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   97910             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   97911             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   97912             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   97913             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   97914             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   97915             :           being used with the AST File I/O mechanism.
   97916             :        */
   97917             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   97918             : 
   97919             :       // DQ (4/30/2006): Modified to be a const function.
   97920             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   97921             : 
   97922             :           This functions is part of general support for many possible tools to operate 
   97923             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   97924             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   97925             :           less than the set of pointers used by the AST file I/O. This is part of
   97926             :           work implemented by Andreas, and support tools such as the AST graph generation.
   97927             : 
   97928             :           \warning This function can return unexpected data members and thus the 
   97929             :                    order and the number of elements is unpredicable and subject 
   97930             :                    to change.
   97931             : 
   97932             :           \returns STL vector of pairs of SgNode* and strings
   97933             :        */
   97934             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   97935             : 
   97936             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   97937             : 
   97938             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   97939             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   97940             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   97941             : 
   97942             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   97943             :                    and subject to change.
   97944             :        */
   97945             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   97946             : 
   97947             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   97948             : 
   97949             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   97950             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   97951             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   97952             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   97953             : 
   97954             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   97955             : 
   97956             :           \returns long
   97957             :        */
   97958             :           virtual long getChildIndex( SgNode* childNode ) const override;
   97959             : 
   97960             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   97961             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97962             :       /* \brief Constructor for use by AST File I/O Mechanism
   97963             : 
   97964             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   97965             :           which obtained via fast binary file I/O from disk.
   97966             :        */
   97967             :        // SgOmpThreadLimitClause( SgOmpThreadLimitClauseStorageClass& source );
   97968             : 
   97969             : 
   97970             : 
   97971             : 
   97972             : 
   97973             :  // JH (10/24/2005): methods added to support the ast file IO
   97974             :     private:
   97975             : 
   97976             :       /* name AST Memory Allocation Support Functions
   97977             :           \brief Memory allocations support....
   97978             : 
   97979             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   97980             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   97981             :           and support the AST File I/O Mechanism.
   97982             :        */
   97983             :       /* */
   97984             : 
   97985             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   97986             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   97987             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   97988             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   97989             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   97990             :           a correspinding one in the AST_FILE_IO class!
   97991             :        */
   97992             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   97993             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   97994             :       /* \brief Typedef used for low level memory access.
   97995             :        */
   97996             :        // typedef unsigned char* TestType;
   97997             : 
   97998             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   97999             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   98000             :       /* \brief Typedef used to hold memory addresses as values.
   98001             :        */
   98002             :        // typedef unsigned long  AddressType;
   98003             : 
   98004             : 
   98005             : 
   98006             :        // necessary, to have direct access to the p_freepointer and the private methods !
   98007             :       /*! \brief friend class declaration to support AST File I/O */
   98008             :           friend class AST_FILE_IO;
   98009             : 
   98010             :       /*! \brief friend class declaration to support AST File I/O */
   98011             :           friend class SgOmpThreadLimitClauseStorageClass;
   98012             : 
   98013             :       /*! \brief friend class declaration to support AST File I/O */
   98014             :           friend class AstSpecificDataManagingClass;
   98015             : 
   98016             :       /*! \brief friend class declaration to support AST File I/O */
   98017             :           friend class AstSpecificDataManagingClassStorageClass;
   98018             :     public:
   98019             :       /*! \brief IR node constructor to support AST File I/O */
   98020             :           SgOmpThreadLimitClause( const SgOmpThreadLimitClauseStorageClass& source );
   98021             : 
   98022             :  // private: // JJW hack
   98023             :        /*
   98024             :           name AST Memory Allocation Support Variables
   98025             :           Memory allocations support variables 
   98026             : 
   98027             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   98028             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   98029             :           and support the AST File I/O Mechanism.
   98030             :        */
   98031             :       /* */
   98032             : 
   98033             :     public:
   98034             : 
   98035             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   98036             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   98037             :       // virtual SgNode* addRegExpAttribute();
   98038             :       /*! \brief Support for AST matching using regular expression.
   98039             : 
   98040             :           This support is incomplete and the subject of current research to define 
   98041             :           RegEx trees to support inexact matching.
   98042             :        */
   98043             :           SgOmpThreadLimitClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   98044             : 
   98045             : // *** COMMON CODE SECTION ENDS HERE ***
   98046             : 
   98047             : 
   98048             : // End of memberFunctionString
   98049             : // Start of memberFunctionString
   98050             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   98051             : 
   98052             :      // the generated cast function
   98053             :      // friend ROSE_DLL_API SgOmpThreadLimitClause* isSgOmpThreadLimitClause ( SgNode* s );
   98054             : 
   98055             :           typedef SgOmpExpressionClause base_node_type;
   98056             : 
   98057             : 
   98058             : // End of memberFunctionString
   98059             : 
   98060             : 
   98061             :      public: 
   98062             :          virtual ~SgOmpThreadLimitClause();
   98063             : 
   98064             : 
   98065             :      public: 
   98066             :          SgOmpThreadLimitClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   98067             :          SgOmpThreadLimitClause(SgExpression* expression); 
   98068             : 
   98069             :     protected:
   98070             : 
   98071             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpThreadLimitClause>;
   98072             : 
   98073             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98074             : 
   98075             : 
   98076             :    };
   98077             : #endif
   98078             : 
   98079             : // postdeclarations for SgOmpThreadLimitClause
   98080             : 
   98081             : /* #line 98082 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98082             : 
   98083             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   98084             : 
   98085             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98086             : 
   98087             : 
   98088             : /* #line 98089 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98089             : 
   98090             : 
   98091             : 
   98092             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98093             : 
   98094             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   98095             : //      This code is automatically generated for each 
   98096             : //      terminal and non-terminal within the defined 
   98097             : //      grammar.  There is a simple way to change the 
   98098             : //      code to fix bugs etc.  See the ROSE README file
   98099             : //      for directions.
   98100             : 
   98101             : // tps: (02/22/2010): Adding DLL export requirements
   98102             : #include "rosedll.h"
   98103             : 
   98104             : // predeclarations for SgOmpDeviceClause
   98105             : 
   98106             : /* #line 98107 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98107             : 
   98108             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   98109             : 
   98110             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98111             : 
   98112             : #if 1
   98113             : // Class Definition for SgOmpDeviceClause
   98114             : class ROSE_DLL_API SgOmpDeviceClause  : public SgOmpExpressionClause
   98115             :    {
   98116             :      public:
   98117             : 
   98118             : 
   98119             : /* #line 98120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98120             : 
   98121             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   98122             : // Start of memberFunctionString
   98123             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   98124             : 
   98125             : // *** COMMON CODE SECTION BEGINS HERE ***
   98126             : 
   98127             :     public:
   98128             : 
   98129             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   98130             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   98131             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   98132             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   98133             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   98134             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   98135             : 
   98136             :       /*! \brief returns a string representing the class name */
   98137             :           virtual std::string class_name() const override;
   98138             : 
   98139             :       /*! \brief returns new style SageIII enum values */
   98140             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   98141             : 
   98142             :       /*! \brief static variant value */
   98143             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   98144             :        // static const VariantT static_variant = V_SgOmpDeviceClause;
   98145             :           enum { static_variant = V_SgOmpDeviceClause };
   98146             : 
   98147             :        /* the generated cast function */
   98148             :       /*! \brief Casts pointer from base class to derived class */
   98149             :           ROSE_DLL_API friend       SgOmpDeviceClause* isSgOmpDeviceClause(       SgNode * s );
   98150             : 
   98151             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   98152             :           ROSE_DLL_API friend const SgOmpDeviceClause* isSgOmpDeviceClause( const SgNode * s );
   98153             : 
   98154             :      // ******************************************
   98155             :      // * Memory Pool / New / Delete
   98156             :      // ******************************************
   98157             : 
   98158             :      public:
   98159             :           /// \private
   98160             :           static const unsigned pool_size; //
   98161             :           /// \private
   98162             :           static std::vector<unsigned char *> pools; //
   98163             :           /// \private
   98164             :           static SgOmpDeviceClause * next_node; // 
   98165             : 
   98166             :           /// \private
   98167             :           static unsigned long initializeStorageClassArray(SgOmpDeviceClauseStorageClass *); //
   98168             : 
   98169             :           /// \private
   98170             :           static void clearMemoryPool(); //
   98171             :           static void deleteMemoryPool(); //
   98172             : 
   98173             :           /// \private
   98174             :           static void extendMemoryPoolForFileIO(); //
   98175             : 
   98176             :           /// \private
   98177             :           static SgOmpDeviceClause * getPointerFromGlobalIndex(unsigned long); //
   98178             :           /// \private
   98179             :           static SgOmpDeviceClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   98180             : 
   98181             :           /// \private
   98182             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   98183             :           /// \private
   98184             :           static void resetValidFreepointers(); //
   98185             :           /// \private
   98186             :           static unsigned long getNumberOfLastValidPointer(); //
   98187             : 
   98188             : 
   98189             : #if defined(INLINE_FUNCTIONS)
   98190             :       /*! \brief returns pointer to newly allocated IR node */
   98191             :           inline void *operator new (size_t size);
   98192             : #else
   98193             :       /*! \brief returns pointer to newly allocated IR node */
   98194             :           void *operator new (size_t size);
   98195             : #endif
   98196             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   98197             :           void operator delete (void* pointer, size_t size);
   98198             : 
   98199             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   98200           0 :           void operator delete (void* pointer)
   98201             :              {
   98202             :             // This is the generated delete operator...
   98203           0 :                SgOmpDeviceClause::operator delete (pointer,sizeof(SgOmpDeviceClause));
   98204             :              }
   98205             : 
   98206             :       /*! \brief Returns the total number of IR nodes of this type */
   98207             :           static size_t numberOfNodes();
   98208             : 
   98209             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   98210             :           static size_t memoryUsage();
   98211             : 
   98212             :       // End of scope which started in IR nodes specific code 
   98213             :       /* */
   98214             : 
   98215             :       /* name Internal Functions
   98216             :           \brief Internal functions ... incomplete-documentation
   98217             : 
   98218             :           These functions have been made public as part of the design, but they are suggested for internal use 
   98219             :           or by particularly knowledgeable users for specialized tools or applications.
   98220             : 
   98221             :           \internal We could not make these private because they are required by user for special purposes. And 
   98222             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   98223             :          
   98224             :        */
   98225             : 
   98226             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   98227             :        // overridden in every class by *generated* implementation
   98228             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   98229             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   98230             :        // MS: 06/28/02 container of names of variables or container indices 
   98231             :        // used used in the traversal to access AST successor nodes
   98232             :        // overridden in every class by *generated* implementation
   98233             :       /*! \brief container of names of variables or container indices used used in the traversal
   98234             :           to access AST successor nodes overridden in every class by *generated* implementation */
   98235             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   98236             : 
   98237             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   98238             :        // than all the vector copies. The implementation for these functions is generated for each class.
   98239             :       /*! \brief return number of children in the traversal successor list */
   98240             :           virtual size_t get_numberOfTraversalSuccessors() override;
   98241             :       /*! \brief index-based access to traversal successors by index number */
   98242             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   98243             :       /*! \brief index-based access to traversal successors by child node */
   98244             :           virtual size_t get_childIndex(SgNode *child) override;
   98245             : 
   98246             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   98247             :        // MS: 08/16/2002 method for generating RTI information
   98248             :       /*! \brief return C++ Runtime-Time-Information */
   98249             :           virtual RTIReturnType roseRTI() override;
   98250             : #endif
   98251             :       /* */
   98252             : 
   98253             : 
   98254             : 
   98255             :       /* name Deprecated Functions
   98256             :           \brief Deprecated functions ... incomplete-documentation
   98257             : 
   98258             :           These functions have been deprecated from use.
   98259             :        */
   98260             :       /* */
   98261             : 
   98262             :       /*! returns a C style string (char*) representing the class name */
   98263             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   98264             : 
   98265             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   98266             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   98267             : #if 0
   98268             :       /*! returns old style Sage II enum values */
   98269             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   98270             :       /*! returns old style Sage II enum values */
   98271             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   98272             : #endif
   98273             :       /* */
   98274             : 
   98275             : 
   98276             : 
   98277             : 
   98278             :      public:
   98279             :       /* name Traversal Support Functions
   98280             :           \brief Traversal support functions ... incomplete-documentation
   98281             : 
   98282             :           These functions have been made public as part of the design, but they are suggested for internal use 
   98283             :           or by particularly knowledgable users for specialized tools or applications.
   98284             :        */
   98285             :       /* */
   98286             : 
   98287             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   98288             :        // (inferior to ROSE traversal mechanism, experimental).
   98289             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   98290             :        */
   98291             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   98292             : 
   98293             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   98294             :       /*! \brief support for the classic visitor pattern done in GoF */
   98295             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   98296             : 
   98297             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   98298             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   98299             :        */
   98300             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   98301             : 
   98302             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   98303             :        */
   98304             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   98305             : 
   98306             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   98307             :        // This traversal helps support internal tools that call static member functions.
   98308             :        // note: this function operates on the memory pools.
   98309             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   98310             :        */
   98311             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   98312             :       /* */
   98313             : 
   98314             : 
   98315             :      public:
   98316             :       /* name Memory Allocation Functions
   98317             :           \brief Memory allocations functions ... incomplete-documentation
   98318             : 
   98319             :           These functions have been made public as part of the design, but they are suggested for internal use 
   98320             :           or by particularly knowledgable users for specialized tools or applications.
   98321             :        */
   98322             :       /* */
   98323             : 
   98324             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   98325             : 
   98326             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   98327             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   98328             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   98329             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   98330             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   98331             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   98332             :           being used with the AST File I/O mechanism.
   98333             :        */
   98334             :           virtual bool isInMemoryPool() override;
   98335             : 
   98336             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   98337             : 
   98338             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   98339             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   98340             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   98341             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   98342             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   98343             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   98344             :           being used with the AST File I/O mechanism.
   98345             :        */
   98346             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   98347             : 
   98348             :       // DQ (4/30/2006): Modified to be a const function.
   98349             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   98350             : 
   98351             :           This functions is part of general support for many possible tools to operate 
   98352             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   98353             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   98354             :           less than the set of pointers used by the AST file I/O. This is part of
   98355             :           work implemented by Andreas, and support tools such as the AST graph generation.
   98356             : 
   98357             :           \warning This function can return unexpected data members and thus the 
   98358             :                    order and the number of elements is unpredicable and subject 
   98359             :                    to change.
   98360             : 
   98361             :           \returns STL vector of pairs of SgNode* and strings
   98362             :        */
   98363             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   98364             : 
   98365             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   98366             : 
   98367             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   98368             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   98369             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   98370             : 
   98371             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   98372             :                    and subject to change.
   98373             :        */
   98374             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   98375             : 
   98376             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   98377             : 
   98378             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   98379             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   98380             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   98381             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   98382             : 
   98383             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   98384             : 
   98385             :           \returns long
   98386             :        */
   98387             :           virtual long getChildIndex( SgNode* childNode ) const override;
   98388             : 
   98389             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   98390             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   98391             :       /* \brief Constructor for use by AST File I/O Mechanism
   98392             : 
   98393             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   98394             :           which obtained via fast binary file I/O from disk.
   98395             :        */
   98396             :        // SgOmpDeviceClause( SgOmpDeviceClauseStorageClass& source );
   98397             : 
   98398             : 
   98399             : 
   98400             : 
   98401             : 
   98402             :  // JH (10/24/2005): methods added to support the ast file IO
   98403             :     private:
   98404             : 
   98405             :       /* name AST Memory Allocation Support Functions
   98406             :           \brief Memory allocations support....
   98407             : 
   98408             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   98409             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   98410             :           and support the AST File I/O Mechanism.
   98411             :        */
   98412             :       /* */
   98413             : 
   98414             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   98415             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   98416             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   98417             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   98418             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   98419             :           a correspinding one in the AST_FILE_IO class!
   98420             :        */
   98421             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   98422             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   98423             :       /* \brief Typedef used for low level memory access.
   98424             :        */
   98425             :        // typedef unsigned char* TestType;
   98426             : 
   98427             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   98428             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   98429             :       /* \brief Typedef used to hold memory addresses as values.
   98430             :        */
   98431             :        // typedef unsigned long  AddressType;
   98432             : 
   98433             : 
   98434             : 
   98435             :        // necessary, to have direct access to the p_freepointer and the private methods !
   98436             :       /*! \brief friend class declaration to support AST File I/O */
   98437             :           friend class AST_FILE_IO;
   98438             : 
   98439             :       /*! \brief friend class declaration to support AST File I/O */
   98440             :           friend class SgOmpDeviceClauseStorageClass;
   98441             : 
   98442             :       /*! \brief friend class declaration to support AST File I/O */
   98443             :           friend class AstSpecificDataManagingClass;
   98444             : 
   98445             :       /*! \brief friend class declaration to support AST File I/O */
   98446             :           friend class AstSpecificDataManagingClassStorageClass;
   98447             :     public:
   98448             :       /*! \brief IR node constructor to support AST File I/O */
   98449             :           SgOmpDeviceClause( const SgOmpDeviceClauseStorageClass& source );
   98450             : 
   98451             :  // private: // JJW hack
   98452             :        /*
   98453             :           name AST Memory Allocation Support Variables
   98454             :           Memory allocations support variables 
   98455             : 
   98456             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   98457             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   98458             :           and support the AST File I/O Mechanism.
   98459             :        */
   98460             :       /* */
   98461             : 
   98462             :     public:
   98463             : 
   98464             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   98465             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   98466             :       // virtual SgNode* addRegExpAttribute();
   98467             :       /*! \brief Support for AST matching using regular expression.
   98468             : 
   98469             :           This support is incomplete and the subject of current research to define 
   98470             :           RegEx trees to support inexact matching.
   98471             :        */
   98472             :           SgOmpDeviceClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   98473             : 
   98474             : // *** COMMON CODE SECTION ENDS HERE ***
   98475             : 
   98476             : 
   98477             : // End of memberFunctionString
   98478             : // Start of memberFunctionString
   98479             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   98480             : 
   98481             :      // the generated cast function
   98482             :      // friend ROSE_DLL_API SgOmpDeviceClause* isSgOmpDeviceClause ( SgNode* s );
   98483             : 
   98484             :           typedef SgOmpExpressionClause base_node_type;
   98485             : 
   98486             : 
   98487             : // End of memberFunctionString
   98488             : 
   98489             :      public: 
   98490             :          SgOmpClause::omp_device_modifier_enum get_modifier() const;
   98491             :          void set_modifier(SgOmpClause::omp_device_modifier_enum modifier);
   98492             : 
   98493             : 
   98494             :      public: 
   98495             :          virtual ~SgOmpDeviceClause();
   98496             : 
   98497             : 
   98498             :      public: 
   98499             :          SgOmpDeviceClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL, SgOmpClause::omp_device_modifier_enum modifier =e_omp_device_modifier_unspecified); 
   98500             :          SgOmpDeviceClause(SgExpression* expression, SgOmpClause::omp_device_modifier_enum modifier); 
   98501             : 
   98502             :     protected:
   98503             : // Start of memberFunctionString
   98504             : SgOmpClause::omp_device_modifier_enum p_modifier;
   98505             :           
   98506             : // End of memberFunctionString
   98507             : 
   98508             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDeviceClause>;
   98509             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDeviceClause, SgOmpClause::omp_device_modifier_enum,&SgOmpDeviceClause::p_modifier>;
   98510             : 
   98511             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98512             : 
   98513             : 
   98514             :    };
   98515             : #endif
   98516             : 
   98517             : // postdeclarations for SgOmpDeviceClause
   98518             : 
   98519             : /* #line 98520 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98520             : 
   98521             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   98522             : 
   98523             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98524             : 
   98525             : 
   98526             : /* #line 98527 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98527             : 
   98528             : 
   98529             : 
   98530             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98531             : 
   98532             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   98533             : //      This code is automatically generated for each 
   98534             : //      terminal and non-terminal within the defined 
   98535             : //      grammar.  There is a simple way to change the 
   98536             : //      code to fix bugs etc.  See the ROSE README file
   98537             : //      for directions.
   98538             : 
   98539             : // tps: (02/22/2010): Adding DLL export requirements
   98540             : #include "rosedll.h"
   98541             : 
   98542             : // predeclarations for SgOmpHintClause
   98543             : 
   98544             : /* #line 98545 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98545             : 
   98546             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   98547             : 
   98548             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98549             : 
   98550             : #if 1
   98551             : // Class Definition for SgOmpHintClause
   98552             : class ROSE_DLL_API SgOmpHintClause  : public SgOmpExpressionClause
   98553             :    {
   98554             :      public:
   98555             : 
   98556             : 
   98557             : /* #line 98558 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98558             : 
   98559             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   98560             : // Start of memberFunctionString
   98561             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   98562             : 
   98563             : // *** COMMON CODE SECTION BEGINS HERE ***
   98564             : 
   98565             :     public:
   98566             : 
   98567             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   98568             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   98569             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   98570             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   98571             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   98572             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   98573             : 
   98574             :       /*! \brief returns a string representing the class name */
   98575             :           virtual std::string class_name() const override;
   98576             : 
   98577             :       /*! \brief returns new style SageIII enum values */
   98578             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   98579             : 
   98580             :       /*! \brief static variant value */
   98581             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   98582             :        // static const VariantT static_variant = V_SgOmpHintClause;
   98583             :           enum { static_variant = V_SgOmpHintClause };
   98584             : 
   98585             :        /* the generated cast function */
   98586             :       /*! \brief Casts pointer from base class to derived class */
   98587             :           ROSE_DLL_API friend       SgOmpHintClause* isSgOmpHintClause(       SgNode * s );
   98588             : 
   98589             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   98590             :           ROSE_DLL_API friend const SgOmpHintClause* isSgOmpHintClause( const SgNode * s );
   98591             : 
   98592             :      // ******************************************
   98593             :      // * Memory Pool / New / Delete
   98594             :      // ******************************************
   98595             : 
   98596             :      public:
   98597             :           /// \private
   98598             :           static const unsigned pool_size; //
   98599             :           /// \private
   98600             :           static std::vector<unsigned char *> pools; //
   98601             :           /// \private
   98602             :           static SgOmpHintClause * next_node; // 
   98603             : 
   98604             :           /// \private
   98605             :           static unsigned long initializeStorageClassArray(SgOmpHintClauseStorageClass *); //
   98606             : 
   98607             :           /// \private
   98608             :           static void clearMemoryPool(); //
   98609             :           static void deleteMemoryPool(); //
   98610             : 
   98611             :           /// \private
   98612             :           static void extendMemoryPoolForFileIO(); //
   98613             : 
   98614             :           /// \private
   98615             :           static SgOmpHintClause * getPointerFromGlobalIndex(unsigned long); //
   98616             :           /// \private
   98617             :           static SgOmpHintClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   98618             : 
   98619             :           /// \private
   98620             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   98621             :           /// \private
   98622             :           static void resetValidFreepointers(); //
   98623             :           /// \private
   98624             :           static unsigned long getNumberOfLastValidPointer(); //
   98625             : 
   98626             : 
   98627             : #if defined(INLINE_FUNCTIONS)
   98628             :       /*! \brief returns pointer to newly allocated IR node */
   98629             :           inline void *operator new (size_t size);
   98630             : #else
   98631             :       /*! \brief returns pointer to newly allocated IR node */
   98632             :           void *operator new (size_t size);
   98633             : #endif
   98634             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   98635             :           void operator delete (void* pointer, size_t size);
   98636             : 
   98637             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   98638           0 :           void operator delete (void* pointer)
   98639             :              {
   98640             :             // This is the generated delete operator...
   98641           0 :                SgOmpHintClause::operator delete (pointer,sizeof(SgOmpHintClause));
   98642             :              }
   98643             : 
   98644             :       /*! \brief Returns the total number of IR nodes of this type */
   98645             :           static size_t numberOfNodes();
   98646             : 
   98647             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   98648             :           static size_t memoryUsage();
   98649             : 
   98650             :       // End of scope which started in IR nodes specific code 
   98651             :       /* */
   98652             : 
   98653             :       /* name Internal Functions
   98654             :           \brief Internal functions ... incomplete-documentation
   98655             : 
   98656             :           These functions have been made public as part of the design, but they are suggested for internal use 
   98657             :           or by particularly knowledgeable users for specialized tools or applications.
   98658             : 
   98659             :           \internal We could not make these private because they are required by user for special purposes. And 
   98660             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   98661             :          
   98662             :        */
   98663             : 
   98664             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   98665             :        // overridden in every class by *generated* implementation
   98666             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   98667             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   98668             :        // MS: 06/28/02 container of names of variables or container indices 
   98669             :        // used used in the traversal to access AST successor nodes
   98670             :        // overridden in every class by *generated* implementation
   98671             :       /*! \brief container of names of variables or container indices used used in the traversal
   98672             :           to access AST successor nodes overridden in every class by *generated* implementation */
   98673             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   98674             : 
   98675             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   98676             :        // than all the vector copies. The implementation for these functions is generated for each class.
   98677             :       /*! \brief return number of children in the traversal successor list */
   98678             :           virtual size_t get_numberOfTraversalSuccessors() override;
   98679             :       /*! \brief index-based access to traversal successors by index number */
   98680             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   98681             :       /*! \brief index-based access to traversal successors by child node */
   98682             :           virtual size_t get_childIndex(SgNode *child) override;
   98683             : 
   98684             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   98685             :        // MS: 08/16/2002 method for generating RTI information
   98686             :       /*! \brief return C++ Runtime-Time-Information */
   98687             :           virtual RTIReturnType roseRTI() override;
   98688             : #endif
   98689             :       /* */
   98690             : 
   98691             : 
   98692             : 
   98693             :       /* name Deprecated Functions
   98694             :           \brief Deprecated functions ... incomplete-documentation
   98695             : 
   98696             :           These functions have been deprecated from use.
   98697             :        */
   98698             :       /* */
   98699             : 
   98700             :       /*! returns a C style string (char*) representing the class name */
   98701             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   98702             : 
   98703             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   98704             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   98705             : #if 0
   98706             :       /*! returns old style Sage II enum values */
   98707             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   98708             :       /*! returns old style Sage II enum values */
   98709             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   98710             : #endif
   98711             :       /* */
   98712             : 
   98713             : 
   98714             : 
   98715             : 
   98716             :      public:
   98717             :       /* name Traversal Support Functions
   98718             :           \brief Traversal support functions ... incomplete-documentation
   98719             : 
   98720             :           These functions have been made public as part of the design, but they are suggested for internal use 
   98721             :           or by particularly knowledgable users for specialized tools or applications.
   98722             :        */
   98723             :       /* */
   98724             : 
   98725             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   98726             :        // (inferior to ROSE traversal mechanism, experimental).
   98727             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   98728             :        */
   98729             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   98730             : 
   98731             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   98732             :       /*! \brief support for the classic visitor pattern done in GoF */
   98733             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   98734             : 
   98735             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   98736             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   98737             :        */
   98738             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   98739             : 
   98740             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   98741             :        */
   98742             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   98743             : 
   98744             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   98745             :        // This traversal helps support internal tools that call static member functions.
   98746             :        // note: this function operates on the memory pools.
   98747             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   98748             :        */
   98749             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   98750             :       /* */
   98751             : 
   98752             : 
   98753             :      public:
   98754             :       /* name Memory Allocation Functions
   98755             :           \brief Memory allocations functions ... incomplete-documentation
   98756             : 
   98757             :           These functions have been made public as part of the design, but they are suggested for internal use 
   98758             :           or by particularly knowledgable users for specialized tools or applications.
   98759             :        */
   98760             :       /* */
   98761             : 
   98762             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   98763             : 
   98764             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   98765             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   98766             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   98767             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   98768             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   98769             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   98770             :           being used with the AST File I/O mechanism.
   98771             :        */
   98772             :           virtual bool isInMemoryPool() override;
   98773             : 
   98774             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   98775             : 
   98776             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   98777             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   98778             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   98779             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   98780             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   98781             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   98782             :           being used with the AST File I/O mechanism.
   98783             :        */
   98784             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   98785             : 
   98786             :       // DQ (4/30/2006): Modified to be a const function.
   98787             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   98788             : 
   98789             :           This functions is part of general support for many possible tools to operate 
   98790             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   98791             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   98792             :           less than the set of pointers used by the AST file I/O. This is part of
   98793             :           work implemented by Andreas, and support tools such as the AST graph generation.
   98794             : 
   98795             :           \warning This function can return unexpected data members and thus the 
   98796             :                    order and the number of elements is unpredicable and subject 
   98797             :                    to change.
   98798             : 
   98799             :           \returns STL vector of pairs of SgNode* and strings
   98800             :        */
   98801             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   98802             : 
   98803             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   98804             : 
   98805             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   98806             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   98807             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   98808             : 
   98809             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   98810             :                    and subject to change.
   98811             :        */
   98812             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   98813             : 
   98814             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   98815             : 
   98816             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   98817             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   98818             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   98819             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   98820             : 
   98821             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   98822             : 
   98823             :           \returns long
   98824             :        */
   98825             :           virtual long getChildIndex( SgNode* childNode ) const override;
   98826             : 
   98827             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   98828             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   98829             :       /* \brief Constructor for use by AST File I/O Mechanism
   98830             : 
   98831             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   98832             :           which obtained via fast binary file I/O from disk.
   98833             :        */
   98834             :        // SgOmpHintClause( SgOmpHintClauseStorageClass& source );
   98835             : 
   98836             : 
   98837             : 
   98838             : 
   98839             : 
   98840             :  // JH (10/24/2005): methods added to support the ast file IO
   98841             :     private:
   98842             : 
   98843             :       /* name AST Memory Allocation Support Functions
   98844             :           \brief Memory allocations support....
   98845             : 
   98846             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   98847             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   98848             :           and support the AST File I/O Mechanism.
   98849             :        */
   98850             :       /* */
   98851             : 
   98852             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   98853             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   98854             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   98855             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   98856             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   98857             :           a correspinding one in the AST_FILE_IO class!
   98858             :        */
   98859             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   98860             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   98861             :       /* \brief Typedef used for low level memory access.
   98862             :        */
   98863             :        // typedef unsigned char* TestType;
   98864             : 
   98865             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   98866             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   98867             :       /* \brief Typedef used to hold memory addresses as values.
   98868             :        */
   98869             :        // typedef unsigned long  AddressType;
   98870             : 
   98871             : 
   98872             : 
   98873             :        // necessary, to have direct access to the p_freepointer and the private methods !
   98874             :       /*! \brief friend class declaration to support AST File I/O */
   98875             :           friend class AST_FILE_IO;
   98876             : 
   98877             :       /*! \brief friend class declaration to support AST File I/O */
   98878             :           friend class SgOmpHintClauseStorageClass;
   98879             : 
   98880             :       /*! \brief friend class declaration to support AST File I/O */
   98881             :           friend class AstSpecificDataManagingClass;
   98882             : 
   98883             :       /*! \brief friend class declaration to support AST File I/O */
   98884             :           friend class AstSpecificDataManagingClassStorageClass;
   98885             :     public:
   98886             :       /*! \brief IR node constructor to support AST File I/O */
   98887             :           SgOmpHintClause( const SgOmpHintClauseStorageClass& source );
   98888             : 
   98889             :  // private: // JJW hack
   98890             :        /*
   98891             :           name AST Memory Allocation Support Variables
   98892             :           Memory allocations support variables 
   98893             : 
   98894             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   98895             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   98896             :           and support the AST File I/O Mechanism.
   98897             :        */
   98898             :       /* */
   98899             : 
   98900             :     public:
   98901             : 
   98902             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   98903             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   98904             :       // virtual SgNode* addRegExpAttribute();
   98905             :       /*! \brief Support for AST matching using regular expression.
   98906             : 
   98907             :           This support is incomplete and the subject of current research to define 
   98908             :           RegEx trees to support inexact matching.
   98909             :        */
   98910             :           SgOmpHintClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   98911             : 
   98912             : // *** COMMON CODE SECTION ENDS HERE ***
   98913             : 
   98914             : 
   98915             : // End of memberFunctionString
   98916             : // Start of memberFunctionString
   98917             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   98918             : 
   98919             :      // the generated cast function
   98920             :      // friend ROSE_DLL_API SgOmpHintClause* isSgOmpHintClause ( SgNode* s );
   98921             : 
   98922             :           typedef SgOmpExpressionClause base_node_type;
   98923             : 
   98924             : 
   98925             : // End of memberFunctionString
   98926             : 
   98927             : 
   98928             :      public: 
   98929             :          virtual ~SgOmpHintClause();
   98930             : 
   98931             : 
   98932             :      public: 
   98933             :          SgOmpHintClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   98934             :          SgOmpHintClause(SgExpression* expression); 
   98935             : 
   98936             :     protected:
   98937             : 
   98938             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpHintClause>;
   98939             : 
   98940             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98941             : 
   98942             : 
   98943             :    };
   98944             : #endif
   98945             : 
   98946             : // postdeclarations for SgOmpHintClause
   98947             : 
   98948             : /* #line 98949 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98949             : 
   98950             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   98951             : 
   98952             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98953             : 
   98954             : 
   98955             : /* #line 98956 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98956             : 
   98957             : 
   98958             : 
   98959             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98960             : 
   98961             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   98962             : //      This code is automatically generated for each 
   98963             : //      terminal and non-terminal within the defined 
   98964             : //      grammar.  There is a simple way to change the 
   98965             : //      code to fix bugs etc.  See the ROSE README file
   98966             : //      for directions.
   98967             : 
   98968             : // tps: (02/22/2010): Adding DLL export requirements
   98969             : #include "rosedll.h"
   98970             : 
   98971             : // predeclarations for SgOmpGrainsizeClause
   98972             : 
   98973             : /* #line 98974 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98974             : 
   98975             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   98976             : 
   98977             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   98978             : 
   98979             : #if 1
   98980             : // Class Definition for SgOmpGrainsizeClause
   98981             : class ROSE_DLL_API SgOmpGrainsizeClause  : public SgOmpExpressionClause
   98982             :    {
   98983             :      public:
   98984             : 
   98985             : 
   98986             : /* #line 98987 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   98987             : 
   98988             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   98989             : // Start of memberFunctionString
   98990             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   98991             : 
   98992             : // *** COMMON CODE SECTION BEGINS HERE ***
   98993             : 
   98994             :     public:
   98995             : 
   98996             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   98997             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   98998             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   98999             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   99000             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   99001             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   99002             : 
   99003             :       /*! \brief returns a string representing the class name */
   99004             :           virtual std::string class_name() const override;
   99005             : 
   99006             :       /*! \brief returns new style SageIII enum values */
   99007             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   99008             : 
   99009             :       /*! \brief static variant value */
   99010             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   99011             :        // static const VariantT static_variant = V_SgOmpGrainsizeClause;
   99012             :           enum { static_variant = V_SgOmpGrainsizeClause };
   99013             : 
   99014             :        /* the generated cast function */
   99015             :       /*! \brief Casts pointer from base class to derived class */
   99016             :           ROSE_DLL_API friend       SgOmpGrainsizeClause* isSgOmpGrainsizeClause(       SgNode * s );
   99017             : 
   99018             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   99019             :           ROSE_DLL_API friend const SgOmpGrainsizeClause* isSgOmpGrainsizeClause( const SgNode * s );
   99020             : 
   99021             :      // ******************************************
   99022             :      // * Memory Pool / New / Delete
   99023             :      // ******************************************
   99024             : 
   99025             :      public:
   99026             :           /// \private
   99027             :           static const unsigned pool_size; //
   99028             :           /// \private
   99029             :           static std::vector<unsigned char *> pools; //
   99030             :           /// \private
   99031             :           static SgOmpGrainsizeClause * next_node; // 
   99032             : 
   99033             :           /// \private
   99034             :           static unsigned long initializeStorageClassArray(SgOmpGrainsizeClauseStorageClass *); //
   99035             : 
   99036             :           /// \private
   99037             :           static void clearMemoryPool(); //
   99038             :           static void deleteMemoryPool(); //
   99039             : 
   99040             :           /// \private
   99041             :           static void extendMemoryPoolForFileIO(); //
   99042             : 
   99043             :           /// \private
   99044             :           static SgOmpGrainsizeClause * getPointerFromGlobalIndex(unsigned long); //
   99045             :           /// \private
   99046             :           static SgOmpGrainsizeClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   99047             : 
   99048             :           /// \private
   99049             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   99050             :           /// \private
   99051             :           static void resetValidFreepointers(); //
   99052             :           /// \private
   99053             :           static unsigned long getNumberOfLastValidPointer(); //
   99054             : 
   99055             : 
   99056             : #if defined(INLINE_FUNCTIONS)
   99057             :       /*! \brief returns pointer to newly allocated IR node */
   99058             :           inline void *operator new (size_t size);
   99059             : #else
   99060             :       /*! \brief returns pointer to newly allocated IR node */
   99061             :           void *operator new (size_t size);
   99062             : #endif
   99063             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   99064             :           void operator delete (void* pointer, size_t size);
   99065             : 
   99066             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   99067           0 :           void operator delete (void* pointer)
   99068             :              {
   99069             :             // This is the generated delete operator...
   99070           0 :                SgOmpGrainsizeClause::operator delete (pointer,sizeof(SgOmpGrainsizeClause));
   99071             :              }
   99072             : 
   99073             :       /*! \brief Returns the total number of IR nodes of this type */
   99074             :           static size_t numberOfNodes();
   99075             : 
   99076             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   99077             :           static size_t memoryUsage();
   99078             : 
   99079             :       // End of scope which started in IR nodes specific code 
   99080             :       /* */
   99081             : 
   99082             :       /* name Internal Functions
   99083             :           \brief Internal functions ... incomplete-documentation
   99084             : 
   99085             :           These functions have been made public as part of the design, but they are suggested for internal use 
   99086             :           or by particularly knowledgeable users for specialized tools or applications.
   99087             : 
   99088             :           \internal We could not make these private because they are required by user for special purposes. And 
   99089             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   99090             :          
   99091             :        */
   99092             : 
   99093             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   99094             :        // overridden in every class by *generated* implementation
   99095             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   99096             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   99097             :        // MS: 06/28/02 container of names of variables or container indices 
   99098             :        // used used in the traversal to access AST successor nodes
   99099             :        // overridden in every class by *generated* implementation
   99100             :       /*! \brief container of names of variables or container indices used used in the traversal
   99101             :           to access AST successor nodes overridden in every class by *generated* implementation */
   99102             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   99103             : 
   99104             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   99105             :        // than all the vector copies. The implementation for these functions is generated for each class.
   99106             :       /*! \brief return number of children in the traversal successor list */
   99107             :           virtual size_t get_numberOfTraversalSuccessors() override;
   99108             :       /*! \brief index-based access to traversal successors by index number */
   99109             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   99110             :       /*! \brief index-based access to traversal successors by child node */
   99111             :           virtual size_t get_childIndex(SgNode *child) override;
   99112             : 
   99113             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   99114             :        // MS: 08/16/2002 method for generating RTI information
   99115             :       /*! \brief return C++ Runtime-Time-Information */
   99116             :           virtual RTIReturnType roseRTI() override;
   99117             : #endif
   99118             :       /* */
   99119             : 
   99120             : 
   99121             : 
   99122             :       /* name Deprecated Functions
   99123             :           \brief Deprecated functions ... incomplete-documentation
   99124             : 
   99125             :           These functions have been deprecated from use.
   99126             :        */
   99127             :       /* */
   99128             : 
   99129             :       /*! returns a C style string (char*) representing the class name */
   99130             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   99131             : 
   99132             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   99133             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   99134             : #if 0
   99135             :       /*! returns old style Sage II enum values */
   99136             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   99137             :       /*! returns old style Sage II enum values */
   99138             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   99139             : #endif
   99140             :       /* */
   99141             : 
   99142             : 
   99143             : 
   99144             : 
   99145             :      public:
   99146             :       /* name Traversal Support Functions
   99147             :           \brief Traversal support functions ... incomplete-documentation
   99148             : 
   99149             :           These functions have been made public as part of the design, but they are suggested for internal use 
   99150             :           or by particularly knowledgable users for specialized tools or applications.
   99151             :        */
   99152             :       /* */
   99153             : 
   99154             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   99155             :        // (inferior to ROSE traversal mechanism, experimental).
   99156             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   99157             :        */
   99158             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   99159             : 
   99160             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   99161             :       /*! \brief support for the classic visitor pattern done in GoF */
   99162             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   99163             : 
   99164             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   99165             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   99166             :        */
   99167             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   99168             : 
   99169             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   99170             :        */
   99171             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   99172             : 
   99173             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   99174             :        // This traversal helps support internal tools that call static member functions.
   99175             :        // note: this function operates on the memory pools.
   99176             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   99177             :        */
   99178             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   99179             :       /* */
   99180             : 
   99181             : 
   99182             :      public:
   99183             :       /* name Memory Allocation Functions
   99184             :           \brief Memory allocations functions ... incomplete-documentation
   99185             : 
   99186             :           These functions have been made public as part of the design, but they are suggested for internal use 
   99187             :           or by particularly knowledgable users for specialized tools or applications.
   99188             :        */
   99189             :       /* */
   99190             : 
   99191             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   99192             : 
   99193             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   99194             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   99195             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   99196             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   99197             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   99198             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   99199             :           being used with the AST File I/O mechanism.
   99200             :        */
   99201             :           virtual bool isInMemoryPool() override;
   99202             : 
   99203             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   99204             : 
   99205             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   99206             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   99207             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   99208             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   99209             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   99210             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   99211             :           being used with the AST File I/O mechanism.
   99212             :        */
   99213             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   99214             : 
   99215             :       // DQ (4/30/2006): Modified to be a const function.
   99216             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   99217             : 
   99218             :           This functions is part of general support for many possible tools to operate 
   99219             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   99220             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   99221             :           less than the set of pointers used by the AST file I/O. This is part of
   99222             :           work implemented by Andreas, and support tools such as the AST graph generation.
   99223             : 
   99224             :           \warning This function can return unexpected data members and thus the 
   99225             :                    order and the number of elements is unpredicable and subject 
   99226             :                    to change.
   99227             : 
   99228             :           \returns STL vector of pairs of SgNode* and strings
   99229             :        */
   99230             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   99231             : 
   99232             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   99233             : 
   99234             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   99235             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   99236             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   99237             : 
   99238             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   99239             :                    and subject to change.
   99240             :        */
   99241             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   99242             : 
   99243             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   99244             : 
   99245             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   99246             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   99247             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   99248             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   99249             : 
   99250             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   99251             : 
   99252             :           \returns long
   99253             :        */
   99254             :           virtual long getChildIndex( SgNode* childNode ) const override;
   99255             : 
   99256             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   99257             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   99258             :       /* \brief Constructor for use by AST File I/O Mechanism
   99259             : 
   99260             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   99261             :           which obtained via fast binary file I/O from disk.
   99262             :        */
   99263             :        // SgOmpGrainsizeClause( SgOmpGrainsizeClauseStorageClass& source );
   99264             : 
   99265             : 
   99266             : 
   99267             : 
   99268             : 
   99269             :  // JH (10/24/2005): methods added to support the ast file IO
   99270             :     private:
   99271             : 
   99272             :       /* name AST Memory Allocation Support Functions
   99273             :           \brief Memory allocations support....
   99274             : 
   99275             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   99276             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   99277             :           and support the AST File I/O Mechanism.
   99278             :        */
   99279             :       /* */
   99280             : 
   99281             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   99282             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   99283             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   99284             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   99285             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   99286             :           a correspinding one in the AST_FILE_IO class!
   99287             :        */
   99288             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   99289             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   99290             :       /* \brief Typedef used for low level memory access.
   99291             :        */
   99292             :        // typedef unsigned char* TestType;
   99293             : 
   99294             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   99295             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   99296             :       /* \brief Typedef used to hold memory addresses as values.
   99297             :        */
   99298             :        // typedef unsigned long  AddressType;
   99299             : 
   99300             : 
   99301             : 
   99302             :        // necessary, to have direct access to the p_freepointer and the private methods !
   99303             :       /*! \brief friend class declaration to support AST File I/O */
   99304             :           friend class AST_FILE_IO;
   99305             : 
   99306             :       /*! \brief friend class declaration to support AST File I/O */
   99307             :           friend class SgOmpGrainsizeClauseStorageClass;
   99308             : 
   99309             :       /*! \brief friend class declaration to support AST File I/O */
   99310             :           friend class AstSpecificDataManagingClass;
   99311             : 
   99312             :       /*! \brief friend class declaration to support AST File I/O */
   99313             :           friend class AstSpecificDataManagingClassStorageClass;
   99314             :     public:
   99315             :       /*! \brief IR node constructor to support AST File I/O */
   99316             :           SgOmpGrainsizeClause( const SgOmpGrainsizeClauseStorageClass& source );
   99317             : 
   99318             :  // private: // JJW hack
   99319             :        /*
   99320             :           name AST Memory Allocation Support Variables
   99321             :           Memory allocations support variables 
   99322             : 
   99323             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   99324             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   99325             :           and support the AST File I/O Mechanism.
   99326             :        */
   99327             :       /* */
   99328             : 
   99329             :     public:
   99330             : 
   99331             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   99332             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   99333             :       // virtual SgNode* addRegExpAttribute();
   99334             :       /*! \brief Support for AST matching using regular expression.
   99335             : 
   99336             :           This support is incomplete and the subject of current research to define 
   99337             :           RegEx trees to support inexact matching.
   99338             :        */
   99339             :           SgOmpGrainsizeClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   99340             : 
   99341             : // *** COMMON CODE SECTION ENDS HERE ***
   99342             : 
   99343             : 
   99344             : // End of memberFunctionString
   99345             : // Start of memberFunctionString
   99346             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   99347             : 
   99348             :      // the generated cast function
   99349             :      // friend ROSE_DLL_API SgOmpGrainsizeClause* isSgOmpGrainsizeClause ( SgNode* s );
   99350             : 
   99351             :           typedef SgOmpExpressionClause base_node_type;
   99352             : 
   99353             : 
   99354             : // End of memberFunctionString
   99355             : 
   99356             : 
   99357             :      public: 
   99358             :          virtual ~SgOmpGrainsizeClause();
   99359             : 
   99360             : 
   99361             :      public: 
   99362             :          SgOmpGrainsizeClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   99363             :          SgOmpGrainsizeClause(SgExpression* expression); 
   99364             : 
   99365             :     protected:
   99366             : 
   99367             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpGrainsizeClause>;
   99368             : 
   99369             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99370             : 
   99371             : 
   99372             :    };
   99373             : #endif
   99374             : 
   99375             : // postdeclarations for SgOmpGrainsizeClause
   99376             : 
   99377             : /* #line 99378 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99378             : 
   99379             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   99380             : 
   99381             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99382             : 
   99383             : 
   99384             : /* #line 99385 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99385             : 
   99386             : 
   99387             : 
   99388             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99389             : 
   99390             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   99391             : //      This code is automatically generated for each 
   99392             : //      terminal and non-terminal within the defined 
   99393             : //      grammar.  There is a simple way to change the 
   99394             : //      code to fix bugs etc.  See the ROSE README file
   99395             : //      for directions.
   99396             : 
   99397             : // tps: (02/22/2010): Adding DLL export requirements
   99398             : #include "rosedll.h"
   99399             : 
   99400             : // predeclarations for SgOmpNumTasksClause
   99401             : 
   99402             : /* #line 99403 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99403             : 
   99404             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   99405             : 
   99406             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99407             : 
   99408             : #if 1
   99409             : // Class Definition for SgOmpNumTasksClause
   99410             : class ROSE_DLL_API SgOmpNumTasksClause  : public SgOmpExpressionClause
   99411             :    {
   99412             :      public:
   99413             : 
   99414             : 
   99415             : /* #line 99416 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99416             : 
   99417             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   99418             : // Start of memberFunctionString
   99419             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   99420             : 
   99421             : // *** COMMON CODE SECTION BEGINS HERE ***
   99422             : 
   99423             :     public:
   99424             : 
   99425             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   99426             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   99427             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   99428             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   99429             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   99430             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   99431             : 
   99432             :       /*! \brief returns a string representing the class name */
   99433             :           virtual std::string class_name() const override;
   99434             : 
   99435             :       /*! \brief returns new style SageIII enum values */
   99436             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   99437             : 
   99438             :       /*! \brief static variant value */
   99439             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   99440             :        // static const VariantT static_variant = V_SgOmpNumTasksClause;
   99441             :           enum { static_variant = V_SgOmpNumTasksClause };
   99442             : 
   99443             :        /* the generated cast function */
   99444             :       /*! \brief Casts pointer from base class to derived class */
   99445             :           ROSE_DLL_API friend       SgOmpNumTasksClause* isSgOmpNumTasksClause(       SgNode * s );
   99446             : 
   99447             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   99448             :           ROSE_DLL_API friend const SgOmpNumTasksClause* isSgOmpNumTasksClause( const SgNode * s );
   99449             : 
   99450             :      // ******************************************
   99451             :      // * Memory Pool / New / Delete
   99452             :      // ******************************************
   99453             : 
   99454             :      public:
   99455             :           /// \private
   99456             :           static const unsigned pool_size; //
   99457             :           /// \private
   99458             :           static std::vector<unsigned char *> pools; //
   99459             :           /// \private
   99460             :           static SgOmpNumTasksClause * next_node; // 
   99461             : 
   99462             :           /// \private
   99463             :           static unsigned long initializeStorageClassArray(SgOmpNumTasksClauseStorageClass *); //
   99464             : 
   99465             :           /// \private
   99466             :           static void clearMemoryPool(); //
   99467             :           static void deleteMemoryPool(); //
   99468             : 
   99469             :           /// \private
   99470             :           static void extendMemoryPoolForFileIO(); //
   99471             : 
   99472             :           /// \private
   99473             :           static SgOmpNumTasksClause * getPointerFromGlobalIndex(unsigned long); //
   99474             :           /// \private
   99475             :           static SgOmpNumTasksClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   99476             : 
   99477             :           /// \private
   99478             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   99479             :           /// \private
   99480             :           static void resetValidFreepointers(); //
   99481             :           /// \private
   99482             :           static unsigned long getNumberOfLastValidPointer(); //
   99483             : 
   99484             : 
   99485             : #if defined(INLINE_FUNCTIONS)
   99486             :       /*! \brief returns pointer to newly allocated IR node */
   99487             :           inline void *operator new (size_t size);
   99488             : #else
   99489             :       /*! \brief returns pointer to newly allocated IR node */
   99490             :           void *operator new (size_t size);
   99491             : #endif
   99492             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   99493             :           void operator delete (void* pointer, size_t size);
   99494             : 
   99495             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   99496           0 :           void operator delete (void* pointer)
   99497             :              {
   99498             :             // This is the generated delete operator...
   99499           0 :                SgOmpNumTasksClause::operator delete (pointer,sizeof(SgOmpNumTasksClause));
   99500             :              }
   99501             : 
   99502             :       /*! \brief Returns the total number of IR nodes of this type */
   99503             :           static size_t numberOfNodes();
   99504             : 
   99505             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   99506             :           static size_t memoryUsage();
   99507             : 
   99508             :       // End of scope which started in IR nodes specific code 
   99509             :       /* */
   99510             : 
   99511             :       /* name Internal Functions
   99512             :           \brief Internal functions ... incomplete-documentation
   99513             : 
   99514             :           These functions have been made public as part of the design, but they are suggested for internal use 
   99515             :           or by particularly knowledgeable users for specialized tools or applications.
   99516             : 
   99517             :           \internal We could not make these private because they are required by user for special purposes. And 
   99518             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   99519             :          
   99520             :        */
   99521             : 
   99522             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   99523             :        // overridden in every class by *generated* implementation
   99524             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   99525             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   99526             :        // MS: 06/28/02 container of names of variables or container indices 
   99527             :        // used used in the traversal to access AST successor nodes
   99528             :        // overridden in every class by *generated* implementation
   99529             :       /*! \brief container of names of variables or container indices used used in the traversal
   99530             :           to access AST successor nodes overridden in every class by *generated* implementation */
   99531             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   99532             : 
   99533             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   99534             :        // than all the vector copies. The implementation for these functions is generated for each class.
   99535             :       /*! \brief return number of children in the traversal successor list */
   99536             :           virtual size_t get_numberOfTraversalSuccessors() override;
   99537             :       /*! \brief index-based access to traversal successors by index number */
   99538             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   99539             :       /*! \brief index-based access to traversal successors by child node */
   99540             :           virtual size_t get_childIndex(SgNode *child) override;
   99541             : 
   99542             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   99543             :        // MS: 08/16/2002 method for generating RTI information
   99544             :       /*! \brief return C++ Runtime-Time-Information */
   99545             :           virtual RTIReturnType roseRTI() override;
   99546             : #endif
   99547             :       /* */
   99548             : 
   99549             : 
   99550             : 
   99551             :       /* name Deprecated Functions
   99552             :           \brief Deprecated functions ... incomplete-documentation
   99553             : 
   99554             :           These functions have been deprecated from use.
   99555             :        */
   99556             :       /* */
   99557             : 
   99558             :       /*! returns a C style string (char*) representing the class name */
   99559             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   99560             : 
   99561             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   99562             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   99563             : #if 0
   99564             :       /*! returns old style Sage II enum values */
   99565             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   99566             :       /*! returns old style Sage II enum values */
   99567             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   99568             : #endif
   99569             :       /* */
   99570             : 
   99571             : 
   99572             : 
   99573             : 
   99574             :      public:
   99575             :       /* name Traversal Support Functions
   99576             :           \brief Traversal support functions ... incomplete-documentation
   99577             : 
   99578             :           These functions have been made public as part of the design, but they are suggested for internal use 
   99579             :           or by particularly knowledgable users for specialized tools or applications.
   99580             :        */
   99581             :       /* */
   99582             : 
   99583             :        // DQ (11/26/2005): Support for visitor pattern mechanims
   99584             :        // (inferior to ROSE traversal mechanism, experimental).
   99585             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   99586             :        */
   99587             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
   99588             : 
   99589             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
   99590             :       /*! \brief support for the classic visitor pattern done in GoF */
   99591             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
   99592             : 
   99593             :        // DQ (12/26/2005): Support for traversal based on the memory pool
   99594             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
   99595             :        */
   99596             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
   99597             : 
   99598             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
   99599             :        */
   99600             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
   99601             : 
   99602             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
   99603             :        // This traversal helps support internal tools that call static member functions.
   99604             :        // note: this function operates on the memory pools.
   99605             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
   99606             :        */
   99607             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
   99608             :       /* */
   99609             : 
   99610             : 
   99611             :      public:
   99612             :       /* name Memory Allocation Functions
   99613             :           \brief Memory allocations functions ... incomplete-documentation
   99614             : 
   99615             :           These functions have been made public as part of the design, but they are suggested for internal use 
   99616             :           or by particularly knowledgable users for specialized tools or applications.
   99617             :        */
   99618             :       /* */
   99619             : 
   99620             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   99621             : 
   99622             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   99623             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   99624             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   99625             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   99626             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   99627             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   99628             :           being used with the AST File I/O mechanism.
   99629             :        */
   99630             :           virtual bool isInMemoryPool() override;
   99631             : 
   99632             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
   99633             : 
   99634             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
   99635             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
   99636             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
   99637             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
   99638             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
   99639             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
   99640             :           being used with the AST File I/O mechanism.
   99641             :        */
   99642             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
   99643             : 
   99644             :       // DQ (4/30/2006): Modified to be a const function.
   99645             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
   99646             : 
   99647             :           This functions is part of general support for many possible tools to operate 
   99648             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
   99649             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
   99650             :           less than the set of pointers used by the AST file I/O. This is part of
   99651             :           work implemented by Andreas, and support tools such as the AST graph generation.
   99652             : 
   99653             :           \warning This function can return unexpected data members and thus the 
   99654             :                    order and the number of elements is unpredicable and subject 
   99655             :                    to change.
   99656             : 
   99657             :           \returns STL vector of pairs of SgNode* and strings
   99658             :        */
   99659             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
   99660             : 
   99661             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
   99662             : 
   99663             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
   99664             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
   99665             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
   99666             : 
   99667             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
   99668             :                    and subject to change.
   99669             :        */
   99670             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
   99671             : 
   99672             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
   99673             : 
   99674             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
   99675             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
   99676             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
   99677             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
   99678             : 
   99679             :           \warning The mapping on children to integer values could change from release to release of ROSE.
   99680             : 
   99681             :           \returns long
   99682             :        */
   99683             :           virtual long getChildIndex( SgNode* childNode ) const override;
   99684             : 
   99685             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
   99686             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   99687             :       /* \brief Constructor for use by AST File I/O Mechanism
   99688             : 
   99689             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
   99690             :           which obtained via fast binary file I/O from disk.
   99691             :        */
   99692             :        // SgOmpNumTasksClause( SgOmpNumTasksClauseStorageClass& source );
   99693             : 
   99694             : 
   99695             : 
   99696             : 
   99697             : 
   99698             :  // JH (10/24/2005): methods added to support the ast file IO
   99699             :     private:
   99700             : 
   99701             :       /* name AST Memory Allocation Support Functions
   99702             :           \brief Memory allocations support....
   99703             : 
   99704             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
   99705             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   99706             :           and support the AST File I/O Mechanism.
   99707             :        */
   99708             :       /* */
   99709             : 
   99710             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
   99711             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
   99712             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
   99713             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
   99714             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
   99715             :           a correspinding one in the AST_FILE_IO class!
   99716             :        */
   99717             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   99718             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   99719             :       /* \brief Typedef used for low level memory access.
   99720             :        */
   99721             :        // typedef unsigned char* TestType;
   99722             : 
   99723             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
   99724             :       // comment here (changed to be a C style comment and not be a doxygen comment).
   99725             :       /* \brief Typedef used to hold memory addresses as values.
   99726             :        */
   99727             :        // typedef unsigned long  AddressType;
   99728             : 
   99729             : 
   99730             : 
   99731             :        // necessary, to have direct access to the p_freepointer and the private methods !
   99732             :       /*! \brief friend class declaration to support AST File I/O */
   99733             :           friend class AST_FILE_IO;
   99734             : 
   99735             :       /*! \brief friend class declaration to support AST File I/O */
   99736             :           friend class SgOmpNumTasksClauseStorageClass;
   99737             : 
   99738             :       /*! \brief friend class declaration to support AST File I/O */
   99739             :           friend class AstSpecificDataManagingClass;
   99740             : 
   99741             :       /*! \brief friend class declaration to support AST File I/O */
   99742             :           friend class AstSpecificDataManagingClassStorageClass;
   99743             :     public:
   99744             :       /*! \brief IR node constructor to support AST File I/O */
   99745             :           SgOmpNumTasksClause( const SgOmpNumTasksClauseStorageClass& source );
   99746             : 
   99747             :  // private: // JJW hack
   99748             :        /*
   99749             :           name AST Memory Allocation Support Variables
   99750             :           Memory allocations support variables 
   99751             : 
   99752             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
   99753             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
   99754             :           and support the AST File I/O Mechanism.
   99755             :        */
   99756             :       /* */
   99757             : 
   99758             :     public:
   99759             : 
   99760             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
   99761             :       // to current node (so that it will work cleanly with build functions to specify patterns).
   99762             :       // virtual SgNode* addRegExpAttribute();
   99763             :       /*! \brief Support for AST matching using regular expression.
   99764             : 
   99765             :           This support is incomplete and the subject of current research to define 
   99766             :           RegEx trees to support inexact matching.
   99767             :        */
   99768             :           SgOmpNumTasksClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
   99769             : 
   99770             : // *** COMMON CODE SECTION ENDS HERE ***
   99771             : 
   99772             : 
   99773             : // End of memberFunctionString
   99774             : // Start of memberFunctionString
   99775             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
   99776             : 
   99777             :      // the generated cast function
   99778             :      // friend ROSE_DLL_API SgOmpNumTasksClause* isSgOmpNumTasksClause ( SgNode* s );
   99779             : 
   99780             :           typedef SgOmpExpressionClause base_node_type;
   99781             : 
   99782             : 
   99783             : // End of memberFunctionString
   99784             : 
   99785             : 
   99786             :      public: 
   99787             :          virtual ~SgOmpNumTasksClause();
   99788             : 
   99789             : 
   99790             :      public: 
   99791             :          SgOmpNumTasksClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
   99792             :          SgOmpNumTasksClause(SgExpression* expression); 
   99793             : 
   99794             :     protected:
   99795             : 
   99796             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpNumTasksClause>;
   99797             : 
   99798             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99799             : 
   99800             : 
   99801             :    };
   99802             : #endif
   99803             : 
   99804             : // postdeclarations for SgOmpNumTasksClause
   99805             : 
   99806             : /* #line 99807 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99807             : 
   99808             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
   99809             : 
   99810             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99811             : 
   99812             : 
   99813             : /* #line 99814 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99814             : 
   99815             : 
   99816             : 
   99817             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99818             : 
   99819             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
   99820             : //      This code is automatically generated for each 
   99821             : //      terminal and non-terminal within the defined 
   99822             : //      grammar.  There is a simple way to change the 
   99823             : //      code to fix bugs etc.  See the ROSE README file
   99824             : //      for directions.
   99825             : 
   99826             : // tps: (02/22/2010): Adding DLL export requirements
   99827             : #include "rosedll.h"
   99828             : 
   99829             : // predeclarations for SgOmpDetachClause
   99830             : 
   99831             : /* #line 99832 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99832             : 
   99833             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
   99834             : 
   99835             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
   99836             : 
   99837             : #if 1
   99838             : // Class Definition for SgOmpDetachClause
   99839             : class ROSE_DLL_API SgOmpDetachClause  : public SgOmpExpressionClause
   99840             :    {
   99841             :      public:
   99842             : 
   99843             : 
   99844             : /* #line 99845 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
   99845             : 
   99846             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
   99847             : // Start of memberFunctionString
   99848             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
   99849             : 
   99850             : // *** COMMON CODE SECTION BEGINS HERE ***
   99851             : 
   99852             :     public:
   99853             : 
   99854             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
   99855             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
   99856             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
   99857             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
   99858             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
   99859             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
   99860             : 
   99861             :       /*! \brief returns a string representing the class name */
   99862             :           virtual std::string class_name() const override;
   99863             : 
   99864             :       /*! \brief returns new style SageIII enum values */
   99865             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
   99866             : 
   99867             :       /*! \brief static variant value */
   99868             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
   99869             :        // static const VariantT static_variant = V_SgOmpDetachClause;
   99870             :           enum { static_variant = V_SgOmpDetachClause };
   99871             : 
   99872             :        /* the generated cast function */
   99873             :       /*! \brief Casts pointer from base class to derived class */
   99874             :           ROSE_DLL_API friend       SgOmpDetachClause* isSgOmpDetachClause(       SgNode * s );
   99875             : 
   99876             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
   99877             :           ROSE_DLL_API friend const SgOmpDetachClause* isSgOmpDetachClause( const SgNode * s );
   99878             : 
   99879             :      // ******************************************
   99880             :      // * Memory Pool / New / Delete
   99881             :      // ******************************************
   99882             : 
   99883             :      public:
   99884             :           /// \private
   99885             :           static const unsigned pool_size; //
   99886             :           /// \private
   99887             :           static std::vector<unsigned char *> pools; //
   99888             :           /// \private
   99889             :           static SgOmpDetachClause * next_node; // 
   99890             : 
   99891             :           /// \private
   99892             :           static unsigned long initializeStorageClassArray(SgOmpDetachClauseStorageClass *); //
   99893             : 
   99894             :           /// \private
   99895             :           static void clearMemoryPool(); //
   99896             :           static void deleteMemoryPool(); //
   99897             : 
   99898             :           /// \private
   99899             :           static void extendMemoryPoolForFileIO(); //
   99900             : 
   99901             :           /// \private
   99902             :           static SgOmpDetachClause * getPointerFromGlobalIndex(unsigned long); //
   99903             :           /// \private
   99904             :           static SgOmpDetachClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
   99905             : 
   99906             :           /// \private
   99907             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
   99908             :           /// \private
   99909             :           static void resetValidFreepointers(); //
   99910             :           /// \private
   99911             :           static unsigned long getNumberOfLastValidPointer(); //
   99912             : 
   99913             : 
   99914             : #if defined(INLINE_FUNCTIONS)
   99915             :       /*! \brief returns pointer to newly allocated IR node */
   99916             :           inline void *operator new (size_t size);
   99917             : #else
   99918             :       /*! \brief returns pointer to newly allocated IR node */
   99919             :           void *operator new (size_t size);
   99920             : #endif
   99921             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
   99922             :           void operator delete (void* pointer, size_t size);
   99923             : 
   99924             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
   99925           0 :           void operator delete (void* pointer)
   99926             :              {
   99927             :             // This is the generated delete operator...
   99928           0 :                SgOmpDetachClause::operator delete (pointer,sizeof(SgOmpDetachClause));
   99929             :              }
   99930             : 
   99931             :       /*! \brief Returns the total number of IR nodes of this type */
   99932             :           static size_t numberOfNodes();
   99933             : 
   99934             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
   99935             :           static size_t memoryUsage();
   99936             : 
   99937             :       // End of scope which started in IR nodes specific code 
   99938             :       /* */
   99939             : 
   99940             :       /* name Internal Functions
   99941             :           \brief Internal functions ... incomplete-documentation
   99942             : 
   99943             :           These functions have been made public as part of the design, but they are suggested for internal use 
   99944             :           or by particularly knowledgeable users for specialized tools or applications.
   99945             : 
   99946             :           \internal We could not make these private because they are required by user for special purposes. And 
   99947             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
   99948             :          
   99949             :        */
   99950             : 
   99951             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
   99952             :        // overridden in every class by *generated* implementation
   99953             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
   99954             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
   99955             :        // MS: 06/28/02 container of names of variables or container indices 
   99956             :        // used used in the traversal to access AST successor nodes
   99957             :        // overridden in every class by *generated* implementation
   99958             :       /*! \brief container of names of variables or container indices used used in the traversal
   99959             :           to access AST successor nodes overridden in every class by *generated* implementation */
   99960             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
   99961             : 
   99962             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
   99963             :        // than all the vector copies. The implementation for these functions is generated for each class.
   99964             :       /*! \brief return number of children in the traversal successor list */
   99965             :           virtual size_t get_numberOfTraversalSuccessors() override;
   99966             :       /*! \brief index-based access to traversal successors by index number */
   99967             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
   99968             :       /*! \brief index-based access to traversal successors by child node */
   99969             :           virtual size_t get_childIndex(SgNode *child) override;
   99970             : 
   99971             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
   99972             :        // MS: 08/16/2002 method for generating RTI information
   99973             :       /*! \brief return C++ Runtime-Time-Information */
   99974             :           virtual RTIReturnType roseRTI() override;
   99975             : #endif
   99976             :       /* */
   99977             : 
   99978             : 
   99979             : 
   99980             :       /* name Deprecated Functions
   99981             :           \brief Deprecated functions ... incomplete-documentation
   99982             : 
   99983             :           These functions have been deprecated from use.
   99984             :        */
   99985             :       /* */
   99986             : 
   99987             :       /*! returns a C style string (char*) representing the class name */
   99988             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
   99989             : 
   99990             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
   99991             :       // getVariant() in #if 0 block to prevent confusing Doxygen
   99992             : #if 0
   99993             :       /*! returns old style Sage II enum values */
   99994             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
   99995             :       /*! returns old style Sage II enum values */
   99996             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
   99997             : #endif
   99998             :       /* */
   99999             : 
  100000             : 
  100001             : 
  100002             : 
  100003             :      public:
  100004             :       /* name Traversal Support Functions
  100005             :           \brief Traversal support functions ... incomplete-documentation
  100006             : 
  100007             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100008             :           or by particularly knowledgable users for specialized tools or applications.
  100009             :        */
  100010             :       /* */
  100011             : 
  100012             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  100013             :        // (inferior to ROSE traversal mechanism, experimental).
  100014             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  100015             :        */
  100016             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  100017             : 
  100018             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  100019             :       /*! \brief support for the classic visitor pattern done in GoF */
  100020             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  100021             : 
  100022             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  100023             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  100024             :        */
  100025             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  100026             : 
  100027             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  100028             :        */
  100029             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  100030             : 
  100031             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  100032             :        // This traversal helps support internal tools that call static member functions.
  100033             :        // note: this function operates on the memory pools.
  100034             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  100035             :        */
  100036             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  100037             :       /* */
  100038             : 
  100039             : 
  100040             :      public:
  100041             :       /* name Memory Allocation Functions
  100042             :           \brief Memory allocations functions ... incomplete-documentation
  100043             : 
  100044             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100045             :           or by particularly knowledgable users for specialized tools or applications.
  100046             :        */
  100047             :       /* */
  100048             : 
  100049             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  100050             : 
  100051             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  100052             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  100053             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  100054             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  100055             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  100056             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  100057             :           being used with the AST File I/O mechanism.
  100058             :        */
  100059             :           virtual bool isInMemoryPool() override;
  100060             : 
  100061             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  100062             : 
  100063             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  100064             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  100065             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  100066             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  100067             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  100068             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  100069             :           being used with the AST File I/O mechanism.
  100070             :        */
  100071             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  100072             : 
  100073             :       // DQ (4/30/2006): Modified to be a const function.
  100074             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  100075             : 
  100076             :           This functions is part of general support for many possible tools to operate 
  100077             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  100078             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  100079             :           less than the set of pointers used by the AST file I/O. This is part of
  100080             :           work implemented by Andreas, and support tools such as the AST graph generation.
  100081             : 
  100082             :           \warning This function can return unexpected data members and thus the 
  100083             :                    order and the number of elements is unpredicable and subject 
  100084             :                    to change.
  100085             : 
  100086             :           \returns STL vector of pairs of SgNode* and strings
  100087             :        */
  100088             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  100089             : 
  100090             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  100091             : 
  100092             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  100093             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  100094             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  100095             : 
  100096             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  100097             :                    and subject to change.
  100098             :        */
  100099             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  100100             : 
  100101             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  100102             : 
  100103             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  100104             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  100105             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  100106             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  100107             : 
  100108             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  100109             : 
  100110             :           \returns long
  100111             :        */
  100112             :           virtual long getChildIndex( SgNode* childNode ) const override;
  100113             : 
  100114             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  100115             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  100116             :       /* \brief Constructor for use by AST File I/O Mechanism
  100117             : 
  100118             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  100119             :           which obtained via fast binary file I/O from disk.
  100120             :        */
  100121             :        // SgOmpDetachClause( SgOmpDetachClauseStorageClass& source );
  100122             : 
  100123             : 
  100124             : 
  100125             : 
  100126             : 
  100127             :  // JH (10/24/2005): methods added to support the ast file IO
  100128             :     private:
  100129             : 
  100130             :       /* name AST Memory Allocation Support Functions
  100131             :           \brief Memory allocations support....
  100132             : 
  100133             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  100134             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  100135             :           and support the AST File I/O Mechanism.
  100136             :        */
  100137             :       /* */
  100138             : 
  100139             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  100140             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  100141             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  100142             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  100143             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  100144             :           a correspinding one in the AST_FILE_IO class!
  100145             :        */
  100146             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  100147             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  100148             :       /* \brief Typedef used for low level memory access.
  100149             :        */
  100150             :        // typedef unsigned char* TestType;
  100151             : 
  100152             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  100153             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  100154             :       /* \brief Typedef used to hold memory addresses as values.
  100155             :        */
  100156             :        // typedef unsigned long  AddressType;
  100157             : 
  100158             : 
  100159             : 
  100160             :        // necessary, to have direct access to the p_freepointer and the private methods !
  100161             :       /*! \brief friend class declaration to support AST File I/O */
  100162             :           friend class AST_FILE_IO;
  100163             : 
  100164             :       /*! \brief friend class declaration to support AST File I/O */
  100165             :           friend class SgOmpDetachClauseStorageClass;
  100166             : 
  100167             :       /*! \brief friend class declaration to support AST File I/O */
  100168             :           friend class AstSpecificDataManagingClass;
  100169             : 
  100170             :       /*! \brief friend class declaration to support AST File I/O */
  100171             :           friend class AstSpecificDataManagingClassStorageClass;
  100172             :     public:
  100173             :       /*! \brief IR node constructor to support AST File I/O */
  100174             :           SgOmpDetachClause( const SgOmpDetachClauseStorageClass& source );
  100175             : 
  100176             :  // private: // JJW hack
  100177             :        /*
  100178             :           name AST Memory Allocation Support Variables
  100179             :           Memory allocations support variables 
  100180             : 
  100181             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  100182             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  100183             :           and support the AST File I/O Mechanism.
  100184             :        */
  100185             :       /* */
  100186             : 
  100187             :     public:
  100188             : 
  100189             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  100190             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  100191             :       // virtual SgNode* addRegExpAttribute();
  100192             :       /*! \brief Support for AST matching using regular expression.
  100193             : 
  100194             :           This support is incomplete and the subject of current research to define 
  100195             :           RegEx trees to support inexact matching.
  100196             :        */
  100197             :           SgOmpDetachClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  100198             : 
  100199             : // *** COMMON CODE SECTION ENDS HERE ***
  100200             : 
  100201             : 
  100202             : // End of memberFunctionString
  100203             : // Start of memberFunctionString
  100204             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  100205             : 
  100206             :      // the generated cast function
  100207             :      // friend ROSE_DLL_API SgOmpDetachClause* isSgOmpDetachClause ( SgNode* s );
  100208             : 
  100209             :           typedef SgOmpExpressionClause base_node_type;
  100210             : 
  100211             : 
  100212             : // End of memberFunctionString
  100213             : 
  100214             : 
  100215             :      public: 
  100216             :          virtual ~SgOmpDetachClause();
  100217             : 
  100218             : 
  100219             :      public: 
  100220             :          SgOmpDetachClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  100221             :          SgOmpDetachClause(SgExpression* expression); 
  100222             : 
  100223             :     protected:
  100224             : 
  100225             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDetachClause>;
  100226             : 
  100227             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100228             : 
  100229             : 
  100230             :    };
  100231             : #endif
  100232             : 
  100233             : // postdeclarations for SgOmpDetachClause
  100234             : 
  100235             : /* #line 100236 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100236             : 
  100237             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  100238             : 
  100239             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100240             : 
  100241             : 
  100242             : /* #line 100243 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100243             : 
  100244             : 
  100245             : 
  100246             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100247             : 
  100248             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  100249             : //      This code is automatically generated for each 
  100250             : //      terminal and non-terminal within the defined 
  100251             : //      grammar.  There is a simple way to change the 
  100252             : //      code to fix bugs etc.  See the ROSE README file
  100253             : //      for directions.
  100254             : 
  100255             : // tps: (02/22/2010): Adding DLL export requirements
  100256             : #include "rosedll.h"
  100257             : 
  100258             : // predeclarations for SgOmpSafelenClause
  100259             : 
  100260             : /* #line 100261 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100261             : 
  100262             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  100263             : 
  100264             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100265             : 
  100266             : #if 1
  100267             : // Class Definition for SgOmpSafelenClause
  100268             : class ROSE_DLL_API SgOmpSafelenClause  : public SgOmpExpressionClause
  100269             :    {
  100270             :      public:
  100271             : 
  100272             : 
  100273             : /* #line 100274 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100274             : 
  100275             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  100276             : // Start of memberFunctionString
  100277             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  100278             : 
  100279             : // *** COMMON CODE SECTION BEGINS HERE ***
  100280             : 
  100281             :     public:
  100282             : 
  100283             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  100284             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  100285             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  100286             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  100287             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  100288             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  100289             : 
  100290             :       /*! \brief returns a string representing the class name */
  100291             :           virtual std::string class_name() const override;
  100292             : 
  100293             :       /*! \brief returns new style SageIII enum values */
  100294             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  100295             : 
  100296             :       /*! \brief static variant value */
  100297             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  100298             :        // static const VariantT static_variant = V_SgOmpSafelenClause;
  100299             :           enum { static_variant = V_SgOmpSafelenClause };
  100300             : 
  100301             :        /* the generated cast function */
  100302             :       /*! \brief Casts pointer from base class to derived class */
  100303             :           ROSE_DLL_API friend       SgOmpSafelenClause* isSgOmpSafelenClause(       SgNode * s );
  100304             : 
  100305             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  100306             :           ROSE_DLL_API friend const SgOmpSafelenClause* isSgOmpSafelenClause( const SgNode * s );
  100307             : 
  100308             :      // ******************************************
  100309             :      // * Memory Pool / New / Delete
  100310             :      // ******************************************
  100311             : 
  100312             :      public:
  100313             :           /// \private
  100314             :           static const unsigned pool_size; //
  100315             :           /// \private
  100316             :           static std::vector<unsigned char *> pools; //
  100317             :           /// \private
  100318             :           static SgOmpSafelenClause * next_node; // 
  100319             : 
  100320             :           /// \private
  100321             :           static unsigned long initializeStorageClassArray(SgOmpSafelenClauseStorageClass *); //
  100322             : 
  100323             :           /// \private
  100324             :           static void clearMemoryPool(); //
  100325             :           static void deleteMemoryPool(); //
  100326             : 
  100327             :           /// \private
  100328             :           static void extendMemoryPoolForFileIO(); //
  100329             : 
  100330             :           /// \private
  100331             :           static SgOmpSafelenClause * getPointerFromGlobalIndex(unsigned long); //
  100332             :           /// \private
  100333             :           static SgOmpSafelenClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  100334             : 
  100335             :           /// \private
  100336             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  100337             :           /// \private
  100338             :           static void resetValidFreepointers(); //
  100339             :           /// \private
  100340             :           static unsigned long getNumberOfLastValidPointer(); //
  100341             : 
  100342             : 
  100343             : #if defined(INLINE_FUNCTIONS)
  100344             :       /*! \brief returns pointer to newly allocated IR node */
  100345             :           inline void *operator new (size_t size);
  100346             : #else
  100347             :       /*! \brief returns pointer to newly allocated IR node */
  100348             :           void *operator new (size_t size);
  100349             : #endif
  100350             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  100351             :           void operator delete (void* pointer, size_t size);
  100352             : 
  100353             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  100354           0 :           void operator delete (void* pointer)
  100355             :              {
  100356             :             // This is the generated delete operator...
  100357           0 :                SgOmpSafelenClause::operator delete (pointer,sizeof(SgOmpSafelenClause));
  100358             :              }
  100359             : 
  100360             :       /*! \brief Returns the total number of IR nodes of this type */
  100361             :           static size_t numberOfNodes();
  100362             : 
  100363             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  100364             :           static size_t memoryUsage();
  100365             : 
  100366             :       // End of scope which started in IR nodes specific code 
  100367             :       /* */
  100368             : 
  100369             :       /* name Internal Functions
  100370             :           \brief Internal functions ... incomplete-documentation
  100371             : 
  100372             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100373             :           or by particularly knowledgeable users for specialized tools or applications.
  100374             : 
  100375             :           \internal We could not make these private because they are required by user for special purposes. And 
  100376             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  100377             :          
  100378             :        */
  100379             : 
  100380             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  100381             :        // overridden in every class by *generated* implementation
  100382             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  100383             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  100384             :        // MS: 06/28/02 container of names of variables or container indices 
  100385             :        // used used in the traversal to access AST successor nodes
  100386             :        // overridden in every class by *generated* implementation
  100387             :       /*! \brief container of names of variables or container indices used used in the traversal
  100388             :           to access AST successor nodes overridden in every class by *generated* implementation */
  100389             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  100390             : 
  100391             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  100392             :        // than all the vector copies. The implementation for these functions is generated for each class.
  100393             :       /*! \brief return number of children in the traversal successor list */
  100394             :           virtual size_t get_numberOfTraversalSuccessors() override;
  100395             :       /*! \brief index-based access to traversal successors by index number */
  100396             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  100397             :       /*! \brief index-based access to traversal successors by child node */
  100398             :           virtual size_t get_childIndex(SgNode *child) override;
  100399             : 
  100400             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  100401             :        // MS: 08/16/2002 method for generating RTI information
  100402             :       /*! \brief return C++ Runtime-Time-Information */
  100403             :           virtual RTIReturnType roseRTI() override;
  100404             : #endif
  100405             :       /* */
  100406             : 
  100407             : 
  100408             : 
  100409             :       /* name Deprecated Functions
  100410             :           \brief Deprecated functions ... incomplete-documentation
  100411             : 
  100412             :           These functions have been deprecated from use.
  100413             :        */
  100414             :       /* */
  100415             : 
  100416             :       /*! returns a C style string (char*) representing the class name */
  100417             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  100418             : 
  100419             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  100420             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  100421             : #if 0
  100422             :       /*! returns old style Sage II enum values */
  100423             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  100424             :       /*! returns old style Sage II enum values */
  100425             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  100426             : #endif
  100427             :       /* */
  100428             : 
  100429             : 
  100430             : 
  100431             : 
  100432             :      public:
  100433             :       /* name Traversal Support Functions
  100434             :           \brief Traversal support functions ... incomplete-documentation
  100435             : 
  100436             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100437             :           or by particularly knowledgable users for specialized tools or applications.
  100438             :        */
  100439             :       /* */
  100440             : 
  100441             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  100442             :        // (inferior to ROSE traversal mechanism, experimental).
  100443             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  100444             :        */
  100445             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  100446             : 
  100447             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  100448             :       /*! \brief support for the classic visitor pattern done in GoF */
  100449             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  100450             : 
  100451             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  100452             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  100453             :        */
  100454             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  100455             : 
  100456             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  100457             :        */
  100458             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  100459             : 
  100460             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  100461             :        // This traversal helps support internal tools that call static member functions.
  100462             :        // note: this function operates on the memory pools.
  100463             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  100464             :        */
  100465             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  100466             :       /* */
  100467             : 
  100468             : 
  100469             :      public:
  100470             :       /* name Memory Allocation Functions
  100471             :           \brief Memory allocations functions ... incomplete-documentation
  100472             : 
  100473             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100474             :           or by particularly knowledgable users for specialized tools or applications.
  100475             :        */
  100476             :       /* */
  100477             : 
  100478             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  100479             : 
  100480             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  100481             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  100482             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  100483             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  100484             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  100485             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  100486             :           being used with the AST File I/O mechanism.
  100487             :        */
  100488             :           virtual bool isInMemoryPool() override;
  100489             : 
  100490             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  100491             : 
  100492             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  100493             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  100494             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  100495             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  100496             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  100497             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  100498             :           being used with the AST File I/O mechanism.
  100499             :        */
  100500             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  100501             : 
  100502             :       // DQ (4/30/2006): Modified to be a const function.
  100503             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  100504             : 
  100505             :           This functions is part of general support for many possible tools to operate 
  100506             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  100507             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  100508             :           less than the set of pointers used by the AST file I/O. This is part of
  100509             :           work implemented by Andreas, and support tools such as the AST graph generation.
  100510             : 
  100511             :           \warning This function can return unexpected data members and thus the 
  100512             :                    order and the number of elements is unpredicable and subject 
  100513             :                    to change.
  100514             : 
  100515             :           \returns STL vector of pairs of SgNode* and strings
  100516             :        */
  100517             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  100518             : 
  100519             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  100520             : 
  100521             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  100522             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  100523             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  100524             : 
  100525             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  100526             :                    and subject to change.
  100527             :        */
  100528             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  100529             : 
  100530             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  100531             : 
  100532             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  100533             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  100534             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  100535             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  100536             : 
  100537             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  100538             : 
  100539             :           \returns long
  100540             :        */
  100541             :           virtual long getChildIndex( SgNode* childNode ) const override;
  100542             : 
  100543             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  100544             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  100545             :       /* \brief Constructor for use by AST File I/O Mechanism
  100546             : 
  100547             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  100548             :           which obtained via fast binary file I/O from disk.
  100549             :        */
  100550             :        // SgOmpSafelenClause( SgOmpSafelenClauseStorageClass& source );
  100551             : 
  100552             : 
  100553             : 
  100554             : 
  100555             : 
  100556             :  // JH (10/24/2005): methods added to support the ast file IO
  100557             :     private:
  100558             : 
  100559             :       /* name AST Memory Allocation Support Functions
  100560             :           \brief Memory allocations support....
  100561             : 
  100562             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  100563             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  100564             :           and support the AST File I/O Mechanism.
  100565             :        */
  100566             :       /* */
  100567             : 
  100568             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  100569             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  100570             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  100571             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  100572             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  100573             :           a correspinding one in the AST_FILE_IO class!
  100574             :        */
  100575             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  100576             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  100577             :       /* \brief Typedef used for low level memory access.
  100578             :        */
  100579             :        // typedef unsigned char* TestType;
  100580             : 
  100581             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  100582             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  100583             :       /* \brief Typedef used to hold memory addresses as values.
  100584             :        */
  100585             :        // typedef unsigned long  AddressType;
  100586             : 
  100587             : 
  100588             : 
  100589             :        // necessary, to have direct access to the p_freepointer and the private methods !
  100590             :       /*! \brief friend class declaration to support AST File I/O */
  100591             :           friend class AST_FILE_IO;
  100592             : 
  100593             :       /*! \brief friend class declaration to support AST File I/O */
  100594             :           friend class SgOmpSafelenClauseStorageClass;
  100595             : 
  100596             :       /*! \brief friend class declaration to support AST File I/O */
  100597             :           friend class AstSpecificDataManagingClass;
  100598             : 
  100599             :       /*! \brief friend class declaration to support AST File I/O */
  100600             :           friend class AstSpecificDataManagingClassStorageClass;
  100601             :     public:
  100602             :       /*! \brief IR node constructor to support AST File I/O */
  100603             :           SgOmpSafelenClause( const SgOmpSafelenClauseStorageClass& source );
  100604             : 
  100605             :  // private: // JJW hack
  100606             :        /*
  100607             :           name AST Memory Allocation Support Variables
  100608             :           Memory allocations support variables 
  100609             : 
  100610             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  100611             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  100612             :           and support the AST File I/O Mechanism.
  100613             :        */
  100614             :       /* */
  100615             : 
  100616             :     public:
  100617             : 
  100618             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  100619             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  100620             :       // virtual SgNode* addRegExpAttribute();
  100621             :       /*! \brief Support for AST matching using regular expression.
  100622             : 
  100623             :           This support is incomplete and the subject of current research to define 
  100624             :           RegEx trees to support inexact matching.
  100625             :        */
  100626             :           SgOmpSafelenClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  100627             : 
  100628             : // *** COMMON CODE SECTION ENDS HERE ***
  100629             : 
  100630             : 
  100631             : // End of memberFunctionString
  100632             : // Start of memberFunctionString
  100633             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  100634             : 
  100635             :      // the generated cast function
  100636             :      // friend ROSE_DLL_API SgOmpSafelenClause* isSgOmpSafelenClause ( SgNode* s );
  100637             : 
  100638             :           typedef SgOmpExpressionClause base_node_type;
  100639             : 
  100640             : 
  100641             : // End of memberFunctionString
  100642             : 
  100643             : 
  100644             :      public: 
  100645             :          virtual ~SgOmpSafelenClause();
  100646             : 
  100647             : 
  100648             :      public: 
  100649             :          SgOmpSafelenClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  100650             :          SgOmpSafelenClause(SgExpression* expression); 
  100651             : 
  100652             :     protected:
  100653             : 
  100654             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSafelenClause>;
  100655             : 
  100656             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100657             : 
  100658             : 
  100659             :    };
  100660             : #endif
  100661             : 
  100662             : // postdeclarations for SgOmpSafelenClause
  100663             : 
  100664             : /* #line 100665 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100665             : 
  100666             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  100667             : 
  100668             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100669             : 
  100670             : 
  100671             : /* #line 100672 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100672             : 
  100673             : 
  100674             : 
  100675             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100676             : 
  100677             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  100678             : //      This code is automatically generated for each 
  100679             : //      terminal and non-terminal within the defined 
  100680             : //      grammar.  There is a simple way to change the 
  100681             : //      code to fix bugs etc.  See the ROSE README file
  100682             : //      for directions.
  100683             : 
  100684             : // tps: (02/22/2010): Adding DLL export requirements
  100685             : #include "rosedll.h"
  100686             : 
  100687             : // predeclarations for SgOmpSimdlenClause
  100688             : 
  100689             : /* #line 100690 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100690             : 
  100691             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  100692             : 
  100693             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  100694             : 
  100695             : #if 1
  100696             : // Class Definition for SgOmpSimdlenClause
  100697             : class ROSE_DLL_API SgOmpSimdlenClause  : public SgOmpExpressionClause
  100698             :    {
  100699             :      public:
  100700             : 
  100701             : 
  100702             : /* #line 100703 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  100703             : 
  100704             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  100705             : // Start of memberFunctionString
  100706             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  100707             : 
  100708             : // *** COMMON CODE SECTION BEGINS HERE ***
  100709             : 
  100710             :     public:
  100711             : 
  100712             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  100713             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  100714             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  100715             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  100716             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  100717             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  100718             : 
  100719             :       /*! \brief returns a string representing the class name */
  100720             :           virtual std::string class_name() const override;
  100721             : 
  100722             :       /*! \brief returns new style SageIII enum values */
  100723             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  100724             : 
  100725             :       /*! \brief static variant value */
  100726             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  100727             :        // static const VariantT static_variant = V_SgOmpSimdlenClause;
  100728             :           enum { static_variant = V_SgOmpSimdlenClause };
  100729             : 
  100730             :        /* the generated cast function */
  100731             :       /*! \brief Casts pointer from base class to derived class */
  100732             :           ROSE_DLL_API friend       SgOmpSimdlenClause* isSgOmpSimdlenClause(       SgNode * s );
  100733             : 
  100734             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  100735             :           ROSE_DLL_API friend const SgOmpSimdlenClause* isSgOmpSimdlenClause( const SgNode * s );
  100736             : 
  100737             :      // ******************************************
  100738             :      // * Memory Pool / New / Delete
  100739             :      // ******************************************
  100740             : 
  100741             :      public:
  100742             :           /// \private
  100743             :           static const unsigned pool_size; //
  100744             :           /// \private
  100745             :           static std::vector<unsigned char *> pools; //
  100746             :           /// \private
  100747             :           static SgOmpSimdlenClause * next_node; // 
  100748             : 
  100749             :           /// \private
  100750             :           static unsigned long initializeStorageClassArray(SgOmpSimdlenClauseStorageClass *); //
  100751             : 
  100752             :           /// \private
  100753             :           static void clearMemoryPool(); //
  100754             :           static void deleteMemoryPool(); //
  100755             : 
  100756             :           /// \private
  100757             :           static void extendMemoryPoolForFileIO(); //
  100758             : 
  100759             :           /// \private
  100760             :           static SgOmpSimdlenClause * getPointerFromGlobalIndex(unsigned long); //
  100761             :           /// \private
  100762             :           static SgOmpSimdlenClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  100763             : 
  100764             :           /// \private
  100765             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  100766             :           /// \private
  100767             :           static void resetValidFreepointers(); //
  100768             :           /// \private
  100769             :           static unsigned long getNumberOfLastValidPointer(); //
  100770             : 
  100771             : 
  100772             : #if defined(INLINE_FUNCTIONS)
  100773             :       /*! \brief returns pointer to newly allocated IR node */
  100774             :           inline void *operator new (size_t size);
  100775             : #else
  100776             :       /*! \brief returns pointer to newly allocated IR node */
  100777             :           void *operator new (size_t size);
  100778             : #endif
  100779             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  100780             :           void operator delete (void* pointer, size_t size);
  100781             : 
  100782             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  100783           0 :           void operator delete (void* pointer)
  100784             :              {
  100785             :             // This is the generated delete operator...
  100786           0 :                SgOmpSimdlenClause::operator delete (pointer,sizeof(SgOmpSimdlenClause));
  100787             :              }
  100788             : 
  100789             :       /*! \brief Returns the total number of IR nodes of this type */
  100790             :           static size_t numberOfNodes();
  100791             : 
  100792             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  100793             :           static size_t memoryUsage();
  100794             : 
  100795             :       // End of scope which started in IR nodes specific code 
  100796             :       /* */
  100797             : 
  100798             :       /* name Internal Functions
  100799             :           \brief Internal functions ... incomplete-documentation
  100800             : 
  100801             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100802             :           or by particularly knowledgeable users for specialized tools or applications.
  100803             : 
  100804             :           \internal We could not make these private because they are required by user for special purposes. And 
  100805             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  100806             :          
  100807             :        */
  100808             : 
  100809             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  100810             :        // overridden in every class by *generated* implementation
  100811             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  100812             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  100813             :        // MS: 06/28/02 container of names of variables or container indices 
  100814             :        // used used in the traversal to access AST successor nodes
  100815             :        // overridden in every class by *generated* implementation
  100816             :       /*! \brief container of names of variables or container indices used used in the traversal
  100817             :           to access AST successor nodes overridden in every class by *generated* implementation */
  100818             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  100819             : 
  100820             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  100821             :        // than all the vector copies. The implementation for these functions is generated for each class.
  100822             :       /*! \brief return number of children in the traversal successor list */
  100823             :           virtual size_t get_numberOfTraversalSuccessors() override;
  100824             :       /*! \brief index-based access to traversal successors by index number */
  100825             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  100826             :       /*! \brief index-based access to traversal successors by child node */
  100827             :           virtual size_t get_childIndex(SgNode *child) override;
  100828             : 
  100829             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  100830             :        // MS: 08/16/2002 method for generating RTI information
  100831             :       /*! \brief return C++ Runtime-Time-Information */
  100832             :           virtual RTIReturnType roseRTI() override;
  100833             : #endif
  100834             :       /* */
  100835             : 
  100836             : 
  100837             : 
  100838             :       /* name Deprecated Functions
  100839             :           \brief Deprecated functions ... incomplete-documentation
  100840             : 
  100841             :           These functions have been deprecated from use.
  100842             :        */
  100843             :       /* */
  100844             : 
  100845             :       /*! returns a C style string (char*) representing the class name */
  100846             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  100847             : 
  100848             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  100849             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  100850             : #if 0
  100851             :       /*! returns old style Sage II enum values */
  100852             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  100853             :       /*! returns old style Sage II enum values */
  100854             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  100855             : #endif
  100856             :       /* */
  100857             : 
  100858             : 
  100859             : 
  100860             : 
  100861             :      public:
  100862             :       /* name Traversal Support Functions
  100863             :           \brief Traversal support functions ... incomplete-documentation
  100864             : 
  100865             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100866             :           or by particularly knowledgable users for specialized tools or applications.
  100867             :        */
  100868             :       /* */
  100869             : 
  100870             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  100871             :        // (inferior to ROSE traversal mechanism, experimental).
  100872             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  100873             :        */
  100874             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  100875             : 
  100876             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  100877             :       /*! \brief support for the classic visitor pattern done in GoF */
  100878             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  100879             : 
  100880             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  100881             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  100882             :        */
  100883             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  100884             : 
  100885             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  100886             :        */
  100887             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  100888             : 
  100889             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  100890             :        // This traversal helps support internal tools that call static member functions.
  100891             :        // note: this function operates on the memory pools.
  100892             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  100893             :        */
  100894             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  100895             :       /* */
  100896             : 
  100897             : 
  100898             :      public:
  100899             :       /* name Memory Allocation Functions
  100900             :           \brief Memory allocations functions ... incomplete-documentation
  100901             : 
  100902             :           These functions have been made public as part of the design, but they are suggested for internal use 
  100903             :           or by particularly knowledgable users for specialized tools or applications.
  100904             :        */
  100905             :       /* */
  100906             : 
  100907             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  100908             : 
  100909             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  100910             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  100911             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  100912             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  100913             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  100914             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  100915             :           being used with the AST File I/O mechanism.
  100916             :        */
  100917             :           virtual bool isInMemoryPool() override;
  100918             : 
  100919             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  100920             : 
  100921             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  100922             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  100923             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  100924             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  100925             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  100926             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  100927             :           being used with the AST File I/O mechanism.
  100928             :        */
  100929             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  100930             : 
  100931             :       // DQ (4/30/2006): Modified to be a const function.
  100932             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  100933             : 
  100934             :           This functions is part of general support for many possible tools to operate 
  100935             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  100936             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  100937             :           less than the set of pointers used by the AST file I/O. This is part of
  100938             :           work implemented by Andreas, and support tools such as the AST graph generation.
  100939             : 
  100940             :           \warning This function can return unexpected data members and thus the 
  100941             :                    order and the number of elements is unpredicable and subject 
  100942             :                    to change.
  100943             : 
  100944             :           \returns STL vector of pairs of SgNode* and strings
  100945             :        */
  100946             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  100947             : 
  100948             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  100949             : 
  100950             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  100951             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  100952             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  100953             : 
  100954             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  100955             :                    and subject to change.
  100956             :        */
  100957             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  100958             : 
  100959             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  100960             : 
  100961             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  100962             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  100963             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  100964             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  100965             : 
  100966             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  100967             : 
  100968             :           \returns long
  100969             :        */
  100970             :           virtual long getChildIndex( SgNode* childNode ) const override;
  100971             : 
  100972             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  100973             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  100974             :       /* \brief Constructor for use by AST File I/O Mechanism
  100975             : 
  100976             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  100977             :           which obtained via fast binary file I/O from disk.
  100978             :        */
  100979             :        // SgOmpSimdlenClause( SgOmpSimdlenClauseStorageClass& source );
  100980             : 
  100981             : 
  100982             : 
  100983             : 
  100984             : 
  100985             :  // JH (10/24/2005): methods added to support the ast file IO
  100986             :     private:
  100987             : 
  100988             :       /* name AST Memory Allocation Support Functions
  100989             :           \brief Memory allocations support....
  100990             : 
  100991             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  100992             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  100993             :           and support the AST File I/O Mechanism.
  100994             :        */
  100995             :       /* */
  100996             : 
  100997             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  100998             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  100999             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  101000             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  101001             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  101002             :           a correspinding one in the AST_FILE_IO class!
  101003             :        */
  101004             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  101005             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101006             :       /* \brief Typedef used for low level memory access.
  101007             :        */
  101008             :        // typedef unsigned char* TestType;
  101009             : 
  101010             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  101011             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101012             :       /* \brief Typedef used to hold memory addresses as values.
  101013             :        */
  101014             :        // typedef unsigned long  AddressType;
  101015             : 
  101016             : 
  101017             : 
  101018             :        // necessary, to have direct access to the p_freepointer and the private methods !
  101019             :       /*! \brief friend class declaration to support AST File I/O */
  101020             :           friend class AST_FILE_IO;
  101021             : 
  101022             :       /*! \brief friend class declaration to support AST File I/O */
  101023             :           friend class SgOmpSimdlenClauseStorageClass;
  101024             : 
  101025             :       /*! \brief friend class declaration to support AST File I/O */
  101026             :           friend class AstSpecificDataManagingClass;
  101027             : 
  101028             :       /*! \brief friend class declaration to support AST File I/O */
  101029             :           friend class AstSpecificDataManagingClassStorageClass;
  101030             :     public:
  101031             :       /*! \brief IR node constructor to support AST File I/O */
  101032             :           SgOmpSimdlenClause( const SgOmpSimdlenClauseStorageClass& source );
  101033             : 
  101034             :  // private: // JJW hack
  101035             :        /*
  101036             :           name AST Memory Allocation Support Variables
  101037             :           Memory allocations support variables 
  101038             : 
  101039             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  101040             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  101041             :           and support the AST File I/O Mechanism.
  101042             :        */
  101043             :       /* */
  101044             : 
  101045             :     public:
  101046             : 
  101047             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  101048             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  101049             :       // virtual SgNode* addRegExpAttribute();
  101050             :       /*! \brief Support for AST matching using regular expression.
  101051             : 
  101052             :           This support is incomplete and the subject of current research to define 
  101053             :           RegEx trees to support inexact matching.
  101054             :        */
  101055             :           SgOmpSimdlenClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  101056             : 
  101057             : // *** COMMON CODE SECTION ENDS HERE ***
  101058             : 
  101059             : 
  101060             : // End of memberFunctionString
  101061             : // Start of memberFunctionString
  101062             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  101063             : 
  101064             :      // the generated cast function
  101065             :      // friend ROSE_DLL_API SgOmpSimdlenClause* isSgOmpSimdlenClause ( SgNode* s );
  101066             : 
  101067             :           typedef SgOmpExpressionClause base_node_type;
  101068             : 
  101069             : 
  101070             : // End of memberFunctionString
  101071             : 
  101072             : 
  101073             :      public: 
  101074             :          virtual ~SgOmpSimdlenClause();
  101075             : 
  101076             : 
  101077             :      public: 
  101078             :          SgOmpSimdlenClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  101079             :          SgOmpSimdlenClause(SgExpression* expression); 
  101080             : 
  101081             :     protected:
  101082             : 
  101083             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSimdlenClause>;
  101084             : 
  101085             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101086             : 
  101087             : 
  101088             :    };
  101089             : #endif
  101090             : 
  101091             : // postdeclarations for SgOmpSimdlenClause
  101092             : 
  101093             : /* #line 101094 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101094             : 
  101095             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  101096             : 
  101097             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101098             : 
  101099             : 
  101100             : /* #line 101101 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101101             : 
  101102             : 
  101103             : 
  101104             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101105             : 
  101106             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  101107             : //      This code is automatically generated for each 
  101108             : //      terminal and non-terminal within the defined 
  101109             : //      grammar.  There is a simple way to change the 
  101110             : //      code to fix bugs etc.  See the ROSE README file
  101111             : //      for directions.
  101112             : 
  101113             : // tps: (02/22/2010): Adding DLL export requirements
  101114             : #include "rosedll.h"
  101115             : 
  101116             : // predeclarations for SgOmpFinalClause
  101117             : 
  101118             : /* #line 101119 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101119             : 
  101120             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  101121             : 
  101122             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101123             : 
  101124             : #if 1
  101125             : // Class Definition for SgOmpFinalClause
  101126             : class ROSE_DLL_API SgOmpFinalClause  : public SgOmpExpressionClause
  101127             :    {
  101128             :      public:
  101129             : 
  101130             : 
  101131             : /* #line 101132 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101132             : 
  101133             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  101134             : // Start of memberFunctionString
  101135             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  101136             : 
  101137             : // *** COMMON CODE SECTION BEGINS HERE ***
  101138             : 
  101139             :     public:
  101140             : 
  101141             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  101142             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  101143             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  101144             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  101145             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  101146             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  101147             : 
  101148             :       /*! \brief returns a string representing the class name */
  101149             :           virtual std::string class_name() const override;
  101150             : 
  101151             :       /*! \brief returns new style SageIII enum values */
  101152             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  101153             : 
  101154             :       /*! \brief static variant value */
  101155             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  101156             :        // static const VariantT static_variant = V_SgOmpFinalClause;
  101157             :           enum { static_variant = V_SgOmpFinalClause };
  101158             : 
  101159             :        /* the generated cast function */
  101160             :       /*! \brief Casts pointer from base class to derived class */
  101161             :           ROSE_DLL_API friend       SgOmpFinalClause* isSgOmpFinalClause(       SgNode * s );
  101162             : 
  101163             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  101164             :           ROSE_DLL_API friend const SgOmpFinalClause* isSgOmpFinalClause( const SgNode * s );
  101165             : 
  101166             :      // ******************************************
  101167             :      // * Memory Pool / New / Delete
  101168             :      // ******************************************
  101169             : 
  101170             :      public:
  101171             :           /// \private
  101172             :           static const unsigned pool_size; //
  101173             :           /// \private
  101174             :           static std::vector<unsigned char *> pools; //
  101175             :           /// \private
  101176             :           static SgOmpFinalClause * next_node; // 
  101177             : 
  101178             :           /// \private
  101179             :           static unsigned long initializeStorageClassArray(SgOmpFinalClauseStorageClass *); //
  101180             : 
  101181             :           /// \private
  101182             :           static void clearMemoryPool(); //
  101183             :           static void deleteMemoryPool(); //
  101184             : 
  101185             :           /// \private
  101186             :           static void extendMemoryPoolForFileIO(); //
  101187             : 
  101188             :           /// \private
  101189             :           static SgOmpFinalClause * getPointerFromGlobalIndex(unsigned long); //
  101190             :           /// \private
  101191             :           static SgOmpFinalClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  101192             : 
  101193             :           /// \private
  101194             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  101195             :           /// \private
  101196             :           static void resetValidFreepointers(); //
  101197             :           /// \private
  101198             :           static unsigned long getNumberOfLastValidPointer(); //
  101199             : 
  101200             : 
  101201             : #if defined(INLINE_FUNCTIONS)
  101202             :       /*! \brief returns pointer to newly allocated IR node */
  101203             :           inline void *operator new (size_t size);
  101204             : #else
  101205             :       /*! \brief returns pointer to newly allocated IR node */
  101206             :           void *operator new (size_t size);
  101207             : #endif
  101208             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  101209             :           void operator delete (void* pointer, size_t size);
  101210             : 
  101211             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  101212           0 :           void operator delete (void* pointer)
  101213             :              {
  101214             :             // This is the generated delete operator...
  101215           0 :                SgOmpFinalClause::operator delete (pointer,sizeof(SgOmpFinalClause));
  101216             :              }
  101217             : 
  101218             :       /*! \brief Returns the total number of IR nodes of this type */
  101219             :           static size_t numberOfNodes();
  101220             : 
  101221             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  101222             :           static size_t memoryUsage();
  101223             : 
  101224             :       // End of scope which started in IR nodes specific code 
  101225             :       /* */
  101226             : 
  101227             :       /* name Internal Functions
  101228             :           \brief Internal functions ... incomplete-documentation
  101229             : 
  101230             :           These functions have been made public as part of the design, but they are suggested for internal use 
  101231             :           or by particularly knowledgeable users for specialized tools or applications.
  101232             : 
  101233             :           \internal We could not make these private because they are required by user for special purposes. And 
  101234             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  101235             :          
  101236             :        */
  101237             : 
  101238             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  101239             :        // overridden in every class by *generated* implementation
  101240             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  101241             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  101242             :        // MS: 06/28/02 container of names of variables or container indices 
  101243             :        // used used in the traversal to access AST successor nodes
  101244             :        // overridden in every class by *generated* implementation
  101245             :       /*! \brief container of names of variables or container indices used used in the traversal
  101246             :           to access AST successor nodes overridden in every class by *generated* implementation */
  101247             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  101248             : 
  101249             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  101250             :        // than all the vector copies. The implementation for these functions is generated for each class.
  101251             :       /*! \brief return number of children in the traversal successor list */
  101252             :           virtual size_t get_numberOfTraversalSuccessors() override;
  101253             :       /*! \brief index-based access to traversal successors by index number */
  101254             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  101255             :       /*! \brief index-based access to traversal successors by child node */
  101256             :           virtual size_t get_childIndex(SgNode *child) override;
  101257             : 
  101258             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  101259             :        // MS: 08/16/2002 method for generating RTI information
  101260             :       /*! \brief return C++ Runtime-Time-Information */
  101261             :           virtual RTIReturnType roseRTI() override;
  101262             : #endif
  101263             :       /* */
  101264             : 
  101265             : 
  101266             : 
  101267             :       /* name Deprecated Functions
  101268             :           \brief Deprecated functions ... incomplete-documentation
  101269             : 
  101270             :           These functions have been deprecated from use.
  101271             :        */
  101272             :       /* */
  101273             : 
  101274             :       /*! returns a C style string (char*) representing the class name */
  101275             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  101276             : 
  101277             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  101278             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  101279             : #if 0
  101280             :       /*! returns old style Sage II enum values */
  101281             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  101282             :       /*! returns old style Sage II enum values */
  101283             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  101284             : #endif
  101285             :       /* */
  101286             : 
  101287             : 
  101288             : 
  101289             : 
  101290             :      public:
  101291             :       /* name Traversal Support Functions
  101292             :           \brief Traversal support functions ... incomplete-documentation
  101293             : 
  101294             :           These functions have been made public as part of the design, but they are suggested for internal use 
  101295             :           or by particularly knowledgable users for specialized tools or applications.
  101296             :        */
  101297             :       /* */
  101298             : 
  101299             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  101300             :        // (inferior to ROSE traversal mechanism, experimental).
  101301             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  101302             :        */
  101303             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  101304             : 
  101305             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  101306             :       /*! \brief support for the classic visitor pattern done in GoF */
  101307             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  101308             : 
  101309             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  101310             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  101311             :        */
  101312             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  101313             : 
  101314             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  101315             :        */
  101316             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  101317             : 
  101318             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  101319             :        // This traversal helps support internal tools that call static member functions.
  101320             :        // note: this function operates on the memory pools.
  101321             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  101322             :        */
  101323             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  101324             :       /* */
  101325             : 
  101326             : 
  101327             :      public:
  101328             :       /* name Memory Allocation Functions
  101329             :           \brief Memory allocations functions ... incomplete-documentation
  101330             : 
  101331             :           These functions have been made public as part of the design, but they are suggested for internal use 
  101332             :           or by particularly knowledgable users for specialized tools or applications.
  101333             :        */
  101334             :       /* */
  101335             : 
  101336             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  101337             : 
  101338             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  101339             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  101340             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  101341             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  101342             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  101343             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  101344             :           being used with the AST File I/O mechanism.
  101345             :        */
  101346             :           virtual bool isInMemoryPool() override;
  101347             : 
  101348             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  101349             : 
  101350             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  101351             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  101352             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  101353             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  101354             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  101355             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  101356             :           being used with the AST File I/O mechanism.
  101357             :        */
  101358             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  101359             : 
  101360             :       // DQ (4/30/2006): Modified to be a const function.
  101361             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  101362             : 
  101363             :           This functions is part of general support for many possible tools to operate 
  101364             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  101365             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  101366             :           less than the set of pointers used by the AST file I/O. This is part of
  101367             :           work implemented by Andreas, and support tools such as the AST graph generation.
  101368             : 
  101369             :           \warning This function can return unexpected data members and thus the 
  101370             :                    order and the number of elements is unpredicable and subject 
  101371             :                    to change.
  101372             : 
  101373             :           \returns STL vector of pairs of SgNode* and strings
  101374             :        */
  101375             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  101376             : 
  101377             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  101378             : 
  101379             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  101380             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  101381             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  101382             : 
  101383             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  101384             :                    and subject to change.
  101385             :        */
  101386             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  101387             : 
  101388             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  101389             : 
  101390             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  101391             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  101392             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  101393             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  101394             : 
  101395             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  101396             : 
  101397             :           \returns long
  101398             :        */
  101399             :           virtual long getChildIndex( SgNode* childNode ) const override;
  101400             : 
  101401             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  101402             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101403             :       /* \brief Constructor for use by AST File I/O Mechanism
  101404             : 
  101405             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  101406             :           which obtained via fast binary file I/O from disk.
  101407             :        */
  101408             :        // SgOmpFinalClause( SgOmpFinalClauseStorageClass& source );
  101409             : 
  101410             : 
  101411             : 
  101412             : 
  101413             : 
  101414             :  // JH (10/24/2005): methods added to support the ast file IO
  101415             :     private:
  101416             : 
  101417             :       /* name AST Memory Allocation Support Functions
  101418             :           \brief Memory allocations support....
  101419             : 
  101420             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  101421             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  101422             :           and support the AST File I/O Mechanism.
  101423             :        */
  101424             :       /* */
  101425             : 
  101426             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  101427             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  101428             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  101429             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  101430             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  101431             :           a correspinding one in the AST_FILE_IO class!
  101432             :        */
  101433             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  101434             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101435             :       /* \brief Typedef used for low level memory access.
  101436             :        */
  101437             :        // typedef unsigned char* TestType;
  101438             : 
  101439             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  101440             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101441             :       /* \brief Typedef used to hold memory addresses as values.
  101442             :        */
  101443             :        // typedef unsigned long  AddressType;
  101444             : 
  101445             : 
  101446             : 
  101447             :        // necessary, to have direct access to the p_freepointer and the private methods !
  101448             :       /*! \brief friend class declaration to support AST File I/O */
  101449             :           friend class AST_FILE_IO;
  101450             : 
  101451             :       /*! \brief friend class declaration to support AST File I/O */
  101452             :           friend class SgOmpFinalClauseStorageClass;
  101453             : 
  101454             :       /*! \brief friend class declaration to support AST File I/O */
  101455             :           friend class AstSpecificDataManagingClass;
  101456             : 
  101457             :       /*! \brief friend class declaration to support AST File I/O */
  101458             :           friend class AstSpecificDataManagingClassStorageClass;
  101459             :     public:
  101460             :       /*! \brief IR node constructor to support AST File I/O */
  101461             :           SgOmpFinalClause( const SgOmpFinalClauseStorageClass& source );
  101462             : 
  101463             :  // private: // JJW hack
  101464             :        /*
  101465             :           name AST Memory Allocation Support Variables
  101466             :           Memory allocations support variables 
  101467             : 
  101468             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  101469             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  101470             :           and support the AST File I/O Mechanism.
  101471             :        */
  101472             :       /* */
  101473             : 
  101474             :     public:
  101475             : 
  101476             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  101477             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  101478             :       // virtual SgNode* addRegExpAttribute();
  101479             :       /*! \brief Support for AST matching using regular expression.
  101480             : 
  101481             :           This support is incomplete and the subject of current research to define 
  101482             :           RegEx trees to support inexact matching.
  101483             :        */
  101484             :           SgOmpFinalClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  101485             : 
  101486             : // *** COMMON CODE SECTION ENDS HERE ***
  101487             : 
  101488             : 
  101489             : // End of memberFunctionString
  101490             : // Start of memberFunctionString
  101491             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  101492             : 
  101493             :      // the generated cast function
  101494             :      // friend ROSE_DLL_API SgOmpFinalClause* isSgOmpFinalClause ( SgNode* s );
  101495             : 
  101496             :           typedef SgOmpExpressionClause base_node_type;
  101497             : 
  101498             : 
  101499             : // End of memberFunctionString
  101500             : 
  101501             : 
  101502             :      public: 
  101503             :          virtual ~SgOmpFinalClause();
  101504             : 
  101505             : 
  101506             :      public: 
  101507             :          SgOmpFinalClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  101508             :          SgOmpFinalClause(SgExpression* expression); 
  101509             : 
  101510             :     protected:
  101511             : 
  101512             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpFinalClause>;
  101513             : 
  101514             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101515             : 
  101516             : 
  101517             :    };
  101518             : #endif
  101519             : 
  101520             : // postdeclarations for SgOmpFinalClause
  101521             : 
  101522             : /* #line 101523 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101523             : 
  101524             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  101525             : 
  101526             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101527             : 
  101528             : 
  101529             : /* #line 101530 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101530             : 
  101531             : 
  101532             : 
  101533             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101534             : 
  101535             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  101536             : //      This code is automatically generated for each 
  101537             : //      terminal and non-terminal within the defined 
  101538             : //      grammar.  There is a simple way to change the 
  101539             : //      code to fix bugs etc.  See the ROSE README file
  101540             : //      for directions.
  101541             : 
  101542             : // tps: (02/22/2010): Adding DLL export requirements
  101543             : #include "rosedll.h"
  101544             : 
  101545             : // predeclarations for SgOmpPriorityClause
  101546             : 
  101547             : /* #line 101548 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101548             : 
  101549             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  101550             : 
  101551             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101552             : 
  101553             : #if 1
  101554             : // Class Definition for SgOmpPriorityClause
  101555             : class ROSE_DLL_API SgOmpPriorityClause  : public SgOmpExpressionClause
  101556             :    {
  101557             :      public:
  101558             : 
  101559             : 
  101560             : /* #line 101561 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101561             : 
  101562             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  101563             : // Start of memberFunctionString
  101564             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  101565             : 
  101566             : // *** COMMON CODE SECTION BEGINS HERE ***
  101567             : 
  101568             :     public:
  101569             : 
  101570             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  101571             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  101572             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  101573             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  101574             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  101575             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  101576             : 
  101577             :       /*! \brief returns a string representing the class name */
  101578             :           virtual std::string class_name() const override;
  101579             : 
  101580             :       /*! \brief returns new style SageIII enum values */
  101581             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  101582             : 
  101583             :       /*! \brief static variant value */
  101584             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  101585             :        // static const VariantT static_variant = V_SgOmpPriorityClause;
  101586             :           enum { static_variant = V_SgOmpPriorityClause };
  101587             : 
  101588             :        /* the generated cast function */
  101589             :       /*! \brief Casts pointer from base class to derived class */
  101590             :           ROSE_DLL_API friend       SgOmpPriorityClause* isSgOmpPriorityClause(       SgNode * s );
  101591             : 
  101592             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  101593             :           ROSE_DLL_API friend const SgOmpPriorityClause* isSgOmpPriorityClause( const SgNode * s );
  101594             : 
  101595             :      // ******************************************
  101596             :      // * Memory Pool / New / Delete
  101597             :      // ******************************************
  101598             : 
  101599             :      public:
  101600             :           /// \private
  101601             :           static const unsigned pool_size; //
  101602             :           /// \private
  101603             :           static std::vector<unsigned char *> pools; //
  101604             :           /// \private
  101605             :           static SgOmpPriorityClause * next_node; // 
  101606             : 
  101607             :           /// \private
  101608             :           static unsigned long initializeStorageClassArray(SgOmpPriorityClauseStorageClass *); //
  101609             : 
  101610             :           /// \private
  101611             :           static void clearMemoryPool(); //
  101612             :           static void deleteMemoryPool(); //
  101613             : 
  101614             :           /// \private
  101615             :           static void extendMemoryPoolForFileIO(); //
  101616             : 
  101617             :           /// \private
  101618             :           static SgOmpPriorityClause * getPointerFromGlobalIndex(unsigned long); //
  101619             :           /// \private
  101620             :           static SgOmpPriorityClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  101621             : 
  101622             :           /// \private
  101623             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  101624             :           /// \private
  101625             :           static void resetValidFreepointers(); //
  101626             :           /// \private
  101627             :           static unsigned long getNumberOfLastValidPointer(); //
  101628             : 
  101629             : 
  101630             : #if defined(INLINE_FUNCTIONS)
  101631             :       /*! \brief returns pointer to newly allocated IR node */
  101632             :           inline void *operator new (size_t size);
  101633             : #else
  101634             :       /*! \brief returns pointer to newly allocated IR node */
  101635             :           void *operator new (size_t size);
  101636             : #endif
  101637             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  101638             :           void operator delete (void* pointer, size_t size);
  101639             : 
  101640             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  101641           0 :           void operator delete (void* pointer)
  101642             :              {
  101643             :             // This is the generated delete operator...
  101644           0 :                SgOmpPriorityClause::operator delete (pointer,sizeof(SgOmpPriorityClause));
  101645             :              }
  101646             : 
  101647             :       /*! \brief Returns the total number of IR nodes of this type */
  101648             :           static size_t numberOfNodes();
  101649             : 
  101650             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  101651             :           static size_t memoryUsage();
  101652             : 
  101653             :       // End of scope which started in IR nodes specific code 
  101654             :       /* */
  101655             : 
  101656             :       /* name Internal Functions
  101657             :           \brief Internal functions ... incomplete-documentation
  101658             : 
  101659             :           These functions have been made public as part of the design, but they are suggested for internal use 
  101660             :           or by particularly knowledgeable users for specialized tools or applications.
  101661             : 
  101662             :           \internal We could not make these private because they are required by user for special purposes. And 
  101663             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  101664             :          
  101665             :        */
  101666             : 
  101667             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  101668             :        // overridden in every class by *generated* implementation
  101669             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  101670             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  101671             :        // MS: 06/28/02 container of names of variables or container indices 
  101672             :        // used used in the traversal to access AST successor nodes
  101673             :        // overridden in every class by *generated* implementation
  101674             :       /*! \brief container of names of variables or container indices used used in the traversal
  101675             :           to access AST successor nodes overridden in every class by *generated* implementation */
  101676             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  101677             : 
  101678             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  101679             :        // than all the vector copies. The implementation for these functions is generated for each class.
  101680             :       /*! \brief return number of children in the traversal successor list */
  101681             :           virtual size_t get_numberOfTraversalSuccessors() override;
  101682             :       /*! \brief index-based access to traversal successors by index number */
  101683             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  101684             :       /*! \brief index-based access to traversal successors by child node */
  101685             :           virtual size_t get_childIndex(SgNode *child) override;
  101686             : 
  101687             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  101688             :        // MS: 08/16/2002 method for generating RTI information
  101689             :       /*! \brief return C++ Runtime-Time-Information */
  101690             :           virtual RTIReturnType roseRTI() override;
  101691             : #endif
  101692             :       /* */
  101693             : 
  101694             : 
  101695             : 
  101696             :       /* name Deprecated Functions
  101697             :           \brief Deprecated functions ... incomplete-documentation
  101698             : 
  101699             :           These functions have been deprecated from use.
  101700             :        */
  101701             :       /* */
  101702             : 
  101703             :       /*! returns a C style string (char*) representing the class name */
  101704             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  101705             : 
  101706             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  101707             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  101708             : #if 0
  101709             :       /*! returns old style Sage II enum values */
  101710             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  101711             :       /*! returns old style Sage II enum values */
  101712             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  101713             : #endif
  101714             :       /* */
  101715             : 
  101716             : 
  101717             : 
  101718             : 
  101719             :      public:
  101720             :       /* name Traversal Support Functions
  101721             :           \brief Traversal support functions ... incomplete-documentation
  101722             : 
  101723             :           These functions have been made public as part of the design, but they are suggested for internal use 
  101724             :           or by particularly knowledgable users for specialized tools or applications.
  101725             :        */
  101726             :       /* */
  101727             : 
  101728             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  101729             :        // (inferior to ROSE traversal mechanism, experimental).
  101730             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  101731             :        */
  101732             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  101733             : 
  101734             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  101735             :       /*! \brief support for the classic visitor pattern done in GoF */
  101736             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  101737             : 
  101738             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  101739             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  101740             :        */
  101741             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  101742             : 
  101743             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  101744             :        */
  101745             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  101746             : 
  101747             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  101748             :        // This traversal helps support internal tools that call static member functions.
  101749             :        // note: this function operates on the memory pools.
  101750             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  101751             :        */
  101752             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  101753             :       /* */
  101754             : 
  101755             : 
  101756             :      public:
  101757             :       /* name Memory Allocation Functions
  101758             :           \brief Memory allocations functions ... incomplete-documentation
  101759             : 
  101760             :           These functions have been made public as part of the design, but they are suggested for internal use 
  101761             :           or by particularly knowledgable users for specialized tools or applications.
  101762             :        */
  101763             :       /* */
  101764             : 
  101765             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  101766             : 
  101767             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  101768             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  101769             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  101770             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  101771             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  101772             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  101773             :           being used with the AST File I/O mechanism.
  101774             :        */
  101775             :           virtual bool isInMemoryPool() override;
  101776             : 
  101777             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  101778             : 
  101779             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  101780             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  101781             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  101782             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  101783             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  101784             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  101785             :           being used with the AST File I/O mechanism.
  101786             :        */
  101787             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  101788             : 
  101789             :       // DQ (4/30/2006): Modified to be a const function.
  101790             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  101791             : 
  101792             :           This functions is part of general support for many possible tools to operate 
  101793             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  101794             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  101795             :           less than the set of pointers used by the AST file I/O. This is part of
  101796             :           work implemented by Andreas, and support tools such as the AST graph generation.
  101797             : 
  101798             :           \warning This function can return unexpected data members and thus the 
  101799             :                    order and the number of elements is unpredicable and subject 
  101800             :                    to change.
  101801             : 
  101802             :           \returns STL vector of pairs of SgNode* and strings
  101803             :        */
  101804             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  101805             : 
  101806             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  101807             : 
  101808             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  101809             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  101810             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  101811             : 
  101812             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  101813             :                    and subject to change.
  101814             :        */
  101815             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  101816             : 
  101817             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  101818             : 
  101819             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  101820             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  101821             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  101822             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  101823             : 
  101824             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  101825             : 
  101826             :           \returns long
  101827             :        */
  101828             :           virtual long getChildIndex( SgNode* childNode ) const override;
  101829             : 
  101830             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  101831             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101832             :       /* \brief Constructor for use by AST File I/O Mechanism
  101833             : 
  101834             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  101835             :           which obtained via fast binary file I/O from disk.
  101836             :        */
  101837             :        // SgOmpPriorityClause( SgOmpPriorityClauseStorageClass& source );
  101838             : 
  101839             : 
  101840             : 
  101841             : 
  101842             : 
  101843             :  // JH (10/24/2005): methods added to support the ast file IO
  101844             :     private:
  101845             : 
  101846             :       /* name AST Memory Allocation Support Functions
  101847             :           \brief Memory allocations support....
  101848             : 
  101849             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  101850             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  101851             :           and support the AST File I/O Mechanism.
  101852             :        */
  101853             :       /* */
  101854             : 
  101855             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  101856             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  101857             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  101858             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  101859             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  101860             :           a correspinding one in the AST_FILE_IO class!
  101861             :        */
  101862             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  101863             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101864             :       /* \brief Typedef used for low level memory access.
  101865             :        */
  101866             :        // typedef unsigned char* TestType;
  101867             : 
  101868             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  101869             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  101870             :       /* \brief Typedef used to hold memory addresses as values.
  101871             :        */
  101872             :        // typedef unsigned long  AddressType;
  101873             : 
  101874             : 
  101875             : 
  101876             :        // necessary, to have direct access to the p_freepointer and the private methods !
  101877             :       /*! \brief friend class declaration to support AST File I/O */
  101878             :           friend class AST_FILE_IO;
  101879             : 
  101880             :       /*! \brief friend class declaration to support AST File I/O */
  101881             :           friend class SgOmpPriorityClauseStorageClass;
  101882             : 
  101883             :       /*! \brief friend class declaration to support AST File I/O */
  101884             :           friend class AstSpecificDataManagingClass;
  101885             : 
  101886             :       /*! \brief friend class declaration to support AST File I/O */
  101887             :           friend class AstSpecificDataManagingClassStorageClass;
  101888             :     public:
  101889             :       /*! \brief IR node constructor to support AST File I/O */
  101890             :           SgOmpPriorityClause( const SgOmpPriorityClauseStorageClass& source );
  101891             : 
  101892             :  // private: // JJW hack
  101893             :        /*
  101894             :           name AST Memory Allocation Support Variables
  101895             :           Memory allocations support variables 
  101896             : 
  101897             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  101898             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  101899             :           and support the AST File I/O Mechanism.
  101900             :        */
  101901             :       /* */
  101902             : 
  101903             :     public:
  101904             : 
  101905             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  101906             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  101907             :       // virtual SgNode* addRegExpAttribute();
  101908             :       /*! \brief Support for AST matching using regular expression.
  101909             : 
  101910             :           This support is incomplete and the subject of current research to define 
  101911             :           RegEx trees to support inexact matching.
  101912             :        */
  101913             :           SgOmpPriorityClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  101914             : 
  101915             : // *** COMMON CODE SECTION ENDS HERE ***
  101916             : 
  101917             : 
  101918             : // End of memberFunctionString
  101919             : // Start of memberFunctionString
  101920             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  101921             : 
  101922             :      // the generated cast function
  101923             :      // friend ROSE_DLL_API SgOmpPriorityClause* isSgOmpPriorityClause ( SgNode* s );
  101924             : 
  101925             :           typedef SgOmpExpressionClause base_node_type;
  101926             : 
  101927             : 
  101928             : // End of memberFunctionString
  101929             : 
  101930             : 
  101931             :      public: 
  101932             :          virtual ~SgOmpPriorityClause();
  101933             : 
  101934             : 
  101935             :      public: 
  101936             :          SgOmpPriorityClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  101937             :          SgOmpPriorityClause(SgExpression* expression); 
  101938             : 
  101939             :     protected:
  101940             : 
  101941             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpPriorityClause>;
  101942             : 
  101943             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101944             : 
  101945             : 
  101946             :    };
  101947             : #endif
  101948             : 
  101949             : // postdeclarations for SgOmpPriorityClause
  101950             : 
  101951             : /* #line 101952 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101952             : 
  101953             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  101954             : 
  101955             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101956             : 
  101957             : 
  101958             : /* #line 101959 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101959             : 
  101960             : 
  101961             : 
  101962             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101963             : 
  101964             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  101965             : //      This code is automatically generated for each 
  101966             : //      terminal and non-terminal within the defined 
  101967             : //      grammar.  There is a simple way to change the 
  101968             : //      code to fix bugs etc.  See the ROSE README file
  101969             : //      for directions.
  101970             : 
  101971             : // tps: (02/22/2010): Adding DLL export requirements
  101972             : #include "rosedll.h"
  101973             : 
  101974             : // predeclarations for SgOmpPartialClause
  101975             : 
  101976             : /* #line 101977 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101977             : 
  101978             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  101979             : 
  101980             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  101981             : 
  101982             : #if 1
  101983             : // Class Definition for SgOmpPartialClause
  101984             : class ROSE_DLL_API SgOmpPartialClause  : public SgOmpExpressionClause
  101985             :    {
  101986             :      public:
  101987             : 
  101988             : 
  101989             : /* #line 101990 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  101990             : 
  101991             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  101992             : // Start of memberFunctionString
  101993             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  101994             : 
  101995             : // *** COMMON CODE SECTION BEGINS HERE ***
  101996             : 
  101997             :     public:
  101998             : 
  101999             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  102000             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  102001             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  102002             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  102003             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  102004             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  102005             : 
  102006             :       /*! \brief returns a string representing the class name */
  102007             :           virtual std::string class_name() const override;
  102008             : 
  102009             :       /*! \brief returns new style SageIII enum values */
  102010             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  102011             : 
  102012             :       /*! \brief static variant value */
  102013             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  102014             :        // static const VariantT static_variant = V_SgOmpPartialClause;
  102015             :           enum { static_variant = V_SgOmpPartialClause };
  102016             : 
  102017             :        /* the generated cast function */
  102018             :       /*! \brief Casts pointer from base class to derived class */
  102019             :           ROSE_DLL_API friend       SgOmpPartialClause* isSgOmpPartialClause(       SgNode * s );
  102020             : 
  102021             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  102022             :           ROSE_DLL_API friend const SgOmpPartialClause* isSgOmpPartialClause( const SgNode * s );
  102023             : 
  102024             :      // ******************************************
  102025             :      // * Memory Pool / New / Delete
  102026             :      // ******************************************
  102027             : 
  102028             :      public:
  102029             :           /// \private
  102030             :           static const unsigned pool_size; //
  102031             :           /// \private
  102032             :           static std::vector<unsigned char *> pools; //
  102033             :           /// \private
  102034             :           static SgOmpPartialClause * next_node; // 
  102035             : 
  102036             :           /// \private
  102037             :           static unsigned long initializeStorageClassArray(SgOmpPartialClauseStorageClass *); //
  102038             : 
  102039             :           /// \private
  102040             :           static void clearMemoryPool(); //
  102041             :           static void deleteMemoryPool(); //
  102042             : 
  102043             :           /// \private
  102044             :           static void extendMemoryPoolForFileIO(); //
  102045             : 
  102046             :           /// \private
  102047             :           static SgOmpPartialClause * getPointerFromGlobalIndex(unsigned long); //
  102048             :           /// \private
  102049             :           static SgOmpPartialClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  102050             : 
  102051             :           /// \private
  102052             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  102053             :           /// \private
  102054             :           static void resetValidFreepointers(); //
  102055             :           /// \private
  102056             :           static unsigned long getNumberOfLastValidPointer(); //
  102057             : 
  102058             : 
  102059             : #if defined(INLINE_FUNCTIONS)
  102060             :       /*! \brief returns pointer to newly allocated IR node */
  102061             :           inline void *operator new (size_t size);
  102062             : #else
  102063             :       /*! \brief returns pointer to newly allocated IR node */
  102064             :           void *operator new (size_t size);
  102065             : #endif
  102066             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  102067             :           void operator delete (void* pointer, size_t size);
  102068             : 
  102069             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  102070           0 :           void operator delete (void* pointer)
  102071             :              {
  102072             :             // This is the generated delete operator...
  102073           0 :                SgOmpPartialClause::operator delete (pointer,sizeof(SgOmpPartialClause));
  102074             :              }
  102075             : 
  102076             :       /*! \brief Returns the total number of IR nodes of this type */
  102077             :           static size_t numberOfNodes();
  102078             : 
  102079             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  102080             :           static size_t memoryUsage();
  102081             : 
  102082             :       // End of scope which started in IR nodes specific code 
  102083             :       /* */
  102084             : 
  102085             :       /* name Internal Functions
  102086             :           \brief Internal functions ... incomplete-documentation
  102087             : 
  102088             :           These functions have been made public as part of the design, but they are suggested for internal use 
  102089             :           or by particularly knowledgeable users for specialized tools or applications.
  102090             : 
  102091             :           \internal We could not make these private because they are required by user for special purposes. And 
  102092             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  102093             :          
  102094             :        */
  102095             : 
  102096             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  102097             :        // overridden in every class by *generated* implementation
  102098             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  102099             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  102100             :        // MS: 06/28/02 container of names of variables or container indices 
  102101             :        // used used in the traversal to access AST successor nodes
  102102             :        // overridden in every class by *generated* implementation
  102103             :       /*! \brief container of names of variables or container indices used used in the traversal
  102104             :           to access AST successor nodes overridden in every class by *generated* implementation */
  102105             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  102106             : 
  102107             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  102108             :        // than all the vector copies. The implementation for these functions is generated for each class.
  102109             :       /*! \brief return number of children in the traversal successor list */
  102110             :           virtual size_t get_numberOfTraversalSuccessors() override;
  102111             :       /*! \brief index-based access to traversal successors by index number */
  102112             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  102113             :       /*! \brief index-based access to traversal successors by child node */
  102114             :           virtual size_t get_childIndex(SgNode *child) override;
  102115             : 
  102116             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  102117             :        // MS: 08/16/2002 method for generating RTI information
  102118             :       /*! \brief return C++ Runtime-Time-Information */
  102119             :           virtual RTIReturnType roseRTI() override;
  102120             : #endif
  102121             :       /* */
  102122             : 
  102123             : 
  102124             : 
  102125             :       /* name Deprecated Functions
  102126             :           \brief Deprecated functions ... incomplete-documentation
  102127             : 
  102128             :           These functions have been deprecated from use.
  102129             :        */
  102130             :       /* */
  102131             : 
  102132             :       /*! returns a C style string (char*) representing the class name */
  102133             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  102134             : 
  102135             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  102136             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  102137             : #if 0
  102138             :       /*! returns old style Sage II enum values */
  102139             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  102140             :       /*! returns old style Sage II enum values */
  102141             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  102142             : #endif
  102143             :       /* */
  102144             : 
  102145             : 
  102146             : 
  102147             : 
  102148             :      public:
  102149             :       /* name Traversal Support Functions
  102150             :           \brief Traversal support functions ... incomplete-documentation
  102151             : 
  102152             :           These functions have been made public as part of the design, but they are suggested for internal use 
  102153             :           or by particularly knowledgable users for specialized tools or applications.
  102154             :        */
  102155             :       /* */
  102156             : 
  102157             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  102158             :        // (inferior to ROSE traversal mechanism, experimental).
  102159             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  102160             :        */
  102161             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  102162             : 
  102163             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  102164             :       /*! \brief support for the classic visitor pattern done in GoF */
  102165             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  102166             : 
  102167             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  102168             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  102169             :        */
  102170             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  102171             : 
  102172             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  102173             :        */
  102174             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  102175             : 
  102176             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  102177             :        // This traversal helps support internal tools that call static member functions.
  102178             :        // note: this function operates on the memory pools.
  102179             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  102180             :        */
  102181             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  102182             :       /* */
  102183             : 
  102184             : 
  102185             :      public:
  102186             :       /* name Memory Allocation Functions
  102187             :           \brief Memory allocations functions ... incomplete-documentation
  102188             : 
  102189             :           These functions have been made public as part of the design, but they are suggested for internal use 
  102190             :           or by particularly knowledgable users for specialized tools or applications.
  102191             :        */
  102192             :       /* */
  102193             : 
  102194             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  102195             : 
  102196             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  102197             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  102198             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  102199             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  102200             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  102201             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  102202             :           being used with the AST File I/O mechanism.
  102203             :        */
  102204             :           virtual bool isInMemoryPool() override;
  102205             : 
  102206             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  102207             : 
  102208             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  102209             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  102210             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  102211             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  102212             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  102213             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  102214             :           being used with the AST File I/O mechanism.
  102215             :        */
  102216             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  102217             : 
  102218             :       // DQ (4/30/2006): Modified to be a const function.
  102219             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  102220             : 
  102221             :           This functions is part of general support for many possible tools to operate 
  102222             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  102223             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  102224             :           less than the set of pointers used by the AST file I/O. This is part of
  102225             :           work implemented by Andreas, and support tools such as the AST graph generation.
  102226             : 
  102227             :           \warning This function can return unexpected data members and thus the 
  102228             :                    order and the number of elements is unpredicable and subject 
  102229             :                    to change.
  102230             : 
  102231             :           \returns STL vector of pairs of SgNode* and strings
  102232             :        */
  102233             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  102234             : 
  102235             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  102236             : 
  102237             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  102238             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  102239             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  102240             : 
  102241             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  102242             :                    and subject to change.
  102243             :        */
  102244             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  102245             : 
  102246             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  102247             : 
  102248             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  102249             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  102250             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  102251             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  102252             : 
  102253             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  102254             : 
  102255             :           \returns long
  102256             :        */
  102257             :           virtual long getChildIndex( SgNode* childNode ) const override;
  102258             : 
  102259             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  102260             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  102261             :       /* \brief Constructor for use by AST File I/O Mechanism
  102262             : 
  102263             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  102264             :           which obtained via fast binary file I/O from disk.
  102265             :        */
  102266             :        // SgOmpPartialClause( SgOmpPartialClauseStorageClass& source );
  102267             : 
  102268             : 
  102269             : 
  102270             : 
  102271             : 
  102272             :  // JH (10/24/2005): methods added to support the ast file IO
  102273             :     private:
  102274             : 
  102275             :       /* name AST Memory Allocation Support Functions
  102276             :           \brief Memory allocations support....
  102277             : 
  102278             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  102279             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  102280             :           and support the AST File I/O Mechanism.
  102281             :        */
  102282             :       /* */
  102283             : 
  102284             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  102285             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  102286             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  102287             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  102288             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  102289             :           a correspinding one in the AST_FILE_IO class!
  102290             :        */
  102291             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  102292             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  102293             :       /* \brief Typedef used for low level memory access.
  102294             :        */
  102295             :        // typedef unsigned char* TestType;
  102296             : 
  102297             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  102298             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  102299             :       /* \brief Typedef used to hold memory addresses as values.
  102300             :        */
  102301             :        // typedef unsigned long  AddressType;
  102302             : 
  102303             : 
  102304             : 
  102305             :        // necessary, to have direct access to the p_freepointer and the private methods !
  102306             :       /*! \brief friend class declaration to support AST File I/O */
  102307             :           friend class AST_FILE_IO;
  102308             : 
  102309             :       /*! \brief friend class declaration to support AST File I/O */
  102310             :           friend class SgOmpPartialClauseStorageClass;
  102311             : 
  102312             :       /*! \brief friend class declaration to support AST File I/O */
  102313             :           friend class AstSpecificDataManagingClass;
  102314             : 
  102315             :       /*! \brief friend class declaration to support AST File I/O */
  102316             :           friend class AstSpecificDataManagingClassStorageClass;
  102317             :     public:
  102318             :       /*! \brief IR node constructor to support AST File I/O */
  102319             :           SgOmpPartialClause( const SgOmpPartialClauseStorageClass& source );
  102320             : 
  102321             :  // private: // JJW hack
  102322             :        /*
  102323             :           name AST Memory Allocation Support Variables
  102324             :           Memory allocations support variables 
  102325             : 
  102326             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  102327             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  102328             :           and support the AST File I/O Mechanism.
  102329             :        */
  102330             :       /* */
  102331             : 
  102332             :     public:
  102333             : 
  102334             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  102335             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  102336             :       // virtual SgNode* addRegExpAttribute();
  102337             :       /*! \brief Support for AST matching using regular expression.
  102338             : 
  102339             :           This support is incomplete and the subject of current research to define 
  102340             :           RegEx trees to support inexact matching.
  102341             :        */
  102342             :           SgOmpPartialClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  102343             : 
  102344             : // *** COMMON CODE SECTION ENDS HERE ***
  102345             : 
  102346             : 
  102347             : // End of memberFunctionString
  102348             : // Start of memberFunctionString
  102349             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  102350             : 
  102351             :      // the generated cast function
  102352             :      // friend ROSE_DLL_API SgOmpPartialClause* isSgOmpPartialClause ( SgNode* s );
  102353             : 
  102354             :           typedef SgOmpExpressionClause base_node_type;
  102355             : 
  102356             : 
  102357             : // End of memberFunctionString
  102358             : 
  102359             : 
  102360             :      public: 
  102361             :          virtual ~SgOmpPartialClause();
  102362             : 
  102363             : 
  102364             :      public: 
  102365             :          SgOmpPartialClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  102366             :          SgOmpPartialClause(SgExpression* expression); 
  102367             : 
  102368             :     protected:
  102369             : 
  102370             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpPartialClause>;
  102371             : 
  102372             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102373             : 
  102374             : 
  102375             :    };
  102376             : #endif
  102377             : 
  102378             : // postdeclarations for SgOmpPartialClause
  102379             : 
  102380             : /* #line 102381 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102381             : 
  102382             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  102383             : 
  102384             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102385             : 
  102386             : 
  102387             : /* #line 102388 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102388             : 
  102389             : 
  102390             : 
  102391             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102392             : 
  102393             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  102394             : //      This code is automatically generated for each 
  102395             : //      terminal and non-terminal within the defined 
  102396             : //      grammar.  There is a simple way to change the 
  102397             : //      code to fix bugs etc.  See the ROSE README file
  102398             : //      for directions.
  102399             : 
  102400             : // tps: (02/22/2010): Adding DLL export requirements
  102401             : #include "rosedll.h"
  102402             : 
  102403             : // predeclarations for SgOmpSizesClause
  102404             : 
  102405             : /* #line 102406 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102406             : 
  102407             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  102408             : 
  102409             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102410             : 
  102411             : #if 1
  102412             : // Class Definition for SgOmpSizesClause
  102413             : class ROSE_DLL_API SgOmpSizesClause  : public SgOmpExpressionClause
  102414             :    {
  102415             :      public:
  102416             : 
  102417             : 
  102418             : /* #line 102419 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102419             : 
  102420             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  102421             : // Start of memberFunctionString
  102422             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  102423             : 
  102424             : // *** COMMON CODE SECTION BEGINS HERE ***
  102425             : 
  102426             :     public:
  102427             : 
  102428             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  102429             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  102430             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  102431             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  102432             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  102433             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  102434             : 
  102435             :       /*! \brief returns a string representing the class name */
  102436             :           virtual std::string class_name() const override;
  102437             : 
  102438             :       /*! \brief returns new style SageIII enum values */
  102439             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  102440             : 
  102441             :       /*! \brief static variant value */
  102442             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  102443             :        // static const VariantT static_variant = V_SgOmpSizesClause;
  102444             :           enum { static_variant = V_SgOmpSizesClause };
  102445             : 
  102446             :        /* the generated cast function */
  102447             :       /*! \brief Casts pointer from base class to derived class */
  102448             :           ROSE_DLL_API friend       SgOmpSizesClause* isSgOmpSizesClause(       SgNode * s );
  102449             : 
  102450             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  102451             :           ROSE_DLL_API friend const SgOmpSizesClause* isSgOmpSizesClause( const SgNode * s );
  102452             : 
  102453             :      // ******************************************
  102454             :      // * Memory Pool / New / Delete
  102455             :      // ******************************************
  102456             : 
  102457             :      public:
  102458             :           /// \private
  102459             :           static const unsigned pool_size; //
  102460             :           /// \private
  102461             :           static std::vector<unsigned char *> pools; //
  102462             :           /// \private
  102463             :           static SgOmpSizesClause * next_node; // 
  102464             : 
  102465             :           /// \private
  102466             :           static unsigned long initializeStorageClassArray(SgOmpSizesClauseStorageClass *); //
  102467             : 
  102468             :           /// \private
  102469             :           static void clearMemoryPool(); //
  102470             :           static void deleteMemoryPool(); //
  102471             : 
  102472             :           /// \private
  102473             :           static void extendMemoryPoolForFileIO(); //
  102474             : 
  102475             :           /// \private
  102476             :           static SgOmpSizesClause * getPointerFromGlobalIndex(unsigned long); //
  102477             :           /// \private
  102478             :           static SgOmpSizesClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  102479             : 
  102480             :           /// \private
  102481             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  102482             :           /// \private
  102483             :           static void resetValidFreepointers(); //
  102484             :           /// \private
  102485             :           static unsigned long getNumberOfLastValidPointer(); //
  102486             : 
  102487             : 
  102488             : #if defined(INLINE_FUNCTIONS)
  102489             :       /*! \brief returns pointer to newly allocated IR node */
  102490             :           inline void *operator new (size_t size);
  102491             : #else
  102492             :       /*! \brief returns pointer to newly allocated IR node */
  102493             :           void *operator new (size_t size);
  102494             : #endif
  102495             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  102496             :           void operator delete (void* pointer, size_t size);
  102497             : 
  102498             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  102499           0 :           void operator delete (void* pointer)
  102500             :              {
  102501             :             // This is the generated delete operator...
  102502           0 :                SgOmpSizesClause::operator delete (pointer,sizeof(SgOmpSizesClause));
  102503             :              }
  102504             : 
  102505             :       /*! \brief Returns the total number of IR nodes of this type */
  102506             :           static size_t numberOfNodes();
  102507             : 
  102508             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  102509             :           static size_t memoryUsage();
  102510             : 
  102511             :       // End of scope which started in IR nodes specific code 
  102512             :       /* */
  102513             : 
  102514             :       /* name Internal Functions
  102515             :           \brief Internal functions ... incomplete-documentation
  102516             : 
  102517             :           These functions have been made public as part of the design, but they are suggested for internal use 
  102518             :           or by particularly knowledgeable users for specialized tools or applications.
  102519             : 
  102520             :           \internal We could not make these private because they are required by user for special purposes. And 
  102521             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  102522             :          
  102523             :        */
  102524             : 
  102525             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  102526             :        // overridden in every class by *generated* implementation
  102527             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  102528             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  102529             :        // MS: 06/28/02 container of names of variables or container indices 
  102530             :        // used used in the traversal to access AST successor nodes
  102531             :        // overridden in every class by *generated* implementation
  102532             :       /*! \brief container of names of variables or container indices used used in the traversal
  102533             :           to access AST successor nodes overridden in every class by *generated* implementation */
  102534             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  102535             : 
  102536             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  102537             :        // than all the vector copies. The implementation for these functions is generated for each class.
  102538             :       /*! \brief return number of children in the traversal successor list */
  102539             :           virtual size_t get_numberOfTraversalSuccessors() override;
  102540             :       /*! \brief index-based access to traversal successors by index number */
  102541             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  102542             :       /*! \brief index-based access to traversal successors by child node */
  102543             :           virtual size_t get_childIndex(SgNode *child) override;
  102544             : 
  102545             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  102546             :        // MS: 08/16/2002 method for generating RTI information
  102547             :       /*! \brief return C++ Runtime-Time-Information */
  102548             :           virtual RTIReturnType roseRTI() override;
  102549             : #endif
  102550             :       /* */
  102551             : 
  102552             : 
  102553             : 
  102554             :       /* name Deprecated Functions
  102555             :           \brief Deprecated functions ... incomplete-documentation
  102556             : 
  102557             :           These functions have been deprecated from use.
  102558             :        */
  102559             :       /* */
  102560             : 
  102561             :       /*! returns a C style string (char*) representing the class name */
  102562             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  102563             : 
  102564             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  102565             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  102566             : #if 0
  102567             :       /*! returns old style Sage II enum values */
  102568             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  102569             :       /*! returns old style Sage II enum values */
  102570             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  102571             : #endif
  102572             :       /* */
  102573             : 
  102574             : 
  102575             : 
  102576             : 
  102577             :      public:
  102578             :       /* name Traversal Support Functions
  102579             :           \brief Traversal support functions ... incomplete-documentation
  102580             : 
  102581             :           These functions have been made public as part of the design, but they are suggested for internal use 
  102582             :           or by particularly knowledgable users for specialized tools or applications.
  102583             :        */
  102584             :       /* */
  102585             : 
  102586             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  102587             :        // (inferior to ROSE traversal mechanism, experimental).
  102588             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  102589             :        */
  102590             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  102591             : 
  102592             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  102593             :       /*! \brief support for the classic visitor pattern done in GoF */
  102594             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  102595             : 
  102596             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  102597             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  102598             :        */
  102599             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  102600             : 
  102601             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  102602             :        */
  102603             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  102604             : 
  102605             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  102606             :        // This traversal helps support internal tools that call static member functions.
  102607             :        // note: this function operates on the memory pools.
  102608             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  102609             :        */
  102610             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  102611             :       /* */
  102612             : 
  102613             : 
  102614             :      public:
  102615             :       /* name Memory Allocation Functions
  102616             :           \brief Memory allocations functions ... incomplete-documentation
  102617             : 
  102618             :           These functions have been made public as part of the design, but they are suggested for internal use 
  102619             :           or by particularly knowledgable users for specialized tools or applications.
  102620             :        */
  102621             :       /* */
  102622             : 
  102623             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  102624             : 
  102625             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  102626             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  102627             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  102628             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  102629             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  102630             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  102631             :           being used with the AST File I/O mechanism.
  102632             :        */
  102633             :           virtual bool isInMemoryPool() override;
  102634             : 
  102635             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  102636             : 
  102637             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  102638             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  102639             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  102640             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  102641             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  102642             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  102643             :           being used with the AST File I/O mechanism.
  102644             :        */
  102645             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  102646             : 
  102647             :       // DQ (4/30/2006): Modified to be a const function.
  102648             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  102649             : 
  102650             :           This functions is part of general support for many possible tools to operate 
  102651             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  102652             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  102653             :           less than the set of pointers used by the AST file I/O. This is part of
  102654             :           work implemented by Andreas, and support tools such as the AST graph generation.
  102655             : 
  102656             :           \warning This function can return unexpected data members and thus the 
  102657             :                    order and the number of elements is unpredicable and subject 
  102658             :                    to change.
  102659             : 
  102660             :           \returns STL vector of pairs of SgNode* and strings
  102661             :        */
  102662             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  102663             : 
  102664             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  102665             : 
  102666             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  102667             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  102668             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  102669             : 
  102670             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  102671             :                    and subject to change.
  102672             :        */
  102673             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  102674             : 
  102675             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  102676             : 
  102677             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  102678             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  102679             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  102680             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  102681             : 
  102682             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  102683             : 
  102684             :           \returns long
  102685             :        */
  102686             :           virtual long getChildIndex( SgNode* childNode ) const override;
  102687             : 
  102688             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  102689             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  102690             :       /* \brief Constructor for use by AST File I/O Mechanism
  102691             : 
  102692             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  102693             :           which obtained via fast binary file I/O from disk.
  102694             :        */
  102695             :        // SgOmpSizesClause( SgOmpSizesClauseStorageClass& source );
  102696             : 
  102697             : 
  102698             : 
  102699             : 
  102700             : 
  102701             :  // JH (10/24/2005): methods added to support the ast file IO
  102702             :     private:
  102703             : 
  102704             :       /* name AST Memory Allocation Support Functions
  102705             :           \brief Memory allocations support....
  102706             : 
  102707             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  102708             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  102709             :           and support the AST File I/O Mechanism.
  102710             :        */
  102711             :       /* */
  102712             : 
  102713             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  102714             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  102715             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  102716             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  102717             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  102718             :           a correspinding one in the AST_FILE_IO class!
  102719             :        */
  102720             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  102721             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  102722             :       /* \brief Typedef used for low level memory access.
  102723             :        */
  102724             :        // typedef unsigned char* TestType;
  102725             : 
  102726             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  102727             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  102728             :       /* \brief Typedef used to hold memory addresses as values.
  102729             :        */
  102730             :        // typedef unsigned long  AddressType;
  102731             : 
  102732             : 
  102733             : 
  102734             :        // necessary, to have direct access to the p_freepointer and the private methods !
  102735             :       /*! \brief friend class declaration to support AST File I/O */
  102736             :           friend class AST_FILE_IO;
  102737             : 
  102738             :       /*! \brief friend class declaration to support AST File I/O */
  102739             :           friend class SgOmpSizesClauseStorageClass;
  102740             : 
  102741             :       /*! \brief friend class declaration to support AST File I/O */
  102742             :           friend class AstSpecificDataManagingClass;
  102743             : 
  102744             :       /*! \brief friend class declaration to support AST File I/O */
  102745             :           friend class AstSpecificDataManagingClassStorageClass;
  102746             :     public:
  102747             :       /*! \brief IR node constructor to support AST File I/O */
  102748             :           SgOmpSizesClause( const SgOmpSizesClauseStorageClass& source );
  102749             : 
  102750             :  // private: // JJW hack
  102751             :        /*
  102752             :           name AST Memory Allocation Support Variables
  102753             :           Memory allocations support variables 
  102754             : 
  102755             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  102756             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  102757             :           and support the AST File I/O Mechanism.
  102758             :        */
  102759             :       /* */
  102760             : 
  102761             :     public:
  102762             : 
  102763             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  102764             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  102765             :       // virtual SgNode* addRegExpAttribute();
  102766             :       /*! \brief Support for AST matching using regular expression.
  102767             : 
  102768             :           This support is incomplete and the subject of current research to define 
  102769             :           RegEx trees to support inexact matching.
  102770             :        */
  102771             :           SgOmpSizesClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  102772             : 
  102773             : // *** COMMON CODE SECTION ENDS HERE ***
  102774             : 
  102775             : 
  102776             : // End of memberFunctionString
  102777             : // Start of memberFunctionString
  102778             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  102779             : 
  102780             :      // the generated cast function
  102781             :      // friend ROSE_DLL_API SgOmpSizesClause* isSgOmpSizesClause ( SgNode* s );
  102782             : 
  102783             :           typedef SgOmpExpressionClause base_node_type;
  102784             : 
  102785             : 
  102786             : // End of memberFunctionString
  102787             : 
  102788             : 
  102789             :      public: 
  102790             :          virtual ~SgOmpSizesClause();
  102791             : 
  102792             : 
  102793             :      public: 
  102794             :          SgOmpSizesClause(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  102795             :          SgOmpSizesClause(SgExpression* expression); 
  102796             : 
  102797             :     protected:
  102798             : 
  102799             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSizesClause>;
  102800             : 
  102801             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102802             : 
  102803             : 
  102804             :    };
  102805             : #endif
  102806             : 
  102807             : // postdeclarations for SgOmpSizesClause
  102808             : 
  102809             : /* #line 102810 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102810             : 
  102811             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  102812             : 
  102813             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102814             : 
  102815             : 
  102816             : /* #line 102817 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102817             : 
  102818             : 
  102819             : 
  102820             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102821             : 
  102822             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  102823             : //      This code is automatically generated for each 
  102824             : //      terminal and non-terminal within the defined 
  102825             : //      grammar.  There is a simple way to change the 
  102826             : //      code to fix bugs etc.  See the ROSE README file
  102827             : //      for directions.
  102828             : 
  102829             : // tps: (02/22/2010): Adding DLL export requirements
  102830             : #include "rosedll.h"
  102831             : 
  102832             : // predeclarations for SgOmpInbranchClause
  102833             : 
  102834             : /* #line 102835 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102835             : 
  102836             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  102837             : 
  102838             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  102839             : 
  102840             : #if 1
  102841             : // Class Definition for SgOmpInbranchClause
  102842             : class ROSE_DLL_API SgOmpInbranchClause  : public SgOmpClause
  102843             :    {
  102844             :      public:
  102845             : 
  102846             : 
  102847             : /* #line 102848 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  102848             : 
  102849             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  102850             : // Start of memberFunctionString
  102851             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  102852             : 
  102853             : // *** COMMON CODE SECTION BEGINS HERE ***
  102854             : 
  102855             :     public:
  102856             : 
  102857             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  102858             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  102859             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  102860             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  102861             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  102862             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  102863             : 
  102864             :       /*! \brief returns a string representing the class name */
  102865             :           virtual std::string class_name() const override;
  102866             : 
  102867             :       /*! \brief returns new style SageIII enum values */
  102868             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  102869             : 
  102870             :       /*! \brief static variant value */
  102871             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  102872             :        // static const VariantT static_variant = V_SgOmpInbranchClause;
  102873             :           enum { static_variant = V_SgOmpInbranchClause };
  102874             : 
  102875             :        /* the generated cast function */
  102876             :       /*! \brief Casts pointer from base class to derived class */
  102877             :           ROSE_DLL_API friend       SgOmpInbranchClause* isSgOmpInbranchClause(       SgNode * s );
  102878             : 
  102879             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  102880             :           ROSE_DLL_API friend const SgOmpInbranchClause* isSgOmpInbranchClause( const SgNode * s );
  102881             : 
  102882             :      // ******************************************
  102883             :      // * Memory Pool / New / Delete
  102884             :      // ******************************************
  102885             : 
  102886             :      public:
  102887             :           /// \private
  102888             :           static const unsigned pool_size; //
  102889             :           /// \private
  102890             :           static std::vector<unsigned char *> pools; //
  102891             :           /// \private
  102892             :           static SgOmpInbranchClause * next_node; // 
  102893             : 
  102894             :           /// \private
  102895             :           static unsigned long initializeStorageClassArray(SgOmpInbranchClauseStorageClass *); //
  102896             : 
  102897             :           /// \private
  102898             :           static void clearMemoryPool(); //
  102899             :           static void deleteMemoryPool(); //
  102900             : 
  102901             :           /// \private
  102902             :           static void extendMemoryPoolForFileIO(); //
  102903             : 
  102904             :           /// \private
  102905             :           static SgOmpInbranchClause * getPointerFromGlobalIndex(unsigned long); //
  102906             :           /// \private
  102907             :           static SgOmpInbranchClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  102908             : 
  102909             :           /// \private
  102910             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  102911             :           /// \private
  102912             :           static void resetValidFreepointers(); //
  102913             :           /// \private
  102914             :           static unsigned long getNumberOfLastValidPointer(); //
  102915             : 
  102916             : 
  102917             : #if defined(INLINE_FUNCTIONS)
  102918             :       /*! \brief returns pointer to newly allocated IR node */
  102919             :           inline void *operator new (size_t size);
  102920             : #else
  102921             :       /*! \brief returns pointer to newly allocated IR node */
  102922             :           void *operator new (size_t size);
  102923             : #endif
  102924             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  102925             :           void operator delete (void* pointer, size_t size);
  102926             : 
  102927             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  102928           0 :           void operator delete (void* pointer)
  102929             :              {
  102930             :             // This is the generated delete operator...
  102931           0 :                SgOmpInbranchClause::operator delete (pointer,sizeof(SgOmpInbranchClause));
  102932             :              }
  102933             : 
  102934             :       /*! \brief Returns the total number of IR nodes of this type */
  102935             :           static size_t numberOfNodes();
  102936             : 
  102937             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  102938             :           static size_t memoryUsage();
  102939             : 
  102940             :       // End of scope which started in IR nodes specific code 
  102941             :       /* */
  102942             : 
  102943             :       /* name Internal Functions
  102944             :           \brief Internal functions ... incomplete-documentation
  102945             : 
  102946             :           These functions have been made public as part of the design, but they are suggested for internal use 
  102947             :           or by particularly knowledgeable users for specialized tools or applications.
  102948             : 
  102949             :           \internal We could not make these private because they are required by user for special purposes. And 
  102950             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  102951             :          
  102952             :        */
  102953             : 
  102954             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  102955             :        // overridden in every class by *generated* implementation
  102956             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  102957             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  102958             :        // MS: 06/28/02 container of names of variables or container indices 
  102959             :        // used used in the traversal to access AST successor nodes
  102960             :        // overridden in every class by *generated* implementation
  102961             :       /*! \brief container of names of variables or container indices used used in the traversal
  102962             :           to access AST successor nodes overridden in every class by *generated* implementation */
  102963             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  102964             : 
  102965             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  102966             :        // than all the vector copies. The implementation for these functions is generated for each class.
  102967             :       /*! \brief return number of children in the traversal successor list */
  102968             :           virtual size_t get_numberOfTraversalSuccessors() override;
  102969             :       /*! \brief index-based access to traversal successors by index number */
  102970             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  102971             :       /*! \brief index-based access to traversal successors by child node */
  102972             :           virtual size_t get_childIndex(SgNode *child) override;
  102973             : 
  102974             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  102975             :        // MS: 08/16/2002 method for generating RTI information
  102976             :       /*! \brief return C++ Runtime-Time-Information */
  102977             :           virtual RTIReturnType roseRTI() override;
  102978             : #endif
  102979             :       /* */
  102980             : 
  102981             : 
  102982             : 
  102983             :       /* name Deprecated Functions
  102984             :           \brief Deprecated functions ... incomplete-documentation
  102985             : 
  102986             :           These functions have been deprecated from use.
  102987             :        */
  102988             :       /* */
  102989             : 
  102990             :       /*! returns a C style string (char*) representing the class name */
  102991             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  102992             : 
  102993             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  102994             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  102995             : #if 0
  102996             :       /*! returns old style Sage II enum values */
  102997             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  102998             :       /*! returns old style Sage II enum values */
  102999             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  103000             : #endif
  103001             :       /* */
  103002             : 
  103003             : 
  103004             : 
  103005             : 
  103006             :      public:
  103007             :       /* name Traversal Support Functions
  103008             :           \brief Traversal support functions ... incomplete-documentation
  103009             : 
  103010             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103011             :           or by particularly knowledgable users for specialized tools or applications.
  103012             :        */
  103013             :       /* */
  103014             : 
  103015             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  103016             :        // (inferior to ROSE traversal mechanism, experimental).
  103017             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  103018             :        */
  103019             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  103020             : 
  103021             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  103022             :       /*! \brief support for the classic visitor pattern done in GoF */
  103023             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  103024             : 
  103025             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  103026             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  103027             :        */
  103028             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  103029             : 
  103030             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  103031             :        */
  103032             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  103033             : 
  103034             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  103035             :        // This traversal helps support internal tools that call static member functions.
  103036             :        // note: this function operates on the memory pools.
  103037             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  103038             :        */
  103039             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  103040             :       /* */
  103041             : 
  103042             : 
  103043             :      public:
  103044             :       /* name Memory Allocation Functions
  103045             :           \brief Memory allocations functions ... incomplete-documentation
  103046             : 
  103047             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103048             :           or by particularly knowledgable users for specialized tools or applications.
  103049             :        */
  103050             :       /* */
  103051             : 
  103052             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  103053             : 
  103054             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  103055             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  103056             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  103057             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  103058             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  103059             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  103060             :           being used with the AST File I/O mechanism.
  103061             :        */
  103062             :           virtual bool isInMemoryPool() override;
  103063             : 
  103064             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  103065             : 
  103066             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  103067             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  103068             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  103069             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  103070             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  103071             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  103072             :           being used with the AST File I/O mechanism.
  103073             :        */
  103074             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  103075             : 
  103076             :       // DQ (4/30/2006): Modified to be a const function.
  103077             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  103078             : 
  103079             :           This functions is part of general support for many possible tools to operate 
  103080             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  103081             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  103082             :           less than the set of pointers used by the AST file I/O. This is part of
  103083             :           work implemented by Andreas, and support tools such as the AST graph generation.
  103084             : 
  103085             :           \warning This function can return unexpected data members and thus the 
  103086             :                    order and the number of elements is unpredicable and subject 
  103087             :                    to change.
  103088             : 
  103089             :           \returns STL vector of pairs of SgNode* and strings
  103090             :        */
  103091             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  103092             : 
  103093             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  103094             : 
  103095             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  103096             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  103097             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  103098             : 
  103099             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  103100             :                    and subject to change.
  103101             :        */
  103102             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  103103             : 
  103104             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  103105             : 
  103106             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  103107             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  103108             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  103109             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  103110             : 
  103111             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  103112             : 
  103113             :           \returns long
  103114             :        */
  103115             :           virtual long getChildIndex( SgNode* childNode ) const override;
  103116             : 
  103117             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  103118             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  103119             :       /* \brief Constructor for use by AST File I/O Mechanism
  103120             : 
  103121             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  103122             :           which obtained via fast binary file I/O from disk.
  103123             :        */
  103124             :        // SgOmpInbranchClause( SgOmpInbranchClauseStorageClass& source );
  103125             : 
  103126             : 
  103127             : 
  103128             : 
  103129             : 
  103130             :  // JH (10/24/2005): methods added to support the ast file IO
  103131             :     private:
  103132             : 
  103133             :       /* name AST Memory Allocation Support Functions
  103134             :           \brief Memory allocations support....
  103135             : 
  103136             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  103137             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  103138             :           and support the AST File I/O Mechanism.
  103139             :        */
  103140             :       /* */
  103141             : 
  103142             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  103143             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  103144             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  103145             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  103146             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  103147             :           a correspinding one in the AST_FILE_IO class!
  103148             :        */
  103149             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  103150             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  103151             :       /* \brief Typedef used for low level memory access.
  103152             :        */
  103153             :        // typedef unsigned char* TestType;
  103154             : 
  103155             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  103156             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  103157             :       /* \brief Typedef used to hold memory addresses as values.
  103158             :        */
  103159             :        // typedef unsigned long  AddressType;
  103160             : 
  103161             : 
  103162             : 
  103163             :        // necessary, to have direct access to the p_freepointer and the private methods !
  103164             :       /*! \brief friend class declaration to support AST File I/O */
  103165             :           friend class AST_FILE_IO;
  103166             : 
  103167             :       /*! \brief friend class declaration to support AST File I/O */
  103168             :           friend class SgOmpInbranchClauseStorageClass;
  103169             : 
  103170             :       /*! \brief friend class declaration to support AST File I/O */
  103171             :           friend class AstSpecificDataManagingClass;
  103172             : 
  103173             :       /*! \brief friend class declaration to support AST File I/O */
  103174             :           friend class AstSpecificDataManagingClassStorageClass;
  103175             :     public:
  103176             :       /*! \brief IR node constructor to support AST File I/O */
  103177             :           SgOmpInbranchClause( const SgOmpInbranchClauseStorageClass& source );
  103178             : 
  103179             :  // private: // JJW hack
  103180             :        /*
  103181             :           name AST Memory Allocation Support Variables
  103182             :           Memory allocations support variables 
  103183             : 
  103184             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  103185             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  103186             :           and support the AST File I/O Mechanism.
  103187             :        */
  103188             :       /* */
  103189             : 
  103190             :     public:
  103191             : 
  103192             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  103193             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  103194             :       // virtual SgNode* addRegExpAttribute();
  103195             :       /*! \brief Support for AST matching using regular expression.
  103196             : 
  103197             :           This support is incomplete and the subject of current research to define 
  103198             :           RegEx trees to support inexact matching.
  103199             :        */
  103200             :           SgOmpInbranchClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  103201             : 
  103202             : // *** COMMON CODE SECTION ENDS HERE ***
  103203             : 
  103204             : 
  103205             : // End of memberFunctionString
  103206             : // Start of memberFunctionString
  103207             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  103208             : 
  103209             :      // the generated cast function
  103210             :      // friend ROSE_DLL_API SgOmpInbranchClause* isSgOmpInbranchClause ( SgNode* s );
  103211             : 
  103212             :           typedef SgOmpClause base_node_type;
  103213             : 
  103214             : 
  103215             : // End of memberFunctionString
  103216             : 
  103217             : 
  103218             :      public: 
  103219             :          virtual ~SgOmpInbranchClause();
  103220             : 
  103221             : 
  103222             :      public: 
  103223             :          SgOmpInbranchClause(Sg_File_Info* startOfConstruct ); 
  103224             :          SgOmpInbranchClause(); 
  103225             : 
  103226             :     protected:
  103227             : 
  103228             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpInbranchClause>;
  103229             : 
  103230             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103231             : 
  103232             : 
  103233             :    };
  103234             : #endif
  103235             : 
  103236             : // postdeclarations for SgOmpInbranchClause
  103237             : 
  103238             : /* #line 103239 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103239             : 
  103240             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  103241             : 
  103242             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103243             : 
  103244             : 
  103245             : /* #line 103246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103246             : 
  103247             : 
  103248             : 
  103249             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103250             : 
  103251             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  103252             : //      This code is automatically generated for each 
  103253             : //      terminal and non-terminal within the defined 
  103254             : //      grammar.  There is a simple way to change the 
  103255             : //      code to fix bugs etc.  See the ROSE README file
  103256             : //      for directions.
  103257             : 
  103258             : // tps: (02/22/2010): Adding DLL export requirements
  103259             : #include "rosedll.h"
  103260             : 
  103261             : // predeclarations for SgOmpNotinbranchClause
  103262             : 
  103263             : /* #line 103264 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103264             : 
  103265             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  103266             : 
  103267             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103268             : 
  103269             : #if 1
  103270             : // Class Definition for SgOmpNotinbranchClause
  103271             : class ROSE_DLL_API SgOmpNotinbranchClause  : public SgOmpClause
  103272             :    {
  103273             :      public:
  103274             : 
  103275             : 
  103276             : /* #line 103277 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103277             : 
  103278             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  103279             : // Start of memberFunctionString
  103280             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  103281             : 
  103282             : // *** COMMON CODE SECTION BEGINS HERE ***
  103283             : 
  103284             :     public:
  103285             : 
  103286             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  103287             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  103288             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  103289             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  103290             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  103291             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  103292             : 
  103293             :       /*! \brief returns a string representing the class name */
  103294             :           virtual std::string class_name() const override;
  103295             : 
  103296             :       /*! \brief returns new style SageIII enum values */
  103297             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  103298             : 
  103299             :       /*! \brief static variant value */
  103300             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  103301             :        // static const VariantT static_variant = V_SgOmpNotinbranchClause;
  103302             :           enum { static_variant = V_SgOmpNotinbranchClause };
  103303             : 
  103304             :        /* the generated cast function */
  103305             :       /*! \brief Casts pointer from base class to derived class */
  103306             :           ROSE_DLL_API friend       SgOmpNotinbranchClause* isSgOmpNotinbranchClause(       SgNode * s );
  103307             : 
  103308             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  103309             :           ROSE_DLL_API friend const SgOmpNotinbranchClause* isSgOmpNotinbranchClause( const SgNode * s );
  103310             : 
  103311             :      // ******************************************
  103312             :      // * Memory Pool / New / Delete
  103313             :      // ******************************************
  103314             : 
  103315             :      public:
  103316             :           /// \private
  103317             :           static const unsigned pool_size; //
  103318             :           /// \private
  103319             :           static std::vector<unsigned char *> pools; //
  103320             :           /// \private
  103321             :           static SgOmpNotinbranchClause * next_node; // 
  103322             : 
  103323             :           /// \private
  103324             :           static unsigned long initializeStorageClassArray(SgOmpNotinbranchClauseStorageClass *); //
  103325             : 
  103326             :           /// \private
  103327             :           static void clearMemoryPool(); //
  103328             :           static void deleteMemoryPool(); //
  103329             : 
  103330             :           /// \private
  103331             :           static void extendMemoryPoolForFileIO(); //
  103332             : 
  103333             :           /// \private
  103334             :           static SgOmpNotinbranchClause * getPointerFromGlobalIndex(unsigned long); //
  103335             :           /// \private
  103336             :           static SgOmpNotinbranchClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  103337             : 
  103338             :           /// \private
  103339             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  103340             :           /// \private
  103341             :           static void resetValidFreepointers(); //
  103342             :           /// \private
  103343             :           static unsigned long getNumberOfLastValidPointer(); //
  103344             : 
  103345             : 
  103346             : #if defined(INLINE_FUNCTIONS)
  103347             :       /*! \brief returns pointer to newly allocated IR node */
  103348             :           inline void *operator new (size_t size);
  103349             : #else
  103350             :       /*! \brief returns pointer to newly allocated IR node */
  103351             :           void *operator new (size_t size);
  103352             : #endif
  103353             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  103354             :           void operator delete (void* pointer, size_t size);
  103355             : 
  103356             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  103357           0 :           void operator delete (void* pointer)
  103358             :              {
  103359             :             // This is the generated delete operator...
  103360           0 :                SgOmpNotinbranchClause::operator delete (pointer,sizeof(SgOmpNotinbranchClause));
  103361             :              }
  103362             : 
  103363             :       /*! \brief Returns the total number of IR nodes of this type */
  103364             :           static size_t numberOfNodes();
  103365             : 
  103366             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  103367             :           static size_t memoryUsage();
  103368             : 
  103369             :       // End of scope which started in IR nodes specific code 
  103370             :       /* */
  103371             : 
  103372             :       /* name Internal Functions
  103373             :           \brief Internal functions ... incomplete-documentation
  103374             : 
  103375             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103376             :           or by particularly knowledgeable users for specialized tools or applications.
  103377             : 
  103378             :           \internal We could not make these private because they are required by user for special purposes. And 
  103379             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  103380             :          
  103381             :        */
  103382             : 
  103383             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  103384             :        // overridden in every class by *generated* implementation
  103385             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  103386             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  103387             :        // MS: 06/28/02 container of names of variables or container indices 
  103388             :        // used used in the traversal to access AST successor nodes
  103389             :        // overridden in every class by *generated* implementation
  103390             :       /*! \brief container of names of variables or container indices used used in the traversal
  103391             :           to access AST successor nodes overridden in every class by *generated* implementation */
  103392             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  103393             : 
  103394             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  103395             :        // than all the vector copies. The implementation for these functions is generated for each class.
  103396             :       /*! \brief return number of children in the traversal successor list */
  103397             :           virtual size_t get_numberOfTraversalSuccessors() override;
  103398             :       /*! \brief index-based access to traversal successors by index number */
  103399             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  103400             :       /*! \brief index-based access to traversal successors by child node */
  103401             :           virtual size_t get_childIndex(SgNode *child) override;
  103402             : 
  103403             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  103404             :        // MS: 08/16/2002 method for generating RTI information
  103405             :       /*! \brief return C++ Runtime-Time-Information */
  103406             :           virtual RTIReturnType roseRTI() override;
  103407             : #endif
  103408             :       /* */
  103409             : 
  103410             : 
  103411             : 
  103412             :       /* name Deprecated Functions
  103413             :           \brief Deprecated functions ... incomplete-documentation
  103414             : 
  103415             :           These functions have been deprecated from use.
  103416             :        */
  103417             :       /* */
  103418             : 
  103419             :       /*! returns a C style string (char*) representing the class name */
  103420             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  103421             : 
  103422             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  103423             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  103424             : #if 0
  103425             :       /*! returns old style Sage II enum values */
  103426             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  103427             :       /*! returns old style Sage II enum values */
  103428             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  103429             : #endif
  103430             :       /* */
  103431             : 
  103432             : 
  103433             : 
  103434             : 
  103435             :      public:
  103436             :       /* name Traversal Support Functions
  103437             :           \brief Traversal support functions ... incomplete-documentation
  103438             : 
  103439             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103440             :           or by particularly knowledgable users for specialized tools or applications.
  103441             :        */
  103442             :       /* */
  103443             : 
  103444             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  103445             :        // (inferior to ROSE traversal mechanism, experimental).
  103446             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  103447             :        */
  103448             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  103449             : 
  103450             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  103451             :       /*! \brief support for the classic visitor pattern done in GoF */
  103452             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  103453             : 
  103454             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  103455             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  103456             :        */
  103457             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  103458             : 
  103459             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  103460             :        */
  103461             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  103462             : 
  103463             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  103464             :        // This traversal helps support internal tools that call static member functions.
  103465             :        // note: this function operates on the memory pools.
  103466             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  103467             :        */
  103468             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  103469             :       /* */
  103470             : 
  103471             : 
  103472             :      public:
  103473             :       /* name Memory Allocation Functions
  103474             :           \brief Memory allocations functions ... incomplete-documentation
  103475             : 
  103476             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103477             :           or by particularly knowledgable users for specialized tools or applications.
  103478             :        */
  103479             :       /* */
  103480             : 
  103481             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  103482             : 
  103483             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  103484             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  103485             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  103486             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  103487             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  103488             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  103489             :           being used with the AST File I/O mechanism.
  103490             :        */
  103491             :           virtual bool isInMemoryPool() override;
  103492             : 
  103493             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  103494             : 
  103495             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  103496             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  103497             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  103498             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  103499             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  103500             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  103501             :           being used with the AST File I/O mechanism.
  103502             :        */
  103503             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  103504             : 
  103505             :       // DQ (4/30/2006): Modified to be a const function.
  103506             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  103507             : 
  103508             :           This functions is part of general support for many possible tools to operate 
  103509             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  103510             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  103511             :           less than the set of pointers used by the AST file I/O. This is part of
  103512             :           work implemented by Andreas, and support tools such as the AST graph generation.
  103513             : 
  103514             :           \warning This function can return unexpected data members and thus the 
  103515             :                    order and the number of elements is unpredicable and subject 
  103516             :                    to change.
  103517             : 
  103518             :           \returns STL vector of pairs of SgNode* and strings
  103519             :        */
  103520             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  103521             : 
  103522             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  103523             : 
  103524             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  103525             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  103526             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  103527             : 
  103528             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  103529             :                    and subject to change.
  103530             :        */
  103531             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  103532             : 
  103533             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  103534             : 
  103535             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  103536             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  103537             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  103538             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  103539             : 
  103540             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  103541             : 
  103542             :           \returns long
  103543             :        */
  103544             :           virtual long getChildIndex( SgNode* childNode ) const override;
  103545             : 
  103546             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  103547             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  103548             :       /* \brief Constructor for use by AST File I/O Mechanism
  103549             : 
  103550             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  103551             :           which obtained via fast binary file I/O from disk.
  103552             :        */
  103553             :        // SgOmpNotinbranchClause( SgOmpNotinbranchClauseStorageClass& source );
  103554             : 
  103555             : 
  103556             : 
  103557             : 
  103558             : 
  103559             :  // JH (10/24/2005): methods added to support the ast file IO
  103560             :     private:
  103561             : 
  103562             :       /* name AST Memory Allocation Support Functions
  103563             :           \brief Memory allocations support....
  103564             : 
  103565             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  103566             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  103567             :           and support the AST File I/O Mechanism.
  103568             :        */
  103569             :       /* */
  103570             : 
  103571             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  103572             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  103573             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  103574             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  103575             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  103576             :           a correspinding one in the AST_FILE_IO class!
  103577             :        */
  103578             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  103579             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  103580             :       /* \brief Typedef used for low level memory access.
  103581             :        */
  103582             :        // typedef unsigned char* TestType;
  103583             : 
  103584             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  103585             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  103586             :       /* \brief Typedef used to hold memory addresses as values.
  103587             :        */
  103588             :        // typedef unsigned long  AddressType;
  103589             : 
  103590             : 
  103591             : 
  103592             :        // necessary, to have direct access to the p_freepointer and the private methods !
  103593             :       /*! \brief friend class declaration to support AST File I/O */
  103594             :           friend class AST_FILE_IO;
  103595             : 
  103596             :       /*! \brief friend class declaration to support AST File I/O */
  103597             :           friend class SgOmpNotinbranchClauseStorageClass;
  103598             : 
  103599             :       /*! \brief friend class declaration to support AST File I/O */
  103600             :           friend class AstSpecificDataManagingClass;
  103601             : 
  103602             :       /*! \brief friend class declaration to support AST File I/O */
  103603             :           friend class AstSpecificDataManagingClassStorageClass;
  103604             :     public:
  103605             :       /*! \brief IR node constructor to support AST File I/O */
  103606             :           SgOmpNotinbranchClause( const SgOmpNotinbranchClauseStorageClass& source );
  103607             : 
  103608             :  // private: // JJW hack
  103609             :        /*
  103610             :           name AST Memory Allocation Support Variables
  103611             :           Memory allocations support variables 
  103612             : 
  103613             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  103614             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  103615             :           and support the AST File I/O Mechanism.
  103616             :        */
  103617             :       /* */
  103618             : 
  103619             :     public:
  103620             : 
  103621             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  103622             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  103623             :       // virtual SgNode* addRegExpAttribute();
  103624             :       /*! \brief Support for AST matching using regular expression.
  103625             : 
  103626             :           This support is incomplete and the subject of current research to define 
  103627             :           RegEx trees to support inexact matching.
  103628             :        */
  103629             :           SgOmpNotinbranchClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  103630             : 
  103631             : // *** COMMON CODE SECTION ENDS HERE ***
  103632             : 
  103633             : 
  103634             : // End of memberFunctionString
  103635             : // Start of memberFunctionString
  103636             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  103637             : 
  103638             :      // the generated cast function
  103639             :      // friend ROSE_DLL_API SgOmpNotinbranchClause* isSgOmpNotinbranchClause ( SgNode* s );
  103640             : 
  103641             :           typedef SgOmpClause base_node_type;
  103642             : 
  103643             : 
  103644             : // End of memberFunctionString
  103645             : 
  103646             : 
  103647             :      public: 
  103648             :          virtual ~SgOmpNotinbranchClause();
  103649             : 
  103650             : 
  103651             :      public: 
  103652             :          SgOmpNotinbranchClause(Sg_File_Info* startOfConstruct ); 
  103653             :          SgOmpNotinbranchClause(); 
  103654             : 
  103655             :     protected:
  103656             : 
  103657             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpNotinbranchClause>;
  103658             : 
  103659             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103660             : 
  103661             : 
  103662             :    };
  103663             : #endif
  103664             : 
  103665             : // postdeclarations for SgOmpNotinbranchClause
  103666             : 
  103667             : /* #line 103668 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103668             : 
  103669             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  103670             : 
  103671             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103672             : 
  103673             : 
  103674             : /* #line 103675 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103675             : 
  103676             : 
  103677             : 
  103678             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103679             : 
  103680             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  103681             : //      This code is automatically generated for each 
  103682             : //      terminal and non-terminal within the defined 
  103683             : //      grammar.  There is a simple way to change the 
  103684             : //      code to fix bugs etc.  See the ROSE README file
  103685             : //      for directions.
  103686             : 
  103687             : // tps: (02/22/2010): Adding DLL export requirements
  103688             : #include "rosedll.h"
  103689             : 
  103690             : // predeclarations for SgOmpDefaultmapClause
  103691             : 
  103692             : /* #line 103693 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103693             : 
  103694             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  103695             : 
  103696             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  103697             : 
  103698             : #if 1
  103699             : // Class Definition for SgOmpDefaultmapClause
  103700             : class ROSE_DLL_API SgOmpDefaultmapClause  : public SgOmpClause
  103701             :    {
  103702             :      public:
  103703             : 
  103704             : 
  103705             : /* #line 103706 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  103706             : 
  103707             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  103708             : // Start of memberFunctionString
  103709             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  103710             : 
  103711             : // *** COMMON CODE SECTION BEGINS HERE ***
  103712             : 
  103713             :     public:
  103714             : 
  103715             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  103716             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  103717             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  103718             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  103719             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  103720             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  103721             : 
  103722             :       /*! \brief returns a string representing the class name */
  103723             :           virtual std::string class_name() const override;
  103724             : 
  103725             :       /*! \brief returns new style SageIII enum values */
  103726             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  103727             : 
  103728             :       /*! \brief static variant value */
  103729             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  103730             :        // static const VariantT static_variant = V_SgOmpDefaultmapClause;
  103731             :           enum { static_variant = V_SgOmpDefaultmapClause };
  103732             : 
  103733             :        /* the generated cast function */
  103734             :       /*! \brief Casts pointer from base class to derived class */
  103735             :           ROSE_DLL_API friend       SgOmpDefaultmapClause* isSgOmpDefaultmapClause(       SgNode * s );
  103736             : 
  103737             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  103738             :           ROSE_DLL_API friend const SgOmpDefaultmapClause* isSgOmpDefaultmapClause( const SgNode * s );
  103739             : 
  103740             :      // ******************************************
  103741             :      // * Memory Pool / New / Delete
  103742             :      // ******************************************
  103743             : 
  103744             :      public:
  103745             :           /// \private
  103746             :           static const unsigned pool_size; //
  103747             :           /// \private
  103748             :           static std::vector<unsigned char *> pools; //
  103749             :           /// \private
  103750             :           static SgOmpDefaultmapClause * next_node; // 
  103751             : 
  103752             :           /// \private
  103753             :           static unsigned long initializeStorageClassArray(SgOmpDefaultmapClauseStorageClass *); //
  103754             : 
  103755             :           /// \private
  103756             :           static void clearMemoryPool(); //
  103757             :           static void deleteMemoryPool(); //
  103758             : 
  103759             :           /// \private
  103760             :           static void extendMemoryPoolForFileIO(); //
  103761             : 
  103762             :           /// \private
  103763             :           static SgOmpDefaultmapClause * getPointerFromGlobalIndex(unsigned long); //
  103764             :           /// \private
  103765             :           static SgOmpDefaultmapClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  103766             : 
  103767             :           /// \private
  103768             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  103769             :           /// \private
  103770             :           static void resetValidFreepointers(); //
  103771             :           /// \private
  103772             :           static unsigned long getNumberOfLastValidPointer(); //
  103773             : 
  103774             : 
  103775             : #if defined(INLINE_FUNCTIONS)
  103776             :       /*! \brief returns pointer to newly allocated IR node */
  103777             :           inline void *operator new (size_t size);
  103778             : #else
  103779             :       /*! \brief returns pointer to newly allocated IR node */
  103780             :           void *operator new (size_t size);
  103781             : #endif
  103782             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  103783             :           void operator delete (void* pointer, size_t size);
  103784             : 
  103785             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  103786           0 :           void operator delete (void* pointer)
  103787             :              {
  103788             :             // This is the generated delete operator...
  103789           0 :                SgOmpDefaultmapClause::operator delete (pointer,sizeof(SgOmpDefaultmapClause));
  103790             :              }
  103791             : 
  103792             :       /*! \brief Returns the total number of IR nodes of this type */
  103793             :           static size_t numberOfNodes();
  103794             : 
  103795             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  103796             :           static size_t memoryUsage();
  103797             : 
  103798             :       // End of scope which started in IR nodes specific code 
  103799             :       /* */
  103800             : 
  103801             :       /* name Internal Functions
  103802             :           \brief Internal functions ... incomplete-documentation
  103803             : 
  103804             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103805             :           or by particularly knowledgeable users for specialized tools or applications.
  103806             : 
  103807             :           \internal We could not make these private because they are required by user for special purposes. And 
  103808             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  103809             :          
  103810             :        */
  103811             : 
  103812             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  103813             :        // overridden in every class by *generated* implementation
  103814             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  103815             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  103816             :        // MS: 06/28/02 container of names of variables or container indices 
  103817             :        // used used in the traversal to access AST successor nodes
  103818             :        // overridden in every class by *generated* implementation
  103819             :       /*! \brief container of names of variables or container indices used used in the traversal
  103820             :           to access AST successor nodes overridden in every class by *generated* implementation */
  103821             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  103822             : 
  103823             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  103824             :        // than all the vector copies. The implementation for these functions is generated for each class.
  103825             :       /*! \brief return number of children in the traversal successor list */
  103826             :           virtual size_t get_numberOfTraversalSuccessors() override;
  103827             :       /*! \brief index-based access to traversal successors by index number */
  103828             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  103829             :       /*! \brief index-based access to traversal successors by child node */
  103830             :           virtual size_t get_childIndex(SgNode *child) override;
  103831             : 
  103832             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  103833             :        // MS: 08/16/2002 method for generating RTI information
  103834             :       /*! \brief return C++ Runtime-Time-Information */
  103835             :           virtual RTIReturnType roseRTI() override;
  103836             : #endif
  103837             :       /* */
  103838             : 
  103839             : 
  103840             : 
  103841             :       /* name Deprecated Functions
  103842             :           \brief Deprecated functions ... incomplete-documentation
  103843             : 
  103844             :           These functions have been deprecated from use.
  103845             :        */
  103846             :       /* */
  103847             : 
  103848             :       /*! returns a C style string (char*) representing the class name */
  103849             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  103850             : 
  103851             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  103852             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  103853             : #if 0
  103854             :       /*! returns old style Sage II enum values */
  103855             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  103856             :       /*! returns old style Sage II enum values */
  103857             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  103858             : #endif
  103859             :       /* */
  103860             : 
  103861             : 
  103862             : 
  103863             : 
  103864             :      public:
  103865             :       /* name Traversal Support Functions
  103866             :           \brief Traversal support functions ... incomplete-documentation
  103867             : 
  103868             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103869             :           or by particularly knowledgable users for specialized tools or applications.
  103870             :        */
  103871             :       /* */
  103872             : 
  103873             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  103874             :        // (inferior to ROSE traversal mechanism, experimental).
  103875             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  103876             :        */
  103877             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  103878             : 
  103879             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  103880             :       /*! \brief support for the classic visitor pattern done in GoF */
  103881             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  103882             : 
  103883             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  103884             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  103885             :        */
  103886             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  103887             : 
  103888             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  103889             :        */
  103890             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  103891             : 
  103892             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  103893             :        // This traversal helps support internal tools that call static member functions.
  103894             :        // note: this function operates on the memory pools.
  103895             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  103896             :        */
  103897             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  103898             :       /* */
  103899             : 
  103900             : 
  103901             :      public:
  103902             :       /* name Memory Allocation Functions
  103903             :           \brief Memory allocations functions ... incomplete-documentation
  103904             : 
  103905             :           These functions have been made public as part of the design, but they are suggested for internal use 
  103906             :           or by particularly knowledgable users for specialized tools or applications.
  103907             :        */
  103908             :       /* */
  103909             : 
  103910             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  103911             : 
  103912             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  103913             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  103914             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  103915             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  103916             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  103917             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  103918             :           being used with the AST File I/O mechanism.
  103919             :        */
  103920             :           virtual bool isInMemoryPool() override;
  103921             : 
  103922             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  103923             : 
  103924             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  103925             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  103926             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  103927             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  103928             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  103929             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  103930             :           being used with the AST File I/O mechanism.
  103931             :        */
  103932             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  103933             : 
  103934             :       // DQ (4/30/2006): Modified to be a const function.
  103935             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  103936             : 
  103937             :           This functions is part of general support for many possible tools to operate 
  103938             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  103939             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  103940             :           less than the set of pointers used by the AST file I/O. This is part of
  103941             :           work implemented by Andreas, and support tools such as the AST graph generation.
  103942             : 
  103943             :           \warning This function can return unexpected data members and thus the 
  103944             :                    order and the number of elements is unpredicable and subject 
  103945             :                    to change.
  103946             : 
  103947             :           \returns STL vector of pairs of SgNode* and strings
  103948             :        */
  103949             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  103950             : 
  103951             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  103952             : 
  103953             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  103954             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  103955             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  103956             : 
  103957             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  103958             :                    and subject to change.
  103959             :        */
  103960             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  103961             : 
  103962             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  103963             : 
  103964             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  103965             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  103966             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  103967             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  103968             : 
  103969             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  103970             : 
  103971             :           \returns long
  103972             :        */
  103973             :           virtual long getChildIndex( SgNode* childNode ) const override;
  103974             : 
  103975             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  103976             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  103977             :       /* \brief Constructor for use by AST File I/O Mechanism
  103978             : 
  103979             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  103980             :           which obtained via fast binary file I/O from disk.
  103981             :        */
  103982             :        // SgOmpDefaultmapClause( SgOmpDefaultmapClauseStorageClass& source );
  103983             : 
  103984             : 
  103985             : 
  103986             : 
  103987             : 
  103988             :  // JH (10/24/2005): methods added to support the ast file IO
  103989             :     private:
  103990             : 
  103991             :       /* name AST Memory Allocation Support Functions
  103992             :           \brief Memory allocations support....
  103993             : 
  103994             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  103995             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  103996             :           and support the AST File I/O Mechanism.
  103997             :        */
  103998             :       /* */
  103999             : 
  104000             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  104001             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  104002             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  104003             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  104004             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  104005             :           a correspinding one in the AST_FILE_IO class!
  104006             :        */
  104007             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  104008             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104009             :       /* \brief Typedef used for low level memory access.
  104010             :        */
  104011             :        // typedef unsigned char* TestType;
  104012             : 
  104013             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  104014             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104015             :       /* \brief Typedef used to hold memory addresses as values.
  104016             :        */
  104017             :        // typedef unsigned long  AddressType;
  104018             : 
  104019             : 
  104020             : 
  104021             :        // necessary, to have direct access to the p_freepointer and the private methods !
  104022             :       /*! \brief friend class declaration to support AST File I/O */
  104023             :           friend class AST_FILE_IO;
  104024             : 
  104025             :       /*! \brief friend class declaration to support AST File I/O */
  104026             :           friend class SgOmpDefaultmapClauseStorageClass;
  104027             : 
  104028             :       /*! \brief friend class declaration to support AST File I/O */
  104029             :           friend class AstSpecificDataManagingClass;
  104030             : 
  104031             :       /*! \brief friend class declaration to support AST File I/O */
  104032             :           friend class AstSpecificDataManagingClassStorageClass;
  104033             :     public:
  104034             :       /*! \brief IR node constructor to support AST File I/O */
  104035             :           SgOmpDefaultmapClause( const SgOmpDefaultmapClauseStorageClass& source );
  104036             : 
  104037             :  // private: // JJW hack
  104038             :        /*
  104039             :           name AST Memory Allocation Support Variables
  104040             :           Memory allocations support variables 
  104041             : 
  104042             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  104043             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  104044             :           and support the AST File I/O Mechanism.
  104045             :        */
  104046             :       /* */
  104047             : 
  104048             :     public:
  104049             : 
  104050             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  104051             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  104052             :       // virtual SgNode* addRegExpAttribute();
  104053             :       /*! \brief Support for AST matching using regular expression.
  104054             : 
  104055             :           This support is incomplete and the subject of current research to define 
  104056             :           RegEx trees to support inexact matching.
  104057             :        */
  104058             :           SgOmpDefaultmapClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  104059             : 
  104060             : // *** COMMON CODE SECTION ENDS HERE ***
  104061             : 
  104062             : 
  104063             : // End of memberFunctionString
  104064             : // Start of memberFunctionString
  104065             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  104066             : 
  104067             :      // the generated cast function
  104068             :      // friend ROSE_DLL_API SgOmpDefaultmapClause* isSgOmpDefaultmapClause ( SgNode* s );
  104069             : 
  104070             :           typedef SgOmpClause base_node_type;
  104071             : 
  104072             : 
  104073             : // End of memberFunctionString
  104074             : 
  104075             :      public: 
  104076             :          SgOmpClause::omp_defaultmap_behavior_enum get_behavior() const;
  104077             :          void set_behavior(SgOmpClause::omp_defaultmap_behavior_enum behavior);
  104078             : 
  104079             :      public: 
  104080             :          SgOmpClause::omp_defaultmap_category_enum get_category() const;
  104081             :          void set_category(SgOmpClause::omp_defaultmap_category_enum category);
  104082             : 
  104083             : 
  104084             :      public: 
  104085             :          virtual ~SgOmpDefaultmapClause();
  104086             : 
  104087             : 
  104088             :      public: 
  104089             :          SgOmpDefaultmapClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_defaultmap_behavior_enum behavior =e_omp_defaultmap_behavior_unspecified, SgOmpClause::omp_defaultmap_category_enum category =e_omp_defaultmap_category_unspecified); 
  104090             :          SgOmpDefaultmapClause(SgOmpClause::omp_defaultmap_behavior_enum behavior, SgOmpClause::omp_defaultmap_category_enum category); 
  104091             : 
  104092             :     protected:
  104093             : // Start of memberFunctionString
  104094             : SgOmpClause::omp_defaultmap_behavior_enum p_behavior;
  104095             :           
  104096             : // End of memberFunctionString
  104097             : // Start of memberFunctionString
  104098             : SgOmpClause::omp_defaultmap_category_enum p_category;
  104099             :           
  104100             : // End of memberFunctionString
  104101             : 
  104102             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDefaultmapClause>;
  104103             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDefaultmapClause, SgOmpClause::omp_defaultmap_behavior_enum,&SgOmpDefaultmapClause::p_behavior>;
  104104             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDefaultmapClause, SgOmpClause::omp_defaultmap_category_enum,&SgOmpDefaultmapClause::p_category>;
  104105             : 
  104106             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104107             : 
  104108             : 
  104109             :    };
  104110             : #endif
  104111             : 
  104112             : // postdeclarations for SgOmpDefaultmapClause
  104113             : 
  104114             : /* #line 104115 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104115             : 
  104116             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  104117             : 
  104118             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104119             : 
  104120             : 
  104121             : /* #line 104122 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104122             : 
  104123             : 
  104124             : 
  104125             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104126             : 
  104127             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  104128             : //      This code is automatically generated for each 
  104129             : //      terminal and non-terminal within the defined 
  104130             : //      grammar.  There is a simple way to change the 
  104131             : //      code to fix bugs etc.  See the ROSE README file
  104132             : //      for directions.
  104133             : 
  104134             : // tps: (02/22/2010): Adding DLL export requirements
  104135             : #include "rosedll.h"
  104136             : 
  104137             : // predeclarations for SgOmpAtomicDefaultMemOrderClause
  104138             : 
  104139             : /* #line 104140 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104140             : 
  104141             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  104142             : 
  104143             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104144             : 
  104145             : #if 1
  104146             : // Class Definition for SgOmpAtomicDefaultMemOrderClause
  104147             : class ROSE_DLL_API SgOmpAtomicDefaultMemOrderClause  : public SgOmpClause
  104148             :    {
  104149             :      public:
  104150             : 
  104151             : 
  104152             : /* #line 104153 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104153             : 
  104154             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  104155             : // Start of memberFunctionString
  104156             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  104157             : 
  104158             : // *** COMMON CODE SECTION BEGINS HERE ***
  104159             : 
  104160             :     public:
  104161             : 
  104162             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  104163             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  104164             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  104165             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  104166             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  104167             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  104168             : 
  104169             :       /*! \brief returns a string representing the class name */
  104170             :           virtual std::string class_name() const override;
  104171             : 
  104172             :       /*! \brief returns new style SageIII enum values */
  104173             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  104174             : 
  104175             :       /*! \brief static variant value */
  104176             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  104177             :        // static const VariantT static_variant = V_SgOmpAtomicDefaultMemOrderClause;
  104178             :           enum { static_variant = V_SgOmpAtomicDefaultMemOrderClause };
  104179             : 
  104180             :        /* the generated cast function */
  104181             :       /*! \brief Casts pointer from base class to derived class */
  104182             :           ROSE_DLL_API friend       SgOmpAtomicDefaultMemOrderClause* isSgOmpAtomicDefaultMemOrderClause(       SgNode * s );
  104183             : 
  104184             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  104185             :           ROSE_DLL_API friend const SgOmpAtomicDefaultMemOrderClause* isSgOmpAtomicDefaultMemOrderClause( const SgNode * s );
  104186             : 
  104187             :      // ******************************************
  104188             :      // * Memory Pool / New / Delete
  104189             :      // ******************************************
  104190             : 
  104191             :      public:
  104192             :           /// \private
  104193             :           static const unsigned pool_size; //
  104194             :           /// \private
  104195             :           static std::vector<unsigned char *> pools; //
  104196             :           /// \private
  104197             :           static SgOmpAtomicDefaultMemOrderClause * next_node; // 
  104198             : 
  104199             :           /// \private
  104200             :           static unsigned long initializeStorageClassArray(SgOmpAtomicDefaultMemOrderClauseStorageClass *); //
  104201             : 
  104202             :           /// \private
  104203             :           static void clearMemoryPool(); //
  104204             :           static void deleteMemoryPool(); //
  104205             : 
  104206             :           /// \private
  104207             :           static void extendMemoryPoolForFileIO(); //
  104208             : 
  104209             :           /// \private
  104210             :           static SgOmpAtomicDefaultMemOrderClause * getPointerFromGlobalIndex(unsigned long); //
  104211             :           /// \private
  104212             :           static SgOmpAtomicDefaultMemOrderClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  104213             : 
  104214             :           /// \private
  104215             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  104216             :           /// \private
  104217             :           static void resetValidFreepointers(); //
  104218             :           /// \private
  104219             :           static unsigned long getNumberOfLastValidPointer(); //
  104220             : 
  104221             : 
  104222             : #if defined(INLINE_FUNCTIONS)
  104223             :       /*! \brief returns pointer to newly allocated IR node */
  104224             :           inline void *operator new (size_t size);
  104225             : #else
  104226             :       /*! \brief returns pointer to newly allocated IR node */
  104227             :           void *operator new (size_t size);
  104228             : #endif
  104229             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  104230             :           void operator delete (void* pointer, size_t size);
  104231             : 
  104232             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  104233           0 :           void operator delete (void* pointer)
  104234             :              {
  104235             :             // This is the generated delete operator...
  104236           0 :                SgOmpAtomicDefaultMemOrderClause::operator delete (pointer,sizeof(SgOmpAtomicDefaultMemOrderClause));
  104237             :              }
  104238             : 
  104239             :       /*! \brief Returns the total number of IR nodes of this type */
  104240             :           static size_t numberOfNodes();
  104241             : 
  104242             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  104243             :           static size_t memoryUsage();
  104244             : 
  104245             :       // End of scope which started in IR nodes specific code 
  104246             :       /* */
  104247             : 
  104248             :       /* name Internal Functions
  104249             :           \brief Internal functions ... incomplete-documentation
  104250             : 
  104251             :           These functions have been made public as part of the design, but they are suggested for internal use 
  104252             :           or by particularly knowledgeable users for specialized tools or applications.
  104253             : 
  104254             :           \internal We could not make these private because they are required by user for special purposes. And 
  104255             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  104256             :          
  104257             :        */
  104258             : 
  104259             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  104260             :        // overridden in every class by *generated* implementation
  104261             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  104262             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  104263             :        // MS: 06/28/02 container of names of variables or container indices 
  104264             :        // used used in the traversal to access AST successor nodes
  104265             :        // overridden in every class by *generated* implementation
  104266             :       /*! \brief container of names of variables or container indices used used in the traversal
  104267             :           to access AST successor nodes overridden in every class by *generated* implementation */
  104268             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  104269             : 
  104270             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  104271             :        // than all the vector copies. The implementation for these functions is generated for each class.
  104272             :       /*! \brief return number of children in the traversal successor list */
  104273             :           virtual size_t get_numberOfTraversalSuccessors() override;
  104274             :       /*! \brief index-based access to traversal successors by index number */
  104275             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  104276             :       /*! \brief index-based access to traversal successors by child node */
  104277             :           virtual size_t get_childIndex(SgNode *child) override;
  104278             : 
  104279             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  104280             :        // MS: 08/16/2002 method for generating RTI information
  104281             :       /*! \brief return C++ Runtime-Time-Information */
  104282             :           virtual RTIReturnType roseRTI() override;
  104283             : #endif
  104284             :       /* */
  104285             : 
  104286             : 
  104287             : 
  104288             :       /* name Deprecated Functions
  104289             :           \brief Deprecated functions ... incomplete-documentation
  104290             : 
  104291             :           These functions have been deprecated from use.
  104292             :        */
  104293             :       /* */
  104294             : 
  104295             :       /*! returns a C style string (char*) representing the class name */
  104296             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  104297             : 
  104298             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  104299             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  104300             : #if 0
  104301             :       /*! returns old style Sage II enum values */
  104302             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  104303             :       /*! returns old style Sage II enum values */
  104304             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  104305             : #endif
  104306             :       /* */
  104307             : 
  104308             : 
  104309             : 
  104310             : 
  104311             :      public:
  104312             :       /* name Traversal Support Functions
  104313             :           \brief Traversal support functions ... incomplete-documentation
  104314             : 
  104315             :           These functions have been made public as part of the design, but they are suggested for internal use 
  104316             :           or by particularly knowledgable users for specialized tools or applications.
  104317             :        */
  104318             :       /* */
  104319             : 
  104320             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  104321             :        // (inferior to ROSE traversal mechanism, experimental).
  104322             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  104323             :        */
  104324             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  104325             : 
  104326             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  104327             :       /*! \brief support for the classic visitor pattern done in GoF */
  104328             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  104329             : 
  104330             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  104331             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  104332             :        */
  104333             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  104334             : 
  104335             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  104336             :        */
  104337             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  104338             : 
  104339             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  104340             :        // This traversal helps support internal tools that call static member functions.
  104341             :        // note: this function operates on the memory pools.
  104342             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  104343             :        */
  104344             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  104345             :       /* */
  104346             : 
  104347             : 
  104348             :      public:
  104349             :       /* name Memory Allocation Functions
  104350             :           \brief Memory allocations functions ... incomplete-documentation
  104351             : 
  104352             :           These functions have been made public as part of the design, but they are suggested for internal use 
  104353             :           or by particularly knowledgable users for specialized tools or applications.
  104354             :        */
  104355             :       /* */
  104356             : 
  104357             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  104358             : 
  104359             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  104360             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  104361             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  104362             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  104363             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  104364             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  104365             :           being used with the AST File I/O mechanism.
  104366             :        */
  104367             :           virtual bool isInMemoryPool() override;
  104368             : 
  104369             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  104370             : 
  104371             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  104372             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  104373             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  104374             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  104375             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  104376             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  104377             :           being used with the AST File I/O mechanism.
  104378             :        */
  104379             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  104380             : 
  104381             :       // DQ (4/30/2006): Modified to be a const function.
  104382             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  104383             : 
  104384             :           This functions is part of general support for many possible tools to operate 
  104385             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  104386             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  104387             :           less than the set of pointers used by the AST file I/O. This is part of
  104388             :           work implemented by Andreas, and support tools such as the AST graph generation.
  104389             : 
  104390             :           \warning This function can return unexpected data members and thus the 
  104391             :                    order and the number of elements is unpredicable and subject 
  104392             :                    to change.
  104393             : 
  104394             :           \returns STL vector of pairs of SgNode* and strings
  104395             :        */
  104396             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  104397             : 
  104398             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  104399             : 
  104400             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  104401             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  104402             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  104403             : 
  104404             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  104405             :                    and subject to change.
  104406             :        */
  104407             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  104408             : 
  104409             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  104410             : 
  104411             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  104412             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  104413             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  104414             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  104415             : 
  104416             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  104417             : 
  104418             :           \returns long
  104419             :        */
  104420             :           virtual long getChildIndex( SgNode* childNode ) const override;
  104421             : 
  104422             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  104423             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104424             :       /* \brief Constructor for use by AST File I/O Mechanism
  104425             : 
  104426             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  104427             :           which obtained via fast binary file I/O from disk.
  104428             :        */
  104429             :        // SgOmpAtomicDefaultMemOrderClause( SgOmpAtomicDefaultMemOrderClauseStorageClass& source );
  104430             : 
  104431             : 
  104432             : 
  104433             : 
  104434             : 
  104435             :  // JH (10/24/2005): methods added to support the ast file IO
  104436             :     private:
  104437             : 
  104438             :       /* name AST Memory Allocation Support Functions
  104439             :           \brief Memory allocations support....
  104440             : 
  104441             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  104442             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  104443             :           and support the AST File I/O Mechanism.
  104444             :        */
  104445             :       /* */
  104446             : 
  104447             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  104448             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  104449             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  104450             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  104451             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  104452             :           a correspinding one in the AST_FILE_IO class!
  104453             :        */
  104454             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  104455             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104456             :       /* \brief Typedef used for low level memory access.
  104457             :        */
  104458             :        // typedef unsigned char* TestType;
  104459             : 
  104460             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  104461             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104462             :       /* \brief Typedef used to hold memory addresses as values.
  104463             :        */
  104464             :        // typedef unsigned long  AddressType;
  104465             : 
  104466             : 
  104467             : 
  104468             :        // necessary, to have direct access to the p_freepointer and the private methods !
  104469             :       /*! \brief friend class declaration to support AST File I/O */
  104470             :           friend class AST_FILE_IO;
  104471             : 
  104472             :       /*! \brief friend class declaration to support AST File I/O */
  104473             :           friend class SgOmpAtomicDefaultMemOrderClauseStorageClass;
  104474             : 
  104475             :       /*! \brief friend class declaration to support AST File I/O */
  104476             :           friend class AstSpecificDataManagingClass;
  104477             : 
  104478             :       /*! \brief friend class declaration to support AST File I/O */
  104479             :           friend class AstSpecificDataManagingClassStorageClass;
  104480             :     public:
  104481             :       /*! \brief IR node constructor to support AST File I/O */
  104482             :           SgOmpAtomicDefaultMemOrderClause( const SgOmpAtomicDefaultMemOrderClauseStorageClass& source );
  104483             : 
  104484             :  // private: // JJW hack
  104485             :        /*
  104486             :           name AST Memory Allocation Support Variables
  104487             :           Memory allocations support variables 
  104488             : 
  104489             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  104490             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  104491             :           and support the AST File I/O Mechanism.
  104492             :        */
  104493             :       /* */
  104494             : 
  104495             :     public:
  104496             : 
  104497             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  104498             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  104499             :       // virtual SgNode* addRegExpAttribute();
  104500             :       /*! \brief Support for AST matching using regular expression.
  104501             : 
  104502             :           This support is incomplete and the subject of current research to define 
  104503             :           RegEx trees to support inexact matching.
  104504             :        */
  104505             :           SgOmpAtomicDefaultMemOrderClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  104506             : 
  104507             : // *** COMMON CODE SECTION ENDS HERE ***
  104508             : 
  104509             : 
  104510             : // End of memberFunctionString
  104511             : // Start of memberFunctionString
  104512             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  104513             : 
  104514             :      // the generated cast function
  104515             :      // friend ROSE_DLL_API SgOmpAtomicDefaultMemOrderClause* isSgOmpAtomicDefaultMemOrderClause ( SgNode* s );
  104516             : 
  104517             :           typedef SgOmpClause base_node_type;
  104518             : 
  104519             : 
  104520             : // End of memberFunctionString
  104521             : 
  104522             :      public: 
  104523             :          SgOmpClause::omp_atomic_default_mem_order_kind_enum get_kind() const;
  104524             :          void set_kind(SgOmpClause::omp_atomic_default_mem_order_kind_enum kind);
  104525             : 
  104526             : 
  104527             :      public: 
  104528             :          virtual ~SgOmpAtomicDefaultMemOrderClause();
  104529             : 
  104530             : 
  104531             :      public: 
  104532             :          SgOmpAtomicDefaultMemOrderClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_atomic_default_mem_order_kind_enum kind =e_omp_atomic_default_mem_order_kind_unspecified); 
  104533             :          SgOmpAtomicDefaultMemOrderClause(SgOmpClause::omp_atomic_default_mem_order_kind_enum kind); 
  104534             : 
  104535             :     protected:
  104536             : // Start of memberFunctionString
  104537             : SgOmpClause::omp_atomic_default_mem_order_kind_enum p_kind;
  104538             :           
  104539             : // End of memberFunctionString
  104540             : 
  104541             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAtomicDefaultMemOrderClause>;
  104542             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAtomicDefaultMemOrderClause, SgOmpClause::omp_atomic_default_mem_order_kind_enum,&SgOmpAtomicDefaultMemOrderClause::p_kind>;
  104543             : 
  104544             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104545             : 
  104546             : 
  104547             :    };
  104548             : #endif
  104549             : 
  104550             : // postdeclarations for SgOmpAtomicDefaultMemOrderClause
  104551             : 
  104552             : /* #line 104553 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104553             : 
  104554             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  104555             : 
  104556             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104557             : 
  104558             : 
  104559             : /* #line 104560 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104560             : 
  104561             : 
  104562             : 
  104563             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104564             : 
  104565             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  104566             : //      This code is automatically generated for each 
  104567             : //      terminal and non-terminal within the defined 
  104568             : //      grammar.  There is a simple way to change the 
  104569             : //      code to fix bugs etc.  See the ROSE README file
  104570             : //      for directions.
  104571             : 
  104572             : // tps: (02/22/2010): Adding DLL export requirements
  104573             : #include "rosedll.h"
  104574             : 
  104575             : // predeclarations for SgOmpExtImplementationDefinedRequirementClause
  104576             : 
  104577             : /* #line 104578 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104578             : 
  104579             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  104580             : 
  104581             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104582             : 
  104583             : #if 1
  104584             : // Class Definition for SgOmpExtImplementationDefinedRequirementClause
  104585             : class ROSE_DLL_API SgOmpExtImplementationDefinedRequirementClause  : public SgOmpClause
  104586             :    {
  104587             :      public:
  104588             : 
  104589             : 
  104590             : /* #line 104591 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104591             : 
  104592             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  104593             : // Start of memberFunctionString
  104594             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  104595             : 
  104596             : // *** COMMON CODE SECTION BEGINS HERE ***
  104597             : 
  104598             :     public:
  104599             : 
  104600             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  104601             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  104602             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  104603             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  104604             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  104605             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  104606             : 
  104607             :       /*! \brief returns a string representing the class name */
  104608             :           virtual std::string class_name() const override;
  104609             : 
  104610             :       /*! \brief returns new style SageIII enum values */
  104611             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  104612             : 
  104613             :       /*! \brief static variant value */
  104614             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  104615             :        // static const VariantT static_variant = V_SgOmpExtImplementationDefinedRequirementClause;
  104616             :           enum { static_variant = V_SgOmpExtImplementationDefinedRequirementClause };
  104617             : 
  104618             :        /* the generated cast function */
  104619             :       /*! \brief Casts pointer from base class to derived class */
  104620             :           ROSE_DLL_API friend       SgOmpExtImplementationDefinedRequirementClause* isSgOmpExtImplementationDefinedRequirementClause(       SgNode * s );
  104621             : 
  104622             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  104623             :           ROSE_DLL_API friend const SgOmpExtImplementationDefinedRequirementClause* isSgOmpExtImplementationDefinedRequirementClause( const SgNode * s );
  104624             : 
  104625             :      // ******************************************
  104626             :      // * Memory Pool / New / Delete
  104627             :      // ******************************************
  104628             : 
  104629             :      public:
  104630             :           /// \private
  104631             :           static const unsigned pool_size; //
  104632             :           /// \private
  104633             :           static std::vector<unsigned char *> pools; //
  104634             :           /// \private
  104635             :           static SgOmpExtImplementationDefinedRequirementClause * next_node; // 
  104636             : 
  104637             :           /// \private
  104638             :           static unsigned long initializeStorageClassArray(SgOmpExtImplementationDefinedRequirementClauseStorageClass *); //
  104639             : 
  104640             :           /// \private
  104641             :           static void clearMemoryPool(); //
  104642             :           static void deleteMemoryPool(); //
  104643             : 
  104644             :           /// \private
  104645             :           static void extendMemoryPoolForFileIO(); //
  104646             : 
  104647             :           /// \private
  104648             :           static SgOmpExtImplementationDefinedRequirementClause * getPointerFromGlobalIndex(unsigned long); //
  104649             :           /// \private
  104650             :           static SgOmpExtImplementationDefinedRequirementClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  104651             : 
  104652             :           /// \private
  104653             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  104654             :           /// \private
  104655             :           static void resetValidFreepointers(); //
  104656             :           /// \private
  104657             :           static unsigned long getNumberOfLastValidPointer(); //
  104658             : 
  104659             : 
  104660             : #if defined(INLINE_FUNCTIONS)
  104661             :       /*! \brief returns pointer to newly allocated IR node */
  104662             :           inline void *operator new (size_t size);
  104663             : #else
  104664             :       /*! \brief returns pointer to newly allocated IR node */
  104665             :           void *operator new (size_t size);
  104666             : #endif
  104667             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  104668             :           void operator delete (void* pointer, size_t size);
  104669             : 
  104670             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  104671           0 :           void operator delete (void* pointer)
  104672             :              {
  104673             :             // This is the generated delete operator...
  104674           0 :                SgOmpExtImplementationDefinedRequirementClause::operator delete (pointer,sizeof(SgOmpExtImplementationDefinedRequirementClause));
  104675             :              }
  104676             : 
  104677             :       /*! \brief Returns the total number of IR nodes of this type */
  104678             :           static size_t numberOfNodes();
  104679             : 
  104680             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  104681             :           static size_t memoryUsage();
  104682             : 
  104683             :       // End of scope which started in IR nodes specific code 
  104684             :       /* */
  104685             : 
  104686             :       /* name Internal Functions
  104687             :           \brief Internal functions ... incomplete-documentation
  104688             : 
  104689             :           These functions have been made public as part of the design, but they are suggested for internal use 
  104690             :           or by particularly knowledgeable users for specialized tools or applications.
  104691             : 
  104692             :           \internal We could not make these private because they are required by user for special purposes. And 
  104693             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  104694             :          
  104695             :        */
  104696             : 
  104697             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  104698             :        // overridden in every class by *generated* implementation
  104699             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  104700             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  104701             :        // MS: 06/28/02 container of names of variables or container indices 
  104702             :        // used used in the traversal to access AST successor nodes
  104703             :        // overridden in every class by *generated* implementation
  104704             :       /*! \brief container of names of variables or container indices used used in the traversal
  104705             :           to access AST successor nodes overridden in every class by *generated* implementation */
  104706             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  104707             : 
  104708             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  104709             :        // than all the vector copies. The implementation for these functions is generated for each class.
  104710             :       /*! \brief return number of children in the traversal successor list */
  104711             :           virtual size_t get_numberOfTraversalSuccessors() override;
  104712             :       /*! \brief index-based access to traversal successors by index number */
  104713             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  104714             :       /*! \brief index-based access to traversal successors by child node */
  104715             :           virtual size_t get_childIndex(SgNode *child) override;
  104716             : 
  104717             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  104718             :        // MS: 08/16/2002 method for generating RTI information
  104719             :       /*! \brief return C++ Runtime-Time-Information */
  104720             :           virtual RTIReturnType roseRTI() override;
  104721             : #endif
  104722             :       /* */
  104723             : 
  104724             : 
  104725             : 
  104726             :       /* name Deprecated Functions
  104727             :           \brief Deprecated functions ... incomplete-documentation
  104728             : 
  104729             :           These functions have been deprecated from use.
  104730             :        */
  104731             :       /* */
  104732             : 
  104733             :       /*! returns a C style string (char*) representing the class name */
  104734             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  104735             : 
  104736             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  104737             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  104738             : #if 0
  104739             :       /*! returns old style Sage II enum values */
  104740             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  104741             :       /*! returns old style Sage II enum values */
  104742             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  104743             : #endif
  104744             :       /* */
  104745             : 
  104746             : 
  104747             : 
  104748             : 
  104749             :      public:
  104750             :       /* name Traversal Support Functions
  104751             :           \brief Traversal support functions ... incomplete-documentation
  104752             : 
  104753             :           These functions have been made public as part of the design, but they are suggested for internal use 
  104754             :           or by particularly knowledgable users for specialized tools or applications.
  104755             :        */
  104756             :       /* */
  104757             : 
  104758             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  104759             :        // (inferior to ROSE traversal mechanism, experimental).
  104760             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  104761             :        */
  104762             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  104763             : 
  104764             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  104765             :       /*! \brief support for the classic visitor pattern done in GoF */
  104766             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  104767             : 
  104768             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  104769             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  104770             :        */
  104771             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  104772             : 
  104773             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  104774             :        */
  104775             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  104776             : 
  104777             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  104778             :        // This traversal helps support internal tools that call static member functions.
  104779             :        // note: this function operates on the memory pools.
  104780             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  104781             :        */
  104782             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  104783             :       /* */
  104784             : 
  104785             : 
  104786             :      public:
  104787             :       /* name Memory Allocation Functions
  104788             :           \brief Memory allocations functions ... incomplete-documentation
  104789             : 
  104790             :           These functions have been made public as part of the design, but they are suggested for internal use 
  104791             :           or by particularly knowledgable users for specialized tools or applications.
  104792             :        */
  104793             :       /* */
  104794             : 
  104795             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  104796             : 
  104797             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  104798             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  104799             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  104800             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  104801             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  104802             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  104803             :           being used with the AST File I/O mechanism.
  104804             :        */
  104805             :           virtual bool isInMemoryPool() override;
  104806             : 
  104807             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  104808             : 
  104809             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  104810             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  104811             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  104812             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  104813             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  104814             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  104815             :           being used with the AST File I/O mechanism.
  104816             :        */
  104817             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  104818             : 
  104819             :       // DQ (4/30/2006): Modified to be a const function.
  104820             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  104821             : 
  104822             :           This functions is part of general support for many possible tools to operate 
  104823             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  104824             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  104825             :           less than the set of pointers used by the AST file I/O. This is part of
  104826             :           work implemented by Andreas, and support tools such as the AST graph generation.
  104827             : 
  104828             :           \warning This function can return unexpected data members and thus the 
  104829             :                    order and the number of elements is unpredicable and subject 
  104830             :                    to change.
  104831             : 
  104832             :           \returns STL vector of pairs of SgNode* and strings
  104833             :        */
  104834             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  104835             : 
  104836             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  104837             : 
  104838             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  104839             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  104840             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  104841             : 
  104842             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  104843             :                    and subject to change.
  104844             :        */
  104845             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  104846             : 
  104847             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  104848             : 
  104849             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  104850             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  104851             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  104852             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  104853             : 
  104854             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  104855             : 
  104856             :           \returns long
  104857             :        */
  104858             :           virtual long getChildIndex( SgNode* childNode ) const override;
  104859             : 
  104860             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  104861             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104862             :       /* \brief Constructor for use by AST File I/O Mechanism
  104863             : 
  104864             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  104865             :           which obtained via fast binary file I/O from disk.
  104866             :        */
  104867             :        // SgOmpExtImplementationDefinedRequirementClause( SgOmpExtImplementationDefinedRequirementClauseStorageClass& source );
  104868             : 
  104869             : 
  104870             : 
  104871             : 
  104872             : 
  104873             :  // JH (10/24/2005): methods added to support the ast file IO
  104874             :     private:
  104875             : 
  104876             :       /* name AST Memory Allocation Support Functions
  104877             :           \brief Memory allocations support....
  104878             : 
  104879             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  104880             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  104881             :           and support the AST File I/O Mechanism.
  104882             :        */
  104883             :       /* */
  104884             : 
  104885             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  104886             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  104887             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  104888             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  104889             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  104890             :           a correspinding one in the AST_FILE_IO class!
  104891             :        */
  104892             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  104893             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104894             :       /* \brief Typedef used for low level memory access.
  104895             :        */
  104896             :        // typedef unsigned char* TestType;
  104897             : 
  104898             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  104899             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  104900             :       /* \brief Typedef used to hold memory addresses as values.
  104901             :        */
  104902             :        // typedef unsigned long  AddressType;
  104903             : 
  104904             : 
  104905             : 
  104906             :        // necessary, to have direct access to the p_freepointer and the private methods !
  104907             :       /*! \brief friend class declaration to support AST File I/O */
  104908             :           friend class AST_FILE_IO;
  104909             : 
  104910             :       /*! \brief friend class declaration to support AST File I/O */
  104911             :           friend class SgOmpExtImplementationDefinedRequirementClauseStorageClass;
  104912             : 
  104913             :       /*! \brief friend class declaration to support AST File I/O */
  104914             :           friend class AstSpecificDataManagingClass;
  104915             : 
  104916             :       /*! \brief friend class declaration to support AST File I/O */
  104917             :           friend class AstSpecificDataManagingClassStorageClass;
  104918             :     public:
  104919             :       /*! \brief IR node constructor to support AST File I/O */
  104920             :           SgOmpExtImplementationDefinedRequirementClause( const SgOmpExtImplementationDefinedRequirementClauseStorageClass& source );
  104921             : 
  104922             :  // private: // JJW hack
  104923             :        /*
  104924             :           name AST Memory Allocation Support Variables
  104925             :           Memory allocations support variables 
  104926             : 
  104927             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  104928             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  104929             :           and support the AST File I/O Mechanism.
  104930             :        */
  104931             :       /* */
  104932             : 
  104933             :     public:
  104934             : 
  104935             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  104936             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  104937             :       // virtual SgNode* addRegExpAttribute();
  104938             :       /*! \brief Support for AST matching using regular expression.
  104939             : 
  104940             :           This support is incomplete and the subject of current research to define 
  104941             :           RegEx trees to support inexact matching.
  104942             :        */
  104943             :           SgOmpExtImplementationDefinedRequirementClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  104944             : 
  104945             : // *** COMMON CODE SECTION ENDS HERE ***
  104946             : 
  104947             : 
  104948             : // End of memberFunctionString
  104949             : // Start of memberFunctionString
  104950             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  104951             : 
  104952             :      // the generated cast function
  104953             :      // friend ROSE_DLL_API SgOmpExtImplementationDefinedRequirementClause* isSgOmpExtImplementationDefinedRequirementClause ( SgNode* s );
  104954             : 
  104955             :           typedef SgOmpClause base_node_type;
  104956             : 
  104957             : 
  104958             : // End of memberFunctionString
  104959             : 
  104960             :      public: 
  104961             :          SgExpression* get_implementation_defined_requirement() const;
  104962             :          void set_implementation_defined_requirement(SgExpression* implementation_defined_requirement);
  104963             : 
  104964             : 
  104965             :      public: 
  104966             :          virtual ~SgOmpExtImplementationDefinedRequirementClause();
  104967             : 
  104968             : 
  104969             :      public: 
  104970             :          SgOmpExtImplementationDefinedRequirementClause(Sg_File_Info* startOfConstruct , SgExpression* implementation_defined_requirement = NULL); 
  104971             :          SgOmpExtImplementationDefinedRequirementClause(SgExpression* implementation_defined_requirement); 
  104972             : 
  104973             :     protected:
  104974             : // Start of memberFunctionString
  104975             : SgExpression* p_implementation_defined_requirement;
  104976             :           
  104977             : // End of memberFunctionString
  104978             : 
  104979             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpExtImplementationDefinedRequirementClause>;
  104980             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpExtImplementationDefinedRequirementClause, SgExpression*,&SgOmpExtImplementationDefinedRequirementClause::p_implementation_defined_requirement>;
  104981             : 
  104982             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104983             : 
  104984             : 
  104985             :    };
  104986             : #endif
  104987             : 
  104988             : // postdeclarations for SgOmpExtImplementationDefinedRequirementClause
  104989             : 
  104990             : /* #line 104991 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104991             : 
  104992             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  104993             : 
  104994             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  104995             : 
  104996             : 
  104997             : /* #line 104998 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  104998             : 
  104999             : 
  105000             : 
  105001             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105002             : 
  105003             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  105004             : //      This code is automatically generated for each 
  105005             : //      terminal and non-terminal within the defined 
  105006             : //      grammar.  There is a simple way to change the 
  105007             : //      code to fix bugs etc.  See the ROSE README file
  105008             : //      for directions.
  105009             : 
  105010             : // tps: (02/22/2010): Adding DLL export requirements
  105011             : #include "rosedll.h"
  105012             : 
  105013             : // predeclarations for SgOmpUsesAllocatorsDefination
  105014             : 
  105015             : /* #line 105016 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105016             : 
  105017             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  105018             : 
  105019             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105020             : 
  105021             : #if 1
  105022             : // Class Definition for SgOmpUsesAllocatorsDefination
  105023             : class ROSE_DLL_API SgOmpUsesAllocatorsDefination  : public SgOmpClause
  105024             :    {
  105025             :      public:
  105026             : 
  105027             : 
  105028             : /* #line 105029 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105029             : 
  105030             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  105031             : // Start of memberFunctionString
  105032             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  105033             : 
  105034             : // *** COMMON CODE SECTION BEGINS HERE ***
  105035             : 
  105036             :     public:
  105037             : 
  105038             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  105039             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  105040             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  105041             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  105042             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  105043             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  105044             : 
  105045             :       /*! \brief returns a string representing the class name */
  105046             :           virtual std::string class_name() const override;
  105047             : 
  105048             :       /*! \brief returns new style SageIII enum values */
  105049             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  105050             : 
  105051             :       /*! \brief static variant value */
  105052             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  105053             :        // static const VariantT static_variant = V_SgOmpUsesAllocatorsDefination;
  105054             :           enum { static_variant = V_SgOmpUsesAllocatorsDefination };
  105055             : 
  105056             :        /* the generated cast function */
  105057             :       /*! \brief Casts pointer from base class to derived class */
  105058             :           ROSE_DLL_API friend       SgOmpUsesAllocatorsDefination* isSgOmpUsesAllocatorsDefination(       SgNode * s );
  105059             : 
  105060             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  105061             :           ROSE_DLL_API friend const SgOmpUsesAllocatorsDefination* isSgOmpUsesAllocatorsDefination( const SgNode * s );
  105062             : 
  105063             :      // ******************************************
  105064             :      // * Memory Pool / New / Delete
  105065             :      // ******************************************
  105066             : 
  105067             :      public:
  105068             :           /// \private
  105069             :           static const unsigned pool_size; //
  105070             :           /// \private
  105071             :           static std::vector<unsigned char *> pools; //
  105072             :           /// \private
  105073             :           static SgOmpUsesAllocatorsDefination * next_node; // 
  105074             : 
  105075             :           /// \private
  105076             :           static unsigned long initializeStorageClassArray(SgOmpUsesAllocatorsDefinationStorageClass *); //
  105077             : 
  105078             :           /// \private
  105079             :           static void clearMemoryPool(); //
  105080             :           static void deleteMemoryPool(); //
  105081             : 
  105082             :           /// \private
  105083             :           static void extendMemoryPoolForFileIO(); //
  105084             : 
  105085             :           /// \private
  105086             :           static SgOmpUsesAllocatorsDefination * getPointerFromGlobalIndex(unsigned long); //
  105087             :           /// \private
  105088             :           static SgOmpUsesAllocatorsDefination * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  105089             : 
  105090             :           /// \private
  105091             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  105092             :           /// \private
  105093             :           static void resetValidFreepointers(); //
  105094             :           /// \private
  105095             :           static unsigned long getNumberOfLastValidPointer(); //
  105096             : 
  105097             : 
  105098             : #if defined(INLINE_FUNCTIONS)
  105099             :       /*! \brief returns pointer to newly allocated IR node */
  105100             :           inline void *operator new (size_t size);
  105101             : #else
  105102             :       /*! \brief returns pointer to newly allocated IR node */
  105103             :           void *operator new (size_t size);
  105104             : #endif
  105105             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  105106             :           void operator delete (void* pointer, size_t size);
  105107             : 
  105108             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  105109           0 :           void operator delete (void* pointer)
  105110             :              {
  105111             :             // This is the generated delete operator...
  105112           0 :                SgOmpUsesAllocatorsDefination::operator delete (pointer,sizeof(SgOmpUsesAllocatorsDefination));
  105113             :              }
  105114             : 
  105115             :       /*! \brief Returns the total number of IR nodes of this type */
  105116             :           static size_t numberOfNodes();
  105117             : 
  105118             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  105119             :           static size_t memoryUsage();
  105120             : 
  105121             :       // End of scope which started in IR nodes specific code 
  105122             :       /* */
  105123             : 
  105124             :       /* name Internal Functions
  105125             :           \brief Internal functions ... incomplete-documentation
  105126             : 
  105127             :           These functions have been made public as part of the design, but they are suggested for internal use 
  105128             :           or by particularly knowledgeable users for specialized tools or applications.
  105129             : 
  105130             :           \internal We could not make these private because they are required by user for special purposes. And 
  105131             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  105132             :          
  105133             :        */
  105134             : 
  105135             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  105136             :        // overridden in every class by *generated* implementation
  105137             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  105138             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  105139             :        // MS: 06/28/02 container of names of variables or container indices 
  105140             :        // used used in the traversal to access AST successor nodes
  105141             :        // overridden in every class by *generated* implementation
  105142             :       /*! \brief container of names of variables or container indices used used in the traversal
  105143             :           to access AST successor nodes overridden in every class by *generated* implementation */
  105144             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  105145             : 
  105146             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  105147             :        // than all the vector copies. The implementation for these functions is generated for each class.
  105148             :       /*! \brief return number of children in the traversal successor list */
  105149             :           virtual size_t get_numberOfTraversalSuccessors() override;
  105150             :       /*! \brief index-based access to traversal successors by index number */
  105151             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  105152             :       /*! \brief index-based access to traversal successors by child node */
  105153             :           virtual size_t get_childIndex(SgNode *child) override;
  105154             : 
  105155             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  105156             :        // MS: 08/16/2002 method for generating RTI information
  105157             :       /*! \brief return C++ Runtime-Time-Information */
  105158             :           virtual RTIReturnType roseRTI() override;
  105159             : #endif
  105160             :       /* */
  105161             : 
  105162             : 
  105163             : 
  105164             :       /* name Deprecated Functions
  105165             :           \brief Deprecated functions ... incomplete-documentation
  105166             : 
  105167             :           These functions have been deprecated from use.
  105168             :        */
  105169             :       /* */
  105170             : 
  105171             :       /*! returns a C style string (char*) representing the class name */
  105172             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  105173             : 
  105174             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  105175             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  105176             : #if 0
  105177             :       /*! returns old style Sage II enum values */
  105178             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  105179             :       /*! returns old style Sage II enum values */
  105180             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  105181             : #endif
  105182             :       /* */
  105183             : 
  105184             : 
  105185             : 
  105186             : 
  105187             :      public:
  105188             :       /* name Traversal Support Functions
  105189             :           \brief Traversal support functions ... incomplete-documentation
  105190             : 
  105191             :           These functions have been made public as part of the design, but they are suggested for internal use 
  105192             :           or by particularly knowledgable users for specialized tools or applications.
  105193             :        */
  105194             :       /* */
  105195             : 
  105196             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  105197             :        // (inferior to ROSE traversal mechanism, experimental).
  105198             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  105199             :        */
  105200             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  105201             : 
  105202             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  105203             :       /*! \brief support for the classic visitor pattern done in GoF */
  105204             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  105205             : 
  105206             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  105207             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  105208             :        */
  105209             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  105210             : 
  105211             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  105212             :        */
  105213             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  105214             : 
  105215             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  105216             :        // This traversal helps support internal tools that call static member functions.
  105217             :        // note: this function operates on the memory pools.
  105218             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  105219             :        */
  105220             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  105221             :       /* */
  105222             : 
  105223             : 
  105224             :      public:
  105225             :       /* name Memory Allocation Functions
  105226             :           \brief Memory allocations functions ... incomplete-documentation
  105227             : 
  105228             :           These functions have been made public as part of the design, but they are suggested for internal use 
  105229             :           or by particularly knowledgable users for specialized tools or applications.
  105230             :        */
  105231             :       /* */
  105232             : 
  105233             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  105234             : 
  105235             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  105236             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  105237             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  105238             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  105239             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  105240             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  105241             :           being used with the AST File I/O mechanism.
  105242             :        */
  105243             :           virtual bool isInMemoryPool() override;
  105244             : 
  105245             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  105246             : 
  105247             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  105248             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  105249             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  105250             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  105251             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  105252             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  105253             :           being used with the AST File I/O mechanism.
  105254             :        */
  105255             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  105256             : 
  105257             :       // DQ (4/30/2006): Modified to be a const function.
  105258             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  105259             : 
  105260             :           This functions is part of general support for many possible tools to operate 
  105261             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  105262             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  105263             :           less than the set of pointers used by the AST file I/O. This is part of
  105264             :           work implemented by Andreas, and support tools such as the AST graph generation.
  105265             : 
  105266             :           \warning This function can return unexpected data members and thus the 
  105267             :                    order and the number of elements is unpredicable and subject 
  105268             :                    to change.
  105269             : 
  105270             :           \returns STL vector of pairs of SgNode* and strings
  105271             :        */
  105272             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  105273             : 
  105274             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  105275             : 
  105276             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  105277             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  105278             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  105279             : 
  105280             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  105281             :                    and subject to change.
  105282             :        */
  105283             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  105284             : 
  105285             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  105286             : 
  105287             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  105288             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  105289             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  105290             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  105291             : 
  105292             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  105293             : 
  105294             :           \returns long
  105295             :        */
  105296             :           virtual long getChildIndex( SgNode* childNode ) const override;
  105297             : 
  105298             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  105299             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  105300             :       /* \brief Constructor for use by AST File I/O Mechanism
  105301             : 
  105302             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  105303             :           which obtained via fast binary file I/O from disk.
  105304             :        */
  105305             :        // SgOmpUsesAllocatorsDefination( SgOmpUsesAllocatorsDefinationStorageClass& source );
  105306             : 
  105307             : 
  105308             : 
  105309             : 
  105310             : 
  105311             :  // JH (10/24/2005): methods added to support the ast file IO
  105312             :     private:
  105313             : 
  105314             :       /* name AST Memory Allocation Support Functions
  105315             :           \brief Memory allocations support....
  105316             : 
  105317             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  105318             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  105319             :           and support the AST File I/O Mechanism.
  105320             :        */
  105321             :       /* */
  105322             : 
  105323             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  105324             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  105325             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  105326             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  105327             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  105328             :           a correspinding one in the AST_FILE_IO class!
  105329             :        */
  105330             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  105331             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  105332             :       /* \brief Typedef used for low level memory access.
  105333             :        */
  105334             :        // typedef unsigned char* TestType;
  105335             : 
  105336             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  105337             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  105338             :       /* \brief Typedef used to hold memory addresses as values.
  105339             :        */
  105340             :        // typedef unsigned long  AddressType;
  105341             : 
  105342             : 
  105343             : 
  105344             :        // necessary, to have direct access to the p_freepointer and the private methods !
  105345             :       /*! \brief friend class declaration to support AST File I/O */
  105346             :           friend class AST_FILE_IO;
  105347             : 
  105348             :       /*! \brief friend class declaration to support AST File I/O */
  105349             :           friend class SgOmpUsesAllocatorsDefinationStorageClass;
  105350             : 
  105351             :       /*! \brief friend class declaration to support AST File I/O */
  105352             :           friend class AstSpecificDataManagingClass;
  105353             : 
  105354             :       /*! \brief friend class declaration to support AST File I/O */
  105355             :           friend class AstSpecificDataManagingClassStorageClass;
  105356             :     public:
  105357             :       /*! \brief IR node constructor to support AST File I/O */
  105358             :           SgOmpUsesAllocatorsDefination( const SgOmpUsesAllocatorsDefinationStorageClass& source );
  105359             : 
  105360             :  // private: // JJW hack
  105361             :        /*
  105362             :           name AST Memory Allocation Support Variables
  105363             :           Memory allocations support variables 
  105364             : 
  105365             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  105366             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  105367             :           and support the AST File I/O Mechanism.
  105368             :        */
  105369             :       /* */
  105370             : 
  105371             :     public:
  105372             : 
  105373             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  105374             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  105375             :       // virtual SgNode* addRegExpAttribute();
  105376             :       /*! \brief Support for AST matching using regular expression.
  105377             : 
  105378             :           This support is incomplete and the subject of current research to define 
  105379             :           RegEx trees to support inexact matching.
  105380             :        */
  105381             :           SgOmpUsesAllocatorsDefination* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  105382             : 
  105383             : // *** COMMON CODE SECTION ENDS HERE ***
  105384             : 
  105385             : 
  105386             : // End of memberFunctionString
  105387             : // Start of memberFunctionString
  105388             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  105389             : 
  105390             :      // the generated cast function
  105391             :      // friend ROSE_DLL_API SgOmpUsesAllocatorsDefination* isSgOmpUsesAllocatorsDefination ( SgNode* s );
  105392             : 
  105393             :           typedef SgOmpClause base_node_type;
  105394             : 
  105395             : 
  105396             : // End of memberFunctionString
  105397             : 
  105398             :      public: 
  105399             :          SgOmpClause::omp_uses_allocators_allocator_enum get_allocator() const;
  105400             :          void set_allocator(SgOmpClause::omp_uses_allocators_allocator_enum allocator);
  105401             : 
  105402             :      public: 
  105403             :          SgExpression* get_user_defined_allocator() const;
  105404             :          void set_user_defined_allocator(SgExpression* user_defined_allocator);
  105405             : 
  105406             :      public: 
  105407             :          SgExpression* get_allocator_traits_array() const;
  105408             :          void set_allocator_traits_array(SgExpression* allocator_traits_array);
  105409             : 
  105410             : 
  105411             :      public: 
  105412             :          virtual ~SgOmpUsesAllocatorsDefination();
  105413             : 
  105414             : 
  105415             :      public: 
  105416             :          SgOmpUsesAllocatorsDefination(Sg_File_Info* startOfConstruct ); 
  105417             :          SgOmpUsesAllocatorsDefination(); 
  105418             : 
  105419             :     protected:
  105420             : // Start of memberFunctionString
  105421             : SgOmpClause::omp_uses_allocators_allocator_enum p_allocator;
  105422             :           
  105423             : // End of memberFunctionString
  105424             : // Start of memberFunctionString
  105425             : SgExpression* p_user_defined_allocator;
  105426             :           
  105427             : // End of memberFunctionString
  105428             : // Start of memberFunctionString
  105429             : SgExpression* p_allocator_traits_array;
  105430             :           
  105431             : // End of memberFunctionString
  105432             : 
  105433             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUsesAllocatorsDefination>;
  105434             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpUsesAllocatorsDefination, SgOmpClause::omp_uses_allocators_allocator_enum,&SgOmpUsesAllocatorsDefination::p_allocator>;
  105435             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpUsesAllocatorsDefination, SgExpression*,&SgOmpUsesAllocatorsDefination::p_user_defined_allocator>;
  105436             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpUsesAllocatorsDefination, SgExpression*,&SgOmpUsesAllocatorsDefination::p_allocator_traits_array>;
  105437             : 
  105438             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105439             : 
  105440             : 
  105441             :    };
  105442             : #endif
  105443             : 
  105444             : // postdeclarations for SgOmpUsesAllocatorsDefination
  105445             : 
  105446             : /* #line 105447 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105447             : 
  105448             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  105449             : 
  105450             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105451             : 
  105452             : 
  105453             : /* #line 105454 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105454             : 
  105455             : 
  105456             : 
  105457             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105458             : 
  105459             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  105460             : //      This code is automatically generated for each 
  105461             : //      terminal and non-terminal within the defined 
  105462             : //      grammar.  There is a simple way to change the 
  105463             : //      code to fix bugs etc.  See the ROSE README file
  105464             : //      for directions.
  105465             : 
  105466             : // tps: (02/22/2010): Adding DLL export requirements
  105467             : #include "rosedll.h"
  105468             : 
  105469             : // predeclarations for SgOmpVariablesClause
  105470             : 
  105471             : /* #line 105472 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105472             : 
  105473             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  105474             : 
  105475             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105476             : 
  105477             : #if 1
  105478             : // Class Definition for SgOmpVariablesClause
  105479             : class ROSE_DLL_API SgOmpVariablesClause  : public SgOmpClause
  105480             :    {
  105481             :      public:
  105482             : 
  105483             : 
  105484             : /* #line 105485 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105485             : 
  105486             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  105487             : // Start of memberFunctionString
  105488             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  105489             : 
  105490             : // *** COMMON CODE SECTION BEGINS HERE ***
  105491             : 
  105492             :     public:
  105493             : 
  105494             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  105495             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  105496             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  105497             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  105498             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  105499             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  105500             : 
  105501             :       /*! \brief returns a string representing the class name */
  105502             :           virtual std::string class_name() const override;
  105503             : 
  105504             :       /*! \brief returns new style SageIII enum values */
  105505             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  105506             : 
  105507             :       /*! \brief static variant value */
  105508             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  105509             :        // static const VariantT static_variant = V_SgOmpVariablesClause;
  105510             :           enum { static_variant = V_SgOmpVariablesClause };
  105511             : 
  105512             :        /* the generated cast function */
  105513             :       /*! \brief Casts pointer from base class to derived class */
  105514             :           ROSE_DLL_API friend       SgOmpVariablesClause* isSgOmpVariablesClause(       SgNode * s );
  105515             : 
  105516             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  105517             :           ROSE_DLL_API friend const SgOmpVariablesClause* isSgOmpVariablesClause( const SgNode * s );
  105518             : 
  105519             :      // ******************************************
  105520             :      // * Memory Pool / New / Delete
  105521             :      // ******************************************
  105522             : 
  105523             :      public:
  105524             :           /// \private
  105525             :           static const unsigned pool_size; //
  105526             :           /// \private
  105527             :           static std::vector<unsigned char *> pools; //
  105528             :           /// \private
  105529             :           static SgOmpVariablesClause * next_node; // 
  105530             : 
  105531             :           /// \private
  105532             :           static unsigned long initializeStorageClassArray(SgOmpVariablesClauseStorageClass *); //
  105533             : 
  105534             :           /// \private
  105535             :           static void clearMemoryPool(); //
  105536             :           static void deleteMemoryPool(); //
  105537             : 
  105538             :           /// \private
  105539             :           static void extendMemoryPoolForFileIO(); //
  105540             : 
  105541             :           /// \private
  105542             :           static SgOmpVariablesClause * getPointerFromGlobalIndex(unsigned long); //
  105543             :           /// \private
  105544             :           static SgOmpVariablesClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  105545             : 
  105546             :           /// \private
  105547             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  105548             :           /// \private
  105549             :           static void resetValidFreepointers(); //
  105550             :           /// \private
  105551             :           static unsigned long getNumberOfLastValidPointer(); //
  105552             : 
  105553             : 
  105554             : #if defined(INLINE_FUNCTIONS)
  105555             :       /*! \brief returns pointer to newly allocated IR node */
  105556             :           inline void *operator new (size_t size);
  105557             : #else
  105558             :       /*! \brief returns pointer to newly allocated IR node */
  105559             :           void *operator new (size_t size);
  105560             : #endif
  105561             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  105562             :           void operator delete (void* pointer, size_t size);
  105563             : 
  105564             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  105565           0 :           void operator delete (void* pointer)
  105566             :              {
  105567             :             // This is the generated delete operator...
  105568           0 :                SgOmpVariablesClause::operator delete (pointer,sizeof(SgOmpVariablesClause));
  105569             :              }
  105570             : 
  105571             :       /*! \brief Returns the total number of IR nodes of this type */
  105572             :           static size_t numberOfNodes();
  105573             : 
  105574             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  105575             :           static size_t memoryUsage();
  105576             : 
  105577             :       // End of scope which started in IR nodes specific code 
  105578             :       /* */
  105579             : 
  105580             :       /* name Internal Functions
  105581             :           \brief Internal functions ... incomplete-documentation
  105582             : 
  105583             :           These functions have been made public as part of the design, but they are suggested for internal use 
  105584             :           or by particularly knowledgeable users for specialized tools or applications.
  105585             : 
  105586             :           \internal We could not make these private because they are required by user for special purposes. And 
  105587             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  105588             :          
  105589             :        */
  105590             : 
  105591             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  105592             :        // overridden in every class by *generated* implementation
  105593             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  105594             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  105595             :        // MS: 06/28/02 container of names of variables or container indices 
  105596             :        // used used in the traversal to access AST successor nodes
  105597             :        // overridden in every class by *generated* implementation
  105598             :       /*! \brief container of names of variables or container indices used used in the traversal
  105599             :           to access AST successor nodes overridden in every class by *generated* implementation */
  105600             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  105601             : 
  105602             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  105603             :        // than all the vector copies. The implementation for these functions is generated for each class.
  105604             :       /*! \brief return number of children in the traversal successor list */
  105605             :           virtual size_t get_numberOfTraversalSuccessors() override;
  105606             :       /*! \brief index-based access to traversal successors by index number */
  105607             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  105608             :       /*! \brief index-based access to traversal successors by child node */
  105609             :           virtual size_t get_childIndex(SgNode *child) override;
  105610             : 
  105611             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  105612             :        // MS: 08/16/2002 method for generating RTI information
  105613             :       /*! \brief return C++ Runtime-Time-Information */
  105614             :           virtual RTIReturnType roseRTI() override;
  105615             : #endif
  105616             :       /* */
  105617             : 
  105618             : 
  105619             : 
  105620             :       /* name Deprecated Functions
  105621             :           \brief Deprecated functions ... incomplete-documentation
  105622             : 
  105623             :           These functions have been deprecated from use.
  105624             :        */
  105625             :       /* */
  105626             : 
  105627             :       /*! returns a C style string (char*) representing the class name */
  105628             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  105629             : 
  105630             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  105631             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  105632             : #if 0
  105633             :       /*! returns old style Sage II enum values */
  105634             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  105635             :       /*! returns old style Sage II enum values */
  105636             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  105637             : #endif
  105638             :       /* */
  105639             : 
  105640             : 
  105641             : 
  105642             : 
  105643             :      public:
  105644             :       /* name Traversal Support Functions
  105645             :           \brief Traversal support functions ... incomplete-documentation
  105646             : 
  105647             :           These functions have been made public as part of the design, but they are suggested for internal use 
  105648             :           or by particularly knowledgable users for specialized tools or applications.
  105649             :        */
  105650             :       /* */
  105651             : 
  105652             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  105653             :        // (inferior to ROSE traversal mechanism, experimental).
  105654             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  105655             :        */
  105656             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  105657             : 
  105658             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  105659             :       /*! \brief support for the classic visitor pattern done in GoF */
  105660             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  105661             : 
  105662             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  105663             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  105664             :        */
  105665             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  105666             : 
  105667             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  105668             :        */
  105669             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  105670             : 
  105671             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  105672             :        // This traversal helps support internal tools that call static member functions.
  105673             :        // note: this function operates on the memory pools.
  105674             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  105675             :        */
  105676             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  105677             :       /* */
  105678             : 
  105679             : 
  105680             :      public:
  105681             :       /* name Memory Allocation Functions
  105682             :           \brief Memory allocations functions ... incomplete-documentation
  105683             : 
  105684             :           These functions have been made public as part of the design, but they are suggested for internal use 
  105685             :           or by particularly knowledgable users for specialized tools or applications.
  105686             :        */
  105687             :       /* */
  105688             : 
  105689             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  105690             : 
  105691             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  105692             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  105693             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  105694             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  105695             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  105696             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  105697             :           being used with the AST File I/O mechanism.
  105698             :        */
  105699             :           virtual bool isInMemoryPool() override;
  105700             : 
  105701             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  105702             : 
  105703             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  105704             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  105705             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  105706             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  105707             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  105708             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  105709             :           being used with the AST File I/O mechanism.
  105710             :        */
  105711             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  105712             : 
  105713             :       // DQ (4/30/2006): Modified to be a const function.
  105714             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  105715             : 
  105716             :           This functions is part of general support for many possible tools to operate 
  105717             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  105718             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  105719             :           less than the set of pointers used by the AST file I/O. This is part of
  105720             :           work implemented by Andreas, and support tools such as the AST graph generation.
  105721             : 
  105722             :           \warning This function can return unexpected data members and thus the 
  105723             :                    order and the number of elements is unpredicable and subject 
  105724             :                    to change.
  105725             : 
  105726             :           \returns STL vector of pairs of SgNode* and strings
  105727             :        */
  105728             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  105729             : 
  105730             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  105731             : 
  105732             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  105733             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  105734             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  105735             : 
  105736             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  105737             :                    and subject to change.
  105738             :        */
  105739             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  105740             : 
  105741             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  105742             : 
  105743             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  105744             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  105745             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  105746             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  105747             : 
  105748             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  105749             : 
  105750             :           \returns long
  105751             :        */
  105752             :           virtual long getChildIndex( SgNode* childNode ) const override;
  105753             : 
  105754             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  105755             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  105756             :       /* \brief Constructor for use by AST File I/O Mechanism
  105757             : 
  105758             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  105759             :           which obtained via fast binary file I/O from disk.
  105760             :        */
  105761             :        // SgOmpVariablesClause( SgOmpVariablesClauseStorageClass& source );
  105762             : 
  105763             : 
  105764             : 
  105765             : 
  105766             : 
  105767             :  // JH (10/24/2005): methods added to support the ast file IO
  105768             :     private:
  105769             : 
  105770             :       /* name AST Memory Allocation Support Functions
  105771             :           \brief Memory allocations support....
  105772             : 
  105773             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  105774             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  105775             :           and support the AST File I/O Mechanism.
  105776             :        */
  105777             :       /* */
  105778             : 
  105779             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  105780             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  105781             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  105782             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  105783             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  105784             :           a correspinding one in the AST_FILE_IO class!
  105785             :        */
  105786             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  105787             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  105788             :       /* \brief Typedef used for low level memory access.
  105789             :        */
  105790             :        // typedef unsigned char* TestType;
  105791             : 
  105792             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  105793             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  105794             :       /* \brief Typedef used to hold memory addresses as values.
  105795             :        */
  105796             :        // typedef unsigned long  AddressType;
  105797             : 
  105798             : 
  105799             : 
  105800             :        // necessary, to have direct access to the p_freepointer and the private methods !
  105801             :       /*! \brief friend class declaration to support AST File I/O */
  105802             :           friend class AST_FILE_IO;
  105803             : 
  105804             :       /*! \brief friend class declaration to support AST File I/O */
  105805             :           friend class SgOmpVariablesClauseStorageClass;
  105806             : 
  105807             :       /*! \brief friend class declaration to support AST File I/O */
  105808             :           friend class AstSpecificDataManagingClass;
  105809             : 
  105810             :       /*! \brief friend class declaration to support AST File I/O */
  105811             :           friend class AstSpecificDataManagingClassStorageClass;
  105812             :     public:
  105813             :       /*! \brief IR node constructor to support AST File I/O */
  105814             :           SgOmpVariablesClause( const SgOmpVariablesClauseStorageClass& source );
  105815             : 
  105816             :  // private: // JJW hack
  105817             :        /*
  105818             :           name AST Memory Allocation Support Variables
  105819             :           Memory allocations support variables 
  105820             : 
  105821             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  105822             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  105823             :           and support the AST File I/O Mechanism.
  105824             :        */
  105825             :       /* */
  105826             : 
  105827             :     public:
  105828             : 
  105829             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  105830             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  105831             :       // virtual SgNode* addRegExpAttribute();
  105832             :       /*! \brief Support for AST matching using regular expression.
  105833             : 
  105834             :           This support is incomplete and the subject of current research to define 
  105835             :           RegEx trees to support inexact matching.
  105836             :        */
  105837             :           SgOmpVariablesClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  105838             : 
  105839             : // *** COMMON CODE SECTION ENDS HERE ***
  105840             : 
  105841             : 
  105842             : // End of memberFunctionString
  105843             : // Start of memberFunctionString
  105844             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  105845             : 
  105846             :      // the generated cast function
  105847             :      // friend ROSE_DLL_API SgOmpVariablesClause* isSgOmpVariablesClause ( SgNode* s );
  105848             : 
  105849             :           typedef SgOmpClause base_node_type;
  105850             : 
  105851             : 
  105852             : // End of memberFunctionString
  105853             : 
  105854             :      public: 
  105855             :          SgExprListExp* get_variables() const;
  105856             :          void set_variables(SgExprListExp* variables);
  105857             : 
  105858             : 
  105859             :      public: 
  105860             :          virtual ~SgOmpVariablesClause();
  105861             : 
  105862             : 
  105863             :      public: 
  105864             :          SgOmpVariablesClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  105865             :          SgOmpVariablesClause(SgExprListExp* variables); 
  105866             : 
  105867             :     protected:
  105868             : // Start of memberFunctionString
  105869             : SgExprListExp* p_variables;
  105870             :           
  105871             : // End of memberFunctionString
  105872             : 
  105873             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpVariablesClause>;
  105874             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpVariablesClause, SgExprListExp*,&SgOmpVariablesClause::p_variables>;
  105875             : 
  105876             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105877             : 
  105878             : 
  105879             :    };
  105880             : #endif
  105881             : 
  105882             : // postdeclarations for SgOmpVariablesClause
  105883             : 
  105884             : /* #line 105885 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105885             : 
  105886             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  105887             : 
  105888             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105889             : 
  105890             : 
  105891             : /* #line 105892 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105892             : 
  105893             : 
  105894             : 
  105895             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105896             : 
  105897             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  105898             : //      This code is automatically generated for each 
  105899             : //      terminal and non-terminal within the defined 
  105900             : //      grammar.  There is a simple way to change the 
  105901             : //      code to fix bugs etc.  See the ROSE README file
  105902             : //      for directions.
  105903             : 
  105904             : // tps: (02/22/2010): Adding DLL export requirements
  105905             : #include "rosedll.h"
  105906             : 
  105907             : // predeclarations for SgOmpCopyprivateClause
  105908             : 
  105909             : /* #line 105910 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105910             : 
  105911             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  105912             : 
  105913             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  105914             : 
  105915             : #if 1
  105916             : // Class Definition for SgOmpCopyprivateClause
  105917             : class ROSE_DLL_API SgOmpCopyprivateClause  : public SgOmpVariablesClause
  105918             :    {
  105919             :      public:
  105920             : 
  105921             : 
  105922             : /* #line 105923 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  105923             : 
  105924             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  105925             : // Start of memberFunctionString
  105926             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  105927             : 
  105928             : // *** COMMON CODE SECTION BEGINS HERE ***
  105929             : 
  105930             :     public:
  105931             : 
  105932             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  105933             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  105934             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  105935             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  105936             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  105937             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  105938             : 
  105939             :       /*! \brief returns a string representing the class name */
  105940             :           virtual std::string class_name() const override;
  105941             : 
  105942             :       /*! \brief returns new style SageIII enum values */
  105943             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  105944             : 
  105945             :       /*! \brief static variant value */
  105946             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  105947             :        // static const VariantT static_variant = V_SgOmpCopyprivateClause;
  105948             :           enum { static_variant = V_SgOmpCopyprivateClause };
  105949             : 
  105950             :        /* the generated cast function */
  105951             :       /*! \brief Casts pointer from base class to derived class */
  105952             :           ROSE_DLL_API friend       SgOmpCopyprivateClause* isSgOmpCopyprivateClause(       SgNode * s );
  105953             : 
  105954             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  105955             :           ROSE_DLL_API friend const SgOmpCopyprivateClause* isSgOmpCopyprivateClause( const SgNode * s );
  105956             : 
  105957             :      // ******************************************
  105958             :      // * Memory Pool / New / Delete
  105959             :      // ******************************************
  105960             : 
  105961             :      public:
  105962             :           /// \private
  105963             :           static const unsigned pool_size; //
  105964             :           /// \private
  105965             :           static std::vector<unsigned char *> pools; //
  105966             :           /// \private
  105967             :           static SgOmpCopyprivateClause * next_node; // 
  105968             : 
  105969             :           /// \private
  105970             :           static unsigned long initializeStorageClassArray(SgOmpCopyprivateClauseStorageClass *); //
  105971             : 
  105972             :           /// \private
  105973             :           static void clearMemoryPool(); //
  105974             :           static void deleteMemoryPool(); //
  105975             : 
  105976             :           /// \private
  105977             :           static void extendMemoryPoolForFileIO(); //
  105978             : 
  105979             :           /// \private
  105980             :           static SgOmpCopyprivateClause * getPointerFromGlobalIndex(unsigned long); //
  105981             :           /// \private
  105982             :           static SgOmpCopyprivateClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  105983             : 
  105984             :           /// \private
  105985             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  105986             :           /// \private
  105987             :           static void resetValidFreepointers(); //
  105988             :           /// \private
  105989             :           static unsigned long getNumberOfLastValidPointer(); //
  105990             : 
  105991             : 
  105992             : #if defined(INLINE_FUNCTIONS)
  105993             :       /*! \brief returns pointer to newly allocated IR node */
  105994             :           inline void *operator new (size_t size);
  105995             : #else
  105996             :       /*! \brief returns pointer to newly allocated IR node */
  105997             :           void *operator new (size_t size);
  105998             : #endif
  105999             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  106000             :           void operator delete (void* pointer, size_t size);
  106001             : 
  106002             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  106003           0 :           void operator delete (void* pointer)
  106004             :              {
  106005             :             // This is the generated delete operator...
  106006           0 :                SgOmpCopyprivateClause::operator delete (pointer,sizeof(SgOmpCopyprivateClause));
  106007             :              }
  106008             : 
  106009             :       /*! \brief Returns the total number of IR nodes of this type */
  106010             :           static size_t numberOfNodes();
  106011             : 
  106012             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  106013             :           static size_t memoryUsage();
  106014             : 
  106015             :       // End of scope which started in IR nodes specific code 
  106016             :       /* */
  106017             : 
  106018             :       /* name Internal Functions
  106019             :           \brief Internal functions ... incomplete-documentation
  106020             : 
  106021             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106022             :           or by particularly knowledgeable users for specialized tools or applications.
  106023             : 
  106024             :           \internal We could not make these private because they are required by user for special purposes. And 
  106025             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  106026             :          
  106027             :        */
  106028             : 
  106029             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  106030             :        // overridden in every class by *generated* implementation
  106031             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  106032             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  106033             :        // MS: 06/28/02 container of names of variables or container indices 
  106034             :        // used used in the traversal to access AST successor nodes
  106035             :        // overridden in every class by *generated* implementation
  106036             :       /*! \brief container of names of variables or container indices used used in the traversal
  106037             :           to access AST successor nodes overridden in every class by *generated* implementation */
  106038             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  106039             : 
  106040             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  106041             :        // than all the vector copies. The implementation for these functions is generated for each class.
  106042             :       /*! \brief return number of children in the traversal successor list */
  106043             :           virtual size_t get_numberOfTraversalSuccessors() override;
  106044             :       /*! \brief index-based access to traversal successors by index number */
  106045             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  106046             :       /*! \brief index-based access to traversal successors by child node */
  106047             :           virtual size_t get_childIndex(SgNode *child) override;
  106048             : 
  106049             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  106050             :        // MS: 08/16/2002 method for generating RTI information
  106051             :       /*! \brief return C++ Runtime-Time-Information */
  106052             :           virtual RTIReturnType roseRTI() override;
  106053             : #endif
  106054             :       /* */
  106055             : 
  106056             : 
  106057             : 
  106058             :       /* name Deprecated Functions
  106059             :           \brief Deprecated functions ... incomplete-documentation
  106060             : 
  106061             :           These functions have been deprecated from use.
  106062             :        */
  106063             :       /* */
  106064             : 
  106065             :       /*! returns a C style string (char*) representing the class name */
  106066             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  106067             : 
  106068             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  106069             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  106070             : #if 0
  106071             :       /*! returns old style Sage II enum values */
  106072             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  106073             :       /*! returns old style Sage II enum values */
  106074             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  106075             : #endif
  106076             :       /* */
  106077             : 
  106078             : 
  106079             : 
  106080             : 
  106081             :      public:
  106082             :       /* name Traversal Support Functions
  106083             :           \brief Traversal support functions ... incomplete-documentation
  106084             : 
  106085             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106086             :           or by particularly knowledgable users for specialized tools or applications.
  106087             :        */
  106088             :       /* */
  106089             : 
  106090             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  106091             :        // (inferior to ROSE traversal mechanism, experimental).
  106092             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  106093             :        */
  106094             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  106095             : 
  106096             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  106097             :       /*! \brief support for the classic visitor pattern done in GoF */
  106098             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  106099             : 
  106100             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  106101             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  106102             :        */
  106103             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  106104             : 
  106105             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  106106             :        */
  106107             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  106108             : 
  106109             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  106110             :        // This traversal helps support internal tools that call static member functions.
  106111             :        // note: this function operates on the memory pools.
  106112             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  106113             :        */
  106114             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  106115             :       /* */
  106116             : 
  106117             : 
  106118             :      public:
  106119             :       /* name Memory Allocation Functions
  106120             :           \brief Memory allocations functions ... incomplete-documentation
  106121             : 
  106122             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106123             :           or by particularly knowledgable users for specialized tools or applications.
  106124             :        */
  106125             :       /* */
  106126             : 
  106127             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  106128             : 
  106129             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  106130             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  106131             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  106132             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  106133             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  106134             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  106135             :           being used with the AST File I/O mechanism.
  106136             :        */
  106137             :           virtual bool isInMemoryPool() override;
  106138             : 
  106139             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  106140             : 
  106141             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  106142             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  106143             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  106144             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  106145             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  106146             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  106147             :           being used with the AST File I/O mechanism.
  106148             :        */
  106149             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  106150             : 
  106151             :       // DQ (4/30/2006): Modified to be a const function.
  106152             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  106153             : 
  106154             :           This functions is part of general support for many possible tools to operate 
  106155             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  106156             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  106157             :           less than the set of pointers used by the AST file I/O. This is part of
  106158             :           work implemented by Andreas, and support tools such as the AST graph generation.
  106159             : 
  106160             :           \warning This function can return unexpected data members and thus the 
  106161             :                    order and the number of elements is unpredicable and subject 
  106162             :                    to change.
  106163             : 
  106164             :           \returns STL vector of pairs of SgNode* and strings
  106165             :        */
  106166             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  106167             : 
  106168             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  106169             : 
  106170             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  106171             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  106172             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  106173             : 
  106174             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  106175             :                    and subject to change.
  106176             :        */
  106177             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  106178             : 
  106179             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  106180             : 
  106181             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  106182             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  106183             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  106184             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  106185             : 
  106186             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  106187             : 
  106188             :           \returns long
  106189             :        */
  106190             :           virtual long getChildIndex( SgNode* childNode ) const override;
  106191             : 
  106192             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  106193             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  106194             :       /* \brief Constructor for use by AST File I/O Mechanism
  106195             : 
  106196             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  106197             :           which obtained via fast binary file I/O from disk.
  106198             :        */
  106199             :        // SgOmpCopyprivateClause( SgOmpCopyprivateClauseStorageClass& source );
  106200             : 
  106201             : 
  106202             : 
  106203             : 
  106204             : 
  106205             :  // JH (10/24/2005): methods added to support the ast file IO
  106206             :     private:
  106207             : 
  106208             :       /* name AST Memory Allocation Support Functions
  106209             :           \brief Memory allocations support....
  106210             : 
  106211             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  106212             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  106213             :           and support the AST File I/O Mechanism.
  106214             :        */
  106215             :       /* */
  106216             : 
  106217             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  106218             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  106219             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  106220             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  106221             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  106222             :           a correspinding one in the AST_FILE_IO class!
  106223             :        */
  106224             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  106225             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  106226             :       /* \brief Typedef used for low level memory access.
  106227             :        */
  106228             :        // typedef unsigned char* TestType;
  106229             : 
  106230             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  106231             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  106232             :       /* \brief Typedef used to hold memory addresses as values.
  106233             :        */
  106234             :        // typedef unsigned long  AddressType;
  106235             : 
  106236             : 
  106237             : 
  106238             :        // necessary, to have direct access to the p_freepointer and the private methods !
  106239             :       /*! \brief friend class declaration to support AST File I/O */
  106240             :           friend class AST_FILE_IO;
  106241             : 
  106242             :       /*! \brief friend class declaration to support AST File I/O */
  106243             :           friend class SgOmpCopyprivateClauseStorageClass;
  106244             : 
  106245             :       /*! \brief friend class declaration to support AST File I/O */
  106246             :           friend class AstSpecificDataManagingClass;
  106247             : 
  106248             :       /*! \brief friend class declaration to support AST File I/O */
  106249             :           friend class AstSpecificDataManagingClassStorageClass;
  106250             :     public:
  106251             :       /*! \brief IR node constructor to support AST File I/O */
  106252             :           SgOmpCopyprivateClause( const SgOmpCopyprivateClauseStorageClass& source );
  106253             : 
  106254             :  // private: // JJW hack
  106255             :        /*
  106256             :           name AST Memory Allocation Support Variables
  106257             :           Memory allocations support variables 
  106258             : 
  106259             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  106260             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  106261             :           and support the AST File I/O Mechanism.
  106262             :        */
  106263             :       /* */
  106264             : 
  106265             :     public:
  106266             : 
  106267             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  106268             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  106269             :       // virtual SgNode* addRegExpAttribute();
  106270             :       /*! \brief Support for AST matching using regular expression.
  106271             : 
  106272             :           This support is incomplete and the subject of current research to define 
  106273             :           RegEx trees to support inexact matching.
  106274             :        */
  106275             :           SgOmpCopyprivateClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  106276             : 
  106277             : // *** COMMON CODE SECTION ENDS HERE ***
  106278             : 
  106279             : 
  106280             : // End of memberFunctionString
  106281             : // Start of memberFunctionString
  106282             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  106283             : 
  106284             :      // the generated cast function
  106285             :      // friend ROSE_DLL_API SgOmpCopyprivateClause* isSgOmpCopyprivateClause ( SgNode* s );
  106286             : 
  106287             :           typedef SgOmpVariablesClause base_node_type;
  106288             : 
  106289             : 
  106290             : // End of memberFunctionString
  106291             : 
  106292             : 
  106293             :      public: 
  106294             :          virtual ~SgOmpCopyprivateClause();
  106295             : 
  106296             : 
  106297             :      public: 
  106298             :          SgOmpCopyprivateClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  106299             :          SgOmpCopyprivateClause(SgExprListExp* variables); 
  106300             : 
  106301             :     protected:
  106302             : 
  106303             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpCopyprivateClause>;
  106304             : 
  106305             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106306             : 
  106307             : 
  106308             :    };
  106309             : #endif
  106310             : 
  106311             : // postdeclarations for SgOmpCopyprivateClause
  106312             : 
  106313             : /* #line 106314 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106314             : 
  106315             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  106316             : 
  106317             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106318             : 
  106319             : 
  106320             : /* #line 106321 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106321             : 
  106322             : 
  106323             : 
  106324             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106325             : 
  106326             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  106327             : //      This code is automatically generated for each 
  106328             : //      terminal and non-terminal within the defined 
  106329             : //      grammar.  There is a simple way to change the 
  106330             : //      code to fix bugs etc.  See the ROSE README file
  106331             : //      for directions.
  106332             : 
  106333             : // tps: (02/22/2010): Adding DLL export requirements
  106334             : #include "rosedll.h"
  106335             : 
  106336             : // predeclarations for SgOmpPrivateClause
  106337             : 
  106338             : /* #line 106339 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106339             : 
  106340             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  106341             : 
  106342             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106343             : 
  106344             : #if 1
  106345             : // Class Definition for SgOmpPrivateClause
  106346             : class ROSE_DLL_API SgOmpPrivateClause  : public SgOmpVariablesClause
  106347             :    {
  106348             :      public:
  106349             : 
  106350             : 
  106351             : /* #line 106352 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106352             : 
  106353             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  106354             : // Start of memberFunctionString
  106355             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  106356             : 
  106357             : // *** COMMON CODE SECTION BEGINS HERE ***
  106358             : 
  106359             :     public:
  106360             : 
  106361             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  106362             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  106363             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  106364             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  106365             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  106366             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  106367             : 
  106368             :       /*! \brief returns a string representing the class name */
  106369             :           virtual std::string class_name() const override;
  106370             : 
  106371             :       /*! \brief returns new style SageIII enum values */
  106372             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  106373             : 
  106374             :       /*! \brief static variant value */
  106375             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  106376             :        // static const VariantT static_variant = V_SgOmpPrivateClause;
  106377             :           enum { static_variant = V_SgOmpPrivateClause };
  106378             : 
  106379             :        /* the generated cast function */
  106380             :       /*! \brief Casts pointer from base class to derived class */
  106381             :           ROSE_DLL_API friend       SgOmpPrivateClause* isSgOmpPrivateClause(       SgNode * s );
  106382             : 
  106383             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  106384             :           ROSE_DLL_API friend const SgOmpPrivateClause* isSgOmpPrivateClause( const SgNode * s );
  106385             : 
  106386             :      // ******************************************
  106387             :      // * Memory Pool / New / Delete
  106388             :      // ******************************************
  106389             : 
  106390             :      public:
  106391             :           /// \private
  106392             :           static const unsigned pool_size; //
  106393             :           /// \private
  106394             :           static std::vector<unsigned char *> pools; //
  106395             :           /// \private
  106396             :           static SgOmpPrivateClause * next_node; // 
  106397             : 
  106398             :           /// \private
  106399             :           static unsigned long initializeStorageClassArray(SgOmpPrivateClauseStorageClass *); //
  106400             : 
  106401             :           /// \private
  106402             :           static void clearMemoryPool(); //
  106403             :           static void deleteMemoryPool(); //
  106404             : 
  106405             :           /// \private
  106406             :           static void extendMemoryPoolForFileIO(); //
  106407             : 
  106408             :           /// \private
  106409             :           static SgOmpPrivateClause * getPointerFromGlobalIndex(unsigned long); //
  106410             :           /// \private
  106411             :           static SgOmpPrivateClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  106412             : 
  106413             :           /// \private
  106414             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  106415             :           /// \private
  106416             :           static void resetValidFreepointers(); //
  106417             :           /// \private
  106418             :           static unsigned long getNumberOfLastValidPointer(); //
  106419             : 
  106420             : 
  106421             : #if defined(INLINE_FUNCTIONS)
  106422             :       /*! \brief returns pointer to newly allocated IR node */
  106423             :           inline void *operator new (size_t size);
  106424             : #else
  106425             :       /*! \brief returns pointer to newly allocated IR node */
  106426             :           void *operator new (size_t size);
  106427             : #endif
  106428             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  106429             :           void operator delete (void* pointer, size_t size);
  106430             : 
  106431             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  106432           0 :           void operator delete (void* pointer)
  106433             :              {
  106434             :             // This is the generated delete operator...
  106435           0 :                SgOmpPrivateClause::operator delete (pointer,sizeof(SgOmpPrivateClause));
  106436             :              }
  106437             : 
  106438             :       /*! \brief Returns the total number of IR nodes of this type */
  106439             :           static size_t numberOfNodes();
  106440             : 
  106441             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  106442             :           static size_t memoryUsage();
  106443             : 
  106444             :       // End of scope which started in IR nodes specific code 
  106445             :       /* */
  106446             : 
  106447             :       /* name Internal Functions
  106448             :           \brief Internal functions ... incomplete-documentation
  106449             : 
  106450             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106451             :           or by particularly knowledgeable users for specialized tools or applications.
  106452             : 
  106453             :           \internal We could not make these private because they are required by user for special purposes. And 
  106454             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  106455             :          
  106456             :        */
  106457             : 
  106458             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  106459             :        // overridden in every class by *generated* implementation
  106460             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  106461             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  106462             :        // MS: 06/28/02 container of names of variables or container indices 
  106463             :        // used used in the traversal to access AST successor nodes
  106464             :        // overridden in every class by *generated* implementation
  106465             :       /*! \brief container of names of variables or container indices used used in the traversal
  106466             :           to access AST successor nodes overridden in every class by *generated* implementation */
  106467             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  106468             : 
  106469             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  106470             :        // than all the vector copies. The implementation for these functions is generated for each class.
  106471             :       /*! \brief return number of children in the traversal successor list */
  106472             :           virtual size_t get_numberOfTraversalSuccessors() override;
  106473             :       /*! \brief index-based access to traversal successors by index number */
  106474             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  106475             :       /*! \brief index-based access to traversal successors by child node */
  106476             :           virtual size_t get_childIndex(SgNode *child) override;
  106477             : 
  106478             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  106479             :        // MS: 08/16/2002 method for generating RTI information
  106480             :       /*! \brief return C++ Runtime-Time-Information */
  106481             :           virtual RTIReturnType roseRTI() override;
  106482             : #endif
  106483             :       /* */
  106484             : 
  106485             : 
  106486             : 
  106487             :       /* name Deprecated Functions
  106488             :           \brief Deprecated functions ... incomplete-documentation
  106489             : 
  106490             :           These functions have been deprecated from use.
  106491             :        */
  106492             :       /* */
  106493             : 
  106494             :       /*! returns a C style string (char*) representing the class name */
  106495             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  106496             : 
  106497             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  106498             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  106499             : #if 0
  106500             :       /*! returns old style Sage II enum values */
  106501             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  106502             :       /*! returns old style Sage II enum values */
  106503             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  106504             : #endif
  106505             :       /* */
  106506             : 
  106507             : 
  106508             : 
  106509             : 
  106510             :      public:
  106511             :       /* name Traversal Support Functions
  106512             :           \brief Traversal support functions ... incomplete-documentation
  106513             : 
  106514             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106515             :           or by particularly knowledgable users for specialized tools or applications.
  106516             :        */
  106517             :       /* */
  106518             : 
  106519             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  106520             :        // (inferior to ROSE traversal mechanism, experimental).
  106521             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  106522             :        */
  106523             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  106524             : 
  106525             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  106526             :       /*! \brief support for the classic visitor pattern done in GoF */
  106527             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  106528             : 
  106529             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  106530             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  106531             :        */
  106532             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  106533             : 
  106534             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  106535             :        */
  106536             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  106537             : 
  106538             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  106539             :        // This traversal helps support internal tools that call static member functions.
  106540             :        // note: this function operates on the memory pools.
  106541             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  106542             :        */
  106543             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  106544             :       /* */
  106545             : 
  106546             : 
  106547             :      public:
  106548             :       /* name Memory Allocation Functions
  106549             :           \brief Memory allocations functions ... incomplete-documentation
  106550             : 
  106551             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106552             :           or by particularly knowledgable users for specialized tools or applications.
  106553             :        */
  106554             :       /* */
  106555             : 
  106556             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  106557             : 
  106558             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  106559             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  106560             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  106561             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  106562             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  106563             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  106564             :           being used with the AST File I/O mechanism.
  106565             :        */
  106566             :           virtual bool isInMemoryPool() override;
  106567             : 
  106568             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  106569             : 
  106570             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  106571             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  106572             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  106573             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  106574             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  106575             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  106576             :           being used with the AST File I/O mechanism.
  106577             :        */
  106578             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  106579             : 
  106580             :       // DQ (4/30/2006): Modified to be a const function.
  106581             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  106582             : 
  106583             :           This functions is part of general support for many possible tools to operate 
  106584             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  106585             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  106586             :           less than the set of pointers used by the AST file I/O. This is part of
  106587             :           work implemented by Andreas, and support tools such as the AST graph generation.
  106588             : 
  106589             :           \warning This function can return unexpected data members and thus the 
  106590             :                    order and the number of elements is unpredicable and subject 
  106591             :                    to change.
  106592             : 
  106593             :           \returns STL vector of pairs of SgNode* and strings
  106594             :        */
  106595             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  106596             : 
  106597             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  106598             : 
  106599             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  106600             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  106601             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  106602             : 
  106603             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  106604             :                    and subject to change.
  106605             :        */
  106606             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  106607             : 
  106608             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  106609             : 
  106610             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  106611             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  106612             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  106613             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  106614             : 
  106615             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  106616             : 
  106617             :           \returns long
  106618             :        */
  106619             :           virtual long getChildIndex( SgNode* childNode ) const override;
  106620             : 
  106621             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  106622             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  106623             :       /* \brief Constructor for use by AST File I/O Mechanism
  106624             : 
  106625             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  106626             :           which obtained via fast binary file I/O from disk.
  106627             :        */
  106628             :        // SgOmpPrivateClause( SgOmpPrivateClauseStorageClass& source );
  106629             : 
  106630             : 
  106631             : 
  106632             : 
  106633             : 
  106634             :  // JH (10/24/2005): methods added to support the ast file IO
  106635             :     private:
  106636             : 
  106637             :       /* name AST Memory Allocation Support Functions
  106638             :           \brief Memory allocations support....
  106639             : 
  106640             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  106641             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  106642             :           and support the AST File I/O Mechanism.
  106643             :        */
  106644             :       /* */
  106645             : 
  106646             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  106647             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  106648             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  106649             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  106650             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  106651             :           a correspinding one in the AST_FILE_IO class!
  106652             :        */
  106653             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  106654             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  106655             :       /* \brief Typedef used for low level memory access.
  106656             :        */
  106657             :        // typedef unsigned char* TestType;
  106658             : 
  106659             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  106660             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  106661             :       /* \brief Typedef used to hold memory addresses as values.
  106662             :        */
  106663             :        // typedef unsigned long  AddressType;
  106664             : 
  106665             : 
  106666             : 
  106667             :        // necessary, to have direct access to the p_freepointer and the private methods !
  106668             :       /*! \brief friend class declaration to support AST File I/O */
  106669             :           friend class AST_FILE_IO;
  106670             : 
  106671             :       /*! \brief friend class declaration to support AST File I/O */
  106672             :           friend class SgOmpPrivateClauseStorageClass;
  106673             : 
  106674             :       /*! \brief friend class declaration to support AST File I/O */
  106675             :           friend class AstSpecificDataManagingClass;
  106676             : 
  106677             :       /*! \brief friend class declaration to support AST File I/O */
  106678             :           friend class AstSpecificDataManagingClassStorageClass;
  106679             :     public:
  106680             :       /*! \brief IR node constructor to support AST File I/O */
  106681             :           SgOmpPrivateClause( const SgOmpPrivateClauseStorageClass& source );
  106682             : 
  106683             :  // private: // JJW hack
  106684             :        /*
  106685             :           name AST Memory Allocation Support Variables
  106686             :           Memory allocations support variables 
  106687             : 
  106688             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  106689             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  106690             :           and support the AST File I/O Mechanism.
  106691             :        */
  106692             :       /* */
  106693             : 
  106694             :     public:
  106695             : 
  106696             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  106697             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  106698             :       // virtual SgNode* addRegExpAttribute();
  106699             :       /*! \brief Support for AST matching using regular expression.
  106700             : 
  106701             :           This support is incomplete and the subject of current research to define 
  106702             :           RegEx trees to support inexact matching.
  106703             :        */
  106704             :           SgOmpPrivateClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  106705             : 
  106706             : // *** COMMON CODE SECTION ENDS HERE ***
  106707             : 
  106708             : 
  106709             : // End of memberFunctionString
  106710             : // Start of memberFunctionString
  106711             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  106712             : 
  106713             :      // the generated cast function
  106714             :      // friend ROSE_DLL_API SgOmpPrivateClause* isSgOmpPrivateClause ( SgNode* s );
  106715             : 
  106716             :           typedef SgOmpVariablesClause base_node_type;
  106717             : 
  106718             : 
  106719             : // End of memberFunctionString
  106720             : 
  106721             : 
  106722             :      public: 
  106723             :          virtual ~SgOmpPrivateClause();
  106724             : 
  106725             : 
  106726             :      public: 
  106727             :          SgOmpPrivateClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  106728             :          SgOmpPrivateClause(SgExprListExp* variables); 
  106729             : 
  106730             :     protected:
  106731             : 
  106732             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpPrivateClause>;
  106733             : 
  106734             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106735             : 
  106736             : 
  106737             :    };
  106738             : #endif
  106739             : 
  106740             : // postdeclarations for SgOmpPrivateClause
  106741             : 
  106742             : /* #line 106743 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106743             : 
  106744             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  106745             : 
  106746             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106747             : 
  106748             : 
  106749             : /* #line 106750 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106750             : 
  106751             : 
  106752             : 
  106753             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106754             : 
  106755             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  106756             : //      This code is automatically generated for each 
  106757             : //      terminal and non-terminal within the defined 
  106758             : //      grammar.  There is a simple way to change the 
  106759             : //      code to fix bugs etc.  See the ROSE README file
  106760             : //      for directions.
  106761             : 
  106762             : // tps: (02/22/2010): Adding DLL export requirements
  106763             : #include "rosedll.h"
  106764             : 
  106765             : // predeclarations for SgOmpFirstprivateClause
  106766             : 
  106767             : /* #line 106768 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106768             : 
  106769             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  106770             : 
  106771             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  106772             : 
  106773             : #if 1
  106774             : // Class Definition for SgOmpFirstprivateClause
  106775             : class ROSE_DLL_API SgOmpFirstprivateClause  : public SgOmpVariablesClause
  106776             :    {
  106777             :      public:
  106778             : 
  106779             : 
  106780             : /* #line 106781 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  106781             : 
  106782             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  106783             : // Start of memberFunctionString
  106784             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  106785             : 
  106786             : // *** COMMON CODE SECTION BEGINS HERE ***
  106787             : 
  106788             :     public:
  106789             : 
  106790             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  106791             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  106792             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  106793             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  106794             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  106795             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  106796             : 
  106797             :       /*! \brief returns a string representing the class name */
  106798             :           virtual std::string class_name() const override;
  106799             : 
  106800             :       /*! \brief returns new style SageIII enum values */
  106801             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  106802             : 
  106803             :       /*! \brief static variant value */
  106804             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  106805             :        // static const VariantT static_variant = V_SgOmpFirstprivateClause;
  106806             :           enum { static_variant = V_SgOmpFirstprivateClause };
  106807             : 
  106808             :        /* the generated cast function */
  106809             :       /*! \brief Casts pointer from base class to derived class */
  106810             :           ROSE_DLL_API friend       SgOmpFirstprivateClause* isSgOmpFirstprivateClause(       SgNode * s );
  106811             : 
  106812             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  106813             :           ROSE_DLL_API friend const SgOmpFirstprivateClause* isSgOmpFirstprivateClause( const SgNode * s );
  106814             : 
  106815             :      // ******************************************
  106816             :      // * Memory Pool / New / Delete
  106817             :      // ******************************************
  106818             : 
  106819             :      public:
  106820             :           /// \private
  106821             :           static const unsigned pool_size; //
  106822             :           /// \private
  106823             :           static std::vector<unsigned char *> pools; //
  106824             :           /// \private
  106825             :           static SgOmpFirstprivateClause * next_node; // 
  106826             : 
  106827             :           /// \private
  106828             :           static unsigned long initializeStorageClassArray(SgOmpFirstprivateClauseStorageClass *); //
  106829             : 
  106830             :           /// \private
  106831             :           static void clearMemoryPool(); //
  106832             :           static void deleteMemoryPool(); //
  106833             : 
  106834             :           /// \private
  106835             :           static void extendMemoryPoolForFileIO(); //
  106836             : 
  106837             :           /// \private
  106838             :           static SgOmpFirstprivateClause * getPointerFromGlobalIndex(unsigned long); //
  106839             :           /// \private
  106840             :           static SgOmpFirstprivateClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  106841             : 
  106842             :           /// \private
  106843             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  106844             :           /// \private
  106845             :           static void resetValidFreepointers(); //
  106846             :           /// \private
  106847             :           static unsigned long getNumberOfLastValidPointer(); //
  106848             : 
  106849             : 
  106850             : #if defined(INLINE_FUNCTIONS)
  106851             :       /*! \brief returns pointer to newly allocated IR node */
  106852             :           inline void *operator new (size_t size);
  106853             : #else
  106854             :       /*! \brief returns pointer to newly allocated IR node */
  106855             :           void *operator new (size_t size);
  106856             : #endif
  106857             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  106858             :           void operator delete (void* pointer, size_t size);
  106859             : 
  106860             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  106861           0 :           void operator delete (void* pointer)
  106862             :              {
  106863             :             // This is the generated delete operator...
  106864           0 :                SgOmpFirstprivateClause::operator delete (pointer,sizeof(SgOmpFirstprivateClause));
  106865             :              }
  106866             : 
  106867             :       /*! \brief Returns the total number of IR nodes of this type */
  106868             :           static size_t numberOfNodes();
  106869             : 
  106870             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  106871             :           static size_t memoryUsage();
  106872             : 
  106873             :       // End of scope which started in IR nodes specific code 
  106874             :       /* */
  106875             : 
  106876             :       /* name Internal Functions
  106877             :           \brief Internal functions ... incomplete-documentation
  106878             : 
  106879             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106880             :           or by particularly knowledgeable users for specialized tools or applications.
  106881             : 
  106882             :           \internal We could not make these private because they are required by user for special purposes. And 
  106883             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  106884             :          
  106885             :        */
  106886             : 
  106887             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  106888             :        // overridden in every class by *generated* implementation
  106889             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  106890             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  106891             :        // MS: 06/28/02 container of names of variables or container indices 
  106892             :        // used used in the traversal to access AST successor nodes
  106893             :        // overridden in every class by *generated* implementation
  106894             :       /*! \brief container of names of variables or container indices used used in the traversal
  106895             :           to access AST successor nodes overridden in every class by *generated* implementation */
  106896             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  106897             : 
  106898             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  106899             :        // than all the vector copies. The implementation for these functions is generated for each class.
  106900             :       /*! \brief return number of children in the traversal successor list */
  106901             :           virtual size_t get_numberOfTraversalSuccessors() override;
  106902             :       /*! \brief index-based access to traversal successors by index number */
  106903             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  106904             :       /*! \brief index-based access to traversal successors by child node */
  106905             :           virtual size_t get_childIndex(SgNode *child) override;
  106906             : 
  106907             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  106908             :        // MS: 08/16/2002 method for generating RTI information
  106909             :       /*! \brief return C++ Runtime-Time-Information */
  106910             :           virtual RTIReturnType roseRTI() override;
  106911             : #endif
  106912             :       /* */
  106913             : 
  106914             : 
  106915             : 
  106916             :       /* name Deprecated Functions
  106917             :           \brief Deprecated functions ... incomplete-documentation
  106918             : 
  106919             :           These functions have been deprecated from use.
  106920             :        */
  106921             :       /* */
  106922             : 
  106923             :       /*! returns a C style string (char*) representing the class name */
  106924             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  106925             : 
  106926             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  106927             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  106928             : #if 0
  106929             :       /*! returns old style Sage II enum values */
  106930             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  106931             :       /*! returns old style Sage II enum values */
  106932             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  106933             : #endif
  106934             :       /* */
  106935             : 
  106936             : 
  106937             : 
  106938             : 
  106939             :      public:
  106940             :       /* name Traversal Support Functions
  106941             :           \brief Traversal support functions ... incomplete-documentation
  106942             : 
  106943             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106944             :           or by particularly knowledgable users for specialized tools or applications.
  106945             :        */
  106946             :       /* */
  106947             : 
  106948             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  106949             :        // (inferior to ROSE traversal mechanism, experimental).
  106950             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  106951             :        */
  106952             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  106953             : 
  106954             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  106955             :       /*! \brief support for the classic visitor pattern done in GoF */
  106956             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  106957             : 
  106958             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  106959             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  106960             :        */
  106961             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  106962             : 
  106963             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  106964             :        */
  106965             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  106966             : 
  106967             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  106968             :        // This traversal helps support internal tools that call static member functions.
  106969             :        // note: this function operates on the memory pools.
  106970             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  106971             :        */
  106972             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  106973             :       /* */
  106974             : 
  106975             : 
  106976             :      public:
  106977             :       /* name Memory Allocation Functions
  106978             :           \brief Memory allocations functions ... incomplete-documentation
  106979             : 
  106980             :           These functions have been made public as part of the design, but they are suggested for internal use 
  106981             :           or by particularly knowledgable users for specialized tools or applications.
  106982             :        */
  106983             :       /* */
  106984             : 
  106985             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  106986             : 
  106987             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  106988             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  106989             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  106990             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  106991             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  106992             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  106993             :           being used with the AST File I/O mechanism.
  106994             :        */
  106995             :           virtual bool isInMemoryPool() override;
  106996             : 
  106997             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  106998             : 
  106999             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  107000             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  107001             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  107002             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  107003             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  107004             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  107005             :           being used with the AST File I/O mechanism.
  107006             :        */
  107007             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  107008             : 
  107009             :       // DQ (4/30/2006): Modified to be a const function.
  107010             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  107011             : 
  107012             :           This functions is part of general support for many possible tools to operate 
  107013             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  107014             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  107015             :           less than the set of pointers used by the AST file I/O. This is part of
  107016             :           work implemented by Andreas, and support tools such as the AST graph generation.
  107017             : 
  107018             :           \warning This function can return unexpected data members and thus the 
  107019             :                    order and the number of elements is unpredicable and subject 
  107020             :                    to change.
  107021             : 
  107022             :           \returns STL vector of pairs of SgNode* and strings
  107023             :        */
  107024             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  107025             : 
  107026             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  107027             : 
  107028             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  107029             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  107030             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  107031             : 
  107032             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  107033             :                    and subject to change.
  107034             :        */
  107035             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  107036             : 
  107037             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  107038             : 
  107039             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  107040             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  107041             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  107042             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  107043             : 
  107044             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  107045             : 
  107046             :           \returns long
  107047             :        */
  107048             :           virtual long getChildIndex( SgNode* childNode ) const override;
  107049             : 
  107050             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  107051             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107052             :       /* \brief Constructor for use by AST File I/O Mechanism
  107053             : 
  107054             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  107055             :           which obtained via fast binary file I/O from disk.
  107056             :        */
  107057             :        // SgOmpFirstprivateClause( SgOmpFirstprivateClauseStorageClass& source );
  107058             : 
  107059             : 
  107060             : 
  107061             : 
  107062             : 
  107063             :  // JH (10/24/2005): methods added to support the ast file IO
  107064             :     private:
  107065             : 
  107066             :       /* name AST Memory Allocation Support Functions
  107067             :           \brief Memory allocations support....
  107068             : 
  107069             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  107070             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  107071             :           and support the AST File I/O Mechanism.
  107072             :        */
  107073             :       /* */
  107074             : 
  107075             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  107076             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  107077             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  107078             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  107079             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  107080             :           a correspinding one in the AST_FILE_IO class!
  107081             :        */
  107082             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  107083             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107084             :       /* \brief Typedef used for low level memory access.
  107085             :        */
  107086             :        // typedef unsigned char* TestType;
  107087             : 
  107088             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  107089             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107090             :       /* \brief Typedef used to hold memory addresses as values.
  107091             :        */
  107092             :        // typedef unsigned long  AddressType;
  107093             : 
  107094             : 
  107095             : 
  107096             :        // necessary, to have direct access to the p_freepointer and the private methods !
  107097             :       /*! \brief friend class declaration to support AST File I/O */
  107098             :           friend class AST_FILE_IO;
  107099             : 
  107100             :       /*! \brief friend class declaration to support AST File I/O */
  107101             :           friend class SgOmpFirstprivateClauseStorageClass;
  107102             : 
  107103             :       /*! \brief friend class declaration to support AST File I/O */
  107104             :           friend class AstSpecificDataManagingClass;
  107105             : 
  107106             :       /*! \brief friend class declaration to support AST File I/O */
  107107             :           friend class AstSpecificDataManagingClassStorageClass;
  107108             :     public:
  107109             :       /*! \brief IR node constructor to support AST File I/O */
  107110             :           SgOmpFirstprivateClause( const SgOmpFirstprivateClauseStorageClass& source );
  107111             : 
  107112             :  // private: // JJW hack
  107113             :        /*
  107114             :           name AST Memory Allocation Support Variables
  107115             :           Memory allocations support variables 
  107116             : 
  107117             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  107118             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  107119             :           and support the AST File I/O Mechanism.
  107120             :        */
  107121             :       /* */
  107122             : 
  107123             :     public:
  107124             : 
  107125             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  107126             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  107127             :       // virtual SgNode* addRegExpAttribute();
  107128             :       /*! \brief Support for AST matching using regular expression.
  107129             : 
  107130             :           This support is incomplete and the subject of current research to define 
  107131             :           RegEx trees to support inexact matching.
  107132             :        */
  107133             :           SgOmpFirstprivateClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  107134             : 
  107135             : // *** COMMON CODE SECTION ENDS HERE ***
  107136             : 
  107137             : 
  107138             : // End of memberFunctionString
  107139             : // Start of memberFunctionString
  107140             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  107141             : 
  107142             :      // the generated cast function
  107143             :      // friend ROSE_DLL_API SgOmpFirstprivateClause* isSgOmpFirstprivateClause ( SgNode* s );
  107144             : 
  107145             :           typedef SgOmpVariablesClause base_node_type;
  107146             : 
  107147             : 
  107148             : // End of memberFunctionString
  107149             : 
  107150             : 
  107151             :      public: 
  107152             :          virtual ~SgOmpFirstprivateClause();
  107153             : 
  107154             : 
  107155             :      public: 
  107156             :          SgOmpFirstprivateClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  107157             :          SgOmpFirstprivateClause(SgExprListExp* variables); 
  107158             : 
  107159             :     protected:
  107160             : 
  107161             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpFirstprivateClause>;
  107162             : 
  107163             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107164             : 
  107165             : 
  107166             :    };
  107167             : #endif
  107168             : 
  107169             : // postdeclarations for SgOmpFirstprivateClause
  107170             : 
  107171             : /* #line 107172 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107172             : 
  107173             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  107174             : 
  107175             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107176             : 
  107177             : 
  107178             : /* #line 107179 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107179             : 
  107180             : 
  107181             : 
  107182             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107183             : 
  107184             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  107185             : //      This code is automatically generated for each 
  107186             : //      terminal and non-terminal within the defined 
  107187             : //      grammar.  There is a simple way to change the 
  107188             : //      code to fix bugs etc.  See the ROSE README file
  107189             : //      for directions.
  107190             : 
  107191             : // tps: (02/22/2010): Adding DLL export requirements
  107192             : #include "rosedll.h"
  107193             : 
  107194             : // predeclarations for SgOmpNontemporalClause
  107195             : 
  107196             : /* #line 107197 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107197             : 
  107198             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  107199             : 
  107200             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107201             : 
  107202             : #if 1
  107203             : // Class Definition for SgOmpNontemporalClause
  107204             : class ROSE_DLL_API SgOmpNontemporalClause  : public SgOmpVariablesClause
  107205             :    {
  107206             :      public:
  107207             : 
  107208             : 
  107209             : /* #line 107210 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107210             : 
  107211             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  107212             : // Start of memberFunctionString
  107213             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  107214             : 
  107215             : // *** COMMON CODE SECTION BEGINS HERE ***
  107216             : 
  107217             :     public:
  107218             : 
  107219             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  107220             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  107221             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  107222             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  107223             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  107224             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  107225             : 
  107226             :       /*! \brief returns a string representing the class name */
  107227             :           virtual std::string class_name() const override;
  107228             : 
  107229             :       /*! \brief returns new style SageIII enum values */
  107230             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  107231             : 
  107232             :       /*! \brief static variant value */
  107233             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  107234             :        // static const VariantT static_variant = V_SgOmpNontemporalClause;
  107235             :           enum { static_variant = V_SgOmpNontemporalClause };
  107236             : 
  107237             :        /* the generated cast function */
  107238             :       /*! \brief Casts pointer from base class to derived class */
  107239             :           ROSE_DLL_API friend       SgOmpNontemporalClause* isSgOmpNontemporalClause(       SgNode * s );
  107240             : 
  107241             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  107242             :           ROSE_DLL_API friend const SgOmpNontemporalClause* isSgOmpNontemporalClause( const SgNode * s );
  107243             : 
  107244             :      // ******************************************
  107245             :      // * Memory Pool / New / Delete
  107246             :      // ******************************************
  107247             : 
  107248             :      public:
  107249             :           /// \private
  107250             :           static const unsigned pool_size; //
  107251             :           /// \private
  107252             :           static std::vector<unsigned char *> pools; //
  107253             :           /// \private
  107254             :           static SgOmpNontemporalClause * next_node; // 
  107255             : 
  107256             :           /// \private
  107257             :           static unsigned long initializeStorageClassArray(SgOmpNontemporalClauseStorageClass *); //
  107258             : 
  107259             :           /// \private
  107260             :           static void clearMemoryPool(); //
  107261             :           static void deleteMemoryPool(); //
  107262             : 
  107263             :           /// \private
  107264             :           static void extendMemoryPoolForFileIO(); //
  107265             : 
  107266             :           /// \private
  107267             :           static SgOmpNontemporalClause * getPointerFromGlobalIndex(unsigned long); //
  107268             :           /// \private
  107269             :           static SgOmpNontemporalClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  107270             : 
  107271             :           /// \private
  107272             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  107273             :           /// \private
  107274             :           static void resetValidFreepointers(); //
  107275             :           /// \private
  107276             :           static unsigned long getNumberOfLastValidPointer(); //
  107277             : 
  107278             : 
  107279             : #if defined(INLINE_FUNCTIONS)
  107280             :       /*! \brief returns pointer to newly allocated IR node */
  107281             :           inline void *operator new (size_t size);
  107282             : #else
  107283             :       /*! \brief returns pointer to newly allocated IR node */
  107284             :           void *operator new (size_t size);
  107285             : #endif
  107286             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  107287             :           void operator delete (void* pointer, size_t size);
  107288             : 
  107289             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  107290           0 :           void operator delete (void* pointer)
  107291             :              {
  107292             :             // This is the generated delete operator...
  107293           0 :                SgOmpNontemporalClause::operator delete (pointer,sizeof(SgOmpNontemporalClause));
  107294             :              }
  107295             : 
  107296             :       /*! \brief Returns the total number of IR nodes of this type */
  107297             :           static size_t numberOfNodes();
  107298             : 
  107299             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  107300             :           static size_t memoryUsage();
  107301             : 
  107302             :       // End of scope which started in IR nodes specific code 
  107303             :       /* */
  107304             : 
  107305             :       /* name Internal Functions
  107306             :           \brief Internal functions ... incomplete-documentation
  107307             : 
  107308             :           These functions have been made public as part of the design, but they are suggested for internal use 
  107309             :           or by particularly knowledgeable users for specialized tools or applications.
  107310             : 
  107311             :           \internal We could not make these private because they are required by user for special purposes. And 
  107312             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  107313             :          
  107314             :        */
  107315             : 
  107316             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  107317             :        // overridden in every class by *generated* implementation
  107318             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  107319             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  107320             :        // MS: 06/28/02 container of names of variables or container indices 
  107321             :        // used used in the traversal to access AST successor nodes
  107322             :        // overridden in every class by *generated* implementation
  107323             :       /*! \brief container of names of variables or container indices used used in the traversal
  107324             :           to access AST successor nodes overridden in every class by *generated* implementation */
  107325             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  107326             : 
  107327             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  107328             :        // than all the vector copies. The implementation for these functions is generated for each class.
  107329             :       /*! \brief return number of children in the traversal successor list */
  107330             :           virtual size_t get_numberOfTraversalSuccessors() override;
  107331             :       /*! \brief index-based access to traversal successors by index number */
  107332             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  107333             :       /*! \brief index-based access to traversal successors by child node */
  107334             :           virtual size_t get_childIndex(SgNode *child) override;
  107335             : 
  107336             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  107337             :        // MS: 08/16/2002 method for generating RTI information
  107338             :       /*! \brief return C++ Runtime-Time-Information */
  107339             :           virtual RTIReturnType roseRTI() override;
  107340             : #endif
  107341             :       /* */
  107342             : 
  107343             : 
  107344             : 
  107345             :       /* name Deprecated Functions
  107346             :           \brief Deprecated functions ... incomplete-documentation
  107347             : 
  107348             :           These functions have been deprecated from use.
  107349             :        */
  107350             :       /* */
  107351             : 
  107352             :       /*! returns a C style string (char*) representing the class name */
  107353             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  107354             : 
  107355             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  107356             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  107357             : #if 0
  107358             :       /*! returns old style Sage II enum values */
  107359             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  107360             :       /*! returns old style Sage II enum values */
  107361             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  107362             : #endif
  107363             :       /* */
  107364             : 
  107365             : 
  107366             : 
  107367             : 
  107368             :      public:
  107369             :       /* name Traversal Support Functions
  107370             :           \brief Traversal support functions ... incomplete-documentation
  107371             : 
  107372             :           These functions have been made public as part of the design, but they are suggested for internal use 
  107373             :           or by particularly knowledgable users for specialized tools or applications.
  107374             :        */
  107375             :       /* */
  107376             : 
  107377             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  107378             :        // (inferior to ROSE traversal mechanism, experimental).
  107379             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  107380             :        */
  107381             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  107382             : 
  107383             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  107384             :       /*! \brief support for the classic visitor pattern done in GoF */
  107385             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  107386             : 
  107387             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  107388             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  107389             :        */
  107390             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  107391             : 
  107392             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  107393             :        */
  107394             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  107395             : 
  107396             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  107397             :        // This traversal helps support internal tools that call static member functions.
  107398             :        // note: this function operates on the memory pools.
  107399             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  107400             :        */
  107401             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  107402             :       /* */
  107403             : 
  107404             : 
  107405             :      public:
  107406             :       /* name Memory Allocation Functions
  107407             :           \brief Memory allocations functions ... incomplete-documentation
  107408             : 
  107409             :           These functions have been made public as part of the design, but they are suggested for internal use 
  107410             :           or by particularly knowledgable users for specialized tools or applications.
  107411             :        */
  107412             :       /* */
  107413             : 
  107414             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  107415             : 
  107416             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  107417             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  107418             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  107419             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  107420             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  107421             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  107422             :           being used with the AST File I/O mechanism.
  107423             :        */
  107424             :           virtual bool isInMemoryPool() override;
  107425             : 
  107426             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  107427             : 
  107428             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  107429             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  107430             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  107431             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  107432             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  107433             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  107434             :           being used with the AST File I/O mechanism.
  107435             :        */
  107436             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  107437             : 
  107438             :       // DQ (4/30/2006): Modified to be a const function.
  107439             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  107440             : 
  107441             :           This functions is part of general support for many possible tools to operate 
  107442             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  107443             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  107444             :           less than the set of pointers used by the AST file I/O. This is part of
  107445             :           work implemented by Andreas, and support tools such as the AST graph generation.
  107446             : 
  107447             :           \warning This function can return unexpected data members and thus the 
  107448             :                    order and the number of elements is unpredicable and subject 
  107449             :                    to change.
  107450             : 
  107451             :           \returns STL vector of pairs of SgNode* and strings
  107452             :        */
  107453             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  107454             : 
  107455             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  107456             : 
  107457             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  107458             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  107459             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  107460             : 
  107461             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  107462             :                    and subject to change.
  107463             :        */
  107464             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  107465             : 
  107466             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  107467             : 
  107468             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  107469             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  107470             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  107471             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  107472             : 
  107473             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  107474             : 
  107475             :           \returns long
  107476             :        */
  107477             :           virtual long getChildIndex( SgNode* childNode ) const override;
  107478             : 
  107479             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  107480             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107481             :       /* \brief Constructor for use by AST File I/O Mechanism
  107482             : 
  107483             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  107484             :           which obtained via fast binary file I/O from disk.
  107485             :        */
  107486             :        // SgOmpNontemporalClause( SgOmpNontemporalClauseStorageClass& source );
  107487             : 
  107488             : 
  107489             : 
  107490             : 
  107491             : 
  107492             :  // JH (10/24/2005): methods added to support the ast file IO
  107493             :     private:
  107494             : 
  107495             :       /* name AST Memory Allocation Support Functions
  107496             :           \brief Memory allocations support....
  107497             : 
  107498             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  107499             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  107500             :           and support the AST File I/O Mechanism.
  107501             :        */
  107502             :       /* */
  107503             : 
  107504             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  107505             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  107506             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  107507             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  107508             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  107509             :           a correspinding one in the AST_FILE_IO class!
  107510             :        */
  107511             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  107512             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107513             :       /* \brief Typedef used for low level memory access.
  107514             :        */
  107515             :        // typedef unsigned char* TestType;
  107516             : 
  107517             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  107518             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107519             :       /* \brief Typedef used to hold memory addresses as values.
  107520             :        */
  107521             :        // typedef unsigned long  AddressType;
  107522             : 
  107523             : 
  107524             : 
  107525             :        // necessary, to have direct access to the p_freepointer and the private methods !
  107526             :       /*! \brief friend class declaration to support AST File I/O */
  107527             :           friend class AST_FILE_IO;
  107528             : 
  107529             :       /*! \brief friend class declaration to support AST File I/O */
  107530             :           friend class SgOmpNontemporalClauseStorageClass;
  107531             : 
  107532             :       /*! \brief friend class declaration to support AST File I/O */
  107533             :           friend class AstSpecificDataManagingClass;
  107534             : 
  107535             :       /*! \brief friend class declaration to support AST File I/O */
  107536             :           friend class AstSpecificDataManagingClassStorageClass;
  107537             :     public:
  107538             :       /*! \brief IR node constructor to support AST File I/O */
  107539             :           SgOmpNontemporalClause( const SgOmpNontemporalClauseStorageClass& source );
  107540             : 
  107541             :  // private: // JJW hack
  107542             :        /*
  107543             :           name AST Memory Allocation Support Variables
  107544             :           Memory allocations support variables 
  107545             : 
  107546             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  107547             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  107548             :           and support the AST File I/O Mechanism.
  107549             :        */
  107550             :       /* */
  107551             : 
  107552             :     public:
  107553             : 
  107554             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  107555             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  107556             :       // virtual SgNode* addRegExpAttribute();
  107557             :       /*! \brief Support for AST matching using regular expression.
  107558             : 
  107559             :           This support is incomplete and the subject of current research to define 
  107560             :           RegEx trees to support inexact matching.
  107561             :        */
  107562             :           SgOmpNontemporalClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  107563             : 
  107564             : // *** COMMON CODE SECTION ENDS HERE ***
  107565             : 
  107566             : 
  107567             : // End of memberFunctionString
  107568             : // Start of memberFunctionString
  107569             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  107570             : 
  107571             :      // the generated cast function
  107572             :      // friend ROSE_DLL_API SgOmpNontemporalClause* isSgOmpNontemporalClause ( SgNode* s );
  107573             : 
  107574             :           typedef SgOmpVariablesClause base_node_type;
  107575             : 
  107576             : 
  107577             : // End of memberFunctionString
  107578             : 
  107579             : 
  107580             :      public: 
  107581             :          virtual ~SgOmpNontemporalClause();
  107582             : 
  107583             : 
  107584             :      public: 
  107585             :          SgOmpNontemporalClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  107586             :          SgOmpNontemporalClause(SgExprListExp* variables); 
  107587             : 
  107588             :     protected:
  107589             : 
  107590             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpNontemporalClause>;
  107591             : 
  107592             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107593             : 
  107594             : 
  107595             :    };
  107596             : #endif
  107597             : 
  107598             : // postdeclarations for SgOmpNontemporalClause
  107599             : 
  107600             : /* #line 107601 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107601             : 
  107602             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  107603             : 
  107604             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107605             : 
  107606             : 
  107607             : /* #line 107608 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107608             : 
  107609             : 
  107610             : 
  107611             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107612             : 
  107613             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  107614             : //      This code is automatically generated for each 
  107615             : //      terminal and non-terminal within the defined 
  107616             : //      grammar.  There is a simple way to change the 
  107617             : //      code to fix bugs etc.  See the ROSE README file
  107618             : //      for directions.
  107619             : 
  107620             : // tps: (02/22/2010): Adding DLL export requirements
  107621             : #include "rosedll.h"
  107622             : 
  107623             : // predeclarations for SgOmpInclusiveClause
  107624             : 
  107625             : /* #line 107626 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107626             : 
  107627             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  107628             : 
  107629             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  107630             : 
  107631             : #if 1
  107632             : // Class Definition for SgOmpInclusiveClause
  107633             : class ROSE_DLL_API SgOmpInclusiveClause  : public SgOmpVariablesClause
  107634             :    {
  107635             :      public:
  107636             : 
  107637             : 
  107638             : /* #line 107639 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  107639             : 
  107640             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  107641             : // Start of memberFunctionString
  107642             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  107643             : 
  107644             : // *** COMMON CODE SECTION BEGINS HERE ***
  107645             : 
  107646             :     public:
  107647             : 
  107648             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  107649             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  107650             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  107651             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  107652             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  107653             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  107654             : 
  107655             :       /*! \brief returns a string representing the class name */
  107656             :           virtual std::string class_name() const override;
  107657             : 
  107658             :       /*! \brief returns new style SageIII enum values */
  107659             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  107660             : 
  107661             :       /*! \brief static variant value */
  107662             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  107663             :        // static const VariantT static_variant = V_SgOmpInclusiveClause;
  107664             :           enum { static_variant = V_SgOmpInclusiveClause };
  107665             : 
  107666             :        /* the generated cast function */
  107667             :       /*! \brief Casts pointer from base class to derived class */
  107668             :           ROSE_DLL_API friend       SgOmpInclusiveClause* isSgOmpInclusiveClause(       SgNode * s );
  107669             : 
  107670             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  107671             :           ROSE_DLL_API friend const SgOmpInclusiveClause* isSgOmpInclusiveClause( const SgNode * s );
  107672             : 
  107673             :      // ******************************************
  107674             :      // * Memory Pool / New / Delete
  107675             :      // ******************************************
  107676             : 
  107677             :      public:
  107678             :           /// \private
  107679             :           static const unsigned pool_size; //
  107680             :           /// \private
  107681             :           static std::vector<unsigned char *> pools; //
  107682             :           /// \private
  107683             :           static SgOmpInclusiveClause * next_node; // 
  107684             : 
  107685             :           /// \private
  107686             :           static unsigned long initializeStorageClassArray(SgOmpInclusiveClauseStorageClass *); //
  107687             : 
  107688             :           /// \private
  107689             :           static void clearMemoryPool(); //
  107690             :           static void deleteMemoryPool(); //
  107691             : 
  107692             :           /// \private
  107693             :           static void extendMemoryPoolForFileIO(); //
  107694             : 
  107695             :           /// \private
  107696             :           static SgOmpInclusiveClause * getPointerFromGlobalIndex(unsigned long); //
  107697             :           /// \private
  107698             :           static SgOmpInclusiveClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  107699             : 
  107700             :           /// \private
  107701             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  107702             :           /// \private
  107703             :           static void resetValidFreepointers(); //
  107704             :           /// \private
  107705             :           static unsigned long getNumberOfLastValidPointer(); //
  107706             : 
  107707             : 
  107708             : #if defined(INLINE_FUNCTIONS)
  107709             :       /*! \brief returns pointer to newly allocated IR node */
  107710             :           inline void *operator new (size_t size);
  107711             : #else
  107712             :       /*! \brief returns pointer to newly allocated IR node */
  107713             :           void *operator new (size_t size);
  107714             : #endif
  107715             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  107716             :           void operator delete (void* pointer, size_t size);
  107717             : 
  107718             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  107719           0 :           void operator delete (void* pointer)
  107720             :              {
  107721             :             // This is the generated delete operator...
  107722           0 :                SgOmpInclusiveClause::operator delete (pointer,sizeof(SgOmpInclusiveClause));
  107723             :              }
  107724             : 
  107725             :       /*! \brief Returns the total number of IR nodes of this type */
  107726             :           static size_t numberOfNodes();
  107727             : 
  107728             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  107729             :           static size_t memoryUsage();
  107730             : 
  107731             :       // End of scope which started in IR nodes specific code 
  107732             :       /* */
  107733             : 
  107734             :       /* name Internal Functions
  107735             :           \brief Internal functions ... incomplete-documentation
  107736             : 
  107737             :           These functions have been made public as part of the design, but they are suggested for internal use 
  107738             :           or by particularly knowledgeable users for specialized tools or applications.
  107739             : 
  107740             :           \internal We could not make these private because they are required by user for special purposes. And 
  107741             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  107742             :          
  107743             :        */
  107744             : 
  107745             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  107746             :        // overridden in every class by *generated* implementation
  107747             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  107748             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  107749             :        // MS: 06/28/02 container of names of variables or container indices 
  107750             :        // used used in the traversal to access AST successor nodes
  107751             :        // overridden in every class by *generated* implementation
  107752             :       /*! \brief container of names of variables or container indices used used in the traversal
  107753             :           to access AST successor nodes overridden in every class by *generated* implementation */
  107754             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  107755             : 
  107756             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  107757             :        // than all the vector copies. The implementation for these functions is generated for each class.
  107758             :       /*! \brief return number of children in the traversal successor list */
  107759             :           virtual size_t get_numberOfTraversalSuccessors() override;
  107760             :       /*! \brief index-based access to traversal successors by index number */
  107761             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  107762             :       /*! \brief index-based access to traversal successors by child node */
  107763             :           virtual size_t get_childIndex(SgNode *child) override;
  107764             : 
  107765             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  107766             :        // MS: 08/16/2002 method for generating RTI information
  107767             :       /*! \brief return C++ Runtime-Time-Information */
  107768             :           virtual RTIReturnType roseRTI() override;
  107769             : #endif
  107770             :       /* */
  107771             : 
  107772             : 
  107773             : 
  107774             :       /* name Deprecated Functions
  107775             :           \brief Deprecated functions ... incomplete-documentation
  107776             : 
  107777             :           These functions have been deprecated from use.
  107778             :        */
  107779             :       /* */
  107780             : 
  107781             :       /*! returns a C style string (char*) representing the class name */
  107782             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  107783             : 
  107784             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  107785             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  107786             : #if 0
  107787             :       /*! returns old style Sage II enum values */
  107788             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  107789             :       /*! returns old style Sage II enum values */
  107790             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  107791             : #endif
  107792             :       /* */
  107793             : 
  107794             : 
  107795             : 
  107796             : 
  107797             :      public:
  107798             :       /* name Traversal Support Functions
  107799             :           \brief Traversal support functions ... incomplete-documentation
  107800             : 
  107801             :           These functions have been made public as part of the design, but they are suggested for internal use 
  107802             :           or by particularly knowledgable users for specialized tools or applications.
  107803             :        */
  107804             :       /* */
  107805             : 
  107806             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  107807             :        // (inferior to ROSE traversal mechanism, experimental).
  107808             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  107809             :        */
  107810             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  107811             : 
  107812             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  107813             :       /*! \brief support for the classic visitor pattern done in GoF */
  107814             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  107815             : 
  107816             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  107817             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  107818             :        */
  107819             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  107820             : 
  107821             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  107822             :        */
  107823             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  107824             : 
  107825             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  107826             :        // This traversal helps support internal tools that call static member functions.
  107827             :        // note: this function operates on the memory pools.
  107828             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  107829             :        */
  107830             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  107831             :       /* */
  107832             : 
  107833             : 
  107834             :      public:
  107835             :       /* name Memory Allocation Functions
  107836             :           \brief Memory allocations functions ... incomplete-documentation
  107837             : 
  107838             :           These functions have been made public as part of the design, but they are suggested for internal use 
  107839             :           or by particularly knowledgable users for specialized tools or applications.
  107840             :        */
  107841             :       /* */
  107842             : 
  107843             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  107844             : 
  107845             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  107846             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  107847             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  107848             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  107849             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  107850             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  107851             :           being used with the AST File I/O mechanism.
  107852             :        */
  107853             :           virtual bool isInMemoryPool() override;
  107854             : 
  107855             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  107856             : 
  107857             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  107858             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  107859             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  107860             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  107861             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  107862             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  107863             :           being used with the AST File I/O mechanism.
  107864             :        */
  107865             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  107866             : 
  107867             :       // DQ (4/30/2006): Modified to be a const function.
  107868             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  107869             : 
  107870             :           This functions is part of general support for many possible tools to operate 
  107871             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  107872             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  107873             :           less than the set of pointers used by the AST file I/O. This is part of
  107874             :           work implemented by Andreas, and support tools such as the AST graph generation.
  107875             : 
  107876             :           \warning This function can return unexpected data members and thus the 
  107877             :                    order and the number of elements is unpredicable and subject 
  107878             :                    to change.
  107879             : 
  107880             :           \returns STL vector of pairs of SgNode* and strings
  107881             :        */
  107882             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  107883             : 
  107884             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  107885             : 
  107886             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  107887             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  107888             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  107889             : 
  107890             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  107891             :                    and subject to change.
  107892             :        */
  107893             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  107894             : 
  107895             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  107896             : 
  107897             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  107898             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  107899             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  107900             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  107901             : 
  107902             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  107903             : 
  107904             :           \returns long
  107905             :        */
  107906             :           virtual long getChildIndex( SgNode* childNode ) const override;
  107907             : 
  107908             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  107909             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107910             :       /* \brief Constructor for use by AST File I/O Mechanism
  107911             : 
  107912             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  107913             :           which obtained via fast binary file I/O from disk.
  107914             :        */
  107915             :        // SgOmpInclusiveClause( SgOmpInclusiveClauseStorageClass& source );
  107916             : 
  107917             : 
  107918             : 
  107919             : 
  107920             : 
  107921             :  // JH (10/24/2005): methods added to support the ast file IO
  107922             :     private:
  107923             : 
  107924             :       /* name AST Memory Allocation Support Functions
  107925             :           \brief Memory allocations support....
  107926             : 
  107927             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  107928             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  107929             :           and support the AST File I/O Mechanism.
  107930             :        */
  107931             :       /* */
  107932             : 
  107933             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  107934             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  107935             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  107936             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  107937             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  107938             :           a correspinding one in the AST_FILE_IO class!
  107939             :        */
  107940             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  107941             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107942             :       /* \brief Typedef used for low level memory access.
  107943             :        */
  107944             :        // typedef unsigned char* TestType;
  107945             : 
  107946             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  107947             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  107948             :       /* \brief Typedef used to hold memory addresses as values.
  107949             :        */
  107950             :        // typedef unsigned long  AddressType;
  107951             : 
  107952             : 
  107953             : 
  107954             :        // necessary, to have direct access to the p_freepointer and the private methods !
  107955             :       /*! \brief friend class declaration to support AST File I/O */
  107956             :           friend class AST_FILE_IO;
  107957             : 
  107958             :       /*! \brief friend class declaration to support AST File I/O */
  107959             :           friend class SgOmpInclusiveClauseStorageClass;
  107960             : 
  107961             :       /*! \brief friend class declaration to support AST File I/O */
  107962             :           friend class AstSpecificDataManagingClass;
  107963             : 
  107964             :       /*! \brief friend class declaration to support AST File I/O */
  107965             :           friend class AstSpecificDataManagingClassStorageClass;
  107966             :     public:
  107967             :       /*! \brief IR node constructor to support AST File I/O */
  107968             :           SgOmpInclusiveClause( const SgOmpInclusiveClauseStorageClass& source );
  107969             : 
  107970             :  // private: // JJW hack
  107971             :        /*
  107972             :           name AST Memory Allocation Support Variables
  107973             :           Memory allocations support variables 
  107974             : 
  107975             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  107976             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  107977             :           and support the AST File I/O Mechanism.
  107978             :        */
  107979             :       /* */
  107980             : 
  107981             :     public:
  107982             : 
  107983             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  107984             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  107985             :       // virtual SgNode* addRegExpAttribute();
  107986             :       /*! \brief Support for AST matching using regular expression.
  107987             : 
  107988             :           This support is incomplete and the subject of current research to define 
  107989             :           RegEx trees to support inexact matching.
  107990             :        */
  107991             :           SgOmpInclusiveClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  107992             : 
  107993             : // *** COMMON CODE SECTION ENDS HERE ***
  107994             : 
  107995             : 
  107996             : // End of memberFunctionString
  107997             : // Start of memberFunctionString
  107998             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  107999             : 
  108000             :      // the generated cast function
  108001             :      // friend ROSE_DLL_API SgOmpInclusiveClause* isSgOmpInclusiveClause ( SgNode* s );
  108002             : 
  108003             :           typedef SgOmpVariablesClause base_node_type;
  108004             : 
  108005             : 
  108006             : // End of memberFunctionString
  108007             : 
  108008             : 
  108009             :      public: 
  108010             :          virtual ~SgOmpInclusiveClause();
  108011             : 
  108012             : 
  108013             :      public: 
  108014             :          SgOmpInclusiveClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  108015             :          SgOmpInclusiveClause(SgExprListExp* variables); 
  108016             : 
  108017             :     protected:
  108018             : 
  108019             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpInclusiveClause>;
  108020             : 
  108021             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108022             : 
  108023             : 
  108024             :    };
  108025             : #endif
  108026             : 
  108027             : // postdeclarations for SgOmpInclusiveClause
  108028             : 
  108029             : /* #line 108030 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108030             : 
  108031             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  108032             : 
  108033             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108034             : 
  108035             : 
  108036             : /* #line 108037 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108037             : 
  108038             : 
  108039             : 
  108040             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108041             : 
  108042             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  108043             : //      This code is automatically generated for each 
  108044             : //      terminal and non-terminal within the defined 
  108045             : //      grammar.  There is a simple way to change the 
  108046             : //      code to fix bugs etc.  See the ROSE README file
  108047             : //      for directions.
  108048             : 
  108049             : // tps: (02/22/2010): Adding DLL export requirements
  108050             : #include "rosedll.h"
  108051             : 
  108052             : // predeclarations for SgOmpExclusiveClause
  108053             : 
  108054             : /* #line 108055 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108055             : 
  108056             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  108057             : 
  108058             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108059             : 
  108060             : #if 1
  108061             : // Class Definition for SgOmpExclusiveClause
  108062             : class ROSE_DLL_API SgOmpExclusiveClause  : public SgOmpVariablesClause
  108063             :    {
  108064             :      public:
  108065             : 
  108066             : 
  108067             : /* #line 108068 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108068             : 
  108069             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  108070             : // Start of memberFunctionString
  108071             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  108072             : 
  108073             : // *** COMMON CODE SECTION BEGINS HERE ***
  108074             : 
  108075             :     public:
  108076             : 
  108077             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  108078             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  108079             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  108080             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  108081             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  108082             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  108083             : 
  108084             :       /*! \brief returns a string representing the class name */
  108085             :           virtual std::string class_name() const override;
  108086             : 
  108087             :       /*! \brief returns new style SageIII enum values */
  108088             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  108089             : 
  108090             :       /*! \brief static variant value */
  108091             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  108092             :        // static const VariantT static_variant = V_SgOmpExclusiveClause;
  108093             :           enum { static_variant = V_SgOmpExclusiveClause };
  108094             : 
  108095             :        /* the generated cast function */
  108096             :       /*! \brief Casts pointer from base class to derived class */
  108097             :           ROSE_DLL_API friend       SgOmpExclusiveClause* isSgOmpExclusiveClause(       SgNode * s );
  108098             : 
  108099             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  108100             :           ROSE_DLL_API friend const SgOmpExclusiveClause* isSgOmpExclusiveClause( const SgNode * s );
  108101             : 
  108102             :      // ******************************************
  108103             :      // * Memory Pool / New / Delete
  108104             :      // ******************************************
  108105             : 
  108106             :      public:
  108107             :           /// \private
  108108             :           static const unsigned pool_size; //
  108109             :           /// \private
  108110             :           static std::vector<unsigned char *> pools; //
  108111             :           /// \private
  108112             :           static SgOmpExclusiveClause * next_node; // 
  108113             : 
  108114             :           /// \private
  108115             :           static unsigned long initializeStorageClassArray(SgOmpExclusiveClauseStorageClass *); //
  108116             : 
  108117             :           /// \private
  108118             :           static void clearMemoryPool(); //
  108119             :           static void deleteMemoryPool(); //
  108120             : 
  108121             :           /// \private
  108122             :           static void extendMemoryPoolForFileIO(); //
  108123             : 
  108124             :           /// \private
  108125             :           static SgOmpExclusiveClause * getPointerFromGlobalIndex(unsigned long); //
  108126             :           /// \private
  108127             :           static SgOmpExclusiveClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  108128             : 
  108129             :           /// \private
  108130             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  108131             :           /// \private
  108132             :           static void resetValidFreepointers(); //
  108133             :           /// \private
  108134             :           static unsigned long getNumberOfLastValidPointer(); //
  108135             : 
  108136             : 
  108137             : #if defined(INLINE_FUNCTIONS)
  108138             :       /*! \brief returns pointer to newly allocated IR node */
  108139             :           inline void *operator new (size_t size);
  108140             : #else
  108141             :       /*! \brief returns pointer to newly allocated IR node */
  108142             :           void *operator new (size_t size);
  108143             : #endif
  108144             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  108145             :           void operator delete (void* pointer, size_t size);
  108146             : 
  108147             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  108148           0 :           void operator delete (void* pointer)
  108149             :              {
  108150             :             // This is the generated delete operator...
  108151           0 :                SgOmpExclusiveClause::operator delete (pointer,sizeof(SgOmpExclusiveClause));
  108152             :              }
  108153             : 
  108154             :       /*! \brief Returns the total number of IR nodes of this type */
  108155             :           static size_t numberOfNodes();
  108156             : 
  108157             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  108158             :           static size_t memoryUsage();
  108159             : 
  108160             :       // End of scope which started in IR nodes specific code 
  108161             :       /* */
  108162             : 
  108163             :       /* name Internal Functions
  108164             :           \brief Internal functions ... incomplete-documentation
  108165             : 
  108166             :           These functions have been made public as part of the design, but they are suggested for internal use 
  108167             :           or by particularly knowledgeable users for specialized tools or applications.
  108168             : 
  108169             :           \internal We could not make these private because they are required by user for special purposes. And 
  108170             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  108171             :          
  108172             :        */
  108173             : 
  108174             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  108175             :        // overridden in every class by *generated* implementation
  108176             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  108177             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  108178             :        // MS: 06/28/02 container of names of variables or container indices 
  108179             :        // used used in the traversal to access AST successor nodes
  108180             :        // overridden in every class by *generated* implementation
  108181             :       /*! \brief container of names of variables or container indices used used in the traversal
  108182             :           to access AST successor nodes overridden in every class by *generated* implementation */
  108183             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  108184             : 
  108185             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  108186             :        // than all the vector copies. The implementation for these functions is generated for each class.
  108187             :       /*! \brief return number of children in the traversal successor list */
  108188             :           virtual size_t get_numberOfTraversalSuccessors() override;
  108189             :       /*! \brief index-based access to traversal successors by index number */
  108190             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  108191             :       /*! \brief index-based access to traversal successors by child node */
  108192             :           virtual size_t get_childIndex(SgNode *child) override;
  108193             : 
  108194             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  108195             :        // MS: 08/16/2002 method for generating RTI information
  108196             :       /*! \brief return C++ Runtime-Time-Information */
  108197             :           virtual RTIReturnType roseRTI() override;
  108198             : #endif
  108199             :       /* */
  108200             : 
  108201             : 
  108202             : 
  108203             :       /* name Deprecated Functions
  108204             :           \brief Deprecated functions ... incomplete-documentation
  108205             : 
  108206             :           These functions have been deprecated from use.
  108207             :        */
  108208             :       /* */
  108209             : 
  108210             :       /*! returns a C style string (char*) representing the class name */
  108211             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  108212             : 
  108213             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  108214             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  108215             : #if 0
  108216             :       /*! returns old style Sage II enum values */
  108217             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  108218             :       /*! returns old style Sage II enum values */
  108219             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  108220             : #endif
  108221             :       /* */
  108222             : 
  108223             : 
  108224             : 
  108225             : 
  108226             :      public:
  108227             :       /* name Traversal Support Functions
  108228             :           \brief Traversal support functions ... incomplete-documentation
  108229             : 
  108230             :           These functions have been made public as part of the design, but they are suggested for internal use 
  108231             :           or by particularly knowledgable users for specialized tools or applications.
  108232             :        */
  108233             :       /* */
  108234             : 
  108235             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  108236             :        // (inferior to ROSE traversal mechanism, experimental).
  108237             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  108238             :        */
  108239             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  108240             : 
  108241             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  108242             :       /*! \brief support for the classic visitor pattern done in GoF */
  108243             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  108244             : 
  108245             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  108246             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  108247             :        */
  108248             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  108249             : 
  108250             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  108251             :        */
  108252             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  108253             : 
  108254             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  108255             :        // This traversal helps support internal tools that call static member functions.
  108256             :        // note: this function operates on the memory pools.
  108257             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  108258             :        */
  108259             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  108260             :       /* */
  108261             : 
  108262             : 
  108263             :      public:
  108264             :       /* name Memory Allocation Functions
  108265             :           \brief Memory allocations functions ... incomplete-documentation
  108266             : 
  108267             :           These functions have been made public as part of the design, but they are suggested for internal use 
  108268             :           or by particularly knowledgable users for specialized tools or applications.
  108269             :        */
  108270             :       /* */
  108271             : 
  108272             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  108273             : 
  108274             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  108275             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  108276             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  108277             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  108278             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  108279             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  108280             :           being used with the AST File I/O mechanism.
  108281             :        */
  108282             :           virtual bool isInMemoryPool() override;
  108283             : 
  108284             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  108285             : 
  108286             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  108287             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  108288             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  108289             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  108290             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  108291             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  108292             :           being used with the AST File I/O mechanism.
  108293             :        */
  108294             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  108295             : 
  108296             :       // DQ (4/30/2006): Modified to be a const function.
  108297             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  108298             : 
  108299             :           This functions is part of general support for many possible tools to operate 
  108300             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  108301             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  108302             :           less than the set of pointers used by the AST file I/O. This is part of
  108303             :           work implemented by Andreas, and support tools such as the AST graph generation.
  108304             : 
  108305             :           \warning This function can return unexpected data members and thus the 
  108306             :                    order and the number of elements is unpredicable and subject 
  108307             :                    to change.
  108308             : 
  108309             :           \returns STL vector of pairs of SgNode* and strings
  108310             :        */
  108311             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  108312             : 
  108313             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  108314             : 
  108315             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  108316             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  108317             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  108318             : 
  108319             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  108320             :                    and subject to change.
  108321             :        */
  108322             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  108323             : 
  108324             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  108325             : 
  108326             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  108327             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  108328             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  108329             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  108330             : 
  108331             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  108332             : 
  108333             :           \returns long
  108334             :        */
  108335             :           virtual long getChildIndex( SgNode* childNode ) const override;
  108336             : 
  108337             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  108338             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  108339             :       /* \brief Constructor for use by AST File I/O Mechanism
  108340             : 
  108341             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  108342             :           which obtained via fast binary file I/O from disk.
  108343             :        */
  108344             :        // SgOmpExclusiveClause( SgOmpExclusiveClauseStorageClass& source );
  108345             : 
  108346             : 
  108347             : 
  108348             : 
  108349             : 
  108350             :  // JH (10/24/2005): methods added to support the ast file IO
  108351             :     private:
  108352             : 
  108353             :       /* name AST Memory Allocation Support Functions
  108354             :           \brief Memory allocations support....
  108355             : 
  108356             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  108357             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  108358             :           and support the AST File I/O Mechanism.
  108359             :        */
  108360             :       /* */
  108361             : 
  108362             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  108363             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  108364             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  108365             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  108366             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  108367             :           a correspinding one in the AST_FILE_IO class!
  108368             :        */
  108369             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  108370             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  108371             :       /* \brief Typedef used for low level memory access.
  108372             :        */
  108373             :        // typedef unsigned char* TestType;
  108374             : 
  108375             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  108376             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  108377             :       /* \brief Typedef used to hold memory addresses as values.
  108378             :        */
  108379             :        // typedef unsigned long  AddressType;
  108380             : 
  108381             : 
  108382             : 
  108383             :        // necessary, to have direct access to the p_freepointer and the private methods !
  108384             :       /*! \brief friend class declaration to support AST File I/O */
  108385             :           friend class AST_FILE_IO;
  108386             : 
  108387             :       /*! \brief friend class declaration to support AST File I/O */
  108388             :           friend class SgOmpExclusiveClauseStorageClass;
  108389             : 
  108390             :       /*! \brief friend class declaration to support AST File I/O */
  108391             :           friend class AstSpecificDataManagingClass;
  108392             : 
  108393             :       /*! \brief friend class declaration to support AST File I/O */
  108394             :           friend class AstSpecificDataManagingClassStorageClass;
  108395             :     public:
  108396             :       /*! \brief IR node constructor to support AST File I/O */
  108397             :           SgOmpExclusiveClause( const SgOmpExclusiveClauseStorageClass& source );
  108398             : 
  108399             :  // private: // JJW hack
  108400             :        /*
  108401             :           name AST Memory Allocation Support Variables
  108402             :           Memory allocations support variables 
  108403             : 
  108404             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  108405             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  108406             :           and support the AST File I/O Mechanism.
  108407             :        */
  108408             :       /* */
  108409             : 
  108410             :     public:
  108411             : 
  108412             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  108413             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  108414             :       // virtual SgNode* addRegExpAttribute();
  108415             :       /*! \brief Support for AST matching using regular expression.
  108416             : 
  108417             :           This support is incomplete and the subject of current research to define 
  108418             :           RegEx trees to support inexact matching.
  108419             :        */
  108420             :           SgOmpExclusiveClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  108421             : 
  108422             : // *** COMMON CODE SECTION ENDS HERE ***
  108423             : 
  108424             : 
  108425             : // End of memberFunctionString
  108426             : // Start of memberFunctionString
  108427             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  108428             : 
  108429             :      // the generated cast function
  108430             :      // friend ROSE_DLL_API SgOmpExclusiveClause* isSgOmpExclusiveClause ( SgNode* s );
  108431             : 
  108432             :           typedef SgOmpVariablesClause base_node_type;
  108433             : 
  108434             : 
  108435             : // End of memberFunctionString
  108436             : 
  108437             : 
  108438             :      public: 
  108439             :          virtual ~SgOmpExclusiveClause();
  108440             : 
  108441             : 
  108442             :      public: 
  108443             :          SgOmpExclusiveClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  108444             :          SgOmpExclusiveClause(SgExprListExp* variables); 
  108445             : 
  108446             :     protected:
  108447             : 
  108448             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpExclusiveClause>;
  108449             : 
  108450             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108451             : 
  108452             : 
  108453             :    };
  108454             : #endif
  108455             : 
  108456             : // postdeclarations for SgOmpExclusiveClause
  108457             : 
  108458             : /* #line 108459 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108459             : 
  108460             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  108461             : 
  108462             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108463             : 
  108464             : 
  108465             : /* #line 108466 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108466             : 
  108467             : 
  108468             : 
  108469             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108470             : 
  108471             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  108472             : //      This code is automatically generated for each 
  108473             : //      terminal and non-terminal within the defined 
  108474             : //      grammar.  There is a simple way to change the 
  108475             : //      code to fix bugs etc.  See the ROSE README file
  108476             : //      for directions.
  108477             : 
  108478             : // tps: (02/22/2010): Adding DLL export requirements
  108479             : #include "rosedll.h"
  108480             : 
  108481             : // predeclarations for SgOmpIsDevicePtrClause
  108482             : 
  108483             : /* #line 108484 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108484             : 
  108485             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  108486             : 
  108487             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108488             : 
  108489             : #if 1
  108490             : // Class Definition for SgOmpIsDevicePtrClause
  108491             : class ROSE_DLL_API SgOmpIsDevicePtrClause  : public SgOmpVariablesClause
  108492             :    {
  108493             :      public:
  108494             : 
  108495             : 
  108496             : /* #line 108497 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108497             : 
  108498             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  108499             : // Start of memberFunctionString
  108500             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  108501             : 
  108502             : // *** COMMON CODE SECTION BEGINS HERE ***
  108503             : 
  108504             :     public:
  108505             : 
  108506             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  108507             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  108508             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  108509             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  108510             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  108511             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  108512             : 
  108513             :       /*! \brief returns a string representing the class name */
  108514             :           virtual std::string class_name() const override;
  108515             : 
  108516             :       /*! \brief returns new style SageIII enum values */
  108517             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  108518             : 
  108519             :       /*! \brief static variant value */
  108520             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  108521             :        // static const VariantT static_variant = V_SgOmpIsDevicePtrClause;
  108522             :           enum { static_variant = V_SgOmpIsDevicePtrClause };
  108523             : 
  108524             :        /* the generated cast function */
  108525             :       /*! \brief Casts pointer from base class to derived class */
  108526             :           ROSE_DLL_API friend       SgOmpIsDevicePtrClause* isSgOmpIsDevicePtrClause(       SgNode * s );
  108527             : 
  108528             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  108529             :           ROSE_DLL_API friend const SgOmpIsDevicePtrClause* isSgOmpIsDevicePtrClause( const SgNode * s );
  108530             : 
  108531             :      // ******************************************
  108532             :      // * Memory Pool / New / Delete
  108533             :      // ******************************************
  108534             : 
  108535             :      public:
  108536             :           /// \private
  108537             :           static const unsigned pool_size; //
  108538             :           /// \private
  108539             :           static std::vector<unsigned char *> pools; //
  108540             :           /// \private
  108541             :           static SgOmpIsDevicePtrClause * next_node; // 
  108542             : 
  108543             :           /// \private
  108544             :           static unsigned long initializeStorageClassArray(SgOmpIsDevicePtrClauseStorageClass *); //
  108545             : 
  108546             :           /// \private
  108547             :           static void clearMemoryPool(); //
  108548             :           static void deleteMemoryPool(); //
  108549             : 
  108550             :           /// \private
  108551             :           static void extendMemoryPoolForFileIO(); //
  108552             : 
  108553             :           /// \private
  108554             :           static SgOmpIsDevicePtrClause * getPointerFromGlobalIndex(unsigned long); //
  108555             :           /// \private
  108556             :           static SgOmpIsDevicePtrClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  108557             : 
  108558             :           /// \private
  108559             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  108560             :           /// \private
  108561             :           static void resetValidFreepointers(); //
  108562             :           /// \private
  108563             :           static unsigned long getNumberOfLastValidPointer(); //
  108564             : 
  108565             : 
  108566             : #if defined(INLINE_FUNCTIONS)
  108567             :       /*! \brief returns pointer to newly allocated IR node */
  108568             :           inline void *operator new (size_t size);
  108569             : #else
  108570             :       /*! \brief returns pointer to newly allocated IR node */
  108571             :           void *operator new (size_t size);
  108572             : #endif
  108573             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  108574             :           void operator delete (void* pointer, size_t size);
  108575             : 
  108576             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  108577           0 :           void operator delete (void* pointer)
  108578             :              {
  108579             :             // This is the generated delete operator...
  108580           0 :                SgOmpIsDevicePtrClause::operator delete (pointer,sizeof(SgOmpIsDevicePtrClause));
  108581             :              }
  108582             : 
  108583             :       /*! \brief Returns the total number of IR nodes of this type */
  108584             :           static size_t numberOfNodes();
  108585             : 
  108586             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  108587             :           static size_t memoryUsage();
  108588             : 
  108589             :       // End of scope which started in IR nodes specific code 
  108590             :       /* */
  108591             : 
  108592             :       /* name Internal Functions
  108593             :           \brief Internal functions ... incomplete-documentation
  108594             : 
  108595             :           These functions have been made public as part of the design, but they are suggested for internal use 
  108596             :           or by particularly knowledgeable users for specialized tools or applications.
  108597             : 
  108598             :           \internal We could not make these private because they are required by user for special purposes. And 
  108599             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  108600             :          
  108601             :        */
  108602             : 
  108603             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  108604             :        // overridden in every class by *generated* implementation
  108605             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  108606             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  108607             :        // MS: 06/28/02 container of names of variables or container indices 
  108608             :        // used used in the traversal to access AST successor nodes
  108609             :        // overridden in every class by *generated* implementation
  108610             :       /*! \brief container of names of variables or container indices used used in the traversal
  108611             :           to access AST successor nodes overridden in every class by *generated* implementation */
  108612             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  108613             : 
  108614             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  108615             :        // than all the vector copies. The implementation for these functions is generated for each class.
  108616             :       /*! \brief return number of children in the traversal successor list */
  108617             :           virtual size_t get_numberOfTraversalSuccessors() override;
  108618             :       /*! \brief index-based access to traversal successors by index number */
  108619             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  108620             :       /*! \brief index-based access to traversal successors by child node */
  108621             :           virtual size_t get_childIndex(SgNode *child) override;
  108622             : 
  108623             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  108624             :        // MS: 08/16/2002 method for generating RTI information
  108625             :       /*! \brief return C++ Runtime-Time-Information */
  108626             :           virtual RTIReturnType roseRTI() override;
  108627             : #endif
  108628             :       /* */
  108629             : 
  108630             : 
  108631             : 
  108632             :       /* name Deprecated Functions
  108633             :           \brief Deprecated functions ... incomplete-documentation
  108634             : 
  108635             :           These functions have been deprecated from use.
  108636             :        */
  108637             :       /* */
  108638             : 
  108639             :       /*! returns a C style string (char*) representing the class name */
  108640             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  108641             : 
  108642             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  108643             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  108644             : #if 0
  108645             :       /*! returns old style Sage II enum values */
  108646             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  108647             :       /*! returns old style Sage II enum values */
  108648             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  108649             : #endif
  108650             :       /* */
  108651             : 
  108652             : 
  108653             : 
  108654             : 
  108655             :      public:
  108656             :       /* name Traversal Support Functions
  108657             :           \brief Traversal support functions ... incomplete-documentation
  108658             : 
  108659             :           These functions have been made public as part of the design, but they are suggested for internal use 
  108660             :           or by particularly knowledgable users for specialized tools or applications.
  108661             :        */
  108662             :       /* */
  108663             : 
  108664             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  108665             :        // (inferior to ROSE traversal mechanism, experimental).
  108666             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  108667             :        */
  108668             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  108669             : 
  108670             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  108671             :       /*! \brief support for the classic visitor pattern done in GoF */
  108672             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  108673             : 
  108674             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  108675             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  108676             :        */
  108677             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  108678             : 
  108679             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  108680             :        */
  108681             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  108682             : 
  108683             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  108684             :        // This traversal helps support internal tools that call static member functions.
  108685             :        // note: this function operates on the memory pools.
  108686             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  108687             :        */
  108688             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  108689             :       /* */
  108690             : 
  108691             : 
  108692             :      public:
  108693             :       /* name Memory Allocation Functions
  108694             :           \brief Memory allocations functions ... incomplete-documentation
  108695             : 
  108696             :           These functions have been made public as part of the design, but they are suggested for internal use 
  108697             :           or by particularly knowledgable users for specialized tools or applications.
  108698             :        */
  108699             :       /* */
  108700             : 
  108701             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  108702             : 
  108703             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  108704             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  108705             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  108706             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  108707             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  108708             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  108709             :           being used with the AST File I/O mechanism.
  108710             :        */
  108711             :           virtual bool isInMemoryPool() override;
  108712             : 
  108713             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  108714             : 
  108715             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  108716             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  108717             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  108718             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  108719             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  108720             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  108721             :           being used with the AST File I/O mechanism.
  108722             :        */
  108723             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  108724             : 
  108725             :       // DQ (4/30/2006): Modified to be a const function.
  108726             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  108727             : 
  108728             :           This functions is part of general support for many possible tools to operate 
  108729             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  108730             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  108731             :           less than the set of pointers used by the AST file I/O. This is part of
  108732             :           work implemented by Andreas, and support tools such as the AST graph generation.
  108733             : 
  108734             :           \warning This function can return unexpected data members and thus the 
  108735             :                    order and the number of elements is unpredicable and subject 
  108736             :                    to change.
  108737             : 
  108738             :           \returns STL vector of pairs of SgNode* and strings
  108739             :        */
  108740             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  108741             : 
  108742             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  108743             : 
  108744             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  108745             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  108746             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  108747             : 
  108748             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  108749             :                    and subject to change.
  108750             :        */
  108751             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  108752             : 
  108753             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  108754             : 
  108755             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  108756             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  108757             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  108758             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  108759             : 
  108760             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  108761             : 
  108762             :           \returns long
  108763             :        */
  108764             :           virtual long getChildIndex( SgNode* childNode ) const override;
  108765             : 
  108766             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  108767             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  108768             :       /* \brief Constructor for use by AST File I/O Mechanism
  108769             : 
  108770             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  108771             :           which obtained via fast binary file I/O from disk.
  108772             :        */
  108773             :        // SgOmpIsDevicePtrClause( SgOmpIsDevicePtrClauseStorageClass& source );
  108774             : 
  108775             : 
  108776             : 
  108777             : 
  108778             : 
  108779             :  // JH (10/24/2005): methods added to support the ast file IO
  108780             :     private:
  108781             : 
  108782             :       /* name AST Memory Allocation Support Functions
  108783             :           \brief Memory allocations support....
  108784             : 
  108785             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  108786             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  108787             :           and support the AST File I/O Mechanism.
  108788             :        */
  108789             :       /* */
  108790             : 
  108791             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  108792             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  108793             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  108794             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  108795             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  108796             :           a correspinding one in the AST_FILE_IO class!
  108797             :        */
  108798             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  108799             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  108800             :       /* \brief Typedef used for low level memory access.
  108801             :        */
  108802             :        // typedef unsigned char* TestType;
  108803             : 
  108804             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  108805             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  108806             :       /* \brief Typedef used to hold memory addresses as values.
  108807             :        */
  108808             :        // typedef unsigned long  AddressType;
  108809             : 
  108810             : 
  108811             : 
  108812             :        // necessary, to have direct access to the p_freepointer and the private methods !
  108813             :       /*! \brief friend class declaration to support AST File I/O */
  108814             :           friend class AST_FILE_IO;
  108815             : 
  108816             :       /*! \brief friend class declaration to support AST File I/O */
  108817             :           friend class SgOmpIsDevicePtrClauseStorageClass;
  108818             : 
  108819             :       /*! \brief friend class declaration to support AST File I/O */
  108820             :           friend class AstSpecificDataManagingClass;
  108821             : 
  108822             :       /*! \brief friend class declaration to support AST File I/O */
  108823             :           friend class AstSpecificDataManagingClassStorageClass;
  108824             :     public:
  108825             :       /*! \brief IR node constructor to support AST File I/O */
  108826             :           SgOmpIsDevicePtrClause( const SgOmpIsDevicePtrClauseStorageClass& source );
  108827             : 
  108828             :  // private: // JJW hack
  108829             :        /*
  108830             :           name AST Memory Allocation Support Variables
  108831             :           Memory allocations support variables 
  108832             : 
  108833             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  108834             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  108835             :           and support the AST File I/O Mechanism.
  108836             :        */
  108837             :       /* */
  108838             : 
  108839             :     public:
  108840             : 
  108841             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  108842             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  108843             :       // virtual SgNode* addRegExpAttribute();
  108844             :       /*! \brief Support for AST matching using regular expression.
  108845             : 
  108846             :           This support is incomplete and the subject of current research to define 
  108847             :           RegEx trees to support inexact matching.
  108848             :        */
  108849             :           SgOmpIsDevicePtrClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  108850             : 
  108851             : // *** COMMON CODE SECTION ENDS HERE ***
  108852             : 
  108853             : 
  108854             : // End of memberFunctionString
  108855             : // Start of memberFunctionString
  108856             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  108857             : 
  108858             :      // the generated cast function
  108859             :      // friend ROSE_DLL_API SgOmpIsDevicePtrClause* isSgOmpIsDevicePtrClause ( SgNode* s );
  108860             : 
  108861             :           typedef SgOmpVariablesClause base_node_type;
  108862             : 
  108863             : 
  108864             : // End of memberFunctionString
  108865             : 
  108866             : 
  108867             :      public: 
  108868             :          virtual ~SgOmpIsDevicePtrClause();
  108869             : 
  108870             : 
  108871             :      public: 
  108872             :          SgOmpIsDevicePtrClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  108873             :          SgOmpIsDevicePtrClause(SgExprListExp* variables); 
  108874             : 
  108875             :     protected:
  108876             : 
  108877             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpIsDevicePtrClause>;
  108878             : 
  108879             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108880             : 
  108881             : 
  108882             :    };
  108883             : #endif
  108884             : 
  108885             : // postdeclarations for SgOmpIsDevicePtrClause
  108886             : 
  108887             : /* #line 108888 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108888             : 
  108889             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  108890             : 
  108891             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108892             : 
  108893             : 
  108894             : /* #line 108895 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108895             : 
  108896             : 
  108897             : 
  108898             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108899             : 
  108900             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  108901             : //      This code is automatically generated for each 
  108902             : //      terminal and non-terminal within the defined 
  108903             : //      grammar.  There is a simple way to change the 
  108904             : //      code to fix bugs etc.  See the ROSE README file
  108905             : //      for directions.
  108906             : 
  108907             : // tps: (02/22/2010): Adding DLL export requirements
  108908             : #include "rosedll.h"
  108909             : 
  108910             : // predeclarations for SgOmpUseDevicePtrClause
  108911             : 
  108912             : /* #line 108913 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108913             : 
  108914             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  108915             : 
  108916             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  108917             : 
  108918             : #if 1
  108919             : // Class Definition for SgOmpUseDevicePtrClause
  108920             : class ROSE_DLL_API SgOmpUseDevicePtrClause  : public SgOmpVariablesClause
  108921             :    {
  108922             :      public:
  108923             : 
  108924             : 
  108925             : /* #line 108926 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  108926             : 
  108927             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  108928             : // Start of memberFunctionString
  108929             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  108930             : 
  108931             : // *** COMMON CODE SECTION BEGINS HERE ***
  108932             : 
  108933             :     public:
  108934             : 
  108935             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  108936             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  108937             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  108938             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  108939             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  108940             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  108941             : 
  108942             :       /*! \brief returns a string representing the class name */
  108943             :           virtual std::string class_name() const override;
  108944             : 
  108945             :       /*! \brief returns new style SageIII enum values */
  108946             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  108947             : 
  108948             :       /*! \brief static variant value */
  108949             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  108950             :        // static const VariantT static_variant = V_SgOmpUseDevicePtrClause;
  108951             :           enum { static_variant = V_SgOmpUseDevicePtrClause };
  108952             : 
  108953             :        /* the generated cast function */
  108954             :       /*! \brief Casts pointer from base class to derived class */
  108955             :           ROSE_DLL_API friend       SgOmpUseDevicePtrClause* isSgOmpUseDevicePtrClause(       SgNode * s );
  108956             : 
  108957             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  108958             :           ROSE_DLL_API friend const SgOmpUseDevicePtrClause* isSgOmpUseDevicePtrClause( const SgNode * s );
  108959             : 
  108960             :      // ******************************************
  108961             :      // * Memory Pool / New / Delete
  108962             :      // ******************************************
  108963             : 
  108964             :      public:
  108965             :           /// \private
  108966             :           static const unsigned pool_size; //
  108967             :           /// \private
  108968             :           static std::vector<unsigned char *> pools; //
  108969             :           /// \private
  108970             :           static SgOmpUseDevicePtrClause * next_node; // 
  108971             : 
  108972             :           /// \private
  108973             :           static unsigned long initializeStorageClassArray(SgOmpUseDevicePtrClauseStorageClass *); //
  108974             : 
  108975             :           /// \private
  108976             :           static void clearMemoryPool(); //
  108977             :           static void deleteMemoryPool(); //
  108978             : 
  108979             :           /// \private
  108980             :           static void extendMemoryPoolForFileIO(); //
  108981             : 
  108982             :           /// \private
  108983             :           static SgOmpUseDevicePtrClause * getPointerFromGlobalIndex(unsigned long); //
  108984             :           /// \private
  108985             :           static SgOmpUseDevicePtrClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  108986             : 
  108987             :           /// \private
  108988             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  108989             :           /// \private
  108990             :           static void resetValidFreepointers(); //
  108991             :           /// \private
  108992             :           static unsigned long getNumberOfLastValidPointer(); //
  108993             : 
  108994             : 
  108995             : #if defined(INLINE_FUNCTIONS)
  108996             :       /*! \brief returns pointer to newly allocated IR node */
  108997             :           inline void *operator new (size_t size);
  108998             : #else
  108999             :       /*! \brief returns pointer to newly allocated IR node */
  109000             :           void *operator new (size_t size);
  109001             : #endif
  109002             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  109003             :           void operator delete (void* pointer, size_t size);
  109004             : 
  109005             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  109006           0 :           void operator delete (void* pointer)
  109007             :              {
  109008             :             // This is the generated delete operator...
  109009           0 :                SgOmpUseDevicePtrClause::operator delete (pointer,sizeof(SgOmpUseDevicePtrClause));
  109010             :              }
  109011             : 
  109012             :       /*! \brief Returns the total number of IR nodes of this type */
  109013             :           static size_t numberOfNodes();
  109014             : 
  109015             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  109016             :           static size_t memoryUsage();
  109017             : 
  109018             :       // End of scope which started in IR nodes specific code 
  109019             :       /* */
  109020             : 
  109021             :       /* name Internal Functions
  109022             :           \brief Internal functions ... incomplete-documentation
  109023             : 
  109024             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109025             :           or by particularly knowledgeable users for specialized tools or applications.
  109026             : 
  109027             :           \internal We could not make these private because they are required by user for special purposes. And 
  109028             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  109029             :          
  109030             :        */
  109031             : 
  109032             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  109033             :        // overridden in every class by *generated* implementation
  109034             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  109035             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  109036             :        // MS: 06/28/02 container of names of variables or container indices 
  109037             :        // used used in the traversal to access AST successor nodes
  109038             :        // overridden in every class by *generated* implementation
  109039             :       /*! \brief container of names of variables or container indices used used in the traversal
  109040             :           to access AST successor nodes overridden in every class by *generated* implementation */
  109041             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  109042             : 
  109043             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  109044             :        // than all the vector copies. The implementation for these functions is generated for each class.
  109045             :       /*! \brief return number of children in the traversal successor list */
  109046             :           virtual size_t get_numberOfTraversalSuccessors() override;
  109047             :       /*! \brief index-based access to traversal successors by index number */
  109048             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  109049             :       /*! \brief index-based access to traversal successors by child node */
  109050             :           virtual size_t get_childIndex(SgNode *child) override;
  109051             : 
  109052             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  109053             :        // MS: 08/16/2002 method for generating RTI information
  109054             :       /*! \brief return C++ Runtime-Time-Information */
  109055             :           virtual RTIReturnType roseRTI() override;
  109056             : #endif
  109057             :       /* */
  109058             : 
  109059             : 
  109060             : 
  109061             :       /* name Deprecated Functions
  109062             :           \brief Deprecated functions ... incomplete-documentation
  109063             : 
  109064             :           These functions have been deprecated from use.
  109065             :        */
  109066             :       /* */
  109067             : 
  109068             :       /*! returns a C style string (char*) representing the class name */
  109069             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  109070             : 
  109071             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  109072             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  109073             : #if 0
  109074             :       /*! returns old style Sage II enum values */
  109075             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  109076             :       /*! returns old style Sage II enum values */
  109077             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  109078             : #endif
  109079             :       /* */
  109080             : 
  109081             : 
  109082             : 
  109083             : 
  109084             :      public:
  109085             :       /* name Traversal Support Functions
  109086             :           \brief Traversal support functions ... incomplete-documentation
  109087             : 
  109088             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109089             :           or by particularly knowledgable users for specialized tools or applications.
  109090             :        */
  109091             :       /* */
  109092             : 
  109093             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  109094             :        // (inferior to ROSE traversal mechanism, experimental).
  109095             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  109096             :        */
  109097             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  109098             : 
  109099             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  109100             :       /*! \brief support for the classic visitor pattern done in GoF */
  109101             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  109102             : 
  109103             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  109104             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  109105             :        */
  109106             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  109107             : 
  109108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  109109             :        */
  109110             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  109111             : 
  109112             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  109113             :        // This traversal helps support internal tools that call static member functions.
  109114             :        // note: this function operates on the memory pools.
  109115             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  109116             :        */
  109117             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  109118             :       /* */
  109119             : 
  109120             : 
  109121             :      public:
  109122             :       /* name Memory Allocation Functions
  109123             :           \brief Memory allocations functions ... incomplete-documentation
  109124             : 
  109125             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109126             :           or by particularly knowledgable users for specialized tools or applications.
  109127             :        */
  109128             :       /* */
  109129             : 
  109130             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  109131             : 
  109132             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  109133             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  109134             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  109135             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  109136             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  109137             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  109138             :           being used with the AST File I/O mechanism.
  109139             :        */
  109140             :           virtual bool isInMemoryPool() override;
  109141             : 
  109142             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  109143             : 
  109144             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  109145             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  109146             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  109147             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  109148             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  109149             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  109150             :           being used with the AST File I/O mechanism.
  109151             :        */
  109152             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  109153             : 
  109154             :       // DQ (4/30/2006): Modified to be a const function.
  109155             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  109156             : 
  109157             :           This functions is part of general support for many possible tools to operate 
  109158             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  109159             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  109160             :           less than the set of pointers used by the AST file I/O. This is part of
  109161             :           work implemented by Andreas, and support tools such as the AST graph generation.
  109162             : 
  109163             :           \warning This function can return unexpected data members and thus the 
  109164             :                    order and the number of elements is unpredicable and subject 
  109165             :                    to change.
  109166             : 
  109167             :           \returns STL vector of pairs of SgNode* and strings
  109168             :        */
  109169             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  109170             : 
  109171             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  109172             : 
  109173             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  109174             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  109175             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  109176             : 
  109177             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  109178             :                    and subject to change.
  109179             :        */
  109180             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  109181             : 
  109182             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  109183             : 
  109184             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  109185             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  109186             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  109187             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  109188             : 
  109189             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  109190             : 
  109191             :           \returns long
  109192             :        */
  109193             :           virtual long getChildIndex( SgNode* childNode ) const override;
  109194             : 
  109195             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  109196             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  109197             :       /* \brief Constructor for use by AST File I/O Mechanism
  109198             : 
  109199             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  109200             :           which obtained via fast binary file I/O from disk.
  109201             :        */
  109202             :        // SgOmpUseDevicePtrClause( SgOmpUseDevicePtrClauseStorageClass& source );
  109203             : 
  109204             : 
  109205             : 
  109206             : 
  109207             : 
  109208             :  // JH (10/24/2005): methods added to support the ast file IO
  109209             :     private:
  109210             : 
  109211             :       /* name AST Memory Allocation Support Functions
  109212             :           \brief Memory allocations support....
  109213             : 
  109214             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  109215             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  109216             :           and support the AST File I/O Mechanism.
  109217             :        */
  109218             :       /* */
  109219             : 
  109220             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  109221             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  109222             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  109223             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  109224             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  109225             :           a correspinding one in the AST_FILE_IO class!
  109226             :        */
  109227             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  109228             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  109229             :       /* \brief Typedef used for low level memory access.
  109230             :        */
  109231             :        // typedef unsigned char* TestType;
  109232             : 
  109233             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  109234             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  109235             :       /* \brief Typedef used to hold memory addresses as values.
  109236             :        */
  109237             :        // typedef unsigned long  AddressType;
  109238             : 
  109239             : 
  109240             : 
  109241             :        // necessary, to have direct access to the p_freepointer and the private methods !
  109242             :       /*! \brief friend class declaration to support AST File I/O */
  109243             :           friend class AST_FILE_IO;
  109244             : 
  109245             :       /*! \brief friend class declaration to support AST File I/O */
  109246             :           friend class SgOmpUseDevicePtrClauseStorageClass;
  109247             : 
  109248             :       /*! \brief friend class declaration to support AST File I/O */
  109249             :           friend class AstSpecificDataManagingClass;
  109250             : 
  109251             :       /*! \brief friend class declaration to support AST File I/O */
  109252             :           friend class AstSpecificDataManagingClassStorageClass;
  109253             :     public:
  109254             :       /*! \brief IR node constructor to support AST File I/O */
  109255             :           SgOmpUseDevicePtrClause( const SgOmpUseDevicePtrClauseStorageClass& source );
  109256             : 
  109257             :  // private: // JJW hack
  109258             :        /*
  109259             :           name AST Memory Allocation Support Variables
  109260             :           Memory allocations support variables 
  109261             : 
  109262             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  109263             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  109264             :           and support the AST File I/O Mechanism.
  109265             :        */
  109266             :       /* */
  109267             : 
  109268             :     public:
  109269             : 
  109270             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  109271             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  109272             :       // virtual SgNode* addRegExpAttribute();
  109273             :       /*! \brief Support for AST matching using regular expression.
  109274             : 
  109275             :           This support is incomplete and the subject of current research to define 
  109276             :           RegEx trees to support inexact matching.
  109277             :        */
  109278             :           SgOmpUseDevicePtrClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  109279             : 
  109280             : // *** COMMON CODE SECTION ENDS HERE ***
  109281             : 
  109282             : 
  109283             : // End of memberFunctionString
  109284             : // Start of memberFunctionString
  109285             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  109286             : 
  109287             :      // the generated cast function
  109288             :      // friend ROSE_DLL_API SgOmpUseDevicePtrClause* isSgOmpUseDevicePtrClause ( SgNode* s );
  109289             : 
  109290             :           typedef SgOmpVariablesClause base_node_type;
  109291             : 
  109292             : 
  109293             : // End of memberFunctionString
  109294             : 
  109295             : 
  109296             :      public: 
  109297             :          virtual ~SgOmpUseDevicePtrClause();
  109298             : 
  109299             : 
  109300             :      public: 
  109301             :          SgOmpUseDevicePtrClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  109302             :          SgOmpUseDevicePtrClause(SgExprListExp* variables); 
  109303             : 
  109304             :     protected:
  109305             : 
  109306             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUseDevicePtrClause>;
  109307             : 
  109308             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109309             : 
  109310             : 
  109311             :    };
  109312             : #endif
  109313             : 
  109314             : // postdeclarations for SgOmpUseDevicePtrClause
  109315             : 
  109316             : /* #line 109317 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109317             : 
  109318             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  109319             : 
  109320             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109321             : 
  109322             : 
  109323             : /* #line 109324 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109324             : 
  109325             : 
  109326             : 
  109327             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109328             : 
  109329             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  109330             : //      This code is automatically generated for each 
  109331             : //      terminal and non-terminal within the defined 
  109332             : //      grammar.  There is a simple way to change the 
  109333             : //      code to fix bugs etc.  See the ROSE README file
  109334             : //      for directions.
  109335             : 
  109336             : // tps: (02/22/2010): Adding DLL export requirements
  109337             : #include "rosedll.h"
  109338             : 
  109339             : // predeclarations for SgOmpUseDeviceAddrClause
  109340             : 
  109341             : /* #line 109342 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109342             : 
  109343             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  109344             : 
  109345             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109346             : 
  109347             : #if 1
  109348             : // Class Definition for SgOmpUseDeviceAddrClause
  109349             : class ROSE_DLL_API SgOmpUseDeviceAddrClause  : public SgOmpVariablesClause
  109350             :    {
  109351             :      public:
  109352             : 
  109353             : 
  109354             : /* #line 109355 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109355             : 
  109356             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  109357             : // Start of memberFunctionString
  109358             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  109359             : 
  109360             : // *** COMMON CODE SECTION BEGINS HERE ***
  109361             : 
  109362             :     public:
  109363             : 
  109364             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  109365             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  109366             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  109367             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  109368             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  109369             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  109370             : 
  109371             :       /*! \brief returns a string representing the class name */
  109372             :           virtual std::string class_name() const override;
  109373             : 
  109374             :       /*! \brief returns new style SageIII enum values */
  109375             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  109376             : 
  109377             :       /*! \brief static variant value */
  109378             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  109379             :        // static const VariantT static_variant = V_SgOmpUseDeviceAddrClause;
  109380             :           enum { static_variant = V_SgOmpUseDeviceAddrClause };
  109381             : 
  109382             :        /* the generated cast function */
  109383             :       /*! \brief Casts pointer from base class to derived class */
  109384             :           ROSE_DLL_API friend       SgOmpUseDeviceAddrClause* isSgOmpUseDeviceAddrClause(       SgNode * s );
  109385             : 
  109386             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  109387             :           ROSE_DLL_API friend const SgOmpUseDeviceAddrClause* isSgOmpUseDeviceAddrClause( const SgNode * s );
  109388             : 
  109389             :      // ******************************************
  109390             :      // * Memory Pool / New / Delete
  109391             :      // ******************************************
  109392             : 
  109393             :      public:
  109394             :           /// \private
  109395             :           static const unsigned pool_size; //
  109396             :           /// \private
  109397             :           static std::vector<unsigned char *> pools; //
  109398             :           /// \private
  109399             :           static SgOmpUseDeviceAddrClause * next_node; // 
  109400             : 
  109401             :           /// \private
  109402             :           static unsigned long initializeStorageClassArray(SgOmpUseDeviceAddrClauseStorageClass *); //
  109403             : 
  109404             :           /// \private
  109405             :           static void clearMemoryPool(); //
  109406             :           static void deleteMemoryPool(); //
  109407             : 
  109408             :           /// \private
  109409             :           static void extendMemoryPoolForFileIO(); //
  109410             : 
  109411             :           /// \private
  109412             :           static SgOmpUseDeviceAddrClause * getPointerFromGlobalIndex(unsigned long); //
  109413             :           /// \private
  109414             :           static SgOmpUseDeviceAddrClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  109415             : 
  109416             :           /// \private
  109417             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  109418             :           /// \private
  109419             :           static void resetValidFreepointers(); //
  109420             :           /// \private
  109421             :           static unsigned long getNumberOfLastValidPointer(); //
  109422             : 
  109423             : 
  109424             : #if defined(INLINE_FUNCTIONS)
  109425             :       /*! \brief returns pointer to newly allocated IR node */
  109426             :           inline void *operator new (size_t size);
  109427             : #else
  109428             :       /*! \brief returns pointer to newly allocated IR node */
  109429             :           void *operator new (size_t size);
  109430             : #endif
  109431             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  109432             :           void operator delete (void* pointer, size_t size);
  109433             : 
  109434             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  109435           0 :           void operator delete (void* pointer)
  109436             :              {
  109437             :             // This is the generated delete operator...
  109438           0 :                SgOmpUseDeviceAddrClause::operator delete (pointer,sizeof(SgOmpUseDeviceAddrClause));
  109439             :              }
  109440             : 
  109441             :       /*! \brief Returns the total number of IR nodes of this type */
  109442             :           static size_t numberOfNodes();
  109443             : 
  109444             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  109445             :           static size_t memoryUsage();
  109446             : 
  109447             :       // End of scope which started in IR nodes specific code 
  109448             :       /* */
  109449             : 
  109450             :       /* name Internal Functions
  109451             :           \brief Internal functions ... incomplete-documentation
  109452             : 
  109453             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109454             :           or by particularly knowledgeable users for specialized tools or applications.
  109455             : 
  109456             :           \internal We could not make these private because they are required by user for special purposes. And 
  109457             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  109458             :          
  109459             :        */
  109460             : 
  109461             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  109462             :        // overridden in every class by *generated* implementation
  109463             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  109464             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  109465             :        // MS: 06/28/02 container of names of variables or container indices 
  109466             :        // used used in the traversal to access AST successor nodes
  109467             :        // overridden in every class by *generated* implementation
  109468             :       /*! \brief container of names of variables or container indices used used in the traversal
  109469             :           to access AST successor nodes overridden in every class by *generated* implementation */
  109470             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  109471             : 
  109472             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  109473             :        // than all the vector copies. The implementation for these functions is generated for each class.
  109474             :       /*! \brief return number of children in the traversal successor list */
  109475             :           virtual size_t get_numberOfTraversalSuccessors() override;
  109476             :       /*! \brief index-based access to traversal successors by index number */
  109477             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  109478             :       /*! \brief index-based access to traversal successors by child node */
  109479             :           virtual size_t get_childIndex(SgNode *child) override;
  109480             : 
  109481             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  109482             :        // MS: 08/16/2002 method for generating RTI information
  109483             :       /*! \brief return C++ Runtime-Time-Information */
  109484             :           virtual RTIReturnType roseRTI() override;
  109485             : #endif
  109486             :       /* */
  109487             : 
  109488             : 
  109489             : 
  109490             :       /* name Deprecated Functions
  109491             :           \brief Deprecated functions ... incomplete-documentation
  109492             : 
  109493             :           These functions have been deprecated from use.
  109494             :        */
  109495             :       /* */
  109496             : 
  109497             :       /*! returns a C style string (char*) representing the class name */
  109498             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  109499             : 
  109500             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  109501             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  109502             : #if 0
  109503             :       /*! returns old style Sage II enum values */
  109504             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  109505             :       /*! returns old style Sage II enum values */
  109506             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  109507             : #endif
  109508             :       /* */
  109509             : 
  109510             : 
  109511             : 
  109512             : 
  109513             :      public:
  109514             :       /* name Traversal Support Functions
  109515             :           \brief Traversal support functions ... incomplete-documentation
  109516             : 
  109517             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109518             :           or by particularly knowledgable users for specialized tools or applications.
  109519             :        */
  109520             :       /* */
  109521             : 
  109522             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  109523             :        // (inferior to ROSE traversal mechanism, experimental).
  109524             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  109525             :        */
  109526             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  109527             : 
  109528             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  109529             :       /*! \brief support for the classic visitor pattern done in GoF */
  109530             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  109531             : 
  109532             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  109533             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  109534             :        */
  109535             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  109536             : 
  109537             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  109538             :        */
  109539             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  109540             : 
  109541             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  109542             :        // This traversal helps support internal tools that call static member functions.
  109543             :        // note: this function operates on the memory pools.
  109544             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  109545             :        */
  109546             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  109547             :       /* */
  109548             : 
  109549             : 
  109550             :      public:
  109551             :       /* name Memory Allocation Functions
  109552             :           \brief Memory allocations functions ... incomplete-documentation
  109553             : 
  109554             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109555             :           or by particularly knowledgable users for specialized tools or applications.
  109556             :        */
  109557             :       /* */
  109558             : 
  109559             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  109560             : 
  109561             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  109562             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  109563             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  109564             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  109565             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  109566             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  109567             :           being used with the AST File I/O mechanism.
  109568             :        */
  109569             :           virtual bool isInMemoryPool() override;
  109570             : 
  109571             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  109572             : 
  109573             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  109574             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  109575             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  109576             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  109577             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  109578             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  109579             :           being used with the AST File I/O mechanism.
  109580             :        */
  109581             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  109582             : 
  109583             :       // DQ (4/30/2006): Modified to be a const function.
  109584             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  109585             : 
  109586             :           This functions is part of general support for many possible tools to operate 
  109587             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  109588             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  109589             :           less than the set of pointers used by the AST file I/O. This is part of
  109590             :           work implemented by Andreas, and support tools such as the AST graph generation.
  109591             : 
  109592             :           \warning This function can return unexpected data members and thus the 
  109593             :                    order and the number of elements is unpredicable and subject 
  109594             :                    to change.
  109595             : 
  109596             :           \returns STL vector of pairs of SgNode* and strings
  109597             :        */
  109598             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  109599             : 
  109600             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  109601             : 
  109602             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  109603             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  109604             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  109605             : 
  109606             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  109607             :                    and subject to change.
  109608             :        */
  109609             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  109610             : 
  109611             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  109612             : 
  109613             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  109614             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  109615             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  109616             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  109617             : 
  109618             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  109619             : 
  109620             :           \returns long
  109621             :        */
  109622             :           virtual long getChildIndex( SgNode* childNode ) const override;
  109623             : 
  109624             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  109625             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  109626             :       /* \brief Constructor for use by AST File I/O Mechanism
  109627             : 
  109628             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  109629             :           which obtained via fast binary file I/O from disk.
  109630             :        */
  109631             :        // SgOmpUseDeviceAddrClause( SgOmpUseDeviceAddrClauseStorageClass& source );
  109632             : 
  109633             : 
  109634             : 
  109635             : 
  109636             : 
  109637             :  // JH (10/24/2005): methods added to support the ast file IO
  109638             :     private:
  109639             : 
  109640             :       /* name AST Memory Allocation Support Functions
  109641             :           \brief Memory allocations support....
  109642             : 
  109643             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  109644             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  109645             :           and support the AST File I/O Mechanism.
  109646             :        */
  109647             :       /* */
  109648             : 
  109649             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  109650             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  109651             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  109652             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  109653             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  109654             :           a correspinding one in the AST_FILE_IO class!
  109655             :        */
  109656             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  109657             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  109658             :       /* \brief Typedef used for low level memory access.
  109659             :        */
  109660             :        // typedef unsigned char* TestType;
  109661             : 
  109662             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  109663             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  109664             :       /* \brief Typedef used to hold memory addresses as values.
  109665             :        */
  109666             :        // typedef unsigned long  AddressType;
  109667             : 
  109668             : 
  109669             : 
  109670             :        // necessary, to have direct access to the p_freepointer and the private methods !
  109671             :       /*! \brief friend class declaration to support AST File I/O */
  109672             :           friend class AST_FILE_IO;
  109673             : 
  109674             :       /*! \brief friend class declaration to support AST File I/O */
  109675             :           friend class SgOmpUseDeviceAddrClauseStorageClass;
  109676             : 
  109677             :       /*! \brief friend class declaration to support AST File I/O */
  109678             :           friend class AstSpecificDataManagingClass;
  109679             : 
  109680             :       /*! \brief friend class declaration to support AST File I/O */
  109681             :           friend class AstSpecificDataManagingClassStorageClass;
  109682             :     public:
  109683             :       /*! \brief IR node constructor to support AST File I/O */
  109684             :           SgOmpUseDeviceAddrClause( const SgOmpUseDeviceAddrClauseStorageClass& source );
  109685             : 
  109686             :  // private: // JJW hack
  109687             :        /*
  109688             :           name AST Memory Allocation Support Variables
  109689             :           Memory allocations support variables 
  109690             : 
  109691             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  109692             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  109693             :           and support the AST File I/O Mechanism.
  109694             :        */
  109695             :       /* */
  109696             : 
  109697             :     public:
  109698             : 
  109699             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  109700             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  109701             :       // virtual SgNode* addRegExpAttribute();
  109702             :       /*! \brief Support for AST matching using regular expression.
  109703             : 
  109704             :           This support is incomplete and the subject of current research to define 
  109705             :           RegEx trees to support inexact matching.
  109706             :        */
  109707             :           SgOmpUseDeviceAddrClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  109708             : 
  109709             : // *** COMMON CODE SECTION ENDS HERE ***
  109710             : 
  109711             : 
  109712             : // End of memberFunctionString
  109713             : // Start of memberFunctionString
  109714             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  109715             : 
  109716             :      // the generated cast function
  109717             :      // friend ROSE_DLL_API SgOmpUseDeviceAddrClause* isSgOmpUseDeviceAddrClause ( SgNode* s );
  109718             : 
  109719             :           typedef SgOmpVariablesClause base_node_type;
  109720             : 
  109721             : 
  109722             : // End of memberFunctionString
  109723             : 
  109724             : 
  109725             :      public: 
  109726             :          virtual ~SgOmpUseDeviceAddrClause();
  109727             : 
  109728             : 
  109729             :      public: 
  109730             :          SgOmpUseDeviceAddrClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  109731             :          SgOmpUseDeviceAddrClause(SgExprListExp* variables); 
  109732             : 
  109733             :     protected:
  109734             : 
  109735             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUseDeviceAddrClause>;
  109736             : 
  109737             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109738             : 
  109739             : 
  109740             :    };
  109741             : #endif
  109742             : 
  109743             : // postdeclarations for SgOmpUseDeviceAddrClause
  109744             : 
  109745             : /* #line 109746 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109746             : 
  109747             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  109748             : 
  109749             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109750             : 
  109751             : 
  109752             : /* #line 109753 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109753             : 
  109754             : 
  109755             : 
  109756             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109757             : 
  109758             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  109759             : //      This code is automatically generated for each 
  109760             : //      terminal and non-terminal within the defined 
  109761             : //      grammar.  There is a simple way to change the 
  109762             : //      code to fix bugs etc.  See the ROSE README file
  109763             : //      for directions.
  109764             : 
  109765             : // tps: (02/22/2010): Adding DLL export requirements
  109766             : #include "rosedll.h"
  109767             : 
  109768             : // predeclarations for SgOmpSharedClause
  109769             : 
  109770             : /* #line 109771 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109771             : 
  109772             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  109773             : 
  109774             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  109775             : 
  109776             : #if 1
  109777             : // Class Definition for SgOmpSharedClause
  109778             : class ROSE_DLL_API SgOmpSharedClause  : public SgOmpVariablesClause
  109779             :    {
  109780             :      public:
  109781             : 
  109782             : 
  109783             : /* #line 109784 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  109784             : 
  109785             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  109786             : // Start of memberFunctionString
  109787             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  109788             : 
  109789             : // *** COMMON CODE SECTION BEGINS HERE ***
  109790             : 
  109791             :     public:
  109792             : 
  109793             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  109794             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  109795             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  109796             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  109797             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  109798             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  109799             : 
  109800             :       /*! \brief returns a string representing the class name */
  109801             :           virtual std::string class_name() const override;
  109802             : 
  109803             :       /*! \brief returns new style SageIII enum values */
  109804             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  109805             : 
  109806             :       /*! \brief static variant value */
  109807             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  109808             :        // static const VariantT static_variant = V_SgOmpSharedClause;
  109809             :           enum { static_variant = V_SgOmpSharedClause };
  109810             : 
  109811             :        /* the generated cast function */
  109812             :       /*! \brief Casts pointer from base class to derived class */
  109813             :           ROSE_DLL_API friend       SgOmpSharedClause* isSgOmpSharedClause(       SgNode * s );
  109814             : 
  109815             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  109816             :           ROSE_DLL_API friend const SgOmpSharedClause* isSgOmpSharedClause( const SgNode * s );
  109817             : 
  109818             :      // ******************************************
  109819             :      // * Memory Pool / New / Delete
  109820             :      // ******************************************
  109821             : 
  109822             :      public:
  109823             :           /// \private
  109824             :           static const unsigned pool_size; //
  109825             :           /// \private
  109826             :           static std::vector<unsigned char *> pools; //
  109827             :           /// \private
  109828             :           static SgOmpSharedClause * next_node; // 
  109829             : 
  109830             :           /// \private
  109831             :           static unsigned long initializeStorageClassArray(SgOmpSharedClauseStorageClass *); //
  109832             : 
  109833             :           /// \private
  109834             :           static void clearMemoryPool(); //
  109835             :           static void deleteMemoryPool(); //
  109836             : 
  109837             :           /// \private
  109838             :           static void extendMemoryPoolForFileIO(); //
  109839             : 
  109840             :           /// \private
  109841             :           static SgOmpSharedClause * getPointerFromGlobalIndex(unsigned long); //
  109842             :           /// \private
  109843             :           static SgOmpSharedClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  109844             : 
  109845             :           /// \private
  109846             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  109847             :           /// \private
  109848             :           static void resetValidFreepointers(); //
  109849             :           /// \private
  109850             :           static unsigned long getNumberOfLastValidPointer(); //
  109851             : 
  109852             : 
  109853             : #if defined(INLINE_FUNCTIONS)
  109854             :       /*! \brief returns pointer to newly allocated IR node */
  109855             :           inline void *operator new (size_t size);
  109856             : #else
  109857             :       /*! \brief returns pointer to newly allocated IR node */
  109858             :           void *operator new (size_t size);
  109859             : #endif
  109860             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  109861             :           void operator delete (void* pointer, size_t size);
  109862             : 
  109863             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  109864           0 :           void operator delete (void* pointer)
  109865             :              {
  109866             :             // This is the generated delete operator...
  109867           0 :                SgOmpSharedClause::operator delete (pointer,sizeof(SgOmpSharedClause));
  109868             :              }
  109869             : 
  109870             :       /*! \brief Returns the total number of IR nodes of this type */
  109871             :           static size_t numberOfNodes();
  109872             : 
  109873             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  109874             :           static size_t memoryUsage();
  109875             : 
  109876             :       // End of scope which started in IR nodes specific code 
  109877             :       /* */
  109878             : 
  109879             :       /* name Internal Functions
  109880             :           \brief Internal functions ... incomplete-documentation
  109881             : 
  109882             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109883             :           or by particularly knowledgeable users for specialized tools or applications.
  109884             : 
  109885             :           \internal We could not make these private because they are required by user for special purposes. And 
  109886             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  109887             :          
  109888             :        */
  109889             : 
  109890             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  109891             :        // overridden in every class by *generated* implementation
  109892             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  109893             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  109894             :        // MS: 06/28/02 container of names of variables or container indices 
  109895             :        // used used in the traversal to access AST successor nodes
  109896             :        // overridden in every class by *generated* implementation
  109897             :       /*! \brief container of names of variables or container indices used used in the traversal
  109898             :           to access AST successor nodes overridden in every class by *generated* implementation */
  109899             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  109900             : 
  109901             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  109902             :        // than all the vector copies. The implementation for these functions is generated for each class.
  109903             :       /*! \brief return number of children in the traversal successor list */
  109904             :           virtual size_t get_numberOfTraversalSuccessors() override;
  109905             :       /*! \brief index-based access to traversal successors by index number */
  109906             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  109907             :       /*! \brief index-based access to traversal successors by child node */
  109908             :           virtual size_t get_childIndex(SgNode *child) override;
  109909             : 
  109910             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  109911             :        // MS: 08/16/2002 method for generating RTI information
  109912             :       /*! \brief return C++ Runtime-Time-Information */
  109913             :           virtual RTIReturnType roseRTI() override;
  109914             : #endif
  109915             :       /* */
  109916             : 
  109917             : 
  109918             : 
  109919             :       /* name Deprecated Functions
  109920             :           \brief Deprecated functions ... incomplete-documentation
  109921             : 
  109922             :           These functions have been deprecated from use.
  109923             :        */
  109924             :       /* */
  109925             : 
  109926             :       /*! returns a C style string (char*) representing the class name */
  109927             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  109928             : 
  109929             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  109930             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  109931             : #if 0
  109932             :       /*! returns old style Sage II enum values */
  109933             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  109934             :       /*! returns old style Sage II enum values */
  109935             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  109936             : #endif
  109937             :       /* */
  109938             : 
  109939             : 
  109940             : 
  109941             : 
  109942             :      public:
  109943             :       /* name Traversal Support Functions
  109944             :           \brief Traversal support functions ... incomplete-documentation
  109945             : 
  109946             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109947             :           or by particularly knowledgable users for specialized tools or applications.
  109948             :        */
  109949             :       /* */
  109950             : 
  109951             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  109952             :        // (inferior to ROSE traversal mechanism, experimental).
  109953             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  109954             :        */
  109955             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  109956             : 
  109957             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  109958             :       /*! \brief support for the classic visitor pattern done in GoF */
  109959             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  109960             : 
  109961             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  109962             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  109963             :        */
  109964             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  109965             : 
  109966             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  109967             :        */
  109968             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  109969             : 
  109970             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  109971             :        // This traversal helps support internal tools that call static member functions.
  109972             :        // note: this function operates on the memory pools.
  109973             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  109974             :        */
  109975             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  109976             :       /* */
  109977             : 
  109978             : 
  109979             :      public:
  109980             :       /* name Memory Allocation Functions
  109981             :           \brief Memory allocations functions ... incomplete-documentation
  109982             : 
  109983             :           These functions have been made public as part of the design, but they are suggested for internal use 
  109984             :           or by particularly knowledgable users for specialized tools or applications.
  109985             :        */
  109986             :       /* */
  109987             : 
  109988             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  109989             : 
  109990             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  109991             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  109992             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  109993             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  109994             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  109995             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  109996             :           being used with the AST File I/O mechanism.
  109997             :        */
  109998             :           virtual bool isInMemoryPool() override;
  109999             : 
  110000             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  110001             : 
  110002             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  110003             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  110004             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  110005             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  110006             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  110007             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  110008             :           being used with the AST File I/O mechanism.
  110009             :        */
  110010             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  110011             : 
  110012             :       // DQ (4/30/2006): Modified to be a const function.
  110013             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  110014             : 
  110015             :           This functions is part of general support for many possible tools to operate 
  110016             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  110017             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  110018             :           less than the set of pointers used by the AST file I/O. This is part of
  110019             :           work implemented by Andreas, and support tools such as the AST graph generation.
  110020             : 
  110021             :           \warning This function can return unexpected data members and thus the 
  110022             :                    order and the number of elements is unpredicable and subject 
  110023             :                    to change.
  110024             : 
  110025             :           \returns STL vector of pairs of SgNode* and strings
  110026             :        */
  110027             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  110028             : 
  110029             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  110030             : 
  110031             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  110032             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  110033             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  110034             : 
  110035             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  110036             :                    and subject to change.
  110037             :        */
  110038             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  110039             : 
  110040             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  110041             : 
  110042             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  110043             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  110044             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  110045             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  110046             : 
  110047             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  110048             : 
  110049             :           \returns long
  110050             :        */
  110051             :           virtual long getChildIndex( SgNode* childNode ) const override;
  110052             : 
  110053             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  110054             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110055             :       /* \brief Constructor for use by AST File I/O Mechanism
  110056             : 
  110057             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  110058             :           which obtained via fast binary file I/O from disk.
  110059             :        */
  110060             :        // SgOmpSharedClause( SgOmpSharedClauseStorageClass& source );
  110061             : 
  110062             : 
  110063             : 
  110064             : 
  110065             : 
  110066             :  // JH (10/24/2005): methods added to support the ast file IO
  110067             :     private:
  110068             : 
  110069             :       /* name AST Memory Allocation Support Functions
  110070             :           \brief Memory allocations support....
  110071             : 
  110072             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  110073             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  110074             :           and support the AST File I/O Mechanism.
  110075             :        */
  110076             :       /* */
  110077             : 
  110078             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  110079             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  110080             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  110081             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  110082             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  110083             :           a correspinding one in the AST_FILE_IO class!
  110084             :        */
  110085             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  110086             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110087             :       /* \brief Typedef used for low level memory access.
  110088             :        */
  110089             :        // typedef unsigned char* TestType;
  110090             : 
  110091             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  110092             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110093             :       /* \brief Typedef used to hold memory addresses as values.
  110094             :        */
  110095             :        // typedef unsigned long  AddressType;
  110096             : 
  110097             : 
  110098             : 
  110099             :        // necessary, to have direct access to the p_freepointer and the private methods !
  110100             :       /*! \brief friend class declaration to support AST File I/O */
  110101             :           friend class AST_FILE_IO;
  110102             : 
  110103             :       /*! \brief friend class declaration to support AST File I/O */
  110104             :           friend class SgOmpSharedClauseStorageClass;
  110105             : 
  110106             :       /*! \brief friend class declaration to support AST File I/O */
  110107             :           friend class AstSpecificDataManagingClass;
  110108             : 
  110109             :       /*! \brief friend class declaration to support AST File I/O */
  110110             :           friend class AstSpecificDataManagingClassStorageClass;
  110111             :     public:
  110112             :       /*! \brief IR node constructor to support AST File I/O */
  110113             :           SgOmpSharedClause( const SgOmpSharedClauseStorageClass& source );
  110114             : 
  110115             :  // private: // JJW hack
  110116             :        /*
  110117             :           name AST Memory Allocation Support Variables
  110118             :           Memory allocations support variables 
  110119             : 
  110120             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  110121             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  110122             :           and support the AST File I/O Mechanism.
  110123             :        */
  110124             :       /* */
  110125             : 
  110126             :     public:
  110127             : 
  110128             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  110129             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  110130             :       // virtual SgNode* addRegExpAttribute();
  110131             :       /*! \brief Support for AST matching using regular expression.
  110132             : 
  110133             :           This support is incomplete and the subject of current research to define 
  110134             :           RegEx trees to support inexact matching.
  110135             :        */
  110136             :           SgOmpSharedClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  110137             : 
  110138             : // *** COMMON CODE SECTION ENDS HERE ***
  110139             : 
  110140             : 
  110141             : // End of memberFunctionString
  110142             : // Start of memberFunctionString
  110143             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  110144             : 
  110145             :      // the generated cast function
  110146             :      // friend ROSE_DLL_API SgOmpSharedClause* isSgOmpSharedClause ( SgNode* s );
  110147             : 
  110148             :           typedef SgOmpVariablesClause base_node_type;
  110149             : 
  110150             : 
  110151             : // End of memberFunctionString
  110152             : 
  110153             : 
  110154             :      public: 
  110155             :          virtual ~SgOmpSharedClause();
  110156             : 
  110157             : 
  110158             :      public: 
  110159             :          SgOmpSharedClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  110160             :          SgOmpSharedClause(SgExprListExp* variables); 
  110161             : 
  110162             :     protected:
  110163             : 
  110164             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSharedClause>;
  110165             : 
  110166             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110167             : 
  110168             : 
  110169             :    };
  110170             : #endif
  110171             : 
  110172             : // postdeclarations for SgOmpSharedClause
  110173             : 
  110174             : /* #line 110175 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110175             : 
  110176             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  110177             : 
  110178             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110179             : 
  110180             : 
  110181             : /* #line 110182 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110182             : 
  110183             : 
  110184             : 
  110185             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110186             : 
  110187             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  110188             : //      This code is automatically generated for each 
  110189             : //      terminal and non-terminal within the defined 
  110190             : //      grammar.  There is a simple way to change the 
  110191             : //      code to fix bugs etc.  See the ROSE README file
  110192             : //      for directions.
  110193             : 
  110194             : // tps: (02/22/2010): Adding DLL export requirements
  110195             : #include "rosedll.h"
  110196             : 
  110197             : // predeclarations for SgOmpCopyinClause
  110198             : 
  110199             : /* #line 110200 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110200             : 
  110201             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  110202             : 
  110203             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110204             : 
  110205             : #if 1
  110206             : // Class Definition for SgOmpCopyinClause
  110207             : class ROSE_DLL_API SgOmpCopyinClause  : public SgOmpVariablesClause
  110208             :    {
  110209             :      public:
  110210             : 
  110211             : 
  110212             : /* #line 110213 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110213             : 
  110214             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  110215             : // Start of memberFunctionString
  110216             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  110217             : 
  110218             : // *** COMMON CODE SECTION BEGINS HERE ***
  110219             : 
  110220             :     public:
  110221             : 
  110222             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  110223             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  110224             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  110225             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  110226             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  110227             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  110228             : 
  110229             :       /*! \brief returns a string representing the class name */
  110230             :           virtual std::string class_name() const override;
  110231             : 
  110232             :       /*! \brief returns new style SageIII enum values */
  110233             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  110234             : 
  110235             :       /*! \brief static variant value */
  110236             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  110237             :        // static const VariantT static_variant = V_SgOmpCopyinClause;
  110238             :           enum { static_variant = V_SgOmpCopyinClause };
  110239             : 
  110240             :        /* the generated cast function */
  110241             :       /*! \brief Casts pointer from base class to derived class */
  110242             :           ROSE_DLL_API friend       SgOmpCopyinClause* isSgOmpCopyinClause(       SgNode * s );
  110243             : 
  110244             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  110245             :           ROSE_DLL_API friend const SgOmpCopyinClause* isSgOmpCopyinClause( const SgNode * s );
  110246             : 
  110247             :      // ******************************************
  110248             :      // * Memory Pool / New / Delete
  110249             :      // ******************************************
  110250             : 
  110251             :      public:
  110252             :           /// \private
  110253             :           static const unsigned pool_size; //
  110254             :           /// \private
  110255             :           static std::vector<unsigned char *> pools; //
  110256             :           /// \private
  110257             :           static SgOmpCopyinClause * next_node; // 
  110258             : 
  110259             :           /// \private
  110260             :           static unsigned long initializeStorageClassArray(SgOmpCopyinClauseStorageClass *); //
  110261             : 
  110262             :           /// \private
  110263             :           static void clearMemoryPool(); //
  110264             :           static void deleteMemoryPool(); //
  110265             : 
  110266             :           /// \private
  110267             :           static void extendMemoryPoolForFileIO(); //
  110268             : 
  110269             :           /// \private
  110270             :           static SgOmpCopyinClause * getPointerFromGlobalIndex(unsigned long); //
  110271             :           /// \private
  110272             :           static SgOmpCopyinClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  110273             : 
  110274             :           /// \private
  110275             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  110276             :           /// \private
  110277             :           static void resetValidFreepointers(); //
  110278             :           /// \private
  110279             :           static unsigned long getNumberOfLastValidPointer(); //
  110280             : 
  110281             : 
  110282             : #if defined(INLINE_FUNCTIONS)
  110283             :       /*! \brief returns pointer to newly allocated IR node */
  110284             :           inline void *operator new (size_t size);
  110285             : #else
  110286             :       /*! \brief returns pointer to newly allocated IR node */
  110287             :           void *operator new (size_t size);
  110288             : #endif
  110289             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  110290             :           void operator delete (void* pointer, size_t size);
  110291             : 
  110292             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  110293           0 :           void operator delete (void* pointer)
  110294             :              {
  110295             :             // This is the generated delete operator...
  110296           0 :                SgOmpCopyinClause::operator delete (pointer,sizeof(SgOmpCopyinClause));
  110297             :              }
  110298             : 
  110299             :       /*! \brief Returns the total number of IR nodes of this type */
  110300             :           static size_t numberOfNodes();
  110301             : 
  110302             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  110303             :           static size_t memoryUsage();
  110304             : 
  110305             :       // End of scope which started in IR nodes specific code 
  110306             :       /* */
  110307             : 
  110308             :       /* name Internal Functions
  110309             :           \brief Internal functions ... incomplete-documentation
  110310             : 
  110311             :           These functions have been made public as part of the design, but they are suggested for internal use 
  110312             :           or by particularly knowledgeable users for specialized tools or applications.
  110313             : 
  110314             :           \internal We could not make these private because they are required by user for special purposes. And 
  110315             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  110316             :          
  110317             :        */
  110318             : 
  110319             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  110320             :        // overridden in every class by *generated* implementation
  110321             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  110322             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  110323             :        // MS: 06/28/02 container of names of variables or container indices 
  110324             :        // used used in the traversal to access AST successor nodes
  110325             :        // overridden in every class by *generated* implementation
  110326             :       /*! \brief container of names of variables or container indices used used in the traversal
  110327             :           to access AST successor nodes overridden in every class by *generated* implementation */
  110328             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  110329             : 
  110330             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  110331             :        // than all the vector copies. The implementation for these functions is generated for each class.
  110332             :       /*! \brief return number of children in the traversal successor list */
  110333             :           virtual size_t get_numberOfTraversalSuccessors() override;
  110334             :       /*! \brief index-based access to traversal successors by index number */
  110335             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  110336             :       /*! \brief index-based access to traversal successors by child node */
  110337             :           virtual size_t get_childIndex(SgNode *child) override;
  110338             : 
  110339             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  110340             :        // MS: 08/16/2002 method for generating RTI information
  110341             :       /*! \brief return C++ Runtime-Time-Information */
  110342             :           virtual RTIReturnType roseRTI() override;
  110343             : #endif
  110344             :       /* */
  110345             : 
  110346             : 
  110347             : 
  110348             :       /* name Deprecated Functions
  110349             :           \brief Deprecated functions ... incomplete-documentation
  110350             : 
  110351             :           These functions have been deprecated from use.
  110352             :        */
  110353             :       /* */
  110354             : 
  110355             :       /*! returns a C style string (char*) representing the class name */
  110356             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  110357             : 
  110358             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  110359             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  110360             : #if 0
  110361             :       /*! returns old style Sage II enum values */
  110362             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  110363             :       /*! returns old style Sage II enum values */
  110364             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  110365             : #endif
  110366             :       /* */
  110367             : 
  110368             : 
  110369             : 
  110370             : 
  110371             :      public:
  110372             :       /* name Traversal Support Functions
  110373             :           \brief Traversal support functions ... incomplete-documentation
  110374             : 
  110375             :           These functions have been made public as part of the design, but they are suggested for internal use 
  110376             :           or by particularly knowledgable users for specialized tools or applications.
  110377             :        */
  110378             :       /* */
  110379             : 
  110380             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  110381             :        // (inferior to ROSE traversal mechanism, experimental).
  110382             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  110383             :        */
  110384             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  110385             : 
  110386             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  110387             :       /*! \brief support for the classic visitor pattern done in GoF */
  110388             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  110389             : 
  110390             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  110391             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  110392             :        */
  110393             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  110394             : 
  110395             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  110396             :        */
  110397             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  110398             : 
  110399             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  110400             :        // This traversal helps support internal tools that call static member functions.
  110401             :        // note: this function operates on the memory pools.
  110402             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  110403             :        */
  110404             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  110405             :       /* */
  110406             : 
  110407             : 
  110408             :      public:
  110409             :       /* name Memory Allocation Functions
  110410             :           \brief Memory allocations functions ... incomplete-documentation
  110411             : 
  110412             :           These functions have been made public as part of the design, but they are suggested for internal use 
  110413             :           or by particularly knowledgable users for specialized tools or applications.
  110414             :        */
  110415             :       /* */
  110416             : 
  110417             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  110418             : 
  110419             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  110420             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  110421             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  110422             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  110423             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  110424             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  110425             :           being used with the AST File I/O mechanism.
  110426             :        */
  110427             :           virtual bool isInMemoryPool() override;
  110428             : 
  110429             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  110430             : 
  110431             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  110432             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  110433             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  110434             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  110435             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  110436             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  110437             :           being used with the AST File I/O mechanism.
  110438             :        */
  110439             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  110440             : 
  110441             :       // DQ (4/30/2006): Modified to be a const function.
  110442             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  110443             : 
  110444             :           This functions is part of general support for many possible tools to operate 
  110445             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  110446             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  110447             :           less than the set of pointers used by the AST file I/O. This is part of
  110448             :           work implemented by Andreas, and support tools such as the AST graph generation.
  110449             : 
  110450             :           \warning This function can return unexpected data members and thus the 
  110451             :                    order and the number of elements is unpredicable and subject 
  110452             :                    to change.
  110453             : 
  110454             :           \returns STL vector of pairs of SgNode* and strings
  110455             :        */
  110456             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  110457             : 
  110458             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  110459             : 
  110460             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  110461             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  110462             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  110463             : 
  110464             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  110465             :                    and subject to change.
  110466             :        */
  110467             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  110468             : 
  110469             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  110470             : 
  110471             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  110472             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  110473             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  110474             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  110475             : 
  110476             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  110477             : 
  110478             :           \returns long
  110479             :        */
  110480             :           virtual long getChildIndex( SgNode* childNode ) const override;
  110481             : 
  110482             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  110483             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110484             :       /* \brief Constructor for use by AST File I/O Mechanism
  110485             : 
  110486             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  110487             :           which obtained via fast binary file I/O from disk.
  110488             :        */
  110489             :        // SgOmpCopyinClause( SgOmpCopyinClauseStorageClass& source );
  110490             : 
  110491             : 
  110492             : 
  110493             : 
  110494             : 
  110495             :  // JH (10/24/2005): methods added to support the ast file IO
  110496             :     private:
  110497             : 
  110498             :       /* name AST Memory Allocation Support Functions
  110499             :           \brief Memory allocations support....
  110500             : 
  110501             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  110502             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  110503             :           and support the AST File I/O Mechanism.
  110504             :        */
  110505             :       /* */
  110506             : 
  110507             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  110508             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  110509             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  110510             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  110511             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  110512             :           a correspinding one in the AST_FILE_IO class!
  110513             :        */
  110514             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  110515             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110516             :       /* \brief Typedef used for low level memory access.
  110517             :        */
  110518             :        // typedef unsigned char* TestType;
  110519             : 
  110520             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  110521             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110522             :       /* \brief Typedef used to hold memory addresses as values.
  110523             :        */
  110524             :        // typedef unsigned long  AddressType;
  110525             : 
  110526             : 
  110527             : 
  110528             :        // necessary, to have direct access to the p_freepointer and the private methods !
  110529             :       /*! \brief friend class declaration to support AST File I/O */
  110530             :           friend class AST_FILE_IO;
  110531             : 
  110532             :       /*! \brief friend class declaration to support AST File I/O */
  110533             :           friend class SgOmpCopyinClauseStorageClass;
  110534             : 
  110535             :       /*! \brief friend class declaration to support AST File I/O */
  110536             :           friend class AstSpecificDataManagingClass;
  110537             : 
  110538             :       /*! \brief friend class declaration to support AST File I/O */
  110539             :           friend class AstSpecificDataManagingClassStorageClass;
  110540             :     public:
  110541             :       /*! \brief IR node constructor to support AST File I/O */
  110542             :           SgOmpCopyinClause( const SgOmpCopyinClauseStorageClass& source );
  110543             : 
  110544             :  // private: // JJW hack
  110545             :        /*
  110546             :           name AST Memory Allocation Support Variables
  110547             :           Memory allocations support variables 
  110548             : 
  110549             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  110550             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  110551             :           and support the AST File I/O Mechanism.
  110552             :        */
  110553             :       /* */
  110554             : 
  110555             :     public:
  110556             : 
  110557             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  110558             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  110559             :       // virtual SgNode* addRegExpAttribute();
  110560             :       /*! \brief Support for AST matching using regular expression.
  110561             : 
  110562             :           This support is incomplete and the subject of current research to define 
  110563             :           RegEx trees to support inexact matching.
  110564             :        */
  110565             :           SgOmpCopyinClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  110566             : 
  110567             : // *** COMMON CODE SECTION ENDS HERE ***
  110568             : 
  110569             : 
  110570             : // End of memberFunctionString
  110571             : // Start of memberFunctionString
  110572             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  110573             : 
  110574             :      // the generated cast function
  110575             :      // friend ROSE_DLL_API SgOmpCopyinClause* isSgOmpCopyinClause ( SgNode* s );
  110576             : 
  110577             :           typedef SgOmpVariablesClause base_node_type;
  110578             : 
  110579             : 
  110580             : // End of memberFunctionString
  110581             : 
  110582             : 
  110583             :      public: 
  110584             :          virtual ~SgOmpCopyinClause();
  110585             : 
  110586             : 
  110587             :      public: 
  110588             :          SgOmpCopyinClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  110589             :          SgOmpCopyinClause(SgExprListExp* variables); 
  110590             : 
  110591             :     protected:
  110592             : 
  110593             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpCopyinClause>;
  110594             : 
  110595             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110596             : 
  110597             : 
  110598             :    };
  110599             : #endif
  110600             : 
  110601             : // postdeclarations for SgOmpCopyinClause
  110602             : 
  110603             : /* #line 110604 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110604             : 
  110605             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  110606             : 
  110607             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110608             : 
  110609             : 
  110610             : /* #line 110611 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110611             : 
  110612             : 
  110613             : 
  110614             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110615             : 
  110616             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  110617             : //      This code is automatically generated for each 
  110618             : //      terminal and non-terminal within the defined 
  110619             : //      grammar.  There is a simple way to change the 
  110620             : //      code to fix bugs etc.  See the ROSE README file
  110621             : //      for directions.
  110622             : 
  110623             : // tps: (02/22/2010): Adding DLL export requirements
  110624             : #include "rosedll.h"
  110625             : 
  110626             : // predeclarations for SgOmpLastprivateClause
  110627             : 
  110628             : /* #line 110629 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110629             : 
  110630             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  110631             : 
  110632             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  110633             : 
  110634             : #if 1
  110635             : // Class Definition for SgOmpLastprivateClause
  110636             : class ROSE_DLL_API SgOmpLastprivateClause  : public SgOmpVariablesClause
  110637             :    {
  110638             :      public:
  110639             : 
  110640             : 
  110641             : /* #line 110642 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  110642             : 
  110643             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  110644             : // Start of memberFunctionString
  110645             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  110646             : 
  110647             : // *** COMMON CODE SECTION BEGINS HERE ***
  110648             : 
  110649             :     public:
  110650             : 
  110651             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  110652             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  110653             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  110654             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  110655             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  110656             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  110657             : 
  110658             :       /*! \brief returns a string representing the class name */
  110659             :           virtual std::string class_name() const override;
  110660             : 
  110661             :       /*! \brief returns new style SageIII enum values */
  110662             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  110663             : 
  110664             :       /*! \brief static variant value */
  110665             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  110666             :        // static const VariantT static_variant = V_SgOmpLastprivateClause;
  110667             :           enum { static_variant = V_SgOmpLastprivateClause };
  110668             : 
  110669             :        /* the generated cast function */
  110670             :       /*! \brief Casts pointer from base class to derived class */
  110671             :           ROSE_DLL_API friend       SgOmpLastprivateClause* isSgOmpLastprivateClause(       SgNode * s );
  110672             : 
  110673             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  110674             :           ROSE_DLL_API friend const SgOmpLastprivateClause* isSgOmpLastprivateClause( const SgNode * s );
  110675             : 
  110676             :      // ******************************************
  110677             :      // * Memory Pool / New / Delete
  110678             :      // ******************************************
  110679             : 
  110680             :      public:
  110681             :           /// \private
  110682             :           static const unsigned pool_size; //
  110683             :           /// \private
  110684             :           static std::vector<unsigned char *> pools; //
  110685             :           /// \private
  110686             :           static SgOmpLastprivateClause * next_node; // 
  110687             : 
  110688             :           /// \private
  110689             :           static unsigned long initializeStorageClassArray(SgOmpLastprivateClauseStorageClass *); //
  110690             : 
  110691             :           /// \private
  110692             :           static void clearMemoryPool(); //
  110693             :           static void deleteMemoryPool(); //
  110694             : 
  110695             :           /// \private
  110696             :           static void extendMemoryPoolForFileIO(); //
  110697             : 
  110698             :           /// \private
  110699             :           static SgOmpLastprivateClause * getPointerFromGlobalIndex(unsigned long); //
  110700             :           /// \private
  110701             :           static SgOmpLastprivateClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  110702             : 
  110703             :           /// \private
  110704             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  110705             :           /// \private
  110706             :           static void resetValidFreepointers(); //
  110707             :           /// \private
  110708             :           static unsigned long getNumberOfLastValidPointer(); //
  110709             : 
  110710             : 
  110711             : #if defined(INLINE_FUNCTIONS)
  110712             :       /*! \brief returns pointer to newly allocated IR node */
  110713             :           inline void *operator new (size_t size);
  110714             : #else
  110715             :       /*! \brief returns pointer to newly allocated IR node */
  110716             :           void *operator new (size_t size);
  110717             : #endif
  110718             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  110719             :           void operator delete (void* pointer, size_t size);
  110720             : 
  110721             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  110722           0 :           void operator delete (void* pointer)
  110723             :              {
  110724             :             // This is the generated delete operator...
  110725           0 :                SgOmpLastprivateClause::operator delete (pointer,sizeof(SgOmpLastprivateClause));
  110726             :              }
  110727             : 
  110728             :       /*! \brief Returns the total number of IR nodes of this type */
  110729             :           static size_t numberOfNodes();
  110730             : 
  110731             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  110732             :           static size_t memoryUsage();
  110733             : 
  110734             :       // End of scope which started in IR nodes specific code 
  110735             :       /* */
  110736             : 
  110737             :       /* name Internal Functions
  110738             :           \brief Internal functions ... incomplete-documentation
  110739             : 
  110740             :           These functions have been made public as part of the design, but they are suggested for internal use 
  110741             :           or by particularly knowledgeable users for specialized tools or applications.
  110742             : 
  110743             :           \internal We could not make these private because they are required by user for special purposes. And 
  110744             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  110745             :          
  110746             :        */
  110747             : 
  110748             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  110749             :        // overridden in every class by *generated* implementation
  110750             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  110751             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  110752             :        // MS: 06/28/02 container of names of variables or container indices 
  110753             :        // used used in the traversal to access AST successor nodes
  110754             :        // overridden in every class by *generated* implementation
  110755             :       /*! \brief container of names of variables or container indices used used in the traversal
  110756             :           to access AST successor nodes overridden in every class by *generated* implementation */
  110757             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  110758             : 
  110759             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  110760             :        // than all the vector copies. The implementation for these functions is generated for each class.
  110761             :       /*! \brief return number of children in the traversal successor list */
  110762             :           virtual size_t get_numberOfTraversalSuccessors() override;
  110763             :       /*! \brief index-based access to traversal successors by index number */
  110764             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  110765             :       /*! \brief index-based access to traversal successors by child node */
  110766             :           virtual size_t get_childIndex(SgNode *child) override;
  110767             : 
  110768             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  110769             :        // MS: 08/16/2002 method for generating RTI information
  110770             :       /*! \brief return C++ Runtime-Time-Information */
  110771             :           virtual RTIReturnType roseRTI() override;
  110772             : #endif
  110773             :       /* */
  110774             : 
  110775             : 
  110776             : 
  110777             :       /* name Deprecated Functions
  110778             :           \brief Deprecated functions ... incomplete-documentation
  110779             : 
  110780             :           These functions have been deprecated from use.
  110781             :        */
  110782             :       /* */
  110783             : 
  110784             :       /*! returns a C style string (char*) representing the class name */
  110785             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  110786             : 
  110787             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  110788             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  110789             : #if 0
  110790             :       /*! returns old style Sage II enum values */
  110791             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  110792             :       /*! returns old style Sage II enum values */
  110793             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  110794             : #endif
  110795             :       /* */
  110796             : 
  110797             : 
  110798             : 
  110799             : 
  110800             :      public:
  110801             :       /* name Traversal Support Functions
  110802             :           \brief Traversal support functions ... incomplete-documentation
  110803             : 
  110804             :           These functions have been made public as part of the design, but they are suggested for internal use 
  110805             :           or by particularly knowledgable users for specialized tools or applications.
  110806             :        */
  110807             :       /* */
  110808             : 
  110809             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  110810             :        // (inferior to ROSE traversal mechanism, experimental).
  110811             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  110812             :        */
  110813             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  110814             : 
  110815             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  110816             :       /*! \brief support for the classic visitor pattern done in GoF */
  110817             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  110818             : 
  110819             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  110820             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  110821             :        */
  110822             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  110823             : 
  110824             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  110825             :        */
  110826             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  110827             : 
  110828             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  110829             :        // This traversal helps support internal tools that call static member functions.
  110830             :        // note: this function operates on the memory pools.
  110831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  110832             :        */
  110833             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  110834             :       /* */
  110835             : 
  110836             : 
  110837             :      public:
  110838             :       /* name Memory Allocation Functions
  110839             :           \brief Memory allocations functions ... incomplete-documentation
  110840             : 
  110841             :           These functions have been made public as part of the design, but they are suggested for internal use 
  110842             :           or by particularly knowledgable users for specialized tools or applications.
  110843             :        */
  110844             :       /* */
  110845             : 
  110846             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  110847             : 
  110848             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  110849             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  110850             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  110851             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  110852             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  110853             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  110854             :           being used with the AST File I/O mechanism.
  110855             :        */
  110856             :           virtual bool isInMemoryPool() override;
  110857             : 
  110858             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  110859             : 
  110860             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  110861             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  110862             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  110863             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  110864             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  110865             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  110866             :           being used with the AST File I/O mechanism.
  110867             :        */
  110868             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  110869             : 
  110870             :       // DQ (4/30/2006): Modified to be a const function.
  110871             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  110872             : 
  110873             :           This functions is part of general support for many possible tools to operate 
  110874             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  110875             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  110876             :           less than the set of pointers used by the AST file I/O. This is part of
  110877             :           work implemented by Andreas, and support tools such as the AST graph generation.
  110878             : 
  110879             :           \warning This function can return unexpected data members and thus the 
  110880             :                    order and the number of elements is unpredicable and subject 
  110881             :                    to change.
  110882             : 
  110883             :           \returns STL vector of pairs of SgNode* and strings
  110884             :        */
  110885             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  110886             : 
  110887             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  110888             : 
  110889             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  110890             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  110891             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  110892             : 
  110893             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  110894             :                    and subject to change.
  110895             :        */
  110896             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  110897             : 
  110898             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  110899             : 
  110900             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  110901             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  110902             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  110903             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  110904             : 
  110905             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  110906             : 
  110907             :           \returns long
  110908             :        */
  110909             :           virtual long getChildIndex( SgNode* childNode ) const override;
  110910             : 
  110911             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  110912             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110913             :       /* \brief Constructor for use by AST File I/O Mechanism
  110914             : 
  110915             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  110916             :           which obtained via fast binary file I/O from disk.
  110917             :        */
  110918             :        // SgOmpLastprivateClause( SgOmpLastprivateClauseStorageClass& source );
  110919             : 
  110920             : 
  110921             : 
  110922             : 
  110923             : 
  110924             :  // JH (10/24/2005): methods added to support the ast file IO
  110925             :     private:
  110926             : 
  110927             :       /* name AST Memory Allocation Support Functions
  110928             :           \brief Memory allocations support....
  110929             : 
  110930             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  110931             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  110932             :           and support the AST File I/O Mechanism.
  110933             :        */
  110934             :       /* */
  110935             : 
  110936             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  110937             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  110938             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  110939             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  110940             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  110941             :           a correspinding one in the AST_FILE_IO class!
  110942             :        */
  110943             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  110944             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110945             :       /* \brief Typedef used for low level memory access.
  110946             :        */
  110947             :        // typedef unsigned char* TestType;
  110948             : 
  110949             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  110950             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  110951             :       /* \brief Typedef used to hold memory addresses as values.
  110952             :        */
  110953             :        // typedef unsigned long  AddressType;
  110954             : 
  110955             : 
  110956             : 
  110957             :        // necessary, to have direct access to the p_freepointer and the private methods !
  110958             :       /*! \brief friend class declaration to support AST File I/O */
  110959             :           friend class AST_FILE_IO;
  110960             : 
  110961             :       /*! \brief friend class declaration to support AST File I/O */
  110962             :           friend class SgOmpLastprivateClauseStorageClass;
  110963             : 
  110964             :       /*! \brief friend class declaration to support AST File I/O */
  110965             :           friend class AstSpecificDataManagingClass;
  110966             : 
  110967             :       /*! \brief friend class declaration to support AST File I/O */
  110968             :           friend class AstSpecificDataManagingClassStorageClass;
  110969             :     public:
  110970             :       /*! \brief IR node constructor to support AST File I/O */
  110971             :           SgOmpLastprivateClause( const SgOmpLastprivateClauseStorageClass& source );
  110972             : 
  110973             :  // private: // JJW hack
  110974             :        /*
  110975             :           name AST Memory Allocation Support Variables
  110976             :           Memory allocations support variables 
  110977             : 
  110978             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  110979             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  110980             :           and support the AST File I/O Mechanism.
  110981             :        */
  110982             :       /* */
  110983             : 
  110984             :     public:
  110985             : 
  110986             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  110987             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  110988             :       // virtual SgNode* addRegExpAttribute();
  110989             :       /*! \brief Support for AST matching using regular expression.
  110990             : 
  110991             :           This support is incomplete and the subject of current research to define 
  110992             :           RegEx trees to support inexact matching.
  110993             :        */
  110994             :           SgOmpLastprivateClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  110995             : 
  110996             : // *** COMMON CODE SECTION ENDS HERE ***
  110997             : 
  110998             : 
  110999             : // End of memberFunctionString
  111000             : // Start of memberFunctionString
  111001             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  111002             : 
  111003             :      // the generated cast function
  111004             :      // friend ROSE_DLL_API SgOmpLastprivateClause* isSgOmpLastprivateClause ( SgNode* s );
  111005             : 
  111006             :           typedef SgOmpVariablesClause base_node_type;
  111007             : 
  111008             : 
  111009             : // End of memberFunctionString
  111010             : 
  111011             :      public: 
  111012             :          SgOmpClause::omp_lastprivate_modifier_enum get_modifier() const;
  111013             :          void set_modifier(SgOmpClause::omp_lastprivate_modifier_enum modifier);
  111014             : 
  111015             : 
  111016             :      public: 
  111017             :          virtual ~SgOmpLastprivateClause();
  111018             : 
  111019             : 
  111020             :      public: 
  111021             :          SgOmpLastprivateClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_lastprivate_modifier_enum modifier =e_omp_lastprivate_modifier_unspecified); 
  111022             :          SgOmpLastprivateClause(SgExprListExp* variables, SgOmpClause::omp_lastprivate_modifier_enum modifier); 
  111023             : 
  111024             :     protected:
  111025             : // Start of memberFunctionString
  111026             : SgOmpClause::omp_lastprivate_modifier_enum p_modifier;
  111027             :           
  111028             : // End of memberFunctionString
  111029             : 
  111030             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpLastprivateClause>;
  111031             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpLastprivateClause, SgOmpClause::omp_lastprivate_modifier_enum,&SgOmpLastprivateClause::p_modifier>;
  111032             : 
  111033             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111034             : 
  111035             : 
  111036             :    };
  111037             : #endif
  111038             : 
  111039             : // postdeclarations for SgOmpLastprivateClause
  111040             : 
  111041             : /* #line 111042 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111042             : 
  111043             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  111044             : 
  111045             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111046             : 
  111047             : 
  111048             : /* #line 111049 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111049             : 
  111050             : 
  111051             : 
  111052             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111053             : 
  111054             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  111055             : //      This code is automatically generated for each 
  111056             : //      terminal and non-terminal within the defined 
  111057             : //      grammar.  There is a simple way to change the 
  111058             : //      code to fix bugs etc.  See the ROSE README file
  111059             : //      for directions.
  111060             : 
  111061             : // tps: (02/22/2010): Adding DLL export requirements
  111062             : #include "rosedll.h"
  111063             : 
  111064             : // predeclarations for SgOmpReductionClause
  111065             : 
  111066             : /* #line 111067 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111067             : 
  111068             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  111069             : 
  111070             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111071             : 
  111072             : #if 1
  111073             : // Class Definition for SgOmpReductionClause
  111074             : class ROSE_DLL_API SgOmpReductionClause  : public SgOmpVariablesClause
  111075             :    {
  111076             :      public:
  111077             : 
  111078             : 
  111079             : /* #line 111080 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111080             : 
  111081             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  111082             : // Start of memberFunctionString
  111083             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  111084             : 
  111085             : // *** COMMON CODE SECTION BEGINS HERE ***
  111086             : 
  111087             :     public:
  111088             : 
  111089             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  111090             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  111091             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  111092             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  111093             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  111094             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  111095             : 
  111096             :       /*! \brief returns a string representing the class name */
  111097             :           virtual std::string class_name() const override;
  111098             : 
  111099             :       /*! \brief returns new style SageIII enum values */
  111100             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  111101             : 
  111102             :       /*! \brief static variant value */
  111103             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  111104             :        // static const VariantT static_variant = V_SgOmpReductionClause;
  111105             :           enum { static_variant = V_SgOmpReductionClause };
  111106             : 
  111107             :        /* the generated cast function */
  111108             :       /*! \brief Casts pointer from base class to derived class */
  111109             :           ROSE_DLL_API friend       SgOmpReductionClause* isSgOmpReductionClause(       SgNode * s );
  111110             : 
  111111             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  111112             :           ROSE_DLL_API friend const SgOmpReductionClause* isSgOmpReductionClause( const SgNode * s );
  111113             : 
  111114             :      // ******************************************
  111115             :      // * Memory Pool / New / Delete
  111116             :      // ******************************************
  111117             : 
  111118             :      public:
  111119             :           /// \private
  111120             :           static const unsigned pool_size; //
  111121             :           /// \private
  111122             :           static std::vector<unsigned char *> pools; //
  111123             :           /// \private
  111124             :           static SgOmpReductionClause * next_node; // 
  111125             : 
  111126             :           /// \private
  111127             :           static unsigned long initializeStorageClassArray(SgOmpReductionClauseStorageClass *); //
  111128             : 
  111129             :           /// \private
  111130             :           static void clearMemoryPool(); //
  111131             :           static void deleteMemoryPool(); //
  111132             : 
  111133             :           /// \private
  111134             :           static void extendMemoryPoolForFileIO(); //
  111135             : 
  111136             :           /// \private
  111137             :           static SgOmpReductionClause * getPointerFromGlobalIndex(unsigned long); //
  111138             :           /// \private
  111139             :           static SgOmpReductionClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  111140             : 
  111141             :           /// \private
  111142             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  111143             :           /// \private
  111144             :           static void resetValidFreepointers(); //
  111145             :           /// \private
  111146             :           static unsigned long getNumberOfLastValidPointer(); //
  111147             : 
  111148             : 
  111149             : #if defined(INLINE_FUNCTIONS)
  111150             :       /*! \brief returns pointer to newly allocated IR node */
  111151             :           inline void *operator new (size_t size);
  111152             : #else
  111153             :       /*! \brief returns pointer to newly allocated IR node */
  111154             :           void *operator new (size_t size);
  111155             : #endif
  111156             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  111157             :           void operator delete (void* pointer, size_t size);
  111158             : 
  111159             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  111160           0 :           void operator delete (void* pointer)
  111161             :              {
  111162             :             // This is the generated delete operator...
  111163           0 :                SgOmpReductionClause::operator delete (pointer,sizeof(SgOmpReductionClause));
  111164             :              }
  111165             : 
  111166             :       /*! \brief Returns the total number of IR nodes of this type */
  111167             :           static size_t numberOfNodes();
  111168             : 
  111169             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  111170             :           static size_t memoryUsage();
  111171             : 
  111172             :       // End of scope which started in IR nodes specific code 
  111173             :       /* */
  111174             : 
  111175             :       /* name Internal Functions
  111176             :           \brief Internal functions ... incomplete-documentation
  111177             : 
  111178             :           These functions have been made public as part of the design, but they are suggested for internal use 
  111179             :           or by particularly knowledgeable users for specialized tools or applications.
  111180             : 
  111181             :           \internal We could not make these private because they are required by user for special purposes. And 
  111182             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  111183             :          
  111184             :        */
  111185             : 
  111186             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  111187             :        // overridden in every class by *generated* implementation
  111188             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  111189             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  111190             :        // MS: 06/28/02 container of names of variables or container indices 
  111191             :        // used used in the traversal to access AST successor nodes
  111192             :        // overridden in every class by *generated* implementation
  111193             :       /*! \brief container of names of variables or container indices used used in the traversal
  111194             :           to access AST successor nodes overridden in every class by *generated* implementation */
  111195             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  111196             : 
  111197             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  111198             :        // than all the vector copies. The implementation for these functions is generated for each class.
  111199             :       /*! \brief return number of children in the traversal successor list */
  111200             :           virtual size_t get_numberOfTraversalSuccessors() override;
  111201             :       /*! \brief index-based access to traversal successors by index number */
  111202             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  111203             :       /*! \brief index-based access to traversal successors by child node */
  111204             :           virtual size_t get_childIndex(SgNode *child) override;
  111205             : 
  111206             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  111207             :        // MS: 08/16/2002 method for generating RTI information
  111208             :       /*! \brief return C++ Runtime-Time-Information */
  111209             :           virtual RTIReturnType roseRTI() override;
  111210             : #endif
  111211             :       /* */
  111212             : 
  111213             : 
  111214             : 
  111215             :       /* name Deprecated Functions
  111216             :           \brief Deprecated functions ... incomplete-documentation
  111217             : 
  111218             :           These functions have been deprecated from use.
  111219             :        */
  111220             :       /* */
  111221             : 
  111222             :       /*! returns a C style string (char*) representing the class name */
  111223             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  111224             : 
  111225             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  111226             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  111227             : #if 0
  111228             :       /*! returns old style Sage II enum values */
  111229             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  111230             :       /*! returns old style Sage II enum values */
  111231             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  111232             : #endif
  111233             :       /* */
  111234             : 
  111235             : 
  111236             : 
  111237             : 
  111238             :      public:
  111239             :       /* name Traversal Support Functions
  111240             :           \brief Traversal support functions ... incomplete-documentation
  111241             : 
  111242             :           These functions have been made public as part of the design, but they are suggested for internal use 
  111243             :           or by particularly knowledgable users for specialized tools or applications.
  111244             :        */
  111245             :       /* */
  111246             : 
  111247             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  111248             :        // (inferior to ROSE traversal mechanism, experimental).
  111249             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  111250             :        */
  111251             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  111252             : 
  111253             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  111254             :       /*! \brief support for the classic visitor pattern done in GoF */
  111255             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  111256             : 
  111257             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  111258             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  111259             :        */
  111260             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  111261             : 
  111262             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  111263             :        */
  111264             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  111265             : 
  111266             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  111267             :        // This traversal helps support internal tools that call static member functions.
  111268             :        // note: this function operates on the memory pools.
  111269             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  111270             :        */
  111271             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  111272             :       /* */
  111273             : 
  111274             : 
  111275             :      public:
  111276             :       /* name Memory Allocation Functions
  111277             :           \brief Memory allocations functions ... incomplete-documentation
  111278             : 
  111279             :           These functions have been made public as part of the design, but they are suggested for internal use 
  111280             :           or by particularly knowledgable users for specialized tools or applications.
  111281             :        */
  111282             :       /* */
  111283             : 
  111284             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  111285             : 
  111286             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  111287             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  111288             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  111289             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  111290             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  111291             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  111292             :           being used with the AST File I/O mechanism.
  111293             :        */
  111294             :           virtual bool isInMemoryPool() override;
  111295             : 
  111296             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  111297             : 
  111298             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  111299             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  111300             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  111301             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  111302             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  111303             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  111304             :           being used with the AST File I/O mechanism.
  111305             :        */
  111306             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  111307             : 
  111308             :       // DQ (4/30/2006): Modified to be a const function.
  111309             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  111310             : 
  111311             :           This functions is part of general support for many possible tools to operate 
  111312             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  111313             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  111314             :           less than the set of pointers used by the AST file I/O. This is part of
  111315             :           work implemented by Andreas, and support tools such as the AST graph generation.
  111316             : 
  111317             :           \warning This function can return unexpected data members and thus the 
  111318             :                    order and the number of elements is unpredicable and subject 
  111319             :                    to change.
  111320             : 
  111321             :           \returns STL vector of pairs of SgNode* and strings
  111322             :        */
  111323             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  111324             : 
  111325             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  111326             : 
  111327             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  111328             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  111329             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  111330             : 
  111331             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  111332             :                    and subject to change.
  111333             :        */
  111334             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  111335             : 
  111336             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  111337             : 
  111338             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  111339             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  111340             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  111341             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  111342             : 
  111343             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  111344             : 
  111345             :           \returns long
  111346             :        */
  111347             :           virtual long getChildIndex( SgNode* childNode ) const override;
  111348             : 
  111349             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  111350             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  111351             :       /* \brief Constructor for use by AST File I/O Mechanism
  111352             : 
  111353             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  111354             :           which obtained via fast binary file I/O from disk.
  111355             :        */
  111356             :        // SgOmpReductionClause( SgOmpReductionClauseStorageClass& source );
  111357             : 
  111358             : 
  111359             : 
  111360             : 
  111361             : 
  111362             :  // JH (10/24/2005): methods added to support the ast file IO
  111363             :     private:
  111364             : 
  111365             :       /* name AST Memory Allocation Support Functions
  111366             :           \brief Memory allocations support....
  111367             : 
  111368             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  111369             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  111370             :           and support the AST File I/O Mechanism.
  111371             :        */
  111372             :       /* */
  111373             : 
  111374             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  111375             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  111376             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  111377             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  111378             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  111379             :           a correspinding one in the AST_FILE_IO class!
  111380             :        */
  111381             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  111382             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  111383             :       /* \brief Typedef used for low level memory access.
  111384             :        */
  111385             :        // typedef unsigned char* TestType;
  111386             : 
  111387             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  111388             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  111389             :       /* \brief Typedef used to hold memory addresses as values.
  111390             :        */
  111391             :        // typedef unsigned long  AddressType;
  111392             : 
  111393             : 
  111394             : 
  111395             :        // necessary, to have direct access to the p_freepointer and the private methods !
  111396             :       /*! \brief friend class declaration to support AST File I/O */
  111397             :           friend class AST_FILE_IO;
  111398             : 
  111399             :       /*! \brief friend class declaration to support AST File I/O */
  111400             :           friend class SgOmpReductionClauseStorageClass;
  111401             : 
  111402             :       /*! \brief friend class declaration to support AST File I/O */
  111403             :           friend class AstSpecificDataManagingClass;
  111404             : 
  111405             :       /*! \brief friend class declaration to support AST File I/O */
  111406             :           friend class AstSpecificDataManagingClassStorageClass;
  111407             :     public:
  111408             :       /*! \brief IR node constructor to support AST File I/O */
  111409             :           SgOmpReductionClause( const SgOmpReductionClauseStorageClass& source );
  111410             : 
  111411             :  // private: // JJW hack
  111412             :        /*
  111413             :           name AST Memory Allocation Support Variables
  111414             :           Memory allocations support variables 
  111415             : 
  111416             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  111417             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  111418             :           and support the AST File I/O Mechanism.
  111419             :        */
  111420             :       /* */
  111421             : 
  111422             :     public:
  111423             : 
  111424             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  111425             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  111426             :       // virtual SgNode* addRegExpAttribute();
  111427             :       /*! \brief Support for AST matching using regular expression.
  111428             : 
  111429             :           This support is incomplete and the subject of current research to define 
  111430             :           RegEx trees to support inexact matching.
  111431             :        */
  111432             :           SgOmpReductionClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  111433             : 
  111434             : // *** COMMON CODE SECTION ENDS HERE ***
  111435             : 
  111436             : 
  111437             : // End of memberFunctionString
  111438             : // Start of memberFunctionString
  111439             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  111440             : 
  111441             :      // the generated cast function
  111442             :      // friend ROSE_DLL_API SgOmpReductionClause* isSgOmpReductionClause ( SgNode* s );
  111443             : 
  111444             :           typedef SgOmpVariablesClause base_node_type;
  111445             : 
  111446             : 
  111447             : // End of memberFunctionString
  111448             : 
  111449             :      public: 
  111450             :          SgOmpClause::omp_reduction_modifier_enum get_modifier() const;
  111451             :          void set_modifier(SgOmpClause::omp_reduction_modifier_enum modifier);
  111452             : 
  111453             :      public: 
  111454             :          SgOmpClause::omp_reduction_identifier_enum get_identifier() const;
  111455             :          void set_identifier(SgOmpClause::omp_reduction_identifier_enum identifier);
  111456             : 
  111457             :      public: 
  111458             :          SgExpression* get_user_defined_identifier() const;
  111459             :          void set_user_defined_identifier(SgExpression* user_defined_identifier);
  111460             : 
  111461             : 
  111462             :      public: 
  111463             :          virtual ~SgOmpReductionClause();
  111464             : 
  111465             : 
  111466             :      public: 
  111467             :          SgOmpReductionClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_reduction_modifier_enum modifier =e_omp_reduction_modifier_unknown, SgOmpClause::omp_reduction_identifier_enum identifier =e_omp_reduction_unknown, SgExpression* user_defined_identifier = NULL); 
  111468             :          SgOmpReductionClause(SgExprListExp* variables, SgOmpClause::omp_reduction_modifier_enum modifier, SgOmpClause::omp_reduction_identifier_enum identifier, SgExpression* user_defined_identifier); 
  111469             : 
  111470             :     protected:
  111471             : // Start of memberFunctionString
  111472             : SgOmpClause::omp_reduction_modifier_enum p_modifier;
  111473             :           
  111474             : // End of memberFunctionString
  111475             : // Start of memberFunctionString
  111476             : SgOmpClause::omp_reduction_identifier_enum p_identifier;
  111477             :           
  111478             : // End of memberFunctionString
  111479             : // Start of memberFunctionString
  111480             : SgExpression* p_user_defined_identifier;
  111481             :           
  111482             : // End of memberFunctionString
  111483             : 
  111484             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpReductionClause>;
  111485             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpReductionClause, SgOmpClause::omp_reduction_modifier_enum,&SgOmpReductionClause::p_modifier>;
  111486             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpReductionClause, SgOmpClause::omp_reduction_identifier_enum,&SgOmpReductionClause::p_identifier>;
  111487             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpReductionClause, SgExpression*,&SgOmpReductionClause::p_user_defined_identifier>;
  111488             : 
  111489             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111490             : 
  111491             : 
  111492             :    };
  111493             : #endif
  111494             : 
  111495             : // postdeclarations for SgOmpReductionClause
  111496             : 
  111497             : /* #line 111498 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111498             : 
  111499             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  111500             : 
  111501             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111502             : 
  111503             : 
  111504             : /* #line 111505 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111505             : 
  111506             : 
  111507             : 
  111508             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111509             : 
  111510             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  111511             : //      This code is automatically generated for each 
  111512             : //      terminal and non-terminal within the defined 
  111513             : //      grammar.  There is a simple way to change the 
  111514             : //      code to fix bugs etc.  See the ROSE README file
  111515             : //      for directions.
  111516             : 
  111517             : // tps: (02/22/2010): Adding DLL export requirements
  111518             : #include "rosedll.h"
  111519             : 
  111520             : // predeclarations for SgOmpInReductionClause
  111521             : 
  111522             : /* #line 111523 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111523             : 
  111524             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  111525             : 
  111526             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111527             : 
  111528             : #if 1
  111529             : // Class Definition for SgOmpInReductionClause
  111530             : class ROSE_DLL_API SgOmpInReductionClause  : public SgOmpVariablesClause
  111531             :    {
  111532             :      public:
  111533             : 
  111534             : 
  111535             : /* #line 111536 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111536             : 
  111537             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  111538             : // Start of memberFunctionString
  111539             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  111540             : 
  111541             : // *** COMMON CODE SECTION BEGINS HERE ***
  111542             : 
  111543             :     public:
  111544             : 
  111545             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  111546             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  111547             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  111548             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  111549             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  111550             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  111551             : 
  111552             :       /*! \brief returns a string representing the class name */
  111553             :           virtual std::string class_name() const override;
  111554             : 
  111555             :       /*! \brief returns new style SageIII enum values */
  111556             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  111557             : 
  111558             :       /*! \brief static variant value */
  111559             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  111560             :        // static const VariantT static_variant = V_SgOmpInReductionClause;
  111561             :           enum { static_variant = V_SgOmpInReductionClause };
  111562             : 
  111563             :        /* the generated cast function */
  111564             :       /*! \brief Casts pointer from base class to derived class */
  111565             :           ROSE_DLL_API friend       SgOmpInReductionClause* isSgOmpInReductionClause(       SgNode * s );
  111566             : 
  111567             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  111568             :           ROSE_DLL_API friend const SgOmpInReductionClause* isSgOmpInReductionClause( const SgNode * s );
  111569             : 
  111570             :      // ******************************************
  111571             :      // * Memory Pool / New / Delete
  111572             :      // ******************************************
  111573             : 
  111574             :      public:
  111575             :           /// \private
  111576             :           static const unsigned pool_size; //
  111577             :           /// \private
  111578             :           static std::vector<unsigned char *> pools; //
  111579             :           /// \private
  111580             :           static SgOmpInReductionClause * next_node; // 
  111581             : 
  111582             :           /// \private
  111583             :           static unsigned long initializeStorageClassArray(SgOmpInReductionClauseStorageClass *); //
  111584             : 
  111585             :           /// \private
  111586             :           static void clearMemoryPool(); //
  111587             :           static void deleteMemoryPool(); //
  111588             : 
  111589             :           /// \private
  111590             :           static void extendMemoryPoolForFileIO(); //
  111591             : 
  111592             :           /// \private
  111593             :           static SgOmpInReductionClause * getPointerFromGlobalIndex(unsigned long); //
  111594             :           /// \private
  111595             :           static SgOmpInReductionClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  111596             : 
  111597             :           /// \private
  111598             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  111599             :           /// \private
  111600             :           static void resetValidFreepointers(); //
  111601             :           /// \private
  111602             :           static unsigned long getNumberOfLastValidPointer(); //
  111603             : 
  111604             : 
  111605             : #if defined(INLINE_FUNCTIONS)
  111606             :       /*! \brief returns pointer to newly allocated IR node */
  111607             :           inline void *operator new (size_t size);
  111608             : #else
  111609             :       /*! \brief returns pointer to newly allocated IR node */
  111610             :           void *operator new (size_t size);
  111611             : #endif
  111612             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  111613             :           void operator delete (void* pointer, size_t size);
  111614             : 
  111615             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  111616           0 :           void operator delete (void* pointer)
  111617             :              {
  111618             :             // This is the generated delete operator...
  111619           0 :                SgOmpInReductionClause::operator delete (pointer,sizeof(SgOmpInReductionClause));
  111620             :              }
  111621             : 
  111622             :       /*! \brief Returns the total number of IR nodes of this type */
  111623             :           static size_t numberOfNodes();
  111624             : 
  111625             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  111626             :           static size_t memoryUsage();
  111627             : 
  111628             :       // End of scope which started in IR nodes specific code 
  111629             :       /* */
  111630             : 
  111631             :       /* name Internal Functions
  111632             :           \brief Internal functions ... incomplete-documentation
  111633             : 
  111634             :           These functions have been made public as part of the design, but they are suggested for internal use 
  111635             :           or by particularly knowledgeable users for specialized tools or applications.
  111636             : 
  111637             :           \internal We could not make these private because they are required by user for special purposes. And 
  111638             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  111639             :          
  111640             :        */
  111641             : 
  111642             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  111643             :        // overridden in every class by *generated* implementation
  111644             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  111645             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  111646             :        // MS: 06/28/02 container of names of variables or container indices 
  111647             :        // used used in the traversal to access AST successor nodes
  111648             :        // overridden in every class by *generated* implementation
  111649             :       /*! \brief container of names of variables or container indices used used in the traversal
  111650             :           to access AST successor nodes overridden in every class by *generated* implementation */
  111651             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  111652             : 
  111653             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  111654             :        // than all the vector copies. The implementation for these functions is generated for each class.
  111655             :       /*! \brief return number of children in the traversal successor list */
  111656             :           virtual size_t get_numberOfTraversalSuccessors() override;
  111657             :       /*! \brief index-based access to traversal successors by index number */
  111658             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  111659             :       /*! \brief index-based access to traversal successors by child node */
  111660             :           virtual size_t get_childIndex(SgNode *child) override;
  111661             : 
  111662             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  111663             :        // MS: 08/16/2002 method for generating RTI information
  111664             :       /*! \brief return C++ Runtime-Time-Information */
  111665             :           virtual RTIReturnType roseRTI() override;
  111666             : #endif
  111667             :       /* */
  111668             : 
  111669             : 
  111670             : 
  111671             :       /* name Deprecated Functions
  111672             :           \brief Deprecated functions ... incomplete-documentation
  111673             : 
  111674             :           These functions have been deprecated from use.
  111675             :        */
  111676             :       /* */
  111677             : 
  111678             :       /*! returns a C style string (char*) representing the class name */
  111679             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  111680             : 
  111681             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  111682             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  111683             : #if 0
  111684             :       /*! returns old style Sage II enum values */
  111685             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  111686             :       /*! returns old style Sage II enum values */
  111687             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  111688             : #endif
  111689             :       /* */
  111690             : 
  111691             : 
  111692             : 
  111693             : 
  111694             :      public:
  111695             :       /* name Traversal Support Functions
  111696             :           \brief Traversal support functions ... incomplete-documentation
  111697             : 
  111698             :           These functions have been made public as part of the design, but they are suggested for internal use 
  111699             :           or by particularly knowledgable users for specialized tools or applications.
  111700             :        */
  111701             :       /* */
  111702             : 
  111703             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  111704             :        // (inferior to ROSE traversal mechanism, experimental).
  111705             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  111706             :        */
  111707             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  111708             : 
  111709             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  111710             :       /*! \brief support for the classic visitor pattern done in GoF */
  111711             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  111712             : 
  111713             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  111714             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  111715             :        */
  111716             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  111717             : 
  111718             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  111719             :        */
  111720             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  111721             : 
  111722             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  111723             :        // This traversal helps support internal tools that call static member functions.
  111724             :        // note: this function operates on the memory pools.
  111725             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  111726             :        */
  111727             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  111728             :       /* */
  111729             : 
  111730             : 
  111731             :      public:
  111732             :       /* name Memory Allocation Functions
  111733             :           \brief Memory allocations functions ... incomplete-documentation
  111734             : 
  111735             :           These functions have been made public as part of the design, but they are suggested for internal use 
  111736             :           or by particularly knowledgable users for specialized tools or applications.
  111737             :        */
  111738             :       /* */
  111739             : 
  111740             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  111741             : 
  111742             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  111743             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  111744             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  111745             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  111746             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  111747             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  111748             :           being used with the AST File I/O mechanism.
  111749             :        */
  111750             :           virtual bool isInMemoryPool() override;
  111751             : 
  111752             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  111753             : 
  111754             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  111755             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  111756             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  111757             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  111758             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  111759             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  111760             :           being used with the AST File I/O mechanism.
  111761             :        */
  111762             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  111763             : 
  111764             :       // DQ (4/30/2006): Modified to be a const function.
  111765             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  111766             : 
  111767             :           This functions is part of general support for many possible tools to operate 
  111768             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  111769             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  111770             :           less than the set of pointers used by the AST file I/O. This is part of
  111771             :           work implemented by Andreas, and support tools such as the AST graph generation.
  111772             : 
  111773             :           \warning This function can return unexpected data members and thus the 
  111774             :                    order and the number of elements is unpredicable and subject 
  111775             :                    to change.
  111776             : 
  111777             :           \returns STL vector of pairs of SgNode* and strings
  111778             :        */
  111779             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  111780             : 
  111781             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  111782             : 
  111783             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  111784             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  111785             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  111786             : 
  111787             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  111788             :                    and subject to change.
  111789             :        */
  111790             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  111791             : 
  111792             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  111793             : 
  111794             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  111795             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  111796             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  111797             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  111798             : 
  111799             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  111800             : 
  111801             :           \returns long
  111802             :        */
  111803             :           virtual long getChildIndex( SgNode* childNode ) const override;
  111804             : 
  111805             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  111806             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  111807             :       /* \brief Constructor for use by AST File I/O Mechanism
  111808             : 
  111809             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  111810             :           which obtained via fast binary file I/O from disk.
  111811             :        */
  111812             :        // SgOmpInReductionClause( SgOmpInReductionClauseStorageClass& source );
  111813             : 
  111814             : 
  111815             : 
  111816             : 
  111817             : 
  111818             :  // JH (10/24/2005): methods added to support the ast file IO
  111819             :     private:
  111820             : 
  111821             :       /* name AST Memory Allocation Support Functions
  111822             :           \brief Memory allocations support....
  111823             : 
  111824             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  111825             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  111826             :           and support the AST File I/O Mechanism.
  111827             :        */
  111828             :       /* */
  111829             : 
  111830             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  111831             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  111832             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  111833             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  111834             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  111835             :           a correspinding one in the AST_FILE_IO class!
  111836             :        */
  111837             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  111838             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  111839             :       /* \brief Typedef used for low level memory access.
  111840             :        */
  111841             :        // typedef unsigned char* TestType;
  111842             : 
  111843             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  111844             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  111845             :       /* \brief Typedef used to hold memory addresses as values.
  111846             :        */
  111847             :        // typedef unsigned long  AddressType;
  111848             : 
  111849             : 
  111850             : 
  111851             :        // necessary, to have direct access to the p_freepointer and the private methods !
  111852             :       /*! \brief friend class declaration to support AST File I/O */
  111853             :           friend class AST_FILE_IO;
  111854             : 
  111855             :       /*! \brief friend class declaration to support AST File I/O */
  111856             :           friend class SgOmpInReductionClauseStorageClass;
  111857             : 
  111858             :       /*! \brief friend class declaration to support AST File I/O */
  111859             :           friend class AstSpecificDataManagingClass;
  111860             : 
  111861             :       /*! \brief friend class declaration to support AST File I/O */
  111862             :           friend class AstSpecificDataManagingClassStorageClass;
  111863             :     public:
  111864             :       /*! \brief IR node constructor to support AST File I/O */
  111865             :           SgOmpInReductionClause( const SgOmpInReductionClauseStorageClass& source );
  111866             : 
  111867             :  // private: // JJW hack
  111868             :        /*
  111869             :           name AST Memory Allocation Support Variables
  111870             :           Memory allocations support variables 
  111871             : 
  111872             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  111873             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  111874             :           and support the AST File I/O Mechanism.
  111875             :        */
  111876             :       /* */
  111877             : 
  111878             :     public:
  111879             : 
  111880             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  111881             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  111882             :       // virtual SgNode* addRegExpAttribute();
  111883             :       /*! \brief Support for AST matching using regular expression.
  111884             : 
  111885             :           This support is incomplete and the subject of current research to define 
  111886             :           RegEx trees to support inexact matching.
  111887             :        */
  111888             :           SgOmpInReductionClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  111889             : 
  111890             : // *** COMMON CODE SECTION ENDS HERE ***
  111891             : 
  111892             : 
  111893             : // End of memberFunctionString
  111894             : // Start of memberFunctionString
  111895             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  111896             : 
  111897             :      // the generated cast function
  111898             :      // friend ROSE_DLL_API SgOmpInReductionClause* isSgOmpInReductionClause ( SgNode* s );
  111899             : 
  111900             :           typedef SgOmpVariablesClause base_node_type;
  111901             : 
  111902             : 
  111903             : // End of memberFunctionString
  111904             : 
  111905             :      public: 
  111906             :          SgOmpClause::omp_in_reduction_identifier_enum get_identifier() const;
  111907             :          void set_identifier(SgOmpClause::omp_in_reduction_identifier_enum identifier);
  111908             : 
  111909             :      public: 
  111910             :          SgExpression* get_user_defined_identifier() const;
  111911             :          void set_user_defined_identifier(SgExpression* user_defined_identifier);
  111912             : 
  111913             : 
  111914             :      public: 
  111915             :          virtual ~SgOmpInReductionClause();
  111916             : 
  111917             : 
  111918             :      public: 
  111919             :          SgOmpInReductionClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_in_reduction_identifier_enum identifier =e_omp_in_reduction_identifier_unspecified, SgExpression* user_defined_identifier = NULL); 
  111920             :          SgOmpInReductionClause(SgExprListExp* variables, SgOmpClause::omp_in_reduction_identifier_enum identifier, SgExpression* user_defined_identifier); 
  111921             : 
  111922             :     protected:
  111923             : // Start of memberFunctionString
  111924             : SgOmpClause::omp_in_reduction_identifier_enum p_identifier;
  111925             :           
  111926             : // End of memberFunctionString
  111927             : // Start of memberFunctionString
  111928             : SgExpression* p_user_defined_identifier;
  111929             :           
  111930             : // End of memberFunctionString
  111931             : 
  111932             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpInReductionClause>;
  111933             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpInReductionClause, SgOmpClause::omp_in_reduction_identifier_enum,&SgOmpInReductionClause::p_identifier>;
  111934             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpInReductionClause, SgExpression*,&SgOmpInReductionClause::p_user_defined_identifier>;
  111935             : 
  111936             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111937             : 
  111938             : 
  111939             :    };
  111940             : #endif
  111941             : 
  111942             : // postdeclarations for SgOmpInReductionClause
  111943             : 
  111944             : /* #line 111945 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111945             : 
  111946             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  111947             : 
  111948             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111949             : 
  111950             : 
  111951             : /* #line 111952 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111952             : 
  111953             : 
  111954             : 
  111955             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111956             : 
  111957             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  111958             : //      This code is automatically generated for each 
  111959             : //      terminal and non-terminal within the defined 
  111960             : //      grammar.  There is a simple way to change the 
  111961             : //      code to fix bugs etc.  See the ROSE README file
  111962             : //      for directions.
  111963             : 
  111964             : // tps: (02/22/2010): Adding DLL export requirements
  111965             : #include "rosedll.h"
  111966             : 
  111967             : // predeclarations for SgOmpTaskReductionClause
  111968             : 
  111969             : /* #line 111970 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111970             : 
  111971             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  111972             : 
  111973             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  111974             : 
  111975             : #if 1
  111976             : // Class Definition for SgOmpTaskReductionClause
  111977             : class ROSE_DLL_API SgOmpTaskReductionClause  : public SgOmpVariablesClause
  111978             :    {
  111979             :      public:
  111980             : 
  111981             : 
  111982             : /* #line 111983 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  111983             : 
  111984             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  111985             : // Start of memberFunctionString
  111986             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  111987             : 
  111988             : // *** COMMON CODE SECTION BEGINS HERE ***
  111989             : 
  111990             :     public:
  111991             : 
  111992             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  111993             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  111994             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  111995             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  111996             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  111997             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  111998             : 
  111999             :       /*! \brief returns a string representing the class name */
  112000             :           virtual std::string class_name() const override;
  112001             : 
  112002             :       /*! \brief returns new style SageIII enum values */
  112003             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  112004             : 
  112005             :       /*! \brief static variant value */
  112006             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  112007             :        // static const VariantT static_variant = V_SgOmpTaskReductionClause;
  112008             :           enum { static_variant = V_SgOmpTaskReductionClause };
  112009             : 
  112010             :        /* the generated cast function */
  112011             :       /*! \brief Casts pointer from base class to derived class */
  112012             :           ROSE_DLL_API friend       SgOmpTaskReductionClause* isSgOmpTaskReductionClause(       SgNode * s );
  112013             : 
  112014             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  112015             :           ROSE_DLL_API friend const SgOmpTaskReductionClause* isSgOmpTaskReductionClause( const SgNode * s );
  112016             : 
  112017             :      // ******************************************
  112018             :      // * Memory Pool / New / Delete
  112019             :      // ******************************************
  112020             : 
  112021             :      public:
  112022             :           /// \private
  112023             :           static const unsigned pool_size; //
  112024             :           /// \private
  112025             :           static std::vector<unsigned char *> pools; //
  112026             :           /// \private
  112027             :           static SgOmpTaskReductionClause * next_node; // 
  112028             : 
  112029             :           /// \private
  112030             :           static unsigned long initializeStorageClassArray(SgOmpTaskReductionClauseStorageClass *); //
  112031             : 
  112032             :           /// \private
  112033             :           static void clearMemoryPool(); //
  112034             :           static void deleteMemoryPool(); //
  112035             : 
  112036             :           /// \private
  112037             :           static void extendMemoryPoolForFileIO(); //
  112038             : 
  112039             :           /// \private
  112040             :           static SgOmpTaskReductionClause * getPointerFromGlobalIndex(unsigned long); //
  112041             :           /// \private
  112042             :           static SgOmpTaskReductionClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  112043             : 
  112044             :           /// \private
  112045             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  112046             :           /// \private
  112047             :           static void resetValidFreepointers(); //
  112048             :           /// \private
  112049             :           static unsigned long getNumberOfLastValidPointer(); //
  112050             : 
  112051             : 
  112052             : #if defined(INLINE_FUNCTIONS)
  112053             :       /*! \brief returns pointer to newly allocated IR node */
  112054             :           inline void *operator new (size_t size);
  112055             : #else
  112056             :       /*! \brief returns pointer to newly allocated IR node */
  112057             :           void *operator new (size_t size);
  112058             : #endif
  112059             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  112060             :           void operator delete (void* pointer, size_t size);
  112061             : 
  112062             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  112063           0 :           void operator delete (void* pointer)
  112064             :              {
  112065             :             // This is the generated delete operator...
  112066           0 :                SgOmpTaskReductionClause::operator delete (pointer,sizeof(SgOmpTaskReductionClause));
  112067             :              }
  112068             : 
  112069             :       /*! \brief Returns the total number of IR nodes of this type */
  112070             :           static size_t numberOfNodes();
  112071             : 
  112072             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  112073             :           static size_t memoryUsage();
  112074             : 
  112075             :       // End of scope which started in IR nodes specific code 
  112076             :       /* */
  112077             : 
  112078             :       /* name Internal Functions
  112079             :           \brief Internal functions ... incomplete-documentation
  112080             : 
  112081             :           These functions have been made public as part of the design, but they are suggested for internal use 
  112082             :           or by particularly knowledgeable users for specialized tools or applications.
  112083             : 
  112084             :           \internal We could not make these private because they are required by user for special purposes. And 
  112085             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  112086             :          
  112087             :        */
  112088             : 
  112089             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  112090             :        // overridden in every class by *generated* implementation
  112091             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  112092             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  112093             :        // MS: 06/28/02 container of names of variables or container indices 
  112094             :        // used used in the traversal to access AST successor nodes
  112095             :        // overridden in every class by *generated* implementation
  112096             :       /*! \brief container of names of variables or container indices used used in the traversal
  112097             :           to access AST successor nodes overridden in every class by *generated* implementation */
  112098             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  112099             : 
  112100             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  112101             :        // than all the vector copies. The implementation for these functions is generated for each class.
  112102             :       /*! \brief return number of children in the traversal successor list */
  112103             :           virtual size_t get_numberOfTraversalSuccessors() override;
  112104             :       /*! \brief index-based access to traversal successors by index number */
  112105             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  112106             :       /*! \brief index-based access to traversal successors by child node */
  112107             :           virtual size_t get_childIndex(SgNode *child) override;
  112108             : 
  112109             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  112110             :        // MS: 08/16/2002 method for generating RTI information
  112111             :       /*! \brief return C++ Runtime-Time-Information */
  112112             :           virtual RTIReturnType roseRTI() override;
  112113             : #endif
  112114             :       /* */
  112115             : 
  112116             : 
  112117             : 
  112118             :       /* name Deprecated Functions
  112119             :           \brief Deprecated functions ... incomplete-documentation
  112120             : 
  112121             :           These functions have been deprecated from use.
  112122             :        */
  112123             :       /* */
  112124             : 
  112125             :       /*! returns a C style string (char*) representing the class name */
  112126             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  112127             : 
  112128             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  112129             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  112130             : #if 0
  112131             :       /*! returns old style Sage II enum values */
  112132             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  112133             :       /*! returns old style Sage II enum values */
  112134             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  112135             : #endif
  112136             :       /* */
  112137             : 
  112138             : 
  112139             : 
  112140             : 
  112141             :      public:
  112142             :       /* name Traversal Support Functions
  112143             :           \brief Traversal support functions ... incomplete-documentation
  112144             : 
  112145             :           These functions have been made public as part of the design, but they are suggested for internal use 
  112146             :           or by particularly knowledgable users for specialized tools or applications.
  112147             :        */
  112148             :       /* */
  112149             : 
  112150             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  112151             :        // (inferior to ROSE traversal mechanism, experimental).
  112152             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  112153             :        */
  112154             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  112155             : 
  112156             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  112157             :       /*! \brief support for the classic visitor pattern done in GoF */
  112158             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  112159             : 
  112160             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  112161             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  112162             :        */
  112163             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  112164             : 
  112165             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  112166             :        */
  112167             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  112168             : 
  112169             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  112170             :        // This traversal helps support internal tools that call static member functions.
  112171             :        // note: this function operates on the memory pools.
  112172             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  112173             :        */
  112174             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  112175             :       /* */
  112176             : 
  112177             : 
  112178             :      public:
  112179             :       /* name Memory Allocation Functions
  112180             :           \brief Memory allocations functions ... incomplete-documentation
  112181             : 
  112182             :           These functions have been made public as part of the design, but they are suggested for internal use 
  112183             :           or by particularly knowledgable users for specialized tools or applications.
  112184             :        */
  112185             :       /* */
  112186             : 
  112187             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  112188             : 
  112189             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  112190             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  112191             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  112192             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  112193             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  112194             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  112195             :           being used with the AST File I/O mechanism.
  112196             :        */
  112197             :           virtual bool isInMemoryPool() override;
  112198             : 
  112199             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  112200             : 
  112201             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  112202             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  112203             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  112204             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  112205             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  112206             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  112207             :           being used with the AST File I/O mechanism.
  112208             :        */
  112209             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  112210             : 
  112211             :       // DQ (4/30/2006): Modified to be a const function.
  112212             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  112213             : 
  112214             :           This functions is part of general support for many possible tools to operate 
  112215             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  112216             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  112217             :           less than the set of pointers used by the AST file I/O. This is part of
  112218             :           work implemented by Andreas, and support tools such as the AST graph generation.
  112219             : 
  112220             :           \warning This function can return unexpected data members and thus the 
  112221             :                    order and the number of elements is unpredicable and subject 
  112222             :                    to change.
  112223             : 
  112224             :           \returns STL vector of pairs of SgNode* and strings
  112225             :        */
  112226             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  112227             : 
  112228             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  112229             : 
  112230             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  112231             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  112232             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  112233             : 
  112234             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  112235             :                    and subject to change.
  112236             :        */
  112237             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  112238             : 
  112239             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  112240             : 
  112241             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  112242             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  112243             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  112244             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  112245             : 
  112246             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  112247             : 
  112248             :           \returns long
  112249             :        */
  112250             :           virtual long getChildIndex( SgNode* childNode ) const override;
  112251             : 
  112252             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  112253             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  112254             :       /* \brief Constructor for use by AST File I/O Mechanism
  112255             : 
  112256             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  112257             :           which obtained via fast binary file I/O from disk.
  112258             :        */
  112259             :        // SgOmpTaskReductionClause( SgOmpTaskReductionClauseStorageClass& source );
  112260             : 
  112261             : 
  112262             : 
  112263             : 
  112264             : 
  112265             :  // JH (10/24/2005): methods added to support the ast file IO
  112266             :     private:
  112267             : 
  112268             :       /* name AST Memory Allocation Support Functions
  112269             :           \brief Memory allocations support....
  112270             : 
  112271             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  112272             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  112273             :           and support the AST File I/O Mechanism.
  112274             :        */
  112275             :       /* */
  112276             : 
  112277             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  112278             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  112279             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  112280             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  112281             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  112282             :           a correspinding one in the AST_FILE_IO class!
  112283             :        */
  112284             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  112285             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  112286             :       /* \brief Typedef used for low level memory access.
  112287             :        */
  112288             :        // typedef unsigned char* TestType;
  112289             : 
  112290             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  112291             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  112292             :       /* \brief Typedef used to hold memory addresses as values.
  112293             :        */
  112294             :        // typedef unsigned long  AddressType;
  112295             : 
  112296             : 
  112297             : 
  112298             :        // necessary, to have direct access to the p_freepointer and the private methods !
  112299             :       /*! \brief friend class declaration to support AST File I/O */
  112300             :           friend class AST_FILE_IO;
  112301             : 
  112302             :       /*! \brief friend class declaration to support AST File I/O */
  112303             :           friend class SgOmpTaskReductionClauseStorageClass;
  112304             : 
  112305             :       /*! \brief friend class declaration to support AST File I/O */
  112306             :           friend class AstSpecificDataManagingClass;
  112307             : 
  112308             :       /*! \brief friend class declaration to support AST File I/O */
  112309             :           friend class AstSpecificDataManagingClassStorageClass;
  112310             :     public:
  112311             :       /*! \brief IR node constructor to support AST File I/O */
  112312             :           SgOmpTaskReductionClause( const SgOmpTaskReductionClauseStorageClass& source );
  112313             : 
  112314             :  // private: // JJW hack
  112315             :        /*
  112316             :           name AST Memory Allocation Support Variables
  112317             :           Memory allocations support variables 
  112318             : 
  112319             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  112320             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  112321             :           and support the AST File I/O Mechanism.
  112322             :        */
  112323             :       /* */
  112324             : 
  112325             :     public:
  112326             : 
  112327             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  112328             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  112329             :       // virtual SgNode* addRegExpAttribute();
  112330             :       /*! \brief Support for AST matching using regular expression.
  112331             : 
  112332             :           This support is incomplete and the subject of current research to define 
  112333             :           RegEx trees to support inexact matching.
  112334             :        */
  112335             :           SgOmpTaskReductionClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  112336             : 
  112337             : // *** COMMON CODE SECTION ENDS HERE ***
  112338             : 
  112339             : 
  112340             : // End of memberFunctionString
  112341             : // Start of memberFunctionString
  112342             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  112343             : 
  112344             :      // the generated cast function
  112345             :      // friend ROSE_DLL_API SgOmpTaskReductionClause* isSgOmpTaskReductionClause ( SgNode* s );
  112346             : 
  112347             :           typedef SgOmpVariablesClause base_node_type;
  112348             : 
  112349             : 
  112350             : // End of memberFunctionString
  112351             : 
  112352             :      public: 
  112353             :          SgOmpClause::omp_task_reduction_identifier_enum get_identifier() const;
  112354             :          void set_identifier(SgOmpClause::omp_task_reduction_identifier_enum identifier);
  112355             : 
  112356             :      public: 
  112357             :          SgExpression* get_user_defined_identifier() const;
  112358             :          void set_user_defined_identifier(SgExpression* user_defined_identifier);
  112359             : 
  112360             : 
  112361             :      public: 
  112362             :          virtual ~SgOmpTaskReductionClause();
  112363             : 
  112364             : 
  112365             :      public: 
  112366             :          SgOmpTaskReductionClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_task_reduction_identifier_enum identifier =e_omp_task_reduction_identifier_unspecified, SgExpression* user_defined_identifier = NULL); 
  112367             :          SgOmpTaskReductionClause(SgExprListExp* variables, SgOmpClause::omp_task_reduction_identifier_enum identifier, SgExpression* user_defined_identifier); 
  112368             : 
  112369             :     protected:
  112370             : // Start of memberFunctionString
  112371             : SgOmpClause::omp_task_reduction_identifier_enum p_identifier;
  112372             :           
  112373             : // End of memberFunctionString
  112374             : // Start of memberFunctionString
  112375             : SgExpression* p_user_defined_identifier;
  112376             :           
  112377             : // End of memberFunctionString
  112378             : 
  112379             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskReductionClause>;
  112380             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpTaskReductionClause, SgOmpClause::omp_task_reduction_identifier_enum,&SgOmpTaskReductionClause::p_identifier>;
  112381             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpTaskReductionClause, SgExpression*,&SgOmpTaskReductionClause::p_user_defined_identifier>;
  112382             : 
  112383             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112384             : 
  112385             : 
  112386             :    };
  112387             : #endif
  112388             : 
  112389             : // postdeclarations for SgOmpTaskReductionClause
  112390             : 
  112391             : /* #line 112392 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112392             : 
  112393             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  112394             : 
  112395             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112396             : 
  112397             : 
  112398             : /* #line 112399 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112399             : 
  112400             : 
  112401             : 
  112402             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112403             : 
  112404             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  112405             : //      This code is automatically generated for each 
  112406             : //      terminal and non-terminal within the defined 
  112407             : //      grammar.  There is a simple way to change the 
  112408             : //      code to fix bugs etc.  See the ROSE README file
  112409             : //      for directions.
  112410             : 
  112411             : // tps: (02/22/2010): Adding DLL export requirements
  112412             : #include "rosedll.h"
  112413             : 
  112414             : // predeclarations for SgOmpMapClause
  112415             : 
  112416             : /* #line 112417 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112417             : 
  112418             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  112419             : 
  112420             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112421             : 
  112422             : #if 1
  112423             : // Class Definition for SgOmpMapClause
  112424             : class ROSE_DLL_API SgOmpMapClause  : public SgOmpVariablesClause
  112425             :    {
  112426             :      public:
  112427             : 
  112428             : 
  112429             : /* #line 112430 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112430             : 
  112431             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  112432             : // Start of memberFunctionString
  112433             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  112434             : 
  112435             : // *** COMMON CODE SECTION BEGINS HERE ***
  112436             : 
  112437             :     public:
  112438             : 
  112439             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  112440             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  112441             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  112442             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  112443             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  112444             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  112445             : 
  112446             :       /*! \brief returns a string representing the class name */
  112447             :           virtual std::string class_name() const override;
  112448             : 
  112449             :       /*! \brief returns new style SageIII enum values */
  112450             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  112451             : 
  112452             :       /*! \brief static variant value */
  112453             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  112454             :        // static const VariantT static_variant = V_SgOmpMapClause;
  112455             :           enum { static_variant = V_SgOmpMapClause };
  112456             : 
  112457             :        /* the generated cast function */
  112458             :       /*! \brief Casts pointer from base class to derived class */
  112459             :           ROSE_DLL_API friend       SgOmpMapClause* isSgOmpMapClause(       SgNode * s );
  112460             : 
  112461             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  112462             :           ROSE_DLL_API friend const SgOmpMapClause* isSgOmpMapClause( const SgNode * s );
  112463             : 
  112464             :      // ******************************************
  112465             :      // * Memory Pool / New / Delete
  112466             :      // ******************************************
  112467             : 
  112468             :      public:
  112469             :           /// \private
  112470             :           static const unsigned pool_size; //
  112471             :           /// \private
  112472             :           static std::vector<unsigned char *> pools; //
  112473             :           /// \private
  112474             :           static SgOmpMapClause * next_node; // 
  112475             : 
  112476             :           /// \private
  112477             :           static unsigned long initializeStorageClassArray(SgOmpMapClauseStorageClass *); //
  112478             : 
  112479             :           /// \private
  112480             :           static void clearMemoryPool(); //
  112481             :           static void deleteMemoryPool(); //
  112482             : 
  112483             :           /// \private
  112484             :           static void extendMemoryPoolForFileIO(); //
  112485             : 
  112486             :           /// \private
  112487             :           static SgOmpMapClause * getPointerFromGlobalIndex(unsigned long); //
  112488             :           /// \private
  112489             :           static SgOmpMapClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  112490             : 
  112491             :           /// \private
  112492             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  112493             :           /// \private
  112494             :           static void resetValidFreepointers(); //
  112495             :           /// \private
  112496             :           static unsigned long getNumberOfLastValidPointer(); //
  112497             : 
  112498             : 
  112499             : #if defined(INLINE_FUNCTIONS)
  112500             :       /*! \brief returns pointer to newly allocated IR node */
  112501             :           inline void *operator new (size_t size);
  112502             : #else
  112503             :       /*! \brief returns pointer to newly allocated IR node */
  112504             :           void *operator new (size_t size);
  112505             : #endif
  112506             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  112507             :           void operator delete (void* pointer, size_t size);
  112508             : 
  112509             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  112510           0 :           void operator delete (void* pointer)
  112511             :              {
  112512             :             // This is the generated delete operator...
  112513           0 :                SgOmpMapClause::operator delete (pointer,sizeof(SgOmpMapClause));
  112514             :              }
  112515             : 
  112516             :       /*! \brief Returns the total number of IR nodes of this type */
  112517             :           static size_t numberOfNodes();
  112518             : 
  112519             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  112520             :           static size_t memoryUsage();
  112521             : 
  112522             :       // End of scope which started in IR nodes specific code 
  112523             :       /* */
  112524             : 
  112525             :       /* name Internal Functions
  112526             :           \brief Internal functions ... incomplete-documentation
  112527             : 
  112528             :           These functions have been made public as part of the design, but they are suggested for internal use 
  112529             :           or by particularly knowledgeable users for specialized tools or applications.
  112530             : 
  112531             :           \internal We could not make these private because they are required by user for special purposes. And 
  112532             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  112533             :          
  112534             :        */
  112535             : 
  112536             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  112537             :        // overridden in every class by *generated* implementation
  112538             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  112539             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  112540             :        // MS: 06/28/02 container of names of variables or container indices 
  112541             :        // used used in the traversal to access AST successor nodes
  112542             :        // overridden in every class by *generated* implementation
  112543             :       /*! \brief container of names of variables or container indices used used in the traversal
  112544             :           to access AST successor nodes overridden in every class by *generated* implementation */
  112545             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  112546             : 
  112547             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  112548             :        // than all the vector copies. The implementation for these functions is generated for each class.
  112549             :       /*! \brief return number of children in the traversal successor list */
  112550             :           virtual size_t get_numberOfTraversalSuccessors() override;
  112551             :       /*! \brief index-based access to traversal successors by index number */
  112552             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  112553             :       /*! \brief index-based access to traversal successors by child node */
  112554             :           virtual size_t get_childIndex(SgNode *child) override;
  112555             : 
  112556             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  112557             :        // MS: 08/16/2002 method for generating RTI information
  112558             :       /*! \brief return C++ Runtime-Time-Information */
  112559             :           virtual RTIReturnType roseRTI() override;
  112560             : #endif
  112561             :       /* */
  112562             : 
  112563             : 
  112564             : 
  112565             :       /* name Deprecated Functions
  112566             :           \brief Deprecated functions ... incomplete-documentation
  112567             : 
  112568             :           These functions have been deprecated from use.
  112569             :        */
  112570             :       /* */
  112571             : 
  112572             :       /*! returns a C style string (char*) representing the class name */
  112573             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  112574             : 
  112575             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  112576             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  112577             : #if 0
  112578             :       /*! returns old style Sage II enum values */
  112579             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  112580             :       /*! returns old style Sage II enum values */
  112581             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  112582             : #endif
  112583             :       /* */
  112584             : 
  112585             : 
  112586             : 
  112587             : 
  112588             :      public:
  112589             :       /* name Traversal Support Functions
  112590             :           \brief Traversal support functions ... incomplete-documentation
  112591             : 
  112592             :           These functions have been made public as part of the design, but they are suggested for internal use 
  112593             :           or by particularly knowledgable users for specialized tools or applications.
  112594             :        */
  112595             :       /* */
  112596             : 
  112597             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  112598             :        // (inferior to ROSE traversal mechanism, experimental).
  112599             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  112600             :        */
  112601             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  112602             : 
  112603             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  112604             :       /*! \brief support for the classic visitor pattern done in GoF */
  112605             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  112606             : 
  112607             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  112608             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  112609             :        */
  112610             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  112611             : 
  112612             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  112613             :        */
  112614             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  112615             : 
  112616             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  112617             :        // This traversal helps support internal tools that call static member functions.
  112618             :        // note: this function operates on the memory pools.
  112619             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  112620             :        */
  112621             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  112622             :       /* */
  112623             : 
  112624             : 
  112625             :      public:
  112626             :       /* name Memory Allocation Functions
  112627             :           \brief Memory allocations functions ... incomplete-documentation
  112628             : 
  112629             :           These functions have been made public as part of the design, but they are suggested for internal use 
  112630             :           or by particularly knowledgable users for specialized tools or applications.
  112631             :        */
  112632             :       /* */
  112633             : 
  112634             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  112635             : 
  112636             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  112637             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  112638             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  112639             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  112640             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  112641             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  112642             :           being used with the AST File I/O mechanism.
  112643             :        */
  112644             :           virtual bool isInMemoryPool() override;
  112645             : 
  112646             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  112647             : 
  112648             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  112649             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  112650             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  112651             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  112652             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  112653             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  112654             :           being used with the AST File I/O mechanism.
  112655             :        */
  112656             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  112657             : 
  112658             :       // DQ (4/30/2006): Modified to be a const function.
  112659             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  112660             : 
  112661             :           This functions is part of general support for many possible tools to operate 
  112662             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  112663             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  112664             :           less than the set of pointers used by the AST file I/O. This is part of
  112665             :           work implemented by Andreas, and support tools such as the AST graph generation.
  112666             : 
  112667             :           \warning This function can return unexpected data members and thus the 
  112668             :                    order and the number of elements is unpredicable and subject 
  112669             :                    to change.
  112670             : 
  112671             :           \returns STL vector of pairs of SgNode* and strings
  112672             :        */
  112673             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  112674             : 
  112675             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  112676             : 
  112677             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  112678             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  112679             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  112680             : 
  112681             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  112682             :                    and subject to change.
  112683             :        */
  112684             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  112685             : 
  112686             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  112687             : 
  112688             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  112689             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  112690             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  112691             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  112692             : 
  112693             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  112694             : 
  112695             :           \returns long
  112696             :        */
  112697             :           virtual long getChildIndex( SgNode* childNode ) const override;
  112698             : 
  112699             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  112700             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  112701             :       /* \brief Constructor for use by AST File I/O Mechanism
  112702             : 
  112703             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  112704             :           which obtained via fast binary file I/O from disk.
  112705             :        */
  112706             :        // SgOmpMapClause( SgOmpMapClauseStorageClass& source );
  112707             : 
  112708             : 
  112709             : 
  112710             : 
  112711             : 
  112712             :  // JH (10/24/2005): methods added to support the ast file IO
  112713             :     private:
  112714             : 
  112715             :       /* name AST Memory Allocation Support Functions
  112716             :           \brief Memory allocations support....
  112717             : 
  112718             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  112719             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  112720             :           and support the AST File I/O Mechanism.
  112721             :        */
  112722             :       /* */
  112723             : 
  112724             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  112725             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  112726             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  112727             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  112728             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  112729             :           a correspinding one in the AST_FILE_IO class!
  112730             :        */
  112731             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  112732             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  112733             :       /* \brief Typedef used for low level memory access.
  112734             :        */
  112735             :        // typedef unsigned char* TestType;
  112736             : 
  112737             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  112738             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  112739             :       /* \brief Typedef used to hold memory addresses as values.
  112740             :        */
  112741             :        // typedef unsigned long  AddressType;
  112742             : 
  112743             : 
  112744             : 
  112745             :        // necessary, to have direct access to the p_freepointer and the private methods !
  112746             :       /*! \brief friend class declaration to support AST File I/O */
  112747             :           friend class AST_FILE_IO;
  112748             : 
  112749             :       /*! \brief friend class declaration to support AST File I/O */
  112750             :           friend class SgOmpMapClauseStorageClass;
  112751             : 
  112752             :       /*! \brief friend class declaration to support AST File I/O */
  112753             :           friend class AstSpecificDataManagingClass;
  112754             : 
  112755             :       /*! \brief friend class declaration to support AST File I/O */
  112756             :           friend class AstSpecificDataManagingClassStorageClass;
  112757             :     public:
  112758             :       /*! \brief IR node constructor to support AST File I/O */
  112759             :           SgOmpMapClause( const SgOmpMapClauseStorageClass& source );
  112760             : 
  112761             :  // private: // JJW hack
  112762             :        /*
  112763             :           name AST Memory Allocation Support Variables
  112764             :           Memory allocations support variables 
  112765             : 
  112766             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  112767             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  112768             :           and support the AST File I/O Mechanism.
  112769             :        */
  112770             :       /* */
  112771             : 
  112772             :     public:
  112773             : 
  112774             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  112775             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  112776             :       // virtual SgNode* addRegExpAttribute();
  112777             :       /*! \brief Support for AST matching using regular expression.
  112778             : 
  112779             :           This support is incomplete and the subject of current research to define 
  112780             :           RegEx trees to support inexact matching.
  112781             :        */
  112782             :           SgOmpMapClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  112783             : 
  112784             : // *** COMMON CODE SECTION ENDS HERE ***
  112785             : 
  112786             : 
  112787             : // End of memberFunctionString
  112788             : // Start of memberFunctionString
  112789             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  112790             : 
  112791             :      // the generated cast function
  112792             :      // friend ROSE_DLL_API SgOmpMapClause* isSgOmpMapClause ( SgNode* s );
  112793             : 
  112794             :           typedef SgOmpVariablesClause base_node_type;
  112795             : 
  112796             : 
  112797             : // End of memberFunctionString
  112798             : 
  112799             :      public: 
  112800             :          SgOmpClause::omp_map_operator_enum get_operation() const;
  112801             :          void set_operation(SgOmpClause::omp_map_operator_enum operation);
  112802             : 
  112803             :      public: 
  112804             :          std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > get_array_dimensions() const;
  112805             :          void set_array_dimensions(std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > array_dimensions);
  112806             : 
  112807             :      public: 
  112808             :          std::map<SgSymbol*,  std::vector < std::pair <SgOmpClause::omp_map_dist_data_enum, SgExpression*> > > get_dist_data_policies() const;
  112809             :          void set_dist_data_policies(std::map<SgSymbol*,  std::vector < std::pair <SgOmpClause::omp_map_dist_data_enum, SgExpression*> > > dist_data_policies);
  112810             : 
  112811             : 
  112812             :      public: 
  112813             :          virtual ~SgOmpMapClause();
  112814             : 
  112815             : 
  112816             :      public: 
  112817             :          SgOmpMapClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_map_operator_enum operation =e_omp_map_unknown); 
  112818             :          SgOmpMapClause(SgExprListExp* variables, SgOmpClause::omp_map_operator_enum operation); 
  112819             : 
  112820             :     protected:
  112821             : // Start of memberFunctionString
  112822             : SgOmpClause::omp_map_operator_enum p_operation;
  112823             :           
  112824             : // End of memberFunctionString
  112825             : // Start of memberFunctionString
  112826             : std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > p_array_dimensions;
  112827             :           
  112828             : // End of memberFunctionString
  112829             : // Start of memberFunctionString
  112830             : std::map<SgSymbol*,  std::vector < std::pair <SgOmpClause::omp_map_dist_data_enum, SgExpression*> > > p_dist_data_policies;
  112831             :           
  112832             : // End of memberFunctionString
  112833             : 
  112834             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpMapClause>;
  112835             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpMapClause, SgOmpClause::omp_map_operator_enum,&SgOmpMapClause::p_operation>;
  112836             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpMapClause, std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > >,&SgOmpMapClause::p_array_dimensions>;
  112837             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpMapClause, std::map<SgSymbol*,  std::vector < std::pair <SgOmpClause::omp_map_dist_data_enum, SgExpression*> > >,&SgOmpMapClause::p_dist_data_policies>;
  112838             : 
  112839             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112840             : 
  112841             : 
  112842             :    };
  112843             : #endif
  112844             : 
  112845             : // postdeclarations for SgOmpMapClause
  112846             : 
  112847             : /* #line 112848 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112848             : 
  112849             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  112850             : 
  112851             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112852             : 
  112853             : 
  112854             : /* #line 112855 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112855             : 
  112856             : 
  112857             : 
  112858             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112859             : 
  112860             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  112861             : //      This code is automatically generated for each 
  112862             : //      terminal and non-terminal within the defined 
  112863             : //      grammar.  There is a simple way to change the 
  112864             : //      code to fix bugs etc.  See the ROSE README file
  112865             : //      for directions.
  112866             : 
  112867             : // tps: (02/22/2010): Adding DLL export requirements
  112868             : #include "rosedll.h"
  112869             : 
  112870             : // predeclarations for SgOmpAllocateClause
  112871             : 
  112872             : /* #line 112873 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112873             : 
  112874             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  112875             : 
  112876             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  112877             : 
  112878             : #if 1
  112879             : // Class Definition for SgOmpAllocateClause
  112880             : class ROSE_DLL_API SgOmpAllocateClause  : public SgOmpVariablesClause
  112881             :    {
  112882             :      public:
  112883             : 
  112884             : 
  112885             : /* #line 112886 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  112886             : 
  112887             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  112888             : // Start of memberFunctionString
  112889             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  112890             : 
  112891             : // *** COMMON CODE SECTION BEGINS HERE ***
  112892             : 
  112893             :     public:
  112894             : 
  112895             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  112896             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  112897             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  112898             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  112899             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  112900             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  112901             : 
  112902             :       /*! \brief returns a string representing the class name */
  112903             :           virtual std::string class_name() const override;
  112904             : 
  112905             :       /*! \brief returns new style SageIII enum values */
  112906             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  112907             : 
  112908             :       /*! \brief static variant value */
  112909             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  112910             :        // static const VariantT static_variant = V_SgOmpAllocateClause;
  112911             :           enum { static_variant = V_SgOmpAllocateClause };
  112912             : 
  112913             :        /* the generated cast function */
  112914             :       /*! \brief Casts pointer from base class to derived class */
  112915             :           ROSE_DLL_API friend       SgOmpAllocateClause* isSgOmpAllocateClause(       SgNode * s );
  112916             : 
  112917             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  112918             :           ROSE_DLL_API friend const SgOmpAllocateClause* isSgOmpAllocateClause( const SgNode * s );
  112919             : 
  112920             :      // ******************************************
  112921             :      // * Memory Pool / New / Delete
  112922             :      // ******************************************
  112923             : 
  112924             :      public:
  112925             :           /// \private
  112926             :           static const unsigned pool_size; //
  112927             :           /// \private
  112928             :           static std::vector<unsigned char *> pools; //
  112929             :           /// \private
  112930             :           static SgOmpAllocateClause * next_node; // 
  112931             : 
  112932             :           /// \private
  112933             :           static unsigned long initializeStorageClassArray(SgOmpAllocateClauseStorageClass *); //
  112934             : 
  112935             :           /// \private
  112936             :           static void clearMemoryPool(); //
  112937             :           static void deleteMemoryPool(); //
  112938             : 
  112939             :           /// \private
  112940             :           static void extendMemoryPoolForFileIO(); //
  112941             : 
  112942             :           /// \private
  112943             :           static SgOmpAllocateClause * getPointerFromGlobalIndex(unsigned long); //
  112944             :           /// \private
  112945             :           static SgOmpAllocateClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  112946             : 
  112947             :           /// \private
  112948             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  112949             :           /// \private
  112950             :           static void resetValidFreepointers(); //
  112951             :           /// \private
  112952             :           static unsigned long getNumberOfLastValidPointer(); //
  112953             : 
  112954             : 
  112955             : #if defined(INLINE_FUNCTIONS)
  112956             :       /*! \brief returns pointer to newly allocated IR node */
  112957             :           inline void *operator new (size_t size);
  112958             : #else
  112959             :       /*! \brief returns pointer to newly allocated IR node */
  112960             :           void *operator new (size_t size);
  112961             : #endif
  112962             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  112963             :           void operator delete (void* pointer, size_t size);
  112964             : 
  112965             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  112966           0 :           void operator delete (void* pointer)
  112967             :              {
  112968             :             // This is the generated delete operator...
  112969           0 :                SgOmpAllocateClause::operator delete (pointer,sizeof(SgOmpAllocateClause));
  112970             :              }
  112971             : 
  112972             :       /*! \brief Returns the total number of IR nodes of this type */
  112973             :           static size_t numberOfNodes();
  112974             : 
  112975             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  112976             :           static size_t memoryUsage();
  112977             : 
  112978             :       // End of scope which started in IR nodes specific code 
  112979             :       /* */
  112980             : 
  112981             :       /* name Internal Functions
  112982             :           \brief Internal functions ... incomplete-documentation
  112983             : 
  112984             :           These functions have been made public as part of the design, but they are suggested for internal use 
  112985             :           or by particularly knowledgeable users for specialized tools or applications.
  112986             : 
  112987             :           \internal We could not make these private because they are required by user for special purposes. And 
  112988             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  112989             :          
  112990             :        */
  112991             : 
  112992             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  112993             :        // overridden in every class by *generated* implementation
  112994             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  112995             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  112996             :        // MS: 06/28/02 container of names of variables or container indices 
  112997             :        // used used in the traversal to access AST successor nodes
  112998             :        // overridden in every class by *generated* implementation
  112999             :       /*! \brief container of names of variables or container indices used used in the traversal
  113000             :           to access AST successor nodes overridden in every class by *generated* implementation */
  113001             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  113002             : 
  113003             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  113004             :        // than all the vector copies. The implementation for these functions is generated for each class.
  113005             :       /*! \brief return number of children in the traversal successor list */
  113006             :           virtual size_t get_numberOfTraversalSuccessors() override;
  113007             :       /*! \brief index-based access to traversal successors by index number */
  113008             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  113009             :       /*! \brief index-based access to traversal successors by child node */
  113010             :           virtual size_t get_childIndex(SgNode *child) override;
  113011             : 
  113012             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  113013             :        // MS: 08/16/2002 method for generating RTI information
  113014             :       /*! \brief return C++ Runtime-Time-Information */
  113015             :           virtual RTIReturnType roseRTI() override;
  113016             : #endif
  113017             :       /* */
  113018             : 
  113019             : 
  113020             : 
  113021             :       /* name Deprecated Functions
  113022             :           \brief Deprecated functions ... incomplete-documentation
  113023             : 
  113024             :           These functions have been deprecated from use.
  113025             :        */
  113026             :       /* */
  113027             : 
  113028             :       /*! returns a C style string (char*) representing the class name */
  113029             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  113030             : 
  113031             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  113032             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  113033             : #if 0
  113034             :       /*! returns old style Sage II enum values */
  113035             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  113036             :       /*! returns old style Sage II enum values */
  113037             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  113038             : #endif
  113039             :       /* */
  113040             : 
  113041             : 
  113042             : 
  113043             : 
  113044             :      public:
  113045             :       /* name Traversal Support Functions
  113046             :           \brief Traversal support functions ... incomplete-documentation
  113047             : 
  113048             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113049             :           or by particularly knowledgable users for specialized tools or applications.
  113050             :        */
  113051             :       /* */
  113052             : 
  113053             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  113054             :        // (inferior to ROSE traversal mechanism, experimental).
  113055             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  113056             :        */
  113057             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  113058             : 
  113059             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  113060             :       /*! \brief support for the classic visitor pattern done in GoF */
  113061             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  113062             : 
  113063             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  113064             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  113065             :        */
  113066             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  113067             : 
  113068             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  113069             :        */
  113070             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  113071             : 
  113072             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  113073             :        // This traversal helps support internal tools that call static member functions.
  113074             :        // note: this function operates on the memory pools.
  113075             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  113076             :        */
  113077             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  113078             :       /* */
  113079             : 
  113080             : 
  113081             :      public:
  113082             :       /* name Memory Allocation Functions
  113083             :           \brief Memory allocations functions ... incomplete-documentation
  113084             : 
  113085             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113086             :           or by particularly knowledgable users for specialized tools or applications.
  113087             :        */
  113088             :       /* */
  113089             : 
  113090             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  113091             : 
  113092             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  113093             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  113094             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  113095             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  113096             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  113097             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  113098             :           being used with the AST File I/O mechanism.
  113099             :        */
  113100             :           virtual bool isInMemoryPool() override;
  113101             : 
  113102             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  113103             : 
  113104             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  113105             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  113106             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  113107             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  113108             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  113109             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  113110             :           being used with the AST File I/O mechanism.
  113111             :        */
  113112             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  113113             : 
  113114             :       // DQ (4/30/2006): Modified to be a const function.
  113115             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  113116             : 
  113117             :           This functions is part of general support for many possible tools to operate 
  113118             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  113119             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  113120             :           less than the set of pointers used by the AST file I/O. This is part of
  113121             :           work implemented by Andreas, and support tools such as the AST graph generation.
  113122             : 
  113123             :           \warning This function can return unexpected data members and thus the 
  113124             :                    order and the number of elements is unpredicable and subject 
  113125             :                    to change.
  113126             : 
  113127             :           \returns STL vector of pairs of SgNode* and strings
  113128             :        */
  113129             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  113130             : 
  113131             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  113132             : 
  113133             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  113134             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  113135             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  113136             : 
  113137             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  113138             :                    and subject to change.
  113139             :        */
  113140             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  113141             : 
  113142             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  113143             : 
  113144             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  113145             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  113146             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  113147             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  113148             : 
  113149             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  113150             : 
  113151             :           \returns long
  113152             :        */
  113153             :           virtual long getChildIndex( SgNode* childNode ) const override;
  113154             : 
  113155             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  113156             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  113157             :       /* \brief Constructor for use by AST File I/O Mechanism
  113158             : 
  113159             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  113160             :           which obtained via fast binary file I/O from disk.
  113161             :        */
  113162             :        // SgOmpAllocateClause( SgOmpAllocateClauseStorageClass& source );
  113163             : 
  113164             : 
  113165             : 
  113166             : 
  113167             : 
  113168             :  // JH (10/24/2005): methods added to support the ast file IO
  113169             :     private:
  113170             : 
  113171             :       /* name AST Memory Allocation Support Functions
  113172             :           \brief Memory allocations support....
  113173             : 
  113174             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  113175             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  113176             :           and support the AST File I/O Mechanism.
  113177             :        */
  113178             :       /* */
  113179             : 
  113180             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  113181             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  113182             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  113183             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  113184             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  113185             :           a correspinding one in the AST_FILE_IO class!
  113186             :        */
  113187             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  113188             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  113189             :       /* \brief Typedef used for low level memory access.
  113190             :        */
  113191             :        // typedef unsigned char* TestType;
  113192             : 
  113193             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  113194             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  113195             :       /* \brief Typedef used to hold memory addresses as values.
  113196             :        */
  113197             :        // typedef unsigned long  AddressType;
  113198             : 
  113199             : 
  113200             : 
  113201             :        // necessary, to have direct access to the p_freepointer and the private methods !
  113202             :       /*! \brief friend class declaration to support AST File I/O */
  113203             :           friend class AST_FILE_IO;
  113204             : 
  113205             :       /*! \brief friend class declaration to support AST File I/O */
  113206             :           friend class SgOmpAllocateClauseStorageClass;
  113207             : 
  113208             :       /*! \brief friend class declaration to support AST File I/O */
  113209             :           friend class AstSpecificDataManagingClass;
  113210             : 
  113211             :       /*! \brief friend class declaration to support AST File I/O */
  113212             :           friend class AstSpecificDataManagingClassStorageClass;
  113213             :     public:
  113214             :       /*! \brief IR node constructor to support AST File I/O */
  113215             :           SgOmpAllocateClause( const SgOmpAllocateClauseStorageClass& source );
  113216             : 
  113217             :  // private: // JJW hack
  113218             :        /*
  113219             :           name AST Memory Allocation Support Variables
  113220             :           Memory allocations support variables 
  113221             : 
  113222             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  113223             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  113224             :           and support the AST File I/O Mechanism.
  113225             :        */
  113226             :       /* */
  113227             : 
  113228             :     public:
  113229             : 
  113230             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  113231             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  113232             :       // virtual SgNode* addRegExpAttribute();
  113233             :       /*! \brief Support for AST matching using regular expression.
  113234             : 
  113235             :           This support is incomplete and the subject of current research to define 
  113236             :           RegEx trees to support inexact matching.
  113237             :        */
  113238             :           SgOmpAllocateClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  113239             : 
  113240             : // *** COMMON CODE SECTION ENDS HERE ***
  113241             : 
  113242             : 
  113243             : // End of memberFunctionString
  113244             : // Start of memberFunctionString
  113245             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  113246             : 
  113247             :      // the generated cast function
  113248             :      // friend ROSE_DLL_API SgOmpAllocateClause* isSgOmpAllocateClause ( SgNode* s );
  113249             : 
  113250             :           typedef SgOmpVariablesClause base_node_type;
  113251             : 
  113252             : 
  113253             : // End of memberFunctionString
  113254             : 
  113255             :      public: 
  113256             :          SgOmpClause::omp_allocate_modifier_enum get_modifier() const;
  113257             :          void set_modifier(SgOmpClause::omp_allocate_modifier_enum modifier);
  113258             : 
  113259             :      public: 
  113260             :          SgExpression* get_user_defined_modifier() const;
  113261             :          void set_user_defined_modifier(SgExpression* user_defined_modifier);
  113262             : 
  113263             : 
  113264             :      public: 
  113265             :          virtual ~SgOmpAllocateClause();
  113266             : 
  113267             : 
  113268             :      public: 
  113269             :          SgOmpAllocateClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_allocate_modifier_enum modifier =e_omp_allocate_modifier_unknown, SgExpression* user_defined_modifier = NULL); 
  113270             :          SgOmpAllocateClause(SgExprListExp* variables, SgOmpClause::omp_allocate_modifier_enum modifier, SgExpression* user_defined_modifier); 
  113271             : 
  113272             :     protected:
  113273             : // Start of memberFunctionString
  113274             : SgOmpClause::omp_allocate_modifier_enum p_modifier;
  113275             :           
  113276             : // End of memberFunctionString
  113277             : // Start of memberFunctionString
  113278             : SgExpression* p_user_defined_modifier;
  113279             :           
  113280             : // End of memberFunctionString
  113281             : 
  113282             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAllocateClause>;
  113283             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAllocateClause, SgOmpClause::omp_allocate_modifier_enum,&SgOmpAllocateClause::p_modifier>;
  113284             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAllocateClause, SgExpression*,&SgOmpAllocateClause::p_user_defined_modifier>;
  113285             : 
  113286             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113287             : 
  113288             : 
  113289             :    };
  113290             : #endif
  113291             : 
  113292             : // postdeclarations for SgOmpAllocateClause
  113293             : 
  113294             : /* #line 113295 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113295             : 
  113296             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  113297             : 
  113298             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113299             : 
  113300             : 
  113301             : /* #line 113302 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113302             : 
  113303             : 
  113304             : 
  113305             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113306             : 
  113307             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  113308             : //      This code is automatically generated for each 
  113309             : //      terminal and non-terminal within the defined 
  113310             : //      grammar.  There is a simple way to change the 
  113311             : //      code to fix bugs etc.  See the ROSE README file
  113312             : //      for directions.
  113313             : 
  113314             : // tps: (02/22/2010): Adding DLL export requirements
  113315             : #include "rosedll.h"
  113316             : 
  113317             : // predeclarations for SgOmpUniformClause
  113318             : 
  113319             : /* #line 113320 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113320             : 
  113321             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  113322             : 
  113323             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113324             : 
  113325             : #if 1
  113326             : // Class Definition for SgOmpUniformClause
  113327             : class ROSE_DLL_API SgOmpUniformClause  : public SgOmpVariablesClause
  113328             :    {
  113329             :      public:
  113330             : 
  113331             : 
  113332             : /* #line 113333 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113333             : 
  113334             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  113335             : // Start of memberFunctionString
  113336             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  113337             : 
  113338             : // *** COMMON CODE SECTION BEGINS HERE ***
  113339             : 
  113340             :     public:
  113341             : 
  113342             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  113343             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  113344             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  113345             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  113346             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  113347             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  113348             : 
  113349             :       /*! \brief returns a string representing the class name */
  113350             :           virtual std::string class_name() const override;
  113351             : 
  113352             :       /*! \brief returns new style SageIII enum values */
  113353             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  113354             : 
  113355             :       /*! \brief static variant value */
  113356             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  113357             :        // static const VariantT static_variant = V_SgOmpUniformClause;
  113358             :           enum { static_variant = V_SgOmpUniformClause };
  113359             : 
  113360             :        /* the generated cast function */
  113361             :       /*! \brief Casts pointer from base class to derived class */
  113362             :           ROSE_DLL_API friend       SgOmpUniformClause* isSgOmpUniformClause(       SgNode * s );
  113363             : 
  113364             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  113365             :           ROSE_DLL_API friend const SgOmpUniformClause* isSgOmpUniformClause( const SgNode * s );
  113366             : 
  113367             :      // ******************************************
  113368             :      // * Memory Pool / New / Delete
  113369             :      // ******************************************
  113370             : 
  113371             :      public:
  113372             :           /// \private
  113373             :           static const unsigned pool_size; //
  113374             :           /// \private
  113375             :           static std::vector<unsigned char *> pools; //
  113376             :           /// \private
  113377             :           static SgOmpUniformClause * next_node; // 
  113378             : 
  113379             :           /// \private
  113380             :           static unsigned long initializeStorageClassArray(SgOmpUniformClauseStorageClass *); //
  113381             : 
  113382             :           /// \private
  113383             :           static void clearMemoryPool(); //
  113384             :           static void deleteMemoryPool(); //
  113385             : 
  113386             :           /// \private
  113387             :           static void extendMemoryPoolForFileIO(); //
  113388             : 
  113389             :           /// \private
  113390             :           static SgOmpUniformClause * getPointerFromGlobalIndex(unsigned long); //
  113391             :           /// \private
  113392             :           static SgOmpUniformClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  113393             : 
  113394             :           /// \private
  113395             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  113396             :           /// \private
  113397             :           static void resetValidFreepointers(); //
  113398             :           /// \private
  113399             :           static unsigned long getNumberOfLastValidPointer(); //
  113400             : 
  113401             : 
  113402             : #if defined(INLINE_FUNCTIONS)
  113403             :       /*! \brief returns pointer to newly allocated IR node */
  113404             :           inline void *operator new (size_t size);
  113405             : #else
  113406             :       /*! \brief returns pointer to newly allocated IR node */
  113407             :           void *operator new (size_t size);
  113408             : #endif
  113409             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  113410             :           void operator delete (void* pointer, size_t size);
  113411             : 
  113412             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  113413           0 :           void operator delete (void* pointer)
  113414             :              {
  113415             :             // This is the generated delete operator...
  113416           0 :                SgOmpUniformClause::operator delete (pointer,sizeof(SgOmpUniformClause));
  113417             :              }
  113418             : 
  113419             :       /*! \brief Returns the total number of IR nodes of this type */
  113420             :           static size_t numberOfNodes();
  113421             : 
  113422             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  113423             :           static size_t memoryUsage();
  113424             : 
  113425             :       // End of scope which started in IR nodes specific code 
  113426             :       /* */
  113427             : 
  113428             :       /* name Internal Functions
  113429             :           \brief Internal functions ... incomplete-documentation
  113430             : 
  113431             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113432             :           or by particularly knowledgeable users for specialized tools or applications.
  113433             : 
  113434             :           \internal We could not make these private because they are required by user for special purposes. And 
  113435             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  113436             :          
  113437             :        */
  113438             : 
  113439             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  113440             :        // overridden in every class by *generated* implementation
  113441             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  113442             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  113443             :        // MS: 06/28/02 container of names of variables or container indices 
  113444             :        // used used in the traversal to access AST successor nodes
  113445             :        // overridden in every class by *generated* implementation
  113446             :       /*! \brief container of names of variables or container indices used used in the traversal
  113447             :           to access AST successor nodes overridden in every class by *generated* implementation */
  113448             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  113449             : 
  113450             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  113451             :        // than all the vector copies. The implementation for these functions is generated for each class.
  113452             :       /*! \brief return number of children in the traversal successor list */
  113453             :           virtual size_t get_numberOfTraversalSuccessors() override;
  113454             :       /*! \brief index-based access to traversal successors by index number */
  113455             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  113456             :       /*! \brief index-based access to traversal successors by child node */
  113457             :           virtual size_t get_childIndex(SgNode *child) override;
  113458             : 
  113459             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  113460             :        // MS: 08/16/2002 method for generating RTI information
  113461             :       /*! \brief return C++ Runtime-Time-Information */
  113462             :           virtual RTIReturnType roseRTI() override;
  113463             : #endif
  113464             :       /* */
  113465             : 
  113466             : 
  113467             : 
  113468             :       /* name Deprecated Functions
  113469             :           \brief Deprecated functions ... incomplete-documentation
  113470             : 
  113471             :           These functions have been deprecated from use.
  113472             :        */
  113473             :       /* */
  113474             : 
  113475             :       /*! returns a C style string (char*) representing the class name */
  113476             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  113477             : 
  113478             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  113479             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  113480             : #if 0
  113481             :       /*! returns old style Sage II enum values */
  113482             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  113483             :       /*! returns old style Sage II enum values */
  113484             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  113485             : #endif
  113486             :       /* */
  113487             : 
  113488             : 
  113489             : 
  113490             : 
  113491             :      public:
  113492             :       /* name Traversal Support Functions
  113493             :           \brief Traversal support functions ... incomplete-documentation
  113494             : 
  113495             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113496             :           or by particularly knowledgable users for specialized tools or applications.
  113497             :        */
  113498             :       /* */
  113499             : 
  113500             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  113501             :        // (inferior to ROSE traversal mechanism, experimental).
  113502             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  113503             :        */
  113504             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  113505             : 
  113506             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  113507             :       /*! \brief support for the classic visitor pattern done in GoF */
  113508             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  113509             : 
  113510             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  113511             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  113512             :        */
  113513             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  113514             : 
  113515             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  113516             :        */
  113517             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  113518             : 
  113519             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  113520             :        // This traversal helps support internal tools that call static member functions.
  113521             :        // note: this function operates on the memory pools.
  113522             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  113523             :        */
  113524             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  113525             :       /* */
  113526             : 
  113527             : 
  113528             :      public:
  113529             :       /* name Memory Allocation Functions
  113530             :           \brief Memory allocations functions ... incomplete-documentation
  113531             : 
  113532             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113533             :           or by particularly knowledgable users for specialized tools or applications.
  113534             :        */
  113535             :       /* */
  113536             : 
  113537             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  113538             : 
  113539             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  113540             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  113541             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  113542             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  113543             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  113544             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  113545             :           being used with the AST File I/O mechanism.
  113546             :        */
  113547             :           virtual bool isInMemoryPool() override;
  113548             : 
  113549             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  113550             : 
  113551             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  113552             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  113553             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  113554             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  113555             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  113556             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  113557             :           being used with the AST File I/O mechanism.
  113558             :        */
  113559             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  113560             : 
  113561             :       // DQ (4/30/2006): Modified to be a const function.
  113562             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  113563             : 
  113564             :           This functions is part of general support for many possible tools to operate 
  113565             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  113566             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  113567             :           less than the set of pointers used by the AST file I/O. This is part of
  113568             :           work implemented by Andreas, and support tools such as the AST graph generation.
  113569             : 
  113570             :           \warning This function can return unexpected data members and thus the 
  113571             :                    order and the number of elements is unpredicable and subject 
  113572             :                    to change.
  113573             : 
  113574             :           \returns STL vector of pairs of SgNode* and strings
  113575             :        */
  113576             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  113577             : 
  113578             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  113579             : 
  113580             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  113581             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  113582             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  113583             : 
  113584             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  113585             :                    and subject to change.
  113586             :        */
  113587             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  113588             : 
  113589             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  113590             : 
  113591             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  113592             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  113593             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  113594             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  113595             : 
  113596             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  113597             : 
  113598             :           \returns long
  113599             :        */
  113600             :           virtual long getChildIndex( SgNode* childNode ) const override;
  113601             : 
  113602             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  113603             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  113604             :       /* \brief Constructor for use by AST File I/O Mechanism
  113605             : 
  113606             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  113607             :           which obtained via fast binary file I/O from disk.
  113608             :        */
  113609             :        // SgOmpUniformClause( SgOmpUniformClauseStorageClass& source );
  113610             : 
  113611             : 
  113612             : 
  113613             : 
  113614             : 
  113615             :  // JH (10/24/2005): methods added to support the ast file IO
  113616             :     private:
  113617             : 
  113618             :       /* name AST Memory Allocation Support Functions
  113619             :           \brief Memory allocations support....
  113620             : 
  113621             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  113622             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  113623             :           and support the AST File I/O Mechanism.
  113624             :        */
  113625             :       /* */
  113626             : 
  113627             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  113628             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  113629             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  113630             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  113631             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  113632             :           a correspinding one in the AST_FILE_IO class!
  113633             :        */
  113634             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  113635             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  113636             :       /* \brief Typedef used for low level memory access.
  113637             :        */
  113638             :        // typedef unsigned char* TestType;
  113639             : 
  113640             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  113641             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  113642             :       /* \brief Typedef used to hold memory addresses as values.
  113643             :        */
  113644             :        // typedef unsigned long  AddressType;
  113645             : 
  113646             : 
  113647             : 
  113648             :        // necessary, to have direct access to the p_freepointer and the private methods !
  113649             :       /*! \brief friend class declaration to support AST File I/O */
  113650             :           friend class AST_FILE_IO;
  113651             : 
  113652             :       /*! \brief friend class declaration to support AST File I/O */
  113653             :           friend class SgOmpUniformClauseStorageClass;
  113654             : 
  113655             :       /*! \brief friend class declaration to support AST File I/O */
  113656             :           friend class AstSpecificDataManagingClass;
  113657             : 
  113658             :       /*! \brief friend class declaration to support AST File I/O */
  113659             :           friend class AstSpecificDataManagingClassStorageClass;
  113660             :     public:
  113661             :       /*! \brief IR node constructor to support AST File I/O */
  113662             :           SgOmpUniformClause( const SgOmpUniformClauseStorageClass& source );
  113663             : 
  113664             :  // private: // JJW hack
  113665             :        /*
  113666             :           name AST Memory Allocation Support Variables
  113667             :           Memory allocations support variables 
  113668             : 
  113669             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  113670             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  113671             :           and support the AST File I/O Mechanism.
  113672             :        */
  113673             :       /* */
  113674             : 
  113675             :     public:
  113676             : 
  113677             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  113678             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  113679             :       // virtual SgNode* addRegExpAttribute();
  113680             :       /*! \brief Support for AST matching using regular expression.
  113681             : 
  113682             :           This support is incomplete and the subject of current research to define 
  113683             :           RegEx trees to support inexact matching.
  113684             :        */
  113685             :           SgOmpUniformClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  113686             : 
  113687             : // *** COMMON CODE SECTION ENDS HERE ***
  113688             : 
  113689             : 
  113690             : // End of memberFunctionString
  113691             : // Start of memberFunctionString
  113692             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  113693             : 
  113694             :      // the generated cast function
  113695             :      // friend ROSE_DLL_API SgOmpUniformClause* isSgOmpUniformClause ( SgNode* s );
  113696             : 
  113697             :           typedef SgOmpVariablesClause base_node_type;
  113698             : 
  113699             : 
  113700             : // End of memberFunctionString
  113701             : 
  113702             : 
  113703             :      public: 
  113704             :          virtual ~SgOmpUniformClause();
  113705             : 
  113706             : 
  113707             :      public: 
  113708             :          SgOmpUniformClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL); 
  113709             :          SgOmpUniformClause(SgExprListExp* variables); 
  113710             : 
  113711             :     protected:
  113712             : 
  113713             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUniformClause>;
  113714             : 
  113715             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113716             : 
  113717             : 
  113718             :    };
  113719             : #endif
  113720             : 
  113721             : // postdeclarations for SgOmpUniformClause
  113722             : 
  113723             : /* #line 113724 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113724             : 
  113725             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  113726             : 
  113727             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113728             : 
  113729             : 
  113730             : /* #line 113731 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113731             : 
  113732             : 
  113733             : 
  113734             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113735             : 
  113736             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  113737             : //      This code is automatically generated for each 
  113738             : //      terminal and non-terminal within the defined 
  113739             : //      grammar.  There is a simple way to change the 
  113740             : //      code to fix bugs etc.  See the ROSE README file
  113741             : //      for directions.
  113742             : 
  113743             : // tps: (02/22/2010): Adding DLL export requirements
  113744             : #include "rosedll.h"
  113745             : 
  113746             : // predeclarations for SgOmpAlignedClause
  113747             : 
  113748             : /* #line 113749 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113749             : 
  113750             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  113751             : 
  113752             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  113753             : 
  113754             : #if 1
  113755             : // Class Definition for SgOmpAlignedClause
  113756             : class ROSE_DLL_API SgOmpAlignedClause  : public SgOmpVariablesClause
  113757             :    {
  113758             :      public:
  113759             : 
  113760             : 
  113761             : /* #line 113762 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  113762             : 
  113763             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  113764             : // Start of memberFunctionString
  113765             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  113766             : 
  113767             : // *** COMMON CODE SECTION BEGINS HERE ***
  113768             : 
  113769             :     public:
  113770             : 
  113771             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  113772             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  113773             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  113774             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  113775             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  113776             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  113777             : 
  113778             :       /*! \brief returns a string representing the class name */
  113779             :           virtual std::string class_name() const override;
  113780             : 
  113781             :       /*! \brief returns new style SageIII enum values */
  113782             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  113783             : 
  113784             :       /*! \brief static variant value */
  113785             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  113786             :        // static const VariantT static_variant = V_SgOmpAlignedClause;
  113787             :           enum { static_variant = V_SgOmpAlignedClause };
  113788             : 
  113789             :        /* the generated cast function */
  113790             :       /*! \brief Casts pointer from base class to derived class */
  113791             :           ROSE_DLL_API friend       SgOmpAlignedClause* isSgOmpAlignedClause(       SgNode * s );
  113792             : 
  113793             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  113794             :           ROSE_DLL_API friend const SgOmpAlignedClause* isSgOmpAlignedClause( const SgNode * s );
  113795             : 
  113796             :      // ******************************************
  113797             :      // * Memory Pool / New / Delete
  113798             :      // ******************************************
  113799             : 
  113800             :      public:
  113801             :           /// \private
  113802             :           static const unsigned pool_size; //
  113803             :           /// \private
  113804             :           static std::vector<unsigned char *> pools; //
  113805             :           /// \private
  113806             :           static SgOmpAlignedClause * next_node; // 
  113807             : 
  113808             :           /// \private
  113809             :           static unsigned long initializeStorageClassArray(SgOmpAlignedClauseStorageClass *); //
  113810             : 
  113811             :           /// \private
  113812             :           static void clearMemoryPool(); //
  113813             :           static void deleteMemoryPool(); //
  113814             : 
  113815             :           /// \private
  113816             :           static void extendMemoryPoolForFileIO(); //
  113817             : 
  113818             :           /// \private
  113819             :           static SgOmpAlignedClause * getPointerFromGlobalIndex(unsigned long); //
  113820             :           /// \private
  113821             :           static SgOmpAlignedClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  113822             : 
  113823             :           /// \private
  113824             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  113825             :           /// \private
  113826             :           static void resetValidFreepointers(); //
  113827             :           /// \private
  113828             :           static unsigned long getNumberOfLastValidPointer(); //
  113829             : 
  113830             : 
  113831             : #if defined(INLINE_FUNCTIONS)
  113832             :       /*! \brief returns pointer to newly allocated IR node */
  113833             :           inline void *operator new (size_t size);
  113834             : #else
  113835             :       /*! \brief returns pointer to newly allocated IR node */
  113836             :           void *operator new (size_t size);
  113837             : #endif
  113838             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  113839             :           void operator delete (void* pointer, size_t size);
  113840             : 
  113841             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  113842           0 :           void operator delete (void* pointer)
  113843             :              {
  113844             :             // This is the generated delete operator...
  113845           0 :                SgOmpAlignedClause::operator delete (pointer,sizeof(SgOmpAlignedClause));
  113846             :              }
  113847             : 
  113848             :       /*! \brief Returns the total number of IR nodes of this type */
  113849             :           static size_t numberOfNodes();
  113850             : 
  113851             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  113852             :           static size_t memoryUsage();
  113853             : 
  113854             :       // End of scope which started in IR nodes specific code 
  113855             :       /* */
  113856             : 
  113857             :       /* name Internal Functions
  113858             :           \brief Internal functions ... incomplete-documentation
  113859             : 
  113860             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113861             :           or by particularly knowledgeable users for specialized tools or applications.
  113862             : 
  113863             :           \internal We could not make these private because they are required by user for special purposes. And 
  113864             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  113865             :          
  113866             :        */
  113867             : 
  113868             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  113869             :        // overridden in every class by *generated* implementation
  113870             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  113871             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  113872             :        // MS: 06/28/02 container of names of variables or container indices 
  113873             :        // used used in the traversal to access AST successor nodes
  113874             :        // overridden in every class by *generated* implementation
  113875             :       /*! \brief container of names of variables or container indices used used in the traversal
  113876             :           to access AST successor nodes overridden in every class by *generated* implementation */
  113877             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  113878             : 
  113879             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  113880             :        // than all the vector copies. The implementation for these functions is generated for each class.
  113881             :       /*! \brief return number of children in the traversal successor list */
  113882             :           virtual size_t get_numberOfTraversalSuccessors() override;
  113883             :       /*! \brief index-based access to traversal successors by index number */
  113884             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  113885             :       /*! \brief index-based access to traversal successors by child node */
  113886             :           virtual size_t get_childIndex(SgNode *child) override;
  113887             : 
  113888             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  113889             :        // MS: 08/16/2002 method for generating RTI information
  113890             :       /*! \brief return C++ Runtime-Time-Information */
  113891             :           virtual RTIReturnType roseRTI() override;
  113892             : #endif
  113893             :       /* */
  113894             : 
  113895             : 
  113896             : 
  113897             :       /* name Deprecated Functions
  113898             :           \brief Deprecated functions ... incomplete-documentation
  113899             : 
  113900             :           These functions have been deprecated from use.
  113901             :        */
  113902             :       /* */
  113903             : 
  113904             :       /*! returns a C style string (char*) representing the class name */
  113905             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  113906             : 
  113907             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  113908             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  113909             : #if 0
  113910             :       /*! returns old style Sage II enum values */
  113911             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  113912             :       /*! returns old style Sage II enum values */
  113913             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  113914             : #endif
  113915             :       /* */
  113916             : 
  113917             : 
  113918             : 
  113919             : 
  113920             :      public:
  113921             :       /* name Traversal Support Functions
  113922             :           \brief Traversal support functions ... incomplete-documentation
  113923             : 
  113924             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113925             :           or by particularly knowledgable users for specialized tools or applications.
  113926             :        */
  113927             :       /* */
  113928             : 
  113929             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  113930             :        // (inferior to ROSE traversal mechanism, experimental).
  113931             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  113932             :        */
  113933             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  113934             : 
  113935             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  113936             :       /*! \brief support for the classic visitor pattern done in GoF */
  113937             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  113938             : 
  113939             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  113940             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  113941             :        */
  113942             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  113943             : 
  113944             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  113945             :        */
  113946             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  113947             : 
  113948             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  113949             :        // This traversal helps support internal tools that call static member functions.
  113950             :        // note: this function operates on the memory pools.
  113951             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  113952             :        */
  113953             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  113954             :       /* */
  113955             : 
  113956             : 
  113957             :      public:
  113958             :       /* name Memory Allocation Functions
  113959             :           \brief Memory allocations functions ... incomplete-documentation
  113960             : 
  113961             :           These functions have been made public as part of the design, but they are suggested for internal use 
  113962             :           or by particularly knowledgable users for specialized tools or applications.
  113963             :        */
  113964             :       /* */
  113965             : 
  113966             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  113967             : 
  113968             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  113969             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  113970             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  113971             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  113972             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  113973             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  113974             :           being used with the AST File I/O mechanism.
  113975             :        */
  113976             :           virtual bool isInMemoryPool() override;
  113977             : 
  113978             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  113979             : 
  113980             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  113981             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  113982             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  113983             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  113984             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  113985             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  113986             :           being used with the AST File I/O mechanism.
  113987             :        */
  113988             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  113989             : 
  113990             :       // DQ (4/30/2006): Modified to be a const function.
  113991             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  113992             : 
  113993             :           This functions is part of general support for many possible tools to operate 
  113994             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  113995             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  113996             :           less than the set of pointers used by the AST file I/O. This is part of
  113997             :           work implemented by Andreas, and support tools such as the AST graph generation.
  113998             : 
  113999             :           \warning This function can return unexpected data members and thus the 
  114000             :                    order and the number of elements is unpredicable and subject 
  114001             :                    to change.
  114002             : 
  114003             :           \returns STL vector of pairs of SgNode* and strings
  114004             :        */
  114005             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  114006             : 
  114007             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  114008             : 
  114009             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  114010             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  114011             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  114012             : 
  114013             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  114014             :                    and subject to change.
  114015             :        */
  114016             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  114017             : 
  114018             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  114019             : 
  114020             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  114021             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  114022             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  114023             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  114024             : 
  114025             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  114026             : 
  114027             :           \returns long
  114028             :        */
  114029             :           virtual long getChildIndex( SgNode* childNode ) const override;
  114030             : 
  114031             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  114032             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114033             :       /* \brief Constructor for use by AST File I/O Mechanism
  114034             : 
  114035             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  114036             :           which obtained via fast binary file I/O from disk.
  114037             :        */
  114038             :        // SgOmpAlignedClause( SgOmpAlignedClauseStorageClass& source );
  114039             : 
  114040             : 
  114041             : 
  114042             : 
  114043             : 
  114044             :  // JH (10/24/2005): methods added to support the ast file IO
  114045             :     private:
  114046             : 
  114047             :       /* name AST Memory Allocation Support Functions
  114048             :           \brief Memory allocations support....
  114049             : 
  114050             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  114051             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  114052             :           and support the AST File I/O Mechanism.
  114053             :        */
  114054             :       /* */
  114055             : 
  114056             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  114057             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  114058             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  114059             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  114060             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  114061             :           a correspinding one in the AST_FILE_IO class!
  114062             :        */
  114063             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  114064             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114065             :       /* \brief Typedef used for low level memory access.
  114066             :        */
  114067             :        // typedef unsigned char* TestType;
  114068             : 
  114069             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  114070             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114071             :       /* \brief Typedef used to hold memory addresses as values.
  114072             :        */
  114073             :        // typedef unsigned long  AddressType;
  114074             : 
  114075             : 
  114076             : 
  114077             :        // necessary, to have direct access to the p_freepointer and the private methods !
  114078             :       /*! \brief friend class declaration to support AST File I/O */
  114079             :           friend class AST_FILE_IO;
  114080             : 
  114081             :       /*! \brief friend class declaration to support AST File I/O */
  114082             :           friend class SgOmpAlignedClauseStorageClass;
  114083             : 
  114084             :       /*! \brief friend class declaration to support AST File I/O */
  114085             :           friend class AstSpecificDataManagingClass;
  114086             : 
  114087             :       /*! \brief friend class declaration to support AST File I/O */
  114088             :           friend class AstSpecificDataManagingClassStorageClass;
  114089             :     public:
  114090             :       /*! \brief IR node constructor to support AST File I/O */
  114091             :           SgOmpAlignedClause( const SgOmpAlignedClauseStorageClass& source );
  114092             : 
  114093             :  // private: // JJW hack
  114094             :        /*
  114095             :           name AST Memory Allocation Support Variables
  114096             :           Memory allocations support variables 
  114097             : 
  114098             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  114099             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  114100             :           and support the AST File I/O Mechanism.
  114101             :        */
  114102             :       /* */
  114103             : 
  114104             :     public:
  114105             : 
  114106             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  114107             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  114108             :       // virtual SgNode* addRegExpAttribute();
  114109             :       /*! \brief Support for AST matching using regular expression.
  114110             : 
  114111             :           This support is incomplete and the subject of current research to define 
  114112             :           RegEx trees to support inexact matching.
  114113             :        */
  114114             :           SgOmpAlignedClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  114115             : 
  114116             : // *** COMMON CODE SECTION ENDS HERE ***
  114117             : 
  114118             : 
  114119             : // End of memberFunctionString
  114120             : // Start of memberFunctionString
  114121             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  114122             : 
  114123             :      // the generated cast function
  114124             :      // friend ROSE_DLL_API SgOmpAlignedClause* isSgOmpAlignedClause ( SgNode* s );
  114125             : 
  114126             :           typedef SgOmpVariablesClause base_node_type;
  114127             : 
  114128             : 
  114129             : // End of memberFunctionString
  114130             : 
  114131             :      public: 
  114132             :          SgExpression* get_alignment() const;
  114133             :          void set_alignment(SgExpression* alignment);
  114134             : 
  114135             : 
  114136             :      public: 
  114137             :          virtual ~SgOmpAlignedClause();
  114138             : 
  114139             : 
  114140             :      public: 
  114141             :          SgOmpAlignedClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgExpression* alignment = NULL); 
  114142             :          SgOmpAlignedClause(SgExprListExp* variables, SgExpression* alignment); 
  114143             : 
  114144             :     protected:
  114145             : // Start of memberFunctionString
  114146             : SgExpression* p_alignment;
  114147             :           
  114148             : // End of memberFunctionString
  114149             : 
  114150             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAlignedClause>;
  114151             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAlignedClause, SgExpression*,&SgOmpAlignedClause::p_alignment>;
  114152             : 
  114153             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114154             : 
  114155             : 
  114156             :    };
  114157             : #endif
  114158             : 
  114159             : // postdeclarations for SgOmpAlignedClause
  114160             : 
  114161             : /* #line 114162 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114162             : 
  114163             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  114164             : 
  114165             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114166             : 
  114167             : 
  114168             : /* #line 114169 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114169             : 
  114170             : 
  114171             : 
  114172             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114173             : 
  114174             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  114175             : //      This code is automatically generated for each 
  114176             : //      terminal and non-terminal within the defined 
  114177             : //      grammar.  There is a simple way to change the 
  114178             : //      code to fix bugs etc.  See the ROSE README file
  114179             : //      for directions.
  114180             : 
  114181             : // tps: (02/22/2010): Adding DLL export requirements
  114182             : #include "rosedll.h"
  114183             : 
  114184             : // predeclarations for SgOmpLinearClause
  114185             : 
  114186             : /* #line 114187 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114187             : 
  114188             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  114189             : 
  114190             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114191             : 
  114192             : #if 1
  114193             : // Class Definition for SgOmpLinearClause
  114194             : class ROSE_DLL_API SgOmpLinearClause  : public SgOmpVariablesClause
  114195             :    {
  114196             :      public:
  114197             : 
  114198             : 
  114199             : /* #line 114200 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114200             : 
  114201             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  114202             : // Start of memberFunctionString
  114203             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  114204             : 
  114205             : // *** COMMON CODE SECTION BEGINS HERE ***
  114206             : 
  114207             :     public:
  114208             : 
  114209             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  114210             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  114211             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  114212             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  114213             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  114214             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  114215             : 
  114216             :       /*! \brief returns a string representing the class name */
  114217             :           virtual std::string class_name() const override;
  114218             : 
  114219             :       /*! \brief returns new style SageIII enum values */
  114220             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  114221             : 
  114222             :       /*! \brief static variant value */
  114223             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  114224             :        // static const VariantT static_variant = V_SgOmpLinearClause;
  114225             :           enum { static_variant = V_SgOmpLinearClause };
  114226             : 
  114227             :        /* the generated cast function */
  114228             :       /*! \brief Casts pointer from base class to derived class */
  114229             :           ROSE_DLL_API friend       SgOmpLinearClause* isSgOmpLinearClause(       SgNode * s );
  114230             : 
  114231             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  114232             :           ROSE_DLL_API friend const SgOmpLinearClause* isSgOmpLinearClause( const SgNode * s );
  114233             : 
  114234             :      // ******************************************
  114235             :      // * Memory Pool / New / Delete
  114236             :      // ******************************************
  114237             : 
  114238             :      public:
  114239             :           /// \private
  114240             :           static const unsigned pool_size; //
  114241             :           /// \private
  114242             :           static std::vector<unsigned char *> pools; //
  114243             :           /// \private
  114244             :           static SgOmpLinearClause * next_node; // 
  114245             : 
  114246             :           /// \private
  114247             :           static unsigned long initializeStorageClassArray(SgOmpLinearClauseStorageClass *); //
  114248             : 
  114249             :           /// \private
  114250             :           static void clearMemoryPool(); //
  114251             :           static void deleteMemoryPool(); //
  114252             : 
  114253             :           /// \private
  114254             :           static void extendMemoryPoolForFileIO(); //
  114255             : 
  114256             :           /// \private
  114257             :           static SgOmpLinearClause * getPointerFromGlobalIndex(unsigned long); //
  114258             :           /// \private
  114259             :           static SgOmpLinearClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  114260             : 
  114261             :           /// \private
  114262             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  114263             :           /// \private
  114264             :           static void resetValidFreepointers(); //
  114265             :           /// \private
  114266             :           static unsigned long getNumberOfLastValidPointer(); //
  114267             : 
  114268             : 
  114269             : #if defined(INLINE_FUNCTIONS)
  114270             :       /*! \brief returns pointer to newly allocated IR node */
  114271             :           inline void *operator new (size_t size);
  114272             : #else
  114273             :       /*! \brief returns pointer to newly allocated IR node */
  114274             :           void *operator new (size_t size);
  114275             : #endif
  114276             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  114277             :           void operator delete (void* pointer, size_t size);
  114278             : 
  114279             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  114280           0 :           void operator delete (void* pointer)
  114281             :              {
  114282             :             // This is the generated delete operator...
  114283           0 :                SgOmpLinearClause::operator delete (pointer,sizeof(SgOmpLinearClause));
  114284             :              }
  114285             : 
  114286             :       /*! \brief Returns the total number of IR nodes of this type */
  114287             :           static size_t numberOfNodes();
  114288             : 
  114289             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  114290             :           static size_t memoryUsage();
  114291             : 
  114292             :       // End of scope which started in IR nodes specific code 
  114293             :       /* */
  114294             : 
  114295             :       /* name Internal Functions
  114296             :           \brief Internal functions ... incomplete-documentation
  114297             : 
  114298             :           These functions have been made public as part of the design, but they are suggested for internal use 
  114299             :           or by particularly knowledgeable users for specialized tools or applications.
  114300             : 
  114301             :           \internal We could not make these private because they are required by user for special purposes. And 
  114302             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  114303             :          
  114304             :        */
  114305             : 
  114306             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  114307             :        // overridden in every class by *generated* implementation
  114308             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  114309             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  114310             :        // MS: 06/28/02 container of names of variables or container indices 
  114311             :        // used used in the traversal to access AST successor nodes
  114312             :        // overridden in every class by *generated* implementation
  114313             :       /*! \brief container of names of variables or container indices used used in the traversal
  114314             :           to access AST successor nodes overridden in every class by *generated* implementation */
  114315             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  114316             : 
  114317             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  114318             :        // than all the vector copies. The implementation for these functions is generated for each class.
  114319             :       /*! \brief return number of children in the traversal successor list */
  114320             :           virtual size_t get_numberOfTraversalSuccessors() override;
  114321             :       /*! \brief index-based access to traversal successors by index number */
  114322             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  114323             :       /*! \brief index-based access to traversal successors by child node */
  114324             :           virtual size_t get_childIndex(SgNode *child) override;
  114325             : 
  114326             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  114327             :        // MS: 08/16/2002 method for generating RTI information
  114328             :       /*! \brief return C++ Runtime-Time-Information */
  114329             :           virtual RTIReturnType roseRTI() override;
  114330             : #endif
  114331             :       /* */
  114332             : 
  114333             : 
  114334             : 
  114335             :       /* name Deprecated Functions
  114336             :           \brief Deprecated functions ... incomplete-documentation
  114337             : 
  114338             :           These functions have been deprecated from use.
  114339             :        */
  114340             :       /* */
  114341             : 
  114342             :       /*! returns a C style string (char*) representing the class name */
  114343             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  114344             : 
  114345             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  114346             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  114347             : #if 0
  114348             :       /*! returns old style Sage II enum values */
  114349             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  114350             :       /*! returns old style Sage II enum values */
  114351             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  114352             : #endif
  114353             :       /* */
  114354             : 
  114355             : 
  114356             : 
  114357             : 
  114358             :      public:
  114359             :       /* name Traversal Support Functions
  114360             :           \brief Traversal support functions ... incomplete-documentation
  114361             : 
  114362             :           These functions have been made public as part of the design, but they are suggested for internal use 
  114363             :           or by particularly knowledgable users for specialized tools or applications.
  114364             :        */
  114365             :       /* */
  114366             : 
  114367             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  114368             :        // (inferior to ROSE traversal mechanism, experimental).
  114369             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  114370             :        */
  114371             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  114372             : 
  114373             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  114374             :       /*! \brief support for the classic visitor pattern done in GoF */
  114375             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  114376             : 
  114377             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  114378             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  114379             :        */
  114380             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  114381             : 
  114382             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  114383             :        */
  114384             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  114385             : 
  114386             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  114387             :        // This traversal helps support internal tools that call static member functions.
  114388             :        // note: this function operates on the memory pools.
  114389             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  114390             :        */
  114391             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  114392             :       /* */
  114393             : 
  114394             : 
  114395             :      public:
  114396             :       /* name Memory Allocation Functions
  114397             :           \brief Memory allocations functions ... incomplete-documentation
  114398             : 
  114399             :           These functions have been made public as part of the design, but they are suggested for internal use 
  114400             :           or by particularly knowledgable users for specialized tools or applications.
  114401             :        */
  114402             :       /* */
  114403             : 
  114404             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  114405             : 
  114406             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  114407             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  114408             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  114409             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  114410             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  114411             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  114412             :           being used with the AST File I/O mechanism.
  114413             :        */
  114414             :           virtual bool isInMemoryPool() override;
  114415             : 
  114416             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  114417             : 
  114418             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  114419             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  114420             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  114421             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  114422             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  114423             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  114424             :           being used with the AST File I/O mechanism.
  114425             :        */
  114426             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  114427             : 
  114428             :       // DQ (4/30/2006): Modified to be a const function.
  114429             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  114430             : 
  114431             :           This functions is part of general support for many possible tools to operate 
  114432             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  114433             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  114434             :           less than the set of pointers used by the AST file I/O. This is part of
  114435             :           work implemented by Andreas, and support tools such as the AST graph generation.
  114436             : 
  114437             :           \warning This function can return unexpected data members and thus the 
  114438             :                    order and the number of elements is unpredicable and subject 
  114439             :                    to change.
  114440             : 
  114441             :           \returns STL vector of pairs of SgNode* and strings
  114442             :        */
  114443             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  114444             : 
  114445             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  114446             : 
  114447             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  114448             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  114449             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  114450             : 
  114451             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  114452             :                    and subject to change.
  114453             :        */
  114454             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  114455             : 
  114456             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  114457             : 
  114458             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  114459             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  114460             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  114461             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  114462             : 
  114463             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  114464             : 
  114465             :           \returns long
  114466             :        */
  114467             :           virtual long getChildIndex( SgNode* childNode ) const override;
  114468             : 
  114469             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  114470             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114471             :       /* \brief Constructor for use by AST File I/O Mechanism
  114472             : 
  114473             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  114474             :           which obtained via fast binary file I/O from disk.
  114475             :        */
  114476             :        // SgOmpLinearClause( SgOmpLinearClauseStorageClass& source );
  114477             : 
  114478             : 
  114479             : 
  114480             : 
  114481             : 
  114482             :  // JH (10/24/2005): methods added to support the ast file IO
  114483             :     private:
  114484             : 
  114485             :       /* name AST Memory Allocation Support Functions
  114486             :           \brief Memory allocations support....
  114487             : 
  114488             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  114489             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  114490             :           and support the AST File I/O Mechanism.
  114491             :        */
  114492             :       /* */
  114493             : 
  114494             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  114495             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  114496             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  114497             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  114498             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  114499             :           a correspinding one in the AST_FILE_IO class!
  114500             :        */
  114501             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  114502             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114503             :       /* \brief Typedef used for low level memory access.
  114504             :        */
  114505             :        // typedef unsigned char* TestType;
  114506             : 
  114507             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  114508             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114509             :       /* \brief Typedef used to hold memory addresses as values.
  114510             :        */
  114511             :        // typedef unsigned long  AddressType;
  114512             : 
  114513             : 
  114514             : 
  114515             :        // necessary, to have direct access to the p_freepointer and the private methods !
  114516             :       /*! \brief friend class declaration to support AST File I/O */
  114517             :           friend class AST_FILE_IO;
  114518             : 
  114519             :       /*! \brief friend class declaration to support AST File I/O */
  114520             :           friend class SgOmpLinearClauseStorageClass;
  114521             : 
  114522             :       /*! \brief friend class declaration to support AST File I/O */
  114523             :           friend class AstSpecificDataManagingClass;
  114524             : 
  114525             :       /*! \brief friend class declaration to support AST File I/O */
  114526             :           friend class AstSpecificDataManagingClassStorageClass;
  114527             :     public:
  114528             :       /*! \brief IR node constructor to support AST File I/O */
  114529             :           SgOmpLinearClause( const SgOmpLinearClauseStorageClass& source );
  114530             : 
  114531             :  // private: // JJW hack
  114532             :        /*
  114533             :           name AST Memory Allocation Support Variables
  114534             :           Memory allocations support variables 
  114535             : 
  114536             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  114537             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  114538             :           and support the AST File I/O Mechanism.
  114539             :        */
  114540             :       /* */
  114541             : 
  114542             :     public:
  114543             : 
  114544             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  114545             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  114546             :       // virtual SgNode* addRegExpAttribute();
  114547             :       /*! \brief Support for AST matching using regular expression.
  114548             : 
  114549             :           This support is incomplete and the subject of current research to define 
  114550             :           RegEx trees to support inexact matching.
  114551             :        */
  114552             :           SgOmpLinearClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  114553             : 
  114554             : // *** COMMON CODE SECTION ENDS HERE ***
  114555             : 
  114556             : 
  114557             : // End of memberFunctionString
  114558             : // Start of memberFunctionString
  114559             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  114560             : 
  114561             :      // the generated cast function
  114562             :      // friend ROSE_DLL_API SgOmpLinearClause* isSgOmpLinearClause ( SgNode* s );
  114563             : 
  114564             :           typedef SgOmpVariablesClause base_node_type;
  114565             : 
  114566             : 
  114567             : // End of memberFunctionString
  114568             : 
  114569             :      public: 
  114570             :          SgExpression* get_step() const;
  114571             :          void set_step(SgExpression* step);
  114572             : 
  114573             :      public: 
  114574             :          SgOmpClause::omp_linear_modifier_enum get_modifier() const;
  114575             :          void set_modifier(SgOmpClause::omp_linear_modifier_enum modifier);
  114576             : 
  114577             : 
  114578             :      public: 
  114579             :          virtual ~SgOmpLinearClause();
  114580             : 
  114581             : 
  114582             :      public: 
  114583             :          SgOmpLinearClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgExpression* step = NULL, SgOmpClause::omp_linear_modifier_enum modifier =e_omp_linear_modifier_unspecified); 
  114584             :          SgOmpLinearClause(SgExprListExp* variables, SgExpression* step, SgOmpClause::omp_linear_modifier_enum modifier); 
  114585             : 
  114586             :     protected:
  114587             : // Start of memberFunctionString
  114588             : SgExpression* p_step;
  114589             :           
  114590             : // End of memberFunctionString
  114591             : // Start of memberFunctionString
  114592             : SgOmpClause::omp_linear_modifier_enum p_modifier;
  114593             :           
  114594             : // End of memberFunctionString
  114595             : 
  114596             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpLinearClause>;
  114597             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpLinearClause, SgExpression*,&SgOmpLinearClause::p_step>;
  114598             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpLinearClause, SgOmpClause::omp_linear_modifier_enum,&SgOmpLinearClause::p_modifier>;
  114599             : 
  114600             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114601             : 
  114602             : 
  114603             :    };
  114604             : #endif
  114605             : 
  114606             : // postdeclarations for SgOmpLinearClause
  114607             : 
  114608             : /* #line 114609 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114609             : 
  114610             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  114611             : 
  114612             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114613             : 
  114614             : 
  114615             : /* #line 114616 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114616             : 
  114617             : 
  114618             : 
  114619             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114620             : 
  114621             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  114622             : //      This code is automatically generated for each 
  114623             : //      terminal and non-terminal within the defined 
  114624             : //      grammar.  There is a simple way to change the 
  114625             : //      code to fix bugs etc.  See the ROSE README file
  114626             : //      for directions.
  114627             : 
  114628             : // tps: (02/22/2010): Adding DLL export requirements
  114629             : #include "rosedll.h"
  114630             : 
  114631             : // predeclarations for SgOmpDependClause
  114632             : 
  114633             : /* #line 114634 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114634             : 
  114635             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  114636             : 
  114637             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  114638             : 
  114639             : #if 1
  114640             : // Class Definition for SgOmpDependClause
  114641             : class ROSE_DLL_API SgOmpDependClause  : public SgOmpVariablesClause
  114642             :    {
  114643             :      public:
  114644             : 
  114645             : 
  114646             : /* #line 114647 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  114647             : 
  114648             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  114649             : // Start of memberFunctionString
  114650             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  114651             : 
  114652             : // *** COMMON CODE SECTION BEGINS HERE ***
  114653             : 
  114654             :     public:
  114655             : 
  114656             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  114657             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  114658             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  114659             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  114660             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  114661             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  114662             : 
  114663             :       /*! \brief returns a string representing the class name */
  114664             :           virtual std::string class_name() const override;
  114665             : 
  114666             :       /*! \brief returns new style SageIII enum values */
  114667             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  114668             : 
  114669             :       /*! \brief static variant value */
  114670             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  114671             :        // static const VariantT static_variant = V_SgOmpDependClause;
  114672             :           enum { static_variant = V_SgOmpDependClause };
  114673             : 
  114674             :        /* the generated cast function */
  114675             :       /*! \brief Casts pointer from base class to derived class */
  114676             :           ROSE_DLL_API friend       SgOmpDependClause* isSgOmpDependClause(       SgNode * s );
  114677             : 
  114678             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  114679             :           ROSE_DLL_API friend const SgOmpDependClause* isSgOmpDependClause( const SgNode * s );
  114680             : 
  114681             :      // ******************************************
  114682             :      // * Memory Pool / New / Delete
  114683             :      // ******************************************
  114684             : 
  114685             :      public:
  114686             :           /// \private
  114687             :           static const unsigned pool_size; //
  114688             :           /// \private
  114689             :           static std::vector<unsigned char *> pools; //
  114690             :           /// \private
  114691             :           static SgOmpDependClause * next_node; // 
  114692             : 
  114693             :           /// \private
  114694             :           static unsigned long initializeStorageClassArray(SgOmpDependClauseStorageClass *); //
  114695             : 
  114696             :           /// \private
  114697             :           static void clearMemoryPool(); //
  114698             :           static void deleteMemoryPool(); //
  114699             : 
  114700             :           /// \private
  114701             :           static void extendMemoryPoolForFileIO(); //
  114702             : 
  114703             :           /// \private
  114704             :           static SgOmpDependClause * getPointerFromGlobalIndex(unsigned long); //
  114705             :           /// \private
  114706             :           static SgOmpDependClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  114707             : 
  114708             :           /// \private
  114709             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  114710             :           /// \private
  114711             :           static void resetValidFreepointers(); //
  114712             :           /// \private
  114713             :           static unsigned long getNumberOfLastValidPointer(); //
  114714             : 
  114715             : 
  114716             : #if defined(INLINE_FUNCTIONS)
  114717             :       /*! \brief returns pointer to newly allocated IR node */
  114718             :           inline void *operator new (size_t size);
  114719             : #else
  114720             :       /*! \brief returns pointer to newly allocated IR node */
  114721             :           void *operator new (size_t size);
  114722             : #endif
  114723             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  114724             :           void operator delete (void* pointer, size_t size);
  114725             : 
  114726             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  114727           0 :           void operator delete (void* pointer)
  114728             :              {
  114729             :             // This is the generated delete operator...
  114730           0 :                SgOmpDependClause::operator delete (pointer,sizeof(SgOmpDependClause));
  114731             :              }
  114732             : 
  114733             :       /*! \brief Returns the total number of IR nodes of this type */
  114734             :           static size_t numberOfNodes();
  114735             : 
  114736             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  114737             :           static size_t memoryUsage();
  114738             : 
  114739             :       // End of scope which started in IR nodes specific code 
  114740             :       /* */
  114741             : 
  114742             :       /* name Internal Functions
  114743             :           \brief Internal functions ... incomplete-documentation
  114744             : 
  114745             :           These functions have been made public as part of the design, but they are suggested for internal use 
  114746             :           or by particularly knowledgeable users for specialized tools or applications.
  114747             : 
  114748             :           \internal We could not make these private because they are required by user for special purposes. And 
  114749             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  114750             :          
  114751             :        */
  114752             : 
  114753             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  114754             :        // overridden in every class by *generated* implementation
  114755             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  114756             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  114757             :        // MS: 06/28/02 container of names of variables or container indices 
  114758             :        // used used in the traversal to access AST successor nodes
  114759             :        // overridden in every class by *generated* implementation
  114760             :       /*! \brief container of names of variables or container indices used used in the traversal
  114761             :           to access AST successor nodes overridden in every class by *generated* implementation */
  114762             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  114763             : 
  114764             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  114765             :        // than all the vector copies. The implementation for these functions is generated for each class.
  114766             :       /*! \brief return number of children in the traversal successor list */
  114767             :           virtual size_t get_numberOfTraversalSuccessors() override;
  114768             :       /*! \brief index-based access to traversal successors by index number */
  114769             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  114770             :       /*! \brief index-based access to traversal successors by child node */
  114771             :           virtual size_t get_childIndex(SgNode *child) override;
  114772             : 
  114773             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  114774             :        // MS: 08/16/2002 method for generating RTI information
  114775             :       /*! \brief return C++ Runtime-Time-Information */
  114776             :           virtual RTIReturnType roseRTI() override;
  114777             : #endif
  114778             :       /* */
  114779             : 
  114780             : 
  114781             : 
  114782             :       /* name Deprecated Functions
  114783             :           \brief Deprecated functions ... incomplete-documentation
  114784             : 
  114785             :           These functions have been deprecated from use.
  114786             :        */
  114787             :       /* */
  114788             : 
  114789             :       /*! returns a C style string (char*) representing the class name */
  114790             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  114791             : 
  114792             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  114793             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  114794             : #if 0
  114795             :       /*! returns old style Sage II enum values */
  114796             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  114797             :       /*! returns old style Sage II enum values */
  114798             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  114799             : #endif
  114800             :       /* */
  114801             : 
  114802             : 
  114803             : 
  114804             : 
  114805             :      public:
  114806             :       /* name Traversal Support Functions
  114807             :           \brief Traversal support functions ... incomplete-documentation
  114808             : 
  114809             :           These functions have been made public as part of the design, but they are suggested for internal use 
  114810             :           or by particularly knowledgable users for specialized tools or applications.
  114811             :        */
  114812             :       /* */
  114813             : 
  114814             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  114815             :        // (inferior to ROSE traversal mechanism, experimental).
  114816             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  114817             :        */
  114818             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  114819             : 
  114820             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  114821             :       /*! \brief support for the classic visitor pattern done in GoF */
  114822             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  114823             : 
  114824             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  114825             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  114826             :        */
  114827             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  114828             : 
  114829             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  114830             :        */
  114831             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  114832             : 
  114833             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  114834             :        // This traversal helps support internal tools that call static member functions.
  114835             :        // note: this function operates on the memory pools.
  114836             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  114837             :        */
  114838             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  114839             :       /* */
  114840             : 
  114841             : 
  114842             :      public:
  114843             :       /* name Memory Allocation Functions
  114844             :           \brief Memory allocations functions ... incomplete-documentation
  114845             : 
  114846             :           These functions have been made public as part of the design, but they are suggested for internal use 
  114847             :           or by particularly knowledgable users for specialized tools or applications.
  114848             :        */
  114849             :       /* */
  114850             : 
  114851             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  114852             : 
  114853             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  114854             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  114855             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  114856             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  114857             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  114858             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  114859             :           being used with the AST File I/O mechanism.
  114860             :        */
  114861             :           virtual bool isInMemoryPool() override;
  114862             : 
  114863             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  114864             : 
  114865             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  114866             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  114867             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  114868             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  114869             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  114870             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  114871             :           being used with the AST File I/O mechanism.
  114872             :        */
  114873             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  114874             : 
  114875             :       // DQ (4/30/2006): Modified to be a const function.
  114876             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  114877             : 
  114878             :           This functions is part of general support for many possible tools to operate 
  114879             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  114880             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  114881             :           less than the set of pointers used by the AST file I/O. This is part of
  114882             :           work implemented by Andreas, and support tools such as the AST graph generation.
  114883             : 
  114884             :           \warning This function can return unexpected data members and thus the 
  114885             :                    order and the number of elements is unpredicable and subject 
  114886             :                    to change.
  114887             : 
  114888             :           \returns STL vector of pairs of SgNode* and strings
  114889             :        */
  114890             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  114891             : 
  114892             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  114893             : 
  114894             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  114895             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  114896             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  114897             : 
  114898             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  114899             :                    and subject to change.
  114900             :        */
  114901             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  114902             : 
  114903             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  114904             : 
  114905             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  114906             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  114907             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  114908             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  114909             : 
  114910             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  114911             : 
  114912             :           \returns long
  114913             :        */
  114914             :           virtual long getChildIndex( SgNode* childNode ) const override;
  114915             : 
  114916             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  114917             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114918             :       /* \brief Constructor for use by AST File I/O Mechanism
  114919             : 
  114920             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  114921             :           which obtained via fast binary file I/O from disk.
  114922             :        */
  114923             :        // SgOmpDependClause( SgOmpDependClauseStorageClass& source );
  114924             : 
  114925             : 
  114926             : 
  114927             : 
  114928             : 
  114929             :  // JH (10/24/2005): methods added to support the ast file IO
  114930             :     private:
  114931             : 
  114932             :       /* name AST Memory Allocation Support Functions
  114933             :           \brief Memory allocations support....
  114934             : 
  114935             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  114936             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  114937             :           and support the AST File I/O Mechanism.
  114938             :        */
  114939             :       /* */
  114940             : 
  114941             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  114942             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  114943             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  114944             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  114945             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  114946             :           a correspinding one in the AST_FILE_IO class!
  114947             :        */
  114948             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  114949             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114950             :       /* \brief Typedef used for low level memory access.
  114951             :        */
  114952             :        // typedef unsigned char* TestType;
  114953             : 
  114954             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  114955             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  114956             :       /* \brief Typedef used to hold memory addresses as values.
  114957             :        */
  114958             :        // typedef unsigned long  AddressType;
  114959             : 
  114960             : 
  114961             : 
  114962             :        // necessary, to have direct access to the p_freepointer and the private methods !
  114963             :       /*! \brief friend class declaration to support AST File I/O */
  114964             :           friend class AST_FILE_IO;
  114965             : 
  114966             :       /*! \brief friend class declaration to support AST File I/O */
  114967             :           friend class SgOmpDependClauseStorageClass;
  114968             : 
  114969             :       /*! \brief friend class declaration to support AST File I/O */
  114970             :           friend class AstSpecificDataManagingClass;
  114971             : 
  114972             :       /*! \brief friend class declaration to support AST File I/O */
  114973             :           friend class AstSpecificDataManagingClassStorageClass;
  114974             :     public:
  114975             :       /*! \brief IR node constructor to support AST File I/O */
  114976             :           SgOmpDependClause( const SgOmpDependClauseStorageClass& source );
  114977             : 
  114978             :  // private: // JJW hack
  114979             :        /*
  114980             :           name AST Memory Allocation Support Variables
  114981             :           Memory allocations support variables 
  114982             : 
  114983             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  114984             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  114985             :           and support the AST File I/O Mechanism.
  114986             :        */
  114987             :       /* */
  114988             : 
  114989             :     public:
  114990             : 
  114991             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  114992             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  114993             :       // virtual SgNode* addRegExpAttribute();
  114994             :       /*! \brief Support for AST matching using regular expression.
  114995             : 
  114996             :           This support is incomplete and the subject of current research to define 
  114997             :           RegEx trees to support inexact matching.
  114998             :        */
  114999             :           SgOmpDependClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  115000             : 
  115001             : // *** COMMON CODE SECTION ENDS HERE ***
  115002             : 
  115003             : 
  115004             : // End of memberFunctionString
  115005             : // Start of memberFunctionString
  115006             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  115007             : 
  115008             :      // the generated cast function
  115009             :      // friend ROSE_DLL_API SgOmpDependClause* isSgOmpDependClause ( SgNode* s );
  115010             : 
  115011             :           typedef SgOmpVariablesClause base_node_type;
  115012             : 
  115013             : 
  115014             : // End of memberFunctionString
  115015             : 
  115016             :      public: 
  115017             :          SgOmpClause::omp_depend_modifier_enum get_depend_modifier() const;
  115018             :          void set_depend_modifier(SgOmpClause::omp_depend_modifier_enum depend_modifier);
  115019             : 
  115020             :      public: 
  115021             :          SgOmpClause::omp_dependence_type_enum get_dependence_type() const;
  115022             :          void set_dependence_type(SgOmpClause::omp_dependence_type_enum dependence_type);
  115023             : 
  115024             :      public: 
  115025             :          std::list<std::list<SgExpression*> > get_iterator() const;
  115026             :          void set_iterator(std::list<std::list<SgExpression*> > iterator);
  115027             : 
  115028             :      public: 
  115029             :          std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > get_array_dimensions() const;
  115030             :          void set_array_dimensions(std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > array_dimensions);
  115031             : 
  115032             :      public: 
  115033             :          std::list<SgExpression*> get_vec() const;
  115034             :          void set_vec(std::list<SgExpression*> vec);
  115035             : 
  115036             : 
  115037             :      public: 
  115038             :          virtual ~SgOmpDependClause();
  115039             : 
  115040             : 
  115041             :      public: 
  115042             :          SgOmpDependClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_depend_modifier_enum depend_modifier =e_omp_depend_modifier_unspecified, SgOmpClause::omp_dependence_type_enum dependence_type =e_omp_depend_unspecified); 
  115043             :          SgOmpDependClause(SgExprListExp* variables, SgOmpClause::omp_depend_modifier_enum depend_modifier, SgOmpClause::omp_dependence_type_enum dependence_type); 
  115044             : 
  115045             :     protected:
  115046             : // Start of memberFunctionString
  115047             : SgOmpClause::omp_depend_modifier_enum p_depend_modifier;
  115048             :           
  115049             : // End of memberFunctionString
  115050             : // Start of memberFunctionString
  115051             : SgOmpClause::omp_dependence_type_enum p_dependence_type;
  115052             :           
  115053             : // End of memberFunctionString
  115054             : // Start of memberFunctionString
  115055             : std::list<std::list<SgExpression*> > p_iterator;
  115056             :           
  115057             : // End of memberFunctionString
  115058             : // Start of memberFunctionString
  115059             : std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > p_array_dimensions;
  115060             :           
  115061             : // End of memberFunctionString
  115062             : // Start of memberFunctionString
  115063             : std::list<SgExpression*> p_vec;
  115064             :           
  115065             : // End of memberFunctionString
  115066             : 
  115067             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDependClause>;
  115068             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDependClause, SgOmpClause::omp_depend_modifier_enum,&SgOmpDependClause::p_depend_modifier>;
  115069             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDependClause, SgOmpClause::omp_dependence_type_enum,&SgOmpDependClause::p_dependence_type>;
  115070             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDependClause, std::list<std::list<SgExpression*> >,&SgOmpDependClause::p_iterator>;
  115071             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDependClause, std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > >,&SgOmpDependClause::p_array_dimensions>;
  115072             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDependClause, std::list<SgExpression*>,&SgOmpDependClause::p_vec>;
  115073             : 
  115074             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115075             : 
  115076             : 
  115077             :    };
  115078             : #endif
  115079             : 
  115080             : // postdeclarations for SgOmpDependClause
  115081             : 
  115082             : /* #line 115083 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115083             : 
  115084             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  115085             : 
  115086             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115087             : 
  115088             : 
  115089             : /* #line 115090 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115090             : 
  115091             : 
  115092             : 
  115093             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115094             : 
  115095             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  115096             : //      This code is automatically generated for each 
  115097             : //      terminal and non-terminal within the defined 
  115098             : //      grammar.  There is a simple way to change the 
  115099             : //      code to fix bugs etc.  See the ROSE README file
  115100             : //      for directions.
  115101             : 
  115102             : // tps: (02/22/2010): Adding DLL export requirements
  115103             : #include "rosedll.h"
  115104             : 
  115105             : // predeclarations for SgOmpAffinityClause
  115106             : 
  115107             : /* #line 115108 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115108             : 
  115109             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  115110             : 
  115111             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115112             : 
  115113             : #if 1
  115114             : // Class Definition for SgOmpAffinityClause
  115115             : class ROSE_DLL_API SgOmpAffinityClause  : public SgOmpVariablesClause
  115116             :    {
  115117             :      public:
  115118             : 
  115119             : 
  115120             : /* #line 115121 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115121             : 
  115122             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  115123             : // Start of memberFunctionString
  115124             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  115125             : 
  115126             : // *** COMMON CODE SECTION BEGINS HERE ***
  115127             : 
  115128             :     public:
  115129             : 
  115130             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  115131             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  115132             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  115133             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  115134             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  115135             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  115136             : 
  115137             :       /*! \brief returns a string representing the class name */
  115138             :           virtual std::string class_name() const override;
  115139             : 
  115140             :       /*! \brief returns new style SageIII enum values */
  115141             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  115142             : 
  115143             :       /*! \brief static variant value */
  115144             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  115145             :        // static const VariantT static_variant = V_SgOmpAffinityClause;
  115146             :           enum { static_variant = V_SgOmpAffinityClause };
  115147             : 
  115148             :        /* the generated cast function */
  115149             :       /*! \brief Casts pointer from base class to derived class */
  115150             :           ROSE_DLL_API friend       SgOmpAffinityClause* isSgOmpAffinityClause(       SgNode * s );
  115151             : 
  115152             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  115153             :           ROSE_DLL_API friend const SgOmpAffinityClause* isSgOmpAffinityClause( const SgNode * s );
  115154             : 
  115155             :      // ******************************************
  115156             :      // * Memory Pool / New / Delete
  115157             :      // ******************************************
  115158             : 
  115159             :      public:
  115160             :           /// \private
  115161             :           static const unsigned pool_size; //
  115162             :           /// \private
  115163             :           static std::vector<unsigned char *> pools; //
  115164             :           /// \private
  115165             :           static SgOmpAffinityClause * next_node; // 
  115166             : 
  115167             :           /// \private
  115168             :           static unsigned long initializeStorageClassArray(SgOmpAffinityClauseStorageClass *); //
  115169             : 
  115170             :           /// \private
  115171             :           static void clearMemoryPool(); //
  115172             :           static void deleteMemoryPool(); //
  115173             : 
  115174             :           /// \private
  115175             :           static void extendMemoryPoolForFileIO(); //
  115176             : 
  115177             :           /// \private
  115178             :           static SgOmpAffinityClause * getPointerFromGlobalIndex(unsigned long); //
  115179             :           /// \private
  115180             :           static SgOmpAffinityClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  115181             : 
  115182             :           /// \private
  115183             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  115184             :           /// \private
  115185             :           static void resetValidFreepointers(); //
  115186             :           /// \private
  115187             :           static unsigned long getNumberOfLastValidPointer(); //
  115188             : 
  115189             : 
  115190             : #if defined(INLINE_FUNCTIONS)
  115191             :       /*! \brief returns pointer to newly allocated IR node */
  115192             :           inline void *operator new (size_t size);
  115193             : #else
  115194             :       /*! \brief returns pointer to newly allocated IR node */
  115195             :           void *operator new (size_t size);
  115196             : #endif
  115197             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  115198             :           void operator delete (void* pointer, size_t size);
  115199             : 
  115200             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  115201           0 :           void operator delete (void* pointer)
  115202             :              {
  115203             :             // This is the generated delete operator...
  115204           0 :                SgOmpAffinityClause::operator delete (pointer,sizeof(SgOmpAffinityClause));
  115205             :              }
  115206             : 
  115207             :       /*! \brief Returns the total number of IR nodes of this type */
  115208             :           static size_t numberOfNodes();
  115209             : 
  115210             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  115211             :           static size_t memoryUsage();
  115212             : 
  115213             :       // End of scope which started in IR nodes specific code 
  115214             :       /* */
  115215             : 
  115216             :       /* name Internal Functions
  115217             :           \brief Internal functions ... incomplete-documentation
  115218             : 
  115219             :           These functions have been made public as part of the design, but they are suggested for internal use 
  115220             :           or by particularly knowledgeable users for specialized tools or applications.
  115221             : 
  115222             :           \internal We could not make these private because they are required by user for special purposes. And 
  115223             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  115224             :          
  115225             :        */
  115226             : 
  115227             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  115228             :        // overridden in every class by *generated* implementation
  115229             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  115230             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  115231             :        // MS: 06/28/02 container of names of variables or container indices 
  115232             :        // used used in the traversal to access AST successor nodes
  115233             :        // overridden in every class by *generated* implementation
  115234             :       /*! \brief container of names of variables or container indices used used in the traversal
  115235             :           to access AST successor nodes overridden in every class by *generated* implementation */
  115236             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  115237             : 
  115238             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  115239             :        // than all the vector copies. The implementation for these functions is generated for each class.
  115240             :       /*! \brief return number of children in the traversal successor list */
  115241             :           virtual size_t get_numberOfTraversalSuccessors() override;
  115242             :       /*! \brief index-based access to traversal successors by index number */
  115243             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  115244             :       /*! \brief index-based access to traversal successors by child node */
  115245             :           virtual size_t get_childIndex(SgNode *child) override;
  115246             : 
  115247             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  115248             :        // MS: 08/16/2002 method for generating RTI information
  115249             :       /*! \brief return C++ Runtime-Time-Information */
  115250             :           virtual RTIReturnType roseRTI() override;
  115251             : #endif
  115252             :       /* */
  115253             : 
  115254             : 
  115255             : 
  115256             :       /* name Deprecated Functions
  115257             :           \brief Deprecated functions ... incomplete-documentation
  115258             : 
  115259             :           These functions have been deprecated from use.
  115260             :        */
  115261             :       /* */
  115262             : 
  115263             :       /*! returns a C style string (char*) representing the class name */
  115264             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  115265             : 
  115266             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  115267             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  115268             : #if 0
  115269             :       /*! returns old style Sage II enum values */
  115270             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  115271             :       /*! returns old style Sage II enum values */
  115272             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  115273             : #endif
  115274             :       /* */
  115275             : 
  115276             : 
  115277             : 
  115278             : 
  115279             :      public:
  115280             :       /* name Traversal Support Functions
  115281             :           \brief Traversal support functions ... incomplete-documentation
  115282             : 
  115283             :           These functions have been made public as part of the design, but they are suggested for internal use 
  115284             :           or by particularly knowledgable users for specialized tools or applications.
  115285             :        */
  115286             :       /* */
  115287             : 
  115288             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  115289             :        // (inferior to ROSE traversal mechanism, experimental).
  115290             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  115291             :        */
  115292             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  115293             : 
  115294             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  115295             :       /*! \brief support for the classic visitor pattern done in GoF */
  115296             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  115297             : 
  115298             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  115299             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  115300             :        */
  115301             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  115302             : 
  115303             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  115304             :        */
  115305             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  115306             : 
  115307             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  115308             :        // This traversal helps support internal tools that call static member functions.
  115309             :        // note: this function operates on the memory pools.
  115310             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  115311             :        */
  115312             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  115313             :       /* */
  115314             : 
  115315             : 
  115316             :      public:
  115317             :       /* name Memory Allocation Functions
  115318             :           \brief Memory allocations functions ... incomplete-documentation
  115319             : 
  115320             :           These functions have been made public as part of the design, but they are suggested for internal use 
  115321             :           or by particularly knowledgable users for specialized tools or applications.
  115322             :        */
  115323             :       /* */
  115324             : 
  115325             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  115326             : 
  115327             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  115328             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  115329             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  115330             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  115331             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  115332             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  115333             :           being used with the AST File I/O mechanism.
  115334             :        */
  115335             :           virtual bool isInMemoryPool() override;
  115336             : 
  115337             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  115338             : 
  115339             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  115340             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  115341             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  115342             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  115343             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  115344             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  115345             :           being used with the AST File I/O mechanism.
  115346             :        */
  115347             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  115348             : 
  115349             :       // DQ (4/30/2006): Modified to be a const function.
  115350             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  115351             : 
  115352             :           This functions is part of general support for many possible tools to operate 
  115353             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  115354             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  115355             :           less than the set of pointers used by the AST file I/O. This is part of
  115356             :           work implemented by Andreas, and support tools such as the AST graph generation.
  115357             : 
  115358             :           \warning This function can return unexpected data members and thus the 
  115359             :                    order and the number of elements is unpredicable and subject 
  115360             :                    to change.
  115361             : 
  115362             :           \returns STL vector of pairs of SgNode* and strings
  115363             :        */
  115364             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  115365             : 
  115366             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  115367             : 
  115368             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  115369             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  115370             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  115371             : 
  115372             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  115373             :                    and subject to change.
  115374             :        */
  115375             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  115376             : 
  115377             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  115378             : 
  115379             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  115380             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  115381             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  115382             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  115383             : 
  115384             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  115385             : 
  115386             :           \returns long
  115387             :        */
  115388             :           virtual long getChildIndex( SgNode* childNode ) const override;
  115389             : 
  115390             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  115391             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  115392             :       /* \brief Constructor for use by AST File I/O Mechanism
  115393             : 
  115394             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  115395             :           which obtained via fast binary file I/O from disk.
  115396             :        */
  115397             :        // SgOmpAffinityClause( SgOmpAffinityClauseStorageClass& source );
  115398             : 
  115399             : 
  115400             : 
  115401             : 
  115402             : 
  115403             :  // JH (10/24/2005): methods added to support the ast file IO
  115404             :     private:
  115405             : 
  115406             :       /* name AST Memory Allocation Support Functions
  115407             :           \brief Memory allocations support....
  115408             : 
  115409             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  115410             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  115411             :           and support the AST File I/O Mechanism.
  115412             :        */
  115413             :       /* */
  115414             : 
  115415             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  115416             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  115417             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  115418             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  115419             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  115420             :           a correspinding one in the AST_FILE_IO class!
  115421             :        */
  115422             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  115423             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  115424             :       /* \brief Typedef used for low level memory access.
  115425             :        */
  115426             :        // typedef unsigned char* TestType;
  115427             : 
  115428             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  115429             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  115430             :       /* \brief Typedef used to hold memory addresses as values.
  115431             :        */
  115432             :        // typedef unsigned long  AddressType;
  115433             : 
  115434             : 
  115435             : 
  115436             :        // necessary, to have direct access to the p_freepointer and the private methods !
  115437             :       /*! \brief friend class declaration to support AST File I/O */
  115438             :           friend class AST_FILE_IO;
  115439             : 
  115440             :       /*! \brief friend class declaration to support AST File I/O */
  115441             :           friend class SgOmpAffinityClauseStorageClass;
  115442             : 
  115443             :       /*! \brief friend class declaration to support AST File I/O */
  115444             :           friend class AstSpecificDataManagingClass;
  115445             : 
  115446             :       /*! \brief friend class declaration to support AST File I/O */
  115447             :           friend class AstSpecificDataManagingClassStorageClass;
  115448             :     public:
  115449             :       /*! \brief IR node constructor to support AST File I/O */
  115450             :           SgOmpAffinityClause( const SgOmpAffinityClauseStorageClass& source );
  115451             : 
  115452             :  // private: // JJW hack
  115453             :        /*
  115454             :           name AST Memory Allocation Support Variables
  115455             :           Memory allocations support variables 
  115456             : 
  115457             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  115458             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  115459             :           and support the AST File I/O Mechanism.
  115460             :        */
  115461             :       /* */
  115462             : 
  115463             :     public:
  115464             : 
  115465             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  115466             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  115467             :       // virtual SgNode* addRegExpAttribute();
  115468             :       /*! \brief Support for AST matching using regular expression.
  115469             : 
  115470             :           This support is incomplete and the subject of current research to define 
  115471             :           RegEx trees to support inexact matching.
  115472             :        */
  115473             :           SgOmpAffinityClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  115474             : 
  115475             : // *** COMMON CODE SECTION ENDS HERE ***
  115476             : 
  115477             : 
  115478             : // End of memberFunctionString
  115479             : // Start of memberFunctionString
  115480             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  115481             : 
  115482             :      // the generated cast function
  115483             :      // friend ROSE_DLL_API SgOmpAffinityClause* isSgOmpAffinityClause ( SgNode* s );
  115484             : 
  115485             :           typedef SgOmpVariablesClause base_node_type;
  115486             : 
  115487             : 
  115488             : // End of memberFunctionString
  115489             : 
  115490             :      public: 
  115491             :          SgOmpClause::omp_affinity_modifier_enum get_affinity_modifier() const;
  115492             :          void set_affinity_modifier(SgOmpClause::omp_affinity_modifier_enum affinity_modifier);
  115493             : 
  115494             :      public: 
  115495             :          std::list<std::list<SgExpression*> > get_iterator() const;
  115496             :          void set_iterator(std::list<std::list<SgExpression*> > iterator);
  115497             : 
  115498             :      public: 
  115499             :          std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > get_array_dimensions() const;
  115500             :          void set_array_dimensions(std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > array_dimensions);
  115501             : 
  115502             : 
  115503             :      public: 
  115504             :          virtual ~SgOmpAffinityClause();
  115505             : 
  115506             : 
  115507             :      public: 
  115508             :          SgOmpAffinityClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_affinity_modifier_enum affinity_modifier =e_omp_affinity_modifier_unspecified); 
  115509             :          SgOmpAffinityClause(SgExprListExp* variables, SgOmpClause::omp_affinity_modifier_enum affinity_modifier); 
  115510             : 
  115511             :     protected:
  115512             : // Start of memberFunctionString
  115513             : SgOmpClause::omp_affinity_modifier_enum p_affinity_modifier;
  115514             :           
  115515             : // End of memberFunctionString
  115516             : // Start of memberFunctionString
  115517             : std::list<std::list<SgExpression*> > p_iterator;
  115518             :           
  115519             : // End of memberFunctionString
  115520             : // Start of memberFunctionString
  115521             : std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > p_array_dimensions;
  115522             :           
  115523             : // End of memberFunctionString
  115524             : 
  115525             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAffinityClause>;
  115526             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAffinityClause, SgOmpClause::omp_affinity_modifier_enum,&SgOmpAffinityClause::p_affinity_modifier>;
  115527             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAffinityClause, std::list<std::list<SgExpression*> >,&SgOmpAffinityClause::p_iterator>;
  115528             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAffinityClause, std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > >,&SgOmpAffinityClause::p_array_dimensions>;
  115529             : 
  115530             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115531             : 
  115532             : 
  115533             :    };
  115534             : #endif
  115535             : 
  115536             : // postdeclarations for SgOmpAffinityClause
  115537             : 
  115538             : /* #line 115539 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115539             : 
  115540             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  115541             : 
  115542             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115543             : 
  115544             : 
  115545             : /* #line 115546 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115546             : 
  115547             : 
  115548             : 
  115549             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115550             : 
  115551             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  115552             : //      This code is automatically generated for each 
  115553             : //      terminal and non-terminal within the defined 
  115554             : //      grammar.  There is a simple way to change the 
  115555             : //      code to fix bugs etc.  See the ROSE README file
  115556             : //      for directions.
  115557             : 
  115558             : // tps: (02/22/2010): Adding DLL export requirements
  115559             : #include "rosedll.h"
  115560             : 
  115561             : // predeclarations for SgOmpToClause
  115562             : 
  115563             : /* #line 115564 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115564             : 
  115565             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  115566             : 
  115567             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115568             : 
  115569             : #if 1
  115570             : // Class Definition for SgOmpToClause
  115571             : class ROSE_DLL_API SgOmpToClause  : public SgOmpVariablesClause
  115572             :    {
  115573             :      public:
  115574             : 
  115575             : 
  115576             : /* #line 115577 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115577             : 
  115578             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  115579             : // Start of memberFunctionString
  115580             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  115581             : 
  115582             : // *** COMMON CODE SECTION BEGINS HERE ***
  115583             : 
  115584             :     public:
  115585             : 
  115586             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  115587             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  115588             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  115589             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  115590             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  115591             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  115592             : 
  115593             :       /*! \brief returns a string representing the class name */
  115594             :           virtual std::string class_name() const override;
  115595             : 
  115596             :       /*! \brief returns new style SageIII enum values */
  115597             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  115598             : 
  115599             :       /*! \brief static variant value */
  115600             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  115601             :        // static const VariantT static_variant = V_SgOmpToClause;
  115602             :           enum { static_variant = V_SgOmpToClause };
  115603             : 
  115604             :        /* the generated cast function */
  115605             :       /*! \brief Casts pointer from base class to derived class */
  115606             :           ROSE_DLL_API friend       SgOmpToClause* isSgOmpToClause(       SgNode * s );
  115607             : 
  115608             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  115609             :           ROSE_DLL_API friend const SgOmpToClause* isSgOmpToClause( const SgNode * s );
  115610             : 
  115611             :      // ******************************************
  115612             :      // * Memory Pool / New / Delete
  115613             :      // ******************************************
  115614             : 
  115615             :      public:
  115616             :           /// \private
  115617             :           static const unsigned pool_size; //
  115618             :           /// \private
  115619             :           static std::vector<unsigned char *> pools; //
  115620             :           /// \private
  115621             :           static SgOmpToClause * next_node; // 
  115622             : 
  115623             :           /// \private
  115624             :           static unsigned long initializeStorageClassArray(SgOmpToClauseStorageClass *); //
  115625             : 
  115626             :           /// \private
  115627             :           static void clearMemoryPool(); //
  115628             :           static void deleteMemoryPool(); //
  115629             : 
  115630             :           /// \private
  115631             :           static void extendMemoryPoolForFileIO(); //
  115632             : 
  115633             :           /// \private
  115634             :           static SgOmpToClause * getPointerFromGlobalIndex(unsigned long); //
  115635             :           /// \private
  115636             :           static SgOmpToClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  115637             : 
  115638             :           /// \private
  115639             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  115640             :           /// \private
  115641             :           static void resetValidFreepointers(); //
  115642             :           /// \private
  115643             :           static unsigned long getNumberOfLastValidPointer(); //
  115644             : 
  115645             : 
  115646             : #if defined(INLINE_FUNCTIONS)
  115647             :       /*! \brief returns pointer to newly allocated IR node */
  115648             :           inline void *operator new (size_t size);
  115649             : #else
  115650             :       /*! \brief returns pointer to newly allocated IR node */
  115651             :           void *operator new (size_t size);
  115652             : #endif
  115653             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  115654             :           void operator delete (void* pointer, size_t size);
  115655             : 
  115656             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  115657           0 :           void operator delete (void* pointer)
  115658             :              {
  115659             :             // This is the generated delete operator...
  115660           0 :                SgOmpToClause::operator delete (pointer,sizeof(SgOmpToClause));
  115661             :              }
  115662             : 
  115663             :       /*! \brief Returns the total number of IR nodes of this type */
  115664             :           static size_t numberOfNodes();
  115665             : 
  115666             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  115667             :           static size_t memoryUsage();
  115668             : 
  115669             :       // End of scope which started in IR nodes specific code 
  115670             :       /* */
  115671             : 
  115672             :       /* name Internal Functions
  115673             :           \brief Internal functions ... incomplete-documentation
  115674             : 
  115675             :           These functions have been made public as part of the design, but they are suggested for internal use 
  115676             :           or by particularly knowledgeable users for specialized tools or applications.
  115677             : 
  115678             :           \internal We could not make these private because they are required by user for special purposes. And 
  115679             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  115680             :          
  115681             :        */
  115682             : 
  115683             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  115684             :        // overridden in every class by *generated* implementation
  115685             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  115686             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  115687             :        // MS: 06/28/02 container of names of variables or container indices 
  115688             :        // used used in the traversal to access AST successor nodes
  115689             :        // overridden in every class by *generated* implementation
  115690             :       /*! \brief container of names of variables or container indices used used in the traversal
  115691             :           to access AST successor nodes overridden in every class by *generated* implementation */
  115692             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  115693             : 
  115694             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  115695             :        // than all the vector copies. The implementation for these functions is generated for each class.
  115696             :       /*! \brief return number of children in the traversal successor list */
  115697             :           virtual size_t get_numberOfTraversalSuccessors() override;
  115698             :       /*! \brief index-based access to traversal successors by index number */
  115699             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  115700             :       /*! \brief index-based access to traversal successors by child node */
  115701             :           virtual size_t get_childIndex(SgNode *child) override;
  115702             : 
  115703             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  115704             :        // MS: 08/16/2002 method for generating RTI information
  115705             :       /*! \brief return C++ Runtime-Time-Information */
  115706             :           virtual RTIReturnType roseRTI() override;
  115707             : #endif
  115708             :       /* */
  115709             : 
  115710             : 
  115711             : 
  115712             :       /* name Deprecated Functions
  115713             :           \brief Deprecated functions ... incomplete-documentation
  115714             : 
  115715             :           These functions have been deprecated from use.
  115716             :        */
  115717             :       /* */
  115718             : 
  115719             :       /*! returns a C style string (char*) representing the class name */
  115720             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  115721             : 
  115722             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  115723             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  115724             : #if 0
  115725             :       /*! returns old style Sage II enum values */
  115726             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  115727             :       /*! returns old style Sage II enum values */
  115728             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  115729             : #endif
  115730             :       /* */
  115731             : 
  115732             : 
  115733             : 
  115734             : 
  115735             :      public:
  115736             :       /* name Traversal Support Functions
  115737             :           \brief Traversal support functions ... incomplete-documentation
  115738             : 
  115739             :           These functions have been made public as part of the design, but they are suggested for internal use 
  115740             :           or by particularly knowledgable users for specialized tools or applications.
  115741             :        */
  115742             :       /* */
  115743             : 
  115744             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  115745             :        // (inferior to ROSE traversal mechanism, experimental).
  115746             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  115747             :        */
  115748             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  115749             : 
  115750             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  115751             :       /*! \brief support for the classic visitor pattern done in GoF */
  115752             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  115753             : 
  115754             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  115755             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  115756             :        */
  115757             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  115758             : 
  115759             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  115760             :        */
  115761             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  115762             : 
  115763             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  115764             :        // This traversal helps support internal tools that call static member functions.
  115765             :        // note: this function operates on the memory pools.
  115766             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  115767             :        */
  115768             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  115769             :       /* */
  115770             : 
  115771             : 
  115772             :      public:
  115773             :       /* name Memory Allocation Functions
  115774             :           \brief Memory allocations functions ... incomplete-documentation
  115775             : 
  115776             :           These functions have been made public as part of the design, but they are suggested for internal use 
  115777             :           or by particularly knowledgable users for specialized tools or applications.
  115778             :        */
  115779             :       /* */
  115780             : 
  115781             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  115782             : 
  115783             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  115784             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  115785             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  115786             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  115787             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  115788             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  115789             :           being used with the AST File I/O mechanism.
  115790             :        */
  115791             :           virtual bool isInMemoryPool() override;
  115792             : 
  115793             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  115794             : 
  115795             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  115796             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  115797             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  115798             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  115799             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  115800             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  115801             :           being used with the AST File I/O mechanism.
  115802             :        */
  115803             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  115804             : 
  115805             :       // DQ (4/30/2006): Modified to be a const function.
  115806             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  115807             : 
  115808             :           This functions is part of general support for many possible tools to operate 
  115809             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  115810             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  115811             :           less than the set of pointers used by the AST file I/O. This is part of
  115812             :           work implemented by Andreas, and support tools such as the AST graph generation.
  115813             : 
  115814             :           \warning This function can return unexpected data members and thus the 
  115815             :                    order and the number of elements is unpredicable and subject 
  115816             :                    to change.
  115817             : 
  115818             :           \returns STL vector of pairs of SgNode* and strings
  115819             :        */
  115820             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  115821             : 
  115822             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  115823             : 
  115824             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  115825             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  115826             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  115827             : 
  115828             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  115829             :                    and subject to change.
  115830             :        */
  115831             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  115832             : 
  115833             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  115834             : 
  115835             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  115836             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  115837             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  115838             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  115839             : 
  115840             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  115841             : 
  115842             :           \returns long
  115843             :        */
  115844             :           virtual long getChildIndex( SgNode* childNode ) const override;
  115845             : 
  115846             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  115847             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  115848             :       /* \brief Constructor for use by AST File I/O Mechanism
  115849             : 
  115850             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  115851             :           which obtained via fast binary file I/O from disk.
  115852             :        */
  115853             :        // SgOmpToClause( SgOmpToClauseStorageClass& source );
  115854             : 
  115855             : 
  115856             : 
  115857             : 
  115858             : 
  115859             :  // JH (10/24/2005): methods added to support the ast file IO
  115860             :     private:
  115861             : 
  115862             :       /* name AST Memory Allocation Support Functions
  115863             :           \brief Memory allocations support....
  115864             : 
  115865             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  115866             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  115867             :           and support the AST File I/O Mechanism.
  115868             :        */
  115869             :       /* */
  115870             : 
  115871             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  115872             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  115873             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  115874             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  115875             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  115876             :           a correspinding one in the AST_FILE_IO class!
  115877             :        */
  115878             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  115879             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  115880             :       /* \brief Typedef used for low level memory access.
  115881             :        */
  115882             :        // typedef unsigned char* TestType;
  115883             : 
  115884             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  115885             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  115886             :       /* \brief Typedef used to hold memory addresses as values.
  115887             :        */
  115888             :        // typedef unsigned long  AddressType;
  115889             : 
  115890             : 
  115891             : 
  115892             :        // necessary, to have direct access to the p_freepointer and the private methods !
  115893             :       /*! \brief friend class declaration to support AST File I/O */
  115894             :           friend class AST_FILE_IO;
  115895             : 
  115896             :       /*! \brief friend class declaration to support AST File I/O */
  115897             :           friend class SgOmpToClauseStorageClass;
  115898             : 
  115899             :       /*! \brief friend class declaration to support AST File I/O */
  115900             :           friend class AstSpecificDataManagingClass;
  115901             : 
  115902             :       /*! \brief friend class declaration to support AST File I/O */
  115903             :           friend class AstSpecificDataManagingClassStorageClass;
  115904             :     public:
  115905             :       /*! \brief IR node constructor to support AST File I/O */
  115906             :           SgOmpToClause( const SgOmpToClauseStorageClass& source );
  115907             : 
  115908             :  // private: // JJW hack
  115909             :        /*
  115910             :           name AST Memory Allocation Support Variables
  115911             :           Memory allocations support variables 
  115912             : 
  115913             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  115914             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  115915             :           and support the AST File I/O Mechanism.
  115916             :        */
  115917             :       /* */
  115918             : 
  115919             :     public:
  115920             : 
  115921             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  115922             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  115923             :       // virtual SgNode* addRegExpAttribute();
  115924             :       /*! \brief Support for AST matching using regular expression.
  115925             : 
  115926             :           This support is incomplete and the subject of current research to define 
  115927             :           RegEx trees to support inexact matching.
  115928             :        */
  115929             :           SgOmpToClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  115930             : 
  115931             : // *** COMMON CODE SECTION ENDS HERE ***
  115932             : 
  115933             : 
  115934             : // End of memberFunctionString
  115935             : // Start of memberFunctionString
  115936             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  115937             : 
  115938             :      // the generated cast function
  115939             :      // friend ROSE_DLL_API SgOmpToClause* isSgOmpToClause ( SgNode* s );
  115940             : 
  115941             :           typedef SgOmpVariablesClause base_node_type;
  115942             : 
  115943             : 
  115944             : // End of memberFunctionString
  115945             : 
  115946             :      public: 
  115947             :          SgOmpClause::omp_to_kind_enum get_kind() const;
  115948             :          void set_kind(SgOmpClause::omp_to_kind_enum kind);
  115949             : 
  115950             :      public: 
  115951             :          SgExpression* get_mapper_identifier() const;
  115952             :          void set_mapper_identifier(SgExpression* mapper_identifier);
  115953             : 
  115954             :      public: 
  115955             :          std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > get_array_dimensions() const;
  115956             :          void set_array_dimensions(std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > array_dimensions);
  115957             : 
  115958             : 
  115959             :      public: 
  115960             :          virtual ~SgOmpToClause();
  115961             : 
  115962             : 
  115963             :      public: 
  115964             :          SgOmpToClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_to_kind_enum kind =e_omp_to_kind_unknown); 
  115965             :          SgOmpToClause(SgExprListExp* variables, SgOmpClause::omp_to_kind_enum kind); 
  115966             : 
  115967             :     protected:
  115968             : // Start of memberFunctionString
  115969             : SgOmpClause::omp_to_kind_enum p_kind;
  115970             :           
  115971             : // End of memberFunctionString
  115972             : // Start of memberFunctionString
  115973             : SgExpression* p_mapper_identifier;
  115974             :           
  115975             : // End of memberFunctionString
  115976             : // Start of memberFunctionString
  115977             : std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > p_array_dimensions;
  115978             :           
  115979             : // End of memberFunctionString
  115980             : 
  115981             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpToClause>;
  115982             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpToClause, SgOmpClause::omp_to_kind_enum,&SgOmpToClause::p_kind>;
  115983             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpToClause, SgExpression*,&SgOmpToClause::p_mapper_identifier>;
  115984             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpToClause, std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > >,&SgOmpToClause::p_array_dimensions>;
  115985             : 
  115986             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115987             : 
  115988             : 
  115989             :    };
  115990             : #endif
  115991             : 
  115992             : // postdeclarations for SgOmpToClause
  115993             : 
  115994             : /* #line 115995 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  115995             : 
  115996             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  115997             : 
  115998             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  115999             : 
  116000             : 
  116001             : /* #line 116002 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116002             : 
  116003             : 
  116004             : 
  116005             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116006             : 
  116007             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  116008             : //      This code is automatically generated for each 
  116009             : //      terminal and non-terminal within the defined 
  116010             : //      grammar.  There is a simple way to change the 
  116011             : //      code to fix bugs etc.  See the ROSE README file
  116012             : //      for directions.
  116013             : 
  116014             : // tps: (02/22/2010): Adding DLL export requirements
  116015             : #include "rosedll.h"
  116016             : 
  116017             : // predeclarations for SgOmpFromClause
  116018             : 
  116019             : /* #line 116020 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116020             : 
  116021             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  116022             : 
  116023             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116024             : 
  116025             : #if 1
  116026             : // Class Definition for SgOmpFromClause
  116027             : class ROSE_DLL_API SgOmpFromClause  : public SgOmpVariablesClause
  116028             :    {
  116029             :      public:
  116030             : 
  116031             : 
  116032             : /* #line 116033 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116033             : 
  116034             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  116035             : // Start of memberFunctionString
  116036             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  116037             : 
  116038             : // *** COMMON CODE SECTION BEGINS HERE ***
  116039             : 
  116040             :     public:
  116041             : 
  116042             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  116043             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  116044             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  116045             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  116046             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  116047             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  116048             : 
  116049             :       /*! \brief returns a string representing the class name */
  116050             :           virtual std::string class_name() const override;
  116051             : 
  116052             :       /*! \brief returns new style SageIII enum values */
  116053             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  116054             : 
  116055             :       /*! \brief static variant value */
  116056             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  116057             :        // static const VariantT static_variant = V_SgOmpFromClause;
  116058             :           enum { static_variant = V_SgOmpFromClause };
  116059             : 
  116060             :        /* the generated cast function */
  116061             :       /*! \brief Casts pointer from base class to derived class */
  116062             :           ROSE_DLL_API friend       SgOmpFromClause* isSgOmpFromClause(       SgNode * s );
  116063             : 
  116064             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  116065             :           ROSE_DLL_API friend const SgOmpFromClause* isSgOmpFromClause( const SgNode * s );
  116066             : 
  116067             :      // ******************************************
  116068             :      // * Memory Pool / New / Delete
  116069             :      // ******************************************
  116070             : 
  116071             :      public:
  116072             :           /// \private
  116073             :           static const unsigned pool_size; //
  116074             :           /// \private
  116075             :           static std::vector<unsigned char *> pools; //
  116076             :           /// \private
  116077             :           static SgOmpFromClause * next_node; // 
  116078             : 
  116079             :           /// \private
  116080             :           static unsigned long initializeStorageClassArray(SgOmpFromClauseStorageClass *); //
  116081             : 
  116082             :           /// \private
  116083             :           static void clearMemoryPool(); //
  116084             :           static void deleteMemoryPool(); //
  116085             : 
  116086             :           /// \private
  116087             :           static void extendMemoryPoolForFileIO(); //
  116088             : 
  116089             :           /// \private
  116090             :           static SgOmpFromClause * getPointerFromGlobalIndex(unsigned long); //
  116091             :           /// \private
  116092             :           static SgOmpFromClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  116093             : 
  116094             :           /// \private
  116095             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  116096             :           /// \private
  116097             :           static void resetValidFreepointers(); //
  116098             :           /// \private
  116099             :           static unsigned long getNumberOfLastValidPointer(); //
  116100             : 
  116101             : 
  116102             : #if defined(INLINE_FUNCTIONS)
  116103             :       /*! \brief returns pointer to newly allocated IR node */
  116104             :           inline void *operator new (size_t size);
  116105             : #else
  116106             :       /*! \brief returns pointer to newly allocated IR node */
  116107             :           void *operator new (size_t size);
  116108             : #endif
  116109             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  116110             :           void operator delete (void* pointer, size_t size);
  116111             : 
  116112             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  116113           0 :           void operator delete (void* pointer)
  116114             :              {
  116115             :             // This is the generated delete operator...
  116116           0 :                SgOmpFromClause::operator delete (pointer,sizeof(SgOmpFromClause));
  116117             :              }
  116118             : 
  116119             :       /*! \brief Returns the total number of IR nodes of this type */
  116120             :           static size_t numberOfNodes();
  116121             : 
  116122             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  116123             :           static size_t memoryUsage();
  116124             : 
  116125             :       // End of scope which started in IR nodes specific code 
  116126             :       /* */
  116127             : 
  116128             :       /* name Internal Functions
  116129             :           \brief Internal functions ... incomplete-documentation
  116130             : 
  116131             :           These functions have been made public as part of the design, but they are suggested for internal use 
  116132             :           or by particularly knowledgeable users for specialized tools or applications.
  116133             : 
  116134             :           \internal We could not make these private because they are required by user for special purposes. And 
  116135             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  116136             :          
  116137             :        */
  116138             : 
  116139             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  116140             :        // overridden in every class by *generated* implementation
  116141             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  116142             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  116143             :        // MS: 06/28/02 container of names of variables or container indices 
  116144             :        // used used in the traversal to access AST successor nodes
  116145             :        // overridden in every class by *generated* implementation
  116146             :       /*! \brief container of names of variables or container indices used used in the traversal
  116147             :           to access AST successor nodes overridden in every class by *generated* implementation */
  116148             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  116149             : 
  116150             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  116151             :        // than all the vector copies. The implementation for these functions is generated for each class.
  116152             :       /*! \brief return number of children in the traversal successor list */
  116153             :           virtual size_t get_numberOfTraversalSuccessors() override;
  116154             :       /*! \brief index-based access to traversal successors by index number */
  116155             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  116156             :       /*! \brief index-based access to traversal successors by child node */
  116157             :           virtual size_t get_childIndex(SgNode *child) override;
  116158             : 
  116159             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  116160             :        // MS: 08/16/2002 method for generating RTI information
  116161             :       /*! \brief return C++ Runtime-Time-Information */
  116162             :           virtual RTIReturnType roseRTI() override;
  116163             : #endif
  116164             :       /* */
  116165             : 
  116166             : 
  116167             : 
  116168             :       /* name Deprecated Functions
  116169             :           \brief Deprecated functions ... incomplete-documentation
  116170             : 
  116171             :           These functions have been deprecated from use.
  116172             :        */
  116173             :       /* */
  116174             : 
  116175             :       /*! returns a C style string (char*) representing the class name */
  116176             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  116177             : 
  116178             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  116179             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  116180             : #if 0
  116181             :       /*! returns old style Sage II enum values */
  116182             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  116183             :       /*! returns old style Sage II enum values */
  116184             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  116185             : #endif
  116186             :       /* */
  116187             : 
  116188             : 
  116189             : 
  116190             : 
  116191             :      public:
  116192             :       /* name Traversal Support Functions
  116193             :           \brief Traversal support functions ... incomplete-documentation
  116194             : 
  116195             :           These functions have been made public as part of the design, but they are suggested for internal use 
  116196             :           or by particularly knowledgable users for specialized tools or applications.
  116197             :        */
  116198             :       /* */
  116199             : 
  116200             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  116201             :        // (inferior to ROSE traversal mechanism, experimental).
  116202             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  116203             :        */
  116204             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  116205             : 
  116206             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  116207             :       /*! \brief support for the classic visitor pattern done in GoF */
  116208             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  116209             : 
  116210             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  116211             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  116212             :        */
  116213             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  116214             : 
  116215             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  116216             :        */
  116217             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  116218             : 
  116219             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  116220             :        // This traversal helps support internal tools that call static member functions.
  116221             :        // note: this function operates on the memory pools.
  116222             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  116223             :        */
  116224             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  116225             :       /* */
  116226             : 
  116227             : 
  116228             :      public:
  116229             :       /* name Memory Allocation Functions
  116230             :           \brief Memory allocations functions ... incomplete-documentation
  116231             : 
  116232             :           These functions have been made public as part of the design, but they are suggested for internal use 
  116233             :           or by particularly knowledgable users for specialized tools or applications.
  116234             :        */
  116235             :       /* */
  116236             : 
  116237             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  116238             : 
  116239             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  116240             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  116241             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  116242             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  116243             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  116244             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  116245             :           being used with the AST File I/O mechanism.
  116246             :        */
  116247             :           virtual bool isInMemoryPool() override;
  116248             : 
  116249             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  116250             : 
  116251             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  116252             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  116253             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  116254             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  116255             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  116256             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  116257             :           being used with the AST File I/O mechanism.
  116258             :        */
  116259             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  116260             : 
  116261             :       // DQ (4/30/2006): Modified to be a const function.
  116262             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  116263             : 
  116264             :           This functions is part of general support for many possible tools to operate 
  116265             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  116266             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  116267             :           less than the set of pointers used by the AST file I/O. This is part of
  116268             :           work implemented by Andreas, and support tools such as the AST graph generation.
  116269             : 
  116270             :           \warning This function can return unexpected data members and thus the 
  116271             :                    order and the number of elements is unpredicable and subject 
  116272             :                    to change.
  116273             : 
  116274             :           \returns STL vector of pairs of SgNode* and strings
  116275             :        */
  116276             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  116277             : 
  116278             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  116279             : 
  116280             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  116281             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  116282             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  116283             : 
  116284             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  116285             :                    and subject to change.
  116286             :        */
  116287             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  116288             : 
  116289             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  116290             : 
  116291             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  116292             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  116293             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  116294             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  116295             : 
  116296             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  116297             : 
  116298             :           \returns long
  116299             :        */
  116300             :           virtual long getChildIndex( SgNode* childNode ) const override;
  116301             : 
  116302             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  116303             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  116304             :       /* \brief Constructor for use by AST File I/O Mechanism
  116305             : 
  116306             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  116307             :           which obtained via fast binary file I/O from disk.
  116308             :        */
  116309             :        // SgOmpFromClause( SgOmpFromClauseStorageClass& source );
  116310             : 
  116311             : 
  116312             : 
  116313             : 
  116314             : 
  116315             :  // JH (10/24/2005): methods added to support the ast file IO
  116316             :     private:
  116317             : 
  116318             :       /* name AST Memory Allocation Support Functions
  116319             :           \brief Memory allocations support....
  116320             : 
  116321             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  116322             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  116323             :           and support the AST File I/O Mechanism.
  116324             :        */
  116325             :       /* */
  116326             : 
  116327             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  116328             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  116329             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  116330             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  116331             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  116332             :           a correspinding one in the AST_FILE_IO class!
  116333             :        */
  116334             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  116335             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  116336             :       /* \brief Typedef used for low level memory access.
  116337             :        */
  116338             :        // typedef unsigned char* TestType;
  116339             : 
  116340             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  116341             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  116342             :       /* \brief Typedef used to hold memory addresses as values.
  116343             :        */
  116344             :        // typedef unsigned long  AddressType;
  116345             : 
  116346             : 
  116347             : 
  116348             :        // necessary, to have direct access to the p_freepointer and the private methods !
  116349             :       /*! \brief friend class declaration to support AST File I/O */
  116350             :           friend class AST_FILE_IO;
  116351             : 
  116352             :       /*! \brief friend class declaration to support AST File I/O */
  116353             :           friend class SgOmpFromClauseStorageClass;
  116354             : 
  116355             :       /*! \brief friend class declaration to support AST File I/O */
  116356             :           friend class AstSpecificDataManagingClass;
  116357             : 
  116358             :       /*! \brief friend class declaration to support AST File I/O */
  116359             :           friend class AstSpecificDataManagingClassStorageClass;
  116360             :     public:
  116361             :       /*! \brief IR node constructor to support AST File I/O */
  116362             :           SgOmpFromClause( const SgOmpFromClauseStorageClass& source );
  116363             : 
  116364             :  // private: // JJW hack
  116365             :        /*
  116366             :           name AST Memory Allocation Support Variables
  116367             :           Memory allocations support variables 
  116368             : 
  116369             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  116370             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  116371             :           and support the AST File I/O Mechanism.
  116372             :        */
  116373             :       /* */
  116374             : 
  116375             :     public:
  116376             : 
  116377             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  116378             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  116379             :       // virtual SgNode* addRegExpAttribute();
  116380             :       /*! \brief Support for AST matching using regular expression.
  116381             : 
  116382             :           This support is incomplete and the subject of current research to define 
  116383             :           RegEx trees to support inexact matching.
  116384             :        */
  116385             :           SgOmpFromClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  116386             : 
  116387             : // *** COMMON CODE SECTION ENDS HERE ***
  116388             : 
  116389             : 
  116390             : // End of memberFunctionString
  116391             : // Start of memberFunctionString
  116392             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  116393             : 
  116394             :      // the generated cast function
  116395             :      // friend ROSE_DLL_API SgOmpFromClause* isSgOmpFromClause ( SgNode* s );
  116396             : 
  116397             :           typedef SgOmpVariablesClause base_node_type;
  116398             : 
  116399             : 
  116400             : // End of memberFunctionString
  116401             : 
  116402             :      public: 
  116403             :          SgOmpClause::omp_from_kind_enum get_kind() const;
  116404             :          void set_kind(SgOmpClause::omp_from_kind_enum kind);
  116405             : 
  116406             :      public: 
  116407             :          SgExpression* get_mapper_identifier() const;
  116408             :          void set_mapper_identifier(SgExpression* mapper_identifier);
  116409             : 
  116410             :      public: 
  116411             :          std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > get_array_dimensions() const;
  116412             :          void set_array_dimensions(std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > array_dimensions);
  116413             : 
  116414             : 
  116415             :      public: 
  116416             :          virtual ~SgOmpFromClause();
  116417             : 
  116418             : 
  116419             :      public: 
  116420             :          SgOmpFromClause(Sg_File_Info* startOfConstruct , SgExprListExp* variables = NULL, SgOmpClause::omp_from_kind_enum kind =e_omp_from_kind_unknown); 
  116421             :          SgOmpFromClause(SgExprListExp* variables, SgOmpClause::omp_from_kind_enum kind); 
  116422             : 
  116423             :     protected:
  116424             : // Start of memberFunctionString
  116425             : SgOmpClause::omp_from_kind_enum p_kind;
  116426             :           
  116427             : // End of memberFunctionString
  116428             : // Start of memberFunctionString
  116429             : SgExpression* p_mapper_identifier;
  116430             :           
  116431             : // End of memberFunctionString
  116432             : // Start of memberFunctionString
  116433             : std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > > p_array_dimensions;
  116434             :           
  116435             : // End of memberFunctionString
  116436             : 
  116437             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpFromClause>;
  116438             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpFromClause, SgOmpClause::omp_from_kind_enum,&SgOmpFromClause::p_kind>;
  116439             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpFromClause, SgExpression*,&SgOmpFromClause::p_mapper_identifier>;
  116440             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpFromClause, std::map<SgSymbol*,  std::vector < std::pair <SgExpression*, SgExpression*> > >,&SgOmpFromClause::p_array_dimensions>;
  116441             : 
  116442             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116443             : 
  116444             : 
  116445             :    };
  116446             : #endif
  116447             : 
  116448             : // postdeclarations for SgOmpFromClause
  116449             : 
  116450             : /* #line 116451 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116451             : 
  116452             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  116453             : 
  116454             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116455             : 
  116456             : 
  116457             : /* #line 116458 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116458             : 
  116459             : 
  116460             : 
  116461             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116462             : 
  116463             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  116464             : //      This code is automatically generated for each 
  116465             : //      terminal and non-terminal within the defined 
  116466             : //      grammar.  There is a simple way to change the 
  116467             : //      code to fix bugs etc.  See the ROSE README file
  116468             : //      for directions.
  116469             : 
  116470             : // tps: (02/22/2010): Adding DLL export requirements
  116471             : #include "rosedll.h"
  116472             : 
  116473             : // predeclarations for SgOmpScheduleClause
  116474             : 
  116475             : /* #line 116476 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116476             : 
  116477             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  116478             : 
  116479             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116480             : 
  116481             : #if 1
  116482             : // Class Definition for SgOmpScheduleClause
  116483             : class ROSE_DLL_API SgOmpScheduleClause  : public SgOmpClause
  116484             :    {
  116485             :      public:
  116486             : 
  116487             : 
  116488             : /* #line 116489 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116489             : 
  116490             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  116491             : // Start of memberFunctionString
  116492             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  116493             : 
  116494             : // *** COMMON CODE SECTION BEGINS HERE ***
  116495             : 
  116496             :     public:
  116497             : 
  116498             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  116499             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  116500             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  116501             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  116502             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  116503             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  116504             : 
  116505             :       /*! \brief returns a string representing the class name */
  116506             :           virtual std::string class_name() const override;
  116507             : 
  116508             :       /*! \brief returns new style SageIII enum values */
  116509             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  116510             : 
  116511             :       /*! \brief static variant value */
  116512             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  116513             :        // static const VariantT static_variant = V_SgOmpScheduleClause;
  116514             :           enum { static_variant = V_SgOmpScheduleClause };
  116515             : 
  116516             :        /* the generated cast function */
  116517             :       /*! \brief Casts pointer from base class to derived class */
  116518             :           ROSE_DLL_API friend       SgOmpScheduleClause* isSgOmpScheduleClause(       SgNode * s );
  116519             : 
  116520             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  116521             :           ROSE_DLL_API friend const SgOmpScheduleClause* isSgOmpScheduleClause( const SgNode * s );
  116522             : 
  116523             :      // ******************************************
  116524             :      // * Memory Pool / New / Delete
  116525             :      // ******************************************
  116526             : 
  116527             :      public:
  116528             :           /// \private
  116529             :           static const unsigned pool_size; //
  116530             :           /// \private
  116531             :           static std::vector<unsigned char *> pools; //
  116532             :           /// \private
  116533             :           static SgOmpScheduleClause * next_node; // 
  116534             : 
  116535             :           /// \private
  116536             :           static unsigned long initializeStorageClassArray(SgOmpScheduleClauseStorageClass *); //
  116537             : 
  116538             :           /// \private
  116539             :           static void clearMemoryPool(); //
  116540             :           static void deleteMemoryPool(); //
  116541             : 
  116542             :           /// \private
  116543             :           static void extendMemoryPoolForFileIO(); //
  116544             : 
  116545             :           /// \private
  116546             :           static SgOmpScheduleClause * getPointerFromGlobalIndex(unsigned long); //
  116547             :           /// \private
  116548             :           static SgOmpScheduleClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  116549             : 
  116550             :           /// \private
  116551             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  116552             :           /// \private
  116553             :           static void resetValidFreepointers(); //
  116554             :           /// \private
  116555             :           static unsigned long getNumberOfLastValidPointer(); //
  116556             : 
  116557             : 
  116558             : #if defined(INLINE_FUNCTIONS)
  116559             :       /*! \brief returns pointer to newly allocated IR node */
  116560             :           inline void *operator new (size_t size);
  116561             : #else
  116562             :       /*! \brief returns pointer to newly allocated IR node */
  116563             :           void *operator new (size_t size);
  116564             : #endif
  116565             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  116566             :           void operator delete (void* pointer, size_t size);
  116567             : 
  116568             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  116569           0 :           void operator delete (void* pointer)
  116570             :              {
  116571             :             // This is the generated delete operator...
  116572           0 :                SgOmpScheduleClause::operator delete (pointer,sizeof(SgOmpScheduleClause));
  116573             :              }
  116574             : 
  116575             :       /*! \brief Returns the total number of IR nodes of this type */
  116576             :           static size_t numberOfNodes();
  116577             : 
  116578             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  116579             :           static size_t memoryUsage();
  116580             : 
  116581             :       // End of scope which started in IR nodes specific code 
  116582             :       /* */
  116583             : 
  116584             :       /* name Internal Functions
  116585             :           \brief Internal functions ... incomplete-documentation
  116586             : 
  116587             :           These functions have been made public as part of the design, but they are suggested for internal use 
  116588             :           or by particularly knowledgeable users for specialized tools or applications.
  116589             : 
  116590             :           \internal We could not make these private because they are required by user for special purposes. And 
  116591             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  116592             :          
  116593             :        */
  116594             : 
  116595             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  116596             :        // overridden in every class by *generated* implementation
  116597             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  116598             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  116599             :        // MS: 06/28/02 container of names of variables or container indices 
  116600             :        // used used in the traversal to access AST successor nodes
  116601             :        // overridden in every class by *generated* implementation
  116602             :       /*! \brief container of names of variables or container indices used used in the traversal
  116603             :           to access AST successor nodes overridden in every class by *generated* implementation */
  116604             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  116605             : 
  116606             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  116607             :        // than all the vector copies. The implementation for these functions is generated for each class.
  116608             :       /*! \brief return number of children in the traversal successor list */
  116609             :           virtual size_t get_numberOfTraversalSuccessors() override;
  116610             :       /*! \brief index-based access to traversal successors by index number */
  116611             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  116612             :       /*! \brief index-based access to traversal successors by child node */
  116613             :           virtual size_t get_childIndex(SgNode *child) override;
  116614             : 
  116615             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  116616             :        // MS: 08/16/2002 method for generating RTI information
  116617             :       /*! \brief return C++ Runtime-Time-Information */
  116618             :           virtual RTIReturnType roseRTI() override;
  116619             : #endif
  116620             :       /* */
  116621             : 
  116622             : 
  116623             : 
  116624             :       /* name Deprecated Functions
  116625             :           \brief Deprecated functions ... incomplete-documentation
  116626             : 
  116627             :           These functions have been deprecated from use.
  116628             :        */
  116629             :       /* */
  116630             : 
  116631             :       /*! returns a C style string (char*) representing the class name */
  116632             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  116633             : 
  116634             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  116635             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  116636             : #if 0
  116637             :       /*! returns old style Sage II enum values */
  116638             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  116639             :       /*! returns old style Sage II enum values */
  116640             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  116641             : #endif
  116642             :       /* */
  116643             : 
  116644             : 
  116645             : 
  116646             : 
  116647             :      public:
  116648             :       /* name Traversal Support Functions
  116649             :           \brief Traversal support functions ... incomplete-documentation
  116650             : 
  116651             :           These functions have been made public as part of the design, but they are suggested for internal use 
  116652             :           or by particularly knowledgable users for specialized tools or applications.
  116653             :        */
  116654             :       /* */
  116655             : 
  116656             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  116657             :        // (inferior to ROSE traversal mechanism, experimental).
  116658             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  116659             :        */
  116660             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  116661             : 
  116662             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  116663             :       /*! \brief support for the classic visitor pattern done in GoF */
  116664             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  116665             : 
  116666             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  116667             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  116668             :        */
  116669             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  116670             : 
  116671             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  116672             :        */
  116673             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  116674             : 
  116675             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  116676             :        // This traversal helps support internal tools that call static member functions.
  116677             :        // note: this function operates on the memory pools.
  116678             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  116679             :        */
  116680             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  116681             :       /* */
  116682             : 
  116683             : 
  116684             :      public:
  116685             :       /* name Memory Allocation Functions
  116686             :           \brief Memory allocations functions ... incomplete-documentation
  116687             : 
  116688             :           These functions have been made public as part of the design, but they are suggested for internal use 
  116689             :           or by particularly knowledgable users for specialized tools or applications.
  116690             :        */
  116691             :       /* */
  116692             : 
  116693             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  116694             : 
  116695             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  116696             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  116697             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  116698             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  116699             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  116700             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  116701             :           being used with the AST File I/O mechanism.
  116702             :        */
  116703             :           virtual bool isInMemoryPool() override;
  116704             : 
  116705             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  116706             : 
  116707             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  116708             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  116709             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  116710             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  116711             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  116712             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  116713             :           being used with the AST File I/O mechanism.
  116714             :        */
  116715             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  116716             : 
  116717             :       // DQ (4/30/2006): Modified to be a const function.
  116718             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  116719             : 
  116720             :           This functions is part of general support for many possible tools to operate 
  116721             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  116722             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  116723             :           less than the set of pointers used by the AST file I/O. This is part of
  116724             :           work implemented by Andreas, and support tools such as the AST graph generation.
  116725             : 
  116726             :           \warning This function can return unexpected data members and thus the 
  116727             :                    order and the number of elements is unpredicable and subject 
  116728             :                    to change.
  116729             : 
  116730             :           \returns STL vector of pairs of SgNode* and strings
  116731             :        */
  116732             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  116733             : 
  116734             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  116735             : 
  116736             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  116737             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  116738             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  116739             : 
  116740             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  116741             :                    and subject to change.
  116742             :        */
  116743             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  116744             : 
  116745             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  116746             : 
  116747             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  116748             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  116749             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  116750             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  116751             : 
  116752             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  116753             : 
  116754             :           \returns long
  116755             :        */
  116756             :           virtual long getChildIndex( SgNode* childNode ) const override;
  116757             : 
  116758             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  116759             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  116760             :       /* \brief Constructor for use by AST File I/O Mechanism
  116761             : 
  116762             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  116763             :           which obtained via fast binary file I/O from disk.
  116764             :        */
  116765             :        // SgOmpScheduleClause( SgOmpScheduleClauseStorageClass& source );
  116766             : 
  116767             : 
  116768             : 
  116769             : 
  116770             : 
  116771             :  // JH (10/24/2005): methods added to support the ast file IO
  116772             :     private:
  116773             : 
  116774             :       /* name AST Memory Allocation Support Functions
  116775             :           \brief Memory allocations support....
  116776             : 
  116777             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  116778             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  116779             :           and support the AST File I/O Mechanism.
  116780             :        */
  116781             :       /* */
  116782             : 
  116783             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  116784             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  116785             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  116786             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  116787             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  116788             :           a correspinding one in the AST_FILE_IO class!
  116789             :        */
  116790             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  116791             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  116792             :       /* \brief Typedef used for low level memory access.
  116793             :        */
  116794             :        // typedef unsigned char* TestType;
  116795             : 
  116796             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  116797             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  116798             :       /* \brief Typedef used to hold memory addresses as values.
  116799             :        */
  116800             :        // typedef unsigned long  AddressType;
  116801             : 
  116802             : 
  116803             : 
  116804             :        // necessary, to have direct access to the p_freepointer and the private methods !
  116805             :       /*! \brief friend class declaration to support AST File I/O */
  116806             :           friend class AST_FILE_IO;
  116807             : 
  116808             :       /*! \brief friend class declaration to support AST File I/O */
  116809             :           friend class SgOmpScheduleClauseStorageClass;
  116810             : 
  116811             :       /*! \brief friend class declaration to support AST File I/O */
  116812             :           friend class AstSpecificDataManagingClass;
  116813             : 
  116814             :       /*! \brief friend class declaration to support AST File I/O */
  116815             :           friend class AstSpecificDataManagingClassStorageClass;
  116816             :     public:
  116817             :       /*! \brief IR node constructor to support AST File I/O */
  116818             :           SgOmpScheduleClause( const SgOmpScheduleClauseStorageClass& source );
  116819             : 
  116820             :  // private: // JJW hack
  116821             :        /*
  116822             :           name AST Memory Allocation Support Variables
  116823             :           Memory allocations support variables 
  116824             : 
  116825             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  116826             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  116827             :           and support the AST File I/O Mechanism.
  116828             :        */
  116829             :       /* */
  116830             : 
  116831             :     public:
  116832             : 
  116833             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  116834             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  116835             :       // virtual SgNode* addRegExpAttribute();
  116836             :       /*! \brief Support for AST matching using regular expression.
  116837             : 
  116838             :           This support is incomplete and the subject of current research to define 
  116839             :           RegEx trees to support inexact matching.
  116840             :        */
  116841             :           SgOmpScheduleClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  116842             : 
  116843             : // *** COMMON CODE SECTION ENDS HERE ***
  116844             : 
  116845             : 
  116846             : // End of memberFunctionString
  116847             : // Start of memberFunctionString
  116848             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  116849             : 
  116850             :      // the generated cast function
  116851             :      // friend ROSE_DLL_API SgOmpScheduleClause* isSgOmpScheduleClause ( SgNode* s );
  116852             : 
  116853             :           typedef SgOmpClause base_node_type;
  116854             : 
  116855             : 
  116856             : // End of memberFunctionString
  116857             : 
  116858             :      public: 
  116859             :          SgOmpClause::omp_schedule_modifier_enum get_modifier() const;
  116860             :          void set_modifier(SgOmpClause::omp_schedule_modifier_enum modifier);
  116861             : 
  116862             :      public: 
  116863             :          SgOmpClause::omp_schedule_modifier_enum get_modifier1() const;
  116864             :          void set_modifier1(SgOmpClause::omp_schedule_modifier_enum modifier1);
  116865             : 
  116866             :      public: 
  116867             :          SgOmpClause::omp_schedule_kind_enum get_kind() const;
  116868             :          void set_kind(SgOmpClause::omp_schedule_kind_enum kind);
  116869             : 
  116870             :      public: 
  116871             :          SgExpression* get_chunk_size() const;
  116872             :          void set_chunk_size(SgExpression* chunk_size);
  116873             : 
  116874             : 
  116875             :      public: 
  116876             :          virtual ~SgOmpScheduleClause();
  116877             : 
  116878             : 
  116879             :      public: 
  116880             :          SgOmpScheduleClause(Sg_File_Info* startOfConstruct , SgOmpClause::omp_schedule_modifier_enum modifier =e_omp_schedule_modifier_unspecified, SgOmpClause::omp_schedule_modifier_enum modifier1 =e_omp_schedule_modifier_unspecified, SgOmpClause::omp_schedule_kind_enum kind =e_omp_schedule_kind_unspecified, SgExpression* chunk_size = NULL); 
  116881             :          SgOmpScheduleClause(SgOmpClause::omp_schedule_modifier_enum modifier, SgOmpClause::omp_schedule_modifier_enum modifier1, SgOmpClause::omp_schedule_kind_enum kind, SgExpression* chunk_size); 
  116882             : 
  116883             :     protected:
  116884             : // Start of memberFunctionString
  116885             : SgOmpClause::omp_schedule_modifier_enum p_modifier;
  116886             :           
  116887             : // End of memberFunctionString
  116888             : // Start of memberFunctionString
  116889             : SgOmpClause::omp_schedule_modifier_enum p_modifier1;
  116890             :           
  116891             : // End of memberFunctionString
  116892             : // Start of memberFunctionString
  116893             : SgOmpClause::omp_schedule_kind_enum p_kind;
  116894             :           
  116895             : // End of memberFunctionString
  116896             : // Start of memberFunctionString
  116897             : SgExpression* p_chunk_size;
  116898             :           
  116899             : // End of memberFunctionString
  116900             : 
  116901             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpScheduleClause>;
  116902             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpScheduleClause, SgOmpClause::omp_schedule_modifier_enum,&SgOmpScheduleClause::p_modifier>;
  116903             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpScheduleClause, SgOmpClause::omp_schedule_modifier_enum,&SgOmpScheduleClause::p_modifier1>;
  116904             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpScheduleClause, SgOmpClause::omp_schedule_kind_enum,&SgOmpScheduleClause::p_kind>;
  116905             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpScheduleClause, SgExpression*,&SgOmpScheduleClause::p_chunk_size>;
  116906             : 
  116907             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116908             : 
  116909             : 
  116910             :    };
  116911             : #endif
  116912             : 
  116913             : // postdeclarations for SgOmpScheduleClause
  116914             : 
  116915             : /* #line 116916 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116916             : 
  116917             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  116918             : 
  116919             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116920             : 
  116921             : 
  116922             : /* #line 116923 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116923             : 
  116924             : 
  116925             : 
  116926             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116927             : 
  116928             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  116929             : //      This code is automatically generated for each 
  116930             : //      terminal and non-terminal within the defined 
  116931             : //      grammar.  There is a simple way to change the 
  116932             : //      code to fix bugs etc.  See the ROSE README file
  116933             : //      for directions.
  116934             : 
  116935             : // tps: (02/22/2010): Adding DLL export requirements
  116936             : #include "rosedll.h"
  116937             : 
  116938             : // predeclarations for SgOmpMergeableClause
  116939             : 
  116940             : /* #line 116941 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116941             : 
  116942             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  116943             : 
  116944             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  116945             : 
  116946             : #if 1
  116947             : // Class Definition for SgOmpMergeableClause
  116948             : class ROSE_DLL_API SgOmpMergeableClause  : public SgOmpClause
  116949             :    {
  116950             :      public:
  116951             : 
  116952             : 
  116953             : /* #line 116954 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  116954             : 
  116955             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  116956             : // Start of memberFunctionString
  116957             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  116958             : 
  116959             : // *** COMMON CODE SECTION BEGINS HERE ***
  116960             : 
  116961             :     public:
  116962             : 
  116963             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  116964             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  116965             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  116966             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  116967             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  116968             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  116969             : 
  116970             :       /*! \brief returns a string representing the class name */
  116971             :           virtual std::string class_name() const override;
  116972             : 
  116973             :       /*! \brief returns new style SageIII enum values */
  116974             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  116975             : 
  116976             :       /*! \brief static variant value */
  116977             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  116978             :        // static const VariantT static_variant = V_SgOmpMergeableClause;
  116979             :           enum { static_variant = V_SgOmpMergeableClause };
  116980             : 
  116981             :        /* the generated cast function */
  116982             :       /*! \brief Casts pointer from base class to derived class */
  116983             :           ROSE_DLL_API friend       SgOmpMergeableClause* isSgOmpMergeableClause(       SgNode * s );
  116984             : 
  116985             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  116986             :           ROSE_DLL_API friend const SgOmpMergeableClause* isSgOmpMergeableClause( const SgNode * s );
  116987             : 
  116988             :      // ******************************************
  116989             :      // * Memory Pool / New / Delete
  116990             :      // ******************************************
  116991             : 
  116992             :      public:
  116993             :           /// \private
  116994             :           static const unsigned pool_size; //
  116995             :           /// \private
  116996             :           static std::vector<unsigned char *> pools; //
  116997             :           /// \private
  116998             :           static SgOmpMergeableClause * next_node; // 
  116999             : 
  117000             :           /// \private
  117001             :           static unsigned long initializeStorageClassArray(SgOmpMergeableClauseStorageClass *); //
  117002             : 
  117003             :           /// \private
  117004             :           static void clearMemoryPool(); //
  117005             :           static void deleteMemoryPool(); //
  117006             : 
  117007             :           /// \private
  117008             :           static void extendMemoryPoolForFileIO(); //
  117009             : 
  117010             :           /// \private
  117011             :           static SgOmpMergeableClause * getPointerFromGlobalIndex(unsigned long); //
  117012             :           /// \private
  117013             :           static SgOmpMergeableClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  117014             : 
  117015             :           /// \private
  117016             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  117017             :           /// \private
  117018             :           static void resetValidFreepointers(); //
  117019             :           /// \private
  117020             :           static unsigned long getNumberOfLastValidPointer(); //
  117021             : 
  117022             : 
  117023             : #if defined(INLINE_FUNCTIONS)
  117024             :       /*! \brief returns pointer to newly allocated IR node */
  117025             :           inline void *operator new (size_t size);
  117026             : #else
  117027             :       /*! \brief returns pointer to newly allocated IR node */
  117028             :           void *operator new (size_t size);
  117029             : #endif
  117030             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  117031             :           void operator delete (void* pointer, size_t size);
  117032             : 
  117033             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  117034           0 :           void operator delete (void* pointer)
  117035             :              {
  117036             :             // This is the generated delete operator...
  117037           0 :                SgOmpMergeableClause::operator delete (pointer,sizeof(SgOmpMergeableClause));
  117038             :              }
  117039             : 
  117040             :       /*! \brief Returns the total number of IR nodes of this type */
  117041             :           static size_t numberOfNodes();
  117042             : 
  117043             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  117044             :           static size_t memoryUsage();
  117045             : 
  117046             :       // End of scope which started in IR nodes specific code 
  117047             :       /* */
  117048             : 
  117049             :       /* name Internal Functions
  117050             :           \brief Internal functions ... incomplete-documentation
  117051             : 
  117052             :           These functions have been made public as part of the design, but they are suggested for internal use 
  117053             :           or by particularly knowledgeable users for specialized tools or applications.
  117054             : 
  117055             :           \internal We could not make these private because they are required by user for special purposes. And 
  117056             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  117057             :          
  117058             :        */
  117059             : 
  117060             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  117061             :        // overridden in every class by *generated* implementation
  117062             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  117063             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  117064             :        // MS: 06/28/02 container of names of variables or container indices 
  117065             :        // used used in the traversal to access AST successor nodes
  117066             :        // overridden in every class by *generated* implementation
  117067             :       /*! \brief container of names of variables or container indices used used in the traversal
  117068             :           to access AST successor nodes overridden in every class by *generated* implementation */
  117069             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  117070             : 
  117071             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  117072             :        // than all the vector copies. The implementation for these functions is generated for each class.
  117073             :       /*! \brief return number of children in the traversal successor list */
  117074             :           virtual size_t get_numberOfTraversalSuccessors() override;
  117075             :       /*! \brief index-based access to traversal successors by index number */
  117076             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  117077             :       /*! \brief index-based access to traversal successors by child node */
  117078             :           virtual size_t get_childIndex(SgNode *child) override;
  117079             : 
  117080             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  117081             :        // MS: 08/16/2002 method for generating RTI information
  117082             :       /*! \brief return C++ Runtime-Time-Information */
  117083             :           virtual RTIReturnType roseRTI() override;
  117084             : #endif
  117085             :       /* */
  117086             : 
  117087             : 
  117088             : 
  117089             :       /* name Deprecated Functions
  117090             :           \brief Deprecated functions ... incomplete-documentation
  117091             : 
  117092             :           These functions have been deprecated from use.
  117093             :        */
  117094             :       /* */
  117095             : 
  117096             :       /*! returns a C style string (char*) representing the class name */
  117097             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  117098             : 
  117099             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  117100             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  117101             : #if 0
  117102             :       /*! returns old style Sage II enum values */
  117103             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  117104             :       /*! returns old style Sage II enum values */
  117105             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  117106             : #endif
  117107             :       /* */
  117108             : 
  117109             : 
  117110             : 
  117111             : 
  117112             :      public:
  117113             :       /* name Traversal Support Functions
  117114             :           \brief Traversal support functions ... incomplete-documentation
  117115             : 
  117116             :           These functions have been made public as part of the design, but they are suggested for internal use 
  117117             :           or by particularly knowledgable users for specialized tools or applications.
  117118             :        */
  117119             :       /* */
  117120             : 
  117121             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  117122             :        // (inferior to ROSE traversal mechanism, experimental).
  117123             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  117124             :        */
  117125             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  117126             : 
  117127             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  117128             :       /*! \brief support for the classic visitor pattern done in GoF */
  117129             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  117130             : 
  117131             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  117132             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  117133             :        */
  117134             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  117135             : 
  117136             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  117137             :        */
  117138             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  117139             : 
  117140             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  117141             :        // This traversal helps support internal tools that call static member functions.
  117142             :        // note: this function operates on the memory pools.
  117143             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  117144             :        */
  117145             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  117146             :       /* */
  117147             : 
  117148             : 
  117149             :      public:
  117150             :       /* name Memory Allocation Functions
  117151             :           \brief Memory allocations functions ... incomplete-documentation
  117152             : 
  117153             :           These functions have been made public as part of the design, but they are suggested for internal use 
  117154             :           or by particularly knowledgable users for specialized tools or applications.
  117155             :        */
  117156             :       /* */
  117157             : 
  117158             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  117159             : 
  117160             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  117161             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  117162             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  117163             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  117164             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  117165             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  117166             :           being used with the AST File I/O mechanism.
  117167             :        */
  117168             :           virtual bool isInMemoryPool() override;
  117169             : 
  117170             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  117171             : 
  117172             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  117173             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  117174             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  117175             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  117176             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  117177             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  117178             :           being used with the AST File I/O mechanism.
  117179             :        */
  117180             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  117181             : 
  117182             :       // DQ (4/30/2006): Modified to be a const function.
  117183             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  117184             : 
  117185             :           This functions is part of general support for many possible tools to operate 
  117186             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  117187             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  117188             :           less than the set of pointers used by the AST file I/O. This is part of
  117189             :           work implemented by Andreas, and support tools such as the AST graph generation.
  117190             : 
  117191             :           \warning This function can return unexpected data members and thus the 
  117192             :                    order and the number of elements is unpredicable and subject 
  117193             :                    to change.
  117194             : 
  117195             :           \returns STL vector of pairs of SgNode* and strings
  117196             :        */
  117197             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  117198             : 
  117199             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  117200             : 
  117201             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  117202             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  117203             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  117204             : 
  117205             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  117206             :                    and subject to change.
  117207             :        */
  117208             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  117209             : 
  117210             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  117211             : 
  117212             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  117213             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  117214             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  117215             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  117216             : 
  117217             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  117218             : 
  117219             :           \returns long
  117220             :        */
  117221             :           virtual long getChildIndex( SgNode* childNode ) const override;
  117222             : 
  117223             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  117224             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  117225             :       /* \brief Constructor for use by AST File I/O Mechanism
  117226             : 
  117227             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  117228             :           which obtained via fast binary file I/O from disk.
  117229             :        */
  117230             :        // SgOmpMergeableClause( SgOmpMergeableClauseStorageClass& source );
  117231             : 
  117232             : 
  117233             : 
  117234             : 
  117235             : 
  117236             :  // JH (10/24/2005): methods added to support the ast file IO
  117237             :     private:
  117238             : 
  117239             :       /* name AST Memory Allocation Support Functions
  117240             :           \brief Memory allocations support....
  117241             : 
  117242             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  117243             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  117244             :           and support the AST File I/O Mechanism.
  117245             :        */
  117246             :       /* */
  117247             : 
  117248             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  117249             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  117250             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  117251             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  117252             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  117253             :           a correspinding one in the AST_FILE_IO class!
  117254             :        */
  117255             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  117256             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  117257             :       /* \brief Typedef used for low level memory access.
  117258             :        */
  117259             :        // typedef unsigned char* TestType;
  117260             : 
  117261             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  117262             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  117263             :       /* \brief Typedef used to hold memory addresses as values.
  117264             :        */
  117265             :        // typedef unsigned long  AddressType;
  117266             : 
  117267             : 
  117268             : 
  117269             :        // necessary, to have direct access to the p_freepointer and the private methods !
  117270             :       /*! \brief friend class declaration to support AST File I/O */
  117271             :           friend class AST_FILE_IO;
  117272             : 
  117273             :       /*! \brief friend class declaration to support AST File I/O */
  117274             :           friend class SgOmpMergeableClauseStorageClass;
  117275             : 
  117276             :       /*! \brief friend class declaration to support AST File I/O */
  117277             :           friend class AstSpecificDataManagingClass;
  117278             : 
  117279             :       /*! \brief friend class declaration to support AST File I/O */
  117280             :           friend class AstSpecificDataManagingClassStorageClass;
  117281             :     public:
  117282             :       /*! \brief IR node constructor to support AST File I/O */
  117283             :           SgOmpMergeableClause( const SgOmpMergeableClauseStorageClass& source );
  117284             : 
  117285             :  // private: // JJW hack
  117286             :        /*
  117287             :           name AST Memory Allocation Support Variables
  117288             :           Memory allocations support variables 
  117289             : 
  117290             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  117291             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  117292             :           and support the AST File I/O Mechanism.
  117293             :        */
  117294             :       /* */
  117295             : 
  117296             :     public:
  117297             : 
  117298             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  117299             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  117300             :       // virtual SgNode* addRegExpAttribute();
  117301             :       /*! \brief Support for AST matching using regular expression.
  117302             : 
  117303             :           This support is incomplete and the subject of current research to define 
  117304             :           RegEx trees to support inexact matching.
  117305             :        */
  117306             :           SgOmpMergeableClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  117307             : 
  117308             : // *** COMMON CODE SECTION ENDS HERE ***
  117309             : 
  117310             : 
  117311             : // End of memberFunctionString
  117312             : // Start of memberFunctionString
  117313             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  117314             : 
  117315             :      // the generated cast function
  117316             :      // friend ROSE_DLL_API SgOmpMergeableClause* isSgOmpMergeableClause ( SgNode* s );
  117317             : 
  117318             :           typedef SgOmpClause base_node_type;
  117319             : 
  117320             : 
  117321             : // End of memberFunctionString
  117322             : 
  117323             : 
  117324             :      public: 
  117325             :          virtual ~SgOmpMergeableClause();
  117326             : 
  117327             : 
  117328             :      public: 
  117329             :          SgOmpMergeableClause(Sg_File_Info* startOfConstruct ); 
  117330             :          SgOmpMergeableClause(); 
  117331             : 
  117332             :     protected:
  117333             : 
  117334             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpMergeableClause>;
  117335             : 
  117336             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117337             : 
  117338             : 
  117339             :    };
  117340             : #endif
  117341             : 
  117342             : // postdeclarations for SgOmpMergeableClause
  117343             : 
  117344             : /* #line 117345 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117345             : 
  117346             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  117347             : 
  117348             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117349             : 
  117350             : 
  117351             : /* #line 117352 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117352             : 
  117353             : 
  117354             : 
  117355             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117356             : 
  117357             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  117358             : //      This code is automatically generated for each 
  117359             : //      terminal and non-terminal within the defined 
  117360             : //      grammar.  There is a simple way to change the 
  117361             : //      code to fix bugs etc.  See the ROSE README file
  117362             : //      for directions.
  117363             : 
  117364             : // tps: (02/22/2010): Adding DLL export requirements
  117365             : #include "rosedll.h"
  117366             : 
  117367             : // predeclarations for SgOmpWhenClause
  117368             : 
  117369             : /* #line 117370 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117370             : 
  117371             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  117372             : 
  117373             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117374             : 
  117375             : #if 1
  117376             : // Class Definition for SgOmpWhenClause
  117377             : class ROSE_DLL_API SgOmpWhenClause  : public SgOmpClause
  117378             :    {
  117379             :      public:
  117380             : 
  117381             : 
  117382             : /* #line 117383 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117383             : 
  117384             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  117385             : // Start of memberFunctionString
  117386             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  117387             : 
  117388             : // *** COMMON CODE SECTION BEGINS HERE ***
  117389             : 
  117390             :     public:
  117391             : 
  117392             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  117393             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  117394             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  117395             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  117396             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  117397             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  117398             : 
  117399             :       /*! \brief returns a string representing the class name */
  117400             :           virtual std::string class_name() const override;
  117401             : 
  117402             :       /*! \brief returns new style SageIII enum values */
  117403             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  117404             : 
  117405             :       /*! \brief static variant value */
  117406             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  117407             :        // static const VariantT static_variant = V_SgOmpWhenClause;
  117408             :           enum { static_variant = V_SgOmpWhenClause };
  117409             : 
  117410             :        /* the generated cast function */
  117411             :       /*! \brief Casts pointer from base class to derived class */
  117412             :           ROSE_DLL_API friend       SgOmpWhenClause* isSgOmpWhenClause(       SgNode * s );
  117413             : 
  117414             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  117415             :           ROSE_DLL_API friend const SgOmpWhenClause* isSgOmpWhenClause( const SgNode * s );
  117416             : 
  117417             :      // ******************************************
  117418             :      // * Memory Pool / New / Delete
  117419             :      // ******************************************
  117420             : 
  117421             :      public:
  117422             :           /// \private
  117423             :           static const unsigned pool_size; //
  117424             :           /// \private
  117425             :           static std::vector<unsigned char *> pools; //
  117426             :           /// \private
  117427             :           static SgOmpWhenClause * next_node; // 
  117428             : 
  117429             :           /// \private
  117430             :           static unsigned long initializeStorageClassArray(SgOmpWhenClauseStorageClass *); //
  117431             : 
  117432             :           /// \private
  117433             :           static void clearMemoryPool(); //
  117434             :           static void deleteMemoryPool(); //
  117435             : 
  117436             :           /// \private
  117437             :           static void extendMemoryPoolForFileIO(); //
  117438             : 
  117439             :           /// \private
  117440             :           static SgOmpWhenClause * getPointerFromGlobalIndex(unsigned long); //
  117441             :           /// \private
  117442             :           static SgOmpWhenClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  117443             : 
  117444             :           /// \private
  117445             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  117446             :           /// \private
  117447             :           static void resetValidFreepointers(); //
  117448             :           /// \private
  117449             :           static unsigned long getNumberOfLastValidPointer(); //
  117450             : 
  117451             : 
  117452             : #if defined(INLINE_FUNCTIONS)
  117453             :       /*! \brief returns pointer to newly allocated IR node */
  117454             :           inline void *operator new (size_t size);
  117455             : #else
  117456             :       /*! \brief returns pointer to newly allocated IR node */
  117457             :           void *operator new (size_t size);
  117458             : #endif
  117459             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  117460             :           void operator delete (void* pointer, size_t size);
  117461             : 
  117462             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  117463           0 :           void operator delete (void* pointer)
  117464             :              {
  117465             :             // This is the generated delete operator...
  117466           0 :                SgOmpWhenClause::operator delete (pointer,sizeof(SgOmpWhenClause));
  117467             :              }
  117468             : 
  117469             :       /*! \brief Returns the total number of IR nodes of this type */
  117470             :           static size_t numberOfNodes();
  117471             : 
  117472             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  117473             :           static size_t memoryUsage();
  117474             : 
  117475             :       // End of scope which started in IR nodes specific code 
  117476             :       /* */
  117477             : 
  117478             :       /* name Internal Functions
  117479             :           \brief Internal functions ... incomplete-documentation
  117480             : 
  117481             :           These functions have been made public as part of the design, but they are suggested for internal use 
  117482             :           or by particularly knowledgeable users for specialized tools or applications.
  117483             : 
  117484             :           \internal We could not make these private because they are required by user for special purposes. And 
  117485             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  117486             :          
  117487             :        */
  117488             : 
  117489             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  117490             :        // overridden in every class by *generated* implementation
  117491             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  117492             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  117493             :        // MS: 06/28/02 container of names of variables or container indices 
  117494             :        // used used in the traversal to access AST successor nodes
  117495             :        // overridden in every class by *generated* implementation
  117496             :       /*! \brief container of names of variables or container indices used used in the traversal
  117497             :           to access AST successor nodes overridden in every class by *generated* implementation */
  117498             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  117499             : 
  117500             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  117501             :        // than all the vector copies. The implementation for these functions is generated for each class.
  117502             :       /*! \brief return number of children in the traversal successor list */
  117503             :           virtual size_t get_numberOfTraversalSuccessors() override;
  117504             :       /*! \brief index-based access to traversal successors by index number */
  117505             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  117506             :       /*! \brief index-based access to traversal successors by child node */
  117507             :           virtual size_t get_childIndex(SgNode *child) override;
  117508             : 
  117509             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  117510             :        // MS: 08/16/2002 method for generating RTI information
  117511             :       /*! \brief return C++ Runtime-Time-Information */
  117512             :           virtual RTIReturnType roseRTI() override;
  117513             : #endif
  117514             :       /* */
  117515             : 
  117516             : 
  117517             : 
  117518             :       /* name Deprecated Functions
  117519             :           \brief Deprecated functions ... incomplete-documentation
  117520             : 
  117521             :           These functions have been deprecated from use.
  117522             :        */
  117523             :       /* */
  117524             : 
  117525             :       /*! returns a C style string (char*) representing the class name */
  117526             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  117527             : 
  117528             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  117529             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  117530             : #if 0
  117531             :       /*! returns old style Sage II enum values */
  117532             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  117533             :       /*! returns old style Sage II enum values */
  117534             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  117535             : #endif
  117536             :       /* */
  117537             : 
  117538             : 
  117539             : 
  117540             : 
  117541             :      public:
  117542             :       /* name Traversal Support Functions
  117543             :           \brief Traversal support functions ... incomplete-documentation
  117544             : 
  117545             :           These functions have been made public as part of the design, but they are suggested for internal use 
  117546             :           or by particularly knowledgable users for specialized tools or applications.
  117547             :        */
  117548             :       /* */
  117549             : 
  117550             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  117551             :        // (inferior to ROSE traversal mechanism, experimental).
  117552             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  117553             :        */
  117554             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  117555             : 
  117556             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  117557             :       /*! \brief support for the classic visitor pattern done in GoF */
  117558             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  117559             : 
  117560             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  117561             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  117562             :        */
  117563             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  117564             : 
  117565             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  117566             :        */
  117567             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  117568             : 
  117569             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  117570             :        // This traversal helps support internal tools that call static member functions.
  117571             :        // note: this function operates on the memory pools.
  117572             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  117573             :        */
  117574             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  117575             :       /* */
  117576             : 
  117577             : 
  117578             :      public:
  117579             :       /* name Memory Allocation Functions
  117580             :           \brief Memory allocations functions ... incomplete-documentation
  117581             : 
  117582             :           These functions have been made public as part of the design, but they are suggested for internal use 
  117583             :           or by particularly knowledgable users for specialized tools or applications.
  117584             :        */
  117585             :       /* */
  117586             : 
  117587             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  117588             : 
  117589             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  117590             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  117591             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  117592             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  117593             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  117594             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  117595             :           being used with the AST File I/O mechanism.
  117596             :        */
  117597             :           virtual bool isInMemoryPool() override;
  117598             : 
  117599             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  117600             : 
  117601             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  117602             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  117603             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  117604             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  117605             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  117606             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  117607             :           being used with the AST File I/O mechanism.
  117608             :        */
  117609             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  117610             : 
  117611             :       // DQ (4/30/2006): Modified to be a const function.
  117612             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  117613             : 
  117614             :           This functions is part of general support for many possible tools to operate 
  117615             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  117616             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  117617             :           less than the set of pointers used by the AST file I/O. This is part of
  117618             :           work implemented by Andreas, and support tools such as the AST graph generation.
  117619             : 
  117620             :           \warning This function can return unexpected data members and thus the 
  117621             :                    order and the number of elements is unpredicable and subject 
  117622             :                    to change.
  117623             : 
  117624             :           \returns STL vector of pairs of SgNode* and strings
  117625             :        */
  117626             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  117627             : 
  117628             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  117629             : 
  117630             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  117631             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  117632             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  117633             : 
  117634             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  117635             :                    and subject to change.
  117636             :        */
  117637             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  117638             : 
  117639             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  117640             : 
  117641             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  117642             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  117643             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  117644             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  117645             : 
  117646             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  117647             : 
  117648             :           \returns long
  117649             :        */
  117650             :           virtual long getChildIndex( SgNode* childNode ) const override;
  117651             : 
  117652             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  117653             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  117654             :       /* \brief Constructor for use by AST File I/O Mechanism
  117655             : 
  117656             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  117657             :           which obtained via fast binary file I/O from disk.
  117658             :        */
  117659             :        // SgOmpWhenClause( SgOmpWhenClauseStorageClass& source );
  117660             : 
  117661             : 
  117662             : 
  117663             : 
  117664             : 
  117665             :  // JH (10/24/2005): methods added to support the ast file IO
  117666             :     private:
  117667             : 
  117668             :       /* name AST Memory Allocation Support Functions
  117669             :           \brief Memory allocations support....
  117670             : 
  117671             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  117672             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  117673             :           and support the AST File I/O Mechanism.
  117674             :        */
  117675             :       /* */
  117676             : 
  117677             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  117678             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  117679             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  117680             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  117681             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  117682             :           a correspinding one in the AST_FILE_IO class!
  117683             :        */
  117684             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  117685             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  117686             :       /* \brief Typedef used for low level memory access.
  117687             :        */
  117688             :        // typedef unsigned char* TestType;
  117689             : 
  117690             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  117691             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  117692             :       /* \brief Typedef used to hold memory addresses as values.
  117693             :        */
  117694             :        // typedef unsigned long  AddressType;
  117695             : 
  117696             : 
  117697             : 
  117698             :        // necessary, to have direct access to the p_freepointer and the private methods !
  117699             :       /*! \brief friend class declaration to support AST File I/O */
  117700             :           friend class AST_FILE_IO;
  117701             : 
  117702             :       /*! \brief friend class declaration to support AST File I/O */
  117703             :           friend class SgOmpWhenClauseStorageClass;
  117704             : 
  117705             :       /*! \brief friend class declaration to support AST File I/O */
  117706             :           friend class AstSpecificDataManagingClass;
  117707             : 
  117708             :       /*! \brief friend class declaration to support AST File I/O */
  117709             :           friend class AstSpecificDataManagingClassStorageClass;
  117710             :     public:
  117711             :       /*! \brief IR node constructor to support AST File I/O */
  117712             :           SgOmpWhenClause( const SgOmpWhenClauseStorageClass& source );
  117713             : 
  117714             :  // private: // JJW hack
  117715             :        /*
  117716             :           name AST Memory Allocation Support Variables
  117717             :           Memory allocations support variables 
  117718             : 
  117719             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  117720             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  117721             :           and support the AST File I/O Mechanism.
  117722             :        */
  117723             :       /* */
  117724             : 
  117725             :     public:
  117726             : 
  117727             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  117728             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  117729             :       // virtual SgNode* addRegExpAttribute();
  117730             :       /*! \brief Support for AST matching using regular expression.
  117731             : 
  117732             :           This support is incomplete and the subject of current research to define 
  117733             :           RegEx trees to support inexact matching.
  117734             :        */
  117735             :           SgOmpWhenClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  117736             : 
  117737             : // *** COMMON CODE SECTION ENDS HERE ***
  117738             : 
  117739             : 
  117740             : // End of memberFunctionString
  117741             : // Start of memberFunctionString
  117742             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  117743             : 
  117744             :      // the generated cast function
  117745             :      // friend ROSE_DLL_API SgOmpWhenClause* isSgOmpWhenClause ( SgNode* s );
  117746             : 
  117747             :           typedef SgOmpClause base_node_type;
  117748             : 
  117749             : 
  117750             : // End of memberFunctionString
  117751             : 
  117752             :      public: 
  117753             :          SgExpression* get_user_condition() const;
  117754             :          void set_user_condition(SgExpression* user_condition);
  117755             : 
  117756             :      public: 
  117757             :          SgExpression* get_user_condition_score() const;
  117758             :          void set_user_condition_score(SgExpression* user_condition_score);
  117759             : 
  117760             :      public: 
  117761             :          std::list<SgStatement*> get_construct_directives() const;
  117762             :          void set_construct_directives(std::list<SgStatement*> construct_directives);
  117763             : 
  117764             :      public: 
  117765             :          SgExpression* get_device_arch() const;
  117766             :          void set_device_arch(SgExpression* device_arch);
  117767             : 
  117768             :      public: 
  117769             :          SgExpression* get_device_isa() const;
  117770             :          void set_device_isa(SgExpression* device_isa);
  117771             : 
  117772             :      public: 
  117773             :          SgOmpClause::omp_when_context_kind_enum get_device_kind() const;
  117774             :          void set_device_kind(SgOmpClause::omp_when_context_kind_enum device_kind);
  117775             : 
  117776             :      public: 
  117777             :          SgOmpClause::omp_when_context_vendor_enum get_implementation_vendor() const;
  117778             :          void set_implementation_vendor(SgOmpClause::omp_when_context_vendor_enum implementation_vendor);
  117779             : 
  117780             :      public: 
  117781             :          SgExpression* get_implementation_user_defined() const;
  117782             :          void set_implementation_user_defined(SgExpression* implementation_user_defined);
  117783             : 
  117784             :      public: 
  117785             :          SgExpression* get_implementation_extension() const;
  117786             :          void set_implementation_extension(SgExpression* implementation_extension);
  117787             : 
  117788             :      public: 
  117789             :          SgStatement* get_variant_directive() const;
  117790             :          void set_variant_directive(SgStatement* variant_directive);
  117791             : 
  117792             : 
  117793             :      public: 
  117794             :          virtual ~SgOmpWhenClause();
  117795             : 
  117796             : 
  117797             :      public: 
  117798             :          SgOmpWhenClause(Sg_File_Info* startOfConstruct , SgExpression* user_condition = NULL, SgExpression* user_condition_score = NULL, SgExpression* device_arch = NULL, SgExpression* device_isa = NULL, SgOmpClause::omp_when_context_kind_enum device_kind = e_omp_when_context_kind_unknown, SgOmpClause::omp_when_context_vendor_enum implementation_vendor = e_omp_when_context_vendor_unspecified, SgExpression* implementation_user_defined = NULL, SgExpression* implementation_extension = NULL, SgStatement* variant_directive = NULL); 
  117799             :          SgOmpWhenClause(SgExpression* user_condition, SgExpression* user_condition_score, SgExpression* device_arch, SgExpression* device_isa, SgOmpClause::omp_when_context_kind_enum device_kind, SgOmpClause::omp_when_context_vendor_enum implementation_vendor, SgExpression* implementation_user_defined, SgExpression* implementation_extension, SgStatement* variant_directive); 
  117800             : 
  117801             :     protected:
  117802             : // Start of memberFunctionString
  117803             : SgExpression* p_user_condition;
  117804             :           
  117805             : // End of memberFunctionString
  117806             : // Start of memberFunctionString
  117807             : SgExpression* p_user_condition_score;
  117808             :           
  117809             : // End of memberFunctionString
  117810             : // Start of memberFunctionString
  117811             : std::list<SgStatement*> p_construct_directives;
  117812             :           
  117813             : // End of memberFunctionString
  117814             : // Start of memberFunctionString
  117815             : SgExpression* p_device_arch;
  117816             :           
  117817             : // End of memberFunctionString
  117818             : // Start of memberFunctionString
  117819             : SgExpression* p_device_isa;
  117820             :           
  117821             : // End of memberFunctionString
  117822             : // Start of memberFunctionString
  117823             : SgOmpClause::omp_when_context_kind_enum p_device_kind;
  117824             :           
  117825             : // End of memberFunctionString
  117826             : // Start of memberFunctionString
  117827             : SgOmpClause::omp_when_context_vendor_enum p_implementation_vendor;
  117828             :           
  117829             : // End of memberFunctionString
  117830             : // Start of memberFunctionString
  117831             : SgExpression* p_implementation_user_defined;
  117832             :           
  117833             : // End of memberFunctionString
  117834             : // Start of memberFunctionString
  117835             : SgExpression* p_implementation_extension;
  117836             :           
  117837             : // End of memberFunctionString
  117838             : // Start of memberFunctionString
  117839             : SgStatement* p_variant_directive;
  117840             :           
  117841             : // End of memberFunctionString
  117842             : 
  117843             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpWhenClause>;
  117844             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgExpression*,&SgOmpWhenClause::p_user_condition>;
  117845             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgExpression*,&SgOmpWhenClause::p_user_condition_score>;
  117846             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, std::list<SgStatement*>,&SgOmpWhenClause::p_construct_directives>;
  117847             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgExpression*,&SgOmpWhenClause::p_device_arch>;
  117848             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgExpression*,&SgOmpWhenClause::p_device_isa>;
  117849             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgOmpClause::omp_when_context_kind_enum,&SgOmpWhenClause::p_device_kind>;
  117850             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgOmpClause::omp_when_context_vendor_enum,&SgOmpWhenClause::p_implementation_vendor>;
  117851             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgExpression*,&SgOmpWhenClause::p_implementation_user_defined>;
  117852             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgExpression*,&SgOmpWhenClause::p_implementation_extension>;
  117853             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpWhenClause, SgStatement*,&SgOmpWhenClause::p_variant_directive>;
  117854             : 
  117855             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117856             : 
  117857             : 
  117858             :    };
  117859             : #endif
  117860             : 
  117861             : // postdeclarations for SgOmpWhenClause
  117862             : 
  117863             : /* #line 117864 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117864             : 
  117865             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  117866             : 
  117867             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117868             : 
  117869             : 
  117870             : /* #line 117871 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117871             : 
  117872             : 
  117873             : 
  117874             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117875             : 
  117876             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  117877             : //      This code is automatically generated for each 
  117878             : //      terminal and non-terminal within the defined 
  117879             : //      grammar.  There is a simple way to change the 
  117880             : //      code to fix bugs etc.  See the ROSE README file
  117881             : //      for directions.
  117882             : 
  117883             : // tps: (02/22/2010): Adding DLL export requirements
  117884             : #include "rosedll.h"
  117885             : 
  117886             : // predeclarations for SgOmpUsesAllocatorsClause
  117887             : 
  117888             : /* #line 117889 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117889             : 
  117890             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  117891             : 
  117892             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  117893             : 
  117894             : #if 1
  117895             : // Class Definition for SgOmpUsesAllocatorsClause
  117896             : class ROSE_DLL_API SgOmpUsesAllocatorsClause  : public SgOmpClause
  117897             :    {
  117898             :      public:
  117899             : 
  117900             : 
  117901             : /* #line 117902 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  117902             : 
  117903             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  117904             : // Start of memberFunctionString
  117905             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  117906             : 
  117907             : // *** COMMON CODE SECTION BEGINS HERE ***
  117908             : 
  117909             :     public:
  117910             : 
  117911             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  117912             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  117913             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  117914             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  117915             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  117916             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  117917             : 
  117918             :       /*! \brief returns a string representing the class name */
  117919             :           virtual std::string class_name() const override;
  117920             : 
  117921             :       /*! \brief returns new style SageIII enum values */
  117922             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  117923             : 
  117924             :       /*! \brief static variant value */
  117925             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  117926             :        // static const VariantT static_variant = V_SgOmpUsesAllocatorsClause;
  117927             :           enum { static_variant = V_SgOmpUsesAllocatorsClause };
  117928             : 
  117929             :        /* the generated cast function */
  117930             :       /*! \brief Casts pointer from base class to derived class */
  117931             :           ROSE_DLL_API friend       SgOmpUsesAllocatorsClause* isSgOmpUsesAllocatorsClause(       SgNode * s );
  117932             : 
  117933             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  117934             :           ROSE_DLL_API friend const SgOmpUsesAllocatorsClause* isSgOmpUsesAllocatorsClause( const SgNode * s );
  117935             : 
  117936             :      // ******************************************
  117937             :      // * Memory Pool / New / Delete
  117938             :      // ******************************************
  117939             : 
  117940             :      public:
  117941             :           /// \private
  117942             :           static const unsigned pool_size; //
  117943             :           /// \private
  117944             :           static std::vector<unsigned char *> pools; //
  117945             :           /// \private
  117946             :           static SgOmpUsesAllocatorsClause * next_node; // 
  117947             : 
  117948             :           /// \private
  117949             :           static unsigned long initializeStorageClassArray(SgOmpUsesAllocatorsClauseStorageClass *); //
  117950             : 
  117951             :           /// \private
  117952             :           static void clearMemoryPool(); //
  117953             :           static void deleteMemoryPool(); //
  117954             : 
  117955             :           /// \private
  117956             :           static void extendMemoryPoolForFileIO(); //
  117957             : 
  117958             :           /// \private
  117959             :           static SgOmpUsesAllocatorsClause * getPointerFromGlobalIndex(unsigned long); //
  117960             :           /// \private
  117961             :           static SgOmpUsesAllocatorsClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  117962             : 
  117963             :           /// \private
  117964             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  117965             :           /// \private
  117966             :           static void resetValidFreepointers(); //
  117967             :           /// \private
  117968             :           static unsigned long getNumberOfLastValidPointer(); //
  117969             : 
  117970             : 
  117971             : #if defined(INLINE_FUNCTIONS)
  117972             :       /*! \brief returns pointer to newly allocated IR node */
  117973             :           inline void *operator new (size_t size);
  117974             : #else
  117975             :       /*! \brief returns pointer to newly allocated IR node */
  117976             :           void *operator new (size_t size);
  117977             : #endif
  117978             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  117979             :           void operator delete (void* pointer, size_t size);
  117980             : 
  117981             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  117982           0 :           void operator delete (void* pointer)
  117983             :              {
  117984             :             // This is the generated delete operator...
  117985           0 :                SgOmpUsesAllocatorsClause::operator delete (pointer,sizeof(SgOmpUsesAllocatorsClause));
  117986             :              }
  117987             : 
  117988             :       /*! \brief Returns the total number of IR nodes of this type */
  117989             :           static size_t numberOfNodes();
  117990             : 
  117991             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  117992             :           static size_t memoryUsage();
  117993             : 
  117994             :       // End of scope which started in IR nodes specific code 
  117995             :       /* */
  117996             : 
  117997             :       /* name Internal Functions
  117998             :           \brief Internal functions ... incomplete-documentation
  117999             : 
  118000             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118001             :           or by particularly knowledgeable users for specialized tools or applications.
  118002             : 
  118003             :           \internal We could not make these private because they are required by user for special purposes. And 
  118004             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  118005             :          
  118006             :        */
  118007             : 
  118008             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  118009             :        // overridden in every class by *generated* implementation
  118010             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  118011             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  118012             :        // MS: 06/28/02 container of names of variables or container indices 
  118013             :        // used used in the traversal to access AST successor nodes
  118014             :        // overridden in every class by *generated* implementation
  118015             :       /*! \brief container of names of variables or container indices used used in the traversal
  118016             :           to access AST successor nodes overridden in every class by *generated* implementation */
  118017             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  118018             : 
  118019             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  118020             :        // than all the vector copies. The implementation for these functions is generated for each class.
  118021             :       /*! \brief return number of children in the traversal successor list */
  118022             :           virtual size_t get_numberOfTraversalSuccessors() override;
  118023             :       /*! \brief index-based access to traversal successors by index number */
  118024             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  118025             :       /*! \brief index-based access to traversal successors by child node */
  118026             :           virtual size_t get_childIndex(SgNode *child) override;
  118027             : 
  118028             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  118029             :        // MS: 08/16/2002 method for generating RTI information
  118030             :       /*! \brief return C++ Runtime-Time-Information */
  118031             :           virtual RTIReturnType roseRTI() override;
  118032             : #endif
  118033             :       /* */
  118034             : 
  118035             : 
  118036             : 
  118037             :       /* name Deprecated Functions
  118038             :           \brief Deprecated functions ... incomplete-documentation
  118039             : 
  118040             :           These functions have been deprecated from use.
  118041             :        */
  118042             :       /* */
  118043             : 
  118044             :       /*! returns a C style string (char*) representing the class name */
  118045             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  118046             : 
  118047             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  118048             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  118049             : #if 0
  118050             :       /*! returns old style Sage II enum values */
  118051             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  118052             :       /*! returns old style Sage II enum values */
  118053             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  118054             : #endif
  118055             :       /* */
  118056             : 
  118057             : 
  118058             : 
  118059             : 
  118060             :      public:
  118061             :       /* name Traversal Support Functions
  118062             :           \brief Traversal support functions ... incomplete-documentation
  118063             : 
  118064             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118065             :           or by particularly knowledgable users for specialized tools or applications.
  118066             :        */
  118067             :       /* */
  118068             : 
  118069             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  118070             :        // (inferior to ROSE traversal mechanism, experimental).
  118071             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  118072             :        */
  118073             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  118074             : 
  118075             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  118076             :       /*! \brief support for the classic visitor pattern done in GoF */
  118077             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  118078             : 
  118079             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  118080             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  118081             :        */
  118082             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  118083             : 
  118084             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  118085             :        */
  118086             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  118087             : 
  118088             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  118089             :        // This traversal helps support internal tools that call static member functions.
  118090             :        // note: this function operates on the memory pools.
  118091             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  118092             :        */
  118093             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  118094             :       /* */
  118095             : 
  118096             : 
  118097             :      public:
  118098             :       /* name Memory Allocation Functions
  118099             :           \brief Memory allocations functions ... incomplete-documentation
  118100             : 
  118101             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118102             :           or by particularly knowledgable users for specialized tools or applications.
  118103             :        */
  118104             :       /* */
  118105             : 
  118106             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  118107             : 
  118108             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  118109             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  118110             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  118111             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  118112             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  118113             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  118114             :           being used with the AST File I/O mechanism.
  118115             :        */
  118116             :           virtual bool isInMemoryPool() override;
  118117             : 
  118118             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  118119             : 
  118120             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  118121             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  118122             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  118123             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  118124             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  118125             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  118126             :           being used with the AST File I/O mechanism.
  118127             :        */
  118128             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  118129             : 
  118130             :       // DQ (4/30/2006): Modified to be a const function.
  118131             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  118132             : 
  118133             :           This functions is part of general support for many possible tools to operate 
  118134             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  118135             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  118136             :           less than the set of pointers used by the AST file I/O. This is part of
  118137             :           work implemented by Andreas, and support tools such as the AST graph generation.
  118138             : 
  118139             :           \warning This function can return unexpected data members and thus the 
  118140             :                    order and the number of elements is unpredicable and subject 
  118141             :                    to change.
  118142             : 
  118143             :           \returns STL vector of pairs of SgNode* and strings
  118144             :        */
  118145             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  118146             : 
  118147             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  118148             : 
  118149             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  118150             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  118151             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  118152             : 
  118153             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  118154             :                    and subject to change.
  118155             :        */
  118156             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  118157             : 
  118158             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  118159             : 
  118160             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  118161             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  118162             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  118163             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  118164             : 
  118165             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  118166             : 
  118167             :           \returns long
  118168             :        */
  118169             :           virtual long getChildIndex( SgNode* childNode ) const override;
  118170             : 
  118171             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  118172             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  118173             :       /* \brief Constructor for use by AST File I/O Mechanism
  118174             : 
  118175             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  118176             :           which obtained via fast binary file I/O from disk.
  118177             :        */
  118178             :        // SgOmpUsesAllocatorsClause( SgOmpUsesAllocatorsClauseStorageClass& source );
  118179             : 
  118180             : 
  118181             : 
  118182             : 
  118183             : 
  118184             :  // JH (10/24/2005): methods added to support the ast file IO
  118185             :     private:
  118186             : 
  118187             :       /* name AST Memory Allocation Support Functions
  118188             :           \brief Memory allocations support....
  118189             : 
  118190             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  118191             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  118192             :           and support the AST File I/O Mechanism.
  118193             :        */
  118194             :       /* */
  118195             : 
  118196             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  118197             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  118198             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  118199             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  118200             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  118201             :           a correspinding one in the AST_FILE_IO class!
  118202             :        */
  118203             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  118204             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  118205             :       /* \brief Typedef used for low level memory access.
  118206             :        */
  118207             :        // typedef unsigned char* TestType;
  118208             : 
  118209             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  118210             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  118211             :       /* \brief Typedef used to hold memory addresses as values.
  118212             :        */
  118213             :        // typedef unsigned long  AddressType;
  118214             : 
  118215             : 
  118216             : 
  118217             :        // necessary, to have direct access to the p_freepointer and the private methods !
  118218             :       /*! \brief friend class declaration to support AST File I/O */
  118219             :           friend class AST_FILE_IO;
  118220             : 
  118221             :       /*! \brief friend class declaration to support AST File I/O */
  118222             :           friend class SgOmpUsesAllocatorsClauseStorageClass;
  118223             : 
  118224             :       /*! \brief friend class declaration to support AST File I/O */
  118225             :           friend class AstSpecificDataManagingClass;
  118226             : 
  118227             :       /*! \brief friend class declaration to support AST File I/O */
  118228             :           friend class AstSpecificDataManagingClassStorageClass;
  118229             :     public:
  118230             :       /*! \brief IR node constructor to support AST File I/O */
  118231             :           SgOmpUsesAllocatorsClause( const SgOmpUsesAllocatorsClauseStorageClass& source );
  118232             : 
  118233             :  // private: // JJW hack
  118234             :        /*
  118235             :           name AST Memory Allocation Support Variables
  118236             :           Memory allocations support variables 
  118237             : 
  118238             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  118239             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  118240             :           and support the AST File I/O Mechanism.
  118241             :        */
  118242             :       /* */
  118243             : 
  118244             :     public:
  118245             : 
  118246             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  118247             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  118248             :       // virtual SgNode* addRegExpAttribute();
  118249             :       /*! \brief Support for AST matching using regular expression.
  118250             : 
  118251             :           This support is incomplete and the subject of current research to define 
  118252             :           RegEx trees to support inexact matching.
  118253             :        */
  118254             :           SgOmpUsesAllocatorsClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  118255             : 
  118256             : // *** COMMON CODE SECTION ENDS HERE ***
  118257             : 
  118258             : 
  118259             : // End of memberFunctionString
  118260             : // Start of memberFunctionString
  118261             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  118262             : 
  118263             :      // the generated cast function
  118264             :      // friend ROSE_DLL_API SgOmpUsesAllocatorsClause* isSgOmpUsesAllocatorsClause ( SgNode* s );
  118265             : 
  118266             :           typedef SgOmpClause base_node_type;
  118267             : 
  118268             : 
  118269             : // End of memberFunctionString
  118270             : 
  118271             :      public: 
  118272             :          std::list<SgOmpUsesAllocatorsDefination*> get_uses_allocators_defination() const;
  118273             :          void set_uses_allocators_defination(std::list<SgOmpUsesAllocatorsDefination*> uses_allocators_defination);
  118274             : 
  118275             : 
  118276             :      public: 
  118277             :          virtual ~SgOmpUsesAllocatorsClause();
  118278             : 
  118279             : 
  118280             :      public: 
  118281             :          SgOmpUsesAllocatorsClause(Sg_File_Info* startOfConstruct ); 
  118282             :          SgOmpUsesAllocatorsClause(); 
  118283             : 
  118284             :     protected:
  118285             : // Start of memberFunctionString
  118286             : std::list<SgOmpUsesAllocatorsDefination*> p_uses_allocators_defination;
  118287             :           
  118288             : // End of memberFunctionString
  118289             : 
  118290             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUsesAllocatorsClause>;
  118291             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpUsesAllocatorsClause, std::list<SgOmpUsesAllocatorsDefination*>,&SgOmpUsesAllocatorsClause::p_uses_allocators_defination>;
  118292             : 
  118293             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118294             : 
  118295             : 
  118296             :    };
  118297             : #endif
  118298             : 
  118299             : // postdeclarations for SgOmpUsesAllocatorsClause
  118300             : 
  118301             : /* #line 118302 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118302             : 
  118303             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  118304             : 
  118305             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118306             : 
  118307             : 
  118308             : /* #line 118309 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118309             : 
  118310             : 
  118311             : 
  118312             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118313             : 
  118314             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  118315             : //      This code is automatically generated for each 
  118316             : //      terminal and non-terminal within the defined 
  118317             : //      grammar.  There is a simple way to change the 
  118318             : //      code to fix bugs etc.  See the ROSE README file
  118319             : //      for directions.
  118320             : 
  118321             : // tps: (02/22/2010): Adding DLL export requirements
  118322             : #include "rosedll.h"
  118323             : 
  118324             : // predeclarations for SgOmpFullClause
  118325             : 
  118326             : /* #line 118327 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118327             : 
  118328             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  118329             : 
  118330             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118331             : 
  118332             : #if 1
  118333             : // Class Definition for SgOmpFullClause
  118334             : class ROSE_DLL_API SgOmpFullClause  : public SgOmpClause
  118335             :    {
  118336             :      public:
  118337             : 
  118338             : 
  118339             : /* #line 118340 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118340             : 
  118341             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  118342             : // Start of memberFunctionString
  118343             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  118344             : 
  118345             : // *** COMMON CODE SECTION BEGINS HERE ***
  118346             : 
  118347             :     public:
  118348             : 
  118349             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  118350             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  118351             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  118352             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  118353             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  118354             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  118355             : 
  118356             :       /*! \brief returns a string representing the class name */
  118357             :           virtual std::string class_name() const override;
  118358             : 
  118359             :       /*! \brief returns new style SageIII enum values */
  118360             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  118361             : 
  118362             :       /*! \brief static variant value */
  118363             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  118364             :        // static const VariantT static_variant = V_SgOmpFullClause;
  118365             :           enum { static_variant = V_SgOmpFullClause };
  118366             : 
  118367             :        /* the generated cast function */
  118368             :       /*! \brief Casts pointer from base class to derived class */
  118369             :           ROSE_DLL_API friend       SgOmpFullClause* isSgOmpFullClause(       SgNode * s );
  118370             : 
  118371             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  118372             :           ROSE_DLL_API friend const SgOmpFullClause* isSgOmpFullClause( const SgNode * s );
  118373             : 
  118374             :      // ******************************************
  118375             :      // * Memory Pool / New / Delete
  118376             :      // ******************************************
  118377             : 
  118378             :      public:
  118379             :           /// \private
  118380             :           static const unsigned pool_size; //
  118381             :           /// \private
  118382             :           static std::vector<unsigned char *> pools; //
  118383             :           /// \private
  118384             :           static SgOmpFullClause * next_node; // 
  118385             : 
  118386             :           /// \private
  118387             :           static unsigned long initializeStorageClassArray(SgOmpFullClauseStorageClass *); //
  118388             : 
  118389             :           /// \private
  118390             :           static void clearMemoryPool(); //
  118391             :           static void deleteMemoryPool(); //
  118392             : 
  118393             :           /// \private
  118394             :           static void extendMemoryPoolForFileIO(); //
  118395             : 
  118396             :           /// \private
  118397             :           static SgOmpFullClause * getPointerFromGlobalIndex(unsigned long); //
  118398             :           /// \private
  118399             :           static SgOmpFullClause * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  118400             : 
  118401             :           /// \private
  118402             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  118403             :           /// \private
  118404             :           static void resetValidFreepointers(); //
  118405             :           /// \private
  118406             :           static unsigned long getNumberOfLastValidPointer(); //
  118407             : 
  118408             : 
  118409             : #if defined(INLINE_FUNCTIONS)
  118410             :       /*! \brief returns pointer to newly allocated IR node */
  118411             :           inline void *operator new (size_t size);
  118412             : #else
  118413             :       /*! \brief returns pointer to newly allocated IR node */
  118414             :           void *operator new (size_t size);
  118415             : #endif
  118416             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  118417             :           void operator delete (void* pointer, size_t size);
  118418             : 
  118419             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  118420           0 :           void operator delete (void* pointer)
  118421             :              {
  118422             :             // This is the generated delete operator...
  118423           0 :                SgOmpFullClause::operator delete (pointer,sizeof(SgOmpFullClause));
  118424             :              }
  118425             : 
  118426             :       /*! \brief Returns the total number of IR nodes of this type */
  118427             :           static size_t numberOfNodes();
  118428             : 
  118429             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  118430             :           static size_t memoryUsage();
  118431             : 
  118432             :       // End of scope which started in IR nodes specific code 
  118433             :       /* */
  118434             : 
  118435             :       /* name Internal Functions
  118436             :           \brief Internal functions ... incomplete-documentation
  118437             : 
  118438             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118439             :           or by particularly knowledgeable users for specialized tools or applications.
  118440             : 
  118441             :           \internal We could not make these private because they are required by user for special purposes. And 
  118442             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  118443             :          
  118444             :        */
  118445             : 
  118446             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  118447             :        // overridden in every class by *generated* implementation
  118448             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  118449             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  118450             :        // MS: 06/28/02 container of names of variables or container indices 
  118451             :        // used used in the traversal to access AST successor nodes
  118452             :        // overridden in every class by *generated* implementation
  118453             :       /*! \brief container of names of variables or container indices used used in the traversal
  118454             :           to access AST successor nodes overridden in every class by *generated* implementation */
  118455             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  118456             : 
  118457             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  118458             :        // than all the vector copies. The implementation for these functions is generated for each class.
  118459             :       /*! \brief return number of children in the traversal successor list */
  118460             :           virtual size_t get_numberOfTraversalSuccessors() override;
  118461             :       /*! \brief index-based access to traversal successors by index number */
  118462             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  118463             :       /*! \brief index-based access to traversal successors by child node */
  118464             :           virtual size_t get_childIndex(SgNode *child) override;
  118465             : 
  118466             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  118467             :        // MS: 08/16/2002 method for generating RTI information
  118468             :       /*! \brief return C++ Runtime-Time-Information */
  118469             :           virtual RTIReturnType roseRTI() override;
  118470             : #endif
  118471             :       /* */
  118472             : 
  118473             : 
  118474             : 
  118475             :       /* name Deprecated Functions
  118476             :           \brief Deprecated functions ... incomplete-documentation
  118477             : 
  118478             :           These functions have been deprecated from use.
  118479             :        */
  118480             :       /* */
  118481             : 
  118482             :       /*! returns a C style string (char*) representing the class name */
  118483             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  118484             : 
  118485             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  118486             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  118487             : #if 0
  118488             :       /*! returns old style Sage II enum values */
  118489             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  118490             :       /*! returns old style Sage II enum values */
  118491             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  118492             : #endif
  118493             :       /* */
  118494             : 
  118495             : 
  118496             : 
  118497             : 
  118498             :      public:
  118499             :       /* name Traversal Support Functions
  118500             :           \brief Traversal support functions ... incomplete-documentation
  118501             : 
  118502             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118503             :           or by particularly knowledgable users for specialized tools or applications.
  118504             :        */
  118505             :       /* */
  118506             : 
  118507             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  118508             :        // (inferior to ROSE traversal mechanism, experimental).
  118509             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  118510             :        */
  118511             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  118512             : 
  118513             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  118514             :       /*! \brief support for the classic visitor pattern done in GoF */
  118515             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  118516             : 
  118517             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  118518             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  118519             :        */
  118520             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  118521             : 
  118522             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  118523             :        */
  118524             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  118525             : 
  118526             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  118527             :        // This traversal helps support internal tools that call static member functions.
  118528             :        // note: this function operates on the memory pools.
  118529             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  118530             :        */
  118531             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  118532             :       /* */
  118533             : 
  118534             : 
  118535             :      public:
  118536             :       /* name Memory Allocation Functions
  118537             :           \brief Memory allocations functions ... incomplete-documentation
  118538             : 
  118539             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118540             :           or by particularly knowledgable users for specialized tools or applications.
  118541             :        */
  118542             :       /* */
  118543             : 
  118544             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  118545             : 
  118546             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  118547             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  118548             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  118549             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  118550             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  118551             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  118552             :           being used with the AST File I/O mechanism.
  118553             :        */
  118554             :           virtual bool isInMemoryPool() override;
  118555             : 
  118556             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  118557             : 
  118558             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  118559             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  118560             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  118561             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  118562             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  118563             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  118564             :           being used with the AST File I/O mechanism.
  118565             :        */
  118566             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  118567             : 
  118568             :       // DQ (4/30/2006): Modified to be a const function.
  118569             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  118570             : 
  118571             :           This functions is part of general support for many possible tools to operate 
  118572             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  118573             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  118574             :           less than the set of pointers used by the AST file I/O. This is part of
  118575             :           work implemented by Andreas, and support tools such as the AST graph generation.
  118576             : 
  118577             :           \warning This function can return unexpected data members and thus the 
  118578             :                    order and the number of elements is unpredicable and subject 
  118579             :                    to change.
  118580             : 
  118581             :           \returns STL vector of pairs of SgNode* and strings
  118582             :        */
  118583             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  118584             : 
  118585             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  118586             : 
  118587             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  118588             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  118589             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  118590             : 
  118591             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  118592             :                    and subject to change.
  118593             :        */
  118594             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  118595             : 
  118596             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  118597             : 
  118598             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  118599             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  118600             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  118601             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  118602             : 
  118603             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  118604             : 
  118605             :           \returns long
  118606             :        */
  118607             :           virtual long getChildIndex( SgNode* childNode ) const override;
  118608             : 
  118609             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  118610             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  118611             :       /* \brief Constructor for use by AST File I/O Mechanism
  118612             : 
  118613             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  118614             :           which obtained via fast binary file I/O from disk.
  118615             :        */
  118616             :        // SgOmpFullClause( SgOmpFullClauseStorageClass& source );
  118617             : 
  118618             : 
  118619             : 
  118620             : 
  118621             : 
  118622             :  // JH (10/24/2005): methods added to support the ast file IO
  118623             :     private:
  118624             : 
  118625             :       /* name AST Memory Allocation Support Functions
  118626             :           \brief Memory allocations support....
  118627             : 
  118628             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  118629             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  118630             :           and support the AST File I/O Mechanism.
  118631             :        */
  118632             :       /* */
  118633             : 
  118634             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  118635             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  118636             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  118637             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  118638             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  118639             :           a correspinding one in the AST_FILE_IO class!
  118640             :        */
  118641             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  118642             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  118643             :       /* \brief Typedef used for low level memory access.
  118644             :        */
  118645             :        // typedef unsigned char* TestType;
  118646             : 
  118647             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  118648             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  118649             :       /* \brief Typedef used to hold memory addresses as values.
  118650             :        */
  118651             :        // typedef unsigned long  AddressType;
  118652             : 
  118653             : 
  118654             : 
  118655             :        // necessary, to have direct access to the p_freepointer and the private methods !
  118656             :       /*! \brief friend class declaration to support AST File I/O */
  118657             :           friend class AST_FILE_IO;
  118658             : 
  118659             :       /*! \brief friend class declaration to support AST File I/O */
  118660             :           friend class SgOmpFullClauseStorageClass;
  118661             : 
  118662             :       /*! \brief friend class declaration to support AST File I/O */
  118663             :           friend class AstSpecificDataManagingClass;
  118664             : 
  118665             :       /*! \brief friend class declaration to support AST File I/O */
  118666             :           friend class AstSpecificDataManagingClassStorageClass;
  118667             :     public:
  118668             :       /*! \brief IR node constructor to support AST File I/O */
  118669             :           SgOmpFullClause( const SgOmpFullClauseStorageClass& source );
  118670             : 
  118671             :  // private: // JJW hack
  118672             :        /*
  118673             :           name AST Memory Allocation Support Variables
  118674             :           Memory allocations support variables 
  118675             : 
  118676             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  118677             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  118678             :           and support the AST File I/O Mechanism.
  118679             :        */
  118680             :       /* */
  118681             : 
  118682             :     public:
  118683             : 
  118684             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  118685             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  118686             :       // virtual SgNode* addRegExpAttribute();
  118687             :       /*! \brief Support for AST matching using regular expression.
  118688             : 
  118689             :           This support is incomplete and the subject of current research to define 
  118690             :           RegEx trees to support inexact matching.
  118691             :        */
  118692             :           SgOmpFullClause* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  118693             : 
  118694             : // *** COMMON CODE SECTION ENDS HERE ***
  118695             : 
  118696             : 
  118697             : // End of memberFunctionString
  118698             : // Start of memberFunctionString
  118699             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  118700             : 
  118701             :      // the generated cast function
  118702             :      // friend ROSE_DLL_API SgOmpFullClause* isSgOmpFullClause ( SgNode* s );
  118703             : 
  118704             :           typedef SgOmpClause base_node_type;
  118705             : 
  118706             : 
  118707             : // End of memberFunctionString
  118708             : 
  118709             : 
  118710             :      public: 
  118711             :          virtual ~SgOmpFullClause();
  118712             : 
  118713             : 
  118714             :      public: 
  118715             :          SgOmpFullClause(Sg_File_Info* startOfConstruct ); 
  118716             :          SgOmpFullClause(); 
  118717             : 
  118718             :     protected:
  118719             : 
  118720             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpFullClause>;
  118721             : 
  118722             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118723             : 
  118724             : 
  118725             :    };
  118726             : #endif
  118727             : 
  118728             : // postdeclarations for SgOmpFullClause
  118729             : 
  118730             : /* #line 118731 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118731             : 
  118732             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  118733             : 
  118734             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118735             : 
  118736             : 
  118737             : /* #line 118738 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118738             : 
  118739             : 
  118740             : 
  118741             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118742             : 
  118743             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  118744             : //      This code is automatically generated for each 
  118745             : //      terminal and non-terminal within the defined 
  118746             : //      grammar.  There is a simple way to change the 
  118747             : //      code to fix bugs etc.  See the ROSE README file
  118748             : //      for directions.
  118749             : 
  118750             : // tps: (02/22/2010): Adding DLL export requirements
  118751             : #include "rosedll.h"
  118752             : 
  118753             : // predeclarations for SgUpirBranchField
  118754             : 
  118755             : /* #line 118756 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118756             : 
  118757             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  118758             : 
  118759             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  118760             : 
  118761             : #if 1
  118762             : // Class Definition for SgUpirBranchField
  118763             : class ROSE_DLL_API SgUpirBranchField  : public SgOmpClause
  118764             :    {
  118765             :      public:
  118766             : 
  118767             : 
  118768             : /* #line 118769 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  118769             : 
  118770             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  118771             : // Start of memberFunctionString
  118772             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  118773             : 
  118774             : // *** COMMON CODE SECTION BEGINS HERE ***
  118775             : 
  118776             :     public:
  118777             : 
  118778             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  118779             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  118780             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  118781             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  118782             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  118783             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  118784             : 
  118785             :       /*! \brief returns a string representing the class name */
  118786             :           virtual std::string class_name() const override;
  118787             : 
  118788             :       /*! \brief returns new style SageIII enum values */
  118789             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  118790             : 
  118791             :       /*! \brief static variant value */
  118792             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  118793             :        // static const VariantT static_variant = V_SgUpirBranchField;
  118794             :           enum { static_variant = V_SgUpirBranchField };
  118795             : 
  118796             :        /* the generated cast function */
  118797             :       /*! \brief Casts pointer from base class to derived class */
  118798             :           ROSE_DLL_API friend       SgUpirBranchField* isSgUpirBranchField(       SgNode * s );
  118799             : 
  118800             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  118801             :           ROSE_DLL_API friend const SgUpirBranchField* isSgUpirBranchField( const SgNode * s );
  118802             : 
  118803             :      // ******************************************
  118804             :      // * Memory Pool / New / Delete
  118805             :      // ******************************************
  118806             : 
  118807             :      public:
  118808             :           /// \private
  118809             :           static const unsigned pool_size; //
  118810             :           /// \private
  118811             :           static std::vector<unsigned char *> pools; //
  118812             :           /// \private
  118813             :           static SgUpirBranchField * next_node; // 
  118814             : 
  118815             :           /// \private
  118816             :           static unsigned long initializeStorageClassArray(SgUpirBranchFieldStorageClass *); //
  118817             : 
  118818             :           /// \private
  118819             :           static void clearMemoryPool(); //
  118820             :           static void deleteMemoryPool(); //
  118821             : 
  118822             :           /// \private
  118823             :           static void extendMemoryPoolForFileIO(); //
  118824             : 
  118825             :           /// \private
  118826             :           static SgUpirBranchField * getPointerFromGlobalIndex(unsigned long); //
  118827             :           /// \private
  118828             :           static SgUpirBranchField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  118829             : 
  118830             :           /// \private
  118831             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  118832             :           /// \private
  118833             :           static void resetValidFreepointers(); //
  118834             :           /// \private
  118835             :           static unsigned long getNumberOfLastValidPointer(); //
  118836             : 
  118837             : 
  118838             : #if defined(INLINE_FUNCTIONS)
  118839             :       /*! \brief returns pointer to newly allocated IR node */
  118840             :           inline void *operator new (size_t size);
  118841             : #else
  118842             :       /*! \brief returns pointer to newly allocated IR node */
  118843             :           void *operator new (size_t size);
  118844             : #endif
  118845             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  118846             :           void operator delete (void* pointer, size_t size);
  118847             : 
  118848             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  118849           0 :           void operator delete (void* pointer)
  118850             :              {
  118851             :             // This is the generated delete operator...
  118852           0 :                SgUpirBranchField::operator delete (pointer,sizeof(SgUpirBranchField));
  118853             :              }
  118854             : 
  118855             :       /*! \brief Returns the total number of IR nodes of this type */
  118856             :           static size_t numberOfNodes();
  118857             : 
  118858             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  118859             :           static size_t memoryUsage();
  118860             : 
  118861             :       // End of scope which started in IR nodes specific code 
  118862             :       /* */
  118863             : 
  118864             :       /* name Internal Functions
  118865             :           \brief Internal functions ... incomplete-documentation
  118866             : 
  118867             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118868             :           or by particularly knowledgeable users for specialized tools or applications.
  118869             : 
  118870             :           \internal We could not make these private because they are required by user for special purposes. And 
  118871             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  118872             :          
  118873             :        */
  118874             : 
  118875             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  118876             :        // overridden in every class by *generated* implementation
  118877             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  118878             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  118879             :        // MS: 06/28/02 container of names of variables or container indices 
  118880             :        // used used in the traversal to access AST successor nodes
  118881             :        // overridden in every class by *generated* implementation
  118882             :       /*! \brief container of names of variables or container indices used used in the traversal
  118883             :           to access AST successor nodes overridden in every class by *generated* implementation */
  118884             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  118885             : 
  118886             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  118887             :        // than all the vector copies. The implementation for these functions is generated for each class.
  118888             :       /*! \brief return number of children in the traversal successor list */
  118889             :           virtual size_t get_numberOfTraversalSuccessors() override;
  118890             :       /*! \brief index-based access to traversal successors by index number */
  118891             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  118892             :       /*! \brief index-based access to traversal successors by child node */
  118893             :           virtual size_t get_childIndex(SgNode *child) override;
  118894             : 
  118895             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  118896             :        // MS: 08/16/2002 method for generating RTI information
  118897             :       /*! \brief return C++ Runtime-Time-Information */
  118898             :           virtual RTIReturnType roseRTI() override;
  118899             : #endif
  118900             :       /* */
  118901             : 
  118902             : 
  118903             : 
  118904             :       /* name Deprecated Functions
  118905             :           \brief Deprecated functions ... incomplete-documentation
  118906             : 
  118907             :           These functions have been deprecated from use.
  118908             :        */
  118909             :       /* */
  118910             : 
  118911             :       /*! returns a C style string (char*) representing the class name */
  118912             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  118913             : 
  118914             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  118915             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  118916             : #if 0
  118917             :       /*! returns old style Sage II enum values */
  118918             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  118919             :       /*! returns old style Sage II enum values */
  118920             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  118921             : #endif
  118922             :       /* */
  118923             : 
  118924             : 
  118925             : 
  118926             : 
  118927             :      public:
  118928             :       /* name Traversal Support Functions
  118929             :           \brief Traversal support functions ... incomplete-documentation
  118930             : 
  118931             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118932             :           or by particularly knowledgable users for specialized tools or applications.
  118933             :        */
  118934             :       /* */
  118935             : 
  118936             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  118937             :        // (inferior to ROSE traversal mechanism, experimental).
  118938             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  118939             :        */
  118940             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  118941             : 
  118942             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  118943             :       /*! \brief support for the classic visitor pattern done in GoF */
  118944             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  118945             : 
  118946             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  118947             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  118948             :        */
  118949             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  118950             : 
  118951             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  118952             :        */
  118953             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  118954             : 
  118955             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  118956             :        // This traversal helps support internal tools that call static member functions.
  118957             :        // note: this function operates on the memory pools.
  118958             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  118959             :        */
  118960             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  118961             :       /* */
  118962             : 
  118963             : 
  118964             :      public:
  118965             :       /* name Memory Allocation Functions
  118966             :           \brief Memory allocations functions ... incomplete-documentation
  118967             : 
  118968             :           These functions have been made public as part of the design, but they are suggested for internal use 
  118969             :           or by particularly knowledgable users for specialized tools or applications.
  118970             :        */
  118971             :       /* */
  118972             : 
  118973             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  118974             : 
  118975             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  118976             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  118977             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  118978             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  118979             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  118980             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  118981             :           being used with the AST File I/O mechanism.
  118982             :        */
  118983             :           virtual bool isInMemoryPool() override;
  118984             : 
  118985             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  118986             : 
  118987             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  118988             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  118989             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  118990             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  118991             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  118992             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  118993             :           being used with the AST File I/O mechanism.
  118994             :        */
  118995             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  118996             : 
  118997             :       // DQ (4/30/2006): Modified to be a const function.
  118998             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  118999             : 
  119000             :           This functions is part of general support for many possible tools to operate 
  119001             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  119002             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  119003             :           less than the set of pointers used by the AST file I/O. This is part of
  119004             :           work implemented by Andreas, and support tools such as the AST graph generation.
  119005             : 
  119006             :           \warning This function can return unexpected data members and thus the 
  119007             :                    order and the number of elements is unpredicable and subject 
  119008             :                    to change.
  119009             : 
  119010             :           \returns STL vector of pairs of SgNode* and strings
  119011             :        */
  119012             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  119013             : 
  119014             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  119015             : 
  119016             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  119017             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  119018             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  119019             : 
  119020             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  119021             :                    and subject to change.
  119022             :        */
  119023             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  119024             : 
  119025             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  119026             : 
  119027             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  119028             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  119029             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  119030             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  119031             : 
  119032             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  119033             : 
  119034             :           \returns long
  119035             :        */
  119036             :           virtual long getChildIndex( SgNode* childNode ) const override;
  119037             : 
  119038             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  119039             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119040             :       /* \brief Constructor for use by AST File I/O Mechanism
  119041             : 
  119042             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  119043             :           which obtained via fast binary file I/O from disk.
  119044             :        */
  119045             :        // SgUpirBranchField( SgUpirBranchFieldStorageClass& source );
  119046             : 
  119047             : 
  119048             : 
  119049             : 
  119050             : 
  119051             :  // JH (10/24/2005): methods added to support the ast file IO
  119052             :     private:
  119053             : 
  119054             :       /* name AST Memory Allocation Support Functions
  119055             :           \brief Memory allocations support....
  119056             : 
  119057             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  119058             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  119059             :           and support the AST File I/O Mechanism.
  119060             :        */
  119061             :       /* */
  119062             : 
  119063             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  119064             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  119065             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  119066             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  119067             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  119068             :           a correspinding one in the AST_FILE_IO class!
  119069             :        */
  119070             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  119071             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119072             :       /* \brief Typedef used for low level memory access.
  119073             :        */
  119074             :        // typedef unsigned char* TestType;
  119075             : 
  119076             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  119077             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119078             :       /* \brief Typedef used to hold memory addresses as values.
  119079             :        */
  119080             :        // typedef unsigned long  AddressType;
  119081             : 
  119082             : 
  119083             : 
  119084             :        // necessary, to have direct access to the p_freepointer and the private methods !
  119085             :       /*! \brief friend class declaration to support AST File I/O */
  119086             :           friend class AST_FILE_IO;
  119087             : 
  119088             :       /*! \brief friend class declaration to support AST File I/O */
  119089             :           friend class SgUpirBranchFieldStorageClass;
  119090             : 
  119091             :       /*! \brief friend class declaration to support AST File I/O */
  119092             :           friend class AstSpecificDataManagingClass;
  119093             : 
  119094             :       /*! \brief friend class declaration to support AST File I/O */
  119095             :           friend class AstSpecificDataManagingClassStorageClass;
  119096             :     public:
  119097             :       /*! \brief IR node constructor to support AST File I/O */
  119098             :           SgUpirBranchField( const SgUpirBranchFieldStorageClass& source );
  119099             : 
  119100             :  // private: // JJW hack
  119101             :        /*
  119102             :           name AST Memory Allocation Support Variables
  119103             :           Memory allocations support variables 
  119104             : 
  119105             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  119106             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  119107             :           and support the AST File I/O Mechanism.
  119108             :        */
  119109             :       /* */
  119110             : 
  119111             :     public:
  119112             : 
  119113             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  119114             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  119115             :       // virtual SgNode* addRegExpAttribute();
  119116             :       /*! \brief Support for AST matching using regular expression.
  119117             : 
  119118             :           This support is incomplete and the subject of current research to define 
  119119             :           RegEx trees to support inexact matching.
  119120             :        */
  119121             :           SgUpirBranchField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  119122             : 
  119123             : // *** COMMON CODE SECTION ENDS HERE ***
  119124             : 
  119125             : 
  119126             : // End of memberFunctionString
  119127             : // Start of memberFunctionString
  119128             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  119129             : 
  119130             :      // the generated cast function
  119131             :      // friend ROSE_DLL_API SgUpirBranchField* isSgUpirBranchField ( SgNode* s );
  119132             : 
  119133             :           typedef SgOmpClause base_node_type;
  119134             : 
  119135             : 
  119136             : // End of memberFunctionString
  119137             : 
  119138             :      public: 
  119139             :          std::list<std::list<SgStatement*> > get_branches() const;
  119140             :          void set_branches(std::list<std::list<SgStatement*> > branches);
  119141             : 
  119142             : 
  119143             :      public: 
  119144             :          virtual ~SgUpirBranchField();
  119145             : 
  119146             : 
  119147             :      public: 
  119148             :          SgUpirBranchField(Sg_File_Info* startOfConstruct ); 
  119149             :          SgUpirBranchField(); 
  119150             : 
  119151             :     protected:
  119152             : // Start of memberFunctionString
  119153             : std::list<std::list<SgStatement*> > p_branches;
  119154             :           
  119155             : // End of memberFunctionString
  119156             : 
  119157             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirBranchField>;
  119158             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirBranchField, std::list<std::list<SgStatement*> >,&SgUpirBranchField::p_branches>;
  119159             : 
  119160             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119161             : 
  119162             : 
  119163             :    };
  119164             : #endif
  119165             : 
  119166             : // postdeclarations for SgUpirBranchField
  119167             : 
  119168             : /* #line 119169 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119169             : 
  119170             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  119171             : 
  119172             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119173             : 
  119174             : 
  119175             : /* #line 119176 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119176             : 
  119177             : 
  119178             : 
  119179             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119180             : 
  119181             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  119182             : //      This code is automatically generated for each 
  119183             : //      terminal and non-terminal within the defined 
  119184             : //      grammar.  There is a simple way to change the 
  119185             : //      code to fix bugs etc.  See the ROSE README file
  119186             : //      for directions.
  119187             : 
  119188             : // tps: (02/22/2010): Adding DLL export requirements
  119189             : #include "rosedll.h"
  119190             : 
  119191             : // predeclarations for SgUpirNestedLevelField
  119192             : 
  119193             : /* #line 119194 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119194             : 
  119195             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  119196             : 
  119197             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119198             : 
  119199             : #if 1
  119200             : // Class Definition for SgUpirNestedLevelField
  119201             : class ROSE_DLL_API SgUpirNestedLevelField  : public SgOmpClause
  119202             :    {
  119203             :      public:
  119204             : 
  119205             : 
  119206             : /* #line 119207 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119207             : 
  119208             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  119209             : // Start of memberFunctionString
  119210             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  119211             : 
  119212             : // *** COMMON CODE SECTION BEGINS HERE ***
  119213             : 
  119214             :     public:
  119215             : 
  119216             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  119217             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  119218             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  119219             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  119220             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  119221             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  119222             : 
  119223             :       /*! \brief returns a string representing the class name */
  119224             :           virtual std::string class_name() const override;
  119225             : 
  119226             :       /*! \brief returns new style SageIII enum values */
  119227             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  119228             : 
  119229             :       /*! \brief static variant value */
  119230             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  119231             :        // static const VariantT static_variant = V_SgUpirNestedLevelField;
  119232             :           enum { static_variant = V_SgUpirNestedLevelField };
  119233             : 
  119234             :        /* the generated cast function */
  119235             :       /*! \brief Casts pointer from base class to derived class */
  119236             :           ROSE_DLL_API friend       SgUpirNestedLevelField* isSgUpirNestedLevelField(       SgNode * s );
  119237             : 
  119238             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  119239             :           ROSE_DLL_API friend const SgUpirNestedLevelField* isSgUpirNestedLevelField( const SgNode * s );
  119240             : 
  119241             :      // ******************************************
  119242             :      // * Memory Pool / New / Delete
  119243             :      // ******************************************
  119244             : 
  119245             :      public:
  119246             :           /// \private
  119247             :           static const unsigned pool_size; //
  119248             :           /// \private
  119249             :           static std::vector<unsigned char *> pools; //
  119250             :           /// \private
  119251             :           static SgUpirNestedLevelField * next_node; // 
  119252             : 
  119253             :           /// \private
  119254             :           static unsigned long initializeStorageClassArray(SgUpirNestedLevelFieldStorageClass *); //
  119255             : 
  119256             :           /// \private
  119257             :           static void clearMemoryPool(); //
  119258             :           static void deleteMemoryPool(); //
  119259             : 
  119260             :           /// \private
  119261             :           static void extendMemoryPoolForFileIO(); //
  119262             : 
  119263             :           /// \private
  119264             :           static SgUpirNestedLevelField * getPointerFromGlobalIndex(unsigned long); //
  119265             :           /// \private
  119266             :           static SgUpirNestedLevelField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  119267             : 
  119268             :           /// \private
  119269             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  119270             :           /// \private
  119271             :           static void resetValidFreepointers(); //
  119272             :           /// \private
  119273             :           static unsigned long getNumberOfLastValidPointer(); //
  119274             : 
  119275             : 
  119276             : #if defined(INLINE_FUNCTIONS)
  119277             :       /*! \brief returns pointer to newly allocated IR node */
  119278             :           inline void *operator new (size_t size);
  119279             : #else
  119280             :       /*! \brief returns pointer to newly allocated IR node */
  119281             :           void *operator new (size_t size);
  119282             : #endif
  119283             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  119284             :           void operator delete (void* pointer, size_t size);
  119285             : 
  119286             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  119287           0 :           void operator delete (void* pointer)
  119288             :              {
  119289             :             // This is the generated delete operator...
  119290           0 :                SgUpirNestedLevelField::operator delete (pointer,sizeof(SgUpirNestedLevelField));
  119291             :              }
  119292             : 
  119293             :       /*! \brief Returns the total number of IR nodes of this type */
  119294             :           static size_t numberOfNodes();
  119295             : 
  119296             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  119297             :           static size_t memoryUsage();
  119298             : 
  119299             :       // End of scope which started in IR nodes specific code 
  119300             :       /* */
  119301             : 
  119302             :       /* name Internal Functions
  119303             :           \brief Internal functions ... incomplete-documentation
  119304             : 
  119305             :           These functions have been made public as part of the design, but they are suggested for internal use 
  119306             :           or by particularly knowledgeable users for specialized tools or applications.
  119307             : 
  119308             :           \internal We could not make these private because they are required by user for special purposes. And 
  119309             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  119310             :          
  119311             :        */
  119312             : 
  119313             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  119314             :        // overridden in every class by *generated* implementation
  119315             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  119316             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  119317             :        // MS: 06/28/02 container of names of variables or container indices 
  119318             :        // used used in the traversal to access AST successor nodes
  119319             :        // overridden in every class by *generated* implementation
  119320             :       /*! \brief container of names of variables or container indices used used in the traversal
  119321             :           to access AST successor nodes overridden in every class by *generated* implementation */
  119322             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  119323             : 
  119324             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  119325             :        // than all the vector copies. The implementation for these functions is generated for each class.
  119326             :       /*! \brief return number of children in the traversal successor list */
  119327             :           virtual size_t get_numberOfTraversalSuccessors() override;
  119328             :       /*! \brief index-based access to traversal successors by index number */
  119329             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  119330             :       /*! \brief index-based access to traversal successors by child node */
  119331             :           virtual size_t get_childIndex(SgNode *child) override;
  119332             : 
  119333             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  119334             :        // MS: 08/16/2002 method for generating RTI information
  119335             :       /*! \brief return C++ Runtime-Time-Information */
  119336             :           virtual RTIReturnType roseRTI() override;
  119337             : #endif
  119338             :       /* */
  119339             : 
  119340             : 
  119341             : 
  119342             :       /* name Deprecated Functions
  119343             :           \brief Deprecated functions ... incomplete-documentation
  119344             : 
  119345             :           These functions have been deprecated from use.
  119346             :        */
  119347             :       /* */
  119348             : 
  119349             :       /*! returns a C style string (char*) representing the class name */
  119350             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  119351             : 
  119352             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  119353             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  119354             : #if 0
  119355             :       /*! returns old style Sage II enum values */
  119356             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  119357             :       /*! returns old style Sage II enum values */
  119358             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  119359             : #endif
  119360             :       /* */
  119361             : 
  119362             : 
  119363             : 
  119364             : 
  119365             :      public:
  119366             :       /* name Traversal Support Functions
  119367             :           \brief Traversal support functions ... incomplete-documentation
  119368             : 
  119369             :           These functions have been made public as part of the design, but they are suggested for internal use 
  119370             :           or by particularly knowledgable users for specialized tools or applications.
  119371             :        */
  119372             :       /* */
  119373             : 
  119374             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  119375             :        // (inferior to ROSE traversal mechanism, experimental).
  119376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  119377             :        */
  119378             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  119379             : 
  119380             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  119381             :       /*! \brief support for the classic visitor pattern done in GoF */
  119382             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  119383             : 
  119384             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  119385             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  119386             :        */
  119387             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  119388             : 
  119389             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  119390             :        */
  119391             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  119392             : 
  119393             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  119394             :        // This traversal helps support internal tools that call static member functions.
  119395             :        // note: this function operates on the memory pools.
  119396             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  119397             :        */
  119398             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  119399             :       /* */
  119400             : 
  119401             : 
  119402             :      public:
  119403             :       /* name Memory Allocation Functions
  119404             :           \brief Memory allocations functions ... incomplete-documentation
  119405             : 
  119406             :           These functions have been made public as part of the design, but they are suggested for internal use 
  119407             :           or by particularly knowledgable users for specialized tools or applications.
  119408             :        */
  119409             :       /* */
  119410             : 
  119411             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  119412             : 
  119413             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  119414             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  119415             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  119416             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  119417             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  119418             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  119419             :           being used with the AST File I/O mechanism.
  119420             :        */
  119421             :           virtual bool isInMemoryPool() override;
  119422             : 
  119423             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  119424             : 
  119425             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  119426             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  119427             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  119428             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  119429             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  119430             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  119431             :           being used with the AST File I/O mechanism.
  119432             :        */
  119433             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  119434             : 
  119435             :       // DQ (4/30/2006): Modified to be a const function.
  119436             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  119437             : 
  119438             :           This functions is part of general support for many possible tools to operate 
  119439             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  119440             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  119441             :           less than the set of pointers used by the AST file I/O. This is part of
  119442             :           work implemented by Andreas, and support tools such as the AST graph generation.
  119443             : 
  119444             :           \warning This function can return unexpected data members and thus the 
  119445             :                    order and the number of elements is unpredicable and subject 
  119446             :                    to change.
  119447             : 
  119448             :           \returns STL vector of pairs of SgNode* and strings
  119449             :        */
  119450             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  119451             : 
  119452             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  119453             : 
  119454             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  119455             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  119456             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  119457             : 
  119458             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  119459             :                    and subject to change.
  119460             :        */
  119461             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  119462             : 
  119463             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  119464             : 
  119465             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  119466             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  119467             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  119468             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  119469             : 
  119470             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  119471             : 
  119472             :           \returns long
  119473             :        */
  119474             :           virtual long getChildIndex( SgNode* childNode ) const override;
  119475             : 
  119476             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  119477             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119478             :       /* \brief Constructor for use by AST File I/O Mechanism
  119479             : 
  119480             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  119481             :           which obtained via fast binary file I/O from disk.
  119482             :        */
  119483             :        // SgUpirNestedLevelField( SgUpirNestedLevelFieldStorageClass& source );
  119484             : 
  119485             : 
  119486             : 
  119487             : 
  119488             : 
  119489             :  // JH (10/24/2005): methods added to support the ast file IO
  119490             :     private:
  119491             : 
  119492             :       /* name AST Memory Allocation Support Functions
  119493             :           \brief Memory allocations support....
  119494             : 
  119495             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  119496             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  119497             :           and support the AST File I/O Mechanism.
  119498             :        */
  119499             :       /* */
  119500             : 
  119501             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  119502             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  119503             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  119504             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  119505             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  119506             :           a correspinding one in the AST_FILE_IO class!
  119507             :        */
  119508             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  119509             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119510             :       /* \brief Typedef used for low level memory access.
  119511             :        */
  119512             :        // typedef unsigned char* TestType;
  119513             : 
  119514             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  119515             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119516             :       /* \brief Typedef used to hold memory addresses as values.
  119517             :        */
  119518             :        // typedef unsigned long  AddressType;
  119519             : 
  119520             : 
  119521             : 
  119522             :        // necessary, to have direct access to the p_freepointer and the private methods !
  119523             :       /*! \brief friend class declaration to support AST File I/O */
  119524             :           friend class AST_FILE_IO;
  119525             : 
  119526             :       /*! \brief friend class declaration to support AST File I/O */
  119527             :           friend class SgUpirNestedLevelFieldStorageClass;
  119528             : 
  119529             :       /*! \brief friend class declaration to support AST File I/O */
  119530             :           friend class AstSpecificDataManagingClass;
  119531             : 
  119532             :       /*! \brief friend class declaration to support AST File I/O */
  119533             :           friend class AstSpecificDataManagingClassStorageClass;
  119534             :     public:
  119535             :       /*! \brief IR node constructor to support AST File I/O */
  119536             :           SgUpirNestedLevelField( const SgUpirNestedLevelFieldStorageClass& source );
  119537             : 
  119538             :  // private: // JJW hack
  119539             :        /*
  119540             :           name AST Memory Allocation Support Variables
  119541             :           Memory allocations support variables 
  119542             : 
  119543             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  119544             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  119545             :           and support the AST File I/O Mechanism.
  119546             :        */
  119547             :       /* */
  119548             : 
  119549             :     public:
  119550             : 
  119551             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  119552             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  119553             :       // virtual SgNode* addRegExpAttribute();
  119554             :       /*! \brief Support for AST matching using regular expression.
  119555             : 
  119556             :           This support is incomplete and the subject of current research to define 
  119557             :           RegEx trees to support inexact matching.
  119558             :        */
  119559             :           SgUpirNestedLevelField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  119560             : 
  119561             : // *** COMMON CODE SECTION ENDS HERE ***
  119562             : 
  119563             : 
  119564             : // End of memberFunctionString
  119565             : // Start of memberFunctionString
  119566             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  119567             : 
  119568             :      // the generated cast function
  119569             :      // friend ROSE_DLL_API SgUpirNestedLevelField* isSgUpirNestedLevelField ( SgNode* s );
  119570             : 
  119571             :           typedef SgOmpClause base_node_type;
  119572             : 
  119573             : 
  119574             : // End of memberFunctionString
  119575             : 
  119576             :      public: 
  119577             :          int get_nested_level() const;
  119578             :          void set_nested_level(int nested_level);
  119579             : 
  119580             : 
  119581             :      public: 
  119582             :          virtual ~SgUpirNestedLevelField();
  119583             : 
  119584             : 
  119585             :      public: 
  119586             :          SgUpirNestedLevelField(Sg_File_Info* startOfConstruct ); 
  119587             :          SgUpirNestedLevelField(); 
  119588             : 
  119589             :     protected:
  119590             : // Start of memberFunctionString
  119591             : int p_nested_level;
  119592             :           
  119593             : // End of memberFunctionString
  119594             : 
  119595             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirNestedLevelField>;
  119596             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirNestedLevelField, int,&SgUpirNestedLevelField::p_nested_level>;
  119597             : 
  119598             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119599             : 
  119600             : 
  119601             :    };
  119602             : #endif
  119603             : 
  119604             : // postdeclarations for SgUpirNestedLevelField
  119605             : 
  119606             : /* #line 119607 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119607             : 
  119608             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  119609             : 
  119610             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119611             : 
  119612             : 
  119613             : /* #line 119614 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119614             : 
  119615             : 
  119616             : 
  119617             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119618             : 
  119619             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  119620             : //      This code is automatically generated for each 
  119621             : //      terminal and non-terminal within the defined 
  119622             : //      grammar.  There is a simple way to change the 
  119623             : //      code to fix bugs etc.  See the ROSE README file
  119624             : //      for directions.
  119625             : 
  119626             : // tps: (02/22/2010): Adding DLL export requirements
  119627             : #include "rosedll.h"
  119628             : 
  119629             : // predeclarations for SgUpirNestedParentField
  119630             : 
  119631             : /* #line 119632 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119632             : 
  119633             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  119634             : 
  119635             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  119636             : 
  119637             : #if 1
  119638             : // Class Definition for SgUpirNestedParentField
  119639             : class ROSE_DLL_API SgUpirNestedParentField  : public SgOmpClause
  119640             :    {
  119641             :      public:
  119642             : 
  119643             : 
  119644             : /* #line 119645 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  119645             : 
  119646             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  119647             : // Start of memberFunctionString
  119648             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  119649             : 
  119650             : // *** COMMON CODE SECTION BEGINS HERE ***
  119651             : 
  119652             :     public:
  119653             : 
  119654             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  119655             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  119656             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  119657             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  119658             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  119659             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  119660             : 
  119661             :       /*! \brief returns a string representing the class name */
  119662             :           virtual std::string class_name() const override;
  119663             : 
  119664             :       /*! \brief returns new style SageIII enum values */
  119665             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  119666             : 
  119667             :       /*! \brief static variant value */
  119668             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  119669             :        // static const VariantT static_variant = V_SgUpirNestedParentField;
  119670             :           enum { static_variant = V_SgUpirNestedParentField };
  119671             : 
  119672             :        /* the generated cast function */
  119673             :       /*! \brief Casts pointer from base class to derived class */
  119674             :           ROSE_DLL_API friend       SgUpirNestedParentField* isSgUpirNestedParentField(       SgNode * s );
  119675             : 
  119676             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  119677             :           ROSE_DLL_API friend const SgUpirNestedParentField* isSgUpirNestedParentField( const SgNode * s );
  119678             : 
  119679             :      // ******************************************
  119680             :      // * Memory Pool / New / Delete
  119681             :      // ******************************************
  119682             : 
  119683             :      public:
  119684             :           /// \private
  119685             :           static const unsigned pool_size; //
  119686             :           /// \private
  119687             :           static std::vector<unsigned char *> pools; //
  119688             :           /// \private
  119689             :           static SgUpirNestedParentField * next_node; // 
  119690             : 
  119691             :           /// \private
  119692             :           static unsigned long initializeStorageClassArray(SgUpirNestedParentFieldStorageClass *); //
  119693             : 
  119694             :           /// \private
  119695             :           static void clearMemoryPool(); //
  119696             :           static void deleteMemoryPool(); //
  119697             : 
  119698             :           /// \private
  119699             :           static void extendMemoryPoolForFileIO(); //
  119700             : 
  119701             :           /// \private
  119702             :           static SgUpirNestedParentField * getPointerFromGlobalIndex(unsigned long); //
  119703             :           /// \private
  119704             :           static SgUpirNestedParentField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  119705             : 
  119706             :           /// \private
  119707             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  119708             :           /// \private
  119709             :           static void resetValidFreepointers(); //
  119710             :           /// \private
  119711             :           static unsigned long getNumberOfLastValidPointer(); //
  119712             : 
  119713             : 
  119714             : #if defined(INLINE_FUNCTIONS)
  119715             :       /*! \brief returns pointer to newly allocated IR node */
  119716             :           inline void *operator new (size_t size);
  119717             : #else
  119718             :       /*! \brief returns pointer to newly allocated IR node */
  119719             :           void *operator new (size_t size);
  119720             : #endif
  119721             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  119722             :           void operator delete (void* pointer, size_t size);
  119723             : 
  119724             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  119725           0 :           void operator delete (void* pointer)
  119726             :              {
  119727             :             // This is the generated delete operator...
  119728           0 :                SgUpirNestedParentField::operator delete (pointer,sizeof(SgUpirNestedParentField));
  119729             :              }
  119730             : 
  119731             :       /*! \brief Returns the total number of IR nodes of this type */
  119732             :           static size_t numberOfNodes();
  119733             : 
  119734             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  119735             :           static size_t memoryUsage();
  119736             : 
  119737             :       // End of scope which started in IR nodes specific code 
  119738             :       /* */
  119739             : 
  119740             :       /* name Internal Functions
  119741             :           \brief Internal functions ... incomplete-documentation
  119742             : 
  119743             :           These functions have been made public as part of the design, but they are suggested for internal use 
  119744             :           or by particularly knowledgeable users for specialized tools or applications.
  119745             : 
  119746             :           \internal We could not make these private because they are required by user for special purposes. And 
  119747             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  119748             :          
  119749             :        */
  119750             : 
  119751             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  119752             :        // overridden in every class by *generated* implementation
  119753             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  119754             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  119755             :        // MS: 06/28/02 container of names of variables or container indices 
  119756             :        // used used in the traversal to access AST successor nodes
  119757             :        // overridden in every class by *generated* implementation
  119758             :       /*! \brief container of names of variables or container indices used used in the traversal
  119759             :           to access AST successor nodes overridden in every class by *generated* implementation */
  119760             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  119761             : 
  119762             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  119763             :        // than all the vector copies. The implementation for these functions is generated for each class.
  119764             :       /*! \brief return number of children in the traversal successor list */
  119765             :           virtual size_t get_numberOfTraversalSuccessors() override;
  119766             :       /*! \brief index-based access to traversal successors by index number */
  119767             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  119768             :       /*! \brief index-based access to traversal successors by child node */
  119769             :           virtual size_t get_childIndex(SgNode *child) override;
  119770             : 
  119771             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  119772             :        // MS: 08/16/2002 method for generating RTI information
  119773             :       /*! \brief return C++ Runtime-Time-Information */
  119774             :           virtual RTIReturnType roseRTI() override;
  119775             : #endif
  119776             :       /* */
  119777             : 
  119778             : 
  119779             : 
  119780             :       /* name Deprecated Functions
  119781             :           \brief Deprecated functions ... incomplete-documentation
  119782             : 
  119783             :           These functions have been deprecated from use.
  119784             :        */
  119785             :       /* */
  119786             : 
  119787             :       /*! returns a C style string (char*) representing the class name */
  119788             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  119789             : 
  119790             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  119791             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  119792             : #if 0
  119793             :       /*! returns old style Sage II enum values */
  119794             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  119795             :       /*! returns old style Sage II enum values */
  119796             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  119797             : #endif
  119798             :       /* */
  119799             : 
  119800             : 
  119801             : 
  119802             : 
  119803             :      public:
  119804             :       /* name Traversal Support Functions
  119805             :           \brief Traversal support functions ... incomplete-documentation
  119806             : 
  119807             :           These functions have been made public as part of the design, but they are suggested for internal use 
  119808             :           or by particularly knowledgable users for specialized tools or applications.
  119809             :        */
  119810             :       /* */
  119811             : 
  119812             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  119813             :        // (inferior to ROSE traversal mechanism, experimental).
  119814             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  119815             :        */
  119816             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  119817             : 
  119818             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  119819             :       /*! \brief support for the classic visitor pattern done in GoF */
  119820             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  119821             : 
  119822             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  119823             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  119824             :        */
  119825             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  119826             : 
  119827             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  119828             :        */
  119829             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  119830             : 
  119831             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  119832             :        // This traversal helps support internal tools that call static member functions.
  119833             :        // note: this function operates on the memory pools.
  119834             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  119835             :        */
  119836             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  119837             :       /* */
  119838             : 
  119839             : 
  119840             :      public:
  119841             :       /* name Memory Allocation Functions
  119842             :           \brief Memory allocations functions ... incomplete-documentation
  119843             : 
  119844             :           These functions have been made public as part of the design, but they are suggested for internal use 
  119845             :           or by particularly knowledgable users for specialized tools or applications.
  119846             :        */
  119847             :       /* */
  119848             : 
  119849             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  119850             : 
  119851             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  119852             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  119853             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  119854             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  119855             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  119856             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  119857             :           being used with the AST File I/O mechanism.
  119858             :        */
  119859             :           virtual bool isInMemoryPool() override;
  119860             : 
  119861             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  119862             : 
  119863             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  119864             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  119865             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  119866             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  119867             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  119868             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  119869             :           being used with the AST File I/O mechanism.
  119870             :        */
  119871             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  119872             : 
  119873             :       // DQ (4/30/2006): Modified to be a const function.
  119874             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  119875             : 
  119876             :           This functions is part of general support for many possible tools to operate 
  119877             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  119878             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  119879             :           less than the set of pointers used by the AST file I/O. This is part of
  119880             :           work implemented by Andreas, and support tools such as the AST graph generation.
  119881             : 
  119882             :           \warning This function can return unexpected data members and thus the 
  119883             :                    order and the number of elements is unpredicable and subject 
  119884             :                    to change.
  119885             : 
  119886             :           \returns STL vector of pairs of SgNode* and strings
  119887             :        */
  119888             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  119889             : 
  119890             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  119891             : 
  119892             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  119893             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  119894             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  119895             : 
  119896             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  119897             :                    and subject to change.
  119898             :        */
  119899             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  119900             : 
  119901             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  119902             : 
  119903             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  119904             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  119905             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  119906             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  119907             : 
  119908             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  119909             : 
  119910             :           \returns long
  119911             :        */
  119912             :           virtual long getChildIndex( SgNode* childNode ) const override;
  119913             : 
  119914             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  119915             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119916             :       /* \brief Constructor for use by AST File I/O Mechanism
  119917             : 
  119918             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  119919             :           which obtained via fast binary file I/O from disk.
  119920             :        */
  119921             :        // SgUpirNestedParentField( SgUpirNestedParentFieldStorageClass& source );
  119922             : 
  119923             : 
  119924             : 
  119925             : 
  119926             : 
  119927             :  // JH (10/24/2005): methods added to support the ast file IO
  119928             :     private:
  119929             : 
  119930             :       /* name AST Memory Allocation Support Functions
  119931             :           \brief Memory allocations support....
  119932             : 
  119933             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  119934             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  119935             :           and support the AST File I/O Mechanism.
  119936             :        */
  119937             :       /* */
  119938             : 
  119939             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  119940             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  119941             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  119942             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  119943             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  119944             :           a correspinding one in the AST_FILE_IO class!
  119945             :        */
  119946             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  119947             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119948             :       /* \brief Typedef used for low level memory access.
  119949             :        */
  119950             :        // typedef unsigned char* TestType;
  119951             : 
  119952             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  119953             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  119954             :       /* \brief Typedef used to hold memory addresses as values.
  119955             :        */
  119956             :        // typedef unsigned long  AddressType;
  119957             : 
  119958             : 
  119959             : 
  119960             :        // necessary, to have direct access to the p_freepointer and the private methods !
  119961             :       /*! \brief friend class declaration to support AST File I/O */
  119962             :           friend class AST_FILE_IO;
  119963             : 
  119964             :       /*! \brief friend class declaration to support AST File I/O */
  119965             :           friend class SgUpirNestedParentFieldStorageClass;
  119966             : 
  119967             :       /*! \brief friend class declaration to support AST File I/O */
  119968             :           friend class AstSpecificDataManagingClass;
  119969             : 
  119970             :       /*! \brief friend class declaration to support AST File I/O */
  119971             :           friend class AstSpecificDataManagingClassStorageClass;
  119972             :     public:
  119973             :       /*! \brief IR node constructor to support AST File I/O */
  119974             :           SgUpirNestedParentField( const SgUpirNestedParentFieldStorageClass& source );
  119975             : 
  119976             :  // private: // JJW hack
  119977             :        /*
  119978             :           name AST Memory Allocation Support Variables
  119979             :           Memory allocations support variables 
  119980             : 
  119981             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  119982             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  119983             :           and support the AST File I/O Mechanism.
  119984             :        */
  119985             :       /* */
  119986             : 
  119987             :     public:
  119988             : 
  119989             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  119990             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  119991             :       // virtual SgNode* addRegExpAttribute();
  119992             :       /*! \brief Support for AST matching using regular expression.
  119993             : 
  119994             :           This support is incomplete and the subject of current research to define 
  119995             :           RegEx trees to support inexact matching.
  119996             :        */
  119997             :           SgUpirNestedParentField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  119998             : 
  119999             : // *** COMMON CODE SECTION ENDS HERE ***
  120000             : 
  120001             : 
  120002             : // End of memberFunctionString
  120003             : // Start of memberFunctionString
  120004             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  120005             : 
  120006             :      // the generated cast function
  120007             :      // friend ROSE_DLL_API SgUpirNestedParentField* isSgUpirNestedParentField ( SgNode* s );
  120008             : 
  120009             :           typedef SgOmpClause base_node_type;
  120010             : 
  120011             : 
  120012             : // End of memberFunctionString
  120013             : 
  120014             :      public: 
  120015             :          SgStatement* get_nested_parent() const;
  120016             :          void set_nested_parent(SgStatement* nested_parent);
  120017             : 
  120018             : 
  120019             :      public: 
  120020             :          virtual ~SgUpirNestedParentField();
  120021             : 
  120022             : 
  120023             :      public: 
  120024             :          SgUpirNestedParentField(Sg_File_Info* startOfConstruct ); 
  120025             :          SgUpirNestedParentField(); 
  120026             : 
  120027             :     protected:
  120028             : // Start of memberFunctionString
  120029             : SgStatement* p_nested_parent;
  120030             :           
  120031             : // End of memberFunctionString
  120032             : 
  120033             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirNestedParentField>;
  120034             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirNestedParentField, SgStatement*,&SgUpirNestedParentField::p_nested_parent>;
  120035             : 
  120036             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120037             : 
  120038             : 
  120039             :    };
  120040             : #endif
  120041             : 
  120042             : // postdeclarations for SgUpirNestedParentField
  120043             : 
  120044             : /* #line 120045 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120045             : 
  120046             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  120047             : 
  120048             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120049             : 
  120050             : 
  120051             : /* #line 120052 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120052             : 
  120053             : 
  120054             : 
  120055             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120056             : 
  120057             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  120058             : //      This code is automatically generated for each 
  120059             : //      terminal and non-terminal within the defined 
  120060             : //      grammar.  There is a simple way to change the 
  120061             : //      code to fix bugs etc.  See the ROSE README file
  120062             : //      for directions.
  120063             : 
  120064             : // tps: (02/22/2010): Adding DLL export requirements
  120065             : #include "rosedll.h"
  120066             : 
  120067             : // predeclarations for SgUpirNestedChildField
  120068             : 
  120069             : /* #line 120070 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120070             : 
  120071             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  120072             : 
  120073             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120074             : 
  120075             : #if 1
  120076             : // Class Definition for SgUpirNestedChildField
  120077             : class ROSE_DLL_API SgUpirNestedChildField  : public SgOmpClause
  120078             :    {
  120079             :      public:
  120080             : 
  120081             : 
  120082             : /* #line 120083 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120083             : 
  120084             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  120085             : // Start of memberFunctionString
  120086             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  120087             : 
  120088             : // *** COMMON CODE SECTION BEGINS HERE ***
  120089             : 
  120090             :     public:
  120091             : 
  120092             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  120093             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  120094             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  120095             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  120096             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  120097             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  120098             : 
  120099             :       /*! \brief returns a string representing the class name */
  120100             :           virtual std::string class_name() const override;
  120101             : 
  120102             :       /*! \brief returns new style SageIII enum values */
  120103             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  120104             : 
  120105             :       /*! \brief static variant value */
  120106             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  120107             :        // static const VariantT static_variant = V_SgUpirNestedChildField;
  120108             :           enum { static_variant = V_SgUpirNestedChildField };
  120109             : 
  120110             :        /* the generated cast function */
  120111             :       /*! \brief Casts pointer from base class to derived class */
  120112             :           ROSE_DLL_API friend       SgUpirNestedChildField* isSgUpirNestedChildField(       SgNode * s );
  120113             : 
  120114             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  120115             :           ROSE_DLL_API friend const SgUpirNestedChildField* isSgUpirNestedChildField( const SgNode * s );
  120116             : 
  120117             :      // ******************************************
  120118             :      // * Memory Pool / New / Delete
  120119             :      // ******************************************
  120120             : 
  120121             :      public:
  120122             :           /// \private
  120123             :           static const unsigned pool_size; //
  120124             :           /// \private
  120125             :           static std::vector<unsigned char *> pools; //
  120126             :           /// \private
  120127             :           static SgUpirNestedChildField * next_node; // 
  120128             : 
  120129             :           /// \private
  120130             :           static unsigned long initializeStorageClassArray(SgUpirNestedChildFieldStorageClass *); //
  120131             : 
  120132             :           /// \private
  120133             :           static void clearMemoryPool(); //
  120134             :           static void deleteMemoryPool(); //
  120135             : 
  120136             :           /// \private
  120137             :           static void extendMemoryPoolForFileIO(); //
  120138             : 
  120139             :           /// \private
  120140             :           static SgUpirNestedChildField * getPointerFromGlobalIndex(unsigned long); //
  120141             :           /// \private
  120142             :           static SgUpirNestedChildField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  120143             : 
  120144             :           /// \private
  120145             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  120146             :           /// \private
  120147             :           static void resetValidFreepointers(); //
  120148             :           /// \private
  120149             :           static unsigned long getNumberOfLastValidPointer(); //
  120150             : 
  120151             : 
  120152             : #if defined(INLINE_FUNCTIONS)
  120153             :       /*! \brief returns pointer to newly allocated IR node */
  120154             :           inline void *operator new (size_t size);
  120155             : #else
  120156             :       /*! \brief returns pointer to newly allocated IR node */
  120157             :           void *operator new (size_t size);
  120158             : #endif
  120159             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  120160             :           void operator delete (void* pointer, size_t size);
  120161             : 
  120162             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  120163           0 :           void operator delete (void* pointer)
  120164             :              {
  120165             :             // This is the generated delete operator...
  120166           0 :                SgUpirNestedChildField::operator delete (pointer,sizeof(SgUpirNestedChildField));
  120167             :              }
  120168             : 
  120169             :       /*! \brief Returns the total number of IR nodes of this type */
  120170             :           static size_t numberOfNodes();
  120171             : 
  120172             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  120173             :           static size_t memoryUsage();
  120174             : 
  120175             :       // End of scope which started in IR nodes specific code 
  120176             :       /* */
  120177             : 
  120178             :       /* name Internal Functions
  120179             :           \brief Internal functions ... incomplete-documentation
  120180             : 
  120181             :           These functions have been made public as part of the design, but they are suggested for internal use 
  120182             :           or by particularly knowledgeable users for specialized tools or applications.
  120183             : 
  120184             :           \internal We could not make these private because they are required by user for special purposes. And 
  120185             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  120186             :          
  120187             :        */
  120188             : 
  120189             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  120190             :        // overridden in every class by *generated* implementation
  120191             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  120192             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  120193             :        // MS: 06/28/02 container of names of variables or container indices 
  120194             :        // used used in the traversal to access AST successor nodes
  120195             :        // overridden in every class by *generated* implementation
  120196             :       /*! \brief container of names of variables or container indices used used in the traversal
  120197             :           to access AST successor nodes overridden in every class by *generated* implementation */
  120198             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  120199             : 
  120200             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  120201             :        // than all the vector copies. The implementation for these functions is generated for each class.
  120202             :       /*! \brief return number of children in the traversal successor list */
  120203             :           virtual size_t get_numberOfTraversalSuccessors() override;
  120204             :       /*! \brief index-based access to traversal successors by index number */
  120205             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  120206             :       /*! \brief index-based access to traversal successors by child node */
  120207             :           virtual size_t get_childIndex(SgNode *child) override;
  120208             : 
  120209             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  120210             :        // MS: 08/16/2002 method for generating RTI information
  120211             :       /*! \brief return C++ Runtime-Time-Information */
  120212             :           virtual RTIReturnType roseRTI() override;
  120213             : #endif
  120214             :       /* */
  120215             : 
  120216             : 
  120217             : 
  120218             :       /* name Deprecated Functions
  120219             :           \brief Deprecated functions ... incomplete-documentation
  120220             : 
  120221             :           These functions have been deprecated from use.
  120222             :        */
  120223             :       /* */
  120224             : 
  120225             :       /*! returns a C style string (char*) representing the class name */
  120226             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  120227             : 
  120228             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  120229             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  120230             : #if 0
  120231             :       /*! returns old style Sage II enum values */
  120232             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  120233             :       /*! returns old style Sage II enum values */
  120234             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  120235             : #endif
  120236             :       /* */
  120237             : 
  120238             : 
  120239             : 
  120240             : 
  120241             :      public:
  120242             :       /* name Traversal Support Functions
  120243             :           \brief Traversal support functions ... incomplete-documentation
  120244             : 
  120245             :           These functions have been made public as part of the design, but they are suggested for internal use 
  120246             :           or by particularly knowledgable users for specialized tools or applications.
  120247             :        */
  120248             :       /* */
  120249             : 
  120250             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  120251             :        // (inferior to ROSE traversal mechanism, experimental).
  120252             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  120253             :        */
  120254             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  120255             : 
  120256             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  120257             :       /*! \brief support for the classic visitor pattern done in GoF */
  120258             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  120259             : 
  120260             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  120261             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  120262             :        */
  120263             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  120264             : 
  120265             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  120266             :        */
  120267             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  120268             : 
  120269             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  120270             :        // This traversal helps support internal tools that call static member functions.
  120271             :        // note: this function operates on the memory pools.
  120272             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  120273             :        */
  120274             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  120275             :       /* */
  120276             : 
  120277             : 
  120278             :      public:
  120279             :       /* name Memory Allocation Functions
  120280             :           \brief Memory allocations functions ... incomplete-documentation
  120281             : 
  120282             :           These functions have been made public as part of the design, but they are suggested for internal use 
  120283             :           or by particularly knowledgable users for specialized tools or applications.
  120284             :        */
  120285             :       /* */
  120286             : 
  120287             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  120288             : 
  120289             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  120290             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  120291             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  120292             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  120293             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  120294             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  120295             :           being used with the AST File I/O mechanism.
  120296             :        */
  120297             :           virtual bool isInMemoryPool() override;
  120298             : 
  120299             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  120300             : 
  120301             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  120302             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  120303             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  120304             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  120305             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  120306             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  120307             :           being used with the AST File I/O mechanism.
  120308             :        */
  120309             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  120310             : 
  120311             :       // DQ (4/30/2006): Modified to be a const function.
  120312             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  120313             : 
  120314             :           This functions is part of general support for many possible tools to operate 
  120315             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  120316             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  120317             :           less than the set of pointers used by the AST file I/O. This is part of
  120318             :           work implemented by Andreas, and support tools such as the AST graph generation.
  120319             : 
  120320             :           \warning This function can return unexpected data members and thus the 
  120321             :                    order and the number of elements is unpredicable and subject 
  120322             :                    to change.
  120323             : 
  120324             :           \returns STL vector of pairs of SgNode* and strings
  120325             :        */
  120326             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  120327             : 
  120328             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  120329             : 
  120330             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  120331             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  120332             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  120333             : 
  120334             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  120335             :                    and subject to change.
  120336             :        */
  120337             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  120338             : 
  120339             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  120340             : 
  120341             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  120342             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  120343             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  120344             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  120345             : 
  120346             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  120347             : 
  120348             :           \returns long
  120349             :        */
  120350             :           virtual long getChildIndex( SgNode* childNode ) const override;
  120351             : 
  120352             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  120353             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  120354             :       /* \brief Constructor for use by AST File I/O Mechanism
  120355             : 
  120356             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  120357             :           which obtained via fast binary file I/O from disk.
  120358             :        */
  120359             :        // SgUpirNestedChildField( SgUpirNestedChildFieldStorageClass& source );
  120360             : 
  120361             : 
  120362             : 
  120363             : 
  120364             : 
  120365             :  // JH (10/24/2005): methods added to support the ast file IO
  120366             :     private:
  120367             : 
  120368             :       /* name AST Memory Allocation Support Functions
  120369             :           \brief Memory allocations support....
  120370             : 
  120371             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  120372             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  120373             :           and support the AST File I/O Mechanism.
  120374             :        */
  120375             :       /* */
  120376             : 
  120377             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  120378             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  120379             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  120380             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  120381             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  120382             :           a correspinding one in the AST_FILE_IO class!
  120383             :        */
  120384             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  120385             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  120386             :       /* \brief Typedef used for low level memory access.
  120387             :        */
  120388             :        // typedef unsigned char* TestType;
  120389             : 
  120390             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  120391             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  120392             :       /* \brief Typedef used to hold memory addresses as values.
  120393             :        */
  120394             :        // typedef unsigned long  AddressType;
  120395             : 
  120396             : 
  120397             : 
  120398             :        // necessary, to have direct access to the p_freepointer and the private methods !
  120399             :       /*! \brief friend class declaration to support AST File I/O */
  120400             :           friend class AST_FILE_IO;
  120401             : 
  120402             :       /*! \brief friend class declaration to support AST File I/O */
  120403             :           friend class SgUpirNestedChildFieldStorageClass;
  120404             : 
  120405             :       /*! \brief friend class declaration to support AST File I/O */
  120406             :           friend class AstSpecificDataManagingClass;
  120407             : 
  120408             :       /*! \brief friend class declaration to support AST File I/O */
  120409             :           friend class AstSpecificDataManagingClassStorageClass;
  120410             :     public:
  120411             :       /*! \brief IR node constructor to support AST File I/O */
  120412             :           SgUpirNestedChildField( const SgUpirNestedChildFieldStorageClass& source );
  120413             : 
  120414             :  // private: // JJW hack
  120415             :        /*
  120416             :           name AST Memory Allocation Support Variables
  120417             :           Memory allocations support variables 
  120418             : 
  120419             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  120420             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  120421             :           and support the AST File I/O Mechanism.
  120422             :        */
  120423             :       /* */
  120424             : 
  120425             :     public:
  120426             : 
  120427             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  120428             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  120429             :       // virtual SgNode* addRegExpAttribute();
  120430             :       /*! \brief Support for AST matching using regular expression.
  120431             : 
  120432             :           This support is incomplete and the subject of current research to define 
  120433             :           RegEx trees to support inexact matching.
  120434             :        */
  120435             :           SgUpirNestedChildField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  120436             : 
  120437             : // *** COMMON CODE SECTION ENDS HERE ***
  120438             : 
  120439             : 
  120440             : // End of memberFunctionString
  120441             : // Start of memberFunctionString
  120442             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  120443             : 
  120444             :      // the generated cast function
  120445             :      // friend ROSE_DLL_API SgUpirNestedChildField* isSgUpirNestedChildField ( SgNode* s );
  120446             : 
  120447             :           typedef SgOmpClause base_node_type;
  120448             : 
  120449             : 
  120450             : // End of memberFunctionString
  120451             : 
  120452             :      public: 
  120453             :          SgStatement* get_nested_child() const;
  120454             :          void set_nested_child(SgStatement* nested_child);
  120455             : 
  120456             : 
  120457             :      public: 
  120458             :          virtual ~SgUpirNestedChildField();
  120459             : 
  120460             : 
  120461             :      public: 
  120462             :          SgUpirNestedChildField(Sg_File_Info* startOfConstruct ); 
  120463             :          SgUpirNestedChildField(); 
  120464             : 
  120465             :     protected:
  120466             : // Start of memberFunctionString
  120467             : SgStatement* p_nested_child;
  120468             :           
  120469             : // End of memberFunctionString
  120470             : 
  120471             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirNestedChildField>;
  120472             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirNestedChildField, SgStatement*,&SgUpirNestedChildField::p_nested_child>;
  120473             : 
  120474             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120475             : 
  120476             : 
  120477             :    };
  120478             : #endif
  120479             : 
  120480             : // postdeclarations for SgUpirNestedChildField
  120481             : 
  120482             : /* #line 120483 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120483             : 
  120484             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  120485             : 
  120486             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120487             : 
  120488             : 
  120489             : /* #line 120490 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120490             : 
  120491             : 
  120492             : 
  120493             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120494             : 
  120495             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  120496             : //      This code is automatically generated for each 
  120497             : //      terminal and non-terminal within the defined 
  120498             : //      grammar.  There is a simple way to change the 
  120499             : //      code to fix bugs etc.  See the ROSE README file
  120500             : //      for directions.
  120501             : 
  120502             : // tps: (02/22/2010): Adding DLL export requirements
  120503             : #include "rosedll.h"
  120504             : 
  120505             : // predeclarations for SgUpirSyncField
  120506             : 
  120507             : /* #line 120508 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120508             : 
  120509             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  120510             : 
  120511             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120512             : 
  120513             : #if 1
  120514             : // Class Definition for SgUpirSyncField
  120515             : class ROSE_DLL_API SgUpirSyncField  : public SgOmpClause
  120516             :    {
  120517             :      public:
  120518             : 
  120519             : 
  120520             : /* #line 120521 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120521             : 
  120522             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  120523             : // Start of memberFunctionString
  120524             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  120525             : 
  120526             : // *** COMMON CODE SECTION BEGINS HERE ***
  120527             : 
  120528             :     public:
  120529             : 
  120530             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  120531             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  120532             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  120533             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  120534             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  120535             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  120536             : 
  120537             :       /*! \brief returns a string representing the class name */
  120538             :           virtual std::string class_name() const override;
  120539             : 
  120540             :       /*! \brief returns new style SageIII enum values */
  120541             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  120542             : 
  120543             :       /*! \brief static variant value */
  120544             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  120545             :        // static const VariantT static_variant = V_SgUpirSyncField;
  120546             :           enum { static_variant = V_SgUpirSyncField };
  120547             : 
  120548             :        /* the generated cast function */
  120549             :       /*! \brief Casts pointer from base class to derived class */
  120550             :           ROSE_DLL_API friend       SgUpirSyncField* isSgUpirSyncField(       SgNode * s );
  120551             : 
  120552             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  120553             :           ROSE_DLL_API friend const SgUpirSyncField* isSgUpirSyncField( const SgNode * s );
  120554             : 
  120555             :      // ******************************************
  120556             :      // * Memory Pool / New / Delete
  120557             :      // ******************************************
  120558             : 
  120559             :      public:
  120560             :           /// \private
  120561             :           static const unsigned pool_size; //
  120562             :           /// \private
  120563             :           static std::vector<unsigned char *> pools; //
  120564             :           /// \private
  120565             :           static SgUpirSyncField * next_node; // 
  120566             : 
  120567             :           /// \private
  120568             :           static unsigned long initializeStorageClassArray(SgUpirSyncFieldStorageClass *); //
  120569             : 
  120570             :           /// \private
  120571             :           static void clearMemoryPool(); //
  120572             :           static void deleteMemoryPool(); //
  120573             : 
  120574             :           /// \private
  120575             :           static void extendMemoryPoolForFileIO(); //
  120576             : 
  120577             :           /// \private
  120578             :           static SgUpirSyncField * getPointerFromGlobalIndex(unsigned long); //
  120579             :           /// \private
  120580             :           static SgUpirSyncField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  120581             : 
  120582             :           /// \private
  120583             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  120584             :           /// \private
  120585             :           static void resetValidFreepointers(); //
  120586             :           /// \private
  120587             :           static unsigned long getNumberOfLastValidPointer(); //
  120588             : 
  120589             : 
  120590             : #if defined(INLINE_FUNCTIONS)
  120591             :       /*! \brief returns pointer to newly allocated IR node */
  120592             :           inline void *operator new (size_t size);
  120593             : #else
  120594             :       /*! \brief returns pointer to newly allocated IR node */
  120595             :           void *operator new (size_t size);
  120596             : #endif
  120597             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  120598             :           void operator delete (void* pointer, size_t size);
  120599             : 
  120600             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  120601           0 :           void operator delete (void* pointer)
  120602             :              {
  120603             :             // This is the generated delete operator...
  120604           0 :                SgUpirSyncField::operator delete (pointer,sizeof(SgUpirSyncField));
  120605             :              }
  120606             : 
  120607             :       /*! \brief Returns the total number of IR nodes of this type */
  120608             :           static size_t numberOfNodes();
  120609             : 
  120610             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  120611             :           static size_t memoryUsage();
  120612             : 
  120613             :       // End of scope which started in IR nodes specific code 
  120614             :       /* */
  120615             : 
  120616             :       /* name Internal Functions
  120617             :           \brief Internal functions ... incomplete-documentation
  120618             : 
  120619             :           These functions have been made public as part of the design, but they are suggested for internal use 
  120620             :           or by particularly knowledgeable users for specialized tools or applications.
  120621             : 
  120622             :           \internal We could not make these private because they are required by user for special purposes. And 
  120623             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  120624             :          
  120625             :        */
  120626             : 
  120627             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  120628             :        // overridden in every class by *generated* implementation
  120629             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  120630             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  120631             :        // MS: 06/28/02 container of names of variables or container indices 
  120632             :        // used used in the traversal to access AST successor nodes
  120633             :        // overridden in every class by *generated* implementation
  120634             :       /*! \brief container of names of variables or container indices used used in the traversal
  120635             :           to access AST successor nodes overridden in every class by *generated* implementation */
  120636             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  120637             : 
  120638             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  120639             :        // than all the vector copies. The implementation for these functions is generated for each class.
  120640             :       /*! \brief return number of children in the traversal successor list */
  120641             :           virtual size_t get_numberOfTraversalSuccessors() override;
  120642             :       /*! \brief index-based access to traversal successors by index number */
  120643             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  120644             :       /*! \brief index-based access to traversal successors by child node */
  120645             :           virtual size_t get_childIndex(SgNode *child) override;
  120646             : 
  120647             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  120648             :        // MS: 08/16/2002 method for generating RTI information
  120649             :       /*! \brief return C++ Runtime-Time-Information */
  120650             :           virtual RTIReturnType roseRTI() override;
  120651             : #endif
  120652             :       /* */
  120653             : 
  120654             : 
  120655             : 
  120656             :       /* name Deprecated Functions
  120657             :           \brief Deprecated functions ... incomplete-documentation
  120658             : 
  120659             :           These functions have been deprecated from use.
  120660             :        */
  120661             :       /* */
  120662             : 
  120663             :       /*! returns a C style string (char*) representing the class name */
  120664             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  120665             : 
  120666             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  120667             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  120668             : #if 0
  120669             :       /*! returns old style Sage II enum values */
  120670             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  120671             :       /*! returns old style Sage II enum values */
  120672             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  120673             : #endif
  120674             :       /* */
  120675             : 
  120676             : 
  120677             : 
  120678             : 
  120679             :      public:
  120680             :       /* name Traversal Support Functions
  120681             :           \brief Traversal support functions ... incomplete-documentation
  120682             : 
  120683             :           These functions have been made public as part of the design, but they are suggested for internal use 
  120684             :           or by particularly knowledgable users for specialized tools or applications.
  120685             :        */
  120686             :       /* */
  120687             : 
  120688             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  120689             :        // (inferior to ROSE traversal mechanism, experimental).
  120690             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  120691             :        */
  120692             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  120693             : 
  120694             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  120695             :       /*! \brief support for the classic visitor pattern done in GoF */
  120696             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  120697             : 
  120698             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  120699             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  120700             :        */
  120701             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  120702             : 
  120703             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  120704             :        */
  120705             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  120706             : 
  120707             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  120708             :        // This traversal helps support internal tools that call static member functions.
  120709             :        // note: this function operates on the memory pools.
  120710             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  120711             :        */
  120712             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  120713             :       /* */
  120714             : 
  120715             : 
  120716             :      public:
  120717             :       /* name Memory Allocation Functions
  120718             :           \brief Memory allocations functions ... incomplete-documentation
  120719             : 
  120720             :           These functions have been made public as part of the design, but they are suggested for internal use 
  120721             :           or by particularly knowledgable users for specialized tools or applications.
  120722             :        */
  120723             :       /* */
  120724             : 
  120725             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  120726             : 
  120727             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  120728             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  120729             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  120730             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  120731             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  120732             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  120733             :           being used with the AST File I/O mechanism.
  120734             :        */
  120735             :           virtual bool isInMemoryPool() override;
  120736             : 
  120737             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  120738             : 
  120739             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  120740             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  120741             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  120742             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  120743             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  120744             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  120745             :           being used with the AST File I/O mechanism.
  120746             :        */
  120747             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  120748             : 
  120749             :       // DQ (4/30/2006): Modified to be a const function.
  120750             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  120751             : 
  120752             :           This functions is part of general support for many possible tools to operate 
  120753             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  120754             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  120755             :           less than the set of pointers used by the AST file I/O. This is part of
  120756             :           work implemented by Andreas, and support tools such as the AST graph generation.
  120757             : 
  120758             :           \warning This function can return unexpected data members and thus the 
  120759             :                    order and the number of elements is unpredicable and subject 
  120760             :                    to change.
  120761             : 
  120762             :           \returns STL vector of pairs of SgNode* and strings
  120763             :        */
  120764             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  120765             : 
  120766             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  120767             : 
  120768             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  120769             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  120770             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  120771             : 
  120772             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  120773             :                    and subject to change.
  120774             :        */
  120775             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  120776             : 
  120777             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  120778             : 
  120779             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  120780             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  120781             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  120782             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  120783             : 
  120784             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  120785             : 
  120786             :           \returns long
  120787             :        */
  120788             :           virtual long getChildIndex( SgNode* childNode ) const override;
  120789             : 
  120790             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  120791             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  120792             :       /* \brief Constructor for use by AST File I/O Mechanism
  120793             : 
  120794             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  120795             :           which obtained via fast binary file I/O from disk.
  120796             :        */
  120797             :        // SgUpirSyncField( SgUpirSyncFieldStorageClass& source );
  120798             : 
  120799             : 
  120800             : 
  120801             : 
  120802             : 
  120803             :  // JH (10/24/2005): methods added to support the ast file IO
  120804             :     private:
  120805             : 
  120806             :       /* name AST Memory Allocation Support Functions
  120807             :           \brief Memory allocations support....
  120808             : 
  120809             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  120810             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  120811             :           and support the AST File I/O Mechanism.
  120812             :        */
  120813             :       /* */
  120814             : 
  120815             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  120816             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  120817             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  120818             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  120819             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  120820             :           a correspinding one in the AST_FILE_IO class!
  120821             :        */
  120822             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  120823             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  120824             :       /* \brief Typedef used for low level memory access.
  120825             :        */
  120826             :        // typedef unsigned char* TestType;
  120827             : 
  120828             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  120829             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  120830             :       /* \brief Typedef used to hold memory addresses as values.
  120831             :        */
  120832             :        // typedef unsigned long  AddressType;
  120833             : 
  120834             : 
  120835             : 
  120836             :        // necessary, to have direct access to the p_freepointer and the private methods !
  120837             :       /*! \brief friend class declaration to support AST File I/O */
  120838             :           friend class AST_FILE_IO;
  120839             : 
  120840             :       /*! \brief friend class declaration to support AST File I/O */
  120841             :           friend class SgUpirSyncFieldStorageClass;
  120842             : 
  120843             :       /*! \brief friend class declaration to support AST File I/O */
  120844             :           friend class AstSpecificDataManagingClass;
  120845             : 
  120846             :       /*! \brief friend class declaration to support AST File I/O */
  120847             :           friend class AstSpecificDataManagingClassStorageClass;
  120848             :     public:
  120849             :       /*! \brief IR node constructor to support AST File I/O */
  120850             :           SgUpirSyncField( const SgUpirSyncFieldStorageClass& source );
  120851             : 
  120852             :  // private: // JJW hack
  120853             :        /*
  120854             :           name AST Memory Allocation Support Variables
  120855             :           Memory allocations support variables 
  120856             : 
  120857             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  120858             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  120859             :           and support the AST File I/O Mechanism.
  120860             :        */
  120861             :       /* */
  120862             : 
  120863             :     public:
  120864             : 
  120865             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  120866             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  120867             :       // virtual SgNode* addRegExpAttribute();
  120868             :       /*! \brief Support for AST matching using regular expression.
  120869             : 
  120870             :           This support is incomplete and the subject of current research to define 
  120871             :           RegEx trees to support inexact matching.
  120872             :        */
  120873             :           SgUpirSyncField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  120874             : 
  120875             : // *** COMMON CODE SECTION ENDS HERE ***
  120876             : 
  120877             : 
  120878             : // End of memberFunctionString
  120879             : // Start of memberFunctionString
  120880             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  120881             : 
  120882             :      // the generated cast function
  120883             :      // friend ROSE_DLL_API SgUpirSyncField* isSgUpirSyncField ( SgNode* s );
  120884             : 
  120885             :           typedef SgOmpClause base_node_type;
  120886             : 
  120887             : 
  120888             : // End of memberFunctionString
  120889             : 
  120890             :      public: 
  120891             :          SgStatement* get_sync() const;
  120892             :          void set_sync(SgStatement* sync);
  120893             : 
  120894             : 
  120895             :      public: 
  120896             :          virtual ~SgUpirSyncField();
  120897             : 
  120898             : 
  120899             :      public: 
  120900             :          SgUpirSyncField(Sg_File_Info* startOfConstruct ); 
  120901             :          SgUpirSyncField(); 
  120902             : 
  120903             :     protected:
  120904             : // Start of memberFunctionString
  120905             : SgStatement* p_sync;
  120906             :           
  120907             : // End of memberFunctionString
  120908             : 
  120909             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirSyncField>;
  120910             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirSyncField, SgStatement*,&SgUpirSyncField::p_sync>;
  120911             : 
  120912             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120913             : 
  120914             : 
  120915             :    };
  120916             : #endif
  120917             : 
  120918             : // postdeclarations for SgUpirSyncField
  120919             : 
  120920             : /* #line 120921 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120921             : 
  120922             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  120923             : 
  120924             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120925             : 
  120926             : 
  120927             : /* #line 120928 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120928             : 
  120929             : 
  120930             : 
  120931             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120932             : 
  120933             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  120934             : //      This code is automatically generated for each 
  120935             : //      terminal and non-terminal within the defined 
  120936             : //      grammar.  There is a simple way to change the 
  120937             : //      code to fix bugs etc.  See the ROSE README file
  120938             : //      for directions.
  120939             : 
  120940             : // tps: (02/22/2010): Adding DLL export requirements
  120941             : #include "rosedll.h"
  120942             : 
  120943             : // predeclarations for SgUpirDataField
  120944             : 
  120945             : /* #line 120946 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120946             : 
  120947             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  120948             : 
  120949             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  120950             : 
  120951             : #if 1
  120952             : // Class Definition for SgUpirDataField
  120953             : class ROSE_DLL_API SgUpirDataField  : public SgOmpClause
  120954             :    {
  120955             :      public:
  120956             : 
  120957             : 
  120958             : /* #line 120959 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  120959             : 
  120960             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  120961             : // Start of memberFunctionString
  120962             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  120963             : 
  120964             : // *** COMMON CODE SECTION BEGINS HERE ***
  120965             : 
  120966             :     public:
  120967             : 
  120968             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  120969             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  120970             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  120971             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  120972             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  120973             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  120974             : 
  120975             :       /*! \brief returns a string representing the class name */
  120976             :           virtual std::string class_name() const override;
  120977             : 
  120978             :       /*! \brief returns new style SageIII enum values */
  120979             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  120980             : 
  120981             :       /*! \brief static variant value */
  120982             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  120983             :        // static const VariantT static_variant = V_SgUpirDataField;
  120984             :           enum { static_variant = V_SgUpirDataField };
  120985             : 
  120986             :        /* the generated cast function */
  120987             :       /*! \brief Casts pointer from base class to derived class */
  120988             :           ROSE_DLL_API friend       SgUpirDataField* isSgUpirDataField(       SgNode * s );
  120989             : 
  120990             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  120991             :           ROSE_DLL_API friend const SgUpirDataField* isSgUpirDataField( const SgNode * s );
  120992             : 
  120993             :      // ******************************************
  120994             :      // * Memory Pool / New / Delete
  120995             :      // ******************************************
  120996             : 
  120997             :      public:
  120998             :           /// \private
  120999             :           static const unsigned pool_size; //
  121000             :           /// \private
  121001             :           static std::vector<unsigned char *> pools; //
  121002             :           /// \private
  121003             :           static SgUpirDataField * next_node; // 
  121004             : 
  121005             :           /// \private
  121006             :           static unsigned long initializeStorageClassArray(SgUpirDataFieldStorageClass *); //
  121007             : 
  121008             :           /// \private
  121009             :           static void clearMemoryPool(); //
  121010             :           static void deleteMemoryPool(); //
  121011             : 
  121012             :           /// \private
  121013             :           static void extendMemoryPoolForFileIO(); //
  121014             : 
  121015             :           /// \private
  121016             :           static SgUpirDataField * getPointerFromGlobalIndex(unsigned long); //
  121017             :           /// \private
  121018             :           static SgUpirDataField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  121019             : 
  121020             :           /// \private
  121021             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  121022             :           /// \private
  121023             :           static void resetValidFreepointers(); //
  121024             :           /// \private
  121025             :           static unsigned long getNumberOfLastValidPointer(); //
  121026             : 
  121027             : 
  121028             : #if defined(INLINE_FUNCTIONS)
  121029             :       /*! \brief returns pointer to newly allocated IR node */
  121030             :           inline void *operator new (size_t size);
  121031             : #else
  121032             :       /*! \brief returns pointer to newly allocated IR node */
  121033             :           void *operator new (size_t size);
  121034             : #endif
  121035             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  121036             :           void operator delete (void* pointer, size_t size);
  121037             : 
  121038             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  121039           0 :           void operator delete (void* pointer)
  121040             :              {
  121041             :             // This is the generated delete operator...
  121042           0 :                SgUpirDataField::operator delete (pointer,sizeof(SgUpirDataField));
  121043             :              }
  121044             : 
  121045             :       /*! \brief Returns the total number of IR nodes of this type */
  121046             :           static size_t numberOfNodes();
  121047             : 
  121048             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  121049             :           static size_t memoryUsage();
  121050             : 
  121051             :       // End of scope which started in IR nodes specific code 
  121052             :       /* */
  121053             : 
  121054             :       /* name Internal Functions
  121055             :           \brief Internal functions ... incomplete-documentation
  121056             : 
  121057             :           These functions have been made public as part of the design, but they are suggested for internal use 
  121058             :           or by particularly knowledgeable users for specialized tools or applications.
  121059             : 
  121060             :           \internal We could not make these private because they are required by user for special purposes. And 
  121061             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  121062             :          
  121063             :        */
  121064             : 
  121065             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  121066             :        // overridden in every class by *generated* implementation
  121067             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  121068             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  121069             :        // MS: 06/28/02 container of names of variables or container indices 
  121070             :        // used used in the traversal to access AST successor nodes
  121071             :        // overridden in every class by *generated* implementation
  121072             :       /*! \brief container of names of variables or container indices used used in the traversal
  121073             :           to access AST successor nodes overridden in every class by *generated* implementation */
  121074             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  121075             : 
  121076             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  121077             :        // than all the vector copies. The implementation for these functions is generated for each class.
  121078             :       /*! \brief return number of children in the traversal successor list */
  121079             :           virtual size_t get_numberOfTraversalSuccessors() override;
  121080             :       /*! \brief index-based access to traversal successors by index number */
  121081             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  121082             :       /*! \brief index-based access to traversal successors by child node */
  121083             :           virtual size_t get_childIndex(SgNode *child) override;
  121084             : 
  121085             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  121086             :        // MS: 08/16/2002 method for generating RTI information
  121087             :       /*! \brief return C++ Runtime-Time-Information */
  121088             :           virtual RTIReturnType roseRTI() override;
  121089             : #endif
  121090             :       /* */
  121091             : 
  121092             : 
  121093             : 
  121094             :       /* name Deprecated Functions
  121095             :           \brief Deprecated functions ... incomplete-documentation
  121096             : 
  121097             :           These functions have been deprecated from use.
  121098             :        */
  121099             :       /* */
  121100             : 
  121101             :       /*! returns a C style string (char*) representing the class name */
  121102             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  121103             : 
  121104             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  121105             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  121106             : #if 0
  121107             :       /*! returns old style Sage II enum values */
  121108             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  121109             :       /*! returns old style Sage II enum values */
  121110             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  121111             : #endif
  121112             :       /* */
  121113             : 
  121114             : 
  121115             : 
  121116             : 
  121117             :      public:
  121118             :       /* name Traversal Support Functions
  121119             :           \brief Traversal support functions ... incomplete-documentation
  121120             : 
  121121             :           These functions have been made public as part of the design, but they are suggested for internal use 
  121122             :           or by particularly knowledgable users for specialized tools or applications.
  121123             :        */
  121124             :       /* */
  121125             : 
  121126             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  121127             :        // (inferior to ROSE traversal mechanism, experimental).
  121128             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  121129             :        */
  121130             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  121131             : 
  121132             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  121133             :       /*! \brief support for the classic visitor pattern done in GoF */
  121134             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  121135             : 
  121136             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  121137             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  121138             :        */
  121139             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  121140             : 
  121141             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  121142             :        */
  121143             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  121144             : 
  121145             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  121146             :        // This traversal helps support internal tools that call static member functions.
  121147             :        // note: this function operates on the memory pools.
  121148             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  121149             :        */
  121150             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  121151             :       /* */
  121152             : 
  121153             : 
  121154             :      public:
  121155             :       /* name Memory Allocation Functions
  121156             :           \brief Memory allocations functions ... incomplete-documentation
  121157             : 
  121158             :           These functions have been made public as part of the design, but they are suggested for internal use 
  121159             :           or by particularly knowledgable users for specialized tools or applications.
  121160             :        */
  121161             :       /* */
  121162             : 
  121163             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  121164             : 
  121165             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  121166             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  121167             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  121168             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  121169             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  121170             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  121171             :           being used with the AST File I/O mechanism.
  121172             :        */
  121173             :           virtual bool isInMemoryPool() override;
  121174             : 
  121175             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  121176             : 
  121177             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  121178             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  121179             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  121180             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  121181             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  121182             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  121183             :           being used with the AST File I/O mechanism.
  121184             :        */
  121185             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  121186             : 
  121187             :       // DQ (4/30/2006): Modified to be a const function.
  121188             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  121189             : 
  121190             :           This functions is part of general support for many possible tools to operate 
  121191             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  121192             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  121193             :           less than the set of pointers used by the AST file I/O. This is part of
  121194             :           work implemented by Andreas, and support tools such as the AST graph generation.
  121195             : 
  121196             :           \warning This function can return unexpected data members and thus the 
  121197             :                    order and the number of elements is unpredicable and subject 
  121198             :                    to change.
  121199             : 
  121200             :           \returns STL vector of pairs of SgNode* and strings
  121201             :        */
  121202             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  121203             : 
  121204             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  121205             : 
  121206             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  121207             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  121208             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  121209             : 
  121210             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  121211             :                    and subject to change.
  121212             :        */
  121213             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  121214             : 
  121215             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  121216             : 
  121217             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  121218             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  121219             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  121220             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  121221             : 
  121222             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  121223             : 
  121224             :           \returns long
  121225             :        */
  121226             :           virtual long getChildIndex( SgNode* childNode ) const override;
  121227             : 
  121228             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  121229             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  121230             :       /* \brief Constructor for use by AST File I/O Mechanism
  121231             : 
  121232             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  121233             :           which obtained via fast binary file I/O from disk.
  121234             :        */
  121235             :        // SgUpirDataField( SgUpirDataFieldStorageClass& source );
  121236             : 
  121237             : 
  121238             : 
  121239             : 
  121240             : 
  121241             :  // JH (10/24/2005): methods added to support the ast file IO
  121242             :     private:
  121243             : 
  121244             :       /* name AST Memory Allocation Support Functions
  121245             :           \brief Memory allocations support....
  121246             : 
  121247             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  121248             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  121249             :           and support the AST File I/O Mechanism.
  121250             :        */
  121251             :       /* */
  121252             : 
  121253             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  121254             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  121255             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  121256             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  121257             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  121258             :           a correspinding one in the AST_FILE_IO class!
  121259             :        */
  121260             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  121261             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  121262             :       /* \brief Typedef used for low level memory access.
  121263             :        */
  121264             :        // typedef unsigned char* TestType;
  121265             : 
  121266             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  121267             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  121268             :       /* \brief Typedef used to hold memory addresses as values.
  121269             :        */
  121270             :        // typedef unsigned long  AddressType;
  121271             : 
  121272             : 
  121273             : 
  121274             :        // necessary, to have direct access to the p_freepointer and the private methods !
  121275             :       /*! \brief friend class declaration to support AST File I/O */
  121276             :           friend class AST_FILE_IO;
  121277             : 
  121278             :       /*! \brief friend class declaration to support AST File I/O */
  121279             :           friend class SgUpirDataFieldStorageClass;
  121280             : 
  121281             :       /*! \brief friend class declaration to support AST File I/O */
  121282             :           friend class AstSpecificDataManagingClass;
  121283             : 
  121284             :       /*! \brief friend class declaration to support AST File I/O */
  121285             :           friend class AstSpecificDataManagingClassStorageClass;
  121286             :     public:
  121287             :       /*! \brief IR node constructor to support AST File I/O */
  121288             :           SgUpirDataField( const SgUpirDataFieldStorageClass& source );
  121289             : 
  121290             :  // private: // JJW hack
  121291             :        /*
  121292             :           name AST Memory Allocation Support Variables
  121293             :           Memory allocations support variables 
  121294             : 
  121295             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  121296             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  121297             :           and support the AST File I/O Mechanism.
  121298             :        */
  121299             :       /* */
  121300             : 
  121301             :     public:
  121302             : 
  121303             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  121304             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  121305             :       // virtual SgNode* addRegExpAttribute();
  121306             :       /*! \brief Support for AST matching using regular expression.
  121307             : 
  121308             :           This support is incomplete and the subject of current research to define 
  121309             :           RegEx trees to support inexact matching.
  121310             :        */
  121311             :           SgUpirDataField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  121312             : 
  121313             : // *** COMMON CODE SECTION ENDS HERE ***
  121314             : 
  121315             : 
  121316             : // End of memberFunctionString
  121317             : // Start of memberFunctionString
  121318             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  121319             : 
  121320             :      // the generated cast function
  121321             :      // friend ROSE_DLL_API SgUpirDataField* isSgUpirDataField ( SgNode* s );
  121322             : 
  121323             :           typedef SgOmpClause base_node_type;
  121324             : 
  121325             : 
  121326             : // End of memberFunctionString
  121327             : 
  121328             :      public: 
  121329             :          std::list<SgUpirDataItemField*> get_data() const;
  121330             :          void set_data(std::list<SgUpirDataItemField*> data);
  121331             : 
  121332             :      public: 
  121333             :          std::list<SgUpirDataItemField*> get_shared_data() const;
  121334             :          void set_shared_data(std::list<SgUpirDataItemField*> shared_data);
  121335             : 
  121336             :      public: 
  121337             :          std::list<SgUpirDataItemField*> get_private_data() const;
  121338             :          void set_private_data(std::list<SgUpirDataItemField*> private_data);
  121339             : 
  121340             :      public: 
  121341             :          std::list<SgUpirDataItemField*> get_firstprivate_data() const;
  121342             :          void set_firstprivate_data(std::list<SgUpirDataItemField*> firstprivate_data);
  121343             : 
  121344             :      public: 
  121345             :          std::list<SgUpirDataItemField*> get_lastprivate_data() const;
  121346             :          void set_lastprivate_data(std::list<SgUpirDataItemField*> lastprivate_data);
  121347             : 
  121348             :      public: 
  121349             :          std::list<SgUpirDataItemField*> get_reduction_data() const;
  121350             :          void set_reduction_data(std::list<SgUpirDataItemField*> reduction_data);
  121351             : 
  121352             :      public: 
  121353             :          std::list<SgUpirDataItemField*> get_map_to_data() const;
  121354             :          void set_map_to_data(std::list<SgUpirDataItemField*> map_to_data);
  121355             : 
  121356             :      public: 
  121357             :          std::list<SgUpirDataItemField*> get_map_from_data() const;
  121358             :          void set_map_from_data(std::list<SgUpirDataItemField*> map_from_data);
  121359             : 
  121360             :      public: 
  121361             :          std::list<SgUpirDataItemField*> get_map_tofrom_data() const;
  121362             :          void set_map_tofrom_data(std::list<SgUpirDataItemField*> map_tofrom_data);
  121363             : 
  121364             :      public: 
  121365             :          std::list<SgUpirDataItemField*> get_map_alloc_data() const;
  121366             :          void set_map_alloc_data(std::list<SgUpirDataItemField*> map_alloc_data);
  121367             : 
  121368             : 
  121369             :      public: 
  121370             :          virtual ~SgUpirDataField();
  121371             : 
  121372             : 
  121373             :      public: 
  121374             :          SgUpirDataField(Sg_File_Info* startOfConstruct ); 
  121375             :          SgUpirDataField(); 
  121376             : 
  121377             :     protected:
  121378             : // Start of memberFunctionString
  121379             : std::list<SgUpirDataItemField*> p_data;
  121380             :           
  121381             : // End of memberFunctionString
  121382             : // Start of memberFunctionString
  121383             : std::list<SgUpirDataItemField*> p_shared_data;
  121384             :           
  121385             : // End of memberFunctionString
  121386             : // Start of memberFunctionString
  121387             : std::list<SgUpirDataItemField*> p_private_data;
  121388             :           
  121389             : // End of memberFunctionString
  121390             : // Start of memberFunctionString
  121391             : std::list<SgUpirDataItemField*> p_firstprivate_data;
  121392             :           
  121393             : // End of memberFunctionString
  121394             : // Start of memberFunctionString
  121395             : std::list<SgUpirDataItemField*> p_lastprivate_data;
  121396             :           
  121397             : // End of memberFunctionString
  121398             : // Start of memberFunctionString
  121399             : std::list<SgUpirDataItemField*> p_reduction_data;
  121400             :           
  121401             : // End of memberFunctionString
  121402             : // Start of memberFunctionString
  121403             : std::list<SgUpirDataItemField*> p_map_to_data;
  121404             :           
  121405             : // End of memberFunctionString
  121406             : // Start of memberFunctionString
  121407             : std::list<SgUpirDataItemField*> p_map_from_data;
  121408             :           
  121409             : // End of memberFunctionString
  121410             : // Start of memberFunctionString
  121411             : std::list<SgUpirDataItemField*> p_map_tofrom_data;
  121412             :           
  121413             : // End of memberFunctionString
  121414             : // Start of memberFunctionString
  121415             : std::list<SgUpirDataItemField*> p_map_alloc_data;
  121416             :           
  121417             : // End of memberFunctionString
  121418             : 
  121419             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirDataField>;
  121420             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_data>;
  121421             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_shared_data>;
  121422             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_private_data>;
  121423             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_firstprivate_data>;
  121424             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_lastprivate_data>;
  121425             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_reduction_data>;
  121426             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_map_to_data>;
  121427             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_map_from_data>;
  121428             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_map_tofrom_data>;
  121429             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataField, std::list<SgUpirDataItemField*>,&SgUpirDataField::p_map_alloc_data>;
  121430             : 
  121431             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121432             : 
  121433             : 
  121434             :    };
  121435             : #endif
  121436             : 
  121437             : // postdeclarations for SgUpirDataField
  121438             : 
  121439             : /* #line 121440 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121440             : 
  121441             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  121442             : 
  121443             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121444             : 
  121445             : 
  121446             : /* #line 121447 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121447             : 
  121448             : 
  121449             : 
  121450             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121451             : 
  121452             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  121453             : //      This code is automatically generated for each 
  121454             : //      terminal and non-terminal within the defined 
  121455             : //      grammar.  There is a simple way to change the 
  121456             : //      code to fix bugs etc.  See the ROSE README file
  121457             : //      for directions.
  121458             : 
  121459             : // tps: (02/22/2010): Adding DLL export requirements
  121460             : #include "rosedll.h"
  121461             : 
  121462             : // predeclarations for SgUpirTargetField
  121463             : 
  121464             : /* #line 121465 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121465             : 
  121466             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  121467             : 
  121468             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121469             : 
  121470             : #if 1
  121471             : // Class Definition for SgUpirTargetField
  121472             : class ROSE_DLL_API SgUpirTargetField  : public SgOmpClause
  121473             :    {
  121474             :      public:
  121475             : 
  121476             : 
  121477             : /* #line 121478 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121478             : 
  121479             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  121480             : // Start of memberFunctionString
  121481             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  121482             : 
  121483             : // *** COMMON CODE SECTION BEGINS HERE ***
  121484             : 
  121485             :     public:
  121486             : 
  121487             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  121488             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  121489             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  121490             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  121491             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  121492             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  121493             : 
  121494             :       /*! \brief returns a string representing the class name */
  121495             :           virtual std::string class_name() const override;
  121496             : 
  121497             :       /*! \brief returns new style SageIII enum values */
  121498             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  121499             : 
  121500             :       /*! \brief static variant value */
  121501             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  121502             :        // static const VariantT static_variant = V_SgUpirTargetField;
  121503             :           enum { static_variant = V_SgUpirTargetField };
  121504             : 
  121505             :        /* the generated cast function */
  121506             :       /*! \brief Casts pointer from base class to derived class */
  121507             :           ROSE_DLL_API friend       SgUpirTargetField* isSgUpirTargetField(       SgNode * s );
  121508             : 
  121509             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  121510             :           ROSE_DLL_API friend const SgUpirTargetField* isSgUpirTargetField( const SgNode * s );
  121511             : 
  121512             :      // ******************************************
  121513             :      // * Memory Pool / New / Delete
  121514             :      // ******************************************
  121515             : 
  121516             :      public:
  121517             :           /// \private
  121518             :           static const unsigned pool_size; //
  121519             :           /// \private
  121520             :           static std::vector<unsigned char *> pools; //
  121521             :           /// \private
  121522             :           static SgUpirTargetField * next_node; // 
  121523             : 
  121524             :           /// \private
  121525             :           static unsigned long initializeStorageClassArray(SgUpirTargetFieldStorageClass *); //
  121526             : 
  121527             :           /// \private
  121528             :           static void clearMemoryPool(); //
  121529             :           static void deleteMemoryPool(); //
  121530             : 
  121531             :           /// \private
  121532             :           static void extendMemoryPoolForFileIO(); //
  121533             : 
  121534             :           /// \private
  121535             :           static SgUpirTargetField * getPointerFromGlobalIndex(unsigned long); //
  121536             :           /// \private
  121537             :           static SgUpirTargetField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  121538             : 
  121539             :           /// \private
  121540             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  121541             :           /// \private
  121542             :           static void resetValidFreepointers(); //
  121543             :           /// \private
  121544             :           static unsigned long getNumberOfLastValidPointer(); //
  121545             : 
  121546             : 
  121547             : #if defined(INLINE_FUNCTIONS)
  121548             :       /*! \brief returns pointer to newly allocated IR node */
  121549             :           inline void *operator new (size_t size);
  121550             : #else
  121551             :       /*! \brief returns pointer to newly allocated IR node */
  121552             :           void *operator new (size_t size);
  121553             : #endif
  121554             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  121555             :           void operator delete (void* pointer, size_t size);
  121556             : 
  121557             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  121558           0 :           void operator delete (void* pointer)
  121559             :              {
  121560             :             // This is the generated delete operator...
  121561           0 :                SgUpirTargetField::operator delete (pointer,sizeof(SgUpirTargetField));
  121562             :              }
  121563             : 
  121564             :       /*! \brief Returns the total number of IR nodes of this type */
  121565             :           static size_t numberOfNodes();
  121566             : 
  121567             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  121568             :           static size_t memoryUsage();
  121569             : 
  121570             :       // End of scope which started in IR nodes specific code 
  121571             :       /* */
  121572             : 
  121573             :       /* name Internal Functions
  121574             :           \brief Internal functions ... incomplete-documentation
  121575             : 
  121576             :           These functions have been made public as part of the design, but they are suggested for internal use 
  121577             :           or by particularly knowledgeable users for specialized tools or applications.
  121578             : 
  121579             :           \internal We could not make these private because they are required by user for special purposes. And 
  121580             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  121581             :          
  121582             :        */
  121583             : 
  121584             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  121585             :        // overridden in every class by *generated* implementation
  121586             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  121587             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  121588             :        // MS: 06/28/02 container of names of variables or container indices 
  121589             :        // used used in the traversal to access AST successor nodes
  121590             :        // overridden in every class by *generated* implementation
  121591             :       /*! \brief container of names of variables or container indices used used in the traversal
  121592             :           to access AST successor nodes overridden in every class by *generated* implementation */
  121593             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  121594             : 
  121595             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  121596             :        // than all the vector copies. The implementation for these functions is generated for each class.
  121597             :       /*! \brief return number of children in the traversal successor list */
  121598             :           virtual size_t get_numberOfTraversalSuccessors() override;
  121599             :       /*! \brief index-based access to traversal successors by index number */
  121600             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  121601             :       /*! \brief index-based access to traversal successors by child node */
  121602             :           virtual size_t get_childIndex(SgNode *child) override;
  121603             : 
  121604             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  121605             :        // MS: 08/16/2002 method for generating RTI information
  121606             :       /*! \brief return C++ Runtime-Time-Information */
  121607             :           virtual RTIReturnType roseRTI() override;
  121608             : #endif
  121609             :       /* */
  121610             : 
  121611             : 
  121612             : 
  121613             :       /* name Deprecated Functions
  121614             :           \brief Deprecated functions ... incomplete-documentation
  121615             : 
  121616             :           These functions have been deprecated from use.
  121617             :        */
  121618             :       /* */
  121619             : 
  121620             :       /*! returns a C style string (char*) representing the class name */
  121621             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  121622             : 
  121623             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  121624             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  121625             : #if 0
  121626             :       /*! returns old style Sage II enum values */
  121627             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  121628             :       /*! returns old style Sage II enum values */
  121629             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  121630             : #endif
  121631             :       /* */
  121632             : 
  121633             : 
  121634             : 
  121635             : 
  121636             :      public:
  121637             :       /* name Traversal Support Functions
  121638             :           \brief Traversal support functions ... incomplete-documentation
  121639             : 
  121640             :           These functions have been made public as part of the design, but they are suggested for internal use 
  121641             :           or by particularly knowledgable users for specialized tools or applications.
  121642             :        */
  121643             :       /* */
  121644             : 
  121645             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  121646             :        // (inferior to ROSE traversal mechanism, experimental).
  121647             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  121648             :        */
  121649             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  121650             : 
  121651             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  121652             :       /*! \brief support for the classic visitor pattern done in GoF */
  121653             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  121654             : 
  121655             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  121656             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  121657             :        */
  121658             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  121659             : 
  121660             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  121661             :        */
  121662             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  121663             : 
  121664             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  121665             :        // This traversal helps support internal tools that call static member functions.
  121666             :        // note: this function operates on the memory pools.
  121667             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  121668             :        */
  121669             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  121670             :       /* */
  121671             : 
  121672             : 
  121673             :      public:
  121674             :       /* name Memory Allocation Functions
  121675             :           \brief Memory allocations functions ... incomplete-documentation
  121676             : 
  121677             :           These functions have been made public as part of the design, but they are suggested for internal use 
  121678             :           or by particularly knowledgable users for specialized tools or applications.
  121679             :        */
  121680             :       /* */
  121681             : 
  121682             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  121683             : 
  121684             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  121685             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  121686             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  121687             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  121688             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  121689             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  121690             :           being used with the AST File I/O mechanism.
  121691             :        */
  121692             :           virtual bool isInMemoryPool() override;
  121693             : 
  121694             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  121695             : 
  121696             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  121697             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  121698             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  121699             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  121700             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  121701             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  121702             :           being used with the AST File I/O mechanism.
  121703             :        */
  121704             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  121705             : 
  121706             :       // DQ (4/30/2006): Modified to be a const function.
  121707             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  121708             : 
  121709             :           This functions is part of general support for many possible tools to operate 
  121710             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  121711             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  121712             :           less than the set of pointers used by the AST file I/O. This is part of
  121713             :           work implemented by Andreas, and support tools such as the AST graph generation.
  121714             : 
  121715             :           \warning This function can return unexpected data members and thus the 
  121716             :                    order and the number of elements is unpredicable and subject 
  121717             :                    to change.
  121718             : 
  121719             :           \returns STL vector of pairs of SgNode* and strings
  121720             :        */
  121721             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  121722             : 
  121723             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  121724             : 
  121725             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  121726             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  121727             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  121728             : 
  121729             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  121730             :                    and subject to change.
  121731             :        */
  121732             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  121733             : 
  121734             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  121735             : 
  121736             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  121737             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  121738             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  121739             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  121740             : 
  121741             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  121742             : 
  121743             :           \returns long
  121744             :        */
  121745             :           virtual long getChildIndex( SgNode* childNode ) const override;
  121746             : 
  121747             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  121748             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  121749             :       /* \brief Constructor for use by AST File I/O Mechanism
  121750             : 
  121751             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  121752             :           which obtained via fast binary file I/O from disk.
  121753             :        */
  121754             :        // SgUpirTargetField( SgUpirTargetFieldStorageClass& source );
  121755             : 
  121756             : 
  121757             : 
  121758             : 
  121759             : 
  121760             :  // JH (10/24/2005): methods added to support the ast file IO
  121761             :     private:
  121762             : 
  121763             :       /* name AST Memory Allocation Support Functions
  121764             :           \brief Memory allocations support....
  121765             : 
  121766             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  121767             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  121768             :           and support the AST File I/O Mechanism.
  121769             :        */
  121770             :       /* */
  121771             : 
  121772             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  121773             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  121774             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  121775             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  121776             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  121777             :           a correspinding one in the AST_FILE_IO class!
  121778             :        */
  121779             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  121780             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  121781             :       /* \brief Typedef used for low level memory access.
  121782             :        */
  121783             :        // typedef unsigned char* TestType;
  121784             : 
  121785             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  121786             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  121787             :       /* \brief Typedef used to hold memory addresses as values.
  121788             :        */
  121789             :        // typedef unsigned long  AddressType;
  121790             : 
  121791             : 
  121792             : 
  121793             :        // necessary, to have direct access to the p_freepointer and the private methods !
  121794             :       /*! \brief friend class declaration to support AST File I/O */
  121795             :           friend class AST_FILE_IO;
  121796             : 
  121797             :       /*! \brief friend class declaration to support AST File I/O */
  121798             :           friend class SgUpirTargetFieldStorageClass;
  121799             : 
  121800             :       /*! \brief friend class declaration to support AST File I/O */
  121801             :           friend class AstSpecificDataManagingClass;
  121802             : 
  121803             :       /*! \brief friend class declaration to support AST File I/O */
  121804             :           friend class AstSpecificDataManagingClassStorageClass;
  121805             :     public:
  121806             :       /*! \brief IR node constructor to support AST File I/O */
  121807             :           SgUpirTargetField( const SgUpirTargetFieldStorageClass& source );
  121808             : 
  121809             :  // private: // JJW hack
  121810             :        /*
  121811             :           name AST Memory Allocation Support Variables
  121812             :           Memory allocations support variables 
  121813             : 
  121814             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  121815             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  121816             :           and support the AST File I/O Mechanism.
  121817             :        */
  121818             :       /* */
  121819             : 
  121820             :     public:
  121821             : 
  121822             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  121823             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  121824             :       // virtual SgNode* addRegExpAttribute();
  121825             :       /*! \brief Support for AST matching using regular expression.
  121826             : 
  121827             :           This support is incomplete and the subject of current research to define 
  121828             :           RegEx trees to support inexact matching.
  121829             :        */
  121830             :           SgUpirTargetField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  121831             : 
  121832             : // *** COMMON CODE SECTION ENDS HERE ***
  121833             : 
  121834             : 
  121835             : // End of memberFunctionString
  121836             : // Start of memberFunctionString
  121837             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  121838             : 
  121839             :      // the generated cast function
  121840             :      // friend ROSE_DLL_API SgUpirTargetField* isSgUpirTargetField ( SgNode* s );
  121841             : 
  121842             :           typedef SgOmpClause base_node_type;
  121843             : 
  121844             : 
  121845             : // End of memberFunctionString
  121846             : 
  121847             :      public: 
  121848             :          std::set<SgOmpClause::upir_target_type_enum> get_target_type() const;
  121849             :          void set_target_type(std::set<SgOmpClause::upir_target_type_enum> target_type);
  121850             : 
  121851             : 
  121852             :      public: 
  121853             :          virtual ~SgUpirTargetField();
  121854             : 
  121855             : 
  121856             :      public: 
  121857             :          SgUpirTargetField(Sg_File_Info* startOfConstruct ); 
  121858             :          SgUpirTargetField(); 
  121859             : 
  121860             :     protected:
  121861             : // Start of memberFunctionString
  121862             : std::set<SgOmpClause::upir_target_type_enum> p_target_type;
  121863             :           
  121864             : // End of memberFunctionString
  121865             : 
  121866             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirTargetField>;
  121867             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirTargetField, std::set<SgOmpClause::upir_target_type_enum>,&SgUpirTargetField::p_target_type>;
  121868             : 
  121869             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121870             : 
  121871             : 
  121872             :    };
  121873             : #endif
  121874             : 
  121875             : // postdeclarations for SgUpirTargetField
  121876             : 
  121877             : /* #line 121878 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121878             : 
  121879             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  121880             : 
  121881             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121882             : 
  121883             : 
  121884             : /* #line 121885 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121885             : 
  121886             : 
  121887             : 
  121888             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121889             : 
  121890             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  121891             : //      This code is automatically generated for each 
  121892             : //      terminal and non-terminal within the defined 
  121893             : //      grammar.  There is a simple way to change the 
  121894             : //      code to fix bugs etc.  See the ROSE README file
  121895             : //      for directions.
  121896             : 
  121897             : // tps: (02/22/2010): Adding DLL export requirements
  121898             : #include "rosedll.h"
  121899             : 
  121900             : // predeclarations for SgUpirDataItemField
  121901             : 
  121902             : /* #line 121903 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121903             : 
  121904             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  121905             : 
  121906             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  121907             : 
  121908             : #if 1
  121909             : // Class Definition for SgUpirDataItemField
  121910             : class ROSE_DLL_API SgUpirDataItemField  : public SgOmpClause
  121911             :    {
  121912             :      public:
  121913             : 
  121914             : 
  121915             : /* #line 121916 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  121916             : 
  121917             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  121918             : // Start of memberFunctionString
  121919             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  121920             : 
  121921             : // *** COMMON CODE SECTION BEGINS HERE ***
  121922             : 
  121923             :     public:
  121924             : 
  121925             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  121926             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  121927             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  121928             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  121929             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  121930             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  121931             : 
  121932             :       /*! \brief returns a string representing the class name */
  121933             :           virtual std::string class_name() const override;
  121934             : 
  121935             :       /*! \brief returns new style SageIII enum values */
  121936             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  121937             : 
  121938             :       /*! \brief static variant value */
  121939             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  121940             :        // static const VariantT static_variant = V_SgUpirDataItemField;
  121941             :           enum { static_variant = V_SgUpirDataItemField };
  121942             : 
  121943             :        /* the generated cast function */
  121944             :       /*! \brief Casts pointer from base class to derived class */
  121945             :           ROSE_DLL_API friend       SgUpirDataItemField* isSgUpirDataItemField(       SgNode * s );
  121946             : 
  121947             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  121948             :           ROSE_DLL_API friend const SgUpirDataItemField* isSgUpirDataItemField( const SgNode * s );
  121949             : 
  121950             :      // ******************************************
  121951             :      // * Memory Pool / New / Delete
  121952             :      // ******************************************
  121953             : 
  121954             :      public:
  121955             :           /// \private
  121956             :           static const unsigned pool_size; //
  121957             :           /// \private
  121958             :           static std::vector<unsigned char *> pools; //
  121959             :           /// \private
  121960             :           static SgUpirDataItemField * next_node; // 
  121961             : 
  121962             :           /// \private
  121963             :           static unsigned long initializeStorageClassArray(SgUpirDataItemFieldStorageClass *); //
  121964             : 
  121965             :           /// \private
  121966             :           static void clearMemoryPool(); //
  121967             :           static void deleteMemoryPool(); //
  121968             : 
  121969             :           /// \private
  121970             :           static void extendMemoryPoolForFileIO(); //
  121971             : 
  121972             :           /// \private
  121973             :           static SgUpirDataItemField * getPointerFromGlobalIndex(unsigned long); //
  121974             :           /// \private
  121975             :           static SgUpirDataItemField * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  121976             : 
  121977             :           /// \private
  121978             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  121979             :           /// \private
  121980             :           static void resetValidFreepointers(); //
  121981             :           /// \private
  121982             :           static unsigned long getNumberOfLastValidPointer(); //
  121983             : 
  121984             : 
  121985             : #if defined(INLINE_FUNCTIONS)
  121986             :       /*! \brief returns pointer to newly allocated IR node */
  121987             :           inline void *operator new (size_t size);
  121988             : #else
  121989             :       /*! \brief returns pointer to newly allocated IR node */
  121990             :           void *operator new (size_t size);
  121991             : #endif
  121992             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  121993             :           void operator delete (void* pointer, size_t size);
  121994             : 
  121995             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  121996           0 :           void operator delete (void* pointer)
  121997             :              {
  121998             :             // This is the generated delete operator...
  121999           0 :                SgUpirDataItemField::operator delete (pointer,sizeof(SgUpirDataItemField));
  122000             :              }
  122001             : 
  122002             :       /*! \brief Returns the total number of IR nodes of this type */
  122003             :           static size_t numberOfNodes();
  122004             : 
  122005             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  122006             :           static size_t memoryUsage();
  122007             : 
  122008             :       // End of scope which started in IR nodes specific code 
  122009             :       /* */
  122010             : 
  122011             :       /* name Internal Functions
  122012             :           \brief Internal functions ... incomplete-documentation
  122013             : 
  122014             :           These functions have been made public as part of the design, but they are suggested for internal use 
  122015             :           or by particularly knowledgeable users for specialized tools or applications.
  122016             : 
  122017             :           \internal We could not make these private because they are required by user for special purposes. And 
  122018             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  122019             :          
  122020             :        */
  122021             : 
  122022             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  122023             :        // overridden in every class by *generated* implementation
  122024             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  122025             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  122026             :        // MS: 06/28/02 container of names of variables or container indices 
  122027             :        // used used in the traversal to access AST successor nodes
  122028             :        // overridden in every class by *generated* implementation
  122029             :       /*! \brief container of names of variables or container indices used used in the traversal
  122030             :           to access AST successor nodes overridden in every class by *generated* implementation */
  122031             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  122032             : 
  122033             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  122034             :        // than all the vector copies. The implementation for these functions is generated for each class.
  122035             :       /*! \brief return number of children in the traversal successor list */
  122036             :           virtual size_t get_numberOfTraversalSuccessors() override;
  122037             :       /*! \brief index-based access to traversal successors by index number */
  122038             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  122039             :       /*! \brief index-based access to traversal successors by child node */
  122040             :           virtual size_t get_childIndex(SgNode *child) override;
  122041             : 
  122042             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  122043             :        // MS: 08/16/2002 method for generating RTI information
  122044             :       /*! \brief return C++ Runtime-Time-Information */
  122045             :           virtual RTIReturnType roseRTI() override;
  122046             : #endif
  122047             :       /* */
  122048             : 
  122049             : 
  122050             : 
  122051             :       /* name Deprecated Functions
  122052             :           \brief Deprecated functions ... incomplete-documentation
  122053             : 
  122054             :           These functions have been deprecated from use.
  122055             :        */
  122056             :       /* */
  122057             : 
  122058             :       /*! returns a C style string (char*) representing the class name */
  122059             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  122060             : 
  122061             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  122062             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  122063             : #if 0
  122064             :       /*! returns old style Sage II enum values */
  122065             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  122066             :       /*! returns old style Sage II enum values */
  122067             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  122068             : #endif
  122069             :       /* */
  122070             : 
  122071             : 
  122072             : 
  122073             : 
  122074             :      public:
  122075             :       /* name Traversal Support Functions
  122076             :           \brief Traversal support functions ... incomplete-documentation
  122077             : 
  122078             :           These functions have been made public as part of the design, but they are suggested for internal use 
  122079             :           or by particularly knowledgable users for specialized tools or applications.
  122080             :        */
  122081             :       /* */
  122082             : 
  122083             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  122084             :        // (inferior to ROSE traversal mechanism, experimental).
  122085             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  122086             :        */
  122087             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  122088             : 
  122089             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  122090             :       /*! \brief support for the classic visitor pattern done in GoF */
  122091             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  122092             : 
  122093             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  122094             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  122095             :        */
  122096             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  122097             : 
  122098             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  122099             :        */
  122100             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  122101             : 
  122102             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  122103             :        // This traversal helps support internal tools that call static member functions.
  122104             :        // note: this function operates on the memory pools.
  122105             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  122106             :        */
  122107             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  122108             :       /* */
  122109             : 
  122110             : 
  122111             :      public:
  122112             :       /* name Memory Allocation Functions
  122113             :           \brief Memory allocations functions ... incomplete-documentation
  122114             : 
  122115             :           These functions have been made public as part of the design, but they are suggested for internal use 
  122116             :           or by particularly knowledgable users for specialized tools or applications.
  122117             :        */
  122118             :       /* */
  122119             : 
  122120             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  122121             : 
  122122             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  122123             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  122124             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  122125             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  122126             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  122127             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  122128             :           being used with the AST File I/O mechanism.
  122129             :        */
  122130             :           virtual bool isInMemoryPool() override;
  122131             : 
  122132             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  122133             : 
  122134             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  122135             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  122136             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  122137             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  122138             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  122139             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  122140             :           being used with the AST File I/O mechanism.
  122141             :        */
  122142             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  122143             : 
  122144             :       // DQ (4/30/2006): Modified to be a const function.
  122145             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  122146             : 
  122147             :           This functions is part of general support for many possible tools to operate 
  122148             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  122149             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  122150             :           less than the set of pointers used by the AST file I/O. This is part of
  122151             :           work implemented by Andreas, and support tools such as the AST graph generation.
  122152             : 
  122153             :           \warning This function can return unexpected data members and thus the 
  122154             :                    order and the number of elements is unpredicable and subject 
  122155             :                    to change.
  122156             : 
  122157             :           \returns STL vector of pairs of SgNode* and strings
  122158             :        */
  122159             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  122160             : 
  122161             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  122162             : 
  122163             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  122164             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  122165             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  122166             : 
  122167             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  122168             :                    and subject to change.
  122169             :        */
  122170             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  122171             : 
  122172             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  122173             : 
  122174             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  122175             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  122176             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  122177             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  122178             : 
  122179             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  122180             : 
  122181             :           \returns long
  122182             :        */
  122183             :           virtual long getChildIndex( SgNode* childNode ) const override;
  122184             : 
  122185             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  122186             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  122187             :       /* \brief Constructor for use by AST File I/O Mechanism
  122188             : 
  122189             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  122190             :           which obtained via fast binary file I/O from disk.
  122191             :        */
  122192             :        // SgUpirDataItemField( SgUpirDataItemFieldStorageClass& source );
  122193             : 
  122194             : 
  122195             : 
  122196             : 
  122197             : 
  122198             :  // JH (10/24/2005): methods added to support the ast file IO
  122199             :     private:
  122200             : 
  122201             :       /* name AST Memory Allocation Support Functions
  122202             :           \brief Memory allocations support....
  122203             : 
  122204             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  122205             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  122206             :           and support the AST File I/O Mechanism.
  122207             :        */
  122208             :       /* */
  122209             : 
  122210             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  122211             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  122212             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  122213             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  122214             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  122215             :           a correspinding one in the AST_FILE_IO class!
  122216             :        */
  122217             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  122218             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  122219             :       /* \brief Typedef used for low level memory access.
  122220             :        */
  122221             :        // typedef unsigned char* TestType;
  122222             : 
  122223             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  122224             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  122225             :       /* \brief Typedef used to hold memory addresses as values.
  122226             :        */
  122227             :        // typedef unsigned long  AddressType;
  122228             : 
  122229             : 
  122230             : 
  122231             :        // necessary, to have direct access to the p_freepointer and the private methods !
  122232             :       /*! \brief friend class declaration to support AST File I/O */
  122233             :           friend class AST_FILE_IO;
  122234             : 
  122235             :       /*! \brief friend class declaration to support AST File I/O */
  122236             :           friend class SgUpirDataItemFieldStorageClass;
  122237             : 
  122238             :       /*! \brief friend class declaration to support AST File I/O */
  122239             :           friend class AstSpecificDataManagingClass;
  122240             : 
  122241             :       /*! \brief friend class declaration to support AST File I/O */
  122242             :           friend class AstSpecificDataManagingClassStorageClass;
  122243             :     public:
  122244             :       /*! \brief IR node constructor to support AST File I/O */
  122245             :           SgUpirDataItemField( const SgUpirDataItemFieldStorageClass& source );
  122246             : 
  122247             :  // private: // JJW hack
  122248             :        /*
  122249             :           name AST Memory Allocation Support Variables
  122250             :           Memory allocations support variables 
  122251             : 
  122252             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  122253             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  122254             :           and support the AST File I/O Mechanism.
  122255             :        */
  122256             :       /* */
  122257             : 
  122258             :     public:
  122259             : 
  122260             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  122261             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  122262             :       // virtual SgNode* addRegExpAttribute();
  122263             :       /*! \brief Support for AST matching using regular expression.
  122264             : 
  122265             :           This support is incomplete and the subject of current research to define 
  122266             :           RegEx trees to support inexact matching.
  122267             :        */
  122268             :           SgUpirDataItemField* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  122269             : 
  122270             : // *** COMMON CODE SECTION ENDS HERE ***
  122271             : 
  122272             : 
  122273             : // End of memberFunctionString
  122274             : // Start of memberFunctionString
  122275             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  122276             : 
  122277             :      // the generated cast function
  122278             :      // friend ROSE_DLL_API SgUpirDataItemField* isSgUpirDataItemField ( SgNode* s );
  122279             : 
  122280             :           typedef SgOmpClause base_node_type;
  122281             : 
  122282             : 
  122283             : // End of memberFunctionString
  122284             : 
  122285             :      public: 
  122286             :          SgSymbol* get_symbol() const;
  122287             :          void set_symbol(SgSymbol* symbol);
  122288             : 
  122289             :      public: 
  122290             :          SgOmpClause::upir_data_sharing_enum get_sharing_property() const;
  122291             :          void set_sharing_property(SgOmpClause::upir_data_sharing_enum sharing_property);
  122292             : 
  122293             :      public: 
  122294             :          SgOmpClause::upir_property_visibility_enum get_sharing_visibility() const;
  122295             :          void set_sharing_visibility(SgOmpClause::upir_property_visibility_enum sharing_visibility);
  122296             : 
  122297             :      public: 
  122298             :          SgOmpClause::upir_data_mapping_enum get_mapping_property() const;
  122299             :          void set_mapping_property(SgOmpClause::upir_data_mapping_enum mapping_property);
  122300             : 
  122301             :      public: 
  122302             :          SgOmpClause::upir_property_visibility_enum get_mapping_visibility() const;
  122303             :          void set_mapping_visibility(SgOmpClause::upir_property_visibility_enum mapping_visibility);
  122304             : 
  122305             :      public: 
  122306             :          SgExpression* get_mapper() const;
  122307             :          void set_mapper(SgExpression* mapper);
  122308             : 
  122309             :      public: 
  122310             :          SgOmpClause::upir_data_access_enum get_access_property() const;
  122311             :          void set_access_property(SgOmpClause::upir_data_access_enum access_property);
  122312             : 
  122313             :      public: 
  122314             :          SgExpression* get_unit_id() const;
  122315             :          void set_unit_id(SgExpression* unit_id);
  122316             : 
  122317             :      public: 
  122318             :          SgOmpClause::upir_data_distribution_pattern_enum get_distribution_pattern() const;
  122319             :          void set_distribution_pattern(SgOmpClause::upir_data_distribution_pattern_enum distribution_pattern);
  122320             : 
  122321             :      public: 
  122322             :          std::list<std::list<SgExpression*>> get_section() const;
  122323             :          void set_section(std::list<std::list<SgExpression*>> section);
  122324             : 
  122325             :      public: 
  122326             :          SgOmpClause::upir_data_allocator_enum get_allocator() const;
  122327             :          void set_allocator(SgOmpClause::upir_data_allocator_enum allocator);
  122328             : 
  122329             :      public: 
  122330             :          SgExpression* get_user_defined_allocator() const;
  122331             :          void set_user_defined_allocator(SgExpression* user_defined_allocator);
  122332             : 
  122333             :      public: 
  122334             :          SgOmpClause::upir_data_deallocator_enum get_deallocator() const;
  122335             :          void set_deallocator(SgOmpClause::upir_data_deallocator_enum deallocator);
  122336             : 
  122337             :      public: 
  122338             :          SgExpression* get_user_defined_deallocator() const;
  122339             :          void set_user_defined_deallocator(SgExpression* user_defined_deallocator);
  122340             : 
  122341             :      public: 
  122342             :          SgExpression* get_memcpy_helper() const;
  122343             :          void set_memcpy_helper(SgExpression* memcpy_helper);
  122344             : 
  122345             : 
  122346             :      public: 
  122347             :          virtual ~SgUpirDataItemField();
  122348             : 
  122349             : 
  122350             :      public: 
  122351             :          SgUpirDataItemField(Sg_File_Info* startOfConstruct , SgSymbol* symbol = NULL); 
  122352             :          SgUpirDataItemField(SgSymbol* symbol); 
  122353             : 
  122354             :     protected:
  122355             : // Start of memberFunctionString
  122356             : SgSymbol* p_symbol;
  122357             :           
  122358             : // End of memberFunctionString
  122359             : // Start of memberFunctionString
  122360             : SgOmpClause::upir_data_sharing_enum p_sharing_property;
  122361             :           
  122362             : // End of memberFunctionString
  122363             : // Start of memberFunctionString
  122364             : SgOmpClause::upir_property_visibility_enum p_sharing_visibility;
  122365             :           
  122366             : // End of memberFunctionString
  122367             : // Start of memberFunctionString
  122368             : SgOmpClause::upir_data_mapping_enum p_mapping_property;
  122369             :           
  122370             : // End of memberFunctionString
  122371             : // Start of memberFunctionString
  122372             : SgOmpClause::upir_property_visibility_enum p_mapping_visibility;
  122373             :           
  122374             : // End of memberFunctionString
  122375             : // Start of memberFunctionString
  122376             : SgExpression* p_mapper;
  122377             :           
  122378             : // End of memberFunctionString
  122379             : // Start of memberFunctionString
  122380             : SgOmpClause::upir_data_access_enum p_access_property;
  122381             :           
  122382             : // End of memberFunctionString
  122383             : // Start of memberFunctionString
  122384             : SgExpression* p_unit_id;
  122385             :           
  122386             : // End of memberFunctionString
  122387             : // Start of memberFunctionString
  122388             : SgOmpClause::upir_data_distribution_pattern_enum p_distribution_pattern;
  122389             :           
  122390             : // End of memberFunctionString
  122391             : // Start of memberFunctionString
  122392             : std::list<std::list<SgExpression*>> p_section;
  122393             :           
  122394             : // End of memberFunctionString
  122395             : // Start of memberFunctionString
  122396             : SgOmpClause::upir_data_allocator_enum p_allocator;
  122397             :           
  122398             : // End of memberFunctionString
  122399             : // Start of memberFunctionString
  122400             : SgExpression* p_user_defined_allocator;
  122401             :           
  122402             : // End of memberFunctionString
  122403             : // Start of memberFunctionString
  122404             : SgOmpClause::upir_data_deallocator_enum p_deallocator;
  122405             :           
  122406             : // End of memberFunctionString
  122407             : // Start of memberFunctionString
  122408             : SgExpression* p_user_defined_deallocator;
  122409             :           
  122410             : // End of memberFunctionString
  122411             : // Start of memberFunctionString
  122412             : SgExpression* p_memcpy_helper;
  122413             :           
  122414             : // End of memberFunctionString
  122415             : 
  122416             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirDataItemField>;
  122417             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgSymbol*,&SgUpirDataItemField::p_symbol>;
  122418             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_data_sharing_enum,&SgUpirDataItemField::p_sharing_property>;
  122419             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_property_visibility_enum,&SgUpirDataItemField::p_sharing_visibility>;
  122420             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_data_mapping_enum,&SgUpirDataItemField::p_mapping_property>;
  122421             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_property_visibility_enum,&SgUpirDataItemField::p_mapping_visibility>;
  122422             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgExpression*,&SgUpirDataItemField::p_mapper>;
  122423             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_data_access_enum,&SgUpirDataItemField::p_access_property>;
  122424             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgExpression*,&SgUpirDataItemField::p_unit_id>;
  122425             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_data_distribution_pattern_enum,&SgUpirDataItemField::p_distribution_pattern>;
  122426             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, std::list<std::list<SgExpression*>>,&SgUpirDataItemField::p_section>;
  122427             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_data_allocator_enum,&SgUpirDataItemField::p_allocator>;
  122428             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgExpression*,&SgUpirDataItemField::p_user_defined_allocator>;
  122429             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgOmpClause::upir_data_deallocator_enum,&SgUpirDataItemField::p_deallocator>;
  122430             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgExpression*,&SgUpirDataItemField::p_user_defined_deallocator>;
  122431             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirDataItemField, SgExpression*,&SgUpirDataItemField::p_memcpy_helper>;
  122432             : 
  122433             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122434             : 
  122435             : 
  122436             :    };
  122437             : #endif
  122438             : 
  122439             : // postdeclarations for SgUpirDataItemField
  122440             : 
  122441             : /* #line 122442 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122442             : 
  122443             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  122444             : 
  122445             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122446             : 
  122447             : 
  122448             : /* #line 122449 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122449             : 
  122450             : 
  122451             : 
  122452             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122453             : 
  122454             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  122455             : //      This code is automatically generated for each 
  122456             : //      terminal and non-terminal within the defined 
  122457             : //      grammar.  There is a simple way to change the 
  122458             : //      code to fix bugs etc.  See the ROSE README file
  122459             : //      for directions.
  122460             : 
  122461             : // tps: (02/22/2010): Adding DLL export requirements
  122462             : #include "rosedll.h"
  122463             : 
  122464             : // predeclarations for SgLambdaCapture
  122465             : 
  122466             : /* #line 122467 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122467             : 
  122468             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  122469             : 
  122470             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122471             : 
  122472             : #if 1
  122473             : // Class Definition for SgLambdaCapture
  122474             : class ROSE_DLL_API SgLambdaCapture  : public SgLocatedNodeSupport
  122475             :    {
  122476             :      public:
  122477             : 
  122478             : 
  122479             : /* #line 122480 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122480             : 
  122481             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  122482             : // Start of memberFunctionString
  122483             : /* #line 615 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
  122484             : 
  122485             : // DQ (9/3/2014): Adding support for C++11 lambda expresions.
  122486             : 
  122487             : 
  122488             : // End of memberFunctionString
  122489             : // Start of memberFunctionString
  122490             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  122491             : 
  122492             : // *** COMMON CODE SECTION BEGINS HERE ***
  122493             : 
  122494             :     public:
  122495             : 
  122496             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  122497             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  122498             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  122499             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  122500             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  122501             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  122502             : 
  122503             :       /*! \brief returns a string representing the class name */
  122504             :           virtual std::string class_name() const override;
  122505             : 
  122506             :       /*! \brief returns new style SageIII enum values */
  122507             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  122508             : 
  122509             :       /*! \brief static variant value */
  122510             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  122511             :        // static const VariantT static_variant = V_SgLambdaCapture;
  122512             :           enum { static_variant = V_SgLambdaCapture };
  122513             : 
  122514             :        /* the generated cast function */
  122515             :       /*! \brief Casts pointer from base class to derived class */
  122516             :           ROSE_DLL_API friend       SgLambdaCapture* isSgLambdaCapture(       SgNode * s );
  122517             : 
  122518             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  122519             :           ROSE_DLL_API friend const SgLambdaCapture* isSgLambdaCapture( const SgNode * s );
  122520             : 
  122521             :      // ******************************************
  122522             :      // * Memory Pool / New / Delete
  122523             :      // ******************************************
  122524             : 
  122525             :      public:
  122526             :           /// \private
  122527             :           static const unsigned pool_size; //
  122528             :           /// \private
  122529             :           static std::vector<unsigned char *> pools; //
  122530             :           /// \private
  122531             :           static SgLambdaCapture * next_node; // 
  122532             : 
  122533             :           /// \private
  122534             :           static unsigned long initializeStorageClassArray(SgLambdaCaptureStorageClass *); //
  122535             : 
  122536             :           /// \private
  122537             :           static void clearMemoryPool(); //
  122538             :           static void deleteMemoryPool(); //
  122539             : 
  122540             :           /// \private
  122541             :           static void extendMemoryPoolForFileIO(); //
  122542             : 
  122543             :           /// \private
  122544             :           static SgLambdaCapture * getPointerFromGlobalIndex(unsigned long); //
  122545             :           /// \private
  122546             :           static SgLambdaCapture * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  122547             : 
  122548             :           /// \private
  122549             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  122550             :           /// \private
  122551             :           static void resetValidFreepointers(); //
  122552             :           /// \private
  122553             :           static unsigned long getNumberOfLastValidPointer(); //
  122554             : 
  122555             : 
  122556             : #if defined(INLINE_FUNCTIONS)
  122557             :       /*! \brief returns pointer to newly allocated IR node */
  122558             :           inline void *operator new (size_t size);
  122559             : #else
  122560             :       /*! \brief returns pointer to newly allocated IR node */
  122561             :           void *operator new (size_t size);
  122562             : #endif
  122563             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  122564             :           void operator delete (void* pointer, size_t size);
  122565             : 
  122566             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  122567           0 :           void operator delete (void* pointer)
  122568             :              {
  122569             :             // This is the generated delete operator...
  122570           0 :                SgLambdaCapture::operator delete (pointer,sizeof(SgLambdaCapture));
  122571             :              }
  122572             : 
  122573             :       /*! \brief Returns the total number of IR nodes of this type */
  122574             :           static size_t numberOfNodes();
  122575             : 
  122576             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  122577             :           static size_t memoryUsage();
  122578             : 
  122579             :       // End of scope which started in IR nodes specific code 
  122580             :       /* */
  122581             : 
  122582             :       /* name Internal Functions
  122583             :           \brief Internal functions ... incomplete-documentation
  122584             : 
  122585             :           These functions have been made public as part of the design, but they are suggested for internal use 
  122586             :           or by particularly knowledgeable users for specialized tools or applications.
  122587             : 
  122588             :           \internal We could not make these private because they are required by user for special purposes. And 
  122589             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  122590             :          
  122591             :        */
  122592             : 
  122593             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  122594             :        // overridden in every class by *generated* implementation
  122595             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  122596             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  122597             :        // MS: 06/28/02 container of names of variables or container indices 
  122598             :        // used used in the traversal to access AST successor nodes
  122599             :        // overridden in every class by *generated* implementation
  122600             :       /*! \brief container of names of variables or container indices used used in the traversal
  122601             :           to access AST successor nodes overridden in every class by *generated* implementation */
  122602             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  122603             : 
  122604             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  122605             :        // than all the vector copies. The implementation for these functions is generated for each class.
  122606             :       /*! \brief return number of children in the traversal successor list */
  122607             :           virtual size_t get_numberOfTraversalSuccessors() override;
  122608             :       /*! \brief index-based access to traversal successors by index number */
  122609             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  122610             :       /*! \brief index-based access to traversal successors by child node */
  122611             :           virtual size_t get_childIndex(SgNode *child) override;
  122612             : 
  122613             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  122614             :        // MS: 08/16/2002 method for generating RTI information
  122615             :       /*! \brief return C++ Runtime-Time-Information */
  122616             :           virtual RTIReturnType roseRTI() override;
  122617             : #endif
  122618             :       /* */
  122619             : 
  122620             : 
  122621             : 
  122622             :       /* name Deprecated Functions
  122623             :           \brief Deprecated functions ... incomplete-documentation
  122624             : 
  122625             :           These functions have been deprecated from use.
  122626             :        */
  122627             :       /* */
  122628             : 
  122629             :       /*! returns a C style string (char*) representing the class name */
  122630             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  122631             : 
  122632             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  122633             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  122634             : #if 0
  122635             :       /*! returns old style Sage II enum values */
  122636             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  122637             :       /*! returns old style Sage II enum values */
  122638             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  122639             : #endif
  122640             :       /* */
  122641             : 
  122642             : 
  122643             : 
  122644             : 
  122645             :      public:
  122646             :       /* name Traversal Support Functions
  122647             :           \brief Traversal support functions ... incomplete-documentation
  122648             : 
  122649             :           These functions have been made public as part of the design, but they are suggested for internal use 
  122650             :           or by particularly knowledgable users for specialized tools or applications.
  122651             :        */
  122652             :       /* */
  122653             : 
  122654             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  122655             :        // (inferior to ROSE traversal mechanism, experimental).
  122656             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  122657             :        */
  122658             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  122659             : 
  122660             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  122661             :       /*! \brief support for the classic visitor pattern done in GoF */
  122662             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  122663             : 
  122664             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  122665             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  122666             :        */
  122667             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  122668             : 
  122669             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  122670             :        */
  122671             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  122672             : 
  122673             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  122674             :        // This traversal helps support internal tools that call static member functions.
  122675             :        // note: this function operates on the memory pools.
  122676             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  122677             :        */
  122678             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  122679             :       /* */
  122680             : 
  122681             : 
  122682             :      public:
  122683             :       /* name Memory Allocation Functions
  122684             :           \brief Memory allocations functions ... incomplete-documentation
  122685             : 
  122686             :           These functions have been made public as part of the design, but they are suggested for internal use 
  122687             :           or by particularly knowledgable users for specialized tools or applications.
  122688             :        */
  122689             :       /* */
  122690             : 
  122691             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  122692             : 
  122693             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  122694             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  122695             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  122696             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  122697             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  122698             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  122699             :           being used with the AST File I/O mechanism.
  122700             :        */
  122701             :           virtual bool isInMemoryPool() override;
  122702             : 
  122703             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  122704             : 
  122705             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  122706             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  122707             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  122708             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  122709             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  122710             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  122711             :           being used with the AST File I/O mechanism.
  122712             :        */
  122713             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  122714             : 
  122715             :       // DQ (4/30/2006): Modified to be a const function.
  122716             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  122717             : 
  122718             :           This functions is part of general support for many possible tools to operate 
  122719             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  122720             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  122721             :           less than the set of pointers used by the AST file I/O. This is part of
  122722             :           work implemented by Andreas, and support tools such as the AST graph generation.
  122723             : 
  122724             :           \warning This function can return unexpected data members and thus the 
  122725             :                    order and the number of elements is unpredicable and subject 
  122726             :                    to change.
  122727             : 
  122728             :           \returns STL vector of pairs of SgNode* and strings
  122729             :        */
  122730             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  122731             : 
  122732             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  122733             : 
  122734             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  122735             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  122736             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  122737             : 
  122738             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  122739             :                    and subject to change.
  122740             :        */
  122741             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  122742             : 
  122743             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  122744             : 
  122745             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  122746             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  122747             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  122748             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  122749             : 
  122750             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  122751             : 
  122752             :           \returns long
  122753             :        */
  122754             :           virtual long getChildIndex( SgNode* childNode ) const override;
  122755             : 
  122756             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  122757             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  122758             :       /* \brief Constructor for use by AST File I/O Mechanism
  122759             : 
  122760             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  122761             :           which obtained via fast binary file I/O from disk.
  122762             :        */
  122763             :        // SgLambdaCapture( SgLambdaCaptureStorageClass& source );
  122764             : 
  122765             : 
  122766             : 
  122767             : 
  122768             : 
  122769             :  // JH (10/24/2005): methods added to support the ast file IO
  122770             :     private:
  122771             : 
  122772             :       /* name AST Memory Allocation Support Functions
  122773             :           \brief Memory allocations support....
  122774             : 
  122775             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  122776             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  122777             :           and support the AST File I/O Mechanism.
  122778             :        */
  122779             :       /* */
  122780             : 
  122781             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  122782             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  122783             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  122784             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  122785             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  122786             :           a correspinding one in the AST_FILE_IO class!
  122787             :        */
  122788             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  122789             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  122790             :       /* \brief Typedef used for low level memory access.
  122791             :        */
  122792             :        // typedef unsigned char* TestType;
  122793             : 
  122794             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  122795             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  122796             :       /* \brief Typedef used to hold memory addresses as values.
  122797             :        */
  122798             :        // typedef unsigned long  AddressType;
  122799             : 
  122800             : 
  122801             : 
  122802             :        // necessary, to have direct access to the p_freepointer and the private methods !
  122803             :       /*! \brief friend class declaration to support AST File I/O */
  122804             :           friend class AST_FILE_IO;
  122805             : 
  122806             :       /*! \brief friend class declaration to support AST File I/O */
  122807             :           friend class SgLambdaCaptureStorageClass;
  122808             : 
  122809             :       /*! \brief friend class declaration to support AST File I/O */
  122810             :           friend class AstSpecificDataManagingClass;
  122811             : 
  122812             :       /*! \brief friend class declaration to support AST File I/O */
  122813             :           friend class AstSpecificDataManagingClassStorageClass;
  122814             :     public:
  122815             :       /*! \brief IR node constructor to support AST File I/O */
  122816             :           SgLambdaCapture( const SgLambdaCaptureStorageClass& source );
  122817             : 
  122818             :  // private: // JJW hack
  122819             :        /*
  122820             :           name AST Memory Allocation Support Variables
  122821             :           Memory allocations support variables 
  122822             : 
  122823             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  122824             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  122825             :           and support the AST File I/O Mechanism.
  122826             :        */
  122827             :       /* */
  122828             : 
  122829             :     public:
  122830             : 
  122831             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  122832             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  122833             :       // virtual SgNode* addRegExpAttribute();
  122834             :       /*! \brief Support for AST matching using regular expression.
  122835             : 
  122836             :           This support is incomplete and the subject of current research to define 
  122837             :           RegEx trees to support inexact matching.
  122838             :        */
  122839             :           SgLambdaCapture* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  122840             : 
  122841             : // *** COMMON CODE SECTION ENDS HERE ***
  122842             : 
  122843             : 
  122844             : // End of memberFunctionString
  122845             : // Start of memberFunctionString
  122846             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  122847             : 
  122848             :      // the generated cast function
  122849             :      // friend ROSE_DLL_API SgLambdaCapture* isSgLambdaCapture ( SgNode* s );
  122850             : 
  122851             :           typedef SgLocatedNodeSupport base_node_type;
  122852             : 
  122853             : 
  122854             : // End of memberFunctionString
  122855             : 
  122856             :      public: 
  122857             :          SgExpression* get_capture_variable() const;
  122858             :          void set_capture_variable(SgExpression* capture_variable);
  122859             : 
  122860             :      public: 
  122861             :          SgExpression* get_source_closure_variable() const;
  122862             :          void set_source_closure_variable(SgExpression* source_closure_variable);
  122863             : 
  122864             :      public: 
  122865             :          SgExpression* get_closure_variable() const;
  122866             :          void set_closure_variable(SgExpression* closure_variable);
  122867             : 
  122868             :      public: 
  122869             :          bool get_capture_by_reference() const;
  122870             :          void set_capture_by_reference(bool capture_by_reference);
  122871             : 
  122872             :      public: 
  122873             :          bool get_implicit() const;
  122874             :          void set_implicit(bool implicit);
  122875             : 
  122876             :      public: 
  122877             :          bool get_pack_expansion() const;
  122878             :          void set_pack_expansion(bool pack_expansion);
  122879             : 
  122880             : 
  122881             :      public: 
  122882             :          virtual ~SgLambdaCapture();
  122883             : 
  122884             : 
  122885             :      public: 
  122886             :          SgLambdaCapture(Sg_File_Info* startOfConstruct , SgExpression* capture_variable = NULL, SgExpression* source_closure_variable = NULL, SgExpression* closure_variable = NULL, bool capture_by_reference = false, bool implicit = false, bool pack_expansion = false); 
  122887             :          SgLambdaCapture(SgExpression* capture_variable, SgExpression* source_closure_variable, SgExpression* closure_variable, bool capture_by_reference, bool implicit, bool pack_expansion); 
  122888             : 
  122889             :     protected:
  122890             : // Start of memberFunctionString
  122891             : SgExpression* p_capture_variable;
  122892             :           
  122893             : // End of memberFunctionString
  122894             : // Start of memberFunctionString
  122895             : SgExpression* p_source_closure_variable;
  122896             :           
  122897             : // End of memberFunctionString
  122898             : // Start of memberFunctionString
  122899             : SgExpression* p_closure_variable;
  122900             :           
  122901             : // End of memberFunctionString
  122902             : // Start of memberFunctionString
  122903             : bool p_capture_by_reference;
  122904             :           
  122905             : // End of memberFunctionString
  122906             : // Start of memberFunctionString
  122907             : bool p_implicit;
  122908             :           
  122909             : // End of memberFunctionString
  122910             : // Start of memberFunctionString
  122911             : bool p_pack_expansion;
  122912             :           
  122913             : // End of memberFunctionString
  122914             : 
  122915             :     friend struct Rose::Traits::generated::describe_node_t<SgLambdaCapture>;
  122916             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaCapture, SgExpression*,&SgLambdaCapture::p_capture_variable>;
  122917             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaCapture, SgExpression*,&SgLambdaCapture::p_source_closure_variable>;
  122918             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaCapture, SgExpression*,&SgLambdaCapture::p_closure_variable>;
  122919             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaCapture, bool,&SgLambdaCapture::p_capture_by_reference>;
  122920             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaCapture, bool,&SgLambdaCapture::p_implicit>;
  122921             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaCapture, bool,&SgLambdaCapture::p_pack_expansion>;
  122922             : 
  122923             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122924             : 
  122925             : 
  122926             :    };
  122927             : #endif
  122928             : 
  122929             : // postdeclarations for SgLambdaCapture
  122930             : 
  122931             : /* #line 122932 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122932             : 
  122933             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  122934             : 
  122935             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122936             : 
  122937             : 
  122938             : /* #line 122939 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122939             : 
  122940             : 
  122941             : 
  122942             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122943             : 
  122944             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  122945             : //      This code is automatically generated for each 
  122946             : //      terminal and non-terminal within the defined 
  122947             : //      grammar.  There is a simple way to change the 
  122948             : //      code to fix bugs etc.  See the ROSE README file
  122949             : //      for directions.
  122950             : 
  122951             : // tps: (02/22/2010): Adding DLL export requirements
  122952             : #include "rosedll.h"
  122953             : 
  122954             : // predeclarations for SgLambdaCaptureList
  122955             : 
  122956             : /* #line 122957 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122957             : 
  122958             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  122959             : 
  122960             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  122961             : 
  122962             : #if 1
  122963             : // Class Definition for SgLambdaCaptureList
  122964             : class ROSE_DLL_API SgLambdaCaptureList  : public SgLocatedNodeSupport
  122965             :    {
  122966             :      public:
  122967             : 
  122968             : 
  122969             : /* #line 122970 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  122970             : 
  122971             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  122972             : // Start of memberFunctionString
  122973             : /* #line 620 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/LocatedNode.code" */
  122974             : 
  122975             : // DQ (9/3/2014): Adding support for C++11 lambda expresions.
  122976             : 
  122977             : 
  122978             : // End of memberFunctionString
  122979             : // Start of memberFunctionString
  122980             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  122981             : 
  122982             : // *** COMMON CODE SECTION BEGINS HERE ***
  122983             : 
  122984             :     public:
  122985             : 
  122986             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  122987             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  122988             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  122989             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  122990             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  122991             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  122992             : 
  122993             :       /*! \brief returns a string representing the class name */
  122994             :           virtual std::string class_name() const override;
  122995             : 
  122996             :       /*! \brief returns new style SageIII enum values */
  122997             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  122998             : 
  122999             :       /*! \brief static variant value */
  123000             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  123001             :        // static const VariantT static_variant = V_SgLambdaCaptureList;
  123002             :           enum { static_variant = V_SgLambdaCaptureList };
  123003             : 
  123004             :        /* the generated cast function */
  123005             :       /*! \brief Casts pointer from base class to derived class */
  123006             :           ROSE_DLL_API friend       SgLambdaCaptureList* isSgLambdaCaptureList(       SgNode * s );
  123007             : 
  123008             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  123009             :           ROSE_DLL_API friend const SgLambdaCaptureList* isSgLambdaCaptureList( const SgNode * s );
  123010             : 
  123011             :      // ******************************************
  123012             :      // * Memory Pool / New / Delete
  123013             :      // ******************************************
  123014             : 
  123015             :      public:
  123016             :           /// \private
  123017             :           static const unsigned pool_size; //
  123018             :           /// \private
  123019             :           static std::vector<unsigned char *> pools; //
  123020             :           /// \private
  123021             :           static SgLambdaCaptureList * next_node; // 
  123022             : 
  123023             :           /// \private
  123024             :           static unsigned long initializeStorageClassArray(SgLambdaCaptureListStorageClass *); //
  123025             : 
  123026             :           /// \private
  123027             :           static void clearMemoryPool(); //
  123028             :           static void deleteMemoryPool(); //
  123029             : 
  123030             :           /// \private
  123031             :           static void extendMemoryPoolForFileIO(); //
  123032             : 
  123033             :           /// \private
  123034             :           static SgLambdaCaptureList * getPointerFromGlobalIndex(unsigned long); //
  123035             :           /// \private
  123036             :           static SgLambdaCaptureList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  123037             : 
  123038             :           /// \private
  123039             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  123040             :           /// \private
  123041             :           static void resetValidFreepointers(); //
  123042             :           /// \private
  123043             :           static unsigned long getNumberOfLastValidPointer(); //
  123044             : 
  123045             : 
  123046             : #if defined(INLINE_FUNCTIONS)
  123047             :       /*! \brief returns pointer to newly allocated IR node */
  123048             :           inline void *operator new (size_t size);
  123049             : #else
  123050             :       /*! \brief returns pointer to newly allocated IR node */
  123051             :           void *operator new (size_t size);
  123052             : #endif
  123053             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  123054             :           void operator delete (void* pointer, size_t size);
  123055             : 
  123056             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  123057           0 :           void operator delete (void* pointer)
  123058             :              {
  123059             :             // This is the generated delete operator...
  123060           0 :                SgLambdaCaptureList::operator delete (pointer,sizeof(SgLambdaCaptureList));
  123061             :              }
  123062             : 
  123063             :       /*! \brief Returns the total number of IR nodes of this type */
  123064             :           static size_t numberOfNodes();
  123065             : 
  123066             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  123067             :           static size_t memoryUsage();
  123068             : 
  123069             :       // End of scope which started in IR nodes specific code 
  123070             :       /* */
  123071             : 
  123072             :       /* name Internal Functions
  123073             :           \brief Internal functions ... incomplete-documentation
  123074             : 
  123075             :           These functions have been made public as part of the design, but they are suggested for internal use 
  123076             :           or by particularly knowledgeable users for specialized tools or applications.
  123077             : 
  123078             :           \internal We could not make these private because they are required by user for special purposes. And 
  123079             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  123080             :          
  123081             :        */
  123082             : 
  123083             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  123084             :        // overridden in every class by *generated* implementation
  123085             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  123086             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  123087             :        // MS: 06/28/02 container of names of variables or container indices 
  123088             :        // used used in the traversal to access AST successor nodes
  123089             :        // overridden in every class by *generated* implementation
  123090             :       /*! \brief container of names of variables or container indices used used in the traversal
  123091             :           to access AST successor nodes overridden in every class by *generated* implementation */
  123092             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  123093             : 
  123094             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  123095             :        // than all the vector copies. The implementation for these functions is generated for each class.
  123096             :       /*! \brief return number of children in the traversal successor list */
  123097             :           virtual size_t get_numberOfTraversalSuccessors() override;
  123098             :       /*! \brief index-based access to traversal successors by index number */
  123099             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  123100             :       /*! \brief index-based access to traversal successors by child node */
  123101             :           virtual size_t get_childIndex(SgNode *child) override;
  123102             : 
  123103             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  123104             :        // MS: 08/16/2002 method for generating RTI information
  123105             :       /*! \brief return C++ Runtime-Time-Information */
  123106             :           virtual RTIReturnType roseRTI() override;
  123107             : #endif
  123108             :       /* */
  123109             : 
  123110             : 
  123111             : 
  123112             :       /* name Deprecated Functions
  123113             :           \brief Deprecated functions ... incomplete-documentation
  123114             : 
  123115             :           These functions have been deprecated from use.
  123116             :        */
  123117             :       /* */
  123118             : 
  123119             :       /*! returns a C style string (char*) representing the class name */
  123120             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  123121             : 
  123122             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  123123             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  123124             : #if 0
  123125             :       /*! returns old style Sage II enum values */
  123126             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  123127             :       /*! returns old style Sage II enum values */
  123128             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  123129             : #endif
  123130             :       /* */
  123131             : 
  123132             : 
  123133             : 
  123134             : 
  123135             :      public:
  123136             :       /* name Traversal Support Functions
  123137             :           \brief Traversal support functions ... incomplete-documentation
  123138             : 
  123139             :           These functions have been made public as part of the design, but they are suggested for internal use 
  123140             :           or by particularly knowledgable users for specialized tools or applications.
  123141             :        */
  123142             :       /* */
  123143             : 
  123144             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  123145             :        // (inferior to ROSE traversal mechanism, experimental).
  123146             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  123147             :        */
  123148             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  123149             : 
  123150             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  123151             :       /*! \brief support for the classic visitor pattern done in GoF */
  123152             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  123153             : 
  123154             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  123155             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  123156             :        */
  123157             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  123158             : 
  123159             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  123160             :        */
  123161             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  123162             : 
  123163             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  123164             :        // This traversal helps support internal tools that call static member functions.
  123165             :        // note: this function operates on the memory pools.
  123166             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  123167             :        */
  123168             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  123169             :       /* */
  123170             : 
  123171             : 
  123172             :      public:
  123173             :       /* name Memory Allocation Functions
  123174             :           \brief Memory allocations functions ... incomplete-documentation
  123175             : 
  123176             :           These functions have been made public as part of the design, but they are suggested for internal use 
  123177             :           or by particularly knowledgable users for specialized tools or applications.
  123178             :        */
  123179             :       /* */
  123180             : 
  123181             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  123182             : 
  123183             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  123184             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  123185             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  123186             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  123187             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  123188             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  123189             :           being used with the AST File I/O mechanism.
  123190             :        */
  123191             :           virtual bool isInMemoryPool() override;
  123192             : 
  123193             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  123194             : 
  123195             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  123196             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  123197             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  123198             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  123199             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  123200             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  123201             :           being used with the AST File I/O mechanism.
  123202             :        */
  123203             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  123204             : 
  123205             :       // DQ (4/30/2006): Modified to be a const function.
  123206             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  123207             : 
  123208             :           This functions is part of general support for many possible tools to operate 
  123209             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  123210             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  123211             :           less than the set of pointers used by the AST file I/O. This is part of
  123212             :           work implemented by Andreas, and support tools such as the AST graph generation.
  123213             : 
  123214             :           \warning This function can return unexpected data members and thus the 
  123215             :                    order and the number of elements is unpredicable and subject 
  123216             :                    to change.
  123217             : 
  123218             :           \returns STL vector of pairs of SgNode* and strings
  123219             :        */
  123220             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  123221             : 
  123222             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  123223             : 
  123224             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  123225             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  123226             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  123227             : 
  123228             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  123229             :                    and subject to change.
  123230             :        */
  123231             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  123232             : 
  123233             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  123234             : 
  123235             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  123236             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  123237             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  123238             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  123239             : 
  123240             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  123241             : 
  123242             :           \returns long
  123243             :        */
  123244             :           virtual long getChildIndex( SgNode* childNode ) const override;
  123245             : 
  123246             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  123247             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  123248             :       /* \brief Constructor for use by AST File I/O Mechanism
  123249             : 
  123250             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  123251             :           which obtained via fast binary file I/O from disk.
  123252             :        */
  123253             :        // SgLambdaCaptureList( SgLambdaCaptureListStorageClass& source );
  123254             : 
  123255             : 
  123256             : 
  123257             : 
  123258             : 
  123259             :  // JH (10/24/2005): methods added to support the ast file IO
  123260             :     private:
  123261             : 
  123262             :       /* name AST Memory Allocation Support Functions
  123263             :           \brief Memory allocations support....
  123264             : 
  123265             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  123266             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  123267             :           and support the AST File I/O Mechanism.
  123268             :        */
  123269             :       /* */
  123270             : 
  123271             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  123272             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  123273             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  123274             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  123275             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  123276             :           a correspinding one in the AST_FILE_IO class!
  123277             :        */
  123278             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  123279             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  123280             :       /* \brief Typedef used for low level memory access.
  123281             :        */
  123282             :        // typedef unsigned char* TestType;
  123283             : 
  123284             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  123285             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  123286             :       /* \brief Typedef used to hold memory addresses as values.
  123287             :        */
  123288             :        // typedef unsigned long  AddressType;
  123289             : 
  123290             : 
  123291             : 
  123292             :        // necessary, to have direct access to the p_freepointer and the private methods !
  123293             :       /*! \brief friend class declaration to support AST File I/O */
  123294             :           friend class AST_FILE_IO;
  123295             : 
  123296             :       /*! \brief friend class declaration to support AST File I/O */
  123297             :           friend class SgLambdaCaptureListStorageClass;
  123298             : 
  123299             :       /*! \brief friend class declaration to support AST File I/O */
  123300             :           friend class AstSpecificDataManagingClass;
  123301             : 
  123302             :       /*! \brief friend class declaration to support AST File I/O */
  123303             :           friend class AstSpecificDataManagingClassStorageClass;
  123304             :     public:
  123305             :       /*! \brief IR node constructor to support AST File I/O */
  123306             :           SgLambdaCaptureList( const SgLambdaCaptureListStorageClass& source );
  123307             : 
  123308             :  // private: // JJW hack
  123309             :        /*
  123310             :           name AST Memory Allocation Support Variables
  123311             :           Memory allocations support variables 
  123312             : 
  123313             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  123314             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  123315             :           and support the AST File I/O Mechanism.
  123316             :        */
  123317             :       /* */
  123318             : 
  123319             :     public:
  123320             : 
  123321             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  123322             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  123323             :       // virtual SgNode* addRegExpAttribute();
  123324             :       /*! \brief Support for AST matching using regular expression.
  123325             : 
  123326             :           This support is incomplete and the subject of current research to define 
  123327             :           RegEx trees to support inexact matching.
  123328             :        */
  123329             :           SgLambdaCaptureList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  123330             : 
  123331             : // *** COMMON CODE SECTION ENDS HERE ***
  123332             : 
  123333             : 
  123334             : // End of memberFunctionString
  123335             : // Start of memberFunctionString
  123336             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  123337             : 
  123338             :      // the generated cast function
  123339             :      // friend ROSE_DLL_API SgLambdaCaptureList* isSgLambdaCaptureList ( SgNode* s );
  123340             : 
  123341             :           typedef SgLocatedNodeSupport base_node_type;
  123342             : 
  123343             : 
  123344             : // End of memberFunctionString
  123345             : 
  123346             :      public: 
  123347             :          const SgLambdaCapturePtrList&  get_capture_list() const;
  123348             :          SgLambdaCapturePtrList& get_capture_list(); 
  123349             : 
  123350             : 
  123351             :      public: 
  123352             :          virtual ~SgLambdaCaptureList();
  123353             : 
  123354             : 
  123355             :      public: 
  123356             :          SgLambdaCaptureList(Sg_File_Info* startOfConstruct ); 
  123357             :          SgLambdaCaptureList(); 
  123358             : 
  123359             :     protected:
  123360             : // Start of memberFunctionString
  123361             : SgLambdaCapturePtrList p_capture_list;
  123362             :           
  123363             : // End of memberFunctionString
  123364             : 
  123365             :     friend struct Rose::Traits::generated::describe_node_t<SgLambdaCaptureList>;
  123366             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaCaptureList, SgLambdaCapturePtrList,&SgLambdaCaptureList::p_capture_list>;
  123367             : 
  123368             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  123369             : 
  123370             : 
  123371             :    };
  123372             : #endif
  123373             : 
  123374             : // postdeclarations for SgLambdaCaptureList
  123375             : 
  123376             : /* #line 123377 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  123377             : 
  123378             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  123379             : 
  123380             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  123381             : 
  123382             : 
  123383             : /* #line 123384 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  123384             : 
  123385             : 
  123386             : 
  123387             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  123388             : 
  123389             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  123390             : //      This code is automatically generated for each 
  123391             : //      terminal and non-terminal within the defined 
  123392             : //      grammar.  There is a simple way to change the 
  123393             : //      code to fix bugs etc.  See the ROSE README file
  123394             : //      for directions.
  123395             : 
  123396             : // tps: (02/22/2010): Adding DLL export requirements
  123397             : #include "rosedll.h"
  123398             : 
  123399             : // predeclarations for SgStatement
  123400             : 
  123401             : /* #line 123402 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  123402             : 
  123403             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  123404             : 
  123405             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  123406             : 
  123407             : #if 1
  123408             : // Class Definition for SgStatement
  123409             : class ROSE_DLL_API SgStatement  : public SgLocatedNode
  123410             :    {
  123411             :      public:
  123412             : 
  123413             : 
  123414             : /* #line 123415 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  123415             : 
  123416             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  123417             : // Start of memberFunctionString
  123418             : /* #line 7 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  123419             : 
  123420             :      public:
  123421             :        // DQ (8/19/2004): Remove old attribute mechanism
  123422             :        // void output_pragma(ostream& os);
  123423             :        // void set_pragma();
  123424             : 
  123425             :        // DQ (11/17/2004): Make this a virtual function since we have several different implementations
  123426             :        // (e.g. where the scope is stored explicitly) Effected declarations:
  123427             :        //     class declarations (and derived classes (e.g. template instantiation declarations)
  123428             :        //     template declarations (which covers all forms of template declarations for classes, functions, and member functions)
  123429             :        //     function declarations (including member functions, template functions and template member functions)
  123430             :        //     variable declarations
  123431             :           virtual SgScopeStatement *get_scope(void) const;
  123432             : 
  123433             :           virtual void setExtern() ROSE_DEPRECATED_FUNCTION;
  123434             :           virtual void setStatic() ROSE_DEPRECATED_FUNCTION;
  123435             : 
  123436             :       protected:
  123437             :           virtual bool replace_child(SgStatement *target,SgStatement * newStmt, bool extractListFromBasicBlock = false);
  123438             :           virtual bool insert_child(SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false);
  123439             : 
  123440             :        public:
  123441             : 
  123442             :       /*
  123443             :           name Low-Level Rewrite Support
  123444             :           \brief Support for mutation of the AST.
  123445             : 
  123446             :           This is the lowest level of support for the mutation of the AST.  From these
  123447             :           primitives we have built more sophisticated mechanisms which are simpler to
  123448             :           use and which automate many details (not handled within these functions):
  123449             :              -# Preservation of attached comments
  123450             :              -# Marking new IR nodes with correct file info position objects
  123451             :                 (often just the specification of the new code as a transformation).
  123452             :              -# ...\n
  123453             : 
  123454             :           Higher level mechanism for the manipulation of the AST are available in the
  123455             :           \ref ASTRewriteMechanism. These higher-level interfaces simplify the
  123456             :           manipulation of the AST.
  123457             : 
  123458             :           \internal Need to document this section more fully.
  123459             :        */
  123460             : 
  123461             :           /*!
  123462             :              \brief This function inserts a single statement at the position indicated by target.
  123463             : 
  123464             :              This function handles the insertion of the specified statement at the target location.
  123465             :              The boolean variable specifies if the new statement is inserted before or after the target
  123466             :              statement.
  123467             : 
  123468             :              \param target - location in the AST where new statement is to be inserted.
  123469             :              \param newstmt - New statement to be placed into the AST.
  123470             :              \param inFront - if true the new statement is inserted before the target statement, else
  123471             :                               the new statement is inserted after the target statement (default = true).
  123472             :              \return Function returns void.
  123473             :           */
  123474             :           void insert_statement(SgStatement* target, SgStatement* newstmt, bool inFront = true);
  123475             :           /*!
  123476             :              \brief This function inserts a list of statements at the position indicated by target.
  123477             : 
  123478             :              This function handles the insertion of a list of statements at the target location.
  123479             :              The boolean variable specifies if the new statements are inserted before or after the target
  123480             :              statement.
  123481             : 
  123482             :              \param target - location in the AST where new statements are to be inserted.
  123483             :              \param newstmt - List of new statements to be placed into the AST.
  123484             :              \param inFront - if true the new statements are inserted before the target statement, else
  123485             :                               the new statements are inserted after the target statement (default = true).
  123486             :              \return Function returns void.
  123487             :           */
  123488             :           void insert_statement(SgStatement* target, const SgStatementPtrList& newstmtList, bool inFront = true);
  123489             :          /*!
  123490             :              \brief This function replaces the target statement with a single statement.
  123491             : 
  123492             :              This function handles the replacement of the specified target statement with a new statement.
  123493             : 
  123494             :              \param target - location of the statement to be replaced.
  123495             :              \param newstmt - New statement to replace target statement in the AST.
  123496             :              \return Function returns void.
  123497             :           */
  123498             :            void replace_statement(SgStatement* target, SgStatement* newstmt);
  123499             :           /*!
  123500             :              \brief This function replaces the target statement with a list of statements.
  123501             : 
  123502             :              This function handles the replacement of the specified target statement with
  123503             :              a list of statements at the target location.
  123504             : 
  123505             :              \param target - location of the statement to be replaced.
  123506             :              \param newstmt - List of new statements to replace the target statement in the AST.
  123507             :              \return Function returns void.
  123508             :           */
  123509             :            void replace_statement(SgStatement* target, const SgStatementPtrList& newstmtList);
  123510             :          /*!
  123511             :              \brief This function removes the target statement from the AST.
  123512             : 
  123513             :              This function handles the removal of the target statement from the AST.
  123514             :              Any comments or C preprocessor directives associated with the statement
  123515             :              are also removed.  This is a low level primitive for higher level functions
  123516             :              (in the higher level interfaces) which take care to preserve such attributes.
  123517             : 
  123518             :              \param target - location of the statement to be removed.
  123519             :              \return Function returns void.
  123520             :           */
  123521             :            void remove_statement(SgStatement *);
  123522             : 
  123523             :           /*!
  123524             :              \brief This function inserts a statement at the position indicated by target.
  123525             :              If newstmt is a basicBlock, statements inside newstmt are extracted and then inserted.
  123526             : 
  123527             :              This function handles the insertion of the specified statement at the target location.
  123528             :              The boolean variable specifies if the new statement is inserted before or after the target
  123529             :              statement.  This function has somewhat unusual semantics.
  123530             : 
  123531             :              \internal This function is low level support (only used by Qing)
  123532             : 
  123533             :              \param target - location in the AST where new statement is to be inserted.
  123534             :              \param newstmt - New statement to be placed into the AST.
  123535             :              \param inFront - if true the new statement is inserted before the target statement, else
  123536             :                               the new statement is inserted after the target statement (default = true).
  123537             :              \return Function returns void.
  123538             : 
  123539             :              \deprecated This function is used only in Qing's code and not clearly a part of the preferred interface.
  123540             :           */
  123541             :           void insert_statement_from_basicBlock(SgStatement* target, SgStatement* newstmt, bool inFront = true);
  123542             : 
  123543             :           /*!
  123544             :              \brief This function replaces the target statement with a new statement.
  123545             :              If newstmt is a basicBlock, statements inside newstmt are extracted and then inserted.
  123546             : 
  123547             :              This function handles the replacement of the target statement with the new statement.
  123548             :              This function has somewhat unusual semantics.
  123549             : 
  123550             :              \internal This function is low level support (only used by Qing)
  123551             : 
  123552             :              \param target - statement in AST to be replaced..
  123553             :              \param newstmt - New statement to be placed into the AST.
  123554             :              \return Function returns void.
  123555             : 
  123556             :              \deprecated This function is used only in Qing's code and not clearly a part of the preferred interface.
  123557             :           */
  123558             :           void replace_statement_from_basicBlock(SgStatement* target, SgStatement* newstmt);
  123559             : 
  123560             :        // DQ (12/6/2006): Added to support general replace functions (used in statements that
  123561             :        // directly contain SgExpression IR nodes, e.g. SgForStatement's increment expression).
  123562             :           /*!
  123563             :              \brief support general replace functions, used in statements that directly contain SgExpression IR nodes.
  123564             :           */
  123565             :           virtual int replace_expression(SgExpression* original_expression, SgExpression* new_expression );
  123566             : 
  123567             :        /* */
  123568             : 
  123569             :       // DQ (12/5/2004): Support for setting explicit scopes (where stored explicitly).
  123570             :       //! Support for setting scopes (only meaningful on IR statements that store the scope explicitly).
  123571             :           virtual void set_scope ( SgScopeStatement* newScope );
  123572             : 
  123573             :       //! Support for where the scope is explicitly required
  123574             :           virtual bool hasExplicitScope() const;
  123575             : 
  123576             :       // DQ (2/6/2007): Added support for getting the symbol from the declaration (I think that Beata ask for this at some point).
  123577             :       //! Get the associated symbol from the symbol table in the stored scope
  123578             :           virtual SgSymbol* get_symbol_from_symbol_table() const;
  123579             : 
  123580             : #if 0
  123581             :        // Commented out by Dan Quinlan (while we worry about other main-line features)
  123582             :           void set_purecc();
  123583             :           void unset_purecc();
  123584             :           int get_is_purecc() const;
  123585             :           void add_pragma(int cnt, SgPragma** plist);
  123586             :           SgPragma* add_pragma(char *nm) ;
  123587             :           SgPragma* get_pragma(char *nm) const;
  123588             :           int remove_pragma(char *nm) ;
  123589             : 
  123590             :        // get attribute,
  123591             :           SgAttribute* get_user_attribute(char *nm) const;
  123592             :           SgAttribute* add_user_attribute(char *nm,SgAttribute *attr);
  123593             :           int remove_user_attribute(char *nm);
  123594             : #endif
  123595             : 
  123596             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  123597             :        // Overriding SgNode versions of these
  123598             :           virtual unsigned int cfgIndexForEnd() const override;
  123599             :           virtual bool cfgIsIndexInteresting(unsigned int index) const override;
  123600             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  123601             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  123602             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  123603             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  123604             : #endif
  123605             : 
  123606             :        // get lvalue
  123607             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const; // INTERNAL
  123608             : 
  123609             : #if ALT_FIXUP_COPY
  123610             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  123611             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  123612             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  123613             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  123614             : #else
  123615             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  123616             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  123617             : #endif
  123618             : 
  123619             :        // DQ (12/16/2007): Added virtual function so that we could set the end_numeric_label on all relevant Fortran constructs
  123620             :        // virtual void set_end_numeric_label(SgLabelSymbol* end_numeric_label);
  123621             :           virtual void set_end_numeric_label(SgLabelRefExp* end_numeric_label);
  123622             : 
  123623             :        // Report if a construct has a concept of end_numeric_label
  123624             :           virtual bool has_end_numeric_label() const;
  123625             : 
  123626             :       /*! \brief Some statement store internal SgType pointers explicitly.  This function is true if it has a data member that is a type (only applies to SgTypedefDeclaration).
  123627             : 
  123628             :           Result is true if it stores a type explicitly as a data member, else false.
  123629             : 
  123630             :           \internal True only if this is a SgTypedefDeclaration.
  123631             :        */
  123632             :           bool hasExplicitType();
  123633             : 
  123634             : 
  123635             : 
  123636             : // End of memberFunctionString
  123637             : // Start of memberFunctionString
  123638             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  123639             : 
  123640             :           void post_construction_initialization() override;
  123641             : 
  123642             : 
  123643             : // End of memberFunctionString
  123644             : // Start of memberFunctionString
  123645             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  123646             : 
  123647             : // *** COMMON CODE SECTION BEGINS HERE ***
  123648             : 
  123649             :     public:
  123650             : 
  123651             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  123652             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  123653             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  123654             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  123655             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  123656             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  123657             : 
  123658             :       /*! \brief returns a string representing the class name */
  123659             :           virtual std::string class_name() const override;
  123660             : 
  123661             :       /*! \brief returns new style SageIII enum values */
  123662             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  123663             : 
  123664             :       /*! \brief static variant value */
  123665             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  123666             :        // static const VariantT static_variant = V_SgStatement;
  123667             :           enum { static_variant = V_SgStatement };
  123668             : 
  123669             :        /* the generated cast function */
  123670             :       /*! \brief Casts pointer from base class to derived class */
  123671             :           ROSE_DLL_API friend       SgStatement* isSgStatement(       SgNode * s );
  123672             : 
  123673             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  123674             :           ROSE_DLL_API friend const SgStatement* isSgStatement( const SgNode * s );
  123675             : 
  123676             :      // ******************************************
  123677             :      // * Memory Pool / New / Delete
  123678             :      // ******************************************
  123679             : 
  123680             :      public:
  123681             :           /// \private
  123682             :           static const unsigned pool_size; //
  123683             :           /// \private
  123684             :           static std::vector<unsigned char *> pools; //
  123685             :           /// \private
  123686             :           static SgStatement * next_node; // 
  123687             : 
  123688             :           /// \private
  123689             :           static unsigned long initializeStorageClassArray(SgStatementStorageClass *); //
  123690             : 
  123691             :           /// \private
  123692             :           static void clearMemoryPool(); //
  123693             :           static void deleteMemoryPool(); //
  123694             : 
  123695             :           /// \private
  123696             :           static void extendMemoryPoolForFileIO(); //
  123697             : 
  123698             :           /// \private
  123699             :           static SgStatement * getPointerFromGlobalIndex(unsigned long); //
  123700             :           /// \private
  123701             :           static SgStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  123702             : 
  123703             :           /// \private
  123704             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  123705             :           /// \private
  123706             :           static void resetValidFreepointers(); //
  123707             :           /// \private
  123708             :           static unsigned long getNumberOfLastValidPointer(); //
  123709             : 
  123710             : 
  123711             : #if defined(INLINE_FUNCTIONS)
  123712             :       /*! \brief returns pointer to newly allocated IR node */
  123713             :           inline void *operator new (size_t size);
  123714             : #else
  123715             :       /*! \brief returns pointer to newly allocated IR node */
  123716             :           void *operator new (size_t size);
  123717             : #endif
  123718             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  123719             :           void operator delete (void* pointer, size_t size);
  123720             : 
  123721             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  123722           0 :           void operator delete (void* pointer)
  123723             :              {
  123724             :             // This is the generated delete operator...
  123725           0 :                SgStatement::operator delete (pointer,sizeof(SgStatement));
  123726             :              }
  123727             : 
  123728             :       /*! \brief Returns the total number of IR nodes of this type */
  123729             :           static size_t numberOfNodes();
  123730             : 
  123731             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  123732             :           static size_t memoryUsage();
  123733             : 
  123734             :       // End of scope which started in IR nodes specific code 
  123735             :       /* */
  123736             : 
  123737             :       /* name Internal Functions
  123738             :           \brief Internal functions ... incomplete-documentation
  123739             : 
  123740             :           These functions have been made public as part of the design, but they are suggested for internal use 
  123741             :           or by particularly knowledgeable users for specialized tools or applications.
  123742             : 
  123743             :           \internal We could not make these private because they are required by user for special purposes. And 
  123744             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  123745             :          
  123746             :        */
  123747             : 
  123748             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  123749             :        // overridden in every class by *generated* implementation
  123750             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  123751             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  123752             :        // MS: 06/28/02 container of names of variables or container indices 
  123753             :        // used used in the traversal to access AST successor nodes
  123754             :        // overridden in every class by *generated* implementation
  123755             :       /*! \brief container of names of variables or container indices used used in the traversal
  123756             :           to access AST successor nodes overridden in every class by *generated* implementation */
  123757             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  123758             : 
  123759             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  123760             :        // than all the vector copies. The implementation for these functions is generated for each class.
  123761             :       /*! \brief return number of children in the traversal successor list */
  123762             :           virtual size_t get_numberOfTraversalSuccessors() override;
  123763             :       /*! \brief index-based access to traversal successors by index number */
  123764             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  123765             :       /*! \brief index-based access to traversal successors by child node */
  123766             :           virtual size_t get_childIndex(SgNode *child) override;
  123767             : 
  123768             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  123769             :        // MS: 08/16/2002 method for generating RTI information
  123770             :       /*! \brief return C++ Runtime-Time-Information */
  123771             :           virtual RTIReturnType roseRTI() override;
  123772             : #endif
  123773             :       /* */
  123774             : 
  123775             : 
  123776             : 
  123777             :       /* name Deprecated Functions
  123778             :           \brief Deprecated functions ... incomplete-documentation
  123779             : 
  123780             :           These functions have been deprecated from use.
  123781             :        */
  123782             :       /* */
  123783             : 
  123784             :       /*! returns a C style string (char*) representing the class name */
  123785             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  123786             : 
  123787             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  123788             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  123789             : #if 0
  123790             :       /*! returns old style Sage II enum values */
  123791             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  123792             :       /*! returns old style Sage II enum values */
  123793             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  123794             : #endif
  123795             :       /* */
  123796             : 
  123797             : 
  123798             : 
  123799             : 
  123800             :      public:
  123801             :       /* name Traversal Support Functions
  123802             :           \brief Traversal support functions ... incomplete-documentation
  123803             : 
  123804             :           These functions have been made public as part of the design, but they are suggested for internal use 
  123805             :           or by particularly knowledgable users for specialized tools or applications.
  123806             :        */
  123807             :       /* */
  123808             : 
  123809             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  123810             :        // (inferior to ROSE traversal mechanism, experimental).
  123811             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  123812             :        */
  123813             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  123814             : 
  123815             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  123816             :       /*! \brief support for the classic visitor pattern done in GoF */
  123817             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  123818             : 
  123819             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  123820             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  123821             :        */
  123822             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  123823             : 
  123824             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  123825             :        */
  123826             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  123827             : 
  123828             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  123829             :        // This traversal helps support internal tools that call static member functions.
  123830             :        // note: this function operates on the memory pools.
  123831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  123832             :        */
  123833             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  123834             :       /* */
  123835             : 
  123836             : 
  123837             :      public:
  123838             :       /* name Memory Allocation Functions
  123839             :           \brief Memory allocations functions ... incomplete-documentation
  123840             : 
  123841             :           These functions have been made public as part of the design, but they are suggested for internal use 
  123842             :           or by particularly knowledgable users for specialized tools or applications.
  123843             :        */
  123844             :       /* */
  123845             : 
  123846             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  123847             : 
  123848             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  123849             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  123850             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  123851             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  123852             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  123853             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  123854             :           being used with the AST File I/O mechanism.
  123855             :        */
  123856             :           virtual bool isInMemoryPool() override;
  123857             : 
  123858             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  123859             : 
  123860             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  123861             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  123862             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  123863             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  123864             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  123865             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  123866             :           being used with the AST File I/O mechanism.
  123867             :        */
  123868             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  123869             : 
  123870             :       // DQ (4/30/2006): Modified to be a const function.
  123871             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  123872             : 
  123873             :           This functions is part of general support for many possible tools to operate 
  123874             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  123875             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  123876             :           less than the set of pointers used by the AST file I/O. This is part of
  123877             :           work implemented by Andreas, and support tools such as the AST graph generation.
  123878             : 
  123879             :           \warning This function can return unexpected data members and thus the 
  123880             :                    order and the number of elements is unpredicable and subject 
  123881             :                    to change.
  123882             : 
  123883             :           \returns STL vector of pairs of SgNode* and strings
  123884             :        */
  123885             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  123886             : 
  123887             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  123888             : 
  123889             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  123890             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  123891             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  123892             : 
  123893             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  123894             :                    and subject to change.
  123895             :        */
  123896             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  123897             : 
  123898             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  123899             : 
  123900             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  123901             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  123902             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  123903             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  123904             : 
  123905             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  123906             : 
  123907             :           \returns long
  123908             :        */
  123909             :           virtual long getChildIndex( SgNode* childNode ) const override;
  123910             : 
  123911             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  123912             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  123913             :       /* \brief Constructor for use by AST File I/O Mechanism
  123914             : 
  123915             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  123916             :           which obtained via fast binary file I/O from disk.
  123917             :        */
  123918             :        // SgStatement( SgStatementStorageClass& source );
  123919             : 
  123920             : 
  123921             : 
  123922             : 
  123923             : 
  123924             :  // JH (10/24/2005): methods added to support the ast file IO
  123925             :     private:
  123926             : 
  123927             :       /* name AST Memory Allocation Support Functions
  123928             :           \brief Memory allocations support....
  123929             : 
  123930             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  123931             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  123932             :           and support the AST File I/O Mechanism.
  123933             :        */
  123934             :       /* */
  123935             : 
  123936             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  123937             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  123938             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  123939             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  123940             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  123941             :           a correspinding one in the AST_FILE_IO class!
  123942             :        */
  123943             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  123944             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  123945             :       /* \brief Typedef used for low level memory access.
  123946             :        */
  123947             :        // typedef unsigned char* TestType;
  123948             : 
  123949             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  123950             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  123951             :       /* \brief Typedef used to hold memory addresses as values.
  123952             :        */
  123953             :        // typedef unsigned long  AddressType;
  123954             : 
  123955             : 
  123956             : 
  123957             :        // necessary, to have direct access to the p_freepointer and the private methods !
  123958             :       /*! \brief friend class declaration to support AST File I/O */
  123959             :           friend class AST_FILE_IO;
  123960             : 
  123961             :       /*! \brief friend class declaration to support AST File I/O */
  123962             :           friend class SgStatementStorageClass;
  123963             : 
  123964             :       /*! \brief friend class declaration to support AST File I/O */
  123965             :           friend class AstSpecificDataManagingClass;
  123966             : 
  123967             :       /*! \brief friend class declaration to support AST File I/O */
  123968             :           friend class AstSpecificDataManagingClassStorageClass;
  123969             :     public:
  123970             :       /*! \brief IR node constructor to support AST File I/O */
  123971             :           SgStatement( const SgStatementStorageClass& source );
  123972             : 
  123973             :  // private: // JJW hack
  123974             :        /*
  123975             :           name AST Memory Allocation Support Variables
  123976             :           Memory allocations support variables 
  123977             : 
  123978             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  123979             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  123980             :           and support the AST File I/O Mechanism.
  123981             :        */
  123982             :       /* */
  123983             : 
  123984             :     public:
  123985             : 
  123986             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  123987             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  123988             :       // virtual SgNode* addRegExpAttribute();
  123989             :       /*! \brief Support for AST matching using regular expression.
  123990             : 
  123991             :           This support is incomplete and the subject of current research to define 
  123992             :           RegEx trees to support inexact matching.
  123993             :        */
  123994             :           SgStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  123995             : 
  123996             : // *** COMMON CODE SECTION ENDS HERE ***
  123997             : 
  123998             : 
  123999             : // End of memberFunctionString
  124000             : // Start of memberFunctionString
  124001             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  124002             : 
  124003             :      // the generated cast function
  124004             :      // friend ROSE_DLL_API SgStatement* isSgStatement ( SgNode* s );
  124005             : 
  124006             :           typedef SgLocatedNode base_node_type;
  124007             : 
  124008             : 
  124009             : // End of memberFunctionString
  124010             : 
  124011             :      public: 
  124012             :          SgLabelRefExp* get_numeric_label() const;
  124013             :          void set_numeric_label(SgLabelRefExp* numeric_label);
  124014             : 
  124015             :      public: 
  124016             :          int get_source_sequence_value() const;
  124017             :          void set_source_sequence_value(int source_sequence_value);
  124018             : 
  124019             : 
  124020             :      public: 
  124021             :          virtual ~SgStatement();
  124022             : 
  124023             : 
  124024             :      public: 
  124025             :          SgStatement(Sg_File_Info* startOfConstruct ); 
  124026             :          SgStatement(); 
  124027             : 
  124028             :     protected:
  124029             : // Start of memberFunctionString
  124030             : SgLabelRefExp* p_numeric_label;
  124031             :           
  124032             : // End of memberFunctionString
  124033             : // Start of memberFunctionString
  124034             : int p_source_sequence_value;
  124035             :           
  124036             : // End of memberFunctionString
  124037             : 
  124038             :     friend struct Rose::Traits::generated::describe_node_t<SgStatement>;
  124039             :     friend struct Rose::Traits::generated::describe_field_t<SgStatement, SgLabelRefExp*,&SgStatement::p_numeric_label>;
  124040             :     friend struct Rose::Traits::generated::describe_field_t<SgStatement, int,&SgStatement::p_source_sequence_value>;
  124041             : 
  124042             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  124043             : 
  124044             : 
  124045             :    };
  124046             : #endif
  124047             : 
  124048             : // postdeclarations for SgStatement
  124049             : 
  124050             : /* #line 124051 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  124051             : /* #line 605 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  124052             : 
  124053             : 
  124054             : #if 0
  124055             :        // DQ (5/23/2013): Put the get_symbol_table() function back to being public so that we can proceed with testing.
  124056             :        // This fails for the GNU 4.4 compiler only. Sort it out later.
  124057             : 
  124058             : // DQ (5/21/2013): Inserted forward namespace declaration, so that we can reference the namespace
  124059             : // in the friend functions of the SgScopeStatement.  It appears hat this is not allowed.
  124060             : namespace SageInterface
  124061             :    {
  124062             :      class StatementGenerator;
  124063             :      int  set_name ( SgInitializedName *initializedNameNode, SgName new_name );
  124064             :      void replaceExpressionWithStatement(SgExpression* from, StatementGenerator* to);
  124065             :      void rebuildSymbolTable ( SgScopeStatement* scope );
  124066             :      void fixupReferencesToSymbols( const SgScopeStatement* this_scope,  SgScopeStatement* copy_scope, SgCopyHelp & help );
  124067             :      int  suggestNextNumericLabel(SgFunctionDefinition* func_def);
  124068             :      void deleteAST ( SgNode* n );
  124069             :      void moveStatementsBetweenBlocks ( SgBasicBlock* sourceBlock, SgBasicBlock* targetBlock );
  124070             :    }
  124071             : 
  124072             : namespace ASTtools
  124073             :    {
  124074             :   // struct VarSymSet_t;
  124075             :   // typename VarSymSet_t;
  124076             :      typedef std::set<const SgVariableSymbol *> VarSymSet_t;
  124077             :      void moveStatements (SgBasicBlock* src, SgBasicBlock* dest);
  124078             :      void collectLocalVisibleVarSyms (const SgStatement* root,const SgStatement* target,VarSymSet_t& syms);
  124079             :    }
  124080             : #endif
  124081             : 
  124082             : 
  124083             : // DQ (12/30/2009): This has been moved from SOURCE_MAIN_STATEMENT to
  124084             : // here so that ic can be referenced from the separate source files
  124085             : // now optionally generated within ROSE to support smaller ROSETTA
  124086             : // generated files.
  124087             : 
  124088             : #if 1
  124089             : // DQ (12/30/2009): This does not appear to be required to be a template function (base class will work just fine).
  124090             : 
  124091             : // Replace target with newstmt if target matches 'cur'
  124092             : template <class Elemtype>
  124093             : inline bool
  124094         687 : StatementReplace (SgStatement *parent, Elemtype *& cur, SgStatement *target, SgStatement *newstmt)
  124095             :    {
  124096         687 :      if (cur == target)
  124097             :         {
  124098             :        // newstmt can be NULL or it must be compatible with cur's type
  124099             :        // assert( newstmt == 0 || newstmt->variantT() == cur->variantT());
  124100           0 :           ROSE_ASSERT (newstmt == 0 || dynamic_cast<Elemtype*>(newstmt));
  124101             : #ifndef REMOVE_SET_PARENT_FUNCTION
  124102             :        // DQ (9/24/2004): Parent will be set in the AST fixup (in post-processing of the AST in AST Fixup)
  124103             :        // Should not be set within EDG/Sage III connection code!
  124104             :           printf ("Warning: Temporarily skipping set_parent in StatementReplace \n");
  124105             :        // if (newstmt != 0)
  124106             :        //    newstmt->set_parent( parent);
  124107             : #endif
  124108             : 
  124109         687 :           cur = static_cast<Elemtype *>(newstmt);
  124110             : #if 0
  124111             :           if (SgProject::get_verbose() >= 1)
  124112             :              {
  124113             :                printf ("In StatementReplace: test 1: Supress marking parent = %p = %s as isModified \n",parent,parent->class_name().c_str());
  124114             :              }
  124115             : #endif
  124116             :        // DQ (4/16/2015): Supress marking parent as isModified (we might want to mark this as containing a transformation).
  124117             :        // parent->set_isModified(true);
  124118             : 
  124119           0 :           return true;
  124120             :         }
  124121             :      return false;
  124122             :    }
  124123             : #else
  124124             : 
  124125             : #error "DEAD CODE!"
  124126             : 
  124127             : // DQ (12/30/2009): This is an attempt to build a more portable function to support new smaller ROSETTA generated files.
  124128             : // If we want to build this as a non-template function then we will have to reference "SgLocatedNode *& cur" as
  124129             : // "SgLocatedNode ** cur" (or perhaps using SgStatement), else the types prevent the function from working.
  124130             : inline bool
  124131             : StatementReplace (SgStatement *parent, SgStatement *& cur, SgStatement *target, SgStatement *newstmt)
  124132             : // StatementReplace (SgStatement *parent, SgLocatedNode *& cur, SgStatement *target, SgStatement *newstmt)
  124133             :    {
  124134             :      if (cur == target)
  124135             :         {
  124136             :        // newstmt can be NULL or it must be compatible with cur's type
  124137             :           ROSE_ASSERT (newstmt == NULL || newstmt->variantT() == cur->variantT());
  124138             : 
  124139             :        // cur = static_cast<Elemtype *>(newstmt);
  124140             :        // cur = static_cast<SgStatement*>(newstmt);
  124141             :           cur = static_cast<SgLocatedNode*>(newstmt);
  124142             : 
  124143             :           parent->set_isModified(true);
  124144             :           return true;
  124145             :         }
  124146             :      return false;
  124147             :    }
  124148             : 
  124149             : #error "DEAD CODE!"
  124150             : 
  124151             : #endif
  124152             : 
  124153             : #if 0
  124154             : // DQ (12/30/2009): This has been moved to the header file since it was a used in
  124155             : // several places and could not be supported in the source file now that we
  124156             : // support the generation of smaller and more numerous files by ROSETTA.
  124157             : inline Sg_File_Info* New_File_Info( SgLocatedNode *p)
  124158             :    {
  124159             :   // DQ (11/20/2004): Modified to provide more accurate information, use the
  124160             :   // copy constructor instead of the constructor that takes a file name.
  124161             :   // return new Sg_File_Info( p->get_file_info()->get_filename());
  124162             : 
  124163             :   // DQ (11/6/2006): startOfConstruct is the one Sg_File_Info that will always exist and must exist.
  124164             :   // ROSE_ASSERT(p->get_file_info() != NULL);
  124165             :   // Sg_File_Info* returnFileInfo = new Sg_File_Info( *( p->get_file_info() ) );
  124166             :   // ROSE_ASSERT(returnFileInfo != NULL);
  124167             :      ROSE_ASSERT(p->get_startOfConstruct() != NULL);
  124168             :      Sg_File_Info* returnFileInfo = new Sg_File_Info( *( p->get_startOfConstruct() ) );
  124169             :      ROSE_ASSERT(returnFileInfo != NULL);
  124170             : 
  124171             :   // printf ("In New_File_Info: returnFileInfo = %p \n",returnFileInfo);
  124172             : 
  124173             :      return returnFileInfo;
  124174             :    }
  124175             : #else
  124176             : // Temporary while we move code to use generateMatchingFileInfo directly.
  124177           9 : inline Sg_File_Info* New_File_Info( SgLocatedNode *p)
  124178             :    {
  124179           9 :      ROSE_ASSERT(p != NULL);
  124180           9 :      return p->generateMatchingFileInfo();
  124181             :    }
  124182             : #endif
  124183             : 
  124184             : 
  124185             : 
  124186             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  124187             : 
  124188             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  124189             : 
  124190             : 
  124191             : /* #line 124192 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  124192             : 
  124193             : 
  124194             : 
  124195             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  124196             : 
  124197             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  124198             : //      This code is automatically generated for each 
  124199             : //      terminal and non-terminal within the defined 
  124200             : //      grammar.  There is a simple way to change the 
  124201             : //      code to fix bugs etc.  See the ROSE README file
  124202             : //      for directions.
  124203             : 
  124204             : // tps: (02/22/2010): Adding DLL export requirements
  124205             : #include "rosedll.h"
  124206             : 
  124207             : // predeclarations for SgScopeStatement
  124208             : 
  124209             : /* #line 124210 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  124210             : 
  124211             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  124212             : 
  124213             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  124214             : 
  124215             : #if 1
  124216             : // Class Definition for SgScopeStatement
  124217             : class ROSE_DLL_API SgScopeStatement  : public SgStatement
  124218             :    {
  124219             :      public:
  124220             : 
  124221             : 
  124222             : /* #line 124223 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  124223             : 
  124224             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  124225             : // Start of memberFunctionString
  124226             : /* #line 235 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  124227             : 
  124228             : 
  124229             :      public:
  124230             : 
  124231             : #if 0
  124232             :        // DQ (5/23/2013): Put the get_symbol_table() function back to being public so that we can proceed with testing.
  124233             :        // This fails for the GNU 4.4 compiler only. Sort it out later.
  124234             : 
  124235             :        // DQ (5/21/2013): This class needs access because it rebuilds the symbol tables.
  124236             :           friend class FixupAstSymbolTables;
  124237             : 
  124238             :        // DQ (5/21/2013): This class needs access because it rebuilds the parent child links in the symbol table (for symbols).
  124239             :           friend class ResetParentPointersInMemoryPool;
  124240             :           friend class FixupAstDefiningAndNondefiningDeclarations;
  124241             :           friend class ResetEmptyNames;
  124242             :           friend class FixupAstSymbolTablesToSupportAliasedSymbols;
  124243             : 
  124244             :        // DQ (5/21/2013): This is a static function in sageInterface.C (it required some specific access to the symbol table).
  124245             :           friend SgVariableSymbol * addArg(SgFunctionParameterList *paraList, SgInitializedName* initName, bool isPrepend);
  124246             :           friend int  SageInterface::set_name ( SgInitializedName *initializedNameNode, SgName new_name );
  124247             :           friend void SageInterface::replaceExpressionWithStatement(SgExpression* from, SageInterface::StatementGenerator* to);
  124248             :           friend void SageInterface::rebuildSymbolTable ( SgScopeStatement* scope );
  124249             :           friend void SageInterface::fixupReferencesToSymbols( const SgScopeStatement* this_scope,  SgScopeStatement* copy_scope, SgCopyHelp & help );
  124250             :           friend int  SageInterface::suggestNextNumericLabel(SgFunctionDefinition* func_def);
  124251             :           friend void SageInterface::deleteAST ( SgNode* n );
  124252             :           friend void SageInterface::moveStatementsBetweenBlocks ( SgBasicBlock* sourceBlock, SgBasicBlock* targetBlock );
  124253             : 
  124254             :        // DQ (5/21/2013): From the AST consistancy tests.
  124255             :           friend class TestAstSymbolTables;
  124256             : 
  124257             :        // DQ (5/21/2013): Support for the inliner.
  124258             :           friend bool doInline(SgFunctionCallExp* funcall, bool allowRecursion);
  124259             :           friend class FlattenBlocksVisitor;
  124260             :           friend class RenameVariablesVisitor;
  124261             :           friend class RenameLabelsVisitor;
  124262             : 
  124263             :        // DQ (5/21/2013): Support for the outliner.
  124264             :           friend void ASTtools::moveStatements (SgBasicBlock* src, SgBasicBlock* dest);
  124265             :           friend void ASTtools::collectLocalVisibleVarSyms (const SgStatement* root,const SgStatement* target,VarSymSet_t& syms);
  124266             : #endif
  124267             : 
  124268             : 
  124269             :        // Since we suppress the generation of the constructors we have to declare them explicitly
  124270             :        // SgScopeStatement ();
  124271             :           SgScopeStatement ( Sg_File_Info* file_info = NULL );
  124272             : 
  124273             :        // DQ (9/8/2004): Added to support qualified name generation
  124274             :           virtual SgName get_qualified_name() const;
  124275             : 
  124276             :        // DQ (2/22/2007): Added mangled name support for scopes so that the
  124277             :        // mangled names for declarations could have better support!
  124278             :           virtual SgName get_mangled_name() const;
  124279             : 
  124280             :        // DQ (2/10/2007): Added member function.
  124281             :       //! return number of entries in symbol table for the specified name
  124282             :       //! (note that it is sometime OK for there to be more than 1).
  124283             :           size_t count_symbol(const SgName& n);
  124284             : 
  124285             :        // DQ (5/14/2011): Added count for alias symbols (used in name qualification, since alias symbols of a base class are added to the derived class).
  124286             :       //! Count for alias symbols of a specific name, used in name qualification support.
  124287             :           size_t count_alias_symbol(const SgName& n);
  124288             : 
  124289             :       //! Return the size of the symbol table.
  124290             :           size_t symbol_table_size();
  124291             : 
  124292             :        // Single interface for inserting symbol into symbol table
  124293             :           void insert_symbol(const SgName& n, SgSymbol* s);
  124294             : 
  124295             :        // DQ (2/10/2007): I would like to deprecate this since it returns and integer and is not named well for such a return type!
  124296             :        // see if this is in symbol table already
  124297             :           int lookup_symbol( const SgName& n, SgSymbol* s) const ROSE_DEPRECATED_FUNCTION;
  124298             : 
  124299             :        // DQ (2/10/2007): Do we want an interface like this?
  124300             :        // Note that these are relatively expensive functions since they do an exhaustive search of the symbol table.
  124301             :           bool symbol_exists ( const SgName &, SgSymbol *sp ) const;
  124302             :           bool symbol_exists ( const SgName & name ) const;
  124303             :           bool symbol_exists ( const SgSymbol *sp ) const;
  124304             : 
  124305             :        // remove an existing symbol from the symbol table (does not call delete on the symbol)
  124306             :           void remove_symbol ( SgSymbol* s );
  124307             : 
  124308             :        // DQ (1/30/2007): Many of these have been added back into ROSE, now we have examples showing they are
  124309             :        // required to find the different types of symbols that can be placed into the same
  124310             :        // scope using the same name.
  124311             : 
  124312             :        //! get the first symbol with name (note that "" is a valid name and is used for unnamed declarations)
  124313             :        //! the input name is stored as internal state to support the use of next_XXX_symbol() member function.
  124314             :        // SgSymbol*          lookup_symbol            (const SgName& n) const;
  124315             :        // SgSymbol*          lookup_symbol            (const SgName& n, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentList) const;
  124316             :           SgSymbol*          lookup_symbol            (const SgName& n, SgTemplateParameterPtrList* templateParameterList = NULL, SgTemplateArgumentPtrList* templateArgumentList = NULL) const;
  124317             : 
  124318             :           SgVariableSymbol*  lookup_var_symbol        (const SgName& n) const ROSE_DEPRECATED_FUNCTION;
  124319             :           SgVariableSymbol*  lookup_variable_symbol   (const SgName& n) const;
  124320             : 
  124321             :        // DQ (8/21/2013): Nw that we permit the default parameter, this version of the function is ambiguous.
  124322             :        // SgClassSymbol*     lookup_class_symbol      (const SgName& n) const;
  124323             : 
  124324             :        // DQ (8/22/2012): We need more information to disambiguate where template argument name qualification would be important. See test2012_195.C.
  124325             :           SgClassSymbol*     lookup_class_symbol      (const SgName& n, SgTemplateArgumentPtrList* templateArgumentsList = NULL) const;
  124326             : 
  124327             :           SgNonrealSymbol*   lookup_nonreal_symbol    (const SgName& n, SgTemplateParameterPtrList* templateParameterList = NULL, SgTemplateArgumentPtrList* templateArgumentsList = NULL) const;
  124328             : 
  124329             :           SgFunctionSymbol*  lookup_function_symbol   (const SgName& n) const;
  124330             : 
  124331             :        // DQ (8/10/2013): Added to support function symbol lookup for template instantiations that would only be disambiguated by their template arguments.
  124332             :        // SgFunctionSymbol*  lookup_function_symbol   (const SgName& n, const SgType* t) const;
  124333             :           SgFunctionSymbol*  lookup_function_symbol   (const SgName& n, const SgType* t, SgTemplateArgumentPtrList* templateArgumentsList = NULL) const;
  124334             : 
  124335             :           SgTypedefSymbol*   lookup_typedef_symbol    (const SgName& n) const;
  124336             :           SgEnumSymbol*      lookup_enum_symbol       (const SgName& n) const;
  124337             :        // SgEnumFieldSymbol* lookup_enumfield_symbol  (const SgName& n) const ROSE_DEPRECATED_FUNCTION;
  124338             :           SgEnumFieldSymbol* lookup_enum_field_symbol (const SgName& n) const;
  124339             :           SgLabelSymbol*     lookup_label_symbol      (const SgName& n) const;
  124340             :           SgNamespaceSymbol* lookup_namespace_symbol  (const SgName& n) const;
  124341             : 
  124342             : #if 0
  124343             :        // DQ (8/13/2013): Since function templates, member function templates, and class templates are symbols not derived from SgTemplateSymbol,
  124344             :        // this function is not very useful since it returns a SgTemplateSymbol.  This was a part of the older pre-EDG4x API.
  124345             : 
  124346             :        // A class template can have partial specialization, so we need to support both template parameter list and the
  124347             :        // template argument list used for specialization as part of looking up symbols for template that could include
  124348             :        // class templates, however, a template function can not have template partial specialization, so the template
  124349             :        // argument list for partial specialization will not be used here (since specializations of template functions
  124350             :        // are template instantiations, not templates and should use another symbol lookup function.
  124351             :        // SgTemplateSymbol*  lookup_template_symbol   (const SgName& n) const;
  124352             :           SgTemplateSymbol*  lookup_template_symbol   (const SgName& n, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateSpecializationArgumentList) const;
  124353             : #endif
  124354             : 
  124355             :        // DQ (12/12/2011): Added support for template declarations in the AST.
  124356             :        // SgTemplateClassSymbol* lookup_template_class_symbol    (const SgName& n) const;
  124357             :           SgTemplateClassSymbol* lookup_template_class_symbol    (const SgName& n, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateSpecializationArgumentList) const;
  124358             : 
  124359             :        // DQ (3/8/2017): Adding support for SgTemplateTypedefDeclaration IR nodes.
  124360             :           SgTemplateTypedefSymbol* lookup_template_typedef_symbol (const SgName& n) const;
  124361             : 
  124362             :        // DQ (8/22/2012): If we have template arguments then we have a chance to disambiguate SgTemplateInstantiationDecl IR nodes based on the
  124363             :        // arguments which would otherwise require qulified names (which are difficult to robustly support using as the AST is being constructed).
  124364             :           SgClassSymbol*     lookup_nontemplate_class_symbol (const SgName& n, SgTemplateArgumentPtrList* templateArgumentsList) const;
  124365             : 
  124366             :        // DQ (8/9/2013): Note that template functions can't be specialized, so we need to only handle SgTemplateParameterPtrList
  124367             :        // DQ (12/27/2011): Added support for template declarations in the AST.
  124368             :        // SgTemplateFunctionSymbol*       lookup_template_function_symbol (const SgName& n, const SgType* t) const;
  124369             :           SgTemplateFunctionSymbol*       lookup_template_function_symbol (const SgName& n, const SgType* t, SgTemplateParameterPtrList* templateParameterList) const;
  124370             : 
  124371             :           SgTemplateVariableSymbol*       lookup_template_variable_symbol (const SgName& n, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentsList) const;
  124372             : 
  124373             :        // DQ (8/10/2013): If there are template arguments then they are used to disambiguate template instantiations that might match existing non-template instantiations (normal functions).
  124374             :        // SgFunctionSymbol*               lookup_nontemplate_function_symbol (const SgName& n, const SgType* t) const;
  124375             :           SgFunctionSymbol*               lookup_nontemplate_function_symbol (const SgName& n, const SgType* t, SgTemplateArgumentPtrList* templateArgumentsList = NULL) const;
  124376             : 
  124377             :        // SgTemplateMemberFunctionSymbol* lookup_template_member_function_symbol (const SgName& n, const SgType* t) const;
  124378             :        // SgTemplateMemberFunctionSymbol* lookup_template_member_function_symbol (const SgName& n, const SgType* t, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateSpecializationArgumentList) const;
  124379             :           SgTemplateMemberFunctionSymbol* lookup_template_member_function_symbol (const SgName& n, const SgType* t, SgTemplateParameterPtrList* templateParameterList) const;
  124380             : 
  124381             :        // DQ (8/10/2013): If there are template arguments then they are used to disambiguate template instantiations that might match existing non-template instantiations (normal functions).
  124382             :        // DQ (5/23/2013): Added API function so that we would not have to access the symbol tabel directly.
  124383             :        // SgMemberFunctionSymbol* lookup_nontemplate_member_function_symbol (const SgName& n, const SgType* t) const;
  124384             :           SgMemberFunctionSymbol* lookup_nontemplate_member_function_symbol (const SgName& n, const SgType* t, SgTemplateArgumentPtrList* templateArgumentsList = NULL) const;
  124385             : 
  124386             :        // DQ (1/23/2019): This function adds the support to find the SgAlias symbols of a given name.
  124387             :        // This is important in handling the viability of symbols through base classes when private base
  124388             :        // class derivation is used.
  124389             :           SgAliasSymbol* lookup_alias_symbol(const SgName& n, SgSymbol* sp) const;
  124390             : 
  124391             :        // DQ (2/16/2019): Added to support detection of ambiguity that drives the generation of name qualification.
  124392             :           bool hasAmbiguity(SgName & name, SgSymbol* symbol);
  124393             : 
  124394             :        //! get the first symbol independent of name (lack of name is stored as internal state)
  124395             :           SgSymbol*          first_any_symbol        () const;
  124396             :        // SgVariableSymbol*  first_var_symbol        () const ROSE_DEPRECATED_FUNCTION;
  124397             :           SgVariableSymbol*  first_variable_symbol   () const;
  124398             :           SgClassSymbol*     first_class_symbol      () const;
  124399             :           SgFunctionSymbol*  first_function_symbol   () const;
  124400             :           SgTypedefSymbol*   first_typedef_symbol    () const;
  124401             :           SgEnumSymbol*      first_enum_symbol       () const;
  124402             :        // SgEnumFieldSymbol* first_enumfield_symbol  () const ROSE_DEPRECATED_FUNCTION;
  124403             :           SgEnumFieldSymbol* first_enum_field_symbol () const;
  124404             :           SgLabelSymbol*     first_label_symbol      () const;
  124405             :           SgNamespaceSymbol* first_namespace_symbol  () const;
  124406             :           SgTemplateSymbol*  first_template_symbol   () const;
  124407             : 
  124408             :        // Should we have a member function like this!
  124409             :        // SgFunctionSymbol*  first_function_symbol  (const SgType* t) const;
  124410             : 
  124411             :        //! Only use after lookup_XXX_symbol(const SgName&) or after first_XXX_symbol()
  124412             :        //! These functions use the stored state of the name or lack of name (from the
  124413             :        //! lookup_XXX_symbol(const SgName&) or after first_XXX_symbol() member function)
  124414             :        //! and return the next symbol.
  124415             :           SgSymbol*          next_any_symbol        () const;
  124416             :        // SgVariableSymbol*  next_var_symbol        () const ROSE_DEPRECATED_FUNCTION;
  124417             :           SgVariableSymbol*  next_variable_symbol   () const;
  124418             :           SgClassSymbol*     next_class_symbol      () const;
  124419             :           SgFunctionSymbol*  next_function_symbol   () const;
  124420             :           SgTypedefSymbol*   next_typedef_symbol    () const;
  124421             :           SgEnumSymbol*      next_enum_symbol       () const;
  124422             :        // SgEnumFieldSymbol* next_enumfield_symbol  () const ROSE_DEPRECATED_FUNCTION;
  124423             :           SgEnumFieldSymbol* next_enum_field_symbol () const;
  124424             :           SgLabelSymbol*     next_label_symbol      () const;
  124425             :           SgNamespaceSymbol* next_namespace_symbol  () const;
  124426             :           SgTemplateSymbol*  next_template_symbol   () const;
  124427             : 
  124428             :        // Should we have a member function like this!
  124429             :        // SgFunctionSymbol*  next_function_symbol  (const SgType* t) const;
  124430             : 
  124431             :        /* some symbol table printing utility routines */
  124432             :        // void print_symboltable(const std::string& str, std::ostream& os = std::cout);
  124433             :           void print_symboltable(const std::string& str, std::ostream& os );
  124434             :           void print_symboltable(const std::string & label, VariantT nodeType);
  124435             :           void print_symboltable(const std::string & str);
  124436             : 
  124437             : #if 0
  124438             :        // DQ (9/7/2006): Previously removed functionality, restored by request from Beata at ANL.
  124439             :        // The next for functions have been placed back into the Sage III interface.
  124440             :           SgSymbol *first_any_symbol();
  124441             :           SgVariableSymbol *first_variable_symbol();
  124442             :           SgSymbol *next_any_symbol();
  124443             :           SgVariableSymbol *next_variable_symbol();
  124444             : #endif
  124445             : 
  124446             : #if 0
  124447             :        // Not clear if we need more insert functions to support the X version terminals/nonterminals
  124448             :           SgVariableSymbol *insert_symbol(const SgInitializedNamePtrList::iterator&);
  124449             :           SgVariableSymbol *insert_symbol(SgVariableDeclaration *);
  124450             :           SgFunctionSymbol *insert_symbol(SgFunctionDeclaration *);
  124451             :           SgMemberFunctionSymbol *insert_symbol(SgMemberFunctionDeclaration *);
  124452             :           SgClassSymbol *insert_symbol(SgClassDeclaration *cdecl);
  124453             :           SgEnumSymbol *insert_symbol(SgEnumDeclaration *cdecl);
  124454             :           SgTypedefSymbol *insert_symbol(SgTypedefDeclaration *);
  124455             :           SgLabelSymbol *insert_symbol(SgLabelStatement *);
  124456             : 
  124457             :           SgEnumFieldSymbol *insert_enum_symbol(const SgInitializedNamePtrList::iterator&);
  124458             : #endif
  124459             : 
  124460             :        // DQ (7/17/2002) Added to support rewrite mechanism some scopes can only contain
  124461             :        // SgDeclarationStmt while others can contain any kind of SgStatement
  124462             :       //! This function is used to indicate if either the getDeclarationList() or
  124463             :       //! getStatementList() can be called to return a reference to the list of IR nodes
  124464             :       //! (manipulation of the list is then possible).
  124465             :           bool containsOnlyDeclarations() const;
  124466             :           void insertStatementInScope ( SgStatement* newTransformationStatement, bool atTop );
  124467             :           SgDeclarationStatementPtrList & getDeclarationList();
  124468             :           SgStatementPtrList & getStatementList();
  124469             : 
  124470             :        // DQ (10/6/2007): Added to support const version of generateStatementList()
  124471             :           const SgDeclarationStatementPtrList & getDeclarationList() const;
  124472             :           const SgStatementPtrList & getStatementList() const;
  124473             : 
  124474             :        // DQ (2/1/2007): Made the return type const to reflect that the list is read-only.
  124475             :       //! Generate s list of statements from either the existing list of statements or
  124476             :       //! the list of declarations.  This permits access via a common type (SgStatement).
  124477             :       //! (this list is constructed and manipulation of it will not effect the scope's
  124478             :       //! SgStatementPtrList or SgDeclarationStatementPtrList. So this should be considered
  124479             :       //! to be a read only list.
  124480             :           const SgStatementPtrList generateStatementList() const;
  124481             : 
  124482             :        // DQ (6/26/2013): Added function to test for existence of statement in scope.
  124483             :       //! Test for existence of statement is scope.
  124484             :           bool statementExistsInScope ( SgStatement* statement );
  124485             : 
  124486             :        // DQ (5/22/2006): Added function here so that it could be defined for all scopes (instead of just a few)
  124487             :        // virtual SgName get_mangled_name (void) const;
  124488             : 
  124489             :        // DQ (10/18/2006): Not all scopes permit function declarations.
  124490             :        /*! \brief Reports if scope can support defining function declarations.
  124491             :        // Not all scopes permit function declarations. Any function prototype in a
  124492             :        // scope appropriate for a function definition triggers requirements for name qualification.
  124493             :        // This function returns true if the scope is appropriate for the definition of a function
  124494             :        // or member function (i.e. is a SgGlobal, SgClassDefinition, or SgNamespaceDefinitionStatement).
  124495             :        */
  124496             :           bool supportsDefiningFunctionDeclaration();
  124497             : 
  124498             :        // DQ (2/20/2007): Added support for AST merge (which requires unique names for even un-named
  124499             :        // constructs (we use the position in scope as part of the unique name generation).  This has to
  124500             :        // be non-const since it calls the non-const list functions.  This could all be fixed, I think.
  124501             :       //! Generate a unique number for the statement in the scope.
  124502             :           unsigned int generateUniqueStatementNumberForScope( SgStatement* statement );
  124503             : 
  124504             :       //! Helper for generateUniqueStatementNumberForScope: return true if the
  124505             :       //! element is found, incrementing the counter once for each element of
  124506             :       //! tree up to either the element of the end of the sub-statements in the
  124507             :       //! current statement
  124508             :           bool generateUniqueStatementNumberForScopeHelper( unsigned int& counter, SgStatement* statement );
  124509             : 
  124510             :        // DQ (6/5/2007): Build special operator to return by reference
  124511             :       /*! \brief This list of symbols represent types that will require type elaboration when source code is generated.
  124512             :        */
  124513             :           std::set<SgSymbol*> & get_type_elaboration_list ();
  124514             : 
  124515             :       /*! \brief This list of symbols represent types that will require name qualification when the type name is output.
  124516             :        */
  124517             :           std::set<SgSymbol*> & get_hidden_type_list ();
  124518             : 
  124519             :       /*! \brief This list of symbols represent declarations that will require name qualification when the identifier name is output.
  124520             :        */
  124521             :           std::set<SgSymbol*> & get_hidden_declaration_list ();
  124522             : 
  124523             :        // DQ (6/5/2007): Build special operators set the hidden lists (not clear if these are used or required)
  124524             :           void set_type_elaboration_list ( const std::set<SgSymbol*> & type_elaboration_list );
  124525             :           void set_hidden_type_list ( const std::set<SgSymbol*> & hidden_type_list );
  124526             :           void set_hidden_declaration_list ( const std::set<SgSymbol*> & hidden_declaration_list );
  124527             : 
  124528             :        // DQ (6/14/2007): Added to support simpler handling of general scopes (used in EDG/Sage translation).
  124529             :       //! Higher level function to handle statements and declarations is scopes.
  124530             :           void append_statement ( SgStatement* stmt );
  124531             :           void prepend_statement ( SgStatement* stmt );
  124532             : 
  124533             :           SgStatement* firstStatement() const;
  124534             :           SgStatement* lastStatement() const;
  124535             : 
  124536             :   // protected:
  124537             : 
  124538             : #if ALT_FIXUP_COPY
  124539             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  124540             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  124541             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  124542             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  124543             : #else
  124544             :        // DQ (10/6/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  124545             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  124546             : #endif
  124547             : 
  124548             :        // DQ (11/28/2010): Added case sensitive/insensitive option to symbol table behavior.
  124549             :       //! Query of scope symbol table behavior (is symbol table behavior case sensitive (C/C++) or case insensitive (Fortran).
  124550             :           bool isCaseInsensitive() const;
  124551             :           void setCaseInsensitive(bool b);
  124552             : 
  124553             :        // DQ (5/11/2011): Added support for new name qualification implementation.
  124554             :       //! Some scopes have associated names for purposed of name qualification. This returns true if the scope has a name, false if not.
  124555             :           bool isNamedScope();
  124556             : 
  124557             :        // DQ (5/11/2011): Added support for new name qualification implementation.
  124558             :       //! Some scopes have associated names for purposed of name qualification. This generates the associated name.
  124559             :           SgName associatedScopeName();
  124560             : 
  124561             :        // DQ (1/21/2013): Added test for equivalents (e.g. namespace definitions that might be different IR nodes, but for an equivalent namespace).
  124562             :           static bool isEquivalentScope( SgScopeStatement* scope1, SgScopeStatement* scope2);
  124563             : #if 0
  124564             :   // DQ (5/23/2013): We want to make this private, and this works for C/C++, but not yet for Fortran (at least).
  124565             :      private:
  124566             : #else
  124567             :   // DQ (5/23/2013): Restore this as public so that I can get the C/C++ work tested in Jenkins and fixup the Fortran support afterward.
  124568             :      public:
  124569             : #endif
  124570             :        // DQ (5/21/2013): This function is removed from the SgScopeStatement API as a public member function.
  124571             :        // It is replaced in the SgScopeStatement as a soon to be private member function.  This is done to
  124572             :        // support hiding the namespace symbol table handling behind the SgScopeStatement level of support.
  124573             :        // There is no reason for the symbol table to be directly accessible to users, if there is a problem
  124574             :        // then the SgScopeStatement class API should be extended with the required functionality.
  124575             :           SgSymbolTable* get_symbol_table () const;
  124576             :           void set_symbol_table ( SgSymbolTable* symbol_table );
  124577             : 
  124578             :      public:
  124579             :        // DQ (8/7/2013): Adding support for template function overloading using template parameters (info passed as template arguments for specialization).
  124580             :        // DQ (5/21/2013): Added support for organizing how we match function declarations with function symbols.
  124581             :        // This function was moved from the symbol table to the SgScopeStatement so that we could make the
  124582             :        // symbol table access functions private as part of the new namespace symbol table handling.
  124583             :        // template<class T> SgFunctionSymbol* find_symbol_by_type_of_function (const SgName & name, const SgType* func_type);
  124584             :        // template<class T> SgFunctionSymbol* find_symbol_by_type_of_function (const SgName & name, const SgType* func_type, SgTemplateArgumentPtrList* templateArgumentList);
  124585             :        // template<class T> SgFunctionSymbol* find_symbol_by_type_of_function (const SgName & name, const SgType* func_type, SgTemplateArgumentPtrList* templateArgumentList, SgTemplateParameterPtrList* templateParameterList);
  124586             :           template<class T> SgFunctionSymbol* find_symbol_by_type_of_function (const SgName & name, const SgType* func_type, SgTemplateParameterPtrList* templateParameterList, SgTemplateArgumentPtrList* templateArgumentList);
  124587             : 
  124588             :        // DQ (5/21/2013): This function is used by the get_symbol_from_symbol_table() functions.
  124589             :           template<class T> SgSymbol* find_symbol_from_declaration(const T* node) const;
  124590             : 
  124591             :      public:
  124592             : 
  124593             : 
  124594             : 
  124595             : 
  124596             : // End of memberFunctionString
  124597             : // Start of memberFunctionString
  124598             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  124599             : 
  124600             : // *** COMMON CODE SECTION BEGINS HERE ***
  124601             : 
  124602             :     public:
  124603             : 
  124604             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  124605             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  124606             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  124607             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  124608             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  124609             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  124610             : 
  124611             :       /*! \brief returns a string representing the class name */
  124612             :           virtual std::string class_name() const override;
  124613             : 
  124614             :       /*! \brief returns new style SageIII enum values */
  124615             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  124616             : 
  124617             :       /*! \brief static variant value */
  124618             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  124619             :        // static const VariantT static_variant = V_SgScopeStatement;
  124620             :           enum { static_variant = V_SgScopeStatement };
  124621             : 
  124622             :        /* the generated cast function */
  124623             :       /*! \brief Casts pointer from base class to derived class */
  124624             :           ROSE_DLL_API friend       SgScopeStatement* isSgScopeStatement(       SgNode * s );
  124625             : 
  124626             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  124627             :           ROSE_DLL_API friend const SgScopeStatement* isSgScopeStatement( const SgNode * s );
  124628             : 
  124629             :      // ******************************************
  124630             :      // * Memory Pool / New / Delete
  124631             :      // ******************************************
  124632             : 
  124633             :      public:
  124634             :           /// \private
  124635             :           static const unsigned pool_size; //
  124636             :           /// \private
  124637             :           static std::vector<unsigned char *> pools; //
  124638             :           /// \private
  124639             :           static SgScopeStatement * next_node; // 
  124640             : 
  124641             :           /// \private
  124642             :           static unsigned long initializeStorageClassArray(SgScopeStatementStorageClass *); //
  124643             : 
  124644             :           /// \private
  124645             :           static void clearMemoryPool(); //
  124646             :           static void deleteMemoryPool(); //
  124647             : 
  124648             :           /// \private
  124649             :           static void extendMemoryPoolForFileIO(); //
  124650             : 
  124651             :           /// \private
  124652             :           static SgScopeStatement * getPointerFromGlobalIndex(unsigned long); //
  124653             :           /// \private
  124654             :           static SgScopeStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  124655             : 
  124656             :           /// \private
  124657             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  124658             :           /// \private
  124659             :           static void resetValidFreepointers(); //
  124660             :           /// \private
  124661             :           static unsigned long getNumberOfLastValidPointer(); //
  124662             : 
  124663             : 
  124664             : #if defined(INLINE_FUNCTIONS)
  124665             :       /*! \brief returns pointer to newly allocated IR node */
  124666             :           inline void *operator new (size_t size);
  124667             : #else
  124668             :       /*! \brief returns pointer to newly allocated IR node */
  124669             :           void *operator new (size_t size);
  124670             : #endif
  124671             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  124672             :           void operator delete (void* pointer, size_t size);
  124673             : 
  124674             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  124675           0 :           void operator delete (void* pointer)
  124676             :              {
  124677             :             // This is the generated delete operator...
  124678           0 :                SgScopeStatement::operator delete (pointer,sizeof(SgScopeStatement));
  124679             :              }
  124680             : 
  124681             :       /*! \brief Returns the total number of IR nodes of this type */
  124682             :           static size_t numberOfNodes();
  124683             : 
  124684             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  124685             :           static size_t memoryUsage();
  124686             : 
  124687             :       // End of scope which started in IR nodes specific code 
  124688             :       /* */
  124689             : 
  124690             :       /* name Internal Functions
  124691             :           \brief Internal functions ... incomplete-documentation
  124692             : 
  124693             :           These functions have been made public as part of the design, but they are suggested for internal use 
  124694             :           or by particularly knowledgeable users for specialized tools or applications.
  124695             : 
  124696             :           \internal We could not make these private because they are required by user for special purposes. And 
  124697             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  124698             :          
  124699             :        */
  124700             : 
  124701             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  124702             :        // overridden in every class by *generated* implementation
  124703             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  124704             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  124705             :        // MS: 06/28/02 container of names of variables or container indices 
  124706             :        // used used in the traversal to access AST successor nodes
  124707             :        // overridden in every class by *generated* implementation
  124708             :       /*! \brief container of names of variables or container indices used used in the traversal
  124709             :           to access AST successor nodes overridden in every class by *generated* implementation */
  124710             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  124711             : 
  124712             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  124713             :        // than all the vector copies. The implementation for these functions is generated for each class.
  124714             :       /*! \brief return number of children in the traversal successor list */
  124715             :           virtual size_t get_numberOfTraversalSuccessors() override;
  124716             :       /*! \brief index-based access to traversal successors by index number */
  124717             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  124718             :       /*! \brief index-based access to traversal successors by child node */
  124719             :           virtual size_t get_childIndex(SgNode *child) override;
  124720             : 
  124721             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  124722             :        // MS: 08/16/2002 method for generating RTI information
  124723             :       /*! \brief return C++ Runtime-Time-Information */
  124724             :           virtual RTIReturnType roseRTI() override;
  124725             : #endif
  124726             :       /* */
  124727             : 
  124728             : 
  124729             : 
  124730             :       /* name Deprecated Functions
  124731             :           \brief Deprecated functions ... incomplete-documentation
  124732             : 
  124733             :           These functions have been deprecated from use.
  124734             :        */
  124735             :       /* */
  124736             : 
  124737             :       /*! returns a C style string (char*) representing the class name */
  124738             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  124739             : 
  124740             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  124741             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  124742             : #if 0
  124743             :       /*! returns old style Sage II enum values */
  124744             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  124745             :       /*! returns old style Sage II enum values */
  124746             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  124747             : #endif
  124748             :       /* */
  124749             : 
  124750             : 
  124751             : 
  124752             : 
  124753             :      public:
  124754             :       /* name Traversal Support Functions
  124755             :           \brief Traversal support functions ... incomplete-documentation
  124756             : 
  124757             :           These functions have been made public as part of the design, but they are suggested for internal use 
  124758             :           or by particularly knowledgable users for specialized tools or applications.
  124759             :        */
  124760             :       /* */
  124761             : 
  124762             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  124763             :        // (inferior to ROSE traversal mechanism, experimental).
  124764             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  124765             :        */
  124766             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  124767             : 
  124768             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  124769             :       /*! \brief support for the classic visitor pattern done in GoF */
  124770             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  124771             : 
  124772             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  124773             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  124774             :        */
  124775             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  124776             : 
  124777             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  124778             :        */
  124779             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  124780             : 
  124781             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  124782             :        // This traversal helps support internal tools that call static member functions.
  124783             :        // note: this function operates on the memory pools.
  124784             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  124785             :        */
  124786             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  124787             :       /* */
  124788             : 
  124789             : 
  124790             :      public:
  124791             :       /* name Memory Allocation Functions
  124792             :           \brief Memory allocations functions ... incomplete-documentation
  124793             : 
  124794             :           These functions have been made public as part of the design, but they are suggested for internal use 
  124795             :           or by particularly knowledgable users for specialized tools or applications.
  124796             :        */
  124797             :       /* */
  124798             : 
  124799             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  124800             : 
  124801             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  124802             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  124803             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  124804             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  124805             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  124806             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  124807             :           being used with the AST File I/O mechanism.
  124808             :        */
  124809             :           virtual bool isInMemoryPool() override;
  124810             : 
  124811             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  124812             : 
  124813             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  124814             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  124815             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  124816             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  124817             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  124818             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  124819             :           being used with the AST File I/O mechanism.
  124820             :        */
  124821             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  124822             : 
  124823             :       // DQ (4/30/2006): Modified to be a const function.
  124824             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  124825             : 
  124826             :           This functions is part of general support for many possible tools to operate 
  124827             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  124828             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  124829             :           less than the set of pointers used by the AST file I/O. This is part of
  124830             :           work implemented by Andreas, and support tools such as the AST graph generation.
  124831             : 
  124832             :           \warning This function can return unexpected data members and thus the 
  124833             :                    order and the number of elements is unpredicable and subject 
  124834             :                    to change.
  124835             : 
  124836             :           \returns STL vector of pairs of SgNode* and strings
  124837             :        */
  124838             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  124839             : 
  124840             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  124841             : 
  124842             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  124843             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  124844             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  124845             : 
  124846             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  124847             :                    and subject to change.
  124848             :        */
  124849             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  124850             : 
  124851             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  124852             : 
  124853             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  124854             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  124855             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  124856             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  124857             : 
  124858             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  124859             : 
  124860             :           \returns long
  124861             :        */
  124862             :           virtual long getChildIndex( SgNode* childNode ) const override;
  124863             : 
  124864             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  124865             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  124866             :       /* \brief Constructor for use by AST File I/O Mechanism
  124867             : 
  124868             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  124869             :           which obtained via fast binary file I/O from disk.
  124870             :        */
  124871             :        // SgScopeStatement( SgScopeStatementStorageClass& source );
  124872             : 
  124873             : 
  124874             : 
  124875             : 
  124876             : 
  124877             :  // JH (10/24/2005): methods added to support the ast file IO
  124878             :     private:
  124879             : 
  124880             :       /* name AST Memory Allocation Support Functions
  124881             :           \brief Memory allocations support....
  124882             : 
  124883             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  124884             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  124885             :           and support the AST File I/O Mechanism.
  124886             :        */
  124887             :       /* */
  124888             : 
  124889             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  124890             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  124891             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  124892             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  124893             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  124894             :           a correspinding one in the AST_FILE_IO class!
  124895             :        */
  124896             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  124897             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  124898             :       /* \brief Typedef used for low level memory access.
  124899             :        */
  124900             :        // typedef unsigned char* TestType;
  124901             : 
  124902             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  124903             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  124904             :       /* \brief Typedef used to hold memory addresses as values.
  124905             :        */
  124906             :        // typedef unsigned long  AddressType;
  124907             : 
  124908             : 
  124909             : 
  124910             :        // necessary, to have direct access to the p_freepointer and the private methods !
  124911             :       /*! \brief friend class declaration to support AST File I/O */
  124912             :           friend class AST_FILE_IO;
  124913             : 
  124914             :       /*! \brief friend class declaration to support AST File I/O */
  124915             :           friend class SgScopeStatementStorageClass;
  124916             : 
  124917             :       /*! \brief friend class declaration to support AST File I/O */
  124918             :           friend class AstSpecificDataManagingClass;
  124919             : 
  124920             :       /*! \brief friend class declaration to support AST File I/O */
  124921             :           friend class AstSpecificDataManagingClassStorageClass;
  124922             :     public:
  124923             :       /*! \brief IR node constructor to support AST File I/O */
  124924             :           SgScopeStatement( const SgScopeStatementStorageClass& source );
  124925             : 
  124926             :  // private: // JJW hack
  124927             :        /*
  124928             :           name AST Memory Allocation Support Variables
  124929             :           Memory allocations support variables 
  124930             : 
  124931             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  124932             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  124933             :           and support the AST File I/O Mechanism.
  124934             :        */
  124935             :       /* */
  124936             : 
  124937             :     public:
  124938             : 
  124939             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  124940             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  124941             :       // virtual SgNode* addRegExpAttribute();
  124942             :       /*! \brief Support for AST matching using regular expression.
  124943             : 
  124944             :           This support is incomplete and the subject of current research to define 
  124945             :           RegEx trees to support inexact matching.
  124946             :        */
  124947             :           SgScopeStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  124948             : 
  124949             : // *** COMMON CODE SECTION ENDS HERE ***
  124950             : 
  124951             : 
  124952             : // End of memberFunctionString
  124953             : // Start of memberFunctionString
  124954             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  124955             : 
  124956             :      // the generated cast function
  124957             :      // friend ROSE_DLL_API SgScopeStatement* isSgScopeStatement ( SgNode* s );
  124958             : 
  124959             :           typedef SgStatement base_node_type;
  124960             : 
  124961             : 
  124962             : // End of memberFunctionString
  124963             : // Start of memberFunctionString
  124964             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  124965             : 
  124966             :           void post_construction_initialization() override;
  124967             : 
  124968             : 
  124969             : // End of memberFunctionString
  124970             : 
  124971             : 
  124972             :      public: 
  124973             :          SgTypeTable* get_type_table() const;
  124974             :          void set_type_table(SgTypeTable* type_table);
  124975             : 
  124976             : 
  124977             : 
  124978             : 
  124979             :      public: 
  124980             :          SgPragma* get_pragma() const;
  124981             :          void set_pragma(SgPragma* pragma);
  124982             : 
  124983             : 
  124984             :      public: 
  124985             :          virtual ~SgScopeStatement();
  124986             : 
  124987             :     protected:
  124988             : // Start of memberFunctionString
  124989             : SgSymbolTable* p_symbol_table;
  124990             :           
  124991             : // End of memberFunctionString
  124992             : // Start of memberFunctionString
  124993             : SgTypeTable* p_type_table;
  124994             :           
  124995             : // End of memberFunctionString
  124996             : // Start of memberFunctionString
  124997             : std::set<SgSymbol*> p_type_elaboration_list;
  124998             :           
  124999             : // End of memberFunctionString
  125000             : // Start of memberFunctionString
  125001             : std::set<SgSymbol*> p_hidden_type_list;
  125002             :           
  125003             : // End of memberFunctionString
  125004             : // Start of memberFunctionString
  125005             : std::set<SgSymbol*> p_hidden_declaration_list;
  125006             :           
  125007             : // End of memberFunctionString
  125008             : // Start of memberFunctionString
  125009             : SgPragma* p_pragma;
  125010             :           
  125011             : // End of memberFunctionString
  125012             : 
  125013             :     friend struct Rose::Traits::generated::describe_node_t<SgScopeStatement>;
  125014             :     friend struct Rose::Traits::generated::describe_field_t<SgScopeStatement, SgSymbolTable*,&SgScopeStatement::p_symbol_table>;
  125015             :     friend struct Rose::Traits::generated::describe_field_t<SgScopeStatement, SgTypeTable*,&SgScopeStatement::p_type_table>;
  125016             :     friend struct Rose::Traits::generated::describe_field_t<SgScopeStatement, std::set<SgSymbol*>,&SgScopeStatement::p_type_elaboration_list>;
  125017             :     friend struct Rose::Traits::generated::describe_field_t<SgScopeStatement, std::set<SgSymbol*>,&SgScopeStatement::p_hidden_type_list>;
  125018             :     friend struct Rose::Traits::generated::describe_field_t<SgScopeStatement, std::set<SgSymbol*>,&SgScopeStatement::p_hidden_declaration_list>;
  125019             :     friend struct Rose::Traits::generated::describe_field_t<SgScopeStatement, SgPragma*,&SgScopeStatement::p_pragma>;
  125020             : 
  125021             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125022             : 
  125023             : 
  125024             :    };
  125025             : #endif
  125026             : 
  125027             : // postdeclarations for SgScopeStatement
  125028             : 
  125029             : /* #line 125030 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125030             : 
  125031             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  125032             : 
  125033             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125034             : 
  125035             : 
  125036             : /* #line 125037 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125037             : 
  125038             : 
  125039             : 
  125040             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125041             : 
  125042             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  125043             : //      This code is automatically generated for each 
  125044             : //      terminal and non-terminal within the defined 
  125045             : //      grammar.  There is a simple way to change the 
  125046             : //      code to fix bugs etc.  See the ROSE README file
  125047             : //      for directions.
  125048             : 
  125049             : // tps: (02/22/2010): Adding DLL export requirements
  125050             : #include "rosedll.h"
  125051             : 
  125052             : // predeclarations for SgGlobal
  125053             : 
  125054             : /* #line 125055 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125055             : 
  125056             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  125057             : 
  125058             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125059             : 
  125060             : #if 1
  125061             : // Class Definition for SgGlobal
  125062             : class ROSE_DLL_API SgGlobal  : public SgScopeStatement
  125063             :    {
  125064             :      public:
  125065             : 
  125066             : 
  125067             : /* #line 125068 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125068             : 
  125069             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  125070             : // Start of memberFunctionString
  125071             : /* #line 957 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  125072             : 
  125073             : 
  125074             :        // DQ (9/8/2004): Added to support general name qualification
  125075             :           virtual SgName get_qualified_name() const override;
  125076             : 
  125077             :        // DQ (2/22/2007): Added support for mangled name of SgGlobal to better support generation of
  125078             :        // mangled names which include the scope! Previously the mangled name of some declarations used
  125079             :        // the qualified name of the scope which put "::" substrings into the mangled names!  This is
  125080             :        // inappropriate because the mangled names have to be able to be variable names and must follow
  125081             :        // C/C++ standards for construction of variable names.
  125082             :           virtual SgName get_mangled_name() const override;
  125083             : 
  125084             :        // DQ (10/6/2006): Support for mangle name caching (for better performance)
  125085             :        // std::map<SgNode*,std::string> & get_mangledNameCache();
  125086             :        // std::map<std::string, int> & get_shortMangledNameCache();
  125087             : 
  125088             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  125089             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  125090             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  125091             :           virtual bool cfgIsIndexInteresting(unsigned int idx) const override;
  125092             :           virtual unsigned int cfgIndexForEnd() const override;
  125093             : #endif
  125094             : 
  125095             : #if 1
  125096             :        // DQ (10/1/2009): Adding support for new name qualification.
  125097             :           void buildStatementNumbering();
  125098             : #endif
  125099             : 
  125100             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  125101             : 
  125102             :      public:
  125103             :           virtual void append_declaration  ( SgDeclarationStatement* element );
  125104             :           virtual void prepend_declaration ( SgDeclarationStatement* element );
  125105             : 
  125106             :      public:
  125107             :        // New functions added
  125108             :        // void append_declaration  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  125109             :        // void prepend_declaration ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  125110             : 
  125111             :        // void insert_declaration  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  125112             : 
  125113             : 
  125114             :      public:
  125115             : 
  125116             : 
  125117             : 
  125118             : 
  125119             :      protected:
  125120             :           virtual bool insert_child(SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false) override;
  125121             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  125122             : 
  125123             :      public:
  125124             : 
  125125             : #if ALT_FIXUP_COPY
  125126             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  125127             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  125128             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  125129             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  125130             : #else
  125131             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  125132             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  125133             : #endif
  125134             : 
  125135             : 
  125136             : 
  125137             : // End of memberFunctionString
  125138             : // Start of memberFunctionString
  125139             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  125140             : 
  125141             : // *** COMMON CODE SECTION BEGINS HERE ***
  125142             : 
  125143             :     public:
  125144             : 
  125145             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  125146             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  125147             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  125148             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  125149             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  125150             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  125151             : 
  125152             :       /*! \brief returns a string representing the class name */
  125153             :           virtual std::string class_name() const override;
  125154             : 
  125155             :       /*! \brief returns new style SageIII enum values */
  125156             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  125157             : 
  125158             :       /*! \brief static variant value */
  125159             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  125160             :        // static const VariantT static_variant = V_SgGlobal;
  125161             :           enum { static_variant = V_SgGlobal };
  125162             : 
  125163             :        /* the generated cast function */
  125164             :       /*! \brief Casts pointer from base class to derived class */
  125165             :           ROSE_DLL_API friend       SgGlobal* isSgGlobal(       SgNode * s );
  125166             : 
  125167             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  125168             :           ROSE_DLL_API friend const SgGlobal* isSgGlobal( const SgNode * s );
  125169             : 
  125170             :      // ******************************************
  125171             :      // * Memory Pool / New / Delete
  125172             :      // ******************************************
  125173             : 
  125174             :      public:
  125175             :           /// \private
  125176             :           static const unsigned pool_size; //
  125177             :           /// \private
  125178             :           static std::vector<unsigned char *> pools; //
  125179             :           /// \private
  125180             :           static SgGlobal * next_node; // 
  125181             : 
  125182             :           /// \private
  125183             :           static unsigned long initializeStorageClassArray(SgGlobalStorageClass *); //
  125184             : 
  125185             :           /// \private
  125186             :           static void clearMemoryPool(); //
  125187             :           static void deleteMemoryPool(); //
  125188             : 
  125189             :           /// \private
  125190             :           static void extendMemoryPoolForFileIO(); //
  125191             : 
  125192             :           /// \private
  125193             :           static SgGlobal * getPointerFromGlobalIndex(unsigned long); //
  125194             :           /// \private
  125195             :           static SgGlobal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  125196             : 
  125197             :           /// \private
  125198             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  125199             :           /// \private
  125200             :           static void resetValidFreepointers(); //
  125201             :           /// \private
  125202             :           static unsigned long getNumberOfLastValidPointer(); //
  125203             : 
  125204             : 
  125205             : #if defined(INLINE_FUNCTIONS)
  125206             :       /*! \brief returns pointer to newly allocated IR node */
  125207             :           inline void *operator new (size_t size);
  125208             : #else
  125209             :       /*! \brief returns pointer to newly allocated IR node */
  125210             :           void *operator new (size_t size);
  125211             : #endif
  125212             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  125213             :           void operator delete (void* pointer, size_t size);
  125214             : 
  125215             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  125216          12 :           void operator delete (void* pointer)
  125217             :              {
  125218             :             // This is the generated delete operator...
  125219          12 :                SgGlobal::operator delete (pointer,sizeof(SgGlobal));
  125220             :              }
  125221             : 
  125222             :       /*! \brief Returns the total number of IR nodes of this type */
  125223             :           static size_t numberOfNodes();
  125224             : 
  125225             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  125226             :           static size_t memoryUsage();
  125227             : 
  125228             :       // End of scope which started in IR nodes specific code 
  125229             :       /* */
  125230             : 
  125231             :       /* name Internal Functions
  125232             :           \brief Internal functions ... incomplete-documentation
  125233             : 
  125234             :           These functions have been made public as part of the design, but they are suggested for internal use 
  125235             :           or by particularly knowledgeable users for specialized tools or applications.
  125236             : 
  125237             :           \internal We could not make these private because they are required by user for special purposes. And 
  125238             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  125239             :          
  125240             :        */
  125241             : 
  125242             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  125243             :        // overridden in every class by *generated* implementation
  125244             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  125245             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  125246             :        // MS: 06/28/02 container of names of variables or container indices 
  125247             :        // used used in the traversal to access AST successor nodes
  125248             :        // overridden in every class by *generated* implementation
  125249             :       /*! \brief container of names of variables or container indices used used in the traversal
  125250             :           to access AST successor nodes overridden in every class by *generated* implementation */
  125251             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  125252             : 
  125253             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  125254             :        // than all the vector copies. The implementation for these functions is generated for each class.
  125255             :       /*! \brief return number of children in the traversal successor list */
  125256             :           virtual size_t get_numberOfTraversalSuccessors() override;
  125257             :       /*! \brief index-based access to traversal successors by index number */
  125258             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  125259             :       /*! \brief index-based access to traversal successors by child node */
  125260             :           virtual size_t get_childIndex(SgNode *child) override;
  125261             : 
  125262             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  125263             :        // MS: 08/16/2002 method for generating RTI information
  125264             :       /*! \brief return C++ Runtime-Time-Information */
  125265             :           virtual RTIReturnType roseRTI() override;
  125266             : #endif
  125267             :       /* */
  125268             : 
  125269             : 
  125270             : 
  125271             :       /* name Deprecated Functions
  125272             :           \brief Deprecated functions ... incomplete-documentation
  125273             : 
  125274             :           These functions have been deprecated from use.
  125275             :        */
  125276             :       /* */
  125277             : 
  125278             :       /*! returns a C style string (char*) representing the class name */
  125279             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  125280             : 
  125281             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  125282             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  125283             : #if 0
  125284             :       /*! returns old style Sage II enum values */
  125285             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  125286             :       /*! returns old style Sage II enum values */
  125287             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  125288             : #endif
  125289             :       /* */
  125290             : 
  125291             : 
  125292             : 
  125293             : 
  125294             :      public:
  125295             :       /* name Traversal Support Functions
  125296             :           \brief Traversal support functions ... incomplete-documentation
  125297             : 
  125298             :           These functions have been made public as part of the design, but they are suggested for internal use 
  125299             :           or by particularly knowledgable users for specialized tools or applications.
  125300             :        */
  125301             :       /* */
  125302             : 
  125303             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  125304             :        // (inferior to ROSE traversal mechanism, experimental).
  125305             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  125306             :        */
  125307             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  125308             : 
  125309             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  125310             :       /*! \brief support for the classic visitor pattern done in GoF */
  125311             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  125312             : 
  125313             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  125314             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  125315             :        */
  125316             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  125317             : 
  125318             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  125319             :        */
  125320             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  125321             : 
  125322             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  125323             :        // This traversal helps support internal tools that call static member functions.
  125324             :        // note: this function operates on the memory pools.
  125325             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  125326             :        */
  125327             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  125328             :       /* */
  125329             : 
  125330             : 
  125331             :      public:
  125332             :       /* name Memory Allocation Functions
  125333             :           \brief Memory allocations functions ... incomplete-documentation
  125334             : 
  125335             :           These functions have been made public as part of the design, but they are suggested for internal use 
  125336             :           or by particularly knowledgable users for specialized tools or applications.
  125337             :        */
  125338             :       /* */
  125339             : 
  125340             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  125341             : 
  125342             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  125343             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  125344             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  125345             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  125346             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  125347             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  125348             :           being used with the AST File I/O mechanism.
  125349             :        */
  125350             :           virtual bool isInMemoryPool() override;
  125351             : 
  125352             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  125353             : 
  125354             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  125355             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  125356             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  125357             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  125358             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  125359             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  125360             :           being used with the AST File I/O mechanism.
  125361             :        */
  125362             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  125363             : 
  125364             :       // DQ (4/30/2006): Modified to be a const function.
  125365             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  125366             : 
  125367             :           This functions is part of general support for many possible tools to operate 
  125368             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  125369             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  125370             :           less than the set of pointers used by the AST file I/O. This is part of
  125371             :           work implemented by Andreas, and support tools such as the AST graph generation.
  125372             : 
  125373             :           \warning This function can return unexpected data members and thus the 
  125374             :                    order and the number of elements is unpredicable and subject 
  125375             :                    to change.
  125376             : 
  125377             :           \returns STL vector of pairs of SgNode* and strings
  125378             :        */
  125379             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  125380             : 
  125381             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  125382             : 
  125383             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  125384             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  125385             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  125386             : 
  125387             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  125388             :                    and subject to change.
  125389             :        */
  125390             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  125391             : 
  125392             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  125393             : 
  125394             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  125395             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  125396             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  125397             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  125398             : 
  125399             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  125400             : 
  125401             :           \returns long
  125402             :        */
  125403             :           virtual long getChildIndex( SgNode* childNode ) const override;
  125404             : 
  125405             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  125406             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  125407             :       /* \brief Constructor for use by AST File I/O Mechanism
  125408             : 
  125409             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  125410             :           which obtained via fast binary file I/O from disk.
  125411             :        */
  125412             :        // SgGlobal( SgGlobalStorageClass& source );
  125413             : 
  125414             : 
  125415             : 
  125416             : 
  125417             : 
  125418             :  // JH (10/24/2005): methods added to support the ast file IO
  125419             :     private:
  125420             : 
  125421             :       /* name AST Memory Allocation Support Functions
  125422             :           \brief Memory allocations support....
  125423             : 
  125424             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  125425             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  125426             :           and support the AST File I/O Mechanism.
  125427             :        */
  125428             :       /* */
  125429             : 
  125430             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  125431             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  125432             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  125433             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  125434             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  125435             :           a correspinding one in the AST_FILE_IO class!
  125436             :        */
  125437             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  125438             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  125439             :       /* \brief Typedef used for low level memory access.
  125440             :        */
  125441             :        // typedef unsigned char* TestType;
  125442             : 
  125443             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  125444             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  125445             :       /* \brief Typedef used to hold memory addresses as values.
  125446             :        */
  125447             :        // typedef unsigned long  AddressType;
  125448             : 
  125449             : 
  125450             : 
  125451             :        // necessary, to have direct access to the p_freepointer and the private methods !
  125452             :       /*! \brief friend class declaration to support AST File I/O */
  125453             :           friend class AST_FILE_IO;
  125454             : 
  125455             :       /*! \brief friend class declaration to support AST File I/O */
  125456             :           friend class SgGlobalStorageClass;
  125457             : 
  125458             :       /*! \brief friend class declaration to support AST File I/O */
  125459             :           friend class AstSpecificDataManagingClass;
  125460             : 
  125461             :       /*! \brief friend class declaration to support AST File I/O */
  125462             :           friend class AstSpecificDataManagingClassStorageClass;
  125463             :     public:
  125464             :       /*! \brief IR node constructor to support AST File I/O */
  125465             :           SgGlobal( const SgGlobalStorageClass& source );
  125466             : 
  125467             :  // private: // JJW hack
  125468             :        /*
  125469             :           name AST Memory Allocation Support Variables
  125470             :           Memory allocations support variables 
  125471             : 
  125472             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  125473             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  125474             :           and support the AST File I/O Mechanism.
  125475             :        */
  125476             :       /* */
  125477             : 
  125478             :     public:
  125479             : 
  125480             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  125481             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  125482             :       // virtual SgNode* addRegExpAttribute();
  125483             :       /*! \brief Support for AST matching using regular expression.
  125484             : 
  125485             :           This support is incomplete and the subject of current research to define 
  125486             :           RegEx trees to support inexact matching.
  125487             :        */
  125488             :           SgGlobal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  125489             : 
  125490             : // *** COMMON CODE SECTION ENDS HERE ***
  125491             : 
  125492             : 
  125493             : // End of memberFunctionString
  125494             : // Start of memberFunctionString
  125495             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  125496             : 
  125497             :      // the generated cast function
  125498             :      // friend ROSE_DLL_API SgGlobal* isSgGlobal ( SgNode* s );
  125499             : 
  125500             :           typedef SgScopeStatement base_node_type;
  125501             : 
  125502             : 
  125503             : // End of memberFunctionString
  125504             : // Start of memberFunctionString
  125505             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  125506             : 
  125507             :           void post_construction_initialization() override;
  125508             : 
  125509             : 
  125510             : // End of memberFunctionString
  125511             : 
  125512             :      public: 
  125513             :          const SgDeclarationStatementPtrList&  get_declarations() const;
  125514             :          SgDeclarationStatementPtrList& get_declarations(); 
  125515             : 
  125516             : 
  125517             :      public: 
  125518             :          virtual ~SgGlobal();
  125519             : 
  125520             : 
  125521             :      public: 
  125522             :          SgGlobal(Sg_File_Info* startOfConstruct ); 
  125523             :          SgGlobal(); 
  125524             : 
  125525             :     protected:
  125526             : // Start of memberFunctionString
  125527             : SgDeclarationStatementPtrList p_declarations;
  125528             :           
  125529             : // End of memberFunctionString
  125530             : 
  125531             :     friend struct Rose::Traits::generated::describe_node_t<SgGlobal>;
  125532             :     friend struct Rose::Traits::generated::describe_field_t<SgGlobal, SgDeclarationStatementPtrList,&SgGlobal::p_declarations>;
  125533             : 
  125534             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125535             : 
  125536             : 
  125537             :    };
  125538             : #endif
  125539             : 
  125540             : // postdeclarations for SgGlobal
  125541             : 
  125542             : /* #line 125543 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125543             : 
  125544             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  125545             : 
  125546             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125547             : 
  125548             : 
  125549             : /* #line 125550 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125550             : 
  125551             : 
  125552             : 
  125553             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125554             : 
  125555             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  125556             : //      This code is automatically generated for each 
  125557             : //      terminal and non-terminal within the defined 
  125558             : //      grammar.  There is a simple way to change the 
  125559             : //      code to fix bugs etc.  See the ROSE README file
  125560             : //      for directions.
  125561             : 
  125562             : // tps: (02/22/2010): Adding DLL export requirements
  125563             : #include "rosedll.h"
  125564             : 
  125565             : // predeclarations for SgBasicBlock
  125566             : 
  125567             : /* #line 125568 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125568             : 
  125569             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  125570             : 
  125571             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  125572             : 
  125573             : #if 1
  125574             : // Class Definition for SgBasicBlock
  125575             : class ROSE_DLL_API SgBasicBlock  : public SgScopeStatement
  125576             :    {
  125577             :      public:
  125578             : 
  125579             : 
  125580             : /* #line 125581 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  125581             : 
  125582             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  125583             : // Start of memberFunctionString
  125584             : /* #line 1006 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  125585             : 
  125586             : 
  125587             :        // DQ (9/8/2004): Added to support general name qualification
  125588             :           virtual SgName get_qualified_name() const override;
  125589             : 
  125590             :        // DQ (2/22/2007): Added for uniform support of mangled names
  125591             :           virtual SgName get_mangled_name() const override;
  125592             : 
  125593             :        // Special case constructor
  125594             :           SgBasicBlock ( Sg_File_Info* info = NULL, SgStatement* stmt = NULL );
  125595             :        // SgBasicBlock ( Sg_File_Info* info);
  125596             :           SgBasicBlock ( SgStatement* stmt );
  125597             : 
  125598             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  125599             : 
  125600             :      public:
  125601             :           virtual void append_statement  ( SgStatement* element );
  125602             :           virtual void prepend_statement ( SgStatement* element );
  125603             : 
  125604             :      public:
  125605             :        // New functions added
  125606             :        // void append_statement  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  125607             :        // void prepend_statement ( const SgStatementPtrList::iterator & list, SgStatement* element );
  125608             : 
  125609             :        // void insert_statement  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  125610             : 
  125611             : 
  125612             :      public:
  125613             : 
  125614             : 
  125615             : 
  125616             : 
  125617             :        // DQ (6/18/2007): Added these required function declarations explicitly so that we could test
  125618             :        // removing them from the template where they are generated excessively (and definitions are not
  125619             :        // implemented).
  125620             :        // void append_statement (const SgStatementPtrList::iterator& where, SgStatement* what);
  125621             :        // void prepend_statement(const SgStatementPtrList::iterator& where, SgStatement* what);
  125622             : 
  125623             :        protected:
  125624             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  125625             :           virtual bool insert_child(SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false) override;
  125626             : 
  125627             :       public:
  125628             : 
  125629             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  125630             :           virtual unsigned int cfgIndexForEnd() const override;
  125631             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  125632             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  125633             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  125634             : #endif
  125635             : 
  125636             :        // void prepend_statement(const SgStatementPtrList::iterator& where, SgStatement *what);
  125637             :        // void append_statement(const SgStatementPtrList::iterator& where, SgStatement *what);
  125638             : 
  125639             : #if ALT_FIXUP_COPY
  125640             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  125641             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  125642             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  125643             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  125644             : #else
  125645             :        // DQ (10/6/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  125646             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  125647             : #endif
  125648             : 
  125649             : 
  125650             : // End of memberFunctionString
  125651             : // Start of memberFunctionString
  125652             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  125653             : 
  125654             : // *** COMMON CODE SECTION BEGINS HERE ***
  125655             : 
  125656             :     public:
  125657             : 
  125658             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  125659             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  125660             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  125661             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  125662             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  125663             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  125664             : 
  125665             :       /*! \brief returns a string representing the class name */
  125666             :           virtual std::string class_name() const override;
  125667             : 
  125668             :       /*! \brief returns new style SageIII enum values */
  125669             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  125670             : 
  125671             :       /*! \brief static variant value */
  125672             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  125673             :        // static const VariantT static_variant = V_SgBasicBlock;
  125674             :           enum { static_variant = V_SgBasicBlock };
  125675             : 
  125676             :        /* the generated cast function */
  125677             :       /*! \brief Casts pointer from base class to derived class */
  125678             :           ROSE_DLL_API friend       SgBasicBlock* isSgBasicBlock(       SgNode * s );
  125679             : 
  125680             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  125681             :           ROSE_DLL_API friend const SgBasicBlock* isSgBasicBlock( const SgNode * s );
  125682             : 
  125683             :      // ******************************************
  125684             :      // * Memory Pool / New / Delete
  125685             :      // ******************************************
  125686             : 
  125687             :      public:
  125688             :           /// \private
  125689             :           static const unsigned pool_size; //
  125690             :           /// \private
  125691             :           static std::vector<unsigned char *> pools; //
  125692             :           /// \private
  125693             :           static SgBasicBlock * next_node; // 
  125694             : 
  125695             :           /// \private
  125696             :           static unsigned long initializeStorageClassArray(SgBasicBlockStorageClass *); //
  125697             : 
  125698             :           /// \private
  125699             :           static void clearMemoryPool(); //
  125700             :           static void deleteMemoryPool(); //
  125701             : 
  125702             :           /// \private
  125703             :           static void extendMemoryPoolForFileIO(); //
  125704             : 
  125705             :           /// \private
  125706             :           static SgBasicBlock * getPointerFromGlobalIndex(unsigned long); //
  125707             :           /// \private
  125708             :           static SgBasicBlock * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  125709             : 
  125710             :           /// \private
  125711             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  125712             :           /// \private
  125713             :           static void resetValidFreepointers(); //
  125714             :           /// \private
  125715             :           static unsigned long getNumberOfLastValidPointer(); //
  125716             : 
  125717             : 
  125718             : #if defined(INLINE_FUNCTIONS)
  125719             :       /*! \brief returns pointer to newly allocated IR node */
  125720             :           inline void *operator new (size_t size);
  125721             : #else
  125722             :       /*! \brief returns pointer to newly allocated IR node */
  125723             :           void *operator new (size_t size);
  125724             : #endif
  125725             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  125726             :           void operator delete (void* pointer, size_t size);
  125727             : 
  125728             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  125729        5731 :           void operator delete (void* pointer)
  125730             :              {
  125731             :             // This is the generated delete operator...
  125732        5731 :                SgBasicBlock::operator delete (pointer,sizeof(SgBasicBlock));
  125733             :              }
  125734             : 
  125735             :       /*! \brief Returns the total number of IR nodes of this type */
  125736             :           static size_t numberOfNodes();
  125737             : 
  125738             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  125739             :           static size_t memoryUsage();
  125740             : 
  125741             :       // End of scope which started in IR nodes specific code 
  125742             :       /* */
  125743             : 
  125744             :       /* name Internal Functions
  125745             :           \brief Internal functions ... incomplete-documentation
  125746             : 
  125747             :           These functions have been made public as part of the design, but they are suggested for internal use 
  125748             :           or by particularly knowledgeable users for specialized tools or applications.
  125749             : 
  125750             :           \internal We could not make these private because they are required by user for special purposes. And 
  125751             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  125752             :          
  125753             :        */
  125754             : 
  125755             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  125756             :        // overridden in every class by *generated* implementation
  125757             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  125758             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  125759             :        // MS: 06/28/02 container of names of variables or container indices 
  125760             :        // used used in the traversal to access AST successor nodes
  125761             :        // overridden in every class by *generated* implementation
  125762             :       /*! \brief container of names of variables or container indices used used in the traversal
  125763             :           to access AST successor nodes overridden in every class by *generated* implementation */
  125764             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  125765             : 
  125766             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  125767             :        // than all the vector copies. The implementation for these functions is generated for each class.
  125768             :       /*! \brief return number of children in the traversal successor list */
  125769             :           virtual size_t get_numberOfTraversalSuccessors() override;
  125770             :       /*! \brief index-based access to traversal successors by index number */
  125771             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  125772             :       /*! \brief index-based access to traversal successors by child node */
  125773             :           virtual size_t get_childIndex(SgNode *child) override;
  125774             : 
  125775             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  125776             :        // MS: 08/16/2002 method for generating RTI information
  125777             :       /*! \brief return C++ Runtime-Time-Information */
  125778             :           virtual RTIReturnType roseRTI() override;
  125779             : #endif
  125780             :       /* */
  125781             : 
  125782             : 
  125783             : 
  125784             :       /* name Deprecated Functions
  125785             :           \brief Deprecated functions ... incomplete-documentation
  125786             : 
  125787             :           These functions have been deprecated from use.
  125788             :        */
  125789             :       /* */
  125790             : 
  125791             :       /*! returns a C style string (char*) representing the class name */
  125792             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  125793             : 
  125794             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  125795             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  125796             : #if 0
  125797             :       /*! returns old style Sage II enum values */
  125798             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  125799             :       /*! returns old style Sage II enum values */
  125800             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  125801             : #endif
  125802             :       /* */
  125803             : 
  125804             : 
  125805             : 
  125806             : 
  125807             :      public:
  125808             :       /* name Traversal Support Functions
  125809             :           \brief Traversal support functions ... incomplete-documentation
  125810             : 
  125811             :           These functions have been made public as part of the design, but they are suggested for internal use 
  125812             :           or by particularly knowledgable users for specialized tools or applications.
  125813             :        */
  125814             :       /* */
  125815             : 
  125816             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  125817             :        // (inferior to ROSE traversal mechanism, experimental).
  125818             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  125819             :        */
  125820             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  125821             : 
  125822             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  125823             :       /*! \brief support for the classic visitor pattern done in GoF */
  125824             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  125825             : 
  125826             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  125827             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  125828             :        */
  125829             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  125830             : 
  125831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  125832             :        */
  125833             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  125834             : 
  125835             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  125836             :        // This traversal helps support internal tools that call static member functions.
  125837             :        // note: this function operates on the memory pools.
  125838             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  125839             :        */
  125840             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  125841             :       /* */
  125842             : 
  125843             : 
  125844             :      public:
  125845             :       /* name Memory Allocation Functions
  125846             :           \brief Memory allocations functions ... incomplete-documentation
  125847             : 
  125848             :           These functions have been made public as part of the design, but they are suggested for internal use 
  125849             :           or by particularly knowledgable users for specialized tools or applications.
  125850             :        */
  125851             :       /* */
  125852             : 
  125853             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  125854             : 
  125855             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  125856             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  125857             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  125858             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  125859             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  125860             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  125861             :           being used with the AST File I/O mechanism.
  125862             :        */
  125863             :           virtual bool isInMemoryPool() override;
  125864             : 
  125865             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  125866             : 
  125867             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  125868             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  125869             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  125870             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  125871             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  125872             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  125873             :           being used with the AST File I/O mechanism.
  125874             :        */
  125875             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  125876             : 
  125877             :       // DQ (4/30/2006): Modified to be a const function.
  125878             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  125879             : 
  125880             :           This functions is part of general support for many possible tools to operate 
  125881             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  125882             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  125883             :           less than the set of pointers used by the AST file I/O. This is part of
  125884             :           work implemented by Andreas, and support tools such as the AST graph generation.
  125885             : 
  125886             :           \warning This function can return unexpected data members and thus the 
  125887             :                    order and the number of elements is unpredicable and subject 
  125888             :                    to change.
  125889             : 
  125890             :           \returns STL vector of pairs of SgNode* and strings
  125891             :        */
  125892             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  125893             : 
  125894             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  125895             : 
  125896             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  125897             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  125898             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  125899             : 
  125900             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  125901             :                    and subject to change.
  125902             :        */
  125903             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  125904             : 
  125905             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  125906             : 
  125907             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  125908             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  125909             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  125910             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  125911             : 
  125912             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  125913             : 
  125914             :           \returns long
  125915             :        */
  125916             :           virtual long getChildIndex( SgNode* childNode ) const override;
  125917             : 
  125918             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  125919             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  125920             :       /* \brief Constructor for use by AST File I/O Mechanism
  125921             : 
  125922             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  125923             :           which obtained via fast binary file I/O from disk.
  125924             :        */
  125925             :        // SgBasicBlock( SgBasicBlockStorageClass& source );
  125926             : 
  125927             : 
  125928             : 
  125929             : 
  125930             : 
  125931             :  // JH (10/24/2005): methods added to support the ast file IO
  125932             :     private:
  125933             : 
  125934             :       /* name AST Memory Allocation Support Functions
  125935             :           \brief Memory allocations support....
  125936             : 
  125937             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  125938             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  125939             :           and support the AST File I/O Mechanism.
  125940             :        */
  125941             :       /* */
  125942             : 
  125943             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  125944             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  125945             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  125946             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  125947             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  125948             :           a correspinding one in the AST_FILE_IO class!
  125949             :        */
  125950             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  125951             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  125952             :       /* \brief Typedef used for low level memory access.
  125953             :        */
  125954             :        // typedef unsigned char* TestType;
  125955             : 
  125956             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  125957             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  125958             :       /* \brief Typedef used to hold memory addresses as values.
  125959             :        */
  125960             :        // typedef unsigned long  AddressType;
  125961             : 
  125962             : 
  125963             : 
  125964             :        // necessary, to have direct access to the p_freepointer and the private methods !
  125965             :       /*! \brief friend class declaration to support AST File I/O */
  125966             :           friend class AST_FILE_IO;
  125967             : 
  125968             :       /*! \brief friend class declaration to support AST File I/O */
  125969             :           friend class SgBasicBlockStorageClass;
  125970             : 
  125971             :       /*! \brief friend class declaration to support AST File I/O */
  125972             :           friend class AstSpecificDataManagingClass;
  125973             : 
  125974             :       /*! \brief friend class declaration to support AST File I/O */
  125975             :           friend class AstSpecificDataManagingClassStorageClass;
  125976             :     public:
  125977             :       /*! \brief IR node constructor to support AST File I/O */
  125978             :           SgBasicBlock( const SgBasicBlockStorageClass& source );
  125979             : 
  125980             :  // private: // JJW hack
  125981             :        /*
  125982             :           name AST Memory Allocation Support Variables
  125983             :           Memory allocations support variables 
  125984             : 
  125985             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  125986             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  125987             :           and support the AST File I/O Mechanism.
  125988             :        */
  125989             :       /* */
  125990             : 
  125991             :     public:
  125992             : 
  125993             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  125994             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  125995             :       // virtual SgNode* addRegExpAttribute();
  125996             :       /*! \brief Support for AST matching using regular expression.
  125997             : 
  125998             :           This support is incomplete and the subject of current research to define 
  125999             :           RegEx trees to support inexact matching.
  126000             :        */
  126001             :           SgBasicBlock* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  126002             : 
  126003             : // *** COMMON CODE SECTION ENDS HERE ***
  126004             : 
  126005             : 
  126006             : // End of memberFunctionString
  126007             : // Start of memberFunctionString
  126008             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  126009             : 
  126010             :      // the generated cast function
  126011             :      // friend ROSE_DLL_API SgBasicBlock* isSgBasicBlock ( SgNode* s );
  126012             : 
  126013             :           typedef SgScopeStatement base_node_type;
  126014             : 
  126015             : 
  126016             : // End of memberFunctionString
  126017             : // Start of memberFunctionString
  126018             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  126019             : 
  126020             :           void post_construction_initialization() override;
  126021             : 
  126022             : 
  126023             : // End of memberFunctionString
  126024             : 
  126025             :      public: 
  126026             :          const SgStatementPtrList&  get_statements() const;
  126027             :          SgStatementPtrList& get_statements(); 
  126028             : 
  126029             :      public: 
  126030             :          std::string get_asm_function_body() const;
  126031             :          void set_asm_function_body(std::string asm_function_body);
  126032             : 
  126033             :      public: 
  126034             :          std::string get_string_label() const;
  126035             :          void set_string_label(std::string string_label);
  126036             : 
  126037             : 
  126038             :      public: 
  126039             :          virtual ~SgBasicBlock();
  126040             : 
  126041             :     protected:
  126042             : // Start of memberFunctionString
  126043             : SgStatementPtrList p_statements;
  126044             :           
  126045             : // End of memberFunctionString
  126046             : // Start of memberFunctionString
  126047             : std::string p_asm_function_body;
  126048             :           
  126049             : // End of memberFunctionString
  126050             : // Start of memberFunctionString
  126051             : std::string p_string_label;
  126052             :           
  126053             : // End of memberFunctionString
  126054             : 
  126055             :     friend struct Rose::Traits::generated::describe_node_t<SgBasicBlock>;
  126056             :     friend struct Rose::Traits::generated::describe_field_t<SgBasicBlock, SgStatementPtrList,&SgBasicBlock::p_statements>;
  126057             :     friend struct Rose::Traits::generated::describe_field_t<SgBasicBlock, std::string,&SgBasicBlock::p_asm_function_body>;
  126058             :     friend struct Rose::Traits::generated::describe_field_t<SgBasicBlock, std::string,&SgBasicBlock::p_string_label>;
  126059             : 
  126060             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126061             : 
  126062             : 
  126063             :    };
  126064             : #endif
  126065             : 
  126066             : // postdeclarations for SgBasicBlock
  126067             : 
  126068             : /* #line 126069 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126069             : /* #line 1055 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  126070             : 
  126071             : // Previous home to StatementListInsertChild() template function , moved to DECLARATION_STATEMENT_POSTDECLARATION
  126072             : 
  126073             : 
  126074             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  126075             : 
  126076             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126077             : 
  126078             : 
  126079             : /* #line 126080 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126080             : 
  126081             : 
  126082             : 
  126083             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126084             : 
  126085             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  126086             : //      This code is automatically generated for each 
  126087             : //      terminal and non-terminal within the defined 
  126088             : //      grammar.  There is a simple way to change the 
  126089             : //      code to fix bugs etc.  See the ROSE README file
  126090             : //      for directions.
  126091             : 
  126092             : // tps: (02/22/2010): Adding DLL export requirements
  126093             : #include "rosedll.h"
  126094             : 
  126095             : // predeclarations for SgIfStmt
  126096             : 
  126097             : /* #line 126098 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126098             : 
  126099             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  126100             : 
  126101             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126102             : 
  126103             : #if 1
  126104             : // Class Definition for SgIfStmt
  126105             : class ROSE_DLL_API SgIfStmt  : public SgScopeStatement
  126106             :    {
  126107             :      public:
  126108             : 
  126109             : 
  126110             : /* #line 126111 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126111             : 
  126112             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  126113             : // Start of memberFunctionString
  126114             : /* #line 1290 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  126115             : 
  126116             : 
  126117             :       protected:
  126118             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  126119             : 
  126120             :       public:
  126121             : 
  126122             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  126123             :           virtual unsigned int cfgIndexForEnd() const override;
  126124             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  126125             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  126126             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  126127             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  126128             : #endif
  126129             : 
  126130             :        // DQ (2/22/2007): Added for uniform support of mangled names
  126131             :           virtual SgName get_mangled_name() const override;
  126132             : 
  126133             : #if ALT_FIXUP_COPY
  126134             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  126135             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  126136             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  126137             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  126138             : #else
  126139             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  126140             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  126141             : #endif
  126142             : 
  126143             : 
  126144             : 
  126145             : // End of memberFunctionString
  126146             : // Start of memberFunctionString
  126147             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  126148             : 
  126149             : // *** COMMON CODE SECTION BEGINS HERE ***
  126150             : 
  126151             :     public:
  126152             : 
  126153             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  126154             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  126155             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  126156             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  126157             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  126158             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  126159             : 
  126160             :       /*! \brief returns a string representing the class name */
  126161             :           virtual std::string class_name() const override;
  126162             : 
  126163             :       /*! \brief returns new style SageIII enum values */
  126164             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  126165             : 
  126166             :       /*! \brief static variant value */
  126167             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  126168             :        // static const VariantT static_variant = V_SgIfStmt;
  126169             :           enum { static_variant = V_SgIfStmt };
  126170             : 
  126171             :        /* the generated cast function */
  126172             :       /*! \brief Casts pointer from base class to derived class */
  126173             :           ROSE_DLL_API friend       SgIfStmt* isSgIfStmt(       SgNode * s );
  126174             : 
  126175             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  126176             :           ROSE_DLL_API friend const SgIfStmt* isSgIfStmt( const SgNode * s );
  126177             : 
  126178             :      // ******************************************
  126179             :      // * Memory Pool / New / Delete
  126180             :      // ******************************************
  126181             : 
  126182             :      public:
  126183             :           /// \private
  126184             :           static const unsigned pool_size; //
  126185             :           /// \private
  126186             :           static std::vector<unsigned char *> pools; //
  126187             :           /// \private
  126188             :           static SgIfStmt * next_node; // 
  126189             : 
  126190             :           /// \private
  126191             :           static unsigned long initializeStorageClassArray(SgIfStmtStorageClass *); //
  126192             : 
  126193             :           /// \private
  126194             :           static void clearMemoryPool(); //
  126195             :           static void deleteMemoryPool(); //
  126196             : 
  126197             :           /// \private
  126198             :           static void extendMemoryPoolForFileIO(); //
  126199             : 
  126200             :           /// \private
  126201             :           static SgIfStmt * getPointerFromGlobalIndex(unsigned long); //
  126202             :           /// \private
  126203             :           static SgIfStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  126204             : 
  126205             :           /// \private
  126206             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  126207             :           /// \private
  126208             :           static void resetValidFreepointers(); //
  126209             :           /// \private
  126210             :           static unsigned long getNumberOfLastValidPointer(); //
  126211             : 
  126212             : 
  126213             : #if defined(INLINE_FUNCTIONS)
  126214             :       /*! \brief returns pointer to newly allocated IR node */
  126215             :           inline void *operator new (size_t size);
  126216             : #else
  126217             :       /*! \brief returns pointer to newly allocated IR node */
  126218             :           void *operator new (size_t size);
  126219             : #endif
  126220             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  126221             :           void operator delete (void* pointer, size_t size);
  126222             : 
  126223             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  126224        1184 :           void operator delete (void* pointer)
  126225             :              {
  126226             :             // This is the generated delete operator...
  126227        1184 :                SgIfStmt::operator delete (pointer,sizeof(SgIfStmt));
  126228             :              }
  126229             : 
  126230             :       /*! \brief Returns the total number of IR nodes of this type */
  126231             :           static size_t numberOfNodes();
  126232             : 
  126233             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  126234             :           static size_t memoryUsage();
  126235             : 
  126236             :       // End of scope which started in IR nodes specific code 
  126237             :       /* */
  126238             : 
  126239             :       /* name Internal Functions
  126240             :           \brief Internal functions ... incomplete-documentation
  126241             : 
  126242             :           These functions have been made public as part of the design, but they are suggested for internal use 
  126243             :           or by particularly knowledgeable users for specialized tools or applications.
  126244             : 
  126245             :           \internal We could not make these private because they are required by user for special purposes. And 
  126246             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  126247             :          
  126248             :        */
  126249             : 
  126250             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  126251             :        // overridden in every class by *generated* implementation
  126252             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  126253             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  126254             :        // MS: 06/28/02 container of names of variables or container indices 
  126255             :        // used used in the traversal to access AST successor nodes
  126256             :        // overridden in every class by *generated* implementation
  126257             :       /*! \brief container of names of variables or container indices used used in the traversal
  126258             :           to access AST successor nodes overridden in every class by *generated* implementation */
  126259             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  126260             : 
  126261             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  126262             :        // than all the vector copies. The implementation for these functions is generated for each class.
  126263             :       /*! \brief return number of children in the traversal successor list */
  126264             :           virtual size_t get_numberOfTraversalSuccessors() override;
  126265             :       /*! \brief index-based access to traversal successors by index number */
  126266             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  126267             :       /*! \brief index-based access to traversal successors by child node */
  126268             :           virtual size_t get_childIndex(SgNode *child) override;
  126269             : 
  126270             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  126271             :        // MS: 08/16/2002 method for generating RTI information
  126272             :       /*! \brief return C++ Runtime-Time-Information */
  126273             :           virtual RTIReturnType roseRTI() override;
  126274             : #endif
  126275             :       /* */
  126276             : 
  126277             : 
  126278             : 
  126279             :       /* name Deprecated Functions
  126280             :           \brief Deprecated functions ... incomplete-documentation
  126281             : 
  126282             :           These functions have been deprecated from use.
  126283             :        */
  126284             :       /* */
  126285             : 
  126286             :       /*! returns a C style string (char*) representing the class name */
  126287             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  126288             : 
  126289             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  126290             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  126291             : #if 0
  126292             :       /*! returns old style Sage II enum values */
  126293             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  126294             :       /*! returns old style Sage II enum values */
  126295             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  126296             : #endif
  126297             :       /* */
  126298             : 
  126299             : 
  126300             : 
  126301             : 
  126302             :      public:
  126303             :       /* name Traversal Support Functions
  126304             :           \brief Traversal support functions ... incomplete-documentation
  126305             : 
  126306             :           These functions have been made public as part of the design, but they are suggested for internal use 
  126307             :           or by particularly knowledgable users for specialized tools or applications.
  126308             :        */
  126309             :       /* */
  126310             : 
  126311             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  126312             :        // (inferior to ROSE traversal mechanism, experimental).
  126313             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  126314             :        */
  126315             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  126316             : 
  126317             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  126318             :       /*! \brief support for the classic visitor pattern done in GoF */
  126319             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  126320             : 
  126321             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  126322             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  126323             :        */
  126324             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  126325             : 
  126326             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  126327             :        */
  126328             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  126329             : 
  126330             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  126331             :        // This traversal helps support internal tools that call static member functions.
  126332             :        // note: this function operates on the memory pools.
  126333             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  126334             :        */
  126335             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  126336             :       /* */
  126337             : 
  126338             : 
  126339             :      public:
  126340             :       /* name Memory Allocation Functions
  126341             :           \brief Memory allocations functions ... incomplete-documentation
  126342             : 
  126343             :           These functions have been made public as part of the design, but they are suggested for internal use 
  126344             :           or by particularly knowledgable users for specialized tools or applications.
  126345             :        */
  126346             :       /* */
  126347             : 
  126348             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  126349             : 
  126350             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  126351             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  126352             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  126353             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  126354             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  126355             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  126356             :           being used with the AST File I/O mechanism.
  126357             :        */
  126358             :           virtual bool isInMemoryPool() override;
  126359             : 
  126360             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  126361             : 
  126362             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  126363             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  126364             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  126365             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  126366             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  126367             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  126368             :           being used with the AST File I/O mechanism.
  126369             :        */
  126370             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  126371             : 
  126372             :       // DQ (4/30/2006): Modified to be a const function.
  126373             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  126374             : 
  126375             :           This functions is part of general support for many possible tools to operate 
  126376             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  126377             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  126378             :           less than the set of pointers used by the AST file I/O. This is part of
  126379             :           work implemented by Andreas, and support tools such as the AST graph generation.
  126380             : 
  126381             :           \warning This function can return unexpected data members and thus the 
  126382             :                    order and the number of elements is unpredicable and subject 
  126383             :                    to change.
  126384             : 
  126385             :           \returns STL vector of pairs of SgNode* and strings
  126386             :        */
  126387             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  126388             : 
  126389             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  126390             : 
  126391             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  126392             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  126393             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  126394             : 
  126395             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  126396             :                    and subject to change.
  126397             :        */
  126398             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  126399             : 
  126400             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  126401             : 
  126402             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  126403             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  126404             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  126405             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  126406             : 
  126407             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  126408             : 
  126409             :           \returns long
  126410             :        */
  126411             :           virtual long getChildIndex( SgNode* childNode ) const override;
  126412             : 
  126413             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  126414             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  126415             :       /* \brief Constructor for use by AST File I/O Mechanism
  126416             : 
  126417             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  126418             :           which obtained via fast binary file I/O from disk.
  126419             :        */
  126420             :        // SgIfStmt( SgIfStmtStorageClass& source );
  126421             : 
  126422             : 
  126423             : 
  126424             : 
  126425             : 
  126426             :  // JH (10/24/2005): methods added to support the ast file IO
  126427             :     private:
  126428             : 
  126429             :       /* name AST Memory Allocation Support Functions
  126430             :           \brief Memory allocations support....
  126431             : 
  126432             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  126433             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  126434             :           and support the AST File I/O Mechanism.
  126435             :        */
  126436             :       /* */
  126437             : 
  126438             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  126439             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  126440             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  126441             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  126442             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  126443             :           a correspinding one in the AST_FILE_IO class!
  126444             :        */
  126445             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  126446             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  126447             :       /* \brief Typedef used for low level memory access.
  126448             :        */
  126449             :        // typedef unsigned char* TestType;
  126450             : 
  126451             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  126452             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  126453             :       /* \brief Typedef used to hold memory addresses as values.
  126454             :        */
  126455             :        // typedef unsigned long  AddressType;
  126456             : 
  126457             : 
  126458             : 
  126459             :        // necessary, to have direct access to the p_freepointer and the private methods !
  126460             :       /*! \brief friend class declaration to support AST File I/O */
  126461             :           friend class AST_FILE_IO;
  126462             : 
  126463             :       /*! \brief friend class declaration to support AST File I/O */
  126464             :           friend class SgIfStmtStorageClass;
  126465             : 
  126466             :       /*! \brief friend class declaration to support AST File I/O */
  126467             :           friend class AstSpecificDataManagingClass;
  126468             : 
  126469             :       /*! \brief friend class declaration to support AST File I/O */
  126470             :           friend class AstSpecificDataManagingClassStorageClass;
  126471             :     public:
  126472             :       /*! \brief IR node constructor to support AST File I/O */
  126473             :           SgIfStmt( const SgIfStmtStorageClass& source );
  126474             : 
  126475             :  // private: // JJW hack
  126476             :        /*
  126477             :           name AST Memory Allocation Support Variables
  126478             :           Memory allocations support variables 
  126479             : 
  126480             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  126481             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  126482             :           and support the AST File I/O Mechanism.
  126483             :        */
  126484             :       /* */
  126485             : 
  126486             :     public:
  126487             : 
  126488             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  126489             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  126490             :       // virtual SgNode* addRegExpAttribute();
  126491             :       /*! \brief Support for AST matching using regular expression.
  126492             : 
  126493             :           This support is incomplete and the subject of current research to define 
  126494             :           RegEx trees to support inexact matching.
  126495             :        */
  126496             :           SgIfStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  126497             : 
  126498             : // *** COMMON CODE SECTION ENDS HERE ***
  126499             : 
  126500             : 
  126501             : // End of memberFunctionString
  126502             : // Start of memberFunctionString
  126503             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  126504             : 
  126505             :      // the generated cast function
  126506             :      // friend ROSE_DLL_API SgIfStmt* isSgIfStmt ( SgNode* s );
  126507             : 
  126508             :           typedef SgScopeStatement base_node_type;
  126509             : 
  126510             : 
  126511             : // End of memberFunctionString
  126512             : // Start of memberFunctionString
  126513             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  126514             : 
  126515             :           void post_construction_initialization() override;
  126516             : 
  126517             : 
  126518             : // End of memberFunctionString
  126519             : 
  126520             :      public: 
  126521             :          SgStatement* get_conditional() const;
  126522             :          void set_conditional(SgStatement* conditional);
  126523             : 
  126524             :      public: 
  126525             :          SgStatement* get_true_body() const;
  126526             :          void set_true_body(SgStatement* true_body);
  126527             : 
  126528             :      public: 
  126529             :          SgStatement* get_false_body() const;
  126530             :          void set_false_body(SgStatement* false_body);
  126531             : 
  126532             :      public: 
  126533             :          bool get_is_if_constexpr_statement() const;
  126534             :          void set_is_if_constexpr_statement(bool is_if_constexpr_statement);
  126535             : 
  126536             :      public: 
  126537             :          bool get_if_constexpr_value_known() const;
  126538             :          void set_if_constexpr_value_known(bool if_constexpr_value_known);
  126539             : 
  126540             :      public: 
  126541             :          bool get_if_constexpr_value() const;
  126542             :          void set_if_constexpr_value(bool if_constexpr_value);
  126543             : 
  126544             :      public: 
  126545             :          SgLabelRefExp* get_else_numeric_label() const;
  126546             :          void set_else_numeric_label(SgLabelRefExp* else_numeric_label);
  126547             : 
  126548             :      public: 
  126549             :          std::string get_string_label() const;
  126550             :          void set_string_label(std::string string_label);
  126551             : 
  126552             :      public: 
  126553             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  126554             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  126555             : 
  126556             :      public: 
  126557             :          bool get_has_end_statement() const;
  126558             :          void set_has_end_statement(bool has_end_statement);
  126559             : 
  126560             :      public: 
  126561             :          bool get_use_then_keyword() const;
  126562             :          void set_use_then_keyword(bool use_then_keyword);
  126563             : 
  126564             :      public: 
  126565             :          bool get_is_else_if_statement() const;
  126566             :          void set_is_else_if_statement(bool is_else_if_statement);
  126567             : 
  126568             : 
  126569             :      public: 
  126570             :          virtual ~SgIfStmt();
  126571             : 
  126572             : 
  126573             :      public: 
  126574             :          SgIfStmt(Sg_File_Info* startOfConstruct , SgStatement* conditional = NULL, SgStatement* true_body = NULL, SgStatement* false_body = NULL); 
  126575             :          SgIfStmt(SgStatement* conditional, SgStatement* true_body, SgStatement* false_body); 
  126576             : 
  126577             :     protected:
  126578             : // Start of memberFunctionString
  126579             : SgStatement* p_conditional;
  126580             :           
  126581             : // End of memberFunctionString
  126582             : // Start of memberFunctionString
  126583             : SgStatement* p_true_body;
  126584             :           
  126585             : // End of memberFunctionString
  126586             : // Start of memberFunctionString
  126587             : SgStatement* p_false_body;
  126588             :           
  126589             : // End of memberFunctionString
  126590             : // Start of memberFunctionString
  126591             : bool p_is_if_constexpr_statement;
  126592             :           
  126593             : // End of memberFunctionString
  126594             : // Start of memberFunctionString
  126595             : bool p_if_constexpr_value_known;
  126596             :           
  126597             : // End of memberFunctionString
  126598             : // Start of memberFunctionString
  126599             : bool p_if_constexpr_value;
  126600             :           
  126601             : // End of memberFunctionString
  126602             : // Start of memberFunctionString
  126603             : SgLabelRefExp* p_else_numeric_label;
  126604             :           
  126605             : // End of memberFunctionString
  126606             : // Start of memberFunctionString
  126607             : std::string p_string_label;
  126608             :           
  126609             : // End of memberFunctionString
  126610             : // Start of memberFunctionString
  126611             : SgLabelRefExp* p_end_numeric_label;
  126612             :           
  126613             : // End of memberFunctionString
  126614             : // Start of memberFunctionString
  126615             : bool p_has_end_statement;
  126616             :           
  126617             : // End of memberFunctionString
  126618             : // Start of memberFunctionString
  126619             : bool p_use_then_keyword;
  126620             :           
  126621             : // End of memberFunctionString
  126622             : // Start of memberFunctionString
  126623             : bool p_is_else_if_statement;
  126624             :           
  126625             : // End of memberFunctionString
  126626             : 
  126627             :     friend struct Rose::Traits::generated::describe_node_t<SgIfStmt>;
  126628             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, SgStatement*,&SgIfStmt::p_conditional>;
  126629             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, SgStatement*,&SgIfStmt::p_true_body>;
  126630             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, SgStatement*,&SgIfStmt::p_false_body>;
  126631             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, bool,&SgIfStmt::p_is_if_constexpr_statement>;
  126632             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, bool,&SgIfStmt::p_if_constexpr_value_known>;
  126633             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, bool,&SgIfStmt::p_if_constexpr_value>;
  126634             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, SgLabelRefExp*,&SgIfStmt::p_else_numeric_label>;
  126635             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, std::string,&SgIfStmt::p_string_label>;
  126636             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, SgLabelRefExp*,&SgIfStmt::p_end_numeric_label>;
  126637             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, bool,&SgIfStmt::p_has_end_statement>;
  126638             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, bool,&SgIfStmt::p_use_then_keyword>;
  126639             :     friend struct Rose::Traits::generated::describe_field_t<SgIfStmt, bool,&SgIfStmt::p_is_else_if_statement>;
  126640             : 
  126641             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126642             : 
  126643             : 
  126644             :    };
  126645             : #endif
  126646             : 
  126647             : // postdeclarations for SgIfStmt
  126648             : 
  126649             : /* #line 126650 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126650             : 
  126651             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  126652             : 
  126653             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126654             : 
  126655             : 
  126656             : /* #line 126657 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126657             : 
  126658             : 
  126659             : 
  126660             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126661             : 
  126662             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  126663             : //      This code is automatically generated for each 
  126664             : //      terminal and non-terminal within the defined 
  126665             : //      grammar.  There is a simple way to change the 
  126666             : //      code to fix bugs etc.  See the ROSE README file
  126667             : //      for directions.
  126668             : 
  126669             : // tps: (02/22/2010): Adding DLL export requirements
  126670             : #include "rosedll.h"
  126671             : 
  126672             : // predeclarations for SgForStatement
  126673             : 
  126674             : /* #line 126675 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126675             : 
  126676             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  126677             : 
  126678             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  126679             : 
  126680             : #if 1
  126681             : // Class Definition for SgForStatement
  126682             : class ROSE_DLL_API SgForStatement  : public SgScopeStatement
  126683             :    {
  126684             :      public:
  126685             : 
  126686             : 
  126687             : /* #line 126688 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  126688             : 
  126689             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  126690             : // Start of memberFunctionString
  126691             : /* #line 1320 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  126692             : 
  126693             : 
  126694             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  126695             : 
  126696             :      public:
  126697             :           virtual void append_init_stmt  ( SgStatement* element );
  126698             :           virtual void prepend_init_stmt ( SgStatement* element );
  126699             : 
  126700             :      public:
  126701             :        // New functions added
  126702             :        // void append_init_stmt  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  126703             :        // void prepend_init_stmt ( const SgStatementPtrList::iterator & list, SgStatement* element );
  126704             : 
  126705             :        // void insert_init_stmt  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  126706             : 
  126707             : 
  126708             :      public:
  126709             : 
  126710             : 
  126711             : 
  126712             : 
  126713             :        // DQ (2/18/2006): This is now computed at runtime
  126714             :        // void set_mangled_name();
  126715             : 
  126716             :           SgForStatement(SgForInitStatement *, SgStatement *, SgExpression *, SgStatement *);
  126717             : 
  126718             :           SgStatementPtrList & get_init_stmt();
  126719             :           const SgStatementPtrList & get_init_stmt() const;
  126720             : 
  126721             :        protected:
  126722             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  126723             : 
  126724             :        public:
  126725             : 
  126726             :        // DQ (11/25/2005): Support for previous interface function.
  126727             :           SgExpression*     get_test_expr () const                                 ROSE_DEPRECATED_FUNCTION;
  126728             :           void              set_test_expr (SgExpression* expression )              ROSE_DEPRECATED_FUNCTION;
  126729             :        // SgExpressionRoot* get_test_expr_root () const                            ROSE_DEPRECATED_FUNCTION;
  126730             :        // void              set_test_expr_root (SgExpressionRoot* expressionRoot ) ROSE_DEPRECATED_FUNCTION;
  126731             : 
  126732             :           int replace_expression(SgExpression * original_expression, SgExpression * new_expression ) override;
  126733             : 
  126734             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  126735             :           virtual unsigned int cfgIndexForEnd() const override;
  126736             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  126737             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  126738             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  126739             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  126740             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  126741             : #endif
  126742             : 
  126743             :        // DQ (2/22/2007): Added for uniform support of mangled names
  126744             :           virtual SgName get_mangled_name() const override;
  126745             : 
  126746             : #if ALT_FIXUP_COPY
  126747             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  126748             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  126749             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  126750             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  126751             : #else
  126752             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  126753             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  126754             : #endif
  126755             : 
  126756             : 
  126757             : 
  126758             : // End of memberFunctionString
  126759             : // Start of memberFunctionString
  126760             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  126761             : 
  126762             : // *** COMMON CODE SECTION BEGINS HERE ***
  126763             : 
  126764             :     public:
  126765             : 
  126766             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  126767             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  126768             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  126769             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  126770             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  126771             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  126772             : 
  126773             :       /*! \brief returns a string representing the class name */
  126774             :           virtual std::string class_name() const override;
  126775             : 
  126776             :       /*! \brief returns new style SageIII enum values */
  126777             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  126778             : 
  126779             :       /*! \brief static variant value */
  126780             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  126781             :        // static const VariantT static_variant = V_SgForStatement;
  126782             :           enum { static_variant = V_SgForStatement };
  126783             : 
  126784             :        /* the generated cast function */
  126785             :       /*! \brief Casts pointer from base class to derived class */
  126786             :           ROSE_DLL_API friend       SgForStatement* isSgForStatement(       SgNode * s );
  126787             : 
  126788             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  126789             :           ROSE_DLL_API friend const SgForStatement* isSgForStatement( const SgNode * s );
  126790             : 
  126791             :      // ******************************************
  126792             :      // * Memory Pool / New / Delete
  126793             :      // ******************************************
  126794             : 
  126795             :      public:
  126796             :           /// \private
  126797             :           static const unsigned pool_size; //
  126798             :           /// \private
  126799             :           static std::vector<unsigned char *> pools; //
  126800             :           /// \private
  126801             :           static SgForStatement * next_node; // 
  126802             : 
  126803             :           /// \private
  126804             :           static unsigned long initializeStorageClassArray(SgForStatementStorageClass *); //
  126805             : 
  126806             :           /// \private
  126807             :           static void clearMemoryPool(); //
  126808             :           static void deleteMemoryPool(); //
  126809             : 
  126810             :           /// \private
  126811             :           static void extendMemoryPoolForFileIO(); //
  126812             : 
  126813             :           /// \private
  126814             :           static SgForStatement * getPointerFromGlobalIndex(unsigned long); //
  126815             :           /// \private
  126816             :           static SgForStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  126817             : 
  126818             :           /// \private
  126819             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  126820             :           /// \private
  126821             :           static void resetValidFreepointers(); //
  126822             :           /// \private
  126823             :           static unsigned long getNumberOfLastValidPointer(); //
  126824             : 
  126825             : 
  126826             : #if defined(INLINE_FUNCTIONS)
  126827             :       /*! \brief returns pointer to newly allocated IR node */
  126828             :           inline void *operator new (size_t size);
  126829             : #else
  126830             :       /*! \brief returns pointer to newly allocated IR node */
  126831             :           void *operator new (size_t size);
  126832             : #endif
  126833             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  126834             :           void operator delete (void* pointer, size_t size);
  126835             : 
  126836             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  126837          80 :           void operator delete (void* pointer)
  126838             :              {
  126839             :             // This is the generated delete operator...
  126840          80 :                SgForStatement::operator delete (pointer,sizeof(SgForStatement));
  126841             :              }
  126842             : 
  126843             :       /*! \brief Returns the total number of IR nodes of this type */
  126844             :           static size_t numberOfNodes();
  126845             : 
  126846             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  126847             :           static size_t memoryUsage();
  126848             : 
  126849             :       // End of scope which started in IR nodes specific code 
  126850             :       /* */
  126851             : 
  126852             :       /* name Internal Functions
  126853             :           \brief Internal functions ... incomplete-documentation
  126854             : 
  126855             :           These functions have been made public as part of the design, but they are suggested for internal use 
  126856             :           or by particularly knowledgeable users for specialized tools or applications.
  126857             : 
  126858             :           \internal We could not make these private because they are required by user for special purposes. And 
  126859             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  126860             :          
  126861             :        */
  126862             : 
  126863             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  126864             :        // overridden in every class by *generated* implementation
  126865             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  126866             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  126867             :        // MS: 06/28/02 container of names of variables or container indices 
  126868             :        // used used in the traversal to access AST successor nodes
  126869             :        // overridden in every class by *generated* implementation
  126870             :       /*! \brief container of names of variables or container indices used used in the traversal
  126871             :           to access AST successor nodes overridden in every class by *generated* implementation */
  126872             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  126873             : 
  126874             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  126875             :        // than all the vector copies. The implementation for these functions is generated for each class.
  126876             :       /*! \brief return number of children in the traversal successor list */
  126877             :           virtual size_t get_numberOfTraversalSuccessors() override;
  126878             :       /*! \brief index-based access to traversal successors by index number */
  126879             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  126880             :       /*! \brief index-based access to traversal successors by child node */
  126881             :           virtual size_t get_childIndex(SgNode *child) override;
  126882             : 
  126883             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  126884             :        // MS: 08/16/2002 method for generating RTI information
  126885             :       /*! \brief return C++ Runtime-Time-Information */
  126886             :           virtual RTIReturnType roseRTI() override;
  126887             : #endif
  126888             :       /* */
  126889             : 
  126890             : 
  126891             : 
  126892             :       /* name Deprecated Functions
  126893             :           \brief Deprecated functions ... incomplete-documentation
  126894             : 
  126895             :           These functions have been deprecated from use.
  126896             :        */
  126897             :       /* */
  126898             : 
  126899             :       /*! returns a C style string (char*) representing the class name */
  126900             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  126901             : 
  126902             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  126903             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  126904             : #if 0
  126905             :       /*! returns old style Sage II enum values */
  126906             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  126907             :       /*! returns old style Sage II enum values */
  126908             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  126909             : #endif
  126910             :       /* */
  126911             : 
  126912             : 
  126913             : 
  126914             : 
  126915             :      public:
  126916             :       /* name Traversal Support Functions
  126917             :           \brief Traversal support functions ... incomplete-documentation
  126918             : 
  126919             :           These functions have been made public as part of the design, but they are suggested for internal use 
  126920             :           or by particularly knowledgable users for specialized tools or applications.
  126921             :        */
  126922             :       /* */
  126923             : 
  126924             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  126925             :        // (inferior to ROSE traversal mechanism, experimental).
  126926             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  126927             :        */
  126928             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  126929             : 
  126930             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  126931             :       /*! \brief support for the classic visitor pattern done in GoF */
  126932             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  126933             : 
  126934             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  126935             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  126936             :        */
  126937             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  126938             : 
  126939             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  126940             :        */
  126941             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  126942             : 
  126943             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  126944             :        // This traversal helps support internal tools that call static member functions.
  126945             :        // note: this function operates on the memory pools.
  126946             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  126947             :        */
  126948             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  126949             :       /* */
  126950             : 
  126951             : 
  126952             :      public:
  126953             :       /* name Memory Allocation Functions
  126954             :           \brief Memory allocations functions ... incomplete-documentation
  126955             : 
  126956             :           These functions have been made public as part of the design, but they are suggested for internal use 
  126957             :           or by particularly knowledgable users for specialized tools or applications.
  126958             :        */
  126959             :       /* */
  126960             : 
  126961             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  126962             : 
  126963             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  126964             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  126965             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  126966             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  126967             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  126968             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  126969             :           being used with the AST File I/O mechanism.
  126970             :        */
  126971             :           virtual bool isInMemoryPool() override;
  126972             : 
  126973             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  126974             : 
  126975             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  126976             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  126977             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  126978             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  126979             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  126980             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  126981             :           being used with the AST File I/O mechanism.
  126982             :        */
  126983             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  126984             : 
  126985             :       // DQ (4/30/2006): Modified to be a const function.
  126986             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  126987             : 
  126988             :           This functions is part of general support for many possible tools to operate 
  126989             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  126990             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  126991             :           less than the set of pointers used by the AST file I/O. This is part of
  126992             :           work implemented by Andreas, and support tools such as the AST graph generation.
  126993             : 
  126994             :           \warning This function can return unexpected data members and thus the 
  126995             :                    order and the number of elements is unpredicable and subject 
  126996             :                    to change.
  126997             : 
  126998             :           \returns STL vector of pairs of SgNode* and strings
  126999             :        */
  127000             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  127001             : 
  127002             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  127003             : 
  127004             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  127005             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  127006             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  127007             : 
  127008             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  127009             :                    and subject to change.
  127010             :        */
  127011             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  127012             : 
  127013             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  127014             : 
  127015             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  127016             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  127017             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  127018             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  127019             : 
  127020             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  127021             : 
  127022             :           \returns long
  127023             :        */
  127024             :           virtual long getChildIndex( SgNode* childNode ) const override;
  127025             : 
  127026             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  127027             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  127028             :       /* \brief Constructor for use by AST File I/O Mechanism
  127029             : 
  127030             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  127031             :           which obtained via fast binary file I/O from disk.
  127032             :        */
  127033             :        // SgForStatement( SgForStatementStorageClass& source );
  127034             : 
  127035             : 
  127036             : 
  127037             : 
  127038             : 
  127039             :  // JH (10/24/2005): methods added to support the ast file IO
  127040             :     private:
  127041             : 
  127042             :       /* name AST Memory Allocation Support Functions
  127043             :           \brief Memory allocations support....
  127044             : 
  127045             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  127046             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  127047             :           and support the AST File I/O Mechanism.
  127048             :        */
  127049             :       /* */
  127050             : 
  127051             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  127052             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  127053             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  127054             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  127055             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  127056             :           a correspinding one in the AST_FILE_IO class!
  127057             :        */
  127058             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  127059             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  127060             :       /* \brief Typedef used for low level memory access.
  127061             :        */
  127062             :        // typedef unsigned char* TestType;
  127063             : 
  127064             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  127065             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  127066             :       /* \brief Typedef used to hold memory addresses as values.
  127067             :        */
  127068             :        // typedef unsigned long  AddressType;
  127069             : 
  127070             : 
  127071             : 
  127072             :        // necessary, to have direct access to the p_freepointer and the private methods !
  127073             :       /*! \brief friend class declaration to support AST File I/O */
  127074             :           friend class AST_FILE_IO;
  127075             : 
  127076             :       /*! \brief friend class declaration to support AST File I/O */
  127077             :           friend class SgForStatementStorageClass;
  127078             : 
  127079             :       /*! \brief friend class declaration to support AST File I/O */
  127080             :           friend class AstSpecificDataManagingClass;
  127081             : 
  127082             :       /*! \brief friend class declaration to support AST File I/O */
  127083             :           friend class AstSpecificDataManagingClassStorageClass;
  127084             :     public:
  127085             :       /*! \brief IR node constructor to support AST File I/O */
  127086             :           SgForStatement( const SgForStatementStorageClass& source );
  127087             : 
  127088             :  // private: // JJW hack
  127089             :        /*
  127090             :           name AST Memory Allocation Support Variables
  127091             :           Memory allocations support variables 
  127092             : 
  127093             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  127094             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  127095             :           and support the AST File I/O Mechanism.
  127096             :        */
  127097             :       /* */
  127098             : 
  127099             :     public:
  127100             : 
  127101             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  127102             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  127103             :       // virtual SgNode* addRegExpAttribute();
  127104             :       /*! \brief Support for AST matching using regular expression.
  127105             : 
  127106             :           This support is incomplete and the subject of current research to define 
  127107             :           RegEx trees to support inexact matching.
  127108             :        */
  127109             :           SgForStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  127110             : 
  127111             : // *** COMMON CODE SECTION ENDS HERE ***
  127112             : 
  127113             : 
  127114             : // End of memberFunctionString
  127115             : // Start of memberFunctionString
  127116             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  127117             : 
  127118             :      // the generated cast function
  127119             :      // friend ROSE_DLL_API SgForStatement* isSgForStatement ( SgNode* s );
  127120             : 
  127121             :           typedef SgScopeStatement base_node_type;
  127122             : 
  127123             : 
  127124             : // End of memberFunctionString
  127125             : // Start of memberFunctionString
  127126             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  127127             : 
  127128             :           void post_construction_initialization() override;
  127129             : 
  127130             : 
  127131             : // End of memberFunctionString
  127132             : 
  127133             :      public: 
  127134             :          SgForInitStatement* get_for_init_stmt() const;
  127135             :          void set_for_init_stmt(SgForInitStatement* for_init_stmt);
  127136             : 
  127137             :      public: 
  127138             :          SgStatement* get_test() const;
  127139             :          void set_test(SgStatement* test);
  127140             : 
  127141             :      public: 
  127142             :          SgExpression* get_increment() const;
  127143             :          void set_increment(SgExpression* increment);
  127144             : 
  127145             :      public: 
  127146             :          SgStatement* get_loop_body() const;
  127147             :          void set_loop_body(SgStatement* loop_body);
  127148             : 
  127149             :      public: 
  127150             :          SgStatement* get_else_body() const;
  127151             :          void set_else_body(SgStatement* else_body);
  127152             : 
  127153             :      public: 
  127154             :          std::string get_string_label() const;
  127155             :          void set_string_label(std::string string_label);
  127156             : 
  127157             : 
  127158             :      public: 
  127159             :          virtual ~SgForStatement();
  127160             : 
  127161             : 
  127162             :      public: 
  127163             :          SgForStatement(Sg_File_Info* startOfConstruct , SgStatement* test = NULL, SgExpression* increment = NULL, SgStatement* loop_body = NULL); 
  127164             :          SgForStatement(SgStatement* test, SgExpression* increment, SgStatement* loop_body); 
  127165             : 
  127166             :     protected:
  127167             : // Start of memberFunctionString
  127168             : SgForInitStatement* p_for_init_stmt;
  127169             :           
  127170             : // End of memberFunctionString
  127171             : // Start of memberFunctionString
  127172             : SgStatement* p_test;
  127173             :           
  127174             : // End of memberFunctionString
  127175             : // Start of memberFunctionString
  127176             : SgExpression* p_increment;
  127177             :           
  127178             : // End of memberFunctionString
  127179             : // Start of memberFunctionString
  127180             : SgStatement* p_loop_body;
  127181             :           
  127182             : // End of memberFunctionString
  127183             : // Start of memberFunctionString
  127184             : SgStatement* p_else_body;
  127185             :           
  127186             : // End of memberFunctionString
  127187             : // Start of memberFunctionString
  127188             : std::string p_string_label;
  127189             :           
  127190             : // End of memberFunctionString
  127191             : 
  127192             :     friend struct Rose::Traits::generated::describe_node_t<SgForStatement>;
  127193             :     friend struct Rose::Traits::generated::describe_field_t<SgForStatement, SgForInitStatement*,&SgForStatement::p_for_init_stmt>;
  127194             :     friend struct Rose::Traits::generated::describe_field_t<SgForStatement, SgStatement*,&SgForStatement::p_test>;
  127195             :     friend struct Rose::Traits::generated::describe_field_t<SgForStatement, SgExpression*,&SgForStatement::p_increment>;
  127196             :     friend struct Rose::Traits::generated::describe_field_t<SgForStatement, SgStatement*,&SgForStatement::p_loop_body>;
  127197             :     friend struct Rose::Traits::generated::describe_field_t<SgForStatement, SgStatement*,&SgForStatement::p_else_body>;
  127198             :     friend struct Rose::Traits::generated::describe_field_t<SgForStatement, std::string,&SgForStatement::p_string_label>;
  127199             : 
  127200             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127201             : 
  127202             : 
  127203             :    };
  127204             : #endif
  127205             : 
  127206             : // postdeclarations for SgForStatement
  127207             : 
  127208             : /* #line 127209 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127209             : 
  127210             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  127211             : 
  127212             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127213             : 
  127214             : 
  127215             : /* #line 127216 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127216             : 
  127217             : 
  127218             : 
  127219             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127220             : 
  127221             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  127222             : //      This code is automatically generated for each 
  127223             : //      terminal and non-terminal within the defined 
  127224             : //      grammar.  There is a simple way to change the 
  127225             : //      code to fix bugs etc.  See the ROSE README file
  127226             : //      for directions.
  127227             : 
  127228             : // tps: (02/22/2010): Adding DLL export requirements
  127229             : #include "rosedll.h"
  127230             : 
  127231             : // predeclarations for SgFunctionDefinition
  127232             : 
  127233             : /* #line 127234 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127234             : 
  127235             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  127236             : 
  127237             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127238             : 
  127239             : #if 1
  127240             : // Class Definition for SgFunctionDefinition
  127241             : class ROSE_DLL_API SgFunctionDefinition  : public SgScopeStatement
  127242             :    {
  127243             :      public:
  127244             : 
  127245             : 
  127246             : /* #line 127247 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127247             : 
  127248             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  127249             : // Start of memberFunctionString
  127250             : /* #line 1677 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  127251             : 
  127252             : 
  127253             :           SgFunctionDeclaration* get_declaration() const;
  127254             :           void set_declaration(SgFunctionDeclaration* new_val);
  127255             : 
  127256             :           SgFunctionDefinition(Sg_File_Info* f, SgFunctionDeclaration* d, SgBasicBlock* body = 0);
  127257             :           SgFunctionDefinition(SgFunctionDeclaration* d, SgBasicBlock* body);
  127258             : 
  127259             :           void append_statement  ( SgStatement* what );
  127260             :           void prepend_statement ( SgStatement* what );
  127261             : 
  127262             :         protected:
  127263             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  127264             : 
  127265             :         public:
  127266             : 
  127267             :        // RV (2/5/2006): Added name mangling for function definitions
  127268             :           virtual SgName get_mangled_name (void) const override;
  127269             : 
  127270             :        // DQ (10/5/2006): Added support for storing unique block numbering within functions
  127271             :        // (cache values in a map instead of recomputing them, this also permits cache invalidation).
  127272             :           std::map<SgNode*,int> & get_scope_number_list();
  127273             :           int get_scope_number ( const SgNode* scope ) const;
  127274             :           void clearScopeNumbers();
  127275             :           void resetScopeNumbers();
  127276             : 
  127277             :           SgName get_qualified_name() const override;
  127278             : 
  127279             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  127280             :           virtual unsigned int cfgIndexForEnd() const override;
  127281             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  127282             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  127283             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  127284             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  127285             : #endif
  127286             : 
  127287             :        // MD (09/20/2010): Accessor for preinitialization lists associated with
  127288             :        // this (constructor) definition. NULL if this has no such list.
  127289             :           virtual SgCtorInitializerList* get_CtorInitializerList() const;
  127290             : 
  127291             : #if ALT_FIXUP_COPY
  127292             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  127293             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  127294             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  127295             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  127296             : #else
  127297             :        // DQ (10/6/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  127298             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  127299             : #endif
  127300             : 
  127301             : 
  127302             : 
  127303             : // End of memberFunctionString
  127304             : // Start of memberFunctionString
  127305             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  127306             : 
  127307             : // *** COMMON CODE SECTION BEGINS HERE ***
  127308             : 
  127309             :     public:
  127310             : 
  127311             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  127312             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  127313             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  127314             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  127315             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  127316             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  127317             : 
  127318             :       /*! \brief returns a string representing the class name */
  127319             :           virtual std::string class_name() const override;
  127320             : 
  127321             :       /*! \brief returns new style SageIII enum values */
  127322             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  127323             : 
  127324             :       /*! \brief static variant value */
  127325             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  127326             :        // static const VariantT static_variant = V_SgFunctionDefinition;
  127327             :           enum { static_variant = V_SgFunctionDefinition };
  127328             : 
  127329             :        /* the generated cast function */
  127330             :       /*! \brief Casts pointer from base class to derived class */
  127331             :           ROSE_DLL_API friend       SgFunctionDefinition* isSgFunctionDefinition(       SgNode * s );
  127332             : 
  127333             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  127334             :           ROSE_DLL_API friend const SgFunctionDefinition* isSgFunctionDefinition( const SgNode * s );
  127335             : 
  127336             :      // ******************************************
  127337             :      // * Memory Pool / New / Delete
  127338             :      // ******************************************
  127339             : 
  127340             :      public:
  127341             :           /// \private
  127342             :           static const unsigned pool_size; //
  127343             :           /// \private
  127344             :           static std::vector<unsigned char *> pools; //
  127345             :           /// \private
  127346             :           static SgFunctionDefinition * next_node; // 
  127347             : 
  127348             :           /// \private
  127349             :           static unsigned long initializeStorageClassArray(SgFunctionDefinitionStorageClass *); //
  127350             : 
  127351             :           /// \private
  127352             :           static void clearMemoryPool(); //
  127353             :           static void deleteMemoryPool(); //
  127354             : 
  127355             :           /// \private
  127356             :           static void extendMemoryPoolForFileIO(); //
  127357             : 
  127358             :           /// \private
  127359             :           static SgFunctionDefinition * getPointerFromGlobalIndex(unsigned long); //
  127360             :           /// \private
  127361             :           static SgFunctionDefinition * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  127362             : 
  127363             :           /// \private
  127364             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  127365             :           /// \private
  127366             :           static void resetValidFreepointers(); //
  127367             :           /// \private
  127368             :           static unsigned long getNumberOfLastValidPointer(); //
  127369             : 
  127370             : 
  127371             : #if defined(INLINE_FUNCTIONS)
  127372             :       /*! \brief returns pointer to newly allocated IR node */
  127373             :           inline void *operator new (size_t size);
  127374             : #else
  127375             :       /*! \brief returns pointer to newly allocated IR node */
  127376             :           void *operator new (size_t size);
  127377             : #endif
  127378             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  127379             :           void operator delete (void* pointer, size_t size);
  127380             : 
  127381             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  127382        3165 :           void operator delete (void* pointer)
  127383             :              {
  127384             :             // This is the generated delete operator...
  127385        3165 :                SgFunctionDefinition::operator delete (pointer,sizeof(SgFunctionDefinition));
  127386             :              }
  127387             : 
  127388             :       /*! \brief Returns the total number of IR nodes of this type */
  127389             :           static size_t numberOfNodes();
  127390             : 
  127391             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  127392             :           static size_t memoryUsage();
  127393             : 
  127394             :       // End of scope which started in IR nodes specific code 
  127395             :       /* */
  127396             : 
  127397             :       /* name Internal Functions
  127398             :           \brief Internal functions ... incomplete-documentation
  127399             : 
  127400             :           These functions have been made public as part of the design, but they are suggested for internal use 
  127401             :           or by particularly knowledgeable users for specialized tools or applications.
  127402             : 
  127403             :           \internal We could not make these private because they are required by user for special purposes. And 
  127404             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  127405             :          
  127406             :        */
  127407             : 
  127408             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  127409             :        // overridden in every class by *generated* implementation
  127410             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  127411             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  127412             :        // MS: 06/28/02 container of names of variables or container indices 
  127413             :        // used used in the traversal to access AST successor nodes
  127414             :        // overridden in every class by *generated* implementation
  127415             :       /*! \brief container of names of variables or container indices used used in the traversal
  127416             :           to access AST successor nodes overridden in every class by *generated* implementation */
  127417             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  127418             : 
  127419             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  127420             :        // than all the vector copies. The implementation for these functions is generated for each class.
  127421             :       /*! \brief return number of children in the traversal successor list */
  127422             :           virtual size_t get_numberOfTraversalSuccessors() override;
  127423             :       /*! \brief index-based access to traversal successors by index number */
  127424             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  127425             :       /*! \brief index-based access to traversal successors by child node */
  127426             :           virtual size_t get_childIndex(SgNode *child) override;
  127427             : 
  127428             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  127429             :        // MS: 08/16/2002 method for generating RTI information
  127430             :       /*! \brief return C++ Runtime-Time-Information */
  127431             :           virtual RTIReturnType roseRTI() override;
  127432             : #endif
  127433             :       /* */
  127434             : 
  127435             : 
  127436             : 
  127437             :       /* name Deprecated Functions
  127438             :           \brief Deprecated functions ... incomplete-documentation
  127439             : 
  127440             :           These functions have been deprecated from use.
  127441             :        */
  127442             :       /* */
  127443             : 
  127444             :       /*! returns a C style string (char*) representing the class name */
  127445             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  127446             : 
  127447             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  127448             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  127449             : #if 0
  127450             :       /*! returns old style Sage II enum values */
  127451             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  127452             :       /*! returns old style Sage II enum values */
  127453             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  127454             : #endif
  127455             :       /* */
  127456             : 
  127457             : 
  127458             : 
  127459             : 
  127460             :      public:
  127461             :       /* name Traversal Support Functions
  127462             :           \brief Traversal support functions ... incomplete-documentation
  127463             : 
  127464             :           These functions have been made public as part of the design, but they are suggested for internal use 
  127465             :           or by particularly knowledgable users for specialized tools or applications.
  127466             :        */
  127467             :       /* */
  127468             : 
  127469             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  127470             :        // (inferior to ROSE traversal mechanism, experimental).
  127471             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  127472             :        */
  127473             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  127474             : 
  127475             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  127476             :       /*! \brief support for the classic visitor pattern done in GoF */
  127477             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  127478             : 
  127479             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  127480             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  127481             :        */
  127482             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  127483             : 
  127484             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  127485             :        */
  127486             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  127487             : 
  127488             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  127489             :        // This traversal helps support internal tools that call static member functions.
  127490             :        // note: this function operates on the memory pools.
  127491             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  127492             :        */
  127493             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  127494             :       /* */
  127495             : 
  127496             : 
  127497             :      public:
  127498             :       /* name Memory Allocation Functions
  127499             :           \brief Memory allocations functions ... incomplete-documentation
  127500             : 
  127501             :           These functions have been made public as part of the design, but they are suggested for internal use 
  127502             :           or by particularly knowledgable users for specialized tools or applications.
  127503             :        */
  127504             :       /* */
  127505             : 
  127506             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  127507             : 
  127508             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  127509             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  127510             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  127511             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  127512             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  127513             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  127514             :           being used with the AST File I/O mechanism.
  127515             :        */
  127516             :           virtual bool isInMemoryPool() override;
  127517             : 
  127518             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  127519             : 
  127520             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  127521             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  127522             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  127523             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  127524             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  127525             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  127526             :           being used with the AST File I/O mechanism.
  127527             :        */
  127528             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  127529             : 
  127530             :       // DQ (4/30/2006): Modified to be a const function.
  127531             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  127532             : 
  127533             :           This functions is part of general support for many possible tools to operate 
  127534             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  127535             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  127536             :           less than the set of pointers used by the AST file I/O. This is part of
  127537             :           work implemented by Andreas, and support tools such as the AST graph generation.
  127538             : 
  127539             :           \warning This function can return unexpected data members and thus the 
  127540             :                    order and the number of elements is unpredicable and subject 
  127541             :                    to change.
  127542             : 
  127543             :           \returns STL vector of pairs of SgNode* and strings
  127544             :        */
  127545             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  127546             : 
  127547             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  127548             : 
  127549             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  127550             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  127551             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  127552             : 
  127553             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  127554             :                    and subject to change.
  127555             :        */
  127556             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  127557             : 
  127558             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  127559             : 
  127560             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  127561             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  127562             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  127563             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  127564             : 
  127565             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  127566             : 
  127567             :           \returns long
  127568             :        */
  127569             :           virtual long getChildIndex( SgNode* childNode ) const override;
  127570             : 
  127571             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  127572             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  127573             :       /* \brief Constructor for use by AST File I/O Mechanism
  127574             : 
  127575             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  127576             :           which obtained via fast binary file I/O from disk.
  127577             :        */
  127578             :        // SgFunctionDefinition( SgFunctionDefinitionStorageClass& source );
  127579             : 
  127580             : 
  127581             : 
  127582             : 
  127583             : 
  127584             :  // JH (10/24/2005): methods added to support the ast file IO
  127585             :     private:
  127586             : 
  127587             :       /* name AST Memory Allocation Support Functions
  127588             :           \brief Memory allocations support....
  127589             : 
  127590             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  127591             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  127592             :           and support the AST File I/O Mechanism.
  127593             :        */
  127594             :       /* */
  127595             : 
  127596             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  127597             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  127598             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  127599             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  127600             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  127601             :           a correspinding one in the AST_FILE_IO class!
  127602             :        */
  127603             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  127604             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  127605             :       /* \brief Typedef used for low level memory access.
  127606             :        */
  127607             :        // typedef unsigned char* TestType;
  127608             : 
  127609             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  127610             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  127611             :       /* \brief Typedef used to hold memory addresses as values.
  127612             :        */
  127613             :        // typedef unsigned long  AddressType;
  127614             : 
  127615             : 
  127616             : 
  127617             :        // necessary, to have direct access to the p_freepointer and the private methods !
  127618             :       /*! \brief friend class declaration to support AST File I/O */
  127619             :           friend class AST_FILE_IO;
  127620             : 
  127621             :       /*! \brief friend class declaration to support AST File I/O */
  127622             :           friend class SgFunctionDefinitionStorageClass;
  127623             : 
  127624             :       /*! \brief friend class declaration to support AST File I/O */
  127625             :           friend class AstSpecificDataManagingClass;
  127626             : 
  127627             :       /*! \brief friend class declaration to support AST File I/O */
  127628             :           friend class AstSpecificDataManagingClassStorageClass;
  127629             :     public:
  127630             :       /*! \brief IR node constructor to support AST File I/O */
  127631             :           SgFunctionDefinition( const SgFunctionDefinitionStorageClass& source );
  127632             : 
  127633             :  // private: // JJW hack
  127634             :        /*
  127635             :           name AST Memory Allocation Support Variables
  127636             :           Memory allocations support variables 
  127637             : 
  127638             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  127639             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  127640             :           and support the AST File I/O Mechanism.
  127641             :        */
  127642             :       /* */
  127643             : 
  127644             :     public:
  127645             : 
  127646             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  127647             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  127648             :       // virtual SgNode* addRegExpAttribute();
  127649             :       /*! \brief Support for AST matching using regular expression.
  127650             : 
  127651             :           This support is incomplete and the subject of current research to define 
  127652             :           RegEx trees to support inexact matching.
  127653             :        */
  127654             :           SgFunctionDefinition* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  127655             : 
  127656             : // *** COMMON CODE SECTION ENDS HERE ***
  127657             : 
  127658             : 
  127659             : // End of memberFunctionString
  127660             : // Start of memberFunctionString
  127661             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  127662             : 
  127663             :      // the generated cast function
  127664             :      // friend ROSE_DLL_API SgFunctionDefinition* isSgFunctionDefinition ( SgNode* s );
  127665             : 
  127666             :           typedef SgScopeStatement base_node_type;
  127667             : 
  127668             : 
  127669             : // End of memberFunctionString
  127670             : // Start of memberFunctionString
  127671             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  127672             : 
  127673             :           void post_construction_initialization() override;
  127674             : 
  127675             : 
  127676             : // End of memberFunctionString
  127677             : 
  127678             :      public: 
  127679             :          SgBasicBlock* get_body() const;
  127680             :          void set_body(SgBasicBlock* body);
  127681             : 
  127682             : 
  127683             : 
  127684             :      public: 
  127685             :          virtual ~SgFunctionDefinition();
  127686             : 
  127687             : 
  127688             :      public: 
  127689             :          SgFunctionDefinition(Sg_File_Info* startOfConstruct , SgBasicBlock* body = NULL); 
  127690             :          SgFunctionDefinition(SgBasicBlock* body); 
  127691             : 
  127692             :     protected:
  127693             : // Start of memberFunctionString
  127694             : SgBasicBlock* p_body;
  127695             :           
  127696             : // End of memberFunctionString
  127697             : // Start of memberFunctionString
  127698             : std::map<SgNode*,int> p_scope_number_list;
  127699             :           
  127700             : // End of memberFunctionString
  127701             : 
  127702             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionDefinition>;
  127703             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDefinition, SgBasicBlock*,&SgFunctionDefinition::p_body>;
  127704             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDefinition, std::map<SgNode*,int>,&SgFunctionDefinition::p_scope_number_list>;
  127705             : 
  127706             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127707             : 
  127708             : 
  127709             :    };
  127710             : #endif
  127711             : 
  127712             : // postdeclarations for SgFunctionDefinition
  127713             : 
  127714             : /* #line 127715 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127715             : 
  127716             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  127717             : 
  127718             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127719             : 
  127720             : 
  127721             : /* #line 127722 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127722             : 
  127723             : 
  127724             : 
  127725             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127726             : 
  127727             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  127728             : //      This code is automatically generated for each 
  127729             : //      terminal and non-terminal within the defined 
  127730             : //      grammar.  There is a simple way to change the 
  127731             : //      code to fix bugs etc.  See the ROSE README file
  127732             : //      for directions.
  127733             : 
  127734             : // tps: (02/22/2010): Adding DLL export requirements
  127735             : #include "rosedll.h"
  127736             : 
  127737             : // predeclarations for SgTemplateFunctionDefinition
  127738             : 
  127739             : /* #line 127740 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127740             : 
  127741             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  127742             : 
  127743             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  127744             : 
  127745             : #if 1
  127746             : // Class Definition for SgTemplateFunctionDefinition
  127747             : class ROSE_DLL_API SgTemplateFunctionDefinition  : public SgFunctionDefinition
  127748             :    {
  127749             :      public:
  127750             : 
  127751             : 
  127752             : /* #line 127753 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  127753             : 
  127754             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  127755             : // Start of memberFunctionString
  127756             : /* #line 2850 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  127757             : 
  127758             : 
  127759             :        // DQ (12/1/2011): Adding support for template declarations in the AST.
  127760             :           SgTemplateFunctionDefinition(Sg_File_Info* f, SgTemplateFunctionDeclaration* d, SgBasicBlock* body = 0);
  127761             :           SgTemplateFunctionDefinition(SgTemplateFunctionDeclaration* d, SgBasicBlock* body);
  127762             : 
  127763             :           SgTemplateFunctionDeclaration* get_declaration() const;
  127764             :           void set_declaration(SgTemplateFunctionDeclaration* new_val);
  127765             : 
  127766             :           virtual SgName get_mangled_name (void) const override;
  127767             : 
  127768             : 
  127769             : 
  127770             : // End of memberFunctionString
  127771             : // Start of memberFunctionString
  127772             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  127773             : 
  127774             : // *** COMMON CODE SECTION BEGINS HERE ***
  127775             : 
  127776             :     public:
  127777             : 
  127778             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  127779             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  127780             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  127781             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  127782             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  127783             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  127784             : 
  127785             :       /*! \brief returns a string representing the class name */
  127786             :           virtual std::string class_name() const override;
  127787             : 
  127788             :       /*! \brief returns new style SageIII enum values */
  127789             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  127790             : 
  127791             :       /*! \brief static variant value */
  127792             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  127793             :        // static const VariantT static_variant = V_SgTemplateFunctionDefinition;
  127794             :           enum { static_variant = V_SgTemplateFunctionDefinition };
  127795             : 
  127796             :        /* the generated cast function */
  127797             :       /*! \brief Casts pointer from base class to derived class */
  127798             :           ROSE_DLL_API friend       SgTemplateFunctionDefinition* isSgTemplateFunctionDefinition(       SgNode * s );
  127799             : 
  127800             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  127801             :           ROSE_DLL_API friend const SgTemplateFunctionDefinition* isSgTemplateFunctionDefinition( const SgNode * s );
  127802             : 
  127803             :      // ******************************************
  127804             :      // * Memory Pool / New / Delete
  127805             :      // ******************************************
  127806             : 
  127807             :      public:
  127808             :           /// \private
  127809             :           static const unsigned pool_size; //
  127810             :           /// \private
  127811             :           static std::vector<unsigned char *> pools; //
  127812             :           /// \private
  127813             :           static SgTemplateFunctionDefinition * next_node; // 
  127814             : 
  127815             :           /// \private
  127816             :           static unsigned long initializeStorageClassArray(SgTemplateFunctionDefinitionStorageClass *); //
  127817             : 
  127818             :           /// \private
  127819             :           static void clearMemoryPool(); //
  127820             :           static void deleteMemoryPool(); //
  127821             : 
  127822             :           /// \private
  127823             :           static void extendMemoryPoolForFileIO(); //
  127824             : 
  127825             :           /// \private
  127826             :           static SgTemplateFunctionDefinition * getPointerFromGlobalIndex(unsigned long); //
  127827             :           /// \private
  127828             :           static SgTemplateFunctionDefinition * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  127829             : 
  127830             :           /// \private
  127831             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  127832             :           /// \private
  127833             :           static void resetValidFreepointers(); //
  127834             :           /// \private
  127835             :           static unsigned long getNumberOfLastValidPointer(); //
  127836             : 
  127837             : 
  127838             : #if defined(INLINE_FUNCTIONS)
  127839             :       /*! \brief returns pointer to newly allocated IR node */
  127840             :           inline void *operator new (size_t size);
  127841             : #else
  127842             :       /*! \brief returns pointer to newly allocated IR node */
  127843             :           void *operator new (size_t size);
  127844             : #endif
  127845             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  127846             :           void operator delete (void* pointer, size_t size);
  127847             : 
  127848             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  127849         630 :           void operator delete (void* pointer)
  127850             :              {
  127851             :             // This is the generated delete operator...
  127852         630 :                SgTemplateFunctionDefinition::operator delete (pointer,sizeof(SgTemplateFunctionDefinition));
  127853             :              }
  127854             : 
  127855             :       /*! \brief Returns the total number of IR nodes of this type */
  127856             :           static size_t numberOfNodes();
  127857             : 
  127858             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  127859             :           static size_t memoryUsage();
  127860             : 
  127861             :       // End of scope which started in IR nodes specific code 
  127862             :       /* */
  127863             : 
  127864             :       /* name Internal Functions
  127865             :           \brief Internal functions ... incomplete-documentation
  127866             : 
  127867             :           These functions have been made public as part of the design, but they are suggested for internal use 
  127868             :           or by particularly knowledgeable users for specialized tools or applications.
  127869             : 
  127870             :           \internal We could not make these private because they are required by user for special purposes. And 
  127871             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  127872             :          
  127873             :        */
  127874             : 
  127875             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  127876             :        // overridden in every class by *generated* implementation
  127877             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  127878             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  127879             :        // MS: 06/28/02 container of names of variables or container indices 
  127880             :        // used used in the traversal to access AST successor nodes
  127881             :        // overridden in every class by *generated* implementation
  127882             :       /*! \brief container of names of variables or container indices used used in the traversal
  127883             :           to access AST successor nodes overridden in every class by *generated* implementation */
  127884             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  127885             : 
  127886             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  127887             :        // than all the vector copies. The implementation for these functions is generated for each class.
  127888             :       /*! \brief return number of children in the traversal successor list */
  127889             :           virtual size_t get_numberOfTraversalSuccessors() override;
  127890             :       /*! \brief index-based access to traversal successors by index number */
  127891             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  127892             :       /*! \brief index-based access to traversal successors by child node */
  127893             :           virtual size_t get_childIndex(SgNode *child) override;
  127894             : 
  127895             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  127896             :        // MS: 08/16/2002 method for generating RTI information
  127897             :       /*! \brief return C++ Runtime-Time-Information */
  127898             :           virtual RTIReturnType roseRTI() override;
  127899             : #endif
  127900             :       /* */
  127901             : 
  127902             : 
  127903             : 
  127904             :       /* name Deprecated Functions
  127905             :           \brief Deprecated functions ... incomplete-documentation
  127906             : 
  127907             :           These functions have been deprecated from use.
  127908             :        */
  127909             :       /* */
  127910             : 
  127911             :       /*! returns a C style string (char*) representing the class name */
  127912             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  127913             : 
  127914             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  127915             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  127916             : #if 0
  127917             :       /*! returns old style Sage II enum values */
  127918             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  127919             :       /*! returns old style Sage II enum values */
  127920             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  127921             : #endif
  127922             :       /* */
  127923             : 
  127924             : 
  127925             : 
  127926             : 
  127927             :      public:
  127928             :       /* name Traversal Support Functions
  127929             :           \brief Traversal support functions ... incomplete-documentation
  127930             : 
  127931             :           These functions have been made public as part of the design, but they are suggested for internal use 
  127932             :           or by particularly knowledgable users for specialized tools or applications.
  127933             :        */
  127934             :       /* */
  127935             : 
  127936             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  127937             :        // (inferior to ROSE traversal mechanism, experimental).
  127938             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  127939             :        */
  127940             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  127941             : 
  127942             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  127943             :       /*! \brief support for the classic visitor pattern done in GoF */
  127944             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  127945             : 
  127946             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  127947             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  127948             :        */
  127949             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  127950             : 
  127951             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  127952             :        */
  127953             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  127954             : 
  127955             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  127956             :        // This traversal helps support internal tools that call static member functions.
  127957             :        // note: this function operates on the memory pools.
  127958             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  127959             :        */
  127960             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  127961             :       /* */
  127962             : 
  127963             : 
  127964             :      public:
  127965             :       /* name Memory Allocation Functions
  127966             :           \brief Memory allocations functions ... incomplete-documentation
  127967             : 
  127968             :           These functions have been made public as part of the design, but they are suggested for internal use 
  127969             :           or by particularly knowledgable users for specialized tools or applications.
  127970             :        */
  127971             :       /* */
  127972             : 
  127973             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  127974             : 
  127975             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  127976             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  127977             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  127978             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  127979             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  127980             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  127981             :           being used with the AST File I/O mechanism.
  127982             :        */
  127983             :           virtual bool isInMemoryPool() override;
  127984             : 
  127985             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  127986             : 
  127987             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  127988             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  127989             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  127990             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  127991             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  127992             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  127993             :           being used with the AST File I/O mechanism.
  127994             :        */
  127995             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  127996             : 
  127997             :       // DQ (4/30/2006): Modified to be a const function.
  127998             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  127999             : 
  128000             :           This functions is part of general support for many possible tools to operate 
  128001             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  128002             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  128003             :           less than the set of pointers used by the AST file I/O. This is part of
  128004             :           work implemented by Andreas, and support tools such as the AST graph generation.
  128005             : 
  128006             :           \warning This function can return unexpected data members and thus the 
  128007             :                    order and the number of elements is unpredicable and subject 
  128008             :                    to change.
  128009             : 
  128010             :           \returns STL vector of pairs of SgNode* and strings
  128011             :        */
  128012             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  128013             : 
  128014             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  128015             : 
  128016             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  128017             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  128018             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  128019             : 
  128020             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  128021             :                    and subject to change.
  128022             :        */
  128023             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  128024             : 
  128025             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  128026             : 
  128027             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  128028             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  128029             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  128030             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  128031             : 
  128032             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  128033             : 
  128034             :           \returns long
  128035             :        */
  128036             :           virtual long getChildIndex( SgNode* childNode ) const override;
  128037             : 
  128038             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  128039             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  128040             :       /* \brief Constructor for use by AST File I/O Mechanism
  128041             : 
  128042             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  128043             :           which obtained via fast binary file I/O from disk.
  128044             :        */
  128045             :        // SgTemplateFunctionDefinition( SgTemplateFunctionDefinitionStorageClass& source );
  128046             : 
  128047             : 
  128048             : 
  128049             : 
  128050             : 
  128051             :  // JH (10/24/2005): methods added to support the ast file IO
  128052             :     private:
  128053             : 
  128054             :       /* name AST Memory Allocation Support Functions
  128055             :           \brief Memory allocations support....
  128056             : 
  128057             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  128058             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  128059             :           and support the AST File I/O Mechanism.
  128060             :        */
  128061             :       /* */
  128062             : 
  128063             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  128064             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  128065             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  128066             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  128067             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  128068             :           a correspinding one in the AST_FILE_IO class!
  128069             :        */
  128070             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  128071             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  128072             :       /* \brief Typedef used for low level memory access.
  128073             :        */
  128074             :        // typedef unsigned char* TestType;
  128075             : 
  128076             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  128077             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  128078             :       /* \brief Typedef used to hold memory addresses as values.
  128079             :        */
  128080             :        // typedef unsigned long  AddressType;
  128081             : 
  128082             : 
  128083             : 
  128084             :        // necessary, to have direct access to the p_freepointer and the private methods !
  128085             :       /*! \brief friend class declaration to support AST File I/O */
  128086             :           friend class AST_FILE_IO;
  128087             : 
  128088             :       /*! \brief friend class declaration to support AST File I/O */
  128089             :           friend class SgTemplateFunctionDefinitionStorageClass;
  128090             : 
  128091             :       /*! \brief friend class declaration to support AST File I/O */
  128092             :           friend class AstSpecificDataManagingClass;
  128093             : 
  128094             :       /*! \brief friend class declaration to support AST File I/O */
  128095             :           friend class AstSpecificDataManagingClassStorageClass;
  128096             :     public:
  128097             :       /*! \brief IR node constructor to support AST File I/O */
  128098             :           SgTemplateFunctionDefinition( const SgTemplateFunctionDefinitionStorageClass& source );
  128099             : 
  128100             :  // private: // JJW hack
  128101             :        /*
  128102             :           name AST Memory Allocation Support Variables
  128103             :           Memory allocations support variables 
  128104             : 
  128105             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  128106             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  128107             :           and support the AST File I/O Mechanism.
  128108             :        */
  128109             :       /* */
  128110             : 
  128111             :     public:
  128112             : 
  128113             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  128114             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  128115             :       // virtual SgNode* addRegExpAttribute();
  128116             :       /*! \brief Support for AST matching using regular expression.
  128117             : 
  128118             :           This support is incomplete and the subject of current research to define 
  128119             :           RegEx trees to support inexact matching.
  128120             :        */
  128121             :           SgTemplateFunctionDefinition* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  128122             : 
  128123             : // *** COMMON CODE SECTION ENDS HERE ***
  128124             : 
  128125             : 
  128126             : // End of memberFunctionString
  128127             : // Start of memberFunctionString
  128128             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  128129             : 
  128130             :      // the generated cast function
  128131             :      // friend ROSE_DLL_API SgTemplateFunctionDefinition* isSgTemplateFunctionDefinition ( SgNode* s );
  128132             : 
  128133             :           typedef SgFunctionDefinition base_node_type;
  128134             : 
  128135             : 
  128136             : // End of memberFunctionString
  128137             : // Start of memberFunctionString
  128138             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  128139             : 
  128140             :           void post_construction_initialization() override;
  128141             : 
  128142             : 
  128143             : // End of memberFunctionString
  128144             : 
  128145             : 
  128146             :      public: 
  128147             :          virtual ~SgTemplateFunctionDefinition();
  128148             : 
  128149             : 
  128150             :      public: 
  128151             :          SgTemplateFunctionDefinition(Sg_File_Info* startOfConstruct , SgBasicBlock* body = NULL); 
  128152             :          SgTemplateFunctionDefinition(SgBasicBlock* body); 
  128153             : 
  128154             :     protected:
  128155             : 
  128156             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateFunctionDefinition>;
  128157             : 
  128158             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128159             : 
  128160             : 
  128161             :    };
  128162             : #endif
  128163             : 
  128164             : // postdeclarations for SgTemplateFunctionDefinition
  128165             : 
  128166             : /* #line 128167 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128167             : 
  128168             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  128169             : 
  128170             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128171             : 
  128172             : 
  128173             : /* #line 128174 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128174             : 
  128175             : 
  128176             : 
  128177             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128178             : 
  128179             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  128180             : //      This code is automatically generated for each 
  128181             : //      terminal and non-terminal within the defined 
  128182             : //      grammar.  There is a simple way to change the 
  128183             : //      code to fix bugs etc.  See the ROSE README file
  128184             : //      for directions.
  128185             : 
  128186             : // tps: (02/22/2010): Adding DLL export requirements
  128187             : #include "rosedll.h"
  128188             : 
  128189             : // predeclarations for SgClassDefinition
  128190             : 
  128191             : /* #line 128192 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128192             : 
  128193             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  128194             : 
  128195             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128196             : 
  128197             : #if 1
  128198             : // Class Definition for SgClassDefinition
  128199             : class ROSE_DLL_API SgClassDefinition  : public SgScopeStatement
  128200             :    {
  128201             :      public:
  128202             : 
  128203             : 
  128204             : /* #line 128205 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128205             : 
  128206             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  128207             : // Start of memberFunctionString
  128208             : /* #line 2123 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  128209             : 
  128210             : 
  128211             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  128212             : 
  128213             :      public:
  128214             :           virtual void append_member  ( SgDeclarationStatement* element );
  128215             :           virtual void prepend_member ( SgDeclarationStatement* element );
  128216             : 
  128217             :      public:
  128218             :        // New functions added
  128219             :        // void append_member  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  128220             :        // void prepend_member ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  128221             : 
  128222             :        // void insert_member  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  128223             : 
  128224             : 
  128225             :      public:
  128226             : 
  128227             : 
  128228             : 
  128229             : 
  128230             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  128231             : 
  128232             :      public:
  128233             :           virtual void append_inheritance  ( SgBaseClass* element );
  128234             :           virtual void prepend_inheritance ( SgBaseClass* element );
  128235             : 
  128236             :      public:
  128237             :        // New functions added
  128238             :        // void append_inheritance  ( const SgBaseClassPtrList::iterator & list, SgBaseClass* element );
  128239             :        // void prepend_inheritance ( const SgBaseClassPtrList::iterator & list, SgBaseClass* element );
  128240             : 
  128241             :        // void insert_inheritance  ( const SgBaseClassPtrList::iterator & list, SgBaseClass* element );
  128242             : 
  128243             : 
  128244             :      public:
  128245             : 
  128246             : 
  128247             : 
  128248             : 
  128249             :           virtual SgName get_qualified_name() const override;
  128250             : 
  128251             :        // RV (1/31/2006): Added this mangler to replace 'get_mangled_qualified_name'
  128252             :           virtual SgName get_mangled_name (void) const override;
  128253             : 
  128254             :       //! \deprecated
  128255             :           SgName get_mangled_qualified_name(int& i);
  128256             : 
  128257             :           protected:
  128258             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  128259             :           virtual bool insert_child( SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false) override;
  128260             : 
  128261             :         public:
  128262             : 
  128263             :           SgClassDeclaration* get_declaration() const;
  128264             :           void set_declaration(SgClassDeclaration* new_val);
  128265             : 
  128266             :           SgClassDefinition( Sg_File_Info *f, SgClassDeclaration* d);
  128267             :           SgClassDefinition( SgClassDeclaration* d);
  128268             : 
  128269             : #if ALT_FIXUP_COPY
  128270             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  128271             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  128272             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  128273             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  128274             : #else
  128275             :        // DQ (10/19/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  128276             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  128277             : #endif
  128278             : 
  128279             : 
  128280             : 
  128281             : // End of memberFunctionString
  128282             : // Start of memberFunctionString
  128283             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  128284             : 
  128285             : // *** COMMON CODE SECTION BEGINS HERE ***
  128286             : 
  128287             :     public:
  128288             : 
  128289             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  128290             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  128291             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  128292             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  128293             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  128294             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  128295             : 
  128296             :       /*! \brief returns a string representing the class name */
  128297             :           virtual std::string class_name() const override;
  128298             : 
  128299             :       /*! \brief returns new style SageIII enum values */
  128300             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  128301             : 
  128302             :       /*! \brief static variant value */
  128303             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  128304             :        // static const VariantT static_variant = V_SgClassDefinition;
  128305             :           enum { static_variant = V_SgClassDefinition };
  128306             : 
  128307             :        /* the generated cast function */
  128308             :       /*! \brief Casts pointer from base class to derived class */
  128309             :           ROSE_DLL_API friend       SgClassDefinition* isSgClassDefinition(       SgNode * s );
  128310             : 
  128311             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  128312             :           ROSE_DLL_API friend const SgClassDefinition* isSgClassDefinition( const SgNode * s );
  128313             : 
  128314             :      // ******************************************
  128315             :      // * Memory Pool / New / Delete
  128316             :      // ******************************************
  128317             : 
  128318             :      public:
  128319             :           /// \private
  128320             :           static const unsigned pool_size; //
  128321             :           /// \private
  128322             :           static std::vector<unsigned char *> pools; //
  128323             :           /// \private
  128324             :           static SgClassDefinition * next_node; // 
  128325             : 
  128326             :           /// \private
  128327             :           static unsigned long initializeStorageClassArray(SgClassDefinitionStorageClass *); //
  128328             : 
  128329             :           /// \private
  128330             :           static void clearMemoryPool(); //
  128331             :           static void deleteMemoryPool(); //
  128332             : 
  128333             :           /// \private
  128334             :           static void extendMemoryPoolForFileIO(); //
  128335             : 
  128336             :           /// \private
  128337             :           static SgClassDefinition * getPointerFromGlobalIndex(unsigned long); //
  128338             :           /// \private
  128339             :           static SgClassDefinition * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  128340             : 
  128341             :           /// \private
  128342             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  128343             :           /// \private
  128344             :           static void resetValidFreepointers(); //
  128345             :           /// \private
  128346             :           static unsigned long getNumberOfLastValidPointer(); //
  128347             : 
  128348             : 
  128349             : #if defined(INLINE_FUNCTIONS)
  128350             :       /*! \brief returns pointer to newly allocated IR node */
  128351             :           inline void *operator new (size_t size);
  128352             : #else
  128353             :       /*! \brief returns pointer to newly allocated IR node */
  128354             :           void *operator new (size_t size);
  128355             : #endif
  128356             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  128357             :           void operator delete (void* pointer, size_t size);
  128358             : 
  128359             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  128360         336 :           void operator delete (void* pointer)
  128361             :              {
  128362             :             // This is the generated delete operator...
  128363         336 :                SgClassDefinition::operator delete (pointer,sizeof(SgClassDefinition));
  128364             :              }
  128365             : 
  128366             :       /*! \brief Returns the total number of IR nodes of this type */
  128367             :           static size_t numberOfNodes();
  128368             : 
  128369             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  128370             :           static size_t memoryUsage();
  128371             : 
  128372             :       // End of scope which started in IR nodes specific code 
  128373             :       /* */
  128374             : 
  128375             :       /* name Internal Functions
  128376             :           \brief Internal functions ... incomplete-documentation
  128377             : 
  128378             :           These functions have been made public as part of the design, but they are suggested for internal use 
  128379             :           or by particularly knowledgeable users for specialized tools or applications.
  128380             : 
  128381             :           \internal We could not make these private because they are required by user for special purposes. And 
  128382             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  128383             :          
  128384             :        */
  128385             : 
  128386             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  128387             :        // overridden in every class by *generated* implementation
  128388             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  128389             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  128390             :        // MS: 06/28/02 container of names of variables or container indices 
  128391             :        // used used in the traversal to access AST successor nodes
  128392             :        // overridden in every class by *generated* implementation
  128393             :       /*! \brief container of names of variables or container indices used used in the traversal
  128394             :           to access AST successor nodes overridden in every class by *generated* implementation */
  128395             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  128396             : 
  128397             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  128398             :        // than all the vector copies. The implementation for these functions is generated for each class.
  128399             :       /*! \brief return number of children in the traversal successor list */
  128400             :           virtual size_t get_numberOfTraversalSuccessors() override;
  128401             :       /*! \brief index-based access to traversal successors by index number */
  128402             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  128403             :       /*! \brief index-based access to traversal successors by child node */
  128404             :           virtual size_t get_childIndex(SgNode *child) override;
  128405             : 
  128406             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  128407             :        // MS: 08/16/2002 method for generating RTI information
  128408             :       /*! \brief return C++ Runtime-Time-Information */
  128409             :           virtual RTIReturnType roseRTI() override;
  128410             : #endif
  128411             :       /* */
  128412             : 
  128413             : 
  128414             : 
  128415             :       /* name Deprecated Functions
  128416             :           \brief Deprecated functions ... incomplete-documentation
  128417             : 
  128418             :           These functions have been deprecated from use.
  128419             :        */
  128420             :       /* */
  128421             : 
  128422             :       /*! returns a C style string (char*) representing the class name */
  128423             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  128424             : 
  128425             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  128426             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  128427             : #if 0
  128428             :       /*! returns old style Sage II enum values */
  128429             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  128430             :       /*! returns old style Sage II enum values */
  128431             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  128432             : #endif
  128433             :       /* */
  128434             : 
  128435             : 
  128436             : 
  128437             : 
  128438             :      public:
  128439             :       /* name Traversal Support Functions
  128440             :           \brief Traversal support functions ... incomplete-documentation
  128441             : 
  128442             :           These functions have been made public as part of the design, but they are suggested for internal use 
  128443             :           or by particularly knowledgable users for specialized tools or applications.
  128444             :        */
  128445             :       /* */
  128446             : 
  128447             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  128448             :        // (inferior to ROSE traversal mechanism, experimental).
  128449             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  128450             :        */
  128451             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  128452             : 
  128453             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  128454             :       /*! \brief support for the classic visitor pattern done in GoF */
  128455             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  128456             : 
  128457             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  128458             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  128459             :        */
  128460             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  128461             : 
  128462             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  128463             :        */
  128464             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  128465             : 
  128466             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  128467             :        // This traversal helps support internal tools that call static member functions.
  128468             :        // note: this function operates on the memory pools.
  128469             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  128470             :        */
  128471             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  128472             :       /* */
  128473             : 
  128474             : 
  128475             :      public:
  128476             :       /* name Memory Allocation Functions
  128477             :           \brief Memory allocations functions ... incomplete-documentation
  128478             : 
  128479             :           These functions have been made public as part of the design, but they are suggested for internal use 
  128480             :           or by particularly knowledgable users for specialized tools or applications.
  128481             :        */
  128482             :       /* */
  128483             : 
  128484             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  128485             : 
  128486             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  128487             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  128488             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  128489             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  128490             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  128491             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  128492             :           being used with the AST File I/O mechanism.
  128493             :        */
  128494             :           virtual bool isInMemoryPool() override;
  128495             : 
  128496             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  128497             : 
  128498             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  128499             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  128500             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  128501             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  128502             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  128503             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  128504             :           being used with the AST File I/O mechanism.
  128505             :        */
  128506             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  128507             : 
  128508             :       // DQ (4/30/2006): Modified to be a const function.
  128509             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  128510             : 
  128511             :           This functions is part of general support for many possible tools to operate 
  128512             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  128513             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  128514             :           less than the set of pointers used by the AST file I/O. This is part of
  128515             :           work implemented by Andreas, and support tools such as the AST graph generation.
  128516             : 
  128517             :           \warning This function can return unexpected data members and thus the 
  128518             :                    order and the number of elements is unpredicable and subject 
  128519             :                    to change.
  128520             : 
  128521             :           \returns STL vector of pairs of SgNode* and strings
  128522             :        */
  128523             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  128524             : 
  128525             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  128526             : 
  128527             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  128528             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  128529             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  128530             : 
  128531             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  128532             :                    and subject to change.
  128533             :        */
  128534             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  128535             : 
  128536             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  128537             : 
  128538             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  128539             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  128540             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  128541             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  128542             : 
  128543             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  128544             : 
  128545             :           \returns long
  128546             :        */
  128547             :           virtual long getChildIndex( SgNode* childNode ) const override;
  128548             : 
  128549             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  128550             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  128551             :       /* \brief Constructor for use by AST File I/O Mechanism
  128552             : 
  128553             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  128554             :           which obtained via fast binary file I/O from disk.
  128555             :        */
  128556             :        // SgClassDefinition( SgClassDefinitionStorageClass& source );
  128557             : 
  128558             : 
  128559             : 
  128560             : 
  128561             : 
  128562             :  // JH (10/24/2005): methods added to support the ast file IO
  128563             :     private:
  128564             : 
  128565             :       /* name AST Memory Allocation Support Functions
  128566             :           \brief Memory allocations support....
  128567             : 
  128568             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  128569             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  128570             :           and support the AST File I/O Mechanism.
  128571             :        */
  128572             :       /* */
  128573             : 
  128574             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  128575             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  128576             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  128577             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  128578             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  128579             :           a correspinding one in the AST_FILE_IO class!
  128580             :        */
  128581             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  128582             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  128583             :       /* \brief Typedef used for low level memory access.
  128584             :        */
  128585             :        // typedef unsigned char* TestType;
  128586             : 
  128587             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  128588             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  128589             :       /* \brief Typedef used to hold memory addresses as values.
  128590             :        */
  128591             :        // typedef unsigned long  AddressType;
  128592             : 
  128593             : 
  128594             : 
  128595             :        // necessary, to have direct access to the p_freepointer and the private methods !
  128596             :       /*! \brief friend class declaration to support AST File I/O */
  128597             :           friend class AST_FILE_IO;
  128598             : 
  128599             :       /*! \brief friend class declaration to support AST File I/O */
  128600             :           friend class SgClassDefinitionStorageClass;
  128601             : 
  128602             :       /*! \brief friend class declaration to support AST File I/O */
  128603             :           friend class AstSpecificDataManagingClass;
  128604             : 
  128605             :       /*! \brief friend class declaration to support AST File I/O */
  128606             :           friend class AstSpecificDataManagingClassStorageClass;
  128607             :     public:
  128608             :       /*! \brief IR node constructor to support AST File I/O */
  128609             :           SgClassDefinition( const SgClassDefinitionStorageClass& source );
  128610             : 
  128611             :  // private: // JJW hack
  128612             :        /*
  128613             :           name AST Memory Allocation Support Variables
  128614             :           Memory allocations support variables 
  128615             : 
  128616             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  128617             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  128618             :           and support the AST File I/O Mechanism.
  128619             :        */
  128620             :       /* */
  128621             : 
  128622             :     public:
  128623             : 
  128624             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  128625             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  128626             :       // virtual SgNode* addRegExpAttribute();
  128627             :       /*! \brief Support for AST matching using regular expression.
  128628             : 
  128629             :           This support is incomplete and the subject of current research to define 
  128630             :           RegEx trees to support inexact matching.
  128631             :        */
  128632             :           SgClassDefinition* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  128633             : 
  128634             : // *** COMMON CODE SECTION ENDS HERE ***
  128635             : 
  128636             : 
  128637             : // End of memberFunctionString
  128638             : // Start of memberFunctionString
  128639             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  128640             : 
  128641             :      // the generated cast function
  128642             :      // friend ROSE_DLL_API SgClassDefinition* isSgClassDefinition ( SgNode* s );
  128643             : 
  128644             :           typedef SgScopeStatement base_node_type;
  128645             : 
  128646             : 
  128647             : // End of memberFunctionString
  128648             : // Start of memberFunctionString
  128649             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  128650             : 
  128651             :           void post_construction_initialization() override;
  128652             : 
  128653             : 
  128654             : // End of memberFunctionString
  128655             : 
  128656             :      public: 
  128657             :          const SgDeclarationStatementPtrList&  get_members() const;
  128658             :          SgDeclarationStatementPtrList& get_members(); 
  128659             : 
  128660             :      public: 
  128661             :          const SgBaseClassPtrList&  get_inheritances() const;
  128662             :          SgBaseClassPtrList& get_inheritances(); 
  128663             : 
  128664             :      public: 
  128665             :          unsigned int get_packingAlignment() const;
  128666             :          void set_packingAlignment(unsigned int packingAlignment);
  128667             : 
  128668             :      public: 
  128669             :          bool get_isSequence() const;
  128670             :          void set_isSequence(bool isSequence);
  128671             : 
  128672             :      public: 
  128673             :          bool get_isPrivate() const;
  128674             :          void set_isPrivate(bool isPrivate);
  128675             : 
  128676             :      public: 
  128677             :          bool get_isAbstract() const;
  128678             :          void set_isAbstract(bool isAbstract);
  128679             : 
  128680             : 
  128681             :      public: 
  128682             :          virtual ~SgClassDefinition();
  128683             : 
  128684             : 
  128685             :      public: 
  128686             :          SgClassDefinition(Sg_File_Info* startOfConstruct ); 
  128687             :          SgClassDefinition(); 
  128688             : 
  128689             :     protected:
  128690             : // Start of memberFunctionString
  128691             : SgDeclarationStatementPtrList p_members;
  128692             :           
  128693             : // End of memberFunctionString
  128694             : // Start of memberFunctionString
  128695             : SgBaseClassPtrList p_inheritances;
  128696             :           
  128697             : // End of memberFunctionString
  128698             : // Start of memberFunctionString
  128699             : unsigned int p_packingAlignment;
  128700             :           
  128701             : // End of memberFunctionString
  128702             : // Start of memberFunctionString
  128703             : bool p_isSequence;
  128704             :           
  128705             : // End of memberFunctionString
  128706             : // Start of memberFunctionString
  128707             : bool p_isPrivate;
  128708             :           
  128709             : // End of memberFunctionString
  128710             : // Start of memberFunctionString
  128711             : bool p_isAbstract;
  128712             :           
  128713             : // End of memberFunctionString
  128714             : 
  128715             :     friend struct Rose::Traits::generated::describe_node_t<SgClassDefinition>;
  128716             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDefinition, SgDeclarationStatementPtrList,&SgClassDefinition::p_members>;
  128717             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDefinition, SgBaseClassPtrList,&SgClassDefinition::p_inheritances>;
  128718             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDefinition, unsigned int,&SgClassDefinition::p_packingAlignment>;
  128719             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDefinition, bool,&SgClassDefinition::p_isSequence>;
  128720             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDefinition, bool,&SgClassDefinition::p_isPrivate>;
  128721             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDefinition, bool,&SgClassDefinition::p_isAbstract>;
  128722             : 
  128723             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128724             : 
  128725             : 
  128726             :    };
  128727             : #endif
  128728             : 
  128729             : // postdeclarations for SgClassDefinition
  128730             : 
  128731             : /* #line 128732 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128732             : 
  128733             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  128734             : 
  128735             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128736             : 
  128737             : 
  128738             : /* #line 128739 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128739             : 
  128740             : 
  128741             : 
  128742             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128743             : 
  128744             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  128745             : //      This code is automatically generated for each 
  128746             : //      terminal and non-terminal within the defined 
  128747             : //      grammar.  There is a simple way to change the 
  128748             : //      code to fix bugs etc.  See the ROSE README file
  128749             : //      for directions.
  128750             : 
  128751             : // tps: (02/22/2010): Adding DLL export requirements
  128752             : #include "rosedll.h"
  128753             : 
  128754             : // predeclarations for SgTemplateInstantiationDefn
  128755             : 
  128756             : /* #line 128757 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128757             : 
  128758             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  128759             : 
  128760             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  128761             : 
  128762             : #if 1
  128763             : // Class Definition for SgTemplateInstantiationDefn
  128764             : class ROSE_DLL_API SgTemplateInstantiationDefn  : public SgClassDefinition
  128765             :    {
  128766             :      public:
  128767             : 
  128768             : 
  128769             : /* #line 128770 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  128770             : 
  128771             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  128772             : // Start of memberFunctionString
  128773             : /* #line 2165 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  128774             : 
  128775             : 
  128776             :        // DQ (3/18/2004): Generate template name with arguments
  128777             :        //                 overrides base class implementation.
  128778             :        // SgName get_name () const;
  128779             : 
  128780             :        // DQ (9/8/2004): overrides base class implementation
  128781             :           virtual SgName get_qualified_name() const override;
  128782             : 
  128783             :           SgTemplateInstantiationDefn( Sg_File_Info *f, SgTemplateInstantiationDecl* d);
  128784             :           SgTemplateInstantiationDefn( SgTemplateInstantiationDecl* d);
  128785             : 
  128786             : #if ALT_FIXUP_COPY
  128787             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  128788             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  128789             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  128790             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  128791             : #else
  128792             :        // DQ (10/19/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  128793             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  128794             : #endif
  128795             : 
  128796             :        // DQ (5/31/2012): Added to support mangled name testing (at least).
  128797             :           virtual SgName get_mangled_name(void) const override;
  128798             : 
  128799             : 
  128800             : 
  128801             : // End of memberFunctionString
  128802             : // Start of memberFunctionString
  128803             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  128804             : 
  128805             : // *** COMMON CODE SECTION BEGINS HERE ***
  128806             : 
  128807             :     public:
  128808             : 
  128809             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  128810             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  128811             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  128812             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  128813             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  128814             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  128815             : 
  128816             :       /*! \brief returns a string representing the class name */
  128817             :           virtual std::string class_name() const override;
  128818             : 
  128819             :       /*! \brief returns new style SageIII enum values */
  128820             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  128821             : 
  128822             :       /*! \brief static variant value */
  128823             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  128824             :        // static const VariantT static_variant = V_SgTemplateInstantiationDefn;
  128825             :           enum { static_variant = V_SgTemplateInstantiationDefn };
  128826             : 
  128827             :        /* the generated cast function */
  128828             :       /*! \brief Casts pointer from base class to derived class */
  128829             :           ROSE_DLL_API friend       SgTemplateInstantiationDefn* isSgTemplateInstantiationDefn(       SgNode * s );
  128830             : 
  128831             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  128832             :           ROSE_DLL_API friend const SgTemplateInstantiationDefn* isSgTemplateInstantiationDefn( const SgNode * s );
  128833             : 
  128834             :      // ******************************************
  128835             :      // * Memory Pool / New / Delete
  128836             :      // ******************************************
  128837             : 
  128838             :      public:
  128839             :           /// \private
  128840             :           static const unsigned pool_size; //
  128841             :           /// \private
  128842             :           static std::vector<unsigned char *> pools; //
  128843             :           /// \private
  128844             :           static SgTemplateInstantiationDefn * next_node; // 
  128845             : 
  128846             :           /// \private
  128847             :           static unsigned long initializeStorageClassArray(SgTemplateInstantiationDefnStorageClass *); //
  128848             : 
  128849             :           /// \private
  128850             :           static void clearMemoryPool(); //
  128851             :           static void deleteMemoryPool(); //
  128852             : 
  128853             :           /// \private
  128854             :           static void extendMemoryPoolForFileIO(); //
  128855             : 
  128856             :           /// \private
  128857             :           static SgTemplateInstantiationDefn * getPointerFromGlobalIndex(unsigned long); //
  128858             :           /// \private
  128859             :           static SgTemplateInstantiationDefn * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  128860             : 
  128861             :           /// \private
  128862             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  128863             :           /// \private
  128864             :           static void resetValidFreepointers(); //
  128865             :           /// \private
  128866             :           static unsigned long getNumberOfLastValidPointer(); //
  128867             : 
  128868             : 
  128869             : #if defined(INLINE_FUNCTIONS)
  128870             :       /*! \brief returns pointer to newly allocated IR node */
  128871             :           inline void *operator new (size_t size);
  128872             : #else
  128873             :       /*! \brief returns pointer to newly allocated IR node */
  128874             :           void *operator new (size_t size);
  128875             : #endif
  128876             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  128877             :           void operator delete (void* pointer, size_t size);
  128878             : 
  128879             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  128880        1202 :           void operator delete (void* pointer)
  128881             :              {
  128882             :             // This is the generated delete operator...
  128883        1202 :                SgTemplateInstantiationDefn::operator delete (pointer,sizeof(SgTemplateInstantiationDefn));
  128884             :              }
  128885             : 
  128886             :       /*! \brief Returns the total number of IR nodes of this type */
  128887             :           static size_t numberOfNodes();
  128888             : 
  128889             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  128890             :           static size_t memoryUsage();
  128891             : 
  128892             :       // End of scope which started in IR nodes specific code 
  128893             :       /* */
  128894             : 
  128895             :       /* name Internal Functions
  128896             :           \brief Internal functions ... incomplete-documentation
  128897             : 
  128898             :           These functions have been made public as part of the design, but they are suggested for internal use 
  128899             :           or by particularly knowledgeable users for specialized tools or applications.
  128900             : 
  128901             :           \internal We could not make these private because they are required by user for special purposes. And 
  128902             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  128903             :          
  128904             :        */
  128905             : 
  128906             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  128907             :        // overridden in every class by *generated* implementation
  128908             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  128909             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  128910             :        // MS: 06/28/02 container of names of variables or container indices 
  128911             :        // used used in the traversal to access AST successor nodes
  128912             :        // overridden in every class by *generated* implementation
  128913             :       /*! \brief container of names of variables or container indices used used in the traversal
  128914             :           to access AST successor nodes overridden in every class by *generated* implementation */
  128915             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  128916             : 
  128917             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  128918             :        // than all the vector copies. The implementation for these functions is generated for each class.
  128919             :       /*! \brief return number of children in the traversal successor list */
  128920             :           virtual size_t get_numberOfTraversalSuccessors() override;
  128921             :       /*! \brief index-based access to traversal successors by index number */
  128922             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  128923             :       /*! \brief index-based access to traversal successors by child node */
  128924             :           virtual size_t get_childIndex(SgNode *child) override;
  128925             : 
  128926             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  128927             :        // MS: 08/16/2002 method for generating RTI information
  128928             :       /*! \brief return C++ Runtime-Time-Information */
  128929             :           virtual RTIReturnType roseRTI() override;
  128930             : #endif
  128931             :       /* */
  128932             : 
  128933             : 
  128934             : 
  128935             :       /* name Deprecated Functions
  128936             :           \brief Deprecated functions ... incomplete-documentation
  128937             : 
  128938             :           These functions have been deprecated from use.
  128939             :        */
  128940             :       /* */
  128941             : 
  128942             :       /*! returns a C style string (char*) representing the class name */
  128943             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  128944             : 
  128945             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  128946             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  128947             : #if 0
  128948             :       /*! returns old style Sage II enum values */
  128949             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  128950             :       /*! returns old style Sage II enum values */
  128951             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  128952             : #endif
  128953             :       /* */
  128954             : 
  128955             : 
  128956             : 
  128957             : 
  128958             :      public:
  128959             :       /* name Traversal Support Functions
  128960             :           \brief Traversal support functions ... incomplete-documentation
  128961             : 
  128962             :           These functions have been made public as part of the design, but they are suggested for internal use 
  128963             :           or by particularly knowledgable users for specialized tools or applications.
  128964             :        */
  128965             :       /* */
  128966             : 
  128967             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  128968             :        // (inferior to ROSE traversal mechanism, experimental).
  128969             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  128970             :        */
  128971             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  128972             : 
  128973             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  128974             :       /*! \brief support for the classic visitor pattern done in GoF */
  128975             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  128976             : 
  128977             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  128978             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  128979             :        */
  128980             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  128981             : 
  128982             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  128983             :        */
  128984             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  128985             : 
  128986             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  128987             :        // This traversal helps support internal tools that call static member functions.
  128988             :        // note: this function operates on the memory pools.
  128989             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  128990             :        */
  128991             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  128992             :       /* */
  128993             : 
  128994             : 
  128995             :      public:
  128996             :       /* name Memory Allocation Functions
  128997             :           \brief Memory allocations functions ... incomplete-documentation
  128998             : 
  128999             :           These functions have been made public as part of the design, but they are suggested for internal use 
  129000             :           or by particularly knowledgable users for specialized tools or applications.
  129001             :        */
  129002             :       /* */
  129003             : 
  129004             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  129005             : 
  129006             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  129007             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  129008             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  129009             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  129010             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  129011             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  129012             :           being used with the AST File I/O mechanism.
  129013             :        */
  129014             :           virtual bool isInMemoryPool() override;
  129015             : 
  129016             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  129017             : 
  129018             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  129019             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  129020             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  129021             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  129022             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  129023             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  129024             :           being used with the AST File I/O mechanism.
  129025             :        */
  129026             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  129027             : 
  129028             :       // DQ (4/30/2006): Modified to be a const function.
  129029             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  129030             : 
  129031             :           This functions is part of general support for many possible tools to operate 
  129032             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  129033             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  129034             :           less than the set of pointers used by the AST file I/O. This is part of
  129035             :           work implemented by Andreas, and support tools such as the AST graph generation.
  129036             : 
  129037             :           \warning This function can return unexpected data members and thus the 
  129038             :                    order and the number of elements is unpredicable and subject 
  129039             :                    to change.
  129040             : 
  129041             :           \returns STL vector of pairs of SgNode* and strings
  129042             :        */
  129043             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  129044             : 
  129045             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  129046             : 
  129047             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  129048             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  129049             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  129050             : 
  129051             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  129052             :                    and subject to change.
  129053             :        */
  129054             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  129055             : 
  129056             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  129057             : 
  129058             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  129059             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  129060             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  129061             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  129062             : 
  129063             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  129064             : 
  129065             :           \returns long
  129066             :        */
  129067             :           virtual long getChildIndex( SgNode* childNode ) const override;
  129068             : 
  129069             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  129070             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  129071             :       /* \brief Constructor for use by AST File I/O Mechanism
  129072             : 
  129073             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  129074             :           which obtained via fast binary file I/O from disk.
  129075             :        */
  129076             :        // SgTemplateInstantiationDefn( SgTemplateInstantiationDefnStorageClass& source );
  129077             : 
  129078             : 
  129079             : 
  129080             : 
  129081             : 
  129082             :  // JH (10/24/2005): methods added to support the ast file IO
  129083             :     private:
  129084             : 
  129085             :       /* name AST Memory Allocation Support Functions
  129086             :           \brief Memory allocations support....
  129087             : 
  129088             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  129089             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  129090             :           and support the AST File I/O Mechanism.
  129091             :        */
  129092             :       /* */
  129093             : 
  129094             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  129095             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  129096             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  129097             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  129098             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  129099             :           a correspinding one in the AST_FILE_IO class!
  129100             :        */
  129101             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  129102             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  129103             :       /* \brief Typedef used for low level memory access.
  129104             :        */
  129105             :        // typedef unsigned char* TestType;
  129106             : 
  129107             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  129108             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  129109             :       /* \brief Typedef used to hold memory addresses as values.
  129110             :        */
  129111             :        // typedef unsigned long  AddressType;
  129112             : 
  129113             : 
  129114             : 
  129115             :        // necessary, to have direct access to the p_freepointer and the private methods !
  129116             :       /*! \brief friend class declaration to support AST File I/O */
  129117             :           friend class AST_FILE_IO;
  129118             : 
  129119             :       /*! \brief friend class declaration to support AST File I/O */
  129120             :           friend class SgTemplateInstantiationDefnStorageClass;
  129121             : 
  129122             :       /*! \brief friend class declaration to support AST File I/O */
  129123             :           friend class AstSpecificDataManagingClass;
  129124             : 
  129125             :       /*! \brief friend class declaration to support AST File I/O */
  129126             :           friend class AstSpecificDataManagingClassStorageClass;
  129127             :     public:
  129128             :       /*! \brief IR node constructor to support AST File I/O */
  129129             :           SgTemplateInstantiationDefn( const SgTemplateInstantiationDefnStorageClass& source );
  129130             : 
  129131             :  // private: // JJW hack
  129132             :        /*
  129133             :           name AST Memory Allocation Support Variables
  129134             :           Memory allocations support variables 
  129135             : 
  129136             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  129137             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  129138             :           and support the AST File I/O Mechanism.
  129139             :        */
  129140             :       /* */
  129141             : 
  129142             :     public:
  129143             : 
  129144             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  129145             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  129146             :       // virtual SgNode* addRegExpAttribute();
  129147             :       /*! \brief Support for AST matching using regular expression.
  129148             : 
  129149             :           This support is incomplete and the subject of current research to define 
  129150             :           RegEx trees to support inexact matching.
  129151             :        */
  129152             :           SgTemplateInstantiationDefn* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  129153             : 
  129154             : // *** COMMON CODE SECTION ENDS HERE ***
  129155             : 
  129156             : 
  129157             : // End of memberFunctionString
  129158             : // Start of memberFunctionString
  129159             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  129160             : 
  129161             :      // the generated cast function
  129162             :      // friend ROSE_DLL_API SgTemplateInstantiationDefn* isSgTemplateInstantiationDefn ( SgNode* s );
  129163             : 
  129164             :           typedef SgClassDefinition base_node_type;
  129165             : 
  129166             : 
  129167             : // End of memberFunctionString
  129168             : // Start of memberFunctionString
  129169             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  129170             : 
  129171             :           void post_construction_initialization() override;
  129172             : 
  129173             : 
  129174             : // End of memberFunctionString
  129175             : 
  129176             : 
  129177             :      public: 
  129178             :          virtual ~SgTemplateInstantiationDefn();
  129179             : 
  129180             : 
  129181             :      public: 
  129182             :          SgTemplateInstantiationDefn(Sg_File_Info* startOfConstruct ); 
  129183             :          SgTemplateInstantiationDefn(); 
  129184             : 
  129185             :     protected:
  129186             : 
  129187             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateInstantiationDefn>;
  129188             : 
  129189             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129190             : 
  129191             : 
  129192             :    };
  129193             : #endif
  129194             : 
  129195             : // postdeclarations for SgTemplateInstantiationDefn
  129196             : 
  129197             : /* #line 129198 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129198             : 
  129199             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  129200             : 
  129201             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129202             : 
  129203             : 
  129204             : /* #line 129205 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129205             : 
  129206             : 
  129207             : 
  129208             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129209             : 
  129210             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  129211             : //      This code is automatically generated for each 
  129212             : //      terminal and non-terminal within the defined 
  129213             : //      grammar.  There is a simple way to change the 
  129214             : //      code to fix bugs etc.  See the ROSE README file
  129215             : //      for directions.
  129216             : 
  129217             : // tps: (02/22/2010): Adding DLL export requirements
  129218             : #include "rosedll.h"
  129219             : 
  129220             : // predeclarations for SgTemplateClassDefinition
  129221             : 
  129222             : /* #line 129223 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129223             : 
  129224             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  129225             : 
  129226             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129227             : 
  129228             : #if 1
  129229             : // Class Definition for SgTemplateClassDefinition
  129230             : class ROSE_DLL_API SgTemplateClassDefinition  : public SgClassDefinition
  129231             :    {
  129232             :      public:
  129233             : 
  129234             : 
  129235             : /* #line 129236 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129236             : 
  129237             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  129238             : // Start of memberFunctionString
  129239             : /* #line 2835 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  129240             : 
  129241             : 
  129242             :      public:
  129243             :           SgTemplateClassDeclaration* get_declaration() const;
  129244             :           void set_declaration(SgTemplateClassDeclaration* new_val);
  129245             : 
  129246             :           SgName get_qualified_name() const override;
  129247             :           SgName get_mangled_name (void) const override;
  129248             :           SgName get_mangled_qualified_name (int& i);
  129249             : 
  129250             :        // DQ (11/19/2011): Added constructor to match SgClassDefinition API.
  129251             :           SgTemplateClassDefinition( SgTemplateClassDeclaration *decl);
  129252             : 
  129253             : 
  129254             : 
  129255             : // End of memberFunctionString
  129256             : // Start of memberFunctionString
  129257             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  129258             : 
  129259             : // *** COMMON CODE SECTION BEGINS HERE ***
  129260             : 
  129261             :     public:
  129262             : 
  129263             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  129264             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  129265             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  129266             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  129267             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  129268             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  129269             : 
  129270             :       /*! \brief returns a string representing the class name */
  129271             :           virtual std::string class_name() const override;
  129272             : 
  129273             :       /*! \brief returns new style SageIII enum values */
  129274             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  129275             : 
  129276             :       /*! \brief static variant value */
  129277             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  129278             :        // static const VariantT static_variant = V_SgTemplateClassDefinition;
  129279             :           enum { static_variant = V_SgTemplateClassDefinition };
  129280             : 
  129281             :        /* the generated cast function */
  129282             :       /*! \brief Casts pointer from base class to derived class */
  129283             :           ROSE_DLL_API friend       SgTemplateClassDefinition* isSgTemplateClassDefinition(       SgNode * s );
  129284             : 
  129285             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  129286             :           ROSE_DLL_API friend const SgTemplateClassDefinition* isSgTemplateClassDefinition( const SgNode * s );
  129287             : 
  129288             :      // ******************************************
  129289             :      // * Memory Pool / New / Delete
  129290             :      // ******************************************
  129291             : 
  129292             :      public:
  129293             :           /// \private
  129294             :           static const unsigned pool_size; //
  129295             :           /// \private
  129296             :           static std::vector<unsigned char *> pools; //
  129297             :           /// \private
  129298             :           static SgTemplateClassDefinition * next_node; // 
  129299             : 
  129300             :           /// \private
  129301             :           static unsigned long initializeStorageClassArray(SgTemplateClassDefinitionStorageClass *); //
  129302             : 
  129303             :           /// \private
  129304             :           static void clearMemoryPool(); //
  129305             :           static void deleteMemoryPool(); //
  129306             : 
  129307             :           /// \private
  129308             :           static void extendMemoryPoolForFileIO(); //
  129309             : 
  129310             :           /// \private
  129311             :           static SgTemplateClassDefinition * getPointerFromGlobalIndex(unsigned long); //
  129312             :           /// \private
  129313             :           static SgTemplateClassDefinition * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  129314             : 
  129315             :           /// \private
  129316             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  129317             :           /// \private
  129318             :           static void resetValidFreepointers(); //
  129319             :           /// \private
  129320             :           static unsigned long getNumberOfLastValidPointer(); //
  129321             : 
  129322             : 
  129323             : #if defined(INLINE_FUNCTIONS)
  129324             :       /*! \brief returns pointer to newly allocated IR node */
  129325             :           inline void *operator new (size_t size);
  129326             : #else
  129327             :       /*! \brief returns pointer to newly allocated IR node */
  129328             :           void *operator new (size_t size);
  129329             : #endif
  129330             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  129331             :           void operator delete (void* pointer, size_t size);
  129332             : 
  129333             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  129334        1012 :           void operator delete (void* pointer)
  129335             :              {
  129336             :             // This is the generated delete operator...
  129337        1012 :                SgTemplateClassDefinition::operator delete (pointer,sizeof(SgTemplateClassDefinition));
  129338             :              }
  129339             : 
  129340             :       /*! \brief Returns the total number of IR nodes of this type */
  129341             :           static size_t numberOfNodes();
  129342             : 
  129343             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  129344             :           static size_t memoryUsage();
  129345             : 
  129346             :       // End of scope which started in IR nodes specific code 
  129347             :       /* */
  129348             : 
  129349             :       /* name Internal Functions
  129350             :           \brief Internal functions ... incomplete-documentation
  129351             : 
  129352             :           These functions have been made public as part of the design, but they are suggested for internal use 
  129353             :           or by particularly knowledgeable users for specialized tools or applications.
  129354             : 
  129355             :           \internal We could not make these private because they are required by user for special purposes. And 
  129356             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  129357             :          
  129358             :        */
  129359             : 
  129360             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  129361             :        // overridden in every class by *generated* implementation
  129362             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  129363             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  129364             :        // MS: 06/28/02 container of names of variables or container indices 
  129365             :        // used used in the traversal to access AST successor nodes
  129366             :        // overridden in every class by *generated* implementation
  129367             :       /*! \brief container of names of variables or container indices used used in the traversal
  129368             :           to access AST successor nodes overridden in every class by *generated* implementation */
  129369             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  129370             : 
  129371             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  129372             :        // than all the vector copies. The implementation for these functions is generated for each class.
  129373             :       /*! \brief return number of children in the traversal successor list */
  129374             :           virtual size_t get_numberOfTraversalSuccessors() override;
  129375             :       /*! \brief index-based access to traversal successors by index number */
  129376             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  129377             :       /*! \brief index-based access to traversal successors by child node */
  129378             :           virtual size_t get_childIndex(SgNode *child) override;
  129379             : 
  129380             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  129381             :        // MS: 08/16/2002 method for generating RTI information
  129382             :       /*! \brief return C++ Runtime-Time-Information */
  129383             :           virtual RTIReturnType roseRTI() override;
  129384             : #endif
  129385             :       /* */
  129386             : 
  129387             : 
  129388             : 
  129389             :       /* name Deprecated Functions
  129390             :           \brief Deprecated functions ... incomplete-documentation
  129391             : 
  129392             :           These functions have been deprecated from use.
  129393             :        */
  129394             :       /* */
  129395             : 
  129396             :       /*! returns a C style string (char*) representing the class name */
  129397             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  129398             : 
  129399             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  129400             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  129401             : #if 0
  129402             :       /*! returns old style Sage II enum values */
  129403             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  129404             :       /*! returns old style Sage II enum values */
  129405             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  129406             : #endif
  129407             :       /* */
  129408             : 
  129409             : 
  129410             : 
  129411             : 
  129412             :      public:
  129413             :       /* name Traversal Support Functions
  129414             :           \brief Traversal support functions ... incomplete-documentation
  129415             : 
  129416             :           These functions have been made public as part of the design, but they are suggested for internal use 
  129417             :           or by particularly knowledgable users for specialized tools or applications.
  129418             :        */
  129419             :       /* */
  129420             : 
  129421             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  129422             :        // (inferior to ROSE traversal mechanism, experimental).
  129423             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  129424             :        */
  129425             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  129426             : 
  129427             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  129428             :       /*! \brief support for the classic visitor pattern done in GoF */
  129429             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  129430             : 
  129431             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  129432             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  129433             :        */
  129434             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  129435             : 
  129436             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  129437             :        */
  129438             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  129439             : 
  129440             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  129441             :        // This traversal helps support internal tools that call static member functions.
  129442             :        // note: this function operates on the memory pools.
  129443             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  129444             :        */
  129445             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  129446             :       /* */
  129447             : 
  129448             : 
  129449             :      public:
  129450             :       /* name Memory Allocation Functions
  129451             :           \brief Memory allocations functions ... incomplete-documentation
  129452             : 
  129453             :           These functions have been made public as part of the design, but they are suggested for internal use 
  129454             :           or by particularly knowledgable users for specialized tools or applications.
  129455             :        */
  129456             :       /* */
  129457             : 
  129458             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  129459             : 
  129460             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  129461             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  129462             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  129463             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  129464             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  129465             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  129466             :           being used with the AST File I/O mechanism.
  129467             :        */
  129468             :           virtual bool isInMemoryPool() override;
  129469             : 
  129470             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  129471             : 
  129472             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  129473             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  129474             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  129475             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  129476             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  129477             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  129478             :           being used with the AST File I/O mechanism.
  129479             :        */
  129480             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  129481             : 
  129482             :       // DQ (4/30/2006): Modified to be a const function.
  129483             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  129484             : 
  129485             :           This functions is part of general support for many possible tools to operate 
  129486             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  129487             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  129488             :           less than the set of pointers used by the AST file I/O. This is part of
  129489             :           work implemented by Andreas, and support tools such as the AST graph generation.
  129490             : 
  129491             :           \warning This function can return unexpected data members and thus the 
  129492             :                    order and the number of elements is unpredicable and subject 
  129493             :                    to change.
  129494             : 
  129495             :           \returns STL vector of pairs of SgNode* and strings
  129496             :        */
  129497             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  129498             : 
  129499             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  129500             : 
  129501             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  129502             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  129503             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  129504             : 
  129505             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  129506             :                    and subject to change.
  129507             :        */
  129508             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  129509             : 
  129510             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  129511             : 
  129512             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  129513             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  129514             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  129515             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  129516             : 
  129517             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  129518             : 
  129519             :           \returns long
  129520             :        */
  129521             :           virtual long getChildIndex( SgNode* childNode ) const override;
  129522             : 
  129523             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  129524             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  129525             :       /* \brief Constructor for use by AST File I/O Mechanism
  129526             : 
  129527             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  129528             :           which obtained via fast binary file I/O from disk.
  129529             :        */
  129530             :        // SgTemplateClassDefinition( SgTemplateClassDefinitionStorageClass& source );
  129531             : 
  129532             : 
  129533             : 
  129534             : 
  129535             : 
  129536             :  // JH (10/24/2005): methods added to support the ast file IO
  129537             :     private:
  129538             : 
  129539             :       /* name AST Memory Allocation Support Functions
  129540             :           \brief Memory allocations support....
  129541             : 
  129542             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  129543             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  129544             :           and support the AST File I/O Mechanism.
  129545             :        */
  129546             :       /* */
  129547             : 
  129548             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  129549             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  129550             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  129551             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  129552             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  129553             :           a correspinding one in the AST_FILE_IO class!
  129554             :        */
  129555             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  129556             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  129557             :       /* \brief Typedef used for low level memory access.
  129558             :        */
  129559             :        // typedef unsigned char* TestType;
  129560             : 
  129561             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  129562             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  129563             :       /* \brief Typedef used to hold memory addresses as values.
  129564             :        */
  129565             :        // typedef unsigned long  AddressType;
  129566             : 
  129567             : 
  129568             : 
  129569             :        // necessary, to have direct access to the p_freepointer and the private methods !
  129570             :       /*! \brief friend class declaration to support AST File I/O */
  129571             :           friend class AST_FILE_IO;
  129572             : 
  129573             :       /*! \brief friend class declaration to support AST File I/O */
  129574             :           friend class SgTemplateClassDefinitionStorageClass;
  129575             : 
  129576             :       /*! \brief friend class declaration to support AST File I/O */
  129577             :           friend class AstSpecificDataManagingClass;
  129578             : 
  129579             :       /*! \brief friend class declaration to support AST File I/O */
  129580             :           friend class AstSpecificDataManagingClassStorageClass;
  129581             :     public:
  129582             :       /*! \brief IR node constructor to support AST File I/O */
  129583             :           SgTemplateClassDefinition( const SgTemplateClassDefinitionStorageClass& source );
  129584             : 
  129585             :  // private: // JJW hack
  129586             :        /*
  129587             :           name AST Memory Allocation Support Variables
  129588             :           Memory allocations support variables 
  129589             : 
  129590             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  129591             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  129592             :           and support the AST File I/O Mechanism.
  129593             :        */
  129594             :       /* */
  129595             : 
  129596             :     public:
  129597             : 
  129598             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  129599             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  129600             :       // virtual SgNode* addRegExpAttribute();
  129601             :       /*! \brief Support for AST matching using regular expression.
  129602             : 
  129603             :           This support is incomplete and the subject of current research to define 
  129604             :           RegEx trees to support inexact matching.
  129605             :        */
  129606             :           SgTemplateClassDefinition* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  129607             : 
  129608             : // *** COMMON CODE SECTION ENDS HERE ***
  129609             : 
  129610             : 
  129611             : // End of memberFunctionString
  129612             : // Start of memberFunctionString
  129613             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  129614             : 
  129615             :      // the generated cast function
  129616             :      // friend ROSE_DLL_API SgTemplateClassDefinition* isSgTemplateClassDefinition ( SgNode* s );
  129617             : 
  129618             :           typedef SgClassDefinition base_node_type;
  129619             : 
  129620             : 
  129621             : // End of memberFunctionString
  129622             : // Start of memberFunctionString
  129623             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  129624             : 
  129625             :           void post_construction_initialization() override;
  129626             : 
  129627             : 
  129628             : // End of memberFunctionString
  129629             : 
  129630             : 
  129631             :      public: 
  129632             :          virtual ~SgTemplateClassDefinition();
  129633             : 
  129634             : 
  129635             :      public: 
  129636             :          SgTemplateClassDefinition(Sg_File_Info* startOfConstruct ); 
  129637             :          SgTemplateClassDefinition(); 
  129638             : 
  129639             :     protected:
  129640             : 
  129641             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateClassDefinition>;
  129642             : 
  129643             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129644             : 
  129645             : 
  129646             :    };
  129647             : #endif
  129648             : 
  129649             : // postdeclarations for SgTemplateClassDefinition
  129650             : 
  129651             : /* #line 129652 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129652             : 
  129653             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  129654             : 
  129655             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129656             : 
  129657             : 
  129658             : /* #line 129659 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129659             : 
  129660             : 
  129661             : 
  129662             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129663             : 
  129664             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  129665             : //      This code is automatically generated for each 
  129666             : //      terminal and non-terminal within the defined 
  129667             : //      grammar.  There is a simple way to change the 
  129668             : //      code to fix bugs etc.  See the ROSE README file
  129669             : //      for directions.
  129670             : 
  129671             : // tps: (02/22/2010): Adding DLL export requirements
  129672             : #include "rosedll.h"
  129673             : 
  129674             : // predeclarations for SgWhileStmt
  129675             : 
  129676             : /* #line 129677 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129677             : 
  129678             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  129679             : 
  129680             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  129681             : 
  129682             : #if 1
  129683             : // Class Definition for SgWhileStmt
  129684             : class ROSE_DLL_API SgWhileStmt  : public SgScopeStatement
  129685             :    {
  129686             :      public:
  129687             : 
  129688             : 
  129689             : /* #line 129690 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  129690             : 
  129691             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  129692             : // Start of memberFunctionString
  129693             : /* #line 2314 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  129694             : 
  129695             :        // void post_construction_initialization();
  129696             : #if 0
  129697             :           SgStatement* get_next(int&) const;
  129698             : #endif
  129699             : 
  129700             :         protected:
  129701             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  129702             : 
  129703             :         public:
  129704             : 
  129705             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  129706             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  129707             :           virtual unsigned int cfgIndexForEnd() const override;
  129708             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  129709             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  129710             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  129711             : #endif
  129712             : 
  129713             :        // DQ (2/22/2007): Added for uniform support of mangled names
  129714             :           virtual SgName get_mangled_name() const override;
  129715             : 
  129716             : #if ALT_FIXUP_COPY
  129717             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  129718             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  129719             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  129720             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  129721             : #else
  129722             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  129723             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  129724             : #endif
  129725             : 
  129726             : 
  129727             : 
  129728             : // End of memberFunctionString
  129729             : // Start of memberFunctionString
  129730             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  129731             : 
  129732             : // *** COMMON CODE SECTION BEGINS HERE ***
  129733             : 
  129734             :     public:
  129735             : 
  129736             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  129737             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  129738             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  129739             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  129740             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  129741             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  129742             : 
  129743             :       /*! \brief returns a string representing the class name */
  129744             :           virtual std::string class_name() const override;
  129745             : 
  129746             :       /*! \brief returns new style SageIII enum values */
  129747             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  129748             : 
  129749             :       /*! \brief static variant value */
  129750             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  129751             :        // static const VariantT static_variant = V_SgWhileStmt;
  129752             :           enum { static_variant = V_SgWhileStmt };
  129753             : 
  129754             :        /* the generated cast function */
  129755             :       /*! \brief Casts pointer from base class to derived class */
  129756             :           ROSE_DLL_API friend       SgWhileStmt* isSgWhileStmt(       SgNode * s );
  129757             : 
  129758             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  129759             :           ROSE_DLL_API friend const SgWhileStmt* isSgWhileStmt( const SgNode * s );
  129760             : 
  129761             :      // ******************************************
  129762             :      // * Memory Pool / New / Delete
  129763             :      // ******************************************
  129764             : 
  129765             :      public:
  129766             :           /// \private
  129767             :           static const unsigned pool_size; //
  129768             :           /// \private
  129769             :           static std::vector<unsigned char *> pools; //
  129770             :           /// \private
  129771             :           static SgWhileStmt * next_node; // 
  129772             : 
  129773             :           /// \private
  129774             :           static unsigned long initializeStorageClassArray(SgWhileStmtStorageClass *); //
  129775             : 
  129776             :           /// \private
  129777             :           static void clearMemoryPool(); //
  129778             :           static void deleteMemoryPool(); //
  129779             : 
  129780             :           /// \private
  129781             :           static void extendMemoryPoolForFileIO(); //
  129782             : 
  129783             :           /// \private
  129784             :           static SgWhileStmt * getPointerFromGlobalIndex(unsigned long); //
  129785             :           /// \private
  129786             :           static SgWhileStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  129787             : 
  129788             :           /// \private
  129789             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  129790             :           /// \private
  129791             :           static void resetValidFreepointers(); //
  129792             :           /// \private
  129793             :           static unsigned long getNumberOfLastValidPointer(); //
  129794             : 
  129795             : 
  129796             : #if defined(INLINE_FUNCTIONS)
  129797             :       /*! \brief returns pointer to newly allocated IR node */
  129798             :           inline void *operator new (size_t size);
  129799             : #else
  129800             :       /*! \brief returns pointer to newly allocated IR node */
  129801             :           void *operator new (size_t size);
  129802             : #endif
  129803             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  129804             :           void operator delete (void* pointer, size_t size);
  129805             : 
  129806             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  129807          94 :           void operator delete (void* pointer)
  129808             :              {
  129809             :             // This is the generated delete operator...
  129810          94 :                SgWhileStmt::operator delete (pointer,sizeof(SgWhileStmt));
  129811             :              }
  129812             : 
  129813             :       /*! \brief Returns the total number of IR nodes of this type */
  129814             :           static size_t numberOfNodes();
  129815             : 
  129816             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  129817             :           static size_t memoryUsage();
  129818             : 
  129819             :       // End of scope which started in IR nodes specific code 
  129820             :       /* */
  129821             : 
  129822             :       /* name Internal Functions
  129823             :           \brief Internal functions ... incomplete-documentation
  129824             : 
  129825             :           These functions have been made public as part of the design, but they are suggested for internal use 
  129826             :           or by particularly knowledgeable users for specialized tools or applications.
  129827             : 
  129828             :           \internal We could not make these private because they are required by user for special purposes. And 
  129829             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  129830             :          
  129831             :        */
  129832             : 
  129833             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  129834             :        // overridden in every class by *generated* implementation
  129835             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  129836             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  129837             :        // MS: 06/28/02 container of names of variables or container indices 
  129838             :        // used used in the traversal to access AST successor nodes
  129839             :        // overridden in every class by *generated* implementation
  129840             :       /*! \brief container of names of variables or container indices used used in the traversal
  129841             :           to access AST successor nodes overridden in every class by *generated* implementation */
  129842             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  129843             : 
  129844             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  129845             :        // than all the vector copies. The implementation for these functions is generated for each class.
  129846             :       /*! \brief return number of children in the traversal successor list */
  129847             :           virtual size_t get_numberOfTraversalSuccessors() override;
  129848             :       /*! \brief index-based access to traversal successors by index number */
  129849             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  129850             :       /*! \brief index-based access to traversal successors by child node */
  129851             :           virtual size_t get_childIndex(SgNode *child) override;
  129852             : 
  129853             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  129854             :        // MS: 08/16/2002 method for generating RTI information
  129855             :       /*! \brief return C++ Runtime-Time-Information */
  129856             :           virtual RTIReturnType roseRTI() override;
  129857             : #endif
  129858             :       /* */
  129859             : 
  129860             : 
  129861             : 
  129862             :       /* name Deprecated Functions
  129863             :           \brief Deprecated functions ... incomplete-documentation
  129864             : 
  129865             :           These functions have been deprecated from use.
  129866             :        */
  129867             :       /* */
  129868             : 
  129869             :       /*! returns a C style string (char*) representing the class name */
  129870             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  129871             : 
  129872             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  129873             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  129874             : #if 0
  129875             :       /*! returns old style Sage II enum values */
  129876             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  129877             :       /*! returns old style Sage II enum values */
  129878             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  129879             : #endif
  129880             :       /* */
  129881             : 
  129882             : 
  129883             : 
  129884             : 
  129885             :      public:
  129886             :       /* name Traversal Support Functions
  129887             :           \brief Traversal support functions ... incomplete-documentation
  129888             : 
  129889             :           These functions have been made public as part of the design, but they are suggested for internal use 
  129890             :           or by particularly knowledgable users for specialized tools or applications.
  129891             :        */
  129892             :       /* */
  129893             : 
  129894             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  129895             :        // (inferior to ROSE traversal mechanism, experimental).
  129896             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  129897             :        */
  129898             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  129899             : 
  129900             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  129901             :       /*! \brief support for the classic visitor pattern done in GoF */
  129902             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  129903             : 
  129904             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  129905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  129906             :        */
  129907             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  129908             : 
  129909             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  129910             :        */
  129911             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  129912             : 
  129913             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  129914             :        // This traversal helps support internal tools that call static member functions.
  129915             :        // note: this function operates on the memory pools.
  129916             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  129917             :        */
  129918             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  129919             :       /* */
  129920             : 
  129921             : 
  129922             :      public:
  129923             :       /* name Memory Allocation Functions
  129924             :           \brief Memory allocations functions ... incomplete-documentation
  129925             : 
  129926             :           These functions have been made public as part of the design, but they are suggested for internal use 
  129927             :           or by particularly knowledgable users for specialized tools or applications.
  129928             :        */
  129929             :       /* */
  129930             : 
  129931             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  129932             : 
  129933             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  129934             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  129935             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  129936             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  129937             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  129938             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  129939             :           being used with the AST File I/O mechanism.
  129940             :        */
  129941             :           virtual bool isInMemoryPool() override;
  129942             : 
  129943             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  129944             : 
  129945             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  129946             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  129947             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  129948             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  129949             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  129950             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  129951             :           being used with the AST File I/O mechanism.
  129952             :        */
  129953             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  129954             : 
  129955             :       // DQ (4/30/2006): Modified to be a const function.
  129956             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  129957             : 
  129958             :           This functions is part of general support for many possible tools to operate 
  129959             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  129960             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  129961             :           less than the set of pointers used by the AST file I/O. This is part of
  129962             :           work implemented by Andreas, and support tools such as the AST graph generation.
  129963             : 
  129964             :           \warning This function can return unexpected data members and thus the 
  129965             :                    order and the number of elements is unpredicable and subject 
  129966             :                    to change.
  129967             : 
  129968             :           \returns STL vector of pairs of SgNode* and strings
  129969             :        */
  129970             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  129971             : 
  129972             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  129973             : 
  129974             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  129975             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  129976             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  129977             : 
  129978             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  129979             :                    and subject to change.
  129980             :        */
  129981             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  129982             : 
  129983             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  129984             : 
  129985             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  129986             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  129987             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  129988             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  129989             : 
  129990             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  129991             : 
  129992             :           \returns long
  129993             :        */
  129994             :           virtual long getChildIndex( SgNode* childNode ) const override;
  129995             : 
  129996             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  129997             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  129998             :       /* \brief Constructor for use by AST File I/O Mechanism
  129999             : 
  130000             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  130001             :           which obtained via fast binary file I/O from disk.
  130002             :        */
  130003             :        // SgWhileStmt( SgWhileStmtStorageClass& source );
  130004             : 
  130005             : 
  130006             : 
  130007             : 
  130008             : 
  130009             :  // JH (10/24/2005): methods added to support the ast file IO
  130010             :     private:
  130011             : 
  130012             :       /* name AST Memory Allocation Support Functions
  130013             :           \brief Memory allocations support....
  130014             : 
  130015             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  130016             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  130017             :           and support the AST File I/O Mechanism.
  130018             :        */
  130019             :       /* */
  130020             : 
  130021             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  130022             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  130023             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  130024             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  130025             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  130026             :           a correspinding one in the AST_FILE_IO class!
  130027             :        */
  130028             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  130029             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  130030             :       /* \brief Typedef used for low level memory access.
  130031             :        */
  130032             :        // typedef unsigned char* TestType;
  130033             : 
  130034             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  130035             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  130036             :       /* \brief Typedef used to hold memory addresses as values.
  130037             :        */
  130038             :        // typedef unsigned long  AddressType;
  130039             : 
  130040             : 
  130041             : 
  130042             :        // necessary, to have direct access to the p_freepointer and the private methods !
  130043             :       /*! \brief friend class declaration to support AST File I/O */
  130044             :           friend class AST_FILE_IO;
  130045             : 
  130046             :       /*! \brief friend class declaration to support AST File I/O */
  130047             :           friend class SgWhileStmtStorageClass;
  130048             : 
  130049             :       /*! \brief friend class declaration to support AST File I/O */
  130050             :           friend class AstSpecificDataManagingClass;
  130051             : 
  130052             :       /*! \brief friend class declaration to support AST File I/O */
  130053             :           friend class AstSpecificDataManagingClassStorageClass;
  130054             :     public:
  130055             :       /*! \brief IR node constructor to support AST File I/O */
  130056             :           SgWhileStmt( const SgWhileStmtStorageClass& source );
  130057             : 
  130058             :  // private: // JJW hack
  130059             :        /*
  130060             :           name AST Memory Allocation Support Variables
  130061             :           Memory allocations support variables 
  130062             : 
  130063             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  130064             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  130065             :           and support the AST File I/O Mechanism.
  130066             :        */
  130067             :       /* */
  130068             : 
  130069             :     public:
  130070             : 
  130071             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  130072             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  130073             :       // virtual SgNode* addRegExpAttribute();
  130074             :       /*! \brief Support for AST matching using regular expression.
  130075             : 
  130076             :           This support is incomplete and the subject of current research to define 
  130077             :           RegEx trees to support inexact matching.
  130078             :        */
  130079             :           SgWhileStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  130080             : 
  130081             : // *** COMMON CODE SECTION ENDS HERE ***
  130082             : 
  130083             : 
  130084             : // End of memberFunctionString
  130085             : // Start of memberFunctionString
  130086             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  130087             : 
  130088             :      // the generated cast function
  130089             :      // friend ROSE_DLL_API SgWhileStmt* isSgWhileStmt ( SgNode* s );
  130090             : 
  130091             :           typedef SgScopeStatement base_node_type;
  130092             : 
  130093             : 
  130094             : // End of memberFunctionString
  130095             : // Start of memberFunctionString
  130096             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  130097             : 
  130098             :           void post_construction_initialization() override;
  130099             : 
  130100             : 
  130101             : // End of memberFunctionString
  130102             : 
  130103             :      public: 
  130104             :          SgStatement* get_condition() const;
  130105             :          void set_condition(SgStatement* condition);
  130106             : 
  130107             :      public: 
  130108             :          SgStatement* get_body() const;
  130109             :          void set_body(SgStatement* body);
  130110             : 
  130111             :      public: 
  130112             :          SgStatement* get_else_body() const;
  130113             :          void set_else_body(SgStatement* else_body);
  130114             : 
  130115             :      public: 
  130116             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  130117             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  130118             : 
  130119             :      public: 
  130120             :          std::string get_string_label() const;
  130121             :          void set_string_label(std::string string_label);
  130122             : 
  130123             :      public: 
  130124             :          bool get_has_end_statement() const;
  130125             :          void set_has_end_statement(bool has_end_statement);
  130126             : 
  130127             : 
  130128             :      public: 
  130129             :          virtual ~SgWhileStmt();
  130130             : 
  130131             : 
  130132             :      public: 
  130133             :          SgWhileStmt(Sg_File_Info* startOfConstruct , SgStatement* condition = NULL, SgStatement* body = NULL); 
  130134             :          SgWhileStmt(SgStatement* condition, SgStatement* body); 
  130135             : 
  130136             :     protected:
  130137             : // Start of memberFunctionString
  130138             : SgStatement* p_condition;
  130139             :           
  130140             : // End of memberFunctionString
  130141             : // Start of memberFunctionString
  130142             : SgStatement* p_body;
  130143             :           
  130144             : // End of memberFunctionString
  130145             : // Start of memberFunctionString
  130146             : SgStatement* p_else_body;
  130147             :           
  130148             : // End of memberFunctionString
  130149             : // Start of memberFunctionString
  130150             : SgLabelRefExp* p_end_numeric_label;
  130151             :           
  130152             : // End of memberFunctionString
  130153             : // Start of memberFunctionString
  130154             : std::string p_string_label;
  130155             :           
  130156             : // End of memberFunctionString
  130157             : // Start of memberFunctionString
  130158             : bool p_has_end_statement;
  130159             :           
  130160             : // End of memberFunctionString
  130161             : 
  130162             :     friend struct Rose::Traits::generated::describe_node_t<SgWhileStmt>;
  130163             :     friend struct Rose::Traits::generated::describe_field_t<SgWhileStmt, SgStatement*,&SgWhileStmt::p_condition>;
  130164             :     friend struct Rose::Traits::generated::describe_field_t<SgWhileStmt, SgStatement*,&SgWhileStmt::p_body>;
  130165             :     friend struct Rose::Traits::generated::describe_field_t<SgWhileStmt, SgStatement*,&SgWhileStmt::p_else_body>;
  130166             :     friend struct Rose::Traits::generated::describe_field_t<SgWhileStmt, SgLabelRefExp*,&SgWhileStmt::p_end_numeric_label>;
  130167             :     friend struct Rose::Traits::generated::describe_field_t<SgWhileStmt, std::string,&SgWhileStmt::p_string_label>;
  130168             :     friend struct Rose::Traits::generated::describe_field_t<SgWhileStmt, bool,&SgWhileStmt::p_has_end_statement>;
  130169             : 
  130170             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130171             : 
  130172             : 
  130173             :    };
  130174             : #endif
  130175             : 
  130176             : // postdeclarations for SgWhileStmt
  130177             : 
  130178             : /* #line 130179 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130179             : 
  130180             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  130181             : 
  130182             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130183             : 
  130184             : 
  130185             : /* #line 130186 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130186             : 
  130187             : 
  130188             : 
  130189             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130190             : 
  130191             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  130192             : //      This code is automatically generated for each 
  130193             : //      terminal and non-terminal within the defined 
  130194             : //      grammar.  There is a simple way to change the 
  130195             : //      code to fix bugs etc.  See the ROSE README file
  130196             : //      for directions.
  130197             : 
  130198             : // tps: (02/22/2010): Adding DLL export requirements
  130199             : #include "rosedll.h"
  130200             : 
  130201             : // predeclarations for SgDoWhileStmt
  130202             : 
  130203             : /* #line 130204 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130204             : 
  130205             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  130206             : 
  130207             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130208             : 
  130209             : #if 1
  130210             : // Class Definition for SgDoWhileStmt
  130211             : class ROSE_DLL_API SgDoWhileStmt  : public SgScopeStatement
  130212             :    {
  130213             :      public:
  130214             : 
  130215             : 
  130216             : /* #line 130217 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130217             : 
  130218             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  130219             : // Start of memberFunctionString
  130220             : /* #line 2349 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  130221             : 
  130222             :         protected:
  130223             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  130224             : 
  130225             :          public:
  130226             : 
  130227             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  130228             :           virtual unsigned int cfgIndexForEnd() const override;
  130229             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  130230             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  130231             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  130232             : #endif
  130233             :        // DQ (2/22/2007): Added for uniform support of mangled names
  130234             :           virtual SgName get_mangled_name() const override;
  130235             : 
  130236             : #if ALT_FIXUP_COPY
  130237             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  130238             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  130239             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  130240             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  130241             : #else
  130242             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  130243             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  130244             : #endif
  130245             : 
  130246             : 
  130247             : 
  130248             : // End of memberFunctionString
  130249             : // Start of memberFunctionString
  130250             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  130251             : 
  130252             : // *** COMMON CODE SECTION BEGINS HERE ***
  130253             : 
  130254             :     public:
  130255             : 
  130256             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  130257             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  130258             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  130259             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  130260             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  130261             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  130262             : 
  130263             :       /*! \brief returns a string representing the class name */
  130264             :           virtual std::string class_name() const override;
  130265             : 
  130266             :       /*! \brief returns new style SageIII enum values */
  130267             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  130268             : 
  130269             :       /*! \brief static variant value */
  130270             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  130271             :        // static const VariantT static_variant = V_SgDoWhileStmt;
  130272             :           enum { static_variant = V_SgDoWhileStmt };
  130273             : 
  130274             :        /* the generated cast function */
  130275             :       /*! \brief Casts pointer from base class to derived class */
  130276             :           ROSE_DLL_API friend       SgDoWhileStmt* isSgDoWhileStmt(       SgNode * s );
  130277             : 
  130278             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  130279             :           ROSE_DLL_API friend const SgDoWhileStmt* isSgDoWhileStmt( const SgNode * s );
  130280             : 
  130281             :      // ******************************************
  130282             :      // * Memory Pool / New / Delete
  130283             :      // ******************************************
  130284             : 
  130285             :      public:
  130286             :           /// \private
  130287             :           static const unsigned pool_size; //
  130288             :           /// \private
  130289             :           static std::vector<unsigned char *> pools; //
  130290             :           /// \private
  130291             :           static SgDoWhileStmt * next_node; // 
  130292             : 
  130293             :           /// \private
  130294             :           static unsigned long initializeStorageClassArray(SgDoWhileStmtStorageClass *); //
  130295             : 
  130296             :           /// \private
  130297             :           static void clearMemoryPool(); //
  130298             :           static void deleteMemoryPool(); //
  130299             : 
  130300             :           /// \private
  130301             :           static void extendMemoryPoolForFileIO(); //
  130302             : 
  130303             :           /// \private
  130304             :           static SgDoWhileStmt * getPointerFromGlobalIndex(unsigned long); //
  130305             :           /// \private
  130306             :           static SgDoWhileStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  130307             : 
  130308             :           /// \private
  130309             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  130310             :           /// \private
  130311             :           static void resetValidFreepointers(); //
  130312             :           /// \private
  130313             :           static unsigned long getNumberOfLastValidPointer(); //
  130314             : 
  130315             : 
  130316             : #if defined(INLINE_FUNCTIONS)
  130317             :       /*! \brief returns pointer to newly allocated IR node */
  130318             :           inline void *operator new (size_t size);
  130319             : #else
  130320             :       /*! \brief returns pointer to newly allocated IR node */
  130321             :           void *operator new (size_t size);
  130322             : #endif
  130323             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  130324             :           void operator delete (void* pointer, size_t size);
  130325             : 
  130326             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  130327          14 :           void operator delete (void* pointer)
  130328             :              {
  130329             :             // This is the generated delete operator...
  130330          14 :                SgDoWhileStmt::operator delete (pointer,sizeof(SgDoWhileStmt));
  130331             :              }
  130332             : 
  130333             :       /*! \brief Returns the total number of IR nodes of this type */
  130334             :           static size_t numberOfNodes();
  130335             : 
  130336             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  130337             :           static size_t memoryUsage();
  130338             : 
  130339             :       // End of scope which started in IR nodes specific code 
  130340             :       /* */
  130341             : 
  130342             :       /* name Internal Functions
  130343             :           \brief Internal functions ... incomplete-documentation
  130344             : 
  130345             :           These functions have been made public as part of the design, but they are suggested for internal use 
  130346             :           or by particularly knowledgeable users for specialized tools or applications.
  130347             : 
  130348             :           \internal We could not make these private because they are required by user for special purposes. And 
  130349             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  130350             :          
  130351             :        */
  130352             : 
  130353             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  130354             :        // overridden in every class by *generated* implementation
  130355             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  130356             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  130357             :        // MS: 06/28/02 container of names of variables or container indices 
  130358             :        // used used in the traversal to access AST successor nodes
  130359             :        // overridden in every class by *generated* implementation
  130360             :       /*! \brief container of names of variables or container indices used used in the traversal
  130361             :           to access AST successor nodes overridden in every class by *generated* implementation */
  130362             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  130363             : 
  130364             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  130365             :        // than all the vector copies. The implementation for these functions is generated for each class.
  130366             :       /*! \brief return number of children in the traversal successor list */
  130367             :           virtual size_t get_numberOfTraversalSuccessors() override;
  130368             :       /*! \brief index-based access to traversal successors by index number */
  130369             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  130370             :       /*! \brief index-based access to traversal successors by child node */
  130371             :           virtual size_t get_childIndex(SgNode *child) override;
  130372             : 
  130373             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  130374             :        // MS: 08/16/2002 method for generating RTI information
  130375             :       /*! \brief return C++ Runtime-Time-Information */
  130376             :           virtual RTIReturnType roseRTI() override;
  130377             : #endif
  130378             :       /* */
  130379             : 
  130380             : 
  130381             : 
  130382             :       /* name Deprecated Functions
  130383             :           \brief Deprecated functions ... incomplete-documentation
  130384             : 
  130385             :           These functions have been deprecated from use.
  130386             :        */
  130387             :       /* */
  130388             : 
  130389             :       /*! returns a C style string (char*) representing the class name */
  130390             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  130391             : 
  130392             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  130393             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  130394             : #if 0
  130395             :       /*! returns old style Sage II enum values */
  130396             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  130397             :       /*! returns old style Sage II enum values */
  130398             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  130399             : #endif
  130400             :       /* */
  130401             : 
  130402             : 
  130403             : 
  130404             : 
  130405             :      public:
  130406             :       /* name Traversal Support Functions
  130407             :           \brief Traversal support functions ... incomplete-documentation
  130408             : 
  130409             :           These functions have been made public as part of the design, but they are suggested for internal use 
  130410             :           or by particularly knowledgable users for specialized tools or applications.
  130411             :        */
  130412             :       /* */
  130413             : 
  130414             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  130415             :        // (inferior to ROSE traversal mechanism, experimental).
  130416             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  130417             :        */
  130418             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  130419             : 
  130420             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  130421             :       /*! \brief support for the classic visitor pattern done in GoF */
  130422             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  130423             : 
  130424             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  130425             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  130426             :        */
  130427             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  130428             : 
  130429             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  130430             :        */
  130431             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  130432             : 
  130433             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  130434             :        // This traversal helps support internal tools that call static member functions.
  130435             :        // note: this function operates on the memory pools.
  130436             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  130437             :        */
  130438             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  130439             :       /* */
  130440             : 
  130441             : 
  130442             :      public:
  130443             :       /* name Memory Allocation Functions
  130444             :           \brief Memory allocations functions ... incomplete-documentation
  130445             : 
  130446             :           These functions have been made public as part of the design, but they are suggested for internal use 
  130447             :           or by particularly knowledgable users for specialized tools or applications.
  130448             :        */
  130449             :       /* */
  130450             : 
  130451             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  130452             : 
  130453             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  130454             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  130455             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  130456             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  130457             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  130458             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  130459             :           being used with the AST File I/O mechanism.
  130460             :        */
  130461             :           virtual bool isInMemoryPool() override;
  130462             : 
  130463             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  130464             : 
  130465             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  130466             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  130467             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  130468             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  130469             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  130470             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  130471             :           being used with the AST File I/O mechanism.
  130472             :        */
  130473             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  130474             : 
  130475             :       // DQ (4/30/2006): Modified to be a const function.
  130476             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  130477             : 
  130478             :           This functions is part of general support for many possible tools to operate 
  130479             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  130480             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  130481             :           less than the set of pointers used by the AST file I/O. This is part of
  130482             :           work implemented by Andreas, and support tools such as the AST graph generation.
  130483             : 
  130484             :           \warning This function can return unexpected data members and thus the 
  130485             :                    order and the number of elements is unpredicable and subject 
  130486             :                    to change.
  130487             : 
  130488             :           \returns STL vector of pairs of SgNode* and strings
  130489             :        */
  130490             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  130491             : 
  130492             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  130493             : 
  130494             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  130495             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  130496             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  130497             : 
  130498             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  130499             :                    and subject to change.
  130500             :        */
  130501             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  130502             : 
  130503             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  130504             : 
  130505             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  130506             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  130507             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  130508             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  130509             : 
  130510             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  130511             : 
  130512             :           \returns long
  130513             :        */
  130514             :           virtual long getChildIndex( SgNode* childNode ) const override;
  130515             : 
  130516             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  130517             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  130518             :       /* \brief Constructor for use by AST File I/O Mechanism
  130519             : 
  130520             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  130521             :           which obtained via fast binary file I/O from disk.
  130522             :        */
  130523             :        // SgDoWhileStmt( SgDoWhileStmtStorageClass& source );
  130524             : 
  130525             : 
  130526             : 
  130527             : 
  130528             : 
  130529             :  // JH (10/24/2005): methods added to support the ast file IO
  130530             :     private:
  130531             : 
  130532             :       /* name AST Memory Allocation Support Functions
  130533             :           \brief Memory allocations support....
  130534             : 
  130535             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  130536             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  130537             :           and support the AST File I/O Mechanism.
  130538             :        */
  130539             :       /* */
  130540             : 
  130541             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  130542             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  130543             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  130544             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  130545             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  130546             :           a correspinding one in the AST_FILE_IO class!
  130547             :        */
  130548             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  130549             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  130550             :       /* \brief Typedef used for low level memory access.
  130551             :        */
  130552             :        // typedef unsigned char* TestType;
  130553             : 
  130554             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  130555             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  130556             :       /* \brief Typedef used to hold memory addresses as values.
  130557             :        */
  130558             :        // typedef unsigned long  AddressType;
  130559             : 
  130560             : 
  130561             : 
  130562             :        // necessary, to have direct access to the p_freepointer and the private methods !
  130563             :       /*! \brief friend class declaration to support AST File I/O */
  130564             :           friend class AST_FILE_IO;
  130565             : 
  130566             :       /*! \brief friend class declaration to support AST File I/O */
  130567             :           friend class SgDoWhileStmtStorageClass;
  130568             : 
  130569             :       /*! \brief friend class declaration to support AST File I/O */
  130570             :           friend class AstSpecificDataManagingClass;
  130571             : 
  130572             :       /*! \brief friend class declaration to support AST File I/O */
  130573             :           friend class AstSpecificDataManagingClassStorageClass;
  130574             :     public:
  130575             :       /*! \brief IR node constructor to support AST File I/O */
  130576             :           SgDoWhileStmt( const SgDoWhileStmtStorageClass& source );
  130577             : 
  130578             :  // private: // JJW hack
  130579             :        /*
  130580             :           name AST Memory Allocation Support Variables
  130581             :           Memory allocations support variables 
  130582             : 
  130583             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  130584             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  130585             :           and support the AST File I/O Mechanism.
  130586             :        */
  130587             :       /* */
  130588             : 
  130589             :     public:
  130590             : 
  130591             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  130592             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  130593             :       // virtual SgNode* addRegExpAttribute();
  130594             :       /*! \brief Support for AST matching using regular expression.
  130595             : 
  130596             :           This support is incomplete and the subject of current research to define 
  130597             :           RegEx trees to support inexact matching.
  130598             :        */
  130599             :           SgDoWhileStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  130600             : 
  130601             : // *** COMMON CODE SECTION ENDS HERE ***
  130602             : 
  130603             : 
  130604             : // End of memberFunctionString
  130605             : // Start of memberFunctionString
  130606             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  130607             : 
  130608             :      // the generated cast function
  130609             :      // friend ROSE_DLL_API SgDoWhileStmt* isSgDoWhileStmt ( SgNode* s );
  130610             : 
  130611             :           typedef SgScopeStatement base_node_type;
  130612             : 
  130613             : 
  130614             : // End of memberFunctionString
  130615             : // Start of memberFunctionString
  130616             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  130617             : 
  130618             :           void post_construction_initialization() override;
  130619             : 
  130620             : 
  130621             : // End of memberFunctionString
  130622             : 
  130623             :      public: 
  130624             :          SgStatement* get_body() const;
  130625             :          void set_body(SgStatement* body);
  130626             : 
  130627             :      public: 
  130628             :          SgStatement* get_condition() const;
  130629             :          void set_condition(SgStatement* condition);
  130630             : 
  130631             : 
  130632             :      public: 
  130633             :          virtual ~SgDoWhileStmt();
  130634             : 
  130635             : 
  130636             :      public: 
  130637             :          SgDoWhileStmt(Sg_File_Info* startOfConstruct , SgStatement* body = NULL, SgStatement* condition = NULL); 
  130638             :          SgDoWhileStmt(SgStatement* body, SgStatement* condition); 
  130639             : 
  130640             :     protected:
  130641             : // Start of memberFunctionString
  130642             : SgStatement* p_body;
  130643             :           
  130644             : // End of memberFunctionString
  130645             : // Start of memberFunctionString
  130646             : SgStatement* p_condition;
  130647             :           
  130648             : // End of memberFunctionString
  130649             : 
  130650             :     friend struct Rose::Traits::generated::describe_node_t<SgDoWhileStmt>;
  130651             :     friend struct Rose::Traits::generated::describe_field_t<SgDoWhileStmt, SgStatement*,&SgDoWhileStmt::p_body>;
  130652             :     friend struct Rose::Traits::generated::describe_field_t<SgDoWhileStmt, SgStatement*,&SgDoWhileStmt::p_condition>;
  130653             : 
  130654             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130655             : 
  130656             : 
  130657             :    };
  130658             : #endif
  130659             : 
  130660             : // postdeclarations for SgDoWhileStmt
  130661             : 
  130662             : /* #line 130663 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130663             : 
  130664             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  130665             : 
  130666             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130667             : 
  130668             : 
  130669             : /* #line 130670 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130670             : 
  130671             : 
  130672             : 
  130673             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130674             : 
  130675             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  130676             : //      This code is automatically generated for each 
  130677             : //      terminal and non-terminal within the defined 
  130678             : //      grammar.  There is a simple way to change the 
  130679             : //      code to fix bugs etc.  See the ROSE README file
  130680             : //      for directions.
  130681             : 
  130682             : // tps: (02/22/2010): Adding DLL export requirements
  130683             : #include "rosedll.h"
  130684             : 
  130685             : // predeclarations for SgSwitchStatement
  130686             : 
  130687             : /* #line 130688 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130688             : 
  130689             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  130690             : 
  130691             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  130692             : 
  130693             : #if 1
  130694             : // Class Definition for SgSwitchStatement
  130695             : class ROSE_DLL_API SgSwitchStatement  : public SgScopeStatement
  130696             :    {
  130697             :      public:
  130698             : 
  130699             : 
  130700             : /* #line 130701 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  130701             : 
  130702             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  130703             : // Start of memberFunctionString
  130704             : /* #line 2377 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  130705             : 
  130706             : 
  130707             : // HEADER_LIST_DECLARATIONS
  130708             : 
  130709             :           void prepend_case(SgCaseOptionStmt *&);
  130710             :           void append_case(SgCaseOptionStmt *&);
  130711             :           void prepend_default(SgDefaultOptionStmt *&);
  130712             :           void append_default(SgDefaultOptionStmt *&);
  130713             : 
  130714             :         protected:
  130715             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  130716             :           void prepend_append_normalization();
  130717             :         public:
  130718             : 
  130719             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  130720             :           virtual unsigned int cfgIndexForEnd() const override;
  130721             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  130722             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  130723             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  130724             : #endif
  130725             : 
  130726             :        // DQ (2/22/2007): Added for uniform support of mangled names
  130727             :           virtual SgName get_mangled_name() const override;
  130728             : 
  130729             : #if ALT_FIXUP_COPY
  130730             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  130731             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  130732             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  130733             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  130734             : #else
  130735             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  130736             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  130737             : #endif
  130738             : 
  130739             : 
  130740             : 
  130741             : // End of memberFunctionString
  130742             : // Start of memberFunctionString
  130743             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  130744             : 
  130745             : // *** COMMON CODE SECTION BEGINS HERE ***
  130746             : 
  130747             :     public:
  130748             : 
  130749             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  130750             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  130751             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  130752             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  130753             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  130754             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  130755             : 
  130756             :       /*! \brief returns a string representing the class name */
  130757             :           virtual std::string class_name() const override;
  130758             : 
  130759             :       /*! \brief returns new style SageIII enum values */
  130760             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  130761             : 
  130762             :       /*! \brief static variant value */
  130763             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  130764             :        // static const VariantT static_variant = V_SgSwitchStatement;
  130765             :           enum { static_variant = V_SgSwitchStatement };
  130766             : 
  130767             :        /* the generated cast function */
  130768             :       /*! \brief Casts pointer from base class to derived class */
  130769             :           ROSE_DLL_API friend       SgSwitchStatement* isSgSwitchStatement(       SgNode * s );
  130770             : 
  130771             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  130772             :           ROSE_DLL_API friend const SgSwitchStatement* isSgSwitchStatement( const SgNode * s );
  130773             : 
  130774             :      // ******************************************
  130775             :      // * Memory Pool / New / Delete
  130776             :      // ******************************************
  130777             : 
  130778             :      public:
  130779             :           /// \private
  130780             :           static const unsigned pool_size; //
  130781             :           /// \private
  130782             :           static std::vector<unsigned char *> pools; //
  130783             :           /// \private
  130784             :           static SgSwitchStatement * next_node; // 
  130785             : 
  130786             :           /// \private
  130787             :           static unsigned long initializeStorageClassArray(SgSwitchStatementStorageClass *); //
  130788             : 
  130789             :           /// \private
  130790             :           static void clearMemoryPool(); //
  130791             :           static void deleteMemoryPool(); //
  130792             : 
  130793             :           /// \private
  130794             :           static void extendMemoryPoolForFileIO(); //
  130795             : 
  130796             :           /// \private
  130797             :           static SgSwitchStatement * getPointerFromGlobalIndex(unsigned long); //
  130798             :           /// \private
  130799             :           static SgSwitchStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  130800             : 
  130801             :           /// \private
  130802             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  130803             :           /// \private
  130804             :           static void resetValidFreepointers(); //
  130805             :           /// \private
  130806             :           static unsigned long getNumberOfLastValidPointer(); //
  130807             : 
  130808             : 
  130809             : #if defined(INLINE_FUNCTIONS)
  130810             :       /*! \brief returns pointer to newly allocated IR node */
  130811             :           inline void *operator new (size_t size);
  130812             : #else
  130813             :       /*! \brief returns pointer to newly allocated IR node */
  130814             :           void *operator new (size_t size);
  130815             : #endif
  130816             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  130817             :           void operator delete (void* pointer, size_t size);
  130818             : 
  130819             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  130820           0 :           void operator delete (void* pointer)
  130821             :              {
  130822             :             // This is the generated delete operator...
  130823           0 :                SgSwitchStatement::operator delete (pointer,sizeof(SgSwitchStatement));
  130824             :              }
  130825             : 
  130826             :       /*! \brief Returns the total number of IR nodes of this type */
  130827             :           static size_t numberOfNodes();
  130828             : 
  130829             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  130830             :           static size_t memoryUsage();
  130831             : 
  130832             :       // End of scope which started in IR nodes specific code 
  130833             :       /* */
  130834             : 
  130835             :       /* name Internal Functions
  130836             :           \brief Internal functions ... incomplete-documentation
  130837             : 
  130838             :           These functions have been made public as part of the design, but they are suggested for internal use 
  130839             :           or by particularly knowledgeable users for specialized tools or applications.
  130840             : 
  130841             :           \internal We could not make these private because they are required by user for special purposes. And 
  130842             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  130843             :          
  130844             :        */
  130845             : 
  130846             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  130847             :        // overridden in every class by *generated* implementation
  130848             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  130849             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  130850             :        // MS: 06/28/02 container of names of variables or container indices 
  130851             :        // used used in the traversal to access AST successor nodes
  130852             :        // overridden in every class by *generated* implementation
  130853             :       /*! \brief container of names of variables or container indices used used in the traversal
  130854             :           to access AST successor nodes overridden in every class by *generated* implementation */
  130855             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  130856             : 
  130857             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  130858             :        // than all the vector copies. The implementation for these functions is generated for each class.
  130859             :       /*! \brief return number of children in the traversal successor list */
  130860             :           virtual size_t get_numberOfTraversalSuccessors() override;
  130861             :       /*! \brief index-based access to traversal successors by index number */
  130862             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  130863             :       /*! \brief index-based access to traversal successors by child node */
  130864             :           virtual size_t get_childIndex(SgNode *child) override;
  130865             : 
  130866             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  130867             :        // MS: 08/16/2002 method for generating RTI information
  130868             :       /*! \brief return C++ Runtime-Time-Information */
  130869             :           virtual RTIReturnType roseRTI() override;
  130870             : #endif
  130871             :       /* */
  130872             : 
  130873             : 
  130874             : 
  130875             :       /* name Deprecated Functions
  130876             :           \brief Deprecated functions ... incomplete-documentation
  130877             : 
  130878             :           These functions have been deprecated from use.
  130879             :        */
  130880             :       /* */
  130881             : 
  130882             :       /*! returns a C style string (char*) representing the class name */
  130883             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  130884             : 
  130885             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  130886             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  130887             : #if 0
  130888             :       /*! returns old style Sage II enum values */
  130889             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  130890             :       /*! returns old style Sage II enum values */
  130891             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  130892             : #endif
  130893             :       /* */
  130894             : 
  130895             : 
  130896             : 
  130897             : 
  130898             :      public:
  130899             :       /* name Traversal Support Functions
  130900             :           \brief Traversal support functions ... incomplete-documentation
  130901             : 
  130902             :           These functions have been made public as part of the design, but they are suggested for internal use 
  130903             :           or by particularly knowledgable users for specialized tools or applications.
  130904             :        */
  130905             :       /* */
  130906             : 
  130907             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  130908             :        // (inferior to ROSE traversal mechanism, experimental).
  130909             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  130910             :        */
  130911             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  130912             : 
  130913             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  130914             :       /*! \brief support for the classic visitor pattern done in GoF */
  130915             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  130916             : 
  130917             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  130918             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  130919             :        */
  130920             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  130921             : 
  130922             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  130923             :        */
  130924             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  130925             : 
  130926             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  130927             :        // This traversal helps support internal tools that call static member functions.
  130928             :        // note: this function operates on the memory pools.
  130929             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  130930             :        */
  130931             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  130932             :       /* */
  130933             : 
  130934             : 
  130935             :      public:
  130936             :       /* name Memory Allocation Functions
  130937             :           \brief Memory allocations functions ... incomplete-documentation
  130938             : 
  130939             :           These functions have been made public as part of the design, but they are suggested for internal use 
  130940             :           or by particularly knowledgable users for specialized tools or applications.
  130941             :        */
  130942             :       /* */
  130943             : 
  130944             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  130945             : 
  130946             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  130947             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  130948             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  130949             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  130950             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  130951             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  130952             :           being used with the AST File I/O mechanism.
  130953             :        */
  130954             :           virtual bool isInMemoryPool() override;
  130955             : 
  130956             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  130957             : 
  130958             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  130959             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  130960             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  130961             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  130962             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  130963             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  130964             :           being used with the AST File I/O mechanism.
  130965             :        */
  130966             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  130967             : 
  130968             :       // DQ (4/30/2006): Modified to be a const function.
  130969             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  130970             : 
  130971             :           This functions is part of general support for many possible tools to operate 
  130972             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  130973             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  130974             :           less than the set of pointers used by the AST file I/O. This is part of
  130975             :           work implemented by Andreas, and support tools such as the AST graph generation.
  130976             : 
  130977             :           \warning This function can return unexpected data members and thus the 
  130978             :                    order and the number of elements is unpredicable and subject 
  130979             :                    to change.
  130980             : 
  130981             :           \returns STL vector of pairs of SgNode* and strings
  130982             :        */
  130983             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  130984             : 
  130985             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  130986             : 
  130987             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  130988             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  130989             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  130990             : 
  130991             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  130992             :                    and subject to change.
  130993             :        */
  130994             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  130995             : 
  130996             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  130997             : 
  130998             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  130999             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  131000             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  131001             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  131002             : 
  131003             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  131004             : 
  131005             :           \returns long
  131006             :        */
  131007             :           virtual long getChildIndex( SgNode* childNode ) const override;
  131008             : 
  131009             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  131010             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  131011             :       /* \brief Constructor for use by AST File I/O Mechanism
  131012             : 
  131013             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  131014             :           which obtained via fast binary file I/O from disk.
  131015             :        */
  131016             :        // SgSwitchStatement( SgSwitchStatementStorageClass& source );
  131017             : 
  131018             : 
  131019             : 
  131020             : 
  131021             : 
  131022             :  // JH (10/24/2005): methods added to support the ast file IO
  131023             :     private:
  131024             : 
  131025             :       /* name AST Memory Allocation Support Functions
  131026             :           \brief Memory allocations support....
  131027             : 
  131028             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  131029             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  131030             :           and support the AST File I/O Mechanism.
  131031             :        */
  131032             :       /* */
  131033             : 
  131034             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  131035             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  131036             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  131037             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  131038             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  131039             :           a correspinding one in the AST_FILE_IO class!
  131040             :        */
  131041             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  131042             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  131043             :       /* \brief Typedef used for low level memory access.
  131044             :        */
  131045             :        // typedef unsigned char* TestType;
  131046             : 
  131047             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  131048             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  131049             :       /* \brief Typedef used to hold memory addresses as values.
  131050             :        */
  131051             :        // typedef unsigned long  AddressType;
  131052             : 
  131053             : 
  131054             : 
  131055             :        // necessary, to have direct access to the p_freepointer and the private methods !
  131056             :       /*! \brief friend class declaration to support AST File I/O */
  131057             :           friend class AST_FILE_IO;
  131058             : 
  131059             :       /*! \brief friend class declaration to support AST File I/O */
  131060             :           friend class SgSwitchStatementStorageClass;
  131061             : 
  131062             :       /*! \brief friend class declaration to support AST File I/O */
  131063             :           friend class AstSpecificDataManagingClass;
  131064             : 
  131065             :       /*! \brief friend class declaration to support AST File I/O */
  131066             :           friend class AstSpecificDataManagingClassStorageClass;
  131067             :     public:
  131068             :       /*! \brief IR node constructor to support AST File I/O */
  131069             :           SgSwitchStatement( const SgSwitchStatementStorageClass& source );
  131070             : 
  131071             :  // private: // JJW hack
  131072             :        /*
  131073             :           name AST Memory Allocation Support Variables
  131074             :           Memory allocations support variables 
  131075             : 
  131076             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  131077             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  131078             :           and support the AST File I/O Mechanism.
  131079             :        */
  131080             :       /* */
  131081             : 
  131082             :     public:
  131083             : 
  131084             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  131085             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  131086             :       // virtual SgNode* addRegExpAttribute();
  131087             :       /*! \brief Support for AST matching using regular expression.
  131088             : 
  131089             :           This support is incomplete and the subject of current research to define 
  131090             :           RegEx trees to support inexact matching.
  131091             :        */
  131092             :           SgSwitchStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  131093             : 
  131094             : // *** COMMON CODE SECTION ENDS HERE ***
  131095             : 
  131096             : 
  131097             : // End of memberFunctionString
  131098             : // Start of memberFunctionString
  131099             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  131100             : 
  131101             :      // the generated cast function
  131102             :      // friend ROSE_DLL_API SgSwitchStatement* isSgSwitchStatement ( SgNode* s );
  131103             : 
  131104             :           typedef SgScopeStatement base_node_type;
  131105             : 
  131106             : 
  131107             : // End of memberFunctionString
  131108             : // Start of memberFunctionString
  131109             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  131110             : 
  131111             :           void post_construction_initialization() override;
  131112             : 
  131113             : 
  131114             : // End of memberFunctionString
  131115             : 
  131116             :      public: 
  131117             :          SgStatement* get_item_selector() const;
  131118             :          void set_item_selector(SgStatement* item_selector);
  131119             : 
  131120             :      public: 
  131121             :          SgStatement* get_body() const;
  131122             :          void set_body(SgStatement* body);
  131123             : 
  131124             :      public: 
  131125             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  131126             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  131127             : 
  131128             :      public: 
  131129             :          std::string get_string_label() const;
  131130             :          void set_string_label(std::string string_label);
  131131             : 
  131132             : 
  131133             :      public: 
  131134             :          virtual ~SgSwitchStatement();
  131135             : 
  131136             : 
  131137             :      public: 
  131138             :          SgSwitchStatement(Sg_File_Info* startOfConstruct , SgStatement* item_selector = NULL, SgStatement* body = NULL); 
  131139             :          SgSwitchStatement(SgStatement* item_selector, SgStatement* body); 
  131140             : 
  131141             :     protected:
  131142             : // Start of memberFunctionString
  131143             : SgStatement* p_item_selector;
  131144             :           
  131145             : // End of memberFunctionString
  131146             : // Start of memberFunctionString
  131147             : SgStatement* p_body;
  131148             :           
  131149             : // End of memberFunctionString
  131150             : // Start of memberFunctionString
  131151             : SgLabelRefExp* p_end_numeric_label;
  131152             :           
  131153             : // End of memberFunctionString
  131154             : // Start of memberFunctionString
  131155             : std::string p_string_label;
  131156             :           
  131157             : // End of memberFunctionString
  131158             : 
  131159             :     friend struct Rose::Traits::generated::describe_node_t<SgSwitchStatement>;
  131160             :     friend struct Rose::Traits::generated::describe_field_t<SgSwitchStatement, SgStatement*,&SgSwitchStatement::p_item_selector>;
  131161             :     friend struct Rose::Traits::generated::describe_field_t<SgSwitchStatement, SgStatement*,&SgSwitchStatement::p_body>;
  131162             :     friend struct Rose::Traits::generated::describe_field_t<SgSwitchStatement, SgLabelRefExp*,&SgSwitchStatement::p_end_numeric_label>;
  131163             :     friend struct Rose::Traits::generated::describe_field_t<SgSwitchStatement, std::string,&SgSwitchStatement::p_string_label>;
  131164             : 
  131165             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131166             : 
  131167             : 
  131168             :    };
  131169             : #endif
  131170             : 
  131171             : // postdeclarations for SgSwitchStatement
  131172             : 
  131173             : /* #line 131174 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131174             : 
  131175             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  131176             : 
  131177             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131178             : 
  131179             : 
  131180             : /* #line 131181 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131181             : 
  131182             : 
  131183             : 
  131184             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131185             : 
  131186             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  131187             : //      This code is automatically generated for each 
  131188             : //      terminal and non-terminal within the defined 
  131189             : //      grammar.  There is a simple way to change the 
  131190             : //      code to fix bugs etc.  See the ROSE README file
  131191             : //      for directions.
  131192             : 
  131193             : // tps: (02/22/2010): Adding DLL export requirements
  131194             : #include "rosedll.h"
  131195             : 
  131196             : // predeclarations for SgCatchOptionStmt
  131197             : 
  131198             : /* #line 131199 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131199             : 
  131200             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  131201             : 
  131202             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131203             : 
  131204             : #if 1
  131205             : // Class Definition for SgCatchOptionStmt
  131206             : class ROSE_DLL_API SgCatchOptionStmt  : public SgScopeStatement
  131207             :    {
  131208             :      public:
  131209             : 
  131210             : 
  131211             : /* #line 131212 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131212             : 
  131213             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  131214             : // Start of memberFunctionString
  131215             : /* #line 2473 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  131216             : 
  131217             :        // void post_construction_initialization();
  131218             : #if 0
  131219             :           SgStatement* get_next(int&) const;
  131220             : #endif
  131221             : 
  131222             :        // DQ (2/22/2007): Added mangled name support for scopes so that the
  131223             :        // mangled names for declarations could have better support!
  131224             :           virtual SgName get_mangled_name() const override;
  131225             : 
  131226             :      protected:
  131227             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  131228             : 
  131229             :          public:
  131230             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  131231             :           virtual unsigned int cfgIndexForEnd() const override;
  131232             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  131233             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  131234             : #endif
  131235             : 
  131236             : #if ALT_FIXUP_COPY
  131237             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  131238             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  131239             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  131240             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  131241             : #else
  131242             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  131243             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  131244             : #endif
  131245             : 
  131246             : 
  131247             : 
  131248             : // End of memberFunctionString
  131249             : // Start of memberFunctionString
  131250             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  131251             : 
  131252             : // *** COMMON CODE SECTION BEGINS HERE ***
  131253             : 
  131254             :     public:
  131255             : 
  131256             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  131257             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  131258             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  131259             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  131260             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  131261             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  131262             : 
  131263             :       /*! \brief returns a string representing the class name */
  131264             :           virtual std::string class_name() const override;
  131265             : 
  131266             :       /*! \brief returns new style SageIII enum values */
  131267             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  131268             : 
  131269             :       /*! \brief static variant value */
  131270             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  131271             :        // static const VariantT static_variant = V_SgCatchOptionStmt;
  131272             :           enum { static_variant = V_SgCatchOptionStmt };
  131273             : 
  131274             :        /* the generated cast function */
  131275             :       /*! \brief Casts pointer from base class to derived class */
  131276             :           ROSE_DLL_API friend       SgCatchOptionStmt* isSgCatchOptionStmt(       SgNode * s );
  131277             : 
  131278             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  131279             :           ROSE_DLL_API friend const SgCatchOptionStmt* isSgCatchOptionStmt( const SgNode * s );
  131280             : 
  131281             :      // ******************************************
  131282             :      // * Memory Pool / New / Delete
  131283             :      // ******************************************
  131284             : 
  131285             :      public:
  131286             :           /// \private
  131287             :           static const unsigned pool_size; //
  131288             :           /// \private
  131289             :           static std::vector<unsigned char *> pools; //
  131290             :           /// \private
  131291             :           static SgCatchOptionStmt * next_node; // 
  131292             : 
  131293             :           /// \private
  131294             :           static unsigned long initializeStorageClassArray(SgCatchOptionStmtStorageClass *); //
  131295             : 
  131296             :           /// \private
  131297             :           static void clearMemoryPool(); //
  131298             :           static void deleteMemoryPool(); //
  131299             : 
  131300             :           /// \private
  131301             :           static void extendMemoryPoolForFileIO(); //
  131302             : 
  131303             :           /// \private
  131304             :           static SgCatchOptionStmt * getPointerFromGlobalIndex(unsigned long); //
  131305             :           /// \private
  131306             :           static SgCatchOptionStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  131307             : 
  131308             :           /// \private
  131309             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  131310             :           /// \private
  131311             :           static void resetValidFreepointers(); //
  131312             :           /// \private
  131313             :           static unsigned long getNumberOfLastValidPointer(); //
  131314             : 
  131315             : 
  131316             : #if defined(INLINE_FUNCTIONS)
  131317             :       /*! \brief returns pointer to newly allocated IR node */
  131318             :           inline void *operator new (size_t size);
  131319             : #else
  131320             :       /*! \brief returns pointer to newly allocated IR node */
  131321             :           void *operator new (size_t size);
  131322             : #endif
  131323             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  131324             :           void operator delete (void* pointer, size_t size);
  131325             : 
  131326             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  131327         180 :           void operator delete (void* pointer)
  131328             :              {
  131329             :             // This is the generated delete operator...
  131330         180 :                SgCatchOptionStmt::operator delete (pointer,sizeof(SgCatchOptionStmt));
  131331             :              }
  131332             : 
  131333             :       /*! \brief Returns the total number of IR nodes of this type */
  131334             :           static size_t numberOfNodes();
  131335             : 
  131336             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  131337             :           static size_t memoryUsage();
  131338             : 
  131339             :       // End of scope which started in IR nodes specific code 
  131340             :       /* */
  131341             : 
  131342             :       /* name Internal Functions
  131343             :           \brief Internal functions ... incomplete-documentation
  131344             : 
  131345             :           These functions have been made public as part of the design, but they are suggested for internal use 
  131346             :           or by particularly knowledgeable users for specialized tools or applications.
  131347             : 
  131348             :           \internal We could not make these private because they are required by user for special purposes. And 
  131349             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  131350             :          
  131351             :        */
  131352             : 
  131353             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  131354             :        // overridden in every class by *generated* implementation
  131355             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  131356             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  131357             :        // MS: 06/28/02 container of names of variables or container indices 
  131358             :        // used used in the traversal to access AST successor nodes
  131359             :        // overridden in every class by *generated* implementation
  131360             :       /*! \brief container of names of variables or container indices used used in the traversal
  131361             :           to access AST successor nodes overridden in every class by *generated* implementation */
  131362             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  131363             : 
  131364             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  131365             :        // than all the vector copies. The implementation for these functions is generated for each class.
  131366             :       /*! \brief return number of children in the traversal successor list */
  131367             :           virtual size_t get_numberOfTraversalSuccessors() override;
  131368             :       /*! \brief index-based access to traversal successors by index number */
  131369             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  131370             :       /*! \brief index-based access to traversal successors by child node */
  131371             :           virtual size_t get_childIndex(SgNode *child) override;
  131372             : 
  131373             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  131374             :        // MS: 08/16/2002 method for generating RTI information
  131375             :       /*! \brief return C++ Runtime-Time-Information */
  131376             :           virtual RTIReturnType roseRTI() override;
  131377             : #endif
  131378             :       /* */
  131379             : 
  131380             : 
  131381             : 
  131382             :       /* name Deprecated Functions
  131383             :           \brief Deprecated functions ... incomplete-documentation
  131384             : 
  131385             :           These functions have been deprecated from use.
  131386             :        */
  131387             :       /* */
  131388             : 
  131389             :       /*! returns a C style string (char*) representing the class name */
  131390             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  131391             : 
  131392             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  131393             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  131394             : #if 0
  131395             :       /*! returns old style Sage II enum values */
  131396             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  131397             :       /*! returns old style Sage II enum values */
  131398             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  131399             : #endif
  131400             :       /* */
  131401             : 
  131402             : 
  131403             : 
  131404             : 
  131405             :      public:
  131406             :       /* name Traversal Support Functions
  131407             :           \brief Traversal support functions ... incomplete-documentation
  131408             : 
  131409             :           These functions have been made public as part of the design, but they are suggested for internal use 
  131410             :           or by particularly knowledgable users for specialized tools or applications.
  131411             :        */
  131412             :       /* */
  131413             : 
  131414             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  131415             :        // (inferior to ROSE traversal mechanism, experimental).
  131416             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  131417             :        */
  131418             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  131419             : 
  131420             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  131421             :       /*! \brief support for the classic visitor pattern done in GoF */
  131422             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  131423             : 
  131424             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  131425             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  131426             :        */
  131427             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  131428             : 
  131429             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  131430             :        */
  131431             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  131432             : 
  131433             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  131434             :        // This traversal helps support internal tools that call static member functions.
  131435             :        // note: this function operates on the memory pools.
  131436             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  131437             :        */
  131438             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  131439             :       /* */
  131440             : 
  131441             : 
  131442             :      public:
  131443             :       /* name Memory Allocation Functions
  131444             :           \brief Memory allocations functions ... incomplete-documentation
  131445             : 
  131446             :           These functions have been made public as part of the design, but they are suggested for internal use 
  131447             :           or by particularly knowledgable users for specialized tools or applications.
  131448             :        */
  131449             :       /* */
  131450             : 
  131451             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  131452             : 
  131453             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  131454             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  131455             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  131456             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  131457             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  131458             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  131459             :           being used with the AST File I/O mechanism.
  131460             :        */
  131461             :           virtual bool isInMemoryPool() override;
  131462             : 
  131463             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  131464             : 
  131465             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  131466             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  131467             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  131468             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  131469             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  131470             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  131471             :           being used with the AST File I/O mechanism.
  131472             :        */
  131473             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  131474             : 
  131475             :       // DQ (4/30/2006): Modified to be a const function.
  131476             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  131477             : 
  131478             :           This functions is part of general support for many possible tools to operate 
  131479             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  131480             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  131481             :           less than the set of pointers used by the AST file I/O. This is part of
  131482             :           work implemented by Andreas, and support tools such as the AST graph generation.
  131483             : 
  131484             :           \warning This function can return unexpected data members and thus the 
  131485             :                    order and the number of elements is unpredicable and subject 
  131486             :                    to change.
  131487             : 
  131488             :           \returns STL vector of pairs of SgNode* and strings
  131489             :        */
  131490             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  131491             : 
  131492             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  131493             : 
  131494             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  131495             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  131496             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  131497             : 
  131498             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  131499             :                    and subject to change.
  131500             :        */
  131501             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  131502             : 
  131503             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  131504             : 
  131505             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  131506             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  131507             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  131508             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  131509             : 
  131510             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  131511             : 
  131512             :           \returns long
  131513             :        */
  131514             :           virtual long getChildIndex( SgNode* childNode ) const override;
  131515             : 
  131516             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  131517             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  131518             :       /* \brief Constructor for use by AST File I/O Mechanism
  131519             : 
  131520             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  131521             :           which obtained via fast binary file I/O from disk.
  131522             :        */
  131523             :        // SgCatchOptionStmt( SgCatchOptionStmtStorageClass& source );
  131524             : 
  131525             : 
  131526             : 
  131527             : 
  131528             : 
  131529             :  // JH (10/24/2005): methods added to support the ast file IO
  131530             :     private:
  131531             : 
  131532             :       /* name AST Memory Allocation Support Functions
  131533             :           \brief Memory allocations support....
  131534             : 
  131535             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  131536             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  131537             :           and support the AST File I/O Mechanism.
  131538             :        */
  131539             :       /* */
  131540             : 
  131541             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  131542             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  131543             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  131544             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  131545             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  131546             :           a correspinding one in the AST_FILE_IO class!
  131547             :        */
  131548             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  131549             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  131550             :       /* \brief Typedef used for low level memory access.
  131551             :        */
  131552             :        // typedef unsigned char* TestType;
  131553             : 
  131554             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  131555             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  131556             :       /* \brief Typedef used to hold memory addresses as values.
  131557             :        */
  131558             :        // typedef unsigned long  AddressType;
  131559             : 
  131560             : 
  131561             : 
  131562             :        // necessary, to have direct access to the p_freepointer and the private methods !
  131563             :       /*! \brief friend class declaration to support AST File I/O */
  131564             :           friend class AST_FILE_IO;
  131565             : 
  131566             :       /*! \brief friend class declaration to support AST File I/O */
  131567             :           friend class SgCatchOptionStmtStorageClass;
  131568             : 
  131569             :       /*! \brief friend class declaration to support AST File I/O */
  131570             :           friend class AstSpecificDataManagingClass;
  131571             : 
  131572             :       /*! \brief friend class declaration to support AST File I/O */
  131573             :           friend class AstSpecificDataManagingClassStorageClass;
  131574             :     public:
  131575             :       /*! \brief IR node constructor to support AST File I/O */
  131576             :           SgCatchOptionStmt( const SgCatchOptionStmtStorageClass& source );
  131577             : 
  131578             :  // private: // JJW hack
  131579             :        /*
  131580             :           name AST Memory Allocation Support Variables
  131581             :           Memory allocations support variables 
  131582             : 
  131583             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  131584             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  131585             :           and support the AST File I/O Mechanism.
  131586             :        */
  131587             :       /* */
  131588             : 
  131589             :     public:
  131590             : 
  131591             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  131592             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  131593             :       // virtual SgNode* addRegExpAttribute();
  131594             :       /*! \brief Support for AST matching using regular expression.
  131595             : 
  131596             :           This support is incomplete and the subject of current research to define 
  131597             :           RegEx trees to support inexact matching.
  131598             :        */
  131599             :           SgCatchOptionStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  131600             : 
  131601             : // *** COMMON CODE SECTION ENDS HERE ***
  131602             : 
  131603             : 
  131604             : // End of memberFunctionString
  131605             : // Start of memberFunctionString
  131606             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  131607             : 
  131608             :      // the generated cast function
  131609             :      // friend ROSE_DLL_API SgCatchOptionStmt* isSgCatchOptionStmt ( SgNode* s );
  131610             : 
  131611             :           typedef SgScopeStatement base_node_type;
  131612             : 
  131613             : 
  131614             : // End of memberFunctionString
  131615             : // Start of memberFunctionString
  131616             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  131617             : 
  131618             :           void post_construction_initialization() override;
  131619             : 
  131620             : 
  131621             : // End of memberFunctionString
  131622             : 
  131623             :      public: 
  131624             :          SgVariableDeclaration* get_condition() const;
  131625             :          void set_condition(SgVariableDeclaration* condition);
  131626             : 
  131627             :      public: 
  131628             :          SgStatement* get_body() const;
  131629             :          void set_body(SgStatement* body);
  131630             : 
  131631             :      public: 
  131632             :          SgTryStmt* get_trystmt() const;
  131633             :          void set_trystmt(SgTryStmt* trystmt);
  131634             : 
  131635             : 
  131636             :      public: 
  131637             :          virtual ~SgCatchOptionStmt();
  131638             : 
  131639             : 
  131640             :      public: 
  131641             :          SgCatchOptionStmt(Sg_File_Info* startOfConstruct , SgVariableDeclaration* condition = NULL, SgStatement* body = NULL, SgTryStmt* trystmt = NULL); 
  131642             :          SgCatchOptionStmt(SgVariableDeclaration* condition, SgStatement* body, SgTryStmt* trystmt); 
  131643             : 
  131644             :     protected:
  131645             : // Start of memberFunctionString
  131646             : SgVariableDeclaration* p_condition;
  131647             :           
  131648             : // End of memberFunctionString
  131649             : // Start of memberFunctionString
  131650             : SgStatement* p_body;
  131651             :           
  131652             : // End of memberFunctionString
  131653             : // Start of memberFunctionString
  131654             : SgTryStmt* p_trystmt;
  131655             :           
  131656             : // End of memberFunctionString
  131657             : 
  131658             :     friend struct Rose::Traits::generated::describe_node_t<SgCatchOptionStmt>;
  131659             :     friend struct Rose::Traits::generated::describe_field_t<SgCatchOptionStmt, SgVariableDeclaration*,&SgCatchOptionStmt::p_condition>;
  131660             :     friend struct Rose::Traits::generated::describe_field_t<SgCatchOptionStmt, SgStatement*,&SgCatchOptionStmt::p_body>;
  131661             :     friend struct Rose::Traits::generated::describe_field_t<SgCatchOptionStmt, SgTryStmt*,&SgCatchOptionStmt::p_trystmt>;
  131662             : 
  131663             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131664             : 
  131665             : 
  131666             :    };
  131667             : #endif
  131668             : 
  131669             : // postdeclarations for SgCatchOptionStmt
  131670             : 
  131671             : /* #line 131672 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131672             : 
  131673             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  131674             : 
  131675             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131676             : 
  131677             : 
  131678             : /* #line 131679 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131679             : 
  131680             : 
  131681             : 
  131682             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131683             : 
  131684             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  131685             : //      This code is automatically generated for each 
  131686             : //      terminal and non-terminal within the defined 
  131687             : //      grammar.  There is a simple way to change the 
  131688             : //      code to fix bugs etc.  See the ROSE README file
  131689             : //      for directions.
  131690             : 
  131691             : // tps: (02/22/2010): Adding DLL export requirements
  131692             : #include "rosedll.h"
  131693             : 
  131694             : // predeclarations for SgNamespaceDefinitionStatement
  131695             : 
  131696             : /* #line 131697 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131697             : 
  131698             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  131699             : 
  131700             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  131701             : 
  131702             : #if 1
  131703             : // Class Definition for SgNamespaceDefinitionStatement
  131704             : class ROSE_DLL_API SgNamespaceDefinitionStatement  : public SgScopeStatement
  131705             :    {
  131706             :      public:
  131707             : 
  131708             : 
  131709             : /* #line 131710 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  131710             : 
  131711             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  131712             : // Start of memberFunctionString
  131713             : /* #line 3096 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  131714             : 
  131715             : 
  131716             :        // DQ (9/8/2004): Added to support qualified name generation
  131717             :           virtual SgName get_qualified_name() const override;
  131718             : 
  131719             :        // RV (1/31/2006): Added mangler for namespace definitions.
  131720             :           virtual SgName get_mangled_name (void) const override;
  131721             : 
  131722             :       //! Compare if to namespaces are the same namespace (may be different scopes).
  131723             :           bool isSameNamespace(const SgNamespaceDefinitionStatement* n ) const;
  131724             : 
  131725             : #if ALT_FIXUP_COPY
  131726             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  131727             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  131728             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  131729             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  131730             : #else
  131731             :        // DQ (10/19/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  131732             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  131733             : #endif
  131734             :        // DQ (5/9/2013): Added functions to generate index into total number of reentrant namespaces.
  131735             :           size_t namespaceIndex() const;
  131736             :           size_t numberOfNamespaceDefinitions() const;
  131737             : 
  131738             : #if 0
  131739             :        // DQ (5/16/2013): This is now a seperate data member access function (to a specially constructed
  131740             :        // SgNamespaceDefinitionStatement used to hold the SgAliasSymbols that are the union of those across
  131741             :        // all of the many re-entrant namespace definitions.
  131742             :        // DQ (5/9/2013): Added function to return a single associated scope for all declaration in the multiple namespace definitions.
  131743             :           SgNamespaceDefinitionStatement* get_global_definition() const;
  131744             : #endif
  131745             : 
  131746             :      protected:
  131747             :           virtual bool replace_child ( SgStatement *,SgStatement *, bool extractListFromBasicBlock = false ) override;
  131748             :           virtual bool insert_child ( SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false ) override;
  131749             : 
  131750             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  131751             : 
  131752             :      public:
  131753             :           virtual void append_declaration  ( SgDeclarationStatement* element );
  131754             :           virtual void prepend_declaration ( SgDeclarationStatement* element );
  131755             : 
  131756             :      public:
  131757             :        // New functions added
  131758             :        // void append_declaration  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  131759             :        // void prepend_declaration ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  131760             : 
  131761             :        // void insert_declaration  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  131762             : 
  131763             : 
  131764             :      public:
  131765             : 
  131766             : 
  131767             : 
  131768             : 
  131769             : 
  131770             : 
  131771             : // End of memberFunctionString
  131772             : // Start of memberFunctionString
  131773             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  131774             : 
  131775             : // *** COMMON CODE SECTION BEGINS HERE ***
  131776             : 
  131777             :     public:
  131778             : 
  131779             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  131780             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  131781             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  131782             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  131783             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  131784             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  131785             : 
  131786             :       /*! \brief returns a string representing the class name */
  131787             :           virtual std::string class_name() const override;
  131788             : 
  131789             :       /*! \brief returns new style SageIII enum values */
  131790             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  131791             : 
  131792             :       /*! \brief static variant value */
  131793             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  131794             :        // static const VariantT static_variant = V_SgNamespaceDefinitionStatement;
  131795             :           enum { static_variant = V_SgNamespaceDefinitionStatement };
  131796             : 
  131797             :        /* the generated cast function */
  131798             :       /*! \brief Casts pointer from base class to derived class */
  131799             :           ROSE_DLL_API friend       SgNamespaceDefinitionStatement* isSgNamespaceDefinitionStatement(       SgNode * s );
  131800             : 
  131801             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  131802             :           ROSE_DLL_API friend const SgNamespaceDefinitionStatement* isSgNamespaceDefinitionStatement( const SgNode * s );
  131803             : 
  131804             :      // ******************************************
  131805             :      // * Memory Pool / New / Delete
  131806             :      // ******************************************
  131807             : 
  131808             :      public:
  131809             :           /// \private
  131810             :           static const unsigned pool_size; //
  131811             :           /// \private
  131812             :           static std::vector<unsigned char *> pools; //
  131813             :           /// \private
  131814             :           static SgNamespaceDefinitionStatement * next_node; // 
  131815             : 
  131816             :           /// \private
  131817             :           static unsigned long initializeStorageClassArray(SgNamespaceDefinitionStatementStorageClass *); //
  131818             : 
  131819             :           /// \private
  131820             :           static void clearMemoryPool(); //
  131821             :           static void deleteMemoryPool(); //
  131822             : 
  131823             :           /// \private
  131824             :           static void extendMemoryPoolForFileIO(); //
  131825             : 
  131826             :           /// \private
  131827             :           static SgNamespaceDefinitionStatement * getPointerFromGlobalIndex(unsigned long); //
  131828             :           /// \private
  131829             :           static SgNamespaceDefinitionStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  131830             : 
  131831             :           /// \private
  131832             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  131833             :           /// \private
  131834             :           static void resetValidFreepointers(); //
  131835             :           /// \private
  131836             :           static unsigned long getNumberOfLastValidPointer(); //
  131837             : 
  131838             : 
  131839             : #if defined(INLINE_FUNCTIONS)
  131840             :       /*! \brief returns pointer to newly allocated IR node */
  131841             :           inline void *operator new (size_t size);
  131842             : #else
  131843             :       /*! \brief returns pointer to newly allocated IR node */
  131844             :           void *operator new (size_t size);
  131845             : #endif
  131846             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  131847             :           void operator delete (void* pointer, size_t size);
  131848             : 
  131849             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  131850         270 :           void operator delete (void* pointer)
  131851             :              {
  131852             :             // This is the generated delete operator...
  131853         270 :                SgNamespaceDefinitionStatement::operator delete (pointer,sizeof(SgNamespaceDefinitionStatement));
  131854             :              }
  131855             : 
  131856             :       /*! \brief Returns the total number of IR nodes of this type */
  131857             :           static size_t numberOfNodes();
  131858             : 
  131859             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  131860             :           static size_t memoryUsage();
  131861             : 
  131862             :       // End of scope which started in IR nodes specific code 
  131863             :       /* */
  131864             : 
  131865             :       /* name Internal Functions
  131866             :           \brief Internal functions ... incomplete-documentation
  131867             : 
  131868             :           These functions have been made public as part of the design, but they are suggested for internal use 
  131869             :           or by particularly knowledgeable users for specialized tools or applications.
  131870             : 
  131871             :           \internal We could not make these private because they are required by user for special purposes. And 
  131872             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  131873             :          
  131874             :        */
  131875             : 
  131876             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  131877             :        // overridden in every class by *generated* implementation
  131878             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  131879             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  131880             :        // MS: 06/28/02 container of names of variables or container indices 
  131881             :        // used used in the traversal to access AST successor nodes
  131882             :        // overridden in every class by *generated* implementation
  131883             :       /*! \brief container of names of variables or container indices used used in the traversal
  131884             :           to access AST successor nodes overridden in every class by *generated* implementation */
  131885             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  131886             : 
  131887             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  131888             :        // than all the vector copies. The implementation for these functions is generated for each class.
  131889             :       /*! \brief return number of children in the traversal successor list */
  131890             :           virtual size_t get_numberOfTraversalSuccessors() override;
  131891             :       /*! \brief index-based access to traversal successors by index number */
  131892             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  131893             :       /*! \brief index-based access to traversal successors by child node */
  131894             :           virtual size_t get_childIndex(SgNode *child) override;
  131895             : 
  131896             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  131897             :        // MS: 08/16/2002 method for generating RTI information
  131898             :       /*! \brief return C++ Runtime-Time-Information */
  131899             :           virtual RTIReturnType roseRTI() override;
  131900             : #endif
  131901             :       /* */
  131902             : 
  131903             : 
  131904             : 
  131905             :       /* name Deprecated Functions
  131906             :           \brief Deprecated functions ... incomplete-documentation
  131907             : 
  131908             :           These functions have been deprecated from use.
  131909             :        */
  131910             :       /* */
  131911             : 
  131912             :       /*! returns a C style string (char*) representing the class name */
  131913             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  131914             : 
  131915             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  131916             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  131917             : #if 0
  131918             :       /*! returns old style Sage II enum values */
  131919             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  131920             :       /*! returns old style Sage II enum values */
  131921             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  131922             : #endif
  131923             :       /* */
  131924             : 
  131925             : 
  131926             : 
  131927             : 
  131928             :      public:
  131929             :       /* name Traversal Support Functions
  131930             :           \brief Traversal support functions ... incomplete-documentation
  131931             : 
  131932             :           These functions have been made public as part of the design, but they are suggested for internal use 
  131933             :           or by particularly knowledgable users for specialized tools or applications.
  131934             :        */
  131935             :       /* */
  131936             : 
  131937             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  131938             :        // (inferior to ROSE traversal mechanism, experimental).
  131939             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  131940             :        */
  131941             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  131942             : 
  131943             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  131944             :       /*! \brief support for the classic visitor pattern done in GoF */
  131945             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  131946             : 
  131947             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  131948             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  131949             :        */
  131950             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  131951             : 
  131952             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  131953             :        */
  131954             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  131955             : 
  131956             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  131957             :        // This traversal helps support internal tools that call static member functions.
  131958             :        // note: this function operates on the memory pools.
  131959             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  131960             :        */
  131961             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  131962             :       /* */
  131963             : 
  131964             : 
  131965             :      public:
  131966             :       /* name Memory Allocation Functions
  131967             :           \brief Memory allocations functions ... incomplete-documentation
  131968             : 
  131969             :           These functions have been made public as part of the design, but they are suggested for internal use 
  131970             :           or by particularly knowledgable users for specialized tools or applications.
  131971             :        */
  131972             :       /* */
  131973             : 
  131974             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  131975             : 
  131976             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  131977             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  131978             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  131979             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  131980             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  131981             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  131982             :           being used with the AST File I/O mechanism.
  131983             :        */
  131984             :           virtual bool isInMemoryPool() override;
  131985             : 
  131986             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  131987             : 
  131988             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  131989             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  131990             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  131991             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  131992             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  131993             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  131994             :           being used with the AST File I/O mechanism.
  131995             :        */
  131996             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  131997             : 
  131998             :       // DQ (4/30/2006): Modified to be a const function.
  131999             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  132000             : 
  132001             :           This functions is part of general support for many possible tools to operate 
  132002             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  132003             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  132004             :           less than the set of pointers used by the AST file I/O. This is part of
  132005             :           work implemented by Andreas, and support tools such as the AST graph generation.
  132006             : 
  132007             :           \warning This function can return unexpected data members and thus the 
  132008             :                    order and the number of elements is unpredicable and subject 
  132009             :                    to change.
  132010             : 
  132011             :           \returns STL vector of pairs of SgNode* and strings
  132012             :        */
  132013             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  132014             : 
  132015             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  132016             : 
  132017             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  132018             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  132019             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  132020             : 
  132021             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  132022             :                    and subject to change.
  132023             :        */
  132024             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  132025             : 
  132026             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  132027             : 
  132028             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  132029             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  132030             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  132031             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  132032             : 
  132033             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  132034             : 
  132035             :           \returns long
  132036             :        */
  132037             :           virtual long getChildIndex( SgNode* childNode ) const override;
  132038             : 
  132039             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  132040             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  132041             :       /* \brief Constructor for use by AST File I/O Mechanism
  132042             : 
  132043             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  132044             :           which obtained via fast binary file I/O from disk.
  132045             :        */
  132046             :        // SgNamespaceDefinitionStatement( SgNamespaceDefinitionStatementStorageClass& source );
  132047             : 
  132048             : 
  132049             : 
  132050             : 
  132051             : 
  132052             :  // JH (10/24/2005): methods added to support the ast file IO
  132053             :     private:
  132054             : 
  132055             :       /* name AST Memory Allocation Support Functions
  132056             :           \brief Memory allocations support....
  132057             : 
  132058             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  132059             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  132060             :           and support the AST File I/O Mechanism.
  132061             :        */
  132062             :       /* */
  132063             : 
  132064             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  132065             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  132066             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  132067             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  132068             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  132069             :           a correspinding one in the AST_FILE_IO class!
  132070             :        */
  132071             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  132072             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  132073             :       /* \brief Typedef used for low level memory access.
  132074             :        */
  132075             :        // typedef unsigned char* TestType;
  132076             : 
  132077             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  132078             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  132079             :       /* \brief Typedef used to hold memory addresses as values.
  132080             :        */
  132081             :        // typedef unsigned long  AddressType;
  132082             : 
  132083             : 
  132084             : 
  132085             :        // necessary, to have direct access to the p_freepointer and the private methods !
  132086             :       /*! \brief friend class declaration to support AST File I/O */
  132087             :           friend class AST_FILE_IO;
  132088             : 
  132089             :       /*! \brief friend class declaration to support AST File I/O */
  132090             :           friend class SgNamespaceDefinitionStatementStorageClass;
  132091             : 
  132092             :       /*! \brief friend class declaration to support AST File I/O */
  132093             :           friend class AstSpecificDataManagingClass;
  132094             : 
  132095             :       /*! \brief friend class declaration to support AST File I/O */
  132096             :           friend class AstSpecificDataManagingClassStorageClass;
  132097             :     public:
  132098             :       /*! \brief IR node constructor to support AST File I/O */
  132099             :           SgNamespaceDefinitionStatement( const SgNamespaceDefinitionStatementStorageClass& source );
  132100             : 
  132101             :  // private: // JJW hack
  132102             :        /*
  132103             :           name AST Memory Allocation Support Variables
  132104             :           Memory allocations support variables 
  132105             : 
  132106             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  132107             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  132108             :           and support the AST File I/O Mechanism.
  132109             :        */
  132110             :       /* */
  132111             : 
  132112             :     public:
  132113             : 
  132114             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  132115             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  132116             :       // virtual SgNode* addRegExpAttribute();
  132117             :       /*! \brief Support for AST matching using regular expression.
  132118             : 
  132119             :           This support is incomplete and the subject of current research to define 
  132120             :           RegEx trees to support inexact matching.
  132121             :        */
  132122             :           SgNamespaceDefinitionStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  132123             : 
  132124             : // *** COMMON CODE SECTION ENDS HERE ***
  132125             : 
  132126             : 
  132127             : // End of memberFunctionString
  132128             : // Start of memberFunctionString
  132129             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  132130             : 
  132131             :      // the generated cast function
  132132             :      // friend ROSE_DLL_API SgNamespaceDefinitionStatement* isSgNamespaceDefinitionStatement ( SgNode* s );
  132133             : 
  132134             :           typedef SgScopeStatement base_node_type;
  132135             : 
  132136             : 
  132137             : // End of memberFunctionString
  132138             : // Start of memberFunctionString
  132139             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  132140             : 
  132141             :           void post_construction_initialization() override;
  132142             : 
  132143             : 
  132144             : // End of memberFunctionString
  132145             : 
  132146             :      public: 
  132147             :          const SgDeclarationStatementPtrList&  get_declarations() const;
  132148             :          SgDeclarationStatementPtrList& get_declarations(); 
  132149             : 
  132150             :      public: 
  132151             :          SgNamespaceDeclarationStatement* get_namespaceDeclaration() const;
  132152             :          void set_namespaceDeclaration(SgNamespaceDeclarationStatement* namespaceDeclaration);
  132153             : 
  132154             :      public: 
  132155             :          SgNamespaceDefinitionStatement* get_previousNamespaceDefinition() const;
  132156             :          void set_previousNamespaceDefinition(SgNamespaceDefinitionStatement* previousNamespaceDefinition);
  132157             : 
  132158             :      public: 
  132159             :          SgNamespaceDefinitionStatement* get_nextNamespaceDefinition() const;
  132160             :          void set_nextNamespaceDefinition(SgNamespaceDefinitionStatement* nextNamespaceDefinition);
  132161             : 
  132162             :      public: 
  132163             :          SgNamespaceDefinitionStatement* get_global_definition() const;
  132164             :          void set_global_definition(SgNamespaceDefinitionStatement* global_definition);
  132165             : 
  132166             :      public: 
  132167             :          bool get_isUnionOfReentrantNamespaceDefinitions() const;
  132168             :          void set_isUnionOfReentrantNamespaceDefinitions(bool isUnionOfReentrantNamespaceDefinitions);
  132169             : 
  132170             : 
  132171             :      public: 
  132172             :          virtual ~SgNamespaceDefinitionStatement();
  132173             : 
  132174             : 
  132175             :      public: 
  132176             :          SgNamespaceDefinitionStatement(Sg_File_Info* startOfConstruct , SgNamespaceDeclarationStatement* namespaceDeclaration = NULL); 
  132177             :          SgNamespaceDefinitionStatement(SgNamespaceDeclarationStatement* namespaceDeclaration); 
  132178             : 
  132179             :     protected:
  132180             : // Start of memberFunctionString
  132181             : SgDeclarationStatementPtrList p_declarations;
  132182             :           
  132183             : // End of memberFunctionString
  132184             : // Start of memberFunctionString
  132185             : SgNamespaceDeclarationStatement* p_namespaceDeclaration;
  132186             :           
  132187             : // End of memberFunctionString
  132188             : // Start of memberFunctionString
  132189             : SgNamespaceDefinitionStatement* p_previousNamespaceDefinition;
  132190             :           
  132191             : // End of memberFunctionString
  132192             : // Start of memberFunctionString
  132193             : SgNamespaceDefinitionStatement* p_nextNamespaceDefinition;
  132194             :           
  132195             : // End of memberFunctionString
  132196             : // Start of memberFunctionString
  132197             : SgNamespaceDefinitionStatement* p_global_definition;
  132198             :           
  132199             : // End of memberFunctionString
  132200             : // Start of memberFunctionString
  132201             : bool p_isUnionOfReentrantNamespaceDefinitions;
  132202             :           
  132203             : // End of memberFunctionString
  132204             : 
  132205             :     friend struct Rose::Traits::generated::describe_node_t<SgNamespaceDefinitionStatement>;
  132206             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDefinitionStatement, SgDeclarationStatementPtrList,&SgNamespaceDefinitionStatement::p_declarations>;
  132207             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDefinitionStatement, SgNamespaceDeclarationStatement*,&SgNamespaceDefinitionStatement::p_namespaceDeclaration>;
  132208             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDefinitionStatement, SgNamespaceDefinitionStatement*,&SgNamespaceDefinitionStatement::p_previousNamespaceDefinition>;
  132209             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDefinitionStatement, SgNamespaceDefinitionStatement*,&SgNamespaceDefinitionStatement::p_nextNamespaceDefinition>;
  132210             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDefinitionStatement, SgNamespaceDefinitionStatement*,&SgNamespaceDefinitionStatement::p_global_definition>;
  132211             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDefinitionStatement, bool,&SgNamespaceDefinitionStatement::p_isUnionOfReentrantNamespaceDefinitions>;
  132212             : 
  132213             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132214             : 
  132215             : 
  132216             :    };
  132217             : #endif
  132218             : 
  132219             : // postdeclarations for SgNamespaceDefinitionStatement
  132220             : 
  132221             : /* #line 132222 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132222             : 
  132223             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  132224             : 
  132225             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132226             : 
  132227             : 
  132228             : /* #line 132229 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132229             : 
  132230             : 
  132231             : 
  132232             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132233             : 
  132234             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  132235             : //      This code is automatically generated for each 
  132236             : //      terminal and non-terminal within the defined 
  132237             : //      grammar.  There is a simple way to change the 
  132238             : //      code to fix bugs etc.  See the ROSE README file
  132239             : //      for directions.
  132240             : 
  132241             : // tps: (02/22/2010): Adding DLL export requirements
  132242             : #include "rosedll.h"
  132243             : 
  132244             : // predeclarations for SgBlockDataStatement
  132245             : 
  132246             : /* #line 132247 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132247             : 
  132248             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  132249             : 
  132250             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132251             : 
  132252             : #if 1
  132253             : // Class Definition for SgBlockDataStatement
  132254             : class ROSE_DLL_API SgBlockDataStatement  : public SgScopeStatement
  132255             :    {
  132256             :      public:
  132257             : 
  132258             : 
  132259             : /* #line 132260 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132260             : 
  132261             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  132262             : // Start of memberFunctionString
  132263             : /* #line 3618 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  132264             : 
  132265             : 
  132266             : 
  132267             : // End of memberFunctionString
  132268             : // Start of memberFunctionString
  132269             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  132270             : 
  132271             : // *** COMMON CODE SECTION BEGINS HERE ***
  132272             : 
  132273             :     public:
  132274             : 
  132275             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  132276             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  132277             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  132278             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  132279             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  132280             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  132281             : 
  132282             :       /*! \brief returns a string representing the class name */
  132283             :           virtual std::string class_name() const override;
  132284             : 
  132285             :       /*! \brief returns new style SageIII enum values */
  132286             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  132287             : 
  132288             :       /*! \brief static variant value */
  132289             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  132290             :        // static const VariantT static_variant = V_SgBlockDataStatement;
  132291             :           enum { static_variant = V_SgBlockDataStatement };
  132292             : 
  132293             :        /* the generated cast function */
  132294             :       /*! \brief Casts pointer from base class to derived class */
  132295             :           ROSE_DLL_API friend       SgBlockDataStatement* isSgBlockDataStatement(       SgNode * s );
  132296             : 
  132297             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  132298             :           ROSE_DLL_API friend const SgBlockDataStatement* isSgBlockDataStatement( const SgNode * s );
  132299             : 
  132300             :      // ******************************************
  132301             :      // * Memory Pool / New / Delete
  132302             :      // ******************************************
  132303             : 
  132304             :      public:
  132305             :           /// \private
  132306             :           static const unsigned pool_size; //
  132307             :           /// \private
  132308             :           static std::vector<unsigned char *> pools; //
  132309             :           /// \private
  132310             :           static SgBlockDataStatement * next_node; // 
  132311             : 
  132312             :           /// \private
  132313             :           static unsigned long initializeStorageClassArray(SgBlockDataStatementStorageClass *); //
  132314             : 
  132315             :           /// \private
  132316             :           static void clearMemoryPool(); //
  132317             :           static void deleteMemoryPool(); //
  132318             : 
  132319             :           /// \private
  132320             :           static void extendMemoryPoolForFileIO(); //
  132321             : 
  132322             :           /// \private
  132323             :           static SgBlockDataStatement * getPointerFromGlobalIndex(unsigned long); //
  132324             :           /// \private
  132325             :           static SgBlockDataStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  132326             : 
  132327             :           /// \private
  132328             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  132329             :           /// \private
  132330             :           static void resetValidFreepointers(); //
  132331             :           /// \private
  132332             :           static unsigned long getNumberOfLastValidPointer(); //
  132333             : 
  132334             : 
  132335             : #if defined(INLINE_FUNCTIONS)
  132336             :       /*! \brief returns pointer to newly allocated IR node */
  132337             :           inline void *operator new (size_t size);
  132338             : #else
  132339             :       /*! \brief returns pointer to newly allocated IR node */
  132340             :           void *operator new (size_t size);
  132341             : #endif
  132342             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  132343             :           void operator delete (void* pointer, size_t size);
  132344             : 
  132345             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  132346           0 :           void operator delete (void* pointer)
  132347             :              {
  132348             :             // This is the generated delete operator...
  132349           0 :                SgBlockDataStatement::operator delete (pointer,sizeof(SgBlockDataStatement));
  132350             :              }
  132351             : 
  132352             :       /*! \brief Returns the total number of IR nodes of this type */
  132353             :           static size_t numberOfNodes();
  132354             : 
  132355             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  132356             :           static size_t memoryUsage();
  132357             : 
  132358             :       // End of scope which started in IR nodes specific code 
  132359             :       /* */
  132360             : 
  132361             :       /* name Internal Functions
  132362             :           \brief Internal functions ... incomplete-documentation
  132363             : 
  132364             :           These functions have been made public as part of the design, but they are suggested for internal use 
  132365             :           or by particularly knowledgeable users for specialized tools or applications.
  132366             : 
  132367             :           \internal We could not make these private because they are required by user for special purposes. And 
  132368             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  132369             :          
  132370             :        */
  132371             : 
  132372             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  132373             :        // overridden in every class by *generated* implementation
  132374             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  132375             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  132376             :        // MS: 06/28/02 container of names of variables or container indices 
  132377             :        // used used in the traversal to access AST successor nodes
  132378             :        // overridden in every class by *generated* implementation
  132379             :       /*! \brief container of names of variables or container indices used used in the traversal
  132380             :           to access AST successor nodes overridden in every class by *generated* implementation */
  132381             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  132382             : 
  132383             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  132384             :        // than all the vector copies. The implementation for these functions is generated for each class.
  132385             :       /*! \brief return number of children in the traversal successor list */
  132386             :           virtual size_t get_numberOfTraversalSuccessors() override;
  132387             :       /*! \brief index-based access to traversal successors by index number */
  132388             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  132389             :       /*! \brief index-based access to traversal successors by child node */
  132390             :           virtual size_t get_childIndex(SgNode *child) override;
  132391             : 
  132392             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  132393             :        // MS: 08/16/2002 method for generating RTI information
  132394             :       /*! \brief return C++ Runtime-Time-Information */
  132395             :           virtual RTIReturnType roseRTI() override;
  132396             : #endif
  132397             :       /* */
  132398             : 
  132399             : 
  132400             : 
  132401             :       /* name Deprecated Functions
  132402             :           \brief Deprecated functions ... incomplete-documentation
  132403             : 
  132404             :           These functions have been deprecated from use.
  132405             :        */
  132406             :       /* */
  132407             : 
  132408             :       /*! returns a C style string (char*) representing the class name */
  132409             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  132410             : 
  132411             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  132412             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  132413             : #if 0
  132414             :       /*! returns old style Sage II enum values */
  132415             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  132416             :       /*! returns old style Sage II enum values */
  132417             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  132418             : #endif
  132419             :       /* */
  132420             : 
  132421             : 
  132422             : 
  132423             : 
  132424             :      public:
  132425             :       /* name Traversal Support Functions
  132426             :           \brief Traversal support functions ... incomplete-documentation
  132427             : 
  132428             :           These functions have been made public as part of the design, but they are suggested for internal use 
  132429             :           or by particularly knowledgable users for specialized tools or applications.
  132430             :        */
  132431             :       /* */
  132432             : 
  132433             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  132434             :        // (inferior to ROSE traversal mechanism, experimental).
  132435             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  132436             :        */
  132437             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  132438             : 
  132439             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  132440             :       /*! \brief support for the classic visitor pattern done in GoF */
  132441             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  132442             : 
  132443             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  132444             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  132445             :        */
  132446             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  132447             : 
  132448             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  132449             :        */
  132450             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  132451             : 
  132452             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  132453             :        // This traversal helps support internal tools that call static member functions.
  132454             :        // note: this function operates on the memory pools.
  132455             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  132456             :        */
  132457             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  132458             :       /* */
  132459             : 
  132460             : 
  132461             :      public:
  132462             :       /* name Memory Allocation Functions
  132463             :           \brief Memory allocations functions ... incomplete-documentation
  132464             : 
  132465             :           These functions have been made public as part of the design, but they are suggested for internal use 
  132466             :           or by particularly knowledgable users for specialized tools or applications.
  132467             :        */
  132468             :       /* */
  132469             : 
  132470             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  132471             : 
  132472             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  132473             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  132474             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  132475             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  132476             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  132477             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  132478             :           being used with the AST File I/O mechanism.
  132479             :        */
  132480             :           virtual bool isInMemoryPool() override;
  132481             : 
  132482             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  132483             : 
  132484             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  132485             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  132486             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  132487             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  132488             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  132489             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  132490             :           being used with the AST File I/O mechanism.
  132491             :        */
  132492             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  132493             : 
  132494             :       // DQ (4/30/2006): Modified to be a const function.
  132495             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  132496             : 
  132497             :           This functions is part of general support for many possible tools to operate 
  132498             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  132499             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  132500             :           less than the set of pointers used by the AST file I/O. This is part of
  132501             :           work implemented by Andreas, and support tools such as the AST graph generation.
  132502             : 
  132503             :           \warning This function can return unexpected data members and thus the 
  132504             :                    order and the number of elements is unpredicable and subject 
  132505             :                    to change.
  132506             : 
  132507             :           \returns STL vector of pairs of SgNode* and strings
  132508             :        */
  132509             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  132510             : 
  132511             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  132512             : 
  132513             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  132514             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  132515             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  132516             : 
  132517             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  132518             :                    and subject to change.
  132519             :        */
  132520             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  132521             : 
  132522             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  132523             : 
  132524             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  132525             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  132526             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  132527             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  132528             : 
  132529             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  132530             : 
  132531             :           \returns long
  132532             :        */
  132533             :           virtual long getChildIndex( SgNode* childNode ) const override;
  132534             : 
  132535             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  132536             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  132537             :       /* \brief Constructor for use by AST File I/O Mechanism
  132538             : 
  132539             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  132540             :           which obtained via fast binary file I/O from disk.
  132541             :        */
  132542             :        // SgBlockDataStatement( SgBlockDataStatementStorageClass& source );
  132543             : 
  132544             : 
  132545             : 
  132546             : 
  132547             : 
  132548             :  // JH (10/24/2005): methods added to support the ast file IO
  132549             :     private:
  132550             : 
  132551             :       /* name AST Memory Allocation Support Functions
  132552             :           \brief Memory allocations support....
  132553             : 
  132554             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  132555             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  132556             :           and support the AST File I/O Mechanism.
  132557             :        */
  132558             :       /* */
  132559             : 
  132560             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  132561             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  132562             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  132563             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  132564             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  132565             :           a correspinding one in the AST_FILE_IO class!
  132566             :        */
  132567             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  132568             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  132569             :       /* \brief Typedef used for low level memory access.
  132570             :        */
  132571             :        // typedef unsigned char* TestType;
  132572             : 
  132573             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  132574             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  132575             :       /* \brief Typedef used to hold memory addresses as values.
  132576             :        */
  132577             :        // typedef unsigned long  AddressType;
  132578             : 
  132579             : 
  132580             : 
  132581             :        // necessary, to have direct access to the p_freepointer and the private methods !
  132582             :       /*! \brief friend class declaration to support AST File I/O */
  132583             :           friend class AST_FILE_IO;
  132584             : 
  132585             :       /*! \brief friend class declaration to support AST File I/O */
  132586             :           friend class SgBlockDataStatementStorageClass;
  132587             : 
  132588             :       /*! \brief friend class declaration to support AST File I/O */
  132589             :           friend class AstSpecificDataManagingClass;
  132590             : 
  132591             :       /*! \brief friend class declaration to support AST File I/O */
  132592             :           friend class AstSpecificDataManagingClassStorageClass;
  132593             :     public:
  132594             :       /*! \brief IR node constructor to support AST File I/O */
  132595             :           SgBlockDataStatement( const SgBlockDataStatementStorageClass& source );
  132596             : 
  132597             :  // private: // JJW hack
  132598             :        /*
  132599             :           name AST Memory Allocation Support Variables
  132600             :           Memory allocations support variables 
  132601             : 
  132602             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  132603             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  132604             :           and support the AST File I/O Mechanism.
  132605             :        */
  132606             :       /* */
  132607             : 
  132608             :     public:
  132609             : 
  132610             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  132611             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  132612             :       // virtual SgNode* addRegExpAttribute();
  132613             :       /*! \brief Support for AST matching using regular expression.
  132614             : 
  132615             :           This support is incomplete and the subject of current research to define 
  132616             :           RegEx trees to support inexact matching.
  132617             :        */
  132618             :           SgBlockDataStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  132619             : 
  132620             : // *** COMMON CODE SECTION ENDS HERE ***
  132621             : 
  132622             : 
  132623             : // End of memberFunctionString
  132624             : // Start of memberFunctionString
  132625             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  132626             : 
  132627             :      // the generated cast function
  132628             :      // friend ROSE_DLL_API SgBlockDataStatement* isSgBlockDataStatement ( SgNode* s );
  132629             : 
  132630             :           typedef SgScopeStatement base_node_type;
  132631             : 
  132632             : 
  132633             : // End of memberFunctionString
  132634             : // Start of memberFunctionString
  132635             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  132636             : 
  132637             :           void post_construction_initialization() override;
  132638             : 
  132639             : 
  132640             : // End of memberFunctionString
  132641             : 
  132642             :      public: 
  132643             :          SgBasicBlock* get_body() const;
  132644             :          void set_body(SgBasicBlock* body);
  132645             : 
  132646             : 
  132647             :      public: 
  132648             :          virtual ~SgBlockDataStatement();
  132649             : 
  132650             : 
  132651             :      public: 
  132652             :          SgBlockDataStatement(Sg_File_Info* startOfConstruct ); 
  132653             :          SgBlockDataStatement(); 
  132654             : 
  132655             :     protected:
  132656             : // Start of memberFunctionString
  132657             : SgBasicBlock* p_body;
  132658             :           
  132659             : // End of memberFunctionString
  132660             : 
  132661             :     friend struct Rose::Traits::generated::describe_node_t<SgBlockDataStatement>;
  132662             :     friend struct Rose::Traits::generated::describe_field_t<SgBlockDataStatement, SgBasicBlock*,&SgBlockDataStatement::p_body>;
  132663             : 
  132664             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132665             : 
  132666             : 
  132667             :    };
  132668             : #endif
  132669             : 
  132670             : // postdeclarations for SgBlockDataStatement
  132671             : 
  132672             : /* #line 132673 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132673             : 
  132674             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  132675             : 
  132676             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132677             : 
  132678             : 
  132679             : /* #line 132680 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132680             : 
  132681             : 
  132682             : 
  132683             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132684             : 
  132685             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  132686             : //      This code is automatically generated for each 
  132687             : //      terminal and non-terminal within the defined 
  132688             : //      grammar.  There is a simple way to change the 
  132689             : //      code to fix bugs etc.  See the ROSE README file
  132690             : //      for directions.
  132691             : 
  132692             : // tps: (02/22/2010): Adding DLL export requirements
  132693             : #include "rosedll.h"
  132694             : 
  132695             : // predeclarations for SgAssociateStatement
  132696             : 
  132697             : /* #line 132698 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132698             : 
  132699             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  132700             : 
  132701             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  132702             : 
  132703             : #if 1
  132704             : // Class Definition for SgAssociateStatement
  132705             : class ROSE_DLL_API SgAssociateStatement  : public SgScopeStatement
  132706             :    {
  132707             :      public:
  132708             : 
  132709             : 
  132710             : /* #line 132711 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  132711             : 
  132712             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  132713             : // Start of memberFunctionString
  132714             : /* #line 3820 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  132715             : 
  132716             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  132717             : 
  132718             :      public:
  132719             :           virtual void append_associate  ( SgDeclarationStatement* element );
  132720             :           virtual void prepend_associate ( SgDeclarationStatement* element );
  132721             : 
  132722             :      public:
  132723             :        // New functions added
  132724             :        // void append_associate  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  132725             :        // void prepend_associate ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  132726             : 
  132727             :        // void insert_associate  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  132728             : 
  132729             : 
  132730             :      public:
  132731             : 
  132732             : 
  132733             : 
  132734             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  132735             :           virtual unsigned int cfgIndexForEnd() const override;
  132736             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  132737             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  132738             : #endif
  132739             : 
  132740             :           virtual SgName get_mangled_name() const override;
  132741             : 
  132742             : 
  132743             : // End of memberFunctionString
  132744             : // Start of memberFunctionString
  132745             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  132746             : 
  132747             : // *** COMMON CODE SECTION BEGINS HERE ***
  132748             : 
  132749             :     public:
  132750             : 
  132751             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  132752             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  132753             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  132754             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  132755             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  132756             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  132757             : 
  132758             :       /*! \brief returns a string representing the class name */
  132759             :           virtual std::string class_name() const override;
  132760             : 
  132761             :       /*! \brief returns new style SageIII enum values */
  132762             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  132763             : 
  132764             :       /*! \brief static variant value */
  132765             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  132766             :        // static const VariantT static_variant = V_SgAssociateStatement;
  132767             :           enum { static_variant = V_SgAssociateStatement };
  132768             : 
  132769             :        /* the generated cast function */
  132770             :       /*! \brief Casts pointer from base class to derived class */
  132771             :           ROSE_DLL_API friend       SgAssociateStatement* isSgAssociateStatement(       SgNode * s );
  132772             : 
  132773             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  132774             :           ROSE_DLL_API friend const SgAssociateStatement* isSgAssociateStatement( const SgNode * s );
  132775             : 
  132776             :      // ******************************************
  132777             :      // * Memory Pool / New / Delete
  132778             :      // ******************************************
  132779             : 
  132780             :      public:
  132781             :           /// \private
  132782             :           static const unsigned pool_size; //
  132783             :           /// \private
  132784             :           static std::vector<unsigned char *> pools; //
  132785             :           /// \private
  132786             :           static SgAssociateStatement * next_node; // 
  132787             : 
  132788             :           /// \private
  132789             :           static unsigned long initializeStorageClassArray(SgAssociateStatementStorageClass *); //
  132790             : 
  132791             :           /// \private
  132792             :           static void clearMemoryPool(); //
  132793             :           static void deleteMemoryPool(); //
  132794             : 
  132795             :           /// \private
  132796             :           static void extendMemoryPoolForFileIO(); //
  132797             : 
  132798             :           /// \private
  132799             :           static SgAssociateStatement * getPointerFromGlobalIndex(unsigned long); //
  132800             :           /// \private
  132801             :           static SgAssociateStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  132802             : 
  132803             :           /// \private
  132804             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  132805             :           /// \private
  132806             :           static void resetValidFreepointers(); //
  132807             :           /// \private
  132808             :           static unsigned long getNumberOfLastValidPointer(); //
  132809             : 
  132810             : 
  132811             : #if defined(INLINE_FUNCTIONS)
  132812             :       /*! \brief returns pointer to newly allocated IR node */
  132813             :           inline void *operator new (size_t size);
  132814             : #else
  132815             :       /*! \brief returns pointer to newly allocated IR node */
  132816             :           void *operator new (size_t size);
  132817             : #endif
  132818             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  132819             :           void operator delete (void* pointer, size_t size);
  132820             : 
  132821             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  132822           0 :           void operator delete (void* pointer)
  132823             :              {
  132824             :             // This is the generated delete operator...
  132825           0 :                SgAssociateStatement::operator delete (pointer,sizeof(SgAssociateStatement));
  132826             :              }
  132827             : 
  132828             :       /*! \brief Returns the total number of IR nodes of this type */
  132829             :           static size_t numberOfNodes();
  132830             : 
  132831             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  132832             :           static size_t memoryUsage();
  132833             : 
  132834             :       // End of scope which started in IR nodes specific code 
  132835             :       /* */
  132836             : 
  132837             :       /* name Internal Functions
  132838             :           \brief Internal functions ... incomplete-documentation
  132839             : 
  132840             :           These functions have been made public as part of the design, but they are suggested for internal use 
  132841             :           or by particularly knowledgeable users for specialized tools or applications.
  132842             : 
  132843             :           \internal We could not make these private because they are required by user for special purposes. And 
  132844             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  132845             :          
  132846             :        */
  132847             : 
  132848             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  132849             :        // overridden in every class by *generated* implementation
  132850             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  132851             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  132852             :        // MS: 06/28/02 container of names of variables or container indices 
  132853             :        // used used in the traversal to access AST successor nodes
  132854             :        // overridden in every class by *generated* implementation
  132855             :       /*! \brief container of names of variables or container indices used used in the traversal
  132856             :           to access AST successor nodes overridden in every class by *generated* implementation */
  132857             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  132858             : 
  132859             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  132860             :        // than all the vector copies. The implementation for these functions is generated for each class.
  132861             :       /*! \brief return number of children in the traversal successor list */
  132862             :           virtual size_t get_numberOfTraversalSuccessors() override;
  132863             :       /*! \brief index-based access to traversal successors by index number */
  132864             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  132865             :       /*! \brief index-based access to traversal successors by child node */
  132866             :           virtual size_t get_childIndex(SgNode *child) override;
  132867             : 
  132868             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  132869             :        // MS: 08/16/2002 method for generating RTI information
  132870             :       /*! \brief return C++ Runtime-Time-Information */
  132871             :           virtual RTIReturnType roseRTI() override;
  132872             : #endif
  132873             :       /* */
  132874             : 
  132875             : 
  132876             : 
  132877             :       /* name Deprecated Functions
  132878             :           \brief Deprecated functions ... incomplete-documentation
  132879             : 
  132880             :           These functions have been deprecated from use.
  132881             :        */
  132882             :       /* */
  132883             : 
  132884             :       /*! returns a C style string (char*) representing the class name */
  132885             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  132886             : 
  132887             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  132888             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  132889             : #if 0
  132890             :       /*! returns old style Sage II enum values */
  132891             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  132892             :       /*! returns old style Sage II enum values */
  132893             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  132894             : #endif
  132895             :       /* */
  132896             : 
  132897             : 
  132898             : 
  132899             : 
  132900             :      public:
  132901             :       /* name Traversal Support Functions
  132902             :           \brief Traversal support functions ... incomplete-documentation
  132903             : 
  132904             :           These functions have been made public as part of the design, but they are suggested for internal use 
  132905             :           or by particularly knowledgable users for specialized tools or applications.
  132906             :        */
  132907             :       /* */
  132908             : 
  132909             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  132910             :        // (inferior to ROSE traversal mechanism, experimental).
  132911             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  132912             :        */
  132913             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  132914             : 
  132915             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  132916             :       /*! \brief support for the classic visitor pattern done in GoF */
  132917             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  132918             : 
  132919             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  132920             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  132921             :        */
  132922             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  132923             : 
  132924             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  132925             :        */
  132926             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  132927             : 
  132928             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  132929             :        // This traversal helps support internal tools that call static member functions.
  132930             :        // note: this function operates on the memory pools.
  132931             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  132932             :        */
  132933             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  132934             :       /* */
  132935             : 
  132936             : 
  132937             :      public:
  132938             :       /* name Memory Allocation Functions
  132939             :           \brief Memory allocations functions ... incomplete-documentation
  132940             : 
  132941             :           These functions have been made public as part of the design, but they are suggested for internal use 
  132942             :           or by particularly knowledgable users for specialized tools or applications.
  132943             :        */
  132944             :       /* */
  132945             : 
  132946             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  132947             : 
  132948             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  132949             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  132950             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  132951             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  132952             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  132953             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  132954             :           being used with the AST File I/O mechanism.
  132955             :        */
  132956             :           virtual bool isInMemoryPool() override;
  132957             : 
  132958             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  132959             : 
  132960             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  132961             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  132962             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  132963             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  132964             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  132965             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  132966             :           being used with the AST File I/O mechanism.
  132967             :        */
  132968             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  132969             : 
  132970             :       // DQ (4/30/2006): Modified to be a const function.
  132971             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  132972             : 
  132973             :           This functions is part of general support for many possible tools to operate 
  132974             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  132975             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  132976             :           less than the set of pointers used by the AST file I/O. This is part of
  132977             :           work implemented by Andreas, and support tools such as the AST graph generation.
  132978             : 
  132979             :           \warning This function can return unexpected data members and thus the 
  132980             :                    order and the number of elements is unpredicable and subject 
  132981             :                    to change.
  132982             : 
  132983             :           \returns STL vector of pairs of SgNode* and strings
  132984             :        */
  132985             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  132986             : 
  132987             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  132988             : 
  132989             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  132990             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  132991             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  132992             : 
  132993             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  132994             :                    and subject to change.
  132995             :        */
  132996             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  132997             : 
  132998             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  132999             : 
  133000             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  133001             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  133002             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  133003             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  133004             : 
  133005             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  133006             : 
  133007             :           \returns long
  133008             :        */
  133009             :           virtual long getChildIndex( SgNode* childNode ) const override;
  133010             : 
  133011             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  133012             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  133013             :       /* \brief Constructor for use by AST File I/O Mechanism
  133014             : 
  133015             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  133016             :           which obtained via fast binary file I/O from disk.
  133017             :        */
  133018             :        // SgAssociateStatement( SgAssociateStatementStorageClass& source );
  133019             : 
  133020             : 
  133021             : 
  133022             : 
  133023             : 
  133024             :  // JH (10/24/2005): methods added to support the ast file IO
  133025             :     private:
  133026             : 
  133027             :       /* name AST Memory Allocation Support Functions
  133028             :           \brief Memory allocations support....
  133029             : 
  133030             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  133031             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  133032             :           and support the AST File I/O Mechanism.
  133033             :        */
  133034             :       /* */
  133035             : 
  133036             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  133037             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  133038             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  133039             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  133040             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  133041             :           a correspinding one in the AST_FILE_IO class!
  133042             :        */
  133043             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  133044             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  133045             :       /* \brief Typedef used for low level memory access.
  133046             :        */
  133047             :        // typedef unsigned char* TestType;
  133048             : 
  133049             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  133050             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  133051             :       /* \brief Typedef used to hold memory addresses as values.
  133052             :        */
  133053             :        // typedef unsigned long  AddressType;
  133054             : 
  133055             : 
  133056             : 
  133057             :        // necessary, to have direct access to the p_freepointer and the private methods !
  133058             :       /*! \brief friend class declaration to support AST File I/O */
  133059             :           friend class AST_FILE_IO;
  133060             : 
  133061             :       /*! \brief friend class declaration to support AST File I/O */
  133062             :           friend class SgAssociateStatementStorageClass;
  133063             : 
  133064             :       /*! \brief friend class declaration to support AST File I/O */
  133065             :           friend class AstSpecificDataManagingClass;
  133066             : 
  133067             :       /*! \brief friend class declaration to support AST File I/O */
  133068             :           friend class AstSpecificDataManagingClassStorageClass;
  133069             :     public:
  133070             :       /*! \brief IR node constructor to support AST File I/O */
  133071             :           SgAssociateStatement( const SgAssociateStatementStorageClass& source );
  133072             : 
  133073             :  // private: // JJW hack
  133074             :        /*
  133075             :           name AST Memory Allocation Support Variables
  133076             :           Memory allocations support variables 
  133077             : 
  133078             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  133079             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  133080             :           and support the AST File I/O Mechanism.
  133081             :        */
  133082             :       /* */
  133083             : 
  133084             :     public:
  133085             : 
  133086             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  133087             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  133088             :       // virtual SgNode* addRegExpAttribute();
  133089             :       /*! \brief Support for AST matching using regular expression.
  133090             : 
  133091             :           This support is incomplete and the subject of current research to define 
  133092             :           RegEx trees to support inexact matching.
  133093             :        */
  133094             :           SgAssociateStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  133095             : 
  133096             : // *** COMMON CODE SECTION ENDS HERE ***
  133097             : 
  133098             : 
  133099             : // End of memberFunctionString
  133100             : // Start of memberFunctionString
  133101             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  133102             : 
  133103             :      // the generated cast function
  133104             :      // friend ROSE_DLL_API SgAssociateStatement* isSgAssociateStatement ( SgNode* s );
  133105             : 
  133106             :           typedef SgScopeStatement base_node_type;
  133107             : 
  133108             : 
  133109             : // End of memberFunctionString
  133110             : // Start of memberFunctionString
  133111             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  133112             : 
  133113             :           void post_construction_initialization() override;
  133114             : 
  133115             : 
  133116             : // End of memberFunctionString
  133117             : 
  133118             :      public: 
  133119             :          const SgDeclarationStatementPtrList&  get_associates() const;
  133120             :          SgDeclarationStatementPtrList& get_associates(); 
  133121             : 
  133122             :      public: 
  133123             :          SgBasicBlock* get_body() const;
  133124             :          void set_body(SgBasicBlock* body);
  133125             : 
  133126             : 
  133127             :      public: 
  133128             :          virtual ~SgAssociateStatement();
  133129             : 
  133130             : 
  133131             :      public: 
  133132             :          SgAssociateStatement(Sg_File_Info* startOfConstruct ); 
  133133             :          SgAssociateStatement(); 
  133134             : 
  133135             :     protected:
  133136             : // Start of memberFunctionString
  133137             : SgDeclarationStatementPtrList p_associates;
  133138             :           
  133139             : // End of memberFunctionString
  133140             : // Start of memberFunctionString
  133141             : SgBasicBlock* p_body;
  133142             :           
  133143             : // End of memberFunctionString
  133144             : 
  133145             :     friend struct Rose::Traits::generated::describe_node_t<SgAssociateStatement>;
  133146             :     friend struct Rose::Traits::generated::describe_field_t<SgAssociateStatement, SgDeclarationStatementPtrList,&SgAssociateStatement::p_associates>;
  133147             :     friend struct Rose::Traits::generated::describe_field_t<SgAssociateStatement, SgBasicBlock*,&SgAssociateStatement::p_body>;
  133148             : 
  133149             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133150             : 
  133151             : 
  133152             :    };
  133153             : #endif
  133154             : 
  133155             : // postdeclarations for SgAssociateStatement
  133156             : 
  133157             : /* #line 133158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133158             : 
  133159             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  133160             : 
  133161             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133162             : 
  133163             : 
  133164             : /* #line 133165 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133165             : 
  133166             : 
  133167             : 
  133168             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133169             : 
  133170             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  133171             : //      This code is automatically generated for each 
  133172             : //      terminal and non-terminal within the defined 
  133173             : //      grammar.  There is a simple way to change the 
  133174             : //      code to fix bugs etc.  See the ROSE README file
  133175             : //      for directions.
  133176             : 
  133177             : // tps: (02/22/2010): Adding DLL export requirements
  133178             : #include "rosedll.h"
  133179             : 
  133180             : // predeclarations for SgFortranDo
  133181             : 
  133182             : /* #line 133183 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133183             : 
  133184             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  133185             : 
  133186             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133187             : 
  133188             : #if 1
  133189             : // Class Definition for SgFortranDo
  133190             : class ROSE_DLL_API SgFortranDo  : public SgScopeStatement
  133191             :    {
  133192             :      public:
  133193             : 
  133194             : 
  133195             : /* #line 133196 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133196             : 
  133197             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  133198             : // Start of memberFunctionString
  133199             : /* #line 3308 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  133200             : 
  133201             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  133202             :           virtual unsigned int cfgIndexForEnd() const override;
  133203             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  133204             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  133205             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  133206             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  133207             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  133208             : #endif
  133209             :           // Added for uniform support of mangled names, Liao, 3/11/2009
  133210             :           virtual SgName get_mangled_name() const override;
  133211             : 
  133212             : 
  133213             : 
  133214             : // End of memberFunctionString
  133215             : // Start of memberFunctionString
  133216             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  133217             : 
  133218             : // *** COMMON CODE SECTION BEGINS HERE ***
  133219             : 
  133220             :     public:
  133221             : 
  133222             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  133223             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  133224             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  133225             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  133226             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  133227             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  133228             : 
  133229             :       /*! \brief returns a string representing the class name */
  133230             :           virtual std::string class_name() const override;
  133231             : 
  133232             :       /*! \brief returns new style SageIII enum values */
  133233             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  133234             : 
  133235             :       /*! \brief static variant value */
  133236             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  133237             :        // static const VariantT static_variant = V_SgFortranDo;
  133238             :           enum { static_variant = V_SgFortranDo };
  133239             : 
  133240             :        /* the generated cast function */
  133241             :       /*! \brief Casts pointer from base class to derived class */
  133242             :           ROSE_DLL_API friend       SgFortranDo* isSgFortranDo(       SgNode * s );
  133243             : 
  133244             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  133245             :           ROSE_DLL_API friend const SgFortranDo* isSgFortranDo( const SgNode * s );
  133246             : 
  133247             :      // ******************************************
  133248             :      // * Memory Pool / New / Delete
  133249             :      // ******************************************
  133250             : 
  133251             :      public:
  133252             :           /// \private
  133253             :           static const unsigned pool_size; //
  133254             :           /// \private
  133255             :           static std::vector<unsigned char *> pools; //
  133256             :           /// \private
  133257             :           static SgFortranDo * next_node; // 
  133258             : 
  133259             :           /// \private
  133260             :           static unsigned long initializeStorageClassArray(SgFortranDoStorageClass *); //
  133261             : 
  133262             :           /// \private
  133263             :           static void clearMemoryPool(); //
  133264             :           static void deleteMemoryPool(); //
  133265             : 
  133266             :           /// \private
  133267             :           static void extendMemoryPoolForFileIO(); //
  133268             : 
  133269             :           /// \private
  133270             :           static SgFortranDo * getPointerFromGlobalIndex(unsigned long); //
  133271             :           /// \private
  133272             :           static SgFortranDo * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  133273             : 
  133274             :           /// \private
  133275             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  133276             :           /// \private
  133277             :           static void resetValidFreepointers(); //
  133278             :           /// \private
  133279             :           static unsigned long getNumberOfLastValidPointer(); //
  133280             : 
  133281             : 
  133282             : #if defined(INLINE_FUNCTIONS)
  133283             :       /*! \brief returns pointer to newly allocated IR node */
  133284             :           inline void *operator new (size_t size);
  133285             : #else
  133286             :       /*! \brief returns pointer to newly allocated IR node */
  133287             :           void *operator new (size_t size);
  133288             : #endif
  133289             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  133290             :           void operator delete (void* pointer, size_t size);
  133291             : 
  133292             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  133293           0 :           void operator delete (void* pointer)
  133294             :              {
  133295             :             // This is the generated delete operator...
  133296           0 :                SgFortranDo::operator delete (pointer,sizeof(SgFortranDo));
  133297             :              }
  133298             : 
  133299             :       /*! \brief Returns the total number of IR nodes of this type */
  133300             :           static size_t numberOfNodes();
  133301             : 
  133302             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  133303             :           static size_t memoryUsage();
  133304             : 
  133305             :       // End of scope which started in IR nodes specific code 
  133306             :       /* */
  133307             : 
  133308             :       /* name Internal Functions
  133309             :           \brief Internal functions ... incomplete-documentation
  133310             : 
  133311             :           These functions have been made public as part of the design, but they are suggested for internal use 
  133312             :           or by particularly knowledgeable users for specialized tools or applications.
  133313             : 
  133314             :           \internal We could not make these private because they are required by user for special purposes. And 
  133315             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  133316             :          
  133317             :        */
  133318             : 
  133319             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  133320             :        // overridden in every class by *generated* implementation
  133321             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  133322             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  133323             :        // MS: 06/28/02 container of names of variables or container indices 
  133324             :        // used used in the traversal to access AST successor nodes
  133325             :        // overridden in every class by *generated* implementation
  133326             :       /*! \brief container of names of variables or container indices used used in the traversal
  133327             :           to access AST successor nodes overridden in every class by *generated* implementation */
  133328             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  133329             : 
  133330             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  133331             :        // than all the vector copies. The implementation for these functions is generated for each class.
  133332             :       /*! \brief return number of children in the traversal successor list */
  133333             :           virtual size_t get_numberOfTraversalSuccessors() override;
  133334             :       /*! \brief index-based access to traversal successors by index number */
  133335             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  133336             :       /*! \brief index-based access to traversal successors by child node */
  133337             :           virtual size_t get_childIndex(SgNode *child) override;
  133338             : 
  133339             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  133340             :        // MS: 08/16/2002 method for generating RTI information
  133341             :       /*! \brief return C++ Runtime-Time-Information */
  133342             :           virtual RTIReturnType roseRTI() override;
  133343             : #endif
  133344             :       /* */
  133345             : 
  133346             : 
  133347             : 
  133348             :       /* name Deprecated Functions
  133349             :           \brief Deprecated functions ... incomplete-documentation
  133350             : 
  133351             :           These functions have been deprecated from use.
  133352             :        */
  133353             :       /* */
  133354             : 
  133355             :       /*! returns a C style string (char*) representing the class name */
  133356             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  133357             : 
  133358             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  133359             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  133360             : #if 0
  133361             :       /*! returns old style Sage II enum values */
  133362             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  133363             :       /*! returns old style Sage II enum values */
  133364             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  133365             : #endif
  133366             :       /* */
  133367             : 
  133368             : 
  133369             : 
  133370             : 
  133371             :      public:
  133372             :       /* name Traversal Support Functions
  133373             :           \brief Traversal support functions ... incomplete-documentation
  133374             : 
  133375             :           These functions have been made public as part of the design, but they are suggested for internal use 
  133376             :           or by particularly knowledgable users for specialized tools or applications.
  133377             :        */
  133378             :       /* */
  133379             : 
  133380             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  133381             :        // (inferior to ROSE traversal mechanism, experimental).
  133382             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  133383             :        */
  133384             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  133385             : 
  133386             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  133387             :       /*! \brief support for the classic visitor pattern done in GoF */
  133388             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  133389             : 
  133390             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  133391             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  133392             :        */
  133393             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  133394             : 
  133395             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  133396             :        */
  133397             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  133398             : 
  133399             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  133400             :        // This traversal helps support internal tools that call static member functions.
  133401             :        // note: this function operates on the memory pools.
  133402             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  133403             :        */
  133404             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  133405             :       /* */
  133406             : 
  133407             : 
  133408             :      public:
  133409             :       /* name Memory Allocation Functions
  133410             :           \brief Memory allocations functions ... incomplete-documentation
  133411             : 
  133412             :           These functions have been made public as part of the design, but they are suggested for internal use 
  133413             :           or by particularly knowledgable users for specialized tools or applications.
  133414             :        */
  133415             :       /* */
  133416             : 
  133417             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  133418             : 
  133419             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  133420             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  133421             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  133422             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  133423             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  133424             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  133425             :           being used with the AST File I/O mechanism.
  133426             :        */
  133427             :           virtual bool isInMemoryPool() override;
  133428             : 
  133429             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  133430             : 
  133431             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  133432             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  133433             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  133434             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  133435             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  133436             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  133437             :           being used with the AST File I/O mechanism.
  133438             :        */
  133439             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  133440             : 
  133441             :       // DQ (4/30/2006): Modified to be a const function.
  133442             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  133443             : 
  133444             :           This functions is part of general support for many possible tools to operate 
  133445             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  133446             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  133447             :           less than the set of pointers used by the AST file I/O. This is part of
  133448             :           work implemented by Andreas, and support tools such as the AST graph generation.
  133449             : 
  133450             :           \warning This function can return unexpected data members and thus the 
  133451             :                    order and the number of elements is unpredicable and subject 
  133452             :                    to change.
  133453             : 
  133454             :           \returns STL vector of pairs of SgNode* and strings
  133455             :        */
  133456             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  133457             : 
  133458             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  133459             : 
  133460             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  133461             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  133462             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  133463             : 
  133464             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  133465             :                    and subject to change.
  133466             :        */
  133467             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  133468             : 
  133469             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  133470             : 
  133471             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  133472             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  133473             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  133474             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  133475             : 
  133476             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  133477             : 
  133478             :           \returns long
  133479             :        */
  133480             :           virtual long getChildIndex( SgNode* childNode ) const override;
  133481             : 
  133482             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  133483             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  133484             :       /* \brief Constructor for use by AST File I/O Mechanism
  133485             : 
  133486             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  133487             :           which obtained via fast binary file I/O from disk.
  133488             :        */
  133489             :        // SgFortranDo( SgFortranDoStorageClass& source );
  133490             : 
  133491             : 
  133492             : 
  133493             : 
  133494             : 
  133495             :  // JH (10/24/2005): methods added to support the ast file IO
  133496             :     private:
  133497             : 
  133498             :       /* name AST Memory Allocation Support Functions
  133499             :           \brief Memory allocations support....
  133500             : 
  133501             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  133502             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  133503             :           and support the AST File I/O Mechanism.
  133504             :        */
  133505             :       /* */
  133506             : 
  133507             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  133508             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  133509             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  133510             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  133511             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  133512             :           a correspinding one in the AST_FILE_IO class!
  133513             :        */
  133514             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  133515             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  133516             :       /* \brief Typedef used for low level memory access.
  133517             :        */
  133518             :        // typedef unsigned char* TestType;
  133519             : 
  133520             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  133521             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  133522             :       /* \brief Typedef used to hold memory addresses as values.
  133523             :        */
  133524             :        // typedef unsigned long  AddressType;
  133525             : 
  133526             : 
  133527             : 
  133528             :        // necessary, to have direct access to the p_freepointer and the private methods !
  133529             :       /*! \brief friend class declaration to support AST File I/O */
  133530             :           friend class AST_FILE_IO;
  133531             : 
  133532             :       /*! \brief friend class declaration to support AST File I/O */
  133533             :           friend class SgFortranDoStorageClass;
  133534             : 
  133535             :       /*! \brief friend class declaration to support AST File I/O */
  133536             :           friend class AstSpecificDataManagingClass;
  133537             : 
  133538             :       /*! \brief friend class declaration to support AST File I/O */
  133539             :           friend class AstSpecificDataManagingClassStorageClass;
  133540             :     public:
  133541             :       /*! \brief IR node constructor to support AST File I/O */
  133542             :           SgFortranDo( const SgFortranDoStorageClass& source );
  133543             : 
  133544             :  // private: // JJW hack
  133545             :        /*
  133546             :           name AST Memory Allocation Support Variables
  133547             :           Memory allocations support variables 
  133548             : 
  133549             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  133550             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  133551             :           and support the AST File I/O Mechanism.
  133552             :        */
  133553             :       /* */
  133554             : 
  133555             :     public:
  133556             : 
  133557             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  133558             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  133559             :       // virtual SgNode* addRegExpAttribute();
  133560             :       /*! \brief Support for AST matching using regular expression.
  133561             : 
  133562             :           This support is incomplete and the subject of current research to define 
  133563             :           RegEx trees to support inexact matching.
  133564             :        */
  133565             :           SgFortranDo* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  133566             : 
  133567             : // *** COMMON CODE SECTION ENDS HERE ***
  133568             : 
  133569             : 
  133570             : // End of memberFunctionString
  133571             : // Start of memberFunctionString
  133572             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  133573             : 
  133574             :      // the generated cast function
  133575             :      // friend ROSE_DLL_API SgFortranDo* isSgFortranDo ( SgNode* s );
  133576             : 
  133577             :           typedef SgScopeStatement base_node_type;
  133578             : 
  133579             : 
  133580             : // End of memberFunctionString
  133581             : // Start of memberFunctionString
  133582             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  133583             : 
  133584             :           void post_construction_initialization() override;
  133585             : 
  133586             : 
  133587             : // End of memberFunctionString
  133588             : 
  133589             :      public: 
  133590             :          SgExpression* get_initialization() const;
  133591             :          void set_initialization(SgExpression* initialization);
  133592             : 
  133593             :      public: 
  133594             :          SgExpression* get_bound() const;
  133595             :          void set_bound(SgExpression* bound);
  133596             : 
  133597             :      public: 
  133598             :          SgExpression* get_increment() const;
  133599             :          void set_increment(SgExpression* increment);
  133600             : 
  133601             :      public: 
  133602             :          SgBasicBlock* get_body() const;
  133603             :          void set_body(SgBasicBlock* body);
  133604             : 
  133605             :      public: 
  133606             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  133607             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  133608             : 
  133609             :      public: 
  133610             :          std::string get_string_label() const;
  133611             :          void set_string_label(std::string string_label);
  133612             : 
  133613             :      public: 
  133614             :          bool get_old_style() const;
  133615             :          void set_old_style(bool old_style);
  133616             : 
  133617             :      public: 
  133618             :          bool get_has_end_statement() const;
  133619             :          void set_has_end_statement(bool has_end_statement);
  133620             : 
  133621             : 
  133622             :      public: 
  133623             :          virtual ~SgFortranDo();
  133624             : 
  133625             : 
  133626             :      public: 
  133627             :          SgFortranDo(Sg_File_Info* startOfConstruct , SgExpression* initialization = NULL, SgExpression* bound = NULL, SgExpression* increment = NULL, SgBasicBlock* body = NULL); 
  133628             :          SgFortranDo(SgExpression* initialization, SgExpression* bound, SgExpression* increment, SgBasicBlock* body); 
  133629             : 
  133630             :     protected:
  133631             : // Start of memberFunctionString
  133632             : SgExpression* p_initialization;
  133633             :           
  133634             : // End of memberFunctionString
  133635             : // Start of memberFunctionString
  133636             : SgExpression* p_bound;
  133637             :           
  133638             : // End of memberFunctionString
  133639             : // Start of memberFunctionString
  133640             : SgExpression* p_increment;
  133641             :           
  133642             : // End of memberFunctionString
  133643             : // Start of memberFunctionString
  133644             : SgBasicBlock* p_body;
  133645             :           
  133646             : // End of memberFunctionString
  133647             : // Start of memberFunctionString
  133648             : SgLabelRefExp* p_end_numeric_label;
  133649             :           
  133650             : // End of memberFunctionString
  133651             : // Start of memberFunctionString
  133652             : std::string p_string_label;
  133653             :           
  133654             : // End of memberFunctionString
  133655             : // Start of memberFunctionString
  133656             : bool p_old_style;
  133657             :           
  133658             : // End of memberFunctionString
  133659             : // Start of memberFunctionString
  133660             : bool p_has_end_statement;
  133661             :           
  133662             : // End of memberFunctionString
  133663             : 
  133664             :     friend struct Rose::Traits::generated::describe_node_t<SgFortranDo>;
  133665             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, SgExpression*,&SgFortranDo::p_initialization>;
  133666             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, SgExpression*,&SgFortranDo::p_bound>;
  133667             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, SgExpression*,&SgFortranDo::p_increment>;
  133668             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, SgBasicBlock*,&SgFortranDo::p_body>;
  133669             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, SgLabelRefExp*,&SgFortranDo::p_end_numeric_label>;
  133670             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, std::string,&SgFortranDo::p_string_label>;
  133671             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, bool,&SgFortranDo::p_old_style>;
  133672             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranDo, bool,&SgFortranDo::p_has_end_statement>;
  133673             : 
  133674             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133675             : 
  133676             : 
  133677             :    };
  133678             : #endif
  133679             : 
  133680             : // postdeclarations for SgFortranDo
  133681             : 
  133682             : /* #line 133683 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133683             : 
  133684             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  133685             : 
  133686             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133687             : 
  133688             : 
  133689             : /* #line 133690 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133690             : 
  133691             : 
  133692             : 
  133693             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133694             : 
  133695             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  133696             : //      This code is automatically generated for each 
  133697             : //      terminal and non-terminal within the defined 
  133698             : //      grammar.  There is a simple way to change the 
  133699             : //      code to fix bugs etc.  See the ROSE README file
  133700             : //      for directions.
  133701             : 
  133702             : // tps: (02/22/2010): Adding DLL export requirements
  133703             : #include "rosedll.h"
  133704             : 
  133705             : // predeclarations for SgFortranNonblockedDo
  133706             : 
  133707             : /* #line 133708 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133708             : 
  133709             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  133710             : 
  133711             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  133712             : 
  133713             : #if 1
  133714             : // Class Definition for SgFortranNonblockedDo
  133715             : class ROSE_DLL_API SgFortranNonblockedDo  : public SgFortranDo
  133716             :    {
  133717             :      public:
  133718             : 
  133719             : 
  133720             : /* #line 133721 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  133721             : 
  133722             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  133723             : // Start of memberFunctionString
  133724             : /* #line 3322 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  133725             : 
  133726             : 
  133727             : 
  133728             : // End of memberFunctionString
  133729             : // Start of memberFunctionString
  133730             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  133731             : 
  133732             : // *** COMMON CODE SECTION BEGINS HERE ***
  133733             : 
  133734             :     public:
  133735             : 
  133736             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  133737             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  133738             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  133739             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  133740             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  133741             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  133742             : 
  133743             :       /*! \brief returns a string representing the class name */
  133744             :           virtual std::string class_name() const override;
  133745             : 
  133746             :       /*! \brief returns new style SageIII enum values */
  133747             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  133748             : 
  133749             :       /*! \brief static variant value */
  133750             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  133751             :        // static const VariantT static_variant = V_SgFortranNonblockedDo;
  133752             :           enum { static_variant = V_SgFortranNonblockedDo };
  133753             : 
  133754             :        /* the generated cast function */
  133755             :       /*! \brief Casts pointer from base class to derived class */
  133756             :           ROSE_DLL_API friend       SgFortranNonblockedDo* isSgFortranNonblockedDo(       SgNode * s );
  133757             : 
  133758             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  133759             :           ROSE_DLL_API friend const SgFortranNonblockedDo* isSgFortranNonblockedDo( const SgNode * s );
  133760             : 
  133761             :      // ******************************************
  133762             :      // * Memory Pool / New / Delete
  133763             :      // ******************************************
  133764             : 
  133765             :      public:
  133766             :           /// \private
  133767             :           static const unsigned pool_size; //
  133768             :           /// \private
  133769             :           static std::vector<unsigned char *> pools; //
  133770             :           /// \private
  133771             :           static SgFortranNonblockedDo * next_node; // 
  133772             : 
  133773             :           /// \private
  133774             :           static unsigned long initializeStorageClassArray(SgFortranNonblockedDoStorageClass *); //
  133775             : 
  133776             :           /// \private
  133777             :           static void clearMemoryPool(); //
  133778             :           static void deleteMemoryPool(); //
  133779             : 
  133780             :           /// \private
  133781             :           static void extendMemoryPoolForFileIO(); //
  133782             : 
  133783             :           /// \private
  133784             :           static SgFortranNonblockedDo * getPointerFromGlobalIndex(unsigned long); //
  133785             :           /// \private
  133786             :           static SgFortranNonblockedDo * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  133787             : 
  133788             :           /// \private
  133789             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  133790             :           /// \private
  133791             :           static void resetValidFreepointers(); //
  133792             :           /// \private
  133793             :           static unsigned long getNumberOfLastValidPointer(); //
  133794             : 
  133795             : 
  133796             : #if defined(INLINE_FUNCTIONS)
  133797             :       /*! \brief returns pointer to newly allocated IR node */
  133798             :           inline void *operator new (size_t size);
  133799             : #else
  133800             :       /*! \brief returns pointer to newly allocated IR node */
  133801             :           void *operator new (size_t size);
  133802             : #endif
  133803             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  133804             :           void operator delete (void* pointer, size_t size);
  133805             : 
  133806             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  133807           0 :           void operator delete (void* pointer)
  133808             :              {
  133809             :             // This is the generated delete operator...
  133810           0 :                SgFortranNonblockedDo::operator delete (pointer,sizeof(SgFortranNonblockedDo));
  133811             :              }
  133812             : 
  133813             :       /*! \brief Returns the total number of IR nodes of this type */
  133814             :           static size_t numberOfNodes();
  133815             : 
  133816             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  133817             :           static size_t memoryUsage();
  133818             : 
  133819             :       // End of scope which started in IR nodes specific code 
  133820             :       /* */
  133821             : 
  133822             :       /* name Internal Functions
  133823             :           \brief Internal functions ... incomplete-documentation
  133824             : 
  133825             :           These functions have been made public as part of the design, but they are suggested for internal use 
  133826             :           or by particularly knowledgeable users for specialized tools or applications.
  133827             : 
  133828             :           \internal We could not make these private because they are required by user for special purposes. And 
  133829             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  133830             :          
  133831             :        */
  133832             : 
  133833             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  133834             :        // overridden in every class by *generated* implementation
  133835             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  133836             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  133837             :        // MS: 06/28/02 container of names of variables or container indices 
  133838             :        // used used in the traversal to access AST successor nodes
  133839             :        // overridden in every class by *generated* implementation
  133840             :       /*! \brief container of names of variables or container indices used used in the traversal
  133841             :           to access AST successor nodes overridden in every class by *generated* implementation */
  133842             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  133843             : 
  133844             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  133845             :        // than all the vector copies. The implementation for these functions is generated for each class.
  133846             :       /*! \brief return number of children in the traversal successor list */
  133847             :           virtual size_t get_numberOfTraversalSuccessors() override;
  133848             :       /*! \brief index-based access to traversal successors by index number */
  133849             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  133850             :       /*! \brief index-based access to traversal successors by child node */
  133851             :           virtual size_t get_childIndex(SgNode *child) override;
  133852             : 
  133853             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  133854             :        // MS: 08/16/2002 method for generating RTI information
  133855             :       /*! \brief return C++ Runtime-Time-Information */
  133856             :           virtual RTIReturnType roseRTI() override;
  133857             : #endif
  133858             :       /* */
  133859             : 
  133860             : 
  133861             : 
  133862             :       /* name Deprecated Functions
  133863             :           \brief Deprecated functions ... incomplete-documentation
  133864             : 
  133865             :           These functions have been deprecated from use.
  133866             :        */
  133867             :       /* */
  133868             : 
  133869             :       /*! returns a C style string (char*) representing the class name */
  133870             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  133871             : 
  133872             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  133873             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  133874             : #if 0
  133875             :       /*! returns old style Sage II enum values */
  133876             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  133877             :       /*! returns old style Sage II enum values */
  133878             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  133879             : #endif
  133880             :       /* */
  133881             : 
  133882             : 
  133883             : 
  133884             : 
  133885             :      public:
  133886             :       /* name Traversal Support Functions
  133887             :           \brief Traversal support functions ... incomplete-documentation
  133888             : 
  133889             :           These functions have been made public as part of the design, but they are suggested for internal use 
  133890             :           or by particularly knowledgable users for specialized tools or applications.
  133891             :        */
  133892             :       /* */
  133893             : 
  133894             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  133895             :        // (inferior to ROSE traversal mechanism, experimental).
  133896             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  133897             :        */
  133898             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  133899             : 
  133900             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  133901             :       /*! \brief support for the classic visitor pattern done in GoF */
  133902             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  133903             : 
  133904             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  133905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  133906             :        */
  133907             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  133908             : 
  133909             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  133910             :        */
  133911             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  133912             : 
  133913             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  133914             :        // This traversal helps support internal tools that call static member functions.
  133915             :        // note: this function operates on the memory pools.
  133916             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  133917             :        */
  133918             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  133919             :       /* */
  133920             : 
  133921             : 
  133922             :      public:
  133923             :       /* name Memory Allocation Functions
  133924             :           \brief Memory allocations functions ... incomplete-documentation
  133925             : 
  133926             :           These functions have been made public as part of the design, but they are suggested for internal use 
  133927             :           or by particularly knowledgable users for specialized tools or applications.
  133928             :        */
  133929             :       /* */
  133930             : 
  133931             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  133932             : 
  133933             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  133934             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  133935             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  133936             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  133937             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  133938             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  133939             :           being used with the AST File I/O mechanism.
  133940             :        */
  133941             :           virtual bool isInMemoryPool() override;
  133942             : 
  133943             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  133944             : 
  133945             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  133946             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  133947             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  133948             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  133949             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  133950             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  133951             :           being used with the AST File I/O mechanism.
  133952             :        */
  133953             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  133954             : 
  133955             :       // DQ (4/30/2006): Modified to be a const function.
  133956             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  133957             : 
  133958             :           This functions is part of general support for many possible tools to operate 
  133959             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  133960             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  133961             :           less than the set of pointers used by the AST file I/O. This is part of
  133962             :           work implemented by Andreas, and support tools such as the AST graph generation.
  133963             : 
  133964             :           \warning This function can return unexpected data members and thus the 
  133965             :                    order and the number of elements is unpredicable and subject 
  133966             :                    to change.
  133967             : 
  133968             :           \returns STL vector of pairs of SgNode* and strings
  133969             :        */
  133970             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  133971             : 
  133972             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  133973             : 
  133974             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  133975             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  133976             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  133977             : 
  133978             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  133979             :                    and subject to change.
  133980             :        */
  133981             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  133982             : 
  133983             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  133984             : 
  133985             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  133986             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  133987             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  133988             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  133989             : 
  133990             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  133991             : 
  133992             :           \returns long
  133993             :        */
  133994             :           virtual long getChildIndex( SgNode* childNode ) const override;
  133995             : 
  133996             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  133997             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  133998             :       /* \brief Constructor for use by AST File I/O Mechanism
  133999             : 
  134000             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  134001             :           which obtained via fast binary file I/O from disk.
  134002             :        */
  134003             :        // SgFortranNonblockedDo( SgFortranNonblockedDoStorageClass& source );
  134004             : 
  134005             : 
  134006             : 
  134007             : 
  134008             : 
  134009             :  // JH (10/24/2005): methods added to support the ast file IO
  134010             :     private:
  134011             : 
  134012             :       /* name AST Memory Allocation Support Functions
  134013             :           \brief Memory allocations support....
  134014             : 
  134015             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  134016             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  134017             :           and support the AST File I/O Mechanism.
  134018             :        */
  134019             :       /* */
  134020             : 
  134021             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  134022             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  134023             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  134024             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  134025             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  134026             :           a correspinding one in the AST_FILE_IO class!
  134027             :        */
  134028             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  134029             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  134030             :       /* \brief Typedef used for low level memory access.
  134031             :        */
  134032             :        // typedef unsigned char* TestType;
  134033             : 
  134034             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  134035             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  134036             :       /* \brief Typedef used to hold memory addresses as values.
  134037             :        */
  134038             :        // typedef unsigned long  AddressType;
  134039             : 
  134040             : 
  134041             : 
  134042             :        // necessary, to have direct access to the p_freepointer and the private methods !
  134043             :       /*! \brief friend class declaration to support AST File I/O */
  134044             :           friend class AST_FILE_IO;
  134045             : 
  134046             :       /*! \brief friend class declaration to support AST File I/O */
  134047             :           friend class SgFortranNonblockedDoStorageClass;
  134048             : 
  134049             :       /*! \brief friend class declaration to support AST File I/O */
  134050             :           friend class AstSpecificDataManagingClass;
  134051             : 
  134052             :       /*! \brief friend class declaration to support AST File I/O */
  134053             :           friend class AstSpecificDataManagingClassStorageClass;
  134054             :     public:
  134055             :       /*! \brief IR node constructor to support AST File I/O */
  134056             :           SgFortranNonblockedDo( const SgFortranNonblockedDoStorageClass& source );
  134057             : 
  134058             :  // private: // JJW hack
  134059             :        /*
  134060             :           name AST Memory Allocation Support Variables
  134061             :           Memory allocations support variables 
  134062             : 
  134063             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  134064             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  134065             :           and support the AST File I/O Mechanism.
  134066             :        */
  134067             :       /* */
  134068             : 
  134069             :     public:
  134070             : 
  134071             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  134072             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  134073             :       // virtual SgNode* addRegExpAttribute();
  134074             :       /*! \brief Support for AST matching using regular expression.
  134075             : 
  134076             :           This support is incomplete and the subject of current research to define 
  134077             :           RegEx trees to support inexact matching.
  134078             :        */
  134079             :           SgFortranNonblockedDo* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  134080             : 
  134081             : // *** COMMON CODE SECTION ENDS HERE ***
  134082             : 
  134083             : 
  134084             : // End of memberFunctionString
  134085             : // Start of memberFunctionString
  134086             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  134087             : 
  134088             :      // the generated cast function
  134089             :      // friend ROSE_DLL_API SgFortranNonblockedDo* isSgFortranNonblockedDo ( SgNode* s );
  134090             : 
  134091             :           typedef SgFortranDo base_node_type;
  134092             : 
  134093             : 
  134094             : // End of memberFunctionString
  134095             : // Start of memberFunctionString
  134096             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  134097             : 
  134098             :           void post_construction_initialization() override;
  134099             : 
  134100             : 
  134101             : // End of memberFunctionString
  134102             : 
  134103             :      public: 
  134104             :          SgStatement* get_end_statement() const;
  134105             :          void set_end_statement(SgStatement* end_statement);
  134106             : 
  134107             : 
  134108             :      public: 
  134109             :          virtual ~SgFortranNonblockedDo();
  134110             : 
  134111             : 
  134112             :      public: 
  134113             :          SgFortranNonblockedDo(Sg_File_Info* startOfConstruct , SgExpression* initialization = NULL, SgExpression* bound = NULL, SgExpression* increment = NULL, SgBasicBlock* body = NULL, SgStatement* end_statement = NULL); 
  134114             :          SgFortranNonblockedDo(SgExpression* initialization, SgExpression* bound, SgExpression* increment, SgBasicBlock* body, SgStatement* end_statement); 
  134115             : 
  134116             :     protected:
  134117             : // Start of memberFunctionString
  134118             : SgStatement* p_end_statement;
  134119             :           
  134120             : // End of memberFunctionString
  134121             : 
  134122             :     friend struct Rose::Traits::generated::describe_node_t<SgFortranNonblockedDo>;
  134123             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranNonblockedDo, SgStatement*,&SgFortranNonblockedDo::p_end_statement>;
  134124             : 
  134125             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134126             : 
  134127             : 
  134128             :    };
  134129             : #endif
  134130             : 
  134131             : // postdeclarations for SgFortranNonblockedDo
  134132             : 
  134133             : /* #line 134134 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134134             : 
  134135             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  134136             : 
  134137             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134138             : 
  134139             : 
  134140             : /* #line 134141 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134141             : 
  134142             : 
  134143             : 
  134144             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134145             : 
  134146             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  134147             : //      This code is automatically generated for each 
  134148             : //      terminal and non-terminal within the defined 
  134149             : //      grammar.  There is a simple way to change the 
  134150             : //      code to fix bugs etc.  See the ROSE README file
  134151             : //      for directions.
  134152             : 
  134153             : // tps: (02/22/2010): Adding DLL export requirements
  134154             : #include "rosedll.h"
  134155             : 
  134156             : // predeclarations for SgForAllStatement
  134157             : 
  134158             : /* #line 134159 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134159             : 
  134160             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  134161             : 
  134162             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134163             : 
  134164             : #if 1
  134165             : // Class Definition for SgForAllStatement
  134166             : class ROSE_DLL_API SgForAllStatement  : public SgScopeStatement
  134167             :    {
  134168             :      public:
  134169             : 
  134170             : 
  134171             : /* #line 134172 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134172             : 
  134173             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  134174             : // Start of memberFunctionString
  134175             : /* #line 1396 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  134176             : 
  134177             :   //! This class represents forall statements and the Fortran do concurrent construct.
  134178             :   //
  134179             :      public:
  134180             :        // Rasmussen (11/08/2018): Needed because of addition of do-concurrent-stmt
  134181             :           enum forall_statement_kind_enum
  134182             :              {
  134183             :                e_unknown,
  134184             :                e_forall_statement,
  134185             :                e_do_concurrent_statement,
  134186             :                e_last_forall_statement_kind
  134187             :              };
  134188             : 
  134189             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  134190             :           virtual unsigned int cfgIndexForEnd() const override;
  134191             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  134192             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  134193             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  134194             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  134195             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  134196             : #endif
  134197             : 
  134198             : 
  134199             : // End of memberFunctionString
  134200             : // Start of memberFunctionString
  134201             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  134202             : 
  134203             : // *** COMMON CODE SECTION BEGINS HERE ***
  134204             : 
  134205             :     public:
  134206             : 
  134207             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  134208             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  134209             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  134210             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  134211             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  134212             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  134213             : 
  134214             :       /*! \brief returns a string representing the class name */
  134215             :           virtual std::string class_name() const override;
  134216             : 
  134217             :       /*! \brief returns new style SageIII enum values */
  134218             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  134219             : 
  134220             :       /*! \brief static variant value */
  134221             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  134222             :        // static const VariantT static_variant = V_SgForAllStatement;
  134223             :           enum { static_variant = V_SgForAllStatement };
  134224             : 
  134225             :        /* the generated cast function */
  134226             :       /*! \brief Casts pointer from base class to derived class */
  134227             :           ROSE_DLL_API friend       SgForAllStatement* isSgForAllStatement(       SgNode * s );
  134228             : 
  134229             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  134230             :           ROSE_DLL_API friend const SgForAllStatement* isSgForAllStatement( const SgNode * s );
  134231             : 
  134232             :      // ******************************************
  134233             :      // * Memory Pool / New / Delete
  134234             :      // ******************************************
  134235             : 
  134236             :      public:
  134237             :           /// \private
  134238             :           static const unsigned pool_size; //
  134239             :           /// \private
  134240             :           static std::vector<unsigned char *> pools; //
  134241             :           /// \private
  134242             :           static SgForAllStatement * next_node; // 
  134243             : 
  134244             :           /// \private
  134245             :           static unsigned long initializeStorageClassArray(SgForAllStatementStorageClass *); //
  134246             : 
  134247             :           /// \private
  134248             :           static void clearMemoryPool(); //
  134249             :           static void deleteMemoryPool(); //
  134250             : 
  134251             :           /// \private
  134252             :           static void extendMemoryPoolForFileIO(); //
  134253             : 
  134254             :           /// \private
  134255             :           static SgForAllStatement * getPointerFromGlobalIndex(unsigned long); //
  134256             :           /// \private
  134257             :           static SgForAllStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  134258             : 
  134259             :           /// \private
  134260             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  134261             :           /// \private
  134262             :           static void resetValidFreepointers(); //
  134263             :           /// \private
  134264             :           static unsigned long getNumberOfLastValidPointer(); //
  134265             : 
  134266             : 
  134267             : #if defined(INLINE_FUNCTIONS)
  134268             :       /*! \brief returns pointer to newly allocated IR node */
  134269             :           inline void *operator new (size_t size);
  134270             : #else
  134271             :       /*! \brief returns pointer to newly allocated IR node */
  134272             :           void *operator new (size_t size);
  134273             : #endif
  134274             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  134275             :           void operator delete (void* pointer, size_t size);
  134276             : 
  134277             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  134278           0 :           void operator delete (void* pointer)
  134279             :              {
  134280             :             // This is the generated delete operator...
  134281           0 :                SgForAllStatement::operator delete (pointer,sizeof(SgForAllStatement));
  134282             :              }
  134283             : 
  134284             :       /*! \brief Returns the total number of IR nodes of this type */
  134285             :           static size_t numberOfNodes();
  134286             : 
  134287             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  134288             :           static size_t memoryUsage();
  134289             : 
  134290             :       // End of scope which started in IR nodes specific code 
  134291             :       /* */
  134292             : 
  134293             :       /* name Internal Functions
  134294             :           \brief Internal functions ... incomplete-documentation
  134295             : 
  134296             :           These functions have been made public as part of the design, but they are suggested for internal use 
  134297             :           or by particularly knowledgeable users for specialized tools or applications.
  134298             : 
  134299             :           \internal We could not make these private because they are required by user for special purposes. And 
  134300             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  134301             :          
  134302             :        */
  134303             : 
  134304             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  134305             :        // overridden in every class by *generated* implementation
  134306             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  134307             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  134308             :        // MS: 06/28/02 container of names of variables or container indices 
  134309             :        // used used in the traversal to access AST successor nodes
  134310             :        // overridden in every class by *generated* implementation
  134311             :       /*! \brief container of names of variables or container indices used used in the traversal
  134312             :           to access AST successor nodes overridden in every class by *generated* implementation */
  134313             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  134314             : 
  134315             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  134316             :        // than all the vector copies. The implementation for these functions is generated for each class.
  134317             :       /*! \brief return number of children in the traversal successor list */
  134318             :           virtual size_t get_numberOfTraversalSuccessors() override;
  134319             :       /*! \brief index-based access to traversal successors by index number */
  134320             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  134321             :       /*! \brief index-based access to traversal successors by child node */
  134322             :           virtual size_t get_childIndex(SgNode *child) override;
  134323             : 
  134324             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  134325             :        // MS: 08/16/2002 method for generating RTI information
  134326             :       /*! \brief return C++ Runtime-Time-Information */
  134327             :           virtual RTIReturnType roseRTI() override;
  134328             : #endif
  134329             :       /* */
  134330             : 
  134331             : 
  134332             : 
  134333             :       /* name Deprecated Functions
  134334             :           \brief Deprecated functions ... incomplete-documentation
  134335             : 
  134336             :           These functions have been deprecated from use.
  134337             :        */
  134338             :       /* */
  134339             : 
  134340             :       /*! returns a C style string (char*) representing the class name */
  134341             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  134342             : 
  134343             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  134344             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  134345             : #if 0
  134346             :       /*! returns old style Sage II enum values */
  134347             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  134348             :       /*! returns old style Sage II enum values */
  134349             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  134350             : #endif
  134351             :       /* */
  134352             : 
  134353             : 
  134354             : 
  134355             : 
  134356             :      public:
  134357             :       /* name Traversal Support Functions
  134358             :           \brief Traversal support functions ... incomplete-documentation
  134359             : 
  134360             :           These functions have been made public as part of the design, but they are suggested for internal use 
  134361             :           or by particularly knowledgable users for specialized tools or applications.
  134362             :        */
  134363             :       /* */
  134364             : 
  134365             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  134366             :        // (inferior to ROSE traversal mechanism, experimental).
  134367             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  134368             :        */
  134369             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  134370             : 
  134371             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  134372             :       /*! \brief support for the classic visitor pattern done in GoF */
  134373             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  134374             : 
  134375             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  134376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  134377             :        */
  134378             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  134379             : 
  134380             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  134381             :        */
  134382             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  134383             : 
  134384             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  134385             :        // This traversal helps support internal tools that call static member functions.
  134386             :        // note: this function operates on the memory pools.
  134387             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  134388             :        */
  134389             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  134390             :       /* */
  134391             : 
  134392             : 
  134393             :      public:
  134394             :       /* name Memory Allocation Functions
  134395             :           \brief Memory allocations functions ... incomplete-documentation
  134396             : 
  134397             :           These functions have been made public as part of the design, but they are suggested for internal use 
  134398             :           or by particularly knowledgable users for specialized tools or applications.
  134399             :        */
  134400             :       /* */
  134401             : 
  134402             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  134403             : 
  134404             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  134405             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  134406             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  134407             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  134408             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  134409             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  134410             :           being used with the AST File I/O mechanism.
  134411             :        */
  134412             :           virtual bool isInMemoryPool() override;
  134413             : 
  134414             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  134415             : 
  134416             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  134417             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  134418             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  134419             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  134420             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  134421             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  134422             :           being used with the AST File I/O mechanism.
  134423             :        */
  134424             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  134425             : 
  134426             :       // DQ (4/30/2006): Modified to be a const function.
  134427             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  134428             : 
  134429             :           This functions is part of general support for many possible tools to operate 
  134430             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  134431             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  134432             :           less than the set of pointers used by the AST file I/O. This is part of
  134433             :           work implemented by Andreas, and support tools such as the AST graph generation.
  134434             : 
  134435             :           \warning This function can return unexpected data members and thus the 
  134436             :                    order and the number of elements is unpredicable and subject 
  134437             :                    to change.
  134438             : 
  134439             :           \returns STL vector of pairs of SgNode* and strings
  134440             :        */
  134441             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  134442             : 
  134443             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  134444             : 
  134445             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  134446             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  134447             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  134448             : 
  134449             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  134450             :                    and subject to change.
  134451             :        */
  134452             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  134453             : 
  134454             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  134455             : 
  134456             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  134457             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  134458             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  134459             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  134460             : 
  134461             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  134462             : 
  134463             :           \returns long
  134464             :        */
  134465             :           virtual long getChildIndex( SgNode* childNode ) const override;
  134466             : 
  134467             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  134468             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  134469             :       /* \brief Constructor for use by AST File I/O Mechanism
  134470             : 
  134471             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  134472             :           which obtained via fast binary file I/O from disk.
  134473             :        */
  134474             :        // SgForAllStatement( SgForAllStatementStorageClass& source );
  134475             : 
  134476             : 
  134477             : 
  134478             : 
  134479             : 
  134480             :  // JH (10/24/2005): methods added to support the ast file IO
  134481             :     private:
  134482             : 
  134483             :       /* name AST Memory Allocation Support Functions
  134484             :           \brief Memory allocations support....
  134485             : 
  134486             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  134487             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  134488             :           and support the AST File I/O Mechanism.
  134489             :        */
  134490             :       /* */
  134491             : 
  134492             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  134493             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  134494             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  134495             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  134496             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  134497             :           a correspinding one in the AST_FILE_IO class!
  134498             :        */
  134499             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  134500             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  134501             :       /* \brief Typedef used for low level memory access.
  134502             :        */
  134503             :        // typedef unsigned char* TestType;
  134504             : 
  134505             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  134506             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  134507             :       /* \brief Typedef used to hold memory addresses as values.
  134508             :        */
  134509             :        // typedef unsigned long  AddressType;
  134510             : 
  134511             : 
  134512             : 
  134513             :        // necessary, to have direct access to the p_freepointer and the private methods !
  134514             :       /*! \brief friend class declaration to support AST File I/O */
  134515             :           friend class AST_FILE_IO;
  134516             : 
  134517             :       /*! \brief friend class declaration to support AST File I/O */
  134518             :           friend class SgForAllStatementStorageClass;
  134519             : 
  134520             :       /*! \brief friend class declaration to support AST File I/O */
  134521             :           friend class AstSpecificDataManagingClass;
  134522             : 
  134523             :       /*! \brief friend class declaration to support AST File I/O */
  134524             :           friend class AstSpecificDataManagingClassStorageClass;
  134525             :     public:
  134526             :       /*! \brief IR node constructor to support AST File I/O */
  134527             :           SgForAllStatement( const SgForAllStatementStorageClass& source );
  134528             : 
  134529             :  // private: // JJW hack
  134530             :        /*
  134531             :           name AST Memory Allocation Support Variables
  134532             :           Memory allocations support variables 
  134533             : 
  134534             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  134535             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  134536             :           and support the AST File I/O Mechanism.
  134537             :        */
  134538             :       /* */
  134539             : 
  134540             :     public:
  134541             : 
  134542             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  134543             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  134544             :       // virtual SgNode* addRegExpAttribute();
  134545             :       /*! \brief Support for AST matching using regular expression.
  134546             : 
  134547             :           This support is incomplete and the subject of current research to define 
  134548             :           RegEx trees to support inexact matching.
  134549             :        */
  134550             :           SgForAllStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  134551             : 
  134552             : // *** COMMON CODE SECTION ENDS HERE ***
  134553             : 
  134554             : 
  134555             : // End of memberFunctionString
  134556             : // Start of memberFunctionString
  134557             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  134558             : 
  134559             :      // the generated cast function
  134560             :      // friend ROSE_DLL_API SgForAllStatement* isSgForAllStatement ( SgNode* s );
  134561             : 
  134562             :           typedef SgScopeStatement base_node_type;
  134563             : 
  134564             : 
  134565             : // End of memberFunctionString
  134566             : // Start of memberFunctionString
  134567             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  134568             : 
  134569             :           void post_construction_initialization() override;
  134570             : 
  134571             : 
  134572             : // End of memberFunctionString
  134573             : 
  134574             :      public: 
  134575             :          SgExprListExp* get_forall_header() const;
  134576             :          void set_forall_header(SgExprListExp* forall_header);
  134577             : 
  134578             :      public: 
  134579             :          SgBasicBlock* get_body() const;
  134580             :          void set_body(SgBasicBlock* body);
  134581             : 
  134582             :      public: 
  134583             :          bool get_has_end_statement() const;
  134584             :          void set_has_end_statement(bool has_end_statement);
  134585             : 
  134586             :      public: 
  134587             :          std::string get_string_label() const;
  134588             :          void set_string_label(std::string string_label);
  134589             : 
  134590             :      public: 
  134591             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  134592             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  134593             : 
  134594             :      public: 
  134595             :          SgForAllStatement::forall_statement_kind_enum get_forall_statement_kind() const;
  134596             :          void set_forall_statement_kind(SgForAllStatement::forall_statement_kind_enum forall_statement_kind);
  134597             : 
  134598             : 
  134599             :      public: 
  134600             :          virtual ~SgForAllStatement();
  134601             : 
  134602             : 
  134603             :      public: 
  134604             :          SgForAllStatement(Sg_File_Info* startOfConstruct , SgExprListExp* forall_header = NULL, SgBasicBlock* body = NULL); 
  134605             :          SgForAllStatement(SgExprListExp* forall_header, SgBasicBlock* body); 
  134606             : 
  134607             :     protected:
  134608             : // Start of memberFunctionString
  134609             : SgExprListExp* p_forall_header;
  134610             :           
  134611             : // End of memberFunctionString
  134612             : // Start of memberFunctionString
  134613             : SgBasicBlock* p_body;
  134614             :           
  134615             : // End of memberFunctionString
  134616             : // Start of memberFunctionString
  134617             : bool p_has_end_statement;
  134618             :           
  134619             : // End of memberFunctionString
  134620             : // Start of memberFunctionString
  134621             : std::string p_string_label;
  134622             :           
  134623             : // End of memberFunctionString
  134624             : // Start of memberFunctionString
  134625             : SgLabelRefExp* p_end_numeric_label;
  134626             :           
  134627             : // End of memberFunctionString
  134628             : // Start of memberFunctionString
  134629             : SgForAllStatement::forall_statement_kind_enum p_forall_statement_kind;
  134630             :           
  134631             : // End of memberFunctionString
  134632             : 
  134633             :     friend struct Rose::Traits::generated::describe_node_t<SgForAllStatement>;
  134634             :     friend struct Rose::Traits::generated::describe_field_t<SgForAllStatement, SgExprListExp*,&SgForAllStatement::p_forall_header>;
  134635             :     friend struct Rose::Traits::generated::describe_field_t<SgForAllStatement, SgBasicBlock*,&SgForAllStatement::p_body>;
  134636             :     friend struct Rose::Traits::generated::describe_field_t<SgForAllStatement, bool,&SgForAllStatement::p_has_end_statement>;
  134637             :     friend struct Rose::Traits::generated::describe_field_t<SgForAllStatement, std::string,&SgForAllStatement::p_string_label>;
  134638             :     friend struct Rose::Traits::generated::describe_field_t<SgForAllStatement, SgLabelRefExp*,&SgForAllStatement::p_end_numeric_label>;
  134639             :     friend struct Rose::Traits::generated::describe_field_t<SgForAllStatement, SgForAllStatement::forall_statement_kind_enum,&SgForAllStatement::p_forall_statement_kind>;
  134640             : 
  134641             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134642             : 
  134643             : 
  134644             :    };
  134645             : #endif
  134646             : 
  134647             : // postdeclarations for SgForAllStatement
  134648             : 
  134649             : /* #line 134650 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134650             : 
  134651             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  134652             : 
  134653             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134654             : 
  134655             : 
  134656             : /* #line 134657 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134657             : 
  134658             : 
  134659             : 
  134660             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134661             : 
  134662             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  134663             : //      This code is automatically generated for each 
  134664             : //      terminal and non-terminal within the defined 
  134665             : //      grammar.  There is a simple way to change the 
  134666             : //      code to fix bugs etc.  See the ROSE README file
  134667             : //      for directions.
  134668             : 
  134669             : // tps: (02/22/2010): Adding DLL export requirements
  134670             : #include "rosedll.h"
  134671             : 
  134672             : // predeclarations for SgUpcForAllStatement
  134673             : 
  134674             : /* #line 134675 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134675             : 
  134676             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  134677             : 
  134678             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  134679             : 
  134680             : #if 1
  134681             : // Class Definition for SgUpcForAllStatement
  134682             : class ROSE_DLL_API SgUpcForAllStatement  : public SgScopeStatement
  134683             :    {
  134684             :      public:
  134685             : 
  134686             : 
  134687             : /* #line 134688 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  134688             : 
  134689             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  134690             : // Start of memberFunctionString
  134691             : /* #line 3869 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  134692             : 
  134693             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  134694             : 
  134695             :      public:
  134696             :           virtual void append_init_stmt  ( SgStatement* element );
  134697             :           virtual void prepend_init_stmt ( SgStatement* element );
  134698             : 
  134699             :      public:
  134700             :        // New functions added
  134701             :        // void append_init_stmt  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  134702             :        // void prepend_init_stmt ( const SgStatementPtrList::iterator & list, SgStatement* element );
  134703             : 
  134704             :        // void insert_init_stmt  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  134705             : 
  134706             : 
  134707             :      public:
  134708             : 
  134709             : 
  134710             : 
  134711             : 
  134712             :        SgUpcForAllStatement(SgForInitStatement *, SgStatement *, SgExpression *, SgExpression *, SgStatement * = NULL);
  134713             : 
  134714             :        // Liao, 6/17/2008 Copied from HEADER_FOR_STATEMENT_START
  134715             :          SgStatementPtrList & get_init_stmt();
  134716             :           const SgStatementPtrList & get_init_stmt() const;
  134717             :        protected:
  134718             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  134719             : 
  134720             :        public:
  134721             : 
  134722             :        // DQ (11/25/2005): Support for previous interface function.
  134723             :           SgExpression*     get_test_expr () const                                 ROSE_DEPRECATED_FUNCTION;
  134724             :           void              set_test_expr (SgExpression* expression )              ROSE_DEPRECATED_FUNCTION;
  134725             : 
  134726             :           int replace_expression(SgExpression * original_expression, SgExpression * new_expression ) override;
  134727             : 
  134728             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  134729             :           virtual unsigned int cfgIndexForEnd() const override;
  134730             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  134731             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  134732             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  134733             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  134734             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  134735             : #endif
  134736             : 
  134737             :          // DQ (2/22/2007): Added for uniform support of mangled names
  134738             :           virtual SgName get_mangled_name() const override;
  134739             : 
  134740             : 
  134741             : 
  134742             : // End of memberFunctionString
  134743             : // Start of memberFunctionString
  134744             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  134745             : 
  134746             : // *** COMMON CODE SECTION BEGINS HERE ***
  134747             : 
  134748             :     public:
  134749             : 
  134750             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  134751             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  134752             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  134753             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  134754             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  134755             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  134756             : 
  134757             :       /*! \brief returns a string representing the class name */
  134758             :           virtual std::string class_name() const override;
  134759             : 
  134760             :       /*! \brief returns new style SageIII enum values */
  134761             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  134762             : 
  134763             :       /*! \brief static variant value */
  134764             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  134765             :        // static const VariantT static_variant = V_SgUpcForAllStatement;
  134766             :           enum { static_variant = V_SgUpcForAllStatement };
  134767             : 
  134768             :        /* the generated cast function */
  134769             :       /*! \brief Casts pointer from base class to derived class */
  134770             :           ROSE_DLL_API friend       SgUpcForAllStatement* isSgUpcForAllStatement(       SgNode * s );
  134771             : 
  134772             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  134773             :           ROSE_DLL_API friend const SgUpcForAllStatement* isSgUpcForAllStatement( const SgNode * s );
  134774             : 
  134775             :      // ******************************************
  134776             :      // * Memory Pool / New / Delete
  134777             :      // ******************************************
  134778             : 
  134779             :      public:
  134780             :           /// \private
  134781             :           static const unsigned pool_size; //
  134782             :           /// \private
  134783             :           static std::vector<unsigned char *> pools; //
  134784             :           /// \private
  134785             :           static SgUpcForAllStatement * next_node; // 
  134786             : 
  134787             :           /// \private
  134788             :           static unsigned long initializeStorageClassArray(SgUpcForAllStatementStorageClass *); //
  134789             : 
  134790             :           /// \private
  134791             :           static void clearMemoryPool(); //
  134792             :           static void deleteMemoryPool(); //
  134793             : 
  134794             :           /// \private
  134795             :           static void extendMemoryPoolForFileIO(); //
  134796             : 
  134797             :           /// \private
  134798             :           static SgUpcForAllStatement * getPointerFromGlobalIndex(unsigned long); //
  134799             :           /// \private
  134800             :           static SgUpcForAllStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  134801             : 
  134802             :           /// \private
  134803             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  134804             :           /// \private
  134805             :           static void resetValidFreepointers(); //
  134806             :           /// \private
  134807             :           static unsigned long getNumberOfLastValidPointer(); //
  134808             : 
  134809             : 
  134810             : #if defined(INLINE_FUNCTIONS)
  134811             :       /*! \brief returns pointer to newly allocated IR node */
  134812             :           inline void *operator new (size_t size);
  134813             : #else
  134814             :       /*! \brief returns pointer to newly allocated IR node */
  134815             :           void *operator new (size_t size);
  134816             : #endif
  134817             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  134818             :           void operator delete (void* pointer, size_t size);
  134819             : 
  134820             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  134821           0 :           void operator delete (void* pointer)
  134822             :              {
  134823             :             // This is the generated delete operator...
  134824           0 :                SgUpcForAllStatement::operator delete (pointer,sizeof(SgUpcForAllStatement));
  134825             :              }
  134826             : 
  134827             :       /*! \brief Returns the total number of IR nodes of this type */
  134828             :           static size_t numberOfNodes();
  134829             : 
  134830             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  134831             :           static size_t memoryUsage();
  134832             : 
  134833             :       // End of scope which started in IR nodes specific code 
  134834             :       /* */
  134835             : 
  134836             :       /* name Internal Functions
  134837             :           \brief Internal functions ... incomplete-documentation
  134838             : 
  134839             :           These functions have been made public as part of the design, but they are suggested for internal use 
  134840             :           or by particularly knowledgeable users for specialized tools or applications.
  134841             : 
  134842             :           \internal We could not make these private because they are required by user for special purposes. And 
  134843             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  134844             :          
  134845             :        */
  134846             : 
  134847             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  134848             :        // overridden in every class by *generated* implementation
  134849             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  134850             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  134851             :        // MS: 06/28/02 container of names of variables or container indices 
  134852             :        // used used in the traversal to access AST successor nodes
  134853             :        // overridden in every class by *generated* implementation
  134854             :       /*! \brief container of names of variables or container indices used used in the traversal
  134855             :           to access AST successor nodes overridden in every class by *generated* implementation */
  134856             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  134857             : 
  134858             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  134859             :        // than all the vector copies. The implementation for these functions is generated for each class.
  134860             :       /*! \brief return number of children in the traversal successor list */
  134861             :           virtual size_t get_numberOfTraversalSuccessors() override;
  134862             :       /*! \brief index-based access to traversal successors by index number */
  134863             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  134864             :       /*! \brief index-based access to traversal successors by child node */
  134865             :           virtual size_t get_childIndex(SgNode *child) override;
  134866             : 
  134867             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  134868             :        // MS: 08/16/2002 method for generating RTI information
  134869             :       /*! \brief return C++ Runtime-Time-Information */
  134870             :           virtual RTIReturnType roseRTI() override;
  134871             : #endif
  134872             :       /* */
  134873             : 
  134874             : 
  134875             : 
  134876             :       /* name Deprecated Functions
  134877             :           \brief Deprecated functions ... incomplete-documentation
  134878             : 
  134879             :           These functions have been deprecated from use.
  134880             :        */
  134881             :       /* */
  134882             : 
  134883             :       /*! returns a C style string (char*) representing the class name */
  134884             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  134885             : 
  134886             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  134887             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  134888             : #if 0
  134889             :       /*! returns old style Sage II enum values */
  134890             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  134891             :       /*! returns old style Sage II enum values */
  134892             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  134893             : #endif
  134894             :       /* */
  134895             : 
  134896             : 
  134897             : 
  134898             : 
  134899             :      public:
  134900             :       /* name Traversal Support Functions
  134901             :           \brief Traversal support functions ... incomplete-documentation
  134902             : 
  134903             :           These functions have been made public as part of the design, but they are suggested for internal use 
  134904             :           or by particularly knowledgable users for specialized tools or applications.
  134905             :        */
  134906             :       /* */
  134907             : 
  134908             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  134909             :        // (inferior to ROSE traversal mechanism, experimental).
  134910             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  134911             :        */
  134912             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  134913             : 
  134914             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  134915             :       /*! \brief support for the classic visitor pattern done in GoF */
  134916             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  134917             : 
  134918             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  134919             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  134920             :        */
  134921             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  134922             : 
  134923             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  134924             :        */
  134925             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  134926             : 
  134927             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  134928             :        // This traversal helps support internal tools that call static member functions.
  134929             :        // note: this function operates on the memory pools.
  134930             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  134931             :        */
  134932             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  134933             :       /* */
  134934             : 
  134935             : 
  134936             :      public:
  134937             :       /* name Memory Allocation Functions
  134938             :           \brief Memory allocations functions ... incomplete-documentation
  134939             : 
  134940             :           These functions have been made public as part of the design, but they are suggested for internal use 
  134941             :           or by particularly knowledgable users for specialized tools or applications.
  134942             :        */
  134943             :       /* */
  134944             : 
  134945             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  134946             : 
  134947             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  134948             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  134949             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  134950             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  134951             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  134952             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  134953             :           being used with the AST File I/O mechanism.
  134954             :        */
  134955             :           virtual bool isInMemoryPool() override;
  134956             : 
  134957             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  134958             : 
  134959             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  134960             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  134961             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  134962             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  134963             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  134964             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  134965             :           being used with the AST File I/O mechanism.
  134966             :        */
  134967             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  134968             : 
  134969             :       // DQ (4/30/2006): Modified to be a const function.
  134970             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  134971             : 
  134972             :           This functions is part of general support for many possible tools to operate 
  134973             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  134974             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  134975             :           less than the set of pointers used by the AST file I/O. This is part of
  134976             :           work implemented by Andreas, and support tools such as the AST graph generation.
  134977             : 
  134978             :           \warning This function can return unexpected data members and thus the 
  134979             :                    order and the number of elements is unpredicable and subject 
  134980             :                    to change.
  134981             : 
  134982             :           \returns STL vector of pairs of SgNode* and strings
  134983             :        */
  134984             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  134985             : 
  134986             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  134987             : 
  134988             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  134989             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  134990             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  134991             : 
  134992             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  134993             :                    and subject to change.
  134994             :        */
  134995             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  134996             : 
  134997             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  134998             : 
  134999             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  135000             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  135001             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  135002             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  135003             : 
  135004             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  135005             : 
  135006             :           \returns long
  135007             :        */
  135008             :           virtual long getChildIndex( SgNode* childNode ) const override;
  135009             : 
  135010             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  135011             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  135012             :       /* \brief Constructor for use by AST File I/O Mechanism
  135013             : 
  135014             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  135015             :           which obtained via fast binary file I/O from disk.
  135016             :        */
  135017             :        // SgUpcForAllStatement( SgUpcForAllStatementStorageClass& source );
  135018             : 
  135019             : 
  135020             : 
  135021             : 
  135022             : 
  135023             :  // JH (10/24/2005): methods added to support the ast file IO
  135024             :     private:
  135025             : 
  135026             :       /* name AST Memory Allocation Support Functions
  135027             :           \brief Memory allocations support....
  135028             : 
  135029             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  135030             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  135031             :           and support the AST File I/O Mechanism.
  135032             :        */
  135033             :       /* */
  135034             : 
  135035             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  135036             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  135037             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  135038             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  135039             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  135040             :           a correspinding one in the AST_FILE_IO class!
  135041             :        */
  135042             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  135043             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  135044             :       /* \brief Typedef used for low level memory access.
  135045             :        */
  135046             :        // typedef unsigned char* TestType;
  135047             : 
  135048             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  135049             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  135050             :       /* \brief Typedef used to hold memory addresses as values.
  135051             :        */
  135052             :        // typedef unsigned long  AddressType;
  135053             : 
  135054             : 
  135055             : 
  135056             :        // necessary, to have direct access to the p_freepointer and the private methods !
  135057             :       /*! \brief friend class declaration to support AST File I/O */
  135058             :           friend class AST_FILE_IO;
  135059             : 
  135060             :       /*! \brief friend class declaration to support AST File I/O */
  135061             :           friend class SgUpcForAllStatementStorageClass;
  135062             : 
  135063             :       /*! \brief friend class declaration to support AST File I/O */
  135064             :           friend class AstSpecificDataManagingClass;
  135065             : 
  135066             :       /*! \brief friend class declaration to support AST File I/O */
  135067             :           friend class AstSpecificDataManagingClassStorageClass;
  135068             :     public:
  135069             :       /*! \brief IR node constructor to support AST File I/O */
  135070             :           SgUpcForAllStatement( const SgUpcForAllStatementStorageClass& source );
  135071             : 
  135072             :  // private: // JJW hack
  135073             :        /*
  135074             :           name AST Memory Allocation Support Variables
  135075             :           Memory allocations support variables 
  135076             : 
  135077             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  135078             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  135079             :           and support the AST File I/O Mechanism.
  135080             :        */
  135081             :       /* */
  135082             : 
  135083             :     public:
  135084             : 
  135085             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  135086             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  135087             :       // virtual SgNode* addRegExpAttribute();
  135088             :       /*! \brief Support for AST matching using regular expression.
  135089             : 
  135090             :           This support is incomplete and the subject of current research to define 
  135091             :           RegEx trees to support inexact matching.
  135092             :        */
  135093             :           SgUpcForAllStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  135094             : 
  135095             : // *** COMMON CODE SECTION ENDS HERE ***
  135096             : 
  135097             : 
  135098             : // End of memberFunctionString
  135099             : // Start of memberFunctionString
  135100             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  135101             : 
  135102             :      // the generated cast function
  135103             :      // friend ROSE_DLL_API SgUpcForAllStatement* isSgUpcForAllStatement ( SgNode* s );
  135104             : 
  135105             :           typedef SgScopeStatement base_node_type;
  135106             : 
  135107             : 
  135108             : // End of memberFunctionString
  135109             : // Start of memberFunctionString
  135110             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  135111             : 
  135112             :           void post_construction_initialization() override;
  135113             : 
  135114             : 
  135115             : // End of memberFunctionString
  135116             : 
  135117             :      public: 
  135118             :          SgForInitStatement* get_for_init_stmt() const;
  135119             :          void set_for_init_stmt(SgForInitStatement* for_init_stmt);
  135120             : 
  135121             :      public: 
  135122             :          SgStatement* get_test() const;
  135123             :          void set_test(SgStatement* test);
  135124             : 
  135125             :      public: 
  135126             :          SgExpression* get_increment() const;
  135127             :          void set_increment(SgExpression* increment);
  135128             : 
  135129             :      public: 
  135130             :          SgExpression* get_affinity() const;
  135131             :          void set_affinity(SgExpression* affinity);
  135132             : 
  135133             :      public: 
  135134             :          SgStatement* get_loop_body() const;
  135135             :          void set_loop_body(SgStatement* loop_body);
  135136             : 
  135137             : 
  135138             :      public: 
  135139             :          virtual ~SgUpcForAllStatement();
  135140             : 
  135141             : 
  135142             :      public: 
  135143             :          SgUpcForAllStatement(Sg_File_Info* startOfConstruct , SgStatement* test = NULL, SgExpression* increment = NULL, SgExpression* affinity = NULL, SgStatement* loop_body = NULL); 
  135144             :          SgUpcForAllStatement(SgStatement* test, SgExpression* increment, SgExpression* affinity, SgStatement* loop_body); 
  135145             : 
  135146             :     protected:
  135147             : // Start of memberFunctionString
  135148             : SgForInitStatement* p_for_init_stmt;
  135149             :           
  135150             : // End of memberFunctionString
  135151             : // Start of memberFunctionString
  135152             : SgStatement* p_test;
  135153             :           
  135154             : // End of memberFunctionString
  135155             : // Start of memberFunctionString
  135156             : SgExpression* p_increment;
  135157             :           
  135158             : // End of memberFunctionString
  135159             : // Start of memberFunctionString
  135160             : SgExpression* p_affinity;
  135161             :           
  135162             : // End of memberFunctionString
  135163             : // Start of memberFunctionString
  135164             : SgStatement* p_loop_body;
  135165             :           
  135166             : // End of memberFunctionString
  135167             : 
  135168             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcForAllStatement>;
  135169             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcForAllStatement, SgForInitStatement*,&SgUpcForAllStatement::p_for_init_stmt>;
  135170             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcForAllStatement, SgStatement*,&SgUpcForAllStatement::p_test>;
  135171             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcForAllStatement, SgExpression*,&SgUpcForAllStatement::p_increment>;
  135172             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcForAllStatement, SgExpression*,&SgUpcForAllStatement::p_affinity>;
  135173             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcForAllStatement, SgStatement*,&SgUpcForAllStatement::p_loop_body>;
  135174             : 
  135175             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135176             : 
  135177             : 
  135178             :    };
  135179             : #endif
  135180             : 
  135181             : // postdeclarations for SgUpcForAllStatement
  135182             : 
  135183             : /* #line 135184 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135184             : 
  135185             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  135186             : 
  135187             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135188             : 
  135189             : 
  135190             : /* #line 135191 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135191             : 
  135192             : 
  135193             : 
  135194             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135195             : 
  135196             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  135197             : //      This code is automatically generated for each 
  135198             : //      terminal and non-terminal within the defined 
  135199             : //      grammar.  There is a simple way to change the 
  135200             : //      code to fix bugs etc.  See the ROSE README file
  135201             : //      for directions.
  135202             : 
  135203             : // tps: (02/22/2010): Adding DLL export requirements
  135204             : #include "rosedll.h"
  135205             : 
  135206             : // predeclarations for SgCAFWithTeamStatement
  135207             : 
  135208             : /* #line 135209 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135209             : 
  135210             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  135211             : 
  135212             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135213             : 
  135214             : #if 1
  135215             : // Class Definition for SgCAFWithTeamStatement
  135216             : class ROSE_DLL_API SgCAFWithTeamStatement  : public SgScopeStatement
  135217             :    {
  135218             :      public:
  135219             : 
  135220             : 
  135221             : /* #line 135222 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135222             : 
  135223             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  135224             : // Start of memberFunctionString
  135225             : /* #line 19561 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  135226             : 
  135227             : 
  135228             : 
  135229             : 
  135230             : // End of memberFunctionString
  135231             : // Start of memberFunctionString
  135232             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  135233             : 
  135234             : // *** COMMON CODE SECTION BEGINS HERE ***
  135235             : 
  135236             :     public:
  135237             : 
  135238             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  135239             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  135240             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  135241             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  135242             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  135243             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  135244             : 
  135245             :       /*! \brief returns a string representing the class name */
  135246             :           virtual std::string class_name() const override;
  135247             : 
  135248             :       /*! \brief returns new style SageIII enum values */
  135249             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  135250             : 
  135251             :       /*! \brief static variant value */
  135252             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  135253             :        // static const VariantT static_variant = V_SgCAFWithTeamStatement;
  135254             :           enum { static_variant = V_SgCAFWithTeamStatement };
  135255             : 
  135256             :        /* the generated cast function */
  135257             :       /*! \brief Casts pointer from base class to derived class */
  135258             :           ROSE_DLL_API friend       SgCAFWithTeamStatement* isSgCAFWithTeamStatement(       SgNode * s );
  135259             : 
  135260             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  135261             :           ROSE_DLL_API friend const SgCAFWithTeamStatement* isSgCAFWithTeamStatement( const SgNode * s );
  135262             : 
  135263             :      // ******************************************
  135264             :      // * Memory Pool / New / Delete
  135265             :      // ******************************************
  135266             : 
  135267             :      public:
  135268             :           /// \private
  135269             :           static const unsigned pool_size; //
  135270             :           /// \private
  135271             :           static std::vector<unsigned char *> pools; //
  135272             :           /// \private
  135273             :           static SgCAFWithTeamStatement * next_node; // 
  135274             : 
  135275             :           /// \private
  135276             :           static unsigned long initializeStorageClassArray(SgCAFWithTeamStatementStorageClass *); //
  135277             : 
  135278             :           /// \private
  135279             :           static void clearMemoryPool(); //
  135280             :           static void deleteMemoryPool(); //
  135281             : 
  135282             :           /// \private
  135283             :           static void extendMemoryPoolForFileIO(); //
  135284             : 
  135285             :           /// \private
  135286             :           static SgCAFWithTeamStatement * getPointerFromGlobalIndex(unsigned long); //
  135287             :           /// \private
  135288             :           static SgCAFWithTeamStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  135289             : 
  135290             :           /// \private
  135291             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  135292             :           /// \private
  135293             :           static void resetValidFreepointers(); //
  135294             :           /// \private
  135295             :           static unsigned long getNumberOfLastValidPointer(); //
  135296             : 
  135297             : 
  135298             : #if defined(INLINE_FUNCTIONS)
  135299             :       /*! \brief returns pointer to newly allocated IR node */
  135300             :           inline void *operator new (size_t size);
  135301             : #else
  135302             :       /*! \brief returns pointer to newly allocated IR node */
  135303             :           void *operator new (size_t size);
  135304             : #endif
  135305             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  135306             :           void operator delete (void* pointer, size_t size);
  135307             : 
  135308             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  135309           0 :           void operator delete (void* pointer)
  135310             :              {
  135311             :             // This is the generated delete operator...
  135312           0 :                SgCAFWithTeamStatement::operator delete (pointer,sizeof(SgCAFWithTeamStatement));
  135313             :              }
  135314             : 
  135315             :       /*! \brief Returns the total number of IR nodes of this type */
  135316             :           static size_t numberOfNodes();
  135317             : 
  135318             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  135319             :           static size_t memoryUsage();
  135320             : 
  135321             :       // End of scope which started in IR nodes specific code 
  135322             :       /* */
  135323             : 
  135324             :       /* name Internal Functions
  135325             :           \brief Internal functions ... incomplete-documentation
  135326             : 
  135327             :           These functions have been made public as part of the design, but they are suggested for internal use 
  135328             :           or by particularly knowledgeable users for specialized tools or applications.
  135329             : 
  135330             :           \internal We could not make these private because they are required by user for special purposes. And 
  135331             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  135332             :          
  135333             :        */
  135334             : 
  135335             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  135336             :        // overridden in every class by *generated* implementation
  135337             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  135338             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  135339             :        // MS: 06/28/02 container of names of variables or container indices 
  135340             :        // used used in the traversal to access AST successor nodes
  135341             :        // overridden in every class by *generated* implementation
  135342             :       /*! \brief container of names of variables or container indices used used in the traversal
  135343             :           to access AST successor nodes overridden in every class by *generated* implementation */
  135344             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  135345             : 
  135346             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  135347             :        // than all the vector copies. The implementation for these functions is generated for each class.
  135348             :       /*! \brief return number of children in the traversal successor list */
  135349             :           virtual size_t get_numberOfTraversalSuccessors() override;
  135350             :       /*! \brief index-based access to traversal successors by index number */
  135351             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  135352             :       /*! \brief index-based access to traversal successors by child node */
  135353             :           virtual size_t get_childIndex(SgNode *child) override;
  135354             : 
  135355             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  135356             :        // MS: 08/16/2002 method for generating RTI information
  135357             :       /*! \brief return C++ Runtime-Time-Information */
  135358             :           virtual RTIReturnType roseRTI() override;
  135359             : #endif
  135360             :       /* */
  135361             : 
  135362             : 
  135363             : 
  135364             :       /* name Deprecated Functions
  135365             :           \brief Deprecated functions ... incomplete-documentation
  135366             : 
  135367             :           These functions have been deprecated from use.
  135368             :        */
  135369             :       /* */
  135370             : 
  135371             :       /*! returns a C style string (char*) representing the class name */
  135372             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  135373             : 
  135374             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  135375             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  135376             : #if 0
  135377             :       /*! returns old style Sage II enum values */
  135378             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  135379             :       /*! returns old style Sage II enum values */
  135380             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  135381             : #endif
  135382             :       /* */
  135383             : 
  135384             : 
  135385             : 
  135386             : 
  135387             :      public:
  135388             :       /* name Traversal Support Functions
  135389             :           \brief Traversal support functions ... incomplete-documentation
  135390             : 
  135391             :           These functions have been made public as part of the design, but they are suggested for internal use 
  135392             :           or by particularly knowledgable users for specialized tools or applications.
  135393             :        */
  135394             :       /* */
  135395             : 
  135396             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  135397             :        // (inferior to ROSE traversal mechanism, experimental).
  135398             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  135399             :        */
  135400             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  135401             : 
  135402             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  135403             :       /*! \brief support for the classic visitor pattern done in GoF */
  135404             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  135405             : 
  135406             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  135407             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  135408             :        */
  135409             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  135410             : 
  135411             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  135412             :        */
  135413             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  135414             : 
  135415             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  135416             :        // This traversal helps support internal tools that call static member functions.
  135417             :        // note: this function operates on the memory pools.
  135418             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  135419             :        */
  135420             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  135421             :       /* */
  135422             : 
  135423             : 
  135424             :      public:
  135425             :       /* name Memory Allocation Functions
  135426             :           \brief Memory allocations functions ... incomplete-documentation
  135427             : 
  135428             :           These functions have been made public as part of the design, but they are suggested for internal use 
  135429             :           or by particularly knowledgable users for specialized tools or applications.
  135430             :        */
  135431             :       /* */
  135432             : 
  135433             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  135434             : 
  135435             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  135436             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  135437             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  135438             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  135439             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  135440             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  135441             :           being used with the AST File I/O mechanism.
  135442             :        */
  135443             :           virtual bool isInMemoryPool() override;
  135444             : 
  135445             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  135446             : 
  135447             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  135448             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  135449             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  135450             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  135451             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  135452             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  135453             :           being used with the AST File I/O mechanism.
  135454             :        */
  135455             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  135456             : 
  135457             :       // DQ (4/30/2006): Modified to be a const function.
  135458             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  135459             : 
  135460             :           This functions is part of general support for many possible tools to operate 
  135461             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  135462             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  135463             :           less than the set of pointers used by the AST file I/O. This is part of
  135464             :           work implemented by Andreas, and support tools such as the AST graph generation.
  135465             : 
  135466             :           \warning This function can return unexpected data members and thus the 
  135467             :                    order and the number of elements is unpredicable and subject 
  135468             :                    to change.
  135469             : 
  135470             :           \returns STL vector of pairs of SgNode* and strings
  135471             :        */
  135472             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  135473             : 
  135474             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  135475             : 
  135476             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  135477             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  135478             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  135479             : 
  135480             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  135481             :                    and subject to change.
  135482             :        */
  135483             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  135484             : 
  135485             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  135486             : 
  135487             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  135488             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  135489             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  135490             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  135491             : 
  135492             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  135493             : 
  135494             :           \returns long
  135495             :        */
  135496             :           virtual long getChildIndex( SgNode* childNode ) const override;
  135497             : 
  135498             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  135499             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  135500             :       /* \brief Constructor for use by AST File I/O Mechanism
  135501             : 
  135502             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  135503             :           which obtained via fast binary file I/O from disk.
  135504             :        */
  135505             :        // SgCAFWithTeamStatement( SgCAFWithTeamStatementStorageClass& source );
  135506             : 
  135507             : 
  135508             : 
  135509             : 
  135510             : 
  135511             :  // JH (10/24/2005): methods added to support the ast file IO
  135512             :     private:
  135513             : 
  135514             :       /* name AST Memory Allocation Support Functions
  135515             :           \brief Memory allocations support....
  135516             : 
  135517             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  135518             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  135519             :           and support the AST File I/O Mechanism.
  135520             :        */
  135521             :       /* */
  135522             : 
  135523             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  135524             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  135525             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  135526             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  135527             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  135528             :           a correspinding one in the AST_FILE_IO class!
  135529             :        */
  135530             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  135531             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  135532             :       /* \brief Typedef used for low level memory access.
  135533             :        */
  135534             :        // typedef unsigned char* TestType;
  135535             : 
  135536             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  135537             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  135538             :       /* \brief Typedef used to hold memory addresses as values.
  135539             :        */
  135540             :        // typedef unsigned long  AddressType;
  135541             : 
  135542             : 
  135543             : 
  135544             :        // necessary, to have direct access to the p_freepointer and the private methods !
  135545             :       /*! \brief friend class declaration to support AST File I/O */
  135546             :           friend class AST_FILE_IO;
  135547             : 
  135548             :       /*! \brief friend class declaration to support AST File I/O */
  135549             :           friend class SgCAFWithTeamStatementStorageClass;
  135550             : 
  135551             :       /*! \brief friend class declaration to support AST File I/O */
  135552             :           friend class AstSpecificDataManagingClass;
  135553             : 
  135554             :       /*! \brief friend class declaration to support AST File I/O */
  135555             :           friend class AstSpecificDataManagingClassStorageClass;
  135556             :     public:
  135557             :       /*! \brief IR node constructor to support AST File I/O */
  135558             :           SgCAFWithTeamStatement( const SgCAFWithTeamStatementStorageClass& source );
  135559             : 
  135560             :  // private: // JJW hack
  135561             :        /*
  135562             :           name AST Memory Allocation Support Variables
  135563             :           Memory allocations support variables 
  135564             : 
  135565             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  135566             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  135567             :           and support the AST File I/O Mechanism.
  135568             :        */
  135569             :       /* */
  135570             : 
  135571             :     public:
  135572             : 
  135573             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  135574             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  135575             :       // virtual SgNode* addRegExpAttribute();
  135576             :       /*! \brief Support for AST matching using regular expression.
  135577             : 
  135578             :           This support is incomplete and the subject of current research to define 
  135579             :           RegEx trees to support inexact matching.
  135580             :        */
  135581             :           SgCAFWithTeamStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  135582             : 
  135583             : // *** COMMON CODE SECTION ENDS HERE ***
  135584             : 
  135585             : 
  135586             : // End of memberFunctionString
  135587             : // Start of memberFunctionString
  135588             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  135589             : 
  135590             :      // the generated cast function
  135591             :      // friend ROSE_DLL_API SgCAFWithTeamStatement* isSgCAFWithTeamStatement ( SgNode* s );
  135592             : 
  135593             :           typedef SgScopeStatement base_node_type;
  135594             : 
  135595             : 
  135596             : // End of memberFunctionString
  135597             : // Start of memberFunctionString
  135598             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  135599             : 
  135600             :           void post_construction_initialization() override;
  135601             : 
  135602             : 
  135603             : // End of memberFunctionString
  135604             : 
  135605             :      public: 
  135606             :          SgVarRefExp* get_teamId() const;
  135607             :          void set_teamId(SgVarRefExp* teamId);
  135608             : 
  135609             :      public: 
  135610             :          SgBasicBlock* get_body() const;
  135611             :          void set_body(SgBasicBlock* body);
  135612             : 
  135613             :      public: 
  135614             :          bool get_endHasTeamId() const;
  135615             :          void set_endHasTeamId(bool endHasTeamId);
  135616             : 
  135617             : 
  135618             :      public: 
  135619             :          virtual ~SgCAFWithTeamStatement();
  135620             : 
  135621             : 
  135622             :      public: 
  135623             :          SgCAFWithTeamStatement(Sg_File_Info* startOfConstruct , SgVarRefExp* teamId = NULL, SgBasicBlock* body = NULL); 
  135624             :          SgCAFWithTeamStatement(SgVarRefExp* teamId, SgBasicBlock* body); 
  135625             : 
  135626             :     protected:
  135627             : // Start of memberFunctionString
  135628             : SgVarRefExp* p_teamId;
  135629             :           
  135630             : // End of memberFunctionString
  135631             : // Start of memberFunctionString
  135632             : SgBasicBlock* p_body;
  135633             :           
  135634             : // End of memberFunctionString
  135635             : // Start of memberFunctionString
  135636             : bool p_endHasTeamId;
  135637             :           
  135638             : // End of memberFunctionString
  135639             : 
  135640             :     friend struct Rose::Traits::generated::describe_node_t<SgCAFWithTeamStatement>;
  135641             :     friend struct Rose::Traits::generated::describe_field_t<SgCAFWithTeamStatement, SgVarRefExp*,&SgCAFWithTeamStatement::p_teamId>;
  135642             :     friend struct Rose::Traits::generated::describe_field_t<SgCAFWithTeamStatement, SgBasicBlock*,&SgCAFWithTeamStatement::p_body>;
  135643             :     friend struct Rose::Traits::generated::describe_field_t<SgCAFWithTeamStatement, bool,&SgCAFWithTeamStatement::p_endHasTeamId>;
  135644             : 
  135645             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135646             : 
  135647             : 
  135648             :    };
  135649             : #endif
  135650             : 
  135651             : // postdeclarations for SgCAFWithTeamStatement
  135652             : 
  135653             : /* #line 135654 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135654             : 
  135655             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  135656             : 
  135657             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135658             : 
  135659             : 
  135660             : /* #line 135661 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135661             : 
  135662             : 
  135663             : 
  135664             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135665             : 
  135666             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  135667             : //      This code is automatically generated for each 
  135668             : //      terminal and non-terminal within the defined 
  135669             : //      grammar.  There is a simple way to change the 
  135670             : //      code to fix bugs etc.  See the ROSE README file
  135671             : //      for directions.
  135672             : 
  135673             : // tps: (02/22/2010): Adding DLL export requirements
  135674             : #include "rosedll.h"
  135675             : 
  135676             : // predeclarations for SgFunctionParameterScope
  135677             : 
  135678             : /* #line 135679 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135679             : 
  135680             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  135681             : 
  135682             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  135683             : 
  135684             : #if 1
  135685             : // Class Definition for SgFunctionParameterScope
  135686             : class ROSE_DLL_API SgFunctionParameterScope  : public SgScopeStatement
  135687             :    {
  135688             :      public:
  135689             : 
  135690             : 
  135691             : /* #line 135692 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  135692             : 
  135693             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  135694             : // Start of memberFunctionString
  135695             : /* #line 1497 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  135696             : 
  135697             : 
  135698             : // PP (06/01/20)
  135699             : SgName get_mangled_name() const override;
  135700             : 
  135701             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  135702             : 
  135703             :      public:
  135704             :           virtual void append_declaration  ( SgDeclarationStatement* element );
  135705             :           virtual void prepend_declaration ( SgDeclarationStatement* element );
  135706             : 
  135707             :      public:
  135708             :        // New functions added
  135709             :        // void append_declaration  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  135710             :        // void prepend_declaration ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  135711             : 
  135712             :        // void insert_declaration  ( const SgDeclarationStatementPtrList::iterator & list, SgDeclarationStatement* element );
  135713             : 
  135714             : 
  135715             :      public:
  135716             : 
  135717             : 
  135718             : 
  135719             : 
  135720             : // Rasmussen (09/24/2020): Finishing implementation of SgFunctionParameterScope for Jovial
  135721             :   protected:
  135722             :     virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  135723             :     virtual bool insert_child(SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false) override;
  135724             : 
  135725             : 
  135726             : 
  135727             : // End of memberFunctionString
  135728             : // Start of memberFunctionString
  135729             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  135730             : 
  135731             : // *** COMMON CODE SECTION BEGINS HERE ***
  135732             : 
  135733             :     public:
  135734             : 
  135735             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  135736             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  135737             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  135738             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  135739             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  135740             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  135741             : 
  135742             :       /*! \brief returns a string representing the class name */
  135743             :           virtual std::string class_name() const override;
  135744             : 
  135745             :       /*! \brief returns new style SageIII enum values */
  135746             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  135747             : 
  135748             :       /*! \brief static variant value */
  135749             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  135750             :        // static const VariantT static_variant = V_SgFunctionParameterScope;
  135751             :           enum { static_variant = V_SgFunctionParameterScope };
  135752             : 
  135753             :        /* the generated cast function */
  135754             :       /*! \brief Casts pointer from base class to derived class */
  135755             :           ROSE_DLL_API friend       SgFunctionParameterScope* isSgFunctionParameterScope(       SgNode * s );
  135756             : 
  135757             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  135758             :           ROSE_DLL_API friend const SgFunctionParameterScope* isSgFunctionParameterScope( const SgNode * s );
  135759             : 
  135760             :      // ******************************************
  135761             :      // * Memory Pool / New / Delete
  135762             :      // ******************************************
  135763             : 
  135764             :      public:
  135765             :           /// \private
  135766             :           static const unsigned pool_size; //
  135767             :           /// \private
  135768             :           static std::vector<unsigned char *> pools; //
  135769             :           /// \private
  135770             :           static SgFunctionParameterScope * next_node; // 
  135771             : 
  135772             :           /// \private
  135773             :           static unsigned long initializeStorageClassArray(SgFunctionParameterScopeStorageClass *); //
  135774             : 
  135775             :           /// \private
  135776             :           static void clearMemoryPool(); //
  135777             :           static void deleteMemoryPool(); //
  135778             : 
  135779             :           /// \private
  135780             :           static void extendMemoryPoolForFileIO(); //
  135781             : 
  135782             :           /// \private
  135783             :           static SgFunctionParameterScope * getPointerFromGlobalIndex(unsigned long); //
  135784             :           /// \private
  135785             :           static SgFunctionParameterScope * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  135786             : 
  135787             :           /// \private
  135788             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  135789             :           /// \private
  135790             :           static void resetValidFreepointers(); //
  135791             :           /// \private
  135792             :           static unsigned long getNumberOfLastValidPointer(); //
  135793             : 
  135794             : 
  135795             : #if defined(INLINE_FUNCTIONS)
  135796             :       /*! \brief returns pointer to newly allocated IR node */
  135797             :           inline void *operator new (size_t size);
  135798             : #else
  135799             :       /*! \brief returns pointer to newly allocated IR node */
  135800             :           void *operator new (size_t size);
  135801             : #endif
  135802             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  135803             :           void operator delete (void* pointer, size_t size);
  135804             : 
  135805             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  135806           0 :           void operator delete (void* pointer)
  135807             :              {
  135808             :             // This is the generated delete operator...
  135809           0 :                SgFunctionParameterScope::operator delete (pointer,sizeof(SgFunctionParameterScope));
  135810             :              }
  135811             : 
  135812             :       /*! \brief Returns the total number of IR nodes of this type */
  135813             :           static size_t numberOfNodes();
  135814             : 
  135815             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  135816             :           static size_t memoryUsage();
  135817             : 
  135818             :       // End of scope which started in IR nodes specific code 
  135819             :       /* */
  135820             : 
  135821             :       /* name Internal Functions
  135822             :           \brief Internal functions ... incomplete-documentation
  135823             : 
  135824             :           These functions have been made public as part of the design, but they are suggested for internal use 
  135825             :           or by particularly knowledgeable users for specialized tools or applications.
  135826             : 
  135827             :           \internal We could not make these private because they are required by user for special purposes. And 
  135828             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  135829             :          
  135830             :        */
  135831             : 
  135832             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  135833             :        // overridden in every class by *generated* implementation
  135834             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  135835             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  135836             :        // MS: 06/28/02 container of names of variables or container indices 
  135837             :        // used used in the traversal to access AST successor nodes
  135838             :        // overridden in every class by *generated* implementation
  135839             :       /*! \brief container of names of variables or container indices used used in the traversal
  135840             :           to access AST successor nodes overridden in every class by *generated* implementation */
  135841             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  135842             : 
  135843             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  135844             :        // than all the vector copies. The implementation for these functions is generated for each class.
  135845             :       /*! \brief return number of children in the traversal successor list */
  135846             :           virtual size_t get_numberOfTraversalSuccessors() override;
  135847             :       /*! \brief index-based access to traversal successors by index number */
  135848             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  135849             :       /*! \brief index-based access to traversal successors by child node */
  135850             :           virtual size_t get_childIndex(SgNode *child) override;
  135851             : 
  135852             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  135853             :        // MS: 08/16/2002 method for generating RTI information
  135854             :       /*! \brief return C++ Runtime-Time-Information */
  135855             :           virtual RTIReturnType roseRTI() override;
  135856             : #endif
  135857             :       /* */
  135858             : 
  135859             : 
  135860             : 
  135861             :       /* name Deprecated Functions
  135862             :           \brief Deprecated functions ... incomplete-documentation
  135863             : 
  135864             :           These functions have been deprecated from use.
  135865             :        */
  135866             :       /* */
  135867             : 
  135868             :       /*! returns a C style string (char*) representing the class name */
  135869             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  135870             : 
  135871             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  135872             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  135873             : #if 0
  135874             :       /*! returns old style Sage II enum values */
  135875             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  135876             :       /*! returns old style Sage II enum values */
  135877             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  135878             : #endif
  135879             :       /* */
  135880             : 
  135881             : 
  135882             : 
  135883             : 
  135884             :      public:
  135885             :       /* name Traversal Support Functions
  135886             :           \brief Traversal support functions ... incomplete-documentation
  135887             : 
  135888             :           These functions have been made public as part of the design, but they are suggested for internal use 
  135889             :           or by particularly knowledgable users for specialized tools or applications.
  135890             :        */
  135891             :       /* */
  135892             : 
  135893             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  135894             :        // (inferior to ROSE traversal mechanism, experimental).
  135895             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  135896             :        */
  135897             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  135898             : 
  135899             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  135900             :       /*! \brief support for the classic visitor pattern done in GoF */
  135901             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  135902             : 
  135903             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  135904             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  135905             :        */
  135906             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  135907             : 
  135908             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  135909             :        */
  135910             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  135911             : 
  135912             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  135913             :        // This traversal helps support internal tools that call static member functions.
  135914             :        // note: this function operates on the memory pools.
  135915             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  135916             :        */
  135917             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  135918             :       /* */
  135919             : 
  135920             : 
  135921             :      public:
  135922             :       /* name Memory Allocation Functions
  135923             :           \brief Memory allocations functions ... incomplete-documentation
  135924             : 
  135925             :           These functions have been made public as part of the design, but they are suggested for internal use 
  135926             :           or by particularly knowledgable users for specialized tools or applications.
  135927             :        */
  135928             :       /* */
  135929             : 
  135930             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  135931             : 
  135932             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  135933             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  135934             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  135935             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  135936             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  135937             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  135938             :           being used with the AST File I/O mechanism.
  135939             :        */
  135940             :           virtual bool isInMemoryPool() override;
  135941             : 
  135942             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  135943             : 
  135944             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  135945             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  135946             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  135947             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  135948             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  135949             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  135950             :           being used with the AST File I/O mechanism.
  135951             :        */
  135952             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  135953             : 
  135954             :       // DQ (4/30/2006): Modified to be a const function.
  135955             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  135956             : 
  135957             :           This functions is part of general support for many possible tools to operate 
  135958             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  135959             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  135960             :           less than the set of pointers used by the AST file I/O. This is part of
  135961             :           work implemented by Andreas, and support tools such as the AST graph generation.
  135962             : 
  135963             :           \warning This function can return unexpected data members and thus the 
  135964             :                    order and the number of elements is unpredicable and subject 
  135965             :                    to change.
  135966             : 
  135967             :           \returns STL vector of pairs of SgNode* and strings
  135968             :        */
  135969             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  135970             : 
  135971             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  135972             : 
  135973             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  135974             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  135975             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  135976             : 
  135977             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  135978             :                    and subject to change.
  135979             :        */
  135980             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  135981             : 
  135982             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  135983             : 
  135984             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  135985             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  135986             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  135987             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  135988             : 
  135989             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  135990             : 
  135991             :           \returns long
  135992             :        */
  135993             :           virtual long getChildIndex( SgNode* childNode ) const override;
  135994             : 
  135995             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  135996             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  135997             :       /* \brief Constructor for use by AST File I/O Mechanism
  135998             : 
  135999             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  136000             :           which obtained via fast binary file I/O from disk.
  136001             :        */
  136002             :        // SgFunctionParameterScope( SgFunctionParameterScopeStorageClass& source );
  136003             : 
  136004             : 
  136005             : 
  136006             : 
  136007             : 
  136008             :  // JH (10/24/2005): methods added to support the ast file IO
  136009             :     private:
  136010             : 
  136011             :       /* name AST Memory Allocation Support Functions
  136012             :           \brief Memory allocations support....
  136013             : 
  136014             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  136015             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  136016             :           and support the AST File I/O Mechanism.
  136017             :        */
  136018             :       /* */
  136019             : 
  136020             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  136021             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  136022             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  136023             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  136024             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  136025             :           a correspinding one in the AST_FILE_IO class!
  136026             :        */
  136027             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  136028             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136029             :       /* \brief Typedef used for low level memory access.
  136030             :        */
  136031             :        // typedef unsigned char* TestType;
  136032             : 
  136033             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  136034             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136035             :       /* \brief Typedef used to hold memory addresses as values.
  136036             :        */
  136037             :        // typedef unsigned long  AddressType;
  136038             : 
  136039             : 
  136040             : 
  136041             :        // necessary, to have direct access to the p_freepointer and the private methods !
  136042             :       /*! \brief friend class declaration to support AST File I/O */
  136043             :           friend class AST_FILE_IO;
  136044             : 
  136045             :       /*! \brief friend class declaration to support AST File I/O */
  136046             :           friend class SgFunctionParameterScopeStorageClass;
  136047             : 
  136048             :       /*! \brief friend class declaration to support AST File I/O */
  136049             :           friend class AstSpecificDataManagingClass;
  136050             : 
  136051             :       /*! \brief friend class declaration to support AST File I/O */
  136052             :           friend class AstSpecificDataManagingClassStorageClass;
  136053             :     public:
  136054             :       /*! \brief IR node constructor to support AST File I/O */
  136055             :           SgFunctionParameterScope( const SgFunctionParameterScopeStorageClass& source );
  136056             : 
  136057             :  // private: // JJW hack
  136058             :        /*
  136059             :           name AST Memory Allocation Support Variables
  136060             :           Memory allocations support variables 
  136061             : 
  136062             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  136063             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  136064             :           and support the AST File I/O Mechanism.
  136065             :        */
  136066             :       /* */
  136067             : 
  136068             :     public:
  136069             : 
  136070             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  136071             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  136072             :       // virtual SgNode* addRegExpAttribute();
  136073             :       /*! \brief Support for AST matching using regular expression.
  136074             : 
  136075             :           This support is incomplete and the subject of current research to define 
  136076             :           RegEx trees to support inexact matching.
  136077             :        */
  136078             :           SgFunctionParameterScope* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  136079             : 
  136080             : // *** COMMON CODE SECTION ENDS HERE ***
  136081             : 
  136082             : 
  136083             : // End of memberFunctionString
  136084             : // Start of memberFunctionString
  136085             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  136086             : 
  136087             :      // the generated cast function
  136088             :      // friend ROSE_DLL_API SgFunctionParameterScope* isSgFunctionParameterScope ( SgNode* s );
  136089             : 
  136090             :           typedef SgScopeStatement base_node_type;
  136091             : 
  136092             : 
  136093             : // End of memberFunctionString
  136094             : // Start of memberFunctionString
  136095             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  136096             : 
  136097             :           void post_construction_initialization() override;
  136098             : 
  136099             : 
  136100             : // End of memberFunctionString
  136101             : 
  136102             :      public: 
  136103             :          const SgDeclarationStatementPtrList&  get_declarations() const;
  136104             :          SgDeclarationStatementPtrList& get_declarations(); 
  136105             : 
  136106             : 
  136107             :      public: 
  136108             :          virtual ~SgFunctionParameterScope();
  136109             : 
  136110             : 
  136111             :      public: 
  136112             :          SgFunctionParameterScope(Sg_File_Info* startOfConstruct ); 
  136113             :          SgFunctionParameterScope(); 
  136114             : 
  136115             :     protected:
  136116             : // Start of memberFunctionString
  136117             : SgDeclarationStatementPtrList p_declarations;
  136118             :           
  136119             : // End of memberFunctionString
  136120             : 
  136121             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionParameterScope>;
  136122             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionParameterScope, SgDeclarationStatementPtrList,&SgFunctionParameterScope::p_declarations>;
  136123             : 
  136124             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136125             : 
  136126             : 
  136127             :    };
  136128             : #endif
  136129             : 
  136130             : // postdeclarations for SgFunctionParameterScope
  136131             : 
  136132             : /* #line 136133 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136133             : 
  136134             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  136135             : 
  136136             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136137             : 
  136138             : 
  136139             : /* #line 136140 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136140             : 
  136141             : 
  136142             : 
  136143             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136144             : 
  136145             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  136146             : //      This code is automatically generated for each 
  136147             : //      terminal and non-terminal within the defined 
  136148             : //      grammar.  There is a simple way to change the 
  136149             : //      code to fix bugs etc.  See the ROSE README file
  136150             : //      for directions.
  136151             : 
  136152             : // tps: (02/22/2010): Adding DLL export requirements
  136153             : #include "rosedll.h"
  136154             : 
  136155             : // predeclarations for SgDeclarationScope
  136156             : 
  136157             : /* #line 136158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136158             : 
  136159             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  136160             : 
  136161             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136162             : 
  136163             : #if 1
  136164             : // Class Definition for SgDeclarationScope
  136165             : class ROSE_DLL_API SgDeclarationScope  : public SgScopeStatement
  136166             :    {
  136167             :      public:
  136168             : 
  136169             : 
  136170             : /* #line 136171 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136171             : 
  136172             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  136173             : // Start of memberFunctionString
  136174             : /* #line 1512 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  136175             : 
  136176             : 
  136177             :        // DQ (7/19/2017): Adding support for mangled name support for new scope.
  136178             :           virtual SgName get_mangled_name(void) const override;
  136179             : 
  136180             :        // DQ (7/19/2017): Added to support general name qualification
  136181             :           virtual SgName get_qualified_name() const override;
  136182             : 
  136183             : 
  136184             : 
  136185             : // End of memberFunctionString
  136186             : // Start of memberFunctionString
  136187             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  136188             : 
  136189             : // *** COMMON CODE SECTION BEGINS HERE ***
  136190             : 
  136191             :     public:
  136192             : 
  136193             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  136194             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  136195             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  136196             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  136197             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  136198             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  136199             : 
  136200             :       /*! \brief returns a string representing the class name */
  136201             :           virtual std::string class_name() const override;
  136202             : 
  136203             :       /*! \brief returns new style SageIII enum values */
  136204             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  136205             : 
  136206             :       /*! \brief static variant value */
  136207             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  136208             :        // static const VariantT static_variant = V_SgDeclarationScope;
  136209             :           enum { static_variant = V_SgDeclarationScope };
  136210             : 
  136211             :        /* the generated cast function */
  136212             :       /*! \brief Casts pointer from base class to derived class */
  136213             :           ROSE_DLL_API friend       SgDeclarationScope* isSgDeclarationScope(       SgNode * s );
  136214             : 
  136215             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  136216             :           ROSE_DLL_API friend const SgDeclarationScope* isSgDeclarationScope( const SgNode * s );
  136217             : 
  136218             :      // ******************************************
  136219             :      // * Memory Pool / New / Delete
  136220             :      // ******************************************
  136221             : 
  136222             :      public:
  136223             :           /// \private
  136224             :           static const unsigned pool_size; //
  136225             :           /// \private
  136226             :           static std::vector<unsigned char *> pools; //
  136227             :           /// \private
  136228             :           static SgDeclarationScope * next_node; // 
  136229             : 
  136230             :           /// \private
  136231             :           static unsigned long initializeStorageClassArray(SgDeclarationScopeStorageClass *); //
  136232             : 
  136233             :           /// \private
  136234             :           static void clearMemoryPool(); //
  136235             :           static void deleteMemoryPool(); //
  136236             : 
  136237             :           /// \private
  136238             :           static void extendMemoryPoolForFileIO(); //
  136239             : 
  136240             :           /// \private
  136241             :           static SgDeclarationScope * getPointerFromGlobalIndex(unsigned long); //
  136242             :           /// \private
  136243             :           static SgDeclarationScope * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  136244             : 
  136245             :           /// \private
  136246             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  136247             :           /// \private
  136248             :           static void resetValidFreepointers(); //
  136249             :           /// \private
  136250             :           static unsigned long getNumberOfLastValidPointer(); //
  136251             : 
  136252             : 
  136253             : #if defined(INLINE_FUNCTIONS)
  136254             :       /*! \brief returns pointer to newly allocated IR node */
  136255             :           inline void *operator new (size_t size);
  136256             : #else
  136257             :       /*! \brief returns pointer to newly allocated IR node */
  136258             :           void *operator new (size_t size);
  136259             : #endif
  136260             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  136261             :           void operator delete (void* pointer, size_t size);
  136262             : 
  136263             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  136264       13312 :           void operator delete (void* pointer)
  136265             :              {
  136266             :             // This is the generated delete operator...
  136267       13312 :                SgDeclarationScope::operator delete (pointer,sizeof(SgDeclarationScope));
  136268             :              }
  136269             : 
  136270             :       /*! \brief Returns the total number of IR nodes of this type */
  136271             :           static size_t numberOfNodes();
  136272             : 
  136273             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  136274             :           static size_t memoryUsage();
  136275             : 
  136276             :       // End of scope which started in IR nodes specific code 
  136277             :       /* */
  136278             : 
  136279             :       /* name Internal Functions
  136280             :           \brief Internal functions ... incomplete-documentation
  136281             : 
  136282             :           These functions have been made public as part of the design, but they are suggested for internal use 
  136283             :           or by particularly knowledgeable users for specialized tools or applications.
  136284             : 
  136285             :           \internal We could not make these private because they are required by user for special purposes. And 
  136286             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  136287             :          
  136288             :        */
  136289             : 
  136290             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  136291             :        // overridden in every class by *generated* implementation
  136292             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  136293             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  136294             :        // MS: 06/28/02 container of names of variables or container indices 
  136295             :        // used used in the traversal to access AST successor nodes
  136296             :        // overridden in every class by *generated* implementation
  136297             :       /*! \brief container of names of variables or container indices used used in the traversal
  136298             :           to access AST successor nodes overridden in every class by *generated* implementation */
  136299             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  136300             : 
  136301             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  136302             :        // than all the vector copies. The implementation for these functions is generated for each class.
  136303             :       /*! \brief return number of children in the traversal successor list */
  136304             :           virtual size_t get_numberOfTraversalSuccessors() override;
  136305             :       /*! \brief index-based access to traversal successors by index number */
  136306             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  136307             :       /*! \brief index-based access to traversal successors by child node */
  136308             :           virtual size_t get_childIndex(SgNode *child) override;
  136309             : 
  136310             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  136311             :        // MS: 08/16/2002 method for generating RTI information
  136312             :       /*! \brief return C++ Runtime-Time-Information */
  136313             :           virtual RTIReturnType roseRTI() override;
  136314             : #endif
  136315             :       /* */
  136316             : 
  136317             : 
  136318             : 
  136319             :       /* name Deprecated Functions
  136320             :           \brief Deprecated functions ... incomplete-documentation
  136321             : 
  136322             :           These functions have been deprecated from use.
  136323             :        */
  136324             :       /* */
  136325             : 
  136326             :       /*! returns a C style string (char*) representing the class name */
  136327             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  136328             : 
  136329             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  136330             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  136331             : #if 0
  136332             :       /*! returns old style Sage II enum values */
  136333             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  136334             :       /*! returns old style Sage II enum values */
  136335             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  136336             : #endif
  136337             :       /* */
  136338             : 
  136339             : 
  136340             : 
  136341             : 
  136342             :      public:
  136343             :       /* name Traversal Support Functions
  136344             :           \brief Traversal support functions ... incomplete-documentation
  136345             : 
  136346             :           These functions have been made public as part of the design, but they are suggested for internal use 
  136347             :           or by particularly knowledgable users for specialized tools or applications.
  136348             :        */
  136349             :       /* */
  136350             : 
  136351             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  136352             :        // (inferior to ROSE traversal mechanism, experimental).
  136353             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  136354             :        */
  136355             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  136356             : 
  136357             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  136358             :       /*! \brief support for the classic visitor pattern done in GoF */
  136359             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  136360             : 
  136361             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  136362             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  136363             :        */
  136364             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  136365             : 
  136366             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  136367             :        */
  136368             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  136369             : 
  136370             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  136371             :        // This traversal helps support internal tools that call static member functions.
  136372             :        // note: this function operates on the memory pools.
  136373             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  136374             :        */
  136375             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  136376             :       /* */
  136377             : 
  136378             : 
  136379             :      public:
  136380             :       /* name Memory Allocation Functions
  136381             :           \brief Memory allocations functions ... incomplete-documentation
  136382             : 
  136383             :           These functions have been made public as part of the design, but they are suggested for internal use 
  136384             :           or by particularly knowledgable users for specialized tools or applications.
  136385             :        */
  136386             :       /* */
  136387             : 
  136388             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  136389             : 
  136390             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  136391             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  136392             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  136393             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  136394             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  136395             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  136396             :           being used with the AST File I/O mechanism.
  136397             :        */
  136398             :           virtual bool isInMemoryPool() override;
  136399             : 
  136400             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  136401             : 
  136402             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  136403             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  136404             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  136405             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  136406             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  136407             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  136408             :           being used with the AST File I/O mechanism.
  136409             :        */
  136410             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  136411             : 
  136412             :       // DQ (4/30/2006): Modified to be a const function.
  136413             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  136414             : 
  136415             :           This functions is part of general support for many possible tools to operate 
  136416             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  136417             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  136418             :           less than the set of pointers used by the AST file I/O. This is part of
  136419             :           work implemented by Andreas, and support tools such as the AST graph generation.
  136420             : 
  136421             :           \warning This function can return unexpected data members and thus the 
  136422             :                    order and the number of elements is unpredicable and subject 
  136423             :                    to change.
  136424             : 
  136425             :           \returns STL vector of pairs of SgNode* and strings
  136426             :        */
  136427             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  136428             : 
  136429             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  136430             : 
  136431             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  136432             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  136433             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  136434             : 
  136435             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  136436             :                    and subject to change.
  136437             :        */
  136438             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  136439             : 
  136440             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  136441             : 
  136442             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  136443             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  136444             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  136445             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  136446             : 
  136447             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  136448             : 
  136449             :           \returns long
  136450             :        */
  136451             :           virtual long getChildIndex( SgNode* childNode ) const override;
  136452             : 
  136453             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  136454             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136455             :       /* \brief Constructor for use by AST File I/O Mechanism
  136456             : 
  136457             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  136458             :           which obtained via fast binary file I/O from disk.
  136459             :        */
  136460             :        // SgDeclarationScope( SgDeclarationScopeStorageClass& source );
  136461             : 
  136462             : 
  136463             : 
  136464             : 
  136465             : 
  136466             :  // JH (10/24/2005): methods added to support the ast file IO
  136467             :     private:
  136468             : 
  136469             :       /* name AST Memory Allocation Support Functions
  136470             :           \brief Memory allocations support....
  136471             : 
  136472             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  136473             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  136474             :           and support the AST File I/O Mechanism.
  136475             :        */
  136476             :       /* */
  136477             : 
  136478             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  136479             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  136480             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  136481             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  136482             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  136483             :           a correspinding one in the AST_FILE_IO class!
  136484             :        */
  136485             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  136486             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136487             :       /* \brief Typedef used for low level memory access.
  136488             :        */
  136489             :        // typedef unsigned char* TestType;
  136490             : 
  136491             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  136492             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136493             :       /* \brief Typedef used to hold memory addresses as values.
  136494             :        */
  136495             :        // typedef unsigned long  AddressType;
  136496             : 
  136497             : 
  136498             : 
  136499             :        // necessary, to have direct access to the p_freepointer and the private methods !
  136500             :       /*! \brief friend class declaration to support AST File I/O */
  136501             :           friend class AST_FILE_IO;
  136502             : 
  136503             :       /*! \brief friend class declaration to support AST File I/O */
  136504             :           friend class SgDeclarationScopeStorageClass;
  136505             : 
  136506             :       /*! \brief friend class declaration to support AST File I/O */
  136507             :           friend class AstSpecificDataManagingClass;
  136508             : 
  136509             :       /*! \brief friend class declaration to support AST File I/O */
  136510             :           friend class AstSpecificDataManagingClassStorageClass;
  136511             :     public:
  136512             :       /*! \brief IR node constructor to support AST File I/O */
  136513             :           SgDeclarationScope( const SgDeclarationScopeStorageClass& source );
  136514             : 
  136515             :  // private: // JJW hack
  136516             :        /*
  136517             :           name AST Memory Allocation Support Variables
  136518             :           Memory allocations support variables 
  136519             : 
  136520             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  136521             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  136522             :           and support the AST File I/O Mechanism.
  136523             :        */
  136524             :       /* */
  136525             : 
  136526             :     public:
  136527             : 
  136528             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  136529             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  136530             :       // virtual SgNode* addRegExpAttribute();
  136531             :       /*! \brief Support for AST matching using regular expression.
  136532             : 
  136533             :           This support is incomplete and the subject of current research to define 
  136534             :           RegEx trees to support inexact matching.
  136535             :        */
  136536             :           SgDeclarationScope* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  136537             : 
  136538             : // *** COMMON CODE SECTION ENDS HERE ***
  136539             : 
  136540             : 
  136541             : // End of memberFunctionString
  136542             : // Start of memberFunctionString
  136543             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  136544             : 
  136545             :      // the generated cast function
  136546             :      // friend ROSE_DLL_API SgDeclarationScope* isSgDeclarationScope ( SgNode* s );
  136547             : 
  136548             :           typedef SgScopeStatement base_node_type;
  136549             : 
  136550             : 
  136551             : // End of memberFunctionString
  136552             : // Start of memberFunctionString
  136553             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  136554             : 
  136555             :           void post_construction_initialization() override;
  136556             : 
  136557             : 
  136558             : // End of memberFunctionString
  136559             : 
  136560             : 
  136561             :      public: 
  136562             :          virtual ~SgDeclarationScope();
  136563             : 
  136564             : 
  136565             :      public: 
  136566             :          SgDeclarationScope(Sg_File_Info* startOfConstruct ); 
  136567             :          SgDeclarationScope(); 
  136568             : 
  136569             :     protected:
  136570             : 
  136571             :     friend struct Rose::Traits::generated::describe_node_t<SgDeclarationScope>;
  136572             : 
  136573             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136574             : 
  136575             : 
  136576             :    };
  136577             : #endif
  136578             : 
  136579             : // postdeclarations for SgDeclarationScope
  136580             : 
  136581             : /* #line 136582 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136582             : 
  136583             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  136584             : 
  136585             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136586             : 
  136587             : 
  136588             : /* #line 136589 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136589             : 
  136590             : 
  136591             : 
  136592             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136593             : 
  136594             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  136595             : //      This code is automatically generated for each 
  136596             : //      terminal and non-terminal within the defined 
  136597             : //      grammar.  There is a simple way to change the 
  136598             : //      code to fix bugs etc.  See the ROSE README file
  136599             : //      for directions.
  136600             : 
  136601             : // tps: (02/22/2010): Adding DLL export requirements
  136602             : #include "rosedll.h"
  136603             : 
  136604             : // predeclarations for SgRangeBasedForStatement
  136605             : 
  136606             : /* #line 136607 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136607             : 
  136608             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  136609             : 
  136610             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  136611             : 
  136612             : #if 1
  136613             : // Class Definition for SgRangeBasedForStatement
  136614             : class ROSE_DLL_API SgRangeBasedForStatement  : public SgScopeStatement
  136615             :    {
  136616             :      public:
  136617             : 
  136618             : 
  136619             : /* #line 136620 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  136620             : 
  136621             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  136622             : // Start of memberFunctionString
  136623             : /* #line 1419 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  136624             : 
  136625             : 
  136626             :        // void post_construction_initialization() override;
  136627             : 
  136628             :      protected:
  136629             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  136630             : 
  136631             :           int replace_expression(SgExpression * original_expression, SgExpression * new_expression ) override;
  136632             : 
  136633             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  136634             :           virtual unsigned int cfgIndexForEnd() const override;
  136635             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  136636             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  136637             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  136638             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  136639             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  136640             : #endif
  136641             : 
  136642             :        // DQ (2/22/2007): Added for uniform support of mangled names
  136643             :           virtual SgName get_mangled_name() const override;
  136644             : 
  136645             : #if ALT_FIXUP_COPY
  136646             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  136647             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  136648             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  136649             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  136650             : #else
  136651             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  136652             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  136653             : #endif
  136654             : 
  136655             :      public:
  136656             :        // DQ (3/28/2018): Get the range variable (target container, name used for unparser).
  136657             :        // SgInitializedName* range_variable();
  136658             :        // SgVarRefExp* range_variable_reference();
  136659             :           SgExpression* range_expression();
  136660             : 
  136661             : 
  136662             : 
  136663             : // End of memberFunctionString
  136664             : // Start of memberFunctionString
  136665             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  136666             : 
  136667             : // *** COMMON CODE SECTION BEGINS HERE ***
  136668             : 
  136669             :     public:
  136670             : 
  136671             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  136672             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  136673             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  136674             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  136675             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  136676             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  136677             : 
  136678             :       /*! \brief returns a string representing the class name */
  136679             :           virtual std::string class_name() const override;
  136680             : 
  136681             :       /*! \brief returns new style SageIII enum values */
  136682             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  136683             : 
  136684             :       /*! \brief static variant value */
  136685             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  136686             :        // static const VariantT static_variant = V_SgRangeBasedForStatement;
  136687             :           enum { static_variant = V_SgRangeBasedForStatement };
  136688             : 
  136689             :        /* the generated cast function */
  136690             :       /*! \brief Casts pointer from base class to derived class */
  136691             :           ROSE_DLL_API friend       SgRangeBasedForStatement* isSgRangeBasedForStatement(       SgNode * s );
  136692             : 
  136693             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  136694             :           ROSE_DLL_API friend const SgRangeBasedForStatement* isSgRangeBasedForStatement( const SgNode * s );
  136695             : 
  136696             :      // ******************************************
  136697             :      // * Memory Pool / New / Delete
  136698             :      // ******************************************
  136699             : 
  136700             :      public:
  136701             :           /// \private
  136702             :           static const unsigned pool_size; //
  136703             :           /// \private
  136704             :           static std::vector<unsigned char *> pools; //
  136705             :           /// \private
  136706             :           static SgRangeBasedForStatement * next_node; // 
  136707             : 
  136708             :           /// \private
  136709             :           static unsigned long initializeStorageClassArray(SgRangeBasedForStatementStorageClass *); //
  136710             : 
  136711             :           /// \private
  136712             :           static void clearMemoryPool(); //
  136713             :           static void deleteMemoryPool(); //
  136714             : 
  136715             :           /// \private
  136716             :           static void extendMemoryPoolForFileIO(); //
  136717             : 
  136718             :           /// \private
  136719             :           static SgRangeBasedForStatement * getPointerFromGlobalIndex(unsigned long); //
  136720             :           /// \private
  136721             :           static SgRangeBasedForStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  136722             : 
  136723             :           /// \private
  136724             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  136725             :           /// \private
  136726             :           static void resetValidFreepointers(); //
  136727             :           /// \private
  136728             :           static unsigned long getNumberOfLastValidPointer(); //
  136729             : 
  136730             : 
  136731             : #if defined(INLINE_FUNCTIONS)
  136732             :       /*! \brief returns pointer to newly allocated IR node */
  136733             :           inline void *operator new (size_t size);
  136734             : #else
  136735             :       /*! \brief returns pointer to newly allocated IR node */
  136736             :           void *operator new (size_t size);
  136737             : #endif
  136738             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  136739             :           void operator delete (void* pointer, size_t size);
  136740             : 
  136741             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  136742           0 :           void operator delete (void* pointer)
  136743             :              {
  136744             :             // This is the generated delete operator...
  136745           0 :                SgRangeBasedForStatement::operator delete (pointer,sizeof(SgRangeBasedForStatement));
  136746             :              }
  136747             : 
  136748             :       /*! \brief Returns the total number of IR nodes of this type */
  136749             :           static size_t numberOfNodes();
  136750             : 
  136751             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  136752             :           static size_t memoryUsage();
  136753             : 
  136754             :       // End of scope which started in IR nodes specific code 
  136755             :       /* */
  136756             : 
  136757             :       /* name Internal Functions
  136758             :           \brief Internal functions ... incomplete-documentation
  136759             : 
  136760             :           These functions have been made public as part of the design, but they are suggested for internal use 
  136761             :           or by particularly knowledgeable users for specialized tools or applications.
  136762             : 
  136763             :           \internal We could not make these private because they are required by user for special purposes. And 
  136764             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  136765             :          
  136766             :        */
  136767             : 
  136768             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  136769             :        // overridden in every class by *generated* implementation
  136770             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  136771             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  136772             :        // MS: 06/28/02 container of names of variables or container indices 
  136773             :        // used used in the traversal to access AST successor nodes
  136774             :        // overridden in every class by *generated* implementation
  136775             :       /*! \brief container of names of variables or container indices used used in the traversal
  136776             :           to access AST successor nodes overridden in every class by *generated* implementation */
  136777             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  136778             : 
  136779             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  136780             :        // than all the vector copies. The implementation for these functions is generated for each class.
  136781             :       /*! \brief return number of children in the traversal successor list */
  136782             :           virtual size_t get_numberOfTraversalSuccessors() override;
  136783             :       /*! \brief index-based access to traversal successors by index number */
  136784             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  136785             :       /*! \brief index-based access to traversal successors by child node */
  136786             :           virtual size_t get_childIndex(SgNode *child) override;
  136787             : 
  136788             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  136789             :        // MS: 08/16/2002 method for generating RTI information
  136790             :       /*! \brief return C++ Runtime-Time-Information */
  136791             :           virtual RTIReturnType roseRTI() override;
  136792             : #endif
  136793             :       /* */
  136794             : 
  136795             : 
  136796             : 
  136797             :       /* name Deprecated Functions
  136798             :           \brief Deprecated functions ... incomplete-documentation
  136799             : 
  136800             :           These functions have been deprecated from use.
  136801             :        */
  136802             :       /* */
  136803             : 
  136804             :       /*! returns a C style string (char*) representing the class name */
  136805             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  136806             : 
  136807             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  136808             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  136809             : #if 0
  136810             :       /*! returns old style Sage II enum values */
  136811             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  136812             :       /*! returns old style Sage II enum values */
  136813             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  136814             : #endif
  136815             :       /* */
  136816             : 
  136817             : 
  136818             : 
  136819             : 
  136820             :      public:
  136821             :       /* name Traversal Support Functions
  136822             :           \brief Traversal support functions ... incomplete-documentation
  136823             : 
  136824             :           These functions have been made public as part of the design, but they are suggested for internal use 
  136825             :           or by particularly knowledgable users for specialized tools or applications.
  136826             :        */
  136827             :       /* */
  136828             : 
  136829             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  136830             :        // (inferior to ROSE traversal mechanism, experimental).
  136831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  136832             :        */
  136833             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  136834             : 
  136835             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  136836             :       /*! \brief support for the classic visitor pattern done in GoF */
  136837             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  136838             : 
  136839             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  136840             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  136841             :        */
  136842             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  136843             : 
  136844             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  136845             :        */
  136846             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  136847             : 
  136848             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  136849             :        // This traversal helps support internal tools that call static member functions.
  136850             :        // note: this function operates on the memory pools.
  136851             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  136852             :        */
  136853             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  136854             :       /* */
  136855             : 
  136856             : 
  136857             :      public:
  136858             :       /* name Memory Allocation Functions
  136859             :           \brief Memory allocations functions ... incomplete-documentation
  136860             : 
  136861             :           These functions have been made public as part of the design, but they are suggested for internal use 
  136862             :           or by particularly knowledgable users for specialized tools or applications.
  136863             :        */
  136864             :       /* */
  136865             : 
  136866             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  136867             : 
  136868             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  136869             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  136870             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  136871             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  136872             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  136873             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  136874             :           being used with the AST File I/O mechanism.
  136875             :        */
  136876             :           virtual bool isInMemoryPool() override;
  136877             : 
  136878             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  136879             : 
  136880             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  136881             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  136882             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  136883             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  136884             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  136885             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  136886             :           being used with the AST File I/O mechanism.
  136887             :        */
  136888             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  136889             : 
  136890             :       // DQ (4/30/2006): Modified to be a const function.
  136891             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  136892             : 
  136893             :           This functions is part of general support for many possible tools to operate 
  136894             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  136895             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  136896             :           less than the set of pointers used by the AST file I/O. This is part of
  136897             :           work implemented by Andreas, and support tools such as the AST graph generation.
  136898             : 
  136899             :           \warning This function can return unexpected data members and thus the 
  136900             :                    order and the number of elements is unpredicable and subject 
  136901             :                    to change.
  136902             : 
  136903             :           \returns STL vector of pairs of SgNode* and strings
  136904             :        */
  136905             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  136906             : 
  136907             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  136908             : 
  136909             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  136910             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  136911             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  136912             : 
  136913             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  136914             :                    and subject to change.
  136915             :        */
  136916             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  136917             : 
  136918             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  136919             : 
  136920             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  136921             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  136922             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  136923             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  136924             : 
  136925             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  136926             : 
  136927             :           \returns long
  136928             :        */
  136929             :           virtual long getChildIndex( SgNode* childNode ) const override;
  136930             : 
  136931             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  136932             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136933             :       /* \brief Constructor for use by AST File I/O Mechanism
  136934             : 
  136935             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  136936             :           which obtained via fast binary file I/O from disk.
  136937             :        */
  136938             :        // SgRangeBasedForStatement( SgRangeBasedForStatementStorageClass& source );
  136939             : 
  136940             : 
  136941             : 
  136942             : 
  136943             : 
  136944             :  // JH (10/24/2005): methods added to support the ast file IO
  136945             :     private:
  136946             : 
  136947             :       /* name AST Memory Allocation Support Functions
  136948             :           \brief Memory allocations support....
  136949             : 
  136950             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  136951             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  136952             :           and support the AST File I/O Mechanism.
  136953             :        */
  136954             :       /* */
  136955             : 
  136956             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  136957             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  136958             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  136959             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  136960             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  136961             :           a correspinding one in the AST_FILE_IO class!
  136962             :        */
  136963             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  136964             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136965             :       /* \brief Typedef used for low level memory access.
  136966             :        */
  136967             :        // typedef unsigned char* TestType;
  136968             : 
  136969             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  136970             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  136971             :       /* \brief Typedef used to hold memory addresses as values.
  136972             :        */
  136973             :        // typedef unsigned long  AddressType;
  136974             : 
  136975             : 
  136976             : 
  136977             :        // necessary, to have direct access to the p_freepointer and the private methods !
  136978             :       /*! \brief friend class declaration to support AST File I/O */
  136979             :           friend class AST_FILE_IO;
  136980             : 
  136981             :       /*! \brief friend class declaration to support AST File I/O */
  136982             :           friend class SgRangeBasedForStatementStorageClass;
  136983             : 
  136984             :       /*! \brief friend class declaration to support AST File I/O */
  136985             :           friend class AstSpecificDataManagingClass;
  136986             : 
  136987             :       /*! \brief friend class declaration to support AST File I/O */
  136988             :           friend class AstSpecificDataManagingClassStorageClass;
  136989             :     public:
  136990             :       /*! \brief IR node constructor to support AST File I/O */
  136991             :           SgRangeBasedForStatement( const SgRangeBasedForStatementStorageClass& source );
  136992             : 
  136993             :  // private: // JJW hack
  136994             :        /*
  136995             :           name AST Memory Allocation Support Variables
  136996             :           Memory allocations support variables 
  136997             : 
  136998             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  136999             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  137000             :           and support the AST File I/O Mechanism.
  137001             :        */
  137002             :       /* */
  137003             : 
  137004             :     public:
  137005             : 
  137006             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  137007             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  137008             :       // virtual SgNode* addRegExpAttribute();
  137009             :       /*! \brief Support for AST matching using regular expression.
  137010             : 
  137011             :           This support is incomplete and the subject of current research to define 
  137012             :           RegEx trees to support inexact matching.
  137013             :        */
  137014             :           SgRangeBasedForStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  137015             : 
  137016             : // *** COMMON CODE SECTION ENDS HERE ***
  137017             : 
  137018             : 
  137019             : // End of memberFunctionString
  137020             : // Start of memberFunctionString
  137021             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  137022             : 
  137023             :      // the generated cast function
  137024             :      // friend ROSE_DLL_API SgRangeBasedForStatement* isSgRangeBasedForStatement ( SgNode* s );
  137025             : 
  137026             :           typedef SgScopeStatement base_node_type;
  137027             : 
  137028             : 
  137029             : // End of memberFunctionString
  137030             : // Start of memberFunctionString
  137031             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  137032             : 
  137033             :           void post_construction_initialization() override;
  137034             : 
  137035             : 
  137036             : // End of memberFunctionString
  137037             : 
  137038             :      public: 
  137039             :          SgVariableDeclaration* get_iterator_declaration() const;
  137040             :          void set_iterator_declaration(SgVariableDeclaration* iterator_declaration);
  137041             : 
  137042             :      public: 
  137043             :          SgVariableDeclaration* get_range_declaration() const;
  137044             :          void set_range_declaration(SgVariableDeclaration* range_declaration);
  137045             : 
  137046             :      public: 
  137047             :          SgVariableDeclaration* get_begin_declaration() const;
  137048             :          void set_begin_declaration(SgVariableDeclaration* begin_declaration);
  137049             : 
  137050             :      public: 
  137051             :          SgVariableDeclaration* get_end_declaration() const;
  137052             :          void set_end_declaration(SgVariableDeclaration* end_declaration);
  137053             : 
  137054             :      public: 
  137055             :          SgExpression* get_not_equal_expression() const;
  137056             :          void set_not_equal_expression(SgExpression* not_equal_expression);
  137057             : 
  137058             :      public: 
  137059             :          SgExpression* get_increment_expression() const;
  137060             :          void set_increment_expression(SgExpression* increment_expression);
  137061             : 
  137062             :      public: 
  137063             :          SgStatement* get_loop_body() const;
  137064             :          void set_loop_body(SgStatement* loop_body);
  137065             : 
  137066             : 
  137067             :      public: 
  137068             :          virtual ~SgRangeBasedForStatement();
  137069             : 
  137070             : 
  137071             :      public: 
  137072             :          SgRangeBasedForStatement(Sg_File_Info* startOfConstruct , SgVariableDeclaration* iterator_declaration = NULL, SgVariableDeclaration* range_declaration = NULL, SgVariableDeclaration* begin_declaration = NULL, SgVariableDeclaration* end_declaration = NULL, SgExpression* not_equal_expression = NULL, SgExpression* increment_expression = NULL, SgStatement* loop_body = NULL); 
  137073             :          SgRangeBasedForStatement(SgVariableDeclaration* iterator_declaration, SgVariableDeclaration* range_declaration, SgVariableDeclaration* begin_declaration, SgVariableDeclaration* end_declaration, SgExpression* not_equal_expression, SgExpression* increment_expression, SgStatement* loop_body); 
  137074             : 
  137075             :     protected:
  137076             : // Start of memberFunctionString
  137077             : SgVariableDeclaration* p_iterator_declaration;
  137078             :           
  137079             : // End of memberFunctionString
  137080             : // Start of memberFunctionString
  137081             : SgVariableDeclaration* p_range_declaration;
  137082             :           
  137083             : // End of memberFunctionString
  137084             : // Start of memberFunctionString
  137085             : SgVariableDeclaration* p_begin_declaration;
  137086             :           
  137087             : // End of memberFunctionString
  137088             : // Start of memberFunctionString
  137089             : SgVariableDeclaration* p_end_declaration;
  137090             :           
  137091             : // End of memberFunctionString
  137092             : // Start of memberFunctionString
  137093             : SgExpression* p_not_equal_expression;
  137094             :           
  137095             : // End of memberFunctionString
  137096             : // Start of memberFunctionString
  137097             : SgExpression* p_increment_expression;
  137098             :           
  137099             : // End of memberFunctionString
  137100             : // Start of memberFunctionString
  137101             : SgStatement* p_loop_body;
  137102             :           
  137103             : // End of memberFunctionString
  137104             : 
  137105             :     friend struct Rose::Traits::generated::describe_node_t<SgRangeBasedForStatement>;
  137106             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeBasedForStatement, SgVariableDeclaration*,&SgRangeBasedForStatement::p_iterator_declaration>;
  137107             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeBasedForStatement, SgVariableDeclaration*,&SgRangeBasedForStatement::p_range_declaration>;
  137108             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeBasedForStatement, SgVariableDeclaration*,&SgRangeBasedForStatement::p_begin_declaration>;
  137109             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeBasedForStatement, SgVariableDeclaration*,&SgRangeBasedForStatement::p_end_declaration>;
  137110             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeBasedForStatement, SgExpression*,&SgRangeBasedForStatement::p_not_equal_expression>;
  137111             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeBasedForStatement, SgExpression*,&SgRangeBasedForStatement::p_increment_expression>;
  137112             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeBasedForStatement, SgStatement*,&SgRangeBasedForStatement::p_loop_body>;
  137113             : 
  137114             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137115             : 
  137116             : 
  137117             :    };
  137118             : #endif
  137119             : 
  137120             : // postdeclarations for SgRangeBasedForStatement
  137121             : 
  137122             : /* #line 137123 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137123             : 
  137124             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  137125             : 
  137126             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137127             : 
  137128             : 
  137129             : /* #line 137130 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137130             : 
  137131             : 
  137132             : 
  137133             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137134             : 
  137135             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  137136             : //      This code is automatically generated for each 
  137137             : //      terminal and non-terminal within the defined 
  137138             : //      grammar.  There is a simple way to change the 
  137139             : //      code to fix bugs etc.  See the ROSE README file
  137140             : //      for directions.
  137141             : 
  137142             : // tps: (02/22/2010): Adding DLL export requirements
  137143             : #include "rosedll.h"
  137144             : 
  137145             : // predeclarations for SgFunctionTypeTable
  137146             : 
  137147             : /* #line 137148 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137148             : 
  137149             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  137150             : 
  137151             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137152             : 
  137153             : #if 1
  137154             : // Class Definition for SgFunctionTypeTable
  137155             : class ROSE_DLL_API SgFunctionTypeTable  : public SgStatement
  137156             :    {
  137157             :      public:
  137158             : 
  137159             : 
  137160             : /* #line 137161 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137161             : 
  137162             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  137163             : // Start of memberFunctionString
  137164             : /* #line 745 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  137165             : 
  137166             : 
  137167             :       //! Constructor
  137168             :        // SgFunctionTypeTable ();
  137169             :        // SgFunctionTypeTable( bool case_insensitive = false );
  137170             :           SgFunctionTypeTable();
  137171             : 
  137172             :           void insert_function_type(const SgName&, SgType *);
  137173             :        // void insert_function_type(const SgFunctionDeclaration *);
  137174             : 
  137175             :           SgType* lookup_function_type (const SgName&);
  137176             : 
  137177             :        // DQ (1/31/2007): Added to support AST merge.
  137178             :           void remove_function_type(const SgName&);
  137179             : 
  137180             :           void print_functypetable(std::ostream& os = std::cout);
  137181             : 
  137182             : 
  137183             : 
  137184             : // End of memberFunctionString
  137185             : // Start of memberFunctionString
  137186             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  137187             : 
  137188             : // *** COMMON CODE SECTION BEGINS HERE ***
  137189             : 
  137190             :     public:
  137191             : 
  137192             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  137193             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  137194             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  137195             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  137196             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  137197             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  137198             : 
  137199             :       /*! \brief returns a string representing the class name */
  137200             :           virtual std::string class_name() const override;
  137201             : 
  137202             :       /*! \brief returns new style SageIII enum values */
  137203             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  137204             : 
  137205             :       /*! \brief static variant value */
  137206             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  137207             :        // static const VariantT static_variant = V_SgFunctionTypeTable;
  137208             :           enum { static_variant = V_SgFunctionTypeTable };
  137209             : 
  137210             :        /* the generated cast function */
  137211             :       /*! \brief Casts pointer from base class to derived class */
  137212             :           ROSE_DLL_API friend       SgFunctionTypeTable* isSgFunctionTypeTable(       SgNode * s );
  137213             : 
  137214             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  137215             :           ROSE_DLL_API friend const SgFunctionTypeTable* isSgFunctionTypeTable( const SgNode * s );
  137216             : 
  137217             :      // ******************************************
  137218             :      // * Memory Pool / New / Delete
  137219             :      // ******************************************
  137220             : 
  137221             :      public:
  137222             :           /// \private
  137223             :           static const unsigned pool_size; //
  137224             :           /// \private
  137225             :           static std::vector<unsigned char *> pools; //
  137226             :           /// \private
  137227             :           static SgFunctionTypeTable * next_node; // 
  137228             : 
  137229             :           /// \private
  137230             :           static unsigned long initializeStorageClassArray(SgFunctionTypeTableStorageClass *); //
  137231             : 
  137232             :           /// \private
  137233             :           static void clearMemoryPool(); //
  137234             :           static void deleteMemoryPool(); //
  137235             : 
  137236             :           /// \private
  137237             :           static void extendMemoryPoolForFileIO(); //
  137238             : 
  137239             :           /// \private
  137240             :           static SgFunctionTypeTable * getPointerFromGlobalIndex(unsigned long); //
  137241             :           /// \private
  137242             :           static SgFunctionTypeTable * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  137243             : 
  137244             :           /// \private
  137245             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  137246             :           /// \private
  137247             :           static void resetValidFreepointers(); //
  137248             :           /// \private
  137249             :           static unsigned long getNumberOfLastValidPointer(); //
  137250             : 
  137251             : 
  137252             : #if defined(INLINE_FUNCTIONS)
  137253             :       /*! \brief returns pointer to newly allocated IR node */
  137254             :           inline void *operator new (size_t size);
  137255             : #else
  137256             :       /*! \brief returns pointer to newly allocated IR node */
  137257             :           void *operator new (size_t size);
  137258             : #endif
  137259             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  137260             :           void operator delete (void* pointer, size_t size);
  137261             : 
  137262             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  137263           7 :           void operator delete (void* pointer)
  137264             :              {
  137265             :             // This is the generated delete operator...
  137266           7 :                SgFunctionTypeTable::operator delete (pointer,sizeof(SgFunctionTypeTable));
  137267             :              }
  137268             : 
  137269             :       /*! \brief Returns the total number of IR nodes of this type */
  137270             :           static size_t numberOfNodes();
  137271             : 
  137272             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  137273             :           static size_t memoryUsage();
  137274             : 
  137275             :       // End of scope which started in IR nodes specific code 
  137276             :       /* */
  137277             : 
  137278             :       /* name Internal Functions
  137279             :           \brief Internal functions ... incomplete-documentation
  137280             : 
  137281             :           These functions have been made public as part of the design, but they are suggested for internal use 
  137282             :           or by particularly knowledgeable users for specialized tools or applications.
  137283             : 
  137284             :           \internal We could not make these private because they are required by user for special purposes. And 
  137285             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  137286             :          
  137287             :        */
  137288             : 
  137289             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  137290             :        // overridden in every class by *generated* implementation
  137291             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  137292             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  137293             :        // MS: 06/28/02 container of names of variables or container indices 
  137294             :        // used used in the traversal to access AST successor nodes
  137295             :        // overridden in every class by *generated* implementation
  137296             :       /*! \brief container of names of variables or container indices used used in the traversal
  137297             :           to access AST successor nodes overridden in every class by *generated* implementation */
  137298             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  137299             : 
  137300             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  137301             :        // than all the vector copies. The implementation for these functions is generated for each class.
  137302             :       /*! \brief return number of children in the traversal successor list */
  137303             :           virtual size_t get_numberOfTraversalSuccessors() override;
  137304             :       /*! \brief index-based access to traversal successors by index number */
  137305             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  137306             :       /*! \brief index-based access to traversal successors by child node */
  137307             :           virtual size_t get_childIndex(SgNode *child) override;
  137308             : 
  137309             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  137310             :        // MS: 08/16/2002 method for generating RTI information
  137311             :       /*! \brief return C++ Runtime-Time-Information */
  137312             :           virtual RTIReturnType roseRTI() override;
  137313             : #endif
  137314             :       /* */
  137315             : 
  137316             : 
  137317             : 
  137318             :       /* name Deprecated Functions
  137319             :           \brief Deprecated functions ... incomplete-documentation
  137320             : 
  137321             :           These functions have been deprecated from use.
  137322             :        */
  137323             :       /* */
  137324             : 
  137325             :       /*! returns a C style string (char*) representing the class name */
  137326             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  137327             : 
  137328             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  137329             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  137330             : #if 0
  137331             :       /*! returns old style Sage II enum values */
  137332             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  137333             :       /*! returns old style Sage II enum values */
  137334             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  137335             : #endif
  137336             :       /* */
  137337             : 
  137338             : 
  137339             : 
  137340             : 
  137341             :      public:
  137342             :       /* name Traversal Support Functions
  137343             :           \brief Traversal support functions ... incomplete-documentation
  137344             : 
  137345             :           These functions have been made public as part of the design, but they are suggested for internal use 
  137346             :           or by particularly knowledgable users for specialized tools or applications.
  137347             :        */
  137348             :       /* */
  137349             : 
  137350             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  137351             :        // (inferior to ROSE traversal mechanism, experimental).
  137352             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  137353             :        */
  137354             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  137355             : 
  137356             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  137357             :       /*! \brief support for the classic visitor pattern done in GoF */
  137358             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  137359             : 
  137360             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  137361             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  137362             :        */
  137363             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  137364             : 
  137365             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  137366             :        */
  137367             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  137368             : 
  137369             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  137370             :        // This traversal helps support internal tools that call static member functions.
  137371             :        // note: this function operates on the memory pools.
  137372             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  137373             :        */
  137374             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  137375             :       /* */
  137376             : 
  137377             : 
  137378             :      public:
  137379             :       /* name Memory Allocation Functions
  137380             :           \brief Memory allocations functions ... incomplete-documentation
  137381             : 
  137382             :           These functions have been made public as part of the design, but they are suggested for internal use 
  137383             :           or by particularly knowledgable users for specialized tools or applications.
  137384             :        */
  137385             :       /* */
  137386             : 
  137387             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  137388             : 
  137389             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  137390             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  137391             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  137392             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  137393             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  137394             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  137395             :           being used with the AST File I/O mechanism.
  137396             :        */
  137397             :           virtual bool isInMemoryPool() override;
  137398             : 
  137399             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  137400             : 
  137401             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  137402             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  137403             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  137404             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  137405             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  137406             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  137407             :           being used with the AST File I/O mechanism.
  137408             :        */
  137409             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  137410             : 
  137411             :       // DQ (4/30/2006): Modified to be a const function.
  137412             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  137413             : 
  137414             :           This functions is part of general support for many possible tools to operate 
  137415             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  137416             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  137417             :           less than the set of pointers used by the AST file I/O. This is part of
  137418             :           work implemented by Andreas, and support tools such as the AST graph generation.
  137419             : 
  137420             :           \warning This function can return unexpected data members and thus the 
  137421             :                    order and the number of elements is unpredicable and subject 
  137422             :                    to change.
  137423             : 
  137424             :           \returns STL vector of pairs of SgNode* and strings
  137425             :        */
  137426             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  137427             : 
  137428             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  137429             : 
  137430             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  137431             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  137432             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  137433             : 
  137434             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  137435             :                    and subject to change.
  137436             :        */
  137437             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  137438             : 
  137439             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  137440             : 
  137441             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  137442             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  137443             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  137444             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  137445             : 
  137446             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  137447             : 
  137448             :           \returns long
  137449             :        */
  137450             :           virtual long getChildIndex( SgNode* childNode ) const override;
  137451             : 
  137452             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  137453             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  137454             :       /* \brief Constructor for use by AST File I/O Mechanism
  137455             : 
  137456             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  137457             :           which obtained via fast binary file I/O from disk.
  137458             :        */
  137459             :        // SgFunctionTypeTable( SgFunctionTypeTableStorageClass& source );
  137460             : 
  137461             : 
  137462             : 
  137463             : 
  137464             : 
  137465             :  // JH (10/24/2005): methods added to support the ast file IO
  137466             :     private:
  137467             : 
  137468             :       /* name AST Memory Allocation Support Functions
  137469             :           \brief Memory allocations support....
  137470             : 
  137471             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  137472             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  137473             :           and support the AST File I/O Mechanism.
  137474             :        */
  137475             :       /* */
  137476             : 
  137477             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  137478             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  137479             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  137480             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  137481             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  137482             :           a correspinding one in the AST_FILE_IO class!
  137483             :        */
  137484             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  137485             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  137486             :       /* \brief Typedef used for low level memory access.
  137487             :        */
  137488             :        // typedef unsigned char* TestType;
  137489             : 
  137490             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  137491             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  137492             :       /* \brief Typedef used to hold memory addresses as values.
  137493             :        */
  137494             :        // typedef unsigned long  AddressType;
  137495             : 
  137496             : 
  137497             : 
  137498             :        // necessary, to have direct access to the p_freepointer and the private methods !
  137499             :       /*! \brief friend class declaration to support AST File I/O */
  137500             :           friend class AST_FILE_IO;
  137501             : 
  137502             :       /*! \brief friend class declaration to support AST File I/O */
  137503             :           friend class SgFunctionTypeTableStorageClass;
  137504             : 
  137505             :       /*! \brief friend class declaration to support AST File I/O */
  137506             :           friend class AstSpecificDataManagingClass;
  137507             : 
  137508             :       /*! \brief friend class declaration to support AST File I/O */
  137509             :           friend class AstSpecificDataManagingClassStorageClass;
  137510             :     public:
  137511             :       /*! \brief IR node constructor to support AST File I/O */
  137512             :           SgFunctionTypeTable( const SgFunctionTypeTableStorageClass& source );
  137513             : 
  137514             :  // private: // JJW hack
  137515             :        /*
  137516             :           name AST Memory Allocation Support Variables
  137517             :           Memory allocations support variables 
  137518             : 
  137519             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  137520             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  137521             :           and support the AST File I/O Mechanism.
  137522             :        */
  137523             :       /* */
  137524             : 
  137525             :     public:
  137526             : 
  137527             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  137528             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  137529             :       // virtual SgNode* addRegExpAttribute();
  137530             :       /*! \brief Support for AST matching using regular expression.
  137531             : 
  137532             :           This support is incomplete and the subject of current research to define 
  137533             :           RegEx trees to support inexact matching.
  137534             :        */
  137535             :           SgFunctionTypeTable* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  137536             : 
  137537             : // *** COMMON CODE SECTION ENDS HERE ***
  137538             : 
  137539             : 
  137540             : // End of memberFunctionString
  137541             : // Start of memberFunctionString
  137542             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  137543             : 
  137544             :      // the generated cast function
  137545             :      // friend ROSE_DLL_API SgFunctionTypeTable* isSgFunctionTypeTable ( SgNode* s );
  137546             : 
  137547             :           typedef SgStatement base_node_type;
  137548             : 
  137549             : 
  137550             : // End of memberFunctionString
  137551             : // Start of memberFunctionString
  137552             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  137553             : 
  137554             :           void post_construction_initialization() override;
  137555             : 
  137556             : 
  137557             : // End of memberFunctionString
  137558             : 
  137559             :      public: 
  137560             :          SgSymbolTable* get_function_type_table() const;
  137561             :          void set_function_type_table(SgSymbolTable* function_type_table);
  137562             : 
  137563             : 
  137564             :      public: 
  137565             :          virtual ~SgFunctionTypeTable();
  137566             : 
  137567             :     protected:
  137568             : // Start of memberFunctionString
  137569             : SgSymbolTable* p_function_type_table;
  137570             :           
  137571             : // End of memberFunctionString
  137572             : 
  137573             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionTypeTable>;
  137574             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionTypeTable, SgSymbolTable*,&SgFunctionTypeTable::p_function_type_table>;
  137575             : 
  137576             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137577             : 
  137578             : 
  137579             :    };
  137580             : #endif
  137581             : 
  137582             : // postdeclarations for SgFunctionTypeTable
  137583             : 
  137584             : /* #line 137585 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137585             : 
  137586             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  137587             : 
  137588             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137589             : 
  137590             : 
  137591             : /* #line 137592 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137592             : 
  137593             : 
  137594             : 
  137595             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137596             : 
  137597             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  137598             : //      This code is automatically generated for each 
  137599             : //      terminal and non-terminal within the defined 
  137600             : //      grammar.  There is a simple way to change the 
  137601             : //      code to fix bugs etc.  See the ROSE README file
  137602             : //      for directions.
  137603             : 
  137604             : // tps: (02/22/2010): Adding DLL export requirements
  137605             : #include "rosedll.h"
  137606             : 
  137607             : // predeclarations for SgDeclarationStatement
  137608             : 
  137609             : /* #line 137610 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137610             : 
  137611             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  137612             : 
  137613             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  137614             : 
  137615             : #if 1
  137616             : // Class Definition for SgDeclarationStatement
  137617             : class ROSE_DLL_API SgDeclarationStatement  : public SgStatement
  137618             :    {
  137619             :      public:
  137620             : 
  137621             : 
  137622             : /* #line 137623 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  137623             : 
  137624             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  137625             : // Start of memberFunctionString
  137626             : /* #line 768 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  137627             : 
  137628             : 
  137629             :        // DQ (5/9/2005): Added support for template specialization!
  137630             :        /*! \brief Template Specialization Support
  137631             : 
  137632             :            different forms of template specialization for - classes, functions, and variable declarations
  137633             :         */
  137634             :           enum template_specialization_enum
  137635             :              {
  137636             :                e_unknown                      = 0, /*!< unknown value (error value) */
  137637             :                e_no_specialization            = 1, /*!< not a specialization (default value) */
  137638             :                e_partial_specialization       = 2, /*!< partial specialization */
  137639             :                e_specialization               = 3, /*!< specialization */
  137640             :                e_template_specialization_last = 4  /*!< last value (unused) */
  137641             :              };
  137642             : 
  137643             :       /*! \brief GNU extension for visibility modifier (only one value can be specified)
  137644             : 
  137645             :           Visibility modifier information about (unspecified, hidden, protected, internal).
  137646             : 
  137647             :           \internal Only one value can be specified.
  137648             :        */
  137649             :           enum gnu_extension_visability_attribute_enum
  137650             :              {
  137651             :             // Bit values can support multiple values in a single enum type
  137652             :                e_gnu_attribute_visability_unknown     = 0, /*!< Unknown value (error) */
  137653             :                e_gnu_attribute_visability_unspecified = 1, /*!< Default value */
  137654             :                e_gnu_attribute_visability_hidden      = 2, /*!< hidden visibility attribute */
  137655             :                e_gnu_attribute_visability_protected   = 3, /*!< protected visibility attribute */
  137656             :                e_gnu_attribute_visability_internal    = 4, /*!< internal visibility attribute */
  137657             :                e_last_gnu_visability_attribute   /*!< last visibility attribute value (upper bound on range of values, used in error checking) */
  137658             :              };
  137659             : 
  137660             :        // DQ (4/25/2004): Part of new interface to declaration modifiers (refactoring).
  137661             :        // The following access functions are not technically modifiers as defined
  137662             :        // in the language. They act like modifiers to the unparser and to the
  137663             :        // representation of the original source structure within the AST.
  137664             : 
  137665             :        // this is to distinguish a forward declaration (class or function)
  137666             :        // class X;
  137667             :        // class X { };
  137668             : 
  137669             :        // DQ (11/28/2009): Changed return type from "int" to "bool"
  137670             :           bool  isForward() const;
  137671             :           void setForward();
  137672             :           void unsetForward();
  137673             : 
  137674             :        // this is to distinguish cases like this
  137675             :        // class-P pvar;            -- isNameOnly=1
  137676             :        // class-P { int a; } pvar; -- isNameOnly=0
  137677             : 
  137678             :        // DQ (11/28/2009): Changed return type from "int" to "bool"
  137679             :           bool  isNameOnly() const;
  137680             :           void setNameOnly();
  137681             :           void unsetNameOnly();
  137682             : 
  137683             :        // DQ (11/28/2009): Changed return type from "int" to "bool"
  137684             :           bool  isExternBrace() const;
  137685             :           void setExternBrace();
  137686             :           void unsetExternBrace();
  137687             : 
  137688             :        // this is to distinguish cases like this
  137689             :        // class P var;
  137690             :        // P var;
  137691             : 
  137692             :        // DQ (11/28/2009): Changed return type from "int" to "bool"
  137693             :           bool  skipElaborateType() const;
  137694             :           void setSkipElaborateType();
  137695             :           void unsetSkipElaborateType();
  137696             : 
  137697             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  137698             :           virtual SgName get_mangled_name(void) const;
  137699             : 
  137700             :      protected:
  137701             :        // Protected support for templates used within SgTemplateInstantiationDeclaration
  137702             :        // SgTemplateInstantiationFunctionDecl and SgTemplateInstantiationMemberFunctionDecl
  137703             :           void resetTemplateNameSupport ( bool & nameResetFromMangledForm, SgName & name );
  137704             : 
  137705             :        // Tests names generated specific to templates (such names should exclude
  137706             :        // "<<" and ">>" since that will cause generated code to not compile).
  137707             :           void testForBadGenerateTemplateName( const std::string & name );
  137708             : 
  137709             :        // Support for skipping the "<" and ">" when the output of the template argument list would be empty.
  137710             :           bool skipEmptyTemplateArgumentListTest ( SgFunctionDeclaration* functionDeclaration );
  137711             : 
  137712             :        // DQ (12/30/2009): Uncomment this so that it can be placed into a class and not be a global scope (or file scope function).
  137713             :        // DQ (4/28/2005): names of template functions are setup with a name of the form "foo<int>"
  137714             :        // and must be converted to a name that can be more easily mangled (with out "<" and ">").
  137715             :        // SgName fixupTemplateNameForMangledNameSupport( const SgName & s) const;
  137716             :           SgName fixupTemplateNameForMangledNameSupport( const SgName & s) const;
  137717             : 
  137718             :        // DQ (6/2/2006): Support for name mangling of unnamed classes embedded in
  137719             :        // SgVariableDeclaration and SgTypedefDeclaration.
  137720             :           SgName generate_alternative_name_for_unnamed_declaration ( SgNode* parent ) const;
  137721             : 
  137722             :        // DQ (6/3/2006): Support for unnamed declaration is scopes.
  137723             :           SgName generate_alternative_name_for_unnamed_declaration_in_scope ( SgScopeStatement* scope ) const;
  137724             : 
  137725             :      public:
  137726             : 
  137727             : #if ALT_FIXUP_COPY
  137728             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  137729             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  137730             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  137731             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  137732             : #else
  137733             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  137734             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  137735             : #endif
  137736             : 
  137737             :        // DQ (10/10/2006): Handle qualified name list at the declarations directly, instead of at the types.
  137738             :        // At present these are useful for SgVariableDeclaration and SgTypedefDeclaration, but likely others
  137739             :        // at some point.
  137740             :           SgQualifiedNamePtrList & get_qualifiedNameList();
  137741             :           const SgQualifiedNamePtrList & get_qualifiedNameList() const;
  137742             :           void set_qualifiedNameList( const SgQualifiedNamePtrList & x );
  137743             : 
  137744             :        // DQ (2/10/2007): Added virtual function to make it easier to use this on
  137745             :        // the specific declarations where it is meaningful (ones associated with symbols).
  137746             :        // This appears to have already been done a few days ago!
  137747             :        // virtual SgSymbol* get_symbol_from_symbol_table();
  137748             : 
  137749             :        // DQ (2/11/2007): Added to support the virtual function in derived classes
  137750             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  137751             : 
  137752             :        // DQ (7/4/2007): Get the declaration for which get_symbol_from_symbol_table() returns a valid pointer.
  137753             :           SgDeclarationStatement* get_declaration_associated_with_symbol() const;
  137754             : 
  137755             :        // DQ (7/4/2007): Search for a symbol from either the first non-defining
  137756             :        // declaration or the defining declaration (this should always return a valid symbol).
  137757             :           SgSymbol* search_for_symbol_from_symbol_table() const;
  137758             : 
  137759             :        // DQ (7/26/2007): report which declarations can be expected to have an associated symbol,
  137760             :        // since not all declarations are associated with a symbol.  This is mostly used for internal
  137761             :        // testing so that we can know when to verify rules about associated symbols.
  137762             :           bool hasAssociatedSymbol() const;
  137763             : 
  137764             :        // DQ (5/29/2011): Added to support for new qualified name generation
  137765             :       //! This function generates the qualified name prefix to be used with the named declaration (only applied to restricted set of declarations where name qualification can be used).
  137766             :           SgName get_qualified_name_prefix() const;
  137767             : 
  137768             :        // DQ (12/23/2011): This is part of work to reorganize the templates in the AST (and a recent redesign of this work, because the first approach could not be supported in more complex code examples).
  137769             :       //! This function returns the template name (taken from the template declaration for the class, function, member function, or variable template declaration).
  137770             :           SgName get_template_name() const;
  137771             : 
  137772             :        // DQ (1/26/2013): Added non-automatically generated version so that additional testing could be added.
  137773             :           SgDeclarationStatement* get_definingDeclaration() const;
  137774             :           void set_definingDeclaration(SgDeclarationStatement* definingDeclaration);
  137775             :           SgDeclarationStatement* get_firstNondefiningDeclaration() const;
  137776             :           void set_firstNondefiningDeclaration(SgDeclarationStatement* firstNondefiningDeclaration);
  137777             : 
  137778             :        // DQ (8/21/2013): Added function to support calling get_type() from a SgDeclarationStatement so that the
  137779             :        // template low-level symbol table support function would compile cleanly.  Note that it is an error to
  137780             :        // call this function and it is not a virtual function that will cause derived class versions to be called
  137781             :        // where appropriate (and it is not always appropriate, e.g a SgNamespaceDeclaration has no assocated SgType).
  137782             :           SgType* get_type() const;
  137783             : 
  137784             :        // DQ (3/10/2018): Adding support to output the name, useful for debugging template instantiations which have more complex name using template arguments.
  137785             :           std::string unparseNameToString();
  137786             : 
  137787             : 
  137788             : 
  137789             : // End of memberFunctionString
  137790             : // Start of memberFunctionString
  137791             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  137792             : 
  137793             : // *** COMMON CODE SECTION BEGINS HERE ***
  137794             : 
  137795             :     public:
  137796             : 
  137797             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  137798             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  137799             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  137800             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  137801             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  137802             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  137803             : 
  137804             :       /*! \brief returns a string representing the class name */
  137805             :           virtual std::string class_name() const override;
  137806             : 
  137807             :       /*! \brief returns new style SageIII enum values */
  137808             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  137809             : 
  137810             :       /*! \brief static variant value */
  137811             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  137812             :        // static const VariantT static_variant = V_SgDeclarationStatement;
  137813             :           enum { static_variant = V_SgDeclarationStatement };
  137814             : 
  137815             :        /* the generated cast function */
  137816             :       /*! \brief Casts pointer from base class to derived class */
  137817             :           ROSE_DLL_API friend       SgDeclarationStatement* isSgDeclarationStatement(       SgNode * s );
  137818             : 
  137819             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  137820             :           ROSE_DLL_API friend const SgDeclarationStatement* isSgDeclarationStatement( const SgNode * s );
  137821             : 
  137822             :      // ******************************************
  137823             :      // * Memory Pool / New / Delete
  137824             :      // ******************************************
  137825             : 
  137826             :      public:
  137827             :           /// \private
  137828             :           static const unsigned pool_size; //
  137829             :           /// \private
  137830             :           static std::vector<unsigned char *> pools; //
  137831             :           /// \private
  137832             :           static SgDeclarationStatement * next_node; // 
  137833             : 
  137834             :           /// \private
  137835             :           static unsigned long initializeStorageClassArray(SgDeclarationStatementStorageClass *); //
  137836             : 
  137837             :           /// \private
  137838             :           static void clearMemoryPool(); //
  137839             :           static void deleteMemoryPool(); //
  137840             : 
  137841             :           /// \private
  137842             :           static void extendMemoryPoolForFileIO(); //
  137843             : 
  137844             :           /// \private
  137845             :           static SgDeclarationStatement * getPointerFromGlobalIndex(unsigned long); //
  137846             :           /// \private
  137847             :           static SgDeclarationStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  137848             : 
  137849             :           /// \private
  137850             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  137851             :           /// \private
  137852             :           static void resetValidFreepointers(); //
  137853             :           /// \private
  137854             :           static unsigned long getNumberOfLastValidPointer(); //
  137855             : 
  137856             : 
  137857             : #if defined(INLINE_FUNCTIONS)
  137858             :       /*! \brief returns pointer to newly allocated IR node */
  137859             :           inline void *operator new (size_t size);
  137860             : #else
  137861             :       /*! \brief returns pointer to newly allocated IR node */
  137862             :           void *operator new (size_t size);
  137863             : #endif
  137864             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  137865             :           void operator delete (void* pointer, size_t size);
  137866             : 
  137867             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  137868           0 :           void operator delete (void* pointer)
  137869             :              {
  137870             :             // This is the generated delete operator...
  137871           0 :                SgDeclarationStatement::operator delete (pointer,sizeof(SgDeclarationStatement));
  137872             :              }
  137873             : 
  137874             :       /*! \brief Returns the total number of IR nodes of this type */
  137875             :           static size_t numberOfNodes();
  137876             : 
  137877             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  137878             :           static size_t memoryUsage();
  137879             : 
  137880             :       // End of scope which started in IR nodes specific code 
  137881             :       /* */
  137882             : 
  137883             :       /* name Internal Functions
  137884             :           \brief Internal functions ... incomplete-documentation
  137885             : 
  137886             :           These functions have been made public as part of the design, but they are suggested for internal use 
  137887             :           or by particularly knowledgeable users for specialized tools or applications.
  137888             : 
  137889             :           \internal We could not make these private because they are required by user for special purposes. And 
  137890             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  137891             :          
  137892             :        */
  137893             : 
  137894             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  137895             :        // overridden in every class by *generated* implementation
  137896             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  137897             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  137898             :        // MS: 06/28/02 container of names of variables or container indices 
  137899             :        // used used in the traversal to access AST successor nodes
  137900             :        // overridden in every class by *generated* implementation
  137901             :       /*! \brief container of names of variables or container indices used used in the traversal
  137902             :           to access AST successor nodes overridden in every class by *generated* implementation */
  137903             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  137904             : 
  137905             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  137906             :        // than all the vector copies. The implementation for these functions is generated for each class.
  137907             :       /*! \brief return number of children in the traversal successor list */
  137908             :           virtual size_t get_numberOfTraversalSuccessors() override;
  137909             :       /*! \brief index-based access to traversal successors by index number */
  137910             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  137911             :       /*! \brief index-based access to traversal successors by child node */
  137912             :           virtual size_t get_childIndex(SgNode *child) override;
  137913             : 
  137914             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  137915             :        // MS: 08/16/2002 method for generating RTI information
  137916             :       /*! \brief return C++ Runtime-Time-Information */
  137917             :           virtual RTIReturnType roseRTI() override;
  137918             : #endif
  137919             :       /* */
  137920             : 
  137921             : 
  137922             : 
  137923             :       /* name Deprecated Functions
  137924             :           \brief Deprecated functions ... incomplete-documentation
  137925             : 
  137926             :           These functions have been deprecated from use.
  137927             :        */
  137928             :       /* */
  137929             : 
  137930             :       /*! returns a C style string (char*) representing the class name */
  137931             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  137932             : 
  137933             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  137934             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  137935             : #if 0
  137936             :       /*! returns old style Sage II enum values */
  137937             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  137938             :       /*! returns old style Sage II enum values */
  137939             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  137940             : #endif
  137941             :       /* */
  137942             : 
  137943             : 
  137944             : 
  137945             : 
  137946             :      public:
  137947             :       /* name Traversal Support Functions
  137948             :           \brief Traversal support functions ... incomplete-documentation
  137949             : 
  137950             :           These functions have been made public as part of the design, but they are suggested for internal use 
  137951             :           or by particularly knowledgable users for specialized tools or applications.
  137952             :        */
  137953             :       /* */
  137954             : 
  137955             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  137956             :        // (inferior to ROSE traversal mechanism, experimental).
  137957             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  137958             :        */
  137959             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  137960             : 
  137961             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  137962             :       /*! \brief support for the classic visitor pattern done in GoF */
  137963             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  137964             : 
  137965             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  137966             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  137967             :        */
  137968             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  137969             : 
  137970             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  137971             :        */
  137972             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  137973             : 
  137974             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  137975             :        // This traversal helps support internal tools that call static member functions.
  137976             :        // note: this function operates on the memory pools.
  137977             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  137978             :        */
  137979             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  137980             :       /* */
  137981             : 
  137982             : 
  137983             :      public:
  137984             :       /* name Memory Allocation Functions
  137985             :           \brief Memory allocations functions ... incomplete-documentation
  137986             : 
  137987             :           These functions have been made public as part of the design, but they are suggested for internal use 
  137988             :           or by particularly knowledgable users for specialized tools or applications.
  137989             :        */
  137990             :       /* */
  137991             : 
  137992             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  137993             : 
  137994             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  137995             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  137996             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  137997             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  137998             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  137999             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  138000             :           being used with the AST File I/O mechanism.
  138001             :        */
  138002             :           virtual bool isInMemoryPool() override;
  138003             : 
  138004             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  138005             : 
  138006             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  138007             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  138008             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  138009             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  138010             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  138011             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  138012             :           being used with the AST File I/O mechanism.
  138013             :        */
  138014             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  138015             : 
  138016             :       // DQ (4/30/2006): Modified to be a const function.
  138017             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  138018             : 
  138019             :           This functions is part of general support for many possible tools to operate 
  138020             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  138021             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  138022             :           less than the set of pointers used by the AST file I/O. This is part of
  138023             :           work implemented by Andreas, and support tools such as the AST graph generation.
  138024             : 
  138025             :           \warning This function can return unexpected data members and thus the 
  138026             :                    order and the number of elements is unpredicable and subject 
  138027             :                    to change.
  138028             : 
  138029             :           \returns STL vector of pairs of SgNode* and strings
  138030             :        */
  138031             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  138032             : 
  138033             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  138034             : 
  138035             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  138036             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  138037             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  138038             : 
  138039             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  138040             :                    and subject to change.
  138041             :        */
  138042             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  138043             : 
  138044             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  138045             : 
  138046             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  138047             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  138048             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  138049             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  138050             : 
  138051             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  138052             : 
  138053             :           \returns long
  138054             :        */
  138055             :           virtual long getChildIndex( SgNode* childNode ) const override;
  138056             : 
  138057             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  138058             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  138059             :       /* \brief Constructor for use by AST File I/O Mechanism
  138060             : 
  138061             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  138062             :           which obtained via fast binary file I/O from disk.
  138063             :        */
  138064             :        // SgDeclarationStatement( SgDeclarationStatementStorageClass& source );
  138065             : 
  138066             : 
  138067             : 
  138068             : 
  138069             : 
  138070             :  // JH (10/24/2005): methods added to support the ast file IO
  138071             :     private:
  138072             : 
  138073             :       /* name AST Memory Allocation Support Functions
  138074             :           \brief Memory allocations support....
  138075             : 
  138076             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  138077             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  138078             :           and support the AST File I/O Mechanism.
  138079             :        */
  138080             :       /* */
  138081             : 
  138082             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  138083             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  138084             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  138085             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  138086             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  138087             :           a correspinding one in the AST_FILE_IO class!
  138088             :        */
  138089             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  138090             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  138091             :       /* \brief Typedef used for low level memory access.
  138092             :        */
  138093             :        // typedef unsigned char* TestType;
  138094             : 
  138095             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  138096             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  138097             :       /* \brief Typedef used to hold memory addresses as values.
  138098             :        */
  138099             :        // typedef unsigned long  AddressType;
  138100             : 
  138101             : 
  138102             : 
  138103             :        // necessary, to have direct access to the p_freepointer and the private methods !
  138104             :       /*! \brief friend class declaration to support AST File I/O */
  138105             :           friend class AST_FILE_IO;
  138106             : 
  138107             :       /*! \brief friend class declaration to support AST File I/O */
  138108             :           friend class SgDeclarationStatementStorageClass;
  138109             : 
  138110             :       /*! \brief friend class declaration to support AST File I/O */
  138111             :           friend class AstSpecificDataManagingClass;
  138112             : 
  138113             :       /*! \brief friend class declaration to support AST File I/O */
  138114             :           friend class AstSpecificDataManagingClassStorageClass;
  138115             :     public:
  138116             :       /*! \brief IR node constructor to support AST File I/O */
  138117             :           SgDeclarationStatement( const SgDeclarationStatementStorageClass& source );
  138118             : 
  138119             :  // private: // JJW hack
  138120             :        /*
  138121             :           name AST Memory Allocation Support Variables
  138122             :           Memory allocations support variables 
  138123             : 
  138124             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  138125             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  138126             :           and support the AST File I/O Mechanism.
  138127             :        */
  138128             :       /* */
  138129             : 
  138130             :     public:
  138131             : 
  138132             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  138133             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  138134             :       // virtual SgNode* addRegExpAttribute();
  138135             :       /*! \brief Support for AST matching using regular expression.
  138136             : 
  138137             :           This support is incomplete and the subject of current research to define 
  138138             :           RegEx trees to support inexact matching.
  138139             :        */
  138140             :           SgDeclarationStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  138141             : 
  138142             : // *** COMMON CODE SECTION ENDS HERE ***
  138143             : 
  138144             : 
  138145             : // End of memberFunctionString
  138146             : // Start of memberFunctionString
  138147             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  138148             : 
  138149             :      // the generated cast function
  138150             :      // friend ROSE_DLL_API SgDeclarationStatement* isSgDeclarationStatement ( SgNode* s );
  138151             : 
  138152             :           typedef SgStatement base_node_type;
  138153             : 
  138154             : 
  138155             : // End of memberFunctionString
  138156             : // Start of memberFunctionString
  138157             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  138158             : 
  138159             :           void post_construction_initialization() override;
  138160             : 
  138161             : 
  138162             : // End of memberFunctionString
  138163             : 
  138164             :      public: 
  138165             :          unsigned int get_decl_attributes() const;
  138166             :          void set_decl_attributes(unsigned int decl_attributes);
  138167             : 
  138168             :      public: 
  138169             :          std::string get_linkage() const;
  138170             :          void set_linkage(std::string linkage);
  138171             : 
  138172             :      public: 
  138173             :          const SgDeclarationModifier&  get_declarationModifier() const;
  138174             :          SgDeclarationModifier& get_declarationModifier(); 
  138175             : 
  138176             :      public: 
  138177             :          bool get_nameOnly() const;
  138178             :          void set_nameOnly(bool nameOnly);
  138179             : 
  138180             :      public: 
  138181             :          bool get_forward() const;
  138182             :          void set_forward(bool forward);
  138183             : 
  138184             :      public: 
  138185             :          bool get_externBrace() const;
  138186             :          void set_externBrace(bool externBrace);
  138187             : 
  138188             :      public: 
  138189             :          bool get_skipElaborateType() const;
  138190             :          void set_skipElaborateType(bool skipElaborateType);
  138191             : 
  138192             : 
  138193             : 
  138194             : 
  138195             :      public: 
  138196             :          std::string get_binding_label() const;
  138197             :          void set_binding_label(std::string binding_label);
  138198             : 
  138199             :      public: 
  138200             :          SgDeclarationScope* get_declarationScope() const;
  138201             :          void set_declarationScope(SgDeclarationScope* declarationScope);
  138202             : 
  138203             :      public: 
  138204             :          bool get_unparse_template_ast() const;
  138205             :          void set_unparse_template_ast(bool unparse_template_ast);
  138206             : 
  138207             : 
  138208             :      public: 
  138209             :          virtual ~SgDeclarationStatement();
  138210             : 
  138211             : 
  138212             :      public: 
  138213             :          SgDeclarationStatement(Sg_File_Info* startOfConstruct ); 
  138214             :          SgDeclarationStatement(); 
  138215             : 
  138216             :     protected:
  138217             : // Start of memberFunctionString
  138218             : unsigned int p_decl_attributes;
  138219             :           
  138220             : // End of memberFunctionString
  138221             : // Start of memberFunctionString
  138222             : std::string p_linkage;
  138223             :           
  138224             : // End of memberFunctionString
  138225             : // Start of memberFunctionString
  138226             : SgDeclarationModifier p_declarationModifier;
  138227             :           
  138228             : // End of memberFunctionString
  138229             : // Start of memberFunctionString
  138230             : bool p_nameOnly;
  138231             :           
  138232             : // End of memberFunctionString
  138233             : // Start of memberFunctionString
  138234             : bool p_forward;
  138235             :           
  138236             : // End of memberFunctionString
  138237             : // Start of memberFunctionString
  138238             : bool p_externBrace;
  138239             :           
  138240             : // End of memberFunctionString
  138241             : // Start of memberFunctionString
  138242             : bool p_skipElaborateType;
  138243             :           
  138244             : // End of memberFunctionString
  138245             : // Start of memberFunctionString
  138246             : SgDeclarationStatement* p_definingDeclaration;
  138247             :           
  138248             : // End of memberFunctionString
  138249             : // Start of memberFunctionString
  138250             : SgDeclarationStatement* p_firstNondefiningDeclaration;
  138251             :           
  138252             : // End of memberFunctionString
  138253             : // Start of memberFunctionString
  138254             : SgQualifiedNamePtrList p_qualifiedNameList;
  138255             :           
  138256             : // End of memberFunctionString
  138257             : // Start of memberFunctionString
  138258             : std::string p_binding_label;
  138259             :           
  138260             : // End of memberFunctionString
  138261             : // Start of memberFunctionString
  138262             : SgDeclarationScope* p_declarationScope;
  138263             :           
  138264             : // End of memberFunctionString
  138265             : // Start of memberFunctionString
  138266             : bool p_unparse_template_ast;
  138267             :           
  138268             : // End of memberFunctionString
  138269             : 
  138270             :     friend struct Rose::Traits::generated::describe_node_t<SgDeclarationStatement>;
  138271             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, unsigned int,&SgDeclarationStatement::p_decl_attributes>;
  138272             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, std::string,&SgDeclarationStatement::p_linkage>;
  138273             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, SgDeclarationModifier,&SgDeclarationStatement::p_declarationModifier>;
  138274             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, bool,&SgDeclarationStatement::p_nameOnly>;
  138275             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, bool,&SgDeclarationStatement::p_forward>;
  138276             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, bool,&SgDeclarationStatement::p_externBrace>;
  138277             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, bool,&SgDeclarationStatement::p_skipElaborateType>;
  138278             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, SgDeclarationStatement*,&SgDeclarationStatement::p_definingDeclaration>;
  138279             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, SgDeclarationStatement*,&SgDeclarationStatement::p_firstNondefiningDeclaration>;
  138280             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, SgQualifiedNamePtrList,&SgDeclarationStatement::p_qualifiedNameList>;
  138281             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, std::string,&SgDeclarationStatement::p_binding_label>;
  138282             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, SgDeclarationScope*,&SgDeclarationStatement::p_declarationScope>;
  138283             :     friend struct Rose::Traits::generated::describe_field_t<SgDeclarationStatement, bool,&SgDeclarationStatement::p_unparse_template_ast>;
  138284             : 
  138285             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  138286             : 
  138287             : 
  138288             :    };
  138289             : #endif
  138290             : 
  138291             : // postdeclarations for SgDeclarationStatement
  138292             : 
  138293             : /* #line 138294 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  138294             : /* #line 1060 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  138295             : 
  138296             : // The following template function requires the definition of SgBasicBlock, so
  138297             : // we put it in the POSTDECLARATION.
  138298             : 
  138299             : #if 1
  138300             : // DQ (6/15/2019): Renamed function parameter to make code more clear for debugging.
  138301             : // Note: Rose_STL_Container<Elemtype*> will be either an STL vector of SgStatement* or SgDeclarationStatement*.
  138302             : 
  138303             : // DQ (12/30/2009): This has been moved to the header file since it was a used in
  138304             : // several places and could not be supported in the source file now that we
  138305             : // support the generation of smaller and more numerous files by ROSETTA.
  138306             : // template <class Elemtype> inline bool
  138307             : // StatementListInsertChild( SgStatement *parent, Rose_STL_Container<Elemtype*>& l,  SgStatement *target,
  138308             : //                        SgStatement *n, bool inFront, bool extractFromBasicBlock, bool removeCurrent)
  138309             : template <class Elemtype>
  138310             : inline bool
  138311     1281825 : StatementListInsertChild( SgStatement *parent, Rose_STL_Container<Elemtype*>& statement_or_declaration_container,  SgStatement *target,
  138312             :                           SgStatement *n, bool inFront, bool extractFromBasicBlock, bool removeCurrent)
  138313             :    {
  138314             :   // DQ (4/3/2012): Simple globally visible function to call (used for debugging in ROSE).
  138315             :   // void testAstForUniqueNodes ( SgNode* node );
  138316             : 
  138317             : #if 0
  138318             :      printf ("In StatementListInsertChild: statement_or_declaration_container.size() = %" PRIuPTR " \n",statement_or_declaration_container.size());
  138319             :      printf ("In StatementListInsertChild: inFront                                   = %s \n",inFront ? "true" : "false");
  138320             :      printf ("In StatementListInsertChild: parent                                    = %p \n",parent);
  138321             :      printf ("In StatementListInsertChild: target                                    = %p \n",target);
  138322             :      printf ("In StatementListInsertChild: n                                         = %p \n",n);
  138323             : #endif
  138324             : 
  138325     1281825 :      ROSE_ASSERT(parent != NULL);
  138326     1281825 :      ROSE_ASSERT(target != NULL);
  138327             : 
  138328             :   // DQ (7/19/2005): Milind says that we can comment this out (because the remove function
  138329             :   // calls the replace function which calls this insert function with n == NULL)
  138330             :   // This function's name is misleading and could be more clear.
  138331             :   // ROSE_ASSERT(n != NULL);
  138332             : 
  138333     1281825 :      bool targetLocated = find(statement_or_declaration_container.begin(),statement_or_declaration_container.end(),target) != statement_or_declaration_container.end();
  138334     1281825 :      if (targetLocated == false)
  138335             :         {
  138336           0 :           printf ("Error: target statement = %p not found in list of statements provided. \n",target);
  138337           0 :           ROSE_ASSERT(false);
  138338             :         }
  138339             :   // ROSE_ASSERT (find(statement_or_declaration_container.begin(),statement_or_declaration_container.end(),target) != statement_or_declaration_container.end());
  138340             : 
  138341     1281825 :      unsigned int size = statement_or_declaration_container.size();
  138342  2224845507 :      for (unsigned int p = 0; p < size; ++p)
  138343             :         {
  138344             :        // printf ("Looping through the list of statements! p = %p \n",statement_or_declaration_container[p]);
  138345  2224845507 :           if ( statement_or_declaration_container[p] == target )
  138346             :              {
  138347     1281825 :                if (removeCurrent)
  138348             :                   {
  138349             :                  // DQ (9/27/2007): Reported as an error by STL debugging mode, fixed as part of move from std::list to std::vector uniformly in ROSE.
  138350        1855 :                     statement_or_declaration_container.erase(statement_or_declaration_container.begin() + p);
  138351             : #if 0
  138352             :                     if (SgProject::get_verbose() >= 1)
  138353             :                        {
  138354             :                          printf ("In StatementListInsertChild: test 1: Supress marking parent = %p = %s as isModified \n",parent,parent->class_name().c_str());
  138355             :                        }
  138356             : #endif
  138357             :                  // DQ (4/16/2015): Supress marking parent as isModified (we might want to mark this as containing a transformation).
  138358             :                  // parent->set_isModified(true);
  138359             :                   }
  138360             : 
  138361     1281825 :                if (!inFront)
  138362     1279030 :                     ++p;
  138363             : #if 0
  138364             :             // DQ (12/6/2004): This interfers with the execution of the EDG/Sage III translation!
  138365             :             // DQ (12/5/2004): There should be a valid scope (set before passing the statement to this function!)
  138366             :                ROSE_ASSERT(n == NULL || n->get_scope() != NULL);
  138367             : #endif
  138368             : #if 0
  138369             :             // DQ (3/9/2012): Added debugging code for testing test2004_77.C.
  138370             :                SgDeclarationStatement* declarationStatement = isSgDeclarationStatement(n);
  138371             :                if (declarationStatement != NULL)
  138372             :                   {
  138373             :                     printf ("In Cxx_Grammar.h StatementListInsertChild(): declarationStatement = %p = %s declarationStatement->get_firstNondefiningDeclaration() = %p declarationStatement->get_definingDeclaration() = %p \n",
  138374             :                          declarationStatement,declarationStatement->class_name().c_str(),declarationStatement->get_firstNondefiningDeclaration(),declarationStatement->get_definingDeclaration());
  138375             :                   }
  138376             : #endif
  138377             : 
  138378     1281825 :                SgBasicBlock *bn = extractFromBasicBlock? isSgBasicBlock(n) : NULL;
  138379           0 :                if (bn == NULL)
  138380             :                   {
  138381     1258640 :                     assert(n == 0 || dynamic_cast<Elemtype*>(n) != 0);
  138382     1281825 :                     if (n != 0)
  138383             :                        {
  138384             :                       // DQ (10/17/2004): We MUST set the parent here, the string based AST rewrite mechanism
  138385             :                       // requires this semantics. Previously it was removed as part of the movement toward an
  138386             :                       // initialization of the parent pointers within a post processing phase.  This post-processing
  138387             :                       // phase was a result of an attempt (successful) to remove side-effects from the set_xxx
  138388             :                       // access functions generated by ROSETTA.  At some point parents will be be initialized within
  138389             :                       // the EDG/Sage interface, but we will be more careful how it is done and not reintroduce the
  138390             :                       // previous side-effects back into the access functions.
  138391             : #if 0
  138392             :                       // n->set_parent(parent);
  138393             :                          printf ("*** WARNING: In Cxx_Grammar.h StatementListInsertChild(): (part 1) parent now set only if already NULL (statement = %p parent = %p statement = %s) \n",n,n->get_parent(),n->class_name().c_str());
  138394             :                          if (n->get_parent() == NULL)
  138395             :                             {
  138396             :                               n->set_parent(parent);
  138397             :                             }
  138398             : 
  138399             :                       // DQ (3/21/2012): Make sure that it would have been set to the same value.
  138400             :                          if (parent != n->get_parent())
  138401             :                             {
  138402             :                               ROSE_ASSERT(parent != NULL);
  138403             :                               ROSE_ASSERT(n->get_parent());
  138404             :                               printf ("parent = %d = %s while n= %p = %s \n",parent,parent->class_name().c_str(),n,n->class_name().c_str());
  138405             :                               printf ("parent = %d = %s while n->get_parent() = %p = %s \n",parent,parent->class_name().c_str(),n->get_parent(),n->get_parent()->class_name().c_str());
  138406             :                             }
  138407             :                          ROSE_ASSERT(parent == n->get_parent());
  138408             : #else
  138409             :                       // DQ (3/21/2012): We always want to set the parent based on the structure, sometimes it is built
  138410             :                       // and initialy defined with a parent based on the scope, since at that point the structural location
  138411             :                       // for the statement might not be know.  but we update that here and set the parent to match the
  138412             :                       // structure of the AST (ALWAYS).
  138413             : 
  138414     1280881 :                          if (n->get_parent() == NULL)
  138415             :                             {
  138416             : #if 0
  138417             :                               printf ("In Cxx_Grammar.h StatementListInsertChild(): n->get_parent() == NULL for statement = %p = %s it will be set to parent = %p = %s \n",n,n->class_name().c_str(),parent,parent->class_name().c_str());
  138418             : #endif
  138419             :                             }
  138420             :                            else
  138421             :                             {
  138422     1280765 :                               if (parent != n->get_parent())
  138423             :                                  {
  138424       21563 :                                    ROSE_ASSERT(parent != NULL);
  138425       21563 :                                    ROSE_ASSERT(n->get_parent());
  138426             : #ifdef ROSE_DEBUG_NEW_EDG_ROSE_CONNECTION
  138427             :                                    printf ("In Cxx_Grammar.h StatementListInsertChild(): n->get_parent() != NULL and is set incorrectly to %p = %s for statement = %p = %s it will be set to parent = %p = %s \n",
  138428             :                                         n,n->class_name().c_str(),n->get_parent(),n->get_parent()->class_name().c_str(),parent,parent->class_name().c_str());
  138429             : #endif
  138430             :                                  }
  138431             :                             }
  138432             : 
  138433     1280881 :                          n->set_parent(parent);
  138434             : 
  138435             : #endif
  138436             :                       // DQ (12/5/2004): Later in the day I discovered that this allows member functions to be defined
  138437             :                       // as have a scope which is not a class definition (which is an error caught in the unparser!).
  138438             :                       // So it would be good to make the scope correctly (this could be a start at marking all other
  138439             :                       // pointers within a new node added by the rewrite system correctly!).  I think the solution is
  138440             :                       // to set the scope before it gets to this function since this is a general mechanism for inserting
  138441             :                       // statements and not one which should have such a side-effect as setting or resetting the scope
  138442             :                       // of statements containing explicit scope pointers.
  138443             : 
  138444             :                       // DQ (6/24/2006): The scope is not explicitly represented and this is not required
  138445             :                       // ("n->set_scope(parentScope);" was already commented out so this is unused code).
  138446             : 
  138447             :                       // DQ (12/5/2004): If the scope is stored explicitly then we must also set the scope of the new
  138448             :                       // statement.  But we will not know the scope, so for now derive it structurally (using the parent).
  138449             :                       // But not all statements have a set_scope function, so see if this one does.
  138450     1280881 :                          SgScopeStatement* parentScope = isSgScopeStatement(parent);
  138451             : 
  138452     1280881 :                          if (parentScope == NULL)
  138453           0 :                               parentScope = parent->get_scope();
  138454             : 
  138455             :                       // This is simple error checking
  138456     1280881 :                          ROSE_ASSERT(parentScope != NULL);
  138457             :                       // n->set_scope(parentScope);
  138458             : 
  138459     1280881 :                          statement_or_declaration_container.insert(statement_or_declaration_container.begin() + p, static_cast<Elemtype*>(n));
  138460             : #if 0
  138461             :                          if (SgProject::get_verbose() >= 1)
  138462             :                             {
  138463             :                               printf ("In StatementListInsertChild: test 2: Supress marking parent = %p = %s as isModified \n",parent,parent->class_name().c_str());
  138464             :                             }
  138465             : #endif
  138466             :                       // DQ (4/16/2015): Supress marking parent as isModified (we might want to mark this as containing a transformation).
  138467             :                       // parent->set_isModified(true);
  138468             : 
  138469             :                       // DQ (4/3/2012): Added test to make sure that the pointers are unique.
  138470             :                       // testAstForUniqueNodes(parentScope);
  138471             :                        }
  138472             :                   }
  138473             :                  else
  138474             :                   { // extract statements from n ,which is a basic block
  138475           0 :                     SgStatementPtrList& nl = bn->get_statements();
  138476           0 :                     for (SgStatementPtrList::iterator pp = nl.begin(); pp != nl.end(); ++pp)
  138477             :                        {
  138478           0 :                          SgStatement* stmt = *pp;
  138479           0 :                          assert(dynamic_cast<Elemtype*>(stmt) != NULL);
  138480             : 
  138481             :                       // DQ (10/17/2004): We MUST set the parent here, see note in true part of conditional (above).
  138482             :                       // stmt->set_parent(parent);
  138483           0 :                          printf ("*** WARNING: In Cxx_Grammar.h StatementListInsertChild(): (part 2) parent now set only if already NULL n->get_parent() = %p \n",n->get_parent());
  138484           0 :                          if (n->get_parent() == NULL)
  138485             :                             {
  138486           0 :                               stmt->set_parent(parent);
  138487             :                             }
  138488             : 
  138489             :                       // DQ (12/5/2004): We MUST set the scope here, see note in true part of conditional (above).
  138490           0 :                          SgScopeStatement* parentScope = isSgScopeStatement(parent);
  138491           0 :                          if (parentScope == NULL)
  138492           0 :                               parentScope = parent->get_scope();
  138493             : 
  138494             :                       // This is simple error checking
  138495           0 :                          ROSE_ASSERT(parentScope != NULL);
  138496             :                       // n->set_scope(parentScope);
  138497             : 
  138498           0 :                          statement_or_declaration_container.insert(statement_or_declaration_container.begin() + p, static_cast<Elemtype*>(stmt));
  138499             : #if 0
  138500             :                          if (SgProject::get_verbose() >= 1)
  138501             :                             {
  138502             :                               printf ("In StatementListInsertChild: test 3: Supress marking parent = %p = %s as isModified \n",parent,parent->class_name().c_str());
  138503             :                             }
  138504             : #endif
  138505             :                       // DQ (4/16/2015): Supress marking parent as isModified (we might want to mark this as containing a transformation).
  138506             :                       // parent->set_isModified(true);
  138507             : 
  138508             :                       // DQ (4/3/2012): Added test to make sure that the pointers are unique.
  138509             :                       // testAstForUniqueNodes(parentScope);
  138510             :                        }
  138511             :                   }
  138512             : 
  138513     1281825 :                return true;
  138514             :              }
  138515             :         }
  138516             : 
  138517             :      return false;
  138518             :    }
  138519             : #endif
  138520             : 
  138521             : // HEADER_ BASIC_BLOCK_ POSTDECLARATION_END
  138522             : 
  138523             : 
  138524             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  138525             : 
  138526             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  138527             : 
  138528             : 
  138529             : /* #line 138530 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  138530             : 
  138531             : 
  138532             : 
  138533             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  138534             : 
  138535             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  138536             : //      This code is automatically generated for each 
  138537             : //      terminal and non-terminal within the defined 
  138538             : //      grammar.  There is a simple way to change the 
  138539             : //      code to fix bugs etc.  See the ROSE README file
  138540             : //      for directions.
  138541             : 
  138542             : // tps: (02/22/2010): Adding DLL export requirements
  138543             : #include "rosedll.h"
  138544             : 
  138545             : // predeclarations for SgFunctionParameterList
  138546             : 
  138547             : /* #line 138548 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  138548             : 
  138549             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  138550             : 
  138551             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  138552             : 
  138553             : #if 1
  138554             : // Class Definition for SgFunctionParameterList
  138555             : class ROSE_DLL_API SgFunctionParameterList  : public SgDeclarationStatement
  138556             :    {
  138557             :      public:
  138558             : 
  138559             : 
  138560             : /* #line 138561 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  138561             : 
  138562             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  138563             : // Start of memberFunctionString
  138564             : /* #line 1637 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  138565             : 
  138566             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  138567             : 
  138568             :      public:
  138569             :           virtual void append_arg  ( SgInitializedName* element );
  138570             :           virtual void prepend_arg ( SgInitializedName* element );
  138571             : 
  138572             :      public:
  138573             :        // New functions added
  138574             :        // SgInitializedNamePtrList::iterator append_arg  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  138575             :        // SgInitializedNamePtrList::iterator prepend_arg ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  138576             : 
  138577             :        // SgInitializedNamePtrList::iterator insert_arg  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  138578             : 
  138579             : 
  138580             :      public:
  138581             : 
  138582             : 
  138583             : 
  138584             : 
  138585             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  138586             :           virtual SgName get_mangled_name(void) const override;
  138587             : 
  138588             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  138589             :           virtual unsigned int cfgIndexForEnd() const override;
  138590             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  138591             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  138592             : #endif
  138593             : 
  138594             : #if ALT_FIXUP_COPY
  138595             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  138596             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  138597             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  138598             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  138599             : #else
  138600             :        // DQ (10/6/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  138601             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  138602             : #endif
  138603             : 
  138604             : 
  138605             : 
  138606             : // End of memberFunctionString
  138607             : // Start of memberFunctionString
  138608             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  138609             : 
  138610             : // *** COMMON CODE SECTION BEGINS HERE ***
  138611             : 
  138612             :     public:
  138613             : 
  138614             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  138615             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  138616             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  138617             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  138618             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  138619             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  138620             : 
  138621             :       /*! \brief returns a string representing the class name */
  138622             :           virtual std::string class_name() const override;
  138623             : 
  138624             :       /*! \brief returns new style SageIII enum values */
  138625             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  138626             : 
  138627             :       /*! \brief static variant value */
  138628             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  138629             :        // static const VariantT static_variant = V_SgFunctionParameterList;
  138630             :           enum { static_variant = V_SgFunctionParameterList };
  138631             : 
  138632             :        /* the generated cast function */
  138633             :       /*! \brief Casts pointer from base class to derived class */
  138634             :           ROSE_DLL_API friend       SgFunctionParameterList* isSgFunctionParameterList(       SgNode * s );
  138635             : 
  138636             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  138637             :           ROSE_DLL_API friend const SgFunctionParameterList* isSgFunctionParameterList( const SgNode * s );
  138638             : 
  138639             :      // ******************************************
  138640             :      // * Memory Pool / New / Delete
  138641             :      // ******************************************
  138642             : 
  138643             :      public:
  138644             :           /// \private
  138645             :           static const unsigned pool_size; //
  138646             :           /// \private
  138647             :           static std::vector<unsigned char *> pools; //
  138648             :           /// \private
  138649             :           static SgFunctionParameterList * next_node; // 
  138650             : 
  138651             :           /// \private
  138652             :           static unsigned long initializeStorageClassArray(SgFunctionParameterListStorageClass *); //
  138653             : 
  138654             :           /// \private
  138655             :           static void clearMemoryPool(); //
  138656             :           static void deleteMemoryPool(); //
  138657             : 
  138658             :           /// \private
  138659             :           static void extendMemoryPoolForFileIO(); //
  138660             : 
  138661             :           /// \private
  138662             :           static SgFunctionParameterList * getPointerFromGlobalIndex(unsigned long); //
  138663             :           /// \private
  138664             :           static SgFunctionParameterList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  138665             : 
  138666             :           /// \private
  138667             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  138668             :           /// \private
  138669             :           static void resetValidFreepointers(); //
  138670             :           /// \private
  138671             :           static unsigned long getNumberOfLastValidPointer(); //
  138672             : 
  138673             : 
  138674             : #if defined(INLINE_FUNCTIONS)
  138675             :       /*! \brief returns pointer to newly allocated IR node */
  138676             :           inline void *operator new (size_t size);
  138677             : #else
  138678             :       /*! \brief returns pointer to newly allocated IR node */
  138679             :           void *operator new (size_t size);
  138680             : #endif
  138681             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  138682             :           void operator delete (void* pointer, size_t size);
  138683             : 
  138684             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  138685     1225990 :           void operator delete (void* pointer)
  138686             :              {
  138687             :             // This is the generated delete operator...
  138688     1225990 :                SgFunctionParameterList::operator delete (pointer,sizeof(SgFunctionParameterList));
  138689             :              }
  138690             : 
  138691             :       /*! \brief Returns the total number of IR nodes of this type */
  138692             :           static size_t numberOfNodes();
  138693             : 
  138694             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  138695             :           static size_t memoryUsage();
  138696             : 
  138697             :       // End of scope which started in IR nodes specific code 
  138698             :       /* */
  138699             : 
  138700             :       /* name Internal Functions
  138701             :           \brief Internal functions ... incomplete-documentation
  138702             : 
  138703             :           These functions have been made public as part of the design, but they are suggested for internal use 
  138704             :           or by particularly knowledgeable users for specialized tools or applications.
  138705             : 
  138706             :           \internal We could not make these private because they are required by user for special purposes. And 
  138707             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  138708             :          
  138709             :        */
  138710             : 
  138711             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  138712             :        // overridden in every class by *generated* implementation
  138713             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  138714             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  138715             :        // MS: 06/28/02 container of names of variables or container indices 
  138716             :        // used used in the traversal to access AST successor nodes
  138717             :        // overridden in every class by *generated* implementation
  138718             :       /*! \brief container of names of variables or container indices used used in the traversal
  138719             :           to access AST successor nodes overridden in every class by *generated* implementation */
  138720             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  138721             : 
  138722             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  138723             :        // than all the vector copies. The implementation for these functions is generated for each class.
  138724             :       /*! \brief return number of children in the traversal successor list */
  138725             :           virtual size_t get_numberOfTraversalSuccessors() override;
  138726             :       /*! \brief index-based access to traversal successors by index number */
  138727             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  138728             :       /*! \brief index-based access to traversal successors by child node */
  138729             :           virtual size_t get_childIndex(SgNode *child) override;
  138730             : 
  138731             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  138732             :        // MS: 08/16/2002 method for generating RTI information
  138733             :       /*! \brief return C++ Runtime-Time-Information */
  138734             :           virtual RTIReturnType roseRTI() override;
  138735             : #endif
  138736             :       /* */
  138737             : 
  138738             : 
  138739             : 
  138740             :       /* name Deprecated Functions
  138741             :           \brief Deprecated functions ... incomplete-documentation
  138742             : 
  138743             :           These functions have been deprecated from use.
  138744             :        */
  138745             :       /* */
  138746             : 
  138747             :       /*! returns a C style string (char*) representing the class name */
  138748             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  138749             : 
  138750             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  138751             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  138752             : #if 0
  138753             :       /*! returns old style Sage II enum values */
  138754             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  138755             :       /*! returns old style Sage II enum values */
  138756             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  138757             : #endif
  138758             :       /* */
  138759             : 
  138760             : 
  138761             : 
  138762             : 
  138763             :      public:
  138764             :       /* name Traversal Support Functions
  138765             :           \brief Traversal support functions ... incomplete-documentation
  138766             : 
  138767             :           These functions have been made public as part of the design, but they are suggested for internal use 
  138768             :           or by particularly knowledgable users for specialized tools or applications.
  138769             :        */
  138770             :       /* */
  138771             : 
  138772             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  138773             :        // (inferior to ROSE traversal mechanism, experimental).
  138774             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  138775             :        */
  138776             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  138777             : 
  138778             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  138779             :       /*! \brief support for the classic visitor pattern done in GoF */
  138780             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  138781             : 
  138782             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  138783             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  138784             :        */
  138785             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  138786             : 
  138787             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  138788             :        */
  138789             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  138790             : 
  138791             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  138792             :        // This traversal helps support internal tools that call static member functions.
  138793             :        // note: this function operates on the memory pools.
  138794             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  138795             :        */
  138796             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  138797             :       /* */
  138798             : 
  138799             : 
  138800             :      public:
  138801             :       /* name Memory Allocation Functions
  138802             :           \brief Memory allocations functions ... incomplete-documentation
  138803             : 
  138804             :           These functions have been made public as part of the design, but they are suggested for internal use 
  138805             :           or by particularly knowledgable users for specialized tools or applications.
  138806             :        */
  138807             :       /* */
  138808             : 
  138809             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  138810             : 
  138811             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  138812             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  138813             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  138814             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  138815             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  138816             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  138817             :           being used with the AST File I/O mechanism.
  138818             :        */
  138819             :           virtual bool isInMemoryPool() override;
  138820             : 
  138821             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  138822             : 
  138823             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  138824             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  138825             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  138826             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  138827             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  138828             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  138829             :           being used with the AST File I/O mechanism.
  138830             :        */
  138831             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  138832             : 
  138833             :       // DQ (4/30/2006): Modified to be a const function.
  138834             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  138835             : 
  138836             :           This functions is part of general support for many possible tools to operate 
  138837             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  138838             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  138839             :           less than the set of pointers used by the AST file I/O. This is part of
  138840             :           work implemented by Andreas, and support tools such as the AST graph generation.
  138841             : 
  138842             :           \warning This function can return unexpected data members and thus the 
  138843             :                    order and the number of elements is unpredicable and subject 
  138844             :                    to change.
  138845             : 
  138846             :           \returns STL vector of pairs of SgNode* and strings
  138847             :        */
  138848             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  138849             : 
  138850             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  138851             : 
  138852             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  138853             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  138854             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  138855             : 
  138856             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  138857             :                    and subject to change.
  138858             :        */
  138859             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  138860             : 
  138861             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  138862             : 
  138863             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  138864             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  138865             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  138866             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  138867             : 
  138868             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  138869             : 
  138870             :           \returns long
  138871             :        */
  138872             :           virtual long getChildIndex( SgNode* childNode ) const override;
  138873             : 
  138874             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  138875             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  138876             :       /* \brief Constructor for use by AST File I/O Mechanism
  138877             : 
  138878             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  138879             :           which obtained via fast binary file I/O from disk.
  138880             :        */
  138881             :        // SgFunctionParameterList( SgFunctionParameterListStorageClass& source );
  138882             : 
  138883             : 
  138884             : 
  138885             : 
  138886             : 
  138887             :  // JH (10/24/2005): methods added to support the ast file IO
  138888             :     private:
  138889             : 
  138890             :       /* name AST Memory Allocation Support Functions
  138891             :           \brief Memory allocations support....
  138892             : 
  138893             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  138894             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  138895             :           and support the AST File I/O Mechanism.
  138896             :        */
  138897             :       /* */
  138898             : 
  138899             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  138900             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  138901             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  138902             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  138903             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  138904             :           a correspinding one in the AST_FILE_IO class!
  138905             :        */
  138906             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  138907             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  138908             :       /* \brief Typedef used for low level memory access.
  138909             :        */
  138910             :        // typedef unsigned char* TestType;
  138911             : 
  138912             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  138913             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  138914             :       /* \brief Typedef used to hold memory addresses as values.
  138915             :        */
  138916             :        // typedef unsigned long  AddressType;
  138917             : 
  138918             : 
  138919             : 
  138920             :        // necessary, to have direct access to the p_freepointer and the private methods !
  138921             :       /*! \brief friend class declaration to support AST File I/O */
  138922             :           friend class AST_FILE_IO;
  138923             : 
  138924             :       /*! \brief friend class declaration to support AST File I/O */
  138925             :           friend class SgFunctionParameterListStorageClass;
  138926             : 
  138927             :       /*! \brief friend class declaration to support AST File I/O */
  138928             :           friend class AstSpecificDataManagingClass;
  138929             : 
  138930             :       /*! \brief friend class declaration to support AST File I/O */
  138931             :           friend class AstSpecificDataManagingClassStorageClass;
  138932             :     public:
  138933             :       /*! \brief IR node constructor to support AST File I/O */
  138934             :           SgFunctionParameterList( const SgFunctionParameterListStorageClass& source );
  138935             : 
  138936             :  // private: // JJW hack
  138937             :        /*
  138938             :           name AST Memory Allocation Support Variables
  138939             :           Memory allocations support variables 
  138940             : 
  138941             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  138942             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  138943             :           and support the AST File I/O Mechanism.
  138944             :        */
  138945             :       /* */
  138946             : 
  138947             :     public:
  138948             : 
  138949             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  138950             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  138951             :       // virtual SgNode* addRegExpAttribute();
  138952             :       /*! \brief Support for AST matching using regular expression.
  138953             : 
  138954             :           This support is incomplete and the subject of current research to define 
  138955             :           RegEx trees to support inexact matching.
  138956             :        */
  138957             :           SgFunctionParameterList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  138958             : 
  138959             : // *** COMMON CODE SECTION ENDS HERE ***
  138960             : 
  138961             : 
  138962             : // End of memberFunctionString
  138963             : // Start of memberFunctionString
  138964             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  138965             : 
  138966             :      // the generated cast function
  138967             :      // friend ROSE_DLL_API SgFunctionParameterList* isSgFunctionParameterList ( SgNode* s );
  138968             : 
  138969             :           typedef SgDeclarationStatement base_node_type;
  138970             : 
  138971             : 
  138972             : // End of memberFunctionString
  138973             : // Start of memberFunctionString
  138974             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  138975             : 
  138976             :           void post_construction_initialization() override;
  138977             : 
  138978             : 
  138979             : // End of memberFunctionString
  138980             : 
  138981             :      public: 
  138982             :          const SgInitializedNamePtrList&  get_args() const;
  138983             :          SgInitializedNamePtrList& get_args(); 
  138984             : 
  138985             : 
  138986             :      public: 
  138987             :          virtual ~SgFunctionParameterList();
  138988             : 
  138989             : 
  138990             :      public: 
  138991             :          SgFunctionParameterList(Sg_File_Info* startOfConstruct ); 
  138992             :          SgFunctionParameterList(); 
  138993             : 
  138994             :     protected:
  138995             : // Start of memberFunctionString
  138996             : SgInitializedNamePtrList p_args;
  138997             :           
  138998             : // End of memberFunctionString
  138999             : 
  139000             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionParameterList>;
  139001             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionParameterList, SgInitializedNamePtrList,&SgFunctionParameterList::p_args>;
  139002             : 
  139003             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139004             : 
  139005             : 
  139006             :    };
  139007             : #endif
  139008             : 
  139009             : // postdeclarations for SgFunctionParameterList
  139010             : 
  139011             : /* #line 139012 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139012             : 
  139013             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  139014             : 
  139015             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139016             : 
  139017             : 
  139018             : /* #line 139019 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139019             : 
  139020             : 
  139021             : 
  139022             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139023             : 
  139024             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  139025             : //      This code is automatically generated for each 
  139026             : //      terminal and non-terminal within the defined 
  139027             : //      grammar.  There is a simple way to change the 
  139028             : //      code to fix bugs etc.  See the ROSE README file
  139029             : //      for directions.
  139030             : 
  139031             : // tps: (02/22/2010): Adding DLL export requirements
  139032             : #include "rosedll.h"
  139033             : 
  139034             : // predeclarations for SgVariableDeclaration
  139035             : 
  139036             : /* #line 139037 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139037             : 
  139038             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  139039             : 
  139040             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139041             : 
  139042             : #if 1
  139043             : // Class Definition for SgVariableDeclaration
  139044             : class ROSE_DLL_API SgVariableDeclaration  : public SgDeclarationStatement
  139045             :    {
  139046             :      public:
  139047             : 
  139048             : 
  139049             : /* #line 139050 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139050             : 
  139051             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  139052             : // Start of memberFunctionString
  139053             : /* #line 1793 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  139054             : 
  139055             : 
  139056             :       /*! \brief GNU extension for declaration modifiers (multiple values may be specified)
  139057             : 
  139058             :           GNU specific declaration modifiers.
  139059             : 
  139060             :           \internal Only one value can be specified.
  139061             :        */
  139062             :           enum gnu_extension_declaration_attributes_enum
  139063             :              {
  139064             :             // Bit values can support multiple values in a single enum type
  139065             :                e_gnu_attribute_unknown              = 0, /*!< Unknown value (error) */
  139066             :                e_gnu_attribute_unspecified          = 1, /*!< Default value */
  139067             :                e_gnu_attribute__weak__              = 2, /*!< GNU specific attribute for (GNU extension) */
  139068             :                e_gnu_attribute__unused__            = 3, /*!< GNU specific attribute for (GNU extension) */
  139069             :                e_gnu_attribute__deprecated__        = 4, /*!< GNU specific attribute for (GNU extension) */
  139070             :                e_gnu_attribute__nocommon__          = 5, /*!< GNU specific attribute for (GNU extension) */
  139071             :                e_gnu_attribute__transparent_union__ = 6, /*!< GNU specific attribute for (GNU extension) */
  139072             :                e_last_gnu_declaration_attribute /*!< last gnu declaration attribute value (upper bound on range of values, used in error checking) */
  139073             :              };
  139074             : 
  139075             :        // Special constructor (not generated, I don't know why this is here)
  139076             :        // SgVariableDeclaration (Sg_File_Info*, const SgName &, SgType*, SgInitializer*);
  139077             : 
  139078             :        // Special constructor
  139079             :        // SgVariableDeclaration (Sg_File_Info *info, const SgName& var_name,
  139080             :        //                     SgType *type, SgInitializer *initializer = NULL );
  139081             :           SgVariableDeclaration ( Sg_File_Info *info, const SgName& var_name, SgType *type, SgInitializer *initializer = NULL );
  139082             :           SgVariableDeclaration ( const SgName& var_name, SgType *type, SgInitializer *initializer );
  139083             : 
  139084             :        // DQ (11/10/2006): This function is called by the custom written constructors (refactored code to simplify their implementation).
  139085             :           void initializeData(Sg_File_Info *info, const SgName& var_name, SgType *type, SgInitializer *initializer);
  139086             : 
  139087             :        // DQ (7/18/2012): New constructors and initializations to support building a SgVariableDeclaration from an existing SgInitializedName
  139088             :           SgVariableDeclaration( Sg_File_Info *info, SgInitializedName* c_item );
  139089             :           SgVariableDeclaration( SgInitializedName* c_item );
  139090             :           void initializeData(Sg_File_Info *info, SgInitializedName* c_item);
  139091             : 
  139092             :           void setDeclarationOnly() ROSE_DEPRECATED_FUNCTION;
  139093             :           void setExtern() override ROSE_DEPRECATED_FUNCTION;
  139094             :           void setStatic() override ROSE_DEPRECATED_FUNCTION;
  139095             :           SgVariableDefinition *get_definition( SgInitializedName* ditem = 0 );
  139096             :           SgInitializedName *get_decl_item(const SgName&);
  139097             :        // SgInitializedName *get_defn_item(const SgName&);
  139098             : 
  139099             :        // DQ (1/20/2014): This must be a SgValueExp, it is a constant expression ROSE uses a SgValueExp for this).
  139100             :        // SgUnsignedLongVal *get_bitfield();
  139101             :        // void set_bitfield (SgUnsignedLongVal*);
  139102             :           SgExpression* get_bitfield();
  139103             :           void set_bitfield (SgExpression*);
  139104             : 
  139105             :        // Only on the first variable declaration's
  139106             :           int reset_initializer(SgInitializer *);
  139107             : 
  139108             :        // void printVariableName(int);
  139109             :        // void printVariables(SgUnparse_Info&, ostream& os=cout);
  139110             : 
  139111             :           SgStatement *get_next(int &) const;
  139112             : 
  139113             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  139114             :           virtual SgName get_mangled_name(void) const override;
  139115             : 
  139116             :        // DQ (6/1/2006): Get the type (base type if more than one variable) used for all variables in this variable declaration.
  139117             :        // SgType *get_type();
  139118             : 
  139119             :        // DQ (7/19/2005): SgVariableDeclaration should have a structural definition of its scope (based on position in
  139120             :        // source code) while the variables declared should (and do) have a possibly different scope (via name qualification).
  139121             :        // DQ (7/4/2005): implement get_scope to query the initialized names in the initialized name list (SgInitializedNamePtrList)
  139122             :        // without this function we evaluate the scope using a traversal of the parents!
  139123             :        // SgScopeStatement* get_scope(void) const;
  139124             : 
  139125             : // HEADER_LIST_DECLARATIONS
  139126             :      public:
  139127             : #if 0
  139128             :           SgInitializedNamePtrList::iterator append_variable  ( const SgInitializedName & what, SgInitializer* init );
  139129             :           SgInitializedNamePtrList::iterator prepend_variable ( const SgInitializedName & what, SgInitializer* init );
  139130             :           SgInitializedNamePtrList::iterator insert_variable  ( const SgInitializedNamePtrList::iterator & where, const SgInitializedName & what );
  139131             : #else
  139132             :        // DQ (6/1/2004): Changed list to contain pointers to SgInitializedName elements
  139133             :           void append_variable  ( SgInitializedName* what, SgInitializer* init );
  139134             :           void prepend_variable ( SgInitializedName* what, SgInitializer* init );
  139135             :           // void insert_variable  ( const SgInitializedNamePtrList::iterator & where, SgInitializedName* what );
  139136             : #endif
  139137             : 
  139138             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  139139             :           virtual unsigned int cfgIndexForEnd() const override;
  139140             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  139141             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  139142             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  139143             : #endif
  139144             : 
  139145             : #if ALT_FIXUP_COPY
  139146             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  139147             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  139148             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  139149             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  139150             : #else
  139151             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  139152             : #endif
  139153             : 
  139154             :       //! Returns the defining declaration if get_variableDeclarationContainsBaseTypeDefiningDeclaration() is true, otherwise NULL.
  139155             :           SgDeclarationStatement* get_baseTypeDefiningDeclaration() const;
  139156             :           void set_baseTypeDefiningDeclaration(SgDeclarationStatement* d);
  139157             : 
  139158             : #if 0
  139159             :        // This is now stored in the type modifier (I think this is a better implementation)
  139160             : 
  139161             :        // DQ (11/18/2007): Support for Fortran declaration attributes
  139162             :        /* Fortran Specific Declaration Attributes
  139163             :                e_unknown_attribute_spec,
  139164             :                e_accessStatement,
  139165             :                e_allocatableStatement,
  139166             :                e_asynchronousStatement,
  139167             :                e_bindStatement,
  139168             :                e_dataStatement,
  139169             :                e_dimensionStatement,
  139170             :                e_externalStatement,
  139171             :                e_intentStatement,
  139172             :                e_intrinsicStatement,
  139173             :                e_optionalStatement,
  139174             :                e_parameterStatement,
  139175             :                e_pointerStatement,
  139176             :                e_protectedStatement,
  139177             :                e_saveStatement,
  139178             :                e_targetStatement,
  139179             :                e_valueStatement,
  139180             :                e_volatileStatement,
  139181             :                e_last_attribute_spec
  139182             :         */
  139183             : 
  139184             :        // Notes:
  139185             :        //      access_x_Statement could be mapped to C++ access specifiers
  139186             :        //      bind is more complex than just using a flag here
  139187             :        //      dimension details are specified within the SgArrayType, the flag here indicates that it was used in the variable declaration explicitly.
  139188             : 
  139189             :           bool testAccess_private_Attribute() const;
  139190             :           void setAccess_private_Attribute();
  139191             :           void unsetAccess_private_Attribute();
  139192             : 
  139193             :           bool testAccess_protected_Attribute() const;
  139194             :           void setAccess_protected_Attribute();
  139195             :           void unsetAccess_protected_Attribute();
  139196             : 
  139197             :           bool testAccess_public_Attribute() const;
  139198             :           void setAccess_public_Attribute();
  139199             :           void unsetAccess_public_Attribute();
  139200             : 
  139201             :           bool testAllocatableAttribute() const;
  139202             :           void setAllocatableAttribute();
  139203             :           void unsetAllocatableAttribute();
  139204             : 
  139205             :           bool testAsynchronousAttribute() const;
  139206             :           void setAsynchronousAttribute();
  139207             :           void unsetAsynchronousAttribute();
  139208             : 
  139209             :           bool testBindAttribute() const;
  139210             :           void setBindAttribute();
  139211             :           void unsetBindAttribute();
  139212             : 
  139213             :           bool testDataAttribute() const;
  139214             :           void setDataAttribute();
  139215             :           void unsetDataAttribute();
  139216             : 
  139217             :           bool testDimensionAttribute() const;
  139218             :           void setDimensionAttribute();
  139219             :           void unsetDimensionAttribute();
  139220             : 
  139221             :           bool testExternalAttribute() const;
  139222             :           void setExternalAttribute();
  139223             :           void unsetExternalAttribute();
  139224             : 
  139225             :           bool testIntent_in_Attribute() const;
  139226             :           void setIntent_in_Attribute();
  139227             :           void unsetIntent_in_Attribute();
  139228             : 
  139229             :           bool testIntent_out_Attribute() const;
  139230             :           void setIntent_out_Attribute();
  139231             :           void unsetIntent_out_Attribute();
  139232             : 
  139233             :           bool testIntent_inout_Attribute() const;
  139234             :           void setIntent_inout_Attribute();
  139235             :           void unsetIntent_inout_Attribute();
  139236             : 
  139237             :           bool testIntrinsicAttribute() const;
  139238             :           void setIntrinsicAttribute();
  139239             :           void unsetIntrinsicAttribute();
  139240             : 
  139241             :           bool testOptionalAttribute() const;
  139242             :           void setOptionalAttribute();
  139243             :           void unsetOptionalAttribute();
  139244             : 
  139245             :           bool testParameterAttribute() const;
  139246             :           void setParameterAttribute();
  139247             :           void unsetParameterAttribute();
  139248             : 
  139249             :           bool testPointerAttribute() const;
  139250             :           void setPointerAttribute();
  139251             :           void unsetPointerAttribute();
  139252             : 
  139253             :           bool testProtectedAttribute() const;
  139254             :           void setProtectedAttribute();
  139255             :           void unsetProtectedAttribute();
  139256             : 
  139257             :           bool testSaveAttribute() const;
  139258             :           void setSaveAttribute();
  139259             :           void unsetSaveAttribute();
  139260             : 
  139261             :           bool testTargetAttribute() const;
  139262             :           void setTargetAttribute();
  139263             :           void unsetTargetAttribute();
  139264             : 
  139265             :           bool testValueAttribute() const;
  139266             :           void setValueAttribute();
  139267             :           void unsetValueAttribute();
  139268             : 
  139269             :           bool testVolatileAttribute() const;
  139270             :           void setVolatileAttribute();
  139271             :           void unsetVolatileAttribute();
  139272             : #endif
  139273             : 
  139274             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  139275             :           int get_name_qualification_length() const;
  139276             :           void set_name_qualification_length(int name_qualification_length);
  139277             : 
  139278             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  139279             :           bool get_type_elaboration_required() const;
  139280             :           void set_type_elaboration_required(bool type_elaboration_required);
  139281             : 
  139282             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  139283             :           bool get_global_qualification_required() const;
  139284             :           void set_global_qualification_required(bool global_qualification_required);
  139285             : 
  139286             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  139287             :           bool get_requiresGlobalNameQualificationOnType () const;
  139288             :           void set_requiresGlobalNameQualificationOnType ( bool requiresGlobalNameQualificationOnType );
  139289             : 
  139290             :   // DQ (12/21/2011): Modified to support SgTemplateVariableDeclaration to use this function.
  139291             :   // private:
  139292             :      protected:
  139293             :        // GB (09/25/2007): Added this function as part of the traversal island fix.
  139294             :           SgDeclarationStatement *compute_baseTypeDefiningDeclaration() const;
  139295             : 
  139296             : 
  139297             : 
  139298             : // End of memberFunctionString
  139299             : // Start of memberFunctionString
  139300             : /* #line 930 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  139301             : 
  139302             : 
  139303             :      public:
  139304             :           bool isSpecialization() const;
  139305             :           bool isPartialSpecialization() const;
  139306             : 
  139307             : 
  139308             : 
  139309             : // End of memberFunctionString
  139310             : // Start of memberFunctionString
  139311             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  139312             : 
  139313             : // *** COMMON CODE SECTION BEGINS HERE ***
  139314             : 
  139315             :     public:
  139316             : 
  139317             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  139318             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  139319             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  139320             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  139321             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  139322             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  139323             : 
  139324             :       /*! \brief returns a string representing the class name */
  139325             :           virtual std::string class_name() const override;
  139326             : 
  139327             :       /*! \brief returns new style SageIII enum values */
  139328             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  139329             : 
  139330             :       /*! \brief static variant value */
  139331             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  139332             :        // static const VariantT static_variant = V_SgVariableDeclaration;
  139333             :           enum { static_variant = V_SgVariableDeclaration };
  139334             : 
  139335             :        /* the generated cast function */
  139336             :       /*! \brief Casts pointer from base class to derived class */
  139337             :           ROSE_DLL_API friend       SgVariableDeclaration* isSgVariableDeclaration(       SgNode * s );
  139338             : 
  139339             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  139340             :           ROSE_DLL_API friend const SgVariableDeclaration* isSgVariableDeclaration( const SgNode * s );
  139341             : 
  139342             :      // ******************************************
  139343             :      // * Memory Pool / New / Delete
  139344             :      // ******************************************
  139345             : 
  139346             :      public:
  139347             :           /// \private
  139348             :           static const unsigned pool_size; //
  139349             :           /// \private
  139350             :           static std::vector<unsigned char *> pools; //
  139351             :           /// \private
  139352             :           static SgVariableDeclaration * next_node; // 
  139353             : 
  139354             :           /// \private
  139355             :           static unsigned long initializeStorageClassArray(SgVariableDeclarationStorageClass *); //
  139356             : 
  139357             :           /// \private
  139358             :           static void clearMemoryPool(); //
  139359             :           static void deleteMemoryPool(); //
  139360             : 
  139361             :           /// \private
  139362             :           static void extendMemoryPoolForFileIO(); //
  139363             : 
  139364             :           /// \private
  139365             :           static SgVariableDeclaration * getPointerFromGlobalIndex(unsigned long); //
  139366             :           /// \private
  139367             :           static SgVariableDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  139368             : 
  139369             :           /// \private
  139370             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  139371             :           /// \private
  139372             :           static void resetValidFreepointers(); //
  139373             :           /// \private
  139374             :           static unsigned long getNumberOfLastValidPointer(); //
  139375             : 
  139376             : 
  139377             : #if defined(INLINE_FUNCTIONS)
  139378             :       /*! \brief returns pointer to newly allocated IR node */
  139379             :           inline void *operator new (size_t size);
  139380             : #else
  139381             :       /*! \brief returns pointer to newly allocated IR node */
  139382             :           void *operator new (size_t size);
  139383             : #endif
  139384             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  139385             :           void operator delete (void* pointer, size_t size);
  139386             : 
  139387             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  139388        2589 :           void operator delete (void* pointer)
  139389             :              {
  139390             :             // This is the generated delete operator...
  139391        2589 :                SgVariableDeclaration::operator delete (pointer,sizeof(SgVariableDeclaration));
  139392             :              }
  139393             : 
  139394             :       /*! \brief Returns the total number of IR nodes of this type */
  139395             :           static size_t numberOfNodes();
  139396             : 
  139397             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  139398             :           static size_t memoryUsage();
  139399             : 
  139400             :       // End of scope which started in IR nodes specific code 
  139401             :       /* */
  139402             : 
  139403             :       /* name Internal Functions
  139404             :           \brief Internal functions ... incomplete-documentation
  139405             : 
  139406             :           These functions have been made public as part of the design, but they are suggested for internal use 
  139407             :           or by particularly knowledgeable users for specialized tools or applications.
  139408             : 
  139409             :           \internal We could not make these private because they are required by user for special purposes. And 
  139410             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  139411             :          
  139412             :        */
  139413             : 
  139414             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  139415             :        // overridden in every class by *generated* implementation
  139416             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  139417             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  139418             :        // MS: 06/28/02 container of names of variables or container indices 
  139419             :        // used used in the traversal to access AST successor nodes
  139420             :        // overridden in every class by *generated* implementation
  139421             :       /*! \brief container of names of variables or container indices used used in the traversal
  139422             :           to access AST successor nodes overridden in every class by *generated* implementation */
  139423             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  139424             : 
  139425             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  139426             :        // than all the vector copies. The implementation for these functions is generated for each class.
  139427             :       /*! \brief return number of children in the traversal successor list */
  139428             :           virtual size_t get_numberOfTraversalSuccessors() override;
  139429             :       /*! \brief index-based access to traversal successors by index number */
  139430             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  139431             :       /*! \brief index-based access to traversal successors by child node */
  139432             :           virtual size_t get_childIndex(SgNode *child) override;
  139433             : 
  139434             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  139435             :        // MS: 08/16/2002 method for generating RTI information
  139436             :       /*! \brief return C++ Runtime-Time-Information */
  139437             :           virtual RTIReturnType roseRTI() override;
  139438             : #endif
  139439             :       /* */
  139440             : 
  139441             : 
  139442             : 
  139443             :       /* name Deprecated Functions
  139444             :           \brief Deprecated functions ... incomplete-documentation
  139445             : 
  139446             :           These functions have been deprecated from use.
  139447             :        */
  139448             :       /* */
  139449             : 
  139450             :       /*! returns a C style string (char*) representing the class name */
  139451             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  139452             : 
  139453             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  139454             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  139455             : #if 0
  139456             :       /*! returns old style Sage II enum values */
  139457             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  139458             :       /*! returns old style Sage II enum values */
  139459             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  139460             : #endif
  139461             :       /* */
  139462             : 
  139463             : 
  139464             : 
  139465             : 
  139466             :      public:
  139467             :       /* name Traversal Support Functions
  139468             :           \brief Traversal support functions ... incomplete-documentation
  139469             : 
  139470             :           These functions have been made public as part of the design, but they are suggested for internal use 
  139471             :           or by particularly knowledgable users for specialized tools or applications.
  139472             :        */
  139473             :       /* */
  139474             : 
  139475             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  139476             :        // (inferior to ROSE traversal mechanism, experimental).
  139477             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  139478             :        */
  139479             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  139480             : 
  139481             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  139482             :       /*! \brief support for the classic visitor pattern done in GoF */
  139483             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  139484             : 
  139485             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  139486             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  139487             :        */
  139488             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  139489             : 
  139490             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  139491             :        */
  139492             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  139493             : 
  139494             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  139495             :        // This traversal helps support internal tools that call static member functions.
  139496             :        // note: this function operates on the memory pools.
  139497             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  139498             :        */
  139499             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  139500             :       /* */
  139501             : 
  139502             : 
  139503             :      public:
  139504             :       /* name Memory Allocation Functions
  139505             :           \brief Memory allocations functions ... incomplete-documentation
  139506             : 
  139507             :           These functions have been made public as part of the design, but they are suggested for internal use 
  139508             :           or by particularly knowledgable users for specialized tools or applications.
  139509             :        */
  139510             :       /* */
  139511             : 
  139512             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  139513             : 
  139514             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  139515             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  139516             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  139517             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  139518             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  139519             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  139520             :           being used with the AST File I/O mechanism.
  139521             :        */
  139522             :           virtual bool isInMemoryPool() override;
  139523             : 
  139524             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  139525             : 
  139526             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  139527             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  139528             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  139529             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  139530             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  139531             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  139532             :           being used with the AST File I/O mechanism.
  139533             :        */
  139534             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  139535             : 
  139536             :       // DQ (4/30/2006): Modified to be a const function.
  139537             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  139538             : 
  139539             :           This functions is part of general support for many possible tools to operate 
  139540             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  139541             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  139542             :           less than the set of pointers used by the AST file I/O. This is part of
  139543             :           work implemented by Andreas, and support tools such as the AST graph generation.
  139544             : 
  139545             :           \warning This function can return unexpected data members and thus the 
  139546             :                    order and the number of elements is unpredicable and subject 
  139547             :                    to change.
  139548             : 
  139549             :           \returns STL vector of pairs of SgNode* and strings
  139550             :        */
  139551             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  139552             : 
  139553             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  139554             : 
  139555             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  139556             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  139557             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  139558             : 
  139559             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  139560             :                    and subject to change.
  139561             :        */
  139562             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  139563             : 
  139564             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  139565             : 
  139566             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  139567             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  139568             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  139569             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  139570             : 
  139571             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  139572             : 
  139573             :           \returns long
  139574             :        */
  139575             :           virtual long getChildIndex( SgNode* childNode ) const override;
  139576             : 
  139577             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  139578             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  139579             :       /* \brief Constructor for use by AST File I/O Mechanism
  139580             : 
  139581             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  139582             :           which obtained via fast binary file I/O from disk.
  139583             :        */
  139584             :        // SgVariableDeclaration( SgVariableDeclarationStorageClass& source );
  139585             : 
  139586             : 
  139587             : 
  139588             : 
  139589             : 
  139590             :  // JH (10/24/2005): methods added to support the ast file IO
  139591             :     private:
  139592             : 
  139593             :       /* name AST Memory Allocation Support Functions
  139594             :           \brief Memory allocations support....
  139595             : 
  139596             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  139597             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  139598             :           and support the AST File I/O Mechanism.
  139599             :        */
  139600             :       /* */
  139601             : 
  139602             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  139603             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  139604             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  139605             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  139606             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  139607             :           a correspinding one in the AST_FILE_IO class!
  139608             :        */
  139609             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  139610             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  139611             :       /* \brief Typedef used for low level memory access.
  139612             :        */
  139613             :        // typedef unsigned char* TestType;
  139614             : 
  139615             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  139616             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  139617             :       /* \brief Typedef used to hold memory addresses as values.
  139618             :        */
  139619             :        // typedef unsigned long  AddressType;
  139620             : 
  139621             : 
  139622             : 
  139623             :        // necessary, to have direct access to the p_freepointer and the private methods !
  139624             :       /*! \brief friend class declaration to support AST File I/O */
  139625             :           friend class AST_FILE_IO;
  139626             : 
  139627             :       /*! \brief friend class declaration to support AST File I/O */
  139628             :           friend class SgVariableDeclarationStorageClass;
  139629             : 
  139630             :       /*! \brief friend class declaration to support AST File I/O */
  139631             :           friend class AstSpecificDataManagingClass;
  139632             : 
  139633             :       /*! \brief friend class declaration to support AST File I/O */
  139634             :           friend class AstSpecificDataManagingClassStorageClass;
  139635             :     public:
  139636             :       /*! \brief IR node constructor to support AST File I/O */
  139637             :           SgVariableDeclaration( const SgVariableDeclarationStorageClass& source );
  139638             : 
  139639             :  // private: // JJW hack
  139640             :        /*
  139641             :           name AST Memory Allocation Support Variables
  139642             :           Memory allocations support variables 
  139643             : 
  139644             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  139645             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  139646             :           and support the AST File I/O Mechanism.
  139647             :        */
  139648             :       /* */
  139649             : 
  139650             :     public:
  139651             : 
  139652             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  139653             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  139654             :       // virtual SgNode* addRegExpAttribute();
  139655             :       /*! \brief Support for AST matching using regular expression.
  139656             : 
  139657             :           This support is incomplete and the subject of current research to define 
  139658             :           RegEx trees to support inexact matching.
  139659             :        */
  139660             :           SgVariableDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  139661             : 
  139662             : // *** COMMON CODE SECTION ENDS HERE ***
  139663             : 
  139664             : 
  139665             : // End of memberFunctionString
  139666             : // Start of memberFunctionString
  139667             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  139668             : 
  139669             :      // the generated cast function
  139670             :      // friend ROSE_DLL_API SgVariableDeclaration* isSgVariableDeclaration ( SgNode* s );
  139671             : 
  139672             :           typedef SgDeclarationStatement base_node_type;
  139673             : 
  139674             : 
  139675             : // End of memberFunctionString
  139676             : // Start of memberFunctionString
  139677             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  139678             : 
  139679             :           void post_construction_initialization() override;
  139680             : 
  139681             : 
  139682             : // End of memberFunctionString
  139683             : 
  139684             : 
  139685             :      public: 
  139686             :          const SgInitializedNamePtrList&  get_variables() const;
  139687             :          SgInitializedNamePtrList& get_variables(); 
  139688             : 
  139689             :      public: 
  139690             :          bool get_variableDeclarationContainsBaseTypeDefiningDeclaration() const;
  139691             :          void set_variableDeclarationContainsBaseTypeDefiningDeclaration(bool variableDeclarationContainsBaseTypeDefiningDeclaration);
  139692             : 
  139693             :      public: 
  139694             :          SgDeclarationStatement::template_specialization_enum get_specialization() const;
  139695             :          void set_specialization(SgDeclarationStatement::template_specialization_enum specialization);
  139696             : 
  139697             : 
  139698             :      public: 
  139699             :          std::string get_gnu_extension_section() const;
  139700             :          void set_gnu_extension_section(std::string gnu_extension_section);
  139701             : 
  139702             :      public: 
  139703             :          std::string get_gnu_extension_alias() const;
  139704             :          void set_gnu_extension_alias(std::string gnu_extension_alias);
  139705             : 
  139706             :      public: 
  139707             :          unsigned short get_gnu_extension_initialization_priority() const;
  139708             :          void set_gnu_extension_initialization_priority(unsigned short gnu_extension_initialization_priority);
  139709             : 
  139710             :      public: 
  139711             :          SgDeclarationStatement::gnu_extension_visability_attribute_enum get_gnu_extension_visability() const;
  139712             :          void set_gnu_extension_visability(SgDeclarationStatement::gnu_extension_visability_attribute_enum gnu_extension_visability);
  139713             : 
  139714             :      public: 
  139715             :          SgVariableDeclaration::gnu_extension_declaration_attributes_enum get_gnu_extension_declaration_attribute() const;
  139716             :          void set_gnu_extension_declaration_attribute(SgVariableDeclaration::gnu_extension_declaration_attributes_enum gnu_extension_declaration_attribute);
  139717             : 
  139718             : 
  139719             : 
  139720             : 
  139721             :      public: 
  139722             :          bool get_isAssociatedWithDeclarationList() const;
  139723             :          void set_isAssociatedWithDeclarationList(bool isAssociatedWithDeclarationList);
  139724             : 
  139725             :      public: 
  139726             :          bool get_isFirstDeclarationOfDeclarationList() const;
  139727             :          void set_isFirstDeclarationOfDeclarationList(bool isFirstDeclarationOfDeclarationList);
  139728             : 
  139729             :      public: 
  139730             :          bool get_is_thread_local() const;
  139731             :          void set_is_thread_local(bool is_thread_local);
  139732             : 
  139733             :      public: 
  139734             :          bool get_is_constexpr() const;
  139735             :          void set_is_constexpr(bool is_constexpr);
  139736             : 
  139737             :      public: 
  139738             :          bool get_builtFromUseOnly() const;
  139739             :          void set_builtFromUseOnly(bool builtFromUseOnly);
  139740             : 
  139741             : 
  139742             :      public: 
  139743             :          virtual ~SgVariableDeclaration();
  139744             : 
  139745             : 
  139746             :      public: 
  139747             :          SgVariableDeclaration(Sg_File_Info* startOfConstruct ); 
  139748             :          SgVariableDeclaration(); 
  139749             : 
  139750             :     protected:
  139751             : // Start of memberFunctionString
  139752             : SgDeclarationStatement* p_baseTypeDefiningDeclaration;
  139753             :           
  139754             : // End of memberFunctionString
  139755             : // Start of memberFunctionString
  139756             : SgInitializedNamePtrList p_variables;
  139757             :           
  139758             : // End of memberFunctionString
  139759             : // Start of memberFunctionString
  139760             : bool p_variableDeclarationContainsBaseTypeDefiningDeclaration;
  139761             :           
  139762             : // End of memberFunctionString
  139763             : // Start of memberFunctionString
  139764             : SgDeclarationStatement::template_specialization_enum p_specialization;
  139765             :           
  139766             : // End of memberFunctionString
  139767             : // Start of memberFunctionString
  139768             : bool p_requiresGlobalNameQualificationOnType;
  139769             :           
  139770             : // End of memberFunctionString
  139771             : // Start of memberFunctionString
  139772             : std::string p_gnu_extension_section;
  139773             :           
  139774             : // End of memberFunctionString
  139775             : // Start of memberFunctionString
  139776             : std::string p_gnu_extension_alias;
  139777             :           
  139778             : // End of memberFunctionString
  139779             : // Start of memberFunctionString
  139780             : unsigned short p_gnu_extension_initialization_priority;
  139781             :           
  139782             : // End of memberFunctionString
  139783             : // Start of memberFunctionString
  139784             : SgDeclarationStatement::gnu_extension_visability_attribute_enum p_gnu_extension_visability;
  139785             :           
  139786             : // End of memberFunctionString
  139787             : // Start of memberFunctionString
  139788             : SgVariableDeclaration::gnu_extension_declaration_attributes_enum p_gnu_extension_declaration_attribute;
  139789             :           
  139790             : // End of memberFunctionString
  139791             : // Start of memberFunctionString
  139792             : int p_name_qualification_length;
  139793             :           
  139794             : // End of memberFunctionString
  139795             : // Start of memberFunctionString
  139796             : bool p_type_elaboration_required;
  139797             :           
  139798             : // End of memberFunctionString
  139799             : // Start of memberFunctionString
  139800             : bool p_global_qualification_required;
  139801             :           
  139802             : // End of memberFunctionString
  139803             : // Start of memberFunctionString
  139804             : bool p_isAssociatedWithDeclarationList;
  139805             :           
  139806             : // End of memberFunctionString
  139807             : // Start of memberFunctionString
  139808             : bool p_isFirstDeclarationOfDeclarationList;
  139809             :           
  139810             : // End of memberFunctionString
  139811             : // Start of memberFunctionString
  139812             : bool p_is_thread_local;
  139813             :           
  139814             : // End of memberFunctionString
  139815             : // Start of memberFunctionString
  139816             : bool p_is_constexpr;
  139817             :           
  139818             : // End of memberFunctionString
  139819             : // Start of memberFunctionString
  139820             : bool p_builtFromUseOnly;
  139821             :           
  139822             : // End of memberFunctionString
  139823             : 
  139824             :     friend struct Rose::Traits::generated::describe_node_t<SgVariableDeclaration>;
  139825             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, SgDeclarationStatement*,&SgVariableDeclaration::p_baseTypeDefiningDeclaration>;
  139826             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, SgInitializedNamePtrList,&SgVariableDeclaration::p_variables>;
  139827             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_variableDeclarationContainsBaseTypeDefiningDeclaration>;
  139828             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, SgDeclarationStatement::template_specialization_enum,&SgVariableDeclaration::p_specialization>;
  139829             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_requiresGlobalNameQualificationOnType>;
  139830             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, std::string,&SgVariableDeclaration::p_gnu_extension_section>;
  139831             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, std::string,&SgVariableDeclaration::p_gnu_extension_alias>;
  139832             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, unsigned short,&SgVariableDeclaration::p_gnu_extension_initialization_priority>;
  139833             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, SgDeclarationStatement::gnu_extension_visability_attribute_enum,&SgVariableDeclaration::p_gnu_extension_visability>;
  139834             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, SgVariableDeclaration::gnu_extension_declaration_attributes_enum,&SgVariableDeclaration::p_gnu_extension_declaration_attribute>;
  139835             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, int,&SgVariableDeclaration::p_name_qualification_length>;
  139836             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_type_elaboration_required>;
  139837             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_global_qualification_required>;
  139838             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_isAssociatedWithDeclarationList>;
  139839             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_isFirstDeclarationOfDeclarationList>;
  139840             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_is_thread_local>;
  139841             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_is_constexpr>;
  139842             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDeclaration, bool,&SgVariableDeclaration::p_builtFromUseOnly>;
  139843             : 
  139844             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139845             : 
  139846             : 
  139847             :    };
  139848             : #endif
  139849             : 
  139850             : // postdeclarations for SgVariableDeclaration
  139851             : 
  139852             : /* #line 139853 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139853             : 
  139854             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  139855             : 
  139856             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139857             : 
  139858             : 
  139859             : /* #line 139860 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139860             : 
  139861             : 
  139862             : 
  139863             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139864             : 
  139865             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  139866             : //      This code is automatically generated for each 
  139867             : //      terminal and non-terminal within the defined 
  139868             : //      grammar.  There is a simple way to change the 
  139869             : //      code to fix bugs etc.  See the ROSE README file
  139870             : //      for directions.
  139871             : 
  139872             : // tps: (02/22/2010): Adding DLL export requirements
  139873             : #include "rosedll.h"
  139874             : 
  139875             : // predeclarations for SgTemplateVariableDeclaration
  139876             : 
  139877             : /* #line 139878 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139878             : 
  139879             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  139880             : 
  139881             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  139882             : 
  139883             : #if 1
  139884             : // Class Definition for SgTemplateVariableDeclaration
  139885             : class ROSE_DLL_API SgTemplateVariableDeclaration  : public SgVariableDeclaration
  139886             :    {
  139887             :      public:
  139888             : 
  139889             : 
  139890             : /* #line 139891 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  139891             : 
  139892             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  139893             : // Start of memberFunctionString
  139894             : /* #line 2974 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  139895             : 
  139896             : 
  139897             :           typedef SgDeclarationStatement instantiation_kind_t;
  139898             : 
  139899             :        // DQ (12/28/2011): We need a constructor similar to the base class.
  139900             :           SgTemplateVariableDeclaration ( const SgName& var_name, SgType *type, SgInitializer *initializer );
  139901             : 
  139902             : // DQ (10/5/2014): This is now wrong because we now include rose_config.h before processing the
  139903             : // files generated from this file.  This change was required to support the ATerm libraries.
  139904             : // BH (11/13/2015) on windows this caused incosistent defines of this
  139905             : // so that it was not defined in the .h but used in the cxx file
  139906             :      private:
  139907             :        // DQ (12/29/2011): This is added to support backward compatability.
  139908             :           SgDeclarationStatement *compute_baseTypeDefiningDeclaration() const;
  139909             : 
  139910             : 
  139911             : 
  139912             : // End of memberFunctionString
  139913             : // Start of memberFunctionString
  139914             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  139915             : 
  139916             : // *** COMMON CODE SECTION BEGINS HERE ***
  139917             : 
  139918             :     public:
  139919             : 
  139920             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  139921             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  139922             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  139923             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  139924             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  139925             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  139926             : 
  139927             :       /*! \brief returns a string representing the class name */
  139928             :           virtual std::string class_name() const override;
  139929             : 
  139930             :       /*! \brief returns new style SageIII enum values */
  139931             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  139932             : 
  139933             :       /*! \brief static variant value */
  139934             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  139935             :        // static const VariantT static_variant = V_SgTemplateVariableDeclaration;
  139936             :           enum { static_variant = V_SgTemplateVariableDeclaration };
  139937             : 
  139938             :        /* the generated cast function */
  139939             :       /*! \brief Casts pointer from base class to derived class */
  139940             :           ROSE_DLL_API friend       SgTemplateVariableDeclaration* isSgTemplateVariableDeclaration(       SgNode * s );
  139941             : 
  139942             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  139943             :           ROSE_DLL_API friend const SgTemplateVariableDeclaration* isSgTemplateVariableDeclaration( const SgNode * s );
  139944             : 
  139945             :      // ******************************************
  139946             :      // * Memory Pool / New / Delete
  139947             :      // ******************************************
  139948             : 
  139949             :      public:
  139950             :           /// \private
  139951             :           static const unsigned pool_size; //
  139952             :           /// \private
  139953             :           static std::vector<unsigned char *> pools; //
  139954             :           /// \private
  139955             :           static SgTemplateVariableDeclaration * next_node; // 
  139956             : 
  139957             :           /// \private
  139958             :           static unsigned long initializeStorageClassArray(SgTemplateVariableDeclarationStorageClass *); //
  139959             : 
  139960             :           /// \private
  139961             :           static void clearMemoryPool(); //
  139962             :           static void deleteMemoryPool(); //
  139963             : 
  139964             :           /// \private
  139965             :           static void extendMemoryPoolForFileIO(); //
  139966             : 
  139967             :           /// \private
  139968             :           static SgTemplateVariableDeclaration * getPointerFromGlobalIndex(unsigned long); //
  139969             :           /// \private
  139970             :           static SgTemplateVariableDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  139971             : 
  139972             :           /// \private
  139973             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  139974             :           /// \private
  139975             :           static void resetValidFreepointers(); //
  139976             :           /// \private
  139977             :           static unsigned long getNumberOfLastValidPointer(); //
  139978             : 
  139979             : 
  139980             : #if defined(INLINE_FUNCTIONS)
  139981             :       /*! \brief returns pointer to newly allocated IR node */
  139982             :           inline void *operator new (size_t size);
  139983             : #else
  139984             :       /*! \brief returns pointer to newly allocated IR node */
  139985             :           void *operator new (size_t size);
  139986             : #endif
  139987             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  139988             :           void operator delete (void* pointer, size_t size);
  139989             : 
  139990             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  139991         204 :           void operator delete (void* pointer)
  139992             :              {
  139993             :             // This is the generated delete operator...
  139994         204 :                SgTemplateVariableDeclaration::operator delete (pointer,sizeof(SgTemplateVariableDeclaration));
  139995             :              }
  139996             : 
  139997             :       /*! \brief Returns the total number of IR nodes of this type */
  139998             :           static size_t numberOfNodes();
  139999             : 
  140000             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  140001             :           static size_t memoryUsage();
  140002             : 
  140003             :       // End of scope which started in IR nodes specific code 
  140004             :       /* */
  140005             : 
  140006             :       /* name Internal Functions
  140007             :           \brief Internal functions ... incomplete-documentation
  140008             : 
  140009             :           These functions have been made public as part of the design, but they are suggested for internal use 
  140010             :           or by particularly knowledgeable users for specialized tools or applications.
  140011             : 
  140012             :           \internal We could not make these private because they are required by user for special purposes. And 
  140013             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  140014             :          
  140015             :        */
  140016             : 
  140017             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  140018             :        // overridden in every class by *generated* implementation
  140019             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  140020             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  140021             :        // MS: 06/28/02 container of names of variables or container indices 
  140022             :        // used used in the traversal to access AST successor nodes
  140023             :        // overridden in every class by *generated* implementation
  140024             :       /*! \brief container of names of variables or container indices used used in the traversal
  140025             :           to access AST successor nodes overridden in every class by *generated* implementation */
  140026             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  140027             : 
  140028             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  140029             :        // than all the vector copies. The implementation for these functions is generated for each class.
  140030             :       /*! \brief return number of children in the traversal successor list */
  140031             :           virtual size_t get_numberOfTraversalSuccessors() override;
  140032             :       /*! \brief index-based access to traversal successors by index number */
  140033             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  140034             :       /*! \brief index-based access to traversal successors by child node */
  140035             :           virtual size_t get_childIndex(SgNode *child) override;
  140036             : 
  140037             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  140038             :        // MS: 08/16/2002 method for generating RTI information
  140039             :       /*! \brief return C++ Runtime-Time-Information */
  140040             :           virtual RTIReturnType roseRTI() override;
  140041             : #endif
  140042             :       /* */
  140043             : 
  140044             : 
  140045             : 
  140046             :       /* name Deprecated Functions
  140047             :           \brief Deprecated functions ... incomplete-documentation
  140048             : 
  140049             :           These functions have been deprecated from use.
  140050             :        */
  140051             :       /* */
  140052             : 
  140053             :       /*! returns a C style string (char*) representing the class name */
  140054             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  140055             : 
  140056             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  140057             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  140058             : #if 0
  140059             :       /*! returns old style Sage II enum values */
  140060             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  140061             :       /*! returns old style Sage II enum values */
  140062             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  140063             : #endif
  140064             :       /* */
  140065             : 
  140066             : 
  140067             : 
  140068             : 
  140069             :      public:
  140070             :       /* name Traversal Support Functions
  140071             :           \brief Traversal support functions ... incomplete-documentation
  140072             : 
  140073             :           These functions have been made public as part of the design, but they are suggested for internal use 
  140074             :           or by particularly knowledgable users for specialized tools or applications.
  140075             :        */
  140076             :       /* */
  140077             : 
  140078             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  140079             :        // (inferior to ROSE traversal mechanism, experimental).
  140080             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  140081             :        */
  140082             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  140083             : 
  140084             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  140085             :       /*! \brief support for the classic visitor pattern done in GoF */
  140086             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  140087             : 
  140088             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  140089             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  140090             :        */
  140091             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  140092             : 
  140093             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  140094             :        */
  140095             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  140096             : 
  140097             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  140098             :        // This traversal helps support internal tools that call static member functions.
  140099             :        // note: this function operates on the memory pools.
  140100             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  140101             :        */
  140102             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  140103             :       /* */
  140104             : 
  140105             : 
  140106             :      public:
  140107             :       /* name Memory Allocation Functions
  140108             :           \brief Memory allocations functions ... incomplete-documentation
  140109             : 
  140110             :           These functions have been made public as part of the design, but they are suggested for internal use 
  140111             :           or by particularly knowledgable users for specialized tools or applications.
  140112             :        */
  140113             :       /* */
  140114             : 
  140115             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  140116             : 
  140117             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  140118             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  140119             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  140120             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  140121             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  140122             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  140123             :           being used with the AST File I/O mechanism.
  140124             :        */
  140125             :           virtual bool isInMemoryPool() override;
  140126             : 
  140127             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  140128             : 
  140129             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  140130             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  140131             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  140132             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  140133             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  140134             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  140135             :           being used with the AST File I/O mechanism.
  140136             :        */
  140137             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  140138             : 
  140139             :       // DQ (4/30/2006): Modified to be a const function.
  140140             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  140141             : 
  140142             :           This functions is part of general support for many possible tools to operate 
  140143             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  140144             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  140145             :           less than the set of pointers used by the AST file I/O. This is part of
  140146             :           work implemented by Andreas, and support tools such as the AST graph generation.
  140147             : 
  140148             :           \warning This function can return unexpected data members and thus the 
  140149             :                    order and the number of elements is unpredicable and subject 
  140150             :                    to change.
  140151             : 
  140152             :           \returns STL vector of pairs of SgNode* and strings
  140153             :        */
  140154             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  140155             : 
  140156             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  140157             : 
  140158             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  140159             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  140160             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  140161             : 
  140162             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  140163             :                    and subject to change.
  140164             :        */
  140165             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  140166             : 
  140167             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  140168             : 
  140169             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  140170             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  140171             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  140172             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  140173             : 
  140174             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  140175             : 
  140176             :           \returns long
  140177             :        */
  140178             :           virtual long getChildIndex( SgNode* childNode ) const override;
  140179             : 
  140180             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  140181             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  140182             :       /* \brief Constructor for use by AST File I/O Mechanism
  140183             : 
  140184             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  140185             :           which obtained via fast binary file I/O from disk.
  140186             :        */
  140187             :        // SgTemplateVariableDeclaration( SgTemplateVariableDeclarationStorageClass& source );
  140188             : 
  140189             : 
  140190             : 
  140191             : 
  140192             : 
  140193             :  // JH (10/24/2005): methods added to support the ast file IO
  140194             :     private:
  140195             : 
  140196             :       /* name AST Memory Allocation Support Functions
  140197             :           \brief Memory allocations support....
  140198             : 
  140199             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  140200             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  140201             :           and support the AST File I/O Mechanism.
  140202             :        */
  140203             :       /* */
  140204             : 
  140205             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  140206             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  140207             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  140208             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  140209             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  140210             :           a correspinding one in the AST_FILE_IO class!
  140211             :        */
  140212             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  140213             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  140214             :       /* \brief Typedef used for low level memory access.
  140215             :        */
  140216             :        // typedef unsigned char* TestType;
  140217             : 
  140218             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  140219             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  140220             :       /* \brief Typedef used to hold memory addresses as values.
  140221             :        */
  140222             :        // typedef unsigned long  AddressType;
  140223             : 
  140224             : 
  140225             : 
  140226             :        // necessary, to have direct access to the p_freepointer and the private methods !
  140227             :       /*! \brief friend class declaration to support AST File I/O */
  140228             :           friend class AST_FILE_IO;
  140229             : 
  140230             :       /*! \brief friend class declaration to support AST File I/O */
  140231             :           friend class SgTemplateVariableDeclarationStorageClass;
  140232             : 
  140233             :       /*! \brief friend class declaration to support AST File I/O */
  140234             :           friend class AstSpecificDataManagingClass;
  140235             : 
  140236             :       /*! \brief friend class declaration to support AST File I/O */
  140237             :           friend class AstSpecificDataManagingClassStorageClass;
  140238             :     public:
  140239             :       /*! \brief IR node constructor to support AST File I/O */
  140240             :           SgTemplateVariableDeclaration( const SgTemplateVariableDeclarationStorageClass& source );
  140241             : 
  140242             :  // private: // JJW hack
  140243             :        /*
  140244             :           name AST Memory Allocation Support Variables
  140245             :           Memory allocations support variables 
  140246             : 
  140247             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  140248             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  140249             :           and support the AST File I/O Mechanism.
  140250             :        */
  140251             :       /* */
  140252             : 
  140253             :     public:
  140254             : 
  140255             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  140256             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  140257             :       // virtual SgNode* addRegExpAttribute();
  140258             :       /*! \brief Support for AST matching using regular expression.
  140259             : 
  140260             :           This support is incomplete and the subject of current research to define 
  140261             :           RegEx trees to support inexact matching.
  140262             :        */
  140263             :           SgTemplateVariableDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  140264             : 
  140265             : // *** COMMON CODE SECTION ENDS HERE ***
  140266             : 
  140267             : 
  140268             : // End of memberFunctionString
  140269             : // Start of memberFunctionString
  140270             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  140271             : 
  140272             :      // the generated cast function
  140273             :      // friend ROSE_DLL_API SgTemplateVariableDeclaration* isSgTemplateVariableDeclaration ( SgNode* s );
  140274             : 
  140275             :           typedef SgVariableDeclaration base_node_type;
  140276             : 
  140277             : 
  140278             : // End of memberFunctionString
  140279             : // Start of memberFunctionString
  140280             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  140281             : 
  140282             :           void post_construction_initialization() override;
  140283             : 
  140284             : 
  140285             : // End of memberFunctionString
  140286             : 
  140287             :      public: 
  140288             :          const SgTemplateParameterPtrList&  get_templateParameters() const;
  140289             :          SgTemplateParameterPtrList& get_templateParameters(); 
  140290             : 
  140291             :      public: 
  140292             :          const SgTemplateArgumentPtrList&  get_templateSpecializationArguments() const;
  140293             :          SgTemplateArgumentPtrList& get_templateSpecializationArguments(); 
  140294             : 
  140295             :      public: 
  140296             :          SgName get_string() const;
  140297             :          void set_string(SgName string);
  140298             : 
  140299             :      public: 
  140300             :          SgDeclarationScope* get_nonreal_decl_scope() const;
  140301             :          void set_nonreal_decl_scope(SgDeclarationScope* nonreal_decl_scope);
  140302             : 
  140303             : 
  140304             :      public: 
  140305             :          virtual ~SgTemplateVariableDeclaration();
  140306             : 
  140307             : 
  140308             :      public: 
  140309             :          SgTemplateVariableDeclaration(Sg_File_Info* startOfConstruct ); 
  140310             :          SgTemplateVariableDeclaration(); 
  140311             : 
  140312             :     protected:
  140313             : // Start of memberFunctionString
  140314             : SgTemplateParameterPtrList p_templateParameters;
  140315             :           
  140316             : // End of memberFunctionString
  140317             : // Start of memberFunctionString
  140318             : SgTemplateArgumentPtrList p_templateSpecializationArguments;
  140319             :           
  140320             : // End of memberFunctionString
  140321             : // Start of memberFunctionString
  140322             : SgName p_string;
  140323             :           
  140324             : // End of memberFunctionString
  140325             : // Start of memberFunctionString
  140326             : SgDeclarationScope* p_nonreal_decl_scope;
  140327             :           
  140328             : // End of memberFunctionString
  140329             : 
  140330             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateVariableDeclaration>;
  140331             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateVariableDeclaration, SgTemplateParameterPtrList,&SgTemplateVariableDeclaration::p_templateParameters>;
  140332             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateVariableDeclaration, SgTemplateArgumentPtrList,&SgTemplateVariableDeclaration::p_templateSpecializationArguments>;
  140333             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateVariableDeclaration, SgName,&SgTemplateVariableDeclaration::p_string>;
  140334             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateVariableDeclaration, SgDeclarationScope*,&SgTemplateVariableDeclaration::p_nonreal_decl_scope>;
  140335             : 
  140336             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140337             : 
  140338             : 
  140339             :    };
  140340             : #endif
  140341             : 
  140342             : // postdeclarations for SgTemplateVariableDeclaration
  140343             : 
  140344             : /* #line 140345 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140345             : 
  140346             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  140347             : 
  140348             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140349             : 
  140350             : 
  140351             : /* #line 140352 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140352             : 
  140353             : 
  140354             : 
  140355             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140356             : 
  140357             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  140358             : //      This code is automatically generated for each 
  140359             : //      terminal and non-terminal within the defined 
  140360             : //      grammar.  There is a simple way to change the 
  140361             : //      code to fix bugs etc.  See the ROSE README file
  140362             : //      for directions.
  140363             : 
  140364             : // tps: (02/22/2010): Adding DLL export requirements
  140365             : #include "rosedll.h"
  140366             : 
  140367             : // predeclarations for SgVariableDefinition
  140368             : 
  140369             : /* #line 140370 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140370             : 
  140371             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  140372             : 
  140373             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140374             : 
  140375             : #if 1
  140376             : // Class Definition for SgVariableDefinition
  140377             : class ROSE_DLL_API SgVariableDefinition  : public SgDeclarationStatement
  140378             :    {
  140379             :      public:
  140380             : 
  140381             : 
  140382             : /* #line 140383 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140383             : 
  140384             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  140385             : // Start of memberFunctionString
  140386             : /* #line 2038 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  140387             : 
  140388             :        // SgInitializedName *get_defn_item();
  140389             :        // SgInitializedName *get_decl_item();
  140390             :       //  void set_initializer(SgInitializer *);
  140391             : 
  140392             :           SgVariableDeclaration *get_declaration();
  140393             : 
  140394             :           SgType *get_type();
  140395             : 
  140396             :        // Special constructor used by SgVariableDefinition
  140397             :           SgVariableDefinition( Sg_File_Info *info, SgInitializedName *decl_item, SgInitializer *initializer);
  140398             :           SgVariableDefinition( SgInitializedName *decl_item, SgInitializer *initializer);
  140399             : 
  140400             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  140401             :           virtual SgName get_mangled_name(void) const override;
  140402             : 
  140403             : 
  140404             : 
  140405             : // End of memberFunctionString
  140406             : // Start of memberFunctionString
  140407             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  140408             : 
  140409             : // *** COMMON CODE SECTION BEGINS HERE ***
  140410             : 
  140411             :     public:
  140412             : 
  140413             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  140414             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  140415             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  140416             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  140417             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  140418             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  140419             : 
  140420             :       /*! \brief returns a string representing the class name */
  140421             :           virtual std::string class_name() const override;
  140422             : 
  140423             :       /*! \brief returns new style SageIII enum values */
  140424             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  140425             : 
  140426             :       /*! \brief static variant value */
  140427             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  140428             :        // static const VariantT static_variant = V_SgVariableDefinition;
  140429             :           enum { static_variant = V_SgVariableDefinition };
  140430             : 
  140431             :        /* the generated cast function */
  140432             :       /*! \brief Casts pointer from base class to derived class */
  140433             :           ROSE_DLL_API friend       SgVariableDefinition* isSgVariableDefinition(       SgNode * s );
  140434             : 
  140435             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  140436             :           ROSE_DLL_API friend const SgVariableDefinition* isSgVariableDefinition( const SgNode * s );
  140437             : 
  140438             :      // ******************************************
  140439             :      // * Memory Pool / New / Delete
  140440             :      // ******************************************
  140441             : 
  140442             :      public:
  140443             :           /// \private
  140444             :           static const unsigned pool_size; //
  140445             :           /// \private
  140446             :           static std::vector<unsigned char *> pools; //
  140447             :           /// \private
  140448             :           static SgVariableDefinition * next_node; // 
  140449             : 
  140450             :           /// \private
  140451             :           static unsigned long initializeStorageClassArray(SgVariableDefinitionStorageClass *); //
  140452             : 
  140453             :           /// \private
  140454             :           static void clearMemoryPool(); //
  140455             :           static void deleteMemoryPool(); //
  140456             : 
  140457             :           /// \private
  140458             :           static void extendMemoryPoolForFileIO(); //
  140459             : 
  140460             :           /// \private
  140461             :           static SgVariableDefinition * getPointerFromGlobalIndex(unsigned long); //
  140462             :           /// \private
  140463             :           static SgVariableDefinition * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  140464             : 
  140465             :           /// \private
  140466             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  140467             :           /// \private
  140468             :           static void resetValidFreepointers(); //
  140469             :           /// \private
  140470             :           static unsigned long getNumberOfLastValidPointer(); //
  140471             : 
  140472             : 
  140473             : #if defined(INLINE_FUNCTIONS)
  140474             :       /*! \brief returns pointer to newly allocated IR node */
  140475             :           inline void *operator new (size_t size);
  140476             : #else
  140477             :       /*! \brief returns pointer to newly allocated IR node */
  140478             :           void *operator new (size_t size);
  140479             : #endif
  140480             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  140481             :           void operator delete (void* pointer, size_t size);
  140482             : 
  140483             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  140484        2793 :           void operator delete (void* pointer)
  140485             :              {
  140486             :             // This is the generated delete operator...
  140487        2793 :                SgVariableDefinition::operator delete (pointer,sizeof(SgVariableDefinition));
  140488             :              }
  140489             : 
  140490             :       /*! \brief Returns the total number of IR nodes of this type */
  140491             :           static size_t numberOfNodes();
  140492             : 
  140493             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  140494             :           static size_t memoryUsage();
  140495             : 
  140496             :       // End of scope which started in IR nodes specific code 
  140497             :       /* */
  140498             : 
  140499             :       /* name Internal Functions
  140500             :           \brief Internal functions ... incomplete-documentation
  140501             : 
  140502             :           These functions have been made public as part of the design, but they are suggested for internal use 
  140503             :           or by particularly knowledgeable users for specialized tools or applications.
  140504             : 
  140505             :           \internal We could not make these private because they are required by user for special purposes. And 
  140506             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  140507             :          
  140508             :        */
  140509             : 
  140510             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  140511             :        // overridden in every class by *generated* implementation
  140512             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  140513             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  140514             :        // MS: 06/28/02 container of names of variables or container indices 
  140515             :        // used used in the traversal to access AST successor nodes
  140516             :        // overridden in every class by *generated* implementation
  140517             :       /*! \brief container of names of variables or container indices used used in the traversal
  140518             :           to access AST successor nodes overridden in every class by *generated* implementation */
  140519             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  140520             : 
  140521             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  140522             :        // than all the vector copies. The implementation for these functions is generated for each class.
  140523             :       /*! \brief return number of children in the traversal successor list */
  140524             :           virtual size_t get_numberOfTraversalSuccessors() override;
  140525             :       /*! \brief index-based access to traversal successors by index number */
  140526             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  140527             :       /*! \brief index-based access to traversal successors by child node */
  140528             :           virtual size_t get_childIndex(SgNode *child) override;
  140529             : 
  140530             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  140531             :        // MS: 08/16/2002 method for generating RTI information
  140532             :       /*! \brief return C++ Runtime-Time-Information */
  140533             :           virtual RTIReturnType roseRTI() override;
  140534             : #endif
  140535             :       /* */
  140536             : 
  140537             : 
  140538             : 
  140539             :       /* name Deprecated Functions
  140540             :           \brief Deprecated functions ... incomplete-documentation
  140541             : 
  140542             :           These functions have been deprecated from use.
  140543             :        */
  140544             :       /* */
  140545             : 
  140546             :       /*! returns a C style string (char*) representing the class name */
  140547             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  140548             : 
  140549             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  140550             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  140551             : #if 0
  140552             :       /*! returns old style Sage II enum values */
  140553             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  140554             :       /*! returns old style Sage II enum values */
  140555             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  140556             : #endif
  140557             :       /* */
  140558             : 
  140559             : 
  140560             : 
  140561             : 
  140562             :      public:
  140563             :       /* name Traversal Support Functions
  140564             :           \brief Traversal support functions ... incomplete-documentation
  140565             : 
  140566             :           These functions have been made public as part of the design, but they are suggested for internal use 
  140567             :           or by particularly knowledgable users for specialized tools or applications.
  140568             :        */
  140569             :       /* */
  140570             : 
  140571             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  140572             :        // (inferior to ROSE traversal mechanism, experimental).
  140573             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  140574             :        */
  140575             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  140576             : 
  140577             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  140578             :       /*! \brief support for the classic visitor pattern done in GoF */
  140579             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  140580             : 
  140581             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  140582             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  140583             :        */
  140584             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  140585             : 
  140586             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  140587             :        */
  140588             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  140589             : 
  140590             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  140591             :        // This traversal helps support internal tools that call static member functions.
  140592             :        // note: this function operates on the memory pools.
  140593             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  140594             :        */
  140595             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  140596             :       /* */
  140597             : 
  140598             : 
  140599             :      public:
  140600             :       /* name Memory Allocation Functions
  140601             :           \brief Memory allocations functions ... incomplete-documentation
  140602             : 
  140603             :           These functions have been made public as part of the design, but they are suggested for internal use 
  140604             :           or by particularly knowledgable users for specialized tools or applications.
  140605             :        */
  140606             :       /* */
  140607             : 
  140608             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  140609             : 
  140610             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  140611             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  140612             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  140613             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  140614             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  140615             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  140616             :           being used with the AST File I/O mechanism.
  140617             :        */
  140618             :           virtual bool isInMemoryPool() override;
  140619             : 
  140620             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  140621             : 
  140622             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  140623             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  140624             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  140625             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  140626             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  140627             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  140628             :           being used with the AST File I/O mechanism.
  140629             :        */
  140630             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  140631             : 
  140632             :       // DQ (4/30/2006): Modified to be a const function.
  140633             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  140634             : 
  140635             :           This functions is part of general support for many possible tools to operate 
  140636             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  140637             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  140638             :           less than the set of pointers used by the AST file I/O. This is part of
  140639             :           work implemented by Andreas, and support tools such as the AST graph generation.
  140640             : 
  140641             :           \warning This function can return unexpected data members and thus the 
  140642             :                    order and the number of elements is unpredicable and subject 
  140643             :                    to change.
  140644             : 
  140645             :           \returns STL vector of pairs of SgNode* and strings
  140646             :        */
  140647             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  140648             : 
  140649             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  140650             : 
  140651             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  140652             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  140653             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  140654             : 
  140655             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  140656             :                    and subject to change.
  140657             :        */
  140658             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  140659             : 
  140660             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  140661             : 
  140662             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  140663             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  140664             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  140665             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  140666             : 
  140667             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  140668             : 
  140669             :           \returns long
  140670             :        */
  140671             :           virtual long getChildIndex( SgNode* childNode ) const override;
  140672             : 
  140673             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  140674             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  140675             :       /* \brief Constructor for use by AST File I/O Mechanism
  140676             : 
  140677             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  140678             :           which obtained via fast binary file I/O from disk.
  140679             :        */
  140680             :        // SgVariableDefinition( SgVariableDefinitionStorageClass& source );
  140681             : 
  140682             : 
  140683             : 
  140684             : 
  140685             : 
  140686             :  // JH (10/24/2005): methods added to support the ast file IO
  140687             :     private:
  140688             : 
  140689             :       /* name AST Memory Allocation Support Functions
  140690             :           \brief Memory allocations support....
  140691             : 
  140692             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  140693             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  140694             :           and support the AST File I/O Mechanism.
  140695             :        */
  140696             :       /* */
  140697             : 
  140698             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  140699             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  140700             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  140701             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  140702             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  140703             :           a correspinding one in the AST_FILE_IO class!
  140704             :        */
  140705             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  140706             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  140707             :       /* \brief Typedef used for low level memory access.
  140708             :        */
  140709             :        // typedef unsigned char* TestType;
  140710             : 
  140711             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  140712             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  140713             :       /* \brief Typedef used to hold memory addresses as values.
  140714             :        */
  140715             :        // typedef unsigned long  AddressType;
  140716             : 
  140717             : 
  140718             : 
  140719             :        // necessary, to have direct access to the p_freepointer and the private methods !
  140720             :       /*! \brief friend class declaration to support AST File I/O */
  140721             :           friend class AST_FILE_IO;
  140722             : 
  140723             :       /*! \brief friend class declaration to support AST File I/O */
  140724             :           friend class SgVariableDefinitionStorageClass;
  140725             : 
  140726             :       /*! \brief friend class declaration to support AST File I/O */
  140727             :           friend class AstSpecificDataManagingClass;
  140728             : 
  140729             :       /*! \brief friend class declaration to support AST File I/O */
  140730             :           friend class AstSpecificDataManagingClassStorageClass;
  140731             :     public:
  140732             :       /*! \brief IR node constructor to support AST File I/O */
  140733             :           SgVariableDefinition( const SgVariableDefinitionStorageClass& source );
  140734             : 
  140735             :  // private: // JJW hack
  140736             :        /*
  140737             :           name AST Memory Allocation Support Variables
  140738             :           Memory allocations support variables 
  140739             : 
  140740             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  140741             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  140742             :           and support the AST File I/O Mechanism.
  140743             :        */
  140744             :       /* */
  140745             : 
  140746             :     public:
  140747             : 
  140748             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  140749             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  140750             :       // virtual SgNode* addRegExpAttribute();
  140751             :       /*! \brief Support for AST matching using regular expression.
  140752             : 
  140753             :           This support is incomplete and the subject of current research to define 
  140754             :           RegEx trees to support inexact matching.
  140755             :        */
  140756             :           SgVariableDefinition* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  140757             : 
  140758             : // *** COMMON CODE SECTION ENDS HERE ***
  140759             : 
  140760             : 
  140761             : // End of memberFunctionString
  140762             : // Start of memberFunctionString
  140763             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  140764             : 
  140765             :      // the generated cast function
  140766             :      // friend ROSE_DLL_API SgVariableDefinition* isSgVariableDefinition ( SgNode* s );
  140767             : 
  140768             :           typedef SgDeclarationStatement base_node_type;
  140769             : 
  140770             : 
  140771             : // End of memberFunctionString
  140772             : // Start of memberFunctionString
  140773             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  140774             : 
  140775             :           void post_construction_initialization() override;
  140776             : 
  140777             : 
  140778             : // End of memberFunctionString
  140779             : 
  140780             :      public: 
  140781             :          SgInitializedName* get_vardefn() const;
  140782             :          void set_vardefn(SgInitializedName* vardefn);
  140783             : 
  140784             :      public: 
  140785             :          SgExpression* get_bitfield() const;
  140786             :          void set_bitfield(SgExpression* bitfield);
  140787             : 
  140788             : 
  140789             :      public: 
  140790             :          virtual ~SgVariableDefinition();
  140791             : 
  140792             : 
  140793             :      public: 
  140794             :          SgVariableDefinition(Sg_File_Info* startOfConstruct , SgInitializedName* vardefn = NULL, SgExpression* bitfield = NULL); 
  140795             :          SgVariableDefinition(SgInitializedName* vardefn, SgExpression* bitfield); 
  140796             : 
  140797             :     protected:
  140798             : // Start of memberFunctionString
  140799             : SgInitializedName* p_vardefn;
  140800             :           
  140801             : // End of memberFunctionString
  140802             : // Start of memberFunctionString
  140803             : SgExpression* p_bitfield;
  140804             :           
  140805             : // End of memberFunctionString
  140806             : 
  140807             :     friend struct Rose::Traits::generated::describe_node_t<SgVariableDefinition>;
  140808             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDefinition, SgInitializedName*,&SgVariableDefinition::p_vardefn>;
  140809             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableDefinition, SgExpression*,&SgVariableDefinition::p_bitfield>;
  140810             : 
  140811             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140812             : 
  140813             : 
  140814             :    };
  140815             : #endif
  140816             : 
  140817             : // postdeclarations for SgVariableDefinition
  140818             : 
  140819             : /* #line 140820 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140820             : 
  140821             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  140822             : 
  140823             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140824             : 
  140825             : 
  140826             : /* #line 140827 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140827             : 
  140828             : 
  140829             : 
  140830             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140831             : 
  140832             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  140833             : //      This code is automatically generated for each 
  140834             : //      terminal and non-terminal within the defined 
  140835             : //      grammar.  There is a simple way to change the 
  140836             : //      code to fix bugs etc.  See the ROSE README file
  140837             : //      for directions.
  140838             : 
  140839             : // tps: (02/22/2010): Adding DLL export requirements
  140840             : #include "rosedll.h"
  140841             : 
  140842             : // predeclarations for SgClinkageDeclarationStatement
  140843             : 
  140844             : /* #line 140845 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140845             : 
  140846             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  140847             : 
  140848             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  140849             : 
  140850             : #if 1
  140851             : // Class Definition for SgClinkageDeclarationStatement
  140852             : class ROSE_DLL_API SgClinkageDeclarationStatement  : public SgDeclarationStatement
  140853             :    {
  140854             :      public:
  140855             : 
  140856             : 
  140857             : /* #line 140858 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  140858             : 
  140859             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  140860             : // Start of memberFunctionString
  140861             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  140862             : 
  140863             : // *** COMMON CODE SECTION BEGINS HERE ***
  140864             : 
  140865             :     public:
  140866             : 
  140867             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  140868             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  140869             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  140870             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  140871             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  140872             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  140873             : 
  140874             :       /*! \brief returns a string representing the class name */
  140875             :           virtual std::string class_name() const override;
  140876             : 
  140877             :       /*! \brief returns new style SageIII enum values */
  140878             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  140879             : 
  140880             :       /*! \brief static variant value */
  140881             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  140882             :        // static const VariantT static_variant = V_SgClinkageDeclarationStatement;
  140883             :           enum { static_variant = V_SgClinkageDeclarationStatement };
  140884             : 
  140885             :        /* the generated cast function */
  140886             :       /*! \brief Casts pointer from base class to derived class */
  140887             :           ROSE_DLL_API friend       SgClinkageDeclarationStatement* isSgClinkageDeclarationStatement(       SgNode * s );
  140888             : 
  140889             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  140890             :           ROSE_DLL_API friend const SgClinkageDeclarationStatement* isSgClinkageDeclarationStatement( const SgNode * s );
  140891             : 
  140892             :      // ******************************************
  140893             :      // * Memory Pool / New / Delete
  140894             :      // ******************************************
  140895             : 
  140896             :      public:
  140897             :           /// \private
  140898             :           static const unsigned pool_size; //
  140899             :           /// \private
  140900             :           static std::vector<unsigned char *> pools; //
  140901             :           /// \private
  140902             :           static SgClinkageDeclarationStatement * next_node; // 
  140903             : 
  140904             :           /// \private
  140905             :           static unsigned long initializeStorageClassArray(SgClinkageDeclarationStatementStorageClass *); //
  140906             : 
  140907             :           /// \private
  140908             :           static void clearMemoryPool(); //
  140909             :           static void deleteMemoryPool(); //
  140910             : 
  140911             :           /// \private
  140912             :           static void extendMemoryPoolForFileIO(); //
  140913             : 
  140914             :           /// \private
  140915             :           static SgClinkageDeclarationStatement * getPointerFromGlobalIndex(unsigned long); //
  140916             :           /// \private
  140917             :           static SgClinkageDeclarationStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  140918             : 
  140919             :           /// \private
  140920             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  140921             :           /// \private
  140922             :           static void resetValidFreepointers(); //
  140923             :           /// \private
  140924             :           static unsigned long getNumberOfLastValidPointer(); //
  140925             : 
  140926             : 
  140927             : #if defined(INLINE_FUNCTIONS)
  140928             :       /*! \brief returns pointer to newly allocated IR node */
  140929             :           inline void *operator new (size_t size);
  140930             : #else
  140931             :       /*! \brief returns pointer to newly allocated IR node */
  140932             :           void *operator new (size_t size);
  140933             : #endif
  140934             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  140935             :           void operator delete (void* pointer, size_t size);
  140936             : 
  140937             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  140938           0 :           void operator delete (void* pointer)
  140939             :              {
  140940             :             // This is the generated delete operator...
  140941           0 :                SgClinkageDeclarationStatement::operator delete (pointer,sizeof(SgClinkageDeclarationStatement));
  140942             :              }
  140943             : 
  140944             :       /*! \brief Returns the total number of IR nodes of this type */
  140945             :           static size_t numberOfNodes();
  140946             : 
  140947             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  140948             :           static size_t memoryUsage();
  140949             : 
  140950             :       // End of scope which started in IR nodes specific code 
  140951             :       /* */
  140952             : 
  140953             :       /* name Internal Functions
  140954             :           \brief Internal functions ... incomplete-documentation
  140955             : 
  140956             :           These functions have been made public as part of the design, but they are suggested for internal use 
  140957             :           or by particularly knowledgeable users for specialized tools or applications.
  140958             : 
  140959             :           \internal We could not make these private because they are required by user for special purposes. And 
  140960             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  140961             :          
  140962             :        */
  140963             : 
  140964             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  140965             :        // overridden in every class by *generated* implementation
  140966             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  140967             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  140968             :        // MS: 06/28/02 container of names of variables or container indices 
  140969             :        // used used in the traversal to access AST successor nodes
  140970             :        // overridden in every class by *generated* implementation
  140971             :       /*! \brief container of names of variables or container indices used used in the traversal
  140972             :           to access AST successor nodes overridden in every class by *generated* implementation */
  140973             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  140974             : 
  140975             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  140976             :        // than all the vector copies. The implementation for these functions is generated for each class.
  140977             :       /*! \brief return number of children in the traversal successor list */
  140978             :           virtual size_t get_numberOfTraversalSuccessors() override;
  140979             :       /*! \brief index-based access to traversal successors by index number */
  140980             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  140981             :       /*! \brief index-based access to traversal successors by child node */
  140982             :           virtual size_t get_childIndex(SgNode *child) override;
  140983             : 
  140984             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  140985             :        // MS: 08/16/2002 method for generating RTI information
  140986             :       /*! \brief return C++ Runtime-Time-Information */
  140987             :           virtual RTIReturnType roseRTI() override;
  140988             : #endif
  140989             :       /* */
  140990             : 
  140991             : 
  140992             : 
  140993             :       /* name Deprecated Functions
  140994             :           \brief Deprecated functions ... incomplete-documentation
  140995             : 
  140996             :           These functions have been deprecated from use.
  140997             :        */
  140998             :       /* */
  140999             : 
  141000             :       /*! returns a C style string (char*) representing the class name */
  141001             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  141002             : 
  141003             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  141004             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  141005             : #if 0
  141006             :       /*! returns old style Sage II enum values */
  141007             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  141008             :       /*! returns old style Sage II enum values */
  141009             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  141010             : #endif
  141011             :       /* */
  141012             : 
  141013             : 
  141014             : 
  141015             : 
  141016             :      public:
  141017             :       /* name Traversal Support Functions
  141018             :           \brief Traversal support functions ... incomplete-documentation
  141019             : 
  141020             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141021             :           or by particularly knowledgable users for specialized tools or applications.
  141022             :        */
  141023             :       /* */
  141024             : 
  141025             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  141026             :        // (inferior to ROSE traversal mechanism, experimental).
  141027             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  141028             :        */
  141029             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  141030             : 
  141031             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  141032             :       /*! \brief support for the classic visitor pattern done in GoF */
  141033             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  141034             : 
  141035             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  141036             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  141037             :        */
  141038             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  141039             : 
  141040             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  141041             :        */
  141042             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  141043             : 
  141044             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  141045             :        // This traversal helps support internal tools that call static member functions.
  141046             :        // note: this function operates on the memory pools.
  141047             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  141048             :        */
  141049             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  141050             :       /* */
  141051             : 
  141052             : 
  141053             :      public:
  141054             :       /* name Memory Allocation Functions
  141055             :           \brief Memory allocations functions ... incomplete-documentation
  141056             : 
  141057             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141058             :           or by particularly knowledgable users for specialized tools or applications.
  141059             :        */
  141060             :       /* */
  141061             : 
  141062             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  141063             : 
  141064             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  141065             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  141066             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  141067             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  141068             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  141069             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  141070             :           being used with the AST File I/O mechanism.
  141071             :        */
  141072             :           virtual bool isInMemoryPool() override;
  141073             : 
  141074             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  141075             : 
  141076             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  141077             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  141078             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  141079             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  141080             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  141081             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  141082             :           being used with the AST File I/O mechanism.
  141083             :        */
  141084             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  141085             : 
  141086             :       // DQ (4/30/2006): Modified to be a const function.
  141087             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  141088             : 
  141089             :           This functions is part of general support for many possible tools to operate 
  141090             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  141091             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  141092             :           less than the set of pointers used by the AST file I/O. This is part of
  141093             :           work implemented by Andreas, and support tools such as the AST graph generation.
  141094             : 
  141095             :           \warning This function can return unexpected data members and thus the 
  141096             :                    order and the number of elements is unpredicable and subject 
  141097             :                    to change.
  141098             : 
  141099             :           \returns STL vector of pairs of SgNode* and strings
  141100             :        */
  141101             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  141102             : 
  141103             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  141104             : 
  141105             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  141106             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  141107             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  141108             : 
  141109             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  141110             :                    and subject to change.
  141111             :        */
  141112             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  141113             : 
  141114             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  141115             : 
  141116             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  141117             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  141118             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  141119             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  141120             : 
  141121             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  141122             : 
  141123             :           \returns long
  141124             :        */
  141125             :           virtual long getChildIndex( SgNode* childNode ) const override;
  141126             : 
  141127             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  141128             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  141129             :       /* \brief Constructor for use by AST File I/O Mechanism
  141130             : 
  141131             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  141132             :           which obtained via fast binary file I/O from disk.
  141133             :        */
  141134             :        // SgClinkageDeclarationStatement( SgClinkageDeclarationStatementStorageClass& source );
  141135             : 
  141136             : 
  141137             : 
  141138             : 
  141139             : 
  141140             :  // JH (10/24/2005): methods added to support the ast file IO
  141141             :     private:
  141142             : 
  141143             :       /* name AST Memory Allocation Support Functions
  141144             :           \brief Memory allocations support....
  141145             : 
  141146             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  141147             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  141148             :           and support the AST File I/O Mechanism.
  141149             :        */
  141150             :       /* */
  141151             : 
  141152             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  141153             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  141154             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  141155             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  141156             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  141157             :           a correspinding one in the AST_FILE_IO class!
  141158             :        */
  141159             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  141160             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  141161             :       /* \brief Typedef used for low level memory access.
  141162             :        */
  141163             :        // typedef unsigned char* TestType;
  141164             : 
  141165             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  141166             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  141167             :       /* \brief Typedef used to hold memory addresses as values.
  141168             :        */
  141169             :        // typedef unsigned long  AddressType;
  141170             : 
  141171             : 
  141172             : 
  141173             :        // necessary, to have direct access to the p_freepointer and the private methods !
  141174             :       /*! \brief friend class declaration to support AST File I/O */
  141175             :           friend class AST_FILE_IO;
  141176             : 
  141177             :       /*! \brief friend class declaration to support AST File I/O */
  141178             :           friend class SgClinkageDeclarationStatementStorageClass;
  141179             : 
  141180             :       /*! \brief friend class declaration to support AST File I/O */
  141181             :           friend class AstSpecificDataManagingClass;
  141182             : 
  141183             :       /*! \brief friend class declaration to support AST File I/O */
  141184             :           friend class AstSpecificDataManagingClassStorageClass;
  141185             :     public:
  141186             :       /*! \brief IR node constructor to support AST File I/O */
  141187             :           SgClinkageDeclarationStatement( const SgClinkageDeclarationStatementStorageClass& source );
  141188             : 
  141189             :  // private: // JJW hack
  141190             :        /*
  141191             :           name AST Memory Allocation Support Variables
  141192             :           Memory allocations support variables 
  141193             : 
  141194             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  141195             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  141196             :           and support the AST File I/O Mechanism.
  141197             :        */
  141198             :       /* */
  141199             : 
  141200             :     public:
  141201             : 
  141202             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  141203             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  141204             :       // virtual SgNode* addRegExpAttribute();
  141205             :       /*! \brief Support for AST matching using regular expression.
  141206             : 
  141207             :           This support is incomplete and the subject of current research to define 
  141208             :           RegEx trees to support inexact matching.
  141209             :        */
  141210             :           SgClinkageDeclarationStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  141211             : 
  141212             : // *** COMMON CODE SECTION ENDS HERE ***
  141213             : 
  141214             : 
  141215             : // End of memberFunctionString
  141216             : // Start of memberFunctionString
  141217             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  141218             : 
  141219             :      // the generated cast function
  141220             :      // friend ROSE_DLL_API SgClinkageDeclarationStatement* isSgClinkageDeclarationStatement ( SgNode* s );
  141221             : 
  141222             :           typedef SgDeclarationStatement base_node_type;
  141223             : 
  141224             : 
  141225             : // End of memberFunctionString
  141226             : // Start of memberFunctionString
  141227             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  141228             : 
  141229             :           void post_construction_initialization() override;
  141230             : 
  141231             : 
  141232             : // End of memberFunctionString
  141233             : 
  141234             : 
  141235             : 
  141236             :      public: 
  141237             :          virtual ~SgClinkageDeclarationStatement();
  141238             : 
  141239             : 
  141240             :      public: 
  141241             :          SgClinkageDeclarationStatement(Sg_File_Info* startOfConstruct ); 
  141242             :          SgClinkageDeclarationStatement(); 
  141243             : 
  141244             :     protected:
  141245             : // Start of memberFunctionString
  141246             : std::string p_languageSpecifier;
  141247             :           
  141248             : // End of memberFunctionString
  141249             : 
  141250             :     friend struct Rose::Traits::generated::describe_node_t<SgClinkageDeclarationStatement>;
  141251             :     friend struct Rose::Traits::generated::describe_field_t<SgClinkageDeclarationStatement, std::string,&SgClinkageDeclarationStatement::p_languageSpecifier>;
  141252             : 
  141253             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141254             : 
  141255             : 
  141256             :    };
  141257             : #endif
  141258             : 
  141259             : // postdeclarations for SgClinkageDeclarationStatement
  141260             : 
  141261             : /* #line 141262 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141262             : 
  141263             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  141264             : 
  141265             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141266             : 
  141267             : 
  141268             : /* #line 141269 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141269             : 
  141270             : 
  141271             : 
  141272             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141273             : 
  141274             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  141275             : //      This code is automatically generated for each 
  141276             : //      terminal and non-terminal within the defined 
  141277             : //      grammar.  There is a simple way to change the 
  141278             : //      code to fix bugs etc.  See the ROSE README file
  141279             : //      for directions.
  141280             : 
  141281             : // tps: (02/22/2010): Adding DLL export requirements
  141282             : #include "rosedll.h"
  141283             : 
  141284             : // predeclarations for SgClinkageStartStatement
  141285             : 
  141286             : /* #line 141287 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141287             : 
  141288             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  141289             : 
  141290             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141291             : 
  141292             : #if 1
  141293             : // Class Definition for SgClinkageStartStatement
  141294             : class ROSE_DLL_API SgClinkageStartStatement  : public SgClinkageDeclarationStatement
  141295             :    {
  141296             :      public:
  141297             : 
  141298             : 
  141299             : /* #line 141300 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141300             : 
  141301             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  141302             : // Start of memberFunctionString
  141303             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  141304             : 
  141305             : // *** COMMON CODE SECTION BEGINS HERE ***
  141306             : 
  141307             :     public:
  141308             : 
  141309             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  141310             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  141311             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  141312             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  141313             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  141314             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  141315             : 
  141316             :       /*! \brief returns a string representing the class name */
  141317             :           virtual std::string class_name() const override;
  141318             : 
  141319             :       /*! \brief returns new style SageIII enum values */
  141320             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  141321             : 
  141322             :       /*! \brief static variant value */
  141323             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  141324             :        // static const VariantT static_variant = V_SgClinkageStartStatement;
  141325             :           enum { static_variant = V_SgClinkageStartStatement };
  141326             : 
  141327             :        /* the generated cast function */
  141328             :       /*! \brief Casts pointer from base class to derived class */
  141329             :           ROSE_DLL_API friend       SgClinkageStartStatement* isSgClinkageStartStatement(       SgNode * s );
  141330             : 
  141331             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  141332             :           ROSE_DLL_API friend const SgClinkageStartStatement* isSgClinkageStartStatement( const SgNode * s );
  141333             : 
  141334             :      // ******************************************
  141335             :      // * Memory Pool / New / Delete
  141336             :      // ******************************************
  141337             : 
  141338             :      public:
  141339             :           /// \private
  141340             :           static const unsigned pool_size; //
  141341             :           /// \private
  141342             :           static std::vector<unsigned char *> pools; //
  141343             :           /// \private
  141344             :           static SgClinkageStartStatement * next_node; // 
  141345             : 
  141346             :           /// \private
  141347             :           static unsigned long initializeStorageClassArray(SgClinkageStartStatementStorageClass *); //
  141348             : 
  141349             :           /// \private
  141350             :           static void clearMemoryPool(); //
  141351             :           static void deleteMemoryPool(); //
  141352             : 
  141353             :           /// \private
  141354             :           static void extendMemoryPoolForFileIO(); //
  141355             : 
  141356             :           /// \private
  141357             :           static SgClinkageStartStatement * getPointerFromGlobalIndex(unsigned long); //
  141358             :           /// \private
  141359             :           static SgClinkageStartStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  141360             : 
  141361             :           /// \private
  141362             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  141363             :           /// \private
  141364             :           static void resetValidFreepointers(); //
  141365             :           /// \private
  141366             :           static unsigned long getNumberOfLastValidPointer(); //
  141367             : 
  141368             : 
  141369             : #if defined(INLINE_FUNCTIONS)
  141370             :       /*! \brief returns pointer to newly allocated IR node */
  141371             :           inline void *operator new (size_t size);
  141372             : #else
  141373             :       /*! \brief returns pointer to newly allocated IR node */
  141374             :           void *operator new (size_t size);
  141375             : #endif
  141376             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  141377             :           void operator delete (void* pointer, size_t size);
  141378             : 
  141379             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  141380           0 :           void operator delete (void* pointer)
  141381             :              {
  141382             :             // This is the generated delete operator...
  141383           0 :                SgClinkageStartStatement::operator delete (pointer,sizeof(SgClinkageStartStatement));
  141384             :              }
  141385             : 
  141386             :       /*! \brief Returns the total number of IR nodes of this type */
  141387             :           static size_t numberOfNodes();
  141388             : 
  141389             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  141390             :           static size_t memoryUsage();
  141391             : 
  141392             :       // End of scope which started in IR nodes specific code 
  141393             :       /* */
  141394             : 
  141395             :       /* name Internal Functions
  141396             :           \brief Internal functions ... incomplete-documentation
  141397             : 
  141398             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141399             :           or by particularly knowledgeable users for specialized tools or applications.
  141400             : 
  141401             :           \internal We could not make these private because they are required by user for special purposes. And 
  141402             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  141403             :          
  141404             :        */
  141405             : 
  141406             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  141407             :        // overridden in every class by *generated* implementation
  141408             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  141409             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  141410             :        // MS: 06/28/02 container of names of variables or container indices 
  141411             :        // used used in the traversal to access AST successor nodes
  141412             :        // overridden in every class by *generated* implementation
  141413             :       /*! \brief container of names of variables or container indices used used in the traversal
  141414             :           to access AST successor nodes overridden in every class by *generated* implementation */
  141415             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  141416             : 
  141417             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  141418             :        // than all the vector copies. The implementation for these functions is generated for each class.
  141419             :       /*! \brief return number of children in the traversal successor list */
  141420             :           virtual size_t get_numberOfTraversalSuccessors() override;
  141421             :       /*! \brief index-based access to traversal successors by index number */
  141422             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  141423             :       /*! \brief index-based access to traversal successors by child node */
  141424             :           virtual size_t get_childIndex(SgNode *child) override;
  141425             : 
  141426             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  141427             :        // MS: 08/16/2002 method for generating RTI information
  141428             :       /*! \brief return C++ Runtime-Time-Information */
  141429             :           virtual RTIReturnType roseRTI() override;
  141430             : #endif
  141431             :       /* */
  141432             : 
  141433             : 
  141434             : 
  141435             :       /* name Deprecated Functions
  141436             :           \brief Deprecated functions ... incomplete-documentation
  141437             : 
  141438             :           These functions have been deprecated from use.
  141439             :        */
  141440             :       /* */
  141441             : 
  141442             :       /*! returns a C style string (char*) representing the class name */
  141443             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  141444             : 
  141445             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  141446             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  141447             : #if 0
  141448             :       /*! returns old style Sage II enum values */
  141449             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  141450             :       /*! returns old style Sage II enum values */
  141451             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  141452             : #endif
  141453             :       /* */
  141454             : 
  141455             : 
  141456             : 
  141457             : 
  141458             :      public:
  141459             :       /* name Traversal Support Functions
  141460             :           \brief Traversal support functions ... incomplete-documentation
  141461             : 
  141462             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141463             :           or by particularly knowledgable users for specialized tools or applications.
  141464             :        */
  141465             :       /* */
  141466             : 
  141467             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  141468             :        // (inferior to ROSE traversal mechanism, experimental).
  141469             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  141470             :        */
  141471             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  141472             : 
  141473             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  141474             :       /*! \brief support for the classic visitor pattern done in GoF */
  141475             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  141476             : 
  141477             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  141478             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  141479             :        */
  141480             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  141481             : 
  141482             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  141483             :        */
  141484             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  141485             : 
  141486             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  141487             :        // This traversal helps support internal tools that call static member functions.
  141488             :        // note: this function operates on the memory pools.
  141489             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  141490             :        */
  141491             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  141492             :       /* */
  141493             : 
  141494             : 
  141495             :      public:
  141496             :       /* name Memory Allocation Functions
  141497             :           \brief Memory allocations functions ... incomplete-documentation
  141498             : 
  141499             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141500             :           or by particularly knowledgable users for specialized tools or applications.
  141501             :        */
  141502             :       /* */
  141503             : 
  141504             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  141505             : 
  141506             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  141507             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  141508             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  141509             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  141510             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  141511             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  141512             :           being used with the AST File I/O mechanism.
  141513             :        */
  141514             :           virtual bool isInMemoryPool() override;
  141515             : 
  141516             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  141517             : 
  141518             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  141519             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  141520             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  141521             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  141522             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  141523             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  141524             :           being used with the AST File I/O mechanism.
  141525             :        */
  141526             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  141527             : 
  141528             :       // DQ (4/30/2006): Modified to be a const function.
  141529             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  141530             : 
  141531             :           This functions is part of general support for many possible tools to operate 
  141532             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  141533             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  141534             :           less than the set of pointers used by the AST file I/O. This is part of
  141535             :           work implemented by Andreas, and support tools such as the AST graph generation.
  141536             : 
  141537             :           \warning This function can return unexpected data members and thus the 
  141538             :                    order and the number of elements is unpredicable and subject 
  141539             :                    to change.
  141540             : 
  141541             :           \returns STL vector of pairs of SgNode* and strings
  141542             :        */
  141543             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  141544             : 
  141545             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  141546             : 
  141547             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  141548             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  141549             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  141550             : 
  141551             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  141552             :                    and subject to change.
  141553             :        */
  141554             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  141555             : 
  141556             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  141557             : 
  141558             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  141559             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  141560             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  141561             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  141562             : 
  141563             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  141564             : 
  141565             :           \returns long
  141566             :        */
  141567             :           virtual long getChildIndex( SgNode* childNode ) const override;
  141568             : 
  141569             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  141570             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  141571             :       /* \brief Constructor for use by AST File I/O Mechanism
  141572             : 
  141573             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  141574             :           which obtained via fast binary file I/O from disk.
  141575             :        */
  141576             :        // SgClinkageStartStatement( SgClinkageStartStatementStorageClass& source );
  141577             : 
  141578             : 
  141579             : 
  141580             : 
  141581             : 
  141582             :  // JH (10/24/2005): methods added to support the ast file IO
  141583             :     private:
  141584             : 
  141585             :       /* name AST Memory Allocation Support Functions
  141586             :           \brief Memory allocations support....
  141587             : 
  141588             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  141589             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  141590             :           and support the AST File I/O Mechanism.
  141591             :        */
  141592             :       /* */
  141593             : 
  141594             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  141595             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  141596             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  141597             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  141598             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  141599             :           a correspinding one in the AST_FILE_IO class!
  141600             :        */
  141601             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  141602             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  141603             :       /* \brief Typedef used for low level memory access.
  141604             :        */
  141605             :        // typedef unsigned char* TestType;
  141606             : 
  141607             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  141608             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  141609             :       /* \brief Typedef used to hold memory addresses as values.
  141610             :        */
  141611             :        // typedef unsigned long  AddressType;
  141612             : 
  141613             : 
  141614             : 
  141615             :        // necessary, to have direct access to the p_freepointer and the private methods !
  141616             :       /*! \brief friend class declaration to support AST File I/O */
  141617             :           friend class AST_FILE_IO;
  141618             : 
  141619             :       /*! \brief friend class declaration to support AST File I/O */
  141620             :           friend class SgClinkageStartStatementStorageClass;
  141621             : 
  141622             :       /*! \brief friend class declaration to support AST File I/O */
  141623             :           friend class AstSpecificDataManagingClass;
  141624             : 
  141625             :       /*! \brief friend class declaration to support AST File I/O */
  141626             :           friend class AstSpecificDataManagingClassStorageClass;
  141627             :     public:
  141628             :       /*! \brief IR node constructor to support AST File I/O */
  141629             :           SgClinkageStartStatement( const SgClinkageStartStatementStorageClass& source );
  141630             : 
  141631             :  // private: // JJW hack
  141632             :        /*
  141633             :           name AST Memory Allocation Support Variables
  141634             :           Memory allocations support variables 
  141635             : 
  141636             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  141637             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  141638             :           and support the AST File I/O Mechanism.
  141639             :        */
  141640             :       /* */
  141641             : 
  141642             :     public:
  141643             : 
  141644             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  141645             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  141646             :       // virtual SgNode* addRegExpAttribute();
  141647             :       /*! \brief Support for AST matching using regular expression.
  141648             : 
  141649             :           This support is incomplete and the subject of current research to define 
  141650             :           RegEx trees to support inexact matching.
  141651             :        */
  141652             :           SgClinkageStartStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  141653             : 
  141654             : // *** COMMON CODE SECTION ENDS HERE ***
  141655             : 
  141656             : 
  141657             : // End of memberFunctionString
  141658             : // Start of memberFunctionString
  141659             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  141660             : 
  141661             :      // the generated cast function
  141662             :      // friend ROSE_DLL_API SgClinkageStartStatement* isSgClinkageStartStatement ( SgNode* s );
  141663             : 
  141664             :           typedef SgClinkageDeclarationStatement base_node_type;
  141665             : 
  141666             : 
  141667             : // End of memberFunctionString
  141668             : // Start of memberFunctionString
  141669             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  141670             : 
  141671             :           void post_construction_initialization() override;
  141672             : 
  141673             : 
  141674             : // End of memberFunctionString
  141675             : 
  141676             : 
  141677             :      public: 
  141678             :          virtual ~SgClinkageStartStatement();
  141679             : 
  141680             : 
  141681             :      public: 
  141682             :          SgClinkageStartStatement(Sg_File_Info* startOfConstruct ); 
  141683             :          SgClinkageStartStatement(); 
  141684             : 
  141685             :     protected:
  141686             : 
  141687             :     friend struct Rose::Traits::generated::describe_node_t<SgClinkageStartStatement>;
  141688             : 
  141689             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141690             : 
  141691             : 
  141692             :    };
  141693             : #endif
  141694             : 
  141695             : // postdeclarations for SgClinkageStartStatement
  141696             : 
  141697             : /* #line 141698 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141698             : 
  141699             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  141700             : 
  141701             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141702             : 
  141703             : 
  141704             : /* #line 141705 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141705             : 
  141706             : 
  141707             : 
  141708             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141709             : 
  141710             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  141711             : //      This code is automatically generated for each 
  141712             : //      terminal and non-terminal within the defined 
  141713             : //      grammar.  There is a simple way to change the 
  141714             : //      code to fix bugs etc.  See the ROSE README file
  141715             : //      for directions.
  141716             : 
  141717             : // tps: (02/22/2010): Adding DLL export requirements
  141718             : #include "rosedll.h"
  141719             : 
  141720             : // predeclarations for SgClinkageEndStatement
  141721             : 
  141722             : /* #line 141723 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141723             : 
  141724             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  141725             : 
  141726             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  141727             : 
  141728             : #if 1
  141729             : // Class Definition for SgClinkageEndStatement
  141730             : class ROSE_DLL_API SgClinkageEndStatement  : public SgClinkageDeclarationStatement
  141731             :    {
  141732             :      public:
  141733             : 
  141734             : 
  141735             : /* #line 141736 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  141736             : 
  141737             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  141738             : // Start of memberFunctionString
  141739             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  141740             : 
  141741             : // *** COMMON CODE SECTION BEGINS HERE ***
  141742             : 
  141743             :     public:
  141744             : 
  141745             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  141746             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  141747             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  141748             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  141749             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  141750             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  141751             : 
  141752             :       /*! \brief returns a string representing the class name */
  141753             :           virtual std::string class_name() const override;
  141754             : 
  141755             :       /*! \brief returns new style SageIII enum values */
  141756             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  141757             : 
  141758             :       /*! \brief static variant value */
  141759             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  141760             :        // static const VariantT static_variant = V_SgClinkageEndStatement;
  141761             :           enum { static_variant = V_SgClinkageEndStatement };
  141762             : 
  141763             :        /* the generated cast function */
  141764             :       /*! \brief Casts pointer from base class to derived class */
  141765             :           ROSE_DLL_API friend       SgClinkageEndStatement* isSgClinkageEndStatement(       SgNode * s );
  141766             : 
  141767             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  141768             :           ROSE_DLL_API friend const SgClinkageEndStatement* isSgClinkageEndStatement( const SgNode * s );
  141769             : 
  141770             :      // ******************************************
  141771             :      // * Memory Pool / New / Delete
  141772             :      // ******************************************
  141773             : 
  141774             :      public:
  141775             :           /// \private
  141776             :           static const unsigned pool_size; //
  141777             :           /// \private
  141778             :           static std::vector<unsigned char *> pools; //
  141779             :           /// \private
  141780             :           static SgClinkageEndStatement * next_node; // 
  141781             : 
  141782             :           /// \private
  141783             :           static unsigned long initializeStorageClassArray(SgClinkageEndStatementStorageClass *); //
  141784             : 
  141785             :           /// \private
  141786             :           static void clearMemoryPool(); //
  141787             :           static void deleteMemoryPool(); //
  141788             : 
  141789             :           /// \private
  141790             :           static void extendMemoryPoolForFileIO(); //
  141791             : 
  141792             :           /// \private
  141793             :           static SgClinkageEndStatement * getPointerFromGlobalIndex(unsigned long); //
  141794             :           /// \private
  141795             :           static SgClinkageEndStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  141796             : 
  141797             :           /// \private
  141798             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  141799             :           /// \private
  141800             :           static void resetValidFreepointers(); //
  141801             :           /// \private
  141802             :           static unsigned long getNumberOfLastValidPointer(); //
  141803             : 
  141804             : 
  141805             : #if defined(INLINE_FUNCTIONS)
  141806             :       /*! \brief returns pointer to newly allocated IR node */
  141807             :           inline void *operator new (size_t size);
  141808             : #else
  141809             :       /*! \brief returns pointer to newly allocated IR node */
  141810             :           void *operator new (size_t size);
  141811             : #endif
  141812             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  141813             :           void operator delete (void* pointer, size_t size);
  141814             : 
  141815             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  141816           0 :           void operator delete (void* pointer)
  141817             :              {
  141818             :             // This is the generated delete operator...
  141819           0 :                SgClinkageEndStatement::operator delete (pointer,sizeof(SgClinkageEndStatement));
  141820             :              }
  141821             : 
  141822             :       /*! \brief Returns the total number of IR nodes of this type */
  141823             :           static size_t numberOfNodes();
  141824             : 
  141825             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  141826             :           static size_t memoryUsage();
  141827             : 
  141828             :       // End of scope which started in IR nodes specific code 
  141829             :       /* */
  141830             : 
  141831             :       /* name Internal Functions
  141832             :           \brief Internal functions ... incomplete-documentation
  141833             : 
  141834             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141835             :           or by particularly knowledgeable users for specialized tools or applications.
  141836             : 
  141837             :           \internal We could not make these private because they are required by user for special purposes. And 
  141838             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  141839             :          
  141840             :        */
  141841             : 
  141842             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  141843             :        // overridden in every class by *generated* implementation
  141844             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  141845             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  141846             :        // MS: 06/28/02 container of names of variables or container indices 
  141847             :        // used used in the traversal to access AST successor nodes
  141848             :        // overridden in every class by *generated* implementation
  141849             :       /*! \brief container of names of variables or container indices used used in the traversal
  141850             :           to access AST successor nodes overridden in every class by *generated* implementation */
  141851             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  141852             : 
  141853             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  141854             :        // than all the vector copies. The implementation for these functions is generated for each class.
  141855             :       /*! \brief return number of children in the traversal successor list */
  141856             :           virtual size_t get_numberOfTraversalSuccessors() override;
  141857             :       /*! \brief index-based access to traversal successors by index number */
  141858             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  141859             :       /*! \brief index-based access to traversal successors by child node */
  141860             :           virtual size_t get_childIndex(SgNode *child) override;
  141861             : 
  141862             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  141863             :        // MS: 08/16/2002 method for generating RTI information
  141864             :       /*! \brief return C++ Runtime-Time-Information */
  141865             :           virtual RTIReturnType roseRTI() override;
  141866             : #endif
  141867             :       /* */
  141868             : 
  141869             : 
  141870             : 
  141871             :       /* name Deprecated Functions
  141872             :           \brief Deprecated functions ... incomplete-documentation
  141873             : 
  141874             :           These functions have been deprecated from use.
  141875             :        */
  141876             :       /* */
  141877             : 
  141878             :       /*! returns a C style string (char*) representing the class name */
  141879             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  141880             : 
  141881             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  141882             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  141883             : #if 0
  141884             :       /*! returns old style Sage II enum values */
  141885             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  141886             :       /*! returns old style Sage II enum values */
  141887             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  141888             : #endif
  141889             :       /* */
  141890             : 
  141891             : 
  141892             : 
  141893             : 
  141894             :      public:
  141895             :       /* name Traversal Support Functions
  141896             :           \brief Traversal support functions ... incomplete-documentation
  141897             : 
  141898             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141899             :           or by particularly knowledgable users for specialized tools or applications.
  141900             :        */
  141901             :       /* */
  141902             : 
  141903             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  141904             :        // (inferior to ROSE traversal mechanism, experimental).
  141905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  141906             :        */
  141907             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  141908             : 
  141909             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  141910             :       /*! \brief support for the classic visitor pattern done in GoF */
  141911             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  141912             : 
  141913             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  141914             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  141915             :        */
  141916             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  141917             : 
  141918             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  141919             :        */
  141920             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  141921             : 
  141922             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  141923             :        // This traversal helps support internal tools that call static member functions.
  141924             :        // note: this function operates on the memory pools.
  141925             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  141926             :        */
  141927             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  141928             :       /* */
  141929             : 
  141930             : 
  141931             :      public:
  141932             :       /* name Memory Allocation Functions
  141933             :           \brief Memory allocations functions ... incomplete-documentation
  141934             : 
  141935             :           These functions have been made public as part of the design, but they are suggested for internal use 
  141936             :           or by particularly knowledgable users for specialized tools or applications.
  141937             :        */
  141938             :       /* */
  141939             : 
  141940             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  141941             : 
  141942             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  141943             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  141944             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  141945             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  141946             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  141947             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  141948             :           being used with the AST File I/O mechanism.
  141949             :        */
  141950             :           virtual bool isInMemoryPool() override;
  141951             : 
  141952             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  141953             : 
  141954             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  141955             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  141956             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  141957             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  141958             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  141959             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  141960             :           being used with the AST File I/O mechanism.
  141961             :        */
  141962             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  141963             : 
  141964             :       // DQ (4/30/2006): Modified to be a const function.
  141965             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  141966             : 
  141967             :           This functions is part of general support for many possible tools to operate 
  141968             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  141969             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  141970             :           less than the set of pointers used by the AST file I/O. This is part of
  141971             :           work implemented by Andreas, and support tools such as the AST graph generation.
  141972             : 
  141973             :           \warning This function can return unexpected data members and thus the 
  141974             :                    order and the number of elements is unpredicable and subject 
  141975             :                    to change.
  141976             : 
  141977             :           \returns STL vector of pairs of SgNode* and strings
  141978             :        */
  141979             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  141980             : 
  141981             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  141982             : 
  141983             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  141984             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  141985             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  141986             : 
  141987             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  141988             :                    and subject to change.
  141989             :        */
  141990             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  141991             : 
  141992             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  141993             : 
  141994             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  141995             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  141996             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  141997             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  141998             : 
  141999             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  142000             : 
  142001             :           \returns long
  142002             :        */
  142003             :           virtual long getChildIndex( SgNode* childNode ) const override;
  142004             : 
  142005             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  142006             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  142007             :       /* \brief Constructor for use by AST File I/O Mechanism
  142008             : 
  142009             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  142010             :           which obtained via fast binary file I/O from disk.
  142011             :        */
  142012             :        // SgClinkageEndStatement( SgClinkageEndStatementStorageClass& source );
  142013             : 
  142014             : 
  142015             : 
  142016             : 
  142017             : 
  142018             :  // JH (10/24/2005): methods added to support the ast file IO
  142019             :     private:
  142020             : 
  142021             :       /* name AST Memory Allocation Support Functions
  142022             :           \brief Memory allocations support....
  142023             : 
  142024             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  142025             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  142026             :           and support the AST File I/O Mechanism.
  142027             :        */
  142028             :       /* */
  142029             : 
  142030             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  142031             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  142032             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  142033             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  142034             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  142035             :           a correspinding one in the AST_FILE_IO class!
  142036             :        */
  142037             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  142038             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  142039             :       /* \brief Typedef used for low level memory access.
  142040             :        */
  142041             :        // typedef unsigned char* TestType;
  142042             : 
  142043             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  142044             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  142045             :       /* \brief Typedef used to hold memory addresses as values.
  142046             :        */
  142047             :        // typedef unsigned long  AddressType;
  142048             : 
  142049             : 
  142050             : 
  142051             :        // necessary, to have direct access to the p_freepointer and the private methods !
  142052             :       /*! \brief friend class declaration to support AST File I/O */
  142053             :           friend class AST_FILE_IO;
  142054             : 
  142055             :       /*! \brief friend class declaration to support AST File I/O */
  142056             :           friend class SgClinkageEndStatementStorageClass;
  142057             : 
  142058             :       /*! \brief friend class declaration to support AST File I/O */
  142059             :           friend class AstSpecificDataManagingClass;
  142060             : 
  142061             :       /*! \brief friend class declaration to support AST File I/O */
  142062             :           friend class AstSpecificDataManagingClassStorageClass;
  142063             :     public:
  142064             :       /*! \brief IR node constructor to support AST File I/O */
  142065             :           SgClinkageEndStatement( const SgClinkageEndStatementStorageClass& source );
  142066             : 
  142067             :  // private: // JJW hack
  142068             :        /*
  142069             :           name AST Memory Allocation Support Variables
  142070             :           Memory allocations support variables 
  142071             : 
  142072             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  142073             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  142074             :           and support the AST File I/O Mechanism.
  142075             :        */
  142076             :       /* */
  142077             : 
  142078             :     public:
  142079             : 
  142080             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  142081             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  142082             :       // virtual SgNode* addRegExpAttribute();
  142083             :       /*! \brief Support for AST matching using regular expression.
  142084             : 
  142085             :           This support is incomplete and the subject of current research to define 
  142086             :           RegEx trees to support inexact matching.
  142087             :        */
  142088             :           SgClinkageEndStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  142089             : 
  142090             : // *** COMMON CODE SECTION ENDS HERE ***
  142091             : 
  142092             : 
  142093             : // End of memberFunctionString
  142094             : // Start of memberFunctionString
  142095             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  142096             : 
  142097             :      // the generated cast function
  142098             :      // friend ROSE_DLL_API SgClinkageEndStatement* isSgClinkageEndStatement ( SgNode* s );
  142099             : 
  142100             :           typedef SgClinkageDeclarationStatement base_node_type;
  142101             : 
  142102             : 
  142103             : // End of memberFunctionString
  142104             : // Start of memberFunctionString
  142105             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  142106             : 
  142107             :           void post_construction_initialization() override;
  142108             : 
  142109             : 
  142110             : // End of memberFunctionString
  142111             : 
  142112             : 
  142113             :      public: 
  142114             :          virtual ~SgClinkageEndStatement();
  142115             : 
  142116             : 
  142117             :      public: 
  142118             :          SgClinkageEndStatement(Sg_File_Info* startOfConstruct ); 
  142119             :          SgClinkageEndStatement(); 
  142120             : 
  142121             :     protected:
  142122             : 
  142123             :     friend struct Rose::Traits::generated::describe_node_t<SgClinkageEndStatement>;
  142124             : 
  142125             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142126             : 
  142127             : 
  142128             :    };
  142129             : #endif
  142130             : 
  142131             : // postdeclarations for SgClinkageEndStatement
  142132             : 
  142133             : /* #line 142134 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142134             : 
  142135             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  142136             : 
  142137             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142138             : 
  142139             : 
  142140             : /* #line 142141 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142141             : 
  142142             : 
  142143             : 
  142144             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142145             : 
  142146             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  142147             : //      This code is automatically generated for each 
  142148             : //      terminal and non-terminal within the defined 
  142149             : //      grammar.  There is a simple way to change the 
  142150             : //      code to fix bugs etc.  See the ROSE README file
  142151             : //      for directions.
  142152             : 
  142153             : // tps: (02/22/2010): Adding DLL export requirements
  142154             : #include "rosedll.h"
  142155             : 
  142156             : // predeclarations for SgEnumDeclaration
  142157             : 
  142158             : /* #line 142159 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142159             : 
  142160             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  142161             : 
  142162             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142163             : 
  142164             : #if 1
  142165             : // Class Definition for SgEnumDeclaration
  142166             : class ROSE_DLL_API SgEnumDeclaration  : public SgDeclarationStatement
  142167             :    {
  142168             :      public:
  142169             : 
  142170             : 
  142171             : /* #line 142172 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142172             : 
  142173             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  142174             : // Start of memberFunctionString
  142175             : /* #line 2193 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  142176             : 
  142177             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  142178             : 
  142179             :      public:
  142180             :           virtual void append_enumerator  ( SgInitializedName* element );
  142181             :           virtual void prepend_enumerator ( SgInitializedName* element );
  142182             : 
  142183             :      public:
  142184             :        // New functions added
  142185             :        // SgInitializedNamePtrList::iterator append_enumerator  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  142186             :        // SgInitializedNamePtrList::iterator prepend_enumerator ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  142187             : 
  142188             :        // SgInitializedNamePtrList::iterator insert_enumerator  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  142189             : 
  142190             : 
  142191             :      public:
  142192             : 
  142193             : 
  142194             : 
  142195             : 
  142196             :      public:
  142197             :        // DQ (10/15/2004): added support for qualified names
  142198             :           virtual SgName get_qualified_name() const;
  142199             : 
  142200             :        // RV (1/31/2006): Implemented mangler for enum declarations.
  142201             :           virtual SgName get_mangled_name (void) const override;
  142202             : 
  142203             :       //! Support for where the scope is explicitly required
  142204             :           virtual bool hasExplicitScope() const override;
  142205             : 
  142206             :        // DQ (2/6/2007): Get the associated symbol from the symbol table in the stored scope
  142207             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  142208             : 
  142209             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  142210             :           virtual unsigned int cfgIndexForEnd() const override;
  142211             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  142212             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  142213             : #endif
  142214             : 
  142215             : #if ALT_FIXUP_COPY
  142216             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  142217             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  142218             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  142219             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  142220             : #else
  142221             :        // DQ (10/18/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  142222             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  142223             : #endif
  142224             : 
  142225             :        // DQ (2/14/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  142226             :           int get_name_qualification_length() const;
  142227             :           void set_name_qualification_length(int name_qualification_length);
  142228             : 
  142229             :        // DQ (2/14/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  142230             :           bool get_type_elaboration_required() const;
  142231             :           void set_type_elaboration_required(bool type_elaboration_required);
  142232             : 
  142233             :        // DQ (2/14/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  142234             :           bool get_global_qualification_required() const;
  142235             :           void set_global_qualification_required(bool global_qualification_required);
  142236             : 
  142237             : 
  142238             : 
  142239             : // End of memberFunctionString
  142240             : // Start of memberFunctionString
  142241             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  142242             : 
  142243             : // *** COMMON CODE SECTION BEGINS HERE ***
  142244             : 
  142245             :     public:
  142246             : 
  142247             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  142248             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  142249             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  142250             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  142251             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  142252             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  142253             : 
  142254             :       /*! \brief returns a string representing the class name */
  142255             :           virtual std::string class_name() const override;
  142256             : 
  142257             :       /*! \brief returns new style SageIII enum values */
  142258             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  142259             : 
  142260             :       /*! \brief static variant value */
  142261             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  142262             :        // static const VariantT static_variant = V_SgEnumDeclaration;
  142263             :           enum { static_variant = V_SgEnumDeclaration };
  142264             : 
  142265             :        /* the generated cast function */
  142266             :       /*! \brief Casts pointer from base class to derived class */
  142267             :           ROSE_DLL_API friend       SgEnumDeclaration* isSgEnumDeclaration(       SgNode * s );
  142268             : 
  142269             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  142270             :           ROSE_DLL_API friend const SgEnumDeclaration* isSgEnumDeclaration( const SgNode * s );
  142271             : 
  142272             :      // ******************************************
  142273             :      // * Memory Pool / New / Delete
  142274             :      // ******************************************
  142275             : 
  142276             :      public:
  142277             :           /// \private
  142278             :           static const unsigned pool_size; //
  142279             :           /// \private
  142280             :           static std::vector<unsigned char *> pools; //
  142281             :           /// \private
  142282             :           static SgEnumDeclaration * next_node; // 
  142283             : 
  142284             :           /// \private
  142285             :           static unsigned long initializeStorageClassArray(SgEnumDeclarationStorageClass *); //
  142286             : 
  142287             :           /// \private
  142288             :           static void clearMemoryPool(); //
  142289             :           static void deleteMemoryPool(); //
  142290             : 
  142291             :           /// \private
  142292             :           static void extendMemoryPoolForFileIO(); //
  142293             : 
  142294             :           /// \private
  142295             :           static SgEnumDeclaration * getPointerFromGlobalIndex(unsigned long); //
  142296             :           /// \private
  142297             :           static SgEnumDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  142298             : 
  142299             :           /// \private
  142300             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  142301             :           /// \private
  142302             :           static void resetValidFreepointers(); //
  142303             :           /// \private
  142304             :           static unsigned long getNumberOfLastValidPointer(); //
  142305             : 
  142306             : 
  142307             : #if defined(INLINE_FUNCTIONS)
  142308             :       /*! \brief returns pointer to newly allocated IR node */
  142309             :           inline void *operator new (size_t size);
  142310             : #else
  142311             :       /*! \brief returns pointer to newly allocated IR node */
  142312             :           void *operator new (size_t size);
  142313             : #endif
  142314             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  142315             :           void operator delete (void* pointer, size_t size);
  142316             : 
  142317             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  142318         352 :           void operator delete (void* pointer)
  142319             :              {
  142320             :             // This is the generated delete operator...
  142321         352 :                SgEnumDeclaration::operator delete (pointer,sizeof(SgEnumDeclaration));
  142322             :              }
  142323             : 
  142324             :       /*! \brief Returns the total number of IR nodes of this type */
  142325             :           static size_t numberOfNodes();
  142326             : 
  142327             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  142328             :           static size_t memoryUsage();
  142329             : 
  142330             :       // End of scope which started in IR nodes specific code 
  142331             :       /* */
  142332             : 
  142333             :       /* name Internal Functions
  142334             :           \brief Internal functions ... incomplete-documentation
  142335             : 
  142336             :           These functions have been made public as part of the design, but they are suggested for internal use 
  142337             :           or by particularly knowledgeable users for specialized tools or applications.
  142338             : 
  142339             :           \internal We could not make these private because they are required by user for special purposes. And 
  142340             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  142341             :          
  142342             :        */
  142343             : 
  142344             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  142345             :        // overridden in every class by *generated* implementation
  142346             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  142347             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  142348             :        // MS: 06/28/02 container of names of variables or container indices 
  142349             :        // used used in the traversal to access AST successor nodes
  142350             :        // overridden in every class by *generated* implementation
  142351             :       /*! \brief container of names of variables or container indices used used in the traversal
  142352             :           to access AST successor nodes overridden in every class by *generated* implementation */
  142353             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  142354             : 
  142355             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  142356             :        // than all the vector copies. The implementation for these functions is generated for each class.
  142357             :       /*! \brief return number of children in the traversal successor list */
  142358             :           virtual size_t get_numberOfTraversalSuccessors() override;
  142359             :       /*! \brief index-based access to traversal successors by index number */
  142360             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  142361             :       /*! \brief index-based access to traversal successors by child node */
  142362             :           virtual size_t get_childIndex(SgNode *child) override;
  142363             : 
  142364             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  142365             :        // MS: 08/16/2002 method for generating RTI information
  142366             :       /*! \brief return C++ Runtime-Time-Information */
  142367             :           virtual RTIReturnType roseRTI() override;
  142368             : #endif
  142369             :       /* */
  142370             : 
  142371             : 
  142372             : 
  142373             :       /* name Deprecated Functions
  142374             :           \brief Deprecated functions ... incomplete-documentation
  142375             : 
  142376             :           These functions have been deprecated from use.
  142377             :        */
  142378             :       /* */
  142379             : 
  142380             :       /*! returns a C style string (char*) representing the class name */
  142381             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  142382             : 
  142383             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  142384             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  142385             : #if 0
  142386             :       /*! returns old style Sage II enum values */
  142387             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  142388             :       /*! returns old style Sage II enum values */
  142389             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  142390             : #endif
  142391             :       /* */
  142392             : 
  142393             : 
  142394             : 
  142395             : 
  142396             :      public:
  142397             :       /* name Traversal Support Functions
  142398             :           \brief Traversal support functions ... incomplete-documentation
  142399             : 
  142400             :           These functions have been made public as part of the design, but they are suggested for internal use 
  142401             :           or by particularly knowledgable users for specialized tools or applications.
  142402             :        */
  142403             :       /* */
  142404             : 
  142405             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  142406             :        // (inferior to ROSE traversal mechanism, experimental).
  142407             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  142408             :        */
  142409             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  142410             : 
  142411             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  142412             :       /*! \brief support for the classic visitor pattern done in GoF */
  142413             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  142414             : 
  142415             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  142416             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  142417             :        */
  142418             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  142419             : 
  142420             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  142421             :        */
  142422             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  142423             : 
  142424             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  142425             :        // This traversal helps support internal tools that call static member functions.
  142426             :        // note: this function operates on the memory pools.
  142427             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  142428             :        */
  142429             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  142430             :       /* */
  142431             : 
  142432             : 
  142433             :      public:
  142434             :       /* name Memory Allocation Functions
  142435             :           \brief Memory allocations functions ... incomplete-documentation
  142436             : 
  142437             :           These functions have been made public as part of the design, but they are suggested for internal use 
  142438             :           or by particularly knowledgable users for specialized tools or applications.
  142439             :        */
  142440             :       /* */
  142441             : 
  142442             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  142443             : 
  142444             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  142445             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  142446             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  142447             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  142448             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  142449             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  142450             :           being used with the AST File I/O mechanism.
  142451             :        */
  142452             :           virtual bool isInMemoryPool() override;
  142453             : 
  142454             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  142455             : 
  142456             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  142457             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  142458             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  142459             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  142460             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  142461             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  142462             :           being used with the AST File I/O mechanism.
  142463             :        */
  142464             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  142465             : 
  142466             :       // DQ (4/30/2006): Modified to be a const function.
  142467             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  142468             : 
  142469             :           This functions is part of general support for many possible tools to operate 
  142470             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  142471             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  142472             :           less than the set of pointers used by the AST file I/O. This is part of
  142473             :           work implemented by Andreas, and support tools such as the AST graph generation.
  142474             : 
  142475             :           \warning This function can return unexpected data members and thus the 
  142476             :                    order and the number of elements is unpredicable and subject 
  142477             :                    to change.
  142478             : 
  142479             :           \returns STL vector of pairs of SgNode* and strings
  142480             :        */
  142481             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  142482             : 
  142483             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  142484             : 
  142485             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  142486             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  142487             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  142488             : 
  142489             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  142490             :                    and subject to change.
  142491             :        */
  142492             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  142493             : 
  142494             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  142495             : 
  142496             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  142497             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  142498             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  142499             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  142500             : 
  142501             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  142502             : 
  142503             :           \returns long
  142504             :        */
  142505             :           virtual long getChildIndex( SgNode* childNode ) const override;
  142506             : 
  142507             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  142508             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  142509             :       /* \brief Constructor for use by AST File I/O Mechanism
  142510             : 
  142511             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  142512             :           which obtained via fast binary file I/O from disk.
  142513             :        */
  142514             :        // SgEnumDeclaration( SgEnumDeclarationStorageClass& source );
  142515             : 
  142516             : 
  142517             : 
  142518             : 
  142519             : 
  142520             :  // JH (10/24/2005): methods added to support the ast file IO
  142521             :     private:
  142522             : 
  142523             :       /* name AST Memory Allocation Support Functions
  142524             :           \brief Memory allocations support....
  142525             : 
  142526             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  142527             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  142528             :           and support the AST File I/O Mechanism.
  142529             :        */
  142530             :       /* */
  142531             : 
  142532             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  142533             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  142534             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  142535             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  142536             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  142537             :           a correspinding one in the AST_FILE_IO class!
  142538             :        */
  142539             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  142540             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  142541             :       /* \brief Typedef used for low level memory access.
  142542             :        */
  142543             :        // typedef unsigned char* TestType;
  142544             : 
  142545             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  142546             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  142547             :       /* \brief Typedef used to hold memory addresses as values.
  142548             :        */
  142549             :        // typedef unsigned long  AddressType;
  142550             : 
  142551             : 
  142552             : 
  142553             :        // necessary, to have direct access to the p_freepointer and the private methods !
  142554             :       /*! \brief friend class declaration to support AST File I/O */
  142555             :           friend class AST_FILE_IO;
  142556             : 
  142557             :       /*! \brief friend class declaration to support AST File I/O */
  142558             :           friend class SgEnumDeclarationStorageClass;
  142559             : 
  142560             :       /*! \brief friend class declaration to support AST File I/O */
  142561             :           friend class AstSpecificDataManagingClass;
  142562             : 
  142563             :       /*! \brief friend class declaration to support AST File I/O */
  142564             :           friend class AstSpecificDataManagingClassStorageClass;
  142565             :     public:
  142566             :       /*! \brief IR node constructor to support AST File I/O */
  142567             :           SgEnumDeclaration( const SgEnumDeclarationStorageClass& source );
  142568             : 
  142569             :  // private: // JJW hack
  142570             :        /*
  142571             :           name AST Memory Allocation Support Variables
  142572             :           Memory allocations support variables 
  142573             : 
  142574             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  142575             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  142576             :           and support the AST File I/O Mechanism.
  142577             :        */
  142578             :       /* */
  142579             : 
  142580             :     public:
  142581             : 
  142582             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  142583             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  142584             :       // virtual SgNode* addRegExpAttribute();
  142585             :       /*! \brief Support for AST matching using regular expression.
  142586             : 
  142587             :           This support is incomplete and the subject of current research to define 
  142588             :           RegEx trees to support inexact matching.
  142589             :        */
  142590             :           SgEnumDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  142591             : 
  142592             : // *** COMMON CODE SECTION ENDS HERE ***
  142593             : 
  142594             : 
  142595             : // End of memberFunctionString
  142596             : // Start of memberFunctionString
  142597             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  142598             : 
  142599             :      // the generated cast function
  142600             :      // friend ROSE_DLL_API SgEnumDeclaration* isSgEnumDeclaration ( SgNode* s );
  142601             : 
  142602             :           typedef SgDeclarationStatement base_node_type;
  142603             : 
  142604             : 
  142605             : // End of memberFunctionString
  142606             : // Start of memberFunctionString
  142607             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  142608             : 
  142609             :           void post_construction_initialization() override;
  142610             : 
  142611             : 
  142612             : // End of memberFunctionString
  142613             : 
  142614             :      public: 
  142615             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  142616             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  142617             : 
  142618             :      public: 
  142619             :          bool get_embedded() const;
  142620             :          void set_embedded(bool embedded);
  142621             : 
  142622             :      public: 
  142623             :          SgEnumType* get_type() const /* (getDataAccessFunctionPrototypeString) */;
  142624             :          void set_type(SgEnumType* type) /* (getDataAccessFunctionPrototypeString) */;
  142625             : 
  142626             :      public: 
  142627             :          SgType* get_adaParentType() const;
  142628             :          void set_adaParentType(SgType* adaParentType);
  142629             : 
  142630             :      public: 
  142631             :          const SgInitializedNamePtrList&  get_enumerators() const;
  142632             :          SgInitializedNamePtrList& get_enumerators(); 
  142633             : 
  142634             :      public: 
  142635             :          SgScopeStatement* get_scope() const override /* (getDataAccessFunctionPrototypeString) */;
  142636             :          void set_scope(SgScopeStatement* scope) override /* (getDataAccessFunctionPrototypeString) */;
  142637             : 
  142638             :      public: 
  142639             :          bool get_isUnNamed() const;
  142640             :          void set_isUnNamed(bool isUnNamed);
  142641             : 
  142642             :      public: 
  142643             :          bool get_isAutonomousDeclaration() const;
  142644             :          void set_isAutonomousDeclaration(bool isAutonomousDeclaration);
  142645             : 
  142646             :      public: 
  142647             :          SgType* get_field_type() const;
  142648             :          void set_field_type(SgType* field_type);
  142649             : 
  142650             :      public: 
  142651             :          bool get_isScopedEnum() const;
  142652             :          void set_isScopedEnum(bool isScopedEnum);
  142653             : 
  142654             : 
  142655             : 
  142656             : 
  142657             : 
  142658             :      public: 
  142659             :          virtual ~SgEnumDeclaration();
  142660             : 
  142661             : 
  142662             :      public: 
  142663             :          SgEnumDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgEnumType* type = NULL); 
  142664             :          SgEnumDeclaration(SgName name, SgEnumType* type); 
  142665             : 
  142666             :     protected:
  142667             : // Start of memberFunctionString
  142668             : SgName p_name;
  142669             :           
  142670             : // End of memberFunctionString
  142671             : // Start of memberFunctionString
  142672             : bool p_embedded;
  142673             :           
  142674             : // End of memberFunctionString
  142675             : // Start of memberFunctionString
  142676             : SgEnumType* p_type;
  142677             :           
  142678             : // End of memberFunctionString
  142679             : // Start of memberFunctionString
  142680             : SgType* p_adaParentType;
  142681             :           
  142682             : // End of memberFunctionString
  142683             : // Start of memberFunctionString
  142684             : SgInitializedNamePtrList p_enumerators;
  142685             :           
  142686             : // End of memberFunctionString
  142687             : // Start of memberFunctionString
  142688             : SgScopeStatement* p_scope;
  142689             :           
  142690             : // End of memberFunctionString
  142691             : // Start of memberFunctionString
  142692             : bool p_isUnNamed;
  142693             :           
  142694             : // End of memberFunctionString
  142695             : // Start of memberFunctionString
  142696             : bool p_isAutonomousDeclaration;
  142697             :           
  142698             : // End of memberFunctionString
  142699             : // Start of memberFunctionString
  142700             : SgType* p_field_type;
  142701             :           
  142702             : // End of memberFunctionString
  142703             : // Start of memberFunctionString
  142704             : bool p_isScopedEnum;
  142705             :           
  142706             : // End of memberFunctionString
  142707             : // Start of memberFunctionString
  142708             : int p_name_qualification_length;
  142709             :           
  142710             : // End of memberFunctionString
  142711             : // Start of memberFunctionString
  142712             : bool p_type_elaboration_required;
  142713             :           
  142714             : // End of memberFunctionString
  142715             : // Start of memberFunctionString
  142716             : bool p_global_qualification_required;
  142717             :           
  142718             : // End of memberFunctionString
  142719             : 
  142720             :     friend struct Rose::Traits::generated::describe_node_t<SgEnumDeclaration>;
  142721             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, SgName,&SgEnumDeclaration::p_name>;
  142722             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, bool,&SgEnumDeclaration::p_embedded>;
  142723             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, SgEnumType*,&SgEnumDeclaration::p_type>;
  142724             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, SgType*,&SgEnumDeclaration::p_adaParentType>;
  142725             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, SgInitializedNamePtrList,&SgEnumDeclaration::p_enumerators>;
  142726             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, SgScopeStatement*,&SgEnumDeclaration::p_scope>;
  142727             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, bool,&SgEnumDeclaration::p_isUnNamed>;
  142728             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, bool,&SgEnumDeclaration::p_isAutonomousDeclaration>;
  142729             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, SgType*,&SgEnumDeclaration::p_field_type>;
  142730             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, bool,&SgEnumDeclaration::p_isScopedEnum>;
  142731             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, int,&SgEnumDeclaration::p_name_qualification_length>;
  142732             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, bool,&SgEnumDeclaration::p_type_elaboration_required>;
  142733             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumDeclaration, bool,&SgEnumDeclaration::p_global_qualification_required>;
  142734             : 
  142735             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142736             : 
  142737             : 
  142738             :    };
  142739             : #endif
  142740             : 
  142741             : // postdeclarations for SgEnumDeclaration
  142742             : 
  142743             : /* #line 142744 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142744             : 
  142745             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  142746             : 
  142747             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142748             : 
  142749             : 
  142750             : /* #line 142751 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142751             : 
  142752             : 
  142753             : 
  142754             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142755             : 
  142756             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  142757             : //      This code is automatically generated for each 
  142758             : //      terminal and non-terminal within the defined 
  142759             : //      grammar.  There is a simple way to change the 
  142760             : //      code to fix bugs etc.  See the ROSE README file
  142761             : //      for directions.
  142762             : 
  142763             : // tps: (02/22/2010): Adding DLL export requirements
  142764             : #include "rosedll.h"
  142765             : 
  142766             : // predeclarations for SgAsmStmt
  142767             : 
  142768             : /* #line 142769 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142769             : 
  142770             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  142771             : 
  142772             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  142773             : 
  142774             : #if 1
  142775             : // Class Definition for SgAsmStmt
  142776             : class ROSE_DLL_API SgAsmStmt  : public SgDeclarationStatement
  142777             :    {
  142778             :      public:
  142779             : 
  142780             : 
  142781             : /* #line 142782 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  142782             : 
  142783             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  142784             : // Start of memberFunctionString
  142785             : /* #line 2598 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  142786             : 
  142787             : 
  142788             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  142789             :           virtual unsigned int cfgIndexForEnd() const override;
  142790             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  142791             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  142792             : #endif
  142793             :        // DQ (7/26/2006): Need a type for the list of registers used in the clobber list
  142794             :           typedef std::vector<SgInitializedName::asm_register_name_enum> AsmRegisterNameList;
  142795             : 
  142796             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  142797             :           virtual SgName get_mangled_name(void) const override;
  142798             : 
  142799             :        // DQ (7/22/2006): We need these to be explicit since we can't support reference parameter passing within ROSETTA.
  142800             :           SgExpressionPtrList& get_operands();
  142801             :           const SgExpressionPtrList& get_operands() const;
  142802             : 
  142803             :        // DQ (7/27/2006): We need these to be explicit since we can't support reference parameter passing within ROSETTA.
  142804             :           AsmRegisterNameList& get_clobberRegisterList();
  142805             :           const AsmRegisterNameList& get_clobberRegisterList() const;
  142806             : 
  142807             : 
  142808             : 
  142809             : // End of memberFunctionString
  142810             : // Start of memberFunctionString
  142811             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  142812             : 
  142813             : // *** COMMON CODE SECTION BEGINS HERE ***
  142814             : 
  142815             :     public:
  142816             : 
  142817             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  142818             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  142819             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  142820             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  142821             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  142822             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  142823             : 
  142824             :       /*! \brief returns a string representing the class name */
  142825             :           virtual std::string class_name() const override;
  142826             : 
  142827             :       /*! \brief returns new style SageIII enum values */
  142828             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  142829             : 
  142830             :       /*! \brief static variant value */
  142831             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  142832             :        // static const VariantT static_variant = V_SgAsmStmt;
  142833             :           enum { static_variant = V_SgAsmStmt };
  142834             : 
  142835             :        /* the generated cast function */
  142836             :       /*! \brief Casts pointer from base class to derived class */
  142837             :           ROSE_DLL_API friend       SgAsmStmt* isSgAsmStmt(       SgNode * s );
  142838             : 
  142839             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  142840             :           ROSE_DLL_API friend const SgAsmStmt* isSgAsmStmt( const SgNode * s );
  142841             : 
  142842             :      // ******************************************
  142843             :      // * Memory Pool / New / Delete
  142844             :      // ******************************************
  142845             : 
  142846             :      public:
  142847             :           /// \private
  142848             :           static const unsigned pool_size; //
  142849             :           /// \private
  142850             :           static std::vector<unsigned char *> pools; //
  142851             :           /// \private
  142852             :           static SgAsmStmt * next_node; // 
  142853             : 
  142854             :           /// \private
  142855             :           static unsigned long initializeStorageClassArray(SgAsmStmtStorageClass *); //
  142856             : 
  142857             :           /// \private
  142858             :           static void clearMemoryPool(); //
  142859             :           static void deleteMemoryPool(); //
  142860             : 
  142861             :           /// \private
  142862             :           static void extendMemoryPoolForFileIO(); //
  142863             : 
  142864             :           /// \private
  142865             :           static SgAsmStmt * getPointerFromGlobalIndex(unsigned long); //
  142866             :           /// \private
  142867             :           static SgAsmStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  142868             : 
  142869             :           /// \private
  142870             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  142871             :           /// \private
  142872             :           static void resetValidFreepointers(); //
  142873             :           /// \private
  142874             :           static unsigned long getNumberOfLastValidPointer(); //
  142875             : 
  142876             : 
  142877             : #if defined(INLINE_FUNCTIONS)
  142878             :       /*! \brief returns pointer to newly allocated IR node */
  142879             :           inline void *operator new (size_t size);
  142880             : #else
  142881             :       /*! \brief returns pointer to newly allocated IR node */
  142882             :           void *operator new (size_t size);
  142883             : #endif
  142884             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  142885             :           void operator delete (void* pointer, size_t size);
  142886             : 
  142887             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  142888           0 :           void operator delete (void* pointer)
  142889             :              {
  142890             :             // This is the generated delete operator...
  142891           0 :                SgAsmStmt::operator delete (pointer,sizeof(SgAsmStmt));
  142892             :              }
  142893             : 
  142894             :       /*! \brief Returns the total number of IR nodes of this type */
  142895             :           static size_t numberOfNodes();
  142896             : 
  142897             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  142898             :           static size_t memoryUsage();
  142899             : 
  142900             :       // End of scope which started in IR nodes specific code 
  142901             :       /* */
  142902             : 
  142903             :       /* name Internal Functions
  142904             :           \brief Internal functions ... incomplete-documentation
  142905             : 
  142906             :           These functions have been made public as part of the design, but they are suggested for internal use 
  142907             :           or by particularly knowledgeable users for specialized tools or applications.
  142908             : 
  142909             :           \internal We could not make these private because they are required by user for special purposes. And 
  142910             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  142911             :          
  142912             :        */
  142913             : 
  142914             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  142915             :        // overridden in every class by *generated* implementation
  142916             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  142917             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  142918             :        // MS: 06/28/02 container of names of variables or container indices 
  142919             :        // used used in the traversal to access AST successor nodes
  142920             :        // overridden in every class by *generated* implementation
  142921             :       /*! \brief container of names of variables or container indices used used in the traversal
  142922             :           to access AST successor nodes overridden in every class by *generated* implementation */
  142923             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  142924             : 
  142925             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  142926             :        // than all the vector copies. The implementation for these functions is generated for each class.
  142927             :       /*! \brief return number of children in the traversal successor list */
  142928             :           virtual size_t get_numberOfTraversalSuccessors() override;
  142929             :       /*! \brief index-based access to traversal successors by index number */
  142930             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  142931             :       /*! \brief index-based access to traversal successors by child node */
  142932             :           virtual size_t get_childIndex(SgNode *child) override;
  142933             : 
  142934             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  142935             :        // MS: 08/16/2002 method for generating RTI information
  142936             :       /*! \brief return C++ Runtime-Time-Information */
  142937             :           virtual RTIReturnType roseRTI() override;
  142938             : #endif
  142939             :       /* */
  142940             : 
  142941             : 
  142942             : 
  142943             :       /* name Deprecated Functions
  142944             :           \brief Deprecated functions ... incomplete-documentation
  142945             : 
  142946             :           These functions have been deprecated from use.
  142947             :        */
  142948             :       /* */
  142949             : 
  142950             :       /*! returns a C style string (char*) representing the class name */
  142951             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  142952             : 
  142953             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  142954             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  142955             : #if 0
  142956             :       /*! returns old style Sage II enum values */
  142957             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  142958             :       /*! returns old style Sage II enum values */
  142959             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  142960             : #endif
  142961             :       /* */
  142962             : 
  142963             : 
  142964             : 
  142965             : 
  142966             :      public:
  142967             :       /* name Traversal Support Functions
  142968             :           \brief Traversal support functions ... incomplete-documentation
  142969             : 
  142970             :           These functions have been made public as part of the design, but they are suggested for internal use 
  142971             :           or by particularly knowledgable users for specialized tools or applications.
  142972             :        */
  142973             :       /* */
  142974             : 
  142975             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  142976             :        // (inferior to ROSE traversal mechanism, experimental).
  142977             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  142978             :        */
  142979             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  142980             : 
  142981             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  142982             :       /*! \brief support for the classic visitor pattern done in GoF */
  142983             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  142984             : 
  142985             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  142986             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  142987             :        */
  142988             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  142989             : 
  142990             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  142991             :        */
  142992             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  142993             : 
  142994             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  142995             :        // This traversal helps support internal tools that call static member functions.
  142996             :        // note: this function operates on the memory pools.
  142997             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  142998             :        */
  142999             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  143000             :       /* */
  143001             : 
  143002             : 
  143003             :      public:
  143004             :       /* name Memory Allocation Functions
  143005             :           \brief Memory allocations functions ... incomplete-documentation
  143006             : 
  143007             :           These functions have been made public as part of the design, but they are suggested for internal use 
  143008             :           or by particularly knowledgable users for specialized tools or applications.
  143009             :        */
  143010             :       /* */
  143011             : 
  143012             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  143013             : 
  143014             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  143015             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  143016             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  143017             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  143018             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  143019             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  143020             :           being used with the AST File I/O mechanism.
  143021             :        */
  143022             :           virtual bool isInMemoryPool() override;
  143023             : 
  143024             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  143025             : 
  143026             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  143027             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  143028             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  143029             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  143030             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  143031             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  143032             :           being used with the AST File I/O mechanism.
  143033             :        */
  143034             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  143035             : 
  143036             :       // DQ (4/30/2006): Modified to be a const function.
  143037             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  143038             : 
  143039             :           This functions is part of general support for many possible tools to operate 
  143040             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  143041             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  143042             :           less than the set of pointers used by the AST file I/O. This is part of
  143043             :           work implemented by Andreas, and support tools such as the AST graph generation.
  143044             : 
  143045             :           \warning This function can return unexpected data members and thus the 
  143046             :                    order and the number of elements is unpredicable and subject 
  143047             :                    to change.
  143048             : 
  143049             :           \returns STL vector of pairs of SgNode* and strings
  143050             :        */
  143051             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  143052             : 
  143053             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  143054             : 
  143055             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  143056             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  143057             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  143058             : 
  143059             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  143060             :                    and subject to change.
  143061             :        */
  143062             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  143063             : 
  143064             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  143065             : 
  143066             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  143067             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  143068             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  143069             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  143070             : 
  143071             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  143072             : 
  143073             :           \returns long
  143074             :        */
  143075             :           virtual long getChildIndex( SgNode* childNode ) const override;
  143076             : 
  143077             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  143078             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  143079             :       /* \brief Constructor for use by AST File I/O Mechanism
  143080             : 
  143081             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  143082             :           which obtained via fast binary file I/O from disk.
  143083             :        */
  143084             :        // SgAsmStmt( SgAsmStmtStorageClass& source );
  143085             : 
  143086             : 
  143087             : 
  143088             : 
  143089             : 
  143090             :  // JH (10/24/2005): methods added to support the ast file IO
  143091             :     private:
  143092             : 
  143093             :       /* name AST Memory Allocation Support Functions
  143094             :           \brief Memory allocations support....
  143095             : 
  143096             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  143097             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  143098             :           and support the AST File I/O Mechanism.
  143099             :        */
  143100             :       /* */
  143101             : 
  143102             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  143103             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  143104             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  143105             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  143106             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  143107             :           a correspinding one in the AST_FILE_IO class!
  143108             :        */
  143109             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  143110             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  143111             :       /* \brief Typedef used for low level memory access.
  143112             :        */
  143113             :        // typedef unsigned char* TestType;
  143114             : 
  143115             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  143116             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  143117             :       /* \brief Typedef used to hold memory addresses as values.
  143118             :        */
  143119             :        // typedef unsigned long  AddressType;
  143120             : 
  143121             : 
  143122             : 
  143123             :        // necessary, to have direct access to the p_freepointer and the private methods !
  143124             :       /*! \brief friend class declaration to support AST File I/O */
  143125             :           friend class AST_FILE_IO;
  143126             : 
  143127             :       /*! \brief friend class declaration to support AST File I/O */
  143128             :           friend class SgAsmStmtStorageClass;
  143129             : 
  143130             :       /*! \brief friend class declaration to support AST File I/O */
  143131             :           friend class AstSpecificDataManagingClass;
  143132             : 
  143133             :       /*! \brief friend class declaration to support AST File I/O */
  143134             :           friend class AstSpecificDataManagingClassStorageClass;
  143135             :     public:
  143136             :       /*! \brief IR node constructor to support AST File I/O */
  143137             :           SgAsmStmt( const SgAsmStmtStorageClass& source );
  143138             : 
  143139             :  // private: // JJW hack
  143140             :        /*
  143141             :           name AST Memory Allocation Support Variables
  143142             :           Memory allocations support variables 
  143143             : 
  143144             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  143145             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  143146             :           and support the AST File I/O Mechanism.
  143147             :        */
  143148             :       /* */
  143149             : 
  143150             :     public:
  143151             : 
  143152             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  143153             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  143154             :       // virtual SgNode* addRegExpAttribute();
  143155             :       /*! \brief Support for AST matching using regular expression.
  143156             : 
  143157             :           This support is incomplete and the subject of current research to define 
  143158             :           RegEx trees to support inexact matching.
  143159             :        */
  143160             :           SgAsmStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  143161             : 
  143162             : // *** COMMON CODE SECTION ENDS HERE ***
  143163             : 
  143164             : 
  143165             : // End of memberFunctionString
  143166             : // Start of memberFunctionString
  143167             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  143168             : 
  143169             :      // the generated cast function
  143170             :      // friend ROSE_DLL_API SgAsmStmt* isSgAsmStmt ( SgNode* s );
  143171             : 
  143172             :           typedef SgDeclarationStatement base_node_type;
  143173             : 
  143174             : 
  143175             : // End of memberFunctionString
  143176             : // Start of memberFunctionString
  143177             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  143178             : 
  143179             :           void post_construction_initialization() override;
  143180             : 
  143181             : 
  143182             : // End of memberFunctionString
  143183             : 
  143184             :      public: 
  143185             :          std::string get_assemblyCode() const;
  143186             :          void set_assemblyCode(std::string assemblyCode);
  143187             : 
  143188             :      public: 
  143189             :          bool get_useGnuExtendedFormat() const;
  143190             :          void set_useGnuExtendedFormat(bool useGnuExtendedFormat);
  143191             : 
  143192             : 
  143193             : 
  143194             :      public: 
  143195             :          bool get_isVolatile() const;
  143196             :          void set_isVolatile(bool isVolatile);
  143197             : 
  143198             : 
  143199             :      public: 
  143200             :          virtual ~SgAsmStmt();
  143201             : 
  143202             : 
  143203             :      public: 
  143204             :          SgAsmStmt(Sg_File_Info* startOfConstruct ); 
  143205             :          SgAsmStmt(); 
  143206             : 
  143207             :     protected:
  143208             : // Start of memberFunctionString
  143209             : std::string p_assemblyCode;
  143210             :           
  143211             : // End of memberFunctionString
  143212             : // Start of memberFunctionString
  143213             : bool p_useGnuExtendedFormat;
  143214             :           
  143215             : // End of memberFunctionString
  143216             : // Start of memberFunctionString
  143217             : SgExpressionPtrList p_operands;
  143218             :           
  143219             : // End of memberFunctionString
  143220             : // Start of memberFunctionString
  143221             : SgAsmStmt::AsmRegisterNameList p_clobberRegisterList;
  143222             :           
  143223             : // End of memberFunctionString
  143224             : // Start of memberFunctionString
  143225             : bool p_isVolatile;
  143226             :           
  143227             : // End of memberFunctionString
  143228             : 
  143229             :     friend struct Rose::Traits::generated::describe_node_t<SgAsmStmt>;
  143230             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmStmt, std::string,&SgAsmStmt::p_assemblyCode>;
  143231             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmStmt, bool,&SgAsmStmt::p_useGnuExtendedFormat>;
  143232             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmStmt, SgExpressionPtrList,&SgAsmStmt::p_operands>;
  143233             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmStmt, SgAsmStmt::AsmRegisterNameList,&SgAsmStmt::p_clobberRegisterList>;
  143234             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmStmt, bool,&SgAsmStmt::p_isVolatile>;
  143235             : 
  143236             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143237             : 
  143238             : 
  143239             :    };
  143240             : #endif
  143241             : 
  143242             : // postdeclarations for SgAsmStmt
  143243             : 
  143244             : /* #line 143245 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143245             : 
  143246             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  143247             : 
  143248             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143249             : 
  143250             : 
  143251             : /* #line 143252 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143252             : 
  143253             : 
  143254             : 
  143255             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143256             : 
  143257             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  143258             : //      This code is automatically generated for each 
  143259             : //      terminal and non-terminal within the defined 
  143260             : //      grammar.  There is a simple way to change the 
  143261             : //      code to fix bugs etc.  See the ROSE README file
  143262             : //      for directions.
  143263             : 
  143264             : // tps: (02/22/2010): Adding DLL export requirements
  143265             : #include "rosedll.h"
  143266             : 
  143267             : // predeclarations for SgAttributeSpecificationStatement
  143268             : 
  143269             : /* #line 143270 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143270             : 
  143271             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  143272             : 
  143273             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143274             : 
  143275             : #if 1
  143276             : // Class Definition for SgAttributeSpecificationStatement
  143277             : class ROSE_DLL_API SgAttributeSpecificationStatement  : public SgDeclarationStatement
  143278             :    {
  143279             :      public:
  143280             : 
  143281             : 
  143282             : /* #line 143283 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143283             : 
  143284             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  143285             : // Start of memberFunctionString
  143286             : /* #line 3684 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  143287             : 
  143288             : 
  143289             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  143290             :      virtual unsigned int cfgIndexForEnd() const override;
  143291             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  143292             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  143293             : #endif
  143294             : 
  143295             :      public:
  143296             :       //! Fortran specific classification of attribute statements (each corresponds to a declaration attribute).
  143297             :           enum attribute_spec_enum
  143298             :              {
  143299             :                e_unknown_attribute_spec,
  143300             :                e_accessStatement_private,
  143301             :                e_accessStatement_public,
  143302             :                e_allocatableStatement,
  143303             :                e_asynchronousStatement,
  143304             :                e_bindStatement,
  143305             :                e_dataStatement,
  143306             :                e_dimensionStatement,
  143307             :                e_externalStatement,
  143308             :                e_intentStatement,
  143309             :                e_intrinsicStatement,
  143310             :                e_optionalStatement,
  143311             :                e_parameterStatement,
  143312             :                e_pointerStatement,
  143313             :                e_protectedStatement,
  143314             :                e_saveStatement,
  143315             :                e_targetStatement,
  143316             :                e_valueStatement,
  143317             :                e_volatileStatement,
  143318             :                e_last_attribute_spec
  143319             :              };
  143320             : 
  143321             :           virtual SgName get_mangled_name() const override;
  143322             : 
  143323             :           const SgStringList & get_name_list() const;
  143324             :           SgStringList & get_name_list();
  143325             : 
  143326             :       //! Support for Fortran data statement
  143327             :           const SgDataStatementGroupPtrList & get_data_statement_group_list() const;
  143328             :           SgDataStatementGroupPtrList & get_data_statement_group_list();
  143329             : 
  143330             :       //! Support for Fortran data statement
  143331             :           const SgDimensionObjectPtrList & get_dimension_object_list() const;
  143332             :           SgDimensionObjectPtrList & get_dimension_object_list();
  143333             : 
  143334             :        // DQ (12/9/2007): Added special support for this case.
  143335             :           SgSymbol* search_for_symbol_from_symbol_table() const;
  143336             : 
  143337             : 
  143338             : 
  143339             : // End of memberFunctionString
  143340             : // Start of memberFunctionString
  143341             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  143342             : 
  143343             : // *** COMMON CODE SECTION BEGINS HERE ***
  143344             : 
  143345             :     public:
  143346             : 
  143347             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  143348             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  143349             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  143350             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  143351             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  143352             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  143353             : 
  143354             :       /*! \brief returns a string representing the class name */
  143355             :           virtual std::string class_name() const override;
  143356             : 
  143357             :       /*! \brief returns new style SageIII enum values */
  143358             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  143359             : 
  143360             :       /*! \brief static variant value */
  143361             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  143362             :        // static const VariantT static_variant = V_SgAttributeSpecificationStatement;
  143363             :           enum { static_variant = V_SgAttributeSpecificationStatement };
  143364             : 
  143365             :        /* the generated cast function */
  143366             :       /*! \brief Casts pointer from base class to derived class */
  143367             :           ROSE_DLL_API friend       SgAttributeSpecificationStatement* isSgAttributeSpecificationStatement(       SgNode * s );
  143368             : 
  143369             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  143370             :           ROSE_DLL_API friend const SgAttributeSpecificationStatement* isSgAttributeSpecificationStatement( const SgNode * s );
  143371             : 
  143372             :      // ******************************************
  143373             :      // * Memory Pool / New / Delete
  143374             :      // ******************************************
  143375             : 
  143376             :      public:
  143377             :           /// \private
  143378             :           static const unsigned pool_size; //
  143379             :           /// \private
  143380             :           static std::vector<unsigned char *> pools; //
  143381             :           /// \private
  143382             :           static SgAttributeSpecificationStatement * next_node; // 
  143383             : 
  143384             :           /// \private
  143385             :           static unsigned long initializeStorageClassArray(SgAttributeSpecificationStatementStorageClass *); //
  143386             : 
  143387             :           /// \private
  143388             :           static void clearMemoryPool(); //
  143389             :           static void deleteMemoryPool(); //
  143390             : 
  143391             :           /// \private
  143392             :           static void extendMemoryPoolForFileIO(); //
  143393             : 
  143394             :           /// \private
  143395             :           static SgAttributeSpecificationStatement * getPointerFromGlobalIndex(unsigned long); //
  143396             :           /// \private
  143397             :           static SgAttributeSpecificationStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  143398             : 
  143399             :           /// \private
  143400             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  143401             :           /// \private
  143402             :           static void resetValidFreepointers(); //
  143403             :           /// \private
  143404             :           static unsigned long getNumberOfLastValidPointer(); //
  143405             : 
  143406             : 
  143407             : #if defined(INLINE_FUNCTIONS)
  143408             :       /*! \brief returns pointer to newly allocated IR node */
  143409             :           inline void *operator new (size_t size);
  143410             : #else
  143411             :       /*! \brief returns pointer to newly allocated IR node */
  143412             :           void *operator new (size_t size);
  143413             : #endif
  143414             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  143415             :           void operator delete (void* pointer, size_t size);
  143416             : 
  143417             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  143418           0 :           void operator delete (void* pointer)
  143419             :              {
  143420             :             // This is the generated delete operator...
  143421           0 :                SgAttributeSpecificationStatement::operator delete (pointer,sizeof(SgAttributeSpecificationStatement));
  143422             :              }
  143423             : 
  143424             :       /*! \brief Returns the total number of IR nodes of this type */
  143425             :           static size_t numberOfNodes();
  143426             : 
  143427             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  143428             :           static size_t memoryUsage();
  143429             : 
  143430             :       // End of scope which started in IR nodes specific code 
  143431             :       /* */
  143432             : 
  143433             :       /* name Internal Functions
  143434             :           \brief Internal functions ... incomplete-documentation
  143435             : 
  143436             :           These functions have been made public as part of the design, but they are suggested for internal use 
  143437             :           or by particularly knowledgeable users for specialized tools or applications.
  143438             : 
  143439             :           \internal We could not make these private because they are required by user for special purposes. And 
  143440             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  143441             :          
  143442             :        */
  143443             : 
  143444             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  143445             :        // overridden in every class by *generated* implementation
  143446             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  143447             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  143448             :        // MS: 06/28/02 container of names of variables or container indices 
  143449             :        // used used in the traversal to access AST successor nodes
  143450             :        // overridden in every class by *generated* implementation
  143451             :       /*! \brief container of names of variables or container indices used used in the traversal
  143452             :           to access AST successor nodes overridden in every class by *generated* implementation */
  143453             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  143454             : 
  143455             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  143456             :        // than all the vector copies. The implementation for these functions is generated for each class.
  143457             :       /*! \brief return number of children in the traversal successor list */
  143458             :           virtual size_t get_numberOfTraversalSuccessors() override;
  143459             :       /*! \brief index-based access to traversal successors by index number */
  143460             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  143461             :       /*! \brief index-based access to traversal successors by child node */
  143462             :           virtual size_t get_childIndex(SgNode *child) override;
  143463             : 
  143464             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  143465             :        // MS: 08/16/2002 method for generating RTI information
  143466             :       /*! \brief return C++ Runtime-Time-Information */
  143467             :           virtual RTIReturnType roseRTI() override;
  143468             : #endif
  143469             :       /* */
  143470             : 
  143471             : 
  143472             : 
  143473             :       /* name Deprecated Functions
  143474             :           \brief Deprecated functions ... incomplete-documentation
  143475             : 
  143476             :           These functions have been deprecated from use.
  143477             :        */
  143478             :       /* */
  143479             : 
  143480             :       /*! returns a C style string (char*) representing the class name */
  143481             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  143482             : 
  143483             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  143484             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  143485             : #if 0
  143486             :       /*! returns old style Sage II enum values */
  143487             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  143488             :       /*! returns old style Sage II enum values */
  143489             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  143490             : #endif
  143491             :       /* */
  143492             : 
  143493             : 
  143494             : 
  143495             : 
  143496             :      public:
  143497             :       /* name Traversal Support Functions
  143498             :           \brief Traversal support functions ... incomplete-documentation
  143499             : 
  143500             :           These functions have been made public as part of the design, but they are suggested for internal use 
  143501             :           or by particularly knowledgable users for specialized tools or applications.
  143502             :        */
  143503             :       /* */
  143504             : 
  143505             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  143506             :        // (inferior to ROSE traversal mechanism, experimental).
  143507             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  143508             :        */
  143509             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  143510             : 
  143511             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  143512             :       /*! \brief support for the classic visitor pattern done in GoF */
  143513             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  143514             : 
  143515             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  143516             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  143517             :        */
  143518             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  143519             : 
  143520             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  143521             :        */
  143522             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  143523             : 
  143524             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  143525             :        // This traversal helps support internal tools that call static member functions.
  143526             :        // note: this function operates on the memory pools.
  143527             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  143528             :        */
  143529             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  143530             :       /* */
  143531             : 
  143532             : 
  143533             :      public:
  143534             :       /* name Memory Allocation Functions
  143535             :           \brief Memory allocations functions ... incomplete-documentation
  143536             : 
  143537             :           These functions have been made public as part of the design, but they are suggested for internal use 
  143538             :           or by particularly knowledgable users for specialized tools or applications.
  143539             :        */
  143540             :       /* */
  143541             : 
  143542             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  143543             : 
  143544             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  143545             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  143546             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  143547             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  143548             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  143549             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  143550             :           being used with the AST File I/O mechanism.
  143551             :        */
  143552             :           virtual bool isInMemoryPool() override;
  143553             : 
  143554             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  143555             : 
  143556             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  143557             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  143558             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  143559             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  143560             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  143561             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  143562             :           being used with the AST File I/O mechanism.
  143563             :        */
  143564             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  143565             : 
  143566             :       // DQ (4/30/2006): Modified to be a const function.
  143567             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  143568             : 
  143569             :           This functions is part of general support for many possible tools to operate 
  143570             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  143571             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  143572             :           less than the set of pointers used by the AST file I/O. This is part of
  143573             :           work implemented by Andreas, and support tools such as the AST graph generation.
  143574             : 
  143575             :           \warning This function can return unexpected data members and thus the 
  143576             :                    order and the number of elements is unpredicable and subject 
  143577             :                    to change.
  143578             : 
  143579             :           \returns STL vector of pairs of SgNode* and strings
  143580             :        */
  143581             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  143582             : 
  143583             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  143584             : 
  143585             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  143586             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  143587             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  143588             : 
  143589             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  143590             :                    and subject to change.
  143591             :        */
  143592             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  143593             : 
  143594             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  143595             : 
  143596             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  143597             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  143598             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  143599             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  143600             : 
  143601             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  143602             : 
  143603             :           \returns long
  143604             :        */
  143605             :           virtual long getChildIndex( SgNode* childNode ) const override;
  143606             : 
  143607             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  143608             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  143609             :       /* \brief Constructor for use by AST File I/O Mechanism
  143610             : 
  143611             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  143612             :           which obtained via fast binary file I/O from disk.
  143613             :        */
  143614             :        // SgAttributeSpecificationStatement( SgAttributeSpecificationStatementStorageClass& source );
  143615             : 
  143616             : 
  143617             : 
  143618             : 
  143619             : 
  143620             :  // JH (10/24/2005): methods added to support the ast file IO
  143621             :     private:
  143622             : 
  143623             :       /* name AST Memory Allocation Support Functions
  143624             :           \brief Memory allocations support....
  143625             : 
  143626             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  143627             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  143628             :           and support the AST File I/O Mechanism.
  143629             :        */
  143630             :       /* */
  143631             : 
  143632             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  143633             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  143634             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  143635             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  143636             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  143637             :           a correspinding one in the AST_FILE_IO class!
  143638             :        */
  143639             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  143640             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  143641             :       /* \brief Typedef used for low level memory access.
  143642             :        */
  143643             :        // typedef unsigned char* TestType;
  143644             : 
  143645             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  143646             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  143647             :       /* \brief Typedef used to hold memory addresses as values.
  143648             :        */
  143649             :        // typedef unsigned long  AddressType;
  143650             : 
  143651             : 
  143652             : 
  143653             :        // necessary, to have direct access to the p_freepointer and the private methods !
  143654             :       /*! \brief friend class declaration to support AST File I/O */
  143655             :           friend class AST_FILE_IO;
  143656             : 
  143657             :       /*! \brief friend class declaration to support AST File I/O */
  143658             :           friend class SgAttributeSpecificationStatementStorageClass;
  143659             : 
  143660             :       /*! \brief friend class declaration to support AST File I/O */
  143661             :           friend class AstSpecificDataManagingClass;
  143662             : 
  143663             :       /*! \brief friend class declaration to support AST File I/O */
  143664             :           friend class AstSpecificDataManagingClassStorageClass;
  143665             :     public:
  143666             :       /*! \brief IR node constructor to support AST File I/O */
  143667             :           SgAttributeSpecificationStatement( const SgAttributeSpecificationStatementStorageClass& source );
  143668             : 
  143669             :  // private: // JJW hack
  143670             :        /*
  143671             :           name AST Memory Allocation Support Variables
  143672             :           Memory allocations support variables 
  143673             : 
  143674             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  143675             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  143676             :           and support the AST File I/O Mechanism.
  143677             :        */
  143678             :       /* */
  143679             : 
  143680             :     public:
  143681             : 
  143682             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  143683             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  143684             :       // virtual SgNode* addRegExpAttribute();
  143685             :       /*! \brief Support for AST matching using regular expression.
  143686             : 
  143687             :           This support is incomplete and the subject of current research to define 
  143688             :           RegEx trees to support inexact matching.
  143689             :        */
  143690             :           SgAttributeSpecificationStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  143691             : 
  143692             : // *** COMMON CODE SECTION ENDS HERE ***
  143693             : 
  143694             : 
  143695             : // End of memberFunctionString
  143696             : // Start of memberFunctionString
  143697             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  143698             : 
  143699             :      // the generated cast function
  143700             :      // friend ROSE_DLL_API SgAttributeSpecificationStatement* isSgAttributeSpecificationStatement ( SgNode* s );
  143701             : 
  143702             :           typedef SgDeclarationStatement base_node_type;
  143703             : 
  143704             : 
  143705             : // End of memberFunctionString
  143706             : // Start of memberFunctionString
  143707             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  143708             : 
  143709             :           void post_construction_initialization() override;
  143710             : 
  143711             : 
  143712             : // End of memberFunctionString
  143713             : 
  143714             : 
  143715             :      public: 
  143716             :          SgAttributeSpecificationStatement::attribute_spec_enum get_attribute_kind() const;
  143717             :          void set_attribute_kind(SgAttributeSpecificationStatement::attribute_spec_enum attribute_kind);
  143718             : 
  143719             :      public: 
  143720             :          int get_intent() const;
  143721             :          void set_intent(int intent);
  143722             : 
  143723             :      public: 
  143724             :          SgExprListExp* get_parameter_list() const;
  143725             :          void set_parameter_list(SgExprListExp* parameter_list);
  143726             : 
  143727             : 
  143728             :      public: 
  143729             :          SgExprListExp* get_bind_list() const;
  143730             :          void set_bind_list(SgExprListExp* bind_list);
  143731             : 
  143732             : 
  143733             : 
  143734             :      public: 
  143735             :          virtual ~SgAttributeSpecificationStatement();
  143736             : 
  143737             : 
  143738             :      public: 
  143739             :          SgAttributeSpecificationStatement(Sg_File_Info* startOfConstruct ); 
  143740             :          SgAttributeSpecificationStatement(); 
  143741             : 
  143742             :     protected:
  143743             : // Start of memberFunctionString
  143744             : SgStringList p_name_list;
  143745             :           
  143746             : // End of memberFunctionString
  143747             : // Start of memberFunctionString
  143748             : SgAttributeSpecificationStatement::attribute_spec_enum p_attribute_kind;
  143749             :           
  143750             : // End of memberFunctionString
  143751             : // Start of memberFunctionString
  143752             : int p_intent;
  143753             :           
  143754             : // End of memberFunctionString
  143755             : // Start of memberFunctionString
  143756             : SgExprListExp* p_parameter_list;
  143757             :           
  143758             : // End of memberFunctionString
  143759             : // Start of memberFunctionString
  143760             : SgDataStatementGroupPtrList p_data_statement_group_list;
  143761             :           
  143762             : // End of memberFunctionString
  143763             : // Start of memberFunctionString
  143764             : SgExprListExp* p_bind_list;
  143765             :           
  143766             : // End of memberFunctionString
  143767             : // Start of memberFunctionString
  143768             : SgDimensionObjectPtrList p_dimension_object_list;
  143769             :           
  143770             : // End of memberFunctionString
  143771             : 
  143772             :     friend struct Rose::Traits::generated::describe_node_t<SgAttributeSpecificationStatement>;
  143773             :     friend struct Rose::Traits::generated::describe_field_t<SgAttributeSpecificationStatement, SgStringList,&SgAttributeSpecificationStatement::p_name_list>;
  143774             :     friend struct Rose::Traits::generated::describe_field_t<SgAttributeSpecificationStatement, SgAttributeSpecificationStatement::attribute_spec_enum,&SgAttributeSpecificationStatement::p_attribute_kind>;
  143775             :     friend struct Rose::Traits::generated::describe_field_t<SgAttributeSpecificationStatement, int,&SgAttributeSpecificationStatement::p_intent>;
  143776             :     friend struct Rose::Traits::generated::describe_field_t<SgAttributeSpecificationStatement, SgExprListExp*,&SgAttributeSpecificationStatement::p_parameter_list>;
  143777             :     friend struct Rose::Traits::generated::describe_field_t<SgAttributeSpecificationStatement, SgDataStatementGroupPtrList,&SgAttributeSpecificationStatement::p_data_statement_group_list>;
  143778             :     friend struct Rose::Traits::generated::describe_field_t<SgAttributeSpecificationStatement, SgExprListExp*,&SgAttributeSpecificationStatement::p_bind_list>;
  143779             :     friend struct Rose::Traits::generated::describe_field_t<SgAttributeSpecificationStatement, SgDimensionObjectPtrList,&SgAttributeSpecificationStatement::p_dimension_object_list>;
  143780             : 
  143781             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143782             : 
  143783             : 
  143784             :    };
  143785             : #endif
  143786             : 
  143787             : // postdeclarations for SgAttributeSpecificationStatement
  143788             : 
  143789             : /* #line 143790 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143790             : 
  143791             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  143792             : 
  143793             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143794             : 
  143795             : 
  143796             : /* #line 143797 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143797             : 
  143798             : 
  143799             : 
  143800             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143801             : 
  143802             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  143803             : //      This code is automatically generated for each 
  143804             : //      terminal and non-terminal within the defined 
  143805             : //      grammar.  There is a simple way to change the 
  143806             : //      code to fix bugs etc.  See the ROSE README file
  143807             : //      for directions.
  143808             : 
  143809             : // tps: (02/22/2010): Adding DLL export requirements
  143810             : #include "rosedll.h"
  143811             : 
  143812             : // predeclarations for SgFormatStatement
  143813             : 
  143814             : /* #line 143815 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143815             : 
  143816             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  143817             : 
  143818             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  143819             : 
  143820             : #if 1
  143821             : // Class Definition for SgFormatStatement
  143822             : class ROSE_DLL_API SgFormatStatement  : public SgDeclarationStatement
  143823             :    {
  143824             :      public:
  143825             : 
  143826             : 
  143827             : /* #line 143828 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  143828             : 
  143829             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  143830             : // Start of memberFunctionString
  143831             : /* #line 3832 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  143832             : 
  143833             : 
  143834             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  143835             :           virtual unsigned int cfgIndexForEnd() const override;
  143836             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  143837             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  143838             : #endif
  143839             :           virtual SgName get_mangled_name() const override;
  143840             : 
  143841             :        // const SgFormatItemPtrList & get_format_item_list() const;
  143842             :        // SgFormatItemPtrList & get_format_item_list();
  143843             :        // void set_format_item_list(const SgFormatItemPtrList & format_item_list);
  143844             : 
  143845             : 
  143846             : 
  143847             : // End of memberFunctionString
  143848             : // Start of memberFunctionString
  143849             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  143850             : 
  143851             : // *** COMMON CODE SECTION BEGINS HERE ***
  143852             : 
  143853             :     public:
  143854             : 
  143855             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  143856             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  143857             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  143858             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  143859             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  143860             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  143861             : 
  143862             :       /*! \brief returns a string representing the class name */
  143863             :           virtual std::string class_name() const override;
  143864             : 
  143865             :       /*! \brief returns new style SageIII enum values */
  143866             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  143867             : 
  143868             :       /*! \brief static variant value */
  143869             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  143870             :        // static const VariantT static_variant = V_SgFormatStatement;
  143871             :           enum { static_variant = V_SgFormatStatement };
  143872             : 
  143873             :        /* the generated cast function */
  143874             :       /*! \brief Casts pointer from base class to derived class */
  143875             :           ROSE_DLL_API friend       SgFormatStatement* isSgFormatStatement(       SgNode * s );
  143876             : 
  143877             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  143878             :           ROSE_DLL_API friend const SgFormatStatement* isSgFormatStatement( const SgNode * s );
  143879             : 
  143880             :      // ******************************************
  143881             :      // * Memory Pool / New / Delete
  143882             :      // ******************************************
  143883             : 
  143884             :      public:
  143885             :           /// \private
  143886             :           static const unsigned pool_size; //
  143887             :           /// \private
  143888             :           static std::vector<unsigned char *> pools; //
  143889             :           /// \private
  143890             :           static SgFormatStatement * next_node; // 
  143891             : 
  143892             :           /// \private
  143893             :           static unsigned long initializeStorageClassArray(SgFormatStatementStorageClass *); //
  143894             : 
  143895             :           /// \private
  143896             :           static void clearMemoryPool(); //
  143897             :           static void deleteMemoryPool(); //
  143898             : 
  143899             :           /// \private
  143900             :           static void extendMemoryPoolForFileIO(); //
  143901             : 
  143902             :           /// \private
  143903             :           static SgFormatStatement * getPointerFromGlobalIndex(unsigned long); //
  143904             :           /// \private
  143905             :           static SgFormatStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  143906             : 
  143907             :           /// \private
  143908             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  143909             :           /// \private
  143910             :           static void resetValidFreepointers(); //
  143911             :           /// \private
  143912             :           static unsigned long getNumberOfLastValidPointer(); //
  143913             : 
  143914             : 
  143915             : #if defined(INLINE_FUNCTIONS)
  143916             :       /*! \brief returns pointer to newly allocated IR node */
  143917             :           inline void *operator new (size_t size);
  143918             : #else
  143919             :       /*! \brief returns pointer to newly allocated IR node */
  143920             :           void *operator new (size_t size);
  143921             : #endif
  143922             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  143923             :           void operator delete (void* pointer, size_t size);
  143924             : 
  143925             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  143926           0 :           void operator delete (void* pointer)
  143927             :              {
  143928             :             // This is the generated delete operator...
  143929           0 :                SgFormatStatement::operator delete (pointer,sizeof(SgFormatStatement));
  143930             :              }
  143931             : 
  143932             :       /*! \brief Returns the total number of IR nodes of this type */
  143933             :           static size_t numberOfNodes();
  143934             : 
  143935             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  143936             :           static size_t memoryUsage();
  143937             : 
  143938             :       // End of scope which started in IR nodes specific code 
  143939             :       /* */
  143940             : 
  143941             :       /* name Internal Functions
  143942             :           \brief Internal functions ... incomplete-documentation
  143943             : 
  143944             :           These functions have been made public as part of the design, but they are suggested for internal use 
  143945             :           or by particularly knowledgeable users for specialized tools or applications.
  143946             : 
  143947             :           \internal We could not make these private because they are required by user for special purposes. And 
  143948             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  143949             :          
  143950             :        */
  143951             : 
  143952             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  143953             :        // overridden in every class by *generated* implementation
  143954             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  143955             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  143956             :        // MS: 06/28/02 container of names of variables or container indices 
  143957             :        // used used in the traversal to access AST successor nodes
  143958             :        // overridden in every class by *generated* implementation
  143959             :       /*! \brief container of names of variables or container indices used used in the traversal
  143960             :           to access AST successor nodes overridden in every class by *generated* implementation */
  143961             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  143962             : 
  143963             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  143964             :        // than all the vector copies. The implementation for these functions is generated for each class.
  143965             :       /*! \brief return number of children in the traversal successor list */
  143966             :           virtual size_t get_numberOfTraversalSuccessors() override;
  143967             :       /*! \brief index-based access to traversal successors by index number */
  143968             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  143969             :       /*! \brief index-based access to traversal successors by child node */
  143970             :           virtual size_t get_childIndex(SgNode *child) override;
  143971             : 
  143972             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  143973             :        // MS: 08/16/2002 method for generating RTI information
  143974             :       /*! \brief return C++ Runtime-Time-Information */
  143975             :           virtual RTIReturnType roseRTI() override;
  143976             : #endif
  143977             :       /* */
  143978             : 
  143979             : 
  143980             : 
  143981             :       /* name Deprecated Functions
  143982             :           \brief Deprecated functions ... incomplete-documentation
  143983             : 
  143984             :           These functions have been deprecated from use.
  143985             :        */
  143986             :       /* */
  143987             : 
  143988             :       /*! returns a C style string (char*) representing the class name */
  143989             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  143990             : 
  143991             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  143992             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  143993             : #if 0
  143994             :       /*! returns old style Sage II enum values */
  143995             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  143996             :       /*! returns old style Sage II enum values */
  143997             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  143998             : #endif
  143999             :       /* */
  144000             : 
  144001             : 
  144002             : 
  144003             : 
  144004             :      public:
  144005             :       /* name Traversal Support Functions
  144006             :           \brief Traversal support functions ... incomplete-documentation
  144007             : 
  144008             :           These functions have been made public as part of the design, but they are suggested for internal use 
  144009             :           or by particularly knowledgable users for specialized tools or applications.
  144010             :        */
  144011             :       /* */
  144012             : 
  144013             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  144014             :        // (inferior to ROSE traversal mechanism, experimental).
  144015             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  144016             :        */
  144017             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  144018             : 
  144019             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  144020             :       /*! \brief support for the classic visitor pattern done in GoF */
  144021             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  144022             : 
  144023             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  144024             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  144025             :        */
  144026             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  144027             : 
  144028             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  144029             :        */
  144030             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  144031             : 
  144032             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  144033             :        // This traversal helps support internal tools that call static member functions.
  144034             :        // note: this function operates on the memory pools.
  144035             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  144036             :        */
  144037             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  144038             :       /* */
  144039             : 
  144040             : 
  144041             :      public:
  144042             :       /* name Memory Allocation Functions
  144043             :           \brief Memory allocations functions ... incomplete-documentation
  144044             : 
  144045             :           These functions have been made public as part of the design, but they are suggested for internal use 
  144046             :           or by particularly knowledgable users for specialized tools or applications.
  144047             :        */
  144048             :       /* */
  144049             : 
  144050             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  144051             : 
  144052             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  144053             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  144054             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  144055             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  144056             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  144057             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  144058             :           being used with the AST File I/O mechanism.
  144059             :        */
  144060             :           virtual bool isInMemoryPool() override;
  144061             : 
  144062             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  144063             : 
  144064             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  144065             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  144066             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  144067             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  144068             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  144069             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  144070             :           being used with the AST File I/O mechanism.
  144071             :        */
  144072             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  144073             : 
  144074             :       // DQ (4/30/2006): Modified to be a const function.
  144075             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  144076             : 
  144077             :           This functions is part of general support for many possible tools to operate 
  144078             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  144079             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  144080             :           less than the set of pointers used by the AST file I/O. This is part of
  144081             :           work implemented by Andreas, and support tools such as the AST graph generation.
  144082             : 
  144083             :           \warning This function can return unexpected data members and thus the 
  144084             :                    order and the number of elements is unpredicable and subject 
  144085             :                    to change.
  144086             : 
  144087             :           \returns STL vector of pairs of SgNode* and strings
  144088             :        */
  144089             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  144090             : 
  144091             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  144092             : 
  144093             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  144094             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  144095             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  144096             : 
  144097             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  144098             :                    and subject to change.
  144099             :        */
  144100             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  144101             : 
  144102             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  144103             : 
  144104             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  144105             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  144106             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  144107             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  144108             : 
  144109             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  144110             : 
  144111             :           \returns long
  144112             :        */
  144113             :           virtual long getChildIndex( SgNode* childNode ) const override;
  144114             : 
  144115             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  144116             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  144117             :       /* \brief Constructor for use by AST File I/O Mechanism
  144118             : 
  144119             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  144120             :           which obtained via fast binary file I/O from disk.
  144121             :        */
  144122             :        // SgFormatStatement( SgFormatStatementStorageClass& source );
  144123             : 
  144124             : 
  144125             : 
  144126             : 
  144127             : 
  144128             :  // JH (10/24/2005): methods added to support the ast file IO
  144129             :     private:
  144130             : 
  144131             :       /* name AST Memory Allocation Support Functions
  144132             :           \brief Memory allocations support....
  144133             : 
  144134             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  144135             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  144136             :           and support the AST File I/O Mechanism.
  144137             :        */
  144138             :       /* */
  144139             : 
  144140             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  144141             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  144142             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  144143             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  144144             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  144145             :           a correspinding one in the AST_FILE_IO class!
  144146             :        */
  144147             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  144148             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  144149             :       /* \brief Typedef used for low level memory access.
  144150             :        */
  144151             :        // typedef unsigned char* TestType;
  144152             : 
  144153             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  144154             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  144155             :       /* \brief Typedef used to hold memory addresses as values.
  144156             :        */
  144157             :        // typedef unsigned long  AddressType;
  144158             : 
  144159             : 
  144160             : 
  144161             :        // necessary, to have direct access to the p_freepointer and the private methods !
  144162             :       /*! \brief friend class declaration to support AST File I/O */
  144163             :           friend class AST_FILE_IO;
  144164             : 
  144165             :       /*! \brief friend class declaration to support AST File I/O */
  144166             :           friend class SgFormatStatementStorageClass;
  144167             : 
  144168             :       /*! \brief friend class declaration to support AST File I/O */
  144169             :           friend class AstSpecificDataManagingClass;
  144170             : 
  144171             :       /*! \brief friend class declaration to support AST File I/O */
  144172             :           friend class AstSpecificDataManagingClassStorageClass;
  144173             :     public:
  144174             :       /*! \brief IR node constructor to support AST File I/O */
  144175             :           SgFormatStatement( const SgFormatStatementStorageClass& source );
  144176             : 
  144177             :  // private: // JJW hack
  144178             :        /*
  144179             :           name AST Memory Allocation Support Variables
  144180             :           Memory allocations support variables 
  144181             : 
  144182             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  144183             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  144184             :           and support the AST File I/O Mechanism.
  144185             :        */
  144186             :       /* */
  144187             : 
  144188             :     public:
  144189             : 
  144190             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  144191             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  144192             :       // virtual SgNode* addRegExpAttribute();
  144193             :       /*! \brief Support for AST matching using regular expression.
  144194             : 
  144195             :           This support is incomplete and the subject of current research to define 
  144196             :           RegEx trees to support inexact matching.
  144197             :        */
  144198             :           SgFormatStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  144199             : 
  144200             : // *** COMMON CODE SECTION ENDS HERE ***
  144201             : 
  144202             : 
  144203             : // End of memberFunctionString
  144204             : // Start of memberFunctionString
  144205             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  144206             : 
  144207             :      // the generated cast function
  144208             :      // friend ROSE_DLL_API SgFormatStatement* isSgFormatStatement ( SgNode* s );
  144209             : 
  144210             :           typedef SgDeclarationStatement base_node_type;
  144211             : 
  144212             : 
  144213             : // End of memberFunctionString
  144214             : // Start of memberFunctionString
  144215             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  144216             : 
  144217             :           void post_construction_initialization() override;
  144218             : 
  144219             : 
  144220             : // End of memberFunctionString
  144221             : 
  144222             :      public: 
  144223             :          SgFormatItemList* get_format_item_list() const;
  144224             :          void set_format_item_list(SgFormatItemList* format_item_list);
  144225             : 
  144226             : 
  144227             :      public: 
  144228             :          virtual ~SgFormatStatement();
  144229             : 
  144230             : 
  144231             :      public: 
  144232             :          SgFormatStatement(Sg_File_Info* startOfConstruct , SgFormatItemList* format_item_list = NULL); 
  144233             :          SgFormatStatement(SgFormatItemList* format_item_list); 
  144234             : 
  144235             :     protected:
  144236             : // Start of memberFunctionString
  144237             : SgFormatItemList* p_format_item_list;
  144238             :           
  144239             : // End of memberFunctionString
  144240             : 
  144241             :     friend struct Rose::Traits::generated::describe_node_t<SgFormatStatement>;
  144242             :     friend struct Rose::Traits::generated::describe_field_t<SgFormatStatement, SgFormatItemList*,&SgFormatStatement::p_format_item_list>;
  144243             : 
  144244             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144245             : 
  144246             : 
  144247             :    };
  144248             : #endif
  144249             : 
  144250             : // postdeclarations for SgFormatStatement
  144251             : 
  144252             : /* #line 144253 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144253             : 
  144254             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  144255             : 
  144256             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144257             : 
  144258             : 
  144259             : /* #line 144260 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144260             : 
  144261             : 
  144262             : 
  144263             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144264             : 
  144265             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  144266             : //      This code is automatically generated for each 
  144267             : //      terminal and non-terminal within the defined 
  144268             : //      grammar.  There is a simple way to change the 
  144269             : //      code to fix bugs etc.  See the ROSE README file
  144270             : //      for directions.
  144271             : 
  144272             : // tps: (02/22/2010): Adding DLL export requirements
  144273             : #include "rosedll.h"
  144274             : 
  144275             : // predeclarations for SgTemplateDeclaration
  144276             : 
  144277             : /* #line 144278 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144278             : 
  144279             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  144280             : 
  144281             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144282             : 
  144283             : #if 1
  144284             : // Class Definition for SgTemplateDeclaration
  144285             : class ROSE_DLL_API SgTemplateDeclaration  : public SgDeclarationStatement
  144286             :    {
  144287             :      public:
  144288             : 
  144289             : 
  144290             : /* #line 144291 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144291             : 
  144292             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  144293             : // Start of memberFunctionString
  144294             : /* #line 2757 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  144295             : 
  144296             :        // void post_construction_initialization();
  144297             : 
  144298             :       /*! Type of template declaration */
  144299             :           enum template_type_enum
  144300             :              {
  144301             :                e_template_none       = 0, /*!< error value */
  144302             :                e_template_class      = 1, /*!< class template */
  144303             :                e_template_m_class    = 2, /*!< nested class template */
  144304             :                e_template_function   = 3, /*!< function template */
  144305             :                e_template_m_function = 4, /*!< member function template */
  144306             :                e_template_m_data     = 5  /*!< member data template (typically static member data) */
  144307             :              };
  144308             : 
  144309             :        // DQ (9/8/2004): added support for qualified names
  144310             :           virtual SgName get_qualified_name() const;
  144311             : 
  144312             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  144313             :           virtual SgName get_mangled_name(void) const override;
  144314             : 
  144315             :        // This is generated by ROSETTA, though we might want to implement
  144316             :        // it differently if we want to get the name from the declaration!
  144317             :        // SgName get_name() const;
  144318             : 
  144319             :       //! Support for where the scope is explicitly required
  144320             :           virtual bool hasExplicitScope() const override;
  144321             : 
  144322             :        // DQ (2/10/2007): Marked as virtual to be consistent
  144323             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  144324             : 
  144325             :        // DQ (12/12/2011): Explicit access function.
  144326             :           SgType* get_type();
  144327             : 
  144328             : #if ALT_FIXUP_COPY
  144329             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  144330             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  144331             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  144332             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  144333             : #else
  144334             :        // DQ (10/19/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  144335             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  144336             : #endif
  144337             : 
  144338             : 
  144339             : 
  144340             : // End of memberFunctionString
  144341             : // Start of memberFunctionString
  144342             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  144343             : 
  144344             : // *** COMMON CODE SECTION BEGINS HERE ***
  144345             : 
  144346             :     public:
  144347             : 
  144348             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  144349             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  144350             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  144351             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  144352             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  144353             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  144354             : 
  144355             :       /*! \brief returns a string representing the class name */
  144356             :           virtual std::string class_name() const override;
  144357             : 
  144358             :       /*! \brief returns new style SageIII enum values */
  144359             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  144360             : 
  144361             :       /*! \brief static variant value */
  144362             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  144363             :        // static const VariantT static_variant = V_SgTemplateDeclaration;
  144364             :           enum { static_variant = V_SgTemplateDeclaration };
  144365             : 
  144366             :        /* the generated cast function */
  144367             :       /*! \brief Casts pointer from base class to derived class */
  144368             :           ROSE_DLL_API friend       SgTemplateDeclaration* isSgTemplateDeclaration(       SgNode * s );
  144369             : 
  144370             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  144371             :           ROSE_DLL_API friend const SgTemplateDeclaration* isSgTemplateDeclaration( const SgNode * s );
  144372             : 
  144373             :      // ******************************************
  144374             :      // * Memory Pool / New / Delete
  144375             :      // ******************************************
  144376             : 
  144377             :      public:
  144378             :           /// \private
  144379             :           static const unsigned pool_size; //
  144380             :           /// \private
  144381             :           static std::vector<unsigned char *> pools; //
  144382             :           /// \private
  144383             :           static SgTemplateDeclaration * next_node; // 
  144384             : 
  144385             :           /// \private
  144386             :           static unsigned long initializeStorageClassArray(SgTemplateDeclarationStorageClass *); //
  144387             : 
  144388             :           /// \private
  144389             :           static void clearMemoryPool(); //
  144390             :           static void deleteMemoryPool(); //
  144391             : 
  144392             :           /// \private
  144393             :           static void extendMemoryPoolForFileIO(); //
  144394             : 
  144395             :           /// \private
  144396             :           static SgTemplateDeclaration * getPointerFromGlobalIndex(unsigned long); //
  144397             :           /// \private
  144398             :           static SgTemplateDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  144399             : 
  144400             :           /// \private
  144401             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  144402             :           /// \private
  144403             :           static void resetValidFreepointers(); //
  144404             :           /// \private
  144405             :           static unsigned long getNumberOfLastValidPointer(); //
  144406             : 
  144407             : 
  144408             : #if defined(INLINE_FUNCTIONS)
  144409             :       /*! \brief returns pointer to newly allocated IR node */
  144410             :           inline void *operator new (size_t size);
  144411             : #else
  144412             :       /*! \brief returns pointer to newly allocated IR node */
  144413             :           void *operator new (size_t size);
  144414             : #endif
  144415             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  144416             :           void operator delete (void* pointer, size_t size);
  144417             : 
  144418             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  144419           0 :           void operator delete (void* pointer)
  144420             :              {
  144421             :             // This is the generated delete operator...
  144422           0 :                SgTemplateDeclaration::operator delete (pointer,sizeof(SgTemplateDeclaration));
  144423             :              }
  144424             : 
  144425             :       /*! \brief Returns the total number of IR nodes of this type */
  144426             :           static size_t numberOfNodes();
  144427             : 
  144428             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  144429             :           static size_t memoryUsage();
  144430             : 
  144431             :       // End of scope which started in IR nodes specific code 
  144432             :       /* */
  144433             : 
  144434             :       /* name Internal Functions
  144435             :           \brief Internal functions ... incomplete-documentation
  144436             : 
  144437             :           These functions have been made public as part of the design, but they are suggested for internal use 
  144438             :           or by particularly knowledgeable users for specialized tools or applications.
  144439             : 
  144440             :           \internal We could not make these private because they are required by user for special purposes. And 
  144441             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  144442             :          
  144443             :        */
  144444             : 
  144445             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  144446             :        // overridden in every class by *generated* implementation
  144447             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  144448             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  144449             :        // MS: 06/28/02 container of names of variables or container indices 
  144450             :        // used used in the traversal to access AST successor nodes
  144451             :        // overridden in every class by *generated* implementation
  144452             :       /*! \brief container of names of variables or container indices used used in the traversal
  144453             :           to access AST successor nodes overridden in every class by *generated* implementation */
  144454             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  144455             : 
  144456             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  144457             :        // than all the vector copies. The implementation for these functions is generated for each class.
  144458             :       /*! \brief return number of children in the traversal successor list */
  144459             :           virtual size_t get_numberOfTraversalSuccessors() override;
  144460             :       /*! \brief index-based access to traversal successors by index number */
  144461             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  144462             :       /*! \brief index-based access to traversal successors by child node */
  144463             :           virtual size_t get_childIndex(SgNode *child) override;
  144464             : 
  144465             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  144466             :        // MS: 08/16/2002 method for generating RTI information
  144467             :       /*! \brief return C++ Runtime-Time-Information */
  144468             :           virtual RTIReturnType roseRTI() override;
  144469             : #endif
  144470             :       /* */
  144471             : 
  144472             : 
  144473             : 
  144474             :       /* name Deprecated Functions
  144475             :           \brief Deprecated functions ... incomplete-documentation
  144476             : 
  144477             :           These functions have been deprecated from use.
  144478             :        */
  144479             :       /* */
  144480             : 
  144481             :       /*! returns a C style string (char*) representing the class name */
  144482             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  144483             : 
  144484             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  144485             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  144486             : #if 0
  144487             :       /*! returns old style Sage II enum values */
  144488             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  144489             :       /*! returns old style Sage II enum values */
  144490             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  144491             : #endif
  144492             :       /* */
  144493             : 
  144494             : 
  144495             : 
  144496             : 
  144497             :      public:
  144498             :       /* name Traversal Support Functions
  144499             :           \brief Traversal support functions ... incomplete-documentation
  144500             : 
  144501             :           These functions have been made public as part of the design, but they are suggested for internal use 
  144502             :           or by particularly knowledgable users for specialized tools or applications.
  144503             :        */
  144504             :       /* */
  144505             : 
  144506             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  144507             :        // (inferior to ROSE traversal mechanism, experimental).
  144508             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  144509             :        */
  144510             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  144511             : 
  144512             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  144513             :       /*! \brief support for the classic visitor pattern done in GoF */
  144514             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  144515             : 
  144516             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  144517             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  144518             :        */
  144519             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  144520             : 
  144521             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  144522             :        */
  144523             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  144524             : 
  144525             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  144526             :        // This traversal helps support internal tools that call static member functions.
  144527             :        // note: this function operates on the memory pools.
  144528             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  144529             :        */
  144530             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  144531             :       /* */
  144532             : 
  144533             : 
  144534             :      public:
  144535             :       /* name Memory Allocation Functions
  144536             :           \brief Memory allocations functions ... incomplete-documentation
  144537             : 
  144538             :           These functions have been made public as part of the design, but they are suggested for internal use 
  144539             :           or by particularly knowledgable users for specialized tools or applications.
  144540             :        */
  144541             :       /* */
  144542             : 
  144543             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  144544             : 
  144545             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  144546             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  144547             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  144548             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  144549             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  144550             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  144551             :           being used with the AST File I/O mechanism.
  144552             :        */
  144553             :           virtual bool isInMemoryPool() override;
  144554             : 
  144555             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  144556             : 
  144557             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  144558             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  144559             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  144560             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  144561             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  144562             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  144563             :           being used with the AST File I/O mechanism.
  144564             :        */
  144565             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  144566             : 
  144567             :       // DQ (4/30/2006): Modified to be a const function.
  144568             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  144569             : 
  144570             :           This functions is part of general support for many possible tools to operate 
  144571             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  144572             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  144573             :           less than the set of pointers used by the AST file I/O. This is part of
  144574             :           work implemented by Andreas, and support tools such as the AST graph generation.
  144575             : 
  144576             :           \warning This function can return unexpected data members and thus the 
  144577             :                    order and the number of elements is unpredicable and subject 
  144578             :                    to change.
  144579             : 
  144580             :           \returns STL vector of pairs of SgNode* and strings
  144581             :        */
  144582             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  144583             : 
  144584             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  144585             : 
  144586             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  144587             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  144588             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  144589             : 
  144590             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  144591             :                    and subject to change.
  144592             :        */
  144593             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  144594             : 
  144595             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  144596             : 
  144597             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  144598             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  144599             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  144600             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  144601             : 
  144602             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  144603             : 
  144604             :           \returns long
  144605             :        */
  144606             :           virtual long getChildIndex( SgNode* childNode ) const override;
  144607             : 
  144608             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  144609             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  144610             :       /* \brief Constructor for use by AST File I/O Mechanism
  144611             : 
  144612             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  144613             :           which obtained via fast binary file I/O from disk.
  144614             :        */
  144615             :        // SgTemplateDeclaration( SgTemplateDeclarationStorageClass& source );
  144616             : 
  144617             : 
  144618             : 
  144619             : 
  144620             : 
  144621             :  // JH (10/24/2005): methods added to support the ast file IO
  144622             :     private:
  144623             : 
  144624             :       /* name AST Memory Allocation Support Functions
  144625             :           \brief Memory allocations support....
  144626             : 
  144627             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  144628             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  144629             :           and support the AST File I/O Mechanism.
  144630             :        */
  144631             :       /* */
  144632             : 
  144633             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  144634             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  144635             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  144636             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  144637             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  144638             :           a correspinding one in the AST_FILE_IO class!
  144639             :        */
  144640             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  144641             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  144642             :       /* \brief Typedef used for low level memory access.
  144643             :        */
  144644             :        // typedef unsigned char* TestType;
  144645             : 
  144646             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  144647             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  144648             :       /* \brief Typedef used to hold memory addresses as values.
  144649             :        */
  144650             :        // typedef unsigned long  AddressType;
  144651             : 
  144652             : 
  144653             : 
  144654             :        // necessary, to have direct access to the p_freepointer and the private methods !
  144655             :       /*! \brief friend class declaration to support AST File I/O */
  144656             :           friend class AST_FILE_IO;
  144657             : 
  144658             :       /*! \brief friend class declaration to support AST File I/O */
  144659             :           friend class SgTemplateDeclarationStorageClass;
  144660             : 
  144661             :       /*! \brief friend class declaration to support AST File I/O */
  144662             :           friend class AstSpecificDataManagingClass;
  144663             : 
  144664             :       /*! \brief friend class declaration to support AST File I/O */
  144665             :           friend class AstSpecificDataManagingClassStorageClass;
  144666             :     public:
  144667             :       /*! \brief IR node constructor to support AST File I/O */
  144668             :           SgTemplateDeclaration( const SgTemplateDeclarationStorageClass& source );
  144669             : 
  144670             :  // private: // JJW hack
  144671             :        /*
  144672             :           name AST Memory Allocation Support Variables
  144673             :           Memory allocations support variables 
  144674             : 
  144675             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  144676             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  144677             :           and support the AST File I/O Mechanism.
  144678             :        */
  144679             :       /* */
  144680             : 
  144681             :     public:
  144682             : 
  144683             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  144684             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  144685             :       // virtual SgNode* addRegExpAttribute();
  144686             :       /*! \brief Support for AST matching using regular expression.
  144687             : 
  144688             :           This support is incomplete and the subject of current research to define 
  144689             :           RegEx trees to support inexact matching.
  144690             :        */
  144691             :           SgTemplateDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  144692             : 
  144693             : // *** COMMON CODE SECTION ENDS HERE ***
  144694             : 
  144695             : 
  144696             : // End of memberFunctionString
  144697             : // Start of memberFunctionString
  144698             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  144699             : 
  144700             :      // the generated cast function
  144701             :      // friend ROSE_DLL_API SgTemplateDeclaration* isSgTemplateDeclaration ( SgNode* s );
  144702             : 
  144703             :           typedef SgDeclarationStatement base_node_type;
  144704             : 
  144705             : 
  144706             : // End of memberFunctionString
  144707             : // Start of memberFunctionString
  144708             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  144709             : 
  144710             :           void post_construction_initialization() override;
  144711             : 
  144712             : 
  144713             : // End of memberFunctionString
  144714             : 
  144715             :      public: 
  144716             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  144717             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  144718             : 
  144719             :      public: 
  144720             :          SgName get_string() const;
  144721             :          void set_string(SgName string);
  144722             : 
  144723             :      public: 
  144724             :          SgTemplateDeclaration::template_type_enum get_template_kind() const;
  144725             :          void set_template_kind(SgTemplateDeclaration::template_type_enum template_kind);
  144726             : 
  144727             :      public: 
  144728             :          const SgTemplateParameterPtrList&  get_templateParameters() const;
  144729             :          SgTemplateParameterPtrList& get_templateParameters(); 
  144730             : 
  144731             :      public: 
  144732             :          SgScopeStatement* get_scope() const override /* (getDataAccessFunctionPrototypeString) */;
  144733             :          void set_scope(SgScopeStatement* scope) override /* (getDataAccessFunctionPrototypeString) */;
  144734             : 
  144735             :      public: 
  144736             :          SgDeclarationScope* get_nonreal_decl_scope() const;
  144737             :          void set_nonreal_decl_scope(SgDeclarationScope* nonreal_decl_scope);
  144738             : 
  144739             : 
  144740             :      public: 
  144741             :          virtual ~SgTemplateDeclaration();
  144742             : 
  144743             : 
  144744             :      public: 
  144745             :          SgTemplateDeclaration(Sg_File_Info* startOfConstruct , SgName name = ""); 
  144746             :          SgTemplateDeclaration(SgName name); 
  144747             : 
  144748             :     protected:
  144749             : // Start of memberFunctionString
  144750             : SgName p_name;
  144751             :           
  144752             : // End of memberFunctionString
  144753             : // Start of memberFunctionString
  144754             : SgName p_string;
  144755             :           
  144756             : // End of memberFunctionString
  144757             : // Start of memberFunctionString
  144758             : SgTemplateDeclaration::template_type_enum p_template_kind;
  144759             :           
  144760             : // End of memberFunctionString
  144761             : // Start of memberFunctionString
  144762             : SgTemplateParameterPtrList p_templateParameters;
  144763             :           
  144764             : // End of memberFunctionString
  144765             : // Start of memberFunctionString
  144766             : SgScopeStatement* p_scope;
  144767             :           
  144768             : // End of memberFunctionString
  144769             : // Start of memberFunctionString
  144770             : SgDeclarationScope* p_nonreal_decl_scope;
  144771             :           
  144772             : // End of memberFunctionString
  144773             : 
  144774             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateDeclaration>;
  144775             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateDeclaration, SgName,&SgTemplateDeclaration::p_name>;
  144776             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateDeclaration, SgName,&SgTemplateDeclaration::p_string>;
  144777             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateDeclaration, SgTemplateDeclaration::template_type_enum,&SgTemplateDeclaration::p_template_kind>;
  144778             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateDeclaration, SgTemplateParameterPtrList,&SgTemplateDeclaration::p_templateParameters>;
  144779             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateDeclaration, SgScopeStatement*,&SgTemplateDeclaration::p_scope>;
  144780             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateDeclaration, SgDeclarationScope*,&SgTemplateDeclaration::p_nonreal_decl_scope>;
  144781             : 
  144782             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144783             : 
  144784             : 
  144785             :    };
  144786             : #endif
  144787             : 
  144788             : // postdeclarations for SgTemplateDeclaration
  144789             : 
  144790             : /* #line 144791 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144791             : 
  144792             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  144793             : 
  144794             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144795             : 
  144796             : 
  144797             : /* #line 144798 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144798             : 
  144799             : 
  144800             : 
  144801             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144802             : 
  144803             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  144804             : //      This code is automatically generated for each 
  144805             : //      terminal and non-terminal within the defined 
  144806             : //      grammar.  There is a simple way to change the 
  144807             : //      code to fix bugs etc.  See the ROSE README file
  144808             : //      for directions.
  144809             : 
  144810             : // tps: (02/22/2010): Adding DLL export requirements
  144811             : #include "rosedll.h"
  144812             : 
  144813             : // predeclarations for SgTemplateInstantiationDirectiveStatement
  144814             : 
  144815             : /* #line 144816 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144816             : 
  144817             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  144818             : 
  144819             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  144820             : 
  144821             : #if 1
  144822             : // Class Definition for SgTemplateInstantiationDirectiveStatement
  144823             : class ROSE_DLL_API SgTemplateInstantiationDirectiveStatement  : public SgDeclarationStatement
  144824             :    {
  144825             :      public:
  144826             : 
  144827             : 
  144828             : /* #line 144829 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  144829             : 
  144830             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  144831             : // Start of memberFunctionString
  144832             : /* #line 3211 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  144833             : 
  144834             : 
  144835             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  144836             :           virtual SgName get_mangled_name(void) const override;
  144837             : 
  144838             : #if ALT_FIXUP_COPY
  144839             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  144840             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  144841             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  144842             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  144843             : #else
  144844             :        // DQ (10/15/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  144845             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  144846             : #endif
  144847             : 
  144848             : 
  144849             : 
  144850             : // End of memberFunctionString
  144851             : // Start of memberFunctionString
  144852             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  144853             : 
  144854             : // *** COMMON CODE SECTION BEGINS HERE ***
  144855             : 
  144856             :     public:
  144857             : 
  144858             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  144859             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  144860             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  144861             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  144862             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  144863             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  144864             : 
  144865             :       /*! \brief returns a string representing the class name */
  144866             :           virtual std::string class_name() const override;
  144867             : 
  144868             :       /*! \brief returns new style SageIII enum values */
  144869             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  144870             : 
  144871             :       /*! \brief static variant value */
  144872             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  144873             :        // static const VariantT static_variant = V_SgTemplateInstantiationDirectiveStatement;
  144874             :           enum { static_variant = V_SgTemplateInstantiationDirectiveStatement };
  144875             : 
  144876             :        /* the generated cast function */
  144877             :       /*! \brief Casts pointer from base class to derived class */
  144878             :           ROSE_DLL_API friend       SgTemplateInstantiationDirectiveStatement* isSgTemplateInstantiationDirectiveStatement(       SgNode * s );
  144879             : 
  144880             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  144881             :           ROSE_DLL_API friend const SgTemplateInstantiationDirectiveStatement* isSgTemplateInstantiationDirectiveStatement( const SgNode * s );
  144882             : 
  144883             :      // ******************************************
  144884             :      // * Memory Pool / New / Delete
  144885             :      // ******************************************
  144886             : 
  144887             :      public:
  144888             :           /// \private
  144889             :           static const unsigned pool_size; //
  144890             :           /// \private
  144891             :           static std::vector<unsigned char *> pools; //
  144892             :           /// \private
  144893             :           static SgTemplateInstantiationDirectiveStatement * next_node; // 
  144894             : 
  144895             :           /// \private
  144896             :           static unsigned long initializeStorageClassArray(SgTemplateInstantiationDirectiveStatementStorageClass *); //
  144897             : 
  144898             :           /// \private
  144899             :           static void clearMemoryPool(); //
  144900             :           static void deleteMemoryPool(); //
  144901             : 
  144902             :           /// \private
  144903             :           static void extendMemoryPoolForFileIO(); //
  144904             : 
  144905             :           /// \private
  144906             :           static SgTemplateInstantiationDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  144907             :           /// \private
  144908             :           static SgTemplateInstantiationDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  144909             : 
  144910             :           /// \private
  144911             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  144912             :           /// \private
  144913             :           static void resetValidFreepointers(); //
  144914             :           /// \private
  144915             :           static unsigned long getNumberOfLastValidPointer(); //
  144916             : 
  144917             : 
  144918             : #if defined(INLINE_FUNCTIONS)
  144919             :       /*! \brief returns pointer to newly allocated IR node */
  144920             :           inline void *operator new (size_t size);
  144921             : #else
  144922             :       /*! \brief returns pointer to newly allocated IR node */
  144923             :           void *operator new (size_t size);
  144924             : #endif
  144925             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  144926             :           void operator delete (void* pointer, size_t size);
  144927             : 
  144928             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  144929         248 :           void operator delete (void* pointer)
  144930             :              {
  144931             :             // This is the generated delete operator...
  144932         248 :                SgTemplateInstantiationDirectiveStatement::operator delete (pointer,sizeof(SgTemplateInstantiationDirectiveStatement));
  144933             :              }
  144934             : 
  144935             :       /*! \brief Returns the total number of IR nodes of this type */
  144936             :           static size_t numberOfNodes();
  144937             : 
  144938             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  144939             :           static size_t memoryUsage();
  144940             : 
  144941             :       // End of scope which started in IR nodes specific code 
  144942             :       /* */
  144943             : 
  144944             :       /* name Internal Functions
  144945             :           \brief Internal functions ... incomplete-documentation
  144946             : 
  144947             :           These functions have been made public as part of the design, but they are suggested for internal use 
  144948             :           or by particularly knowledgeable users for specialized tools or applications.
  144949             : 
  144950             :           \internal We could not make these private because they are required by user for special purposes. And 
  144951             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  144952             :          
  144953             :        */
  144954             : 
  144955             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  144956             :        // overridden in every class by *generated* implementation
  144957             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  144958             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  144959             :        // MS: 06/28/02 container of names of variables or container indices 
  144960             :        // used used in the traversal to access AST successor nodes
  144961             :        // overridden in every class by *generated* implementation
  144962             :       /*! \brief container of names of variables or container indices used used in the traversal
  144963             :           to access AST successor nodes overridden in every class by *generated* implementation */
  144964             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  144965             : 
  144966             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  144967             :        // than all the vector copies. The implementation for these functions is generated for each class.
  144968             :       /*! \brief return number of children in the traversal successor list */
  144969             :           virtual size_t get_numberOfTraversalSuccessors() override;
  144970             :       /*! \brief index-based access to traversal successors by index number */
  144971             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  144972             :       /*! \brief index-based access to traversal successors by child node */
  144973             :           virtual size_t get_childIndex(SgNode *child) override;
  144974             : 
  144975             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  144976             :        // MS: 08/16/2002 method for generating RTI information
  144977             :       /*! \brief return C++ Runtime-Time-Information */
  144978             :           virtual RTIReturnType roseRTI() override;
  144979             : #endif
  144980             :       /* */
  144981             : 
  144982             : 
  144983             : 
  144984             :       /* name Deprecated Functions
  144985             :           \brief Deprecated functions ... incomplete-documentation
  144986             : 
  144987             :           These functions have been deprecated from use.
  144988             :        */
  144989             :       /* */
  144990             : 
  144991             :       /*! returns a C style string (char*) representing the class name */
  144992             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  144993             : 
  144994             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  144995             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  144996             : #if 0
  144997             :       /*! returns old style Sage II enum values */
  144998             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  144999             :       /*! returns old style Sage II enum values */
  145000             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  145001             : #endif
  145002             :       /* */
  145003             : 
  145004             : 
  145005             : 
  145006             : 
  145007             :      public:
  145008             :       /* name Traversal Support Functions
  145009             :           \brief Traversal support functions ... incomplete-documentation
  145010             : 
  145011             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145012             :           or by particularly knowledgable users for specialized tools or applications.
  145013             :        */
  145014             :       /* */
  145015             : 
  145016             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  145017             :        // (inferior to ROSE traversal mechanism, experimental).
  145018             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  145019             :        */
  145020             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  145021             : 
  145022             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  145023             :       /*! \brief support for the classic visitor pattern done in GoF */
  145024             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  145025             : 
  145026             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  145027             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  145028             :        */
  145029             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  145030             : 
  145031             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  145032             :        */
  145033             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  145034             : 
  145035             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  145036             :        // This traversal helps support internal tools that call static member functions.
  145037             :        // note: this function operates on the memory pools.
  145038             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  145039             :        */
  145040             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  145041             :       /* */
  145042             : 
  145043             : 
  145044             :      public:
  145045             :       /* name Memory Allocation Functions
  145046             :           \brief Memory allocations functions ... incomplete-documentation
  145047             : 
  145048             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145049             :           or by particularly knowledgable users for specialized tools or applications.
  145050             :        */
  145051             :       /* */
  145052             : 
  145053             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  145054             : 
  145055             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  145056             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  145057             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  145058             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  145059             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  145060             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  145061             :           being used with the AST File I/O mechanism.
  145062             :        */
  145063             :           virtual bool isInMemoryPool() override;
  145064             : 
  145065             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  145066             : 
  145067             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  145068             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  145069             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  145070             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  145071             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  145072             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  145073             :           being used with the AST File I/O mechanism.
  145074             :        */
  145075             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  145076             : 
  145077             :       // DQ (4/30/2006): Modified to be a const function.
  145078             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  145079             : 
  145080             :           This functions is part of general support for many possible tools to operate 
  145081             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  145082             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  145083             :           less than the set of pointers used by the AST file I/O. This is part of
  145084             :           work implemented by Andreas, and support tools such as the AST graph generation.
  145085             : 
  145086             :           \warning This function can return unexpected data members and thus the 
  145087             :                    order and the number of elements is unpredicable and subject 
  145088             :                    to change.
  145089             : 
  145090             :           \returns STL vector of pairs of SgNode* and strings
  145091             :        */
  145092             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  145093             : 
  145094             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  145095             : 
  145096             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  145097             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  145098             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  145099             : 
  145100             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  145101             :                    and subject to change.
  145102             :        */
  145103             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  145104             : 
  145105             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  145106             : 
  145107             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  145108             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  145109             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  145110             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  145111             : 
  145112             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  145113             : 
  145114             :           \returns long
  145115             :        */
  145116             :           virtual long getChildIndex( SgNode* childNode ) const override;
  145117             : 
  145118             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  145119             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  145120             :       /* \brief Constructor for use by AST File I/O Mechanism
  145121             : 
  145122             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  145123             :           which obtained via fast binary file I/O from disk.
  145124             :        */
  145125             :        // SgTemplateInstantiationDirectiveStatement( SgTemplateInstantiationDirectiveStatementStorageClass& source );
  145126             : 
  145127             : 
  145128             : 
  145129             : 
  145130             : 
  145131             :  // JH (10/24/2005): methods added to support the ast file IO
  145132             :     private:
  145133             : 
  145134             :       /* name AST Memory Allocation Support Functions
  145135             :           \brief Memory allocations support....
  145136             : 
  145137             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  145138             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  145139             :           and support the AST File I/O Mechanism.
  145140             :        */
  145141             :       /* */
  145142             : 
  145143             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  145144             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  145145             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  145146             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  145147             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  145148             :           a correspinding one in the AST_FILE_IO class!
  145149             :        */
  145150             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  145151             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  145152             :       /* \brief Typedef used for low level memory access.
  145153             :        */
  145154             :        // typedef unsigned char* TestType;
  145155             : 
  145156             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  145157             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  145158             :       /* \brief Typedef used to hold memory addresses as values.
  145159             :        */
  145160             :        // typedef unsigned long  AddressType;
  145161             : 
  145162             : 
  145163             : 
  145164             :        // necessary, to have direct access to the p_freepointer and the private methods !
  145165             :       /*! \brief friend class declaration to support AST File I/O */
  145166             :           friend class AST_FILE_IO;
  145167             : 
  145168             :       /*! \brief friend class declaration to support AST File I/O */
  145169             :           friend class SgTemplateInstantiationDirectiveStatementStorageClass;
  145170             : 
  145171             :       /*! \brief friend class declaration to support AST File I/O */
  145172             :           friend class AstSpecificDataManagingClass;
  145173             : 
  145174             :       /*! \brief friend class declaration to support AST File I/O */
  145175             :           friend class AstSpecificDataManagingClassStorageClass;
  145176             :     public:
  145177             :       /*! \brief IR node constructor to support AST File I/O */
  145178             :           SgTemplateInstantiationDirectiveStatement( const SgTemplateInstantiationDirectiveStatementStorageClass& source );
  145179             : 
  145180             :  // private: // JJW hack
  145181             :        /*
  145182             :           name AST Memory Allocation Support Variables
  145183             :           Memory allocations support variables 
  145184             : 
  145185             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  145186             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  145187             :           and support the AST File I/O Mechanism.
  145188             :        */
  145189             :       /* */
  145190             : 
  145191             :     public:
  145192             : 
  145193             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  145194             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  145195             :       // virtual SgNode* addRegExpAttribute();
  145196             :       /*! \brief Support for AST matching using regular expression.
  145197             : 
  145198             :           This support is incomplete and the subject of current research to define 
  145199             :           RegEx trees to support inexact matching.
  145200             :        */
  145201             :           SgTemplateInstantiationDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  145202             : 
  145203             : // *** COMMON CODE SECTION ENDS HERE ***
  145204             : 
  145205             : 
  145206             : // End of memberFunctionString
  145207             : // Start of memberFunctionString
  145208             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  145209             : 
  145210             :      // the generated cast function
  145211             :      // friend ROSE_DLL_API SgTemplateInstantiationDirectiveStatement* isSgTemplateInstantiationDirectiveStatement ( SgNode* s );
  145212             : 
  145213             :           typedef SgDeclarationStatement base_node_type;
  145214             : 
  145215             : 
  145216             : // End of memberFunctionString
  145217             : // Start of memberFunctionString
  145218             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  145219             : 
  145220             :           void post_construction_initialization() override;
  145221             : 
  145222             : 
  145223             : // End of memberFunctionString
  145224             : 
  145225             :      public: 
  145226             :          SgDeclarationStatement* get_declaration() const;
  145227             :          void set_declaration(SgDeclarationStatement* declaration);
  145228             : 
  145229             :      public: 
  145230             :          bool get_do_not_instantiate() const;
  145231             :          void set_do_not_instantiate(bool do_not_instantiate);
  145232             : 
  145233             : 
  145234             :      public: 
  145235             :          virtual ~SgTemplateInstantiationDirectiveStatement();
  145236             : 
  145237             : 
  145238             :      public: 
  145239             :          SgTemplateInstantiationDirectiveStatement(Sg_File_Info* startOfConstruct , SgDeclarationStatement* declaration = NULL); 
  145240             :          SgTemplateInstantiationDirectiveStatement(SgDeclarationStatement* declaration); 
  145241             : 
  145242             :     protected:
  145243             : // Start of memberFunctionString
  145244             : SgDeclarationStatement* p_declaration;
  145245             :           
  145246             : // End of memberFunctionString
  145247             : // Start of memberFunctionString
  145248             : bool p_do_not_instantiate;
  145249             :           
  145250             : // End of memberFunctionString
  145251             : 
  145252             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateInstantiationDirectiveStatement>;
  145253             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationDirectiveStatement, SgDeclarationStatement*,&SgTemplateInstantiationDirectiveStatement::p_declaration>;
  145254             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationDirectiveStatement, bool,&SgTemplateInstantiationDirectiveStatement::p_do_not_instantiate>;
  145255             : 
  145256             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145257             : 
  145258             : 
  145259             :    };
  145260             : #endif
  145261             : 
  145262             : // postdeclarations for SgTemplateInstantiationDirectiveStatement
  145263             : 
  145264             : /* #line 145265 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145265             : 
  145266             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  145267             : 
  145268             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145269             : 
  145270             : 
  145271             : /* #line 145272 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145272             : 
  145273             : 
  145274             : 
  145275             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145276             : 
  145277             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  145278             : //      This code is automatically generated for each 
  145279             : //      terminal and non-terminal within the defined 
  145280             : //      grammar.  There is a simple way to change the 
  145281             : //      code to fix bugs etc.  See the ROSE README file
  145282             : //      for directions.
  145283             : 
  145284             : // tps: (02/22/2010): Adding DLL export requirements
  145285             : #include "rosedll.h"
  145286             : 
  145287             : // predeclarations for SgUseStatement
  145288             : 
  145289             : /* #line 145290 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145290             : 
  145291             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  145292             : 
  145293             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145294             : 
  145295             : #if 1
  145296             : // Class Definition for SgUseStatement
  145297             : class ROSE_DLL_API SgUseStatement  : public SgDeclarationStatement
  145298             :    {
  145299             :      public:
  145300             : 
  145301             : 
  145302             : /* #line 145303 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145303             : 
  145304             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  145305             : // Start of memberFunctionString
  145306             : /* #line 3393 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  145307             : 
  145308             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  145309             :           virtual unsigned int cfgIndexForEnd() const override;
  145310             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  145311             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  145312             : #endif
  145313             : 
  145314             :           virtual SgName get_mangled_name() const override;
  145315             : 
  145316             : 
  145317             : // End of memberFunctionString
  145318             : // Start of memberFunctionString
  145319             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  145320             : 
  145321             : // *** COMMON CODE SECTION BEGINS HERE ***
  145322             : 
  145323             :     public:
  145324             : 
  145325             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  145326             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  145327             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  145328             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  145329             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  145330             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  145331             : 
  145332             :       /*! \brief returns a string representing the class name */
  145333             :           virtual std::string class_name() const override;
  145334             : 
  145335             :       /*! \brief returns new style SageIII enum values */
  145336             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  145337             : 
  145338             :       /*! \brief static variant value */
  145339             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  145340             :        // static const VariantT static_variant = V_SgUseStatement;
  145341             :           enum { static_variant = V_SgUseStatement };
  145342             : 
  145343             :        /* the generated cast function */
  145344             :       /*! \brief Casts pointer from base class to derived class */
  145345             :           ROSE_DLL_API friend       SgUseStatement* isSgUseStatement(       SgNode * s );
  145346             : 
  145347             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  145348             :           ROSE_DLL_API friend const SgUseStatement* isSgUseStatement( const SgNode * s );
  145349             : 
  145350             :      // ******************************************
  145351             :      // * Memory Pool / New / Delete
  145352             :      // ******************************************
  145353             : 
  145354             :      public:
  145355             :           /// \private
  145356             :           static const unsigned pool_size; //
  145357             :           /// \private
  145358             :           static std::vector<unsigned char *> pools; //
  145359             :           /// \private
  145360             :           static SgUseStatement * next_node; // 
  145361             : 
  145362             :           /// \private
  145363             :           static unsigned long initializeStorageClassArray(SgUseStatementStorageClass *); //
  145364             : 
  145365             :           /// \private
  145366             :           static void clearMemoryPool(); //
  145367             :           static void deleteMemoryPool(); //
  145368             : 
  145369             :           /// \private
  145370             :           static void extendMemoryPoolForFileIO(); //
  145371             : 
  145372             :           /// \private
  145373             :           static SgUseStatement * getPointerFromGlobalIndex(unsigned long); //
  145374             :           /// \private
  145375             :           static SgUseStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  145376             : 
  145377             :           /// \private
  145378             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  145379             :           /// \private
  145380             :           static void resetValidFreepointers(); //
  145381             :           /// \private
  145382             :           static unsigned long getNumberOfLastValidPointer(); //
  145383             : 
  145384             : 
  145385             : #if defined(INLINE_FUNCTIONS)
  145386             :       /*! \brief returns pointer to newly allocated IR node */
  145387             :           inline void *operator new (size_t size);
  145388             : #else
  145389             :       /*! \brief returns pointer to newly allocated IR node */
  145390             :           void *operator new (size_t size);
  145391             : #endif
  145392             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  145393             :           void operator delete (void* pointer, size_t size);
  145394             : 
  145395             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  145396           0 :           void operator delete (void* pointer)
  145397             :              {
  145398             :             // This is the generated delete operator...
  145399           0 :                SgUseStatement::operator delete (pointer,sizeof(SgUseStatement));
  145400             :              }
  145401             : 
  145402             :       /*! \brief Returns the total number of IR nodes of this type */
  145403             :           static size_t numberOfNodes();
  145404             : 
  145405             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  145406             :           static size_t memoryUsage();
  145407             : 
  145408             :       // End of scope which started in IR nodes specific code 
  145409             :       /* */
  145410             : 
  145411             :       /* name Internal Functions
  145412             :           \brief Internal functions ... incomplete-documentation
  145413             : 
  145414             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145415             :           or by particularly knowledgeable users for specialized tools or applications.
  145416             : 
  145417             :           \internal We could not make these private because they are required by user for special purposes. And 
  145418             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  145419             :          
  145420             :        */
  145421             : 
  145422             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  145423             :        // overridden in every class by *generated* implementation
  145424             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  145425             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  145426             :        // MS: 06/28/02 container of names of variables or container indices 
  145427             :        // used used in the traversal to access AST successor nodes
  145428             :        // overridden in every class by *generated* implementation
  145429             :       /*! \brief container of names of variables or container indices used used in the traversal
  145430             :           to access AST successor nodes overridden in every class by *generated* implementation */
  145431             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  145432             : 
  145433             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  145434             :        // than all the vector copies. The implementation for these functions is generated for each class.
  145435             :       /*! \brief return number of children in the traversal successor list */
  145436             :           virtual size_t get_numberOfTraversalSuccessors() override;
  145437             :       /*! \brief index-based access to traversal successors by index number */
  145438             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  145439             :       /*! \brief index-based access to traversal successors by child node */
  145440             :           virtual size_t get_childIndex(SgNode *child) override;
  145441             : 
  145442             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  145443             :        // MS: 08/16/2002 method for generating RTI information
  145444             :       /*! \brief return C++ Runtime-Time-Information */
  145445             :           virtual RTIReturnType roseRTI() override;
  145446             : #endif
  145447             :       /* */
  145448             : 
  145449             : 
  145450             : 
  145451             :       /* name Deprecated Functions
  145452             :           \brief Deprecated functions ... incomplete-documentation
  145453             : 
  145454             :           These functions have been deprecated from use.
  145455             :        */
  145456             :       /* */
  145457             : 
  145458             :       /*! returns a C style string (char*) representing the class name */
  145459             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  145460             : 
  145461             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  145462             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  145463             : #if 0
  145464             :       /*! returns old style Sage II enum values */
  145465             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  145466             :       /*! returns old style Sage II enum values */
  145467             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  145468             : #endif
  145469             :       /* */
  145470             : 
  145471             : 
  145472             : 
  145473             : 
  145474             :      public:
  145475             :       /* name Traversal Support Functions
  145476             :           \brief Traversal support functions ... incomplete-documentation
  145477             : 
  145478             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145479             :           or by particularly knowledgable users for specialized tools or applications.
  145480             :        */
  145481             :       /* */
  145482             : 
  145483             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  145484             :        // (inferior to ROSE traversal mechanism, experimental).
  145485             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  145486             :        */
  145487             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  145488             : 
  145489             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  145490             :       /*! \brief support for the classic visitor pattern done in GoF */
  145491             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  145492             : 
  145493             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  145494             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  145495             :        */
  145496             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  145497             : 
  145498             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  145499             :        */
  145500             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  145501             : 
  145502             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  145503             :        // This traversal helps support internal tools that call static member functions.
  145504             :        // note: this function operates on the memory pools.
  145505             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  145506             :        */
  145507             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  145508             :       /* */
  145509             : 
  145510             : 
  145511             :      public:
  145512             :       /* name Memory Allocation Functions
  145513             :           \brief Memory allocations functions ... incomplete-documentation
  145514             : 
  145515             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145516             :           or by particularly knowledgable users for specialized tools or applications.
  145517             :        */
  145518             :       /* */
  145519             : 
  145520             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  145521             : 
  145522             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  145523             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  145524             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  145525             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  145526             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  145527             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  145528             :           being used with the AST File I/O mechanism.
  145529             :        */
  145530             :           virtual bool isInMemoryPool() override;
  145531             : 
  145532             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  145533             : 
  145534             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  145535             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  145536             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  145537             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  145538             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  145539             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  145540             :           being used with the AST File I/O mechanism.
  145541             :        */
  145542             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  145543             : 
  145544             :       // DQ (4/30/2006): Modified to be a const function.
  145545             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  145546             : 
  145547             :           This functions is part of general support for many possible tools to operate 
  145548             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  145549             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  145550             :           less than the set of pointers used by the AST file I/O. This is part of
  145551             :           work implemented by Andreas, and support tools such as the AST graph generation.
  145552             : 
  145553             :           \warning This function can return unexpected data members and thus the 
  145554             :                    order and the number of elements is unpredicable and subject 
  145555             :                    to change.
  145556             : 
  145557             :           \returns STL vector of pairs of SgNode* and strings
  145558             :        */
  145559             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  145560             : 
  145561             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  145562             : 
  145563             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  145564             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  145565             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  145566             : 
  145567             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  145568             :                    and subject to change.
  145569             :        */
  145570             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  145571             : 
  145572             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  145573             : 
  145574             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  145575             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  145576             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  145577             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  145578             : 
  145579             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  145580             : 
  145581             :           \returns long
  145582             :        */
  145583             :           virtual long getChildIndex( SgNode* childNode ) const override;
  145584             : 
  145585             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  145586             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  145587             :       /* \brief Constructor for use by AST File I/O Mechanism
  145588             : 
  145589             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  145590             :           which obtained via fast binary file I/O from disk.
  145591             :        */
  145592             :        // SgUseStatement( SgUseStatementStorageClass& source );
  145593             : 
  145594             : 
  145595             : 
  145596             : 
  145597             : 
  145598             :  // JH (10/24/2005): methods added to support the ast file IO
  145599             :     private:
  145600             : 
  145601             :       /* name AST Memory Allocation Support Functions
  145602             :           \brief Memory allocations support....
  145603             : 
  145604             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  145605             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  145606             :           and support the AST File I/O Mechanism.
  145607             :        */
  145608             :       /* */
  145609             : 
  145610             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  145611             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  145612             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  145613             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  145614             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  145615             :           a correspinding one in the AST_FILE_IO class!
  145616             :        */
  145617             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  145618             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  145619             :       /* \brief Typedef used for low level memory access.
  145620             :        */
  145621             :        // typedef unsigned char* TestType;
  145622             : 
  145623             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  145624             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  145625             :       /* \brief Typedef used to hold memory addresses as values.
  145626             :        */
  145627             :        // typedef unsigned long  AddressType;
  145628             : 
  145629             : 
  145630             : 
  145631             :        // necessary, to have direct access to the p_freepointer and the private methods !
  145632             :       /*! \brief friend class declaration to support AST File I/O */
  145633             :           friend class AST_FILE_IO;
  145634             : 
  145635             :       /*! \brief friend class declaration to support AST File I/O */
  145636             :           friend class SgUseStatementStorageClass;
  145637             : 
  145638             :       /*! \brief friend class declaration to support AST File I/O */
  145639             :           friend class AstSpecificDataManagingClass;
  145640             : 
  145641             :       /*! \brief friend class declaration to support AST File I/O */
  145642             :           friend class AstSpecificDataManagingClassStorageClass;
  145643             :     public:
  145644             :       /*! \brief IR node constructor to support AST File I/O */
  145645             :           SgUseStatement( const SgUseStatementStorageClass& source );
  145646             : 
  145647             :  // private: // JJW hack
  145648             :        /*
  145649             :           name AST Memory Allocation Support Variables
  145650             :           Memory allocations support variables 
  145651             : 
  145652             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  145653             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  145654             :           and support the AST File I/O Mechanism.
  145655             :        */
  145656             :       /* */
  145657             : 
  145658             :     public:
  145659             : 
  145660             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  145661             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  145662             :       // virtual SgNode* addRegExpAttribute();
  145663             :       /*! \brief Support for AST matching using regular expression.
  145664             : 
  145665             :           This support is incomplete and the subject of current research to define 
  145666             :           RegEx trees to support inexact matching.
  145667             :        */
  145668             :           SgUseStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  145669             : 
  145670             : // *** COMMON CODE SECTION ENDS HERE ***
  145671             : 
  145672             : 
  145673             : // End of memberFunctionString
  145674             : // Start of memberFunctionString
  145675             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  145676             : 
  145677             :      // the generated cast function
  145678             :      // friend ROSE_DLL_API SgUseStatement* isSgUseStatement ( SgNode* s );
  145679             : 
  145680             :           typedef SgDeclarationStatement base_node_type;
  145681             : 
  145682             : 
  145683             : // End of memberFunctionString
  145684             : // Start of memberFunctionString
  145685             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  145686             : 
  145687             :           void post_construction_initialization() override;
  145688             : 
  145689             : 
  145690             : // End of memberFunctionString
  145691             : 
  145692             :      public: 
  145693             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  145694             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  145695             : 
  145696             :      public: 
  145697             :          bool get_only_option() const;
  145698             :          void set_only_option(bool only_option);
  145699             : 
  145700             :      public: 
  145701             :          std::string get_module_nature() const;
  145702             :          void set_module_nature(std::string module_nature);
  145703             : 
  145704             :      public: 
  145705             :          const SgRenamePairPtrList&  get_rename_list() const;
  145706             :          SgRenamePairPtrList& get_rename_list(); 
  145707             : 
  145708             :      public: 
  145709             :          SgModuleStatement* get_module() const;
  145710             :          void set_module(SgModuleStatement* module);
  145711             : 
  145712             : 
  145713             :      public: 
  145714             :          virtual ~SgUseStatement();
  145715             : 
  145716             : 
  145717             :      public: 
  145718             :          SgUseStatement(Sg_File_Info* startOfConstruct , SgName name = "", bool only_option = false, std::string module_nature = ""); 
  145719             :          SgUseStatement(SgName name, bool only_option, std::string module_nature); 
  145720             : 
  145721             :     protected:
  145722             : // Start of memberFunctionString
  145723             : SgName p_name;
  145724             :           
  145725             : // End of memberFunctionString
  145726             : // Start of memberFunctionString
  145727             : bool p_only_option;
  145728             :           
  145729             : // End of memberFunctionString
  145730             : // Start of memberFunctionString
  145731             : std::string p_module_nature;
  145732             :           
  145733             : // End of memberFunctionString
  145734             : // Start of memberFunctionString
  145735             : SgRenamePairPtrList p_rename_list;
  145736             :           
  145737             : // End of memberFunctionString
  145738             : // Start of memberFunctionString
  145739             : SgModuleStatement* p_module;
  145740             :           
  145741             : // End of memberFunctionString
  145742             : 
  145743             :     friend struct Rose::Traits::generated::describe_node_t<SgUseStatement>;
  145744             :     friend struct Rose::Traits::generated::describe_field_t<SgUseStatement, SgName,&SgUseStatement::p_name>;
  145745             :     friend struct Rose::Traits::generated::describe_field_t<SgUseStatement, bool,&SgUseStatement::p_only_option>;
  145746             :     friend struct Rose::Traits::generated::describe_field_t<SgUseStatement, std::string,&SgUseStatement::p_module_nature>;
  145747             :     friend struct Rose::Traits::generated::describe_field_t<SgUseStatement, SgRenamePairPtrList,&SgUseStatement::p_rename_list>;
  145748             :     friend struct Rose::Traits::generated::describe_field_t<SgUseStatement, SgModuleStatement*,&SgUseStatement::p_module>;
  145749             : 
  145750             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145751             : 
  145752             : 
  145753             :    };
  145754             : #endif
  145755             : 
  145756             : // postdeclarations for SgUseStatement
  145757             : 
  145758             : /* #line 145759 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145759             : 
  145760             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  145761             : 
  145762             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145763             : 
  145764             : 
  145765             : /* #line 145766 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145766             : 
  145767             : 
  145768             : 
  145769             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145770             : 
  145771             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  145772             : //      This code is automatically generated for each 
  145773             : //      terminal and non-terminal within the defined 
  145774             : //      grammar.  There is a simple way to change the 
  145775             : //      code to fix bugs etc.  See the ROSE README file
  145776             : //      for directions.
  145777             : 
  145778             : // tps: (02/22/2010): Adding DLL export requirements
  145779             : #include "rosedll.h"
  145780             : 
  145781             : // predeclarations for SgParameterStatement
  145782             : 
  145783             : /* #line 145784 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145784             : 
  145785             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  145786             : 
  145787             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  145788             : 
  145789             : #if 1
  145790             : // Class Definition for SgParameterStatement
  145791             : class ROSE_DLL_API SgParameterStatement  : public SgDeclarationStatement
  145792             :    {
  145793             :      public:
  145794             : 
  145795             : 
  145796             : /* #line 145797 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  145797             : 
  145798             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  145799             : // Start of memberFunctionString
  145800             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  145801             : 
  145802             : // *** COMMON CODE SECTION BEGINS HERE ***
  145803             : 
  145804             :     public:
  145805             : 
  145806             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  145807             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  145808             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  145809             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  145810             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  145811             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  145812             : 
  145813             :       /*! \brief returns a string representing the class name */
  145814             :           virtual std::string class_name() const override;
  145815             : 
  145816             :       /*! \brief returns new style SageIII enum values */
  145817             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  145818             : 
  145819             :       /*! \brief static variant value */
  145820             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  145821             :        // static const VariantT static_variant = V_SgParameterStatement;
  145822             :           enum { static_variant = V_SgParameterStatement };
  145823             : 
  145824             :        /* the generated cast function */
  145825             :       /*! \brief Casts pointer from base class to derived class */
  145826             :           ROSE_DLL_API friend       SgParameterStatement* isSgParameterStatement(       SgNode * s );
  145827             : 
  145828             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  145829             :           ROSE_DLL_API friend const SgParameterStatement* isSgParameterStatement( const SgNode * s );
  145830             : 
  145831             :      // ******************************************
  145832             :      // * Memory Pool / New / Delete
  145833             :      // ******************************************
  145834             : 
  145835             :      public:
  145836             :           /// \private
  145837             :           static const unsigned pool_size; //
  145838             :           /// \private
  145839             :           static std::vector<unsigned char *> pools; //
  145840             :           /// \private
  145841             :           static SgParameterStatement * next_node; // 
  145842             : 
  145843             :           /// \private
  145844             :           static unsigned long initializeStorageClassArray(SgParameterStatementStorageClass *); //
  145845             : 
  145846             :           /// \private
  145847             :           static void clearMemoryPool(); //
  145848             :           static void deleteMemoryPool(); //
  145849             : 
  145850             :           /// \private
  145851             :           static void extendMemoryPoolForFileIO(); //
  145852             : 
  145853             :           /// \private
  145854             :           static SgParameterStatement * getPointerFromGlobalIndex(unsigned long); //
  145855             :           /// \private
  145856             :           static SgParameterStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  145857             : 
  145858             :           /// \private
  145859             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  145860             :           /// \private
  145861             :           static void resetValidFreepointers(); //
  145862             :           /// \private
  145863             :           static unsigned long getNumberOfLastValidPointer(); //
  145864             : 
  145865             : 
  145866             : #if defined(INLINE_FUNCTIONS)
  145867             :       /*! \brief returns pointer to newly allocated IR node */
  145868             :           inline void *operator new (size_t size);
  145869             : #else
  145870             :       /*! \brief returns pointer to newly allocated IR node */
  145871             :           void *operator new (size_t size);
  145872             : #endif
  145873             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  145874             :           void operator delete (void* pointer, size_t size);
  145875             : 
  145876             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  145877           0 :           void operator delete (void* pointer)
  145878             :              {
  145879             :             // This is the generated delete operator...
  145880           0 :                SgParameterStatement::operator delete (pointer,sizeof(SgParameterStatement));
  145881             :              }
  145882             : 
  145883             :       /*! \brief Returns the total number of IR nodes of this type */
  145884             :           static size_t numberOfNodes();
  145885             : 
  145886             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  145887             :           static size_t memoryUsage();
  145888             : 
  145889             :       // End of scope which started in IR nodes specific code 
  145890             :       /* */
  145891             : 
  145892             :       /* name Internal Functions
  145893             :           \brief Internal functions ... incomplete-documentation
  145894             : 
  145895             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145896             :           or by particularly knowledgeable users for specialized tools or applications.
  145897             : 
  145898             :           \internal We could not make these private because they are required by user for special purposes. And 
  145899             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  145900             :          
  145901             :        */
  145902             : 
  145903             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  145904             :        // overridden in every class by *generated* implementation
  145905             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  145906             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  145907             :        // MS: 06/28/02 container of names of variables or container indices 
  145908             :        // used used in the traversal to access AST successor nodes
  145909             :        // overridden in every class by *generated* implementation
  145910             :       /*! \brief container of names of variables or container indices used used in the traversal
  145911             :           to access AST successor nodes overridden in every class by *generated* implementation */
  145912             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  145913             : 
  145914             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  145915             :        // than all the vector copies. The implementation for these functions is generated for each class.
  145916             :       /*! \brief return number of children in the traversal successor list */
  145917             :           virtual size_t get_numberOfTraversalSuccessors() override;
  145918             :       /*! \brief index-based access to traversal successors by index number */
  145919             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  145920             :       /*! \brief index-based access to traversal successors by child node */
  145921             :           virtual size_t get_childIndex(SgNode *child) override;
  145922             : 
  145923             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  145924             :        // MS: 08/16/2002 method for generating RTI information
  145925             :       /*! \brief return C++ Runtime-Time-Information */
  145926             :           virtual RTIReturnType roseRTI() override;
  145927             : #endif
  145928             :       /* */
  145929             : 
  145930             : 
  145931             : 
  145932             :       /* name Deprecated Functions
  145933             :           \brief Deprecated functions ... incomplete-documentation
  145934             : 
  145935             :           These functions have been deprecated from use.
  145936             :        */
  145937             :       /* */
  145938             : 
  145939             :       /*! returns a C style string (char*) representing the class name */
  145940             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  145941             : 
  145942             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  145943             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  145944             : #if 0
  145945             :       /*! returns old style Sage II enum values */
  145946             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  145947             :       /*! returns old style Sage II enum values */
  145948             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  145949             : #endif
  145950             :       /* */
  145951             : 
  145952             : 
  145953             : 
  145954             : 
  145955             :      public:
  145956             :       /* name Traversal Support Functions
  145957             :           \brief Traversal support functions ... incomplete-documentation
  145958             : 
  145959             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145960             :           or by particularly knowledgable users for specialized tools or applications.
  145961             :        */
  145962             :       /* */
  145963             : 
  145964             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  145965             :        // (inferior to ROSE traversal mechanism, experimental).
  145966             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  145967             :        */
  145968             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  145969             : 
  145970             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  145971             :       /*! \brief support for the classic visitor pattern done in GoF */
  145972             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  145973             : 
  145974             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  145975             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  145976             :        */
  145977             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  145978             : 
  145979             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  145980             :        */
  145981             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  145982             : 
  145983             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  145984             :        // This traversal helps support internal tools that call static member functions.
  145985             :        // note: this function operates on the memory pools.
  145986             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  145987             :        */
  145988             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  145989             :       /* */
  145990             : 
  145991             : 
  145992             :      public:
  145993             :       /* name Memory Allocation Functions
  145994             :           \brief Memory allocations functions ... incomplete-documentation
  145995             : 
  145996             :           These functions have been made public as part of the design, but they are suggested for internal use 
  145997             :           or by particularly knowledgable users for specialized tools or applications.
  145998             :        */
  145999             :       /* */
  146000             : 
  146001             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  146002             : 
  146003             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  146004             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  146005             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  146006             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  146007             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  146008             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  146009             :           being used with the AST File I/O mechanism.
  146010             :        */
  146011             :           virtual bool isInMemoryPool() override;
  146012             : 
  146013             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  146014             : 
  146015             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  146016             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  146017             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  146018             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  146019             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  146020             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  146021             :           being used with the AST File I/O mechanism.
  146022             :        */
  146023             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  146024             : 
  146025             :       // DQ (4/30/2006): Modified to be a const function.
  146026             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  146027             : 
  146028             :           This functions is part of general support for many possible tools to operate 
  146029             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  146030             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  146031             :           less than the set of pointers used by the AST file I/O. This is part of
  146032             :           work implemented by Andreas, and support tools such as the AST graph generation.
  146033             : 
  146034             :           \warning This function can return unexpected data members and thus the 
  146035             :                    order and the number of elements is unpredicable and subject 
  146036             :                    to change.
  146037             : 
  146038             :           \returns STL vector of pairs of SgNode* and strings
  146039             :        */
  146040             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  146041             : 
  146042             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  146043             : 
  146044             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  146045             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  146046             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  146047             : 
  146048             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  146049             :                    and subject to change.
  146050             :        */
  146051             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  146052             : 
  146053             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  146054             : 
  146055             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  146056             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  146057             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  146058             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  146059             : 
  146060             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  146061             : 
  146062             :           \returns long
  146063             :        */
  146064             :           virtual long getChildIndex( SgNode* childNode ) const override;
  146065             : 
  146066             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  146067             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  146068             :       /* \brief Constructor for use by AST File I/O Mechanism
  146069             : 
  146070             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  146071             :           which obtained via fast binary file I/O from disk.
  146072             :        */
  146073             :        // SgParameterStatement( SgParameterStatementStorageClass& source );
  146074             : 
  146075             : 
  146076             : 
  146077             : 
  146078             : 
  146079             :  // JH (10/24/2005): methods added to support the ast file IO
  146080             :     private:
  146081             : 
  146082             :       /* name AST Memory Allocation Support Functions
  146083             :           \brief Memory allocations support....
  146084             : 
  146085             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  146086             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  146087             :           and support the AST File I/O Mechanism.
  146088             :        */
  146089             :       /* */
  146090             : 
  146091             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  146092             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  146093             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  146094             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  146095             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  146096             :           a correspinding one in the AST_FILE_IO class!
  146097             :        */
  146098             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  146099             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  146100             :       /* \brief Typedef used for low level memory access.
  146101             :        */
  146102             :        // typedef unsigned char* TestType;
  146103             : 
  146104             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  146105             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  146106             :       /* \brief Typedef used to hold memory addresses as values.
  146107             :        */
  146108             :        // typedef unsigned long  AddressType;
  146109             : 
  146110             : 
  146111             : 
  146112             :        // necessary, to have direct access to the p_freepointer and the private methods !
  146113             :       /*! \brief friend class declaration to support AST File I/O */
  146114             :           friend class AST_FILE_IO;
  146115             : 
  146116             :       /*! \brief friend class declaration to support AST File I/O */
  146117             :           friend class SgParameterStatementStorageClass;
  146118             : 
  146119             :       /*! \brief friend class declaration to support AST File I/O */
  146120             :           friend class AstSpecificDataManagingClass;
  146121             : 
  146122             :       /*! \brief friend class declaration to support AST File I/O */
  146123             :           friend class AstSpecificDataManagingClassStorageClass;
  146124             :     public:
  146125             :       /*! \brief IR node constructor to support AST File I/O */
  146126             :           SgParameterStatement( const SgParameterStatementStorageClass& source );
  146127             : 
  146128             :  // private: // JJW hack
  146129             :        /*
  146130             :           name AST Memory Allocation Support Variables
  146131             :           Memory allocations support variables 
  146132             : 
  146133             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  146134             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  146135             :           and support the AST File I/O Mechanism.
  146136             :        */
  146137             :       /* */
  146138             : 
  146139             :     public:
  146140             : 
  146141             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  146142             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  146143             :       // virtual SgNode* addRegExpAttribute();
  146144             :       /*! \brief Support for AST matching using regular expression.
  146145             : 
  146146             :           This support is incomplete and the subject of current research to define 
  146147             :           RegEx trees to support inexact matching.
  146148             :        */
  146149             :           SgParameterStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  146150             : 
  146151             : // *** COMMON CODE SECTION ENDS HERE ***
  146152             : 
  146153             : 
  146154             : // End of memberFunctionString
  146155             : // Start of memberFunctionString
  146156             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  146157             : 
  146158             :      // the generated cast function
  146159             :      // friend ROSE_DLL_API SgParameterStatement* isSgParameterStatement ( SgNode* s );
  146160             : 
  146161             :           typedef SgDeclarationStatement base_node_type;
  146162             : 
  146163             : 
  146164             : // End of memberFunctionString
  146165             : // Start of memberFunctionString
  146166             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  146167             : 
  146168             :           void post_construction_initialization() override;
  146169             : 
  146170             : 
  146171             : // End of memberFunctionString
  146172             : 
  146173             : 
  146174             :      public: 
  146175             :          virtual ~SgParameterStatement();
  146176             : 
  146177             : 
  146178             :      public: 
  146179             :          SgParameterStatement(Sg_File_Info* startOfConstruct ); 
  146180             :          SgParameterStatement(); 
  146181             : 
  146182             :     protected:
  146183             : 
  146184             :     friend struct Rose::Traits::generated::describe_node_t<SgParameterStatement>;
  146185             : 
  146186             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146187             : 
  146188             : 
  146189             :    };
  146190             : #endif
  146191             : 
  146192             : // postdeclarations for SgParameterStatement
  146193             : 
  146194             : /* #line 146195 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146195             : 
  146196             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  146197             : 
  146198             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146199             : 
  146200             : 
  146201             : /* #line 146202 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146202             : 
  146203             : 
  146204             : 
  146205             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146206             : 
  146207             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  146208             : //      This code is automatically generated for each 
  146209             : //      terminal and non-terminal within the defined 
  146210             : //      grammar.  There is a simple way to change the 
  146211             : //      code to fix bugs etc.  See the ROSE README file
  146212             : //      for directions.
  146213             : 
  146214             : // tps: (02/22/2010): Adding DLL export requirements
  146215             : #include "rosedll.h"
  146216             : 
  146217             : // predeclarations for SgNamespaceDeclarationStatement
  146218             : 
  146219             : /* #line 146220 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146220             : 
  146221             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  146222             : 
  146223             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146224             : 
  146225             : #if 1
  146226             : // Class Definition for SgNamespaceDeclarationStatement
  146227             : class ROSE_DLL_API SgNamespaceDeclarationStatement  : public SgDeclarationStatement
  146228             :    {
  146229             :      public:
  146230             : 
  146231             : 
  146232             : /* #line 146233 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146233             : 
  146234             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  146235             : // Start of memberFunctionString
  146236             : /* #line 3056 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  146237             : 
  146238             : 
  146239             :        // DQ (9/8/2004): Added to support qualified name generation
  146240             :           virtual SgName get_qualified_name() const;
  146241             : 
  146242             :        // RV (1/31/2006): Added mangler for namespace declarations.
  146243             :           virtual SgName get_mangled_name (void) const override;
  146244             : 
  146245             : #if 0
  146246             :        // Wrong, this should be structural and not explicitly stored
  146247             :        // DQ (2/19/2006): The scope needs to be stored explicitly so that we can reference a single scope
  146248             :        // (that of the first declaration, referenced from the firstNondefiningDeclaration()  member function,
  146249             :        // instead of all the possible different scopes that could be referenced.  Ths allows simple rules
  146250             :        // to be applied to all IR SgDeclaration IR nodes and makes for better testing.  The parent pointer
  146251             :        // maintains the source code structural relationships, which the scope represents the semantic
  146252             :        // relationships.
  146253             :       //! Support for where the scope is explicitly required
  146254             :           virtual bool hasExplicitScope() const override;
  146255             : #endif
  146256             : 
  146257             :        // DQ (2/10/2007): Marked as virtual to be consistent
  146258             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  146259             : 
  146260             :        // DQ (6/5/2007): Since namespaces are re-entrant we define a simple function to test if two namespaces
  146261             :        // are the same (not the same SgNamespaceDeclarationStatement, but the same namespace).
  146262             :       //! Check if two namespaces are the same
  146263             :           bool isSameNamespace( const SgNamespaceDeclarationStatement* n ) const;
  146264             : 
  146265             : #if ALT_FIXUP_COPY
  146266             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  146267             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  146268             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  146269             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  146270             : #else
  146271             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  146272             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  146273             : #endif
  146274             : 
  146275             : 
  146276             : 
  146277             : // End of memberFunctionString
  146278             : // Start of memberFunctionString
  146279             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  146280             : 
  146281             : // *** COMMON CODE SECTION BEGINS HERE ***
  146282             : 
  146283             :     public:
  146284             : 
  146285             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  146286             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  146287             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  146288             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  146289             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  146290             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  146291             : 
  146292             :       /*! \brief returns a string representing the class name */
  146293             :           virtual std::string class_name() const override;
  146294             : 
  146295             :       /*! \brief returns new style SageIII enum values */
  146296             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  146297             : 
  146298             :       /*! \brief static variant value */
  146299             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  146300             :        // static const VariantT static_variant = V_SgNamespaceDeclarationStatement;
  146301             :           enum { static_variant = V_SgNamespaceDeclarationStatement };
  146302             : 
  146303             :        /* the generated cast function */
  146304             :       /*! \brief Casts pointer from base class to derived class */
  146305             :           ROSE_DLL_API friend       SgNamespaceDeclarationStatement* isSgNamespaceDeclarationStatement(       SgNode * s );
  146306             : 
  146307             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  146308             :           ROSE_DLL_API friend const SgNamespaceDeclarationStatement* isSgNamespaceDeclarationStatement( const SgNode * s );
  146309             : 
  146310             :      // ******************************************
  146311             :      // * Memory Pool / New / Delete
  146312             :      // ******************************************
  146313             : 
  146314             :      public:
  146315             :           /// \private
  146316             :           static const unsigned pool_size; //
  146317             :           /// \private
  146318             :           static std::vector<unsigned char *> pools; //
  146319             :           /// \private
  146320             :           static SgNamespaceDeclarationStatement * next_node; // 
  146321             : 
  146322             :           /// \private
  146323             :           static unsigned long initializeStorageClassArray(SgNamespaceDeclarationStatementStorageClass *); //
  146324             : 
  146325             :           /// \private
  146326             :           static void clearMemoryPool(); //
  146327             :           static void deleteMemoryPool(); //
  146328             : 
  146329             :           /// \private
  146330             :           static void extendMemoryPoolForFileIO(); //
  146331             : 
  146332             :           /// \private
  146333             :           static SgNamespaceDeclarationStatement * getPointerFromGlobalIndex(unsigned long); //
  146334             :           /// \private
  146335             :           static SgNamespaceDeclarationStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  146336             : 
  146337             :           /// \private
  146338             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  146339             :           /// \private
  146340             :           static void resetValidFreepointers(); //
  146341             :           /// \private
  146342             :           static unsigned long getNumberOfLastValidPointer(); //
  146343             : 
  146344             : 
  146345             : #if defined(INLINE_FUNCTIONS)
  146346             :       /*! \brief returns pointer to newly allocated IR node */
  146347             :           inline void *operator new (size_t size);
  146348             : #else
  146349             :       /*! \brief returns pointer to newly allocated IR node */
  146350             :           void *operator new (size_t size);
  146351             : #endif
  146352             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  146353             :           void operator delete (void* pointer, size_t size);
  146354             : 
  146355             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  146356         242 :           void operator delete (void* pointer)
  146357             :              {
  146358             :             // This is the generated delete operator...
  146359         242 :                SgNamespaceDeclarationStatement::operator delete (pointer,sizeof(SgNamespaceDeclarationStatement));
  146360             :              }
  146361             : 
  146362             :       /*! \brief Returns the total number of IR nodes of this type */
  146363             :           static size_t numberOfNodes();
  146364             : 
  146365             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  146366             :           static size_t memoryUsage();
  146367             : 
  146368             :       // End of scope which started in IR nodes specific code 
  146369             :       /* */
  146370             : 
  146371             :       /* name Internal Functions
  146372             :           \brief Internal functions ... incomplete-documentation
  146373             : 
  146374             :           These functions have been made public as part of the design, but they are suggested for internal use 
  146375             :           or by particularly knowledgeable users for specialized tools or applications.
  146376             : 
  146377             :           \internal We could not make these private because they are required by user for special purposes. And 
  146378             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  146379             :          
  146380             :        */
  146381             : 
  146382             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  146383             :        // overridden in every class by *generated* implementation
  146384             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  146385             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  146386             :        // MS: 06/28/02 container of names of variables or container indices 
  146387             :        // used used in the traversal to access AST successor nodes
  146388             :        // overridden in every class by *generated* implementation
  146389             :       /*! \brief container of names of variables or container indices used used in the traversal
  146390             :           to access AST successor nodes overridden in every class by *generated* implementation */
  146391             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  146392             : 
  146393             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  146394             :        // than all the vector copies. The implementation for these functions is generated for each class.
  146395             :       /*! \brief return number of children in the traversal successor list */
  146396             :           virtual size_t get_numberOfTraversalSuccessors() override;
  146397             :       /*! \brief index-based access to traversal successors by index number */
  146398             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  146399             :       /*! \brief index-based access to traversal successors by child node */
  146400             :           virtual size_t get_childIndex(SgNode *child) override;
  146401             : 
  146402             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  146403             :        // MS: 08/16/2002 method for generating RTI information
  146404             :       /*! \brief return C++ Runtime-Time-Information */
  146405             :           virtual RTIReturnType roseRTI() override;
  146406             : #endif
  146407             :       /* */
  146408             : 
  146409             : 
  146410             : 
  146411             :       /* name Deprecated Functions
  146412             :           \brief Deprecated functions ... incomplete-documentation
  146413             : 
  146414             :           These functions have been deprecated from use.
  146415             :        */
  146416             :       /* */
  146417             : 
  146418             :       /*! returns a C style string (char*) representing the class name */
  146419             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  146420             : 
  146421             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  146422             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  146423             : #if 0
  146424             :       /*! returns old style Sage II enum values */
  146425             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  146426             :       /*! returns old style Sage II enum values */
  146427             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  146428             : #endif
  146429             :       /* */
  146430             : 
  146431             : 
  146432             : 
  146433             : 
  146434             :      public:
  146435             :       /* name Traversal Support Functions
  146436             :           \brief Traversal support functions ... incomplete-documentation
  146437             : 
  146438             :           These functions have been made public as part of the design, but they are suggested for internal use 
  146439             :           or by particularly knowledgable users for specialized tools or applications.
  146440             :        */
  146441             :       /* */
  146442             : 
  146443             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  146444             :        // (inferior to ROSE traversal mechanism, experimental).
  146445             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  146446             :        */
  146447             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  146448             : 
  146449             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  146450             :       /*! \brief support for the classic visitor pattern done in GoF */
  146451             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  146452             : 
  146453             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  146454             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  146455             :        */
  146456             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  146457             : 
  146458             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  146459             :        */
  146460             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  146461             : 
  146462             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  146463             :        // This traversal helps support internal tools that call static member functions.
  146464             :        // note: this function operates on the memory pools.
  146465             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  146466             :        */
  146467             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  146468             :       /* */
  146469             : 
  146470             : 
  146471             :      public:
  146472             :       /* name Memory Allocation Functions
  146473             :           \brief Memory allocations functions ... incomplete-documentation
  146474             : 
  146475             :           These functions have been made public as part of the design, but they are suggested for internal use 
  146476             :           or by particularly knowledgable users for specialized tools or applications.
  146477             :        */
  146478             :       /* */
  146479             : 
  146480             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  146481             : 
  146482             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  146483             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  146484             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  146485             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  146486             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  146487             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  146488             :           being used with the AST File I/O mechanism.
  146489             :        */
  146490             :           virtual bool isInMemoryPool() override;
  146491             : 
  146492             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  146493             : 
  146494             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  146495             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  146496             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  146497             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  146498             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  146499             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  146500             :           being used with the AST File I/O mechanism.
  146501             :        */
  146502             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  146503             : 
  146504             :       // DQ (4/30/2006): Modified to be a const function.
  146505             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  146506             : 
  146507             :           This functions is part of general support for many possible tools to operate 
  146508             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  146509             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  146510             :           less than the set of pointers used by the AST file I/O. This is part of
  146511             :           work implemented by Andreas, and support tools such as the AST graph generation.
  146512             : 
  146513             :           \warning This function can return unexpected data members and thus the 
  146514             :                    order and the number of elements is unpredicable and subject 
  146515             :                    to change.
  146516             : 
  146517             :           \returns STL vector of pairs of SgNode* and strings
  146518             :        */
  146519             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  146520             : 
  146521             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  146522             : 
  146523             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  146524             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  146525             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  146526             : 
  146527             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  146528             :                    and subject to change.
  146529             :        */
  146530             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  146531             : 
  146532             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  146533             : 
  146534             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  146535             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  146536             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  146537             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  146538             : 
  146539             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  146540             : 
  146541             :           \returns long
  146542             :        */
  146543             :           virtual long getChildIndex( SgNode* childNode ) const override;
  146544             : 
  146545             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  146546             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  146547             :       /* \brief Constructor for use by AST File I/O Mechanism
  146548             : 
  146549             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  146550             :           which obtained via fast binary file I/O from disk.
  146551             :        */
  146552             :        // SgNamespaceDeclarationStatement( SgNamespaceDeclarationStatementStorageClass& source );
  146553             : 
  146554             : 
  146555             : 
  146556             : 
  146557             : 
  146558             :  // JH (10/24/2005): methods added to support the ast file IO
  146559             :     private:
  146560             : 
  146561             :       /* name AST Memory Allocation Support Functions
  146562             :           \brief Memory allocations support....
  146563             : 
  146564             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  146565             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  146566             :           and support the AST File I/O Mechanism.
  146567             :        */
  146568             :       /* */
  146569             : 
  146570             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  146571             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  146572             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  146573             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  146574             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  146575             :           a correspinding one in the AST_FILE_IO class!
  146576             :        */
  146577             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  146578             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  146579             :       /* \brief Typedef used for low level memory access.
  146580             :        */
  146581             :        // typedef unsigned char* TestType;
  146582             : 
  146583             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  146584             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  146585             :       /* \brief Typedef used to hold memory addresses as values.
  146586             :        */
  146587             :        // typedef unsigned long  AddressType;
  146588             : 
  146589             : 
  146590             : 
  146591             :        // necessary, to have direct access to the p_freepointer and the private methods !
  146592             :       /*! \brief friend class declaration to support AST File I/O */
  146593             :           friend class AST_FILE_IO;
  146594             : 
  146595             :       /*! \brief friend class declaration to support AST File I/O */
  146596             :           friend class SgNamespaceDeclarationStatementStorageClass;
  146597             : 
  146598             :       /*! \brief friend class declaration to support AST File I/O */
  146599             :           friend class AstSpecificDataManagingClass;
  146600             : 
  146601             :       /*! \brief friend class declaration to support AST File I/O */
  146602             :           friend class AstSpecificDataManagingClassStorageClass;
  146603             :     public:
  146604             :       /*! \brief IR node constructor to support AST File I/O */
  146605             :           SgNamespaceDeclarationStatement( const SgNamespaceDeclarationStatementStorageClass& source );
  146606             : 
  146607             :  // private: // JJW hack
  146608             :        /*
  146609             :           name AST Memory Allocation Support Variables
  146610             :           Memory allocations support variables 
  146611             : 
  146612             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  146613             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  146614             :           and support the AST File I/O Mechanism.
  146615             :        */
  146616             :       /* */
  146617             : 
  146618             :     public:
  146619             : 
  146620             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  146621             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  146622             :       // virtual SgNode* addRegExpAttribute();
  146623             :       /*! \brief Support for AST matching using regular expression.
  146624             : 
  146625             :           This support is incomplete and the subject of current research to define 
  146626             :           RegEx trees to support inexact matching.
  146627             :        */
  146628             :           SgNamespaceDeclarationStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  146629             : 
  146630             : // *** COMMON CODE SECTION ENDS HERE ***
  146631             : 
  146632             : 
  146633             : // End of memberFunctionString
  146634             : // Start of memberFunctionString
  146635             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  146636             : 
  146637             :      // the generated cast function
  146638             :      // friend ROSE_DLL_API SgNamespaceDeclarationStatement* isSgNamespaceDeclarationStatement ( SgNode* s );
  146639             : 
  146640             :           typedef SgDeclarationStatement base_node_type;
  146641             : 
  146642             : 
  146643             : // End of memberFunctionString
  146644             : // Start of memberFunctionString
  146645             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  146646             : 
  146647             :           void post_construction_initialization() override;
  146648             : 
  146649             : 
  146650             : // End of memberFunctionString
  146651             : 
  146652             :      public: 
  146653             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  146654             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  146655             : 
  146656             :      public: 
  146657             :          SgNamespaceDefinitionStatement* get_definition() const;
  146658             :          void set_definition(SgNamespaceDefinitionStatement* definition);
  146659             : 
  146660             :      public: 
  146661             :          bool get_isUnnamedNamespace() const;
  146662             :          void set_isUnnamedNamespace(bool isUnnamedNamespace);
  146663             : 
  146664             :      public: 
  146665             :          bool get_isInlinedNamespace() const;
  146666             :          void set_isInlinedNamespace(bool isInlinedNamespace);
  146667             : 
  146668             : 
  146669             :      public: 
  146670             :          virtual ~SgNamespaceDeclarationStatement();
  146671             : 
  146672             : 
  146673             :      public: 
  146674             :          SgNamespaceDeclarationStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgNamespaceDefinitionStatement* definition = NULL, bool isUnnamedNamespace = false); 
  146675             :          SgNamespaceDeclarationStatement(SgName name, SgNamespaceDefinitionStatement* definition, bool isUnnamedNamespace); 
  146676             : 
  146677             :     protected:
  146678             : // Start of memberFunctionString
  146679             : SgName p_name;
  146680             :           
  146681             : // End of memberFunctionString
  146682             : // Start of memberFunctionString
  146683             : SgNamespaceDefinitionStatement* p_definition;
  146684             :           
  146685             : // End of memberFunctionString
  146686             : // Start of memberFunctionString
  146687             : bool p_isUnnamedNamespace;
  146688             :           
  146689             : // End of memberFunctionString
  146690             : // Start of memberFunctionString
  146691             : bool p_isInlinedNamespace;
  146692             :           
  146693             : // End of memberFunctionString
  146694             : 
  146695             :     friend struct Rose::Traits::generated::describe_node_t<SgNamespaceDeclarationStatement>;
  146696             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDeclarationStatement, SgName,&SgNamespaceDeclarationStatement::p_name>;
  146697             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDeclarationStatement, SgNamespaceDefinitionStatement*,&SgNamespaceDeclarationStatement::p_definition>;
  146698             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDeclarationStatement, bool,&SgNamespaceDeclarationStatement::p_isUnnamedNamespace>;
  146699             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceDeclarationStatement, bool,&SgNamespaceDeclarationStatement::p_isInlinedNamespace>;
  146700             : 
  146701             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146702             : 
  146703             : 
  146704             :    };
  146705             : #endif
  146706             : 
  146707             : // postdeclarations for SgNamespaceDeclarationStatement
  146708             : 
  146709             : /* #line 146710 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146710             : 
  146711             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  146712             : 
  146713             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146714             : 
  146715             : 
  146716             : /* #line 146717 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146717             : 
  146718             : 
  146719             : 
  146720             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146721             : 
  146722             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  146723             : //      This code is automatically generated for each 
  146724             : //      terminal and non-terminal within the defined 
  146725             : //      grammar.  There is a simple way to change the 
  146726             : //      code to fix bugs etc.  See the ROSE README file
  146727             : //      for directions.
  146728             : 
  146729             : // tps: (02/22/2010): Adding DLL export requirements
  146730             : #include "rosedll.h"
  146731             : 
  146732             : // predeclarations for SgEquivalenceStatement
  146733             : 
  146734             : /* #line 146735 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146735             : 
  146736             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  146737             : 
  146738             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  146739             : 
  146740             : #if 1
  146741             : // Class Definition for SgEquivalenceStatement
  146742             : class ROSE_DLL_API SgEquivalenceStatement  : public SgDeclarationStatement
  146743             :    {
  146744             :      public:
  146745             : 
  146746             : 
  146747             : /* #line 146748 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  146748             : 
  146749             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  146750             : // Start of memberFunctionString
  146751             : /* #line 3669 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  146752             : 
  146753             :      SgName get_mangled_name() const override;
  146754             : 
  146755             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  146756             :      virtual unsigned int cfgIndexForEnd() const override;
  146757             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  146758             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  146759             : #endif
  146760             : 
  146761             : 
  146762             : 
  146763             : // End of memberFunctionString
  146764             : // Start of memberFunctionString
  146765             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  146766             : 
  146767             : // *** COMMON CODE SECTION BEGINS HERE ***
  146768             : 
  146769             :     public:
  146770             : 
  146771             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  146772             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  146773             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  146774             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  146775             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  146776             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  146777             : 
  146778             :       /*! \brief returns a string representing the class name */
  146779             :           virtual std::string class_name() const override;
  146780             : 
  146781             :       /*! \brief returns new style SageIII enum values */
  146782             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  146783             : 
  146784             :       /*! \brief static variant value */
  146785             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  146786             :        // static const VariantT static_variant = V_SgEquivalenceStatement;
  146787             :           enum { static_variant = V_SgEquivalenceStatement };
  146788             : 
  146789             :        /* the generated cast function */
  146790             :       /*! \brief Casts pointer from base class to derived class */
  146791             :           ROSE_DLL_API friend       SgEquivalenceStatement* isSgEquivalenceStatement(       SgNode * s );
  146792             : 
  146793             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  146794             :           ROSE_DLL_API friend const SgEquivalenceStatement* isSgEquivalenceStatement( const SgNode * s );
  146795             : 
  146796             :      // ******************************************
  146797             :      // * Memory Pool / New / Delete
  146798             :      // ******************************************
  146799             : 
  146800             :      public:
  146801             :           /// \private
  146802             :           static const unsigned pool_size; //
  146803             :           /// \private
  146804             :           static std::vector<unsigned char *> pools; //
  146805             :           /// \private
  146806             :           static SgEquivalenceStatement * next_node; // 
  146807             : 
  146808             :           /// \private
  146809             :           static unsigned long initializeStorageClassArray(SgEquivalenceStatementStorageClass *); //
  146810             : 
  146811             :           /// \private
  146812             :           static void clearMemoryPool(); //
  146813             :           static void deleteMemoryPool(); //
  146814             : 
  146815             :           /// \private
  146816             :           static void extendMemoryPoolForFileIO(); //
  146817             : 
  146818             :           /// \private
  146819             :           static SgEquivalenceStatement * getPointerFromGlobalIndex(unsigned long); //
  146820             :           /// \private
  146821             :           static SgEquivalenceStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  146822             : 
  146823             :           /// \private
  146824             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  146825             :           /// \private
  146826             :           static void resetValidFreepointers(); //
  146827             :           /// \private
  146828             :           static unsigned long getNumberOfLastValidPointer(); //
  146829             : 
  146830             : 
  146831             : #if defined(INLINE_FUNCTIONS)
  146832             :       /*! \brief returns pointer to newly allocated IR node */
  146833             :           inline void *operator new (size_t size);
  146834             : #else
  146835             :       /*! \brief returns pointer to newly allocated IR node */
  146836             :           void *operator new (size_t size);
  146837             : #endif
  146838             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  146839             :           void operator delete (void* pointer, size_t size);
  146840             : 
  146841             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  146842           0 :           void operator delete (void* pointer)
  146843             :              {
  146844             :             // This is the generated delete operator...
  146845           0 :                SgEquivalenceStatement::operator delete (pointer,sizeof(SgEquivalenceStatement));
  146846             :              }
  146847             : 
  146848             :       /*! \brief Returns the total number of IR nodes of this type */
  146849             :           static size_t numberOfNodes();
  146850             : 
  146851             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  146852             :           static size_t memoryUsage();
  146853             : 
  146854             :       // End of scope which started in IR nodes specific code 
  146855             :       /* */
  146856             : 
  146857             :       /* name Internal Functions
  146858             :           \brief Internal functions ... incomplete-documentation
  146859             : 
  146860             :           These functions have been made public as part of the design, but they are suggested for internal use 
  146861             :           or by particularly knowledgeable users for specialized tools or applications.
  146862             : 
  146863             :           \internal We could not make these private because they are required by user for special purposes. And 
  146864             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  146865             :          
  146866             :        */
  146867             : 
  146868             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  146869             :        // overridden in every class by *generated* implementation
  146870             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  146871             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  146872             :        // MS: 06/28/02 container of names of variables or container indices 
  146873             :        // used used in the traversal to access AST successor nodes
  146874             :        // overridden in every class by *generated* implementation
  146875             :       /*! \brief container of names of variables or container indices used used in the traversal
  146876             :           to access AST successor nodes overridden in every class by *generated* implementation */
  146877             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  146878             : 
  146879             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  146880             :        // than all the vector copies. The implementation for these functions is generated for each class.
  146881             :       /*! \brief return number of children in the traversal successor list */
  146882             :           virtual size_t get_numberOfTraversalSuccessors() override;
  146883             :       /*! \brief index-based access to traversal successors by index number */
  146884             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  146885             :       /*! \brief index-based access to traversal successors by child node */
  146886             :           virtual size_t get_childIndex(SgNode *child) override;
  146887             : 
  146888             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  146889             :        // MS: 08/16/2002 method for generating RTI information
  146890             :       /*! \brief return C++ Runtime-Time-Information */
  146891             :           virtual RTIReturnType roseRTI() override;
  146892             : #endif
  146893             :       /* */
  146894             : 
  146895             : 
  146896             : 
  146897             :       /* name Deprecated Functions
  146898             :           \brief Deprecated functions ... incomplete-documentation
  146899             : 
  146900             :           These functions have been deprecated from use.
  146901             :        */
  146902             :       /* */
  146903             : 
  146904             :       /*! returns a C style string (char*) representing the class name */
  146905             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  146906             : 
  146907             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  146908             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  146909             : #if 0
  146910             :       /*! returns old style Sage II enum values */
  146911             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  146912             :       /*! returns old style Sage II enum values */
  146913             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  146914             : #endif
  146915             :       /* */
  146916             : 
  146917             : 
  146918             : 
  146919             : 
  146920             :      public:
  146921             :       /* name Traversal Support Functions
  146922             :           \brief Traversal support functions ... incomplete-documentation
  146923             : 
  146924             :           These functions have been made public as part of the design, but they are suggested for internal use 
  146925             :           or by particularly knowledgable users for specialized tools or applications.
  146926             :        */
  146927             :       /* */
  146928             : 
  146929             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  146930             :        // (inferior to ROSE traversal mechanism, experimental).
  146931             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  146932             :        */
  146933             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  146934             : 
  146935             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  146936             :       /*! \brief support for the classic visitor pattern done in GoF */
  146937             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  146938             : 
  146939             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  146940             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  146941             :        */
  146942             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  146943             : 
  146944             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  146945             :        */
  146946             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  146947             : 
  146948             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  146949             :        // This traversal helps support internal tools that call static member functions.
  146950             :        // note: this function operates on the memory pools.
  146951             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  146952             :        */
  146953             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  146954             :       /* */
  146955             : 
  146956             : 
  146957             :      public:
  146958             :       /* name Memory Allocation Functions
  146959             :           \brief Memory allocations functions ... incomplete-documentation
  146960             : 
  146961             :           These functions have been made public as part of the design, but they are suggested for internal use 
  146962             :           or by particularly knowledgable users for specialized tools or applications.
  146963             :        */
  146964             :       /* */
  146965             : 
  146966             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  146967             : 
  146968             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  146969             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  146970             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  146971             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  146972             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  146973             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  146974             :           being used with the AST File I/O mechanism.
  146975             :        */
  146976             :           virtual bool isInMemoryPool() override;
  146977             : 
  146978             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  146979             : 
  146980             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  146981             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  146982             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  146983             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  146984             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  146985             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  146986             :           being used with the AST File I/O mechanism.
  146987             :        */
  146988             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  146989             : 
  146990             :       // DQ (4/30/2006): Modified to be a const function.
  146991             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  146992             : 
  146993             :           This functions is part of general support for many possible tools to operate 
  146994             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  146995             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  146996             :           less than the set of pointers used by the AST file I/O. This is part of
  146997             :           work implemented by Andreas, and support tools such as the AST graph generation.
  146998             : 
  146999             :           \warning This function can return unexpected data members and thus the 
  147000             :                    order and the number of elements is unpredicable and subject 
  147001             :                    to change.
  147002             : 
  147003             :           \returns STL vector of pairs of SgNode* and strings
  147004             :        */
  147005             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  147006             : 
  147007             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  147008             : 
  147009             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  147010             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  147011             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  147012             : 
  147013             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  147014             :                    and subject to change.
  147015             :        */
  147016             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  147017             : 
  147018             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  147019             : 
  147020             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  147021             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  147022             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  147023             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  147024             : 
  147025             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  147026             : 
  147027             :           \returns long
  147028             :        */
  147029             :           virtual long getChildIndex( SgNode* childNode ) const override;
  147030             : 
  147031             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  147032             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  147033             :       /* \brief Constructor for use by AST File I/O Mechanism
  147034             : 
  147035             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  147036             :           which obtained via fast binary file I/O from disk.
  147037             :        */
  147038             :        // SgEquivalenceStatement( SgEquivalenceStatementStorageClass& source );
  147039             : 
  147040             : 
  147041             : 
  147042             : 
  147043             : 
  147044             :  // JH (10/24/2005): methods added to support the ast file IO
  147045             :     private:
  147046             : 
  147047             :       /* name AST Memory Allocation Support Functions
  147048             :           \brief Memory allocations support....
  147049             : 
  147050             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  147051             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  147052             :           and support the AST File I/O Mechanism.
  147053             :        */
  147054             :       /* */
  147055             : 
  147056             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  147057             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  147058             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  147059             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  147060             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  147061             :           a correspinding one in the AST_FILE_IO class!
  147062             :        */
  147063             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  147064             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  147065             :       /* \brief Typedef used for low level memory access.
  147066             :        */
  147067             :        // typedef unsigned char* TestType;
  147068             : 
  147069             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  147070             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  147071             :       /* \brief Typedef used to hold memory addresses as values.
  147072             :        */
  147073             :        // typedef unsigned long  AddressType;
  147074             : 
  147075             : 
  147076             : 
  147077             :        // necessary, to have direct access to the p_freepointer and the private methods !
  147078             :       /*! \brief friend class declaration to support AST File I/O */
  147079             :           friend class AST_FILE_IO;
  147080             : 
  147081             :       /*! \brief friend class declaration to support AST File I/O */
  147082             :           friend class SgEquivalenceStatementStorageClass;
  147083             : 
  147084             :       /*! \brief friend class declaration to support AST File I/O */
  147085             :           friend class AstSpecificDataManagingClass;
  147086             : 
  147087             :       /*! \brief friend class declaration to support AST File I/O */
  147088             :           friend class AstSpecificDataManagingClassStorageClass;
  147089             :     public:
  147090             :       /*! \brief IR node constructor to support AST File I/O */
  147091             :           SgEquivalenceStatement( const SgEquivalenceStatementStorageClass& source );
  147092             : 
  147093             :  // private: // JJW hack
  147094             :        /*
  147095             :           name AST Memory Allocation Support Variables
  147096             :           Memory allocations support variables 
  147097             : 
  147098             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  147099             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  147100             :           and support the AST File I/O Mechanism.
  147101             :        */
  147102             :       /* */
  147103             : 
  147104             :     public:
  147105             : 
  147106             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  147107             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  147108             :       // virtual SgNode* addRegExpAttribute();
  147109             :       /*! \brief Support for AST matching using regular expression.
  147110             : 
  147111             :           This support is incomplete and the subject of current research to define 
  147112             :           RegEx trees to support inexact matching.
  147113             :        */
  147114             :           SgEquivalenceStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  147115             : 
  147116             : // *** COMMON CODE SECTION ENDS HERE ***
  147117             : 
  147118             : 
  147119             : // End of memberFunctionString
  147120             : // Start of memberFunctionString
  147121             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  147122             : 
  147123             :      // the generated cast function
  147124             :      // friend ROSE_DLL_API SgEquivalenceStatement* isSgEquivalenceStatement ( SgNode* s );
  147125             : 
  147126             :           typedef SgDeclarationStatement base_node_type;
  147127             : 
  147128             : 
  147129             : // End of memberFunctionString
  147130             : // Start of memberFunctionString
  147131             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  147132             : 
  147133             :           void post_construction_initialization() override;
  147134             : 
  147135             : 
  147136             : // End of memberFunctionString
  147137             : 
  147138             :      public: 
  147139             :          SgExprListExp* get_equivalence_set_list() const;
  147140             :          void set_equivalence_set_list(SgExprListExp* equivalence_set_list);
  147141             : 
  147142             : 
  147143             :      public: 
  147144             :          virtual ~SgEquivalenceStatement();
  147145             : 
  147146             : 
  147147             :      public: 
  147148             :          SgEquivalenceStatement(Sg_File_Info* startOfConstruct ); 
  147149             :          SgEquivalenceStatement(); 
  147150             : 
  147151             :     protected:
  147152             : // Start of memberFunctionString
  147153             : SgExprListExp* p_equivalence_set_list;
  147154             :           
  147155             : // End of memberFunctionString
  147156             : 
  147157             :     friend struct Rose::Traits::generated::describe_node_t<SgEquivalenceStatement>;
  147158             :     friend struct Rose::Traits::generated::describe_field_t<SgEquivalenceStatement, SgExprListExp*,&SgEquivalenceStatement::p_equivalence_set_list>;
  147159             : 
  147160             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147161             : 
  147162             : 
  147163             :    };
  147164             : #endif
  147165             : 
  147166             : // postdeclarations for SgEquivalenceStatement
  147167             : 
  147168             : /* #line 147169 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147169             : 
  147170             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  147171             : 
  147172             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147173             : 
  147174             : 
  147175             : /* #line 147176 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147176             : 
  147177             : 
  147178             : 
  147179             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147180             : 
  147181             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  147182             : //      This code is automatically generated for each 
  147183             : //      terminal and non-terminal within the defined 
  147184             : //      grammar.  There is a simple way to change the 
  147185             : //      code to fix bugs etc.  See the ROSE README file
  147186             : //      for directions.
  147187             : 
  147188             : // tps: (02/22/2010): Adding DLL export requirements
  147189             : #include "rosedll.h"
  147190             : 
  147191             : // predeclarations for SgInterfaceStatement
  147192             : 
  147193             : /* #line 147194 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147194             : 
  147195             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  147196             : 
  147197             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147198             : 
  147199             : #if 1
  147200             : // Class Definition for SgInterfaceStatement
  147201             : class ROSE_DLL_API SgInterfaceStatement  : public SgDeclarationStatement
  147202             :    {
  147203             :      public:
  147204             : 
  147205             : 
  147206             : /* #line 147207 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147207             : 
  147208             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  147209             : // Start of memberFunctionString
  147210             : /* #line 3325 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  147211             : 
  147212             : 
  147213             :           enum generic_spec_enum
  147214             :              {
  147215             :                e_error_interface_type      = 0, /*!< error value */
  147216             :                e_default_interface_type    = 1, /*!< default value */
  147217             :                e_unnamed_interface_type    = 2, /*!< default value */
  147218             :                e_named_interface_type      = 3, /*!< named interface value */
  147219             :                e_operator_interface_type   = 4, /*!< operator value */
  147220             :                e_assignment_interface_type = 5, /*!< assignement operator value */
  147221             :                e_last_interface_type       = 6  /*!< last value (upper bound on range of values, used in error checking) */
  147222             :              };
  147223             : 
  147224             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  147225             :           virtual unsigned int cfgIndexForEnd() const override;
  147226             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  147227             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  147228             : #endif
  147229             : 
  147230             :           virtual SgName get_mangled_name() const override;
  147231             : 
  147232             : 
  147233             : // End of memberFunctionString
  147234             : // Start of memberFunctionString
  147235             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  147236             : 
  147237             : // *** COMMON CODE SECTION BEGINS HERE ***
  147238             : 
  147239             :     public:
  147240             : 
  147241             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  147242             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  147243             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  147244             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  147245             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  147246             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  147247             : 
  147248             :       /*! \brief returns a string representing the class name */
  147249             :           virtual std::string class_name() const override;
  147250             : 
  147251             :       /*! \brief returns new style SageIII enum values */
  147252             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  147253             : 
  147254             :       /*! \brief static variant value */
  147255             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  147256             :        // static const VariantT static_variant = V_SgInterfaceStatement;
  147257             :           enum { static_variant = V_SgInterfaceStatement };
  147258             : 
  147259             :        /* the generated cast function */
  147260             :       /*! \brief Casts pointer from base class to derived class */
  147261             :           ROSE_DLL_API friend       SgInterfaceStatement* isSgInterfaceStatement(       SgNode * s );
  147262             : 
  147263             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  147264             :           ROSE_DLL_API friend const SgInterfaceStatement* isSgInterfaceStatement( const SgNode * s );
  147265             : 
  147266             :      // ******************************************
  147267             :      // * Memory Pool / New / Delete
  147268             :      // ******************************************
  147269             : 
  147270             :      public:
  147271             :           /// \private
  147272             :           static const unsigned pool_size; //
  147273             :           /// \private
  147274             :           static std::vector<unsigned char *> pools; //
  147275             :           /// \private
  147276             :           static SgInterfaceStatement * next_node; // 
  147277             : 
  147278             :           /// \private
  147279             :           static unsigned long initializeStorageClassArray(SgInterfaceStatementStorageClass *); //
  147280             : 
  147281             :           /// \private
  147282             :           static void clearMemoryPool(); //
  147283             :           static void deleteMemoryPool(); //
  147284             : 
  147285             :           /// \private
  147286             :           static void extendMemoryPoolForFileIO(); //
  147287             : 
  147288             :           /// \private
  147289             :           static SgInterfaceStatement * getPointerFromGlobalIndex(unsigned long); //
  147290             :           /// \private
  147291             :           static SgInterfaceStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  147292             : 
  147293             :           /// \private
  147294             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  147295             :           /// \private
  147296             :           static void resetValidFreepointers(); //
  147297             :           /// \private
  147298             :           static unsigned long getNumberOfLastValidPointer(); //
  147299             : 
  147300             : 
  147301             : #if defined(INLINE_FUNCTIONS)
  147302             :       /*! \brief returns pointer to newly allocated IR node */
  147303             :           inline void *operator new (size_t size);
  147304             : #else
  147305             :       /*! \brief returns pointer to newly allocated IR node */
  147306             :           void *operator new (size_t size);
  147307             : #endif
  147308             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  147309             :           void operator delete (void* pointer, size_t size);
  147310             : 
  147311             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  147312           0 :           void operator delete (void* pointer)
  147313             :              {
  147314             :             // This is the generated delete operator...
  147315           0 :                SgInterfaceStatement::operator delete (pointer,sizeof(SgInterfaceStatement));
  147316             :              }
  147317             : 
  147318             :       /*! \brief Returns the total number of IR nodes of this type */
  147319             :           static size_t numberOfNodes();
  147320             : 
  147321             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  147322             :           static size_t memoryUsage();
  147323             : 
  147324             :       // End of scope which started in IR nodes specific code 
  147325             :       /* */
  147326             : 
  147327             :       /* name Internal Functions
  147328             :           \brief Internal functions ... incomplete-documentation
  147329             : 
  147330             :           These functions have been made public as part of the design, but they are suggested for internal use 
  147331             :           or by particularly knowledgeable users for specialized tools or applications.
  147332             : 
  147333             :           \internal We could not make these private because they are required by user for special purposes. And 
  147334             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  147335             :          
  147336             :        */
  147337             : 
  147338             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  147339             :        // overridden in every class by *generated* implementation
  147340             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  147341             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  147342             :        // MS: 06/28/02 container of names of variables or container indices 
  147343             :        // used used in the traversal to access AST successor nodes
  147344             :        // overridden in every class by *generated* implementation
  147345             :       /*! \brief container of names of variables or container indices used used in the traversal
  147346             :           to access AST successor nodes overridden in every class by *generated* implementation */
  147347             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  147348             : 
  147349             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  147350             :        // than all the vector copies. The implementation for these functions is generated for each class.
  147351             :       /*! \brief return number of children in the traversal successor list */
  147352             :           virtual size_t get_numberOfTraversalSuccessors() override;
  147353             :       /*! \brief index-based access to traversal successors by index number */
  147354             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  147355             :       /*! \brief index-based access to traversal successors by child node */
  147356             :           virtual size_t get_childIndex(SgNode *child) override;
  147357             : 
  147358             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  147359             :        // MS: 08/16/2002 method for generating RTI information
  147360             :       /*! \brief return C++ Runtime-Time-Information */
  147361             :           virtual RTIReturnType roseRTI() override;
  147362             : #endif
  147363             :       /* */
  147364             : 
  147365             : 
  147366             : 
  147367             :       /* name Deprecated Functions
  147368             :           \brief Deprecated functions ... incomplete-documentation
  147369             : 
  147370             :           These functions have been deprecated from use.
  147371             :        */
  147372             :       /* */
  147373             : 
  147374             :       /*! returns a C style string (char*) representing the class name */
  147375             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  147376             : 
  147377             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  147378             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  147379             : #if 0
  147380             :       /*! returns old style Sage II enum values */
  147381             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  147382             :       /*! returns old style Sage II enum values */
  147383             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  147384             : #endif
  147385             :       /* */
  147386             : 
  147387             : 
  147388             : 
  147389             : 
  147390             :      public:
  147391             :       /* name Traversal Support Functions
  147392             :           \brief Traversal support functions ... incomplete-documentation
  147393             : 
  147394             :           These functions have been made public as part of the design, but they are suggested for internal use 
  147395             :           or by particularly knowledgable users for specialized tools or applications.
  147396             :        */
  147397             :       /* */
  147398             : 
  147399             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  147400             :        // (inferior to ROSE traversal mechanism, experimental).
  147401             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  147402             :        */
  147403             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  147404             : 
  147405             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  147406             :       /*! \brief support for the classic visitor pattern done in GoF */
  147407             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  147408             : 
  147409             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  147410             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  147411             :        */
  147412             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  147413             : 
  147414             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  147415             :        */
  147416             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  147417             : 
  147418             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  147419             :        // This traversal helps support internal tools that call static member functions.
  147420             :        // note: this function operates on the memory pools.
  147421             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  147422             :        */
  147423             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  147424             :       /* */
  147425             : 
  147426             : 
  147427             :      public:
  147428             :       /* name Memory Allocation Functions
  147429             :           \brief Memory allocations functions ... incomplete-documentation
  147430             : 
  147431             :           These functions have been made public as part of the design, but they are suggested for internal use 
  147432             :           or by particularly knowledgable users for specialized tools or applications.
  147433             :        */
  147434             :       /* */
  147435             : 
  147436             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  147437             : 
  147438             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  147439             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  147440             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  147441             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  147442             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  147443             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  147444             :           being used with the AST File I/O mechanism.
  147445             :        */
  147446             :           virtual bool isInMemoryPool() override;
  147447             : 
  147448             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  147449             : 
  147450             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  147451             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  147452             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  147453             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  147454             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  147455             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  147456             :           being used with the AST File I/O mechanism.
  147457             :        */
  147458             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  147459             : 
  147460             :       // DQ (4/30/2006): Modified to be a const function.
  147461             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  147462             : 
  147463             :           This functions is part of general support for many possible tools to operate 
  147464             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  147465             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  147466             :           less than the set of pointers used by the AST file I/O. This is part of
  147467             :           work implemented by Andreas, and support tools such as the AST graph generation.
  147468             : 
  147469             :           \warning This function can return unexpected data members and thus the 
  147470             :                    order and the number of elements is unpredicable and subject 
  147471             :                    to change.
  147472             : 
  147473             :           \returns STL vector of pairs of SgNode* and strings
  147474             :        */
  147475             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  147476             : 
  147477             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  147478             : 
  147479             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  147480             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  147481             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  147482             : 
  147483             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  147484             :                    and subject to change.
  147485             :        */
  147486             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  147487             : 
  147488             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  147489             : 
  147490             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  147491             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  147492             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  147493             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  147494             : 
  147495             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  147496             : 
  147497             :           \returns long
  147498             :        */
  147499             :           virtual long getChildIndex( SgNode* childNode ) const override;
  147500             : 
  147501             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  147502             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  147503             :       /* \brief Constructor for use by AST File I/O Mechanism
  147504             : 
  147505             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  147506             :           which obtained via fast binary file I/O from disk.
  147507             :        */
  147508             :        // SgInterfaceStatement( SgInterfaceStatementStorageClass& source );
  147509             : 
  147510             : 
  147511             : 
  147512             : 
  147513             : 
  147514             :  // JH (10/24/2005): methods added to support the ast file IO
  147515             :     private:
  147516             : 
  147517             :       /* name AST Memory Allocation Support Functions
  147518             :           \brief Memory allocations support....
  147519             : 
  147520             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  147521             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  147522             :           and support the AST File I/O Mechanism.
  147523             :        */
  147524             :       /* */
  147525             : 
  147526             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  147527             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  147528             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  147529             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  147530             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  147531             :           a correspinding one in the AST_FILE_IO class!
  147532             :        */
  147533             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  147534             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  147535             :       /* \brief Typedef used for low level memory access.
  147536             :        */
  147537             :        // typedef unsigned char* TestType;
  147538             : 
  147539             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  147540             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  147541             :       /* \brief Typedef used to hold memory addresses as values.
  147542             :        */
  147543             :        // typedef unsigned long  AddressType;
  147544             : 
  147545             : 
  147546             : 
  147547             :        // necessary, to have direct access to the p_freepointer and the private methods !
  147548             :       /*! \brief friend class declaration to support AST File I/O */
  147549             :           friend class AST_FILE_IO;
  147550             : 
  147551             :       /*! \brief friend class declaration to support AST File I/O */
  147552             :           friend class SgInterfaceStatementStorageClass;
  147553             : 
  147554             :       /*! \brief friend class declaration to support AST File I/O */
  147555             :           friend class AstSpecificDataManagingClass;
  147556             : 
  147557             :       /*! \brief friend class declaration to support AST File I/O */
  147558             :           friend class AstSpecificDataManagingClassStorageClass;
  147559             :     public:
  147560             :       /*! \brief IR node constructor to support AST File I/O */
  147561             :           SgInterfaceStatement( const SgInterfaceStatementStorageClass& source );
  147562             : 
  147563             :  // private: // JJW hack
  147564             :        /*
  147565             :           name AST Memory Allocation Support Variables
  147566             :           Memory allocations support variables 
  147567             : 
  147568             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  147569             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  147570             :           and support the AST File I/O Mechanism.
  147571             :        */
  147572             :       /* */
  147573             : 
  147574             :     public:
  147575             : 
  147576             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  147577             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  147578             :       // virtual SgNode* addRegExpAttribute();
  147579             :       /*! \brief Support for AST matching using regular expression.
  147580             : 
  147581             :           This support is incomplete and the subject of current research to define 
  147582             :           RegEx trees to support inexact matching.
  147583             :        */
  147584             :           SgInterfaceStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  147585             : 
  147586             : // *** COMMON CODE SECTION ENDS HERE ***
  147587             : 
  147588             : 
  147589             : // End of memberFunctionString
  147590             : // Start of memberFunctionString
  147591             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  147592             : 
  147593             :      // the generated cast function
  147594             :      // friend ROSE_DLL_API SgInterfaceStatement* isSgInterfaceStatement ( SgNode* s );
  147595             : 
  147596             :           typedef SgDeclarationStatement base_node_type;
  147597             : 
  147598             : 
  147599             : // End of memberFunctionString
  147600             : // Start of memberFunctionString
  147601             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  147602             : 
  147603             :           void post_construction_initialization() override;
  147604             : 
  147605             : 
  147606             : // End of memberFunctionString
  147607             : 
  147608             :      public: 
  147609             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  147610             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  147611             : 
  147612             :      public: 
  147613             :          SgInterfaceStatement::generic_spec_enum get_generic_spec() const;
  147614             :          void set_generic_spec(SgInterfaceStatement::generic_spec_enum generic_spec);
  147615             : 
  147616             :      public: 
  147617             :          const SgInterfaceBodyPtrList&  get_interface_body_list() const;
  147618             :          SgInterfaceBodyPtrList& get_interface_body_list(); 
  147619             : 
  147620             :      public: 
  147621             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  147622             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  147623             : 
  147624             : 
  147625             :      public: 
  147626             :          virtual ~SgInterfaceStatement();
  147627             : 
  147628             : 
  147629             :      public: 
  147630             :          SgInterfaceStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgInterfaceStatement::generic_spec_enum generic_spec = SgInterfaceStatement::e_default_interface_type); 
  147631             :          SgInterfaceStatement(SgName name, SgInterfaceStatement::generic_spec_enum generic_spec); 
  147632             : 
  147633             :     protected:
  147634             : // Start of memberFunctionString
  147635             : SgName p_name;
  147636             :           
  147637             : // End of memberFunctionString
  147638             : // Start of memberFunctionString
  147639             : SgInterfaceStatement::generic_spec_enum p_generic_spec;
  147640             :           
  147641             : // End of memberFunctionString
  147642             : // Start of memberFunctionString
  147643             : SgInterfaceBodyPtrList p_interface_body_list;
  147644             :           
  147645             : // End of memberFunctionString
  147646             : // Start of memberFunctionString
  147647             : SgLabelRefExp* p_end_numeric_label;
  147648             :           
  147649             : // End of memberFunctionString
  147650             : 
  147651             :     friend struct Rose::Traits::generated::describe_node_t<SgInterfaceStatement>;
  147652             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceStatement, SgName,&SgInterfaceStatement::p_name>;
  147653             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceStatement, SgInterfaceStatement::generic_spec_enum,&SgInterfaceStatement::p_generic_spec>;
  147654             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceStatement, SgInterfaceBodyPtrList,&SgInterfaceStatement::p_interface_body_list>;
  147655             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceStatement, SgLabelRefExp*,&SgInterfaceStatement::p_end_numeric_label>;
  147656             : 
  147657             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147658             : 
  147659             : 
  147660             :    };
  147661             : #endif
  147662             : 
  147663             : // postdeclarations for SgInterfaceStatement
  147664             : 
  147665             : /* #line 147666 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147666             : 
  147667             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  147668             : 
  147669             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147670             : 
  147671             : 
  147672             : /* #line 147673 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147673             : 
  147674             : 
  147675             : 
  147676             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147677             : 
  147678             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  147679             : //      This code is automatically generated for each 
  147680             : //      terminal and non-terminal within the defined 
  147681             : //      grammar.  There is a simple way to change the 
  147682             : //      code to fix bugs etc.  See the ROSE README file
  147683             : //      for directions.
  147684             : 
  147685             : // tps: (02/22/2010): Adding DLL export requirements
  147686             : #include "rosedll.h"
  147687             : 
  147688             : // predeclarations for SgNamespaceAliasDeclarationStatement
  147689             : 
  147690             : /* #line 147691 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147691             : 
  147692             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  147693             : 
  147694             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  147695             : 
  147696             : #if 1
  147697             : // Class Definition for SgNamespaceAliasDeclarationStatement
  147698             : class ROSE_DLL_API SgNamespaceAliasDeclarationStatement  : public SgDeclarationStatement
  147699             :    {
  147700             :      public:
  147701             : 
  147702             : 
  147703             : /* #line 147704 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  147704             : 
  147705             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  147706             : // Start of memberFunctionString
  147707             : /* #line 3136 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  147708             : 
  147709             : 
  147710             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  147711             :           virtual SgName get_mangled_name(void) const override;
  147712             : 
  147713             :        // DQ (8/30/2009): Added namespace alias support.
  147714             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  147715             : 
  147716             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  147717             :           int get_name_qualification_length() const;
  147718             :           void set_name_qualification_length(int name_qualification_length);
  147719             : 
  147720             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  147721             :           bool get_type_elaboration_required() const;
  147722             :           void set_type_elaboration_required(bool type_elaboration_required);
  147723             : 
  147724             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  147725             :           bool get_global_qualification_required() const;
  147726             :           void set_global_qualification_required(bool global_qualification_required);
  147727             : 
  147728             : 
  147729             : 
  147730             : // End of memberFunctionString
  147731             : // Start of memberFunctionString
  147732             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  147733             : 
  147734             : // *** COMMON CODE SECTION BEGINS HERE ***
  147735             : 
  147736             :     public:
  147737             : 
  147738             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  147739             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  147740             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  147741             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  147742             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  147743             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  147744             : 
  147745             :       /*! \brief returns a string representing the class name */
  147746             :           virtual std::string class_name() const override;
  147747             : 
  147748             :       /*! \brief returns new style SageIII enum values */
  147749             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  147750             : 
  147751             :       /*! \brief static variant value */
  147752             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  147753             :        // static const VariantT static_variant = V_SgNamespaceAliasDeclarationStatement;
  147754             :           enum { static_variant = V_SgNamespaceAliasDeclarationStatement };
  147755             : 
  147756             :        /* the generated cast function */
  147757             :       /*! \brief Casts pointer from base class to derived class */
  147758             :           ROSE_DLL_API friend       SgNamespaceAliasDeclarationStatement* isSgNamespaceAliasDeclarationStatement(       SgNode * s );
  147759             : 
  147760             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  147761             :           ROSE_DLL_API friend const SgNamespaceAliasDeclarationStatement* isSgNamespaceAliasDeclarationStatement( const SgNode * s );
  147762             : 
  147763             :      // ******************************************
  147764             :      // * Memory Pool / New / Delete
  147765             :      // ******************************************
  147766             : 
  147767             :      public:
  147768             :           /// \private
  147769             :           static const unsigned pool_size; //
  147770             :           /// \private
  147771             :           static std::vector<unsigned char *> pools; //
  147772             :           /// \private
  147773             :           static SgNamespaceAliasDeclarationStatement * next_node; // 
  147774             : 
  147775             :           /// \private
  147776             :           static unsigned long initializeStorageClassArray(SgNamespaceAliasDeclarationStatementStorageClass *); //
  147777             : 
  147778             :           /// \private
  147779             :           static void clearMemoryPool(); //
  147780             :           static void deleteMemoryPool(); //
  147781             : 
  147782             :           /// \private
  147783             :           static void extendMemoryPoolForFileIO(); //
  147784             : 
  147785             :           /// \private
  147786             :           static SgNamespaceAliasDeclarationStatement * getPointerFromGlobalIndex(unsigned long); //
  147787             :           /// \private
  147788             :           static SgNamespaceAliasDeclarationStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  147789             : 
  147790             :           /// \private
  147791             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  147792             :           /// \private
  147793             :           static void resetValidFreepointers(); //
  147794             :           /// \private
  147795             :           static unsigned long getNumberOfLastValidPointer(); //
  147796             : 
  147797             : 
  147798             : #if defined(INLINE_FUNCTIONS)
  147799             :       /*! \brief returns pointer to newly allocated IR node */
  147800             :           inline void *operator new (size_t size);
  147801             : #else
  147802             :       /*! \brief returns pointer to newly allocated IR node */
  147803             :           void *operator new (size_t size);
  147804             : #endif
  147805             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  147806             :           void operator delete (void* pointer, size_t size);
  147807             : 
  147808             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  147809           0 :           void operator delete (void* pointer)
  147810             :              {
  147811             :             // This is the generated delete operator...
  147812           0 :                SgNamespaceAliasDeclarationStatement::operator delete (pointer,sizeof(SgNamespaceAliasDeclarationStatement));
  147813             :              }
  147814             : 
  147815             :       /*! \brief Returns the total number of IR nodes of this type */
  147816             :           static size_t numberOfNodes();
  147817             : 
  147818             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  147819             :           static size_t memoryUsage();
  147820             : 
  147821             :       // End of scope which started in IR nodes specific code 
  147822             :       /* */
  147823             : 
  147824             :       /* name Internal Functions
  147825             :           \brief Internal functions ... incomplete-documentation
  147826             : 
  147827             :           These functions have been made public as part of the design, but they are suggested for internal use 
  147828             :           or by particularly knowledgeable users for specialized tools or applications.
  147829             : 
  147830             :           \internal We could not make these private because they are required by user for special purposes. And 
  147831             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  147832             :          
  147833             :        */
  147834             : 
  147835             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  147836             :        // overridden in every class by *generated* implementation
  147837             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  147838             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  147839             :        // MS: 06/28/02 container of names of variables or container indices 
  147840             :        // used used in the traversal to access AST successor nodes
  147841             :        // overridden in every class by *generated* implementation
  147842             :       /*! \brief container of names of variables or container indices used used in the traversal
  147843             :           to access AST successor nodes overridden in every class by *generated* implementation */
  147844             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  147845             : 
  147846             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  147847             :        // than all the vector copies. The implementation for these functions is generated for each class.
  147848             :       /*! \brief return number of children in the traversal successor list */
  147849             :           virtual size_t get_numberOfTraversalSuccessors() override;
  147850             :       /*! \brief index-based access to traversal successors by index number */
  147851             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  147852             :       /*! \brief index-based access to traversal successors by child node */
  147853             :           virtual size_t get_childIndex(SgNode *child) override;
  147854             : 
  147855             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  147856             :        // MS: 08/16/2002 method for generating RTI information
  147857             :       /*! \brief return C++ Runtime-Time-Information */
  147858             :           virtual RTIReturnType roseRTI() override;
  147859             : #endif
  147860             :       /* */
  147861             : 
  147862             : 
  147863             : 
  147864             :       /* name Deprecated Functions
  147865             :           \brief Deprecated functions ... incomplete-documentation
  147866             : 
  147867             :           These functions have been deprecated from use.
  147868             :        */
  147869             :       /* */
  147870             : 
  147871             :       /*! returns a C style string (char*) representing the class name */
  147872             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  147873             : 
  147874             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  147875             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  147876             : #if 0
  147877             :       /*! returns old style Sage II enum values */
  147878             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  147879             :       /*! returns old style Sage II enum values */
  147880             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  147881             : #endif
  147882             :       /* */
  147883             : 
  147884             : 
  147885             : 
  147886             : 
  147887             :      public:
  147888             :       /* name Traversal Support Functions
  147889             :           \brief Traversal support functions ... incomplete-documentation
  147890             : 
  147891             :           These functions have been made public as part of the design, but they are suggested for internal use 
  147892             :           or by particularly knowledgable users for specialized tools or applications.
  147893             :        */
  147894             :       /* */
  147895             : 
  147896             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  147897             :        // (inferior to ROSE traversal mechanism, experimental).
  147898             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  147899             :        */
  147900             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  147901             : 
  147902             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  147903             :       /*! \brief support for the classic visitor pattern done in GoF */
  147904             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  147905             : 
  147906             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  147907             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  147908             :        */
  147909             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  147910             : 
  147911             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  147912             :        */
  147913             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  147914             : 
  147915             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  147916             :        // This traversal helps support internal tools that call static member functions.
  147917             :        // note: this function operates on the memory pools.
  147918             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  147919             :        */
  147920             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  147921             :       /* */
  147922             : 
  147923             : 
  147924             :      public:
  147925             :       /* name Memory Allocation Functions
  147926             :           \brief Memory allocations functions ... incomplete-documentation
  147927             : 
  147928             :           These functions have been made public as part of the design, but they are suggested for internal use 
  147929             :           or by particularly knowledgable users for specialized tools or applications.
  147930             :        */
  147931             :       /* */
  147932             : 
  147933             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  147934             : 
  147935             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  147936             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  147937             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  147938             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  147939             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  147940             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  147941             :           being used with the AST File I/O mechanism.
  147942             :        */
  147943             :           virtual bool isInMemoryPool() override;
  147944             : 
  147945             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  147946             : 
  147947             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  147948             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  147949             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  147950             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  147951             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  147952             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  147953             :           being used with the AST File I/O mechanism.
  147954             :        */
  147955             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  147956             : 
  147957             :       // DQ (4/30/2006): Modified to be a const function.
  147958             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  147959             : 
  147960             :           This functions is part of general support for many possible tools to operate 
  147961             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  147962             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  147963             :           less than the set of pointers used by the AST file I/O. This is part of
  147964             :           work implemented by Andreas, and support tools such as the AST graph generation.
  147965             : 
  147966             :           \warning This function can return unexpected data members and thus the 
  147967             :                    order and the number of elements is unpredicable and subject 
  147968             :                    to change.
  147969             : 
  147970             :           \returns STL vector of pairs of SgNode* and strings
  147971             :        */
  147972             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  147973             : 
  147974             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  147975             : 
  147976             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  147977             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  147978             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  147979             : 
  147980             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  147981             :                    and subject to change.
  147982             :        */
  147983             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  147984             : 
  147985             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  147986             : 
  147987             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  147988             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  147989             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  147990             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  147991             : 
  147992             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  147993             : 
  147994             :           \returns long
  147995             :        */
  147996             :           virtual long getChildIndex( SgNode* childNode ) const override;
  147997             : 
  147998             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  147999             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  148000             :       /* \brief Constructor for use by AST File I/O Mechanism
  148001             : 
  148002             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  148003             :           which obtained via fast binary file I/O from disk.
  148004             :        */
  148005             :        // SgNamespaceAliasDeclarationStatement( SgNamespaceAliasDeclarationStatementStorageClass& source );
  148006             : 
  148007             : 
  148008             : 
  148009             : 
  148010             : 
  148011             :  // JH (10/24/2005): methods added to support the ast file IO
  148012             :     private:
  148013             : 
  148014             :       /* name AST Memory Allocation Support Functions
  148015             :           \brief Memory allocations support....
  148016             : 
  148017             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  148018             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  148019             :           and support the AST File I/O Mechanism.
  148020             :        */
  148021             :       /* */
  148022             : 
  148023             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  148024             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  148025             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  148026             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  148027             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  148028             :           a correspinding one in the AST_FILE_IO class!
  148029             :        */
  148030             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  148031             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  148032             :       /* \brief Typedef used for low level memory access.
  148033             :        */
  148034             :        // typedef unsigned char* TestType;
  148035             : 
  148036             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  148037             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  148038             :       /* \brief Typedef used to hold memory addresses as values.
  148039             :        */
  148040             :        // typedef unsigned long  AddressType;
  148041             : 
  148042             : 
  148043             : 
  148044             :        // necessary, to have direct access to the p_freepointer and the private methods !
  148045             :       /*! \brief friend class declaration to support AST File I/O */
  148046             :           friend class AST_FILE_IO;
  148047             : 
  148048             :       /*! \brief friend class declaration to support AST File I/O */
  148049             :           friend class SgNamespaceAliasDeclarationStatementStorageClass;
  148050             : 
  148051             :       /*! \brief friend class declaration to support AST File I/O */
  148052             :           friend class AstSpecificDataManagingClass;
  148053             : 
  148054             :       /*! \brief friend class declaration to support AST File I/O */
  148055             :           friend class AstSpecificDataManagingClassStorageClass;
  148056             :     public:
  148057             :       /*! \brief IR node constructor to support AST File I/O */
  148058             :           SgNamespaceAliasDeclarationStatement( const SgNamespaceAliasDeclarationStatementStorageClass& source );
  148059             : 
  148060             :  // private: // JJW hack
  148061             :        /*
  148062             :           name AST Memory Allocation Support Variables
  148063             :           Memory allocations support variables 
  148064             : 
  148065             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  148066             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  148067             :           and support the AST File I/O Mechanism.
  148068             :        */
  148069             :       /* */
  148070             : 
  148071             :     public:
  148072             : 
  148073             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  148074             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  148075             :       // virtual SgNode* addRegExpAttribute();
  148076             :       /*! \brief Support for AST matching using regular expression.
  148077             : 
  148078             :           This support is incomplete and the subject of current research to define 
  148079             :           RegEx trees to support inexact matching.
  148080             :        */
  148081             :           SgNamespaceAliasDeclarationStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  148082             : 
  148083             : // *** COMMON CODE SECTION ENDS HERE ***
  148084             : 
  148085             : 
  148086             : // End of memberFunctionString
  148087             : // Start of memberFunctionString
  148088             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  148089             : 
  148090             :      // the generated cast function
  148091             :      // friend ROSE_DLL_API SgNamespaceAliasDeclarationStatement* isSgNamespaceAliasDeclarationStatement ( SgNode* s );
  148092             : 
  148093             :           typedef SgDeclarationStatement base_node_type;
  148094             : 
  148095             : 
  148096             : // End of memberFunctionString
  148097             : // Start of memberFunctionString
  148098             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  148099             : 
  148100             :           void post_construction_initialization() override;
  148101             : 
  148102             : 
  148103             : // End of memberFunctionString
  148104             : 
  148105             :      public: 
  148106             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  148107             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  148108             : 
  148109             :      public: 
  148110             :          SgNamespaceDeclarationStatement* get_namespaceDeclaration() const;
  148111             :          void set_namespaceDeclaration(SgNamespaceDeclarationStatement* namespaceDeclaration);
  148112             : 
  148113             : 
  148114             : 
  148115             : 
  148116             :      public: 
  148117             :          bool get_is_alias_for_another_namespace_alias() const;
  148118             :          void set_is_alias_for_another_namespace_alias(bool is_alias_for_another_namespace_alias);
  148119             : 
  148120             :      public: 
  148121             :          SgNamespaceAliasDeclarationStatement* get_namespaceAliasDeclaration() const;
  148122             :          void set_namespaceAliasDeclaration(SgNamespaceAliasDeclarationStatement* namespaceAliasDeclaration);
  148123             : 
  148124             : 
  148125             :      public: 
  148126             :          virtual ~SgNamespaceAliasDeclarationStatement();
  148127             : 
  148128             : 
  148129             :      public: 
  148130             :          SgNamespaceAliasDeclarationStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgNamespaceDeclarationStatement* namespaceDeclaration = NULL); 
  148131             :          SgNamespaceAliasDeclarationStatement(SgName name, SgNamespaceDeclarationStatement* namespaceDeclaration); 
  148132             : 
  148133             :     protected:
  148134             : // Start of memberFunctionString
  148135             : SgName p_name;
  148136             :           
  148137             : // End of memberFunctionString
  148138             : // Start of memberFunctionString
  148139             : SgNamespaceDeclarationStatement* p_namespaceDeclaration;
  148140             :           
  148141             : // End of memberFunctionString
  148142             : // Start of memberFunctionString
  148143             : int p_name_qualification_length;
  148144             :           
  148145             : // End of memberFunctionString
  148146             : // Start of memberFunctionString
  148147             : bool p_type_elaboration_required;
  148148             :           
  148149             : // End of memberFunctionString
  148150             : // Start of memberFunctionString
  148151             : bool p_global_qualification_required;
  148152             :           
  148153             : // End of memberFunctionString
  148154             : // Start of memberFunctionString
  148155             : bool p_is_alias_for_another_namespace_alias;
  148156             :           
  148157             : // End of memberFunctionString
  148158             : // Start of memberFunctionString
  148159             : SgNamespaceAliasDeclarationStatement* p_namespaceAliasDeclaration;
  148160             :           
  148161             : // End of memberFunctionString
  148162             : 
  148163             :     friend struct Rose::Traits::generated::describe_node_t<SgNamespaceAliasDeclarationStatement>;
  148164             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceAliasDeclarationStatement, SgName,&SgNamespaceAliasDeclarationStatement::p_name>;
  148165             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceAliasDeclarationStatement, SgNamespaceDeclarationStatement*,&SgNamespaceAliasDeclarationStatement::p_namespaceDeclaration>;
  148166             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceAliasDeclarationStatement, int,&SgNamespaceAliasDeclarationStatement::p_name_qualification_length>;
  148167             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceAliasDeclarationStatement, bool,&SgNamespaceAliasDeclarationStatement::p_type_elaboration_required>;
  148168             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceAliasDeclarationStatement, bool,&SgNamespaceAliasDeclarationStatement::p_global_qualification_required>;
  148169             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceAliasDeclarationStatement, bool,&SgNamespaceAliasDeclarationStatement::p_is_alias_for_another_namespace_alias>;
  148170             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceAliasDeclarationStatement, SgNamespaceAliasDeclarationStatement*,&SgNamespaceAliasDeclarationStatement::p_namespaceAliasDeclaration>;
  148171             : 
  148172             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148173             : 
  148174             : 
  148175             :    };
  148176             : #endif
  148177             : 
  148178             : // postdeclarations for SgNamespaceAliasDeclarationStatement
  148179             : 
  148180             : /* #line 148181 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148181             : 
  148182             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  148183             : 
  148184             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148185             : 
  148186             : 
  148187             : /* #line 148188 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148188             : 
  148189             : 
  148190             : 
  148191             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148192             : 
  148193             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  148194             : //      This code is automatically generated for each 
  148195             : //      terminal and non-terminal within the defined 
  148196             : //      grammar.  There is a simple way to change the 
  148197             : //      code to fix bugs etc.  See the ROSE README file
  148198             : //      for directions.
  148199             : 
  148200             : // tps: (02/22/2010): Adding DLL export requirements
  148201             : #include "rosedll.h"
  148202             : 
  148203             : // predeclarations for SgCommonBlock
  148204             : 
  148205             : /* #line 148206 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148206             : 
  148207             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  148208             : 
  148209             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148210             : 
  148211             : #if 1
  148212             : // Class Definition for SgCommonBlock
  148213             : class ROSE_DLL_API SgCommonBlock  : public SgDeclarationStatement
  148214             :    {
  148215             :      public:
  148216             : 
  148217             : 
  148218             : /* #line 148219 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148219             : 
  148220             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  148221             : // Start of memberFunctionString
  148222             : /* #line 3350 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  148223             : 
  148224             :           SgName get_mangled_name() const override;
  148225             : 
  148226             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  148227             :           virtual unsigned int cfgIndexForEnd() const override;
  148228             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  148229             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  148230             : #endif
  148231             : 
  148232             :           const SgCommonBlockObjectPtrList & get_block_list() const;
  148233             :           SgCommonBlockObjectPtrList & get_block_list();
  148234             : 
  148235             : 
  148236             : // End of memberFunctionString
  148237             : // Start of memberFunctionString
  148238             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  148239             : 
  148240             : // *** COMMON CODE SECTION BEGINS HERE ***
  148241             : 
  148242             :     public:
  148243             : 
  148244             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  148245             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  148246             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  148247             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  148248             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  148249             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  148250             : 
  148251             :       /*! \brief returns a string representing the class name */
  148252             :           virtual std::string class_name() const override;
  148253             : 
  148254             :       /*! \brief returns new style SageIII enum values */
  148255             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  148256             : 
  148257             :       /*! \brief static variant value */
  148258             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  148259             :        // static const VariantT static_variant = V_SgCommonBlock;
  148260             :           enum { static_variant = V_SgCommonBlock };
  148261             : 
  148262             :        /* the generated cast function */
  148263             :       /*! \brief Casts pointer from base class to derived class */
  148264             :           ROSE_DLL_API friend       SgCommonBlock* isSgCommonBlock(       SgNode * s );
  148265             : 
  148266             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  148267             :           ROSE_DLL_API friend const SgCommonBlock* isSgCommonBlock( const SgNode * s );
  148268             : 
  148269             :      // ******************************************
  148270             :      // * Memory Pool / New / Delete
  148271             :      // ******************************************
  148272             : 
  148273             :      public:
  148274             :           /// \private
  148275             :           static const unsigned pool_size; //
  148276             :           /// \private
  148277             :           static std::vector<unsigned char *> pools; //
  148278             :           /// \private
  148279             :           static SgCommonBlock * next_node; // 
  148280             : 
  148281             :           /// \private
  148282             :           static unsigned long initializeStorageClassArray(SgCommonBlockStorageClass *); //
  148283             : 
  148284             :           /// \private
  148285             :           static void clearMemoryPool(); //
  148286             :           static void deleteMemoryPool(); //
  148287             : 
  148288             :           /// \private
  148289             :           static void extendMemoryPoolForFileIO(); //
  148290             : 
  148291             :           /// \private
  148292             :           static SgCommonBlock * getPointerFromGlobalIndex(unsigned long); //
  148293             :           /// \private
  148294             :           static SgCommonBlock * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  148295             : 
  148296             :           /// \private
  148297             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  148298             :           /// \private
  148299             :           static void resetValidFreepointers(); //
  148300             :           /// \private
  148301             :           static unsigned long getNumberOfLastValidPointer(); //
  148302             : 
  148303             : 
  148304             : #if defined(INLINE_FUNCTIONS)
  148305             :       /*! \brief returns pointer to newly allocated IR node */
  148306             :           inline void *operator new (size_t size);
  148307             : #else
  148308             :       /*! \brief returns pointer to newly allocated IR node */
  148309             :           void *operator new (size_t size);
  148310             : #endif
  148311             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  148312             :           void operator delete (void* pointer, size_t size);
  148313             : 
  148314             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  148315           0 :           void operator delete (void* pointer)
  148316             :              {
  148317             :             // This is the generated delete operator...
  148318           0 :                SgCommonBlock::operator delete (pointer,sizeof(SgCommonBlock));
  148319             :              }
  148320             : 
  148321             :       /*! \brief Returns the total number of IR nodes of this type */
  148322             :           static size_t numberOfNodes();
  148323             : 
  148324             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  148325             :           static size_t memoryUsage();
  148326             : 
  148327             :       // End of scope which started in IR nodes specific code 
  148328             :       /* */
  148329             : 
  148330             :       /* name Internal Functions
  148331             :           \brief Internal functions ... incomplete-documentation
  148332             : 
  148333             :           These functions have been made public as part of the design, but they are suggested for internal use 
  148334             :           or by particularly knowledgeable users for specialized tools or applications.
  148335             : 
  148336             :           \internal We could not make these private because they are required by user for special purposes. And 
  148337             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  148338             :          
  148339             :        */
  148340             : 
  148341             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  148342             :        // overridden in every class by *generated* implementation
  148343             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  148344             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  148345             :        // MS: 06/28/02 container of names of variables or container indices 
  148346             :        // used used in the traversal to access AST successor nodes
  148347             :        // overridden in every class by *generated* implementation
  148348             :       /*! \brief container of names of variables or container indices used used in the traversal
  148349             :           to access AST successor nodes overridden in every class by *generated* implementation */
  148350             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  148351             : 
  148352             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  148353             :        // than all the vector copies. The implementation for these functions is generated for each class.
  148354             :       /*! \brief return number of children in the traversal successor list */
  148355             :           virtual size_t get_numberOfTraversalSuccessors() override;
  148356             :       /*! \brief index-based access to traversal successors by index number */
  148357             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  148358             :       /*! \brief index-based access to traversal successors by child node */
  148359             :           virtual size_t get_childIndex(SgNode *child) override;
  148360             : 
  148361             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  148362             :        // MS: 08/16/2002 method for generating RTI information
  148363             :       /*! \brief return C++ Runtime-Time-Information */
  148364             :           virtual RTIReturnType roseRTI() override;
  148365             : #endif
  148366             :       /* */
  148367             : 
  148368             : 
  148369             : 
  148370             :       /* name Deprecated Functions
  148371             :           \brief Deprecated functions ... incomplete-documentation
  148372             : 
  148373             :           These functions have been deprecated from use.
  148374             :        */
  148375             :       /* */
  148376             : 
  148377             :       /*! returns a C style string (char*) representing the class name */
  148378             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  148379             : 
  148380             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  148381             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  148382             : #if 0
  148383             :       /*! returns old style Sage II enum values */
  148384             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  148385             :       /*! returns old style Sage II enum values */
  148386             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  148387             : #endif
  148388             :       /* */
  148389             : 
  148390             : 
  148391             : 
  148392             : 
  148393             :      public:
  148394             :       /* name Traversal Support Functions
  148395             :           \brief Traversal support functions ... incomplete-documentation
  148396             : 
  148397             :           These functions have been made public as part of the design, but they are suggested for internal use 
  148398             :           or by particularly knowledgable users for specialized tools or applications.
  148399             :        */
  148400             :       /* */
  148401             : 
  148402             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  148403             :        // (inferior to ROSE traversal mechanism, experimental).
  148404             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  148405             :        */
  148406             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  148407             : 
  148408             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  148409             :       /*! \brief support for the classic visitor pattern done in GoF */
  148410             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  148411             : 
  148412             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  148413             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  148414             :        */
  148415             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  148416             : 
  148417             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  148418             :        */
  148419             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  148420             : 
  148421             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  148422             :        // This traversal helps support internal tools that call static member functions.
  148423             :        // note: this function operates on the memory pools.
  148424             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  148425             :        */
  148426             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  148427             :       /* */
  148428             : 
  148429             : 
  148430             :      public:
  148431             :       /* name Memory Allocation Functions
  148432             :           \brief Memory allocations functions ... incomplete-documentation
  148433             : 
  148434             :           These functions have been made public as part of the design, but they are suggested for internal use 
  148435             :           or by particularly knowledgable users for specialized tools or applications.
  148436             :        */
  148437             :       /* */
  148438             : 
  148439             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  148440             : 
  148441             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  148442             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  148443             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  148444             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  148445             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  148446             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  148447             :           being used with the AST File I/O mechanism.
  148448             :        */
  148449             :           virtual bool isInMemoryPool() override;
  148450             : 
  148451             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  148452             : 
  148453             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  148454             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  148455             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  148456             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  148457             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  148458             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  148459             :           being used with the AST File I/O mechanism.
  148460             :        */
  148461             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  148462             : 
  148463             :       // DQ (4/30/2006): Modified to be a const function.
  148464             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  148465             : 
  148466             :           This functions is part of general support for many possible tools to operate 
  148467             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  148468             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  148469             :           less than the set of pointers used by the AST file I/O. This is part of
  148470             :           work implemented by Andreas, and support tools such as the AST graph generation.
  148471             : 
  148472             :           \warning This function can return unexpected data members and thus the 
  148473             :                    order and the number of elements is unpredicable and subject 
  148474             :                    to change.
  148475             : 
  148476             :           \returns STL vector of pairs of SgNode* and strings
  148477             :        */
  148478             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  148479             : 
  148480             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  148481             : 
  148482             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  148483             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  148484             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  148485             : 
  148486             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  148487             :                    and subject to change.
  148488             :        */
  148489             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  148490             : 
  148491             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  148492             : 
  148493             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  148494             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  148495             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  148496             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  148497             : 
  148498             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  148499             : 
  148500             :           \returns long
  148501             :        */
  148502             :           virtual long getChildIndex( SgNode* childNode ) const override;
  148503             : 
  148504             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  148505             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  148506             :       /* \brief Constructor for use by AST File I/O Mechanism
  148507             : 
  148508             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  148509             :           which obtained via fast binary file I/O from disk.
  148510             :        */
  148511             :        // SgCommonBlock( SgCommonBlockStorageClass& source );
  148512             : 
  148513             : 
  148514             : 
  148515             : 
  148516             : 
  148517             :  // JH (10/24/2005): methods added to support the ast file IO
  148518             :     private:
  148519             : 
  148520             :       /* name AST Memory Allocation Support Functions
  148521             :           \brief Memory allocations support....
  148522             : 
  148523             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  148524             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  148525             :           and support the AST File I/O Mechanism.
  148526             :        */
  148527             :       /* */
  148528             : 
  148529             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  148530             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  148531             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  148532             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  148533             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  148534             :           a correspinding one in the AST_FILE_IO class!
  148535             :        */
  148536             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  148537             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  148538             :       /* \brief Typedef used for low level memory access.
  148539             :        */
  148540             :        // typedef unsigned char* TestType;
  148541             : 
  148542             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  148543             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  148544             :       /* \brief Typedef used to hold memory addresses as values.
  148545             :        */
  148546             :        // typedef unsigned long  AddressType;
  148547             : 
  148548             : 
  148549             : 
  148550             :        // necessary, to have direct access to the p_freepointer and the private methods !
  148551             :       /*! \brief friend class declaration to support AST File I/O */
  148552             :           friend class AST_FILE_IO;
  148553             : 
  148554             :       /*! \brief friend class declaration to support AST File I/O */
  148555             :           friend class SgCommonBlockStorageClass;
  148556             : 
  148557             :       /*! \brief friend class declaration to support AST File I/O */
  148558             :           friend class AstSpecificDataManagingClass;
  148559             : 
  148560             :       /*! \brief friend class declaration to support AST File I/O */
  148561             :           friend class AstSpecificDataManagingClassStorageClass;
  148562             :     public:
  148563             :       /*! \brief IR node constructor to support AST File I/O */
  148564             :           SgCommonBlock( const SgCommonBlockStorageClass& source );
  148565             : 
  148566             :  // private: // JJW hack
  148567             :        /*
  148568             :           name AST Memory Allocation Support Variables
  148569             :           Memory allocations support variables 
  148570             : 
  148571             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  148572             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  148573             :           and support the AST File I/O Mechanism.
  148574             :        */
  148575             :       /* */
  148576             : 
  148577             :     public:
  148578             : 
  148579             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  148580             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  148581             :       // virtual SgNode* addRegExpAttribute();
  148582             :       /*! \brief Support for AST matching using regular expression.
  148583             : 
  148584             :           This support is incomplete and the subject of current research to define 
  148585             :           RegEx trees to support inexact matching.
  148586             :        */
  148587             :           SgCommonBlock* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  148588             : 
  148589             : // *** COMMON CODE SECTION ENDS HERE ***
  148590             : 
  148591             : 
  148592             : // End of memberFunctionString
  148593             : // Start of memberFunctionString
  148594             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  148595             : 
  148596             :      // the generated cast function
  148597             :      // friend ROSE_DLL_API SgCommonBlock* isSgCommonBlock ( SgNode* s );
  148598             : 
  148599             :           typedef SgDeclarationStatement base_node_type;
  148600             : 
  148601             : 
  148602             : // End of memberFunctionString
  148603             : // Start of memberFunctionString
  148604             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  148605             : 
  148606             :           void post_construction_initialization() override;
  148607             : 
  148608             : 
  148609             : // End of memberFunctionString
  148610             : 
  148611             : 
  148612             : 
  148613             :      public: 
  148614             :          SgCommonBlock(Sg_File_Info* startOfConstruct ); 
  148615             :          SgCommonBlock(); 
  148616             : 
  148617             :     protected:
  148618             : // Start of memberFunctionString
  148619             : SgCommonBlockObjectPtrList p_block_list;
  148620             :           
  148621             : // End of memberFunctionString
  148622             : 
  148623             :     friend struct Rose::Traits::generated::describe_node_t<SgCommonBlock>;
  148624             :     friend struct Rose::Traits::generated::describe_field_t<SgCommonBlock, SgCommonBlockObjectPtrList,&SgCommonBlock::p_block_list>;
  148625             : 
  148626             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148627             : 
  148628             : 
  148629             :    };
  148630             : #endif
  148631             : 
  148632             : // postdeclarations for SgCommonBlock
  148633             : 
  148634             : /* #line 148635 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148635             : 
  148636             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  148637             : 
  148638             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148639             : 
  148640             : 
  148641             : /* #line 148642 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148642             : 
  148643             : 
  148644             : 
  148645             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148646             : 
  148647             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  148648             : //      This code is automatically generated for each 
  148649             : //      terminal and non-terminal within the defined 
  148650             : //      grammar.  There is a simple way to change the 
  148651             : //      code to fix bugs etc.  See the ROSE README file
  148652             : //      for directions.
  148653             : 
  148654             : // tps: (02/22/2010): Adding DLL export requirements
  148655             : #include "rosedll.h"
  148656             : 
  148657             : // predeclarations for SgTypedefDeclaration
  148658             : 
  148659             : /* #line 148660 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148660             : 
  148661             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  148662             : 
  148663             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  148664             : 
  148665             : #if 1
  148666             : // Class Definition for SgTypedefDeclaration
  148667             : class ROSE_DLL_API SgTypedefDeclaration  : public SgDeclarationStatement
  148668             :    {
  148669             :      public:
  148670             : 
  148671             : 
  148672             : /* #line 148673 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  148673             : 
  148674             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  148675             : // Start of memberFunctionString
  148676             : /* #line 2659 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  148677             : 
  148678             :        // void post_construction_initialization();
  148679             : #if 0
  148680             :           SgStatement *get_next(int&) const;
  148681             : #endif
  148682             : 
  148683             :      protected:
  148684             :           virtual bool replace_child(SgStatement *,SgStatement *,bool extractListFromBasicBlock = false) override;
  148685             : 
  148686             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  148687             :           virtual unsigned int cfgIndexForEnd() const override;
  148688             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  148689             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  148690             : #endif
  148691             : 
  148692             :      public:
  148693             :        // DQ (10/15/2004): added support for qualified names
  148694             :           virtual SgName get_qualified_name() const;
  148695             : 
  148696             :        // RV (1/31/2006): Added this mangler for typedef declarations.
  148697             :           virtual SgName get_mangled_name (void) const override;
  148698             : 
  148699             :       //! Support for where the scope is explicitly required
  148700             :           virtual bool hasExplicitScope() const override;
  148701             : 
  148702             :        // DQ (2/10/2007): Marked as virtual to be consistent
  148703             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  148704             : 
  148705             :       //! Returns the defining declaration if get_typedefBaseTypeContainsDefiningDeclaration() is true, otherwise NULL. Also same as get_declaration().
  148706             :           SgDeclarationStatement* get_baseTypeDefiningDeclaration() const;
  148707             : 
  148708             : #if ALT_FIXUP_COPY
  148709             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  148710             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  148711             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  148712             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  148713             : #else
  148714             :        // DQ (10/14/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  148715             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  148716             : #endif
  148717             : 
  148718             :        // DQ (5/29/2011): Added to support for new qualified name generation
  148719             :       //! This function generates the qualified name prefix to be used with the base type of the typedef declaration.
  148720             :           SgName get_qualified_name_prefix_for_base_type() const;
  148721             : 
  148722             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  148723             :           bool get_requiresGlobalNameQualificationOnType() const;
  148724             :           void set_requiresGlobalNameQualificationOnType(bool requiresGlobalNameQualificationOnType);
  148725             : 
  148726             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  148727             :           int get_name_qualification_length_for_base_type() const;
  148728             :           void set_name_qualification_length_for_base_type(int name_qualification_length_for_base_type);
  148729             : 
  148730             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  148731             :           bool get_type_elaboration_required_for_base_type() const;
  148732             :           void set_type_elaboration_required_for_base_type(bool type_elaboration_required_for_base_type);
  148733             : 
  148734             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  148735             :           bool get_global_qualification_required_for_base_type() const;
  148736             :           void set_global_qualification_required_for_base_type(bool global_qualification_required_for_base_type);
  148737             : 
  148738             :        // DQ (4/10/2019): These are added to support when the the base type is a SgMemberPointer (which van have name qualification in two locations).
  148739             :        // DQ (4/10/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  148740             :           int get_name_qualification_length() const;
  148741             :           void set_name_qualification_length(int name_qualification_length);
  148742             : 
  148743             :        // DQ (4/10/2019): These are added to support when the the base type is a SgMemberPointer (which van have name qualification in two locations).
  148744             :        // DQ (4/10/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  148745             :           bool get_type_elaboration_required() const;
  148746             :           void set_type_elaboration_required(bool type_elaboration_required);
  148747             : 
  148748             :        // DQ (4/10/2019): These are added to support when the the base type is a SgMemberPointer (which van have name qualification in two locations).
  148749             :        // DQ (4/10/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  148750             :           bool get_global_qualification_required() const;
  148751             :           void set_global_qualification_required(bool global_qualification_required);
  148752             : 
  148753             :      private:
  148754             :        // GB (09/25/2007): Added this function as part of the traversal island fix.
  148755             :       //! Internal support for the traversal mechanism.
  148756             :           SgDeclarationStatement *compute_baseTypeDefiningDeclaration() const;
  148757             : 
  148758             : 
  148759             : 
  148760             : // End of memberFunctionString
  148761             : // Start of memberFunctionString
  148762             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  148763             : 
  148764             : // *** COMMON CODE SECTION BEGINS HERE ***
  148765             : 
  148766             :     public:
  148767             : 
  148768             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  148769             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  148770             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  148771             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  148772             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  148773             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  148774             : 
  148775             :       /*! \brief returns a string representing the class name */
  148776             :           virtual std::string class_name() const override;
  148777             : 
  148778             :       /*! \brief returns new style SageIII enum values */
  148779             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  148780             : 
  148781             :       /*! \brief static variant value */
  148782             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  148783             :        // static const VariantT static_variant = V_SgTypedefDeclaration;
  148784             :           enum { static_variant = V_SgTypedefDeclaration };
  148785             : 
  148786             :        /* the generated cast function */
  148787             :       /*! \brief Casts pointer from base class to derived class */
  148788             :           ROSE_DLL_API friend       SgTypedefDeclaration* isSgTypedefDeclaration(       SgNode * s );
  148789             : 
  148790             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  148791             :           ROSE_DLL_API friend const SgTypedefDeclaration* isSgTypedefDeclaration( const SgNode * s );
  148792             : 
  148793             :      // ******************************************
  148794             :      // * Memory Pool / New / Delete
  148795             :      // ******************************************
  148796             : 
  148797             :      public:
  148798             :           /// \private
  148799             :           static const unsigned pool_size; //
  148800             :           /// \private
  148801             :           static std::vector<unsigned char *> pools; //
  148802             :           /// \private
  148803             :           static SgTypedefDeclaration * next_node; // 
  148804             : 
  148805             :           /// \private
  148806             :           static unsigned long initializeStorageClassArray(SgTypedefDeclarationStorageClass *); //
  148807             : 
  148808             :           /// \private
  148809             :           static void clearMemoryPool(); //
  148810             :           static void deleteMemoryPool(); //
  148811             : 
  148812             :           /// \private
  148813             :           static void extendMemoryPoolForFileIO(); //
  148814             : 
  148815             :           /// \private
  148816             :           static SgTypedefDeclaration * getPointerFromGlobalIndex(unsigned long); //
  148817             :           /// \private
  148818             :           static SgTypedefDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  148819             : 
  148820             :           /// \private
  148821             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  148822             :           /// \private
  148823             :           static void resetValidFreepointers(); //
  148824             :           /// \private
  148825             :           static unsigned long getNumberOfLastValidPointer(); //
  148826             : 
  148827             : 
  148828             : #if defined(INLINE_FUNCTIONS)
  148829             :       /*! \brief returns pointer to newly allocated IR node */
  148830             :           inline void *operator new (size_t size);
  148831             : #else
  148832             :       /*! \brief returns pointer to newly allocated IR node */
  148833             :           void *operator new (size_t size);
  148834             : #endif
  148835             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  148836             :           void operator delete (void* pointer, size_t size);
  148837             : 
  148838             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  148839        3438 :           void operator delete (void* pointer)
  148840             :              {
  148841             :             // This is the generated delete operator...
  148842        3438 :                SgTypedefDeclaration::operator delete (pointer,sizeof(SgTypedefDeclaration));
  148843             :              }
  148844             : 
  148845             :       /*! \brief Returns the total number of IR nodes of this type */
  148846             :           static size_t numberOfNodes();
  148847             : 
  148848             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  148849             :           static size_t memoryUsage();
  148850             : 
  148851             :       // End of scope which started in IR nodes specific code 
  148852             :       /* */
  148853             : 
  148854             :       /* name Internal Functions
  148855             :           \brief Internal functions ... incomplete-documentation
  148856             : 
  148857             :           These functions have been made public as part of the design, but they are suggested for internal use 
  148858             :           or by particularly knowledgeable users for specialized tools or applications.
  148859             : 
  148860             :           \internal We could not make these private because they are required by user for special purposes. And 
  148861             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  148862             :          
  148863             :        */
  148864             : 
  148865             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  148866             :        // overridden in every class by *generated* implementation
  148867             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  148868             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  148869             :        // MS: 06/28/02 container of names of variables or container indices 
  148870             :        // used used in the traversal to access AST successor nodes
  148871             :        // overridden in every class by *generated* implementation
  148872             :       /*! \brief container of names of variables or container indices used used in the traversal
  148873             :           to access AST successor nodes overridden in every class by *generated* implementation */
  148874             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  148875             : 
  148876             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  148877             :        // than all the vector copies. The implementation for these functions is generated for each class.
  148878             :       /*! \brief return number of children in the traversal successor list */
  148879             :           virtual size_t get_numberOfTraversalSuccessors() override;
  148880             :       /*! \brief index-based access to traversal successors by index number */
  148881             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  148882             :       /*! \brief index-based access to traversal successors by child node */
  148883             :           virtual size_t get_childIndex(SgNode *child) override;
  148884             : 
  148885             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  148886             :        // MS: 08/16/2002 method for generating RTI information
  148887             :       /*! \brief return C++ Runtime-Time-Information */
  148888             :           virtual RTIReturnType roseRTI() override;
  148889             : #endif
  148890             :       /* */
  148891             : 
  148892             : 
  148893             : 
  148894             :       /* name Deprecated Functions
  148895             :           \brief Deprecated functions ... incomplete-documentation
  148896             : 
  148897             :           These functions have been deprecated from use.
  148898             :        */
  148899             :       /* */
  148900             : 
  148901             :       /*! returns a C style string (char*) representing the class name */
  148902             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  148903             : 
  148904             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  148905             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  148906             : #if 0
  148907             :       /*! returns old style Sage II enum values */
  148908             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  148909             :       /*! returns old style Sage II enum values */
  148910             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  148911             : #endif
  148912             :       /* */
  148913             : 
  148914             : 
  148915             : 
  148916             : 
  148917             :      public:
  148918             :       /* name Traversal Support Functions
  148919             :           \brief Traversal support functions ... incomplete-documentation
  148920             : 
  148921             :           These functions have been made public as part of the design, but they are suggested for internal use 
  148922             :           or by particularly knowledgable users for specialized tools or applications.
  148923             :        */
  148924             :       /* */
  148925             : 
  148926             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  148927             :        // (inferior to ROSE traversal mechanism, experimental).
  148928             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  148929             :        */
  148930             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  148931             : 
  148932             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  148933             :       /*! \brief support for the classic visitor pattern done in GoF */
  148934             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  148935             : 
  148936             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  148937             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  148938             :        */
  148939             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  148940             : 
  148941             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  148942             :        */
  148943             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  148944             : 
  148945             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  148946             :        // This traversal helps support internal tools that call static member functions.
  148947             :        // note: this function operates on the memory pools.
  148948             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  148949             :        */
  148950             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  148951             :       /* */
  148952             : 
  148953             : 
  148954             :      public:
  148955             :       /* name Memory Allocation Functions
  148956             :           \brief Memory allocations functions ... incomplete-documentation
  148957             : 
  148958             :           These functions have been made public as part of the design, but they are suggested for internal use 
  148959             :           or by particularly knowledgable users for specialized tools or applications.
  148960             :        */
  148961             :       /* */
  148962             : 
  148963             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  148964             : 
  148965             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  148966             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  148967             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  148968             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  148969             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  148970             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  148971             :           being used with the AST File I/O mechanism.
  148972             :        */
  148973             :           virtual bool isInMemoryPool() override;
  148974             : 
  148975             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  148976             : 
  148977             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  148978             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  148979             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  148980             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  148981             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  148982             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  148983             :           being used with the AST File I/O mechanism.
  148984             :        */
  148985             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  148986             : 
  148987             :       // DQ (4/30/2006): Modified to be a const function.
  148988             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  148989             : 
  148990             :           This functions is part of general support for many possible tools to operate 
  148991             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  148992             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  148993             :           less than the set of pointers used by the AST file I/O. This is part of
  148994             :           work implemented by Andreas, and support tools such as the AST graph generation.
  148995             : 
  148996             :           \warning This function can return unexpected data members and thus the 
  148997             :                    order and the number of elements is unpredicable and subject 
  148998             :                    to change.
  148999             : 
  149000             :           \returns STL vector of pairs of SgNode* and strings
  149001             :        */
  149002             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  149003             : 
  149004             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  149005             : 
  149006             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  149007             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  149008             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  149009             : 
  149010             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  149011             :                    and subject to change.
  149012             :        */
  149013             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  149014             : 
  149015             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  149016             : 
  149017             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  149018             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  149019             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  149020             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  149021             : 
  149022             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  149023             : 
  149024             :           \returns long
  149025             :        */
  149026             :           virtual long getChildIndex( SgNode* childNode ) const override;
  149027             : 
  149028             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  149029             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  149030             :       /* \brief Constructor for use by AST File I/O Mechanism
  149031             : 
  149032             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  149033             :           which obtained via fast binary file I/O from disk.
  149034             :        */
  149035             :        // SgTypedefDeclaration( SgTypedefDeclarationStorageClass& source );
  149036             : 
  149037             : 
  149038             : 
  149039             : 
  149040             : 
  149041             :  // JH (10/24/2005): methods added to support the ast file IO
  149042             :     private:
  149043             : 
  149044             :       /* name AST Memory Allocation Support Functions
  149045             :           \brief Memory allocations support....
  149046             : 
  149047             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  149048             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  149049             :           and support the AST File I/O Mechanism.
  149050             :        */
  149051             :       /* */
  149052             : 
  149053             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  149054             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  149055             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  149056             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  149057             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  149058             :           a correspinding one in the AST_FILE_IO class!
  149059             :        */
  149060             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  149061             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  149062             :       /* \brief Typedef used for low level memory access.
  149063             :        */
  149064             :        // typedef unsigned char* TestType;
  149065             : 
  149066             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  149067             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  149068             :       /* \brief Typedef used to hold memory addresses as values.
  149069             :        */
  149070             :        // typedef unsigned long  AddressType;
  149071             : 
  149072             : 
  149073             : 
  149074             :        // necessary, to have direct access to the p_freepointer and the private methods !
  149075             :       /*! \brief friend class declaration to support AST File I/O */
  149076             :           friend class AST_FILE_IO;
  149077             : 
  149078             :       /*! \brief friend class declaration to support AST File I/O */
  149079             :           friend class SgTypedefDeclarationStorageClass;
  149080             : 
  149081             :       /*! \brief friend class declaration to support AST File I/O */
  149082             :           friend class AstSpecificDataManagingClass;
  149083             : 
  149084             :       /*! \brief friend class declaration to support AST File I/O */
  149085             :           friend class AstSpecificDataManagingClassStorageClass;
  149086             :     public:
  149087             :       /*! \brief IR node constructor to support AST File I/O */
  149088             :           SgTypedefDeclaration( const SgTypedefDeclarationStorageClass& source );
  149089             : 
  149090             :  // private: // JJW hack
  149091             :        /*
  149092             :           name AST Memory Allocation Support Variables
  149093             :           Memory allocations support variables 
  149094             : 
  149095             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  149096             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  149097             :           and support the AST File I/O Mechanism.
  149098             :        */
  149099             :       /* */
  149100             : 
  149101             :     public:
  149102             : 
  149103             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  149104             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  149105             :       // virtual SgNode* addRegExpAttribute();
  149106             :       /*! \brief Support for AST matching using regular expression.
  149107             : 
  149108             :           This support is incomplete and the subject of current research to define 
  149109             :           RegEx trees to support inexact matching.
  149110             :        */
  149111             :           SgTypedefDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  149112             : 
  149113             : // *** COMMON CODE SECTION ENDS HERE ***
  149114             : 
  149115             : 
  149116             : // End of memberFunctionString
  149117             : // Start of memberFunctionString
  149118             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  149119             : 
  149120             :      // the generated cast function
  149121             :      // friend ROSE_DLL_API SgTypedefDeclaration* isSgTypedefDeclaration ( SgNode* s );
  149122             : 
  149123             :           typedef SgDeclarationStatement base_node_type;
  149124             : 
  149125             : 
  149126             : // End of memberFunctionString
  149127             : // Start of memberFunctionString
  149128             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  149129             : 
  149130             :           void post_construction_initialization() override;
  149131             : 
  149132             : 
  149133             : // End of memberFunctionString
  149134             : 
  149135             :      public: 
  149136             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  149137             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  149138             : 
  149139             :      public: 
  149140             :          SgType* get_base_type() const;
  149141             :          void set_base_type(SgType* base_type);
  149142             : 
  149143             :      public: 
  149144             :          SgTypedefType* get_type() const /* (getDataAccessFunctionPrototypeString) */;
  149145             :          void set_type(SgTypedefType* type) /* (getDataAccessFunctionPrototypeString) */;
  149146             : 
  149147             :      public: 
  149148             :          SgDeclarationStatement* get_declaration() const;
  149149             :          void set_declaration(SgDeclarationStatement* declaration);
  149150             : 
  149151             :      public: 
  149152             :          SgSymbol* get_parent_scope() const;
  149153             :          void set_parent_scope(SgSymbol* parent_scope);
  149154             : 
  149155             :      public: 
  149156             :          bool get_typedefBaseTypeContainsDefiningDeclaration() const;
  149157             :          void set_typedefBaseTypeContainsDefiningDeclaration(bool typedefBaseTypeContainsDefiningDeclaration);
  149158             : 
  149159             :      public: 
  149160             :          SgScopeStatement* get_scope() const override /* (getDataAccessFunctionPrototypeString) */;
  149161             :          void set_scope(SgScopeStatement* scope) override /* (getDataAccessFunctionPrototypeString) */;
  149162             : 
  149163             : 
  149164             : 
  149165             : 
  149166             : 
  149167             :      public: 
  149168             :          bool get_isAutonomousDeclaration() const;
  149169             :          void set_isAutonomousDeclaration(bool isAutonomousDeclaration);
  149170             : 
  149171             :      public: 
  149172             :          bool get_isAssociatedWithDeclarationList() const;
  149173             :          void set_isAssociatedWithDeclarationList(bool isAssociatedWithDeclarationList);
  149174             : 
  149175             :      public: 
  149176             :          bool get_isFirstDeclarationOfDeclarationList() const;
  149177             :          void set_isFirstDeclarationOfDeclarationList(bool isFirstDeclarationOfDeclarationList);
  149178             : 
  149179             : 
  149180             : 
  149181             : 
  149182             : 
  149183             :      public: 
  149184             :          virtual ~SgTypedefDeclaration();
  149185             : 
  149186             : 
  149187             :      public: 
  149188             :          SgTypedefDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgType* base_type = NULL, SgTypedefType* type = NULL, SgDeclarationStatement* declaration = NULL, SgSymbol* parent_scope = NULL); 
  149189             :          SgTypedefDeclaration(SgName name, SgType* base_type, SgTypedefType* type, SgDeclarationStatement* declaration, SgSymbol* parent_scope); 
  149190             : 
  149191             :     protected:
  149192             : // Start of memberFunctionString
  149193             : SgName p_name;
  149194             :           
  149195             : // End of memberFunctionString
  149196             : // Start of memberFunctionString
  149197             : SgType* p_base_type;
  149198             :           
  149199             : // End of memberFunctionString
  149200             : // Start of memberFunctionString
  149201             : SgTypedefType* p_type;
  149202             :           
  149203             : // End of memberFunctionString
  149204             : // Start of memberFunctionString
  149205             : SgDeclarationStatement* p_declaration;
  149206             :           
  149207             : // End of memberFunctionString
  149208             : // Start of memberFunctionString
  149209             : SgSymbol* p_parent_scope;
  149210             :           
  149211             : // End of memberFunctionString
  149212             : // Start of memberFunctionString
  149213             : bool p_typedefBaseTypeContainsDefiningDeclaration;
  149214             :           
  149215             : // End of memberFunctionString
  149216             : // Start of memberFunctionString
  149217             : SgScopeStatement* p_scope;
  149218             :           
  149219             : // End of memberFunctionString
  149220             : // Start of memberFunctionString
  149221             : bool p_requiresGlobalNameQualificationOnType;
  149222             :           
  149223             : // End of memberFunctionString
  149224             : // Start of memberFunctionString
  149225             : int p_name_qualification_length_for_base_type;
  149226             :           
  149227             : // End of memberFunctionString
  149228             : // Start of memberFunctionString
  149229             : bool p_type_elaboration_required_for_base_type;
  149230             :           
  149231             : // End of memberFunctionString
  149232             : // Start of memberFunctionString
  149233             : bool p_global_qualification_required_for_base_type;
  149234             :           
  149235             : // End of memberFunctionString
  149236             : // Start of memberFunctionString
  149237             : bool p_isAutonomousDeclaration;
  149238             :           
  149239             : // End of memberFunctionString
  149240             : // Start of memberFunctionString
  149241             : bool p_isAssociatedWithDeclarationList;
  149242             :           
  149243             : // End of memberFunctionString
  149244             : // Start of memberFunctionString
  149245             : bool p_isFirstDeclarationOfDeclarationList;
  149246             :           
  149247             : // End of memberFunctionString
  149248             : // Start of memberFunctionString
  149249             : int p_name_qualification_length;
  149250             :           
  149251             : // End of memberFunctionString
  149252             : // Start of memberFunctionString
  149253             : bool p_type_elaboration_required;
  149254             :           
  149255             : // End of memberFunctionString
  149256             : // Start of memberFunctionString
  149257             : bool p_global_qualification_required;
  149258             :           
  149259             : // End of memberFunctionString
  149260             : 
  149261             :     friend struct Rose::Traits::generated::describe_node_t<SgTypedefDeclaration>;
  149262             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, SgName,&SgTypedefDeclaration::p_name>;
  149263             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, SgType*,&SgTypedefDeclaration::p_base_type>;
  149264             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, SgTypedefType*,&SgTypedefDeclaration::p_type>;
  149265             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, SgDeclarationStatement*,&SgTypedefDeclaration::p_declaration>;
  149266             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, SgSymbol*,&SgTypedefDeclaration::p_parent_scope>;
  149267             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_typedefBaseTypeContainsDefiningDeclaration>;
  149268             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, SgScopeStatement*,&SgTypedefDeclaration::p_scope>;
  149269             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_requiresGlobalNameQualificationOnType>;
  149270             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, int,&SgTypedefDeclaration::p_name_qualification_length_for_base_type>;
  149271             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_type_elaboration_required_for_base_type>;
  149272             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_global_qualification_required_for_base_type>;
  149273             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_isAutonomousDeclaration>;
  149274             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_isAssociatedWithDeclarationList>;
  149275             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_isFirstDeclarationOfDeclarationList>;
  149276             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, int,&SgTypedefDeclaration::p_name_qualification_length>;
  149277             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_type_elaboration_required>;
  149278             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefDeclaration, bool,&SgTypedefDeclaration::p_global_qualification_required>;
  149279             : 
  149280             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149281             : 
  149282             : 
  149283             :    };
  149284             : #endif
  149285             : 
  149286             : // postdeclarations for SgTypedefDeclaration
  149287             : 
  149288             : /* #line 149289 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149289             : 
  149290             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  149291             : 
  149292             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149293             : 
  149294             : 
  149295             : /* #line 149296 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149296             : 
  149297             : 
  149298             : 
  149299             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149300             : 
  149301             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  149302             : //      This code is automatically generated for each 
  149303             : //      terminal and non-terminal within the defined 
  149304             : //      grammar.  There is a simple way to change the 
  149305             : //      code to fix bugs etc.  See the ROSE README file
  149306             : //      for directions.
  149307             : 
  149308             : // tps: (02/22/2010): Adding DLL export requirements
  149309             : #include "rosedll.h"
  149310             : 
  149311             : // predeclarations for SgTemplateTypedefDeclaration
  149312             : 
  149313             : /* #line 149314 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149314             : 
  149315             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  149316             : 
  149317             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149318             : 
  149319             : #if 1
  149320             : // Class Definition for SgTemplateTypedefDeclaration
  149321             : class ROSE_DLL_API SgTemplateTypedefDeclaration  : public SgTypedefDeclaration
  149322             :    {
  149323             :      public:
  149324             : 
  149325             : 
  149326             : /* #line 149327 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149327             : 
  149328             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  149329             : // Start of memberFunctionString
  149330             : /* #line 2992 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  149331             : 
  149332             : 
  149333             :           typedef SgTemplateInstantiationTypedefDeclaration instantiation_kind_t;
  149334             : 
  149335             :        // DQ (12/28/2011): We need a constructor similar to the base class.
  149336             :        // SgTemplateTypedefDeclaration ( const SgName& var_name, SgType *type, SgInitializer *initializer );
  149337             : // BH (11/13/2015) on windows this caused incosistent defines of this
  149338             : // so that it was not defined in the .h but used in the cxx file
  149339             :      private:
  149340             :        // DQ (12/29/2011): This is added to support backward compatability.
  149341             :           SgDeclarationStatement *compute_baseTypeDefiningDeclaration() const;
  149342             : 
  149343             :        // DQ (2/25/2018): This appears to be built as a function prototype by default, so I think we don't need this here (redundant).
  149344             :        // DQ (2/25/2018): Added a specific version of the post_construction_initialization() function
  149345             :        // to allow it to be run after the SgTypedefDeclaration::post_construction_initialization() function.
  149346             :        // void post_construction_initialization();
  149347             : 
  149348             : 
  149349             : 
  149350             : // End of memberFunctionString
  149351             : // Start of memberFunctionString
  149352             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  149353             : 
  149354             : // *** COMMON CODE SECTION BEGINS HERE ***
  149355             : 
  149356             :     public:
  149357             : 
  149358             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  149359             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  149360             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  149361             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  149362             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  149363             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  149364             : 
  149365             :       /*! \brief returns a string representing the class name */
  149366             :           virtual std::string class_name() const override;
  149367             : 
  149368             :       /*! \brief returns new style SageIII enum values */
  149369             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  149370             : 
  149371             :       /*! \brief static variant value */
  149372             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  149373             :        // static const VariantT static_variant = V_SgTemplateTypedefDeclaration;
  149374             :           enum { static_variant = V_SgTemplateTypedefDeclaration };
  149375             : 
  149376             :        /* the generated cast function */
  149377             :       /*! \brief Casts pointer from base class to derived class */
  149378             :           ROSE_DLL_API friend       SgTemplateTypedefDeclaration* isSgTemplateTypedefDeclaration(       SgNode * s );
  149379             : 
  149380             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  149381             :           ROSE_DLL_API friend const SgTemplateTypedefDeclaration* isSgTemplateTypedefDeclaration( const SgNode * s );
  149382             : 
  149383             :      // ******************************************
  149384             :      // * Memory Pool / New / Delete
  149385             :      // ******************************************
  149386             : 
  149387             :      public:
  149388             :           /// \private
  149389             :           static const unsigned pool_size; //
  149390             :           /// \private
  149391             :           static std::vector<unsigned char *> pools; //
  149392             :           /// \private
  149393             :           static SgTemplateTypedefDeclaration * next_node; // 
  149394             : 
  149395             :           /// \private
  149396             :           static unsigned long initializeStorageClassArray(SgTemplateTypedefDeclarationStorageClass *); //
  149397             : 
  149398             :           /// \private
  149399             :           static void clearMemoryPool(); //
  149400             :           static void deleteMemoryPool(); //
  149401             : 
  149402             :           /// \private
  149403             :           static void extendMemoryPoolForFileIO(); //
  149404             : 
  149405             :           /// \private
  149406             :           static SgTemplateTypedefDeclaration * getPointerFromGlobalIndex(unsigned long); //
  149407             :           /// \private
  149408             :           static SgTemplateTypedefDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  149409             : 
  149410             :           /// \private
  149411             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  149412             :           /// \private
  149413             :           static void resetValidFreepointers(); //
  149414             :           /// \private
  149415             :           static unsigned long getNumberOfLastValidPointer(); //
  149416             : 
  149417             : 
  149418             : #if defined(INLINE_FUNCTIONS)
  149419             :       /*! \brief returns pointer to newly allocated IR node */
  149420             :           inline void *operator new (size_t size);
  149421             : #else
  149422             :       /*! \brief returns pointer to newly allocated IR node */
  149423             :           void *operator new (size_t size);
  149424             : #endif
  149425             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  149426             :           void operator delete (void* pointer, size_t size);
  149427             : 
  149428             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  149429         190 :           void operator delete (void* pointer)
  149430             :              {
  149431             :             // This is the generated delete operator...
  149432         190 :                SgTemplateTypedefDeclaration::operator delete (pointer,sizeof(SgTemplateTypedefDeclaration));
  149433             :              }
  149434             : 
  149435             :       /*! \brief Returns the total number of IR nodes of this type */
  149436             :           static size_t numberOfNodes();
  149437             : 
  149438             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  149439             :           static size_t memoryUsage();
  149440             : 
  149441             :       // End of scope which started in IR nodes specific code 
  149442             :       /* */
  149443             : 
  149444             :       /* name Internal Functions
  149445             :           \brief Internal functions ... incomplete-documentation
  149446             : 
  149447             :           These functions have been made public as part of the design, but they are suggested for internal use 
  149448             :           or by particularly knowledgeable users for specialized tools or applications.
  149449             : 
  149450             :           \internal We could not make these private because they are required by user for special purposes. And 
  149451             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  149452             :          
  149453             :        */
  149454             : 
  149455             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  149456             :        // overridden in every class by *generated* implementation
  149457             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  149458             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  149459             :        // MS: 06/28/02 container of names of variables or container indices 
  149460             :        // used used in the traversal to access AST successor nodes
  149461             :        // overridden in every class by *generated* implementation
  149462             :       /*! \brief container of names of variables or container indices used used in the traversal
  149463             :           to access AST successor nodes overridden in every class by *generated* implementation */
  149464             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  149465             : 
  149466             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  149467             :        // than all the vector copies. The implementation for these functions is generated for each class.
  149468             :       /*! \brief return number of children in the traversal successor list */
  149469             :           virtual size_t get_numberOfTraversalSuccessors() override;
  149470             :       /*! \brief index-based access to traversal successors by index number */
  149471             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  149472             :       /*! \brief index-based access to traversal successors by child node */
  149473             :           virtual size_t get_childIndex(SgNode *child) override;
  149474             : 
  149475             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  149476             :        // MS: 08/16/2002 method for generating RTI information
  149477             :       /*! \brief return C++ Runtime-Time-Information */
  149478             :           virtual RTIReturnType roseRTI() override;
  149479             : #endif
  149480             :       /* */
  149481             : 
  149482             : 
  149483             : 
  149484             :       /* name Deprecated Functions
  149485             :           \brief Deprecated functions ... incomplete-documentation
  149486             : 
  149487             :           These functions have been deprecated from use.
  149488             :        */
  149489             :       /* */
  149490             : 
  149491             :       /*! returns a C style string (char*) representing the class name */
  149492             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  149493             : 
  149494             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  149495             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  149496             : #if 0
  149497             :       /*! returns old style Sage II enum values */
  149498             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  149499             :       /*! returns old style Sage II enum values */
  149500             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  149501             : #endif
  149502             :       /* */
  149503             : 
  149504             : 
  149505             : 
  149506             : 
  149507             :      public:
  149508             :       /* name Traversal Support Functions
  149509             :           \brief Traversal support functions ... incomplete-documentation
  149510             : 
  149511             :           These functions have been made public as part of the design, but they are suggested for internal use 
  149512             :           or by particularly knowledgable users for specialized tools or applications.
  149513             :        */
  149514             :       /* */
  149515             : 
  149516             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  149517             :        // (inferior to ROSE traversal mechanism, experimental).
  149518             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  149519             :        */
  149520             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  149521             : 
  149522             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  149523             :       /*! \brief support for the classic visitor pattern done in GoF */
  149524             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  149525             : 
  149526             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  149527             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  149528             :        */
  149529             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  149530             : 
  149531             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  149532             :        */
  149533             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  149534             : 
  149535             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  149536             :        // This traversal helps support internal tools that call static member functions.
  149537             :        // note: this function operates on the memory pools.
  149538             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  149539             :        */
  149540             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  149541             :       /* */
  149542             : 
  149543             : 
  149544             :      public:
  149545             :       /* name Memory Allocation Functions
  149546             :           \brief Memory allocations functions ... incomplete-documentation
  149547             : 
  149548             :           These functions have been made public as part of the design, but they are suggested for internal use 
  149549             :           or by particularly knowledgable users for specialized tools or applications.
  149550             :        */
  149551             :       /* */
  149552             : 
  149553             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  149554             : 
  149555             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  149556             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  149557             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  149558             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  149559             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  149560             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  149561             :           being used with the AST File I/O mechanism.
  149562             :        */
  149563             :           virtual bool isInMemoryPool() override;
  149564             : 
  149565             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  149566             : 
  149567             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  149568             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  149569             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  149570             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  149571             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  149572             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  149573             :           being used with the AST File I/O mechanism.
  149574             :        */
  149575             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  149576             : 
  149577             :       // DQ (4/30/2006): Modified to be a const function.
  149578             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  149579             : 
  149580             :           This functions is part of general support for many possible tools to operate 
  149581             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  149582             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  149583             :           less than the set of pointers used by the AST file I/O. This is part of
  149584             :           work implemented by Andreas, and support tools such as the AST graph generation.
  149585             : 
  149586             :           \warning This function can return unexpected data members and thus the 
  149587             :                    order and the number of elements is unpredicable and subject 
  149588             :                    to change.
  149589             : 
  149590             :           \returns STL vector of pairs of SgNode* and strings
  149591             :        */
  149592             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  149593             : 
  149594             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  149595             : 
  149596             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  149597             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  149598             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  149599             : 
  149600             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  149601             :                    and subject to change.
  149602             :        */
  149603             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  149604             : 
  149605             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  149606             : 
  149607             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  149608             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  149609             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  149610             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  149611             : 
  149612             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  149613             : 
  149614             :           \returns long
  149615             :        */
  149616             :           virtual long getChildIndex( SgNode* childNode ) const override;
  149617             : 
  149618             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  149619             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  149620             :       /* \brief Constructor for use by AST File I/O Mechanism
  149621             : 
  149622             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  149623             :           which obtained via fast binary file I/O from disk.
  149624             :        */
  149625             :        // SgTemplateTypedefDeclaration( SgTemplateTypedefDeclarationStorageClass& source );
  149626             : 
  149627             : 
  149628             : 
  149629             : 
  149630             : 
  149631             :  // JH (10/24/2005): methods added to support the ast file IO
  149632             :     private:
  149633             : 
  149634             :       /* name AST Memory Allocation Support Functions
  149635             :           \brief Memory allocations support....
  149636             : 
  149637             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  149638             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  149639             :           and support the AST File I/O Mechanism.
  149640             :        */
  149641             :       /* */
  149642             : 
  149643             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  149644             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  149645             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  149646             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  149647             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  149648             :           a correspinding one in the AST_FILE_IO class!
  149649             :        */
  149650             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  149651             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  149652             :       /* \brief Typedef used for low level memory access.
  149653             :        */
  149654             :        // typedef unsigned char* TestType;
  149655             : 
  149656             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  149657             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  149658             :       /* \brief Typedef used to hold memory addresses as values.
  149659             :        */
  149660             :        // typedef unsigned long  AddressType;
  149661             : 
  149662             : 
  149663             : 
  149664             :        // necessary, to have direct access to the p_freepointer and the private methods !
  149665             :       /*! \brief friend class declaration to support AST File I/O */
  149666             :           friend class AST_FILE_IO;
  149667             : 
  149668             :       /*! \brief friend class declaration to support AST File I/O */
  149669             :           friend class SgTemplateTypedefDeclarationStorageClass;
  149670             : 
  149671             :       /*! \brief friend class declaration to support AST File I/O */
  149672             :           friend class AstSpecificDataManagingClass;
  149673             : 
  149674             :       /*! \brief friend class declaration to support AST File I/O */
  149675             :           friend class AstSpecificDataManagingClassStorageClass;
  149676             :     public:
  149677             :       /*! \brief IR node constructor to support AST File I/O */
  149678             :           SgTemplateTypedefDeclaration( const SgTemplateTypedefDeclarationStorageClass& source );
  149679             : 
  149680             :  // private: // JJW hack
  149681             :        /*
  149682             :           name AST Memory Allocation Support Variables
  149683             :           Memory allocations support variables 
  149684             : 
  149685             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  149686             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  149687             :           and support the AST File I/O Mechanism.
  149688             :        */
  149689             :       /* */
  149690             : 
  149691             :     public:
  149692             : 
  149693             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  149694             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  149695             :       // virtual SgNode* addRegExpAttribute();
  149696             :       /*! \brief Support for AST matching using regular expression.
  149697             : 
  149698             :           This support is incomplete and the subject of current research to define 
  149699             :           RegEx trees to support inexact matching.
  149700             :        */
  149701             :           SgTemplateTypedefDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  149702             : 
  149703             : // *** COMMON CODE SECTION ENDS HERE ***
  149704             : 
  149705             : 
  149706             : // End of memberFunctionString
  149707             : // Start of memberFunctionString
  149708             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  149709             : 
  149710             :      // the generated cast function
  149711             :      // friend ROSE_DLL_API SgTemplateTypedefDeclaration* isSgTemplateTypedefDeclaration ( SgNode* s );
  149712             : 
  149713             :           typedef SgTypedefDeclaration base_node_type;
  149714             : 
  149715             : 
  149716             : // End of memberFunctionString
  149717             : // Start of memberFunctionString
  149718             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  149719             : 
  149720             :           void post_construction_initialization() override;
  149721             : 
  149722             : 
  149723             : // End of memberFunctionString
  149724             : 
  149725             :      public: 
  149726             :          const SgTemplateParameterPtrList&  get_templateParameters() const;
  149727             :          SgTemplateParameterPtrList& get_templateParameters(); 
  149728             : 
  149729             :      public: 
  149730             :          const SgTemplateArgumentPtrList&  get_templateSpecializationArguments() const;
  149731             :          SgTemplateArgumentPtrList& get_templateSpecializationArguments(); 
  149732             : 
  149733             :      public: 
  149734             :          SgName get_string() const;
  149735             :          void set_string(SgName string);
  149736             : 
  149737             :      public: 
  149738             :          SgDeclarationScope* get_nonreal_decl_scope() const;
  149739             :          void set_nonreal_decl_scope(SgDeclarationScope* nonreal_decl_scope);
  149740             : 
  149741             : 
  149742             :      public: 
  149743             :          virtual ~SgTemplateTypedefDeclaration();
  149744             : 
  149745             : 
  149746             :      public: 
  149747             :          SgTemplateTypedefDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgType* base_type = NULL, SgTypedefType* type = NULL, SgDeclarationStatement* declaration = NULL, SgSymbol* parent_scope = NULL); 
  149748             :          SgTemplateTypedefDeclaration(SgName name, SgType* base_type, SgTypedefType* type, SgDeclarationStatement* declaration, SgSymbol* parent_scope); 
  149749             : 
  149750             :     protected:
  149751             : // Start of memberFunctionString
  149752             : SgTemplateParameterPtrList p_templateParameters;
  149753             :           
  149754             : // End of memberFunctionString
  149755             : // Start of memberFunctionString
  149756             : SgTemplateArgumentPtrList p_templateSpecializationArguments;
  149757             :           
  149758             : // End of memberFunctionString
  149759             : // Start of memberFunctionString
  149760             : SgName p_string;
  149761             :           
  149762             : // End of memberFunctionString
  149763             : // Start of memberFunctionString
  149764             : SgDeclarationScope* p_nonreal_decl_scope;
  149765             :           
  149766             : // End of memberFunctionString
  149767             : 
  149768             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateTypedefDeclaration>;
  149769             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateTypedefDeclaration, SgTemplateParameterPtrList,&SgTemplateTypedefDeclaration::p_templateParameters>;
  149770             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateTypedefDeclaration, SgTemplateArgumentPtrList,&SgTemplateTypedefDeclaration::p_templateSpecializationArguments>;
  149771             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateTypedefDeclaration, SgName,&SgTemplateTypedefDeclaration::p_string>;
  149772             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateTypedefDeclaration, SgDeclarationScope*,&SgTemplateTypedefDeclaration::p_nonreal_decl_scope>;
  149773             : 
  149774             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149775             : 
  149776             : 
  149777             :    };
  149778             : #endif
  149779             : 
  149780             : // postdeclarations for SgTemplateTypedefDeclaration
  149781             : 
  149782             : /* #line 149783 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149783             : 
  149784             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  149785             : 
  149786             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149787             : 
  149788             : 
  149789             : /* #line 149790 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149790             : 
  149791             : 
  149792             : 
  149793             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149794             : 
  149795             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  149796             : //      This code is automatically generated for each 
  149797             : //      terminal and non-terminal within the defined 
  149798             : //      grammar.  There is a simple way to change the 
  149799             : //      code to fix bugs etc.  See the ROSE README file
  149800             : //      for directions.
  149801             : 
  149802             : // tps: (02/22/2010): Adding DLL export requirements
  149803             : #include "rosedll.h"
  149804             : 
  149805             : // predeclarations for SgTemplateInstantiationTypedefDeclaration
  149806             : 
  149807             : /* #line 149808 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149808             : 
  149809             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  149810             : 
  149811             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  149812             : 
  149813             : #if 1
  149814             : // Class Definition for SgTemplateInstantiationTypedefDeclaration
  149815             : class ROSE_DLL_API SgTemplateInstantiationTypedefDeclaration  : public SgTypedefDeclaration
  149816             :    {
  149817             :      public:
  149818             : 
  149819             : 
  149820             : /* #line 149821 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  149821             : 
  149822             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  149823             : // Start of memberFunctionString
  149824             : /* #line 3012 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  149825             : 
  149826             : 
  149827             :           typedef SgTemplateTypedefDeclaration template_kind_t;
  149828             : 
  149829             :        // DQ (2/26/2018): get_name assembles the full template name with arguments (e.g. "ABC<int>")
  149830             :           void resetTemplateName();
  149831             : 
  149832             :        // DQ (2/28/2018): Added function
  149833             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  149834             : 
  149835             : 
  149836             : 
  149837             : // End of memberFunctionString
  149838             : // Start of memberFunctionString
  149839             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  149840             : 
  149841             : // *** COMMON CODE SECTION BEGINS HERE ***
  149842             : 
  149843             :     public:
  149844             : 
  149845             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  149846             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  149847             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  149848             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  149849             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  149850             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  149851             : 
  149852             :       /*! \brief returns a string representing the class name */
  149853             :           virtual std::string class_name() const override;
  149854             : 
  149855             :       /*! \brief returns new style SageIII enum values */
  149856             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  149857             : 
  149858             :       /*! \brief static variant value */
  149859             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  149860             :        // static const VariantT static_variant = V_SgTemplateInstantiationTypedefDeclaration;
  149861             :           enum { static_variant = V_SgTemplateInstantiationTypedefDeclaration };
  149862             : 
  149863             :        /* the generated cast function */
  149864             :       /*! \brief Casts pointer from base class to derived class */
  149865             :           ROSE_DLL_API friend       SgTemplateInstantiationTypedefDeclaration* isSgTemplateInstantiationTypedefDeclaration(       SgNode * s );
  149866             : 
  149867             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  149868             :           ROSE_DLL_API friend const SgTemplateInstantiationTypedefDeclaration* isSgTemplateInstantiationTypedefDeclaration( const SgNode * s );
  149869             : 
  149870             :      // ******************************************
  149871             :      // * Memory Pool / New / Delete
  149872             :      // ******************************************
  149873             : 
  149874             :      public:
  149875             :           /// \private
  149876             :           static const unsigned pool_size; //
  149877             :           /// \private
  149878             :           static std::vector<unsigned char *> pools; //
  149879             :           /// \private
  149880             :           static SgTemplateInstantiationTypedefDeclaration * next_node; // 
  149881             : 
  149882             :           /// \private
  149883             :           static unsigned long initializeStorageClassArray(SgTemplateInstantiationTypedefDeclarationStorageClass *); //
  149884             : 
  149885             :           /// \private
  149886             :           static void clearMemoryPool(); //
  149887             :           static void deleteMemoryPool(); //
  149888             : 
  149889             :           /// \private
  149890             :           static void extendMemoryPoolForFileIO(); //
  149891             : 
  149892             :           /// \private
  149893             :           static SgTemplateInstantiationTypedefDeclaration * getPointerFromGlobalIndex(unsigned long); //
  149894             :           /// \private
  149895             :           static SgTemplateInstantiationTypedefDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  149896             : 
  149897             :           /// \private
  149898             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  149899             :           /// \private
  149900             :           static void resetValidFreepointers(); //
  149901             :           /// \private
  149902             :           static unsigned long getNumberOfLastValidPointer(); //
  149903             : 
  149904             : 
  149905             : #if defined(INLINE_FUNCTIONS)
  149906             :       /*! \brief returns pointer to newly allocated IR node */
  149907             :           inline void *operator new (size_t size);
  149908             : #else
  149909             :       /*! \brief returns pointer to newly allocated IR node */
  149910             :           void *operator new (size_t size);
  149911             : #endif
  149912             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  149913             :           void operator delete (void* pointer, size_t size);
  149914             : 
  149915             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  149916         130 :           void operator delete (void* pointer)
  149917             :              {
  149918             :             // This is the generated delete operator...
  149919         130 :                SgTemplateInstantiationTypedefDeclaration::operator delete (pointer,sizeof(SgTemplateInstantiationTypedefDeclaration));
  149920             :              }
  149921             : 
  149922             :       /*! \brief Returns the total number of IR nodes of this type */
  149923             :           static size_t numberOfNodes();
  149924             : 
  149925             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  149926             :           static size_t memoryUsage();
  149927             : 
  149928             :       // End of scope which started in IR nodes specific code 
  149929             :       /* */
  149930             : 
  149931             :       /* name Internal Functions
  149932             :           \brief Internal functions ... incomplete-documentation
  149933             : 
  149934             :           These functions have been made public as part of the design, but they are suggested for internal use 
  149935             :           or by particularly knowledgeable users for specialized tools or applications.
  149936             : 
  149937             :           \internal We could not make these private because they are required by user for special purposes. And 
  149938             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  149939             :          
  149940             :        */
  149941             : 
  149942             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  149943             :        // overridden in every class by *generated* implementation
  149944             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  149945             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  149946             :        // MS: 06/28/02 container of names of variables or container indices 
  149947             :        // used used in the traversal to access AST successor nodes
  149948             :        // overridden in every class by *generated* implementation
  149949             :       /*! \brief container of names of variables or container indices used used in the traversal
  149950             :           to access AST successor nodes overridden in every class by *generated* implementation */
  149951             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  149952             : 
  149953             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  149954             :        // than all the vector copies. The implementation for these functions is generated for each class.
  149955             :       /*! \brief return number of children in the traversal successor list */
  149956             :           virtual size_t get_numberOfTraversalSuccessors() override;
  149957             :       /*! \brief index-based access to traversal successors by index number */
  149958             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  149959             :       /*! \brief index-based access to traversal successors by child node */
  149960             :           virtual size_t get_childIndex(SgNode *child) override;
  149961             : 
  149962             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  149963             :        // MS: 08/16/2002 method for generating RTI information
  149964             :       /*! \brief return C++ Runtime-Time-Information */
  149965             :           virtual RTIReturnType roseRTI() override;
  149966             : #endif
  149967             :       /* */
  149968             : 
  149969             : 
  149970             : 
  149971             :       /* name Deprecated Functions
  149972             :           \brief Deprecated functions ... incomplete-documentation
  149973             : 
  149974             :           These functions have been deprecated from use.
  149975             :        */
  149976             :       /* */
  149977             : 
  149978             :       /*! returns a C style string (char*) representing the class name */
  149979             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  149980             : 
  149981             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  149982             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  149983             : #if 0
  149984             :       /*! returns old style Sage II enum values */
  149985             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  149986             :       /*! returns old style Sage II enum values */
  149987             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  149988             : #endif
  149989             :       /* */
  149990             : 
  149991             : 
  149992             : 
  149993             : 
  149994             :      public:
  149995             :       /* name Traversal Support Functions
  149996             :           \brief Traversal support functions ... incomplete-documentation
  149997             : 
  149998             :           These functions have been made public as part of the design, but they are suggested for internal use 
  149999             :           or by particularly knowledgable users for specialized tools or applications.
  150000             :        */
  150001             :       /* */
  150002             : 
  150003             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  150004             :        // (inferior to ROSE traversal mechanism, experimental).
  150005             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  150006             :        */
  150007             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  150008             : 
  150009             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  150010             :       /*! \brief support for the classic visitor pattern done in GoF */
  150011             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  150012             : 
  150013             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  150014             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  150015             :        */
  150016             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  150017             : 
  150018             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  150019             :        */
  150020             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  150021             : 
  150022             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  150023             :        // This traversal helps support internal tools that call static member functions.
  150024             :        // note: this function operates on the memory pools.
  150025             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  150026             :        */
  150027             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  150028             :       /* */
  150029             : 
  150030             : 
  150031             :      public:
  150032             :       /* name Memory Allocation Functions
  150033             :           \brief Memory allocations functions ... incomplete-documentation
  150034             : 
  150035             :           These functions have been made public as part of the design, but they are suggested for internal use 
  150036             :           or by particularly knowledgable users for specialized tools or applications.
  150037             :        */
  150038             :       /* */
  150039             : 
  150040             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  150041             : 
  150042             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  150043             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  150044             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  150045             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  150046             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  150047             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  150048             :           being used with the AST File I/O mechanism.
  150049             :        */
  150050             :           virtual bool isInMemoryPool() override;
  150051             : 
  150052             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  150053             : 
  150054             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  150055             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  150056             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  150057             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  150058             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  150059             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  150060             :           being used with the AST File I/O mechanism.
  150061             :        */
  150062             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  150063             : 
  150064             :       // DQ (4/30/2006): Modified to be a const function.
  150065             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  150066             : 
  150067             :           This functions is part of general support for many possible tools to operate 
  150068             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  150069             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  150070             :           less than the set of pointers used by the AST file I/O. This is part of
  150071             :           work implemented by Andreas, and support tools such as the AST graph generation.
  150072             : 
  150073             :           \warning This function can return unexpected data members and thus the 
  150074             :                    order and the number of elements is unpredicable and subject 
  150075             :                    to change.
  150076             : 
  150077             :           \returns STL vector of pairs of SgNode* and strings
  150078             :        */
  150079             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  150080             : 
  150081             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  150082             : 
  150083             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  150084             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  150085             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  150086             : 
  150087             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  150088             :                    and subject to change.
  150089             :        */
  150090             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  150091             : 
  150092             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  150093             : 
  150094             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  150095             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  150096             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  150097             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  150098             : 
  150099             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  150100             : 
  150101             :           \returns long
  150102             :        */
  150103             :           virtual long getChildIndex( SgNode* childNode ) const override;
  150104             : 
  150105             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  150106             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  150107             :       /* \brief Constructor for use by AST File I/O Mechanism
  150108             : 
  150109             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  150110             :           which obtained via fast binary file I/O from disk.
  150111             :        */
  150112             :        // SgTemplateInstantiationTypedefDeclaration( SgTemplateInstantiationTypedefDeclarationStorageClass& source );
  150113             : 
  150114             : 
  150115             : 
  150116             : 
  150117             : 
  150118             :  // JH (10/24/2005): methods added to support the ast file IO
  150119             :     private:
  150120             : 
  150121             :       /* name AST Memory Allocation Support Functions
  150122             :           \brief Memory allocations support....
  150123             : 
  150124             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  150125             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  150126             :           and support the AST File I/O Mechanism.
  150127             :        */
  150128             :       /* */
  150129             : 
  150130             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  150131             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  150132             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  150133             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  150134             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  150135             :           a correspinding one in the AST_FILE_IO class!
  150136             :        */
  150137             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  150138             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  150139             :       /* \brief Typedef used for low level memory access.
  150140             :        */
  150141             :        // typedef unsigned char* TestType;
  150142             : 
  150143             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  150144             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  150145             :       /* \brief Typedef used to hold memory addresses as values.
  150146             :        */
  150147             :        // typedef unsigned long  AddressType;
  150148             : 
  150149             : 
  150150             : 
  150151             :        // necessary, to have direct access to the p_freepointer and the private methods !
  150152             :       /*! \brief friend class declaration to support AST File I/O */
  150153             :           friend class AST_FILE_IO;
  150154             : 
  150155             :       /*! \brief friend class declaration to support AST File I/O */
  150156             :           friend class SgTemplateInstantiationTypedefDeclarationStorageClass;
  150157             : 
  150158             :       /*! \brief friend class declaration to support AST File I/O */
  150159             :           friend class AstSpecificDataManagingClass;
  150160             : 
  150161             :       /*! \brief friend class declaration to support AST File I/O */
  150162             :           friend class AstSpecificDataManagingClassStorageClass;
  150163             :     public:
  150164             :       /*! \brief IR node constructor to support AST File I/O */
  150165             :           SgTemplateInstantiationTypedefDeclaration( const SgTemplateInstantiationTypedefDeclarationStorageClass& source );
  150166             : 
  150167             :  // private: // JJW hack
  150168             :        /*
  150169             :           name AST Memory Allocation Support Variables
  150170             :           Memory allocations support variables 
  150171             : 
  150172             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  150173             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  150174             :           and support the AST File I/O Mechanism.
  150175             :        */
  150176             :       /* */
  150177             : 
  150178             :     public:
  150179             : 
  150180             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  150181             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  150182             :       // virtual SgNode* addRegExpAttribute();
  150183             :       /*! \brief Support for AST matching using regular expression.
  150184             : 
  150185             :           This support is incomplete and the subject of current research to define 
  150186             :           RegEx trees to support inexact matching.
  150187             :        */
  150188             :           SgTemplateInstantiationTypedefDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  150189             : 
  150190             : // *** COMMON CODE SECTION ENDS HERE ***
  150191             : 
  150192             : 
  150193             : // End of memberFunctionString
  150194             : // Start of memberFunctionString
  150195             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  150196             : 
  150197             :      // the generated cast function
  150198             :      // friend ROSE_DLL_API SgTemplateInstantiationTypedefDeclaration* isSgTemplateInstantiationTypedefDeclaration ( SgNode* s );
  150199             : 
  150200             :           typedef SgTypedefDeclaration base_node_type;
  150201             : 
  150202             : 
  150203             : // End of memberFunctionString
  150204             : // Start of memberFunctionString
  150205             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  150206             : 
  150207             :           void post_construction_initialization() override;
  150208             : 
  150209             : 
  150210             : // End of memberFunctionString
  150211             : 
  150212             :      public: 
  150213             :          SgName get_templateName() const;
  150214             :          void set_templateName(SgName templateName);
  150215             : 
  150216             :      public: 
  150217             :          SgName get_templateHeader() const;
  150218             :          void set_templateHeader(SgName templateHeader);
  150219             : 
  150220             :      public: 
  150221             :          SgTemplateTypedefDeclaration* get_templateDeclaration() const;
  150222             :          void set_templateDeclaration(SgTemplateTypedefDeclaration* templateDeclaration);
  150223             : 
  150224             :      public: 
  150225             :          const SgTemplateArgumentPtrList&  get_templateArguments() const;
  150226             :          SgTemplateArgumentPtrList& get_templateArguments(); 
  150227             : 
  150228             :      public: 
  150229             :          bool get_nameResetFromMangledForm() const;
  150230             :          void set_nameResetFromMangledForm(bool nameResetFromMangledForm);
  150231             : 
  150232             : 
  150233             :      public: 
  150234             :          virtual ~SgTemplateInstantiationTypedefDeclaration();
  150235             : 
  150236             : 
  150237             :      public: 
  150238             :          SgTemplateInstantiationTypedefDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgType* base_type = NULL, SgTypedefType* type = NULL, SgDeclarationStatement* declaration = NULL, SgSymbol* parent_scope = NULL, SgTemplateTypedefDeclaration* templateDeclaration = NULL, SgTemplateArgumentPtrList templateArguments = SgTemplateArgumentPtrList()); 
  150239             :          SgTemplateInstantiationTypedefDeclaration(SgName name, SgType* base_type, SgTypedefType* type, SgDeclarationStatement* declaration, SgSymbol* parent_scope, SgTemplateTypedefDeclaration* templateDeclaration, SgTemplateArgumentPtrList templateArguments); 
  150240             : 
  150241             :     protected:
  150242             : // Start of memberFunctionString
  150243             : SgName p_templateName;
  150244             :           
  150245             : // End of memberFunctionString
  150246             : // Start of memberFunctionString
  150247             : SgName p_templateHeader;
  150248             :           
  150249             : // End of memberFunctionString
  150250             : // Start of memberFunctionString
  150251             : SgTemplateTypedefDeclaration* p_templateDeclaration;
  150252             :           
  150253             : // End of memberFunctionString
  150254             : // Start of memberFunctionString
  150255             : SgTemplateArgumentPtrList p_templateArguments;
  150256             :           
  150257             : // End of memberFunctionString
  150258             : // Start of memberFunctionString
  150259             : bool p_nameResetFromMangledForm;
  150260             :           
  150261             : // End of memberFunctionString
  150262             : 
  150263             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateInstantiationTypedefDeclaration>;
  150264             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationTypedefDeclaration, SgName,&SgTemplateInstantiationTypedefDeclaration::p_templateName>;
  150265             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationTypedefDeclaration, SgName,&SgTemplateInstantiationTypedefDeclaration::p_templateHeader>;
  150266             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationTypedefDeclaration, SgTemplateTypedefDeclaration*,&SgTemplateInstantiationTypedefDeclaration::p_templateDeclaration>;
  150267             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationTypedefDeclaration, SgTemplateArgumentPtrList,&SgTemplateInstantiationTypedefDeclaration::p_templateArguments>;
  150268             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationTypedefDeclaration, bool,&SgTemplateInstantiationTypedefDeclaration::p_nameResetFromMangledForm>;
  150269             : 
  150270             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150271             : 
  150272             : 
  150273             :    };
  150274             : #endif
  150275             : 
  150276             : // postdeclarations for SgTemplateInstantiationTypedefDeclaration
  150277             : 
  150278             : /* #line 150279 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150279             : 
  150280             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  150281             : 
  150282             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150283             : 
  150284             : 
  150285             : /* #line 150286 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150286             : 
  150287             : 
  150288             : 
  150289             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150290             : 
  150291             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  150292             : //      This code is automatically generated for each 
  150293             : //      terminal and non-terminal within the defined 
  150294             : //      grammar.  There is a simple way to change the 
  150295             : //      code to fix bugs etc.  See the ROSE README file
  150296             : //      for directions.
  150297             : 
  150298             : // tps: (02/22/2010): Adding DLL export requirements
  150299             : #include "rosedll.h"
  150300             : 
  150301             : // predeclarations for SgStatementFunctionStatement
  150302             : 
  150303             : /* #line 150304 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150304             : 
  150305             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  150306             : 
  150307             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150308             : 
  150309             : #if 1
  150310             : // Class Definition for SgStatementFunctionStatement
  150311             : class ROSE_DLL_API SgStatementFunctionStatement  : public SgDeclarationStatement
  150312             :    {
  150313             :      public:
  150314             : 
  150315             : 
  150316             : /* #line 150317 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150317             : 
  150318             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  150319             : // Start of memberFunctionString
  150320             : /* #line 3644 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  150321             : 
  150322             :      SgName get_mangled_name() const override;
  150323             : 
  150324             : 
  150325             : // End of memberFunctionString
  150326             : // Start of memberFunctionString
  150327             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  150328             : 
  150329             : // *** COMMON CODE SECTION BEGINS HERE ***
  150330             : 
  150331             :     public:
  150332             : 
  150333             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  150334             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  150335             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  150336             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  150337             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  150338             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  150339             : 
  150340             :       /*! \brief returns a string representing the class name */
  150341             :           virtual std::string class_name() const override;
  150342             : 
  150343             :       /*! \brief returns new style SageIII enum values */
  150344             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  150345             : 
  150346             :       /*! \brief static variant value */
  150347             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  150348             :        // static const VariantT static_variant = V_SgStatementFunctionStatement;
  150349             :           enum { static_variant = V_SgStatementFunctionStatement };
  150350             : 
  150351             :        /* the generated cast function */
  150352             :       /*! \brief Casts pointer from base class to derived class */
  150353             :           ROSE_DLL_API friend       SgStatementFunctionStatement* isSgStatementFunctionStatement(       SgNode * s );
  150354             : 
  150355             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  150356             :           ROSE_DLL_API friend const SgStatementFunctionStatement* isSgStatementFunctionStatement( const SgNode * s );
  150357             : 
  150358             :      // ******************************************
  150359             :      // * Memory Pool / New / Delete
  150360             :      // ******************************************
  150361             : 
  150362             :      public:
  150363             :           /// \private
  150364             :           static const unsigned pool_size; //
  150365             :           /// \private
  150366             :           static std::vector<unsigned char *> pools; //
  150367             :           /// \private
  150368             :           static SgStatementFunctionStatement * next_node; // 
  150369             : 
  150370             :           /// \private
  150371             :           static unsigned long initializeStorageClassArray(SgStatementFunctionStatementStorageClass *); //
  150372             : 
  150373             :           /// \private
  150374             :           static void clearMemoryPool(); //
  150375             :           static void deleteMemoryPool(); //
  150376             : 
  150377             :           /// \private
  150378             :           static void extendMemoryPoolForFileIO(); //
  150379             : 
  150380             :           /// \private
  150381             :           static SgStatementFunctionStatement * getPointerFromGlobalIndex(unsigned long); //
  150382             :           /// \private
  150383             :           static SgStatementFunctionStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  150384             : 
  150385             :           /// \private
  150386             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  150387             :           /// \private
  150388             :           static void resetValidFreepointers(); //
  150389             :           /// \private
  150390             :           static unsigned long getNumberOfLastValidPointer(); //
  150391             : 
  150392             : 
  150393             : #if defined(INLINE_FUNCTIONS)
  150394             :       /*! \brief returns pointer to newly allocated IR node */
  150395             :           inline void *operator new (size_t size);
  150396             : #else
  150397             :       /*! \brief returns pointer to newly allocated IR node */
  150398             :           void *operator new (size_t size);
  150399             : #endif
  150400             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  150401             :           void operator delete (void* pointer, size_t size);
  150402             : 
  150403             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  150404           0 :           void operator delete (void* pointer)
  150405             :              {
  150406             :             // This is the generated delete operator...
  150407           0 :                SgStatementFunctionStatement::operator delete (pointer,sizeof(SgStatementFunctionStatement));
  150408             :              }
  150409             : 
  150410             :       /*! \brief Returns the total number of IR nodes of this type */
  150411             :           static size_t numberOfNodes();
  150412             : 
  150413             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  150414             :           static size_t memoryUsage();
  150415             : 
  150416             :       // End of scope which started in IR nodes specific code 
  150417             :       /* */
  150418             : 
  150419             :       /* name Internal Functions
  150420             :           \brief Internal functions ... incomplete-documentation
  150421             : 
  150422             :           These functions have been made public as part of the design, but they are suggested for internal use 
  150423             :           or by particularly knowledgeable users for specialized tools or applications.
  150424             : 
  150425             :           \internal We could not make these private because they are required by user for special purposes. And 
  150426             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  150427             :          
  150428             :        */
  150429             : 
  150430             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  150431             :        // overridden in every class by *generated* implementation
  150432             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  150433             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  150434             :        // MS: 06/28/02 container of names of variables or container indices 
  150435             :        // used used in the traversal to access AST successor nodes
  150436             :        // overridden in every class by *generated* implementation
  150437             :       /*! \brief container of names of variables or container indices used used in the traversal
  150438             :           to access AST successor nodes overridden in every class by *generated* implementation */
  150439             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  150440             : 
  150441             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  150442             :        // than all the vector copies. The implementation for these functions is generated for each class.
  150443             :       /*! \brief return number of children in the traversal successor list */
  150444             :           virtual size_t get_numberOfTraversalSuccessors() override;
  150445             :       /*! \brief index-based access to traversal successors by index number */
  150446             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  150447             :       /*! \brief index-based access to traversal successors by child node */
  150448             :           virtual size_t get_childIndex(SgNode *child) override;
  150449             : 
  150450             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  150451             :        // MS: 08/16/2002 method for generating RTI information
  150452             :       /*! \brief return C++ Runtime-Time-Information */
  150453             :           virtual RTIReturnType roseRTI() override;
  150454             : #endif
  150455             :       /* */
  150456             : 
  150457             : 
  150458             : 
  150459             :       /* name Deprecated Functions
  150460             :           \brief Deprecated functions ... incomplete-documentation
  150461             : 
  150462             :           These functions have been deprecated from use.
  150463             :        */
  150464             :       /* */
  150465             : 
  150466             :       /*! returns a C style string (char*) representing the class name */
  150467             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  150468             : 
  150469             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  150470             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  150471             : #if 0
  150472             :       /*! returns old style Sage II enum values */
  150473             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  150474             :       /*! returns old style Sage II enum values */
  150475             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  150476             : #endif
  150477             :       /* */
  150478             : 
  150479             : 
  150480             : 
  150481             : 
  150482             :      public:
  150483             :       /* name Traversal Support Functions
  150484             :           \brief Traversal support functions ... incomplete-documentation
  150485             : 
  150486             :           These functions have been made public as part of the design, but they are suggested for internal use 
  150487             :           or by particularly knowledgable users for specialized tools or applications.
  150488             :        */
  150489             :       /* */
  150490             : 
  150491             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  150492             :        // (inferior to ROSE traversal mechanism, experimental).
  150493             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  150494             :        */
  150495             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  150496             : 
  150497             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  150498             :       /*! \brief support for the classic visitor pattern done in GoF */
  150499             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  150500             : 
  150501             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  150502             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  150503             :        */
  150504             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  150505             : 
  150506             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  150507             :        */
  150508             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  150509             : 
  150510             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  150511             :        // This traversal helps support internal tools that call static member functions.
  150512             :        // note: this function operates on the memory pools.
  150513             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  150514             :        */
  150515             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  150516             :       /* */
  150517             : 
  150518             : 
  150519             :      public:
  150520             :       /* name Memory Allocation Functions
  150521             :           \brief Memory allocations functions ... incomplete-documentation
  150522             : 
  150523             :           These functions have been made public as part of the design, but they are suggested for internal use 
  150524             :           or by particularly knowledgable users for specialized tools or applications.
  150525             :        */
  150526             :       /* */
  150527             : 
  150528             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  150529             : 
  150530             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  150531             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  150532             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  150533             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  150534             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  150535             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  150536             :           being used with the AST File I/O mechanism.
  150537             :        */
  150538             :           virtual bool isInMemoryPool() override;
  150539             : 
  150540             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  150541             : 
  150542             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  150543             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  150544             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  150545             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  150546             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  150547             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  150548             :           being used with the AST File I/O mechanism.
  150549             :        */
  150550             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  150551             : 
  150552             :       // DQ (4/30/2006): Modified to be a const function.
  150553             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  150554             : 
  150555             :           This functions is part of general support for many possible tools to operate 
  150556             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  150557             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  150558             :           less than the set of pointers used by the AST file I/O. This is part of
  150559             :           work implemented by Andreas, and support tools such as the AST graph generation.
  150560             : 
  150561             :           \warning This function can return unexpected data members and thus the 
  150562             :                    order and the number of elements is unpredicable and subject 
  150563             :                    to change.
  150564             : 
  150565             :           \returns STL vector of pairs of SgNode* and strings
  150566             :        */
  150567             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  150568             : 
  150569             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  150570             : 
  150571             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  150572             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  150573             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  150574             : 
  150575             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  150576             :                    and subject to change.
  150577             :        */
  150578             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  150579             : 
  150580             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  150581             : 
  150582             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  150583             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  150584             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  150585             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  150586             : 
  150587             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  150588             : 
  150589             :           \returns long
  150590             :        */
  150591             :           virtual long getChildIndex( SgNode* childNode ) const override;
  150592             : 
  150593             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  150594             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  150595             :       /* \brief Constructor for use by AST File I/O Mechanism
  150596             : 
  150597             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  150598             :           which obtained via fast binary file I/O from disk.
  150599             :        */
  150600             :        // SgStatementFunctionStatement( SgStatementFunctionStatementStorageClass& source );
  150601             : 
  150602             : 
  150603             : 
  150604             : 
  150605             : 
  150606             :  // JH (10/24/2005): methods added to support the ast file IO
  150607             :     private:
  150608             : 
  150609             :       /* name AST Memory Allocation Support Functions
  150610             :           \brief Memory allocations support....
  150611             : 
  150612             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  150613             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  150614             :           and support the AST File I/O Mechanism.
  150615             :        */
  150616             :       /* */
  150617             : 
  150618             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  150619             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  150620             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  150621             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  150622             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  150623             :           a correspinding one in the AST_FILE_IO class!
  150624             :        */
  150625             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  150626             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  150627             :       /* \brief Typedef used for low level memory access.
  150628             :        */
  150629             :        // typedef unsigned char* TestType;
  150630             : 
  150631             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  150632             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  150633             :       /* \brief Typedef used to hold memory addresses as values.
  150634             :        */
  150635             :        // typedef unsigned long  AddressType;
  150636             : 
  150637             : 
  150638             : 
  150639             :        // necessary, to have direct access to the p_freepointer and the private methods !
  150640             :       /*! \brief friend class declaration to support AST File I/O */
  150641             :           friend class AST_FILE_IO;
  150642             : 
  150643             :       /*! \brief friend class declaration to support AST File I/O */
  150644             :           friend class SgStatementFunctionStatementStorageClass;
  150645             : 
  150646             :       /*! \brief friend class declaration to support AST File I/O */
  150647             :           friend class AstSpecificDataManagingClass;
  150648             : 
  150649             :       /*! \brief friend class declaration to support AST File I/O */
  150650             :           friend class AstSpecificDataManagingClassStorageClass;
  150651             :     public:
  150652             :       /*! \brief IR node constructor to support AST File I/O */
  150653             :           SgStatementFunctionStatement( const SgStatementFunctionStatementStorageClass& source );
  150654             : 
  150655             :  // private: // JJW hack
  150656             :        /*
  150657             :           name AST Memory Allocation Support Variables
  150658             :           Memory allocations support variables 
  150659             : 
  150660             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  150661             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  150662             :           and support the AST File I/O Mechanism.
  150663             :        */
  150664             :       /* */
  150665             : 
  150666             :     public:
  150667             : 
  150668             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  150669             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  150670             :       // virtual SgNode* addRegExpAttribute();
  150671             :       /*! \brief Support for AST matching using regular expression.
  150672             : 
  150673             :           This support is incomplete and the subject of current research to define 
  150674             :           RegEx trees to support inexact matching.
  150675             :        */
  150676             :           SgStatementFunctionStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  150677             : 
  150678             : // *** COMMON CODE SECTION ENDS HERE ***
  150679             : 
  150680             : 
  150681             : // End of memberFunctionString
  150682             : // Start of memberFunctionString
  150683             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  150684             : 
  150685             :      // the generated cast function
  150686             :      // friend ROSE_DLL_API SgStatementFunctionStatement* isSgStatementFunctionStatement ( SgNode* s );
  150687             : 
  150688             :           typedef SgDeclarationStatement base_node_type;
  150689             : 
  150690             : 
  150691             : // End of memberFunctionString
  150692             : // Start of memberFunctionString
  150693             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  150694             : 
  150695             :           void post_construction_initialization() override;
  150696             : 
  150697             : 
  150698             : // End of memberFunctionString
  150699             : 
  150700             :      public: 
  150701             :          SgFunctionDeclaration* get_function() const;
  150702             :          void set_function(SgFunctionDeclaration* function);
  150703             : 
  150704             :      public: 
  150705             :          SgExpression* get_expression() const;
  150706             :          void set_expression(SgExpression* expression);
  150707             : 
  150708             : 
  150709             :      public: 
  150710             :          virtual ~SgStatementFunctionStatement();
  150711             : 
  150712             : 
  150713             :      public: 
  150714             :          SgStatementFunctionStatement(Sg_File_Info* startOfConstruct , SgFunctionDeclaration* function = NULL, SgExpression* expression = NULL); 
  150715             :          SgStatementFunctionStatement(SgFunctionDeclaration* function, SgExpression* expression); 
  150716             : 
  150717             :     protected:
  150718             : // Start of memberFunctionString
  150719             : SgFunctionDeclaration* p_function;
  150720             :           
  150721             : // End of memberFunctionString
  150722             : // Start of memberFunctionString
  150723             : SgExpression* p_expression;
  150724             :           
  150725             : // End of memberFunctionString
  150726             : 
  150727             :     friend struct Rose::Traits::generated::describe_node_t<SgStatementFunctionStatement>;
  150728             :     friend struct Rose::Traits::generated::describe_field_t<SgStatementFunctionStatement, SgFunctionDeclaration*,&SgStatementFunctionStatement::p_function>;
  150729             :     friend struct Rose::Traits::generated::describe_field_t<SgStatementFunctionStatement, SgExpression*,&SgStatementFunctionStatement::p_expression>;
  150730             : 
  150731             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150732             : 
  150733             : 
  150734             :    };
  150735             : #endif
  150736             : 
  150737             : // postdeclarations for SgStatementFunctionStatement
  150738             : 
  150739             : /* #line 150740 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150740             : 
  150741             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  150742             : 
  150743             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150744             : 
  150745             : 
  150746             : /* #line 150747 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150747             : 
  150748             : 
  150749             : 
  150750             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150751             : 
  150752             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  150753             : //      This code is automatically generated for each 
  150754             : //      terminal and non-terminal within the defined 
  150755             : //      grammar.  There is a simple way to change the 
  150756             : //      code to fix bugs etc.  See the ROSE README file
  150757             : //      for directions.
  150758             : 
  150759             : // tps: (02/22/2010): Adding DLL export requirements
  150760             : #include "rosedll.h"
  150761             : 
  150762             : // predeclarations for SgCtorInitializerList
  150763             : 
  150764             : /* #line 150765 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150765             : 
  150766             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  150767             : 
  150768             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  150769             : 
  150770             : #if 1
  150771             : // Class Definition for SgCtorInitializerList
  150772             : class ROSE_DLL_API SgCtorInitializerList  : public SgDeclarationStatement
  150773             :    {
  150774             :      public:
  150775             : 
  150776             : 
  150777             : /* #line 150778 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  150778             : 
  150779             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  150780             : // Start of memberFunctionString
  150781             : /* #line 1661 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  150782             : 
  150783             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  150784             : 
  150785             :      public:
  150786             :           virtual void append_ctor_initializer  ( SgInitializedName* element );
  150787             :           virtual void prepend_ctor_initializer ( SgInitializedName* element );
  150788             : 
  150789             :      public:
  150790             :        // New functions added
  150791             :        // void append_ctor_initializer  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  150792             :        // void prepend_ctor_initializer ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  150793             : 
  150794             :        // void insert_ctor_initializer  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  150795             : 
  150796             : 
  150797             :      public:
  150798             : 
  150799             : 
  150800             : 
  150801             : 
  150802             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  150803             :           virtual SgName get_mangled_name(void) const override;
  150804             : 
  150805             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  150806             :        // MD (7/09/2010): Added virtual CFG methods
  150807             :           virtual unsigned int cfgIndexForEnd() const override;
  150808             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  150809             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  150810             : #endif
  150811             : 
  150812             : 
  150813             : 
  150814             : // End of memberFunctionString
  150815             : // Start of memberFunctionString
  150816             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  150817             : 
  150818             : // *** COMMON CODE SECTION BEGINS HERE ***
  150819             : 
  150820             :     public:
  150821             : 
  150822             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  150823             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  150824             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  150825             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  150826             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  150827             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  150828             : 
  150829             :       /*! \brief returns a string representing the class name */
  150830             :           virtual std::string class_name() const override;
  150831             : 
  150832             :       /*! \brief returns new style SageIII enum values */
  150833             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  150834             : 
  150835             :       /*! \brief static variant value */
  150836             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  150837             :        // static const VariantT static_variant = V_SgCtorInitializerList;
  150838             :           enum { static_variant = V_SgCtorInitializerList };
  150839             : 
  150840             :        /* the generated cast function */
  150841             :       /*! \brief Casts pointer from base class to derived class */
  150842             :           ROSE_DLL_API friend       SgCtorInitializerList* isSgCtorInitializerList(       SgNode * s );
  150843             : 
  150844             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  150845             :           ROSE_DLL_API friend const SgCtorInitializerList* isSgCtorInitializerList( const SgNode * s );
  150846             : 
  150847             :      // ******************************************
  150848             :      // * Memory Pool / New / Delete
  150849             :      // ******************************************
  150850             : 
  150851             :      public:
  150852             :           /// \private
  150853             :           static const unsigned pool_size; //
  150854             :           /// \private
  150855             :           static std::vector<unsigned char *> pools; //
  150856             :           /// \private
  150857             :           static SgCtorInitializerList * next_node; // 
  150858             : 
  150859             :           /// \private
  150860             :           static unsigned long initializeStorageClassArray(SgCtorInitializerListStorageClass *); //
  150861             : 
  150862             :           /// \private
  150863             :           static void clearMemoryPool(); //
  150864             :           static void deleteMemoryPool(); //
  150865             : 
  150866             :           /// \private
  150867             :           static void extendMemoryPoolForFileIO(); //
  150868             : 
  150869             :           /// \private
  150870             :           static SgCtorInitializerList * getPointerFromGlobalIndex(unsigned long); //
  150871             :           /// \private
  150872             :           static SgCtorInitializerList * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  150873             : 
  150874             :           /// \private
  150875             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  150876             :           /// \private
  150877             :           static void resetValidFreepointers(); //
  150878             :           /// \private
  150879             :           static unsigned long getNumberOfLastValidPointer(); //
  150880             : 
  150881             : 
  150882             : #if defined(INLINE_FUNCTIONS)
  150883             :       /*! \brief returns pointer to newly allocated IR node */
  150884             :           inline void *operator new (size_t size);
  150885             : #else
  150886             :       /*! \brief returns pointer to newly allocated IR node */
  150887             :           void *operator new (size_t size);
  150888             : #endif
  150889             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  150890             :           void operator delete (void* pointer, size_t size);
  150891             : 
  150892             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  150893        8856 :           void operator delete (void* pointer)
  150894             :              {
  150895             :             // This is the generated delete operator...
  150896        8856 :                SgCtorInitializerList::operator delete (pointer,sizeof(SgCtorInitializerList));
  150897             :              }
  150898             : 
  150899             :       /*! \brief Returns the total number of IR nodes of this type */
  150900             :           static size_t numberOfNodes();
  150901             : 
  150902             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  150903             :           static size_t memoryUsage();
  150904             : 
  150905             :       // End of scope which started in IR nodes specific code 
  150906             :       /* */
  150907             : 
  150908             :       /* name Internal Functions
  150909             :           \brief Internal functions ... incomplete-documentation
  150910             : 
  150911             :           These functions have been made public as part of the design, but they are suggested for internal use 
  150912             :           or by particularly knowledgeable users for specialized tools or applications.
  150913             : 
  150914             :           \internal We could not make these private because they are required by user for special purposes. And 
  150915             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  150916             :          
  150917             :        */
  150918             : 
  150919             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  150920             :        // overridden in every class by *generated* implementation
  150921             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  150922             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  150923             :        // MS: 06/28/02 container of names of variables or container indices 
  150924             :        // used used in the traversal to access AST successor nodes
  150925             :        // overridden in every class by *generated* implementation
  150926             :       /*! \brief container of names of variables or container indices used used in the traversal
  150927             :           to access AST successor nodes overridden in every class by *generated* implementation */
  150928             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  150929             : 
  150930             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  150931             :        // than all the vector copies. The implementation for these functions is generated for each class.
  150932             :       /*! \brief return number of children in the traversal successor list */
  150933             :           virtual size_t get_numberOfTraversalSuccessors() override;
  150934             :       /*! \brief index-based access to traversal successors by index number */
  150935             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  150936             :       /*! \brief index-based access to traversal successors by child node */
  150937             :           virtual size_t get_childIndex(SgNode *child) override;
  150938             : 
  150939             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  150940             :        // MS: 08/16/2002 method for generating RTI information
  150941             :       /*! \brief return C++ Runtime-Time-Information */
  150942             :           virtual RTIReturnType roseRTI() override;
  150943             : #endif
  150944             :       /* */
  150945             : 
  150946             : 
  150947             : 
  150948             :       /* name Deprecated Functions
  150949             :           \brief Deprecated functions ... incomplete-documentation
  150950             : 
  150951             :           These functions have been deprecated from use.
  150952             :        */
  150953             :       /* */
  150954             : 
  150955             :       /*! returns a C style string (char*) representing the class name */
  150956             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  150957             : 
  150958             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  150959             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  150960             : #if 0
  150961             :       /*! returns old style Sage II enum values */
  150962             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  150963             :       /*! returns old style Sage II enum values */
  150964             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  150965             : #endif
  150966             :       /* */
  150967             : 
  150968             : 
  150969             : 
  150970             : 
  150971             :      public:
  150972             :       /* name Traversal Support Functions
  150973             :           \brief Traversal support functions ... incomplete-documentation
  150974             : 
  150975             :           These functions have been made public as part of the design, but they are suggested for internal use 
  150976             :           or by particularly knowledgable users for specialized tools or applications.
  150977             :        */
  150978             :       /* */
  150979             : 
  150980             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  150981             :        // (inferior to ROSE traversal mechanism, experimental).
  150982             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  150983             :        */
  150984             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  150985             : 
  150986             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  150987             :       /*! \brief support for the classic visitor pattern done in GoF */
  150988             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  150989             : 
  150990             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  150991             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  150992             :        */
  150993             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  150994             : 
  150995             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  150996             :        */
  150997             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  150998             : 
  150999             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  151000             :        // This traversal helps support internal tools that call static member functions.
  151001             :        // note: this function operates on the memory pools.
  151002             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  151003             :        */
  151004             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  151005             :       /* */
  151006             : 
  151007             : 
  151008             :      public:
  151009             :       /* name Memory Allocation Functions
  151010             :           \brief Memory allocations functions ... incomplete-documentation
  151011             : 
  151012             :           These functions have been made public as part of the design, but they are suggested for internal use 
  151013             :           or by particularly knowledgable users for specialized tools or applications.
  151014             :        */
  151015             :       /* */
  151016             : 
  151017             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  151018             : 
  151019             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  151020             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  151021             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  151022             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  151023             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  151024             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  151025             :           being used with the AST File I/O mechanism.
  151026             :        */
  151027             :           virtual bool isInMemoryPool() override;
  151028             : 
  151029             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  151030             : 
  151031             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  151032             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  151033             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  151034             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  151035             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  151036             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  151037             :           being used with the AST File I/O mechanism.
  151038             :        */
  151039             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  151040             : 
  151041             :       // DQ (4/30/2006): Modified to be a const function.
  151042             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  151043             : 
  151044             :           This functions is part of general support for many possible tools to operate 
  151045             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  151046             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  151047             :           less than the set of pointers used by the AST file I/O. This is part of
  151048             :           work implemented by Andreas, and support tools such as the AST graph generation.
  151049             : 
  151050             :           \warning This function can return unexpected data members and thus the 
  151051             :                    order and the number of elements is unpredicable and subject 
  151052             :                    to change.
  151053             : 
  151054             :           \returns STL vector of pairs of SgNode* and strings
  151055             :        */
  151056             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  151057             : 
  151058             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  151059             : 
  151060             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  151061             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  151062             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  151063             : 
  151064             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  151065             :                    and subject to change.
  151066             :        */
  151067             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  151068             : 
  151069             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  151070             : 
  151071             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  151072             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  151073             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  151074             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  151075             : 
  151076             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  151077             : 
  151078             :           \returns long
  151079             :        */
  151080             :           virtual long getChildIndex( SgNode* childNode ) const override;
  151081             : 
  151082             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  151083             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  151084             :       /* \brief Constructor for use by AST File I/O Mechanism
  151085             : 
  151086             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  151087             :           which obtained via fast binary file I/O from disk.
  151088             :        */
  151089             :        // SgCtorInitializerList( SgCtorInitializerListStorageClass& source );
  151090             : 
  151091             : 
  151092             : 
  151093             : 
  151094             : 
  151095             :  // JH (10/24/2005): methods added to support the ast file IO
  151096             :     private:
  151097             : 
  151098             :       /* name AST Memory Allocation Support Functions
  151099             :           \brief Memory allocations support....
  151100             : 
  151101             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  151102             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  151103             :           and support the AST File I/O Mechanism.
  151104             :        */
  151105             :       /* */
  151106             : 
  151107             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  151108             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  151109             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  151110             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  151111             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  151112             :           a correspinding one in the AST_FILE_IO class!
  151113             :        */
  151114             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  151115             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  151116             :       /* \brief Typedef used for low level memory access.
  151117             :        */
  151118             :        // typedef unsigned char* TestType;
  151119             : 
  151120             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  151121             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  151122             :       /* \brief Typedef used to hold memory addresses as values.
  151123             :        */
  151124             :        // typedef unsigned long  AddressType;
  151125             : 
  151126             : 
  151127             : 
  151128             :        // necessary, to have direct access to the p_freepointer and the private methods !
  151129             :       /*! \brief friend class declaration to support AST File I/O */
  151130             :           friend class AST_FILE_IO;
  151131             : 
  151132             :       /*! \brief friend class declaration to support AST File I/O */
  151133             :           friend class SgCtorInitializerListStorageClass;
  151134             : 
  151135             :       /*! \brief friend class declaration to support AST File I/O */
  151136             :           friend class AstSpecificDataManagingClass;
  151137             : 
  151138             :       /*! \brief friend class declaration to support AST File I/O */
  151139             :           friend class AstSpecificDataManagingClassStorageClass;
  151140             :     public:
  151141             :       /*! \brief IR node constructor to support AST File I/O */
  151142             :           SgCtorInitializerList( const SgCtorInitializerListStorageClass& source );
  151143             : 
  151144             :  // private: // JJW hack
  151145             :        /*
  151146             :           name AST Memory Allocation Support Variables
  151147             :           Memory allocations support variables 
  151148             : 
  151149             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  151150             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  151151             :           and support the AST File I/O Mechanism.
  151152             :        */
  151153             :       /* */
  151154             : 
  151155             :     public:
  151156             : 
  151157             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  151158             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  151159             :       // virtual SgNode* addRegExpAttribute();
  151160             :       /*! \brief Support for AST matching using regular expression.
  151161             : 
  151162             :           This support is incomplete and the subject of current research to define 
  151163             :           RegEx trees to support inexact matching.
  151164             :        */
  151165             :           SgCtorInitializerList* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  151166             : 
  151167             : // *** COMMON CODE SECTION ENDS HERE ***
  151168             : 
  151169             : 
  151170             : // End of memberFunctionString
  151171             : // Start of memberFunctionString
  151172             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  151173             : 
  151174             :      // the generated cast function
  151175             :      // friend ROSE_DLL_API SgCtorInitializerList* isSgCtorInitializerList ( SgNode* s );
  151176             : 
  151177             :           typedef SgDeclarationStatement base_node_type;
  151178             : 
  151179             : 
  151180             : // End of memberFunctionString
  151181             : // Start of memberFunctionString
  151182             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  151183             : 
  151184             :           void post_construction_initialization() override;
  151185             : 
  151186             : 
  151187             : // End of memberFunctionString
  151188             : 
  151189             :      public: 
  151190             :          const SgInitializedNamePtrList&  get_ctors() const;
  151191             :          SgInitializedNamePtrList& get_ctors(); 
  151192             : 
  151193             : 
  151194             :      public: 
  151195             :          virtual ~SgCtorInitializerList();
  151196             : 
  151197             : 
  151198             :      public: 
  151199             :          SgCtorInitializerList(Sg_File_Info* startOfConstruct ); 
  151200             :          SgCtorInitializerList(); 
  151201             : 
  151202             :     protected:
  151203             : // Start of memberFunctionString
  151204             : SgInitializedNamePtrList p_ctors;
  151205             :           
  151206             : // End of memberFunctionString
  151207             : 
  151208             :     friend struct Rose::Traits::generated::describe_node_t<SgCtorInitializerList>;
  151209             :     friend struct Rose::Traits::generated::describe_field_t<SgCtorInitializerList, SgInitializedNamePtrList,&SgCtorInitializerList::p_ctors>;
  151210             : 
  151211             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151212             : 
  151213             : 
  151214             :    };
  151215             : #endif
  151216             : 
  151217             : // postdeclarations for SgCtorInitializerList
  151218             : 
  151219             : /* #line 151220 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151220             : 
  151221             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  151222             : 
  151223             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151224             : 
  151225             : 
  151226             : /* #line 151227 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151227             : 
  151228             : 
  151229             : 
  151230             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151231             : 
  151232             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  151233             : //      This code is automatically generated for each 
  151234             : //      terminal and non-terminal within the defined 
  151235             : //      grammar.  There is a simple way to change the 
  151236             : //      code to fix bugs etc.  See the ROSE README file
  151237             : //      for directions.
  151238             : 
  151239             : // tps: (02/22/2010): Adding DLL export requirements
  151240             : #include "rosedll.h"
  151241             : 
  151242             : // predeclarations for SgPragmaDeclaration
  151243             : 
  151244             : /* #line 151245 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151245             : 
  151246             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  151247             : 
  151248             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151249             : 
  151250             : #if 1
  151251             : // Class Definition for SgPragmaDeclaration
  151252             : class ROSE_DLL_API SgPragmaDeclaration  : public SgDeclarationStatement
  151253             :    {
  151254             :      public:
  151255             : 
  151256             : 
  151257             : /* #line 151258 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151258             : 
  151259             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  151260             : // Start of memberFunctionString
  151261             : /* #line 3025 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  151262             : 
  151263             : 
  151264             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  151265             :           virtual SgName get_mangled_name(void) const override;
  151266             : 
  151267             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  151268             :           virtual unsigned int cfgIndexForEnd() const override;
  151269             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  151270             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  151271             : #endif
  151272             : 
  151273             : 
  151274             : 
  151275             : // End of memberFunctionString
  151276             : // Start of memberFunctionString
  151277             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  151278             : 
  151279             : // *** COMMON CODE SECTION BEGINS HERE ***
  151280             : 
  151281             :     public:
  151282             : 
  151283             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  151284             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  151285             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  151286             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  151287             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  151288             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  151289             : 
  151290             :       /*! \brief returns a string representing the class name */
  151291             :           virtual std::string class_name() const override;
  151292             : 
  151293             :       /*! \brief returns new style SageIII enum values */
  151294             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  151295             : 
  151296             :       /*! \brief static variant value */
  151297             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  151298             :        // static const VariantT static_variant = V_SgPragmaDeclaration;
  151299             :           enum { static_variant = V_SgPragmaDeclaration };
  151300             : 
  151301             :        /* the generated cast function */
  151302             :       /*! \brief Casts pointer from base class to derived class */
  151303             :           ROSE_DLL_API friend       SgPragmaDeclaration* isSgPragmaDeclaration(       SgNode * s );
  151304             : 
  151305             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  151306             :           ROSE_DLL_API friend const SgPragmaDeclaration* isSgPragmaDeclaration( const SgNode * s );
  151307             : 
  151308             :      // ******************************************
  151309             :      // * Memory Pool / New / Delete
  151310             :      // ******************************************
  151311             : 
  151312             :      public:
  151313             :           /// \private
  151314             :           static const unsigned pool_size; //
  151315             :           /// \private
  151316             :           static std::vector<unsigned char *> pools; //
  151317             :           /// \private
  151318             :           static SgPragmaDeclaration * next_node; // 
  151319             : 
  151320             :           /// \private
  151321             :           static unsigned long initializeStorageClassArray(SgPragmaDeclarationStorageClass *); //
  151322             : 
  151323             :           /// \private
  151324             :           static void clearMemoryPool(); //
  151325             :           static void deleteMemoryPool(); //
  151326             : 
  151327             :           /// \private
  151328             :           static void extendMemoryPoolForFileIO(); //
  151329             : 
  151330             :           /// \private
  151331             :           static SgPragmaDeclaration * getPointerFromGlobalIndex(unsigned long); //
  151332             :           /// \private
  151333             :           static SgPragmaDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  151334             : 
  151335             :           /// \private
  151336             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  151337             :           /// \private
  151338             :           static void resetValidFreepointers(); //
  151339             :           /// \private
  151340             :           static unsigned long getNumberOfLastValidPointer(); //
  151341             : 
  151342             : 
  151343             : #if defined(INLINE_FUNCTIONS)
  151344             :       /*! \brief returns pointer to newly allocated IR node */
  151345             :           inline void *operator new (size_t size);
  151346             : #else
  151347             :       /*! \brief returns pointer to newly allocated IR node */
  151348             :           void *operator new (size_t size);
  151349             : #endif
  151350             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  151351             :           void operator delete (void* pointer, size_t size);
  151352             : 
  151353             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  151354         194 :           void operator delete (void* pointer)
  151355             :              {
  151356             :             // This is the generated delete operator...
  151357         194 :                SgPragmaDeclaration::operator delete (pointer,sizeof(SgPragmaDeclaration));
  151358             :              }
  151359             : 
  151360             :       /*! \brief Returns the total number of IR nodes of this type */
  151361             :           static size_t numberOfNodes();
  151362             : 
  151363             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  151364             :           static size_t memoryUsage();
  151365             : 
  151366             :       // End of scope which started in IR nodes specific code 
  151367             :       /* */
  151368             : 
  151369             :       /* name Internal Functions
  151370             :           \brief Internal functions ... incomplete-documentation
  151371             : 
  151372             :           These functions have been made public as part of the design, but they are suggested for internal use 
  151373             :           or by particularly knowledgeable users for specialized tools or applications.
  151374             : 
  151375             :           \internal We could not make these private because they are required by user for special purposes. And 
  151376             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  151377             :          
  151378             :        */
  151379             : 
  151380             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  151381             :        // overridden in every class by *generated* implementation
  151382             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  151383             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  151384             :        // MS: 06/28/02 container of names of variables or container indices 
  151385             :        // used used in the traversal to access AST successor nodes
  151386             :        // overridden in every class by *generated* implementation
  151387             :       /*! \brief container of names of variables or container indices used used in the traversal
  151388             :           to access AST successor nodes overridden in every class by *generated* implementation */
  151389             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  151390             : 
  151391             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  151392             :        // than all the vector copies. The implementation for these functions is generated for each class.
  151393             :       /*! \brief return number of children in the traversal successor list */
  151394             :           virtual size_t get_numberOfTraversalSuccessors() override;
  151395             :       /*! \brief index-based access to traversal successors by index number */
  151396             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  151397             :       /*! \brief index-based access to traversal successors by child node */
  151398             :           virtual size_t get_childIndex(SgNode *child) override;
  151399             : 
  151400             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  151401             :        // MS: 08/16/2002 method for generating RTI information
  151402             :       /*! \brief return C++ Runtime-Time-Information */
  151403             :           virtual RTIReturnType roseRTI() override;
  151404             : #endif
  151405             :       /* */
  151406             : 
  151407             : 
  151408             : 
  151409             :       /* name Deprecated Functions
  151410             :           \brief Deprecated functions ... incomplete-documentation
  151411             : 
  151412             :           These functions have been deprecated from use.
  151413             :        */
  151414             :       /* */
  151415             : 
  151416             :       /*! returns a C style string (char*) representing the class name */
  151417             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  151418             : 
  151419             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  151420             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  151421             : #if 0
  151422             :       /*! returns old style Sage II enum values */
  151423             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  151424             :       /*! returns old style Sage II enum values */
  151425             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  151426             : #endif
  151427             :       /* */
  151428             : 
  151429             : 
  151430             : 
  151431             : 
  151432             :      public:
  151433             :       /* name Traversal Support Functions
  151434             :           \brief Traversal support functions ... incomplete-documentation
  151435             : 
  151436             :           These functions have been made public as part of the design, but they are suggested for internal use 
  151437             :           or by particularly knowledgable users for specialized tools or applications.
  151438             :        */
  151439             :       /* */
  151440             : 
  151441             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  151442             :        // (inferior to ROSE traversal mechanism, experimental).
  151443             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  151444             :        */
  151445             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  151446             : 
  151447             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  151448             :       /*! \brief support for the classic visitor pattern done in GoF */
  151449             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  151450             : 
  151451             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  151452             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  151453             :        */
  151454             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  151455             : 
  151456             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  151457             :        */
  151458             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  151459             : 
  151460             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  151461             :        // This traversal helps support internal tools that call static member functions.
  151462             :        // note: this function operates on the memory pools.
  151463             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  151464             :        */
  151465             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  151466             :       /* */
  151467             : 
  151468             : 
  151469             :      public:
  151470             :       /* name Memory Allocation Functions
  151471             :           \brief Memory allocations functions ... incomplete-documentation
  151472             : 
  151473             :           These functions have been made public as part of the design, but they are suggested for internal use 
  151474             :           or by particularly knowledgable users for specialized tools or applications.
  151475             :        */
  151476             :       /* */
  151477             : 
  151478             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  151479             : 
  151480             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  151481             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  151482             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  151483             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  151484             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  151485             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  151486             :           being used with the AST File I/O mechanism.
  151487             :        */
  151488             :           virtual bool isInMemoryPool() override;
  151489             : 
  151490             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  151491             : 
  151492             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  151493             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  151494             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  151495             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  151496             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  151497             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  151498             :           being used with the AST File I/O mechanism.
  151499             :        */
  151500             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  151501             : 
  151502             :       // DQ (4/30/2006): Modified to be a const function.
  151503             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  151504             : 
  151505             :           This functions is part of general support for many possible tools to operate 
  151506             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  151507             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  151508             :           less than the set of pointers used by the AST file I/O. This is part of
  151509             :           work implemented by Andreas, and support tools such as the AST graph generation.
  151510             : 
  151511             :           \warning This function can return unexpected data members and thus the 
  151512             :                    order and the number of elements is unpredicable and subject 
  151513             :                    to change.
  151514             : 
  151515             :           \returns STL vector of pairs of SgNode* and strings
  151516             :        */
  151517             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  151518             : 
  151519             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  151520             : 
  151521             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  151522             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  151523             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  151524             : 
  151525             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  151526             :                    and subject to change.
  151527             :        */
  151528             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  151529             : 
  151530             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  151531             : 
  151532             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  151533             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  151534             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  151535             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  151536             : 
  151537             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  151538             : 
  151539             :           \returns long
  151540             :        */
  151541             :           virtual long getChildIndex( SgNode* childNode ) const override;
  151542             : 
  151543             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  151544             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  151545             :       /* \brief Constructor for use by AST File I/O Mechanism
  151546             : 
  151547             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  151548             :           which obtained via fast binary file I/O from disk.
  151549             :        */
  151550             :        // SgPragmaDeclaration( SgPragmaDeclarationStorageClass& source );
  151551             : 
  151552             : 
  151553             : 
  151554             : 
  151555             : 
  151556             :  // JH (10/24/2005): methods added to support the ast file IO
  151557             :     private:
  151558             : 
  151559             :       /* name AST Memory Allocation Support Functions
  151560             :           \brief Memory allocations support....
  151561             : 
  151562             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  151563             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  151564             :           and support the AST File I/O Mechanism.
  151565             :        */
  151566             :       /* */
  151567             : 
  151568             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  151569             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  151570             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  151571             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  151572             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  151573             :           a correspinding one in the AST_FILE_IO class!
  151574             :        */
  151575             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  151576             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  151577             :       /* \brief Typedef used for low level memory access.
  151578             :        */
  151579             :        // typedef unsigned char* TestType;
  151580             : 
  151581             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  151582             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  151583             :       /* \brief Typedef used to hold memory addresses as values.
  151584             :        */
  151585             :        // typedef unsigned long  AddressType;
  151586             : 
  151587             : 
  151588             : 
  151589             :        // necessary, to have direct access to the p_freepointer and the private methods !
  151590             :       /*! \brief friend class declaration to support AST File I/O */
  151591             :           friend class AST_FILE_IO;
  151592             : 
  151593             :       /*! \brief friend class declaration to support AST File I/O */
  151594             :           friend class SgPragmaDeclarationStorageClass;
  151595             : 
  151596             :       /*! \brief friend class declaration to support AST File I/O */
  151597             :           friend class AstSpecificDataManagingClass;
  151598             : 
  151599             :       /*! \brief friend class declaration to support AST File I/O */
  151600             :           friend class AstSpecificDataManagingClassStorageClass;
  151601             :     public:
  151602             :       /*! \brief IR node constructor to support AST File I/O */
  151603             :           SgPragmaDeclaration( const SgPragmaDeclarationStorageClass& source );
  151604             : 
  151605             :  // private: // JJW hack
  151606             :        /*
  151607             :           name AST Memory Allocation Support Variables
  151608             :           Memory allocations support variables 
  151609             : 
  151610             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  151611             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  151612             :           and support the AST File I/O Mechanism.
  151613             :        */
  151614             :       /* */
  151615             : 
  151616             :     public:
  151617             : 
  151618             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  151619             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  151620             :       // virtual SgNode* addRegExpAttribute();
  151621             :       /*! \brief Support for AST matching using regular expression.
  151622             : 
  151623             :           This support is incomplete and the subject of current research to define 
  151624             :           RegEx trees to support inexact matching.
  151625             :        */
  151626             :           SgPragmaDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  151627             : 
  151628             : // *** COMMON CODE SECTION ENDS HERE ***
  151629             : 
  151630             : 
  151631             : // End of memberFunctionString
  151632             : // Start of memberFunctionString
  151633             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  151634             : 
  151635             :      // the generated cast function
  151636             :      // friend ROSE_DLL_API SgPragmaDeclaration* isSgPragmaDeclaration ( SgNode* s );
  151637             : 
  151638             :           typedef SgDeclarationStatement base_node_type;
  151639             : 
  151640             : 
  151641             : // End of memberFunctionString
  151642             : // Start of memberFunctionString
  151643             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  151644             : 
  151645             :           void post_construction_initialization() override;
  151646             : 
  151647             : 
  151648             : // End of memberFunctionString
  151649             : 
  151650             :      public: 
  151651             :          SgPragma* get_pragma() const;
  151652             :          void set_pragma(SgPragma* pragma);
  151653             : 
  151654             : 
  151655             :      public: 
  151656             :          virtual ~SgPragmaDeclaration();
  151657             : 
  151658             : 
  151659             :      public: 
  151660             :          SgPragmaDeclaration(Sg_File_Info* startOfConstruct , SgPragma* pragma = NULL); 
  151661             :          SgPragmaDeclaration(SgPragma* pragma); 
  151662             : 
  151663             :     protected:
  151664             : // Start of memberFunctionString
  151665             : SgPragma* p_pragma;
  151666             :           
  151667             : // End of memberFunctionString
  151668             : 
  151669             :     friend struct Rose::Traits::generated::describe_node_t<SgPragmaDeclaration>;
  151670             :     friend struct Rose::Traits::generated::describe_field_t<SgPragmaDeclaration, SgPragma*,&SgPragmaDeclaration::p_pragma>;
  151671             : 
  151672             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151673             : 
  151674             : 
  151675             :    };
  151676             : #endif
  151677             : 
  151678             : // postdeclarations for SgPragmaDeclaration
  151679             : 
  151680             : /* #line 151681 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151681             : 
  151682             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  151683             : 
  151684             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151685             : 
  151686             : 
  151687             : /* #line 151688 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151688             : 
  151689             : 
  151690             : 
  151691             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151692             : 
  151693             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  151694             : //      This code is automatically generated for each 
  151695             : //      terminal and non-terminal within the defined 
  151696             : //      grammar.  There is a simple way to change the 
  151697             : //      code to fix bugs etc.  See the ROSE README file
  151698             : //      for directions.
  151699             : 
  151700             : // tps: (02/22/2010): Adding DLL export requirements
  151701             : #include "rosedll.h"
  151702             : 
  151703             : // predeclarations for SgUsingDirectiveStatement
  151704             : 
  151705             : /* #line 151706 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151706             : 
  151707             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  151708             : 
  151709             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  151710             : 
  151711             : #if 1
  151712             : // Class Definition for SgUsingDirectiveStatement
  151713             : class ROSE_DLL_API SgUsingDirectiveStatement  : public SgDeclarationStatement
  151714             :    {
  151715             :      public:
  151716             : 
  151717             : 
  151718             : /* #line 151719 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  151719             : 
  151720             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  151721             : // Start of memberFunctionString
  151722             : /* #line 3158 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  151723             : 
  151724             : 
  151725             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  151726             :           virtual unsigned int cfgIndexForEnd() const override;
  151727             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  151728             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  151729             : #endif
  151730             : 
  151731             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  151732             :           virtual SgName get_mangled_name(void) const override;
  151733             : 
  151734             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  151735             :           int get_name_qualification_length() const;
  151736             :           void set_name_qualification_length(int name_qualification_length);
  151737             : 
  151738             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  151739             :           bool get_type_elaboration_required() const;
  151740             :           void set_type_elaboration_required(bool type_elaboration_required);
  151741             : 
  151742             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  151743             :           bool get_global_qualification_required() const;
  151744             :           void set_global_qualification_required(bool global_qualification_required);
  151745             : 
  151746             : 
  151747             : 
  151748             : // End of memberFunctionString
  151749             : // Start of memberFunctionString
  151750             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  151751             : 
  151752             : // *** COMMON CODE SECTION BEGINS HERE ***
  151753             : 
  151754             :     public:
  151755             : 
  151756             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  151757             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  151758             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  151759             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  151760             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  151761             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  151762             : 
  151763             :       /*! \brief returns a string representing the class name */
  151764             :           virtual std::string class_name() const override;
  151765             : 
  151766             :       /*! \brief returns new style SageIII enum values */
  151767             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  151768             : 
  151769             :       /*! \brief static variant value */
  151770             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  151771             :        // static const VariantT static_variant = V_SgUsingDirectiveStatement;
  151772             :           enum { static_variant = V_SgUsingDirectiveStatement };
  151773             : 
  151774             :        /* the generated cast function */
  151775             :       /*! \brief Casts pointer from base class to derived class */
  151776             :           ROSE_DLL_API friend       SgUsingDirectiveStatement* isSgUsingDirectiveStatement(       SgNode * s );
  151777             : 
  151778             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  151779             :           ROSE_DLL_API friend const SgUsingDirectiveStatement* isSgUsingDirectiveStatement( const SgNode * s );
  151780             : 
  151781             :      // ******************************************
  151782             :      // * Memory Pool / New / Delete
  151783             :      // ******************************************
  151784             : 
  151785             :      public:
  151786             :           /// \private
  151787             :           static const unsigned pool_size; //
  151788             :           /// \private
  151789             :           static std::vector<unsigned char *> pools; //
  151790             :           /// \private
  151791             :           static SgUsingDirectiveStatement * next_node; // 
  151792             : 
  151793             :           /// \private
  151794             :           static unsigned long initializeStorageClassArray(SgUsingDirectiveStatementStorageClass *); //
  151795             : 
  151796             :           /// \private
  151797             :           static void clearMemoryPool(); //
  151798             :           static void deleteMemoryPool(); //
  151799             : 
  151800             :           /// \private
  151801             :           static void extendMemoryPoolForFileIO(); //
  151802             : 
  151803             :           /// \private
  151804             :           static SgUsingDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  151805             :           /// \private
  151806             :           static SgUsingDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  151807             : 
  151808             :           /// \private
  151809             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  151810             :           /// \private
  151811             :           static void resetValidFreepointers(); //
  151812             :           /// \private
  151813             :           static unsigned long getNumberOfLastValidPointer(); //
  151814             : 
  151815             : 
  151816             : #if defined(INLINE_FUNCTIONS)
  151817             :       /*! \brief returns pointer to newly allocated IR node */
  151818             :           inline void *operator new (size_t size);
  151819             : #else
  151820             :       /*! \brief returns pointer to newly allocated IR node */
  151821             :           void *operator new (size_t size);
  151822             : #endif
  151823             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  151824             :           void operator delete (void* pointer, size_t size);
  151825             : 
  151826             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  151827           2 :           void operator delete (void* pointer)
  151828             :              {
  151829             :             // This is the generated delete operator...
  151830           2 :                SgUsingDirectiveStatement::operator delete (pointer,sizeof(SgUsingDirectiveStatement));
  151831             :              }
  151832             : 
  151833             :       /*! \brief Returns the total number of IR nodes of this type */
  151834             :           static size_t numberOfNodes();
  151835             : 
  151836             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  151837             :           static size_t memoryUsage();
  151838             : 
  151839             :       // End of scope which started in IR nodes specific code 
  151840             :       /* */
  151841             : 
  151842             :       /* name Internal Functions
  151843             :           \brief Internal functions ... incomplete-documentation
  151844             : 
  151845             :           These functions have been made public as part of the design, but they are suggested for internal use 
  151846             :           or by particularly knowledgeable users for specialized tools or applications.
  151847             : 
  151848             :           \internal We could not make these private because they are required by user for special purposes. And 
  151849             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  151850             :          
  151851             :        */
  151852             : 
  151853             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  151854             :        // overridden in every class by *generated* implementation
  151855             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  151856             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  151857             :        // MS: 06/28/02 container of names of variables or container indices 
  151858             :        // used used in the traversal to access AST successor nodes
  151859             :        // overridden in every class by *generated* implementation
  151860             :       /*! \brief container of names of variables or container indices used used in the traversal
  151861             :           to access AST successor nodes overridden in every class by *generated* implementation */
  151862             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  151863             : 
  151864             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  151865             :        // than all the vector copies. The implementation for these functions is generated for each class.
  151866             :       /*! \brief return number of children in the traversal successor list */
  151867             :           virtual size_t get_numberOfTraversalSuccessors() override;
  151868             :       /*! \brief index-based access to traversal successors by index number */
  151869             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  151870             :       /*! \brief index-based access to traversal successors by child node */
  151871             :           virtual size_t get_childIndex(SgNode *child) override;
  151872             : 
  151873             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  151874             :        // MS: 08/16/2002 method for generating RTI information
  151875             :       /*! \brief return C++ Runtime-Time-Information */
  151876             :           virtual RTIReturnType roseRTI() override;
  151877             : #endif
  151878             :       /* */
  151879             : 
  151880             : 
  151881             : 
  151882             :       /* name Deprecated Functions
  151883             :           \brief Deprecated functions ... incomplete-documentation
  151884             : 
  151885             :           These functions have been deprecated from use.
  151886             :        */
  151887             :       /* */
  151888             : 
  151889             :       /*! returns a C style string (char*) representing the class name */
  151890             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  151891             : 
  151892             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  151893             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  151894             : #if 0
  151895             :       /*! returns old style Sage II enum values */
  151896             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  151897             :       /*! returns old style Sage II enum values */
  151898             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  151899             : #endif
  151900             :       /* */
  151901             : 
  151902             : 
  151903             : 
  151904             : 
  151905             :      public:
  151906             :       /* name Traversal Support Functions
  151907             :           \brief Traversal support functions ... incomplete-documentation
  151908             : 
  151909             :           These functions have been made public as part of the design, but they are suggested for internal use 
  151910             :           or by particularly knowledgable users for specialized tools or applications.
  151911             :        */
  151912             :       /* */
  151913             : 
  151914             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  151915             :        // (inferior to ROSE traversal mechanism, experimental).
  151916             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  151917             :        */
  151918             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  151919             : 
  151920             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  151921             :       /*! \brief support for the classic visitor pattern done in GoF */
  151922             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  151923             : 
  151924             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  151925             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  151926             :        */
  151927             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  151928             : 
  151929             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  151930             :        */
  151931             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  151932             : 
  151933             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  151934             :        // This traversal helps support internal tools that call static member functions.
  151935             :        // note: this function operates on the memory pools.
  151936             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  151937             :        */
  151938             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  151939             :       /* */
  151940             : 
  151941             : 
  151942             :      public:
  151943             :       /* name Memory Allocation Functions
  151944             :           \brief Memory allocations functions ... incomplete-documentation
  151945             : 
  151946             :           These functions have been made public as part of the design, but they are suggested for internal use 
  151947             :           or by particularly knowledgable users for specialized tools or applications.
  151948             :        */
  151949             :       /* */
  151950             : 
  151951             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  151952             : 
  151953             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  151954             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  151955             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  151956             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  151957             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  151958             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  151959             :           being used with the AST File I/O mechanism.
  151960             :        */
  151961             :           virtual bool isInMemoryPool() override;
  151962             : 
  151963             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  151964             : 
  151965             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  151966             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  151967             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  151968             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  151969             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  151970             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  151971             :           being used with the AST File I/O mechanism.
  151972             :        */
  151973             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  151974             : 
  151975             :       // DQ (4/30/2006): Modified to be a const function.
  151976             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  151977             : 
  151978             :           This functions is part of general support for many possible tools to operate 
  151979             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  151980             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  151981             :           less than the set of pointers used by the AST file I/O. This is part of
  151982             :           work implemented by Andreas, and support tools such as the AST graph generation.
  151983             : 
  151984             :           \warning This function can return unexpected data members and thus the 
  151985             :                    order and the number of elements is unpredicable and subject 
  151986             :                    to change.
  151987             : 
  151988             :           \returns STL vector of pairs of SgNode* and strings
  151989             :        */
  151990             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  151991             : 
  151992             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  151993             : 
  151994             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  151995             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  151996             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  151997             : 
  151998             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  151999             :                    and subject to change.
  152000             :        */
  152001             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  152002             : 
  152003             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  152004             : 
  152005             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  152006             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  152007             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  152008             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  152009             : 
  152010             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  152011             : 
  152012             :           \returns long
  152013             :        */
  152014             :           virtual long getChildIndex( SgNode* childNode ) const override;
  152015             : 
  152016             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  152017             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  152018             :       /* \brief Constructor for use by AST File I/O Mechanism
  152019             : 
  152020             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  152021             :           which obtained via fast binary file I/O from disk.
  152022             :        */
  152023             :        // SgUsingDirectiveStatement( SgUsingDirectiveStatementStorageClass& source );
  152024             : 
  152025             : 
  152026             : 
  152027             : 
  152028             : 
  152029             :  // JH (10/24/2005): methods added to support the ast file IO
  152030             :     private:
  152031             : 
  152032             :       /* name AST Memory Allocation Support Functions
  152033             :           \brief Memory allocations support....
  152034             : 
  152035             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  152036             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  152037             :           and support the AST File I/O Mechanism.
  152038             :        */
  152039             :       /* */
  152040             : 
  152041             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  152042             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  152043             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  152044             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  152045             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  152046             :           a correspinding one in the AST_FILE_IO class!
  152047             :        */
  152048             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  152049             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  152050             :       /* \brief Typedef used for low level memory access.
  152051             :        */
  152052             :        // typedef unsigned char* TestType;
  152053             : 
  152054             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  152055             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  152056             :       /* \brief Typedef used to hold memory addresses as values.
  152057             :        */
  152058             :        // typedef unsigned long  AddressType;
  152059             : 
  152060             : 
  152061             : 
  152062             :        // necessary, to have direct access to the p_freepointer and the private methods !
  152063             :       /*! \brief friend class declaration to support AST File I/O */
  152064             :           friend class AST_FILE_IO;
  152065             : 
  152066             :       /*! \brief friend class declaration to support AST File I/O */
  152067             :           friend class SgUsingDirectiveStatementStorageClass;
  152068             : 
  152069             :       /*! \brief friend class declaration to support AST File I/O */
  152070             :           friend class AstSpecificDataManagingClass;
  152071             : 
  152072             :       /*! \brief friend class declaration to support AST File I/O */
  152073             :           friend class AstSpecificDataManagingClassStorageClass;
  152074             :     public:
  152075             :       /*! \brief IR node constructor to support AST File I/O */
  152076             :           SgUsingDirectiveStatement( const SgUsingDirectiveStatementStorageClass& source );
  152077             : 
  152078             :  // private: // JJW hack
  152079             :        /*
  152080             :           name AST Memory Allocation Support Variables
  152081             :           Memory allocations support variables 
  152082             : 
  152083             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  152084             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  152085             :           and support the AST File I/O Mechanism.
  152086             :        */
  152087             :       /* */
  152088             : 
  152089             :     public:
  152090             : 
  152091             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  152092             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  152093             :       // virtual SgNode* addRegExpAttribute();
  152094             :       /*! \brief Support for AST matching using regular expression.
  152095             : 
  152096             :           This support is incomplete and the subject of current research to define 
  152097             :           RegEx trees to support inexact matching.
  152098             :        */
  152099             :           SgUsingDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  152100             : 
  152101             : // *** COMMON CODE SECTION ENDS HERE ***
  152102             : 
  152103             : 
  152104             : // End of memberFunctionString
  152105             : // Start of memberFunctionString
  152106             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  152107             : 
  152108             :      // the generated cast function
  152109             :      // friend ROSE_DLL_API SgUsingDirectiveStatement* isSgUsingDirectiveStatement ( SgNode* s );
  152110             : 
  152111             :           typedef SgDeclarationStatement base_node_type;
  152112             : 
  152113             : 
  152114             : // End of memberFunctionString
  152115             : // Start of memberFunctionString
  152116             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  152117             : 
  152118             :           void post_construction_initialization() override;
  152119             : 
  152120             : 
  152121             : // End of memberFunctionString
  152122             : 
  152123             :      public: 
  152124             :          SgNamespaceDeclarationStatement* get_namespaceDeclaration() const;
  152125             :          void set_namespaceDeclaration(SgNamespaceDeclarationStatement* namespaceDeclaration);
  152126             : 
  152127             : 
  152128             : 
  152129             : 
  152130             : 
  152131             :      public: 
  152132             :          virtual ~SgUsingDirectiveStatement();
  152133             : 
  152134             : 
  152135             :      public: 
  152136             :          SgUsingDirectiveStatement(Sg_File_Info* startOfConstruct , SgNamespaceDeclarationStatement* namespaceDeclaration = NULL); 
  152137             :          SgUsingDirectiveStatement(SgNamespaceDeclarationStatement* namespaceDeclaration); 
  152138             : 
  152139             :     protected:
  152140             : // Start of memberFunctionString
  152141             : SgNamespaceDeclarationStatement* p_namespaceDeclaration;
  152142             :           
  152143             : // End of memberFunctionString
  152144             : // Start of memberFunctionString
  152145             : int p_name_qualification_length;
  152146             :           
  152147             : // End of memberFunctionString
  152148             : // Start of memberFunctionString
  152149             : bool p_type_elaboration_required;
  152150             :           
  152151             : // End of memberFunctionString
  152152             : // Start of memberFunctionString
  152153             : bool p_global_qualification_required;
  152154             :           
  152155             : // End of memberFunctionString
  152156             : 
  152157             :     friend struct Rose::Traits::generated::describe_node_t<SgUsingDirectiveStatement>;
  152158             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDirectiveStatement, SgNamespaceDeclarationStatement*,&SgUsingDirectiveStatement::p_namespaceDeclaration>;
  152159             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDirectiveStatement, int,&SgUsingDirectiveStatement::p_name_qualification_length>;
  152160             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDirectiveStatement, bool,&SgUsingDirectiveStatement::p_type_elaboration_required>;
  152161             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDirectiveStatement, bool,&SgUsingDirectiveStatement::p_global_qualification_required>;
  152162             : 
  152163             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152164             : 
  152165             : 
  152166             :    };
  152167             : #endif
  152168             : 
  152169             : // postdeclarations for SgUsingDirectiveStatement
  152170             : 
  152171             : /* #line 152172 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152172             : 
  152173             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  152174             : 
  152175             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152176             : 
  152177             : 
  152178             : /* #line 152179 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152179             : 
  152180             : 
  152181             : 
  152182             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152183             : 
  152184             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  152185             : //      This code is automatically generated for each 
  152186             : //      terminal and non-terminal within the defined 
  152187             : //      grammar.  There is a simple way to change the 
  152188             : //      code to fix bugs etc.  See the ROSE README file
  152189             : //      for directions.
  152190             : 
  152191             : // tps: (02/22/2010): Adding DLL export requirements
  152192             : #include "rosedll.h"
  152193             : 
  152194             : // predeclarations for SgClassDeclaration
  152195             : 
  152196             : /* #line 152197 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152197             : 
  152198             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  152199             : 
  152200             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152201             : 
  152202             : #if 1
  152203             : // Class Definition for SgClassDeclaration
  152204             : class ROSE_DLL_API SgClassDeclaration  : public SgDeclarationStatement
  152205             :    {
  152206             :      public:
  152207             : 
  152208             : 
  152209             : /* #line 152210 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152210             : 
  152211             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  152212             : // Start of memberFunctionString
  152213             : /* #line 2057 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  152214             : 
  152215             : 
  152216             :       /*! A declaration can be of either class, struct, union, or ... */
  152217             :           enum class_types
  152218             :              {
  152219             :                e_class,              /*!< class declaration (default) */
  152220             :                e_struct,             /*!< struct declaration */
  152221             :                e_union,              /*!< union declaration */
  152222             :                e_template_parameter, /*!< type parameter in a template declaration */
  152223             :                e_fortran_module,     /*!< A Fortran module declaration */
  152224             :              };
  152225             : 
  152226             :           virtual SgName get_qualified_name() const;
  152227             : 
  152228             :        // RV (1/31/2006): Added this mangler to replace 'get_mangled_qualified_name'
  152229             :           virtual SgName get_mangled_name (void) const override;
  152230             : 
  152231             :       //! \deprecated by RV (1/31/2006)
  152232             :           SgName get_mangled_qualified_name(int & cnt );
  152233             : 
  152234             :      protected:
  152235             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  152236             : 
  152237             :      public:
  152238             : 
  152239             :       //! Support for where the scope is explicitly required
  152240             :           virtual bool hasExplicitScope() const override;
  152241             : 
  152242             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  152243             :           virtual unsigned int cfgIndexForEnd() const override;
  152244             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  152245             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  152246             : #endif
  152247             : 
  152248             :        // DQ (2/10/2007): I think this should have been marked virtual
  152249             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  152250             : 
  152251             : #if ALT_FIXUP_COPY
  152252             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  152253             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  152254             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  152255             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  152256             : #else
  152257             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  152258             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  152259             : #endif
  152260             : 
  152261             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  152262             :           int get_name_qualification_length() const;
  152263             :           void set_name_qualification_length(int name_qualification_length);
  152264             : 
  152265             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  152266             :           bool get_type_elaboration_required() const;
  152267             :           void set_type_elaboration_required(bool type_elaboration_required);
  152268             : 
  152269             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  152270             :           bool get_global_qualification_required() const;
  152271             :           void set_global_qualification_required(bool global_qualification_required);
  152272             : 
  152273             :      protected:
  152274             :        // GB (09/26/2007): Added this function as part of the move to index-based traversals.
  152275             :           SgClassDefinition *compute_classDefinition() const;
  152276             : 
  152277             : 
  152278             : 
  152279             : // End of memberFunctionString
  152280             : // Start of memberFunctionString
  152281             : /* #line 930 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  152282             : 
  152283             : 
  152284             :      public:
  152285             :           bool isSpecialization() const;
  152286             :           bool isPartialSpecialization() const;
  152287             : 
  152288             : 
  152289             : 
  152290             : // End of memberFunctionString
  152291             : // Start of memberFunctionString
  152292             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  152293             : 
  152294             : // *** COMMON CODE SECTION BEGINS HERE ***
  152295             : 
  152296             :     public:
  152297             : 
  152298             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  152299             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  152300             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  152301             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  152302             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  152303             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  152304             : 
  152305             :       /*! \brief returns a string representing the class name */
  152306             :           virtual std::string class_name() const override;
  152307             : 
  152308             :       /*! \brief returns new style SageIII enum values */
  152309             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  152310             : 
  152311             :       /*! \brief static variant value */
  152312             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  152313             :        // static const VariantT static_variant = V_SgClassDeclaration;
  152314             :           enum { static_variant = V_SgClassDeclaration };
  152315             : 
  152316             :        /* the generated cast function */
  152317             :       /*! \brief Casts pointer from base class to derived class */
  152318             :           ROSE_DLL_API friend       SgClassDeclaration* isSgClassDeclaration(       SgNode * s );
  152319             : 
  152320             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  152321             :           ROSE_DLL_API friend const SgClassDeclaration* isSgClassDeclaration( const SgNode * s );
  152322             : 
  152323             :      // ******************************************
  152324             :      // * Memory Pool / New / Delete
  152325             :      // ******************************************
  152326             : 
  152327             :      public:
  152328             :           /// \private
  152329             :           static const unsigned pool_size; //
  152330             :           /// \private
  152331             :           static std::vector<unsigned char *> pools; //
  152332             :           /// \private
  152333             :           static SgClassDeclaration * next_node; // 
  152334             : 
  152335             :           /// \private
  152336             :           static unsigned long initializeStorageClassArray(SgClassDeclarationStorageClass *); //
  152337             : 
  152338             :           /// \private
  152339             :           static void clearMemoryPool(); //
  152340             :           static void deleteMemoryPool(); //
  152341             : 
  152342             :           /// \private
  152343             :           static void extendMemoryPoolForFileIO(); //
  152344             : 
  152345             :           /// \private
  152346             :           static SgClassDeclaration * getPointerFromGlobalIndex(unsigned long); //
  152347             :           /// \private
  152348             :           static SgClassDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  152349             : 
  152350             :           /// \private
  152351             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  152352             :           /// \private
  152353             :           static void resetValidFreepointers(); //
  152354             :           /// \private
  152355             :           static unsigned long getNumberOfLastValidPointer(); //
  152356             : 
  152357             : 
  152358             : #if defined(INLINE_FUNCTIONS)
  152359             :       /*! \brief returns pointer to newly allocated IR node */
  152360             :           inline void *operator new (size_t size);
  152361             : #else
  152362             :       /*! \brief returns pointer to newly allocated IR node */
  152363             :           void *operator new (size_t size);
  152364             : #endif
  152365             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  152366             :           void operator delete (void* pointer, size_t size);
  152367             : 
  152368             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  152369         742 :           void operator delete (void* pointer)
  152370             :              {
  152371             :             // This is the generated delete operator...
  152372         742 :                SgClassDeclaration::operator delete (pointer,sizeof(SgClassDeclaration));
  152373             :              }
  152374             : 
  152375             :       /*! \brief Returns the total number of IR nodes of this type */
  152376             :           static size_t numberOfNodes();
  152377             : 
  152378             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  152379             :           static size_t memoryUsage();
  152380             : 
  152381             :       // End of scope which started in IR nodes specific code 
  152382             :       /* */
  152383             : 
  152384             :       /* name Internal Functions
  152385             :           \brief Internal functions ... incomplete-documentation
  152386             : 
  152387             :           These functions have been made public as part of the design, but they are suggested for internal use 
  152388             :           or by particularly knowledgeable users for specialized tools or applications.
  152389             : 
  152390             :           \internal We could not make these private because they are required by user for special purposes. And 
  152391             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  152392             :          
  152393             :        */
  152394             : 
  152395             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  152396             :        // overridden in every class by *generated* implementation
  152397             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  152398             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  152399             :        // MS: 06/28/02 container of names of variables or container indices 
  152400             :        // used used in the traversal to access AST successor nodes
  152401             :        // overridden in every class by *generated* implementation
  152402             :       /*! \brief container of names of variables or container indices used used in the traversal
  152403             :           to access AST successor nodes overridden in every class by *generated* implementation */
  152404             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  152405             : 
  152406             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  152407             :        // than all the vector copies. The implementation for these functions is generated for each class.
  152408             :       /*! \brief return number of children in the traversal successor list */
  152409             :           virtual size_t get_numberOfTraversalSuccessors() override;
  152410             :       /*! \brief index-based access to traversal successors by index number */
  152411             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  152412             :       /*! \brief index-based access to traversal successors by child node */
  152413             :           virtual size_t get_childIndex(SgNode *child) override;
  152414             : 
  152415             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  152416             :        // MS: 08/16/2002 method for generating RTI information
  152417             :       /*! \brief return C++ Runtime-Time-Information */
  152418             :           virtual RTIReturnType roseRTI() override;
  152419             : #endif
  152420             :       /* */
  152421             : 
  152422             : 
  152423             : 
  152424             :       /* name Deprecated Functions
  152425             :           \brief Deprecated functions ... incomplete-documentation
  152426             : 
  152427             :           These functions have been deprecated from use.
  152428             :        */
  152429             :       /* */
  152430             : 
  152431             :       /*! returns a C style string (char*) representing the class name */
  152432             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  152433             : 
  152434             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  152435             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  152436             : #if 0
  152437             :       /*! returns old style Sage II enum values */
  152438             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  152439             :       /*! returns old style Sage II enum values */
  152440             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  152441             : #endif
  152442             :       /* */
  152443             : 
  152444             : 
  152445             : 
  152446             : 
  152447             :      public:
  152448             :       /* name Traversal Support Functions
  152449             :           \brief Traversal support functions ... incomplete-documentation
  152450             : 
  152451             :           These functions have been made public as part of the design, but they are suggested for internal use 
  152452             :           or by particularly knowledgable users for specialized tools or applications.
  152453             :        */
  152454             :       /* */
  152455             : 
  152456             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  152457             :        // (inferior to ROSE traversal mechanism, experimental).
  152458             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  152459             :        */
  152460             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  152461             : 
  152462             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  152463             :       /*! \brief support for the classic visitor pattern done in GoF */
  152464             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  152465             : 
  152466             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  152467             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  152468             :        */
  152469             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  152470             : 
  152471             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  152472             :        */
  152473             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  152474             : 
  152475             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  152476             :        // This traversal helps support internal tools that call static member functions.
  152477             :        // note: this function operates on the memory pools.
  152478             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  152479             :        */
  152480             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  152481             :       /* */
  152482             : 
  152483             : 
  152484             :      public:
  152485             :       /* name Memory Allocation Functions
  152486             :           \brief Memory allocations functions ... incomplete-documentation
  152487             : 
  152488             :           These functions have been made public as part of the design, but they are suggested for internal use 
  152489             :           or by particularly knowledgable users for specialized tools or applications.
  152490             :        */
  152491             :       /* */
  152492             : 
  152493             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  152494             : 
  152495             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  152496             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  152497             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  152498             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  152499             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  152500             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  152501             :           being used with the AST File I/O mechanism.
  152502             :        */
  152503             :           virtual bool isInMemoryPool() override;
  152504             : 
  152505             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  152506             : 
  152507             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  152508             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  152509             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  152510             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  152511             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  152512             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  152513             :           being used with the AST File I/O mechanism.
  152514             :        */
  152515             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  152516             : 
  152517             :       // DQ (4/30/2006): Modified to be a const function.
  152518             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  152519             : 
  152520             :           This functions is part of general support for many possible tools to operate 
  152521             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  152522             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  152523             :           less than the set of pointers used by the AST file I/O. This is part of
  152524             :           work implemented by Andreas, and support tools such as the AST graph generation.
  152525             : 
  152526             :           \warning This function can return unexpected data members and thus the 
  152527             :                    order and the number of elements is unpredicable and subject 
  152528             :                    to change.
  152529             : 
  152530             :           \returns STL vector of pairs of SgNode* and strings
  152531             :        */
  152532             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  152533             : 
  152534             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  152535             : 
  152536             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  152537             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  152538             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  152539             : 
  152540             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  152541             :                    and subject to change.
  152542             :        */
  152543             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  152544             : 
  152545             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  152546             : 
  152547             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  152548             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  152549             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  152550             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  152551             : 
  152552             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  152553             : 
  152554             :           \returns long
  152555             :        */
  152556             :           virtual long getChildIndex( SgNode* childNode ) const override;
  152557             : 
  152558             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  152559             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  152560             :       /* \brief Constructor for use by AST File I/O Mechanism
  152561             : 
  152562             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  152563             :           which obtained via fast binary file I/O from disk.
  152564             :        */
  152565             :        // SgClassDeclaration( SgClassDeclarationStorageClass& source );
  152566             : 
  152567             : 
  152568             : 
  152569             : 
  152570             : 
  152571             :  // JH (10/24/2005): methods added to support the ast file IO
  152572             :     private:
  152573             : 
  152574             :       /* name AST Memory Allocation Support Functions
  152575             :           \brief Memory allocations support....
  152576             : 
  152577             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  152578             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  152579             :           and support the AST File I/O Mechanism.
  152580             :        */
  152581             :       /* */
  152582             : 
  152583             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  152584             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  152585             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  152586             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  152587             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  152588             :           a correspinding one in the AST_FILE_IO class!
  152589             :        */
  152590             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  152591             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  152592             :       /* \brief Typedef used for low level memory access.
  152593             :        */
  152594             :        // typedef unsigned char* TestType;
  152595             : 
  152596             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  152597             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  152598             :       /* \brief Typedef used to hold memory addresses as values.
  152599             :        */
  152600             :        // typedef unsigned long  AddressType;
  152601             : 
  152602             : 
  152603             : 
  152604             :        // necessary, to have direct access to the p_freepointer and the private methods !
  152605             :       /*! \brief friend class declaration to support AST File I/O */
  152606             :           friend class AST_FILE_IO;
  152607             : 
  152608             :       /*! \brief friend class declaration to support AST File I/O */
  152609             :           friend class SgClassDeclarationStorageClass;
  152610             : 
  152611             :       /*! \brief friend class declaration to support AST File I/O */
  152612             :           friend class AstSpecificDataManagingClass;
  152613             : 
  152614             :       /*! \brief friend class declaration to support AST File I/O */
  152615             :           friend class AstSpecificDataManagingClassStorageClass;
  152616             :     public:
  152617             :       /*! \brief IR node constructor to support AST File I/O */
  152618             :           SgClassDeclaration( const SgClassDeclarationStorageClass& source );
  152619             : 
  152620             :  // private: // JJW hack
  152621             :        /*
  152622             :           name AST Memory Allocation Support Variables
  152623             :           Memory allocations support variables 
  152624             : 
  152625             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  152626             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  152627             :           and support the AST File I/O Mechanism.
  152628             :        */
  152629             :       /* */
  152630             : 
  152631             :     public:
  152632             : 
  152633             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  152634             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  152635             :       // virtual SgNode* addRegExpAttribute();
  152636             :       /*! \brief Support for AST matching using regular expression.
  152637             : 
  152638             :           This support is incomplete and the subject of current research to define 
  152639             :           RegEx trees to support inexact matching.
  152640             :        */
  152641             :           SgClassDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  152642             : 
  152643             : // *** COMMON CODE SECTION ENDS HERE ***
  152644             : 
  152645             : 
  152646             : // End of memberFunctionString
  152647             : // Start of memberFunctionString
  152648             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  152649             : 
  152650             :      // the generated cast function
  152651             :      // friend ROSE_DLL_API SgClassDeclaration* isSgClassDeclaration ( SgNode* s );
  152652             : 
  152653             :           typedef SgDeclarationStatement base_node_type;
  152654             : 
  152655             : 
  152656             : // End of memberFunctionString
  152657             : // Start of memberFunctionString
  152658             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  152659             : 
  152660             :           void post_construction_initialization() override;
  152661             : 
  152662             : 
  152663             : // End of memberFunctionString
  152664             : 
  152665             :      public: 
  152666             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  152667             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  152668             : 
  152669             :      public: 
  152670             :          SgClassDeclaration::class_types get_class_type() const;
  152671             :          void set_class_type(SgClassDeclaration::class_types class_type);
  152672             : 
  152673             :      public: 
  152674             :          SgClassType* get_type() const /* (getDataAccessFunctionPrototypeString) */;
  152675             :          void set_type(SgClassType* type) /* (getDataAccessFunctionPrototypeString) */;
  152676             : 
  152677             :      public: 
  152678             :          SgClassDefinition* get_definition() const;
  152679             :          void set_definition(SgClassDefinition* definition);
  152680             : 
  152681             :      public: 
  152682             :          SgScopeStatement* get_scope() const override /* (getDataAccessFunctionPrototypeString) */;
  152683             :          void set_scope(SgScopeStatement* scope) override /* (getDataAccessFunctionPrototypeString) */;
  152684             : 
  152685             :      public: 
  152686             :          SgDeclarationStatement::template_specialization_enum get_specialization() const;
  152687             :          void set_specialization(SgDeclarationStatement::template_specialization_enum specialization);
  152688             : 
  152689             :      public: 
  152690             :          bool get_from_template() const;
  152691             :          void set_from_template(bool from_template);
  152692             : 
  152693             :      public: 
  152694             :          bool get_fixupScope() const;
  152695             :          void set_fixupScope(bool fixupScope);
  152696             : 
  152697             :      public: 
  152698             :          bool get_isUnNamed() const;
  152699             :          void set_isUnNamed(bool isUnNamed);
  152700             : 
  152701             :      public: 
  152702             :          bool get_explicit_annotation_interface() const;
  152703             :          void set_explicit_annotation_interface(bool explicit_annotation_interface);
  152704             : 
  152705             :      public: 
  152706             :          bool get_explicit_interface() const;
  152707             :          void set_explicit_interface(bool explicit_interface);
  152708             : 
  152709             :      public: 
  152710             :          bool get_explicit_enum() const;
  152711             :          void set_explicit_enum(bool explicit_enum);
  152712             : 
  152713             :      public: 
  152714             :          bool get_explicit_anonymous() const;
  152715             :          void set_explicit_anonymous(bool explicit_anonymous);
  152716             : 
  152717             :      public: 
  152718             :          SgExprListExp* get_decoratorList() const;
  152719             :          void set_decoratorList(SgExprListExp* decoratorList);
  152720             : 
  152721             : 
  152722             : 
  152723             : 
  152724             :      public: 
  152725             :          bool get_isAutonomousDeclaration() const;
  152726             :          void set_isAutonomousDeclaration(bool isAutonomousDeclaration);
  152727             : 
  152728             :      public: 
  152729             :          bool get_isRepresentingTemplateParameterInTemplateDeclaration() const;
  152730             :          void set_isRepresentingTemplateParameterInTemplateDeclaration(bool isRepresentingTemplateParameterInTemplateDeclaration);
  152731             : 
  152732             :      public: 
  152733             :          SgBaseClass* get_adaParentType() const;
  152734             :          void set_adaParentType(SgBaseClass* adaParentType);
  152735             : 
  152736             : 
  152737             :      public: 
  152738             :          virtual ~SgClassDeclaration();
  152739             : 
  152740             : 
  152741             :      public: 
  152742             :          SgClassDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgClassDeclaration::class_types class_type = SgClassDeclaration::e_class, SgClassType* type = NULL, SgClassDefinition* definition = NULL); 
  152743             :          SgClassDeclaration(SgName name, SgClassDeclaration::class_types class_type, SgClassType* type, SgClassDefinition* definition); 
  152744             : 
  152745             :     protected:
  152746             : // Start of memberFunctionString
  152747             : SgName p_name;
  152748             :           
  152749             : // End of memberFunctionString
  152750             : // Start of memberFunctionString
  152751             : SgClassDeclaration::class_types p_class_type;
  152752             :           
  152753             : // End of memberFunctionString
  152754             : // Start of memberFunctionString
  152755             : SgClassType* p_type;
  152756             :           
  152757             : // End of memberFunctionString
  152758             : // Start of memberFunctionString
  152759             : SgClassDefinition* p_definition;
  152760             :           
  152761             : // End of memberFunctionString
  152762             : // Start of memberFunctionString
  152763             : SgScopeStatement* p_scope;
  152764             :           
  152765             : // End of memberFunctionString
  152766             : // Start of memberFunctionString
  152767             : SgDeclarationStatement::template_specialization_enum p_specialization;
  152768             :           
  152769             : // End of memberFunctionString
  152770             : // Start of memberFunctionString
  152771             : bool p_from_template;
  152772             :           
  152773             : // End of memberFunctionString
  152774             : // Start of memberFunctionString
  152775             : bool p_fixupScope;
  152776             :           
  152777             : // End of memberFunctionString
  152778             : // Start of memberFunctionString
  152779             : bool p_isUnNamed;
  152780             :           
  152781             : // End of memberFunctionString
  152782             : // Start of memberFunctionString
  152783             : bool p_explicit_annotation_interface;
  152784             :           
  152785             : // End of memberFunctionString
  152786             : // Start of memberFunctionString
  152787             : bool p_explicit_interface;
  152788             :           
  152789             : // End of memberFunctionString
  152790             : // Start of memberFunctionString
  152791             : bool p_explicit_enum;
  152792             :           
  152793             : // End of memberFunctionString
  152794             : // Start of memberFunctionString
  152795             : bool p_explicit_anonymous;
  152796             :           
  152797             : // End of memberFunctionString
  152798             : // Start of memberFunctionString
  152799             : SgExprListExp* p_decoratorList;
  152800             :           
  152801             : // End of memberFunctionString
  152802             : // Start of memberFunctionString
  152803             : int p_name_qualification_length;
  152804             :           
  152805             : // End of memberFunctionString
  152806             : // Start of memberFunctionString
  152807             : bool p_type_elaboration_required;
  152808             :           
  152809             : // End of memberFunctionString
  152810             : // Start of memberFunctionString
  152811             : bool p_global_qualification_required;
  152812             :           
  152813             : // End of memberFunctionString
  152814             : // Start of memberFunctionString
  152815             : bool p_isAutonomousDeclaration;
  152816             :           
  152817             : // End of memberFunctionString
  152818             : // Start of memberFunctionString
  152819             : bool p_isRepresentingTemplateParameterInTemplateDeclaration;
  152820             :           
  152821             : // End of memberFunctionString
  152822             : // Start of memberFunctionString
  152823             : SgBaseClass* p_adaParentType;
  152824             :           
  152825             : // End of memberFunctionString
  152826             : 
  152827             :     friend struct Rose::Traits::generated::describe_node_t<SgClassDeclaration>;
  152828             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgName,&SgClassDeclaration::p_name>;
  152829             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgClassDeclaration::class_types,&SgClassDeclaration::p_class_type>;
  152830             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgClassType*,&SgClassDeclaration::p_type>;
  152831             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgClassDefinition*,&SgClassDeclaration::p_definition>;
  152832             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgScopeStatement*,&SgClassDeclaration::p_scope>;
  152833             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgDeclarationStatement::template_specialization_enum,&SgClassDeclaration::p_specialization>;
  152834             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_from_template>;
  152835             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_fixupScope>;
  152836             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_isUnNamed>;
  152837             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_explicit_annotation_interface>;
  152838             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_explicit_interface>;
  152839             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_explicit_enum>;
  152840             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_explicit_anonymous>;
  152841             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgExprListExp*,&SgClassDeclaration::p_decoratorList>;
  152842             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, int,&SgClassDeclaration::p_name_qualification_length>;
  152843             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_type_elaboration_required>;
  152844             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_global_qualification_required>;
  152845             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_isAutonomousDeclaration>;
  152846             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, bool,&SgClassDeclaration::p_isRepresentingTemplateParameterInTemplateDeclaration>;
  152847             :     friend struct Rose::Traits::generated::describe_field_t<SgClassDeclaration, SgBaseClass*,&SgClassDeclaration::p_adaParentType>;
  152848             : 
  152849             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152850             : 
  152851             : 
  152852             :    };
  152853             : #endif
  152854             : 
  152855             : // postdeclarations for SgClassDeclaration
  152856             : 
  152857             : /* #line 152858 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152858             : 
  152859             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  152860             : 
  152861             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152862             : 
  152863             : 
  152864             : /* #line 152865 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152865             : 
  152866             : 
  152867             : 
  152868             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152869             : 
  152870             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  152871             : //      This code is automatically generated for each 
  152872             : //      terminal and non-terminal within the defined 
  152873             : //      grammar.  There is a simple way to change the 
  152874             : //      code to fix bugs etc.  See the ROSE README file
  152875             : //      for directions.
  152876             : 
  152877             : // tps: (02/22/2010): Adding DLL export requirements
  152878             : #include "rosedll.h"
  152879             : 
  152880             : // predeclarations for SgTemplateClassDeclaration
  152881             : 
  152882             : /* #line 152883 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152883             : 
  152884             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  152885             : 
  152886             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  152887             : 
  152888             : #if 1
  152889             : // Class Definition for SgTemplateClassDeclaration
  152890             : class ROSE_DLL_API SgTemplateClassDeclaration  : public SgClassDeclaration
  152891             :    {
  152892             :      public:
  152893             : 
  152894             : 
  152895             : /* #line 152896 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  152896             : 
  152897             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  152898             : // Start of memberFunctionString
  152899             : /* #line 2803 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  152900             : 
  152901             : 
  152902             :           typedef SgTemplateInstantiationDecl instantiation_kind_t;
  152903             : 
  152904             :       /*! A template declaration can be of either class, struct, or union */
  152905             :           enum class_types
  152906             :              {
  152907             :                e_class,             /*!< class declaration (default) */
  152908             :                e_struct,            /*!< struct declaration */
  152909             :                e_union,             /*!< union declaration */
  152910             :                e_template_parameter /*!< type parameter in a template declaration */
  152911             :              };
  152912             : 
  152913             : // DQ (9/26/2012): We can't use these macros in the header files else they would require the rose_config.h
  152914             : // file to be defined for all user source code (which we can't allow for portability reasons).
  152915             :        // DQ (9/10/2012): Added general name mangling for new template class declaration IR node.
  152916             :           virtual SgName get_mangled_name(void) const override;
  152917             : 
  152918             : 
  152919             : 
  152920             : // End of memberFunctionString
  152921             : // Start of memberFunctionString
  152922             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  152923             : 
  152924             : // *** COMMON CODE SECTION BEGINS HERE ***
  152925             : 
  152926             :     public:
  152927             : 
  152928             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  152929             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  152930             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  152931             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  152932             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  152933             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  152934             : 
  152935             :       /*! \brief returns a string representing the class name */
  152936             :           virtual std::string class_name() const override;
  152937             : 
  152938             :       /*! \brief returns new style SageIII enum values */
  152939             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  152940             : 
  152941             :       /*! \brief static variant value */
  152942             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  152943             :        // static const VariantT static_variant = V_SgTemplateClassDeclaration;
  152944             :           enum { static_variant = V_SgTemplateClassDeclaration };
  152945             : 
  152946             :        /* the generated cast function */
  152947             :       /*! \brief Casts pointer from base class to derived class */
  152948             :           ROSE_DLL_API friend       SgTemplateClassDeclaration* isSgTemplateClassDeclaration(       SgNode * s );
  152949             : 
  152950             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  152951             :           ROSE_DLL_API friend const SgTemplateClassDeclaration* isSgTemplateClassDeclaration( const SgNode * s );
  152952             : 
  152953             :      // ******************************************
  152954             :      // * Memory Pool / New / Delete
  152955             :      // ******************************************
  152956             : 
  152957             :      public:
  152958             :           /// \private
  152959             :           static const unsigned pool_size; //
  152960             :           /// \private
  152961             :           static std::vector<unsigned char *> pools; //
  152962             :           /// \private
  152963             :           static SgTemplateClassDeclaration * next_node; // 
  152964             : 
  152965             :           /// \private
  152966             :           static unsigned long initializeStorageClassArray(SgTemplateClassDeclarationStorageClass *); //
  152967             : 
  152968             :           /// \private
  152969             :           static void clearMemoryPool(); //
  152970             :           static void deleteMemoryPool(); //
  152971             : 
  152972             :           /// \private
  152973             :           static void extendMemoryPoolForFileIO(); //
  152974             : 
  152975             :           /// \private
  152976             :           static SgTemplateClassDeclaration * getPointerFromGlobalIndex(unsigned long); //
  152977             :           /// \private
  152978             :           static SgTemplateClassDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  152979             : 
  152980             :           /// \private
  152981             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  152982             :           /// \private
  152983             :           static void resetValidFreepointers(); //
  152984             :           /// \private
  152985             :           static unsigned long getNumberOfLastValidPointer(); //
  152986             : 
  152987             : 
  152988             : #if defined(INLINE_FUNCTIONS)
  152989             :       /*! \brief returns pointer to newly allocated IR node */
  152990             :           inline void *operator new (size_t size);
  152991             : #else
  152992             :       /*! \brief returns pointer to newly allocated IR node */
  152993             :           void *operator new (size_t size);
  152994             : #endif
  152995             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  152996             :           void operator delete (void* pointer, size_t size);
  152997             : 
  152998             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  152999        2180 :           void operator delete (void* pointer)
  153000             :              {
  153001             :             // This is the generated delete operator...
  153002        2180 :                SgTemplateClassDeclaration::operator delete (pointer,sizeof(SgTemplateClassDeclaration));
  153003             :              }
  153004             : 
  153005             :       /*! \brief Returns the total number of IR nodes of this type */
  153006             :           static size_t numberOfNodes();
  153007             : 
  153008             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  153009             :           static size_t memoryUsage();
  153010             : 
  153011             :       // End of scope which started in IR nodes specific code 
  153012             :       /* */
  153013             : 
  153014             :       /* name Internal Functions
  153015             :           \brief Internal functions ... incomplete-documentation
  153016             : 
  153017             :           These functions have been made public as part of the design, but they are suggested for internal use 
  153018             :           or by particularly knowledgeable users for specialized tools or applications.
  153019             : 
  153020             :           \internal We could not make these private because they are required by user for special purposes. And 
  153021             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  153022             :          
  153023             :        */
  153024             : 
  153025             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  153026             :        // overridden in every class by *generated* implementation
  153027             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  153028             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  153029             :        // MS: 06/28/02 container of names of variables or container indices 
  153030             :        // used used in the traversal to access AST successor nodes
  153031             :        // overridden in every class by *generated* implementation
  153032             :       /*! \brief container of names of variables or container indices used used in the traversal
  153033             :           to access AST successor nodes overridden in every class by *generated* implementation */
  153034             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  153035             : 
  153036             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  153037             :        // than all the vector copies. The implementation for these functions is generated for each class.
  153038             :       /*! \brief return number of children in the traversal successor list */
  153039             :           virtual size_t get_numberOfTraversalSuccessors() override;
  153040             :       /*! \brief index-based access to traversal successors by index number */
  153041             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  153042             :       /*! \brief index-based access to traversal successors by child node */
  153043             :           virtual size_t get_childIndex(SgNode *child) override;
  153044             : 
  153045             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  153046             :        // MS: 08/16/2002 method for generating RTI information
  153047             :       /*! \brief return C++ Runtime-Time-Information */
  153048             :           virtual RTIReturnType roseRTI() override;
  153049             : #endif
  153050             :       /* */
  153051             : 
  153052             : 
  153053             : 
  153054             :       /* name Deprecated Functions
  153055             :           \brief Deprecated functions ... incomplete-documentation
  153056             : 
  153057             :           These functions have been deprecated from use.
  153058             :        */
  153059             :       /* */
  153060             : 
  153061             :       /*! returns a C style string (char*) representing the class name */
  153062             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  153063             : 
  153064             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  153065             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  153066             : #if 0
  153067             :       /*! returns old style Sage II enum values */
  153068             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  153069             :       /*! returns old style Sage II enum values */
  153070             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  153071             : #endif
  153072             :       /* */
  153073             : 
  153074             : 
  153075             : 
  153076             : 
  153077             :      public:
  153078             :       /* name Traversal Support Functions
  153079             :           \brief Traversal support functions ... incomplete-documentation
  153080             : 
  153081             :           These functions have been made public as part of the design, but they are suggested for internal use 
  153082             :           or by particularly knowledgable users for specialized tools or applications.
  153083             :        */
  153084             :       /* */
  153085             : 
  153086             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  153087             :        // (inferior to ROSE traversal mechanism, experimental).
  153088             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  153089             :        */
  153090             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  153091             : 
  153092             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  153093             :       /*! \brief support for the classic visitor pattern done in GoF */
  153094             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  153095             : 
  153096             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  153097             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  153098             :        */
  153099             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  153100             : 
  153101             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  153102             :        */
  153103             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  153104             : 
  153105             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  153106             :        // This traversal helps support internal tools that call static member functions.
  153107             :        // note: this function operates on the memory pools.
  153108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  153109             :        */
  153110             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  153111             :       /* */
  153112             : 
  153113             : 
  153114             :      public:
  153115             :       /* name Memory Allocation Functions
  153116             :           \brief Memory allocations functions ... incomplete-documentation
  153117             : 
  153118             :           These functions have been made public as part of the design, but they are suggested for internal use 
  153119             :           or by particularly knowledgable users for specialized tools or applications.
  153120             :        */
  153121             :       /* */
  153122             : 
  153123             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  153124             : 
  153125             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  153126             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  153127             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  153128             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  153129             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  153130             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  153131             :           being used with the AST File I/O mechanism.
  153132             :        */
  153133             :           virtual bool isInMemoryPool() override;
  153134             : 
  153135             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  153136             : 
  153137             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  153138             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  153139             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  153140             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  153141             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  153142             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  153143             :           being used with the AST File I/O mechanism.
  153144             :        */
  153145             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  153146             : 
  153147             :       // DQ (4/30/2006): Modified to be a const function.
  153148             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  153149             : 
  153150             :           This functions is part of general support for many possible tools to operate 
  153151             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  153152             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  153153             :           less than the set of pointers used by the AST file I/O. This is part of
  153154             :           work implemented by Andreas, and support tools such as the AST graph generation.
  153155             : 
  153156             :           \warning This function can return unexpected data members and thus the 
  153157             :                    order and the number of elements is unpredicable and subject 
  153158             :                    to change.
  153159             : 
  153160             :           \returns STL vector of pairs of SgNode* and strings
  153161             :        */
  153162             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  153163             : 
  153164             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  153165             : 
  153166             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  153167             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  153168             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  153169             : 
  153170             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  153171             :                    and subject to change.
  153172             :        */
  153173             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  153174             : 
  153175             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  153176             : 
  153177             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  153178             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  153179             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  153180             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  153181             : 
  153182             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  153183             : 
  153184             :           \returns long
  153185             :        */
  153186             :           virtual long getChildIndex( SgNode* childNode ) const override;
  153187             : 
  153188             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  153189             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  153190             :       /* \brief Constructor for use by AST File I/O Mechanism
  153191             : 
  153192             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  153193             :           which obtained via fast binary file I/O from disk.
  153194             :        */
  153195             :        // SgTemplateClassDeclaration( SgTemplateClassDeclarationStorageClass& source );
  153196             : 
  153197             : 
  153198             : 
  153199             : 
  153200             : 
  153201             :  // JH (10/24/2005): methods added to support the ast file IO
  153202             :     private:
  153203             : 
  153204             :       /* name AST Memory Allocation Support Functions
  153205             :           \brief Memory allocations support....
  153206             : 
  153207             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  153208             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  153209             :           and support the AST File I/O Mechanism.
  153210             :        */
  153211             :       /* */
  153212             : 
  153213             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  153214             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  153215             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  153216             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  153217             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  153218             :           a correspinding one in the AST_FILE_IO class!
  153219             :        */
  153220             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  153221             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  153222             :       /* \brief Typedef used for low level memory access.
  153223             :        */
  153224             :        // typedef unsigned char* TestType;
  153225             : 
  153226             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  153227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  153228             :       /* \brief Typedef used to hold memory addresses as values.
  153229             :        */
  153230             :        // typedef unsigned long  AddressType;
  153231             : 
  153232             : 
  153233             : 
  153234             :        // necessary, to have direct access to the p_freepointer and the private methods !
  153235             :       /*! \brief friend class declaration to support AST File I/O */
  153236             :           friend class AST_FILE_IO;
  153237             : 
  153238             :       /*! \brief friend class declaration to support AST File I/O */
  153239             :           friend class SgTemplateClassDeclarationStorageClass;
  153240             : 
  153241             :       /*! \brief friend class declaration to support AST File I/O */
  153242             :           friend class AstSpecificDataManagingClass;
  153243             : 
  153244             :       /*! \brief friend class declaration to support AST File I/O */
  153245             :           friend class AstSpecificDataManagingClassStorageClass;
  153246             :     public:
  153247             :       /*! \brief IR node constructor to support AST File I/O */
  153248             :           SgTemplateClassDeclaration( const SgTemplateClassDeclarationStorageClass& source );
  153249             : 
  153250             :  // private: // JJW hack
  153251             :        /*
  153252             :           name AST Memory Allocation Support Variables
  153253             :           Memory allocations support variables 
  153254             : 
  153255             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  153256             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  153257             :           and support the AST File I/O Mechanism.
  153258             :        */
  153259             :       /* */
  153260             : 
  153261             :     public:
  153262             : 
  153263             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  153264             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  153265             :       // virtual SgNode* addRegExpAttribute();
  153266             :       /*! \brief Support for AST matching using regular expression.
  153267             : 
  153268             :           This support is incomplete and the subject of current research to define 
  153269             :           RegEx trees to support inexact matching.
  153270             :        */
  153271             :           SgTemplateClassDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  153272             : 
  153273             : // *** COMMON CODE SECTION ENDS HERE ***
  153274             : 
  153275             : 
  153276             : // End of memberFunctionString
  153277             : // Start of memberFunctionString
  153278             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  153279             : 
  153280             :      // the generated cast function
  153281             :      // friend ROSE_DLL_API SgTemplateClassDeclaration* isSgTemplateClassDeclaration ( SgNode* s );
  153282             : 
  153283             :           typedef SgClassDeclaration base_node_type;
  153284             : 
  153285             : 
  153286             : // End of memberFunctionString
  153287             : // Start of memberFunctionString
  153288             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  153289             : 
  153290             :           void post_construction_initialization() override;
  153291             : 
  153292             : 
  153293             : // End of memberFunctionString
  153294             : 
  153295             :      public: 
  153296             :          const SgTemplateParameterPtrList&  get_templateParameters() const;
  153297             :          SgTemplateParameterPtrList& get_templateParameters(); 
  153298             : 
  153299             :      public: 
  153300             :          const SgTemplateArgumentPtrList&  get_templateSpecializationArguments() const;
  153301             :          SgTemplateArgumentPtrList& get_templateSpecializationArguments(); 
  153302             : 
  153303             :      public: 
  153304             :          SgName get_string() const;
  153305             :          void set_string(SgName string);
  153306             : 
  153307             :      public: 
  153308             :          SgName get_templateName() const;
  153309             :          void set_templateName(SgName templateName);
  153310             : 
  153311             :      public: 
  153312             :          SgDeclarationScope* get_nonreal_decl_scope() const;
  153313             :          void set_nonreal_decl_scope(SgDeclarationScope* nonreal_decl_scope);
  153314             : 
  153315             : 
  153316             :      public: 
  153317             :          virtual ~SgTemplateClassDeclaration();
  153318             : 
  153319             : 
  153320             :      public: 
  153321             :          SgTemplateClassDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgClassDeclaration::class_types class_type = SgClassDeclaration::e_class, SgClassType* type = NULL, SgClassDefinition* definition = NULL); 
  153322             :          SgTemplateClassDeclaration(SgName name, SgClassDeclaration::class_types class_type, SgClassType* type, SgClassDefinition* definition); 
  153323             : 
  153324             :     protected:
  153325             : // Start of memberFunctionString
  153326             : SgTemplateParameterPtrList p_templateParameters;
  153327             :           
  153328             : // End of memberFunctionString
  153329             : // Start of memberFunctionString
  153330             : SgTemplateArgumentPtrList p_templateSpecializationArguments;
  153331             :           
  153332             : // End of memberFunctionString
  153333             : // Start of memberFunctionString
  153334             : SgName p_string;
  153335             :           
  153336             : // End of memberFunctionString
  153337             : // Start of memberFunctionString
  153338             : SgName p_templateName;
  153339             :           
  153340             : // End of memberFunctionString
  153341             : // Start of memberFunctionString
  153342             : SgDeclarationScope* p_nonreal_decl_scope;
  153343             :           
  153344             : // End of memberFunctionString
  153345             : 
  153346             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateClassDeclaration>;
  153347             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateClassDeclaration, SgTemplateParameterPtrList,&SgTemplateClassDeclaration::p_templateParameters>;
  153348             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateClassDeclaration, SgTemplateArgumentPtrList,&SgTemplateClassDeclaration::p_templateSpecializationArguments>;
  153349             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateClassDeclaration, SgName,&SgTemplateClassDeclaration::p_string>;
  153350             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateClassDeclaration, SgName,&SgTemplateClassDeclaration::p_templateName>;
  153351             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateClassDeclaration, SgDeclarationScope*,&SgTemplateClassDeclaration::p_nonreal_decl_scope>;
  153352             : 
  153353             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153354             : 
  153355             : 
  153356             :    };
  153357             : #endif
  153358             : 
  153359             : // postdeclarations for SgTemplateClassDeclaration
  153360             : 
  153361             : /* #line 153362 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153362             : 
  153363             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  153364             : 
  153365             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153366             : 
  153367             : 
  153368             : /* #line 153369 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153369             : 
  153370             : 
  153371             : 
  153372             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153373             : 
  153374             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  153375             : //      This code is automatically generated for each 
  153376             : //      terminal and non-terminal within the defined 
  153377             : //      grammar.  There is a simple way to change the 
  153378             : //      code to fix bugs etc.  See the ROSE README file
  153379             : //      for directions.
  153380             : 
  153381             : // tps: (02/22/2010): Adding DLL export requirements
  153382             : #include "rosedll.h"
  153383             : 
  153384             : // predeclarations for SgTemplateInstantiationDecl
  153385             : 
  153386             : /* #line 153387 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153387             : 
  153388             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  153389             : 
  153390             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153391             : 
  153392             : #if 1
  153393             : // Class Definition for SgTemplateInstantiationDecl
  153394             : class ROSE_DLL_API SgTemplateInstantiationDecl  : public SgClassDeclaration
  153395             :    {
  153396             :      public:
  153397             : 
  153398             : 
  153399             : /* #line 153400 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153400             : 
  153401             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  153402             : // Start of memberFunctionString
  153403             : /* #line 2866 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  153404             : 
  153405             : 
  153406             :           typedef SgTemplateClassDeclaration template_kind_t;
  153407             : 
  153408             :        // DQ (3/21/2004): get_name assembles the full template name with arguments (e.g. "ABC<int>")
  153409             :           void resetTemplateName();
  153410             :        // SgName get_name () const;
  153411             :        // void set_name (SgName name);
  153412             : 
  153413             :           virtual SgName get_qualified_name () const override;
  153414             : 
  153415             :        // RV (1/31/2006): Added mangler for template instantiation declarations.
  153416             :           virtual SgName get_mangled_name (void) const override;
  153417             : 
  153418             :        // DQ (9/23/2004): Added function to hide base class interface so that we would only set the
  153419             :        // definition for a template instantiation declaration using a template instantiation definition.
  153420             :        // At a later point the template instantiation definition will contain more information specific
  153421             :        // to it being a part of a template.
  153422             :           void set_definition( SgTemplateInstantiationDefn* definition );
  153423             : 
  153424             :        // DQ (10/10/2014): Implemented to support Aterm constructor functions.
  153425             :        // Rasmussen (04/17/2019): Support for ATerms has been deprecated. But this may be used elsewhere.
  153426             :           void set_definition( SgClassDefinition* definition );
  153427             : 
  153428             :        // DQ (2/11/2007): Add this to the derived class so that the SgSymbolTable::find() function will work properly
  153429             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  153430             : 
  153431             : #if ALT_FIXUP_COPY
  153432             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  153433             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  153434             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  153435             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  153436             : #else
  153437             :        // DQ (11/6/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  153438             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  153439             : #endif
  153440             : 
  153441             : 
  153442             : 
  153443             : // End of memberFunctionString
  153444             : // Start of memberFunctionString
  153445             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  153446             : 
  153447             : // *** COMMON CODE SECTION BEGINS HERE ***
  153448             : 
  153449             :     public:
  153450             : 
  153451             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  153452             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  153453             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  153454             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  153455             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  153456             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  153457             : 
  153458             :       /*! \brief returns a string representing the class name */
  153459             :           virtual std::string class_name() const override;
  153460             : 
  153461             :       /*! \brief returns new style SageIII enum values */
  153462             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  153463             : 
  153464             :       /*! \brief static variant value */
  153465             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  153466             :        // static const VariantT static_variant = V_SgTemplateInstantiationDecl;
  153467             :           enum { static_variant = V_SgTemplateInstantiationDecl };
  153468             : 
  153469             :        /* the generated cast function */
  153470             :       /*! \brief Casts pointer from base class to derived class */
  153471             :           ROSE_DLL_API friend       SgTemplateInstantiationDecl* isSgTemplateInstantiationDecl(       SgNode * s );
  153472             : 
  153473             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  153474             :           ROSE_DLL_API friend const SgTemplateInstantiationDecl* isSgTemplateInstantiationDecl( const SgNode * s );
  153475             : 
  153476             :      // ******************************************
  153477             :      // * Memory Pool / New / Delete
  153478             :      // ******************************************
  153479             : 
  153480             :      public:
  153481             :           /// \private
  153482             :           static const unsigned pool_size; //
  153483             :           /// \private
  153484             :           static std::vector<unsigned char *> pools; //
  153485             :           /// \private
  153486             :           static SgTemplateInstantiationDecl * next_node; // 
  153487             : 
  153488             :           /// \private
  153489             :           static unsigned long initializeStorageClassArray(SgTemplateInstantiationDeclStorageClass *); //
  153490             : 
  153491             :           /// \private
  153492             :           static void clearMemoryPool(); //
  153493             :           static void deleteMemoryPool(); //
  153494             : 
  153495             :           /// \private
  153496             :           static void extendMemoryPoolForFileIO(); //
  153497             : 
  153498             :           /// \private
  153499             :           static SgTemplateInstantiationDecl * getPointerFromGlobalIndex(unsigned long); //
  153500             :           /// \private
  153501             :           static SgTemplateInstantiationDecl * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  153502             : 
  153503             :           /// \private
  153504             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  153505             :           /// \private
  153506             :           static void resetValidFreepointers(); //
  153507             :           /// \private
  153508             :           static unsigned long getNumberOfLastValidPointer(); //
  153509             : 
  153510             : 
  153511             : #if defined(INLINE_FUNCTIONS)
  153512             :       /*! \brief returns pointer to newly allocated IR node */
  153513             :           inline void *operator new (size_t size);
  153514             : #else
  153515             :       /*! \brief returns pointer to newly allocated IR node */
  153516             :           void *operator new (size_t size);
  153517             : #endif
  153518             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  153519             :           void operator delete (void* pointer, size_t size);
  153520             : 
  153521             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  153522        2638 :           void operator delete (void* pointer)
  153523             :              {
  153524             :             // This is the generated delete operator...
  153525        2638 :                SgTemplateInstantiationDecl::operator delete (pointer,sizeof(SgTemplateInstantiationDecl));
  153526             :              }
  153527             : 
  153528             :       /*! \brief Returns the total number of IR nodes of this type */
  153529             :           static size_t numberOfNodes();
  153530             : 
  153531             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  153532             :           static size_t memoryUsage();
  153533             : 
  153534             :       // End of scope which started in IR nodes specific code 
  153535             :       /* */
  153536             : 
  153537             :       /* name Internal Functions
  153538             :           \brief Internal functions ... incomplete-documentation
  153539             : 
  153540             :           These functions have been made public as part of the design, but they are suggested for internal use 
  153541             :           or by particularly knowledgeable users for specialized tools or applications.
  153542             : 
  153543             :           \internal We could not make these private because they are required by user for special purposes. And 
  153544             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  153545             :          
  153546             :        */
  153547             : 
  153548             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  153549             :        // overridden in every class by *generated* implementation
  153550             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  153551             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  153552             :        // MS: 06/28/02 container of names of variables or container indices 
  153553             :        // used used in the traversal to access AST successor nodes
  153554             :        // overridden in every class by *generated* implementation
  153555             :       /*! \brief container of names of variables or container indices used used in the traversal
  153556             :           to access AST successor nodes overridden in every class by *generated* implementation */
  153557             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  153558             : 
  153559             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  153560             :        // than all the vector copies. The implementation for these functions is generated for each class.
  153561             :       /*! \brief return number of children in the traversal successor list */
  153562             :           virtual size_t get_numberOfTraversalSuccessors() override;
  153563             :       /*! \brief index-based access to traversal successors by index number */
  153564             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  153565             :       /*! \brief index-based access to traversal successors by child node */
  153566             :           virtual size_t get_childIndex(SgNode *child) override;
  153567             : 
  153568             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  153569             :        // MS: 08/16/2002 method for generating RTI information
  153570             :       /*! \brief return C++ Runtime-Time-Information */
  153571             :           virtual RTIReturnType roseRTI() override;
  153572             : #endif
  153573             :       /* */
  153574             : 
  153575             : 
  153576             : 
  153577             :       /* name Deprecated Functions
  153578             :           \brief Deprecated functions ... incomplete-documentation
  153579             : 
  153580             :           These functions have been deprecated from use.
  153581             :        */
  153582             :       /* */
  153583             : 
  153584             :       /*! returns a C style string (char*) representing the class name */
  153585             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  153586             : 
  153587             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  153588             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  153589             : #if 0
  153590             :       /*! returns old style Sage II enum values */
  153591             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  153592             :       /*! returns old style Sage II enum values */
  153593             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  153594             : #endif
  153595             :       /* */
  153596             : 
  153597             : 
  153598             : 
  153599             : 
  153600             :      public:
  153601             :       /* name Traversal Support Functions
  153602             :           \brief Traversal support functions ... incomplete-documentation
  153603             : 
  153604             :           These functions have been made public as part of the design, but they are suggested for internal use 
  153605             :           or by particularly knowledgable users for specialized tools or applications.
  153606             :        */
  153607             :       /* */
  153608             : 
  153609             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  153610             :        // (inferior to ROSE traversal mechanism, experimental).
  153611             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  153612             :        */
  153613             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  153614             : 
  153615             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  153616             :       /*! \brief support for the classic visitor pattern done in GoF */
  153617             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  153618             : 
  153619             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  153620             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  153621             :        */
  153622             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  153623             : 
  153624             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  153625             :        */
  153626             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  153627             : 
  153628             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  153629             :        // This traversal helps support internal tools that call static member functions.
  153630             :        // note: this function operates on the memory pools.
  153631             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  153632             :        */
  153633             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  153634             :       /* */
  153635             : 
  153636             : 
  153637             :      public:
  153638             :       /* name Memory Allocation Functions
  153639             :           \brief Memory allocations functions ... incomplete-documentation
  153640             : 
  153641             :           These functions have been made public as part of the design, but they are suggested for internal use 
  153642             :           or by particularly knowledgable users for specialized tools or applications.
  153643             :        */
  153644             :       /* */
  153645             : 
  153646             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  153647             : 
  153648             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  153649             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  153650             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  153651             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  153652             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  153653             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  153654             :           being used with the AST File I/O mechanism.
  153655             :        */
  153656             :           virtual bool isInMemoryPool() override;
  153657             : 
  153658             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  153659             : 
  153660             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  153661             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  153662             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  153663             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  153664             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  153665             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  153666             :           being used with the AST File I/O mechanism.
  153667             :        */
  153668             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  153669             : 
  153670             :       // DQ (4/30/2006): Modified to be a const function.
  153671             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  153672             : 
  153673             :           This functions is part of general support for many possible tools to operate 
  153674             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  153675             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  153676             :           less than the set of pointers used by the AST file I/O. This is part of
  153677             :           work implemented by Andreas, and support tools such as the AST graph generation.
  153678             : 
  153679             :           \warning This function can return unexpected data members and thus the 
  153680             :                    order and the number of elements is unpredicable and subject 
  153681             :                    to change.
  153682             : 
  153683             :           \returns STL vector of pairs of SgNode* and strings
  153684             :        */
  153685             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  153686             : 
  153687             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  153688             : 
  153689             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  153690             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  153691             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  153692             : 
  153693             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  153694             :                    and subject to change.
  153695             :        */
  153696             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  153697             : 
  153698             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  153699             : 
  153700             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  153701             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  153702             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  153703             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  153704             : 
  153705             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  153706             : 
  153707             :           \returns long
  153708             :        */
  153709             :           virtual long getChildIndex( SgNode* childNode ) const override;
  153710             : 
  153711             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  153712             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  153713             :       /* \brief Constructor for use by AST File I/O Mechanism
  153714             : 
  153715             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  153716             :           which obtained via fast binary file I/O from disk.
  153717             :        */
  153718             :        // SgTemplateInstantiationDecl( SgTemplateInstantiationDeclStorageClass& source );
  153719             : 
  153720             : 
  153721             : 
  153722             : 
  153723             : 
  153724             :  // JH (10/24/2005): methods added to support the ast file IO
  153725             :     private:
  153726             : 
  153727             :       /* name AST Memory Allocation Support Functions
  153728             :           \brief Memory allocations support....
  153729             : 
  153730             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  153731             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  153732             :           and support the AST File I/O Mechanism.
  153733             :        */
  153734             :       /* */
  153735             : 
  153736             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  153737             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  153738             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  153739             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  153740             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  153741             :           a correspinding one in the AST_FILE_IO class!
  153742             :        */
  153743             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  153744             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  153745             :       /* \brief Typedef used for low level memory access.
  153746             :        */
  153747             :        // typedef unsigned char* TestType;
  153748             : 
  153749             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  153750             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  153751             :       /* \brief Typedef used to hold memory addresses as values.
  153752             :        */
  153753             :        // typedef unsigned long  AddressType;
  153754             : 
  153755             : 
  153756             : 
  153757             :        // necessary, to have direct access to the p_freepointer and the private methods !
  153758             :       /*! \brief friend class declaration to support AST File I/O */
  153759             :           friend class AST_FILE_IO;
  153760             : 
  153761             :       /*! \brief friend class declaration to support AST File I/O */
  153762             :           friend class SgTemplateInstantiationDeclStorageClass;
  153763             : 
  153764             :       /*! \brief friend class declaration to support AST File I/O */
  153765             :           friend class AstSpecificDataManagingClass;
  153766             : 
  153767             :       /*! \brief friend class declaration to support AST File I/O */
  153768             :           friend class AstSpecificDataManagingClassStorageClass;
  153769             :     public:
  153770             :       /*! \brief IR node constructor to support AST File I/O */
  153771             :           SgTemplateInstantiationDecl( const SgTemplateInstantiationDeclStorageClass& source );
  153772             : 
  153773             :  // private: // JJW hack
  153774             :        /*
  153775             :           name AST Memory Allocation Support Variables
  153776             :           Memory allocations support variables 
  153777             : 
  153778             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  153779             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  153780             :           and support the AST File I/O Mechanism.
  153781             :        */
  153782             :       /* */
  153783             : 
  153784             :     public:
  153785             : 
  153786             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  153787             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  153788             :       // virtual SgNode* addRegExpAttribute();
  153789             :       /*! \brief Support for AST matching using regular expression.
  153790             : 
  153791             :           This support is incomplete and the subject of current research to define 
  153792             :           RegEx trees to support inexact matching.
  153793             :        */
  153794             :           SgTemplateInstantiationDecl* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  153795             : 
  153796             : // *** COMMON CODE SECTION ENDS HERE ***
  153797             : 
  153798             : 
  153799             : // End of memberFunctionString
  153800             : // Start of memberFunctionString
  153801             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  153802             : 
  153803             :      // the generated cast function
  153804             :      // friend ROSE_DLL_API SgTemplateInstantiationDecl* isSgTemplateInstantiationDecl ( SgNode* s );
  153805             : 
  153806             :           typedef SgClassDeclaration base_node_type;
  153807             : 
  153808             : 
  153809             : // End of memberFunctionString
  153810             : // Start of memberFunctionString
  153811             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  153812             : 
  153813             :           void post_construction_initialization() override;
  153814             : 
  153815             : 
  153816             : // End of memberFunctionString
  153817             : 
  153818             :      public: 
  153819             :          SgName get_templateName() const;
  153820             :          void set_templateName(SgName templateName);
  153821             : 
  153822             :      public: 
  153823             :          SgName get_templateHeader() const;
  153824             :          void set_templateHeader(SgName templateHeader);
  153825             : 
  153826             :      public: 
  153827             :          SgTemplateClassDeclaration* get_templateDeclaration() const;
  153828             :          void set_templateDeclaration(SgTemplateClassDeclaration* templateDeclaration);
  153829             : 
  153830             :      public: 
  153831             :          const SgTemplateArgumentPtrList&  get_templateArguments() const;
  153832             :          SgTemplateArgumentPtrList& get_templateArguments(); 
  153833             : 
  153834             :      public: 
  153835             :          bool get_nameResetFromMangledForm() const;
  153836             :          void set_nameResetFromMangledForm(bool nameResetFromMangledForm);
  153837             : 
  153838             : 
  153839             :      public: 
  153840             :          virtual ~SgTemplateInstantiationDecl();
  153841             : 
  153842             : 
  153843             :      public: 
  153844             :          SgTemplateInstantiationDecl(Sg_File_Info* startOfConstruct , SgName name = "", SgClassDeclaration::class_types class_type = SgClassDeclaration::e_class, SgClassType* type = NULL, SgClassDefinition* definition = NULL, SgTemplateClassDeclaration* templateDeclaration = NULL, SgTemplateArgumentPtrList templateArguments = SgTemplateArgumentPtrList()); 
  153845             :          SgTemplateInstantiationDecl(SgName name, SgClassDeclaration::class_types class_type, SgClassType* type, SgClassDefinition* definition, SgTemplateClassDeclaration* templateDeclaration, SgTemplateArgumentPtrList templateArguments); 
  153846             : 
  153847             :     protected:
  153848             : // Start of memberFunctionString
  153849             : SgName p_templateName;
  153850             :           
  153851             : // End of memberFunctionString
  153852             : // Start of memberFunctionString
  153853             : SgName p_templateHeader;
  153854             :           
  153855             : // End of memberFunctionString
  153856             : // Start of memberFunctionString
  153857             : SgTemplateClassDeclaration* p_templateDeclaration;
  153858             :           
  153859             : // End of memberFunctionString
  153860             : // Start of memberFunctionString
  153861             : SgTemplateArgumentPtrList p_templateArguments;
  153862             :           
  153863             : // End of memberFunctionString
  153864             : // Start of memberFunctionString
  153865             : bool p_nameResetFromMangledForm;
  153866             :           
  153867             : // End of memberFunctionString
  153868             : 
  153869             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateInstantiationDecl>;
  153870             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationDecl, SgName,&SgTemplateInstantiationDecl::p_templateName>;
  153871             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationDecl, SgName,&SgTemplateInstantiationDecl::p_templateHeader>;
  153872             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationDecl, SgTemplateClassDeclaration*,&SgTemplateInstantiationDecl::p_templateDeclaration>;
  153873             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationDecl, SgTemplateArgumentPtrList,&SgTemplateInstantiationDecl::p_templateArguments>;
  153874             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationDecl, bool,&SgTemplateInstantiationDecl::p_nameResetFromMangledForm>;
  153875             : 
  153876             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153877             : 
  153878             : 
  153879             :    };
  153880             : #endif
  153881             : 
  153882             : // postdeclarations for SgTemplateInstantiationDecl
  153883             : 
  153884             : /* #line 153885 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153885             : 
  153886             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  153887             : 
  153888             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153889             : 
  153890             : 
  153891             : /* #line 153892 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153892             : 
  153893             : 
  153894             : 
  153895             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153896             : 
  153897             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  153898             : //      This code is automatically generated for each 
  153899             : //      terminal and non-terminal within the defined 
  153900             : //      grammar.  There is a simple way to change the 
  153901             : //      code to fix bugs etc.  See the ROSE README file
  153902             : //      for directions.
  153903             : 
  153904             : // tps: (02/22/2010): Adding DLL export requirements
  153905             : #include "rosedll.h"
  153906             : 
  153907             : // predeclarations for SgDerivedTypeStatement
  153908             : 
  153909             : /* #line 153910 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153910             : 
  153911             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  153912             : 
  153913             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  153914             : 
  153915             : #if 1
  153916             : // Class Definition for SgDerivedTypeStatement
  153917             : class ROSE_DLL_API SgDerivedTypeStatement  : public SgClassDeclaration
  153918             :    {
  153919             :      public:
  153920             : 
  153921             : 
  153922             : /* #line 153923 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  153923             : 
  153924             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  153925             : // Start of memberFunctionString
  153926             : /* #line 3680 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  153927             : 
  153928             :      SgName get_mangled_name() const override;
  153929             : 
  153930             : 
  153931             : // End of memberFunctionString
  153932             : // Start of memberFunctionString
  153933             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  153934             : 
  153935             : // *** COMMON CODE SECTION BEGINS HERE ***
  153936             : 
  153937             :     public:
  153938             : 
  153939             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  153940             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  153941             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  153942             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  153943             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  153944             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  153945             : 
  153946             :       /*! \brief returns a string representing the class name */
  153947             :           virtual std::string class_name() const override;
  153948             : 
  153949             :       /*! \brief returns new style SageIII enum values */
  153950             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  153951             : 
  153952             :       /*! \brief static variant value */
  153953             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  153954             :        // static const VariantT static_variant = V_SgDerivedTypeStatement;
  153955             :           enum { static_variant = V_SgDerivedTypeStatement };
  153956             : 
  153957             :        /* the generated cast function */
  153958             :       /*! \brief Casts pointer from base class to derived class */
  153959             :           ROSE_DLL_API friend       SgDerivedTypeStatement* isSgDerivedTypeStatement(       SgNode * s );
  153960             : 
  153961             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  153962             :           ROSE_DLL_API friend const SgDerivedTypeStatement* isSgDerivedTypeStatement( const SgNode * s );
  153963             : 
  153964             :      // ******************************************
  153965             :      // * Memory Pool / New / Delete
  153966             :      // ******************************************
  153967             : 
  153968             :      public:
  153969             :           /// \private
  153970             :           static const unsigned pool_size; //
  153971             :           /// \private
  153972             :           static std::vector<unsigned char *> pools; //
  153973             :           /// \private
  153974             :           static SgDerivedTypeStatement * next_node; // 
  153975             : 
  153976             :           /// \private
  153977             :           static unsigned long initializeStorageClassArray(SgDerivedTypeStatementStorageClass *); //
  153978             : 
  153979             :           /// \private
  153980             :           static void clearMemoryPool(); //
  153981             :           static void deleteMemoryPool(); //
  153982             : 
  153983             :           /// \private
  153984             :           static void extendMemoryPoolForFileIO(); //
  153985             : 
  153986             :           /// \private
  153987             :           static SgDerivedTypeStatement * getPointerFromGlobalIndex(unsigned long); //
  153988             :           /// \private
  153989             :           static SgDerivedTypeStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  153990             : 
  153991             :           /// \private
  153992             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  153993             :           /// \private
  153994             :           static void resetValidFreepointers(); //
  153995             :           /// \private
  153996             :           static unsigned long getNumberOfLastValidPointer(); //
  153997             : 
  153998             : 
  153999             : #if defined(INLINE_FUNCTIONS)
  154000             :       /*! \brief returns pointer to newly allocated IR node */
  154001             :           inline void *operator new (size_t size);
  154002             : #else
  154003             :       /*! \brief returns pointer to newly allocated IR node */
  154004             :           void *operator new (size_t size);
  154005             : #endif
  154006             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  154007             :           void operator delete (void* pointer, size_t size);
  154008             : 
  154009             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  154010           0 :           void operator delete (void* pointer)
  154011             :              {
  154012             :             // This is the generated delete operator...
  154013           0 :                SgDerivedTypeStatement::operator delete (pointer,sizeof(SgDerivedTypeStatement));
  154014             :              }
  154015             : 
  154016             :       /*! \brief Returns the total number of IR nodes of this type */
  154017             :           static size_t numberOfNodes();
  154018             : 
  154019             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  154020             :           static size_t memoryUsage();
  154021             : 
  154022             :       // End of scope which started in IR nodes specific code 
  154023             :       /* */
  154024             : 
  154025             :       /* name Internal Functions
  154026             :           \brief Internal functions ... incomplete-documentation
  154027             : 
  154028             :           These functions have been made public as part of the design, but they are suggested for internal use 
  154029             :           or by particularly knowledgeable users for specialized tools or applications.
  154030             : 
  154031             :           \internal We could not make these private because they are required by user for special purposes. And 
  154032             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  154033             :          
  154034             :        */
  154035             : 
  154036             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  154037             :        // overridden in every class by *generated* implementation
  154038             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  154039             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  154040             :        // MS: 06/28/02 container of names of variables or container indices 
  154041             :        // used used in the traversal to access AST successor nodes
  154042             :        // overridden in every class by *generated* implementation
  154043             :       /*! \brief container of names of variables or container indices used used in the traversal
  154044             :           to access AST successor nodes overridden in every class by *generated* implementation */
  154045             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  154046             : 
  154047             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  154048             :        // than all the vector copies. The implementation for these functions is generated for each class.
  154049             :       /*! \brief return number of children in the traversal successor list */
  154050             :           virtual size_t get_numberOfTraversalSuccessors() override;
  154051             :       /*! \brief index-based access to traversal successors by index number */
  154052             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  154053             :       /*! \brief index-based access to traversal successors by child node */
  154054             :           virtual size_t get_childIndex(SgNode *child) override;
  154055             : 
  154056             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  154057             :        // MS: 08/16/2002 method for generating RTI information
  154058             :       /*! \brief return C++ Runtime-Time-Information */
  154059             :           virtual RTIReturnType roseRTI() override;
  154060             : #endif
  154061             :       /* */
  154062             : 
  154063             : 
  154064             : 
  154065             :       /* name Deprecated Functions
  154066             :           \brief Deprecated functions ... incomplete-documentation
  154067             : 
  154068             :           These functions have been deprecated from use.
  154069             :        */
  154070             :       /* */
  154071             : 
  154072             :       /*! returns a C style string (char*) representing the class name */
  154073             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  154074             : 
  154075             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  154076             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  154077             : #if 0
  154078             :       /*! returns old style Sage II enum values */
  154079             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  154080             :       /*! returns old style Sage II enum values */
  154081             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  154082             : #endif
  154083             :       /* */
  154084             : 
  154085             : 
  154086             : 
  154087             : 
  154088             :      public:
  154089             :       /* name Traversal Support Functions
  154090             :           \brief Traversal support functions ... incomplete-documentation
  154091             : 
  154092             :           These functions have been made public as part of the design, but they are suggested for internal use 
  154093             :           or by particularly knowledgable users for specialized tools or applications.
  154094             :        */
  154095             :       /* */
  154096             : 
  154097             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  154098             :        // (inferior to ROSE traversal mechanism, experimental).
  154099             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  154100             :        */
  154101             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  154102             : 
  154103             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  154104             :       /*! \brief support for the classic visitor pattern done in GoF */
  154105             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  154106             : 
  154107             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  154108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  154109             :        */
  154110             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  154111             : 
  154112             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  154113             :        */
  154114             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  154115             : 
  154116             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  154117             :        // This traversal helps support internal tools that call static member functions.
  154118             :        // note: this function operates on the memory pools.
  154119             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  154120             :        */
  154121             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  154122             :       /* */
  154123             : 
  154124             : 
  154125             :      public:
  154126             :       /* name Memory Allocation Functions
  154127             :           \brief Memory allocations functions ... incomplete-documentation
  154128             : 
  154129             :           These functions have been made public as part of the design, but they are suggested for internal use 
  154130             :           or by particularly knowledgable users for specialized tools or applications.
  154131             :        */
  154132             :       /* */
  154133             : 
  154134             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  154135             : 
  154136             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  154137             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  154138             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  154139             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  154140             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  154141             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  154142             :           being used with the AST File I/O mechanism.
  154143             :        */
  154144             :           virtual bool isInMemoryPool() override;
  154145             : 
  154146             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  154147             : 
  154148             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  154149             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  154150             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  154151             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  154152             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  154153             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  154154             :           being used with the AST File I/O mechanism.
  154155             :        */
  154156             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  154157             : 
  154158             :       // DQ (4/30/2006): Modified to be a const function.
  154159             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  154160             : 
  154161             :           This functions is part of general support for many possible tools to operate 
  154162             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  154163             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  154164             :           less than the set of pointers used by the AST file I/O. This is part of
  154165             :           work implemented by Andreas, and support tools such as the AST graph generation.
  154166             : 
  154167             :           \warning This function can return unexpected data members and thus the 
  154168             :                    order and the number of elements is unpredicable and subject 
  154169             :                    to change.
  154170             : 
  154171             :           \returns STL vector of pairs of SgNode* and strings
  154172             :        */
  154173             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  154174             : 
  154175             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  154176             : 
  154177             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  154178             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  154179             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  154180             : 
  154181             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  154182             :                    and subject to change.
  154183             :        */
  154184             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  154185             : 
  154186             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  154187             : 
  154188             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  154189             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  154190             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  154191             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  154192             : 
  154193             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  154194             : 
  154195             :           \returns long
  154196             :        */
  154197             :           virtual long getChildIndex( SgNode* childNode ) const override;
  154198             : 
  154199             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  154200             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  154201             :       /* \brief Constructor for use by AST File I/O Mechanism
  154202             : 
  154203             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  154204             :           which obtained via fast binary file I/O from disk.
  154205             :        */
  154206             :        // SgDerivedTypeStatement( SgDerivedTypeStatementStorageClass& source );
  154207             : 
  154208             : 
  154209             : 
  154210             : 
  154211             : 
  154212             :  // JH (10/24/2005): methods added to support the ast file IO
  154213             :     private:
  154214             : 
  154215             :       /* name AST Memory Allocation Support Functions
  154216             :           \brief Memory allocations support....
  154217             : 
  154218             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  154219             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  154220             :           and support the AST File I/O Mechanism.
  154221             :        */
  154222             :       /* */
  154223             : 
  154224             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  154225             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  154226             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  154227             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  154228             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  154229             :           a correspinding one in the AST_FILE_IO class!
  154230             :        */
  154231             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  154232             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  154233             :       /* \brief Typedef used for low level memory access.
  154234             :        */
  154235             :        // typedef unsigned char* TestType;
  154236             : 
  154237             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  154238             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  154239             :       /* \brief Typedef used to hold memory addresses as values.
  154240             :        */
  154241             :        // typedef unsigned long  AddressType;
  154242             : 
  154243             : 
  154244             : 
  154245             :        // necessary, to have direct access to the p_freepointer and the private methods !
  154246             :       /*! \brief friend class declaration to support AST File I/O */
  154247             :           friend class AST_FILE_IO;
  154248             : 
  154249             :       /*! \brief friend class declaration to support AST File I/O */
  154250             :           friend class SgDerivedTypeStatementStorageClass;
  154251             : 
  154252             :       /*! \brief friend class declaration to support AST File I/O */
  154253             :           friend class AstSpecificDataManagingClass;
  154254             : 
  154255             :       /*! \brief friend class declaration to support AST File I/O */
  154256             :           friend class AstSpecificDataManagingClassStorageClass;
  154257             :     public:
  154258             :       /*! \brief IR node constructor to support AST File I/O */
  154259             :           SgDerivedTypeStatement( const SgDerivedTypeStatementStorageClass& source );
  154260             : 
  154261             :  // private: // JJW hack
  154262             :        /*
  154263             :           name AST Memory Allocation Support Variables
  154264             :           Memory allocations support variables 
  154265             : 
  154266             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  154267             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  154268             :           and support the AST File I/O Mechanism.
  154269             :        */
  154270             :       /* */
  154271             : 
  154272             :     public:
  154273             : 
  154274             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  154275             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  154276             :       // virtual SgNode* addRegExpAttribute();
  154277             :       /*! \brief Support for AST matching using regular expression.
  154278             : 
  154279             :           This support is incomplete and the subject of current research to define 
  154280             :           RegEx trees to support inexact matching.
  154281             :        */
  154282             :           SgDerivedTypeStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  154283             : 
  154284             : // *** COMMON CODE SECTION ENDS HERE ***
  154285             : 
  154286             : 
  154287             : // End of memberFunctionString
  154288             : // Start of memberFunctionString
  154289             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  154290             : 
  154291             :      // the generated cast function
  154292             :      // friend ROSE_DLL_API SgDerivedTypeStatement* isSgDerivedTypeStatement ( SgNode* s );
  154293             : 
  154294             :           typedef SgClassDeclaration base_node_type;
  154295             : 
  154296             : 
  154297             : // End of memberFunctionString
  154298             : // Start of memberFunctionString
  154299             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  154300             : 
  154301             :           void post_construction_initialization() override;
  154302             : 
  154303             : 
  154304             : // End of memberFunctionString
  154305             : 
  154306             :      public: 
  154307             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  154308             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  154309             : 
  154310             : 
  154311             :      public: 
  154312             :          virtual ~SgDerivedTypeStatement();
  154313             : 
  154314             : 
  154315             :      public: 
  154316             :          SgDerivedTypeStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgClassDeclaration::class_types class_type = SgClassDeclaration::e_class, SgClassType* type = NULL, SgClassDefinition* definition = NULL); 
  154317             :          SgDerivedTypeStatement(SgName name, SgClassDeclaration::class_types class_type, SgClassType* type, SgClassDefinition* definition); 
  154318             : 
  154319             :     protected:
  154320             : // Start of memberFunctionString
  154321             : SgLabelRefExp* p_end_numeric_label;
  154322             :           
  154323             : // End of memberFunctionString
  154324             : 
  154325             :     friend struct Rose::Traits::generated::describe_node_t<SgDerivedTypeStatement>;
  154326             :     friend struct Rose::Traits::generated::describe_field_t<SgDerivedTypeStatement, SgLabelRefExp*,&SgDerivedTypeStatement::p_end_numeric_label>;
  154327             : 
  154328             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154329             : 
  154330             : 
  154331             :    };
  154332             : #endif
  154333             : 
  154334             : // postdeclarations for SgDerivedTypeStatement
  154335             : 
  154336             : /* #line 154337 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154337             : 
  154338             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  154339             : 
  154340             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154341             : 
  154342             : 
  154343             : /* #line 154344 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154344             : 
  154345             : 
  154346             : 
  154347             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154348             : 
  154349             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  154350             : //      This code is automatically generated for each 
  154351             : //      terminal and non-terminal within the defined 
  154352             : //      grammar.  There is a simple way to change the 
  154353             : //      code to fix bugs etc.  See the ROSE README file
  154354             : //      for directions.
  154355             : 
  154356             : // tps: (02/22/2010): Adding DLL export requirements
  154357             : #include "rosedll.h"
  154358             : 
  154359             : // predeclarations for SgModuleStatement
  154360             : 
  154361             : /* #line 154362 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154362             : 
  154363             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  154364             : 
  154365             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154366             : 
  154367             : #if 1
  154368             : // Class Definition for SgModuleStatement
  154369             : class ROSE_DLL_API SgModuleStatement  : public SgClassDeclaration
  154370             :    {
  154371             :      public:
  154372             : 
  154373             : 
  154374             : /* #line 154375 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154375             : 
  154376             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  154377             : // Start of memberFunctionString
  154378             : /* #line 3363 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  154379             : 
  154380             :           virtual SgName get_mangled_name() const override;
  154381             : 
  154382             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  154383             :           virtual unsigned int cfgIndexForEnd() const override;
  154384             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  154385             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  154386             : #endif
  154387             : 
  154388             :           std::vector<SgInterfaceStatement*> get_interfaces() const;
  154389             : 
  154390             :        // const SgDeclarationStatementPtrList & get_members() const;
  154391             :        // SgDeclarationStatementPtrList & get_members();
  154392             : 
  154393             :   // protected:
  154394             :        // virtual bool replace_child ( SgStatement *,SgStatement *, bool extractListFromBasicBlock = false );
  154395             :        // virtual bool insert_child  ( SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false );
  154396             : 
  154397             : 
  154398             : 
  154399             : // End of memberFunctionString
  154400             : // Start of memberFunctionString
  154401             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  154402             : 
  154403             : // *** COMMON CODE SECTION BEGINS HERE ***
  154404             : 
  154405             :     public:
  154406             : 
  154407             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  154408             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  154409             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  154410             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  154411             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  154412             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  154413             : 
  154414             :       /*! \brief returns a string representing the class name */
  154415             :           virtual std::string class_name() const override;
  154416             : 
  154417             :       /*! \brief returns new style SageIII enum values */
  154418             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  154419             : 
  154420             :       /*! \brief static variant value */
  154421             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  154422             :        // static const VariantT static_variant = V_SgModuleStatement;
  154423             :           enum { static_variant = V_SgModuleStatement };
  154424             : 
  154425             :        /* the generated cast function */
  154426             :       /*! \brief Casts pointer from base class to derived class */
  154427             :           ROSE_DLL_API friend       SgModuleStatement* isSgModuleStatement(       SgNode * s );
  154428             : 
  154429             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  154430             :           ROSE_DLL_API friend const SgModuleStatement* isSgModuleStatement( const SgNode * s );
  154431             : 
  154432             :      // ******************************************
  154433             :      // * Memory Pool / New / Delete
  154434             :      // ******************************************
  154435             : 
  154436             :      public:
  154437             :           /// \private
  154438             :           static const unsigned pool_size; //
  154439             :           /// \private
  154440             :           static std::vector<unsigned char *> pools; //
  154441             :           /// \private
  154442             :           static SgModuleStatement * next_node; // 
  154443             : 
  154444             :           /// \private
  154445             :           static unsigned long initializeStorageClassArray(SgModuleStatementStorageClass *); //
  154446             : 
  154447             :           /// \private
  154448             :           static void clearMemoryPool(); //
  154449             :           static void deleteMemoryPool(); //
  154450             : 
  154451             :           /// \private
  154452             :           static void extendMemoryPoolForFileIO(); //
  154453             : 
  154454             :           /// \private
  154455             :           static SgModuleStatement * getPointerFromGlobalIndex(unsigned long); //
  154456             :           /// \private
  154457             :           static SgModuleStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  154458             : 
  154459             :           /// \private
  154460             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  154461             :           /// \private
  154462             :           static void resetValidFreepointers(); //
  154463             :           /// \private
  154464             :           static unsigned long getNumberOfLastValidPointer(); //
  154465             : 
  154466             : 
  154467             : #if defined(INLINE_FUNCTIONS)
  154468             :       /*! \brief returns pointer to newly allocated IR node */
  154469             :           inline void *operator new (size_t size);
  154470             : #else
  154471             :       /*! \brief returns pointer to newly allocated IR node */
  154472             :           void *operator new (size_t size);
  154473             : #endif
  154474             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  154475             :           void operator delete (void* pointer, size_t size);
  154476             : 
  154477             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  154478           0 :           void operator delete (void* pointer)
  154479             :              {
  154480             :             // This is the generated delete operator...
  154481           0 :                SgModuleStatement::operator delete (pointer,sizeof(SgModuleStatement));
  154482             :              }
  154483             : 
  154484             :       /*! \brief Returns the total number of IR nodes of this type */
  154485             :           static size_t numberOfNodes();
  154486             : 
  154487             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  154488             :           static size_t memoryUsage();
  154489             : 
  154490             :       // End of scope which started in IR nodes specific code 
  154491             :       /* */
  154492             : 
  154493             :       /* name Internal Functions
  154494             :           \brief Internal functions ... incomplete-documentation
  154495             : 
  154496             :           These functions have been made public as part of the design, but they are suggested for internal use 
  154497             :           or by particularly knowledgeable users for specialized tools or applications.
  154498             : 
  154499             :           \internal We could not make these private because they are required by user for special purposes. And 
  154500             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  154501             :          
  154502             :        */
  154503             : 
  154504             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  154505             :        // overridden in every class by *generated* implementation
  154506             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  154507             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  154508             :        // MS: 06/28/02 container of names of variables or container indices 
  154509             :        // used used in the traversal to access AST successor nodes
  154510             :        // overridden in every class by *generated* implementation
  154511             :       /*! \brief container of names of variables or container indices used used in the traversal
  154512             :           to access AST successor nodes overridden in every class by *generated* implementation */
  154513             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  154514             : 
  154515             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  154516             :        // than all the vector copies. The implementation for these functions is generated for each class.
  154517             :       /*! \brief return number of children in the traversal successor list */
  154518             :           virtual size_t get_numberOfTraversalSuccessors() override;
  154519             :       /*! \brief index-based access to traversal successors by index number */
  154520             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  154521             :       /*! \brief index-based access to traversal successors by child node */
  154522             :           virtual size_t get_childIndex(SgNode *child) override;
  154523             : 
  154524             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  154525             :        // MS: 08/16/2002 method for generating RTI information
  154526             :       /*! \brief return C++ Runtime-Time-Information */
  154527             :           virtual RTIReturnType roseRTI() override;
  154528             : #endif
  154529             :       /* */
  154530             : 
  154531             : 
  154532             : 
  154533             :       /* name Deprecated Functions
  154534             :           \brief Deprecated functions ... incomplete-documentation
  154535             : 
  154536             :           These functions have been deprecated from use.
  154537             :        */
  154538             :       /* */
  154539             : 
  154540             :       /*! returns a C style string (char*) representing the class name */
  154541             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  154542             : 
  154543             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  154544             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  154545             : #if 0
  154546             :       /*! returns old style Sage II enum values */
  154547             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  154548             :       /*! returns old style Sage II enum values */
  154549             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  154550             : #endif
  154551             :       /* */
  154552             : 
  154553             : 
  154554             : 
  154555             : 
  154556             :      public:
  154557             :       /* name Traversal Support Functions
  154558             :           \brief Traversal support functions ... incomplete-documentation
  154559             : 
  154560             :           These functions have been made public as part of the design, but they are suggested for internal use 
  154561             :           or by particularly knowledgable users for specialized tools or applications.
  154562             :        */
  154563             :       /* */
  154564             : 
  154565             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  154566             :        // (inferior to ROSE traversal mechanism, experimental).
  154567             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  154568             :        */
  154569             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  154570             : 
  154571             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  154572             :       /*! \brief support for the classic visitor pattern done in GoF */
  154573             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  154574             : 
  154575             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  154576             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  154577             :        */
  154578             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  154579             : 
  154580             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  154581             :        */
  154582             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  154583             : 
  154584             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  154585             :        // This traversal helps support internal tools that call static member functions.
  154586             :        // note: this function operates on the memory pools.
  154587             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  154588             :        */
  154589             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  154590             :       /* */
  154591             : 
  154592             : 
  154593             :      public:
  154594             :       /* name Memory Allocation Functions
  154595             :           \brief Memory allocations functions ... incomplete-documentation
  154596             : 
  154597             :           These functions have been made public as part of the design, but they are suggested for internal use 
  154598             :           or by particularly knowledgable users for specialized tools or applications.
  154599             :        */
  154600             :       /* */
  154601             : 
  154602             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  154603             : 
  154604             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  154605             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  154606             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  154607             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  154608             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  154609             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  154610             :           being used with the AST File I/O mechanism.
  154611             :        */
  154612             :           virtual bool isInMemoryPool() override;
  154613             : 
  154614             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  154615             : 
  154616             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  154617             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  154618             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  154619             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  154620             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  154621             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  154622             :           being used with the AST File I/O mechanism.
  154623             :        */
  154624             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  154625             : 
  154626             :       // DQ (4/30/2006): Modified to be a const function.
  154627             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  154628             : 
  154629             :           This functions is part of general support for many possible tools to operate 
  154630             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  154631             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  154632             :           less than the set of pointers used by the AST file I/O. This is part of
  154633             :           work implemented by Andreas, and support tools such as the AST graph generation.
  154634             : 
  154635             :           \warning This function can return unexpected data members and thus the 
  154636             :                    order and the number of elements is unpredicable and subject 
  154637             :                    to change.
  154638             : 
  154639             :           \returns STL vector of pairs of SgNode* and strings
  154640             :        */
  154641             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  154642             : 
  154643             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  154644             : 
  154645             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  154646             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  154647             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  154648             : 
  154649             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  154650             :                    and subject to change.
  154651             :        */
  154652             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  154653             : 
  154654             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  154655             : 
  154656             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  154657             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  154658             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  154659             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  154660             : 
  154661             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  154662             : 
  154663             :           \returns long
  154664             :        */
  154665             :           virtual long getChildIndex( SgNode* childNode ) const override;
  154666             : 
  154667             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  154668             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  154669             :       /* \brief Constructor for use by AST File I/O Mechanism
  154670             : 
  154671             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  154672             :           which obtained via fast binary file I/O from disk.
  154673             :        */
  154674             :        // SgModuleStatement( SgModuleStatementStorageClass& source );
  154675             : 
  154676             : 
  154677             : 
  154678             : 
  154679             : 
  154680             :  // JH (10/24/2005): methods added to support the ast file IO
  154681             :     private:
  154682             : 
  154683             :       /* name AST Memory Allocation Support Functions
  154684             :           \brief Memory allocations support....
  154685             : 
  154686             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  154687             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  154688             :           and support the AST File I/O Mechanism.
  154689             :        */
  154690             :       /* */
  154691             : 
  154692             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  154693             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  154694             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  154695             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  154696             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  154697             :           a correspinding one in the AST_FILE_IO class!
  154698             :        */
  154699             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  154700             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  154701             :       /* \brief Typedef used for low level memory access.
  154702             :        */
  154703             :        // typedef unsigned char* TestType;
  154704             : 
  154705             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  154706             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  154707             :       /* \brief Typedef used to hold memory addresses as values.
  154708             :        */
  154709             :        // typedef unsigned long  AddressType;
  154710             : 
  154711             : 
  154712             : 
  154713             :        // necessary, to have direct access to the p_freepointer and the private methods !
  154714             :       /*! \brief friend class declaration to support AST File I/O */
  154715             :           friend class AST_FILE_IO;
  154716             : 
  154717             :       /*! \brief friend class declaration to support AST File I/O */
  154718             :           friend class SgModuleStatementStorageClass;
  154719             : 
  154720             :       /*! \brief friend class declaration to support AST File I/O */
  154721             :           friend class AstSpecificDataManagingClass;
  154722             : 
  154723             :       /*! \brief friend class declaration to support AST File I/O */
  154724             :           friend class AstSpecificDataManagingClassStorageClass;
  154725             :     public:
  154726             :       /*! \brief IR node constructor to support AST File I/O */
  154727             :           SgModuleStatement( const SgModuleStatementStorageClass& source );
  154728             : 
  154729             :  // private: // JJW hack
  154730             :        /*
  154731             :           name AST Memory Allocation Support Variables
  154732             :           Memory allocations support variables 
  154733             : 
  154734             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  154735             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  154736             :           and support the AST File I/O Mechanism.
  154737             :        */
  154738             :       /* */
  154739             : 
  154740             :     public:
  154741             : 
  154742             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  154743             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  154744             :       // virtual SgNode* addRegExpAttribute();
  154745             :       /*! \brief Support for AST matching using regular expression.
  154746             : 
  154747             :           This support is incomplete and the subject of current research to define 
  154748             :           RegEx trees to support inexact matching.
  154749             :        */
  154750             :           SgModuleStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  154751             : 
  154752             : // *** COMMON CODE SECTION ENDS HERE ***
  154753             : 
  154754             : 
  154755             : // End of memberFunctionString
  154756             : // Start of memberFunctionString
  154757             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  154758             : 
  154759             :      // the generated cast function
  154760             :      // friend ROSE_DLL_API SgModuleStatement* isSgModuleStatement ( SgNode* s );
  154761             : 
  154762             :           typedef SgClassDeclaration base_node_type;
  154763             : 
  154764             : 
  154765             : // End of memberFunctionString
  154766             : // Start of memberFunctionString
  154767             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  154768             : 
  154769             :           void post_construction_initialization() override;
  154770             : 
  154771             : 
  154772             : // End of memberFunctionString
  154773             : 
  154774             :      public: 
  154775             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  154776             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  154777             : 
  154778             : 
  154779             :      public: 
  154780             :          virtual ~SgModuleStatement();
  154781             : 
  154782             : 
  154783             :      public: 
  154784             :          SgModuleStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgClassDeclaration::class_types class_type = SgClassDeclaration::e_class, SgClassType* type = NULL, SgClassDefinition* definition = NULL); 
  154785             :          SgModuleStatement(SgName name, SgClassDeclaration::class_types class_type, SgClassType* type, SgClassDefinition* definition); 
  154786             : 
  154787             :     protected:
  154788             : // Start of memberFunctionString
  154789             : SgLabelRefExp* p_end_numeric_label;
  154790             :           
  154791             : // End of memberFunctionString
  154792             : 
  154793             :     friend struct Rose::Traits::generated::describe_node_t<SgModuleStatement>;
  154794             :     friend struct Rose::Traits::generated::describe_field_t<SgModuleStatement, SgLabelRefExp*,&SgModuleStatement::p_end_numeric_label>;
  154795             : 
  154796             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154797             : 
  154798             : 
  154799             :    };
  154800             : #endif
  154801             : 
  154802             : // postdeclarations for SgModuleStatement
  154803             : 
  154804             : /* #line 154805 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154805             : 
  154806             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  154807             : 
  154808             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154809             : 
  154810             : 
  154811             : /* #line 154812 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154812             : 
  154813             : 
  154814             : 
  154815             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154816             : 
  154817             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  154818             : //      This code is automatically generated for each 
  154819             : //      terminal and non-terminal within the defined 
  154820             : //      grammar.  There is a simple way to change the 
  154821             : //      code to fix bugs etc.  See the ROSE README file
  154822             : //      for directions.
  154823             : 
  154824             : // tps: (02/22/2010): Adding DLL export requirements
  154825             : #include "rosedll.h"
  154826             : 
  154827             : // predeclarations for SgImplicitStatement
  154828             : 
  154829             : /* #line 154830 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154830             : 
  154831             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  154832             : 
  154833             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  154834             : 
  154835             : #if 1
  154836             : // Class Definition for SgImplicitStatement
  154837             : class ROSE_DLL_API SgImplicitStatement  : public SgDeclarationStatement
  154838             :    {
  154839             :      public:
  154840             : 
  154841             : 
  154842             : /* #line 154843 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  154843             : 
  154844             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  154845             : // Start of memberFunctionString
  154846             : /* #line 3621 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  154847             : 
  154848             : 
  154849             :     /*! Specifiers for the implicit-none-spec-list */
  154850             :           enum implicit_spec_enum
  154851             :             {
  154852             :                e_unknown_implicit_spec = 0,
  154853             :                e_has_implicit_spec_list,  /*!< In future this could replace set/get_implicit_none()  */
  154854             :                e_none,                    /*!< IMPLICIT NONE */
  154855             :                e_none_external,           /*!< IMPLICIT NONE (EXTERNAL) */
  154856             :                e_none_type,               /*!< IMPLICIT NONE (TYPE) */
  154857             :                e_none_external_and_type   /*!< IMPLICIT NONE (EXTERNAL, TYPE) : order not specified */
  154858             :             };
  154859             : 
  154860             :      SgName get_mangled_name() const override;
  154861             : 
  154862             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  154863             :      virtual unsigned int cfgIndexForEnd() const override;
  154864             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  154865             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  154866             : #endif
  154867             : 
  154868             : 
  154869             : 
  154870             : // End of memberFunctionString
  154871             : // Start of memberFunctionString
  154872             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  154873             : 
  154874             : // *** COMMON CODE SECTION BEGINS HERE ***
  154875             : 
  154876             :     public:
  154877             : 
  154878             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  154879             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  154880             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  154881             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  154882             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  154883             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  154884             : 
  154885             :       /*! \brief returns a string representing the class name */
  154886             :           virtual std::string class_name() const override;
  154887             : 
  154888             :       /*! \brief returns new style SageIII enum values */
  154889             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  154890             : 
  154891             :       /*! \brief static variant value */
  154892             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  154893             :        // static const VariantT static_variant = V_SgImplicitStatement;
  154894             :           enum { static_variant = V_SgImplicitStatement };
  154895             : 
  154896             :        /* the generated cast function */
  154897             :       /*! \brief Casts pointer from base class to derived class */
  154898             :           ROSE_DLL_API friend       SgImplicitStatement* isSgImplicitStatement(       SgNode * s );
  154899             : 
  154900             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  154901             :           ROSE_DLL_API friend const SgImplicitStatement* isSgImplicitStatement( const SgNode * s );
  154902             : 
  154903             :      // ******************************************
  154904             :      // * Memory Pool / New / Delete
  154905             :      // ******************************************
  154906             : 
  154907             :      public:
  154908             :           /// \private
  154909             :           static const unsigned pool_size; //
  154910             :           /// \private
  154911             :           static std::vector<unsigned char *> pools; //
  154912             :           /// \private
  154913             :           static SgImplicitStatement * next_node; // 
  154914             : 
  154915             :           /// \private
  154916             :           static unsigned long initializeStorageClassArray(SgImplicitStatementStorageClass *); //
  154917             : 
  154918             :           /// \private
  154919             :           static void clearMemoryPool(); //
  154920             :           static void deleteMemoryPool(); //
  154921             : 
  154922             :           /// \private
  154923             :           static void extendMemoryPoolForFileIO(); //
  154924             : 
  154925             :           /// \private
  154926             :           static SgImplicitStatement * getPointerFromGlobalIndex(unsigned long); //
  154927             :           /// \private
  154928             :           static SgImplicitStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  154929             : 
  154930             :           /// \private
  154931             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  154932             :           /// \private
  154933             :           static void resetValidFreepointers(); //
  154934             :           /// \private
  154935             :           static unsigned long getNumberOfLastValidPointer(); //
  154936             : 
  154937             : 
  154938             : #if defined(INLINE_FUNCTIONS)
  154939             :       /*! \brief returns pointer to newly allocated IR node */
  154940             :           inline void *operator new (size_t size);
  154941             : #else
  154942             :       /*! \brief returns pointer to newly allocated IR node */
  154943             :           void *operator new (size_t size);
  154944             : #endif
  154945             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  154946             :           void operator delete (void* pointer, size_t size);
  154947             : 
  154948             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  154949           0 :           void operator delete (void* pointer)
  154950             :              {
  154951             :             // This is the generated delete operator...
  154952           0 :                SgImplicitStatement::operator delete (pointer,sizeof(SgImplicitStatement));
  154953             :              }
  154954             : 
  154955             :       /*! \brief Returns the total number of IR nodes of this type */
  154956             :           static size_t numberOfNodes();
  154957             : 
  154958             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  154959             :           static size_t memoryUsage();
  154960             : 
  154961             :       // End of scope which started in IR nodes specific code 
  154962             :       /* */
  154963             : 
  154964             :       /* name Internal Functions
  154965             :           \brief Internal functions ... incomplete-documentation
  154966             : 
  154967             :           These functions have been made public as part of the design, but they are suggested for internal use 
  154968             :           or by particularly knowledgeable users for specialized tools or applications.
  154969             : 
  154970             :           \internal We could not make these private because they are required by user for special purposes. And 
  154971             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  154972             :          
  154973             :        */
  154974             : 
  154975             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  154976             :        // overridden in every class by *generated* implementation
  154977             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  154978             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  154979             :        // MS: 06/28/02 container of names of variables or container indices 
  154980             :        // used used in the traversal to access AST successor nodes
  154981             :        // overridden in every class by *generated* implementation
  154982             :       /*! \brief container of names of variables or container indices used used in the traversal
  154983             :           to access AST successor nodes overridden in every class by *generated* implementation */
  154984             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  154985             : 
  154986             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  154987             :        // than all the vector copies. The implementation for these functions is generated for each class.
  154988             :       /*! \brief return number of children in the traversal successor list */
  154989             :           virtual size_t get_numberOfTraversalSuccessors() override;
  154990             :       /*! \brief index-based access to traversal successors by index number */
  154991             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  154992             :       /*! \brief index-based access to traversal successors by child node */
  154993             :           virtual size_t get_childIndex(SgNode *child) override;
  154994             : 
  154995             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  154996             :        // MS: 08/16/2002 method for generating RTI information
  154997             :       /*! \brief return C++ Runtime-Time-Information */
  154998             :           virtual RTIReturnType roseRTI() override;
  154999             : #endif
  155000             :       /* */
  155001             : 
  155002             : 
  155003             : 
  155004             :       /* name Deprecated Functions
  155005             :           \brief Deprecated functions ... incomplete-documentation
  155006             : 
  155007             :           These functions have been deprecated from use.
  155008             :        */
  155009             :       /* */
  155010             : 
  155011             :       /*! returns a C style string (char*) representing the class name */
  155012             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  155013             : 
  155014             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  155015             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  155016             : #if 0
  155017             :       /*! returns old style Sage II enum values */
  155018             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  155019             :       /*! returns old style Sage II enum values */
  155020             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  155021             : #endif
  155022             :       /* */
  155023             : 
  155024             : 
  155025             : 
  155026             : 
  155027             :      public:
  155028             :       /* name Traversal Support Functions
  155029             :           \brief Traversal support functions ... incomplete-documentation
  155030             : 
  155031             :           These functions have been made public as part of the design, but they are suggested for internal use 
  155032             :           or by particularly knowledgable users for specialized tools or applications.
  155033             :        */
  155034             :       /* */
  155035             : 
  155036             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  155037             :        // (inferior to ROSE traversal mechanism, experimental).
  155038             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  155039             :        */
  155040             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  155041             : 
  155042             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  155043             :       /*! \brief support for the classic visitor pattern done in GoF */
  155044             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  155045             : 
  155046             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  155047             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  155048             :        */
  155049             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  155050             : 
  155051             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  155052             :        */
  155053             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  155054             : 
  155055             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  155056             :        // This traversal helps support internal tools that call static member functions.
  155057             :        // note: this function operates on the memory pools.
  155058             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  155059             :        */
  155060             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  155061             :       /* */
  155062             : 
  155063             : 
  155064             :      public:
  155065             :       /* name Memory Allocation Functions
  155066             :           \brief Memory allocations functions ... incomplete-documentation
  155067             : 
  155068             :           These functions have been made public as part of the design, but they are suggested for internal use 
  155069             :           or by particularly knowledgable users for specialized tools or applications.
  155070             :        */
  155071             :       /* */
  155072             : 
  155073             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  155074             : 
  155075             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  155076             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  155077             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  155078             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  155079             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  155080             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  155081             :           being used with the AST File I/O mechanism.
  155082             :        */
  155083             :           virtual bool isInMemoryPool() override;
  155084             : 
  155085             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  155086             : 
  155087             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  155088             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  155089             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  155090             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  155091             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  155092             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  155093             :           being used with the AST File I/O mechanism.
  155094             :        */
  155095             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  155096             : 
  155097             :       // DQ (4/30/2006): Modified to be a const function.
  155098             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  155099             : 
  155100             :           This functions is part of general support for many possible tools to operate 
  155101             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  155102             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  155103             :           less than the set of pointers used by the AST file I/O. This is part of
  155104             :           work implemented by Andreas, and support tools such as the AST graph generation.
  155105             : 
  155106             :           \warning This function can return unexpected data members and thus the 
  155107             :                    order and the number of elements is unpredicable and subject 
  155108             :                    to change.
  155109             : 
  155110             :           \returns STL vector of pairs of SgNode* and strings
  155111             :        */
  155112             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  155113             : 
  155114             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  155115             : 
  155116             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  155117             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  155118             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  155119             : 
  155120             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  155121             :                    and subject to change.
  155122             :        */
  155123             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  155124             : 
  155125             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  155126             : 
  155127             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  155128             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  155129             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  155130             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  155131             : 
  155132             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  155133             : 
  155134             :           \returns long
  155135             :        */
  155136             :           virtual long getChildIndex( SgNode* childNode ) const override;
  155137             : 
  155138             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  155139             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  155140             :       /* \brief Constructor for use by AST File I/O Mechanism
  155141             : 
  155142             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  155143             :           which obtained via fast binary file I/O from disk.
  155144             :        */
  155145             :        // SgImplicitStatement( SgImplicitStatementStorageClass& source );
  155146             : 
  155147             : 
  155148             : 
  155149             : 
  155150             : 
  155151             :  // JH (10/24/2005): methods added to support the ast file IO
  155152             :     private:
  155153             : 
  155154             :       /* name AST Memory Allocation Support Functions
  155155             :           \brief Memory allocations support....
  155156             : 
  155157             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  155158             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  155159             :           and support the AST File I/O Mechanism.
  155160             :        */
  155161             :       /* */
  155162             : 
  155163             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  155164             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  155165             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  155166             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  155167             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  155168             :           a correspinding one in the AST_FILE_IO class!
  155169             :        */
  155170             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  155171             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  155172             :       /* \brief Typedef used for low level memory access.
  155173             :        */
  155174             :        // typedef unsigned char* TestType;
  155175             : 
  155176             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  155177             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  155178             :       /* \brief Typedef used to hold memory addresses as values.
  155179             :        */
  155180             :        // typedef unsigned long  AddressType;
  155181             : 
  155182             : 
  155183             : 
  155184             :        // necessary, to have direct access to the p_freepointer and the private methods !
  155185             :       /*! \brief friend class declaration to support AST File I/O */
  155186             :           friend class AST_FILE_IO;
  155187             : 
  155188             :       /*! \brief friend class declaration to support AST File I/O */
  155189             :           friend class SgImplicitStatementStorageClass;
  155190             : 
  155191             :       /*! \brief friend class declaration to support AST File I/O */
  155192             :           friend class AstSpecificDataManagingClass;
  155193             : 
  155194             :       /*! \brief friend class declaration to support AST File I/O */
  155195             :           friend class AstSpecificDataManagingClassStorageClass;
  155196             :     public:
  155197             :       /*! \brief IR node constructor to support AST File I/O */
  155198             :           SgImplicitStatement( const SgImplicitStatementStorageClass& source );
  155199             : 
  155200             :  // private: // JJW hack
  155201             :        /*
  155202             :           name AST Memory Allocation Support Variables
  155203             :           Memory allocations support variables 
  155204             : 
  155205             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  155206             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  155207             :           and support the AST File I/O Mechanism.
  155208             :        */
  155209             :       /* */
  155210             : 
  155211             :     public:
  155212             : 
  155213             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  155214             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  155215             :       // virtual SgNode* addRegExpAttribute();
  155216             :       /*! \brief Support for AST matching using regular expression.
  155217             : 
  155218             :           This support is incomplete and the subject of current research to define 
  155219             :           RegEx trees to support inexact matching.
  155220             :        */
  155221             :           SgImplicitStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  155222             : 
  155223             : // *** COMMON CODE SECTION ENDS HERE ***
  155224             : 
  155225             : 
  155226             : // End of memberFunctionString
  155227             : // Start of memberFunctionString
  155228             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  155229             : 
  155230             :      // the generated cast function
  155231             :      // friend ROSE_DLL_API SgImplicitStatement* isSgImplicitStatement ( SgNode* s );
  155232             : 
  155233             :           typedef SgDeclarationStatement base_node_type;
  155234             : 
  155235             : 
  155236             : // End of memberFunctionString
  155237             : // Start of memberFunctionString
  155238             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  155239             : 
  155240             :           void post_construction_initialization() override;
  155241             : 
  155242             : 
  155243             : // End of memberFunctionString
  155244             : 
  155245             :      public: 
  155246             :          bool get_implicit_none() const;
  155247             :          void set_implicit_none(bool implicit_none);
  155248             : 
  155249             :      public: 
  155250             :          SgImplicitStatement::implicit_spec_enum get_implicit_spec() const;
  155251             :          void set_implicit_spec(SgImplicitStatement::implicit_spec_enum implicit_spec);
  155252             : 
  155253             :      public: 
  155254             :          const SgInitializedNamePtrList&  get_variables() const;
  155255             :          SgInitializedNamePtrList& get_variables(); 
  155256             : 
  155257             : 
  155258             :      public: 
  155259             :          virtual ~SgImplicitStatement();
  155260             : 
  155261             : 
  155262             :      public: 
  155263             :          SgImplicitStatement(Sg_File_Info* startOfConstruct , bool implicit_none = false); 
  155264             :          SgImplicitStatement(bool implicit_none); 
  155265             : 
  155266             :     protected:
  155267             : // Start of memberFunctionString
  155268             : bool p_implicit_none;
  155269             :           
  155270             : // End of memberFunctionString
  155271             : // Start of memberFunctionString
  155272             : SgImplicitStatement::implicit_spec_enum p_implicit_spec;
  155273             :           
  155274             : // End of memberFunctionString
  155275             : // Start of memberFunctionString
  155276             : SgInitializedNamePtrList p_variables;
  155277             :           
  155278             : // End of memberFunctionString
  155279             : 
  155280             :     friend struct Rose::Traits::generated::describe_node_t<SgImplicitStatement>;
  155281             :     friend struct Rose::Traits::generated::describe_field_t<SgImplicitStatement, bool,&SgImplicitStatement::p_implicit_none>;
  155282             :     friend struct Rose::Traits::generated::describe_field_t<SgImplicitStatement, SgImplicitStatement::implicit_spec_enum,&SgImplicitStatement::p_implicit_spec>;
  155283             :     friend struct Rose::Traits::generated::describe_field_t<SgImplicitStatement, SgInitializedNamePtrList,&SgImplicitStatement::p_variables>;
  155284             : 
  155285             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155286             : 
  155287             : 
  155288             :    };
  155289             : #endif
  155290             : 
  155291             : // postdeclarations for SgImplicitStatement
  155292             : 
  155293             : /* #line 155294 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155294             : 
  155295             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  155296             : 
  155297             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155298             : 
  155299             : 
  155300             : /* #line 155301 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155301             : 
  155302             : 
  155303             : 
  155304             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155305             : 
  155306             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  155307             : //      This code is automatically generated for each 
  155308             : //      terminal and non-terminal within the defined 
  155309             : //      grammar.  There is a simple way to change the 
  155310             : //      code to fix bugs etc.  See the ROSE README file
  155311             : //      for directions.
  155312             : 
  155313             : // tps: (02/22/2010): Adding DLL export requirements
  155314             : #include "rosedll.h"
  155315             : 
  155316             : // predeclarations for SgUsingDeclarationStatement
  155317             : 
  155318             : /* #line 155319 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155319             : 
  155320             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  155321             : 
  155322             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155323             : 
  155324             : #if 1
  155325             : // Class Definition for SgUsingDeclarationStatement
  155326             : class ROSE_DLL_API SgUsingDeclarationStatement  : public SgDeclarationStatement
  155327             :    {
  155328             :      public:
  155329             : 
  155330             : 
  155331             : /* #line 155332 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155332             : 
  155333             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  155334             : // Start of memberFunctionString
  155335             : /* #line 3183 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  155336             : 
  155337             : 
  155338             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  155339             :           virtual unsigned int cfgIndexForEnd() const override;
  155340             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  155341             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  155342             : #endif
  155343             : 
  155344             : // DQ (7/21/2005): The using declaration can reference either a SgDeclarationStatement or a SgInitializedName
  155345             : // object thus we need a single more general function to return whatever it is.  Maybe not!
  155346             : 
  155347             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  155348             :           virtual SgName get_mangled_name(void) const override;
  155349             : 
  155350             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  155351             :           int get_name_qualification_length() const;
  155352             :           void set_name_qualification_length(int name_qualification_length);
  155353             : 
  155354             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  155355             :           bool get_type_elaboration_required() const;
  155356             :           void set_type_elaboration_required(bool type_elaboration_required);
  155357             : 
  155358             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  155359             :           bool get_global_qualification_required() const;
  155360             :           void set_global_qualification_required(bool global_qualification_required);
  155361             : 
  155362             : 
  155363             : 
  155364             : // End of memberFunctionString
  155365             : // Start of memberFunctionString
  155366             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  155367             : 
  155368             : // *** COMMON CODE SECTION BEGINS HERE ***
  155369             : 
  155370             :     public:
  155371             : 
  155372             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  155373             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  155374             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  155375             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  155376             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  155377             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  155378             : 
  155379             :       /*! \brief returns a string representing the class name */
  155380             :           virtual std::string class_name() const override;
  155381             : 
  155382             :       /*! \brief returns new style SageIII enum values */
  155383             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  155384             : 
  155385             :       /*! \brief static variant value */
  155386             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  155387             :        // static const VariantT static_variant = V_SgUsingDeclarationStatement;
  155388             :           enum { static_variant = V_SgUsingDeclarationStatement };
  155389             : 
  155390             :        /* the generated cast function */
  155391             :       /*! \brief Casts pointer from base class to derived class */
  155392             :           ROSE_DLL_API friend       SgUsingDeclarationStatement* isSgUsingDeclarationStatement(       SgNode * s );
  155393             : 
  155394             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  155395             :           ROSE_DLL_API friend const SgUsingDeclarationStatement* isSgUsingDeclarationStatement( const SgNode * s );
  155396             : 
  155397             :      // ******************************************
  155398             :      // * Memory Pool / New / Delete
  155399             :      // ******************************************
  155400             : 
  155401             :      public:
  155402             :           /// \private
  155403             :           static const unsigned pool_size; //
  155404             :           /// \private
  155405             :           static std::vector<unsigned char *> pools; //
  155406             :           /// \private
  155407             :           static SgUsingDeclarationStatement * next_node; // 
  155408             : 
  155409             :           /// \private
  155410             :           static unsigned long initializeStorageClassArray(SgUsingDeclarationStatementStorageClass *); //
  155411             : 
  155412             :           /// \private
  155413             :           static void clearMemoryPool(); //
  155414             :           static void deleteMemoryPool(); //
  155415             : 
  155416             :           /// \private
  155417             :           static void extendMemoryPoolForFileIO(); //
  155418             : 
  155419             :           /// \private
  155420             :           static SgUsingDeclarationStatement * getPointerFromGlobalIndex(unsigned long); //
  155421             :           /// \private
  155422             :           static SgUsingDeclarationStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  155423             : 
  155424             :           /// \private
  155425             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  155426             :           /// \private
  155427             :           static void resetValidFreepointers(); //
  155428             :           /// \private
  155429             :           static unsigned long getNumberOfLastValidPointer(); //
  155430             : 
  155431             : 
  155432             : #if defined(INLINE_FUNCTIONS)
  155433             :       /*! \brief returns pointer to newly allocated IR node */
  155434             :           inline void *operator new (size_t size);
  155435             : #else
  155436             :       /*! \brief returns pointer to newly allocated IR node */
  155437             :           void *operator new (size_t size);
  155438             : #endif
  155439             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  155440             :           void operator delete (void* pointer, size_t size);
  155441             : 
  155442             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  155443         550 :           void operator delete (void* pointer)
  155444             :              {
  155445             :             // This is the generated delete operator...
  155446         550 :                SgUsingDeclarationStatement::operator delete (pointer,sizeof(SgUsingDeclarationStatement));
  155447             :              }
  155448             : 
  155449             :       /*! \brief Returns the total number of IR nodes of this type */
  155450             :           static size_t numberOfNodes();
  155451             : 
  155452             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  155453             :           static size_t memoryUsage();
  155454             : 
  155455             :       // End of scope which started in IR nodes specific code 
  155456             :       /* */
  155457             : 
  155458             :       /* name Internal Functions
  155459             :           \brief Internal functions ... incomplete-documentation
  155460             : 
  155461             :           These functions have been made public as part of the design, but they are suggested for internal use 
  155462             :           or by particularly knowledgeable users for specialized tools or applications.
  155463             : 
  155464             :           \internal We could not make these private because they are required by user for special purposes. And 
  155465             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  155466             :          
  155467             :        */
  155468             : 
  155469             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  155470             :        // overridden in every class by *generated* implementation
  155471             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  155472             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  155473             :        // MS: 06/28/02 container of names of variables or container indices 
  155474             :        // used used in the traversal to access AST successor nodes
  155475             :        // overridden in every class by *generated* implementation
  155476             :       /*! \brief container of names of variables or container indices used used in the traversal
  155477             :           to access AST successor nodes overridden in every class by *generated* implementation */
  155478             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  155479             : 
  155480             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  155481             :        // than all the vector copies. The implementation for these functions is generated for each class.
  155482             :       /*! \brief return number of children in the traversal successor list */
  155483             :           virtual size_t get_numberOfTraversalSuccessors() override;
  155484             :       /*! \brief index-based access to traversal successors by index number */
  155485             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  155486             :       /*! \brief index-based access to traversal successors by child node */
  155487             :           virtual size_t get_childIndex(SgNode *child) override;
  155488             : 
  155489             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  155490             :        // MS: 08/16/2002 method for generating RTI information
  155491             :       /*! \brief return C++ Runtime-Time-Information */
  155492             :           virtual RTIReturnType roseRTI() override;
  155493             : #endif
  155494             :       /* */
  155495             : 
  155496             : 
  155497             : 
  155498             :       /* name Deprecated Functions
  155499             :           \brief Deprecated functions ... incomplete-documentation
  155500             : 
  155501             :           These functions have been deprecated from use.
  155502             :        */
  155503             :       /* */
  155504             : 
  155505             :       /*! returns a C style string (char*) representing the class name */
  155506             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  155507             : 
  155508             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  155509             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  155510             : #if 0
  155511             :       /*! returns old style Sage II enum values */
  155512             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  155513             :       /*! returns old style Sage II enum values */
  155514             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  155515             : #endif
  155516             :       /* */
  155517             : 
  155518             : 
  155519             : 
  155520             : 
  155521             :      public:
  155522             :       /* name Traversal Support Functions
  155523             :           \brief Traversal support functions ... incomplete-documentation
  155524             : 
  155525             :           These functions have been made public as part of the design, but they are suggested for internal use 
  155526             :           or by particularly knowledgable users for specialized tools or applications.
  155527             :        */
  155528             :       /* */
  155529             : 
  155530             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  155531             :        // (inferior to ROSE traversal mechanism, experimental).
  155532             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  155533             :        */
  155534             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  155535             : 
  155536             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  155537             :       /*! \brief support for the classic visitor pattern done in GoF */
  155538             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  155539             : 
  155540             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  155541             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  155542             :        */
  155543             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  155544             : 
  155545             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  155546             :        */
  155547             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  155548             : 
  155549             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  155550             :        // This traversal helps support internal tools that call static member functions.
  155551             :        // note: this function operates on the memory pools.
  155552             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  155553             :        */
  155554             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  155555             :       /* */
  155556             : 
  155557             : 
  155558             :      public:
  155559             :       /* name Memory Allocation Functions
  155560             :           \brief Memory allocations functions ... incomplete-documentation
  155561             : 
  155562             :           These functions have been made public as part of the design, but they are suggested for internal use 
  155563             :           or by particularly knowledgable users for specialized tools or applications.
  155564             :        */
  155565             :       /* */
  155566             : 
  155567             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  155568             : 
  155569             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  155570             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  155571             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  155572             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  155573             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  155574             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  155575             :           being used with the AST File I/O mechanism.
  155576             :        */
  155577             :           virtual bool isInMemoryPool() override;
  155578             : 
  155579             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  155580             : 
  155581             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  155582             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  155583             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  155584             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  155585             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  155586             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  155587             :           being used with the AST File I/O mechanism.
  155588             :        */
  155589             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  155590             : 
  155591             :       // DQ (4/30/2006): Modified to be a const function.
  155592             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  155593             : 
  155594             :           This functions is part of general support for many possible tools to operate 
  155595             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  155596             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  155597             :           less than the set of pointers used by the AST file I/O. This is part of
  155598             :           work implemented by Andreas, and support tools such as the AST graph generation.
  155599             : 
  155600             :           \warning This function can return unexpected data members and thus the 
  155601             :                    order and the number of elements is unpredicable and subject 
  155602             :                    to change.
  155603             : 
  155604             :           \returns STL vector of pairs of SgNode* and strings
  155605             :        */
  155606             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  155607             : 
  155608             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  155609             : 
  155610             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  155611             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  155612             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  155613             : 
  155614             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  155615             :                    and subject to change.
  155616             :        */
  155617             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  155618             : 
  155619             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  155620             : 
  155621             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  155622             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  155623             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  155624             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  155625             : 
  155626             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  155627             : 
  155628             :           \returns long
  155629             :        */
  155630             :           virtual long getChildIndex( SgNode* childNode ) const override;
  155631             : 
  155632             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  155633             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  155634             :       /* \brief Constructor for use by AST File I/O Mechanism
  155635             : 
  155636             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  155637             :           which obtained via fast binary file I/O from disk.
  155638             :        */
  155639             :        // SgUsingDeclarationStatement( SgUsingDeclarationStatementStorageClass& source );
  155640             : 
  155641             : 
  155642             : 
  155643             : 
  155644             : 
  155645             :  // JH (10/24/2005): methods added to support the ast file IO
  155646             :     private:
  155647             : 
  155648             :       /* name AST Memory Allocation Support Functions
  155649             :           \brief Memory allocations support....
  155650             : 
  155651             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  155652             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  155653             :           and support the AST File I/O Mechanism.
  155654             :        */
  155655             :       /* */
  155656             : 
  155657             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  155658             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  155659             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  155660             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  155661             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  155662             :           a correspinding one in the AST_FILE_IO class!
  155663             :        */
  155664             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  155665             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  155666             :       /* \brief Typedef used for low level memory access.
  155667             :        */
  155668             :        // typedef unsigned char* TestType;
  155669             : 
  155670             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  155671             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  155672             :       /* \brief Typedef used to hold memory addresses as values.
  155673             :        */
  155674             :        // typedef unsigned long  AddressType;
  155675             : 
  155676             : 
  155677             : 
  155678             :        // necessary, to have direct access to the p_freepointer and the private methods !
  155679             :       /*! \brief friend class declaration to support AST File I/O */
  155680             :           friend class AST_FILE_IO;
  155681             : 
  155682             :       /*! \brief friend class declaration to support AST File I/O */
  155683             :           friend class SgUsingDeclarationStatementStorageClass;
  155684             : 
  155685             :       /*! \brief friend class declaration to support AST File I/O */
  155686             :           friend class AstSpecificDataManagingClass;
  155687             : 
  155688             :       /*! \brief friend class declaration to support AST File I/O */
  155689             :           friend class AstSpecificDataManagingClassStorageClass;
  155690             :     public:
  155691             :       /*! \brief IR node constructor to support AST File I/O */
  155692             :           SgUsingDeclarationStatement( const SgUsingDeclarationStatementStorageClass& source );
  155693             : 
  155694             :  // private: // JJW hack
  155695             :        /*
  155696             :           name AST Memory Allocation Support Variables
  155697             :           Memory allocations support variables 
  155698             : 
  155699             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  155700             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  155701             :           and support the AST File I/O Mechanism.
  155702             :        */
  155703             :       /* */
  155704             : 
  155705             :     public:
  155706             : 
  155707             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  155708             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  155709             :       // virtual SgNode* addRegExpAttribute();
  155710             :       /*! \brief Support for AST matching using regular expression.
  155711             : 
  155712             :           This support is incomplete and the subject of current research to define 
  155713             :           RegEx trees to support inexact matching.
  155714             :        */
  155715             :           SgUsingDeclarationStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  155716             : 
  155717             : // *** COMMON CODE SECTION ENDS HERE ***
  155718             : 
  155719             : 
  155720             : // End of memberFunctionString
  155721             : // Start of memberFunctionString
  155722             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  155723             : 
  155724             :      // the generated cast function
  155725             :      // friend ROSE_DLL_API SgUsingDeclarationStatement* isSgUsingDeclarationStatement ( SgNode* s );
  155726             : 
  155727             :           typedef SgDeclarationStatement base_node_type;
  155728             : 
  155729             : 
  155730             : // End of memberFunctionString
  155731             : // Start of memberFunctionString
  155732             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  155733             : 
  155734             :           void post_construction_initialization() override;
  155735             : 
  155736             : 
  155737             : // End of memberFunctionString
  155738             : 
  155739             :      public: 
  155740             :          SgDeclarationStatement* get_declaration() const;
  155741             :          void set_declaration(SgDeclarationStatement* declaration);
  155742             : 
  155743             :      public: 
  155744             :          SgInitializedName* get_initializedName() const;
  155745             :          void set_initializedName(SgInitializedName* initializedName);
  155746             : 
  155747             : 
  155748             : 
  155749             : 
  155750             :      public: 
  155751             :          bool get_is_inheriting_constructor() const;
  155752             :          void set_is_inheriting_constructor(bool is_inheriting_constructor);
  155753             : 
  155754             : 
  155755             :      public: 
  155756             :          virtual ~SgUsingDeclarationStatement();
  155757             : 
  155758             : 
  155759             :      public: 
  155760             :          SgUsingDeclarationStatement(Sg_File_Info* startOfConstruct , SgDeclarationStatement* declaration = NULL, SgInitializedName* initializedName = NULL); 
  155761             :          SgUsingDeclarationStatement(SgDeclarationStatement* declaration, SgInitializedName* initializedName); 
  155762             : 
  155763             :     protected:
  155764             : // Start of memberFunctionString
  155765             : SgDeclarationStatement* p_declaration;
  155766             :           
  155767             : // End of memberFunctionString
  155768             : // Start of memberFunctionString
  155769             : SgInitializedName* p_initializedName;
  155770             :           
  155771             : // End of memberFunctionString
  155772             : // Start of memberFunctionString
  155773             : int p_name_qualification_length;
  155774             :           
  155775             : // End of memberFunctionString
  155776             : // Start of memberFunctionString
  155777             : bool p_type_elaboration_required;
  155778             :           
  155779             : // End of memberFunctionString
  155780             : // Start of memberFunctionString
  155781             : bool p_global_qualification_required;
  155782             :           
  155783             : // End of memberFunctionString
  155784             : // Start of memberFunctionString
  155785             : bool p_is_inheriting_constructor;
  155786             :           
  155787             : // End of memberFunctionString
  155788             : 
  155789             :     friend struct Rose::Traits::generated::describe_node_t<SgUsingDeclarationStatement>;
  155790             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDeclarationStatement, SgDeclarationStatement*,&SgUsingDeclarationStatement::p_declaration>;
  155791             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDeclarationStatement, SgInitializedName*,&SgUsingDeclarationStatement::p_initializedName>;
  155792             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDeclarationStatement, int,&SgUsingDeclarationStatement::p_name_qualification_length>;
  155793             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDeclarationStatement, bool,&SgUsingDeclarationStatement::p_type_elaboration_required>;
  155794             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDeclarationStatement, bool,&SgUsingDeclarationStatement::p_global_qualification_required>;
  155795             :     friend struct Rose::Traits::generated::describe_field_t<SgUsingDeclarationStatement, bool,&SgUsingDeclarationStatement::p_is_inheriting_constructor>;
  155796             : 
  155797             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155798             : 
  155799             : 
  155800             :    };
  155801             : #endif
  155802             : 
  155803             : // postdeclarations for SgUsingDeclarationStatement
  155804             : 
  155805             : /* #line 155806 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155806             : 
  155807             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  155808             : 
  155809             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155810             : 
  155811             : 
  155812             : /* #line 155813 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155813             : 
  155814             : 
  155815             : 
  155816             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155817             : 
  155818             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  155819             : //      This code is automatically generated for each 
  155820             : //      terminal and non-terminal within the defined 
  155821             : //      grammar.  There is a simple way to change the 
  155822             : //      code to fix bugs etc.  See the ROSE README file
  155823             : //      for directions.
  155824             : 
  155825             : // tps: (02/22/2010): Adding DLL export requirements
  155826             : #include "rosedll.h"
  155827             : 
  155828             : // predeclarations for SgNamelistStatement
  155829             : 
  155830             : /* #line 155831 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155831             : 
  155832             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  155833             : 
  155834             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  155835             : 
  155836             : #if 1
  155837             : // Class Definition for SgNamelistStatement
  155838             : class ROSE_DLL_API SgNamelistStatement  : public SgDeclarationStatement
  155839             :    {
  155840             :      public:
  155841             : 
  155842             : 
  155843             : /* #line 155844 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  155844             : 
  155845             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  155846             : // Start of memberFunctionString
  155847             : /* #line 3792 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  155848             : 
  155849             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  155850             :           virtual unsigned int cfgIndexForEnd() const override;
  155851             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  155852             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  155853             : #endif
  155854             : 
  155855             :           virtual SgName get_mangled_name() const override;
  155856             : 
  155857             :           const SgNameGroupPtrList & get_group_list() const;
  155858             :           SgNameGroupPtrList & get_group_list();
  155859             : 
  155860             : 
  155861             : // End of memberFunctionString
  155862             : // Start of memberFunctionString
  155863             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  155864             : 
  155865             : // *** COMMON CODE SECTION BEGINS HERE ***
  155866             : 
  155867             :     public:
  155868             : 
  155869             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  155870             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  155871             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  155872             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  155873             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  155874             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  155875             : 
  155876             :       /*! \brief returns a string representing the class name */
  155877             :           virtual std::string class_name() const override;
  155878             : 
  155879             :       /*! \brief returns new style SageIII enum values */
  155880             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  155881             : 
  155882             :       /*! \brief static variant value */
  155883             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  155884             :        // static const VariantT static_variant = V_SgNamelistStatement;
  155885             :           enum { static_variant = V_SgNamelistStatement };
  155886             : 
  155887             :        /* the generated cast function */
  155888             :       /*! \brief Casts pointer from base class to derived class */
  155889             :           ROSE_DLL_API friend       SgNamelistStatement* isSgNamelistStatement(       SgNode * s );
  155890             : 
  155891             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  155892             :           ROSE_DLL_API friend const SgNamelistStatement* isSgNamelistStatement( const SgNode * s );
  155893             : 
  155894             :      // ******************************************
  155895             :      // * Memory Pool / New / Delete
  155896             :      // ******************************************
  155897             : 
  155898             :      public:
  155899             :           /// \private
  155900             :           static const unsigned pool_size; //
  155901             :           /// \private
  155902             :           static std::vector<unsigned char *> pools; //
  155903             :           /// \private
  155904             :           static SgNamelistStatement * next_node; // 
  155905             : 
  155906             :           /// \private
  155907             :           static unsigned long initializeStorageClassArray(SgNamelistStatementStorageClass *); //
  155908             : 
  155909             :           /// \private
  155910             :           static void clearMemoryPool(); //
  155911             :           static void deleteMemoryPool(); //
  155912             : 
  155913             :           /// \private
  155914             :           static void extendMemoryPoolForFileIO(); //
  155915             : 
  155916             :           /// \private
  155917             :           static SgNamelistStatement * getPointerFromGlobalIndex(unsigned long); //
  155918             :           /// \private
  155919             :           static SgNamelistStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  155920             : 
  155921             :           /// \private
  155922             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  155923             :           /// \private
  155924             :           static void resetValidFreepointers(); //
  155925             :           /// \private
  155926             :           static unsigned long getNumberOfLastValidPointer(); //
  155927             : 
  155928             : 
  155929             : #if defined(INLINE_FUNCTIONS)
  155930             :       /*! \brief returns pointer to newly allocated IR node */
  155931             :           inline void *operator new (size_t size);
  155932             : #else
  155933             :       /*! \brief returns pointer to newly allocated IR node */
  155934             :           void *operator new (size_t size);
  155935             : #endif
  155936             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  155937             :           void operator delete (void* pointer, size_t size);
  155938             : 
  155939             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  155940           0 :           void operator delete (void* pointer)
  155941             :              {
  155942             :             // This is the generated delete operator...
  155943           0 :                SgNamelistStatement::operator delete (pointer,sizeof(SgNamelistStatement));
  155944             :              }
  155945             : 
  155946             :       /*! \brief Returns the total number of IR nodes of this type */
  155947             :           static size_t numberOfNodes();
  155948             : 
  155949             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  155950             :           static size_t memoryUsage();
  155951             : 
  155952             :       // End of scope which started in IR nodes specific code 
  155953             :       /* */
  155954             : 
  155955             :       /* name Internal Functions
  155956             :           \brief Internal functions ... incomplete-documentation
  155957             : 
  155958             :           These functions have been made public as part of the design, but they are suggested for internal use 
  155959             :           or by particularly knowledgeable users for specialized tools or applications.
  155960             : 
  155961             :           \internal We could not make these private because they are required by user for special purposes. And 
  155962             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  155963             :          
  155964             :        */
  155965             : 
  155966             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  155967             :        // overridden in every class by *generated* implementation
  155968             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  155969             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  155970             :        // MS: 06/28/02 container of names of variables or container indices 
  155971             :        // used used in the traversal to access AST successor nodes
  155972             :        // overridden in every class by *generated* implementation
  155973             :       /*! \brief container of names of variables or container indices used used in the traversal
  155974             :           to access AST successor nodes overridden in every class by *generated* implementation */
  155975             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  155976             : 
  155977             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  155978             :        // than all the vector copies. The implementation for these functions is generated for each class.
  155979             :       /*! \brief return number of children in the traversal successor list */
  155980             :           virtual size_t get_numberOfTraversalSuccessors() override;
  155981             :       /*! \brief index-based access to traversal successors by index number */
  155982             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  155983             :       /*! \brief index-based access to traversal successors by child node */
  155984             :           virtual size_t get_childIndex(SgNode *child) override;
  155985             : 
  155986             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  155987             :        // MS: 08/16/2002 method for generating RTI information
  155988             :       /*! \brief return C++ Runtime-Time-Information */
  155989             :           virtual RTIReturnType roseRTI() override;
  155990             : #endif
  155991             :       /* */
  155992             : 
  155993             : 
  155994             : 
  155995             :       /* name Deprecated Functions
  155996             :           \brief Deprecated functions ... incomplete-documentation
  155997             : 
  155998             :           These functions have been deprecated from use.
  155999             :        */
  156000             :       /* */
  156001             : 
  156002             :       /*! returns a C style string (char*) representing the class name */
  156003             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  156004             : 
  156005             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  156006             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  156007             : #if 0
  156008             :       /*! returns old style Sage II enum values */
  156009             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  156010             :       /*! returns old style Sage II enum values */
  156011             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  156012             : #endif
  156013             :       /* */
  156014             : 
  156015             : 
  156016             : 
  156017             : 
  156018             :      public:
  156019             :       /* name Traversal Support Functions
  156020             :           \brief Traversal support functions ... incomplete-documentation
  156021             : 
  156022             :           These functions have been made public as part of the design, but they are suggested for internal use 
  156023             :           or by particularly knowledgable users for specialized tools or applications.
  156024             :        */
  156025             :       /* */
  156026             : 
  156027             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  156028             :        // (inferior to ROSE traversal mechanism, experimental).
  156029             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  156030             :        */
  156031             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  156032             : 
  156033             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  156034             :       /*! \brief support for the classic visitor pattern done in GoF */
  156035             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  156036             : 
  156037             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  156038             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  156039             :        */
  156040             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  156041             : 
  156042             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  156043             :        */
  156044             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  156045             : 
  156046             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  156047             :        // This traversal helps support internal tools that call static member functions.
  156048             :        // note: this function operates on the memory pools.
  156049             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  156050             :        */
  156051             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  156052             :       /* */
  156053             : 
  156054             : 
  156055             :      public:
  156056             :       /* name Memory Allocation Functions
  156057             :           \brief Memory allocations functions ... incomplete-documentation
  156058             : 
  156059             :           These functions have been made public as part of the design, but they are suggested for internal use 
  156060             :           or by particularly knowledgable users for specialized tools or applications.
  156061             :        */
  156062             :       /* */
  156063             : 
  156064             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  156065             : 
  156066             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  156067             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  156068             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  156069             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  156070             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  156071             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  156072             :           being used with the AST File I/O mechanism.
  156073             :        */
  156074             :           virtual bool isInMemoryPool() override;
  156075             : 
  156076             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  156077             : 
  156078             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  156079             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  156080             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  156081             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  156082             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  156083             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  156084             :           being used with the AST File I/O mechanism.
  156085             :        */
  156086             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  156087             : 
  156088             :       // DQ (4/30/2006): Modified to be a const function.
  156089             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  156090             : 
  156091             :           This functions is part of general support for many possible tools to operate 
  156092             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  156093             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  156094             :           less than the set of pointers used by the AST file I/O. This is part of
  156095             :           work implemented by Andreas, and support tools such as the AST graph generation.
  156096             : 
  156097             :           \warning This function can return unexpected data members and thus the 
  156098             :                    order and the number of elements is unpredicable and subject 
  156099             :                    to change.
  156100             : 
  156101             :           \returns STL vector of pairs of SgNode* and strings
  156102             :        */
  156103             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  156104             : 
  156105             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  156106             : 
  156107             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  156108             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  156109             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  156110             : 
  156111             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  156112             :                    and subject to change.
  156113             :        */
  156114             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  156115             : 
  156116             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  156117             : 
  156118             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  156119             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  156120             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  156121             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  156122             : 
  156123             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  156124             : 
  156125             :           \returns long
  156126             :        */
  156127             :           virtual long getChildIndex( SgNode* childNode ) const override;
  156128             : 
  156129             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  156130             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  156131             :       /* \brief Constructor for use by AST File I/O Mechanism
  156132             : 
  156133             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  156134             :           which obtained via fast binary file I/O from disk.
  156135             :        */
  156136             :        // SgNamelistStatement( SgNamelistStatementStorageClass& source );
  156137             : 
  156138             : 
  156139             : 
  156140             : 
  156141             : 
  156142             :  // JH (10/24/2005): methods added to support the ast file IO
  156143             :     private:
  156144             : 
  156145             :       /* name AST Memory Allocation Support Functions
  156146             :           \brief Memory allocations support....
  156147             : 
  156148             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  156149             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  156150             :           and support the AST File I/O Mechanism.
  156151             :        */
  156152             :       /* */
  156153             : 
  156154             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  156155             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  156156             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  156157             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  156158             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  156159             :           a correspinding one in the AST_FILE_IO class!
  156160             :        */
  156161             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  156162             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  156163             :       /* \brief Typedef used for low level memory access.
  156164             :        */
  156165             :        // typedef unsigned char* TestType;
  156166             : 
  156167             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  156168             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  156169             :       /* \brief Typedef used to hold memory addresses as values.
  156170             :        */
  156171             :        // typedef unsigned long  AddressType;
  156172             : 
  156173             : 
  156174             : 
  156175             :        // necessary, to have direct access to the p_freepointer and the private methods !
  156176             :       /*! \brief friend class declaration to support AST File I/O */
  156177             :           friend class AST_FILE_IO;
  156178             : 
  156179             :       /*! \brief friend class declaration to support AST File I/O */
  156180             :           friend class SgNamelistStatementStorageClass;
  156181             : 
  156182             :       /*! \brief friend class declaration to support AST File I/O */
  156183             :           friend class AstSpecificDataManagingClass;
  156184             : 
  156185             :       /*! \brief friend class declaration to support AST File I/O */
  156186             :           friend class AstSpecificDataManagingClassStorageClass;
  156187             :     public:
  156188             :       /*! \brief IR node constructor to support AST File I/O */
  156189             :           SgNamelistStatement( const SgNamelistStatementStorageClass& source );
  156190             : 
  156191             :  // private: // JJW hack
  156192             :        /*
  156193             :           name AST Memory Allocation Support Variables
  156194             :           Memory allocations support variables 
  156195             : 
  156196             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  156197             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  156198             :           and support the AST File I/O Mechanism.
  156199             :        */
  156200             :       /* */
  156201             : 
  156202             :     public:
  156203             : 
  156204             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  156205             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  156206             :       // virtual SgNode* addRegExpAttribute();
  156207             :       /*! \brief Support for AST matching using regular expression.
  156208             : 
  156209             :           This support is incomplete and the subject of current research to define 
  156210             :           RegEx trees to support inexact matching.
  156211             :        */
  156212             :           SgNamelistStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  156213             : 
  156214             : // *** COMMON CODE SECTION ENDS HERE ***
  156215             : 
  156216             : 
  156217             : // End of memberFunctionString
  156218             : // Start of memberFunctionString
  156219             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  156220             : 
  156221             :      // the generated cast function
  156222             :      // friend ROSE_DLL_API SgNamelistStatement* isSgNamelistStatement ( SgNode* s );
  156223             : 
  156224             :           typedef SgDeclarationStatement base_node_type;
  156225             : 
  156226             : 
  156227             : // End of memberFunctionString
  156228             : // Start of memberFunctionString
  156229             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  156230             : 
  156231             :           void post_construction_initialization() override;
  156232             : 
  156233             : 
  156234             : // End of memberFunctionString
  156235             : 
  156236             : 
  156237             : 
  156238             :      public: 
  156239             :          virtual ~SgNamelistStatement();
  156240             : 
  156241             : 
  156242             :      public: 
  156243             :          SgNamelistStatement(Sg_File_Info* startOfConstruct ); 
  156244             :          SgNamelistStatement(); 
  156245             : 
  156246             :     protected:
  156247             : // Start of memberFunctionString
  156248             : SgNameGroupPtrList p_group_list;
  156249             :           
  156250             : // End of memberFunctionString
  156251             : 
  156252             :     friend struct Rose::Traits::generated::describe_node_t<SgNamelistStatement>;
  156253             :     friend struct Rose::Traits::generated::describe_field_t<SgNamelistStatement, SgNameGroupPtrList,&SgNamelistStatement::p_group_list>;
  156254             : 
  156255             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156256             : 
  156257             : 
  156258             :    };
  156259             : #endif
  156260             : 
  156261             : // postdeclarations for SgNamelistStatement
  156262             : 
  156263             : /* #line 156264 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156264             : 
  156265             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  156266             : 
  156267             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156268             : 
  156269             : 
  156270             : /* #line 156271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156271             : 
  156272             : 
  156273             : 
  156274             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156275             : 
  156276             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  156277             : //      This code is automatically generated for each 
  156278             : //      terminal and non-terminal within the defined 
  156279             : //      grammar.  There is a simple way to change the 
  156280             : //      code to fix bugs etc.  See the ROSE README file
  156281             : //      for directions.
  156282             : 
  156283             : // tps: (02/22/2010): Adding DLL export requirements
  156284             : #include "rosedll.h"
  156285             : 
  156286             : // predeclarations for SgImportStatement
  156287             : 
  156288             : /* #line 156289 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156289             : 
  156290             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  156291             : 
  156292             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156293             : 
  156294             : #if 1
  156295             : // Class Definition for SgImportStatement
  156296             : class ROSE_DLL_API SgImportStatement  : public SgDeclarationStatement
  156297             :    {
  156298             :      public:
  156299             : 
  156300             : 
  156301             : /* #line 156302 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156302             : 
  156303             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  156304             : // Start of memberFunctionString
  156305             : /* #line 3806 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  156306             : 
  156307             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  156308             :           virtual unsigned int cfgIndexForEnd() const override;
  156309             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  156310             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  156311             : #endif
  156312             : 
  156313             :           virtual SgName get_mangled_name() const override;
  156314             : 
  156315             :           const SgExpressionPtrList & get_import_list() const;
  156316             :           SgExpressionPtrList & get_import_list();
  156317             : 
  156318             : 
  156319             : // End of memberFunctionString
  156320             : // Start of memberFunctionString
  156321             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  156322             : 
  156323             : // *** COMMON CODE SECTION BEGINS HERE ***
  156324             : 
  156325             :     public:
  156326             : 
  156327             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  156328             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  156329             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  156330             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  156331             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  156332             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  156333             : 
  156334             :       /*! \brief returns a string representing the class name */
  156335             :           virtual std::string class_name() const override;
  156336             : 
  156337             :       /*! \brief returns new style SageIII enum values */
  156338             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  156339             : 
  156340             :       /*! \brief static variant value */
  156341             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  156342             :        // static const VariantT static_variant = V_SgImportStatement;
  156343             :           enum { static_variant = V_SgImportStatement };
  156344             : 
  156345             :        /* the generated cast function */
  156346             :       /*! \brief Casts pointer from base class to derived class */
  156347             :           ROSE_DLL_API friend       SgImportStatement* isSgImportStatement(       SgNode * s );
  156348             : 
  156349             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  156350             :           ROSE_DLL_API friend const SgImportStatement* isSgImportStatement( const SgNode * s );
  156351             : 
  156352             :      // ******************************************
  156353             :      // * Memory Pool / New / Delete
  156354             :      // ******************************************
  156355             : 
  156356             :      public:
  156357             :           /// \private
  156358             :           static const unsigned pool_size; //
  156359             :           /// \private
  156360             :           static std::vector<unsigned char *> pools; //
  156361             :           /// \private
  156362             :           static SgImportStatement * next_node; // 
  156363             : 
  156364             :           /// \private
  156365             :           static unsigned long initializeStorageClassArray(SgImportStatementStorageClass *); //
  156366             : 
  156367             :           /// \private
  156368             :           static void clearMemoryPool(); //
  156369             :           static void deleteMemoryPool(); //
  156370             : 
  156371             :           /// \private
  156372             :           static void extendMemoryPoolForFileIO(); //
  156373             : 
  156374             :           /// \private
  156375             :           static SgImportStatement * getPointerFromGlobalIndex(unsigned long); //
  156376             :           /// \private
  156377             :           static SgImportStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  156378             : 
  156379             :           /// \private
  156380             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  156381             :           /// \private
  156382             :           static void resetValidFreepointers(); //
  156383             :           /// \private
  156384             :           static unsigned long getNumberOfLastValidPointer(); //
  156385             : 
  156386             : 
  156387             : #if defined(INLINE_FUNCTIONS)
  156388             :       /*! \brief returns pointer to newly allocated IR node */
  156389             :           inline void *operator new (size_t size);
  156390             : #else
  156391             :       /*! \brief returns pointer to newly allocated IR node */
  156392             :           void *operator new (size_t size);
  156393             : #endif
  156394             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  156395             :           void operator delete (void* pointer, size_t size);
  156396             : 
  156397             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  156398           0 :           void operator delete (void* pointer)
  156399             :              {
  156400             :             // This is the generated delete operator...
  156401           0 :                SgImportStatement::operator delete (pointer,sizeof(SgImportStatement));
  156402             :              }
  156403             : 
  156404             :       /*! \brief Returns the total number of IR nodes of this type */
  156405             :           static size_t numberOfNodes();
  156406             : 
  156407             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  156408             :           static size_t memoryUsage();
  156409             : 
  156410             :       // End of scope which started in IR nodes specific code 
  156411             :       /* */
  156412             : 
  156413             :       /* name Internal Functions
  156414             :           \brief Internal functions ... incomplete-documentation
  156415             : 
  156416             :           These functions have been made public as part of the design, but they are suggested for internal use 
  156417             :           or by particularly knowledgeable users for specialized tools or applications.
  156418             : 
  156419             :           \internal We could not make these private because they are required by user for special purposes. And 
  156420             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  156421             :          
  156422             :        */
  156423             : 
  156424             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  156425             :        // overridden in every class by *generated* implementation
  156426             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  156427             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  156428             :        // MS: 06/28/02 container of names of variables or container indices 
  156429             :        // used used in the traversal to access AST successor nodes
  156430             :        // overridden in every class by *generated* implementation
  156431             :       /*! \brief container of names of variables or container indices used used in the traversal
  156432             :           to access AST successor nodes overridden in every class by *generated* implementation */
  156433             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  156434             : 
  156435             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  156436             :        // than all the vector copies. The implementation for these functions is generated for each class.
  156437             :       /*! \brief return number of children in the traversal successor list */
  156438             :           virtual size_t get_numberOfTraversalSuccessors() override;
  156439             :       /*! \brief index-based access to traversal successors by index number */
  156440             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  156441             :       /*! \brief index-based access to traversal successors by child node */
  156442             :           virtual size_t get_childIndex(SgNode *child) override;
  156443             : 
  156444             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  156445             :        // MS: 08/16/2002 method for generating RTI information
  156446             :       /*! \brief return C++ Runtime-Time-Information */
  156447             :           virtual RTIReturnType roseRTI() override;
  156448             : #endif
  156449             :       /* */
  156450             : 
  156451             : 
  156452             : 
  156453             :       /* name Deprecated Functions
  156454             :           \brief Deprecated functions ... incomplete-documentation
  156455             : 
  156456             :           These functions have been deprecated from use.
  156457             :        */
  156458             :       /* */
  156459             : 
  156460             :       /*! returns a C style string (char*) representing the class name */
  156461             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  156462             : 
  156463             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  156464             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  156465             : #if 0
  156466             :       /*! returns old style Sage II enum values */
  156467             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  156468             :       /*! returns old style Sage II enum values */
  156469             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  156470             : #endif
  156471             :       /* */
  156472             : 
  156473             : 
  156474             : 
  156475             : 
  156476             :      public:
  156477             :       /* name Traversal Support Functions
  156478             :           \brief Traversal support functions ... incomplete-documentation
  156479             : 
  156480             :           These functions have been made public as part of the design, but they are suggested for internal use 
  156481             :           or by particularly knowledgable users for specialized tools or applications.
  156482             :        */
  156483             :       /* */
  156484             : 
  156485             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  156486             :        // (inferior to ROSE traversal mechanism, experimental).
  156487             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  156488             :        */
  156489             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  156490             : 
  156491             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  156492             :       /*! \brief support for the classic visitor pattern done in GoF */
  156493             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  156494             : 
  156495             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  156496             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  156497             :        */
  156498             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  156499             : 
  156500             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  156501             :        */
  156502             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  156503             : 
  156504             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  156505             :        // This traversal helps support internal tools that call static member functions.
  156506             :        // note: this function operates on the memory pools.
  156507             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  156508             :        */
  156509             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  156510             :       /* */
  156511             : 
  156512             : 
  156513             :      public:
  156514             :       /* name Memory Allocation Functions
  156515             :           \brief Memory allocations functions ... incomplete-documentation
  156516             : 
  156517             :           These functions have been made public as part of the design, but they are suggested for internal use 
  156518             :           or by particularly knowledgable users for specialized tools or applications.
  156519             :        */
  156520             :       /* */
  156521             : 
  156522             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  156523             : 
  156524             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  156525             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  156526             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  156527             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  156528             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  156529             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  156530             :           being used with the AST File I/O mechanism.
  156531             :        */
  156532             :           virtual bool isInMemoryPool() override;
  156533             : 
  156534             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  156535             : 
  156536             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  156537             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  156538             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  156539             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  156540             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  156541             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  156542             :           being used with the AST File I/O mechanism.
  156543             :        */
  156544             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  156545             : 
  156546             :       // DQ (4/30/2006): Modified to be a const function.
  156547             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  156548             : 
  156549             :           This functions is part of general support for many possible tools to operate 
  156550             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  156551             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  156552             :           less than the set of pointers used by the AST file I/O. This is part of
  156553             :           work implemented by Andreas, and support tools such as the AST graph generation.
  156554             : 
  156555             :           \warning This function can return unexpected data members and thus the 
  156556             :                    order and the number of elements is unpredicable and subject 
  156557             :                    to change.
  156558             : 
  156559             :           \returns STL vector of pairs of SgNode* and strings
  156560             :        */
  156561             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  156562             : 
  156563             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  156564             : 
  156565             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  156566             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  156567             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  156568             : 
  156569             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  156570             :                    and subject to change.
  156571             :        */
  156572             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  156573             : 
  156574             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  156575             : 
  156576             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  156577             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  156578             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  156579             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  156580             : 
  156581             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  156582             : 
  156583             :           \returns long
  156584             :        */
  156585             :           virtual long getChildIndex( SgNode* childNode ) const override;
  156586             : 
  156587             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  156588             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  156589             :       /* \brief Constructor for use by AST File I/O Mechanism
  156590             : 
  156591             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  156592             :           which obtained via fast binary file I/O from disk.
  156593             :        */
  156594             :        // SgImportStatement( SgImportStatementStorageClass& source );
  156595             : 
  156596             : 
  156597             : 
  156598             : 
  156599             : 
  156600             :  // JH (10/24/2005): methods added to support the ast file IO
  156601             :     private:
  156602             : 
  156603             :       /* name AST Memory Allocation Support Functions
  156604             :           \brief Memory allocations support....
  156605             : 
  156606             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  156607             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  156608             :           and support the AST File I/O Mechanism.
  156609             :        */
  156610             :       /* */
  156611             : 
  156612             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  156613             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  156614             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  156615             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  156616             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  156617             :           a correspinding one in the AST_FILE_IO class!
  156618             :        */
  156619             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  156620             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  156621             :       /* \brief Typedef used for low level memory access.
  156622             :        */
  156623             :        // typedef unsigned char* TestType;
  156624             : 
  156625             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  156626             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  156627             :       /* \brief Typedef used to hold memory addresses as values.
  156628             :        */
  156629             :        // typedef unsigned long  AddressType;
  156630             : 
  156631             : 
  156632             : 
  156633             :        // necessary, to have direct access to the p_freepointer and the private methods !
  156634             :       /*! \brief friend class declaration to support AST File I/O */
  156635             :           friend class AST_FILE_IO;
  156636             : 
  156637             :       /*! \brief friend class declaration to support AST File I/O */
  156638             :           friend class SgImportStatementStorageClass;
  156639             : 
  156640             :       /*! \brief friend class declaration to support AST File I/O */
  156641             :           friend class AstSpecificDataManagingClass;
  156642             : 
  156643             :       /*! \brief friend class declaration to support AST File I/O */
  156644             :           friend class AstSpecificDataManagingClassStorageClass;
  156645             :     public:
  156646             :       /*! \brief IR node constructor to support AST File I/O */
  156647             :           SgImportStatement( const SgImportStatementStorageClass& source );
  156648             : 
  156649             :  // private: // JJW hack
  156650             :        /*
  156651             :           name AST Memory Allocation Support Variables
  156652             :           Memory allocations support variables 
  156653             : 
  156654             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  156655             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  156656             :           and support the AST File I/O Mechanism.
  156657             :        */
  156658             :       /* */
  156659             : 
  156660             :     public:
  156661             : 
  156662             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  156663             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  156664             :       // virtual SgNode* addRegExpAttribute();
  156665             :       /*! \brief Support for AST matching using regular expression.
  156666             : 
  156667             :           This support is incomplete and the subject of current research to define 
  156668             :           RegEx trees to support inexact matching.
  156669             :        */
  156670             :           SgImportStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  156671             : 
  156672             : // *** COMMON CODE SECTION ENDS HERE ***
  156673             : 
  156674             : 
  156675             : // End of memberFunctionString
  156676             : // Start of memberFunctionString
  156677             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  156678             : 
  156679             :      // the generated cast function
  156680             :      // friend ROSE_DLL_API SgImportStatement* isSgImportStatement ( SgNode* s );
  156681             : 
  156682             :           typedef SgDeclarationStatement base_node_type;
  156683             : 
  156684             : 
  156685             : // End of memberFunctionString
  156686             : // Start of memberFunctionString
  156687             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  156688             : 
  156689             :           void post_construction_initialization() override;
  156690             : 
  156691             : 
  156692             : // End of memberFunctionString
  156693             : 
  156694             : 
  156695             : 
  156696             :      public: 
  156697             :          virtual ~SgImportStatement();
  156698             : 
  156699             : 
  156700             :      public: 
  156701             :          SgImportStatement(Sg_File_Info* startOfConstruct ); 
  156702             :          SgImportStatement(); 
  156703             : 
  156704             :     protected:
  156705             : // Start of memberFunctionString
  156706             : SgExpressionPtrList p_import_list;
  156707             :           
  156708             : // End of memberFunctionString
  156709             : 
  156710             :     friend struct Rose::Traits::generated::describe_node_t<SgImportStatement>;
  156711             :     friend struct Rose::Traits::generated::describe_field_t<SgImportStatement, SgExpressionPtrList,&SgImportStatement::p_import_list>;
  156712             : 
  156713             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156714             : 
  156715             : 
  156716             :    };
  156717             : #endif
  156718             : 
  156719             : // postdeclarations for SgImportStatement
  156720             : 
  156721             : /* #line 156722 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156722             : 
  156723             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  156724             : 
  156725             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156726             : 
  156727             : 
  156728             : /* #line 156729 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156729             : 
  156730             : 
  156731             : 
  156732             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156733             : 
  156734             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  156735             : //      This code is automatically generated for each 
  156736             : //      terminal and non-terminal within the defined 
  156737             : //      grammar.  There is a simple way to change the 
  156738             : //      code to fix bugs etc.  See the ROSE README file
  156739             : //      for directions.
  156740             : 
  156741             : // tps: (02/22/2010): Adding DLL export requirements
  156742             : #include "rosedll.h"
  156743             : 
  156744             : // predeclarations for SgFunctionDeclaration
  156745             : 
  156746             : /* #line 156747 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156747             : 
  156748             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  156749             : 
  156750             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  156751             : 
  156752             : #if 1
  156753             : // Class Definition for SgFunctionDeclaration
  156754             : class ROSE_DLL_API SgFunctionDeclaration  : public SgDeclarationStatement
  156755             :    {
  156756             :      public:
  156757             : 
  156758             : 
  156759             : /* #line 156760 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  156760             : 
  156761             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  156762             : // Start of memberFunctionString
  156763             : /* #line 1523 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  156764             : 
  156765             : 
  156766             :       //! Support for C++ covariant return types (used in virtual function overloading).
  156767             :           SgType* get_orig_return_type() const;
  156768             : 
  156769             :        // Empty declaration substitution
  156770             :        // void set_mangled_name();
  156771             :        // SgName get_mangled_name() const override;
  156772             : 
  156773             :        // RV (1/31/2006): Removed dependence on SgUnparse_Info, and made virtual.
  156774             :           virtual SgName get_mangled_name(void) const override;
  156775             : 
  156776             :        // DQ (4/28/2005): functions that are SgTemplateInstatiationMemberFunctionDecl can be non-template
  156777             :        // functions in a class that is a template class or a nested class in a templated class, this function
  156778             :        // identifies the SgTemplateInstatiationMemberFunctionDecl as being a template function if it has
  156779             :        // template parameters.
  156780             :           bool isTemplateFunction() const;
  156781             : 
  156782             :           SgInitializedNamePtrList & get_args() ;
  156783             :           const SgInitializedNamePtrList & get_args() const;
  156784             : 
  156785             :       //! Support for where the scope is explicitly required
  156786             :           virtual bool hasExplicitScope() const override;
  156787             : 
  156788             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  156789             : 
  156790             : #if ALT_FIXUP_COPY
  156791             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  156792             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  156793             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  156794             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  156795             : #else
  156796             :        // DQ (10/6/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  156797             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  156798             : #endif
  156799             : 
  156800             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  156801             : 
  156802             :      public:
  156803             :           virtual void append_arg  ( SgInitializedName* element );
  156804             :           virtual void prepend_arg ( SgInitializedName* element );
  156805             : 
  156806             :      public:
  156807             :        // New functions added
  156808             :        // SgInitializedNamePtrList::iterator append_arg  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  156809             :        // SgInitializedNamePtrList::iterator prepend_arg ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  156810             : 
  156811             :        // SgInitializedNamePtrList::iterator insert_arg  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  156812             : 
  156813             : 
  156814             :      public:
  156815             : 
  156816             : 
  156817             : 
  156818             : 
  156819             : #if 0
  156820             :        // DQ (10/20/2004): Since constructor names don't require their template arguments this has a far simpler solution!
  156821             :        // for example: "template <typename T> class X { X(); }; X<int>::X() {}"
  156822             : 
  156823             :        // DQ (10/20/2004): This function should be different from those that are automatically generated
  156824             :        // via ROSETTA.  In the case of a constructor or destructor the class name should be used.  This
  156825             :        // is particularly important in the case of constructors and destructors of templated classes since
  156826             :        // the mangled form or the template class should not be used since it will not allow the generated
  156827             :        // code to compile.  Instead of names of the form "ABC____L8" we want names of the form "ABC<int>".
  156828             :        // These functions are now implemented explicitly instead of being automatically generated via ROSETTA.
  156829             :           SgName get_name() const;
  156830             :           void set_name( SgName & functionName );
  156831             : #endif
  156832             : 
  156833             :           void hasEllipses();
  156834             : 
  156835             :        // DQ (5/3/2005): Added get_qualified_name() function for interface symmetry (and because
  156836             :        // it makes sense given that the same function can exist in two different namespaces and
  156837             :        // that only the qualified name would distinguish them).
  156838             :           virtual SgName get_qualified_name() const;
  156839             : 
  156840             :        // DQ (9/7/2014): Added to support template headers in template declarations (member and non-member function declarations).
  156841             :           SgName get_template_header() const;
  156842             : 
  156843             :      protected:
  156844             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  156845             : 
  156846             :      public:  // (see comment above)
  156847             : 
  156848             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  156849             :           virtual unsigned int cfgIndexForEnd() const override;
  156850             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  156851             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  156852             : #endif
  156853             : 
  156854             :        // DQ (5/29/2011): Added support for return type name qualification.
  156855             :       //! This function generates the qualified name prefix to be used with the return type.
  156856             :           SgName get_qualified_name_prefix_for_return_type() const;
  156857             : 
  156858             :        // DQ (10/11/2014): Adding support for aterm translation to ROSE AST.
  156859             :        // Rasmussen (04/17/2019): Support for ATerms has been deprecated.
  156860             :        // static SgFunctionDeclaration* build_node_from_nonlist_children(SgType* return_type, SgFunctionParameterList* parameterList, SgScopeStatement* scope, Sg_File_Info* startOfConstruct, SgName name, SgFunctionType* type, SgFunctionDefinition* definition);
  156861             : 
  156862             :        // DQ (12/22/2014): Adding support for EDG normalized template member and non-member functions.
  156863             :           bool isNormalizedTemplateFunction() const;
  156864             : 
  156865             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  156866             :           int get_name_qualification_length() const;
  156867             :           void set_name_qualification_length(int name_qualification_length);
  156868             : 
  156869             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  156870             :           bool get_type_elaboration_required() const;
  156871             :           void set_type_elaboration_required(bool type_elaboration_required);
  156872             : 
  156873             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  156874             :           bool get_global_qualification_required() const;
  156875             :           void set_global_qualification_required(bool global_qualification_required);
  156876             : 
  156877             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  156878             :           int get_name_qualification_length_for_return_type() const;
  156879             :           void set_name_qualification_length_for_return_type(int name_qualification_length_for_return_type);
  156880             : 
  156881             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  156882             :           bool get_type_elaboration_required_for_return_type() const;
  156883             :           void set_type_elaboration_required_for_return_type(bool type_elaboration_required_for_return_type);
  156884             : 
  156885             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  156886             :           bool get_global_qualification_required_for_return_type() const;
  156887             :           void set_global_qualification_required_for_return_type(bool global_qualification_required_for_return_type);
  156888             : 
  156889             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  156890             :           bool get_requiresNameQualificationOnReturnType () const;
  156891             :           void set_requiresNameQualificationOnReturnType ( bool requiresNameQualificationOnReturnType );
  156892             : 
  156893             : 
  156894             : 
  156895             : // End of memberFunctionString
  156896             : // Start of memberFunctionString
  156897             : /* #line 930 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  156898             : 
  156899             : 
  156900             :      public:
  156901             :           bool isSpecialization() const;
  156902             :           bool isPartialSpecialization() const;
  156903             : 
  156904             : 
  156905             : 
  156906             : // End of memberFunctionString
  156907             : // Start of memberFunctionString
  156908             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  156909             : 
  156910             : // *** COMMON CODE SECTION BEGINS HERE ***
  156911             : 
  156912             :     public:
  156913             : 
  156914             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  156915             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  156916             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  156917             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  156918             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  156919             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  156920             : 
  156921             :       /*! \brief returns a string representing the class name */
  156922             :           virtual std::string class_name() const override;
  156923             : 
  156924             :       /*! \brief returns new style SageIII enum values */
  156925             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  156926             : 
  156927             :       /*! \brief static variant value */
  156928             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  156929             :        // static const VariantT static_variant = V_SgFunctionDeclaration;
  156930             :           enum { static_variant = V_SgFunctionDeclaration };
  156931             : 
  156932             :        /* the generated cast function */
  156933             :       /*! \brief Casts pointer from base class to derived class */
  156934             :           ROSE_DLL_API friend       SgFunctionDeclaration* isSgFunctionDeclaration(       SgNode * s );
  156935             : 
  156936             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  156937             :           ROSE_DLL_API friend const SgFunctionDeclaration* isSgFunctionDeclaration( const SgNode * s );
  156938             : 
  156939             :      // ******************************************
  156940             :      // * Memory Pool / New / Delete
  156941             :      // ******************************************
  156942             : 
  156943             :      public:
  156944             :           /// \private
  156945             :           static const unsigned pool_size; //
  156946             :           /// \private
  156947             :           static std::vector<unsigned char *> pools; //
  156948             :           /// \private
  156949             :           static SgFunctionDeclaration * next_node; // 
  156950             : 
  156951             :           /// \private
  156952             :           static unsigned long initializeStorageClassArray(SgFunctionDeclarationStorageClass *); //
  156953             : 
  156954             :           /// \private
  156955             :           static void clearMemoryPool(); //
  156956             :           static void deleteMemoryPool(); //
  156957             : 
  156958             :           /// \private
  156959             :           static void extendMemoryPoolForFileIO(); //
  156960             : 
  156961             :           /// \private
  156962             :           static SgFunctionDeclaration * getPointerFromGlobalIndex(unsigned long); //
  156963             :           /// \private
  156964             :           static SgFunctionDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  156965             : 
  156966             :           /// \private
  156967             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  156968             :           /// \private
  156969             :           static void resetValidFreepointers(); //
  156970             :           /// \private
  156971             :           static unsigned long getNumberOfLastValidPointer(); //
  156972             : 
  156973             : 
  156974             : #if defined(INLINE_FUNCTIONS)
  156975             :       /*! \brief returns pointer to newly allocated IR node */
  156976             :           inline void *operator new (size_t size);
  156977             : #else
  156978             :       /*! \brief returns pointer to newly allocated IR node */
  156979             :           void *operator new (size_t size);
  156980             : #endif
  156981             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  156982             :           void operator delete (void* pointer, size_t size);
  156983             : 
  156984             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  156985       15832 :           void operator delete (void* pointer)
  156986             :              {
  156987             :             // This is the generated delete operator...
  156988       15832 :                SgFunctionDeclaration::operator delete (pointer,sizeof(SgFunctionDeclaration));
  156989             :              }
  156990             : 
  156991             :       /*! \brief Returns the total number of IR nodes of this type */
  156992             :           static size_t numberOfNodes();
  156993             : 
  156994             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  156995             :           static size_t memoryUsage();
  156996             : 
  156997             :       // End of scope which started in IR nodes specific code 
  156998             :       /* */
  156999             : 
  157000             :       /* name Internal Functions
  157001             :           \brief Internal functions ... incomplete-documentation
  157002             : 
  157003             :           These functions have been made public as part of the design, but they are suggested for internal use 
  157004             :           or by particularly knowledgeable users for specialized tools or applications.
  157005             : 
  157006             :           \internal We could not make these private because they are required by user for special purposes. And 
  157007             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  157008             :          
  157009             :        */
  157010             : 
  157011             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  157012             :        // overridden in every class by *generated* implementation
  157013             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  157014             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  157015             :        // MS: 06/28/02 container of names of variables or container indices 
  157016             :        // used used in the traversal to access AST successor nodes
  157017             :        // overridden in every class by *generated* implementation
  157018             :       /*! \brief container of names of variables or container indices used used in the traversal
  157019             :           to access AST successor nodes overridden in every class by *generated* implementation */
  157020             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  157021             : 
  157022             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  157023             :        // than all the vector copies. The implementation for these functions is generated for each class.
  157024             :       /*! \brief return number of children in the traversal successor list */
  157025             :           virtual size_t get_numberOfTraversalSuccessors() override;
  157026             :       /*! \brief index-based access to traversal successors by index number */
  157027             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  157028             :       /*! \brief index-based access to traversal successors by child node */
  157029             :           virtual size_t get_childIndex(SgNode *child) override;
  157030             : 
  157031             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  157032             :        // MS: 08/16/2002 method for generating RTI information
  157033             :       /*! \brief return C++ Runtime-Time-Information */
  157034             :           virtual RTIReturnType roseRTI() override;
  157035             : #endif
  157036             :       /* */
  157037             : 
  157038             : 
  157039             : 
  157040             :       /* name Deprecated Functions
  157041             :           \brief Deprecated functions ... incomplete-documentation
  157042             : 
  157043             :           These functions have been deprecated from use.
  157044             :        */
  157045             :       /* */
  157046             : 
  157047             :       /*! returns a C style string (char*) representing the class name */
  157048             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  157049             : 
  157050             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  157051             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  157052             : #if 0
  157053             :       /*! returns old style Sage II enum values */
  157054             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  157055             :       /*! returns old style Sage II enum values */
  157056             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  157057             : #endif
  157058             :       /* */
  157059             : 
  157060             : 
  157061             : 
  157062             : 
  157063             :      public:
  157064             :       /* name Traversal Support Functions
  157065             :           \brief Traversal support functions ... incomplete-documentation
  157066             : 
  157067             :           These functions have been made public as part of the design, but they are suggested for internal use 
  157068             :           or by particularly knowledgable users for specialized tools or applications.
  157069             :        */
  157070             :       /* */
  157071             : 
  157072             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  157073             :        // (inferior to ROSE traversal mechanism, experimental).
  157074             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  157075             :        */
  157076             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  157077             : 
  157078             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  157079             :       /*! \brief support for the classic visitor pattern done in GoF */
  157080             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  157081             : 
  157082             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  157083             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  157084             :        */
  157085             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  157086             : 
  157087             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  157088             :        */
  157089             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  157090             : 
  157091             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  157092             :        // This traversal helps support internal tools that call static member functions.
  157093             :        // note: this function operates on the memory pools.
  157094             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  157095             :        */
  157096             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  157097             :       /* */
  157098             : 
  157099             : 
  157100             :      public:
  157101             :       /* name Memory Allocation Functions
  157102             :           \brief Memory allocations functions ... incomplete-documentation
  157103             : 
  157104             :           These functions have been made public as part of the design, but they are suggested for internal use 
  157105             :           or by particularly knowledgable users for specialized tools or applications.
  157106             :        */
  157107             :       /* */
  157108             : 
  157109             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  157110             : 
  157111             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  157112             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  157113             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  157114             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  157115             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  157116             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  157117             :           being used with the AST File I/O mechanism.
  157118             :        */
  157119             :           virtual bool isInMemoryPool() override;
  157120             : 
  157121             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  157122             : 
  157123             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  157124             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  157125             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  157126             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  157127             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  157128             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  157129             :           being used with the AST File I/O mechanism.
  157130             :        */
  157131             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  157132             : 
  157133             :       // DQ (4/30/2006): Modified to be a const function.
  157134             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  157135             : 
  157136             :           This functions is part of general support for many possible tools to operate 
  157137             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  157138             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  157139             :           less than the set of pointers used by the AST file I/O. This is part of
  157140             :           work implemented by Andreas, and support tools such as the AST graph generation.
  157141             : 
  157142             :           \warning This function can return unexpected data members and thus the 
  157143             :                    order and the number of elements is unpredicable and subject 
  157144             :                    to change.
  157145             : 
  157146             :           \returns STL vector of pairs of SgNode* and strings
  157147             :        */
  157148             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  157149             : 
  157150             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  157151             : 
  157152             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  157153             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  157154             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  157155             : 
  157156             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  157157             :                    and subject to change.
  157158             :        */
  157159             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  157160             : 
  157161             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  157162             : 
  157163             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  157164             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  157165             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  157166             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  157167             : 
  157168             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  157169             : 
  157170             :           \returns long
  157171             :        */
  157172             :           virtual long getChildIndex( SgNode* childNode ) const override;
  157173             : 
  157174             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  157175             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  157176             :       /* \brief Constructor for use by AST File I/O Mechanism
  157177             : 
  157178             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  157179             :           which obtained via fast binary file I/O from disk.
  157180             :        */
  157181             :        // SgFunctionDeclaration( SgFunctionDeclarationStorageClass& source );
  157182             : 
  157183             : 
  157184             : 
  157185             : 
  157186             : 
  157187             :  // JH (10/24/2005): methods added to support the ast file IO
  157188             :     private:
  157189             : 
  157190             :       /* name AST Memory Allocation Support Functions
  157191             :           \brief Memory allocations support....
  157192             : 
  157193             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  157194             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  157195             :           and support the AST File I/O Mechanism.
  157196             :        */
  157197             :       /* */
  157198             : 
  157199             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  157200             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  157201             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  157202             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  157203             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  157204             :           a correspinding one in the AST_FILE_IO class!
  157205             :        */
  157206             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  157207             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  157208             :       /* \brief Typedef used for low level memory access.
  157209             :        */
  157210             :        // typedef unsigned char* TestType;
  157211             : 
  157212             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  157213             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  157214             :       /* \brief Typedef used to hold memory addresses as values.
  157215             :        */
  157216             :        // typedef unsigned long  AddressType;
  157217             : 
  157218             : 
  157219             : 
  157220             :        // necessary, to have direct access to the p_freepointer and the private methods !
  157221             :       /*! \brief friend class declaration to support AST File I/O */
  157222             :           friend class AST_FILE_IO;
  157223             : 
  157224             :       /*! \brief friend class declaration to support AST File I/O */
  157225             :           friend class SgFunctionDeclarationStorageClass;
  157226             : 
  157227             :       /*! \brief friend class declaration to support AST File I/O */
  157228             :           friend class AstSpecificDataManagingClass;
  157229             : 
  157230             :       /*! \brief friend class declaration to support AST File I/O */
  157231             :           friend class AstSpecificDataManagingClassStorageClass;
  157232             :     public:
  157233             :       /*! \brief IR node constructor to support AST File I/O */
  157234             :           SgFunctionDeclaration( const SgFunctionDeclarationStorageClass& source );
  157235             : 
  157236             :  // private: // JJW hack
  157237             :        /*
  157238             :           name AST Memory Allocation Support Variables
  157239             :           Memory allocations support variables 
  157240             : 
  157241             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  157242             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  157243             :           and support the AST File I/O Mechanism.
  157244             :        */
  157245             :       /* */
  157246             : 
  157247             :     public:
  157248             : 
  157249             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  157250             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  157251             :       // virtual SgNode* addRegExpAttribute();
  157252             :       /*! \brief Support for AST matching using regular expression.
  157253             : 
  157254             :           This support is incomplete and the subject of current research to define 
  157255             :           RegEx trees to support inexact matching.
  157256             :        */
  157257             :           SgFunctionDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  157258             : 
  157259             : // *** COMMON CODE SECTION ENDS HERE ***
  157260             : 
  157261             : 
  157262             : // End of memberFunctionString
  157263             : // Start of memberFunctionString
  157264             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  157265             : 
  157266             :      // the generated cast function
  157267             :      // friend ROSE_DLL_API SgFunctionDeclaration* isSgFunctionDeclaration ( SgNode* s );
  157268             : 
  157269             :           typedef SgDeclarationStatement base_node_type;
  157270             : 
  157271             : 
  157272             : // End of memberFunctionString
  157273             : // Start of memberFunctionString
  157274             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  157275             : 
  157276             :           void post_construction_initialization() override;
  157277             : 
  157278             : 
  157279             : // End of memberFunctionString
  157280             : 
  157281             :      public: 
  157282             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  157283             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  157284             : 
  157285             :      public: 
  157286             :          SgFunctionParameterList* get_parameterList() const;
  157287             :          void set_parameterList(SgFunctionParameterList* parameterList);
  157288             : 
  157289             :      public: 
  157290             :          const SgFunctionModifier&  get_functionModifier() const;
  157291             :          SgFunctionModifier& get_functionModifier(); 
  157292             : 
  157293             :      public: 
  157294             :          const SgSpecialFunctionModifier&  get_specialFunctionModifier() const;
  157295             :          SgSpecialFunctionModifier& get_specialFunctionModifier(); 
  157296             : 
  157297             :      public: 
  157298             :          SgTypePtrList get_exceptionSpecification() const;
  157299             :          void set_exceptionSpecification(SgTypePtrList exceptionSpecification);
  157300             : 
  157301             :      public: 
  157302             :          bool get_named_in_end_statement() const;
  157303             :          void set_named_in_end_statement(bool named_in_end_statement);
  157304             : 
  157305             :      public: 
  157306             :          std::string get_asm_name() const;
  157307             :          void set_asm_name(std::string asm_name);
  157308             : 
  157309             :      public: 
  157310             :          SgExprListExp* get_decoratorList() const;
  157311             :          void set_decoratorList(SgExprListExp* decoratorList);
  157312             : 
  157313             :      public: 
  157314             :          bool get_ada_formal_subprogram_decl() const;
  157315             :          void set_ada_formal_subprogram_decl(bool ada_formal_subprogram_decl);
  157316             : 
  157317             :      public: 
  157318             :          SgFunctionType* get_type() const /* (getDataAccessFunctionPrototypeString) */;
  157319             :          void set_type(SgFunctionType* type) /* (getDataAccessFunctionPrototypeString) */;
  157320             : 
  157321             :      public: 
  157322             :          SgFunctionDefinition* get_definition() const;
  157323             :          void set_definition(SgFunctionDefinition* definition);
  157324             : 
  157325             :      public: 
  157326             :          bool get_oldStyleDefinition() const;
  157327             :          void set_oldStyleDefinition(bool oldStyleDefinition);
  157328             : 
  157329             :      public: 
  157330             :          SgScopeStatement* get_scope() const override /* (getDataAccessFunctionPrototypeString) */;
  157331             :          void set_scope(SgScopeStatement* scope) override /* (getDataAccessFunctionPrototypeString) */;
  157332             : 
  157333             :      public: 
  157334             :          SgDeclarationStatement::template_specialization_enum get_specialization() const;
  157335             :          void set_specialization(SgDeclarationStatement::template_specialization_enum specialization);
  157336             : 
  157337             : 
  157338             :      public: 
  157339             :          std::string get_gnu_extension_section() const;
  157340             :          void set_gnu_extension_section(std::string gnu_extension_section);
  157341             : 
  157342             :      public: 
  157343             :          std::string get_gnu_extension_alias() const;
  157344             :          void set_gnu_extension_alias(std::string gnu_extension_alias);
  157345             : 
  157346             :      public: 
  157347             :          SgDeclarationStatement::gnu_extension_visability_attribute_enum get_gnu_extension_visability() const;
  157348             :          void set_gnu_extension_visability(SgDeclarationStatement::gnu_extension_visability_attribute_enum gnu_extension_visability);
  157349             : 
  157350             : 
  157351             : 
  157352             : 
  157353             : 
  157354             : 
  157355             : 
  157356             :      public: 
  157357             :          bool get_prototypeIsWithoutParameters() const;
  157358             :          void set_prototypeIsWithoutParameters(bool prototypeIsWithoutParameters);
  157359             : 
  157360             :      public: 
  157361             :          int get_gnu_regparm_attribute() const;
  157362             :          void set_gnu_regparm_attribute(int gnu_regparm_attribute);
  157363             : 
  157364             :      public: 
  157365             :          SgFunctionType* get_type_syntax() const;
  157366             :          void set_type_syntax(SgFunctionType* type_syntax);
  157367             : 
  157368             :      public: 
  157369             :          bool get_type_syntax_is_available() const;
  157370             :          void set_type_syntax_is_available(bool type_syntax_is_available);
  157371             : 
  157372             :      public: 
  157373             :          SgFunctionParameterList* get_parameterList_syntax() const;
  157374             :          void set_parameterList_syntax(SgFunctionParameterList* parameterList_syntax);
  157375             : 
  157376             :      public: 
  157377             :          bool get_using_C11_Noreturn_keyword() const;
  157378             :          void set_using_C11_Noreturn_keyword(bool using_C11_Noreturn_keyword);
  157379             : 
  157380             :      public: 
  157381             :          bool get_is_constexpr() const;
  157382             :          void set_is_constexpr(bool is_constexpr);
  157383             : 
  157384             :      public: 
  157385             :          bool get_using_new_function_return_type_syntax() const;
  157386             :          void set_using_new_function_return_type_syntax(bool using_new_function_return_type_syntax);
  157387             : 
  157388             :      public: 
  157389             :          SgFunctionParameterScope* get_functionParameterScope() const;
  157390             :          void set_functionParameterScope(SgFunctionParameterScope* functionParameterScope);
  157391             : 
  157392             :      public: 
  157393             :          bool get_marked_as_edg_normalization() const;
  157394             :          void set_marked_as_edg_normalization(bool marked_as_edg_normalization);
  157395             : 
  157396             :      public: 
  157397             :          bool get_is_implicit_function() const;
  157398             :          void set_is_implicit_function(bool is_implicit_function);
  157399             : 
  157400             : 
  157401             :      public: 
  157402             :          virtual ~SgFunctionDeclaration();
  157403             : 
  157404             : 
  157405             :      public: 
  157406             :          SgFunctionDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL); 
  157407             :          SgFunctionDeclaration(SgName name, SgFunctionType* type, SgFunctionDefinition* definition); 
  157408             : 
  157409             :     protected:
  157410             : // Start of memberFunctionString
  157411             : SgName p_name;
  157412             :           
  157413             : // End of memberFunctionString
  157414             : // Start of memberFunctionString
  157415             : SgFunctionParameterList* p_parameterList;
  157416             :           
  157417             : // End of memberFunctionString
  157418             : // Start of memberFunctionString
  157419             : SgFunctionModifier p_functionModifier;
  157420             :           
  157421             : // End of memberFunctionString
  157422             : // Start of memberFunctionString
  157423             : SgSpecialFunctionModifier p_specialFunctionModifier;
  157424             :           
  157425             : // End of memberFunctionString
  157426             : // Start of memberFunctionString
  157427             : SgTypePtrList p_exceptionSpecification;
  157428             :           
  157429             : // End of memberFunctionString
  157430             : // Start of memberFunctionString
  157431             : bool p_named_in_end_statement;
  157432             :           
  157433             : // End of memberFunctionString
  157434             : // Start of memberFunctionString
  157435             : std::string p_asm_name;
  157436             :           
  157437             : // End of memberFunctionString
  157438             : // Start of memberFunctionString
  157439             : SgExprListExp* p_decoratorList;
  157440             :           
  157441             : // End of memberFunctionString
  157442             : // Start of memberFunctionString
  157443             : bool p_ada_formal_subprogram_decl;
  157444             :           
  157445             : // End of memberFunctionString
  157446             : // Start of memberFunctionString
  157447             : SgFunctionType* p_type;
  157448             :           
  157449             : // End of memberFunctionString
  157450             : // Start of memberFunctionString
  157451             : SgFunctionDefinition* p_definition;
  157452             :           
  157453             : // End of memberFunctionString
  157454             : // Start of memberFunctionString
  157455             : bool p_oldStyleDefinition;
  157456             :           
  157457             : // End of memberFunctionString
  157458             : // Start of memberFunctionString
  157459             : SgScopeStatement* p_scope;
  157460             :           
  157461             : // End of memberFunctionString
  157462             : // Start of memberFunctionString
  157463             : SgDeclarationStatement::template_specialization_enum p_specialization;
  157464             :           
  157465             : // End of memberFunctionString
  157466             : // Start of memberFunctionString
  157467             : bool p_requiresNameQualificationOnReturnType;
  157468             :           
  157469             : // End of memberFunctionString
  157470             : // Start of memberFunctionString
  157471             : std::string p_gnu_extension_section;
  157472             :           
  157473             : // End of memberFunctionString
  157474             : // Start of memberFunctionString
  157475             : std::string p_gnu_extension_alias;
  157476             :           
  157477             : // End of memberFunctionString
  157478             : // Start of memberFunctionString
  157479             : SgDeclarationStatement::gnu_extension_visability_attribute_enum p_gnu_extension_visability;
  157480             :           
  157481             : // End of memberFunctionString
  157482             : // Start of memberFunctionString
  157483             : int p_name_qualification_length;
  157484             :           
  157485             : // End of memberFunctionString
  157486             : // Start of memberFunctionString
  157487             : bool p_type_elaboration_required;
  157488             :           
  157489             : // End of memberFunctionString
  157490             : // Start of memberFunctionString
  157491             : bool p_global_qualification_required;
  157492             :           
  157493             : // End of memberFunctionString
  157494             : // Start of memberFunctionString
  157495             : int p_name_qualification_length_for_return_type;
  157496             :           
  157497             : // End of memberFunctionString
  157498             : // Start of memberFunctionString
  157499             : bool p_type_elaboration_required_for_return_type;
  157500             :           
  157501             : // End of memberFunctionString
  157502             : // Start of memberFunctionString
  157503             : bool p_global_qualification_required_for_return_type;
  157504             :           
  157505             : // End of memberFunctionString
  157506             : // Start of memberFunctionString
  157507             : bool p_prototypeIsWithoutParameters;
  157508             :           
  157509             : // End of memberFunctionString
  157510             : // Start of memberFunctionString
  157511             : int p_gnu_regparm_attribute;
  157512             :           
  157513             : // End of memberFunctionString
  157514             : // Start of memberFunctionString
  157515             : SgFunctionType* p_type_syntax;
  157516             :           
  157517             : // End of memberFunctionString
  157518             : // Start of memberFunctionString
  157519             : bool p_type_syntax_is_available;
  157520             :           
  157521             : // End of memberFunctionString
  157522             : // Start of memberFunctionString
  157523             : SgFunctionParameterList* p_parameterList_syntax;
  157524             :           
  157525             : // End of memberFunctionString
  157526             : // Start of memberFunctionString
  157527             : bool p_using_C11_Noreturn_keyword;
  157528             :           
  157529             : // End of memberFunctionString
  157530             : // Start of memberFunctionString
  157531             : bool p_is_constexpr;
  157532             :           
  157533             : // End of memberFunctionString
  157534             : // Start of memberFunctionString
  157535             : bool p_using_new_function_return_type_syntax;
  157536             :           
  157537             : // End of memberFunctionString
  157538             : // Start of memberFunctionString
  157539             : SgFunctionParameterScope* p_functionParameterScope;
  157540             :           
  157541             : // End of memberFunctionString
  157542             : // Start of memberFunctionString
  157543             : bool p_marked_as_edg_normalization;
  157544             :           
  157545             : // End of memberFunctionString
  157546             : // Start of memberFunctionString
  157547             : bool p_is_implicit_function;
  157548             :           
  157549             : // End of memberFunctionString
  157550             : 
  157551             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionDeclaration>;
  157552             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgName,&SgFunctionDeclaration::p_name>;
  157553             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgFunctionParameterList*,&SgFunctionDeclaration::p_parameterList>;
  157554             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgFunctionModifier,&SgFunctionDeclaration::p_functionModifier>;
  157555             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgSpecialFunctionModifier,&SgFunctionDeclaration::p_specialFunctionModifier>;
  157556             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgTypePtrList,&SgFunctionDeclaration::p_exceptionSpecification>;
  157557             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_named_in_end_statement>;
  157558             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, std::string,&SgFunctionDeclaration::p_asm_name>;
  157559             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgExprListExp*,&SgFunctionDeclaration::p_decoratorList>;
  157560             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_ada_formal_subprogram_decl>;
  157561             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgFunctionType*,&SgFunctionDeclaration::p_type>;
  157562             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgFunctionDefinition*,&SgFunctionDeclaration::p_definition>;
  157563             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_oldStyleDefinition>;
  157564             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgScopeStatement*,&SgFunctionDeclaration::p_scope>;
  157565             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgDeclarationStatement::template_specialization_enum,&SgFunctionDeclaration::p_specialization>;
  157566             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_requiresNameQualificationOnReturnType>;
  157567             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, std::string,&SgFunctionDeclaration::p_gnu_extension_section>;
  157568             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, std::string,&SgFunctionDeclaration::p_gnu_extension_alias>;
  157569             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgDeclarationStatement::gnu_extension_visability_attribute_enum,&SgFunctionDeclaration::p_gnu_extension_visability>;
  157570             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, int,&SgFunctionDeclaration::p_name_qualification_length>;
  157571             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_type_elaboration_required>;
  157572             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_global_qualification_required>;
  157573             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, int,&SgFunctionDeclaration::p_name_qualification_length_for_return_type>;
  157574             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_type_elaboration_required_for_return_type>;
  157575             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_global_qualification_required_for_return_type>;
  157576             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_prototypeIsWithoutParameters>;
  157577             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, int,&SgFunctionDeclaration::p_gnu_regparm_attribute>;
  157578             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgFunctionType*,&SgFunctionDeclaration::p_type_syntax>;
  157579             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_type_syntax_is_available>;
  157580             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgFunctionParameterList*,&SgFunctionDeclaration::p_parameterList_syntax>;
  157581             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_using_C11_Noreturn_keyword>;
  157582             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_is_constexpr>;
  157583             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_using_new_function_return_type_syntax>;
  157584             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, SgFunctionParameterScope*,&SgFunctionDeclaration::p_functionParameterScope>;
  157585             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_marked_as_edg_normalization>;
  157586             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionDeclaration, bool,&SgFunctionDeclaration::p_is_implicit_function>;
  157587             : 
  157588             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  157589             : 
  157590             : 
  157591             :    };
  157592             : #endif
  157593             : 
  157594             : // postdeclarations for SgFunctionDeclaration
  157595             : 
  157596             : /* #line 157597 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  157597             : 
  157598             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  157599             : 
  157600             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  157601             : 
  157602             : 
  157603             : /* #line 157604 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  157604             : 
  157605             : 
  157606             : 
  157607             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  157608             : 
  157609             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  157610             : //      This code is automatically generated for each 
  157611             : //      terminal and non-terminal within the defined 
  157612             : //      grammar.  There is a simple way to change the 
  157613             : //      code to fix bugs etc.  See the ROSE README file
  157614             : //      for directions.
  157615             : 
  157616             : // tps: (02/22/2010): Adding DLL export requirements
  157617             : #include "rosedll.h"
  157618             : 
  157619             : // predeclarations for SgTemplateFunctionDeclaration
  157620             : 
  157621             : /* #line 157622 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  157622             : 
  157623             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  157624             : 
  157625             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  157626             : 
  157627             : #if 1
  157628             : // Class Definition for SgTemplateFunctionDeclaration
  157629             : class ROSE_DLL_API SgTemplateFunctionDeclaration  : public SgFunctionDeclaration
  157630             :    {
  157631             :      public:
  157632             : 
  157633             : 
  157634             : /* #line 157635 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  157635             : 
  157636             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  157637             : // Start of memberFunctionString
  157638             : /* #line 2823 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  157639             : 
  157640             : 
  157641             :           typedef SgTemplateInstantiationFunctionDecl instantiation_kind_t;
  157642             : 
  157643             : 
  157644             : 
  157645             : // End of memberFunctionString
  157646             : // Start of memberFunctionString
  157647             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  157648             : 
  157649             : // *** COMMON CODE SECTION BEGINS HERE ***
  157650             : 
  157651             :     public:
  157652             : 
  157653             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  157654             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  157655             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  157656             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  157657             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  157658             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  157659             : 
  157660             :       /*! \brief returns a string representing the class name */
  157661             :           virtual std::string class_name() const override;
  157662             : 
  157663             :       /*! \brief returns new style SageIII enum values */
  157664             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  157665             : 
  157666             :       /*! \brief static variant value */
  157667             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  157668             :        // static const VariantT static_variant = V_SgTemplateFunctionDeclaration;
  157669             :           enum { static_variant = V_SgTemplateFunctionDeclaration };
  157670             : 
  157671             :        /* the generated cast function */
  157672             :       /*! \brief Casts pointer from base class to derived class */
  157673             :           ROSE_DLL_API friend       SgTemplateFunctionDeclaration* isSgTemplateFunctionDeclaration(       SgNode * s );
  157674             : 
  157675             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  157676             :           ROSE_DLL_API friend const SgTemplateFunctionDeclaration* isSgTemplateFunctionDeclaration( const SgNode * s );
  157677             : 
  157678             :      // ******************************************
  157679             :      // * Memory Pool / New / Delete
  157680             :      // ******************************************
  157681             : 
  157682             :      public:
  157683             :           /// \private
  157684             :           static const unsigned pool_size; //
  157685             :           /// \private
  157686             :           static std::vector<unsigned char *> pools; //
  157687             :           /// \private
  157688             :           static SgTemplateFunctionDeclaration * next_node; // 
  157689             : 
  157690             :           /// \private
  157691             :           static unsigned long initializeStorageClassArray(SgTemplateFunctionDeclarationStorageClass *); //
  157692             : 
  157693             :           /// \private
  157694             :           static void clearMemoryPool(); //
  157695             :           static void deleteMemoryPool(); //
  157696             : 
  157697             :           /// \private
  157698             :           static void extendMemoryPoolForFileIO(); //
  157699             : 
  157700             :           /// \private
  157701             :           static SgTemplateFunctionDeclaration * getPointerFromGlobalIndex(unsigned long); //
  157702             :           /// \private
  157703             :           static SgTemplateFunctionDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  157704             : 
  157705             :           /// \private
  157706             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  157707             :           /// \private
  157708             :           static void resetValidFreepointers(); //
  157709             :           /// \private
  157710             :           static unsigned long getNumberOfLastValidPointer(); //
  157711             : 
  157712             : 
  157713             : #if defined(INLINE_FUNCTIONS)
  157714             :       /*! \brief returns pointer to newly allocated IR node */
  157715             :           inline void *operator new (size_t size);
  157716             : #else
  157717             :       /*! \brief returns pointer to newly allocated IR node */
  157718             :           void *operator new (size_t size);
  157719             : #endif
  157720             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  157721             :           void operator delete (void* pointer, size_t size);
  157722             : 
  157723             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  157724        1352 :           void operator delete (void* pointer)
  157725             :              {
  157726             :             // This is the generated delete operator...
  157727        1352 :                SgTemplateFunctionDeclaration::operator delete (pointer,sizeof(SgTemplateFunctionDeclaration));
  157728             :              }
  157729             : 
  157730             :       /*! \brief Returns the total number of IR nodes of this type */
  157731             :           static size_t numberOfNodes();
  157732             : 
  157733             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  157734             :           static size_t memoryUsage();
  157735             : 
  157736             :       // End of scope which started in IR nodes specific code 
  157737             :       /* */
  157738             : 
  157739             :       /* name Internal Functions
  157740             :           \brief Internal functions ... incomplete-documentation
  157741             : 
  157742             :           These functions have been made public as part of the design, but they are suggested for internal use 
  157743             :           or by particularly knowledgeable users for specialized tools or applications.
  157744             : 
  157745             :           \internal We could not make these private because they are required by user for special purposes. And 
  157746             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  157747             :          
  157748             :        */
  157749             : 
  157750             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  157751             :        // overridden in every class by *generated* implementation
  157752             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  157753             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  157754             :        // MS: 06/28/02 container of names of variables or container indices 
  157755             :        // used used in the traversal to access AST successor nodes
  157756             :        // overridden in every class by *generated* implementation
  157757             :       /*! \brief container of names of variables or container indices used used in the traversal
  157758             :           to access AST successor nodes overridden in every class by *generated* implementation */
  157759             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  157760             : 
  157761             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  157762             :        // than all the vector copies. The implementation for these functions is generated for each class.
  157763             :       /*! \brief return number of children in the traversal successor list */
  157764             :           virtual size_t get_numberOfTraversalSuccessors() override;
  157765             :       /*! \brief index-based access to traversal successors by index number */
  157766             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  157767             :       /*! \brief index-based access to traversal successors by child node */
  157768             :           virtual size_t get_childIndex(SgNode *child) override;
  157769             : 
  157770             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  157771             :        // MS: 08/16/2002 method for generating RTI information
  157772             :       /*! \brief return C++ Runtime-Time-Information */
  157773             :           virtual RTIReturnType roseRTI() override;
  157774             : #endif
  157775             :       /* */
  157776             : 
  157777             : 
  157778             : 
  157779             :       /* name Deprecated Functions
  157780             :           \brief Deprecated functions ... incomplete-documentation
  157781             : 
  157782             :           These functions have been deprecated from use.
  157783             :        */
  157784             :       /* */
  157785             : 
  157786             :       /*! returns a C style string (char*) representing the class name */
  157787             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  157788             : 
  157789             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  157790             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  157791             : #if 0
  157792             :       /*! returns old style Sage II enum values */
  157793             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  157794             :       /*! returns old style Sage II enum values */
  157795             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  157796             : #endif
  157797             :       /* */
  157798             : 
  157799             : 
  157800             : 
  157801             : 
  157802             :      public:
  157803             :       /* name Traversal Support Functions
  157804             :           \brief Traversal support functions ... incomplete-documentation
  157805             : 
  157806             :           These functions have been made public as part of the design, but they are suggested for internal use 
  157807             :           or by particularly knowledgable users for specialized tools or applications.
  157808             :        */
  157809             :       /* */
  157810             : 
  157811             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  157812             :        // (inferior to ROSE traversal mechanism, experimental).
  157813             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  157814             :        */
  157815             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  157816             : 
  157817             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  157818             :       /*! \brief support for the classic visitor pattern done in GoF */
  157819             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  157820             : 
  157821             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  157822             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  157823             :        */
  157824             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  157825             : 
  157826             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  157827             :        */
  157828             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  157829             : 
  157830             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  157831             :        // This traversal helps support internal tools that call static member functions.
  157832             :        // note: this function operates on the memory pools.
  157833             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  157834             :        */
  157835             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  157836             :       /* */
  157837             : 
  157838             : 
  157839             :      public:
  157840             :       /* name Memory Allocation Functions
  157841             :           \brief Memory allocations functions ... incomplete-documentation
  157842             : 
  157843             :           These functions have been made public as part of the design, but they are suggested for internal use 
  157844             :           or by particularly knowledgable users for specialized tools or applications.
  157845             :        */
  157846             :       /* */
  157847             : 
  157848             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  157849             : 
  157850             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  157851             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  157852             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  157853             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  157854             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  157855             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  157856             :           being used with the AST File I/O mechanism.
  157857             :        */
  157858             :           virtual bool isInMemoryPool() override;
  157859             : 
  157860             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  157861             : 
  157862             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  157863             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  157864             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  157865             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  157866             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  157867             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  157868             :           being used with the AST File I/O mechanism.
  157869             :        */
  157870             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  157871             : 
  157872             :       // DQ (4/30/2006): Modified to be a const function.
  157873             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  157874             : 
  157875             :           This functions is part of general support for many possible tools to operate 
  157876             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  157877             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  157878             :           less than the set of pointers used by the AST file I/O. This is part of
  157879             :           work implemented by Andreas, and support tools such as the AST graph generation.
  157880             : 
  157881             :           \warning This function can return unexpected data members and thus the 
  157882             :                    order and the number of elements is unpredicable and subject 
  157883             :                    to change.
  157884             : 
  157885             :           \returns STL vector of pairs of SgNode* and strings
  157886             :        */
  157887             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  157888             : 
  157889             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  157890             : 
  157891             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  157892             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  157893             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  157894             : 
  157895             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  157896             :                    and subject to change.
  157897             :        */
  157898             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  157899             : 
  157900             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  157901             : 
  157902             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  157903             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  157904             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  157905             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  157906             : 
  157907             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  157908             : 
  157909             :           \returns long
  157910             :        */
  157911             :           virtual long getChildIndex( SgNode* childNode ) const override;
  157912             : 
  157913             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  157914             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  157915             :       /* \brief Constructor for use by AST File I/O Mechanism
  157916             : 
  157917             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  157918             :           which obtained via fast binary file I/O from disk.
  157919             :        */
  157920             :        // SgTemplateFunctionDeclaration( SgTemplateFunctionDeclarationStorageClass& source );
  157921             : 
  157922             : 
  157923             : 
  157924             : 
  157925             : 
  157926             :  // JH (10/24/2005): methods added to support the ast file IO
  157927             :     private:
  157928             : 
  157929             :       /* name AST Memory Allocation Support Functions
  157930             :           \brief Memory allocations support....
  157931             : 
  157932             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  157933             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  157934             :           and support the AST File I/O Mechanism.
  157935             :        */
  157936             :       /* */
  157937             : 
  157938             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  157939             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  157940             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  157941             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  157942             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  157943             :           a correspinding one in the AST_FILE_IO class!
  157944             :        */
  157945             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  157946             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  157947             :       /* \brief Typedef used for low level memory access.
  157948             :        */
  157949             :        // typedef unsigned char* TestType;
  157950             : 
  157951             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  157952             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  157953             :       /* \brief Typedef used to hold memory addresses as values.
  157954             :        */
  157955             :        // typedef unsigned long  AddressType;
  157956             : 
  157957             : 
  157958             : 
  157959             :        // necessary, to have direct access to the p_freepointer and the private methods !
  157960             :       /*! \brief friend class declaration to support AST File I/O */
  157961             :           friend class AST_FILE_IO;
  157962             : 
  157963             :       /*! \brief friend class declaration to support AST File I/O */
  157964             :           friend class SgTemplateFunctionDeclarationStorageClass;
  157965             : 
  157966             :       /*! \brief friend class declaration to support AST File I/O */
  157967             :           friend class AstSpecificDataManagingClass;
  157968             : 
  157969             :       /*! \brief friend class declaration to support AST File I/O */
  157970             :           friend class AstSpecificDataManagingClassStorageClass;
  157971             :     public:
  157972             :       /*! \brief IR node constructor to support AST File I/O */
  157973             :           SgTemplateFunctionDeclaration( const SgTemplateFunctionDeclarationStorageClass& source );
  157974             : 
  157975             :  // private: // JJW hack
  157976             :        /*
  157977             :           name AST Memory Allocation Support Variables
  157978             :           Memory allocations support variables 
  157979             : 
  157980             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  157981             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  157982             :           and support the AST File I/O Mechanism.
  157983             :        */
  157984             :       /* */
  157985             : 
  157986             :     public:
  157987             : 
  157988             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  157989             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  157990             :       // virtual SgNode* addRegExpAttribute();
  157991             :       /*! \brief Support for AST matching using regular expression.
  157992             : 
  157993             :           This support is incomplete and the subject of current research to define 
  157994             :           RegEx trees to support inexact matching.
  157995             :        */
  157996             :           SgTemplateFunctionDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  157997             : 
  157998             : // *** COMMON CODE SECTION ENDS HERE ***
  157999             : 
  158000             : 
  158001             : // End of memberFunctionString
  158002             : // Start of memberFunctionString
  158003             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  158004             : 
  158005             :      // the generated cast function
  158006             :      // friend ROSE_DLL_API SgTemplateFunctionDeclaration* isSgTemplateFunctionDeclaration ( SgNode* s );
  158007             : 
  158008             :           typedef SgFunctionDeclaration base_node_type;
  158009             : 
  158010             : 
  158011             : // End of memberFunctionString
  158012             : // Start of memberFunctionString
  158013             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  158014             : 
  158015             :           void post_construction_initialization() override;
  158016             : 
  158017             : 
  158018             : // End of memberFunctionString
  158019             : 
  158020             :      public: 
  158021             :          const SgTemplateParameterPtrList&  get_templateParameters() const;
  158022             :          SgTemplateParameterPtrList& get_templateParameters(); 
  158023             : 
  158024             :      public: 
  158025             :          const SgTemplateArgumentPtrList&  get_templateSpecializationArguments() const;
  158026             :          SgTemplateArgumentPtrList& get_templateSpecializationArguments(); 
  158027             : 
  158028             :      public: 
  158029             :          SgName get_string() const;
  158030             :          void set_string(SgName string);
  158031             : 
  158032             :      public: 
  158033             :          bool get_string_represents_function_body() const;
  158034             :          void set_string_represents_function_body(bool string_represents_function_body);
  158035             : 
  158036             :      public: 
  158037             :          SgDeclarationScope* get_nonreal_decl_scope() const;
  158038             :          void set_nonreal_decl_scope(SgDeclarationScope* nonreal_decl_scope);
  158039             : 
  158040             : 
  158041             :      public: 
  158042             :          virtual ~SgTemplateFunctionDeclaration();
  158043             : 
  158044             : 
  158045             :      public: 
  158046             :          SgTemplateFunctionDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL); 
  158047             :          SgTemplateFunctionDeclaration(SgName name, SgFunctionType* type, SgFunctionDefinition* definition); 
  158048             : 
  158049             :     protected:
  158050             : // Start of memberFunctionString
  158051             : SgTemplateParameterPtrList p_templateParameters;
  158052             :           
  158053             : // End of memberFunctionString
  158054             : // Start of memberFunctionString
  158055             : SgTemplateArgumentPtrList p_templateSpecializationArguments;
  158056             :           
  158057             : // End of memberFunctionString
  158058             : // Start of memberFunctionString
  158059             : SgName p_string;
  158060             :           
  158061             : // End of memberFunctionString
  158062             : // Start of memberFunctionString
  158063             : bool p_string_represents_function_body;
  158064             :           
  158065             : // End of memberFunctionString
  158066             : // Start of memberFunctionString
  158067             : SgDeclarationScope* p_nonreal_decl_scope;
  158068             :           
  158069             : // End of memberFunctionString
  158070             : 
  158071             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateFunctionDeclaration>;
  158072             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionDeclaration, SgTemplateParameterPtrList,&SgTemplateFunctionDeclaration::p_templateParameters>;
  158073             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionDeclaration, SgTemplateArgumentPtrList,&SgTemplateFunctionDeclaration::p_templateSpecializationArguments>;
  158074             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionDeclaration, SgName,&SgTemplateFunctionDeclaration::p_string>;
  158075             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionDeclaration, bool,&SgTemplateFunctionDeclaration::p_string_represents_function_body>;
  158076             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionDeclaration, SgDeclarationScope*,&SgTemplateFunctionDeclaration::p_nonreal_decl_scope>;
  158077             : 
  158078             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158079             : 
  158080             : 
  158081             :    };
  158082             : #endif
  158083             : 
  158084             : // postdeclarations for SgTemplateFunctionDeclaration
  158085             : 
  158086             : /* #line 158087 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158087             : 
  158088             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  158089             : 
  158090             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158091             : 
  158092             : 
  158093             : /* #line 158094 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158094             : 
  158095             : 
  158096             : 
  158097             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158098             : 
  158099             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  158100             : //      This code is automatically generated for each 
  158101             : //      terminal and non-terminal within the defined 
  158102             : //      grammar.  There is a simple way to change the 
  158103             : //      code to fix bugs etc.  See the ROSE README file
  158104             : //      for directions.
  158105             : 
  158106             : // tps: (02/22/2010): Adding DLL export requirements
  158107             : #include "rosedll.h"
  158108             : 
  158109             : // predeclarations for SgMemberFunctionDeclaration
  158110             : 
  158111             : /* #line 158112 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158112             : 
  158113             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  158114             : 
  158115             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158116             : 
  158117             : #if 1
  158118             : // Class Definition for SgMemberFunctionDeclaration
  158119             : class ROSE_DLL_API SgMemberFunctionDeclaration  : public SgFunctionDeclaration
  158120             :    {
  158121             :      public:
  158122             : 
  158123             : 
  158124             : /* #line 158125 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158125             : 
  158126             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  158127             : // Start of memberFunctionString
  158128             : /* #line 1730 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  158129             : 
  158130             : 
  158131             :           bool isDefinedInClass() const;
  158132             : 
  158133             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  158134             : 
  158135             :      public:
  158136             :           virtual void append_ctor_initializer  ( SgInitializedName* element );
  158137             :           virtual void prepend_ctor_initializer ( SgInitializedName* element );
  158138             : 
  158139             :      public:
  158140             :        // New functions added
  158141             :        // void append_ctor_initializer  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  158142             :        // void prepend_ctor_initializer ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  158143             : 
  158144             :        // void insert_ctor_initializer  ( const SgInitializedNamePtrList::iterator & list, SgInitializedName* element );
  158145             : 
  158146             : 
  158147             :      public:
  158148             : 
  158149             : 
  158150             : 
  158151             : 
  158152             :           virtual SgName get_qualified_name() const override;
  158153             :           void set_orig_return_type( SgType *);
  158154             : 
  158155             :          SgInitializedNamePtrList & get_ctors();
  158156             :          const SgInitializedNamePtrList & get_ctors() const;
  158157             : 
  158158             :       protected:
  158159             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  158160             : 
  158161             :      public:
  158162             : 
  158163             :        // DQ (11/16/2004): Added local get_class_scope function to support version of get_scope which would
  158164             :        // return a SgClassDefinition rather than a SgScopeStatement.  This version is more consistent with
  158165             :        // the former get_scope() function which is not defined in the base class and must return a
  158166             :        // SgScopeStatement to be sufficiently general.
  158167             :        /* \brief This function returns the scope if it exists (is defined in the current translation unit).
  158168             : 
  158169             :           This function is different from the get_scope() member function is that it can return a NULL pointer.
  158170             :           A NULL pointer indicates that the class definition does not exist (was not defined in the current
  158171             :           translation unit), this can happen for pointers to member functions only.
  158172             :         */
  158173             :           SgScopeStatement* get_class_scope(void) const;
  158174             : 
  158175             :        /* \brief This returns the associated class (even if the class definition is unavailable).
  158176             : 
  158177             :           This is a public function with a special custom implementation that always returns a valid pointer
  158178             :           to a class declaration even if the get_class_scope() function returns a NULL pointer. This is the
  158179             :           case for a pointer to a member function (see test2007_116.C).
  158180             : 
  158181             :           \implementation This is much more than a simple access function for the p_associatedClassDeclaration data member.
  158182             :         */
  158183             :           SgDeclarationStatement* get_associatedClassDeclaration () const;
  158184             : 
  158185             :       //! This is an access function for the p_associatedClassDeclaration data member.
  158186             :           void set_associatedClassDeclaration ( SgDeclarationStatement* associatedClassDeclaration );
  158187             : 
  158188             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  158189             : 
  158190             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  158191             :           virtual unsigned int cfgIndexForEnd() const override;
  158192             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  158193             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  158194             : #endif
  158195             : 
  158196             : #if ALT_FIXUP_COPY
  158197             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  158198             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  158199             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  158200             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  158201             : #else
  158202             :        // DQ (10/19/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  158203             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  158204             : #endif
  158205             : 
  158206             : 
  158207             : 
  158208             : // End of memberFunctionString
  158209             : // Start of memberFunctionString
  158210             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  158211             : 
  158212             : // *** COMMON CODE SECTION BEGINS HERE ***
  158213             : 
  158214             :     public:
  158215             : 
  158216             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  158217             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  158218             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  158219             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  158220             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  158221             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  158222             : 
  158223             :       /*! \brief returns a string representing the class name */
  158224             :           virtual std::string class_name() const override;
  158225             : 
  158226             :       /*! \brief returns new style SageIII enum values */
  158227             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  158228             : 
  158229             :       /*! \brief static variant value */
  158230             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  158231             :        // static const VariantT static_variant = V_SgMemberFunctionDeclaration;
  158232             :           enum { static_variant = V_SgMemberFunctionDeclaration };
  158233             : 
  158234             :        /* the generated cast function */
  158235             :       /*! \brief Casts pointer from base class to derived class */
  158236             :           ROSE_DLL_API friend       SgMemberFunctionDeclaration* isSgMemberFunctionDeclaration(       SgNode * s );
  158237             : 
  158238             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  158239             :           ROSE_DLL_API friend const SgMemberFunctionDeclaration* isSgMemberFunctionDeclaration( const SgNode * s );
  158240             : 
  158241             :      // ******************************************
  158242             :      // * Memory Pool / New / Delete
  158243             :      // ******************************************
  158244             : 
  158245             :      public:
  158246             :           /// \private
  158247             :           static const unsigned pool_size; //
  158248             :           /// \private
  158249             :           static std::vector<unsigned char *> pools; //
  158250             :           /// \private
  158251             :           static SgMemberFunctionDeclaration * next_node; // 
  158252             : 
  158253             :           /// \private
  158254             :           static unsigned long initializeStorageClassArray(SgMemberFunctionDeclarationStorageClass *); //
  158255             : 
  158256             :           /// \private
  158257             :           static void clearMemoryPool(); //
  158258             :           static void deleteMemoryPool(); //
  158259             : 
  158260             :           /// \private
  158261             :           static void extendMemoryPoolForFileIO(); //
  158262             : 
  158263             :           /// \private
  158264             :           static SgMemberFunctionDeclaration * getPointerFromGlobalIndex(unsigned long); //
  158265             :           /// \private
  158266             :           static SgMemberFunctionDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  158267             : 
  158268             :           /// \private
  158269             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  158270             :           /// \private
  158271             :           static void resetValidFreepointers(); //
  158272             :           /// \private
  158273             :           static unsigned long getNumberOfLastValidPointer(); //
  158274             : 
  158275             : 
  158276             : #if defined(INLINE_FUNCTIONS)
  158277             :       /*! \brief returns pointer to newly allocated IR node */
  158278             :           inline void *operator new (size_t size);
  158279             : #else
  158280             :       /*! \brief returns pointer to newly allocated IR node */
  158281             :           void *operator new (size_t size);
  158282             : #endif
  158283             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  158284             :           void operator delete (void* pointer, size_t size);
  158285             : 
  158286             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  158287        1568 :           void operator delete (void* pointer)
  158288             :              {
  158289             :             // This is the generated delete operator...
  158290        1568 :                SgMemberFunctionDeclaration::operator delete (pointer,sizeof(SgMemberFunctionDeclaration));
  158291             :              }
  158292             : 
  158293             :       /*! \brief Returns the total number of IR nodes of this type */
  158294             :           static size_t numberOfNodes();
  158295             : 
  158296             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  158297             :           static size_t memoryUsage();
  158298             : 
  158299             :       // End of scope which started in IR nodes specific code 
  158300             :       /* */
  158301             : 
  158302             :       /* name Internal Functions
  158303             :           \brief Internal functions ... incomplete-documentation
  158304             : 
  158305             :           These functions have been made public as part of the design, but they are suggested for internal use 
  158306             :           or by particularly knowledgeable users for specialized tools or applications.
  158307             : 
  158308             :           \internal We could not make these private because they are required by user for special purposes. And 
  158309             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  158310             :          
  158311             :        */
  158312             : 
  158313             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  158314             :        // overridden in every class by *generated* implementation
  158315             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  158316             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  158317             :        // MS: 06/28/02 container of names of variables or container indices 
  158318             :        // used used in the traversal to access AST successor nodes
  158319             :        // overridden in every class by *generated* implementation
  158320             :       /*! \brief container of names of variables or container indices used used in the traversal
  158321             :           to access AST successor nodes overridden in every class by *generated* implementation */
  158322             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  158323             : 
  158324             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  158325             :        // than all the vector copies. The implementation for these functions is generated for each class.
  158326             :       /*! \brief return number of children in the traversal successor list */
  158327             :           virtual size_t get_numberOfTraversalSuccessors() override;
  158328             :       /*! \brief index-based access to traversal successors by index number */
  158329             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  158330             :       /*! \brief index-based access to traversal successors by child node */
  158331             :           virtual size_t get_childIndex(SgNode *child) override;
  158332             : 
  158333             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  158334             :        // MS: 08/16/2002 method for generating RTI information
  158335             :       /*! \brief return C++ Runtime-Time-Information */
  158336             :           virtual RTIReturnType roseRTI() override;
  158337             : #endif
  158338             :       /* */
  158339             : 
  158340             : 
  158341             : 
  158342             :       /* name Deprecated Functions
  158343             :           \brief Deprecated functions ... incomplete-documentation
  158344             : 
  158345             :           These functions have been deprecated from use.
  158346             :        */
  158347             :       /* */
  158348             : 
  158349             :       /*! returns a C style string (char*) representing the class name */
  158350             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  158351             : 
  158352             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  158353             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  158354             : #if 0
  158355             :       /*! returns old style Sage II enum values */
  158356             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  158357             :       /*! returns old style Sage II enum values */
  158358             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  158359             : #endif
  158360             :       /* */
  158361             : 
  158362             : 
  158363             : 
  158364             : 
  158365             :      public:
  158366             :       /* name Traversal Support Functions
  158367             :           \brief Traversal support functions ... incomplete-documentation
  158368             : 
  158369             :           These functions have been made public as part of the design, but they are suggested for internal use 
  158370             :           or by particularly knowledgable users for specialized tools or applications.
  158371             :        */
  158372             :       /* */
  158373             : 
  158374             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  158375             :        // (inferior to ROSE traversal mechanism, experimental).
  158376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  158377             :        */
  158378             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  158379             : 
  158380             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  158381             :       /*! \brief support for the classic visitor pattern done in GoF */
  158382             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  158383             : 
  158384             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  158385             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  158386             :        */
  158387             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  158388             : 
  158389             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  158390             :        */
  158391             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  158392             : 
  158393             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  158394             :        // This traversal helps support internal tools that call static member functions.
  158395             :        // note: this function operates on the memory pools.
  158396             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  158397             :        */
  158398             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  158399             :       /* */
  158400             : 
  158401             : 
  158402             :      public:
  158403             :       /* name Memory Allocation Functions
  158404             :           \brief Memory allocations functions ... incomplete-documentation
  158405             : 
  158406             :           These functions have been made public as part of the design, but they are suggested for internal use 
  158407             :           or by particularly knowledgable users for specialized tools or applications.
  158408             :        */
  158409             :       /* */
  158410             : 
  158411             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  158412             : 
  158413             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  158414             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  158415             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  158416             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  158417             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  158418             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  158419             :           being used with the AST File I/O mechanism.
  158420             :        */
  158421             :           virtual bool isInMemoryPool() override;
  158422             : 
  158423             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  158424             : 
  158425             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  158426             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  158427             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  158428             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  158429             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  158430             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  158431             :           being used with the AST File I/O mechanism.
  158432             :        */
  158433             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  158434             : 
  158435             :       // DQ (4/30/2006): Modified to be a const function.
  158436             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  158437             : 
  158438             :           This functions is part of general support for many possible tools to operate 
  158439             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  158440             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  158441             :           less than the set of pointers used by the AST file I/O. This is part of
  158442             :           work implemented by Andreas, and support tools such as the AST graph generation.
  158443             : 
  158444             :           \warning This function can return unexpected data members and thus the 
  158445             :                    order and the number of elements is unpredicable and subject 
  158446             :                    to change.
  158447             : 
  158448             :           \returns STL vector of pairs of SgNode* and strings
  158449             :        */
  158450             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  158451             : 
  158452             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  158453             : 
  158454             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  158455             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  158456             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  158457             : 
  158458             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  158459             :                    and subject to change.
  158460             :        */
  158461             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  158462             : 
  158463             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  158464             : 
  158465             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  158466             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  158467             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  158468             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  158469             : 
  158470             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  158471             : 
  158472             :           \returns long
  158473             :        */
  158474             :           virtual long getChildIndex( SgNode* childNode ) const override;
  158475             : 
  158476             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  158477             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  158478             :       /* \brief Constructor for use by AST File I/O Mechanism
  158479             : 
  158480             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  158481             :           which obtained via fast binary file I/O from disk.
  158482             :        */
  158483             :        // SgMemberFunctionDeclaration( SgMemberFunctionDeclarationStorageClass& source );
  158484             : 
  158485             : 
  158486             : 
  158487             : 
  158488             : 
  158489             :  // JH (10/24/2005): methods added to support the ast file IO
  158490             :     private:
  158491             : 
  158492             :       /* name AST Memory Allocation Support Functions
  158493             :           \brief Memory allocations support....
  158494             : 
  158495             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  158496             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  158497             :           and support the AST File I/O Mechanism.
  158498             :        */
  158499             :       /* */
  158500             : 
  158501             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  158502             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  158503             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  158504             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  158505             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  158506             :           a correspinding one in the AST_FILE_IO class!
  158507             :        */
  158508             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  158509             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  158510             :       /* \brief Typedef used for low level memory access.
  158511             :        */
  158512             :        // typedef unsigned char* TestType;
  158513             : 
  158514             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  158515             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  158516             :       /* \brief Typedef used to hold memory addresses as values.
  158517             :        */
  158518             :        // typedef unsigned long  AddressType;
  158519             : 
  158520             : 
  158521             : 
  158522             :        // necessary, to have direct access to the p_freepointer and the private methods !
  158523             :       /*! \brief friend class declaration to support AST File I/O */
  158524             :           friend class AST_FILE_IO;
  158525             : 
  158526             :       /*! \brief friend class declaration to support AST File I/O */
  158527             :           friend class SgMemberFunctionDeclarationStorageClass;
  158528             : 
  158529             :       /*! \brief friend class declaration to support AST File I/O */
  158530             :           friend class AstSpecificDataManagingClass;
  158531             : 
  158532             :       /*! \brief friend class declaration to support AST File I/O */
  158533             :           friend class AstSpecificDataManagingClassStorageClass;
  158534             :     public:
  158535             :       /*! \brief IR node constructor to support AST File I/O */
  158536             :           SgMemberFunctionDeclaration( const SgMemberFunctionDeclarationStorageClass& source );
  158537             : 
  158538             :  // private: // JJW hack
  158539             :        /*
  158540             :           name AST Memory Allocation Support Variables
  158541             :           Memory allocations support variables 
  158542             : 
  158543             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  158544             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  158545             :           and support the AST File I/O Mechanism.
  158546             :        */
  158547             :       /* */
  158548             : 
  158549             :     public:
  158550             : 
  158551             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  158552             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  158553             :       // virtual SgNode* addRegExpAttribute();
  158554             :       /*! \brief Support for AST matching using regular expression.
  158555             : 
  158556             :           This support is incomplete and the subject of current research to define 
  158557             :           RegEx trees to support inexact matching.
  158558             :        */
  158559             :           SgMemberFunctionDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  158560             : 
  158561             : // *** COMMON CODE SECTION ENDS HERE ***
  158562             : 
  158563             : 
  158564             : // End of memberFunctionString
  158565             : // Start of memberFunctionString
  158566             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  158567             : 
  158568             :      // the generated cast function
  158569             :      // friend ROSE_DLL_API SgMemberFunctionDeclaration* isSgMemberFunctionDeclaration ( SgNode* s );
  158570             : 
  158571             :           typedef SgFunctionDeclaration base_node_type;
  158572             : 
  158573             : 
  158574             : // End of memberFunctionString
  158575             : // Start of memberFunctionString
  158576             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  158577             : 
  158578             :           void post_construction_initialization() override;
  158579             : 
  158580             : 
  158581             : // End of memberFunctionString
  158582             : 
  158583             :      public: 
  158584             :          SgCtorInitializerList* get_CtorInitializerList() const;
  158585             :          void set_CtorInitializerList(SgCtorInitializerList* CtorInitializerList);
  158586             : 
  158587             : 
  158588             : 
  158589             :      public: 
  158590             :          virtual ~SgMemberFunctionDeclaration();
  158591             : 
  158592             : 
  158593             :      public: 
  158594             :          SgMemberFunctionDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL); 
  158595             :          SgMemberFunctionDeclaration(SgName name, SgFunctionType* type, SgFunctionDefinition* definition); 
  158596             : 
  158597             :     protected:
  158598             : // Start of memberFunctionString
  158599             : SgCtorInitializerList* p_CtorInitializerList;
  158600             :           
  158601             : // End of memberFunctionString
  158602             : // Start of memberFunctionString
  158603             : SgDeclarationStatement* p_associatedClassDeclaration;
  158604             :           
  158605             : // End of memberFunctionString
  158606             : 
  158607             :     friend struct Rose::Traits::generated::describe_node_t<SgMemberFunctionDeclaration>;
  158608             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionDeclaration, SgCtorInitializerList*,&SgMemberFunctionDeclaration::p_CtorInitializerList>;
  158609             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionDeclaration, SgDeclarationStatement*,&SgMemberFunctionDeclaration::p_associatedClassDeclaration>;
  158610             : 
  158611             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158612             : 
  158613             : 
  158614             :    };
  158615             : #endif
  158616             : 
  158617             : // postdeclarations for SgMemberFunctionDeclaration
  158618             : 
  158619             : /* #line 158620 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158620             : 
  158621             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  158622             : 
  158623             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158624             : 
  158625             : 
  158626             : /* #line 158627 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158627             : 
  158628             : 
  158629             : 
  158630             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158631             : 
  158632             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  158633             : //      This code is automatically generated for each 
  158634             : //      terminal and non-terminal within the defined 
  158635             : //      grammar.  There is a simple way to change the 
  158636             : //      code to fix bugs etc.  See the ROSE README file
  158637             : //      for directions.
  158638             : 
  158639             : // tps: (02/22/2010): Adding DLL export requirements
  158640             : #include "rosedll.h"
  158641             : 
  158642             : // predeclarations for SgTemplateMemberFunctionDeclaration
  158643             : 
  158644             : /* #line 158645 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158645             : 
  158646             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  158647             : 
  158648             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  158649             : 
  158650             : #if 1
  158651             : // Class Definition for SgTemplateMemberFunctionDeclaration
  158652             : class ROSE_DLL_API SgTemplateMemberFunctionDeclaration  : public SgMemberFunctionDeclaration
  158653             :    {
  158654             :      public:
  158655             : 
  158656             : 
  158657             : /* #line 158658 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  158658             : 
  158659             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  158660             : // Start of memberFunctionString
  158661             : /* #line 2829 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  158662             : 
  158663             : 
  158664             :           typedef SgTemplateInstantiationMemberFunctionDecl instantiation_kind_t;
  158665             : 
  158666             : 
  158667             : 
  158668             : // End of memberFunctionString
  158669             : // Start of memberFunctionString
  158670             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  158671             : 
  158672             : // *** COMMON CODE SECTION BEGINS HERE ***
  158673             : 
  158674             :     public:
  158675             : 
  158676             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  158677             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  158678             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  158679             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  158680             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  158681             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  158682             : 
  158683             :       /*! \brief returns a string representing the class name */
  158684             :           virtual std::string class_name() const override;
  158685             : 
  158686             :       /*! \brief returns new style SageIII enum values */
  158687             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  158688             : 
  158689             :       /*! \brief static variant value */
  158690             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  158691             :        // static const VariantT static_variant = V_SgTemplateMemberFunctionDeclaration;
  158692             :           enum { static_variant = V_SgTemplateMemberFunctionDeclaration };
  158693             : 
  158694             :        /* the generated cast function */
  158695             :       /*! \brief Casts pointer from base class to derived class */
  158696             :           ROSE_DLL_API friend       SgTemplateMemberFunctionDeclaration* isSgTemplateMemberFunctionDeclaration(       SgNode * s );
  158697             : 
  158698             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  158699             :           ROSE_DLL_API friend const SgTemplateMemberFunctionDeclaration* isSgTemplateMemberFunctionDeclaration( const SgNode * s );
  158700             : 
  158701             :      // ******************************************
  158702             :      // * Memory Pool / New / Delete
  158703             :      // ******************************************
  158704             : 
  158705             :      public:
  158706             :           /// \private
  158707             :           static const unsigned pool_size; //
  158708             :           /// \private
  158709             :           static std::vector<unsigned char *> pools; //
  158710             :           /// \private
  158711             :           static SgTemplateMemberFunctionDeclaration * next_node; // 
  158712             : 
  158713             :           /// \private
  158714             :           static unsigned long initializeStorageClassArray(SgTemplateMemberFunctionDeclarationStorageClass *); //
  158715             : 
  158716             :           /// \private
  158717             :           static void clearMemoryPool(); //
  158718             :           static void deleteMemoryPool(); //
  158719             : 
  158720             :           /// \private
  158721             :           static void extendMemoryPoolForFileIO(); //
  158722             : 
  158723             :           /// \private
  158724             :           static SgTemplateMemberFunctionDeclaration * getPointerFromGlobalIndex(unsigned long); //
  158725             :           /// \private
  158726             :           static SgTemplateMemberFunctionDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  158727             : 
  158728             :           /// \private
  158729             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  158730             :           /// \private
  158731             :           static void resetValidFreepointers(); //
  158732             :           /// \private
  158733             :           static unsigned long getNumberOfLastValidPointer(); //
  158734             : 
  158735             : 
  158736             : #if defined(INLINE_FUNCTIONS)
  158737             :       /*! \brief returns pointer to newly allocated IR node */
  158738             :           inline void *operator new (size_t size);
  158739             : #else
  158740             :       /*! \brief returns pointer to newly allocated IR node */
  158741             :           void *operator new (size_t size);
  158742             : #endif
  158743             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  158744             :           void operator delete (void* pointer, size_t size);
  158745             : 
  158746             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  158747        3810 :           void operator delete (void* pointer)
  158748             :              {
  158749             :             // This is the generated delete operator...
  158750        3810 :                SgTemplateMemberFunctionDeclaration::operator delete (pointer,sizeof(SgTemplateMemberFunctionDeclaration));
  158751             :              }
  158752             : 
  158753             :       /*! \brief Returns the total number of IR nodes of this type */
  158754             :           static size_t numberOfNodes();
  158755             : 
  158756             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  158757             :           static size_t memoryUsage();
  158758             : 
  158759             :       // End of scope which started in IR nodes specific code 
  158760             :       /* */
  158761             : 
  158762             :       /* name Internal Functions
  158763             :           \brief Internal functions ... incomplete-documentation
  158764             : 
  158765             :           These functions have been made public as part of the design, but they are suggested for internal use 
  158766             :           or by particularly knowledgeable users for specialized tools or applications.
  158767             : 
  158768             :           \internal We could not make these private because they are required by user for special purposes. And 
  158769             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  158770             :          
  158771             :        */
  158772             : 
  158773             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  158774             :        // overridden in every class by *generated* implementation
  158775             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  158776             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  158777             :        // MS: 06/28/02 container of names of variables or container indices 
  158778             :        // used used in the traversal to access AST successor nodes
  158779             :        // overridden in every class by *generated* implementation
  158780             :       /*! \brief container of names of variables or container indices used used in the traversal
  158781             :           to access AST successor nodes overridden in every class by *generated* implementation */
  158782             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  158783             : 
  158784             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  158785             :        // than all the vector copies. The implementation for these functions is generated for each class.
  158786             :       /*! \brief return number of children in the traversal successor list */
  158787             :           virtual size_t get_numberOfTraversalSuccessors() override;
  158788             :       /*! \brief index-based access to traversal successors by index number */
  158789             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  158790             :       /*! \brief index-based access to traversal successors by child node */
  158791             :           virtual size_t get_childIndex(SgNode *child) override;
  158792             : 
  158793             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  158794             :        // MS: 08/16/2002 method for generating RTI information
  158795             :       /*! \brief return C++ Runtime-Time-Information */
  158796             :           virtual RTIReturnType roseRTI() override;
  158797             : #endif
  158798             :       /* */
  158799             : 
  158800             : 
  158801             : 
  158802             :       /* name Deprecated Functions
  158803             :           \brief Deprecated functions ... incomplete-documentation
  158804             : 
  158805             :           These functions have been deprecated from use.
  158806             :        */
  158807             :       /* */
  158808             : 
  158809             :       /*! returns a C style string (char*) representing the class name */
  158810             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  158811             : 
  158812             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  158813             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  158814             : #if 0
  158815             :       /*! returns old style Sage II enum values */
  158816             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  158817             :       /*! returns old style Sage II enum values */
  158818             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  158819             : #endif
  158820             :       /* */
  158821             : 
  158822             : 
  158823             : 
  158824             : 
  158825             :      public:
  158826             :       /* name Traversal Support Functions
  158827             :           \brief Traversal support functions ... incomplete-documentation
  158828             : 
  158829             :           These functions have been made public as part of the design, but they are suggested for internal use 
  158830             :           or by particularly knowledgable users for specialized tools or applications.
  158831             :        */
  158832             :       /* */
  158833             : 
  158834             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  158835             :        // (inferior to ROSE traversal mechanism, experimental).
  158836             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  158837             :        */
  158838             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  158839             : 
  158840             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  158841             :       /*! \brief support for the classic visitor pattern done in GoF */
  158842             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  158843             : 
  158844             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  158845             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  158846             :        */
  158847             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  158848             : 
  158849             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  158850             :        */
  158851             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  158852             : 
  158853             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  158854             :        // This traversal helps support internal tools that call static member functions.
  158855             :        // note: this function operates on the memory pools.
  158856             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  158857             :        */
  158858             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  158859             :       /* */
  158860             : 
  158861             : 
  158862             :      public:
  158863             :       /* name Memory Allocation Functions
  158864             :           \brief Memory allocations functions ... incomplete-documentation
  158865             : 
  158866             :           These functions have been made public as part of the design, but they are suggested for internal use 
  158867             :           or by particularly knowledgable users for specialized tools or applications.
  158868             :        */
  158869             :       /* */
  158870             : 
  158871             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  158872             : 
  158873             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  158874             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  158875             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  158876             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  158877             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  158878             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  158879             :           being used with the AST File I/O mechanism.
  158880             :        */
  158881             :           virtual bool isInMemoryPool() override;
  158882             : 
  158883             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  158884             : 
  158885             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  158886             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  158887             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  158888             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  158889             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  158890             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  158891             :           being used with the AST File I/O mechanism.
  158892             :        */
  158893             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  158894             : 
  158895             :       // DQ (4/30/2006): Modified to be a const function.
  158896             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  158897             : 
  158898             :           This functions is part of general support for many possible tools to operate 
  158899             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  158900             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  158901             :           less than the set of pointers used by the AST file I/O. This is part of
  158902             :           work implemented by Andreas, and support tools such as the AST graph generation.
  158903             : 
  158904             :           \warning This function can return unexpected data members and thus the 
  158905             :                    order and the number of elements is unpredicable and subject 
  158906             :                    to change.
  158907             : 
  158908             :           \returns STL vector of pairs of SgNode* and strings
  158909             :        */
  158910             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  158911             : 
  158912             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  158913             : 
  158914             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  158915             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  158916             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  158917             : 
  158918             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  158919             :                    and subject to change.
  158920             :        */
  158921             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  158922             : 
  158923             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  158924             : 
  158925             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  158926             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  158927             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  158928             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  158929             : 
  158930             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  158931             : 
  158932             :           \returns long
  158933             :        */
  158934             :           virtual long getChildIndex( SgNode* childNode ) const override;
  158935             : 
  158936             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  158937             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  158938             :       /* \brief Constructor for use by AST File I/O Mechanism
  158939             : 
  158940             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  158941             :           which obtained via fast binary file I/O from disk.
  158942             :        */
  158943             :        // SgTemplateMemberFunctionDeclaration( SgTemplateMemberFunctionDeclarationStorageClass& source );
  158944             : 
  158945             : 
  158946             : 
  158947             : 
  158948             : 
  158949             :  // JH (10/24/2005): methods added to support the ast file IO
  158950             :     private:
  158951             : 
  158952             :       /* name AST Memory Allocation Support Functions
  158953             :           \brief Memory allocations support....
  158954             : 
  158955             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  158956             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  158957             :           and support the AST File I/O Mechanism.
  158958             :        */
  158959             :       /* */
  158960             : 
  158961             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  158962             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  158963             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  158964             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  158965             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  158966             :           a correspinding one in the AST_FILE_IO class!
  158967             :        */
  158968             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  158969             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  158970             :       /* \brief Typedef used for low level memory access.
  158971             :        */
  158972             :        // typedef unsigned char* TestType;
  158973             : 
  158974             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  158975             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  158976             :       /* \brief Typedef used to hold memory addresses as values.
  158977             :        */
  158978             :        // typedef unsigned long  AddressType;
  158979             : 
  158980             : 
  158981             : 
  158982             :        // necessary, to have direct access to the p_freepointer and the private methods !
  158983             :       /*! \brief friend class declaration to support AST File I/O */
  158984             :           friend class AST_FILE_IO;
  158985             : 
  158986             :       /*! \brief friend class declaration to support AST File I/O */
  158987             :           friend class SgTemplateMemberFunctionDeclarationStorageClass;
  158988             : 
  158989             :       /*! \brief friend class declaration to support AST File I/O */
  158990             :           friend class AstSpecificDataManagingClass;
  158991             : 
  158992             :       /*! \brief friend class declaration to support AST File I/O */
  158993             :           friend class AstSpecificDataManagingClassStorageClass;
  158994             :     public:
  158995             :       /*! \brief IR node constructor to support AST File I/O */
  158996             :           SgTemplateMemberFunctionDeclaration( const SgTemplateMemberFunctionDeclarationStorageClass& source );
  158997             : 
  158998             :  // private: // JJW hack
  158999             :        /*
  159000             :           name AST Memory Allocation Support Variables
  159001             :           Memory allocations support variables 
  159002             : 
  159003             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  159004             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  159005             :           and support the AST File I/O Mechanism.
  159006             :        */
  159007             :       /* */
  159008             : 
  159009             :     public:
  159010             : 
  159011             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  159012             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  159013             :       // virtual SgNode* addRegExpAttribute();
  159014             :       /*! \brief Support for AST matching using regular expression.
  159015             : 
  159016             :           This support is incomplete and the subject of current research to define 
  159017             :           RegEx trees to support inexact matching.
  159018             :        */
  159019             :           SgTemplateMemberFunctionDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  159020             : 
  159021             : // *** COMMON CODE SECTION ENDS HERE ***
  159022             : 
  159023             : 
  159024             : // End of memberFunctionString
  159025             : // Start of memberFunctionString
  159026             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  159027             : 
  159028             :      // the generated cast function
  159029             :      // friend ROSE_DLL_API SgTemplateMemberFunctionDeclaration* isSgTemplateMemberFunctionDeclaration ( SgNode* s );
  159030             : 
  159031             :           typedef SgMemberFunctionDeclaration base_node_type;
  159032             : 
  159033             : 
  159034             : // End of memberFunctionString
  159035             : // Start of memberFunctionString
  159036             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  159037             : 
  159038             :           void post_construction_initialization() override;
  159039             : 
  159040             : 
  159041             : // End of memberFunctionString
  159042             : 
  159043             :      public: 
  159044             :          const SgTemplateParameterPtrList&  get_templateParameters() const;
  159045             :          SgTemplateParameterPtrList& get_templateParameters(); 
  159046             : 
  159047             :      public: 
  159048             :          const SgTemplateArgumentPtrList&  get_templateSpecializationArguments() const;
  159049             :          SgTemplateArgumentPtrList& get_templateSpecializationArguments(); 
  159050             : 
  159051             :      public: 
  159052             :          SgName get_string() const;
  159053             :          void set_string(SgName string);
  159054             : 
  159055             :      public: 
  159056             :          bool get_string_represents_function_body() const;
  159057             :          void set_string_represents_function_body(bool string_represents_function_body);
  159058             : 
  159059             :      public: 
  159060             :          SgDeclarationScope* get_nonreal_decl_scope() const;
  159061             :          void set_nonreal_decl_scope(SgDeclarationScope* nonreal_decl_scope);
  159062             : 
  159063             : 
  159064             :      public: 
  159065             :          virtual ~SgTemplateMemberFunctionDeclaration();
  159066             : 
  159067             : 
  159068             :      public: 
  159069             :          SgTemplateMemberFunctionDeclaration(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL); 
  159070             :          SgTemplateMemberFunctionDeclaration(SgName name, SgFunctionType* type, SgFunctionDefinition* definition); 
  159071             : 
  159072             :     protected:
  159073             : // Start of memberFunctionString
  159074             : SgTemplateParameterPtrList p_templateParameters;
  159075             :           
  159076             : // End of memberFunctionString
  159077             : // Start of memberFunctionString
  159078             : SgTemplateArgumentPtrList p_templateSpecializationArguments;
  159079             :           
  159080             : // End of memberFunctionString
  159081             : // Start of memberFunctionString
  159082             : SgName p_string;
  159083             :           
  159084             : // End of memberFunctionString
  159085             : // Start of memberFunctionString
  159086             : bool p_string_represents_function_body;
  159087             :           
  159088             : // End of memberFunctionString
  159089             : // Start of memberFunctionString
  159090             : SgDeclarationScope* p_nonreal_decl_scope;
  159091             :           
  159092             : // End of memberFunctionString
  159093             : 
  159094             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateMemberFunctionDeclaration>;
  159095             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionDeclaration, SgTemplateParameterPtrList,&SgTemplateMemberFunctionDeclaration::p_templateParameters>;
  159096             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionDeclaration, SgTemplateArgumentPtrList,&SgTemplateMemberFunctionDeclaration::p_templateSpecializationArguments>;
  159097             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionDeclaration, SgName,&SgTemplateMemberFunctionDeclaration::p_string>;
  159098             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionDeclaration, bool,&SgTemplateMemberFunctionDeclaration::p_string_represents_function_body>;
  159099             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionDeclaration, SgDeclarationScope*,&SgTemplateMemberFunctionDeclaration::p_nonreal_decl_scope>;
  159100             : 
  159101             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159102             : 
  159103             : 
  159104             :    };
  159105             : #endif
  159106             : 
  159107             : // postdeclarations for SgTemplateMemberFunctionDeclaration
  159108             : 
  159109             : /* #line 159110 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159110             : 
  159111             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  159112             : 
  159113             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159114             : 
  159115             : 
  159116             : /* #line 159117 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159117             : 
  159118             : 
  159119             : 
  159120             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159121             : 
  159122             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  159123             : //      This code is automatically generated for each 
  159124             : //      terminal and non-terminal within the defined 
  159125             : //      grammar.  There is a simple way to change the 
  159126             : //      code to fix bugs etc.  See the ROSE README file
  159127             : //      for directions.
  159128             : 
  159129             : // tps: (02/22/2010): Adding DLL export requirements
  159130             : #include "rosedll.h"
  159131             : 
  159132             : // predeclarations for SgTemplateInstantiationMemberFunctionDecl
  159133             : 
  159134             : /* #line 159135 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159135             : 
  159136             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  159137             : 
  159138             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159139             : 
  159140             : #if 1
  159141             : // Class Definition for SgTemplateInstantiationMemberFunctionDecl
  159142             : class ROSE_DLL_API SgTemplateInstantiationMemberFunctionDecl  : public SgMemberFunctionDeclaration
  159143             :    {
  159144             :      public:
  159145             : 
  159146             : 
  159147             : /* #line 159148 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159148             : 
  159149             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  159150             : // Start of memberFunctionString
  159151             : /* #line 2939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  159152             : 
  159153             : 
  159154             :           typedef SgTemplateMemberFunctionDeclaration template_kind_t;
  159155             : 
  159156             :        // DQ (2/15/2005): Added resetTemplateName function to handle templated member functions
  159157             :        // DQ (5/8/2004): Not clear that this is useful for function name which
  159158             :        //                don't include the Template parameters in the name.
  159159             :        // DQ (3/21/2004): get_name assembles the full template name with arguments (e.g. "ABC<int>")
  159160             :           void resetTemplateName();
  159161             :        // SgName get_name () const;
  159162             :        // void set_name (SgName name);
  159163             : 
  159164             :        // RV (1/31/2006): Added mangler for template member function instantiations.
  159165             :       //! Returns a mangled name.
  159166             :           virtual SgName get_mangled_name (void) const override;
  159167             : 
  159168             :        // DQ (2/11/2007): Add this to the derived class so that the SgSymbolTable::find() function will work properly
  159169             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  159170             : 
  159171             : #if ALT_FIXUP_COPY
  159172             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  159173             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  159174             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  159175             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  159176             : #else
  159177             :        // DQ (11/6/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  159178             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  159179             : #endif
  159180             : 
  159181             :        // DQ (11/27/2011): Adding support for uniform interface to support template build interface.
  159182             :           SgTemplateInstantiationMemberFunctionDecl ( SgName name, SgFunctionType* type, SgFunctionDefinition* definition);
  159183             : 
  159184             : 
  159185             : 
  159186             : // End of memberFunctionString
  159187             : // Start of memberFunctionString
  159188             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  159189             : 
  159190             : // *** COMMON CODE SECTION BEGINS HERE ***
  159191             : 
  159192             :     public:
  159193             : 
  159194             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  159195             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  159196             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  159197             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  159198             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  159199             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  159200             : 
  159201             :       /*! \brief returns a string representing the class name */
  159202             :           virtual std::string class_name() const override;
  159203             : 
  159204             :       /*! \brief returns new style SageIII enum values */
  159205             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  159206             : 
  159207             :       /*! \brief static variant value */
  159208             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  159209             :        // static const VariantT static_variant = V_SgTemplateInstantiationMemberFunctionDecl;
  159210             :           enum { static_variant = V_SgTemplateInstantiationMemberFunctionDecl };
  159211             : 
  159212             :        /* the generated cast function */
  159213             :       /*! \brief Casts pointer from base class to derived class */
  159214             :           ROSE_DLL_API friend       SgTemplateInstantiationMemberFunctionDecl* isSgTemplateInstantiationMemberFunctionDecl(       SgNode * s );
  159215             : 
  159216             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  159217             :           ROSE_DLL_API friend const SgTemplateInstantiationMemberFunctionDecl* isSgTemplateInstantiationMemberFunctionDecl( const SgNode * s );
  159218             : 
  159219             :      // ******************************************
  159220             :      // * Memory Pool / New / Delete
  159221             :      // ******************************************
  159222             : 
  159223             :      public:
  159224             :           /// \private
  159225             :           static const unsigned pool_size; //
  159226             :           /// \private
  159227             :           static std::vector<unsigned char *> pools; //
  159228             :           /// \private
  159229             :           static SgTemplateInstantiationMemberFunctionDecl * next_node; // 
  159230             : 
  159231             :           /// \private
  159232             :           static unsigned long initializeStorageClassArray(SgTemplateInstantiationMemberFunctionDeclStorageClass *); //
  159233             : 
  159234             :           /// \private
  159235             :           static void clearMemoryPool(); //
  159236             :           static void deleteMemoryPool(); //
  159237             : 
  159238             :           /// \private
  159239             :           static void extendMemoryPoolForFileIO(); //
  159240             : 
  159241             :           /// \private
  159242             :           static SgTemplateInstantiationMemberFunctionDecl * getPointerFromGlobalIndex(unsigned long); //
  159243             :           /// \private
  159244             :           static SgTemplateInstantiationMemberFunctionDecl * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  159245             : 
  159246             :           /// \private
  159247             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  159248             :           /// \private
  159249             :           static void resetValidFreepointers(); //
  159250             :           /// \private
  159251             :           static unsigned long getNumberOfLastValidPointer(); //
  159252             : 
  159253             : 
  159254             : #if defined(INLINE_FUNCTIONS)
  159255             :       /*! \brief returns pointer to newly allocated IR node */
  159256             :           inline void *operator new (size_t size);
  159257             : #else
  159258             :       /*! \brief returns pointer to newly allocated IR node */
  159259             :           void *operator new (size_t size);
  159260             : #endif
  159261             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  159262             :           void operator delete (void* pointer, size_t size);
  159263             : 
  159264             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  159265        3478 :           void operator delete (void* pointer)
  159266             :              {
  159267             :             // This is the generated delete operator...
  159268        3478 :                SgTemplateInstantiationMemberFunctionDecl::operator delete (pointer,sizeof(SgTemplateInstantiationMemberFunctionDecl));
  159269             :              }
  159270             : 
  159271             :       /*! \brief Returns the total number of IR nodes of this type */
  159272             :           static size_t numberOfNodes();
  159273             : 
  159274             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  159275             :           static size_t memoryUsage();
  159276             : 
  159277             :       // End of scope which started in IR nodes specific code 
  159278             :       /* */
  159279             : 
  159280             :       /* name Internal Functions
  159281             :           \brief Internal functions ... incomplete-documentation
  159282             : 
  159283             :           These functions have been made public as part of the design, but they are suggested for internal use 
  159284             :           or by particularly knowledgeable users for specialized tools or applications.
  159285             : 
  159286             :           \internal We could not make these private because they are required by user for special purposes. And 
  159287             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  159288             :          
  159289             :        */
  159290             : 
  159291             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  159292             :        // overridden in every class by *generated* implementation
  159293             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  159294             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  159295             :        // MS: 06/28/02 container of names of variables or container indices 
  159296             :        // used used in the traversal to access AST successor nodes
  159297             :        // overridden in every class by *generated* implementation
  159298             :       /*! \brief container of names of variables or container indices used used in the traversal
  159299             :           to access AST successor nodes overridden in every class by *generated* implementation */
  159300             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  159301             : 
  159302             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  159303             :        // than all the vector copies. The implementation for these functions is generated for each class.
  159304             :       /*! \brief return number of children in the traversal successor list */
  159305             :           virtual size_t get_numberOfTraversalSuccessors() override;
  159306             :       /*! \brief index-based access to traversal successors by index number */
  159307             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  159308             :       /*! \brief index-based access to traversal successors by child node */
  159309             :           virtual size_t get_childIndex(SgNode *child) override;
  159310             : 
  159311             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  159312             :        // MS: 08/16/2002 method for generating RTI information
  159313             :       /*! \brief return C++ Runtime-Time-Information */
  159314             :           virtual RTIReturnType roseRTI() override;
  159315             : #endif
  159316             :       /* */
  159317             : 
  159318             : 
  159319             : 
  159320             :       /* name Deprecated Functions
  159321             :           \brief Deprecated functions ... incomplete-documentation
  159322             : 
  159323             :           These functions have been deprecated from use.
  159324             :        */
  159325             :       /* */
  159326             : 
  159327             :       /*! returns a C style string (char*) representing the class name */
  159328             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  159329             : 
  159330             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  159331             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  159332             : #if 0
  159333             :       /*! returns old style Sage II enum values */
  159334             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  159335             :       /*! returns old style Sage II enum values */
  159336             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  159337             : #endif
  159338             :       /* */
  159339             : 
  159340             : 
  159341             : 
  159342             : 
  159343             :      public:
  159344             :       /* name Traversal Support Functions
  159345             :           \brief Traversal support functions ... incomplete-documentation
  159346             : 
  159347             :           These functions have been made public as part of the design, but they are suggested for internal use 
  159348             :           or by particularly knowledgable users for specialized tools or applications.
  159349             :        */
  159350             :       /* */
  159351             : 
  159352             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  159353             :        // (inferior to ROSE traversal mechanism, experimental).
  159354             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  159355             :        */
  159356             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  159357             : 
  159358             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  159359             :       /*! \brief support for the classic visitor pattern done in GoF */
  159360             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  159361             : 
  159362             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  159363             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  159364             :        */
  159365             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  159366             : 
  159367             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  159368             :        */
  159369             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  159370             : 
  159371             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  159372             :        // This traversal helps support internal tools that call static member functions.
  159373             :        // note: this function operates on the memory pools.
  159374             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  159375             :        */
  159376             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  159377             :       /* */
  159378             : 
  159379             : 
  159380             :      public:
  159381             :       /* name Memory Allocation Functions
  159382             :           \brief Memory allocations functions ... incomplete-documentation
  159383             : 
  159384             :           These functions have been made public as part of the design, but they are suggested for internal use 
  159385             :           or by particularly knowledgable users for specialized tools or applications.
  159386             :        */
  159387             :       /* */
  159388             : 
  159389             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  159390             : 
  159391             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  159392             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  159393             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  159394             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  159395             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  159396             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  159397             :           being used with the AST File I/O mechanism.
  159398             :        */
  159399             :           virtual bool isInMemoryPool() override;
  159400             : 
  159401             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  159402             : 
  159403             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  159404             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  159405             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  159406             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  159407             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  159408             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  159409             :           being used with the AST File I/O mechanism.
  159410             :        */
  159411             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  159412             : 
  159413             :       // DQ (4/30/2006): Modified to be a const function.
  159414             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  159415             : 
  159416             :           This functions is part of general support for many possible tools to operate 
  159417             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  159418             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  159419             :           less than the set of pointers used by the AST file I/O. This is part of
  159420             :           work implemented by Andreas, and support tools such as the AST graph generation.
  159421             : 
  159422             :           \warning This function can return unexpected data members and thus the 
  159423             :                    order and the number of elements is unpredicable and subject 
  159424             :                    to change.
  159425             : 
  159426             :           \returns STL vector of pairs of SgNode* and strings
  159427             :        */
  159428             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  159429             : 
  159430             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  159431             : 
  159432             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  159433             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  159434             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  159435             : 
  159436             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  159437             :                    and subject to change.
  159438             :        */
  159439             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  159440             : 
  159441             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  159442             : 
  159443             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  159444             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  159445             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  159446             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  159447             : 
  159448             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  159449             : 
  159450             :           \returns long
  159451             :        */
  159452             :           virtual long getChildIndex( SgNode* childNode ) const override;
  159453             : 
  159454             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  159455             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  159456             :       /* \brief Constructor for use by AST File I/O Mechanism
  159457             : 
  159458             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  159459             :           which obtained via fast binary file I/O from disk.
  159460             :        */
  159461             :        // SgTemplateInstantiationMemberFunctionDecl( SgTemplateInstantiationMemberFunctionDeclStorageClass& source );
  159462             : 
  159463             : 
  159464             : 
  159465             : 
  159466             : 
  159467             :  // JH (10/24/2005): methods added to support the ast file IO
  159468             :     private:
  159469             : 
  159470             :       /* name AST Memory Allocation Support Functions
  159471             :           \brief Memory allocations support....
  159472             : 
  159473             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  159474             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  159475             :           and support the AST File I/O Mechanism.
  159476             :        */
  159477             :       /* */
  159478             : 
  159479             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  159480             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  159481             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  159482             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  159483             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  159484             :           a correspinding one in the AST_FILE_IO class!
  159485             :        */
  159486             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  159487             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  159488             :       /* \brief Typedef used for low level memory access.
  159489             :        */
  159490             :        // typedef unsigned char* TestType;
  159491             : 
  159492             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  159493             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  159494             :       /* \brief Typedef used to hold memory addresses as values.
  159495             :        */
  159496             :        // typedef unsigned long  AddressType;
  159497             : 
  159498             : 
  159499             : 
  159500             :        // necessary, to have direct access to the p_freepointer and the private methods !
  159501             :       /*! \brief friend class declaration to support AST File I/O */
  159502             :           friend class AST_FILE_IO;
  159503             : 
  159504             :       /*! \brief friend class declaration to support AST File I/O */
  159505             :           friend class SgTemplateInstantiationMemberFunctionDeclStorageClass;
  159506             : 
  159507             :       /*! \brief friend class declaration to support AST File I/O */
  159508             :           friend class AstSpecificDataManagingClass;
  159509             : 
  159510             :       /*! \brief friend class declaration to support AST File I/O */
  159511             :           friend class AstSpecificDataManagingClassStorageClass;
  159512             :     public:
  159513             :       /*! \brief IR node constructor to support AST File I/O */
  159514             :           SgTemplateInstantiationMemberFunctionDecl( const SgTemplateInstantiationMemberFunctionDeclStorageClass& source );
  159515             : 
  159516             :  // private: // JJW hack
  159517             :        /*
  159518             :           name AST Memory Allocation Support Variables
  159519             :           Memory allocations support variables 
  159520             : 
  159521             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  159522             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  159523             :           and support the AST File I/O Mechanism.
  159524             :        */
  159525             :       /* */
  159526             : 
  159527             :     public:
  159528             : 
  159529             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  159530             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  159531             :       // virtual SgNode* addRegExpAttribute();
  159532             :       /*! \brief Support for AST matching using regular expression.
  159533             : 
  159534             :           This support is incomplete and the subject of current research to define 
  159535             :           RegEx trees to support inexact matching.
  159536             :        */
  159537             :           SgTemplateInstantiationMemberFunctionDecl* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  159538             : 
  159539             : // *** COMMON CODE SECTION ENDS HERE ***
  159540             : 
  159541             : 
  159542             : // End of memberFunctionString
  159543             : // Start of memberFunctionString
  159544             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  159545             : 
  159546             :      // the generated cast function
  159547             :      // friend ROSE_DLL_API SgTemplateInstantiationMemberFunctionDecl* isSgTemplateInstantiationMemberFunctionDecl ( SgNode* s );
  159548             : 
  159549             :           typedef SgMemberFunctionDeclaration base_node_type;
  159550             : 
  159551             : 
  159552             : // End of memberFunctionString
  159553             : // Start of memberFunctionString
  159554             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  159555             : 
  159556             :           void post_construction_initialization() override;
  159557             : 
  159558             : 
  159559             : // End of memberFunctionString
  159560             : 
  159561             :      public: 
  159562             :          SgName get_templateName() const;
  159563             :          void set_templateName(SgName templateName);
  159564             : 
  159565             :      public: 
  159566             :          SgTemplateMemberFunctionDeclaration* get_templateDeclaration() const;
  159567             :          void set_templateDeclaration(SgTemplateMemberFunctionDeclaration* templateDeclaration);
  159568             : 
  159569             :      public: 
  159570             :          const SgTemplateArgumentPtrList&  get_templateArguments() const;
  159571             :          SgTemplateArgumentPtrList& get_templateArguments(); 
  159572             : 
  159573             :      public: 
  159574             :          bool get_nameResetFromMangledForm() const;
  159575             :          void set_nameResetFromMangledForm(bool nameResetFromMangledForm);
  159576             : 
  159577             :      public: 
  159578             :          bool get_template_argument_list_is_explicit() const;
  159579             :          void set_template_argument_list_is_explicit(bool template_argument_list_is_explicit);
  159580             : 
  159581             : 
  159582             :      public: 
  159583             :          virtual ~SgTemplateInstantiationMemberFunctionDecl();
  159584             : 
  159585             : 
  159586             :      public: 
  159587             :          SgTemplateInstantiationMemberFunctionDecl(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL, SgTemplateMemberFunctionDeclaration* templateDeclaration = NULL, SgTemplateArgumentPtrList templateArguments = SgTemplateArgumentPtrList()); 
  159588             :          SgTemplateInstantiationMemberFunctionDecl(SgName name, SgFunctionType* type, SgFunctionDefinition* definition, SgTemplateMemberFunctionDeclaration* templateDeclaration, SgTemplateArgumentPtrList templateArguments); 
  159589             : 
  159590             :     protected:
  159591             : // Start of memberFunctionString
  159592             : SgName p_templateName;
  159593             :           
  159594             : // End of memberFunctionString
  159595             : // Start of memberFunctionString
  159596             : SgTemplateMemberFunctionDeclaration* p_templateDeclaration;
  159597             :           
  159598             : // End of memberFunctionString
  159599             : // Start of memberFunctionString
  159600             : SgTemplateArgumentPtrList p_templateArguments;
  159601             :           
  159602             : // End of memberFunctionString
  159603             : // Start of memberFunctionString
  159604             : bool p_nameResetFromMangledForm;
  159605             :           
  159606             : // End of memberFunctionString
  159607             : // Start of memberFunctionString
  159608             : bool p_template_argument_list_is_explicit;
  159609             :           
  159610             : // End of memberFunctionString
  159611             : 
  159612             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateInstantiationMemberFunctionDecl>;
  159613             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationMemberFunctionDecl, SgName,&SgTemplateInstantiationMemberFunctionDecl::p_templateName>;
  159614             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationMemberFunctionDecl, SgTemplateMemberFunctionDeclaration*,&SgTemplateInstantiationMemberFunctionDecl::p_templateDeclaration>;
  159615             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationMemberFunctionDecl, SgTemplateArgumentPtrList,&SgTemplateInstantiationMemberFunctionDecl::p_templateArguments>;
  159616             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationMemberFunctionDecl, bool,&SgTemplateInstantiationMemberFunctionDecl::p_nameResetFromMangledForm>;
  159617             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationMemberFunctionDecl, bool,&SgTemplateInstantiationMemberFunctionDecl::p_template_argument_list_is_explicit>;
  159618             : 
  159619             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159620             : 
  159621             : 
  159622             :    };
  159623             : #endif
  159624             : 
  159625             : // postdeclarations for SgTemplateInstantiationMemberFunctionDecl
  159626             : 
  159627             : /* #line 159628 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159628             : 
  159629             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  159630             : 
  159631             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159632             : 
  159633             : 
  159634             : /* #line 159635 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159635             : 
  159636             : 
  159637             : 
  159638             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159639             : 
  159640             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  159641             : //      This code is automatically generated for each 
  159642             : //      terminal and non-terminal within the defined 
  159643             : //      grammar.  There is a simple way to change the 
  159644             : //      code to fix bugs etc.  See the ROSE README file
  159645             : //      for directions.
  159646             : 
  159647             : // tps: (02/22/2010): Adding DLL export requirements
  159648             : #include "rosedll.h"
  159649             : 
  159650             : // predeclarations for SgTemplateInstantiationFunctionDecl
  159651             : 
  159652             : /* #line 159653 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159653             : 
  159654             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  159655             : 
  159656             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  159657             : 
  159658             : #if 1
  159659             : // Class Definition for SgTemplateInstantiationFunctionDecl
  159660             : class ROSE_DLL_API SgTemplateInstantiationFunctionDecl  : public SgFunctionDeclaration
  159661             :    {
  159662             :      public:
  159663             : 
  159664             : 
  159665             : /* #line 159666 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  159666             : 
  159667             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  159668             : // Start of memberFunctionString
  159669             : /* #line 2906 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  159670             : 
  159671             : 
  159672             :           typedef SgTemplateFunctionDeclaration template_kind_t;
  159673             : 
  159674             :        // DQ (2/15/2005): Added resetTemplateName function to handle templated functions
  159675             :        // DQ (5/8/2004): Not clear that this is useful for function name which
  159676             :        //                don't include the Template parameters in the name.
  159677             :        // DQ (3/21/2004): get_name assembles the full template name with arguments (e.g. "ABC<int>")
  159678             :           void resetTemplateName();
  159679             :        // SgName get_name () const;
  159680             :        // void set_name (SgName name);
  159681             : 
  159682             :        // RV (1/31/2006): Added mangler for template function instantiations.
  159683             :           virtual SgName get_mangled_name (void) const override;
  159684             : 
  159685             :        // DQ (2/11/2007): Add this to the derived class so that the SgSymbolTable::find() function will work properly
  159686             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  159687             : 
  159688             : #if ALT_FIXUP_COPY
  159689             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  159690             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  159691             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  159692             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  159693             : #else
  159694             :        // DQ (10/19/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  159695             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  159696             : #endif
  159697             : 
  159698             :        // DQ (11/27/2011): Adding support for uniform interface to support template build interface.
  159699             :           SgTemplateInstantiationFunctionDecl ( SgName name, SgFunctionType* type, SgFunctionDefinition* definition);
  159700             : 
  159701             : 
  159702             : 
  159703             : // End of memberFunctionString
  159704             : // Start of memberFunctionString
  159705             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  159706             : 
  159707             : // *** COMMON CODE SECTION BEGINS HERE ***
  159708             : 
  159709             :     public:
  159710             : 
  159711             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  159712             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  159713             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  159714             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  159715             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  159716             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  159717             : 
  159718             :       /*! \brief returns a string representing the class name */
  159719             :           virtual std::string class_name() const override;
  159720             : 
  159721             :       /*! \brief returns new style SageIII enum values */
  159722             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  159723             : 
  159724             :       /*! \brief static variant value */
  159725             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  159726             :        // static const VariantT static_variant = V_SgTemplateInstantiationFunctionDecl;
  159727             :           enum { static_variant = V_SgTemplateInstantiationFunctionDecl };
  159728             : 
  159729             :        /* the generated cast function */
  159730             :       /*! \brief Casts pointer from base class to derived class */
  159731             :           ROSE_DLL_API friend       SgTemplateInstantiationFunctionDecl* isSgTemplateInstantiationFunctionDecl(       SgNode * s );
  159732             : 
  159733             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  159734             :           ROSE_DLL_API friend const SgTemplateInstantiationFunctionDecl* isSgTemplateInstantiationFunctionDecl( const SgNode * s );
  159735             : 
  159736             :      // ******************************************
  159737             :      // * Memory Pool / New / Delete
  159738             :      // ******************************************
  159739             : 
  159740             :      public:
  159741             :           /// \private
  159742             :           static const unsigned pool_size; //
  159743             :           /// \private
  159744             :           static std::vector<unsigned char *> pools; //
  159745             :           /// \private
  159746             :           static SgTemplateInstantiationFunctionDecl * next_node; // 
  159747             : 
  159748             :           /// \private
  159749             :           static unsigned long initializeStorageClassArray(SgTemplateInstantiationFunctionDeclStorageClass *); //
  159750             : 
  159751             :           /// \private
  159752             :           static void clearMemoryPool(); //
  159753             :           static void deleteMemoryPool(); //
  159754             : 
  159755             :           /// \private
  159756             :           static void extendMemoryPoolForFileIO(); //
  159757             : 
  159758             :           /// \private
  159759             :           static SgTemplateInstantiationFunctionDecl * getPointerFromGlobalIndex(unsigned long); //
  159760             :           /// \private
  159761             :           static SgTemplateInstantiationFunctionDecl * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  159762             : 
  159763             :           /// \private
  159764             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  159765             :           /// \private
  159766             :           static void resetValidFreepointers(); //
  159767             :           /// \private
  159768             :           static unsigned long getNumberOfLastValidPointer(); //
  159769             : 
  159770             : 
  159771             : #if defined(INLINE_FUNCTIONS)
  159772             :       /*! \brief returns pointer to newly allocated IR node */
  159773             :           inline void *operator new (size_t size);
  159774             : #else
  159775             :       /*! \brief returns pointer to newly allocated IR node */
  159776             :           void *operator new (size_t size);
  159777             : #endif
  159778             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  159779             :           void operator delete (void* pointer, size_t size);
  159780             : 
  159781             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  159782         566 :           void operator delete (void* pointer)
  159783             :              {
  159784             :             // This is the generated delete operator...
  159785         566 :                SgTemplateInstantiationFunctionDecl::operator delete (pointer,sizeof(SgTemplateInstantiationFunctionDecl));
  159786             :              }
  159787             : 
  159788             :       /*! \brief Returns the total number of IR nodes of this type */
  159789             :           static size_t numberOfNodes();
  159790             : 
  159791             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  159792             :           static size_t memoryUsage();
  159793             : 
  159794             :       // End of scope which started in IR nodes specific code 
  159795             :       /* */
  159796             : 
  159797             :       /* name Internal Functions
  159798             :           \brief Internal functions ... incomplete-documentation
  159799             : 
  159800             :           These functions have been made public as part of the design, but they are suggested for internal use 
  159801             :           or by particularly knowledgeable users for specialized tools or applications.
  159802             : 
  159803             :           \internal We could not make these private because they are required by user for special purposes. And 
  159804             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  159805             :          
  159806             :        */
  159807             : 
  159808             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  159809             :        // overridden in every class by *generated* implementation
  159810             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  159811             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  159812             :        // MS: 06/28/02 container of names of variables or container indices 
  159813             :        // used used in the traversal to access AST successor nodes
  159814             :        // overridden in every class by *generated* implementation
  159815             :       /*! \brief container of names of variables or container indices used used in the traversal
  159816             :           to access AST successor nodes overridden in every class by *generated* implementation */
  159817             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  159818             : 
  159819             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  159820             :        // than all the vector copies. The implementation for these functions is generated for each class.
  159821             :       /*! \brief return number of children in the traversal successor list */
  159822             :           virtual size_t get_numberOfTraversalSuccessors() override;
  159823             :       /*! \brief index-based access to traversal successors by index number */
  159824             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  159825             :       /*! \brief index-based access to traversal successors by child node */
  159826             :           virtual size_t get_childIndex(SgNode *child) override;
  159827             : 
  159828             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  159829             :        // MS: 08/16/2002 method for generating RTI information
  159830             :       /*! \brief return C++ Runtime-Time-Information */
  159831             :           virtual RTIReturnType roseRTI() override;
  159832             : #endif
  159833             :       /* */
  159834             : 
  159835             : 
  159836             : 
  159837             :       /* name Deprecated Functions
  159838             :           \brief Deprecated functions ... incomplete-documentation
  159839             : 
  159840             :           These functions have been deprecated from use.
  159841             :        */
  159842             :       /* */
  159843             : 
  159844             :       /*! returns a C style string (char*) representing the class name */
  159845             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  159846             : 
  159847             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  159848             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  159849             : #if 0
  159850             :       /*! returns old style Sage II enum values */
  159851             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  159852             :       /*! returns old style Sage II enum values */
  159853             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  159854             : #endif
  159855             :       /* */
  159856             : 
  159857             : 
  159858             : 
  159859             : 
  159860             :      public:
  159861             :       /* name Traversal Support Functions
  159862             :           \brief Traversal support functions ... incomplete-documentation
  159863             : 
  159864             :           These functions have been made public as part of the design, but they are suggested for internal use 
  159865             :           or by particularly knowledgable users for specialized tools or applications.
  159866             :        */
  159867             :       /* */
  159868             : 
  159869             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  159870             :        // (inferior to ROSE traversal mechanism, experimental).
  159871             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  159872             :        */
  159873             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  159874             : 
  159875             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  159876             :       /*! \brief support for the classic visitor pattern done in GoF */
  159877             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  159878             : 
  159879             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  159880             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  159881             :        */
  159882             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  159883             : 
  159884             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  159885             :        */
  159886             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  159887             : 
  159888             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  159889             :        // This traversal helps support internal tools that call static member functions.
  159890             :        // note: this function operates on the memory pools.
  159891             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  159892             :        */
  159893             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  159894             :       /* */
  159895             : 
  159896             : 
  159897             :      public:
  159898             :       /* name Memory Allocation Functions
  159899             :           \brief Memory allocations functions ... incomplete-documentation
  159900             : 
  159901             :           These functions have been made public as part of the design, but they are suggested for internal use 
  159902             :           or by particularly knowledgable users for specialized tools or applications.
  159903             :        */
  159904             :       /* */
  159905             : 
  159906             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  159907             : 
  159908             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  159909             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  159910             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  159911             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  159912             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  159913             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  159914             :           being used with the AST File I/O mechanism.
  159915             :        */
  159916             :           virtual bool isInMemoryPool() override;
  159917             : 
  159918             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  159919             : 
  159920             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  159921             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  159922             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  159923             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  159924             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  159925             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  159926             :           being used with the AST File I/O mechanism.
  159927             :        */
  159928             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  159929             : 
  159930             :       // DQ (4/30/2006): Modified to be a const function.
  159931             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  159932             : 
  159933             :           This functions is part of general support for many possible tools to operate 
  159934             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  159935             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  159936             :           less than the set of pointers used by the AST file I/O. This is part of
  159937             :           work implemented by Andreas, and support tools such as the AST graph generation.
  159938             : 
  159939             :           \warning This function can return unexpected data members and thus the 
  159940             :                    order and the number of elements is unpredicable and subject 
  159941             :                    to change.
  159942             : 
  159943             :           \returns STL vector of pairs of SgNode* and strings
  159944             :        */
  159945             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  159946             : 
  159947             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  159948             : 
  159949             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  159950             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  159951             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  159952             : 
  159953             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  159954             :                    and subject to change.
  159955             :        */
  159956             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  159957             : 
  159958             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  159959             : 
  159960             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  159961             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  159962             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  159963             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  159964             : 
  159965             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  159966             : 
  159967             :           \returns long
  159968             :        */
  159969             :           virtual long getChildIndex( SgNode* childNode ) const override;
  159970             : 
  159971             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  159972             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  159973             :       /* \brief Constructor for use by AST File I/O Mechanism
  159974             : 
  159975             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  159976             :           which obtained via fast binary file I/O from disk.
  159977             :        */
  159978             :        // SgTemplateInstantiationFunctionDecl( SgTemplateInstantiationFunctionDeclStorageClass& source );
  159979             : 
  159980             : 
  159981             : 
  159982             : 
  159983             : 
  159984             :  // JH (10/24/2005): methods added to support the ast file IO
  159985             :     private:
  159986             : 
  159987             :       /* name AST Memory Allocation Support Functions
  159988             :           \brief Memory allocations support....
  159989             : 
  159990             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  159991             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  159992             :           and support the AST File I/O Mechanism.
  159993             :        */
  159994             :       /* */
  159995             : 
  159996             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  159997             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  159998             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  159999             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  160000             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  160001             :           a correspinding one in the AST_FILE_IO class!
  160002             :        */
  160003             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  160004             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  160005             :       /* \brief Typedef used for low level memory access.
  160006             :        */
  160007             :        // typedef unsigned char* TestType;
  160008             : 
  160009             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  160010             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  160011             :       /* \brief Typedef used to hold memory addresses as values.
  160012             :        */
  160013             :        // typedef unsigned long  AddressType;
  160014             : 
  160015             : 
  160016             : 
  160017             :        // necessary, to have direct access to the p_freepointer and the private methods !
  160018             :       /*! \brief friend class declaration to support AST File I/O */
  160019             :           friend class AST_FILE_IO;
  160020             : 
  160021             :       /*! \brief friend class declaration to support AST File I/O */
  160022             :           friend class SgTemplateInstantiationFunctionDeclStorageClass;
  160023             : 
  160024             :       /*! \brief friend class declaration to support AST File I/O */
  160025             :           friend class AstSpecificDataManagingClass;
  160026             : 
  160027             :       /*! \brief friend class declaration to support AST File I/O */
  160028             :           friend class AstSpecificDataManagingClassStorageClass;
  160029             :     public:
  160030             :       /*! \brief IR node constructor to support AST File I/O */
  160031             :           SgTemplateInstantiationFunctionDecl( const SgTemplateInstantiationFunctionDeclStorageClass& source );
  160032             : 
  160033             :  // private: // JJW hack
  160034             :        /*
  160035             :           name AST Memory Allocation Support Variables
  160036             :           Memory allocations support variables 
  160037             : 
  160038             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  160039             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  160040             :           and support the AST File I/O Mechanism.
  160041             :        */
  160042             :       /* */
  160043             : 
  160044             :     public:
  160045             : 
  160046             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  160047             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  160048             :       // virtual SgNode* addRegExpAttribute();
  160049             :       /*! \brief Support for AST matching using regular expression.
  160050             : 
  160051             :           This support is incomplete and the subject of current research to define 
  160052             :           RegEx trees to support inexact matching.
  160053             :        */
  160054             :           SgTemplateInstantiationFunctionDecl* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  160055             : 
  160056             : // *** COMMON CODE SECTION ENDS HERE ***
  160057             : 
  160058             : 
  160059             : // End of memberFunctionString
  160060             : // Start of memberFunctionString
  160061             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  160062             : 
  160063             :      // the generated cast function
  160064             :      // friend ROSE_DLL_API SgTemplateInstantiationFunctionDecl* isSgTemplateInstantiationFunctionDecl ( SgNode* s );
  160065             : 
  160066             :           typedef SgFunctionDeclaration base_node_type;
  160067             : 
  160068             : 
  160069             : // End of memberFunctionString
  160070             : // Start of memberFunctionString
  160071             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  160072             : 
  160073             :           void post_construction_initialization() override;
  160074             : 
  160075             : 
  160076             : // End of memberFunctionString
  160077             : 
  160078             :      public: 
  160079             :          SgName get_templateName() const;
  160080             :          void set_templateName(SgName templateName);
  160081             : 
  160082             :      public: 
  160083             :          SgTemplateFunctionDeclaration* get_templateDeclaration() const;
  160084             :          void set_templateDeclaration(SgTemplateFunctionDeclaration* templateDeclaration);
  160085             : 
  160086             :      public: 
  160087             :          const SgTemplateArgumentPtrList&  get_templateArguments() const;
  160088             :          SgTemplateArgumentPtrList& get_templateArguments(); 
  160089             : 
  160090             :      public: 
  160091             :          bool get_nameResetFromMangledForm() const;
  160092             :          void set_nameResetFromMangledForm(bool nameResetFromMangledForm);
  160093             : 
  160094             :      public: 
  160095             :          bool get_template_argument_list_is_explicit() const;
  160096             :          void set_template_argument_list_is_explicit(bool template_argument_list_is_explicit);
  160097             : 
  160098             : 
  160099             :      public: 
  160100             :          virtual ~SgTemplateInstantiationFunctionDecl();
  160101             : 
  160102             : 
  160103             :      public: 
  160104             :          SgTemplateInstantiationFunctionDecl(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL, SgTemplateFunctionDeclaration* templateDeclaration = NULL, SgTemplateArgumentPtrList templateArguments = SgTemplateArgumentPtrList()); 
  160105             :          SgTemplateInstantiationFunctionDecl(SgName name, SgFunctionType* type, SgFunctionDefinition* definition, SgTemplateFunctionDeclaration* templateDeclaration, SgTemplateArgumentPtrList templateArguments); 
  160106             : 
  160107             :     protected:
  160108             : // Start of memberFunctionString
  160109             : SgName p_templateName;
  160110             :           
  160111             : // End of memberFunctionString
  160112             : // Start of memberFunctionString
  160113             : SgTemplateFunctionDeclaration* p_templateDeclaration;
  160114             :           
  160115             : // End of memberFunctionString
  160116             : // Start of memberFunctionString
  160117             : SgTemplateArgumentPtrList p_templateArguments;
  160118             :           
  160119             : // End of memberFunctionString
  160120             : // Start of memberFunctionString
  160121             : bool p_nameResetFromMangledForm;
  160122             :           
  160123             : // End of memberFunctionString
  160124             : // Start of memberFunctionString
  160125             : bool p_template_argument_list_is_explicit;
  160126             :           
  160127             : // End of memberFunctionString
  160128             : 
  160129             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateInstantiationFunctionDecl>;
  160130             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationFunctionDecl, SgName,&SgTemplateInstantiationFunctionDecl::p_templateName>;
  160131             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationFunctionDecl, SgTemplateFunctionDeclaration*,&SgTemplateInstantiationFunctionDecl::p_templateDeclaration>;
  160132             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationFunctionDecl, SgTemplateArgumentPtrList,&SgTemplateInstantiationFunctionDecl::p_templateArguments>;
  160133             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationFunctionDecl, bool,&SgTemplateInstantiationFunctionDecl::p_nameResetFromMangledForm>;
  160134             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateInstantiationFunctionDecl, bool,&SgTemplateInstantiationFunctionDecl::p_template_argument_list_is_explicit>;
  160135             : 
  160136             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160137             : 
  160138             : 
  160139             :    };
  160140             : #endif
  160141             : 
  160142             : // postdeclarations for SgTemplateInstantiationFunctionDecl
  160143             : 
  160144             : /* #line 160145 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160145             : 
  160146             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  160147             : 
  160148             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160149             : 
  160150             : 
  160151             : /* #line 160152 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160152             : 
  160153             : 
  160154             : 
  160155             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160156             : 
  160157             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  160158             : //      This code is automatically generated for each 
  160159             : //      terminal and non-terminal within the defined 
  160160             : //      grammar.  There is a simple way to change the 
  160161             : //      code to fix bugs etc.  See the ROSE README file
  160162             : //      for directions.
  160163             : 
  160164             : // tps: (02/22/2010): Adding DLL export requirements
  160165             : #include "rosedll.h"
  160166             : 
  160167             : // predeclarations for SgProgramHeaderStatement
  160168             : 
  160169             : /* #line 160170 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160170             : 
  160171             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  160172             : 
  160173             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160174             : 
  160175             : #if 1
  160176             : // Class Definition for SgProgramHeaderStatement
  160177             : class ROSE_DLL_API SgProgramHeaderStatement  : public SgFunctionDeclaration
  160178             :    {
  160179             :      public:
  160180             : 
  160181             : 
  160182             : /* #line 160183 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160183             : 
  160184             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  160185             : // Start of memberFunctionString
  160186             : /* #line 3228 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  160187             : 
  160188             :   /* HEADER_LIST_DECLARATIONS */
  160189             :   // DQ (3/20/2007): These are automatically generated access functions from p_name (also added as a data member)
  160190             :   // SgName get_name() const;
  160191             :   // void set_name(SgName);
  160192             : 
  160193             :   // DQ (3/20/2007): These are no longer explicitly stored in the AST (they can be looked up in the symbol table)
  160194             :   // SgFunctionType* get_type () const;
  160195             :   // void set_type ( SgFunctionType* type );
  160196             : 
  160197             :   // DQ (3/20/2007): This is not required for a Fortran Program Header, I think. If it is it should be the
  160198             :   // return_type and should be added as a data member with the access functions automatically generated.
  160199             :   // SgType* get_orig_return_type() const;
  160200             : 
  160201             :   // DQ (3/20/2007): I think we need this
  160202             :      SgName get_mangled_name() const override;
  160203             : 
  160204             :   // DQ (3/20/2007): This should be added as a data member with automatically generated access functions.
  160205             :   // void set_parameterList ( SgFunctionParameterList* );
  160206             : 
  160207             :   // DQ (3/20/2007): Fortran Program's can't use arguments in this situation (rule 1102, Fortran 2003 Standard 04-007).
  160208             :   // SgInitializedNamePtrList & get_args() ;
  160209             :   // const SgInitializedNamePtrList & get_args() const;
  160210             : 
  160211             :      protected:
  160212             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  160213             : 
  160214             :      public:
  160215             :        // DQ (3/20/2007): Fortran Program does not have this concept.
  160216             :        // void hasEllipses();
  160217             : 
  160218             : 
  160219             : 
  160220             : // End of memberFunctionString
  160221             : // Start of memberFunctionString
  160222             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  160223             : 
  160224             : // *** COMMON CODE SECTION BEGINS HERE ***
  160225             : 
  160226             :     public:
  160227             : 
  160228             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  160229             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  160230             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  160231             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  160232             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  160233             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  160234             : 
  160235             :       /*! \brief returns a string representing the class name */
  160236             :           virtual std::string class_name() const override;
  160237             : 
  160238             :       /*! \brief returns new style SageIII enum values */
  160239             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  160240             : 
  160241             :       /*! \brief static variant value */
  160242             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  160243             :        // static const VariantT static_variant = V_SgProgramHeaderStatement;
  160244             :           enum { static_variant = V_SgProgramHeaderStatement };
  160245             : 
  160246             :        /* the generated cast function */
  160247             :       /*! \brief Casts pointer from base class to derived class */
  160248             :           ROSE_DLL_API friend       SgProgramHeaderStatement* isSgProgramHeaderStatement(       SgNode * s );
  160249             : 
  160250             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  160251             :           ROSE_DLL_API friend const SgProgramHeaderStatement* isSgProgramHeaderStatement( const SgNode * s );
  160252             : 
  160253             :      // ******************************************
  160254             :      // * Memory Pool / New / Delete
  160255             :      // ******************************************
  160256             : 
  160257             :      public:
  160258             :           /// \private
  160259             :           static const unsigned pool_size; //
  160260             :           /// \private
  160261             :           static std::vector<unsigned char *> pools; //
  160262             :           /// \private
  160263             :           static SgProgramHeaderStatement * next_node; // 
  160264             : 
  160265             :           /// \private
  160266             :           static unsigned long initializeStorageClassArray(SgProgramHeaderStatementStorageClass *); //
  160267             : 
  160268             :           /// \private
  160269             :           static void clearMemoryPool(); //
  160270             :           static void deleteMemoryPool(); //
  160271             : 
  160272             :           /// \private
  160273             :           static void extendMemoryPoolForFileIO(); //
  160274             : 
  160275             :           /// \private
  160276             :           static SgProgramHeaderStatement * getPointerFromGlobalIndex(unsigned long); //
  160277             :           /// \private
  160278             :           static SgProgramHeaderStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  160279             : 
  160280             :           /// \private
  160281             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  160282             :           /// \private
  160283             :           static void resetValidFreepointers(); //
  160284             :           /// \private
  160285             :           static unsigned long getNumberOfLastValidPointer(); //
  160286             : 
  160287             : 
  160288             : #if defined(INLINE_FUNCTIONS)
  160289             :       /*! \brief returns pointer to newly allocated IR node */
  160290             :           inline void *operator new (size_t size);
  160291             : #else
  160292             :       /*! \brief returns pointer to newly allocated IR node */
  160293             :           void *operator new (size_t size);
  160294             : #endif
  160295             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  160296             :           void operator delete (void* pointer, size_t size);
  160297             : 
  160298             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  160299           1 :           void operator delete (void* pointer)
  160300             :              {
  160301             :             // This is the generated delete operator...
  160302           1 :                SgProgramHeaderStatement::operator delete (pointer,sizeof(SgProgramHeaderStatement));
  160303             :              }
  160304             : 
  160305             :       /*! \brief Returns the total number of IR nodes of this type */
  160306             :           static size_t numberOfNodes();
  160307             : 
  160308             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  160309             :           static size_t memoryUsage();
  160310             : 
  160311             :       // End of scope which started in IR nodes specific code 
  160312             :       /* */
  160313             : 
  160314             :       /* name Internal Functions
  160315             :           \brief Internal functions ... incomplete-documentation
  160316             : 
  160317             :           These functions have been made public as part of the design, but they are suggested for internal use 
  160318             :           or by particularly knowledgeable users for specialized tools or applications.
  160319             : 
  160320             :           \internal We could not make these private because they are required by user for special purposes. And 
  160321             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  160322             :          
  160323             :        */
  160324             : 
  160325             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  160326             :        // overridden in every class by *generated* implementation
  160327             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  160328             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  160329             :        // MS: 06/28/02 container of names of variables or container indices 
  160330             :        // used used in the traversal to access AST successor nodes
  160331             :        // overridden in every class by *generated* implementation
  160332             :       /*! \brief container of names of variables or container indices used used in the traversal
  160333             :           to access AST successor nodes overridden in every class by *generated* implementation */
  160334             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  160335             : 
  160336             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  160337             :        // than all the vector copies. The implementation for these functions is generated for each class.
  160338             :       /*! \brief return number of children in the traversal successor list */
  160339             :           virtual size_t get_numberOfTraversalSuccessors() override;
  160340             :       /*! \brief index-based access to traversal successors by index number */
  160341             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  160342             :       /*! \brief index-based access to traversal successors by child node */
  160343             :           virtual size_t get_childIndex(SgNode *child) override;
  160344             : 
  160345             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  160346             :        // MS: 08/16/2002 method for generating RTI information
  160347             :       /*! \brief return C++ Runtime-Time-Information */
  160348             :           virtual RTIReturnType roseRTI() override;
  160349             : #endif
  160350             :       /* */
  160351             : 
  160352             : 
  160353             : 
  160354             :       /* name Deprecated Functions
  160355             :           \brief Deprecated functions ... incomplete-documentation
  160356             : 
  160357             :           These functions have been deprecated from use.
  160358             :        */
  160359             :       /* */
  160360             : 
  160361             :       /*! returns a C style string (char*) representing the class name */
  160362             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  160363             : 
  160364             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  160365             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  160366             : #if 0
  160367             :       /*! returns old style Sage II enum values */
  160368             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  160369             :       /*! returns old style Sage II enum values */
  160370             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  160371             : #endif
  160372             :       /* */
  160373             : 
  160374             : 
  160375             : 
  160376             : 
  160377             :      public:
  160378             :       /* name Traversal Support Functions
  160379             :           \brief Traversal support functions ... incomplete-documentation
  160380             : 
  160381             :           These functions have been made public as part of the design, but they are suggested for internal use 
  160382             :           or by particularly knowledgable users for specialized tools or applications.
  160383             :        */
  160384             :       /* */
  160385             : 
  160386             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  160387             :        // (inferior to ROSE traversal mechanism, experimental).
  160388             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  160389             :        */
  160390             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  160391             : 
  160392             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  160393             :       /*! \brief support for the classic visitor pattern done in GoF */
  160394             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  160395             : 
  160396             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  160397             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  160398             :        */
  160399             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  160400             : 
  160401             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  160402             :        */
  160403             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  160404             : 
  160405             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  160406             :        // This traversal helps support internal tools that call static member functions.
  160407             :        // note: this function operates on the memory pools.
  160408             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  160409             :        */
  160410             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  160411             :       /* */
  160412             : 
  160413             : 
  160414             :      public:
  160415             :       /* name Memory Allocation Functions
  160416             :           \brief Memory allocations functions ... incomplete-documentation
  160417             : 
  160418             :           These functions have been made public as part of the design, but they are suggested for internal use 
  160419             :           or by particularly knowledgable users for specialized tools or applications.
  160420             :        */
  160421             :       /* */
  160422             : 
  160423             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  160424             : 
  160425             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  160426             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  160427             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  160428             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  160429             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  160430             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  160431             :           being used with the AST File I/O mechanism.
  160432             :        */
  160433             :           virtual bool isInMemoryPool() override;
  160434             : 
  160435             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  160436             : 
  160437             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  160438             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  160439             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  160440             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  160441             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  160442             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  160443             :           being used with the AST File I/O mechanism.
  160444             :        */
  160445             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  160446             : 
  160447             :       // DQ (4/30/2006): Modified to be a const function.
  160448             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  160449             : 
  160450             :           This functions is part of general support for many possible tools to operate 
  160451             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  160452             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  160453             :           less than the set of pointers used by the AST file I/O. This is part of
  160454             :           work implemented by Andreas, and support tools such as the AST graph generation.
  160455             : 
  160456             :           \warning This function can return unexpected data members and thus the 
  160457             :                    order and the number of elements is unpredicable and subject 
  160458             :                    to change.
  160459             : 
  160460             :           \returns STL vector of pairs of SgNode* and strings
  160461             :        */
  160462             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  160463             : 
  160464             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  160465             : 
  160466             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  160467             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  160468             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  160469             : 
  160470             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  160471             :                    and subject to change.
  160472             :        */
  160473             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  160474             : 
  160475             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  160476             : 
  160477             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  160478             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  160479             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  160480             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  160481             : 
  160482             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  160483             : 
  160484             :           \returns long
  160485             :        */
  160486             :           virtual long getChildIndex( SgNode* childNode ) const override;
  160487             : 
  160488             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  160489             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  160490             :       /* \brief Constructor for use by AST File I/O Mechanism
  160491             : 
  160492             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  160493             :           which obtained via fast binary file I/O from disk.
  160494             :        */
  160495             :        // SgProgramHeaderStatement( SgProgramHeaderStatementStorageClass& source );
  160496             : 
  160497             : 
  160498             : 
  160499             : 
  160500             : 
  160501             :  // JH (10/24/2005): methods added to support the ast file IO
  160502             :     private:
  160503             : 
  160504             :       /* name AST Memory Allocation Support Functions
  160505             :           \brief Memory allocations support....
  160506             : 
  160507             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  160508             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  160509             :           and support the AST File I/O Mechanism.
  160510             :        */
  160511             :       /* */
  160512             : 
  160513             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  160514             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  160515             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  160516             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  160517             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  160518             :           a correspinding one in the AST_FILE_IO class!
  160519             :        */
  160520             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  160521             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  160522             :       /* \brief Typedef used for low level memory access.
  160523             :        */
  160524             :        // typedef unsigned char* TestType;
  160525             : 
  160526             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  160527             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  160528             :       /* \brief Typedef used to hold memory addresses as values.
  160529             :        */
  160530             :        // typedef unsigned long  AddressType;
  160531             : 
  160532             : 
  160533             : 
  160534             :        // necessary, to have direct access to the p_freepointer and the private methods !
  160535             :       /*! \brief friend class declaration to support AST File I/O */
  160536             :           friend class AST_FILE_IO;
  160537             : 
  160538             :       /*! \brief friend class declaration to support AST File I/O */
  160539             :           friend class SgProgramHeaderStatementStorageClass;
  160540             : 
  160541             :       /*! \brief friend class declaration to support AST File I/O */
  160542             :           friend class AstSpecificDataManagingClass;
  160543             : 
  160544             :       /*! \brief friend class declaration to support AST File I/O */
  160545             :           friend class AstSpecificDataManagingClassStorageClass;
  160546             :     public:
  160547             :       /*! \brief IR node constructor to support AST File I/O */
  160548             :           SgProgramHeaderStatement( const SgProgramHeaderStatementStorageClass& source );
  160549             : 
  160550             :  // private: // JJW hack
  160551             :        /*
  160552             :           name AST Memory Allocation Support Variables
  160553             :           Memory allocations support variables 
  160554             : 
  160555             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  160556             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  160557             :           and support the AST File I/O Mechanism.
  160558             :        */
  160559             :       /* */
  160560             : 
  160561             :     public:
  160562             : 
  160563             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  160564             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  160565             :       // virtual SgNode* addRegExpAttribute();
  160566             :       /*! \brief Support for AST matching using regular expression.
  160567             : 
  160568             :           This support is incomplete and the subject of current research to define 
  160569             :           RegEx trees to support inexact matching.
  160570             :        */
  160571             :           SgProgramHeaderStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  160572             : 
  160573             : // *** COMMON CODE SECTION ENDS HERE ***
  160574             : 
  160575             : 
  160576             : // End of memberFunctionString
  160577             : // Start of memberFunctionString
  160578             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  160579             : 
  160580             :      // the generated cast function
  160581             :      // friend ROSE_DLL_API SgProgramHeaderStatement* isSgProgramHeaderStatement ( SgNode* s );
  160582             : 
  160583             :           typedef SgFunctionDeclaration base_node_type;
  160584             : 
  160585             : 
  160586             : // End of memberFunctionString
  160587             : // Start of memberFunctionString
  160588             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  160589             : 
  160590             :           void post_construction_initialization() override;
  160591             : 
  160592             : 
  160593             : // End of memberFunctionString
  160594             : 
  160595             :      public: 
  160596             :          bool get_program_statement_explicit() const;
  160597             :          void set_program_statement_explicit(bool program_statement_explicit);
  160598             : 
  160599             :      public: 
  160600             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  160601             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  160602             : 
  160603             : 
  160604             :      public: 
  160605             :          virtual ~SgProgramHeaderStatement();
  160606             : 
  160607             : 
  160608             :      public: 
  160609             :          SgProgramHeaderStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL); 
  160610             :          SgProgramHeaderStatement(SgName name, SgFunctionType* type, SgFunctionDefinition* definition); 
  160611             : 
  160612             :     protected:
  160613             : // Start of memberFunctionString
  160614             : bool p_program_statement_explicit;
  160615             :           
  160616             : // End of memberFunctionString
  160617             : // Start of memberFunctionString
  160618             : SgLabelRefExp* p_end_numeric_label;
  160619             :           
  160620             : // End of memberFunctionString
  160621             : 
  160622             :     friend struct Rose::Traits::generated::describe_node_t<SgProgramHeaderStatement>;
  160623             :     friend struct Rose::Traits::generated::describe_field_t<SgProgramHeaderStatement, bool,&SgProgramHeaderStatement::p_program_statement_explicit>;
  160624             :     friend struct Rose::Traits::generated::describe_field_t<SgProgramHeaderStatement, SgLabelRefExp*,&SgProgramHeaderStatement::p_end_numeric_label>;
  160625             : 
  160626             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160627             : 
  160628             : 
  160629             :    };
  160630             : #endif
  160631             : 
  160632             : // postdeclarations for SgProgramHeaderStatement
  160633             : 
  160634             : /* #line 160635 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160635             : 
  160636             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  160637             : 
  160638             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160639             : 
  160640             : 
  160641             : /* #line 160642 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160642             : 
  160643             : 
  160644             : 
  160645             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160646             : 
  160647             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  160648             : //      This code is automatically generated for each 
  160649             : //      terminal and non-terminal within the defined 
  160650             : //      grammar.  There is a simple way to change the 
  160651             : //      code to fix bugs etc.  See the ROSE README file
  160652             : //      for directions.
  160653             : 
  160654             : // tps: (02/22/2010): Adding DLL export requirements
  160655             : #include "rosedll.h"
  160656             : 
  160657             : // predeclarations for SgProcedureHeaderStatement
  160658             : 
  160659             : /* #line 160660 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160660             : 
  160661             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  160662             : 
  160663             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  160664             : 
  160665             : #if 1
  160666             : // Class Definition for SgProcedureHeaderStatement
  160667             : class ROSE_DLL_API SgProcedureHeaderStatement  : public SgFunctionDeclaration
  160668             :    {
  160669             :      public:
  160670             : 
  160671             : 
  160672             : /* #line 160673 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  160673             : 
  160674             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  160675             : // Start of memberFunctionString
  160676             : /* #line 3261 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  160677             : 
  160678             : 
  160679             :        // DQ (3/20/2007): These should be generated automatically from ROSETTA.
  160680             :        // SgName get_name() const;
  160681             :        // void set_name(SgName);
  160682             :        // SgFunctionType* get_type () const;
  160683             :        // void set_type ( SgFunctionType* type );
  160684             :        // SgType* get_orig_return_type() const;
  160685             :        // void set_parameterList ( SgFunctionParameterList* );
  160686             : 
  160687             :       /*! \brief Classification for different types of Fortran subprograms.
  160688             :        */
  160689             :           enum subprogram_kind_enum
  160690             :              {
  160691             :                e_unknown_kind,               /*!< error value */
  160692             :                e_function_subprogram_kind,   /*!< Fortran function value */
  160693             :                e_subroutine_subprogram_kind, /*!< Fortran subroutine value */
  160694             :                e_block_data_subprogram_kind, /*!< Fortran data block value */
  160695             :                e_last_subprogram_kind        /*!< last value (upper bound on range of values, used in error checking) */
  160696             :              };
  160697             : 
  160698             :           SgName get_mangled_name() const override;
  160699             : 
  160700             :        /* HEADER_LIST_DECLARATIONS */
  160701             : 
  160702             :        // SgInitializedNamePtrList & get_args() ;
  160703             :        // const SgInitializedNamePtrList & get_args() const;
  160704             : 
  160705             :      protected:
  160706             :        // DQ (3/20/2007): Unclear if we need this, it references p_definition, which does not appear to be defined!
  160707             :        // virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false);
  160708             : 
  160709             :      public:
  160710             :           bool isFunction()   const;
  160711             :           bool isSubroutine() const;
  160712             :           bool isBlockData()  const;
  160713             : 
  160714             :        // DQ (3/20/2007): Fortran does not have this concept (I think)
  160715             :        // void hasEllipses();
  160716             : 
  160717             : 
  160718             : // End of memberFunctionString
  160719             : // Start of memberFunctionString
  160720             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  160721             : 
  160722             : // *** COMMON CODE SECTION BEGINS HERE ***
  160723             : 
  160724             :     public:
  160725             : 
  160726             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  160727             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  160728             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  160729             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  160730             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  160731             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  160732             : 
  160733             :       /*! \brief returns a string representing the class name */
  160734             :           virtual std::string class_name() const override;
  160735             : 
  160736             :       /*! \brief returns new style SageIII enum values */
  160737             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  160738             : 
  160739             :       /*! \brief static variant value */
  160740             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  160741             :        // static const VariantT static_variant = V_SgProcedureHeaderStatement;
  160742             :           enum { static_variant = V_SgProcedureHeaderStatement };
  160743             : 
  160744             :        /* the generated cast function */
  160745             :       /*! \brief Casts pointer from base class to derived class */
  160746             :           ROSE_DLL_API friend       SgProcedureHeaderStatement* isSgProcedureHeaderStatement(       SgNode * s );
  160747             : 
  160748             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  160749             :           ROSE_DLL_API friend const SgProcedureHeaderStatement* isSgProcedureHeaderStatement( const SgNode * s );
  160750             : 
  160751             :      // ******************************************
  160752             :      // * Memory Pool / New / Delete
  160753             :      // ******************************************
  160754             : 
  160755             :      public:
  160756             :           /// \private
  160757             :           static const unsigned pool_size; //
  160758             :           /// \private
  160759             :           static std::vector<unsigned char *> pools; //
  160760             :           /// \private
  160761             :           static SgProcedureHeaderStatement * next_node; // 
  160762             : 
  160763             :           /// \private
  160764             :           static unsigned long initializeStorageClassArray(SgProcedureHeaderStatementStorageClass *); //
  160765             : 
  160766             :           /// \private
  160767             :           static void clearMemoryPool(); //
  160768             :           static void deleteMemoryPool(); //
  160769             : 
  160770             :           /// \private
  160771             :           static void extendMemoryPoolForFileIO(); //
  160772             : 
  160773             :           /// \private
  160774             :           static SgProcedureHeaderStatement * getPointerFromGlobalIndex(unsigned long); //
  160775             :           /// \private
  160776             :           static SgProcedureHeaderStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  160777             : 
  160778             :           /// \private
  160779             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  160780             :           /// \private
  160781             :           static void resetValidFreepointers(); //
  160782             :           /// \private
  160783             :           static unsigned long getNumberOfLastValidPointer(); //
  160784             : 
  160785             : 
  160786             : #if defined(INLINE_FUNCTIONS)
  160787             :       /*! \brief returns pointer to newly allocated IR node */
  160788             :           inline void *operator new (size_t size);
  160789             : #else
  160790             :       /*! \brief returns pointer to newly allocated IR node */
  160791             :           void *operator new (size_t size);
  160792             : #endif
  160793             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  160794             :           void operator delete (void* pointer, size_t size);
  160795             : 
  160796             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  160797           0 :           void operator delete (void* pointer)
  160798             :              {
  160799             :             // This is the generated delete operator...
  160800           0 :                SgProcedureHeaderStatement::operator delete (pointer,sizeof(SgProcedureHeaderStatement));
  160801             :              }
  160802             : 
  160803             :       /*! \brief Returns the total number of IR nodes of this type */
  160804             :           static size_t numberOfNodes();
  160805             : 
  160806             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  160807             :           static size_t memoryUsage();
  160808             : 
  160809             :       // End of scope which started in IR nodes specific code 
  160810             :       /* */
  160811             : 
  160812             :       /* name Internal Functions
  160813             :           \brief Internal functions ... incomplete-documentation
  160814             : 
  160815             :           These functions have been made public as part of the design, but they are suggested for internal use 
  160816             :           or by particularly knowledgeable users for specialized tools or applications.
  160817             : 
  160818             :           \internal We could not make these private because they are required by user for special purposes. And 
  160819             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  160820             :          
  160821             :        */
  160822             : 
  160823             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  160824             :        // overridden in every class by *generated* implementation
  160825             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  160826             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  160827             :        // MS: 06/28/02 container of names of variables or container indices 
  160828             :        // used used in the traversal to access AST successor nodes
  160829             :        // overridden in every class by *generated* implementation
  160830             :       /*! \brief container of names of variables or container indices used used in the traversal
  160831             :           to access AST successor nodes overridden in every class by *generated* implementation */
  160832             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  160833             : 
  160834             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  160835             :        // than all the vector copies. The implementation for these functions is generated for each class.
  160836             :       /*! \brief return number of children in the traversal successor list */
  160837             :           virtual size_t get_numberOfTraversalSuccessors() override;
  160838             :       /*! \brief index-based access to traversal successors by index number */
  160839             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  160840             :       /*! \brief index-based access to traversal successors by child node */
  160841             :           virtual size_t get_childIndex(SgNode *child) override;
  160842             : 
  160843             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  160844             :        // MS: 08/16/2002 method for generating RTI information
  160845             :       /*! \brief return C++ Runtime-Time-Information */
  160846             :           virtual RTIReturnType roseRTI() override;
  160847             : #endif
  160848             :       /* */
  160849             : 
  160850             : 
  160851             : 
  160852             :       /* name Deprecated Functions
  160853             :           \brief Deprecated functions ... incomplete-documentation
  160854             : 
  160855             :           These functions have been deprecated from use.
  160856             :        */
  160857             :       /* */
  160858             : 
  160859             :       /*! returns a C style string (char*) representing the class name */
  160860             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  160861             : 
  160862             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  160863             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  160864             : #if 0
  160865             :       /*! returns old style Sage II enum values */
  160866             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  160867             :       /*! returns old style Sage II enum values */
  160868             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  160869             : #endif
  160870             :       /* */
  160871             : 
  160872             : 
  160873             : 
  160874             : 
  160875             :      public:
  160876             :       /* name Traversal Support Functions
  160877             :           \brief Traversal support functions ... incomplete-documentation
  160878             : 
  160879             :           These functions have been made public as part of the design, but they are suggested for internal use 
  160880             :           or by particularly knowledgable users for specialized tools or applications.
  160881             :        */
  160882             :       /* */
  160883             : 
  160884             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  160885             :        // (inferior to ROSE traversal mechanism, experimental).
  160886             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  160887             :        */
  160888             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  160889             : 
  160890             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  160891             :       /*! \brief support for the classic visitor pattern done in GoF */
  160892             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  160893             : 
  160894             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  160895             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  160896             :        */
  160897             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  160898             : 
  160899             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  160900             :        */
  160901             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  160902             : 
  160903             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  160904             :        // This traversal helps support internal tools that call static member functions.
  160905             :        // note: this function operates on the memory pools.
  160906             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  160907             :        */
  160908             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  160909             :       /* */
  160910             : 
  160911             : 
  160912             :      public:
  160913             :       /* name Memory Allocation Functions
  160914             :           \brief Memory allocations functions ... incomplete-documentation
  160915             : 
  160916             :           These functions have been made public as part of the design, but they are suggested for internal use 
  160917             :           or by particularly knowledgable users for specialized tools or applications.
  160918             :        */
  160919             :       /* */
  160920             : 
  160921             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  160922             : 
  160923             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  160924             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  160925             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  160926             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  160927             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  160928             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  160929             :           being used with the AST File I/O mechanism.
  160930             :        */
  160931             :           virtual bool isInMemoryPool() override;
  160932             : 
  160933             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  160934             : 
  160935             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  160936             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  160937             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  160938             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  160939             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  160940             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  160941             :           being used with the AST File I/O mechanism.
  160942             :        */
  160943             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  160944             : 
  160945             :       // DQ (4/30/2006): Modified to be a const function.
  160946             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  160947             : 
  160948             :           This functions is part of general support for many possible tools to operate 
  160949             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  160950             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  160951             :           less than the set of pointers used by the AST file I/O. This is part of
  160952             :           work implemented by Andreas, and support tools such as the AST graph generation.
  160953             : 
  160954             :           \warning This function can return unexpected data members and thus the 
  160955             :                    order and the number of elements is unpredicable and subject 
  160956             :                    to change.
  160957             : 
  160958             :           \returns STL vector of pairs of SgNode* and strings
  160959             :        */
  160960             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  160961             : 
  160962             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  160963             : 
  160964             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  160965             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  160966             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  160967             : 
  160968             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  160969             :                    and subject to change.
  160970             :        */
  160971             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  160972             : 
  160973             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  160974             : 
  160975             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  160976             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  160977             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  160978             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  160979             : 
  160980             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  160981             : 
  160982             :           \returns long
  160983             :        */
  160984             :           virtual long getChildIndex( SgNode* childNode ) const override;
  160985             : 
  160986             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  160987             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  160988             :       /* \brief Constructor for use by AST File I/O Mechanism
  160989             : 
  160990             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  160991             :           which obtained via fast binary file I/O from disk.
  160992             :        */
  160993             :        // SgProcedureHeaderStatement( SgProcedureHeaderStatementStorageClass& source );
  160994             : 
  160995             : 
  160996             : 
  160997             : 
  160998             : 
  160999             :  // JH (10/24/2005): methods added to support the ast file IO
  161000             :     private:
  161001             : 
  161002             :       /* name AST Memory Allocation Support Functions
  161003             :           \brief Memory allocations support....
  161004             : 
  161005             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  161006             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  161007             :           and support the AST File I/O Mechanism.
  161008             :        */
  161009             :       /* */
  161010             : 
  161011             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  161012             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  161013             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  161014             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  161015             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  161016             :           a correspinding one in the AST_FILE_IO class!
  161017             :        */
  161018             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  161019             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161020             :       /* \brief Typedef used for low level memory access.
  161021             :        */
  161022             :        // typedef unsigned char* TestType;
  161023             : 
  161024             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  161025             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161026             :       /* \brief Typedef used to hold memory addresses as values.
  161027             :        */
  161028             :        // typedef unsigned long  AddressType;
  161029             : 
  161030             : 
  161031             : 
  161032             :        // necessary, to have direct access to the p_freepointer and the private methods !
  161033             :       /*! \brief friend class declaration to support AST File I/O */
  161034             :           friend class AST_FILE_IO;
  161035             : 
  161036             :       /*! \brief friend class declaration to support AST File I/O */
  161037             :           friend class SgProcedureHeaderStatementStorageClass;
  161038             : 
  161039             :       /*! \brief friend class declaration to support AST File I/O */
  161040             :           friend class AstSpecificDataManagingClass;
  161041             : 
  161042             :       /*! \brief friend class declaration to support AST File I/O */
  161043             :           friend class AstSpecificDataManagingClassStorageClass;
  161044             :     public:
  161045             :       /*! \brief IR node constructor to support AST File I/O */
  161046             :           SgProcedureHeaderStatement( const SgProcedureHeaderStatementStorageClass& source );
  161047             : 
  161048             :  // private: // JJW hack
  161049             :        /*
  161050             :           name AST Memory Allocation Support Variables
  161051             :           Memory allocations support variables 
  161052             : 
  161053             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  161054             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  161055             :           and support the AST File I/O Mechanism.
  161056             :        */
  161057             :       /* */
  161058             : 
  161059             :     public:
  161060             : 
  161061             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  161062             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  161063             :       // virtual SgNode* addRegExpAttribute();
  161064             :       /*! \brief Support for AST matching using regular expression.
  161065             : 
  161066             :           This support is incomplete and the subject of current research to define 
  161067             :           RegEx trees to support inexact matching.
  161068             :        */
  161069             :           SgProcedureHeaderStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  161070             : 
  161071             : // *** COMMON CODE SECTION ENDS HERE ***
  161072             : 
  161073             : 
  161074             : // End of memberFunctionString
  161075             : // Start of memberFunctionString
  161076             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  161077             : 
  161078             :      // the generated cast function
  161079             :      // friend ROSE_DLL_API SgProcedureHeaderStatement* isSgProcedureHeaderStatement ( SgNode* s );
  161080             : 
  161081             :           typedef SgFunctionDeclaration base_node_type;
  161082             : 
  161083             : 
  161084             : // End of memberFunctionString
  161085             : // Start of memberFunctionString
  161086             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  161087             : 
  161088             :           void post_construction_initialization() override;
  161089             : 
  161090             : 
  161091             : // End of memberFunctionString
  161092             : 
  161093             :      public: 
  161094             :          SgProcedureHeaderStatement::subprogram_kind_enum get_subprogram_kind() const;
  161095             :          void set_subprogram_kind(SgProcedureHeaderStatement::subprogram_kind_enum subprogram_kind);
  161096             : 
  161097             :      public: 
  161098             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  161099             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  161100             : 
  161101             :      public: 
  161102             :          SgInitializedName* get_result_name() const;
  161103             :          void set_result_name(SgInitializedName* result_name);
  161104             : 
  161105             : 
  161106             :      public: 
  161107             :          virtual ~SgProcedureHeaderStatement();
  161108             : 
  161109             : 
  161110             :      public: 
  161111             :          SgProcedureHeaderStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL); 
  161112             :          SgProcedureHeaderStatement(SgName name, SgFunctionType* type, SgFunctionDefinition* definition); 
  161113             : 
  161114             :     protected:
  161115             : // Start of memberFunctionString
  161116             : SgProcedureHeaderStatement::subprogram_kind_enum p_subprogram_kind;
  161117             :           
  161118             : // End of memberFunctionString
  161119             : // Start of memberFunctionString
  161120             : SgLabelRefExp* p_end_numeric_label;
  161121             :           
  161122             : // End of memberFunctionString
  161123             : // Start of memberFunctionString
  161124             : SgInitializedName* p_result_name;
  161125             :           
  161126             : // End of memberFunctionString
  161127             : 
  161128             :     friend struct Rose::Traits::generated::describe_node_t<SgProcedureHeaderStatement>;
  161129             :     friend struct Rose::Traits::generated::describe_field_t<SgProcedureHeaderStatement, SgProcedureHeaderStatement::subprogram_kind_enum,&SgProcedureHeaderStatement::p_subprogram_kind>;
  161130             :     friend struct Rose::Traits::generated::describe_field_t<SgProcedureHeaderStatement, SgLabelRefExp*,&SgProcedureHeaderStatement::p_end_numeric_label>;
  161131             :     friend struct Rose::Traits::generated::describe_field_t<SgProcedureHeaderStatement, SgInitializedName*,&SgProcedureHeaderStatement::p_result_name>;
  161132             : 
  161133             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161134             : 
  161135             : 
  161136             :    };
  161137             : #endif
  161138             : 
  161139             : // postdeclarations for SgProcedureHeaderStatement
  161140             : 
  161141             : /* #line 161142 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161142             : 
  161143             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  161144             : 
  161145             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161146             : 
  161147             : 
  161148             : /* #line 161149 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161149             : 
  161150             : 
  161151             : 
  161152             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161153             : 
  161154             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  161155             : //      This code is automatically generated for each 
  161156             : //      terminal and non-terminal within the defined 
  161157             : //      grammar.  There is a simple way to change the 
  161158             : //      code to fix bugs etc.  See the ROSE README file
  161159             : //      for directions.
  161160             : 
  161161             : // tps: (02/22/2010): Adding DLL export requirements
  161162             : #include "rosedll.h"
  161163             : 
  161164             : // predeclarations for SgEntryStatement
  161165             : 
  161166             : /* #line 161167 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161167             : 
  161168             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  161169             : 
  161170             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161171             : 
  161172             : #if 1
  161173             : // Class Definition for SgEntryStatement
  161174             : class ROSE_DLL_API SgEntryStatement  : public SgFunctionDeclaration
  161175             :    {
  161176             :      public:
  161177             : 
  161178             : 
  161179             : /* #line 161180 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161180             : 
  161181             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  161182             : // Start of memberFunctionString
  161183             : /* #line 3302 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  161184             : 
  161185             : 
  161186             :           SgName get_mangled_name() const override;
  161187             : 
  161188             : 
  161189             : 
  161190             : // End of memberFunctionString
  161191             : // Start of memberFunctionString
  161192             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  161193             : 
  161194             : // *** COMMON CODE SECTION BEGINS HERE ***
  161195             : 
  161196             :     public:
  161197             : 
  161198             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  161199             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  161200             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  161201             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  161202             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  161203             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  161204             : 
  161205             :       /*! \brief returns a string representing the class name */
  161206             :           virtual std::string class_name() const override;
  161207             : 
  161208             :       /*! \brief returns new style SageIII enum values */
  161209             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  161210             : 
  161211             :       /*! \brief static variant value */
  161212             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  161213             :        // static const VariantT static_variant = V_SgEntryStatement;
  161214             :           enum { static_variant = V_SgEntryStatement };
  161215             : 
  161216             :        /* the generated cast function */
  161217             :       /*! \brief Casts pointer from base class to derived class */
  161218             :           ROSE_DLL_API friend       SgEntryStatement* isSgEntryStatement(       SgNode * s );
  161219             : 
  161220             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  161221             :           ROSE_DLL_API friend const SgEntryStatement* isSgEntryStatement( const SgNode * s );
  161222             : 
  161223             :      // ******************************************
  161224             :      // * Memory Pool / New / Delete
  161225             :      // ******************************************
  161226             : 
  161227             :      public:
  161228             :           /// \private
  161229             :           static const unsigned pool_size; //
  161230             :           /// \private
  161231             :           static std::vector<unsigned char *> pools; //
  161232             :           /// \private
  161233             :           static SgEntryStatement * next_node; // 
  161234             : 
  161235             :           /// \private
  161236             :           static unsigned long initializeStorageClassArray(SgEntryStatementStorageClass *); //
  161237             : 
  161238             :           /// \private
  161239             :           static void clearMemoryPool(); //
  161240             :           static void deleteMemoryPool(); //
  161241             : 
  161242             :           /// \private
  161243             :           static void extendMemoryPoolForFileIO(); //
  161244             : 
  161245             :           /// \private
  161246             :           static SgEntryStatement * getPointerFromGlobalIndex(unsigned long); //
  161247             :           /// \private
  161248             :           static SgEntryStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  161249             : 
  161250             :           /// \private
  161251             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  161252             :           /// \private
  161253             :           static void resetValidFreepointers(); //
  161254             :           /// \private
  161255             :           static unsigned long getNumberOfLastValidPointer(); //
  161256             : 
  161257             : 
  161258             : #if defined(INLINE_FUNCTIONS)
  161259             :       /*! \brief returns pointer to newly allocated IR node */
  161260             :           inline void *operator new (size_t size);
  161261             : #else
  161262             :       /*! \brief returns pointer to newly allocated IR node */
  161263             :           void *operator new (size_t size);
  161264             : #endif
  161265             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  161266             :           void operator delete (void* pointer, size_t size);
  161267             : 
  161268             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  161269           0 :           void operator delete (void* pointer)
  161270             :              {
  161271             :             // This is the generated delete operator...
  161272           0 :                SgEntryStatement::operator delete (pointer,sizeof(SgEntryStatement));
  161273             :              }
  161274             : 
  161275             :       /*! \brief Returns the total number of IR nodes of this type */
  161276             :           static size_t numberOfNodes();
  161277             : 
  161278             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  161279             :           static size_t memoryUsage();
  161280             : 
  161281             :       // End of scope which started in IR nodes specific code 
  161282             :       /* */
  161283             : 
  161284             :       /* name Internal Functions
  161285             :           \brief Internal functions ... incomplete-documentation
  161286             : 
  161287             :           These functions have been made public as part of the design, but they are suggested for internal use 
  161288             :           or by particularly knowledgeable users for specialized tools or applications.
  161289             : 
  161290             :           \internal We could not make these private because they are required by user for special purposes. And 
  161291             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  161292             :          
  161293             :        */
  161294             : 
  161295             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  161296             :        // overridden in every class by *generated* implementation
  161297             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  161298             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  161299             :        // MS: 06/28/02 container of names of variables or container indices 
  161300             :        // used used in the traversal to access AST successor nodes
  161301             :        // overridden in every class by *generated* implementation
  161302             :       /*! \brief container of names of variables or container indices used used in the traversal
  161303             :           to access AST successor nodes overridden in every class by *generated* implementation */
  161304             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  161305             : 
  161306             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  161307             :        // than all the vector copies. The implementation for these functions is generated for each class.
  161308             :       /*! \brief return number of children in the traversal successor list */
  161309             :           virtual size_t get_numberOfTraversalSuccessors() override;
  161310             :       /*! \brief index-based access to traversal successors by index number */
  161311             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  161312             :       /*! \brief index-based access to traversal successors by child node */
  161313             :           virtual size_t get_childIndex(SgNode *child) override;
  161314             : 
  161315             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  161316             :        // MS: 08/16/2002 method for generating RTI information
  161317             :       /*! \brief return C++ Runtime-Time-Information */
  161318             :           virtual RTIReturnType roseRTI() override;
  161319             : #endif
  161320             :       /* */
  161321             : 
  161322             : 
  161323             : 
  161324             :       /* name Deprecated Functions
  161325             :           \brief Deprecated functions ... incomplete-documentation
  161326             : 
  161327             :           These functions have been deprecated from use.
  161328             :        */
  161329             :       /* */
  161330             : 
  161331             :       /*! returns a C style string (char*) representing the class name */
  161332             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  161333             : 
  161334             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  161335             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  161336             : #if 0
  161337             :       /*! returns old style Sage II enum values */
  161338             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  161339             :       /*! returns old style Sage II enum values */
  161340             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  161341             : #endif
  161342             :       /* */
  161343             : 
  161344             : 
  161345             : 
  161346             : 
  161347             :      public:
  161348             :       /* name Traversal Support Functions
  161349             :           \brief Traversal support functions ... incomplete-documentation
  161350             : 
  161351             :           These functions have been made public as part of the design, but they are suggested for internal use 
  161352             :           or by particularly knowledgable users for specialized tools or applications.
  161353             :        */
  161354             :       /* */
  161355             : 
  161356             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  161357             :        // (inferior to ROSE traversal mechanism, experimental).
  161358             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  161359             :        */
  161360             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  161361             : 
  161362             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  161363             :       /*! \brief support for the classic visitor pattern done in GoF */
  161364             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  161365             : 
  161366             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  161367             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  161368             :        */
  161369             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  161370             : 
  161371             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  161372             :        */
  161373             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  161374             : 
  161375             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  161376             :        // This traversal helps support internal tools that call static member functions.
  161377             :        // note: this function operates on the memory pools.
  161378             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  161379             :        */
  161380             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  161381             :       /* */
  161382             : 
  161383             : 
  161384             :      public:
  161385             :       /* name Memory Allocation Functions
  161386             :           \brief Memory allocations functions ... incomplete-documentation
  161387             : 
  161388             :           These functions have been made public as part of the design, but they are suggested for internal use 
  161389             :           or by particularly knowledgable users for specialized tools or applications.
  161390             :        */
  161391             :       /* */
  161392             : 
  161393             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  161394             : 
  161395             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  161396             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  161397             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  161398             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  161399             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  161400             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  161401             :           being used with the AST File I/O mechanism.
  161402             :        */
  161403             :           virtual bool isInMemoryPool() override;
  161404             : 
  161405             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  161406             : 
  161407             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  161408             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  161409             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  161410             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  161411             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  161412             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  161413             :           being used with the AST File I/O mechanism.
  161414             :        */
  161415             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  161416             : 
  161417             :       // DQ (4/30/2006): Modified to be a const function.
  161418             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  161419             : 
  161420             :           This functions is part of general support for many possible tools to operate 
  161421             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  161422             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  161423             :           less than the set of pointers used by the AST file I/O. This is part of
  161424             :           work implemented by Andreas, and support tools such as the AST graph generation.
  161425             : 
  161426             :           \warning This function can return unexpected data members and thus the 
  161427             :                    order and the number of elements is unpredicable and subject 
  161428             :                    to change.
  161429             : 
  161430             :           \returns STL vector of pairs of SgNode* and strings
  161431             :        */
  161432             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  161433             : 
  161434             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  161435             : 
  161436             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  161437             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  161438             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  161439             : 
  161440             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  161441             :                    and subject to change.
  161442             :        */
  161443             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  161444             : 
  161445             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  161446             : 
  161447             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  161448             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  161449             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  161450             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  161451             : 
  161452             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  161453             : 
  161454             :           \returns long
  161455             :        */
  161456             :           virtual long getChildIndex( SgNode* childNode ) const override;
  161457             : 
  161458             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  161459             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161460             :       /* \brief Constructor for use by AST File I/O Mechanism
  161461             : 
  161462             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  161463             :           which obtained via fast binary file I/O from disk.
  161464             :        */
  161465             :        // SgEntryStatement( SgEntryStatementStorageClass& source );
  161466             : 
  161467             : 
  161468             : 
  161469             : 
  161470             : 
  161471             :  // JH (10/24/2005): methods added to support the ast file IO
  161472             :     private:
  161473             : 
  161474             :       /* name AST Memory Allocation Support Functions
  161475             :           \brief Memory allocations support....
  161476             : 
  161477             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  161478             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  161479             :           and support the AST File I/O Mechanism.
  161480             :        */
  161481             :       /* */
  161482             : 
  161483             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  161484             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  161485             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  161486             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  161487             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  161488             :           a correspinding one in the AST_FILE_IO class!
  161489             :        */
  161490             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  161491             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161492             :       /* \brief Typedef used for low level memory access.
  161493             :        */
  161494             :        // typedef unsigned char* TestType;
  161495             : 
  161496             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  161497             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161498             :       /* \brief Typedef used to hold memory addresses as values.
  161499             :        */
  161500             :        // typedef unsigned long  AddressType;
  161501             : 
  161502             : 
  161503             : 
  161504             :        // necessary, to have direct access to the p_freepointer and the private methods !
  161505             :       /*! \brief friend class declaration to support AST File I/O */
  161506             :           friend class AST_FILE_IO;
  161507             : 
  161508             :       /*! \brief friend class declaration to support AST File I/O */
  161509             :           friend class SgEntryStatementStorageClass;
  161510             : 
  161511             :       /*! \brief friend class declaration to support AST File I/O */
  161512             :           friend class AstSpecificDataManagingClass;
  161513             : 
  161514             :       /*! \brief friend class declaration to support AST File I/O */
  161515             :           friend class AstSpecificDataManagingClassStorageClass;
  161516             :     public:
  161517             :       /*! \brief IR node constructor to support AST File I/O */
  161518             :           SgEntryStatement( const SgEntryStatementStorageClass& source );
  161519             : 
  161520             :  // private: // JJW hack
  161521             :        /*
  161522             :           name AST Memory Allocation Support Variables
  161523             :           Memory allocations support variables 
  161524             : 
  161525             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  161526             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  161527             :           and support the AST File I/O Mechanism.
  161528             :        */
  161529             :       /* */
  161530             : 
  161531             :     public:
  161532             : 
  161533             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  161534             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  161535             :       // virtual SgNode* addRegExpAttribute();
  161536             :       /*! \brief Support for AST matching using regular expression.
  161537             : 
  161538             :           This support is incomplete and the subject of current research to define 
  161539             :           RegEx trees to support inexact matching.
  161540             :        */
  161541             :           SgEntryStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  161542             : 
  161543             : // *** COMMON CODE SECTION ENDS HERE ***
  161544             : 
  161545             : 
  161546             : // End of memberFunctionString
  161547             : // Start of memberFunctionString
  161548             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  161549             : 
  161550             :      // the generated cast function
  161551             :      // friend ROSE_DLL_API SgEntryStatement* isSgEntryStatement ( SgNode* s );
  161552             : 
  161553             :           typedef SgFunctionDeclaration base_node_type;
  161554             : 
  161555             : 
  161556             : // End of memberFunctionString
  161557             : // Start of memberFunctionString
  161558             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  161559             : 
  161560             :           void post_construction_initialization() override;
  161561             : 
  161562             : 
  161563             : // End of memberFunctionString
  161564             : 
  161565             :      public: 
  161566             :          SgInitializedName* get_result_name() const;
  161567             :          void set_result_name(SgInitializedName* result_name);
  161568             : 
  161569             : 
  161570             :      public: 
  161571             :          virtual ~SgEntryStatement();
  161572             : 
  161573             : 
  161574             :      public: 
  161575             :          SgEntryStatement(Sg_File_Info* startOfConstruct , SgName name = "", SgFunctionType* type = NULL, SgFunctionDefinition* definition = NULL); 
  161576             :          SgEntryStatement(SgName name, SgFunctionType* type, SgFunctionDefinition* definition); 
  161577             : 
  161578             :     protected:
  161579             : // Start of memberFunctionString
  161580             : SgInitializedName* p_result_name;
  161581             :           
  161582             : // End of memberFunctionString
  161583             : 
  161584             :     friend struct Rose::Traits::generated::describe_node_t<SgEntryStatement>;
  161585             :     friend struct Rose::Traits::generated::describe_field_t<SgEntryStatement, SgInitializedName*,&SgEntryStatement::p_result_name>;
  161586             : 
  161587             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161588             : 
  161589             : 
  161590             :    };
  161591             : #endif
  161592             : 
  161593             : // postdeclarations for SgEntryStatement
  161594             : 
  161595             : /* #line 161596 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161596             : 
  161597             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  161598             : 
  161599             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161600             : 
  161601             : 
  161602             : /* #line 161603 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161603             : 
  161604             : 
  161605             : 
  161606             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161607             : 
  161608             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  161609             : //      This code is automatically generated for each 
  161610             : //      terminal and non-terminal within the defined 
  161611             : //      grammar.  There is a simple way to change the 
  161612             : //      code to fix bugs etc.  See the ROSE README file
  161613             : //      for directions.
  161614             : 
  161615             : // tps: (02/22/2010): Adding DLL export requirements
  161616             : #include "rosedll.h"
  161617             : 
  161618             : // predeclarations for SgContainsStatement
  161619             : 
  161620             : /* #line 161621 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161621             : 
  161622             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  161623             : 
  161624             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  161625             : 
  161626             : #if 1
  161627             : // Class Definition for SgContainsStatement
  161628             : class ROSE_DLL_API SgContainsStatement  : public SgDeclarationStatement
  161629             :    {
  161630             :      public:
  161631             : 
  161632             : 
  161633             : /* #line 161634 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  161634             : 
  161635             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  161636             : // Start of memberFunctionString
  161637             : /* #line 3383 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  161638             : 
  161639             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  161640             :           virtual unsigned int cfgIndexForEnd() const override;
  161641             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  161642             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  161643             : #endif
  161644             : 
  161645             :           virtual SgName get_mangled_name() const override;
  161646             : 
  161647             : 
  161648             : // End of memberFunctionString
  161649             : // Start of memberFunctionString
  161650             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  161651             : 
  161652             : // *** COMMON CODE SECTION BEGINS HERE ***
  161653             : 
  161654             :     public:
  161655             : 
  161656             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  161657             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  161658             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  161659             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  161660             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  161661             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  161662             : 
  161663             :       /*! \brief returns a string representing the class name */
  161664             :           virtual std::string class_name() const override;
  161665             : 
  161666             :       /*! \brief returns new style SageIII enum values */
  161667             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  161668             : 
  161669             :       /*! \brief static variant value */
  161670             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  161671             :        // static const VariantT static_variant = V_SgContainsStatement;
  161672             :           enum { static_variant = V_SgContainsStatement };
  161673             : 
  161674             :        /* the generated cast function */
  161675             :       /*! \brief Casts pointer from base class to derived class */
  161676             :           ROSE_DLL_API friend       SgContainsStatement* isSgContainsStatement(       SgNode * s );
  161677             : 
  161678             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  161679             :           ROSE_DLL_API friend const SgContainsStatement* isSgContainsStatement( const SgNode * s );
  161680             : 
  161681             :      // ******************************************
  161682             :      // * Memory Pool / New / Delete
  161683             :      // ******************************************
  161684             : 
  161685             :      public:
  161686             :           /// \private
  161687             :           static const unsigned pool_size; //
  161688             :           /// \private
  161689             :           static std::vector<unsigned char *> pools; //
  161690             :           /// \private
  161691             :           static SgContainsStatement * next_node; // 
  161692             : 
  161693             :           /// \private
  161694             :           static unsigned long initializeStorageClassArray(SgContainsStatementStorageClass *); //
  161695             : 
  161696             :           /// \private
  161697             :           static void clearMemoryPool(); //
  161698             :           static void deleteMemoryPool(); //
  161699             : 
  161700             :           /// \private
  161701             :           static void extendMemoryPoolForFileIO(); //
  161702             : 
  161703             :           /// \private
  161704             :           static SgContainsStatement * getPointerFromGlobalIndex(unsigned long); //
  161705             :           /// \private
  161706             :           static SgContainsStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  161707             : 
  161708             :           /// \private
  161709             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  161710             :           /// \private
  161711             :           static void resetValidFreepointers(); //
  161712             :           /// \private
  161713             :           static unsigned long getNumberOfLastValidPointer(); //
  161714             : 
  161715             : 
  161716             : #if defined(INLINE_FUNCTIONS)
  161717             :       /*! \brief returns pointer to newly allocated IR node */
  161718             :           inline void *operator new (size_t size);
  161719             : #else
  161720             :       /*! \brief returns pointer to newly allocated IR node */
  161721             :           void *operator new (size_t size);
  161722             : #endif
  161723             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  161724             :           void operator delete (void* pointer, size_t size);
  161725             : 
  161726             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  161727           0 :           void operator delete (void* pointer)
  161728             :              {
  161729             :             // This is the generated delete operator...
  161730           0 :                SgContainsStatement::operator delete (pointer,sizeof(SgContainsStatement));
  161731             :              }
  161732             : 
  161733             :       /*! \brief Returns the total number of IR nodes of this type */
  161734             :           static size_t numberOfNodes();
  161735             : 
  161736             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  161737             :           static size_t memoryUsage();
  161738             : 
  161739             :       // End of scope which started in IR nodes specific code 
  161740             :       /* */
  161741             : 
  161742             :       /* name Internal Functions
  161743             :           \brief Internal functions ... incomplete-documentation
  161744             : 
  161745             :           These functions have been made public as part of the design, but they are suggested for internal use 
  161746             :           or by particularly knowledgeable users for specialized tools or applications.
  161747             : 
  161748             :           \internal We could not make these private because they are required by user for special purposes. And 
  161749             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  161750             :          
  161751             :        */
  161752             : 
  161753             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  161754             :        // overridden in every class by *generated* implementation
  161755             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  161756             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  161757             :        // MS: 06/28/02 container of names of variables or container indices 
  161758             :        // used used in the traversal to access AST successor nodes
  161759             :        // overridden in every class by *generated* implementation
  161760             :       /*! \brief container of names of variables or container indices used used in the traversal
  161761             :           to access AST successor nodes overridden in every class by *generated* implementation */
  161762             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  161763             : 
  161764             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  161765             :        // than all the vector copies. The implementation for these functions is generated for each class.
  161766             :       /*! \brief return number of children in the traversal successor list */
  161767             :           virtual size_t get_numberOfTraversalSuccessors() override;
  161768             :       /*! \brief index-based access to traversal successors by index number */
  161769             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  161770             :       /*! \brief index-based access to traversal successors by child node */
  161771             :           virtual size_t get_childIndex(SgNode *child) override;
  161772             : 
  161773             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  161774             :        // MS: 08/16/2002 method for generating RTI information
  161775             :       /*! \brief return C++ Runtime-Time-Information */
  161776             :           virtual RTIReturnType roseRTI() override;
  161777             : #endif
  161778             :       /* */
  161779             : 
  161780             : 
  161781             : 
  161782             :       /* name Deprecated Functions
  161783             :           \brief Deprecated functions ... incomplete-documentation
  161784             : 
  161785             :           These functions have been deprecated from use.
  161786             :        */
  161787             :       /* */
  161788             : 
  161789             :       /*! returns a C style string (char*) representing the class name */
  161790             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  161791             : 
  161792             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  161793             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  161794             : #if 0
  161795             :       /*! returns old style Sage II enum values */
  161796             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  161797             :       /*! returns old style Sage II enum values */
  161798             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  161799             : #endif
  161800             :       /* */
  161801             : 
  161802             : 
  161803             : 
  161804             : 
  161805             :      public:
  161806             :       /* name Traversal Support Functions
  161807             :           \brief Traversal support functions ... incomplete-documentation
  161808             : 
  161809             :           These functions have been made public as part of the design, but they are suggested for internal use 
  161810             :           or by particularly knowledgable users for specialized tools or applications.
  161811             :        */
  161812             :       /* */
  161813             : 
  161814             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  161815             :        // (inferior to ROSE traversal mechanism, experimental).
  161816             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  161817             :        */
  161818             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  161819             : 
  161820             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  161821             :       /*! \brief support for the classic visitor pattern done in GoF */
  161822             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  161823             : 
  161824             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  161825             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  161826             :        */
  161827             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  161828             : 
  161829             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  161830             :        */
  161831             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  161832             : 
  161833             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  161834             :        // This traversal helps support internal tools that call static member functions.
  161835             :        // note: this function operates on the memory pools.
  161836             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  161837             :        */
  161838             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  161839             :       /* */
  161840             : 
  161841             : 
  161842             :      public:
  161843             :       /* name Memory Allocation Functions
  161844             :           \brief Memory allocations functions ... incomplete-documentation
  161845             : 
  161846             :           These functions have been made public as part of the design, but they are suggested for internal use 
  161847             :           or by particularly knowledgable users for specialized tools or applications.
  161848             :        */
  161849             :       /* */
  161850             : 
  161851             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  161852             : 
  161853             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  161854             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  161855             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  161856             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  161857             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  161858             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  161859             :           being used with the AST File I/O mechanism.
  161860             :        */
  161861             :           virtual bool isInMemoryPool() override;
  161862             : 
  161863             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  161864             : 
  161865             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  161866             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  161867             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  161868             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  161869             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  161870             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  161871             :           being used with the AST File I/O mechanism.
  161872             :        */
  161873             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  161874             : 
  161875             :       // DQ (4/30/2006): Modified to be a const function.
  161876             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  161877             : 
  161878             :           This functions is part of general support for many possible tools to operate 
  161879             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  161880             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  161881             :           less than the set of pointers used by the AST file I/O. This is part of
  161882             :           work implemented by Andreas, and support tools such as the AST graph generation.
  161883             : 
  161884             :           \warning This function can return unexpected data members and thus the 
  161885             :                    order and the number of elements is unpredicable and subject 
  161886             :                    to change.
  161887             : 
  161888             :           \returns STL vector of pairs of SgNode* and strings
  161889             :        */
  161890             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  161891             : 
  161892             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  161893             : 
  161894             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  161895             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  161896             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  161897             : 
  161898             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  161899             :                    and subject to change.
  161900             :        */
  161901             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  161902             : 
  161903             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  161904             : 
  161905             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  161906             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  161907             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  161908             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  161909             : 
  161910             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  161911             : 
  161912             :           \returns long
  161913             :        */
  161914             :           virtual long getChildIndex( SgNode* childNode ) const override;
  161915             : 
  161916             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  161917             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161918             :       /* \brief Constructor for use by AST File I/O Mechanism
  161919             : 
  161920             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  161921             :           which obtained via fast binary file I/O from disk.
  161922             :        */
  161923             :        // SgContainsStatement( SgContainsStatementStorageClass& source );
  161924             : 
  161925             : 
  161926             : 
  161927             : 
  161928             : 
  161929             :  // JH (10/24/2005): methods added to support the ast file IO
  161930             :     private:
  161931             : 
  161932             :       /* name AST Memory Allocation Support Functions
  161933             :           \brief Memory allocations support....
  161934             : 
  161935             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  161936             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  161937             :           and support the AST File I/O Mechanism.
  161938             :        */
  161939             :       /* */
  161940             : 
  161941             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  161942             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  161943             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  161944             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  161945             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  161946             :           a correspinding one in the AST_FILE_IO class!
  161947             :        */
  161948             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  161949             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161950             :       /* \brief Typedef used for low level memory access.
  161951             :        */
  161952             :        // typedef unsigned char* TestType;
  161953             : 
  161954             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  161955             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  161956             :       /* \brief Typedef used to hold memory addresses as values.
  161957             :        */
  161958             :        // typedef unsigned long  AddressType;
  161959             : 
  161960             : 
  161961             : 
  161962             :        // necessary, to have direct access to the p_freepointer and the private methods !
  161963             :       /*! \brief friend class declaration to support AST File I/O */
  161964             :           friend class AST_FILE_IO;
  161965             : 
  161966             :       /*! \brief friend class declaration to support AST File I/O */
  161967             :           friend class SgContainsStatementStorageClass;
  161968             : 
  161969             :       /*! \brief friend class declaration to support AST File I/O */
  161970             :           friend class AstSpecificDataManagingClass;
  161971             : 
  161972             :       /*! \brief friend class declaration to support AST File I/O */
  161973             :           friend class AstSpecificDataManagingClassStorageClass;
  161974             :     public:
  161975             :       /*! \brief IR node constructor to support AST File I/O */
  161976             :           SgContainsStatement( const SgContainsStatementStorageClass& source );
  161977             : 
  161978             :  // private: // JJW hack
  161979             :        /*
  161980             :           name AST Memory Allocation Support Variables
  161981             :           Memory allocations support variables 
  161982             : 
  161983             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  161984             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  161985             :           and support the AST File I/O Mechanism.
  161986             :        */
  161987             :       /* */
  161988             : 
  161989             :     public:
  161990             : 
  161991             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  161992             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  161993             :       // virtual SgNode* addRegExpAttribute();
  161994             :       /*! \brief Support for AST matching using regular expression.
  161995             : 
  161996             :           This support is incomplete and the subject of current research to define 
  161997             :           RegEx trees to support inexact matching.
  161998             :        */
  161999             :           SgContainsStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  162000             : 
  162001             : // *** COMMON CODE SECTION ENDS HERE ***
  162002             : 
  162003             : 
  162004             : // End of memberFunctionString
  162005             : // Start of memberFunctionString
  162006             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  162007             : 
  162008             :      // the generated cast function
  162009             :      // friend ROSE_DLL_API SgContainsStatement* isSgContainsStatement ( SgNode* s );
  162010             : 
  162011             :           typedef SgDeclarationStatement base_node_type;
  162012             : 
  162013             : 
  162014             : // End of memberFunctionString
  162015             : // Start of memberFunctionString
  162016             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  162017             : 
  162018             :           void post_construction_initialization() override;
  162019             : 
  162020             : 
  162021             : // End of memberFunctionString
  162022             : 
  162023             : 
  162024             :      public: 
  162025             :          virtual ~SgContainsStatement();
  162026             : 
  162027             : 
  162028             :      public: 
  162029             :          SgContainsStatement(Sg_File_Info* startOfConstruct ); 
  162030             :          SgContainsStatement(); 
  162031             : 
  162032             :     protected:
  162033             : 
  162034             :     friend struct Rose::Traits::generated::describe_node_t<SgContainsStatement>;
  162035             : 
  162036             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162037             : 
  162038             : 
  162039             :    };
  162040             : #endif
  162041             : 
  162042             : // postdeclarations for SgContainsStatement
  162043             : 
  162044             : /* #line 162045 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162045             : 
  162046             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  162047             : 
  162048             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162049             : 
  162050             : 
  162051             : /* #line 162052 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162052             : 
  162053             : 
  162054             : 
  162055             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162056             : 
  162057             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  162058             : //      This code is automatically generated for each 
  162059             : //      terminal and non-terminal within the defined 
  162060             : //      grammar.  There is a simple way to change the 
  162061             : //      code to fix bugs etc.  See the ROSE README file
  162062             : //      for directions.
  162063             : 
  162064             : // tps: (02/22/2010): Adding DLL export requirements
  162065             : #include "rosedll.h"
  162066             : 
  162067             : // predeclarations for SgC_PreprocessorDirectiveStatement
  162068             : 
  162069             : /* #line 162070 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162070             : 
  162071             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  162072             : 
  162073             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162074             : 
  162075             : #if 1
  162076             : // Class Definition for SgC_PreprocessorDirectiveStatement
  162077             : class ROSE_DLL_API SgC_PreprocessorDirectiveStatement  : public SgDeclarationStatement
  162078             :    {
  162079             :      public:
  162080             : 
  162081             : 
  162082             : /* #line 162083 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162083             : 
  162084             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  162085             : // Start of memberFunctionString
  162086             : /* #line 3903 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  162087             : 
  162088             : 
  162089             :        // DQ (11/23/2008): I think this is defined in the base class so we can't redefine it here.
  162090             :        // void post_construction_initialization();
  162091             : 
  162092             :           static SgC_PreprocessorDirectiveStatement* createDirective ( PreprocessingInfo* currentPreprocessingInfo );
  162093             : 
  162094             :        // DQ (11/29/2008): Added for uniform support of mangled names
  162095             :           virtual SgName get_mangled_name() const override;
  162096             : 
  162097             : 
  162098             : 
  162099             : // End of memberFunctionString
  162100             : // Start of memberFunctionString
  162101             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  162102             : 
  162103             : // *** COMMON CODE SECTION BEGINS HERE ***
  162104             : 
  162105             :     public:
  162106             : 
  162107             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  162108             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  162109             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  162110             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  162111             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  162112             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  162113             : 
  162114             :       /*! \brief returns a string representing the class name */
  162115             :           virtual std::string class_name() const override;
  162116             : 
  162117             :       /*! \brief returns new style SageIII enum values */
  162118             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  162119             : 
  162120             :       /*! \brief static variant value */
  162121             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  162122             :        // static const VariantT static_variant = V_SgC_PreprocessorDirectiveStatement;
  162123             :           enum { static_variant = V_SgC_PreprocessorDirectiveStatement };
  162124             : 
  162125             :        /* the generated cast function */
  162126             :       /*! \brief Casts pointer from base class to derived class */
  162127             :           ROSE_DLL_API friend       SgC_PreprocessorDirectiveStatement* isSgC_PreprocessorDirectiveStatement(       SgNode * s );
  162128             : 
  162129             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  162130             :           ROSE_DLL_API friend const SgC_PreprocessorDirectiveStatement* isSgC_PreprocessorDirectiveStatement( const SgNode * s );
  162131             : 
  162132             :      // ******************************************
  162133             :      // * Memory Pool / New / Delete
  162134             :      // ******************************************
  162135             : 
  162136             :      public:
  162137             :           /// \private
  162138             :           static const unsigned pool_size; //
  162139             :           /// \private
  162140             :           static std::vector<unsigned char *> pools; //
  162141             :           /// \private
  162142             :           static SgC_PreprocessorDirectiveStatement * next_node; // 
  162143             : 
  162144             :           /// \private
  162145             :           static unsigned long initializeStorageClassArray(SgC_PreprocessorDirectiveStatementStorageClass *); //
  162146             : 
  162147             :           /// \private
  162148             :           static void clearMemoryPool(); //
  162149             :           static void deleteMemoryPool(); //
  162150             : 
  162151             :           /// \private
  162152             :           static void extendMemoryPoolForFileIO(); //
  162153             : 
  162154             :           /// \private
  162155             :           static SgC_PreprocessorDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  162156             :           /// \private
  162157             :           static SgC_PreprocessorDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  162158             : 
  162159             :           /// \private
  162160             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  162161             :           /// \private
  162162             :           static void resetValidFreepointers(); //
  162163             :           /// \private
  162164             :           static unsigned long getNumberOfLastValidPointer(); //
  162165             : 
  162166             : 
  162167             : #if defined(INLINE_FUNCTIONS)
  162168             :       /*! \brief returns pointer to newly allocated IR node */
  162169             :           inline void *operator new (size_t size);
  162170             : #else
  162171             :       /*! \brief returns pointer to newly allocated IR node */
  162172             :           void *operator new (size_t size);
  162173             : #endif
  162174             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  162175             :           void operator delete (void* pointer, size_t size);
  162176             : 
  162177             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  162178           0 :           void operator delete (void* pointer)
  162179             :              {
  162180             :             // This is the generated delete operator...
  162181           0 :                SgC_PreprocessorDirectiveStatement::operator delete (pointer,sizeof(SgC_PreprocessorDirectiveStatement));
  162182             :              }
  162183             : 
  162184             :       /*! \brief Returns the total number of IR nodes of this type */
  162185             :           static size_t numberOfNodes();
  162186             : 
  162187             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  162188             :           static size_t memoryUsage();
  162189             : 
  162190             :       // End of scope which started in IR nodes specific code 
  162191             :       /* */
  162192             : 
  162193             :       /* name Internal Functions
  162194             :           \brief Internal functions ... incomplete-documentation
  162195             : 
  162196             :           These functions have been made public as part of the design, but they are suggested for internal use 
  162197             :           or by particularly knowledgeable users for specialized tools or applications.
  162198             : 
  162199             :           \internal We could not make these private because they are required by user for special purposes. And 
  162200             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  162201             :          
  162202             :        */
  162203             : 
  162204             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  162205             :        // overridden in every class by *generated* implementation
  162206             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  162207             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  162208             :        // MS: 06/28/02 container of names of variables or container indices 
  162209             :        // used used in the traversal to access AST successor nodes
  162210             :        // overridden in every class by *generated* implementation
  162211             :       /*! \brief container of names of variables or container indices used used in the traversal
  162212             :           to access AST successor nodes overridden in every class by *generated* implementation */
  162213             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  162214             : 
  162215             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  162216             :        // than all the vector copies. The implementation for these functions is generated for each class.
  162217             :       /*! \brief return number of children in the traversal successor list */
  162218             :           virtual size_t get_numberOfTraversalSuccessors() override;
  162219             :       /*! \brief index-based access to traversal successors by index number */
  162220             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  162221             :       /*! \brief index-based access to traversal successors by child node */
  162222             :           virtual size_t get_childIndex(SgNode *child) override;
  162223             : 
  162224             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  162225             :        // MS: 08/16/2002 method for generating RTI information
  162226             :       /*! \brief return C++ Runtime-Time-Information */
  162227             :           virtual RTIReturnType roseRTI() override;
  162228             : #endif
  162229             :       /* */
  162230             : 
  162231             : 
  162232             : 
  162233             :       /* name Deprecated Functions
  162234             :           \brief Deprecated functions ... incomplete-documentation
  162235             : 
  162236             :           These functions have been deprecated from use.
  162237             :        */
  162238             :       /* */
  162239             : 
  162240             :       /*! returns a C style string (char*) representing the class name */
  162241             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  162242             : 
  162243             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  162244             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  162245             : #if 0
  162246             :       /*! returns old style Sage II enum values */
  162247             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  162248             :       /*! returns old style Sage II enum values */
  162249             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  162250             : #endif
  162251             :       /* */
  162252             : 
  162253             : 
  162254             : 
  162255             : 
  162256             :      public:
  162257             :       /* name Traversal Support Functions
  162258             :           \brief Traversal support functions ... incomplete-documentation
  162259             : 
  162260             :           These functions have been made public as part of the design, but they are suggested for internal use 
  162261             :           or by particularly knowledgable users for specialized tools or applications.
  162262             :        */
  162263             :       /* */
  162264             : 
  162265             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  162266             :        // (inferior to ROSE traversal mechanism, experimental).
  162267             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  162268             :        */
  162269             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  162270             : 
  162271             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  162272             :       /*! \brief support for the classic visitor pattern done in GoF */
  162273             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  162274             : 
  162275             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  162276             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  162277             :        */
  162278             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  162279             : 
  162280             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  162281             :        */
  162282             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  162283             : 
  162284             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  162285             :        // This traversal helps support internal tools that call static member functions.
  162286             :        // note: this function operates on the memory pools.
  162287             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  162288             :        */
  162289             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  162290             :       /* */
  162291             : 
  162292             : 
  162293             :      public:
  162294             :       /* name Memory Allocation Functions
  162295             :           \brief Memory allocations functions ... incomplete-documentation
  162296             : 
  162297             :           These functions have been made public as part of the design, but they are suggested for internal use 
  162298             :           or by particularly knowledgable users for specialized tools or applications.
  162299             :        */
  162300             :       /* */
  162301             : 
  162302             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  162303             : 
  162304             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  162305             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  162306             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  162307             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  162308             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  162309             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  162310             :           being used with the AST File I/O mechanism.
  162311             :        */
  162312             :           virtual bool isInMemoryPool() override;
  162313             : 
  162314             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  162315             : 
  162316             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  162317             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  162318             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  162319             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  162320             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  162321             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  162322             :           being used with the AST File I/O mechanism.
  162323             :        */
  162324             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  162325             : 
  162326             :       // DQ (4/30/2006): Modified to be a const function.
  162327             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  162328             : 
  162329             :           This functions is part of general support for many possible tools to operate 
  162330             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  162331             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  162332             :           less than the set of pointers used by the AST file I/O. This is part of
  162333             :           work implemented by Andreas, and support tools such as the AST graph generation.
  162334             : 
  162335             :           \warning This function can return unexpected data members and thus the 
  162336             :                    order and the number of elements is unpredicable and subject 
  162337             :                    to change.
  162338             : 
  162339             :           \returns STL vector of pairs of SgNode* and strings
  162340             :        */
  162341             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  162342             : 
  162343             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  162344             : 
  162345             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  162346             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  162347             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  162348             : 
  162349             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  162350             :                    and subject to change.
  162351             :        */
  162352             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  162353             : 
  162354             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  162355             : 
  162356             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  162357             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  162358             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  162359             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  162360             : 
  162361             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  162362             : 
  162363             :           \returns long
  162364             :        */
  162365             :           virtual long getChildIndex( SgNode* childNode ) const override;
  162366             : 
  162367             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  162368             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  162369             :       /* \brief Constructor for use by AST File I/O Mechanism
  162370             : 
  162371             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  162372             :           which obtained via fast binary file I/O from disk.
  162373             :        */
  162374             :        // SgC_PreprocessorDirectiveStatement( SgC_PreprocessorDirectiveStatementStorageClass& source );
  162375             : 
  162376             : 
  162377             : 
  162378             : 
  162379             : 
  162380             :  // JH (10/24/2005): methods added to support the ast file IO
  162381             :     private:
  162382             : 
  162383             :       /* name AST Memory Allocation Support Functions
  162384             :           \brief Memory allocations support....
  162385             : 
  162386             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  162387             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  162388             :           and support the AST File I/O Mechanism.
  162389             :        */
  162390             :       /* */
  162391             : 
  162392             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  162393             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  162394             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  162395             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  162396             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  162397             :           a correspinding one in the AST_FILE_IO class!
  162398             :        */
  162399             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  162400             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  162401             :       /* \brief Typedef used for low level memory access.
  162402             :        */
  162403             :        // typedef unsigned char* TestType;
  162404             : 
  162405             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  162406             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  162407             :       /* \brief Typedef used to hold memory addresses as values.
  162408             :        */
  162409             :        // typedef unsigned long  AddressType;
  162410             : 
  162411             : 
  162412             : 
  162413             :        // necessary, to have direct access to the p_freepointer and the private methods !
  162414             :       /*! \brief friend class declaration to support AST File I/O */
  162415             :           friend class AST_FILE_IO;
  162416             : 
  162417             :       /*! \brief friend class declaration to support AST File I/O */
  162418             :           friend class SgC_PreprocessorDirectiveStatementStorageClass;
  162419             : 
  162420             :       /*! \brief friend class declaration to support AST File I/O */
  162421             :           friend class AstSpecificDataManagingClass;
  162422             : 
  162423             :       /*! \brief friend class declaration to support AST File I/O */
  162424             :           friend class AstSpecificDataManagingClassStorageClass;
  162425             :     public:
  162426             :       /*! \brief IR node constructor to support AST File I/O */
  162427             :           SgC_PreprocessorDirectiveStatement( const SgC_PreprocessorDirectiveStatementStorageClass& source );
  162428             : 
  162429             :  // private: // JJW hack
  162430             :        /*
  162431             :           name AST Memory Allocation Support Variables
  162432             :           Memory allocations support variables 
  162433             : 
  162434             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  162435             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  162436             :           and support the AST File I/O Mechanism.
  162437             :        */
  162438             :       /* */
  162439             : 
  162440             :     public:
  162441             : 
  162442             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  162443             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  162444             :       // virtual SgNode* addRegExpAttribute();
  162445             :       /*! \brief Support for AST matching using regular expression.
  162446             : 
  162447             :           This support is incomplete and the subject of current research to define 
  162448             :           RegEx trees to support inexact matching.
  162449             :        */
  162450             :           SgC_PreprocessorDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  162451             : 
  162452             : // *** COMMON CODE SECTION ENDS HERE ***
  162453             : 
  162454             : 
  162455             : // End of memberFunctionString
  162456             : // Start of memberFunctionString
  162457             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  162458             : 
  162459             :      // the generated cast function
  162460             :      // friend ROSE_DLL_API SgC_PreprocessorDirectiveStatement* isSgC_PreprocessorDirectiveStatement ( SgNode* s );
  162461             : 
  162462             :           typedef SgDeclarationStatement base_node_type;
  162463             : 
  162464             : 
  162465             : // End of memberFunctionString
  162466             : // Start of memberFunctionString
  162467             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  162468             : 
  162469             :           void post_construction_initialization() override;
  162470             : 
  162471             : 
  162472             : // End of memberFunctionString
  162473             : 
  162474             :      public: 
  162475             :          std::string get_directiveString() const;
  162476             :          void set_directiveString(std::string directiveString);
  162477             : 
  162478             : 
  162479             :      public: 
  162480             :          virtual ~SgC_PreprocessorDirectiveStatement();
  162481             : 
  162482             : 
  162483             :      public: 
  162484             :          SgC_PreprocessorDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  162485             :          SgC_PreprocessorDirectiveStatement(); 
  162486             : 
  162487             :     protected:
  162488             : // Start of memberFunctionString
  162489             : std::string p_directiveString;
  162490             :           
  162491             : // End of memberFunctionString
  162492             : 
  162493             :     friend struct Rose::Traits::generated::describe_node_t<SgC_PreprocessorDirectiveStatement>;
  162494             :     friend struct Rose::Traits::generated::describe_field_t<SgC_PreprocessorDirectiveStatement, std::string,&SgC_PreprocessorDirectiveStatement::p_directiveString>;
  162495             : 
  162496             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162497             : 
  162498             : 
  162499             :    };
  162500             : #endif
  162501             : 
  162502             : // postdeclarations for SgC_PreprocessorDirectiveStatement
  162503             : 
  162504             : /* #line 162505 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162505             : 
  162506             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  162507             : 
  162508             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162509             : 
  162510             : 
  162511             : /* #line 162512 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162512             : 
  162513             : 
  162514             : 
  162515             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162516             : 
  162517             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  162518             : //      This code is automatically generated for each 
  162519             : //      terminal and non-terminal within the defined 
  162520             : //      grammar.  There is a simple way to change the 
  162521             : //      code to fix bugs etc.  See the ROSE README file
  162522             : //      for directions.
  162523             : 
  162524             : // tps: (02/22/2010): Adding DLL export requirements
  162525             : #include "rosedll.h"
  162526             : 
  162527             : // predeclarations for SgIncludeDirectiveStatement
  162528             : 
  162529             : /* #line 162530 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162530             : 
  162531             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  162532             : 
  162533             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162534             : 
  162535             : #if 1
  162536             : // Class Definition for SgIncludeDirectiveStatement
  162537             : class ROSE_DLL_API SgIncludeDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  162538             :    {
  162539             :      public:
  162540             : 
  162541             : 
  162542             : /* #line 162543 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162543             : 
  162544             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  162545             : // Start of memberFunctionString
  162546             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  162547             : 
  162548             : // *** COMMON CODE SECTION BEGINS HERE ***
  162549             : 
  162550             :     public:
  162551             : 
  162552             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  162553             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  162554             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  162555             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  162556             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  162557             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  162558             : 
  162559             :       /*! \brief returns a string representing the class name */
  162560             :           virtual std::string class_name() const override;
  162561             : 
  162562             :       /*! \brief returns new style SageIII enum values */
  162563             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  162564             : 
  162565             :       /*! \brief static variant value */
  162566             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  162567             :        // static const VariantT static_variant = V_SgIncludeDirectiveStatement;
  162568             :           enum { static_variant = V_SgIncludeDirectiveStatement };
  162569             : 
  162570             :        /* the generated cast function */
  162571             :       /*! \brief Casts pointer from base class to derived class */
  162572             :           ROSE_DLL_API friend       SgIncludeDirectiveStatement* isSgIncludeDirectiveStatement(       SgNode * s );
  162573             : 
  162574             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  162575             :           ROSE_DLL_API friend const SgIncludeDirectiveStatement* isSgIncludeDirectiveStatement( const SgNode * s );
  162576             : 
  162577             :      // ******************************************
  162578             :      // * Memory Pool / New / Delete
  162579             :      // ******************************************
  162580             : 
  162581             :      public:
  162582             :           /// \private
  162583             :           static const unsigned pool_size; //
  162584             :           /// \private
  162585             :           static std::vector<unsigned char *> pools; //
  162586             :           /// \private
  162587             :           static SgIncludeDirectiveStatement * next_node; // 
  162588             : 
  162589             :           /// \private
  162590             :           static unsigned long initializeStorageClassArray(SgIncludeDirectiveStatementStorageClass *); //
  162591             : 
  162592             :           /// \private
  162593             :           static void clearMemoryPool(); //
  162594             :           static void deleteMemoryPool(); //
  162595             : 
  162596             :           /// \private
  162597             :           static void extendMemoryPoolForFileIO(); //
  162598             : 
  162599             :           /// \private
  162600             :           static SgIncludeDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  162601             :           /// \private
  162602             :           static SgIncludeDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  162603             : 
  162604             :           /// \private
  162605             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  162606             :           /// \private
  162607             :           static void resetValidFreepointers(); //
  162608             :           /// \private
  162609             :           static unsigned long getNumberOfLastValidPointer(); //
  162610             : 
  162611             : 
  162612             : #if defined(INLINE_FUNCTIONS)
  162613             :       /*! \brief returns pointer to newly allocated IR node */
  162614             :           inline void *operator new (size_t size);
  162615             : #else
  162616             :       /*! \brief returns pointer to newly allocated IR node */
  162617             :           void *operator new (size_t size);
  162618             : #endif
  162619             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  162620             :           void operator delete (void* pointer, size_t size);
  162621             : 
  162622             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  162623           0 :           void operator delete (void* pointer)
  162624             :              {
  162625             :             // This is the generated delete operator...
  162626           0 :                SgIncludeDirectiveStatement::operator delete (pointer,sizeof(SgIncludeDirectiveStatement));
  162627             :              }
  162628             : 
  162629             :       /*! \brief Returns the total number of IR nodes of this type */
  162630             :           static size_t numberOfNodes();
  162631             : 
  162632             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  162633             :           static size_t memoryUsage();
  162634             : 
  162635             :       // End of scope which started in IR nodes specific code 
  162636             :       /* */
  162637             : 
  162638             :       /* name Internal Functions
  162639             :           \brief Internal functions ... incomplete-documentation
  162640             : 
  162641             :           These functions have been made public as part of the design, but they are suggested for internal use 
  162642             :           or by particularly knowledgeable users for specialized tools or applications.
  162643             : 
  162644             :           \internal We could not make these private because they are required by user for special purposes. And 
  162645             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  162646             :          
  162647             :        */
  162648             : 
  162649             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  162650             :        // overridden in every class by *generated* implementation
  162651             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  162652             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  162653             :        // MS: 06/28/02 container of names of variables or container indices 
  162654             :        // used used in the traversal to access AST successor nodes
  162655             :        // overridden in every class by *generated* implementation
  162656             :       /*! \brief container of names of variables or container indices used used in the traversal
  162657             :           to access AST successor nodes overridden in every class by *generated* implementation */
  162658             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  162659             : 
  162660             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  162661             :        // than all the vector copies. The implementation for these functions is generated for each class.
  162662             :       /*! \brief return number of children in the traversal successor list */
  162663             :           virtual size_t get_numberOfTraversalSuccessors() override;
  162664             :       /*! \brief index-based access to traversal successors by index number */
  162665             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  162666             :       /*! \brief index-based access to traversal successors by child node */
  162667             :           virtual size_t get_childIndex(SgNode *child) override;
  162668             : 
  162669             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  162670             :        // MS: 08/16/2002 method for generating RTI information
  162671             :       /*! \brief return C++ Runtime-Time-Information */
  162672             :           virtual RTIReturnType roseRTI() override;
  162673             : #endif
  162674             :       /* */
  162675             : 
  162676             : 
  162677             : 
  162678             :       /* name Deprecated Functions
  162679             :           \brief Deprecated functions ... incomplete-documentation
  162680             : 
  162681             :           These functions have been deprecated from use.
  162682             :        */
  162683             :       /* */
  162684             : 
  162685             :       /*! returns a C style string (char*) representing the class name */
  162686             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  162687             : 
  162688             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  162689             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  162690             : #if 0
  162691             :       /*! returns old style Sage II enum values */
  162692             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  162693             :       /*! returns old style Sage II enum values */
  162694             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  162695             : #endif
  162696             :       /* */
  162697             : 
  162698             : 
  162699             : 
  162700             : 
  162701             :      public:
  162702             :       /* name Traversal Support Functions
  162703             :           \brief Traversal support functions ... incomplete-documentation
  162704             : 
  162705             :           These functions have been made public as part of the design, but they are suggested for internal use 
  162706             :           or by particularly knowledgable users for specialized tools or applications.
  162707             :        */
  162708             :       /* */
  162709             : 
  162710             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  162711             :        // (inferior to ROSE traversal mechanism, experimental).
  162712             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  162713             :        */
  162714             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  162715             : 
  162716             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  162717             :       /*! \brief support for the classic visitor pattern done in GoF */
  162718             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  162719             : 
  162720             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  162721             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  162722             :        */
  162723             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  162724             : 
  162725             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  162726             :        */
  162727             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  162728             : 
  162729             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  162730             :        // This traversal helps support internal tools that call static member functions.
  162731             :        // note: this function operates on the memory pools.
  162732             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  162733             :        */
  162734             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  162735             :       /* */
  162736             : 
  162737             : 
  162738             :      public:
  162739             :       /* name Memory Allocation Functions
  162740             :           \brief Memory allocations functions ... incomplete-documentation
  162741             : 
  162742             :           These functions have been made public as part of the design, but they are suggested for internal use 
  162743             :           or by particularly knowledgable users for specialized tools or applications.
  162744             :        */
  162745             :       /* */
  162746             : 
  162747             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  162748             : 
  162749             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  162750             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  162751             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  162752             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  162753             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  162754             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  162755             :           being used with the AST File I/O mechanism.
  162756             :        */
  162757             :           virtual bool isInMemoryPool() override;
  162758             : 
  162759             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  162760             : 
  162761             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  162762             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  162763             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  162764             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  162765             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  162766             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  162767             :           being used with the AST File I/O mechanism.
  162768             :        */
  162769             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  162770             : 
  162771             :       // DQ (4/30/2006): Modified to be a const function.
  162772             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  162773             : 
  162774             :           This functions is part of general support for many possible tools to operate 
  162775             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  162776             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  162777             :           less than the set of pointers used by the AST file I/O. This is part of
  162778             :           work implemented by Andreas, and support tools such as the AST graph generation.
  162779             : 
  162780             :           \warning This function can return unexpected data members and thus the 
  162781             :                    order and the number of elements is unpredicable and subject 
  162782             :                    to change.
  162783             : 
  162784             :           \returns STL vector of pairs of SgNode* and strings
  162785             :        */
  162786             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  162787             : 
  162788             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  162789             : 
  162790             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  162791             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  162792             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  162793             : 
  162794             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  162795             :                    and subject to change.
  162796             :        */
  162797             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  162798             : 
  162799             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  162800             : 
  162801             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  162802             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  162803             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  162804             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  162805             : 
  162806             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  162807             : 
  162808             :           \returns long
  162809             :        */
  162810             :           virtual long getChildIndex( SgNode* childNode ) const override;
  162811             : 
  162812             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  162813             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  162814             :       /* \brief Constructor for use by AST File I/O Mechanism
  162815             : 
  162816             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  162817             :           which obtained via fast binary file I/O from disk.
  162818             :        */
  162819             :        // SgIncludeDirectiveStatement( SgIncludeDirectiveStatementStorageClass& source );
  162820             : 
  162821             : 
  162822             : 
  162823             : 
  162824             : 
  162825             :  // JH (10/24/2005): methods added to support the ast file IO
  162826             :     private:
  162827             : 
  162828             :       /* name AST Memory Allocation Support Functions
  162829             :           \brief Memory allocations support....
  162830             : 
  162831             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  162832             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  162833             :           and support the AST File I/O Mechanism.
  162834             :        */
  162835             :       /* */
  162836             : 
  162837             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  162838             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  162839             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  162840             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  162841             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  162842             :           a correspinding one in the AST_FILE_IO class!
  162843             :        */
  162844             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  162845             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  162846             :       /* \brief Typedef used for low level memory access.
  162847             :        */
  162848             :        // typedef unsigned char* TestType;
  162849             : 
  162850             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  162851             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  162852             :       /* \brief Typedef used to hold memory addresses as values.
  162853             :        */
  162854             :        // typedef unsigned long  AddressType;
  162855             : 
  162856             : 
  162857             : 
  162858             :        // necessary, to have direct access to the p_freepointer and the private methods !
  162859             :       /*! \brief friend class declaration to support AST File I/O */
  162860             :           friend class AST_FILE_IO;
  162861             : 
  162862             :       /*! \brief friend class declaration to support AST File I/O */
  162863             :           friend class SgIncludeDirectiveStatementStorageClass;
  162864             : 
  162865             :       /*! \brief friend class declaration to support AST File I/O */
  162866             :           friend class AstSpecificDataManagingClass;
  162867             : 
  162868             :       /*! \brief friend class declaration to support AST File I/O */
  162869             :           friend class AstSpecificDataManagingClassStorageClass;
  162870             :     public:
  162871             :       /*! \brief IR node constructor to support AST File I/O */
  162872             :           SgIncludeDirectiveStatement( const SgIncludeDirectiveStatementStorageClass& source );
  162873             : 
  162874             :  // private: // JJW hack
  162875             :        /*
  162876             :           name AST Memory Allocation Support Variables
  162877             :           Memory allocations support variables 
  162878             : 
  162879             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  162880             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  162881             :           and support the AST File I/O Mechanism.
  162882             :        */
  162883             :       /* */
  162884             : 
  162885             :     public:
  162886             : 
  162887             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  162888             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  162889             :       // virtual SgNode* addRegExpAttribute();
  162890             :       /*! \brief Support for AST matching using regular expression.
  162891             : 
  162892             :           This support is incomplete and the subject of current research to define 
  162893             :           RegEx trees to support inexact matching.
  162894             :        */
  162895             :           SgIncludeDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  162896             : 
  162897             : // *** COMMON CODE SECTION ENDS HERE ***
  162898             : 
  162899             : 
  162900             : // End of memberFunctionString
  162901             : // Start of memberFunctionString
  162902             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  162903             : 
  162904             :      // the generated cast function
  162905             :      // friend ROSE_DLL_API SgIncludeDirectiveStatement* isSgIncludeDirectiveStatement ( SgNode* s );
  162906             : 
  162907             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  162908             : 
  162909             : 
  162910             : // End of memberFunctionString
  162911             : // Start of memberFunctionString
  162912             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  162913             : 
  162914             :           void post_construction_initialization() override;
  162915             : 
  162916             : 
  162917             : // End of memberFunctionString
  162918             : 
  162919             :      public: 
  162920             :          SgHeaderFileBody* get_headerFileBody() const;
  162921             :          void set_headerFileBody(SgHeaderFileBody* headerFileBody);
  162922             : 
  162923             :      public: 
  162924             :          SgIncludeFile* get_include_file_heirarchy() const;
  162925             :          void set_include_file_heirarchy(SgIncludeFile* include_file_heirarchy);
  162926             : 
  162927             :      public: 
  162928             :          std::string get_name_used_in_include_directive() const;
  162929             :          void set_name_used_in_include_directive(std::string name_used_in_include_directive);
  162930             : 
  162931             : 
  162932             :      public: 
  162933             :          virtual ~SgIncludeDirectiveStatement();
  162934             : 
  162935             : 
  162936             :      public: 
  162937             :          SgIncludeDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  162938             :          SgIncludeDirectiveStatement(); 
  162939             : 
  162940             :     protected:
  162941             : // Start of memberFunctionString
  162942             : SgHeaderFileBody* p_headerFileBody;
  162943             :           
  162944             : // End of memberFunctionString
  162945             : // Start of memberFunctionString
  162946             : SgIncludeFile* p_include_file_heirarchy;
  162947             :           
  162948             : // End of memberFunctionString
  162949             : // Start of memberFunctionString
  162950             : std::string p_name_used_in_include_directive;
  162951             :           
  162952             : // End of memberFunctionString
  162953             : 
  162954             :     friend struct Rose::Traits::generated::describe_node_t<SgIncludeDirectiveStatement>;
  162955             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeDirectiveStatement, SgHeaderFileBody*,&SgIncludeDirectiveStatement::p_headerFileBody>;
  162956             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeDirectiveStatement, SgIncludeFile*,&SgIncludeDirectiveStatement::p_include_file_heirarchy>;
  162957             :     friend struct Rose::Traits::generated::describe_field_t<SgIncludeDirectiveStatement, std::string,&SgIncludeDirectiveStatement::p_name_used_in_include_directive>;
  162958             : 
  162959             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162960             : 
  162961             : 
  162962             :    };
  162963             : #endif
  162964             : 
  162965             : // postdeclarations for SgIncludeDirectiveStatement
  162966             : 
  162967             : /* #line 162968 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162968             : 
  162969             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  162970             : 
  162971             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162972             : 
  162973             : 
  162974             : /* #line 162975 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162975             : 
  162976             : 
  162977             : 
  162978             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162979             : 
  162980             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  162981             : //      This code is automatically generated for each 
  162982             : //      terminal and non-terminal within the defined 
  162983             : //      grammar.  There is a simple way to change the 
  162984             : //      code to fix bugs etc.  See the ROSE README file
  162985             : //      for directions.
  162986             : 
  162987             : // tps: (02/22/2010): Adding DLL export requirements
  162988             : #include "rosedll.h"
  162989             : 
  162990             : // predeclarations for SgDefineDirectiveStatement
  162991             : 
  162992             : /* #line 162993 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  162993             : 
  162994             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  162995             : 
  162996             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  162997             : 
  162998             : #if 1
  162999             : // Class Definition for SgDefineDirectiveStatement
  163000             : class ROSE_DLL_API SgDefineDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  163001             :    {
  163002             :      public:
  163003             : 
  163004             : 
  163005             : /* #line 163006 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163006             : 
  163007             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  163008             : // Start of memberFunctionString
  163009             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  163010             : 
  163011             : // *** COMMON CODE SECTION BEGINS HERE ***
  163012             : 
  163013             :     public:
  163014             : 
  163015             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  163016             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  163017             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  163018             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  163019             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  163020             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  163021             : 
  163022             :       /*! \brief returns a string representing the class name */
  163023             :           virtual std::string class_name() const override;
  163024             : 
  163025             :       /*! \brief returns new style SageIII enum values */
  163026             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  163027             : 
  163028             :       /*! \brief static variant value */
  163029             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  163030             :        // static const VariantT static_variant = V_SgDefineDirectiveStatement;
  163031             :           enum { static_variant = V_SgDefineDirectiveStatement };
  163032             : 
  163033             :        /* the generated cast function */
  163034             :       /*! \brief Casts pointer from base class to derived class */
  163035             :           ROSE_DLL_API friend       SgDefineDirectiveStatement* isSgDefineDirectiveStatement(       SgNode * s );
  163036             : 
  163037             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  163038             :           ROSE_DLL_API friend const SgDefineDirectiveStatement* isSgDefineDirectiveStatement( const SgNode * s );
  163039             : 
  163040             :      // ******************************************
  163041             :      // * Memory Pool / New / Delete
  163042             :      // ******************************************
  163043             : 
  163044             :      public:
  163045             :           /// \private
  163046             :           static const unsigned pool_size; //
  163047             :           /// \private
  163048             :           static std::vector<unsigned char *> pools; //
  163049             :           /// \private
  163050             :           static SgDefineDirectiveStatement * next_node; // 
  163051             : 
  163052             :           /// \private
  163053             :           static unsigned long initializeStorageClassArray(SgDefineDirectiveStatementStorageClass *); //
  163054             : 
  163055             :           /// \private
  163056             :           static void clearMemoryPool(); //
  163057             :           static void deleteMemoryPool(); //
  163058             : 
  163059             :           /// \private
  163060             :           static void extendMemoryPoolForFileIO(); //
  163061             : 
  163062             :           /// \private
  163063             :           static SgDefineDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  163064             :           /// \private
  163065             :           static SgDefineDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  163066             : 
  163067             :           /// \private
  163068             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  163069             :           /// \private
  163070             :           static void resetValidFreepointers(); //
  163071             :           /// \private
  163072             :           static unsigned long getNumberOfLastValidPointer(); //
  163073             : 
  163074             : 
  163075             : #if defined(INLINE_FUNCTIONS)
  163076             :       /*! \brief returns pointer to newly allocated IR node */
  163077             :           inline void *operator new (size_t size);
  163078             : #else
  163079             :       /*! \brief returns pointer to newly allocated IR node */
  163080             :           void *operator new (size_t size);
  163081             : #endif
  163082             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  163083             :           void operator delete (void* pointer, size_t size);
  163084             : 
  163085             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  163086           0 :           void operator delete (void* pointer)
  163087             :              {
  163088             :             // This is the generated delete operator...
  163089           0 :                SgDefineDirectiveStatement::operator delete (pointer,sizeof(SgDefineDirectiveStatement));
  163090             :              }
  163091             : 
  163092             :       /*! \brief Returns the total number of IR nodes of this type */
  163093             :           static size_t numberOfNodes();
  163094             : 
  163095             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  163096             :           static size_t memoryUsage();
  163097             : 
  163098             :       // End of scope which started in IR nodes specific code 
  163099             :       /* */
  163100             : 
  163101             :       /* name Internal Functions
  163102             :           \brief Internal functions ... incomplete-documentation
  163103             : 
  163104             :           These functions have been made public as part of the design, but they are suggested for internal use 
  163105             :           or by particularly knowledgeable users for specialized tools or applications.
  163106             : 
  163107             :           \internal We could not make these private because they are required by user for special purposes. And 
  163108             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  163109             :          
  163110             :        */
  163111             : 
  163112             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  163113             :        // overridden in every class by *generated* implementation
  163114             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  163115             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  163116             :        // MS: 06/28/02 container of names of variables or container indices 
  163117             :        // used used in the traversal to access AST successor nodes
  163118             :        // overridden in every class by *generated* implementation
  163119             :       /*! \brief container of names of variables or container indices used used in the traversal
  163120             :           to access AST successor nodes overridden in every class by *generated* implementation */
  163121             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  163122             : 
  163123             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  163124             :        // than all the vector copies. The implementation for these functions is generated for each class.
  163125             :       /*! \brief return number of children in the traversal successor list */
  163126             :           virtual size_t get_numberOfTraversalSuccessors() override;
  163127             :       /*! \brief index-based access to traversal successors by index number */
  163128             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  163129             :       /*! \brief index-based access to traversal successors by child node */
  163130             :           virtual size_t get_childIndex(SgNode *child) override;
  163131             : 
  163132             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  163133             :        // MS: 08/16/2002 method for generating RTI information
  163134             :       /*! \brief return C++ Runtime-Time-Information */
  163135             :           virtual RTIReturnType roseRTI() override;
  163136             : #endif
  163137             :       /* */
  163138             : 
  163139             : 
  163140             : 
  163141             :       /* name Deprecated Functions
  163142             :           \brief Deprecated functions ... incomplete-documentation
  163143             : 
  163144             :           These functions have been deprecated from use.
  163145             :        */
  163146             :       /* */
  163147             : 
  163148             :       /*! returns a C style string (char*) representing the class name */
  163149             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  163150             : 
  163151             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  163152             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  163153             : #if 0
  163154             :       /*! returns old style Sage II enum values */
  163155             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  163156             :       /*! returns old style Sage II enum values */
  163157             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  163158             : #endif
  163159             :       /* */
  163160             : 
  163161             : 
  163162             : 
  163163             : 
  163164             :      public:
  163165             :       /* name Traversal Support Functions
  163166             :           \brief Traversal support functions ... incomplete-documentation
  163167             : 
  163168             :           These functions have been made public as part of the design, but they are suggested for internal use 
  163169             :           or by particularly knowledgable users for specialized tools or applications.
  163170             :        */
  163171             :       /* */
  163172             : 
  163173             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  163174             :        // (inferior to ROSE traversal mechanism, experimental).
  163175             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  163176             :        */
  163177             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  163178             : 
  163179             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  163180             :       /*! \brief support for the classic visitor pattern done in GoF */
  163181             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  163182             : 
  163183             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  163184             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  163185             :        */
  163186             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  163187             : 
  163188             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  163189             :        */
  163190             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  163191             : 
  163192             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  163193             :        // This traversal helps support internal tools that call static member functions.
  163194             :        // note: this function operates on the memory pools.
  163195             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  163196             :        */
  163197             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  163198             :       /* */
  163199             : 
  163200             : 
  163201             :      public:
  163202             :       /* name Memory Allocation Functions
  163203             :           \brief Memory allocations functions ... incomplete-documentation
  163204             : 
  163205             :           These functions have been made public as part of the design, but they are suggested for internal use 
  163206             :           or by particularly knowledgable users for specialized tools or applications.
  163207             :        */
  163208             :       /* */
  163209             : 
  163210             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  163211             : 
  163212             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  163213             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  163214             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  163215             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  163216             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  163217             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  163218             :           being used with the AST File I/O mechanism.
  163219             :        */
  163220             :           virtual bool isInMemoryPool() override;
  163221             : 
  163222             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  163223             : 
  163224             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  163225             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  163226             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  163227             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  163228             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  163229             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  163230             :           being used with the AST File I/O mechanism.
  163231             :        */
  163232             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  163233             : 
  163234             :       // DQ (4/30/2006): Modified to be a const function.
  163235             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  163236             : 
  163237             :           This functions is part of general support for many possible tools to operate 
  163238             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  163239             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  163240             :           less than the set of pointers used by the AST file I/O. This is part of
  163241             :           work implemented by Andreas, and support tools such as the AST graph generation.
  163242             : 
  163243             :           \warning This function can return unexpected data members and thus the 
  163244             :                    order and the number of elements is unpredicable and subject 
  163245             :                    to change.
  163246             : 
  163247             :           \returns STL vector of pairs of SgNode* and strings
  163248             :        */
  163249             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  163250             : 
  163251             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  163252             : 
  163253             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  163254             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  163255             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  163256             : 
  163257             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  163258             :                    and subject to change.
  163259             :        */
  163260             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  163261             : 
  163262             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  163263             : 
  163264             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  163265             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  163266             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  163267             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  163268             : 
  163269             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  163270             : 
  163271             :           \returns long
  163272             :        */
  163273             :           virtual long getChildIndex( SgNode* childNode ) const override;
  163274             : 
  163275             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  163276             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  163277             :       /* \brief Constructor for use by AST File I/O Mechanism
  163278             : 
  163279             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  163280             :           which obtained via fast binary file I/O from disk.
  163281             :        */
  163282             :        // SgDefineDirectiveStatement( SgDefineDirectiveStatementStorageClass& source );
  163283             : 
  163284             : 
  163285             : 
  163286             : 
  163287             : 
  163288             :  // JH (10/24/2005): methods added to support the ast file IO
  163289             :     private:
  163290             : 
  163291             :       /* name AST Memory Allocation Support Functions
  163292             :           \brief Memory allocations support....
  163293             : 
  163294             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  163295             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  163296             :           and support the AST File I/O Mechanism.
  163297             :        */
  163298             :       /* */
  163299             : 
  163300             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  163301             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  163302             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  163303             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  163304             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  163305             :           a correspinding one in the AST_FILE_IO class!
  163306             :        */
  163307             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  163308             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  163309             :       /* \brief Typedef used for low level memory access.
  163310             :        */
  163311             :        // typedef unsigned char* TestType;
  163312             : 
  163313             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  163314             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  163315             :       /* \brief Typedef used to hold memory addresses as values.
  163316             :        */
  163317             :        // typedef unsigned long  AddressType;
  163318             : 
  163319             : 
  163320             : 
  163321             :        // necessary, to have direct access to the p_freepointer and the private methods !
  163322             :       /*! \brief friend class declaration to support AST File I/O */
  163323             :           friend class AST_FILE_IO;
  163324             : 
  163325             :       /*! \brief friend class declaration to support AST File I/O */
  163326             :           friend class SgDefineDirectiveStatementStorageClass;
  163327             : 
  163328             :       /*! \brief friend class declaration to support AST File I/O */
  163329             :           friend class AstSpecificDataManagingClass;
  163330             : 
  163331             :       /*! \brief friend class declaration to support AST File I/O */
  163332             :           friend class AstSpecificDataManagingClassStorageClass;
  163333             :     public:
  163334             :       /*! \brief IR node constructor to support AST File I/O */
  163335             :           SgDefineDirectiveStatement( const SgDefineDirectiveStatementStorageClass& source );
  163336             : 
  163337             :  // private: // JJW hack
  163338             :        /*
  163339             :           name AST Memory Allocation Support Variables
  163340             :           Memory allocations support variables 
  163341             : 
  163342             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  163343             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  163344             :           and support the AST File I/O Mechanism.
  163345             :        */
  163346             :       /* */
  163347             : 
  163348             :     public:
  163349             : 
  163350             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  163351             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  163352             :       // virtual SgNode* addRegExpAttribute();
  163353             :       /*! \brief Support for AST matching using regular expression.
  163354             : 
  163355             :           This support is incomplete and the subject of current research to define 
  163356             :           RegEx trees to support inexact matching.
  163357             :        */
  163358             :           SgDefineDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  163359             : 
  163360             : // *** COMMON CODE SECTION ENDS HERE ***
  163361             : 
  163362             : 
  163363             : // End of memberFunctionString
  163364             : // Start of memberFunctionString
  163365             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  163366             : 
  163367             :      // the generated cast function
  163368             :      // friend ROSE_DLL_API SgDefineDirectiveStatement* isSgDefineDirectiveStatement ( SgNode* s );
  163369             : 
  163370             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  163371             : 
  163372             : 
  163373             : // End of memberFunctionString
  163374             : // Start of memberFunctionString
  163375             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  163376             : 
  163377             :           void post_construction_initialization() override;
  163378             : 
  163379             : 
  163380             : // End of memberFunctionString
  163381             : 
  163382             : 
  163383             :      public: 
  163384             :          virtual ~SgDefineDirectiveStatement();
  163385             : 
  163386             : 
  163387             :      public: 
  163388             :          SgDefineDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  163389             :          SgDefineDirectiveStatement(); 
  163390             : 
  163391             :     protected:
  163392             : 
  163393             :     friend struct Rose::Traits::generated::describe_node_t<SgDefineDirectiveStatement>;
  163394             : 
  163395             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163396             : 
  163397             : 
  163398             :    };
  163399             : #endif
  163400             : 
  163401             : // postdeclarations for SgDefineDirectiveStatement
  163402             : 
  163403             : /* #line 163404 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163404             : 
  163405             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  163406             : 
  163407             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163408             : 
  163409             : 
  163410             : /* #line 163411 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163411             : 
  163412             : 
  163413             : 
  163414             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163415             : 
  163416             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  163417             : //      This code is automatically generated for each 
  163418             : //      terminal and non-terminal within the defined 
  163419             : //      grammar.  There is a simple way to change the 
  163420             : //      code to fix bugs etc.  See the ROSE README file
  163421             : //      for directions.
  163422             : 
  163423             : // tps: (02/22/2010): Adding DLL export requirements
  163424             : #include "rosedll.h"
  163425             : 
  163426             : // predeclarations for SgUndefDirectiveStatement
  163427             : 
  163428             : /* #line 163429 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163429             : 
  163430             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  163431             : 
  163432             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163433             : 
  163434             : #if 1
  163435             : // Class Definition for SgUndefDirectiveStatement
  163436             : class ROSE_DLL_API SgUndefDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  163437             :    {
  163438             :      public:
  163439             : 
  163440             : 
  163441             : /* #line 163442 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163442             : 
  163443             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  163444             : // Start of memberFunctionString
  163445             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  163446             : 
  163447             : // *** COMMON CODE SECTION BEGINS HERE ***
  163448             : 
  163449             :     public:
  163450             : 
  163451             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  163452             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  163453             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  163454             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  163455             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  163456             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  163457             : 
  163458             :       /*! \brief returns a string representing the class name */
  163459             :           virtual std::string class_name() const override;
  163460             : 
  163461             :       /*! \brief returns new style SageIII enum values */
  163462             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  163463             : 
  163464             :       /*! \brief static variant value */
  163465             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  163466             :        // static const VariantT static_variant = V_SgUndefDirectiveStatement;
  163467             :           enum { static_variant = V_SgUndefDirectiveStatement };
  163468             : 
  163469             :        /* the generated cast function */
  163470             :       /*! \brief Casts pointer from base class to derived class */
  163471             :           ROSE_DLL_API friend       SgUndefDirectiveStatement* isSgUndefDirectiveStatement(       SgNode * s );
  163472             : 
  163473             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  163474             :           ROSE_DLL_API friend const SgUndefDirectiveStatement* isSgUndefDirectiveStatement( const SgNode * s );
  163475             : 
  163476             :      // ******************************************
  163477             :      // * Memory Pool / New / Delete
  163478             :      // ******************************************
  163479             : 
  163480             :      public:
  163481             :           /// \private
  163482             :           static const unsigned pool_size; //
  163483             :           /// \private
  163484             :           static std::vector<unsigned char *> pools; //
  163485             :           /// \private
  163486             :           static SgUndefDirectiveStatement * next_node; // 
  163487             : 
  163488             :           /// \private
  163489             :           static unsigned long initializeStorageClassArray(SgUndefDirectiveStatementStorageClass *); //
  163490             : 
  163491             :           /// \private
  163492             :           static void clearMemoryPool(); //
  163493             :           static void deleteMemoryPool(); //
  163494             : 
  163495             :           /// \private
  163496             :           static void extendMemoryPoolForFileIO(); //
  163497             : 
  163498             :           /// \private
  163499             :           static SgUndefDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  163500             :           /// \private
  163501             :           static SgUndefDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  163502             : 
  163503             :           /// \private
  163504             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  163505             :           /// \private
  163506             :           static void resetValidFreepointers(); //
  163507             :           /// \private
  163508             :           static unsigned long getNumberOfLastValidPointer(); //
  163509             : 
  163510             : 
  163511             : #if defined(INLINE_FUNCTIONS)
  163512             :       /*! \brief returns pointer to newly allocated IR node */
  163513             :           inline void *operator new (size_t size);
  163514             : #else
  163515             :       /*! \brief returns pointer to newly allocated IR node */
  163516             :           void *operator new (size_t size);
  163517             : #endif
  163518             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  163519             :           void operator delete (void* pointer, size_t size);
  163520             : 
  163521             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  163522           0 :           void operator delete (void* pointer)
  163523             :              {
  163524             :             // This is the generated delete operator...
  163525           0 :                SgUndefDirectiveStatement::operator delete (pointer,sizeof(SgUndefDirectiveStatement));
  163526             :              }
  163527             : 
  163528             :       /*! \brief Returns the total number of IR nodes of this type */
  163529             :           static size_t numberOfNodes();
  163530             : 
  163531             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  163532             :           static size_t memoryUsage();
  163533             : 
  163534             :       // End of scope which started in IR nodes specific code 
  163535             :       /* */
  163536             : 
  163537             :       /* name Internal Functions
  163538             :           \brief Internal functions ... incomplete-documentation
  163539             : 
  163540             :           These functions have been made public as part of the design, but they are suggested for internal use 
  163541             :           or by particularly knowledgeable users for specialized tools or applications.
  163542             : 
  163543             :           \internal We could not make these private because they are required by user for special purposes. And 
  163544             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  163545             :          
  163546             :        */
  163547             : 
  163548             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  163549             :        // overridden in every class by *generated* implementation
  163550             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  163551             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  163552             :        // MS: 06/28/02 container of names of variables or container indices 
  163553             :        // used used in the traversal to access AST successor nodes
  163554             :        // overridden in every class by *generated* implementation
  163555             :       /*! \brief container of names of variables or container indices used used in the traversal
  163556             :           to access AST successor nodes overridden in every class by *generated* implementation */
  163557             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  163558             : 
  163559             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  163560             :        // than all the vector copies. The implementation for these functions is generated for each class.
  163561             :       /*! \brief return number of children in the traversal successor list */
  163562             :           virtual size_t get_numberOfTraversalSuccessors() override;
  163563             :       /*! \brief index-based access to traversal successors by index number */
  163564             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  163565             :       /*! \brief index-based access to traversal successors by child node */
  163566             :           virtual size_t get_childIndex(SgNode *child) override;
  163567             : 
  163568             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  163569             :        // MS: 08/16/2002 method for generating RTI information
  163570             :       /*! \brief return C++ Runtime-Time-Information */
  163571             :           virtual RTIReturnType roseRTI() override;
  163572             : #endif
  163573             :       /* */
  163574             : 
  163575             : 
  163576             : 
  163577             :       /* name Deprecated Functions
  163578             :           \brief Deprecated functions ... incomplete-documentation
  163579             : 
  163580             :           These functions have been deprecated from use.
  163581             :        */
  163582             :       /* */
  163583             : 
  163584             :       /*! returns a C style string (char*) representing the class name */
  163585             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  163586             : 
  163587             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  163588             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  163589             : #if 0
  163590             :       /*! returns old style Sage II enum values */
  163591             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  163592             :       /*! returns old style Sage II enum values */
  163593             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  163594             : #endif
  163595             :       /* */
  163596             : 
  163597             : 
  163598             : 
  163599             : 
  163600             :      public:
  163601             :       /* name Traversal Support Functions
  163602             :           \brief Traversal support functions ... incomplete-documentation
  163603             : 
  163604             :           These functions have been made public as part of the design, but they are suggested for internal use 
  163605             :           or by particularly knowledgable users for specialized tools or applications.
  163606             :        */
  163607             :       /* */
  163608             : 
  163609             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  163610             :        // (inferior to ROSE traversal mechanism, experimental).
  163611             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  163612             :        */
  163613             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  163614             : 
  163615             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  163616             :       /*! \brief support for the classic visitor pattern done in GoF */
  163617             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  163618             : 
  163619             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  163620             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  163621             :        */
  163622             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  163623             : 
  163624             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  163625             :        */
  163626             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  163627             : 
  163628             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  163629             :        // This traversal helps support internal tools that call static member functions.
  163630             :        // note: this function operates on the memory pools.
  163631             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  163632             :        */
  163633             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  163634             :       /* */
  163635             : 
  163636             : 
  163637             :      public:
  163638             :       /* name Memory Allocation Functions
  163639             :           \brief Memory allocations functions ... incomplete-documentation
  163640             : 
  163641             :           These functions have been made public as part of the design, but they are suggested for internal use 
  163642             :           or by particularly knowledgable users for specialized tools or applications.
  163643             :        */
  163644             :       /* */
  163645             : 
  163646             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  163647             : 
  163648             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  163649             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  163650             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  163651             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  163652             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  163653             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  163654             :           being used with the AST File I/O mechanism.
  163655             :        */
  163656             :           virtual bool isInMemoryPool() override;
  163657             : 
  163658             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  163659             : 
  163660             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  163661             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  163662             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  163663             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  163664             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  163665             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  163666             :           being used with the AST File I/O mechanism.
  163667             :        */
  163668             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  163669             : 
  163670             :       // DQ (4/30/2006): Modified to be a const function.
  163671             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  163672             : 
  163673             :           This functions is part of general support for many possible tools to operate 
  163674             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  163675             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  163676             :           less than the set of pointers used by the AST file I/O. This is part of
  163677             :           work implemented by Andreas, and support tools such as the AST graph generation.
  163678             : 
  163679             :           \warning This function can return unexpected data members and thus the 
  163680             :                    order and the number of elements is unpredicable and subject 
  163681             :                    to change.
  163682             : 
  163683             :           \returns STL vector of pairs of SgNode* and strings
  163684             :        */
  163685             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  163686             : 
  163687             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  163688             : 
  163689             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  163690             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  163691             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  163692             : 
  163693             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  163694             :                    and subject to change.
  163695             :        */
  163696             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  163697             : 
  163698             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  163699             : 
  163700             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  163701             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  163702             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  163703             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  163704             : 
  163705             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  163706             : 
  163707             :           \returns long
  163708             :        */
  163709             :           virtual long getChildIndex( SgNode* childNode ) const override;
  163710             : 
  163711             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  163712             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  163713             :       /* \brief Constructor for use by AST File I/O Mechanism
  163714             : 
  163715             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  163716             :           which obtained via fast binary file I/O from disk.
  163717             :        */
  163718             :        // SgUndefDirectiveStatement( SgUndefDirectiveStatementStorageClass& source );
  163719             : 
  163720             : 
  163721             : 
  163722             : 
  163723             : 
  163724             :  // JH (10/24/2005): methods added to support the ast file IO
  163725             :     private:
  163726             : 
  163727             :       /* name AST Memory Allocation Support Functions
  163728             :           \brief Memory allocations support....
  163729             : 
  163730             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  163731             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  163732             :           and support the AST File I/O Mechanism.
  163733             :        */
  163734             :       /* */
  163735             : 
  163736             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  163737             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  163738             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  163739             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  163740             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  163741             :           a correspinding one in the AST_FILE_IO class!
  163742             :        */
  163743             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  163744             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  163745             :       /* \brief Typedef used for low level memory access.
  163746             :        */
  163747             :        // typedef unsigned char* TestType;
  163748             : 
  163749             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  163750             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  163751             :       /* \brief Typedef used to hold memory addresses as values.
  163752             :        */
  163753             :        // typedef unsigned long  AddressType;
  163754             : 
  163755             : 
  163756             : 
  163757             :        // necessary, to have direct access to the p_freepointer and the private methods !
  163758             :       /*! \brief friend class declaration to support AST File I/O */
  163759             :           friend class AST_FILE_IO;
  163760             : 
  163761             :       /*! \brief friend class declaration to support AST File I/O */
  163762             :           friend class SgUndefDirectiveStatementStorageClass;
  163763             : 
  163764             :       /*! \brief friend class declaration to support AST File I/O */
  163765             :           friend class AstSpecificDataManagingClass;
  163766             : 
  163767             :       /*! \brief friend class declaration to support AST File I/O */
  163768             :           friend class AstSpecificDataManagingClassStorageClass;
  163769             :     public:
  163770             :       /*! \brief IR node constructor to support AST File I/O */
  163771             :           SgUndefDirectiveStatement( const SgUndefDirectiveStatementStorageClass& source );
  163772             : 
  163773             :  // private: // JJW hack
  163774             :        /*
  163775             :           name AST Memory Allocation Support Variables
  163776             :           Memory allocations support variables 
  163777             : 
  163778             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  163779             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  163780             :           and support the AST File I/O Mechanism.
  163781             :        */
  163782             :       /* */
  163783             : 
  163784             :     public:
  163785             : 
  163786             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  163787             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  163788             :       // virtual SgNode* addRegExpAttribute();
  163789             :       /*! \brief Support for AST matching using regular expression.
  163790             : 
  163791             :           This support is incomplete and the subject of current research to define 
  163792             :           RegEx trees to support inexact matching.
  163793             :        */
  163794             :           SgUndefDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  163795             : 
  163796             : // *** COMMON CODE SECTION ENDS HERE ***
  163797             : 
  163798             : 
  163799             : // End of memberFunctionString
  163800             : // Start of memberFunctionString
  163801             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  163802             : 
  163803             :      // the generated cast function
  163804             :      // friend ROSE_DLL_API SgUndefDirectiveStatement* isSgUndefDirectiveStatement ( SgNode* s );
  163805             : 
  163806             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  163807             : 
  163808             : 
  163809             : // End of memberFunctionString
  163810             : // Start of memberFunctionString
  163811             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  163812             : 
  163813             :           void post_construction_initialization() override;
  163814             : 
  163815             : 
  163816             : // End of memberFunctionString
  163817             : 
  163818             : 
  163819             :      public: 
  163820             :          virtual ~SgUndefDirectiveStatement();
  163821             : 
  163822             : 
  163823             :      public: 
  163824             :          SgUndefDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  163825             :          SgUndefDirectiveStatement(); 
  163826             : 
  163827             :     protected:
  163828             : 
  163829             :     friend struct Rose::Traits::generated::describe_node_t<SgUndefDirectiveStatement>;
  163830             : 
  163831             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163832             : 
  163833             : 
  163834             :    };
  163835             : #endif
  163836             : 
  163837             : // postdeclarations for SgUndefDirectiveStatement
  163838             : 
  163839             : /* #line 163840 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163840             : 
  163841             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  163842             : 
  163843             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163844             : 
  163845             : 
  163846             : /* #line 163847 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163847             : 
  163848             : 
  163849             : 
  163850             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163851             : 
  163852             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  163853             : //      This code is automatically generated for each 
  163854             : //      terminal and non-terminal within the defined 
  163855             : //      grammar.  There is a simple way to change the 
  163856             : //      code to fix bugs etc.  See the ROSE README file
  163857             : //      for directions.
  163858             : 
  163859             : // tps: (02/22/2010): Adding DLL export requirements
  163860             : #include "rosedll.h"
  163861             : 
  163862             : // predeclarations for SgIfdefDirectiveStatement
  163863             : 
  163864             : /* #line 163865 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163865             : 
  163866             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  163867             : 
  163868             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  163869             : 
  163870             : #if 1
  163871             : // Class Definition for SgIfdefDirectiveStatement
  163872             : class ROSE_DLL_API SgIfdefDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  163873             :    {
  163874             :      public:
  163875             : 
  163876             : 
  163877             : /* #line 163878 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  163878             : 
  163879             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  163880             : // Start of memberFunctionString
  163881             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  163882             : 
  163883             : // *** COMMON CODE SECTION BEGINS HERE ***
  163884             : 
  163885             :     public:
  163886             : 
  163887             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  163888             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  163889             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  163890             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  163891             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  163892             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  163893             : 
  163894             :       /*! \brief returns a string representing the class name */
  163895             :           virtual std::string class_name() const override;
  163896             : 
  163897             :       /*! \brief returns new style SageIII enum values */
  163898             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  163899             : 
  163900             :       /*! \brief static variant value */
  163901             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  163902             :        // static const VariantT static_variant = V_SgIfdefDirectiveStatement;
  163903             :           enum { static_variant = V_SgIfdefDirectiveStatement };
  163904             : 
  163905             :        /* the generated cast function */
  163906             :       /*! \brief Casts pointer from base class to derived class */
  163907             :           ROSE_DLL_API friend       SgIfdefDirectiveStatement* isSgIfdefDirectiveStatement(       SgNode * s );
  163908             : 
  163909             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  163910             :           ROSE_DLL_API friend const SgIfdefDirectiveStatement* isSgIfdefDirectiveStatement( const SgNode * s );
  163911             : 
  163912             :      // ******************************************
  163913             :      // * Memory Pool / New / Delete
  163914             :      // ******************************************
  163915             : 
  163916             :      public:
  163917             :           /// \private
  163918             :           static const unsigned pool_size; //
  163919             :           /// \private
  163920             :           static std::vector<unsigned char *> pools; //
  163921             :           /// \private
  163922             :           static SgIfdefDirectiveStatement * next_node; // 
  163923             : 
  163924             :           /// \private
  163925             :           static unsigned long initializeStorageClassArray(SgIfdefDirectiveStatementStorageClass *); //
  163926             : 
  163927             :           /// \private
  163928             :           static void clearMemoryPool(); //
  163929             :           static void deleteMemoryPool(); //
  163930             : 
  163931             :           /// \private
  163932             :           static void extendMemoryPoolForFileIO(); //
  163933             : 
  163934             :           /// \private
  163935             :           static SgIfdefDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  163936             :           /// \private
  163937             :           static SgIfdefDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  163938             : 
  163939             :           /// \private
  163940             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  163941             :           /// \private
  163942             :           static void resetValidFreepointers(); //
  163943             :           /// \private
  163944             :           static unsigned long getNumberOfLastValidPointer(); //
  163945             : 
  163946             : 
  163947             : #if defined(INLINE_FUNCTIONS)
  163948             :       /*! \brief returns pointer to newly allocated IR node */
  163949             :           inline void *operator new (size_t size);
  163950             : #else
  163951             :       /*! \brief returns pointer to newly allocated IR node */
  163952             :           void *operator new (size_t size);
  163953             : #endif
  163954             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  163955             :           void operator delete (void* pointer, size_t size);
  163956             : 
  163957             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  163958           0 :           void operator delete (void* pointer)
  163959             :              {
  163960             :             // This is the generated delete operator...
  163961           0 :                SgIfdefDirectiveStatement::operator delete (pointer,sizeof(SgIfdefDirectiveStatement));
  163962             :              }
  163963             : 
  163964             :       /*! \brief Returns the total number of IR nodes of this type */
  163965             :           static size_t numberOfNodes();
  163966             : 
  163967             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  163968             :           static size_t memoryUsage();
  163969             : 
  163970             :       // End of scope which started in IR nodes specific code 
  163971             :       /* */
  163972             : 
  163973             :       /* name Internal Functions
  163974             :           \brief Internal functions ... incomplete-documentation
  163975             : 
  163976             :           These functions have been made public as part of the design, but they are suggested for internal use 
  163977             :           or by particularly knowledgeable users for specialized tools or applications.
  163978             : 
  163979             :           \internal We could not make these private because they are required by user for special purposes. And 
  163980             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  163981             :          
  163982             :        */
  163983             : 
  163984             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  163985             :        // overridden in every class by *generated* implementation
  163986             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  163987             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  163988             :        // MS: 06/28/02 container of names of variables or container indices 
  163989             :        // used used in the traversal to access AST successor nodes
  163990             :        // overridden in every class by *generated* implementation
  163991             :       /*! \brief container of names of variables or container indices used used in the traversal
  163992             :           to access AST successor nodes overridden in every class by *generated* implementation */
  163993             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  163994             : 
  163995             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  163996             :        // than all the vector copies. The implementation for these functions is generated for each class.
  163997             :       /*! \brief return number of children in the traversal successor list */
  163998             :           virtual size_t get_numberOfTraversalSuccessors() override;
  163999             :       /*! \brief index-based access to traversal successors by index number */
  164000             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  164001             :       /*! \brief index-based access to traversal successors by child node */
  164002             :           virtual size_t get_childIndex(SgNode *child) override;
  164003             : 
  164004             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  164005             :        // MS: 08/16/2002 method for generating RTI information
  164006             :       /*! \brief return C++ Runtime-Time-Information */
  164007             :           virtual RTIReturnType roseRTI() override;
  164008             : #endif
  164009             :       /* */
  164010             : 
  164011             : 
  164012             : 
  164013             :       /* name Deprecated Functions
  164014             :           \brief Deprecated functions ... incomplete-documentation
  164015             : 
  164016             :           These functions have been deprecated from use.
  164017             :        */
  164018             :       /* */
  164019             : 
  164020             :       /*! returns a C style string (char*) representing the class name */
  164021             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  164022             : 
  164023             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  164024             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  164025             : #if 0
  164026             :       /*! returns old style Sage II enum values */
  164027             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  164028             :       /*! returns old style Sage II enum values */
  164029             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  164030             : #endif
  164031             :       /* */
  164032             : 
  164033             : 
  164034             : 
  164035             : 
  164036             :      public:
  164037             :       /* name Traversal Support Functions
  164038             :           \brief Traversal support functions ... incomplete-documentation
  164039             : 
  164040             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164041             :           or by particularly knowledgable users for specialized tools or applications.
  164042             :        */
  164043             :       /* */
  164044             : 
  164045             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  164046             :        // (inferior to ROSE traversal mechanism, experimental).
  164047             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  164048             :        */
  164049             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  164050             : 
  164051             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  164052             :       /*! \brief support for the classic visitor pattern done in GoF */
  164053             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  164054             : 
  164055             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  164056             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  164057             :        */
  164058             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  164059             : 
  164060             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  164061             :        */
  164062             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  164063             : 
  164064             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  164065             :        // This traversal helps support internal tools that call static member functions.
  164066             :        // note: this function operates on the memory pools.
  164067             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  164068             :        */
  164069             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  164070             :       /* */
  164071             : 
  164072             : 
  164073             :      public:
  164074             :       /* name Memory Allocation Functions
  164075             :           \brief Memory allocations functions ... incomplete-documentation
  164076             : 
  164077             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164078             :           or by particularly knowledgable users for specialized tools or applications.
  164079             :        */
  164080             :       /* */
  164081             : 
  164082             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  164083             : 
  164084             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  164085             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  164086             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  164087             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  164088             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  164089             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  164090             :           being used with the AST File I/O mechanism.
  164091             :        */
  164092             :           virtual bool isInMemoryPool() override;
  164093             : 
  164094             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  164095             : 
  164096             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  164097             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  164098             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  164099             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  164100             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  164101             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  164102             :           being used with the AST File I/O mechanism.
  164103             :        */
  164104             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  164105             : 
  164106             :       // DQ (4/30/2006): Modified to be a const function.
  164107             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  164108             : 
  164109             :           This functions is part of general support for many possible tools to operate 
  164110             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  164111             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  164112             :           less than the set of pointers used by the AST file I/O. This is part of
  164113             :           work implemented by Andreas, and support tools such as the AST graph generation.
  164114             : 
  164115             :           \warning This function can return unexpected data members and thus the 
  164116             :                    order and the number of elements is unpredicable and subject 
  164117             :                    to change.
  164118             : 
  164119             :           \returns STL vector of pairs of SgNode* and strings
  164120             :        */
  164121             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  164122             : 
  164123             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  164124             : 
  164125             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  164126             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  164127             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  164128             : 
  164129             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  164130             :                    and subject to change.
  164131             :        */
  164132             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  164133             : 
  164134             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  164135             : 
  164136             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  164137             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  164138             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  164139             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  164140             : 
  164141             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  164142             : 
  164143             :           \returns long
  164144             :        */
  164145             :           virtual long getChildIndex( SgNode* childNode ) const override;
  164146             : 
  164147             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  164148             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  164149             :       /* \brief Constructor for use by AST File I/O Mechanism
  164150             : 
  164151             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  164152             :           which obtained via fast binary file I/O from disk.
  164153             :        */
  164154             :        // SgIfdefDirectiveStatement( SgIfdefDirectiveStatementStorageClass& source );
  164155             : 
  164156             : 
  164157             : 
  164158             : 
  164159             : 
  164160             :  // JH (10/24/2005): methods added to support the ast file IO
  164161             :     private:
  164162             : 
  164163             :       /* name AST Memory Allocation Support Functions
  164164             :           \brief Memory allocations support....
  164165             : 
  164166             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  164167             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  164168             :           and support the AST File I/O Mechanism.
  164169             :        */
  164170             :       /* */
  164171             : 
  164172             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  164173             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  164174             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  164175             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  164176             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  164177             :           a correspinding one in the AST_FILE_IO class!
  164178             :        */
  164179             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  164180             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  164181             :       /* \brief Typedef used for low level memory access.
  164182             :        */
  164183             :        // typedef unsigned char* TestType;
  164184             : 
  164185             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  164186             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  164187             :       /* \brief Typedef used to hold memory addresses as values.
  164188             :        */
  164189             :        // typedef unsigned long  AddressType;
  164190             : 
  164191             : 
  164192             : 
  164193             :        // necessary, to have direct access to the p_freepointer and the private methods !
  164194             :       /*! \brief friend class declaration to support AST File I/O */
  164195             :           friend class AST_FILE_IO;
  164196             : 
  164197             :       /*! \brief friend class declaration to support AST File I/O */
  164198             :           friend class SgIfdefDirectiveStatementStorageClass;
  164199             : 
  164200             :       /*! \brief friend class declaration to support AST File I/O */
  164201             :           friend class AstSpecificDataManagingClass;
  164202             : 
  164203             :       /*! \brief friend class declaration to support AST File I/O */
  164204             :           friend class AstSpecificDataManagingClassStorageClass;
  164205             :     public:
  164206             :       /*! \brief IR node constructor to support AST File I/O */
  164207             :           SgIfdefDirectiveStatement( const SgIfdefDirectiveStatementStorageClass& source );
  164208             : 
  164209             :  // private: // JJW hack
  164210             :        /*
  164211             :           name AST Memory Allocation Support Variables
  164212             :           Memory allocations support variables 
  164213             : 
  164214             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  164215             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  164216             :           and support the AST File I/O Mechanism.
  164217             :        */
  164218             :       /* */
  164219             : 
  164220             :     public:
  164221             : 
  164222             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  164223             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  164224             :       // virtual SgNode* addRegExpAttribute();
  164225             :       /*! \brief Support for AST matching using regular expression.
  164226             : 
  164227             :           This support is incomplete and the subject of current research to define 
  164228             :           RegEx trees to support inexact matching.
  164229             :        */
  164230             :           SgIfdefDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  164231             : 
  164232             : // *** COMMON CODE SECTION ENDS HERE ***
  164233             : 
  164234             : 
  164235             : // End of memberFunctionString
  164236             : // Start of memberFunctionString
  164237             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  164238             : 
  164239             :      // the generated cast function
  164240             :      // friend ROSE_DLL_API SgIfdefDirectiveStatement* isSgIfdefDirectiveStatement ( SgNode* s );
  164241             : 
  164242             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  164243             : 
  164244             : 
  164245             : // End of memberFunctionString
  164246             : // Start of memberFunctionString
  164247             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  164248             : 
  164249             :           void post_construction_initialization() override;
  164250             : 
  164251             : 
  164252             : // End of memberFunctionString
  164253             : 
  164254             : 
  164255             :      public: 
  164256             :          virtual ~SgIfdefDirectiveStatement();
  164257             : 
  164258             : 
  164259             :      public: 
  164260             :          SgIfdefDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  164261             :          SgIfdefDirectiveStatement(); 
  164262             : 
  164263             :     protected:
  164264             : 
  164265             :     friend struct Rose::Traits::generated::describe_node_t<SgIfdefDirectiveStatement>;
  164266             : 
  164267             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164268             : 
  164269             : 
  164270             :    };
  164271             : #endif
  164272             : 
  164273             : // postdeclarations for SgIfdefDirectiveStatement
  164274             : 
  164275             : /* #line 164276 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164276             : 
  164277             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  164278             : 
  164279             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164280             : 
  164281             : 
  164282             : /* #line 164283 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164283             : 
  164284             : 
  164285             : 
  164286             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164287             : 
  164288             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  164289             : //      This code is automatically generated for each 
  164290             : //      terminal and non-terminal within the defined 
  164291             : //      grammar.  There is a simple way to change the 
  164292             : //      code to fix bugs etc.  See the ROSE README file
  164293             : //      for directions.
  164294             : 
  164295             : // tps: (02/22/2010): Adding DLL export requirements
  164296             : #include "rosedll.h"
  164297             : 
  164298             : // predeclarations for SgIfndefDirectiveStatement
  164299             : 
  164300             : /* #line 164301 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164301             : 
  164302             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  164303             : 
  164304             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164305             : 
  164306             : #if 1
  164307             : // Class Definition for SgIfndefDirectiveStatement
  164308             : class ROSE_DLL_API SgIfndefDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  164309             :    {
  164310             :      public:
  164311             : 
  164312             : 
  164313             : /* #line 164314 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164314             : 
  164315             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  164316             : // Start of memberFunctionString
  164317             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  164318             : 
  164319             : // *** COMMON CODE SECTION BEGINS HERE ***
  164320             : 
  164321             :     public:
  164322             : 
  164323             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  164324             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  164325             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  164326             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  164327             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  164328             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  164329             : 
  164330             :       /*! \brief returns a string representing the class name */
  164331             :           virtual std::string class_name() const override;
  164332             : 
  164333             :       /*! \brief returns new style SageIII enum values */
  164334             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  164335             : 
  164336             :       /*! \brief static variant value */
  164337             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  164338             :        // static const VariantT static_variant = V_SgIfndefDirectiveStatement;
  164339             :           enum { static_variant = V_SgIfndefDirectiveStatement };
  164340             : 
  164341             :        /* the generated cast function */
  164342             :       /*! \brief Casts pointer from base class to derived class */
  164343             :           ROSE_DLL_API friend       SgIfndefDirectiveStatement* isSgIfndefDirectiveStatement(       SgNode * s );
  164344             : 
  164345             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  164346             :           ROSE_DLL_API friend const SgIfndefDirectiveStatement* isSgIfndefDirectiveStatement( const SgNode * s );
  164347             : 
  164348             :      // ******************************************
  164349             :      // * Memory Pool / New / Delete
  164350             :      // ******************************************
  164351             : 
  164352             :      public:
  164353             :           /// \private
  164354             :           static const unsigned pool_size; //
  164355             :           /// \private
  164356             :           static std::vector<unsigned char *> pools; //
  164357             :           /// \private
  164358             :           static SgIfndefDirectiveStatement * next_node; // 
  164359             : 
  164360             :           /// \private
  164361             :           static unsigned long initializeStorageClassArray(SgIfndefDirectiveStatementStorageClass *); //
  164362             : 
  164363             :           /// \private
  164364             :           static void clearMemoryPool(); //
  164365             :           static void deleteMemoryPool(); //
  164366             : 
  164367             :           /// \private
  164368             :           static void extendMemoryPoolForFileIO(); //
  164369             : 
  164370             :           /// \private
  164371             :           static SgIfndefDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  164372             :           /// \private
  164373             :           static SgIfndefDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  164374             : 
  164375             :           /// \private
  164376             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  164377             :           /// \private
  164378             :           static void resetValidFreepointers(); //
  164379             :           /// \private
  164380             :           static unsigned long getNumberOfLastValidPointer(); //
  164381             : 
  164382             : 
  164383             : #if defined(INLINE_FUNCTIONS)
  164384             :       /*! \brief returns pointer to newly allocated IR node */
  164385             :           inline void *operator new (size_t size);
  164386             : #else
  164387             :       /*! \brief returns pointer to newly allocated IR node */
  164388             :           void *operator new (size_t size);
  164389             : #endif
  164390             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  164391             :           void operator delete (void* pointer, size_t size);
  164392             : 
  164393             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  164394           0 :           void operator delete (void* pointer)
  164395             :              {
  164396             :             // This is the generated delete operator...
  164397           0 :                SgIfndefDirectiveStatement::operator delete (pointer,sizeof(SgIfndefDirectiveStatement));
  164398             :              }
  164399             : 
  164400             :       /*! \brief Returns the total number of IR nodes of this type */
  164401             :           static size_t numberOfNodes();
  164402             : 
  164403             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  164404             :           static size_t memoryUsage();
  164405             : 
  164406             :       // End of scope which started in IR nodes specific code 
  164407             :       /* */
  164408             : 
  164409             :       /* name Internal Functions
  164410             :           \brief Internal functions ... incomplete-documentation
  164411             : 
  164412             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164413             :           or by particularly knowledgeable users for specialized tools or applications.
  164414             : 
  164415             :           \internal We could not make these private because they are required by user for special purposes. And 
  164416             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  164417             :          
  164418             :        */
  164419             : 
  164420             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  164421             :        // overridden in every class by *generated* implementation
  164422             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  164423             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  164424             :        // MS: 06/28/02 container of names of variables or container indices 
  164425             :        // used used in the traversal to access AST successor nodes
  164426             :        // overridden in every class by *generated* implementation
  164427             :       /*! \brief container of names of variables or container indices used used in the traversal
  164428             :           to access AST successor nodes overridden in every class by *generated* implementation */
  164429             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  164430             : 
  164431             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  164432             :        // than all the vector copies. The implementation for these functions is generated for each class.
  164433             :       /*! \brief return number of children in the traversal successor list */
  164434             :           virtual size_t get_numberOfTraversalSuccessors() override;
  164435             :       /*! \brief index-based access to traversal successors by index number */
  164436             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  164437             :       /*! \brief index-based access to traversal successors by child node */
  164438             :           virtual size_t get_childIndex(SgNode *child) override;
  164439             : 
  164440             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  164441             :        // MS: 08/16/2002 method for generating RTI information
  164442             :       /*! \brief return C++ Runtime-Time-Information */
  164443             :           virtual RTIReturnType roseRTI() override;
  164444             : #endif
  164445             :       /* */
  164446             : 
  164447             : 
  164448             : 
  164449             :       /* name Deprecated Functions
  164450             :           \brief Deprecated functions ... incomplete-documentation
  164451             : 
  164452             :           These functions have been deprecated from use.
  164453             :        */
  164454             :       /* */
  164455             : 
  164456             :       /*! returns a C style string (char*) representing the class name */
  164457             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  164458             : 
  164459             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  164460             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  164461             : #if 0
  164462             :       /*! returns old style Sage II enum values */
  164463             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  164464             :       /*! returns old style Sage II enum values */
  164465             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  164466             : #endif
  164467             :       /* */
  164468             : 
  164469             : 
  164470             : 
  164471             : 
  164472             :      public:
  164473             :       /* name Traversal Support Functions
  164474             :           \brief Traversal support functions ... incomplete-documentation
  164475             : 
  164476             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164477             :           or by particularly knowledgable users for specialized tools or applications.
  164478             :        */
  164479             :       /* */
  164480             : 
  164481             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  164482             :        // (inferior to ROSE traversal mechanism, experimental).
  164483             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  164484             :        */
  164485             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  164486             : 
  164487             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  164488             :       /*! \brief support for the classic visitor pattern done in GoF */
  164489             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  164490             : 
  164491             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  164492             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  164493             :        */
  164494             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  164495             : 
  164496             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  164497             :        */
  164498             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  164499             : 
  164500             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  164501             :        // This traversal helps support internal tools that call static member functions.
  164502             :        // note: this function operates on the memory pools.
  164503             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  164504             :        */
  164505             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  164506             :       /* */
  164507             : 
  164508             : 
  164509             :      public:
  164510             :       /* name Memory Allocation Functions
  164511             :           \brief Memory allocations functions ... incomplete-documentation
  164512             : 
  164513             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164514             :           or by particularly knowledgable users for specialized tools or applications.
  164515             :        */
  164516             :       /* */
  164517             : 
  164518             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  164519             : 
  164520             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  164521             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  164522             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  164523             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  164524             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  164525             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  164526             :           being used with the AST File I/O mechanism.
  164527             :        */
  164528             :           virtual bool isInMemoryPool() override;
  164529             : 
  164530             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  164531             : 
  164532             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  164533             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  164534             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  164535             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  164536             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  164537             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  164538             :           being used with the AST File I/O mechanism.
  164539             :        */
  164540             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  164541             : 
  164542             :       // DQ (4/30/2006): Modified to be a const function.
  164543             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  164544             : 
  164545             :           This functions is part of general support for many possible tools to operate 
  164546             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  164547             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  164548             :           less than the set of pointers used by the AST file I/O. This is part of
  164549             :           work implemented by Andreas, and support tools such as the AST graph generation.
  164550             : 
  164551             :           \warning This function can return unexpected data members and thus the 
  164552             :                    order and the number of elements is unpredicable and subject 
  164553             :                    to change.
  164554             : 
  164555             :           \returns STL vector of pairs of SgNode* and strings
  164556             :        */
  164557             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  164558             : 
  164559             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  164560             : 
  164561             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  164562             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  164563             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  164564             : 
  164565             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  164566             :                    and subject to change.
  164567             :        */
  164568             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  164569             : 
  164570             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  164571             : 
  164572             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  164573             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  164574             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  164575             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  164576             : 
  164577             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  164578             : 
  164579             :           \returns long
  164580             :        */
  164581             :           virtual long getChildIndex( SgNode* childNode ) const override;
  164582             : 
  164583             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  164584             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  164585             :       /* \brief Constructor for use by AST File I/O Mechanism
  164586             : 
  164587             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  164588             :           which obtained via fast binary file I/O from disk.
  164589             :        */
  164590             :        // SgIfndefDirectiveStatement( SgIfndefDirectiveStatementStorageClass& source );
  164591             : 
  164592             : 
  164593             : 
  164594             : 
  164595             : 
  164596             :  // JH (10/24/2005): methods added to support the ast file IO
  164597             :     private:
  164598             : 
  164599             :       /* name AST Memory Allocation Support Functions
  164600             :           \brief Memory allocations support....
  164601             : 
  164602             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  164603             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  164604             :           and support the AST File I/O Mechanism.
  164605             :        */
  164606             :       /* */
  164607             : 
  164608             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  164609             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  164610             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  164611             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  164612             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  164613             :           a correspinding one in the AST_FILE_IO class!
  164614             :        */
  164615             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  164616             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  164617             :       /* \brief Typedef used for low level memory access.
  164618             :        */
  164619             :        // typedef unsigned char* TestType;
  164620             : 
  164621             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  164622             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  164623             :       /* \brief Typedef used to hold memory addresses as values.
  164624             :        */
  164625             :        // typedef unsigned long  AddressType;
  164626             : 
  164627             : 
  164628             : 
  164629             :        // necessary, to have direct access to the p_freepointer and the private methods !
  164630             :       /*! \brief friend class declaration to support AST File I/O */
  164631             :           friend class AST_FILE_IO;
  164632             : 
  164633             :       /*! \brief friend class declaration to support AST File I/O */
  164634             :           friend class SgIfndefDirectiveStatementStorageClass;
  164635             : 
  164636             :       /*! \brief friend class declaration to support AST File I/O */
  164637             :           friend class AstSpecificDataManagingClass;
  164638             : 
  164639             :       /*! \brief friend class declaration to support AST File I/O */
  164640             :           friend class AstSpecificDataManagingClassStorageClass;
  164641             :     public:
  164642             :       /*! \brief IR node constructor to support AST File I/O */
  164643             :           SgIfndefDirectiveStatement( const SgIfndefDirectiveStatementStorageClass& source );
  164644             : 
  164645             :  // private: // JJW hack
  164646             :        /*
  164647             :           name AST Memory Allocation Support Variables
  164648             :           Memory allocations support variables 
  164649             : 
  164650             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  164651             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  164652             :           and support the AST File I/O Mechanism.
  164653             :        */
  164654             :       /* */
  164655             : 
  164656             :     public:
  164657             : 
  164658             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  164659             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  164660             :       // virtual SgNode* addRegExpAttribute();
  164661             :       /*! \brief Support for AST matching using regular expression.
  164662             : 
  164663             :           This support is incomplete and the subject of current research to define 
  164664             :           RegEx trees to support inexact matching.
  164665             :        */
  164666             :           SgIfndefDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  164667             : 
  164668             : // *** COMMON CODE SECTION ENDS HERE ***
  164669             : 
  164670             : 
  164671             : // End of memberFunctionString
  164672             : // Start of memberFunctionString
  164673             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  164674             : 
  164675             :      // the generated cast function
  164676             :      // friend ROSE_DLL_API SgIfndefDirectiveStatement* isSgIfndefDirectiveStatement ( SgNode* s );
  164677             : 
  164678             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  164679             : 
  164680             : 
  164681             : // End of memberFunctionString
  164682             : // Start of memberFunctionString
  164683             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  164684             : 
  164685             :           void post_construction_initialization() override;
  164686             : 
  164687             : 
  164688             : // End of memberFunctionString
  164689             : 
  164690             : 
  164691             :      public: 
  164692             :          virtual ~SgIfndefDirectiveStatement();
  164693             : 
  164694             : 
  164695             :      public: 
  164696             :          SgIfndefDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  164697             :          SgIfndefDirectiveStatement(); 
  164698             : 
  164699             :     protected:
  164700             : 
  164701             :     friend struct Rose::Traits::generated::describe_node_t<SgIfndefDirectiveStatement>;
  164702             : 
  164703             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164704             : 
  164705             : 
  164706             :    };
  164707             : #endif
  164708             : 
  164709             : // postdeclarations for SgIfndefDirectiveStatement
  164710             : 
  164711             : /* #line 164712 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164712             : 
  164713             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  164714             : 
  164715             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164716             : 
  164717             : 
  164718             : /* #line 164719 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164719             : 
  164720             : 
  164721             : 
  164722             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164723             : 
  164724             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  164725             : //      This code is automatically generated for each 
  164726             : //      terminal and non-terminal within the defined 
  164727             : //      grammar.  There is a simple way to change the 
  164728             : //      code to fix bugs etc.  See the ROSE README file
  164729             : //      for directions.
  164730             : 
  164731             : // tps: (02/22/2010): Adding DLL export requirements
  164732             : #include "rosedll.h"
  164733             : 
  164734             : // predeclarations for SgIfDirectiveStatement
  164735             : 
  164736             : /* #line 164737 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164737             : 
  164738             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  164739             : 
  164740             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  164741             : 
  164742             : #if 1
  164743             : // Class Definition for SgIfDirectiveStatement
  164744             : class ROSE_DLL_API SgIfDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  164745             :    {
  164746             :      public:
  164747             : 
  164748             : 
  164749             : /* #line 164750 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  164750             : 
  164751             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  164752             : // Start of memberFunctionString
  164753             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  164754             : 
  164755             : // *** COMMON CODE SECTION BEGINS HERE ***
  164756             : 
  164757             :     public:
  164758             : 
  164759             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  164760             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  164761             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  164762             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  164763             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  164764             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  164765             : 
  164766             :       /*! \brief returns a string representing the class name */
  164767             :           virtual std::string class_name() const override;
  164768             : 
  164769             :       /*! \brief returns new style SageIII enum values */
  164770             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  164771             : 
  164772             :       /*! \brief static variant value */
  164773             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  164774             :        // static const VariantT static_variant = V_SgIfDirectiveStatement;
  164775             :           enum { static_variant = V_SgIfDirectiveStatement };
  164776             : 
  164777             :        /* the generated cast function */
  164778             :       /*! \brief Casts pointer from base class to derived class */
  164779             :           ROSE_DLL_API friend       SgIfDirectiveStatement* isSgIfDirectiveStatement(       SgNode * s );
  164780             : 
  164781             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  164782             :           ROSE_DLL_API friend const SgIfDirectiveStatement* isSgIfDirectiveStatement( const SgNode * s );
  164783             : 
  164784             :      // ******************************************
  164785             :      // * Memory Pool / New / Delete
  164786             :      // ******************************************
  164787             : 
  164788             :      public:
  164789             :           /// \private
  164790             :           static const unsigned pool_size; //
  164791             :           /// \private
  164792             :           static std::vector<unsigned char *> pools; //
  164793             :           /// \private
  164794             :           static SgIfDirectiveStatement * next_node; // 
  164795             : 
  164796             :           /// \private
  164797             :           static unsigned long initializeStorageClassArray(SgIfDirectiveStatementStorageClass *); //
  164798             : 
  164799             :           /// \private
  164800             :           static void clearMemoryPool(); //
  164801             :           static void deleteMemoryPool(); //
  164802             : 
  164803             :           /// \private
  164804             :           static void extendMemoryPoolForFileIO(); //
  164805             : 
  164806             :           /// \private
  164807             :           static SgIfDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  164808             :           /// \private
  164809             :           static SgIfDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  164810             : 
  164811             :           /// \private
  164812             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  164813             :           /// \private
  164814             :           static void resetValidFreepointers(); //
  164815             :           /// \private
  164816             :           static unsigned long getNumberOfLastValidPointer(); //
  164817             : 
  164818             : 
  164819             : #if defined(INLINE_FUNCTIONS)
  164820             :       /*! \brief returns pointer to newly allocated IR node */
  164821             :           inline void *operator new (size_t size);
  164822             : #else
  164823             :       /*! \brief returns pointer to newly allocated IR node */
  164824             :           void *operator new (size_t size);
  164825             : #endif
  164826             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  164827             :           void operator delete (void* pointer, size_t size);
  164828             : 
  164829             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  164830           0 :           void operator delete (void* pointer)
  164831             :              {
  164832             :             // This is the generated delete operator...
  164833           0 :                SgIfDirectiveStatement::operator delete (pointer,sizeof(SgIfDirectiveStatement));
  164834             :              }
  164835             : 
  164836             :       /*! \brief Returns the total number of IR nodes of this type */
  164837             :           static size_t numberOfNodes();
  164838             : 
  164839             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  164840             :           static size_t memoryUsage();
  164841             : 
  164842             :       // End of scope which started in IR nodes specific code 
  164843             :       /* */
  164844             : 
  164845             :       /* name Internal Functions
  164846             :           \brief Internal functions ... incomplete-documentation
  164847             : 
  164848             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164849             :           or by particularly knowledgeable users for specialized tools or applications.
  164850             : 
  164851             :           \internal We could not make these private because they are required by user for special purposes. And 
  164852             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  164853             :          
  164854             :        */
  164855             : 
  164856             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  164857             :        // overridden in every class by *generated* implementation
  164858             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  164859             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  164860             :        // MS: 06/28/02 container of names of variables or container indices 
  164861             :        // used used in the traversal to access AST successor nodes
  164862             :        // overridden in every class by *generated* implementation
  164863             :       /*! \brief container of names of variables or container indices used used in the traversal
  164864             :           to access AST successor nodes overridden in every class by *generated* implementation */
  164865             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  164866             : 
  164867             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  164868             :        // than all the vector copies. The implementation for these functions is generated for each class.
  164869             :       /*! \brief return number of children in the traversal successor list */
  164870             :           virtual size_t get_numberOfTraversalSuccessors() override;
  164871             :       /*! \brief index-based access to traversal successors by index number */
  164872             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  164873             :       /*! \brief index-based access to traversal successors by child node */
  164874             :           virtual size_t get_childIndex(SgNode *child) override;
  164875             : 
  164876             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  164877             :        // MS: 08/16/2002 method for generating RTI information
  164878             :       /*! \brief return C++ Runtime-Time-Information */
  164879             :           virtual RTIReturnType roseRTI() override;
  164880             : #endif
  164881             :       /* */
  164882             : 
  164883             : 
  164884             : 
  164885             :       /* name Deprecated Functions
  164886             :           \brief Deprecated functions ... incomplete-documentation
  164887             : 
  164888             :           These functions have been deprecated from use.
  164889             :        */
  164890             :       /* */
  164891             : 
  164892             :       /*! returns a C style string (char*) representing the class name */
  164893             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  164894             : 
  164895             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  164896             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  164897             : #if 0
  164898             :       /*! returns old style Sage II enum values */
  164899             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  164900             :       /*! returns old style Sage II enum values */
  164901             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  164902             : #endif
  164903             :       /* */
  164904             : 
  164905             : 
  164906             : 
  164907             : 
  164908             :      public:
  164909             :       /* name Traversal Support Functions
  164910             :           \brief Traversal support functions ... incomplete-documentation
  164911             : 
  164912             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164913             :           or by particularly knowledgable users for specialized tools or applications.
  164914             :        */
  164915             :       /* */
  164916             : 
  164917             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  164918             :        // (inferior to ROSE traversal mechanism, experimental).
  164919             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  164920             :        */
  164921             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  164922             : 
  164923             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  164924             :       /*! \brief support for the classic visitor pattern done in GoF */
  164925             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  164926             : 
  164927             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  164928             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  164929             :        */
  164930             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  164931             : 
  164932             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  164933             :        */
  164934             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  164935             : 
  164936             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  164937             :        // This traversal helps support internal tools that call static member functions.
  164938             :        // note: this function operates on the memory pools.
  164939             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  164940             :        */
  164941             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  164942             :       /* */
  164943             : 
  164944             : 
  164945             :      public:
  164946             :       /* name Memory Allocation Functions
  164947             :           \brief Memory allocations functions ... incomplete-documentation
  164948             : 
  164949             :           These functions have been made public as part of the design, but they are suggested for internal use 
  164950             :           or by particularly knowledgable users for specialized tools or applications.
  164951             :        */
  164952             :       /* */
  164953             : 
  164954             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  164955             : 
  164956             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  164957             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  164958             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  164959             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  164960             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  164961             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  164962             :           being used with the AST File I/O mechanism.
  164963             :        */
  164964             :           virtual bool isInMemoryPool() override;
  164965             : 
  164966             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  164967             : 
  164968             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  164969             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  164970             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  164971             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  164972             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  164973             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  164974             :           being used with the AST File I/O mechanism.
  164975             :        */
  164976             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  164977             : 
  164978             :       // DQ (4/30/2006): Modified to be a const function.
  164979             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  164980             : 
  164981             :           This functions is part of general support for many possible tools to operate 
  164982             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  164983             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  164984             :           less than the set of pointers used by the AST file I/O. This is part of
  164985             :           work implemented by Andreas, and support tools such as the AST graph generation.
  164986             : 
  164987             :           \warning This function can return unexpected data members and thus the 
  164988             :                    order and the number of elements is unpredicable and subject 
  164989             :                    to change.
  164990             : 
  164991             :           \returns STL vector of pairs of SgNode* and strings
  164992             :        */
  164993             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  164994             : 
  164995             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  164996             : 
  164997             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  164998             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  164999             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  165000             : 
  165001             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  165002             :                    and subject to change.
  165003             :        */
  165004             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  165005             : 
  165006             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  165007             : 
  165008             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  165009             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  165010             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  165011             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  165012             : 
  165013             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  165014             : 
  165015             :           \returns long
  165016             :        */
  165017             :           virtual long getChildIndex( SgNode* childNode ) const override;
  165018             : 
  165019             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  165020             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165021             :       /* \brief Constructor for use by AST File I/O Mechanism
  165022             : 
  165023             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  165024             :           which obtained via fast binary file I/O from disk.
  165025             :        */
  165026             :        // SgIfDirectiveStatement( SgIfDirectiveStatementStorageClass& source );
  165027             : 
  165028             : 
  165029             : 
  165030             : 
  165031             : 
  165032             :  // JH (10/24/2005): methods added to support the ast file IO
  165033             :     private:
  165034             : 
  165035             :       /* name AST Memory Allocation Support Functions
  165036             :           \brief Memory allocations support....
  165037             : 
  165038             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  165039             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  165040             :           and support the AST File I/O Mechanism.
  165041             :        */
  165042             :       /* */
  165043             : 
  165044             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  165045             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  165046             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  165047             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  165048             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  165049             :           a correspinding one in the AST_FILE_IO class!
  165050             :        */
  165051             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  165052             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165053             :       /* \brief Typedef used for low level memory access.
  165054             :        */
  165055             :        // typedef unsigned char* TestType;
  165056             : 
  165057             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  165058             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165059             :       /* \brief Typedef used to hold memory addresses as values.
  165060             :        */
  165061             :        // typedef unsigned long  AddressType;
  165062             : 
  165063             : 
  165064             : 
  165065             :        // necessary, to have direct access to the p_freepointer and the private methods !
  165066             :       /*! \brief friend class declaration to support AST File I/O */
  165067             :           friend class AST_FILE_IO;
  165068             : 
  165069             :       /*! \brief friend class declaration to support AST File I/O */
  165070             :           friend class SgIfDirectiveStatementStorageClass;
  165071             : 
  165072             :       /*! \brief friend class declaration to support AST File I/O */
  165073             :           friend class AstSpecificDataManagingClass;
  165074             : 
  165075             :       /*! \brief friend class declaration to support AST File I/O */
  165076             :           friend class AstSpecificDataManagingClassStorageClass;
  165077             :     public:
  165078             :       /*! \brief IR node constructor to support AST File I/O */
  165079             :           SgIfDirectiveStatement( const SgIfDirectiveStatementStorageClass& source );
  165080             : 
  165081             :  // private: // JJW hack
  165082             :        /*
  165083             :           name AST Memory Allocation Support Variables
  165084             :           Memory allocations support variables 
  165085             : 
  165086             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  165087             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  165088             :           and support the AST File I/O Mechanism.
  165089             :        */
  165090             :       /* */
  165091             : 
  165092             :     public:
  165093             : 
  165094             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  165095             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  165096             :       // virtual SgNode* addRegExpAttribute();
  165097             :       /*! \brief Support for AST matching using regular expression.
  165098             : 
  165099             :           This support is incomplete and the subject of current research to define 
  165100             :           RegEx trees to support inexact matching.
  165101             :        */
  165102             :           SgIfDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  165103             : 
  165104             : // *** COMMON CODE SECTION ENDS HERE ***
  165105             : 
  165106             : 
  165107             : // End of memberFunctionString
  165108             : // Start of memberFunctionString
  165109             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  165110             : 
  165111             :      // the generated cast function
  165112             :      // friend ROSE_DLL_API SgIfDirectiveStatement* isSgIfDirectiveStatement ( SgNode* s );
  165113             : 
  165114             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  165115             : 
  165116             : 
  165117             : // End of memberFunctionString
  165118             : // Start of memberFunctionString
  165119             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  165120             : 
  165121             :           void post_construction_initialization() override;
  165122             : 
  165123             : 
  165124             : // End of memberFunctionString
  165125             : 
  165126             : 
  165127             :      public: 
  165128             :          virtual ~SgIfDirectiveStatement();
  165129             : 
  165130             : 
  165131             :      public: 
  165132             :          SgIfDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  165133             :          SgIfDirectiveStatement(); 
  165134             : 
  165135             :     protected:
  165136             : 
  165137             :     friend struct Rose::Traits::generated::describe_node_t<SgIfDirectiveStatement>;
  165138             : 
  165139             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165140             : 
  165141             : 
  165142             :    };
  165143             : #endif
  165144             : 
  165145             : // postdeclarations for SgIfDirectiveStatement
  165146             : 
  165147             : /* #line 165148 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165148             : 
  165149             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  165150             : 
  165151             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165152             : 
  165153             : 
  165154             : /* #line 165155 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165155             : 
  165156             : 
  165157             : 
  165158             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165159             : 
  165160             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  165161             : //      This code is automatically generated for each 
  165162             : //      terminal and non-terminal within the defined 
  165163             : //      grammar.  There is a simple way to change the 
  165164             : //      code to fix bugs etc.  See the ROSE README file
  165165             : //      for directions.
  165166             : 
  165167             : // tps: (02/22/2010): Adding DLL export requirements
  165168             : #include "rosedll.h"
  165169             : 
  165170             : // predeclarations for SgDeadIfDirectiveStatement
  165171             : 
  165172             : /* #line 165173 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165173             : 
  165174             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  165175             : 
  165176             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165177             : 
  165178             : #if 1
  165179             : // Class Definition for SgDeadIfDirectiveStatement
  165180             : class ROSE_DLL_API SgDeadIfDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  165181             :    {
  165182             :      public:
  165183             : 
  165184             : 
  165185             : /* #line 165186 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165186             : 
  165187             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  165188             : // Start of memberFunctionString
  165189             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  165190             : 
  165191             : // *** COMMON CODE SECTION BEGINS HERE ***
  165192             : 
  165193             :     public:
  165194             : 
  165195             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  165196             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  165197             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  165198             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  165199             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  165200             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  165201             : 
  165202             :       /*! \brief returns a string representing the class name */
  165203             :           virtual std::string class_name() const override;
  165204             : 
  165205             :       /*! \brief returns new style SageIII enum values */
  165206             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  165207             : 
  165208             :       /*! \brief static variant value */
  165209             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  165210             :        // static const VariantT static_variant = V_SgDeadIfDirectiveStatement;
  165211             :           enum { static_variant = V_SgDeadIfDirectiveStatement };
  165212             : 
  165213             :        /* the generated cast function */
  165214             :       /*! \brief Casts pointer from base class to derived class */
  165215             :           ROSE_DLL_API friend       SgDeadIfDirectiveStatement* isSgDeadIfDirectiveStatement(       SgNode * s );
  165216             : 
  165217             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  165218             :           ROSE_DLL_API friend const SgDeadIfDirectiveStatement* isSgDeadIfDirectiveStatement( const SgNode * s );
  165219             : 
  165220             :      // ******************************************
  165221             :      // * Memory Pool / New / Delete
  165222             :      // ******************************************
  165223             : 
  165224             :      public:
  165225             :           /// \private
  165226             :           static const unsigned pool_size; //
  165227             :           /// \private
  165228             :           static std::vector<unsigned char *> pools; //
  165229             :           /// \private
  165230             :           static SgDeadIfDirectiveStatement * next_node; // 
  165231             : 
  165232             :           /// \private
  165233             :           static unsigned long initializeStorageClassArray(SgDeadIfDirectiveStatementStorageClass *); //
  165234             : 
  165235             :           /// \private
  165236             :           static void clearMemoryPool(); //
  165237             :           static void deleteMemoryPool(); //
  165238             : 
  165239             :           /// \private
  165240             :           static void extendMemoryPoolForFileIO(); //
  165241             : 
  165242             :           /// \private
  165243             :           static SgDeadIfDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  165244             :           /// \private
  165245             :           static SgDeadIfDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  165246             : 
  165247             :           /// \private
  165248             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  165249             :           /// \private
  165250             :           static void resetValidFreepointers(); //
  165251             :           /// \private
  165252             :           static unsigned long getNumberOfLastValidPointer(); //
  165253             : 
  165254             : 
  165255             : #if defined(INLINE_FUNCTIONS)
  165256             :       /*! \brief returns pointer to newly allocated IR node */
  165257             :           inline void *operator new (size_t size);
  165258             : #else
  165259             :       /*! \brief returns pointer to newly allocated IR node */
  165260             :           void *operator new (size_t size);
  165261             : #endif
  165262             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  165263             :           void operator delete (void* pointer, size_t size);
  165264             : 
  165265             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  165266           0 :           void operator delete (void* pointer)
  165267             :              {
  165268             :             // This is the generated delete operator...
  165269           0 :                SgDeadIfDirectiveStatement::operator delete (pointer,sizeof(SgDeadIfDirectiveStatement));
  165270             :              }
  165271             : 
  165272             :       /*! \brief Returns the total number of IR nodes of this type */
  165273             :           static size_t numberOfNodes();
  165274             : 
  165275             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  165276             :           static size_t memoryUsage();
  165277             : 
  165278             :       // End of scope which started in IR nodes specific code 
  165279             :       /* */
  165280             : 
  165281             :       /* name Internal Functions
  165282             :           \brief Internal functions ... incomplete-documentation
  165283             : 
  165284             :           These functions have been made public as part of the design, but they are suggested for internal use 
  165285             :           or by particularly knowledgeable users for specialized tools or applications.
  165286             : 
  165287             :           \internal We could not make these private because they are required by user for special purposes. And 
  165288             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  165289             :          
  165290             :        */
  165291             : 
  165292             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  165293             :        // overridden in every class by *generated* implementation
  165294             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  165295             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  165296             :        // MS: 06/28/02 container of names of variables or container indices 
  165297             :        // used used in the traversal to access AST successor nodes
  165298             :        // overridden in every class by *generated* implementation
  165299             :       /*! \brief container of names of variables or container indices used used in the traversal
  165300             :           to access AST successor nodes overridden in every class by *generated* implementation */
  165301             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  165302             : 
  165303             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  165304             :        // than all the vector copies. The implementation for these functions is generated for each class.
  165305             :       /*! \brief return number of children in the traversal successor list */
  165306             :           virtual size_t get_numberOfTraversalSuccessors() override;
  165307             :       /*! \brief index-based access to traversal successors by index number */
  165308             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  165309             :       /*! \brief index-based access to traversal successors by child node */
  165310             :           virtual size_t get_childIndex(SgNode *child) override;
  165311             : 
  165312             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  165313             :        // MS: 08/16/2002 method for generating RTI information
  165314             :       /*! \brief return C++ Runtime-Time-Information */
  165315             :           virtual RTIReturnType roseRTI() override;
  165316             : #endif
  165317             :       /* */
  165318             : 
  165319             : 
  165320             : 
  165321             :       /* name Deprecated Functions
  165322             :           \brief Deprecated functions ... incomplete-documentation
  165323             : 
  165324             :           These functions have been deprecated from use.
  165325             :        */
  165326             :       /* */
  165327             : 
  165328             :       /*! returns a C style string (char*) representing the class name */
  165329             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  165330             : 
  165331             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  165332             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  165333             : #if 0
  165334             :       /*! returns old style Sage II enum values */
  165335             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  165336             :       /*! returns old style Sage II enum values */
  165337             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  165338             : #endif
  165339             :       /* */
  165340             : 
  165341             : 
  165342             : 
  165343             : 
  165344             :      public:
  165345             :       /* name Traversal Support Functions
  165346             :           \brief Traversal support functions ... incomplete-documentation
  165347             : 
  165348             :           These functions have been made public as part of the design, but they are suggested for internal use 
  165349             :           or by particularly knowledgable users for specialized tools or applications.
  165350             :        */
  165351             :       /* */
  165352             : 
  165353             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  165354             :        // (inferior to ROSE traversal mechanism, experimental).
  165355             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  165356             :        */
  165357             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  165358             : 
  165359             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  165360             :       /*! \brief support for the classic visitor pattern done in GoF */
  165361             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  165362             : 
  165363             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  165364             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  165365             :        */
  165366             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  165367             : 
  165368             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  165369             :        */
  165370             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  165371             : 
  165372             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  165373             :        // This traversal helps support internal tools that call static member functions.
  165374             :        // note: this function operates on the memory pools.
  165375             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  165376             :        */
  165377             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  165378             :       /* */
  165379             : 
  165380             : 
  165381             :      public:
  165382             :       /* name Memory Allocation Functions
  165383             :           \brief Memory allocations functions ... incomplete-documentation
  165384             : 
  165385             :           These functions have been made public as part of the design, but they are suggested for internal use 
  165386             :           or by particularly knowledgable users for specialized tools or applications.
  165387             :        */
  165388             :       /* */
  165389             : 
  165390             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  165391             : 
  165392             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  165393             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  165394             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  165395             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  165396             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  165397             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  165398             :           being used with the AST File I/O mechanism.
  165399             :        */
  165400             :           virtual bool isInMemoryPool() override;
  165401             : 
  165402             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  165403             : 
  165404             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  165405             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  165406             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  165407             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  165408             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  165409             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  165410             :           being used with the AST File I/O mechanism.
  165411             :        */
  165412             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  165413             : 
  165414             :       // DQ (4/30/2006): Modified to be a const function.
  165415             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  165416             : 
  165417             :           This functions is part of general support for many possible tools to operate 
  165418             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  165419             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  165420             :           less than the set of pointers used by the AST file I/O. This is part of
  165421             :           work implemented by Andreas, and support tools such as the AST graph generation.
  165422             : 
  165423             :           \warning This function can return unexpected data members and thus the 
  165424             :                    order and the number of elements is unpredicable and subject 
  165425             :                    to change.
  165426             : 
  165427             :           \returns STL vector of pairs of SgNode* and strings
  165428             :        */
  165429             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  165430             : 
  165431             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  165432             : 
  165433             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  165434             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  165435             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  165436             : 
  165437             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  165438             :                    and subject to change.
  165439             :        */
  165440             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  165441             : 
  165442             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  165443             : 
  165444             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  165445             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  165446             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  165447             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  165448             : 
  165449             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  165450             : 
  165451             :           \returns long
  165452             :        */
  165453             :           virtual long getChildIndex( SgNode* childNode ) const override;
  165454             : 
  165455             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  165456             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165457             :       /* \brief Constructor for use by AST File I/O Mechanism
  165458             : 
  165459             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  165460             :           which obtained via fast binary file I/O from disk.
  165461             :        */
  165462             :        // SgDeadIfDirectiveStatement( SgDeadIfDirectiveStatementStorageClass& source );
  165463             : 
  165464             : 
  165465             : 
  165466             : 
  165467             : 
  165468             :  // JH (10/24/2005): methods added to support the ast file IO
  165469             :     private:
  165470             : 
  165471             :       /* name AST Memory Allocation Support Functions
  165472             :           \brief Memory allocations support....
  165473             : 
  165474             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  165475             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  165476             :           and support the AST File I/O Mechanism.
  165477             :        */
  165478             :       /* */
  165479             : 
  165480             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  165481             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  165482             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  165483             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  165484             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  165485             :           a correspinding one in the AST_FILE_IO class!
  165486             :        */
  165487             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  165488             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165489             :       /* \brief Typedef used for low level memory access.
  165490             :        */
  165491             :        // typedef unsigned char* TestType;
  165492             : 
  165493             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  165494             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165495             :       /* \brief Typedef used to hold memory addresses as values.
  165496             :        */
  165497             :        // typedef unsigned long  AddressType;
  165498             : 
  165499             : 
  165500             : 
  165501             :        // necessary, to have direct access to the p_freepointer and the private methods !
  165502             :       /*! \brief friend class declaration to support AST File I/O */
  165503             :           friend class AST_FILE_IO;
  165504             : 
  165505             :       /*! \brief friend class declaration to support AST File I/O */
  165506             :           friend class SgDeadIfDirectiveStatementStorageClass;
  165507             : 
  165508             :       /*! \brief friend class declaration to support AST File I/O */
  165509             :           friend class AstSpecificDataManagingClass;
  165510             : 
  165511             :       /*! \brief friend class declaration to support AST File I/O */
  165512             :           friend class AstSpecificDataManagingClassStorageClass;
  165513             :     public:
  165514             :       /*! \brief IR node constructor to support AST File I/O */
  165515             :           SgDeadIfDirectiveStatement( const SgDeadIfDirectiveStatementStorageClass& source );
  165516             : 
  165517             :  // private: // JJW hack
  165518             :        /*
  165519             :           name AST Memory Allocation Support Variables
  165520             :           Memory allocations support variables 
  165521             : 
  165522             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  165523             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  165524             :           and support the AST File I/O Mechanism.
  165525             :        */
  165526             :       /* */
  165527             : 
  165528             :     public:
  165529             : 
  165530             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  165531             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  165532             :       // virtual SgNode* addRegExpAttribute();
  165533             :       /*! \brief Support for AST matching using regular expression.
  165534             : 
  165535             :           This support is incomplete and the subject of current research to define 
  165536             :           RegEx trees to support inexact matching.
  165537             :        */
  165538             :           SgDeadIfDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  165539             : 
  165540             : // *** COMMON CODE SECTION ENDS HERE ***
  165541             : 
  165542             : 
  165543             : // End of memberFunctionString
  165544             : // Start of memberFunctionString
  165545             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  165546             : 
  165547             :      // the generated cast function
  165548             :      // friend ROSE_DLL_API SgDeadIfDirectiveStatement* isSgDeadIfDirectiveStatement ( SgNode* s );
  165549             : 
  165550             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  165551             : 
  165552             : 
  165553             : // End of memberFunctionString
  165554             : // Start of memberFunctionString
  165555             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  165556             : 
  165557             :           void post_construction_initialization() override;
  165558             : 
  165559             : 
  165560             : // End of memberFunctionString
  165561             : 
  165562             : 
  165563             :      public: 
  165564             :          virtual ~SgDeadIfDirectiveStatement();
  165565             : 
  165566             : 
  165567             :      public: 
  165568             :          SgDeadIfDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  165569             :          SgDeadIfDirectiveStatement(); 
  165570             : 
  165571             :     protected:
  165572             : 
  165573             :     friend struct Rose::Traits::generated::describe_node_t<SgDeadIfDirectiveStatement>;
  165574             : 
  165575             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165576             : 
  165577             : 
  165578             :    };
  165579             : #endif
  165580             : 
  165581             : // postdeclarations for SgDeadIfDirectiveStatement
  165582             : 
  165583             : /* #line 165584 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165584             : 
  165585             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  165586             : 
  165587             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165588             : 
  165589             : 
  165590             : /* #line 165591 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165591             : 
  165592             : 
  165593             : 
  165594             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165595             : 
  165596             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  165597             : //      This code is automatically generated for each 
  165598             : //      terminal and non-terminal within the defined 
  165599             : //      grammar.  There is a simple way to change the 
  165600             : //      code to fix bugs etc.  See the ROSE README file
  165601             : //      for directions.
  165602             : 
  165603             : // tps: (02/22/2010): Adding DLL export requirements
  165604             : #include "rosedll.h"
  165605             : 
  165606             : // predeclarations for SgElseDirectiveStatement
  165607             : 
  165608             : /* #line 165609 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165609             : 
  165610             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  165611             : 
  165612             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  165613             : 
  165614             : #if 1
  165615             : // Class Definition for SgElseDirectiveStatement
  165616             : class ROSE_DLL_API SgElseDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  165617             :    {
  165618             :      public:
  165619             : 
  165620             : 
  165621             : /* #line 165622 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  165622             : 
  165623             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  165624             : // Start of memberFunctionString
  165625             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  165626             : 
  165627             : // *** COMMON CODE SECTION BEGINS HERE ***
  165628             : 
  165629             :     public:
  165630             : 
  165631             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  165632             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  165633             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  165634             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  165635             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  165636             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  165637             : 
  165638             :       /*! \brief returns a string representing the class name */
  165639             :           virtual std::string class_name() const override;
  165640             : 
  165641             :       /*! \brief returns new style SageIII enum values */
  165642             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  165643             : 
  165644             :       /*! \brief static variant value */
  165645             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  165646             :        // static const VariantT static_variant = V_SgElseDirectiveStatement;
  165647             :           enum { static_variant = V_SgElseDirectiveStatement };
  165648             : 
  165649             :        /* the generated cast function */
  165650             :       /*! \brief Casts pointer from base class to derived class */
  165651             :           ROSE_DLL_API friend       SgElseDirectiveStatement* isSgElseDirectiveStatement(       SgNode * s );
  165652             : 
  165653             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  165654             :           ROSE_DLL_API friend const SgElseDirectiveStatement* isSgElseDirectiveStatement( const SgNode * s );
  165655             : 
  165656             :      // ******************************************
  165657             :      // * Memory Pool / New / Delete
  165658             :      // ******************************************
  165659             : 
  165660             :      public:
  165661             :           /// \private
  165662             :           static const unsigned pool_size; //
  165663             :           /// \private
  165664             :           static std::vector<unsigned char *> pools; //
  165665             :           /// \private
  165666             :           static SgElseDirectiveStatement * next_node; // 
  165667             : 
  165668             :           /// \private
  165669             :           static unsigned long initializeStorageClassArray(SgElseDirectiveStatementStorageClass *); //
  165670             : 
  165671             :           /// \private
  165672             :           static void clearMemoryPool(); //
  165673             :           static void deleteMemoryPool(); //
  165674             : 
  165675             :           /// \private
  165676             :           static void extendMemoryPoolForFileIO(); //
  165677             : 
  165678             :           /// \private
  165679             :           static SgElseDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  165680             :           /// \private
  165681             :           static SgElseDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  165682             : 
  165683             :           /// \private
  165684             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  165685             :           /// \private
  165686             :           static void resetValidFreepointers(); //
  165687             :           /// \private
  165688             :           static unsigned long getNumberOfLastValidPointer(); //
  165689             : 
  165690             : 
  165691             : #if defined(INLINE_FUNCTIONS)
  165692             :       /*! \brief returns pointer to newly allocated IR node */
  165693             :           inline void *operator new (size_t size);
  165694             : #else
  165695             :       /*! \brief returns pointer to newly allocated IR node */
  165696             :           void *operator new (size_t size);
  165697             : #endif
  165698             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  165699             :           void operator delete (void* pointer, size_t size);
  165700             : 
  165701             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  165702           0 :           void operator delete (void* pointer)
  165703             :              {
  165704             :             // This is the generated delete operator...
  165705           0 :                SgElseDirectiveStatement::operator delete (pointer,sizeof(SgElseDirectiveStatement));
  165706             :              }
  165707             : 
  165708             :       /*! \brief Returns the total number of IR nodes of this type */
  165709             :           static size_t numberOfNodes();
  165710             : 
  165711             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  165712             :           static size_t memoryUsage();
  165713             : 
  165714             :       // End of scope which started in IR nodes specific code 
  165715             :       /* */
  165716             : 
  165717             :       /* name Internal Functions
  165718             :           \brief Internal functions ... incomplete-documentation
  165719             : 
  165720             :           These functions have been made public as part of the design, but they are suggested for internal use 
  165721             :           or by particularly knowledgeable users for specialized tools or applications.
  165722             : 
  165723             :           \internal We could not make these private because they are required by user for special purposes. And 
  165724             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  165725             :          
  165726             :        */
  165727             : 
  165728             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  165729             :        // overridden in every class by *generated* implementation
  165730             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  165731             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  165732             :        // MS: 06/28/02 container of names of variables or container indices 
  165733             :        // used used in the traversal to access AST successor nodes
  165734             :        // overridden in every class by *generated* implementation
  165735             :       /*! \brief container of names of variables or container indices used used in the traversal
  165736             :           to access AST successor nodes overridden in every class by *generated* implementation */
  165737             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  165738             : 
  165739             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  165740             :        // than all the vector copies. The implementation for these functions is generated for each class.
  165741             :       /*! \brief return number of children in the traversal successor list */
  165742             :           virtual size_t get_numberOfTraversalSuccessors() override;
  165743             :       /*! \brief index-based access to traversal successors by index number */
  165744             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  165745             :       /*! \brief index-based access to traversal successors by child node */
  165746             :           virtual size_t get_childIndex(SgNode *child) override;
  165747             : 
  165748             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  165749             :        // MS: 08/16/2002 method for generating RTI information
  165750             :       /*! \brief return C++ Runtime-Time-Information */
  165751             :           virtual RTIReturnType roseRTI() override;
  165752             : #endif
  165753             :       /* */
  165754             : 
  165755             : 
  165756             : 
  165757             :       /* name Deprecated Functions
  165758             :           \brief Deprecated functions ... incomplete-documentation
  165759             : 
  165760             :           These functions have been deprecated from use.
  165761             :        */
  165762             :       /* */
  165763             : 
  165764             :       /*! returns a C style string (char*) representing the class name */
  165765             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  165766             : 
  165767             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  165768             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  165769             : #if 0
  165770             :       /*! returns old style Sage II enum values */
  165771             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  165772             :       /*! returns old style Sage II enum values */
  165773             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  165774             : #endif
  165775             :       /* */
  165776             : 
  165777             : 
  165778             : 
  165779             : 
  165780             :      public:
  165781             :       /* name Traversal Support Functions
  165782             :           \brief Traversal support functions ... incomplete-documentation
  165783             : 
  165784             :           These functions have been made public as part of the design, but they are suggested for internal use 
  165785             :           or by particularly knowledgable users for specialized tools or applications.
  165786             :        */
  165787             :       /* */
  165788             : 
  165789             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  165790             :        // (inferior to ROSE traversal mechanism, experimental).
  165791             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  165792             :        */
  165793             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  165794             : 
  165795             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  165796             :       /*! \brief support for the classic visitor pattern done in GoF */
  165797             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  165798             : 
  165799             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  165800             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  165801             :        */
  165802             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  165803             : 
  165804             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  165805             :        */
  165806             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  165807             : 
  165808             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  165809             :        // This traversal helps support internal tools that call static member functions.
  165810             :        // note: this function operates on the memory pools.
  165811             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  165812             :        */
  165813             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  165814             :       /* */
  165815             : 
  165816             : 
  165817             :      public:
  165818             :       /* name Memory Allocation Functions
  165819             :           \brief Memory allocations functions ... incomplete-documentation
  165820             : 
  165821             :           These functions have been made public as part of the design, but they are suggested for internal use 
  165822             :           or by particularly knowledgable users for specialized tools or applications.
  165823             :        */
  165824             :       /* */
  165825             : 
  165826             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  165827             : 
  165828             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  165829             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  165830             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  165831             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  165832             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  165833             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  165834             :           being used with the AST File I/O mechanism.
  165835             :        */
  165836             :           virtual bool isInMemoryPool() override;
  165837             : 
  165838             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  165839             : 
  165840             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  165841             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  165842             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  165843             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  165844             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  165845             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  165846             :           being used with the AST File I/O mechanism.
  165847             :        */
  165848             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  165849             : 
  165850             :       // DQ (4/30/2006): Modified to be a const function.
  165851             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  165852             : 
  165853             :           This functions is part of general support for many possible tools to operate 
  165854             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  165855             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  165856             :           less than the set of pointers used by the AST file I/O. This is part of
  165857             :           work implemented by Andreas, and support tools such as the AST graph generation.
  165858             : 
  165859             :           \warning This function can return unexpected data members and thus the 
  165860             :                    order and the number of elements is unpredicable and subject 
  165861             :                    to change.
  165862             : 
  165863             :           \returns STL vector of pairs of SgNode* and strings
  165864             :        */
  165865             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  165866             : 
  165867             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  165868             : 
  165869             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  165870             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  165871             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  165872             : 
  165873             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  165874             :                    and subject to change.
  165875             :        */
  165876             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  165877             : 
  165878             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  165879             : 
  165880             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  165881             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  165882             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  165883             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  165884             : 
  165885             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  165886             : 
  165887             :           \returns long
  165888             :        */
  165889             :           virtual long getChildIndex( SgNode* childNode ) const override;
  165890             : 
  165891             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  165892             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165893             :       /* \brief Constructor for use by AST File I/O Mechanism
  165894             : 
  165895             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  165896             :           which obtained via fast binary file I/O from disk.
  165897             :        */
  165898             :        // SgElseDirectiveStatement( SgElseDirectiveStatementStorageClass& source );
  165899             : 
  165900             : 
  165901             : 
  165902             : 
  165903             : 
  165904             :  // JH (10/24/2005): methods added to support the ast file IO
  165905             :     private:
  165906             : 
  165907             :       /* name AST Memory Allocation Support Functions
  165908             :           \brief Memory allocations support....
  165909             : 
  165910             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  165911             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  165912             :           and support the AST File I/O Mechanism.
  165913             :        */
  165914             :       /* */
  165915             : 
  165916             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  165917             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  165918             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  165919             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  165920             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  165921             :           a correspinding one in the AST_FILE_IO class!
  165922             :        */
  165923             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  165924             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165925             :       /* \brief Typedef used for low level memory access.
  165926             :        */
  165927             :        // typedef unsigned char* TestType;
  165928             : 
  165929             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  165930             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  165931             :       /* \brief Typedef used to hold memory addresses as values.
  165932             :        */
  165933             :        // typedef unsigned long  AddressType;
  165934             : 
  165935             : 
  165936             : 
  165937             :        // necessary, to have direct access to the p_freepointer and the private methods !
  165938             :       /*! \brief friend class declaration to support AST File I/O */
  165939             :           friend class AST_FILE_IO;
  165940             : 
  165941             :       /*! \brief friend class declaration to support AST File I/O */
  165942             :           friend class SgElseDirectiveStatementStorageClass;
  165943             : 
  165944             :       /*! \brief friend class declaration to support AST File I/O */
  165945             :           friend class AstSpecificDataManagingClass;
  165946             : 
  165947             :       /*! \brief friend class declaration to support AST File I/O */
  165948             :           friend class AstSpecificDataManagingClassStorageClass;
  165949             :     public:
  165950             :       /*! \brief IR node constructor to support AST File I/O */
  165951             :           SgElseDirectiveStatement( const SgElseDirectiveStatementStorageClass& source );
  165952             : 
  165953             :  // private: // JJW hack
  165954             :        /*
  165955             :           name AST Memory Allocation Support Variables
  165956             :           Memory allocations support variables 
  165957             : 
  165958             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  165959             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  165960             :           and support the AST File I/O Mechanism.
  165961             :        */
  165962             :       /* */
  165963             : 
  165964             :     public:
  165965             : 
  165966             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  165967             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  165968             :       // virtual SgNode* addRegExpAttribute();
  165969             :       /*! \brief Support for AST matching using regular expression.
  165970             : 
  165971             :           This support is incomplete and the subject of current research to define 
  165972             :           RegEx trees to support inexact matching.
  165973             :        */
  165974             :           SgElseDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  165975             : 
  165976             : // *** COMMON CODE SECTION ENDS HERE ***
  165977             : 
  165978             : 
  165979             : // End of memberFunctionString
  165980             : // Start of memberFunctionString
  165981             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  165982             : 
  165983             :      // the generated cast function
  165984             :      // friend ROSE_DLL_API SgElseDirectiveStatement* isSgElseDirectiveStatement ( SgNode* s );
  165985             : 
  165986             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  165987             : 
  165988             : 
  165989             : // End of memberFunctionString
  165990             : // Start of memberFunctionString
  165991             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  165992             : 
  165993             :           void post_construction_initialization() override;
  165994             : 
  165995             : 
  165996             : // End of memberFunctionString
  165997             : 
  165998             : 
  165999             :      public: 
  166000             :          virtual ~SgElseDirectiveStatement();
  166001             : 
  166002             : 
  166003             :      public: 
  166004             :          SgElseDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  166005             :          SgElseDirectiveStatement(); 
  166006             : 
  166007             :     protected:
  166008             : 
  166009             :     friend struct Rose::Traits::generated::describe_node_t<SgElseDirectiveStatement>;
  166010             : 
  166011             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166012             : 
  166013             : 
  166014             :    };
  166015             : #endif
  166016             : 
  166017             : // postdeclarations for SgElseDirectiveStatement
  166018             : 
  166019             : /* #line 166020 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166020             : 
  166021             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  166022             : 
  166023             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166024             : 
  166025             : 
  166026             : /* #line 166027 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166027             : 
  166028             : 
  166029             : 
  166030             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166031             : 
  166032             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  166033             : //      This code is automatically generated for each 
  166034             : //      terminal and non-terminal within the defined 
  166035             : //      grammar.  There is a simple way to change the 
  166036             : //      code to fix bugs etc.  See the ROSE README file
  166037             : //      for directions.
  166038             : 
  166039             : // tps: (02/22/2010): Adding DLL export requirements
  166040             : #include "rosedll.h"
  166041             : 
  166042             : // predeclarations for SgElseifDirectiveStatement
  166043             : 
  166044             : /* #line 166045 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166045             : 
  166046             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  166047             : 
  166048             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166049             : 
  166050             : #if 1
  166051             : // Class Definition for SgElseifDirectiveStatement
  166052             : class ROSE_DLL_API SgElseifDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  166053             :    {
  166054             :      public:
  166055             : 
  166056             : 
  166057             : /* #line 166058 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166058             : 
  166059             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  166060             : // Start of memberFunctionString
  166061             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  166062             : 
  166063             : // *** COMMON CODE SECTION BEGINS HERE ***
  166064             : 
  166065             :     public:
  166066             : 
  166067             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  166068             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  166069             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  166070             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  166071             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  166072             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  166073             : 
  166074             :       /*! \brief returns a string representing the class name */
  166075             :           virtual std::string class_name() const override;
  166076             : 
  166077             :       /*! \brief returns new style SageIII enum values */
  166078             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  166079             : 
  166080             :       /*! \brief static variant value */
  166081             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  166082             :        // static const VariantT static_variant = V_SgElseifDirectiveStatement;
  166083             :           enum { static_variant = V_SgElseifDirectiveStatement };
  166084             : 
  166085             :        /* the generated cast function */
  166086             :       /*! \brief Casts pointer from base class to derived class */
  166087             :           ROSE_DLL_API friend       SgElseifDirectiveStatement* isSgElseifDirectiveStatement(       SgNode * s );
  166088             : 
  166089             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  166090             :           ROSE_DLL_API friend const SgElseifDirectiveStatement* isSgElseifDirectiveStatement( const SgNode * s );
  166091             : 
  166092             :      // ******************************************
  166093             :      // * Memory Pool / New / Delete
  166094             :      // ******************************************
  166095             : 
  166096             :      public:
  166097             :           /// \private
  166098             :           static const unsigned pool_size; //
  166099             :           /// \private
  166100             :           static std::vector<unsigned char *> pools; //
  166101             :           /// \private
  166102             :           static SgElseifDirectiveStatement * next_node; // 
  166103             : 
  166104             :           /// \private
  166105             :           static unsigned long initializeStorageClassArray(SgElseifDirectiveStatementStorageClass *); //
  166106             : 
  166107             :           /// \private
  166108             :           static void clearMemoryPool(); //
  166109             :           static void deleteMemoryPool(); //
  166110             : 
  166111             :           /// \private
  166112             :           static void extendMemoryPoolForFileIO(); //
  166113             : 
  166114             :           /// \private
  166115             :           static SgElseifDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  166116             :           /// \private
  166117             :           static SgElseifDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  166118             : 
  166119             :           /// \private
  166120             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  166121             :           /// \private
  166122             :           static void resetValidFreepointers(); //
  166123             :           /// \private
  166124             :           static unsigned long getNumberOfLastValidPointer(); //
  166125             : 
  166126             : 
  166127             : #if defined(INLINE_FUNCTIONS)
  166128             :       /*! \brief returns pointer to newly allocated IR node */
  166129             :           inline void *operator new (size_t size);
  166130             : #else
  166131             :       /*! \brief returns pointer to newly allocated IR node */
  166132             :           void *operator new (size_t size);
  166133             : #endif
  166134             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  166135             :           void operator delete (void* pointer, size_t size);
  166136             : 
  166137             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  166138           0 :           void operator delete (void* pointer)
  166139             :              {
  166140             :             // This is the generated delete operator...
  166141           0 :                SgElseifDirectiveStatement::operator delete (pointer,sizeof(SgElseifDirectiveStatement));
  166142             :              }
  166143             : 
  166144             :       /*! \brief Returns the total number of IR nodes of this type */
  166145             :           static size_t numberOfNodes();
  166146             : 
  166147             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  166148             :           static size_t memoryUsage();
  166149             : 
  166150             :       // End of scope which started in IR nodes specific code 
  166151             :       /* */
  166152             : 
  166153             :       /* name Internal Functions
  166154             :           \brief Internal functions ... incomplete-documentation
  166155             : 
  166156             :           These functions have been made public as part of the design, but they are suggested for internal use 
  166157             :           or by particularly knowledgeable users for specialized tools or applications.
  166158             : 
  166159             :           \internal We could not make these private because they are required by user for special purposes. And 
  166160             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  166161             :          
  166162             :        */
  166163             : 
  166164             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  166165             :        // overridden in every class by *generated* implementation
  166166             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  166167             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  166168             :        // MS: 06/28/02 container of names of variables or container indices 
  166169             :        // used used in the traversal to access AST successor nodes
  166170             :        // overridden in every class by *generated* implementation
  166171             :       /*! \brief container of names of variables or container indices used used in the traversal
  166172             :           to access AST successor nodes overridden in every class by *generated* implementation */
  166173             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  166174             : 
  166175             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  166176             :        // than all the vector copies. The implementation for these functions is generated for each class.
  166177             :       /*! \brief return number of children in the traversal successor list */
  166178             :           virtual size_t get_numberOfTraversalSuccessors() override;
  166179             :       /*! \brief index-based access to traversal successors by index number */
  166180             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  166181             :       /*! \brief index-based access to traversal successors by child node */
  166182             :           virtual size_t get_childIndex(SgNode *child) override;
  166183             : 
  166184             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  166185             :        // MS: 08/16/2002 method for generating RTI information
  166186             :       /*! \brief return C++ Runtime-Time-Information */
  166187             :           virtual RTIReturnType roseRTI() override;
  166188             : #endif
  166189             :       /* */
  166190             : 
  166191             : 
  166192             : 
  166193             :       /* name Deprecated Functions
  166194             :           \brief Deprecated functions ... incomplete-documentation
  166195             : 
  166196             :           These functions have been deprecated from use.
  166197             :        */
  166198             :       /* */
  166199             : 
  166200             :       /*! returns a C style string (char*) representing the class name */
  166201             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  166202             : 
  166203             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  166204             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  166205             : #if 0
  166206             :       /*! returns old style Sage II enum values */
  166207             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  166208             :       /*! returns old style Sage II enum values */
  166209             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  166210             : #endif
  166211             :       /* */
  166212             : 
  166213             : 
  166214             : 
  166215             : 
  166216             :      public:
  166217             :       /* name Traversal Support Functions
  166218             :           \brief Traversal support functions ... incomplete-documentation
  166219             : 
  166220             :           These functions have been made public as part of the design, but they are suggested for internal use 
  166221             :           or by particularly knowledgable users for specialized tools or applications.
  166222             :        */
  166223             :       /* */
  166224             : 
  166225             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  166226             :        // (inferior to ROSE traversal mechanism, experimental).
  166227             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  166228             :        */
  166229             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  166230             : 
  166231             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  166232             :       /*! \brief support for the classic visitor pattern done in GoF */
  166233             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  166234             : 
  166235             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  166236             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  166237             :        */
  166238             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  166239             : 
  166240             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  166241             :        */
  166242             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  166243             : 
  166244             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  166245             :        // This traversal helps support internal tools that call static member functions.
  166246             :        // note: this function operates on the memory pools.
  166247             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  166248             :        */
  166249             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  166250             :       /* */
  166251             : 
  166252             : 
  166253             :      public:
  166254             :       /* name Memory Allocation Functions
  166255             :           \brief Memory allocations functions ... incomplete-documentation
  166256             : 
  166257             :           These functions have been made public as part of the design, but they are suggested for internal use 
  166258             :           or by particularly knowledgable users for specialized tools or applications.
  166259             :        */
  166260             :       /* */
  166261             : 
  166262             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  166263             : 
  166264             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  166265             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  166266             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  166267             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  166268             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  166269             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  166270             :           being used with the AST File I/O mechanism.
  166271             :        */
  166272             :           virtual bool isInMemoryPool() override;
  166273             : 
  166274             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  166275             : 
  166276             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  166277             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  166278             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  166279             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  166280             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  166281             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  166282             :           being used with the AST File I/O mechanism.
  166283             :        */
  166284             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  166285             : 
  166286             :       // DQ (4/30/2006): Modified to be a const function.
  166287             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  166288             : 
  166289             :           This functions is part of general support for many possible tools to operate 
  166290             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  166291             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  166292             :           less than the set of pointers used by the AST file I/O. This is part of
  166293             :           work implemented by Andreas, and support tools such as the AST graph generation.
  166294             : 
  166295             :           \warning This function can return unexpected data members and thus the 
  166296             :                    order and the number of elements is unpredicable and subject 
  166297             :                    to change.
  166298             : 
  166299             :           \returns STL vector of pairs of SgNode* and strings
  166300             :        */
  166301             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  166302             : 
  166303             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  166304             : 
  166305             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  166306             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  166307             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  166308             : 
  166309             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  166310             :                    and subject to change.
  166311             :        */
  166312             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  166313             : 
  166314             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  166315             : 
  166316             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  166317             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  166318             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  166319             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  166320             : 
  166321             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  166322             : 
  166323             :           \returns long
  166324             :        */
  166325             :           virtual long getChildIndex( SgNode* childNode ) const override;
  166326             : 
  166327             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  166328             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  166329             :       /* \brief Constructor for use by AST File I/O Mechanism
  166330             : 
  166331             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  166332             :           which obtained via fast binary file I/O from disk.
  166333             :        */
  166334             :        // SgElseifDirectiveStatement( SgElseifDirectiveStatementStorageClass& source );
  166335             : 
  166336             : 
  166337             : 
  166338             : 
  166339             : 
  166340             :  // JH (10/24/2005): methods added to support the ast file IO
  166341             :     private:
  166342             : 
  166343             :       /* name AST Memory Allocation Support Functions
  166344             :           \brief Memory allocations support....
  166345             : 
  166346             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  166347             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  166348             :           and support the AST File I/O Mechanism.
  166349             :        */
  166350             :       /* */
  166351             : 
  166352             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  166353             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  166354             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  166355             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  166356             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  166357             :           a correspinding one in the AST_FILE_IO class!
  166358             :        */
  166359             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  166360             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  166361             :       /* \brief Typedef used for low level memory access.
  166362             :        */
  166363             :        // typedef unsigned char* TestType;
  166364             : 
  166365             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  166366             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  166367             :       /* \brief Typedef used to hold memory addresses as values.
  166368             :        */
  166369             :        // typedef unsigned long  AddressType;
  166370             : 
  166371             : 
  166372             : 
  166373             :        // necessary, to have direct access to the p_freepointer and the private methods !
  166374             :       /*! \brief friend class declaration to support AST File I/O */
  166375             :           friend class AST_FILE_IO;
  166376             : 
  166377             :       /*! \brief friend class declaration to support AST File I/O */
  166378             :           friend class SgElseifDirectiveStatementStorageClass;
  166379             : 
  166380             :       /*! \brief friend class declaration to support AST File I/O */
  166381             :           friend class AstSpecificDataManagingClass;
  166382             : 
  166383             :       /*! \brief friend class declaration to support AST File I/O */
  166384             :           friend class AstSpecificDataManagingClassStorageClass;
  166385             :     public:
  166386             :       /*! \brief IR node constructor to support AST File I/O */
  166387             :           SgElseifDirectiveStatement( const SgElseifDirectiveStatementStorageClass& source );
  166388             : 
  166389             :  // private: // JJW hack
  166390             :        /*
  166391             :           name AST Memory Allocation Support Variables
  166392             :           Memory allocations support variables 
  166393             : 
  166394             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  166395             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  166396             :           and support the AST File I/O Mechanism.
  166397             :        */
  166398             :       /* */
  166399             : 
  166400             :     public:
  166401             : 
  166402             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  166403             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  166404             :       // virtual SgNode* addRegExpAttribute();
  166405             :       /*! \brief Support for AST matching using regular expression.
  166406             : 
  166407             :           This support is incomplete and the subject of current research to define 
  166408             :           RegEx trees to support inexact matching.
  166409             :        */
  166410             :           SgElseifDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  166411             : 
  166412             : // *** COMMON CODE SECTION ENDS HERE ***
  166413             : 
  166414             : 
  166415             : // End of memberFunctionString
  166416             : // Start of memberFunctionString
  166417             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  166418             : 
  166419             :      // the generated cast function
  166420             :      // friend ROSE_DLL_API SgElseifDirectiveStatement* isSgElseifDirectiveStatement ( SgNode* s );
  166421             : 
  166422             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  166423             : 
  166424             : 
  166425             : // End of memberFunctionString
  166426             : // Start of memberFunctionString
  166427             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  166428             : 
  166429             :           void post_construction_initialization() override;
  166430             : 
  166431             : 
  166432             : // End of memberFunctionString
  166433             : 
  166434             : 
  166435             :      public: 
  166436             :          virtual ~SgElseifDirectiveStatement();
  166437             : 
  166438             : 
  166439             :      public: 
  166440             :          SgElseifDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  166441             :          SgElseifDirectiveStatement(); 
  166442             : 
  166443             :     protected:
  166444             : 
  166445             :     friend struct Rose::Traits::generated::describe_node_t<SgElseifDirectiveStatement>;
  166446             : 
  166447             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166448             : 
  166449             : 
  166450             :    };
  166451             : #endif
  166452             : 
  166453             : // postdeclarations for SgElseifDirectiveStatement
  166454             : 
  166455             : /* #line 166456 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166456             : 
  166457             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  166458             : 
  166459             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166460             : 
  166461             : 
  166462             : /* #line 166463 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166463             : 
  166464             : 
  166465             : 
  166466             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166467             : 
  166468             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  166469             : //      This code is automatically generated for each 
  166470             : //      terminal and non-terminal within the defined 
  166471             : //      grammar.  There is a simple way to change the 
  166472             : //      code to fix bugs etc.  See the ROSE README file
  166473             : //      for directions.
  166474             : 
  166475             : // tps: (02/22/2010): Adding DLL export requirements
  166476             : #include "rosedll.h"
  166477             : 
  166478             : // predeclarations for SgEndifDirectiveStatement
  166479             : 
  166480             : /* #line 166481 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166481             : 
  166482             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  166483             : 
  166484             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166485             : 
  166486             : #if 1
  166487             : // Class Definition for SgEndifDirectiveStatement
  166488             : class ROSE_DLL_API SgEndifDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  166489             :    {
  166490             :      public:
  166491             : 
  166492             : 
  166493             : /* #line 166494 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166494             : 
  166495             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  166496             : // Start of memberFunctionString
  166497             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  166498             : 
  166499             : // *** COMMON CODE SECTION BEGINS HERE ***
  166500             : 
  166501             :     public:
  166502             : 
  166503             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  166504             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  166505             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  166506             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  166507             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  166508             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  166509             : 
  166510             :       /*! \brief returns a string representing the class name */
  166511             :           virtual std::string class_name() const override;
  166512             : 
  166513             :       /*! \brief returns new style SageIII enum values */
  166514             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  166515             : 
  166516             :       /*! \brief static variant value */
  166517             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  166518             :        // static const VariantT static_variant = V_SgEndifDirectiveStatement;
  166519             :           enum { static_variant = V_SgEndifDirectiveStatement };
  166520             : 
  166521             :        /* the generated cast function */
  166522             :       /*! \brief Casts pointer from base class to derived class */
  166523             :           ROSE_DLL_API friend       SgEndifDirectiveStatement* isSgEndifDirectiveStatement(       SgNode * s );
  166524             : 
  166525             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  166526             :           ROSE_DLL_API friend const SgEndifDirectiveStatement* isSgEndifDirectiveStatement( const SgNode * s );
  166527             : 
  166528             :      // ******************************************
  166529             :      // * Memory Pool / New / Delete
  166530             :      // ******************************************
  166531             : 
  166532             :      public:
  166533             :           /// \private
  166534             :           static const unsigned pool_size; //
  166535             :           /// \private
  166536             :           static std::vector<unsigned char *> pools; //
  166537             :           /// \private
  166538             :           static SgEndifDirectiveStatement * next_node; // 
  166539             : 
  166540             :           /// \private
  166541             :           static unsigned long initializeStorageClassArray(SgEndifDirectiveStatementStorageClass *); //
  166542             : 
  166543             :           /// \private
  166544             :           static void clearMemoryPool(); //
  166545             :           static void deleteMemoryPool(); //
  166546             : 
  166547             :           /// \private
  166548             :           static void extendMemoryPoolForFileIO(); //
  166549             : 
  166550             :           /// \private
  166551             :           static SgEndifDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  166552             :           /// \private
  166553             :           static SgEndifDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  166554             : 
  166555             :           /// \private
  166556             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  166557             :           /// \private
  166558             :           static void resetValidFreepointers(); //
  166559             :           /// \private
  166560             :           static unsigned long getNumberOfLastValidPointer(); //
  166561             : 
  166562             : 
  166563             : #if defined(INLINE_FUNCTIONS)
  166564             :       /*! \brief returns pointer to newly allocated IR node */
  166565             :           inline void *operator new (size_t size);
  166566             : #else
  166567             :       /*! \brief returns pointer to newly allocated IR node */
  166568             :           void *operator new (size_t size);
  166569             : #endif
  166570             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  166571             :           void operator delete (void* pointer, size_t size);
  166572             : 
  166573             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  166574           0 :           void operator delete (void* pointer)
  166575             :              {
  166576             :             // This is the generated delete operator...
  166577           0 :                SgEndifDirectiveStatement::operator delete (pointer,sizeof(SgEndifDirectiveStatement));
  166578             :              }
  166579             : 
  166580             :       /*! \brief Returns the total number of IR nodes of this type */
  166581             :           static size_t numberOfNodes();
  166582             : 
  166583             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  166584             :           static size_t memoryUsage();
  166585             : 
  166586             :       // End of scope which started in IR nodes specific code 
  166587             :       /* */
  166588             : 
  166589             :       /* name Internal Functions
  166590             :           \brief Internal functions ... incomplete-documentation
  166591             : 
  166592             :           These functions have been made public as part of the design, but they are suggested for internal use 
  166593             :           or by particularly knowledgeable users for specialized tools or applications.
  166594             : 
  166595             :           \internal We could not make these private because they are required by user for special purposes. And 
  166596             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  166597             :          
  166598             :        */
  166599             : 
  166600             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  166601             :        // overridden in every class by *generated* implementation
  166602             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  166603             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  166604             :        // MS: 06/28/02 container of names of variables or container indices 
  166605             :        // used used in the traversal to access AST successor nodes
  166606             :        // overridden in every class by *generated* implementation
  166607             :       /*! \brief container of names of variables or container indices used used in the traversal
  166608             :           to access AST successor nodes overridden in every class by *generated* implementation */
  166609             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  166610             : 
  166611             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  166612             :        // than all the vector copies. The implementation for these functions is generated for each class.
  166613             :       /*! \brief return number of children in the traversal successor list */
  166614             :           virtual size_t get_numberOfTraversalSuccessors() override;
  166615             :       /*! \brief index-based access to traversal successors by index number */
  166616             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  166617             :       /*! \brief index-based access to traversal successors by child node */
  166618             :           virtual size_t get_childIndex(SgNode *child) override;
  166619             : 
  166620             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  166621             :        // MS: 08/16/2002 method for generating RTI information
  166622             :       /*! \brief return C++ Runtime-Time-Information */
  166623             :           virtual RTIReturnType roseRTI() override;
  166624             : #endif
  166625             :       /* */
  166626             : 
  166627             : 
  166628             : 
  166629             :       /* name Deprecated Functions
  166630             :           \brief Deprecated functions ... incomplete-documentation
  166631             : 
  166632             :           These functions have been deprecated from use.
  166633             :        */
  166634             :       /* */
  166635             : 
  166636             :       /*! returns a C style string (char*) representing the class name */
  166637             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  166638             : 
  166639             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  166640             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  166641             : #if 0
  166642             :       /*! returns old style Sage II enum values */
  166643             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  166644             :       /*! returns old style Sage II enum values */
  166645             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  166646             : #endif
  166647             :       /* */
  166648             : 
  166649             : 
  166650             : 
  166651             : 
  166652             :      public:
  166653             :       /* name Traversal Support Functions
  166654             :           \brief Traversal support functions ... incomplete-documentation
  166655             : 
  166656             :           These functions have been made public as part of the design, but they are suggested for internal use 
  166657             :           or by particularly knowledgable users for specialized tools or applications.
  166658             :        */
  166659             :       /* */
  166660             : 
  166661             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  166662             :        // (inferior to ROSE traversal mechanism, experimental).
  166663             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  166664             :        */
  166665             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  166666             : 
  166667             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  166668             :       /*! \brief support for the classic visitor pattern done in GoF */
  166669             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  166670             : 
  166671             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  166672             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  166673             :        */
  166674             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  166675             : 
  166676             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  166677             :        */
  166678             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  166679             : 
  166680             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  166681             :        // This traversal helps support internal tools that call static member functions.
  166682             :        // note: this function operates on the memory pools.
  166683             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  166684             :        */
  166685             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  166686             :       /* */
  166687             : 
  166688             : 
  166689             :      public:
  166690             :       /* name Memory Allocation Functions
  166691             :           \brief Memory allocations functions ... incomplete-documentation
  166692             : 
  166693             :           These functions have been made public as part of the design, but they are suggested for internal use 
  166694             :           or by particularly knowledgable users for specialized tools or applications.
  166695             :        */
  166696             :       /* */
  166697             : 
  166698             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  166699             : 
  166700             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  166701             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  166702             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  166703             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  166704             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  166705             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  166706             :           being used with the AST File I/O mechanism.
  166707             :        */
  166708             :           virtual bool isInMemoryPool() override;
  166709             : 
  166710             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  166711             : 
  166712             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  166713             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  166714             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  166715             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  166716             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  166717             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  166718             :           being used with the AST File I/O mechanism.
  166719             :        */
  166720             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  166721             : 
  166722             :       // DQ (4/30/2006): Modified to be a const function.
  166723             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  166724             : 
  166725             :           This functions is part of general support for many possible tools to operate 
  166726             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  166727             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  166728             :           less than the set of pointers used by the AST file I/O. This is part of
  166729             :           work implemented by Andreas, and support tools such as the AST graph generation.
  166730             : 
  166731             :           \warning This function can return unexpected data members and thus the 
  166732             :                    order and the number of elements is unpredicable and subject 
  166733             :                    to change.
  166734             : 
  166735             :           \returns STL vector of pairs of SgNode* and strings
  166736             :        */
  166737             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  166738             : 
  166739             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  166740             : 
  166741             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  166742             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  166743             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  166744             : 
  166745             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  166746             :                    and subject to change.
  166747             :        */
  166748             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  166749             : 
  166750             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  166751             : 
  166752             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  166753             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  166754             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  166755             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  166756             : 
  166757             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  166758             : 
  166759             :           \returns long
  166760             :        */
  166761             :           virtual long getChildIndex( SgNode* childNode ) const override;
  166762             : 
  166763             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  166764             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  166765             :       /* \brief Constructor for use by AST File I/O Mechanism
  166766             : 
  166767             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  166768             :           which obtained via fast binary file I/O from disk.
  166769             :        */
  166770             :        // SgEndifDirectiveStatement( SgEndifDirectiveStatementStorageClass& source );
  166771             : 
  166772             : 
  166773             : 
  166774             : 
  166775             : 
  166776             :  // JH (10/24/2005): methods added to support the ast file IO
  166777             :     private:
  166778             : 
  166779             :       /* name AST Memory Allocation Support Functions
  166780             :           \brief Memory allocations support....
  166781             : 
  166782             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  166783             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  166784             :           and support the AST File I/O Mechanism.
  166785             :        */
  166786             :       /* */
  166787             : 
  166788             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  166789             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  166790             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  166791             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  166792             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  166793             :           a correspinding one in the AST_FILE_IO class!
  166794             :        */
  166795             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  166796             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  166797             :       /* \brief Typedef used for low level memory access.
  166798             :        */
  166799             :        // typedef unsigned char* TestType;
  166800             : 
  166801             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  166802             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  166803             :       /* \brief Typedef used to hold memory addresses as values.
  166804             :        */
  166805             :        // typedef unsigned long  AddressType;
  166806             : 
  166807             : 
  166808             : 
  166809             :        // necessary, to have direct access to the p_freepointer and the private methods !
  166810             :       /*! \brief friend class declaration to support AST File I/O */
  166811             :           friend class AST_FILE_IO;
  166812             : 
  166813             :       /*! \brief friend class declaration to support AST File I/O */
  166814             :           friend class SgEndifDirectiveStatementStorageClass;
  166815             : 
  166816             :       /*! \brief friend class declaration to support AST File I/O */
  166817             :           friend class AstSpecificDataManagingClass;
  166818             : 
  166819             :       /*! \brief friend class declaration to support AST File I/O */
  166820             :           friend class AstSpecificDataManagingClassStorageClass;
  166821             :     public:
  166822             :       /*! \brief IR node constructor to support AST File I/O */
  166823             :           SgEndifDirectiveStatement( const SgEndifDirectiveStatementStorageClass& source );
  166824             : 
  166825             :  // private: // JJW hack
  166826             :        /*
  166827             :           name AST Memory Allocation Support Variables
  166828             :           Memory allocations support variables 
  166829             : 
  166830             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  166831             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  166832             :           and support the AST File I/O Mechanism.
  166833             :        */
  166834             :       /* */
  166835             : 
  166836             :     public:
  166837             : 
  166838             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  166839             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  166840             :       // virtual SgNode* addRegExpAttribute();
  166841             :       /*! \brief Support for AST matching using regular expression.
  166842             : 
  166843             :           This support is incomplete and the subject of current research to define 
  166844             :           RegEx trees to support inexact matching.
  166845             :        */
  166846             :           SgEndifDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  166847             : 
  166848             : // *** COMMON CODE SECTION ENDS HERE ***
  166849             : 
  166850             : 
  166851             : // End of memberFunctionString
  166852             : // Start of memberFunctionString
  166853             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  166854             : 
  166855             :      // the generated cast function
  166856             :      // friend ROSE_DLL_API SgEndifDirectiveStatement* isSgEndifDirectiveStatement ( SgNode* s );
  166857             : 
  166858             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  166859             : 
  166860             : 
  166861             : // End of memberFunctionString
  166862             : // Start of memberFunctionString
  166863             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  166864             : 
  166865             :           void post_construction_initialization() override;
  166866             : 
  166867             : 
  166868             : // End of memberFunctionString
  166869             : 
  166870             : 
  166871             :      public: 
  166872             :          virtual ~SgEndifDirectiveStatement();
  166873             : 
  166874             : 
  166875             :      public: 
  166876             :          SgEndifDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  166877             :          SgEndifDirectiveStatement(); 
  166878             : 
  166879             :     protected:
  166880             : 
  166881             :     friend struct Rose::Traits::generated::describe_node_t<SgEndifDirectiveStatement>;
  166882             : 
  166883             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166884             : 
  166885             : 
  166886             :    };
  166887             : #endif
  166888             : 
  166889             : // postdeclarations for SgEndifDirectiveStatement
  166890             : 
  166891             : /* #line 166892 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166892             : 
  166893             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  166894             : 
  166895             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166896             : 
  166897             : 
  166898             : /* #line 166899 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166899             : 
  166900             : 
  166901             : 
  166902             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166903             : 
  166904             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  166905             : //      This code is automatically generated for each 
  166906             : //      terminal and non-terminal within the defined 
  166907             : //      grammar.  There is a simple way to change the 
  166908             : //      code to fix bugs etc.  See the ROSE README file
  166909             : //      for directions.
  166910             : 
  166911             : // tps: (02/22/2010): Adding DLL export requirements
  166912             : #include "rosedll.h"
  166913             : 
  166914             : // predeclarations for SgLineDirectiveStatement
  166915             : 
  166916             : /* #line 166917 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166917             : 
  166918             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  166919             : 
  166920             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  166921             : 
  166922             : #if 1
  166923             : // Class Definition for SgLineDirectiveStatement
  166924             : class ROSE_DLL_API SgLineDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  166925             :    {
  166926             :      public:
  166927             : 
  166928             : 
  166929             : /* #line 166930 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  166930             : 
  166931             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  166932             : // Start of memberFunctionString
  166933             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  166934             : 
  166935             : // *** COMMON CODE SECTION BEGINS HERE ***
  166936             : 
  166937             :     public:
  166938             : 
  166939             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  166940             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  166941             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  166942             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  166943             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  166944             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  166945             : 
  166946             :       /*! \brief returns a string representing the class name */
  166947             :           virtual std::string class_name() const override;
  166948             : 
  166949             :       /*! \brief returns new style SageIII enum values */
  166950             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  166951             : 
  166952             :       /*! \brief static variant value */
  166953             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  166954             :        // static const VariantT static_variant = V_SgLineDirectiveStatement;
  166955             :           enum { static_variant = V_SgLineDirectiveStatement };
  166956             : 
  166957             :        /* the generated cast function */
  166958             :       /*! \brief Casts pointer from base class to derived class */
  166959             :           ROSE_DLL_API friend       SgLineDirectiveStatement* isSgLineDirectiveStatement(       SgNode * s );
  166960             : 
  166961             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  166962             :           ROSE_DLL_API friend const SgLineDirectiveStatement* isSgLineDirectiveStatement( const SgNode * s );
  166963             : 
  166964             :      // ******************************************
  166965             :      // * Memory Pool / New / Delete
  166966             :      // ******************************************
  166967             : 
  166968             :      public:
  166969             :           /// \private
  166970             :           static const unsigned pool_size; //
  166971             :           /// \private
  166972             :           static std::vector<unsigned char *> pools; //
  166973             :           /// \private
  166974             :           static SgLineDirectiveStatement * next_node; // 
  166975             : 
  166976             :           /// \private
  166977             :           static unsigned long initializeStorageClassArray(SgLineDirectiveStatementStorageClass *); //
  166978             : 
  166979             :           /// \private
  166980             :           static void clearMemoryPool(); //
  166981             :           static void deleteMemoryPool(); //
  166982             : 
  166983             :           /// \private
  166984             :           static void extendMemoryPoolForFileIO(); //
  166985             : 
  166986             :           /// \private
  166987             :           static SgLineDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  166988             :           /// \private
  166989             :           static SgLineDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  166990             : 
  166991             :           /// \private
  166992             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  166993             :           /// \private
  166994             :           static void resetValidFreepointers(); //
  166995             :           /// \private
  166996             :           static unsigned long getNumberOfLastValidPointer(); //
  166997             : 
  166998             : 
  166999             : #if defined(INLINE_FUNCTIONS)
  167000             :       /*! \brief returns pointer to newly allocated IR node */
  167001             :           inline void *operator new (size_t size);
  167002             : #else
  167003             :       /*! \brief returns pointer to newly allocated IR node */
  167004             :           void *operator new (size_t size);
  167005             : #endif
  167006             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  167007             :           void operator delete (void* pointer, size_t size);
  167008             : 
  167009             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  167010           0 :           void operator delete (void* pointer)
  167011             :              {
  167012             :             // This is the generated delete operator...
  167013           0 :                SgLineDirectiveStatement::operator delete (pointer,sizeof(SgLineDirectiveStatement));
  167014             :              }
  167015             : 
  167016             :       /*! \brief Returns the total number of IR nodes of this type */
  167017             :           static size_t numberOfNodes();
  167018             : 
  167019             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  167020             :           static size_t memoryUsage();
  167021             : 
  167022             :       // End of scope which started in IR nodes specific code 
  167023             :       /* */
  167024             : 
  167025             :       /* name Internal Functions
  167026             :           \brief Internal functions ... incomplete-documentation
  167027             : 
  167028             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167029             :           or by particularly knowledgeable users for specialized tools or applications.
  167030             : 
  167031             :           \internal We could not make these private because they are required by user for special purposes. And 
  167032             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  167033             :          
  167034             :        */
  167035             : 
  167036             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  167037             :        // overridden in every class by *generated* implementation
  167038             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  167039             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  167040             :        // MS: 06/28/02 container of names of variables or container indices 
  167041             :        // used used in the traversal to access AST successor nodes
  167042             :        // overridden in every class by *generated* implementation
  167043             :       /*! \brief container of names of variables or container indices used used in the traversal
  167044             :           to access AST successor nodes overridden in every class by *generated* implementation */
  167045             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  167046             : 
  167047             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  167048             :        // than all the vector copies. The implementation for these functions is generated for each class.
  167049             :       /*! \brief return number of children in the traversal successor list */
  167050             :           virtual size_t get_numberOfTraversalSuccessors() override;
  167051             :       /*! \brief index-based access to traversal successors by index number */
  167052             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  167053             :       /*! \brief index-based access to traversal successors by child node */
  167054             :           virtual size_t get_childIndex(SgNode *child) override;
  167055             : 
  167056             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  167057             :        // MS: 08/16/2002 method for generating RTI information
  167058             :       /*! \brief return C++ Runtime-Time-Information */
  167059             :           virtual RTIReturnType roseRTI() override;
  167060             : #endif
  167061             :       /* */
  167062             : 
  167063             : 
  167064             : 
  167065             :       /* name Deprecated Functions
  167066             :           \brief Deprecated functions ... incomplete-documentation
  167067             : 
  167068             :           These functions have been deprecated from use.
  167069             :        */
  167070             :       /* */
  167071             : 
  167072             :       /*! returns a C style string (char*) representing the class name */
  167073             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  167074             : 
  167075             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  167076             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  167077             : #if 0
  167078             :       /*! returns old style Sage II enum values */
  167079             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  167080             :       /*! returns old style Sage II enum values */
  167081             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  167082             : #endif
  167083             :       /* */
  167084             : 
  167085             : 
  167086             : 
  167087             : 
  167088             :      public:
  167089             :       /* name Traversal Support Functions
  167090             :           \brief Traversal support functions ... incomplete-documentation
  167091             : 
  167092             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167093             :           or by particularly knowledgable users for specialized tools or applications.
  167094             :        */
  167095             :       /* */
  167096             : 
  167097             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  167098             :        // (inferior to ROSE traversal mechanism, experimental).
  167099             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  167100             :        */
  167101             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  167102             : 
  167103             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  167104             :       /*! \brief support for the classic visitor pattern done in GoF */
  167105             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  167106             : 
  167107             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  167108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  167109             :        */
  167110             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  167111             : 
  167112             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  167113             :        */
  167114             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  167115             : 
  167116             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  167117             :        // This traversal helps support internal tools that call static member functions.
  167118             :        // note: this function operates on the memory pools.
  167119             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  167120             :        */
  167121             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  167122             :       /* */
  167123             : 
  167124             : 
  167125             :      public:
  167126             :       /* name Memory Allocation Functions
  167127             :           \brief Memory allocations functions ... incomplete-documentation
  167128             : 
  167129             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167130             :           or by particularly knowledgable users for specialized tools or applications.
  167131             :        */
  167132             :       /* */
  167133             : 
  167134             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  167135             : 
  167136             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  167137             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  167138             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  167139             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  167140             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  167141             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  167142             :           being used with the AST File I/O mechanism.
  167143             :        */
  167144             :           virtual bool isInMemoryPool() override;
  167145             : 
  167146             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  167147             : 
  167148             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  167149             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  167150             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  167151             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  167152             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  167153             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  167154             :           being used with the AST File I/O mechanism.
  167155             :        */
  167156             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  167157             : 
  167158             :       // DQ (4/30/2006): Modified to be a const function.
  167159             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  167160             : 
  167161             :           This functions is part of general support for many possible tools to operate 
  167162             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  167163             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  167164             :           less than the set of pointers used by the AST file I/O. This is part of
  167165             :           work implemented by Andreas, and support tools such as the AST graph generation.
  167166             : 
  167167             :           \warning This function can return unexpected data members and thus the 
  167168             :                    order and the number of elements is unpredicable and subject 
  167169             :                    to change.
  167170             : 
  167171             :           \returns STL vector of pairs of SgNode* and strings
  167172             :        */
  167173             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  167174             : 
  167175             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  167176             : 
  167177             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  167178             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  167179             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  167180             : 
  167181             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  167182             :                    and subject to change.
  167183             :        */
  167184             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  167185             : 
  167186             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  167187             : 
  167188             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  167189             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  167190             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  167191             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  167192             : 
  167193             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  167194             : 
  167195             :           \returns long
  167196             :        */
  167197             :           virtual long getChildIndex( SgNode* childNode ) const override;
  167198             : 
  167199             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  167200             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  167201             :       /* \brief Constructor for use by AST File I/O Mechanism
  167202             : 
  167203             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  167204             :           which obtained via fast binary file I/O from disk.
  167205             :        */
  167206             :        // SgLineDirectiveStatement( SgLineDirectiveStatementStorageClass& source );
  167207             : 
  167208             : 
  167209             : 
  167210             : 
  167211             : 
  167212             :  // JH (10/24/2005): methods added to support the ast file IO
  167213             :     private:
  167214             : 
  167215             :       /* name AST Memory Allocation Support Functions
  167216             :           \brief Memory allocations support....
  167217             : 
  167218             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  167219             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  167220             :           and support the AST File I/O Mechanism.
  167221             :        */
  167222             :       /* */
  167223             : 
  167224             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  167225             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  167226             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  167227             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  167228             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  167229             :           a correspinding one in the AST_FILE_IO class!
  167230             :        */
  167231             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  167232             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  167233             :       /* \brief Typedef used for low level memory access.
  167234             :        */
  167235             :        // typedef unsigned char* TestType;
  167236             : 
  167237             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  167238             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  167239             :       /* \brief Typedef used to hold memory addresses as values.
  167240             :        */
  167241             :        // typedef unsigned long  AddressType;
  167242             : 
  167243             : 
  167244             : 
  167245             :        // necessary, to have direct access to the p_freepointer and the private methods !
  167246             :       /*! \brief friend class declaration to support AST File I/O */
  167247             :           friend class AST_FILE_IO;
  167248             : 
  167249             :       /*! \brief friend class declaration to support AST File I/O */
  167250             :           friend class SgLineDirectiveStatementStorageClass;
  167251             : 
  167252             :       /*! \brief friend class declaration to support AST File I/O */
  167253             :           friend class AstSpecificDataManagingClass;
  167254             : 
  167255             :       /*! \brief friend class declaration to support AST File I/O */
  167256             :           friend class AstSpecificDataManagingClassStorageClass;
  167257             :     public:
  167258             :       /*! \brief IR node constructor to support AST File I/O */
  167259             :           SgLineDirectiveStatement( const SgLineDirectiveStatementStorageClass& source );
  167260             : 
  167261             :  // private: // JJW hack
  167262             :        /*
  167263             :           name AST Memory Allocation Support Variables
  167264             :           Memory allocations support variables 
  167265             : 
  167266             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  167267             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  167268             :           and support the AST File I/O Mechanism.
  167269             :        */
  167270             :       /* */
  167271             : 
  167272             :     public:
  167273             : 
  167274             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  167275             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  167276             :       // virtual SgNode* addRegExpAttribute();
  167277             :       /*! \brief Support for AST matching using regular expression.
  167278             : 
  167279             :           This support is incomplete and the subject of current research to define 
  167280             :           RegEx trees to support inexact matching.
  167281             :        */
  167282             :           SgLineDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  167283             : 
  167284             : // *** COMMON CODE SECTION ENDS HERE ***
  167285             : 
  167286             : 
  167287             : // End of memberFunctionString
  167288             : // Start of memberFunctionString
  167289             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  167290             : 
  167291             :      // the generated cast function
  167292             :      // friend ROSE_DLL_API SgLineDirectiveStatement* isSgLineDirectiveStatement ( SgNode* s );
  167293             : 
  167294             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  167295             : 
  167296             : 
  167297             : // End of memberFunctionString
  167298             : // Start of memberFunctionString
  167299             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  167300             : 
  167301             :           void post_construction_initialization() override;
  167302             : 
  167303             : 
  167304             : // End of memberFunctionString
  167305             : 
  167306             : 
  167307             :      public: 
  167308             :          virtual ~SgLineDirectiveStatement();
  167309             : 
  167310             : 
  167311             :      public: 
  167312             :          SgLineDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  167313             :          SgLineDirectiveStatement(); 
  167314             : 
  167315             :     protected:
  167316             : 
  167317             :     friend struct Rose::Traits::generated::describe_node_t<SgLineDirectiveStatement>;
  167318             : 
  167319             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167320             : 
  167321             : 
  167322             :    };
  167323             : #endif
  167324             : 
  167325             : // postdeclarations for SgLineDirectiveStatement
  167326             : 
  167327             : /* #line 167328 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167328             : 
  167329             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  167330             : 
  167331             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167332             : 
  167333             : 
  167334             : /* #line 167335 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167335             : 
  167336             : 
  167337             : 
  167338             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167339             : 
  167340             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  167341             : //      This code is automatically generated for each 
  167342             : //      terminal and non-terminal within the defined 
  167343             : //      grammar.  There is a simple way to change the 
  167344             : //      code to fix bugs etc.  See the ROSE README file
  167345             : //      for directions.
  167346             : 
  167347             : // tps: (02/22/2010): Adding DLL export requirements
  167348             : #include "rosedll.h"
  167349             : 
  167350             : // predeclarations for SgWarningDirectiveStatement
  167351             : 
  167352             : /* #line 167353 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167353             : 
  167354             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  167355             : 
  167356             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167357             : 
  167358             : #if 1
  167359             : // Class Definition for SgWarningDirectiveStatement
  167360             : class ROSE_DLL_API SgWarningDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  167361             :    {
  167362             :      public:
  167363             : 
  167364             : 
  167365             : /* #line 167366 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167366             : 
  167367             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  167368             : // Start of memberFunctionString
  167369             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  167370             : 
  167371             : // *** COMMON CODE SECTION BEGINS HERE ***
  167372             : 
  167373             :     public:
  167374             : 
  167375             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  167376             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  167377             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  167378             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  167379             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  167380             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  167381             : 
  167382             :       /*! \brief returns a string representing the class name */
  167383             :           virtual std::string class_name() const override;
  167384             : 
  167385             :       /*! \brief returns new style SageIII enum values */
  167386             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  167387             : 
  167388             :       /*! \brief static variant value */
  167389             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  167390             :        // static const VariantT static_variant = V_SgWarningDirectiveStatement;
  167391             :           enum { static_variant = V_SgWarningDirectiveStatement };
  167392             : 
  167393             :        /* the generated cast function */
  167394             :       /*! \brief Casts pointer from base class to derived class */
  167395             :           ROSE_DLL_API friend       SgWarningDirectiveStatement* isSgWarningDirectiveStatement(       SgNode * s );
  167396             : 
  167397             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  167398             :           ROSE_DLL_API friend const SgWarningDirectiveStatement* isSgWarningDirectiveStatement( const SgNode * s );
  167399             : 
  167400             :      // ******************************************
  167401             :      // * Memory Pool / New / Delete
  167402             :      // ******************************************
  167403             : 
  167404             :      public:
  167405             :           /// \private
  167406             :           static const unsigned pool_size; //
  167407             :           /// \private
  167408             :           static std::vector<unsigned char *> pools; //
  167409             :           /// \private
  167410             :           static SgWarningDirectiveStatement * next_node; // 
  167411             : 
  167412             :           /// \private
  167413             :           static unsigned long initializeStorageClassArray(SgWarningDirectiveStatementStorageClass *); //
  167414             : 
  167415             :           /// \private
  167416             :           static void clearMemoryPool(); //
  167417             :           static void deleteMemoryPool(); //
  167418             : 
  167419             :           /// \private
  167420             :           static void extendMemoryPoolForFileIO(); //
  167421             : 
  167422             :           /// \private
  167423             :           static SgWarningDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  167424             :           /// \private
  167425             :           static SgWarningDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  167426             : 
  167427             :           /// \private
  167428             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  167429             :           /// \private
  167430             :           static void resetValidFreepointers(); //
  167431             :           /// \private
  167432             :           static unsigned long getNumberOfLastValidPointer(); //
  167433             : 
  167434             : 
  167435             : #if defined(INLINE_FUNCTIONS)
  167436             :       /*! \brief returns pointer to newly allocated IR node */
  167437             :           inline void *operator new (size_t size);
  167438             : #else
  167439             :       /*! \brief returns pointer to newly allocated IR node */
  167440             :           void *operator new (size_t size);
  167441             : #endif
  167442             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  167443             :           void operator delete (void* pointer, size_t size);
  167444             : 
  167445             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  167446           0 :           void operator delete (void* pointer)
  167447             :              {
  167448             :             // This is the generated delete operator...
  167449           0 :                SgWarningDirectiveStatement::operator delete (pointer,sizeof(SgWarningDirectiveStatement));
  167450             :              }
  167451             : 
  167452             :       /*! \brief Returns the total number of IR nodes of this type */
  167453             :           static size_t numberOfNodes();
  167454             : 
  167455             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  167456             :           static size_t memoryUsage();
  167457             : 
  167458             :       // End of scope which started in IR nodes specific code 
  167459             :       /* */
  167460             : 
  167461             :       /* name Internal Functions
  167462             :           \brief Internal functions ... incomplete-documentation
  167463             : 
  167464             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167465             :           or by particularly knowledgeable users for specialized tools or applications.
  167466             : 
  167467             :           \internal We could not make these private because they are required by user for special purposes. And 
  167468             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  167469             :          
  167470             :        */
  167471             : 
  167472             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  167473             :        // overridden in every class by *generated* implementation
  167474             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  167475             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  167476             :        // MS: 06/28/02 container of names of variables or container indices 
  167477             :        // used used in the traversal to access AST successor nodes
  167478             :        // overridden in every class by *generated* implementation
  167479             :       /*! \brief container of names of variables or container indices used used in the traversal
  167480             :           to access AST successor nodes overridden in every class by *generated* implementation */
  167481             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  167482             : 
  167483             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  167484             :        // than all the vector copies. The implementation for these functions is generated for each class.
  167485             :       /*! \brief return number of children in the traversal successor list */
  167486             :           virtual size_t get_numberOfTraversalSuccessors() override;
  167487             :       /*! \brief index-based access to traversal successors by index number */
  167488             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  167489             :       /*! \brief index-based access to traversal successors by child node */
  167490             :           virtual size_t get_childIndex(SgNode *child) override;
  167491             : 
  167492             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  167493             :        // MS: 08/16/2002 method for generating RTI information
  167494             :       /*! \brief return C++ Runtime-Time-Information */
  167495             :           virtual RTIReturnType roseRTI() override;
  167496             : #endif
  167497             :       /* */
  167498             : 
  167499             : 
  167500             : 
  167501             :       /* name Deprecated Functions
  167502             :           \brief Deprecated functions ... incomplete-documentation
  167503             : 
  167504             :           These functions have been deprecated from use.
  167505             :        */
  167506             :       /* */
  167507             : 
  167508             :       /*! returns a C style string (char*) representing the class name */
  167509             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  167510             : 
  167511             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  167512             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  167513             : #if 0
  167514             :       /*! returns old style Sage II enum values */
  167515             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  167516             :       /*! returns old style Sage II enum values */
  167517             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  167518             : #endif
  167519             :       /* */
  167520             : 
  167521             : 
  167522             : 
  167523             : 
  167524             :      public:
  167525             :       /* name Traversal Support Functions
  167526             :           \brief Traversal support functions ... incomplete-documentation
  167527             : 
  167528             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167529             :           or by particularly knowledgable users for specialized tools or applications.
  167530             :        */
  167531             :       /* */
  167532             : 
  167533             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  167534             :        // (inferior to ROSE traversal mechanism, experimental).
  167535             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  167536             :        */
  167537             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  167538             : 
  167539             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  167540             :       /*! \brief support for the classic visitor pattern done in GoF */
  167541             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  167542             : 
  167543             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  167544             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  167545             :        */
  167546             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  167547             : 
  167548             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  167549             :        */
  167550             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  167551             : 
  167552             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  167553             :        // This traversal helps support internal tools that call static member functions.
  167554             :        // note: this function operates on the memory pools.
  167555             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  167556             :        */
  167557             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  167558             :       /* */
  167559             : 
  167560             : 
  167561             :      public:
  167562             :       /* name Memory Allocation Functions
  167563             :           \brief Memory allocations functions ... incomplete-documentation
  167564             : 
  167565             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167566             :           or by particularly knowledgable users for specialized tools or applications.
  167567             :        */
  167568             :       /* */
  167569             : 
  167570             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  167571             : 
  167572             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  167573             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  167574             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  167575             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  167576             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  167577             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  167578             :           being used with the AST File I/O mechanism.
  167579             :        */
  167580             :           virtual bool isInMemoryPool() override;
  167581             : 
  167582             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  167583             : 
  167584             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  167585             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  167586             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  167587             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  167588             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  167589             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  167590             :           being used with the AST File I/O mechanism.
  167591             :        */
  167592             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  167593             : 
  167594             :       // DQ (4/30/2006): Modified to be a const function.
  167595             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  167596             : 
  167597             :           This functions is part of general support for many possible tools to operate 
  167598             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  167599             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  167600             :           less than the set of pointers used by the AST file I/O. This is part of
  167601             :           work implemented by Andreas, and support tools such as the AST graph generation.
  167602             : 
  167603             :           \warning This function can return unexpected data members and thus the 
  167604             :                    order and the number of elements is unpredicable and subject 
  167605             :                    to change.
  167606             : 
  167607             :           \returns STL vector of pairs of SgNode* and strings
  167608             :        */
  167609             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  167610             : 
  167611             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  167612             : 
  167613             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  167614             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  167615             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  167616             : 
  167617             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  167618             :                    and subject to change.
  167619             :        */
  167620             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  167621             : 
  167622             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  167623             : 
  167624             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  167625             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  167626             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  167627             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  167628             : 
  167629             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  167630             : 
  167631             :           \returns long
  167632             :        */
  167633             :           virtual long getChildIndex( SgNode* childNode ) const override;
  167634             : 
  167635             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  167636             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  167637             :       /* \brief Constructor for use by AST File I/O Mechanism
  167638             : 
  167639             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  167640             :           which obtained via fast binary file I/O from disk.
  167641             :        */
  167642             :        // SgWarningDirectiveStatement( SgWarningDirectiveStatementStorageClass& source );
  167643             : 
  167644             : 
  167645             : 
  167646             : 
  167647             : 
  167648             :  // JH (10/24/2005): methods added to support the ast file IO
  167649             :     private:
  167650             : 
  167651             :       /* name AST Memory Allocation Support Functions
  167652             :           \brief Memory allocations support....
  167653             : 
  167654             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  167655             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  167656             :           and support the AST File I/O Mechanism.
  167657             :        */
  167658             :       /* */
  167659             : 
  167660             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  167661             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  167662             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  167663             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  167664             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  167665             :           a correspinding one in the AST_FILE_IO class!
  167666             :        */
  167667             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  167668             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  167669             :       /* \brief Typedef used for low level memory access.
  167670             :        */
  167671             :        // typedef unsigned char* TestType;
  167672             : 
  167673             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  167674             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  167675             :       /* \brief Typedef used to hold memory addresses as values.
  167676             :        */
  167677             :        // typedef unsigned long  AddressType;
  167678             : 
  167679             : 
  167680             : 
  167681             :        // necessary, to have direct access to the p_freepointer and the private methods !
  167682             :       /*! \brief friend class declaration to support AST File I/O */
  167683             :           friend class AST_FILE_IO;
  167684             : 
  167685             :       /*! \brief friend class declaration to support AST File I/O */
  167686             :           friend class SgWarningDirectiveStatementStorageClass;
  167687             : 
  167688             :       /*! \brief friend class declaration to support AST File I/O */
  167689             :           friend class AstSpecificDataManagingClass;
  167690             : 
  167691             :       /*! \brief friend class declaration to support AST File I/O */
  167692             :           friend class AstSpecificDataManagingClassStorageClass;
  167693             :     public:
  167694             :       /*! \brief IR node constructor to support AST File I/O */
  167695             :           SgWarningDirectiveStatement( const SgWarningDirectiveStatementStorageClass& source );
  167696             : 
  167697             :  // private: // JJW hack
  167698             :        /*
  167699             :           name AST Memory Allocation Support Variables
  167700             :           Memory allocations support variables 
  167701             : 
  167702             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  167703             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  167704             :           and support the AST File I/O Mechanism.
  167705             :        */
  167706             :       /* */
  167707             : 
  167708             :     public:
  167709             : 
  167710             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  167711             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  167712             :       // virtual SgNode* addRegExpAttribute();
  167713             :       /*! \brief Support for AST matching using regular expression.
  167714             : 
  167715             :           This support is incomplete and the subject of current research to define 
  167716             :           RegEx trees to support inexact matching.
  167717             :        */
  167718             :           SgWarningDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  167719             : 
  167720             : // *** COMMON CODE SECTION ENDS HERE ***
  167721             : 
  167722             : 
  167723             : // End of memberFunctionString
  167724             : // Start of memberFunctionString
  167725             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  167726             : 
  167727             :      // the generated cast function
  167728             :      // friend ROSE_DLL_API SgWarningDirectiveStatement* isSgWarningDirectiveStatement ( SgNode* s );
  167729             : 
  167730             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  167731             : 
  167732             : 
  167733             : // End of memberFunctionString
  167734             : // Start of memberFunctionString
  167735             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  167736             : 
  167737             :           void post_construction_initialization() override;
  167738             : 
  167739             : 
  167740             : // End of memberFunctionString
  167741             : 
  167742             : 
  167743             :      public: 
  167744             :          virtual ~SgWarningDirectiveStatement();
  167745             : 
  167746             : 
  167747             :      public: 
  167748             :          SgWarningDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  167749             :          SgWarningDirectiveStatement(); 
  167750             : 
  167751             :     protected:
  167752             : 
  167753             :     friend struct Rose::Traits::generated::describe_node_t<SgWarningDirectiveStatement>;
  167754             : 
  167755             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167756             : 
  167757             : 
  167758             :    };
  167759             : #endif
  167760             : 
  167761             : // postdeclarations for SgWarningDirectiveStatement
  167762             : 
  167763             : /* #line 167764 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167764             : 
  167765             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  167766             : 
  167767             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167768             : 
  167769             : 
  167770             : /* #line 167771 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167771             : 
  167772             : 
  167773             : 
  167774             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167775             : 
  167776             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  167777             : //      This code is automatically generated for each 
  167778             : //      terminal and non-terminal within the defined 
  167779             : //      grammar.  There is a simple way to change the 
  167780             : //      code to fix bugs etc.  See the ROSE README file
  167781             : //      for directions.
  167782             : 
  167783             : // tps: (02/22/2010): Adding DLL export requirements
  167784             : #include "rosedll.h"
  167785             : 
  167786             : // predeclarations for SgErrorDirectiveStatement
  167787             : 
  167788             : /* #line 167789 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167789             : 
  167790             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  167791             : 
  167792             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  167793             : 
  167794             : #if 1
  167795             : // Class Definition for SgErrorDirectiveStatement
  167796             : class ROSE_DLL_API SgErrorDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  167797             :    {
  167798             :      public:
  167799             : 
  167800             : 
  167801             : /* #line 167802 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  167802             : 
  167803             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  167804             : // Start of memberFunctionString
  167805             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  167806             : 
  167807             : // *** COMMON CODE SECTION BEGINS HERE ***
  167808             : 
  167809             :     public:
  167810             : 
  167811             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  167812             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  167813             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  167814             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  167815             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  167816             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  167817             : 
  167818             :       /*! \brief returns a string representing the class name */
  167819             :           virtual std::string class_name() const override;
  167820             : 
  167821             :       /*! \brief returns new style SageIII enum values */
  167822             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  167823             : 
  167824             :       /*! \brief static variant value */
  167825             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  167826             :        // static const VariantT static_variant = V_SgErrorDirectiveStatement;
  167827             :           enum { static_variant = V_SgErrorDirectiveStatement };
  167828             : 
  167829             :        /* the generated cast function */
  167830             :       /*! \brief Casts pointer from base class to derived class */
  167831             :           ROSE_DLL_API friend       SgErrorDirectiveStatement* isSgErrorDirectiveStatement(       SgNode * s );
  167832             : 
  167833             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  167834             :           ROSE_DLL_API friend const SgErrorDirectiveStatement* isSgErrorDirectiveStatement( const SgNode * s );
  167835             : 
  167836             :      // ******************************************
  167837             :      // * Memory Pool / New / Delete
  167838             :      // ******************************************
  167839             : 
  167840             :      public:
  167841             :           /// \private
  167842             :           static const unsigned pool_size; //
  167843             :           /// \private
  167844             :           static std::vector<unsigned char *> pools; //
  167845             :           /// \private
  167846             :           static SgErrorDirectiveStatement * next_node; // 
  167847             : 
  167848             :           /// \private
  167849             :           static unsigned long initializeStorageClassArray(SgErrorDirectiveStatementStorageClass *); //
  167850             : 
  167851             :           /// \private
  167852             :           static void clearMemoryPool(); //
  167853             :           static void deleteMemoryPool(); //
  167854             : 
  167855             :           /// \private
  167856             :           static void extendMemoryPoolForFileIO(); //
  167857             : 
  167858             :           /// \private
  167859             :           static SgErrorDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  167860             :           /// \private
  167861             :           static SgErrorDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  167862             : 
  167863             :           /// \private
  167864             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  167865             :           /// \private
  167866             :           static void resetValidFreepointers(); //
  167867             :           /// \private
  167868             :           static unsigned long getNumberOfLastValidPointer(); //
  167869             : 
  167870             : 
  167871             : #if defined(INLINE_FUNCTIONS)
  167872             :       /*! \brief returns pointer to newly allocated IR node */
  167873             :           inline void *operator new (size_t size);
  167874             : #else
  167875             :       /*! \brief returns pointer to newly allocated IR node */
  167876             :           void *operator new (size_t size);
  167877             : #endif
  167878             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  167879             :           void operator delete (void* pointer, size_t size);
  167880             : 
  167881             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  167882           0 :           void operator delete (void* pointer)
  167883             :              {
  167884             :             // This is the generated delete operator...
  167885           0 :                SgErrorDirectiveStatement::operator delete (pointer,sizeof(SgErrorDirectiveStatement));
  167886             :              }
  167887             : 
  167888             :       /*! \brief Returns the total number of IR nodes of this type */
  167889             :           static size_t numberOfNodes();
  167890             : 
  167891             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  167892             :           static size_t memoryUsage();
  167893             : 
  167894             :       // End of scope which started in IR nodes specific code 
  167895             :       /* */
  167896             : 
  167897             :       /* name Internal Functions
  167898             :           \brief Internal functions ... incomplete-documentation
  167899             : 
  167900             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167901             :           or by particularly knowledgeable users for specialized tools or applications.
  167902             : 
  167903             :           \internal We could not make these private because they are required by user for special purposes. And 
  167904             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  167905             :          
  167906             :        */
  167907             : 
  167908             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  167909             :        // overridden in every class by *generated* implementation
  167910             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  167911             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  167912             :        // MS: 06/28/02 container of names of variables or container indices 
  167913             :        // used used in the traversal to access AST successor nodes
  167914             :        // overridden in every class by *generated* implementation
  167915             :       /*! \brief container of names of variables or container indices used used in the traversal
  167916             :           to access AST successor nodes overridden in every class by *generated* implementation */
  167917             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  167918             : 
  167919             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  167920             :        // than all the vector copies. The implementation for these functions is generated for each class.
  167921             :       /*! \brief return number of children in the traversal successor list */
  167922             :           virtual size_t get_numberOfTraversalSuccessors() override;
  167923             :       /*! \brief index-based access to traversal successors by index number */
  167924             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  167925             :       /*! \brief index-based access to traversal successors by child node */
  167926             :           virtual size_t get_childIndex(SgNode *child) override;
  167927             : 
  167928             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  167929             :        // MS: 08/16/2002 method for generating RTI information
  167930             :       /*! \brief return C++ Runtime-Time-Information */
  167931             :           virtual RTIReturnType roseRTI() override;
  167932             : #endif
  167933             :       /* */
  167934             : 
  167935             : 
  167936             : 
  167937             :       /* name Deprecated Functions
  167938             :           \brief Deprecated functions ... incomplete-documentation
  167939             : 
  167940             :           These functions have been deprecated from use.
  167941             :        */
  167942             :       /* */
  167943             : 
  167944             :       /*! returns a C style string (char*) representing the class name */
  167945             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  167946             : 
  167947             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  167948             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  167949             : #if 0
  167950             :       /*! returns old style Sage II enum values */
  167951             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  167952             :       /*! returns old style Sage II enum values */
  167953             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  167954             : #endif
  167955             :       /* */
  167956             : 
  167957             : 
  167958             : 
  167959             : 
  167960             :      public:
  167961             :       /* name Traversal Support Functions
  167962             :           \brief Traversal support functions ... incomplete-documentation
  167963             : 
  167964             :           These functions have been made public as part of the design, but they are suggested for internal use 
  167965             :           or by particularly knowledgable users for specialized tools or applications.
  167966             :        */
  167967             :       /* */
  167968             : 
  167969             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  167970             :        // (inferior to ROSE traversal mechanism, experimental).
  167971             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  167972             :        */
  167973             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  167974             : 
  167975             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  167976             :       /*! \brief support for the classic visitor pattern done in GoF */
  167977             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  167978             : 
  167979             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  167980             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  167981             :        */
  167982             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  167983             : 
  167984             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  167985             :        */
  167986             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  167987             : 
  167988             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  167989             :        // This traversal helps support internal tools that call static member functions.
  167990             :        // note: this function operates on the memory pools.
  167991             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  167992             :        */
  167993             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  167994             :       /* */
  167995             : 
  167996             : 
  167997             :      public:
  167998             :       /* name Memory Allocation Functions
  167999             :           \brief Memory allocations functions ... incomplete-documentation
  168000             : 
  168001             :           These functions have been made public as part of the design, but they are suggested for internal use 
  168002             :           or by particularly knowledgable users for specialized tools or applications.
  168003             :        */
  168004             :       /* */
  168005             : 
  168006             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  168007             : 
  168008             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  168009             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  168010             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  168011             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  168012             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  168013             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  168014             :           being used with the AST File I/O mechanism.
  168015             :        */
  168016             :           virtual bool isInMemoryPool() override;
  168017             : 
  168018             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  168019             : 
  168020             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  168021             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  168022             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  168023             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  168024             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  168025             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  168026             :           being used with the AST File I/O mechanism.
  168027             :        */
  168028             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  168029             : 
  168030             :       // DQ (4/30/2006): Modified to be a const function.
  168031             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  168032             : 
  168033             :           This functions is part of general support for many possible tools to operate 
  168034             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  168035             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  168036             :           less than the set of pointers used by the AST file I/O. This is part of
  168037             :           work implemented by Andreas, and support tools such as the AST graph generation.
  168038             : 
  168039             :           \warning This function can return unexpected data members and thus the 
  168040             :                    order and the number of elements is unpredicable and subject 
  168041             :                    to change.
  168042             : 
  168043             :           \returns STL vector of pairs of SgNode* and strings
  168044             :        */
  168045             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  168046             : 
  168047             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  168048             : 
  168049             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  168050             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  168051             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  168052             : 
  168053             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  168054             :                    and subject to change.
  168055             :        */
  168056             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  168057             : 
  168058             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  168059             : 
  168060             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  168061             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  168062             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  168063             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  168064             : 
  168065             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  168066             : 
  168067             :           \returns long
  168068             :        */
  168069             :           virtual long getChildIndex( SgNode* childNode ) const override;
  168070             : 
  168071             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  168072             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168073             :       /* \brief Constructor for use by AST File I/O Mechanism
  168074             : 
  168075             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  168076             :           which obtained via fast binary file I/O from disk.
  168077             :        */
  168078             :        // SgErrorDirectiveStatement( SgErrorDirectiveStatementStorageClass& source );
  168079             : 
  168080             : 
  168081             : 
  168082             : 
  168083             : 
  168084             :  // JH (10/24/2005): methods added to support the ast file IO
  168085             :     private:
  168086             : 
  168087             :       /* name AST Memory Allocation Support Functions
  168088             :           \brief Memory allocations support....
  168089             : 
  168090             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  168091             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  168092             :           and support the AST File I/O Mechanism.
  168093             :        */
  168094             :       /* */
  168095             : 
  168096             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  168097             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  168098             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  168099             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  168100             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  168101             :           a correspinding one in the AST_FILE_IO class!
  168102             :        */
  168103             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  168104             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168105             :       /* \brief Typedef used for low level memory access.
  168106             :        */
  168107             :        // typedef unsigned char* TestType;
  168108             : 
  168109             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  168110             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168111             :       /* \brief Typedef used to hold memory addresses as values.
  168112             :        */
  168113             :        // typedef unsigned long  AddressType;
  168114             : 
  168115             : 
  168116             : 
  168117             :        // necessary, to have direct access to the p_freepointer and the private methods !
  168118             :       /*! \brief friend class declaration to support AST File I/O */
  168119             :           friend class AST_FILE_IO;
  168120             : 
  168121             :       /*! \brief friend class declaration to support AST File I/O */
  168122             :           friend class SgErrorDirectiveStatementStorageClass;
  168123             : 
  168124             :       /*! \brief friend class declaration to support AST File I/O */
  168125             :           friend class AstSpecificDataManagingClass;
  168126             : 
  168127             :       /*! \brief friend class declaration to support AST File I/O */
  168128             :           friend class AstSpecificDataManagingClassStorageClass;
  168129             :     public:
  168130             :       /*! \brief IR node constructor to support AST File I/O */
  168131             :           SgErrorDirectiveStatement( const SgErrorDirectiveStatementStorageClass& source );
  168132             : 
  168133             :  // private: // JJW hack
  168134             :        /*
  168135             :           name AST Memory Allocation Support Variables
  168136             :           Memory allocations support variables 
  168137             : 
  168138             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  168139             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  168140             :           and support the AST File I/O Mechanism.
  168141             :        */
  168142             :       /* */
  168143             : 
  168144             :     public:
  168145             : 
  168146             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  168147             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  168148             :       // virtual SgNode* addRegExpAttribute();
  168149             :       /*! \brief Support for AST matching using regular expression.
  168150             : 
  168151             :           This support is incomplete and the subject of current research to define 
  168152             :           RegEx trees to support inexact matching.
  168153             :        */
  168154             :           SgErrorDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  168155             : 
  168156             : // *** COMMON CODE SECTION ENDS HERE ***
  168157             : 
  168158             : 
  168159             : // End of memberFunctionString
  168160             : // Start of memberFunctionString
  168161             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  168162             : 
  168163             :      // the generated cast function
  168164             :      // friend ROSE_DLL_API SgErrorDirectiveStatement* isSgErrorDirectiveStatement ( SgNode* s );
  168165             : 
  168166             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  168167             : 
  168168             : 
  168169             : // End of memberFunctionString
  168170             : // Start of memberFunctionString
  168171             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  168172             : 
  168173             :           void post_construction_initialization() override;
  168174             : 
  168175             : 
  168176             : // End of memberFunctionString
  168177             : 
  168178             : 
  168179             :      public: 
  168180             :          virtual ~SgErrorDirectiveStatement();
  168181             : 
  168182             : 
  168183             :      public: 
  168184             :          SgErrorDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  168185             :          SgErrorDirectiveStatement(); 
  168186             : 
  168187             :     protected:
  168188             : 
  168189             :     friend struct Rose::Traits::generated::describe_node_t<SgErrorDirectiveStatement>;
  168190             : 
  168191             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168192             : 
  168193             : 
  168194             :    };
  168195             : #endif
  168196             : 
  168197             : // postdeclarations for SgErrorDirectiveStatement
  168198             : 
  168199             : /* #line 168200 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168200             : 
  168201             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  168202             : 
  168203             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168204             : 
  168205             : 
  168206             : /* #line 168207 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168207             : 
  168208             : 
  168209             : 
  168210             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168211             : 
  168212             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  168213             : //      This code is automatically generated for each 
  168214             : //      terminal and non-terminal within the defined 
  168215             : //      grammar.  There is a simple way to change the 
  168216             : //      code to fix bugs etc.  See the ROSE README file
  168217             : //      for directions.
  168218             : 
  168219             : // tps: (02/22/2010): Adding DLL export requirements
  168220             : #include "rosedll.h"
  168221             : 
  168222             : // predeclarations for SgEmptyDirectiveStatement
  168223             : 
  168224             : /* #line 168225 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168225             : 
  168226             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  168227             : 
  168228             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168229             : 
  168230             : #if 1
  168231             : // Class Definition for SgEmptyDirectiveStatement
  168232             : class ROSE_DLL_API SgEmptyDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  168233             :    {
  168234             :      public:
  168235             : 
  168236             : 
  168237             : /* #line 168238 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168238             : 
  168239             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  168240             : // Start of memberFunctionString
  168241             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  168242             : 
  168243             : // *** COMMON CODE SECTION BEGINS HERE ***
  168244             : 
  168245             :     public:
  168246             : 
  168247             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  168248             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  168249             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  168250             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  168251             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  168252             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  168253             : 
  168254             :       /*! \brief returns a string representing the class name */
  168255             :           virtual std::string class_name() const override;
  168256             : 
  168257             :       /*! \brief returns new style SageIII enum values */
  168258             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  168259             : 
  168260             :       /*! \brief static variant value */
  168261             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  168262             :        // static const VariantT static_variant = V_SgEmptyDirectiveStatement;
  168263             :           enum { static_variant = V_SgEmptyDirectiveStatement };
  168264             : 
  168265             :        /* the generated cast function */
  168266             :       /*! \brief Casts pointer from base class to derived class */
  168267             :           ROSE_DLL_API friend       SgEmptyDirectiveStatement* isSgEmptyDirectiveStatement(       SgNode * s );
  168268             : 
  168269             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  168270             :           ROSE_DLL_API friend const SgEmptyDirectiveStatement* isSgEmptyDirectiveStatement( const SgNode * s );
  168271             : 
  168272             :      // ******************************************
  168273             :      // * Memory Pool / New / Delete
  168274             :      // ******************************************
  168275             : 
  168276             :      public:
  168277             :           /// \private
  168278             :           static const unsigned pool_size; //
  168279             :           /// \private
  168280             :           static std::vector<unsigned char *> pools; //
  168281             :           /// \private
  168282             :           static SgEmptyDirectiveStatement * next_node; // 
  168283             : 
  168284             :           /// \private
  168285             :           static unsigned long initializeStorageClassArray(SgEmptyDirectiveStatementStorageClass *); //
  168286             : 
  168287             :           /// \private
  168288             :           static void clearMemoryPool(); //
  168289             :           static void deleteMemoryPool(); //
  168290             : 
  168291             :           /// \private
  168292             :           static void extendMemoryPoolForFileIO(); //
  168293             : 
  168294             :           /// \private
  168295             :           static SgEmptyDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  168296             :           /// \private
  168297             :           static SgEmptyDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  168298             : 
  168299             :           /// \private
  168300             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  168301             :           /// \private
  168302             :           static void resetValidFreepointers(); //
  168303             :           /// \private
  168304             :           static unsigned long getNumberOfLastValidPointer(); //
  168305             : 
  168306             : 
  168307             : #if defined(INLINE_FUNCTIONS)
  168308             :       /*! \brief returns pointer to newly allocated IR node */
  168309             :           inline void *operator new (size_t size);
  168310             : #else
  168311             :       /*! \brief returns pointer to newly allocated IR node */
  168312             :           void *operator new (size_t size);
  168313             : #endif
  168314             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  168315             :           void operator delete (void* pointer, size_t size);
  168316             : 
  168317             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  168318           0 :           void operator delete (void* pointer)
  168319             :              {
  168320             :             // This is the generated delete operator...
  168321           0 :                SgEmptyDirectiveStatement::operator delete (pointer,sizeof(SgEmptyDirectiveStatement));
  168322             :              }
  168323             : 
  168324             :       /*! \brief Returns the total number of IR nodes of this type */
  168325             :           static size_t numberOfNodes();
  168326             : 
  168327             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  168328             :           static size_t memoryUsage();
  168329             : 
  168330             :       // End of scope which started in IR nodes specific code 
  168331             :       /* */
  168332             : 
  168333             :       /* name Internal Functions
  168334             :           \brief Internal functions ... incomplete-documentation
  168335             : 
  168336             :           These functions have been made public as part of the design, but they are suggested for internal use 
  168337             :           or by particularly knowledgeable users for specialized tools or applications.
  168338             : 
  168339             :           \internal We could not make these private because they are required by user for special purposes. And 
  168340             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  168341             :          
  168342             :        */
  168343             : 
  168344             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  168345             :        // overridden in every class by *generated* implementation
  168346             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  168347             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  168348             :        // MS: 06/28/02 container of names of variables or container indices 
  168349             :        // used used in the traversal to access AST successor nodes
  168350             :        // overridden in every class by *generated* implementation
  168351             :       /*! \brief container of names of variables or container indices used used in the traversal
  168352             :           to access AST successor nodes overridden in every class by *generated* implementation */
  168353             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  168354             : 
  168355             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  168356             :        // than all the vector copies. The implementation for these functions is generated for each class.
  168357             :       /*! \brief return number of children in the traversal successor list */
  168358             :           virtual size_t get_numberOfTraversalSuccessors() override;
  168359             :       /*! \brief index-based access to traversal successors by index number */
  168360             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  168361             :       /*! \brief index-based access to traversal successors by child node */
  168362             :           virtual size_t get_childIndex(SgNode *child) override;
  168363             : 
  168364             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  168365             :        // MS: 08/16/2002 method for generating RTI information
  168366             :       /*! \brief return C++ Runtime-Time-Information */
  168367             :           virtual RTIReturnType roseRTI() override;
  168368             : #endif
  168369             :       /* */
  168370             : 
  168371             : 
  168372             : 
  168373             :       /* name Deprecated Functions
  168374             :           \brief Deprecated functions ... incomplete-documentation
  168375             : 
  168376             :           These functions have been deprecated from use.
  168377             :        */
  168378             :       /* */
  168379             : 
  168380             :       /*! returns a C style string (char*) representing the class name */
  168381             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  168382             : 
  168383             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  168384             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  168385             : #if 0
  168386             :       /*! returns old style Sage II enum values */
  168387             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  168388             :       /*! returns old style Sage II enum values */
  168389             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  168390             : #endif
  168391             :       /* */
  168392             : 
  168393             : 
  168394             : 
  168395             : 
  168396             :      public:
  168397             :       /* name Traversal Support Functions
  168398             :           \brief Traversal support functions ... incomplete-documentation
  168399             : 
  168400             :           These functions have been made public as part of the design, but they are suggested for internal use 
  168401             :           or by particularly knowledgable users for specialized tools or applications.
  168402             :        */
  168403             :       /* */
  168404             : 
  168405             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  168406             :        // (inferior to ROSE traversal mechanism, experimental).
  168407             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  168408             :        */
  168409             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  168410             : 
  168411             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  168412             :       /*! \brief support for the classic visitor pattern done in GoF */
  168413             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  168414             : 
  168415             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  168416             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  168417             :        */
  168418             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  168419             : 
  168420             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  168421             :        */
  168422             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  168423             : 
  168424             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  168425             :        // This traversal helps support internal tools that call static member functions.
  168426             :        // note: this function operates on the memory pools.
  168427             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  168428             :        */
  168429             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  168430             :       /* */
  168431             : 
  168432             : 
  168433             :      public:
  168434             :       /* name Memory Allocation Functions
  168435             :           \brief Memory allocations functions ... incomplete-documentation
  168436             : 
  168437             :           These functions have been made public as part of the design, but they are suggested for internal use 
  168438             :           or by particularly knowledgable users for specialized tools or applications.
  168439             :        */
  168440             :       /* */
  168441             : 
  168442             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  168443             : 
  168444             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  168445             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  168446             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  168447             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  168448             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  168449             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  168450             :           being used with the AST File I/O mechanism.
  168451             :        */
  168452             :           virtual bool isInMemoryPool() override;
  168453             : 
  168454             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  168455             : 
  168456             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  168457             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  168458             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  168459             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  168460             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  168461             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  168462             :           being used with the AST File I/O mechanism.
  168463             :        */
  168464             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  168465             : 
  168466             :       // DQ (4/30/2006): Modified to be a const function.
  168467             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  168468             : 
  168469             :           This functions is part of general support for many possible tools to operate 
  168470             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  168471             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  168472             :           less than the set of pointers used by the AST file I/O. This is part of
  168473             :           work implemented by Andreas, and support tools such as the AST graph generation.
  168474             : 
  168475             :           \warning This function can return unexpected data members and thus the 
  168476             :                    order and the number of elements is unpredicable and subject 
  168477             :                    to change.
  168478             : 
  168479             :           \returns STL vector of pairs of SgNode* and strings
  168480             :        */
  168481             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  168482             : 
  168483             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  168484             : 
  168485             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  168486             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  168487             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  168488             : 
  168489             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  168490             :                    and subject to change.
  168491             :        */
  168492             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  168493             : 
  168494             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  168495             : 
  168496             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  168497             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  168498             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  168499             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  168500             : 
  168501             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  168502             : 
  168503             :           \returns long
  168504             :        */
  168505             :           virtual long getChildIndex( SgNode* childNode ) const override;
  168506             : 
  168507             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  168508             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168509             :       /* \brief Constructor for use by AST File I/O Mechanism
  168510             : 
  168511             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  168512             :           which obtained via fast binary file I/O from disk.
  168513             :        */
  168514             :        // SgEmptyDirectiveStatement( SgEmptyDirectiveStatementStorageClass& source );
  168515             : 
  168516             : 
  168517             : 
  168518             : 
  168519             : 
  168520             :  // JH (10/24/2005): methods added to support the ast file IO
  168521             :     private:
  168522             : 
  168523             :       /* name AST Memory Allocation Support Functions
  168524             :           \brief Memory allocations support....
  168525             : 
  168526             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  168527             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  168528             :           and support the AST File I/O Mechanism.
  168529             :        */
  168530             :       /* */
  168531             : 
  168532             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  168533             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  168534             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  168535             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  168536             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  168537             :           a correspinding one in the AST_FILE_IO class!
  168538             :        */
  168539             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  168540             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168541             :       /* \brief Typedef used for low level memory access.
  168542             :        */
  168543             :        // typedef unsigned char* TestType;
  168544             : 
  168545             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  168546             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168547             :       /* \brief Typedef used to hold memory addresses as values.
  168548             :        */
  168549             :        // typedef unsigned long  AddressType;
  168550             : 
  168551             : 
  168552             : 
  168553             :        // necessary, to have direct access to the p_freepointer and the private methods !
  168554             :       /*! \brief friend class declaration to support AST File I/O */
  168555             :           friend class AST_FILE_IO;
  168556             : 
  168557             :       /*! \brief friend class declaration to support AST File I/O */
  168558             :           friend class SgEmptyDirectiveStatementStorageClass;
  168559             : 
  168560             :       /*! \brief friend class declaration to support AST File I/O */
  168561             :           friend class AstSpecificDataManagingClass;
  168562             : 
  168563             :       /*! \brief friend class declaration to support AST File I/O */
  168564             :           friend class AstSpecificDataManagingClassStorageClass;
  168565             :     public:
  168566             :       /*! \brief IR node constructor to support AST File I/O */
  168567             :           SgEmptyDirectiveStatement( const SgEmptyDirectiveStatementStorageClass& source );
  168568             : 
  168569             :  // private: // JJW hack
  168570             :        /*
  168571             :           name AST Memory Allocation Support Variables
  168572             :           Memory allocations support variables 
  168573             : 
  168574             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  168575             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  168576             :           and support the AST File I/O Mechanism.
  168577             :        */
  168578             :       /* */
  168579             : 
  168580             :     public:
  168581             : 
  168582             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  168583             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  168584             :       // virtual SgNode* addRegExpAttribute();
  168585             :       /*! \brief Support for AST matching using regular expression.
  168586             : 
  168587             :           This support is incomplete and the subject of current research to define 
  168588             :           RegEx trees to support inexact matching.
  168589             :        */
  168590             :           SgEmptyDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  168591             : 
  168592             : // *** COMMON CODE SECTION ENDS HERE ***
  168593             : 
  168594             : 
  168595             : // End of memberFunctionString
  168596             : // Start of memberFunctionString
  168597             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  168598             : 
  168599             :      // the generated cast function
  168600             :      // friend ROSE_DLL_API SgEmptyDirectiveStatement* isSgEmptyDirectiveStatement ( SgNode* s );
  168601             : 
  168602             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  168603             : 
  168604             : 
  168605             : // End of memberFunctionString
  168606             : // Start of memberFunctionString
  168607             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  168608             : 
  168609             :           void post_construction_initialization() override;
  168610             : 
  168611             : 
  168612             : // End of memberFunctionString
  168613             : 
  168614             : 
  168615             :      public: 
  168616             :          virtual ~SgEmptyDirectiveStatement();
  168617             : 
  168618             : 
  168619             :      public: 
  168620             :          SgEmptyDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  168621             :          SgEmptyDirectiveStatement(); 
  168622             : 
  168623             :     protected:
  168624             : 
  168625             :     friend struct Rose::Traits::generated::describe_node_t<SgEmptyDirectiveStatement>;
  168626             : 
  168627             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168628             : 
  168629             : 
  168630             :    };
  168631             : #endif
  168632             : 
  168633             : // postdeclarations for SgEmptyDirectiveStatement
  168634             : 
  168635             : /* #line 168636 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168636             : 
  168637             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  168638             : 
  168639             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168640             : 
  168641             : 
  168642             : /* #line 168643 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168643             : 
  168644             : 
  168645             : 
  168646             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168647             : 
  168648             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  168649             : //      This code is automatically generated for each 
  168650             : //      terminal and non-terminal within the defined 
  168651             : //      grammar.  There is a simple way to change the 
  168652             : //      code to fix bugs etc.  See the ROSE README file
  168653             : //      for directions.
  168654             : 
  168655             : // tps: (02/22/2010): Adding DLL export requirements
  168656             : #include "rosedll.h"
  168657             : 
  168658             : // predeclarations for SgIncludeNextDirectiveStatement
  168659             : 
  168660             : /* #line 168661 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168661             : 
  168662             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  168663             : 
  168664             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  168665             : 
  168666             : #if 1
  168667             : // Class Definition for SgIncludeNextDirectiveStatement
  168668             : class ROSE_DLL_API SgIncludeNextDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  168669             :    {
  168670             :      public:
  168671             : 
  168672             : 
  168673             : /* #line 168674 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  168674             : 
  168675             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  168676             : // Start of memberFunctionString
  168677             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  168678             : 
  168679             : // *** COMMON CODE SECTION BEGINS HERE ***
  168680             : 
  168681             :     public:
  168682             : 
  168683             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  168684             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  168685             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  168686             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  168687             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  168688             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  168689             : 
  168690             :       /*! \brief returns a string representing the class name */
  168691             :           virtual std::string class_name() const override;
  168692             : 
  168693             :       /*! \brief returns new style SageIII enum values */
  168694             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  168695             : 
  168696             :       /*! \brief static variant value */
  168697             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  168698             :        // static const VariantT static_variant = V_SgIncludeNextDirectiveStatement;
  168699             :           enum { static_variant = V_SgIncludeNextDirectiveStatement };
  168700             : 
  168701             :        /* the generated cast function */
  168702             :       /*! \brief Casts pointer from base class to derived class */
  168703             :           ROSE_DLL_API friend       SgIncludeNextDirectiveStatement* isSgIncludeNextDirectiveStatement(       SgNode * s );
  168704             : 
  168705             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  168706             :           ROSE_DLL_API friend const SgIncludeNextDirectiveStatement* isSgIncludeNextDirectiveStatement( const SgNode * s );
  168707             : 
  168708             :      // ******************************************
  168709             :      // * Memory Pool / New / Delete
  168710             :      // ******************************************
  168711             : 
  168712             :      public:
  168713             :           /// \private
  168714             :           static const unsigned pool_size; //
  168715             :           /// \private
  168716             :           static std::vector<unsigned char *> pools; //
  168717             :           /// \private
  168718             :           static SgIncludeNextDirectiveStatement * next_node; // 
  168719             : 
  168720             :           /// \private
  168721             :           static unsigned long initializeStorageClassArray(SgIncludeNextDirectiveStatementStorageClass *); //
  168722             : 
  168723             :           /// \private
  168724             :           static void clearMemoryPool(); //
  168725             :           static void deleteMemoryPool(); //
  168726             : 
  168727             :           /// \private
  168728             :           static void extendMemoryPoolForFileIO(); //
  168729             : 
  168730             :           /// \private
  168731             :           static SgIncludeNextDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  168732             :           /// \private
  168733             :           static SgIncludeNextDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  168734             : 
  168735             :           /// \private
  168736             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  168737             :           /// \private
  168738             :           static void resetValidFreepointers(); //
  168739             :           /// \private
  168740             :           static unsigned long getNumberOfLastValidPointer(); //
  168741             : 
  168742             : 
  168743             : #if defined(INLINE_FUNCTIONS)
  168744             :       /*! \brief returns pointer to newly allocated IR node */
  168745             :           inline void *operator new (size_t size);
  168746             : #else
  168747             :       /*! \brief returns pointer to newly allocated IR node */
  168748             :           void *operator new (size_t size);
  168749             : #endif
  168750             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  168751             :           void operator delete (void* pointer, size_t size);
  168752             : 
  168753             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  168754           0 :           void operator delete (void* pointer)
  168755             :              {
  168756             :             // This is the generated delete operator...
  168757           0 :                SgIncludeNextDirectiveStatement::operator delete (pointer,sizeof(SgIncludeNextDirectiveStatement));
  168758             :              }
  168759             : 
  168760             :       /*! \brief Returns the total number of IR nodes of this type */
  168761             :           static size_t numberOfNodes();
  168762             : 
  168763             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  168764             :           static size_t memoryUsage();
  168765             : 
  168766             :       // End of scope which started in IR nodes specific code 
  168767             :       /* */
  168768             : 
  168769             :       /* name Internal Functions
  168770             :           \brief Internal functions ... incomplete-documentation
  168771             : 
  168772             :           These functions have been made public as part of the design, but they are suggested for internal use 
  168773             :           or by particularly knowledgeable users for specialized tools or applications.
  168774             : 
  168775             :           \internal We could not make these private because they are required by user for special purposes. And 
  168776             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  168777             :          
  168778             :        */
  168779             : 
  168780             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  168781             :        // overridden in every class by *generated* implementation
  168782             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  168783             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  168784             :        // MS: 06/28/02 container of names of variables or container indices 
  168785             :        // used used in the traversal to access AST successor nodes
  168786             :        // overridden in every class by *generated* implementation
  168787             :       /*! \brief container of names of variables or container indices used used in the traversal
  168788             :           to access AST successor nodes overridden in every class by *generated* implementation */
  168789             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  168790             : 
  168791             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  168792             :        // than all the vector copies. The implementation for these functions is generated for each class.
  168793             :       /*! \brief return number of children in the traversal successor list */
  168794             :           virtual size_t get_numberOfTraversalSuccessors() override;
  168795             :       /*! \brief index-based access to traversal successors by index number */
  168796             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  168797             :       /*! \brief index-based access to traversal successors by child node */
  168798             :           virtual size_t get_childIndex(SgNode *child) override;
  168799             : 
  168800             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  168801             :        // MS: 08/16/2002 method for generating RTI information
  168802             :       /*! \brief return C++ Runtime-Time-Information */
  168803             :           virtual RTIReturnType roseRTI() override;
  168804             : #endif
  168805             :       /* */
  168806             : 
  168807             : 
  168808             : 
  168809             :       /* name Deprecated Functions
  168810             :           \brief Deprecated functions ... incomplete-documentation
  168811             : 
  168812             :           These functions have been deprecated from use.
  168813             :        */
  168814             :       /* */
  168815             : 
  168816             :       /*! returns a C style string (char*) representing the class name */
  168817             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  168818             : 
  168819             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  168820             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  168821             : #if 0
  168822             :       /*! returns old style Sage II enum values */
  168823             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  168824             :       /*! returns old style Sage II enum values */
  168825             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  168826             : #endif
  168827             :       /* */
  168828             : 
  168829             : 
  168830             : 
  168831             : 
  168832             :      public:
  168833             :       /* name Traversal Support Functions
  168834             :           \brief Traversal support functions ... incomplete-documentation
  168835             : 
  168836             :           These functions have been made public as part of the design, but they are suggested for internal use 
  168837             :           or by particularly knowledgable users for specialized tools or applications.
  168838             :        */
  168839             :       /* */
  168840             : 
  168841             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  168842             :        // (inferior to ROSE traversal mechanism, experimental).
  168843             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  168844             :        */
  168845             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  168846             : 
  168847             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  168848             :       /*! \brief support for the classic visitor pattern done in GoF */
  168849             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  168850             : 
  168851             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  168852             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  168853             :        */
  168854             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  168855             : 
  168856             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  168857             :        */
  168858             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  168859             : 
  168860             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  168861             :        // This traversal helps support internal tools that call static member functions.
  168862             :        // note: this function operates on the memory pools.
  168863             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  168864             :        */
  168865             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  168866             :       /* */
  168867             : 
  168868             : 
  168869             :      public:
  168870             :       /* name Memory Allocation Functions
  168871             :           \brief Memory allocations functions ... incomplete-documentation
  168872             : 
  168873             :           These functions have been made public as part of the design, but they are suggested for internal use 
  168874             :           or by particularly knowledgable users for specialized tools or applications.
  168875             :        */
  168876             :       /* */
  168877             : 
  168878             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  168879             : 
  168880             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  168881             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  168882             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  168883             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  168884             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  168885             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  168886             :           being used with the AST File I/O mechanism.
  168887             :        */
  168888             :           virtual bool isInMemoryPool() override;
  168889             : 
  168890             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  168891             : 
  168892             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  168893             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  168894             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  168895             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  168896             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  168897             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  168898             :           being used with the AST File I/O mechanism.
  168899             :        */
  168900             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  168901             : 
  168902             :       // DQ (4/30/2006): Modified to be a const function.
  168903             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  168904             : 
  168905             :           This functions is part of general support for many possible tools to operate 
  168906             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  168907             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  168908             :           less than the set of pointers used by the AST file I/O. This is part of
  168909             :           work implemented by Andreas, and support tools such as the AST graph generation.
  168910             : 
  168911             :           \warning This function can return unexpected data members and thus the 
  168912             :                    order and the number of elements is unpredicable and subject 
  168913             :                    to change.
  168914             : 
  168915             :           \returns STL vector of pairs of SgNode* and strings
  168916             :        */
  168917             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  168918             : 
  168919             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  168920             : 
  168921             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  168922             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  168923             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  168924             : 
  168925             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  168926             :                    and subject to change.
  168927             :        */
  168928             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  168929             : 
  168930             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  168931             : 
  168932             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  168933             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  168934             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  168935             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  168936             : 
  168937             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  168938             : 
  168939             :           \returns long
  168940             :        */
  168941             :           virtual long getChildIndex( SgNode* childNode ) const override;
  168942             : 
  168943             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  168944             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168945             :       /* \brief Constructor for use by AST File I/O Mechanism
  168946             : 
  168947             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  168948             :           which obtained via fast binary file I/O from disk.
  168949             :        */
  168950             :        // SgIncludeNextDirectiveStatement( SgIncludeNextDirectiveStatementStorageClass& source );
  168951             : 
  168952             : 
  168953             : 
  168954             : 
  168955             : 
  168956             :  // JH (10/24/2005): methods added to support the ast file IO
  168957             :     private:
  168958             : 
  168959             :       /* name AST Memory Allocation Support Functions
  168960             :           \brief Memory allocations support....
  168961             : 
  168962             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  168963             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  168964             :           and support the AST File I/O Mechanism.
  168965             :        */
  168966             :       /* */
  168967             : 
  168968             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  168969             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  168970             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  168971             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  168972             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  168973             :           a correspinding one in the AST_FILE_IO class!
  168974             :        */
  168975             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  168976             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168977             :       /* \brief Typedef used for low level memory access.
  168978             :        */
  168979             :        // typedef unsigned char* TestType;
  168980             : 
  168981             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  168982             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  168983             :       /* \brief Typedef used to hold memory addresses as values.
  168984             :        */
  168985             :        // typedef unsigned long  AddressType;
  168986             : 
  168987             : 
  168988             : 
  168989             :        // necessary, to have direct access to the p_freepointer and the private methods !
  168990             :       /*! \brief friend class declaration to support AST File I/O */
  168991             :           friend class AST_FILE_IO;
  168992             : 
  168993             :       /*! \brief friend class declaration to support AST File I/O */
  168994             :           friend class SgIncludeNextDirectiveStatementStorageClass;
  168995             : 
  168996             :       /*! \brief friend class declaration to support AST File I/O */
  168997             :           friend class AstSpecificDataManagingClass;
  168998             : 
  168999             :       /*! \brief friend class declaration to support AST File I/O */
  169000             :           friend class AstSpecificDataManagingClassStorageClass;
  169001             :     public:
  169002             :       /*! \brief IR node constructor to support AST File I/O */
  169003             :           SgIncludeNextDirectiveStatement( const SgIncludeNextDirectiveStatementStorageClass& source );
  169004             : 
  169005             :  // private: // JJW hack
  169006             :        /*
  169007             :           name AST Memory Allocation Support Variables
  169008             :           Memory allocations support variables 
  169009             : 
  169010             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  169011             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  169012             :           and support the AST File I/O Mechanism.
  169013             :        */
  169014             :       /* */
  169015             : 
  169016             :     public:
  169017             : 
  169018             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  169019             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  169020             :       // virtual SgNode* addRegExpAttribute();
  169021             :       /*! \brief Support for AST matching using regular expression.
  169022             : 
  169023             :           This support is incomplete and the subject of current research to define 
  169024             :           RegEx trees to support inexact matching.
  169025             :        */
  169026             :           SgIncludeNextDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  169027             : 
  169028             : // *** COMMON CODE SECTION ENDS HERE ***
  169029             : 
  169030             : 
  169031             : // End of memberFunctionString
  169032             : // Start of memberFunctionString
  169033             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  169034             : 
  169035             :      // the generated cast function
  169036             :      // friend ROSE_DLL_API SgIncludeNextDirectiveStatement* isSgIncludeNextDirectiveStatement ( SgNode* s );
  169037             : 
  169038             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  169039             : 
  169040             : 
  169041             : // End of memberFunctionString
  169042             : // Start of memberFunctionString
  169043             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  169044             : 
  169045             :           void post_construction_initialization() override;
  169046             : 
  169047             : 
  169048             : // End of memberFunctionString
  169049             : 
  169050             : 
  169051             :      public: 
  169052             :          virtual ~SgIncludeNextDirectiveStatement();
  169053             : 
  169054             : 
  169055             :      public: 
  169056             :          SgIncludeNextDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  169057             :          SgIncludeNextDirectiveStatement(); 
  169058             : 
  169059             :     protected:
  169060             : 
  169061             :     friend struct Rose::Traits::generated::describe_node_t<SgIncludeNextDirectiveStatement>;
  169062             : 
  169063             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169064             : 
  169065             : 
  169066             :    };
  169067             : #endif
  169068             : 
  169069             : // postdeclarations for SgIncludeNextDirectiveStatement
  169070             : 
  169071             : /* #line 169072 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169072             : 
  169073             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  169074             : 
  169075             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169076             : 
  169077             : 
  169078             : /* #line 169079 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169079             : 
  169080             : 
  169081             : 
  169082             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169083             : 
  169084             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  169085             : //      This code is automatically generated for each 
  169086             : //      terminal and non-terminal within the defined 
  169087             : //      grammar.  There is a simple way to change the 
  169088             : //      code to fix bugs etc.  See the ROSE README file
  169089             : //      for directions.
  169090             : 
  169091             : // tps: (02/22/2010): Adding DLL export requirements
  169092             : #include "rosedll.h"
  169093             : 
  169094             : // predeclarations for SgIdentDirectiveStatement
  169095             : 
  169096             : /* #line 169097 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169097             : 
  169098             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  169099             : 
  169100             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169101             : 
  169102             : #if 1
  169103             : // Class Definition for SgIdentDirectiveStatement
  169104             : class ROSE_DLL_API SgIdentDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  169105             :    {
  169106             :      public:
  169107             : 
  169108             : 
  169109             : /* #line 169110 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169110             : 
  169111             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  169112             : // Start of memberFunctionString
  169113             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  169114             : 
  169115             : // *** COMMON CODE SECTION BEGINS HERE ***
  169116             : 
  169117             :     public:
  169118             : 
  169119             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  169120             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  169121             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  169122             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  169123             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  169124             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  169125             : 
  169126             :       /*! \brief returns a string representing the class name */
  169127             :           virtual std::string class_name() const override;
  169128             : 
  169129             :       /*! \brief returns new style SageIII enum values */
  169130             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  169131             : 
  169132             :       /*! \brief static variant value */
  169133             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  169134             :        // static const VariantT static_variant = V_SgIdentDirectiveStatement;
  169135             :           enum { static_variant = V_SgIdentDirectiveStatement };
  169136             : 
  169137             :        /* the generated cast function */
  169138             :       /*! \brief Casts pointer from base class to derived class */
  169139             :           ROSE_DLL_API friend       SgIdentDirectiveStatement* isSgIdentDirectiveStatement(       SgNode * s );
  169140             : 
  169141             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  169142             :           ROSE_DLL_API friend const SgIdentDirectiveStatement* isSgIdentDirectiveStatement( const SgNode * s );
  169143             : 
  169144             :      // ******************************************
  169145             :      // * Memory Pool / New / Delete
  169146             :      // ******************************************
  169147             : 
  169148             :      public:
  169149             :           /// \private
  169150             :           static const unsigned pool_size; //
  169151             :           /// \private
  169152             :           static std::vector<unsigned char *> pools; //
  169153             :           /// \private
  169154             :           static SgIdentDirectiveStatement * next_node; // 
  169155             : 
  169156             :           /// \private
  169157             :           static unsigned long initializeStorageClassArray(SgIdentDirectiveStatementStorageClass *); //
  169158             : 
  169159             :           /// \private
  169160             :           static void clearMemoryPool(); //
  169161             :           static void deleteMemoryPool(); //
  169162             : 
  169163             :           /// \private
  169164             :           static void extendMemoryPoolForFileIO(); //
  169165             : 
  169166             :           /// \private
  169167             :           static SgIdentDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  169168             :           /// \private
  169169             :           static SgIdentDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  169170             : 
  169171             :           /// \private
  169172             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  169173             :           /// \private
  169174             :           static void resetValidFreepointers(); //
  169175             :           /// \private
  169176             :           static unsigned long getNumberOfLastValidPointer(); //
  169177             : 
  169178             : 
  169179             : #if defined(INLINE_FUNCTIONS)
  169180             :       /*! \brief returns pointer to newly allocated IR node */
  169181             :           inline void *operator new (size_t size);
  169182             : #else
  169183             :       /*! \brief returns pointer to newly allocated IR node */
  169184             :           void *operator new (size_t size);
  169185             : #endif
  169186             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  169187             :           void operator delete (void* pointer, size_t size);
  169188             : 
  169189             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  169190           0 :           void operator delete (void* pointer)
  169191             :              {
  169192             :             // This is the generated delete operator...
  169193           0 :                SgIdentDirectiveStatement::operator delete (pointer,sizeof(SgIdentDirectiveStatement));
  169194             :              }
  169195             : 
  169196             :       /*! \brief Returns the total number of IR nodes of this type */
  169197             :           static size_t numberOfNodes();
  169198             : 
  169199             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  169200             :           static size_t memoryUsage();
  169201             : 
  169202             :       // End of scope which started in IR nodes specific code 
  169203             :       /* */
  169204             : 
  169205             :       /* name Internal Functions
  169206             :           \brief Internal functions ... incomplete-documentation
  169207             : 
  169208             :           These functions have been made public as part of the design, but they are suggested for internal use 
  169209             :           or by particularly knowledgeable users for specialized tools or applications.
  169210             : 
  169211             :           \internal We could not make these private because they are required by user for special purposes. And 
  169212             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  169213             :          
  169214             :        */
  169215             : 
  169216             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  169217             :        // overridden in every class by *generated* implementation
  169218             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  169219             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  169220             :        // MS: 06/28/02 container of names of variables or container indices 
  169221             :        // used used in the traversal to access AST successor nodes
  169222             :        // overridden in every class by *generated* implementation
  169223             :       /*! \brief container of names of variables or container indices used used in the traversal
  169224             :           to access AST successor nodes overridden in every class by *generated* implementation */
  169225             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  169226             : 
  169227             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  169228             :        // than all the vector copies. The implementation for these functions is generated for each class.
  169229             :       /*! \brief return number of children in the traversal successor list */
  169230             :           virtual size_t get_numberOfTraversalSuccessors() override;
  169231             :       /*! \brief index-based access to traversal successors by index number */
  169232             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  169233             :       /*! \brief index-based access to traversal successors by child node */
  169234             :           virtual size_t get_childIndex(SgNode *child) override;
  169235             : 
  169236             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  169237             :        // MS: 08/16/2002 method for generating RTI information
  169238             :       /*! \brief return C++ Runtime-Time-Information */
  169239             :           virtual RTIReturnType roseRTI() override;
  169240             : #endif
  169241             :       /* */
  169242             : 
  169243             : 
  169244             : 
  169245             :       /* name Deprecated Functions
  169246             :           \brief Deprecated functions ... incomplete-documentation
  169247             : 
  169248             :           These functions have been deprecated from use.
  169249             :        */
  169250             :       /* */
  169251             : 
  169252             :       /*! returns a C style string (char*) representing the class name */
  169253             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  169254             : 
  169255             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  169256             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  169257             : #if 0
  169258             :       /*! returns old style Sage II enum values */
  169259             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  169260             :       /*! returns old style Sage II enum values */
  169261             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  169262             : #endif
  169263             :       /* */
  169264             : 
  169265             : 
  169266             : 
  169267             : 
  169268             :      public:
  169269             :       /* name Traversal Support Functions
  169270             :           \brief Traversal support functions ... incomplete-documentation
  169271             : 
  169272             :           These functions have been made public as part of the design, but they are suggested for internal use 
  169273             :           or by particularly knowledgable users for specialized tools or applications.
  169274             :        */
  169275             :       /* */
  169276             : 
  169277             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  169278             :        // (inferior to ROSE traversal mechanism, experimental).
  169279             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  169280             :        */
  169281             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  169282             : 
  169283             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  169284             :       /*! \brief support for the classic visitor pattern done in GoF */
  169285             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  169286             : 
  169287             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  169288             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  169289             :        */
  169290             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  169291             : 
  169292             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  169293             :        */
  169294             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  169295             : 
  169296             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  169297             :        // This traversal helps support internal tools that call static member functions.
  169298             :        // note: this function operates on the memory pools.
  169299             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  169300             :        */
  169301             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  169302             :       /* */
  169303             : 
  169304             : 
  169305             :      public:
  169306             :       /* name Memory Allocation Functions
  169307             :           \brief Memory allocations functions ... incomplete-documentation
  169308             : 
  169309             :           These functions have been made public as part of the design, but they are suggested for internal use 
  169310             :           or by particularly knowledgable users for specialized tools or applications.
  169311             :        */
  169312             :       /* */
  169313             : 
  169314             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  169315             : 
  169316             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  169317             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  169318             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  169319             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  169320             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  169321             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  169322             :           being used with the AST File I/O mechanism.
  169323             :        */
  169324             :           virtual bool isInMemoryPool() override;
  169325             : 
  169326             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  169327             : 
  169328             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  169329             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  169330             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  169331             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  169332             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  169333             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  169334             :           being used with the AST File I/O mechanism.
  169335             :        */
  169336             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  169337             : 
  169338             :       // DQ (4/30/2006): Modified to be a const function.
  169339             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  169340             : 
  169341             :           This functions is part of general support for many possible tools to operate 
  169342             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  169343             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  169344             :           less than the set of pointers used by the AST file I/O. This is part of
  169345             :           work implemented by Andreas, and support tools such as the AST graph generation.
  169346             : 
  169347             :           \warning This function can return unexpected data members and thus the 
  169348             :                    order and the number of elements is unpredicable and subject 
  169349             :                    to change.
  169350             : 
  169351             :           \returns STL vector of pairs of SgNode* and strings
  169352             :        */
  169353             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  169354             : 
  169355             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  169356             : 
  169357             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  169358             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  169359             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  169360             : 
  169361             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  169362             :                    and subject to change.
  169363             :        */
  169364             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  169365             : 
  169366             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  169367             : 
  169368             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  169369             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  169370             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  169371             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  169372             : 
  169373             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  169374             : 
  169375             :           \returns long
  169376             :        */
  169377             :           virtual long getChildIndex( SgNode* childNode ) const override;
  169378             : 
  169379             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  169380             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  169381             :       /* \brief Constructor for use by AST File I/O Mechanism
  169382             : 
  169383             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  169384             :           which obtained via fast binary file I/O from disk.
  169385             :        */
  169386             :        // SgIdentDirectiveStatement( SgIdentDirectiveStatementStorageClass& source );
  169387             : 
  169388             : 
  169389             : 
  169390             : 
  169391             : 
  169392             :  // JH (10/24/2005): methods added to support the ast file IO
  169393             :     private:
  169394             : 
  169395             :       /* name AST Memory Allocation Support Functions
  169396             :           \brief Memory allocations support....
  169397             : 
  169398             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  169399             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  169400             :           and support the AST File I/O Mechanism.
  169401             :        */
  169402             :       /* */
  169403             : 
  169404             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  169405             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  169406             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  169407             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  169408             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  169409             :           a correspinding one in the AST_FILE_IO class!
  169410             :        */
  169411             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  169412             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  169413             :       /* \brief Typedef used for low level memory access.
  169414             :        */
  169415             :        // typedef unsigned char* TestType;
  169416             : 
  169417             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  169418             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  169419             :       /* \brief Typedef used to hold memory addresses as values.
  169420             :        */
  169421             :        // typedef unsigned long  AddressType;
  169422             : 
  169423             : 
  169424             : 
  169425             :        // necessary, to have direct access to the p_freepointer and the private methods !
  169426             :       /*! \brief friend class declaration to support AST File I/O */
  169427             :           friend class AST_FILE_IO;
  169428             : 
  169429             :       /*! \brief friend class declaration to support AST File I/O */
  169430             :           friend class SgIdentDirectiveStatementStorageClass;
  169431             : 
  169432             :       /*! \brief friend class declaration to support AST File I/O */
  169433             :           friend class AstSpecificDataManagingClass;
  169434             : 
  169435             :       /*! \brief friend class declaration to support AST File I/O */
  169436             :           friend class AstSpecificDataManagingClassStorageClass;
  169437             :     public:
  169438             :       /*! \brief IR node constructor to support AST File I/O */
  169439             :           SgIdentDirectiveStatement( const SgIdentDirectiveStatementStorageClass& source );
  169440             : 
  169441             :  // private: // JJW hack
  169442             :        /*
  169443             :           name AST Memory Allocation Support Variables
  169444             :           Memory allocations support variables 
  169445             : 
  169446             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  169447             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  169448             :           and support the AST File I/O Mechanism.
  169449             :        */
  169450             :       /* */
  169451             : 
  169452             :     public:
  169453             : 
  169454             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  169455             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  169456             :       // virtual SgNode* addRegExpAttribute();
  169457             :       /*! \brief Support for AST matching using regular expression.
  169458             : 
  169459             :           This support is incomplete and the subject of current research to define 
  169460             :           RegEx trees to support inexact matching.
  169461             :        */
  169462             :           SgIdentDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  169463             : 
  169464             : // *** COMMON CODE SECTION ENDS HERE ***
  169465             : 
  169466             : 
  169467             : // End of memberFunctionString
  169468             : // Start of memberFunctionString
  169469             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  169470             : 
  169471             :      // the generated cast function
  169472             :      // friend ROSE_DLL_API SgIdentDirectiveStatement* isSgIdentDirectiveStatement ( SgNode* s );
  169473             : 
  169474             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  169475             : 
  169476             : 
  169477             : // End of memberFunctionString
  169478             : // Start of memberFunctionString
  169479             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  169480             : 
  169481             :           void post_construction_initialization() override;
  169482             : 
  169483             : 
  169484             : // End of memberFunctionString
  169485             : 
  169486             : 
  169487             :      public: 
  169488             :          virtual ~SgIdentDirectiveStatement();
  169489             : 
  169490             : 
  169491             :      public: 
  169492             :          SgIdentDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  169493             :          SgIdentDirectiveStatement(); 
  169494             : 
  169495             :     protected:
  169496             : 
  169497             :     friend struct Rose::Traits::generated::describe_node_t<SgIdentDirectiveStatement>;
  169498             : 
  169499             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169500             : 
  169501             : 
  169502             :    };
  169503             : #endif
  169504             : 
  169505             : // postdeclarations for SgIdentDirectiveStatement
  169506             : 
  169507             : /* #line 169508 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169508             : 
  169509             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  169510             : 
  169511             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169512             : 
  169513             : 
  169514             : /* #line 169515 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169515             : 
  169516             : 
  169517             : 
  169518             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169519             : 
  169520             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  169521             : //      This code is automatically generated for each 
  169522             : //      terminal and non-terminal within the defined 
  169523             : //      grammar.  There is a simple way to change the 
  169524             : //      code to fix bugs etc.  See the ROSE README file
  169525             : //      for directions.
  169526             : 
  169527             : // tps: (02/22/2010): Adding DLL export requirements
  169528             : #include "rosedll.h"
  169529             : 
  169530             : // predeclarations for SgLinemarkerDirectiveStatement
  169531             : 
  169532             : /* #line 169533 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169533             : 
  169534             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  169535             : 
  169536             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169537             : 
  169538             : #if 1
  169539             : // Class Definition for SgLinemarkerDirectiveStatement
  169540             : class ROSE_DLL_API SgLinemarkerDirectiveStatement  : public SgC_PreprocessorDirectiveStatement
  169541             :    {
  169542             :      public:
  169543             : 
  169544             : 
  169545             : /* #line 169546 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169546             : 
  169547             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  169548             : // Start of memberFunctionString
  169549             : /* #line 3915 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  169550             : 
  169551             : 
  169552             : 
  169553             : 
  169554             : // End of memberFunctionString
  169555             : // Start of memberFunctionString
  169556             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  169557             : 
  169558             : // *** COMMON CODE SECTION BEGINS HERE ***
  169559             : 
  169560             :     public:
  169561             : 
  169562             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  169563             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  169564             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  169565             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  169566             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  169567             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  169568             : 
  169569             :       /*! \brief returns a string representing the class name */
  169570             :           virtual std::string class_name() const override;
  169571             : 
  169572             :       /*! \brief returns new style SageIII enum values */
  169573             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  169574             : 
  169575             :       /*! \brief static variant value */
  169576             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  169577             :        // static const VariantT static_variant = V_SgLinemarkerDirectiveStatement;
  169578             :           enum { static_variant = V_SgLinemarkerDirectiveStatement };
  169579             : 
  169580             :        /* the generated cast function */
  169581             :       /*! \brief Casts pointer from base class to derived class */
  169582             :           ROSE_DLL_API friend       SgLinemarkerDirectiveStatement* isSgLinemarkerDirectiveStatement(       SgNode * s );
  169583             : 
  169584             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  169585             :           ROSE_DLL_API friend const SgLinemarkerDirectiveStatement* isSgLinemarkerDirectiveStatement( const SgNode * s );
  169586             : 
  169587             :      // ******************************************
  169588             :      // * Memory Pool / New / Delete
  169589             :      // ******************************************
  169590             : 
  169591             :      public:
  169592             :           /// \private
  169593             :           static const unsigned pool_size; //
  169594             :           /// \private
  169595             :           static std::vector<unsigned char *> pools; //
  169596             :           /// \private
  169597             :           static SgLinemarkerDirectiveStatement * next_node; // 
  169598             : 
  169599             :           /// \private
  169600             :           static unsigned long initializeStorageClassArray(SgLinemarkerDirectiveStatementStorageClass *); //
  169601             : 
  169602             :           /// \private
  169603             :           static void clearMemoryPool(); //
  169604             :           static void deleteMemoryPool(); //
  169605             : 
  169606             :           /// \private
  169607             :           static void extendMemoryPoolForFileIO(); //
  169608             : 
  169609             :           /// \private
  169610             :           static SgLinemarkerDirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  169611             :           /// \private
  169612             :           static SgLinemarkerDirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  169613             : 
  169614             :           /// \private
  169615             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  169616             :           /// \private
  169617             :           static void resetValidFreepointers(); //
  169618             :           /// \private
  169619             :           static unsigned long getNumberOfLastValidPointer(); //
  169620             : 
  169621             : 
  169622             : #if defined(INLINE_FUNCTIONS)
  169623             :       /*! \brief returns pointer to newly allocated IR node */
  169624             :           inline void *operator new (size_t size);
  169625             : #else
  169626             :       /*! \brief returns pointer to newly allocated IR node */
  169627             :           void *operator new (size_t size);
  169628             : #endif
  169629             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  169630             :           void operator delete (void* pointer, size_t size);
  169631             : 
  169632             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  169633           0 :           void operator delete (void* pointer)
  169634             :              {
  169635             :             // This is the generated delete operator...
  169636           0 :                SgLinemarkerDirectiveStatement::operator delete (pointer,sizeof(SgLinemarkerDirectiveStatement));
  169637             :              }
  169638             : 
  169639             :       /*! \brief Returns the total number of IR nodes of this type */
  169640             :           static size_t numberOfNodes();
  169641             : 
  169642             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  169643             :           static size_t memoryUsage();
  169644             : 
  169645             :       // End of scope which started in IR nodes specific code 
  169646             :       /* */
  169647             : 
  169648             :       /* name Internal Functions
  169649             :           \brief Internal functions ... incomplete-documentation
  169650             : 
  169651             :           These functions have been made public as part of the design, but they are suggested for internal use 
  169652             :           or by particularly knowledgeable users for specialized tools or applications.
  169653             : 
  169654             :           \internal We could not make these private because they are required by user for special purposes. And 
  169655             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  169656             :          
  169657             :        */
  169658             : 
  169659             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  169660             :        // overridden in every class by *generated* implementation
  169661             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  169662             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  169663             :        // MS: 06/28/02 container of names of variables or container indices 
  169664             :        // used used in the traversal to access AST successor nodes
  169665             :        // overridden in every class by *generated* implementation
  169666             :       /*! \brief container of names of variables or container indices used used in the traversal
  169667             :           to access AST successor nodes overridden in every class by *generated* implementation */
  169668             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  169669             : 
  169670             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  169671             :        // than all the vector copies. The implementation for these functions is generated for each class.
  169672             :       /*! \brief return number of children in the traversal successor list */
  169673             :           virtual size_t get_numberOfTraversalSuccessors() override;
  169674             :       /*! \brief index-based access to traversal successors by index number */
  169675             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  169676             :       /*! \brief index-based access to traversal successors by child node */
  169677             :           virtual size_t get_childIndex(SgNode *child) override;
  169678             : 
  169679             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  169680             :        // MS: 08/16/2002 method for generating RTI information
  169681             :       /*! \brief return C++ Runtime-Time-Information */
  169682             :           virtual RTIReturnType roseRTI() override;
  169683             : #endif
  169684             :       /* */
  169685             : 
  169686             : 
  169687             : 
  169688             :       /* name Deprecated Functions
  169689             :           \brief Deprecated functions ... incomplete-documentation
  169690             : 
  169691             :           These functions have been deprecated from use.
  169692             :        */
  169693             :       /* */
  169694             : 
  169695             :       /*! returns a C style string (char*) representing the class name */
  169696             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  169697             : 
  169698             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  169699             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  169700             : #if 0
  169701             :       /*! returns old style Sage II enum values */
  169702             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  169703             :       /*! returns old style Sage II enum values */
  169704             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  169705             : #endif
  169706             :       /* */
  169707             : 
  169708             : 
  169709             : 
  169710             : 
  169711             :      public:
  169712             :       /* name Traversal Support Functions
  169713             :           \brief Traversal support functions ... incomplete-documentation
  169714             : 
  169715             :           These functions have been made public as part of the design, but they are suggested for internal use 
  169716             :           or by particularly knowledgable users for specialized tools or applications.
  169717             :        */
  169718             :       /* */
  169719             : 
  169720             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  169721             :        // (inferior to ROSE traversal mechanism, experimental).
  169722             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  169723             :        */
  169724             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  169725             : 
  169726             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  169727             :       /*! \brief support for the classic visitor pattern done in GoF */
  169728             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  169729             : 
  169730             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  169731             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  169732             :        */
  169733             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  169734             : 
  169735             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  169736             :        */
  169737             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  169738             : 
  169739             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  169740             :        // This traversal helps support internal tools that call static member functions.
  169741             :        // note: this function operates on the memory pools.
  169742             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  169743             :        */
  169744             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  169745             :       /* */
  169746             : 
  169747             : 
  169748             :      public:
  169749             :       /* name Memory Allocation Functions
  169750             :           \brief Memory allocations functions ... incomplete-documentation
  169751             : 
  169752             :           These functions have been made public as part of the design, but they are suggested for internal use 
  169753             :           or by particularly knowledgable users for specialized tools or applications.
  169754             :        */
  169755             :       /* */
  169756             : 
  169757             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  169758             : 
  169759             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  169760             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  169761             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  169762             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  169763             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  169764             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  169765             :           being used with the AST File I/O mechanism.
  169766             :        */
  169767             :           virtual bool isInMemoryPool() override;
  169768             : 
  169769             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  169770             : 
  169771             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  169772             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  169773             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  169774             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  169775             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  169776             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  169777             :           being used with the AST File I/O mechanism.
  169778             :        */
  169779             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  169780             : 
  169781             :       // DQ (4/30/2006): Modified to be a const function.
  169782             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  169783             : 
  169784             :           This functions is part of general support for many possible tools to operate 
  169785             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  169786             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  169787             :           less than the set of pointers used by the AST file I/O. This is part of
  169788             :           work implemented by Andreas, and support tools such as the AST graph generation.
  169789             : 
  169790             :           \warning This function can return unexpected data members and thus the 
  169791             :                    order and the number of elements is unpredicable and subject 
  169792             :                    to change.
  169793             : 
  169794             :           \returns STL vector of pairs of SgNode* and strings
  169795             :        */
  169796             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  169797             : 
  169798             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  169799             : 
  169800             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  169801             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  169802             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  169803             : 
  169804             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  169805             :                    and subject to change.
  169806             :        */
  169807             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  169808             : 
  169809             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  169810             : 
  169811             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  169812             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  169813             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  169814             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  169815             : 
  169816             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  169817             : 
  169818             :           \returns long
  169819             :        */
  169820             :           virtual long getChildIndex( SgNode* childNode ) const override;
  169821             : 
  169822             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  169823             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  169824             :       /* \brief Constructor for use by AST File I/O Mechanism
  169825             : 
  169826             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  169827             :           which obtained via fast binary file I/O from disk.
  169828             :        */
  169829             :        // SgLinemarkerDirectiveStatement( SgLinemarkerDirectiveStatementStorageClass& source );
  169830             : 
  169831             : 
  169832             : 
  169833             : 
  169834             : 
  169835             :  // JH (10/24/2005): methods added to support the ast file IO
  169836             :     private:
  169837             : 
  169838             :       /* name AST Memory Allocation Support Functions
  169839             :           \brief Memory allocations support....
  169840             : 
  169841             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  169842             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  169843             :           and support the AST File I/O Mechanism.
  169844             :        */
  169845             :       /* */
  169846             : 
  169847             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  169848             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  169849             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  169850             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  169851             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  169852             :           a correspinding one in the AST_FILE_IO class!
  169853             :        */
  169854             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  169855             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  169856             :       /* \brief Typedef used for low level memory access.
  169857             :        */
  169858             :        // typedef unsigned char* TestType;
  169859             : 
  169860             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  169861             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  169862             :       /* \brief Typedef used to hold memory addresses as values.
  169863             :        */
  169864             :        // typedef unsigned long  AddressType;
  169865             : 
  169866             : 
  169867             : 
  169868             :        // necessary, to have direct access to the p_freepointer and the private methods !
  169869             :       /*! \brief friend class declaration to support AST File I/O */
  169870             :           friend class AST_FILE_IO;
  169871             : 
  169872             :       /*! \brief friend class declaration to support AST File I/O */
  169873             :           friend class SgLinemarkerDirectiveStatementStorageClass;
  169874             : 
  169875             :       /*! \brief friend class declaration to support AST File I/O */
  169876             :           friend class AstSpecificDataManagingClass;
  169877             : 
  169878             :       /*! \brief friend class declaration to support AST File I/O */
  169879             :           friend class AstSpecificDataManagingClassStorageClass;
  169880             :     public:
  169881             :       /*! \brief IR node constructor to support AST File I/O */
  169882             :           SgLinemarkerDirectiveStatement( const SgLinemarkerDirectiveStatementStorageClass& source );
  169883             : 
  169884             :  // private: // JJW hack
  169885             :        /*
  169886             :           name AST Memory Allocation Support Variables
  169887             :           Memory allocations support variables 
  169888             : 
  169889             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  169890             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  169891             :           and support the AST File I/O Mechanism.
  169892             :        */
  169893             :       /* */
  169894             : 
  169895             :     public:
  169896             : 
  169897             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  169898             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  169899             :       // virtual SgNode* addRegExpAttribute();
  169900             :       /*! \brief Support for AST matching using regular expression.
  169901             : 
  169902             :           This support is incomplete and the subject of current research to define 
  169903             :           RegEx trees to support inexact matching.
  169904             :        */
  169905             :           SgLinemarkerDirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  169906             : 
  169907             : // *** COMMON CODE SECTION ENDS HERE ***
  169908             : 
  169909             : 
  169910             : // End of memberFunctionString
  169911             : // Start of memberFunctionString
  169912             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  169913             : 
  169914             :      // the generated cast function
  169915             :      // friend ROSE_DLL_API SgLinemarkerDirectiveStatement* isSgLinemarkerDirectiveStatement ( SgNode* s );
  169916             : 
  169917             :           typedef SgC_PreprocessorDirectiveStatement base_node_type;
  169918             : 
  169919             : 
  169920             : // End of memberFunctionString
  169921             : // Start of memberFunctionString
  169922             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  169923             : 
  169924             :           void post_construction_initialization() override;
  169925             : 
  169926             : 
  169927             : // End of memberFunctionString
  169928             : 
  169929             :      public: 
  169930             :          int get_linenumber() const;
  169931             :          void set_linenumber(int linenumber);
  169932             : 
  169933             :      public: 
  169934             :          std::string get_filename() const;
  169935             :          void set_filename(std::string filename);
  169936             : 
  169937             :      public: 
  169938             :          const SgUnsignedCharList&  get_flaglist() const;
  169939             :          SgUnsignedCharList& get_flaglist(); 
  169940             : 
  169941             : 
  169942             :      public: 
  169943             :          virtual ~SgLinemarkerDirectiveStatement();
  169944             : 
  169945             : 
  169946             :      public: 
  169947             :          SgLinemarkerDirectiveStatement(Sg_File_Info* startOfConstruct ); 
  169948             :          SgLinemarkerDirectiveStatement(); 
  169949             : 
  169950             :     protected:
  169951             : // Start of memberFunctionString
  169952             : int p_linenumber;
  169953             :           
  169954             : // End of memberFunctionString
  169955             : // Start of memberFunctionString
  169956             : std::string p_filename;
  169957             :           
  169958             : // End of memberFunctionString
  169959             : // Start of memberFunctionString
  169960             : SgUnsignedCharList p_flaglist;
  169961             :           
  169962             : // End of memberFunctionString
  169963             : 
  169964             :     friend struct Rose::Traits::generated::describe_node_t<SgLinemarkerDirectiveStatement>;
  169965             :     friend struct Rose::Traits::generated::describe_field_t<SgLinemarkerDirectiveStatement, int,&SgLinemarkerDirectiveStatement::p_linenumber>;
  169966             :     friend struct Rose::Traits::generated::describe_field_t<SgLinemarkerDirectiveStatement, std::string,&SgLinemarkerDirectiveStatement::p_filename>;
  169967             :     friend struct Rose::Traits::generated::describe_field_t<SgLinemarkerDirectiveStatement, SgUnsignedCharList,&SgLinemarkerDirectiveStatement::p_flaglist>;
  169968             : 
  169969             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169970             : 
  169971             : 
  169972             :    };
  169973             : #endif
  169974             : 
  169975             : // postdeclarations for SgLinemarkerDirectiveStatement
  169976             : 
  169977             : /* #line 169978 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169978             : 
  169979             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  169980             : 
  169981             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169982             : 
  169983             : 
  169984             : /* #line 169985 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  169985             : 
  169986             : 
  169987             : 
  169988             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  169989             : 
  169990             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  169991             : //      This code is automatically generated for each 
  169992             : //      terminal and non-terminal within the defined 
  169993             : //      grammar.  There is a simple way to change the 
  169994             : //      code to fix bugs etc.  See the ROSE README file
  169995             : //      for directions.
  169996             : 
  169997             : // tps: (02/22/2010): Adding DLL export requirements
  169998             : #include "rosedll.h"
  169999             : 
  170000             : // predeclarations for SgOmpThreadprivateStatement
  170001             : 
  170002             : /* #line 170003 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170003             : 
  170004             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  170005             : 
  170006             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170007             : 
  170008             : #if 1
  170009             : // Class Definition for SgOmpThreadprivateStatement
  170010             : class ROSE_DLL_API SgOmpThreadprivateStatement  : public SgDeclarationStatement
  170011             :    {
  170012             :      public:
  170013             : 
  170014             : 
  170015             : /* #line 170016 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170016             : 
  170017             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  170018             : // Start of memberFunctionString
  170019             : /* #line 19169 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  170020             : 
  170021             :  //! Required for any declaration statement
  170022             :      virtual SgName get_mangled_name(void) const override;
  170023             : 
  170024             : 
  170025             : // End of memberFunctionString
  170026             : // Start of memberFunctionString
  170027             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  170028             : 
  170029             : // *** COMMON CODE SECTION BEGINS HERE ***
  170030             : 
  170031             :     public:
  170032             : 
  170033             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  170034             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  170035             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  170036             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  170037             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  170038             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  170039             : 
  170040             :       /*! \brief returns a string representing the class name */
  170041             :           virtual std::string class_name() const override;
  170042             : 
  170043             :       /*! \brief returns new style SageIII enum values */
  170044             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  170045             : 
  170046             :       /*! \brief static variant value */
  170047             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  170048             :        // static const VariantT static_variant = V_SgOmpThreadprivateStatement;
  170049             :           enum { static_variant = V_SgOmpThreadprivateStatement };
  170050             : 
  170051             :        /* the generated cast function */
  170052             :       /*! \brief Casts pointer from base class to derived class */
  170053             :           ROSE_DLL_API friend       SgOmpThreadprivateStatement* isSgOmpThreadprivateStatement(       SgNode * s );
  170054             : 
  170055             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  170056             :           ROSE_DLL_API friend const SgOmpThreadprivateStatement* isSgOmpThreadprivateStatement( const SgNode * s );
  170057             : 
  170058             :      // ******************************************
  170059             :      // * Memory Pool / New / Delete
  170060             :      // ******************************************
  170061             : 
  170062             :      public:
  170063             :           /// \private
  170064             :           static const unsigned pool_size; //
  170065             :           /// \private
  170066             :           static std::vector<unsigned char *> pools; //
  170067             :           /// \private
  170068             :           static SgOmpThreadprivateStatement * next_node; // 
  170069             : 
  170070             :           /// \private
  170071             :           static unsigned long initializeStorageClassArray(SgOmpThreadprivateStatementStorageClass *); //
  170072             : 
  170073             :           /// \private
  170074             :           static void clearMemoryPool(); //
  170075             :           static void deleteMemoryPool(); //
  170076             : 
  170077             :           /// \private
  170078             :           static void extendMemoryPoolForFileIO(); //
  170079             : 
  170080             :           /// \private
  170081             :           static SgOmpThreadprivateStatement * getPointerFromGlobalIndex(unsigned long); //
  170082             :           /// \private
  170083             :           static SgOmpThreadprivateStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  170084             : 
  170085             :           /// \private
  170086             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  170087             :           /// \private
  170088             :           static void resetValidFreepointers(); //
  170089             :           /// \private
  170090             :           static unsigned long getNumberOfLastValidPointer(); //
  170091             : 
  170092             : 
  170093             : #if defined(INLINE_FUNCTIONS)
  170094             :       /*! \brief returns pointer to newly allocated IR node */
  170095             :           inline void *operator new (size_t size);
  170096             : #else
  170097             :       /*! \brief returns pointer to newly allocated IR node */
  170098             :           void *operator new (size_t size);
  170099             : #endif
  170100             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  170101             :           void operator delete (void* pointer, size_t size);
  170102             : 
  170103             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  170104           0 :           void operator delete (void* pointer)
  170105             :              {
  170106             :             // This is the generated delete operator...
  170107           0 :                SgOmpThreadprivateStatement::operator delete (pointer,sizeof(SgOmpThreadprivateStatement));
  170108             :              }
  170109             : 
  170110             :       /*! \brief Returns the total number of IR nodes of this type */
  170111             :           static size_t numberOfNodes();
  170112             : 
  170113             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  170114             :           static size_t memoryUsage();
  170115             : 
  170116             :       // End of scope which started in IR nodes specific code 
  170117             :       /* */
  170118             : 
  170119             :       /* name Internal Functions
  170120             :           \brief Internal functions ... incomplete-documentation
  170121             : 
  170122             :           These functions have been made public as part of the design, but they are suggested for internal use 
  170123             :           or by particularly knowledgeable users for specialized tools or applications.
  170124             : 
  170125             :           \internal We could not make these private because they are required by user for special purposes. And 
  170126             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  170127             :          
  170128             :        */
  170129             : 
  170130             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  170131             :        // overridden in every class by *generated* implementation
  170132             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  170133             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  170134             :        // MS: 06/28/02 container of names of variables or container indices 
  170135             :        // used used in the traversal to access AST successor nodes
  170136             :        // overridden in every class by *generated* implementation
  170137             :       /*! \brief container of names of variables or container indices used used in the traversal
  170138             :           to access AST successor nodes overridden in every class by *generated* implementation */
  170139             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  170140             : 
  170141             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  170142             :        // than all the vector copies. The implementation for these functions is generated for each class.
  170143             :       /*! \brief return number of children in the traversal successor list */
  170144             :           virtual size_t get_numberOfTraversalSuccessors() override;
  170145             :       /*! \brief index-based access to traversal successors by index number */
  170146             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  170147             :       /*! \brief index-based access to traversal successors by child node */
  170148             :           virtual size_t get_childIndex(SgNode *child) override;
  170149             : 
  170150             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  170151             :        // MS: 08/16/2002 method for generating RTI information
  170152             :       /*! \brief return C++ Runtime-Time-Information */
  170153             :           virtual RTIReturnType roseRTI() override;
  170154             : #endif
  170155             :       /* */
  170156             : 
  170157             : 
  170158             : 
  170159             :       /* name Deprecated Functions
  170160             :           \brief Deprecated functions ... incomplete-documentation
  170161             : 
  170162             :           These functions have been deprecated from use.
  170163             :        */
  170164             :       /* */
  170165             : 
  170166             :       /*! returns a C style string (char*) representing the class name */
  170167             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  170168             : 
  170169             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  170170             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  170171             : #if 0
  170172             :       /*! returns old style Sage II enum values */
  170173             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  170174             :       /*! returns old style Sage II enum values */
  170175             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  170176             : #endif
  170177             :       /* */
  170178             : 
  170179             : 
  170180             : 
  170181             : 
  170182             :      public:
  170183             :       /* name Traversal Support Functions
  170184             :           \brief Traversal support functions ... incomplete-documentation
  170185             : 
  170186             :           These functions have been made public as part of the design, but they are suggested for internal use 
  170187             :           or by particularly knowledgable users for specialized tools or applications.
  170188             :        */
  170189             :       /* */
  170190             : 
  170191             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  170192             :        // (inferior to ROSE traversal mechanism, experimental).
  170193             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  170194             :        */
  170195             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  170196             : 
  170197             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  170198             :       /*! \brief support for the classic visitor pattern done in GoF */
  170199             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  170200             : 
  170201             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  170202             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  170203             :        */
  170204             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  170205             : 
  170206             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  170207             :        */
  170208             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  170209             : 
  170210             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  170211             :        // This traversal helps support internal tools that call static member functions.
  170212             :        // note: this function operates on the memory pools.
  170213             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  170214             :        */
  170215             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  170216             :       /* */
  170217             : 
  170218             : 
  170219             :      public:
  170220             :       /* name Memory Allocation Functions
  170221             :           \brief Memory allocations functions ... incomplete-documentation
  170222             : 
  170223             :           These functions have been made public as part of the design, but they are suggested for internal use 
  170224             :           or by particularly knowledgable users for specialized tools or applications.
  170225             :        */
  170226             :       /* */
  170227             : 
  170228             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  170229             : 
  170230             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  170231             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  170232             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  170233             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  170234             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  170235             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  170236             :           being used with the AST File I/O mechanism.
  170237             :        */
  170238             :           virtual bool isInMemoryPool() override;
  170239             : 
  170240             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  170241             : 
  170242             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  170243             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  170244             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  170245             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  170246             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  170247             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  170248             :           being used with the AST File I/O mechanism.
  170249             :        */
  170250             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  170251             : 
  170252             :       // DQ (4/30/2006): Modified to be a const function.
  170253             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  170254             : 
  170255             :           This functions is part of general support for many possible tools to operate 
  170256             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  170257             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  170258             :           less than the set of pointers used by the AST file I/O. This is part of
  170259             :           work implemented by Andreas, and support tools such as the AST graph generation.
  170260             : 
  170261             :           \warning This function can return unexpected data members and thus the 
  170262             :                    order and the number of elements is unpredicable and subject 
  170263             :                    to change.
  170264             : 
  170265             :           \returns STL vector of pairs of SgNode* and strings
  170266             :        */
  170267             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  170268             : 
  170269             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  170270             : 
  170271             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  170272             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  170273             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  170274             : 
  170275             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  170276             :                    and subject to change.
  170277             :        */
  170278             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  170279             : 
  170280             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  170281             : 
  170282             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  170283             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  170284             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  170285             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  170286             : 
  170287             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  170288             : 
  170289             :           \returns long
  170290             :        */
  170291             :           virtual long getChildIndex( SgNode* childNode ) const override;
  170292             : 
  170293             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  170294             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  170295             :       /* \brief Constructor for use by AST File I/O Mechanism
  170296             : 
  170297             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  170298             :           which obtained via fast binary file I/O from disk.
  170299             :        */
  170300             :        // SgOmpThreadprivateStatement( SgOmpThreadprivateStatementStorageClass& source );
  170301             : 
  170302             : 
  170303             : 
  170304             : 
  170305             : 
  170306             :  // JH (10/24/2005): methods added to support the ast file IO
  170307             :     private:
  170308             : 
  170309             :       /* name AST Memory Allocation Support Functions
  170310             :           \brief Memory allocations support....
  170311             : 
  170312             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  170313             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  170314             :           and support the AST File I/O Mechanism.
  170315             :        */
  170316             :       /* */
  170317             : 
  170318             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  170319             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  170320             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  170321             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  170322             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  170323             :           a correspinding one in the AST_FILE_IO class!
  170324             :        */
  170325             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  170326             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  170327             :       /* \brief Typedef used for low level memory access.
  170328             :        */
  170329             :        // typedef unsigned char* TestType;
  170330             : 
  170331             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  170332             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  170333             :       /* \brief Typedef used to hold memory addresses as values.
  170334             :        */
  170335             :        // typedef unsigned long  AddressType;
  170336             : 
  170337             : 
  170338             : 
  170339             :        // necessary, to have direct access to the p_freepointer and the private methods !
  170340             :       /*! \brief friend class declaration to support AST File I/O */
  170341             :           friend class AST_FILE_IO;
  170342             : 
  170343             :       /*! \brief friend class declaration to support AST File I/O */
  170344             :           friend class SgOmpThreadprivateStatementStorageClass;
  170345             : 
  170346             :       /*! \brief friend class declaration to support AST File I/O */
  170347             :           friend class AstSpecificDataManagingClass;
  170348             : 
  170349             :       /*! \brief friend class declaration to support AST File I/O */
  170350             :           friend class AstSpecificDataManagingClassStorageClass;
  170351             :     public:
  170352             :       /*! \brief IR node constructor to support AST File I/O */
  170353             :           SgOmpThreadprivateStatement( const SgOmpThreadprivateStatementStorageClass& source );
  170354             : 
  170355             :  // private: // JJW hack
  170356             :        /*
  170357             :           name AST Memory Allocation Support Variables
  170358             :           Memory allocations support variables 
  170359             : 
  170360             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  170361             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  170362             :           and support the AST File I/O Mechanism.
  170363             :        */
  170364             :       /* */
  170365             : 
  170366             :     public:
  170367             : 
  170368             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  170369             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  170370             :       // virtual SgNode* addRegExpAttribute();
  170371             :       /*! \brief Support for AST matching using regular expression.
  170372             : 
  170373             :           This support is incomplete and the subject of current research to define 
  170374             :           RegEx trees to support inexact matching.
  170375             :        */
  170376             :           SgOmpThreadprivateStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  170377             : 
  170378             : // *** COMMON CODE SECTION ENDS HERE ***
  170379             : 
  170380             : 
  170381             : // End of memberFunctionString
  170382             : // Start of memberFunctionString
  170383             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  170384             : 
  170385             :      // the generated cast function
  170386             :      // friend ROSE_DLL_API SgOmpThreadprivateStatement* isSgOmpThreadprivateStatement ( SgNode* s );
  170387             : 
  170388             :           typedef SgDeclarationStatement base_node_type;
  170389             : 
  170390             : 
  170391             : // End of memberFunctionString
  170392             : // Start of memberFunctionString
  170393             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  170394             : 
  170395             :           void post_construction_initialization() override;
  170396             : 
  170397             : 
  170398             : // End of memberFunctionString
  170399             : 
  170400             :      public: 
  170401             :          const SgVarRefExpPtrList&  get_variables() const;
  170402             :          SgVarRefExpPtrList& get_variables(); 
  170403             : 
  170404             : 
  170405             :      public: 
  170406             :          virtual ~SgOmpThreadprivateStatement();
  170407             : 
  170408             : 
  170409             :      public: 
  170410             :          SgOmpThreadprivateStatement(Sg_File_Info* startOfConstruct ); 
  170411             :          SgOmpThreadprivateStatement(); 
  170412             : 
  170413             :     protected:
  170414             : // Start of memberFunctionString
  170415             : SgVarRefExpPtrList p_variables;
  170416             :           
  170417             : // End of memberFunctionString
  170418             : 
  170419             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpThreadprivateStatement>;
  170420             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpThreadprivateStatement, SgVarRefExpPtrList,&SgOmpThreadprivateStatement::p_variables>;
  170421             : 
  170422             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170423             : 
  170424             : 
  170425             :    };
  170426             : #endif
  170427             : 
  170428             : // postdeclarations for SgOmpThreadprivateStatement
  170429             : 
  170430             : /* #line 170431 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170431             : 
  170432             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  170433             : 
  170434             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170435             : 
  170436             : 
  170437             : /* #line 170438 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170438             : 
  170439             : 
  170440             : 
  170441             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170442             : 
  170443             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  170444             : //      This code is automatically generated for each 
  170445             : //      terminal and non-terminal within the defined 
  170446             : //      grammar.  There is a simple way to change the 
  170447             : //      code to fix bugs etc.  See the ROSE README file
  170448             : //      for directions.
  170449             : 
  170450             : // tps: (02/22/2010): Adding DLL export requirements
  170451             : #include "rosedll.h"
  170452             : 
  170453             : // predeclarations for SgOmpRequiresStatement
  170454             : 
  170455             : /* #line 170456 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170456             : 
  170457             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  170458             : 
  170459             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170460             : 
  170461             : #if 1
  170462             : // Class Definition for SgOmpRequiresStatement
  170463             : class ROSE_DLL_API SgOmpRequiresStatement  : public SgDeclarationStatement
  170464             :    {
  170465             :      public:
  170466             : 
  170467             : 
  170468             : /* #line 170469 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170469             : 
  170470             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  170471             : // Start of memberFunctionString
  170472             : /* #line 19252 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  170473             : 
  170474             : //! Required for any declaration statement
  170475             :      virtual SgName get_mangled_name(void) const override;
  170476             : 
  170477             : 
  170478             : // End of memberFunctionString
  170479             : // Start of memberFunctionString
  170480             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  170481             : 
  170482             : // *** COMMON CODE SECTION BEGINS HERE ***
  170483             : 
  170484             :     public:
  170485             : 
  170486             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  170487             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  170488             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  170489             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  170490             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  170491             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  170492             : 
  170493             :       /*! \brief returns a string representing the class name */
  170494             :           virtual std::string class_name() const override;
  170495             : 
  170496             :       /*! \brief returns new style SageIII enum values */
  170497             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  170498             : 
  170499             :       /*! \brief static variant value */
  170500             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  170501             :        // static const VariantT static_variant = V_SgOmpRequiresStatement;
  170502             :           enum { static_variant = V_SgOmpRequiresStatement };
  170503             : 
  170504             :        /* the generated cast function */
  170505             :       /*! \brief Casts pointer from base class to derived class */
  170506             :           ROSE_DLL_API friend       SgOmpRequiresStatement* isSgOmpRequiresStatement(       SgNode * s );
  170507             : 
  170508             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  170509             :           ROSE_DLL_API friend const SgOmpRequiresStatement* isSgOmpRequiresStatement( const SgNode * s );
  170510             : 
  170511             :      // ******************************************
  170512             :      // * Memory Pool / New / Delete
  170513             :      // ******************************************
  170514             : 
  170515             :      public:
  170516             :           /// \private
  170517             :           static const unsigned pool_size; //
  170518             :           /// \private
  170519             :           static std::vector<unsigned char *> pools; //
  170520             :           /// \private
  170521             :           static SgOmpRequiresStatement * next_node; // 
  170522             : 
  170523             :           /// \private
  170524             :           static unsigned long initializeStorageClassArray(SgOmpRequiresStatementStorageClass *); //
  170525             : 
  170526             :           /// \private
  170527             :           static void clearMemoryPool(); //
  170528             :           static void deleteMemoryPool(); //
  170529             : 
  170530             :           /// \private
  170531             :           static void extendMemoryPoolForFileIO(); //
  170532             : 
  170533             :           /// \private
  170534             :           static SgOmpRequiresStatement * getPointerFromGlobalIndex(unsigned long); //
  170535             :           /// \private
  170536             :           static SgOmpRequiresStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  170537             : 
  170538             :           /// \private
  170539             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  170540             :           /// \private
  170541             :           static void resetValidFreepointers(); //
  170542             :           /// \private
  170543             :           static unsigned long getNumberOfLastValidPointer(); //
  170544             : 
  170545             : 
  170546             : #if defined(INLINE_FUNCTIONS)
  170547             :       /*! \brief returns pointer to newly allocated IR node */
  170548             :           inline void *operator new (size_t size);
  170549             : #else
  170550             :       /*! \brief returns pointer to newly allocated IR node */
  170551             :           void *operator new (size_t size);
  170552             : #endif
  170553             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  170554             :           void operator delete (void* pointer, size_t size);
  170555             : 
  170556             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  170557           0 :           void operator delete (void* pointer)
  170558             :              {
  170559             :             // This is the generated delete operator...
  170560           0 :                SgOmpRequiresStatement::operator delete (pointer,sizeof(SgOmpRequiresStatement));
  170561             :              }
  170562             : 
  170563             :       /*! \brief Returns the total number of IR nodes of this type */
  170564             :           static size_t numberOfNodes();
  170565             : 
  170566             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  170567             :           static size_t memoryUsage();
  170568             : 
  170569             :       // End of scope which started in IR nodes specific code 
  170570             :       /* */
  170571             : 
  170572             :       /* name Internal Functions
  170573             :           \brief Internal functions ... incomplete-documentation
  170574             : 
  170575             :           These functions have been made public as part of the design, but they are suggested for internal use 
  170576             :           or by particularly knowledgeable users for specialized tools or applications.
  170577             : 
  170578             :           \internal We could not make these private because they are required by user for special purposes. And 
  170579             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  170580             :          
  170581             :        */
  170582             : 
  170583             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  170584             :        // overridden in every class by *generated* implementation
  170585             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  170586             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  170587             :        // MS: 06/28/02 container of names of variables or container indices 
  170588             :        // used used in the traversal to access AST successor nodes
  170589             :        // overridden in every class by *generated* implementation
  170590             :       /*! \brief container of names of variables or container indices used used in the traversal
  170591             :           to access AST successor nodes overridden in every class by *generated* implementation */
  170592             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  170593             : 
  170594             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  170595             :        // than all the vector copies. The implementation for these functions is generated for each class.
  170596             :       /*! \brief return number of children in the traversal successor list */
  170597             :           virtual size_t get_numberOfTraversalSuccessors() override;
  170598             :       /*! \brief index-based access to traversal successors by index number */
  170599             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  170600             :       /*! \brief index-based access to traversal successors by child node */
  170601             :           virtual size_t get_childIndex(SgNode *child) override;
  170602             : 
  170603             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  170604             :        // MS: 08/16/2002 method for generating RTI information
  170605             :       /*! \brief return C++ Runtime-Time-Information */
  170606             :           virtual RTIReturnType roseRTI() override;
  170607             : #endif
  170608             :       /* */
  170609             : 
  170610             : 
  170611             : 
  170612             :       /* name Deprecated Functions
  170613             :           \brief Deprecated functions ... incomplete-documentation
  170614             : 
  170615             :           These functions have been deprecated from use.
  170616             :        */
  170617             :       /* */
  170618             : 
  170619             :       /*! returns a C style string (char*) representing the class name */
  170620             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  170621             : 
  170622             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  170623             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  170624             : #if 0
  170625             :       /*! returns old style Sage II enum values */
  170626             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  170627             :       /*! returns old style Sage II enum values */
  170628             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  170629             : #endif
  170630             :       /* */
  170631             : 
  170632             : 
  170633             : 
  170634             : 
  170635             :      public:
  170636             :       /* name Traversal Support Functions
  170637             :           \brief Traversal support functions ... incomplete-documentation
  170638             : 
  170639             :           These functions have been made public as part of the design, but they are suggested for internal use 
  170640             :           or by particularly knowledgable users for specialized tools or applications.
  170641             :        */
  170642             :       /* */
  170643             : 
  170644             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  170645             :        // (inferior to ROSE traversal mechanism, experimental).
  170646             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  170647             :        */
  170648             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  170649             : 
  170650             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  170651             :       /*! \brief support for the classic visitor pattern done in GoF */
  170652             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  170653             : 
  170654             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  170655             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  170656             :        */
  170657             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  170658             : 
  170659             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  170660             :        */
  170661             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  170662             : 
  170663             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  170664             :        // This traversal helps support internal tools that call static member functions.
  170665             :        // note: this function operates on the memory pools.
  170666             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  170667             :        */
  170668             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  170669             :       /* */
  170670             : 
  170671             : 
  170672             :      public:
  170673             :       /* name Memory Allocation Functions
  170674             :           \brief Memory allocations functions ... incomplete-documentation
  170675             : 
  170676             :           These functions have been made public as part of the design, but they are suggested for internal use 
  170677             :           or by particularly knowledgable users for specialized tools or applications.
  170678             :        */
  170679             :       /* */
  170680             : 
  170681             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  170682             : 
  170683             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  170684             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  170685             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  170686             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  170687             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  170688             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  170689             :           being used with the AST File I/O mechanism.
  170690             :        */
  170691             :           virtual bool isInMemoryPool() override;
  170692             : 
  170693             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  170694             : 
  170695             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  170696             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  170697             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  170698             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  170699             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  170700             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  170701             :           being used with the AST File I/O mechanism.
  170702             :        */
  170703             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  170704             : 
  170705             :       // DQ (4/30/2006): Modified to be a const function.
  170706             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  170707             : 
  170708             :           This functions is part of general support for many possible tools to operate 
  170709             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  170710             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  170711             :           less than the set of pointers used by the AST file I/O. This is part of
  170712             :           work implemented by Andreas, and support tools such as the AST graph generation.
  170713             : 
  170714             :           \warning This function can return unexpected data members and thus the 
  170715             :                    order and the number of elements is unpredicable and subject 
  170716             :                    to change.
  170717             : 
  170718             :           \returns STL vector of pairs of SgNode* and strings
  170719             :        */
  170720             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  170721             : 
  170722             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  170723             : 
  170724             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  170725             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  170726             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  170727             : 
  170728             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  170729             :                    and subject to change.
  170730             :        */
  170731             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  170732             : 
  170733             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  170734             : 
  170735             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  170736             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  170737             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  170738             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  170739             : 
  170740             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  170741             : 
  170742             :           \returns long
  170743             :        */
  170744             :           virtual long getChildIndex( SgNode* childNode ) const override;
  170745             : 
  170746             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  170747             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  170748             :       /* \brief Constructor for use by AST File I/O Mechanism
  170749             : 
  170750             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  170751             :           which obtained via fast binary file I/O from disk.
  170752             :        */
  170753             :        // SgOmpRequiresStatement( SgOmpRequiresStatementStorageClass& source );
  170754             : 
  170755             : 
  170756             : 
  170757             : 
  170758             : 
  170759             :  // JH (10/24/2005): methods added to support the ast file IO
  170760             :     private:
  170761             : 
  170762             :       /* name AST Memory Allocation Support Functions
  170763             :           \brief Memory allocations support....
  170764             : 
  170765             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  170766             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  170767             :           and support the AST File I/O Mechanism.
  170768             :        */
  170769             :       /* */
  170770             : 
  170771             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  170772             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  170773             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  170774             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  170775             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  170776             :           a correspinding one in the AST_FILE_IO class!
  170777             :        */
  170778             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  170779             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  170780             :       /* \brief Typedef used for low level memory access.
  170781             :        */
  170782             :        // typedef unsigned char* TestType;
  170783             : 
  170784             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  170785             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  170786             :       /* \brief Typedef used to hold memory addresses as values.
  170787             :        */
  170788             :        // typedef unsigned long  AddressType;
  170789             : 
  170790             : 
  170791             : 
  170792             :        // necessary, to have direct access to the p_freepointer and the private methods !
  170793             :       /*! \brief friend class declaration to support AST File I/O */
  170794             :           friend class AST_FILE_IO;
  170795             : 
  170796             :       /*! \brief friend class declaration to support AST File I/O */
  170797             :           friend class SgOmpRequiresStatementStorageClass;
  170798             : 
  170799             :       /*! \brief friend class declaration to support AST File I/O */
  170800             :           friend class AstSpecificDataManagingClass;
  170801             : 
  170802             :       /*! \brief friend class declaration to support AST File I/O */
  170803             :           friend class AstSpecificDataManagingClassStorageClass;
  170804             :     public:
  170805             :       /*! \brief IR node constructor to support AST File I/O */
  170806             :           SgOmpRequiresStatement( const SgOmpRequiresStatementStorageClass& source );
  170807             : 
  170808             :  // private: // JJW hack
  170809             :        /*
  170810             :           name AST Memory Allocation Support Variables
  170811             :           Memory allocations support variables 
  170812             : 
  170813             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  170814             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  170815             :           and support the AST File I/O Mechanism.
  170816             :        */
  170817             :       /* */
  170818             : 
  170819             :     public:
  170820             : 
  170821             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  170822             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  170823             :       // virtual SgNode* addRegExpAttribute();
  170824             :       /*! \brief Support for AST matching using regular expression.
  170825             : 
  170826             :           This support is incomplete and the subject of current research to define 
  170827             :           RegEx trees to support inexact matching.
  170828             :        */
  170829             :           SgOmpRequiresStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  170830             : 
  170831             : // *** COMMON CODE SECTION ENDS HERE ***
  170832             : 
  170833             : 
  170834             : // End of memberFunctionString
  170835             : // Start of memberFunctionString
  170836             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  170837             : 
  170838             :      // the generated cast function
  170839             :      // friend ROSE_DLL_API SgOmpRequiresStatement* isSgOmpRequiresStatement ( SgNode* s );
  170840             : 
  170841             :           typedef SgDeclarationStatement base_node_type;
  170842             : 
  170843             : 
  170844             : // End of memberFunctionString
  170845             : // Start of memberFunctionString
  170846             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  170847             : 
  170848             :           void post_construction_initialization() override;
  170849             : 
  170850             : 
  170851             : // End of memberFunctionString
  170852             : 
  170853             :      public: 
  170854             :          const SgOmpClausePtrList&  get_clauses() const;
  170855             :          SgOmpClausePtrList& get_clauses(); 
  170856             : 
  170857             : 
  170858             :      public: 
  170859             :          virtual ~SgOmpRequiresStatement();
  170860             : 
  170861             : 
  170862             :      public: 
  170863             :          SgOmpRequiresStatement(Sg_File_Info* startOfConstruct ); 
  170864             :          SgOmpRequiresStatement(); 
  170865             : 
  170866             :     protected:
  170867             : // Start of memberFunctionString
  170868             : SgOmpClausePtrList p_clauses;
  170869             :           
  170870             : // End of memberFunctionString
  170871             : 
  170872             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpRequiresStatement>;
  170873             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpRequiresStatement, SgOmpClausePtrList,&SgOmpRequiresStatement::p_clauses>;
  170874             : 
  170875             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170876             : 
  170877             : 
  170878             :    };
  170879             : #endif
  170880             : 
  170881             : // postdeclarations for SgOmpRequiresStatement
  170882             : 
  170883             : /* #line 170884 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170884             : 
  170885             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  170886             : 
  170887             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170888             : 
  170889             : 
  170890             : /* #line 170891 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170891             : 
  170892             : 
  170893             : 
  170894             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170895             : 
  170896             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  170897             : //      This code is automatically generated for each 
  170898             : //      terminal and non-terminal within the defined 
  170899             : //      grammar.  There is a simple way to change the 
  170900             : //      code to fix bugs etc.  See the ROSE README file
  170901             : //      for directions.
  170902             : 
  170903             : // tps: (02/22/2010): Adding DLL export requirements
  170904             : #include "rosedll.h"
  170905             : 
  170906             : // predeclarations for SgFortranIncludeLine
  170907             : 
  170908             : /* #line 170909 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170909             : 
  170910             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  170911             : 
  170912             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  170913             : 
  170914             : #if 1
  170915             : // Class Definition for SgFortranIncludeLine
  170916             : class ROSE_DLL_API SgFortranIncludeLine  : public SgDeclarationStatement
  170917             :    {
  170918             :      public:
  170919             : 
  170920             : 
  170921             : /* #line 170922 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  170922             : 
  170923             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  170924             : // Start of memberFunctionString
  170925             : /* #line 3847 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  170926             : 
  170927             :        // Not sure if we need these...
  170928             :        // virtual unsigned int cfgIndexForEnd() const override;
  170929             :        // virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  170930             :        // virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  170931             : 
  170932             :           virtual SgName get_mangled_name() const override;
  170933             : 
  170934             : 
  170935             : // End of memberFunctionString
  170936             : // Start of memberFunctionString
  170937             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  170938             : 
  170939             : // *** COMMON CODE SECTION BEGINS HERE ***
  170940             : 
  170941             :     public:
  170942             : 
  170943             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  170944             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  170945             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  170946             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  170947             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  170948             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  170949             : 
  170950             :       /*! \brief returns a string representing the class name */
  170951             :           virtual std::string class_name() const override;
  170952             : 
  170953             :       /*! \brief returns new style SageIII enum values */
  170954             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  170955             : 
  170956             :       /*! \brief static variant value */
  170957             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  170958             :        // static const VariantT static_variant = V_SgFortranIncludeLine;
  170959             :           enum { static_variant = V_SgFortranIncludeLine };
  170960             : 
  170961             :        /* the generated cast function */
  170962             :       /*! \brief Casts pointer from base class to derived class */
  170963             :           ROSE_DLL_API friend       SgFortranIncludeLine* isSgFortranIncludeLine(       SgNode * s );
  170964             : 
  170965             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  170966             :           ROSE_DLL_API friend const SgFortranIncludeLine* isSgFortranIncludeLine( const SgNode * s );
  170967             : 
  170968             :      // ******************************************
  170969             :      // * Memory Pool / New / Delete
  170970             :      // ******************************************
  170971             : 
  170972             :      public:
  170973             :           /// \private
  170974             :           static const unsigned pool_size; //
  170975             :           /// \private
  170976             :           static std::vector<unsigned char *> pools; //
  170977             :           /// \private
  170978             :           static SgFortranIncludeLine * next_node; // 
  170979             : 
  170980             :           /// \private
  170981             :           static unsigned long initializeStorageClassArray(SgFortranIncludeLineStorageClass *); //
  170982             : 
  170983             :           /// \private
  170984             :           static void clearMemoryPool(); //
  170985             :           static void deleteMemoryPool(); //
  170986             : 
  170987             :           /// \private
  170988             :           static void extendMemoryPoolForFileIO(); //
  170989             : 
  170990             :           /// \private
  170991             :           static SgFortranIncludeLine * getPointerFromGlobalIndex(unsigned long); //
  170992             :           /// \private
  170993             :           static SgFortranIncludeLine * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  170994             : 
  170995             :           /// \private
  170996             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  170997             :           /// \private
  170998             :           static void resetValidFreepointers(); //
  170999             :           /// \private
  171000             :           static unsigned long getNumberOfLastValidPointer(); //
  171001             : 
  171002             : 
  171003             : #if defined(INLINE_FUNCTIONS)
  171004             :       /*! \brief returns pointer to newly allocated IR node */
  171005             :           inline void *operator new (size_t size);
  171006             : #else
  171007             :       /*! \brief returns pointer to newly allocated IR node */
  171008             :           void *operator new (size_t size);
  171009             : #endif
  171010             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  171011             :           void operator delete (void* pointer, size_t size);
  171012             : 
  171013             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  171014           0 :           void operator delete (void* pointer)
  171015             :              {
  171016             :             // This is the generated delete operator...
  171017           0 :                SgFortranIncludeLine::operator delete (pointer,sizeof(SgFortranIncludeLine));
  171018             :              }
  171019             : 
  171020             :       /*! \brief Returns the total number of IR nodes of this type */
  171021             :           static size_t numberOfNodes();
  171022             : 
  171023             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  171024             :           static size_t memoryUsage();
  171025             : 
  171026             :       // End of scope which started in IR nodes specific code 
  171027             :       /* */
  171028             : 
  171029             :       /* name Internal Functions
  171030             :           \brief Internal functions ... incomplete-documentation
  171031             : 
  171032             :           These functions have been made public as part of the design, but they are suggested for internal use 
  171033             :           or by particularly knowledgeable users for specialized tools or applications.
  171034             : 
  171035             :           \internal We could not make these private because they are required by user for special purposes. And 
  171036             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  171037             :          
  171038             :        */
  171039             : 
  171040             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  171041             :        // overridden in every class by *generated* implementation
  171042             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  171043             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  171044             :        // MS: 06/28/02 container of names of variables or container indices 
  171045             :        // used used in the traversal to access AST successor nodes
  171046             :        // overridden in every class by *generated* implementation
  171047             :       /*! \brief container of names of variables or container indices used used in the traversal
  171048             :           to access AST successor nodes overridden in every class by *generated* implementation */
  171049             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  171050             : 
  171051             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  171052             :        // than all the vector copies. The implementation for these functions is generated for each class.
  171053             :       /*! \brief return number of children in the traversal successor list */
  171054             :           virtual size_t get_numberOfTraversalSuccessors() override;
  171055             :       /*! \brief index-based access to traversal successors by index number */
  171056             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  171057             :       /*! \brief index-based access to traversal successors by child node */
  171058             :           virtual size_t get_childIndex(SgNode *child) override;
  171059             : 
  171060             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  171061             :        // MS: 08/16/2002 method for generating RTI information
  171062             :       /*! \brief return C++ Runtime-Time-Information */
  171063             :           virtual RTIReturnType roseRTI() override;
  171064             : #endif
  171065             :       /* */
  171066             : 
  171067             : 
  171068             : 
  171069             :       /* name Deprecated Functions
  171070             :           \brief Deprecated functions ... incomplete-documentation
  171071             : 
  171072             :           These functions have been deprecated from use.
  171073             :        */
  171074             :       /* */
  171075             : 
  171076             :       /*! returns a C style string (char*) representing the class name */
  171077             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  171078             : 
  171079             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  171080             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  171081             : #if 0
  171082             :       /*! returns old style Sage II enum values */
  171083             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  171084             :       /*! returns old style Sage II enum values */
  171085             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  171086             : #endif
  171087             :       /* */
  171088             : 
  171089             : 
  171090             : 
  171091             : 
  171092             :      public:
  171093             :       /* name Traversal Support Functions
  171094             :           \brief Traversal support functions ... incomplete-documentation
  171095             : 
  171096             :           These functions have been made public as part of the design, but they are suggested for internal use 
  171097             :           or by particularly knowledgable users for specialized tools or applications.
  171098             :        */
  171099             :       /* */
  171100             : 
  171101             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  171102             :        // (inferior to ROSE traversal mechanism, experimental).
  171103             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  171104             :        */
  171105             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  171106             : 
  171107             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  171108             :       /*! \brief support for the classic visitor pattern done in GoF */
  171109             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  171110             : 
  171111             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  171112             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  171113             :        */
  171114             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  171115             : 
  171116             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  171117             :        */
  171118             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  171119             : 
  171120             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  171121             :        // This traversal helps support internal tools that call static member functions.
  171122             :        // note: this function operates on the memory pools.
  171123             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  171124             :        */
  171125             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  171126             :       /* */
  171127             : 
  171128             : 
  171129             :      public:
  171130             :       /* name Memory Allocation Functions
  171131             :           \brief Memory allocations functions ... incomplete-documentation
  171132             : 
  171133             :           These functions have been made public as part of the design, but they are suggested for internal use 
  171134             :           or by particularly knowledgable users for specialized tools or applications.
  171135             :        */
  171136             :       /* */
  171137             : 
  171138             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  171139             : 
  171140             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  171141             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  171142             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  171143             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  171144             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  171145             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  171146             :           being used with the AST File I/O mechanism.
  171147             :        */
  171148             :           virtual bool isInMemoryPool() override;
  171149             : 
  171150             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  171151             : 
  171152             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  171153             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  171154             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  171155             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  171156             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  171157             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  171158             :           being used with the AST File I/O mechanism.
  171159             :        */
  171160             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  171161             : 
  171162             :       // DQ (4/30/2006): Modified to be a const function.
  171163             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  171164             : 
  171165             :           This functions is part of general support for many possible tools to operate 
  171166             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  171167             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  171168             :           less than the set of pointers used by the AST file I/O. This is part of
  171169             :           work implemented by Andreas, and support tools such as the AST graph generation.
  171170             : 
  171171             :           \warning This function can return unexpected data members and thus the 
  171172             :                    order and the number of elements is unpredicable and subject 
  171173             :                    to change.
  171174             : 
  171175             :           \returns STL vector of pairs of SgNode* and strings
  171176             :        */
  171177             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  171178             : 
  171179             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  171180             : 
  171181             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  171182             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  171183             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  171184             : 
  171185             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  171186             :                    and subject to change.
  171187             :        */
  171188             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  171189             : 
  171190             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  171191             : 
  171192             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  171193             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  171194             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  171195             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  171196             : 
  171197             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  171198             : 
  171199             :           \returns long
  171200             :        */
  171201             :           virtual long getChildIndex( SgNode* childNode ) const override;
  171202             : 
  171203             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  171204             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  171205             :       /* \brief Constructor for use by AST File I/O Mechanism
  171206             : 
  171207             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  171208             :           which obtained via fast binary file I/O from disk.
  171209             :        */
  171210             :        // SgFortranIncludeLine( SgFortranIncludeLineStorageClass& source );
  171211             : 
  171212             : 
  171213             : 
  171214             : 
  171215             : 
  171216             :  // JH (10/24/2005): methods added to support the ast file IO
  171217             :     private:
  171218             : 
  171219             :       /* name AST Memory Allocation Support Functions
  171220             :           \brief Memory allocations support....
  171221             : 
  171222             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  171223             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  171224             :           and support the AST File I/O Mechanism.
  171225             :        */
  171226             :       /* */
  171227             : 
  171228             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  171229             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  171230             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  171231             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  171232             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  171233             :           a correspinding one in the AST_FILE_IO class!
  171234             :        */
  171235             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  171236             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  171237             :       /* \brief Typedef used for low level memory access.
  171238             :        */
  171239             :        // typedef unsigned char* TestType;
  171240             : 
  171241             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  171242             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  171243             :       /* \brief Typedef used to hold memory addresses as values.
  171244             :        */
  171245             :        // typedef unsigned long  AddressType;
  171246             : 
  171247             : 
  171248             : 
  171249             :        // necessary, to have direct access to the p_freepointer and the private methods !
  171250             :       /*! \brief friend class declaration to support AST File I/O */
  171251             :           friend class AST_FILE_IO;
  171252             : 
  171253             :       /*! \brief friend class declaration to support AST File I/O */
  171254             :           friend class SgFortranIncludeLineStorageClass;
  171255             : 
  171256             :       /*! \brief friend class declaration to support AST File I/O */
  171257             :           friend class AstSpecificDataManagingClass;
  171258             : 
  171259             :       /*! \brief friend class declaration to support AST File I/O */
  171260             :           friend class AstSpecificDataManagingClassStorageClass;
  171261             :     public:
  171262             :       /*! \brief IR node constructor to support AST File I/O */
  171263             :           SgFortranIncludeLine( const SgFortranIncludeLineStorageClass& source );
  171264             : 
  171265             :  // private: // JJW hack
  171266             :        /*
  171267             :           name AST Memory Allocation Support Variables
  171268             :           Memory allocations support variables 
  171269             : 
  171270             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  171271             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  171272             :           and support the AST File I/O Mechanism.
  171273             :        */
  171274             :       /* */
  171275             : 
  171276             :     public:
  171277             : 
  171278             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  171279             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  171280             :       // virtual SgNode* addRegExpAttribute();
  171281             :       /*! \brief Support for AST matching using regular expression.
  171282             : 
  171283             :           This support is incomplete and the subject of current research to define 
  171284             :           RegEx trees to support inexact matching.
  171285             :        */
  171286             :           SgFortranIncludeLine* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  171287             : 
  171288             : // *** COMMON CODE SECTION ENDS HERE ***
  171289             : 
  171290             : 
  171291             : // End of memberFunctionString
  171292             : // Start of memberFunctionString
  171293             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  171294             : 
  171295             :      // the generated cast function
  171296             :      // friend ROSE_DLL_API SgFortranIncludeLine* isSgFortranIncludeLine ( SgNode* s );
  171297             : 
  171298             :           typedef SgDeclarationStatement base_node_type;
  171299             : 
  171300             : 
  171301             : // End of memberFunctionString
  171302             : // Start of memberFunctionString
  171303             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  171304             : 
  171305             :           void post_construction_initialization() override;
  171306             : 
  171307             : 
  171308             : // End of memberFunctionString
  171309             : 
  171310             :      public: 
  171311             :          std::string get_filename() const;
  171312             :          void set_filename(std::string filename);
  171313             : 
  171314             : 
  171315             :      public: 
  171316             :          virtual ~SgFortranIncludeLine();
  171317             : 
  171318             : 
  171319             :      public: 
  171320             :          SgFortranIncludeLine(Sg_File_Info* startOfConstruct , std::string filename = ""); 
  171321             :          SgFortranIncludeLine(std::string filename); 
  171322             : 
  171323             :     protected:
  171324             : // Start of memberFunctionString
  171325             : std::string p_filename;
  171326             :           
  171327             : // End of memberFunctionString
  171328             : 
  171329             :     friend struct Rose::Traits::generated::describe_node_t<SgFortranIncludeLine>;
  171330             :     friend struct Rose::Traits::generated::describe_field_t<SgFortranIncludeLine, std::string,&SgFortranIncludeLine::p_filename>;
  171331             : 
  171332             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171333             : 
  171334             : 
  171335             :    };
  171336             : #endif
  171337             : 
  171338             : // postdeclarations for SgFortranIncludeLine
  171339             : 
  171340             : /* #line 171341 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171341             : 
  171342             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  171343             : 
  171344             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171345             : 
  171346             : 
  171347             : /* #line 171348 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171348             : 
  171349             : 
  171350             : 
  171351             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171352             : 
  171353             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  171354             : //      This code is automatically generated for each 
  171355             : //      terminal and non-terminal within the defined 
  171356             : //      grammar.  There is a simple way to change the 
  171357             : //      code to fix bugs etc.  See the ROSE README file
  171358             : //      for directions.
  171359             : 
  171360             : // tps: (02/22/2010): Adding DLL export requirements
  171361             : #include "rosedll.h"
  171362             : 
  171363             : // predeclarations for SgOmpTaskwaitStatement
  171364             : 
  171365             : /* #line 171366 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171366             : 
  171367             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  171368             : 
  171369             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171370             : 
  171371             : #if 1
  171372             : // Class Definition for SgOmpTaskwaitStatement
  171373             : class ROSE_DLL_API SgOmpTaskwaitStatement  : public SgDeclarationStatement
  171374             :    {
  171375             :      public:
  171376             : 
  171377             : 
  171378             : /* #line 171379 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171379             : 
  171380             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  171381             : // Start of memberFunctionString
  171382             : /* #line 19227 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  171383             : 
  171384             : //! Required for any declaration statement
  171385             :      virtual SgName get_mangled_name(void) const override;
  171386             : 
  171387             : 
  171388             : // End of memberFunctionString
  171389             : // Start of memberFunctionString
  171390             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  171391             : 
  171392             : // *** COMMON CODE SECTION BEGINS HERE ***
  171393             : 
  171394             :     public:
  171395             : 
  171396             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  171397             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  171398             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  171399             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  171400             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  171401             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  171402             : 
  171403             :       /*! \brief returns a string representing the class name */
  171404             :           virtual std::string class_name() const override;
  171405             : 
  171406             :       /*! \brief returns new style SageIII enum values */
  171407             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  171408             : 
  171409             :       /*! \brief static variant value */
  171410             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  171411             :        // static const VariantT static_variant = V_SgOmpTaskwaitStatement;
  171412             :           enum { static_variant = V_SgOmpTaskwaitStatement };
  171413             : 
  171414             :        /* the generated cast function */
  171415             :       /*! \brief Casts pointer from base class to derived class */
  171416             :           ROSE_DLL_API friend       SgOmpTaskwaitStatement* isSgOmpTaskwaitStatement(       SgNode * s );
  171417             : 
  171418             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  171419             :           ROSE_DLL_API friend const SgOmpTaskwaitStatement* isSgOmpTaskwaitStatement( const SgNode * s );
  171420             : 
  171421             :      // ******************************************
  171422             :      // * Memory Pool / New / Delete
  171423             :      // ******************************************
  171424             : 
  171425             :      public:
  171426             :           /// \private
  171427             :           static const unsigned pool_size; //
  171428             :           /// \private
  171429             :           static std::vector<unsigned char *> pools; //
  171430             :           /// \private
  171431             :           static SgOmpTaskwaitStatement * next_node; // 
  171432             : 
  171433             :           /// \private
  171434             :           static unsigned long initializeStorageClassArray(SgOmpTaskwaitStatementStorageClass *); //
  171435             : 
  171436             :           /// \private
  171437             :           static void clearMemoryPool(); //
  171438             :           static void deleteMemoryPool(); //
  171439             : 
  171440             :           /// \private
  171441             :           static void extendMemoryPoolForFileIO(); //
  171442             : 
  171443             :           /// \private
  171444             :           static SgOmpTaskwaitStatement * getPointerFromGlobalIndex(unsigned long); //
  171445             :           /// \private
  171446             :           static SgOmpTaskwaitStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  171447             : 
  171448             :           /// \private
  171449             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  171450             :           /// \private
  171451             :           static void resetValidFreepointers(); //
  171452             :           /// \private
  171453             :           static unsigned long getNumberOfLastValidPointer(); //
  171454             : 
  171455             : 
  171456             : #if defined(INLINE_FUNCTIONS)
  171457             :       /*! \brief returns pointer to newly allocated IR node */
  171458             :           inline void *operator new (size_t size);
  171459             : #else
  171460             :       /*! \brief returns pointer to newly allocated IR node */
  171461             :           void *operator new (size_t size);
  171462             : #endif
  171463             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  171464             :           void operator delete (void* pointer, size_t size);
  171465             : 
  171466             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  171467           0 :           void operator delete (void* pointer)
  171468             :              {
  171469             :             // This is the generated delete operator...
  171470           0 :                SgOmpTaskwaitStatement::operator delete (pointer,sizeof(SgOmpTaskwaitStatement));
  171471             :              }
  171472             : 
  171473             :       /*! \brief Returns the total number of IR nodes of this type */
  171474             :           static size_t numberOfNodes();
  171475             : 
  171476             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  171477             :           static size_t memoryUsage();
  171478             : 
  171479             :       // End of scope which started in IR nodes specific code 
  171480             :       /* */
  171481             : 
  171482             :       /* name Internal Functions
  171483             :           \brief Internal functions ... incomplete-documentation
  171484             : 
  171485             :           These functions have been made public as part of the design, but they are suggested for internal use 
  171486             :           or by particularly knowledgeable users for specialized tools or applications.
  171487             : 
  171488             :           \internal We could not make these private because they are required by user for special purposes. And 
  171489             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  171490             :          
  171491             :        */
  171492             : 
  171493             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  171494             :        // overridden in every class by *generated* implementation
  171495             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  171496             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  171497             :        // MS: 06/28/02 container of names of variables or container indices 
  171498             :        // used used in the traversal to access AST successor nodes
  171499             :        // overridden in every class by *generated* implementation
  171500             :       /*! \brief container of names of variables or container indices used used in the traversal
  171501             :           to access AST successor nodes overridden in every class by *generated* implementation */
  171502             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  171503             : 
  171504             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  171505             :        // than all the vector copies. The implementation for these functions is generated for each class.
  171506             :       /*! \brief return number of children in the traversal successor list */
  171507             :           virtual size_t get_numberOfTraversalSuccessors() override;
  171508             :       /*! \brief index-based access to traversal successors by index number */
  171509             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  171510             :       /*! \brief index-based access to traversal successors by child node */
  171511             :           virtual size_t get_childIndex(SgNode *child) override;
  171512             : 
  171513             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  171514             :        // MS: 08/16/2002 method for generating RTI information
  171515             :       /*! \brief return C++ Runtime-Time-Information */
  171516             :           virtual RTIReturnType roseRTI() override;
  171517             : #endif
  171518             :       /* */
  171519             : 
  171520             : 
  171521             : 
  171522             :       /* name Deprecated Functions
  171523             :           \brief Deprecated functions ... incomplete-documentation
  171524             : 
  171525             :           These functions have been deprecated from use.
  171526             :        */
  171527             :       /* */
  171528             : 
  171529             :       /*! returns a C style string (char*) representing the class name */
  171530             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  171531             : 
  171532             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  171533             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  171534             : #if 0
  171535             :       /*! returns old style Sage II enum values */
  171536             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  171537             :       /*! returns old style Sage II enum values */
  171538             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  171539             : #endif
  171540             :       /* */
  171541             : 
  171542             : 
  171543             : 
  171544             : 
  171545             :      public:
  171546             :       /* name Traversal Support Functions
  171547             :           \brief Traversal support functions ... incomplete-documentation
  171548             : 
  171549             :           These functions have been made public as part of the design, but they are suggested for internal use 
  171550             :           or by particularly knowledgable users for specialized tools or applications.
  171551             :        */
  171552             :       /* */
  171553             : 
  171554             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  171555             :        // (inferior to ROSE traversal mechanism, experimental).
  171556             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  171557             :        */
  171558             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  171559             : 
  171560             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  171561             :       /*! \brief support for the classic visitor pattern done in GoF */
  171562             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  171563             : 
  171564             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  171565             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  171566             :        */
  171567             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  171568             : 
  171569             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  171570             :        */
  171571             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  171572             : 
  171573             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  171574             :        // This traversal helps support internal tools that call static member functions.
  171575             :        // note: this function operates on the memory pools.
  171576             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  171577             :        */
  171578             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  171579             :       /* */
  171580             : 
  171581             : 
  171582             :      public:
  171583             :       /* name Memory Allocation Functions
  171584             :           \brief Memory allocations functions ... incomplete-documentation
  171585             : 
  171586             :           These functions have been made public as part of the design, but they are suggested for internal use 
  171587             :           or by particularly knowledgable users for specialized tools or applications.
  171588             :        */
  171589             :       /* */
  171590             : 
  171591             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  171592             : 
  171593             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  171594             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  171595             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  171596             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  171597             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  171598             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  171599             :           being used with the AST File I/O mechanism.
  171600             :        */
  171601             :           virtual bool isInMemoryPool() override;
  171602             : 
  171603             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  171604             : 
  171605             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  171606             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  171607             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  171608             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  171609             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  171610             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  171611             :           being used with the AST File I/O mechanism.
  171612             :        */
  171613             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  171614             : 
  171615             :       // DQ (4/30/2006): Modified to be a const function.
  171616             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  171617             : 
  171618             :           This functions is part of general support for many possible tools to operate 
  171619             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  171620             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  171621             :           less than the set of pointers used by the AST file I/O. This is part of
  171622             :           work implemented by Andreas, and support tools such as the AST graph generation.
  171623             : 
  171624             :           \warning This function can return unexpected data members and thus the 
  171625             :                    order and the number of elements is unpredicable and subject 
  171626             :                    to change.
  171627             : 
  171628             :           \returns STL vector of pairs of SgNode* and strings
  171629             :        */
  171630             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  171631             : 
  171632             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  171633             : 
  171634             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  171635             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  171636             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  171637             : 
  171638             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  171639             :                    and subject to change.
  171640             :        */
  171641             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  171642             : 
  171643             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  171644             : 
  171645             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  171646             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  171647             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  171648             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  171649             : 
  171650             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  171651             : 
  171652             :           \returns long
  171653             :        */
  171654             :           virtual long getChildIndex( SgNode* childNode ) const override;
  171655             : 
  171656             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  171657             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  171658             :       /* \brief Constructor for use by AST File I/O Mechanism
  171659             : 
  171660             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  171661             :           which obtained via fast binary file I/O from disk.
  171662             :        */
  171663             :        // SgOmpTaskwaitStatement( SgOmpTaskwaitStatementStorageClass& source );
  171664             : 
  171665             : 
  171666             : 
  171667             : 
  171668             : 
  171669             :  // JH (10/24/2005): methods added to support the ast file IO
  171670             :     private:
  171671             : 
  171672             :       /* name AST Memory Allocation Support Functions
  171673             :           \brief Memory allocations support....
  171674             : 
  171675             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  171676             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  171677             :           and support the AST File I/O Mechanism.
  171678             :        */
  171679             :       /* */
  171680             : 
  171681             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  171682             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  171683             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  171684             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  171685             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  171686             :           a correspinding one in the AST_FILE_IO class!
  171687             :        */
  171688             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  171689             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  171690             :       /* \brief Typedef used for low level memory access.
  171691             :        */
  171692             :        // typedef unsigned char* TestType;
  171693             : 
  171694             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  171695             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  171696             :       /* \brief Typedef used to hold memory addresses as values.
  171697             :        */
  171698             :        // typedef unsigned long  AddressType;
  171699             : 
  171700             : 
  171701             : 
  171702             :        // necessary, to have direct access to the p_freepointer and the private methods !
  171703             :       /*! \brief friend class declaration to support AST File I/O */
  171704             :           friend class AST_FILE_IO;
  171705             : 
  171706             :       /*! \brief friend class declaration to support AST File I/O */
  171707             :           friend class SgOmpTaskwaitStatementStorageClass;
  171708             : 
  171709             :       /*! \brief friend class declaration to support AST File I/O */
  171710             :           friend class AstSpecificDataManagingClass;
  171711             : 
  171712             :       /*! \brief friend class declaration to support AST File I/O */
  171713             :           friend class AstSpecificDataManagingClassStorageClass;
  171714             :     public:
  171715             :       /*! \brief IR node constructor to support AST File I/O */
  171716             :           SgOmpTaskwaitStatement( const SgOmpTaskwaitStatementStorageClass& source );
  171717             : 
  171718             :  // private: // JJW hack
  171719             :        /*
  171720             :           name AST Memory Allocation Support Variables
  171721             :           Memory allocations support variables 
  171722             : 
  171723             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  171724             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  171725             :           and support the AST File I/O Mechanism.
  171726             :        */
  171727             :       /* */
  171728             : 
  171729             :     public:
  171730             : 
  171731             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  171732             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  171733             :       // virtual SgNode* addRegExpAttribute();
  171734             :       /*! \brief Support for AST matching using regular expression.
  171735             : 
  171736             :           This support is incomplete and the subject of current research to define 
  171737             :           RegEx trees to support inexact matching.
  171738             :        */
  171739             :           SgOmpTaskwaitStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  171740             : 
  171741             : // *** COMMON CODE SECTION ENDS HERE ***
  171742             : 
  171743             : 
  171744             : // End of memberFunctionString
  171745             : // Start of memberFunctionString
  171746             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  171747             : 
  171748             :      // the generated cast function
  171749             :      // friend ROSE_DLL_API SgOmpTaskwaitStatement* isSgOmpTaskwaitStatement ( SgNode* s );
  171750             : 
  171751             :           typedef SgDeclarationStatement base_node_type;
  171752             : 
  171753             : 
  171754             : // End of memberFunctionString
  171755             : // Start of memberFunctionString
  171756             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  171757             : 
  171758             :           void post_construction_initialization() override;
  171759             : 
  171760             : 
  171761             : // End of memberFunctionString
  171762             : 
  171763             :      public: 
  171764             :          const SgOmpClausePtrList&  get_clauses() const;
  171765             :          SgOmpClausePtrList& get_clauses(); 
  171766             : 
  171767             : 
  171768             :      public: 
  171769             :          virtual ~SgOmpTaskwaitStatement();
  171770             : 
  171771             : 
  171772             :      public: 
  171773             :          SgOmpTaskwaitStatement(Sg_File_Info* startOfConstruct ); 
  171774             :          SgOmpTaskwaitStatement(); 
  171775             : 
  171776             :     protected:
  171777             : // Start of memberFunctionString
  171778             : SgOmpClausePtrList p_clauses;
  171779             :           
  171780             : // End of memberFunctionString
  171781             : 
  171782             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskwaitStatement>;
  171783             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpTaskwaitStatement, SgOmpClausePtrList,&SgOmpTaskwaitStatement::p_clauses>;
  171784             : 
  171785             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171786             : 
  171787             : 
  171788             :    };
  171789             : #endif
  171790             : 
  171791             : // postdeclarations for SgOmpTaskwaitStatement
  171792             : 
  171793             : /* #line 171794 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171794             : 
  171795             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  171796             : 
  171797             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171798             : 
  171799             : 
  171800             : /* #line 171801 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171801             : 
  171802             : 
  171803             : 
  171804             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171805             : 
  171806             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  171807             : //      This code is automatically generated for each 
  171808             : //      terminal and non-terminal within the defined 
  171809             : //      grammar.  There is a simple way to change the 
  171810             : //      code to fix bugs etc.  See the ROSE README file
  171811             : //      for directions.
  171812             : 
  171813             : // tps: (02/22/2010): Adding DLL export requirements
  171814             : #include "rosedll.h"
  171815             : 
  171816             : // predeclarations for SgStmtDeclarationStatement
  171817             : 
  171818             : /* #line 171819 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171819             : 
  171820             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  171821             : 
  171822             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  171823             : 
  171824             : #if 1
  171825             : // Class Definition for SgStmtDeclarationStatement
  171826             : class ROSE_DLL_API SgStmtDeclarationStatement  : public SgDeclarationStatement
  171827             :    {
  171828             :      public:
  171829             : 
  171830             : 
  171831             : /* #line 171832 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  171832             : 
  171833             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  171834             : // Start of memberFunctionString
  171835             : /* #line 2161 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  171836             : 
  171837             :           virtual SgName get_mangled_name (void) const override;
  171838             : 
  171839             : 
  171840             : // End of memberFunctionString
  171841             : // Start of memberFunctionString
  171842             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  171843             : 
  171844             : // *** COMMON CODE SECTION BEGINS HERE ***
  171845             : 
  171846             :     public:
  171847             : 
  171848             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  171849             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  171850             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  171851             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  171852             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  171853             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  171854             : 
  171855             :       /*! \brief returns a string representing the class name */
  171856             :           virtual std::string class_name() const override;
  171857             : 
  171858             :       /*! \brief returns new style SageIII enum values */
  171859             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  171860             : 
  171861             :       /*! \brief static variant value */
  171862             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  171863             :        // static const VariantT static_variant = V_SgStmtDeclarationStatement;
  171864             :           enum { static_variant = V_SgStmtDeclarationStatement };
  171865             : 
  171866             :        /* the generated cast function */
  171867             :       /*! \brief Casts pointer from base class to derived class */
  171868             :           ROSE_DLL_API friend       SgStmtDeclarationStatement* isSgStmtDeclarationStatement(       SgNode * s );
  171869             : 
  171870             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  171871             :           ROSE_DLL_API friend const SgStmtDeclarationStatement* isSgStmtDeclarationStatement( const SgNode * s );
  171872             : 
  171873             :      // ******************************************
  171874             :      // * Memory Pool / New / Delete
  171875             :      // ******************************************
  171876             : 
  171877             :      public:
  171878             :           /// \private
  171879             :           static const unsigned pool_size; //
  171880             :           /// \private
  171881             :           static std::vector<unsigned char *> pools; //
  171882             :           /// \private
  171883             :           static SgStmtDeclarationStatement * next_node; // 
  171884             : 
  171885             :           /// \private
  171886             :           static unsigned long initializeStorageClassArray(SgStmtDeclarationStatementStorageClass *); //
  171887             : 
  171888             :           /// \private
  171889             :           static void clearMemoryPool(); //
  171890             :           static void deleteMemoryPool(); //
  171891             : 
  171892             :           /// \private
  171893             :           static void extendMemoryPoolForFileIO(); //
  171894             : 
  171895             :           /// \private
  171896             :           static SgStmtDeclarationStatement * getPointerFromGlobalIndex(unsigned long); //
  171897             :           /// \private
  171898             :           static SgStmtDeclarationStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  171899             : 
  171900             :           /// \private
  171901             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  171902             :           /// \private
  171903             :           static void resetValidFreepointers(); //
  171904             :           /// \private
  171905             :           static unsigned long getNumberOfLastValidPointer(); //
  171906             : 
  171907             : 
  171908             : #if defined(INLINE_FUNCTIONS)
  171909             :       /*! \brief returns pointer to newly allocated IR node */
  171910             :           inline void *operator new (size_t size);
  171911             : #else
  171912             :       /*! \brief returns pointer to newly allocated IR node */
  171913             :           void *operator new (size_t size);
  171914             : #endif
  171915             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  171916             :           void operator delete (void* pointer, size_t size);
  171917             : 
  171918             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  171919           0 :           void operator delete (void* pointer)
  171920             :              {
  171921             :             // This is the generated delete operator...
  171922           0 :                SgStmtDeclarationStatement::operator delete (pointer,sizeof(SgStmtDeclarationStatement));
  171923             :              }
  171924             : 
  171925             :       /*! \brief Returns the total number of IR nodes of this type */
  171926             :           static size_t numberOfNodes();
  171927             : 
  171928             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  171929             :           static size_t memoryUsage();
  171930             : 
  171931             :       // End of scope which started in IR nodes specific code 
  171932             :       /* */
  171933             : 
  171934             :       /* name Internal Functions
  171935             :           \brief Internal functions ... incomplete-documentation
  171936             : 
  171937             :           These functions have been made public as part of the design, but they are suggested for internal use 
  171938             :           or by particularly knowledgeable users for specialized tools or applications.
  171939             : 
  171940             :           \internal We could not make these private because they are required by user for special purposes. And 
  171941             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  171942             :          
  171943             :        */
  171944             : 
  171945             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  171946             :        // overridden in every class by *generated* implementation
  171947             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  171948             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  171949             :        // MS: 06/28/02 container of names of variables or container indices 
  171950             :        // used used in the traversal to access AST successor nodes
  171951             :        // overridden in every class by *generated* implementation
  171952             :       /*! \brief container of names of variables or container indices used used in the traversal
  171953             :           to access AST successor nodes overridden in every class by *generated* implementation */
  171954             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  171955             : 
  171956             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  171957             :        // than all the vector copies. The implementation for these functions is generated for each class.
  171958             :       /*! \brief return number of children in the traversal successor list */
  171959             :           virtual size_t get_numberOfTraversalSuccessors() override;
  171960             :       /*! \brief index-based access to traversal successors by index number */
  171961             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  171962             :       /*! \brief index-based access to traversal successors by child node */
  171963             :           virtual size_t get_childIndex(SgNode *child) override;
  171964             : 
  171965             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  171966             :        // MS: 08/16/2002 method for generating RTI information
  171967             :       /*! \brief return C++ Runtime-Time-Information */
  171968             :           virtual RTIReturnType roseRTI() override;
  171969             : #endif
  171970             :       /* */
  171971             : 
  171972             : 
  171973             : 
  171974             :       /* name Deprecated Functions
  171975             :           \brief Deprecated functions ... incomplete-documentation
  171976             : 
  171977             :           These functions have been deprecated from use.
  171978             :        */
  171979             :       /* */
  171980             : 
  171981             :       /*! returns a C style string (char*) representing the class name */
  171982             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  171983             : 
  171984             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  171985             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  171986             : #if 0
  171987             :       /*! returns old style Sage II enum values */
  171988             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  171989             :       /*! returns old style Sage II enum values */
  171990             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  171991             : #endif
  171992             :       /* */
  171993             : 
  171994             : 
  171995             : 
  171996             : 
  171997             :      public:
  171998             :       /* name Traversal Support Functions
  171999             :           \brief Traversal support functions ... incomplete-documentation
  172000             : 
  172001             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172002             :           or by particularly knowledgable users for specialized tools or applications.
  172003             :        */
  172004             :       /* */
  172005             : 
  172006             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  172007             :        // (inferior to ROSE traversal mechanism, experimental).
  172008             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  172009             :        */
  172010             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  172011             : 
  172012             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  172013             :       /*! \brief support for the classic visitor pattern done in GoF */
  172014             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  172015             : 
  172016             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  172017             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  172018             :        */
  172019             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  172020             : 
  172021             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  172022             :        */
  172023             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  172024             : 
  172025             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  172026             :        // This traversal helps support internal tools that call static member functions.
  172027             :        // note: this function operates on the memory pools.
  172028             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  172029             :        */
  172030             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  172031             :       /* */
  172032             : 
  172033             : 
  172034             :      public:
  172035             :       /* name Memory Allocation Functions
  172036             :           \brief Memory allocations functions ... incomplete-documentation
  172037             : 
  172038             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172039             :           or by particularly knowledgable users for specialized tools or applications.
  172040             :        */
  172041             :       /* */
  172042             : 
  172043             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  172044             : 
  172045             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  172046             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  172047             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  172048             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  172049             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  172050             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  172051             :           being used with the AST File I/O mechanism.
  172052             :        */
  172053             :           virtual bool isInMemoryPool() override;
  172054             : 
  172055             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  172056             : 
  172057             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  172058             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  172059             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  172060             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  172061             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  172062             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  172063             :           being used with the AST File I/O mechanism.
  172064             :        */
  172065             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  172066             : 
  172067             :       // DQ (4/30/2006): Modified to be a const function.
  172068             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  172069             : 
  172070             :           This functions is part of general support for many possible tools to operate 
  172071             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  172072             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  172073             :           less than the set of pointers used by the AST file I/O. This is part of
  172074             :           work implemented by Andreas, and support tools such as the AST graph generation.
  172075             : 
  172076             :           \warning This function can return unexpected data members and thus the 
  172077             :                    order and the number of elements is unpredicable and subject 
  172078             :                    to change.
  172079             : 
  172080             :           \returns STL vector of pairs of SgNode* and strings
  172081             :        */
  172082             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  172083             : 
  172084             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  172085             : 
  172086             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  172087             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  172088             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  172089             : 
  172090             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  172091             :                    and subject to change.
  172092             :        */
  172093             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  172094             : 
  172095             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  172096             : 
  172097             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  172098             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  172099             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  172100             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  172101             : 
  172102             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  172103             : 
  172104             :           \returns long
  172105             :        */
  172106             :           virtual long getChildIndex( SgNode* childNode ) const override;
  172107             : 
  172108             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  172109             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  172110             :       /* \brief Constructor for use by AST File I/O Mechanism
  172111             : 
  172112             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  172113             :           which obtained via fast binary file I/O from disk.
  172114             :        */
  172115             :        // SgStmtDeclarationStatement( SgStmtDeclarationStatementStorageClass& source );
  172116             : 
  172117             : 
  172118             : 
  172119             : 
  172120             : 
  172121             :  // JH (10/24/2005): methods added to support the ast file IO
  172122             :     private:
  172123             : 
  172124             :       /* name AST Memory Allocation Support Functions
  172125             :           \brief Memory allocations support....
  172126             : 
  172127             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  172128             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  172129             :           and support the AST File I/O Mechanism.
  172130             :        */
  172131             :       /* */
  172132             : 
  172133             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  172134             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  172135             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  172136             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  172137             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  172138             :           a correspinding one in the AST_FILE_IO class!
  172139             :        */
  172140             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  172141             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  172142             :       /* \brief Typedef used for low level memory access.
  172143             :        */
  172144             :        // typedef unsigned char* TestType;
  172145             : 
  172146             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  172147             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  172148             :       /* \brief Typedef used to hold memory addresses as values.
  172149             :        */
  172150             :        // typedef unsigned long  AddressType;
  172151             : 
  172152             : 
  172153             : 
  172154             :        // necessary, to have direct access to the p_freepointer and the private methods !
  172155             :       /*! \brief friend class declaration to support AST File I/O */
  172156             :           friend class AST_FILE_IO;
  172157             : 
  172158             :       /*! \brief friend class declaration to support AST File I/O */
  172159             :           friend class SgStmtDeclarationStatementStorageClass;
  172160             : 
  172161             :       /*! \brief friend class declaration to support AST File I/O */
  172162             :           friend class AstSpecificDataManagingClass;
  172163             : 
  172164             :       /*! \brief friend class declaration to support AST File I/O */
  172165             :           friend class AstSpecificDataManagingClassStorageClass;
  172166             :     public:
  172167             :       /*! \brief IR node constructor to support AST File I/O */
  172168             :           SgStmtDeclarationStatement( const SgStmtDeclarationStatementStorageClass& source );
  172169             : 
  172170             :  // private: // JJW hack
  172171             :        /*
  172172             :           name AST Memory Allocation Support Variables
  172173             :           Memory allocations support variables 
  172174             : 
  172175             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  172176             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  172177             :           and support the AST File I/O Mechanism.
  172178             :        */
  172179             :       /* */
  172180             : 
  172181             :     public:
  172182             : 
  172183             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  172184             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  172185             :       // virtual SgNode* addRegExpAttribute();
  172186             :       /*! \brief Support for AST matching using regular expression.
  172187             : 
  172188             :           This support is incomplete and the subject of current research to define 
  172189             :           RegEx trees to support inexact matching.
  172190             :        */
  172191             :           SgStmtDeclarationStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  172192             : 
  172193             : // *** COMMON CODE SECTION ENDS HERE ***
  172194             : 
  172195             : 
  172196             : // End of memberFunctionString
  172197             : // Start of memberFunctionString
  172198             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  172199             : 
  172200             :      // the generated cast function
  172201             :      // friend ROSE_DLL_API SgStmtDeclarationStatement* isSgStmtDeclarationStatement ( SgNode* s );
  172202             : 
  172203             :           typedef SgDeclarationStatement base_node_type;
  172204             : 
  172205             : 
  172206             : // End of memberFunctionString
  172207             : // Start of memberFunctionString
  172208             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  172209             : 
  172210             :           void post_construction_initialization() override;
  172211             : 
  172212             : 
  172213             : // End of memberFunctionString
  172214             : 
  172215             :      public: 
  172216             :          SgStatement* get_statement() const;
  172217             :          void set_statement(SgStatement* statement);
  172218             : 
  172219             : 
  172220             :      public: 
  172221             :          virtual ~SgStmtDeclarationStatement();
  172222             : 
  172223             : 
  172224             :      public: 
  172225             :          SgStmtDeclarationStatement(Sg_File_Info* startOfConstruct , SgStatement* statement = NULL); 
  172226             :          SgStmtDeclarationStatement(SgStatement* statement); 
  172227             : 
  172228             :     protected:
  172229             : // Start of memberFunctionString
  172230             : SgStatement* p_statement;
  172231             :           
  172232             : // End of memberFunctionString
  172233             : 
  172234             :     friend struct Rose::Traits::generated::describe_node_t<SgStmtDeclarationStatement>;
  172235             :     friend struct Rose::Traits::generated::describe_field_t<SgStmtDeclarationStatement, SgStatement*,&SgStmtDeclarationStatement::p_statement>;
  172236             : 
  172237             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172238             : 
  172239             : 
  172240             :    };
  172241             : #endif
  172242             : 
  172243             : // postdeclarations for SgStmtDeclarationStatement
  172244             : 
  172245             : /* #line 172246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172246             : 
  172247             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  172248             : 
  172249             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172250             : 
  172251             : 
  172252             : /* #line 172253 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172253             : 
  172254             : 
  172255             : 
  172256             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172257             : 
  172258             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  172259             : //      This code is automatically generated for each 
  172260             : //      terminal and non-terminal within the defined 
  172261             : //      grammar.  There is a simple way to change the 
  172262             : //      code to fix bugs etc.  See the ROSE README file
  172263             : //      for directions.
  172264             : 
  172265             : // tps: (02/22/2010): Adding DLL export requirements
  172266             : #include "rosedll.h"
  172267             : 
  172268             : // predeclarations for SgStaticAssertionDeclaration
  172269             : 
  172270             : /* #line 172271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172271             : 
  172272             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  172273             : 
  172274             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172275             : 
  172276             : #if 1
  172277             : // Class Definition for SgStaticAssertionDeclaration
  172278             : class ROSE_DLL_API SgStaticAssertionDeclaration  : public SgDeclarationStatement
  172279             :    {
  172280             :      public:
  172281             : 
  172282             : 
  172283             : /* #line 172284 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172284             : 
  172285             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  172286             : // Start of memberFunctionString
  172287             : /* #line 1480 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  172288             : 
  172289             : 
  172290             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  172291             :           virtual unsigned int cfgIndexForEnd() const override;
  172292             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  172293             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  172294             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  172295             : #endif
  172296             : 
  172297             :        // We need this to be defined to avoid calling the base class version (which is an error).
  172298             :           SgName get_mangled_name() const override;
  172299             : 
  172300             :           bool hasExplicitScope() const override;
  172301             : 
  172302             : 
  172303             : 
  172304             : // End of memberFunctionString
  172305             : // Start of memberFunctionString
  172306             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  172307             : 
  172308             : // *** COMMON CODE SECTION BEGINS HERE ***
  172309             : 
  172310             :     public:
  172311             : 
  172312             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  172313             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  172314             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  172315             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  172316             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  172317             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  172318             : 
  172319             :       /*! \brief returns a string representing the class name */
  172320             :           virtual std::string class_name() const override;
  172321             : 
  172322             :       /*! \brief returns new style SageIII enum values */
  172323             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  172324             : 
  172325             :       /*! \brief static variant value */
  172326             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  172327             :        // static const VariantT static_variant = V_SgStaticAssertionDeclaration;
  172328             :           enum { static_variant = V_SgStaticAssertionDeclaration };
  172329             : 
  172330             :        /* the generated cast function */
  172331             :       /*! \brief Casts pointer from base class to derived class */
  172332             :           ROSE_DLL_API friend       SgStaticAssertionDeclaration* isSgStaticAssertionDeclaration(       SgNode * s );
  172333             : 
  172334             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  172335             :           ROSE_DLL_API friend const SgStaticAssertionDeclaration* isSgStaticAssertionDeclaration( const SgNode * s );
  172336             : 
  172337             :      // ******************************************
  172338             :      // * Memory Pool / New / Delete
  172339             :      // ******************************************
  172340             : 
  172341             :      public:
  172342             :           /// \private
  172343             :           static const unsigned pool_size; //
  172344             :           /// \private
  172345             :           static std::vector<unsigned char *> pools; //
  172346             :           /// \private
  172347             :           static SgStaticAssertionDeclaration * next_node; // 
  172348             : 
  172349             :           /// \private
  172350             :           static unsigned long initializeStorageClassArray(SgStaticAssertionDeclarationStorageClass *); //
  172351             : 
  172352             :           /// \private
  172353             :           static void clearMemoryPool(); //
  172354             :           static void deleteMemoryPool(); //
  172355             : 
  172356             :           /// \private
  172357             :           static void extendMemoryPoolForFileIO(); //
  172358             : 
  172359             :           /// \private
  172360             :           static SgStaticAssertionDeclaration * getPointerFromGlobalIndex(unsigned long); //
  172361             :           /// \private
  172362             :           static SgStaticAssertionDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  172363             : 
  172364             :           /// \private
  172365             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  172366             :           /// \private
  172367             :           static void resetValidFreepointers(); //
  172368             :           /// \private
  172369             :           static unsigned long getNumberOfLastValidPointer(); //
  172370             : 
  172371             : 
  172372             : #if defined(INLINE_FUNCTIONS)
  172373             :       /*! \brief returns pointer to newly allocated IR node */
  172374             :           inline void *operator new (size_t size);
  172375             : #else
  172376             :       /*! \brief returns pointer to newly allocated IR node */
  172377             :           void *operator new (size_t size);
  172378             : #endif
  172379             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  172380             :           void operator delete (void* pointer, size_t size);
  172381             : 
  172382             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  172383          28 :           void operator delete (void* pointer)
  172384             :              {
  172385             :             // This is the generated delete operator...
  172386          28 :                SgStaticAssertionDeclaration::operator delete (pointer,sizeof(SgStaticAssertionDeclaration));
  172387             :              }
  172388             : 
  172389             :       /*! \brief Returns the total number of IR nodes of this type */
  172390             :           static size_t numberOfNodes();
  172391             : 
  172392             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  172393             :           static size_t memoryUsage();
  172394             : 
  172395             :       // End of scope which started in IR nodes specific code 
  172396             :       /* */
  172397             : 
  172398             :       /* name Internal Functions
  172399             :           \brief Internal functions ... incomplete-documentation
  172400             : 
  172401             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172402             :           or by particularly knowledgeable users for specialized tools or applications.
  172403             : 
  172404             :           \internal We could not make these private because they are required by user for special purposes. And 
  172405             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  172406             :          
  172407             :        */
  172408             : 
  172409             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  172410             :        // overridden in every class by *generated* implementation
  172411             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  172412             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  172413             :        // MS: 06/28/02 container of names of variables or container indices 
  172414             :        // used used in the traversal to access AST successor nodes
  172415             :        // overridden in every class by *generated* implementation
  172416             :       /*! \brief container of names of variables or container indices used used in the traversal
  172417             :           to access AST successor nodes overridden in every class by *generated* implementation */
  172418             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  172419             : 
  172420             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  172421             :        // than all the vector copies. The implementation for these functions is generated for each class.
  172422             :       /*! \brief return number of children in the traversal successor list */
  172423             :           virtual size_t get_numberOfTraversalSuccessors() override;
  172424             :       /*! \brief index-based access to traversal successors by index number */
  172425             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  172426             :       /*! \brief index-based access to traversal successors by child node */
  172427             :           virtual size_t get_childIndex(SgNode *child) override;
  172428             : 
  172429             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  172430             :        // MS: 08/16/2002 method for generating RTI information
  172431             :       /*! \brief return C++ Runtime-Time-Information */
  172432             :           virtual RTIReturnType roseRTI() override;
  172433             : #endif
  172434             :       /* */
  172435             : 
  172436             : 
  172437             : 
  172438             :       /* name Deprecated Functions
  172439             :           \brief Deprecated functions ... incomplete-documentation
  172440             : 
  172441             :           These functions have been deprecated from use.
  172442             :        */
  172443             :       /* */
  172444             : 
  172445             :       /*! returns a C style string (char*) representing the class name */
  172446             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  172447             : 
  172448             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  172449             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  172450             : #if 0
  172451             :       /*! returns old style Sage II enum values */
  172452             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  172453             :       /*! returns old style Sage II enum values */
  172454             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  172455             : #endif
  172456             :       /* */
  172457             : 
  172458             : 
  172459             : 
  172460             : 
  172461             :      public:
  172462             :       /* name Traversal Support Functions
  172463             :           \brief Traversal support functions ... incomplete-documentation
  172464             : 
  172465             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172466             :           or by particularly knowledgable users for specialized tools or applications.
  172467             :        */
  172468             :       /* */
  172469             : 
  172470             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  172471             :        // (inferior to ROSE traversal mechanism, experimental).
  172472             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  172473             :        */
  172474             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  172475             : 
  172476             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  172477             :       /*! \brief support for the classic visitor pattern done in GoF */
  172478             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  172479             : 
  172480             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  172481             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  172482             :        */
  172483             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  172484             : 
  172485             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  172486             :        */
  172487             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  172488             : 
  172489             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  172490             :        // This traversal helps support internal tools that call static member functions.
  172491             :        // note: this function operates on the memory pools.
  172492             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  172493             :        */
  172494             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  172495             :       /* */
  172496             : 
  172497             : 
  172498             :      public:
  172499             :       /* name Memory Allocation Functions
  172500             :           \brief Memory allocations functions ... incomplete-documentation
  172501             : 
  172502             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172503             :           or by particularly knowledgable users for specialized tools or applications.
  172504             :        */
  172505             :       /* */
  172506             : 
  172507             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  172508             : 
  172509             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  172510             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  172511             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  172512             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  172513             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  172514             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  172515             :           being used with the AST File I/O mechanism.
  172516             :        */
  172517             :           virtual bool isInMemoryPool() override;
  172518             : 
  172519             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  172520             : 
  172521             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  172522             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  172523             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  172524             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  172525             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  172526             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  172527             :           being used with the AST File I/O mechanism.
  172528             :        */
  172529             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  172530             : 
  172531             :       // DQ (4/30/2006): Modified to be a const function.
  172532             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  172533             : 
  172534             :           This functions is part of general support for many possible tools to operate 
  172535             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  172536             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  172537             :           less than the set of pointers used by the AST file I/O. This is part of
  172538             :           work implemented by Andreas, and support tools such as the AST graph generation.
  172539             : 
  172540             :           \warning This function can return unexpected data members and thus the 
  172541             :                    order and the number of elements is unpredicable and subject 
  172542             :                    to change.
  172543             : 
  172544             :           \returns STL vector of pairs of SgNode* and strings
  172545             :        */
  172546             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  172547             : 
  172548             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  172549             : 
  172550             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  172551             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  172552             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  172553             : 
  172554             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  172555             :                    and subject to change.
  172556             :        */
  172557             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  172558             : 
  172559             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  172560             : 
  172561             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  172562             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  172563             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  172564             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  172565             : 
  172566             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  172567             : 
  172568             :           \returns long
  172569             :        */
  172570             :           virtual long getChildIndex( SgNode* childNode ) const override;
  172571             : 
  172572             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  172573             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  172574             :       /* \brief Constructor for use by AST File I/O Mechanism
  172575             : 
  172576             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  172577             :           which obtained via fast binary file I/O from disk.
  172578             :        */
  172579             :        // SgStaticAssertionDeclaration( SgStaticAssertionDeclarationStorageClass& source );
  172580             : 
  172581             : 
  172582             : 
  172583             : 
  172584             : 
  172585             :  // JH (10/24/2005): methods added to support the ast file IO
  172586             :     private:
  172587             : 
  172588             :       /* name AST Memory Allocation Support Functions
  172589             :           \brief Memory allocations support....
  172590             : 
  172591             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  172592             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  172593             :           and support the AST File I/O Mechanism.
  172594             :        */
  172595             :       /* */
  172596             : 
  172597             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  172598             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  172599             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  172600             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  172601             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  172602             :           a correspinding one in the AST_FILE_IO class!
  172603             :        */
  172604             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  172605             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  172606             :       /* \brief Typedef used for low level memory access.
  172607             :        */
  172608             :        // typedef unsigned char* TestType;
  172609             : 
  172610             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  172611             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  172612             :       /* \brief Typedef used to hold memory addresses as values.
  172613             :        */
  172614             :        // typedef unsigned long  AddressType;
  172615             : 
  172616             : 
  172617             : 
  172618             :        // necessary, to have direct access to the p_freepointer and the private methods !
  172619             :       /*! \brief friend class declaration to support AST File I/O */
  172620             :           friend class AST_FILE_IO;
  172621             : 
  172622             :       /*! \brief friend class declaration to support AST File I/O */
  172623             :           friend class SgStaticAssertionDeclarationStorageClass;
  172624             : 
  172625             :       /*! \brief friend class declaration to support AST File I/O */
  172626             :           friend class AstSpecificDataManagingClass;
  172627             : 
  172628             :       /*! \brief friend class declaration to support AST File I/O */
  172629             :           friend class AstSpecificDataManagingClassStorageClass;
  172630             :     public:
  172631             :       /*! \brief IR node constructor to support AST File I/O */
  172632             :           SgStaticAssertionDeclaration( const SgStaticAssertionDeclarationStorageClass& source );
  172633             : 
  172634             :  // private: // JJW hack
  172635             :        /*
  172636             :           name AST Memory Allocation Support Variables
  172637             :           Memory allocations support variables 
  172638             : 
  172639             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  172640             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  172641             :           and support the AST File I/O Mechanism.
  172642             :        */
  172643             :       /* */
  172644             : 
  172645             :     public:
  172646             : 
  172647             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  172648             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  172649             :       // virtual SgNode* addRegExpAttribute();
  172650             :       /*! \brief Support for AST matching using regular expression.
  172651             : 
  172652             :           This support is incomplete and the subject of current research to define 
  172653             :           RegEx trees to support inexact matching.
  172654             :        */
  172655             :           SgStaticAssertionDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  172656             : 
  172657             : // *** COMMON CODE SECTION ENDS HERE ***
  172658             : 
  172659             : 
  172660             : // End of memberFunctionString
  172661             : // Start of memberFunctionString
  172662             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  172663             : 
  172664             :      // the generated cast function
  172665             :      // friend ROSE_DLL_API SgStaticAssertionDeclaration* isSgStaticAssertionDeclaration ( SgNode* s );
  172666             : 
  172667             :           typedef SgDeclarationStatement base_node_type;
  172668             : 
  172669             : 
  172670             : // End of memberFunctionString
  172671             : // Start of memberFunctionString
  172672             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  172673             : 
  172674             :           void post_construction_initialization() override;
  172675             : 
  172676             : 
  172677             : // End of memberFunctionString
  172678             : 
  172679             :      public: 
  172680             :          SgExpression* get_condition() const;
  172681             :          void set_condition(SgExpression* condition);
  172682             : 
  172683             :      public: 
  172684             :          SgName get_string_literal() const;
  172685             :          void set_string_literal(SgName string_literal);
  172686             : 
  172687             : 
  172688             :      public: 
  172689             :          virtual ~SgStaticAssertionDeclaration();
  172690             : 
  172691             : 
  172692             :      public: 
  172693             :          SgStaticAssertionDeclaration(Sg_File_Info* startOfConstruct , SgExpression* condition = NULL, SgName string_literal = ""); 
  172694             :          SgStaticAssertionDeclaration(SgExpression* condition, SgName string_literal); 
  172695             : 
  172696             :     protected:
  172697             : // Start of memberFunctionString
  172698             : SgExpression* p_condition;
  172699             :           
  172700             : // End of memberFunctionString
  172701             : // Start of memberFunctionString
  172702             : SgName p_string_literal;
  172703             :           
  172704             : // End of memberFunctionString
  172705             : 
  172706             :     friend struct Rose::Traits::generated::describe_node_t<SgStaticAssertionDeclaration>;
  172707             :     friend struct Rose::Traits::generated::describe_field_t<SgStaticAssertionDeclaration, SgExpression*,&SgStaticAssertionDeclaration::p_condition>;
  172708             :     friend struct Rose::Traits::generated::describe_field_t<SgStaticAssertionDeclaration, SgName,&SgStaticAssertionDeclaration::p_string_literal>;
  172709             : 
  172710             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172711             : 
  172712             : 
  172713             :    };
  172714             : #endif
  172715             : 
  172716             : // postdeclarations for SgStaticAssertionDeclaration
  172717             : 
  172718             : /* #line 172719 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172719             : 
  172720             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  172721             : 
  172722             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172723             : 
  172724             : 
  172725             : /* #line 172726 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172726             : 
  172727             : 
  172728             : 
  172729             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172730             : 
  172731             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  172732             : //      This code is automatically generated for each 
  172733             : //      terminal and non-terminal within the defined 
  172734             : //      grammar.  There is a simple way to change the 
  172735             : //      code to fix bugs etc.  See the ROSE README file
  172736             : //      for directions.
  172737             : 
  172738             : // tps: (02/22/2010): Adding DLL export requirements
  172739             : #include "rosedll.h"
  172740             : 
  172741             : // predeclarations for SgOmpDeclareSimdStatement
  172742             : 
  172743             : /* #line 172744 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172744             : 
  172745             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  172746             : 
  172747             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  172748             : 
  172749             : #if 1
  172750             : // Class Definition for SgOmpDeclareSimdStatement
  172751             : class ROSE_DLL_API SgOmpDeclareSimdStatement  : public SgDeclarationStatement
  172752             :    {
  172753             :      public:
  172754             : 
  172755             : 
  172756             : /* #line 172757 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  172757             : 
  172758             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  172759             : // Start of memberFunctionString
  172760             : /* #line 19124 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  172761             : 
  172762             : //! Required for any declaration statement
  172763             :      virtual SgName get_mangled_name(void) const override;
  172764             : 
  172765             : 
  172766             : // End of memberFunctionString
  172767             : // Start of memberFunctionString
  172768             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  172769             : 
  172770             : // *** COMMON CODE SECTION BEGINS HERE ***
  172771             : 
  172772             :     public:
  172773             : 
  172774             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  172775             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  172776             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  172777             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  172778             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  172779             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  172780             : 
  172781             :       /*! \brief returns a string representing the class name */
  172782             :           virtual std::string class_name() const override;
  172783             : 
  172784             :       /*! \brief returns new style SageIII enum values */
  172785             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  172786             : 
  172787             :       /*! \brief static variant value */
  172788             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  172789             :        // static const VariantT static_variant = V_SgOmpDeclareSimdStatement;
  172790             :           enum { static_variant = V_SgOmpDeclareSimdStatement };
  172791             : 
  172792             :        /* the generated cast function */
  172793             :       /*! \brief Casts pointer from base class to derived class */
  172794             :           ROSE_DLL_API friend       SgOmpDeclareSimdStatement* isSgOmpDeclareSimdStatement(       SgNode * s );
  172795             : 
  172796             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  172797             :           ROSE_DLL_API friend const SgOmpDeclareSimdStatement* isSgOmpDeclareSimdStatement( const SgNode * s );
  172798             : 
  172799             :      // ******************************************
  172800             :      // * Memory Pool / New / Delete
  172801             :      // ******************************************
  172802             : 
  172803             :      public:
  172804             :           /// \private
  172805             :           static const unsigned pool_size; //
  172806             :           /// \private
  172807             :           static std::vector<unsigned char *> pools; //
  172808             :           /// \private
  172809             :           static SgOmpDeclareSimdStatement * next_node; // 
  172810             : 
  172811             :           /// \private
  172812             :           static unsigned long initializeStorageClassArray(SgOmpDeclareSimdStatementStorageClass *); //
  172813             : 
  172814             :           /// \private
  172815             :           static void clearMemoryPool(); //
  172816             :           static void deleteMemoryPool(); //
  172817             : 
  172818             :           /// \private
  172819             :           static void extendMemoryPoolForFileIO(); //
  172820             : 
  172821             :           /// \private
  172822             :           static SgOmpDeclareSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  172823             :           /// \private
  172824             :           static SgOmpDeclareSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  172825             : 
  172826             :           /// \private
  172827             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  172828             :           /// \private
  172829             :           static void resetValidFreepointers(); //
  172830             :           /// \private
  172831             :           static unsigned long getNumberOfLastValidPointer(); //
  172832             : 
  172833             : 
  172834             : #if defined(INLINE_FUNCTIONS)
  172835             :       /*! \brief returns pointer to newly allocated IR node */
  172836             :           inline void *operator new (size_t size);
  172837             : #else
  172838             :       /*! \brief returns pointer to newly allocated IR node */
  172839             :           void *operator new (size_t size);
  172840             : #endif
  172841             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  172842             :           void operator delete (void* pointer, size_t size);
  172843             : 
  172844             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  172845           0 :           void operator delete (void* pointer)
  172846             :              {
  172847             :             // This is the generated delete operator...
  172848           0 :                SgOmpDeclareSimdStatement::operator delete (pointer,sizeof(SgOmpDeclareSimdStatement));
  172849             :              }
  172850             : 
  172851             :       /*! \brief Returns the total number of IR nodes of this type */
  172852             :           static size_t numberOfNodes();
  172853             : 
  172854             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  172855             :           static size_t memoryUsage();
  172856             : 
  172857             :       // End of scope which started in IR nodes specific code 
  172858             :       /* */
  172859             : 
  172860             :       /* name Internal Functions
  172861             :           \brief Internal functions ... incomplete-documentation
  172862             : 
  172863             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172864             :           or by particularly knowledgeable users for specialized tools or applications.
  172865             : 
  172866             :           \internal We could not make these private because they are required by user for special purposes. And 
  172867             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  172868             :          
  172869             :        */
  172870             : 
  172871             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  172872             :        // overridden in every class by *generated* implementation
  172873             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  172874             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  172875             :        // MS: 06/28/02 container of names of variables or container indices 
  172876             :        // used used in the traversal to access AST successor nodes
  172877             :        // overridden in every class by *generated* implementation
  172878             :       /*! \brief container of names of variables or container indices used used in the traversal
  172879             :           to access AST successor nodes overridden in every class by *generated* implementation */
  172880             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  172881             : 
  172882             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  172883             :        // than all the vector copies. The implementation for these functions is generated for each class.
  172884             :       /*! \brief return number of children in the traversal successor list */
  172885             :           virtual size_t get_numberOfTraversalSuccessors() override;
  172886             :       /*! \brief index-based access to traversal successors by index number */
  172887             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  172888             :       /*! \brief index-based access to traversal successors by child node */
  172889             :           virtual size_t get_childIndex(SgNode *child) override;
  172890             : 
  172891             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  172892             :        // MS: 08/16/2002 method for generating RTI information
  172893             :       /*! \brief return C++ Runtime-Time-Information */
  172894             :           virtual RTIReturnType roseRTI() override;
  172895             : #endif
  172896             :       /* */
  172897             : 
  172898             : 
  172899             : 
  172900             :       /* name Deprecated Functions
  172901             :           \brief Deprecated functions ... incomplete-documentation
  172902             : 
  172903             :           These functions have been deprecated from use.
  172904             :        */
  172905             :       /* */
  172906             : 
  172907             :       /*! returns a C style string (char*) representing the class name */
  172908             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  172909             : 
  172910             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  172911             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  172912             : #if 0
  172913             :       /*! returns old style Sage II enum values */
  172914             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  172915             :       /*! returns old style Sage II enum values */
  172916             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  172917             : #endif
  172918             :       /* */
  172919             : 
  172920             : 
  172921             : 
  172922             : 
  172923             :      public:
  172924             :       /* name Traversal Support Functions
  172925             :           \brief Traversal support functions ... incomplete-documentation
  172926             : 
  172927             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172928             :           or by particularly knowledgable users for specialized tools or applications.
  172929             :        */
  172930             :       /* */
  172931             : 
  172932             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  172933             :        // (inferior to ROSE traversal mechanism, experimental).
  172934             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  172935             :        */
  172936             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  172937             : 
  172938             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  172939             :       /*! \brief support for the classic visitor pattern done in GoF */
  172940             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  172941             : 
  172942             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  172943             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  172944             :        */
  172945             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  172946             : 
  172947             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  172948             :        */
  172949             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  172950             : 
  172951             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  172952             :        // This traversal helps support internal tools that call static member functions.
  172953             :        // note: this function operates on the memory pools.
  172954             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  172955             :        */
  172956             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  172957             :       /* */
  172958             : 
  172959             : 
  172960             :      public:
  172961             :       /* name Memory Allocation Functions
  172962             :           \brief Memory allocations functions ... incomplete-documentation
  172963             : 
  172964             :           These functions have been made public as part of the design, but they are suggested for internal use 
  172965             :           or by particularly knowledgable users for specialized tools or applications.
  172966             :        */
  172967             :       /* */
  172968             : 
  172969             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  172970             : 
  172971             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  172972             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  172973             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  172974             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  172975             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  172976             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  172977             :           being used with the AST File I/O mechanism.
  172978             :        */
  172979             :           virtual bool isInMemoryPool() override;
  172980             : 
  172981             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  172982             : 
  172983             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  172984             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  172985             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  172986             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  172987             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  172988             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  172989             :           being used with the AST File I/O mechanism.
  172990             :        */
  172991             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  172992             : 
  172993             :       // DQ (4/30/2006): Modified to be a const function.
  172994             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  172995             : 
  172996             :           This functions is part of general support for many possible tools to operate 
  172997             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  172998             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  172999             :           less than the set of pointers used by the AST file I/O. This is part of
  173000             :           work implemented by Andreas, and support tools such as the AST graph generation.
  173001             : 
  173002             :           \warning This function can return unexpected data members and thus the 
  173003             :                    order and the number of elements is unpredicable and subject 
  173004             :                    to change.
  173005             : 
  173006             :           \returns STL vector of pairs of SgNode* and strings
  173007             :        */
  173008             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  173009             : 
  173010             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  173011             : 
  173012             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  173013             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  173014             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  173015             : 
  173016             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  173017             :                    and subject to change.
  173018             :        */
  173019             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  173020             : 
  173021             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  173022             : 
  173023             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  173024             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  173025             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  173026             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  173027             : 
  173028             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  173029             : 
  173030             :           \returns long
  173031             :        */
  173032             :           virtual long getChildIndex( SgNode* childNode ) const override;
  173033             : 
  173034             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  173035             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173036             :       /* \brief Constructor for use by AST File I/O Mechanism
  173037             : 
  173038             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  173039             :           which obtained via fast binary file I/O from disk.
  173040             :        */
  173041             :        // SgOmpDeclareSimdStatement( SgOmpDeclareSimdStatementStorageClass& source );
  173042             : 
  173043             : 
  173044             : 
  173045             : 
  173046             : 
  173047             :  // JH (10/24/2005): methods added to support the ast file IO
  173048             :     private:
  173049             : 
  173050             :       /* name AST Memory Allocation Support Functions
  173051             :           \brief Memory allocations support....
  173052             : 
  173053             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  173054             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  173055             :           and support the AST File I/O Mechanism.
  173056             :        */
  173057             :       /* */
  173058             : 
  173059             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  173060             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  173061             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  173062             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  173063             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  173064             :           a correspinding one in the AST_FILE_IO class!
  173065             :        */
  173066             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  173067             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173068             :       /* \brief Typedef used for low level memory access.
  173069             :        */
  173070             :        // typedef unsigned char* TestType;
  173071             : 
  173072             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  173073             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173074             :       /* \brief Typedef used to hold memory addresses as values.
  173075             :        */
  173076             :        // typedef unsigned long  AddressType;
  173077             : 
  173078             : 
  173079             : 
  173080             :        // necessary, to have direct access to the p_freepointer and the private methods !
  173081             :       /*! \brief friend class declaration to support AST File I/O */
  173082             :           friend class AST_FILE_IO;
  173083             : 
  173084             :       /*! \brief friend class declaration to support AST File I/O */
  173085             :           friend class SgOmpDeclareSimdStatementStorageClass;
  173086             : 
  173087             :       /*! \brief friend class declaration to support AST File I/O */
  173088             :           friend class AstSpecificDataManagingClass;
  173089             : 
  173090             :       /*! \brief friend class declaration to support AST File I/O */
  173091             :           friend class AstSpecificDataManagingClassStorageClass;
  173092             :     public:
  173093             :       /*! \brief IR node constructor to support AST File I/O */
  173094             :           SgOmpDeclareSimdStatement( const SgOmpDeclareSimdStatementStorageClass& source );
  173095             : 
  173096             :  // private: // JJW hack
  173097             :        /*
  173098             :           name AST Memory Allocation Support Variables
  173099             :           Memory allocations support variables 
  173100             : 
  173101             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  173102             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  173103             :           and support the AST File I/O Mechanism.
  173104             :        */
  173105             :       /* */
  173106             : 
  173107             :     public:
  173108             : 
  173109             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  173110             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  173111             :       // virtual SgNode* addRegExpAttribute();
  173112             :       /*! \brief Support for AST matching using regular expression.
  173113             : 
  173114             :           This support is incomplete and the subject of current research to define 
  173115             :           RegEx trees to support inexact matching.
  173116             :        */
  173117             :           SgOmpDeclareSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  173118             : 
  173119             : // *** COMMON CODE SECTION ENDS HERE ***
  173120             : 
  173121             : 
  173122             : // End of memberFunctionString
  173123             : // Start of memberFunctionString
  173124             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  173125             : 
  173126             :      // the generated cast function
  173127             :      // friend ROSE_DLL_API SgOmpDeclareSimdStatement* isSgOmpDeclareSimdStatement ( SgNode* s );
  173128             : 
  173129             :           typedef SgDeclarationStatement base_node_type;
  173130             : 
  173131             : 
  173132             : // End of memberFunctionString
  173133             : // Start of memberFunctionString
  173134             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  173135             : 
  173136             :           void post_construction_initialization() override;
  173137             : 
  173138             : 
  173139             : // End of memberFunctionString
  173140             : 
  173141             :      public: 
  173142             :          const SgOmpClausePtrList&  get_clauses() const;
  173143             :          SgOmpClausePtrList& get_clauses(); 
  173144             : 
  173145             : 
  173146             :      public: 
  173147             :          virtual ~SgOmpDeclareSimdStatement();
  173148             : 
  173149             : 
  173150             :      public: 
  173151             :          SgOmpDeclareSimdStatement(Sg_File_Info* startOfConstruct ); 
  173152             :          SgOmpDeclareSimdStatement(); 
  173153             : 
  173154             :     protected:
  173155             : // Start of memberFunctionString
  173156             : SgOmpClausePtrList p_clauses;
  173157             :           
  173158             : // End of memberFunctionString
  173159             : 
  173160             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDeclareSimdStatement>;
  173161             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDeclareSimdStatement, SgOmpClausePtrList,&SgOmpDeclareSimdStatement::p_clauses>;
  173162             : 
  173163             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173164             : 
  173165             : 
  173166             :    };
  173167             : #endif
  173168             : 
  173169             : // postdeclarations for SgOmpDeclareSimdStatement
  173170             : 
  173171             : /* #line 173172 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173172             : 
  173173             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  173174             : 
  173175             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173176             : 
  173177             : 
  173178             : /* #line 173179 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173179             : 
  173180             : 
  173181             : 
  173182             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173183             : 
  173184             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  173185             : //      This code is automatically generated for each 
  173186             : //      terminal and non-terminal within the defined 
  173187             : //      grammar.  There is a simple way to change the 
  173188             : //      code to fix bugs etc.  See the ROSE README file
  173189             : //      for directions.
  173190             : 
  173191             : // tps: (02/22/2010): Adding DLL export requirements
  173192             : #include "rosedll.h"
  173193             : 
  173194             : // predeclarations for SgMicrosoftAttributeDeclaration
  173195             : 
  173196             : /* #line 173197 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173197             : 
  173198             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  173199             : 
  173200             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173201             : 
  173202             : #if 1
  173203             : // Class Definition for SgMicrosoftAttributeDeclaration
  173204             : class ROSE_DLL_API SgMicrosoftAttributeDeclaration  : public SgDeclarationStatement
  173205             :    {
  173206             :      public:
  173207             : 
  173208             : 
  173209             : /* #line 173210 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173210             : 
  173211             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  173212             : // Start of memberFunctionString
  173213             : /* #line 3920 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  173214             : 
  173215             : 
  173216             :        // We need this to be defined to avoid calling the base class version (which is an error).
  173217             :           SgName get_mangled_name() const override;
  173218             : 
  173219             :           bool hasExplicitScope() const override;
  173220             : 
  173221             : 
  173222             : 
  173223             : // End of memberFunctionString
  173224             : // Start of memberFunctionString
  173225             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  173226             : 
  173227             : // *** COMMON CODE SECTION BEGINS HERE ***
  173228             : 
  173229             :     public:
  173230             : 
  173231             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  173232             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  173233             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  173234             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  173235             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  173236             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  173237             : 
  173238             :       /*! \brief returns a string representing the class name */
  173239             :           virtual std::string class_name() const override;
  173240             : 
  173241             :       /*! \brief returns new style SageIII enum values */
  173242             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  173243             : 
  173244             :       /*! \brief static variant value */
  173245             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  173246             :        // static const VariantT static_variant = V_SgMicrosoftAttributeDeclaration;
  173247             :           enum { static_variant = V_SgMicrosoftAttributeDeclaration };
  173248             : 
  173249             :        /* the generated cast function */
  173250             :       /*! \brief Casts pointer from base class to derived class */
  173251             :           ROSE_DLL_API friend       SgMicrosoftAttributeDeclaration* isSgMicrosoftAttributeDeclaration(       SgNode * s );
  173252             : 
  173253             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  173254             :           ROSE_DLL_API friend const SgMicrosoftAttributeDeclaration* isSgMicrosoftAttributeDeclaration( const SgNode * s );
  173255             : 
  173256             :      // ******************************************
  173257             :      // * Memory Pool / New / Delete
  173258             :      // ******************************************
  173259             : 
  173260             :      public:
  173261             :           /// \private
  173262             :           static const unsigned pool_size; //
  173263             :           /// \private
  173264             :           static std::vector<unsigned char *> pools; //
  173265             :           /// \private
  173266             :           static SgMicrosoftAttributeDeclaration * next_node; // 
  173267             : 
  173268             :           /// \private
  173269             :           static unsigned long initializeStorageClassArray(SgMicrosoftAttributeDeclarationStorageClass *); //
  173270             : 
  173271             :           /// \private
  173272             :           static void clearMemoryPool(); //
  173273             :           static void deleteMemoryPool(); //
  173274             : 
  173275             :           /// \private
  173276             :           static void extendMemoryPoolForFileIO(); //
  173277             : 
  173278             :           /// \private
  173279             :           static SgMicrosoftAttributeDeclaration * getPointerFromGlobalIndex(unsigned long); //
  173280             :           /// \private
  173281             :           static SgMicrosoftAttributeDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  173282             : 
  173283             :           /// \private
  173284             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  173285             :           /// \private
  173286             :           static void resetValidFreepointers(); //
  173287             :           /// \private
  173288             :           static unsigned long getNumberOfLastValidPointer(); //
  173289             : 
  173290             : 
  173291             : #if defined(INLINE_FUNCTIONS)
  173292             :       /*! \brief returns pointer to newly allocated IR node */
  173293             :           inline void *operator new (size_t size);
  173294             : #else
  173295             :       /*! \brief returns pointer to newly allocated IR node */
  173296             :           void *operator new (size_t size);
  173297             : #endif
  173298             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  173299             :           void operator delete (void* pointer, size_t size);
  173300             : 
  173301             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  173302           0 :           void operator delete (void* pointer)
  173303             :              {
  173304             :             // This is the generated delete operator...
  173305           0 :                SgMicrosoftAttributeDeclaration::operator delete (pointer,sizeof(SgMicrosoftAttributeDeclaration));
  173306             :              }
  173307             : 
  173308             :       /*! \brief Returns the total number of IR nodes of this type */
  173309             :           static size_t numberOfNodes();
  173310             : 
  173311             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  173312             :           static size_t memoryUsage();
  173313             : 
  173314             :       // End of scope which started in IR nodes specific code 
  173315             :       /* */
  173316             : 
  173317             :       /* name Internal Functions
  173318             :           \brief Internal functions ... incomplete-documentation
  173319             : 
  173320             :           These functions have been made public as part of the design, but they are suggested for internal use 
  173321             :           or by particularly knowledgeable users for specialized tools or applications.
  173322             : 
  173323             :           \internal We could not make these private because they are required by user for special purposes. And 
  173324             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  173325             :          
  173326             :        */
  173327             : 
  173328             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  173329             :        // overridden in every class by *generated* implementation
  173330             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  173331             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  173332             :        // MS: 06/28/02 container of names of variables or container indices 
  173333             :        // used used in the traversal to access AST successor nodes
  173334             :        // overridden in every class by *generated* implementation
  173335             :       /*! \brief container of names of variables or container indices used used in the traversal
  173336             :           to access AST successor nodes overridden in every class by *generated* implementation */
  173337             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  173338             : 
  173339             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  173340             :        // than all the vector copies. The implementation for these functions is generated for each class.
  173341             :       /*! \brief return number of children in the traversal successor list */
  173342             :           virtual size_t get_numberOfTraversalSuccessors() override;
  173343             :       /*! \brief index-based access to traversal successors by index number */
  173344             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  173345             :       /*! \brief index-based access to traversal successors by child node */
  173346             :           virtual size_t get_childIndex(SgNode *child) override;
  173347             : 
  173348             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  173349             :        // MS: 08/16/2002 method for generating RTI information
  173350             :       /*! \brief return C++ Runtime-Time-Information */
  173351             :           virtual RTIReturnType roseRTI() override;
  173352             : #endif
  173353             :       /* */
  173354             : 
  173355             : 
  173356             : 
  173357             :       /* name Deprecated Functions
  173358             :           \brief Deprecated functions ... incomplete-documentation
  173359             : 
  173360             :           These functions have been deprecated from use.
  173361             :        */
  173362             :       /* */
  173363             : 
  173364             :       /*! returns a C style string (char*) representing the class name */
  173365             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  173366             : 
  173367             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  173368             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  173369             : #if 0
  173370             :       /*! returns old style Sage II enum values */
  173371             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  173372             :       /*! returns old style Sage II enum values */
  173373             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  173374             : #endif
  173375             :       /* */
  173376             : 
  173377             : 
  173378             : 
  173379             : 
  173380             :      public:
  173381             :       /* name Traversal Support Functions
  173382             :           \brief Traversal support functions ... incomplete-documentation
  173383             : 
  173384             :           These functions have been made public as part of the design, but they are suggested for internal use 
  173385             :           or by particularly knowledgable users for specialized tools or applications.
  173386             :        */
  173387             :       /* */
  173388             : 
  173389             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  173390             :        // (inferior to ROSE traversal mechanism, experimental).
  173391             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  173392             :        */
  173393             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  173394             : 
  173395             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  173396             :       /*! \brief support for the classic visitor pattern done in GoF */
  173397             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  173398             : 
  173399             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  173400             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  173401             :        */
  173402             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  173403             : 
  173404             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  173405             :        */
  173406             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  173407             : 
  173408             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  173409             :        // This traversal helps support internal tools that call static member functions.
  173410             :        // note: this function operates on the memory pools.
  173411             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  173412             :        */
  173413             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  173414             :       /* */
  173415             : 
  173416             : 
  173417             :      public:
  173418             :       /* name Memory Allocation Functions
  173419             :           \brief Memory allocations functions ... incomplete-documentation
  173420             : 
  173421             :           These functions have been made public as part of the design, but they are suggested for internal use 
  173422             :           or by particularly knowledgable users for specialized tools or applications.
  173423             :        */
  173424             :       /* */
  173425             : 
  173426             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  173427             : 
  173428             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  173429             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  173430             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  173431             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  173432             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  173433             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  173434             :           being used with the AST File I/O mechanism.
  173435             :        */
  173436             :           virtual bool isInMemoryPool() override;
  173437             : 
  173438             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  173439             : 
  173440             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  173441             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  173442             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  173443             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  173444             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  173445             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  173446             :           being used with the AST File I/O mechanism.
  173447             :        */
  173448             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  173449             : 
  173450             :       // DQ (4/30/2006): Modified to be a const function.
  173451             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  173452             : 
  173453             :           This functions is part of general support for many possible tools to operate 
  173454             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  173455             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  173456             :           less than the set of pointers used by the AST file I/O. This is part of
  173457             :           work implemented by Andreas, and support tools such as the AST graph generation.
  173458             : 
  173459             :           \warning This function can return unexpected data members and thus the 
  173460             :                    order and the number of elements is unpredicable and subject 
  173461             :                    to change.
  173462             : 
  173463             :           \returns STL vector of pairs of SgNode* and strings
  173464             :        */
  173465             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  173466             : 
  173467             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  173468             : 
  173469             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  173470             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  173471             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  173472             : 
  173473             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  173474             :                    and subject to change.
  173475             :        */
  173476             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  173477             : 
  173478             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  173479             : 
  173480             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  173481             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  173482             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  173483             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  173484             : 
  173485             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  173486             : 
  173487             :           \returns long
  173488             :        */
  173489             :           virtual long getChildIndex( SgNode* childNode ) const override;
  173490             : 
  173491             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  173492             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173493             :       /* \brief Constructor for use by AST File I/O Mechanism
  173494             : 
  173495             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  173496             :           which obtained via fast binary file I/O from disk.
  173497             :        */
  173498             :        // SgMicrosoftAttributeDeclaration( SgMicrosoftAttributeDeclarationStorageClass& source );
  173499             : 
  173500             : 
  173501             : 
  173502             : 
  173503             : 
  173504             :  // JH (10/24/2005): methods added to support the ast file IO
  173505             :     private:
  173506             : 
  173507             :       /* name AST Memory Allocation Support Functions
  173508             :           \brief Memory allocations support....
  173509             : 
  173510             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  173511             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  173512             :           and support the AST File I/O Mechanism.
  173513             :        */
  173514             :       /* */
  173515             : 
  173516             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  173517             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  173518             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  173519             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  173520             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  173521             :           a correspinding one in the AST_FILE_IO class!
  173522             :        */
  173523             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  173524             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173525             :       /* \brief Typedef used for low level memory access.
  173526             :        */
  173527             :        // typedef unsigned char* TestType;
  173528             : 
  173529             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  173530             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173531             :       /* \brief Typedef used to hold memory addresses as values.
  173532             :        */
  173533             :        // typedef unsigned long  AddressType;
  173534             : 
  173535             : 
  173536             : 
  173537             :        // necessary, to have direct access to the p_freepointer and the private methods !
  173538             :       /*! \brief friend class declaration to support AST File I/O */
  173539             :           friend class AST_FILE_IO;
  173540             : 
  173541             :       /*! \brief friend class declaration to support AST File I/O */
  173542             :           friend class SgMicrosoftAttributeDeclarationStorageClass;
  173543             : 
  173544             :       /*! \brief friend class declaration to support AST File I/O */
  173545             :           friend class AstSpecificDataManagingClass;
  173546             : 
  173547             :       /*! \brief friend class declaration to support AST File I/O */
  173548             :           friend class AstSpecificDataManagingClassStorageClass;
  173549             :     public:
  173550             :       /*! \brief IR node constructor to support AST File I/O */
  173551             :           SgMicrosoftAttributeDeclaration( const SgMicrosoftAttributeDeclarationStorageClass& source );
  173552             : 
  173553             :  // private: // JJW hack
  173554             :        /*
  173555             :           name AST Memory Allocation Support Variables
  173556             :           Memory allocations support variables 
  173557             : 
  173558             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  173559             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  173560             :           and support the AST File I/O Mechanism.
  173561             :        */
  173562             :       /* */
  173563             : 
  173564             :     public:
  173565             : 
  173566             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  173567             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  173568             :       // virtual SgNode* addRegExpAttribute();
  173569             :       /*! \brief Support for AST matching using regular expression.
  173570             : 
  173571             :           This support is incomplete and the subject of current research to define 
  173572             :           RegEx trees to support inexact matching.
  173573             :        */
  173574             :           SgMicrosoftAttributeDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  173575             : 
  173576             : // *** COMMON CODE SECTION ENDS HERE ***
  173577             : 
  173578             : 
  173579             : // End of memberFunctionString
  173580             : // Start of memberFunctionString
  173581             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  173582             : 
  173583             :      // the generated cast function
  173584             :      // friend ROSE_DLL_API SgMicrosoftAttributeDeclaration* isSgMicrosoftAttributeDeclaration ( SgNode* s );
  173585             : 
  173586             :           typedef SgDeclarationStatement base_node_type;
  173587             : 
  173588             : 
  173589             : // End of memberFunctionString
  173590             : // Start of memberFunctionString
  173591             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  173592             : 
  173593             :           void post_construction_initialization() override;
  173594             : 
  173595             : 
  173596             : // End of memberFunctionString
  173597             : 
  173598             :      public: 
  173599             :          SgName get_attribute_string() const;
  173600             :          void set_attribute_string(SgName attribute_string);
  173601             : 
  173602             : 
  173603             :      public: 
  173604             :          virtual ~SgMicrosoftAttributeDeclaration();
  173605             : 
  173606             : 
  173607             :      public: 
  173608             :          SgMicrosoftAttributeDeclaration(Sg_File_Info* startOfConstruct , SgName attribute_string = ""); 
  173609             :          SgMicrosoftAttributeDeclaration(SgName attribute_string); 
  173610             : 
  173611             :     protected:
  173612             : // Start of memberFunctionString
  173613             : SgName p_attribute_string;
  173614             :           
  173615             : // End of memberFunctionString
  173616             : 
  173617             :     friend struct Rose::Traits::generated::describe_node_t<SgMicrosoftAttributeDeclaration>;
  173618             :     friend struct Rose::Traits::generated::describe_field_t<SgMicrosoftAttributeDeclaration, SgName,&SgMicrosoftAttributeDeclaration::p_attribute_string>;
  173619             : 
  173620             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173621             : 
  173622             : 
  173623             :    };
  173624             : #endif
  173625             : 
  173626             : // postdeclarations for SgMicrosoftAttributeDeclaration
  173627             : 
  173628             : /* #line 173629 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173629             : 
  173630             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  173631             : 
  173632             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173633             : 
  173634             : 
  173635             : /* #line 173636 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173636             : 
  173637             : 
  173638             : 
  173639             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173640             : 
  173641             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  173642             : //      This code is automatically generated for each 
  173643             : //      terminal and non-terminal within the defined 
  173644             : //      grammar.  There is a simple way to change the 
  173645             : //      code to fix bugs etc.  See the ROSE README file
  173646             : //      for directions.
  173647             : 
  173648             : // tps: (02/22/2010): Adding DLL export requirements
  173649             : #include "rosedll.h"
  173650             : 
  173651             : // predeclarations for SgNonrealDecl
  173652             : 
  173653             : /* #line 173654 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173654             : 
  173655             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  173656             : 
  173657             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  173658             : 
  173659             : #if 1
  173660             : // Class Definition for SgNonrealDecl
  173661             : class ROSE_DLL_API SgNonrealDecl  : public SgDeclarationStatement
  173662             :    {
  173663             :      public:
  173664             : 
  173665             : 
  173666             : /* #line 173667 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  173667             : 
  173668             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  173669             : // Start of memberFunctionString
  173670             : /* #line 2742 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  173671             : 
  173672             : 
  173673             :           SgName get_name (void) const;
  173674             :           void set_name (SgName name);
  173675             : 
  173676             :           SgNonrealType* get_type (void) const;
  173677             :           void set_type (SgNonrealType* t);
  173678             : 
  173679             :           SgName get_mangled_name (void) const override;
  173680             : 
  173681             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  173682             :           SgName get_qualified_name() const;
  173683             : 
  173684             : 
  173685             : 
  173686             : // End of memberFunctionString
  173687             : // Start of memberFunctionString
  173688             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  173689             : 
  173690             : // *** COMMON CODE SECTION BEGINS HERE ***
  173691             : 
  173692             :     public:
  173693             : 
  173694             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  173695             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  173696             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  173697             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  173698             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  173699             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  173700             : 
  173701             :       /*! \brief returns a string representing the class name */
  173702             :           virtual std::string class_name() const override;
  173703             : 
  173704             :       /*! \brief returns new style SageIII enum values */
  173705             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  173706             : 
  173707             :       /*! \brief static variant value */
  173708             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  173709             :        // static const VariantT static_variant = V_SgNonrealDecl;
  173710             :           enum { static_variant = V_SgNonrealDecl };
  173711             : 
  173712             :        /* the generated cast function */
  173713             :       /*! \brief Casts pointer from base class to derived class */
  173714             :           ROSE_DLL_API friend       SgNonrealDecl* isSgNonrealDecl(       SgNode * s );
  173715             : 
  173716             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  173717             :           ROSE_DLL_API friend const SgNonrealDecl* isSgNonrealDecl( const SgNode * s );
  173718             : 
  173719             :      // ******************************************
  173720             :      // * Memory Pool / New / Delete
  173721             :      // ******************************************
  173722             : 
  173723             :      public:
  173724             :           /// \private
  173725             :           static const unsigned pool_size; //
  173726             :           /// \private
  173727             :           static std::vector<unsigned char *> pools; //
  173728             :           /// \private
  173729             :           static SgNonrealDecl * next_node; // 
  173730             : 
  173731             :           /// \private
  173732             :           static unsigned long initializeStorageClassArray(SgNonrealDeclStorageClass *); //
  173733             : 
  173734             :           /// \private
  173735             :           static void clearMemoryPool(); //
  173736             :           static void deleteMemoryPool(); //
  173737             : 
  173738             :           /// \private
  173739             :           static void extendMemoryPoolForFileIO(); //
  173740             : 
  173741             :           /// \private
  173742             :           static SgNonrealDecl * getPointerFromGlobalIndex(unsigned long); //
  173743             :           /// \private
  173744             :           static SgNonrealDecl * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  173745             : 
  173746             :           /// \private
  173747             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  173748             :           /// \private
  173749             :           static void resetValidFreepointers(); //
  173750             :           /// \private
  173751             :           static unsigned long getNumberOfLastValidPointer(); //
  173752             : 
  173753             : 
  173754             : #if defined(INLINE_FUNCTIONS)
  173755             :       /*! \brief returns pointer to newly allocated IR node */
  173756             :           inline void *operator new (size_t size);
  173757             : #else
  173758             :       /*! \brief returns pointer to newly allocated IR node */
  173759             :           void *operator new (size_t size);
  173760             : #endif
  173761             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  173762             :           void operator delete (void* pointer, size_t size);
  173763             : 
  173764             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  173765       10160 :           void operator delete (void* pointer)
  173766             :              {
  173767             :             // This is the generated delete operator...
  173768       10160 :                SgNonrealDecl::operator delete (pointer,sizeof(SgNonrealDecl));
  173769             :              }
  173770             : 
  173771             :       /*! \brief Returns the total number of IR nodes of this type */
  173772             :           static size_t numberOfNodes();
  173773             : 
  173774             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  173775             :           static size_t memoryUsage();
  173776             : 
  173777             :       // End of scope which started in IR nodes specific code 
  173778             :       /* */
  173779             : 
  173780             :       /* name Internal Functions
  173781             :           \brief Internal functions ... incomplete-documentation
  173782             : 
  173783             :           These functions have been made public as part of the design, but they are suggested for internal use 
  173784             :           or by particularly knowledgeable users for specialized tools or applications.
  173785             : 
  173786             :           \internal We could not make these private because they are required by user for special purposes. And 
  173787             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  173788             :          
  173789             :        */
  173790             : 
  173791             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  173792             :        // overridden in every class by *generated* implementation
  173793             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  173794             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  173795             :        // MS: 06/28/02 container of names of variables or container indices 
  173796             :        // used used in the traversal to access AST successor nodes
  173797             :        // overridden in every class by *generated* implementation
  173798             :       /*! \brief container of names of variables or container indices used used in the traversal
  173799             :           to access AST successor nodes overridden in every class by *generated* implementation */
  173800             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  173801             : 
  173802             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  173803             :        // than all the vector copies. The implementation for these functions is generated for each class.
  173804             :       /*! \brief return number of children in the traversal successor list */
  173805             :           virtual size_t get_numberOfTraversalSuccessors() override;
  173806             :       /*! \brief index-based access to traversal successors by index number */
  173807             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  173808             :       /*! \brief index-based access to traversal successors by child node */
  173809             :           virtual size_t get_childIndex(SgNode *child) override;
  173810             : 
  173811             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  173812             :        // MS: 08/16/2002 method for generating RTI information
  173813             :       /*! \brief return C++ Runtime-Time-Information */
  173814             :           virtual RTIReturnType roseRTI() override;
  173815             : #endif
  173816             :       /* */
  173817             : 
  173818             : 
  173819             : 
  173820             :       /* name Deprecated Functions
  173821             :           \brief Deprecated functions ... incomplete-documentation
  173822             : 
  173823             :           These functions have been deprecated from use.
  173824             :        */
  173825             :       /* */
  173826             : 
  173827             :       /*! returns a C style string (char*) representing the class name */
  173828             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  173829             : 
  173830             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  173831             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  173832             : #if 0
  173833             :       /*! returns old style Sage II enum values */
  173834             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  173835             :       /*! returns old style Sage II enum values */
  173836             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  173837             : #endif
  173838             :       /* */
  173839             : 
  173840             : 
  173841             : 
  173842             : 
  173843             :      public:
  173844             :       /* name Traversal Support Functions
  173845             :           \brief Traversal support functions ... incomplete-documentation
  173846             : 
  173847             :           These functions have been made public as part of the design, but they are suggested for internal use 
  173848             :           or by particularly knowledgable users for specialized tools or applications.
  173849             :        */
  173850             :       /* */
  173851             : 
  173852             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  173853             :        // (inferior to ROSE traversal mechanism, experimental).
  173854             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  173855             :        */
  173856             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  173857             : 
  173858             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  173859             :       /*! \brief support for the classic visitor pattern done in GoF */
  173860             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  173861             : 
  173862             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  173863             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  173864             :        */
  173865             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  173866             : 
  173867             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  173868             :        */
  173869             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  173870             : 
  173871             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  173872             :        // This traversal helps support internal tools that call static member functions.
  173873             :        // note: this function operates on the memory pools.
  173874             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  173875             :        */
  173876             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  173877             :       /* */
  173878             : 
  173879             : 
  173880             :      public:
  173881             :       /* name Memory Allocation Functions
  173882             :           \brief Memory allocations functions ... incomplete-documentation
  173883             : 
  173884             :           These functions have been made public as part of the design, but they are suggested for internal use 
  173885             :           or by particularly knowledgable users for specialized tools or applications.
  173886             :        */
  173887             :       /* */
  173888             : 
  173889             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  173890             : 
  173891             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  173892             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  173893             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  173894             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  173895             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  173896             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  173897             :           being used with the AST File I/O mechanism.
  173898             :        */
  173899             :           virtual bool isInMemoryPool() override;
  173900             : 
  173901             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  173902             : 
  173903             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  173904             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  173905             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  173906             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  173907             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  173908             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  173909             :           being used with the AST File I/O mechanism.
  173910             :        */
  173911             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  173912             : 
  173913             :       // DQ (4/30/2006): Modified to be a const function.
  173914             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  173915             : 
  173916             :           This functions is part of general support for many possible tools to operate 
  173917             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  173918             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  173919             :           less than the set of pointers used by the AST file I/O. This is part of
  173920             :           work implemented by Andreas, and support tools such as the AST graph generation.
  173921             : 
  173922             :           \warning This function can return unexpected data members and thus the 
  173923             :                    order and the number of elements is unpredicable and subject 
  173924             :                    to change.
  173925             : 
  173926             :           \returns STL vector of pairs of SgNode* and strings
  173927             :        */
  173928             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  173929             : 
  173930             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  173931             : 
  173932             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  173933             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  173934             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  173935             : 
  173936             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  173937             :                    and subject to change.
  173938             :        */
  173939             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  173940             : 
  173941             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  173942             : 
  173943             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  173944             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  173945             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  173946             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  173947             : 
  173948             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  173949             : 
  173950             :           \returns long
  173951             :        */
  173952             :           virtual long getChildIndex( SgNode* childNode ) const override;
  173953             : 
  173954             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  173955             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173956             :       /* \brief Constructor for use by AST File I/O Mechanism
  173957             : 
  173958             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  173959             :           which obtained via fast binary file I/O from disk.
  173960             :        */
  173961             :        // SgNonrealDecl( SgNonrealDeclStorageClass& source );
  173962             : 
  173963             : 
  173964             : 
  173965             : 
  173966             : 
  173967             :  // JH (10/24/2005): methods added to support the ast file IO
  173968             :     private:
  173969             : 
  173970             :       /* name AST Memory Allocation Support Functions
  173971             :           \brief Memory allocations support....
  173972             : 
  173973             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  173974             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  173975             :           and support the AST File I/O Mechanism.
  173976             :        */
  173977             :       /* */
  173978             : 
  173979             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  173980             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  173981             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  173982             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  173983             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  173984             :           a correspinding one in the AST_FILE_IO class!
  173985             :        */
  173986             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  173987             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173988             :       /* \brief Typedef used for low level memory access.
  173989             :        */
  173990             :        // typedef unsigned char* TestType;
  173991             : 
  173992             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  173993             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  173994             :       /* \brief Typedef used to hold memory addresses as values.
  173995             :        */
  173996             :        // typedef unsigned long  AddressType;
  173997             : 
  173998             : 
  173999             : 
  174000             :        // necessary, to have direct access to the p_freepointer and the private methods !
  174001             :       /*! \brief friend class declaration to support AST File I/O */
  174002             :           friend class AST_FILE_IO;
  174003             : 
  174004             :       /*! \brief friend class declaration to support AST File I/O */
  174005             :           friend class SgNonrealDeclStorageClass;
  174006             : 
  174007             :       /*! \brief friend class declaration to support AST File I/O */
  174008             :           friend class AstSpecificDataManagingClass;
  174009             : 
  174010             :       /*! \brief friend class declaration to support AST File I/O */
  174011             :           friend class AstSpecificDataManagingClassStorageClass;
  174012             :     public:
  174013             :       /*! \brief IR node constructor to support AST File I/O */
  174014             :           SgNonrealDecl( const SgNonrealDeclStorageClass& source );
  174015             : 
  174016             :  // private: // JJW hack
  174017             :        /*
  174018             :           name AST Memory Allocation Support Variables
  174019             :           Memory allocations support variables 
  174020             : 
  174021             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  174022             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  174023             :           and support the AST File I/O Mechanism.
  174024             :        */
  174025             :       /* */
  174026             : 
  174027             :     public:
  174028             : 
  174029             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  174030             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  174031             :       // virtual SgNode* addRegExpAttribute();
  174032             :       /*! \brief Support for AST matching using regular expression.
  174033             : 
  174034             :           This support is incomplete and the subject of current research to define 
  174035             :           RegEx trees to support inexact matching.
  174036             :        */
  174037             :           SgNonrealDecl* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  174038             : 
  174039             : // *** COMMON CODE SECTION ENDS HERE ***
  174040             : 
  174041             : 
  174042             : // End of memberFunctionString
  174043             : // Start of memberFunctionString
  174044             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  174045             : 
  174046             :      // the generated cast function
  174047             :      // friend ROSE_DLL_API SgNonrealDecl* isSgNonrealDecl ( SgNode* s );
  174048             : 
  174049             :           typedef SgDeclarationStatement base_node_type;
  174050             : 
  174051             : 
  174052             : // End of memberFunctionString
  174053             : // Start of memberFunctionString
  174054             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  174055             : 
  174056             :           void post_construction_initialization() override;
  174057             : 
  174058             : 
  174059             : // End of memberFunctionString
  174060             : 
  174061             : 
  174062             :      public: 
  174063             :          SgDeclarationScope* get_nonreal_decl_scope() const;
  174064             :          void set_nonreal_decl_scope(SgDeclarationScope* nonreal_decl_scope);
  174065             : 
  174066             : 
  174067             :      public: 
  174068             :          int get_template_parameter_position() const;
  174069             :          void set_template_parameter_position(int template_parameter_position);
  174070             : 
  174071             :      public: 
  174072             :          int get_template_parameter_depth() const;
  174073             :          void set_template_parameter_depth(int template_parameter_depth);
  174074             : 
  174075             :      public: 
  174076             :          SgDeclarationStatement* get_templateDeclaration() const;
  174077             :          void set_templateDeclaration(SgDeclarationStatement* templateDeclaration);
  174078             : 
  174079             :      public: 
  174080             :          const SgTemplateArgumentPtrList&  get_tpl_args() const;
  174081             :          SgTemplateArgumentPtrList& get_tpl_args(); 
  174082             : 
  174083             :      public: 
  174084             :          const SgTemplateParameterPtrList&  get_tpl_params() const;
  174085             :          SgTemplateParameterPtrList& get_tpl_params(); 
  174086             : 
  174087             :      public: 
  174088             :          bool get_is_class_member() const;
  174089             :          void set_is_class_member(bool is_class_member);
  174090             : 
  174091             :      public: 
  174092             :          bool get_is_template_param() const;
  174093             :          void set_is_template_param(bool is_template_param);
  174094             : 
  174095             :      public: 
  174096             :          bool get_is_template_template_param() const;
  174097             :          void set_is_template_template_param(bool is_template_template_param);
  174098             : 
  174099             :      public: 
  174100             :          bool get_is_nonreal_template() const;
  174101             :          void set_is_nonreal_template(bool is_nonreal_template);
  174102             : 
  174103             :      public: 
  174104             :          bool get_is_nonreal_function() const;
  174105             :          void set_is_nonreal_function(bool is_nonreal_function);
  174106             : 
  174107             : 
  174108             :      public: 
  174109             :          virtual ~SgNonrealDecl();
  174110             : 
  174111             : 
  174112             :      public: 
  174113             :          SgNonrealDecl(Sg_File_Info* startOfConstruct , SgName name = ""); 
  174114             :          SgNonrealDecl(SgName name); 
  174115             : 
  174116             :     protected:
  174117             : // Start of memberFunctionString
  174118             : SgName p_name;
  174119             :           
  174120             : // End of memberFunctionString
  174121             : // Start of memberFunctionString
  174122             : SgDeclarationScope* p_nonreal_decl_scope;
  174123             :           
  174124             : // End of memberFunctionString
  174125             : // Start of memberFunctionString
  174126             : SgNonrealType* p_type;
  174127             :           
  174128             : // End of memberFunctionString
  174129             : // Start of memberFunctionString
  174130             : int p_template_parameter_position;
  174131             :           
  174132             : // End of memberFunctionString
  174133             : // Start of memberFunctionString
  174134             : int p_template_parameter_depth;
  174135             :           
  174136             : // End of memberFunctionString
  174137             : // Start of memberFunctionString
  174138             : SgDeclarationStatement* p_templateDeclaration;
  174139             :           
  174140             : // End of memberFunctionString
  174141             : // Start of memberFunctionString
  174142             : SgTemplateArgumentPtrList p_tpl_args;
  174143             :           
  174144             : // End of memberFunctionString
  174145             : // Start of memberFunctionString
  174146             : SgTemplateParameterPtrList p_tpl_params;
  174147             :           
  174148             : // End of memberFunctionString
  174149             : // Start of memberFunctionString
  174150             : bool p_is_class_member;
  174151             :           
  174152             : // End of memberFunctionString
  174153             : // Start of memberFunctionString
  174154             : bool p_is_template_param;
  174155             :           
  174156             : // End of memberFunctionString
  174157             : // Start of memberFunctionString
  174158             : bool p_is_template_template_param;
  174159             :           
  174160             : // End of memberFunctionString
  174161             : // Start of memberFunctionString
  174162             : bool p_is_nonreal_template;
  174163             :           
  174164             : // End of memberFunctionString
  174165             : // Start of memberFunctionString
  174166             : bool p_is_nonreal_function;
  174167             :           
  174168             : // End of memberFunctionString
  174169             : 
  174170             :     friend struct Rose::Traits::generated::describe_node_t<SgNonrealDecl>;
  174171             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, SgName,&SgNonrealDecl::p_name>;
  174172             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, SgDeclarationScope*,&SgNonrealDecl::p_nonreal_decl_scope>;
  174173             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, SgNonrealType*,&SgNonrealDecl::p_type>;
  174174             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, int,&SgNonrealDecl::p_template_parameter_position>;
  174175             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, int,&SgNonrealDecl::p_template_parameter_depth>;
  174176             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, SgDeclarationStatement*,&SgNonrealDecl::p_templateDeclaration>;
  174177             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, SgTemplateArgumentPtrList,&SgNonrealDecl::p_tpl_args>;
  174178             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, SgTemplateParameterPtrList,&SgNonrealDecl::p_tpl_params>;
  174179             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, bool,&SgNonrealDecl::p_is_class_member>;
  174180             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, bool,&SgNonrealDecl::p_is_template_param>;
  174181             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, bool,&SgNonrealDecl::p_is_template_template_param>;
  174182             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, bool,&SgNonrealDecl::p_is_nonreal_template>;
  174183             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealDecl, bool,&SgNonrealDecl::p_is_nonreal_function>;
  174184             : 
  174185             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174186             : 
  174187             : 
  174188             :    };
  174189             : #endif
  174190             : 
  174191             : // postdeclarations for SgNonrealDecl
  174192             : 
  174193             : /* #line 174194 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174194             : 
  174195             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  174196             : 
  174197             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174198             : 
  174199             : 
  174200             : /* #line 174201 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174201             : 
  174202             : 
  174203             : 
  174204             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174205             : 
  174206             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  174207             : //      This code is automatically generated for each 
  174208             : //      terminal and non-terminal within the defined 
  174209             : //      grammar.  There is a simple way to change the 
  174210             : //      code to fix bugs etc.  See the ROSE README file
  174211             : //      for directions.
  174212             : 
  174213             : // tps: (02/22/2010): Adding DLL export requirements
  174214             : #include "rosedll.h"
  174215             : 
  174216             : // predeclarations for SgEmptyDeclaration
  174217             : 
  174218             : /* #line 174219 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174219             : 
  174220             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  174221             : 
  174222             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174223             : 
  174224             : #if 1
  174225             : // Class Definition for SgEmptyDeclaration
  174226             : class ROSE_DLL_API SgEmptyDeclaration  : public SgDeclarationStatement
  174227             :    {
  174228             :      public:
  174229             : 
  174230             : 
  174231             : /* #line 174232 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174232             : 
  174233             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  174234             : // Start of memberFunctionString
  174235             : /* #line 3039 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  174236             : 
  174237             : 
  174238             :        // DQ (2/18/2006): Added general name mangling for all declarations (and some other IR nodes).
  174239             :           virtual SgName get_mangled_name(void) const override;
  174240             : 
  174241             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  174242             :           virtual unsigned int cfgIndexForEnd() const override;
  174243             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  174244             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  174245             : #endif
  174246             : 
  174247             :        // DQ (11/24/2020): Adding support for explicit scope to be false.
  174248             :           virtual bool hasExplicitScope() const override;
  174249             : 
  174250             : 
  174251             : 
  174252             : // End of memberFunctionString
  174253             : // Start of memberFunctionString
  174254             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  174255             : 
  174256             : // *** COMMON CODE SECTION BEGINS HERE ***
  174257             : 
  174258             :     public:
  174259             : 
  174260             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  174261             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  174262             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  174263             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  174264             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  174265             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  174266             : 
  174267             :       /*! \brief returns a string representing the class name */
  174268             :           virtual std::string class_name() const override;
  174269             : 
  174270             :       /*! \brief returns new style SageIII enum values */
  174271             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  174272             : 
  174273             :       /*! \brief static variant value */
  174274             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  174275             :        // static const VariantT static_variant = V_SgEmptyDeclaration;
  174276             :           enum { static_variant = V_SgEmptyDeclaration };
  174277             : 
  174278             :        /* the generated cast function */
  174279             :       /*! \brief Casts pointer from base class to derived class */
  174280             :           ROSE_DLL_API friend       SgEmptyDeclaration* isSgEmptyDeclaration(       SgNode * s );
  174281             : 
  174282             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  174283             :           ROSE_DLL_API friend const SgEmptyDeclaration* isSgEmptyDeclaration( const SgNode * s );
  174284             : 
  174285             :      // ******************************************
  174286             :      // * Memory Pool / New / Delete
  174287             :      // ******************************************
  174288             : 
  174289             :      public:
  174290             :           /// \private
  174291             :           static const unsigned pool_size; //
  174292             :           /// \private
  174293             :           static std::vector<unsigned char *> pools; //
  174294             :           /// \private
  174295             :           static SgEmptyDeclaration * next_node; // 
  174296             : 
  174297             :           /// \private
  174298             :           static unsigned long initializeStorageClassArray(SgEmptyDeclarationStorageClass *); //
  174299             : 
  174300             :           /// \private
  174301             :           static void clearMemoryPool(); //
  174302             :           static void deleteMemoryPool(); //
  174303             : 
  174304             :           /// \private
  174305             :           static void extendMemoryPoolForFileIO(); //
  174306             : 
  174307             :           /// \private
  174308             :           static SgEmptyDeclaration * getPointerFromGlobalIndex(unsigned long); //
  174309             :           /// \private
  174310             :           static SgEmptyDeclaration * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  174311             : 
  174312             :           /// \private
  174313             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  174314             :           /// \private
  174315             :           static void resetValidFreepointers(); //
  174316             :           /// \private
  174317             :           static unsigned long getNumberOfLastValidPointer(); //
  174318             : 
  174319             : 
  174320             : #if defined(INLINE_FUNCTIONS)
  174321             :       /*! \brief returns pointer to newly allocated IR node */
  174322             :           inline void *operator new (size_t size);
  174323             : #else
  174324             :       /*! \brief returns pointer to newly allocated IR node */
  174325             :           void *operator new (size_t size);
  174326             : #endif
  174327             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  174328             :           void operator delete (void* pointer, size_t size);
  174329             : 
  174330             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  174331           0 :           void operator delete (void* pointer)
  174332             :              {
  174333             :             // This is the generated delete operator...
  174334           0 :                SgEmptyDeclaration::operator delete (pointer,sizeof(SgEmptyDeclaration));
  174335             :              }
  174336             : 
  174337             :       /*! \brief Returns the total number of IR nodes of this type */
  174338             :           static size_t numberOfNodes();
  174339             : 
  174340             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  174341             :           static size_t memoryUsage();
  174342             : 
  174343             :       // End of scope which started in IR nodes specific code 
  174344             :       /* */
  174345             : 
  174346             :       /* name Internal Functions
  174347             :           \brief Internal functions ... incomplete-documentation
  174348             : 
  174349             :           These functions have been made public as part of the design, but they are suggested for internal use 
  174350             :           or by particularly knowledgeable users for specialized tools or applications.
  174351             : 
  174352             :           \internal We could not make these private because they are required by user for special purposes. And 
  174353             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  174354             :          
  174355             :        */
  174356             : 
  174357             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  174358             :        // overridden in every class by *generated* implementation
  174359             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  174360             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  174361             :        // MS: 06/28/02 container of names of variables or container indices 
  174362             :        // used used in the traversal to access AST successor nodes
  174363             :        // overridden in every class by *generated* implementation
  174364             :       /*! \brief container of names of variables or container indices used used in the traversal
  174365             :           to access AST successor nodes overridden in every class by *generated* implementation */
  174366             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  174367             : 
  174368             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  174369             :        // than all the vector copies. The implementation for these functions is generated for each class.
  174370             :       /*! \brief return number of children in the traversal successor list */
  174371             :           virtual size_t get_numberOfTraversalSuccessors() override;
  174372             :       /*! \brief index-based access to traversal successors by index number */
  174373             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  174374             :       /*! \brief index-based access to traversal successors by child node */
  174375             :           virtual size_t get_childIndex(SgNode *child) override;
  174376             : 
  174377             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  174378             :        // MS: 08/16/2002 method for generating RTI information
  174379             :       /*! \brief return C++ Runtime-Time-Information */
  174380             :           virtual RTIReturnType roseRTI() override;
  174381             : #endif
  174382             :       /* */
  174383             : 
  174384             : 
  174385             : 
  174386             :       /* name Deprecated Functions
  174387             :           \brief Deprecated functions ... incomplete-documentation
  174388             : 
  174389             :           These functions have been deprecated from use.
  174390             :        */
  174391             :       /* */
  174392             : 
  174393             :       /*! returns a C style string (char*) representing the class name */
  174394             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  174395             : 
  174396             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  174397             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  174398             : #if 0
  174399             :       /*! returns old style Sage II enum values */
  174400             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  174401             :       /*! returns old style Sage II enum values */
  174402             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  174403             : #endif
  174404             :       /* */
  174405             : 
  174406             : 
  174407             : 
  174408             : 
  174409             :      public:
  174410             :       /* name Traversal Support Functions
  174411             :           \brief Traversal support functions ... incomplete-documentation
  174412             : 
  174413             :           These functions have been made public as part of the design, but they are suggested for internal use 
  174414             :           or by particularly knowledgable users for specialized tools or applications.
  174415             :        */
  174416             :       /* */
  174417             : 
  174418             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  174419             :        // (inferior to ROSE traversal mechanism, experimental).
  174420             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  174421             :        */
  174422             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  174423             : 
  174424             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  174425             :       /*! \brief support for the classic visitor pattern done in GoF */
  174426             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  174427             : 
  174428             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  174429             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  174430             :        */
  174431             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  174432             : 
  174433             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  174434             :        */
  174435             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  174436             : 
  174437             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  174438             :        // This traversal helps support internal tools that call static member functions.
  174439             :        // note: this function operates on the memory pools.
  174440             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  174441             :        */
  174442             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  174443             :       /* */
  174444             : 
  174445             : 
  174446             :      public:
  174447             :       /* name Memory Allocation Functions
  174448             :           \brief Memory allocations functions ... incomplete-documentation
  174449             : 
  174450             :           These functions have been made public as part of the design, but they are suggested for internal use 
  174451             :           or by particularly knowledgable users for specialized tools or applications.
  174452             :        */
  174453             :       /* */
  174454             : 
  174455             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  174456             : 
  174457             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  174458             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  174459             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  174460             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  174461             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  174462             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  174463             :           being used with the AST File I/O mechanism.
  174464             :        */
  174465             :           virtual bool isInMemoryPool() override;
  174466             : 
  174467             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  174468             : 
  174469             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  174470             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  174471             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  174472             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  174473             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  174474             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  174475             :           being used with the AST File I/O mechanism.
  174476             :        */
  174477             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  174478             : 
  174479             :       // DQ (4/30/2006): Modified to be a const function.
  174480             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  174481             : 
  174482             :           This functions is part of general support for many possible tools to operate 
  174483             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  174484             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  174485             :           less than the set of pointers used by the AST file I/O. This is part of
  174486             :           work implemented by Andreas, and support tools such as the AST graph generation.
  174487             : 
  174488             :           \warning This function can return unexpected data members and thus the 
  174489             :                    order and the number of elements is unpredicable and subject 
  174490             :                    to change.
  174491             : 
  174492             :           \returns STL vector of pairs of SgNode* and strings
  174493             :        */
  174494             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  174495             : 
  174496             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  174497             : 
  174498             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  174499             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  174500             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  174501             : 
  174502             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  174503             :                    and subject to change.
  174504             :        */
  174505             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  174506             : 
  174507             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  174508             : 
  174509             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  174510             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  174511             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  174512             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  174513             : 
  174514             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  174515             : 
  174516             :           \returns long
  174517             :        */
  174518             :           virtual long getChildIndex( SgNode* childNode ) const override;
  174519             : 
  174520             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  174521             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  174522             :       /* \brief Constructor for use by AST File I/O Mechanism
  174523             : 
  174524             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  174525             :           which obtained via fast binary file I/O from disk.
  174526             :        */
  174527             :        // SgEmptyDeclaration( SgEmptyDeclarationStorageClass& source );
  174528             : 
  174529             : 
  174530             : 
  174531             : 
  174532             : 
  174533             :  // JH (10/24/2005): methods added to support the ast file IO
  174534             :     private:
  174535             : 
  174536             :       /* name AST Memory Allocation Support Functions
  174537             :           \brief Memory allocations support....
  174538             : 
  174539             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  174540             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  174541             :           and support the AST File I/O Mechanism.
  174542             :        */
  174543             :       /* */
  174544             : 
  174545             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  174546             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  174547             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  174548             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  174549             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  174550             :           a correspinding one in the AST_FILE_IO class!
  174551             :        */
  174552             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  174553             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  174554             :       /* \brief Typedef used for low level memory access.
  174555             :        */
  174556             :        // typedef unsigned char* TestType;
  174557             : 
  174558             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  174559             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  174560             :       /* \brief Typedef used to hold memory addresses as values.
  174561             :        */
  174562             :        // typedef unsigned long  AddressType;
  174563             : 
  174564             : 
  174565             : 
  174566             :        // necessary, to have direct access to the p_freepointer and the private methods !
  174567             :       /*! \brief friend class declaration to support AST File I/O */
  174568             :           friend class AST_FILE_IO;
  174569             : 
  174570             :       /*! \brief friend class declaration to support AST File I/O */
  174571             :           friend class SgEmptyDeclarationStorageClass;
  174572             : 
  174573             :       /*! \brief friend class declaration to support AST File I/O */
  174574             :           friend class AstSpecificDataManagingClass;
  174575             : 
  174576             :       /*! \brief friend class declaration to support AST File I/O */
  174577             :           friend class AstSpecificDataManagingClassStorageClass;
  174578             :     public:
  174579             :       /*! \brief IR node constructor to support AST File I/O */
  174580             :           SgEmptyDeclaration( const SgEmptyDeclarationStorageClass& source );
  174581             : 
  174582             :  // private: // JJW hack
  174583             :        /*
  174584             :           name AST Memory Allocation Support Variables
  174585             :           Memory allocations support variables 
  174586             : 
  174587             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  174588             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  174589             :           and support the AST File I/O Mechanism.
  174590             :        */
  174591             :       /* */
  174592             : 
  174593             :     public:
  174594             : 
  174595             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  174596             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  174597             :       // virtual SgNode* addRegExpAttribute();
  174598             :       /*! \brief Support for AST matching using regular expression.
  174599             : 
  174600             :           This support is incomplete and the subject of current research to define 
  174601             :           RegEx trees to support inexact matching.
  174602             :        */
  174603             :           SgEmptyDeclaration* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  174604             : 
  174605             : // *** COMMON CODE SECTION ENDS HERE ***
  174606             : 
  174607             : 
  174608             : // End of memberFunctionString
  174609             : // Start of memberFunctionString
  174610             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  174611             : 
  174612             :      // the generated cast function
  174613             :      // friend ROSE_DLL_API SgEmptyDeclaration* isSgEmptyDeclaration ( SgNode* s );
  174614             : 
  174615             :           typedef SgDeclarationStatement base_node_type;
  174616             : 
  174617             : 
  174618             : // End of memberFunctionString
  174619             : // Start of memberFunctionString
  174620             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  174621             : 
  174622             :           void post_construction_initialization() override;
  174623             : 
  174624             : 
  174625             : // End of memberFunctionString
  174626             : 
  174627             : 
  174628             :      public: 
  174629             :          virtual ~SgEmptyDeclaration();
  174630             : 
  174631             : 
  174632             :      public: 
  174633             :          SgEmptyDeclaration(Sg_File_Info* startOfConstruct ); 
  174634             :          SgEmptyDeclaration(); 
  174635             : 
  174636             :     protected:
  174637             : 
  174638             :     friend struct Rose::Traits::generated::describe_node_t<SgEmptyDeclaration>;
  174639             : 
  174640             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174641             : 
  174642             : 
  174643             :    };
  174644             : #endif
  174645             : 
  174646             : // postdeclarations for SgEmptyDeclaration
  174647             : 
  174648             : /* #line 174649 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174649             : 
  174650             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  174651             : 
  174652             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174653             : 
  174654             : 
  174655             : /* #line 174656 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174656             : 
  174657             : 
  174658             : 
  174659             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174660             : 
  174661             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  174662             : //      This code is automatically generated for each 
  174663             : //      terminal and non-terminal within the defined 
  174664             : //      grammar.  There is a simple way to change the 
  174665             : //      code to fix bugs etc.  See the ROSE README file
  174666             : //      for directions.
  174667             : 
  174668             : // tps: (02/22/2010): Adding DLL export requirements
  174669             : #include "rosedll.h"
  174670             : 
  174671             : // predeclarations for SgExprStatement
  174672             : 
  174673             : /* #line 174674 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174674             : 
  174675             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  174676             : 
  174677             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  174678             : 
  174679             : #if 1
  174680             : // Class Definition for SgExprStatement
  174681             : class ROSE_DLL_API SgExprStatement  : public SgStatement
  174682             :    {
  174683             :      public:
  174684             : 
  174685             : 
  174686             : /* #line 174687 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  174687             : 
  174688             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  174689             : // Start of memberFunctionString
  174690             : /* #line 2240 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  174691             : 
  174692             : 
  174693             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  174694             :           virtual unsigned int cfgIndexForEnd() const override;
  174695             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  174696             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  174697             : #endif
  174698             : 
  174699             :        // DQ (12/6/2006): Added to support general replace functions.
  174700             :           int replace_expression(SgExpression *,SgExpression *) override;
  174701             : 
  174702             : #if ALT_FIXUP_COPY
  174703             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  174704             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  174705             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  174706             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  174707             : #else
  174708             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  174709             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  174710             : #endif
  174711             : 
  174712             : 
  174713             : 
  174714             : // End of memberFunctionString
  174715             : // Start of memberFunctionString
  174716             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  174717             : 
  174718             : // *** COMMON CODE SECTION BEGINS HERE ***
  174719             : 
  174720             :     public:
  174721             : 
  174722             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  174723             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  174724             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  174725             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  174726             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  174727             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  174728             : 
  174729             :       /*! \brief returns a string representing the class name */
  174730             :           virtual std::string class_name() const override;
  174731             : 
  174732             :       /*! \brief returns new style SageIII enum values */
  174733             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  174734             : 
  174735             :       /*! \brief static variant value */
  174736             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  174737             :        // static const VariantT static_variant = V_SgExprStatement;
  174738             :           enum { static_variant = V_SgExprStatement };
  174739             : 
  174740             :        /* the generated cast function */
  174741             :       /*! \brief Casts pointer from base class to derived class */
  174742             :           ROSE_DLL_API friend       SgExprStatement* isSgExprStatement(       SgNode * s );
  174743             : 
  174744             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  174745             :           ROSE_DLL_API friend const SgExprStatement* isSgExprStatement( const SgNode * s );
  174746             : 
  174747             :      // ******************************************
  174748             :      // * Memory Pool / New / Delete
  174749             :      // ******************************************
  174750             : 
  174751             :      public:
  174752             :           /// \private
  174753             :           static const unsigned pool_size; //
  174754             :           /// \private
  174755             :           static std::vector<unsigned char *> pools; //
  174756             :           /// \private
  174757             :           static SgExprStatement * next_node; // 
  174758             : 
  174759             :           /// \private
  174760             :           static unsigned long initializeStorageClassArray(SgExprStatementStorageClass *); //
  174761             : 
  174762             :           /// \private
  174763             :           static void clearMemoryPool(); //
  174764             :           static void deleteMemoryPool(); //
  174765             : 
  174766             :           /// \private
  174767             :           static void extendMemoryPoolForFileIO(); //
  174768             : 
  174769             :           /// \private
  174770             :           static SgExprStatement * getPointerFromGlobalIndex(unsigned long); //
  174771             :           /// \private
  174772             :           static SgExprStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  174773             : 
  174774             :           /// \private
  174775             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  174776             :           /// \private
  174777             :           static void resetValidFreepointers(); //
  174778             :           /// \private
  174779             :           static unsigned long getNumberOfLastValidPointer(); //
  174780             : 
  174781             : 
  174782             : #if defined(INLINE_FUNCTIONS)
  174783             :       /*! \brief returns pointer to newly allocated IR node */
  174784             :           inline void *operator new (size_t size);
  174785             : #else
  174786             :       /*! \brief returns pointer to newly allocated IR node */
  174787             :           void *operator new (size_t size);
  174788             : #endif
  174789             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  174790             :           void operator delete (void* pointer, size_t size);
  174791             : 
  174792             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  174793        4417 :           void operator delete (void* pointer)
  174794             :              {
  174795             :             // This is the generated delete operator...
  174796        4417 :                SgExprStatement::operator delete (pointer,sizeof(SgExprStatement));
  174797             :              }
  174798             : 
  174799             :       /*! \brief Returns the total number of IR nodes of this type */
  174800             :           static size_t numberOfNodes();
  174801             : 
  174802             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  174803             :           static size_t memoryUsage();
  174804             : 
  174805             :       // End of scope which started in IR nodes specific code 
  174806             :       /* */
  174807             : 
  174808             :       /* name Internal Functions
  174809             :           \brief Internal functions ... incomplete-documentation
  174810             : 
  174811             :           These functions have been made public as part of the design, but they are suggested for internal use 
  174812             :           or by particularly knowledgeable users for specialized tools or applications.
  174813             : 
  174814             :           \internal We could not make these private because they are required by user for special purposes. And 
  174815             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  174816             :          
  174817             :        */
  174818             : 
  174819             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  174820             :        // overridden in every class by *generated* implementation
  174821             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  174822             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  174823             :        // MS: 06/28/02 container of names of variables or container indices 
  174824             :        // used used in the traversal to access AST successor nodes
  174825             :        // overridden in every class by *generated* implementation
  174826             :       /*! \brief container of names of variables or container indices used used in the traversal
  174827             :           to access AST successor nodes overridden in every class by *generated* implementation */
  174828             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  174829             : 
  174830             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  174831             :        // than all the vector copies. The implementation for these functions is generated for each class.
  174832             :       /*! \brief return number of children in the traversal successor list */
  174833             :           virtual size_t get_numberOfTraversalSuccessors() override;
  174834             :       /*! \brief index-based access to traversal successors by index number */
  174835             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  174836             :       /*! \brief index-based access to traversal successors by child node */
  174837             :           virtual size_t get_childIndex(SgNode *child) override;
  174838             : 
  174839             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  174840             :        // MS: 08/16/2002 method for generating RTI information
  174841             :       /*! \brief return C++ Runtime-Time-Information */
  174842             :           virtual RTIReturnType roseRTI() override;
  174843             : #endif
  174844             :       /* */
  174845             : 
  174846             : 
  174847             : 
  174848             :       /* name Deprecated Functions
  174849             :           \brief Deprecated functions ... incomplete-documentation
  174850             : 
  174851             :           These functions have been deprecated from use.
  174852             :        */
  174853             :       /* */
  174854             : 
  174855             :       /*! returns a C style string (char*) representing the class name */
  174856             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  174857             : 
  174858             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  174859             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  174860             : #if 0
  174861             :       /*! returns old style Sage II enum values */
  174862             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  174863             :       /*! returns old style Sage II enum values */
  174864             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  174865             : #endif
  174866             :       /* */
  174867             : 
  174868             : 
  174869             : 
  174870             : 
  174871             :      public:
  174872             :       /* name Traversal Support Functions
  174873             :           \brief Traversal support functions ... incomplete-documentation
  174874             : 
  174875             :           These functions have been made public as part of the design, but they are suggested for internal use 
  174876             :           or by particularly knowledgable users for specialized tools or applications.
  174877             :        */
  174878             :       /* */
  174879             : 
  174880             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  174881             :        // (inferior to ROSE traversal mechanism, experimental).
  174882             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  174883             :        */
  174884             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  174885             : 
  174886             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  174887             :       /*! \brief support for the classic visitor pattern done in GoF */
  174888             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  174889             : 
  174890             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  174891             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  174892             :        */
  174893             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  174894             : 
  174895             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  174896             :        */
  174897             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  174898             : 
  174899             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  174900             :        // This traversal helps support internal tools that call static member functions.
  174901             :        // note: this function operates on the memory pools.
  174902             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  174903             :        */
  174904             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  174905             :       /* */
  174906             : 
  174907             : 
  174908             :      public:
  174909             :       /* name Memory Allocation Functions
  174910             :           \brief Memory allocations functions ... incomplete-documentation
  174911             : 
  174912             :           These functions have been made public as part of the design, but they are suggested for internal use 
  174913             :           or by particularly knowledgable users for specialized tools or applications.
  174914             :        */
  174915             :       /* */
  174916             : 
  174917             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  174918             : 
  174919             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  174920             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  174921             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  174922             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  174923             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  174924             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  174925             :           being used with the AST File I/O mechanism.
  174926             :        */
  174927             :           virtual bool isInMemoryPool() override;
  174928             : 
  174929             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  174930             : 
  174931             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  174932             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  174933             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  174934             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  174935             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  174936             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  174937             :           being used with the AST File I/O mechanism.
  174938             :        */
  174939             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  174940             : 
  174941             :       // DQ (4/30/2006): Modified to be a const function.
  174942             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  174943             : 
  174944             :           This functions is part of general support for many possible tools to operate 
  174945             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  174946             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  174947             :           less than the set of pointers used by the AST file I/O. This is part of
  174948             :           work implemented by Andreas, and support tools such as the AST graph generation.
  174949             : 
  174950             :           \warning This function can return unexpected data members and thus the 
  174951             :                    order and the number of elements is unpredicable and subject 
  174952             :                    to change.
  174953             : 
  174954             :           \returns STL vector of pairs of SgNode* and strings
  174955             :        */
  174956             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  174957             : 
  174958             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  174959             : 
  174960             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  174961             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  174962             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  174963             : 
  174964             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  174965             :                    and subject to change.
  174966             :        */
  174967             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  174968             : 
  174969             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  174970             : 
  174971             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  174972             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  174973             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  174974             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  174975             : 
  174976             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  174977             : 
  174978             :           \returns long
  174979             :        */
  174980             :           virtual long getChildIndex( SgNode* childNode ) const override;
  174981             : 
  174982             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  174983             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  174984             :       /* \brief Constructor for use by AST File I/O Mechanism
  174985             : 
  174986             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  174987             :           which obtained via fast binary file I/O from disk.
  174988             :        */
  174989             :        // SgExprStatement( SgExprStatementStorageClass& source );
  174990             : 
  174991             : 
  174992             : 
  174993             : 
  174994             : 
  174995             :  // JH (10/24/2005): methods added to support the ast file IO
  174996             :     private:
  174997             : 
  174998             :       /* name AST Memory Allocation Support Functions
  174999             :           \brief Memory allocations support....
  175000             : 
  175001             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  175002             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  175003             :           and support the AST File I/O Mechanism.
  175004             :        */
  175005             :       /* */
  175006             : 
  175007             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  175008             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  175009             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  175010             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  175011             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  175012             :           a correspinding one in the AST_FILE_IO class!
  175013             :        */
  175014             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  175015             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  175016             :       /* \brief Typedef used for low level memory access.
  175017             :        */
  175018             :        // typedef unsigned char* TestType;
  175019             : 
  175020             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  175021             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  175022             :       /* \brief Typedef used to hold memory addresses as values.
  175023             :        */
  175024             :        // typedef unsigned long  AddressType;
  175025             : 
  175026             : 
  175027             : 
  175028             :        // necessary, to have direct access to the p_freepointer and the private methods !
  175029             :       /*! \brief friend class declaration to support AST File I/O */
  175030             :           friend class AST_FILE_IO;
  175031             : 
  175032             :       /*! \brief friend class declaration to support AST File I/O */
  175033             :           friend class SgExprStatementStorageClass;
  175034             : 
  175035             :       /*! \brief friend class declaration to support AST File I/O */
  175036             :           friend class AstSpecificDataManagingClass;
  175037             : 
  175038             :       /*! \brief friend class declaration to support AST File I/O */
  175039             :           friend class AstSpecificDataManagingClassStorageClass;
  175040             :     public:
  175041             :       /*! \brief IR node constructor to support AST File I/O */
  175042             :           SgExprStatement( const SgExprStatementStorageClass& source );
  175043             : 
  175044             :  // private: // JJW hack
  175045             :        /*
  175046             :           name AST Memory Allocation Support Variables
  175047             :           Memory allocations support variables 
  175048             : 
  175049             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  175050             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  175051             :           and support the AST File I/O Mechanism.
  175052             :        */
  175053             :       /* */
  175054             : 
  175055             :     public:
  175056             : 
  175057             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  175058             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  175059             :       // virtual SgNode* addRegExpAttribute();
  175060             :       /*! \brief Support for AST matching using regular expression.
  175061             : 
  175062             :           This support is incomplete and the subject of current research to define 
  175063             :           RegEx trees to support inexact matching.
  175064             :        */
  175065             :           SgExprStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  175066             : 
  175067             : // *** COMMON CODE SECTION ENDS HERE ***
  175068             : 
  175069             : 
  175070             : // End of memberFunctionString
  175071             : // Start of memberFunctionString
  175072             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  175073             : 
  175074             :      // the generated cast function
  175075             :      // friend ROSE_DLL_API SgExprStatement* isSgExprStatement ( SgNode* s );
  175076             : 
  175077             :           typedef SgStatement base_node_type;
  175078             : 
  175079             : 
  175080             : // End of memberFunctionString
  175081             : // Start of memberFunctionString
  175082             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  175083             : 
  175084             :           void post_construction_initialization() override;
  175085             : 
  175086             : 
  175087             : // End of memberFunctionString
  175088             : 
  175089             :      public: 
  175090             :          SgExpression* get_expression() const;
  175091             :          void set_expression(SgExpression* expression);
  175092             : 
  175093             : 
  175094             :      public: 
  175095             :          virtual ~SgExprStatement();
  175096             : 
  175097             : 
  175098             :      public: 
  175099             :          SgExprStatement(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  175100             :          SgExprStatement(SgExpression* expression); 
  175101             : 
  175102             :     protected:
  175103             : // Start of memberFunctionString
  175104             : SgExpression* p_expression;
  175105             :           
  175106             : // End of memberFunctionString
  175107             : 
  175108             :     friend struct Rose::Traits::generated::describe_node_t<SgExprStatement>;
  175109             :     friend struct Rose::Traits::generated::describe_field_t<SgExprStatement, SgExpression*,&SgExprStatement::p_expression>;
  175110             : 
  175111             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175112             : 
  175113             : 
  175114             :    };
  175115             : #endif
  175116             : 
  175117             : // postdeclarations for SgExprStatement
  175118             : 
  175119             : /* #line 175120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175120             : 
  175121             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  175122             : 
  175123             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175124             : 
  175125             : 
  175126             : /* #line 175127 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175127             : 
  175128             : 
  175129             : 
  175130             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175131             : 
  175132             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  175133             : //      This code is automatically generated for each 
  175134             : //      terminal and non-terminal within the defined 
  175135             : //      grammar.  There is a simple way to change the 
  175136             : //      code to fix bugs etc.  See the ROSE README file
  175137             : //      for directions.
  175138             : 
  175139             : // tps: (02/22/2010): Adding DLL export requirements
  175140             : #include "rosedll.h"
  175141             : 
  175142             : // predeclarations for SgLabelStatement
  175143             : 
  175144             : /* #line 175145 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175145             : 
  175146             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  175147             : 
  175148             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175149             : 
  175150             : #if 1
  175151             : // Class Definition for SgLabelStatement
  175152             : class ROSE_DLL_API SgLabelStatement  : public SgStatement
  175153             :    {
  175154             :      public:
  175155             : 
  175156             : 
  175157             : /* #line 175158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175158             : 
  175159             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  175160             : // Start of memberFunctionString
  175161             : /* #line 2264 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  175162             : 
  175163             : 
  175164             :      // DQ (1/15/2018): Need to support this member function now that we traverse the statement of the label statement.
  175165             :         protected:
  175166             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  175167             : 
  175168             :         public:
  175169             : 
  175170             :        // DQ (10/20/2004): This is not part of a uniform interface for all statements
  175171             :        // so it is not a particularly useful interface within a minimalist design.
  175172             :        // Thus I have deprecated this function, users should use the get_label()
  175173             :        // function instead.
  175174             :           SgName get_name() const ROSE_DEPRECATED_FUNCTION;
  175175             : 
  175176             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  175177             :        // DQ (1/7/2018): Fix this to reflect design change in AST required to represent labels as compound statements.
  175178             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  175179             : 
  175180             :           virtual unsigned int cfgIndexForEnd() const override;
  175181             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  175182             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  175183             : #endif
  175184             : 
  175185             :        // DQ (2/10/2007): Marked as virtual to be consistent
  175186             :           virtual SgSymbol* get_symbol_from_symbol_table() const override;
  175187             : 
  175188             : #if ALT_FIXUP_COPY
  175189             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  175190             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  175191             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  175192             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  175193             : #else
  175194             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  175195             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  175196             : #endif
  175197             : 
  175198             :       //! Support for where the scope is explicitly required
  175199             :           virtual bool hasExplicitScope() const override;
  175200             : 
  175201             :        // DQ (8/21/2013): Added function to support calling get_type() from a SgDeclarationStatement so that the
  175202             :        // template low-level symbol table support function would compile cleanly.  Note that it is an error to
  175203             :        // call this function and it is not a virtual function that will cause derived class versions to be called
  175204             :        // where appropriate (and it is not always appropriate, e.g a SgNamespaceDeclaration has no assocated SgType).
  175205             :           SgType* get_type() const;
  175206             : 
  175207             : 
  175208             : 
  175209             : // End of memberFunctionString
  175210             : // Start of memberFunctionString
  175211             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  175212             : 
  175213             : // *** COMMON CODE SECTION BEGINS HERE ***
  175214             : 
  175215             :     public:
  175216             : 
  175217             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  175218             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  175219             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  175220             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  175221             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  175222             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  175223             : 
  175224             :       /*! \brief returns a string representing the class name */
  175225             :           virtual std::string class_name() const override;
  175226             : 
  175227             :       /*! \brief returns new style SageIII enum values */
  175228             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  175229             : 
  175230             :       /*! \brief static variant value */
  175231             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  175232             :        // static const VariantT static_variant = V_SgLabelStatement;
  175233             :           enum { static_variant = V_SgLabelStatement };
  175234             : 
  175235             :        /* the generated cast function */
  175236             :       /*! \brief Casts pointer from base class to derived class */
  175237             :           ROSE_DLL_API friend       SgLabelStatement* isSgLabelStatement(       SgNode * s );
  175238             : 
  175239             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  175240             :           ROSE_DLL_API friend const SgLabelStatement* isSgLabelStatement( const SgNode * s );
  175241             : 
  175242             :      // ******************************************
  175243             :      // * Memory Pool / New / Delete
  175244             :      // ******************************************
  175245             : 
  175246             :      public:
  175247             :           /// \private
  175248             :           static const unsigned pool_size; //
  175249             :           /// \private
  175250             :           static std::vector<unsigned char *> pools; //
  175251             :           /// \private
  175252             :           static SgLabelStatement * next_node; // 
  175253             : 
  175254             :           /// \private
  175255             :           static unsigned long initializeStorageClassArray(SgLabelStatementStorageClass *); //
  175256             : 
  175257             :           /// \private
  175258             :           static void clearMemoryPool(); //
  175259             :           static void deleteMemoryPool(); //
  175260             : 
  175261             :           /// \private
  175262             :           static void extendMemoryPoolForFileIO(); //
  175263             : 
  175264             :           /// \private
  175265             :           static SgLabelStatement * getPointerFromGlobalIndex(unsigned long); //
  175266             :           /// \private
  175267             :           static SgLabelStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  175268             : 
  175269             :           /// \private
  175270             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  175271             :           /// \private
  175272             :           static void resetValidFreepointers(); //
  175273             :           /// \private
  175274             :           static unsigned long getNumberOfLastValidPointer(); //
  175275             : 
  175276             : 
  175277             : #if defined(INLINE_FUNCTIONS)
  175278             :       /*! \brief returns pointer to newly allocated IR node */
  175279             :           inline void *operator new (size_t size);
  175280             : #else
  175281             :       /*! \brief returns pointer to newly allocated IR node */
  175282             :           void *operator new (size_t size);
  175283             : #endif
  175284             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  175285             :           void operator delete (void* pointer, size_t size);
  175286             : 
  175287             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  175288           0 :           void operator delete (void* pointer)
  175289             :              {
  175290             :             // This is the generated delete operator...
  175291           0 :                SgLabelStatement::operator delete (pointer,sizeof(SgLabelStatement));
  175292             :              }
  175293             : 
  175294             :       /*! \brief Returns the total number of IR nodes of this type */
  175295             :           static size_t numberOfNodes();
  175296             : 
  175297             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  175298             :           static size_t memoryUsage();
  175299             : 
  175300             :       // End of scope which started in IR nodes specific code 
  175301             :       /* */
  175302             : 
  175303             :       /* name Internal Functions
  175304             :           \brief Internal functions ... incomplete-documentation
  175305             : 
  175306             :           These functions have been made public as part of the design, but they are suggested for internal use 
  175307             :           or by particularly knowledgeable users for specialized tools or applications.
  175308             : 
  175309             :           \internal We could not make these private because they are required by user for special purposes. And 
  175310             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  175311             :          
  175312             :        */
  175313             : 
  175314             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  175315             :        // overridden in every class by *generated* implementation
  175316             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  175317             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  175318             :        // MS: 06/28/02 container of names of variables or container indices 
  175319             :        // used used in the traversal to access AST successor nodes
  175320             :        // overridden in every class by *generated* implementation
  175321             :       /*! \brief container of names of variables or container indices used used in the traversal
  175322             :           to access AST successor nodes overridden in every class by *generated* implementation */
  175323             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  175324             : 
  175325             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  175326             :        // than all the vector copies. The implementation for these functions is generated for each class.
  175327             :       /*! \brief return number of children in the traversal successor list */
  175328             :           virtual size_t get_numberOfTraversalSuccessors() override;
  175329             :       /*! \brief index-based access to traversal successors by index number */
  175330             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  175331             :       /*! \brief index-based access to traversal successors by child node */
  175332             :           virtual size_t get_childIndex(SgNode *child) override;
  175333             : 
  175334             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  175335             :        // MS: 08/16/2002 method for generating RTI information
  175336             :       /*! \brief return C++ Runtime-Time-Information */
  175337             :           virtual RTIReturnType roseRTI() override;
  175338             : #endif
  175339             :       /* */
  175340             : 
  175341             : 
  175342             : 
  175343             :       /* name Deprecated Functions
  175344             :           \brief Deprecated functions ... incomplete-documentation
  175345             : 
  175346             :           These functions have been deprecated from use.
  175347             :        */
  175348             :       /* */
  175349             : 
  175350             :       /*! returns a C style string (char*) representing the class name */
  175351             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  175352             : 
  175353             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  175354             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  175355             : #if 0
  175356             :       /*! returns old style Sage II enum values */
  175357             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  175358             :       /*! returns old style Sage II enum values */
  175359             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  175360             : #endif
  175361             :       /* */
  175362             : 
  175363             : 
  175364             : 
  175365             : 
  175366             :      public:
  175367             :       /* name Traversal Support Functions
  175368             :           \brief Traversal support functions ... incomplete-documentation
  175369             : 
  175370             :           These functions have been made public as part of the design, but they are suggested for internal use 
  175371             :           or by particularly knowledgable users for specialized tools or applications.
  175372             :        */
  175373             :       /* */
  175374             : 
  175375             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  175376             :        // (inferior to ROSE traversal mechanism, experimental).
  175377             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  175378             :        */
  175379             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  175380             : 
  175381             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  175382             :       /*! \brief support for the classic visitor pattern done in GoF */
  175383             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  175384             : 
  175385             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  175386             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  175387             :        */
  175388             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  175389             : 
  175390             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  175391             :        */
  175392             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  175393             : 
  175394             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  175395             :        // This traversal helps support internal tools that call static member functions.
  175396             :        // note: this function operates on the memory pools.
  175397             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  175398             :        */
  175399             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  175400             :       /* */
  175401             : 
  175402             : 
  175403             :      public:
  175404             :       /* name Memory Allocation Functions
  175405             :           \brief Memory allocations functions ... incomplete-documentation
  175406             : 
  175407             :           These functions have been made public as part of the design, but they are suggested for internal use 
  175408             :           or by particularly knowledgable users for specialized tools or applications.
  175409             :        */
  175410             :       /* */
  175411             : 
  175412             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  175413             : 
  175414             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  175415             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  175416             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  175417             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  175418             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  175419             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  175420             :           being used with the AST File I/O mechanism.
  175421             :        */
  175422             :           virtual bool isInMemoryPool() override;
  175423             : 
  175424             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  175425             : 
  175426             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  175427             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  175428             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  175429             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  175430             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  175431             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  175432             :           being used with the AST File I/O mechanism.
  175433             :        */
  175434             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  175435             : 
  175436             :       // DQ (4/30/2006): Modified to be a const function.
  175437             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  175438             : 
  175439             :           This functions is part of general support for many possible tools to operate 
  175440             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  175441             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  175442             :           less than the set of pointers used by the AST file I/O. This is part of
  175443             :           work implemented by Andreas, and support tools such as the AST graph generation.
  175444             : 
  175445             :           \warning This function can return unexpected data members and thus the 
  175446             :                    order and the number of elements is unpredicable and subject 
  175447             :                    to change.
  175448             : 
  175449             :           \returns STL vector of pairs of SgNode* and strings
  175450             :        */
  175451             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  175452             : 
  175453             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  175454             : 
  175455             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  175456             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  175457             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  175458             : 
  175459             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  175460             :                    and subject to change.
  175461             :        */
  175462             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  175463             : 
  175464             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  175465             : 
  175466             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  175467             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  175468             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  175469             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  175470             : 
  175471             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  175472             : 
  175473             :           \returns long
  175474             :        */
  175475             :           virtual long getChildIndex( SgNode* childNode ) const override;
  175476             : 
  175477             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  175478             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  175479             :       /* \brief Constructor for use by AST File I/O Mechanism
  175480             : 
  175481             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  175482             :           which obtained via fast binary file I/O from disk.
  175483             :        */
  175484             :        // SgLabelStatement( SgLabelStatementStorageClass& source );
  175485             : 
  175486             : 
  175487             : 
  175488             : 
  175489             : 
  175490             :  // JH (10/24/2005): methods added to support the ast file IO
  175491             :     private:
  175492             : 
  175493             :       /* name AST Memory Allocation Support Functions
  175494             :           \brief Memory allocations support....
  175495             : 
  175496             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  175497             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  175498             :           and support the AST File I/O Mechanism.
  175499             :        */
  175500             :       /* */
  175501             : 
  175502             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  175503             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  175504             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  175505             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  175506             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  175507             :           a correspinding one in the AST_FILE_IO class!
  175508             :        */
  175509             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  175510             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  175511             :       /* \brief Typedef used for low level memory access.
  175512             :        */
  175513             :        // typedef unsigned char* TestType;
  175514             : 
  175515             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  175516             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  175517             :       /* \brief Typedef used to hold memory addresses as values.
  175518             :        */
  175519             :        // typedef unsigned long  AddressType;
  175520             : 
  175521             : 
  175522             : 
  175523             :        // necessary, to have direct access to the p_freepointer and the private methods !
  175524             :       /*! \brief friend class declaration to support AST File I/O */
  175525             :           friend class AST_FILE_IO;
  175526             : 
  175527             :       /*! \brief friend class declaration to support AST File I/O */
  175528             :           friend class SgLabelStatementStorageClass;
  175529             : 
  175530             :       /*! \brief friend class declaration to support AST File I/O */
  175531             :           friend class AstSpecificDataManagingClass;
  175532             : 
  175533             :       /*! \brief friend class declaration to support AST File I/O */
  175534             :           friend class AstSpecificDataManagingClassStorageClass;
  175535             :     public:
  175536             :       /*! \brief IR node constructor to support AST File I/O */
  175537             :           SgLabelStatement( const SgLabelStatementStorageClass& source );
  175538             : 
  175539             :  // private: // JJW hack
  175540             :        /*
  175541             :           name AST Memory Allocation Support Variables
  175542             :           Memory allocations support variables 
  175543             : 
  175544             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  175545             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  175546             :           and support the AST File I/O Mechanism.
  175547             :        */
  175548             :       /* */
  175549             : 
  175550             :     public:
  175551             : 
  175552             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  175553             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  175554             :       // virtual SgNode* addRegExpAttribute();
  175555             :       /*! \brief Support for AST matching using regular expression.
  175556             : 
  175557             :           This support is incomplete and the subject of current research to define 
  175558             :           RegEx trees to support inexact matching.
  175559             :        */
  175560             :           SgLabelStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  175561             : 
  175562             : // *** COMMON CODE SECTION ENDS HERE ***
  175563             : 
  175564             : 
  175565             : // End of memberFunctionString
  175566             : // Start of memberFunctionString
  175567             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  175568             : 
  175569             :      // the generated cast function
  175570             :      // friend ROSE_DLL_API SgLabelStatement* isSgLabelStatement ( SgNode* s );
  175571             : 
  175572             :           typedef SgStatement base_node_type;
  175573             : 
  175574             : 
  175575             : // End of memberFunctionString
  175576             : // Start of memberFunctionString
  175577             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  175578             : 
  175579             :           void post_construction_initialization() override;
  175580             : 
  175581             : 
  175582             : // End of memberFunctionString
  175583             : 
  175584             :      public: 
  175585             :          SgName get_label() const;
  175586             :          void set_label(SgName label);
  175587             : 
  175588             :      public: 
  175589             :          SgScopeStatement* get_scope() const override /* (getDataAccessFunctionPrototypeString) */;
  175590             :          void set_scope(SgScopeStatement* scope) override /* (getDataAccessFunctionPrototypeString) */;
  175591             : 
  175592             :      public: 
  175593             :          SgStatement* get_statement() const;
  175594             :          void set_statement(SgStatement* statement);
  175595             : 
  175596             :      public: 
  175597             :          bool get_gnu_extension_unused() const;
  175598             :          void set_gnu_extension_unused(bool gnu_extension_unused);
  175599             : 
  175600             : 
  175601             :      public: 
  175602             :          virtual ~SgLabelStatement();
  175603             : 
  175604             : 
  175605             :      public: 
  175606             :          SgLabelStatement(Sg_File_Info* startOfConstruct , SgName label = "", SgStatement* statement = NULL); 
  175607             :          SgLabelStatement(SgName label, SgStatement* statement); 
  175608             : 
  175609             :     protected:
  175610             : // Start of memberFunctionString
  175611             : SgName p_label;
  175612             :           
  175613             : // End of memberFunctionString
  175614             : // Start of memberFunctionString
  175615             : SgScopeStatement* p_scope;
  175616             :           
  175617             : // End of memberFunctionString
  175618             : // Start of memberFunctionString
  175619             : SgStatement* p_statement;
  175620             :           
  175621             : // End of memberFunctionString
  175622             : // Start of memberFunctionString
  175623             : bool p_gnu_extension_unused;
  175624             :           
  175625             : // End of memberFunctionString
  175626             : 
  175627             :     friend struct Rose::Traits::generated::describe_node_t<SgLabelStatement>;
  175628             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelStatement, SgName,&SgLabelStatement::p_label>;
  175629             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelStatement, SgScopeStatement*,&SgLabelStatement::p_scope>;
  175630             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelStatement, SgStatement*,&SgLabelStatement::p_statement>;
  175631             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelStatement, bool,&SgLabelStatement::p_gnu_extension_unused>;
  175632             : 
  175633             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175634             : 
  175635             : 
  175636             :    };
  175637             : #endif
  175638             : 
  175639             : // postdeclarations for SgLabelStatement
  175640             : 
  175641             : /* #line 175642 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175642             : 
  175643             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  175644             : 
  175645             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175646             : 
  175647             : 
  175648             : /* #line 175649 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175649             : 
  175650             : 
  175651             : 
  175652             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175653             : 
  175654             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  175655             : //      This code is automatically generated for each 
  175656             : //      terminal and non-terminal within the defined 
  175657             : //      grammar.  There is a simple way to change the 
  175658             : //      code to fix bugs etc.  See the ROSE README file
  175659             : //      for directions.
  175660             : 
  175661             : // tps: (02/22/2010): Adding DLL export requirements
  175662             : #include "rosedll.h"
  175663             : 
  175664             : // predeclarations for SgCaseOptionStmt
  175665             : 
  175666             : /* #line 175667 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175667             : 
  175668             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  175669             : 
  175670             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  175671             : 
  175672             : #if 1
  175673             : // Class Definition for SgCaseOptionStmt
  175674             : class ROSE_DLL_API SgCaseOptionStmt  : public SgStatement
  175675             :    {
  175676             :      public:
  175677             : 
  175678             : 
  175679             : /* #line 175680 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  175680             : 
  175681             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  175682             : // Start of memberFunctionString
  175683             : /* #line 2414 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  175684             : 
  175685             :         protected:
  175686             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  175687             : 
  175688             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  175689             :           virtual unsigned int cfgIndexForEnd() const override;
  175690             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  175691             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  175692             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  175693             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  175694             : #endif
  175695             : 
  175696             : #if ALT_FIXUP_COPY
  175697             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  175698             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  175699             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  175700             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  175701             : #else
  175702             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  175703             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  175704             : #endif
  175705             : 
  175706             : 
  175707             : 
  175708             : // End of memberFunctionString
  175709             : // Start of memberFunctionString
  175710             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  175711             : 
  175712             : // *** COMMON CODE SECTION BEGINS HERE ***
  175713             : 
  175714             :     public:
  175715             : 
  175716             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  175717             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  175718             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  175719             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  175720             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  175721             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  175722             : 
  175723             :       /*! \brief returns a string representing the class name */
  175724             :           virtual std::string class_name() const override;
  175725             : 
  175726             :       /*! \brief returns new style SageIII enum values */
  175727             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  175728             : 
  175729             :       /*! \brief static variant value */
  175730             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  175731             :        // static const VariantT static_variant = V_SgCaseOptionStmt;
  175732             :           enum { static_variant = V_SgCaseOptionStmt };
  175733             : 
  175734             :        /* the generated cast function */
  175735             :       /*! \brief Casts pointer from base class to derived class */
  175736             :           ROSE_DLL_API friend       SgCaseOptionStmt* isSgCaseOptionStmt(       SgNode * s );
  175737             : 
  175738             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  175739             :           ROSE_DLL_API friend const SgCaseOptionStmt* isSgCaseOptionStmt( const SgNode * s );
  175740             : 
  175741             :      // ******************************************
  175742             :      // * Memory Pool / New / Delete
  175743             :      // ******************************************
  175744             : 
  175745             :      public:
  175746             :           /// \private
  175747             :           static const unsigned pool_size; //
  175748             :           /// \private
  175749             :           static std::vector<unsigned char *> pools; //
  175750             :           /// \private
  175751             :           static SgCaseOptionStmt * next_node; // 
  175752             : 
  175753             :           /// \private
  175754             :           static unsigned long initializeStorageClassArray(SgCaseOptionStmtStorageClass *); //
  175755             : 
  175756             :           /// \private
  175757             :           static void clearMemoryPool(); //
  175758             :           static void deleteMemoryPool(); //
  175759             : 
  175760             :           /// \private
  175761             :           static void extendMemoryPoolForFileIO(); //
  175762             : 
  175763             :           /// \private
  175764             :           static SgCaseOptionStmt * getPointerFromGlobalIndex(unsigned long); //
  175765             :           /// \private
  175766             :           static SgCaseOptionStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  175767             : 
  175768             :           /// \private
  175769             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  175770             :           /// \private
  175771             :           static void resetValidFreepointers(); //
  175772             :           /// \private
  175773             :           static unsigned long getNumberOfLastValidPointer(); //
  175774             : 
  175775             : 
  175776             : #if defined(INLINE_FUNCTIONS)
  175777             :       /*! \brief returns pointer to newly allocated IR node */
  175778             :           inline void *operator new (size_t size);
  175779             : #else
  175780             :       /*! \brief returns pointer to newly allocated IR node */
  175781             :           void *operator new (size_t size);
  175782             : #endif
  175783             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  175784             :           void operator delete (void* pointer, size_t size);
  175785             : 
  175786             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  175787           0 :           void operator delete (void* pointer)
  175788             :              {
  175789             :             // This is the generated delete operator...
  175790           0 :                SgCaseOptionStmt::operator delete (pointer,sizeof(SgCaseOptionStmt));
  175791             :              }
  175792             : 
  175793             :       /*! \brief Returns the total number of IR nodes of this type */
  175794             :           static size_t numberOfNodes();
  175795             : 
  175796             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  175797             :           static size_t memoryUsage();
  175798             : 
  175799             :       // End of scope which started in IR nodes specific code 
  175800             :       /* */
  175801             : 
  175802             :       /* name Internal Functions
  175803             :           \brief Internal functions ... incomplete-documentation
  175804             : 
  175805             :           These functions have been made public as part of the design, but they are suggested for internal use 
  175806             :           or by particularly knowledgeable users for specialized tools or applications.
  175807             : 
  175808             :           \internal We could not make these private because they are required by user for special purposes. And 
  175809             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  175810             :          
  175811             :        */
  175812             : 
  175813             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  175814             :        // overridden in every class by *generated* implementation
  175815             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  175816             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  175817             :        // MS: 06/28/02 container of names of variables or container indices 
  175818             :        // used used in the traversal to access AST successor nodes
  175819             :        // overridden in every class by *generated* implementation
  175820             :       /*! \brief container of names of variables or container indices used used in the traversal
  175821             :           to access AST successor nodes overridden in every class by *generated* implementation */
  175822             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  175823             : 
  175824             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  175825             :        // than all the vector copies. The implementation for these functions is generated for each class.
  175826             :       /*! \brief return number of children in the traversal successor list */
  175827             :           virtual size_t get_numberOfTraversalSuccessors() override;
  175828             :       /*! \brief index-based access to traversal successors by index number */
  175829             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  175830             :       /*! \brief index-based access to traversal successors by child node */
  175831             :           virtual size_t get_childIndex(SgNode *child) override;
  175832             : 
  175833             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  175834             :        // MS: 08/16/2002 method for generating RTI information
  175835             :       /*! \brief return C++ Runtime-Time-Information */
  175836             :           virtual RTIReturnType roseRTI() override;
  175837             : #endif
  175838             :       /* */
  175839             : 
  175840             : 
  175841             : 
  175842             :       /* name Deprecated Functions
  175843             :           \brief Deprecated functions ... incomplete-documentation
  175844             : 
  175845             :           These functions have been deprecated from use.
  175846             :        */
  175847             :       /* */
  175848             : 
  175849             :       /*! returns a C style string (char*) representing the class name */
  175850             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  175851             : 
  175852             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  175853             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  175854             : #if 0
  175855             :       /*! returns old style Sage II enum values */
  175856             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  175857             :       /*! returns old style Sage II enum values */
  175858             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  175859             : #endif
  175860             :       /* */
  175861             : 
  175862             : 
  175863             : 
  175864             : 
  175865             :      public:
  175866             :       /* name Traversal Support Functions
  175867             :           \brief Traversal support functions ... incomplete-documentation
  175868             : 
  175869             :           These functions have been made public as part of the design, but they are suggested for internal use 
  175870             :           or by particularly knowledgable users for specialized tools or applications.
  175871             :        */
  175872             :       /* */
  175873             : 
  175874             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  175875             :        // (inferior to ROSE traversal mechanism, experimental).
  175876             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  175877             :        */
  175878             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  175879             : 
  175880             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  175881             :       /*! \brief support for the classic visitor pattern done in GoF */
  175882             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  175883             : 
  175884             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  175885             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  175886             :        */
  175887             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  175888             : 
  175889             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  175890             :        */
  175891             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  175892             : 
  175893             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  175894             :        // This traversal helps support internal tools that call static member functions.
  175895             :        // note: this function operates on the memory pools.
  175896             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  175897             :        */
  175898             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  175899             :       /* */
  175900             : 
  175901             : 
  175902             :      public:
  175903             :       /* name Memory Allocation Functions
  175904             :           \brief Memory allocations functions ... incomplete-documentation
  175905             : 
  175906             :           These functions have been made public as part of the design, but they are suggested for internal use 
  175907             :           or by particularly knowledgable users for specialized tools or applications.
  175908             :        */
  175909             :       /* */
  175910             : 
  175911             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  175912             : 
  175913             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  175914             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  175915             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  175916             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  175917             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  175918             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  175919             :           being used with the AST File I/O mechanism.
  175920             :        */
  175921             :           virtual bool isInMemoryPool() override;
  175922             : 
  175923             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  175924             : 
  175925             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  175926             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  175927             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  175928             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  175929             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  175930             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  175931             :           being used with the AST File I/O mechanism.
  175932             :        */
  175933             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  175934             : 
  175935             :       // DQ (4/30/2006): Modified to be a const function.
  175936             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  175937             : 
  175938             :           This functions is part of general support for many possible tools to operate 
  175939             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  175940             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  175941             :           less than the set of pointers used by the AST file I/O. This is part of
  175942             :           work implemented by Andreas, and support tools such as the AST graph generation.
  175943             : 
  175944             :           \warning This function can return unexpected data members and thus the 
  175945             :                    order and the number of elements is unpredicable and subject 
  175946             :                    to change.
  175947             : 
  175948             :           \returns STL vector of pairs of SgNode* and strings
  175949             :        */
  175950             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  175951             : 
  175952             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  175953             : 
  175954             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  175955             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  175956             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  175957             : 
  175958             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  175959             :                    and subject to change.
  175960             :        */
  175961             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  175962             : 
  175963             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  175964             : 
  175965             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  175966             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  175967             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  175968             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  175969             : 
  175970             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  175971             : 
  175972             :           \returns long
  175973             :        */
  175974             :           virtual long getChildIndex( SgNode* childNode ) const override;
  175975             : 
  175976             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  175977             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  175978             :       /* \brief Constructor for use by AST File I/O Mechanism
  175979             : 
  175980             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  175981             :           which obtained via fast binary file I/O from disk.
  175982             :        */
  175983             :        // SgCaseOptionStmt( SgCaseOptionStmtStorageClass& source );
  175984             : 
  175985             : 
  175986             : 
  175987             : 
  175988             : 
  175989             :  // JH (10/24/2005): methods added to support the ast file IO
  175990             :     private:
  175991             : 
  175992             :       /* name AST Memory Allocation Support Functions
  175993             :           \brief Memory allocations support....
  175994             : 
  175995             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  175996             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  175997             :           and support the AST File I/O Mechanism.
  175998             :        */
  175999             :       /* */
  176000             : 
  176001             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  176002             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  176003             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  176004             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  176005             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  176006             :           a correspinding one in the AST_FILE_IO class!
  176007             :        */
  176008             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  176009             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  176010             :       /* \brief Typedef used for low level memory access.
  176011             :        */
  176012             :        // typedef unsigned char* TestType;
  176013             : 
  176014             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  176015             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  176016             :       /* \brief Typedef used to hold memory addresses as values.
  176017             :        */
  176018             :        // typedef unsigned long  AddressType;
  176019             : 
  176020             : 
  176021             : 
  176022             :        // necessary, to have direct access to the p_freepointer and the private methods !
  176023             :       /*! \brief friend class declaration to support AST File I/O */
  176024             :           friend class AST_FILE_IO;
  176025             : 
  176026             :       /*! \brief friend class declaration to support AST File I/O */
  176027             :           friend class SgCaseOptionStmtStorageClass;
  176028             : 
  176029             :       /*! \brief friend class declaration to support AST File I/O */
  176030             :           friend class AstSpecificDataManagingClass;
  176031             : 
  176032             :       /*! \brief friend class declaration to support AST File I/O */
  176033             :           friend class AstSpecificDataManagingClassStorageClass;
  176034             :     public:
  176035             :       /*! \brief IR node constructor to support AST File I/O */
  176036             :           SgCaseOptionStmt( const SgCaseOptionStmtStorageClass& source );
  176037             : 
  176038             :  // private: // JJW hack
  176039             :        /*
  176040             :           name AST Memory Allocation Support Variables
  176041             :           Memory allocations support variables 
  176042             : 
  176043             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  176044             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  176045             :           and support the AST File I/O Mechanism.
  176046             :        */
  176047             :       /* */
  176048             : 
  176049             :     public:
  176050             : 
  176051             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  176052             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  176053             :       // virtual SgNode* addRegExpAttribute();
  176054             :       /*! \brief Support for AST matching using regular expression.
  176055             : 
  176056             :           This support is incomplete and the subject of current research to define 
  176057             :           RegEx trees to support inexact matching.
  176058             :        */
  176059             :           SgCaseOptionStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  176060             : 
  176061             : // *** COMMON CODE SECTION ENDS HERE ***
  176062             : 
  176063             : 
  176064             : // End of memberFunctionString
  176065             : // Start of memberFunctionString
  176066             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  176067             : 
  176068             :      // the generated cast function
  176069             :      // friend ROSE_DLL_API SgCaseOptionStmt* isSgCaseOptionStmt ( SgNode* s );
  176070             : 
  176071             :           typedef SgStatement base_node_type;
  176072             : 
  176073             : 
  176074             : // End of memberFunctionString
  176075             : // Start of memberFunctionString
  176076             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  176077             : 
  176078             :           void post_construction_initialization() override;
  176079             : 
  176080             : 
  176081             : // End of memberFunctionString
  176082             : 
  176083             :      public: 
  176084             :          SgExpression* get_key() const;
  176085             :          void set_key(SgExpression* key);
  176086             : 
  176087             :      public: 
  176088             :          SgStatement* get_body() const;
  176089             :          void set_body(SgStatement* body);
  176090             : 
  176091             :      public: 
  176092             :          SgExpression* get_key_range_end() const;
  176093             :          void set_key_range_end(SgExpression* key_range_end);
  176094             : 
  176095             :      public: 
  176096             :          std::string get_case_construct_name() const;
  176097             :          void set_case_construct_name(std::string case_construct_name);
  176098             : 
  176099             : 
  176100             :      public: 
  176101             :          virtual ~SgCaseOptionStmt();
  176102             : 
  176103             : 
  176104             :      public: 
  176105             :          SgCaseOptionStmt(Sg_File_Info* startOfConstruct , SgExpression* key = NULL, SgStatement* body = NULL); 
  176106             :          SgCaseOptionStmt(SgExpression* key, SgStatement* body); 
  176107             : 
  176108             :     protected:
  176109             : // Start of memberFunctionString
  176110             : SgExpression* p_key;
  176111             :           
  176112             : // End of memberFunctionString
  176113             : // Start of memberFunctionString
  176114             : SgStatement* p_body;
  176115             :           
  176116             : // End of memberFunctionString
  176117             : // Start of memberFunctionString
  176118             : SgExpression* p_key_range_end;
  176119             :           
  176120             : // End of memberFunctionString
  176121             : // Start of memberFunctionString
  176122             : std::string p_case_construct_name;
  176123             :           
  176124             : // End of memberFunctionString
  176125             : 
  176126             :     friend struct Rose::Traits::generated::describe_node_t<SgCaseOptionStmt>;
  176127             :     friend struct Rose::Traits::generated::describe_field_t<SgCaseOptionStmt, SgExpression*,&SgCaseOptionStmt::p_key>;
  176128             :     friend struct Rose::Traits::generated::describe_field_t<SgCaseOptionStmt, SgStatement*,&SgCaseOptionStmt::p_body>;
  176129             :     friend struct Rose::Traits::generated::describe_field_t<SgCaseOptionStmt, SgExpression*,&SgCaseOptionStmt::p_key_range_end>;
  176130             :     friend struct Rose::Traits::generated::describe_field_t<SgCaseOptionStmt, std::string,&SgCaseOptionStmt::p_case_construct_name>;
  176131             : 
  176132             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176133             : 
  176134             : 
  176135             :    };
  176136             : #endif
  176137             : 
  176138             : // postdeclarations for SgCaseOptionStmt
  176139             : 
  176140             : /* #line 176141 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176141             : 
  176142             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  176143             : 
  176144             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176145             : 
  176146             : 
  176147             : /* #line 176148 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176148             : 
  176149             : 
  176150             : 
  176151             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176152             : 
  176153             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  176154             : //      This code is automatically generated for each 
  176155             : //      terminal and non-terminal within the defined 
  176156             : //      grammar.  There is a simple way to change the 
  176157             : //      code to fix bugs etc.  See the ROSE README file
  176158             : //      for directions.
  176159             : 
  176160             : // tps: (02/22/2010): Adding DLL export requirements
  176161             : #include "rosedll.h"
  176162             : 
  176163             : // predeclarations for SgTryStmt
  176164             : 
  176165             : /* #line 176166 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176166             : 
  176167             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  176168             : 
  176169             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176170             : 
  176171             : #if 1
  176172             : // Class Definition for SgTryStmt
  176173             : class ROSE_DLL_API SgTryStmt  : public SgStatement
  176174             :    {
  176175             :      public:
  176176             : 
  176177             : 
  176178             : /* #line 176179 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176179             : 
  176180             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  176181             : // Start of memberFunctionString
  176182             : /* #line 2438 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  176183             : 
  176184             : 
  176185             :           SgStatementPtrList & get_catch_statement_seq();
  176186             :           const SgStatementPtrList & get_catch_statement_seq() const;
  176187             : 
  176188             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  176189             : 
  176190             :      public:
  176191             :           virtual void append_catch_statement  ( SgStatement* element );
  176192             :           virtual void prepend_catch_statement ( SgStatement* element );
  176193             : 
  176194             :      public:
  176195             :        // New functions added
  176196             :        // void append_catch_statement  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  176197             :        // void prepend_catch_statement ( const SgStatementPtrList::iterator & list, SgStatement* element );
  176198             : 
  176199             :        // void insert_catch_statement  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  176200             : 
  176201             : 
  176202             :      public:
  176203             : 
  176204             : 
  176205             : 
  176206             : 
  176207             : #if 0
  176208             :           SgStatement *get_next (int&) const;
  176209             : #endif
  176210             : 
  176211             :         protected:
  176212             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  176213             : 
  176214             :          public:
  176215             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  176216             :           virtual unsigned int cfgIndexForEnd() const override;
  176217             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  176218             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  176219             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  176220             : #endif
  176221             : 
  176222             : #if ALT_FIXUP_COPY
  176223             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  176224             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  176225             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  176226             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  176227             : #else
  176228             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  176229             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  176230             : #endif
  176231             : 
  176232             : 
  176233             : 
  176234             : // End of memberFunctionString
  176235             : // Start of memberFunctionString
  176236             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  176237             : 
  176238             : // *** COMMON CODE SECTION BEGINS HERE ***
  176239             : 
  176240             :     public:
  176241             : 
  176242             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  176243             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  176244             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  176245             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  176246             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  176247             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  176248             : 
  176249             :       /*! \brief returns a string representing the class name */
  176250             :           virtual std::string class_name() const override;
  176251             : 
  176252             :       /*! \brief returns new style SageIII enum values */
  176253             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  176254             : 
  176255             :       /*! \brief static variant value */
  176256             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  176257             :        // static const VariantT static_variant = V_SgTryStmt;
  176258             :           enum { static_variant = V_SgTryStmt };
  176259             : 
  176260             :        /* the generated cast function */
  176261             :       /*! \brief Casts pointer from base class to derived class */
  176262             :           ROSE_DLL_API friend       SgTryStmt* isSgTryStmt(       SgNode * s );
  176263             : 
  176264             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  176265             :           ROSE_DLL_API friend const SgTryStmt* isSgTryStmt( const SgNode * s );
  176266             : 
  176267             :      // ******************************************
  176268             :      // * Memory Pool / New / Delete
  176269             :      // ******************************************
  176270             : 
  176271             :      public:
  176272             :           /// \private
  176273             :           static const unsigned pool_size; //
  176274             :           /// \private
  176275             :           static std::vector<unsigned char *> pools; //
  176276             :           /// \private
  176277             :           static SgTryStmt * next_node; // 
  176278             : 
  176279             :           /// \private
  176280             :           static unsigned long initializeStorageClassArray(SgTryStmtStorageClass *); //
  176281             : 
  176282             :           /// \private
  176283             :           static void clearMemoryPool(); //
  176284             :           static void deleteMemoryPool(); //
  176285             : 
  176286             :           /// \private
  176287             :           static void extendMemoryPoolForFileIO(); //
  176288             : 
  176289             :           /// \private
  176290             :           static SgTryStmt * getPointerFromGlobalIndex(unsigned long); //
  176291             :           /// \private
  176292             :           static SgTryStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  176293             : 
  176294             :           /// \private
  176295             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  176296             :           /// \private
  176297             :           static void resetValidFreepointers(); //
  176298             :           /// \private
  176299             :           static unsigned long getNumberOfLastValidPointer(); //
  176300             : 
  176301             : 
  176302             : #if defined(INLINE_FUNCTIONS)
  176303             :       /*! \brief returns pointer to newly allocated IR node */
  176304             :           inline void *operator new (size_t size);
  176305             : #else
  176306             :       /*! \brief returns pointer to newly allocated IR node */
  176307             :           void *operator new (size_t size);
  176308             : #endif
  176309             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  176310             :           void operator delete (void* pointer, size_t size);
  176311             : 
  176312             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  176313         108 :           void operator delete (void* pointer)
  176314             :              {
  176315             :             // This is the generated delete operator...
  176316         108 :                SgTryStmt::operator delete (pointer,sizeof(SgTryStmt));
  176317             :              }
  176318             : 
  176319             :       /*! \brief Returns the total number of IR nodes of this type */
  176320             :           static size_t numberOfNodes();
  176321             : 
  176322             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  176323             :           static size_t memoryUsage();
  176324             : 
  176325             :       // End of scope which started in IR nodes specific code 
  176326             :       /* */
  176327             : 
  176328             :       /* name Internal Functions
  176329             :           \brief Internal functions ... incomplete-documentation
  176330             : 
  176331             :           These functions have been made public as part of the design, but they are suggested for internal use 
  176332             :           or by particularly knowledgeable users for specialized tools or applications.
  176333             : 
  176334             :           \internal We could not make these private because they are required by user for special purposes. And 
  176335             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  176336             :          
  176337             :        */
  176338             : 
  176339             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  176340             :        // overridden in every class by *generated* implementation
  176341             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  176342             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  176343             :        // MS: 06/28/02 container of names of variables or container indices 
  176344             :        // used used in the traversal to access AST successor nodes
  176345             :        // overridden in every class by *generated* implementation
  176346             :       /*! \brief container of names of variables or container indices used used in the traversal
  176347             :           to access AST successor nodes overridden in every class by *generated* implementation */
  176348             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  176349             : 
  176350             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  176351             :        // than all the vector copies. The implementation for these functions is generated for each class.
  176352             :       /*! \brief return number of children in the traversal successor list */
  176353             :           virtual size_t get_numberOfTraversalSuccessors() override;
  176354             :       /*! \brief index-based access to traversal successors by index number */
  176355             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  176356             :       /*! \brief index-based access to traversal successors by child node */
  176357             :           virtual size_t get_childIndex(SgNode *child) override;
  176358             : 
  176359             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  176360             :        // MS: 08/16/2002 method for generating RTI information
  176361             :       /*! \brief return C++ Runtime-Time-Information */
  176362             :           virtual RTIReturnType roseRTI() override;
  176363             : #endif
  176364             :       /* */
  176365             : 
  176366             : 
  176367             : 
  176368             :       /* name Deprecated Functions
  176369             :           \brief Deprecated functions ... incomplete-documentation
  176370             : 
  176371             :           These functions have been deprecated from use.
  176372             :        */
  176373             :       /* */
  176374             : 
  176375             :       /*! returns a C style string (char*) representing the class name */
  176376             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  176377             : 
  176378             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  176379             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  176380             : #if 0
  176381             :       /*! returns old style Sage II enum values */
  176382             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  176383             :       /*! returns old style Sage II enum values */
  176384             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  176385             : #endif
  176386             :       /* */
  176387             : 
  176388             : 
  176389             : 
  176390             : 
  176391             :      public:
  176392             :       /* name Traversal Support Functions
  176393             :           \brief Traversal support functions ... incomplete-documentation
  176394             : 
  176395             :           These functions have been made public as part of the design, but they are suggested for internal use 
  176396             :           or by particularly knowledgable users for specialized tools or applications.
  176397             :        */
  176398             :       /* */
  176399             : 
  176400             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  176401             :        // (inferior to ROSE traversal mechanism, experimental).
  176402             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  176403             :        */
  176404             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  176405             : 
  176406             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  176407             :       /*! \brief support for the classic visitor pattern done in GoF */
  176408             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  176409             : 
  176410             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  176411             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  176412             :        */
  176413             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  176414             : 
  176415             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  176416             :        */
  176417             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  176418             : 
  176419             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  176420             :        // This traversal helps support internal tools that call static member functions.
  176421             :        // note: this function operates on the memory pools.
  176422             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  176423             :        */
  176424             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  176425             :       /* */
  176426             : 
  176427             : 
  176428             :      public:
  176429             :       /* name Memory Allocation Functions
  176430             :           \brief Memory allocations functions ... incomplete-documentation
  176431             : 
  176432             :           These functions have been made public as part of the design, but they are suggested for internal use 
  176433             :           or by particularly knowledgable users for specialized tools or applications.
  176434             :        */
  176435             :       /* */
  176436             : 
  176437             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  176438             : 
  176439             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  176440             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  176441             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  176442             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  176443             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  176444             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  176445             :           being used with the AST File I/O mechanism.
  176446             :        */
  176447             :           virtual bool isInMemoryPool() override;
  176448             : 
  176449             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  176450             : 
  176451             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  176452             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  176453             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  176454             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  176455             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  176456             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  176457             :           being used with the AST File I/O mechanism.
  176458             :        */
  176459             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  176460             : 
  176461             :       // DQ (4/30/2006): Modified to be a const function.
  176462             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  176463             : 
  176464             :           This functions is part of general support for many possible tools to operate 
  176465             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  176466             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  176467             :           less than the set of pointers used by the AST file I/O. This is part of
  176468             :           work implemented by Andreas, and support tools such as the AST graph generation.
  176469             : 
  176470             :           \warning This function can return unexpected data members and thus the 
  176471             :                    order and the number of elements is unpredicable and subject 
  176472             :                    to change.
  176473             : 
  176474             :           \returns STL vector of pairs of SgNode* and strings
  176475             :        */
  176476             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  176477             : 
  176478             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  176479             : 
  176480             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  176481             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  176482             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  176483             : 
  176484             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  176485             :                    and subject to change.
  176486             :        */
  176487             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  176488             : 
  176489             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  176490             : 
  176491             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  176492             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  176493             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  176494             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  176495             : 
  176496             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  176497             : 
  176498             :           \returns long
  176499             :        */
  176500             :           virtual long getChildIndex( SgNode* childNode ) const override;
  176501             : 
  176502             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  176503             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  176504             :       /* \brief Constructor for use by AST File I/O Mechanism
  176505             : 
  176506             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  176507             :           which obtained via fast binary file I/O from disk.
  176508             :        */
  176509             :        // SgTryStmt( SgTryStmtStorageClass& source );
  176510             : 
  176511             : 
  176512             : 
  176513             : 
  176514             : 
  176515             :  // JH (10/24/2005): methods added to support the ast file IO
  176516             :     private:
  176517             : 
  176518             :       /* name AST Memory Allocation Support Functions
  176519             :           \brief Memory allocations support....
  176520             : 
  176521             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  176522             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  176523             :           and support the AST File I/O Mechanism.
  176524             :        */
  176525             :       /* */
  176526             : 
  176527             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  176528             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  176529             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  176530             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  176531             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  176532             :           a correspinding one in the AST_FILE_IO class!
  176533             :        */
  176534             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  176535             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  176536             :       /* \brief Typedef used for low level memory access.
  176537             :        */
  176538             :        // typedef unsigned char* TestType;
  176539             : 
  176540             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  176541             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  176542             :       /* \brief Typedef used to hold memory addresses as values.
  176543             :        */
  176544             :        // typedef unsigned long  AddressType;
  176545             : 
  176546             : 
  176547             : 
  176548             :        // necessary, to have direct access to the p_freepointer and the private methods !
  176549             :       /*! \brief friend class declaration to support AST File I/O */
  176550             :           friend class AST_FILE_IO;
  176551             : 
  176552             :       /*! \brief friend class declaration to support AST File I/O */
  176553             :           friend class SgTryStmtStorageClass;
  176554             : 
  176555             :       /*! \brief friend class declaration to support AST File I/O */
  176556             :           friend class AstSpecificDataManagingClass;
  176557             : 
  176558             :       /*! \brief friend class declaration to support AST File I/O */
  176559             :           friend class AstSpecificDataManagingClassStorageClass;
  176560             :     public:
  176561             :       /*! \brief IR node constructor to support AST File I/O */
  176562             :           SgTryStmt( const SgTryStmtStorageClass& source );
  176563             : 
  176564             :  // private: // JJW hack
  176565             :        /*
  176566             :           name AST Memory Allocation Support Variables
  176567             :           Memory allocations support variables 
  176568             : 
  176569             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  176570             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  176571             :           and support the AST File I/O Mechanism.
  176572             :        */
  176573             :       /* */
  176574             : 
  176575             :     public:
  176576             : 
  176577             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  176578             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  176579             :       // virtual SgNode* addRegExpAttribute();
  176580             :       /*! \brief Support for AST matching using regular expression.
  176581             : 
  176582             :           This support is incomplete and the subject of current research to define 
  176583             :           RegEx trees to support inexact matching.
  176584             :        */
  176585             :           SgTryStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  176586             : 
  176587             : // *** COMMON CODE SECTION ENDS HERE ***
  176588             : 
  176589             : 
  176590             : // End of memberFunctionString
  176591             : // Start of memberFunctionString
  176592             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  176593             : 
  176594             :      // the generated cast function
  176595             :      // friend ROSE_DLL_API SgTryStmt* isSgTryStmt ( SgNode* s );
  176596             : 
  176597             :           typedef SgStatement base_node_type;
  176598             : 
  176599             : 
  176600             : // End of memberFunctionString
  176601             : // Start of memberFunctionString
  176602             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  176603             : 
  176604             :           void post_construction_initialization() override;
  176605             : 
  176606             : 
  176607             : // End of memberFunctionString
  176608             : 
  176609             :      public: 
  176610             :          SgStatement* get_body() const;
  176611             :          void set_body(SgStatement* body);
  176612             : 
  176613             :      public: 
  176614             :          SgCatchStatementSeq* get_catch_statement_seq_root() const;
  176615             :          void set_catch_statement_seq_root(SgCatchStatementSeq* catch_statement_seq_root);
  176616             : 
  176617             :      public: 
  176618             :          SgStatement* get_else_body() const;
  176619             :          void set_else_body(SgStatement* else_body);
  176620             : 
  176621             :      public: 
  176622             :          SgStatement* get_finally_body() const;
  176623             :          void set_finally_body(SgStatement* finally_body);
  176624             : 
  176625             : 
  176626             :      public: 
  176627             :          virtual ~SgTryStmt();
  176628             : 
  176629             : 
  176630             :      public: 
  176631             :          SgTryStmt(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  176632             :          SgTryStmt(SgStatement* body); 
  176633             : 
  176634             :     protected:
  176635             : // Start of memberFunctionString
  176636             : SgStatement* p_body;
  176637             :           
  176638             : // End of memberFunctionString
  176639             : // Start of memberFunctionString
  176640             : SgCatchStatementSeq* p_catch_statement_seq_root;
  176641             :           
  176642             : // End of memberFunctionString
  176643             : // Start of memberFunctionString
  176644             : SgStatement* p_else_body;
  176645             :           
  176646             : // End of memberFunctionString
  176647             : // Start of memberFunctionString
  176648             : SgStatement* p_finally_body;
  176649             :           
  176650             : // End of memberFunctionString
  176651             : 
  176652             :     friend struct Rose::Traits::generated::describe_node_t<SgTryStmt>;
  176653             :     friend struct Rose::Traits::generated::describe_field_t<SgTryStmt, SgStatement*,&SgTryStmt::p_body>;
  176654             :     friend struct Rose::Traits::generated::describe_field_t<SgTryStmt, SgCatchStatementSeq*,&SgTryStmt::p_catch_statement_seq_root>;
  176655             :     friend struct Rose::Traits::generated::describe_field_t<SgTryStmt, SgStatement*,&SgTryStmt::p_else_body>;
  176656             :     friend struct Rose::Traits::generated::describe_field_t<SgTryStmt, SgStatement*,&SgTryStmt::p_finally_body>;
  176657             : 
  176658             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176659             : 
  176660             : 
  176661             :    };
  176662             : #endif
  176663             : 
  176664             : // postdeclarations for SgTryStmt
  176665             : 
  176666             : /* #line 176667 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176667             : 
  176668             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  176669             : 
  176670             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176671             : 
  176672             : 
  176673             : /* #line 176674 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176674             : 
  176675             : 
  176676             : 
  176677             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176678             : 
  176679             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  176680             : //      This code is automatically generated for each 
  176681             : //      terminal and non-terminal within the defined 
  176682             : //      grammar.  There is a simple way to change the 
  176683             : //      code to fix bugs etc.  See the ROSE README file
  176684             : //      for directions.
  176685             : 
  176686             : // tps: (02/22/2010): Adding DLL export requirements
  176687             : #include "rosedll.h"
  176688             : 
  176689             : // predeclarations for SgDefaultOptionStmt
  176690             : 
  176691             : /* #line 176692 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176692             : 
  176693             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  176694             : 
  176695             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  176696             : 
  176697             : #if 1
  176698             : // Class Definition for SgDefaultOptionStmt
  176699             : class ROSE_DLL_API SgDefaultOptionStmt  : public SgStatement
  176700             :    {
  176701             :      public:
  176702             : 
  176703             : 
  176704             : /* #line 176705 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  176705             : 
  176706             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  176707             : // Start of memberFunctionString
  176708             : /* #line 2506 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  176709             : 
  176710             :        // void post_construction_initialization();
  176711             : #if 0
  176712             :           SgStatement* get_next(int&) const;
  176713             : #endif
  176714             : 
  176715             :         protected:
  176716             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  176717             : 
  176718             :         public:
  176719             : 
  176720             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  176721             :           virtual unsigned int cfgIndexForEnd() const override;
  176722             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  176723             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  176724             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  176725             : #endif
  176726             : 
  176727             : #if ALT_FIXUP_COPY
  176728             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  176729             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  176730             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  176731             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  176732             : #else
  176733             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  176734             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  176735             : #endif
  176736             : 
  176737             : 
  176738             : 
  176739             : // End of memberFunctionString
  176740             : // Start of memberFunctionString
  176741             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  176742             : 
  176743             : // *** COMMON CODE SECTION BEGINS HERE ***
  176744             : 
  176745             :     public:
  176746             : 
  176747             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  176748             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  176749             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  176750             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  176751             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  176752             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  176753             : 
  176754             :       /*! \brief returns a string representing the class name */
  176755             :           virtual std::string class_name() const override;
  176756             : 
  176757             :       /*! \brief returns new style SageIII enum values */
  176758             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  176759             : 
  176760             :       /*! \brief static variant value */
  176761             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  176762             :        // static const VariantT static_variant = V_SgDefaultOptionStmt;
  176763             :           enum { static_variant = V_SgDefaultOptionStmt };
  176764             : 
  176765             :        /* the generated cast function */
  176766             :       /*! \brief Casts pointer from base class to derived class */
  176767             :           ROSE_DLL_API friend       SgDefaultOptionStmt* isSgDefaultOptionStmt(       SgNode * s );
  176768             : 
  176769             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  176770             :           ROSE_DLL_API friend const SgDefaultOptionStmt* isSgDefaultOptionStmt( const SgNode * s );
  176771             : 
  176772             :      // ******************************************
  176773             :      // * Memory Pool / New / Delete
  176774             :      // ******************************************
  176775             : 
  176776             :      public:
  176777             :           /// \private
  176778             :           static const unsigned pool_size; //
  176779             :           /// \private
  176780             :           static std::vector<unsigned char *> pools; //
  176781             :           /// \private
  176782             :           static SgDefaultOptionStmt * next_node; // 
  176783             : 
  176784             :           /// \private
  176785             :           static unsigned long initializeStorageClassArray(SgDefaultOptionStmtStorageClass *); //
  176786             : 
  176787             :           /// \private
  176788             :           static void clearMemoryPool(); //
  176789             :           static void deleteMemoryPool(); //
  176790             : 
  176791             :           /// \private
  176792             :           static void extendMemoryPoolForFileIO(); //
  176793             : 
  176794             :           /// \private
  176795             :           static SgDefaultOptionStmt * getPointerFromGlobalIndex(unsigned long); //
  176796             :           /// \private
  176797             :           static SgDefaultOptionStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  176798             : 
  176799             :           /// \private
  176800             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  176801             :           /// \private
  176802             :           static void resetValidFreepointers(); //
  176803             :           /// \private
  176804             :           static unsigned long getNumberOfLastValidPointer(); //
  176805             : 
  176806             : 
  176807             : #if defined(INLINE_FUNCTIONS)
  176808             :       /*! \brief returns pointer to newly allocated IR node */
  176809             :           inline void *operator new (size_t size);
  176810             : #else
  176811             :       /*! \brief returns pointer to newly allocated IR node */
  176812             :           void *operator new (size_t size);
  176813             : #endif
  176814             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  176815             :           void operator delete (void* pointer, size_t size);
  176816             : 
  176817             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  176818           0 :           void operator delete (void* pointer)
  176819             :              {
  176820             :             // This is the generated delete operator...
  176821           0 :                SgDefaultOptionStmt::operator delete (pointer,sizeof(SgDefaultOptionStmt));
  176822             :              }
  176823             : 
  176824             :       /*! \brief Returns the total number of IR nodes of this type */
  176825             :           static size_t numberOfNodes();
  176826             : 
  176827             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  176828             :           static size_t memoryUsage();
  176829             : 
  176830             :       // End of scope which started in IR nodes specific code 
  176831             :       /* */
  176832             : 
  176833             :       /* name Internal Functions
  176834             :           \brief Internal functions ... incomplete-documentation
  176835             : 
  176836             :           These functions have been made public as part of the design, but they are suggested for internal use 
  176837             :           or by particularly knowledgeable users for specialized tools or applications.
  176838             : 
  176839             :           \internal We could not make these private because they are required by user for special purposes. And 
  176840             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  176841             :          
  176842             :        */
  176843             : 
  176844             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  176845             :        // overridden in every class by *generated* implementation
  176846             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  176847             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  176848             :        // MS: 06/28/02 container of names of variables or container indices 
  176849             :        // used used in the traversal to access AST successor nodes
  176850             :        // overridden in every class by *generated* implementation
  176851             :       /*! \brief container of names of variables or container indices used used in the traversal
  176852             :           to access AST successor nodes overridden in every class by *generated* implementation */
  176853             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  176854             : 
  176855             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  176856             :        // than all the vector copies. The implementation for these functions is generated for each class.
  176857             :       /*! \brief return number of children in the traversal successor list */
  176858             :           virtual size_t get_numberOfTraversalSuccessors() override;
  176859             :       /*! \brief index-based access to traversal successors by index number */
  176860             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  176861             :       /*! \brief index-based access to traversal successors by child node */
  176862             :           virtual size_t get_childIndex(SgNode *child) override;
  176863             : 
  176864             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  176865             :        // MS: 08/16/2002 method for generating RTI information
  176866             :       /*! \brief return C++ Runtime-Time-Information */
  176867             :           virtual RTIReturnType roseRTI() override;
  176868             : #endif
  176869             :       /* */
  176870             : 
  176871             : 
  176872             : 
  176873             :       /* name Deprecated Functions
  176874             :           \brief Deprecated functions ... incomplete-documentation
  176875             : 
  176876             :           These functions have been deprecated from use.
  176877             :        */
  176878             :       /* */
  176879             : 
  176880             :       /*! returns a C style string (char*) representing the class name */
  176881             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  176882             : 
  176883             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  176884             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  176885             : #if 0
  176886             :       /*! returns old style Sage II enum values */
  176887             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  176888             :       /*! returns old style Sage II enum values */
  176889             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  176890             : #endif
  176891             :       /* */
  176892             : 
  176893             : 
  176894             : 
  176895             : 
  176896             :      public:
  176897             :       /* name Traversal Support Functions
  176898             :           \brief Traversal support functions ... incomplete-documentation
  176899             : 
  176900             :           These functions have been made public as part of the design, but they are suggested for internal use 
  176901             :           or by particularly knowledgable users for specialized tools or applications.
  176902             :        */
  176903             :       /* */
  176904             : 
  176905             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  176906             :        // (inferior to ROSE traversal mechanism, experimental).
  176907             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  176908             :        */
  176909             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  176910             : 
  176911             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  176912             :       /*! \brief support for the classic visitor pattern done in GoF */
  176913             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  176914             : 
  176915             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  176916             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  176917             :        */
  176918             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  176919             : 
  176920             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  176921             :        */
  176922             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  176923             : 
  176924             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  176925             :        // This traversal helps support internal tools that call static member functions.
  176926             :        // note: this function operates on the memory pools.
  176927             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  176928             :        */
  176929             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  176930             :       /* */
  176931             : 
  176932             : 
  176933             :      public:
  176934             :       /* name Memory Allocation Functions
  176935             :           \brief Memory allocations functions ... incomplete-documentation
  176936             : 
  176937             :           These functions have been made public as part of the design, but they are suggested for internal use 
  176938             :           or by particularly knowledgable users for specialized tools or applications.
  176939             :        */
  176940             :       /* */
  176941             : 
  176942             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  176943             : 
  176944             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  176945             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  176946             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  176947             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  176948             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  176949             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  176950             :           being used with the AST File I/O mechanism.
  176951             :        */
  176952             :           virtual bool isInMemoryPool() override;
  176953             : 
  176954             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  176955             : 
  176956             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  176957             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  176958             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  176959             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  176960             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  176961             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  176962             :           being used with the AST File I/O mechanism.
  176963             :        */
  176964             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  176965             : 
  176966             :       // DQ (4/30/2006): Modified to be a const function.
  176967             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  176968             : 
  176969             :           This functions is part of general support for many possible tools to operate 
  176970             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  176971             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  176972             :           less than the set of pointers used by the AST file I/O. This is part of
  176973             :           work implemented by Andreas, and support tools such as the AST graph generation.
  176974             : 
  176975             :           \warning This function can return unexpected data members and thus the 
  176976             :                    order and the number of elements is unpredicable and subject 
  176977             :                    to change.
  176978             : 
  176979             :           \returns STL vector of pairs of SgNode* and strings
  176980             :        */
  176981             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  176982             : 
  176983             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  176984             : 
  176985             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  176986             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  176987             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  176988             : 
  176989             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  176990             :                    and subject to change.
  176991             :        */
  176992             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  176993             : 
  176994             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  176995             : 
  176996             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  176997             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  176998             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  176999             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  177000             : 
  177001             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  177002             : 
  177003             :           \returns long
  177004             :        */
  177005             :           virtual long getChildIndex( SgNode* childNode ) const override;
  177006             : 
  177007             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  177008             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177009             :       /* \brief Constructor for use by AST File I/O Mechanism
  177010             : 
  177011             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  177012             :           which obtained via fast binary file I/O from disk.
  177013             :        */
  177014             :        // SgDefaultOptionStmt( SgDefaultOptionStmtStorageClass& source );
  177015             : 
  177016             : 
  177017             : 
  177018             : 
  177019             : 
  177020             :  // JH (10/24/2005): methods added to support the ast file IO
  177021             :     private:
  177022             : 
  177023             :       /* name AST Memory Allocation Support Functions
  177024             :           \brief Memory allocations support....
  177025             : 
  177026             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  177027             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  177028             :           and support the AST File I/O Mechanism.
  177029             :        */
  177030             :       /* */
  177031             : 
  177032             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  177033             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  177034             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  177035             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  177036             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  177037             :           a correspinding one in the AST_FILE_IO class!
  177038             :        */
  177039             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  177040             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177041             :       /* \brief Typedef used for low level memory access.
  177042             :        */
  177043             :        // typedef unsigned char* TestType;
  177044             : 
  177045             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  177046             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177047             :       /* \brief Typedef used to hold memory addresses as values.
  177048             :        */
  177049             :        // typedef unsigned long  AddressType;
  177050             : 
  177051             : 
  177052             : 
  177053             :        // necessary, to have direct access to the p_freepointer and the private methods !
  177054             :       /*! \brief friend class declaration to support AST File I/O */
  177055             :           friend class AST_FILE_IO;
  177056             : 
  177057             :       /*! \brief friend class declaration to support AST File I/O */
  177058             :           friend class SgDefaultOptionStmtStorageClass;
  177059             : 
  177060             :       /*! \brief friend class declaration to support AST File I/O */
  177061             :           friend class AstSpecificDataManagingClass;
  177062             : 
  177063             :       /*! \brief friend class declaration to support AST File I/O */
  177064             :           friend class AstSpecificDataManagingClassStorageClass;
  177065             :     public:
  177066             :       /*! \brief IR node constructor to support AST File I/O */
  177067             :           SgDefaultOptionStmt( const SgDefaultOptionStmtStorageClass& source );
  177068             : 
  177069             :  // private: // JJW hack
  177070             :        /*
  177071             :           name AST Memory Allocation Support Variables
  177072             :           Memory allocations support variables 
  177073             : 
  177074             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  177075             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  177076             :           and support the AST File I/O Mechanism.
  177077             :        */
  177078             :       /* */
  177079             : 
  177080             :     public:
  177081             : 
  177082             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  177083             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  177084             :       // virtual SgNode* addRegExpAttribute();
  177085             :       /*! \brief Support for AST matching using regular expression.
  177086             : 
  177087             :           This support is incomplete and the subject of current research to define 
  177088             :           RegEx trees to support inexact matching.
  177089             :        */
  177090             :           SgDefaultOptionStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  177091             : 
  177092             : // *** COMMON CODE SECTION ENDS HERE ***
  177093             : 
  177094             : 
  177095             : // End of memberFunctionString
  177096             : // Start of memberFunctionString
  177097             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  177098             : 
  177099             :      // the generated cast function
  177100             :      // friend ROSE_DLL_API SgDefaultOptionStmt* isSgDefaultOptionStmt ( SgNode* s );
  177101             : 
  177102             :           typedef SgStatement base_node_type;
  177103             : 
  177104             : 
  177105             : // End of memberFunctionString
  177106             : // Start of memberFunctionString
  177107             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  177108             : 
  177109             :           void post_construction_initialization() override;
  177110             : 
  177111             : 
  177112             : // End of memberFunctionString
  177113             : 
  177114             :      public: 
  177115             :          SgStatement* get_body() const;
  177116             :          void set_body(SgStatement* body);
  177117             : 
  177118             :      public: 
  177119             :          std::string get_default_construct_name() const;
  177120             :          void set_default_construct_name(std::string default_construct_name);
  177121             : 
  177122             : 
  177123             :      public: 
  177124             :          virtual ~SgDefaultOptionStmt();
  177125             : 
  177126             : 
  177127             :      public: 
  177128             :          SgDefaultOptionStmt(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  177129             :          SgDefaultOptionStmt(SgStatement* body); 
  177130             : 
  177131             :     protected:
  177132             : // Start of memberFunctionString
  177133             : SgStatement* p_body;
  177134             :           
  177135             : // End of memberFunctionString
  177136             : // Start of memberFunctionString
  177137             : std::string p_default_construct_name;
  177138             :           
  177139             : // End of memberFunctionString
  177140             : 
  177141             :     friend struct Rose::Traits::generated::describe_node_t<SgDefaultOptionStmt>;
  177142             :     friend struct Rose::Traits::generated::describe_field_t<SgDefaultOptionStmt, SgStatement*,&SgDefaultOptionStmt::p_body>;
  177143             :     friend struct Rose::Traits::generated::describe_field_t<SgDefaultOptionStmt, std::string,&SgDefaultOptionStmt::p_default_construct_name>;
  177144             : 
  177145             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177146             : 
  177147             : 
  177148             :    };
  177149             : #endif
  177150             : 
  177151             : // postdeclarations for SgDefaultOptionStmt
  177152             : 
  177153             : /* #line 177154 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177154             : 
  177155             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  177156             : 
  177157             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177158             : 
  177159             : 
  177160             : /* #line 177161 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177161             : 
  177162             : 
  177163             : 
  177164             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177165             : 
  177166             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  177167             : //      This code is automatically generated for each 
  177168             : //      terminal and non-terminal within the defined 
  177169             : //      grammar.  There is a simple way to change the 
  177170             : //      code to fix bugs etc.  See the ROSE README file
  177171             : //      for directions.
  177172             : 
  177173             : // tps: (02/22/2010): Adding DLL export requirements
  177174             : #include "rosedll.h"
  177175             : 
  177176             : // predeclarations for SgBreakStmt
  177177             : 
  177178             : /* #line 177179 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177179             : 
  177180             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  177181             : 
  177182             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177183             : 
  177184             : #if 1
  177185             : // Class Definition for SgBreakStmt
  177186             : class ROSE_DLL_API SgBreakStmt  : public SgStatement
  177187             :    {
  177188             :      public:
  177189             : 
  177190             : 
  177191             : /* #line 177192 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177192             : 
  177193             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  177194             : // Start of memberFunctionString
  177195             : /* #line 2537 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  177196             : 
  177197             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  177198             :           virtual unsigned int cfgIndexForEnd() const override;
  177199             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  177200             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  177201             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  177202             : #endif
  177203             : 
  177204             : 
  177205             : // End of memberFunctionString
  177206             : // Start of memberFunctionString
  177207             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  177208             : 
  177209             : // *** COMMON CODE SECTION BEGINS HERE ***
  177210             : 
  177211             :     public:
  177212             : 
  177213             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  177214             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  177215             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  177216             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  177217             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  177218             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  177219             : 
  177220             :       /*! \brief returns a string representing the class name */
  177221             :           virtual std::string class_name() const override;
  177222             : 
  177223             :       /*! \brief returns new style SageIII enum values */
  177224             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  177225             : 
  177226             :       /*! \brief static variant value */
  177227             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  177228             :        // static const VariantT static_variant = V_SgBreakStmt;
  177229             :           enum { static_variant = V_SgBreakStmt };
  177230             : 
  177231             :        /* the generated cast function */
  177232             :       /*! \brief Casts pointer from base class to derived class */
  177233             :           ROSE_DLL_API friend       SgBreakStmt* isSgBreakStmt(       SgNode * s );
  177234             : 
  177235             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  177236             :           ROSE_DLL_API friend const SgBreakStmt* isSgBreakStmt( const SgNode * s );
  177237             : 
  177238             :      // ******************************************
  177239             :      // * Memory Pool / New / Delete
  177240             :      // ******************************************
  177241             : 
  177242             :      public:
  177243             :           /// \private
  177244             :           static const unsigned pool_size; //
  177245             :           /// \private
  177246             :           static std::vector<unsigned char *> pools; //
  177247             :           /// \private
  177248             :           static SgBreakStmt * next_node; // 
  177249             : 
  177250             :           /// \private
  177251             :           static unsigned long initializeStorageClassArray(SgBreakStmtStorageClass *); //
  177252             : 
  177253             :           /// \private
  177254             :           static void clearMemoryPool(); //
  177255             :           static void deleteMemoryPool(); //
  177256             : 
  177257             :           /// \private
  177258             :           static void extendMemoryPoolForFileIO(); //
  177259             : 
  177260             :           /// \private
  177261             :           static SgBreakStmt * getPointerFromGlobalIndex(unsigned long); //
  177262             :           /// \private
  177263             :           static SgBreakStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  177264             : 
  177265             :           /// \private
  177266             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  177267             :           /// \private
  177268             :           static void resetValidFreepointers(); //
  177269             :           /// \private
  177270             :           static unsigned long getNumberOfLastValidPointer(); //
  177271             : 
  177272             : 
  177273             : #if defined(INLINE_FUNCTIONS)
  177274             :       /*! \brief returns pointer to newly allocated IR node */
  177275             :           inline void *operator new (size_t size);
  177276             : #else
  177277             :       /*! \brief returns pointer to newly allocated IR node */
  177278             :           void *operator new (size_t size);
  177279             : #endif
  177280             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  177281             :           void operator delete (void* pointer, size_t size);
  177282             : 
  177283             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  177284          60 :           void operator delete (void* pointer)
  177285             :              {
  177286             :             // This is the generated delete operator...
  177287          60 :                SgBreakStmt::operator delete (pointer,sizeof(SgBreakStmt));
  177288             :              }
  177289             : 
  177290             :       /*! \brief Returns the total number of IR nodes of this type */
  177291             :           static size_t numberOfNodes();
  177292             : 
  177293             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  177294             :           static size_t memoryUsage();
  177295             : 
  177296             :       // End of scope which started in IR nodes specific code 
  177297             :       /* */
  177298             : 
  177299             :       /* name Internal Functions
  177300             :           \brief Internal functions ... incomplete-documentation
  177301             : 
  177302             :           These functions have been made public as part of the design, but they are suggested for internal use 
  177303             :           or by particularly knowledgeable users for specialized tools or applications.
  177304             : 
  177305             :           \internal We could not make these private because they are required by user for special purposes. And 
  177306             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  177307             :          
  177308             :        */
  177309             : 
  177310             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  177311             :        // overridden in every class by *generated* implementation
  177312             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  177313             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  177314             :        // MS: 06/28/02 container of names of variables or container indices 
  177315             :        // used used in the traversal to access AST successor nodes
  177316             :        // overridden in every class by *generated* implementation
  177317             :       /*! \brief container of names of variables or container indices used used in the traversal
  177318             :           to access AST successor nodes overridden in every class by *generated* implementation */
  177319             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  177320             : 
  177321             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  177322             :        // than all the vector copies. The implementation for these functions is generated for each class.
  177323             :       /*! \brief return number of children in the traversal successor list */
  177324             :           virtual size_t get_numberOfTraversalSuccessors() override;
  177325             :       /*! \brief index-based access to traversal successors by index number */
  177326             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  177327             :       /*! \brief index-based access to traversal successors by child node */
  177328             :           virtual size_t get_childIndex(SgNode *child) override;
  177329             : 
  177330             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  177331             :        // MS: 08/16/2002 method for generating RTI information
  177332             :       /*! \brief return C++ Runtime-Time-Information */
  177333             :           virtual RTIReturnType roseRTI() override;
  177334             : #endif
  177335             :       /* */
  177336             : 
  177337             : 
  177338             : 
  177339             :       /* name Deprecated Functions
  177340             :           \brief Deprecated functions ... incomplete-documentation
  177341             : 
  177342             :           These functions have been deprecated from use.
  177343             :        */
  177344             :       /* */
  177345             : 
  177346             :       /*! returns a C style string (char*) representing the class name */
  177347             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  177348             : 
  177349             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  177350             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  177351             : #if 0
  177352             :       /*! returns old style Sage II enum values */
  177353             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  177354             :       /*! returns old style Sage II enum values */
  177355             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  177356             : #endif
  177357             :       /* */
  177358             : 
  177359             : 
  177360             : 
  177361             : 
  177362             :      public:
  177363             :       /* name Traversal Support Functions
  177364             :           \brief Traversal support functions ... incomplete-documentation
  177365             : 
  177366             :           These functions have been made public as part of the design, but they are suggested for internal use 
  177367             :           or by particularly knowledgable users for specialized tools or applications.
  177368             :        */
  177369             :       /* */
  177370             : 
  177371             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  177372             :        // (inferior to ROSE traversal mechanism, experimental).
  177373             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  177374             :        */
  177375             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  177376             : 
  177377             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  177378             :       /*! \brief support for the classic visitor pattern done in GoF */
  177379             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  177380             : 
  177381             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  177382             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  177383             :        */
  177384             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  177385             : 
  177386             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  177387             :        */
  177388             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  177389             : 
  177390             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  177391             :        // This traversal helps support internal tools that call static member functions.
  177392             :        // note: this function operates on the memory pools.
  177393             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  177394             :        */
  177395             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  177396             :       /* */
  177397             : 
  177398             : 
  177399             :      public:
  177400             :       /* name Memory Allocation Functions
  177401             :           \brief Memory allocations functions ... incomplete-documentation
  177402             : 
  177403             :           These functions have been made public as part of the design, but they are suggested for internal use 
  177404             :           or by particularly knowledgable users for specialized tools or applications.
  177405             :        */
  177406             :       /* */
  177407             : 
  177408             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  177409             : 
  177410             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  177411             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  177412             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  177413             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  177414             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  177415             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  177416             :           being used with the AST File I/O mechanism.
  177417             :        */
  177418             :           virtual bool isInMemoryPool() override;
  177419             : 
  177420             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  177421             : 
  177422             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  177423             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  177424             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  177425             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  177426             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  177427             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  177428             :           being used with the AST File I/O mechanism.
  177429             :        */
  177430             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  177431             : 
  177432             :       // DQ (4/30/2006): Modified to be a const function.
  177433             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  177434             : 
  177435             :           This functions is part of general support for many possible tools to operate 
  177436             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  177437             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  177438             :           less than the set of pointers used by the AST file I/O. This is part of
  177439             :           work implemented by Andreas, and support tools such as the AST graph generation.
  177440             : 
  177441             :           \warning This function can return unexpected data members and thus the 
  177442             :                    order and the number of elements is unpredicable and subject 
  177443             :                    to change.
  177444             : 
  177445             :           \returns STL vector of pairs of SgNode* and strings
  177446             :        */
  177447             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  177448             : 
  177449             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  177450             : 
  177451             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  177452             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  177453             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  177454             : 
  177455             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  177456             :                    and subject to change.
  177457             :        */
  177458             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  177459             : 
  177460             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  177461             : 
  177462             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  177463             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  177464             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  177465             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  177466             : 
  177467             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  177468             : 
  177469             :           \returns long
  177470             :        */
  177471             :           virtual long getChildIndex( SgNode* childNode ) const override;
  177472             : 
  177473             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  177474             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177475             :       /* \brief Constructor for use by AST File I/O Mechanism
  177476             : 
  177477             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  177478             :           which obtained via fast binary file I/O from disk.
  177479             :        */
  177480             :        // SgBreakStmt( SgBreakStmtStorageClass& source );
  177481             : 
  177482             : 
  177483             : 
  177484             : 
  177485             : 
  177486             :  // JH (10/24/2005): methods added to support the ast file IO
  177487             :     private:
  177488             : 
  177489             :       /* name AST Memory Allocation Support Functions
  177490             :           \brief Memory allocations support....
  177491             : 
  177492             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  177493             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  177494             :           and support the AST File I/O Mechanism.
  177495             :        */
  177496             :       /* */
  177497             : 
  177498             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  177499             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  177500             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  177501             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  177502             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  177503             :           a correspinding one in the AST_FILE_IO class!
  177504             :        */
  177505             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  177506             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177507             :       /* \brief Typedef used for low level memory access.
  177508             :        */
  177509             :        // typedef unsigned char* TestType;
  177510             : 
  177511             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  177512             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177513             :       /* \brief Typedef used to hold memory addresses as values.
  177514             :        */
  177515             :        // typedef unsigned long  AddressType;
  177516             : 
  177517             : 
  177518             : 
  177519             :        // necessary, to have direct access to the p_freepointer and the private methods !
  177520             :       /*! \brief friend class declaration to support AST File I/O */
  177521             :           friend class AST_FILE_IO;
  177522             : 
  177523             :       /*! \brief friend class declaration to support AST File I/O */
  177524             :           friend class SgBreakStmtStorageClass;
  177525             : 
  177526             :       /*! \brief friend class declaration to support AST File I/O */
  177527             :           friend class AstSpecificDataManagingClass;
  177528             : 
  177529             :       /*! \brief friend class declaration to support AST File I/O */
  177530             :           friend class AstSpecificDataManagingClassStorageClass;
  177531             :     public:
  177532             :       /*! \brief IR node constructor to support AST File I/O */
  177533             :           SgBreakStmt( const SgBreakStmtStorageClass& source );
  177534             : 
  177535             :  // private: // JJW hack
  177536             :        /*
  177537             :           name AST Memory Allocation Support Variables
  177538             :           Memory allocations support variables 
  177539             : 
  177540             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  177541             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  177542             :           and support the AST File I/O Mechanism.
  177543             :        */
  177544             :       /* */
  177545             : 
  177546             :     public:
  177547             : 
  177548             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  177549             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  177550             :       // virtual SgNode* addRegExpAttribute();
  177551             :       /*! \brief Support for AST matching using regular expression.
  177552             : 
  177553             :           This support is incomplete and the subject of current research to define 
  177554             :           RegEx trees to support inexact matching.
  177555             :        */
  177556             :           SgBreakStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  177557             : 
  177558             : // *** COMMON CODE SECTION ENDS HERE ***
  177559             : 
  177560             : 
  177561             : // End of memberFunctionString
  177562             : // Start of memberFunctionString
  177563             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  177564             : 
  177565             :      // the generated cast function
  177566             :      // friend ROSE_DLL_API SgBreakStmt* isSgBreakStmt ( SgNode* s );
  177567             : 
  177568             :           typedef SgStatement base_node_type;
  177569             : 
  177570             : 
  177571             : // End of memberFunctionString
  177572             : // Start of memberFunctionString
  177573             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  177574             : 
  177575             :           void post_construction_initialization() override;
  177576             : 
  177577             : 
  177578             : // End of memberFunctionString
  177579             : 
  177580             :      public: 
  177581             :          std::string get_do_string_label() const;
  177582             :          void set_do_string_label(std::string do_string_label);
  177583             : 
  177584             : 
  177585             :      public: 
  177586             :          virtual ~SgBreakStmt();
  177587             : 
  177588             : 
  177589             :      public: 
  177590             :          SgBreakStmt(Sg_File_Info* startOfConstruct ); 
  177591             :          SgBreakStmt(); 
  177592             : 
  177593             :     protected:
  177594             : // Start of memberFunctionString
  177595             : std::string p_do_string_label;
  177596             :           
  177597             : // End of memberFunctionString
  177598             : 
  177599             :     friend struct Rose::Traits::generated::describe_node_t<SgBreakStmt>;
  177600             :     friend struct Rose::Traits::generated::describe_field_t<SgBreakStmt, std::string,&SgBreakStmt::p_do_string_label>;
  177601             : 
  177602             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177603             : 
  177604             : 
  177605             :    };
  177606             : #endif
  177607             : 
  177608             : // postdeclarations for SgBreakStmt
  177609             : 
  177610             : /* #line 177611 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177611             : 
  177612             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  177613             : 
  177614             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177615             : 
  177616             : 
  177617             : /* #line 177618 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177618             : 
  177619             : 
  177620             : 
  177621             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177622             : 
  177623             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  177624             : //      This code is automatically generated for each 
  177625             : //      terminal and non-terminal within the defined 
  177626             : //      grammar.  There is a simple way to change the 
  177627             : //      code to fix bugs etc.  See the ROSE README file
  177628             : //      for directions.
  177629             : 
  177630             : // tps: (02/22/2010): Adding DLL export requirements
  177631             : #include "rosedll.h"
  177632             : 
  177633             : // predeclarations for SgContinueStmt
  177634             : 
  177635             : /* #line 177636 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177636             : 
  177637             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  177638             : 
  177639             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  177640             : 
  177641             : #if 1
  177642             : // Class Definition for SgContinueStmt
  177643             : class ROSE_DLL_API SgContinueStmt  : public SgStatement
  177644             :    {
  177645             :      public:
  177646             : 
  177647             : 
  177648             : /* #line 177649 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  177649             : 
  177650             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  177651             : // Start of memberFunctionString
  177652             : /* #line 2547 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  177653             : 
  177654             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  177655             :           virtual unsigned int cfgIndexForEnd() const override;
  177656             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  177657             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  177658             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  177659             : #endif
  177660             : 
  177661             : 
  177662             : // End of memberFunctionString
  177663             : // Start of memberFunctionString
  177664             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  177665             : 
  177666             : // *** COMMON CODE SECTION BEGINS HERE ***
  177667             : 
  177668             :     public:
  177669             : 
  177670             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  177671             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  177672             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  177673             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  177674             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  177675             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  177676             : 
  177677             :       /*! \brief returns a string representing the class name */
  177678             :           virtual std::string class_name() const override;
  177679             : 
  177680             :       /*! \brief returns new style SageIII enum values */
  177681             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  177682             : 
  177683             :       /*! \brief static variant value */
  177684             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  177685             :        // static const VariantT static_variant = V_SgContinueStmt;
  177686             :           enum { static_variant = V_SgContinueStmt };
  177687             : 
  177688             :        /* the generated cast function */
  177689             :       /*! \brief Casts pointer from base class to derived class */
  177690             :           ROSE_DLL_API friend       SgContinueStmt* isSgContinueStmt(       SgNode * s );
  177691             : 
  177692             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  177693             :           ROSE_DLL_API friend const SgContinueStmt* isSgContinueStmt( const SgNode * s );
  177694             : 
  177695             :      // ******************************************
  177696             :      // * Memory Pool / New / Delete
  177697             :      // ******************************************
  177698             : 
  177699             :      public:
  177700             :           /// \private
  177701             :           static const unsigned pool_size; //
  177702             :           /// \private
  177703             :           static std::vector<unsigned char *> pools; //
  177704             :           /// \private
  177705             :           static SgContinueStmt * next_node; // 
  177706             : 
  177707             :           /// \private
  177708             :           static unsigned long initializeStorageClassArray(SgContinueStmtStorageClass *); //
  177709             : 
  177710             :           /// \private
  177711             :           static void clearMemoryPool(); //
  177712             :           static void deleteMemoryPool(); //
  177713             : 
  177714             :           /// \private
  177715             :           static void extendMemoryPoolForFileIO(); //
  177716             : 
  177717             :           /// \private
  177718             :           static SgContinueStmt * getPointerFromGlobalIndex(unsigned long); //
  177719             :           /// \private
  177720             :           static SgContinueStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  177721             : 
  177722             :           /// \private
  177723             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  177724             :           /// \private
  177725             :           static void resetValidFreepointers(); //
  177726             :           /// \private
  177727             :           static unsigned long getNumberOfLastValidPointer(); //
  177728             : 
  177729             : 
  177730             : #if defined(INLINE_FUNCTIONS)
  177731             :       /*! \brief returns pointer to newly allocated IR node */
  177732             :           inline void *operator new (size_t size);
  177733             : #else
  177734             :       /*! \brief returns pointer to newly allocated IR node */
  177735             :           void *operator new (size_t size);
  177736             : #endif
  177737             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  177738             :           void operator delete (void* pointer, size_t size);
  177739             : 
  177740             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  177741           4 :           void operator delete (void* pointer)
  177742             :              {
  177743             :             // This is the generated delete operator...
  177744           4 :                SgContinueStmt::operator delete (pointer,sizeof(SgContinueStmt));
  177745             :              }
  177746             : 
  177747             :       /*! \brief Returns the total number of IR nodes of this type */
  177748             :           static size_t numberOfNodes();
  177749             : 
  177750             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  177751             :           static size_t memoryUsage();
  177752             : 
  177753             :       // End of scope which started in IR nodes specific code 
  177754             :       /* */
  177755             : 
  177756             :       /* name Internal Functions
  177757             :           \brief Internal functions ... incomplete-documentation
  177758             : 
  177759             :           These functions have been made public as part of the design, but they are suggested for internal use 
  177760             :           or by particularly knowledgeable users for specialized tools or applications.
  177761             : 
  177762             :           \internal We could not make these private because they are required by user for special purposes. And 
  177763             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  177764             :          
  177765             :        */
  177766             : 
  177767             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  177768             :        // overridden in every class by *generated* implementation
  177769             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  177770             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  177771             :        // MS: 06/28/02 container of names of variables or container indices 
  177772             :        // used used in the traversal to access AST successor nodes
  177773             :        // overridden in every class by *generated* implementation
  177774             :       /*! \brief container of names of variables or container indices used used in the traversal
  177775             :           to access AST successor nodes overridden in every class by *generated* implementation */
  177776             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  177777             : 
  177778             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  177779             :        // than all the vector copies. The implementation for these functions is generated for each class.
  177780             :       /*! \brief return number of children in the traversal successor list */
  177781             :           virtual size_t get_numberOfTraversalSuccessors() override;
  177782             :       /*! \brief index-based access to traversal successors by index number */
  177783             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  177784             :       /*! \brief index-based access to traversal successors by child node */
  177785             :           virtual size_t get_childIndex(SgNode *child) override;
  177786             : 
  177787             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  177788             :        // MS: 08/16/2002 method for generating RTI information
  177789             :       /*! \brief return C++ Runtime-Time-Information */
  177790             :           virtual RTIReturnType roseRTI() override;
  177791             : #endif
  177792             :       /* */
  177793             : 
  177794             : 
  177795             : 
  177796             :       /* name Deprecated Functions
  177797             :           \brief Deprecated functions ... incomplete-documentation
  177798             : 
  177799             :           These functions have been deprecated from use.
  177800             :        */
  177801             :       /* */
  177802             : 
  177803             :       /*! returns a C style string (char*) representing the class name */
  177804             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  177805             : 
  177806             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  177807             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  177808             : #if 0
  177809             :       /*! returns old style Sage II enum values */
  177810             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  177811             :       /*! returns old style Sage II enum values */
  177812             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  177813             : #endif
  177814             :       /* */
  177815             : 
  177816             : 
  177817             : 
  177818             : 
  177819             :      public:
  177820             :       /* name Traversal Support Functions
  177821             :           \brief Traversal support functions ... incomplete-documentation
  177822             : 
  177823             :           These functions have been made public as part of the design, but they are suggested for internal use 
  177824             :           or by particularly knowledgable users for specialized tools or applications.
  177825             :        */
  177826             :       /* */
  177827             : 
  177828             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  177829             :        // (inferior to ROSE traversal mechanism, experimental).
  177830             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  177831             :        */
  177832             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  177833             : 
  177834             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  177835             :       /*! \brief support for the classic visitor pattern done in GoF */
  177836             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  177837             : 
  177838             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  177839             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  177840             :        */
  177841             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  177842             : 
  177843             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  177844             :        */
  177845             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  177846             : 
  177847             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  177848             :        // This traversal helps support internal tools that call static member functions.
  177849             :        // note: this function operates on the memory pools.
  177850             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  177851             :        */
  177852             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  177853             :       /* */
  177854             : 
  177855             : 
  177856             :      public:
  177857             :       /* name Memory Allocation Functions
  177858             :           \brief Memory allocations functions ... incomplete-documentation
  177859             : 
  177860             :           These functions have been made public as part of the design, but they are suggested for internal use 
  177861             :           or by particularly knowledgable users for specialized tools or applications.
  177862             :        */
  177863             :       /* */
  177864             : 
  177865             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  177866             : 
  177867             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  177868             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  177869             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  177870             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  177871             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  177872             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  177873             :           being used with the AST File I/O mechanism.
  177874             :        */
  177875             :           virtual bool isInMemoryPool() override;
  177876             : 
  177877             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  177878             : 
  177879             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  177880             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  177881             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  177882             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  177883             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  177884             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  177885             :           being used with the AST File I/O mechanism.
  177886             :        */
  177887             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  177888             : 
  177889             :       // DQ (4/30/2006): Modified to be a const function.
  177890             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  177891             : 
  177892             :           This functions is part of general support for many possible tools to operate 
  177893             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  177894             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  177895             :           less than the set of pointers used by the AST file I/O. This is part of
  177896             :           work implemented by Andreas, and support tools such as the AST graph generation.
  177897             : 
  177898             :           \warning This function can return unexpected data members and thus the 
  177899             :                    order and the number of elements is unpredicable and subject 
  177900             :                    to change.
  177901             : 
  177902             :           \returns STL vector of pairs of SgNode* and strings
  177903             :        */
  177904             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  177905             : 
  177906             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  177907             : 
  177908             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  177909             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  177910             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  177911             : 
  177912             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  177913             :                    and subject to change.
  177914             :        */
  177915             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  177916             : 
  177917             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  177918             : 
  177919             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  177920             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  177921             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  177922             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  177923             : 
  177924             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  177925             : 
  177926             :           \returns long
  177927             :        */
  177928             :           virtual long getChildIndex( SgNode* childNode ) const override;
  177929             : 
  177930             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  177931             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177932             :       /* \brief Constructor for use by AST File I/O Mechanism
  177933             : 
  177934             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  177935             :           which obtained via fast binary file I/O from disk.
  177936             :        */
  177937             :        // SgContinueStmt( SgContinueStmtStorageClass& source );
  177938             : 
  177939             : 
  177940             : 
  177941             : 
  177942             : 
  177943             :  // JH (10/24/2005): methods added to support the ast file IO
  177944             :     private:
  177945             : 
  177946             :       /* name AST Memory Allocation Support Functions
  177947             :           \brief Memory allocations support....
  177948             : 
  177949             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  177950             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  177951             :           and support the AST File I/O Mechanism.
  177952             :        */
  177953             :       /* */
  177954             : 
  177955             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  177956             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  177957             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  177958             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  177959             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  177960             :           a correspinding one in the AST_FILE_IO class!
  177961             :        */
  177962             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  177963             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177964             :       /* \brief Typedef used for low level memory access.
  177965             :        */
  177966             :        // typedef unsigned char* TestType;
  177967             : 
  177968             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  177969             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  177970             :       /* \brief Typedef used to hold memory addresses as values.
  177971             :        */
  177972             :        // typedef unsigned long  AddressType;
  177973             : 
  177974             : 
  177975             : 
  177976             :        // necessary, to have direct access to the p_freepointer and the private methods !
  177977             :       /*! \brief friend class declaration to support AST File I/O */
  177978             :           friend class AST_FILE_IO;
  177979             : 
  177980             :       /*! \brief friend class declaration to support AST File I/O */
  177981             :           friend class SgContinueStmtStorageClass;
  177982             : 
  177983             :       /*! \brief friend class declaration to support AST File I/O */
  177984             :           friend class AstSpecificDataManagingClass;
  177985             : 
  177986             :       /*! \brief friend class declaration to support AST File I/O */
  177987             :           friend class AstSpecificDataManagingClassStorageClass;
  177988             :     public:
  177989             :       /*! \brief IR node constructor to support AST File I/O */
  177990             :           SgContinueStmt( const SgContinueStmtStorageClass& source );
  177991             : 
  177992             :  // private: // JJW hack
  177993             :        /*
  177994             :           name AST Memory Allocation Support Variables
  177995             :           Memory allocations support variables 
  177996             : 
  177997             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  177998             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  177999             :           and support the AST File I/O Mechanism.
  178000             :        */
  178001             :       /* */
  178002             : 
  178003             :     public:
  178004             : 
  178005             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  178006             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  178007             :       // virtual SgNode* addRegExpAttribute();
  178008             :       /*! \brief Support for AST matching using regular expression.
  178009             : 
  178010             :           This support is incomplete and the subject of current research to define 
  178011             :           RegEx trees to support inexact matching.
  178012             :        */
  178013             :           SgContinueStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  178014             : 
  178015             : // *** COMMON CODE SECTION ENDS HERE ***
  178016             : 
  178017             : 
  178018             : // End of memberFunctionString
  178019             : // Start of memberFunctionString
  178020             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  178021             : 
  178022             :      // the generated cast function
  178023             :      // friend ROSE_DLL_API SgContinueStmt* isSgContinueStmt ( SgNode* s );
  178024             : 
  178025             :           typedef SgStatement base_node_type;
  178026             : 
  178027             : 
  178028             : // End of memberFunctionString
  178029             : // Start of memberFunctionString
  178030             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  178031             : 
  178032             :           void post_construction_initialization() override;
  178033             : 
  178034             : 
  178035             : // End of memberFunctionString
  178036             : 
  178037             :      public: 
  178038             :          std::string get_do_string_label() const;
  178039             :          void set_do_string_label(std::string do_string_label);
  178040             : 
  178041             : 
  178042             :      public: 
  178043             :          virtual ~SgContinueStmt();
  178044             : 
  178045             : 
  178046             :      public: 
  178047             :          SgContinueStmt(Sg_File_Info* startOfConstruct ); 
  178048             :          SgContinueStmt(); 
  178049             : 
  178050             :     protected:
  178051             : // Start of memberFunctionString
  178052             : std::string p_do_string_label;
  178053             :           
  178054             : // End of memberFunctionString
  178055             : 
  178056             :     friend struct Rose::Traits::generated::describe_node_t<SgContinueStmt>;
  178057             :     friend struct Rose::Traits::generated::describe_field_t<SgContinueStmt, std::string,&SgContinueStmt::p_do_string_label>;
  178058             : 
  178059             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178060             : 
  178061             : 
  178062             :    };
  178063             : #endif
  178064             : 
  178065             : // postdeclarations for SgContinueStmt
  178066             : 
  178067             : /* #line 178068 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178068             : 
  178069             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  178070             : 
  178071             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178072             : 
  178073             : 
  178074             : /* #line 178075 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178075             : 
  178076             : 
  178077             : 
  178078             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178079             : 
  178080             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  178081             : //      This code is automatically generated for each 
  178082             : //      terminal and non-terminal within the defined 
  178083             : //      grammar.  There is a simple way to change the 
  178084             : //      code to fix bugs etc.  See the ROSE README file
  178085             : //      for directions.
  178086             : 
  178087             : // tps: (02/22/2010): Adding DLL export requirements
  178088             : #include "rosedll.h"
  178089             : 
  178090             : // predeclarations for SgReturnStmt
  178091             : 
  178092             : /* #line 178093 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178093             : 
  178094             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  178095             : 
  178096             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178097             : 
  178098             : #if 1
  178099             : // Class Definition for SgReturnStmt
  178100             : class ROSE_DLL_API SgReturnStmt  : public SgStatement
  178101             :    {
  178102             :      public:
  178103             : 
  178104             : 
  178105             : /* #line 178106 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178106             : 
  178107             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  178108             : // Start of memberFunctionString
  178109             : /* #line 2557 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  178110             : 
  178111             : 
  178112             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  178113             :           virtual unsigned int cfgIndexForEnd() const override;
  178114             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  178115             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  178116             : #endif
  178117             :           int replace_expression(SgExpression * original_expression, SgExpression * new_expression ) override;
  178118             : 
  178119             :        // get lvalue
  178120             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL
  178121             : 
  178122             : 
  178123             : // End of memberFunctionString
  178124             : // Start of memberFunctionString
  178125             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  178126             : 
  178127             : // *** COMMON CODE SECTION BEGINS HERE ***
  178128             : 
  178129             :     public:
  178130             : 
  178131             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  178132             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  178133             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  178134             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  178135             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  178136             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  178137             : 
  178138             :       /*! \brief returns a string representing the class name */
  178139             :           virtual std::string class_name() const override;
  178140             : 
  178141             :       /*! \brief returns new style SageIII enum values */
  178142             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  178143             : 
  178144             :       /*! \brief static variant value */
  178145             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  178146             :        // static const VariantT static_variant = V_SgReturnStmt;
  178147             :           enum { static_variant = V_SgReturnStmt };
  178148             : 
  178149             :        /* the generated cast function */
  178150             :       /*! \brief Casts pointer from base class to derived class */
  178151             :           ROSE_DLL_API friend       SgReturnStmt* isSgReturnStmt(       SgNode * s );
  178152             : 
  178153             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  178154             :           ROSE_DLL_API friend const SgReturnStmt* isSgReturnStmt( const SgNode * s );
  178155             : 
  178156             :      // ******************************************
  178157             :      // * Memory Pool / New / Delete
  178158             :      // ******************************************
  178159             : 
  178160             :      public:
  178161             :           /// \private
  178162             :           static const unsigned pool_size; //
  178163             :           /// \private
  178164             :           static std::vector<unsigned char *> pools; //
  178165             :           /// \private
  178166             :           static SgReturnStmt * next_node; // 
  178167             : 
  178168             :           /// \private
  178169             :           static unsigned long initializeStorageClassArray(SgReturnStmtStorageClass *); //
  178170             : 
  178171             :           /// \private
  178172             :           static void clearMemoryPool(); //
  178173             :           static void deleteMemoryPool(); //
  178174             : 
  178175             :           /// \private
  178176             :           static void extendMemoryPoolForFileIO(); //
  178177             : 
  178178             :           /// \private
  178179             :           static SgReturnStmt * getPointerFromGlobalIndex(unsigned long); //
  178180             :           /// \private
  178181             :           static SgReturnStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  178182             : 
  178183             :           /// \private
  178184             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  178185             :           /// \private
  178186             :           static void resetValidFreepointers(); //
  178187             :           /// \private
  178188             :           static unsigned long getNumberOfLastValidPointer(); //
  178189             : 
  178190             : 
  178191             : #if defined(INLINE_FUNCTIONS)
  178192             :       /*! \brief returns pointer to newly allocated IR node */
  178193             :           inline void *operator new (size_t size);
  178194             : #else
  178195             :       /*! \brief returns pointer to newly allocated IR node */
  178196             :           void *operator new (size_t size);
  178197             : #endif
  178198             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  178199             :           void operator delete (void* pointer, size_t size);
  178200             : 
  178201             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  178202        2810 :           void operator delete (void* pointer)
  178203             :              {
  178204             :             // This is the generated delete operator...
  178205        2810 :                SgReturnStmt::operator delete (pointer,sizeof(SgReturnStmt));
  178206             :              }
  178207             : 
  178208             :       /*! \brief Returns the total number of IR nodes of this type */
  178209             :           static size_t numberOfNodes();
  178210             : 
  178211             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  178212             :           static size_t memoryUsage();
  178213             : 
  178214             :       // End of scope which started in IR nodes specific code 
  178215             :       /* */
  178216             : 
  178217             :       /* name Internal Functions
  178218             :           \brief Internal functions ... incomplete-documentation
  178219             : 
  178220             :           These functions have been made public as part of the design, but they are suggested for internal use 
  178221             :           or by particularly knowledgeable users for specialized tools or applications.
  178222             : 
  178223             :           \internal We could not make these private because they are required by user for special purposes. And 
  178224             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  178225             :          
  178226             :        */
  178227             : 
  178228             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  178229             :        // overridden in every class by *generated* implementation
  178230             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  178231             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  178232             :        // MS: 06/28/02 container of names of variables or container indices 
  178233             :        // used used in the traversal to access AST successor nodes
  178234             :        // overridden in every class by *generated* implementation
  178235             :       /*! \brief container of names of variables or container indices used used in the traversal
  178236             :           to access AST successor nodes overridden in every class by *generated* implementation */
  178237             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  178238             : 
  178239             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  178240             :        // than all the vector copies. The implementation for these functions is generated for each class.
  178241             :       /*! \brief return number of children in the traversal successor list */
  178242             :           virtual size_t get_numberOfTraversalSuccessors() override;
  178243             :       /*! \brief index-based access to traversal successors by index number */
  178244             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  178245             :       /*! \brief index-based access to traversal successors by child node */
  178246             :           virtual size_t get_childIndex(SgNode *child) override;
  178247             : 
  178248             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  178249             :        // MS: 08/16/2002 method for generating RTI information
  178250             :       /*! \brief return C++ Runtime-Time-Information */
  178251             :           virtual RTIReturnType roseRTI() override;
  178252             : #endif
  178253             :       /* */
  178254             : 
  178255             : 
  178256             : 
  178257             :       /* name Deprecated Functions
  178258             :           \brief Deprecated functions ... incomplete-documentation
  178259             : 
  178260             :           These functions have been deprecated from use.
  178261             :        */
  178262             :       /* */
  178263             : 
  178264             :       /*! returns a C style string (char*) representing the class name */
  178265             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  178266             : 
  178267             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  178268             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  178269             : #if 0
  178270             :       /*! returns old style Sage II enum values */
  178271             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  178272             :       /*! returns old style Sage II enum values */
  178273             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  178274             : #endif
  178275             :       /* */
  178276             : 
  178277             : 
  178278             : 
  178279             : 
  178280             :      public:
  178281             :       /* name Traversal Support Functions
  178282             :           \brief Traversal support functions ... incomplete-documentation
  178283             : 
  178284             :           These functions have been made public as part of the design, but they are suggested for internal use 
  178285             :           or by particularly knowledgable users for specialized tools or applications.
  178286             :        */
  178287             :       /* */
  178288             : 
  178289             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  178290             :        // (inferior to ROSE traversal mechanism, experimental).
  178291             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  178292             :        */
  178293             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  178294             : 
  178295             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  178296             :       /*! \brief support for the classic visitor pattern done in GoF */
  178297             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  178298             : 
  178299             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  178300             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  178301             :        */
  178302             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  178303             : 
  178304             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  178305             :        */
  178306             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  178307             : 
  178308             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  178309             :        // This traversal helps support internal tools that call static member functions.
  178310             :        // note: this function operates on the memory pools.
  178311             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  178312             :        */
  178313             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  178314             :       /* */
  178315             : 
  178316             : 
  178317             :      public:
  178318             :       /* name Memory Allocation Functions
  178319             :           \brief Memory allocations functions ... incomplete-documentation
  178320             : 
  178321             :           These functions have been made public as part of the design, but they are suggested for internal use 
  178322             :           or by particularly knowledgable users for specialized tools or applications.
  178323             :        */
  178324             :       /* */
  178325             : 
  178326             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  178327             : 
  178328             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  178329             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  178330             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  178331             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  178332             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  178333             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  178334             :           being used with the AST File I/O mechanism.
  178335             :        */
  178336             :           virtual bool isInMemoryPool() override;
  178337             : 
  178338             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  178339             : 
  178340             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  178341             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  178342             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  178343             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  178344             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  178345             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  178346             :           being used with the AST File I/O mechanism.
  178347             :        */
  178348             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  178349             : 
  178350             :       // DQ (4/30/2006): Modified to be a const function.
  178351             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  178352             : 
  178353             :           This functions is part of general support for many possible tools to operate 
  178354             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  178355             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  178356             :           less than the set of pointers used by the AST file I/O. This is part of
  178357             :           work implemented by Andreas, and support tools such as the AST graph generation.
  178358             : 
  178359             :           \warning This function can return unexpected data members and thus the 
  178360             :                    order and the number of elements is unpredicable and subject 
  178361             :                    to change.
  178362             : 
  178363             :           \returns STL vector of pairs of SgNode* and strings
  178364             :        */
  178365             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  178366             : 
  178367             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  178368             : 
  178369             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  178370             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  178371             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  178372             : 
  178373             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  178374             :                    and subject to change.
  178375             :        */
  178376             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  178377             : 
  178378             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  178379             : 
  178380             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  178381             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  178382             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  178383             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  178384             : 
  178385             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  178386             : 
  178387             :           \returns long
  178388             :        */
  178389             :           virtual long getChildIndex( SgNode* childNode ) const override;
  178390             : 
  178391             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  178392             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  178393             :       /* \brief Constructor for use by AST File I/O Mechanism
  178394             : 
  178395             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  178396             :           which obtained via fast binary file I/O from disk.
  178397             :        */
  178398             :        // SgReturnStmt( SgReturnStmtStorageClass& source );
  178399             : 
  178400             : 
  178401             : 
  178402             : 
  178403             : 
  178404             :  // JH (10/24/2005): methods added to support the ast file IO
  178405             :     private:
  178406             : 
  178407             :       /* name AST Memory Allocation Support Functions
  178408             :           \brief Memory allocations support....
  178409             : 
  178410             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  178411             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  178412             :           and support the AST File I/O Mechanism.
  178413             :        */
  178414             :       /* */
  178415             : 
  178416             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  178417             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  178418             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  178419             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  178420             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  178421             :           a correspinding one in the AST_FILE_IO class!
  178422             :        */
  178423             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  178424             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  178425             :       /* \brief Typedef used for low level memory access.
  178426             :        */
  178427             :        // typedef unsigned char* TestType;
  178428             : 
  178429             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  178430             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  178431             :       /* \brief Typedef used to hold memory addresses as values.
  178432             :        */
  178433             :        // typedef unsigned long  AddressType;
  178434             : 
  178435             : 
  178436             : 
  178437             :        // necessary, to have direct access to the p_freepointer and the private methods !
  178438             :       /*! \brief friend class declaration to support AST File I/O */
  178439             :           friend class AST_FILE_IO;
  178440             : 
  178441             :       /*! \brief friend class declaration to support AST File I/O */
  178442             :           friend class SgReturnStmtStorageClass;
  178443             : 
  178444             :       /*! \brief friend class declaration to support AST File I/O */
  178445             :           friend class AstSpecificDataManagingClass;
  178446             : 
  178447             :       /*! \brief friend class declaration to support AST File I/O */
  178448             :           friend class AstSpecificDataManagingClassStorageClass;
  178449             :     public:
  178450             :       /*! \brief IR node constructor to support AST File I/O */
  178451             :           SgReturnStmt( const SgReturnStmtStorageClass& source );
  178452             : 
  178453             :  // private: // JJW hack
  178454             :        /*
  178455             :           name AST Memory Allocation Support Variables
  178456             :           Memory allocations support variables 
  178457             : 
  178458             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  178459             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  178460             :           and support the AST File I/O Mechanism.
  178461             :        */
  178462             :       /* */
  178463             : 
  178464             :     public:
  178465             : 
  178466             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  178467             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  178468             :       // virtual SgNode* addRegExpAttribute();
  178469             :       /*! \brief Support for AST matching using regular expression.
  178470             : 
  178471             :           This support is incomplete and the subject of current research to define 
  178472             :           RegEx trees to support inexact matching.
  178473             :        */
  178474             :           SgReturnStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  178475             : 
  178476             : // *** COMMON CODE SECTION ENDS HERE ***
  178477             : 
  178478             : 
  178479             : // End of memberFunctionString
  178480             : // Start of memberFunctionString
  178481             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  178482             : 
  178483             :      // the generated cast function
  178484             :      // friend ROSE_DLL_API SgReturnStmt* isSgReturnStmt ( SgNode* s );
  178485             : 
  178486             :           typedef SgStatement base_node_type;
  178487             : 
  178488             : 
  178489             : // End of memberFunctionString
  178490             : // Start of memberFunctionString
  178491             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  178492             : 
  178493             :           void post_construction_initialization() override;
  178494             : 
  178495             : 
  178496             : // End of memberFunctionString
  178497             : 
  178498             :      public: 
  178499             :          SgExpression* get_expression() const;
  178500             :          void set_expression(SgExpression* expression);
  178501             : 
  178502             : 
  178503             :      public: 
  178504             :          virtual ~SgReturnStmt();
  178505             : 
  178506             : 
  178507             :      public: 
  178508             :          SgReturnStmt(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  178509             :          SgReturnStmt(SgExpression* expression); 
  178510             : 
  178511             :     protected:
  178512             : // Start of memberFunctionString
  178513             : SgExpression* p_expression;
  178514             :           
  178515             : // End of memberFunctionString
  178516             : 
  178517             :     friend struct Rose::Traits::generated::describe_node_t<SgReturnStmt>;
  178518             :     friend struct Rose::Traits::generated::describe_field_t<SgReturnStmt, SgExpression*,&SgReturnStmt::p_expression>;
  178519             : 
  178520             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178521             : 
  178522             : 
  178523             :    };
  178524             : #endif
  178525             : 
  178526             : // postdeclarations for SgReturnStmt
  178527             : 
  178528             : /* #line 178529 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178529             : 
  178530             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  178531             : 
  178532             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178533             : 
  178534             : 
  178535             : /* #line 178536 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178536             : 
  178537             : 
  178538             : 
  178539             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178540             : 
  178541             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  178542             : //      This code is automatically generated for each 
  178543             : //      terminal and non-terminal within the defined 
  178544             : //      grammar.  There is a simple way to change the 
  178545             : //      code to fix bugs etc.  See the ROSE README file
  178546             : //      for directions.
  178547             : 
  178548             : // tps: (02/22/2010): Adding DLL export requirements
  178549             : #include "rosedll.h"
  178550             : 
  178551             : // predeclarations for SgGotoStatement
  178552             : 
  178553             : /* #line 178554 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178554             : 
  178555             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  178556             : 
  178557             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  178558             : 
  178559             : #if 1
  178560             : // Class Definition for SgGotoStatement
  178561             : class ROSE_DLL_API SgGotoStatement  : public SgStatement
  178562             :    {
  178563             :      public:
  178564             : 
  178565             : 
  178566             : /* #line 178567 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  178567             : 
  178568             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  178569             : // Start of memberFunctionString
  178570             : /* #line 2571 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  178571             : 
  178572             :        // void post_construction_initialization();
  178573             : 
  178574             :         protected:
  178575             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  178576             : 
  178577             :         public:
  178578             : 
  178579             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  178580             :           virtual unsigned int cfgIndexForEnd() const override;
  178581             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  178582             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  178583             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  178584             : #endif
  178585             : 
  178586             : #if ALT_FIXUP_COPY
  178587             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  178588             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  178589             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  178590             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  178591             : #else
  178592             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  178593             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  178594             : #endif
  178595             : 
  178596             : 
  178597             : 
  178598             : // End of memberFunctionString
  178599             : // Start of memberFunctionString
  178600             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  178601             : 
  178602             : // *** COMMON CODE SECTION BEGINS HERE ***
  178603             : 
  178604             :     public:
  178605             : 
  178606             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  178607             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  178608             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  178609             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  178610             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  178611             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  178612             : 
  178613             :       /*! \brief returns a string representing the class name */
  178614             :           virtual std::string class_name() const override;
  178615             : 
  178616             :       /*! \brief returns new style SageIII enum values */
  178617             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  178618             : 
  178619             :       /*! \brief static variant value */
  178620             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  178621             :        // static const VariantT static_variant = V_SgGotoStatement;
  178622             :           enum { static_variant = V_SgGotoStatement };
  178623             : 
  178624             :        /* the generated cast function */
  178625             :       /*! \brief Casts pointer from base class to derived class */
  178626             :           ROSE_DLL_API friend       SgGotoStatement* isSgGotoStatement(       SgNode * s );
  178627             : 
  178628             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  178629             :           ROSE_DLL_API friend const SgGotoStatement* isSgGotoStatement( const SgNode * s );
  178630             : 
  178631             :      // ******************************************
  178632             :      // * Memory Pool / New / Delete
  178633             :      // ******************************************
  178634             : 
  178635             :      public:
  178636             :           /// \private
  178637             :           static const unsigned pool_size; //
  178638             :           /// \private
  178639             :           static std::vector<unsigned char *> pools; //
  178640             :           /// \private
  178641             :           static SgGotoStatement * next_node; // 
  178642             : 
  178643             :           /// \private
  178644             :           static unsigned long initializeStorageClassArray(SgGotoStatementStorageClass *); //
  178645             : 
  178646             :           /// \private
  178647             :           static void clearMemoryPool(); //
  178648             :           static void deleteMemoryPool(); //
  178649             : 
  178650             :           /// \private
  178651             :           static void extendMemoryPoolForFileIO(); //
  178652             : 
  178653             :           /// \private
  178654             :           static SgGotoStatement * getPointerFromGlobalIndex(unsigned long); //
  178655             :           /// \private
  178656             :           static SgGotoStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  178657             : 
  178658             :           /// \private
  178659             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  178660             :           /// \private
  178661             :           static void resetValidFreepointers(); //
  178662             :           /// \private
  178663             :           static unsigned long getNumberOfLastValidPointer(); //
  178664             : 
  178665             : 
  178666             : #if defined(INLINE_FUNCTIONS)
  178667             :       /*! \brief returns pointer to newly allocated IR node */
  178668             :           inline void *operator new (size_t size);
  178669             : #else
  178670             :       /*! \brief returns pointer to newly allocated IR node */
  178671             :           void *operator new (size_t size);
  178672             : #endif
  178673             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  178674             :           void operator delete (void* pointer, size_t size);
  178675             : 
  178676             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  178677           0 :           void operator delete (void* pointer)
  178678             :              {
  178679             :             // This is the generated delete operator...
  178680           0 :                SgGotoStatement::operator delete (pointer,sizeof(SgGotoStatement));
  178681             :              }
  178682             : 
  178683             :       /*! \brief Returns the total number of IR nodes of this type */
  178684             :           static size_t numberOfNodes();
  178685             : 
  178686             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  178687             :           static size_t memoryUsage();
  178688             : 
  178689             :       // End of scope which started in IR nodes specific code 
  178690             :       /* */
  178691             : 
  178692             :       /* name Internal Functions
  178693             :           \brief Internal functions ... incomplete-documentation
  178694             : 
  178695             :           These functions have been made public as part of the design, but they are suggested for internal use 
  178696             :           or by particularly knowledgeable users for specialized tools or applications.
  178697             : 
  178698             :           \internal We could not make these private because they are required by user for special purposes. And 
  178699             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  178700             :          
  178701             :        */
  178702             : 
  178703             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  178704             :        // overridden in every class by *generated* implementation
  178705             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  178706             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  178707             :        // MS: 06/28/02 container of names of variables or container indices 
  178708             :        // used used in the traversal to access AST successor nodes
  178709             :        // overridden in every class by *generated* implementation
  178710             :       /*! \brief container of names of variables or container indices used used in the traversal
  178711             :           to access AST successor nodes overridden in every class by *generated* implementation */
  178712             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  178713             : 
  178714             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  178715             :        // than all the vector copies. The implementation for these functions is generated for each class.
  178716             :       /*! \brief return number of children in the traversal successor list */
  178717             :           virtual size_t get_numberOfTraversalSuccessors() override;
  178718             :       /*! \brief index-based access to traversal successors by index number */
  178719             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  178720             :       /*! \brief index-based access to traversal successors by child node */
  178721             :           virtual size_t get_childIndex(SgNode *child) override;
  178722             : 
  178723             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  178724             :        // MS: 08/16/2002 method for generating RTI information
  178725             :       /*! \brief return C++ Runtime-Time-Information */
  178726             :           virtual RTIReturnType roseRTI() override;
  178727             : #endif
  178728             :       /* */
  178729             : 
  178730             : 
  178731             : 
  178732             :       /* name Deprecated Functions
  178733             :           \brief Deprecated functions ... incomplete-documentation
  178734             : 
  178735             :           These functions have been deprecated from use.
  178736             :        */
  178737             :       /* */
  178738             : 
  178739             :       /*! returns a C style string (char*) representing the class name */
  178740             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  178741             : 
  178742             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  178743             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  178744             : #if 0
  178745             :       /*! returns old style Sage II enum values */
  178746             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  178747             :       /*! returns old style Sage II enum values */
  178748             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  178749             : #endif
  178750             :       /* */
  178751             : 
  178752             : 
  178753             : 
  178754             : 
  178755             :      public:
  178756             :       /* name Traversal Support Functions
  178757             :           \brief Traversal support functions ... incomplete-documentation
  178758             : 
  178759             :           These functions have been made public as part of the design, but they are suggested for internal use 
  178760             :           or by particularly knowledgable users for specialized tools or applications.
  178761             :        */
  178762             :       /* */
  178763             : 
  178764             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  178765             :        // (inferior to ROSE traversal mechanism, experimental).
  178766             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  178767             :        */
  178768             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  178769             : 
  178770             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  178771             :       /*! \brief support for the classic visitor pattern done in GoF */
  178772             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  178773             : 
  178774             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  178775             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  178776             :        */
  178777             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  178778             : 
  178779             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  178780             :        */
  178781             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  178782             : 
  178783             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  178784             :        // This traversal helps support internal tools that call static member functions.
  178785             :        // note: this function operates on the memory pools.
  178786             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  178787             :        */
  178788             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  178789             :       /* */
  178790             : 
  178791             : 
  178792             :      public:
  178793             :       /* name Memory Allocation Functions
  178794             :           \brief Memory allocations functions ... incomplete-documentation
  178795             : 
  178796             :           These functions have been made public as part of the design, but they are suggested for internal use 
  178797             :           or by particularly knowledgable users for specialized tools or applications.
  178798             :        */
  178799             :       /* */
  178800             : 
  178801             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  178802             : 
  178803             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  178804             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  178805             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  178806             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  178807             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  178808             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  178809             :           being used with the AST File I/O mechanism.
  178810             :        */
  178811             :           virtual bool isInMemoryPool() override;
  178812             : 
  178813             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  178814             : 
  178815             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  178816             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  178817             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  178818             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  178819             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  178820             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  178821             :           being used with the AST File I/O mechanism.
  178822             :        */
  178823             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  178824             : 
  178825             :       // DQ (4/30/2006): Modified to be a const function.
  178826             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  178827             : 
  178828             :           This functions is part of general support for many possible tools to operate 
  178829             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  178830             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  178831             :           less than the set of pointers used by the AST file I/O. This is part of
  178832             :           work implemented by Andreas, and support tools such as the AST graph generation.
  178833             : 
  178834             :           \warning This function can return unexpected data members and thus the 
  178835             :                    order and the number of elements is unpredicable and subject 
  178836             :                    to change.
  178837             : 
  178838             :           \returns STL vector of pairs of SgNode* and strings
  178839             :        */
  178840             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  178841             : 
  178842             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  178843             : 
  178844             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  178845             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  178846             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  178847             : 
  178848             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  178849             :                    and subject to change.
  178850             :        */
  178851             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  178852             : 
  178853             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  178854             : 
  178855             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  178856             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  178857             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  178858             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  178859             : 
  178860             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  178861             : 
  178862             :           \returns long
  178863             :        */
  178864             :           virtual long getChildIndex( SgNode* childNode ) const override;
  178865             : 
  178866             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  178867             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  178868             :       /* \brief Constructor for use by AST File I/O Mechanism
  178869             : 
  178870             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  178871             :           which obtained via fast binary file I/O from disk.
  178872             :        */
  178873             :        // SgGotoStatement( SgGotoStatementStorageClass& source );
  178874             : 
  178875             : 
  178876             : 
  178877             : 
  178878             : 
  178879             :  // JH (10/24/2005): methods added to support the ast file IO
  178880             :     private:
  178881             : 
  178882             :       /* name AST Memory Allocation Support Functions
  178883             :           \brief Memory allocations support....
  178884             : 
  178885             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  178886             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  178887             :           and support the AST File I/O Mechanism.
  178888             :        */
  178889             :       /* */
  178890             : 
  178891             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  178892             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  178893             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  178894             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  178895             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  178896             :           a correspinding one in the AST_FILE_IO class!
  178897             :        */
  178898             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  178899             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  178900             :       /* \brief Typedef used for low level memory access.
  178901             :        */
  178902             :        // typedef unsigned char* TestType;
  178903             : 
  178904             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  178905             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  178906             :       /* \brief Typedef used to hold memory addresses as values.
  178907             :        */
  178908             :        // typedef unsigned long  AddressType;
  178909             : 
  178910             : 
  178911             : 
  178912             :        // necessary, to have direct access to the p_freepointer and the private methods !
  178913             :       /*! \brief friend class declaration to support AST File I/O */
  178914             :           friend class AST_FILE_IO;
  178915             : 
  178916             :       /*! \brief friend class declaration to support AST File I/O */
  178917             :           friend class SgGotoStatementStorageClass;
  178918             : 
  178919             :       /*! \brief friend class declaration to support AST File I/O */
  178920             :           friend class AstSpecificDataManagingClass;
  178921             : 
  178922             :       /*! \brief friend class declaration to support AST File I/O */
  178923             :           friend class AstSpecificDataManagingClassStorageClass;
  178924             :     public:
  178925             :       /*! \brief IR node constructor to support AST File I/O */
  178926             :           SgGotoStatement( const SgGotoStatementStorageClass& source );
  178927             : 
  178928             :  // private: // JJW hack
  178929             :        /*
  178930             :           name AST Memory Allocation Support Variables
  178931             :           Memory allocations support variables 
  178932             : 
  178933             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  178934             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  178935             :           and support the AST File I/O Mechanism.
  178936             :        */
  178937             :       /* */
  178938             : 
  178939             :     public:
  178940             : 
  178941             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  178942             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  178943             :       // virtual SgNode* addRegExpAttribute();
  178944             :       /*! \brief Support for AST matching using regular expression.
  178945             : 
  178946             :           This support is incomplete and the subject of current research to define 
  178947             :           RegEx trees to support inexact matching.
  178948             :        */
  178949             :           SgGotoStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  178950             : 
  178951             : // *** COMMON CODE SECTION ENDS HERE ***
  178952             : 
  178953             : 
  178954             : // End of memberFunctionString
  178955             : // Start of memberFunctionString
  178956             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  178957             : 
  178958             :      // the generated cast function
  178959             :      // friend ROSE_DLL_API SgGotoStatement* isSgGotoStatement ( SgNode* s );
  178960             : 
  178961             :           typedef SgStatement base_node_type;
  178962             : 
  178963             : 
  178964             : // End of memberFunctionString
  178965             : // Start of memberFunctionString
  178966             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  178967             : 
  178968             :           void post_construction_initialization() override;
  178969             : 
  178970             : 
  178971             : // End of memberFunctionString
  178972             : 
  178973             :      public: 
  178974             :          SgLabelStatement* get_label() const;
  178975             :          void set_label(SgLabelStatement* label);
  178976             : 
  178977             :      public: 
  178978             :          SgLabelRefExp* get_label_expression() const;
  178979             :          void set_label_expression(SgLabelRefExp* label_expression);
  178980             : 
  178981             :      public: 
  178982             :          SgExpression* get_selector_expression() const;
  178983             :          void set_selector_expression(SgExpression* selector_expression);
  178984             : 
  178985             : 
  178986             :      public: 
  178987             :          virtual ~SgGotoStatement();
  178988             : 
  178989             : 
  178990             :      public: 
  178991             :          SgGotoStatement(Sg_File_Info* startOfConstruct , SgLabelStatement* label = NULL); 
  178992             :          SgGotoStatement(SgLabelStatement* label); 
  178993             : 
  178994             :     protected:
  178995             : // Start of memberFunctionString
  178996             : SgLabelStatement* p_label;
  178997             :           
  178998             : // End of memberFunctionString
  178999             : // Start of memberFunctionString
  179000             : SgLabelRefExp* p_label_expression;
  179001             :           
  179002             : // End of memberFunctionString
  179003             : // Start of memberFunctionString
  179004             : SgExpression* p_selector_expression;
  179005             :           
  179006             : // End of memberFunctionString
  179007             : 
  179008             :     friend struct Rose::Traits::generated::describe_node_t<SgGotoStatement>;
  179009             :     friend struct Rose::Traits::generated::describe_field_t<SgGotoStatement, SgLabelStatement*,&SgGotoStatement::p_label>;
  179010             :     friend struct Rose::Traits::generated::describe_field_t<SgGotoStatement, SgLabelRefExp*,&SgGotoStatement::p_label_expression>;
  179011             :     friend struct Rose::Traits::generated::describe_field_t<SgGotoStatement, SgExpression*,&SgGotoStatement::p_selector_expression>;
  179012             : 
  179013             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179014             : 
  179015             : 
  179016             :    };
  179017             : #endif
  179018             : 
  179019             : // postdeclarations for SgGotoStatement
  179020             : 
  179021             : /* #line 179022 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179022             : 
  179023             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  179024             : 
  179025             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179026             : 
  179027             : 
  179028             : /* #line 179029 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179029             : 
  179030             : 
  179031             : 
  179032             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179033             : 
  179034             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  179035             : //      This code is automatically generated for each 
  179036             : //      terminal and non-terminal within the defined 
  179037             : //      grammar.  There is a simple way to change the 
  179038             : //      code to fix bugs etc.  See the ROSE README file
  179039             : //      for directions.
  179040             : 
  179041             : // tps: (02/22/2010): Adding DLL export requirements
  179042             : #include "rosedll.h"
  179043             : 
  179044             : // predeclarations for SgSpawnStmt
  179045             : 
  179046             : /* #line 179047 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179047             : 
  179048             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  179049             : 
  179050             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179051             : 
  179052             : #if 1
  179053             : // Class Definition for SgSpawnStmt
  179054             : class ROSE_DLL_API SgSpawnStmt  : public SgStatement
  179055             :    {
  179056             :      public:
  179057             : 
  179058             : 
  179059             : /* #line 179060 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179060             : 
  179061             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  179062             : // Start of memberFunctionString
  179063             : /* #line 2622 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  179064             : 
  179065             : 
  179066             : 
  179067             : 
  179068             : // End of memberFunctionString
  179069             : // Start of memberFunctionString
  179070             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  179071             : 
  179072             : // *** COMMON CODE SECTION BEGINS HERE ***
  179073             : 
  179074             :     public:
  179075             : 
  179076             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  179077             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  179078             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  179079             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  179080             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  179081             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  179082             : 
  179083             :       /*! \brief returns a string representing the class name */
  179084             :           virtual std::string class_name() const override;
  179085             : 
  179086             :       /*! \brief returns new style SageIII enum values */
  179087             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  179088             : 
  179089             :       /*! \brief static variant value */
  179090             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  179091             :        // static const VariantT static_variant = V_SgSpawnStmt;
  179092             :           enum { static_variant = V_SgSpawnStmt };
  179093             : 
  179094             :        /* the generated cast function */
  179095             :       /*! \brief Casts pointer from base class to derived class */
  179096             :           ROSE_DLL_API friend       SgSpawnStmt* isSgSpawnStmt(       SgNode * s );
  179097             : 
  179098             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  179099             :           ROSE_DLL_API friend const SgSpawnStmt* isSgSpawnStmt( const SgNode * s );
  179100             : 
  179101             :      // ******************************************
  179102             :      // * Memory Pool / New / Delete
  179103             :      // ******************************************
  179104             : 
  179105             :      public:
  179106             :           /// \private
  179107             :           static const unsigned pool_size; //
  179108             :           /// \private
  179109             :           static std::vector<unsigned char *> pools; //
  179110             :           /// \private
  179111             :           static SgSpawnStmt * next_node; // 
  179112             : 
  179113             :           /// \private
  179114             :           static unsigned long initializeStorageClassArray(SgSpawnStmtStorageClass *); //
  179115             : 
  179116             :           /// \private
  179117             :           static void clearMemoryPool(); //
  179118             :           static void deleteMemoryPool(); //
  179119             : 
  179120             :           /// \private
  179121             :           static void extendMemoryPoolForFileIO(); //
  179122             : 
  179123             :           /// \private
  179124             :           static SgSpawnStmt * getPointerFromGlobalIndex(unsigned long); //
  179125             :           /// \private
  179126             :           static SgSpawnStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  179127             : 
  179128             :           /// \private
  179129             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  179130             :           /// \private
  179131             :           static void resetValidFreepointers(); //
  179132             :           /// \private
  179133             :           static unsigned long getNumberOfLastValidPointer(); //
  179134             : 
  179135             : 
  179136             : #if defined(INLINE_FUNCTIONS)
  179137             :       /*! \brief returns pointer to newly allocated IR node */
  179138             :           inline void *operator new (size_t size);
  179139             : #else
  179140             :       /*! \brief returns pointer to newly allocated IR node */
  179141             :           void *operator new (size_t size);
  179142             : #endif
  179143             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  179144             :           void operator delete (void* pointer, size_t size);
  179145             : 
  179146             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  179147           0 :           void operator delete (void* pointer)
  179148             :              {
  179149             :             // This is the generated delete operator...
  179150           0 :                SgSpawnStmt::operator delete (pointer,sizeof(SgSpawnStmt));
  179151             :              }
  179152             : 
  179153             :       /*! \brief Returns the total number of IR nodes of this type */
  179154             :           static size_t numberOfNodes();
  179155             : 
  179156             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  179157             :           static size_t memoryUsage();
  179158             : 
  179159             :       // End of scope which started in IR nodes specific code 
  179160             :       /* */
  179161             : 
  179162             :       /* name Internal Functions
  179163             :           \brief Internal functions ... incomplete-documentation
  179164             : 
  179165             :           These functions have been made public as part of the design, but they are suggested for internal use 
  179166             :           or by particularly knowledgeable users for specialized tools or applications.
  179167             : 
  179168             :           \internal We could not make these private because they are required by user for special purposes. And 
  179169             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  179170             :          
  179171             :        */
  179172             : 
  179173             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  179174             :        // overridden in every class by *generated* implementation
  179175             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  179176             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  179177             :        // MS: 06/28/02 container of names of variables or container indices 
  179178             :        // used used in the traversal to access AST successor nodes
  179179             :        // overridden in every class by *generated* implementation
  179180             :       /*! \brief container of names of variables or container indices used used in the traversal
  179181             :           to access AST successor nodes overridden in every class by *generated* implementation */
  179182             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  179183             : 
  179184             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  179185             :        // than all the vector copies. The implementation for these functions is generated for each class.
  179186             :       /*! \brief return number of children in the traversal successor list */
  179187             :           virtual size_t get_numberOfTraversalSuccessors() override;
  179188             :       /*! \brief index-based access to traversal successors by index number */
  179189             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  179190             :       /*! \brief index-based access to traversal successors by child node */
  179191             :           virtual size_t get_childIndex(SgNode *child) override;
  179192             : 
  179193             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  179194             :        // MS: 08/16/2002 method for generating RTI information
  179195             :       /*! \brief return C++ Runtime-Time-Information */
  179196             :           virtual RTIReturnType roseRTI() override;
  179197             : #endif
  179198             :       /* */
  179199             : 
  179200             : 
  179201             : 
  179202             :       /* name Deprecated Functions
  179203             :           \brief Deprecated functions ... incomplete-documentation
  179204             : 
  179205             :           These functions have been deprecated from use.
  179206             :        */
  179207             :       /* */
  179208             : 
  179209             :       /*! returns a C style string (char*) representing the class name */
  179210             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  179211             : 
  179212             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  179213             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  179214             : #if 0
  179215             :       /*! returns old style Sage II enum values */
  179216             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  179217             :       /*! returns old style Sage II enum values */
  179218             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  179219             : #endif
  179220             :       /* */
  179221             : 
  179222             : 
  179223             : 
  179224             : 
  179225             :      public:
  179226             :       /* name Traversal Support Functions
  179227             :           \brief Traversal support functions ... incomplete-documentation
  179228             : 
  179229             :           These functions have been made public as part of the design, but they are suggested for internal use 
  179230             :           or by particularly knowledgable users for specialized tools or applications.
  179231             :        */
  179232             :       /* */
  179233             : 
  179234             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  179235             :        // (inferior to ROSE traversal mechanism, experimental).
  179236             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  179237             :        */
  179238             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  179239             : 
  179240             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  179241             :       /*! \brief support for the classic visitor pattern done in GoF */
  179242             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  179243             : 
  179244             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  179245             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  179246             :        */
  179247             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  179248             : 
  179249             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  179250             :        */
  179251             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  179252             : 
  179253             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  179254             :        // This traversal helps support internal tools that call static member functions.
  179255             :        // note: this function operates on the memory pools.
  179256             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  179257             :        */
  179258             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  179259             :       /* */
  179260             : 
  179261             : 
  179262             :      public:
  179263             :       /* name Memory Allocation Functions
  179264             :           \brief Memory allocations functions ... incomplete-documentation
  179265             : 
  179266             :           These functions have been made public as part of the design, but they are suggested for internal use 
  179267             :           or by particularly knowledgable users for specialized tools or applications.
  179268             :        */
  179269             :       /* */
  179270             : 
  179271             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  179272             : 
  179273             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  179274             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  179275             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  179276             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  179277             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  179278             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  179279             :           being used with the AST File I/O mechanism.
  179280             :        */
  179281             :           virtual bool isInMemoryPool() override;
  179282             : 
  179283             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  179284             : 
  179285             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  179286             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  179287             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  179288             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  179289             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  179290             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  179291             :           being used with the AST File I/O mechanism.
  179292             :        */
  179293             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  179294             : 
  179295             :       // DQ (4/30/2006): Modified to be a const function.
  179296             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  179297             : 
  179298             :           This functions is part of general support for many possible tools to operate 
  179299             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  179300             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  179301             :           less than the set of pointers used by the AST file I/O. This is part of
  179302             :           work implemented by Andreas, and support tools such as the AST graph generation.
  179303             : 
  179304             :           \warning This function can return unexpected data members and thus the 
  179305             :                    order and the number of elements is unpredicable and subject 
  179306             :                    to change.
  179307             : 
  179308             :           \returns STL vector of pairs of SgNode* and strings
  179309             :        */
  179310             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  179311             : 
  179312             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  179313             : 
  179314             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  179315             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  179316             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  179317             : 
  179318             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  179319             :                    and subject to change.
  179320             :        */
  179321             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  179322             : 
  179323             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  179324             : 
  179325             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  179326             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  179327             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  179328             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  179329             : 
  179330             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  179331             : 
  179332             :           \returns long
  179333             :        */
  179334             :           virtual long getChildIndex( SgNode* childNode ) const override;
  179335             : 
  179336             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  179337             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  179338             :       /* \brief Constructor for use by AST File I/O Mechanism
  179339             : 
  179340             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  179341             :           which obtained via fast binary file I/O from disk.
  179342             :        */
  179343             :        // SgSpawnStmt( SgSpawnStmtStorageClass& source );
  179344             : 
  179345             : 
  179346             : 
  179347             : 
  179348             : 
  179349             :  // JH (10/24/2005): methods added to support the ast file IO
  179350             :     private:
  179351             : 
  179352             :       /* name AST Memory Allocation Support Functions
  179353             :           \brief Memory allocations support....
  179354             : 
  179355             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  179356             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  179357             :           and support the AST File I/O Mechanism.
  179358             :        */
  179359             :       /* */
  179360             : 
  179361             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  179362             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  179363             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  179364             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  179365             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  179366             :           a correspinding one in the AST_FILE_IO class!
  179367             :        */
  179368             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  179369             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  179370             :       /* \brief Typedef used for low level memory access.
  179371             :        */
  179372             :        // typedef unsigned char* TestType;
  179373             : 
  179374             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  179375             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  179376             :       /* \brief Typedef used to hold memory addresses as values.
  179377             :        */
  179378             :        // typedef unsigned long  AddressType;
  179379             : 
  179380             : 
  179381             : 
  179382             :        // necessary, to have direct access to the p_freepointer and the private methods !
  179383             :       /*! \brief friend class declaration to support AST File I/O */
  179384             :           friend class AST_FILE_IO;
  179385             : 
  179386             :       /*! \brief friend class declaration to support AST File I/O */
  179387             :           friend class SgSpawnStmtStorageClass;
  179388             : 
  179389             :       /*! \brief friend class declaration to support AST File I/O */
  179390             :           friend class AstSpecificDataManagingClass;
  179391             : 
  179392             :       /*! \brief friend class declaration to support AST File I/O */
  179393             :           friend class AstSpecificDataManagingClassStorageClass;
  179394             :     public:
  179395             :       /*! \brief IR node constructor to support AST File I/O */
  179396             :           SgSpawnStmt( const SgSpawnStmtStorageClass& source );
  179397             : 
  179398             :  // private: // JJW hack
  179399             :        /*
  179400             :           name AST Memory Allocation Support Variables
  179401             :           Memory allocations support variables 
  179402             : 
  179403             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  179404             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  179405             :           and support the AST File I/O Mechanism.
  179406             :        */
  179407             :       /* */
  179408             : 
  179409             :     public:
  179410             : 
  179411             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  179412             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  179413             :       // virtual SgNode* addRegExpAttribute();
  179414             :       /*! \brief Support for AST matching using regular expression.
  179415             : 
  179416             :           This support is incomplete and the subject of current research to define 
  179417             :           RegEx trees to support inexact matching.
  179418             :        */
  179419             :           SgSpawnStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  179420             : 
  179421             : // *** COMMON CODE SECTION ENDS HERE ***
  179422             : 
  179423             : 
  179424             : // End of memberFunctionString
  179425             : // Start of memberFunctionString
  179426             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  179427             : 
  179428             :      // the generated cast function
  179429             :      // friend ROSE_DLL_API SgSpawnStmt* isSgSpawnStmt ( SgNode* s );
  179430             : 
  179431             :           typedef SgStatement base_node_type;
  179432             : 
  179433             : 
  179434             : // End of memberFunctionString
  179435             : // Start of memberFunctionString
  179436             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  179437             : 
  179438             :           void post_construction_initialization() override;
  179439             : 
  179440             : 
  179441             : // End of memberFunctionString
  179442             : 
  179443             :      public: 
  179444             :          SgFunctionCallExp* get_the_func() const;
  179445             :          void set_the_func(SgFunctionCallExp* the_func);
  179446             : 
  179447             : 
  179448             :      public: 
  179449             :          virtual ~SgSpawnStmt();
  179450             : 
  179451             : 
  179452             :      public: 
  179453             :          SgSpawnStmt(Sg_File_Info* startOfConstruct , SgFunctionCallExp* the_func = NULL); 
  179454             :          SgSpawnStmt(SgFunctionCallExp* the_func); 
  179455             : 
  179456             :     protected:
  179457             : // Start of memberFunctionString
  179458             : SgFunctionCallExp* p_the_func;
  179459             :           
  179460             : // End of memberFunctionString
  179461             : 
  179462             :     friend struct Rose::Traits::generated::describe_node_t<SgSpawnStmt>;
  179463             :     friend struct Rose::Traits::generated::describe_field_t<SgSpawnStmt, SgFunctionCallExp*,&SgSpawnStmt::p_the_func>;
  179464             : 
  179465             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179466             : 
  179467             : 
  179468             :    };
  179469             : #endif
  179470             : 
  179471             : // postdeclarations for SgSpawnStmt
  179472             : 
  179473             : /* #line 179474 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179474             : 
  179475             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  179476             : 
  179477             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179478             : 
  179479             : 
  179480             : /* #line 179481 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179481             : 
  179482             : 
  179483             : 
  179484             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179485             : 
  179486             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  179487             : //      This code is automatically generated for each 
  179488             : //      terminal and non-terminal within the defined 
  179489             : //      grammar.  There is a simple way to change the 
  179490             : //      code to fix bugs etc.  See the ROSE README file
  179491             : //      for directions.
  179492             : 
  179493             : // tps: (02/22/2010): Adding DLL export requirements
  179494             : #include "rosedll.h"
  179495             : 
  179496             : // predeclarations for SgNullStatement
  179497             : 
  179498             : /* #line 179499 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179499             : 
  179500             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  179501             : 
  179502             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179503             : 
  179504             : #if 1
  179505             : // Class Definition for SgNullStatement
  179506             : class ROSE_DLL_API SgNullStatement  : public SgStatement
  179507             :    {
  179508             :      public:
  179509             : 
  179510             : 
  179511             : /* #line 179512 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179512             : 
  179513             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  179514             : // Start of memberFunctionString
  179515             : /* #line 2638 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  179516             : 
  179517             : 
  179518             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  179519             :           virtual unsigned int cfgIndexForEnd() const override;
  179520             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  179521             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  179522             : #endif
  179523             : 
  179524             : 
  179525             : 
  179526             : // End of memberFunctionString
  179527             : // Start of memberFunctionString
  179528             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  179529             : 
  179530             : // *** COMMON CODE SECTION BEGINS HERE ***
  179531             : 
  179532             :     public:
  179533             : 
  179534             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  179535             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  179536             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  179537             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  179538             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  179539             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  179540             : 
  179541             :       /*! \brief returns a string representing the class name */
  179542             :           virtual std::string class_name() const override;
  179543             : 
  179544             :       /*! \brief returns new style SageIII enum values */
  179545             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  179546             : 
  179547             :       /*! \brief static variant value */
  179548             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  179549             :        // static const VariantT static_variant = V_SgNullStatement;
  179550             :           enum { static_variant = V_SgNullStatement };
  179551             : 
  179552             :        /* the generated cast function */
  179553             :       /*! \brief Casts pointer from base class to derived class */
  179554             :           ROSE_DLL_API friend       SgNullStatement* isSgNullStatement(       SgNode * s );
  179555             : 
  179556             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  179557             :           ROSE_DLL_API friend const SgNullStatement* isSgNullStatement( const SgNode * s );
  179558             : 
  179559             :      // ******************************************
  179560             :      // * Memory Pool / New / Delete
  179561             :      // ******************************************
  179562             : 
  179563             :      public:
  179564             :           /// \private
  179565             :           static const unsigned pool_size; //
  179566             :           /// \private
  179567             :           static std::vector<unsigned char *> pools; //
  179568             :           /// \private
  179569             :           static SgNullStatement * next_node; // 
  179570             : 
  179571             :           /// \private
  179572             :           static unsigned long initializeStorageClassArray(SgNullStatementStorageClass *); //
  179573             : 
  179574             :           /// \private
  179575             :           static void clearMemoryPool(); //
  179576             :           static void deleteMemoryPool(); //
  179577             : 
  179578             :           /// \private
  179579             :           static void extendMemoryPoolForFileIO(); //
  179580             : 
  179581             :           /// \private
  179582             :           static SgNullStatement * getPointerFromGlobalIndex(unsigned long); //
  179583             :           /// \private
  179584             :           static SgNullStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  179585             : 
  179586             :           /// \private
  179587             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  179588             :           /// \private
  179589             :           static void resetValidFreepointers(); //
  179590             :           /// \private
  179591             :           static unsigned long getNumberOfLastValidPointer(); //
  179592             : 
  179593             : 
  179594             : #if defined(INLINE_FUNCTIONS)
  179595             :       /*! \brief returns pointer to newly allocated IR node */
  179596             :           inline void *operator new (size_t size);
  179597             : #else
  179598             :       /*! \brief returns pointer to newly allocated IR node */
  179599             :           void *operator new (size_t size);
  179600             : #endif
  179601             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  179602             :           void operator delete (void* pointer, size_t size);
  179603             : 
  179604             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  179605          42 :           void operator delete (void* pointer)
  179606             :              {
  179607             :             // This is the generated delete operator...
  179608          42 :                SgNullStatement::operator delete (pointer,sizeof(SgNullStatement));
  179609             :              }
  179610             : 
  179611             :       /*! \brief Returns the total number of IR nodes of this type */
  179612             :           static size_t numberOfNodes();
  179613             : 
  179614             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  179615             :           static size_t memoryUsage();
  179616             : 
  179617             :       // End of scope which started in IR nodes specific code 
  179618             :       /* */
  179619             : 
  179620             :       /* name Internal Functions
  179621             :           \brief Internal functions ... incomplete-documentation
  179622             : 
  179623             :           These functions have been made public as part of the design, but they are suggested for internal use 
  179624             :           or by particularly knowledgeable users for specialized tools or applications.
  179625             : 
  179626             :           \internal We could not make these private because they are required by user for special purposes. And 
  179627             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  179628             :          
  179629             :        */
  179630             : 
  179631             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  179632             :        // overridden in every class by *generated* implementation
  179633             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  179634             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  179635             :        // MS: 06/28/02 container of names of variables or container indices 
  179636             :        // used used in the traversal to access AST successor nodes
  179637             :        // overridden in every class by *generated* implementation
  179638             :       /*! \brief container of names of variables or container indices used used in the traversal
  179639             :           to access AST successor nodes overridden in every class by *generated* implementation */
  179640             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  179641             : 
  179642             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  179643             :        // than all the vector copies. The implementation for these functions is generated for each class.
  179644             :       /*! \brief return number of children in the traversal successor list */
  179645             :           virtual size_t get_numberOfTraversalSuccessors() override;
  179646             :       /*! \brief index-based access to traversal successors by index number */
  179647             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  179648             :       /*! \brief index-based access to traversal successors by child node */
  179649             :           virtual size_t get_childIndex(SgNode *child) override;
  179650             : 
  179651             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  179652             :        // MS: 08/16/2002 method for generating RTI information
  179653             :       /*! \brief return C++ Runtime-Time-Information */
  179654             :           virtual RTIReturnType roseRTI() override;
  179655             : #endif
  179656             :       /* */
  179657             : 
  179658             : 
  179659             : 
  179660             :       /* name Deprecated Functions
  179661             :           \brief Deprecated functions ... incomplete-documentation
  179662             : 
  179663             :           These functions have been deprecated from use.
  179664             :        */
  179665             :       /* */
  179666             : 
  179667             :       /*! returns a C style string (char*) representing the class name */
  179668             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  179669             : 
  179670             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  179671             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  179672             : #if 0
  179673             :       /*! returns old style Sage II enum values */
  179674             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  179675             :       /*! returns old style Sage II enum values */
  179676             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  179677             : #endif
  179678             :       /* */
  179679             : 
  179680             : 
  179681             : 
  179682             : 
  179683             :      public:
  179684             :       /* name Traversal Support Functions
  179685             :           \brief Traversal support functions ... incomplete-documentation
  179686             : 
  179687             :           These functions have been made public as part of the design, but they are suggested for internal use 
  179688             :           or by particularly knowledgable users for specialized tools or applications.
  179689             :        */
  179690             :       /* */
  179691             : 
  179692             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  179693             :        // (inferior to ROSE traversal mechanism, experimental).
  179694             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  179695             :        */
  179696             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  179697             : 
  179698             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  179699             :       /*! \brief support for the classic visitor pattern done in GoF */
  179700             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  179701             : 
  179702             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  179703             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  179704             :        */
  179705             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  179706             : 
  179707             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  179708             :        */
  179709             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  179710             : 
  179711             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  179712             :        // This traversal helps support internal tools that call static member functions.
  179713             :        // note: this function operates on the memory pools.
  179714             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  179715             :        */
  179716             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  179717             :       /* */
  179718             : 
  179719             : 
  179720             :      public:
  179721             :       /* name Memory Allocation Functions
  179722             :           \brief Memory allocations functions ... incomplete-documentation
  179723             : 
  179724             :           These functions have been made public as part of the design, but they are suggested for internal use 
  179725             :           or by particularly knowledgable users for specialized tools or applications.
  179726             :        */
  179727             :       /* */
  179728             : 
  179729             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  179730             : 
  179731             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  179732             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  179733             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  179734             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  179735             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  179736             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  179737             :           being used with the AST File I/O mechanism.
  179738             :        */
  179739             :           virtual bool isInMemoryPool() override;
  179740             : 
  179741             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  179742             : 
  179743             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  179744             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  179745             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  179746             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  179747             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  179748             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  179749             :           being used with the AST File I/O mechanism.
  179750             :        */
  179751             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  179752             : 
  179753             :       // DQ (4/30/2006): Modified to be a const function.
  179754             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  179755             : 
  179756             :           This functions is part of general support for many possible tools to operate 
  179757             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  179758             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  179759             :           less than the set of pointers used by the AST file I/O. This is part of
  179760             :           work implemented by Andreas, and support tools such as the AST graph generation.
  179761             : 
  179762             :           \warning This function can return unexpected data members and thus the 
  179763             :                    order and the number of elements is unpredicable and subject 
  179764             :                    to change.
  179765             : 
  179766             :           \returns STL vector of pairs of SgNode* and strings
  179767             :        */
  179768             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  179769             : 
  179770             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  179771             : 
  179772             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  179773             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  179774             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  179775             : 
  179776             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  179777             :                    and subject to change.
  179778             :        */
  179779             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  179780             : 
  179781             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  179782             : 
  179783             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  179784             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  179785             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  179786             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  179787             : 
  179788             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  179789             : 
  179790             :           \returns long
  179791             :        */
  179792             :           virtual long getChildIndex( SgNode* childNode ) const override;
  179793             : 
  179794             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  179795             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  179796             :       /* \brief Constructor for use by AST File I/O Mechanism
  179797             : 
  179798             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  179799             :           which obtained via fast binary file I/O from disk.
  179800             :        */
  179801             :        // SgNullStatement( SgNullStatementStorageClass& source );
  179802             : 
  179803             : 
  179804             : 
  179805             : 
  179806             : 
  179807             :  // JH (10/24/2005): methods added to support the ast file IO
  179808             :     private:
  179809             : 
  179810             :       /* name AST Memory Allocation Support Functions
  179811             :           \brief Memory allocations support....
  179812             : 
  179813             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  179814             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  179815             :           and support the AST File I/O Mechanism.
  179816             :        */
  179817             :       /* */
  179818             : 
  179819             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  179820             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  179821             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  179822             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  179823             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  179824             :           a correspinding one in the AST_FILE_IO class!
  179825             :        */
  179826             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  179827             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  179828             :       /* \brief Typedef used for low level memory access.
  179829             :        */
  179830             :        // typedef unsigned char* TestType;
  179831             : 
  179832             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  179833             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  179834             :       /* \brief Typedef used to hold memory addresses as values.
  179835             :        */
  179836             :        // typedef unsigned long  AddressType;
  179837             : 
  179838             : 
  179839             : 
  179840             :        // necessary, to have direct access to the p_freepointer and the private methods !
  179841             :       /*! \brief friend class declaration to support AST File I/O */
  179842             :           friend class AST_FILE_IO;
  179843             : 
  179844             :       /*! \brief friend class declaration to support AST File I/O */
  179845             :           friend class SgNullStatementStorageClass;
  179846             : 
  179847             :       /*! \brief friend class declaration to support AST File I/O */
  179848             :           friend class AstSpecificDataManagingClass;
  179849             : 
  179850             :       /*! \brief friend class declaration to support AST File I/O */
  179851             :           friend class AstSpecificDataManagingClassStorageClass;
  179852             :     public:
  179853             :       /*! \brief IR node constructor to support AST File I/O */
  179854             :           SgNullStatement( const SgNullStatementStorageClass& source );
  179855             : 
  179856             :  // private: // JJW hack
  179857             :        /*
  179858             :           name AST Memory Allocation Support Variables
  179859             :           Memory allocations support variables 
  179860             : 
  179861             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  179862             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  179863             :           and support the AST File I/O Mechanism.
  179864             :        */
  179865             :       /* */
  179866             : 
  179867             :     public:
  179868             : 
  179869             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  179870             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  179871             :       // virtual SgNode* addRegExpAttribute();
  179872             :       /*! \brief Support for AST matching using regular expression.
  179873             : 
  179874             :           This support is incomplete and the subject of current research to define 
  179875             :           RegEx trees to support inexact matching.
  179876             :        */
  179877             :           SgNullStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  179878             : 
  179879             : // *** COMMON CODE SECTION ENDS HERE ***
  179880             : 
  179881             : 
  179882             : // End of memberFunctionString
  179883             : // Start of memberFunctionString
  179884             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  179885             : 
  179886             :      // the generated cast function
  179887             :      // friend ROSE_DLL_API SgNullStatement* isSgNullStatement ( SgNode* s );
  179888             : 
  179889             :           typedef SgStatement base_node_type;
  179890             : 
  179891             : 
  179892             : // End of memberFunctionString
  179893             : // Start of memberFunctionString
  179894             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  179895             : 
  179896             :           void post_construction_initialization() override;
  179897             : 
  179898             : 
  179899             : // End of memberFunctionString
  179900             : 
  179901             : 
  179902             :      public: 
  179903             :          virtual ~SgNullStatement();
  179904             : 
  179905             : 
  179906             :      public: 
  179907             :          SgNullStatement(Sg_File_Info* startOfConstruct ); 
  179908             :          SgNullStatement(); 
  179909             : 
  179910             :     protected:
  179911             : 
  179912             :     friend struct Rose::Traits::generated::describe_node_t<SgNullStatement>;
  179913             : 
  179914             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179915             : 
  179916             : 
  179917             :    };
  179918             : #endif
  179919             : 
  179920             : // postdeclarations for SgNullStatement
  179921             : 
  179922             : /* #line 179923 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179923             : 
  179924             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  179925             : 
  179926             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179927             : 
  179928             : 
  179929             : /* #line 179930 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179930             : 
  179931             : 
  179932             : 
  179933             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179934             : 
  179935             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  179936             : //      This code is automatically generated for each 
  179937             : //      terminal and non-terminal within the defined 
  179938             : //      grammar.  There is a simple way to change the 
  179939             : //      code to fix bugs etc.  See the ROSE README file
  179940             : //      for directions.
  179941             : 
  179942             : // tps: (02/22/2010): Adding DLL export requirements
  179943             : #include "rosedll.h"
  179944             : 
  179945             : // predeclarations for SgVariantStatement
  179946             : 
  179947             : /* #line 179948 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179948             : 
  179949             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  179950             : 
  179951             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  179952             : 
  179953             : #if 1
  179954             : // Class Definition for SgVariantStatement
  179955             : class ROSE_DLL_API SgVariantStatement  : public SgStatement
  179956             :    {
  179957             :      public:
  179958             : 
  179959             : 
  179960             : /* #line 179961 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  179961             : 
  179962             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  179963             : // Start of memberFunctionString
  179964             : /* #line 2654 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  179965             : 
  179966             : 
  179967             : 
  179968             : 
  179969             : // End of memberFunctionString
  179970             : // Start of memberFunctionString
  179971             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  179972             : 
  179973             : // *** COMMON CODE SECTION BEGINS HERE ***
  179974             : 
  179975             :     public:
  179976             : 
  179977             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  179978             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  179979             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  179980             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  179981             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  179982             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  179983             : 
  179984             :       /*! \brief returns a string representing the class name */
  179985             :           virtual std::string class_name() const override;
  179986             : 
  179987             :       /*! \brief returns new style SageIII enum values */
  179988             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  179989             : 
  179990             :       /*! \brief static variant value */
  179991             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  179992             :        // static const VariantT static_variant = V_SgVariantStatement;
  179993             :           enum { static_variant = V_SgVariantStatement };
  179994             : 
  179995             :        /* the generated cast function */
  179996             :       /*! \brief Casts pointer from base class to derived class */
  179997             :           ROSE_DLL_API friend       SgVariantStatement* isSgVariantStatement(       SgNode * s );
  179998             : 
  179999             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  180000             :           ROSE_DLL_API friend const SgVariantStatement* isSgVariantStatement( const SgNode * s );
  180001             : 
  180002             :      // ******************************************
  180003             :      // * Memory Pool / New / Delete
  180004             :      // ******************************************
  180005             : 
  180006             :      public:
  180007             :           /// \private
  180008             :           static const unsigned pool_size; //
  180009             :           /// \private
  180010             :           static std::vector<unsigned char *> pools; //
  180011             :           /// \private
  180012             :           static SgVariantStatement * next_node; // 
  180013             : 
  180014             :           /// \private
  180015             :           static unsigned long initializeStorageClassArray(SgVariantStatementStorageClass *); //
  180016             : 
  180017             :           /// \private
  180018             :           static void clearMemoryPool(); //
  180019             :           static void deleteMemoryPool(); //
  180020             : 
  180021             :           /// \private
  180022             :           static void extendMemoryPoolForFileIO(); //
  180023             : 
  180024             :           /// \private
  180025             :           static SgVariantStatement * getPointerFromGlobalIndex(unsigned long); //
  180026             :           /// \private
  180027             :           static SgVariantStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  180028             : 
  180029             :           /// \private
  180030             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  180031             :           /// \private
  180032             :           static void resetValidFreepointers(); //
  180033             :           /// \private
  180034             :           static unsigned long getNumberOfLastValidPointer(); //
  180035             : 
  180036             : 
  180037             : #if defined(INLINE_FUNCTIONS)
  180038             :       /*! \brief returns pointer to newly allocated IR node */
  180039             :           inline void *operator new (size_t size);
  180040             : #else
  180041             :       /*! \brief returns pointer to newly allocated IR node */
  180042             :           void *operator new (size_t size);
  180043             : #endif
  180044             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  180045             :           void operator delete (void* pointer, size_t size);
  180046             : 
  180047             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  180048           0 :           void operator delete (void* pointer)
  180049             :              {
  180050             :             // This is the generated delete operator...
  180051           0 :                SgVariantStatement::operator delete (pointer,sizeof(SgVariantStatement));
  180052             :              }
  180053             : 
  180054             :       /*! \brief Returns the total number of IR nodes of this type */
  180055             :           static size_t numberOfNodes();
  180056             : 
  180057             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  180058             :           static size_t memoryUsage();
  180059             : 
  180060             :       // End of scope which started in IR nodes specific code 
  180061             :       /* */
  180062             : 
  180063             :       /* name Internal Functions
  180064             :           \brief Internal functions ... incomplete-documentation
  180065             : 
  180066             :           These functions have been made public as part of the design, but they are suggested for internal use 
  180067             :           or by particularly knowledgeable users for specialized tools or applications.
  180068             : 
  180069             :           \internal We could not make these private because they are required by user for special purposes. And 
  180070             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  180071             :          
  180072             :        */
  180073             : 
  180074             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  180075             :        // overridden in every class by *generated* implementation
  180076             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  180077             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  180078             :        // MS: 06/28/02 container of names of variables or container indices 
  180079             :        // used used in the traversal to access AST successor nodes
  180080             :        // overridden in every class by *generated* implementation
  180081             :       /*! \brief container of names of variables or container indices used used in the traversal
  180082             :           to access AST successor nodes overridden in every class by *generated* implementation */
  180083             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  180084             : 
  180085             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  180086             :        // than all the vector copies. The implementation for these functions is generated for each class.
  180087             :       /*! \brief return number of children in the traversal successor list */
  180088             :           virtual size_t get_numberOfTraversalSuccessors() override;
  180089             :       /*! \brief index-based access to traversal successors by index number */
  180090             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  180091             :       /*! \brief index-based access to traversal successors by child node */
  180092             :           virtual size_t get_childIndex(SgNode *child) override;
  180093             : 
  180094             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  180095             :        // MS: 08/16/2002 method for generating RTI information
  180096             :       /*! \brief return C++ Runtime-Time-Information */
  180097             :           virtual RTIReturnType roseRTI() override;
  180098             : #endif
  180099             :       /* */
  180100             : 
  180101             : 
  180102             : 
  180103             :       /* name Deprecated Functions
  180104             :           \brief Deprecated functions ... incomplete-documentation
  180105             : 
  180106             :           These functions have been deprecated from use.
  180107             :        */
  180108             :       /* */
  180109             : 
  180110             :       /*! returns a C style string (char*) representing the class name */
  180111             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  180112             : 
  180113             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  180114             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  180115             : #if 0
  180116             :       /*! returns old style Sage II enum values */
  180117             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  180118             :       /*! returns old style Sage II enum values */
  180119             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  180120             : #endif
  180121             :       /* */
  180122             : 
  180123             : 
  180124             : 
  180125             : 
  180126             :      public:
  180127             :       /* name Traversal Support Functions
  180128             :           \brief Traversal support functions ... incomplete-documentation
  180129             : 
  180130             :           These functions have been made public as part of the design, but they are suggested for internal use 
  180131             :           or by particularly knowledgable users for specialized tools or applications.
  180132             :        */
  180133             :       /* */
  180134             : 
  180135             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  180136             :        // (inferior to ROSE traversal mechanism, experimental).
  180137             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  180138             :        */
  180139             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  180140             : 
  180141             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  180142             :       /*! \brief support for the classic visitor pattern done in GoF */
  180143             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  180144             : 
  180145             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  180146             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  180147             :        */
  180148             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  180149             : 
  180150             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  180151             :        */
  180152             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  180153             : 
  180154             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  180155             :        // This traversal helps support internal tools that call static member functions.
  180156             :        // note: this function operates on the memory pools.
  180157             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  180158             :        */
  180159             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  180160             :       /* */
  180161             : 
  180162             : 
  180163             :      public:
  180164             :       /* name Memory Allocation Functions
  180165             :           \brief Memory allocations functions ... incomplete-documentation
  180166             : 
  180167             :           These functions have been made public as part of the design, but they are suggested for internal use 
  180168             :           or by particularly knowledgable users for specialized tools or applications.
  180169             :        */
  180170             :       /* */
  180171             : 
  180172             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  180173             : 
  180174             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  180175             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  180176             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  180177             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  180178             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  180179             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  180180             :           being used with the AST File I/O mechanism.
  180181             :        */
  180182             :           virtual bool isInMemoryPool() override;
  180183             : 
  180184             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  180185             : 
  180186             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  180187             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  180188             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  180189             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  180190             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  180191             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  180192             :           being used with the AST File I/O mechanism.
  180193             :        */
  180194             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  180195             : 
  180196             :       // DQ (4/30/2006): Modified to be a const function.
  180197             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  180198             : 
  180199             :           This functions is part of general support for many possible tools to operate 
  180200             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  180201             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  180202             :           less than the set of pointers used by the AST file I/O. This is part of
  180203             :           work implemented by Andreas, and support tools such as the AST graph generation.
  180204             : 
  180205             :           \warning This function can return unexpected data members and thus the 
  180206             :                    order and the number of elements is unpredicable and subject 
  180207             :                    to change.
  180208             : 
  180209             :           \returns STL vector of pairs of SgNode* and strings
  180210             :        */
  180211             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  180212             : 
  180213             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  180214             : 
  180215             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  180216             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  180217             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  180218             : 
  180219             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  180220             :                    and subject to change.
  180221             :        */
  180222             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  180223             : 
  180224             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  180225             : 
  180226             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  180227             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  180228             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  180229             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  180230             : 
  180231             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  180232             : 
  180233             :           \returns long
  180234             :        */
  180235             :           virtual long getChildIndex( SgNode* childNode ) const override;
  180236             : 
  180237             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  180238             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  180239             :       /* \brief Constructor for use by AST File I/O Mechanism
  180240             : 
  180241             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  180242             :           which obtained via fast binary file I/O from disk.
  180243             :        */
  180244             :        // SgVariantStatement( SgVariantStatementStorageClass& source );
  180245             : 
  180246             : 
  180247             : 
  180248             : 
  180249             : 
  180250             :  // JH (10/24/2005): methods added to support the ast file IO
  180251             :     private:
  180252             : 
  180253             :       /* name AST Memory Allocation Support Functions
  180254             :           \brief Memory allocations support....
  180255             : 
  180256             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  180257             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  180258             :           and support the AST File I/O Mechanism.
  180259             :        */
  180260             :       /* */
  180261             : 
  180262             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  180263             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  180264             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  180265             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  180266             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  180267             :           a correspinding one in the AST_FILE_IO class!
  180268             :        */
  180269             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  180270             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  180271             :       /* \brief Typedef used for low level memory access.
  180272             :        */
  180273             :        // typedef unsigned char* TestType;
  180274             : 
  180275             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  180276             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  180277             :       /* \brief Typedef used to hold memory addresses as values.
  180278             :        */
  180279             :        // typedef unsigned long  AddressType;
  180280             : 
  180281             : 
  180282             : 
  180283             :        // necessary, to have direct access to the p_freepointer and the private methods !
  180284             :       /*! \brief friend class declaration to support AST File I/O */
  180285             :           friend class AST_FILE_IO;
  180286             : 
  180287             :       /*! \brief friend class declaration to support AST File I/O */
  180288             :           friend class SgVariantStatementStorageClass;
  180289             : 
  180290             :       /*! \brief friend class declaration to support AST File I/O */
  180291             :           friend class AstSpecificDataManagingClass;
  180292             : 
  180293             :       /*! \brief friend class declaration to support AST File I/O */
  180294             :           friend class AstSpecificDataManagingClassStorageClass;
  180295             :     public:
  180296             :       /*! \brief IR node constructor to support AST File I/O */
  180297             :           SgVariantStatement( const SgVariantStatementStorageClass& source );
  180298             : 
  180299             :  // private: // JJW hack
  180300             :        /*
  180301             :           name AST Memory Allocation Support Variables
  180302             :           Memory allocations support variables 
  180303             : 
  180304             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  180305             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  180306             :           and support the AST File I/O Mechanism.
  180307             :        */
  180308             :       /* */
  180309             : 
  180310             :     public:
  180311             : 
  180312             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  180313             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  180314             :       // virtual SgNode* addRegExpAttribute();
  180315             :       /*! \brief Support for AST matching using regular expression.
  180316             : 
  180317             :           This support is incomplete and the subject of current research to define 
  180318             :           RegEx trees to support inexact matching.
  180319             :        */
  180320             :           SgVariantStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  180321             : 
  180322             : // *** COMMON CODE SECTION ENDS HERE ***
  180323             : 
  180324             : 
  180325             : // End of memberFunctionString
  180326             : // Start of memberFunctionString
  180327             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  180328             : 
  180329             :      // the generated cast function
  180330             :      // friend ROSE_DLL_API SgVariantStatement* isSgVariantStatement ( SgNode* s );
  180331             : 
  180332             :           typedef SgStatement base_node_type;
  180333             : 
  180334             : 
  180335             : // End of memberFunctionString
  180336             : // Start of memberFunctionString
  180337             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  180338             : 
  180339             :           void post_construction_initialization() override;
  180340             : 
  180341             : 
  180342             : // End of memberFunctionString
  180343             : 
  180344             : 
  180345             :      public: 
  180346             :          virtual ~SgVariantStatement();
  180347             : 
  180348             : 
  180349             :      public: 
  180350             :          SgVariantStatement(Sg_File_Info* startOfConstruct ); 
  180351             :          SgVariantStatement(); 
  180352             : 
  180353             :     protected:
  180354             : 
  180355             :     friend struct Rose::Traits::generated::describe_node_t<SgVariantStatement>;
  180356             : 
  180357             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180358             : 
  180359             : 
  180360             :    };
  180361             : #endif
  180362             : 
  180363             : // postdeclarations for SgVariantStatement
  180364             : 
  180365             : /* #line 180366 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180366             : 
  180367             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  180368             : 
  180369             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180370             : 
  180371             : 
  180372             : /* #line 180373 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180373             : 
  180374             : 
  180375             : 
  180376             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180377             : 
  180378             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  180379             : //      This code is automatically generated for each 
  180380             : //      terminal and non-terminal within the defined 
  180381             : //      grammar.  There is a simple way to change the 
  180382             : //      code to fix bugs etc.  See the ROSE README file
  180383             : //      for directions.
  180384             : 
  180385             : // tps: (02/22/2010): Adding DLL export requirements
  180386             : #include "rosedll.h"
  180387             : 
  180388             : // predeclarations for SgForInitStatement
  180389             : 
  180390             : /* #line 180391 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180391             : 
  180392             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  180393             : 
  180394             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180395             : 
  180396             : #if 1
  180397             : // Class Definition for SgForInitStatement
  180398             : class ROSE_DLL_API SgForInitStatement  : public SgStatement
  180399             :    {
  180400             :      public:
  180401             : 
  180402             : 
  180403             : /* #line 180404 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180404             : 
  180405             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  180406             : // Start of memberFunctionString
  180407             : /* #line 1370 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  180408             : 
  180409             :         protected:
  180410             :           virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  180411             :           virtual bool insert_child(SgStatement*, SgStatement*, bool inFront = true, bool extractListFromBasicBlock = false) override;
  180412             : 
  180413             :         public:
  180414             : 
  180415             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  180416             :           virtual unsigned int cfgIndexForEnd() const override;
  180417             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  180418             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  180419             : #endif
  180420             : 
  180421             : #if ALT_FIXUP_COPY
  180422             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  180423             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  180424             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  180425             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  180426             : #else
  180427             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  180428             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  180429             : #endif
  180430             : 
  180431             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  180432             : 
  180433             :      public:
  180434             :           virtual void append_init_stmt  ( SgStatement* element );
  180435             :           virtual void prepend_init_stmt ( SgStatement* element );
  180436             : 
  180437             :      public:
  180438             :        // New functions added
  180439             :        // void append_init_stmt  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  180440             :        // void prepend_init_stmt ( const SgStatementPtrList::iterator & list, SgStatement* element );
  180441             : 
  180442             :        // void insert_init_stmt  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  180443             : 
  180444             : 
  180445             :      public:
  180446             : 
  180447             : 
  180448             : 
  180449             : 
  180450             : 
  180451             : // End of memberFunctionString
  180452             : // Start of memberFunctionString
  180453             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  180454             : 
  180455             : // *** COMMON CODE SECTION BEGINS HERE ***
  180456             : 
  180457             :     public:
  180458             : 
  180459             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  180460             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  180461             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  180462             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  180463             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  180464             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  180465             : 
  180466             :       /*! \brief returns a string representing the class name */
  180467             :           virtual std::string class_name() const override;
  180468             : 
  180469             :       /*! \brief returns new style SageIII enum values */
  180470             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  180471             : 
  180472             :       /*! \brief static variant value */
  180473             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  180474             :        // static const VariantT static_variant = V_SgForInitStatement;
  180475             :           enum { static_variant = V_SgForInitStatement };
  180476             : 
  180477             :        /* the generated cast function */
  180478             :       /*! \brief Casts pointer from base class to derived class */
  180479             :           ROSE_DLL_API friend       SgForInitStatement* isSgForInitStatement(       SgNode * s );
  180480             : 
  180481             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  180482             :           ROSE_DLL_API friend const SgForInitStatement* isSgForInitStatement( const SgNode * s );
  180483             : 
  180484             :      // ******************************************
  180485             :      // * Memory Pool / New / Delete
  180486             :      // ******************************************
  180487             : 
  180488             :      public:
  180489             :           /// \private
  180490             :           static const unsigned pool_size; //
  180491             :           /// \private
  180492             :           static std::vector<unsigned char *> pools; //
  180493             :           /// \private
  180494             :           static SgForInitStatement * next_node; // 
  180495             : 
  180496             :           /// \private
  180497             :           static unsigned long initializeStorageClassArray(SgForInitStatementStorageClass *); //
  180498             : 
  180499             :           /// \private
  180500             :           static void clearMemoryPool(); //
  180501             :           static void deleteMemoryPool(); //
  180502             : 
  180503             :           /// \private
  180504             :           static void extendMemoryPoolForFileIO(); //
  180505             : 
  180506             :           /// \private
  180507             :           static SgForInitStatement * getPointerFromGlobalIndex(unsigned long); //
  180508             :           /// \private
  180509             :           static SgForInitStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  180510             : 
  180511             :           /// \private
  180512             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  180513             :           /// \private
  180514             :           static void resetValidFreepointers(); //
  180515             :           /// \private
  180516             :           static unsigned long getNumberOfLastValidPointer(); //
  180517             : 
  180518             : 
  180519             : #if defined(INLINE_FUNCTIONS)
  180520             :       /*! \brief returns pointer to newly allocated IR node */
  180521             :           inline void *operator new (size_t size);
  180522             : #else
  180523             :       /*! \brief returns pointer to newly allocated IR node */
  180524             :           void *operator new (size_t size);
  180525             : #endif
  180526             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  180527             :           void operator delete (void* pointer, size_t size);
  180528             : 
  180529             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  180530        1049 :           void operator delete (void* pointer)
  180531             :              {
  180532             :             // This is the generated delete operator...
  180533        1049 :                SgForInitStatement::operator delete (pointer,sizeof(SgForInitStatement));
  180534             :              }
  180535             : 
  180536             :       /*! \brief Returns the total number of IR nodes of this type */
  180537             :           static size_t numberOfNodes();
  180538             : 
  180539             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  180540             :           static size_t memoryUsage();
  180541             : 
  180542             :       // End of scope which started in IR nodes specific code 
  180543             :       /* */
  180544             : 
  180545             :       /* name Internal Functions
  180546             :           \brief Internal functions ... incomplete-documentation
  180547             : 
  180548             :           These functions have been made public as part of the design, but they are suggested for internal use 
  180549             :           or by particularly knowledgeable users for specialized tools or applications.
  180550             : 
  180551             :           \internal We could not make these private because they are required by user for special purposes. And 
  180552             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  180553             :          
  180554             :        */
  180555             : 
  180556             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  180557             :        // overridden in every class by *generated* implementation
  180558             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  180559             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  180560             :        // MS: 06/28/02 container of names of variables or container indices 
  180561             :        // used used in the traversal to access AST successor nodes
  180562             :        // overridden in every class by *generated* implementation
  180563             :       /*! \brief container of names of variables or container indices used used in the traversal
  180564             :           to access AST successor nodes overridden in every class by *generated* implementation */
  180565             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  180566             : 
  180567             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  180568             :        // than all the vector copies. The implementation for these functions is generated for each class.
  180569             :       /*! \brief return number of children in the traversal successor list */
  180570             :           virtual size_t get_numberOfTraversalSuccessors() override;
  180571             :       /*! \brief index-based access to traversal successors by index number */
  180572             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  180573             :       /*! \brief index-based access to traversal successors by child node */
  180574             :           virtual size_t get_childIndex(SgNode *child) override;
  180575             : 
  180576             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  180577             :        // MS: 08/16/2002 method for generating RTI information
  180578             :       /*! \brief return C++ Runtime-Time-Information */
  180579             :           virtual RTIReturnType roseRTI() override;
  180580             : #endif
  180581             :       /* */
  180582             : 
  180583             : 
  180584             : 
  180585             :       /* name Deprecated Functions
  180586             :           \brief Deprecated functions ... incomplete-documentation
  180587             : 
  180588             :           These functions have been deprecated from use.
  180589             :        */
  180590             :       /* */
  180591             : 
  180592             :       /*! returns a C style string (char*) representing the class name */
  180593             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  180594             : 
  180595             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  180596             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  180597             : #if 0
  180598             :       /*! returns old style Sage II enum values */
  180599             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  180600             :       /*! returns old style Sage II enum values */
  180601             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  180602             : #endif
  180603             :       /* */
  180604             : 
  180605             : 
  180606             : 
  180607             : 
  180608             :      public:
  180609             :       /* name Traversal Support Functions
  180610             :           \brief Traversal support functions ... incomplete-documentation
  180611             : 
  180612             :           These functions have been made public as part of the design, but they are suggested for internal use 
  180613             :           or by particularly knowledgable users for specialized tools or applications.
  180614             :        */
  180615             :       /* */
  180616             : 
  180617             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  180618             :        // (inferior to ROSE traversal mechanism, experimental).
  180619             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  180620             :        */
  180621             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  180622             : 
  180623             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  180624             :       /*! \brief support for the classic visitor pattern done in GoF */
  180625             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  180626             : 
  180627             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  180628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  180629             :        */
  180630             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  180631             : 
  180632             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  180633             :        */
  180634             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  180635             : 
  180636             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  180637             :        // This traversal helps support internal tools that call static member functions.
  180638             :        // note: this function operates on the memory pools.
  180639             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  180640             :        */
  180641             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  180642             :       /* */
  180643             : 
  180644             : 
  180645             :      public:
  180646             :       /* name Memory Allocation Functions
  180647             :           \brief Memory allocations functions ... incomplete-documentation
  180648             : 
  180649             :           These functions have been made public as part of the design, but they are suggested for internal use 
  180650             :           or by particularly knowledgable users for specialized tools or applications.
  180651             :        */
  180652             :       /* */
  180653             : 
  180654             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  180655             : 
  180656             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  180657             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  180658             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  180659             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  180660             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  180661             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  180662             :           being used with the AST File I/O mechanism.
  180663             :        */
  180664             :           virtual bool isInMemoryPool() override;
  180665             : 
  180666             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  180667             : 
  180668             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  180669             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  180670             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  180671             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  180672             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  180673             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  180674             :           being used with the AST File I/O mechanism.
  180675             :        */
  180676             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  180677             : 
  180678             :       // DQ (4/30/2006): Modified to be a const function.
  180679             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  180680             : 
  180681             :           This functions is part of general support for many possible tools to operate 
  180682             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  180683             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  180684             :           less than the set of pointers used by the AST file I/O. This is part of
  180685             :           work implemented by Andreas, and support tools such as the AST graph generation.
  180686             : 
  180687             :           \warning This function can return unexpected data members and thus the 
  180688             :                    order and the number of elements is unpredicable and subject 
  180689             :                    to change.
  180690             : 
  180691             :           \returns STL vector of pairs of SgNode* and strings
  180692             :        */
  180693             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  180694             : 
  180695             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  180696             : 
  180697             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  180698             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  180699             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  180700             : 
  180701             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  180702             :                    and subject to change.
  180703             :        */
  180704             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  180705             : 
  180706             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  180707             : 
  180708             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  180709             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  180710             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  180711             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  180712             : 
  180713             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  180714             : 
  180715             :           \returns long
  180716             :        */
  180717             :           virtual long getChildIndex( SgNode* childNode ) const override;
  180718             : 
  180719             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  180720             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  180721             :       /* \brief Constructor for use by AST File I/O Mechanism
  180722             : 
  180723             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  180724             :           which obtained via fast binary file I/O from disk.
  180725             :        */
  180726             :        // SgForInitStatement( SgForInitStatementStorageClass& source );
  180727             : 
  180728             : 
  180729             : 
  180730             : 
  180731             : 
  180732             :  // JH (10/24/2005): methods added to support the ast file IO
  180733             :     private:
  180734             : 
  180735             :       /* name AST Memory Allocation Support Functions
  180736             :           \brief Memory allocations support....
  180737             : 
  180738             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  180739             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  180740             :           and support the AST File I/O Mechanism.
  180741             :        */
  180742             :       /* */
  180743             : 
  180744             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  180745             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  180746             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  180747             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  180748             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  180749             :           a correspinding one in the AST_FILE_IO class!
  180750             :        */
  180751             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  180752             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  180753             :       /* \brief Typedef used for low level memory access.
  180754             :        */
  180755             :        // typedef unsigned char* TestType;
  180756             : 
  180757             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  180758             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  180759             :       /* \brief Typedef used to hold memory addresses as values.
  180760             :        */
  180761             :        // typedef unsigned long  AddressType;
  180762             : 
  180763             : 
  180764             : 
  180765             :        // necessary, to have direct access to the p_freepointer and the private methods !
  180766             :       /*! \brief friend class declaration to support AST File I/O */
  180767             :           friend class AST_FILE_IO;
  180768             : 
  180769             :       /*! \brief friend class declaration to support AST File I/O */
  180770             :           friend class SgForInitStatementStorageClass;
  180771             : 
  180772             :       /*! \brief friend class declaration to support AST File I/O */
  180773             :           friend class AstSpecificDataManagingClass;
  180774             : 
  180775             :       /*! \brief friend class declaration to support AST File I/O */
  180776             :           friend class AstSpecificDataManagingClassStorageClass;
  180777             :     public:
  180778             :       /*! \brief IR node constructor to support AST File I/O */
  180779             :           SgForInitStatement( const SgForInitStatementStorageClass& source );
  180780             : 
  180781             :  // private: // JJW hack
  180782             :        /*
  180783             :           name AST Memory Allocation Support Variables
  180784             :           Memory allocations support variables 
  180785             : 
  180786             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  180787             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  180788             :           and support the AST File I/O Mechanism.
  180789             :        */
  180790             :       /* */
  180791             : 
  180792             :     public:
  180793             : 
  180794             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  180795             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  180796             :       // virtual SgNode* addRegExpAttribute();
  180797             :       /*! \brief Support for AST matching using regular expression.
  180798             : 
  180799             :           This support is incomplete and the subject of current research to define 
  180800             :           RegEx trees to support inexact matching.
  180801             :        */
  180802             :           SgForInitStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  180803             : 
  180804             : // *** COMMON CODE SECTION ENDS HERE ***
  180805             : 
  180806             : 
  180807             : // End of memberFunctionString
  180808             : // Start of memberFunctionString
  180809             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  180810             : 
  180811             :      // the generated cast function
  180812             :      // friend ROSE_DLL_API SgForInitStatement* isSgForInitStatement ( SgNode* s );
  180813             : 
  180814             :           typedef SgStatement base_node_type;
  180815             : 
  180816             : 
  180817             : // End of memberFunctionString
  180818             : // Start of memberFunctionString
  180819             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  180820             : 
  180821             :           void post_construction_initialization() override;
  180822             : 
  180823             : 
  180824             : // End of memberFunctionString
  180825             : 
  180826             :      public: 
  180827             :          const SgStatementPtrList&  get_init_stmt() const;
  180828             :          SgStatementPtrList& get_init_stmt(); 
  180829             : 
  180830             : 
  180831             :      public: 
  180832             :          virtual ~SgForInitStatement();
  180833             : 
  180834             : 
  180835             :      public: 
  180836             :          SgForInitStatement(Sg_File_Info* startOfConstruct ); 
  180837             :          SgForInitStatement(); 
  180838             : 
  180839             :     protected:
  180840             : // Start of memberFunctionString
  180841             : SgStatementPtrList p_init_stmt;
  180842             :           
  180843             : // End of memberFunctionString
  180844             : 
  180845             :     friend struct Rose::Traits::generated::describe_node_t<SgForInitStatement>;
  180846             :     friend struct Rose::Traits::generated::describe_field_t<SgForInitStatement, SgStatementPtrList,&SgForInitStatement::p_init_stmt>;
  180847             : 
  180848             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180849             : 
  180850             : 
  180851             :    };
  180852             : #endif
  180853             : 
  180854             : // postdeclarations for SgForInitStatement
  180855             : 
  180856             : /* #line 180857 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180857             : 
  180858             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  180859             : 
  180860             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180861             : 
  180862             : 
  180863             : /* #line 180864 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180864             : 
  180865             : 
  180866             : 
  180867             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180868             : 
  180869             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  180870             : //      This code is automatically generated for each 
  180871             : //      terminal and non-terminal within the defined 
  180872             : //      grammar.  There is a simple way to change the 
  180873             : //      code to fix bugs etc.  See the ROSE README file
  180874             : //      for directions.
  180875             : 
  180876             : // tps: (02/22/2010): Adding DLL export requirements
  180877             : #include "rosedll.h"
  180878             : 
  180879             : // predeclarations for SgCatchStatementSeq
  180880             : 
  180881             : /* #line 180882 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180882             : 
  180883             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  180884             : 
  180885             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  180886             : 
  180887             : #if 1
  180888             : // Class Definition for SgCatchStatementSeq
  180889             : class ROSE_DLL_API SgCatchStatementSeq  : public SgStatement
  180890             :    {
  180891             :      public:
  180892             : 
  180893             : 
  180894             : /* #line 180895 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  180895             : 
  180896             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  180897             : // Start of memberFunctionString
  180898             : /* #line 1459 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  180899             : 
  180900             : /* #line 939 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  180901             : 
  180902             :      public:
  180903             :           virtual void append_catch_statement  ( SgStatement* element );
  180904             :           virtual void prepend_catch_statement ( SgStatement* element );
  180905             : 
  180906             :      public:
  180907             :        // New functions added
  180908             :        // void append_catch_statement  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  180909             :        // void prepend_catch_statement ( const SgStatementPtrList::iterator & list, SgStatement* element );
  180910             : 
  180911             :        // void insert_catch_statement  ( const SgStatementPtrList::iterator & list, SgStatement* element );
  180912             : 
  180913             : 
  180914             :      public:
  180915             : 
  180916             : 
  180917             : 
  180918             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  180919             :           virtual unsigned int cfgIndexForEnd() const override;
  180920             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  180921             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  180922             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  180923             : #endif
  180924             : #if ALT_FIXUP_COPY
  180925             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  180926             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  180927             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  180928             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  180929             : #else
  180930             :        // DQ (10/20/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  180931             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  180932             : #endif
  180933             : 
  180934             : 
  180935             : 
  180936             : // End of memberFunctionString
  180937             : // Start of memberFunctionString
  180938             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  180939             : 
  180940             : // *** COMMON CODE SECTION BEGINS HERE ***
  180941             : 
  180942             :     public:
  180943             : 
  180944             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  180945             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  180946             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  180947             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  180948             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  180949             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  180950             : 
  180951             :       /*! \brief returns a string representing the class name */
  180952             :           virtual std::string class_name() const override;
  180953             : 
  180954             :       /*! \brief returns new style SageIII enum values */
  180955             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  180956             : 
  180957             :       /*! \brief static variant value */
  180958             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  180959             :        // static const VariantT static_variant = V_SgCatchStatementSeq;
  180960             :           enum { static_variant = V_SgCatchStatementSeq };
  180961             : 
  180962             :        /* the generated cast function */
  180963             :       /*! \brief Casts pointer from base class to derived class */
  180964             :           ROSE_DLL_API friend       SgCatchStatementSeq* isSgCatchStatementSeq(       SgNode * s );
  180965             : 
  180966             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  180967             :           ROSE_DLL_API friend const SgCatchStatementSeq* isSgCatchStatementSeq( const SgNode * s );
  180968             : 
  180969             :      // ******************************************
  180970             :      // * Memory Pool / New / Delete
  180971             :      // ******************************************
  180972             : 
  180973             :      public:
  180974             :           /// \private
  180975             :           static const unsigned pool_size; //
  180976             :           /// \private
  180977             :           static std::vector<unsigned char *> pools; //
  180978             :           /// \private
  180979             :           static SgCatchStatementSeq * next_node; // 
  180980             : 
  180981             :           /// \private
  180982             :           static unsigned long initializeStorageClassArray(SgCatchStatementSeqStorageClass *); //
  180983             : 
  180984             :           /// \private
  180985             :           static void clearMemoryPool(); //
  180986             :           static void deleteMemoryPool(); //
  180987             : 
  180988             :           /// \private
  180989             :           static void extendMemoryPoolForFileIO(); //
  180990             : 
  180991             :           /// \private
  180992             :           static SgCatchStatementSeq * getPointerFromGlobalIndex(unsigned long); //
  180993             :           /// \private
  180994             :           static SgCatchStatementSeq * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  180995             : 
  180996             :           /// \private
  180997             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  180998             :           /// \private
  180999             :           static void resetValidFreepointers(); //
  181000             :           /// \private
  181001             :           static unsigned long getNumberOfLastValidPointer(); //
  181002             : 
  181003             : 
  181004             : #if defined(INLINE_FUNCTIONS)
  181005             :       /*! \brief returns pointer to newly allocated IR node */
  181006             :           inline void *operator new (size_t size);
  181007             : #else
  181008             :       /*! \brief returns pointer to newly allocated IR node */
  181009             :           void *operator new (size_t size);
  181010             : #endif
  181011             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  181012             :           void operator delete (void* pointer, size_t size);
  181013             : 
  181014             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  181015         108 :           void operator delete (void* pointer)
  181016             :              {
  181017             :             // This is the generated delete operator...
  181018         108 :                SgCatchStatementSeq::operator delete (pointer,sizeof(SgCatchStatementSeq));
  181019             :              }
  181020             : 
  181021             :       /*! \brief Returns the total number of IR nodes of this type */
  181022             :           static size_t numberOfNodes();
  181023             : 
  181024             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  181025             :           static size_t memoryUsage();
  181026             : 
  181027             :       // End of scope which started in IR nodes specific code 
  181028             :       /* */
  181029             : 
  181030             :       /* name Internal Functions
  181031             :           \brief Internal functions ... incomplete-documentation
  181032             : 
  181033             :           These functions have been made public as part of the design, but they are suggested for internal use 
  181034             :           or by particularly knowledgeable users for specialized tools or applications.
  181035             : 
  181036             :           \internal We could not make these private because they are required by user for special purposes. And 
  181037             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  181038             :          
  181039             :        */
  181040             : 
  181041             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  181042             :        // overridden in every class by *generated* implementation
  181043             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  181044             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  181045             :        // MS: 06/28/02 container of names of variables or container indices 
  181046             :        // used used in the traversal to access AST successor nodes
  181047             :        // overridden in every class by *generated* implementation
  181048             :       /*! \brief container of names of variables or container indices used used in the traversal
  181049             :           to access AST successor nodes overridden in every class by *generated* implementation */
  181050             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  181051             : 
  181052             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  181053             :        // than all the vector copies. The implementation for these functions is generated for each class.
  181054             :       /*! \brief return number of children in the traversal successor list */
  181055             :           virtual size_t get_numberOfTraversalSuccessors() override;
  181056             :       /*! \brief index-based access to traversal successors by index number */
  181057             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  181058             :       /*! \brief index-based access to traversal successors by child node */
  181059             :           virtual size_t get_childIndex(SgNode *child) override;
  181060             : 
  181061             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  181062             :        // MS: 08/16/2002 method for generating RTI information
  181063             :       /*! \brief return C++ Runtime-Time-Information */
  181064             :           virtual RTIReturnType roseRTI() override;
  181065             : #endif
  181066             :       /* */
  181067             : 
  181068             : 
  181069             : 
  181070             :       /* name Deprecated Functions
  181071             :           \brief Deprecated functions ... incomplete-documentation
  181072             : 
  181073             :           These functions have been deprecated from use.
  181074             :        */
  181075             :       /* */
  181076             : 
  181077             :       /*! returns a C style string (char*) representing the class name */
  181078             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  181079             : 
  181080             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  181081             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  181082             : #if 0
  181083             :       /*! returns old style Sage II enum values */
  181084             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  181085             :       /*! returns old style Sage II enum values */
  181086             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  181087             : #endif
  181088             :       /* */
  181089             : 
  181090             : 
  181091             : 
  181092             : 
  181093             :      public:
  181094             :       /* name Traversal Support Functions
  181095             :           \brief Traversal support functions ... incomplete-documentation
  181096             : 
  181097             :           These functions have been made public as part of the design, but they are suggested for internal use 
  181098             :           or by particularly knowledgable users for specialized tools or applications.
  181099             :        */
  181100             :       /* */
  181101             : 
  181102             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  181103             :        // (inferior to ROSE traversal mechanism, experimental).
  181104             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  181105             :        */
  181106             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  181107             : 
  181108             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  181109             :       /*! \brief support for the classic visitor pattern done in GoF */
  181110             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  181111             : 
  181112             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  181113             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  181114             :        */
  181115             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  181116             : 
  181117             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  181118             :        */
  181119             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  181120             : 
  181121             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  181122             :        // This traversal helps support internal tools that call static member functions.
  181123             :        // note: this function operates on the memory pools.
  181124             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  181125             :        */
  181126             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  181127             :       /* */
  181128             : 
  181129             : 
  181130             :      public:
  181131             :       /* name Memory Allocation Functions
  181132             :           \brief Memory allocations functions ... incomplete-documentation
  181133             : 
  181134             :           These functions have been made public as part of the design, but they are suggested for internal use 
  181135             :           or by particularly knowledgable users for specialized tools or applications.
  181136             :        */
  181137             :       /* */
  181138             : 
  181139             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  181140             : 
  181141             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  181142             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  181143             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  181144             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  181145             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  181146             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  181147             :           being used with the AST File I/O mechanism.
  181148             :        */
  181149             :           virtual bool isInMemoryPool() override;
  181150             : 
  181151             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  181152             : 
  181153             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  181154             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  181155             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  181156             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  181157             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  181158             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  181159             :           being used with the AST File I/O mechanism.
  181160             :        */
  181161             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  181162             : 
  181163             :       // DQ (4/30/2006): Modified to be a const function.
  181164             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  181165             : 
  181166             :           This functions is part of general support for many possible tools to operate 
  181167             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  181168             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  181169             :           less than the set of pointers used by the AST file I/O. This is part of
  181170             :           work implemented by Andreas, and support tools such as the AST graph generation.
  181171             : 
  181172             :           \warning This function can return unexpected data members and thus the 
  181173             :                    order and the number of elements is unpredicable and subject 
  181174             :                    to change.
  181175             : 
  181176             :           \returns STL vector of pairs of SgNode* and strings
  181177             :        */
  181178             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  181179             : 
  181180             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  181181             : 
  181182             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  181183             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  181184             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  181185             : 
  181186             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  181187             :                    and subject to change.
  181188             :        */
  181189             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  181190             : 
  181191             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  181192             : 
  181193             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  181194             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  181195             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  181196             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  181197             : 
  181198             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  181199             : 
  181200             :           \returns long
  181201             :        */
  181202             :           virtual long getChildIndex( SgNode* childNode ) const override;
  181203             : 
  181204             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  181205             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  181206             :       /* \brief Constructor for use by AST File I/O Mechanism
  181207             : 
  181208             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  181209             :           which obtained via fast binary file I/O from disk.
  181210             :        */
  181211             :        // SgCatchStatementSeq( SgCatchStatementSeqStorageClass& source );
  181212             : 
  181213             : 
  181214             : 
  181215             : 
  181216             : 
  181217             :  // JH (10/24/2005): methods added to support the ast file IO
  181218             :     private:
  181219             : 
  181220             :       /* name AST Memory Allocation Support Functions
  181221             :           \brief Memory allocations support....
  181222             : 
  181223             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  181224             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  181225             :           and support the AST File I/O Mechanism.
  181226             :        */
  181227             :       /* */
  181228             : 
  181229             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  181230             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  181231             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  181232             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  181233             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  181234             :           a correspinding one in the AST_FILE_IO class!
  181235             :        */
  181236             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  181237             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  181238             :       /* \brief Typedef used for low level memory access.
  181239             :        */
  181240             :        // typedef unsigned char* TestType;
  181241             : 
  181242             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  181243             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  181244             :       /* \brief Typedef used to hold memory addresses as values.
  181245             :        */
  181246             :        // typedef unsigned long  AddressType;
  181247             : 
  181248             : 
  181249             : 
  181250             :        // necessary, to have direct access to the p_freepointer and the private methods !
  181251             :       /*! \brief friend class declaration to support AST File I/O */
  181252             :           friend class AST_FILE_IO;
  181253             : 
  181254             :       /*! \brief friend class declaration to support AST File I/O */
  181255             :           friend class SgCatchStatementSeqStorageClass;
  181256             : 
  181257             :       /*! \brief friend class declaration to support AST File I/O */
  181258             :           friend class AstSpecificDataManagingClass;
  181259             : 
  181260             :       /*! \brief friend class declaration to support AST File I/O */
  181261             :           friend class AstSpecificDataManagingClassStorageClass;
  181262             :     public:
  181263             :       /*! \brief IR node constructor to support AST File I/O */
  181264             :           SgCatchStatementSeq( const SgCatchStatementSeqStorageClass& source );
  181265             : 
  181266             :  // private: // JJW hack
  181267             :        /*
  181268             :           name AST Memory Allocation Support Variables
  181269             :           Memory allocations support variables 
  181270             : 
  181271             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  181272             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  181273             :           and support the AST File I/O Mechanism.
  181274             :        */
  181275             :       /* */
  181276             : 
  181277             :     public:
  181278             : 
  181279             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  181280             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  181281             :       // virtual SgNode* addRegExpAttribute();
  181282             :       /*! \brief Support for AST matching using regular expression.
  181283             : 
  181284             :           This support is incomplete and the subject of current research to define 
  181285             :           RegEx trees to support inexact matching.
  181286             :        */
  181287             :           SgCatchStatementSeq* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  181288             : 
  181289             : // *** COMMON CODE SECTION ENDS HERE ***
  181290             : 
  181291             : 
  181292             : // End of memberFunctionString
  181293             : // Start of memberFunctionString
  181294             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  181295             : 
  181296             :      // the generated cast function
  181297             :      // friend ROSE_DLL_API SgCatchStatementSeq* isSgCatchStatementSeq ( SgNode* s );
  181298             : 
  181299             :           typedef SgStatement base_node_type;
  181300             : 
  181301             : 
  181302             : // End of memberFunctionString
  181303             : // Start of memberFunctionString
  181304             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  181305             : 
  181306             :           void post_construction_initialization() override;
  181307             : 
  181308             : 
  181309             : // End of memberFunctionString
  181310             : 
  181311             :      public: 
  181312             :          const SgStatementPtrList&  get_catch_statement_seq() const;
  181313             :          SgStatementPtrList& get_catch_statement_seq(); 
  181314             : 
  181315             : 
  181316             :      public: 
  181317             :          virtual ~SgCatchStatementSeq();
  181318             : 
  181319             : 
  181320             :      public: 
  181321             :          SgCatchStatementSeq(Sg_File_Info* startOfConstruct ); 
  181322             :          SgCatchStatementSeq(); 
  181323             : 
  181324             :     protected:
  181325             : // Start of memberFunctionString
  181326             : SgStatementPtrList p_catch_statement_seq;
  181327             :           
  181328             : // End of memberFunctionString
  181329             : 
  181330             :     friend struct Rose::Traits::generated::describe_node_t<SgCatchStatementSeq>;
  181331             :     friend struct Rose::Traits::generated::describe_field_t<SgCatchStatementSeq, SgStatementPtrList,&SgCatchStatementSeq::p_catch_statement_seq>;
  181332             : 
  181333             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181334             : 
  181335             : 
  181336             :    };
  181337             : #endif
  181338             : 
  181339             : // postdeclarations for SgCatchStatementSeq
  181340             : 
  181341             : /* #line 181342 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181342             : 
  181343             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  181344             : 
  181345             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181346             : 
  181347             : 
  181348             : /* #line 181349 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181349             : 
  181350             : 
  181351             : 
  181352             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181353             : 
  181354             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  181355             : //      This code is automatically generated for each 
  181356             : //      terminal and non-terminal within the defined 
  181357             : //      grammar.  There is a simple way to change the 
  181358             : //      code to fix bugs etc.  See the ROSE README file
  181359             : //      for directions.
  181360             : 
  181361             : // tps: (02/22/2010): Adding DLL export requirements
  181362             : #include "rosedll.h"
  181363             : 
  181364             : // predeclarations for SgProcessControlStatement
  181365             : 
  181366             : /* #line 181367 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181367             : 
  181368             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  181369             : 
  181370             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181371             : 
  181372             : #if 1
  181373             : // Class Definition for SgProcessControlStatement
  181374             : class ROSE_DLL_API SgProcessControlStatement  : public SgStatement
  181375             :    {
  181376             :      public:
  181377             : 
  181378             : 
  181379             : /* #line 181380 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181380             : 
  181381             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  181382             : // Start of memberFunctionString
  181383             : /* #line 3403 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  181384             : 
  181385             :      public:
  181386             :        // Rasmussen (4/26/2018): Added e_exit for Jovial (exit similar to Fortran stop)
  181387             :        // Rasmussen (5/21/2018): Added e_abort for Jovial
  181388             :        // Rasmussen (7/11/2020): Renamed SgStopOrPauseStatement to SgProcessControlStatement
  181389             :        // PP (2/11/22): added requeue and requeue_with_abort to support Ada
  181390             :           enum control_enum
  181391             :              {
  181392             :                e_unknown,
  181393             :                e_abort,
  181394             :                e_stop,
  181395             :                e_error_stop,
  181396             :                e_exit,
  181397             :                e_pause,
  181398             :              };
  181399             : 
  181400             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  181401             :           virtual unsigned int cfgIndexForEnd() const override;
  181402             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  181403             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  181404             : #endif
  181405             : 
  181406             : 
  181407             : 
  181408             : // End of memberFunctionString
  181409             : // Start of memberFunctionString
  181410             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  181411             : 
  181412             : // *** COMMON CODE SECTION BEGINS HERE ***
  181413             : 
  181414             :     public:
  181415             : 
  181416             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  181417             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  181418             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  181419             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  181420             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  181421             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  181422             : 
  181423             :       /*! \brief returns a string representing the class name */
  181424             :           virtual std::string class_name() const override;
  181425             : 
  181426             :       /*! \brief returns new style SageIII enum values */
  181427             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  181428             : 
  181429             :       /*! \brief static variant value */
  181430             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  181431             :        // static const VariantT static_variant = V_SgProcessControlStatement;
  181432             :           enum { static_variant = V_SgProcessControlStatement };
  181433             : 
  181434             :        /* the generated cast function */
  181435             :       /*! \brief Casts pointer from base class to derived class */
  181436             :           ROSE_DLL_API friend       SgProcessControlStatement* isSgProcessControlStatement(       SgNode * s );
  181437             : 
  181438             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  181439             :           ROSE_DLL_API friend const SgProcessControlStatement* isSgProcessControlStatement( const SgNode * s );
  181440             : 
  181441             :      // ******************************************
  181442             :      // * Memory Pool / New / Delete
  181443             :      // ******************************************
  181444             : 
  181445             :      public:
  181446             :           /// \private
  181447             :           static const unsigned pool_size; //
  181448             :           /// \private
  181449             :           static std::vector<unsigned char *> pools; //
  181450             :           /// \private
  181451             :           static SgProcessControlStatement * next_node; // 
  181452             : 
  181453             :           /// \private
  181454             :           static unsigned long initializeStorageClassArray(SgProcessControlStatementStorageClass *); //
  181455             : 
  181456             :           /// \private
  181457             :           static void clearMemoryPool(); //
  181458             :           static void deleteMemoryPool(); //
  181459             : 
  181460             :           /// \private
  181461             :           static void extendMemoryPoolForFileIO(); //
  181462             : 
  181463             :           /// \private
  181464             :           static SgProcessControlStatement * getPointerFromGlobalIndex(unsigned long); //
  181465             :           /// \private
  181466             :           static SgProcessControlStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  181467             : 
  181468             :           /// \private
  181469             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  181470             :           /// \private
  181471             :           static void resetValidFreepointers(); //
  181472             :           /// \private
  181473             :           static unsigned long getNumberOfLastValidPointer(); //
  181474             : 
  181475             : 
  181476             : #if defined(INLINE_FUNCTIONS)
  181477             :       /*! \brief returns pointer to newly allocated IR node */
  181478             :           inline void *operator new (size_t size);
  181479             : #else
  181480             :       /*! \brief returns pointer to newly allocated IR node */
  181481             :           void *operator new (size_t size);
  181482             : #endif
  181483             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  181484             :           void operator delete (void* pointer, size_t size);
  181485             : 
  181486             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  181487           0 :           void operator delete (void* pointer)
  181488             :              {
  181489             :             // This is the generated delete operator...
  181490           0 :                SgProcessControlStatement::operator delete (pointer,sizeof(SgProcessControlStatement));
  181491             :              }
  181492             : 
  181493             :       /*! \brief Returns the total number of IR nodes of this type */
  181494             :           static size_t numberOfNodes();
  181495             : 
  181496             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  181497             :           static size_t memoryUsage();
  181498             : 
  181499             :       // End of scope which started in IR nodes specific code 
  181500             :       /* */
  181501             : 
  181502             :       /* name Internal Functions
  181503             :           \brief Internal functions ... incomplete-documentation
  181504             : 
  181505             :           These functions have been made public as part of the design, but they are suggested for internal use 
  181506             :           or by particularly knowledgeable users for specialized tools or applications.
  181507             : 
  181508             :           \internal We could not make these private because they are required by user for special purposes. And 
  181509             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  181510             :          
  181511             :        */
  181512             : 
  181513             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  181514             :        // overridden in every class by *generated* implementation
  181515             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  181516             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  181517             :        // MS: 06/28/02 container of names of variables or container indices 
  181518             :        // used used in the traversal to access AST successor nodes
  181519             :        // overridden in every class by *generated* implementation
  181520             :       /*! \brief container of names of variables or container indices used used in the traversal
  181521             :           to access AST successor nodes overridden in every class by *generated* implementation */
  181522             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  181523             : 
  181524             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  181525             :        // than all the vector copies. The implementation for these functions is generated for each class.
  181526             :       /*! \brief return number of children in the traversal successor list */
  181527             :           virtual size_t get_numberOfTraversalSuccessors() override;
  181528             :       /*! \brief index-based access to traversal successors by index number */
  181529             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  181530             :       /*! \brief index-based access to traversal successors by child node */
  181531             :           virtual size_t get_childIndex(SgNode *child) override;
  181532             : 
  181533             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  181534             :        // MS: 08/16/2002 method for generating RTI information
  181535             :       /*! \brief return C++ Runtime-Time-Information */
  181536             :           virtual RTIReturnType roseRTI() override;
  181537             : #endif
  181538             :       /* */
  181539             : 
  181540             : 
  181541             : 
  181542             :       /* name Deprecated Functions
  181543             :           \brief Deprecated functions ... incomplete-documentation
  181544             : 
  181545             :           These functions have been deprecated from use.
  181546             :        */
  181547             :       /* */
  181548             : 
  181549             :       /*! returns a C style string (char*) representing the class name */
  181550             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  181551             : 
  181552             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  181553             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  181554             : #if 0
  181555             :       /*! returns old style Sage II enum values */
  181556             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  181557             :       /*! returns old style Sage II enum values */
  181558             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  181559             : #endif
  181560             :       /* */
  181561             : 
  181562             : 
  181563             : 
  181564             : 
  181565             :      public:
  181566             :       /* name Traversal Support Functions
  181567             :           \brief Traversal support functions ... incomplete-documentation
  181568             : 
  181569             :           These functions have been made public as part of the design, but they are suggested for internal use 
  181570             :           or by particularly knowledgable users for specialized tools or applications.
  181571             :        */
  181572             :       /* */
  181573             : 
  181574             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  181575             :        // (inferior to ROSE traversal mechanism, experimental).
  181576             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  181577             :        */
  181578             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  181579             : 
  181580             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  181581             :       /*! \brief support for the classic visitor pattern done in GoF */
  181582             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  181583             : 
  181584             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  181585             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  181586             :        */
  181587             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  181588             : 
  181589             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  181590             :        */
  181591             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  181592             : 
  181593             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  181594             :        // This traversal helps support internal tools that call static member functions.
  181595             :        // note: this function operates on the memory pools.
  181596             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  181597             :        */
  181598             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  181599             :       /* */
  181600             : 
  181601             : 
  181602             :      public:
  181603             :       /* name Memory Allocation Functions
  181604             :           \brief Memory allocations functions ... incomplete-documentation
  181605             : 
  181606             :           These functions have been made public as part of the design, but they are suggested for internal use 
  181607             :           or by particularly knowledgable users for specialized tools or applications.
  181608             :        */
  181609             :       /* */
  181610             : 
  181611             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  181612             : 
  181613             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  181614             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  181615             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  181616             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  181617             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  181618             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  181619             :           being used with the AST File I/O mechanism.
  181620             :        */
  181621             :           virtual bool isInMemoryPool() override;
  181622             : 
  181623             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  181624             : 
  181625             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  181626             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  181627             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  181628             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  181629             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  181630             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  181631             :           being used with the AST File I/O mechanism.
  181632             :        */
  181633             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  181634             : 
  181635             :       // DQ (4/30/2006): Modified to be a const function.
  181636             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  181637             : 
  181638             :           This functions is part of general support for many possible tools to operate 
  181639             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  181640             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  181641             :           less than the set of pointers used by the AST file I/O. This is part of
  181642             :           work implemented by Andreas, and support tools such as the AST graph generation.
  181643             : 
  181644             :           \warning This function can return unexpected data members and thus the 
  181645             :                    order and the number of elements is unpredicable and subject 
  181646             :                    to change.
  181647             : 
  181648             :           \returns STL vector of pairs of SgNode* and strings
  181649             :        */
  181650             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  181651             : 
  181652             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  181653             : 
  181654             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  181655             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  181656             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  181657             : 
  181658             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  181659             :                    and subject to change.
  181660             :        */
  181661             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  181662             : 
  181663             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  181664             : 
  181665             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  181666             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  181667             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  181668             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  181669             : 
  181670             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  181671             : 
  181672             :           \returns long
  181673             :        */
  181674             :           virtual long getChildIndex( SgNode* childNode ) const override;
  181675             : 
  181676             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  181677             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  181678             :       /* \brief Constructor for use by AST File I/O Mechanism
  181679             : 
  181680             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  181681             :           which obtained via fast binary file I/O from disk.
  181682             :        */
  181683             :        // SgProcessControlStatement( SgProcessControlStatementStorageClass& source );
  181684             : 
  181685             : 
  181686             : 
  181687             : 
  181688             : 
  181689             :  // JH (10/24/2005): methods added to support the ast file IO
  181690             :     private:
  181691             : 
  181692             :       /* name AST Memory Allocation Support Functions
  181693             :           \brief Memory allocations support....
  181694             : 
  181695             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  181696             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  181697             :           and support the AST File I/O Mechanism.
  181698             :        */
  181699             :       /* */
  181700             : 
  181701             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  181702             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  181703             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  181704             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  181705             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  181706             :           a correspinding one in the AST_FILE_IO class!
  181707             :        */
  181708             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  181709             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  181710             :       /* \brief Typedef used for low level memory access.
  181711             :        */
  181712             :        // typedef unsigned char* TestType;
  181713             : 
  181714             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  181715             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  181716             :       /* \brief Typedef used to hold memory addresses as values.
  181717             :        */
  181718             :        // typedef unsigned long  AddressType;
  181719             : 
  181720             : 
  181721             : 
  181722             :        // necessary, to have direct access to the p_freepointer and the private methods !
  181723             :       /*! \brief friend class declaration to support AST File I/O */
  181724             :           friend class AST_FILE_IO;
  181725             : 
  181726             :       /*! \brief friend class declaration to support AST File I/O */
  181727             :           friend class SgProcessControlStatementStorageClass;
  181728             : 
  181729             :       /*! \brief friend class declaration to support AST File I/O */
  181730             :           friend class AstSpecificDataManagingClass;
  181731             : 
  181732             :       /*! \brief friend class declaration to support AST File I/O */
  181733             :           friend class AstSpecificDataManagingClassStorageClass;
  181734             :     public:
  181735             :       /*! \brief IR node constructor to support AST File I/O */
  181736             :           SgProcessControlStatement( const SgProcessControlStatementStorageClass& source );
  181737             : 
  181738             :  // private: // JJW hack
  181739             :        /*
  181740             :           name AST Memory Allocation Support Variables
  181741             :           Memory allocations support variables 
  181742             : 
  181743             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  181744             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  181745             :           and support the AST File I/O Mechanism.
  181746             :        */
  181747             :       /* */
  181748             : 
  181749             :     public:
  181750             : 
  181751             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  181752             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  181753             :       // virtual SgNode* addRegExpAttribute();
  181754             :       /*! \brief Support for AST matching using regular expression.
  181755             : 
  181756             :           This support is incomplete and the subject of current research to define 
  181757             :           RegEx trees to support inexact matching.
  181758             :        */
  181759             :           SgProcessControlStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  181760             : 
  181761             : // *** COMMON CODE SECTION ENDS HERE ***
  181762             : 
  181763             : 
  181764             : // End of memberFunctionString
  181765             : // Start of memberFunctionString
  181766             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  181767             : 
  181768             :      // the generated cast function
  181769             :      // friend ROSE_DLL_API SgProcessControlStatement* isSgProcessControlStatement ( SgNode* s );
  181770             : 
  181771             :           typedef SgStatement base_node_type;
  181772             : 
  181773             : 
  181774             : // End of memberFunctionString
  181775             : // Start of memberFunctionString
  181776             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  181777             : 
  181778             :           void post_construction_initialization() override;
  181779             : 
  181780             : 
  181781             : // End of memberFunctionString
  181782             : 
  181783             :      public: 
  181784             :          SgProcessControlStatement::control_enum get_control_kind() const;
  181785             :          void set_control_kind(SgProcessControlStatement::control_enum control_kind);
  181786             : 
  181787             :      public: 
  181788             :          SgExpression* get_code() const;
  181789             :          void set_code(SgExpression* code);
  181790             : 
  181791             :      public: 
  181792             :          SgExpression* get_quiet() const;
  181793             :          void set_quiet(SgExpression* quiet);
  181794             : 
  181795             : 
  181796             :      public: 
  181797             :          virtual ~SgProcessControlStatement();
  181798             : 
  181799             : 
  181800             :      public: 
  181801             :          SgProcessControlStatement(Sg_File_Info* startOfConstruct , SgExpression* code = NULL); 
  181802             :          SgProcessControlStatement(SgExpression* code); 
  181803             : 
  181804             :     protected:
  181805             : // Start of memberFunctionString
  181806             : SgProcessControlStatement::control_enum p_control_kind;
  181807             :           
  181808             : // End of memberFunctionString
  181809             : // Start of memberFunctionString
  181810             : SgExpression* p_code;
  181811             :           
  181812             : // End of memberFunctionString
  181813             : // Start of memberFunctionString
  181814             : SgExpression* p_quiet;
  181815             :           
  181816             : // End of memberFunctionString
  181817             : 
  181818             :     friend struct Rose::Traits::generated::describe_node_t<SgProcessControlStatement>;
  181819             :     friend struct Rose::Traits::generated::describe_field_t<SgProcessControlStatement, SgProcessControlStatement::control_enum,&SgProcessControlStatement::p_control_kind>;
  181820             :     friend struct Rose::Traits::generated::describe_field_t<SgProcessControlStatement, SgExpression*,&SgProcessControlStatement::p_code>;
  181821             :     friend struct Rose::Traits::generated::describe_field_t<SgProcessControlStatement, SgExpression*,&SgProcessControlStatement::p_quiet>;
  181822             : 
  181823             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181824             : 
  181825             : 
  181826             :    };
  181827             : #endif
  181828             : 
  181829             : // postdeclarations for SgProcessControlStatement
  181830             : 
  181831             : /* #line 181832 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181832             : 
  181833             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  181834             : 
  181835             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181836             : 
  181837             : 
  181838             : /* #line 181839 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181839             : 
  181840             : 
  181841             : 
  181842             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181843             : 
  181844             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  181845             : //      This code is automatically generated for each 
  181846             : //      terminal and non-terminal within the defined 
  181847             : //      grammar.  There is a simple way to change the 
  181848             : //      code to fix bugs etc.  See the ROSE README file
  181849             : //      for directions.
  181850             : 
  181851             : // tps: (02/22/2010): Adding DLL export requirements
  181852             : #include "rosedll.h"
  181853             : 
  181854             : // predeclarations for SgIOStatement
  181855             : 
  181856             : /* #line 181857 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181857             : 
  181858             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  181859             : 
  181860             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  181861             : 
  181862             : #if 1
  181863             : // Class Definition for SgIOStatement
  181864             : class ROSE_DLL_API SgIOStatement  : public SgStatement
  181865             :    {
  181866             :      public:
  181867             : 
  181868             : 
  181869             : /* #line 181870 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  181870             : 
  181871             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  181872             : // Start of memberFunctionString
  181873             : /* #line 3505 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  181874             : 
  181875             :   // This is a base class for all the I/O statements: read, write, open, close, inquire
  181876             :   // In addition it fully represents the statements: backspace, endfile, rewind
  181877             : 
  181878             :      public:
  181879             :       //! Fortran specific classification
  181880             :           enum io_statement_enum
  181881             :              {
  181882             :                e_unknown,
  181883             :                e_read,
  181884             :                e_print,
  181885             :                e_write,
  181886             :                e_open,
  181887             :                e_close,
  181888             :                e_inquire,
  181889             :                e_backspace,
  181890             :                e_endfile,
  181891             :                e_rewind,
  181892             :                e_last_io_statment_kind
  181893             :              };
  181894             : 
  181895             : 
  181896             : 
  181897             : // End of memberFunctionString
  181898             : // Start of memberFunctionString
  181899             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  181900             : 
  181901             : // *** COMMON CODE SECTION BEGINS HERE ***
  181902             : 
  181903             :     public:
  181904             : 
  181905             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  181906             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  181907             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  181908             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  181909             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  181910             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  181911             : 
  181912             :       /*! \brief returns a string representing the class name */
  181913             :           virtual std::string class_name() const override;
  181914             : 
  181915             :       /*! \brief returns new style SageIII enum values */
  181916             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  181917             : 
  181918             :       /*! \brief static variant value */
  181919             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  181920             :        // static const VariantT static_variant = V_SgIOStatement;
  181921             :           enum { static_variant = V_SgIOStatement };
  181922             : 
  181923             :        /* the generated cast function */
  181924             :       /*! \brief Casts pointer from base class to derived class */
  181925             :           ROSE_DLL_API friend       SgIOStatement* isSgIOStatement(       SgNode * s );
  181926             : 
  181927             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  181928             :           ROSE_DLL_API friend const SgIOStatement* isSgIOStatement( const SgNode * s );
  181929             : 
  181930             :      // ******************************************
  181931             :      // * Memory Pool / New / Delete
  181932             :      // ******************************************
  181933             : 
  181934             :      public:
  181935             :           /// \private
  181936             :           static const unsigned pool_size; //
  181937             :           /// \private
  181938             :           static std::vector<unsigned char *> pools; //
  181939             :           /// \private
  181940             :           static SgIOStatement * next_node; // 
  181941             : 
  181942             :           /// \private
  181943             :           static unsigned long initializeStorageClassArray(SgIOStatementStorageClass *); //
  181944             : 
  181945             :           /// \private
  181946             :           static void clearMemoryPool(); //
  181947             :           static void deleteMemoryPool(); //
  181948             : 
  181949             :           /// \private
  181950             :           static void extendMemoryPoolForFileIO(); //
  181951             : 
  181952             :           /// \private
  181953             :           static SgIOStatement * getPointerFromGlobalIndex(unsigned long); //
  181954             :           /// \private
  181955             :           static SgIOStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  181956             : 
  181957             :           /// \private
  181958             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  181959             :           /// \private
  181960             :           static void resetValidFreepointers(); //
  181961             :           /// \private
  181962             :           static unsigned long getNumberOfLastValidPointer(); //
  181963             : 
  181964             : 
  181965             : #if defined(INLINE_FUNCTIONS)
  181966             :       /*! \brief returns pointer to newly allocated IR node */
  181967             :           inline void *operator new (size_t size);
  181968             : #else
  181969             :       /*! \brief returns pointer to newly allocated IR node */
  181970             :           void *operator new (size_t size);
  181971             : #endif
  181972             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  181973             :           void operator delete (void* pointer, size_t size);
  181974             : 
  181975             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  181976           0 :           void operator delete (void* pointer)
  181977             :              {
  181978             :             // This is the generated delete operator...
  181979           0 :                SgIOStatement::operator delete (pointer,sizeof(SgIOStatement));
  181980             :              }
  181981             : 
  181982             :       /*! \brief Returns the total number of IR nodes of this type */
  181983             :           static size_t numberOfNodes();
  181984             : 
  181985             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  181986             :           static size_t memoryUsage();
  181987             : 
  181988             :       // End of scope which started in IR nodes specific code 
  181989             :       /* */
  181990             : 
  181991             :       /* name Internal Functions
  181992             :           \brief Internal functions ... incomplete-documentation
  181993             : 
  181994             :           These functions have been made public as part of the design, but they are suggested for internal use 
  181995             :           or by particularly knowledgeable users for specialized tools or applications.
  181996             : 
  181997             :           \internal We could not make these private because they are required by user for special purposes. And 
  181998             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  181999             :          
  182000             :        */
  182001             : 
  182002             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  182003             :        // overridden in every class by *generated* implementation
  182004             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  182005             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  182006             :        // MS: 06/28/02 container of names of variables or container indices 
  182007             :        // used used in the traversal to access AST successor nodes
  182008             :        // overridden in every class by *generated* implementation
  182009             :       /*! \brief container of names of variables or container indices used used in the traversal
  182010             :           to access AST successor nodes overridden in every class by *generated* implementation */
  182011             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  182012             : 
  182013             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  182014             :        // than all the vector copies. The implementation for these functions is generated for each class.
  182015             :       /*! \brief return number of children in the traversal successor list */
  182016             :           virtual size_t get_numberOfTraversalSuccessors() override;
  182017             :       /*! \brief index-based access to traversal successors by index number */
  182018             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  182019             :       /*! \brief index-based access to traversal successors by child node */
  182020             :           virtual size_t get_childIndex(SgNode *child) override;
  182021             : 
  182022             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  182023             :        // MS: 08/16/2002 method for generating RTI information
  182024             :       /*! \brief return C++ Runtime-Time-Information */
  182025             :           virtual RTIReturnType roseRTI() override;
  182026             : #endif
  182027             :       /* */
  182028             : 
  182029             : 
  182030             : 
  182031             :       /* name Deprecated Functions
  182032             :           \brief Deprecated functions ... incomplete-documentation
  182033             : 
  182034             :           These functions have been deprecated from use.
  182035             :        */
  182036             :       /* */
  182037             : 
  182038             :       /*! returns a C style string (char*) representing the class name */
  182039             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  182040             : 
  182041             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  182042             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  182043             : #if 0
  182044             :       /*! returns old style Sage II enum values */
  182045             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  182046             :       /*! returns old style Sage II enum values */
  182047             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  182048             : #endif
  182049             :       /* */
  182050             : 
  182051             : 
  182052             : 
  182053             : 
  182054             :      public:
  182055             :       /* name Traversal Support Functions
  182056             :           \brief Traversal support functions ... incomplete-documentation
  182057             : 
  182058             :           These functions have been made public as part of the design, but they are suggested for internal use 
  182059             :           or by particularly knowledgable users for specialized tools or applications.
  182060             :        */
  182061             :       /* */
  182062             : 
  182063             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  182064             :        // (inferior to ROSE traversal mechanism, experimental).
  182065             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  182066             :        */
  182067             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  182068             : 
  182069             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  182070             :       /*! \brief support for the classic visitor pattern done in GoF */
  182071             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  182072             : 
  182073             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  182074             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  182075             :        */
  182076             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  182077             : 
  182078             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  182079             :        */
  182080             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  182081             : 
  182082             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  182083             :        // This traversal helps support internal tools that call static member functions.
  182084             :        // note: this function operates on the memory pools.
  182085             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  182086             :        */
  182087             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  182088             :       /* */
  182089             : 
  182090             : 
  182091             :      public:
  182092             :       /* name Memory Allocation Functions
  182093             :           \brief Memory allocations functions ... incomplete-documentation
  182094             : 
  182095             :           These functions have been made public as part of the design, but they are suggested for internal use 
  182096             :           or by particularly knowledgable users for specialized tools or applications.
  182097             :        */
  182098             :       /* */
  182099             : 
  182100             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  182101             : 
  182102             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  182103             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  182104             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  182105             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  182106             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  182107             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  182108             :           being used with the AST File I/O mechanism.
  182109             :        */
  182110             :           virtual bool isInMemoryPool() override;
  182111             : 
  182112             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  182113             : 
  182114             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  182115             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  182116             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  182117             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  182118             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  182119             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  182120             :           being used with the AST File I/O mechanism.
  182121             :        */
  182122             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  182123             : 
  182124             :       // DQ (4/30/2006): Modified to be a const function.
  182125             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  182126             : 
  182127             :           This functions is part of general support for many possible tools to operate 
  182128             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  182129             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  182130             :           less than the set of pointers used by the AST file I/O. This is part of
  182131             :           work implemented by Andreas, and support tools such as the AST graph generation.
  182132             : 
  182133             :           \warning This function can return unexpected data members and thus the 
  182134             :                    order and the number of elements is unpredicable and subject 
  182135             :                    to change.
  182136             : 
  182137             :           \returns STL vector of pairs of SgNode* and strings
  182138             :        */
  182139             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  182140             : 
  182141             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  182142             : 
  182143             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  182144             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  182145             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  182146             : 
  182147             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  182148             :                    and subject to change.
  182149             :        */
  182150             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  182151             : 
  182152             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  182153             : 
  182154             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  182155             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  182156             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  182157             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  182158             : 
  182159             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  182160             : 
  182161             :           \returns long
  182162             :        */
  182163             :           virtual long getChildIndex( SgNode* childNode ) const override;
  182164             : 
  182165             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  182166             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  182167             :       /* \brief Constructor for use by AST File I/O Mechanism
  182168             : 
  182169             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  182170             :           which obtained via fast binary file I/O from disk.
  182171             :        */
  182172             :        // SgIOStatement( SgIOStatementStorageClass& source );
  182173             : 
  182174             : 
  182175             : 
  182176             : 
  182177             : 
  182178             :  // JH (10/24/2005): methods added to support the ast file IO
  182179             :     private:
  182180             : 
  182181             :       /* name AST Memory Allocation Support Functions
  182182             :           \brief Memory allocations support....
  182183             : 
  182184             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  182185             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  182186             :           and support the AST File I/O Mechanism.
  182187             :        */
  182188             :       /* */
  182189             : 
  182190             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  182191             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  182192             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  182193             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  182194             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  182195             :           a correspinding one in the AST_FILE_IO class!
  182196             :        */
  182197             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  182198             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  182199             :       /* \brief Typedef used for low level memory access.
  182200             :        */
  182201             :        // typedef unsigned char* TestType;
  182202             : 
  182203             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  182204             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  182205             :       /* \brief Typedef used to hold memory addresses as values.
  182206             :        */
  182207             :        // typedef unsigned long  AddressType;
  182208             : 
  182209             : 
  182210             : 
  182211             :        // necessary, to have direct access to the p_freepointer and the private methods !
  182212             :       /*! \brief friend class declaration to support AST File I/O */
  182213             :           friend class AST_FILE_IO;
  182214             : 
  182215             :       /*! \brief friend class declaration to support AST File I/O */
  182216             :           friend class SgIOStatementStorageClass;
  182217             : 
  182218             :       /*! \brief friend class declaration to support AST File I/O */
  182219             :           friend class AstSpecificDataManagingClass;
  182220             : 
  182221             :       /*! \brief friend class declaration to support AST File I/O */
  182222             :           friend class AstSpecificDataManagingClassStorageClass;
  182223             :     public:
  182224             :       /*! \brief IR node constructor to support AST File I/O */
  182225             :           SgIOStatement( const SgIOStatementStorageClass& source );
  182226             : 
  182227             :  // private: // JJW hack
  182228             :        /*
  182229             :           name AST Memory Allocation Support Variables
  182230             :           Memory allocations support variables 
  182231             : 
  182232             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  182233             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  182234             :           and support the AST File I/O Mechanism.
  182235             :        */
  182236             :       /* */
  182237             : 
  182238             :     public:
  182239             : 
  182240             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  182241             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  182242             :       // virtual SgNode* addRegExpAttribute();
  182243             :       /*! \brief Support for AST matching using regular expression.
  182244             : 
  182245             :           This support is incomplete and the subject of current research to define 
  182246             :           RegEx trees to support inexact matching.
  182247             :        */
  182248             :           SgIOStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  182249             : 
  182250             : // *** COMMON CODE SECTION ENDS HERE ***
  182251             : 
  182252             : 
  182253             : // End of memberFunctionString
  182254             : // Start of memberFunctionString
  182255             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  182256             : 
  182257             :      // the generated cast function
  182258             :      // friend ROSE_DLL_API SgIOStatement* isSgIOStatement ( SgNode* s );
  182259             : 
  182260             :           typedef SgStatement base_node_type;
  182261             : 
  182262             : 
  182263             : // End of memberFunctionString
  182264             : // Start of memberFunctionString
  182265             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  182266             : 
  182267             :           void post_construction_initialization() override;
  182268             : 
  182269             : 
  182270             : // End of memberFunctionString
  182271             : 
  182272             :      public: 
  182273             :          SgIOStatement::io_statement_enum get_io_statement() const;
  182274             :          void set_io_statement(SgIOStatement::io_statement_enum io_statement);
  182275             : 
  182276             :      public: 
  182277             :          SgExprListExp* get_io_stmt_list() const;
  182278             :          void set_io_stmt_list(SgExprListExp* io_stmt_list);
  182279             : 
  182280             :      public: 
  182281             :          SgExpression* get_unit() const;
  182282             :          void set_unit(SgExpression* unit);
  182283             : 
  182284             :      public: 
  182285             :          SgExpression* get_iostat() const;
  182286             :          void set_iostat(SgExpression* iostat);
  182287             : 
  182288             :      public: 
  182289             :          SgExpression* get_err() const;
  182290             :          void set_err(SgExpression* err);
  182291             : 
  182292             :      public: 
  182293             :          SgExpression* get_iomsg() const;
  182294             :          void set_iomsg(SgExpression* iomsg);
  182295             : 
  182296             : 
  182297             :      public: 
  182298             :          virtual ~SgIOStatement();
  182299             : 
  182300             : 
  182301             :      public: 
  182302             :          SgIOStatement(Sg_File_Info* startOfConstruct ); 
  182303             :          SgIOStatement(); 
  182304             : 
  182305             :     protected:
  182306             : // Start of memberFunctionString
  182307             : SgIOStatement::io_statement_enum p_io_statement;
  182308             :           
  182309             : // End of memberFunctionString
  182310             : // Start of memberFunctionString
  182311             : SgExprListExp* p_io_stmt_list;
  182312             :           
  182313             : // End of memberFunctionString
  182314             : // Start of memberFunctionString
  182315             : SgExpression* p_unit;
  182316             :           
  182317             : // End of memberFunctionString
  182318             : // Start of memberFunctionString
  182319             : SgExpression* p_iostat;
  182320             :           
  182321             : // End of memberFunctionString
  182322             : // Start of memberFunctionString
  182323             : SgExpression* p_err;
  182324             :           
  182325             : // End of memberFunctionString
  182326             : // Start of memberFunctionString
  182327             : SgExpression* p_iomsg;
  182328             :           
  182329             : // End of memberFunctionString
  182330             : 
  182331             :     friend struct Rose::Traits::generated::describe_node_t<SgIOStatement>;
  182332             :     friend struct Rose::Traits::generated::describe_field_t<SgIOStatement, SgIOStatement::io_statement_enum,&SgIOStatement::p_io_statement>;
  182333             :     friend struct Rose::Traits::generated::describe_field_t<SgIOStatement, SgExprListExp*,&SgIOStatement::p_io_stmt_list>;
  182334             :     friend struct Rose::Traits::generated::describe_field_t<SgIOStatement, SgExpression*,&SgIOStatement::p_unit>;
  182335             :     friend struct Rose::Traits::generated::describe_field_t<SgIOStatement, SgExpression*,&SgIOStatement::p_iostat>;
  182336             :     friend struct Rose::Traits::generated::describe_field_t<SgIOStatement, SgExpression*,&SgIOStatement::p_err>;
  182337             :     friend struct Rose::Traits::generated::describe_field_t<SgIOStatement, SgExpression*,&SgIOStatement::p_iomsg>;
  182338             : 
  182339             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182340             : 
  182341             : 
  182342             :    };
  182343             : #endif
  182344             : 
  182345             : // postdeclarations for SgIOStatement
  182346             : 
  182347             : /* #line 182348 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182348             : 
  182349             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  182350             : 
  182351             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182352             : 
  182353             : 
  182354             : /* #line 182355 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182355             : 
  182356             : 
  182357             : 
  182358             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182359             : 
  182360             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  182361             : //      This code is automatically generated for each 
  182362             : //      terminal and non-terminal within the defined 
  182363             : //      grammar.  There is a simple way to change the 
  182364             : //      code to fix bugs etc.  See the ROSE README file
  182365             : //      for directions.
  182366             : 
  182367             : // tps: (02/22/2010): Adding DLL export requirements
  182368             : #include "rosedll.h"
  182369             : 
  182370             : // predeclarations for SgPrintStatement
  182371             : 
  182372             : /* #line 182373 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182373             : 
  182374             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  182375             : 
  182376             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182377             : 
  182378             : #if 1
  182379             : // Class Definition for SgPrintStatement
  182380             : class ROSE_DLL_API SgPrintStatement  : public SgIOStatement
  182381             :    {
  182382             :      public:
  182383             : 
  182384             : 
  182385             : /* #line 182386 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182386             : 
  182387             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  182388             : // Start of memberFunctionString
  182389             : /* #line 3528 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  182390             : 
  182391             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  182392             :      virtual unsigned int cfgIndexForEnd() const override;
  182393             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  182394             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  182395             : #endif
  182396             : 
  182397             : 
  182398             : // End of memberFunctionString
  182399             : // Start of memberFunctionString
  182400             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  182401             : 
  182402             : // *** COMMON CODE SECTION BEGINS HERE ***
  182403             : 
  182404             :     public:
  182405             : 
  182406             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  182407             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  182408             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  182409             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  182410             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  182411             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  182412             : 
  182413             :       /*! \brief returns a string representing the class name */
  182414             :           virtual std::string class_name() const override;
  182415             : 
  182416             :       /*! \brief returns new style SageIII enum values */
  182417             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  182418             : 
  182419             :       /*! \brief static variant value */
  182420             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  182421             :        // static const VariantT static_variant = V_SgPrintStatement;
  182422             :           enum { static_variant = V_SgPrintStatement };
  182423             : 
  182424             :        /* the generated cast function */
  182425             :       /*! \brief Casts pointer from base class to derived class */
  182426             :           ROSE_DLL_API friend       SgPrintStatement* isSgPrintStatement(       SgNode * s );
  182427             : 
  182428             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  182429             :           ROSE_DLL_API friend const SgPrintStatement* isSgPrintStatement( const SgNode * s );
  182430             : 
  182431             :      // ******************************************
  182432             :      // * Memory Pool / New / Delete
  182433             :      // ******************************************
  182434             : 
  182435             :      public:
  182436             :           /// \private
  182437             :           static const unsigned pool_size; //
  182438             :           /// \private
  182439             :           static std::vector<unsigned char *> pools; //
  182440             :           /// \private
  182441             :           static SgPrintStatement * next_node; // 
  182442             : 
  182443             :           /// \private
  182444             :           static unsigned long initializeStorageClassArray(SgPrintStatementStorageClass *); //
  182445             : 
  182446             :           /// \private
  182447             :           static void clearMemoryPool(); //
  182448             :           static void deleteMemoryPool(); //
  182449             : 
  182450             :           /// \private
  182451             :           static void extendMemoryPoolForFileIO(); //
  182452             : 
  182453             :           /// \private
  182454             :           static SgPrintStatement * getPointerFromGlobalIndex(unsigned long); //
  182455             :           /// \private
  182456             :           static SgPrintStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  182457             : 
  182458             :           /// \private
  182459             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  182460             :           /// \private
  182461             :           static void resetValidFreepointers(); //
  182462             :           /// \private
  182463             :           static unsigned long getNumberOfLastValidPointer(); //
  182464             : 
  182465             : 
  182466             : #if defined(INLINE_FUNCTIONS)
  182467             :       /*! \brief returns pointer to newly allocated IR node */
  182468             :           inline void *operator new (size_t size);
  182469             : #else
  182470             :       /*! \brief returns pointer to newly allocated IR node */
  182471             :           void *operator new (size_t size);
  182472             : #endif
  182473             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  182474             :           void operator delete (void* pointer, size_t size);
  182475             : 
  182476             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  182477           1 :           void operator delete (void* pointer)
  182478             :              {
  182479             :             // This is the generated delete operator...
  182480           1 :                SgPrintStatement::operator delete (pointer,sizeof(SgPrintStatement));
  182481             :              }
  182482             : 
  182483             :       /*! \brief Returns the total number of IR nodes of this type */
  182484             :           static size_t numberOfNodes();
  182485             : 
  182486             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  182487             :           static size_t memoryUsage();
  182488             : 
  182489             :       // End of scope which started in IR nodes specific code 
  182490             :       /* */
  182491             : 
  182492             :       /* name Internal Functions
  182493             :           \brief Internal functions ... incomplete-documentation
  182494             : 
  182495             :           These functions have been made public as part of the design, but they are suggested for internal use 
  182496             :           or by particularly knowledgeable users for specialized tools or applications.
  182497             : 
  182498             :           \internal We could not make these private because they are required by user for special purposes. And 
  182499             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  182500             :          
  182501             :        */
  182502             : 
  182503             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  182504             :        // overridden in every class by *generated* implementation
  182505             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  182506             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  182507             :        // MS: 06/28/02 container of names of variables or container indices 
  182508             :        // used used in the traversal to access AST successor nodes
  182509             :        // overridden in every class by *generated* implementation
  182510             :       /*! \brief container of names of variables or container indices used used in the traversal
  182511             :           to access AST successor nodes overridden in every class by *generated* implementation */
  182512             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  182513             : 
  182514             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  182515             :        // than all the vector copies. The implementation for these functions is generated for each class.
  182516             :       /*! \brief return number of children in the traversal successor list */
  182517             :           virtual size_t get_numberOfTraversalSuccessors() override;
  182518             :       /*! \brief index-based access to traversal successors by index number */
  182519             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  182520             :       /*! \brief index-based access to traversal successors by child node */
  182521             :           virtual size_t get_childIndex(SgNode *child) override;
  182522             : 
  182523             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  182524             :        // MS: 08/16/2002 method for generating RTI information
  182525             :       /*! \brief return C++ Runtime-Time-Information */
  182526             :           virtual RTIReturnType roseRTI() override;
  182527             : #endif
  182528             :       /* */
  182529             : 
  182530             : 
  182531             : 
  182532             :       /* name Deprecated Functions
  182533             :           \brief Deprecated functions ... incomplete-documentation
  182534             : 
  182535             :           These functions have been deprecated from use.
  182536             :        */
  182537             :       /* */
  182538             : 
  182539             :       /*! returns a C style string (char*) representing the class name */
  182540             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  182541             : 
  182542             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  182543             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  182544             : #if 0
  182545             :       /*! returns old style Sage II enum values */
  182546             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  182547             :       /*! returns old style Sage II enum values */
  182548             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  182549             : #endif
  182550             :       /* */
  182551             : 
  182552             : 
  182553             : 
  182554             : 
  182555             :      public:
  182556             :       /* name Traversal Support Functions
  182557             :           \brief Traversal support functions ... incomplete-documentation
  182558             : 
  182559             :           These functions have been made public as part of the design, but they are suggested for internal use 
  182560             :           or by particularly knowledgable users for specialized tools or applications.
  182561             :        */
  182562             :       /* */
  182563             : 
  182564             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  182565             :        // (inferior to ROSE traversal mechanism, experimental).
  182566             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  182567             :        */
  182568             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  182569             : 
  182570             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  182571             :       /*! \brief support for the classic visitor pattern done in GoF */
  182572             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  182573             : 
  182574             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  182575             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  182576             :        */
  182577             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  182578             : 
  182579             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  182580             :        */
  182581             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  182582             : 
  182583             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  182584             :        // This traversal helps support internal tools that call static member functions.
  182585             :        // note: this function operates on the memory pools.
  182586             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  182587             :        */
  182588             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  182589             :       /* */
  182590             : 
  182591             : 
  182592             :      public:
  182593             :       /* name Memory Allocation Functions
  182594             :           \brief Memory allocations functions ... incomplete-documentation
  182595             : 
  182596             :           These functions have been made public as part of the design, but they are suggested for internal use 
  182597             :           or by particularly knowledgable users for specialized tools or applications.
  182598             :        */
  182599             :       /* */
  182600             : 
  182601             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  182602             : 
  182603             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  182604             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  182605             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  182606             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  182607             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  182608             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  182609             :           being used with the AST File I/O mechanism.
  182610             :        */
  182611             :           virtual bool isInMemoryPool() override;
  182612             : 
  182613             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  182614             : 
  182615             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  182616             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  182617             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  182618             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  182619             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  182620             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  182621             :           being used with the AST File I/O mechanism.
  182622             :        */
  182623             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  182624             : 
  182625             :       // DQ (4/30/2006): Modified to be a const function.
  182626             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  182627             : 
  182628             :           This functions is part of general support for many possible tools to operate 
  182629             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  182630             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  182631             :           less than the set of pointers used by the AST file I/O. This is part of
  182632             :           work implemented by Andreas, and support tools such as the AST graph generation.
  182633             : 
  182634             :           \warning This function can return unexpected data members and thus the 
  182635             :                    order and the number of elements is unpredicable and subject 
  182636             :                    to change.
  182637             : 
  182638             :           \returns STL vector of pairs of SgNode* and strings
  182639             :        */
  182640             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  182641             : 
  182642             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  182643             : 
  182644             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  182645             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  182646             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  182647             : 
  182648             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  182649             :                    and subject to change.
  182650             :        */
  182651             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  182652             : 
  182653             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  182654             : 
  182655             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  182656             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  182657             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  182658             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  182659             : 
  182660             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  182661             : 
  182662             :           \returns long
  182663             :        */
  182664             :           virtual long getChildIndex( SgNode* childNode ) const override;
  182665             : 
  182666             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  182667             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  182668             :       /* \brief Constructor for use by AST File I/O Mechanism
  182669             : 
  182670             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  182671             :           which obtained via fast binary file I/O from disk.
  182672             :        */
  182673             :        // SgPrintStatement( SgPrintStatementStorageClass& source );
  182674             : 
  182675             : 
  182676             : 
  182677             : 
  182678             : 
  182679             :  // JH (10/24/2005): methods added to support the ast file IO
  182680             :     private:
  182681             : 
  182682             :       /* name AST Memory Allocation Support Functions
  182683             :           \brief Memory allocations support....
  182684             : 
  182685             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  182686             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  182687             :           and support the AST File I/O Mechanism.
  182688             :        */
  182689             :       /* */
  182690             : 
  182691             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  182692             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  182693             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  182694             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  182695             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  182696             :           a correspinding one in the AST_FILE_IO class!
  182697             :        */
  182698             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  182699             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  182700             :       /* \brief Typedef used for low level memory access.
  182701             :        */
  182702             :        // typedef unsigned char* TestType;
  182703             : 
  182704             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  182705             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  182706             :       /* \brief Typedef used to hold memory addresses as values.
  182707             :        */
  182708             :        // typedef unsigned long  AddressType;
  182709             : 
  182710             : 
  182711             : 
  182712             :        // necessary, to have direct access to the p_freepointer and the private methods !
  182713             :       /*! \brief friend class declaration to support AST File I/O */
  182714             :           friend class AST_FILE_IO;
  182715             : 
  182716             :       /*! \brief friend class declaration to support AST File I/O */
  182717             :           friend class SgPrintStatementStorageClass;
  182718             : 
  182719             :       /*! \brief friend class declaration to support AST File I/O */
  182720             :           friend class AstSpecificDataManagingClass;
  182721             : 
  182722             :       /*! \brief friend class declaration to support AST File I/O */
  182723             :           friend class AstSpecificDataManagingClassStorageClass;
  182724             :     public:
  182725             :       /*! \brief IR node constructor to support AST File I/O */
  182726             :           SgPrintStatement( const SgPrintStatementStorageClass& source );
  182727             : 
  182728             :  // private: // JJW hack
  182729             :        /*
  182730             :           name AST Memory Allocation Support Variables
  182731             :           Memory allocations support variables 
  182732             : 
  182733             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  182734             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  182735             :           and support the AST File I/O Mechanism.
  182736             :        */
  182737             :       /* */
  182738             : 
  182739             :     public:
  182740             : 
  182741             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  182742             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  182743             :       // virtual SgNode* addRegExpAttribute();
  182744             :       /*! \brief Support for AST matching using regular expression.
  182745             : 
  182746             :           This support is incomplete and the subject of current research to define 
  182747             :           RegEx trees to support inexact matching.
  182748             :        */
  182749             :           SgPrintStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  182750             : 
  182751             : // *** COMMON CODE SECTION ENDS HERE ***
  182752             : 
  182753             : 
  182754             : // End of memberFunctionString
  182755             : // Start of memberFunctionString
  182756             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  182757             : 
  182758             :      // the generated cast function
  182759             :      // friend ROSE_DLL_API SgPrintStatement* isSgPrintStatement ( SgNode* s );
  182760             : 
  182761             :           typedef SgIOStatement base_node_type;
  182762             : 
  182763             : 
  182764             : // End of memberFunctionString
  182765             : // Start of memberFunctionString
  182766             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  182767             : 
  182768             :           void post_construction_initialization() override;
  182769             : 
  182770             : 
  182771             : // End of memberFunctionString
  182772             : 
  182773             :      public: 
  182774             :          SgExpression* get_format() const;
  182775             :          void set_format(SgExpression* format);
  182776             : 
  182777             : 
  182778             :      public: 
  182779             :          virtual ~SgPrintStatement();
  182780             : 
  182781             : 
  182782             :      public: 
  182783             :          SgPrintStatement(Sg_File_Info* startOfConstruct ); 
  182784             :          SgPrintStatement(); 
  182785             : 
  182786             :     protected:
  182787             : // Start of memberFunctionString
  182788             : SgExpression* p_format;
  182789             :           
  182790             : // End of memberFunctionString
  182791             : 
  182792             :     friend struct Rose::Traits::generated::describe_node_t<SgPrintStatement>;
  182793             :     friend struct Rose::Traits::generated::describe_field_t<SgPrintStatement, SgExpression*,&SgPrintStatement::p_format>;
  182794             : 
  182795             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182796             : 
  182797             : 
  182798             :    };
  182799             : #endif
  182800             : 
  182801             : // postdeclarations for SgPrintStatement
  182802             : 
  182803             : /* #line 182804 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182804             : 
  182805             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  182806             : 
  182807             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182808             : 
  182809             : 
  182810             : /* #line 182811 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182811             : 
  182812             : 
  182813             : 
  182814             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182815             : 
  182816             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  182817             : //      This code is automatically generated for each 
  182818             : //      terminal and non-terminal within the defined 
  182819             : //      grammar.  There is a simple way to change the 
  182820             : //      code to fix bugs etc.  See the ROSE README file
  182821             : //      for directions.
  182822             : 
  182823             : // tps: (02/22/2010): Adding DLL export requirements
  182824             : #include "rosedll.h"
  182825             : 
  182826             : // predeclarations for SgReadStatement
  182827             : 
  182828             : /* #line 182829 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182829             : 
  182830             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  182831             : 
  182832             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  182833             : 
  182834             : #if 1
  182835             : // Class Definition for SgReadStatement
  182836             : class ROSE_DLL_API SgReadStatement  : public SgIOStatement
  182837             :    {
  182838             :      public:
  182839             : 
  182840             : 
  182841             : /* #line 182842 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  182842             : 
  182843             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  182844             : // Start of memberFunctionString
  182845             : /* #line 3536 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  182846             : 
  182847             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  182848             :      virtual unsigned int cfgIndexForEnd() const override;
  182849             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  182850             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  182851             : #endif
  182852             : 
  182853             : 
  182854             : // End of memberFunctionString
  182855             : // Start of memberFunctionString
  182856             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  182857             : 
  182858             : // *** COMMON CODE SECTION BEGINS HERE ***
  182859             : 
  182860             :     public:
  182861             : 
  182862             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  182863             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  182864             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  182865             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  182866             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  182867             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  182868             : 
  182869             :       /*! \brief returns a string representing the class name */
  182870             :           virtual std::string class_name() const override;
  182871             : 
  182872             :       /*! \brief returns new style SageIII enum values */
  182873             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  182874             : 
  182875             :       /*! \brief static variant value */
  182876             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  182877             :        // static const VariantT static_variant = V_SgReadStatement;
  182878             :           enum { static_variant = V_SgReadStatement };
  182879             : 
  182880             :        /* the generated cast function */
  182881             :       /*! \brief Casts pointer from base class to derived class */
  182882             :           ROSE_DLL_API friend       SgReadStatement* isSgReadStatement(       SgNode * s );
  182883             : 
  182884             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  182885             :           ROSE_DLL_API friend const SgReadStatement* isSgReadStatement( const SgNode * s );
  182886             : 
  182887             :      // ******************************************
  182888             :      // * Memory Pool / New / Delete
  182889             :      // ******************************************
  182890             : 
  182891             :      public:
  182892             :           /// \private
  182893             :           static const unsigned pool_size; //
  182894             :           /// \private
  182895             :           static std::vector<unsigned char *> pools; //
  182896             :           /// \private
  182897             :           static SgReadStatement * next_node; // 
  182898             : 
  182899             :           /// \private
  182900             :           static unsigned long initializeStorageClassArray(SgReadStatementStorageClass *); //
  182901             : 
  182902             :           /// \private
  182903             :           static void clearMemoryPool(); //
  182904             :           static void deleteMemoryPool(); //
  182905             : 
  182906             :           /// \private
  182907             :           static void extendMemoryPoolForFileIO(); //
  182908             : 
  182909             :           /// \private
  182910             :           static SgReadStatement * getPointerFromGlobalIndex(unsigned long); //
  182911             :           /// \private
  182912             :           static SgReadStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  182913             : 
  182914             :           /// \private
  182915             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  182916             :           /// \private
  182917             :           static void resetValidFreepointers(); //
  182918             :           /// \private
  182919             :           static unsigned long getNumberOfLastValidPointer(); //
  182920             : 
  182921             : 
  182922             : #if defined(INLINE_FUNCTIONS)
  182923             :       /*! \brief returns pointer to newly allocated IR node */
  182924             :           inline void *operator new (size_t size);
  182925             : #else
  182926             :       /*! \brief returns pointer to newly allocated IR node */
  182927             :           void *operator new (size_t size);
  182928             : #endif
  182929             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  182930             :           void operator delete (void* pointer, size_t size);
  182931             : 
  182932             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  182933           0 :           void operator delete (void* pointer)
  182934             :              {
  182935             :             // This is the generated delete operator...
  182936           0 :                SgReadStatement::operator delete (pointer,sizeof(SgReadStatement));
  182937             :              }
  182938             : 
  182939             :       /*! \brief Returns the total number of IR nodes of this type */
  182940             :           static size_t numberOfNodes();
  182941             : 
  182942             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  182943             :           static size_t memoryUsage();
  182944             : 
  182945             :       // End of scope which started in IR nodes specific code 
  182946             :       /* */
  182947             : 
  182948             :       /* name Internal Functions
  182949             :           \brief Internal functions ... incomplete-documentation
  182950             : 
  182951             :           These functions have been made public as part of the design, but they are suggested for internal use 
  182952             :           or by particularly knowledgeable users for specialized tools or applications.
  182953             : 
  182954             :           \internal We could not make these private because they are required by user for special purposes. And 
  182955             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  182956             :          
  182957             :        */
  182958             : 
  182959             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  182960             :        // overridden in every class by *generated* implementation
  182961             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  182962             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  182963             :        // MS: 06/28/02 container of names of variables or container indices 
  182964             :        // used used in the traversal to access AST successor nodes
  182965             :        // overridden in every class by *generated* implementation
  182966             :       /*! \brief container of names of variables or container indices used used in the traversal
  182967             :           to access AST successor nodes overridden in every class by *generated* implementation */
  182968             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  182969             : 
  182970             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  182971             :        // than all the vector copies. The implementation for these functions is generated for each class.
  182972             :       /*! \brief return number of children in the traversal successor list */
  182973             :           virtual size_t get_numberOfTraversalSuccessors() override;
  182974             :       /*! \brief index-based access to traversal successors by index number */
  182975             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  182976             :       /*! \brief index-based access to traversal successors by child node */
  182977             :           virtual size_t get_childIndex(SgNode *child) override;
  182978             : 
  182979             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  182980             :        // MS: 08/16/2002 method for generating RTI information
  182981             :       /*! \brief return C++ Runtime-Time-Information */
  182982             :           virtual RTIReturnType roseRTI() override;
  182983             : #endif
  182984             :       /* */
  182985             : 
  182986             : 
  182987             : 
  182988             :       /* name Deprecated Functions
  182989             :           \brief Deprecated functions ... incomplete-documentation
  182990             : 
  182991             :           These functions have been deprecated from use.
  182992             :        */
  182993             :       /* */
  182994             : 
  182995             :       /*! returns a C style string (char*) representing the class name */
  182996             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  182997             : 
  182998             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  182999             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  183000             : #if 0
  183001             :       /*! returns old style Sage II enum values */
  183002             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  183003             :       /*! returns old style Sage II enum values */
  183004             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  183005             : #endif
  183006             :       /* */
  183007             : 
  183008             : 
  183009             : 
  183010             : 
  183011             :      public:
  183012             :       /* name Traversal Support Functions
  183013             :           \brief Traversal support functions ... incomplete-documentation
  183014             : 
  183015             :           These functions have been made public as part of the design, but they are suggested for internal use 
  183016             :           or by particularly knowledgable users for specialized tools or applications.
  183017             :        */
  183018             :       /* */
  183019             : 
  183020             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  183021             :        // (inferior to ROSE traversal mechanism, experimental).
  183022             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  183023             :        */
  183024             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  183025             : 
  183026             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  183027             :       /*! \brief support for the classic visitor pattern done in GoF */
  183028             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  183029             : 
  183030             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  183031             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  183032             :        */
  183033             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  183034             : 
  183035             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  183036             :        */
  183037             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  183038             : 
  183039             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  183040             :        // This traversal helps support internal tools that call static member functions.
  183041             :        // note: this function operates on the memory pools.
  183042             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  183043             :        */
  183044             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  183045             :       /* */
  183046             : 
  183047             : 
  183048             :      public:
  183049             :       /* name Memory Allocation Functions
  183050             :           \brief Memory allocations functions ... incomplete-documentation
  183051             : 
  183052             :           These functions have been made public as part of the design, but they are suggested for internal use 
  183053             :           or by particularly knowledgable users for specialized tools or applications.
  183054             :        */
  183055             :       /* */
  183056             : 
  183057             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  183058             : 
  183059             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  183060             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  183061             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  183062             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  183063             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  183064             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  183065             :           being used with the AST File I/O mechanism.
  183066             :        */
  183067             :           virtual bool isInMemoryPool() override;
  183068             : 
  183069             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  183070             : 
  183071             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  183072             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  183073             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  183074             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  183075             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  183076             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  183077             :           being used with the AST File I/O mechanism.
  183078             :        */
  183079             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  183080             : 
  183081             :       // DQ (4/30/2006): Modified to be a const function.
  183082             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  183083             : 
  183084             :           This functions is part of general support for many possible tools to operate 
  183085             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  183086             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  183087             :           less than the set of pointers used by the AST file I/O. This is part of
  183088             :           work implemented by Andreas, and support tools such as the AST graph generation.
  183089             : 
  183090             :           \warning This function can return unexpected data members and thus the 
  183091             :                    order and the number of elements is unpredicable and subject 
  183092             :                    to change.
  183093             : 
  183094             :           \returns STL vector of pairs of SgNode* and strings
  183095             :        */
  183096             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  183097             : 
  183098             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  183099             : 
  183100             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  183101             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  183102             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  183103             : 
  183104             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  183105             :                    and subject to change.
  183106             :        */
  183107             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  183108             : 
  183109             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  183110             : 
  183111             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  183112             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  183113             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  183114             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  183115             : 
  183116             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  183117             : 
  183118             :           \returns long
  183119             :        */
  183120             :           virtual long getChildIndex( SgNode* childNode ) const override;
  183121             : 
  183122             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  183123             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  183124             :       /* \brief Constructor for use by AST File I/O Mechanism
  183125             : 
  183126             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  183127             :           which obtained via fast binary file I/O from disk.
  183128             :        */
  183129             :        // SgReadStatement( SgReadStatementStorageClass& source );
  183130             : 
  183131             : 
  183132             : 
  183133             : 
  183134             : 
  183135             :  // JH (10/24/2005): methods added to support the ast file IO
  183136             :     private:
  183137             : 
  183138             :       /* name AST Memory Allocation Support Functions
  183139             :           \brief Memory allocations support....
  183140             : 
  183141             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  183142             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  183143             :           and support the AST File I/O Mechanism.
  183144             :        */
  183145             :       /* */
  183146             : 
  183147             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  183148             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  183149             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  183150             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  183151             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  183152             :           a correspinding one in the AST_FILE_IO class!
  183153             :        */
  183154             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  183155             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  183156             :       /* \brief Typedef used for low level memory access.
  183157             :        */
  183158             :        // typedef unsigned char* TestType;
  183159             : 
  183160             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  183161             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  183162             :       /* \brief Typedef used to hold memory addresses as values.
  183163             :        */
  183164             :        // typedef unsigned long  AddressType;
  183165             : 
  183166             : 
  183167             : 
  183168             :        // necessary, to have direct access to the p_freepointer and the private methods !
  183169             :       /*! \brief friend class declaration to support AST File I/O */
  183170             :           friend class AST_FILE_IO;
  183171             : 
  183172             :       /*! \brief friend class declaration to support AST File I/O */
  183173             :           friend class SgReadStatementStorageClass;
  183174             : 
  183175             :       /*! \brief friend class declaration to support AST File I/O */
  183176             :           friend class AstSpecificDataManagingClass;
  183177             : 
  183178             :       /*! \brief friend class declaration to support AST File I/O */
  183179             :           friend class AstSpecificDataManagingClassStorageClass;
  183180             :     public:
  183181             :       /*! \brief IR node constructor to support AST File I/O */
  183182             :           SgReadStatement( const SgReadStatementStorageClass& source );
  183183             : 
  183184             :  // private: // JJW hack
  183185             :        /*
  183186             :           name AST Memory Allocation Support Variables
  183187             :           Memory allocations support variables 
  183188             : 
  183189             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  183190             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  183191             :           and support the AST File I/O Mechanism.
  183192             :        */
  183193             :       /* */
  183194             : 
  183195             :     public:
  183196             : 
  183197             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  183198             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  183199             :       // virtual SgNode* addRegExpAttribute();
  183200             :       /*! \brief Support for AST matching using regular expression.
  183201             : 
  183202             :           This support is incomplete and the subject of current research to define 
  183203             :           RegEx trees to support inexact matching.
  183204             :        */
  183205             :           SgReadStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  183206             : 
  183207             : // *** COMMON CODE SECTION ENDS HERE ***
  183208             : 
  183209             : 
  183210             : // End of memberFunctionString
  183211             : // Start of memberFunctionString
  183212             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  183213             : 
  183214             :      // the generated cast function
  183215             :      // friend ROSE_DLL_API SgReadStatement* isSgReadStatement ( SgNode* s );
  183216             : 
  183217             :           typedef SgIOStatement base_node_type;
  183218             : 
  183219             : 
  183220             : // End of memberFunctionString
  183221             : // Start of memberFunctionString
  183222             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  183223             : 
  183224             :           void post_construction_initialization() override;
  183225             : 
  183226             : 
  183227             : // End of memberFunctionString
  183228             : 
  183229             :      public: 
  183230             :          SgExpression* get_format() const;
  183231             :          void set_format(SgExpression* format);
  183232             : 
  183233             :      public: 
  183234             :          SgExpression* get_namelist() const;
  183235             :          void set_namelist(SgExpression* namelist);
  183236             : 
  183237             :      public: 
  183238             :          SgExpression* get_advance() const;
  183239             :          void set_advance(SgExpression* advance);
  183240             : 
  183241             :      public: 
  183242             :          SgExpression* get_asynchronous() const;
  183243             :          void set_asynchronous(SgExpression* asynchronous);
  183244             : 
  183245             :      public: 
  183246             :          SgExpression* get_blank() const;
  183247             :          void set_blank(SgExpression* blank);
  183248             : 
  183249             :      public: 
  183250             :          SgExpression* get_decimal() const;
  183251             :          void set_decimal(SgExpression* decimal);
  183252             : 
  183253             :      public: 
  183254             :          SgExpression* get_delim() const;
  183255             :          void set_delim(SgExpression* delim);
  183256             : 
  183257             :      public: 
  183258             :          SgExpression* get_end() const;
  183259             :          void set_end(SgExpression* end);
  183260             : 
  183261             :      public: 
  183262             :          SgExpression* get_eor() const;
  183263             :          void set_eor(SgExpression* eor);
  183264             : 
  183265             :      public: 
  183266             :          SgExpression* get_id() const;
  183267             :          void set_id(SgExpression* id);
  183268             : 
  183269             :      public: 
  183270             :          SgExpression* get_pad() const;
  183271             :          void set_pad(SgExpression* pad);
  183272             : 
  183273             :      public: 
  183274             :          SgExpression* get_pos() const;
  183275             :          void set_pos(SgExpression* pos);
  183276             : 
  183277             :      public: 
  183278             :          SgExpression* get_rec() const;
  183279             :          void set_rec(SgExpression* rec);
  183280             : 
  183281             :      public: 
  183282             :          SgExpression* get_round() const;
  183283             :          void set_round(SgExpression* round);
  183284             : 
  183285             :      public: 
  183286             :          SgExpression* get_sign() const;
  183287             :          void set_sign(SgExpression* sign);
  183288             : 
  183289             :      public: 
  183290             :          SgExpression* get_size() const;
  183291             :          void set_size(SgExpression* size);
  183292             : 
  183293             : 
  183294             :      public: 
  183295             :          virtual ~SgReadStatement();
  183296             : 
  183297             : 
  183298             :      public: 
  183299             :          SgReadStatement(Sg_File_Info* startOfConstruct ); 
  183300             :          SgReadStatement(); 
  183301             : 
  183302             :     protected:
  183303             : // Start of memberFunctionString
  183304             : SgExpression* p_format;
  183305             :           
  183306             : // End of memberFunctionString
  183307             : // Start of memberFunctionString
  183308             : SgExpression* p_namelist;
  183309             :           
  183310             : // End of memberFunctionString
  183311             : // Start of memberFunctionString
  183312             : SgExpression* p_advance;
  183313             :           
  183314             : // End of memberFunctionString
  183315             : // Start of memberFunctionString
  183316             : SgExpression* p_asynchronous;
  183317             :           
  183318             : // End of memberFunctionString
  183319             : // Start of memberFunctionString
  183320             : SgExpression* p_blank;
  183321             :           
  183322             : // End of memberFunctionString
  183323             : // Start of memberFunctionString
  183324             : SgExpression* p_decimal;
  183325             :           
  183326             : // End of memberFunctionString
  183327             : // Start of memberFunctionString
  183328             : SgExpression* p_delim;
  183329             :           
  183330             : // End of memberFunctionString
  183331             : // Start of memberFunctionString
  183332             : SgExpression* p_end;
  183333             :           
  183334             : // End of memberFunctionString
  183335             : // Start of memberFunctionString
  183336             : SgExpression* p_eor;
  183337             :           
  183338             : // End of memberFunctionString
  183339             : // Start of memberFunctionString
  183340             : SgExpression* p_id;
  183341             :           
  183342             : // End of memberFunctionString
  183343             : // Start of memberFunctionString
  183344             : SgExpression* p_pad;
  183345             :           
  183346             : // End of memberFunctionString
  183347             : // Start of memberFunctionString
  183348             : SgExpression* p_pos;
  183349             :           
  183350             : // End of memberFunctionString
  183351             : // Start of memberFunctionString
  183352             : SgExpression* p_rec;
  183353             :           
  183354             : // End of memberFunctionString
  183355             : // Start of memberFunctionString
  183356             : SgExpression* p_round;
  183357             :           
  183358             : // End of memberFunctionString
  183359             : // Start of memberFunctionString
  183360             : SgExpression* p_sign;
  183361             :           
  183362             : // End of memberFunctionString
  183363             : // Start of memberFunctionString
  183364             : SgExpression* p_size;
  183365             :           
  183366             : // End of memberFunctionString
  183367             : 
  183368             :     friend struct Rose::Traits::generated::describe_node_t<SgReadStatement>;
  183369             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_format>;
  183370             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_namelist>;
  183371             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_advance>;
  183372             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_asynchronous>;
  183373             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_blank>;
  183374             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_decimal>;
  183375             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_delim>;
  183376             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_end>;
  183377             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_eor>;
  183378             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_id>;
  183379             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_pad>;
  183380             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_pos>;
  183381             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_rec>;
  183382             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_round>;
  183383             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_sign>;
  183384             :     friend struct Rose::Traits::generated::describe_field_t<SgReadStatement, SgExpression*,&SgReadStatement::p_size>;
  183385             : 
  183386             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  183387             : 
  183388             : 
  183389             :    };
  183390             : #endif
  183391             : 
  183392             : // postdeclarations for SgReadStatement
  183393             : 
  183394             : /* #line 183395 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  183395             : 
  183396             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  183397             : 
  183398             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  183399             : 
  183400             : 
  183401             : /* #line 183402 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  183402             : 
  183403             : 
  183404             : 
  183405             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  183406             : 
  183407             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  183408             : //      This code is automatically generated for each 
  183409             : //      terminal and non-terminal within the defined 
  183410             : //      grammar.  There is a simple way to change the 
  183411             : //      code to fix bugs etc.  See the ROSE README file
  183412             : //      for directions.
  183413             : 
  183414             : // tps: (02/22/2010): Adding DLL export requirements
  183415             : #include "rosedll.h"
  183416             : 
  183417             : // predeclarations for SgWriteStatement
  183418             : 
  183419             : /* #line 183420 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  183420             : 
  183421             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  183422             : 
  183423             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  183424             : 
  183425             : #if 1
  183426             : // Class Definition for SgWriteStatement
  183427             : class ROSE_DLL_API SgWriteStatement  : public SgIOStatement
  183428             :    {
  183429             :      public:
  183430             : 
  183431             : 
  183432             : /* #line 183433 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  183433             : 
  183434             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  183435             : // Start of memberFunctionString
  183436             : /* #line 3544 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  183437             : 
  183438             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  183439             :      virtual unsigned int cfgIndexForEnd() const override;
  183440             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  183441             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  183442             : #endif
  183443             : 
  183444             : 
  183445             : // End of memberFunctionString
  183446             : // Start of memberFunctionString
  183447             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  183448             : 
  183449             : // *** COMMON CODE SECTION BEGINS HERE ***
  183450             : 
  183451             :     public:
  183452             : 
  183453             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  183454             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  183455             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  183456             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  183457             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  183458             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  183459             : 
  183460             :       /*! \brief returns a string representing the class name */
  183461             :           virtual std::string class_name() const override;
  183462             : 
  183463             :       /*! \brief returns new style SageIII enum values */
  183464             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  183465             : 
  183466             :       /*! \brief static variant value */
  183467             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  183468             :        // static const VariantT static_variant = V_SgWriteStatement;
  183469             :           enum { static_variant = V_SgWriteStatement };
  183470             : 
  183471             :        /* the generated cast function */
  183472             :       /*! \brief Casts pointer from base class to derived class */
  183473             :           ROSE_DLL_API friend       SgWriteStatement* isSgWriteStatement(       SgNode * s );
  183474             : 
  183475             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  183476             :           ROSE_DLL_API friend const SgWriteStatement* isSgWriteStatement( const SgNode * s );
  183477             : 
  183478             :      // ******************************************
  183479             :      // * Memory Pool / New / Delete
  183480             :      // ******************************************
  183481             : 
  183482             :      public:
  183483             :           /// \private
  183484             :           static const unsigned pool_size; //
  183485             :           /// \private
  183486             :           static std::vector<unsigned char *> pools; //
  183487             :           /// \private
  183488             :           static SgWriteStatement * next_node; // 
  183489             : 
  183490             :           /// \private
  183491             :           static unsigned long initializeStorageClassArray(SgWriteStatementStorageClass *); //
  183492             : 
  183493             :           /// \private
  183494             :           static void clearMemoryPool(); //
  183495             :           static void deleteMemoryPool(); //
  183496             : 
  183497             :           /// \private
  183498             :           static void extendMemoryPoolForFileIO(); //
  183499             : 
  183500             :           /// \private
  183501             :           static SgWriteStatement * getPointerFromGlobalIndex(unsigned long); //
  183502             :           /// \private
  183503             :           static SgWriteStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  183504             : 
  183505             :           /// \private
  183506             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  183507             :           /// \private
  183508             :           static void resetValidFreepointers(); //
  183509             :           /// \private
  183510             :           static unsigned long getNumberOfLastValidPointer(); //
  183511             : 
  183512             : 
  183513             : #if defined(INLINE_FUNCTIONS)
  183514             :       /*! \brief returns pointer to newly allocated IR node */
  183515             :           inline void *operator new (size_t size);
  183516             : #else
  183517             :       /*! \brief returns pointer to newly allocated IR node */
  183518             :           void *operator new (size_t size);
  183519             : #endif
  183520             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  183521             :           void operator delete (void* pointer, size_t size);
  183522             : 
  183523             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  183524           0 :           void operator delete (void* pointer)
  183525             :              {
  183526             :             // This is the generated delete operator...
  183527           0 :                SgWriteStatement::operator delete (pointer,sizeof(SgWriteStatement));
  183528             :              }
  183529             : 
  183530             :       /*! \brief Returns the total number of IR nodes of this type */
  183531             :           static size_t numberOfNodes();
  183532             : 
  183533             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  183534             :           static size_t memoryUsage();
  183535             : 
  183536             :       // End of scope which started in IR nodes specific code 
  183537             :       /* */
  183538             : 
  183539             :       /* name Internal Functions
  183540             :           \brief Internal functions ... incomplete-documentation
  183541             : 
  183542             :           These functions have been made public as part of the design, but they are suggested for internal use 
  183543             :           or by particularly knowledgeable users for specialized tools or applications.
  183544             : 
  183545             :           \internal We could not make these private because they are required by user for special purposes. And 
  183546             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  183547             :          
  183548             :        */
  183549             : 
  183550             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  183551             :        // overridden in every class by *generated* implementation
  183552             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  183553             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  183554             :        // MS: 06/28/02 container of names of variables or container indices 
  183555             :        // used used in the traversal to access AST successor nodes
  183556             :        // overridden in every class by *generated* implementation
  183557             :       /*! \brief container of names of variables or container indices used used in the traversal
  183558             :           to access AST successor nodes overridden in every class by *generated* implementation */
  183559             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  183560             : 
  183561             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  183562             :        // than all the vector copies. The implementation for these functions is generated for each class.
  183563             :       /*! \brief return number of children in the traversal successor list */
  183564             :           virtual size_t get_numberOfTraversalSuccessors() override;
  183565             :       /*! \brief index-based access to traversal successors by index number */
  183566             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  183567             :       /*! \brief index-based access to traversal successors by child node */
  183568             :           virtual size_t get_childIndex(SgNode *child) override;
  183569             : 
  183570             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  183571             :        // MS: 08/16/2002 method for generating RTI information
  183572             :       /*! \brief return C++ Runtime-Time-Information */
  183573             :           virtual RTIReturnType roseRTI() override;
  183574             : #endif
  183575             :       /* */
  183576             : 
  183577             : 
  183578             : 
  183579             :       /* name Deprecated Functions
  183580             :           \brief Deprecated functions ... incomplete-documentation
  183581             : 
  183582             :           These functions have been deprecated from use.
  183583             :        */
  183584             :       /* */
  183585             : 
  183586             :       /*! returns a C style string (char*) representing the class name */
  183587             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  183588             : 
  183589             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  183590             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  183591             : #if 0
  183592             :       /*! returns old style Sage II enum values */
  183593             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  183594             :       /*! returns old style Sage II enum values */
  183595             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  183596             : #endif
  183597             :       /* */
  183598             : 
  183599             : 
  183600             : 
  183601             : 
  183602             :      public:
  183603             :       /* name Traversal Support Functions
  183604             :           \brief Traversal support functions ... incomplete-documentation
  183605             : 
  183606             :           These functions have been made public as part of the design, but they are suggested for internal use 
  183607             :           or by particularly knowledgable users for specialized tools or applications.
  183608             :        */
  183609             :       /* */
  183610             : 
  183611             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  183612             :        // (inferior to ROSE traversal mechanism, experimental).
  183613             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  183614             :        */
  183615             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  183616             : 
  183617             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  183618             :       /*! \brief support for the classic visitor pattern done in GoF */
  183619             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  183620             : 
  183621             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  183622             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  183623             :        */
  183624             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  183625             : 
  183626             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  183627             :        */
  183628             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  183629             : 
  183630             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  183631             :        // This traversal helps support internal tools that call static member functions.
  183632             :        // note: this function operates on the memory pools.
  183633             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  183634             :        */
  183635             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  183636             :       /* */
  183637             : 
  183638             : 
  183639             :      public:
  183640             :       /* name Memory Allocation Functions
  183641             :           \brief Memory allocations functions ... incomplete-documentation
  183642             : 
  183643             :           These functions have been made public as part of the design, but they are suggested for internal use 
  183644             :           or by particularly knowledgable users for specialized tools or applications.
  183645             :        */
  183646             :       /* */
  183647             : 
  183648             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  183649             : 
  183650             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  183651             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  183652             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  183653             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  183654             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  183655             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  183656             :           being used with the AST File I/O mechanism.
  183657             :        */
  183658             :           virtual bool isInMemoryPool() override;
  183659             : 
  183660             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  183661             : 
  183662             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  183663             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  183664             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  183665             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  183666             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  183667             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  183668             :           being used with the AST File I/O mechanism.
  183669             :        */
  183670             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  183671             : 
  183672             :       // DQ (4/30/2006): Modified to be a const function.
  183673             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  183674             : 
  183675             :           This functions is part of general support for many possible tools to operate 
  183676             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  183677             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  183678             :           less than the set of pointers used by the AST file I/O. This is part of
  183679             :           work implemented by Andreas, and support tools such as the AST graph generation.
  183680             : 
  183681             :           \warning This function can return unexpected data members and thus the 
  183682             :                    order and the number of elements is unpredicable and subject 
  183683             :                    to change.
  183684             : 
  183685             :           \returns STL vector of pairs of SgNode* and strings
  183686             :        */
  183687             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  183688             : 
  183689             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  183690             : 
  183691             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  183692             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  183693             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  183694             : 
  183695             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  183696             :                    and subject to change.
  183697             :        */
  183698             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  183699             : 
  183700             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  183701             : 
  183702             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  183703             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  183704             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  183705             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  183706             : 
  183707             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  183708             : 
  183709             :           \returns long
  183710             :        */
  183711             :           virtual long getChildIndex( SgNode* childNode ) const override;
  183712             : 
  183713             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  183714             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  183715             :       /* \brief Constructor for use by AST File I/O Mechanism
  183716             : 
  183717             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  183718             :           which obtained via fast binary file I/O from disk.
  183719             :        */
  183720             :        // SgWriteStatement( SgWriteStatementStorageClass& source );
  183721             : 
  183722             : 
  183723             : 
  183724             : 
  183725             : 
  183726             :  // JH (10/24/2005): methods added to support the ast file IO
  183727             :     private:
  183728             : 
  183729             :       /* name AST Memory Allocation Support Functions
  183730             :           \brief Memory allocations support....
  183731             : 
  183732             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  183733             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  183734             :           and support the AST File I/O Mechanism.
  183735             :        */
  183736             :       /* */
  183737             : 
  183738             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  183739             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  183740             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  183741             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  183742             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  183743             :           a correspinding one in the AST_FILE_IO class!
  183744             :        */
  183745             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  183746             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  183747             :       /* \brief Typedef used for low level memory access.
  183748             :        */
  183749             :        // typedef unsigned char* TestType;
  183750             : 
  183751             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  183752             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  183753             :       /* \brief Typedef used to hold memory addresses as values.
  183754             :        */
  183755             :        // typedef unsigned long  AddressType;
  183756             : 
  183757             : 
  183758             : 
  183759             :        // necessary, to have direct access to the p_freepointer and the private methods !
  183760             :       /*! \brief friend class declaration to support AST File I/O */
  183761             :           friend class AST_FILE_IO;
  183762             : 
  183763             :       /*! \brief friend class declaration to support AST File I/O */
  183764             :           friend class SgWriteStatementStorageClass;
  183765             : 
  183766             :       /*! \brief friend class declaration to support AST File I/O */
  183767             :           friend class AstSpecificDataManagingClass;
  183768             : 
  183769             :       /*! \brief friend class declaration to support AST File I/O */
  183770             :           friend class AstSpecificDataManagingClassStorageClass;
  183771             :     public:
  183772             :       /*! \brief IR node constructor to support AST File I/O */
  183773             :           SgWriteStatement( const SgWriteStatementStorageClass& source );
  183774             : 
  183775             :  // private: // JJW hack
  183776             :        /*
  183777             :           name AST Memory Allocation Support Variables
  183778             :           Memory allocations support variables 
  183779             : 
  183780             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  183781             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  183782             :           and support the AST File I/O Mechanism.
  183783             :        */
  183784             :       /* */
  183785             : 
  183786             :     public:
  183787             : 
  183788             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  183789             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  183790             :       // virtual SgNode* addRegExpAttribute();
  183791             :       /*! \brief Support for AST matching using regular expression.
  183792             : 
  183793             :           This support is incomplete and the subject of current research to define 
  183794             :           RegEx trees to support inexact matching.
  183795             :        */
  183796             :           SgWriteStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  183797             : 
  183798             : // *** COMMON CODE SECTION ENDS HERE ***
  183799             : 
  183800             : 
  183801             : // End of memberFunctionString
  183802             : // Start of memberFunctionString
  183803             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  183804             : 
  183805             :      // the generated cast function
  183806             :      // friend ROSE_DLL_API SgWriteStatement* isSgWriteStatement ( SgNode* s );
  183807             : 
  183808             :           typedef SgIOStatement base_node_type;
  183809             : 
  183810             : 
  183811             : // End of memberFunctionString
  183812             : // Start of memberFunctionString
  183813             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  183814             : 
  183815             :           void post_construction_initialization() override;
  183816             : 
  183817             : 
  183818             : // End of memberFunctionString
  183819             : 
  183820             :      public: 
  183821             :          SgExpression* get_format() const;
  183822             :          void set_format(SgExpression* format);
  183823             : 
  183824             :      public: 
  183825             :          SgExpression* get_namelist() const;
  183826             :          void set_namelist(SgExpression* namelist);
  183827             : 
  183828             :      public: 
  183829             :          SgExpression* get_advance() const;
  183830             :          void set_advance(SgExpression* advance);
  183831             : 
  183832             :      public: 
  183833             :          SgExpression* get_asynchronous() const;
  183834             :          void set_asynchronous(SgExpression* asynchronous);
  183835             : 
  183836             :      public: 
  183837             :          SgExpression* get_blank() const;
  183838             :          void set_blank(SgExpression* blank);
  183839             : 
  183840             :      public: 
  183841             :          SgExpression* get_decimal() const;
  183842             :          void set_decimal(SgExpression* decimal);
  183843             : 
  183844             :      public: 
  183845             :          SgExpression* get_delim() const;
  183846             :          void set_delim(SgExpression* delim);
  183847             : 
  183848             :      public: 
  183849             :          SgExpression* get_end() const;
  183850             :          void set_end(SgExpression* end);
  183851             : 
  183852             :      public: 
  183853             :          SgExpression* get_eor() const;
  183854             :          void set_eor(SgExpression* eor);
  183855             : 
  183856             :      public: 
  183857             :          SgExpression* get_id() const;
  183858             :          void set_id(SgExpression* id);
  183859             : 
  183860             :      public: 
  183861             :          SgExpression* get_pad() const;
  183862             :          void set_pad(SgExpression* pad);
  183863             : 
  183864             :      public: 
  183865             :          SgExpression* get_pos() const;
  183866             :          void set_pos(SgExpression* pos);
  183867             : 
  183868             :      public: 
  183869             :          SgExpression* get_rec() const;
  183870             :          void set_rec(SgExpression* rec);
  183871             : 
  183872             :      public: 
  183873             :          SgExpression* get_round() const;
  183874             :          void set_round(SgExpression* round);
  183875             : 
  183876             :      public: 
  183877             :          SgExpression* get_sign() const;
  183878             :          void set_sign(SgExpression* sign);
  183879             : 
  183880             :      public: 
  183881             :          SgExpression* get_size() const;
  183882             :          void set_size(SgExpression* size);
  183883             : 
  183884             : 
  183885             :      public: 
  183886             :          virtual ~SgWriteStatement();
  183887             : 
  183888             : 
  183889             :      public: 
  183890             :          SgWriteStatement(Sg_File_Info* startOfConstruct ); 
  183891             :          SgWriteStatement(); 
  183892             : 
  183893             :     protected:
  183894             : // Start of memberFunctionString
  183895             : SgExpression* p_format;
  183896             :           
  183897             : // End of memberFunctionString
  183898             : // Start of memberFunctionString
  183899             : SgExpression* p_namelist;
  183900             :           
  183901             : // End of memberFunctionString
  183902             : // Start of memberFunctionString
  183903             : SgExpression* p_advance;
  183904             :           
  183905             : // End of memberFunctionString
  183906             : // Start of memberFunctionString
  183907             : SgExpression* p_asynchronous;
  183908             :           
  183909             : // End of memberFunctionString
  183910             : // Start of memberFunctionString
  183911             : SgExpression* p_blank;
  183912             :           
  183913             : // End of memberFunctionString
  183914             : // Start of memberFunctionString
  183915             : SgExpression* p_decimal;
  183916             :           
  183917             : // End of memberFunctionString
  183918             : // Start of memberFunctionString
  183919             : SgExpression* p_delim;
  183920             :           
  183921             : // End of memberFunctionString
  183922             : // Start of memberFunctionString
  183923             : SgExpression* p_end;
  183924             :           
  183925             : // End of memberFunctionString
  183926             : // Start of memberFunctionString
  183927             : SgExpression* p_eor;
  183928             :           
  183929             : // End of memberFunctionString
  183930             : // Start of memberFunctionString
  183931             : SgExpression* p_id;
  183932             :           
  183933             : // End of memberFunctionString
  183934             : // Start of memberFunctionString
  183935             : SgExpression* p_pad;
  183936             :           
  183937             : // End of memberFunctionString
  183938             : // Start of memberFunctionString
  183939             : SgExpression* p_pos;
  183940             :           
  183941             : // End of memberFunctionString
  183942             : // Start of memberFunctionString
  183943             : SgExpression* p_rec;
  183944             :           
  183945             : // End of memberFunctionString
  183946             : // Start of memberFunctionString
  183947             : SgExpression* p_round;
  183948             :           
  183949             : // End of memberFunctionString
  183950             : // Start of memberFunctionString
  183951             : SgExpression* p_sign;
  183952             :           
  183953             : // End of memberFunctionString
  183954             : // Start of memberFunctionString
  183955             : SgExpression* p_size;
  183956             :           
  183957             : // End of memberFunctionString
  183958             : 
  183959             :     friend struct Rose::Traits::generated::describe_node_t<SgWriteStatement>;
  183960             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_format>;
  183961             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_namelist>;
  183962             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_advance>;
  183963             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_asynchronous>;
  183964             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_blank>;
  183965             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_decimal>;
  183966             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_delim>;
  183967             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_end>;
  183968             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_eor>;
  183969             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_id>;
  183970             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_pad>;
  183971             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_pos>;
  183972             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_rec>;
  183973             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_round>;
  183974             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_sign>;
  183975             :     friend struct Rose::Traits::generated::describe_field_t<SgWriteStatement, SgExpression*,&SgWriteStatement::p_size>;
  183976             : 
  183977             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  183978             : 
  183979             : 
  183980             :    };
  183981             : #endif
  183982             : 
  183983             : // postdeclarations for SgWriteStatement
  183984             : 
  183985             : /* #line 183986 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  183986             : 
  183987             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  183988             : 
  183989             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  183990             : 
  183991             : 
  183992             : /* #line 183993 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  183993             : 
  183994             : 
  183995             : 
  183996             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  183997             : 
  183998             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  183999             : //      This code is automatically generated for each 
  184000             : //      terminal and non-terminal within the defined 
  184001             : //      grammar.  There is a simple way to change the 
  184002             : //      code to fix bugs etc.  See the ROSE README file
  184003             : //      for directions.
  184004             : 
  184005             : // tps: (02/22/2010): Adding DLL export requirements
  184006             : #include "rosedll.h"
  184007             : 
  184008             : // predeclarations for SgOpenStatement
  184009             : 
  184010             : /* #line 184011 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  184011             : 
  184012             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  184013             : 
  184014             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  184015             : 
  184016             : #if 1
  184017             : // Class Definition for SgOpenStatement
  184018             : class ROSE_DLL_API SgOpenStatement  : public SgIOStatement
  184019             :    {
  184020             :      public:
  184021             : 
  184022             : 
  184023             : /* #line 184024 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  184024             : 
  184025             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  184026             : // Start of memberFunctionString
  184027             : /* #line 3552 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  184028             : 
  184029             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  184030             :      virtual unsigned int cfgIndexForEnd() const override;
  184031             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  184032             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  184033             : #endif
  184034             : 
  184035             : 
  184036             : // End of memberFunctionString
  184037             : // Start of memberFunctionString
  184038             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  184039             : 
  184040             : // *** COMMON CODE SECTION BEGINS HERE ***
  184041             : 
  184042             :     public:
  184043             : 
  184044             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  184045             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  184046             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  184047             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  184048             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  184049             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  184050             : 
  184051             :       /*! \brief returns a string representing the class name */
  184052             :           virtual std::string class_name() const override;
  184053             : 
  184054             :       /*! \brief returns new style SageIII enum values */
  184055             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  184056             : 
  184057             :       /*! \brief static variant value */
  184058             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  184059             :        // static const VariantT static_variant = V_SgOpenStatement;
  184060             :           enum { static_variant = V_SgOpenStatement };
  184061             : 
  184062             :        /* the generated cast function */
  184063             :       /*! \brief Casts pointer from base class to derived class */
  184064             :           ROSE_DLL_API friend       SgOpenStatement* isSgOpenStatement(       SgNode * s );
  184065             : 
  184066             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  184067             :           ROSE_DLL_API friend const SgOpenStatement* isSgOpenStatement( const SgNode * s );
  184068             : 
  184069             :      // ******************************************
  184070             :      // * Memory Pool / New / Delete
  184071             :      // ******************************************
  184072             : 
  184073             :      public:
  184074             :           /// \private
  184075             :           static const unsigned pool_size; //
  184076             :           /// \private
  184077             :           static std::vector<unsigned char *> pools; //
  184078             :           /// \private
  184079             :           static SgOpenStatement * next_node; // 
  184080             : 
  184081             :           /// \private
  184082             :           static unsigned long initializeStorageClassArray(SgOpenStatementStorageClass *); //
  184083             : 
  184084             :           /// \private
  184085             :           static void clearMemoryPool(); //
  184086             :           static void deleteMemoryPool(); //
  184087             : 
  184088             :           /// \private
  184089             :           static void extendMemoryPoolForFileIO(); //
  184090             : 
  184091             :           /// \private
  184092             :           static SgOpenStatement * getPointerFromGlobalIndex(unsigned long); //
  184093             :           /// \private
  184094             :           static SgOpenStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  184095             : 
  184096             :           /// \private
  184097             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  184098             :           /// \private
  184099             :           static void resetValidFreepointers(); //
  184100             :           /// \private
  184101             :           static unsigned long getNumberOfLastValidPointer(); //
  184102             : 
  184103             : 
  184104             : #if defined(INLINE_FUNCTIONS)
  184105             :       /*! \brief returns pointer to newly allocated IR node */
  184106             :           inline void *operator new (size_t size);
  184107             : #else
  184108             :       /*! \brief returns pointer to newly allocated IR node */
  184109             :           void *operator new (size_t size);
  184110             : #endif
  184111             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  184112             :           void operator delete (void* pointer, size_t size);
  184113             : 
  184114             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  184115           0 :           void operator delete (void* pointer)
  184116             :              {
  184117             :             // This is the generated delete operator...
  184118           0 :                SgOpenStatement::operator delete (pointer,sizeof(SgOpenStatement));
  184119             :              }
  184120             : 
  184121             :       /*! \brief Returns the total number of IR nodes of this type */
  184122             :           static size_t numberOfNodes();
  184123             : 
  184124             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  184125             :           static size_t memoryUsage();
  184126             : 
  184127             :       // End of scope which started in IR nodes specific code 
  184128             :       /* */
  184129             : 
  184130             :       /* name Internal Functions
  184131             :           \brief Internal functions ... incomplete-documentation
  184132             : 
  184133             :           These functions have been made public as part of the design, but they are suggested for internal use 
  184134             :           or by particularly knowledgeable users for specialized tools or applications.
  184135             : 
  184136             :           \internal We could not make these private because they are required by user for special purposes. And 
  184137             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  184138             :          
  184139             :        */
  184140             : 
  184141             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  184142             :        // overridden in every class by *generated* implementation
  184143             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  184144             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  184145             :        // MS: 06/28/02 container of names of variables or container indices 
  184146             :        // used used in the traversal to access AST successor nodes
  184147             :        // overridden in every class by *generated* implementation
  184148             :       /*! \brief container of names of variables or container indices used used in the traversal
  184149             :           to access AST successor nodes overridden in every class by *generated* implementation */
  184150             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  184151             : 
  184152             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  184153             :        // than all the vector copies. The implementation for these functions is generated for each class.
  184154             :       /*! \brief return number of children in the traversal successor list */
  184155             :           virtual size_t get_numberOfTraversalSuccessors() override;
  184156             :       /*! \brief index-based access to traversal successors by index number */
  184157             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  184158             :       /*! \brief index-based access to traversal successors by child node */
  184159             :           virtual size_t get_childIndex(SgNode *child) override;
  184160             : 
  184161             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  184162             :        // MS: 08/16/2002 method for generating RTI information
  184163             :       /*! \brief return C++ Runtime-Time-Information */
  184164             :           virtual RTIReturnType roseRTI() override;
  184165             : #endif
  184166             :       /* */
  184167             : 
  184168             : 
  184169             : 
  184170             :       /* name Deprecated Functions
  184171             :           \brief Deprecated functions ... incomplete-documentation
  184172             : 
  184173             :           These functions have been deprecated from use.
  184174             :        */
  184175             :       /* */
  184176             : 
  184177             :       /*! returns a C style string (char*) representing the class name */
  184178             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  184179             : 
  184180             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  184181             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  184182             : #if 0
  184183             :       /*! returns old style Sage II enum values */
  184184             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  184185             :       /*! returns old style Sage II enum values */
  184186             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  184187             : #endif
  184188             :       /* */
  184189             : 
  184190             : 
  184191             : 
  184192             : 
  184193             :      public:
  184194             :       /* name Traversal Support Functions
  184195             :           \brief Traversal support functions ... incomplete-documentation
  184196             : 
  184197             :           These functions have been made public as part of the design, but they are suggested for internal use 
  184198             :           or by particularly knowledgable users for specialized tools or applications.
  184199             :        */
  184200             :       /* */
  184201             : 
  184202             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  184203             :        // (inferior to ROSE traversal mechanism, experimental).
  184204             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  184205             :        */
  184206             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  184207             : 
  184208             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  184209             :       /*! \brief support for the classic visitor pattern done in GoF */
  184210             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  184211             : 
  184212             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  184213             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  184214             :        */
  184215             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  184216             : 
  184217             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  184218             :        */
  184219             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  184220             : 
  184221             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  184222             :        // This traversal helps support internal tools that call static member functions.
  184223             :        // note: this function operates on the memory pools.
  184224             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  184225             :        */
  184226             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  184227             :       /* */
  184228             : 
  184229             : 
  184230             :      public:
  184231             :       /* name Memory Allocation Functions
  184232             :           \brief Memory allocations functions ... incomplete-documentation
  184233             : 
  184234             :           These functions have been made public as part of the design, but they are suggested for internal use 
  184235             :           or by particularly knowledgable users for specialized tools or applications.
  184236             :        */
  184237             :       /* */
  184238             : 
  184239             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  184240             : 
  184241             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  184242             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  184243             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  184244             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  184245             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  184246             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  184247             :           being used with the AST File I/O mechanism.
  184248             :        */
  184249             :           virtual bool isInMemoryPool() override;
  184250             : 
  184251             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  184252             : 
  184253             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  184254             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  184255             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  184256             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  184257             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  184258             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  184259             :           being used with the AST File I/O mechanism.
  184260             :        */
  184261             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  184262             : 
  184263             :       // DQ (4/30/2006): Modified to be a const function.
  184264             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  184265             : 
  184266             :           This functions is part of general support for many possible tools to operate 
  184267             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  184268             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  184269             :           less than the set of pointers used by the AST file I/O. This is part of
  184270             :           work implemented by Andreas, and support tools such as the AST graph generation.
  184271             : 
  184272             :           \warning This function can return unexpected data members and thus the 
  184273             :                    order and the number of elements is unpredicable and subject 
  184274             :                    to change.
  184275             : 
  184276             :           \returns STL vector of pairs of SgNode* and strings
  184277             :        */
  184278             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  184279             : 
  184280             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  184281             : 
  184282             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  184283             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  184284             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  184285             : 
  184286             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  184287             :                    and subject to change.
  184288             :        */
  184289             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  184290             : 
  184291             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  184292             : 
  184293             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  184294             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  184295             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  184296             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  184297             : 
  184298             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  184299             : 
  184300             :           \returns long
  184301             :        */
  184302             :           virtual long getChildIndex( SgNode* childNode ) const override;
  184303             : 
  184304             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  184305             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  184306             :       /* \brief Constructor for use by AST File I/O Mechanism
  184307             : 
  184308             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  184309             :           which obtained via fast binary file I/O from disk.
  184310             :        */
  184311             :        // SgOpenStatement( SgOpenStatementStorageClass& source );
  184312             : 
  184313             : 
  184314             : 
  184315             : 
  184316             : 
  184317             :  // JH (10/24/2005): methods added to support the ast file IO
  184318             :     private:
  184319             : 
  184320             :       /* name AST Memory Allocation Support Functions
  184321             :           \brief Memory allocations support....
  184322             : 
  184323             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  184324             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  184325             :           and support the AST File I/O Mechanism.
  184326             :        */
  184327             :       /* */
  184328             : 
  184329             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  184330             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  184331             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  184332             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  184333             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  184334             :           a correspinding one in the AST_FILE_IO class!
  184335             :        */
  184336             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  184337             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  184338             :       /* \brief Typedef used for low level memory access.
  184339             :        */
  184340             :        // typedef unsigned char* TestType;
  184341             : 
  184342             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  184343             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  184344             :       /* \brief Typedef used to hold memory addresses as values.
  184345             :        */
  184346             :        // typedef unsigned long  AddressType;
  184347             : 
  184348             : 
  184349             : 
  184350             :        // necessary, to have direct access to the p_freepointer and the private methods !
  184351             :       /*! \brief friend class declaration to support AST File I/O */
  184352             :           friend class AST_FILE_IO;
  184353             : 
  184354             :       /*! \brief friend class declaration to support AST File I/O */
  184355             :           friend class SgOpenStatementStorageClass;
  184356             : 
  184357             :       /*! \brief friend class declaration to support AST File I/O */
  184358             :           friend class AstSpecificDataManagingClass;
  184359             : 
  184360             :       /*! \brief friend class declaration to support AST File I/O */
  184361             :           friend class AstSpecificDataManagingClassStorageClass;
  184362             :     public:
  184363             :       /*! \brief IR node constructor to support AST File I/O */
  184364             :           SgOpenStatement( const SgOpenStatementStorageClass& source );
  184365             : 
  184366             :  // private: // JJW hack
  184367             :        /*
  184368             :           name AST Memory Allocation Support Variables
  184369             :           Memory allocations support variables 
  184370             : 
  184371             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  184372             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  184373             :           and support the AST File I/O Mechanism.
  184374             :        */
  184375             :       /* */
  184376             : 
  184377             :     public:
  184378             : 
  184379             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  184380             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  184381             :       // virtual SgNode* addRegExpAttribute();
  184382             :       /*! \brief Support for AST matching using regular expression.
  184383             : 
  184384             :           This support is incomplete and the subject of current research to define 
  184385             :           RegEx trees to support inexact matching.
  184386             :        */
  184387             :           SgOpenStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  184388             : 
  184389             : // *** COMMON CODE SECTION ENDS HERE ***
  184390             : 
  184391             : 
  184392             : // End of memberFunctionString
  184393             : // Start of memberFunctionString
  184394             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  184395             : 
  184396             :      // the generated cast function
  184397             :      // friend ROSE_DLL_API SgOpenStatement* isSgOpenStatement ( SgNode* s );
  184398             : 
  184399             :           typedef SgIOStatement base_node_type;
  184400             : 
  184401             : 
  184402             : // End of memberFunctionString
  184403             : // Start of memberFunctionString
  184404             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  184405             : 
  184406             :           void post_construction_initialization() override;
  184407             : 
  184408             : 
  184409             : // End of memberFunctionString
  184410             : 
  184411             :      public: 
  184412             :          SgExpression* get_file() const;
  184413             :          void set_file(SgExpression* file);
  184414             : 
  184415             :      public: 
  184416             :          SgExpression* get_status() const;
  184417             :          void set_status(SgExpression* status);
  184418             : 
  184419             :      public: 
  184420             :          SgExpression* get_access() const;
  184421             :          void set_access(SgExpression* access);
  184422             : 
  184423             :      public: 
  184424             :          SgExpression* get_form() const;
  184425             :          void set_form(SgExpression* form);
  184426             : 
  184427             :      public: 
  184428             :          SgExpression* get_recl() const;
  184429             :          void set_recl(SgExpression* recl);
  184430             : 
  184431             :      public: 
  184432             :          SgExpression* get_blank() const;
  184433             :          void set_blank(SgExpression* blank);
  184434             : 
  184435             :      public: 
  184436             :          SgExpression* get_position() const;
  184437             :          void set_position(SgExpression* position);
  184438             : 
  184439             :      public: 
  184440             :          SgExpression* get_action() const;
  184441             :          void set_action(SgExpression* action);
  184442             : 
  184443             :      public: 
  184444             :          SgExpression* get_delim() const;
  184445             :          void set_delim(SgExpression* delim);
  184446             : 
  184447             :      public: 
  184448             :          SgExpression* get_pad() const;
  184449             :          void set_pad(SgExpression* pad);
  184450             : 
  184451             :      public: 
  184452             :          SgExpression* get_round() const;
  184453             :          void set_round(SgExpression* round);
  184454             : 
  184455             :      public: 
  184456             :          SgExpression* get_sign() const;
  184457             :          void set_sign(SgExpression* sign);
  184458             : 
  184459             :      public: 
  184460             :          SgExpression* get_asynchronous() const;
  184461             :          void set_asynchronous(SgExpression* asynchronous);
  184462             : 
  184463             : 
  184464             :      public: 
  184465             :          virtual ~SgOpenStatement();
  184466             : 
  184467             : 
  184468             :      public: 
  184469             :          SgOpenStatement(Sg_File_Info* startOfConstruct ); 
  184470             :          SgOpenStatement(); 
  184471             : 
  184472             :     protected:
  184473             : // Start of memberFunctionString
  184474             : SgExpression* p_file;
  184475             :           
  184476             : // End of memberFunctionString
  184477             : // Start of memberFunctionString
  184478             : SgExpression* p_status;
  184479             :           
  184480             : // End of memberFunctionString
  184481             : // Start of memberFunctionString
  184482             : SgExpression* p_access;
  184483             :           
  184484             : // End of memberFunctionString
  184485             : // Start of memberFunctionString
  184486             : SgExpression* p_form;
  184487             :           
  184488             : // End of memberFunctionString
  184489             : // Start of memberFunctionString
  184490             : SgExpression* p_recl;
  184491             :           
  184492             : // End of memberFunctionString
  184493             : // Start of memberFunctionString
  184494             : SgExpression* p_blank;
  184495             :           
  184496             : // End of memberFunctionString
  184497             : // Start of memberFunctionString
  184498             : SgExpression* p_position;
  184499             :           
  184500             : // End of memberFunctionString
  184501             : // Start of memberFunctionString
  184502             : SgExpression* p_action;
  184503             :           
  184504             : // End of memberFunctionString
  184505             : // Start of memberFunctionString
  184506             : SgExpression* p_delim;
  184507             :           
  184508             : // End of memberFunctionString
  184509             : // Start of memberFunctionString
  184510             : SgExpression* p_pad;
  184511             :           
  184512             : // End of memberFunctionString
  184513             : // Start of memberFunctionString
  184514             : SgExpression* p_round;
  184515             :           
  184516             : // End of memberFunctionString
  184517             : // Start of memberFunctionString
  184518             : SgExpression* p_sign;
  184519             :           
  184520             : // End of memberFunctionString
  184521             : // Start of memberFunctionString
  184522             : SgExpression* p_asynchronous;
  184523             :           
  184524             : // End of memberFunctionString
  184525             : 
  184526             :     friend struct Rose::Traits::generated::describe_node_t<SgOpenStatement>;
  184527             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_file>;
  184528             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_status>;
  184529             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_access>;
  184530             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_form>;
  184531             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_recl>;
  184532             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_blank>;
  184533             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_position>;
  184534             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_action>;
  184535             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_delim>;
  184536             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_pad>;
  184537             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_round>;
  184538             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_sign>;
  184539             :     friend struct Rose::Traits::generated::describe_field_t<SgOpenStatement, SgExpression*,&SgOpenStatement::p_asynchronous>;
  184540             : 
  184541             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  184542             : 
  184543             : 
  184544             :    };
  184545             : #endif
  184546             : 
  184547             : // postdeclarations for SgOpenStatement
  184548             : 
  184549             : /* #line 184550 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  184550             : 
  184551             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  184552             : 
  184553             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  184554             : 
  184555             : 
  184556             : /* #line 184557 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  184557             : 
  184558             : 
  184559             : 
  184560             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  184561             : 
  184562             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  184563             : //      This code is automatically generated for each 
  184564             : //      terminal and non-terminal within the defined 
  184565             : //      grammar.  There is a simple way to change the 
  184566             : //      code to fix bugs etc.  See the ROSE README file
  184567             : //      for directions.
  184568             : 
  184569             : // tps: (02/22/2010): Adding DLL export requirements
  184570             : #include "rosedll.h"
  184571             : 
  184572             : // predeclarations for SgCloseStatement
  184573             : 
  184574             : /* #line 184575 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  184575             : 
  184576             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  184577             : 
  184578             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  184579             : 
  184580             : #if 1
  184581             : // Class Definition for SgCloseStatement
  184582             : class ROSE_DLL_API SgCloseStatement  : public SgIOStatement
  184583             :    {
  184584             :      public:
  184585             : 
  184586             : 
  184587             : /* #line 184588 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  184588             : 
  184589             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  184590             : // Start of memberFunctionString
  184591             : /* #line 3560 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  184592             : 
  184593             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  184594             :      virtual unsigned int cfgIndexForEnd() const override;
  184595             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  184596             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  184597             : #endif
  184598             : 
  184599             : 
  184600             : // End of memberFunctionString
  184601             : // Start of memberFunctionString
  184602             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  184603             : 
  184604             : // *** COMMON CODE SECTION BEGINS HERE ***
  184605             : 
  184606             :     public:
  184607             : 
  184608             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  184609             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  184610             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  184611             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  184612             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  184613             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  184614             : 
  184615             :       /*! \brief returns a string representing the class name */
  184616             :           virtual std::string class_name() const override;
  184617             : 
  184618             :       /*! \brief returns new style SageIII enum values */
  184619             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  184620             : 
  184621             :       /*! \brief static variant value */
  184622             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  184623             :        // static const VariantT static_variant = V_SgCloseStatement;
  184624             :           enum { static_variant = V_SgCloseStatement };
  184625             : 
  184626             :        /* the generated cast function */
  184627             :       /*! \brief Casts pointer from base class to derived class */
  184628             :           ROSE_DLL_API friend       SgCloseStatement* isSgCloseStatement(       SgNode * s );
  184629             : 
  184630             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  184631             :           ROSE_DLL_API friend const SgCloseStatement* isSgCloseStatement( const SgNode * s );
  184632             : 
  184633             :      // ******************************************
  184634             :      // * Memory Pool / New / Delete
  184635             :      // ******************************************
  184636             : 
  184637             :      public:
  184638             :           /// \private
  184639             :           static const unsigned pool_size; //
  184640             :           /// \private
  184641             :           static std::vector<unsigned char *> pools; //
  184642             :           /// \private
  184643             :           static SgCloseStatement * next_node; // 
  184644             : 
  184645             :           /// \private
  184646             :           static unsigned long initializeStorageClassArray(SgCloseStatementStorageClass *); //
  184647             : 
  184648             :           /// \private
  184649             :           static void clearMemoryPool(); //
  184650             :           static void deleteMemoryPool(); //
  184651             : 
  184652             :           /// \private
  184653             :           static void extendMemoryPoolForFileIO(); //
  184654             : 
  184655             :           /// \private
  184656             :           static SgCloseStatement * getPointerFromGlobalIndex(unsigned long); //
  184657             :           /// \private
  184658             :           static SgCloseStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  184659             : 
  184660             :           /// \private
  184661             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  184662             :           /// \private
  184663             :           static void resetValidFreepointers(); //
  184664             :           /// \private
  184665             :           static unsigned long getNumberOfLastValidPointer(); //
  184666             : 
  184667             : 
  184668             : #if defined(INLINE_FUNCTIONS)
  184669             :       /*! \brief returns pointer to newly allocated IR node */
  184670             :           inline void *operator new (size_t size);
  184671             : #else
  184672             :       /*! \brief returns pointer to newly allocated IR node */
  184673             :           void *operator new (size_t size);
  184674             : #endif
  184675             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  184676             :           void operator delete (void* pointer, size_t size);
  184677             : 
  184678             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  184679           0 :           void operator delete (void* pointer)
  184680             :              {
  184681             :             // This is the generated delete operator...
  184682           0 :                SgCloseStatement::operator delete (pointer,sizeof(SgCloseStatement));
  184683             :              }
  184684             : 
  184685             :       /*! \brief Returns the total number of IR nodes of this type */
  184686             :           static size_t numberOfNodes();
  184687             : 
  184688             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  184689             :           static size_t memoryUsage();
  184690             : 
  184691             :       // End of scope which started in IR nodes specific code 
  184692             :       /* */
  184693             : 
  184694             :       /* name Internal Functions
  184695             :           \brief Internal functions ... incomplete-documentation
  184696             : 
  184697             :           These functions have been made public as part of the design, but they are suggested for internal use 
  184698             :           or by particularly knowledgeable users for specialized tools or applications.
  184699             : 
  184700             :           \internal We could not make these private because they are required by user for special purposes. And 
  184701             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  184702             :          
  184703             :        */
  184704             : 
  184705             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  184706             :        // overridden in every class by *generated* implementation
  184707             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  184708             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  184709             :        // MS: 06/28/02 container of names of variables or container indices 
  184710             :        // used used in the traversal to access AST successor nodes
  184711             :        // overridden in every class by *generated* implementation
  184712             :       /*! \brief container of names of variables or container indices used used in the traversal
  184713             :           to access AST successor nodes overridden in every class by *generated* implementation */
  184714             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  184715             : 
  184716             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  184717             :        // than all the vector copies. The implementation for these functions is generated for each class.
  184718             :       /*! \brief return number of children in the traversal successor list */
  184719             :           virtual size_t get_numberOfTraversalSuccessors() override;
  184720             :       /*! \brief index-based access to traversal successors by index number */
  184721             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  184722             :       /*! \brief index-based access to traversal successors by child node */
  184723             :           virtual size_t get_childIndex(SgNode *child) override;
  184724             : 
  184725             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  184726             :        // MS: 08/16/2002 method for generating RTI information
  184727             :       /*! \brief return C++ Runtime-Time-Information */
  184728             :           virtual RTIReturnType roseRTI() override;
  184729             : #endif
  184730             :       /* */
  184731             : 
  184732             : 
  184733             : 
  184734             :       /* name Deprecated Functions
  184735             :           \brief Deprecated functions ... incomplete-documentation
  184736             : 
  184737             :           These functions have been deprecated from use.
  184738             :        */
  184739             :       /* */
  184740             : 
  184741             :       /*! returns a C style string (char*) representing the class name */
  184742             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  184743             : 
  184744             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  184745             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  184746             : #if 0
  184747             :       /*! returns old style Sage II enum values */
  184748             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  184749             :       /*! returns old style Sage II enum values */
  184750             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  184751             : #endif
  184752             :       /* */
  184753             : 
  184754             : 
  184755             : 
  184756             : 
  184757             :      public:
  184758             :       /* name Traversal Support Functions
  184759             :           \brief Traversal support functions ... incomplete-documentation
  184760             : 
  184761             :           These functions have been made public as part of the design, but they are suggested for internal use 
  184762             :           or by particularly knowledgable users for specialized tools or applications.
  184763             :        */
  184764             :       /* */
  184765             : 
  184766             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  184767             :        // (inferior to ROSE traversal mechanism, experimental).
  184768             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  184769             :        */
  184770             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  184771             : 
  184772             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  184773             :       /*! \brief support for the classic visitor pattern done in GoF */
  184774             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  184775             : 
  184776             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  184777             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  184778             :        */
  184779             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  184780             : 
  184781             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  184782             :        */
  184783             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  184784             : 
  184785             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  184786             :        // This traversal helps support internal tools that call static member functions.
  184787             :        // note: this function operates on the memory pools.
  184788             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  184789             :        */
  184790             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  184791             :       /* */
  184792             : 
  184793             : 
  184794             :      public:
  184795             :       /* name Memory Allocation Functions
  184796             :           \brief Memory allocations functions ... incomplete-documentation
  184797             : 
  184798             :           These functions have been made public as part of the design, but they are suggested for internal use 
  184799             :           or by particularly knowledgable users for specialized tools or applications.
  184800             :        */
  184801             :       /* */
  184802             : 
  184803             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  184804             : 
  184805             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  184806             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  184807             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  184808             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  184809             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  184810             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  184811             :           being used with the AST File I/O mechanism.
  184812             :        */
  184813             :           virtual bool isInMemoryPool() override;
  184814             : 
  184815             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  184816             : 
  184817             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  184818             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  184819             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  184820             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  184821             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  184822             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  184823             :           being used with the AST File I/O mechanism.
  184824             :        */
  184825             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  184826             : 
  184827             :       // DQ (4/30/2006): Modified to be a const function.
  184828             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  184829             : 
  184830             :           This functions is part of general support for many possible tools to operate 
  184831             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  184832             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  184833             :           less than the set of pointers used by the AST file I/O. This is part of
  184834             :           work implemented by Andreas, and support tools such as the AST graph generation.
  184835             : 
  184836             :           \warning This function can return unexpected data members and thus the 
  184837             :                    order and the number of elements is unpredicable and subject 
  184838             :                    to change.
  184839             : 
  184840             :           \returns STL vector of pairs of SgNode* and strings
  184841             :        */
  184842             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  184843             : 
  184844             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  184845             : 
  184846             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  184847             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  184848             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  184849             : 
  184850             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  184851             :                    and subject to change.
  184852             :        */
  184853             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  184854             : 
  184855             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  184856             : 
  184857             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  184858             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  184859             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  184860             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  184861             : 
  184862             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  184863             : 
  184864             :           \returns long
  184865             :        */
  184866             :           virtual long getChildIndex( SgNode* childNode ) const override;
  184867             : 
  184868             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  184869             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  184870             :       /* \brief Constructor for use by AST File I/O Mechanism
  184871             : 
  184872             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  184873             :           which obtained via fast binary file I/O from disk.
  184874             :        */
  184875             :        // SgCloseStatement( SgCloseStatementStorageClass& source );
  184876             : 
  184877             : 
  184878             : 
  184879             : 
  184880             : 
  184881             :  // JH (10/24/2005): methods added to support the ast file IO
  184882             :     private:
  184883             : 
  184884             :       /* name AST Memory Allocation Support Functions
  184885             :           \brief Memory allocations support....
  184886             : 
  184887             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  184888             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  184889             :           and support the AST File I/O Mechanism.
  184890             :        */
  184891             :       /* */
  184892             : 
  184893             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  184894             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  184895             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  184896             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  184897             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  184898             :           a correspinding one in the AST_FILE_IO class!
  184899             :        */
  184900             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  184901             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  184902             :       /* \brief Typedef used for low level memory access.
  184903             :        */
  184904             :        // typedef unsigned char* TestType;
  184905             : 
  184906             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  184907             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  184908             :       /* \brief Typedef used to hold memory addresses as values.
  184909             :        */
  184910             :        // typedef unsigned long  AddressType;
  184911             : 
  184912             : 
  184913             : 
  184914             :        // necessary, to have direct access to the p_freepointer and the private methods !
  184915             :       /*! \brief friend class declaration to support AST File I/O */
  184916             :           friend class AST_FILE_IO;
  184917             : 
  184918             :       /*! \brief friend class declaration to support AST File I/O */
  184919             :           friend class SgCloseStatementStorageClass;
  184920             : 
  184921             :       /*! \brief friend class declaration to support AST File I/O */
  184922             :           friend class AstSpecificDataManagingClass;
  184923             : 
  184924             :       /*! \brief friend class declaration to support AST File I/O */
  184925             :           friend class AstSpecificDataManagingClassStorageClass;
  184926             :     public:
  184927             :       /*! \brief IR node constructor to support AST File I/O */
  184928             :           SgCloseStatement( const SgCloseStatementStorageClass& source );
  184929             : 
  184930             :  // private: // JJW hack
  184931             :        /*
  184932             :           name AST Memory Allocation Support Variables
  184933             :           Memory allocations support variables 
  184934             : 
  184935             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  184936             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  184937             :           and support the AST File I/O Mechanism.
  184938             :        */
  184939             :       /* */
  184940             : 
  184941             :     public:
  184942             : 
  184943             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  184944             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  184945             :       // virtual SgNode* addRegExpAttribute();
  184946             :       /*! \brief Support for AST matching using regular expression.
  184947             : 
  184948             :           This support is incomplete and the subject of current research to define 
  184949             :           RegEx trees to support inexact matching.
  184950             :        */
  184951             :           SgCloseStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  184952             : 
  184953             : // *** COMMON CODE SECTION ENDS HERE ***
  184954             : 
  184955             : 
  184956             : // End of memberFunctionString
  184957             : // Start of memberFunctionString
  184958             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  184959             : 
  184960             :      // the generated cast function
  184961             :      // friend ROSE_DLL_API SgCloseStatement* isSgCloseStatement ( SgNode* s );
  184962             : 
  184963             :           typedef SgIOStatement base_node_type;
  184964             : 
  184965             : 
  184966             : // End of memberFunctionString
  184967             : // Start of memberFunctionString
  184968             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  184969             : 
  184970             :           void post_construction_initialization() override;
  184971             : 
  184972             : 
  184973             : // End of memberFunctionString
  184974             : 
  184975             :      public: 
  184976             :          SgExpression* get_status() const;
  184977             :          void set_status(SgExpression* status);
  184978             : 
  184979             : 
  184980             :      public: 
  184981             :          virtual ~SgCloseStatement();
  184982             : 
  184983             : 
  184984             :      public: 
  184985             :          SgCloseStatement(Sg_File_Info* startOfConstruct ); 
  184986             :          SgCloseStatement(); 
  184987             : 
  184988             :     protected:
  184989             : // Start of memberFunctionString
  184990             : SgExpression* p_status;
  184991             :           
  184992             : // End of memberFunctionString
  184993             : 
  184994             :     friend struct Rose::Traits::generated::describe_node_t<SgCloseStatement>;
  184995             :     friend struct Rose::Traits::generated::describe_field_t<SgCloseStatement, SgExpression*,&SgCloseStatement::p_status>;
  184996             : 
  184997             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  184998             : 
  184999             : 
  185000             :    };
  185001             : #endif
  185002             : 
  185003             : // postdeclarations for SgCloseStatement
  185004             : 
  185005             : /* #line 185006 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185006             : 
  185007             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  185008             : 
  185009             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  185010             : 
  185011             : 
  185012             : /* #line 185013 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185013             : 
  185014             : 
  185015             : 
  185016             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  185017             : 
  185018             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  185019             : //      This code is automatically generated for each 
  185020             : //      terminal and non-terminal within the defined 
  185021             : //      grammar.  There is a simple way to change the 
  185022             : //      code to fix bugs etc.  See the ROSE README file
  185023             : //      for directions.
  185024             : 
  185025             : // tps: (02/22/2010): Adding DLL export requirements
  185026             : #include "rosedll.h"
  185027             : 
  185028             : // predeclarations for SgInquireStatement
  185029             : 
  185030             : /* #line 185031 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185031             : 
  185032             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  185033             : 
  185034             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  185035             : 
  185036             : #if 1
  185037             : // Class Definition for SgInquireStatement
  185038             : class ROSE_DLL_API SgInquireStatement  : public SgIOStatement
  185039             :    {
  185040             :      public:
  185041             : 
  185042             : 
  185043             : /* #line 185044 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185044             : 
  185045             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  185046             : // Start of memberFunctionString
  185047             : /* #line 3568 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  185048             : 
  185049             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  185050             :      virtual unsigned int cfgIndexForEnd() const override;
  185051             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  185052             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  185053             : #endif
  185054             : 
  185055             : 
  185056             : // End of memberFunctionString
  185057             : // Start of memberFunctionString
  185058             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  185059             : 
  185060             : // *** COMMON CODE SECTION BEGINS HERE ***
  185061             : 
  185062             :     public:
  185063             : 
  185064             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  185065             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  185066             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  185067             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  185068             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  185069             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  185070             : 
  185071             :       /*! \brief returns a string representing the class name */
  185072             :           virtual std::string class_name() const override;
  185073             : 
  185074             :       /*! \brief returns new style SageIII enum values */
  185075             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  185076             : 
  185077             :       /*! \brief static variant value */
  185078             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  185079             :        // static const VariantT static_variant = V_SgInquireStatement;
  185080             :           enum { static_variant = V_SgInquireStatement };
  185081             : 
  185082             :        /* the generated cast function */
  185083             :       /*! \brief Casts pointer from base class to derived class */
  185084             :           ROSE_DLL_API friend       SgInquireStatement* isSgInquireStatement(       SgNode * s );
  185085             : 
  185086             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  185087             :           ROSE_DLL_API friend const SgInquireStatement* isSgInquireStatement( const SgNode * s );
  185088             : 
  185089             :      // ******************************************
  185090             :      // * Memory Pool / New / Delete
  185091             :      // ******************************************
  185092             : 
  185093             :      public:
  185094             :           /// \private
  185095             :           static const unsigned pool_size; //
  185096             :           /// \private
  185097             :           static std::vector<unsigned char *> pools; //
  185098             :           /// \private
  185099             :           static SgInquireStatement * next_node; // 
  185100             : 
  185101             :           /// \private
  185102             :           static unsigned long initializeStorageClassArray(SgInquireStatementStorageClass *); //
  185103             : 
  185104             :           /// \private
  185105             :           static void clearMemoryPool(); //
  185106             :           static void deleteMemoryPool(); //
  185107             : 
  185108             :           /// \private
  185109             :           static void extendMemoryPoolForFileIO(); //
  185110             : 
  185111             :           /// \private
  185112             :           static SgInquireStatement * getPointerFromGlobalIndex(unsigned long); //
  185113             :           /// \private
  185114             :           static SgInquireStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  185115             : 
  185116             :           /// \private
  185117             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  185118             :           /// \private
  185119             :           static void resetValidFreepointers(); //
  185120             :           /// \private
  185121             :           static unsigned long getNumberOfLastValidPointer(); //
  185122             : 
  185123             : 
  185124             : #if defined(INLINE_FUNCTIONS)
  185125             :       /*! \brief returns pointer to newly allocated IR node */
  185126             :           inline void *operator new (size_t size);
  185127             : #else
  185128             :       /*! \brief returns pointer to newly allocated IR node */
  185129             :           void *operator new (size_t size);
  185130             : #endif
  185131             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  185132             :           void operator delete (void* pointer, size_t size);
  185133             : 
  185134             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  185135           0 :           void operator delete (void* pointer)
  185136             :              {
  185137             :             // This is the generated delete operator...
  185138           0 :                SgInquireStatement::operator delete (pointer,sizeof(SgInquireStatement));
  185139             :              }
  185140             : 
  185141             :       /*! \brief Returns the total number of IR nodes of this type */
  185142             :           static size_t numberOfNodes();
  185143             : 
  185144             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  185145             :           static size_t memoryUsage();
  185146             : 
  185147             :       // End of scope which started in IR nodes specific code 
  185148             :       /* */
  185149             : 
  185150             :       /* name Internal Functions
  185151             :           \brief Internal functions ... incomplete-documentation
  185152             : 
  185153             :           These functions have been made public as part of the design, but they are suggested for internal use 
  185154             :           or by particularly knowledgeable users for specialized tools or applications.
  185155             : 
  185156             :           \internal We could not make these private because they are required by user for special purposes. And 
  185157             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  185158             :          
  185159             :        */
  185160             : 
  185161             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  185162             :        // overridden in every class by *generated* implementation
  185163             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  185164             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  185165             :        // MS: 06/28/02 container of names of variables or container indices 
  185166             :        // used used in the traversal to access AST successor nodes
  185167             :        // overridden in every class by *generated* implementation
  185168             :       /*! \brief container of names of variables or container indices used used in the traversal
  185169             :           to access AST successor nodes overridden in every class by *generated* implementation */
  185170             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  185171             : 
  185172             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  185173             :        // than all the vector copies. The implementation for these functions is generated for each class.
  185174             :       /*! \brief return number of children in the traversal successor list */
  185175             :           virtual size_t get_numberOfTraversalSuccessors() override;
  185176             :       /*! \brief index-based access to traversal successors by index number */
  185177             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  185178             :       /*! \brief index-based access to traversal successors by child node */
  185179             :           virtual size_t get_childIndex(SgNode *child) override;
  185180             : 
  185181             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  185182             :        // MS: 08/16/2002 method for generating RTI information
  185183             :       /*! \brief return C++ Runtime-Time-Information */
  185184             :           virtual RTIReturnType roseRTI() override;
  185185             : #endif
  185186             :       /* */
  185187             : 
  185188             : 
  185189             : 
  185190             :       /* name Deprecated Functions
  185191             :           \brief Deprecated functions ... incomplete-documentation
  185192             : 
  185193             :           These functions have been deprecated from use.
  185194             :        */
  185195             :       /* */
  185196             : 
  185197             :       /*! returns a C style string (char*) representing the class name */
  185198             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  185199             : 
  185200             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  185201             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  185202             : #if 0
  185203             :       /*! returns old style Sage II enum values */
  185204             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  185205             :       /*! returns old style Sage II enum values */
  185206             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  185207             : #endif
  185208             :       /* */
  185209             : 
  185210             : 
  185211             : 
  185212             : 
  185213             :      public:
  185214             :       /* name Traversal Support Functions
  185215             :           \brief Traversal support functions ... incomplete-documentation
  185216             : 
  185217             :           These functions have been made public as part of the design, but they are suggested for internal use 
  185218             :           or by particularly knowledgable users for specialized tools or applications.
  185219             :        */
  185220             :       /* */
  185221             : 
  185222             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  185223             :        // (inferior to ROSE traversal mechanism, experimental).
  185224             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  185225             :        */
  185226             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  185227             : 
  185228             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  185229             :       /*! \brief support for the classic visitor pattern done in GoF */
  185230             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  185231             : 
  185232             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  185233             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  185234             :        */
  185235             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  185236             : 
  185237             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  185238             :        */
  185239             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  185240             : 
  185241             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  185242             :        // This traversal helps support internal tools that call static member functions.
  185243             :        // note: this function operates on the memory pools.
  185244             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  185245             :        */
  185246             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  185247             :       /* */
  185248             : 
  185249             : 
  185250             :      public:
  185251             :       /* name Memory Allocation Functions
  185252             :           \brief Memory allocations functions ... incomplete-documentation
  185253             : 
  185254             :           These functions have been made public as part of the design, but they are suggested for internal use 
  185255             :           or by particularly knowledgable users for specialized tools or applications.
  185256             :        */
  185257             :       /* */
  185258             : 
  185259             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  185260             : 
  185261             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  185262             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  185263             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  185264             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  185265             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  185266             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  185267             :           being used with the AST File I/O mechanism.
  185268             :        */
  185269             :           virtual bool isInMemoryPool() override;
  185270             : 
  185271             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  185272             : 
  185273             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  185274             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  185275             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  185276             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  185277             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  185278             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  185279             :           being used with the AST File I/O mechanism.
  185280             :        */
  185281             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  185282             : 
  185283             :       // DQ (4/30/2006): Modified to be a const function.
  185284             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  185285             : 
  185286             :           This functions is part of general support for many possible tools to operate 
  185287             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  185288             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  185289             :           less than the set of pointers used by the AST file I/O. This is part of
  185290             :           work implemented by Andreas, and support tools such as the AST graph generation.
  185291             : 
  185292             :           \warning This function can return unexpected data members and thus the 
  185293             :                    order and the number of elements is unpredicable and subject 
  185294             :                    to change.
  185295             : 
  185296             :           \returns STL vector of pairs of SgNode* and strings
  185297             :        */
  185298             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  185299             : 
  185300             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  185301             : 
  185302             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  185303             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  185304             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  185305             : 
  185306             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  185307             :                    and subject to change.
  185308             :        */
  185309             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  185310             : 
  185311             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  185312             : 
  185313             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  185314             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  185315             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  185316             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  185317             : 
  185318             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  185319             : 
  185320             :           \returns long
  185321             :        */
  185322             :           virtual long getChildIndex( SgNode* childNode ) const override;
  185323             : 
  185324             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  185325             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  185326             :       /* \brief Constructor for use by AST File I/O Mechanism
  185327             : 
  185328             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  185329             :           which obtained via fast binary file I/O from disk.
  185330             :        */
  185331             :        // SgInquireStatement( SgInquireStatementStorageClass& source );
  185332             : 
  185333             : 
  185334             : 
  185335             : 
  185336             : 
  185337             :  // JH (10/24/2005): methods added to support the ast file IO
  185338             :     private:
  185339             : 
  185340             :       /* name AST Memory Allocation Support Functions
  185341             :           \brief Memory allocations support....
  185342             : 
  185343             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  185344             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  185345             :           and support the AST File I/O Mechanism.
  185346             :        */
  185347             :       /* */
  185348             : 
  185349             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  185350             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  185351             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  185352             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  185353             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  185354             :           a correspinding one in the AST_FILE_IO class!
  185355             :        */
  185356             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  185357             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  185358             :       /* \brief Typedef used for low level memory access.
  185359             :        */
  185360             :        // typedef unsigned char* TestType;
  185361             : 
  185362             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  185363             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  185364             :       /* \brief Typedef used to hold memory addresses as values.
  185365             :        */
  185366             :        // typedef unsigned long  AddressType;
  185367             : 
  185368             : 
  185369             : 
  185370             :        // necessary, to have direct access to the p_freepointer and the private methods !
  185371             :       /*! \brief friend class declaration to support AST File I/O */
  185372             :           friend class AST_FILE_IO;
  185373             : 
  185374             :       /*! \brief friend class declaration to support AST File I/O */
  185375             :           friend class SgInquireStatementStorageClass;
  185376             : 
  185377             :       /*! \brief friend class declaration to support AST File I/O */
  185378             :           friend class AstSpecificDataManagingClass;
  185379             : 
  185380             :       /*! \brief friend class declaration to support AST File I/O */
  185381             :           friend class AstSpecificDataManagingClassStorageClass;
  185382             :     public:
  185383             :       /*! \brief IR node constructor to support AST File I/O */
  185384             :           SgInquireStatement( const SgInquireStatementStorageClass& source );
  185385             : 
  185386             :  // private: // JJW hack
  185387             :        /*
  185388             :           name AST Memory Allocation Support Variables
  185389             :           Memory allocations support variables 
  185390             : 
  185391             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  185392             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  185393             :           and support the AST File I/O Mechanism.
  185394             :        */
  185395             :       /* */
  185396             : 
  185397             :     public:
  185398             : 
  185399             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  185400             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  185401             :       // virtual SgNode* addRegExpAttribute();
  185402             :       /*! \brief Support for AST matching using regular expression.
  185403             : 
  185404             :           This support is incomplete and the subject of current research to define 
  185405             :           RegEx trees to support inexact matching.
  185406             :        */
  185407             :           SgInquireStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  185408             : 
  185409             : // *** COMMON CODE SECTION ENDS HERE ***
  185410             : 
  185411             : 
  185412             : // End of memberFunctionString
  185413             : // Start of memberFunctionString
  185414             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  185415             : 
  185416             :      // the generated cast function
  185417             :      // friend ROSE_DLL_API SgInquireStatement* isSgInquireStatement ( SgNode* s );
  185418             : 
  185419             :           typedef SgIOStatement base_node_type;
  185420             : 
  185421             : 
  185422             : // End of memberFunctionString
  185423             : // Start of memberFunctionString
  185424             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  185425             : 
  185426             :           void post_construction_initialization() override;
  185427             : 
  185428             : 
  185429             : // End of memberFunctionString
  185430             : 
  185431             :      public: 
  185432             :          SgExpression* get_file() const;
  185433             :          void set_file(SgExpression* file);
  185434             : 
  185435             :      public: 
  185436             :          SgExpression* get_access() const;
  185437             :          void set_access(SgExpression* access);
  185438             : 
  185439             :      public: 
  185440             :          SgExpression* get_form() const;
  185441             :          void set_form(SgExpression* form);
  185442             : 
  185443             :      public: 
  185444             :          SgExpression* get_recl() const;
  185445             :          void set_recl(SgExpression* recl);
  185446             : 
  185447             :      public: 
  185448             :          SgExpression* get_blank() const;
  185449             :          void set_blank(SgExpression* blank);
  185450             : 
  185451             :      public: 
  185452             :          SgExpression* get_exist() const;
  185453             :          void set_exist(SgExpression* exist);
  185454             : 
  185455             :      public: 
  185456             :          SgExpression* get_opened() const;
  185457             :          void set_opened(SgExpression* opened);
  185458             : 
  185459             :      public: 
  185460             :          SgExpression* get_number() const;
  185461             :          void set_number(SgExpression* number);
  185462             : 
  185463             :      public: 
  185464             :          SgExpression* get_named() const;
  185465             :          void set_named(SgExpression* named);
  185466             : 
  185467             :      public: 
  185468             :          SgExpression* get_name() const /* (getDataAccessFunctionPrototypeString) */;
  185469             :          void set_name(SgExpression* name) /* (getDataAccessFunctionPrototypeString) */;
  185470             : 
  185471             :      public: 
  185472             :          SgExpression* get_sequential() const;
  185473             :          void set_sequential(SgExpression* sequential);
  185474             : 
  185475             :      public: 
  185476             :          SgExpression* get_direct() const;
  185477             :          void set_direct(SgExpression* direct);
  185478             : 
  185479             :      public: 
  185480             :          SgExpression* get_formatted() const;
  185481             :          void set_formatted(SgExpression* formatted);
  185482             : 
  185483             :      public: 
  185484             :          SgExpression* get_unformatted() const;
  185485             :          void set_unformatted(SgExpression* unformatted);
  185486             : 
  185487             :      public: 
  185488             :          SgExpression* get_nextrec() const;
  185489             :          void set_nextrec(SgExpression* nextrec);
  185490             : 
  185491             :      public: 
  185492             :          SgExpression* get_position() const;
  185493             :          void set_position(SgExpression* position);
  185494             : 
  185495             :      public: 
  185496             :          SgExpression* get_action() const;
  185497             :          void set_action(SgExpression* action);
  185498             : 
  185499             :      public: 
  185500             :          SgExpression* get_read() const;
  185501             :          void set_read(SgExpression* read);
  185502             : 
  185503             :      public: 
  185504             :          SgExpression* get_write() const;
  185505             :          void set_write(SgExpression* write);
  185506             : 
  185507             :      public: 
  185508             :          SgExpression* get_readwrite() const;
  185509             :          void set_readwrite(SgExpression* readwrite);
  185510             : 
  185511             :      public: 
  185512             :          SgExpression* get_delim() const;
  185513             :          void set_delim(SgExpression* delim);
  185514             : 
  185515             :      public: 
  185516             :          SgExpression* get_pad() const;
  185517             :          void set_pad(SgExpression* pad);
  185518             : 
  185519             :      public: 
  185520             :          SgExpression* get_asynchronous() const;
  185521             :          void set_asynchronous(SgExpression* asynchronous);
  185522             : 
  185523             :      public: 
  185524             :          SgExpression* get_decimal() const;
  185525             :          void set_decimal(SgExpression* decimal);
  185526             : 
  185527             :      public: 
  185528             :          SgExpression* get_stream() const;
  185529             :          void set_stream(SgExpression* stream);
  185530             : 
  185531             :      public: 
  185532             :          SgExpression* get_size() const;
  185533             :          void set_size(SgExpression* size);
  185534             : 
  185535             :      public: 
  185536             :          SgExpression* get_pending() const;
  185537             :          void set_pending(SgExpression* pending);
  185538             : 
  185539             :      public: 
  185540             :          SgVarRefExp* get_iolengthExp() const;
  185541             :          void set_iolengthExp(SgVarRefExp* iolengthExp);
  185542             : 
  185543             : 
  185544             :      public: 
  185545             :          virtual ~SgInquireStatement();
  185546             : 
  185547             : 
  185548             :      public: 
  185549             :          SgInquireStatement(Sg_File_Info* startOfConstruct ); 
  185550             :          SgInquireStatement(); 
  185551             : 
  185552             :     protected:
  185553             : // Start of memberFunctionString
  185554             : SgExpression* p_file;
  185555             :           
  185556             : // End of memberFunctionString
  185557             : // Start of memberFunctionString
  185558             : SgExpression* p_access;
  185559             :           
  185560             : // End of memberFunctionString
  185561             : // Start of memberFunctionString
  185562             : SgExpression* p_form;
  185563             :           
  185564             : // End of memberFunctionString
  185565             : // Start of memberFunctionString
  185566             : SgExpression* p_recl;
  185567             :           
  185568             : // End of memberFunctionString
  185569             : // Start of memberFunctionString
  185570             : SgExpression* p_blank;
  185571             :           
  185572             : // End of memberFunctionString
  185573             : // Start of memberFunctionString
  185574             : SgExpression* p_exist;
  185575             :           
  185576             : // End of memberFunctionString
  185577             : // Start of memberFunctionString
  185578             : SgExpression* p_opened;
  185579             :           
  185580             : // End of memberFunctionString
  185581             : // Start of memberFunctionString
  185582             : SgExpression* p_number;
  185583             :           
  185584             : // End of memberFunctionString
  185585             : // Start of memberFunctionString
  185586             : SgExpression* p_named;
  185587             :           
  185588             : // End of memberFunctionString
  185589             : // Start of memberFunctionString
  185590             : SgExpression* p_name;
  185591             :           
  185592             : // End of memberFunctionString
  185593             : // Start of memberFunctionString
  185594             : SgExpression* p_sequential;
  185595             :           
  185596             : // End of memberFunctionString
  185597             : // Start of memberFunctionString
  185598             : SgExpression* p_direct;
  185599             :           
  185600             : // End of memberFunctionString
  185601             : // Start of memberFunctionString
  185602             : SgExpression* p_formatted;
  185603             :           
  185604             : // End of memberFunctionString
  185605             : // Start of memberFunctionString
  185606             : SgExpression* p_unformatted;
  185607             :           
  185608             : // End of memberFunctionString
  185609             : // Start of memberFunctionString
  185610             : SgExpression* p_nextrec;
  185611             :           
  185612             : // End of memberFunctionString
  185613             : // Start of memberFunctionString
  185614             : SgExpression* p_position;
  185615             :           
  185616             : // End of memberFunctionString
  185617             : // Start of memberFunctionString
  185618             : SgExpression* p_action;
  185619             :           
  185620             : // End of memberFunctionString
  185621             : // Start of memberFunctionString
  185622             : SgExpression* p_read;
  185623             :           
  185624             : // End of memberFunctionString
  185625             : // Start of memberFunctionString
  185626             : SgExpression* p_write;
  185627             :           
  185628             : // End of memberFunctionString
  185629             : // Start of memberFunctionString
  185630             : SgExpression* p_readwrite;
  185631             :           
  185632             : // End of memberFunctionString
  185633             : // Start of memberFunctionString
  185634             : SgExpression* p_delim;
  185635             :           
  185636             : // End of memberFunctionString
  185637             : // Start of memberFunctionString
  185638             : SgExpression* p_pad;
  185639             :           
  185640             : // End of memberFunctionString
  185641             : // Start of memberFunctionString
  185642             : SgExpression* p_asynchronous;
  185643             :           
  185644             : // End of memberFunctionString
  185645             : // Start of memberFunctionString
  185646             : SgExpression* p_decimal;
  185647             :           
  185648             : // End of memberFunctionString
  185649             : // Start of memberFunctionString
  185650             : SgExpression* p_stream;
  185651             :           
  185652             : // End of memberFunctionString
  185653             : // Start of memberFunctionString
  185654             : SgExpression* p_size;
  185655             :           
  185656             : // End of memberFunctionString
  185657             : // Start of memberFunctionString
  185658             : SgExpression* p_pending;
  185659             :           
  185660             : // End of memberFunctionString
  185661             : // Start of memberFunctionString
  185662             : SgVarRefExp* p_iolengthExp;
  185663             :           
  185664             : // End of memberFunctionString
  185665             : 
  185666             :     friend struct Rose::Traits::generated::describe_node_t<SgInquireStatement>;
  185667             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_file>;
  185668             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_access>;
  185669             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_form>;
  185670             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_recl>;
  185671             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_blank>;
  185672             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_exist>;
  185673             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_opened>;
  185674             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_number>;
  185675             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_named>;
  185676             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_name>;
  185677             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_sequential>;
  185678             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_direct>;
  185679             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_formatted>;
  185680             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_unformatted>;
  185681             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_nextrec>;
  185682             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_position>;
  185683             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_action>;
  185684             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_read>;
  185685             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_write>;
  185686             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_readwrite>;
  185687             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_delim>;
  185688             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_pad>;
  185689             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_asynchronous>;
  185690             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_decimal>;
  185691             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_stream>;
  185692             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_size>;
  185693             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgExpression*,&SgInquireStatement::p_pending>;
  185694             :     friend struct Rose::Traits::generated::describe_field_t<SgInquireStatement, SgVarRefExp*,&SgInquireStatement::p_iolengthExp>;
  185695             : 
  185696             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  185697             : 
  185698             : 
  185699             :    };
  185700             : #endif
  185701             : 
  185702             : // postdeclarations for SgInquireStatement
  185703             : 
  185704             : /* #line 185705 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185705             : 
  185706             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  185707             : 
  185708             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  185709             : 
  185710             : 
  185711             : /* #line 185712 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185712             : 
  185713             : 
  185714             : 
  185715             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  185716             : 
  185717             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  185718             : //      This code is automatically generated for each 
  185719             : //      terminal and non-terminal within the defined 
  185720             : //      grammar.  There is a simple way to change the 
  185721             : //      code to fix bugs etc.  See the ROSE README file
  185722             : //      for directions.
  185723             : 
  185724             : // tps: (02/22/2010): Adding DLL export requirements
  185725             : #include "rosedll.h"
  185726             : 
  185727             : // predeclarations for SgFlushStatement
  185728             : 
  185729             : /* #line 185730 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185730             : 
  185731             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  185732             : 
  185733             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  185734             : 
  185735             : #if 1
  185736             : // Class Definition for SgFlushStatement
  185737             : class ROSE_DLL_API SgFlushStatement  : public SgIOStatement
  185738             :    {
  185739             :      public:
  185740             : 
  185741             : 
  185742             : /* #line 185743 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  185743             : 
  185744             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  185745             : // Start of memberFunctionString
  185746             : /* #line 3576 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  185747             : 
  185748             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  185749             :      virtual unsigned int cfgIndexForEnd() const override;
  185750             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  185751             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  185752             : #endif
  185753             : 
  185754             : 
  185755             : // End of memberFunctionString
  185756             : // Start of memberFunctionString
  185757             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  185758             : 
  185759             : // *** COMMON CODE SECTION BEGINS HERE ***
  185760             : 
  185761             :     public:
  185762             : 
  185763             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  185764             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  185765             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  185766             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  185767             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  185768             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  185769             : 
  185770             :       /*! \brief returns a string representing the class name */
  185771             :           virtual std::string class_name() const override;
  185772             : 
  185773             :       /*! \brief returns new style SageIII enum values */
  185774             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  185775             : 
  185776             :       /*! \brief static variant value */
  185777             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  185778             :        // static const VariantT static_variant = V_SgFlushStatement;
  185779             :           enum { static_variant = V_SgFlushStatement };
  185780             : 
  185781             :        /* the generated cast function */
  185782             :       /*! \brief Casts pointer from base class to derived class */
  185783             :           ROSE_DLL_API friend       SgFlushStatement* isSgFlushStatement(       SgNode * s );
  185784             : 
  185785             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  185786             :           ROSE_DLL_API friend const SgFlushStatement* isSgFlushStatement( const SgNode * s );
  185787             : 
  185788             :      // ******************************************
  185789             :      // * Memory Pool / New / Delete
  185790             :      // ******************************************
  185791             : 
  185792             :      public:
  185793             :           /// \private
  185794             :           static const unsigned pool_size; //
  185795             :           /// \private
  185796             :           static std::vector<unsigned char *> pools; //
  185797             :           /// \private
  185798             :           static SgFlushStatement * next_node; // 
  185799             : 
  185800             :           /// \private
  185801             :           static unsigned long initializeStorageClassArray(SgFlushStatementStorageClass *); //
  185802             : 
  185803             :           /// \private
  185804             :           static void clearMemoryPool(); //
  185805             :           static void deleteMemoryPool(); //
  185806             : 
  185807             :           /// \private
  185808             :           static void extendMemoryPoolForFileIO(); //
  185809             : 
  185810             :           /// \private
  185811             :           static SgFlushStatement * getPointerFromGlobalIndex(unsigned long); //
  185812             :           /// \private
  185813             :           static SgFlushStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  185814             : 
  185815             :           /// \private
  185816             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  185817             :           /// \private
  185818             :           static void resetValidFreepointers(); //
  185819             :           /// \private
  185820             :           static unsigned long getNumberOfLastValidPointer(); //
  185821             : 
  185822             : 
  185823             : #if defined(INLINE_FUNCTIONS)
  185824             :       /*! \brief returns pointer to newly allocated IR node */
  185825             :           inline void *operator new (size_t size);
  185826             : #else
  185827             :       /*! \brief returns pointer to newly allocated IR node */
  185828             :           void *operator new (size_t size);
  185829             : #endif
  185830             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  185831             :           void operator delete (void* pointer, size_t size);
  185832             : 
  185833             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  185834           0 :           void operator delete (void* pointer)
  185835             :              {
  185836             :             // This is the generated delete operator...
  185837           0 :                SgFlushStatement::operator delete (pointer,sizeof(SgFlushStatement));
  185838             :              }
  185839             : 
  185840             :       /*! \brief Returns the total number of IR nodes of this type */
  185841             :           static size_t numberOfNodes();
  185842             : 
  185843             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  185844             :           static size_t memoryUsage();
  185845             : 
  185846             :       // End of scope which started in IR nodes specific code 
  185847             :       /* */
  185848             : 
  185849             :       /* name Internal Functions
  185850             :           \brief Internal functions ... incomplete-documentation
  185851             : 
  185852             :           These functions have been made public as part of the design, but they are suggested for internal use 
  185853             :           or by particularly knowledgeable users for specialized tools or applications.
  185854             : 
  185855             :           \internal We could not make these private because they are required by user for special purposes. And 
  185856             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  185857             :          
  185858             :        */
  185859             : 
  185860             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  185861             :        // overridden in every class by *generated* implementation
  185862             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  185863             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  185864             :        // MS: 06/28/02 container of names of variables or container indices 
  185865             :        // used used in the traversal to access AST successor nodes
  185866             :        // overridden in every class by *generated* implementation
  185867             :       /*! \brief container of names of variables or container indices used used in the traversal
  185868             :           to access AST successor nodes overridden in every class by *generated* implementation */
  185869             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  185870             : 
  185871             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  185872             :        // than all the vector copies. The implementation for these functions is generated for each class.
  185873             :       /*! \brief return number of children in the traversal successor list */
  185874             :           virtual size_t get_numberOfTraversalSuccessors() override;
  185875             :       /*! \brief index-based access to traversal successors by index number */
  185876             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  185877             :       /*! \brief index-based access to traversal successors by child node */
  185878             :           virtual size_t get_childIndex(SgNode *child) override;
  185879             : 
  185880             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  185881             :        // MS: 08/16/2002 method for generating RTI information
  185882             :       /*! \brief return C++ Runtime-Time-Information */
  185883             :           virtual RTIReturnType roseRTI() override;
  185884             : #endif
  185885             :       /* */
  185886             : 
  185887             : 
  185888             : 
  185889             :       /* name Deprecated Functions
  185890             :           \brief Deprecated functions ... incomplete-documentation
  185891             : 
  185892             :           These functions have been deprecated from use.
  185893             :        */
  185894             :       /* */
  185895             : 
  185896             :       /*! returns a C style string (char*) representing the class name */
  185897             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  185898             : 
  185899             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  185900             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  185901             : #if 0
  185902             :       /*! returns old style Sage II enum values */
  185903             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  185904             :       /*! returns old style Sage II enum values */
  185905             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  185906             : #endif
  185907             :       /* */
  185908             : 
  185909             : 
  185910             : 
  185911             : 
  185912             :      public:
  185913             :       /* name Traversal Support Functions
  185914             :           \brief Traversal support functions ... incomplete-documentation
  185915             : 
  185916             :           These functions have been made public as part of the design, but they are suggested for internal use 
  185917             :           or by particularly knowledgable users for specialized tools or applications.
  185918             :        */
  185919             :       /* */
  185920             : 
  185921             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  185922             :        // (inferior to ROSE traversal mechanism, experimental).
  185923             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  185924             :        */
  185925             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  185926             : 
  185927             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  185928             :       /*! \brief support for the classic visitor pattern done in GoF */
  185929             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  185930             : 
  185931             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  185932             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  185933             :        */
  185934             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  185935             : 
  185936             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  185937             :        */
  185938             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  185939             : 
  185940             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  185941             :        // This traversal helps support internal tools that call static member functions.
  185942             :        // note: this function operates on the memory pools.
  185943             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  185944             :        */
  185945             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  185946             :       /* */
  185947             : 
  185948             : 
  185949             :      public:
  185950             :       /* name Memory Allocation Functions
  185951             :           \brief Memory allocations functions ... incomplete-documentation
  185952             : 
  185953             :           These functions have been made public as part of the design, but they are suggested for internal use 
  185954             :           or by particularly knowledgable users for specialized tools or applications.
  185955             :        */
  185956             :       /* */
  185957             : 
  185958             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  185959             : 
  185960             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  185961             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  185962             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  185963             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  185964             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  185965             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  185966             :           being used with the AST File I/O mechanism.
  185967             :        */
  185968             :           virtual bool isInMemoryPool() override;
  185969             : 
  185970             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  185971             : 
  185972             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  185973             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  185974             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  185975             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  185976             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  185977             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  185978             :           being used with the AST File I/O mechanism.
  185979             :        */
  185980             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  185981             : 
  185982             :       // DQ (4/30/2006): Modified to be a const function.
  185983             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  185984             : 
  185985             :           This functions is part of general support for many possible tools to operate 
  185986             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  185987             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  185988             :           less than the set of pointers used by the AST file I/O. This is part of
  185989             :           work implemented by Andreas, and support tools such as the AST graph generation.
  185990             : 
  185991             :           \warning This function can return unexpected data members and thus the 
  185992             :                    order and the number of elements is unpredicable and subject 
  185993             :                    to change.
  185994             : 
  185995             :           \returns STL vector of pairs of SgNode* and strings
  185996             :        */
  185997             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  185998             : 
  185999             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  186000             : 
  186001             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  186002             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  186003             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  186004             : 
  186005             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  186006             :                    and subject to change.
  186007             :        */
  186008             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  186009             : 
  186010             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  186011             : 
  186012             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  186013             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  186014             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  186015             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  186016             : 
  186017             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  186018             : 
  186019             :           \returns long
  186020             :        */
  186021             :           virtual long getChildIndex( SgNode* childNode ) const override;
  186022             : 
  186023             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  186024             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186025             :       /* \brief Constructor for use by AST File I/O Mechanism
  186026             : 
  186027             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  186028             :           which obtained via fast binary file I/O from disk.
  186029             :        */
  186030             :        // SgFlushStatement( SgFlushStatementStorageClass& source );
  186031             : 
  186032             : 
  186033             : 
  186034             : 
  186035             : 
  186036             :  // JH (10/24/2005): methods added to support the ast file IO
  186037             :     private:
  186038             : 
  186039             :       /* name AST Memory Allocation Support Functions
  186040             :           \brief Memory allocations support....
  186041             : 
  186042             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  186043             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  186044             :           and support the AST File I/O Mechanism.
  186045             :        */
  186046             :       /* */
  186047             : 
  186048             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  186049             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  186050             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  186051             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  186052             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  186053             :           a correspinding one in the AST_FILE_IO class!
  186054             :        */
  186055             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  186056             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186057             :       /* \brief Typedef used for low level memory access.
  186058             :        */
  186059             :        // typedef unsigned char* TestType;
  186060             : 
  186061             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  186062             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186063             :       /* \brief Typedef used to hold memory addresses as values.
  186064             :        */
  186065             :        // typedef unsigned long  AddressType;
  186066             : 
  186067             : 
  186068             : 
  186069             :        // necessary, to have direct access to the p_freepointer and the private methods !
  186070             :       /*! \brief friend class declaration to support AST File I/O */
  186071             :           friend class AST_FILE_IO;
  186072             : 
  186073             :       /*! \brief friend class declaration to support AST File I/O */
  186074             :           friend class SgFlushStatementStorageClass;
  186075             : 
  186076             :       /*! \brief friend class declaration to support AST File I/O */
  186077             :           friend class AstSpecificDataManagingClass;
  186078             : 
  186079             :       /*! \brief friend class declaration to support AST File I/O */
  186080             :           friend class AstSpecificDataManagingClassStorageClass;
  186081             :     public:
  186082             :       /*! \brief IR node constructor to support AST File I/O */
  186083             :           SgFlushStatement( const SgFlushStatementStorageClass& source );
  186084             : 
  186085             :  // private: // JJW hack
  186086             :        /*
  186087             :           name AST Memory Allocation Support Variables
  186088             :           Memory allocations support variables 
  186089             : 
  186090             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  186091             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  186092             :           and support the AST File I/O Mechanism.
  186093             :        */
  186094             :       /* */
  186095             : 
  186096             :     public:
  186097             : 
  186098             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  186099             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  186100             :       // virtual SgNode* addRegExpAttribute();
  186101             :       /*! \brief Support for AST matching using regular expression.
  186102             : 
  186103             :           This support is incomplete and the subject of current research to define 
  186104             :           RegEx trees to support inexact matching.
  186105             :        */
  186106             :           SgFlushStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  186107             : 
  186108             : // *** COMMON CODE SECTION ENDS HERE ***
  186109             : 
  186110             : 
  186111             : // End of memberFunctionString
  186112             : // Start of memberFunctionString
  186113             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  186114             : 
  186115             :      // the generated cast function
  186116             :      // friend ROSE_DLL_API SgFlushStatement* isSgFlushStatement ( SgNode* s );
  186117             : 
  186118             :           typedef SgIOStatement base_node_type;
  186119             : 
  186120             : 
  186121             : // End of memberFunctionString
  186122             : // Start of memberFunctionString
  186123             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  186124             : 
  186125             :           void post_construction_initialization() override;
  186126             : 
  186127             : 
  186128             : // End of memberFunctionString
  186129             : 
  186130             : 
  186131             :      public: 
  186132             :          virtual ~SgFlushStatement();
  186133             : 
  186134             : 
  186135             :      public: 
  186136             :          SgFlushStatement(Sg_File_Info* startOfConstruct ); 
  186137             :          SgFlushStatement(); 
  186138             : 
  186139             :     protected:
  186140             : 
  186141             :     friend struct Rose::Traits::generated::describe_node_t<SgFlushStatement>;
  186142             : 
  186143             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186144             : 
  186145             : 
  186146             :    };
  186147             : #endif
  186148             : 
  186149             : // postdeclarations for SgFlushStatement
  186150             : 
  186151             : /* #line 186152 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186152             : 
  186153             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  186154             : 
  186155             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186156             : 
  186157             : 
  186158             : /* #line 186159 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186159             : 
  186160             : 
  186161             : 
  186162             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186163             : 
  186164             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  186165             : //      This code is automatically generated for each 
  186166             : //      terminal and non-terminal within the defined 
  186167             : //      grammar.  There is a simple way to change the 
  186168             : //      code to fix bugs etc.  See the ROSE README file
  186169             : //      for directions.
  186170             : 
  186171             : // tps: (02/22/2010): Adding DLL export requirements
  186172             : #include "rosedll.h"
  186173             : 
  186174             : // predeclarations for SgBackspaceStatement
  186175             : 
  186176             : /* #line 186177 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186177             : 
  186178             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  186179             : 
  186180             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186181             : 
  186182             : #if 1
  186183             : // Class Definition for SgBackspaceStatement
  186184             : class ROSE_DLL_API SgBackspaceStatement  : public SgIOStatement
  186185             :    {
  186186             :      public:
  186187             : 
  186188             : 
  186189             : /* #line 186190 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186190             : 
  186191             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  186192             : // Start of memberFunctionString
  186193             : /* #line 3592 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  186194             : 
  186195             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  186196             :      virtual unsigned int cfgIndexForEnd() const override;
  186197             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  186198             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  186199             : #endif
  186200             : 
  186201             : 
  186202             : // End of memberFunctionString
  186203             : // Start of memberFunctionString
  186204             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  186205             : 
  186206             : // *** COMMON CODE SECTION BEGINS HERE ***
  186207             : 
  186208             :     public:
  186209             : 
  186210             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  186211             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  186212             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  186213             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  186214             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  186215             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  186216             : 
  186217             :       /*! \brief returns a string representing the class name */
  186218             :           virtual std::string class_name() const override;
  186219             : 
  186220             :       /*! \brief returns new style SageIII enum values */
  186221             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  186222             : 
  186223             :       /*! \brief static variant value */
  186224             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  186225             :        // static const VariantT static_variant = V_SgBackspaceStatement;
  186226             :           enum { static_variant = V_SgBackspaceStatement };
  186227             : 
  186228             :        /* the generated cast function */
  186229             :       /*! \brief Casts pointer from base class to derived class */
  186230             :           ROSE_DLL_API friend       SgBackspaceStatement* isSgBackspaceStatement(       SgNode * s );
  186231             : 
  186232             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  186233             :           ROSE_DLL_API friend const SgBackspaceStatement* isSgBackspaceStatement( const SgNode * s );
  186234             : 
  186235             :      // ******************************************
  186236             :      // * Memory Pool / New / Delete
  186237             :      // ******************************************
  186238             : 
  186239             :      public:
  186240             :           /// \private
  186241             :           static const unsigned pool_size; //
  186242             :           /// \private
  186243             :           static std::vector<unsigned char *> pools; //
  186244             :           /// \private
  186245             :           static SgBackspaceStatement * next_node; // 
  186246             : 
  186247             :           /// \private
  186248             :           static unsigned long initializeStorageClassArray(SgBackspaceStatementStorageClass *); //
  186249             : 
  186250             :           /// \private
  186251             :           static void clearMemoryPool(); //
  186252             :           static void deleteMemoryPool(); //
  186253             : 
  186254             :           /// \private
  186255             :           static void extendMemoryPoolForFileIO(); //
  186256             : 
  186257             :           /// \private
  186258             :           static SgBackspaceStatement * getPointerFromGlobalIndex(unsigned long); //
  186259             :           /// \private
  186260             :           static SgBackspaceStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  186261             : 
  186262             :           /// \private
  186263             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  186264             :           /// \private
  186265             :           static void resetValidFreepointers(); //
  186266             :           /// \private
  186267             :           static unsigned long getNumberOfLastValidPointer(); //
  186268             : 
  186269             : 
  186270             : #if defined(INLINE_FUNCTIONS)
  186271             :       /*! \brief returns pointer to newly allocated IR node */
  186272             :           inline void *operator new (size_t size);
  186273             : #else
  186274             :       /*! \brief returns pointer to newly allocated IR node */
  186275             :           void *operator new (size_t size);
  186276             : #endif
  186277             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  186278             :           void operator delete (void* pointer, size_t size);
  186279             : 
  186280             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  186281           0 :           void operator delete (void* pointer)
  186282             :              {
  186283             :             // This is the generated delete operator...
  186284           0 :                SgBackspaceStatement::operator delete (pointer,sizeof(SgBackspaceStatement));
  186285             :              }
  186286             : 
  186287             :       /*! \brief Returns the total number of IR nodes of this type */
  186288             :           static size_t numberOfNodes();
  186289             : 
  186290             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  186291             :           static size_t memoryUsage();
  186292             : 
  186293             :       // End of scope which started in IR nodes specific code 
  186294             :       /* */
  186295             : 
  186296             :       /* name Internal Functions
  186297             :           \brief Internal functions ... incomplete-documentation
  186298             : 
  186299             :           These functions have been made public as part of the design, but they are suggested for internal use 
  186300             :           or by particularly knowledgeable users for specialized tools or applications.
  186301             : 
  186302             :           \internal We could not make these private because they are required by user for special purposes. And 
  186303             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  186304             :          
  186305             :        */
  186306             : 
  186307             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  186308             :        // overridden in every class by *generated* implementation
  186309             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  186310             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  186311             :        // MS: 06/28/02 container of names of variables or container indices 
  186312             :        // used used in the traversal to access AST successor nodes
  186313             :        // overridden in every class by *generated* implementation
  186314             :       /*! \brief container of names of variables or container indices used used in the traversal
  186315             :           to access AST successor nodes overridden in every class by *generated* implementation */
  186316             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  186317             : 
  186318             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  186319             :        // than all the vector copies. The implementation for these functions is generated for each class.
  186320             :       /*! \brief return number of children in the traversal successor list */
  186321             :           virtual size_t get_numberOfTraversalSuccessors() override;
  186322             :       /*! \brief index-based access to traversal successors by index number */
  186323             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  186324             :       /*! \brief index-based access to traversal successors by child node */
  186325             :           virtual size_t get_childIndex(SgNode *child) override;
  186326             : 
  186327             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  186328             :        // MS: 08/16/2002 method for generating RTI information
  186329             :       /*! \brief return C++ Runtime-Time-Information */
  186330             :           virtual RTIReturnType roseRTI() override;
  186331             : #endif
  186332             :       /* */
  186333             : 
  186334             : 
  186335             : 
  186336             :       /* name Deprecated Functions
  186337             :           \brief Deprecated functions ... incomplete-documentation
  186338             : 
  186339             :           These functions have been deprecated from use.
  186340             :        */
  186341             :       /* */
  186342             : 
  186343             :       /*! returns a C style string (char*) representing the class name */
  186344             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  186345             : 
  186346             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  186347             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  186348             : #if 0
  186349             :       /*! returns old style Sage II enum values */
  186350             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  186351             :       /*! returns old style Sage II enum values */
  186352             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  186353             : #endif
  186354             :       /* */
  186355             : 
  186356             : 
  186357             : 
  186358             : 
  186359             :      public:
  186360             :       /* name Traversal Support Functions
  186361             :           \brief Traversal support functions ... incomplete-documentation
  186362             : 
  186363             :           These functions have been made public as part of the design, but they are suggested for internal use 
  186364             :           or by particularly knowledgable users for specialized tools or applications.
  186365             :        */
  186366             :       /* */
  186367             : 
  186368             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  186369             :        // (inferior to ROSE traversal mechanism, experimental).
  186370             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  186371             :        */
  186372             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  186373             : 
  186374             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  186375             :       /*! \brief support for the classic visitor pattern done in GoF */
  186376             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  186377             : 
  186378             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  186379             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  186380             :        */
  186381             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  186382             : 
  186383             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  186384             :        */
  186385             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  186386             : 
  186387             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  186388             :        // This traversal helps support internal tools that call static member functions.
  186389             :        // note: this function operates on the memory pools.
  186390             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  186391             :        */
  186392             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  186393             :       /* */
  186394             : 
  186395             : 
  186396             :      public:
  186397             :       /* name Memory Allocation Functions
  186398             :           \brief Memory allocations functions ... incomplete-documentation
  186399             : 
  186400             :           These functions have been made public as part of the design, but they are suggested for internal use 
  186401             :           or by particularly knowledgable users for specialized tools or applications.
  186402             :        */
  186403             :       /* */
  186404             : 
  186405             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  186406             : 
  186407             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  186408             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  186409             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  186410             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  186411             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  186412             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  186413             :           being used with the AST File I/O mechanism.
  186414             :        */
  186415             :           virtual bool isInMemoryPool() override;
  186416             : 
  186417             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  186418             : 
  186419             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  186420             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  186421             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  186422             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  186423             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  186424             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  186425             :           being used with the AST File I/O mechanism.
  186426             :        */
  186427             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  186428             : 
  186429             :       // DQ (4/30/2006): Modified to be a const function.
  186430             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  186431             : 
  186432             :           This functions is part of general support for many possible tools to operate 
  186433             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  186434             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  186435             :           less than the set of pointers used by the AST file I/O. This is part of
  186436             :           work implemented by Andreas, and support tools such as the AST graph generation.
  186437             : 
  186438             :           \warning This function can return unexpected data members and thus the 
  186439             :                    order and the number of elements is unpredicable and subject 
  186440             :                    to change.
  186441             : 
  186442             :           \returns STL vector of pairs of SgNode* and strings
  186443             :        */
  186444             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  186445             : 
  186446             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  186447             : 
  186448             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  186449             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  186450             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  186451             : 
  186452             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  186453             :                    and subject to change.
  186454             :        */
  186455             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  186456             : 
  186457             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  186458             : 
  186459             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  186460             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  186461             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  186462             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  186463             : 
  186464             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  186465             : 
  186466             :           \returns long
  186467             :        */
  186468             :           virtual long getChildIndex( SgNode* childNode ) const override;
  186469             : 
  186470             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  186471             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186472             :       /* \brief Constructor for use by AST File I/O Mechanism
  186473             : 
  186474             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  186475             :           which obtained via fast binary file I/O from disk.
  186476             :        */
  186477             :        // SgBackspaceStatement( SgBackspaceStatementStorageClass& source );
  186478             : 
  186479             : 
  186480             : 
  186481             : 
  186482             : 
  186483             :  // JH (10/24/2005): methods added to support the ast file IO
  186484             :     private:
  186485             : 
  186486             :       /* name AST Memory Allocation Support Functions
  186487             :           \brief Memory allocations support....
  186488             : 
  186489             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  186490             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  186491             :           and support the AST File I/O Mechanism.
  186492             :        */
  186493             :       /* */
  186494             : 
  186495             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  186496             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  186497             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  186498             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  186499             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  186500             :           a correspinding one in the AST_FILE_IO class!
  186501             :        */
  186502             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  186503             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186504             :       /* \brief Typedef used for low level memory access.
  186505             :        */
  186506             :        // typedef unsigned char* TestType;
  186507             : 
  186508             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  186509             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186510             :       /* \brief Typedef used to hold memory addresses as values.
  186511             :        */
  186512             :        // typedef unsigned long  AddressType;
  186513             : 
  186514             : 
  186515             : 
  186516             :        // necessary, to have direct access to the p_freepointer and the private methods !
  186517             :       /*! \brief friend class declaration to support AST File I/O */
  186518             :           friend class AST_FILE_IO;
  186519             : 
  186520             :       /*! \brief friend class declaration to support AST File I/O */
  186521             :           friend class SgBackspaceStatementStorageClass;
  186522             : 
  186523             :       /*! \brief friend class declaration to support AST File I/O */
  186524             :           friend class AstSpecificDataManagingClass;
  186525             : 
  186526             :       /*! \brief friend class declaration to support AST File I/O */
  186527             :           friend class AstSpecificDataManagingClassStorageClass;
  186528             :     public:
  186529             :       /*! \brief IR node constructor to support AST File I/O */
  186530             :           SgBackspaceStatement( const SgBackspaceStatementStorageClass& source );
  186531             : 
  186532             :  // private: // JJW hack
  186533             :        /*
  186534             :           name AST Memory Allocation Support Variables
  186535             :           Memory allocations support variables 
  186536             : 
  186537             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  186538             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  186539             :           and support the AST File I/O Mechanism.
  186540             :        */
  186541             :       /* */
  186542             : 
  186543             :     public:
  186544             : 
  186545             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  186546             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  186547             :       // virtual SgNode* addRegExpAttribute();
  186548             :       /*! \brief Support for AST matching using regular expression.
  186549             : 
  186550             :           This support is incomplete and the subject of current research to define 
  186551             :           RegEx trees to support inexact matching.
  186552             :        */
  186553             :           SgBackspaceStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  186554             : 
  186555             : // *** COMMON CODE SECTION ENDS HERE ***
  186556             : 
  186557             : 
  186558             : // End of memberFunctionString
  186559             : // Start of memberFunctionString
  186560             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  186561             : 
  186562             :      // the generated cast function
  186563             :      // friend ROSE_DLL_API SgBackspaceStatement* isSgBackspaceStatement ( SgNode* s );
  186564             : 
  186565             :           typedef SgIOStatement base_node_type;
  186566             : 
  186567             : 
  186568             : // End of memberFunctionString
  186569             : // Start of memberFunctionString
  186570             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  186571             : 
  186572             :           void post_construction_initialization() override;
  186573             : 
  186574             : 
  186575             : // End of memberFunctionString
  186576             : 
  186577             : 
  186578             :      public: 
  186579             :          virtual ~SgBackspaceStatement();
  186580             : 
  186581             : 
  186582             :      public: 
  186583             :          SgBackspaceStatement(Sg_File_Info* startOfConstruct ); 
  186584             :          SgBackspaceStatement(); 
  186585             : 
  186586             :     protected:
  186587             : 
  186588             :     friend struct Rose::Traits::generated::describe_node_t<SgBackspaceStatement>;
  186589             : 
  186590             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186591             : 
  186592             : 
  186593             :    };
  186594             : #endif
  186595             : 
  186596             : // postdeclarations for SgBackspaceStatement
  186597             : 
  186598             : /* #line 186599 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186599             : 
  186600             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  186601             : 
  186602             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186603             : 
  186604             : 
  186605             : /* #line 186606 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186606             : 
  186607             : 
  186608             : 
  186609             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186610             : 
  186611             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  186612             : //      This code is automatically generated for each 
  186613             : //      terminal and non-terminal within the defined 
  186614             : //      grammar.  There is a simple way to change the 
  186615             : //      code to fix bugs etc.  See the ROSE README file
  186616             : //      for directions.
  186617             : 
  186618             : // tps: (02/22/2010): Adding DLL export requirements
  186619             : #include "rosedll.h"
  186620             : 
  186621             : // predeclarations for SgRewindStatement
  186622             : 
  186623             : /* #line 186624 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186624             : 
  186625             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  186626             : 
  186627             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  186628             : 
  186629             : #if 1
  186630             : // Class Definition for SgRewindStatement
  186631             : class ROSE_DLL_API SgRewindStatement  : public SgIOStatement
  186632             :    {
  186633             :      public:
  186634             : 
  186635             : 
  186636             : /* #line 186637 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  186637             : 
  186638             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  186639             : // Start of memberFunctionString
  186640             : /* #line 3584 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  186641             : 
  186642             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  186643             :      virtual unsigned int cfgIndexForEnd() const override;
  186644             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  186645             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  186646             : #endif
  186647             : 
  186648             : 
  186649             : // End of memberFunctionString
  186650             : // Start of memberFunctionString
  186651             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  186652             : 
  186653             : // *** COMMON CODE SECTION BEGINS HERE ***
  186654             : 
  186655             :     public:
  186656             : 
  186657             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  186658             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  186659             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  186660             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  186661             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  186662             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  186663             : 
  186664             :       /*! \brief returns a string representing the class name */
  186665             :           virtual std::string class_name() const override;
  186666             : 
  186667             :       /*! \brief returns new style SageIII enum values */
  186668             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  186669             : 
  186670             :       /*! \brief static variant value */
  186671             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  186672             :        // static const VariantT static_variant = V_SgRewindStatement;
  186673             :           enum { static_variant = V_SgRewindStatement };
  186674             : 
  186675             :        /* the generated cast function */
  186676             :       /*! \brief Casts pointer from base class to derived class */
  186677             :           ROSE_DLL_API friend       SgRewindStatement* isSgRewindStatement(       SgNode * s );
  186678             : 
  186679             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  186680             :           ROSE_DLL_API friend const SgRewindStatement* isSgRewindStatement( const SgNode * s );
  186681             : 
  186682             :      // ******************************************
  186683             :      // * Memory Pool / New / Delete
  186684             :      // ******************************************
  186685             : 
  186686             :      public:
  186687             :           /// \private
  186688             :           static const unsigned pool_size; //
  186689             :           /// \private
  186690             :           static std::vector<unsigned char *> pools; //
  186691             :           /// \private
  186692             :           static SgRewindStatement * next_node; // 
  186693             : 
  186694             :           /// \private
  186695             :           static unsigned long initializeStorageClassArray(SgRewindStatementStorageClass *); //
  186696             : 
  186697             :           /// \private
  186698             :           static void clearMemoryPool(); //
  186699             :           static void deleteMemoryPool(); //
  186700             : 
  186701             :           /// \private
  186702             :           static void extendMemoryPoolForFileIO(); //
  186703             : 
  186704             :           /// \private
  186705             :           static SgRewindStatement * getPointerFromGlobalIndex(unsigned long); //
  186706             :           /// \private
  186707             :           static SgRewindStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  186708             : 
  186709             :           /// \private
  186710             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  186711             :           /// \private
  186712             :           static void resetValidFreepointers(); //
  186713             :           /// \private
  186714             :           static unsigned long getNumberOfLastValidPointer(); //
  186715             : 
  186716             : 
  186717             : #if defined(INLINE_FUNCTIONS)
  186718             :       /*! \brief returns pointer to newly allocated IR node */
  186719             :           inline void *operator new (size_t size);
  186720             : #else
  186721             :       /*! \brief returns pointer to newly allocated IR node */
  186722             :           void *operator new (size_t size);
  186723             : #endif
  186724             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  186725             :           void operator delete (void* pointer, size_t size);
  186726             : 
  186727             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  186728           0 :           void operator delete (void* pointer)
  186729             :              {
  186730             :             // This is the generated delete operator...
  186731           0 :                SgRewindStatement::operator delete (pointer,sizeof(SgRewindStatement));
  186732             :              }
  186733             : 
  186734             :       /*! \brief Returns the total number of IR nodes of this type */
  186735             :           static size_t numberOfNodes();
  186736             : 
  186737             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  186738             :           static size_t memoryUsage();
  186739             : 
  186740             :       // End of scope which started in IR nodes specific code 
  186741             :       /* */
  186742             : 
  186743             :       /* name Internal Functions
  186744             :           \brief Internal functions ... incomplete-documentation
  186745             : 
  186746             :           These functions have been made public as part of the design, but they are suggested for internal use 
  186747             :           or by particularly knowledgeable users for specialized tools or applications.
  186748             : 
  186749             :           \internal We could not make these private because they are required by user for special purposes. And 
  186750             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  186751             :          
  186752             :        */
  186753             : 
  186754             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  186755             :        // overridden in every class by *generated* implementation
  186756             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  186757             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  186758             :        // MS: 06/28/02 container of names of variables or container indices 
  186759             :        // used used in the traversal to access AST successor nodes
  186760             :        // overridden in every class by *generated* implementation
  186761             :       /*! \brief container of names of variables or container indices used used in the traversal
  186762             :           to access AST successor nodes overridden in every class by *generated* implementation */
  186763             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  186764             : 
  186765             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  186766             :        // than all the vector copies. The implementation for these functions is generated for each class.
  186767             :       /*! \brief return number of children in the traversal successor list */
  186768             :           virtual size_t get_numberOfTraversalSuccessors() override;
  186769             :       /*! \brief index-based access to traversal successors by index number */
  186770             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  186771             :       /*! \brief index-based access to traversal successors by child node */
  186772             :           virtual size_t get_childIndex(SgNode *child) override;
  186773             : 
  186774             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  186775             :        // MS: 08/16/2002 method for generating RTI information
  186776             :       /*! \brief return C++ Runtime-Time-Information */
  186777             :           virtual RTIReturnType roseRTI() override;
  186778             : #endif
  186779             :       /* */
  186780             : 
  186781             : 
  186782             : 
  186783             :       /* name Deprecated Functions
  186784             :           \brief Deprecated functions ... incomplete-documentation
  186785             : 
  186786             :           These functions have been deprecated from use.
  186787             :        */
  186788             :       /* */
  186789             : 
  186790             :       /*! returns a C style string (char*) representing the class name */
  186791             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  186792             : 
  186793             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  186794             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  186795             : #if 0
  186796             :       /*! returns old style Sage II enum values */
  186797             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  186798             :       /*! returns old style Sage II enum values */
  186799             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  186800             : #endif
  186801             :       /* */
  186802             : 
  186803             : 
  186804             : 
  186805             : 
  186806             :      public:
  186807             :       /* name Traversal Support Functions
  186808             :           \brief Traversal support functions ... incomplete-documentation
  186809             : 
  186810             :           These functions have been made public as part of the design, but they are suggested for internal use 
  186811             :           or by particularly knowledgable users for specialized tools or applications.
  186812             :        */
  186813             :       /* */
  186814             : 
  186815             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  186816             :        // (inferior to ROSE traversal mechanism, experimental).
  186817             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  186818             :        */
  186819             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  186820             : 
  186821             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  186822             :       /*! \brief support for the classic visitor pattern done in GoF */
  186823             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  186824             : 
  186825             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  186826             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  186827             :        */
  186828             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  186829             : 
  186830             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  186831             :        */
  186832             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  186833             : 
  186834             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  186835             :        // This traversal helps support internal tools that call static member functions.
  186836             :        // note: this function operates on the memory pools.
  186837             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  186838             :        */
  186839             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  186840             :       /* */
  186841             : 
  186842             : 
  186843             :      public:
  186844             :       /* name Memory Allocation Functions
  186845             :           \brief Memory allocations functions ... incomplete-documentation
  186846             : 
  186847             :           These functions have been made public as part of the design, but they are suggested for internal use 
  186848             :           or by particularly knowledgable users for specialized tools or applications.
  186849             :        */
  186850             :       /* */
  186851             : 
  186852             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  186853             : 
  186854             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  186855             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  186856             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  186857             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  186858             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  186859             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  186860             :           being used with the AST File I/O mechanism.
  186861             :        */
  186862             :           virtual bool isInMemoryPool() override;
  186863             : 
  186864             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  186865             : 
  186866             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  186867             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  186868             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  186869             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  186870             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  186871             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  186872             :           being used with the AST File I/O mechanism.
  186873             :        */
  186874             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  186875             : 
  186876             :       // DQ (4/30/2006): Modified to be a const function.
  186877             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  186878             : 
  186879             :           This functions is part of general support for many possible tools to operate 
  186880             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  186881             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  186882             :           less than the set of pointers used by the AST file I/O. This is part of
  186883             :           work implemented by Andreas, and support tools such as the AST graph generation.
  186884             : 
  186885             :           \warning This function can return unexpected data members and thus the 
  186886             :                    order and the number of elements is unpredicable and subject 
  186887             :                    to change.
  186888             : 
  186889             :           \returns STL vector of pairs of SgNode* and strings
  186890             :        */
  186891             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  186892             : 
  186893             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  186894             : 
  186895             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  186896             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  186897             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  186898             : 
  186899             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  186900             :                    and subject to change.
  186901             :        */
  186902             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  186903             : 
  186904             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  186905             : 
  186906             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  186907             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  186908             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  186909             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  186910             : 
  186911             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  186912             : 
  186913             :           \returns long
  186914             :        */
  186915             :           virtual long getChildIndex( SgNode* childNode ) const override;
  186916             : 
  186917             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  186918             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186919             :       /* \brief Constructor for use by AST File I/O Mechanism
  186920             : 
  186921             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  186922             :           which obtained via fast binary file I/O from disk.
  186923             :        */
  186924             :        // SgRewindStatement( SgRewindStatementStorageClass& source );
  186925             : 
  186926             : 
  186927             : 
  186928             : 
  186929             : 
  186930             :  // JH (10/24/2005): methods added to support the ast file IO
  186931             :     private:
  186932             : 
  186933             :       /* name AST Memory Allocation Support Functions
  186934             :           \brief Memory allocations support....
  186935             : 
  186936             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  186937             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  186938             :           and support the AST File I/O Mechanism.
  186939             :        */
  186940             :       /* */
  186941             : 
  186942             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  186943             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  186944             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  186945             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  186946             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  186947             :           a correspinding one in the AST_FILE_IO class!
  186948             :        */
  186949             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  186950             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186951             :       /* \brief Typedef used for low level memory access.
  186952             :        */
  186953             :        // typedef unsigned char* TestType;
  186954             : 
  186955             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  186956             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  186957             :       /* \brief Typedef used to hold memory addresses as values.
  186958             :        */
  186959             :        // typedef unsigned long  AddressType;
  186960             : 
  186961             : 
  186962             : 
  186963             :        // necessary, to have direct access to the p_freepointer and the private methods !
  186964             :       /*! \brief friend class declaration to support AST File I/O */
  186965             :           friend class AST_FILE_IO;
  186966             : 
  186967             :       /*! \brief friend class declaration to support AST File I/O */
  186968             :           friend class SgRewindStatementStorageClass;
  186969             : 
  186970             :       /*! \brief friend class declaration to support AST File I/O */
  186971             :           friend class AstSpecificDataManagingClass;
  186972             : 
  186973             :       /*! \brief friend class declaration to support AST File I/O */
  186974             :           friend class AstSpecificDataManagingClassStorageClass;
  186975             :     public:
  186976             :       /*! \brief IR node constructor to support AST File I/O */
  186977             :           SgRewindStatement( const SgRewindStatementStorageClass& source );
  186978             : 
  186979             :  // private: // JJW hack
  186980             :        /*
  186981             :           name AST Memory Allocation Support Variables
  186982             :           Memory allocations support variables 
  186983             : 
  186984             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  186985             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  186986             :           and support the AST File I/O Mechanism.
  186987             :        */
  186988             :       /* */
  186989             : 
  186990             :     public:
  186991             : 
  186992             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  186993             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  186994             :       // virtual SgNode* addRegExpAttribute();
  186995             :       /*! \brief Support for AST matching using regular expression.
  186996             : 
  186997             :           This support is incomplete and the subject of current research to define 
  186998             :           RegEx trees to support inexact matching.
  186999             :        */
  187000             :           SgRewindStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  187001             : 
  187002             : // *** COMMON CODE SECTION ENDS HERE ***
  187003             : 
  187004             : 
  187005             : // End of memberFunctionString
  187006             : // Start of memberFunctionString
  187007             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  187008             : 
  187009             :      // the generated cast function
  187010             :      // friend ROSE_DLL_API SgRewindStatement* isSgRewindStatement ( SgNode* s );
  187011             : 
  187012             :           typedef SgIOStatement base_node_type;
  187013             : 
  187014             : 
  187015             : // End of memberFunctionString
  187016             : // Start of memberFunctionString
  187017             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  187018             : 
  187019             :           void post_construction_initialization() override;
  187020             : 
  187021             : 
  187022             : // End of memberFunctionString
  187023             : 
  187024             : 
  187025             :      public: 
  187026             :          virtual ~SgRewindStatement();
  187027             : 
  187028             : 
  187029             :      public: 
  187030             :          SgRewindStatement(Sg_File_Info* startOfConstruct ); 
  187031             :          SgRewindStatement(); 
  187032             : 
  187033             :     protected:
  187034             : 
  187035             :     friend struct Rose::Traits::generated::describe_node_t<SgRewindStatement>;
  187036             : 
  187037             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187038             : 
  187039             : 
  187040             :    };
  187041             : #endif
  187042             : 
  187043             : // postdeclarations for SgRewindStatement
  187044             : 
  187045             : /* #line 187046 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187046             : 
  187047             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  187048             : 
  187049             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187050             : 
  187051             : 
  187052             : /* #line 187053 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187053             : 
  187054             : 
  187055             : 
  187056             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187057             : 
  187058             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  187059             : //      This code is automatically generated for each 
  187060             : //      terminal and non-terminal within the defined 
  187061             : //      grammar.  There is a simple way to change the 
  187062             : //      code to fix bugs etc.  See the ROSE README file
  187063             : //      for directions.
  187064             : 
  187065             : // tps: (02/22/2010): Adding DLL export requirements
  187066             : #include "rosedll.h"
  187067             : 
  187068             : // predeclarations for SgEndfileStatement
  187069             : 
  187070             : /* #line 187071 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187071             : 
  187072             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  187073             : 
  187074             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187075             : 
  187076             : #if 1
  187077             : // Class Definition for SgEndfileStatement
  187078             : class ROSE_DLL_API SgEndfileStatement  : public SgIOStatement
  187079             :    {
  187080             :      public:
  187081             : 
  187082             : 
  187083             : /* #line 187084 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187084             : 
  187085             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  187086             : // Start of memberFunctionString
  187087             : /* #line 3600 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  187088             : 
  187089             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  187090             :      virtual unsigned int cfgIndexForEnd() const override;
  187091             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  187092             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  187093             : #endif
  187094             : 
  187095             : 
  187096             : // End of memberFunctionString
  187097             : // Start of memberFunctionString
  187098             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  187099             : 
  187100             : // *** COMMON CODE SECTION BEGINS HERE ***
  187101             : 
  187102             :     public:
  187103             : 
  187104             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  187105             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  187106             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  187107             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  187108             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  187109             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  187110             : 
  187111             :       /*! \brief returns a string representing the class name */
  187112             :           virtual std::string class_name() const override;
  187113             : 
  187114             :       /*! \brief returns new style SageIII enum values */
  187115             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  187116             : 
  187117             :       /*! \brief static variant value */
  187118             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  187119             :        // static const VariantT static_variant = V_SgEndfileStatement;
  187120             :           enum { static_variant = V_SgEndfileStatement };
  187121             : 
  187122             :        /* the generated cast function */
  187123             :       /*! \brief Casts pointer from base class to derived class */
  187124             :           ROSE_DLL_API friend       SgEndfileStatement* isSgEndfileStatement(       SgNode * s );
  187125             : 
  187126             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  187127             :           ROSE_DLL_API friend const SgEndfileStatement* isSgEndfileStatement( const SgNode * s );
  187128             : 
  187129             :      // ******************************************
  187130             :      // * Memory Pool / New / Delete
  187131             :      // ******************************************
  187132             : 
  187133             :      public:
  187134             :           /// \private
  187135             :           static const unsigned pool_size; //
  187136             :           /// \private
  187137             :           static std::vector<unsigned char *> pools; //
  187138             :           /// \private
  187139             :           static SgEndfileStatement * next_node; // 
  187140             : 
  187141             :           /// \private
  187142             :           static unsigned long initializeStorageClassArray(SgEndfileStatementStorageClass *); //
  187143             : 
  187144             :           /// \private
  187145             :           static void clearMemoryPool(); //
  187146             :           static void deleteMemoryPool(); //
  187147             : 
  187148             :           /// \private
  187149             :           static void extendMemoryPoolForFileIO(); //
  187150             : 
  187151             :           /// \private
  187152             :           static SgEndfileStatement * getPointerFromGlobalIndex(unsigned long); //
  187153             :           /// \private
  187154             :           static SgEndfileStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  187155             : 
  187156             :           /// \private
  187157             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  187158             :           /// \private
  187159             :           static void resetValidFreepointers(); //
  187160             :           /// \private
  187161             :           static unsigned long getNumberOfLastValidPointer(); //
  187162             : 
  187163             : 
  187164             : #if defined(INLINE_FUNCTIONS)
  187165             :       /*! \brief returns pointer to newly allocated IR node */
  187166             :           inline void *operator new (size_t size);
  187167             : #else
  187168             :       /*! \brief returns pointer to newly allocated IR node */
  187169             :           void *operator new (size_t size);
  187170             : #endif
  187171             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  187172             :           void operator delete (void* pointer, size_t size);
  187173             : 
  187174             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  187175           0 :           void operator delete (void* pointer)
  187176             :              {
  187177             :             // This is the generated delete operator...
  187178           0 :                SgEndfileStatement::operator delete (pointer,sizeof(SgEndfileStatement));
  187179             :              }
  187180             : 
  187181             :       /*! \brief Returns the total number of IR nodes of this type */
  187182             :           static size_t numberOfNodes();
  187183             : 
  187184             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  187185             :           static size_t memoryUsage();
  187186             : 
  187187             :       // End of scope which started in IR nodes specific code 
  187188             :       /* */
  187189             : 
  187190             :       /* name Internal Functions
  187191             :           \brief Internal functions ... incomplete-documentation
  187192             : 
  187193             :           These functions have been made public as part of the design, but they are suggested for internal use 
  187194             :           or by particularly knowledgeable users for specialized tools or applications.
  187195             : 
  187196             :           \internal We could not make these private because they are required by user for special purposes. And 
  187197             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  187198             :          
  187199             :        */
  187200             : 
  187201             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  187202             :        // overridden in every class by *generated* implementation
  187203             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  187204             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  187205             :        // MS: 06/28/02 container of names of variables or container indices 
  187206             :        // used used in the traversal to access AST successor nodes
  187207             :        // overridden in every class by *generated* implementation
  187208             :       /*! \brief container of names of variables or container indices used used in the traversal
  187209             :           to access AST successor nodes overridden in every class by *generated* implementation */
  187210             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  187211             : 
  187212             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  187213             :        // than all the vector copies. The implementation for these functions is generated for each class.
  187214             :       /*! \brief return number of children in the traversal successor list */
  187215             :           virtual size_t get_numberOfTraversalSuccessors() override;
  187216             :       /*! \brief index-based access to traversal successors by index number */
  187217             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  187218             :       /*! \brief index-based access to traversal successors by child node */
  187219             :           virtual size_t get_childIndex(SgNode *child) override;
  187220             : 
  187221             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  187222             :        // MS: 08/16/2002 method for generating RTI information
  187223             :       /*! \brief return C++ Runtime-Time-Information */
  187224             :           virtual RTIReturnType roseRTI() override;
  187225             : #endif
  187226             :       /* */
  187227             : 
  187228             : 
  187229             : 
  187230             :       /* name Deprecated Functions
  187231             :           \brief Deprecated functions ... incomplete-documentation
  187232             : 
  187233             :           These functions have been deprecated from use.
  187234             :        */
  187235             :       /* */
  187236             : 
  187237             :       /*! returns a C style string (char*) representing the class name */
  187238             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  187239             : 
  187240             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  187241             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  187242             : #if 0
  187243             :       /*! returns old style Sage II enum values */
  187244             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  187245             :       /*! returns old style Sage II enum values */
  187246             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  187247             : #endif
  187248             :       /* */
  187249             : 
  187250             : 
  187251             : 
  187252             : 
  187253             :      public:
  187254             :       /* name Traversal Support Functions
  187255             :           \brief Traversal support functions ... incomplete-documentation
  187256             : 
  187257             :           These functions have been made public as part of the design, but they are suggested for internal use 
  187258             :           or by particularly knowledgable users for specialized tools or applications.
  187259             :        */
  187260             :       /* */
  187261             : 
  187262             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  187263             :        // (inferior to ROSE traversal mechanism, experimental).
  187264             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  187265             :        */
  187266             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  187267             : 
  187268             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  187269             :       /*! \brief support for the classic visitor pattern done in GoF */
  187270             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  187271             : 
  187272             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  187273             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  187274             :        */
  187275             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  187276             : 
  187277             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  187278             :        */
  187279             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  187280             : 
  187281             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  187282             :        // This traversal helps support internal tools that call static member functions.
  187283             :        // note: this function operates on the memory pools.
  187284             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  187285             :        */
  187286             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  187287             :       /* */
  187288             : 
  187289             : 
  187290             :      public:
  187291             :       /* name Memory Allocation Functions
  187292             :           \brief Memory allocations functions ... incomplete-documentation
  187293             : 
  187294             :           These functions have been made public as part of the design, but they are suggested for internal use 
  187295             :           or by particularly knowledgable users for specialized tools or applications.
  187296             :        */
  187297             :       /* */
  187298             : 
  187299             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  187300             : 
  187301             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  187302             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  187303             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  187304             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  187305             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  187306             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  187307             :           being used with the AST File I/O mechanism.
  187308             :        */
  187309             :           virtual bool isInMemoryPool() override;
  187310             : 
  187311             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  187312             : 
  187313             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  187314             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  187315             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  187316             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  187317             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  187318             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  187319             :           being used with the AST File I/O mechanism.
  187320             :        */
  187321             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  187322             : 
  187323             :       // DQ (4/30/2006): Modified to be a const function.
  187324             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  187325             : 
  187326             :           This functions is part of general support for many possible tools to operate 
  187327             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  187328             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  187329             :           less than the set of pointers used by the AST file I/O. This is part of
  187330             :           work implemented by Andreas, and support tools such as the AST graph generation.
  187331             : 
  187332             :           \warning This function can return unexpected data members and thus the 
  187333             :                    order and the number of elements is unpredicable and subject 
  187334             :                    to change.
  187335             : 
  187336             :           \returns STL vector of pairs of SgNode* and strings
  187337             :        */
  187338             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  187339             : 
  187340             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  187341             : 
  187342             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  187343             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  187344             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  187345             : 
  187346             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  187347             :                    and subject to change.
  187348             :        */
  187349             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  187350             : 
  187351             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  187352             : 
  187353             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  187354             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  187355             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  187356             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  187357             : 
  187358             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  187359             : 
  187360             :           \returns long
  187361             :        */
  187362             :           virtual long getChildIndex( SgNode* childNode ) const override;
  187363             : 
  187364             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  187365             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  187366             :       /* \brief Constructor for use by AST File I/O Mechanism
  187367             : 
  187368             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  187369             :           which obtained via fast binary file I/O from disk.
  187370             :        */
  187371             :        // SgEndfileStatement( SgEndfileStatementStorageClass& source );
  187372             : 
  187373             : 
  187374             : 
  187375             : 
  187376             : 
  187377             :  // JH (10/24/2005): methods added to support the ast file IO
  187378             :     private:
  187379             : 
  187380             :       /* name AST Memory Allocation Support Functions
  187381             :           \brief Memory allocations support....
  187382             : 
  187383             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  187384             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  187385             :           and support the AST File I/O Mechanism.
  187386             :        */
  187387             :       /* */
  187388             : 
  187389             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  187390             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  187391             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  187392             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  187393             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  187394             :           a correspinding one in the AST_FILE_IO class!
  187395             :        */
  187396             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  187397             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  187398             :       /* \brief Typedef used for low level memory access.
  187399             :        */
  187400             :        // typedef unsigned char* TestType;
  187401             : 
  187402             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  187403             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  187404             :       /* \brief Typedef used to hold memory addresses as values.
  187405             :        */
  187406             :        // typedef unsigned long  AddressType;
  187407             : 
  187408             : 
  187409             : 
  187410             :        // necessary, to have direct access to the p_freepointer and the private methods !
  187411             :       /*! \brief friend class declaration to support AST File I/O */
  187412             :           friend class AST_FILE_IO;
  187413             : 
  187414             :       /*! \brief friend class declaration to support AST File I/O */
  187415             :           friend class SgEndfileStatementStorageClass;
  187416             : 
  187417             :       /*! \brief friend class declaration to support AST File I/O */
  187418             :           friend class AstSpecificDataManagingClass;
  187419             : 
  187420             :       /*! \brief friend class declaration to support AST File I/O */
  187421             :           friend class AstSpecificDataManagingClassStorageClass;
  187422             :     public:
  187423             :       /*! \brief IR node constructor to support AST File I/O */
  187424             :           SgEndfileStatement( const SgEndfileStatementStorageClass& source );
  187425             : 
  187426             :  // private: // JJW hack
  187427             :        /*
  187428             :           name AST Memory Allocation Support Variables
  187429             :           Memory allocations support variables 
  187430             : 
  187431             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  187432             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  187433             :           and support the AST File I/O Mechanism.
  187434             :        */
  187435             :       /* */
  187436             : 
  187437             :     public:
  187438             : 
  187439             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  187440             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  187441             :       // virtual SgNode* addRegExpAttribute();
  187442             :       /*! \brief Support for AST matching using regular expression.
  187443             : 
  187444             :           This support is incomplete and the subject of current research to define 
  187445             :           RegEx trees to support inexact matching.
  187446             :        */
  187447             :           SgEndfileStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  187448             : 
  187449             : // *** COMMON CODE SECTION ENDS HERE ***
  187450             : 
  187451             : 
  187452             : // End of memberFunctionString
  187453             : // Start of memberFunctionString
  187454             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  187455             : 
  187456             :      // the generated cast function
  187457             :      // friend ROSE_DLL_API SgEndfileStatement* isSgEndfileStatement ( SgNode* s );
  187458             : 
  187459             :           typedef SgIOStatement base_node_type;
  187460             : 
  187461             : 
  187462             : // End of memberFunctionString
  187463             : // Start of memberFunctionString
  187464             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  187465             : 
  187466             :           void post_construction_initialization() override;
  187467             : 
  187468             : 
  187469             : // End of memberFunctionString
  187470             : 
  187471             : 
  187472             :      public: 
  187473             :          virtual ~SgEndfileStatement();
  187474             : 
  187475             : 
  187476             :      public: 
  187477             :          SgEndfileStatement(Sg_File_Info* startOfConstruct ); 
  187478             :          SgEndfileStatement(); 
  187479             : 
  187480             :     protected:
  187481             : 
  187482             :     friend struct Rose::Traits::generated::describe_node_t<SgEndfileStatement>;
  187483             : 
  187484             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187485             : 
  187486             : 
  187487             :    };
  187488             : #endif
  187489             : 
  187490             : // postdeclarations for SgEndfileStatement
  187491             : 
  187492             : /* #line 187493 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187493             : 
  187494             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  187495             : 
  187496             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187497             : 
  187498             : 
  187499             : /* #line 187500 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187500             : 
  187501             : 
  187502             : 
  187503             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187504             : 
  187505             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  187506             : //      This code is automatically generated for each 
  187507             : //      terminal and non-terminal within the defined 
  187508             : //      grammar.  There is a simple way to change the 
  187509             : //      code to fix bugs etc.  See the ROSE README file
  187510             : //      for directions.
  187511             : 
  187512             : // tps: (02/22/2010): Adding DLL export requirements
  187513             : #include "rosedll.h"
  187514             : 
  187515             : // predeclarations for SgWaitStatement
  187516             : 
  187517             : /* #line 187518 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187518             : 
  187519             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  187520             : 
  187521             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187522             : 
  187523             : #if 1
  187524             : // Class Definition for SgWaitStatement
  187525             : class ROSE_DLL_API SgWaitStatement  : public SgIOStatement
  187526             :    {
  187527             :      public:
  187528             : 
  187529             : 
  187530             : /* #line 187531 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187531             : 
  187532             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  187533             : // Start of memberFunctionString
  187534             : /* #line 3608 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  187535             : 
  187536             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  187537             :      virtual unsigned int cfgIndexForEnd() const override;
  187538             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  187539             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  187540             : #endif
  187541             : 
  187542             : 
  187543             : // End of memberFunctionString
  187544             : // Start of memberFunctionString
  187545             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  187546             : 
  187547             : // *** COMMON CODE SECTION BEGINS HERE ***
  187548             : 
  187549             :     public:
  187550             : 
  187551             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  187552             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  187553             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  187554             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  187555             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  187556             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  187557             : 
  187558             :       /*! \brief returns a string representing the class name */
  187559             :           virtual std::string class_name() const override;
  187560             : 
  187561             :       /*! \brief returns new style SageIII enum values */
  187562             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  187563             : 
  187564             :       /*! \brief static variant value */
  187565             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  187566             :        // static const VariantT static_variant = V_SgWaitStatement;
  187567             :           enum { static_variant = V_SgWaitStatement };
  187568             : 
  187569             :        /* the generated cast function */
  187570             :       /*! \brief Casts pointer from base class to derived class */
  187571             :           ROSE_DLL_API friend       SgWaitStatement* isSgWaitStatement(       SgNode * s );
  187572             : 
  187573             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  187574             :           ROSE_DLL_API friend const SgWaitStatement* isSgWaitStatement( const SgNode * s );
  187575             : 
  187576             :      // ******************************************
  187577             :      // * Memory Pool / New / Delete
  187578             :      // ******************************************
  187579             : 
  187580             :      public:
  187581             :           /// \private
  187582             :           static const unsigned pool_size; //
  187583             :           /// \private
  187584             :           static std::vector<unsigned char *> pools; //
  187585             :           /// \private
  187586             :           static SgWaitStatement * next_node; // 
  187587             : 
  187588             :           /// \private
  187589             :           static unsigned long initializeStorageClassArray(SgWaitStatementStorageClass *); //
  187590             : 
  187591             :           /// \private
  187592             :           static void clearMemoryPool(); //
  187593             :           static void deleteMemoryPool(); //
  187594             : 
  187595             :           /// \private
  187596             :           static void extendMemoryPoolForFileIO(); //
  187597             : 
  187598             :           /// \private
  187599             :           static SgWaitStatement * getPointerFromGlobalIndex(unsigned long); //
  187600             :           /// \private
  187601             :           static SgWaitStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  187602             : 
  187603             :           /// \private
  187604             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  187605             :           /// \private
  187606             :           static void resetValidFreepointers(); //
  187607             :           /// \private
  187608             :           static unsigned long getNumberOfLastValidPointer(); //
  187609             : 
  187610             : 
  187611             : #if defined(INLINE_FUNCTIONS)
  187612             :       /*! \brief returns pointer to newly allocated IR node */
  187613             :           inline void *operator new (size_t size);
  187614             : #else
  187615             :       /*! \brief returns pointer to newly allocated IR node */
  187616             :           void *operator new (size_t size);
  187617             : #endif
  187618             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  187619             :           void operator delete (void* pointer, size_t size);
  187620             : 
  187621             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  187622           0 :           void operator delete (void* pointer)
  187623             :              {
  187624             :             // This is the generated delete operator...
  187625           0 :                SgWaitStatement::operator delete (pointer,sizeof(SgWaitStatement));
  187626             :              }
  187627             : 
  187628             :       /*! \brief Returns the total number of IR nodes of this type */
  187629             :           static size_t numberOfNodes();
  187630             : 
  187631             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  187632             :           static size_t memoryUsage();
  187633             : 
  187634             :       // End of scope which started in IR nodes specific code 
  187635             :       /* */
  187636             : 
  187637             :       /* name Internal Functions
  187638             :           \brief Internal functions ... incomplete-documentation
  187639             : 
  187640             :           These functions have been made public as part of the design, but they are suggested for internal use 
  187641             :           or by particularly knowledgeable users for specialized tools or applications.
  187642             : 
  187643             :           \internal We could not make these private because they are required by user for special purposes. And 
  187644             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  187645             :          
  187646             :        */
  187647             : 
  187648             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  187649             :        // overridden in every class by *generated* implementation
  187650             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  187651             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  187652             :        // MS: 06/28/02 container of names of variables or container indices 
  187653             :        // used used in the traversal to access AST successor nodes
  187654             :        // overridden in every class by *generated* implementation
  187655             :       /*! \brief container of names of variables or container indices used used in the traversal
  187656             :           to access AST successor nodes overridden in every class by *generated* implementation */
  187657             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  187658             : 
  187659             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  187660             :        // than all the vector copies. The implementation for these functions is generated for each class.
  187661             :       /*! \brief return number of children in the traversal successor list */
  187662             :           virtual size_t get_numberOfTraversalSuccessors() override;
  187663             :       /*! \brief index-based access to traversal successors by index number */
  187664             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  187665             :       /*! \brief index-based access to traversal successors by child node */
  187666             :           virtual size_t get_childIndex(SgNode *child) override;
  187667             : 
  187668             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  187669             :        // MS: 08/16/2002 method for generating RTI information
  187670             :       /*! \brief return C++ Runtime-Time-Information */
  187671             :           virtual RTIReturnType roseRTI() override;
  187672             : #endif
  187673             :       /* */
  187674             : 
  187675             : 
  187676             : 
  187677             :       /* name Deprecated Functions
  187678             :           \brief Deprecated functions ... incomplete-documentation
  187679             : 
  187680             :           These functions have been deprecated from use.
  187681             :        */
  187682             :       /* */
  187683             : 
  187684             :       /*! returns a C style string (char*) representing the class name */
  187685             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  187686             : 
  187687             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  187688             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  187689             : #if 0
  187690             :       /*! returns old style Sage II enum values */
  187691             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  187692             :       /*! returns old style Sage II enum values */
  187693             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  187694             : #endif
  187695             :       /* */
  187696             : 
  187697             : 
  187698             : 
  187699             : 
  187700             :      public:
  187701             :       /* name Traversal Support Functions
  187702             :           \brief Traversal support functions ... incomplete-documentation
  187703             : 
  187704             :           These functions have been made public as part of the design, but they are suggested for internal use 
  187705             :           or by particularly knowledgable users for specialized tools or applications.
  187706             :        */
  187707             :       /* */
  187708             : 
  187709             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  187710             :        // (inferior to ROSE traversal mechanism, experimental).
  187711             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  187712             :        */
  187713             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  187714             : 
  187715             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  187716             :       /*! \brief support for the classic visitor pattern done in GoF */
  187717             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  187718             : 
  187719             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  187720             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  187721             :        */
  187722             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  187723             : 
  187724             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  187725             :        */
  187726             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  187727             : 
  187728             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  187729             :        // This traversal helps support internal tools that call static member functions.
  187730             :        // note: this function operates on the memory pools.
  187731             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  187732             :        */
  187733             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  187734             :       /* */
  187735             : 
  187736             : 
  187737             :      public:
  187738             :       /* name Memory Allocation Functions
  187739             :           \brief Memory allocations functions ... incomplete-documentation
  187740             : 
  187741             :           These functions have been made public as part of the design, but they are suggested for internal use 
  187742             :           or by particularly knowledgable users for specialized tools or applications.
  187743             :        */
  187744             :       /* */
  187745             : 
  187746             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  187747             : 
  187748             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  187749             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  187750             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  187751             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  187752             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  187753             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  187754             :           being used with the AST File I/O mechanism.
  187755             :        */
  187756             :           virtual bool isInMemoryPool() override;
  187757             : 
  187758             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  187759             : 
  187760             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  187761             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  187762             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  187763             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  187764             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  187765             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  187766             :           being used with the AST File I/O mechanism.
  187767             :        */
  187768             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  187769             : 
  187770             :       // DQ (4/30/2006): Modified to be a const function.
  187771             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  187772             : 
  187773             :           This functions is part of general support for many possible tools to operate 
  187774             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  187775             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  187776             :           less than the set of pointers used by the AST file I/O. This is part of
  187777             :           work implemented by Andreas, and support tools such as the AST graph generation.
  187778             : 
  187779             :           \warning This function can return unexpected data members and thus the 
  187780             :                    order and the number of elements is unpredicable and subject 
  187781             :                    to change.
  187782             : 
  187783             :           \returns STL vector of pairs of SgNode* and strings
  187784             :        */
  187785             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  187786             : 
  187787             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  187788             : 
  187789             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  187790             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  187791             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  187792             : 
  187793             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  187794             :                    and subject to change.
  187795             :        */
  187796             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  187797             : 
  187798             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  187799             : 
  187800             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  187801             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  187802             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  187803             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  187804             : 
  187805             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  187806             : 
  187807             :           \returns long
  187808             :        */
  187809             :           virtual long getChildIndex( SgNode* childNode ) const override;
  187810             : 
  187811             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  187812             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  187813             :       /* \brief Constructor for use by AST File I/O Mechanism
  187814             : 
  187815             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  187816             :           which obtained via fast binary file I/O from disk.
  187817             :        */
  187818             :        // SgWaitStatement( SgWaitStatementStorageClass& source );
  187819             : 
  187820             : 
  187821             : 
  187822             : 
  187823             : 
  187824             :  // JH (10/24/2005): methods added to support the ast file IO
  187825             :     private:
  187826             : 
  187827             :       /* name AST Memory Allocation Support Functions
  187828             :           \brief Memory allocations support....
  187829             : 
  187830             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  187831             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  187832             :           and support the AST File I/O Mechanism.
  187833             :        */
  187834             :       /* */
  187835             : 
  187836             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  187837             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  187838             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  187839             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  187840             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  187841             :           a correspinding one in the AST_FILE_IO class!
  187842             :        */
  187843             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  187844             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  187845             :       /* \brief Typedef used for low level memory access.
  187846             :        */
  187847             :        // typedef unsigned char* TestType;
  187848             : 
  187849             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  187850             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  187851             :       /* \brief Typedef used to hold memory addresses as values.
  187852             :        */
  187853             :        // typedef unsigned long  AddressType;
  187854             : 
  187855             : 
  187856             : 
  187857             :        // necessary, to have direct access to the p_freepointer and the private methods !
  187858             :       /*! \brief friend class declaration to support AST File I/O */
  187859             :           friend class AST_FILE_IO;
  187860             : 
  187861             :       /*! \brief friend class declaration to support AST File I/O */
  187862             :           friend class SgWaitStatementStorageClass;
  187863             : 
  187864             :       /*! \brief friend class declaration to support AST File I/O */
  187865             :           friend class AstSpecificDataManagingClass;
  187866             : 
  187867             :       /*! \brief friend class declaration to support AST File I/O */
  187868             :           friend class AstSpecificDataManagingClassStorageClass;
  187869             :     public:
  187870             :       /*! \brief IR node constructor to support AST File I/O */
  187871             :           SgWaitStatement( const SgWaitStatementStorageClass& source );
  187872             : 
  187873             :  // private: // JJW hack
  187874             :        /*
  187875             :           name AST Memory Allocation Support Variables
  187876             :           Memory allocations support variables 
  187877             : 
  187878             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  187879             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  187880             :           and support the AST File I/O Mechanism.
  187881             :        */
  187882             :       /* */
  187883             : 
  187884             :     public:
  187885             : 
  187886             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  187887             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  187888             :       // virtual SgNode* addRegExpAttribute();
  187889             :       /*! \brief Support for AST matching using regular expression.
  187890             : 
  187891             :           This support is incomplete and the subject of current research to define 
  187892             :           RegEx trees to support inexact matching.
  187893             :        */
  187894             :           SgWaitStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  187895             : 
  187896             : // *** COMMON CODE SECTION ENDS HERE ***
  187897             : 
  187898             : 
  187899             : // End of memberFunctionString
  187900             : // Start of memberFunctionString
  187901             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  187902             : 
  187903             :      // the generated cast function
  187904             :      // friend ROSE_DLL_API SgWaitStatement* isSgWaitStatement ( SgNode* s );
  187905             : 
  187906             :           typedef SgIOStatement base_node_type;
  187907             : 
  187908             : 
  187909             : // End of memberFunctionString
  187910             : // Start of memberFunctionString
  187911             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  187912             : 
  187913             :           void post_construction_initialization() override;
  187914             : 
  187915             : 
  187916             : // End of memberFunctionString
  187917             : 
  187918             : 
  187919             :      public: 
  187920             :          virtual ~SgWaitStatement();
  187921             : 
  187922             : 
  187923             :      public: 
  187924             :          SgWaitStatement(Sg_File_Info* startOfConstruct ); 
  187925             :          SgWaitStatement(); 
  187926             : 
  187927             :     protected:
  187928             : 
  187929             :     friend struct Rose::Traits::generated::describe_node_t<SgWaitStatement>;
  187930             : 
  187931             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187932             : 
  187933             : 
  187934             :    };
  187935             : #endif
  187936             : 
  187937             : // postdeclarations for SgWaitStatement
  187938             : 
  187939             : /* #line 187940 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187940             : 
  187941             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  187942             : 
  187943             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187944             : 
  187945             : 
  187946             : /* #line 187947 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187947             : 
  187948             : 
  187949             : 
  187950             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187951             : 
  187952             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  187953             : //      This code is automatically generated for each 
  187954             : //      terminal and non-terminal within the defined 
  187955             : //      grammar.  There is a simple way to change the 
  187956             : //      code to fix bugs etc.  See the ROSE README file
  187957             : //      for directions.
  187958             : 
  187959             : // tps: (02/22/2010): Adding DLL export requirements
  187960             : #include "rosedll.h"
  187961             : 
  187962             : // predeclarations for SgWhereStatement
  187963             : 
  187964             : /* #line 187965 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187965             : 
  187966             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  187967             : 
  187968             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  187969             : 
  187970             : #if 1
  187971             : // Class Definition for SgWhereStatement
  187972             : class ROSE_DLL_API SgWhereStatement  : public SgStatement
  187973             :    {
  187974             :      public:
  187975             : 
  187976             : 
  187977             : /* #line 187978 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  187978             : 
  187979             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  187980             : // Start of memberFunctionString
  187981             : /* #line 3648 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  187982             : 
  187983             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  187984             :      virtual unsigned int cfgIndexForEnd() const override;
  187985             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  187986             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  187987             : #endif
  187988             : 
  187989             : 
  187990             : 
  187991             : // End of memberFunctionString
  187992             : // Start of memberFunctionString
  187993             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  187994             : 
  187995             : // *** COMMON CODE SECTION BEGINS HERE ***
  187996             : 
  187997             :     public:
  187998             : 
  187999             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  188000             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  188001             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  188002             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  188003             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  188004             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  188005             : 
  188006             :       /*! \brief returns a string representing the class name */
  188007             :           virtual std::string class_name() const override;
  188008             : 
  188009             :       /*! \brief returns new style SageIII enum values */
  188010             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  188011             : 
  188012             :       /*! \brief static variant value */
  188013             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  188014             :        // static const VariantT static_variant = V_SgWhereStatement;
  188015             :           enum { static_variant = V_SgWhereStatement };
  188016             : 
  188017             :        /* the generated cast function */
  188018             :       /*! \brief Casts pointer from base class to derived class */
  188019             :           ROSE_DLL_API friend       SgWhereStatement* isSgWhereStatement(       SgNode * s );
  188020             : 
  188021             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  188022             :           ROSE_DLL_API friend const SgWhereStatement* isSgWhereStatement( const SgNode * s );
  188023             : 
  188024             :      // ******************************************
  188025             :      // * Memory Pool / New / Delete
  188026             :      // ******************************************
  188027             : 
  188028             :      public:
  188029             :           /// \private
  188030             :           static const unsigned pool_size; //
  188031             :           /// \private
  188032             :           static std::vector<unsigned char *> pools; //
  188033             :           /// \private
  188034             :           static SgWhereStatement * next_node; // 
  188035             : 
  188036             :           /// \private
  188037             :           static unsigned long initializeStorageClassArray(SgWhereStatementStorageClass *); //
  188038             : 
  188039             :           /// \private
  188040             :           static void clearMemoryPool(); //
  188041             :           static void deleteMemoryPool(); //
  188042             : 
  188043             :           /// \private
  188044             :           static void extendMemoryPoolForFileIO(); //
  188045             : 
  188046             :           /// \private
  188047             :           static SgWhereStatement * getPointerFromGlobalIndex(unsigned long); //
  188048             :           /// \private
  188049             :           static SgWhereStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  188050             : 
  188051             :           /// \private
  188052             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  188053             :           /// \private
  188054             :           static void resetValidFreepointers(); //
  188055             :           /// \private
  188056             :           static unsigned long getNumberOfLastValidPointer(); //
  188057             : 
  188058             : 
  188059             : #if defined(INLINE_FUNCTIONS)
  188060             :       /*! \brief returns pointer to newly allocated IR node */
  188061             :           inline void *operator new (size_t size);
  188062             : #else
  188063             :       /*! \brief returns pointer to newly allocated IR node */
  188064             :           void *operator new (size_t size);
  188065             : #endif
  188066             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  188067             :           void operator delete (void* pointer, size_t size);
  188068             : 
  188069             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  188070           0 :           void operator delete (void* pointer)
  188071             :              {
  188072             :             // This is the generated delete operator...
  188073           0 :                SgWhereStatement::operator delete (pointer,sizeof(SgWhereStatement));
  188074             :              }
  188075             : 
  188076             :       /*! \brief Returns the total number of IR nodes of this type */
  188077             :           static size_t numberOfNodes();
  188078             : 
  188079             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  188080             :           static size_t memoryUsage();
  188081             : 
  188082             :       // End of scope which started in IR nodes specific code 
  188083             :       /* */
  188084             : 
  188085             :       /* name Internal Functions
  188086             :           \brief Internal functions ... incomplete-documentation
  188087             : 
  188088             :           These functions have been made public as part of the design, but they are suggested for internal use 
  188089             :           or by particularly knowledgeable users for specialized tools or applications.
  188090             : 
  188091             :           \internal We could not make these private because they are required by user for special purposes. And 
  188092             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  188093             :          
  188094             :        */
  188095             : 
  188096             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  188097             :        // overridden in every class by *generated* implementation
  188098             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  188099             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  188100             :        // MS: 06/28/02 container of names of variables or container indices 
  188101             :        // used used in the traversal to access AST successor nodes
  188102             :        // overridden in every class by *generated* implementation
  188103             :       /*! \brief container of names of variables or container indices used used in the traversal
  188104             :           to access AST successor nodes overridden in every class by *generated* implementation */
  188105             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  188106             : 
  188107             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  188108             :        // than all the vector copies. The implementation for these functions is generated for each class.
  188109             :       /*! \brief return number of children in the traversal successor list */
  188110             :           virtual size_t get_numberOfTraversalSuccessors() override;
  188111             :       /*! \brief index-based access to traversal successors by index number */
  188112             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  188113             :       /*! \brief index-based access to traversal successors by child node */
  188114             :           virtual size_t get_childIndex(SgNode *child) override;
  188115             : 
  188116             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  188117             :        // MS: 08/16/2002 method for generating RTI information
  188118             :       /*! \brief return C++ Runtime-Time-Information */
  188119             :           virtual RTIReturnType roseRTI() override;
  188120             : #endif
  188121             :       /* */
  188122             : 
  188123             : 
  188124             : 
  188125             :       /* name Deprecated Functions
  188126             :           \brief Deprecated functions ... incomplete-documentation
  188127             : 
  188128             :           These functions have been deprecated from use.
  188129             :        */
  188130             :       /* */
  188131             : 
  188132             :       /*! returns a C style string (char*) representing the class name */
  188133             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  188134             : 
  188135             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  188136             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  188137             : #if 0
  188138             :       /*! returns old style Sage II enum values */
  188139             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  188140             :       /*! returns old style Sage II enum values */
  188141             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  188142             : #endif
  188143             :       /* */
  188144             : 
  188145             : 
  188146             : 
  188147             : 
  188148             :      public:
  188149             :       /* name Traversal Support Functions
  188150             :           \brief Traversal support functions ... incomplete-documentation
  188151             : 
  188152             :           These functions have been made public as part of the design, but they are suggested for internal use 
  188153             :           or by particularly knowledgable users for specialized tools or applications.
  188154             :        */
  188155             :       /* */
  188156             : 
  188157             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  188158             :        // (inferior to ROSE traversal mechanism, experimental).
  188159             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  188160             :        */
  188161             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  188162             : 
  188163             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  188164             :       /*! \brief support for the classic visitor pattern done in GoF */
  188165             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  188166             : 
  188167             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  188168             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  188169             :        */
  188170             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  188171             : 
  188172             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  188173             :        */
  188174             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  188175             : 
  188176             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  188177             :        // This traversal helps support internal tools that call static member functions.
  188178             :        // note: this function operates on the memory pools.
  188179             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  188180             :        */
  188181             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  188182             :       /* */
  188183             : 
  188184             : 
  188185             :      public:
  188186             :       /* name Memory Allocation Functions
  188187             :           \brief Memory allocations functions ... incomplete-documentation
  188188             : 
  188189             :           These functions have been made public as part of the design, but they are suggested for internal use 
  188190             :           or by particularly knowledgable users for specialized tools or applications.
  188191             :        */
  188192             :       /* */
  188193             : 
  188194             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  188195             : 
  188196             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  188197             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  188198             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  188199             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  188200             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  188201             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  188202             :           being used with the AST File I/O mechanism.
  188203             :        */
  188204             :           virtual bool isInMemoryPool() override;
  188205             : 
  188206             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  188207             : 
  188208             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  188209             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  188210             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  188211             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  188212             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  188213             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  188214             :           being used with the AST File I/O mechanism.
  188215             :        */
  188216             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  188217             : 
  188218             :       // DQ (4/30/2006): Modified to be a const function.
  188219             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  188220             : 
  188221             :           This functions is part of general support for many possible tools to operate 
  188222             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  188223             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  188224             :           less than the set of pointers used by the AST file I/O. This is part of
  188225             :           work implemented by Andreas, and support tools such as the AST graph generation.
  188226             : 
  188227             :           \warning This function can return unexpected data members and thus the 
  188228             :                    order and the number of elements is unpredicable and subject 
  188229             :                    to change.
  188230             : 
  188231             :           \returns STL vector of pairs of SgNode* and strings
  188232             :        */
  188233             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  188234             : 
  188235             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  188236             : 
  188237             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  188238             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  188239             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  188240             : 
  188241             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  188242             :                    and subject to change.
  188243             :        */
  188244             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  188245             : 
  188246             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  188247             : 
  188248             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  188249             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  188250             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  188251             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  188252             : 
  188253             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  188254             : 
  188255             :           \returns long
  188256             :        */
  188257             :           virtual long getChildIndex( SgNode* childNode ) const override;
  188258             : 
  188259             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  188260             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  188261             :       /* \brief Constructor for use by AST File I/O Mechanism
  188262             : 
  188263             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  188264             :           which obtained via fast binary file I/O from disk.
  188265             :        */
  188266             :        // SgWhereStatement( SgWhereStatementStorageClass& source );
  188267             : 
  188268             : 
  188269             : 
  188270             : 
  188271             : 
  188272             :  // JH (10/24/2005): methods added to support the ast file IO
  188273             :     private:
  188274             : 
  188275             :       /* name AST Memory Allocation Support Functions
  188276             :           \brief Memory allocations support....
  188277             : 
  188278             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  188279             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  188280             :           and support the AST File I/O Mechanism.
  188281             :        */
  188282             :       /* */
  188283             : 
  188284             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  188285             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  188286             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  188287             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  188288             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  188289             :           a correspinding one in the AST_FILE_IO class!
  188290             :        */
  188291             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  188292             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  188293             :       /* \brief Typedef used for low level memory access.
  188294             :        */
  188295             :        // typedef unsigned char* TestType;
  188296             : 
  188297             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  188298             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  188299             :       /* \brief Typedef used to hold memory addresses as values.
  188300             :        */
  188301             :        // typedef unsigned long  AddressType;
  188302             : 
  188303             : 
  188304             : 
  188305             :        // necessary, to have direct access to the p_freepointer and the private methods !
  188306             :       /*! \brief friend class declaration to support AST File I/O */
  188307             :           friend class AST_FILE_IO;
  188308             : 
  188309             :       /*! \brief friend class declaration to support AST File I/O */
  188310             :           friend class SgWhereStatementStorageClass;
  188311             : 
  188312             :       /*! \brief friend class declaration to support AST File I/O */
  188313             :           friend class AstSpecificDataManagingClass;
  188314             : 
  188315             :       /*! \brief friend class declaration to support AST File I/O */
  188316             :           friend class AstSpecificDataManagingClassStorageClass;
  188317             :     public:
  188318             :       /*! \brief IR node constructor to support AST File I/O */
  188319             :           SgWhereStatement( const SgWhereStatementStorageClass& source );
  188320             : 
  188321             :  // private: // JJW hack
  188322             :        /*
  188323             :           name AST Memory Allocation Support Variables
  188324             :           Memory allocations support variables 
  188325             : 
  188326             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  188327             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  188328             :           and support the AST File I/O Mechanism.
  188329             :        */
  188330             :       /* */
  188331             : 
  188332             :     public:
  188333             : 
  188334             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  188335             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  188336             :       // virtual SgNode* addRegExpAttribute();
  188337             :       /*! \brief Support for AST matching using regular expression.
  188338             : 
  188339             :           This support is incomplete and the subject of current research to define 
  188340             :           RegEx trees to support inexact matching.
  188341             :        */
  188342             :           SgWhereStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  188343             : 
  188344             : // *** COMMON CODE SECTION ENDS HERE ***
  188345             : 
  188346             : 
  188347             : // End of memberFunctionString
  188348             : // Start of memberFunctionString
  188349             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  188350             : 
  188351             :      // the generated cast function
  188352             :      // friend ROSE_DLL_API SgWhereStatement* isSgWhereStatement ( SgNode* s );
  188353             : 
  188354             :           typedef SgStatement base_node_type;
  188355             : 
  188356             : 
  188357             : // End of memberFunctionString
  188358             : // Start of memberFunctionString
  188359             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  188360             : 
  188361             :           void post_construction_initialization() override;
  188362             : 
  188363             : 
  188364             : // End of memberFunctionString
  188365             : 
  188366             :      public: 
  188367             :          SgExpression* get_condition() const;
  188368             :          void set_condition(SgExpression* condition);
  188369             : 
  188370             :      public: 
  188371             :          SgBasicBlock* get_body() const;
  188372             :          void set_body(SgBasicBlock* body);
  188373             : 
  188374             :      public: 
  188375             :          SgElseWhereStatement* get_elsewhere() const;
  188376             :          void set_elsewhere(SgElseWhereStatement* elsewhere);
  188377             : 
  188378             :      public: 
  188379             :          SgLabelRefExp* get_end_numeric_label() const /* (getDataAccessFunctionPrototypeString) */;
  188380             :          void set_end_numeric_label(SgLabelRefExp* end_numeric_label) override /* (getDataAccessFunctionPrototypeString) */;
  188381             : 
  188382             :      public: 
  188383             :          std::string get_string_label() const;
  188384             :          void set_string_label(std::string string_label);
  188385             : 
  188386             :      public: 
  188387             :          bool get_has_end_statement() const;
  188388             :          void set_has_end_statement(bool has_end_statement);
  188389             : 
  188390             : 
  188391             :      public: 
  188392             :          virtual ~SgWhereStatement();
  188393             : 
  188394             : 
  188395             :      public: 
  188396             :          SgWhereStatement(Sg_File_Info* startOfConstruct , SgExpression* condition = NULL, SgBasicBlock* body = NULL, SgElseWhereStatement* elsewhere = NULL); 
  188397             :          SgWhereStatement(SgExpression* condition, SgBasicBlock* body, SgElseWhereStatement* elsewhere); 
  188398             : 
  188399             :     protected:
  188400             : // Start of memberFunctionString
  188401             : SgExpression* p_condition;
  188402             :           
  188403             : // End of memberFunctionString
  188404             : // Start of memberFunctionString
  188405             : SgBasicBlock* p_body;
  188406             :           
  188407             : // End of memberFunctionString
  188408             : // Start of memberFunctionString
  188409             : SgElseWhereStatement* p_elsewhere;
  188410             :           
  188411             : // End of memberFunctionString
  188412             : // Start of memberFunctionString
  188413             : SgLabelRefExp* p_end_numeric_label;
  188414             :           
  188415             : // End of memberFunctionString
  188416             : // Start of memberFunctionString
  188417             : std::string p_string_label;
  188418             :           
  188419             : // End of memberFunctionString
  188420             : // Start of memberFunctionString
  188421             : bool p_has_end_statement;
  188422             :           
  188423             : // End of memberFunctionString
  188424             : 
  188425             :     friend struct Rose::Traits::generated::describe_node_t<SgWhereStatement>;
  188426             :     friend struct Rose::Traits::generated::describe_field_t<SgWhereStatement, SgExpression*,&SgWhereStatement::p_condition>;
  188427             :     friend struct Rose::Traits::generated::describe_field_t<SgWhereStatement, SgBasicBlock*,&SgWhereStatement::p_body>;
  188428             :     friend struct Rose::Traits::generated::describe_field_t<SgWhereStatement, SgElseWhereStatement*,&SgWhereStatement::p_elsewhere>;
  188429             :     friend struct Rose::Traits::generated::describe_field_t<SgWhereStatement, SgLabelRefExp*,&SgWhereStatement::p_end_numeric_label>;
  188430             :     friend struct Rose::Traits::generated::describe_field_t<SgWhereStatement, std::string,&SgWhereStatement::p_string_label>;
  188431             :     friend struct Rose::Traits::generated::describe_field_t<SgWhereStatement, bool,&SgWhereStatement::p_has_end_statement>;
  188432             : 
  188433             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188434             : 
  188435             : 
  188436             :    };
  188437             : #endif
  188438             : 
  188439             : // postdeclarations for SgWhereStatement
  188440             : 
  188441             : /* #line 188442 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188442             : 
  188443             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  188444             : 
  188445             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188446             : 
  188447             : 
  188448             : /* #line 188449 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188449             : 
  188450             : 
  188451             : 
  188452             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188453             : 
  188454             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  188455             : //      This code is automatically generated for each 
  188456             : //      terminal and non-terminal within the defined 
  188457             : //      grammar.  There is a simple way to change the 
  188458             : //      code to fix bugs etc.  See the ROSE README file
  188459             : //      for directions.
  188460             : 
  188461             : // tps: (02/22/2010): Adding DLL export requirements
  188462             : #include "rosedll.h"
  188463             : 
  188464             : // predeclarations for SgElseWhereStatement
  188465             : 
  188466             : /* #line 188467 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188467             : 
  188468             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  188469             : 
  188470             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188471             : 
  188472             : #if 1
  188473             : // Class Definition for SgElseWhereStatement
  188474             : class ROSE_DLL_API SgElseWhereStatement  : public SgStatement
  188475             :    {
  188476             :      public:
  188477             : 
  188478             : 
  188479             : /* #line 188480 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188480             : 
  188481             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  188482             : // Start of memberFunctionString
  188483             : /* #line 3657 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  188484             : 
  188485             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  188486             :      virtual unsigned int cfgIndexForEnd() const override;
  188487             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  188488             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  188489             : #endif
  188490             : 
  188491             : 
  188492             : 
  188493             : // End of memberFunctionString
  188494             : // Start of memberFunctionString
  188495             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  188496             : 
  188497             : // *** COMMON CODE SECTION BEGINS HERE ***
  188498             : 
  188499             :     public:
  188500             : 
  188501             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  188502             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  188503             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  188504             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  188505             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  188506             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  188507             : 
  188508             :       /*! \brief returns a string representing the class name */
  188509             :           virtual std::string class_name() const override;
  188510             : 
  188511             :       /*! \brief returns new style SageIII enum values */
  188512             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  188513             : 
  188514             :       /*! \brief static variant value */
  188515             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  188516             :        // static const VariantT static_variant = V_SgElseWhereStatement;
  188517             :           enum { static_variant = V_SgElseWhereStatement };
  188518             : 
  188519             :        /* the generated cast function */
  188520             :       /*! \brief Casts pointer from base class to derived class */
  188521             :           ROSE_DLL_API friend       SgElseWhereStatement* isSgElseWhereStatement(       SgNode * s );
  188522             : 
  188523             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  188524             :           ROSE_DLL_API friend const SgElseWhereStatement* isSgElseWhereStatement( const SgNode * s );
  188525             : 
  188526             :      // ******************************************
  188527             :      // * Memory Pool / New / Delete
  188528             :      // ******************************************
  188529             : 
  188530             :      public:
  188531             :           /// \private
  188532             :           static const unsigned pool_size; //
  188533             :           /// \private
  188534             :           static std::vector<unsigned char *> pools; //
  188535             :           /// \private
  188536             :           static SgElseWhereStatement * next_node; // 
  188537             : 
  188538             :           /// \private
  188539             :           static unsigned long initializeStorageClassArray(SgElseWhereStatementStorageClass *); //
  188540             : 
  188541             :           /// \private
  188542             :           static void clearMemoryPool(); //
  188543             :           static void deleteMemoryPool(); //
  188544             : 
  188545             :           /// \private
  188546             :           static void extendMemoryPoolForFileIO(); //
  188547             : 
  188548             :           /// \private
  188549             :           static SgElseWhereStatement * getPointerFromGlobalIndex(unsigned long); //
  188550             :           /// \private
  188551             :           static SgElseWhereStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  188552             : 
  188553             :           /// \private
  188554             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  188555             :           /// \private
  188556             :           static void resetValidFreepointers(); //
  188557             :           /// \private
  188558             :           static unsigned long getNumberOfLastValidPointer(); //
  188559             : 
  188560             : 
  188561             : #if defined(INLINE_FUNCTIONS)
  188562             :       /*! \brief returns pointer to newly allocated IR node */
  188563             :           inline void *operator new (size_t size);
  188564             : #else
  188565             :       /*! \brief returns pointer to newly allocated IR node */
  188566             :           void *operator new (size_t size);
  188567             : #endif
  188568             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  188569             :           void operator delete (void* pointer, size_t size);
  188570             : 
  188571             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  188572           0 :           void operator delete (void* pointer)
  188573             :              {
  188574             :             // This is the generated delete operator...
  188575           0 :                SgElseWhereStatement::operator delete (pointer,sizeof(SgElseWhereStatement));
  188576             :              }
  188577             : 
  188578             :       /*! \brief Returns the total number of IR nodes of this type */
  188579             :           static size_t numberOfNodes();
  188580             : 
  188581             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  188582             :           static size_t memoryUsage();
  188583             : 
  188584             :       // End of scope which started in IR nodes specific code 
  188585             :       /* */
  188586             : 
  188587             :       /* name Internal Functions
  188588             :           \brief Internal functions ... incomplete-documentation
  188589             : 
  188590             :           These functions have been made public as part of the design, but they are suggested for internal use 
  188591             :           or by particularly knowledgeable users for specialized tools or applications.
  188592             : 
  188593             :           \internal We could not make these private because they are required by user for special purposes. And 
  188594             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  188595             :          
  188596             :        */
  188597             : 
  188598             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  188599             :        // overridden in every class by *generated* implementation
  188600             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  188601             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  188602             :        // MS: 06/28/02 container of names of variables or container indices 
  188603             :        // used used in the traversal to access AST successor nodes
  188604             :        // overridden in every class by *generated* implementation
  188605             :       /*! \brief container of names of variables or container indices used used in the traversal
  188606             :           to access AST successor nodes overridden in every class by *generated* implementation */
  188607             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  188608             : 
  188609             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  188610             :        // than all the vector copies. The implementation for these functions is generated for each class.
  188611             :       /*! \brief return number of children in the traversal successor list */
  188612             :           virtual size_t get_numberOfTraversalSuccessors() override;
  188613             :       /*! \brief index-based access to traversal successors by index number */
  188614             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  188615             :       /*! \brief index-based access to traversal successors by child node */
  188616             :           virtual size_t get_childIndex(SgNode *child) override;
  188617             : 
  188618             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  188619             :        // MS: 08/16/2002 method for generating RTI information
  188620             :       /*! \brief return C++ Runtime-Time-Information */
  188621             :           virtual RTIReturnType roseRTI() override;
  188622             : #endif
  188623             :       /* */
  188624             : 
  188625             : 
  188626             : 
  188627             :       /* name Deprecated Functions
  188628             :           \brief Deprecated functions ... incomplete-documentation
  188629             : 
  188630             :           These functions have been deprecated from use.
  188631             :        */
  188632             :       /* */
  188633             : 
  188634             :       /*! returns a C style string (char*) representing the class name */
  188635             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  188636             : 
  188637             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  188638             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  188639             : #if 0
  188640             :       /*! returns old style Sage II enum values */
  188641             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  188642             :       /*! returns old style Sage II enum values */
  188643             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  188644             : #endif
  188645             :       /* */
  188646             : 
  188647             : 
  188648             : 
  188649             : 
  188650             :      public:
  188651             :       /* name Traversal Support Functions
  188652             :           \brief Traversal support functions ... incomplete-documentation
  188653             : 
  188654             :           These functions have been made public as part of the design, but they are suggested for internal use 
  188655             :           or by particularly knowledgable users for specialized tools or applications.
  188656             :        */
  188657             :       /* */
  188658             : 
  188659             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  188660             :        // (inferior to ROSE traversal mechanism, experimental).
  188661             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  188662             :        */
  188663             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  188664             : 
  188665             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  188666             :       /*! \brief support for the classic visitor pattern done in GoF */
  188667             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  188668             : 
  188669             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  188670             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  188671             :        */
  188672             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  188673             : 
  188674             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  188675             :        */
  188676             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  188677             : 
  188678             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  188679             :        // This traversal helps support internal tools that call static member functions.
  188680             :        // note: this function operates on the memory pools.
  188681             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  188682             :        */
  188683             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  188684             :       /* */
  188685             : 
  188686             : 
  188687             :      public:
  188688             :       /* name Memory Allocation Functions
  188689             :           \brief Memory allocations functions ... incomplete-documentation
  188690             : 
  188691             :           These functions have been made public as part of the design, but they are suggested for internal use 
  188692             :           or by particularly knowledgable users for specialized tools or applications.
  188693             :        */
  188694             :       /* */
  188695             : 
  188696             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  188697             : 
  188698             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  188699             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  188700             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  188701             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  188702             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  188703             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  188704             :           being used with the AST File I/O mechanism.
  188705             :        */
  188706             :           virtual bool isInMemoryPool() override;
  188707             : 
  188708             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  188709             : 
  188710             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  188711             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  188712             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  188713             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  188714             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  188715             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  188716             :           being used with the AST File I/O mechanism.
  188717             :        */
  188718             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  188719             : 
  188720             :       // DQ (4/30/2006): Modified to be a const function.
  188721             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  188722             : 
  188723             :           This functions is part of general support for many possible tools to operate 
  188724             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  188725             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  188726             :           less than the set of pointers used by the AST file I/O. This is part of
  188727             :           work implemented by Andreas, and support tools such as the AST graph generation.
  188728             : 
  188729             :           \warning This function can return unexpected data members and thus the 
  188730             :                    order and the number of elements is unpredicable and subject 
  188731             :                    to change.
  188732             : 
  188733             :           \returns STL vector of pairs of SgNode* and strings
  188734             :        */
  188735             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  188736             : 
  188737             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  188738             : 
  188739             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  188740             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  188741             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  188742             : 
  188743             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  188744             :                    and subject to change.
  188745             :        */
  188746             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  188747             : 
  188748             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  188749             : 
  188750             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  188751             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  188752             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  188753             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  188754             : 
  188755             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  188756             : 
  188757             :           \returns long
  188758             :        */
  188759             :           virtual long getChildIndex( SgNode* childNode ) const override;
  188760             : 
  188761             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  188762             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  188763             :       /* \brief Constructor for use by AST File I/O Mechanism
  188764             : 
  188765             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  188766             :           which obtained via fast binary file I/O from disk.
  188767             :        */
  188768             :        // SgElseWhereStatement( SgElseWhereStatementStorageClass& source );
  188769             : 
  188770             : 
  188771             : 
  188772             : 
  188773             : 
  188774             :  // JH (10/24/2005): methods added to support the ast file IO
  188775             :     private:
  188776             : 
  188777             :       /* name AST Memory Allocation Support Functions
  188778             :           \brief Memory allocations support....
  188779             : 
  188780             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  188781             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  188782             :           and support the AST File I/O Mechanism.
  188783             :        */
  188784             :       /* */
  188785             : 
  188786             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  188787             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  188788             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  188789             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  188790             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  188791             :           a correspinding one in the AST_FILE_IO class!
  188792             :        */
  188793             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  188794             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  188795             :       /* \brief Typedef used for low level memory access.
  188796             :        */
  188797             :        // typedef unsigned char* TestType;
  188798             : 
  188799             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  188800             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  188801             :       /* \brief Typedef used to hold memory addresses as values.
  188802             :        */
  188803             :        // typedef unsigned long  AddressType;
  188804             : 
  188805             : 
  188806             : 
  188807             :        // necessary, to have direct access to the p_freepointer and the private methods !
  188808             :       /*! \brief friend class declaration to support AST File I/O */
  188809             :           friend class AST_FILE_IO;
  188810             : 
  188811             :       /*! \brief friend class declaration to support AST File I/O */
  188812             :           friend class SgElseWhereStatementStorageClass;
  188813             : 
  188814             :       /*! \brief friend class declaration to support AST File I/O */
  188815             :           friend class AstSpecificDataManagingClass;
  188816             : 
  188817             :       /*! \brief friend class declaration to support AST File I/O */
  188818             :           friend class AstSpecificDataManagingClassStorageClass;
  188819             :     public:
  188820             :       /*! \brief IR node constructor to support AST File I/O */
  188821             :           SgElseWhereStatement( const SgElseWhereStatementStorageClass& source );
  188822             : 
  188823             :  // private: // JJW hack
  188824             :        /*
  188825             :           name AST Memory Allocation Support Variables
  188826             :           Memory allocations support variables 
  188827             : 
  188828             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  188829             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  188830             :           and support the AST File I/O Mechanism.
  188831             :        */
  188832             :       /* */
  188833             : 
  188834             :     public:
  188835             : 
  188836             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  188837             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  188838             :       // virtual SgNode* addRegExpAttribute();
  188839             :       /*! \brief Support for AST matching using regular expression.
  188840             : 
  188841             :           This support is incomplete and the subject of current research to define 
  188842             :           RegEx trees to support inexact matching.
  188843             :        */
  188844             :           SgElseWhereStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  188845             : 
  188846             : // *** COMMON CODE SECTION ENDS HERE ***
  188847             : 
  188848             : 
  188849             : // End of memberFunctionString
  188850             : // Start of memberFunctionString
  188851             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  188852             : 
  188853             :      // the generated cast function
  188854             :      // friend ROSE_DLL_API SgElseWhereStatement* isSgElseWhereStatement ( SgNode* s );
  188855             : 
  188856             :           typedef SgStatement base_node_type;
  188857             : 
  188858             : 
  188859             : // End of memberFunctionString
  188860             : // Start of memberFunctionString
  188861             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  188862             : 
  188863             :           void post_construction_initialization() override;
  188864             : 
  188865             : 
  188866             : // End of memberFunctionString
  188867             : 
  188868             :      public: 
  188869             :          SgExpression* get_condition() const;
  188870             :          void set_condition(SgExpression* condition);
  188871             : 
  188872             :      public: 
  188873             :          SgBasicBlock* get_body() const;
  188874             :          void set_body(SgBasicBlock* body);
  188875             : 
  188876             :      public: 
  188877             :          SgElseWhereStatement* get_elsewhere() const;
  188878             :          void set_elsewhere(SgElseWhereStatement* elsewhere);
  188879             : 
  188880             : 
  188881             :      public: 
  188882             :          virtual ~SgElseWhereStatement();
  188883             : 
  188884             : 
  188885             :      public: 
  188886             :          SgElseWhereStatement(Sg_File_Info* startOfConstruct , SgExpression* condition = NULL, SgBasicBlock* body = NULL, SgElseWhereStatement* elsewhere = NULL); 
  188887             :          SgElseWhereStatement(SgExpression* condition, SgBasicBlock* body, SgElseWhereStatement* elsewhere); 
  188888             : 
  188889             :     protected:
  188890             : // Start of memberFunctionString
  188891             : SgExpression* p_condition;
  188892             :           
  188893             : // End of memberFunctionString
  188894             : // Start of memberFunctionString
  188895             : SgBasicBlock* p_body;
  188896             :           
  188897             : // End of memberFunctionString
  188898             : // Start of memberFunctionString
  188899             : SgElseWhereStatement* p_elsewhere;
  188900             :           
  188901             : // End of memberFunctionString
  188902             : 
  188903             :     friend struct Rose::Traits::generated::describe_node_t<SgElseWhereStatement>;
  188904             :     friend struct Rose::Traits::generated::describe_field_t<SgElseWhereStatement, SgExpression*,&SgElseWhereStatement::p_condition>;
  188905             :     friend struct Rose::Traits::generated::describe_field_t<SgElseWhereStatement, SgBasicBlock*,&SgElseWhereStatement::p_body>;
  188906             :     friend struct Rose::Traits::generated::describe_field_t<SgElseWhereStatement, SgElseWhereStatement*,&SgElseWhereStatement::p_elsewhere>;
  188907             : 
  188908             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188909             : 
  188910             : 
  188911             :    };
  188912             : #endif
  188913             : 
  188914             : // postdeclarations for SgElseWhereStatement
  188915             : 
  188916             : /* #line 188917 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188917             : 
  188918             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  188919             : 
  188920             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188921             : 
  188922             : 
  188923             : /* #line 188924 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188924             : 
  188925             : 
  188926             : 
  188927             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188928             : 
  188929             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  188930             : //      This code is automatically generated for each 
  188931             : //      terminal and non-terminal within the defined 
  188932             : //      grammar.  There is a simple way to change the 
  188933             : //      code to fix bugs etc.  See the ROSE README file
  188934             : //      for directions.
  188935             : 
  188936             : // tps: (02/22/2010): Adding DLL export requirements
  188937             : #include "rosedll.h"
  188938             : 
  188939             : // predeclarations for SgNullifyStatement
  188940             : 
  188941             : /* #line 188942 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188942             : 
  188943             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  188944             : 
  188945             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  188946             : 
  188947             : #if 1
  188948             : // Class Definition for SgNullifyStatement
  188949             : class ROSE_DLL_API SgNullifyStatement  : public SgStatement
  188950             :    {
  188951             :      public:
  188952             : 
  188953             : 
  188954             : /* #line 188955 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  188955             : 
  188956             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  188957             : // Start of memberFunctionString
  188958             : /* #line 3666 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  188959             : 
  188960             : 
  188961             : 
  188962             : // End of memberFunctionString
  188963             : // Start of memberFunctionString
  188964             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  188965             : 
  188966             : // *** COMMON CODE SECTION BEGINS HERE ***
  188967             : 
  188968             :     public:
  188969             : 
  188970             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  188971             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  188972             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  188973             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  188974             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  188975             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  188976             : 
  188977             :       /*! \brief returns a string representing the class name */
  188978             :           virtual std::string class_name() const override;
  188979             : 
  188980             :       /*! \brief returns new style SageIII enum values */
  188981             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  188982             : 
  188983             :       /*! \brief static variant value */
  188984             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  188985             :        // static const VariantT static_variant = V_SgNullifyStatement;
  188986             :           enum { static_variant = V_SgNullifyStatement };
  188987             : 
  188988             :        /* the generated cast function */
  188989             :       /*! \brief Casts pointer from base class to derived class */
  188990             :           ROSE_DLL_API friend       SgNullifyStatement* isSgNullifyStatement(       SgNode * s );
  188991             : 
  188992             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  188993             :           ROSE_DLL_API friend const SgNullifyStatement* isSgNullifyStatement( const SgNode * s );
  188994             : 
  188995             :      // ******************************************
  188996             :      // * Memory Pool / New / Delete
  188997             :      // ******************************************
  188998             : 
  188999             :      public:
  189000             :           /// \private
  189001             :           static const unsigned pool_size; //
  189002             :           /// \private
  189003             :           static std::vector<unsigned char *> pools; //
  189004             :           /// \private
  189005             :           static SgNullifyStatement * next_node; // 
  189006             : 
  189007             :           /// \private
  189008             :           static unsigned long initializeStorageClassArray(SgNullifyStatementStorageClass *); //
  189009             : 
  189010             :           /// \private
  189011             :           static void clearMemoryPool(); //
  189012             :           static void deleteMemoryPool(); //
  189013             : 
  189014             :           /// \private
  189015             :           static void extendMemoryPoolForFileIO(); //
  189016             : 
  189017             :           /// \private
  189018             :           static SgNullifyStatement * getPointerFromGlobalIndex(unsigned long); //
  189019             :           /// \private
  189020             :           static SgNullifyStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  189021             : 
  189022             :           /// \private
  189023             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  189024             :           /// \private
  189025             :           static void resetValidFreepointers(); //
  189026             :           /// \private
  189027             :           static unsigned long getNumberOfLastValidPointer(); //
  189028             : 
  189029             : 
  189030             : #if defined(INLINE_FUNCTIONS)
  189031             :       /*! \brief returns pointer to newly allocated IR node */
  189032             :           inline void *operator new (size_t size);
  189033             : #else
  189034             :       /*! \brief returns pointer to newly allocated IR node */
  189035             :           void *operator new (size_t size);
  189036             : #endif
  189037             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  189038             :           void operator delete (void* pointer, size_t size);
  189039             : 
  189040             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  189041           0 :           void operator delete (void* pointer)
  189042             :              {
  189043             :             // This is the generated delete operator...
  189044           0 :                SgNullifyStatement::operator delete (pointer,sizeof(SgNullifyStatement));
  189045             :              }
  189046             : 
  189047             :       /*! \brief Returns the total number of IR nodes of this type */
  189048             :           static size_t numberOfNodes();
  189049             : 
  189050             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  189051             :           static size_t memoryUsage();
  189052             : 
  189053             :       // End of scope which started in IR nodes specific code 
  189054             :       /* */
  189055             : 
  189056             :       /* name Internal Functions
  189057             :           \brief Internal functions ... incomplete-documentation
  189058             : 
  189059             :           These functions have been made public as part of the design, but they are suggested for internal use 
  189060             :           or by particularly knowledgeable users for specialized tools or applications.
  189061             : 
  189062             :           \internal We could not make these private because they are required by user for special purposes. And 
  189063             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  189064             :          
  189065             :        */
  189066             : 
  189067             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  189068             :        // overridden in every class by *generated* implementation
  189069             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  189070             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  189071             :        // MS: 06/28/02 container of names of variables or container indices 
  189072             :        // used used in the traversal to access AST successor nodes
  189073             :        // overridden in every class by *generated* implementation
  189074             :       /*! \brief container of names of variables or container indices used used in the traversal
  189075             :           to access AST successor nodes overridden in every class by *generated* implementation */
  189076             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  189077             : 
  189078             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  189079             :        // than all the vector copies. The implementation for these functions is generated for each class.
  189080             :       /*! \brief return number of children in the traversal successor list */
  189081             :           virtual size_t get_numberOfTraversalSuccessors() override;
  189082             :       /*! \brief index-based access to traversal successors by index number */
  189083             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  189084             :       /*! \brief index-based access to traversal successors by child node */
  189085             :           virtual size_t get_childIndex(SgNode *child) override;
  189086             : 
  189087             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  189088             :        // MS: 08/16/2002 method for generating RTI information
  189089             :       /*! \brief return C++ Runtime-Time-Information */
  189090             :           virtual RTIReturnType roseRTI() override;
  189091             : #endif
  189092             :       /* */
  189093             : 
  189094             : 
  189095             : 
  189096             :       /* name Deprecated Functions
  189097             :           \brief Deprecated functions ... incomplete-documentation
  189098             : 
  189099             :           These functions have been deprecated from use.
  189100             :        */
  189101             :       /* */
  189102             : 
  189103             :       /*! returns a C style string (char*) representing the class name */
  189104             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  189105             : 
  189106             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  189107             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  189108             : #if 0
  189109             :       /*! returns old style Sage II enum values */
  189110             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  189111             :       /*! returns old style Sage II enum values */
  189112             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  189113             : #endif
  189114             :       /* */
  189115             : 
  189116             : 
  189117             : 
  189118             : 
  189119             :      public:
  189120             :       /* name Traversal Support Functions
  189121             :           \brief Traversal support functions ... incomplete-documentation
  189122             : 
  189123             :           These functions have been made public as part of the design, but they are suggested for internal use 
  189124             :           or by particularly knowledgable users for specialized tools or applications.
  189125             :        */
  189126             :       /* */
  189127             : 
  189128             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  189129             :        // (inferior to ROSE traversal mechanism, experimental).
  189130             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  189131             :        */
  189132             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  189133             : 
  189134             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  189135             :       /*! \brief support for the classic visitor pattern done in GoF */
  189136             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  189137             : 
  189138             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  189139             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  189140             :        */
  189141             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  189142             : 
  189143             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  189144             :        */
  189145             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  189146             : 
  189147             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  189148             :        // This traversal helps support internal tools that call static member functions.
  189149             :        // note: this function operates on the memory pools.
  189150             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  189151             :        */
  189152             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  189153             :       /* */
  189154             : 
  189155             : 
  189156             :      public:
  189157             :       /* name Memory Allocation Functions
  189158             :           \brief Memory allocations functions ... incomplete-documentation
  189159             : 
  189160             :           These functions have been made public as part of the design, but they are suggested for internal use 
  189161             :           or by particularly knowledgable users for specialized tools or applications.
  189162             :        */
  189163             :       /* */
  189164             : 
  189165             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  189166             : 
  189167             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  189168             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  189169             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  189170             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  189171             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  189172             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  189173             :           being used with the AST File I/O mechanism.
  189174             :        */
  189175             :           virtual bool isInMemoryPool() override;
  189176             : 
  189177             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  189178             : 
  189179             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  189180             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  189181             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  189182             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  189183             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  189184             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  189185             :           being used with the AST File I/O mechanism.
  189186             :        */
  189187             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  189188             : 
  189189             :       // DQ (4/30/2006): Modified to be a const function.
  189190             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  189191             : 
  189192             :           This functions is part of general support for many possible tools to operate 
  189193             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  189194             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  189195             :           less than the set of pointers used by the AST file I/O. This is part of
  189196             :           work implemented by Andreas, and support tools such as the AST graph generation.
  189197             : 
  189198             :           \warning This function can return unexpected data members and thus the 
  189199             :                    order and the number of elements is unpredicable and subject 
  189200             :                    to change.
  189201             : 
  189202             :           \returns STL vector of pairs of SgNode* and strings
  189203             :        */
  189204             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  189205             : 
  189206             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  189207             : 
  189208             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  189209             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  189210             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  189211             : 
  189212             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  189213             :                    and subject to change.
  189214             :        */
  189215             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  189216             : 
  189217             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  189218             : 
  189219             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  189220             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  189221             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  189222             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  189223             : 
  189224             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  189225             : 
  189226             :           \returns long
  189227             :        */
  189228             :           virtual long getChildIndex( SgNode* childNode ) const override;
  189229             : 
  189230             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  189231             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  189232             :       /* \brief Constructor for use by AST File I/O Mechanism
  189233             : 
  189234             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  189235             :           which obtained via fast binary file I/O from disk.
  189236             :        */
  189237             :        // SgNullifyStatement( SgNullifyStatementStorageClass& source );
  189238             : 
  189239             : 
  189240             : 
  189241             : 
  189242             : 
  189243             :  // JH (10/24/2005): methods added to support the ast file IO
  189244             :     private:
  189245             : 
  189246             :       /* name AST Memory Allocation Support Functions
  189247             :           \brief Memory allocations support....
  189248             : 
  189249             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  189250             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  189251             :           and support the AST File I/O Mechanism.
  189252             :        */
  189253             :       /* */
  189254             : 
  189255             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  189256             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  189257             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  189258             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  189259             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  189260             :           a correspinding one in the AST_FILE_IO class!
  189261             :        */
  189262             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  189263             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  189264             :       /* \brief Typedef used for low level memory access.
  189265             :        */
  189266             :        // typedef unsigned char* TestType;
  189267             : 
  189268             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  189269             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  189270             :       /* \brief Typedef used to hold memory addresses as values.
  189271             :        */
  189272             :        // typedef unsigned long  AddressType;
  189273             : 
  189274             : 
  189275             : 
  189276             :        // necessary, to have direct access to the p_freepointer and the private methods !
  189277             :       /*! \brief friend class declaration to support AST File I/O */
  189278             :           friend class AST_FILE_IO;
  189279             : 
  189280             :       /*! \brief friend class declaration to support AST File I/O */
  189281             :           friend class SgNullifyStatementStorageClass;
  189282             : 
  189283             :       /*! \brief friend class declaration to support AST File I/O */
  189284             :           friend class AstSpecificDataManagingClass;
  189285             : 
  189286             :       /*! \brief friend class declaration to support AST File I/O */
  189287             :           friend class AstSpecificDataManagingClassStorageClass;
  189288             :     public:
  189289             :       /*! \brief IR node constructor to support AST File I/O */
  189290             :           SgNullifyStatement( const SgNullifyStatementStorageClass& source );
  189291             : 
  189292             :  // private: // JJW hack
  189293             :        /*
  189294             :           name AST Memory Allocation Support Variables
  189295             :           Memory allocations support variables 
  189296             : 
  189297             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  189298             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  189299             :           and support the AST File I/O Mechanism.
  189300             :        */
  189301             :       /* */
  189302             : 
  189303             :     public:
  189304             : 
  189305             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  189306             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  189307             :       // virtual SgNode* addRegExpAttribute();
  189308             :       /*! \brief Support for AST matching using regular expression.
  189309             : 
  189310             :           This support is incomplete and the subject of current research to define 
  189311             :           RegEx trees to support inexact matching.
  189312             :        */
  189313             :           SgNullifyStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  189314             : 
  189315             : // *** COMMON CODE SECTION ENDS HERE ***
  189316             : 
  189317             : 
  189318             : // End of memberFunctionString
  189319             : // Start of memberFunctionString
  189320             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  189321             : 
  189322             :      // the generated cast function
  189323             :      // friend ROSE_DLL_API SgNullifyStatement* isSgNullifyStatement ( SgNode* s );
  189324             : 
  189325             :           typedef SgStatement base_node_type;
  189326             : 
  189327             : 
  189328             : // End of memberFunctionString
  189329             : // Start of memberFunctionString
  189330             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  189331             : 
  189332             :           void post_construction_initialization() override;
  189333             : 
  189334             : 
  189335             : // End of memberFunctionString
  189336             : 
  189337             :      public: 
  189338             :          SgExprListExp* get_pointer_list() const;
  189339             :          void set_pointer_list(SgExprListExp* pointer_list);
  189340             : 
  189341             : 
  189342             :      public: 
  189343             :          virtual ~SgNullifyStatement();
  189344             : 
  189345             : 
  189346             :      public: 
  189347             :          SgNullifyStatement(Sg_File_Info* startOfConstruct ); 
  189348             :          SgNullifyStatement(); 
  189349             : 
  189350             :     protected:
  189351             : // Start of memberFunctionString
  189352             : SgExprListExp* p_pointer_list;
  189353             :           
  189354             : // End of memberFunctionString
  189355             : 
  189356             :     friend struct Rose::Traits::generated::describe_node_t<SgNullifyStatement>;
  189357             :     friend struct Rose::Traits::generated::describe_field_t<SgNullifyStatement, SgExprListExp*,&SgNullifyStatement::p_pointer_list>;
  189358             : 
  189359             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189360             : 
  189361             : 
  189362             :    };
  189363             : #endif
  189364             : 
  189365             : // postdeclarations for SgNullifyStatement
  189366             : 
  189367             : /* #line 189368 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189368             : 
  189369             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  189370             : 
  189371             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189372             : 
  189373             : 
  189374             : /* #line 189375 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189375             : 
  189376             : 
  189377             : 
  189378             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189379             : 
  189380             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  189381             : //      This code is automatically generated for each 
  189382             : //      terminal and non-terminal within the defined 
  189383             : //      grammar.  There is a simple way to change the 
  189384             : //      code to fix bugs etc.  See the ROSE README file
  189385             : //      for directions.
  189386             : 
  189387             : // tps: (02/22/2010): Adding DLL export requirements
  189388             : #include "rosedll.h"
  189389             : 
  189390             : // predeclarations for SgArithmeticIfStatement
  189391             : 
  189392             : /* #line 189393 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189393             : 
  189394             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  189395             : 
  189396             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189397             : 
  189398             : #if 1
  189399             : // Class Definition for SgArithmeticIfStatement
  189400             : class ROSE_DLL_API SgArithmeticIfStatement  : public SgStatement
  189401             :    {
  189402             :      public:
  189403             : 
  189404             : 
  189405             : /* #line 189406 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189406             : 
  189407             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  189408             : // Start of memberFunctionString
  189409             : /* #line 3753 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  189410             : 
  189411             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  189412             :           virtual unsigned int cfgIndexForEnd() const override;
  189413             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  189414             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  189415             : #endif
  189416             : 
  189417             : 
  189418             : 
  189419             : // End of memberFunctionString
  189420             : // Start of memberFunctionString
  189421             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  189422             : 
  189423             : // *** COMMON CODE SECTION BEGINS HERE ***
  189424             : 
  189425             :     public:
  189426             : 
  189427             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  189428             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  189429             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  189430             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  189431             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  189432             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  189433             : 
  189434             :       /*! \brief returns a string representing the class name */
  189435             :           virtual std::string class_name() const override;
  189436             : 
  189437             :       /*! \brief returns new style SageIII enum values */
  189438             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  189439             : 
  189440             :       /*! \brief static variant value */
  189441             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  189442             :        // static const VariantT static_variant = V_SgArithmeticIfStatement;
  189443             :           enum { static_variant = V_SgArithmeticIfStatement };
  189444             : 
  189445             :        /* the generated cast function */
  189446             :       /*! \brief Casts pointer from base class to derived class */
  189447             :           ROSE_DLL_API friend       SgArithmeticIfStatement* isSgArithmeticIfStatement(       SgNode * s );
  189448             : 
  189449             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  189450             :           ROSE_DLL_API friend const SgArithmeticIfStatement* isSgArithmeticIfStatement( const SgNode * s );
  189451             : 
  189452             :      // ******************************************
  189453             :      // * Memory Pool / New / Delete
  189454             :      // ******************************************
  189455             : 
  189456             :      public:
  189457             :           /// \private
  189458             :           static const unsigned pool_size; //
  189459             :           /// \private
  189460             :           static std::vector<unsigned char *> pools; //
  189461             :           /// \private
  189462             :           static SgArithmeticIfStatement * next_node; // 
  189463             : 
  189464             :           /// \private
  189465             :           static unsigned long initializeStorageClassArray(SgArithmeticIfStatementStorageClass *); //
  189466             : 
  189467             :           /// \private
  189468             :           static void clearMemoryPool(); //
  189469             :           static void deleteMemoryPool(); //
  189470             : 
  189471             :           /// \private
  189472             :           static void extendMemoryPoolForFileIO(); //
  189473             : 
  189474             :           /// \private
  189475             :           static SgArithmeticIfStatement * getPointerFromGlobalIndex(unsigned long); //
  189476             :           /// \private
  189477             :           static SgArithmeticIfStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  189478             : 
  189479             :           /// \private
  189480             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  189481             :           /// \private
  189482             :           static void resetValidFreepointers(); //
  189483             :           /// \private
  189484             :           static unsigned long getNumberOfLastValidPointer(); //
  189485             : 
  189486             : 
  189487             : #if defined(INLINE_FUNCTIONS)
  189488             :       /*! \brief returns pointer to newly allocated IR node */
  189489             :           inline void *operator new (size_t size);
  189490             : #else
  189491             :       /*! \brief returns pointer to newly allocated IR node */
  189492             :           void *operator new (size_t size);
  189493             : #endif
  189494             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  189495             :           void operator delete (void* pointer, size_t size);
  189496             : 
  189497             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  189498           0 :           void operator delete (void* pointer)
  189499             :              {
  189500             :             // This is the generated delete operator...
  189501           0 :                SgArithmeticIfStatement::operator delete (pointer,sizeof(SgArithmeticIfStatement));
  189502             :              }
  189503             : 
  189504             :       /*! \brief Returns the total number of IR nodes of this type */
  189505             :           static size_t numberOfNodes();
  189506             : 
  189507             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  189508             :           static size_t memoryUsage();
  189509             : 
  189510             :       // End of scope which started in IR nodes specific code 
  189511             :       /* */
  189512             : 
  189513             :       /* name Internal Functions
  189514             :           \brief Internal functions ... incomplete-documentation
  189515             : 
  189516             :           These functions have been made public as part of the design, but they are suggested for internal use 
  189517             :           or by particularly knowledgeable users for specialized tools or applications.
  189518             : 
  189519             :           \internal We could not make these private because they are required by user for special purposes. And 
  189520             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  189521             :          
  189522             :        */
  189523             : 
  189524             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  189525             :        // overridden in every class by *generated* implementation
  189526             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  189527             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  189528             :        // MS: 06/28/02 container of names of variables or container indices 
  189529             :        // used used in the traversal to access AST successor nodes
  189530             :        // overridden in every class by *generated* implementation
  189531             :       /*! \brief container of names of variables or container indices used used in the traversal
  189532             :           to access AST successor nodes overridden in every class by *generated* implementation */
  189533             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  189534             : 
  189535             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  189536             :        // than all the vector copies. The implementation for these functions is generated for each class.
  189537             :       /*! \brief return number of children in the traversal successor list */
  189538             :           virtual size_t get_numberOfTraversalSuccessors() override;
  189539             :       /*! \brief index-based access to traversal successors by index number */
  189540             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  189541             :       /*! \brief index-based access to traversal successors by child node */
  189542             :           virtual size_t get_childIndex(SgNode *child) override;
  189543             : 
  189544             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  189545             :        // MS: 08/16/2002 method for generating RTI information
  189546             :       /*! \brief return C++ Runtime-Time-Information */
  189547             :           virtual RTIReturnType roseRTI() override;
  189548             : #endif
  189549             :       /* */
  189550             : 
  189551             : 
  189552             : 
  189553             :       /* name Deprecated Functions
  189554             :           \brief Deprecated functions ... incomplete-documentation
  189555             : 
  189556             :           These functions have been deprecated from use.
  189557             :        */
  189558             :       /* */
  189559             : 
  189560             :       /*! returns a C style string (char*) representing the class name */
  189561             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  189562             : 
  189563             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  189564             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  189565             : #if 0
  189566             :       /*! returns old style Sage II enum values */
  189567             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  189568             :       /*! returns old style Sage II enum values */
  189569             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  189570             : #endif
  189571             :       /* */
  189572             : 
  189573             : 
  189574             : 
  189575             : 
  189576             :      public:
  189577             :       /* name Traversal Support Functions
  189578             :           \brief Traversal support functions ... incomplete-documentation
  189579             : 
  189580             :           These functions have been made public as part of the design, but they are suggested for internal use 
  189581             :           or by particularly knowledgable users for specialized tools or applications.
  189582             :        */
  189583             :       /* */
  189584             : 
  189585             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  189586             :        // (inferior to ROSE traversal mechanism, experimental).
  189587             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  189588             :        */
  189589             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  189590             : 
  189591             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  189592             :       /*! \brief support for the classic visitor pattern done in GoF */
  189593             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  189594             : 
  189595             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  189596             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  189597             :        */
  189598             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  189599             : 
  189600             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  189601             :        */
  189602             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  189603             : 
  189604             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  189605             :        // This traversal helps support internal tools that call static member functions.
  189606             :        // note: this function operates on the memory pools.
  189607             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  189608             :        */
  189609             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  189610             :       /* */
  189611             : 
  189612             : 
  189613             :      public:
  189614             :       /* name Memory Allocation Functions
  189615             :           \brief Memory allocations functions ... incomplete-documentation
  189616             : 
  189617             :           These functions have been made public as part of the design, but they are suggested for internal use 
  189618             :           or by particularly knowledgable users for specialized tools or applications.
  189619             :        */
  189620             :       /* */
  189621             : 
  189622             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  189623             : 
  189624             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  189625             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  189626             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  189627             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  189628             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  189629             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  189630             :           being used with the AST File I/O mechanism.
  189631             :        */
  189632             :           virtual bool isInMemoryPool() override;
  189633             : 
  189634             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  189635             : 
  189636             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  189637             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  189638             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  189639             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  189640             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  189641             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  189642             :           being used with the AST File I/O mechanism.
  189643             :        */
  189644             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  189645             : 
  189646             :       // DQ (4/30/2006): Modified to be a const function.
  189647             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  189648             : 
  189649             :           This functions is part of general support for many possible tools to operate 
  189650             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  189651             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  189652             :           less than the set of pointers used by the AST file I/O. This is part of
  189653             :           work implemented by Andreas, and support tools such as the AST graph generation.
  189654             : 
  189655             :           \warning This function can return unexpected data members and thus the 
  189656             :                    order and the number of elements is unpredicable and subject 
  189657             :                    to change.
  189658             : 
  189659             :           \returns STL vector of pairs of SgNode* and strings
  189660             :        */
  189661             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  189662             : 
  189663             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  189664             : 
  189665             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  189666             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  189667             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  189668             : 
  189669             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  189670             :                    and subject to change.
  189671             :        */
  189672             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  189673             : 
  189674             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  189675             : 
  189676             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  189677             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  189678             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  189679             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  189680             : 
  189681             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  189682             : 
  189683             :           \returns long
  189684             :        */
  189685             :           virtual long getChildIndex( SgNode* childNode ) const override;
  189686             : 
  189687             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  189688             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  189689             :       /* \brief Constructor for use by AST File I/O Mechanism
  189690             : 
  189691             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  189692             :           which obtained via fast binary file I/O from disk.
  189693             :        */
  189694             :        // SgArithmeticIfStatement( SgArithmeticIfStatementStorageClass& source );
  189695             : 
  189696             : 
  189697             : 
  189698             : 
  189699             : 
  189700             :  // JH (10/24/2005): methods added to support the ast file IO
  189701             :     private:
  189702             : 
  189703             :       /* name AST Memory Allocation Support Functions
  189704             :           \brief Memory allocations support....
  189705             : 
  189706             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  189707             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  189708             :           and support the AST File I/O Mechanism.
  189709             :        */
  189710             :       /* */
  189711             : 
  189712             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  189713             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  189714             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  189715             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  189716             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  189717             :           a correspinding one in the AST_FILE_IO class!
  189718             :        */
  189719             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  189720             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  189721             :       /* \brief Typedef used for low level memory access.
  189722             :        */
  189723             :        // typedef unsigned char* TestType;
  189724             : 
  189725             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  189726             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  189727             :       /* \brief Typedef used to hold memory addresses as values.
  189728             :        */
  189729             :        // typedef unsigned long  AddressType;
  189730             : 
  189731             : 
  189732             : 
  189733             :        // necessary, to have direct access to the p_freepointer and the private methods !
  189734             :       /*! \brief friend class declaration to support AST File I/O */
  189735             :           friend class AST_FILE_IO;
  189736             : 
  189737             :       /*! \brief friend class declaration to support AST File I/O */
  189738             :           friend class SgArithmeticIfStatementStorageClass;
  189739             : 
  189740             :       /*! \brief friend class declaration to support AST File I/O */
  189741             :           friend class AstSpecificDataManagingClass;
  189742             : 
  189743             :       /*! \brief friend class declaration to support AST File I/O */
  189744             :           friend class AstSpecificDataManagingClassStorageClass;
  189745             :     public:
  189746             :       /*! \brief IR node constructor to support AST File I/O */
  189747             :           SgArithmeticIfStatement( const SgArithmeticIfStatementStorageClass& source );
  189748             : 
  189749             :  // private: // JJW hack
  189750             :        /*
  189751             :           name AST Memory Allocation Support Variables
  189752             :           Memory allocations support variables 
  189753             : 
  189754             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  189755             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  189756             :           and support the AST File I/O Mechanism.
  189757             :        */
  189758             :       /* */
  189759             : 
  189760             :     public:
  189761             : 
  189762             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  189763             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  189764             :       // virtual SgNode* addRegExpAttribute();
  189765             :       /*! \brief Support for AST matching using regular expression.
  189766             : 
  189767             :           This support is incomplete and the subject of current research to define 
  189768             :           RegEx trees to support inexact matching.
  189769             :        */
  189770             :           SgArithmeticIfStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  189771             : 
  189772             : // *** COMMON CODE SECTION ENDS HERE ***
  189773             : 
  189774             : 
  189775             : // End of memberFunctionString
  189776             : // Start of memberFunctionString
  189777             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  189778             : 
  189779             :      // the generated cast function
  189780             :      // friend ROSE_DLL_API SgArithmeticIfStatement* isSgArithmeticIfStatement ( SgNode* s );
  189781             : 
  189782             :           typedef SgStatement base_node_type;
  189783             : 
  189784             : 
  189785             : // End of memberFunctionString
  189786             : // Start of memberFunctionString
  189787             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  189788             : 
  189789             :           void post_construction_initialization() override;
  189790             : 
  189791             : 
  189792             : // End of memberFunctionString
  189793             : 
  189794             :      public: 
  189795             :          SgExpression* get_conditional() const;
  189796             :          void set_conditional(SgExpression* conditional);
  189797             : 
  189798             :      public: 
  189799             :          SgLabelRefExp* get_less_label() const;
  189800             :          void set_less_label(SgLabelRefExp* less_label);
  189801             : 
  189802             :      public: 
  189803             :          SgLabelRefExp* get_equal_label() const;
  189804             :          void set_equal_label(SgLabelRefExp* equal_label);
  189805             : 
  189806             :      public: 
  189807             :          SgLabelRefExp* get_greater_label() const;
  189808             :          void set_greater_label(SgLabelRefExp* greater_label);
  189809             : 
  189810             : 
  189811             :      public: 
  189812             :          virtual ~SgArithmeticIfStatement();
  189813             : 
  189814             : 
  189815             :      public: 
  189816             :          SgArithmeticIfStatement(Sg_File_Info* startOfConstruct , SgExpression* conditional = NULL, SgLabelRefExp* less_label = NULL, SgLabelRefExp* equal_label = NULL, SgLabelRefExp* greater_label = NULL); 
  189817             :          SgArithmeticIfStatement(SgExpression* conditional, SgLabelRefExp* less_label, SgLabelRefExp* equal_label, SgLabelRefExp* greater_label); 
  189818             : 
  189819             :     protected:
  189820             : // Start of memberFunctionString
  189821             : SgExpression* p_conditional;
  189822             :           
  189823             : // End of memberFunctionString
  189824             : // Start of memberFunctionString
  189825             : SgLabelRefExp* p_less_label;
  189826             :           
  189827             : // End of memberFunctionString
  189828             : // Start of memberFunctionString
  189829             : SgLabelRefExp* p_equal_label;
  189830             :           
  189831             : // End of memberFunctionString
  189832             : // Start of memberFunctionString
  189833             : SgLabelRefExp* p_greater_label;
  189834             :           
  189835             : // End of memberFunctionString
  189836             : 
  189837             :     friend struct Rose::Traits::generated::describe_node_t<SgArithmeticIfStatement>;
  189838             :     friend struct Rose::Traits::generated::describe_field_t<SgArithmeticIfStatement, SgExpression*,&SgArithmeticIfStatement::p_conditional>;
  189839             :     friend struct Rose::Traits::generated::describe_field_t<SgArithmeticIfStatement, SgLabelRefExp*,&SgArithmeticIfStatement::p_less_label>;
  189840             :     friend struct Rose::Traits::generated::describe_field_t<SgArithmeticIfStatement, SgLabelRefExp*,&SgArithmeticIfStatement::p_equal_label>;
  189841             :     friend struct Rose::Traits::generated::describe_field_t<SgArithmeticIfStatement, SgLabelRefExp*,&SgArithmeticIfStatement::p_greater_label>;
  189842             : 
  189843             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189844             : 
  189845             : 
  189846             :    };
  189847             : #endif
  189848             : 
  189849             : // postdeclarations for SgArithmeticIfStatement
  189850             : 
  189851             : /* #line 189852 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189852             : 
  189853             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  189854             : 
  189855             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189856             : 
  189857             : 
  189858             : /* #line 189859 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189859             : 
  189860             : 
  189861             : 
  189862             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189863             : 
  189864             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  189865             : //      This code is automatically generated for each 
  189866             : //      terminal and non-terminal within the defined 
  189867             : //      grammar.  There is a simple way to change the 
  189868             : //      code to fix bugs etc.  See the ROSE README file
  189869             : //      for directions.
  189870             : 
  189871             : // tps: (02/22/2010): Adding DLL export requirements
  189872             : #include "rosedll.h"
  189873             : 
  189874             : // predeclarations for SgAssignStatement
  189875             : 
  189876             : /* #line 189877 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189877             : 
  189878             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  189879             : 
  189880             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  189881             : 
  189882             : #if 1
  189883             : // Class Definition for SgAssignStatement
  189884             : class ROSE_DLL_API SgAssignStatement  : public SgStatement
  189885             :    {
  189886             :      public:
  189887             : 
  189888             : 
  189889             : /* #line 189890 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  189890             : 
  189891             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  189892             : // Start of memberFunctionString
  189893             : /* #line 3763 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  189894             : 
  189895             : 
  189896             : 
  189897             : // End of memberFunctionString
  189898             : // Start of memberFunctionString
  189899             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  189900             : 
  189901             : // *** COMMON CODE SECTION BEGINS HERE ***
  189902             : 
  189903             :     public:
  189904             : 
  189905             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  189906             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  189907             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  189908             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  189909             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  189910             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  189911             : 
  189912             :       /*! \brief returns a string representing the class name */
  189913             :           virtual std::string class_name() const override;
  189914             : 
  189915             :       /*! \brief returns new style SageIII enum values */
  189916             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  189917             : 
  189918             :       /*! \brief static variant value */
  189919             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  189920             :        // static const VariantT static_variant = V_SgAssignStatement;
  189921             :           enum { static_variant = V_SgAssignStatement };
  189922             : 
  189923             :        /* the generated cast function */
  189924             :       /*! \brief Casts pointer from base class to derived class */
  189925             :           ROSE_DLL_API friend       SgAssignStatement* isSgAssignStatement(       SgNode * s );
  189926             : 
  189927             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  189928             :           ROSE_DLL_API friend const SgAssignStatement* isSgAssignStatement( const SgNode * s );
  189929             : 
  189930             :      // ******************************************
  189931             :      // * Memory Pool / New / Delete
  189932             :      // ******************************************
  189933             : 
  189934             :      public:
  189935             :           /// \private
  189936             :           static const unsigned pool_size; //
  189937             :           /// \private
  189938             :           static std::vector<unsigned char *> pools; //
  189939             :           /// \private
  189940             :           static SgAssignStatement * next_node; // 
  189941             : 
  189942             :           /// \private
  189943             :           static unsigned long initializeStorageClassArray(SgAssignStatementStorageClass *); //
  189944             : 
  189945             :           /// \private
  189946             :           static void clearMemoryPool(); //
  189947             :           static void deleteMemoryPool(); //
  189948             : 
  189949             :           /// \private
  189950             :           static void extendMemoryPoolForFileIO(); //
  189951             : 
  189952             :           /// \private
  189953             :           static SgAssignStatement * getPointerFromGlobalIndex(unsigned long); //
  189954             :           /// \private
  189955             :           static SgAssignStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  189956             : 
  189957             :           /// \private
  189958             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  189959             :           /// \private
  189960             :           static void resetValidFreepointers(); //
  189961             :           /// \private
  189962             :           static unsigned long getNumberOfLastValidPointer(); //
  189963             : 
  189964             : 
  189965             : #if defined(INLINE_FUNCTIONS)
  189966             :       /*! \brief returns pointer to newly allocated IR node */
  189967             :           inline void *operator new (size_t size);
  189968             : #else
  189969             :       /*! \brief returns pointer to newly allocated IR node */
  189970             :           void *operator new (size_t size);
  189971             : #endif
  189972             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  189973             :           void operator delete (void* pointer, size_t size);
  189974             : 
  189975             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  189976           0 :           void operator delete (void* pointer)
  189977             :              {
  189978             :             // This is the generated delete operator...
  189979           0 :                SgAssignStatement::operator delete (pointer,sizeof(SgAssignStatement));
  189980             :              }
  189981             : 
  189982             :       /*! \brief Returns the total number of IR nodes of this type */
  189983             :           static size_t numberOfNodes();
  189984             : 
  189985             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  189986             :           static size_t memoryUsage();
  189987             : 
  189988             :       // End of scope which started in IR nodes specific code 
  189989             :       /* */
  189990             : 
  189991             :       /* name Internal Functions
  189992             :           \brief Internal functions ... incomplete-documentation
  189993             : 
  189994             :           These functions have been made public as part of the design, but they are suggested for internal use 
  189995             :           or by particularly knowledgeable users for specialized tools or applications.
  189996             : 
  189997             :           \internal We could not make these private because they are required by user for special purposes. And 
  189998             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  189999             :          
  190000             :        */
  190001             : 
  190002             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  190003             :        // overridden in every class by *generated* implementation
  190004             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  190005             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  190006             :        // MS: 06/28/02 container of names of variables or container indices 
  190007             :        // used used in the traversal to access AST successor nodes
  190008             :        // overridden in every class by *generated* implementation
  190009             :       /*! \brief container of names of variables or container indices used used in the traversal
  190010             :           to access AST successor nodes overridden in every class by *generated* implementation */
  190011             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  190012             : 
  190013             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  190014             :        // than all the vector copies. The implementation for these functions is generated for each class.
  190015             :       /*! \brief return number of children in the traversal successor list */
  190016             :           virtual size_t get_numberOfTraversalSuccessors() override;
  190017             :       /*! \brief index-based access to traversal successors by index number */
  190018             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  190019             :       /*! \brief index-based access to traversal successors by child node */
  190020             :           virtual size_t get_childIndex(SgNode *child) override;
  190021             : 
  190022             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  190023             :        // MS: 08/16/2002 method for generating RTI information
  190024             :       /*! \brief return C++ Runtime-Time-Information */
  190025             :           virtual RTIReturnType roseRTI() override;
  190026             : #endif
  190027             :       /* */
  190028             : 
  190029             : 
  190030             : 
  190031             :       /* name Deprecated Functions
  190032             :           \brief Deprecated functions ... incomplete-documentation
  190033             : 
  190034             :           These functions have been deprecated from use.
  190035             :        */
  190036             :       /* */
  190037             : 
  190038             :       /*! returns a C style string (char*) representing the class name */
  190039             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  190040             : 
  190041             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  190042             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  190043             : #if 0
  190044             :       /*! returns old style Sage II enum values */
  190045             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  190046             :       /*! returns old style Sage II enum values */
  190047             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  190048             : #endif
  190049             :       /* */
  190050             : 
  190051             : 
  190052             : 
  190053             : 
  190054             :      public:
  190055             :       /* name Traversal Support Functions
  190056             :           \brief Traversal support functions ... incomplete-documentation
  190057             : 
  190058             :           These functions have been made public as part of the design, but they are suggested for internal use 
  190059             :           or by particularly knowledgable users for specialized tools or applications.
  190060             :        */
  190061             :       /* */
  190062             : 
  190063             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  190064             :        // (inferior to ROSE traversal mechanism, experimental).
  190065             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  190066             :        */
  190067             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  190068             : 
  190069             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  190070             :       /*! \brief support for the classic visitor pattern done in GoF */
  190071             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  190072             : 
  190073             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  190074             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  190075             :        */
  190076             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  190077             : 
  190078             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  190079             :        */
  190080             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  190081             : 
  190082             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  190083             :        // This traversal helps support internal tools that call static member functions.
  190084             :        // note: this function operates on the memory pools.
  190085             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  190086             :        */
  190087             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  190088             :       /* */
  190089             : 
  190090             : 
  190091             :      public:
  190092             :       /* name Memory Allocation Functions
  190093             :           \brief Memory allocations functions ... incomplete-documentation
  190094             : 
  190095             :           These functions have been made public as part of the design, but they are suggested for internal use 
  190096             :           or by particularly knowledgable users for specialized tools or applications.
  190097             :        */
  190098             :       /* */
  190099             : 
  190100             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  190101             : 
  190102             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  190103             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  190104             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  190105             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  190106             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  190107             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  190108             :           being used with the AST File I/O mechanism.
  190109             :        */
  190110             :           virtual bool isInMemoryPool() override;
  190111             : 
  190112             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  190113             : 
  190114             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  190115             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  190116             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  190117             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  190118             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  190119             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  190120             :           being used with the AST File I/O mechanism.
  190121             :        */
  190122             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  190123             : 
  190124             :       // DQ (4/30/2006): Modified to be a const function.
  190125             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  190126             : 
  190127             :           This functions is part of general support for many possible tools to operate 
  190128             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  190129             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  190130             :           less than the set of pointers used by the AST file I/O. This is part of
  190131             :           work implemented by Andreas, and support tools such as the AST graph generation.
  190132             : 
  190133             :           \warning This function can return unexpected data members and thus the 
  190134             :                    order and the number of elements is unpredicable and subject 
  190135             :                    to change.
  190136             : 
  190137             :           \returns STL vector of pairs of SgNode* and strings
  190138             :        */
  190139             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  190140             : 
  190141             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  190142             : 
  190143             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  190144             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  190145             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  190146             : 
  190147             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  190148             :                    and subject to change.
  190149             :        */
  190150             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  190151             : 
  190152             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  190153             : 
  190154             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  190155             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  190156             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  190157             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  190158             : 
  190159             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  190160             : 
  190161             :           \returns long
  190162             :        */
  190163             :           virtual long getChildIndex( SgNode* childNode ) const override;
  190164             : 
  190165             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  190166             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  190167             :       /* \brief Constructor for use by AST File I/O Mechanism
  190168             : 
  190169             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  190170             :           which obtained via fast binary file I/O from disk.
  190171             :        */
  190172             :        // SgAssignStatement( SgAssignStatementStorageClass& source );
  190173             : 
  190174             : 
  190175             : 
  190176             : 
  190177             : 
  190178             :  // JH (10/24/2005): methods added to support the ast file IO
  190179             :     private:
  190180             : 
  190181             :       /* name AST Memory Allocation Support Functions
  190182             :           \brief Memory allocations support....
  190183             : 
  190184             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  190185             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  190186             :           and support the AST File I/O Mechanism.
  190187             :        */
  190188             :       /* */
  190189             : 
  190190             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  190191             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  190192             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  190193             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  190194             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  190195             :           a correspinding one in the AST_FILE_IO class!
  190196             :        */
  190197             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  190198             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  190199             :       /* \brief Typedef used for low level memory access.
  190200             :        */
  190201             :        // typedef unsigned char* TestType;
  190202             : 
  190203             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  190204             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  190205             :       /* \brief Typedef used to hold memory addresses as values.
  190206             :        */
  190207             :        // typedef unsigned long  AddressType;
  190208             : 
  190209             : 
  190210             : 
  190211             :        // necessary, to have direct access to the p_freepointer and the private methods !
  190212             :       /*! \brief friend class declaration to support AST File I/O */
  190213             :           friend class AST_FILE_IO;
  190214             : 
  190215             :       /*! \brief friend class declaration to support AST File I/O */
  190216             :           friend class SgAssignStatementStorageClass;
  190217             : 
  190218             :       /*! \brief friend class declaration to support AST File I/O */
  190219             :           friend class AstSpecificDataManagingClass;
  190220             : 
  190221             :       /*! \brief friend class declaration to support AST File I/O */
  190222             :           friend class AstSpecificDataManagingClassStorageClass;
  190223             :     public:
  190224             :       /*! \brief IR node constructor to support AST File I/O */
  190225             :           SgAssignStatement( const SgAssignStatementStorageClass& source );
  190226             : 
  190227             :  // private: // JJW hack
  190228             :        /*
  190229             :           name AST Memory Allocation Support Variables
  190230             :           Memory allocations support variables 
  190231             : 
  190232             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  190233             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  190234             :           and support the AST File I/O Mechanism.
  190235             :        */
  190236             :       /* */
  190237             : 
  190238             :     public:
  190239             : 
  190240             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  190241             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  190242             :       // virtual SgNode* addRegExpAttribute();
  190243             :       /*! \brief Support for AST matching using regular expression.
  190244             : 
  190245             :           This support is incomplete and the subject of current research to define 
  190246             :           RegEx trees to support inexact matching.
  190247             :        */
  190248             :           SgAssignStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  190249             : 
  190250             : // *** COMMON CODE SECTION ENDS HERE ***
  190251             : 
  190252             : 
  190253             : // End of memberFunctionString
  190254             : // Start of memberFunctionString
  190255             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  190256             : 
  190257             :      // the generated cast function
  190258             :      // friend ROSE_DLL_API SgAssignStatement* isSgAssignStatement ( SgNode* s );
  190259             : 
  190260             :           typedef SgStatement base_node_type;
  190261             : 
  190262             : 
  190263             : // End of memberFunctionString
  190264             : // Start of memberFunctionString
  190265             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  190266             : 
  190267             :           void post_construction_initialization() override;
  190268             : 
  190269             : 
  190270             : // End of memberFunctionString
  190271             : 
  190272             :      public: 
  190273             :          SgLabelRefExp* get_label() const;
  190274             :          void set_label(SgLabelRefExp* label);
  190275             : 
  190276             :      public: 
  190277             :          SgExpression* get_value() const;
  190278             :          void set_value(SgExpression* value);
  190279             : 
  190280             : 
  190281             :      public: 
  190282             :          virtual ~SgAssignStatement();
  190283             : 
  190284             : 
  190285             :      public: 
  190286             :          SgAssignStatement(Sg_File_Info* startOfConstruct , SgLabelRefExp* label = NULL, SgExpression* value = NULL); 
  190287             :          SgAssignStatement(SgLabelRefExp* label, SgExpression* value); 
  190288             : 
  190289             :     protected:
  190290             : // Start of memberFunctionString
  190291             : SgLabelRefExp* p_label;
  190292             :           
  190293             : // End of memberFunctionString
  190294             : // Start of memberFunctionString
  190295             : SgExpression* p_value;
  190296             :           
  190297             : // End of memberFunctionString
  190298             : 
  190299             :     friend struct Rose::Traits::generated::describe_node_t<SgAssignStatement>;
  190300             :     friend struct Rose::Traits::generated::describe_field_t<SgAssignStatement, SgLabelRefExp*,&SgAssignStatement::p_label>;
  190301             :     friend struct Rose::Traits::generated::describe_field_t<SgAssignStatement, SgExpression*,&SgAssignStatement::p_value>;
  190302             : 
  190303             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190304             : 
  190305             : 
  190306             :    };
  190307             : #endif
  190308             : 
  190309             : // postdeclarations for SgAssignStatement
  190310             : 
  190311             : /* #line 190312 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190312             : 
  190313             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  190314             : 
  190315             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190316             : 
  190317             : 
  190318             : /* #line 190319 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190319             : 
  190320             : 
  190321             : 
  190322             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190323             : 
  190324             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  190325             : //      This code is automatically generated for each 
  190326             : //      terminal and non-terminal within the defined 
  190327             : //      grammar.  There is a simple way to change the 
  190328             : //      code to fix bugs etc.  See the ROSE README file
  190329             : //      for directions.
  190330             : 
  190331             : // tps: (02/22/2010): Adding DLL export requirements
  190332             : #include "rosedll.h"
  190333             : 
  190334             : // predeclarations for SgComputedGotoStatement
  190335             : 
  190336             : /* #line 190337 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190337             : 
  190338             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  190339             : 
  190340             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190341             : 
  190342             : #if 1
  190343             : // Class Definition for SgComputedGotoStatement
  190344             : class ROSE_DLL_API SgComputedGotoStatement  : public SgStatement
  190345             :    {
  190346             :      public:
  190347             : 
  190348             : 
  190349             : /* #line 190350 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190350             : 
  190351             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  190352             : // Start of memberFunctionString
  190353             : /* #line 3767 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  190354             : 
  190355             : 
  190356             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  190357             :           virtual unsigned int cfgIndexForEnd() const override;
  190358             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  190359             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  190360             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  190361             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  190362             : #endif
  190363             : 
  190364             : #if 0
  190365             :        // DQ (12/30/2007): This list is no longer requires since we ave build the IR node for a SgLabelRefExp
  190366             :        // and we can hold this information using an more common ExprListExp instead.
  190367             :           const SgLabelSymbolPtrList & get_labelList() const;
  190368             :           SgLabelSymbolPtrList & get_labelList();
  190369             :           void set_labelList(const SgLabelSymbolPtrList & labelList);
  190370             : #endif
  190371             : 
  190372             : 
  190373             : 
  190374             : // End of memberFunctionString
  190375             : // Start of memberFunctionString
  190376             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  190377             : 
  190378             : // *** COMMON CODE SECTION BEGINS HERE ***
  190379             : 
  190380             :     public:
  190381             : 
  190382             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  190383             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  190384             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  190385             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  190386             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  190387             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  190388             : 
  190389             :       /*! \brief returns a string representing the class name */
  190390             :           virtual std::string class_name() const override;
  190391             : 
  190392             :       /*! \brief returns new style SageIII enum values */
  190393             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  190394             : 
  190395             :       /*! \brief static variant value */
  190396             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  190397             :        // static const VariantT static_variant = V_SgComputedGotoStatement;
  190398             :           enum { static_variant = V_SgComputedGotoStatement };
  190399             : 
  190400             :        /* the generated cast function */
  190401             :       /*! \brief Casts pointer from base class to derived class */
  190402             :           ROSE_DLL_API friend       SgComputedGotoStatement* isSgComputedGotoStatement(       SgNode * s );
  190403             : 
  190404             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  190405             :           ROSE_DLL_API friend const SgComputedGotoStatement* isSgComputedGotoStatement( const SgNode * s );
  190406             : 
  190407             :      // ******************************************
  190408             :      // * Memory Pool / New / Delete
  190409             :      // ******************************************
  190410             : 
  190411             :      public:
  190412             :           /// \private
  190413             :           static const unsigned pool_size; //
  190414             :           /// \private
  190415             :           static std::vector<unsigned char *> pools; //
  190416             :           /// \private
  190417             :           static SgComputedGotoStatement * next_node; // 
  190418             : 
  190419             :           /// \private
  190420             :           static unsigned long initializeStorageClassArray(SgComputedGotoStatementStorageClass *); //
  190421             : 
  190422             :           /// \private
  190423             :           static void clearMemoryPool(); //
  190424             :           static void deleteMemoryPool(); //
  190425             : 
  190426             :           /// \private
  190427             :           static void extendMemoryPoolForFileIO(); //
  190428             : 
  190429             :           /// \private
  190430             :           static SgComputedGotoStatement * getPointerFromGlobalIndex(unsigned long); //
  190431             :           /// \private
  190432             :           static SgComputedGotoStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  190433             : 
  190434             :           /// \private
  190435             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  190436             :           /// \private
  190437             :           static void resetValidFreepointers(); //
  190438             :           /// \private
  190439             :           static unsigned long getNumberOfLastValidPointer(); //
  190440             : 
  190441             : 
  190442             : #if defined(INLINE_FUNCTIONS)
  190443             :       /*! \brief returns pointer to newly allocated IR node */
  190444             :           inline void *operator new (size_t size);
  190445             : #else
  190446             :       /*! \brief returns pointer to newly allocated IR node */
  190447             :           void *operator new (size_t size);
  190448             : #endif
  190449             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  190450             :           void operator delete (void* pointer, size_t size);
  190451             : 
  190452             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  190453           0 :           void operator delete (void* pointer)
  190454             :              {
  190455             :             // This is the generated delete operator...
  190456           0 :                SgComputedGotoStatement::operator delete (pointer,sizeof(SgComputedGotoStatement));
  190457             :              }
  190458             : 
  190459             :       /*! \brief Returns the total number of IR nodes of this type */
  190460             :           static size_t numberOfNodes();
  190461             : 
  190462             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  190463             :           static size_t memoryUsage();
  190464             : 
  190465             :       // End of scope which started in IR nodes specific code 
  190466             :       /* */
  190467             : 
  190468             :       /* name Internal Functions
  190469             :           \brief Internal functions ... incomplete-documentation
  190470             : 
  190471             :           These functions have been made public as part of the design, but they are suggested for internal use 
  190472             :           or by particularly knowledgeable users for specialized tools or applications.
  190473             : 
  190474             :           \internal We could not make these private because they are required by user for special purposes. And 
  190475             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  190476             :          
  190477             :        */
  190478             : 
  190479             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  190480             :        // overridden in every class by *generated* implementation
  190481             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  190482             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  190483             :        // MS: 06/28/02 container of names of variables or container indices 
  190484             :        // used used in the traversal to access AST successor nodes
  190485             :        // overridden in every class by *generated* implementation
  190486             :       /*! \brief container of names of variables or container indices used used in the traversal
  190487             :           to access AST successor nodes overridden in every class by *generated* implementation */
  190488             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  190489             : 
  190490             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  190491             :        // than all the vector copies. The implementation for these functions is generated for each class.
  190492             :       /*! \brief return number of children in the traversal successor list */
  190493             :           virtual size_t get_numberOfTraversalSuccessors() override;
  190494             :       /*! \brief index-based access to traversal successors by index number */
  190495             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  190496             :       /*! \brief index-based access to traversal successors by child node */
  190497             :           virtual size_t get_childIndex(SgNode *child) override;
  190498             : 
  190499             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  190500             :        // MS: 08/16/2002 method for generating RTI information
  190501             :       /*! \brief return C++ Runtime-Time-Information */
  190502             :           virtual RTIReturnType roseRTI() override;
  190503             : #endif
  190504             :       /* */
  190505             : 
  190506             : 
  190507             : 
  190508             :       /* name Deprecated Functions
  190509             :           \brief Deprecated functions ... incomplete-documentation
  190510             : 
  190511             :           These functions have been deprecated from use.
  190512             :        */
  190513             :       /* */
  190514             : 
  190515             :       /*! returns a C style string (char*) representing the class name */
  190516             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  190517             : 
  190518             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  190519             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  190520             : #if 0
  190521             :       /*! returns old style Sage II enum values */
  190522             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  190523             :       /*! returns old style Sage II enum values */
  190524             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  190525             : #endif
  190526             :       /* */
  190527             : 
  190528             : 
  190529             : 
  190530             : 
  190531             :      public:
  190532             :       /* name Traversal Support Functions
  190533             :           \brief Traversal support functions ... incomplete-documentation
  190534             : 
  190535             :           These functions have been made public as part of the design, but they are suggested for internal use 
  190536             :           or by particularly knowledgable users for specialized tools or applications.
  190537             :        */
  190538             :       /* */
  190539             : 
  190540             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  190541             :        // (inferior to ROSE traversal mechanism, experimental).
  190542             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  190543             :        */
  190544             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  190545             : 
  190546             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  190547             :       /*! \brief support for the classic visitor pattern done in GoF */
  190548             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  190549             : 
  190550             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  190551             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  190552             :        */
  190553             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  190554             : 
  190555             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  190556             :        */
  190557             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  190558             : 
  190559             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  190560             :        // This traversal helps support internal tools that call static member functions.
  190561             :        // note: this function operates on the memory pools.
  190562             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  190563             :        */
  190564             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  190565             :       /* */
  190566             : 
  190567             : 
  190568             :      public:
  190569             :       /* name Memory Allocation Functions
  190570             :           \brief Memory allocations functions ... incomplete-documentation
  190571             : 
  190572             :           These functions have been made public as part of the design, but they are suggested for internal use 
  190573             :           or by particularly knowledgable users for specialized tools or applications.
  190574             :        */
  190575             :       /* */
  190576             : 
  190577             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  190578             : 
  190579             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  190580             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  190581             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  190582             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  190583             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  190584             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  190585             :           being used with the AST File I/O mechanism.
  190586             :        */
  190587             :           virtual bool isInMemoryPool() override;
  190588             : 
  190589             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  190590             : 
  190591             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  190592             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  190593             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  190594             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  190595             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  190596             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  190597             :           being used with the AST File I/O mechanism.
  190598             :        */
  190599             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  190600             : 
  190601             :       // DQ (4/30/2006): Modified to be a const function.
  190602             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  190603             : 
  190604             :           This functions is part of general support for many possible tools to operate 
  190605             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  190606             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  190607             :           less than the set of pointers used by the AST file I/O. This is part of
  190608             :           work implemented by Andreas, and support tools such as the AST graph generation.
  190609             : 
  190610             :           \warning This function can return unexpected data members and thus the 
  190611             :                    order and the number of elements is unpredicable and subject 
  190612             :                    to change.
  190613             : 
  190614             :           \returns STL vector of pairs of SgNode* and strings
  190615             :        */
  190616             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  190617             : 
  190618             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  190619             : 
  190620             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  190621             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  190622             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  190623             : 
  190624             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  190625             :                    and subject to change.
  190626             :        */
  190627             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  190628             : 
  190629             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  190630             : 
  190631             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  190632             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  190633             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  190634             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  190635             : 
  190636             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  190637             : 
  190638             :           \returns long
  190639             :        */
  190640             :           virtual long getChildIndex( SgNode* childNode ) const override;
  190641             : 
  190642             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  190643             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  190644             :       /* \brief Constructor for use by AST File I/O Mechanism
  190645             : 
  190646             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  190647             :           which obtained via fast binary file I/O from disk.
  190648             :        */
  190649             :        // SgComputedGotoStatement( SgComputedGotoStatementStorageClass& source );
  190650             : 
  190651             : 
  190652             : 
  190653             : 
  190654             : 
  190655             :  // JH (10/24/2005): methods added to support the ast file IO
  190656             :     private:
  190657             : 
  190658             :       /* name AST Memory Allocation Support Functions
  190659             :           \brief Memory allocations support....
  190660             : 
  190661             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  190662             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  190663             :           and support the AST File I/O Mechanism.
  190664             :        */
  190665             :       /* */
  190666             : 
  190667             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  190668             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  190669             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  190670             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  190671             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  190672             :           a correspinding one in the AST_FILE_IO class!
  190673             :        */
  190674             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  190675             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  190676             :       /* \brief Typedef used for low level memory access.
  190677             :        */
  190678             :        // typedef unsigned char* TestType;
  190679             : 
  190680             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  190681             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  190682             :       /* \brief Typedef used to hold memory addresses as values.
  190683             :        */
  190684             :        // typedef unsigned long  AddressType;
  190685             : 
  190686             : 
  190687             : 
  190688             :        // necessary, to have direct access to the p_freepointer and the private methods !
  190689             :       /*! \brief friend class declaration to support AST File I/O */
  190690             :           friend class AST_FILE_IO;
  190691             : 
  190692             :       /*! \brief friend class declaration to support AST File I/O */
  190693             :           friend class SgComputedGotoStatementStorageClass;
  190694             : 
  190695             :       /*! \brief friend class declaration to support AST File I/O */
  190696             :           friend class AstSpecificDataManagingClass;
  190697             : 
  190698             :       /*! \brief friend class declaration to support AST File I/O */
  190699             :           friend class AstSpecificDataManagingClassStorageClass;
  190700             :     public:
  190701             :       /*! \brief IR node constructor to support AST File I/O */
  190702             :           SgComputedGotoStatement( const SgComputedGotoStatementStorageClass& source );
  190703             : 
  190704             :  // private: // JJW hack
  190705             :        /*
  190706             :           name AST Memory Allocation Support Variables
  190707             :           Memory allocations support variables 
  190708             : 
  190709             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  190710             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  190711             :           and support the AST File I/O Mechanism.
  190712             :        */
  190713             :       /* */
  190714             : 
  190715             :     public:
  190716             : 
  190717             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  190718             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  190719             :       // virtual SgNode* addRegExpAttribute();
  190720             :       /*! \brief Support for AST matching using regular expression.
  190721             : 
  190722             :           This support is incomplete and the subject of current research to define 
  190723             :           RegEx trees to support inexact matching.
  190724             :        */
  190725             :           SgComputedGotoStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  190726             : 
  190727             : // *** COMMON CODE SECTION ENDS HERE ***
  190728             : 
  190729             : 
  190730             : // End of memberFunctionString
  190731             : // Start of memberFunctionString
  190732             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  190733             : 
  190734             :      // the generated cast function
  190735             :      // friend ROSE_DLL_API SgComputedGotoStatement* isSgComputedGotoStatement ( SgNode* s );
  190736             : 
  190737             :           typedef SgStatement base_node_type;
  190738             : 
  190739             : 
  190740             : // End of memberFunctionString
  190741             : // Start of memberFunctionString
  190742             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  190743             : 
  190744             :           void post_construction_initialization() override;
  190745             : 
  190746             : 
  190747             : // End of memberFunctionString
  190748             : 
  190749             :      public: 
  190750             :          SgExprListExp* get_labelList() const;
  190751             :          void set_labelList(SgExprListExp* labelList);
  190752             : 
  190753             :      public: 
  190754             :          SgExpression* get_label_index() const;
  190755             :          void set_label_index(SgExpression* label_index);
  190756             : 
  190757             : 
  190758             :      public: 
  190759             :          virtual ~SgComputedGotoStatement();
  190760             : 
  190761             : 
  190762             :      public: 
  190763             :          SgComputedGotoStatement(Sg_File_Info* startOfConstruct , SgExprListExp* labelList = NULL, SgExpression* label_index = NULL); 
  190764             :          SgComputedGotoStatement(SgExprListExp* labelList, SgExpression* label_index); 
  190765             : 
  190766             :     protected:
  190767             : // Start of memberFunctionString
  190768             : SgExprListExp* p_labelList;
  190769             :           
  190770             : // End of memberFunctionString
  190771             : // Start of memberFunctionString
  190772             : SgExpression* p_label_index;
  190773             :           
  190774             : // End of memberFunctionString
  190775             : 
  190776             :     friend struct Rose::Traits::generated::describe_node_t<SgComputedGotoStatement>;
  190777             :     friend struct Rose::Traits::generated::describe_field_t<SgComputedGotoStatement, SgExprListExp*,&SgComputedGotoStatement::p_labelList>;
  190778             :     friend struct Rose::Traits::generated::describe_field_t<SgComputedGotoStatement, SgExpression*,&SgComputedGotoStatement::p_label_index>;
  190779             : 
  190780             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190781             : 
  190782             : 
  190783             :    };
  190784             : #endif
  190785             : 
  190786             : // postdeclarations for SgComputedGotoStatement
  190787             : 
  190788             : /* #line 190789 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190789             : 
  190790             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  190791             : 
  190792             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190793             : 
  190794             : 
  190795             : /* #line 190796 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190796             : 
  190797             : 
  190798             : 
  190799             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190800             : 
  190801             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  190802             : //      This code is automatically generated for each 
  190803             : //      terminal and non-terminal within the defined 
  190804             : //      grammar.  There is a simple way to change the 
  190805             : //      code to fix bugs etc.  See the ROSE README file
  190806             : //      for directions.
  190807             : 
  190808             : // tps: (02/22/2010): Adding DLL export requirements
  190809             : #include "rosedll.h"
  190810             : 
  190811             : // predeclarations for SgAssignedGotoStatement
  190812             : 
  190813             : /* #line 190814 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190814             : 
  190815             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  190816             : 
  190817             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  190818             : 
  190819             : #if 1
  190820             : // Class Definition for SgAssignedGotoStatement
  190821             : class ROSE_DLL_API SgAssignedGotoStatement  : public SgStatement
  190822             :    {
  190823             :      public:
  190824             : 
  190825             : 
  190826             : /* #line 190827 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  190827             : 
  190828             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  190829             : // Start of memberFunctionString
  190830             : /* #line 3788 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  190831             : 
  190832             : 
  190833             : 
  190834             : // End of memberFunctionString
  190835             : // Start of memberFunctionString
  190836             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  190837             : 
  190838             : // *** COMMON CODE SECTION BEGINS HERE ***
  190839             : 
  190840             :     public:
  190841             : 
  190842             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  190843             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  190844             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  190845             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  190846             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  190847             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  190848             : 
  190849             :       /*! \brief returns a string representing the class name */
  190850             :           virtual std::string class_name() const override;
  190851             : 
  190852             :       /*! \brief returns new style SageIII enum values */
  190853             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  190854             : 
  190855             :       /*! \brief static variant value */
  190856             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  190857             :        // static const VariantT static_variant = V_SgAssignedGotoStatement;
  190858             :           enum { static_variant = V_SgAssignedGotoStatement };
  190859             : 
  190860             :        /* the generated cast function */
  190861             :       /*! \brief Casts pointer from base class to derived class */
  190862             :           ROSE_DLL_API friend       SgAssignedGotoStatement* isSgAssignedGotoStatement(       SgNode * s );
  190863             : 
  190864             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  190865             :           ROSE_DLL_API friend const SgAssignedGotoStatement* isSgAssignedGotoStatement( const SgNode * s );
  190866             : 
  190867             :      // ******************************************
  190868             :      // * Memory Pool / New / Delete
  190869             :      // ******************************************
  190870             : 
  190871             :      public:
  190872             :           /// \private
  190873             :           static const unsigned pool_size; //
  190874             :           /// \private
  190875             :           static std::vector<unsigned char *> pools; //
  190876             :           /// \private
  190877             :           static SgAssignedGotoStatement * next_node; // 
  190878             : 
  190879             :           /// \private
  190880             :           static unsigned long initializeStorageClassArray(SgAssignedGotoStatementStorageClass *); //
  190881             : 
  190882             :           /// \private
  190883             :           static void clearMemoryPool(); //
  190884             :           static void deleteMemoryPool(); //
  190885             : 
  190886             :           /// \private
  190887             :           static void extendMemoryPoolForFileIO(); //
  190888             : 
  190889             :           /// \private
  190890             :           static SgAssignedGotoStatement * getPointerFromGlobalIndex(unsigned long); //
  190891             :           /// \private
  190892             :           static SgAssignedGotoStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  190893             : 
  190894             :           /// \private
  190895             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  190896             :           /// \private
  190897             :           static void resetValidFreepointers(); //
  190898             :           /// \private
  190899             :           static unsigned long getNumberOfLastValidPointer(); //
  190900             : 
  190901             : 
  190902             : #if defined(INLINE_FUNCTIONS)
  190903             :       /*! \brief returns pointer to newly allocated IR node */
  190904             :           inline void *operator new (size_t size);
  190905             : #else
  190906             :       /*! \brief returns pointer to newly allocated IR node */
  190907             :           void *operator new (size_t size);
  190908             : #endif
  190909             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  190910             :           void operator delete (void* pointer, size_t size);
  190911             : 
  190912             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  190913           0 :           void operator delete (void* pointer)
  190914             :              {
  190915             :             // This is the generated delete operator...
  190916           0 :                SgAssignedGotoStatement::operator delete (pointer,sizeof(SgAssignedGotoStatement));
  190917             :              }
  190918             : 
  190919             :       /*! \brief Returns the total number of IR nodes of this type */
  190920             :           static size_t numberOfNodes();
  190921             : 
  190922             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  190923             :           static size_t memoryUsage();
  190924             : 
  190925             :       // End of scope which started in IR nodes specific code 
  190926             :       /* */
  190927             : 
  190928             :       /* name Internal Functions
  190929             :           \brief Internal functions ... incomplete-documentation
  190930             : 
  190931             :           These functions have been made public as part of the design, but they are suggested for internal use 
  190932             :           or by particularly knowledgeable users for specialized tools or applications.
  190933             : 
  190934             :           \internal We could not make these private because they are required by user for special purposes. And 
  190935             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  190936             :          
  190937             :        */
  190938             : 
  190939             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  190940             :        // overridden in every class by *generated* implementation
  190941             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  190942             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  190943             :        // MS: 06/28/02 container of names of variables or container indices 
  190944             :        // used used in the traversal to access AST successor nodes
  190945             :        // overridden in every class by *generated* implementation
  190946             :       /*! \brief container of names of variables or container indices used used in the traversal
  190947             :           to access AST successor nodes overridden in every class by *generated* implementation */
  190948             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  190949             : 
  190950             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  190951             :        // than all the vector copies. The implementation for these functions is generated for each class.
  190952             :       /*! \brief return number of children in the traversal successor list */
  190953             :           virtual size_t get_numberOfTraversalSuccessors() override;
  190954             :       /*! \brief index-based access to traversal successors by index number */
  190955             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  190956             :       /*! \brief index-based access to traversal successors by child node */
  190957             :           virtual size_t get_childIndex(SgNode *child) override;
  190958             : 
  190959             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  190960             :        // MS: 08/16/2002 method for generating RTI information
  190961             :       /*! \brief return C++ Runtime-Time-Information */
  190962             :           virtual RTIReturnType roseRTI() override;
  190963             : #endif
  190964             :       /* */
  190965             : 
  190966             : 
  190967             : 
  190968             :       /* name Deprecated Functions
  190969             :           \brief Deprecated functions ... incomplete-documentation
  190970             : 
  190971             :           These functions have been deprecated from use.
  190972             :        */
  190973             :       /* */
  190974             : 
  190975             :       /*! returns a C style string (char*) representing the class name */
  190976             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  190977             : 
  190978             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  190979             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  190980             : #if 0
  190981             :       /*! returns old style Sage II enum values */
  190982             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  190983             :       /*! returns old style Sage II enum values */
  190984             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  190985             : #endif
  190986             :       /* */
  190987             : 
  190988             : 
  190989             : 
  190990             : 
  190991             :      public:
  190992             :       /* name Traversal Support Functions
  190993             :           \brief Traversal support functions ... incomplete-documentation
  190994             : 
  190995             :           These functions have been made public as part of the design, but they are suggested for internal use 
  190996             :           or by particularly knowledgable users for specialized tools or applications.
  190997             :        */
  190998             :       /* */
  190999             : 
  191000             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  191001             :        // (inferior to ROSE traversal mechanism, experimental).
  191002             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  191003             :        */
  191004             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  191005             : 
  191006             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  191007             :       /*! \brief support for the classic visitor pattern done in GoF */
  191008             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  191009             : 
  191010             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  191011             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  191012             :        */
  191013             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  191014             : 
  191015             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  191016             :        */
  191017             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  191018             : 
  191019             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  191020             :        // This traversal helps support internal tools that call static member functions.
  191021             :        // note: this function operates on the memory pools.
  191022             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  191023             :        */
  191024             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  191025             :       /* */
  191026             : 
  191027             : 
  191028             :      public:
  191029             :       /* name Memory Allocation Functions
  191030             :           \brief Memory allocations functions ... incomplete-documentation
  191031             : 
  191032             :           These functions have been made public as part of the design, but they are suggested for internal use 
  191033             :           or by particularly knowledgable users for specialized tools or applications.
  191034             :        */
  191035             :       /* */
  191036             : 
  191037             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  191038             : 
  191039             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  191040             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  191041             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  191042             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  191043             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  191044             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  191045             :           being used with the AST File I/O mechanism.
  191046             :        */
  191047             :           virtual bool isInMemoryPool() override;
  191048             : 
  191049             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  191050             : 
  191051             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  191052             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  191053             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  191054             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  191055             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  191056             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  191057             :           being used with the AST File I/O mechanism.
  191058             :        */
  191059             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  191060             : 
  191061             :       // DQ (4/30/2006): Modified to be a const function.
  191062             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  191063             : 
  191064             :           This functions is part of general support for many possible tools to operate 
  191065             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  191066             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  191067             :           less than the set of pointers used by the AST file I/O. This is part of
  191068             :           work implemented by Andreas, and support tools such as the AST graph generation.
  191069             : 
  191070             :           \warning This function can return unexpected data members and thus the 
  191071             :                    order and the number of elements is unpredicable and subject 
  191072             :                    to change.
  191073             : 
  191074             :           \returns STL vector of pairs of SgNode* and strings
  191075             :        */
  191076             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  191077             : 
  191078             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  191079             : 
  191080             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  191081             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  191082             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  191083             : 
  191084             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  191085             :                    and subject to change.
  191086             :        */
  191087             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  191088             : 
  191089             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  191090             : 
  191091             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  191092             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  191093             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  191094             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  191095             : 
  191096             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  191097             : 
  191098             :           \returns long
  191099             :        */
  191100             :           virtual long getChildIndex( SgNode* childNode ) const override;
  191101             : 
  191102             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  191103             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  191104             :       /* \brief Constructor for use by AST File I/O Mechanism
  191105             : 
  191106             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  191107             :           which obtained via fast binary file I/O from disk.
  191108             :        */
  191109             :        // SgAssignedGotoStatement( SgAssignedGotoStatementStorageClass& source );
  191110             : 
  191111             : 
  191112             : 
  191113             : 
  191114             : 
  191115             :  // JH (10/24/2005): methods added to support the ast file IO
  191116             :     private:
  191117             : 
  191118             :       /* name AST Memory Allocation Support Functions
  191119             :           \brief Memory allocations support....
  191120             : 
  191121             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  191122             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  191123             :           and support the AST File I/O Mechanism.
  191124             :        */
  191125             :       /* */
  191126             : 
  191127             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  191128             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  191129             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  191130             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  191131             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  191132             :           a correspinding one in the AST_FILE_IO class!
  191133             :        */
  191134             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  191135             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  191136             :       /* \brief Typedef used for low level memory access.
  191137             :        */
  191138             :        // typedef unsigned char* TestType;
  191139             : 
  191140             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  191141             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  191142             :       /* \brief Typedef used to hold memory addresses as values.
  191143             :        */
  191144             :        // typedef unsigned long  AddressType;
  191145             : 
  191146             : 
  191147             : 
  191148             :        // necessary, to have direct access to the p_freepointer and the private methods !
  191149             :       /*! \brief friend class declaration to support AST File I/O */
  191150             :           friend class AST_FILE_IO;
  191151             : 
  191152             :       /*! \brief friend class declaration to support AST File I/O */
  191153             :           friend class SgAssignedGotoStatementStorageClass;
  191154             : 
  191155             :       /*! \brief friend class declaration to support AST File I/O */
  191156             :           friend class AstSpecificDataManagingClass;
  191157             : 
  191158             :       /*! \brief friend class declaration to support AST File I/O */
  191159             :           friend class AstSpecificDataManagingClassStorageClass;
  191160             :     public:
  191161             :       /*! \brief IR node constructor to support AST File I/O */
  191162             :           SgAssignedGotoStatement( const SgAssignedGotoStatementStorageClass& source );
  191163             : 
  191164             :  // private: // JJW hack
  191165             :        /*
  191166             :           name AST Memory Allocation Support Variables
  191167             :           Memory allocations support variables 
  191168             : 
  191169             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  191170             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  191171             :           and support the AST File I/O Mechanism.
  191172             :        */
  191173             :       /* */
  191174             : 
  191175             :     public:
  191176             : 
  191177             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  191178             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  191179             :       // virtual SgNode* addRegExpAttribute();
  191180             :       /*! \brief Support for AST matching using regular expression.
  191181             : 
  191182             :           This support is incomplete and the subject of current research to define 
  191183             :           RegEx trees to support inexact matching.
  191184             :        */
  191185             :           SgAssignedGotoStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  191186             : 
  191187             : // *** COMMON CODE SECTION ENDS HERE ***
  191188             : 
  191189             : 
  191190             : // End of memberFunctionString
  191191             : // Start of memberFunctionString
  191192             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  191193             : 
  191194             :      // the generated cast function
  191195             :      // friend ROSE_DLL_API SgAssignedGotoStatement* isSgAssignedGotoStatement ( SgNode* s );
  191196             : 
  191197             :           typedef SgStatement base_node_type;
  191198             : 
  191199             : 
  191200             : // End of memberFunctionString
  191201             : // Start of memberFunctionString
  191202             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  191203             : 
  191204             :           void post_construction_initialization() override;
  191205             : 
  191206             : 
  191207             : // End of memberFunctionString
  191208             : 
  191209             :      public: 
  191210             :          SgExprListExp* get_targets() const;
  191211             :          void set_targets(SgExprListExp* targets);
  191212             : 
  191213             : 
  191214             :      public: 
  191215             :          virtual ~SgAssignedGotoStatement();
  191216             : 
  191217             : 
  191218             :      public: 
  191219             :          SgAssignedGotoStatement(Sg_File_Info* startOfConstruct , SgExprListExp* targets = NULL); 
  191220             :          SgAssignedGotoStatement(SgExprListExp* targets); 
  191221             : 
  191222             :     protected:
  191223             : // Start of memberFunctionString
  191224             : SgExprListExp* p_targets;
  191225             :           
  191226             : // End of memberFunctionString
  191227             : 
  191228             :     friend struct Rose::Traits::generated::describe_node_t<SgAssignedGotoStatement>;
  191229             :     friend struct Rose::Traits::generated::describe_field_t<SgAssignedGotoStatement, SgExprListExp*,&SgAssignedGotoStatement::p_targets>;
  191230             : 
  191231             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191232             : 
  191233             : 
  191234             :    };
  191235             : #endif
  191236             : 
  191237             : // postdeclarations for SgAssignedGotoStatement
  191238             : 
  191239             : /* #line 191240 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191240             : 
  191241             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  191242             : 
  191243             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191244             : 
  191245             : 
  191246             : /* #line 191247 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191247             : 
  191248             : 
  191249             : 
  191250             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191251             : 
  191252             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  191253             : //      This code is automatically generated for each 
  191254             : //      terminal and non-terminal within the defined 
  191255             : //      grammar.  There is a simple way to change the 
  191256             : //      code to fix bugs etc.  See the ROSE README file
  191257             : //      for directions.
  191258             : 
  191259             : // tps: (02/22/2010): Adding DLL export requirements
  191260             : #include "rosedll.h"
  191261             : 
  191262             : // predeclarations for SgAllocateStatement
  191263             : 
  191264             : /* #line 191265 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191265             : 
  191266             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  191267             : 
  191268             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191269             : 
  191270             : #if 1
  191271             : // Class Definition for SgAllocateStatement
  191272             : class ROSE_DLL_API SgAllocateStatement  : public SgStatement
  191273             :    {
  191274             :      public:
  191275             : 
  191276             : 
  191277             : /* #line 191278 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191278             : 
  191279             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  191280             : // Start of memberFunctionString
  191281             : /* #line 3737 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  191282             : 
  191283             : 
  191284             : 
  191285             : // End of memberFunctionString
  191286             : // Start of memberFunctionString
  191287             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  191288             : 
  191289             : // *** COMMON CODE SECTION BEGINS HERE ***
  191290             : 
  191291             :     public:
  191292             : 
  191293             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  191294             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  191295             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  191296             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  191297             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  191298             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  191299             : 
  191300             :       /*! \brief returns a string representing the class name */
  191301             :           virtual std::string class_name() const override;
  191302             : 
  191303             :       /*! \brief returns new style SageIII enum values */
  191304             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  191305             : 
  191306             :       /*! \brief static variant value */
  191307             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  191308             :        // static const VariantT static_variant = V_SgAllocateStatement;
  191309             :           enum { static_variant = V_SgAllocateStatement };
  191310             : 
  191311             :        /* the generated cast function */
  191312             :       /*! \brief Casts pointer from base class to derived class */
  191313             :           ROSE_DLL_API friend       SgAllocateStatement* isSgAllocateStatement(       SgNode * s );
  191314             : 
  191315             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  191316             :           ROSE_DLL_API friend const SgAllocateStatement* isSgAllocateStatement( const SgNode * s );
  191317             : 
  191318             :      // ******************************************
  191319             :      // * Memory Pool / New / Delete
  191320             :      // ******************************************
  191321             : 
  191322             :      public:
  191323             :           /// \private
  191324             :           static const unsigned pool_size; //
  191325             :           /// \private
  191326             :           static std::vector<unsigned char *> pools; //
  191327             :           /// \private
  191328             :           static SgAllocateStatement * next_node; // 
  191329             : 
  191330             :           /// \private
  191331             :           static unsigned long initializeStorageClassArray(SgAllocateStatementStorageClass *); //
  191332             : 
  191333             :           /// \private
  191334             :           static void clearMemoryPool(); //
  191335             :           static void deleteMemoryPool(); //
  191336             : 
  191337             :           /// \private
  191338             :           static void extendMemoryPoolForFileIO(); //
  191339             : 
  191340             :           /// \private
  191341             :           static SgAllocateStatement * getPointerFromGlobalIndex(unsigned long); //
  191342             :           /// \private
  191343             :           static SgAllocateStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  191344             : 
  191345             :           /// \private
  191346             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  191347             :           /// \private
  191348             :           static void resetValidFreepointers(); //
  191349             :           /// \private
  191350             :           static unsigned long getNumberOfLastValidPointer(); //
  191351             : 
  191352             : 
  191353             : #if defined(INLINE_FUNCTIONS)
  191354             :       /*! \brief returns pointer to newly allocated IR node */
  191355             :           inline void *operator new (size_t size);
  191356             : #else
  191357             :       /*! \brief returns pointer to newly allocated IR node */
  191358             :           void *operator new (size_t size);
  191359             : #endif
  191360             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  191361             :           void operator delete (void* pointer, size_t size);
  191362             : 
  191363             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  191364           0 :           void operator delete (void* pointer)
  191365             :              {
  191366             :             // This is the generated delete operator...
  191367           0 :                SgAllocateStatement::operator delete (pointer,sizeof(SgAllocateStatement));
  191368             :              }
  191369             : 
  191370             :       /*! \brief Returns the total number of IR nodes of this type */
  191371             :           static size_t numberOfNodes();
  191372             : 
  191373             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  191374             :           static size_t memoryUsage();
  191375             : 
  191376             :       // End of scope which started in IR nodes specific code 
  191377             :       /* */
  191378             : 
  191379             :       /* name Internal Functions
  191380             :           \brief Internal functions ... incomplete-documentation
  191381             : 
  191382             :           These functions have been made public as part of the design, but they are suggested for internal use 
  191383             :           or by particularly knowledgeable users for specialized tools or applications.
  191384             : 
  191385             :           \internal We could not make these private because they are required by user for special purposes. And 
  191386             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  191387             :          
  191388             :        */
  191389             : 
  191390             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  191391             :        // overridden in every class by *generated* implementation
  191392             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  191393             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  191394             :        // MS: 06/28/02 container of names of variables or container indices 
  191395             :        // used used in the traversal to access AST successor nodes
  191396             :        // overridden in every class by *generated* implementation
  191397             :       /*! \brief container of names of variables or container indices used used in the traversal
  191398             :           to access AST successor nodes overridden in every class by *generated* implementation */
  191399             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  191400             : 
  191401             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  191402             :        // than all the vector copies. The implementation for these functions is generated for each class.
  191403             :       /*! \brief return number of children in the traversal successor list */
  191404             :           virtual size_t get_numberOfTraversalSuccessors() override;
  191405             :       /*! \brief index-based access to traversal successors by index number */
  191406             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  191407             :       /*! \brief index-based access to traversal successors by child node */
  191408             :           virtual size_t get_childIndex(SgNode *child) override;
  191409             : 
  191410             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  191411             :        // MS: 08/16/2002 method for generating RTI information
  191412             :       /*! \brief return C++ Runtime-Time-Information */
  191413             :           virtual RTIReturnType roseRTI() override;
  191414             : #endif
  191415             :       /* */
  191416             : 
  191417             : 
  191418             : 
  191419             :       /* name Deprecated Functions
  191420             :           \brief Deprecated functions ... incomplete-documentation
  191421             : 
  191422             :           These functions have been deprecated from use.
  191423             :        */
  191424             :       /* */
  191425             : 
  191426             :       /*! returns a C style string (char*) representing the class name */
  191427             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  191428             : 
  191429             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  191430             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  191431             : #if 0
  191432             :       /*! returns old style Sage II enum values */
  191433             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  191434             :       /*! returns old style Sage II enum values */
  191435             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  191436             : #endif
  191437             :       /* */
  191438             : 
  191439             : 
  191440             : 
  191441             : 
  191442             :      public:
  191443             :       /* name Traversal Support Functions
  191444             :           \brief Traversal support functions ... incomplete-documentation
  191445             : 
  191446             :           These functions have been made public as part of the design, but they are suggested for internal use 
  191447             :           or by particularly knowledgable users for specialized tools or applications.
  191448             :        */
  191449             :       /* */
  191450             : 
  191451             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  191452             :        // (inferior to ROSE traversal mechanism, experimental).
  191453             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  191454             :        */
  191455             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  191456             : 
  191457             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  191458             :       /*! \brief support for the classic visitor pattern done in GoF */
  191459             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  191460             : 
  191461             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  191462             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  191463             :        */
  191464             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  191465             : 
  191466             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  191467             :        */
  191468             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  191469             : 
  191470             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  191471             :        // This traversal helps support internal tools that call static member functions.
  191472             :        // note: this function operates on the memory pools.
  191473             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  191474             :        */
  191475             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  191476             :       /* */
  191477             : 
  191478             : 
  191479             :      public:
  191480             :       /* name Memory Allocation Functions
  191481             :           \brief Memory allocations functions ... incomplete-documentation
  191482             : 
  191483             :           These functions have been made public as part of the design, but they are suggested for internal use 
  191484             :           or by particularly knowledgable users for specialized tools or applications.
  191485             :        */
  191486             :       /* */
  191487             : 
  191488             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  191489             : 
  191490             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  191491             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  191492             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  191493             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  191494             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  191495             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  191496             :           being used with the AST File I/O mechanism.
  191497             :        */
  191498             :           virtual bool isInMemoryPool() override;
  191499             : 
  191500             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  191501             : 
  191502             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  191503             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  191504             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  191505             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  191506             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  191507             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  191508             :           being used with the AST File I/O mechanism.
  191509             :        */
  191510             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  191511             : 
  191512             :       // DQ (4/30/2006): Modified to be a const function.
  191513             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  191514             : 
  191515             :           This functions is part of general support for many possible tools to operate 
  191516             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  191517             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  191518             :           less than the set of pointers used by the AST file I/O. This is part of
  191519             :           work implemented by Andreas, and support tools such as the AST graph generation.
  191520             : 
  191521             :           \warning This function can return unexpected data members and thus the 
  191522             :                    order and the number of elements is unpredicable and subject 
  191523             :                    to change.
  191524             : 
  191525             :           \returns STL vector of pairs of SgNode* and strings
  191526             :        */
  191527             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  191528             : 
  191529             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  191530             : 
  191531             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  191532             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  191533             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  191534             : 
  191535             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  191536             :                    and subject to change.
  191537             :        */
  191538             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  191539             : 
  191540             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  191541             : 
  191542             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  191543             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  191544             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  191545             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  191546             : 
  191547             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  191548             : 
  191549             :           \returns long
  191550             :        */
  191551             :           virtual long getChildIndex( SgNode* childNode ) const override;
  191552             : 
  191553             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  191554             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  191555             :       /* \brief Constructor for use by AST File I/O Mechanism
  191556             : 
  191557             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  191558             :           which obtained via fast binary file I/O from disk.
  191559             :        */
  191560             :        // SgAllocateStatement( SgAllocateStatementStorageClass& source );
  191561             : 
  191562             : 
  191563             : 
  191564             : 
  191565             : 
  191566             :  // JH (10/24/2005): methods added to support the ast file IO
  191567             :     private:
  191568             : 
  191569             :       /* name AST Memory Allocation Support Functions
  191570             :           \brief Memory allocations support....
  191571             : 
  191572             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  191573             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  191574             :           and support the AST File I/O Mechanism.
  191575             :        */
  191576             :       /* */
  191577             : 
  191578             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  191579             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  191580             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  191581             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  191582             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  191583             :           a correspinding one in the AST_FILE_IO class!
  191584             :        */
  191585             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  191586             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  191587             :       /* \brief Typedef used for low level memory access.
  191588             :        */
  191589             :        // typedef unsigned char* TestType;
  191590             : 
  191591             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  191592             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  191593             :       /* \brief Typedef used to hold memory addresses as values.
  191594             :        */
  191595             :        // typedef unsigned long  AddressType;
  191596             : 
  191597             : 
  191598             : 
  191599             :        // necessary, to have direct access to the p_freepointer and the private methods !
  191600             :       /*! \brief friend class declaration to support AST File I/O */
  191601             :           friend class AST_FILE_IO;
  191602             : 
  191603             :       /*! \brief friend class declaration to support AST File I/O */
  191604             :           friend class SgAllocateStatementStorageClass;
  191605             : 
  191606             :       /*! \brief friend class declaration to support AST File I/O */
  191607             :           friend class AstSpecificDataManagingClass;
  191608             : 
  191609             :       /*! \brief friend class declaration to support AST File I/O */
  191610             :           friend class AstSpecificDataManagingClassStorageClass;
  191611             :     public:
  191612             :       /*! \brief IR node constructor to support AST File I/O */
  191613             :           SgAllocateStatement( const SgAllocateStatementStorageClass& source );
  191614             : 
  191615             :  // private: // JJW hack
  191616             :        /*
  191617             :           name AST Memory Allocation Support Variables
  191618             :           Memory allocations support variables 
  191619             : 
  191620             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  191621             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  191622             :           and support the AST File I/O Mechanism.
  191623             :        */
  191624             :       /* */
  191625             : 
  191626             :     public:
  191627             : 
  191628             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  191629             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  191630             :       // virtual SgNode* addRegExpAttribute();
  191631             :       /*! \brief Support for AST matching using regular expression.
  191632             : 
  191633             :           This support is incomplete and the subject of current research to define 
  191634             :           RegEx trees to support inexact matching.
  191635             :        */
  191636             :           SgAllocateStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  191637             : 
  191638             : // *** COMMON CODE SECTION ENDS HERE ***
  191639             : 
  191640             : 
  191641             : // End of memberFunctionString
  191642             : // Start of memberFunctionString
  191643             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  191644             : 
  191645             :      // the generated cast function
  191646             :      // friend ROSE_DLL_API SgAllocateStatement* isSgAllocateStatement ( SgNode* s );
  191647             : 
  191648             :           typedef SgStatement base_node_type;
  191649             : 
  191650             : 
  191651             : // End of memberFunctionString
  191652             : // Start of memberFunctionString
  191653             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  191654             : 
  191655             :           void post_construction_initialization() override;
  191656             : 
  191657             : 
  191658             : // End of memberFunctionString
  191659             : 
  191660             :      public: 
  191661             :          SgExprListExp* get_expr_list() const;
  191662             :          void set_expr_list(SgExprListExp* expr_list);
  191663             : 
  191664             :      public: 
  191665             :          SgExpression* get_stat_expression() const;
  191666             :          void set_stat_expression(SgExpression* stat_expression);
  191667             : 
  191668             :      public: 
  191669             :          SgExpression* get_errmsg_expression() const;
  191670             :          void set_errmsg_expression(SgExpression* errmsg_expression);
  191671             : 
  191672             :      public: 
  191673             :          SgExpression* get_source_expression() const;
  191674             :          void set_source_expression(SgExpression* source_expression);
  191675             : 
  191676             : 
  191677             :      public: 
  191678             :          virtual ~SgAllocateStatement();
  191679             : 
  191680             : 
  191681             :      public: 
  191682             :          SgAllocateStatement(Sg_File_Info* startOfConstruct ); 
  191683             :          SgAllocateStatement(); 
  191684             : 
  191685             :     protected:
  191686             : // Start of memberFunctionString
  191687             : SgExprListExp* p_expr_list;
  191688             :           
  191689             : // End of memberFunctionString
  191690             : // Start of memberFunctionString
  191691             : SgExpression* p_stat_expression;
  191692             :           
  191693             : // End of memberFunctionString
  191694             : // Start of memberFunctionString
  191695             : SgExpression* p_errmsg_expression;
  191696             :           
  191697             : // End of memberFunctionString
  191698             : // Start of memberFunctionString
  191699             : SgExpression* p_source_expression;
  191700             :           
  191701             : // End of memberFunctionString
  191702             : 
  191703             :     friend struct Rose::Traits::generated::describe_node_t<SgAllocateStatement>;
  191704             :     friend struct Rose::Traits::generated::describe_field_t<SgAllocateStatement, SgExprListExp*,&SgAllocateStatement::p_expr_list>;
  191705             :     friend struct Rose::Traits::generated::describe_field_t<SgAllocateStatement, SgExpression*,&SgAllocateStatement::p_stat_expression>;
  191706             :     friend struct Rose::Traits::generated::describe_field_t<SgAllocateStatement, SgExpression*,&SgAllocateStatement::p_errmsg_expression>;
  191707             :     friend struct Rose::Traits::generated::describe_field_t<SgAllocateStatement, SgExpression*,&SgAllocateStatement::p_source_expression>;
  191708             : 
  191709             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191710             : 
  191711             : 
  191712             :    };
  191713             : #endif
  191714             : 
  191715             : // postdeclarations for SgAllocateStatement
  191716             : 
  191717             : /* #line 191718 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191718             : 
  191719             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  191720             : 
  191721             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191722             : 
  191723             : 
  191724             : /* #line 191725 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191725             : 
  191726             : 
  191727             : 
  191728             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191729             : 
  191730             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  191731             : //      This code is automatically generated for each 
  191732             : //      terminal and non-terminal within the defined 
  191733             : //      grammar.  There is a simple way to change the 
  191734             : //      code to fix bugs etc.  See the ROSE README file
  191735             : //      for directions.
  191736             : 
  191737             : // tps: (02/22/2010): Adding DLL export requirements
  191738             : #include "rosedll.h"
  191739             : 
  191740             : // predeclarations for SgDeallocateStatement
  191741             : 
  191742             : /* #line 191743 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191743             : 
  191744             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  191745             : 
  191746             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  191747             : 
  191748             : #if 1
  191749             : // Class Definition for SgDeallocateStatement
  191750             : class ROSE_DLL_API SgDeallocateStatement  : public SgStatement
  191751             :    {
  191752             :      public:
  191753             : 
  191754             : 
  191755             : /* #line 191756 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  191756             : 
  191757             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  191758             : // Start of memberFunctionString
  191759             : /* #line 3741 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  191760             : 
  191761             : 
  191762             : 
  191763             : // End of memberFunctionString
  191764             : // Start of memberFunctionString
  191765             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  191766             : 
  191767             : // *** COMMON CODE SECTION BEGINS HERE ***
  191768             : 
  191769             :     public:
  191770             : 
  191771             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  191772             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  191773             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  191774             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  191775             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  191776             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  191777             : 
  191778             :       /*! \brief returns a string representing the class name */
  191779             :           virtual std::string class_name() const override;
  191780             : 
  191781             :       /*! \brief returns new style SageIII enum values */
  191782             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  191783             : 
  191784             :       /*! \brief static variant value */
  191785             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  191786             :        // static const VariantT static_variant = V_SgDeallocateStatement;
  191787             :           enum { static_variant = V_SgDeallocateStatement };
  191788             : 
  191789             :        /* the generated cast function */
  191790             :       /*! \brief Casts pointer from base class to derived class */
  191791             :           ROSE_DLL_API friend       SgDeallocateStatement* isSgDeallocateStatement(       SgNode * s );
  191792             : 
  191793             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  191794             :           ROSE_DLL_API friend const SgDeallocateStatement* isSgDeallocateStatement( const SgNode * s );
  191795             : 
  191796             :      // ******************************************
  191797             :      // * Memory Pool / New / Delete
  191798             :      // ******************************************
  191799             : 
  191800             :      public:
  191801             :           /// \private
  191802             :           static const unsigned pool_size; //
  191803             :           /// \private
  191804             :           static std::vector<unsigned char *> pools; //
  191805             :           /// \private
  191806             :           static SgDeallocateStatement * next_node; // 
  191807             : 
  191808             :           /// \private
  191809             :           static unsigned long initializeStorageClassArray(SgDeallocateStatementStorageClass *); //
  191810             : 
  191811             :           /// \private
  191812             :           static void clearMemoryPool(); //
  191813             :           static void deleteMemoryPool(); //
  191814             : 
  191815             :           /// \private
  191816             :           static void extendMemoryPoolForFileIO(); //
  191817             : 
  191818             :           /// \private
  191819             :           static SgDeallocateStatement * getPointerFromGlobalIndex(unsigned long); //
  191820             :           /// \private
  191821             :           static SgDeallocateStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  191822             : 
  191823             :           /// \private
  191824             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  191825             :           /// \private
  191826             :           static void resetValidFreepointers(); //
  191827             :           /// \private
  191828             :           static unsigned long getNumberOfLastValidPointer(); //
  191829             : 
  191830             : 
  191831             : #if defined(INLINE_FUNCTIONS)
  191832             :       /*! \brief returns pointer to newly allocated IR node */
  191833             :           inline void *operator new (size_t size);
  191834             : #else
  191835             :       /*! \brief returns pointer to newly allocated IR node */
  191836             :           void *operator new (size_t size);
  191837             : #endif
  191838             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  191839             :           void operator delete (void* pointer, size_t size);
  191840             : 
  191841             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  191842           0 :           void operator delete (void* pointer)
  191843             :              {
  191844             :             // This is the generated delete operator...
  191845           0 :                SgDeallocateStatement::operator delete (pointer,sizeof(SgDeallocateStatement));
  191846             :              }
  191847             : 
  191848             :       /*! \brief Returns the total number of IR nodes of this type */
  191849             :           static size_t numberOfNodes();
  191850             : 
  191851             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  191852             :           static size_t memoryUsage();
  191853             : 
  191854             :       // End of scope which started in IR nodes specific code 
  191855             :       /* */
  191856             : 
  191857             :       /* name Internal Functions
  191858             :           \brief Internal functions ... incomplete-documentation
  191859             : 
  191860             :           These functions have been made public as part of the design, but they are suggested for internal use 
  191861             :           or by particularly knowledgeable users for specialized tools or applications.
  191862             : 
  191863             :           \internal We could not make these private because they are required by user for special purposes. And 
  191864             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  191865             :          
  191866             :        */
  191867             : 
  191868             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  191869             :        // overridden in every class by *generated* implementation
  191870             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  191871             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  191872             :        // MS: 06/28/02 container of names of variables or container indices 
  191873             :        // used used in the traversal to access AST successor nodes
  191874             :        // overridden in every class by *generated* implementation
  191875             :       /*! \brief container of names of variables or container indices used used in the traversal
  191876             :           to access AST successor nodes overridden in every class by *generated* implementation */
  191877             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  191878             : 
  191879             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  191880             :        // than all the vector copies. The implementation for these functions is generated for each class.
  191881             :       /*! \brief return number of children in the traversal successor list */
  191882             :           virtual size_t get_numberOfTraversalSuccessors() override;
  191883             :       /*! \brief index-based access to traversal successors by index number */
  191884             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  191885             :       /*! \brief index-based access to traversal successors by child node */
  191886             :           virtual size_t get_childIndex(SgNode *child) override;
  191887             : 
  191888             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  191889             :        // MS: 08/16/2002 method for generating RTI information
  191890             :       /*! \brief return C++ Runtime-Time-Information */
  191891             :           virtual RTIReturnType roseRTI() override;
  191892             : #endif
  191893             :       /* */
  191894             : 
  191895             : 
  191896             : 
  191897             :       /* name Deprecated Functions
  191898             :           \brief Deprecated functions ... incomplete-documentation
  191899             : 
  191900             :           These functions have been deprecated from use.
  191901             :        */
  191902             :       /* */
  191903             : 
  191904             :       /*! returns a C style string (char*) representing the class name */
  191905             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  191906             : 
  191907             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  191908             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  191909             : #if 0
  191910             :       /*! returns old style Sage II enum values */
  191911             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  191912             :       /*! returns old style Sage II enum values */
  191913             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  191914             : #endif
  191915             :       /* */
  191916             : 
  191917             : 
  191918             : 
  191919             : 
  191920             :      public:
  191921             :       /* name Traversal Support Functions
  191922             :           \brief Traversal support functions ... incomplete-documentation
  191923             : 
  191924             :           These functions have been made public as part of the design, but they are suggested for internal use 
  191925             :           or by particularly knowledgable users for specialized tools or applications.
  191926             :        */
  191927             :       /* */
  191928             : 
  191929             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  191930             :        // (inferior to ROSE traversal mechanism, experimental).
  191931             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  191932             :        */
  191933             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  191934             : 
  191935             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  191936             :       /*! \brief support for the classic visitor pattern done in GoF */
  191937             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  191938             : 
  191939             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  191940             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  191941             :        */
  191942             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  191943             : 
  191944             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  191945             :        */
  191946             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  191947             : 
  191948             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  191949             :        // This traversal helps support internal tools that call static member functions.
  191950             :        // note: this function operates on the memory pools.
  191951             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  191952             :        */
  191953             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  191954             :       /* */
  191955             : 
  191956             : 
  191957             :      public:
  191958             :       /* name Memory Allocation Functions
  191959             :           \brief Memory allocations functions ... incomplete-documentation
  191960             : 
  191961             :           These functions have been made public as part of the design, but they are suggested for internal use 
  191962             :           or by particularly knowledgable users for specialized tools or applications.
  191963             :        */
  191964             :       /* */
  191965             : 
  191966             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  191967             : 
  191968             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  191969             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  191970             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  191971             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  191972             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  191973             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  191974             :           being used with the AST File I/O mechanism.
  191975             :        */
  191976             :           virtual bool isInMemoryPool() override;
  191977             : 
  191978             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  191979             : 
  191980             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  191981             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  191982             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  191983             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  191984             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  191985             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  191986             :           being used with the AST File I/O mechanism.
  191987             :        */
  191988             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  191989             : 
  191990             :       // DQ (4/30/2006): Modified to be a const function.
  191991             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  191992             : 
  191993             :           This functions is part of general support for many possible tools to operate 
  191994             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  191995             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  191996             :           less than the set of pointers used by the AST file I/O. This is part of
  191997             :           work implemented by Andreas, and support tools such as the AST graph generation.
  191998             : 
  191999             :           \warning This function can return unexpected data members and thus the 
  192000             :                    order and the number of elements is unpredicable and subject 
  192001             :                    to change.
  192002             : 
  192003             :           \returns STL vector of pairs of SgNode* and strings
  192004             :        */
  192005             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  192006             : 
  192007             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  192008             : 
  192009             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  192010             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  192011             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  192012             : 
  192013             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  192014             :                    and subject to change.
  192015             :        */
  192016             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  192017             : 
  192018             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  192019             : 
  192020             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  192021             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  192022             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  192023             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  192024             : 
  192025             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  192026             : 
  192027             :           \returns long
  192028             :        */
  192029             :           virtual long getChildIndex( SgNode* childNode ) const override;
  192030             : 
  192031             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  192032             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192033             :       /* \brief Constructor for use by AST File I/O Mechanism
  192034             : 
  192035             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  192036             :           which obtained via fast binary file I/O from disk.
  192037             :        */
  192038             :        // SgDeallocateStatement( SgDeallocateStatementStorageClass& source );
  192039             : 
  192040             : 
  192041             : 
  192042             : 
  192043             : 
  192044             :  // JH (10/24/2005): methods added to support the ast file IO
  192045             :     private:
  192046             : 
  192047             :       /* name AST Memory Allocation Support Functions
  192048             :           \brief Memory allocations support....
  192049             : 
  192050             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  192051             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  192052             :           and support the AST File I/O Mechanism.
  192053             :        */
  192054             :       /* */
  192055             : 
  192056             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  192057             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  192058             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  192059             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  192060             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  192061             :           a correspinding one in the AST_FILE_IO class!
  192062             :        */
  192063             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  192064             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192065             :       /* \brief Typedef used for low level memory access.
  192066             :        */
  192067             :        // typedef unsigned char* TestType;
  192068             : 
  192069             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  192070             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192071             :       /* \brief Typedef used to hold memory addresses as values.
  192072             :        */
  192073             :        // typedef unsigned long  AddressType;
  192074             : 
  192075             : 
  192076             : 
  192077             :        // necessary, to have direct access to the p_freepointer and the private methods !
  192078             :       /*! \brief friend class declaration to support AST File I/O */
  192079             :           friend class AST_FILE_IO;
  192080             : 
  192081             :       /*! \brief friend class declaration to support AST File I/O */
  192082             :           friend class SgDeallocateStatementStorageClass;
  192083             : 
  192084             :       /*! \brief friend class declaration to support AST File I/O */
  192085             :           friend class AstSpecificDataManagingClass;
  192086             : 
  192087             :       /*! \brief friend class declaration to support AST File I/O */
  192088             :           friend class AstSpecificDataManagingClassStorageClass;
  192089             :     public:
  192090             :       /*! \brief IR node constructor to support AST File I/O */
  192091             :           SgDeallocateStatement( const SgDeallocateStatementStorageClass& source );
  192092             : 
  192093             :  // private: // JJW hack
  192094             :        /*
  192095             :           name AST Memory Allocation Support Variables
  192096             :           Memory allocations support variables 
  192097             : 
  192098             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  192099             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  192100             :           and support the AST File I/O Mechanism.
  192101             :        */
  192102             :       /* */
  192103             : 
  192104             :     public:
  192105             : 
  192106             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  192107             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  192108             :       // virtual SgNode* addRegExpAttribute();
  192109             :       /*! \brief Support for AST matching using regular expression.
  192110             : 
  192111             :           This support is incomplete and the subject of current research to define 
  192112             :           RegEx trees to support inexact matching.
  192113             :        */
  192114             :           SgDeallocateStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  192115             : 
  192116             : // *** COMMON CODE SECTION ENDS HERE ***
  192117             : 
  192118             : 
  192119             : // End of memberFunctionString
  192120             : // Start of memberFunctionString
  192121             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  192122             : 
  192123             :      // the generated cast function
  192124             :      // friend ROSE_DLL_API SgDeallocateStatement* isSgDeallocateStatement ( SgNode* s );
  192125             : 
  192126             :           typedef SgStatement base_node_type;
  192127             : 
  192128             : 
  192129             : // End of memberFunctionString
  192130             : // Start of memberFunctionString
  192131             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  192132             : 
  192133             :           void post_construction_initialization() override;
  192134             : 
  192135             : 
  192136             : // End of memberFunctionString
  192137             : 
  192138             :      public: 
  192139             :          SgExprListExp* get_expr_list() const;
  192140             :          void set_expr_list(SgExprListExp* expr_list);
  192141             : 
  192142             :      public: 
  192143             :          SgExpression* get_stat_expression() const;
  192144             :          void set_stat_expression(SgExpression* stat_expression);
  192145             : 
  192146             :      public: 
  192147             :          SgExpression* get_errmsg_expression() const;
  192148             :          void set_errmsg_expression(SgExpression* errmsg_expression);
  192149             : 
  192150             : 
  192151             :      public: 
  192152             :          virtual ~SgDeallocateStatement();
  192153             : 
  192154             : 
  192155             :      public: 
  192156             :          SgDeallocateStatement(Sg_File_Info* startOfConstruct ); 
  192157             :          SgDeallocateStatement(); 
  192158             : 
  192159             :     protected:
  192160             : // Start of memberFunctionString
  192161             : SgExprListExp* p_expr_list;
  192162             :           
  192163             : // End of memberFunctionString
  192164             : // Start of memberFunctionString
  192165             : SgExpression* p_stat_expression;
  192166             :           
  192167             : // End of memberFunctionString
  192168             : // Start of memberFunctionString
  192169             : SgExpression* p_errmsg_expression;
  192170             :           
  192171             : // End of memberFunctionString
  192172             : 
  192173             :     friend struct Rose::Traits::generated::describe_node_t<SgDeallocateStatement>;
  192174             :     friend struct Rose::Traits::generated::describe_field_t<SgDeallocateStatement, SgExprListExp*,&SgDeallocateStatement::p_expr_list>;
  192175             :     friend struct Rose::Traits::generated::describe_field_t<SgDeallocateStatement, SgExpression*,&SgDeallocateStatement::p_stat_expression>;
  192176             :     friend struct Rose::Traits::generated::describe_field_t<SgDeallocateStatement, SgExpression*,&SgDeallocateStatement::p_errmsg_expression>;
  192177             : 
  192178             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192179             : 
  192180             : 
  192181             :    };
  192182             : #endif
  192183             : 
  192184             : // postdeclarations for SgDeallocateStatement
  192185             : 
  192186             : /* #line 192187 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192187             : 
  192188             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  192189             : 
  192190             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192191             : 
  192192             : 
  192193             : /* #line 192194 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192194             : 
  192195             : 
  192196             : 
  192197             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192198             : 
  192199             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  192200             : //      This code is automatically generated for each 
  192201             : //      terminal and non-terminal within the defined 
  192202             : //      grammar.  There is a simple way to change the 
  192203             : //      code to fix bugs etc.  See the ROSE README file
  192204             : //      for directions.
  192205             : 
  192206             : // tps: (02/22/2010): Adding DLL export requirements
  192207             : #include "rosedll.h"
  192208             : 
  192209             : // predeclarations for SgUpcNotifyStatement
  192210             : 
  192211             : /* #line 192212 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192212             : 
  192213             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  192214             : 
  192215             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192216             : 
  192217             : #if 1
  192218             : // Class Definition for SgUpcNotifyStatement
  192219             : class ROSE_DLL_API SgUpcNotifyStatement  : public SgStatement
  192220             :    {
  192221             :      public:
  192222             : 
  192223             : 
  192224             : /* #line 192225 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192225             : 
  192226             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  192227             : // Start of memberFunctionString
  192228             : /* #line 3857 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  192229             : 
  192230             : 
  192231             : 
  192232             : // End of memberFunctionString
  192233             : // Start of memberFunctionString
  192234             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  192235             : 
  192236             : // *** COMMON CODE SECTION BEGINS HERE ***
  192237             : 
  192238             :     public:
  192239             : 
  192240             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  192241             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  192242             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  192243             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  192244             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  192245             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  192246             : 
  192247             :       /*! \brief returns a string representing the class name */
  192248             :           virtual std::string class_name() const override;
  192249             : 
  192250             :       /*! \brief returns new style SageIII enum values */
  192251             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  192252             : 
  192253             :       /*! \brief static variant value */
  192254             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  192255             :        // static const VariantT static_variant = V_SgUpcNotifyStatement;
  192256             :           enum { static_variant = V_SgUpcNotifyStatement };
  192257             : 
  192258             :        /* the generated cast function */
  192259             :       /*! \brief Casts pointer from base class to derived class */
  192260             :           ROSE_DLL_API friend       SgUpcNotifyStatement* isSgUpcNotifyStatement(       SgNode * s );
  192261             : 
  192262             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  192263             :           ROSE_DLL_API friend const SgUpcNotifyStatement* isSgUpcNotifyStatement( const SgNode * s );
  192264             : 
  192265             :      // ******************************************
  192266             :      // * Memory Pool / New / Delete
  192267             :      // ******************************************
  192268             : 
  192269             :      public:
  192270             :           /// \private
  192271             :           static const unsigned pool_size; //
  192272             :           /// \private
  192273             :           static std::vector<unsigned char *> pools; //
  192274             :           /// \private
  192275             :           static SgUpcNotifyStatement * next_node; // 
  192276             : 
  192277             :           /// \private
  192278             :           static unsigned long initializeStorageClassArray(SgUpcNotifyStatementStorageClass *); //
  192279             : 
  192280             :           /// \private
  192281             :           static void clearMemoryPool(); //
  192282             :           static void deleteMemoryPool(); //
  192283             : 
  192284             :           /// \private
  192285             :           static void extendMemoryPoolForFileIO(); //
  192286             : 
  192287             :           /// \private
  192288             :           static SgUpcNotifyStatement * getPointerFromGlobalIndex(unsigned long); //
  192289             :           /// \private
  192290             :           static SgUpcNotifyStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  192291             : 
  192292             :           /// \private
  192293             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  192294             :           /// \private
  192295             :           static void resetValidFreepointers(); //
  192296             :           /// \private
  192297             :           static unsigned long getNumberOfLastValidPointer(); //
  192298             : 
  192299             : 
  192300             : #if defined(INLINE_FUNCTIONS)
  192301             :       /*! \brief returns pointer to newly allocated IR node */
  192302             :           inline void *operator new (size_t size);
  192303             : #else
  192304             :       /*! \brief returns pointer to newly allocated IR node */
  192305             :           void *operator new (size_t size);
  192306             : #endif
  192307             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  192308             :           void operator delete (void* pointer, size_t size);
  192309             : 
  192310             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  192311           0 :           void operator delete (void* pointer)
  192312             :              {
  192313             :             // This is the generated delete operator...
  192314           0 :                SgUpcNotifyStatement::operator delete (pointer,sizeof(SgUpcNotifyStatement));
  192315             :              }
  192316             : 
  192317             :       /*! \brief Returns the total number of IR nodes of this type */
  192318             :           static size_t numberOfNodes();
  192319             : 
  192320             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  192321             :           static size_t memoryUsage();
  192322             : 
  192323             :       // End of scope which started in IR nodes specific code 
  192324             :       /* */
  192325             : 
  192326             :       /* name Internal Functions
  192327             :           \brief Internal functions ... incomplete-documentation
  192328             : 
  192329             :           These functions have been made public as part of the design, but they are suggested for internal use 
  192330             :           or by particularly knowledgeable users for specialized tools or applications.
  192331             : 
  192332             :           \internal We could not make these private because they are required by user for special purposes. And 
  192333             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  192334             :          
  192335             :        */
  192336             : 
  192337             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  192338             :        // overridden in every class by *generated* implementation
  192339             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  192340             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  192341             :        // MS: 06/28/02 container of names of variables or container indices 
  192342             :        // used used in the traversal to access AST successor nodes
  192343             :        // overridden in every class by *generated* implementation
  192344             :       /*! \brief container of names of variables or container indices used used in the traversal
  192345             :           to access AST successor nodes overridden in every class by *generated* implementation */
  192346             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  192347             : 
  192348             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  192349             :        // than all the vector copies. The implementation for these functions is generated for each class.
  192350             :       /*! \brief return number of children in the traversal successor list */
  192351             :           virtual size_t get_numberOfTraversalSuccessors() override;
  192352             :       /*! \brief index-based access to traversal successors by index number */
  192353             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  192354             :       /*! \brief index-based access to traversal successors by child node */
  192355             :           virtual size_t get_childIndex(SgNode *child) override;
  192356             : 
  192357             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  192358             :        // MS: 08/16/2002 method for generating RTI information
  192359             :       /*! \brief return C++ Runtime-Time-Information */
  192360             :           virtual RTIReturnType roseRTI() override;
  192361             : #endif
  192362             :       /* */
  192363             : 
  192364             : 
  192365             : 
  192366             :       /* name Deprecated Functions
  192367             :           \brief Deprecated functions ... incomplete-documentation
  192368             : 
  192369             :           These functions have been deprecated from use.
  192370             :        */
  192371             :       /* */
  192372             : 
  192373             :       /*! returns a C style string (char*) representing the class name */
  192374             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  192375             : 
  192376             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  192377             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  192378             : #if 0
  192379             :       /*! returns old style Sage II enum values */
  192380             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  192381             :       /*! returns old style Sage II enum values */
  192382             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  192383             : #endif
  192384             :       /* */
  192385             : 
  192386             : 
  192387             : 
  192388             : 
  192389             :      public:
  192390             :       /* name Traversal Support Functions
  192391             :           \brief Traversal support functions ... incomplete-documentation
  192392             : 
  192393             :           These functions have been made public as part of the design, but they are suggested for internal use 
  192394             :           or by particularly knowledgable users for specialized tools or applications.
  192395             :        */
  192396             :       /* */
  192397             : 
  192398             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  192399             :        // (inferior to ROSE traversal mechanism, experimental).
  192400             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  192401             :        */
  192402             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  192403             : 
  192404             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  192405             :       /*! \brief support for the classic visitor pattern done in GoF */
  192406             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  192407             : 
  192408             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  192409             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  192410             :        */
  192411             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  192412             : 
  192413             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  192414             :        */
  192415             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  192416             : 
  192417             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  192418             :        // This traversal helps support internal tools that call static member functions.
  192419             :        // note: this function operates on the memory pools.
  192420             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  192421             :        */
  192422             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  192423             :       /* */
  192424             : 
  192425             : 
  192426             :      public:
  192427             :       /* name Memory Allocation Functions
  192428             :           \brief Memory allocations functions ... incomplete-documentation
  192429             : 
  192430             :           These functions have been made public as part of the design, but they are suggested for internal use 
  192431             :           or by particularly knowledgable users for specialized tools or applications.
  192432             :        */
  192433             :       /* */
  192434             : 
  192435             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  192436             : 
  192437             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  192438             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  192439             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  192440             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  192441             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  192442             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  192443             :           being used with the AST File I/O mechanism.
  192444             :        */
  192445             :           virtual bool isInMemoryPool() override;
  192446             : 
  192447             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  192448             : 
  192449             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  192450             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  192451             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  192452             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  192453             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  192454             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  192455             :           being used with the AST File I/O mechanism.
  192456             :        */
  192457             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  192458             : 
  192459             :       // DQ (4/30/2006): Modified to be a const function.
  192460             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  192461             : 
  192462             :           This functions is part of general support for many possible tools to operate 
  192463             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  192464             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  192465             :           less than the set of pointers used by the AST file I/O. This is part of
  192466             :           work implemented by Andreas, and support tools such as the AST graph generation.
  192467             : 
  192468             :           \warning This function can return unexpected data members and thus the 
  192469             :                    order and the number of elements is unpredicable and subject 
  192470             :                    to change.
  192471             : 
  192472             :           \returns STL vector of pairs of SgNode* and strings
  192473             :        */
  192474             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  192475             : 
  192476             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  192477             : 
  192478             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  192479             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  192480             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  192481             : 
  192482             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  192483             :                    and subject to change.
  192484             :        */
  192485             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  192486             : 
  192487             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  192488             : 
  192489             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  192490             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  192491             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  192492             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  192493             : 
  192494             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  192495             : 
  192496             :           \returns long
  192497             :        */
  192498             :           virtual long getChildIndex( SgNode* childNode ) const override;
  192499             : 
  192500             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  192501             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192502             :       /* \brief Constructor for use by AST File I/O Mechanism
  192503             : 
  192504             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  192505             :           which obtained via fast binary file I/O from disk.
  192506             :        */
  192507             :        // SgUpcNotifyStatement( SgUpcNotifyStatementStorageClass& source );
  192508             : 
  192509             : 
  192510             : 
  192511             : 
  192512             : 
  192513             :  // JH (10/24/2005): methods added to support the ast file IO
  192514             :     private:
  192515             : 
  192516             :       /* name AST Memory Allocation Support Functions
  192517             :           \brief Memory allocations support....
  192518             : 
  192519             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  192520             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  192521             :           and support the AST File I/O Mechanism.
  192522             :        */
  192523             :       /* */
  192524             : 
  192525             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  192526             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  192527             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  192528             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  192529             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  192530             :           a correspinding one in the AST_FILE_IO class!
  192531             :        */
  192532             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  192533             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192534             :       /* \brief Typedef used for low level memory access.
  192535             :        */
  192536             :        // typedef unsigned char* TestType;
  192537             : 
  192538             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  192539             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192540             :       /* \brief Typedef used to hold memory addresses as values.
  192541             :        */
  192542             :        // typedef unsigned long  AddressType;
  192543             : 
  192544             : 
  192545             : 
  192546             :        // necessary, to have direct access to the p_freepointer and the private methods !
  192547             :       /*! \brief friend class declaration to support AST File I/O */
  192548             :           friend class AST_FILE_IO;
  192549             : 
  192550             :       /*! \brief friend class declaration to support AST File I/O */
  192551             :           friend class SgUpcNotifyStatementStorageClass;
  192552             : 
  192553             :       /*! \brief friend class declaration to support AST File I/O */
  192554             :           friend class AstSpecificDataManagingClass;
  192555             : 
  192556             :       /*! \brief friend class declaration to support AST File I/O */
  192557             :           friend class AstSpecificDataManagingClassStorageClass;
  192558             :     public:
  192559             :       /*! \brief IR node constructor to support AST File I/O */
  192560             :           SgUpcNotifyStatement( const SgUpcNotifyStatementStorageClass& source );
  192561             : 
  192562             :  // private: // JJW hack
  192563             :        /*
  192564             :           name AST Memory Allocation Support Variables
  192565             :           Memory allocations support variables 
  192566             : 
  192567             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  192568             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  192569             :           and support the AST File I/O Mechanism.
  192570             :        */
  192571             :       /* */
  192572             : 
  192573             :     public:
  192574             : 
  192575             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  192576             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  192577             :       // virtual SgNode* addRegExpAttribute();
  192578             :       /*! \brief Support for AST matching using regular expression.
  192579             : 
  192580             :           This support is incomplete and the subject of current research to define 
  192581             :           RegEx trees to support inexact matching.
  192582             :        */
  192583             :           SgUpcNotifyStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  192584             : 
  192585             : // *** COMMON CODE SECTION ENDS HERE ***
  192586             : 
  192587             : 
  192588             : // End of memberFunctionString
  192589             : // Start of memberFunctionString
  192590             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  192591             : 
  192592             :      // the generated cast function
  192593             :      // friend ROSE_DLL_API SgUpcNotifyStatement* isSgUpcNotifyStatement ( SgNode* s );
  192594             : 
  192595             :           typedef SgStatement base_node_type;
  192596             : 
  192597             : 
  192598             : // End of memberFunctionString
  192599             : // Start of memberFunctionString
  192600             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  192601             : 
  192602             :           void post_construction_initialization() override;
  192603             : 
  192604             : 
  192605             : // End of memberFunctionString
  192606             : 
  192607             :      public: 
  192608             :          SgExpression* get_notify_expression() const;
  192609             :          void set_notify_expression(SgExpression* notify_expression);
  192610             : 
  192611             : 
  192612             :      public: 
  192613             :          virtual ~SgUpcNotifyStatement();
  192614             : 
  192615             : 
  192616             :      public: 
  192617             :          SgUpcNotifyStatement(Sg_File_Info* startOfConstruct , SgExpression* notify_expression = NULL); 
  192618             :          SgUpcNotifyStatement(SgExpression* notify_expression); 
  192619             : 
  192620             :     protected:
  192621             : // Start of memberFunctionString
  192622             : SgExpression* p_notify_expression;
  192623             :           
  192624             : // End of memberFunctionString
  192625             : 
  192626             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcNotifyStatement>;
  192627             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcNotifyStatement, SgExpression*,&SgUpcNotifyStatement::p_notify_expression>;
  192628             : 
  192629             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192630             : 
  192631             : 
  192632             :    };
  192633             : #endif
  192634             : 
  192635             : // postdeclarations for SgUpcNotifyStatement
  192636             : 
  192637             : /* #line 192638 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192638             : 
  192639             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  192640             : 
  192641             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192642             : 
  192643             : 
  192644             : /* #line 192645 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192645             : 
  192646             : 
  192647             : 
  192648             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192649             : 
  192650             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  192651             : //      This code is automatically generated for each 
  192652             : //      terminal and non-terminal within the defined 
  192653             : //      grammar.  There is a simple way to change the 
  192654             : //      code to fix bugs etc.  See the ROSE README file
  192655             : //      for directions.
  192656             : 
  192657             : // tps: (02/22/2010): Adding DLL export requirements
  192658             : #include "rosedll.h"
  192659             : 
  192660             : // predeclarations for SgUpcWaitStatement
  192661             : 
  192662             : /* #line 192663 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192663             : 
  192664             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  192665             : 
  192666             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  192667             : 
  192668             : #if 1
  192669             : // Class Definition for SgUpcWaitStatement
  192670             : class ROSE_DLL_API SgUpcWaitStatement  : public SgStatement
  192671             :    {
  192672             :      public:
  192673             : 
  192674             : 
  192675             : /* #line 192676 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  192676             : 
  192677             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  192678             : // Start of memberFunctionString
  192679             : /* #line 3860 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  192680             : 
  192681             : 
  192682             : 
  192683             : // End of memberFunctionString
  192684             : // Start of memberFunctionString
  192685             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  192686             : 
  192687             : // *** COMMON CODE SECTION BEGINS HERE ***
  192688             : 
  192689             :     public:
  192690             : 
  192691             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  192692             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  192693             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  192694             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  192695             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  192696             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  192697             : 
  192698             :       /*! \brief returns a string representing the class name */
  192699             :           virtual std::string class_name() const override;
  192700             : 
  192701             :       /*! \brief returns new style SageIII enum values */
  192702             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  192703             : 
  192704             :       /*! \brief static variant value */
  192705             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  192706             :        // static const VariantT static_variant = V_SgUpcWaitStatement;
  192707             :           enum { static_variant = V_SgUpcWaitStatement };
  192708             : 
  192709             :        /* the generated cast function */
  192710             :       /*! \brief Casts pointer from base class to derived class */
  192711             :           ROSE_DLL_API friend       SgUpcWaitStatement* isSgUpcWaitStatement(       SgNode * s );
  192712             : 
  192713             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  192714             :           ROSE_DLL_API friend const SgUpcWaitStatement* isSgUpcWaitStatement( const SgNode * s );
  192715             : 
  192716             :      // ******************************************
  192717             :      // * Memory Pool / New / Delete
  192718             :      // ******************************************
  192719             : 
  192720             :      public:
  192721             :           /// \private
  192722             :           static const unsigned pool_size; //
  192723             :           /// \private
  192724             :           static std::vector<unsigned char *> pools; //
  192725             :           /// \private
  192726             :           static SgUpcWaitStatement * next_node; // 
  192727             : 
  192728             :           /// \private
  192729             :           static unsigned long initializeStorageClassArray(SgUpcWaitStatementStorageClass *); //
  192730             : 
  192731             :           /// \private
  192732             :           static void clearMemoryPool(); //
  192733             :           static void deleteMemoryPool(); //
  192734             : 
  192735             :           /// \private
  192736             :           static void extendMemoryPoolForFileIO(); //
  192737             : 
  192738             :           /// \private
  192739             :           static SgUpcWaitStatement * getPointerFromGlobalIndex(unsigned long); //
  192740             :           /// \private
  192741             :           static SgUpcWaitStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  192742             : 
  192743             :           /// \private
  192744             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  192745             :           /// \private
  192746             :           static void resetValidFreepointers(); //
  192747             :           /// \private
  192748             :           static unsigned long getNumberOfLastValidPointer(); //
  192749             : 
  192750             : 
  192751             : #if defined(INLINE_FUNCTIONS)
  192752             :       /*! \brief returns pointer to newly allocated IR node */
  192753             :           inline void *operator new (size_t size);
  192754             : #else
  192755             :       /*! \brief returns pointer to newly allocated IR node */
  192756             :           void *operator new (size_t size);
  192757             : #endif
  192758             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  192759             :           void operator delete (void* pointer, size_t size);
  192760             : 
  192761             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  192762           0 :           void operator delete (void* pointer)
  192763             :              {
  192764             :             // This is the generated delete operator...
  192765           0 :                SgUpcWaitStatement::operator delete (pointer,sizeof(SgUpcWaitStatement));
  192766             :              }
  192767             : 
  192768             :       /*! \brief Returns the total number of IR nodes of this type */
  192769             :           static size_t numberOfNodes();
  192770             : 
  192771             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  192772             :           static size_t memoryUsage();
  192773             : 
  192774             :       // End of scope which started in IR nodes specific code 
  192775             :       /* */
  192776             : 
  192777             :       /* name Internal Functions
  192778             :           \brief Internal functions ... incomplete-documentation
  192779             : 
  192780             :           These functions have been made public as part of the design, but they are suggested for internal use 
  192781             :           or by particularly knowledgeable users for specialized tools or applications.
  192782             : 
  192783             :           \internal We could not make these private because they are required by user for special purposes. And 
  192784             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  192785             :          
  192786             :        */
  192787             : 
  192788             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  192789             :        // overridden in every class by *generated* implementation
  192790             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  192791             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  192792             :        // MS: 06/28/02 container of names of variables or container indices 
  192793             :        // used used in the traversal to access AST successor nodes
  192794             :        // overridden in every class by *generated* implementation
  192795             :       /*! \brief container of names of variables or container indices used used in the traversal
  192796             :           to access AST successor nodes overridden in every class by *generated* implementation */
  192797             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  192798             : 
  192799             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  192800             :        // than all the vector copies. The implementation for these functions is generated for each class.
  192801             :       /*! \brief return number of children in the traversal successor list */
  192802             :           virtual size_t get_numberOfTraversalSuccessors() override;
  192803             :       /*! \brief index-based access to traversal successors by index number */
  192804             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  192805             :       /*! \brief index-based access to traversal successors by child node */
  192806             :           virtual size_t get_childIndex(SgNode *child) override;
  192807             : 
  192808             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  192809             :        // MS: 08/16/2002 method for generating RTI information
  192810             :       /*! \brief return C++ Runtime-Time-Information */
  192811             :           virtual RTIReturnType roseRTI() override;
  192812             : #endif
  192813             :       /* */
  192814             : 
  192815             : 
  192816             : 
  192817             :       /* name Deprecated Functions
  192818             :           \brief Deprecated functions ... incomplete-documentation
  192819             : 
  192820             :           These functions have been deprecated from use.
  192821             :        */
  192822             :       /* */
  192823             : 
  192824             :       /*! returns a C style string (char*) representing the class name */
  192825             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  192826             : 
  192827             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  192828             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  192829             : #if 0
  192830             :       /*! returns old style Sage II enum values */
  192831             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  192832             :       /*! returns old style Sage II enum values */
  192833             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  192834             : #endif
  192835             :       /* */
  192836             : 
  192837             : 
  192838             : 
  192839             : 
  192840             :      public:
  192841             :       /* name Traversal Support Functions
  192842             :           \brief Traversal support functions ... incomplete-documentation
  192843             : 
  192844             :           These functions have been made public as part of the design, but they are suggested for internal use 
  192845             :           or by particularly knowledgable users for specialized tools or applications.
  192846             :        */
  192847             :       /* */
  192848             : 
  192849             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  192850             :        // (inferior to ROSE traversal mechanism, experimental).
  192851             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  192852             :        */
  192853             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  192854             : 
  192855             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  192856             :       /*! \brief support for the classic visitor pattern done in GoF */
  192857             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  192858             : 
  192859             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  192860             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  192861             :        */
  192862             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  192863             : 
  192864             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  192865             :        */
  192866             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  192867             : 
  192868             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  192869             :        // This traversal helps support internal tools that call static member functions.
  192870             :        // note: this function operates on the memory pools.
  192871             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  192872             :        */
  192873             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  192874             :       /* */
  192875             : 
  192876             : 
  192877             :      public:
  192878             :       /* name Memory Allocation Functions
  192879             :           \brief Memory allocations functions ... incomplete-documentation
  192880             : 
  192881             :           These functions have been made public as part of the design, but they are suggested for internal use 
  192882             :           or by particularly knowledgable users for specialized tools or applications.
  192883             :        */
  192884             :       /* */
  192885             : 
  192886             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  192887             : 
  192888             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  192889             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  192890             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  192891             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  192892             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  192893             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  192894             :           being used with the AST File I/O mechanism.
  192895             :        */
  192896             :           virtual bool isInMemoryPool() override;
  192897             : 
  192898             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  192899             : 
  192900             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  192901             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  192902             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  192903             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  192904             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  192905             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  192906             :           being used with the AST File I/O mechanism.
  192907             :        */
  192908             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  192909             : 
  192910             :       // DQ (4/30/2006): Modified to be a const function.
  192911             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  192912             : 
  192913             :           This functions is part of general support for many possible tools to operate 
  192914             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  192915             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  192916             :           less than the set of pointers used by the AST file I/O. This is part of
  192917             :           work implemented by Andreas, and support tools such as the AST graph generation.
  192918             : 
  192919             :           \warning This function can return unexpected data members and thus the 
  192920             :                    order and the number of elements is unpredicable and subject 
  192921             :                    to change.
  192922             : 
  192923             :           \returns STL vector of pairs of SgNode* and strings
  192924             :        */
  192925             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  192926             : 
  192927             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  192928             : 
  192929             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  192930             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  192931             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  192932             : 
  192933             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  192934             :                    and subject to change.
  192935             :        */
  192936             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  192937             : 
  192938             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  192939             : 
  192940             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  192941             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  192942             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  192943             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  192944             : 
  192945             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  192946             : 
  192947             :           \returns long
  192948             :        */
  192949             :           virtual long getChildIndex( SgNode* childNode ) const override;
  192950             : 
  192951             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  192952             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192953             :       /* \brief Constructor for use by AST File I/O Mechanism
  192954             : 
  192955             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  192956             :           which obtained via fast binary file I/O from disk.
  192957             :        */
  192958             :        // SgUpcWaitStatement( SgUpcWaitStatementStorageClass& source );
  192959             : 
  192960             : 
  192961             : 
  192962             : 
  192963             : 
  192964             :  // JH (10/24/2005): methods added to support the ast file IO
  192965             :     private:
  192966             : 
  192967             :       /* name AST Memory Allocation Support Functions
  192968             :           \brief Memory allocations support....
  192969             : 
  192970             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  192971             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  192972             :           and support the AST File I/O Mechanism.
  192973             :        */
  192974             :       /* */
  192975             : 
  192976             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  192977             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  192978             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  192979             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  192980             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  192981             :           a correspinding one in the AST_FILE_IO class!
  192982             :        */
  192983             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  192984             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192985             :       /* \brief Typedef used for low level memory access.
  192986             :        */
  192987             :        // typedef unsigned char* TestType;
  192988             : 
  192989             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  192990             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  192991             :       /* \brief Typedef used to hold memory addresses as values.
  192992             :        */
  192993             :        // typedef unsigned long  AddressType;
  192994             : 
  192995             : 
  192996             : 
  192997             :        // necessary, to have direct access to the p_freepointer and the private methods !
  192998             :       /*! \brief friend class declaration to support AST File I/O */
  192999             :           friend class AST_FILE_IO;
  193000             : 
  193001             :       /*! \brief friend class declaration to support AST File I/O */
  193002             :           friend class SgUpcWaitStatementStorageClass;
  193003             : 
  193004             :       /*! \brief friend class declaration to support AST File I/O */
  193005             :           friend class AstSpecificDataManagingClass;
  193006             : 
  193007             :       /*! \brief friend class declaration to support AST File I/O */
  193008             :           friend class AstSpecificDataManagingClassStorageClass;
  193009             :     public:
  193010             :       /*! \brief IR node constructor to support AST File I/O */
  193011             :           SgUpcWaitStatement( const SgUpcWaitStatementStorageClass& source );
  193012             : 
  193013             :  // private: // JJW hack
  193014             :        /*
  193015             :           name AST Memory Allocation Support Variables
  193016             :           Memory allocations support variables 
  193017             : 
  193018             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  193019             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  193020             :           and support the AST File I/O Mechanism.
  193021             :        */
  193022             :       /* */
  193023             : 
  193024             :     public:
  193025             : 
  193026             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  193027             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  193028             :       // virtual SgNode* addRegExpAttribute();
  193029             :       /*! \brief Support for AST matching using regular expression.
  193030             : 
  193031             :           This support is incomplete and the subject of current research to define 
  193032             :           RegEx trees to support inexact matching.
  193033             :        */
  193034             :           SgUpcWaitStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  193035             : 
  193036             : // *** COMMON CODE SECTION ENDS HERE ***
  193037             : 
  193038             : 
  193039             : // End of memberFunctionString
  193040             : // Start of memberFunctionString
  193041             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  193042             : 
  193043             :      // the generated cast function
  193044             :      // friend ROSE_DLL_API SgUpcWaitStatement* isSgUpcWaitStatement ( SgNode* s );
  193045             : 
  193046             :           typedef SgStatement base_node_type;
  193047             : 
  193048             : 
  193049             : // End of memberFunctionString
  193050             : // Start of memberFunctionString
  193051             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  193052             : 
  193053             :           void post_construction_initialization() override;
  193054             : 
  193055             : 
  193056             : // End of memberFunctionString
  193057             : 
  193058             :      public: 
  193059             :          SgExpression* get_wait_expression() const;
  193060             :          void set_wait_expression(SgExpression* wait_expression);
  193061             : 
  193062             : 
  193063             :      public: 
  193064             :          virtual ~SgUpcWaitStatement();
  193065             : 
  193066             : 
  193067             :      public: 
  193068             :          SgUpcWaitStatement(Sg_File_Info* startOfConstruct , SgExpression* wait_expression = NULL); 
  193069             :          SgUpcWaitStatement(SgExpression* wait_expression); 
  193070             : 
  193071             :     protected:
  193072             : // Start of memberFunctionString
  193073             : SgExpression* p_wait_expression;
  193074             :           
  193075             : // End of memberFunctionString
  193076             : 
  193077             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcWaitStatement>;
  193078             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcWaitStatement, SgExpression*,&SgUpcWaitStatement::p_wait_expression>;
  193079             : 
  193080             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193081             : 
  193082             : 
  193083             :    };
  193084             : #endif
  193085             : 
  193086             : // postdeclarations for SgUpcWaitStatement
  193087             : 
  193088             : /* #line 193089 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193089             : 
  193090             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  193091             : 
  193092             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193093             : 
  193094             : 
  193095             : /* #line 193096 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193096             : 
  193097             : 
  193098             : 
  193099             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193100             : 
  193101             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  193102             : //      This code is automatically generated for each 
  193103             : //      terminal and non-terminal within the defined 
  193104             : //      grammar.  There is a simple way to change the 
  193105             : //      code to fix bugs etc.  See the ROSE README file
  193106             : //      for directions.
  193107             : 
  193108             : // tps: (02/22/2010): Adding DLL export requirements
  193109             : #include "rosedll.h"
  193110             : 
  193111             : // predeclarations for SgUpcBarrierStatement
  193112             : 
  193113             : /* #line 193114 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193114             : 
  193115             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  193116             : 
  193117             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193118             : 
  193119             : #if 1
  193120             : // Class Definition for SgUpcBarrierStatement
  193121             : class ROSE_DLL_API SgUpcBarrierStatement  : public SgStatement
  193122             :    {
  193123             :      public:
  193124             : 
  193125             : 
  193126             : /* #line 193127 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193127             : 
  193128             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  193129             : // Start of memberFunctionString
  193130             : /* #line 3863 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  193131             : 
  193132             : 
  193133             : 
  193134             : // End of memberFunctionString
  193135             : // Start of memberFunctionString
  193136             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  193137             : 
  193138             : // *** COMMON CODE SECTION BEGINS HERE ***
  193139             : 
  193140             :     public:
  193141             : 
  193142             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  193143             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  193144             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  193145             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  193146             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  193147             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  193148             : 
  193149             :       /*! \brief returns a string representing the class name */
  193150             :           virtual std::string class_name() const override;
  193151             : 
  193152             :       /*! \brief returns new style SageIII enum values */
  193153             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  193154             : 
  193155             :       /*! \brief static variant value */
  193156             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  193157             :        // static const VariantT static_variant = V_SgUpcBarrierStatement;
  193158             :           enum { static_variant = V_SgUpcBarrierStatement };
  193159             : 
  193160             :        /* the generated cast function */
  193161             :       /*! \brief Casts pointer from base class to derived class */
  193162             :           ROSE_DLL_API friend       SgUpcBarrierStatement* isSgUpcBarrierStatement(       SgNode * s );
  193163             : 
  193164             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  193165             :           ROSE_DLL_API friend const SgUpcBarrierStatement* isSgUpcBarrierStatement( const SgNode * s );
  193166             : 
  193167             :      // ******************************************
  193168             :      // * Memory Pool / New / Delete
  193169             :      // ******************************************
  193170             : 
  193171             :      public:
  193172             :           /// \private
  193173             :           static const unsigned pool_size; //
  193174             :           /// \private
  193175             :           static std::vector<unsigned char *> pools; //
  193176             :           /// \private
  193177             :           static SgUpcBarrierStatement * next_node; // 
  193178             : 
  193179             :           /// \private
  193180             :           static unsigned long initializeStorageClassArray(SgUpcBarrierStatementStorageClass *); //
  193181             : 
  193182             :           /// \private
  193183             :           static void clearMemoryPool(); //
  193184             :           static void deleteMemoryPool(); //
  193185             : 
  193186             :           /// \private
  193187             :           static void extendMemoryPoolForFileIO(); //
  193188             : 
  193189             :           /// \private
  193190             :           static SgUpcBarrierStatement * getPointerFromGlobalIndex(unsigned long); //
  193191             :           /// \private
  193192             :           static SgUpcBarrierStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  193193             : 
  193194             :           /// \private
  193195             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  193196             :           /// \private
  193197             :           static void resetValidFreepointers(); //
  193198             :           /// \private
  193199             :           static unsigned long getNumberOfLastValidPointer(); //
  193200             : 
  193201             : 
  193202             : #if defined(INLINE_FUNCTIONS)
  193203             :       /*! \brief returns pointer to newly allocated IR node */
  193204             :           inline void *operator new (size_t size);
  193205             : #else
  193206             :       /*! \brief returns pointer to newly allocated IR node */
  193207             :           void *operator new (size_t size);
  193208             : #endif
  193209             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  193210             :           void operator delete (void* pointer, size_t size);
  193211             : 
  193212             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  193213           0 :           void operator delete (void* pointer)
  193214             :              {
  193215             :             // This is the generated delete operator...
  193216           0 :                SgUpcBarrierStatement::operator delete (pointer,sizeof(SgUpcBarrierStatement));
  193217             :              }
  193218             : 
  193219             :       /*! \brief Returns the total number of IR nodes of this type */
  193220             :           static size_t numberOfNodes();
  193221             : 
  193222             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  193223             :           static size_t memoryUsage();
  193224             : 
  193225             :       // End of scope which started in IR nodes specific code 
  193226             :       /* */
  193227             : 
  193228             :       /* name Internal Functions
  193229             :           \brief Internal functions ... incomplete-documentation
  193230             : 
  193231             :           These functions have been made public as part of the design, but they are suggested for internal use 
  193232             :           or by particularly knowledgeable users for specialized tools or applications.
  193233             : 
  193234             :           \internal We could not make these private because they are required by user for special purposes. And 
  193235             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  193236             :          
  193237             :        */
  193238             : 
  193239             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  193240             :        // overridden in every class by *generated* implementation
  193241             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  193242             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  193243             :        // MS: 06/28/02 container of names of variables or container indices 
  193244             :        // used used in the traversal to access AST successor nodes
  193245             :        // overridden in every class by *generated* implementation
  193246             :       /*! \brief container of names of variables or container indices used used in the traversal
  193247             :           to access AST successor nodes overridden in every class by *generated* implementation */
  193248             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  193249             : 
  193250             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  193251             :        // than all the vector copies. The implementation for these functions is generated for each class.
  193252             :       /*! \brief return number of children in the traversal successor list */
  193253             :           virtual size_t get_numberOfTraversalSuccessors() override;
  193254             :       /*! \brief index-based access to traversal successors by index number */
  193255             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  193256             :       /*! \brief index-based access to traversal successors by child node */
  193257             :           virtual size_t get_childIndex(SgNode *child) override;
  193258             : 
  193259             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  193260             :        // MS: 08/16/2002 method for generating RTI information
  193261             :       /*! \brief return C++ Runtime-Time-Information */
  193262             :           virtual RTIReturnType roseRTI() override;
  193263             : #endif
  193264             :       /* */
  193265             : 
  193266             : 
  193267             : 
  193268             :       /* name Deprecated Functions
  193269             :           \brief Deprecated functions ... incomplete-documentation
  193270             : 
  193271             :           These functions have been deprecated from use.
  193272             :        */
  193273             :       /* */
  193274             : 
  193275             :       /*! returns a C style string (char*) representing the class name */
  193276             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  193277             : 
  193278             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  193279             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  193280             : #if 0
  193281             :       /*! returns old style Sage II enum values */
  193282             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  193283             :       /*! returns old style Sage II enum values */
  193284             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  193285             : #endif
  193286             :       /* */
  193287             : 
  193288             : 
  193289             : 
  193290             : 
  193291             :      public:
  193292             :       /* name Traversal Support Functions
  193293             :           \brief Traversal support functions ... incomplete-documentation
  193294             : 
  193295             :           These functions have been made public as part of the design, but they are suggested for internal use 
  193296             :           or by particularly knowledgable users for specialized tools or applications.
  193297             :        */
  193298             :       /* */
  193299             : 
  193300             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  193301             :        // (inferior to ROSE traversal mechanism, experimental).
  193302             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  193303             :        */
  193304             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  193305             : 
  193306             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  193307             :       /*! \brief support for the classic visitor pattern done in GoF */
  193308             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  193309             : 
  193310             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  193311             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  193312             :        */
  193313             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  193314             : 
  193315             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  193316             :        */
  193317             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  193318             : 
  193319             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  193320             :        // This traversal helps support internal tools that call static member functions.
  193321             :        // note: this function operates on the memory pools.
  193322             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  193323             :        */
  193324             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  193325             :       /* */
  193326             : 
  193327             : 
  193328             :      public:
  193329             :       /* name Memory Allocation Functions
  193330             :           \brief Memory allocations functions ... incomplete-documentation
  193331             : 
  193332             :           These functions have been made public as part of the design, but they are suggested for internal use 
  193333             :           or by particularly knowledgable users for specialized tools or applications.
  193334             :        */
  193335             :       /* */
  193336             : 
  193337             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  193338             : 
  193339             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  193340             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  193341             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  193342             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  193343             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  193344             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  193345             :           being used with the AST File I/O mechanism.
  193346             :        */
  193347             :           virtual bool isInMemoryPool() override;
  193348             : 
  193349             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  193350             : 
  193351             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  193352             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  193353             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  193354             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  193355             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  193356             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  193357             :           being used with the AST File I/O mechanism.
  193358             :        */
  193359             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  193360             : 
  193361             :       // DQ (4/30/2006): Modified to be a const function.
  193362             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  193363             : 
  193364             :           This functions is part of general support for many possible tools to operate 
  193365             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  193366             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  193367             :           less than the set of pointers used by the AST file I/O. This is part of
  193368             :           work implemented by Andreas, and support tools such as the AST graph generation.
  193369             : 
  193370             :           \warning This function can return unexpected data members and thus the 
  193371             :                    order and the number of elements is unpredicable and subject 
  193372             :                    to change.
  193373             : 
  193374             :           \returns STL vector of pairs of SgNode* and strings
  193375             :        */
  193376             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  193377             : 
  193378             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  193379             : 
  193380             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  193381             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  193382             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  193383             : 
  193384             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  193385             :                    and subject to change.
  193386             :        */
  193387             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  193388             : 
  193389             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  193390             : 
  193391             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  193392             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  193393             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  193394             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  193395             : 
  193396             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  193397             : 
  193398             :           \returns long
  193399             :        */
  193400             :           virtual long getChildIndex( SgNode* childNode ) const override;
  193401             : 
  193402             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  193403             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  193404             :       /* \brief Constructor for use by AST File I/O Mechanism
  193405             : 
  193406             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  193407             :           which obtained via fast binary file I/O from disk.
  193408             :        */
  193409             :        // SgUpcBarrierStatement( SgUpcBarrierStatementStorageClass& source );
  193410             : 
  193411             : 
  193412             : 
  193413             : 
  193414             : 
  193415             :  // JH (10/24/2005): methods added to support the ast file IO
  193416             :     private:
  193417             : 
  193418             :       /* name AST Memory Allocation Support Functions
  193419             :           \brief Memory allocations support....
  193420             : 
  193421             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  193422             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  193423             :           and support the AST File I/O Mechanism.
  193424             :        */
  193425             :       /* */
  193426             : 
  193427             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  193428             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  193429             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  193430             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  193431             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  193432             :           a correspinding one in the AST_FILE_IO class!
  193433             :        */
  193434             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  193435             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  193436             :       /* \brief Typedef used for low level memory access.
  193437             :        */
  193438             :        // typedef unsigned char* TestType;
  193439             : 
  193440             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  193441             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  193442             :       /* \brief Typedef used to hold memory addresses as values.
  193443             :        */
  193444             :        // typedef unsigned long  AddressType;
  193445             : 
  193446             : 
  193447             : 
  193448             :        // necessary, to have direct access to the p_freepointer and the private methods !
  193449             :       /*! \brief friend class declaration to support AST File I/O */
  193450             :           friend class AST_FILE_IO;
  193451             : 
  193452             :       /*! \brief friend class declaration to support AST File I/O */
  193453             :           friend class SgUpcBarrierStatementStorageClass;
  193454             : 
  193455             :       /*! \brief friend class declaration to support AST File I/O */
  193456             :           friend class AstSpecificDataManagingClass;
  193457             : 
  193458             :       /*! \brief friend class declaration to support AST File I/O */
  193459             :           friend class AstSpecificDataManagingClassStorageClass;
  193460             :     public:
  193461             :       /*! \brief IR node constructor to support AST File I/O */
  193462             :           SgUpcBarrierStatement( const SgUpcBarrierStatementStorageClass& source );
  193463             : 
  193464             :  // private: // JJW hack
  193465             :        /*
  193466             :           name AST Memory Allocation Support Variables
  193467             :           Memory allocations support variables 
  193468             : 
  193469             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  193470             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  193471             :           and support the AST File I/O Mechanism.
  193472             :        */
  193473             :       /* */
  193474             : 
  193475             :     public:
  193476             : 
  193477             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  193478             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  193479             :       // virtual SgNode* addRegExpAttribute();
  193480             :       /*! \brief Support for AST matching using regular expression.
  193481             : 
  193482             :           This support is incomplete and the subject of current research to define 
  193483             :           RegEx trees to support inexact matching.
  193484             :        */
  193485             :           SgUpcBarrierStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  193486             : 
  193487             : // *** COMMON CODE SECTION ENDS HERE ***
  193488             : 
  193489             : 
  193490             : // End of memberFunctionString
  193491             : // Start of memberFunctionString
  193492             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  193493             : 
  193494             :      // the generated cast function
  193495             :      // friend ROSE_DLL_API SgUpcBarrierStatement* isSgUpcBarrierStatement ( SgNode* s );
  193496             : 
  193497             :           typedef SgStatement base_node_type;
  193498             : 
  193499             : 
  193500             : // End of memberFunctionString
  193501             : // Start of memberFunctionString
  193502             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  193503             : 
  193504             :           void post_construction_initialization() override;
  193505             : 
  193506             : 
  193507             : // End of memberFunctionString
  193508             : 
  193509             :      public: 
  193510             :          SgExpression* get_barrier_expression() const;
  193511             :          void set_barrier_expression(SgExpression* barrier_expression);
  193512             : 
  193513             : 
  193514             :      public: 
  193515             :          virtual ~SgUpcBarrierStatement();
  193516             : 
  193517             : 
  193518             :      public: 
  193519             :          SgUpcBarrierStatement(Sg_File_Info* startOfConstruct , SgExpression* barrier_expression = NULL); 
  193520             :          SgUpcBarrierStatement(SgExpression* barrier_expression); 
  193521             : 
  193522             :     protected:
  193523             : // Start of memberFunctionString
  193524             : SgExpression* p_barrier_expression;
  193525             :           
  193526             : // End of memberFunctionString
  193527             : 
  193528             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcBarrierStatement>;
  193529             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcBarrierStatement, SgExpression*,&SgUpcBarrierStatement::p_barrier_expression>;
  193530             : 
  193531             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193532             : 
  193533             : 
  193534             :    };
  193535             : #endif
  193536             : 
  193537             : // postdeclarations for SgUpcBarrierStatement
  193538             : 
  193539             : /* #line 193540 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193540             : 
  193541             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  193542             : 
  193543             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193544             : 
  193545             : 
  193546             : /* #line 193547 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193547             : 
  193548             : 
  193549             : 
  193550             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193551             : 
  193552             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  193553             : //      This code is automatically generated for each 
  193554             : //      terminal and non-terminal within the defined 
  193555             : //      grammar.  There is a simple way to change the 
  193556             : //      code to fix bugs etc.  See the ROSE README file
  193557             : //      for directions.
  193558             : 
  193559             : // tps: (02/22/2010): Adding DLL export requirements
  193560             : #include "rosedll.h"
  193561             : 
  193562             : // predeclarations for SgUpcFenceStatement
  193563             : 
  193564             : /* #line 193565 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193565             : 
  193566             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  193567             : 
  193568             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193569             : 
  193570             : #if 1
  193571             : // Class Definition for SgUpcFenceStatement
  193572             : class ROSE_DLL_API SgUpcFenceStatement  : public SgStatement
  193573             :    {
  193574             :      public:
  193575             : 
  193576             : 
  193577             : /* #line 193578 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193578             : 
  193579             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  193580             : // Start of memberFunctionString
  193581             : /* #line 3866 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  193582             : 
  193583             : 
  193584             : 
  193585             : // End of memberFunctionString
  193586             : // Start of memberFunctionString
  193587             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  193588             : 
  193589             : // *** COMMON CODE SECTION BEGINS HERE ***
  193590             : 
  193591             :     public:
  193592             : 
  193593             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  193594             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  193595             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  193596             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  193597             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  193598             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  193599             : 
  193600             :       /*! \brief returns a string representing the class name */
  193601             :           virtual std::string class_name() const override;
  193602             : 
  193603             :       /*! \brief returns new style SageIII enum values */
  193604             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  193605             : 
  193606             :       /*! \brief static variant value */
  193607             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  193608             :        // static const VariantT static_variant = V_SgUpcFenceStatement;
  193609             :           enum { static_variant = V_SgUpcFenceStatement };
  193610             : 
  193611             :        /* the generated cast function */
  193612             :       /*! \brief Casts pointer from base class to derived class */
  193613             :           ROSE_DLL_API friend       SgUpcFenceStatement* isSgUpcFenceStatement(       SgNode * s );
  193614             : 
  193615             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  193616             :           ROSE_DLL_API friend const SgUpcFenceStatement* isSgUpcFenceStatement( const SgNode * s );
  193617             : 
  193618             :      // ******************************************
  193619             :      // * Memory Pool / New / Delete
  193620             :      // ******************************************
  193621             : 
  193622             :      public:
  193623             :           /// \private
  193624             :           static const unsigned pool_size; //
  193625             :           /// \private
  193626             :           static std::vector<unsigned char *> pools; //
  193627             :           /// \private
  193628             :           static SgUpcFenceStatement * next_node; // 
  193629             : 
  193630             :           /// \private
  193631             :           static unsigned long initializeStorageClassArray(SgUpcFenceStatementStorageClass *); //
  193632             : 
  193633             :           /// \private
  193634             :           static void clearMemoryPool(); //
  193635             :           static void deleteMemoryPool(); //
  193636             : 
  193637             :           /// \private
  193638             :           static void extendMemoryPoolForFileIO(); //
  193639             : 
  193640             :           /// \private
  193641             :           static SgUpcFenceStatement * getPointerFromGlobalIndex(unsigned long); //
  193642             :           /// \private
  193643             :           static SgUpcFenceStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  193644             : 
  193645             :           /// \private
  193646             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  193647             :           /// \private
  193648             :           static void resetValidFreepointers(); //
  193649             :           /// \private
  193650             :           static unsigned long getNumberOfLastValidPointer(); //
  193651             : 
  193652             : 
  193653             : #if defined(INLINE_FUNCTIONS)
  193654             :       /*! \brief returns pointer to newly allocated IR node */
  193655             :           inline void *operator new (size_t size);
  193656             : #else
  193657             :       /*! \brief returns pointer to newly allocated IR node */
  193658             :           void *operator new (size_t size);
  193659             : #endif
  193660             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  193661             :           void operator delete (void* pointer, size_t size);
  193662             : 
  193663             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  193664           0 :           void operator delete (void* pointer)
  193665             :              {
  193666             :             // This is the generated delete operator...
  193667           0 :                SgUpcFenceStatement::operator delete (pointer,sizeof(SgUpcFenceStatement));
  193668             :              }
  193669             : 
  193670             :       /*! \brief Returns the total number of IR nodes of this type */
  193671             :           static size_t numberOfNodes();
  193672             : 
  193673             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  193674             :           static size_t memoryUsage();
  193675             : 
  193676             :       // End of scope which started in IR nodes specific code 
  193677             :       /* */
  193678             : 
  193679             :       /* name Internal Functions
  193680             :           \brief Internal functions ... incomplete-documentation
  193681             : 
  193682             :           These functions have been made public as part of the design, but they are suggested for internal use 
  193683             :           or by particularly knowledgeable users for specialized tools or applications.
  193684             : 
  193685             :           \internal We could not make these private because they are required by user for special purposes. And 
  193686             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  193687             :          
  193688             :        */
  193689             : 
  193690             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  193691             :        // overridden in every class by *generated* implementation
  193692             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  193693             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  193694             :        // MS: 06/28/02 container of names of variables or container indices 
  193695             :        // used used in the traversal to access AST successor nodes
  193696             :        // overridden in every class by *generated* implementation
  193697             :       /*! \brief container of names of variables or container indices used used in the traversal
  193698             :           to access AST successor nodes overridden in every class by *generated* implementation */
  193699             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  193700             : 
  193701             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  193702             :        // than all the vector copies. The implementation for these functions is generated for each class.
  193703             :       /*! \brief return number of children in the traversal successor list */
  193704             :           virtual size_t get_numberOfTraversalSuccessors() override;
  193705             :       /*! \brief index-based access to traversal successors by index number */
  193706             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  193707             :       /*! \brief index-based access to traversal successors by child node */
  193708             :           virtual size_t get_childIndex(SgNode *child) override;
  193709             : 
  193710             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  193711             :        // MS: 08/16/2002 method for generating RTI information
  193712             :       /*! \brief return C++ Runtime-Time-Information */
  193713             :           virtual RTIReturnType roseRTI() override;
  193714             : #endif
  193715             :       /* */
  193716             : 
  193717             : 
  193718             : 
  193719             :       /* name Deprecated Functions
  193720             :           \brief Deprecated functions ... incomplete-documentation
  193721             : 
  193722             :           These functions have been deprecated from use.
  193723             :        */
  193724             :       /* */
  193725             : 
  193726             :       /*! returns a C style string (char*) representing the class name */
  193727             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  193728             : 
  193729             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  193730             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  193731             : #if 0
  193732             :       /*! returns old style Sage II enum values */
  193733             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  193734             :       /*! returns old style Sage II enum values */
  193735             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  193736             : #endif
  193737             :       /* */
  193738             : 
  193739             : 
  193740             : 
  193741             : 
  193742             :      public:
  193743             :       /* name Traversal Support Functions
  193744             :           \brief Traversal support functions ... incomplete-documentation
  193745             : 
  193746             :           These functions have been made public as part of the design, but they are suggested for internal use 
  193747             :           or by particularly knowledgable users for specialized tools or applications.
  193748             :        */
  193749             :       /* */
  193750             : 
  193751             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  193752             :        // (inferior to ROSE traversal mechanism, experimental).
  193753             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  193754             :        */
  193755             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  193756             : 
  193757             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  193758             :       /*! \brief support for the classic visitor pattern done in GoF */
  193759             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  193760             : 
  193761             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  193762             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  193763             :        */
  193764             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  193765             : 
  193766             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  193767             :        */
  193768             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  193769             : 
  193770             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  193771             :        // This traversal helps support internal tools that call static member functions.
  193772             :        // note: this function operates on the memory pools.
  193773             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  193774             :        */
  193775             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  193776             :       /* */
  193777             : 
  193778             : 
  193779             :      public:
  193780             :       /* name Memory Allocation Functions
  193781             :           \brief Memory allocations functions ... incomplete-documentation
  193782             : 
  193783             :           These functions have been made public as part of the design, but they are suggested for internal use 
  193784             :           or by particularly knowledgable users for specialized tools or applications.
  193785             :        */
  193786             :       /* */
  193787             : 
  193788             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  193789             : 
  193790             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  193791             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  193792             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  193793             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  193794             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  193795             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  193796             :           being used with the AST File I/O mechanism.
  193797             :        */
  193798             :           virtual bool isInMemoryPool() override;
  193799             : 
  193800             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  193801             : 
  193802             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  193803             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  193804             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  193805             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  193806             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  193807             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  193808             :           being used with the AST File I/O mechanism.
  193809             :        */
  193810             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  193811             : 
  193812             :       // DQ (4/30/2006): Modified to be a const function.
  193813             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  193814             : 
  193815             :           This functions is part of general support for many possible tools to operate 
  193816             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  193817             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  193818             :           less than the set of pointers used by the AST file I/O. This is part of
  193819             :           work implemented by Andreas, and support tools such as the AST graph generation.
  193820             : 
  193821             :           \warning This function can return unexpected data members and thus the 
  193822             :                    order and the number of elements is unpredicable and subject 
  193823             :                    to change.
  193824             : 
  193825             :           \returns STL vector of pairs of SgNode* and strings
  193826             :        */
  193827             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  193828             : 
  193829             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  193830             : 
  193831             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  193832             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  193833             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  193834             : 
  193835             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  193836             :                    and subject to change.
  193837             :        */
  193838             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  193839             : 
  193840             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  193841             : 
  193842             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  193843             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  193844             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  193845             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  193846             : 
  193847             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  193848             : 
  193849             :           \returns long
  193850             :        */
  193851             :           virtual long getChildIndex( SgNode* childNode ) const override;
  193852             : 
  193853             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  193854             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  193855             :       /* \brief Constructor for use by AST File I/O Mechanism
  193856             : 
  193857             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  193858             :           which obtained via fast binary file I/O from disk.
  193859             :        */
  193860             :        // SgUpcFenceStatement( SgUpcFenceStatementStorageClass& source );
  193861             : 
  193862             : 
  193863             : 
  193864             : 
  193865             : 
  193866             :  // JH (10/24/2005): methods added to support the ast file IO
  193867             :     private:
  193868             : 
  193869             :       /* name AST Memory Allocation Support Functions
  193870             :           \brief Memory allocations support....
  193871             : 
  193872             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  193873             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  193874             :           and support the AST File I/O Mechanism.
  193875             :        */
  193876             :       /* */
  193877             : 
  193878             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  193879             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  193880             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  193881             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  193882             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  193883             :           a correspinding one in the AST_FILE_IO class!
  193884             :        */
  193885             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  193886             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  193887             :       /* \brief Typedef used for low level memory access.
  193888             :        */
  193889             :        // typedef unsigned char* TestType;
  193890             : 
  193891             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  193892             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  193893             :       /* \brief Typedef used to hold memory addresses as values.
  193894             :        */
  193895             :        // typedef unsigned long  AddressType;
  193896             : 
  193897             : 
  193898             : 
  193899             :        // necessary, to have direct access to the p_freepointer and the private methods !
  193900             :       /*! \brief friend class declaration to support AST File I/O */
  193901             :           friend class AST_FILE_IO;
  193902             : 
  193903             :       /*! \brief friend class declaration to support AST File I/O */
  193904             :           friend class SgUpcFenceStatementStorageClass;
  193905             : 
  193906             :       /*! \brief friend class declaration to support AST File I/O */
  193907             :           friend class AstSpecificDataManagingClass;
  193908             : 
  193909             :       /*! \brief friend class declaration to support AST File I/O */
  193910             :           friend class AstSpecificDataManagingClassStorageClass;
  193911             :     public:
  193912             :       /*! \brief IR node constructor to support AST File I/O */
  193913             :           SgUpcFenceStatement( const SgUpcFenceStatementStorageClass& source );
  193914             : 
  193915             :  // private: // JJW hack
  193916             :        /*
  193917             :           name AST Memory Allocation Support Variables
  193918             :           Memory allocations support variables 
  193919             : 
  193920             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  193921             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  193922             :           and support the AST File I/O Mechanism.
  193923             :        */
  193924             :       /* */
  193925             : 
  193926             :     public:
  193927             : 
  193928             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  193929             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  193930             :       // virtual SgNode* addRegExpAttribute();
  193931             :       /*! \brief Support for AST matching using regular expression.
  193932             : 
  193933             :           This support is incomplete and the subject of current research to define 
  193934             :           RegEx trees to support inexact matching.
  193935             :        */
  193936             :           SgUpcFenceStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  193937             : 
  193938             : // *** COMMON CODE SECTION ENDS HERE ***
  193939             : 
  193940             : 
  193941             : // End of memberFunctionString
  193942             : // Start of memberFunctionString
  193943             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  193944             : 
  193945             :      // the generated cast function
  193946             :      // friend ROSE_DLL_API SgUpcFenceStatement* isSgUpcFenceStatement ( SgNode* s );
  193947             : 
  193948             :           typedef SgStatement base_node_type;
  193949             : 
  193950             : 
  193951             : // End of memberFunctionString
  193952             : // Start of memberFunctionString
  193953             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  193954             : 
  193955             :           void post_construction_initialization() override;
  193956             : 
  193957             : 
  193958             : // End of memberFunctionString
  193959             : 
  193960             : 
  193961             :      public: 
  193962             :          virtual ~SgUpcFenceStatement();
  193963             : 
  193964             : 
  193965             :      public: 
  193966             :          SgUpcFenceStatement(Sg_File_Info* startOfConstruct ); 
  193967             :          SgUpcFenceStatement(); 
  193968             : 
  193969             :     protected:
  193970             : 
  193971             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcFenceStatement>;
  193972             : 
  193973             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193974             : 
  193975             : 
  193976             :    };
  193977             : #endif
  193978             : 
  193979             : // postdeclarations for SgUpcFenceStatement
  193980             : 
  193981             : /* #line 193982 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193982             : 
  193983             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  193984             : 
  193985             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193986             : 
  193987             : 
  193988             : /* #line 193989 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  193989             : 
  193990             : 
  193991             : 
  193992             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  193993             : 
  193994             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  193995             : //      This code is automatically generated for each 
  193996             : //      terminal and non-terminal within the defined 
  193997             : //      grammar.  There is a simple way to change the 
  193998             : //      code to fix bugs etc.  See the ROSE README file
  193999             : //      for directions.
  194000             : 
  194001             : // tps: (02/22/2010): Adding DLL export requirements
  194002             : #include "rosedll.h"
  194003             : 
  194004             : // predeclarations for SgUpirBaseStatement
  194005             : 
  194006             : /* #line 194007 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194007             : 
  194008             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  194009             : 
  194010             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194011             : 
  194012             : #if 1
  194013             : // Class Definition for SgUpirBaseStatement
  194014             : class ROSE_DLL_API SgUpirBaseStatement  : public SgStatement
  194015             :    {
  194016             :      public:
  194017             : 
  194018             : 
  194019             : /* #line 194020 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194020             : 
  194021             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  194022             : // Start of memberFunctionString
  194023             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  194024             : 
  194025             : // *** COMMON CODE SECTION BEGINS HERE ***
  194026             : 
  194027             :     public:
  194028             : 
  194029             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  194030             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  194031             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  194032             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  194033             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  194034             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  194035             : 
  194036             :       /*! \brief returns a string representing the class name */
  194037             :           virtual std::string class_name() const override;
  194038             : 
  194039             :       /*! \brief returns new style SageIII enum values */
  194040             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  194041             : 
  194042             :       /*! \brief static variant value */
  194043             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  194044             :        // static const VariantT static_variant = V_SgUpirBaseStatement;
  194045             :           enum { static_variant = V_SgUpirBaseStatement };
  194046             : 
  194047             :        /* the generated cast function */
  194048             :       /*! \brief Casts pointer from base class to derived class */
  194049             :           ROSE_DLL_API friend       SgUpirBaseStatement* isSgUpirBaseStatement(       SgNode * s );
  194050             : 
  194051             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  194052             :           ROSE_DLL_API friend const SgUpirBaseStatement* isSgUpirBaseStatement( const SgNode * s );
  194053             : 
  194054             :      // ******************************************
  194055             :      // * Memory Pool / New / Delete
  194056             :      // ******************************************
  194057             : 
  194058             :      public:
  194059             :           /// \private
  194060             :           static const unsigned pool_size; //
  194061             :           /// \private
  194062             :           static std::vector<unsigned char *> pools; //
  194063             :           /// \private
  194064             :           static SgUpirBaseStatement * next_node; // 
  194065             : 
  194066             :           /// \private
  194067             :           static unsigned long initializeStorageClassArray(SgUpirBaseStatementStorageClass *); //
  194068             : 
  194069             :           /// \private
  194070             :           static void clearMemoryPool(); //
  194071             :           static void deleteMemoryPool(); //
  194072             : 
  194073             :           /// \private
  194074             :           static void extendMemoryPoolForFileIO(); //
  194075             : 
  194076             :           /// \private
  194077             :           static SgUpirBaseStatement * getPointerFromGlobalIndex(unsigned long); //
  194078             :           /// \private
  194079             :           static SgUpirBaseStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  194080             : 
  194081             :           /// \private
  194082             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  194083             :           /// \private
  194084             :           static void resetValidFreepointers(); //
  194085             :           /// \private
  194086             :           static unsigned long getNumberOfLastValidPointer(); //
  194087             : 
  194088             : 
  194089             : #if defined(INLINE_FUNCTIONS)
  194090             :       /*! \brief returns pointer to newly allocated IR node */
  194091             :           inline void *operator new (size_t size);
  194092             : #else
  194093             :       /*! \brief returns pointer to newly allocated IR node */
  194094             :           void *operator new (size_t size);
  194095             : #endif
  194096             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  194097             :           void operator delete (void* pointer, size_t size);
  194098             : 
  194099             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  194100           0 :           void operator delete (void* pointer)
  194101             :              {
  194102             :             // This is the generated delete operator...
  194103           0 :                SgUpirBaseStatement::operator delete (pointer,sizeof(SgUpirBaseStatement));
  194104             :              }
  194105             : 
  194106             :       /*! \brief Returns the total number of IR nodes of this type */
  194107             :           static size_t numberOfNodes();
  194108             : 
  194109             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  194110             :           static size_t memoryUsage();
  194111             : 
  194112             :       // End of scope which started in IR nodes specific code 
  194113             :       /* */
  194114             : 
  194115             :       /* name Internal Functions
  194116             :           \brief Internal functions ... incomplete-documentation
  194117             : 
  194118             :           These functions have been made public as part of the design, but they are suggested for internal use 
  194119             :           or by particularly knowledgeable users for specialized tools or applications.
  194120             : 
  194121             :           \internal We could not make these private because they are required by user for special purposes. And 
  194122             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  194123             :          
  194124             :        */
  194125             : 
  194126             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  194127             :        // overridden in every class by *generated* implementation
  194128             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  194129             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  194130             :        // MS: 06/28/02 container of names of variables or container indices 
  194131             :        // used used in the traversal to access AST successor nodes
  194132             :        // overridden in every class by *generated* implementation
  194133             :       /*! \brief container of names of variables or container indices used used in the traversal
  194134             :           to access AST successor nodes overridden in every class by *generated* implementation */
  194135             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  194136             : 
  194137             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  194138             :        // than all the vector copies. The implementation for these functions is generated for each class.
  194139             :       /*! \brief return number of children in the traversal successor list */
  194140             :           virtual size_t get_numberOfTraversalSuccessors() override;
  194141             :       /*! \brief index-based access to traversal successors by index number */
  194142             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  194143             :       /*! \brief index-based access to traversal successors by child node */
  194144             :           virtual size_t get_childIndex(SgNode *child) override;
  194145             : 
  194146             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  194147             :        // MS: 08/16/2002 method for generating RTI information
  194148             :       /*! \brief return C++ Runtime-Time-Information */
  194149             :           virtual RTIReturnType roseRTI() override;
  194150             : #endif
  194151             :       /* */
  194152             : 
  194153             : 
  194154             : 
  194155             :       /* name Deprecated Functions
  194156             :           \brief Deprecated functions ... incomplete-documentation
  194157             : 
  194158             :           These functions have been deprecated from use.
  194159             :        */
  194160             :       /* */
  194161             : 
  194162             :       /*! returns a C style string (char*) representing the class name */
  194163             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  194164             : 
  194165             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  194166             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  194167             : #if 0
  194168             :       /*! returns old style Sage II enum values */
  194169             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  194170             :       /*! returns old style Sage II enum values */
  194171             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  194172             : #endif
  194173             :       /* */
  194174             : 
  194175             : 
  194176             : 
  194177             : 
  194178             :      public:
  194179             :       /* name Traversal Support Functions
  194180             :           \brief Traversal support functions ... incomplete-documentation
  194181             : 
  194182             :           These functions have been made public as part of the design, but they are suggested for internal use 
  194183             :           or by particularly knowledgable users for specialized tools or applications.
  194184             :        */
  194185             :       /* */
  194186             : 
  194187             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  194188             :        // (inferior to ROSE traversal mechanism, experimental).
  194189             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  194190             :        */
  194191             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  194192             : 
  194193             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  194194             :       /*! \brief support for the classic visitor pattern done in GoF */
  194195             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  194196             : 
  194197             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  194198             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  194199             :        */
  194200             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  194201             : 
  194202             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  194203             :        */
  194204             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  194205             : 
  194206             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  194207             :        // This traversal helps support internal tools that call static member functions.
  194208             :        // note: this function operates on the memory pools.
  194209             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  194210             :        */
  194211             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  194212             :       /* */
  194213             : 
  194214             : 
  194215             :      public:
  194216             :       /* name Memory Allocation Functions
  194217             :           \brief Memory allocations functions ... incomplete-documentation
  194218             : 
  194219             :           These functions have been made public as part of the design, but they are suggested for internal use 
  194220             :           or by particularly knowledgable users for specialized tools or applications.
  194221             :        */
  194222             :       /* */
  194223             : 
  194224             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  194225             : 
  194226             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  194227             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  194228             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  194229             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  194230             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  194231             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  194232             :           being used with the AST File I/O mechanism.
  194233             :        */
  194234             :           virtual bool isInMemoryPool() override;
  194235             : 
  194236             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  194237             : 
  194238             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  194239             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  194240             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  194241             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  194242             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  194243             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  194244             :           being used with the AST File I/O mechanism.
  194245             :        */
  194246             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  194247             : 
  194248             :       // DQ (4/30/2006): Modified to be a const function.
  194249             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  194250             : 
  194251             :           This functions is part of general support for many possible tools to operate 
  194252             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  194253             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  194254             :           less than the set of pointers used by the AST file I/O. This is part of
  194255             :           work implemented by Andreas, and support tools such as the AST graph generation.
  194256             : 
  194257             :           \warning This function can return unexpected data members and thus the 
  194258             :                    order and the number of elements is unpredicable and subject 
  194259             :                    to change.
  194260             : 
  194261             :           \returns STL vector of pairs of SgNode* and strings
  194262             :        */
  194263             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  194264             : 
  194265             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  194266             : 
  194267             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  194268             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  194269             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  194270             : 
  194271             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  194272             :                    and subject to change.
  194273             :        */
  194274             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  194275             : 
  194276             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  194277             : 
  194278             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  194279             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  194280             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  194281             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  194282             : 
  194283             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  194284             : 
  194285             :           \returns long
  194286             :        */
  194287             :           virtual long getChildIndex( SgNode* childNode ) const override;
  194288             : 
  194289             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  194290             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  194291             :       /* \brief Constructor for use by AST File I/O Mechanism
  194292             : 
  194293             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  194294             :           which obtained via fast binary file I/O from disk.
  194295             :        */
  194296             :        // SgUpirBaseStatement( SgUpirBaseStatementStorageClass& source );
  194297             : 
  194298             : 
  194299             : 
  194300             : 
  194301             : 
  194302             :  // JH (10/24/2005): methods added to support the ast file IO
  194303             :     private:
  194304             : 
  194305             :       /* name AST Memory Allocation Support Functions
  194306             :           \brief Memory allocations support....
  194307             : 
  194308             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  194309             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  194310             :           and support the AST File I/O Mechanism.
  194311             :        */
  194312             :       /* */
  194313             : 
  194314             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  194315             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  194316             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  194317             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  194318             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  194319             :           a correspinding one in the AST_FILE_IO class!
  194320             :        */
  194321             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  194322             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  194323             :       /* \brief Typedef used for low level memory access.
  194324             :        */
  194325             :        // typedef unsigned char* TestType;
  194326             : 
  194327             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  194328             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  194329             :       /* \brief Typedef used to hold memory addresses as values.
  194330             :        */
  194331             :        // typedef unsigned long  AddressType;
  194332             : 
  194333             : 
  194334             : 
  194335             :        // necessary, to have direct access to the p_freepointer and the private methods !
  194336             :       /*! \brief friend class declaration to support AST File I/O */
  194337             :           friend class AST_FILE_IO;
  194338             : 
  194339             :       /*! \brief friend class declaration to support AST File I/O */
  194340             :           friend class SgUpirBaseStatementStorageClass;
  194341             : 
  194342             :       /*! \brief friend class declaration to support AST File I/O */
  194343             :           friend class AstSpecificDataManagingClass;
  194344             : 
  194345             :       /*! \brief friend class declaration to support AST File I/O */
  194346             :           friend class AstSpecificDataManagingClassStorageClass;
  194347             :     public:
  194348             :       /*! \brief IR node constructor to support AST File I/O */
  194349             :           SgUpirBaseStatement( const SgUpirBaseStatementStorageClass& source );
  194350             : 
  194351             :  // private: // JJW hack
  194352             :        /*
  194353             :           name AST Memory Allocation Support Variables
  194354             :           Memory allocations support variables 
  194355             : 
  194356             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  194357             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  194358             :           and support the AST File I/O Mechanism.
  194359             :        */
  194360             :       /* */
  194361             : 
  194362             :     public:
  194363             : 
  194364             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  194365             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  194366             :       // virtual SgNode* addRegExpAttribute();
  194367             :       /*! \brief Support for AST matching using regular expression.
  194368             : 
  194369             :           This support is incomplete and the subject of current research to define 
  194370             :           RegEx trees to support inexact matching.
  194371             :        */
  194372             :           SgUpirBaseStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  194373             : 
  194374             : // *** COMMON CODE SECTION ENDS HERE ***
  194375             : 
  194376             : 
  194377             : // End of memberFunctionString
  194378             : // Start of memberFunctionString
  194379             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  194380             : 
  194381             :      // the generated cast function
  194382             :      // friend ROSE_DLL_API SgUpirBaseStatement* isSgUpirBaseStatement ( SgNode* s );
  194383             : 
  194384             :           typedef SgStatement base_node_type;
  194385             : 
  194386             : 
  194387             : // End of memberFunctionString
  194388             : // Start of memberFunctionString
  194389             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  194390             : 
  194391             :           void post_construction_initialization() override;
  194392             : 
  194393             : 
  194394             : // End of memberFunctionString
  194395             : 
  194396             :      public: 
  194397             :          SgStatement* get_upir_parent() const;
  194398             :          void set_upir_parent(SgStatement* upir_parent);
  194399             : 
  194400             :      public: 
  194401             :          const SgStatementPtrList&  get_upir_children() const;
  194402             :          SgStatementPtrList& get_upir_children(); 
  194403             : 
  194404             : 
  194405             :      public: 
  194406             :          virtual ~SgUpirBaseStatement();
  194407             : 
  194408             : 
  194409             :      public: 
  194410             :          SgUpirBaseStatement(Sg_File_Info* startOfConstruct ); 
  194411             :          SgUpirBaseStatement(); 
  194412             : 
  194413             :     protected:
  194414             : // Start of memberFunctionString
  194415             : SgStatement* p_upir_parent;
  194416             :           
  194417             : // End of memberFunctionString
  194418             : // Start of memberFunctionString
  194419             : SgStatementPtrList p_upir_children;
  194420             :           
  194421             : // End of memberFunctionString
  194422             : 
  194423             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirBaseStatement>;
  194424             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirBaseStatement, SgStatement*,&SgUpirBaseStatement::p_upir_parent>;
  194425             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirBaseStatement, SgStatementPtrList,&SgUpirBaseStatement::p_upir_children>;
  194426             : 
  194427             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194428             : 
  194429             : 
  194430             :    };
  194431             : #endif
  194432             : 
  194433             : // postdeclarations for SgUpirBaseStatement
  194434             : 
  194435             : /* #line 194436 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194436             : 
  194437             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  194438             : 
  194439             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194440             : 
  194441             : 
  194442             : /* #line 194443 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194443             : 
  194444             : 
  194445             : 
  194446             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194447             : 
  194448             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  194449             : //      This code is automatically generated for each 
  194450             : //      terminal and non-terminal within the defined 
  194451             : //      grammar.  There is a simple way to change the 
  194452             : //      code to fix bugs etc.  See the ROSE README file
  194453             : //      for directions.
  194454             : 
  194455             : // tps: (02/22/2010): Adding DLL export requirements
  194456             : #include "rosedll.h"
  194457             : 
  194458             : // predeclarations for SgOmpTaskyieldStatement
  194459             : 
  194460             : /* #line 194461 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194461             : 
  194462             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  194463             : 
  194464             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194465             : 
  194466             : #if 1
  194467             : // Class Definition for SgOmpTaskyieldStatement
  194468             : class ROSE_DLL_API SgOmpTaskyieldStatement  : public SgUpirBaseStatement
  194469             :    {
  194470             :      public:
  194471             : 
  194472             : 
  194473             : /* #line 194474 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194474             : 
  194475             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  194476             : // Start of memberFunctionString
  194477             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  194478             : 
  194479             : // *** COMMON CODE SECTION BEGINS HERE ***
  194480             : 
  194481             :     public:
  194482             : 
  194483             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  194484             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  194485             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  194486             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  194487             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  194488             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  194489             : 
  194490             :       /*! \brief returns a string representing the class name */
  194491             :           virtual std::string class_name() const override;
  194492             : 
  194493             :       /*! \brief returns new style SageIII enum values */
  194494             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  194495             : 
  194496             :       /*! \brief static variant value */
  194497             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  194498             :        // static const VariantT static_variant = V_SgOmpTaskyieldStatement;
  194499             :           enum { static_variant = V_SgOmpTaskyieldStatement };
  194500             : 
  194501             :        /* the generated cast function */
  194502             :       /*! \brief Casts pointer from base class to derived class */
  194503             :           ROSE_DLL_API friend       SgOmpTaskyieldStatement* isSgOmpTaskyieldStatement(       SgNode * s );
  194504             : 
  194505             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  194506             :           ROSE_DLL_API friend const SgOmpTaskyieldStatement* isSgOmpTaskyieldStatement( const SgNode * s );
  194507             : 
  194508             :      // ******************************************
  194509             :      // * Memory Pool / New / Delete
  194510             :      // ******************************************
  194511             : 
  194512             :      public:
  194513             :           /// \private
  194514             :           static const unsigned pool_size; //
  194515             :           /// \private
  194516             :           static std::vector<unsigned char *> pools; //
  194517             :           /// \private
  194518             :           static SgOmpTaskyieldStatement * next_node; // 
  194519             : 
  194520             :           /// \private
  194521             :           static unsigned long initializeStorageClassArray(SgOmpTaskyieldStatementStorageClass *); //
  194522             : 
  194523             :           /// \private
  194524             :           static void clearMemoryPool(); //
  194525             :           static void deleteMemoryPool(); //
  194526             : 
  194527             :           /// \private
  194528             :           static void extendMemoryPoolForFileIO(); //
  194529             : 
  194530             :           /// \private
  194531             :           static SgOmpTaskyieldStatement * getPointerFromGlobalIndex(unsigned long); //
  194532             :           /// \private
  194533             :           static SgOmpTaskyieldStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  194534             : 
  194535             :           /// \private
  194536             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  194537             :           /// \private
  194538             :           static void resetValidFreepointers(); //
  194539             :           /// \private
  194540             :           static unsigned long getNumberOfLastValidPointer(); //
  194541             : 
  194542             : 
  194543             : #if defined(INLINE_FUNCTIONS)
  194544             :       /*! \brief returns pointer to newly allocated IR node */
  194545             :           inline void *operator new (size_t size);
  194546             : #else
  194547             :       /*! \brief returns pointer to newly allocated IR node */
  194548             :           void *operator new (size_t size);
  194549             : #endif
  194550             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  194551             :           void operator delete (void* pointer, size_t size);
  194552             : 
  194553             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  194554           0 :           void operator delete (void* pointer)
  194555             :              {
  194556             :             // This is the generated delete operator...
  194557           0 :                SgOmpTaskyieldStatement::operator delete (pointer,sizeof(SgOmpTaskyieldStatement));
  194558             :              }
  194559             : 
  194560             :       /*! \brief Returns the total number of IR nodes of this type */
  194561             :           static size_t numberOfNodes();
  194562             : 
  194563             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  194564             :           static size_t memoryUsage();
  194565             : 
  194566             :       // End of scope which started in IR nodes specific code 
  194567             :       /* */
  194568             : 
  194569             :       /* name Internal Functions
  194570             :           \brief Internal functions ... incomplete-documentation
  194571             : 
  194572             :           These functions have been made public as part of the design, but they are suggested for internal use 
  194573             :           or by particularly knowledgeable users for specialized tools or applications.
  194574             : 
  194575             :           \internal We could not make these private because they are required by user for special purposes. And 
  194576             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  194577             :          
  194578             :        */
  194579             : 
  194580             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  194581             :        // overridden in every class by *generated* implementation
  194582             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  194583             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  194584             :        // MS: 06/28/02 container of names of variables or container indices 
  194585             :        // used used in the traversal to access AST successor nodes
  194586             :        // overridden in every class by *generated* implementation
  194587             :       /*! \brief container of names of variables or container indices used used in the traversal
  194588             :           to access AST successor nodes overridden in every class by *generated* implementation */
  194589             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  194590             : 
  194591             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  194592             :        // than all the vector copies. The implementation for these functions is generated for each class.
  194593             :       /*! \brief return number of children in the traversal successor list */
  194594             :           virtual size_t get_numberOfTraversalSuccessors() override;
  194595             :       /*! \brief index-based access to traversal successors by index number */
  194596             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  194597             :       /*! \brief index-based access to traversal successors by child node */
  194598             :           virtual size_t get_childIndex(SgNode *child) override;
  194599             : 
  194600             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  194601             :        // MS: 08/16/2002 method for generating RTI information
  194602             :       /*! \brief return C++ Runtime-Time-Information */
  194603             :           virtual RTIReturnType roseRTI() override;
  194604             : #endif
  194605             :       /* */
  194606             : 
  194607             : 
  194608             : 
  194609             :       /* name Deprecated Functions
  194610             :           \brief Deprecated functions ... incomplete-documentation
  194611             : 
  194612             :           These functions have been deprecated from use.
  194613             :        */
  194614             :       /* */
  194615             : 
  194616             :       /*! returns a C style string (char*) representing the class name */
  194617             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  194618             : 
  194619             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  194620             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  194621             : #if 0
  194622             :       /*! returns old style Sage II enum values */
  194623             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  194624             :       /*! returns old style Sage II enum values */
  194625             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  194626             : #endif
  194627             :       /* */
  194628             : 
  194629             : 
  194630             : 
  194631             : 
  194632             :      public:
  194633             :       /* name Traversal Support Functions
  194634             :           \brief Traversal support functions ... incomplete-documentation
  194635             : 
  194636             :           These functions have been made public as part of the design, but they are suggested for internal use 
  194637             :           or by particularly knowledgable users for specialized tools or applications.
  194638             :        */
  194639             :       /* */
  194640             : 
  194641             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  194642             :        // (inferior to ROSE traversal mechanism, experimental).
  194643             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  194644             :        */
  194645             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  194646             : 
  194647             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  194648             :       /*! \brief support for the classic visitor pattern done in GoF */
  194649             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  194650             : 
  194651             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  194652             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  194653             :        */
  194654             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  194655             : 
  194656             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  194657             :        */
  194658             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  194659             : 
  194660             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  194661             :        // This traversal helps support internal tools that call static member functions.
  194662             :        // note: this function operates on the memory pools.
  194663             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  194664             :        */
  194665             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  194666             :       /* */
  194667             : 
  194668             : 
  194669             :      public:
  194670             :       /* name Memory Allocation Functions
  194671             :           \brief Memory allocations functions ... incomplete-documentation
  194672             : 
  194673             :           These functions have been made public as part of the design, but they are suggested for internal use 
  194674             :           or by particularly knowledgable users for specialized tools or applications.
  194675             :        */
  194676             :       /* */
  194677             : 
  194678             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  194679             : 
  194680             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  194681             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  194682             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  194683             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  194684             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  194685             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  194686             :           being used with the AST File I/O mechanism.
  194687             :        */
  194688             :           virtual bool isInMemoryPool() override;
  194689             : 
  194690             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  194691             : 
  194692             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  194693             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  194694             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  194695             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  194696             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  194697             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  194698             :           being used with the AST File I/O mechanism.
  194699             :        */
  194700             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  194701             : 
  194702             :       // DQ (4/30/2006): Modified to be a const function.
  194703             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  194704             : 
  194705             :           This functions is part of general support for many possible tools to operate 
  194706             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  194707             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  194708             :           less than the set of pointers used by the AST file I/O. This is part of
  194709             :           work implemented by Andreas, and support tools such as the AST graph generation.
  194710             : 
  194711             :           \warning This function can return unexpected data members and thus the 
  194712             :                    order and the number of elements is unpredicable and subject 
  194713             :                    to change.
  194714             : 
  194715             :           \returns STL vector of pairs of SgNode* and strings
  194716             :        */
  194717             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  194718             : 
  194719             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  194720             : 
  194721             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  194722             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  194723             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  194724             : 
  194725             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  194726             :                    and subject to change.
  194727             :        */
  194728             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  194729             : 
  194730             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  194731             : 
  194732             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  194733             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  194734             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  194735             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  194736             : 
  194737             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  194738             : 
  194739             :           \returns long
  194740             :        */
  194741             :           virtual long getChildIndex( SgNode* childNode ) const override;
  194742             : 
  194743             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  194744             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  194745             :       /* \brief Constructor for use by AST File I/O Mechanism
  194746             : 
  194747             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  194748             :           which obtained via fast binary file I/O from disk.
  194749             :        */
  194750             :        // SgOmpTaskyieldStatement( SgOmpTaskyieldStatementStorageClass& source );
  194751             : 
  194752             : 
  194753             : 
  194754             : 
  194755             : 
  194756             :  // JH (10/24/2005): methods added to support the ast file IO
  194757             :     private:
  194758             : 
  194759             :       /* name AST Memory Allocation Support Functions
  194760             :           \brief Memory allocations support....
  194761             : 
  194762             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  194763             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  194764             :           and support the AST File I/O Mechanism.
  194765             :        */
  194766             :       /* */
  194767             : 
  194768             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  194769             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  194770             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  194771             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  194772             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  194773             :           a correspinding one in the AST_FILE_IO class!
  194774             :        */
  194775             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  194776             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  194777             :       /* \brief Typedef used for low level memory access.
  194778             :        */
  194779             :        // typedef unsigned char* TestType;
  194780             : 
  194781             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  194782             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  194783             :       /* \brief Typedef used to hold memory addresses as values.
  194784             :        */
  194785             :        // typedef unsigned long  AddressType;
  194786             : 
  194787             : 
  194788             : 
  194789             :        // necessary, to have direct access to the p_freepointer and the private methods !
  194790             :       /*! \brief friend class declaration to support AST File I/O */
  194791             :           friend class AST_FILE_IO;
  194792             : 
  194793             :       /*! \brief friend class declaration to support AST File I/O */
  194794             :           friend class SgOmpTaskyieldStatementStorageClass;
  194795             : 
  194796             :       /*! \brief friend class declaration to support AST File I/O */
  194797             :           friend class AstSpecificDataManagingClass;
  194798             : 
  194799             :       /*! \brief friend class declaration to support AST File I/O */
  194800             :           friend class AstSpecificDataManagingClassStorageClass;
  194801             :     public:
  194802             :       /*! \brief IR node constructor to support AST File I/O */
  194803             :           SgOmpTaskyieldStatement( const SgOmpTaskyieldStatementStorageClass& source );
  194804             : 
  194805             :  // private: // JJW hack
  194806             :        /*
  194807             :           name AST Memory Allocation Support Variables
  194808             :           Memory allocations support variables 
  194809             : 
  194810             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  194811             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  194812             :           and support the AST File I/O Mechanism.
  194813             :        */
  194814             :       /* */
  194815             : 
  194816             :     public:
  194817             : 
  194818             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  194819             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  194820             :       // virtual SgNode* addRegExpAttribute();
  194821             :       /*! \brief Support for AST matching using regular expression.
  194822             : 
  194823             :           This support is incomplete and the subject of current research to define 
  194824             :           RegEx trees to support inexact matching.
  194825             :        */
  194826             :           SgOmpTaskyieldStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  194827             : 
  194828             : // *** COMMON CODE SECTION ENDS HERE ***
  194829             : 
  194830             : 
  194831             : // End of memberFunctionString
  194832             : // Start of memberFunctionString
  194833             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  194834             : 
  194835             :      // the generated cast function
  194836             :      // friend ROSE_DLL_API SgOmpTaskyieldStatement* isSgOmpTaskyieldStatement ( SgNode* s );
  194837             : 
  194838             :           typedef SgUpirBaseStatement base_node_type;
  194839             : 
  194840             : 
  194841             : // End of memberFunctionString
  194842             : // Start of memberFunctionString
  194843             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  194844             : 
  194845             :           void post_construction_initialization() override;
  194846             : 
  194847             : 
  194848             : // End of memberFunctionString
  194849             : 
  194850             : 
  194851             :      public: 
  194852             :          virtual ~SgOmpTaskyieldStatement();
  194853             : 
  194854             : 
  194855             :      public: 
  194856             :          SgOmpTaskyieldStatement(Sg_File_Info* startOfConstruct ); 
  194857             :          SgOmpTaskyieldStatement(); 
  194858             : 
  194859             :     protected:
  194860             : 
  194861             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskyieldStatement>;
  194862             : 
  194863             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194864             : 
  194865             : 
  194866             :    };
  194867             : #endif
  194868             : 
  194869             : // postdeclarations for SgOmpTaskyieldStatement
  194870             : 
  194871             : /* #line 194872 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194872             : 
  194873             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  194874             : 
  194875             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194876             : 
  194877             : 
  194878             : /* #line 194879 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194879             : 
  194880             : 
  194881             : 
  194882             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194883             : 
  194884             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  194885             : //      This code is automatically generated for each 
  194886             : //      terminal and non-terminal within the defined 
  194887             : //      grammar.  There is a simple way to change the 
  194888             : //      code to fix bugs etc.  See the ROSE README file
  194889             : //      for directions.
  194890             : 
  194891             : // tps: (02/22/2010): Adding DLL export requirements
  194892             : #include "rosedll.h"
  194893             : 
  194894             : // predeclarations for SgOmpBarrierStatement
  194895             : 
  194896             : /* #line 194897 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194897             : 
  194898             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  194899             : 
  194900             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  194901             : 
  194902             : #if 1
  194903             : // Class Definition for SgOmpBarrierStatement
  194904             : class ROSE_DLL_API SgOmpBarrierStatement  : public SgUpirBaseStatement
  194905             :    {
  194906             :      public:
  194907             : 
  194908             : 
  194909             : /* #line 194910 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  194910             : 
  194911             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  194912             : // Start of memberFunctionString
  194913             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  194914             : 
  194915             : // *** COMMON CODE SECTION BEGINS HERE ***
  194916             : 
  194917             :     public:
  194918             : 
  194919             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  194920             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  194921             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  194922             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  194923             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  194924             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  194925             : 
  194926             :       /*! \brief returns a string representing the class name */
  194927             :           virtual std::string class_name() const override;
  194928             : 
  194929             :       /*! \brief returns new style SageIII enum values */
  194930             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  194931             : 
  194932             :       /*! \brief static variant value */
  194933             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  194934             :        // static const VariantT static_variant = V_SgOmpBarrierStatement;
  194935             :           enum { static_variant = V_SgOmpBarrierStatement };
  194936             : 
  194937             :        /* the generated cast function */
  194938             :       /*! \brief Casts pointer from base class to derived class */
  194939             :           ROSE_DLL_API friend       SgOmpBarrierStatement* isSgOmpBarrierStatement(       SgNode * s );
  194940             : 
  194941             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  194942             :           ROSE_DLL_API friend const SgOmpBarrierStatement* isSgOmpBarrierStatement( const SgNode * s );
  194943             : 
  194944             :      // ******************************************
  194945             :      // * Memory Pool / New / Delete
  194946             :      // ******************************************
  194947             : 
  194948             :      public:
  194949             :           /// \private
  194950             :           static const unsigned pool_size; //
  194951             :           /// \private
  194952             :           static std::vector<unsigned char *> pools; //
  194953             :           /// \private
  194954             :           static SgOmpBarrierStatement * next_node; // 
  194955             : 
  194956             :           /// \private
  194957             :           static unsigned long initializeStorageClassArray(SgOmpBarrierStatementStorageClass *); //
  194958             : 
  194959             :           /// \private
  194960             :           static void clearMemoryPool(); //
  194961             :           static void deleteMemoryPool(); //
  194962             : 
  194963             :           /// \private
  194964             :           static void extendMemoryPoolForFileIO(); //
  194965             : 
  194966             :           /// \private
  194967             :           static SgOmpBarrierStatement * getPointerFromGlobalIndex(unsigned long); //
  194968             :           /// \private
  194969             :           static SgOmpBarrierStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  194970             : 
  194971             :           /// \private
  194972             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  194973             :           /// \private
  194974             :           static void resetValidFreepointers(); //
  194975             :           /// \private
  194976             :           static unsigned long getNumberOfLastValidPointer(); //
  194977             : 
  194978             : 
  194979             : #if defined(INLINE_FUNCTIONS)
  194980             :       /*! \brief returns pointer to newly allocated IR node */
  194981             :           inline void *operator new (size_t size);
  194982             : #else
  194983             :       /*! \brief returns pointer to newly allocated IR node */
  194984             :           void *operator new (size_t size);
  194985             : #endif
  194986             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  194987             :           void operator delete (void* pointer, size_t size);
  194988             : 
  194989             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  194990           0 :           void operator delete (void* pointer)
  194991             :              {
  194992             :             // This is the generated delete operator...
  194993           0 :                SgOmpBarrierStatement::operator delete (pointer,sizeof(SgOmpBarrierStatement));
  194994             :              }
  194995             : 
  194996             :       /*! \brief Returns the total number of IR nodes of this type */
  194997             :           static size_t numberOfNodes();
  194998             : 
  194999             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  195000             :           static size_t memoryUsage();
  195001             : 
  195002             :       // End of scope which started in IR nodes specific code 
  195003             :       /* */
  195004             : 
  195005             :       /* name Internal Functions
  195006             :           \brief Internal functions ... incomplete-documentation
  195007             : 
  195008             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195009             :           or by particularly knowledgeable users for specialized tools or applications.
  195010             : 
  195011             :           \internal We could not make these private because they are required by user for special purposes. And 
  195012             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  195013             :          
  195014             :        */
  195015             : 
  195016             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  195017             :        // overridden in every class by *generated* implementation
  195018             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  195019             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  195020             :        // MS: 06/28/02 container of names of variables or container indices 
  195021             :        // used used in the traversal to access AST successor nodes
  195022             :        // overridden in every class by *generated* implementation
  195023             :       /*! \brief container of names of variables or container indices used used in the traversal
  195024             :           to access AST successor nodes overridden in every class by *generated* implementation */
  195025             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  195026             : 
  195027             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  195028             :        // than all the vector copies. The implementation for these functions is generated for each class.
  195029             :       /*! \brief return number of children in the traversal successor list */
  195030             :           virtual size_t get_numberOfTraversalSuccessors() override;
  195031             :       /*! \brief index-based access to traversal successors by index number */
  195032             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  195033             :       /*! \brief index-based access to traversal successors by child node */
  195034             :           virtual size_t get_childIndex(SgNode *child) override;
  195035             : 
  195036             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  195037             :        // MS: 08/16/2002 method for generating RTI information
  195038             :       /*! \brief return C++ Runtime-Time-Information */
  195039             :           virtual RTIReturnType roseRTI() override;
  195040             : #endif
  195041             :       /* */
  195042             : 
  195043             : 
  195044             : 
  195045             :       /* name Deprecated Functions
  195046             :           \brief Deprecated functions ... incomplete-documentation
  195047             : 
  195048             :           These functions have been deprecated from use.
  195049             :        */
  195050             :       /* */
  195051             : 
  195052             :       /*! returns a C style string (char*) representing the class name */
  195053             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  195054             : 
  195055             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  195056             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  195057             : #if 0
  195058             :       /*! returns old style Sage II enum values */
  195059             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  195060             :       /*! returns old style Sage II enum values */
  195061             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  195062             : #endif
  195063             :       /* */
  195064             : 
  195065             : 
  195066             : 
  195067             : 
  195068             :      public:
  195069             :       /* name Traversal Support Functions
  195070             :           \brief Traversal support functions ... incomplete-documentation
  195071             : 
  195072             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195073             :           or by particularly knowledgable users for specialized tools or applications.
  195074             :        */
  195075             :       /* */
  195076             : 
  195077             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  195078             :        // (inferior to ROSE traversal mechanism, experimental).
  195079             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  195080             :        */
  195081             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  195082             : 
  195083             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  195084             :       /*! \brief support for the classic visitor pattern done in GoF */
  195085             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  195086             : 
  195087             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  195088             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  195089             :        */
  195090             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  195091             : 
  195092             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  195093             :        */
  195094             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  195095             : 
  195096             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  195097             :        // This traversal helps support internal tools that call static member functions.
  195098             :        // note: this function operates on the memory pools.
  195099             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  195100             :        */
  195101             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  195102             :       /* */
  195103             : 
  195104             : 
  195105             :      public:
  195106             :       /* name Memory Allocation Functions
  195107             :           \brief Memory allocations functions ... incomplete-documentation
  195108             : 
  195109             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195110             :           or by particularly knowledgable users for specialized tools or applications.
  195111             :        */
  195112             :       /* */
  195113             : 
  195114             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  195115             : 
  195116             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  195117             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  195118             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  195119             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  195120             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  195121             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  195122             :           being used with the AST File I/O mechanism.
  195123             :        */
  195124             :           virtual bool isInMemoryPool() override;
  195125             : 
  195126             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  195127             : 
  195128             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  195129             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  195130             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  195131             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  195132             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  195133             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  195134             :           being used with the AST File I/O mechanism.
  195135             :        */
  195136             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  195137             : 
  195138             :       // DQ (4/30/2006): Modified to be a const function.
  195139             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  195140             : 
  195141             :           This functions is part of general support for many possible tools to operate 
  195142             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  195143             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  195144             :           less than the set of pointers used by the AST file I/O. This is part of
  195145             :           work implemented by Andreas, and support tools such as the AST graph generation.
  195146             : 
  195147             :           \warning This function can return unexpected data members and thus the 
  195148             :                    order and the number of elements is unpredicable and subject 
  195149             :                    to change.
  195150             : 
  195151             :           \returns STL vector of pairs of SgNode* and strings
  195152             :        */
  195153             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  195154             : 
  195155             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  195156             : 
  195157             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  195158             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  195159             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  195160             : 
  195161             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  195162             :                    and subject to change.
  195163             :        */
  195164             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  195165             : 
  195166             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  195167             : 
  195168             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  195169             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  195170             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  195171             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  195172             : 
  195173             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  195174             : 
  195175             :           \returns long
  195176             :        */
  195177             :           virtual long getChildIndex( SgNode* childNode ) const override;
  195178             : 
  195179             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  195180             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  195181             :       /* \brief Constructor for use by AST File I/O Mechanism
  195182             : 
  195183             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  195184             :           which obtained via fast binary file I/O from disk.
  195185             :        */
  195186             :        // SgOmpBarrierStatement( SgOmpBarrierStatementStorageClass& source );
  195187             : 
  195188             : 
  195189             : 
  195190             : 
  195191             : 
  195192             :  // JH (10/24/2005): methods added to support the ast file IO
  195193             :     private:
  195194             : 
  195195             :       /* name AST Memory Allocation Support Functions
  195196             :           \brief Memory allocations support....
  195197             : 
  195198             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  195199             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  195200             :           and support the AST File I/O Mechanism.
  195201             :        */
  195202             :       /* */
  195203             : 
  195204             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  195205             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  195206             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  195207             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  195208             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  195209             :           a correspinding one in the AST_FILE_IO class!
  195210             :        */
  195211             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  195212             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  195213             :       /* \brief Typedef used for low level memory access.
  195214             :        */
  195215             :        // typedef unsigned char* TestType;
  195216             : 
  195217             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  195218             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  195219             :       /* \brief Typedef used to hold memory addresses as values.
  195220             :        */
  195221             :        // typedef unsigned long  AddressType;
  195222             : 
  195223             : 
  195224             : 
  195225             :        // necessary, to have direct access to the p_freepointer and the private methods !
  195226             :       /*! \brief friend class declaration to support AST File I/O */
  195227             :           friend class AST_FILE_IO;
  195228             : 
  195229             :       /*! \brief friend class declaration to support AST File I/O */
  195230             :           friend class SgOmpBarrierStatementStorageClass;
  195231             : 
  195232             :       /*! \brief friend class declaration to support AST File I/O */
  195233             :           friend class AstSpecificDataManagingClass;
  195234             : 
  195235             :       /*! \brief friend class declaration to support AST File I/O */
  195236             :           friend class AstSpecificDataManagingClassStorageClass;
  195237             :     public:
  195238             :       /*! \brief IR node constructor to support AST File I/O */
  195239             :           SgOmpBarrierStatement( const SgOmpBarrierStatementStorageClass& source );
  195240             : 
  195241             :  // private: // JJW hack
  195242             :        /*
  195243             :           name AST Memory Allocation Support Variables
  195244             :           Memory allocations support variables 
  195245             : 
  195246             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  195247             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  195248             :           and support the AST File I/O Mechanism.
  195249             :        */
  195250             :       /* */
  195251             : 
  195252             :     public:
  195253             : 
  195254             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  195255             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  195256             :       // virtual SgNode* addRegExpAttribute();
  195257             :       /*! \brief Support for AST matching using regular expression.
  195258             : 
  195259             :           This support is incomplete and the subject of current research to define 
  195260             :           RegEx trees to support inexact matching.
  195261             :        */
  195262             :           SgOmpBarrierStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  195263             : 
  195264             : // *** COMMON CODE SECTION ENDS HERE ***
  195265             : 
  195266             : 
  195267             : // End of memberFunctionString
  195268             : // Start of memberFunctionString
  195269             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  195270             : 
  195271             :      // the generated cast function
  195272             :      // friend ROSE_DLL_API SgOmpBarrierStatement* isSgOmpBarrierStatement ( SgNode* s );
  195273             : 
  195274             :           typedef SgUpirBaseStatement base_node_type;
  195275             : 
  195276             : 
  195277             : // End of memberFunctionString
  195278             : // Start of memberFunctionString
  195279             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  195280             : 
  195281             :           void post_construction_initialization() override;
  195282             : 
  195283             : 
  195284             : // End of memberFunctionString
  195285             : 
  195286             : 
  195287             :      public: 
  195288             :          virtual ~SgOmpBarrierStatement();
  195289             : 
  195290             : 
  195291             :      public: 
  195292             :          SgOmpBarrierStatement(Sg_File_Info* startOfConstruct ); 
  195293             :          SgOmpBarrierStatement(); 
  195294             : 
  195295             :     protected:
  195296             : 
  195297             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpBarrierStatement>;
  195298             : 
  195299             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195300             : 
  195301             : 
  195302             :    };
  195303             : #endif
  195304             : 
  195305             : // postdeclarations for SgOmpBarrierStatement
  195306             : 
  195307             : /* #line 195308 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195308             : 
  195309             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  195310             : 
  195311             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195312             : 
  195313             : 
  195314             : /* #line 195315 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195315             : 
  195316             : 
  195317             : 
  195318             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195319             : 
  195320             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  195321             : //      This code is automatically generated for each 
  195322             : //      terminal and non-terminal within the defined 
  195323             : //      grammar.  There is a simple way to change the 
  195324             : //      code to fix bugs etc.  See the ROSE README file
  195325             : //      for directions.
  195326             : 
  195327             : // tps: (02/22/2010): Adding DLL export requirements
  195328             : #include "rosedll.h"
  195329             : 
  195330             : // predeclarations for SgUpirBodyStatement
  195331             : 
  195332             : /* #line 195333 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195333             : 
  195334             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  195335             : 
  195336             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195337             : 
  195338             : #if 1
  195339             : // Class Definition for SgUpirBodyStatement
  195340             : class ROSE_DLL_API SgUpirBodyStatement  : public SgUpirBaseStatement
  195341             :    {
  195342             :      public:
  195343             : 
  195344             : 
  195345             : /* #line 195346 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195346             : 
  195347             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  195348             : // Start of memberFunctionString
  195349             : /* #line 19501 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  195350             : 
  195351             :       virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  195352             : 
  195353             :       public:
  195354             : 
  195355             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  195356             :       virtual unsigned int cfgIndexForEnd() const override;
  195357             :       virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  195358             :       virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  195359             : #endif
  195360             : 
  195361             : 
  195362             : 
  195363             : // End of memberFunctionString
  195364             : // Start of memberFunctionString
  195365             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  195366             : 
  195367             : // *** COMMON CODE SECTION BEGINS HERE ***
  195368             : 
  195369             :     public:
  195370             : 
  195371             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  195372             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  195373             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  195374             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  195375             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  195376             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  195377             : 
  195378             :       /*! \brief returns a string representing the class name */
  195379             :           virtual std::string class_name() const override;
  195380             : 
  195381             :       /*! \brief returns new style SageIII enum values */
  195382             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  195383             : 
  195384             :       /*! \brief static variant value */
  195385             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  195386             :        // static const VariantT static_variant = V_SgUpirBodyStatement;
  195387             :           enum { static_variant = V_SgUpirBodyStatement };
  195388             : 
  195389             :        /* the generated cast function */
  195390             :       /*! \brief Casts pointer from base class to derived class */
  195391             :           ROSE_DLL_API friend       SgUpirBodyStatement* isSgUpirBodyStatement(       SgNode * s );
  195392             : 
  195393             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  195394             :           ROSE_DLL_API friend const SgUpirBodyStatement* isSgUpirBodyStatement( const SgNode * s );
  195395             : 
  195396             :      // ******************************************
  195397             :      // * Memory Pool / New / Delete
  195398             :      // ******************************************
  195399             : 
  195400             :      public:
  195401             :           /// \private
  195402             :           static const unsigned pool_size; //
  195403             :           /// \private
  195404             :           static std::vector<unsigned char *> pools; //
  195405             :           /// \private
  195406             :           static SgUpirBodyStatement * next_node; // 
  195407             : 
  195408             :           /// \private
  195409             :           static unsigned long initializeStorageClassArray(SgUpirBodyStatementStorageClass *); //
  195410             : 
  195411             :           /// \private
  195412             :           static void clearMemoryPool(); //
  195413             :           static void deleteMemoryPool(); //
  195414             : 
  195415             :           /// \private
  195416             :           static void extendMemoryPoolForFileIO(); //
  195417             : 
  195418             :           /// \private
  195419             :           static SgUpirBodyStatement * getPointerFromGlobalIndex(unsigned long); //
  195420             :           /// \private
  195421             :           static SgUpirBodyStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  195422             : 
  195423             :           /// \private
  195424             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  195425             :           /// \private
  195426             :           static void resetValidFreepointers(); //
  195427             :           /// \private
  195428             :           static unsigned long getNumberOfLastValidPointer(); //
  195429             : 
  195430             : 
  195431             : #if defined(INLINE_FUNCTIONS)
  195432             :       /*! \brief returns pointer to newly allocated IR node */
  195433             :           inline void *operator new (size_t size);
  195434             : #else
  195435             :       /*! \brief returns pointer to newly allocated IR node */
  195436             :           void *operator new (size_t size);
  195437             : #endif
  195438             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  195439             :           void operator delete (void* pointer, size_t size);
  195440             : 
  195441             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  195442           0 :           void operator delete (void* pointer)
  195443             :              {
  195444             :             // This is the generated delete operator...
  195445           0 :                SgUpirBodyStatement::operator delete (pointer,sizeof(SgUpirBodyStatement));
  195446             :              }
  195447             : 
  195448             :       /*! \brief Returns the total number of IR nodes of this type */
  195449             :           static size_t numberOfNodes();
  195450             : 
  195451             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  195452             :           static size_t memoryUsage();
  195453             : 
  195454             :       // End of scope which started in IR nodes specific code 
  195455             :       /* */
  195456             : 
  195457             :       /* name Internal Functions
  195458             :           \brief Internal functions ... incomplete-documentation
  195459             : 
  195460             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195461             :           or by particularly knowledgeable users for specialized tools or applications.
  195462             : 
  195463             :           \internal We could not make these private because they are required by user for special purposes. And 
  195464             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  195465             :          
  195466             :        */
  195467             : 
  195468             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  195469             :        // overridden in every class by *generated* implementation
  195470             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  195471             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  195472             :        // MS: 06/28/02 container of names of variables or container indices 
  195473             :        // used used in the traversal to access AST successor nodes
  195474             :        // overridden in every class by *generated* implementation
  195475             :       /*! \brief container of names of variables or container indices used used in the traversal
  195476             :           to access AST successor nodes overridden in every class by *generated* implementation */
  195477             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  195478             : 
  195479             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  195480             :        // than all the vector copies. The implementation for these functions is generated for each class.
  195481             :       /*! \brief return number of children in the traversal successor list */
  195482             :           virtual size_t get_numberOfTraversalSuccessors() override;
  195483             :       /*! \brief index-based access to traversal successors by index number */
  195484             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  195485             :       /*! \brief index-based access to traversal successors by child node */
  195486             :           virtual size_t get_childIndex(SgNode *child) override;
  195487             : 
  195488             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  195489             :        // MS: 08/16/2002 method for generating RTI information
  195490             :       /*! \brief return C++ Runtime-Time-Information */
  195491             :           virtual RTIReturnType roseRTI() override;
  195492             : #endif
  195493             :       /* */
  195494             : 
  195495             : 
  195496             : 
  195497             :       /* name Deprecated Functions
  195498             :           \brief Deprecated functions ... incomplete-documentation
  195499             : 
  195500             :           These functions have been deprecated from use.
  195501             :        */
  195502             :       /* */
  195503             : 
  195504             :       /*! returns a C style string (char*) representing the class name */
  195505             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  195506             : 
  195507             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  195508             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  195509             : #if 0
  195510             :       /*! returns old style Sage II enum values */
  195511             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  195512             :       /*! returns old style Sage II enum values */
  195513             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  195514             : #endif
  195515             :       /* */
  195516             : 
  195517             : 
  195518             : 
  195519             : 
  195520             :      public:
  195521             :       /* name Traversal Support Functions
  195522             :           \brief Traversal support functions ... incomplete-documentation
  195523             : 
  195524             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195525             :           or by particularly knowledgable users for specialized tools or applications.
  195526             :        */
  195527             :       /* */
  195528             : 
  195529             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  195530             :        // (inferior to ROSE traversal mechanism, experimental).
  195531             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  195532             :        */
  195533             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  195534             : 
  195535             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  195536             :       /*! \brief support for the classic visitor pattern done in GoF */
  195537             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  195538             : 
  195539             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  195540             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  195541             :        */
  195542             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  195543             : 
  195544             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  195545             :        */
  195546             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  195547             : 
  195548             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  195549             :        // This traversal helps support internal tools that call static member functions.
  195550             :        // note: this function operates on the memory pools.
  195551             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  195552             :        */
  195553             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  195554             :       /* */
  195555             : 
  195556             : 
  195557             :      public:
  195558             :       /* name Memory Allocation Functions
  195559             :           \brief Memory allocations functions ... incomplete-documentation
  195560             : 
  195561             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195562             :           or by particularly knowledgable users for specialized tools or applications.
  195563             :        */
  195564             :       /* */
  195565             : 
  195566             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  195567             : 
  195568             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  195569             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  195570             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  195571             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  195572             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  195573             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  195574             :           being used with the AST File I/O mechanism.
  195575             :        */
  195576             :           virtual bool isInMemoryPool() override;
  195577             : 
  195578             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  195579             : 
  195580             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  195581             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  195582             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  195583             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  195584             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  195585             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  195586             :           being used with the AST File I/O mechanism.
  195587             :        */
  195588             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  195589             : 
  195590             :       // DQ (4/30/2006): Modified to be a const function.
  195591             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  195592             : 
  195593             :           This functions is part of general support for many possible tools to operate 
  195594             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  195595             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  195596             :           less than the set of pointers used by the AST file I/O. This is part of
  195597             :           work implemented by Andreas, and support tools such as the AST graph generation.
  195598             : 
  195599             :           \warning This function can return unexpected data members and thus the 
  195600             :                    order and the number of elements is unpredicable and subject 
  195601             :                    to change.
  195602             : 
  195603             :           \returns STL vector of pairs of SgNode* and strings
  195604             :        */
  195605             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  195606             : 
  195607             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  195608             : 
  195609             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  195610             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  195611             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  195612             : 
  195613             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  195614             :                    and subject to change.
  195615             :        */
  195616             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  195617             : 
  195618             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  195619             : 
  195620             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  195621             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  195622             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  195623             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  195624             : 
  195625             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  195626             : 
  195627             :           \returns long
  195628             :        */
  195629             :           virtual long getChildIndex( SgNode* childNode ) const override;
  195630             : 
  195631             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  195632             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  195633             :       /* \brief Constructor for use by AST File I/O Mechanism
  195634             : 
  195635             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  195636             :           which obtained via fast binary file I/O from disk.
  195637             :        */
  195638             :        // SgUpirBodyStatement( SgUpirBodyStatementStorageClass& source );
  195639             : 
  195640             : 
  195641             : 
  195642             : 
  195643             : 
  195644             :  // JH (10/24/2005): methods added to support the ast file IO
  195645             :     private:
  195646             : 
  195647             :       /* name AST Memory Allocation Support Functions
  195648             :           \brief Memory allocations support....
  195649             : 
  195650             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  195651             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  195652             :           and support the AST File I/O Mechanism.
  195653             :        */
  195654             :       /* */
  195655             : 
  195656             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  195657             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  195658             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  195659             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  195660             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  195661             :           a correspinding one in the AST_FILE_IO class!
  195662             :        */
  195663             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  195664             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  195665             :       /* \brief Typedef used for low level memory access.
  195666             :        */
  195667             :        // typedef unsigned char* TestType;
  195668             : 
  195669             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  195670             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  195671             :       /* \brief Typedef used to hold memory addresses as values.
  195672             :        */
  195673             :        // typedef unsigned long  AddressType;
  195674             : 
  195675             : 
  195676             : 
  195677             :        // necessary, to have direct access to the p_freepointer and the private methods !
  195678             :       /*! \brief friend class declaration to support AST File I/O */
  195679             :           friend class AST_FILE_IO;
  195680             : 
  195681             :       /*! \brief friend class declaration to support AST File I/O */
  195682             :           friend class SgUpirBodyStatementStorageClass;
  195683             : 
  195684             :       /*! \brief friend class declaration to support AST File I/O */
  195685             :           friend class AstSpecificDataManagingClass;
  195686             : 
  195687             :       /*! \brief friend class declaration to support AST File I/O */
  195688             :           friend class AstSpecificDataManagingClassStorageClass;
  195689             :     public:
  195690             :       /*! \brief IR node constructor to support AST File I/O */
  195691             :           SgUpirBodyStatement( const SgUpirBodyStatementStorageClass& source );
  195692             : 
  195693             :  // private: // JJW hack
  195694             :        /*
  195695             :           name AST Memory Allocation Support Variables
  195696             :           Memory allocations support variables 
  195697             : 
  195698             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  195699             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  195700             :           and support the AST File I/O Mechanism.
  195701             :        */
  195702             :       /* */
  195703             : 
  195704             :     public:
  195705             : 
  195706             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  195707             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  195708             :       // virtual SgNode* addRegExpAttribute();
  195709             :       /*! \brief Support for AST matching using regular expression.
  195710             : 
  195711             :           This support is incomplete and the subject of current research to define 
  195712             :           RegEx trees to support inexact matching.
  195713             :        */
  195714             :           SgUpirBodyStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  195715             : 
  195716             : // *** COMMON CODE SECTION ENDS HERE ***
  195717             : 
  195718             : 
  195719             : // End of memberFunctionString
  195720             : // Start of memberFunctionString
  195721             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  195722             : 
  195723             :      // the generated cast function
  195724             :      // friend ROSE_DLL_API SgUpirBodyStatement* isSgUpirBodyStatement ( SgNode* s );
  195725             : 
  195726             :           typedef SgUpirBaseStatement base_node_type;
  195727             : 
  195728             : 
  195729             : // End of memberFunctionString
  195730             : // Start of memberFunctionString
  195731             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  195732             : 
  195733             :           void post_construction_initialization() override;
  195734             : 
  195735             : 
  195736             : // End of memberFunctionString
  195737             : 
  195738             :      public: 
  195739             :          SgStatement* get_body() const;
  195740             :          void set_body(SgStatement* body);
  195741             : 
  195742             : 
  195743             :      public: 
  195744             :          virtual ~SgUpirBodyStatement();
  195745             : 
  195746             : 
  195747             :      public: 
  195748             :          SgUpirBodyStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  195749             :          SgUpirBodyStatement(SgStatement* body); 
  195750             : 
  195751             :     protected:
  195752             : // Start of memberFunctionString
  195753             : SgStatement* p_body;
  195754             :           
  195755             : // End of memberFunctionString
  195756             : 
  195757             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirBodyStatement>;
  195758             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirBodyStatement, SgStatement*,&SgUpirBodyStatement::p_body>;
  195759             : 
  195760             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195761             : 
  195762             : 
  195763             :    };
  195764             : #endif
  195765             : 
  195766             : // postdeclarations for SgUpirBodyStatement
  195767             : 
  195768             : /* #line 195769 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195769             : 
  195770             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  195771             : 
  195772             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195773             : 
  195774             : 
  195775             : /* #line 195776 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195776             : 
  195777             : 
  195778             : 
  195779             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195780             : 
  195781             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  195782             : //      This code is automatically generated for each 
  195783             : //      terminal and non-terminal within the defined 
  195784             : //      grammar.  There is a simple way to change the 
  195785             : //      code to fix bugs etc.  See the ROSE README file
  195786             : //      for directions.
  195787             : 
  195788             : // tps: (02/22/2010): Adding DLL export requirements
  195789             : #include "rosedll.h"
  195790             : 
  195791             : // predeclarations for SgOmpMasterStatement
  195792             : 
  195793             : /* #line 195794 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195794             : 
  195795             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  195796             : 
  195797             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  195798             : 
  195799             : #if 1
  195800             : // Class Definition for SgOmpMasterStatement
  195801             : class ROSE_DLL_API SgOmpMasterStatement  : public SgUpirBodyStatement
  195802             :    {
  195803             :      public:
  195804             : 
  195805             : 
  195806             : /* #line 195807 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  195807             : 
  195808             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  195809             : // Start of memberFunctionString
  195810             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  195811             : 
  195812             : // *** COMMON CODE SECTION BEGINS HERE ***
  195813             : 
  195814             :     public:
  195815             : 
  195816             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  195817             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  195818             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  195819             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  195820             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  195821             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  195822             : 
  195823             :       /*! \brief returns a string representing the class name */
  195824             :           virtual std::string class_name() const override;
  195825             : 
  195826             :       /*! \brief returns new style SageIII enum values */
  195827             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  195828             : 
  195829             :       /*! \brief static variant value */
  195830             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  195831             :        // static const VariantT static_variant = V_SgOmpMasterStatement;
  195832             :           enum { static_variant = V_SgOmpMasterStatement };
  195833             : 
  195834             :        /* the generated cast function */
  195835             :       /*! \brief Casts pointer from base class to derived class */
  195836             :           ROSE_DLL_API friend       SgOmpMasterStatement* isSgOmpMasterStatement(       SgNode * s );
  195837             : 
  195838             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  195839             :           ROSE_DLL_API friend const SgOmpMasterStatement* isSgOmpMasterStatement( const SgNode * s );
  195840             : 
  195841             :      // ******************************************
  195842             :      // * Memory Pool / New / Delete
  195843             :      // ******************************************
  195844             : 
  195845             :      public:
  195846             :           /// \private
  195847             :           static const unsigned pool_size; //
  195848             :           /// \private
  195849             :           static std::vector<unsigned char *> pools; //
  195850             :           /// \private
  195851             :           static SgOmpMasterStatement * next_node; // 
  195852             : 
  195853             :           /// \private
  195854             :           static unsigned long initializeStorageClassArray(SgOmpMasterStatementStorageClass *); //
  195855             : 
  195856             :           /// \private
  195857             :           static void clearMemoryPool(); //
  195858             :           static void deleteMemoryPool(); //
  195859             : 
  195860             :           /// \private
  195861             :           static void extendMemoryPoolForFileIO(); //
  195862             : 
  195863             :           /// \private
  195864             :           static SgOmpMasterStatement * getPointerFromGlobalIndex(unsigned long); //
  195865             :           /// \private
  195866             :           static SgOmpMasterStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  195867             : 
  195868             :           /// \private
  195869             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  195870             :           /// \private
  195871             :           static void resetValidFreepointers(); //
  195872             :           /// \private
  195873             :           static unsigned long getNumberOfLastValidPointer(); //
  195874             : 
  195875             : 
  195876             : #if defined(INLINE_FUNCTIONS)
  195877             :       /*! \brief returns pointer to newly allocated IR node */
  195878             :           inline void *operator new (size_t size);
  195879             : #else
  195880             :       /*! \brief returns pointer to newly allocated IR node */
  195881             :           void *operator new (size_t size);
  195882             : #endif
  195883             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  195884             :           void operator delete (void* pointer, size_t size);
  195885             : 
  195886             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  195887           0 :           void operator delete (void* pointer)
  195888             :              {
  195889             :             // This is the generated delete operator...
  195890           0 :                SgOmpMasterStatement::operator delete (pointer,sizeof(SgOmpMasterStatement));
  195891             :              }
  195892             : 
  195893             :       /*! \brief Returns the total number of IR nodes of this type */
  195894             :           static size_t numberOfNodes();
  195895             : 
  195896             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  195897             :           static size_t memoryUsage();
  195898             : 
  195899             :       // End of scope which started in IR nodes specific code 
  195900             :       /* */
  195901             : 
  195902             :       /* name Internal Functions
  195903             :           \brief Internal functions ... incomplete-documentation
  195904             : 
  195905             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195906             :           or by particularly knowledgeable users for specialized tools or applications.
  195907             : 
  195908             :           \internal We could not make these private because they are required by user for special purposes. And 
  195909             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  195910             :          
  195911             :        */
  195912             : 
  195913             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  195914             :        // overridden in every class by *generated* implementation
  195915             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  195916             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  195917             :        // MS: 06/28/02 container of names of variables or container indices 
  195918             :        // used used in the traversal to access AST successor nodes
  195919             :        // overridden in every class by *generated* implementation
  195920             :       /*! \brief container of names of variables or container indices used used in the traversal
  195921             :           to access AST successor nodes overridden in every class by *generated* implementation */
  195922             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  195923             : 
  195924             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  195925             :        // than all the vector copies. The implementation for these functions is generated for each class.
  195926             :       /*! \brief return number of children in the traversal successor list */
  195927             :           virtual size_t get_numberOfTraversalSuccessors() override;
  195928             :       /*! \brief index-based access to traversal successors by index number */
  195929             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  195930             :       /*! \brief index-based access to traversal successors by child node */
  195931             :           virtual size_t get_childIndex(SgNode *child) override;
  195932             : 
  195933             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  195934             :        // MS: 08/16/2002 method for generating RTI information
  195935             :       /*! \brief return C++ Runtime-Time-Information */
  195936             :           virtual RTIReturnType roseRTI() override;
  195937             : #endif
  195938             :       /* */
  195939             : 
  195940             : 
  195941             : 
  195942             :       /* name Deprecated Functions
  195943             :           \brief Deprecated functions ... incomplete-documentation
  195944             : 
  195945             :           These functions have been deprecated from use.
  195946             :        */
  195947             :       /* */
  195948             : 
  195949             :       /*! returns a C style string (char*) representing the class name */
  195950             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  195951             : 
  195952             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  195953             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  195954             : #if 0
  195955             :       /*! returns old style Sage II enum values */
  195956             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  195957             :       /*! returns old style Sage II enum values */
  195958             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  195959             : #endif
  195960             :       /* */
  195961             : 
  195962             : 
  195963             : 
  195964             : 
  195965             :      public:
  195966             :       /* name Traversal Support Functions
  195967             :           \brief Traversal support functions ... incomplete-documentation
  195968             : 
  195969             :           These functions have been made public as part of the design, but they are suggested for internal use 
  195970             :           or by particularly knowledgable users for specialized tools or applications.
  195971             :        */
  195972             :       /* */
  195973             : 
  195974             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  195975             :        // (inferior to ROSE traversal mechanism, experimental).
  195976             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  195977             :        */
  195978             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  195979             : 
  195980             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  195981             :       /*! \brief support for the classic visitor pattern done in GoF */
  195982             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  195983             : 
  195984             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  195985             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  195986             :        */
  195987             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  195988             : 
  195989             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  195990             :        */
  195991             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  195992             : 
  195993             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  195994             :        // This traversal helps support internal tools that call static member functions.
  195995             :        // note: this function operates on the memory pools.
  195996             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  195997             :        */
  195998             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  195999             :       /* */
  196000             : 
  196001             : 
  196002             :      public:
  196003             :       /* name Memory Allocation Functions
  196004             :           \brief Memory allocations functions ... incomplete-documentation
  196005             : 
  196006             :           These functions have been made public as part of the design, but they are suggested for internal use 
  196007             :           or by particularly knowledgable users for specialized tools or applications.
  196008             :        */
  196009             :       /* */
  196010             : 
  196011             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  196012             : 
  196013             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  196014             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  196015             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  196016             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  196017             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  196018             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  196019             :           being used with the AST File I/O mechanism.
  196020             :        */
  196021             :           virtual bool isInMemoryPool() override;
  196022             : 
  196023             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  196024             : 
  196025             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  196026             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  196027             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  196028             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  196029             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  196030             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  196031             :           being used with the AST File I/O mechanism.
  196032             :        */
  196033             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  196034             : 
  196035             :       // DQ (4/30/2006): Modified to be a const function.
  196036             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  196037             : 
  196038             :           This functions is part of general support for many possible tools to operate 
  196039             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  196040             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  196041             :           less than the set of pointers used by the AST file I/O. This is part of
  196042             :           work implemented by Andreas, and support tools such as the AST graph generation.
  196043             : 
  196044             :           \warning This function can return unexpected data members and thus the 
  196045             :                    order and the number of elements is unpredicable and subject 
  196046             :                    to change.
  196047             : 
  196048             :           \returns STL vector of pairs of SgNode* and strings
  196049             :        */
  196050             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  196051             : 
  196052             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  196053             : 
  196054             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  196055             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  196056             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  196057             : 
  196058             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  196059             :                    and subject to change.
  196060             :        */
  196061             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  196062             : 
  196063             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  196064             : 
  196065             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  196066             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  196067             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  196068             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  196069             : 
  196070             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  196071             : 
  196072             :           \returns long
  196073             :        */
  196074             :           virtual long getChildIndex( SgNode* childNode ) const override;
  196075             : 
  196076             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  196077             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196078             :       /* \brief Constructor for use by AST File I/O Mechanism
  196079             : 
  196080             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  196081             :           which obtained via fast binary file I/O from disk.
  196082             :        */
  196083             :        // SgOmpMasterStatement( SgOmpMasterStatementStorageClass& source );
  196084             : 
  196085             : 
  196086             : 
  196087             : 
  196088             : 
  196089             :  // JH (10/24/2005): methods added to support the ast file IO
  196090             :     private:
  196091             : 
  196092             :       /* name AST Memory Allocation Support Functions
  196093             :           \brief Memory allocations support....
  196094             : 
  196095             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  196096             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  196097             :           and support the AST File I/O Mechanism.
  196098             :        */
  196099             :       /* */
  196100             : 
  196101             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  196102             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  196103             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  196104             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  196105             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  196106             :           a correspinding one in the AST_FILE_IO class!
  196107             :        */
  196108             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  196109             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196110             :       /* \brief Typedef used for low level memory access.
  196111             :        */
  196112             :        // typedef unsigned char* TestType;
  196113             : 
  196114             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  196115             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196116             :       /* \brief Typedef used to hold memory addresses as values.
  196117             :        */
  196118             :        // typedef unsigned long  AddressType;
  196119             : 
  196120             : 
  196121             : 
  196122             :        // necessary, to have direct access to the p_freepointer and the private methods !
  196123             :       /*! \brief friend class declaration to support AST File I/O */
  196124             :           friend class AST_FILE_IO;
  196125             : 
  196126             :       /*! \brief friend class declaration to support AST File I/O */
  196127             :           friend class SgOmpMasterStatementStorageClass;
  196128             : 
  196129             :       /*! \brief friend class declaration to support AST File I/O */
  196130             :           friend class AstSpecificDataManagingClass;
  196131             : 
  196132             :       /*! \brief friend class declaration to support AST File I/O */
  196133             :           friend class AstSpecificDataManagingClassStorageClass;
  196134             :     public:
  196135             :       /*! \brief IR node constructor to support AST File I/O */
  196136             :           SgOmpMasterStatement( const SgOmpMasterStatementStorageClass& source );
  196137             : 
  196138             :  // private: // JJW hack
  196139             :        /*
  196140             :           name AST Memory Allocation Support Variables
  196141             :           Memory allocations support variables 
  196142             : 
  196143             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  196144             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  196145             :           and support the AST File I/O Mechanism.
  196146             :        */
  196147             :       /* */
  196148             : 
  196149             :     public:
  196150             : 
  196151             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  196152             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  196153             :       // virtual SgNode* addRegExpAttribute();
  196154             :       /*! \brief Support for AST matching using regular expression.
  196155             : 
  196156             :           This support is incomplete and the subject of current research to define 
  196157             :           RegEx trees to support inexact matching.
  196158             :        */
  196159             :           SgOmpMasterStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  196160             : 
  196161             : // *** COMMON CODE SECTION ENDS HERE ***
  196162             : 
  196163             : 
  196164             : // End of memberFunctionString
  196165             : // Start of memberFunctionString
  196166             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  196167             : 
  196168             :      // the generated cast function
  196169             :      // friend ROSE_DLL_API SgOmpMasterStatement* isSgOmpMasterStatement ( SgNode* s );
  196170             : 
  196171             :           typedef SgUpirBodyStatement base_node_type;
  196172             : 
  196173             : 
  196174             : // End of memberFunctionString
  196175             : // Start of memberFunctionString
  196176             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  196177             : 
  196178             :           void post_construction_initialization() override;
  196179             : 
  196180             : 
  196181             : // End of memberFunctionString
  196182             : 
  196183             : 
  196184             :      public: 
  196185             :          virtual ~SgOmpMasterStatement();
  196186             : 
  196187             : 
  196188             :      public: 
  196189             :          SgOmpMasterStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  196190             :          SgOmpMasterStatement(SgStatement* body); 
  196191             : 
  196192             :     protected:
  196193             : 
  196194             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpMasterStatement>;
  196195             : 
  196196             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196197             : 
  196198             : 
  196199             :    };
  196200             : #endif
  196201             : 
  196202             : // postdeclarations for SgOmpMasterStatement
  196203             : 
  196204             : /* #line 196205 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196205             : 
  196206             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  196207             : 
  196208             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196209             : 
  196210             : 
  196211             : /* #line 196212 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196212             : 
  196213             : 
  196214             : 
  196215             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196216             : 
  196217             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  196218             : //      This code is automatically generated for each 
  196219             : //      terminal and non-terminal within the defined 
  196220             : //      grammar.  There is a simple way to change the 
  196221             : //      code to fix bugs etc.  See the ROSE README file
  196222             : //      for directions.
  196223             : 
  196224             : // tps: (02/22/2010): Adding DLL export requirements
  196225             : #include "rosedll.h"
  196226             : 
  196227             : // predeclarations for SgOmpSectionStatement
  196228             : 
  196229             : /* #line 196230 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196230             : 
  196231             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  196232             : 
  196233             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196234             : 
  196235             : #if 1
  196236             : // Class Definition for SgOmpSectionStatement
  196237             : class ROSE_DLL_API SgOmpSectionStatement  : public SgUpirBodyStatement
  196238             :    {
  196239             :      public:
  196240             : 
  196241             : 
  196242             : /* #line 196243 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196243             : 
  196244             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  196245             : // Start of memberFunctionString
  196246             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  196247             : 
  196248             : // *** COMMON CODE SECTION BEGINS HERE ***
  196249             : 
  196250             :     public:
  196251             : 
  196252             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  196253             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  196254             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  196255             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  196256             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  196257             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  196258             : 
  196259             :       /*! \brief returns a string representing the class name */
  196260             :           virtual std::string class_name() const override;
  196261             : 
  196262             :       /*! \brief returns new style SageIII enum values */
  196263             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  196264             : 
  196265             :       /*! \brief static variant value */
  196266             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  196267             :        // static const VariantT static_variant = V_SgOmpSectionStatement;
  196268             :           enum { static_variant = V_SgOmpSectionStatement };
  196269             : 
  196270             :        /* the generated cast function */
  196271             :       /*! \brief Casts pointer from base class to derived class */
  196272             :           ROSE_DLL_API friend       SgOmpSectionStatement* isSgOmpSectionStatement(       SgNode * s );
  196273             : 
  196274             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  196275             :           ROSE_DLL_API friend const SgOmpSectionStatement* isSgOmpSectionStatement( const SgNode * s );
  196276             : 
  196277             :      // ******************************************
  196278             :      // * Memory Pool / New / Delete
  196279             :      // ******************************************
  196280             : 
  196281             :      public:
  196282             :           /// \private
  196283             :           static const unsigned pool_size; //
  196284             :           /// \private
  196285             :           static std::vector<unsigned char *> pools; //
  196286             :           /// \private
  196287             :           static SgOmpSectionStatement * next_node; // 
  196288             : 
  196289             :           /// \private
  196290             :           static unsigned long initializeStorageClassArray(SgOmpSectionStatementStorageClass *); //
  196291             : 
  196292             :           /// \private
  196293             :           static void clearMemoryPool(); //
  196294             :           static void deleteMemoryPool(); //
  196295             : 
  196296             :           /// \private
  196297             :           static void extendMemoryPoolForFileIO(); //
  196298             : 
  196299             :           /// \private
  196300             :           static SgOmpSectionStatement * getPointerFromGlobalIndex(unsigned long); //
  196301             :           /// \private
  196302             :           static SgOmpSectionStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  196303             : 
  196304             :           /// \private
  196305             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  196306             :           /// \private
  196307             :           static void resetValidFreepointers(); //
  196308             :           /// \private
  196309             :           static unsigned long getNumberOfLastValidPointer(); //
  196310             : 
  196311             : 
  196312             : #if defined(INLINE_FUNCTIONS)
  196313             :       /*! \brief returns pointer to newly allocated IR node */
  196314             :           inline void *operator new (size_t size);
  196315             : #else
  196316             :       /*! \brief returns pointer to newly allocated IR node */
  196317             :           void *operator new (size_t size);
  196318             : #endif
  196319             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  196320             :           void operator delete (void* pointer, size_t size);
  196321             : 
  196322             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  196323           0 :           void operator delete (void* pointer)
  196324             :              {
  196325             :             // This is the generated delete operator...
  196326           0 :                SgOmpSectionStatement::operator delete (pointer,sizeof(SgOmpSectionStatement));
  196327             :              }
  196328             : 
  196329             :       /*! \brief Returns the total number of IR nodes of this type */
  196330             :           static size_t numberOfNodes();
  196331             : 
  196332             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  196333             :           static size_t memoryUsage();
  196334             : 
  196335             :       // End of scope which started in IR nodes specific code 
  196336             :       /* */
  196337             : 
  196338             :       /* name Internal Functions
  196339             :           \brief Internal functions ... incomplete-documentation
  196340             : 
  196341             :           These functions have been made public as part of the design, but they are suggested for internal use 
  196342             :           or by particularly knowledgeable users for specialized tools or applications.
  196343             : 
  196344             :           \internal We could not make these private because they are required by user for special purposes. And 
  196345             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  196346             :          
  196347             :        */
  196348             : 
  196349             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  196350             :        // overridden in every class by *generated* implementation
  196351             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  196352             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  196353             :        // MS: 06/28/02 container of names of variables or container indices 
  196354             :        // used used in the traversal to access AST successor nodes
  196355             :        // overridden in every class by *generated* implementation
  196356             :       /*! \brief container of names of variables or container indices used used in the traversal
  196357             :           to access AST successor nodes overridden in every class by *generated* implementation */
  196358             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  196359             : 
  196360             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  196361             :        // than all the vector copies. The implementation for these functions is generated for each class.
  196362             :       /*! \brief return number of children in the traversal successor list */
  196363             :           virtual size_t get_numberOfTraversalSuccessors() override;
  196364             :       /*! \brief index-based access to traversal successors by index number */
  196365             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  196366             :       /*! \brief index-based access to traversal successors by child node */
  196367             :           virtual size_t get_childIndex(SgNode *child) override;
  196368             : 
  196369             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  196370             :        // MS: 08/16/2002 method for generating RTI information
  196371             :       /*! \brief return C++ Runtime-Time-Information */
  196372             :           virtual RTIReturnType roseRTI() override;
  196373             : #endif
  196374             :       /* */
  196375             : 
  196376             : 
  196377             : 
  196378             :       /* name Deprecated Functions
  196379             :           \brief Deprecated functions ... incomplete-documentation
  196380             : 
  196381             :           These functions have been deprecated from use.
  196382             :        */
  196383             :       /* */
  196384             : 
  196385             :       /*! returns a C style string (char*) representing the class name */
  196386             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  196387             : 
  196388             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  196389             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  196390             : #if 0
  196391             :       /*! returns old style Sage II enum values */
  196392             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  196393             :       /*! returns old style Sage II enum values */
  196394             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  196395             : #endif
  196396             :       /* */
  196397             : 
  196398             : 
  196399             : 
  196400             : 
  196401             :      public:
  196402             :       /* name Traversal Support Functions
  196403             :           \brief Traversal support functions ... incomplete-documentation
  196404             : 
  196405             :           These functions have been made public as part of the design, but they are suggested for internal use 
  196406             :           or by particularly knowledgable users for specialized tools or applications.
  196407             :        */
  196408             :       /* */
  196409             : 
  196410             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  196411             :        // (inferior to ROSE traversal mechanism, experimental).
  196412             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  196413             :        */
  196414             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  196415             : 
  196416             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  196417             :       /*! \brief support for the classic visitor pattern done in GoF */
  196418             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  196419             : 
  196420             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  196421             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  196422             :        */
  196423             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  196424             : 
  196425             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  196426             :        */
  196427             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  196428             : 
  196429             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  196430             :        // This traversal helps support internal tools that call static member functions.
  196431             :        // note: this function operates on the memory pools.
  196432             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  196433             :        */
  196434             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  196435             :       /* */
  196436             : 
  196437             : 
  196438             :      public:
  196439             :       /* name Memory Allocation Functions
  196440             :           \brief Memory allocations functions ... incomplete-documentation
  196441             : 
  196442             :           These functions have been made public as part of the design, but they are suggested for internal use 
  196443             :           or by particularly knowledgable users for specialized tools or applications.
  196444             :        */
  196445             :       /* */
  196446             : 
  196447             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  196448             : 
  196449             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  196450             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  196451             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  196452             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  196453             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  196454             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  196455             :           being used with the AST File I/O mechanism.
  196456             :        */
  196457             :           virtual bool isInMemoryPool() override;
  196458             : 
  196459             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  196460             : 
  196461             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  196462             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  196463             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  196464             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  196465             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  196466             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  196467             :           being used with the AST File I/O mechanism.
  196468             :        */
  196469             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  196470             : 
  196471             :       // DQ (4/30/2006): Modified to be a const function.
  196472             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  196473             : 
  196474             :           This functions is part of general support for many possible tools to operate 
  196475             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  196476             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  196477             :           less than the set of pointers used by the AST file I/O. This is part of
  196478             :           work implemented by Andreas, and support tools such as the AST graph generation.
  196479             : 
  196480             :           \warning This function can return unexpected data members and thus the 
  196481             :                    order and the number of elements is unpredicable and subject 
  196482             :                    to change.
  196483             : 
  196484             :           \returns STL vector of pairs of SgNode* and strings
  196485             :        */
  196486             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  196487             : 
  196488             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  196489             : 
  196490             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  196491             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  196492             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  196493             : 
  196494             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  196495             :                    and subject to change.
  196496             :        */
  196497             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  196498             : 
  196499             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  196500             : 
  196501             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  196502             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  196503             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  196504             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  196505             : 
  196506             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  196507             : 
  196508             :           \returns long
  196509             :        */
  196510             :           virtual long getChildIndex( SgNode* childNode ) const override;
  196511             : 
  196512             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  196513             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196514             :       /* \brief Constructor for use by AST File I/O Mechanism
  196515             : 
  196516             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  196517             :           which obtained via fast binary file I/O from disk.
  196518             :        */
  196519             :        // SgOmpSectionStatement( SgOmpSectionStatementStorageClass& source );
  196520             : 
  196521             : 
  196522             : 
  196523             : 
  196524             : 
  196525             :  // JH (10/24/2005): methods added to support the ast file IO
  196526             :     private:
  196527             : 
  196528             :       /* name AST Memory Allocation Support Functions
  196529             :           \brief Memory allocations support....
  196530             : 
  196531             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  196532             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  196533             :           and support the AST File I/O Mechanism.
  196534             :        */
  196535             :       /* */
  196536             : 
  196537             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  196538             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  196539             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  196540             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  196541             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  196542             :           a correspinding one in the AST_FILE_IO class!
  196543             :        */
  196544             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  196545             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196546             :       /* \brief Typedef used for low level memory access.
  196547             :        */
  196548             :        // typedef unsigned char* TestType;
  196549             : 
  196550             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  196551             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196552             :       /* \brief Typedef used to hold memory addresses as values.
  196553             :        */
  196554             :        // typedef unsigned long  AddressType;
  196555             : 
  196556             : 
  196557             : 
  196558             :        // necessary, to have direct access to the p_freepointer and the private methods !
  196559             :       /*! \brief friend class declaration to support AST File I/O */
  196560             :           friend class AST_FILE_IO;
  196561             : 
  196562             :       /*! \brief friend class declaration to support AST File I/O */
  196563             :           friend class SgOmpSectionStatementStorageClass;
  196564             : 
  196565             :       /*! \brief friend class declaration to support AST File I/O */
  196566             :           friend class AstSpecificDataManagingClass;
  196567             : 
  196568             :       /*! \brief friend class declaration to support AST File I/O */
  196569             :           friend class AstSpecificDataManagingClassStorageClass;
  196570             :     public:
  196571             :       /*! \brief IR node constructor to support AST File I/O */
  196572             :           SgOmpSectionStatement( const SgOmpSectionStatementStorageClass& source );
  196573             : 
  196574             :  // private: // JJW hack
  196575             :        /*
  196576             :           name AST Memory Allocation Support Variables
  196577             :           Memory allocations support variables 
  196578             : 
  196579             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  196580             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  196581             :           and support the AST File I/O Mechanism.
  196582             :        */
  196583             :       /* */
  196584             : 
  196585             :     public:
  196586             : 
  196587             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  196588             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  196589             :       // virtual SgNode* addRegExpAttribute();
  196590             :       /*! \brief Support for AST matching using regular expression.
  196591             : 
  196592             :           This support is incomplete and the subject of current research to define 
  196593             :           RegEx trees to support inexact matching.
  196594             :        */
  196595             :           SgOmpSectionStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  196596             : 
  196597             : // *** COMMON CODE SECTION ENDS HERE ***
  196598             : 
  196599             : 
  196600             : // End of memberFunctionString
  196601             : // Start of memberFunctionString
  196602             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  196603             : 
  196604             :      // the generated cast function
  196605             :      // friend ROSE_DLL_API SgOmpSectionStatement* isSgOmpSectionStatement ( SgNode* s );
  196606             : 
  196607             :           typedef SgUpirBodyStatement base_node_type;
  196608             : 
  196609             : 
  196610             : // End of memberFunctionString
  196611             : // Start of memberFunctionString
  196612             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  196613             : 
  196614             :           void post_construction_initialization() override;
  196615             : 
  196616             : 
  196617             : // End of memberFunctionString
  196618             : 
  196619             : 
  196620             :      public: 
  196621             :          virtual ~SgOmpSectionStatement();
  196622             : 
  196623             : 
  196624             :      public: 
  196625             :          SgOmpSectionStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  196626             :          SgOmpSectionStatement(SgStatement* body); 
  196627             : 
  196628             :     protected:
  196629             : 
  196630             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSectionStatement>;
  196631             : 
  196632             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196633             : 
  196634             : 
  196635             :    };
  196636             : #endif
  196637             : 
  196638             : // postdeclarations for SgOmpSectionStatement
  196639             : 
  196640             : /* #line 196641 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196641             : 
  196642             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  196643             : 
  196644             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196645             : 
  196646             : 
  196647             : /* #line 196648 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196648             : 
  196649             : 
  196650             : 
  196651             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196652             : 
  196653             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  196654             : //      This code is automatically generated for each 
  196655             : //      terminal and non-terminal within the defined 
  196656             : //      grammar.  There is a simple way to change the 
  196657             : //      code to fix bugs etc.  See the ROSE README file
  196658             : //      for directions.
  196659             : 
  196660             : // tps: (02/22/2010): Adding DLL export requirements
  196661             : #include "rosedll.h"
  196662             : 
  196663             : // predeclarations for SgOmpWorkshareStatement
  196664             : 
  196665             : /* #line 196666 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196666             : 
  196667             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  196668             : 
  196669             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  196670             : 
  196671             : #if 1
  196672             : // Class Definition for SgOmpWorkshareStatement
  196673             : class ROSE_DLL_API SgOmpWorkshareStatement  : public SgUpirBodyStatement
  196674             :    {
  196675             :      public:
  196676             : 
  196677             : 
  196678             : /* #line 196679 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  196679             : 
  196680             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  196681             : // Start of memberFunctionString
  196682             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  196683             : 
  196684             : // *** COMMON CODE SECTION BEGINS HERE ***
  196685             : 
  196686             :     public:
  196687             : 
  196688             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  196689             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  196690             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  196691             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  196692             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  196693             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  196694             : 
  196695             :       /*! \brief returns a string representing the class name */
  196696             :           virtual std::string class_name() const override;
  196697             : 
  196698             :       /*! \brief returns new style SageIII enum values */
  196699             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  196700             : 
  196701             :       /*! \brief static variant value */
  196702             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  196703             :        // static const VariantT static_variant = V_SgOmpWorkshareStatement;
  196704             :           enum { static_variant = V_SgOmpWorkshareStatement };
  196705             : 
  196706             :        /* the generated cast function */
  196707             :       /*! \brief Casts pointer from base class to derived class */
  196708             :           ROSE_DLL_API friend       SgOmpWorkshareStatement* isSgOmpWorkshareStatement(       SgNode * s );
  196709             : 
  196710             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  196711             :           ROSE_DLL_API friend const SgOmpWorkshareStatement* isSgOmpWorkshareStatement( const SgNode * s );
  196712             : 
  196713             :      // ******************************************
  196714             :      // * Memory Pool / New / Delete
  196715             :      // ******************************************
  196716             : 
  196717             :      public:
  196718             :           /// \private
  196719             :           static const unsigned pool_size; //
  196720             :           /// \private
  196721             :           static std::vector<unsigned char *> pools; //
  196722             :           /// \private
  196723             :           static SgOmpWorkshareStatement * next_node; // 
  196724             : 
  196725             :           /// \private
  196726             :           static unsigned long initializeStorageClassArray(SgOmpWorkshareStatementStorageClass *); //
  196727             : 
  196728             :           /// \private
  196729             :           static void clearMemoryPool(); //
  196730             :           static void deleteMemoryPool(); //
  196731             : 
  196732             :           /// \private
  196733             :           static void extendMemoryPoolForFileIO(); //
  196734             : 
  196735             :           /// \private
  196736             :           static SgOmpWorkshareStatement * getPointerFromGlobalIndex(unsigned long); //
  196737             :           /// \private
  196738             :           static SgOmpWorkshareStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  196739             : 
  196740             :           /// \private
  196741             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  196742             :           /// \private
  196743             :           static void resetValidFreepointers(); //
  196744             :           /// \private
  196745             :           static unsigned long getNumberOfLastValidPointer(); //
  196746             : 
  196747             : 
  196748             : #if defined(INLINE_FUNCTIONS)
  196749             :       /*! \brief returns pointer to newly allocated IR node */
  196750             :           inline void *operator new (size_t size);
  196751             : #else
  196752             :       /*! \brief returns pointer to newly allocated IR node */
  196753             :           void *operator new (size_t size);
  196754             : #endif
  196755             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  196756             :           void operator delete (void* pointer, size_t size);
  196757             : 
  196758             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  196759           0 :           void operator delete (void* pointer)
  196760             :              {
  196761             :             // This is the generated delete operator...
  196762           0 :                SgOmpWorkshareStatement::operator delete (pointer,sizeof(SgOmpWorkshareStatement));
  196763             :              }
  196764             : 
  196765             :       /*! \brief Returns the total number of IR nodes of this type */
  196766             :           static size_t numberOfNodes();
  196767             : 
  196768             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  196769             :           static size_t memoryUsage();
  196770             : 
  196771             :       // End of scope which started in IR nodes specific code 
  196772             :       /* */
  196773             : 
  196774             :       /* name Internal Functions
  196775             :           \brief Internal functions ... incomplete-documentation
  196776             : 
  196777             :           These functions have been made public as part of the design, but they are suggested for internal use 
  196778             :           or by particularly knowledgeable users for specialized tools or applications.
  196779             : 
  196780             :           \internal We could not make these private because they are required by user for special purposes. And 
  196781             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  196782             :          
  196783             :        */
  196784             : 
  196785             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  196786             :        // overridden in every class by *generated* implementation
  196787             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  196788             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  196789             :        // MS: 06/28/02 container of names of variables or container indices 
  196790             :        // used used in the traversal to access AST successor nodes
  196791             :        // overridden in every class by *generated* implementation
  196792             :       /*! \brief container of names of variables or container indices used used in the traversal
  196793             :           to access AST successor nodes overridden in every class by *generated* implementation */
  196794             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  196795             : 
  196796             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  196797             :        // than all the vector copies. The implementation for these functions is generated for each class.
  196798             :       /*! \brief return number of children in the traversal successor list */
  196799             :           virtual size_t get_numberOfTraversalSuccessors() override;
  196800             :       /*! \brief index-based access to traversal successors by index number */
  196801             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  196802             :       /*! \brief index-based access to traversal successors by child node */
  196803             :           virtual size_t get_childIndex(SgNode *child) override;
  196804             : 
  196805             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  196806             :        // MS: 08/16/2002 method for generating RTI information
  196807             :       /*! \brief return C++ Runtime-Time-Information */
  196808             :           virtual RTIReturnType roseRTI() override;
  196809             : #endif
  196810             :       /* */
  196811             : 
  196812             : 
  196813             : 
  196814             :       /* name Deprecated Functions
  196815             :           \brief Deprecated functions ... incomplete-documentation
  196816             : 
  196817             :           These functions have been deprecated from use.
  196818             :        */
  196819             :       /* */
  196820             : 
  196821             :       /*! returns a C style string (char*) representing the class name */
  196822             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  196823             : 
  196824             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  196825             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  196826             : #if 0
  196827             :       /*! returns old style Sage II enum values */
  196828             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  196829             :       /*! returns old style Sage II enum values */
  196830             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  196831             : #endif
  196832             :       /* */
  196833             : 
  196834             : 
  196835             : 
  196836             : 
  196837             :      public:
  196838             :       /* name Traversal Support Functions
  196839             :           \brief Traversal support functions ... incomplete-documentation
  196840             : 
  196841             :           These functions have been made public as part of the design, but they are suggested for internal use 
  196842             :           or by particularly knowledgable users for specialized tools or applications.
  196843             :        */
  196844             :       /* */
  196845             : 
  196846             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  196847             :        // (inferior to ROSE traversal mechanism, experimental).
  196848             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  196849             :        */
  196850             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  196851             : 
  196852             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  196853             :       /*! \brief support for the classic visitor pattern done in GoF */
  196854             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  196855             : 
  196856             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  196857             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  196858             :        */
  196859             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  196860             : 
  196861             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  196862             :        */
  196863             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  196864             : 
  196865             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  196866             :        // This traversal helps support internal tools that call static member functions.
  196867             :        // note: this function operates on the memory pools.
  196868             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  196869             :        */
  196870             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  196871             :       /* */
  196872             : 
  196873             : 
  196874             :      public:
  196875             :       /* name Memory Allocation Functions
  196876             :           \brief Memory allocations functions ... incomplete-documentation
  196877             : 
  196878             :           These functions have been made public as part of the design, but they are suggested for internal use 
  196879             :           or by particularly knowledgable users for specialized tools or applications.
  196880             :        */
  196881             :       /* */
  196882             : 
  196883             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  196884             : 
  196885             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  196886             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  196887             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  196888             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  196889             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  196890             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  196891             :           being used with the AST File I/O mechanism.
  196892             :        */
  196893             :           virtual bool isInMemoryPool() override;
  196894             : 
  196895             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  196896             : 
  196897             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  196898             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  196899             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  196900             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  196901             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  196902             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  196903             :           being used with the AST File I/O mechanism.
  196904             :        */
  196905             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  196906             : 
  196907             :       // DQ (4/30/2006): Modified to be a const function.
  196908             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  196909             : 
  196910             :           This functions is part of general support for many possible tools to operate 
  196911             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  196912             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  196913             :           less than the set of pointers used by the AST file I/O. This is part of
  196914             :           work implemented by Andreas, and support tools such as the AST graph generation.
  196915             : 
  196916             :           \warning This function can return unexpected data members and thus the 
  196917             :                    order and the number of elements is unpredicable and subject 
  196918             :                    to change.
  196919             : 
  196920             :           \returns STL vector of pairs of SgNode* and strings
  196921             :        */
  196922             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  196923             : 
  196924             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  196925             : 
  196926             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  196927             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  196928             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  196929             : 
  196930             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  196931             :                    and subject to change.
  196932             :        */
  196933             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  196934             : 
  196935             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  196936             : 
  196937             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  196938             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  196939             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  196940             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  196941             : 
  196942             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  196943             : 
  196944             :           \returns long
  196945             :        */
  196946             :           virtual long getChildIndex( SgNode* childNode ) const override;
  196947             : 
  196948             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  196949             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196950             :       /* \brief Constructor for use by AST File I/O Mechanism
  196951             : 
  196952             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  196953             :           which obtained via fast binary file I/O from disk.
  196954             :        */
  196955             :        // SgOmpWorkshareStatement( SgOmpWorkshareStatementStorageClass& source );
  196956             : 
  196957             : 
  196958             : 
  196959             : 
  196960             : 
  196961             :  // JH (10/24/2005): methods added to support the ast file IO
  196962             :     private:
  196963             : 
  196964             :       /* name AST Memory Allocation Support Functions
  196965             :           \brief Memory allocations support....
  196966             : 
  196967             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  196968             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  196969             :           and support the AST File I/O Mechanism.
  196970             :        */
  196971             :       /* */
  196972             : 
  196973             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  196974             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  196975             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  196976             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  196977             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  196978             :           a correspinding one in the AST_FILE_IO class!
  196979             :        */
  196980             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  196981             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196982             :       /* \brief Typedef used for low level memory access.
  196983             :        */
  196984             :        // typedef unsigned char* TestType;
  196985             : 
  196986             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  196987             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  196988             :       /* \brief Typedef used to hold memory addresses as values.
  196989             :        */
  196990             :        // typedef unsigned long  AddressType;
  196991             : 
  196992             : 
  196993             : 
  196994             :        // necessary, to have direct access to the p_freepointer and the private methods !
  196995             :       /*! \brief friend class declaration to support AST File I/O */
  196996             :           friend class AST_FILE_IO;
  196997             : 
  196998             :       /*! \brief friend class declaration to support AST File I/O */
  196999             :           friend class SgOmpWorkshareStatementStorageClass;
  197000             : 
  197001             :       /*! \brief friend class declaration to support AST File I/O */
  197002             :           friend class AstSpecificDataManagingClass;
  197003             : 
  197004             :       /*! \brief friend class declaration to support AST File I/O */
  197005             :           friend class AstSpecificDataManagingClassStorageClass;
  197006             :     public:
  197007             :       /*! \brief IR node constructor to support AST File I/O */
  197008             :           SgOmpWorkshareStatement( const SgOmpWorkshareStatementStorageClass& source );
  197009             : 
  197010             :  // private: // JJW hack
  197011             :        /*
  197012             :           name AST Memory Allocation Support Variables
  197013             :           Memory allocations support variables 
  197014             : 
  197015             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  197016             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  197017             :           and support the AST File I/O Mechanism.
  197018             :        */
  197019             :       /* */
  197020             : 
  197021             :     public:
  197022             : 
  197023             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  197024             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  197025             :       // virtual SgNode* addRegExpAttribute();
  197026             :       /*! \brief Support for AST matching using regular expression.
  197027             : 
  197028             :           This support is incomplete and the subject of current research to define 
  197029             :           RegEx trees to support inexact matching.
  197030             :        */
  197031             :           SgOmpWorkshareStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  197032             : 
  197033             : // *** COMMON CODE SECTION ENDS HERE ***
  197034             : 
  197035             : 
  197036             : // End of memberFunctionString
  197037             : // Start of memberFunctionString
  197038             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  197039             : 
  197040             :      // the generated cast function
  197041             :      // friend ROSE_DLL_API SgOmpWorkshareStatement* isSgOmpWorkshareStatement ( SgNode* s );
  197042             : 
  197043             :           typedef SgUpirBodyStatement base_node_type;
  197044             : 
  197045             : 
  197046             : // End of memberFunctionString
  197047             : // Start of memberFunctionString
  197048             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  197049             : 
  197050             :           void post_construction_initialization() override;
  197051             : 
  197052             : 
  197053             : // End of memberFunctionString
  197054             : 
  197055             : 
  197056             :      public: 
  197057             :          virtual ~SgOmpWorkshareStatement();
  197058             : 
  197059             : 
  197060             :      public: 
  197061             :          SgOmpWorkshareStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  197062             :          SgOmpWorkshareStatement(SgStatement* body); 
  197063             : 
  197064             :     protected:
  197065             : 
  197066             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpWorkshareStatement>;
  197067             : 
  197068             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197069             : 
  197070             : 
  197071             :    };
  197072             : #endif
  197073             : 
  197074             : // postdeclarations for SgOmpWorkshareStatement
  197075             : 
  197076             : /* #line 197077 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197077             : 
  197078             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  197079             : 
  197080             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197081             : 
  197082             : 
  197083             : /* #line 197084 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197084             : 
  197085             : 
  197086             : 
  197087             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197088             : 
  197089             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  197090             : //      This code is automatically generated for each 
  197091             : //      terminal and non-terminal within the defined 
  197092             : //      grammar.  There is a simple way to change the 
  197093             : //      code to fix bugs etc.  See the ROSE README file
  197094             : //      for directions.
  197095             : 
  197096             : // tps: (02/22/2010): Adding DLL export requirements
  197097             : #include "rosedll.h"
  197098             : 
  197099             : // predeclarations for SgUpirFieldBodyStatement
  197100             : 
  197101             : /* #line 197102 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197102             : 
  197103             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  197104             : 
  197105             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197106             : 
  197107             : #if 1
  197108             : // Class Definition for SgUpirFieldBodyStatement
  197109             : class ROSE_DLL_API SgUpirFieldBodyStatement  : public SgUpirBodyStatement
  197110             :    {
  197111             :      public:
  197112             : 
  197113             : 
  197114             : /* #line 197115 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197115             : 
  197116             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  197117             : // Start of memberFunctionString
  197118             : /* #line 19536 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  197119             : 
  197120             :       public:
  197121             : 
  197122             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  197123             :       virtual unsigned int cfgIndexForEnd() const override;
  197124             :       virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  197125             :       virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  197126             : #endif
  197127             : 
  197128             : 
  197129             : 
  197130             : // End of memberFunctionString
  197131             : // Start of memberFunctionString
  197132             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  197133             : 
  197134             : // *** COMMON CODE SECTION BEGINS HERE ***
  197135             : 
  197136             :     public:
  197137             : 
  197138             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  197139             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  197140             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  197141             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  197142             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  197143             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  197144             : 
  197145             :       /*! \brief returns a string representing the class name */
  197146             :           virtual std::string class_name() const override;
  197147             : 
  197148             :       /*! \brief returns new style SageIII enum values */
  197149             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  197150             : 
  197151             :       /*! \brief static variant value */
  197152             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  197153             :        // static const VariantT static_variant = V_SgUpirFieldBodyStatement;
  197154             :           enum { static_variant = V_SgUpirFieldBodyStatement };
  197155             : 
  197156             :        /* the generated cast function */
  197157             :       /*! \brief Casts pointer from base class to derived class */
  197158             :           ROSE_DLL_API friend       SgUpirFieldBodyStatement* isSgUpirFieldBodyStatement(       SgNode * s );
  197159             : 
  197160             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  197161             :           ROSE_DLL_API friend const SgUpirFieldBodyStatement* isSgUpirFieldBodyStatement( const SgNode * s );
  197162             : 
  197163             :      // ******************************************
  197164             :      // * Memory Pool / New / Delete
  197165             :      // ******************************************
  197166             : 
  197167             :      public:
  197168             :           /// \private
  197169             :           static const unsigned pool_size; //
  197170             :           /// \private
  197171             :           static std::vector<unsigned char *> pools; //
  197172             :           /// \private
  197173             :           static SgUpirFieldBodyStatement * next_node; // 
  197174             : 
  197175             :           /// \private
  197176             :           static unsigned long initializeStorageClassArray(SgUpirFieldBodyStatementStorageClass *); //
  197177             : 
  197178             :           /// \private
  197179             :           static void clearMemoryPool(); //
  197180             :           static void deleteMemoryPool(); //
  197181             : 
  197182             :           /// \private
  197183             :           static void extendMemoryPoolForFileIO(); //
  197184             : 
  197185             :           /// \private
  197186             :           static SgUpirFieldBodyStatement * getPointerFromGlobalIndex(unsigned long); //
  197187             :           /// \private
  197188             :           static SgUpirFieldBodyStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  197189             : 
  197190             :           /// \private
  197191             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  197192             :           /// \private
  197193             :           static void resetValidFreepointers(); //
  197194             :           /// \private
  197195             :           static unsigned long getNumberOfLastValidPointer(); //
  197196             : 
  197197             : 
  197198             : #if defined(INLINE_FUNCTIONS)
  197199             :       /*! \brief returns pointer to newly allocated IR node */
  197200             :           inline void *operator new (size_t size);
  197201             : #else
  197202             :       /*! \brief returns pointer to newly allocated IR node */
  197203             :           void *operator new (size_t size);
  197204             : #endif
  197205             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  197206             :           void operator delete (void* pointer, size_t size);
  197207             : 
  197208             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  197209           0 :           void operator delete (void* pointer)
  197210             :              {
  197211             :             // This is the generated delete operator...
  197212           0 :                SgUpirFieldBodyStatement::operator delete (pointer,sizeof(SgUpirFieldBodyStatement));
  197213             :              }
  197214             : 
  197215             :       /*! \brief Returns the total number of IR nodes of this type */
  197216             :           static size_t numberOfNodes();
  197217             : 
  197218             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  197219             :           static size_t memoryUsage();
  197220             : 
  197221             :       // End of scope which started in IR nodes specific code 
  197222             :       /* */
  197223             : 
  197224             :       /* name Internal Functions
  197225             :           \brief Internal functions ... incomplete-documentation
  197226             : 
  197227             :           These functions have been made public as part of the design, but they are suggested for internal use 
  197228             :           or by particularly knowledgeable users for specialized tools or applications.
  197229             : 
  197230             :           \internal We could not make these private because they are required by user for special purposes. And 
  197231             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  197232             :          
  197233             :        */
  197234             : 
  197235             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  197236             :        // overridden in every class by *generated* implementation
  197237             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  197238             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  197239             :        // MS: 06/28/02 container of names of variables or container indices 
  197240             :        // used used in the traversal to access AST successor nodes
  197241             :        // overridden in every class by *generated* implementation
  197242             :       /*! \brief container of names of variables or container indices used used in the traversal
  197243             :           to access AST successor nodes overridden in every class by *generated* implementation */
  197244             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  197245             : 
  197246             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  197247             :        // than all the vector copies. The implementation for these functions is generated for each class.
  197248             :       /*! \brief return number of children in the traversal successor list */
  197249             :           virtual size_t get_numberOfTraversalSuccessors() override;
  197250             :       /*! \brief index-based access to traversal successors by index number */
  197251             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  197252             :       /*! \brief index-based access to traversal successors by child node */
  197253             :           virtual size_t get_childIndex(SgNode *child) override;
  197254             : 
  197255             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  197256             :        // MS: 08/16/2002 method for generating RTI information
  197257             :       /*! \brief return C++ Runtime-Time-Information */
  197258             :           virtual RTIReturnType roseRTI() override;
  197259             : #endif
  197260             :       /* */
  197261             : 
  197262             : 
  197263             : 
  197264             :       /* name Deprecated Functions
  197265             :           \brief Deprecated functions ... incomplete-documentation
  197266             : 
  197267             :           These functions have been deprecated from use.
  197268             :        */
  197269             :       /* */
  197270             : 
  197271             :       /*! returns a C style string (char*) representing the class name */
  197272             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  197273             : 
  197274             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  197275             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  197276             : #if 0
  197277             :       /*! returns old style Sage II enum values */
  197278             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  197279             :       /*! returns old style Sage II enum values */
  197280             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  197281             : #endif
  197282             :       /* */
  197283             : 
  197284             : 
  197285             : 
  197286             : 
  197287             :      public:
  197288             :       /* name Traversal Support Functions
  197289             :           \brief Traversal support functions ... incomplete-documentation
  197290             : 
  197291             :           These functions have been made public as part of the design, but they are suggested for internal use 
  197292             :           or by particularly knowledgable users for specialized tools or applications.
  197293             :        */
  197294             :       /* */
  197295             : 
  197296             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  197297             :        // (inferior to ROSE traversal mechanism, experimental).
  197298             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  197299             :        */
  197300             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  197301             : 
  197302             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  197303             :       /*! \brief support for the classic visitor pattern done in GoF */
  197304             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  197305             : 
  197306             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  197307             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  197308             :        */
  197309             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  197310             : 
  197311             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  197312             :        */
  197313             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  197314             : 
  197315             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  197316             :        // This traversal helps support internal tools that call static member functions.
  197317             :        // note: this function operates on the memory pools.
  197318             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  197319             :        */
  197320             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  197321             :       /* */
  197322             : 
  197323             : 
  197324             :      public:
  197325             :       /* name Memory Allocation Functions
  197326             :           \brief Memory allocations functions ... incomplete-documentation
  197327             : 
  197328             :           These functions have been made public as part of the design, but they are suggested for internal use 
  197329             :           or by particularly knowledgable users for specialized tools or applications.
  197330             :        */
  197331             :       /* */
  197332             : 
  197333             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  197334             : 
  197335             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  197336             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  197337             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  197338             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  197339             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  197340             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  197341             :           being used with the AST File I/O mechanism.
  197342             :        */
  197343             :           virtual bool isInMemoryPool() override;
  197344             : 
  197345             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  197346             : 
  197347             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  197348             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  197349             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  197350             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  197351             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  197352             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  197353             :           being used with the AST File I/O mechanism.
  197354             :        */
  197355             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  197356             : 
  197357             :       // DQ (4/30/2006): Modified to be a const function.
  197358             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  197359             : 
  197360             :           This functions is part of general support for many possible tools to operate 
  197361             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  197362             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  197363             :           less than the set of pointers used by the AST file I/O. This is part of
  197364             :           work implemented by Andreas, and support tools such as the AST graph generation.
  197365             : 
  197366             :           \warning This function can return unexpected data members and thus the 
  197367             :                    order and the number of elements is unpredicable and subject 
  197368             :                    to change.
  197369             : 
  197370             :           \returns STL vector of pairs of SgNode* and strings
  197371             :        */
  197372             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  197373             : 
  197374             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  197375             : 
  197376             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  197377             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  197378             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  197379             : 
  197380             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  197381             :                    and subject to change.
  197382             :        */
  197383             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  197384             : 
  197385             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  197386             : 
  197387             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  197388             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  197389             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  197390             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  197391             : 
  197392             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  197393             : 
  197394             :           \returns long
  197395             :        */
  197396             :           virtual long getChildIndex( SgNode* childNode ) const override;
  197397             : 
  197398             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  197399             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  197400             :       /* \brief Constructor for use by AST File I/O Mechanism
  197401             : 
  197402             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  197403             :           which obtained via fast binary file I/O from disk.
  197404             :        */
  197405             :        // SgUpirFieldBodyStatement( SgUpirFieldBodyStatementStorageClass& source );
  197406             : 
  197407             : 
  197408             : 
  197409             : 
  197410             : 
  197411             :  // JH (10/24/2005): methods added to support the ast file IO
  197412             :     private:
  197413             : 
  197414             :       /* name AST Memory Allocation Support Functions
  197415             :           \brief Memory allocations support....
  197416             : 
  197417             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  197418             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  197419             :           and support the AST File I/O Mechanism.
  197420             :        */
  197421             :       /* */
  197422             : 
  197423             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  197424             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  197425             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  197426             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  197427             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  197428             :           a correspinding one in the AST_FILE_IO class!
  197429             :        */
  197430             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  197431             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  197432             :       /* \brief Typedef used for low level memory access.
  197433             :        */
  197434             :        // typedef unsigned char* TestType;
  197435             : 
  197436             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  197437             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  197438             :       /* \brief Typedef used to hold memory addresses as values.
  197439             :        */
  197440             :        // typedef unsigned long  AddressType;
  197441             : 
  197442             : 
  197443             : 
  197444             :        // necessary, to have direct access to the p_freepointer and the private methods !
  197445             :       /*! \brief friend class declaration to support AST File I/O */
  197446             :           friend class AST_FILE_IO;
  197447             : 
  197448             :       /*! \brief friend class declaration to support AST File I/O */
  197449             :           friend class SgUpirFieldBodyStatementStorageClass;
  197450             : 
  197451             :       /*! \brief friend class declaration to support AST File I/O */
  197452             :           friend class AstSpecificDataManagingClass;
  197453             : 
  197454             :       /*! \brief friend class declaration to support AST File I/O */
  197455             :           friend class AstSpecificDataManagingClassStorageClass;
  197456             :     public:
  197457             :       /*! \brief IR node constructor to support AST File I/O */
  197458             :           SgUpirFieldBodyStatement( const SgUpirFieldBodyStatementStorageClass& source );
  197459             : 
  197460             :  // private: // JJW hack
  197461             :        /*
  197462             :           name AST Memory Allocation Support Variables
  197463             :           Memory allocations support variables 
  197464             : 
  197465             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  197466             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  197467             :           and support the AST File I/O Mechanism.
  197468             :        */
  197469             :       /* */
  197470             : 
  197471             :     public:
  197472             : 
  197473             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  197474             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  197475             :       // virtual SgNode* addRegExpAttribute();
  197476             :       /*! \brief Support for AST matching using regular expression.
  197477             : 
  197478             :           This support is incomplete and the subject of current research to define 
  197479             :           RegEx trees to support inexact matching.
  197480             :        */
  197481             :           SgUpirFieldBodyStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  197482             : 
  197483             : // *** COMMON CODE SECTION ENDS HERE ***
  197484             : 
  197485             : 
  197486             : // End of memberFunctionString
  197487             : // Start of memberFunctionString
  197488             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  197489             : 
  197490             :      // the generated cast function
  197491             :      // friend ROSE_DLL_API SgUpirFieldBodyStatement* isSgUpirFieldBodyStatement ( SgNode* s );
  197492             : 
  197493             :           typedef SgUpirBodyStatement base_node_type;
  197494             : 
  197495             : 
  197496             : // End of memberFunctionString
  197497             : // Start of memberFunctionString
  197498             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  197499             : 
  197500             :           void post_construction_initialization() override;
  197501             : 
  197502             : 
  197503             : // End of memberFunctionString
  197504             : 
  197505             :      public: 
  197506             :          const SgOmpClausePtrList&  get_clauses() const;
  197507             :          SgOmpClausePtrList& get_clauses(); 
  197508             : 
  197509             : 
  197510             :      public: 
  197511             :          virtual ~SgUpirFieldBodyStatement();
  197512             : 
  197513             : 
  197514             :      public: 
  197515             :          SgUpirFieldBodyStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  197516             :          SgUpirFieldBodyStatement(SgStatement* body); 
  197517             : 
  197518             :     protected:
  197519             : // Start of memberFunctionString
  197520             : SgOmpClausePtrList p_clauses;
  197521             :           
  197522             : // End of memberFunctionString
  197523             : 
  197524             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirFieldBodyStatement>;
  197525             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirFieldBodyStatement, SgOmpClausePtrList,&SgUpirFieldBodyStatement::p_clauses>;
  197526             : 
  197527             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197528             : 
  197529             : 
  197530             :    };
  197531             : #endif
  197532             : 
  197533             : // postdeclarations for SgUpirFieldBodyStatement
  197534             : 
  197535             : /* #line 197536 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197536             : 
  197537             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  197538             : 
  197539             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197540             : 
  197541             : 
  197542             : /* #line 197543 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197543             : 
  197544             : 
  197545             : 
  197546             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197547             : 
  197548             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  197549             : //      This code is automatically generated for each 
  197550             : //      terminal and non-terminal within the defined 
  197551             : //      grammar.  There is a simple way to change the 
  197552             : //      code to fix bugs etc.  See the ROSE README file
  197553             : //      for directions.
  197554             : 
  197555             : // tps: (02/22/2010): Adding DLL export requirements
  197556             : #include "rosedll.h"
  197557             : 
  197558             : // predeclarations for SgUpirSpmdStatement
  197559             : 
  197560             : /* #line 197561 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197561             : 
  197562             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  197563             : 
  197564             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197565             : 
  197566             : #if 1
  197567             : // Class Definition for SgUpirSpmdStatement
  197568             : class ROSE_DLL_API SgUpirSpmdStatement  : public SgUpirFieldBodyStatement
  197569             :    {
  197570             :      public:
  197571             : 
  197572             : 
  197573             : /* #line 197574 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197574             : 
  197575             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  197576             : // Start of memberFunctionString
  197577             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  197578             : 
  197579             : // *** COMMON CODE SECTION BEGINS HERE ***
  197580             : 
  197581             :     public:
  197582             : 
  197583             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  197584             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  197585             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  197586             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  197587             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  197588             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  197589             : 
  197590             :       /*! \brief returns a string representing the class name */
  197591             :           virtual std::string class_name() const override;
  197592             : 
  197593             :       /*! \brief returns new style SageIII enum values */
  197594             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  197595             : 
  197596             :       /*! \brief static variant value */
  197597             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  197598             :        // static const VariantT static_variant = V_SgUpirSpmdStatement;
  197599             :           enum { static_variant = V_SgUpirSpmdStatement };
  197600             : 
  197601             :        /* the generated cast function */
  197602             :       /*! \brief Casts pointer from base class to derived class */
  197603             :           ROSE_DLL_API friend       SgUpirSpmdStatement* isSgUpirSpmdStatement(       SgNode * s );
  197604             : 
  197605             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  197606             :           ROSE_DLL_API friend const SgUpirSpmdStatement* isSgUpirSpmdStatement( const SgNode * s );
  197607             : 
  197608             :      // ******************************************
  197609             :      // * Memory Pool / New / Delete
  197610             :      // ******************************************
  197611             : 
  197612             :      public:
  197613             :           /// \private
  197614             :           static const unsigned pool_size; //
  197615             :           /// \private
  197616             :           static std::vector<unsigned char *> pools; //
  197617             :           /// \private
  197618             :           static SgUpirSpmdStatement * next_node; // 
  197619             : 
  197620             :           /// \private
  197621             :           static unsigned long initializeStorageClassArray(SgUpirSpmdStatementStorageClass *); //
  197622             : 
  197623             :           /// \private
  197624             :           static void clearMemoryPool(); //
  197625             :           static void deleteMemoryPool(); //
  197626             : 
  197627             :           /// \private
  197628             :           static void extendMemoryPoolForFileIO(); //
  197629             : 
  197630             :           /// \private
  197631             :           static SgUpirSpmdStatement * getPointerFromGlobalIndex(unsigned long); //
  197632             :           /// \private
  197633             :           static SgUpirSpmdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  197634             : 
  197635             :           /// \private
  197636             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  197637             :           /// \private
  197638             :           static void resetValidFreepointers(); //
  197639             :           /// \private
  197640             :           static unsigned long getNumberOfLastValidPointer(); //
  197641             : 
  197642             : 
  197643             : #if defined(INLINE_FUNCTIONS)
  197644             :       /*! \brief returns pointer to newly allocated IR node */
  197645             :           inline void *operator new (size_t size);
  197646             : #else
  197647             :       /*! \brief returns pointer to newly allocated IR node */
  197648             :           void *operator new (size_t size);
  197649             : #endif
  197650             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  197651             :           void operator delete (void* pointer, size_t size);
  197652             : 
  197653             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  197654           0 :           void operator delete (void* pointer)
  197655             :              {
  197656             :             // This is the generated delete operator...
  197657           0 :                SgUpirSpmdStatement::operator delete (pointer,sizeof(SgUpirSpmdStatement));
  197658             :              }
  197659             : 
  197660             :       /*! \brief Returns the total number of IR nodes of this type */
  197661             :           static size_t numberOfNodes();
  197662             : 
  197663             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  197664             :           static size_t memoryUsage();
  197665             : 
  197666             :       // End of scope which started in IR nodes specific code 
  197667             :       /* */
  197668             : 
  197669             :       /* name Internal Functions
  197670             :           \brief Internal functions ... incomplete-documentation
  197671             : 
  197672             :           These functions have been made public as part of the design, but they are suggested for internal use 
  197673             :           or by particularly knowledgeable users for specialized tools or applications.
  197674             : 
  197675             :           \internal We could not make these private because they are required by user for special purposes. And 
  197676             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  197677             :          
  197678             :        */
  197679             : 
  197680             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  197681             :        // overridden in every class by *generated* implementation
  197682             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  197683             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  197684             :        // MS: 06/28/02 container of names of variables or container indices 
  197685             :        // used used in the traversal to access AST successor nodes
  197686             :        // overridden in every class by *generated* implementation
  197687             :       /*! \brief container of names of variables or container indices used used in the traversal
  197688             :           to access AST successor nodes overridden in every class by *generated* implementation */
  197689             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  197690             : 
  197691             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  197692             :        // than all the vector copies. The implementation for these functions is generated for each class.
  197693             :       /*! \brief return number of children in the traversal successor list */
  197694             :           virtual size_t get_numberOfTraversalSuccessors() override;
  197695             :       /*! \brief index-based access to traversal successors by index number */
  197696             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  197697             :       /*! \brief index-based access to traversal successors by child node */
  197698             :           virtual size_t get_childIndex(SgNode *child) override;
  197699             : 
  197700             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  197701             :        // MS: 08/16/2002 method for generating RTI information
  197702             :       /*! \brief return C++ Runtime-Time-Information */
  197703             :           virtual RTIReturnType roseRTI() override;
  197704             : #endif
  197705             :       /* */
  197706             : 
  197707             : 
  197708             : 
  197709             :       /* name Deprecated Functions
  197710             :           \brief Deprecated functions ... incomplete-documentation
  197711             : 
  197712             :           These functions have been deprecated from use.
  197713             :        */
  197714             :       /* */
  197715             : 
  197716             :       /*! returns a C style string (char*) representing the class name */
  197717             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  197718             : 
  197719             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  197720             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  197721             : #if 0
  197722             :       /*! returns old style Sage II enum values */
  197723             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  197724             :       /*! returns old style Sage II enum values */
  197725             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  197726             : #endif
  197727             :       /* */
  197728             : 
  197729             : 
  197730             : 
  197731             : 
  197732             :      public:
  197733             :       /* name Traversal Support Functions
  197734             :           \brief Traversal support functions ... incomplete-documentation
  197735             : 
  197736             :           These functions have been made public as part of the design, but they are suggested for internal use 
  197737             :           or by particularly knowledgable users for specialized tools or applications.
  197738             :        */
  197739             :       /* */
  197740             : 
  197741             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  197742             :        // (inferior to ROSE traversal mechanism, experimental).
  197743             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  197744             :        */
  197745             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  197746             : 
  197747             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  197748             :       /*! \brief support for the classic visitor pattern done in GoF */
  197749             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  197750             : 
  197751             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  197752             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  197753             :        */
  197754             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  197755             : 
  197756             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  197757             :        */
  197758             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  197759             : 
  197760             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  197761             :        // This traversal helps support internal tools that call static member functions.
  197762             :        // note: this function operates on the memory pools.
  197763             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  197764             :        */
  197765             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  197766             :       /* */
  197767             : 
  197768             : 
  197769             :      public:
  197770             :       /* name Memory Allocation Functions
  197771             :           \brief Memory allocations functions ... incomplete-documentation
  197772             : 
  197773             :           These functions have been made public as part of the design, but they are suggested for internal use 
  197774             :           or by particularly knowledgable users for specialized tools or applications.
  197775             :        */
  197776             :       /* */
  197777             : 
  197778             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  197779             : 
  197780             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  197781             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  197782             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  197783             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  197784             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  197785             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  197786             :           being used with the AST File I/O mechanism.
  197787             :        */
  197788             :           virtual bool isInMemoryPool() override;
  197789             : 
  197790             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  197791             : 
  197792             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  197793             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  197794             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  197795             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  197796             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  197797             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  197798             :           being used with the AST File I/O mechanism.
  197799             :        */
  197800             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  197801             : 
  197802             :       // DQ (4/30/2006): Modified to be a const function.
  197803             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  197804             : 
  197805             :           This functions is part of general support for many possible tools to operate 
  197806             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  197807             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  197808             :           less than the set of pointers used by the AST file I/O. This is part of
  197809             :           work implemented by Andreas, and support tools such as the AST graph generation.
  197810             : 
  197811             :           \warning This function can return unexpected data members and thus the 
  197812             :                    order and the number of elements is unpredicable and subject 
  197813             :                    to change.
  197814             : 
  197815             :           \returns STL vector of pairs of SgNode* and strings
  197816             :        */
  197817             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  197818             : 
  197819             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  197820             : 
  197821             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  197822             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  197823             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  197824             : 
  197825             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  197826             :                    and subject to change.
  197827             :        */
  197828             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  197829             : 
  197830             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  197831             : 
  197832             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  197833             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  197834             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  197835             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  197836             : 
  197837             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  197838             : 
  197839             :           \returns long
  197840             :        */
  197841             :           virtual long getChildIndex( SgNode* childNode ) const override;
  197842             : 
  197843             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  197844             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  197845             :       /* \brief Constructor for use by AST File I/O Mechanism
  197846             : 
  197847             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  197848             :           which obtained via fast binary file I/O from disk.
  197849             :        */
  197850             :        // SgUpirSpmdStatement( SgUpirSpmdStatementStorageClass& source );
  197851             : 
  197852             : 
  197853             : 
  197854             : 
  197855             : 
  197856             :  // JH (10/24/2005): methods added to support the ast file IO
  197857             :     private:
  197858             : 
  197859             :       /* name AST Memory Allocation Support Functions
  197860             :           \brief Memory allocations support....
  197861             : 
  197862             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  197863             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  197864             :           and support the AST File I/O Mechanism.
  197865             :        */
  197866             :       /* */
  197867             : 
  197868             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  197869             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  197870             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  197871             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  197872             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  197873             :           a correspinding one in the AST_FILE_IO class!
  197874             :        */
  197875             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  197876             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  197877             :       /* \brief Typedef used for low level memory access.
  197878             :        */
  197879             :        // typedef unsigned char* TestType;
  197880             : 
  197881             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  197882             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  197883             :       /* \brief Typedef used to hold memory addresses as values.
  197884             :        */
  197885             :        // typedef unsigned long  AddressType;
  197886             : 
  197887             : 
  197888             : 
  197889             :        // necessary, to have direct access to the p_freepointer and the private methods !
  197890             :       /*! \brief friend class declaration to support AST File I/O */
  197891             :           friend class AST_FILE_IO;
  197892             : 
  197893             :       /*! \brief friend class declaration to support AST File I/O */
  197894             :           friend class SgUpirSpmdStatementStorageClass;
  197895             : 
  197896             :       /*! \brief friend class declaration to support AST File I/O */
  197897             :           friend class AstSpecificDataManagingClass;
  197898             : 
  197899             :       /*! \brief friend class declaration to support AST File I/O */
  197900             :           friend class AstSpecificDataManagingClassStorageClass;
  197901             :     public:
  197902             :       /*! \brief IR node constructor to support AST File I/O */
  197903             :           SgUpirSpmdStatement( const SgUpirSpmdStatementStorageClass& source );
  197904             : 
  197905             :  // private: // JJW hack
  197906             :        /*
  197907             :           name AST Memory Allocation Support Variables
  197908             :           Memory allocations support variables 
  197909             : 
  197910             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  197911             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  197912             :           and support the AST File I/O Mechanism.
  197913             :        */
  197914             :       /* */
  197915             : 
  197916             :     public:
  197917             : 
  197918             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  197919             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  197920             :       // virtual SgNode* addRegExpAttribute();
  197921             :       /*! \brief Support for AST matching using regular expression.
  197922             : 
  197923             :           This support is incomplete and the subject of current research to define 
  197924             :           RegEx trees to support inexact matching.
  197925             :        */
  197926             :           SgUpirSpmdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  197927             : 
  197928             : // *** COMMON CODE SECTION ENDS HERE ***
  197929             : 
  197930             : 
  197931             : // End of memberFunctionString
  197932             : // Start of memberFunctionString
  197933             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  197934             : 
  197935             :      // the generated cast function
  197936             :      // friend ROSE_DLL_API SgUpirSpmdStatement* isSgUpirSpmdStatement ( SgNode* s );
  197937             : 
  197938             :           typedef SgUpirFieldBodyStatement base_node_type;
  197939             : 
  197940             : 
  197941             : // End of memberFunctionString
  197942             : // Start of memberFunctionString
  197943             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  197944             : 
  197945             :           void post_construction_initialization() override;
  197946             : 
  197947             : 
  197948             : // End of memberFunctionString
  197949             : 
  197950             : 
  197951             :      public: 
  197952             :          virtual ~SgUpirSpmdStatement();
  197953             : 
  197954             : 
  197955             :      public: 
  197956             :          SgUpirSpmdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  197957             :          SgUpirSpmdStatement(SgStatement* body); 
  197958             : 
  197959             :     protected:
  197960             : 
  197961             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirSpmdStatement>;
  197962             : 
  197963             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197964             : 
  197965             : 
  197966             :    };
  197967             : #endif
  197968             : 
  197969             : // postdeclarations for SgUpirSpmdStatement
  197970             : 
  197971             : /* #line 197972 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197972             : 
  197973             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  197974             : 
  197975             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197976             : 
  197977             : 
  197978             : /* #line 197979 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197979             : 
  197980             : 
  197981             : 
  197982             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  197983             : 
  197984             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  197985             : //      This code is automatically generated for each 
  197986             : //      terminal and non-terminal within the defined 
  197987             : //      grammar.  There is a simple way to change the 
  197988             : //      code to fix bugs etc.  See the ROSE README file
  197989             : //      for directions.
  197990             : 
  197991             : // tps: (02/22/2010): Adding DLL export requirements
  197992             : #include "rosedll.h"
  197993             : 
  197994             : // predeclarations for SgOmpTeamsStatement
  197995             : 
  197996             : /* #line 197997 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  197997             : 
  197998             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  197999             : 
  198000             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198001             : 
  198002             : #if 1
  198003             : // Class Definition for SgOmpTeamsStatement
  198004             : class ROSE_DLL_API SgOmpTeamsStatement  : public SgUpirFieldBodyStatement
  198005             :    {
  198006             :      public:
  198007             : 
  198008             : 
  198009             : /* #line 198010 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198010             : 
  198011             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  198012             : // Start of memberFunctionString
  198013             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  198014             : 
  198015             : // *** COMMON CODE SECTION BEGINS HERE ***
  198016             : 
  198017             :     public:
  198018             : 
  198019             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  198020             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  198021             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  198022             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  198023             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  198024             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  198025             : 
  198026             :       /*! \brief returns a string representing the class name */
  198027             :           virtual std::string class_name() const override;
  198028             : 
  198029             :       /*! \brief returns new style SageIII enum values */
  198030             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  198031             : 
  198032             :       /*! \brief static variant value */
  198033             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  198034             :        // static const VariantT static_variant = V_SgOmpTeamsStatement;
  198035             :           enum { static_variant = V_SgOmpTeamsStatement };
  198036             : 
  198037             :        /* the generated cast function */
  198038             :       /*! \brief Casts pointer from base class to derived class */
  198039             :           ROSE_DLL_API friend       SgOmpTeamsStatement* isSgOmpTeamsStatement(       SgNode * s );
  198040             : 
  198041             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  198042             :           ROSE_DLL_API friend const SgOmpTeamsStatement* isSgOmpTeamsStatement( const SgNode * s );
  198043             : 
  198044             :      // ******************************************
  198045             :      // * Memory Pool / New / Delete
  198046             :      // ******************************************
  198047             : 
  198048             :      public:
  198049             :           /// \private
  198050             :           static const unsigned pool_size; //
  198051             :           /// \private
  198052             :           static std::vector<unsigned char *> pools; //
  198053             :           /// \private
  198054             :           static SgOmpTeamsStatement * next_node; // 
  198055             : 
  198056             :           /// \private
  198057             :           static unsigned long initializeStorageClassArray(SgOmpTeamsStatementStorageClass *); //
  198058             : 
  198059             :           /// \private
  198060             :           static void clearMemoryPool(); //
  198061             :           static void deleteMemoryPool(); //
  198062             : 
  198063             :           /// \private
  198064             :           static void extendMemoryPoolForFileIO(); //
  198065             : 
  198066             :           /// \private
  198067             :           static SgOmpTeamsStatement * getPointerFromGlobalIndex(unsigned long); //
  198068             :           /// \private
  198069             :           static SgOmpTeamsStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  198070             : 
  198071             :           /// \private
  198072             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  198073             :           /// \private
  198074             :           static void resetValidFreepointers(); //
  198075             :           /// \private
  198076             :           static unsigned long getNumberOfLastValidPointer(); //
  198077             : 
  198078             : 
  198079             : #if defined(INLINE_FUNCTIONS)
  198080             :       /*! \brief returns pointer to newly allocated IR node */
  198081             :           inline void *operator new (size_t size);
  198082             : #else
  198083             :       /*! \brief returns pointer to newly allocated IR node */
  198084             :           void *operator new (size_t size);
  198085             : #endif
  198086             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  198087             :           void operator delete (void* pointer, size_t size);
  198088             : 
  198089             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  198090           0 :           void operator delete (void* pointer)
  198091             :              {
  198092             :             // This is the generated delete operator...
  198093           0 :                SgOmpTeamsStatement::operator delete (pointer,sizeof(SgOmpTeamsStatement));
  198094             :              }
  198095             : 
  198096             :       /*! \brief Returns the total number of IR nodes of this type */
  198097             :           static size_t numberOfNodes();
  198098             : 
  198099             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  198100             :           static size_t memoryUsage();
  198101             : 
  198102             :       // End of scope which started in IR nodes specific code 
  198103             :       /* */
  198104             : 
  198105             :       /* name Internal Functions
  198106             :           \brief Internal functions ... incomplete-documentation
  198107             : 
  198108             :           These functions have been made public as part of the design, but they are suggested for internal use 
  198109             :           or by particularly knowledgeable users for specialized tools or applications.
  198110             : 
  198111             :           \internal We could not make these private because they are required by user for special purposes. And 
  198112             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  198113             :          
  198114             :        */
  198115             : 
  198116             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  198117             :        // overridden in every class by *generated* implementation
  198118             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  198119             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  198120             :        // MS: 06/28/02 container of names of variables or container indices 
  198121             :        // used used in the traversal to access AST successor nodes
  198122             :        // overridden in every class by *generated* implementation
  198123             :       /*! \brief container of names of variables or container indices used used in the traversal
  198124             :           to access AST successor nodes overridden in every class by *generated* implementation */
  198125             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  198126             : 
  198127             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  198128             :        // than all the vector copies. The implementation for these functions is generated for each class.
  198129             :       /*! \brief return number of children in the traversal successor list */
  198130             :           virtual size_t get_numberOfTraversalSuccessors() override;
  198131             :       /*! \brief index-based access to traversal successors by index number */
  198132             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  198133             :       /*! \brief index-based access to traversal successors by child node */
  198134             :           virtual size_t get_childIndex(SgNode *child) override;
  198135             : 
  198136             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  198137             :        // MS: 08/16/2002 method for generating RTI information
  198138             :       /*! \brief return C++ Runtime-Time-Information */
  198139             :           virtual RTIReturnType roseRTI() override;
  198140             : #endif
  198141             :       /* */
  198142             : 
  198143             : 
  198144             : 
  198145             :       /* name Deprecated Functions
  198146             :           \brief Deprecated functions ... incomplete-documentation
  198147             : 
  198148             :           These functions have been deprecated from use.
  198149             :        */
  198150             :       /* */
  198151             : 
  198152             :       /*! returns a C style string (char*) representing the class name */
  198153             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  198154             : 
  198155             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  198156             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  198157             : #if 0
  198158             :       /*! returns old style Sage II enum values */
  198159             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  198160             :       /*! returns old style Sage II enum values */
  198161             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  198162             : #endif
  198163             :       /* */
  198164             : 
  198165             : 
  198166             : 
  198167             : 
  198168             :      public:
  198169             :       /* name Traversal Support Functions
  198170             :           \brief Traversal support functions ... incomplete-documentation
  198171             : 
  198172             :           These functions have been made public as part of the design, but they are suggested for internal use 
  198173             :           or by particularly knowledgable users for specialized tools or applications.
  198174             :        */
  198175             :       /* */
  198176             : 
  198177             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  198178             :        // (inferior to ROSE traversal mechanism, experimental).
  198179             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  198180             :        */
  198181             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  198182             : 
  198183             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  198184             :       /*! \brief support for the classic visitor pattern done in GoF */
  198185             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  198186             : 
  198187             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  198188             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  198189             :        */
  198190             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  198191             : 
  198192             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  198193             :        */
  198194             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  198195             : 
  198196             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  198197             :        // This traversal helps support internal tools that call static member functions.
  198198             :        // note: this function operates on the memory pools.
  198199             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  198200             :        */
  198201             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  198202             :       /* */
  198203             : 
  198204             : 
  198205             :      public:
  198206             :       /* name Memory Allocation Functions
  198207             :           \brief Memory allocations functions ... incomplete-documentation
  198208             : 
  198209             :           These functions have been made public as part of the design, but they are suggested for internal use 
  198210             :           or by particularly knowledgable users for specialized tools or applications.
  198211             :        */
  198212             :       /* */
  198213             : 
  198214             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  198215             : 
  198216             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  198217             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  198218             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  198219             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  198220             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  198221             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  198222             :           being used with the AST File I/O mechanism.
  198223             :        */
  198224             :           virtual bool isInMemoryPool() override;
  198225             : 
  198226             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  198227             : 
  198228             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  198229             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  198230             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  198231             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  198232             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  198233             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  198234             :           being used with the AST File I/O mechanism.
  198235             :        */
  198236             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  198237             : 
  198238             :       // DQ (4/30/2006): Modified to be a const function.
  198239             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  198240             : 
  198241             :           This functions is part of general support for many possible tools to operate 
  198242             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  198243             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  198244             :           less than the set of pointers used by the AST file I/O. This is part of
  198245             :           work implemented by Andreas, and support tools such as the AST graph generation.
  198246             : 
  198247             :           \warning This function can return unexpected data members and thus the 
  198248             :                    order and the number of elements is unpredicable and subject 
  198249             :                    to change.
  198250             : 
  198251             :           \returns STL vector of pairs of SgNode* and strings
  198252             :        */
  198253             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  198254             : 
  198255             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  198256             : 
  198257             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  198258             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  198259             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  198260             : 
  198261             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  198262             :                    and subject to change.
  198263             :        */
  198264             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  198265             : 
  198266             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  198267             : 
  198268             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  198269             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  198270             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  198271             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  198272             : 
  198273             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  198274             : 
  198275             :           \returns long
  198276             :        */
  198277             :           virtual long getChildIndex( SgNode* childNode ) const override;
  198278             : 
  198279             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  198280             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  198281             :       /* \brief Constructor for use by AST File I/O Mechanism
  198282             : 
  198283             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  198284             :           which obtained via fast binary file I/O from disk.
  198285             :        */
  198286             :        // SgOmpTeamsStatement( SgOmpTeamsStatementStorageClass& source );
  198287             : 
  198288             : 
  198289             : 
  198290             : 
  198291             : 
  198292             :  // JH (10/24/2005): methods added to support the ast file IO
  198293             :     private:
  198294             : 
  198295             :       /* name AST Memory Allocation Support Functions
  198296             :           \brief Memory allocations support....
  198297             : 
  198298             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  198299             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  198300             :           and support the AST File I/O Mechanism.
  198301             :        */
  198302             :       /* */
  198303             : 
  198304             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  198305             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  198306             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  198307             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  198308             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  198309             :           a correspinding one in the AST_FILE_IO class!
  198310             :        */
  198311             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  198312             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  198313             :       /* \brief Typedef used for low level memory access.
  198314             :        */
  198315             :        // typedef unsigned char* TestType;
  198316             : 
  198317             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  198318             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  198319             :       /* \brief Typedef used to hold memory addresses as values.
  198320             :        */
  198321             :        // typedef unsigned long  AddressType;
  198322             : 
  198323             : 
  198324             : 
  198325             :        // necessary, to have direct access to the p_freepointer and the private methods !
  198326             :       /*! \brief friend class declaration to support AST File I/O */
  198327             :           friend class AST_FILE_IO;
  198328             : 
  198329             :       /*! \brief friend class declaration to support AST File I/O */
  198330             :           friend class SgOmpTeamsStatementStorageClass;
  198331             : 
  198332             :       /*! \brief friend class declaration to support AST File I/O */
  198333             :           friend class AstSpecificDataManagingClass;
  198334             : 
  198335             :       /*! \brief friend class declaration to support AST File I/O */
  198336             :           friend class AstSpecificDataManagingClassStorageClass;
  198337             :     public:
  198338             :       /*! \brief IR node constructor to support AST File I/O */
  198339             :           SgOmpTeamsStatement( const SgOmpTeamsStatementStorageClass& source );
  198340             : 
  198341             :  // private: // JJW hack
  198342             :        /*
  198343             :           name AST Memory Allocation Support Variables
  198344             :           Memory allocations support variables 
  198345             : 
  198346             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  198347             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  198348             :           and support the AST File I/O Mechanism.
  198349             :        */
  198350             :       /* */
  198351             : 
  198352             :     public:
  198353             : 
  198354             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  198355             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  198356             :       // virtual SgNode* addRegExpAttribute();
  198357             :       /*! \brief Support for AST matching using regular expression.
  198358             : 
  198359             :           This support is incomplete and the subject of current research to define 
  198360             :           RegEx trees to support inexact matching.
  198361             :        */
  198362             :           SgOmpTeamsStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  198363             : 
  198364             : // *** COMMON CODE SECTION ENDS HERE ***
  198365             : 
  198366             : 
  198367             : // End of memberFunctionString
  198368             : // Start of memberFunctionString
  198369             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  198370             : 
  198371             :      // the generated cast function
  198372             :      // friend ROSE_DLL_API SgOmpTeamsStatement* isSgOmpTeamsStatement ( SgNode* s );
  198373             : 
  198374             :           typedef SgUpirFieldBodyStatement base_node_type;
  198375             : 
  198376             : 
  198377             : // End of memberFunctionString
  198378             : // Start of memberFunctionString
  198379             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  198380             : 
  198381             :           void post_construction_initialization() override;
  198382             : 
  198383             : 
  198384             : // End of memberFunctionString
  198385             : 
  198386             : 
  198387             :      public: 
  198388             :          virtual ~SgOmpTeamsStatement();
  198389             : 
  198390             : 
  198391             :      public: 
  198392             :          SgOmpTeamsStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  198393             :          SgOmpTeamsStatement(SgStatement* body); 
  198394             : 
  198395             :     protected:
  198396             : 
  198397             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTeamsStatement>;
  198398             : 
  198399             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198400             : 
  198401             : 
  198402             :    };
  198403             : #endif
  198404             : 
  198405             : // postdeclarations for SgOmpTeamsStatement
  198406             : 
  198407             : /* #line 198408 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198408             : 
  198409             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  198410             : 
  198411             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198412             : 
  198413             : 
  198414             : /* #line 198415 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198415             : 
  198416             : 
  198417             : 
  198418             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198419             : 
  198420             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  198421             : //      This code is automatically generated for each 
  198422             : //      terminal and non-terminal within the defined 
  198423             : //      grammar.  There is a simple way to change the 
  198424             : //      code to fix bugs etc.  See the ROSE README file
  198425             : //      for directions.
  198426             : 
  198427             : // tps: (02/22/2010): Adding DLL export requirements
  198428             : #include "rosedll.h"
  198429             : 
  198430             : // predeclarations for SgOmpSingleStatement
  198431             : 
  198432             : /* #line 198433 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198433             : 
  198434             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  198435             : 
  198436             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198437             : 
  198438             : #if 1
  198439             : // Class Definition for SgOmpSingleStatement
  198440             : class ROSE_DLL_API SgOmpSingleStatement  : public SgUpirFieldBodyStatement
  198441             :    {
  198442             :      public:
  198443             : 
  198444             : 
  198445             : /* #line 198446 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198446             : 
  198447             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  198448             : // Start of memberFunctionString
  198449             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  198450             : 
  198451             : // *** COMMON CODE SECTION BEGINS HERE ***
  198452             : 
  198453             :     public:
  198454             : 
  198455             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  198456             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  198457             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  198458             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  198459             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  198460             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  198461             : 
  198462             :       /*! \brief returns a string representing the class name */
  198463             :           virtual std::string class_name() const override;
  198464             : 
  198465             :       /*! \brief returns new style SageIII enum values */
  198466             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  198467             : 
  198468             :       /*! \brief static variant value */
  198469             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  198470             :        // static const VariantT static_variant = V_SgOmpSingleStatement;
  198471             :           enum { static_variant = V_SgOmpSingleStatement };
  198472             : 
  198473             :        /* the generated cast function */
  198474             :       /*! \brief Casts pointer from base class to derived class */
  198475             :           ROSE_DLL_API friend       SgOmpSingleStatement* isSgOmpSingleStatement(       SgNode * s );
  198476             : 
  198477             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  198478             :           ROSE_DLL_API friend const SgOmpSingleStatement* isSgOmpSingleStatement( const SgNode * s );
  198479             : 
  198480             :      // ******************************************
  198481             :      // * Memory Pool / New / Delete
  198482             :      // ******************************************
  198483             : 
  198484             :      public:
  198485             :           /// \private
  198486             :           static const unsigned pool_size; //
  198487             :           /// \private
  198488             :           static std::vector<unsigned char *> pools; //
  198489             :           /// \private
  198490             :           static SgOmpSingleStatement * next_node; // 
  198491             : 
  198492             :           /// \private
  198493             :           static unsigned long initializeStorageClassArray(SgOmpSingleStatementStorageClass *); //
  198494             : 
  198495             :           /// \private
  198496             :           static void clearMemoryPool(); //
  198497             :           static void deleteMemoryPool(); //
  198498             : 
  198499             :           /// \private
  198500             :           static void extendMemoryPoolForFileIO(); //
  198501             : 
  198502             :           /// \private
  198503             :           static SgOmpSingleStatement * getPointerFromGlobalIndex(unsigned long); //
  198504             :           /// \private
  198505             :           static SgOmpSingleStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  198506             : 
  198507             :           /// \private
  198508             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  198509             :           /// \private
  198510             :           static void resetValidFreepointers(); //
  198511             :           /// \private
  198512             :           static unsigned long getNumberOfLastValidPointer(); //
  198513             : 
  198514             : 
  198515             : #if defined(INLINE_FUNCTIONS)
  198516             :       /*! \brief returns pointer to newly allocated IR node */
  198517             :           inline void *operator new (size_t size);
  198518             : #else
  198519             :       /*! \brief returns pointer to newly allocated IR node */
  198520             :           void *operator new (size_t size);
  198521             : #endif
  198522             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  198523             :           void operator delete (void* pointer, size_t size);
  198524             : 
  198525             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  198526           0 :           void operator delete (void* pointer)
  198527             :              {
  198528             :             // This is the generated delete operator...
  198529           0 :                SgOmpSingleStatement::operator delete (pointer,sizeof(SgOmpSingleStatement));
  198530             :              }
  198531             : 
  198532             :       /*! \brief Returns the total number of IR nodes of this type */
  198533             :           static size_t numberOfNodes();
  198534             : 
  198535             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  198536             :           static size_t memoryUsage();
  198537             : 
  198538             :       // End of scope which started in IR nodes specific code 
  198539             :       /* */
  198540             : 
  198541             :       /* name Internal Functions
  198542             :           \brief Internal functions ... incomplete-documentation
  198543             : 
  198544             :           These functions have been made public as part of the design, but they are suggested for internal use 
  198545             :           or by particularly knowledgeable users for specialized tools or applications.
  198546             : 
  198547             :           \internal We could not make these private because they are required by user for special purposes. And 
  198548             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  198549             :          
  198550             :        */
  198551             : 
  198552             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  198553             :        // overridden in every class by *generated* implementation
  198554             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  198555             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  198556             :        // MS: 06/28/02 container of names of variables or container indices 
  198557             :        // used used in the traversal to access AST successor nodes
  198558             :        // overridden in every class by *generated* implementation
  198559             :       /*! \brief container of names of variables or container indices used used in the traversal
  198560             :           to access AST successor nodes overridden in every class by *generated* implementation */
  198561             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  198562             : 
  198563             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  198564             :        // than all the vector copies. The implementation for these functions is generated for each class.
  198565             :       /*! \brief return number of children in the traversal successor list */
  198566             :           virtual size_t get_numberOfTraversalSuccessors() override;
  198567             :       /*! \brief index-based access to traversal successors by index number */
  198568             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  198569             :       /*! \brief index-based access to traversal successors by child node */
  198570             :           virtual size_t get_childIndex(SgNode *child) override;
  198571             : 
  198572             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  198573             :        // MS: 08/16/2002 method for generating RTI information
  198574             :       /*! \brief return C++ Runtime-Time-Information */
  198575             :           virtual RTIReturnType roseRTI() override;
  198576             : #endif
  198577             :       /* */
  198578             : 
  198579             : 
  198580             : 
  198581             :       /* name Deprecated Functions
  198582             :           \brief Deprecated functions ... incomplete-documentation
  198583             : 
  198584             :           These functions have been deprecated from use.
  198585             :        */
  198586             :       /* */
  198587             : 
  198588             :       /*! returns a C style string (char*) representing the class name */
  198589             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  198590             : 
  198591             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  198592             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  198593             : #if 0
  198594             :       /*! returns old style Sage II enum values */
  198595             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  198596             :       /*! returns old style Sage II enum values */
  198597             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  198598             : #endif
  198599             :       /* */
  198600             : 
  198601             : 
  198602             : 
  198603             : 
  198604             :      public:
  198605             :       /* name Traversal Support Functions
  198606             :           \brief Traversal support functions ... incomplete-documentation
  198607             : 
  198608             :           These functions have been made public as part of the design, but they are suggested for internal use 
  198609             :           or by particularly knowledgable users for specialized tools or applications.
  198610             :        */
  198611             :       /* */
  198612             : 
  198613             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  198614             :        // (inferior to ROSE traversal mechanism, experimental).
  198615             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  198616             :        */
  198617             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  198618             : 
  198619             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  198620             :       /*! \brief support for the classic visitor pattern done in GoF */
  198621             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  198622             : 
  198623             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  198624             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  198625             :        */
  198626             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  198627             : 
  198628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  198629             :        */
  198630             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  198631             : 
  198632             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  198633             :        // This traversal helps support internal tools that call static member functions.
  198634             :        // note: this function operates on the memory pools.
  198635             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  198636             :        */
  198637             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  198638             :       /* */
  198639             : 
  198640             : 
  198641             :      public:
  198642             :       /* name Memory Allocation Functions
  198643             :           \brief Memory allocations functions ... incomplete-documentation
  198644             : 
  198645             :           These functions have been made public as part of the design, but they are suggested for internal use 
  198646             :           or by particularly knowledgable users for specialized tools or applications.
  198647             :        */
  198648             :       /* */
  198649             : 
  198650             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  198651             : 
  198652             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  198653             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  198654             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  198655             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  198656             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  198657             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  198658             :           being used with the AST File I/O mechanism.
  198659             :        */
  198660             :           virtual bool isInMemoryPool() override;
  198661             : 
  198662             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  198663             : 
  198664             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  198665             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  198666             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  198667             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  198668             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  198669             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  198670             :           being used with the AST File I/O mechanism.
  198671             :        */
  198672             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  198673             : 
  198674             :       // DQ (4/30/2006): Modified to be a const function.
  198675             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  198676             : 
  198677             :           This functions is part of general support for many possible tools to operate 
  198678             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  198679             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  198680             :           less than the set of pointers used by the AST file I/O. This is part of
  198681             :           work implemented by Andreas, and support tools such as the AST graph generation.
  198682             : 
  198683             :           \warning This function can return unexpected data members and thus the 
  198684             :                    order and the number of elements is unpredicable and subject 
  198685             :                    to change.
  198686             : 
  198687             :           \returns STL vector of pairs of SgNode* and strings
  198688             :        */
  198689             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  198690             : 
  198691             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  198692             : 
  198693             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  198694             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  198695             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  198696             : 
  198697             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  198698             :                    and subject to change.
  198699             :        */
  198700             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  198701             : 
  198702             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  198703             : 
  198704             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  198705             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  198706             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  198707             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  198708             : 
  198709             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  198710             : 
  198711             :           \returns long
  198712             :        */
  198713             :           virtual long getChildIndex( SgNode* childNode ) const override;
  198714             : 
  198715             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  198716             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  198717             :       /* \brief Constructor for use by AST File I/O Mechanism
  198718             : 
  198719             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  198720             :           which obtained via fast binary file I/O from disk.
  198721             :        */
  198722             :        // SgOmpSingleStatement( SgOmpSingleStatementStorageClass& source );
  198723             : 
  198724             : 
  198725             : 
  198726             : 
  198727             : 
  198728             :  // JH (10/24/2005): methods added to support the ast file IO
  198729             :     private:
  198730             : 
  198731             :       /* name AST Memory Allocation Support Functions
  198732             :           \brief Memory allocations support....
  198733             : 
  198734             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  198735             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  198736             :           and support the AST File I/O Mechanism.
  198737             :        */
  198738             :       /* */
  198739             : 
  198740             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  198741             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  198742             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  198743             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  198744             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  198745             :           a correspinding one in the AST_FILE_IO class!
  198746             :        */
  198747             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  198748             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  198749             :       /* \brief Typedef used for low level memory access.
  198750             :        */
  198751             :        // typedef unsigned char* TestType;
  198752             : 
  198753             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  198754             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  198755             :       /* \brief Typedef used to hold memory addresses as values.
  198756             :        */
  198757             :        // typedef unsigned long  AddressType;
  198758             : 
  198759             : 
  198760             : 
  198761             :        // necessary, to have direct access to the p_freepointer and the private methods !
  198762             :       /*! \brief friend class declaration to support AST File I/O */
  198763             :           friend class AST_FILE_IO;
  198764             : 
  198765             :       /*! \brief friend class declaration to support AST File I/O */
  198766             :           friend class SgOmpSingleStatementStorageClass;
  198767             : 
  198768             :       /*! \brief friend class declaration to support AST File I/O */
  198769             :           friend class AstSpecificDataManagingClass;
  198770             : 
  198771             :       /*! \brief friend class declaration to support AST File I/O */
  198772             :           friend class AstSpecificDataManagingClassStorageClass;
  198773             :     public:
  198774             :       /*! \brief IR node constructor to support AST File I/O */
  198775             :           SgOmpSingleStatement( const SgOmpSingleStatementStorageClass& source );
  198776             : 
  198777             :  // private: // JJW hack
  198778             :        /*
  198779             :           name AST Memory Allocation Support Variables
  198780             :           Memory allocations support variables 
  198781             : 
  198782             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  198783             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  198784             :           and support the AST File I/O Mechanism.
  198785             :        */
  198786             :       /* */
  198787             : 
  198788             :     public:
  198789             : 
  198790             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  198791             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  198792             :       // virtual SgNode* addRegExpAttribute();
  198793             :       /*! \brief Support for AST matching using regular expression.
  198794             : 
  198795             :           This support is incomplete and the subject of current research to define 
  198796             :           RegEx trees to support inexact matching.
  198797             :        */
  198798             :           SgOmpSingleStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  198799             : 
  198800             : // *** COMMON CODE SECTION ENDS HERE ***
  198801             : 
  198802             : 
  198803             : // End of memberFunctionString
  198804             : // Start of memberFunctionString
  198805             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  198806             : 
  198807             :      // the generated cast function
  198808             :      // friend ROSE_DLL_API SgOmpSingleStatement* isSgOmpSingleStatement ( SgNode* s );
  198809             : 
  198810             :           typedef SgUpirFieldBodyStatement base_node_type;
  198811             : 
  198812             : 
  198813             : // End of memberFunctionString
  198814             : // Start of memberFunctionString
  198815             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  198816             : 
  198817             :           void post_construction_initialization() override;
  198818             : 
  198819             : 
  198820             : // End of memberFunctionString
  198821             : 
  198822             : 
  198823             :      public: 
  198824             :          virtual ~SgOmpSingleStatement();
  198825             : 
  198826             : 
  198827             :      public: 
  198828             :          SgOmpSingleStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  198829             :          SgOmpSingleStatement(SgStatement* body); 
  198830             : 
  198831             :     protected:
  198832             : 
  198833             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSingleStatement>;
  198834             : 
  198835             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198836             : 
  198837             : 
  198838             :    };
  198839             : #endif
  198840             : 
  198841             : // postdeclarations for SgOmpSingleStatement
  198842             : 
  198843             : /* #line 198844 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198844             : 
  198845             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  198846             : 
  198847             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198848             : 
  198849             : 
  198850             : /* #line 198851 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198851             : 
  198852             : 
  198853             : 
  198854             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198855             : 
  198856             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  198857             : //      This code is automatically generated for each 
  198858             : //      terminal and non-terminal within the defined 
  198859             : //      grammar.  There is a simple way to change the 
  198860             : //      code to fix bugs etc.  See the ROSE README file
  198861             : //      for directions.
  198862             : 
  198863             : // tps: (02/22/2010): Adding DLL export requirements
  198864             : #include "rosedll.h"
  198865             : 
  198866             : // predeclarations for SgOmpAtomicStatement
  198867             : 
  198868             : /* #line 198869 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198869             : 
  198870             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  198871             : 
  198872             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  198873             : 
  198874             : #if 1
  198875             : // Class Definition for SgOmpAtomicStatement
  198876             : class ROSE_DLL_API SgOmpAtomicStatement  : public SgUpirFieldBodyStatement
  198877             :    {
  198878             :      public:
  198879             : 
  198880             : 
  198881             : /* #line 198882 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  198882             : 
  198883             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  198884             : // Start of memberFunctionString
  198885             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  198886             : 
  198887             : // *** COMMON CODE SECTION BEGINS HERE ***
  198888             : 
  198889             :     public:
  198890             : 
  198891             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  198892             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  198893             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  198894             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  198895             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  198896             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  198897             : 
  198898             :       /*! \brief returns a string representing the class name */
  198899             :           virtual std::string class_name() const override;
  198900             : 
  198901             :       /*! \brief returns new style SageIII enum values */
  198902             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  198903             : 
  198904             :       /*! \brief static variant value */
  198905             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  198906             :        // static const VariantT static_variant = V_SgOmpAtomicStatement;
  198907             :           enum { static_variant = V_SgOmpAtomicStatement };
  198908             : 
  198909             :        /* the generated cast function */
  198910             :       /*! \brief Casts pointer from base class to derived class */
  198911             :           ROSE_DLL_API friend       SgOmpAtomicStatement* isSgOmpAtomicStatement(       SgNode * s );
  198912             : 
  198913             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  198914             :           ROSE_DLL_API friend const SgOmpAtomicStatement* isSgOmpAtomicStatement( const SgNode * s );
  198915             : 
  198916             :      // ******************************************
  198917             :      // * Memory Pool / New / Delete
  198918             :      // ******************************************
  198919             : 
  198920             :      public:
  198921             :           /// \private
  198922             :           static const unsigned pool_size; //
  198923             :           /// \private
  198924             :           static std::vector<unsigned char *> pools; //
  198925             :           /// \private
  198926             :           static SgOmpAtomicStatement * next_node; // 
  198927             : 
  198928             :           /// \private
  198929             :           static unsigned long initializeStorageClassArray(SgOmpAtomicStatementStorageClass *); //
  198930             : 
  198931             :           /// \private
  198932             :           static void clearMemoryPool(); //
  198933             :           static void deleteMemoryPool(); //
  198934             : 
  198935             :           /// \private
  198936             :           static void extendMemoryPoolForFileIO(); //
  198937             : 
  198938             :           /// \private
  198939             :           static SgOmpAtomicStatement * getPointerFromGlobalIndex(unsigned long); //
  198940             :           /// \private
  198941             :           static SgOmpAtomicStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  198942             : 
  198943             :           /// \private
  198944             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  198945             :           /// \private
  198946             :           static void resetValidFreepointers(); //
  198947             :           /// \private
  198948             :           static unsigned long getNumberOfLastValidPointer(); //
  198949             : 
  198950             : 
  198951             : #if defined(INLINE_FUNCTIONS)
  198952             :       /*! \brief returns pointer to newly allocated IR node */
  198953             :           inline void *operator new (size_t size);
  198954             : #else
  198955             :       /*! \brief returns pointer to newly allocated IR node */
  198956             :           void *operator new (size_t size);
  198957             : #endif
  198958             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  198959             :           void operator delete (void* pointer, size_t size);
  198960             : 
  198961             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  198962           0 :           void operator delete (void* pointer)
  198963             :              {
  198964             :             // This is the generated delete operator...
  198965           0 :                SgOmpAtomicStatement::operator delete (pointer,sizeof(SgOmpAtomicStatement));
  198966             :              }
  198967             : 
  198968             :       /*! \brief Returns the total number of IR nodes of this type */
  198969             :           static size_t numberOfNodes();
  198970             : 
  198971             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  198972             :           static size_t memoryUsage();
  198973             : 
  198974             :       // End of scope which started in IR nodes specific code 
  198975             :       /* */
  198976             : 
  198977             :       /* name Internal Functions
  198978             :           \brief Internal functions ... incomplete-documentation
  198979             : 
  198980             :           These functions have been made public as part of the design, but they are suggested for internal use 
  198981             :           or by particularly knowledgeable users for specialized tools or applications.
  198982             : 
  198983             :           \internal We could not make these private because they are required by user for special purposes. And 
  198984             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  198985             :          
  198986             :        */
  198987             : 
  198988             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  198989             :        // overridden in every class by *generated* implementation
  198990             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  198991             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  198992             :        // MS: 06/28/02 container of names of variables or container indices 
  198993             :        // used used in the traversal to access AST successor nodes
  198994             :        // overridden in every class by *generated* implementation
  198995             :       /*! \brief container of names of variables or container indices used used in the traversal
  198996             :           to access AST successor nodes overridden in every class by *generated* implementation */
  198997             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  198998             : 
  198999             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  199000             :        // than all the vector copies. The implementation for these functions is generated for each class.
  199001             :       /*! \brief return number of children in the traversal successor list */
  199002             :           virtual size_t get_numberOfTraversalSuccessors() override;
  199003             :       /*! \brief index-based access to traversal successors by index number */
  199004             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  199005             :       /*! \brief index-based access to traversal successors by child node */
  199006             :           virtual size_t get_childIndex(SgNode *child) override;
  199007             : 
  199008             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  199009             :        // MS: 08/16/2002 method for generating RTI information
  199010             :       /*! \brief return C++ Runtime-Time-Information */
  199011             :           virtual RTIReturnType roseRTI() override;
  199012             : #endif
  199013             :       /* */
  199014             : 
  199015             : 
  199016             : 
  199017             :       /* name Deprecated Functions
  199018             :           \brief Deprecated functions ... incomplete-documentation
  199019             : 
  199020             :           These functions have been deprecated from use.
  199021             :        */
  199022             :       /* */
  199023             : 
  199024             :       /*! returns a C style string (char*) representing the class name */
  199025             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  199026             : 
  199027             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  199028             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  199029             : #if 0
  199030             :       /*! returns old style Sage II enum values */
  199031             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  199032             :       /*! returns old style Sage II enum values */
  199033             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  199034             : #endif
  199035             :       /* */
  199036             : 
  199037             : 
  199038             : 
  199039             : 
  199040             :      public:
  199041             :       /* name Traversal Support Functions
  199042             :           \brief Traversal support functions ... incomplete-documentation
  199043             : 
  199044             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199045             :           or by particularly knowledgable users for specialized tools or applications.
  199046             :        */
  199047             :       /* */
  199048             : 
  199049             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  199050             :        // (inferior to ROSE traversal mechanism, experimental).
  199051             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  199052             :        */
  199053             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  199054             : 
  199055             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  199056             :       /*! \brief support for the classic visitor pattern done in GoF */
  199057             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  199058             : 
  199059             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  199060             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  199061             :        */
  199062             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  199063             : 
  199064             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  199065             :        */
  199066             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  199067             : 
  199068             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  199069             :        // This traversal helps support internal tools that call static member functions.
  199070             :        // note: this function operates on the memory pools.
  199071             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  199072             :        */
  199073             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  199074             :       /* */
  199075             : 
  199076             : 
  199077             :      public:
  199078             :       /* name Memory Allocation Functions
  199079             :           \brief Memory allocations functions ... incomplete-documentation
  199080             : 
  199081             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199082             :           or by particularly knowledgable users for specialized tools or applications.
  199083             :        */
  199084             :       /* */
  199085             : 
  199086             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  199087             : 
  199088             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  199089             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  199090             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  199091             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  199092             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  199093             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  199094             :           being used with the AST File I/O mechanism.
  199095             :        */
  199096             :           virtual bool isInMemoryPool() override;
  199097             : 
  199098             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  199099             : 
  199100             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  199101             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  199102             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  199103             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  199104             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  199105             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  199106             :           being used with the AST File I/O mechanism.
  199107             :        */
  199108             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  199109             : 
  199110             :       // DQ (4/30/2006): Modified to be a const function.
  199111             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  199112             : 
  199113             :           This functions is part of general support for many possible tools to operate 
  199114             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  199115             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  199116             :           less than the set of pointers used by the AST file I/O. This is part of
  199117             :           work implemented by Andreas, and support tools such as the AST graph generation.
  199118             : 
  199119             :           \warning This function can return unexpected data members and thus the 
  199120             :                    order and the number of elements is unpredicable and subject 
  199121             :                    to change.
  199122             : 
  199123             :           \returns STL vector of pairs of SgNode* and strings
  199124             :        */
  199125             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  199126             : 
  199127             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  199128             : 
  199129             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  199130             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  199131             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  199132             : 
  199133             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  199134             :                    and subject to change.
  199135             :        */
  199136             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  199137             : 
  199138             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  199139             : 
  199140             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  199141             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  199142             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  199143             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  199144             : 
  199145             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  199146             : 
  199147             :           \returns long
  199148             :        */
  199149             :           virtual long getChildIndex( SgNode* childNode ) const override;
  199150             : 
  199151             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  199152             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  199153             :       /* \brief Constructor for use by AST File I/O Mechanism
  199154             : 
  199155             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  199156             :           which obtained via fast binary file I/O from disk.
  199157             :        */
  199158             :        // SgOmpAtomicStatement( SgOmpAtomicStatementStorageClass& source );
  199159             : 
  199160             : 
  199161             : 
  199162             : 
  199163             : 
  199164             :  // JH (10/24/2005): methods added to support the ast file IO
  199165             :     private:
  199166             : 
  199167             :       /* name AST Memory Allocation Support Functions
  199168             :           \brief Memory allocations support....
  199169             : 
  199170             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  199171             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  199172             :           and support the AST File I/O Mechanism.
  199173             :        */
  199174             :       /* */
  199175             : 
  199176             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  199177             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  199178             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  199179             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  199180             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  199181             :           a correspinding one in the AST_FILE_IO class!
  199182             :        */
  199183             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  199184             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  199185             :       /* \brief Typedef used for low level memory access.
  199186             :        */
  199187             :        // typedef unsigned char* TestType;
  199188             : 
  199189             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  199190             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  199191             :       /* \brief Typedef used to hold memory addresses as values.
  199192             :        */
  199193             :        // typedef unsigned long  AddressType;
  199194             : 
  199195             : 
  199196             : 
  199197             :        // necessary, to have direct access to the p_freepointer and the private methods !
  199198             :       /*! \brief friend class declaration to support AST File I/O */
  199199             :           friend class AST_FILE_IO;
  199200             : 
  199201             :       /*! \brief friend class declaration to support AST File I/O */
  199202             :           friend class SgOmpAtomicStatementStorageClass;
  199203             : 
  199204             :       /*! \brief friend class declaration to support AST File I/O */
  199205             :           friend class AstSpecificDataManagingClass;
  199206             : 
  199207             :       /*! \brief friend class declaration to support AST File I/O */
  199208             :           friend class AstSpecificDataManagingClassStorageClass;
  199209             :     public:
  199210             :       /*! \brief IR node constructor to support AST File I/O */
  199211             :           SgOmpAtomicStatement( const SgOmpAtomicStatementStorageClass& source );
  199212             : 
  199213             :  // private: // JJW hack
  199214             :        /*
  199215             :           name AST Memory Allocation Support Variables
  199216             :           Memory allocations support variables 
  199217             : 
  199218             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  199219             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  199220             :           and support the AST File I/O Mechanism.
  199221             :        */
  199222             :       /* */
  199223             : 
  199224             :     public:
  199225             : 
  199226             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  199227             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  199228             :       // virtual SgNode* addRegExpAttribute();
  199229             :       /*! \brief Support for AST matching using regular expression.
  199230             : 
  199231             :           This support is incomplete and the subject of current research to define 
  199232             :           RegEx trees to support inexact matching.
  199233             :        */
  199234             :           SgOmpAtomicStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  199235             : 
  199236             : // *** COMMON CODE SECTION ENDS HERE ***
  199237             : 
  199238             : 
  199239             : // End of memberFunctionString
  199240             : // Start of memberFunctionString
  199241             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  199242             : 
  199243             :      // the generated cast function
  199244             :      // friend ROSE_DLL_API SgOmpAtomicStatement* isSgOmpAtomicStatement ( SgNode* s );
  199245             : 
  199246             :           typedef SgUpirFieldBodyStatement base_node_type;
  199247             : 
  199248             : 
  199249             : // End of memberFunctionString
  199250             : // Start of memberFunctionString
  199251             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  199252             : 
  199253             :           void post_construction_initialization() override;
  199254             : 
  199255             : 
  199256             : // End of memberFunctionString
  199257             : 
  199258             : 
  199259             :      public: 
  199260             :          virtual ~SgOmpAtomicStatement();
  199261             : 
  199262             : 
  199263             :      public: 
  199264             :          SgOmpAtomicStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  199265             :          SgOmpAtomicStatement(SgStatement* body); 
  199266             : 
  199267             :     protected:
  199268             : 
  199269             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAtomicStatement>;
  199270             : 
  199271             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199272             : 
  199273             : 
  199274             :    };
  199275             : #endif
  199276             : 
  199277             : // postdeclarations for SgOmpAtomicStatement
  199278             : 
  199279             : /* #line 199280 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199280             : 
  199281             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  199282             : 
  199283             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199284             : 
  199285             : 
  199286             : /* #line 199287 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199287             : 
  199288             : 
  199289             : 
  199290             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199291             : 
  199292             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  199293             : //      This code is automatically generated for each 
  199294             : //      terminal and non-terminal within the defined 
  199295             : //      grammar.  There is a simple way to change the 
  199296             : //      code to fix bugs etc.  See the ROSE README file
  199297             : //      for directions.
  199298             : 
  199299             : // tps: (02/22/2010): Adding DLL export requirements
  199300             : #include "rosedll.h"
  199301             : 
  199302             : // predeclarations for SgOmpScanStatement
  199303             : 
  199304             : /* #line 199305 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199305             : 
  199306             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  199307             : 
  199308             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199309             : 
  199310             : #if 1
  199311             : // Class Definition for SgOmpScanStatement
  199312             : class ROSE_DLL_API SgOmpScanStatement  : public SgUpirFieldBodyStatement
  199313             :    {
  199314             :      public:
  199315             : 
  199316             : 
  199317             : /* #line 199318 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199318             : 
  199319             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  199320             : // Start of memberFunctionString
  199321             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  199322             : 
  199323             : // *** COMMON CODE SECTION BEGINS HERE ***
  199324             : 
  199325             :     public:
  199326             : 
  199327             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  199328             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  199329             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  199330             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  199331             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  199332             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  199333             : 
  199334             :       /*! \brief returns a string representing the class name */
  199335             :           virtual std::string class_name() const override;
  199336             : 
  199337             :       /*! \brief returns new style SageIII enum values */
  199338             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  199339             : 
  199340             :       /*! \brief static variant value */
  199341             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  199342             :        // static const VariantT static_variant = V_SgOmpScanStatement;
  199343             :           enum { static_variant = V_SgOmpScanStatement };
  199344             : 
  199345             :        /* the generated cast function */
  199346             :       /*! \brief Casts pointer from base class to derived class */
  199347             :           ROSE_DLL_API friend       SgOmpScanStatement* isSgOmpScanStatement(       SgNode * s );
  199348             : 
  199349             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  199350             :           ROSE_DLL_API friend const SgOmpScanStatement* isSgOmpScanStatement( const SgNode * s );
  199351             : 
  199352             :      // ******************************************
  199353             :      // * Memory Pool / New / Delete
  199354             :      // ******************************************
  199355             : 
  199356             :      public:
  199357             :           /// \private
  199358             :           static const unsigned pool_size; //
  199359             :           /// \private
  199360             :           static std::vector<unsigned char *> pools; //
  199361             :           /// \private
  199362             :           static SgOmpScanStatement * next_node; // 
  199363             : 
  199364             :           /// \private
  199365             :           static unsigned long initializeStorageClassArray(SgOmpScanStatementStorageClass *); //
  199366             : 
  199367             :           /// \private
  199368             :           static void clearMemoryPool(); //
  199369             :           static void deleteMemoryPool(); //
  199370             : 
  199371             :           /// \private
  199372             :           static void extendMemoryPoolForFileIO(); //
  199373             : 
  199374             :           /// \private
  199375             :           static SgOmpScanStatement * getPointerFromGlobalIndex(unsigned long); //
  199376             :           /// \private
  199377             :           static SgOmpScanStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  199378             : 
  199379             :           /// \private
  199380             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  199381             :           /// \private
  199382             :           static void resetValidFreepointers(); //
  199383             :           /// \private
  199384             :           static unsigned long getNumberOfLastValidPointer(); //
  199385             : 
  199386             : 
  199387             : #if defined(INLINE_FUNCTIONS)
  199388             :       /*! \brief returns pointer to newly allocated IR node */
  199389             :           inline void *operator new (size_t size);
  199390             : #else
  199391             :       /*! \brief returns pointer to newly allocated IR node */
  199392             :           void *operator new (size_t size);
  199393             : #endif
  199394             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  199395             :           void operator delete (void* pointer, size_t size);
  199396             : 
  199397             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  199398           0 :           void operator delete (void* pointer)
  199399             :              {
  199400             :             // This is the generated delete operator...
  199401           0 :                SgOmpScanStatement::operator delete (pointer,sizeof(SgOmpScanStatement));
  199402             :              }
  199403             : 
  199404             :       /*! \brief Returns the total number of IR nodes of this type */
  199405             :           static size_t numberOfNodes();
  199406             : 
  199407             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  199408             :           static size_t memoryUsage();
  199409             : 
  199410             :       // End of scope which started in IR nodes specific code 
  199411             :       /* */
  199412             : 
  199413             :       /* name Internal Functions
  199414             :           \brief Internal functions ... incomplete-documentation
  199415             : 
  199416             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199417             :           or by particularly knowledgeable users for specialized tools or applications.
  199418             : 
  199419             :           \internal We could not make these private because they are required by user for special purposes. And 
  199420             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  199421             :          
  199422             :        */
  199423             : 
  199424             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  199425             :        // overridden in every class by *generated* implementation
  199426             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  199427             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  199428             :        // MS: 06/28/02 container of names of variables or container indices 
  199429             :        // used used in the traversal to access AST successor nodes
  199430             :        // overridden in every class by *generated* implementation
  199431             :       /*! \brief container of names of variables or container indices used used in the traversal
  199432             :           to access AST successor nodes overridden in every class by *generated* implementation */
  199433             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  199434             : 
  199435             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  199436             :        // than all the vector copies. The implementation for these functions is generated for each class.
  199437             :       /*! \brief return number of children in the traversal successor list */
  199438             :           virtual size_t get_numberOfTraversalSuccessors() override;
  199439             :       /*! \brief index-based access to traversal successors by index number */
  199440             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  199441             :       /*! \brief index-based access to traversal successors by child node */
  199442             :           virtual size_t get_childIndex(SgNode *child) override;
  199443             : 
  199444             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  199445             :        // MS: 08/16/2002 method for generating RTI information
  199446             :       /*! \brief return C++ Runtime-Time-Information */
  199447             :           virtual RTIReturnType roseRTI() override;
  199448             : #endif
  199449             :       /* */
  199450             : 
  199451             : 
  199452             : 
  199453             :       /* name Deprecated Functions
  199454             :           \brief Deprecated functions ... incomplete-documentation
  199455             : 
  199456             :           These functions have been deprecated from use.
  199457             :        */
  199458             :       /* */
  199459             : 
  199460             :       /*! returns a C style string (char*) representing the class name */
  199461             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  199462             : 
  199463             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  199464             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  199465             : #if 0
  199466             :       /*! returns old style Sage II enum values */
  199467             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  199468             :       /*! returns old style Sage II enum values */
  199469             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  199470             : #endif
  199471             :       /* */
  199472             : 
  199473             : 
  199474             : 
  199475             : 
  199476             :      public:
  199477             :       /* name Traversal Support Functions
  199478             :           \brief Traversal support functions ... incomplete-documentation
  199479             : 
  199480             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199481             :           or by particularly knowledgable users for specialized tools or applications.
  199482             :        */
  199483             :       /* */
  199484             : 
  199485             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  199486             :        // (inferior to ROSE traversal mechanism, experimental).
  199487             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  199488             :        */
  199489             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  199490             : 
  199491             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  199492             :       /*! \brief support for the classic visitor pattern done in GoF */
  199493             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  199494             : 
  199495             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  199496             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  199497             :        */
  199498             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  199499             : 
  199500             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  199501             :        */
  199502             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  199503             : 
  199504             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  199505             :        // This traversal helps support internal tools that call static member functions.
  199506             :        // note: this function operates on the memory pools.
  199507             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  199508             :        */
  199509             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  199510             :       /* */
  199511             : 
  199512             : 
  199513             :      public:
  199514             :       /* name Memory Allocation Functions
  199515             :           \brief Memory allocations functions ... incomplete-documentation
  199516             : 
  199517             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199518             :           or by particularly knowledgable users for specialized tools or applications.
  199519             :        */
  199520             :       /* */
  199521             : 
  199522             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  199523             : 
  199524             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  199525             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  199526             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  199527             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  199528             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  199529             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  199530             :           being used with the AST File I/O mechanism.
  199531             :        */
  199532             :           virtual bool isInMemoryPool() override;
  199533             : 
  199534             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  199535             : 
  199536             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  199537             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  199538             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  199539             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  199540             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  199541             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  199542             :           being used with the AST File I/O mechanism.
  199543             :        */
  199544             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  199545             : 
  199546             :       // DQ (4/30/2006): Modified to be a const function.
  199547             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  199548             : 
  199549             :           This functions is part of general support for many possible tools to operate 
  199550             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  199551             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  199552             :           less than the set of pointers used by the AST file I/O. This is part of
  199553             :           work implemented by Andreas, and support tools such as the AST graph generation.
  199554             : 
  199555             :           \warning This function can return unexpected data members and thus the 
  199556             :                    order and the number of elements is unpredicable and subject 
  199557             :                    to change.
  199558             : 
  199559             :           \returns STL vector of pairs of SgNode* and strings
  199560             :        */
  199561             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  199562             : 
  199563             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  199564             : 
  199565             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  199566             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  199567             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  199568             : 
  199569             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  199570             :                    and subject to change.
  199571             :        */
  199572             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  199573             : 
  199574             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  199575             : 
  199576             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  199577             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  199578             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  199579             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  199580             : 
  199581             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  199582             : 
  199583             :           \returns long
  199584             :        */
  199585             :           virtual long getChildIndex( SgNode* childNode ) const override;
  199586             : 
  199587             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  199588             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  199589             :       /* \brief Constructor for use by AST File I/O Mechanism
  199590             : 
  199591             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  199592             :           which obtained via fast binary file I/O from disk.
  199593             :        */
  199594             :        // SgOmpScanStatement( SgOmpScanStatementStorageClass& source );
  199595             : 
  199596             : 
  199597             : 
  199598             : 
  199599             : 
  199600             :  // JH (10/24/2005): methods added to support the ast file IO
  199601             :     private:
  199602             : 
  199603             :       /* name AST Memory Allocation Support Functions
  199604             :           \brief Memory allocations support....
  199605             : 
  199606             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  199607             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  199608             :           and support the AST File I/O Mechanism.
  199609             :        */
  199610             :       /* */
  199611             : 
  199612             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  199613             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  199614             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  199615             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  199616             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  199617             :           a correspinding one in the AST_FILE_IO class!
  199618             :        */
  199619             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  199620             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  199621             :       /* \brief Typedef used for low level memory access.
  199622             :        */
  199623             :        // typedef unsigned char* TestType;
  199624             : 
  199625             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  199626             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  199627             :       /* \brief Typedef used to hold memory addresses as values.
  199628             :        */
  199629             :        // typedef unsigned long  AddressType;
  199630             : 
  199631             : 
  199632             : 
  199633             :        // necessary, to have direct access to the p_freepointer and the private methods !
  199634             :       /*! \brief friend class declaration to support AST File I/O */
  199635             :           friend class AST_FILE_IO;
  199636             : 
  199637             :       /*! \brief friend class declaration to support AST File I/O */
  199638             :           friend class SgOmpScanStatementStorageClass;
  199639             : 
  199640             :       /*! \brief friend class declaration to support AST File I/O */
  199641             :           friend class AstSpecificDataManagingClass;
  199642             : 
  199643             :       /*! \brief friend class declaration to support AST File I/O */
  199644             :           friend class AstSpecificDataManagingClassStorageClass;
  199645             :     public:
  199646             :       /*! \brief IR node constructor to support AST File I/O */
  199647             :           SgOmpScanStatement( const SgOmpScanStatementStorageClass& source );
  199648             : 
  199649             :  // private: // JJW hack
  199650             :        /*
  199651             :           name AST Memory Allocation Support Variables
  199652             :           Memory allocations support variables 
  199653             : 
  199654             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  199655             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  199656             :           and support the AST File I/O Mechanism.
  199657             :        */
  199658             :       /* */
  199659             : 
  199660             :     public:
  199661             : 
  199662             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  199663             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  199664             :       // virtual SgNode* addRegExpAttribute();
  199665             :       /*! \brief Support for AST matching using regular expression.
  199666             : 
  199667             :           This support is incomplete and the subject of current research to define 
  199668             :           RegEx trees to support inexact matching.
  199669             :        */
  199670             :           SgOmpScanStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  199671             : 
  199672             : // *** COMMON CODE SECTION ENDS HERE ***
  199673             : 
  199674             : 
  199675             : // End of memberFunctionString
  199676             : // Start of memberFunctionString
  199677             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  199678             : 
  199679             :      // the generated cast function
  199680             :      // friend ROSE_DLL_API SgOmpScanStatement* isSgOmpScanStatement ( SgNode* s );
  199681             : 
  199682             :           typedef SgUpirFieldBodyStatement base_node_type;
  199683             : 
  199684             : 
  199685             : // End of memberFunctionString
  199686             : // Start of memberFunctionString
  199687             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  199688             : 
  199689             :           void post_construction_initialization() override;
  199690             : 
  199691             : 
  199692             : // End of memberFunctionString
  199693             : 
  199694             : 
  199695             :      public: 
  199696             :          virtual ~SgOmpScanStatement();
  199697             : 
  199698             : 
  199699             :      public: 
  199700             :          SgOmpScanStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  199701             :          SgOmpScanStatement(SgStatement* body); 
  199702             : 
  199703             :     protected:
  199704             : 
  199705             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpScanStatement>;
  199706             : 
  199707             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199708             : 
  199709             : 
  199710             :    };
  199711             : #endif
  199712             : 
  199713             : // postdeclarations for SgOmpScanStatement
  199714             : 
  199715             : /* #line 199716 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199716             : 
  199717             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  199718             : 
  199719             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199720             : 
  199721             : 
  199722             : /* #line 199723 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199723             : 
  199724             : 
  199725             : 
  199726             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199727             : 
  199728             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  199729             : //      This code is automatically generated for each 
  199730             : //      terminal and non-terminal within the defined 
  199731             : //      grammar.  There is a simple way to change the 
  199732             : //      code to fix bugs etc.  See the ROSE README file
  199733             : //      for directions.
  199734             : 
  199735             : // tps: (02/22/2010): Adding DLL export requirements
  199736             : #include "rosedll.h"
  199737             : 
  199738             : // predeclarations for SgOmpMetadirectiveStatement
  199739             : 
  199740             : /* #line 199741 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199741             : 
  199742             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  199743             : 
  199744             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  199745             : 
  199746             : #if 1
  199747             : // Class Definition for SgOmpMetadirectiveStatement
  199748             : class ROSE_DLL_API SgOmpMetadirectiveStatement  : public SgUpirFieldBodyStatement
  199749             :    {
  199750             :      public:
  199751             : 
  199752             : 
  199753             : /* #line 199754 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  199754             : 
  199755             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  199756             : // Start of memberFunctionString
  199757             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  199758             : 
  199759             : // *** COMMON CODE SECTION BEGINS HERE ***
  199760             : 
  199761             :     public:
  199762             : 
  199763             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  199764             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  199765             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  199766             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  199767             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  199768             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  199769             : 
  199770             :       /*! \brief returns a string representing the class name */
  199771             :           virtual std::string class_name() const override;
  199772             : 
  199773             :       /*! \brief returns new style SageIII enum values */
  199774             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  199775             : 
  199776             :       /*! \brief static variant value */
  199777             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  199778             :        // static const VariantT static_variant = V_SgOmpMetadirectiveStatement;
  199779             :           enum { static_variant = V_SgOmpMetadirectiveStatement };
  199780             : 
  199781             :        /* the generated cast function */
  199782             :       /*! \brief Casts pointer from base class to derived class */
  199783             :           ROSE_DLL_API friend       SgOmpMetadirectiveStatement* isSgOmpMetadirectiveStatement(       SgNode * s );
  199784             : 
  199785             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  199786             :           ROSE_DLL_API friend const SgOmpMetadirectiveStatement* isSgOmpMetadirectiveStatement( const SgNode * s );
  199787             : 
  199788             :      // ******************************************
  199789             :      // * Memory Pool / New / Delete
  199790             :      // ******************************************
  199791             : 
  199792             :      public:
  199793             :           /// \private
  199794             :           static const unsigned pool_size; //
  199795             :           /// \private
  199796             :           static std::vector<unsigned char *> pools; //
  199797             :           /// \private
  199798             :           static SgOmpMetadirectiveStatement * next_node; // 
  199799             : 
  199800             :           /// \private
  199801             :           static unsigned long initializeStorageClassArray(SgOmpMetadirectiveStatementStorageClass *); //
  199802             : 
  199803             :           /// \private
  199804             :           static void clearMemoryPool(); //
  199805             :           static void deleteMemoryPool(); //
  199806             : 
  199807             :           /// \private
  199808             :           static void extendMemoryPoolForFileIO(); //
  199809             : 
  199810             :           /// \private
  199811             :           static SgOmpMetadirectiveStatement * getPointerFromGlobalIndex(unsigned long); //
  199812             :           /// \private
  199813             :           static SgOmpMetadirectiveStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  199814             : 
  199815             :           /// \private
  199816             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  199817             :           /// \private
  199818             :           static void resetValidFreepointers(); //
  199819             :           /// \private
  199820             :           static unsigned long getNumberOfLastValidPointer(); //
  199821             : 
  199822             : 
  199823             : #if defined(INLINE_FUNCTIONS)
  199824             :       /*! \brief returns pointer to newly allocated IR node */
  199825             :           inline void *operator new (size_t size);
  199826             : #else
  199827             :       /*! \brief returns pointer to newly allocated IR node */
  199828             :           void *operator new (size_t size);
  199829             : #endif
  199830             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  199831             :           void operator delete (void* pointer, size_t size);
  199832             : 
  199833             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  199834           0 :           void operator delete (void* pointer)
  199835             :              {
  199836             :             // This is the generated delete operator...
  199837           0 :                SgOmpMetadirectiveStatement::operator delete (pointer,sizeof(SgOmpMetadirectiveStatement));
  199838             :              }
  199839             : 
  199840             :       /*! \brief Returns the total number of IR nodes of this type */
  199841             :           static size_t numberOfNodes();
  199842             : 
  199843             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  199844             :           static size_t memoryUsage();
  199845             : 
  199846             :       // End of scope which started in IR nodes specific code 
  199847             :       /* */
  199848             : 
  199849             :       /* name Internal Functions
  199850             :           \brief Internal functions ... incomplete-documentation
  199851             : 
  199852             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199853             :           or by particularly knowledgeable users for specialized tools or applications.
  199854             : 
  199855             :           \internal We could not make these private because they are required by user for special purposes. And 
  199856             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  199857             :          
  199858             :        */
  199859             : 
  199860             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  199861             :        // overridden in every class by *generated* implementation
  199862             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  199863             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  199864             :        // MS: 06/28/02 container of names of variables or container indices 
  199865             :        // used used in the traversal to access AST successor nodes
  199866             :        // overridden in every class by *generated* implementation
  199867             :       /*! \brief container of names of variables or container indices used used in the traversal
  199868             :           to access AST successor nodes overridden in every class by *generated* implementation */
  199869             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  199870             : 
  199871             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  199872             :        // than all the vector copies. The implementation for these functions is generated for each class.
  199873             :       /*! \brief return number of children in the traversal successor list */
  199874             :           virtual size_t get_numberOfTraversalSuccessors() override;
  199875             :       /*! \brief index-based access to traversal successors by index number */
  199876             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  199877             :       /*! \brief index-based access to traversal successors by child node */
  199878             :           virtual size_t get_childIndex(SgNode *child) override;
  199879             : 
  199880             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  199881             :        // MS: 08/16/2002 method for generating RTI information
  199882             :       /*! \brief return C++ Runtime-Time-Information */
  199883             :           virtual RTIReturnType roseRTI() override;
  199884             : #endif
  199885             :       /* */
  199886             : 
  199887             : 
  199888             : 
  199889             :       /* name Deprecated Functions
  199890             :           \brief Deprecated functions ... incomplete-documentation
  199891             : 
  199892             :           These functions have been deprecated from use.
  199893             :        */
  199894             :       /* */
  199895             : 
  199896             :       /*! returns a C style string (char*) representing the class name */
  199897             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  199898             : 
  199899             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  199900             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  199901             : #if 0
  199902             :       /*! returns old style Sage II enum values */
  199903             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  199904             :       /*! returns old style Sage II enum values */
  199905             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  199906             : #endif
  199907             :       /* */
  199908             : 
  199909             : 
  199910             : 
  199911             : 
  199912             :      public:
  199913             :       /* name Traversal Support Functions
  199914             :           \brief Traversal support functions ... incomplete-documentation
  199915             : 
  199916             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199917             :           or by particularly knowledgable users for specialized tools or applications.
  199918             :        */
  199919             :       /* */
  199920             : 
  199921             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  199922             :        // (inferior to ROSE traversal mechanism, experimental).
  199923             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  199924             :        */
  199925             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  199926             : 
  199927             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  199928             :       /*! \brief support for the classic visitor pattern done in GoF */
  199929             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  199930             : 
  199931             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  199932             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  199933             :        */
  199934             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  199935             : 
  199936             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  199937             :        */
  199938             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  199939             : 
  199940             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  199941             :        // This traversal helps support internal tools that call static member functions.
  199942             :        // note: this function operates on the memory pools.
  199943             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  199944             :        */
  199945             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  199946             :       /* */
  199947             : 
  199948             : 
  199949             :      public:
  199950             :       /* name Memory Allocation Functions
  199951             :           \brief Memory allocations functions ... incomplete-documentation
  199952             : 
  199953             :           These functions have been made public as part of the design, but they are suggested for internal use 
  199954             :           or by particularly knowledgable users for specialized tools or applications.
  199955             :        */
  199956             :       /* */
  199957             : 
  199958             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  199959             : 
  199960             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  199961             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  199962             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  199963             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  199964             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  199965             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  199966             :           being used with the AST File I/O mechanism.
  199967             :        */
  199968             :           virtual bool isInMemoryPool() override;
  199969             : 
  199970             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  199971             : 
  199972             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  199973             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  199974             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  199975             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  199976             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  199977             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  199978             :           being used with the AST File I/O mechanism.
  199979             :        */
  199980             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  199981             : 
  199982             :       // DQ (4/30/2006): Modified to be a const function.
  199983             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  199984             : 
  199985             :           This functions is part of general support for many possible tools to operate 
  199986             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  199987             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  199988             :           less than the set of pointers used by the AST file I/O. This is part of
  199989             :           work implemented by Andreas, and support tools such as the AST graph generation.
  199990             : 
  199991             :           \warning This function can return unexpected data members and thus the 
  199992             :                    order and the number of elements is unpredicable and subject 
  199993             :                    to change.
  199994             : 
  199995             :           \returns STL vector of pairs of SgNode* and strings
  199996             :        */
  199997             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  199998             : 
  199999             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  200000             : 
  200001             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  200002             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  200003             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  200004             : 
  200005             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  200006             :                    and subject to change.
  200007             :        */
  200008             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  200009             : 
  200010             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  200011             : 
  200012             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  200013             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  200014             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  200015             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  200016             : 
  200017             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  200018             : 
  200019             :           \returns long
  200020             :        */
  200021             :           virtual long getChildIndex( SgNode* childNode ) const override;
  200022             : 
  200023             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  200024             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200025             :       /* \brief Constructor for use by AST File I/O Mechanism
  200026             : 
  200027             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  200028             :           which obtained via fast binary file I/O from disk.
  200029             :        */
  200030             :        // SgOmpMetadirectiveStatement( SgOmpMetadirectiveStatementStorageClass& source );
  200031             : 
  200032             : 
  200033             : 
  200034             : 
  200035             : 
  200036             :  // JH (10/24/2005): methods added to support the ast file IO
  200037             :     private:
  200038             : 
  200039             :       /* name AST Memory Allocation Support Functions
  200040             :           \brief Memory allocations support....
  200041             : 
  200042             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  200043             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  200044             :           and support the AST File I/O Mechanism.
  200045             :        */
  200046             :       /* */
  200047             : 
  200048             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  200049             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  200050             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  200051             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  200052             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  200053             :           a correspinding one in the AST_FILE_IO class!
  200054             :        */
  200055             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  200056             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200057             :       /* \brief Typedef used for low level memory access.
  200058             :        */
  200059             :        // typedef unsigned char* TestType;
  200060             : 
  200061             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  200062             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200063             :       /* \brief Typedef used to hold memory addresses as values.
  200064             :        */
  200065             :        // typedef unsigned long  AddressType;
  200066             : 
  200067             : 
  200068             : 
  200069             :        // necessary, to have direct access to the p_freepointer and the private methods !
  200070             :       /*! \brief friend class declaration to support AST File I/O */
  200071             :           friend class AST_FILE_IO;
  200072             : 
  200073             :       /*! \brief friend class declaration to support AST File I/O */
  200074             :           friend class SgOmpMetadirectiveStatementStorageClass;
  200075             : 
  200076             :       /*! \brief friend class declaration to support AST File I/O */
  200077             :           friend class AstSpecificDataManagingClass;
  200078             : 
  200079             :       /*! \brief friend class declaration to support AST File I/O */
  200080             :           friend class AstSpecificDataManagingClassStorageClass;
  200081             :     public:
  200082             :       /*! \brief IR node constructor to support AST File I/O */
  200083             :           SgOmpMetadirectiveStatement( const SgOmpMetadirectiveStatementStorageClass& source );
  200084             : 
  200085             :  // private: // JJW hack
  200086             :        /*
  200087             :           name AST Memory Allocation Support Variables
  200088             :           Memory allocations support variables 
  200089             : 
  200090             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  200091             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  200092             :           and support the AST File I/O Mechanism.
  200093             :        */
  200094             :       /* */
  200095             : 
  200096             :     public:
  200097             : 
  200098             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  200099             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  200100             :       // virtual SgNode* addRegExpAttribute();
  200101             :       /*! \brief Support for AST matching using regular expression.
  200102             : 
  200103             :           This support is incomplete and the subject of current research to define 
  200104             :           RegEx trees to support inexact matching.
  200105             :        */
  200106             :           SgOmpMetadirectiveStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  200107             : 
  200108             : // *** COMMON CODE SECTION ENDS HERE ***
  200109             : 
  200110             : 
  200111             : // End of memberFunctionString
  200112             : // Start of memberFunctionString
  200113             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  200114             : 
  200115             :      // the generated cast function
  200116             :      // friend ROSE_DLL_API SgOmpMetadirectiveStatement* isSgOmpMetadirectiveStatement ( SgNode* s );
  200117             : 
  200118             :           typedef SgUpirFieldBodyStatement base_node_type;
  200119             : 
  200120             : 
  200121             : // End of memberFunctionString
  200122             : // Start of memberFunctionString
  200123             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  200124             : 
  200125             :           void post_construction_initialization() override;
  200126             : 
  200127             : 
  200128             : // End of memberFunctionString
  200129             : 
  200130             : 
  200131             :      public: 
  200132             :          virtual ~SgOmpMetadirectiveStatement();
  200133             : 
  200134             : 
  200135             :      public: 
  200136             :          SgOmpMetadirectiveStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  200137             :          SgOmpMetadirectiveStatement(SgStatement* body); 
  200138             : 
  200139             :     protected:
  200140             : 
  200141             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpMetadirectiveStatement>;
  200142             : 
  200143             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200144             : 
  200145             : 
  200146             :    };
  200147             : #endif
  200148             : 
  200149             : // postdeclarations for SgOmpMetadirectiveStatement
  200150             : 
  200151             : /* #line 200152 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200152             : 
  200153             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  200154             : 
  200155             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200156             : 
  200157             : 
  200158             : /* #line 200159 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200159             : 
  200160             : 
  200161             : 
  200162             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200163             : 
  200164             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  200165             : //      This code is automatically generated for each 
  200166             : //      terminal and non-terminal within the defined 
  200167             : //      grammar.  There is a simple way to change the 
  200168             : //      code to fix bugs etc.  See the ROSE README file
  200169             : //      for directions.
  200170             : 
  200171             : // tps: (02/22/2010): Adding DLL export requirements
  200172             : #include "rosedll.h"
  200173             : 
  200174             : // predeclarations for SgOmpLoopStatement
  200175             : 
  200176             : /* #line 200177 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200177             : 
  200178             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  200179             : 
  200180             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200181             : 
  200182             : #if 1
  200183             : // Class Definition for SgOmpLoopStatement
  200184             : class ROSE_DLL_API SgOmpLoopStatement  : public SgUpirFieldBodyStatement
  200185             :    {
  200186             :      public:
  200187             : 
  200188             : 
  200189             : /* #line 200190 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200190             : 
  200191             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  200192             : // Start of memberFunctionString
  200193             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  200194             : 
  200195             : // *** COMMON CODE SECTION BEGINS HERE ***
  200196             : 
  200197             :     public:
  200198             : 
  200199             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  200200             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  200201             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  200202             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  200203             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  200204             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  200205             : 
  200206             :       /*! \brief returns a string representing the class name */
  200207             :           virtual std::string class_name() const override;
  200208             : 
  200209             :       /*! \brief returns new style SageIII enum values */
  200210             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  200211             : 
  200212             :       /*! \brief static variant value */
  200213             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  200214             :        // static const VariantT static_variant = V_SgOmpLoopStatement;
  200215             :           enum { static_variant = V_SgOmpLoopStatement };
  200216             : 
  200217             :        /* the generated cast function */
  200218             :       /*! \brief Casts pointer from base class to derived class */
  200219             :           ROSE_DLL_API friend       SgOmpLoopStatement* isSgOmpLoopStatement(       SgNode * s );
  200220             : 
  200221             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  200222             :           ROSE_DLL_API friend const SgOmpLoopStatement* isSgOmpLoopStatement( const SgNode * s );
  200223             : 
  200224             :      // ******************************************
  200225             :      // * Memory Pool / New / Delete
  200226             :      // ******************************************
  200227             : 
  200228             :      public:
  200229             :           /// \private
  200230             :           static const unsigned pool_size; //
  200231             :           /// \private
  200232             :           static std::vector<unsigned char *> pools; //
  200233             :           /// \private
  200234             :           static SgOmpLoopStatement * next_node; // 
  200235             : 
  200236             :           /// \private
  200237             :           static unsigned long initializeStorageClassArray(SgOmpLoopStatementStorageClass *); //
  200238             : 
  200239             :           /// \private
  200240             :           static void clearMemoryPool(); //
  200241             :           static void deleteMemoryPool(); //
  200242             : 
  200243             :           /// \private
  200244             :           static void extendMemoryPoolForFileIO(); //
  200245             : 
  200246             :           /// \private
  200247             :           static SgOmpLoopStatement * getPointerFromGlobalIndex(unsigned long); //
  200248             :           /// \private
  200249             :           static SgOmpLoopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  200250             : 
  200251             :           /// \private
  200252             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  200253             :           /// \private
  200254             :           static void resetValidFreepointers(); //
  200255             :           /// \private
  200256             :           static unsigned long getNumberOfLastValidPointer(); //
  200257             : 
  200258             : 
  200259             : #if defined(INLINE_FUNCTIONS)
  200260             :       /*! \brief returns pointer to newly allocated IR node */
  200261             :           inline void *operator new (size_t size);
  200262             : #else
  200263             :       /*! \brief returns pointer to newly allocated IR node */
  200264             :           void *operator new (size_t size);
  200265             : #endif
  200266             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  200267             :           void operator delete (void* pointer, size_t size);
  200268             : 
  200269             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  200270           0 :           void operator delete (void* pointer)
  200271             :              {
  200272             :             // This is the generated delete operator...
  200273           0 :                SgOmpLoopStatement::operator delete (pointer,sizeof(SgOmpLoopStatement));
  200274             :              }
  200275             : 
  200276             :       /*! \brief Returns the total number of IR nodes of this type */
  200277             :           static size_t numberOfNodes();
  200278             : 
  200279             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  200280             :           static size_t memoryUsage();
  200281             : 
  200282             :       // End of scope which started in IR nodes specific code 
  200283             :       /* */
  200284             : 
  200285             :       /* name Internal Functions
  200286             :           \brief Internal functions ... incomplete-documentation
  200287             : 
  200288             :           These functions have been made public as part of the design, but they are suggested for internal use 
  200289             :           or by particularly knowledgeable users for specialized tools or applications.
  200290             : 
  200291             :           \internal We could not make these private because they are required by user for special purposes. And 
  200292             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  200293             :          
  200294             :        */
  200295             : 
  200296             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  200297             :        // overridden in every class by *generated* implementation
  200298             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  200299             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  200300             :        // MS: 06/28/02 container of names of variables or container indices 
  200301             :        // used used in the traversal to access AST successor nodes
  200302             :        // overridden in every class by *generated* implementation
  200303             :       /*! \brief container of names of variables or container indices used used in the traversal
  200304             :           to access AST successor nodes overridden in every class by *generated* implementation */
  200305             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  200306             : 
  200307             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  200308             :        // than all the vector copies. The implementation for these functions is generated for each class.
  200309             :       /*! \brief return number of children in the traversal successor list */
  200310             :           virtual size_t get_numberOfTraversalSuccessors() override;
  200311             :       /*! \brief index-based access to traversal successors by index number */
  200312             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  200313             :       /*! \brief index-based access to traversal successors by child node */
  200314             :           virtual size_t get_childIndex(SgNode *child) override;
  200315             : 
  200316             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  200317             :        // MS: 08/16/2002 method for generating RTI information
  200318             :       /*! \brief return C++ Runtime-Time-Information */
  200319             :           virtual RTIReturnType roseRTI() override;
  200320             : #endif
  200321             :       /* */
  200322             : 
  200323             : 
  200324             : 
  200325             :       /* name Deprecated Functions
  200326             :           \brief Deprecated functions ... incomplete-documentation
  200327             : 
  200328             :           These functions have been deprecated from use.
  200329             :        */
  200330             :       /* */
  200331             : 
  200332             :       /*! returns a C style string (char*) representing the class name */
  200333             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  200334             : 
  200335             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  200336             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  200337             : #if 0
  200338             :       /*! returns old style Sage II enum values */
  200339             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  200340             :       /*! returns old style Sage II enum values */
  200341             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  200342             : #endif
  200343             :       /* */
  200344             : 
  200345             : 
  200346             : 
  200347             : 
  200348             :      public:
  200349             :       /* name Traversal Support Functions
  200350             :           \brief Traversal support functions ... incomplete-documentation
  200351             : 
  200352             :           These functions have been made public as part of the design, but they are suggested for internal use 
  200353             :           or by particularly knowledgable users for specialized tools or applications.
  200354             :        */
  200355             :       /* */
  200356             : 
  200357             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  200358             :        // (inferior to ROSE traversal mechanism, experimental).
  200359             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  200360             :        */
  200361             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  200362             : 
  200363             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  200364             :       /*! \brief support for the classic visitor pattern done in GoF */
  200365             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  200366             : 
  200367             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  200368             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  200369             :        */
  200370             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  200371             : 
  200372             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  200373             :        */
  200374             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  200375             : 
  200376             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  200377             :        // This traversal helps support internal tools that call static member functions.
  200378             :        // note: this function operates on the memory pools.
  200379             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  200380             :        */
  200381             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  200382             :       /* */
  200383             : 
  200384             : 
  200385             :      public:
  200386             :       /* name Memory Allocation Functions
  200387             :           \brief Memory allocations functions ... incomplete-documentation
  200388             : 
  200389             :           These functions have been made public as part of the design, but they are suggested for internal use 
  200390             :           or by particularly knowledgable users for specialized tools or applications.
  200391             :        */
  200392             :       /* */
  200393             : 
  200394             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  200395             : 
  200396             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  200397             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  200398             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  200399             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  200400             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  200401             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  200402             :           being used with the AST File I/O mechanism.
  200403             :        */
  200404             :           virtual bool isInMemoryPool() override;
  200405             : 
  200406             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  200407             : 
  200408             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  200409             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  200410             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  200411             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  200412             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  200413             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  200414             :           being used with the AST File I/O mechanism.
  200415             :        */
  200416             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  200417             : 
  200418             :       // DQ (4/30/2006): Modified to be a const function.
  200419             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  200420             : 
  200421             :           This functions is part of general support for many possible tools to operate 
  200422             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  200423             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  200424             :           less than the set of pointers used by the AST file I/O. This is part of
  200425             :           work implemented by Andreas, and support tools such as the AST graph generation.
  200426             : 
  200427             :           \warning This function can return unexpected data members and thus the 
  200428             :                    order and the number of elements is unpredicable and subject 
  200429             :                    to change.
  200430             : 
  200431             :           \returns STL vector of pairs of SgNode* and strings
  200432             :        */
  200433             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  200434             : 
  200435             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  200436             : 
  200437             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  200438             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  200439             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  200440             : 
  200441             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  200442             :                    and subject to change.
  200443             :        */
  200444             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  200445             : 
  200446             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  200447             : 
  200448             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  200449             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  200450             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  200451             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  200452             : 
  200453             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  200454             : 
  200455             :           \returns long
  200456             :        */
  200457             :           virtual long getChildIndex( SgNode* childNode ) const override;
  200458             : 
  200459             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  200460             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200461             :       /* \brief Constructor for use by AST File I/O Mechanism
  200462             : 
  200463             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  200464             :           which obtained via fast binary file I/O from disk.
  200465             :        */
  200466             :        // SgOmpLoopStatement( SgOmpLoopStatementStorageClass& source );
  200467             : 
  200468             : 
  200469             : 
  200470             : 
  200471             : 
  200472             :  // JH (10/24/2005): methods added to support the ast file IO
  200473             :     private:
  200474             : 
  200475             :       /* name AST Memory Allocation Support Functions
  200476             :           \brief Memory allocations support....
  200477             : 
  200478             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  200479             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  200480             :           and support the AST File I/O Mechanism.
  200481             :        */
  200482             :       /* */
  200483             : 
  200484             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  200485             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  200486             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  200487             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  200488             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  200489             :           a correspinding one in the AST_FILE_IO class!
  200490             :        */
  200491             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  200492             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200493             :       /* \brief Typedef used for low level memory access.
  200494             :        */
  200495             :        // typedef unsigned char* TestType;
  200496             : 
  200497             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  200498             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200499             :       /* \brief Typedef used to hold memory addresses as values.
  200500             :        */
  200501             :        // typedef unsigned long  AddressType;
  200502             : 
  200503             : 
  200504             : 
  200505             :        // necessary, to have direct access to the p_freepointer and the private methods !
  200506             :       /*! \brief friend class declaration to support AST File I/O */
  200507             :           friend class AST_FILE_IO;
  200508             : 
  200509             :       /*! \brief friend class declaration to support AST File I/O */
  200510             :           friend class SgOmpLoopStatementStorageClass;
  200511             : 
  200512             :       /*! \brief friend class declaration to support AST File I/O */
  200513             :           friend class AstSpecificDataManagingClass;
  200514             : 
  200515             :       /*! \brief friend class declaration to support AST File I/O */
  200516             :           friend class AstSpecificDataManagingClassStorageClass;
  200517             :     public:
  200518             :       /*! \brief IR node constructor to support AST File I/O */
  200519             :           SgOmpLoopStatement( const SgOmpLoopStatementStorageClass& source );
  200520             : 
  200521             :  // private: // JJW hack
  200522             :        /*
  200523             :           name AST Memory Allocation Support Variables
  200524             :           Memory allocations support variables 
  200525             : 
  200526             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  200527             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  200528             :           and support the AST File I/O Mechanism.
  200529             :        */
  200530             :       /* */
  200531             : 
  200532             :     public:
  200533             : 
  200534             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  200535             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  200536             :       // virtual SgNode* addRegExpAttribute();
  200537             :       /*! \brief Support for AST matching using regular expression.
  200538             : 
  200539             :           This support is incomplete and the subject of current research to define 
  200540             :           RegEx trees to support inexact matching.
  200541             :        */
  200542             :           SgOmpLoopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  200543             : 
  200544             : // *** COMMON CODE SECTION ENDS HERE ***
  200545             : 
  200546             : 
  200547             : // End of memberFunctionString
  200548             : // Start of memberFunctionString
  200549             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  200550             : 
  200551             :      // the generated cast function
  200552             :      // friend ROSE_DLL_API SgOmpLoopStatement* isSgOmpLoopStatement ( SgNode* s );
  200553             : 
  200554             :           typedef SgUpirFieldBodyStatement base_node_type;
  200555             : 
  200556             : 
  200557             : // End of memberFunctionString
  200558             : // Start of memberFunctionString
  200559             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  200560             : 
  200561             :           void post_construction_initialization() override;
  200562             : 
  200563             : 
  200564             : // End of memberFunctionString
  200565             : 
  200566             : 
  200567             :      public: 
  200568             :          virtual ~SgOmpLoopStatement();
  200569             : 
  200570             : 
  200571             :      public: 
  200572             :          SgOmpLoopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  200573             :          SgOmpLoopStatement(SgStatement* body); 
  200574             : 
  200575             :     protected:
  200576             : 
  200577             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpLoopStatement>;
  200578             : 
  200579             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200580             : 
  200581             : 
  200582             :    };
  200583             : #endif
  200584             : 
  200585             : // postdeclarations for SgOmpLoopStatement
  200586             : 
  200587             : /* #line 200588 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200588             : 
  200589             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  200590             : 
  200591             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200592             : 
  200593             : 
  200594             : /* #line 200595 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200595             : 
  200596             : 
  200597             : 
  200598             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200599             : 
  200600             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  200601             : //      This code is automatically generated for each 
  200602             : //      terminal and non-terminal within the defined 
  200603             : //      grammar.  There is a simple way to change the 
  200604             : //      code to fix bugs etc.  See the ROSE README file
  200605             : //      for directions.
  200606             : 
  200607             : // tps: (02/22/2010): Adding DLL export requirements
  200608             : #include "rosedll.h"
  200609             : 
  200610             : // predeclarations for SgOmpOrderedStatement
  200611             : 
  200612             : /* #line 200613 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200613             : 
  200614             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  200615             : 
  200616             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  200617             : 
  200618             : #if 1
  200619             : // Class Definition for SgOmpOrderedStatement
  200620             : class ROSE_DLL_API SgOmpOrderedStatement  : public SgUpirFieldBodyStatement
  200621             :    {
  200622             :      public:
  200623             : 
  200624             : 
  200625             : /* #line 200626 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  200626             : 
  200627             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  200628             : // Start of memberFunctionString
  200629             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  200630             : 
  200631             : // *** COMMON CODE SECTION BEGINS HERE ***
  200632             : 
  200633             :     public:
  200634             : 
  200635             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  200636             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  200637             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  200638             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  200639             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  200640             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  200641             : 
  200642             :       /*! \brief returns a string representing the class name */
  200643             :           virtual std::string class_name() const override;
  200644             : 
  200645             :       /*! \brief returns new style SageIII enum values */
  200646             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  200647             : 
  200648             :       /*! \brief static variant value */
  200649             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  200650             :        // static const VariantT static_variant = V_SgOmpOrderedStatement;
  200651             :           enum { static_variant = V_SgOmpOrderedStatement };
  200652             : 
  200653             :        /* the generated cast function */
  200654             :       /*! \brief Casts pointer from base class to derived class */
  200655             :           ROSE_DLL_API friend       SgOmpOrderedStatement* isSgOmpOrderedStatement(       SgNode * s );
  200656             : 
  200657             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  200658             :           ROSE_DLL_API friend const SgOmpOrderedStatement* isSgOmpOrderedStatement( const SgNode * s );
  200659             : 
  200660             :      // ******************************************
  200661             :      // * Memory Pool / New / Delete
  200662             :      // ******************************************
  200663             : 
  200664             :      public:
  200665             :           /// \private
  200666             :           static const unsigned pool_size; //
  200667             :           /// \private
  200668             :           static std::vector<unsigned char *> pools; //
  200669             :           /// \private
  200670             :           static SgOmpOrderedStatement * next_node; // 
  200671             : 
  200672             :           /// \private
  200673             :           static unsigned long initializeStorageClassArray(SgOmpOrderedStatementStorageClass *); //
  200674             : 
  200675             :           /// \private
  200676             :           static void clearMemoryPool(); //
  200677             :           static void deleteMemoryPool(); //
  200678             : 
  200679             :           /// \private
  200680             :           static void extendMemoryPoolForFileIO(); //
  200681             : 
  200682             :           /// \private
  200683             :           static SgOmpOrderedStatement * getPointerFromGlobalIndex(unsigned long); //
  200684             :           /// \private
  200685             :           static SgOmpOrderedStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  200686             : 
  200687             :           /// \private
  200688             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  200689             :           /// \private
  200690             :           static void resetValidFreepointers(); //
  200691             :           /// \private
  200692             :           static unsigned long getNumberOfLastValidPointer(); //
  200693             : 
  200694             : 
  200695             : #if defined(INLINE_FUNCTIONS)
  200696             :       /*! \brief returns pointer to newly allocated IR node */
  200697             :           inline void *operator new (size_t size);
  200698             : #else
  200699             :       /*! \brief returns pointer to newly allocated IR node */
  200700             :           void *operator new (size_t size);
  200701             : #endif
  200702             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  200703             :           void operator delete (void* pointer, size_t size);
  200704             : 
  200705             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  200706           0 :           void operator delete (void* pointer)
  200707             :              {
  200708             :             // This is the generated delete operator...
  200709           0 :                SgOmpOrderedStatement::operator delete (pointer,sizeof(SgOmpOrderedStatement));
  200710             :              }
  200711             : 
  200712             :       /*! \brief Returns the total number of IR nodes of this type */
  200713             :           static size_t numberOfNodes();
  200714             : 
  200715             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  200716             :           static size_t memoryUsage();
  200717             : 
  200718             :       // End of scope which started in IR nodes specific code 
  200719             :       /* */
  200720             : 
  200721             :       /* name Internal Functions
  200722             :           \brief Internal functions ... incomplete-documentation
  200723             : 
  200724             :           These functions have been made public as part of the design, but they are suggested for internal use 
  200725             :           or by particularly knowledgeable users for specialized tools or applications.
  200726             : 
  200727             :           \internal We could not make these private because they are required by user for special purposes. And 
  200728             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  200729             :          
  200730             :        */
  200731             : 
  200732             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  200733             :        // overridden in every class by *generated* implementation
  200734             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  200735             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  200736             :        // MS: 06/28/02 container of names of variables or container indices 
  200737             :        // used used in the traversal to access AST successor nodes
  200738             :        // overridden in every class by *generated* implementation
  200739             :       /*! \brief container of names of variables or container indices used used in the traversal
  200740             :           to access AST successor nodes overridden in every class by *generated* implementation */
  200741             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  200742             : 
  200743             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  200744             :        // than all the vector copies. The implementation for these functions is generated for each class.
  200745             :       /*! \brief return number of children in the traversal successor list */
  200746             :           virtual size_t get_numberOfTraversalSuccessors() override;
  200747             :       /*! \brief index-based access to traversal successors by index number */
  200748             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  200749             :       /*! \brief index-based access to traversal successors by child node */
  200750             :           virtual size_t get_childIndex(SgNode *child) override;
  200751             : 
  200752             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  200753             :        // MS: 08/16/2002 method for generating RTI information
  200754             :       /*! \brief return C++ Runtime-Time-Information */
  200755             :           virtual RTIReturnType roseRTI() override;
  200756             : #endif
  200757             :       /* */
  200758             : 
  200759             : 
  200760             : 
  200761             :       /* name Deprecated Functions
  200762             :           \brief Deprecated functions ... incomplete-documentation
  200763             : 
  200764             :           These functions have been deprecated from use.
  200765             :        */
  200766             :       /* */
  200767             : 
  200768             :       /*! returns a C style string (char*) representing the class name */
  200769             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  200770             : 
  200771             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  200772             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  200773             : #if 0
  200774             :       /*! returns old style Sage II enum values */
  200775             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  200776             :       /*! returns old style Sage II enum values */
  200777             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  200778             : #endif
  200779             :       /* */
  200780             : 
  200781             : 
  200782             : 
  200783             : 
  200784             :      public:
  200785             :       /* name Traversal Support Functions
  200786             :           \brief Traversal support functions ... incomplete-documentation
  200787             : 
  200788             :           These functions have been made public as part of the design, but they are suggested for internal use 
  200789             :           or by particularly knowledgable users for specialized tools or applications.
  200790             :        */
  200791             :       /* */
  200792             : 
  200793             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  200794             :        // (inferior to ROSE traversal mechanism, experimental).
  200795             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  200796             :        */
  200797             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  200798             : 
  200799             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  200800             :       /*! \brief support for the classic visitor pattern done in GoF */
  200801             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  200802             : 
  200803             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  200804             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  200805             :        */
  200806             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  200807             : 
  200808             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  200809             :        */
  200810             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  200811             : 
  200812             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  200813             :        // This traversal helps support internal tools that call static member functions.
  200814             :        // note: this function operates on the memory pools.
  200815             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  200816             :        */
  200817             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  200818             :       /* */
  200819             : 
  200820             : 
  200821             :      public:
  200822             :       /* name Memory Allocation Functions
  200823             :           \brief Memory allocations functions ... incomplete-documentation
  200824             : 
  200825             :           These functions have been made public as part of the design, but they are suggested for internal use 
  200826             :           or by particularly knowledgable users for specialized tools or applications.
  200827             :        */
  200828             :       /* */
  200829             : 
  200830             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  200831             : 
  200832             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  200833             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  200834             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  200835             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  200836             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  200837             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  200838             :           being used with the AST File I/O mechanism.
  200839             :        */
  200840             :           virtual bool isInMemoryPool() override;
  200841             : 
  200842             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  200843             : 
  200844             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  200845             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  200846             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  200847             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  200848             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  200849             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  200850             :           being used with the AST File I/O mechanism.
  200851             :        */
  200852             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  200853             : 
  200854             :       // DQ (4/30/2006): Modified to be a const function.
  200855             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  200856             : 
  200857             :           This functions is part of general support for many possible tools to operate 
  200858             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  200859             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  200860             :           less than the set of pointers used by the AST file I/O. This is part of
  200861             :           work implemented by Andreas, and support tools such as the AST graph generation.
  200862             : 
  200863             :           \warning This function can return unexpected data members and thus the 
  200864             :                    order and the number of elements is unpredicable and subject 
  200865             :                    to change.
  200866             : 
  200867             :           \returns STL vector of pairs of SgNode* and strings
  200868             :        */
  200869             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  200870             : 
  200871             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  200872             : 
  200873             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  200874             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  200875             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  200876             : 
  200877             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  200878             :                    and subject to change.
  200879             :        */
  200880             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  200881             : 
  200882             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  200883             : 
  200884             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  200885             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  200886             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  200887             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  200888             : 
  200889             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  200890             : 
  200891             :           \returns long
  200892             :        */
  200893             :           virtual long getChildIndex( SgNode* childNode ) const override;
  200894             : 
  200895             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  200896             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200897             :       /* \brief Constructor for use by AST File I/O Mechanism
  200898             : 
  200899             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  200900             :           which obtained via fast binary file I/O from disk.
  200901             :        */
  200902             :        // SgOmpOrderedStatement( SgOmpOrderedStatementStorageClass& source );
  200903             : 
  200904             : 
  200905             : 
  200906             : 
  200907             : 
  200908             :  // JH (10/24/2005): methods added to support the ast file IO
  200909             :     private:
  200910             : 
  200911             :       /* name AST Memory Allocation Support Functions
  200912             :           \brief Memory allocations support....
  200913             : 
  200914             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  200915             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  200916             :           and support the AST File I/O Mechanism.
  200917             :        */
  200918             :       /* */
  200919             : 
  200920             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  200921             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  200922             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  200923             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  200924             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  200925             :           a correspinding one in the AST_FILE_IO class!
  200926             :        */
  200927             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  200928             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200929             :       /* \brief Typedef used for low level memory access.
  200930             :        */
  200931             :        // typedef unsigned char* TestType;
  200932             : 
  200933             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  200934             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  200935             :       /* \brief Typedef used to hold memory addresses as values.
  200936             :        */
  200937             :        // typedef unsigned long  AddressType;
  200938             : 
  200939             : 
  200940             : 
  200941             :        // necessary, to have direct access to the p_freepointer and the private methods !
  200942             :       /*! \brief friend class declaration to support AST File I/O */
  200943             :           friend class AST_FILE_IO;
  200944             : 
  200945             :       /*! \brief friend class declaration to support AST File I/O */
  200946             :           friend class SgOmpOrderedStatementStorageClass;
  200947             : 
  200948             :       /*! \brief friend class declaration to support AST File I/O */
  200949             :           friend class AstSpecificDataManagingClass;
  200950             : 
  200951             :       /*! \brief friend class declaration to support AST File I/O */
  200952             :           friend class AstSpecificDataManagingClassStorageClass;
  200953             :     public:
  200954             :       /*! \brief IR node constructor to support AST File I/O */
  200955             :           SgOmpOrderedStatement( const SgOmpOrderedStatementStorageClass& source );
  200956             : 
  200957             :  // private: // JJW hack
  200958             :        /*
  200959             :           name AST Memory Allocation Support Variables
  200960             :           Memory allocations support variables 
  200961             : 
  200962             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  200963             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  200964             :           and support the AST File I/O Mechanism.
  200965             :        */
  200966             :       /* */
  200967             : 
  200968             :     public:
  200969             : 
  200970             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  200971             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  200972             :       // virtual SgNode* addRegExpAttribute();
  200973             :       /*! \brief Support for AST matching using regular expression.
  200974             : 
  200975             :           This support is incomplete and the subject of current research to define 
  200976             :           RegEx trees to support inexact matching.
  200977             :        */
  200978             :           SgOmpOrderedStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  200979             : 
  200980             : // *** COMMON CODE SECTION ENDS HERE ***
  200981             : 
  200982             : 
  200983             : // End of memberFunctionString
  200984             : // Start of memberFunctionString
  200985             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  200986             : 
  200987             :      // the generated cast function
  200988             :      // friend ROSE_DLL_API SgOmpOrderedStatement* isSgOmpOrderedStatement ( SgNode* s );
  200989             : 
  200990             :           typedef SgUpirFieldBodyStatement base_node_type;
  200991             : 
  200992             : 
  200993             : // End of memberFunctionString
  200994             : // Start of memberFunctionString
  200995             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  200996             : 
  200997             :           void post_construction_initialization() override;
  200998             : 
  200999             : 
  201000             : // End of memberFunctionString
  201001             : 
  201002             : 
  201003             :      public: 
  201004             :          virtual ~SgOmpOrderedStatement();
  201005             : 
  201006             : 
  201007             :      public: 
  201008             :          SgOmpOrderedStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  201009             :          SgOmpOrderedStatement(SgStatement* body); 
  201010             : 
  201011             :     protected:
  201012             : 
  201013             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpOrderedStatement>;
  201014             : 
  201015             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201016             : 
  201017             : 
  201018             :    };
  201019             : #endif
  201020             : 
  201021             : // postdeclarations for SgOmpOrderedStatement
  201022             : 
  201023             : /* #line 201024 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201024             : 
  201025             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  201026             : 
  201027             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201028             : 
  201029             : 
  201030             : /* #line 201031 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201031             : 
  201032             : 
  201033             : 
  201034             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201035             : 
  201036             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  201037             : //      This code is automatically generated for each 
  201038             : //      terminal and non-terminal within the defined 
  201039             : //      grammar.  There is a simple way to change the 
  201040             : //      code to fix bugs etc.  See the ROSE README file
  201041             : //      for directions.
  201042             : 
  201043             : // tps: (02/22/2010): Adding DLL export requirements
  201044             : #include "rosedll.h"
  201045             : 
  201046             : // predeclarations for SgOmpTaskgroupStatement
  201047             : 
  201048             : /* #line 201049 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201049             : 
  201050             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  201051             : 
  201052             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201053             : 
  201054             : #if 1
  201055             : // Class Definition for SgOmpTaskgroupStatement
  201056             : class ROSE_DLL_API SgOmpTaskgroupStatement  : public SgUpirFieldBodyStatement
  201057             :    {
  201058             :      public:
  201059             : 
  201060             : 
  201061             : /* #line 201062 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201062             : 
  201063             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  201064             : // Start of memberFunctionString
  201065             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  201066             : 
  201067             : // *** COMMON CODE SECTION BEGINS HERE ***
  201068             : 
  201069             :     public:
  201070             : 
  201071             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  201072             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  201073             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  201074             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  201075             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  201076             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  201077             : 
  201078             :       /*! \brief returns a string representing the class name */
  201079             :           virtual std::string class_name() const override;
  201080             : 
  201081             :       /*! \brief returns new style SageIII enum values */
  201082             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  201083             : 
  201084             :       /*! \brief static variant value */
  201085             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  201086             :        // static const VariantT static_variant = V_SgOmpTaskgroupStatement;
  201087             :           enum { static_variant = V_SgOmpTaskgroupStatement };
  201088             : 
  201089             :        /* the generated cast function */
  201090             :       /*! \brief Casts pointer from base class to derived class */
  201091             :           ROSE_DLL_API friend       SgOmpTaskgroupStatement* isSgOmpTaskgroupStatement(       SgNode * s );
  201092             : 
  201093             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  201094             :           ROSE_DLL_API friend const SgOmpTaskgroupStatement* isSgOmpTaskgroupStatement( const SgNode * s );
  201095             : 
  201096             :      // ******************************************
  201097             :      // * Memory Pool / New / Delete
  201098             :      // ******************************************
  201099             : 
  201100             :      public:
  201101             :           /// \private
  201102             :           static const unsigned pool_size; //
  201103             :           /// \private
  201104             :           static std::vector<unsigned char *> pools; //
  201105             :           /// \private
  201106             :           static SgOmpTaskgroupStatement * next_node; // 
  201107             : 
  201108             :           /// \private
  201109             :           static unsigned long initializeStorageClassArray(SgOmpTaskgroupStatementStorageClass *); //
  201110             : 
  201111             :           /// \private
  201112             :           static void clearMemoryPool(); //
  201113             :           static void deleteMemoryPool(); //
  201114             : 
  201115             :           /// \private
  201116             :           static void extendMemoryPoolForFileIO(); //
  201117             : 
  201118             :           /// \private
  201119             :           static SgOmpTaskgroupStatement * getPointerFromGlobalIndex(unsigned long); //
  201120             :           /// \private
  201121             :           static SgOmpTaskgroupStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  201122             : 
  201123             :           /// \private
  201124             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  201125             :           /// \private
  201126             :           static void resetValidFreepointers(); //
  201127             :           /// \private
  201128             :           static unsigned long getNumberOfLastValidPointer(); //
  201129             : 
  201130             : 
  201131             : #if defined(INLINE_FUNCTIONS)
  201132             :       /*! \brief returns pointer to newly allocated IR node */
  201133             :           inline void *operator new (size_t size);
  201134             : #else
  201135             :       /*! \brief returns pointer to newly allocated IR node */
  201136             :           void *operator new (size_t size);
  201137             : #endif
  201138             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  201139             :           void operator delete (void* pointer, size_t size);
  201140             : 
  201141             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  201142           0 :           void operator delete (void* pointer)
  201143             :              {
  201144             :             // This is the generated delete operator...
  201145           0 :                SgOmpTaskgroupStatement::operator delete (pointer,sizeof(SgOmpTaskgroupStatement));
  201146             :              }
  201147             : 
  201148             :       /*! \brief Returns the total number of IR nodes of this type */
  201149             :           static size_t numberOfNodes();
  201150             : 
  201151             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  201152             :           static size_t memoryUsage();
  201153             : 
  201154             :       // End of scope which started in IR nodes specific code 
  201155             :       /* */
  201156             : 
  201157             :       /* name Internal Functions
  201158             :           \brief Internal functions ... incomplete-documentation
  201159             : 
  201160             :           These functions have been made public as part of the design, but they are suggested for internal use 
  201161             :           or by particularly knowledgeable users for specialized tools or applications.
  201162             : 
  201163             :           \internal We could not make these private because they are required by user for special purposes. And 
  201164             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  201165             :          
  201166             :        */
  201167             : 
  201168             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  201169             :        // overridden in every class by *generated* implementation
  201170             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  201171             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  201172             :        // MS: 06/28/02 container of names of variables or container indices 
  201173             :        // used used in the traversal to access AST successor nodes
  201174             :        // overridden in every class by *generated* implementation
  201175             :       /*! \brief container of names of variables or container indices used used in the traversal
  201176             :           to access AST successor nodes overridden in every class by *generated* implementation */
  201177             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  201178             : 
  201179             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  201180             :        // than all the vector copies. The implementation for these functions is generated for each class.
  201181             :       /*! \brief return number of children in the traversal successor list */
  201182             :           virtual size_t get_numberOfTraversalSuccessors() override;
  201183             :       /*! \brief index-based access to traversal successors by index number */
  201184             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  201185             :       /*! \brief index-based access to traversal successors by child node */
  201186             :           virtual size_t get_childIndex(SgNode *child) override;
  201187             : 
  201188             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  201189             :        // MS: 08/16/2002 method for generating RTI information
  201190             :       /*! \brief return C++ Runtime-Time-Information */
  201191             :           virtual RTIReturnType roseRTI() override;
  201192             : #endif
  201193             :       /* */
  201194             : 
  201195             : 
  201196             : 
  201197             :       /* name Deprecated Functions
  201198             :           \brief Deprecated functions ... incomplete-documentation
  201199             : 
  201200             :           These functions have been deprecated from use.
  201201             :        */
  201202             :       /* */
  201203             : 
  201204             :       /*! returns a C style string (char*) representing the class name */
  201205             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  201206             : 
  201207             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  201208             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  201209             : #if 0
  201210             :       /*! returns old style Sage II enum values */
  201211             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  201212             :       /*! returns old style Sage II enum values */
  201213             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  201214             : #endif
  201215             :       /* */
  201216             : 
  201217             : 
  201218             : 
  201219             : 
  201220             :      public:
  201221             :       /* name Traversal Support Functions
  201222             :           \brief Traversal support functions ... incomplete-documentation
  201223             : 
  201224             :           These functions have been made public as part of the design, but they are suggested for internal use 
  201225             :           or by particularly knowledgable users for specialized tools or applications.
  201226             :        */
  201227             :       /* */
  201228             : 
  201229             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  201230             :        // (inferior to ROSE traversal mechanism, experimental).
  201231             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  201232             :        */
  201233             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  201234             : 
  201235             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  201236             :       /*! \brief support for the classic visitor pattern done in GoF */
  201237             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  201238             : 
  201239             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  201240             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  201241             :        */
  201242             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  201243             : 
  201244             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  201245             :        */
  201246             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  201247             : 
  201248             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  201249             :        // This traversal helps support internal tools that call static member functions.
  201250             :        // note: this function operates on the memory pools.
  201251             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  201252             :        */
  201253             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  201254             :       /* */
  201255             : 
  201256             : 
  201257             :      public:
  201258             :       /* name Memory Allocation Functions
  201259             :           \brief Memory allocations functions ... incomplete-documentation
  201260             : 
  201261             :           These functions have been made public as part of the design, but they are suggested for internal use 
  201262             :           or by particularly knowledgable users for specialized tools or applications.
  201263             :        */
  201264             :       /* */
  201265             : 
  201266             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  201267             : 
  201268             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  201269             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  201270             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  201271             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  201272             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  201273             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  201274             :           being used with the AST File I/O mechanism.
  201275             :        */
  201276             :           virtual bool isInMemoryPool() override;
  201277             : 
  201278             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  201279             : 
  201280             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  201281             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  201282             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  201283             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  201284             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  201285             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  201286             :           being used with the AST File I/O mechanism.
  201287             :        */
  201288             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  201289             : 
  201290             :       // DQ (4/30/2006): Modified to be a const function.
  201291             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  201292             : 
  201293             :           This functions is part of general support for many possible tools to operate 
  201294             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  201295             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  201296             :           less than the set of pointers used by the AST file I/O. This is part of
  201297             :           work implemented by Andreas, and support tools such as the AST graph generation.
  201298             : 
  201299             :           \warning This function can return unexpected data members and thus the 
  201300             :                    order and the number of elements is unpredicable and subject 
  201301             :                    to change.
  201302             : 
  201303             :           \returns STL vector of pairs of SgNode* and strings
  201304             :        */
  201305             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  201306             : 
  201307             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  201308             : 
  201309             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  201310             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  201311             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  201312             : 
  201313             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  201314             :                    and subject to change.
  201315             :        */
  201316             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  201317             : 
  201318             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  201319             : 
  201320             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  201321             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  201322             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  201323             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  201324             : 
  201325             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  201326             : 
  201327             :           \returns long
  201328             :        */
  201329             :           virtual long getChildIndex( SgNode* childNode ) const override;
  201330             : 
  201331             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  201332             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  201333             :       /* \brief Constructor for use by AST File I/O Mechanism
  201334             : 
  201335             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  201336             :           which obtained via fast binary file I/O from disk.
  201337             :        */
  201338             :        // SgOmpTaskgroupStatement( SgOmpTaskgroupStatementStorageClass& source );
  201339             : 
  201340             : 
  201341             : 
  201342             : 
  201343             : 
  201344             :  // JH (10/24/2005): methods added to support the ast file IO
  201345             :     private:
  201346             : 
  201347             :       /* name AST Memory Allocation Support Functions
  201348             :           \brief Memory allocations support....
  201349             : 
  201350             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  201351             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  201352             :           and support the AST File I/O Mechanism.
  201353             :        */
  201354             :       /* */
  201355             : 
  201356             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  201357             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  201358             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  201359             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  201360             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  201361             :           a correspinding one in the AST_FILE_IO class!
  201362             :        */
  201363             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  201364             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  201365             :       /* \brief Typedef used for low level memory access.
  201366             :        */
  201367             :        // typedef unsigned char* TestType;
  201368             : 
  201369             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  201370             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  201371             :       /* \brief Typedef used to hold memory addresses as values.
  201372             :        */
  201373             :        // typedef unsigned long  AddressType;
  201374             : 
  201375             : 
  201376             : 
  201377             :        // necessary, to have direct access to the p_freepointer and the private methods !
  201378             :       /*! \brief friend class declaration to support AST File I/O */
  201379             :           friend class AST_FILE_IO;
  201380             : 
  201381             :       /*! \brief friend class declaration to support AST File I/O */
  201382             :           friend class SgOmpTaskgroupStatementStorageClass;
  201383             : 
  201384             :       /*! \brief friend class declaration to support AST File I/O */
  201385             :           friend class AstSpecificDataManagingClass;
  201386             : 
  201387             :       /*! \brief friend class declaration to support AST File I/O */
  201388             :           friend class AstSpecificDataManagingClassStorageClass;
  201389             :     public:
  201390             :       /*! \brief IR node constructor to support AST File I/O */
  201391             :           SgOmpTaskgroupStatement( const SgOmpTaskgroupStatementStorageClass& source );
  201392             : 
  201393             :  // private: // JJW hack
  201394             :        /*
  201395             :           name AST Memory Allocation Support Variables
  201396             :           Memory allocations support variables 
  201397             : 
  201398             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  201399             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  201400             :           and support the AST File I/O Mechanism.
  201401             :        */
  201402             :       /* */
  201403             : 
  201404             :     public:
  201405             : 
  201406             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  201407             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  201408             :       // virtual SgNode* addRegExpAttribute();
  201409             :       /*! \brief Support for AST matching using regular expression.
  201410             : 
  201411             :           This support is incomplete and the subject of current research to define 
  201412             :           RegEx trees to support inexact matching.
  201413             :        */
  201414             :           SgOmpTaskgroupStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  201415             : 
  201416             : // *** COMMON CODE SECTION ENDS HERE ***
  201417             : 
  201418             : 
  201419             : // End of memberFunctionString
  201420             : // Start of memberFunctionString
  201421             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  201422             : 
  201423             :      // the generated cast function
  201424             :      // friend ROSE_DLL_API SgOmpTaskgroupStatement* isSgOmpTaskgroupStatement ( SgNode* s );
  201425             : 
  201426             :           typedef SgUpirFieldBodyStatement base_node_type;
  201427             : 
  201428             : 
  201429             : // End of memberFunctionString
  201430             : // Start of memberFunctionString
  201431             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  201432             : 
  201433             :           void post_construction_initialization() override;
  201434             : 
  201435             : 
  201436             : // End of memberFunctionString
  201437             : 
  201438             : 
  201439             :      public: 
  201440             :          virtual ~SgOmpTaskgroupStatement();
  201441             : 
  201442             : 
  201443             :      public: 
  201444             :          SgOmpTaskgroupStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  201445             :          SgOmpTaskgroupStatement(SgStatement* body); 
  201446             : 
  201447             :     protected:
  201448             : 
  201449             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskgroupStatement>;
  201450             : 
  201451             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201452             : 
  201453             : 
  201454             :    };
  201455             : #endif
  201456             : 
  201457             : // postdeclarations for SgOmpTaskgroupStatement
  201458             : 
  201459             : /* #line 201460 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201460             : 
  201461             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  201462             : 
  201463             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201464             : 
  201465             : 
  201466             : /* #line 201467 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201467             : 
  201468             : 
  201469             : 
  201470             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201471             : 
  201472             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  201473             : //      This code is automatically generated for each 
  201474             : //      terminal and non-terminal within the defined 
  201475             : //      grammar.  There is a simple way to change the 
  201476             : //      code to fix bugs etc.  See the ROSE README file
  201477             : //      for directions.
  201478             : 
  201479             : // tps: (02/22/2010): Adding DLL export requirements
  201480             : #include "rosedll.h"
  201481             : 
  201482             : // predeclarations for SgOmpTaskloopStatement
  201483             : 
  201484             : /* #line 201485 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201485             : 
  201486             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  201487             : 
  201488             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201489             : 
  201490             : #if 1
  201491             : // Class Definition for SgOmpTaskloopStatement
  201492             : class ROSE_DLL_API SgOmpTaskloopStatement  : public SgUpirFieldBodyStatement
  201493             :    {
  201494             :      public:
  201495             : 
  201496             : 
  201497             : /* #line 201498 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201498             : 
  201499             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  201500             : // Start of memberFunctionString
  201501             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  201502             : 
  201503             : // *** COMMON CODE SECTION BEGINS HERE ***
  201504             : 
  201505             :     public:
  201506             : 
  201507             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  201508             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  201509             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  201510             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  201511             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  201512             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  201513             : 
  201514             :       /*! \brief returns a string representing the class name */
  201515             :           virtual std::string class_name() const override;
  201516             : 
  201517             :       /*! \brief returns new style SageIII enum values */
  201518             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  201519             : 
  201520             :       /*! \brief static variant value */
  201521             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  201522             :        // static const VariantT static_variant = V_SgOmpTaskloopStatement;
  201523             :           enum { static_variant = V_SgOmpTaskloopStatement };
  201524             : 
  201525             :        /* the generated cast function */
  201526             :       /*! \brief Casts pointer from base class to derived class */
  201527             :           ROSE_DLL_API friend       SgOmpTaskloopStatement* isSgOmpTaskloopStatement(       SgNode * s );
  201528             : 
  201529             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  201530             :           ROSE_DLL_API friend const SgOmpTaskloopStatement* isSgOmpTaskloopStatement( const SgNode * s );
  201531             : 
  201532             :      // ******************************************
  201533             :      // * Memory Pool / New / Delete
  201534             :      // ******************************************
  201535             : 
  201536             :      public:
  201537             :           /// \private
  201538             :           static const unsigned pool_size; //
  201539             :           /// \private
  201540             :           static std::vector<unsigned char *> pools; //
  201541             :           /// \private
  201542             :           static SgOmpTaskloopStatement * next_node; // 
  201543             : 
  201544             :           /// \private
  201545             :           static unsigned long initializeStorageClassArray(SgOmpTaskloopStatementStorageClass *); //
  201546             : 
  201547             :           /// \private
  201548             :           static void clearMemoryPool(); //
  201549             :           static void deleteMemoryPool(); //
  201550             : 
  201551             :           /// \private
  201552             :           static void extendMemoryPoolForFileIO(); //
  201553             : 
  201554             :           /// \private
  201555             :           static SgOmpTaskloopStatement * getPointerFromGlobalIndex(unsigned long); //
  201556             :           /// \private
  201557             :           static SgOmpTaskloopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  201558             : 
  201559             :           /// \private
  201560             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  201561             :           /// \private
  201562             :           static void resetValidFreepointers(); //
  201563             :           /// \private
  201564             :           static unsigned long getNumberOfLastValidPointer(); //
  201565             : 
  201566             : 
  201567             : #if defined(INLINE_FUNCTIONS)
  201568             :       /*! \brief returns pointer to newly allocated IR node */
  201569             :           inline void *operator new (size_t size);
  201570             : #else
  201571             :       /*! \brief returns pointer to newly allocated IR node */
  201572             :           void *operator new (size_t size);
  201573             : #endif
  201574             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  201575             :           void operator delete (void* pointer, size_t size);
  201576             : 
  201577             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  201578           0 :           void operator delete (void* pointer)
  201579             :              {
  201580             :             // This is the generated delete operator...
  201581           0 :                SgOmpTaskloopStatement::operator delete (pointer,sizeof(SgOmpTaskloopStatement));
  201582             :              }
  201583             : 
  201584             :       /*! \brief Returns the total number of IR nodes of this type */
  201585             :           static size_t numberOfNodes();
  201586             : 
  201587             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  201588             :           static size_t memoryUsage();
  201589             : 
  201590             :       // End of scope which started in IR nodes specific code 
  201591             :       /* */
  201592             : 
  201593             :       /* name Internal Functions
  201594             :           \brief Internal functions ... incomplete-documentation
  201595             : 
  201596             :           These functions have been made public as part of the design, but they are suggested for internal use 
  201597             :           or by particularly knowledgeable users for specialized tools or applications.
  201598             : 
  201599             :           \internal We could not make these private because they are required by user for special purposes. And 
  201600             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  201601             :          
  201602             :        */
  201603             : 
  201604             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  201605             :        // overridden in every class by *generated* implementation
  201606             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  201607             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  201608             :        // MS: 06/28/02 container of names of variables or container indices 
  201609             :        // used used in the traversal to access AST successor nodes
  201610             :        // overridden in every class by *generated* implementation
  201611             :       /*! \brief container of names of variables or container indices used used in the traversal
  201612             :           to access AST successor nodes overridden in every class by *generated* implementation */
  201613             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  201614             : 
  201615             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  201616             :        // than all the vector copies. The implementation for these functions is generated for each class.
  201617             :       /*! \brief return number of children in the traversal successor list */
  201618             :           virtual size_t get_numberOfTraversalSuccessors() override;
  201619             :       /*! \brief index-based access to traversal successors by index number */
  201620             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  201621             :       /*! \brief index-based access to traversal successors by child node */
  201622             :           virtual size_t get_childIndex(SgNode *child) override;
  201623             : 
  201624             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  201625             :        // MS: 08/16/2002 method for generating RTI information
  201626             :       /*! \brief return C++ Runtime-Time-Information */
  201627             :           virtual RTIReturnType roseRTI() override;
  201628             : #endif
  201629             :       /* */
  201630             : 
  201631             : 
  201632             : 
  201633             :       /* name Deprecated Functions
  201634             :           \brief Deprecated functions ... incomplete-documentation
  201635             : 
  201636             :           These functions have been deprecated from use.
  201637             :        */
  201638             :       /* */
  201639             : 
  201640             :       /*! returns a C style string (char*) representing the class name */
  201641             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  201642             : 
  201643             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  201644             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  201645             : #if 0
  201646             :       /*! returns old style Sage II enum values */
  201647             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  201648             :       /*! returns old style Sage II enum values */
  201649             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  201650             : #endif
  201651             :       /* */
  201652             : 
  201653             : 
  201654             : 
  201655             : 
  201656             :      public:
  201657             :       /* name Traversal Support Functions
  201658             :           \brief Traversal support functions ... incomplete-documentation
  201659             : 
  201660             :           These functions have been made public as part of the design, but they are suggested for internal use 
  201661             :           or by particularly knowledgable users for specialized tools or applications.
  201662             :        */
  201663             :       /* */
  201664             : 
  201665             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  201666             :        // (inferior to ROSE traversal mechanism, experimental).
  201667             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  201668             :        */
  201669             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  201670             : 
  201671             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  201672             :       /*! \brief support for the classic visitor pattern done in GoF */
  201673             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  201674             : 
  201675             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  201676             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  201677             :        */
  201678             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  201679             : 
  201680             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  201681             :        */
  201682             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  201683             : 
  201684             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  201685             :        // This traversal helps support internal tools that call static member functions.
  201686             :        // note: this function operates on the memory pools.
  201687             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  201688             :        */
  201689             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  201690             :       /* */
  201691             : 
  201692             : 
  201693             :      public:
  201694             :       /* name Memory Allocation Functions
  201695             :           \brief Memory allocations functions ... incomplete-documentation
  201696             : 
  201697             :           These functions have been made public as part of the design, but they are suggested for internal use 
  201698             :           or by particularly knowledgable users for specialized tools or applications.
  201699             :        */
  201700             :       /* */
  201701             : 
  201702             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  201703             : 
  201704             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  201705             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  201706             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  201707             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  201708             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  201709             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  201710             :           being used with the AST File I/O mechanism.
  201711             :        */
  201712             :           virtual bool isInMemoryPool() override;
  201713             : 
  201714             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  201715             : 
  201716             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  201717             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  201718             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  201719             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  201720             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  201721             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  201722             :           being used with the AST File I/O mechanism.
  201723             :        */
  201724             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  201725             : 
  201726             :       // DQ (4/30/2006): Modified to be a const function.
  201727             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  201728             : 
  201729             :           This functions is part of general support for many possible tools to operate 
  201730             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  201731             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  201732             :           less than the set of pointers used by the AST file I/O. This is part of
  201733             :           work implemented by Andreas, and support tools such as the AST graph generation.
  201734             : 
  201735             :           \warning This function can return unexpected data members and thus the 
  201736             :                    order and the number of elements is unpredicable and subject 
  201737             :                    to change.
  201738             : 
  201739             :           \returns STL vector of pairs of SgNode* and strings
  201740             :        */
  201741             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  201742             : 
  201743             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  201744             : 
  201745             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  201746             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  201747             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  201748             : 
  201749             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  201750             :                    and subject to change.
  201751             :        */
  201752             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  201753             : 
  201754             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  201755             : 
  201756             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  201757             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  201758             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  201759             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  201760             : 
  201761             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  201762             : 
  201763             :           \returns long
  201764             :        */
  201765             :           virtual long getChildIndex( SgNode* childNode ) const override;
  201766             : 
  201767             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  201768             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  201769             :       /* \brief Constructor for use by AST File I/O Mechanism
  201770             : 
  201771             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  201772             :           which obtained via fast binary file I/O from disk.
  201773             :        */
  201774             :        // SgOmpTaskloopStatement( SgOmpTaskloopStatementStorageClass& source );
  201775             : 
  201776             : 
  201777             : 
  201778             : 
  201779             : 
  201780             :  // JH (10/24/2005): methods added to support the ast file IO
  201781             :     private:
  201782             : 
  201783             :       /* name AST Memory Allocation Support Functions
  201784             :           \brief Memory allocations support....
  201785             : 
  201786             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  201787             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  201788             :           and support the AST File I/O Mechanism.
  201789             :        */
  201790             :       /* */
  201791             : 
  201792             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  201793             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  201794             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  201795             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  201796             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  201797             :           a correspinding one in the AST_FILE_IO class!
  201798             :        */
  201799             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  201800             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  201801             :       /* \brief Typedef used for low level memory access.
  201802             :        */
  201803             :        // typedef unsigned char* TestType;
  201804             : 
  201805             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  201806             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  201807             :       /* \brief Typedef used to hold memory addresses as values.
  201808             :        */
  201809             :        // typedef unsigned long  AddressType;
  201810             : 
  201811             : 
  201812             : 
  201813             :        // necessary, to have direct access to the p_freepointer and the private methods !
  201814             :       /*! \brief friend class declaration to support AST File I/O */
  201815             :           friend class AST_FILE_IO;
  201816             : 
  201817             :       /*! \brief friend class declaration to support AST File I/O */
  201818             :           friend class SgOmpTaskloopStatementStorageClass;
  201819             : 
  201820             :       /*! \brief friend class declaration to support AST File I/O */
  201821             :           friend class AstSpecificDataManagingClass;
  201822             : 
  201823             :       /*! \brief friend class declaration to support AST File I/O */
  201824             :           friend class AstSpecificDataManagingClassStorageClass;
  201825             :     public:
  201826             :       /*! \brief IR node constructor to support AST File I/O */
  201827             :           SgOmpTaskloopStatement( const SgOmpTaskloopStatementStorageClass& source );
  201828             : 
  201829             :  // private: // JJW hack
  201830             :        /*
  201831             :           name AST Memory Allocation Support Variables
  201832             :           Memory allocations support variables 
  201833             : 
  201834             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  201835             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  201836             :           and support the AST File I/O Mechanism.
  201837             :        */
  201838             :       /* */
  201839             : 
  201840             :     public:
  201841             : 
  201842             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  201843             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  201844             :       // virtual SgNode* addRegExpAttribute();
  201845             :       /*! \brief Support for AST matching using regular expression.
  201846             : 
  201847             :           This support is incomplete and the subject of current research to define 
  201848             :           RegEx trees to support inexact matching.
  201849             :        */
  201850             :           SgOmpTaskloopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  201851             : 
  201852             : // *** COMMON CODE SECTION ENDS HERE ***
  201853             : 
  201854             : 
  201855             : // End of memberFunctionString
  201856             : // Start of memberFunctionString
  201857             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  201858             : 
  201859             :      // the generated cast function
  201860             :      // friend ROSE_DLL_API SgOmpTaskloopStatement* isSgOmpTaskloopStatement ( SgNode* s );
  201861             : 
  201862             :           typedef SgUpirFieldBodyStatement base_node_type;
  201863             : 
  201864             : 
  201865             : // End of memberFunctionString
  201866             : // Start of memberFunctionString
  201867             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  201868             : 
  201869             :           void post_construction_initialization() override;
  201870             : 
  201871             : 
  201872             : // End of memberFunctionString
  201873             : 
  201874             : 
  201875             :      public: 
  201876             :          virtual ~SgOmpTaskloopStatement();
  201877             : 
  201878             : 
  201879             :      public: 
  201880             :          SgOmpTaskloopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  201881             :          SgOmpTaskloopStatement(SgStatement* body); 
  201882             : 
  201883             :     protected:
  201884             : 
  201885             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskloopStatement>;
  201886             : 
  201887             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201888             : 
  201889             : 
  201890             :    };
  201891             : #endif
  201892             : 
  201893             : // postdeclarations for SgOmpTaskloopStatement
  201894             : 
  201895             : /* #line 201896 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201896             : 
  201897             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  201898             : 
  201899             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201900             : 
  201901             : 
  201902             : /* #line 201903 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201903             : 
  201904             : 
  201905             : 
  201906             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201907             : 
  201908             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  201909             : //      This code is automatically generated for each 
  201910             : //      terminal and non-terminal within the defined 
  201911             : //      grammar.  There is a simple way to change the 
  201912             : //      code to fix bugs etc.  See the ROSE README file
  201913             : //      for directions.
  201914             : 
  201915             : // tps: (02/22/2010): Adding DLL export requirements
  201916             : #include "rosedll.h"
  201917             : 
  201918             : // predeclarations for SgOmpDepobjStatement
  201919             : 
  201920             : /* #line 201921 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201921             : 
  201922             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  201923             : 
  201924             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  201925             : 
  201926             : #if 1
  201927             : // Class Definition for SgOmpDepobjStatement
  201928             : class ROSE_DLL_API SgOmpDepobjStatement  : public SgUpirFieldBodyStatement
  201929             :    {
  201930             :      public:
  201931             : 
  201932             : 
  201933             : /* #line 201934 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  201934             : 
  201935             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  201936             : // Start of memberFunctionString
  201937             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  201938             : 
  201939             : // *** COMMON CODE SECTION BEGINS HERE ***
  201940             : 
  201941             :     public:
  201942             : 
  201943             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  201944             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  201945             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  201946             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  201947             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  201948             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  201949             : 
  201950             :       /*! \brief returns a string representing the class name */
  201951             :           virtual std::string class_name() const override;
  201952             : 
  201953             :       /*! \brief returns new style SageIII enum values */
  201954             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  201955             : 
  201956             :       /*! \brief static variant value */
  201957             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  201958             :        // static const VariantT static_variant = V_SgOmpDepobjStatement;
  201959             :           enum { static_variant = V_SgOmpDepobjStatement };
  201960             : 
  201961             :        /* the generated cast function */
  201962             :       /*! \brief Casts pointer from base class to derived class */
  201963             :           ROSE_DLL_API friend       SgOmpDepobjStatement* isSgOmpDepobjStatement(       SgNode * s );
  201964             : 
  201965             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  201966             :           ROSE_DLL_API friend const SgOmpDepobjStatement* isSgOmpDepobjStatement( const SgNode * s );
  201967             : 
  201968             :      // ******************************************
  201969             :      // * Memory Pool / New / Delete
  201970             :      // ******************************************
  201971             : 
  201972             :      public:
  201973             :           /// \private
  201974             :           static const unsigned pool_size; //
  201975             :           /// \private
  201976             :           static std::vector<unsigned char *> pools; //
  201977             :           /// \private
  201978             :           static SgOmpDepobjStatement * next_node; // 
  201979             : 
  201980             :           /// \private
  201981             :           static unsigned long initializeStorageClassArray(SgOmpDepobjStatementStorageClass *); //
  201982             : 
  201983             :           /// \private
  201984             :           static void clearMemoryPool(); //
  201985             :           static void deleteMemoryPool(); //
  201986             : 
  201987             :           /// \private
  201988             :           static void extendMemoryPoolForFileIO(); //
  201989             : 
  201990             :           /// \private
  201991             :           static SgOmpDepobjStatement * getPointerFromGlobalIndex(unsigned long); //
  201992             :           /// \private
  201993             :           static SgOmpDepobjStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  201994             : 
  201995             :           /// \private
  201996             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  201997             :           /// \private
  201998             :           static void resetValidFreepointers(); //
  201999             :           /// \private
  202000             :           static unsigned long getNumberOfLastValidPointer(); //
  202001             : 
  202002             : 
  202003             : #if defined(INLINE_FUNCTIONS)
  202004             :       /*! \brief returns pointer to newly allocated IR node */
  202005             :           inline void *operator new (size_t size);
  202006             : #else
  202007             :       /*! \brief returns pointer to newly allocated IR node */
  202008             :           void *operator new (size_t size);
  202009             : #endif
  202010             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  202011             :           void operator delete (void* pointer, size_t size);
  202012             : 
  202013             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  202014           0 :           void operator delete (void* pointer)
  202015             :              {
  202016             :             // This is the generated delete operator...
  202017           0 :                SgOmpDepobjStatement::operator delete (pointer,sizeof(SgOmpDepobjStatement));
  202018             :              }
  202019             : 
  202020             :       /*! \brief Returns the total number of IR nodes of this type */
  202021             :           static size_t numberOfNodes();
  202022             : 
  202023             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  202024             :           static size_t memoryUsage();
  202025             : 
  202026             :       // End of scope which started in IR nodes specific code 
  202027             :       /* */
  202028             : 
  202029             :       /* name Internal Functions
  202030             :           \brief Internal functions ... incomplete-documentation
  202031             : 
  202032             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202033             :           or by particularly knowledgeable users for specialized tools or applications.
  202034             : 
  202035             :           \internal We could not make these private because they are required by user for special purposes. And 
  202036             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  202037             :          
  202038             :        */
  202039             : 
  202040             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  202041             :        // overridden in every class by *generated* implementation
  202042             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  202043             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  202044             :        // MS: 06/28/02 container of names of variables or container indices 
  202045             :        // used used in the traversal to access AST successor nodes
  202046             :        // overridden in every class by *generated* implementation
  202047             :       /*! \brief container of names of variables or container indices used used in the traversal
  202048             :           to access AST successor nodes overridden in every class by *generated* implementation */
  202049             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  202050             : 
  202051             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  202052             :        // than all the vector copies. The implementation for these functions is generated for each class.
  202053             :       /*! \brief return number of children in the traversal successor list */
  202054             :           virtual size_t get_numberOfTraversalSuccessors() override;
  202055             :       /*! \brief index-based access to traversal successors by index number */
  202056             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  202057             :       /*! \brief index-based access to traversal successors by child node */
  202058             :           virtual size_t get_childIndex(SgNode *child) override;
  202059             : 
  202060             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  202061             :        // MS: 08/16/2002 method for generating RTI information
  202062             :       /*! \brief return C++ Runtime-Time-Information */
  202063             :           virtual RTIReturnType roseRTI() override;
  202064             : #endif
  202065             :       /* */
  202066             : 
  202067             : 
  202068             : 
  202069             :       /* name Deprecated Functions
  202070             :           \brief Deprecated functions ... incomplete-documentation
  202071             : 
  202072             :           These functions have been deprecated from use.
  202073             :        */
  202074             :       /* */
  202075             : 
  202076             :       /*! returns a C style string (char*) representing the class name */
  202077             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  202078             : 
  202079             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  202080             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  202081             : #if 0
  202082             :       /*! returns old style Sage II enum values */
  202083             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  202084             :       /*! returns old style Sage II enum values */
  202085             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  202086             : #endif
  202087             :       /* */
  202088             : 
  202089             : 
  202090             : 
  202091             : 
  202092             :      public:
  202093             :       /* name Traversal Support Functions
  202094             :           \brief Traversal support functions ... incomplete-documentation
  202095             : 
  202096             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202097             :           or by particularly knowledgable users for specialized tools or applications.
  202098             :        */
  202099             :       /* */
  202100             : 
  202101             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  202102             :        // (inferior to ROSE traversal mechanism, experimental).
  202103             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  202104             :        */
  202105             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  202106             : 
  202107             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  202108             :       /*! \brief support for the classic visitor pattern done in GoF */
  202109             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  202110             : 
  202111             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  202112             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  202113             :        */
  202114             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  202115             : 
  202116             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  202117             :        */
  202118             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  202119             : 
  202120             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  202121             :        // This traversal helps support internal tools that call static member functions.
  202122             :        // note: this function operates on the memory pools.
  202123             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  202124             :        */
  202125             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  202126             :       /* */
  202127             : 
  202128             : 
  202129             :      public:
  202130             :       /* name Memory Allocation Functions
  202131             :           \brief Memory allocations functions ... incomplete-documentation
  202132             : 
  202133             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202134             :           or by particularly knowledgable users for specialized tools or applications.
  202135             :        */
  202136             :       /* */
  202137             : 
  202138             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  202139             : 
  202140             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  202141             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  202142             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  202143             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  202144             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  202145             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  202146             :           being used with the AST File I/O mechanism.
  202147             :        */
  202148             :           virtual bool isInMemoryPool() override;
  202149             : 
  202150             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  202151             : 
  202152             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  202153             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  202154             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  202155             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  202156             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  202157             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  202158             :           being used with the AST File I/O mechanism.
  202159             :        */
  202160             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  202161             : 
  202162             :       // DQ (4/30/2006): Modified to be a const function.
  202163             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  202164             : 
  202165             :           This functions is part of general support for many possible tools to operate 
  202166             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  202167             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  202168             :           less than the set of pointers used by the AST file I/O. This is part of
  202169             :           work implemented by Andreas, and support tools such as the AST graph generation.
  202170             : 
  202171             :           \warning This function can return unexpected data members and thus the 
  202172             :                    order and the number of elements is unpredicable and subject 
  202173             :                    to change.
  202174             : 
  202175             :           \returns STL vector of pairs of SgNode* and strings
  202176             :        */
  202177             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  202178             : 
  202179             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  202180             : 
  202181             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  202182             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  202183             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  202184             : 
  202185             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  202186             :                    and subject to change.
  202187             :        */
  202188             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  202189             : 
  202190             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  202191             : 
  202192             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  202193             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  202194             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  202195             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  202196             : 
  202197             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  202198             : 
  202199             :           \returns long
  202200             :        */
  202201             :           virtual long getChildIndex( SgNode* childNode ) const override;
  202202             : 
  202203             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  202204             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  202205             :       /* \brief Constructor for use by AST File I/O Mechanism
  202206             : 
  202207             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  202208             :           which obtained via fast binary file I/O from disk.
  202209             :        */
  202210             :        // SgOmpDepobjStatement( SgOmpDepobjStatementStorageClass& source );
  202211             : 
  202212             : 
  202213             : 
  202214             : 
  202215             : 
  202216             :  // JH (10/24/2005): methods added to support the ast file IO
  202217             :     private:
  202218             : 
  202219             :       /* name AST Memory Allocation Support Functions
  202220             :           \brief Memory allocations support....
  202221             : 
  202222             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  202223             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  202224             :           and support the AST File I/O Mechanism.
  202225             :        */
  202226             :       /* */
  202227             : 
  202228             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  202229             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  202230             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  202231             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  202232             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  202233             :           a correspinding one in the AST_FILE_IO class!
  202234             :        */
  202235             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  202236             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  202237             :       /* \brief Typedef used for low level memory access.
  202238             :        */
  202239             :        // typedef unsigned char* TestType;
  202240             : 
  202241             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  202242             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  202243             :       /* \brief Typedef used to hold memory addresses as values.
  202244             :        */
  202245             :        // typedef unsigned long  AddressType;
  202246             : 
  202247             : 
  202248             : 
  202249             :        // necessary, to have direct access to the p_freepointer and the private methods !
  202250             :       /*! \brief friend class declaration to support AST File I/O */
  202251             :           friend class AST_FILE_IO;
  202252             : 
  202253             :       /*! \brief friend class declaration to support AST File I/O */
  202254             :           friend class SgOmpDepobjStatementStorageClass;
  202255             : 
  202256             :       /*! \brief friend class declaration to support AST File I/O */
  202257             :           friend class AstSpecificDataManagingClass;
  202258             : 
  202259             :       /*! \brief friend class declaration to support AST File I/O */
  202260             :           friend class AstSpecificDataManagingClassStorageClass;
  202261             :     public:
  202262             :       /*! \brief IR node constructor to support AST File I/O */
  202263             :           SgOmpDepobjStatement( const SgOmpDepobjStatementStorageClass& source );
  202264             : 
  202265             :  // private: // JJW hack
  202266             :        /*
  202267             :           name AST Memory Allocation Support Variables
  202268             :           Memory allocations support variables 
  202269             : 
  202270             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  202271             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  202272             :           and support the AST File I/O Mechanism.
  202273             :        */
  202274             :       /* */
  202275             : 
  202276             :     public:
  202277             : 
  202278             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  202279             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  202280             :       // virtual SgNode* addRegExpAttribute();
  202281             :       /*! \brief Support for AST matching using regular expression.
  202282             : 
  202283             :           This support is incomplete and the subject of current research to define 
  202284             :           RegEx trees to support inexact matching.
  202285             :        */
  202286             :           SgOmpDepobjStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  202287             : 
  202288             : // *** COMMON CODE SECTION ENDS HERE ***
  202289             : 
  202290             : 
  202291             : // End of memberFunctionString
  202292             : // Start of memberFunctionString
  202293             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  202294             : 
  202295             :      // the generated cast function
  202296             :      // friend ROSE_DLL_API SgOmpDepobjStatement* isSgOmpDepobjStatement ( SgNode* s );
  202297             : 
  202298             :           typedef SgUpirFieldBodyStatement base_node_type;
  202299             : 
  202300             : 
  202301             : // End of memberFunctionString
  202302             : // Start of memberFunctionString
  202303             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  202304             : 
  202305             :           void post_construction_initialization() override;
  202306             : 
  202307             : 
  202308             : // End of memberFunctionString
  202309             : 
  202310             :      public: 
  202311             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  202312             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  202313             : 
  202314             : 
  202315             :      public: 
  202316             :          virtual ~SgOmpDepobjStatement();
  202317             : 
  202318             : 
  202319             :      public: 
  202320             :          SgOmpDepobjStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL, SgName name = ""); 
  202321             :          SgOmpDepobjStatement(SgStatement* body, SgName name); 
  202322             : 
  202323             :     protected:
  202324             : // Start of memberFunctionString
  202325             : SgName p_name;
  202326             :           
  202327             : // End of memberFunctionString
  202328             : 
  202329             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDepobjStatement>;
  202330             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpDepobjStatement, SgName,&SgOmpDepobjStatement::p_name>;
  202331             : 
  202332             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202333             : 
  202334             : 
  202335             :    };
  202336             : #endif
  202337             : 
  202338             : // postdeclarations for SgOmpDepobjStatement
  202339             : 
  202340             : /* #line 202341 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202341             : 
  202342             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  202343             : 
  202344             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202345             : 
  202346             : 
  202347             : /* #line 202348 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202348             : 
  202349             : 
  202350             : 
  202351             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202352             : 
  202353             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  202354             : //      This code is automatically generated for each 
  202355             : //      terminal and non-terminal within the defined 
  202356             : //      grammar.  There is a simple way to change the 
  202357             : //      code to fix bugs etc.  See the ROSE README file
  202358             : //      for directions.
  202359             : 
  202360             : // tps: (02/22/2010): Adding DLL export requirements
  202361             : #include "rosedll.h"
  202362             : 
  202363             : // predeclarations for SgOmpTargetEnterDataStatement
  202364             : 
  202365             : /* #line 202366 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202366             : 
  202367             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  202368             : 
  202369             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202370             : 
  202371             : #if 1
  202372             : // Class Definition for SgOmpTargetEnterDataStatement
  202373             : class ROSE_DLL_API SgOmpTargetEnterDataStatement  : public SgUpirFieldBodyStatement
  202374             :    {
  202375             :      public:
  202376             : 
  202377             : 
  202378             : /* #line 202379 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202379             : 
  202380             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  202381             : // Start of memberFunctionString
  202382             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  202383             : 
  202384             : // *** COMMON CODE SECTION BEGINS HERE ***
  202385             : 
  202386             :     public:
  202387             : 
  202388             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  202389             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  202390             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  202391             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  202392             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  202393             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  202394             : 
  202395             :       /*! \brief returns a string representing the class name */
  202396             :           virtual std::string class_name() const override;
  202397             : 
  202398             :       /*! \brief returns new style SageIII enum values */
  202399             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  202400             : 
  202401             :       /*! \brief static variant value */
  202402             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  202403             :        // static const VariantT static_variant = V_SgOmpTargetEnterDataStatement;
  202404             :           enum { static_variant = V_SgOmpTargetEnterDataStatement };
  202405             : 
  202406             :        /* the generated cast function */
  202407             :       /*! \brief Casts pointer from base class to derived class */
  202408             :           ROSE_DLL_API friend       SgOmpTargetEnterDataStatement* isSgOmpTargetEnterDataStatement(       SgNode * s );
  202409             : 
  202410             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  202411             :           ROSE_DLL_API friend const SgOmpTargetEnterDataStatement* isSgOmpTargetEnterDataStatement( const SgNode * s );
  202412             : 
  202413             :      // ******************************************
  202414             :      // * Memory Pool / New / Delete
  202415             :      // ******************************************
  202416             : 
  202417             :      public:
  202418             :           /// \private
  202419             :           static const unsigned pool_size; //
  202420             :           /// \private
  202421             :           static std::vector<unsigned char *> pools; //
  202422             :           /// \private
  202423             :           static SgOmpTargetEnterDataStatement * next_node; // 
  202424             : 
  202425             :           /// \private
  202426             :           static unsigned long initializeStorageClassArray(SgOmpTargetEnterDataStatementStorageClass *); //
  202427             : 
  202428             :           /// \private
  202429             :           static void clearMemoryPool(); //
  202430             :           static void deleteMemoryPool(); //
  202431             : 
  202432             :           /// \private
  202433             :           static void extendMemoryPoolForFileIO(); //
  202434             : 
  202435             :           /// \private
  202436             :           static SgOmpTargetEnterDataStatement * getPointerFromGlobalIndex(unsigned long); //
  202437             :           /// \private
  202438             :           static SgOmpTargetEnterDataStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  202439             : 
  202440             :           /// \private
  202441             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  202442             :           /// \private
  202443             :           static void resetValidFreepointers(); //
  202444             :           /// \private
  202445             :           static unsigned long getNumberOfLastValidPointer(); //
  202446             : 
  202447             : 
  202448             : #if defined(INLINE_FUNCTIONS)
  202449             :       /*! \brief returns pointer to newly allocated IR node */
  202450             :           inline void *operator new (size_t size);
  202451             : #else
  202452             :       /*! \brief returns pointer to newly allocated IR node */
  202453             :           void *operator new (size_t size);
  202454             : #endif
  202455             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  202456             :           void operator delete (void* pointer, size_t size);
  202457             : 
  202458             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  202459           0 :           void operator delete (void* pointer)
  202460             :              {
  202461             :             // This is the generated delete operator...
  202462           0 :                SgOmpTargetEnterDataStatement::operator delete (pointer,sizeof(SgOmpTargetEnterDataStatement));
  202463             :              }
  202464             : 
  202465             :       /*! \brief Returns the total number of IR nodes of this type */
  202466             :           static size_t numberOfNodes();
  202467             : 
  202468             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  202469             :           static size_t memoryUsage();
  202470             : 
  202471             :       // End of scope which started in IR nodes specific code 
  202472             :       /* */
  202473             : 
  202474             :       /* name Internal Functions
  202475             :           \brief Internal functions ... incomplete-documentation
  202476             : 
  202477             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202478             :           or by particularly knowledgeable users for specialized tools or applications.
  202479             : 
  202480             :           \internal We could not make these private because they are required by user for special purposes. And 
  202481             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  202482             :          
  202483             :        */
  202484             : 
  202485             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  202486             :        // overridden in every class by *generated* implementation
  202487             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  202488             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  202489             :        // MS: 06/28/02 container of names of variables or container indices 
  202490             :        // used used in the traversal to access AST successor nodes
  202491             :        // overridden in every class by *generated* implementation
  202492             :       /*! \brief container of names of variables or container indices used used in the traversal
  202493             :           to access AST successor nodes overridden in every class by *generated* implementation */
  202494             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  202495             : 
  202496             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  202497             :        // than all the vector copies. The implementation for these functions is generated for each class.
  202498             :       /*! \brief return number of children in the traversal successor list */
  202499             :           virtual size_t get_numberOfTraversalSuccessors() override;
  202500             :       /*! \brief index-based access to traversal successors by index number */
  202501             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  202502             :       /*! \brief index-based access to traversal successors by child node */
  202503             :           virtual size_t get_childIndex(SgNode *child) override;
  202504             : 
  202505             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  202506             :        // MS: 08/16/2002 method for generating RTI information
  202507             :       /*! \brief return C++ Runtime-Time-Information */
  202508             :           virtual RTIReturnType roseRTI() override;
  202509             : #endif
  202510             :       /* */
  202511             : 
  202512             : 
  202513             : 
  202514             :       /* name Deprecated Functions
  202515             :           \brief Deprecated functions ... incomplete-documentation
  202516             : 
  202517             :           These functions have been deprecated from use.
  202518             :        */
  202519             :       /* */
  202520             : 
  202521             :       /*! returns a C style string (char*) representing the class name */
  202522             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  202523             : 
  202524             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  202525             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  202526             : #if 0
  202527             :       /*! returns old style Sage II enum values */
  202528             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  202529             :       /*! returns old style Sage II enum values */
  202530             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  202531             : #endif
  202532             :       /* */
  202533             : 
  202534             : 
  202535             : 
  202536             : 
  202537             :      public:
  202538             :       /* name Traversal Support Functions
  202539             :           \brief Traversal support functions ... incomplete-documentation
  202540             : 
  202541             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202542             :           or by particularly knowledgable users for specialized tools or applications.
  202543             :        */
  202544             :       /* */
  202545             : 
  202546             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  202547             :        // (inferior to ROSE traversal mechanism, experimental).
  202548             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  202549             :        */
  202550             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  202551             : 
  202552             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  202553             :       /*! \brief support for the classic visitor pattern done in GoF */
  202554             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  202555             : 
  202556             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  202557             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  202558             :        */
  202559             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  202560             : 
  202561             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  202562             :        */
  202563             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  202564             : 
  202565             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  202566             :        // This traversal helps support internal tools that call static member functions.
  202567             :        // note: this function operates on the memory pools.
  202568             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  202569             :        */
  202570             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  202571             :       /* */
  202572             : 
  202573             : 
  202574             :      public:
  202575             :       /* name Memory Allocation Functions
  202576             :           \brief Memory allocations functions ... incomplete-documentation
  202577             : 
  202578             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202579             :           or by particularly knowledgable users for specialized tools or applications.
  202580             :        */
  202581             :       /* */
  202582             : 
  202583             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  202584             : 
  202585             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  202586             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  202587             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  202588             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  202589             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  202590             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  202591             :           being used with the AST File I/O mechanism.
  202592             :        */
  202593             :           virtual bool isInMemoryPool() override;
  202594             : 
  202595             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  202596             : 
  202597             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  202598             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  202599             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  202600             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  202601             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  202602             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  202603             :           being used with the AST File I/O mechanism.
  202604             :        */
  202605             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  202606             : 
  202607             :       // DQ (4/30/2006): Modified to be a const function.
  202608             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  202609             : 
  202610             :           This functions is part of general support for many possible tools to operate 
  202611             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  202612             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  202613             :           less than the set of pointers used by the AST file I/O. This is part of
  202614             :           work implemented by Andreas, and support tools such as the AST graph generation.
  202615             : 
  202616             :           \warning This function can return unexpected data members and thus the 
  202617             :                    order and the number of elements is unpredicable and subject 
  202618             :                    to change.
  202619             : 
  202620             :           \returns STL vector of pairs of SgNode* and strings
  202621             :        */
  202622             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  202623             : 
  202624             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  202625             : 
  202626             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  202627             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  202628             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  202629             : 
  202630             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  202631             :                    and subject to change.
  202632             :        */
  202633             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  202634             : 
  202635             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  202636             : 
  202637             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  202638             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  202639             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  202640             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  202641             : 
  202642             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  202643             : 
  202644             :           \returns long
  202645             :        */
  202646             :           virtual long getChildIndex( SgNode* childNode ) const override;
  202647             : 
  202648             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  202649             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  202650             :       /* \brief Constructor for use by AST File I/O Mechanism
  202651             : 
  202652             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  202653             :           which obtained via fast binary file I/O from disk.
  202654             :        */
  202655             :        // SgOmpTargetEnterDataStatement( SgOmpTargetEnterDataStatementStorageClass& source );
  202656             : 
  202657             : 
  202658             : 
  202659             : 
  202660             : 
  202661             :  // JH (10/24/2005): methods added to support the ast file IO
  202662             :     private:
  202663             : 
  202664             :       /* name AST Memory Allocation Support Functions
  202665             :           \brief Memory allocations support....
  202666             : 
  202667             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  202668             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  202669             :           and support the AST File I/O Mechanism.
  202670             :        */
  202671             :       /* */
  202672             : 
  202673             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  202674             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  202675             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  202676             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  202677             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  202678             :           a correspinding one in the AST_FILE_IO class!
  202679             :        */
  202680             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  202681             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  202682             :       /* \brief Typedef used for low level memory access.
  202683             :        */
  202684             :        // typedef unsigned char* TestType;
  202685             : 
  202686             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  202687             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  202688             :       /* \brief Typedef used to hold memory addresses as values.
  202689             :        */
  202690             :        // typedef unsigned long  AddressType;
  202691             : 
  202692             : 
  202693             : 
  202694             :        // necessary, to have direct access to the p_freepointer and the private methods !
  202695             :       /*! \brief friend class declaration to support AST File I/O */
  202696             :           friend class AST_FILE_IO;
  202697             : 
  202698             :       /*! \brief friend class declaration to support AST File I/O */
  202699             :           friend class SgOmpTargetEnterDataStatementStorageClass;
  202700             : 
  202701             :       /*! \brief friend class declaration to support AST File I/O */
  202702             :           friend class AstSpecificDataManagingClass;
  202703             : 
  202704             :       /*! \brief friend class declaration to support AST File I/O */
  202705             :           friend class AstSpecificDataManagingClassStorageClass;
  202706             :     public:
  202707             :       /*! \brief IR node constructor to support AST File I/O */
  202708             :           SgOmpTargetEnterDataStatement( const SgOmpTargetEnterDataStatementStorageClass& source );
  202709             : 
  202710             :  // private: // JJW hack
  202711             :        /*
  202712             :           name AST Memory Allocation Support Variables
  202713             :           Memory allocations support variables 
  202714             : 
  202715             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  202716             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  202717             :           and support the AST File I/O Mechanism.
  202718             :        */
  202719             :       /* */
  202720             : 
  202721             :     public:
  202722             : 
  202723             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  202724             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  202725             :       // virtual SgNode* addRegExpAttribute();
  202726             :       /*! \brief Support for AST matching using regular expression.
  202727             : 
  202728             :           This support is incomplete and the subject of current research to define 
  202729             :           RegEx trees to support inexact matching.
  202730             :        */
  202731             :           SgOmpTargetEnterDataStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  202732             : 
  202733             : // *** COMMON CODE SECTION ENDS HERE ***
  202734             : 
  202735             : 
  202736             : // End of memberFunctionString
  202737             : // Start of memberFunctionString
  202738             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  202739             : 
  202740             :      // the generated cast function
  202741             :      // friend ROSE_DLL_API SgOmpTargetEnterDataStatement* isSgOmpTargetEnterDataStatement ( SgNode* s );
  202742             : 
  202743             :           typedef SgUpirFieldBodyStatement base_node_type;
  202744             : 
  202745             : 
  202746             : // End of memberFunctionString
  202747             : // Start of memberFunctionString
  202748             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  202749             : 
  202750             :           void post_construction_initialization() override;
  202751             : 
  202752             : 
  202753             : // End of memberFunctionString
  202754             : 
  202755             : 
  202756             :      public: 
  202757             :          virtual ~SgOmpTargetEnterDataStatement();
  202758             : 
  202759             : 
  202760             :      public: 
  202761             :          SgOmpTargetEnterDataStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  202762             :          SgOmpTargetEnterDataStatement(SgStatement* body); 
  202763             : 
  202764             :     protected:
  202765             : 
  202766             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetEnterDataStatement>;
  202767             : 
  202768             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202769             : 
  202770             : 
  202771             :    };
  202772             : #endif
  202773             : 
  202774             : // postdeclarations for SgOmpTargetEnterDataStatement
  202775             : 
  202776             : /* #line 202777 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202777             : 
  202778             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  202779             : 
  202780             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202781             : 
  202782             : 
  202783             : /* #line 202784 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202784             : 
  202785             : 
  202786             : 
  202787             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202788             : 
  202789             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  202790             : //      This code is automatically generated for each 
  202791             : //      terminal and non-terminal within the defined 
  202792             : //      grammar.  There is a simple way to change the 
  202793             : //      code to fix bugs etc.  See the ROSE README file
  202794             : //      for directions.
  202795             : 
  202796             : // tps: (02/22/2010): Adding DLL export requirements
  202797             : #include "rosedll.h"
  202798             : 
  202799             : // predeclarations for SgOmpTargetExitDataStatement
  202800             : 
  202801             : /* #line 202802 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202802             : 
  202803             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  202804             : 
  202805             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  202806             : 
  202807             : #if 1
  202808             : // Class Definition for SgOmpTargetExitDataStatement
  202809             : class ROSE_DLL_API SgOmpTargetExitDataStatement  : public SgUpirFieldBodyStatement
  202810             :    {
  202811             :      public:
  202812             : 
  202813             : 
  202814             : /* #line 202815 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  202815             : 
  202816             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  202817             : // Start of memberFunctionString
  202818             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  202819             : 
  202820             : // *** COMMON CODE SECTION BEGINS HERE ***
  202821             : 
  202822             :     public:
  202823             : 
  202824             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  202825             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  202826             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  202827             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  202828             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  202829             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  202830             : 
  202831             :       /*! \brief returns a string representing the class name */
  202832             :           virtual std::string class_name() const override;
  202833             : 
  202834             :       /*! \brief returns new style SageIII enum values */
  202835             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  202836             : 
  202837             :       /*! \brief static variant value */
  202838             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  202839             :        // static const VariantT static_variant = V_SgOmpTargetExitDataStatement;
  202840             :           enum { static_variant = V_SgOmpTargetExitDataStatement };
  202841             : 
  202842             :        /* the generated cast function */
  202843             :       /*! \brief Casts pointer from base class to derived class */
  202844             :           ROSE_DLL_API friend       SgOmpTargetExitDataStatement* isSgOmpTargetExitDataStatement(       SgNode * s );
  202845             : 
  202846             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  202847             :           ROSE_DLL_API friend const SgOmpTargetExitDataStatement* isSgOmpTargetExitDataStatement( const SgNode * s );
  202848             : 
  202849             :      // ******************************************
  202850             :      // * Memory Pool / New / Delete
  202851             :      // ******************************************
  202852             : 
  202853             :      public:
  202854             :           /// \private
  202855             :           static const unsigned pool_size; //
  202856             :           /// \private
  202857             :           static std::vector<unsigned char *> pools; //
  202858             :           /// \private
  202859             :           static SgOmpTargetExitDataStatement * next_node; // 
  202860             : 
  202861             :           /// \private
  202862             :           static unsigned long initializeStorageClassArray(SgOmpTargetExitDataStatementStorageClass *); //
  202863             : 
  202864             :           /// \private
  202865             :           static void clearMemoryPool(); //
  202866             :           static void deleteMemoryPool(); //
  202867             : 
  202868             :           /// \private
  202869             :           static void extendMemoryPoolForFileIO(); //
  202870             : 
  202871             :           /// \private
  202872             :           static SgOmpTargetExitDataStatement * getPointerFromGlobalIndex(unsigned long); //
  202873             :           /// \private
  202874             :           static SgOmpTargetExitDataStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  202875             : 
  202876             :           /// \private
  202877             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  202878             :           /// \private
  202879             :           static void resetValidFreepointers(); //
  202880             :           /// \private
  202881             :           static unsigned long getNumberOfLastValidPointer(); //
  202882             : 
  202883             : 
  202884             : #if defined(INLINE_FUNCTIONS)
  202885             :       /*! \brief returns pointer to newly allocated IR node */
  202886             :           inline void *operator new (size_t size);
  202887             : #else
  202888             :       /*! \brief returns pointer to newly allocated IR node */
  202889             :           void *operator new (size_t size);
  202890             : #endif
  202891             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  202892             :           void operator delete (void* pointer, size_t size);
  202893             : 
  202894             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  202895           0 :           void operator delete (void* pointer)
  202896             :              {
  202897             :             // This is the generated delete operator...
  202898           0 :                SgOmpTargetExitDataStatement::operator delete (pointer,sizeof(SgOmpTargetExitDataStatement));
  202899             :              }
  202900             : 
  202901             :       /*! \brief Returns the total number of IR nodes of this type */
  202902             :           static size_t numberOfNodes();
  202903             : 
  202904             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  202905             :           static size_t memoryUsage();
  202906             : 
  202907             :       // End of scope which started in IR nodes specific code 
  202908             :       /* */
  202909             : 
  202910             :       /* name Internal Functions
  202911             :           \brief Internal functions ... incomplete-documentation
  202912             : 
  202913             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202914             :           or by particularly knowledgeable users for specialized tools or applications.
  202915             : 
  202916             :           \internal We could not make these private because they are required by user for special purposes. And 
  202917             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  202918             :          
  202919             :        */
  202920             : 
  202921             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  202922             :        // overridden in every class by *generated* implementation
  202923             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  202924             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  202925             :        // MS: 06/28/02 container of names of variables or container indices 
  202926             :        // used used in the traversal to access AST successor nodes
  202927             :        // overridden in every class by *generated* implementation
  202928             :       /*! \brief container of names of variables or container indices used used in the traversal
  202929             :           to access AST successor nodes overridden in every class by *generated* implementation */
  202930             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  202931             : 
  202932             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  202933             :        // than all the vector copies. The implementation for these functions is generated for each class.
  202934             :       /*! \brief return number of children in the traversal successor list */
  202935             :           virtual size_t get_numberOfTraversalSuccessors() override;
  202936             :       /*! \brief index-based access to traversal successors by index number */
  202937             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  202938             :       /*! \brief index-based access to traversal successors by child node */
  202939             :           virtual size_t get_childIndex(SgNode *child) override;
  202940             : 
  202941             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  202942             :        // MS: 08/16/2002 method for generating RTI information
  202943             :       /*! \brief return C++ Runtime-Time-Information */
  202944             :           virtual RTIReturnType roseRTI() override;
  202945             : #endif
  202946             :       /* */
  202947             : 
  202948             : 
  202949             : 
  202950             :       /* name Deprecated Functions
  202951             :           \brief Deprecated functions ... incomplete-documentation
  202952             : 
  202953             :           These functions have been deprecated from use.
  202954             :        */
  202955             :       /* */
  202956             : 
  202957             :       /*! returns a C style string (char*) representing the class name */
  202958             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  202959             : 
  202960             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  202961             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  202962             : #if 0
  202963             :       /*! returns old style Sage II enum values */
  202964             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  202965             :       /*! returns old style Sage II enum values */
  202966             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  202967             : #endif
  202968             :       /* */
  202969             : 
  202970             : 
  202971             : 
  202972             : 
  202973             :      public:
  202974             :       /* name Traversal Support Functions
  202975             :           \brief Traversal support functions ... incomplete-documentation
  202976             : 
  202977             :           These functions have been made public as part of the design, but they are suggested for internal use 
  202978             :           or by particularly knowledgable users for specialized tools or applications.
  202979             :        */
  202980             :       /* */
  202981             : 
  202982             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  202983             :        // (inferior to ROSE traversal mechanism, experimental).
  202984             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  202985             :        */
  202986             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  202987             : 
  202988             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  202989             :       /*! \brief support for the classic visitor pattern done in GoF */
  202990             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  202991             : 
  202992             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  202993             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  202994             :        */
  202995             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  202996             : 
  202997             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  202998             :        */
  202999             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  203000             : 
  203001             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  203002             :        // This traversal helps support internal tools that call static member functions.
  203003             :        // note: this function operates on the memory pools.
  203004             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  203005             :        */
  203006             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  203007             :       /* */
  203008             : 
  203009             : 
  203010             :      public:
  203011             :       /* name Memory Allocation Functions
  203012             :           \brief Memory allocations functions ... incomplete-documentation
  203013             : 
  203014             :           These functions have been made public as part of the design, but they are suggested for internal use 
  203015             :           or by particularly knowledgable users for specialized tools or applications.
  203016             :        */
  203017             :       /* */
  203018             : 
  203019             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  203020             : 
  203021             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  203022             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  203023             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  203024             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  203025             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  203026             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  203027             :           being used with the AST File I/O mechanism.
  203028             :        */
  203029             :           virtual bool isInMemoryPool() override;
  203030             : 
  203031             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  203032             : 
  203033             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  203034             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  203035             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  203036             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  203037             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  203038             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  203039             :           being used with the AST File I/O mechanism.
  203040             :        */
  203041             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  203042             : 
  203043             :       // DQ (4/30/2006): Modified to be a const function.
  203044             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  203045             : 
  203046             :           This functions is part of general support for many possible tools to operate 
  203047             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  203048             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  203049             :           less than the set of pointers used by the AST file I/O. This is part of
  203050             :           work implemented by Andreas, and support tools such as the AST graph generation.
  203051             : 
  203052             :           \warning This function can return unexpected data members and thus the 
  203053             :                    order and the number of elements is unpredicable and subject 
  203054             :                    to change.
  203055             : 
  203056             :           \returns STL vector of pairs of SgNode* and strings
  203057             :        */
  203058             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  203059             : 
  203060             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  203061             : 
  203062             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  203063             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  203064             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  203065             : 
  203066             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  203067             :                    and subject to change.
  203068             :        */
  203069             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  203070             : 
  203071             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  203072             : 
  203073             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  203074             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  203075             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  203076             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  203077             : 
  203078             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  203079             : 
  203080             :           \returns long
  203081             :        */
  203082             :           virtual long getChildIndex( SgNode* childNode ) const override;
  203083             : 
  203084             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  203085             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203086             :       /* \brief Constructor for use by AST File I/O Mechanism
  203087             : 
  203088             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  203089             :           which obtained via fast binary file I/O from disk.
  203090             :        */
  203091             :        // SgOmpTargetExitDataStatement( SgOmpTargetExitDataStatementStorageClass& source );
  203092             : 
  203093             : 
  203094             : 
  203095             : 
  203096             : 
  203097             :  // JH (10/24/2005): methods added to support the ast file IO
  203098             :     private:
  203099             : 
  203100             :       /* name AST Memory Allocation Support Functions
  203101             :           \brief Memory allocations support....
  203102             : 
  203103             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  203104             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  203105             :           and support the AST File I/O Mechanism.
  203106             :        */
  203107             :       /* */
  203108             : 
  203109             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  203110             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  203111             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  203112             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  203113             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  203114             :           a correspinding one in the AST_FILE_IO class!
  203115             :        */
  203116             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  203117             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203118             :       /* \brief Typedef used for low level memory access.
  203119             :        */
  203120             :        // typedef unsigned char* TestType;
  203121             : 
  203122             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  203123             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203124             :       /* \brief Typedef used to hold memory addresses as values.
  203125             :        */
  203126             :        // typedef unsigned long  AddressType;
  203127             : 
  203128             : 
  203129             : 
  203130             :        // necessary, to have direct access to the p_freepointer and the private methods !
  203131             :       /*! \brief friend class declaration to support AST File I/O */
  203132             :           friend class AST_FILE_IO;
  203133             : 
  203134             :       /*! \brief friend class declaration to support AST File I/O */
  203135             :           friend class SgOmpTargetExitDataStatementStorageClass;
  203136             : 
  203137             :       /*! \brief friend class declaration to support AST File I/O */
  203138             :           friend class AstSpecificDataManagingClass;
  203139             : 
  203140             :       /*! \brief friend class declaration to support AST File I/O */
  203141             :           friend class AstSpecificDataManagingClassStorageClass;
  203142             :     public:
  203143             :       /*! \brief IR node constructor to support AST File I/O */
  203144             :           SgOmpTargetExitDataStatement( const SgOmpTargetExitDataStatementStorageClass& source );
  203145             : 
  203146             :  // private: // JJW hack
  203147             :        /*
  203148             :           name AST Memory Allocation Support Variables
  203149             :           Memory allocations support variables 
  203150             : 
  203151             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  203152             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  203153             :           and support the AST File I/O Mechanism.
  203154             :        */
  203155             :       /* */
  203156             : 
  203157             :     public:
  203158             : 
  203159             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  203160             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  203161             :       // virtual SgNode* addRegExpAttribute();
  203162             :       /*! \brief Support for AST matching using regular expression.
  203163             : 
  203164             :           This support is incomplete and the subject of current research to define 
  203165             :           RegEx trees to support inexact matching.
  203166             :        */
  203167             :           SgOmpTargetExitDataStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  203168             : 
  203169             : // *** COMMON CODE SECTION ENDS HERE ***
  203170             : 
  203171             : 
  203172             : // End of memberFunctionString
  203173             : // Start of memberFunctionString
  203174             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  203175             : 
  203176             :      // the generated cast function
  203177             :      // friend ROSE_DLL_API SgOmpTargetExitDataStatement* isSgOmpTargetExitDataStatement ( SgNode* s );
  203178             : 
  203179             :           typedef SgUpirFieldBodyStatement base_node_type;
  203180             : 
  203181             : 
  203182             : // End of memberFunctionString
  203183             : // Start of memberFunctionString
  203184             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  203185             : 
  203186             :           void post_construction_initialization() override;
  203187             : 
  203188             : 
  203189             : // End of memberFunctionString
  203190             : 
  203191             : 
  203192             :      public: 
  203193             :          virtual ~SgOmpTargetExitDataStatement();
  203194             : 
  203195             : 
  203196             :      public: 
  203197             :          SgOmpTargetExitDataStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  203198             :          SgOmpTargetExitDataStatement(SgStatement* body); 
  203199             : 
  203200             :     protected:
  203201             : 
  203202             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetExitDataStatement>;
  203203             : 
  203204             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203205             : 
  203206             : 
  203207             :    };
  203208             : #endif
  203209             : 
  203210             : // postdeclarations for SgOmpTargetExitDataStatement
  203211             : 
  203212             : /* #line 203213 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203213             : 
  203214             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  203215             : 
  203216             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203217             : 
  203218             : 
  203219             : /* #line 203220 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203220             : 
  203221             : 
  203222             : 
  203223             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203224             : 
  203225             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  203226             : //      This code is automatically generated for each 
  203227             : //      terminal and non-terminal within the defined 
  203228             : //      grammar.  There is a simple way to change the 
  203229             : //      code to fix bugs etc.  See the ROSE README file
  203230             : //      for directions.
  203231             : 
  203232             : // tps: (02/22/2010): Adding DLL export requirements
  203233             : #include "rosedll.h"
  203234             : 
  203235             : // predeclarations for SgOmpParallelMasterStatement
  203236             : 
  203237             : /* #line 203238 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203238             : 
  203239             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  203240             : 
  203241             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203242             : 
  203243             : #if 1
  203244             : // Class Definition for SgOmpParallelMasterStatement
  203245             : class ROSE_DLL_API SgOmpParallelMasterStatement  : public SgUpirFieldBodyStatement
  203246             :    {
  203247             :      public:
  203248             : 
  203249             : 
  203250             : /* #line 203251 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203251             : 
  203252             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  203253             : // Start of memberFunctionString
  203254             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  203255             : 
  203256             : // *** COMMON CODE SECTION BEGINS HERE ***
  203257             : 
  203258             :     public:
  203259             : 
  203260             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  203261             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  203262             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  203263             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  203264             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  203265             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  203266             : 
  203267             :       /*! \brief returns a string representing the class name */
  203268             :           virtual std::string class_name() const override;
  203269             : 
  203270             :       /*! \brief returns new style SageIII enum values */
  203271             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  203272             : 
  203273             :       /*! \brief static variant value */
  203274             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  203275             :        // static const VariantT static_variant = V_SgOmpParallelMasterStatement;
  203276             :           enum { static_variant = V_SgOmpParallelMasterStatement };
  203277             : 
  203278             :        /* the generated cast function */
  203279             :       /*! \brief Casts pointer from base class to derived class */
  203280             :           ROSE_DLL_API friend       SgOmpParallelMasterStatement* isSgOmpParallelMasterStatement(       SgNode * s );
  203281             : 
  203282             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  203283             :           ROSE_DLL_API friend const SgOmpParallelMasterStatement* isSgOmpParallelMasterStatement( const SgNode * s );
  203284             : 
  203285             :      // ******************************************
  203286             :      // * Memory Pool / New / Delete
  203287             :      // ******************************************
  203288             : 
  203289             :      public:
  203290             :           /// \private
  203291             :           static const unsigned pool_size; //
  203292             :           /// \private
  203293             :           static std::vector<unsigned char *> pools; //
  203294             :           /// \private
  203295             :           static SgOmpParallelMasterStatement * next_node; // 
  203296             : 
  203297             :           /// \private
  203298             :           static unsigned long initializeStorageClassArray(SgOmpParallelMasterStatementStorageClass *); //
  203299             : 
  203300             :           /// \private
  203301             :           static void clearMemoryPool(); //
  203302             :           static void deleteMemoryPool(); //
  203303             : 
  203304             :           /// \private
  203305             :           static void extendMemoryPoolForFileIO(); //
  203306             : 
  203307             :           /// \private
  203308             :           static SgOmpParallelMasterStatement * getPointerFromGlobalIndex(unsigned long); //
  203309             :           /// \private
  203310             :           static SgOmpParallelMasterStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  203311             : 
  203312             :           /// \private
  203313             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  203314             :           /// \private
  203315             :           static void resetValidFreepointers(); //
  203316             :           /// \private
  203317             :           static unsigned long getNumberOfLastValidPointer(); //
  203318             : 
  203319             : 
  203320             : #if defined(INLINE_FUNCTIONS)
  203321             :       /*! \brief returns pointer to newly allocated IR node */
  203322             :           inline void *operator new (size_t size);
  203323             : #else
  203324             :       /*! \brief returns pointer to newly allocated IR node */
  203325             :           void *operator new (size_t size);
  203326             : #endif
  203327             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  203328             :           void operator delete (void* pointer, size_t size);
  203329             : 
  203330             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  203331           0 :           void operator delete (void* pointer)
  203332             :              {
  203333             :             // This is the generated delete operator...
  203334           0 :                SgOmpParallelMasterStatement::operator delete (pointer,sizeof(SgOmpParallelMasterStatement));
  203335             :              }
  203336             : 
  203337             :       /*! \brief Returns the total number of IR nodes of this type */
  203338             :           static size_t numberOfNodes();
  203339             : 
  203340             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  203341             :           static size_t memoryUsage();
  203342             : 
  203343             :       // End of scope which started in IR nodes specific code 
  203344             :       /* */
  203345             : 
  203346             :       /* name Internal Functions
  203347             :           \brief Internal functions ... incomplete-documentation
  203348             : 
  203349             :           These functions have been made public as part of the design, but they are suggested for internal use 
  203350             :           or by particularly knowledgeable users for specialized tools or applications.
  203351             : 
  203352             :           \internal We could not make these private because they are required by user for special purposes. And 
  203353             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  203354             :          
  203355             :        */
  203356             : 
  203357             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  203358             :        // overridden in every class by *generated* implementation
  203359             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  203360             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  203361             :        // MS: 06/28/02 container of names of variables or container indices 
  203362             :        // used used in the traversal to access AST successor nodes
  203363             :        // overridden in every class by *generated* implementation
  203364             :       /*! \brief container of names of variables or container indices used used in the traversal
  203365             :           to access AST successor nodes overridden in every class by *generated* implementation */
  203366             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  203367             : 
  203368             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  203369             :        // than all the vector copies. The implementation for these functions is generated for each class.
  203370             :       /*! \brief return number of children in the traversal successor list */
  203371             :           virtual size_t get_numberOfTraversalSuccessors() override;
  203372             :       /*! \brief index-based access to traversal successors by index number */
  203373             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  203374             :       /*! \brief index-based access to traversal successors by child node */
  203375             :           virtual size_t get_childIndex(SgNode *child) override;
  203376             : 
  203377             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  203378             :        // MS: 08/16/2002 method for generating RTI information
  203379             :       /*! \brief return C++ Runtime-Time-Information */
  203380             :           virtual RTIReturnType roseRTI() override;
  203381             : #endif
  203382             :       /* */
  203383             : 
  203384             : 
  203385             : 
  203386             :       /* name Deprecated Functions
  203387             :           \brief Deprecated functions ... incomplete-documentation
  203388             : 
  203389             :           These functions have been deprecated from use.
  203390             :        */
  203391             :       /* */
  203392             : 
  203393             :       /*! returns a C style string (char*) representing the class name */
  203394             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  203395             : 
  203396             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  203397             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  203398             : #if 0
  203399             :       /*! returns old style Sage II enum values */
  203400             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  203401             :       /*! returns old style Sage II enum values */
  203402             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  203403             : #endif
  203404             :       /* */
  203405             : 
  203406             : 
  203407             : 
  203408             : 
  203409             :      public:
  203410             :       /* name Traversal Support Functions
  203411             :           \brief Traversal support functions ... incomplete-documentation
  203412             : 
  203413             :           These functions have been made public as part of the design, but they are suggested for internal use 
  203414             :           or by particularly knowledgable users for specialized tools or applications.
  203415             :        */
  203416             :       /* */
  203417             : 
  203418             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  203419             :        // (inferior to ROSE traversal mechanism, experimental).
  203420             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  203421             :        */
  203422             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  203423             : 
  203424             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  203425             :       /*! \brief support for the classic visitor pattern done in GoF */
  203426             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  203427             : 
  203428             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  203429             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  203430             :        */
  203431             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  203432             : 
  203433             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  203434             :        */
  203435             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  203436             : 
  203437             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  203438             :        // This traversal helps support internal tools that call static member functions.
  203439             :        // note: this function operates on the memory pools.
  203440             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  203441             :        */
  203442             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  203443             :       /* */
  203444             : 
  203445             : 
  203446             :      public:
  203447             :       /* name Memory Allocation Functions
  203448             :           \brief Memory allocations functions ... incomplete-documentation
  203449             : 
  203450             :           These functions have been made public as part of the design, but they are suggested for internal use 
  203451             :           or by particularly knowledgable users for specialized tools or applications.
  203452             :        */
  203453             :       /* */
  203454             : 
  203455             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  203456             : 
  203457             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  203458             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  203459             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  203460             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  203461             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  203462             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  203463             :           being used with the AST File I/O mechanism.
  203464             :        */
  203465             :           virtual bool isInMemoryPool() override;
  203466             : 
  203467             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  203468             : 
  203469             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  203470             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  203471             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  203472             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  203473             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  203474             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  203475             :           being used with the AST File I/O mechanism.
  203476             :        */
  203477             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  203478             : 
  203479             :       // DQ (4/30/2006): Modified to be a const function.
  203480             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  203481             : 
  203482             :           This functions is part of general support for many possible tools to operate 
  203483             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  203484             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  203485             :           less than the set of pointers used by the AST file I/O. This is part of
  203486             :           work implemented by Andreas, and support tools such as the AST graph generation.
  203487             : 
  203488             :           \warning This function can return unexpected data members and thus the 
  203489             :                    order and the number of elements is unpredicable and subject 
  203490             :                    to change.
  203491             : 
  203492             :           \returns STL vector of pairs of SgNode* and strings
  203493             :        */
  203494             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  203495             : 
  203496             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  203497             : 
  203498             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  203499             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  203500             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  203501             : 
  203502             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  203503             :                    and subject to change.
  203504             :        */
  203505             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  203506             : 
  203507             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  203508             : 
  203509             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  203510             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  203511             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  203512             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  203513             : 
  203514             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  203515             : 
  203516             :           \returns long
  203517             :        */
  203518             :           virtual long getChildIndex( SgNode* childNode ) const override;
  203519             : 
  203520             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  203521             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203522             :       /* \brief Constructor for use by AST File I/O Mechanism
  203523             : 
  203524             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  203525             :           which obtained via fast binary file I/O from disk.
  203526             :        */
  203527             :        // SgOmpParallelMasterStatement( SgOmpParallelMasterStatementStorageClass& source );
  203528             : 
  203529             : 
  203530             : 
  203531             : 
  203532             : 
  203533             :  // JH (10/24/2005): methods added to support the ast file IO
  203534             :     private:
  203535             : 
  203536             :       /* name AST Memory Allocation Support Functions
  203537             :           \brief Memory allocations support....
  203538             : 
  203539             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  203540             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  203541             :           and support the AST File I/O Mechanism.
  203542             :        */
  203543             :       /* */
  203544             : 
  203545             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  203546             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  203547             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  203548             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  203549             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  203550             :           a correspinding one in the AST_FILE_IO class!
  203551             :        */
  203552             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  203553             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203554             :       /* \brief Typedef used for low level memory access.
  203555             :        */
  203556             :        // typedef unsigned char* TestType;
  203557             : 
  203558             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  203559             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203560             :       /* \brief Typedef used to hold memory addresses as values.
  203561             :        */
  203562             :        // typedef unsigned long  AddressType;
  203563             : 
  203564             : 
  203565             : 
  203566             :        // necessary, to have direct access to the p_freepointer and the private methods !
  203567             :       /*! \brief friend class declaration to support AST File I/O */
  203568             :           friend class AST_FILE_IO;
  203569             : 
  203570             :       /*! \brief friend class declaration to support AST File I/O */
  203571             :           friend class SgOmpParallelMasterStatementStorageClass;
  203572             : 
  203573             :       /*! \brief friend class declaration to support AST File I/O */
  203574             :           friend class AstSpecificDataManagingClass;
  203575             : 
  203576             :       /*! \brief friend class declaration to support AST File I/O */
  203577             :           friend class AstSpecificDataManagingClassStorageClass;
  203578             :     public:
  203579             :       /*! \brief IR node constructor to support AST File I/O */
  203580             :           SgOmpParallelMasterStatement( const SgOmpParallelMasterStatementStorageClass& source );
  203581             : 
  203582             :  // private: // JJW hack
  203583             :        /*
  203584             :           name AST Memory Allocation Support Variables
  203585             :           Memory allocations support variables 
  203586             : 
  203587             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  203588             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  203589             :           and support the AST File I/O Mechanism.
  203590             :        */
  203591             :       /* */
  203592             : 
  203593             :     public:
  203594             : 
  203595             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  203596             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  203597             :       // virtual SgNode* addRegExpAttribute();
  203598             :       /*! \brief Support for AST matching using regular expression.
  203599             : 
  203600             :           This support is incomplete and the subject of current research to define 
  203601             :           RegEx trees to support inexact matching.
  203602             :        */
  203603             :           SgOmpParallelMasterStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  203604             : 
  203605             : // *** COMMON CODE SECTION ENDS HERE ***
  203606             : 
  203607             : 
  203608             : // End of memberFunctionString
  203609             : // Start of memberFunctionString
  203610             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  203611             : 
  203612             :      // the generated cast function
  203613             :      // friend ROSE_DLL_API SgOmpParallelMasterStatement* isSgOmpParallelMasterStatement ( SgNode* s );
  203614             : 
  203615             :           typedef SgUpirFieldBodyStatement base_node_type;
  203616             : 
  203617             : 
  203618             : // End of memberFunctionString
  203619             : // Start of memberFunctionString
  203620             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  203621             : 
  203622             :           void post_construction_initialization() override;
  203623             : 
  203624             : 
  203625             : // End of memberFunctionString
  203626             : 
  203627             : 
  203628             :      public: 
  203629             :          virtual ~SgOmpParallelMasterStatement();
  203630             : 
  203631             : 
  203632             :      public: 
  203633             :          SgOmpParallelMasterStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  203634             :          SgOmpParallelMasterStatement(SgStatement* body); 
  203635             : 
  203636             :     protected:
  203637             : 
  203638             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpParallelMasterStatement>;
  203639             : 
  203640             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203641             : 
  203642             : 
  203643             :    };
  203644             : #endif
  203645             : 
  203646             : // postdeclarations for SgOmpParallelMasterStatement
  203647             : 
  203648             : /* #line 203649 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203649             : 
  203650             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  203651             : 
  203652             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203653             : 
  203654             : 
  203655             : /* #line 203656 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203656             : 
  203657             : 
  203658             : 
  203659             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203660             : 
  203661             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  203662             : //      This code is automatically generated for each 
  203663             : //      terminal and non-terminal within the defined 
  203664             : //      grammar.  There is a simple way to change the 
  203665             : //      code to fix bugs etc.  See the ROSE README file
  203666             : //      for directions.
  203667             : 
  203668             : // tps: (02/22/2010): Adding DLL export requirements
  203669             : #include "rosedll.h"
  203670             : 
  203671             : // predeclarations for SgOmpMasterTaskloopStatement
  203672             : 
  203673             : /* #line 203674 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203674             : 
  203675             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  203676             : 
  203677             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  203678             : 
  203679             : #if 1
  203680             : // Class Definition for SgOmpMasterTaskloopStatement
  203681             : class ROSE_DLL_API SgOmpMasterTaskloopStatement  : public SgUpirFieldBodyStatement
  203682             :    {
  203683             :      public:
  203684             : 
  203685             : 
  203686             : /* #line 203687 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  203687             : 
  203688             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  203689             : // Start of memberFunctionString
  203690             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  203691             : 
  203692             : // *** COMMON CODE SECTION BEGINS HERE ***
  203693             : 
  203694             :     public:
  203695             : 
  203696             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  203697             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  203698             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  203699             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  203700             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  203701             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  203702             : 
  203703             :       /*! \brief returns a string representing the class name */
  203704             :           virtual std::string class_name() const override;
  203705             : 
  203706             :       /*! \brief returns new style SageIII enum values */
  203707             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  203708             : 
  203709             :       /*! \brief static variant value */
  203710             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  203711             :        // static const VariantT static_variant = V_SgOmpMasterTaskloopStatement;
  203712             :           enum { static_variant = V_SgOmpMasterTaskloopStatement };
  203713             : 
  203714             :        /* the generated cast function */
  203715             :       /*! \brief Casts pointer from base class to derived class */
  203716             :           ROSE_DLL_API friend       SgOmpMasterTaskloopStatement* isSgOmpMasterTaskloopStatement(       SgNode * s );
  203717             : 
  203718             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  203719             :           ROSE_DLL_API friend const SgOmpMasterTaskloopStatement* isSgOmpMasterTaskloopStatement( const SgNode * s );
  203720             : 
  203721             :      // ******************************************
  203722             :      // * Memory Pool / New / Delete
  203723             :      // ******************************************
  203724             : 
  203725             :      public:
  203726             :           /// \private
  203727             :           static const unsigned pool_size; //
  203728             :           /// \private
  203729             :           static std::vector<unsigned char *> pools; //
  203730             :           /// \private
  203731             :           static SgOmpMasterTaskloopStatement * next_node; // 
  203732             : 
  203733             :           /// \private
  203734             :           static unsigned long initializeStorageClassArray(SgOmpMasterTaskloopStatementStorageClass *); //
  203735             : 
  203736             :           /// \private
  203737             :           static void clearMemoryPool(); //
  203738             :           static void deleteMemoryPool(); //
  203739             : 
  203740             :           /// \private
  203741             :           static void extendMemoryPoolForFileIO(); //
  203742             : 
  203743             :           /// \private
  203744             :           static SgOmpMasterTaskloopStatement * getPointerFromGlobalIndex(unsigned long); //
  203745             :           /// \private
  203746             :           static SgOmpMasterTaskloopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  203747             : 
  203748             :           /// \private
  203749             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  203750             :           /// \private
  203751             :           static void resetValidFreepointers(); //
  203752             :           /// \private
  203753             :           static unsigned long getNumberOfLastValidPointer(); //
  203754             : 
  203755             : 
  203756             : #if defined(INLINE_FUNCTIONS)
  203757             :       /*! \brief returns pointer to newly allocated IR node */
  203758             :           inline void *operator new (size_t size);
  203759             : #else
  203760             :       /*! \brief returns pointer to newly allocated IR node */
  203761             :           void *operator new (size_t size);
  203762             : #endif
  203763             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  203764             :           void operator delete (void* pointer, size_t size);
  203765             : 
  203766             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  203767           0 :           void operator delete (void* pointer)
  203768             :              {
  203769             :             // This is the generated delete operator...
  203770           0 :                SgOmpMasterTaskloopStatement::operator delete (pointer,sizeof(SgOmpMasterTaskloopStatement));
  203771             :              }
  203772             : 
  203773             :       /*! \brief Returns the total number of IR nodes of this type */
  203774             :           static size_t numberOfNodes();
  203775             : 
  203776             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  203777             :           static size_t memoryUsage();
  203778             : 
  203779             :       // End of scope which started in IR nodes specific code 
  203780             :       /* */
  203781             : 
  203782             :       /* name Internal Functions
  203783             :           \brief Internal functions ... incomplete-documentation
  203784             : 
  203785             :           These functions have been made public as part of the design, but they are suggested for internal use 
  203786             :           or by particularly knowledgeable users for specialized tools or applications.
  203787             : 
  203788             :           \internal We could not make these private because they are required by user for special purposes. And 
  203789             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  203790             :          
  203791             :        */
  203792             : 
  203793             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  203794             :        // overridden in every class by *generated* implementation
  203795             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  203796             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  203797             :        // MS: 06/28/02 container of names of variables or container indices 
  203798             :        // used used in the traversal to access AST successor nodes
  203799             :        // overridden in every class by *generated* implementation
  203800             :       /*! \brief container of names of variables or container indices used used in the traversal
  203801             :           to access AST successor nodes overridden in every class by *generated* implementation */
  203802             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  203803             : 
  203804             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  203805             :        // than all the vector copies. The implementation for these functions is generated for each class.
  203806             :       /*! \brief return number of children in the traversal successor list */
  203807             :           virtual size_t get_numberOfTraversalSuccessors() override;
  203808             :       /*! \brief index-based access to traversal successors by index number */
  203809             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  203810             :       /*! \brief index-based access to traversal successors by child node */
  203811             :           virtual size_t get_childIndex(SgNode *child) override;
  203812             : 
  203813             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  203814             :        // MS: 08/16/2002 method for generating RTI information
  203815             :       /*! \brief return C++ Runtime-Time-Information */
  203816             :           virtual RTIReturnType roseRTI() override;
  203817             : #endif
  203818             :       /* */
  203819             : 
  203820             : 
  203821             : 
  203822             :       /* name Deprecated Functions
  203823             :           \brief Deprecated functions ... incomplete-documentation
  203824             : 
  203825             :           These functions have been deprecated from use.
  203826             :        */
  203827             :       /* */
  203828             : 
  203829             :       /*! returns a C style string (char*) representing the class name */
  203830             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  203831             : 
  203832             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  203833             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  203834             : #if 0
  203835             :       /*! returns old style Sage II enum values */
  203836             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  203837             :       /*! returns old style Sage II enum values */
  203838             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  203839             : #endif
  203840             :       /* */
  203841             : 
  203842             : 
  203843             : 
  203844             : 
  203845             :      public:
  203846             :       /* name Traversal Support Functions
  203847             :           \brief Traversal support functions ... incomplete-documentation
  203848             : 
  203849             :           These functions have been made public as part of the design, but they are suggested for internal use 
  203850             :           or by particularly knowledgable users for specialized tools or applications.
  203851             :        */
  203852             :       /* */
  203853             : 
  203854             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  203855             :        // (inferior to ROSE traversal mechanism, experimental).
  203856             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  203857             :        */
  203858             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  203859             : 
  203860             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  203861             :       /*! \brief support for the classic visitor pattern done in GoF */
  203862             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  203863             : 
  203864             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  203865             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  203866             :        */
  203867             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  203868             : 
  203869             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  203870             :        */
  203871             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  203872             : 
  203873             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  203874             :        // This traversal helps support internal tools that call static member functions.
  203875             :        // note: this function operates on the memory pools.
  203876             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  203877             :        */
  203878             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  203879             :       /* */
  203880             : 
  203881             : 
  203882             :      public:
  203883             :       /* name Memory Allocation Functions
  203884             :           \brief Memory allocations functions ... incomplete-documentation
  203885             : 
  203886             :           These functions have been made public as part of the design, but they are suggested for internal use 
  203887             :           or by particularly knowledgable users for specialized tools or applications.
  203888             :        */
  203889             :       /* */
  203890             : 
  203891             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  203892             : 
  203893             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  203894             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  203895             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  203896             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  203897             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  203898             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  203899             :           being used with the AST File I/O mechanism.
  203900             :        */
  203901             :           virtual bool isInMemoryPool() override;
  203902             : 
  203903             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  203904             : 
  203905             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  203906             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  203907             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  203908             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  203909             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  203910             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  203911             :           being used with the AST File I/O mechanism.
  203912             :        */
  203913             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  203914             : 
  203915             :       // DQ (4/30/2006): Modified to be a const function.
  203916             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  203917             : 
  203918             :           This functions is part of general support for many possible tools to operate 
  203919             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  203920             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  203921             :           less than the set of pointers used by the AST file I/O. This is part of
  203922             :           work implemented by Andreas, and support tools such as the AST graph generation.
  203923             : 
  203924             :           \warning This function can return unexpected data members and thus the 
  203925             :                    order and the number of elements is unpredicable and subject 
  203926             :                    to change.
  203927             : 
  203928             :           \returns STL vector of pairs of SgNode* and strings
  203929             :        */
  203930             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  203931             : 
  203932             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  203933             : 
  203934             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  203935             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  203936             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  203937             : 
  203938             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  203939             :                    and subject to change.
  203940             :        */
  203941             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  203942             : 
  203943             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  203944             : 
  203945             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  203946             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  203947             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  203948             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  203949             : 
  203950             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  203951             : 
  203952             :           \returns long
  203953             :        */
  203954             :           virtual long getChildIndex( SgNode* childNode ) const override;
  203955             : 
  203956             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  203957             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203958             :       /* \brief Constructor for use by AST File I/O Mechanism
  203959             : 
  203960             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  203961             :           which obtained via fast binary file I/O from disk.
  203962             :        */
  203963             :        // SgOmpMasterTaskloopStatement( SgOmpMasterTaskloopStatementStorageClass& source );
  203964             : 
  203965             : 
  203966             : 
  203967             : 
  203968             : 
  203969             :  // JH (10/24/2005): methods added to support the ast file IO
  203970             :     private:
  203971             : 
  203972             :       /* name AST Memory Allocation Support Functions
  203973             :           \brief Memory allocations support....
  203974             : 
  203975             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  203976             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  203977             :           and support the AST File I/O Mechanism.
  203978             :        */
  203979             :       /* */
  203980             : 
  203981             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  203982             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  203983             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  203984             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  203985             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  203986             :           a correspinding one in the AST_FILE_IO class!
  203987             :        */
  203988             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  203989             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203990             :       /* \brief Typedef used for low level memory access.
  203991             :        */
  203992             :        // typedef unsigned char* TestType;
  203993             : 
  203994             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  203995             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  203996             :       /* \brief Typedef used to hold memory addresses as values.
  203997             :        */
  203998             :        // typedef unsigned long  AddressType;
  203999             : 
  204000             : 
  204001             : 
  204002             :        // necessary, to have direct access to the p_freepointer and the private methods !
  204003             :       /*! \brief friend class declaration to support AST File I/O */
  204004             :           friend class AST_FILE_IO;
  204005             : 
  204006             :       /*! \brief friend class declaration to support AST File I/O */
  204007             :           friend class SgOmpMasterTaskloopStatementStorageClass;
  204008             : 
  204009             :       /*! \brief friend class declaration to support AST File I/O */
  204010             :           friend class AstSpecificDataManagingClass;
  204011             : 
  204012             :       /*! \brief friend class declaration to support AST File I/O */
  204013             :           friend class AstSpecificDataManagingClassStorageClass;
  204014             :     public:
  204015             :       /*! \brief IR node constructor to support AST File I/O */
  204016             :           SgOmpMasterTaskloopStatement( const SgOmpMasterTaskloopStatementStorageClass& source );
  204017             : 
  204018             :  // private: // JJW hack
  204019             :        /*
  204020             :           name AST Memory Allocation Support Variables
  204021             :           Memory allocations support variables 
  204022             : 
  204023             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  204024             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  204025             :           and support the AST File I/O Mechanism.
  204026             :        */
  204027             :       /* */
  204028             : 
  204029             :     public:
  204030             : 
  204031             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  204032             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  204033             :       // virtual SgNode* addRegExpAttribute();
  204034             :       /*! \brief Support for AST matching using regular expression.
  204035             : 
  204036             :           This support is incomplete and the subject of current research to define 
  204037             :           RegEx trees to support inexact matching.
  204038             :        */
  204039             :           SgOmpMasterTaskloopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  204040             : 
  204041             : // *** COMMON CODE SECTION ENDS HERE ***
  204042             : 
  204043             : 
  204044             : // End of memberFunctionString
  204045             : // Start of memberFunctionString
  204046             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  204047             : 
  204048             :      // the generated cast function
  204049             :      // friend ROSE_DLL_API SgOmpMasterTaskloopStatement* isSgOmpMasterTaskloopStatement ( SgNode* s );
  204050             : 
  204051             :           typedef SgUpirFieldBodyStatement base_node_type;
  204052             : 
  204053             : 
  204054             : // End of memberFunctionString
  204055             : // Start of memberFunctionString
  204056             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  204057             : 
  204058             :           void post_construction_initialization() override;
  204059             : 
  204060             : 
  204061             : // End of memberFunctionString
  204062             : 
  204063             : 
  204064             :      public: 
  204065             :          virtual ~SgOmpMasterTaskloopStatement();
  204066             : 
  204067             : 
  204068             :      public: 
  204069             :          SgOmpMasterTaskloopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  204070             :          SgOmpMasterTaskloopStatement(SgStatement* body); 
  204071             : 
  204072             :     protected:
  204073             : 
  204074             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpMasterTaskloopStatement>;
  204075             : 
  204076             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204077             : 
  204078             : 
  204079             :    };
  204080             : #endif
  204081             : 
  204082             : // postdeclarations for SgOmpMasterTaskloopStatement
  204083             : 
  204084             : /* #line 204085 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204085             : 
  204086             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  204087             : 
  204088             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204089             : 
  204090             : 
  204091             : /* #line 204092 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204092             : 
  204093             : 
  204094             : 
  204095             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204096             : 
  204097             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  204098             : //      This code is automatically generated for each 
  204099             : //      terminal and non-terminal within the defined 
  204100             : //      grammar.  There is a simple way to change the 
  204101             : //      code to fix bugs etc.  See the ROSE README file
  204102             : //      for directions.
  204103             : 
  204104             : // tps: (02/22/2010): Adding DLL export requirements
  204105             : #include "rosedll.h"
  204106             : 
  204107             : // predeclarations for SgOmpTaskStatement
  204108             : 
  204109             : /* #line 204110 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204110             : 
  204111             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  204112             : 
  204113             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204114             : 
  204115             : #if 1
  204116             : // Class Definition for SgOmpTaskStatement
  204117             : class ROSE_DLL_API SgOmpTaskStatement  : public SgUpirFieldBodyStatement
  204118             :    {
  204119             :      public:
  204120             : 
  204121             : 
  204122             : /* #line 204123 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204123             : 
  204124             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  204125             : // Start of memberFunctionString
  204126             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  204127             : 
  204128             : // *** COMMON CODE SECTION BEGINS HERE ***
  204129             : 
  204130             :     public:
  204131             : 
  204132             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  204133             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  204134             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  204135             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  204136             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  204137             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  204138             : 
  204139             :       /*! \brief returns a string representing the class name */
  204140             :           virtual std::string class_name() const override;
  204141             : 
  204142             :       /*! \brief returns new style SageIII enum values */
  204143             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  204144             : 
  204145             :       /*! \brief static variant value */
  204146             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  204147             :        // static const VariantT static_variant = V_SgOmpTaskStatement;
  204148             :           enum { static_variant = V_SgOmpTaskStatement };
  204149             : 
  204150             :        /* the generated cast function */
  204151             :       /*! \brief Casts pointer from base class to derived class */
  204152             :           ROSE_DLL_API friend       SgOmpTaskStatement* isSgOmpTaskStatement(       SgNode * s );
  204153             : 
  204154             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  204155             :           ROSE_DLL_API friend const SgOmpTaskStatement* isSgOmpTaskStatement( const SgNode * s );
  204156             : 
  204157             :      // ******************************************
  204158             :      // * Memory Pool / New / Delete
  204159             :      // ******************************************
  204160             : 
  204161             :      public:
  204162             :           /// \private
  204163             :           static const unsigned pool_size; //
  204164             :           /// \private
  204165             :           static std::vector<unsigned char *> pools; //
  204166             :           /// \private
  204167             :           static SgOmpTaskStatement * next_node; // 
  204168             : 
  204169             :           /// \private
  204170             :           static unsigned long initializeStorageClassArray(SgOmpTaskStatementStorageClass *); //
  204171             : 
  204172             :           /// \private
  204173             :           static void clearMemoryPool(); //
  204174             :           static void deleteMemoryPool(); //
  204175             : 
  204176             :           /// \private
  204177             :           static void extendMemoryPoolForFileIO(); //
  204178             : 
  204179             :           /// \private
  204180             :           static SgOmpTaskStatement * getPointerFromGlobalIndex(unsigned long); //
  204181             :           /// \private
  204182             :           static SgOmpTaskStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  204183             : 
  204184             :           /// \private
  204185             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  204186             :           /// \private
  204187             :           static void resetValidFreepointers(); //
  204188             :           /// \private
  204189             :           static unsigned long getNumberOfLastValidPointer(); //
  204190             : 
  204191             : 
  204192             : #if defined(INLINE_FUNCTIONS)
  204193             :       /*! \brief returns pointer to newly allocated IR node */
  204194             :           inline void *operator new (size_t size);
  204195             : #else
  204196             :       /*! \brief returns pointer to newly allocated IR node */
  204197             :           void *operator new (size_t size);
  204198             : #endif
  204199             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  204200             :           void operator delete (void* pointer, size_t size);
  204201             : 
  204202             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  204203           0 :           void operator delete (void* pointer)
  204204             :              {
  204205             :             // This is the generated delete operator...
  204206           0 :                SgOmpTaskStatement::operator delete (pointer,sizeof(SgOmpTaskStatement));
  204207             :              }
  204208             : 
  204209             :       /*! \brief Returns the total number of IR nodes of this type */
  204210             :           static size_t numberOfNodes();
  204211             : 
  204212             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  204213             :           static size_t memoryUsage();
  204214             : 
  204215             :       // End of scope which started in IR nodes specific code 
  204216             :       /* */
  204217             : 
  204218             :       /* name Internal Functions
  204219             :           \brief Internal functions ... incomplete-documentation
  204220             : 
  204221             :           These functions have been made public as part of the design, but they are suggested for internal use 
  204222             :           or by particularly knowledgeable users for specialized tools or applications.
  204223             : 
  204224             :           \internal We could not make these private because they are required by user for special purposes. And 
  204225             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  204226             :          
  204227             :        */
  204228             : 
  204229             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  204230             :        // overridden in every class by *generated* implementation
  204231             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  204232             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  204233             :        // MS: 06/28/02 container of names of variables or container indices 
  204234             :        // used used in the traversal to access AST successor nodes
  204235             :        // overridden in every class by *generated* implementation
  204236             :       /*! \brief container of names of variables or container indices used used in the traversal
  204237             :           to access AST successor nodes overridden in every class by *generated* implementation */
  204238             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  204239             : 
  204240             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  204241             :        // than all the vector copies. The implementation for these functions is generated for each class.
  204242             :       /*! \brief return number of children in the traversal successor list */
  204243             :           virtual size_t get_numberOfTraversalSuccessors() override;
  204244             :       /*! \brief index-based access to traversal successors by index number */
  204245             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  204246             :       /*! \brief index-based access to traversal successors by child node */
  204247             :           virtual size_t get_childIndex(SgNode *child) override;
  204248             : 
  204249             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  204250             :        // MS: 08/16/2002 method for generating RTI information
  204251             :       /*! \brief return C++ Runtime-Time-Information */
  204252             :           virtual RTIReturnType roseRTI() override;
  204253             : #endif
  204254             :       /* */
  204255             : 
  204256             : 
  204257             : 
  204258             :       /* name Deprecated Functions
  204259             :           \brief Deprecated functions ... incomplete-documentation
  204260             : 
  204261             :           These functions have been deprecated from use.
  204262             :        */
  204263             :       /* */
  204264             : 
  204265             :       /*! returns a C style string (char*) representing the class name */
  204266             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  204267             : 
  204268             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  204269             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  204270             : #if 0
  204271             :       /*! returns old style Sage II enum values */
  204272             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  204273             :       /*! returns old style Sage II enum values */
  204274             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  204275             : #endif
  204276             :       /* */
  204277             : 
  204278             : 
  204279             : 
  204280             : 
  204281             :      public:
  204282             :       /* name Traversal Support Functions
  204283             :           \brief Traversal support functions ... incomplete-documentation
  204284             : 
  204285             :           These functions have been made public as part of the design, but they are suggested for internal use 
  204286             :           or by particularly knowledgable users for specialized tools or applications.
  204287             :        */
  204288             :       /* */
  204289             : 
  204290             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  204291             :        // (inferior to ROSE traversal mechanism, experimental).
  204292             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  204293             :        */
  204294             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  204295             : 
  204296             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  204297             :       /*! \brief support for the classic visitor pattern done in GoF */
  204298             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  204299             : 
  204300             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  204301             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  204302             :        */
  204303             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  204304             : 
  204305             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  204306             :        */
  204307             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  204308             : 
  204309             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  204310             :        // This traversal helps support internal tools that call static member functions.
  204311             :        // note: this function operates on the memory pools.
  204312             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  204313             :        */
  204314             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  204315             :       /* */
  204316             : 
  204317             : 
  204318             :      public:
  204319             :       /* name Memory Allocation Functions
  204320             :           \brief Memory allocations functions ... incomplete-documentation
  204321             : 
  204322             :           These functions have been made public as part of the design, but they are suggested for internal use 
  204323             :           or by particularly knowledgable users for specialized tools or applications.
  204324             :        */
  204325             :       /* */
  204326             : 
  204327             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  204328             : 
  204329             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  204330             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  204331             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  204332             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  204333             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  204334             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  204335             :           being used with the AST File I/O mechanism.
  204336             :        */
  204337             :           virtual bool isInMemoryPool() override;
  204338             : 
  204339             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  204340             : 
  204341             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  204342             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  204343             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  204344             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  204345             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  204346             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  204347             :           being used with the AST File I/O mechanism.
  204348             :        */
  204349             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  204350             : 
  204351             :       // DQ (4/30/2006): Modified to be a const function.
  204352             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  204353             : 
  204354             :           This functions is part of general support for many possible tools to operate 
  204355             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  204356             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  204357             :           less than the set of pointers used by the AST file I/O. This is part of
  204358             :           work implemented by Andreas, and support tools such as the AST graph generation.
  204359             : 
  204360             :           \warning This function can return unexpected data members and thus the 
  204361             :                    order and the number of elements is unpredicable and subject 
  204362             :                    to change.
  204363             : 
  204364             :           \returns STL vector of pairs of SgNode* and strings
  204365             :        */
  204366             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  204367             : 
  204368             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  204369             : 
  204370             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  204371             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  204372             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  204373             : 
  204374             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  204375             :                    and subject to change.
  204376             :        */
  204377             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  204378             : 
  204379             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  204380             : 
  204381             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  204382             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  204383             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  204384             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  204385             : 
  204386             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  204387             : 
  204388             :           \returns long
  204389             :        */
  204390             :           virtual long getChildIndex( SgNode* childNode ) const override;
  204391             : 
  204392             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  204393             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  204394             :       /* \brief Constructor for use by AST File I/O Mechanism
  204395             : 
  204396             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  204397             :           which obtained via fast binary file I/O from disk.
  204398             :        */
  204399             :        // SgOmpTaskStatement( SgOmpTaskStatementStorageClass& source );
  204400             : 
  204401             : 
  204402             : 
  204403             : 
  204404             : 
  204405             :  // JH (10/24/2005): methods added to support the ast file IO
  204406             :     private:
  204407             : 
  204408             :       /* name AST Memory Allocation Support Functions
  204409             :           \brief Memory allocations support....
  204410             : 
  204411             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  204412             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  204413             :           and support the AST File I/O Mechanism.
  204414             :        */
  204415             :       /* */
  204416             : 
  204417             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  204418             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  204419             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  204420             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  204421             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  204422             :           a correspinding one in the AST_FILE_IO class!
  204423             :        */
  204424             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  204425             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  204426             :       /* \brief Typedef used for low level memory access.
  204427             :        */
  204428             :        // typedef unsigned char* TestType;
  204429             : 
  204430             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  204431             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  204432             :       /* \brief Typedef used to hold memory addresses as values.
  204433             :        */
  204434             :        // typedef unsigned long  AddressType;
  204435             : 
  204436             : 
  204437             : 
  204438             :        // necessary, to have direct access to the p_freepointer and the private methods !
  204439             :       /*! \brief friend class declaration to support AST File I/O */
  204440             :           friend class AST_FILE_IO;
  204441             : 
  204442             :       /*! \brief friend class declaration to support AST File I/O */
  204443             :           friend class SgOmpTaskStatementStorageClass;
  204444             : 
  204445             :       /*! \brief friend class declaration to support AST File I/O */
  204446             :           friend class AstSpecificDataManagingClass;
  204447             : 
  204448             :       /*! \brief friend class declaration to support AST File I/O */
  204449             :           friend class AstSpecificDataManagingClassStorageClass;
  204450             :     public:
  204451             :       /*! \brief IR node constructor to support AST File I/O */
  204452             :           SgOmpTaskStatement( const SgOmpTaskStatementStorageClass& source );
  204453             : 
  204454             :  // private: // JJW hack
  204455             :        /*
  204456             :           name AST Memory Allocation Support Variables
  204457             :           Memory allocations support variables 
  204458             : 
  204459             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  204460             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  204461             :           and support the AST File I/O Mechanism.
  204462             :        */
  204463             :       /* */
  204464             : 
  204465             :     public:
  204466             : 
  204467             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  204468             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  204469             :       // virtual SgNode* addRegExpAttribute();
  204470             :       /*! \brief Support for AST matching using regular expression.
  204471             : 
  204472             :           This support is incomplete and the subject of current research to define 
  204473             :           RegEx trees to support inexact matching.
  204474             :        */
  204475             :           SgOmpTaskStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  204476             : 
  204477             : // *** COMMON CODE SECTION ENDS HERE ***
  204478             : 
  204479             : 
  204480             : // End of memberFunctionString
  204481             : // Start of memberFunctionString
  204482             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  204483             : 
  204484             :      // the generated cast function
  204485             :      // friend ROSE_DLL_API SgOmpTaskStatement* isSgOmpTaskStatement ( SgNode* s );
  204486             : 
  204487             :           typedef SgUpirFieldBodyStatement base_node_type;
  204488             : 
  204489             : 
  204490             : // End of memberFunctionString
  204491             : // Start of memberFunctionString
  204492             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  204493             : 
  204494             :           void post_construction_initialization() override;
  204495             : 
  204496             : 
  204497             : // End of memberFunctionString
  204498             : 
  204499             : 
  204500             :      public: 
  204501             :          virtual ~SgOmpTaskStatement();
  204502             : 
  204503             : 
  204504             :      public: 
  204505             :          SgOmpTaskStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  204506             :          SgOmpTaskStatement(SgStatement* body); 
  204507             : 
  204508             :     protected:
  204509             : 
  204510             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskStatement>;
  204511             : 
  204512             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204513             : 
  204514             : 
  204515             :    };
  204516             : #endif
  204517             : 
  204518             : // postdeclarations for SgOmpTaskStatement
  204519             : 
  204520             : /* #line 204521 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204521             : 
  204522             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  204523             : 
  204524             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204525             : 
  204526             : 
  204527             : /* #line 204528 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204528             : 
  204529             : 
  204530             : 
  204531             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204532             : 
  204533             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  204534             : //      This code is automatically generated for each 
  204535             : //      terminal and non-terminal within the defined 
  204536             : //      grammar.  There is a simple way to change the 
  204537             : //      code to fix bugs etc.  See the ROSE README file
  204538             : //      for directions.
  204539             : 
  204540             : // tps: (02/22/2010): Adding DLL export requirements
  204541             : #include "rosedll.h"
  204542             : 
  204543             : // predeclarations for SgOmpDoStatement
  204544             : 
  204545             : /* #line 204546 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204546             : 
  204547             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  204548             : 
  204549             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204550             : 
  204551             : #if 1
  204552             : // Class Definition for SgOmpDoStatement
  204553             : class ROSE_DLL_API SgOmpDoStatement  : public SgUpirFieldBodyStatement
  204554             :    {
  204555             :      public:
  204556             : 
  204557             : 
  204558             : /* #line 204559 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204559             : 
  204560             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  204561             : // Start of memberFunctionString
  204562             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  204563             : 
  204564             : // *** COMMON CODE SECTION BEGINS HERE ***
  204565             : 
  204566             :     public:
  204567             : 
  204568             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  204569             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  204570             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  204571             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  204572             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  204573             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  204574             : 
  204575             :       /*! \brief returns a string representing the class name */
  204576             :           virtual std::string class_name() const override;
  204577             : 
  204578             :       /*! \brief returns new style SageIII enum values */
  204579             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  204580             : 
  204581             :       /*! \brief static variant value */
  204582             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  204583             :        // static const VariantT static_variant = V_SgOmpDoStatement;
  204584             :           enum { static_variant = V_SgOmpDoStatement };
  204585             : 
  204586             :        /* the generated cast function */
  204587             :       /*! \brief Casts pointer from base class to derived class */
  204588             :           ROSE_DLL_API friend       SgOmpDoStatement* isSgOmpDoStatement(       SgNode * s );
  204589             : 
  204590             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  204591             :           ROSE_DLL_API friend const SgOmpDoStatement* isSgOmpDoStatement( const SgNode * s );
  204592             : 
  204593             :      // ******************************************
  204594             :      // * Memory Pool / New / Delete
  204595             :      // ******************************************
  204596             : 
  204597             :      public:
  204598             :           /// \private
  204599             :           static const unsigned pool_size; //
  204600             :           /// \private
  204601             :           static std::vector<unsigned char *> pools; //
  204602             :           /// \private
  204603             :           static SgOmpDoStatement * next_node; // 
  204604             : 
  204605             :           /// \private
  204606             :           static unsigned long initializeStorageClassArray(SgOmpDoStatementStorageClass *); //
  204607             : 
  204608             :           /// \private
  204609             :           static void clearMemoryPool(); //
  204610             :           static void deleteMemoryPool(); //
  204611             : 
  204612             :           /// \private
  204613             :           static void extendMemoryPoolForFileIO(); //
  204614             : 
  204615             :           /// \private
  204616             :           static SgOmpDoStatement * getPointerFromGlobalIndex(unsigned long); //
  204617             :           /// \private
  204618             :           static SgOmpDoStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  204619             : 
  204620             :           /// \private
  204621             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  204622             :           /// \private
  204623             :           static void resetValidFreepointers(); //
  204624             :           /// \private
  204625             :           static unsigned long getNumberOfLastValidPointer(); //
  204626             : 
  204627             : 
  204628             : #if defined(INLINE_FUNCTIONS)
  204629             :       /*! \brief returns pointer to newly allocated IR node */
  204630             :           inline void *operator new (size_t size);
  204631             : #else
  204632             :       /*! \brief returns pointer to newly allocated IR node */
  204633             :           void *operator new (size_t size);
  204634             : #endif
  204635             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  204636             :           void operator delete (void* pointer, size_t size);
  204637             : 
  204638             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  204639           0 :           void operator delete (void* pointer)
  204640             :              {
  204641             :             // This is the generated delete operator...
  204642           0 :                SgOmpDoStatement::operator delete (pointer,sizeof(SgOmpDoStatement));
  204643             :              }
  204644             : 
  204645             :       /*! \brief Returns the total number of IR nodes of this type */
  204646             :           static size_t numberOfNodes();
  204647             : 
  204648             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  204649             :           static size_t memoryUsage();
  204650             : 
  204651             :       // End of scope which started in IR nodes specific code 
  204652             :       /* */
  204653             : 
  204654             :       /* name Internal Functions
  204655             :           \brief Internal functions ... incomplete-documentation
  204656             : 
  204657             :           These functions have been made public as part of the design, but they are suggested for internal use 
  204658             :           or by particularly knowledgeable users for specialized tools or applications.
  204659             : 
  204660             :           \internal We could not make these private because they are required by user for special purposes. And 
  204661             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  204662             :          
  204663             :        */
  204664             : 
  204665             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  204666             :        // overridden in every class by *generated* implementation
  204667             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  204668             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  204669             :        // MS: 06/28/02 container of names of variables or container indices 
  204670             :        // used used in the traversal to access AST successor nodes
  204671             :        // overridden in every class by *generated* implementation
  204672             :       /*! \brief container of names of variables or container indices used used in the traversal
  204673             :           to access AST successor nodes overridden in every class by *generated* implementation */
  204674             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  204675             : 
  204676             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  204677             :        // than all the vector copies. The implementation for these functions is generated for each class.
  204678             :       /*! \brief return number of children in the traversal successor list */
  204679             :           virtual size_t get_numberOfTraversalSuccessors() override;
  204680             :       /*! \brief index-based access to traversal successors by index number */
  204681             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  204682             :       /*! \brief index-based access to traversal successors by child node */
  204683             :           virtual size_t get_childIndex(SgNode *child) override;
  204684             : 
  204685             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  204686             :        // MS: 08/16/2002 method for generating RTI information
  204687             :       /*! \brief return C++ Runtime-Time-Information */
  204688             :           virtual RTIReturnType roseRTI() override;
  204689             : #endif
  204690             :       /* */
  204691             : 
  204692             : 
  204693             : 
  204694             :       /* name Deprecated Functions
  204695             :           \brief Deprecated functions ... incomplete-documentation
  204696             : 
  204697             :           These functions have been deprecated from use.
  204698             :        */
  204699             :       /* */
  204700             : 
  204701             :       /*! returns a C style string (char*) representing the class name */
  204702             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  204703             : 
  204704             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  204705             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  204706             : #if 0
  204707             :       /*! returns old style Sage II enum values */
  204708             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  204709             :       /*! returns old style Sage II enum values */
  204710             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  204711             : #endif
  204712             :       /* */
  204713             : 
  204714             : 
  204715             : 
  204716             : 
  204717             :      public:
  204718             :       /* name Traversal Support Functions
  204719             :           \brief Traversal support functions ... incomplete-documentation
  204720             : 
  204721             :           These functions have been made public as part of the design, but they are suggested for internal use 
  204722             :           or by particularly knowledgable users for specialized tools or applications.
  204723             :        */
  204724             :       /* */
  204725             : 
  204726             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  204727             :        // (inferior to ROSE traversal mechanism, experimental).
  204728             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  204729             :        */
  204730             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  204731             : 
  204732             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  204733             :       /*! \brief support for the classic visitor pattern done in GoF */
  204734             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  204735             : 
  204736             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  204737             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  204738             :        */
  204739             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  204740             : 
  204741             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  204742             :        */
  204743             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  204744             : 
  204745             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  204746             :        // This traversal helps support internal tools that call static member functions.
  204747             :        // note: this function operates on the memory pools.
  204748             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  204749             :        */
  204750             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  204751             :       /* */
  204752             : 
  204753             : 
  204754             :      public:
  204755             :       /* name Memory Allocation Functions
  204756             :           \brief Memory allocations functions ... incomplete-documentation
  204757             : 
  204758             :           These functions have been made public as part of the design, but they are suggested for internal use 
  204759             :           or by particularly knowledgable users for specialized tools or applications.
  204760             :        */
  204761             :       /* */
  204762             : 
  204763             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  204764             : 
  204765             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  204766             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  204767             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  204768             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  204769             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  204770             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  204771             :           being used with the AST File I/O mechanism.
  204772             :        */
  204773             :           virtual bool isInMemoryPool() override;
  204774             : 
  204775             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  204776             : 
  204777             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  204778             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  204779             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  204780             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  204781             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  204782             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  204783             :           being used with the AST File I/O mechanism.
  204784             :        */
  204785             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  204786             : 
  204787             :       // DQ (4/30/2006): Modified to be a const function.
  204788             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  204789             : 
  204790             :           This functions is part of general support for many possible tools to operate 
  204791             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  204792             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  204793             :           less than the set of pointers used by the AST file I/O. This is part of
  204794             :           work implemented by Andreas, and support tools such as the AST graph generation.
  204795             : 
  204796             :           \warning This function can return unexpected data members and thus the 
  204797             :                    order and the number of elements is unpredicable and subject 
  204798             :                    to change.
  204799             : 
  204800             :           \returns STL vector of pairs of SgNode* and strings
  204801             :        */
  204802             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  204803             : 
  204804             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  204805             : 
  204806             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  204807             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  204808             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  204809             : 
  204810             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  204811             :                    and subject to change.
  204812             :        */
  204813             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  204814             : 
  204815             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  204816             : 
  204817             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  204818             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  204819             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  204820             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  204821             : 
  204822             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  204823             : 
  204824             :           \returns long
  204825             :        */
  204826             :           virtual long getChildIndex( SgNode* childNode ) const override;
  204827             : 
  204828             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  204829             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  204830             :       /* \brief Constructor for use by AST File I/O Mechanism
  204831             : 
  204832             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  204833             :           which obtained via fast binary file I/O from disk.
  204834             :        */
  204835             :        // SgOmpDoStatement( SgOmpDoStatementStorageClass& source );
  204836             : 
  204837             : 
  204838             : 
  204839             : 
  204840             : 
  204841             :  // JH (10/24/2005): methods added to support the ast file IO
  204842             :     private:
  204843             : 
  204844             :       /* name AST Memory Allocation Support Functions
  204845             :           \brief Memory allocations support....
  204846             : 
  204847             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  204848             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  204849             :           and support the AST File I/O Mechanism.
  204850             :        */
  204851             :       /* */
  204852             : 
  204853             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  204854             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  204855             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  204856             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  204857             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  204858             :           a correspinding one in the AST_FILE_IO class!
  204859             :        */
  204860             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  204861             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  204862             :       /* \brief Typedef used for low level memory access.
  204863             :        */
  204864             :        // typedef unsigned char* TestType;
  204865             : 
  204866             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  204867             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  204868             :       /* \brief Typedef used to hold memory addresses as values.
  204869             :        */
  204870             :        // typedef unsigned long  AddressType;
  204871             : 
  204872             : 
  204873             : 
  204874             :        // necessary, to have direct access to the p_freepointer and the private methods !
  204875             :       /*! \brief friend class declaration to support AST File I/O */
  204876             :           friend class AST_FILE_IO;
  204877             : 
  204878             :       /*! \brief friend class declaration to support AST File I/O */
  204879             :           friend class SgOmpDoStatementStorageClass;
  204880             : 
  204881             :       /*! \brief friend class declaration to support AST File I/O */
  204882             :           friend class AstSpecificDataManagingClass;
  204883             : 
  204884             :       /*! \brief friend class declaration to support AST File I/O */
  204885             :           friend class AstSpecificDataManagingClassStorageClass;
  204886             :     public:
  204887             :       /*! \brief IR node constructor to support AST File I/O */
  204888             :           SgOmpDoStatement( const SgOmpDoStatementStorageClass& source );
  204889             : 
  204890             :  // private: // JJW hack
  204891             :        /*
  204892             :           name AST Memory Allocation Support Variables
  204893             :           Memory allocations support variables 
  204894             : 
  204895             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  204896             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  204897             :           and support the AST File I/O Mechanism.
  204898             :        */
  204899             :       /* */
  204900             : 
  204901             :     public:
  204902             : 
  204903             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  204904             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  204905             :       // virtual SgNode* addRegExpAttribute();
  204906             :       /*! \brief Support for AST matching using regular expression.
  204907             : 
  204908             :           This support is incomplete and the subject of current research to define 
  204909             :           RegEx trees to support inexact matching.
  204910             :        */
  204911             :           SgOmpDoStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  204912             : 
  204913             : // *** COMMON CODE SECTION ENDS HERE ***
  204914             : 
  204915             : 
  204916             : // End of memberFunctionString
  204917             : // Start of memberFunctionString
  204918             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  204919             : 
  204920             :      // the generated cast function
  204921             :      // friend ROSE_DLL_API SgOmpDoStatement* isSgOmpDoStatement ( SgNode* s );
  204922             : 
  204923             :           typedef SgUpirFieldBodyStatement base_node_type;
  204924             : 
  204925             : 
  204926             : // End of memberFunctionString
  204927             : // Start of memberFunctionString
  204928             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  204929             : 
  204930             :           void post_construction_initialization() override;
  204931             : 
  204932             : 
  204933             : // End of memberFunctionString
  204934             : 
  204935             : 
  204936             :      public: 
  204937             :          virtual ~SgOmpDoStatement();
  204938             : 
  204939             : 
  204940             :      public: 
  204941             :          SgOmpDoStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  204942             :          SgOmpDoStatement(SgStatement* body); 
  204943             : 
  204944             :     protected:
  204945             : 
  204946             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDoStatement>;
  204947             : 
  204948             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204949             : 
  204950             : 
  204951             :    };
  204952             : #endif
  204953             : 
  204954             : // postdeclarations for SgOmpDoStatement
  204955             : 
  204956             : /* #line 204957 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204957             : 
  204958             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  204959             : 
  204960             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204961             : 
  204962             : 
  204963             : /* #line 204964 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204964             : 
  204965             : 
  204966             : 
  204967             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204968             : 
  204969             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  204970             : //      This code is automatically generated for each 
  204971             : //      terminal and non-terminal within the defined 
  204972             : //      grammar.  There is a simple way to change the 
  204973             : //      code to fix bugs etc.  See the ROSE README file
  204974             : //      for directions.
  204975             : 
  204976             : // tps: (02/22/2010): Adding DLL export requirements
  204977             : #include "rosedll.h"
  204978             : 
  204979             : // predeclarations for SgOmpSectionsStatement
  204980             : 
  204981             : /* #line 204982 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204982             : 
  204983             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  204984             : 
  204985             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  204986             : 
  204987             : #if 1
  204988             : // Class Definition for SgOmpSectionsStatement
  204989             : class ROSE_DLL_API SgOmpSectionsStatement  : public SgUpirFieldBodyStatement
  204990             :    {
  204991             :      public:
  204992             : 
  204993             : 
  204994             : /* #line 204995 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  204995             : 
  204996             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  204997             : // Start of memberFunctionString
  204998             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  204999             : 
  205000             : // *** COMMON CODE SECTION BEGINS HERE ***
  205001             : 
  205002             :     public:
  205003             : 
  205004             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  205005             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  205006             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  205007             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  205008             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  205009             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  205010             : 
  205011             :       /*! \brief returns a string representing the class name */
  205012             :           virtual std::string class_name() const override;
  205013             : 
  205014             :       /*! \brief returns new style SageIII enum values */
  205015             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  205016             : 
  205017             :       /*! \brief static variant value */
  205018             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  205019             :        // static const VariantT static_variant = V_SgOmpSectionsStatement;
  205020             :           enum { static_variant = V_SgOmpSectionsStatement };
  205021             : 
  205022             :        /* the generated cast function */
  205023             :       /*! \brief Casts pointer from base class to derived class */
  205024             :           ROSE_DLL_API friend       SgOmpSectionsStatement* isSgOmpSectionsStatement(       SgNode * s );
  205025             : 
  205026             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  205027             :           ROSE_DLL_API friend const SgOmpSectionsStatement* isSgOmpSectionsStatement( const SgNode * s );
  205028             : 
  205029             :      // ******************************************
  205030             :      // * Memory Pool / New / Delete
  205031             :      // ******************************************
  205032             : 
  205033             :      public:
  205034             :           /// \private
  205035             :           static const unsigned pool_size; //
  205036             :           /// \private
  205037             :           static std::vector<unsigned char *> pools; //
  205038             :           /// \private
  205039             :           static SgOmpSectionsStatement * next_node; // 
  205040             : 
  205041             :           /// \private
  205042             :           static unsigned long initializeStorageClassArray(SgOmpSectionsStatementStorageClass *); //
  205043             : 
  205044             :           /// \private
  205045             :           static void clearMemoryPool(); //
  205046             :           static void deleteMemoryPool(); //
  205047             : 
  205048             :           /// \private
  205049             :           static void extendMemoryPoolForFileIO(); //
  205050             : 
  205051             :           /// \private
  205052             :           static SgOmpSectionsStatement * getPointerFromGlobalIndex(unsigned long); //
  205053             :           /// \private
  205054             :           static SgOmpSectionsStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  205055             : 
  205056             :           /// \private
  205057             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  205058             :           /// \private
  205059             :           static void resetValidFreepointers(); //
  205060             :           /// \private
  205061             :           static unsigned long getNumberOfLastValidPointer(); //
  205062             : 
  205063             : 
  205064             : #if defined(INLINE_FUNCTIONS)
  205065             :       /*! \brief returns pointer to newly allocated IR node */
  205066             :           inline void *operator new (size_t size);
  205067             : #else
  205068             :       /*! \brief returns pointer to newly allocated IR node */
  205069             :           void *operator new (size_t size);
  205070             : #endif
  205071             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  205072             :           void operator delete (void* pointer, size_t size);
  205073             : 
  205074             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  205075           0 :           void operator delete (void* pointer)
  205076             :              {
  205077             :             // This is the generated delete operator...
  205078           0 :                SgOmpSectionsStatement::operator delete (pointer,sizeof(SgOmpSectionsStatement));
  205079             :              }
  205080             : 
  205081             :       /*! \brief Returns the total number of IR nodes of this type */
  205082             :           static size_t numberOfNodes();
  205083             : 
  205084             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  205085             :           static size_t memoryUsage();
  205086             : 
  205087             :       // End of scope which started in IR nodes specific code 
  205088             :       /* */
  205089             : 
  205090             :       /* name Internal Functions
  205091             :           \brief Internal functions ... incomplete-documentation
  205092             : 
  205093             :           These functions have been made public as part of the design, but they are suggested for internal use 
  205094             :           or by particularly knowledgeable users for specialized tools or applications.
  205095             : 
  205096             :           \internal We could not make these private because they are required by user for special purposes. And 
  205097             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  205098             :          
  205099             :        */
  205100             : 
  205101             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  205102             :        // overridden in every class by *generated* implementation
  205103             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  205104             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  205105             :        // MS: 06/28/02 container of names of variables or container indices 
  205106             :        // used used in the traversal to access AST successor nodes
  205107             :        // overridden in every class by *generated* implementation
  205108             :       /*! \brief container of names of variables or container indices used used in the traversal
  205109             :           to access AST successor nodes overridden in every class by *generated* implementation */
  205110             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  205111             : 
  205112             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  205113             :        // than all the vector copies. The implementation for these functions is generated for each class.
  205114             :       /*! \brief return number of children in the traversal successor list */
  205115             :           virtual size_t get_numberOfTraversalSuccessors() override;
  205116             :       /*! \brief index-based access to traversal successors by index number */
  205117             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  205118             :       /*! \brief index-based access to traversal successors by child node */
  205119             :           virtual size_t get_childIndex(SgNode *child) override;
  205120             : 
  205121             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  205122             :        // MS: 08/16/2002 method for generating RTI information
  205123             :       /*! \brief return C++ Runtime-Time-Information */
  205124             :           virtual RTIReturnType roseRTI() override;
  205125             : #endif
  205126             :       /* */
  205127             : 
  205128             : 
  205129             : 
  205130             :       /* name Deprecated Functions
  205131             :           \brief Deprecated functions ... incomplete-documentation
  205132             : 
  205133             :           These functions have been deprecated from use.
  205134             :        */
  205135             :       /* */
  205136             : 
  205137             :       /*! returns a C style string (char*) representing the class name */
  205138             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  205139             : 
  205140             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  205141             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  205142             : #if 0
  205143             :       /*! returns old style Sage II enum values */
  205144             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  205145             :       /*! returns old style Sage II enum values */
  205146             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  205147             : #endif
  205148             :       /* */
  205149             : 
  205150             : 
  205151             : 
  205152             : 
  205153             :      public:
  205154             :       /* name Traversal Support Functions
  205155             :           \brief Traversal support functions ... incomplete-documentation
  205156             : 
  205157             :           These functions have been made public as part of the design, but they are suggested for internal use 
  205158             :           or by particularly knowledgable users for specialized tools or applications.
  205159             :        */
  205160             :       /* */
  205161             : 
  205162             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  205163             :        // (inferior to ROSE traversal mechanism, experimental).
  205164             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  205165             :        */
  205166             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  205167             : 
  205168             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  205169             :       /*! \brief support for the classic visitor pattern done in GoF */
  205170             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  205171             : 
  205172             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  205173             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  205174             :        */
  205175             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  205176             : 
  205177             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  205178             :        */
  205179             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  205180             : 
  205181             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  205182             :        // This traversal helps support internal tools that call static member functions.
  205183             :        // note: this function operates on the memory pools.
  205184             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  205185             :        */
  205186             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  205187             :       /* */
  205188             : 
  205189             : 
  205190             :      public:
  205191             :       /* name Memory Allocation Functions
  205192             :           \brief Memory allocations functions ... incomplete-documentation
  205193             : 
  205194             :           These functions have been made public as part of the design, but they are suggested for internal use 
  205195             :           or by particularly knowledgable users for specialized tools or applications.
  205196             :        */
  205197             :       /* */
  205198             : 
  205199             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  205200             : 
  205201             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  205202             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  205203             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  205204             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  205205             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  205206             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  205207             :           being used with the AST File I/O mechanism.
  205208             :        */
  205209             :           virtual bool isInMemoryPool() override;
  205210             : 
  205211             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  205212             : 
  205213             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  205214             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  205215             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  205216             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  205217             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  205218             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  205219             :           being used with the AST File I/O mechanism.
  205220             :        */
  205221             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  205222             : 
  205223             :       // DQ (4/30/2006): Modified to be a const function.
  205224             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  205225             : 
  205226             :           This functions is part of general support for many possible tools to operate 
  205227             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  205228             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  205229             :           less than the set of pointers used by the AST file I/O. This is part of
  205230             :           work implemented by Andreas, and support tools such as the AST graph generation.
  205231             : 
  205232             :           \warning This function can return unexpected data members and thus the 
  205233             :                    order and the number of elements is unpredicable and subject 
  205234             :                    to change.
  205235             : 
  205236             :           \returns STL vector of pairs of SgNode* and strings
  205237             :        */
  205238             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  205239             : 
  205240             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  205241             : 
  205242             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  205243             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  205244             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  205245             : 
  205246             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  205247             :                    and subject to change.
  205248             :        */
  205249             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  205250             : 
  205251             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  205252             : 
  205253             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  205254             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  205255             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  205256             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  205257             : 
  205258             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  205259             : 
  205260             :           \returns long
  205261             :        */
  205262             :           virtual long getChildIndex( SgNode* childNode ) const override;
  205263             : 
  205264             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  205265             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  205266             :       /* \brief Constructor for use by AST File I/O Mechanism
  205267             : 
  205268             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  205269             :           which obtained via fast binary file I/O from disk.
  205270             :        */
  205271             :        // SgOmpSectionsStatement( SgOmpSectionsStatementStorageClass& source );
  205272             : 
  205273             : 
  205274             : 
  205275             : 
  205276             : 
  205277             :  // JH (10/24/2005): methods added to support the ast file IO
  205278             :     private:
  205279             : 
  205280             :       /* name AST Memory Allocation Support Functions
  205281             :           \brief Memory allocations support....
  205282             : 
  205283             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  205284             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  205285             :           and support the AST File I/O Mechanism.
  205286             :        */
  205287             :       /* */
  205288             : 
  205289             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  205290             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  205291             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  205292             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  205293             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  205294             :           a correspinding one in the AST_FILE_IO class!
  205295             :        */
  205296             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  205297             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  205298             :       /* \brief Typedef used for low level memory access.
  205299             :        */
  205300             :        // typedef unsigned char* TestType;
  205301             : 
  205302             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  205303             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  205304             :       /* \brief Typedef used to hold memory addresses as values.
  205305             :        */
  205306             :        // typedef unsigned long  AddressType;
  205307             : 
  205308             : 
  205309             : 
  205310             :        // necessary, to have direct access to the p_freepointer and the private methods !
  205311             :       /*! \brief friend class declaration to support AST File I/O */
  205312             :           friend class AST_FILE_IO;
  205313             : 
  205314             :       /*! \brief friend class declaration to support AST File I/O */
  205315             :           friend class SgOmpSectionsStatementStorageClass;
  205316             : 
  205317             :       /*! \brief friend class declaration to support AST File I/O */
  205318             :           friend class AstSpecificDataManagingClass;
  205319             : 
  205320             :       /*! \brief friend class declaration to support AST File I/O */
  205321             :           friend class AstSpecificDataManagingClassStorageClass;
  205322             :     public:
  205323             :       /*! \brief IR node constructor to support AST File I/O */
  205324             :           SgOmpSectionsStatement( const SgOmpSectionsStatementStorageClass& source );
  205325             : 
  205326             :  // private: // JJW hack
  205327             :        /*
  205328             :           name AST Memory Allocation Support Variables
  205329             :           Memory allocations support variables 
  205330             : 
  205331             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  205332             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  205333             :           and support the AST File I/O Mechanism.
  205334             :        */
  205335             :       /* */
  205336             : 
  205337             :     public:
  205338             : 
  205339             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  205340             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  205341             :       // virtual SgNode* addRegExpAttribute();
  205342             :       /*! \brief Support for AST matching using regular expression.
  205343             : 
  205344             :           This support is incomplete and the subject of current research to define 
  205345             :           RegEx trees to support inexact matching.
  205346             :        */
  205347             :           SgOmpSectionsStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  205348             : 
  205349             : // *** COMMON CODE SECTION ENDS HERE ***
  205350             : 
  205351             : 
  205352             : // End of memberFunctionString
  205353             : // Start of memberFunctionString
  205354             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  205355             : 
  205356             :      // the generated cast function
  205357             :      // friend ROSE_DLL_API SgOmpSectionsStatement* isSgOmpSectionsStatement ( SgNode* s );
  205358             : 
  205359             :           typedef SgUpirFieldBodyStatement base_node_type;
  205360             : 
  205361             : 
  205362             : // End of memberFunctionString
  205363             : // Start of memberFunctionString
  205364             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  205365             : 
  205366             :           void post_construction_initialization() override;
  205367             : 
  205368             : 
  205369             : // End of memberFunctionString
  205370             : 
  205371             : 
  205372             :      public: 
  205373             :          virtual ~SgOmpSectionsStatement();
  205374             : 
  205375             : 
  205376             :      public: 
  205377             :          SgOmpSectionsStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  205378             :          SgOmpSectionsStatement(SgStatement* body); 
  205379             : 
  205380             :     protected:
  205381             : 
  205382             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpSectionsStatement>;
  205383             : 
  205384             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205385             : 
  205386             : 
  205387             :    };
  205388             : #endif
  205389             : 
  205390             : // postdeclarations for SgOmpSectionsStatement
  205391             : 
  205392             : /* #line 205393 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205393             : 
  205394             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  205395             : 
  205396             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205397             : 
  205398             : 
  205399             : /* #line 205400 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205400             : 
  205401             : 
  205402             : 
  205403             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205404             : 
  205405             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  205406             : //      This code is automatically generated for each 
  205407             : //      terminal and non-terminal within the defined 
  205408             : //      grammar.  There is a simple way to change the 
  205409             : //      code to fix bugs etc.  See the ROSE README file
  205410             : //      for directions.
  205411             : 
  205412             : // tps: (02/22/2010): Adding DLL export requirements
  205413             : #include "rosedll.h"
  205414             : 
  205415             : // predeclarations for SgUpirTaskStatement
  205416             : 
  205417             : /* #line 205418 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205418             : 
  205419             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  205420             : 
  205421             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205422             : 
  205423             : #if 1
  205424             : // Class Definition for SgUpirTaskStatement
  205425             : class ROSE_DLL_API SgUpirTaskStatement  : public SgUpirFieldBodyStatement
  205426             :    {
  205427             :      public:
  205428             : 
  205429             : 
  205430             : /* #line 205431 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205431             : 
  205432             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  205433             : // Start of memberFunctionString
  205434             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  205435             : 
  205436             : // *** COMMON CODE SECTION BEGINS HERE ***
  205437             : 
  205438             :     public:
  205439             : 
  205440             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  205441             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  205442             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  205443             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  205444             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  205445             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  205446             : 
  205447             :       /*! \brief returns a string representing the class name */
  205448             :           virtual std::string class_name() const override;
  205449             : 
  205450             :       /*! \brief returns new style SageIII enum values */
  205451             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  205452             : 
  205453             :       /*! \brief static variant value */
  205454             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  205455             :        // static const VariantT static_variant = V_SgUpirTaskStatement;
  205456             :           enum { static_variant = V_SgUpirTaskStatement };
  205457             : 
  205458             :        /* the generated cast function */
  205459             :       /*! \brief Casts pointer from base class to derived class */
  205460             :           ROSE_DLL_API friend       SgUpirTaskStatement* isSgUpirTaskStatement(       SgNode * s );
  205461             : 
  205462             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  205463             :           ROSE_DLL_API friend const SgUpirTaskStatement* isSgUpirTaskStatement( const SgNode * s );
  205464             : 
  205465             :      // ******************************************
  205466             :      // * Memory Pool / New / Delete
  205467             :      // ******************************************
  205468             : 
  205469             :      public:
  205470             :           /// \private
  205471             :           static const unsigned pool_size; //
  205472             :           /// \private
  205473             :           static std::vector<unsigned char *> pools; //
  205474             :           /// \private
  205475             :           static SgUpirTaskStatement * next_node; // 
  205476             : 
  205477             :           /// \private
  205478             :           static unsigned long initializeStorageClassArray(SgUpirTaskStatementStorageClass *); //
  205479             : 
  205480             :           /// \private
  205481             :           static void clearMemoryPool(); //
  205482             :           static void deleteMemoryPool(); //
  205483             : 
  205484             :           /// \private
  205485             :           static void extendMemoryPoolForFileIO(); //
  205486             : 
  205487             :           /// \private
  205488             :           static SgUpirTaskStatement * getPointerFromGlobalIndex(unsigned long); //
  205489             :           /// \private
  205490             :           static SgUpirTaskStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  205491             : 
  205492             :           /// \private
  205493             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  205494             :           /// \private
  205495             :           static void resetValidFreepointers(); //
  205496             :           /// \private
  205497             :           static unsigned long getNumberOfLastValidPointer(); //
  205498             : 
  205499             : 
  205500             : #if defined(INLINE_FUNCTIONS)
  205501             :       /*! \brief returns pointer to newly allocated IR node */
  205502             :           inline void *operator new (size_t size);
  205503             : #else
  205504             :       /*! \brief returns pointer to newly allocated IR node */
  205505             :           void *operator new (size_t size);
  205506             : #endif
  205507             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  205508             :           void operator delete (void* pointer, size_t size);
  205509             : 
  205510             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  205511           0 :           void operator delete (void* pointer)
  205512             :              {
  205513             :             // This is the generated delete operator...
  205514           0 :                SgUpirTaskStatement::operator delete (pointer,sizeof(SgUpirTaskStatement));
  205515             :              }
  205516             : 
  205517             :       /*! \brief Returns the total number of IR nodes of this type */
  205518             :           static size_t numberOfNodes();
  205519             : 
  205520             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  205521             :           static size_t memoryUsage();
  205522             : 
  205523             :       // End of scope which started in IR nodes specific code 
  205524             :       /* */
  205525             : 
  205526             :       /* name Internal Functions
  205527             :           \brief Internal functions ... incomplete-documentation
  205528             : 
  205529             :           These functions have been made public as part of the design, but they are suggested for internal use 
  205530             :           or by particularly knowledgeable users for specialized tools or applications.
  205531             : 
  205532             :           \internal We could not make these private because they are required by user for special purposes. And 
  205533             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  205534             :          
  205535             :        */
  205536             : 
  205537             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  205538             :        // overridden in every class by *generated* implementation
  205539             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  205540             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  205541             :        // MS: 06/28/02 container of names of variables or container indices 
  205542             :        // used used in the traversal to access AST successor nodes
  205543             :        // overridden in every class by *generated* implementation
  205544             :       /*! \brief container of names of variables or container indices used used in the traversal
  205545             :           to access AST successor nodes overridden in every class by *generated* implementation */
  205546             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  205547             : 
  205548             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  205549             :        // than all the vector copies. The implementation for these functions is generated for each class.
  205550             :       /*! \brief return number of children in the traversal successor list */
  205551             :           virtual size_t get_numberOfTraversalSuccessors() override;
  205552             :       /*! \brief index-based access to traversal successors by index number */
  205553             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  205554             :       /*! \brief index-based access to traversal successors by child node */
  205555             :           virtual size_t get_childIndex(SgNode *child) override;
  205556             : 
  205557             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  205558             :        // MS: 08/16/2002 method for generating RTI information
  205559             :       /*! \brief return C++ Runtime-Time-Information */
  205560             :           virtual RTIReturnType roseRTI() override;
  205561             : #endif
  205562             :       /* */
  205563             : 
  205564             : 
  205565             : 
  205566             :       /* name Deprecated Functions
  205567             :           \brief Deprecated functions ... incomplete-documentation
  205568             : 
  205569             :           These functions have been deprecated from use.
  205570             :        */
  205571             :       /* */
  205572             : 
  205573             :       /*! returns a C style string (char*) representing the class name */
  205574             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  205575             : 
  205576             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  205577             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  205578             : #if 0
  205579             :       /*! returns old style Sage II enum values */
  205580             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  205581             :       /*! returns old style Sage II enum values */
  205582             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  205583             : #endif
  205584             :       /* */
  205585             : 
  205586             : 
  205587             : 
  205588             : 
  205589             :      public:
  205590             :       /* name Traversal Support Functions
  205591             :           \brief Traversal support functions ... incomplete-documentation
  205592             : 
  205593             :           These functions have been made public as part of the design, but they are suggested for internal use 
  205594             :           or by particularly knowledgable users for specialized tools or applications.
  205595             :        */
  205596             :       /* */
  205597             : 
  205598             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  205599             :        // (inferior to ROSE traversal mechanism, experimental).
  205600             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  205601             :        */
  205602             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  205603             : 
  205604             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  205605             :       /*! \brief support for the classic visitor pattern done in GoF */
  205606             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  205607             : 
  205608             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  205609             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  205610             :        */
  205611             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  205612             : 
  205613             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  205614             :        */
  205615             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  205616             : 
  205617             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  205618             :        // This traversal helps support internal tools that call static member functions.
  205619             :        // note: this function operates on the memory pools.
  205620             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  205621             :        */
  205622             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  205623             :       /* */
  205624             : 
  205625             : 
  205626             :      public:
  205627             :       /* name Memory Allocation Functions
  205628             :           \brief Memory allocations functions ... incomplete-documentation
  205629             : 
  205630             :           These functions have been made public as part of the design, but they are suggested for internal use 
  205631             :           or by particularly knowledgable users for specialized tools or applications.
  205632             :        */
  205633             :       /* */
  205634             : 
  205635             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  205636             : 
  205637             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  205638             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  205639             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  205640             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  205641             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  205642             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  205643             :           being used with the AST File I/O mechanism.
  205644             :        */
  205645             :           virtual bool isInMemoryPool() override;
  205646             : 
  205647             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  205648             : 
  205649             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  205650             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  205651             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  205652             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  205653             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  205654             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  205655             :           being used with the AST File I/O mechanism.
  205656             :        */
  205657             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  205658             : 
  205659             :       // DQ (4/30/2006): Modified to be a const function.
  205660             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  205661             : 
  205662             :           This functions is part of general support for many possible tools to operate 
  205663             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  205664             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  205665             :           less than the set of pointers used by the AST file I/O. This is part of
  205666             :           work implemented by Andreas, and support tools such as the AST graph generation.
  205667             : 
  205668             :           \warning This function can return unexpected data members and thus the 
  205669             :                    order and the number of elements is unpredicable and subject 
  205670             :                    to change.
  205671             : 
  205672             :           \returns STL vector of pairs of SgNode* and strings
  205673             :        */
  205674             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  205675             : 
  205676             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  205677             : 
  205678             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  205679             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  205680             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  205681             : 
  205682             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  205683             :                    and subject to change.
  205684             :        */
  205685             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  205686             : 
  205687             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  205688             : 
  205689             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  205690             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  205691             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  205692             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  205693             : 
  205694             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  205695             : 
  205696             :           \returns long
  205697             :        */
  205698             :           virtual long getChildIndex( SgNode* childNode ) const override;
  205699             : 
  205700             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  205701             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  205702             :       /* \brief Constructor for use by AST File I/O Mechanism
  205703             : 
  205704             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  205705             :           which obtained via fast binary file I/O from disk.
  205706             :        */
  205707             :        // SgUpirTaskStatement( SgUpirTaskStatementStorageClass& source );
  205708             : 
  205709             : 
  205710             : 
  205711             : 
  205712             : 
  205713             :  // JH (10/24/2005): methods added to support the ast file IO
  205714             :     private:
  205715             : 
  205716             :       /* name AST Memory Allocation Support Functions
  205717             :           \brief Memory allocations support....
  205718             : 
  205719             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  205720             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  205721             :           and support the AST File I/O Mechanism.
  205722             :        */
  205723             :       /* */
  205724             : 
  205725             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  205726             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  205727             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  205728             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  205729             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  205730             :           a correspinding one in the AST_FILE_IO class!
  205731             :        */
  205732             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  205733             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  205734             :       /* \brief Typedef used for low level memory access.
  205735             :        */
  205736             :        // typedef unsigned char* TestType;
  205737             : 
  205738             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  205739             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  205740             :       /* \brief Typedef used to hold memory addresses as values.
  205741             :        */
  205742             :        // typedef unsigned long  AddressType;
  205743             : 
  205744             : 
  205745             : 
  205746             :        // necessary, to have direct access to the p_freepointer and the private methods !
  205747             :       /*! \brief friend class declaration to support AST File I/O */
  205748             :           friend class AST_FILE_IO;
  205749             : 
  205750             :       /*! \brief friend class declaration to support AST File I/O */
  205751             :           friend class SgUpirTaskStatementStorageClass;
  205752             : 
  205753             :       /*! \brief friend class declaration to support AST File I/O */
  205754             :           friend class AstSpecificDataManagingClass;
  205755             : 
  205756             :       /*! \brief friend class declaration to support AST File I/O */
  205757             :           friend class AstSpecificDataManagingClassStorageClass;
  205758             :     public:
  205759             :       /*! \brief IR node constructor to support AST File I/O */
  205760             :           SgUpirTaskStatement( const SgUpirTaskStatementStorageClass& source );
  205761             : 
  205762             :  // private: // JJW hack
  205763             :        /*
  205764             :           name AST Memory Allocation Support Variables
  205765             :           Memory allocations support variables 
  205766             : 
  205767             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  205768             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  205769             :           and support the AST File I/O Mechanism.
  205770             :        */
  205771             :       /* */
  205772             : 
  205773             :     public:
  205774             : 
  205775             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  205776             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  205777             :       // virtual SgNode* addRegExpAttribute();
  205778             :       /*! \brief Support for AST matching using regular expression.
  205779             : 
  205780             :           This support is incomplete and the subject of current research to define 
  205781             :           RegEx trees to support inexact matching.
  205782             :        */
  205783             :           SgUpirTaskStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  205784             : 
  205785             : // *** COMMON CODE SECTION ENDS HERE ***
  205786             : 
  205787             : 
  205788             : // End of memberFunctionString
  205789             : // Start of memberFunctionString
  205790             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  205791             : 
  205792             :      // the generated cast function
  205793             :      // friend ROSE_DLL_API SgUpirTaskStatement* isSgUpirTaskStatement ( SgNode* s );
  205794             : 
  205795             :           typedef SgUpirFieldBodyStatement base_node_type;
  205796             : 
  205797             : 
  205798             : // End of memberFunctionString
  205799             : // Start of memberFunctionString
  205800             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  205801             : 
  205802             :           void post_construction_initialization() override;
  205803             : 
  205804             : 
  205805             : // End of memberFunctionString
  205806             : 
  205807             : 
  205808             :      public: 
  205809             :          virtual ~SgUpirTaskStatement();
  205810             : 
  205811             : 
  205812             :      public: 
  205813             :          SgUpirTaskStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  205814             :          SgUpirTaskStatement(SgStatement* body); 
  205815             : 
  205816             :     protected:
  205817             : 
  205818             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirTaskStatement>;
  205819             : 
  205820             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205821             : 
  205822             : 
  205823             :    };
  205824             : #endif
  205825             : 
  205826             : // postdeclarations for SgUpirTaskStatement
  205827             : 
  205828             : /* #line 205829 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205829             : 
  205830             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  205831             : 
  205832             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205833             : 
  205834             : 
  205835             : /* #line 205836 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205836             : 
  205837             : 
  205838             : 
  205839             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205840             : 
  205841             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  205842             : //      This code is automatically generated for each 
  205843             : //      terminal and non-terminal within the defined 
  205844             : //      grammar.  There is a simple way to change the 
  205845             : //      code to fix bugs etc.  See the ROSE README file
  205846             : //      for directions.
  205847             : 
  205848             : // tps: (02/22/2010): Adding DLL export requirements
  205849             : #include "rosedll.h"
  205850             : 
  205851             : // predeclarations for SgOmpTargetDataStatement
  205852             : 
  205853             : /* #line 205854 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205854             : 
  205855             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  205856             : 
  205857             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  205858             : 
  205859             : #if 1
  205860             : // Class Definition for SgOmpTargetDataStatement
  205861             : class ROSE_DLL_API SgOmpTargetDataStatement  : public SgUpirFieldBodyStatement
  205862             :    {
  205863             :      public:
  205864             : 
  205865             : 
  205866             : /* #line 205867 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  205867             : 
  205868             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  205869             : // Start of memberFunctionString
  205870             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  205871             : 
  205872             : // *** COMMON CODE SECTION BEGINS HERE ***
  205873             : 
  205874             :     public:
  205875             : 
  205876             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  205877             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  205878             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  205879             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  205880             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  205881             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  205882             : 
  205883             :       /*! \brief returns a string representing the class name */
  205884             :           virtual std::string class_name() const override;
  205885             : 
  205886             :       /*! \brief returns new style SageIII enum values */
  205887             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  205888             : 
  205889             :       /*! \brief static variant value */
  205890             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  205891             :        // static const VariantT static_variant = V_SgOmpTargetDataStatement;
  205892             :           enum { static_variant = V_SgOmpTargetDataStatement };
  205893             : 
  205894             :        /* the generated cast function */
  205895             :       /*! \brief Casts pointer from base class to derived class */
  205896             :           ROSE_DLL_API friend       SgOmpTargetDataStatement* isSgOmpTargetDataStatement(       SgNode * s );
  205897             : 
  205898             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  205899             :           ROSE_DLL_API friend const SgOmpTargetDataStatement* isSgOmpTargetDataStatement( const SgNode * s );
  205900             : 
  205901             :      // ******************************************
  205902             :      // * Memory Pool / New / Delete
  205903             :      // ******************************************
  205904             : 
  205905             :      public:
  205906             :           /// \private
  205907             :           static const unsigned pool_size; //
  205908             :           /// \private
  205909             :           static std::vector<unsigned char *> pools; //
  205910             :           /// \private
  205911             :           static SgOmpTargetDataStatement * next_node; // 
  205912             : 
  205913             :           /// \private
  205914             :           static unsigned long initializeStorageClassArray(SgOmpTargetDataStatementStorageClass *); //
  205915             : 
  205916             :           /// \private
  205917             :           static void clearMemoryPool(); //
  205918             :           static void deleteMemoryPool(); //
  205919             : 
  205920             :           /// \private
  205921             :           static void extendMemoryPoolForFileIO(); //
  205922             : 
  205923             :           /// \private
  205924             :           static SgOmpTargetDataStatement * getPointerFromGlobalIndex(unsigned long); //
  205925             :           /// \private
  205926             :           static SgOmpTargetDataStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  205927             : 
  205928             :           /// \private
  205929             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  205930             :           /// \private
  205931             :           static void resetValidFreepointers(); //
  205932             :           /// \private
  205933             :           static unsigned long getNumberOfLastValidPointer(); //
  205934             : 
  205935             : 
  205936             : #if defined(INLINE_FUNCTIONS)
  205937             :       /*! \brief returns pointer to newly allocated IR node */
  205938             :           inline void *operator new (size_t size);
  205939             : #else
  205940             :       /*! \brief returns pointer to newly allocated IR node */
  205941             :           void *operator new (size_t size);
  205942             : #endif
  205943             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  205944             :           void operator delete (void* pointer, size_t size);
  205945             : 
  205946             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  205947           0 :           void operator delete (void* pointer)
  205948             :              {
  205949             :             // This is the generated delete operator...
  205950           0 :                SgOmpTargetDataStatement::operator delete (pointer,sizeof(SgOmpTargetDataStatement));
  205951             :              }
  205952             : 
  205953             :       /*! \brief Returns the total number of IR nodes of this type */
  205954             :           static size_t numberOfNodes();
  205955             : 
  205956             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  205957             :           static size_t memoryUsage();
  205958             : 
  205959             :       // End of scope which started in IR nodes specific code 
  205960             :       /* */
  205961             : 
  205962             :       /* name Internal Functions
  205963             :           \brief Internal functions ... incomplete-documentation
  205964             : 
  205965             :           These functions have been made public as part of the design, but they are suggested for internal use 
  205966             :           or by particularly knowledgeable users for specialized tools or applications.
  205967             : 
  205968             :           \internal We could not make these private because they are required by user for special purposes. And 
  205969             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  205970             :          
  205971             :        */
  205972             : 
  205973             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  205974             :        // overridden in every class by *generated* implementation
  205975             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  205976             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  205977             :        // MS: 06/28/02 container of names of variables or container indices 
  205978             :        // used used in the traversal to access AST successor nodes
  205979             :        // overridden in every class by *generated* implementation
  205980             :       /*! \brief container of names of variables or container indices used used in the traversal
  205981             :           to access AST successor nodes overridden in every class by *generated* implementation */
  205982             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  205983             : 
  205984             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  205985             :        // than all the vector copies. The implementation for these functions is generated for each class.
  205986             :       /*! \brief return number of children in the traversal successor list */
  205987             :           virtual size_t get_numberOfTraversalSuccessors() override;
  205988             :       /*! \brief index-based access to traversal successors by index number */
  205989             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  205990             :       /*! \brief index-based access to traversal successors by child node */
  205991             :           virtual size_t get_childIndex(SgNode *child) override;
  205992             : 
  205993             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  205994             :        // MS: 08/16/2002 method for generating RTI information
  205995             :       /*! \brief return C++ Runtime-Time-Information */
  205996             :           virtual RTIReturnType roseRTI() override;
  205997             : #endif
  205998             :       /* */
  205999             : 
  206000             : 
  206001             : 
  206002             :       /* name Deprecated Functions
  206003             :           \brief Deprecated functions ... incomplete-documentation
  206004             : 
  206005             :           These functions have been deprecated from use.
  206006             :        */
  206007             :       /* */
  206008             : 
  206009             :       /*! returns a C style string (char*) representing the class name */
  206010             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  206011             : 
  206012             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  206013             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  206014             : #if 0
  206015             :       /*! returns old style Sage II enum values */
  206016             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  206017             :       /*! returns old style Sage II enum values */
  206018             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  206019             : #endif
  206020             :       /* */
  206021             : 
  206022             : 
  206023             : 
  206024             : 
  206025             :      public:
  206026             :       /* name Traversal Support Functions
  206027             :           \brief Traversal support functions ... incomplete-documentation
  206028             : 
  206029             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206030             :           or by particularly knowledgable users for specialized tools or applications.
  206031             :        */
  206032             :       /* */
  206033             : 
  206034             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  206035             :        // (inferior to ROSE traversal mechanism, experimental).
  206036             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  206037             :        */
  206038             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  206039             : 
  206040             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  206041             :       /*! \brief support for the classic visitor pattern done in GoF */
  206042             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  206043             : 
  206044             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  206045             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  206046             :        */
  206047             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  206048             : 
  206049             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  206050             :        */
  206051             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  206052             : 
  206053             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  206054             :        // This traversal helps support internal tools that call static member functions.
  206055             :        // note: this function operates on the memory pools.
  206056             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  206057             :        */
  206058             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  206059             :       /* */
  206060             : 
  206061             : 
  206062             :      public:
  206063             :       /* name Memory Allocation Functions
  206064             :           \brief Memory allocations functions ... incomplete-documentation
  206065             : 
  206066             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206067             :           or by particularly knowledgable users for specialized tools or applications.
  206068             :        */
  206069             :       /* */
  206070             : 
  206071             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  206072             : 
  206073             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  206074             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  206075             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  206076             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  206077             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  206078             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  206079             :           being used with the AST File I/O mechanism.
  206080             :        */
  206081             :           virtual bool isInMemoryPool() override;
  206082             : 
  206083             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  206084             : 
  206085             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  206086             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  206087             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  206088             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  206089             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  206090             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  206091             :           being used with the AST File I/O mechanism.
  206092             :        */
  206093             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  206094             : 
  206095             :       // DQ (4/30/2006): Modified to be a const function.
  206096             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  206097             : 
  206098             :           This functions is part of general support for many possible tools to operate 
  206099             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  206100             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  206101             :           less than the set of pointers used by the AST file I/O. This is part of
  206102             :           work implemented by Andreas, and support tools such as the AST graph generation.
  206103             : 
  206104             :           \warning This function can return unexpected data members and thus the 
  206105             :                    order and the number of elements is unpredicable and subject 
  206106             :                    to change.
  206107             : 
  206108             :           \returns STL vector of pairs of SgNode* and strings
  206109             :        */
  206110             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  206111             : 
  206112             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  206113             : 
  206114             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  206115             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  206116             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  206117             : 
  206118             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  206119             :                    and subject to change.
  206120             :        */
  206121             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  206122             : 
  206123             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  206124             : 
  206125             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  206126             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  206127             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  206128             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  206129             : 
  206130             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  206131             : 
  206132             :           \returns long
  206133             :        */
  206134             :           virtual long getChildIndex( SgNode* childNode ) const override;
  206135             : 
  206136             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  206137             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  206138             :       /* \brief Constructor for use by AST File I/O Mechanism
  206139             : 
  206140             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  206141             :           which obtained via fast binary file I/O from disk.
  206142             :        */
  206143             :        // SgOmpTargetDataStatement( SgOmpTargetDataStatementStorageClass& source );
  206144             : 
  206145             : 
  206146             : 
  206147             : 
  206148             : 
  206149             :  // JH (10/24/2005): methods added to support the ast file IO
  206150             :     private:
  206151             : 
  206152             :       /* name AST Memory Allocation Support Functions
  206153             :           \brief Memory allocations support....
  206154             : 
  206155             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  206156             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  206157             :           and support the AST File I/O Mechanism.
  206158             :        */
  206159             :       /* */
  206160             : 
  206161             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  206162             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  206163             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  206164             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  206165             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  206166             :           a correspinding one in the AST_FILE_IO class!
  206167             :        */
  206168             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  206169             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  206170             :       /* \brief Typedef used for low level memory access.
  206171             :        */
  206172             :        // typedef unsigned char* TestType;
  206173             : 
  206174             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  206175             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  206176             :       /* \brief Typedef used to hold memory addresses as values.
  206177             :        */
  206178             :        // typedef unsigned long  AddressType;
  206179             : 
  206180             : 
  206181             : 
  206182             :        // necessary, to have direct access to the p_freepointer and the private methods !
  206183             :       /*! \brief friend class declaration to support AST File I/O */
  206184             :           friend class AST_FILE_IO;
  206185             : 
  206186             :       /*! \brief friend class declaration to support AST File I/O */
  206187             :           friend class SgOmpTargetDataStatementStorageClass;
  206188             : 
  206189             :       /*! \brief friend class declaration to support AST File I/O */
  206190             :           friend class AstSpecificDataManagingClass;
  206191             : 
  206192             :       /*! \brief friend class declaration to support AST File I/O */
  206193             :           friend class AstSpecificDataManagingClassStorageClass;
  206194             :     public:
  206195             :       /*! \brief IR node constructor to support AST File I/O */
  206196             :           SgOmpTargetDataStatement( const SgOmpTargetDataStatementStorageClass& source );
  206197             : 
  206198             :  // private: // JJW hack
  206199             :        /*
  206200             :           name AST Memory Allocation Support Variables
  206201             :           Memory allocations support variables 
  206202             : 
  206203             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  206204             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  206205             :           and support the AST File I/O Mechanism.
  206206             :        */
  206207             :       /* */
  206208             : 
  206209             :     public:
  206210             : 
  206211             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  206212             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  206213             :       // virtual SgNode* addRegExpAttribute();
  206214             :       /*! \brief Support for AST matching using regular expression.
  206215             : 
  206216             :           This support is incomplete and the subject of current research to define 
  206217             :           RegEx trees to support inexact matching.
  206218             :        */
  206219             :           SgOmpTargetDataStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  206220             : 
  206221             : // *** COMMON CODE SECTION ENDS HERE ***
  206222             : 
  206223             : 
  206224             : // End of memberFunctionString
  206225             : // Start of memberFunctionString
  206226             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  206227             : 
  206228             :      // the generated cast function
  206229             :      // friend ROSE_DLL_API SgOmpTargetDataStatement* isSgOmpTargetDataStatement ( SgNode* s );
  206230             : 
  206231             :           typedef SgUpirFieldBodyStatement base_node_type;
  206232             : 
  206233             : 
  206234             : // End of memberFunctionString
  206235             : // Start of memberFunctionString
  206236             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  206237             : 
  206238             :           void post_construction_initialization() override;
  206239             : 
  206240             : 
  206241             : // End of memberFunctionString
  206242             : 
  206243             : 
  206244             :      public: 
  206245             :          virtual ~SgOmpTargetDataStatement();
  206246             : 
  206247             : 
  206248             :      public: 
  206249             :          SgOmpTargetDataStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  206250             :          SgOmpTargetDataStatement(SgStatement* body); 
  206251             : 
  206252             :     protected:
  206253             : 
  206254             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetDataStatement>;
  206255             : 
  206256             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206257             : 
  206258             : 
  206259             :    };
  206260             : #endif
  206261             : 
  206262             : // postdeclarations for SgOmpTargetDataStatement
  206263             : 
  206264             : /* #line 206265 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206265             : 
  206266             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  206267             : 
  206268             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206269             : 
  206270             : 
  206271             : /* #line 206272 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206272             : 
  206273             : 
  206274             : 
  206275             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206276             : 
  206277             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  206278             : //      This code is automatically generated for each 
  206279             : //      terminal and non-terminal within the defined 
  206280             : //      grammar.  There is a simple way to change the 
  206281             : //      code to fix bugs etc.  See the ROSE README file
  206282             : //      for directions.
  206283             : 
  206284             : // tps: (02/22/2010): Adding DLL export requirements
  206285             : #include "rosedll.h"
  206286             : 
  206287             : // predeclarations for SgOmpTargetParallelForStatement
  206288             : 
  206289             : /* #line 206290 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206290             : 
  206291             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  206292             : 
  206293             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206294             : 
  206295             : #if 1
  206296             : // Class Definition for SgOmpTargetParallelForStatement
  206297             : class ROSE_DLL_API SgOmpTargetParallelForStatement  : public SgUpirFieldBodyStatement
  206298             :    {
  206299             :      public:
  206300             : 
  206301             : 
  206302             : /* #line 206303 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206303             : 
  206304             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  206305             : // Start of memberFunctionString
  206306             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  206307             : 
  206308             : // *** COMMON CODE SECTION BEGINS HERE ***
  206309             : 
  206310             :     public:
  206311             : 
  206312             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  206313             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  206314             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  206315             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  206316             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  206317             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  206318             : 
  206319             :       /*! \brief returns a string representing the class name */
  206320             :           virtual std::string class_name() const override;
  206321             : 
  206322             :       /*! \brief returns new style SageIII enum values */
  206323             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  206324             : 
  206325             :       /*! \brief static variant value */
  206326             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  206327             :        // static const VariantT static_variant = V_SgOmpTargetParallelForStatement;
  206328             :           enum { static_variant = V_SgOmpTargetParallelForStatement };
  206329             : 
  206330             :        /* the generated cast function */
  206331             :       /*! \brief Casts pointer from base class to derived class */
  206332             :           ROSE_DLL_API friend       SgOmpTargetParallelForStatement* isSgOmpTargetParallelForStatement(       SgNode * s );
  206333             : 
  206334             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  206335             :           ROSE_DLL_API friend const SgOmpTargetParallelForStatement* isSgOmpTargetParallelForStatement( const SgNode * s );
  206336             : 
  206337             :      // ******************************************
  206338             :      // * Memory Pool / New / Delete
  206339             :      // ******************************************
  206340             : 
  206341             :      public:
  206342             :           /// \private
  206343             :           static const unsigned pool_size; //
  206344             :           /// \private
  206345             :           static std::vector<unsigned char *> pools; //
  206346             :           /// \private
  206347             :           static SgOmpTargetParallelForStatement * next_node; // 
  206348             : 
  206349             :           /// \private
  206350             :           static unsigned long initializeStorageClassArray(SgOmpTargetParallelForStatementStorageClass *); //
  206351             : 
  206352             :           /// \private
  206353             :           static void clearMemoryPool(); //
  206354             :           static void deleteMemoryPool(); //
  206355             : 
  206356             :           /// \private
  206357             :           static void extendMemoryPoolForFileIO(); //
  206358             : 
  206359             :           /// \private
  206360             :           static SgOmpTargetParallelForStatement * getPointerFromGlobalIndex(unsigned long); //
  206361             :           /// \private
  206362             :           static SgOmpTargetParallelForStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  206363             : 
  206364             :           /// \private
  206365             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  206366             :           /// \private
  206367             :           static void resetValidFreepointers(); //
  206368             :           /// \private
  206369             :           static unsigned long getNumberOfLastValidPointer(); //
  206370             : 
  206371             : 
  206372             : #if defined(INLINE_FUNCTIONS)
  206373             :       /*! \brief returns pointer to newly allocated IR node */
  206374             :           inline void *operator new (size_t size);
  206375             : #else
  206376             :       /*! \brief returns pointer to newly allocated IR node */
  206377             :           void *operator new (size_t size);
  206378             : #endif
  206379             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  206380             :           void operator delete (void* pointer, size_t size);
  206381             : 
  206382             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  206383           0 :           void operator delete (void* pointer)
  206384             :              {
  206385             :             // This is the generated delete operator...
  206386           0 :                SgOmpTargetParallelForStatement::operator delete (pointer,sizeof(SgOmpTargetParallelForStatement));
  206387             :              }
  206388             : 
  206389             :       /*! \brief Returns the total number of IR nodes of this type */
  206390             :           static size_t numberOfNodes();
  206391             : 
  206392             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  206393             :           static size_t memoryUsage();
  206394             : 
  206395             :       // End of scope which started in IR nodes specific code 
  206396             :       /* */
  206397             : 
  206398             :       /* name Internal Functions
  206399             :           \brief Internal functions ... incomplete-documentation
  206400             : 
  206401             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206402             :           or by particularly knowledgeable users for specialized tools or applications.
  206403             : 
  206404             :           \internal We could not make these private because they are required by user for special purposes. And 
  206405             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  206406             :          
  206407             :        */
  206408             : 
  206409             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  206410             :        // overridden in every class by *generated* implementation
  206411             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  206412             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  206413             :        // MS: 06/28/02 container of names of variables or container indices 
  206414             :        // used used in the traversal to access AST successor nodes
  206415             :        // overridden in every class by *generated* implementation
  206416             :       /*! \brief container of names of variables or container indices used used in the traversal
  206417             :           to access AST successor nodes overridden in every class by *generated* implementation */
  206418             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  206419             : 
  206420             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  206421             :        // than all the vector copies. The implementation for these functions is generated for each class.
  206422             :       /*! \brief return number of children in the traversal successor list */
  206423             :           virtual size_t get_numberOfTraversalSuccessors() override;
  206424             :       /*! \brief index-based access to traversal successors by index number */
  206425             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  206426             :       /*! \brief index-based access to traversal successors by child node */
  206427             :           virtual size_t get_childIndex(SgNode *child) override;
  206428             : 
  206429             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  206430             :        // MS: 08/16/2002 method for generating RTI information
  206431             :       /*! \brief return C++ Runtime-Time-Information */
  206432             :           virtual RTIReturnType roseRTI() override;
  206433             : #endif
  206434             :       /* */
  206435             : 
  206436             : 
  206437             : 
  206438             :       /* name Deprecated Functions
  206439             :           \brief Deprecated functions ... incomplete-documentation
  206440             : 
  206441             :           These functions have been deprecated from use.
  206442             :        */
  206443             :       /* */
  206444             : 
  206445             :       /*! returns a C style string (char*) representing the class name */
  206446             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  206447             : 
  206448             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  206449             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  206450             : #if 0
  206451             :       /*! returns old style Sage II enum values */
  206452             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  206453             :       /*! returns old style Sage II enum values */
  206454             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  206455             : #endif
  206456             :       /* */
  206457             : 
  206458             : 
  206459             : 
  206460             : 
  206461             :      public:
  206462             :       /* name Traversal Support Functions
  206463             :           \brief Traversal support functions ... incomplete-documentation
  206464             : 
  206465             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206466             :           or by particularly knowledgable users for specialized tools or applications.
  206467             :        */
  206468             :       /* */
  206469             : 
  206470             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  206471             :        // (inferior to ROSE traversal mechanism, experimental).
  206472             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  206473             :        */
  206474             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  206475             : 
  206476             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  206477             :       /*! \brief support for the classic visitor pattern done in GoF */
  206478             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  206479             : 
  206480             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  206481             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  206482             :        */
  206483             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  206484             : 
  206485             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  206486             :        */
  206487             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  206488             : 
  206489             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  206490             :        // This traversal helps support internal tools that call static member functions.
  206491             :        // note: this function operates on the memory pools.
  206492             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  206493             :        */
  206494             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  206495             :       /* */
  206496             : 
  206497             : 
  206498             :      public:
  206499             :       /* name Memory Allocation Functions
  206500             :           \brief Memory allocations functions ... incomplete-documentation
  206501             : 
  206502             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206503             :           or by particularly knowledgable users for specialized tools or applications.
  206504             :        */
  206505             :       /* */
  206506             : 
  206507             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  206508             : 
  206509             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  206510             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  206511             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  206512             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  206513             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  206514             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  206515             :           being used with the AST File I/O mechanism.
  206516             :        */
  206517             :           virtual bool isInMemoryPool() override;
  206518             : 
  206519             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  206520             : 
  206521             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  206522             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  206523             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  206524             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  206525             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  206526             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  206527             :           being used with the AST File I/O mechanism.
  206528             :        */
  206529             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  206530             : 
  206531             :       // DQ (4/30/2006): Modified to be a const function.
  206532             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  206533             : 
  206534             :           This functions is part of general support for many possible tools to operate 
  206535             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  206536             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  206537             :           less than the set of pointers used by the AST file I/O. This is part of
  206538             :           work implemented by Andreas, and support tools such as the AST graph generation.
  206539             : 
  206540             :           \warning This function can return unexpected data members and thus the 
  206541             :                    order and the number of elements is unpredicable and subject 
  206542             :                    to change.
  206543             : 
  206544             :           \returns STL vector of pairs of SgNode* and strings
  206545             :        */
  206546             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  206547             : 
  206548             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  206549             : 
  206550             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  206551             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  206552             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  206553             : 
  206554             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  206555             :                    and subject to change.
  206556             :        */
  206557             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  206558             : 
  206559             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  206560             : 
  206561             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  206562             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  206563             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  206564             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  206565             : 
  206566             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  206567             : 
  206568             :           \returns long
  206569             :        */
  206570             :           virtual long getChildIndex( SgNode* childNode ) const override;
  206571             : 
  206572             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  206573             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  206574             :       /* \brief Constructor for use by AST File I/O Mechanism
  206575             : 
  206576             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  206577             :           which obtained via fast binary file I/O from disk.
  206578             :        */
  206579             :        // SgOmpTargetParallelForStatement( SgOmpTargetParallelForStatementStorageClass& source );
  206580             : 
  206581             : 
  206582             : 
  206583             : 
  206584             : 
  206585             :  // JH (10/24/2005): methods added to support the ast file IO
  206586             :     private:
  206587             : 
  206588             :       /* name AST Memory Allocation Support Functions
  206589             :           \brief Memory allocations support....
  206590             : 
  206591             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  206592             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  206593             :           and support the AST File I/O Mechanism.
  206594             :        */
  206595             :       /* */
  206596             : 
  206597             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  206598             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  206599             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  206600             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  206601             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  206602             :           a correspinding one in the AST_FILE_IO class!
  206603             :        */
  206604             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  206605             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  206606             :       /* \brief Typedef used for low level memory access.
  206607             :        */
  206608             :        // typedef unsigned char* TestType;
  206609             : 
  206610             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  206611             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  206612             :       /* \brief Typedef used to hold memory addresses as values.
  206613             :        */
  206614             :        // typedef unsigned long  AddressType;
  206615             : 
  206616             : 
  206617             : 
  206618             :        // necessary, to have direct access to the p_freepointer and the private methods !
  206619             :       /*! \brief friend class declaration to support AST File I/O */
  206620             :           friend class AST_FILE_IO;
  206621             : 
  206622             :       /*! \brief friend class declaration to support AST File I/O */
  206623             :           friend class SgOmpTargetParallelForStatementStorageClass;
  206624             : 
  206625             :       /*! \brief friend class declaration to support AST File I/O */
  206626             :           friend class AstSpecificDataManagingClass;
  206627             : 
  206628             :       /*! \brief friend class declaration to support AST File I/O */
  206629             :           friend class AstSpecificDataManagingClassStorageClass;
  206630             :     public:
  206631             :       /*! \brief IR node constructor to support AST File I/O */
  206632             :           SgOmpTargetParallelForStatement( const SgOmpTargetParallelForStatementStorageClass& source );
  206633             : 
  206634             :  // private: // JJW hack
  206635             :        /*
  206636             :           name AST Memory Allocation Support Variables
  206637             :           Memory allocations support variables 
  206638             : 
  206639             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  206640             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  206641             :           and support the AST File I/O Mechanism.
  206642             :        */
  206643             :       /* */
  206644             : 
  206645             :     public:
  206646             : 
  206647             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  206648             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  206649             :       // virtual SgNode* addRegExpAttribute();
  206650             :       /*! \brief Support for AST matching using regular expression.
  206651             : 
  206652             :           This support is incomplete and the subject of current research to define 
  206653             :           RegEx trees to support inexact matching.
  206654             :        */
  206655             :           SgOmpTargetParallelForStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  206656             : 
  206657             : // *** COMMON CODE SECTION ENDS HERE ***
  206658             : 
  206659             : 
  206660             : // End of memberFunctionString
  206661             : // Start of memberFunctionString
  206662             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  206663             : 
  206664             :      // the generated cast function
  206665             :      // friend ROSE_DLL_API SgOmpTargetParallelForStatement* isSgOmpTargetParallelForStatement ( SgNode* s );
  206666             : 
  206667             :           typedef SgUpirFieldBodyStatement base_node_type;
  206668             : 
  206669             : 
  206670             : // End of memberFunctionString
  206671             : // Start of memberFunctionString
  206672             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  206673             : 
  206674             :           void post_construction_initialization() override;
  206675             : 
  206676             : 
  206677             : // End of memberFunctionString
  206678             : 
  206679             : 
  206680             :      public: 
  206681             :          virtual ~SgOmpTargetParallelForStatement();
  206682             : 
  206683             : 
  206684             :      public: 
  206685             :          SgOmpTargetParallelForStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  206686             :          SgOmpTargetParallelForStatement(SgStatement* body); 
  206687             : 
  206688             :     protected:
  206689             : 
  206690             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetParallelForStatement>;
  206691             : 
  206692             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206693             : 
  206694             : 
  206695             :    };
  206696             : #endif
  206697             : 
  206698             : // postdeclarations for SgOmpTargetParallelForStatement
  206699             : 
  206700             : /* #line 206701 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206701             : 
  206702             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  206703             : 
  206704             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206705             : 
  206706             : 
  206707             : /* #line 206708 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206708             : 
  206709             : 
  206710             : 
  206711             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206712             : 
  206713             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  206714             : //      This code is automatically generated for each 
  206715             : //      terminal and non-terminal within the defined 
  206716             : //      grammar.  There is a simple way to change the 
  206717             : //      code to fix bugs etc.  See the ROSE README file
  206718             : //      for directions.
  206719             : 
  206720             : // tps: (02/22/2010): Adding DLL export requirements
  206721             : #include "rosedll.h"
  206722             : 
  206723             : // predeclarations for SgOmpParallelLoopStatement
  206724             : 
  206725             : /* #line 206726 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206726             : 
  206727             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  206728             : 
  206729             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  206730             : 
  206731             : #if 1
  206732             : // Class Definition for SgOmpParallelLoopStatement
  206733             : class ROSE_DLL_API SgOmpParallelLoopStatement  : public SgUpirFieldBodyStatement
  206734             :    {
  206735             :      public:
  206736             : 
  206737             : 
  206738             : /* #line 206739 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  206739             : 
  206740             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  206741             : // Start of memberFunctionString
  206742             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  206743             : 
  206744             : // *** COMMON CODE SECTION BEGINS HERE ***
  206745             : 
  206746             :     public:
  206747             : 
  206748             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  206749             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  206750             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  206751             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  206752             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  206753             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  206754             : 
  206755             :       /*! \brief returns a string representing the class name */
  206756             :           virtual std::string class_name() const override;
  206757             : 
  206758             :       /*! \brief returns new style SageIII enum values */
  206759             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  206760             : 
  206761             :       /*! \brief static variant value */
  206762             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  206763             :        // static const VariantT static_variant = V_SgOmpParallelLoopStatement;
  206764             :           enum { static_variant = V_SgOmpParallelLoopStatement };
  206765             : 
  206766             :        /* the generated cast function */
  206767             :       /*! \brief Casts pointer from base class to derived class */
  206768             :           ROSE_DLL_API friend       SgOmpParallelLoopStatement* isSgOmpParallelLoopStatement(       SgNode * s );
  206769             : 
  206770             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  206771             :           ROSE_DLL_API friend const SgOmpParallelLoopStatement* isSgOmpParallelLoopStatement( const SgNode * s );
  206772             : 
  206773             :      // ******************************************
  206774             :      // * Memory Pool / New / Delete
  206775             :      // ******************************************
  206776             : 
  206777             :      public:
  206778             :           /// \private
  206779             :           static const unsigned pool_size; //
  206780             :           /// \private
  206781             :           static std::vector<unsigned char *> pools; //
  206782             :           /// \private
  206783             :           static SgOmpParallelLoopStatement * next_node; // 
  206784             : 
  206785             :           /// \private
  206786             :           static unsigned long initializeStorageClassArray(SgOmpParallelLoopStatementStorageClass *); //
  206787             : 
  206788             :           /// \private
  206789             :           static void clearMemoryPool(); //
  206790             :           static void deleteMemoryPool(); //
  206791             : 
  206792             :           /// \private
  206793             :           static void extendMemoryPoolForFileIO(); //
  206794             : 
  206795             :           /// \private
  206796             :           static SgOmpParallelLoopStatement * getPointerFromGlobalIndex(unsigned long); //
  206797             :           /// \private
  206798             :           static SgOmpParallelLoopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  206799             : 
  206800             :           /// \private
  206801             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  206802             :           /// \private
  206803             :           static void resetValidFreepointers(); //
  206804             :           /// \private
  206805             :           static unsigned long getNumberOfLastValidPointer(); //
  206806             : 
  206807             : 
  206808             : #if defined(INLINE_FUNCTIONS)
  206809             :       /*! \brief returns pointer to newly allocated IR node */
  206810             :           inline void *operator new (size_t size);
  206811             : #else
  206812             :       /*! \brief returns pointer to newly allocated IR node */
  206813             :           void *operator new (size_t size);
  206814             : #endif
  206815             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  206816             :           void operator delete (void* pointer, size_t size);
  206817             : 
  206818             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  206819           0 :           void operator delete (void* pointer)
  206820             :              {
  206821             :             // This is the generated delete operator...
  206822           0 :                SgOmpParallelLoopStatement::operator delete (pointer,sizeof(SgOmpParallelLoopStatement));
  206823             :              }
  206824             : 
  206825             :       /*! \brief Returns the total number of IR nodes of this type */
  206826             :           static size_t numberOfNodes();
  206827             : 
  206828             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  206829             :           static size_t memoryUsage();
  206830             : 
  206831             :       // End of scope which started in IR nodes specific code 
  206832             :       /* */
  206833             : 
  206834             :       /* name Internal Functions
  206835             :           \brief Internal functions ... incomplete-documentation
  206836             : 
  206837             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206838             :           or by particularly knowledgeable users for specialized tools or applications.
  206839             : 
  206840             :           \internal We could not make these private because they are required by user for special purposes. And 
  206841             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  206842             :          
  206843             :        */
  206844             : 
  206845             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  206846             :        // overridden in every class by *generated* implementation
  206847             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  206848             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  206849             :        // MS: 06/28/02 container of names of variables or container indices 
  206850             :        // used used in the traversal to access AST successor nodes
  206851             :        // overridden in every class by *generated* implementation
  206852             :       /*! \brief container of names of variables or container indices used used in the traversal
  206853             :           to access AST successor nodes overridden in every class by *generated* implementation */
  206854             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  206855             : 
  206856             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  206857             :        // than all the vector copies. The implementation for these functions is generated for each class.
  206858             :       /*! \brief return number of children in the traversal successor list */
  206859             :           virtual size_t get_numberOfTraversalSuccessors() override;
  206860             :       /*! \brief index-based access to traversal successors by index number */
  206861             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  206862             :       /*! \brief index-based access to traversal successors by child node */
  206863             :           virtual size_t get_childIndex(SgNode *child) override;
  206864             : 
  206865             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  206866             :        // MS: 08/16/2002 method for generating RTI information
  206867             :       /*! \brief return C++ Runtime-Time-Information */
  206868             :           virtual RTIReturnType roseRTI() override;
  206869             : #endif
  206870             :       /* */
  206871             : 
  206872             : 
  206873             : 
  206874             :       /* name Deprecated Functions
  206875             :           \brief Deprecated functions ... incomplete-documentation
  206876             : 
  206877             :           These functions have been deprecated from use.
  206878             :        */
  206879             :       /* */
  206880             : 
  206881             :       /*! returns a C style string (char*) representing the class name */
  206882             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  206883             : 
  206884             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  206885             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  206886             : #if 0
  206887             :       /*! returns old style Sage II enum values */
  206888             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  206889             :       /*! returns old style Sage II enum values */
  206890             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  206891             : #endif
  206892             :       /* */
  206893             : 
  206894             : 
  206895             : 
  206896             : 
  206897             :      public:
  206898             :       /* name Traversal Support Functions
  206899             :           \brief Traversal support functions ... incomplete-documentation
  206900             : 
  206901             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206902             :           or by particularly knowledgable users for specialized tools or applications.
  206903             :        */
  206904             :       /* */
  206905             : 
  206906             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  206907             :        // (inferior to ROSE traversal mechanism, experimental).
  206908             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  206909             :        */
  206910             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  206911             : 
  206912             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  206913             :       /*! \brief support for the classic visitor pattern done in GoF */
  206914             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  206915             : 
  206916             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  206917             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  206918             :        */
  206919             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  206920             : 
  206921             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  206922             :        */
  206923             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  206924             : 
  206925             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  206926             :        // This traversal helps support internal tools that call static member functions.
  206927             :        // note: this function operates on the memory pools.
  206928             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  206929             :        */
  206930             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  206931             :       /* */
  206932             : 
  206933             : 
  206934             :      public:
  206935             :       /* name Memory Allocation Functions
  206936             :           \brief Memory allocations functions ... incomplete-documentation
  206937             : 
  206938             :           These functions have been made public as part of the design, but they are suggested for internal use 
  206939             :           or by particularly knowledgable users for specialized tools or applications.
  206940             :        */
  206941             :       /* */
  206942             : 
  206943             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  206944             : 
  206945             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  206946             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  206947             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  206948             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  206949             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  206950             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  206951             :           being used with the AST File I/O mechanism.
  206952             :        */
  206953             :           virtual bool isInMemoryPool() override;
  206954             : 
  206955             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  206956             : 
  206957             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  206958             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  206959             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  206960             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  206961             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  206962             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  206963             :           being used with the AST File I/O mechanism.
  206964             :        */
  206965             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  206966             : 
  206967             :       // DQ (4/30/2006): Modified to be a const function.
  206968             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  206969             : 
  206970             :           This functions is part of general support for many possible tools to operate 
  206971             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  206972             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  206973             :           less than the set of pointers used by the AST file I/O. This is part of
  206974             :           work implemented by Andreas, and support tools such as the AST graph generation.
  206975             : 
  206976             :           \warning This function can return unexpected data members and thus the 
  206977             :                    order and the number of elements is unpredicable and subject 
  206978             :                    to change.
  206979             : 
  206980             :           \returns STL vector of pairs of SgNode* and strings
  206981             :        */
  206982             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  206983             : 
  206984             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  206985             : 
  206986             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  206987             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  206988             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  206989             : 
  206990             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  206991             :                    and subject to change.
  206992             :        */
  206993             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  206994             : 
  206995             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  206996             : 
  206997             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  206998             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  206999             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  207000             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  207001             : 
  207002             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  207003             : 
  207004             :           \returns long
  207005             :        */
  207006             :           virtual long getChildIndex( SgNode* childNode ) const override;
  207007             : 
  207008             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  207009             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207010             :       /* \brief Constructor for use by AST File I/O Mechanism
  207011             : 
  207012             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  207013             :           which obtained via fast binary file I/O from disk.
  207014             :        */
  207015             :        // SgOmpParallelLoopStatement( SgOmpParallelLoopStatementStorageClass& source );
  207016             : 
  207017             : 
  207018             : 
  207019             : 
  207020             : 
  207021             :  // JH (10/24/2005): methods added to support the ast file IO
  207022             :     private:
  207023             : 
  207024             :       /* name AST Memory Allocation Support Functions
  207025             :           \brief Memory allocations support....
  207026             : 
  207027             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  207028             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  207029             :           and support the AST File I/O Mechanism.
  207030             :        */
  207031             :       /* */
  207032             : 
  207033             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  207034             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  207035             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  207036             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  207037             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  207038             :           a correspinding one in the AST_FILE_IO class!
  207039             :        */
  207040             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  207041             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207042             :       /* \brief Typedef used for low level memory access.
  207043             :        */
  207044             :        // typedef unsigned char* TestType;
  207045             : 
  207046             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  207047             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207048             :       /* \brief Typedef used to hold memory addresses as values.
  207049             :        */
  207050             :        // typedef unsigned long  AddressType;
  207051             : 
  207052             : 
  207053             : 
  207054             :        // necessary, to have direct access to the p_freepointer and the private methods !
  207055             :       /*! \brief friend class declaration to support AST File I/O */
  207056             :           friend class AST_FILE_IO;
  207057             : 
  207058             :       /*! \brief friend class declaration to support AST File I/O */
  207059             :           friend class SgOmpParallelLoopStatementStorageClass;
  207060             : 
  207061             :       /*! \brief friend class declaration to support AST File I/O */
  207062             :           friend class AstSpecificDataManagingClass;
  207063             : 
  207064             :       /*! \brief friend class declaration to support AST File I/O */
  207065             :           friend class AstSpecificDataManagingClassStorageClass;
  207066             :     public:
  207067             :       /*! \brief IR node constructor to support AST File I/O */
  207068             :           SgOmpParallelLoopStatement( const SgOmpParallelLoopStatementStorageClass& source );
  207069             : 
  207070             :  // private: // JJW hack
  207071             :        /*
  207072             :           name AST Memory Allocation Support Variables
  207073             :           Memory allocations support variables 
  207074             : 
  207075             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  207076             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  207077             :           and support the AST File I/O Mechanism.
  207078             :        */
  207079             :       /* */
  207080             : 
  207081             :     public:
  207082             : 
  207083             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  207084             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  207085             :       // virtual SgNode* addRegExpAttribute();
  207086             :       /*! \brief Support for AST matching using regular expression.
  207087             : 
  207088             :           This support is incomplete and the subject of current research to define 
  207089             :           RegEx trees to support inexact matching.
  207090             :        */
  207091             :           SgOmpParallelLoopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  207092             : 
  207093             : // *** COMMON CODE SECTION ENDS HERE ***
  207094             : 
  207095             : 
  207096             : // End of memberFunctionString
  207097             : // Start of memberFunctionString
  207098             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  207099             : 
  207100             :      // the generated cast function
  207101             :      // friend ROSE_DLL_API SgOmpParallelLoopStatement* isSgOmpParallelLoopStatement ( SgNode* s );
  207102             : 
  207103             :           typedef SgUpirFieldBodyStatement base_node_type;
  207104             : 
  207105             : 
  207106             : // End of memberFunctionString
  207107             : // Start of memberFunctionString
  207108             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  207109             : 
  207110             :           void post_construction_initialization() override;
  207111             : 
  207112             : 
  207113             : // End of memberFunctionString
  207114             : 
  207115             : 
  207116             :      public: 
  207117             :          virtual ~SgOmpParallelLoopStatement();
  207118             : 
  207119             : 
  207120             :      public: 
  207121             :          SgOmpParallelLoopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  207122             :          SgOmpParallelLoopStatement(SgStatement* body); 
  207123             : 
  207124             :     protected:
  207125             : 
  207126             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpParallelLoopStatement>;
  207127             : 
  207128             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207129             : 
  207130             : 
  207131             :    };
  207132             : #endif
  207133             : 
  207134             : // postdeclarations for SgOmpParallelLoopStatement
  207135             : 
  207136             : /* #line 207137 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207137             : 
  207138             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  207139             : 
  207140             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207141             : 
  207142             : 
  207143             : /* #line 207144 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207144             : 
  207145             : 
  207146             : 
  207147             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207148             : 
  207149             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  207150             : //      This code is automatically generated for each 
  207151             : //      terminal and non-terminal within the defined 
  207152             : //      grammar.  There is a simple way to change the 
  207153             : //      code to fix bugs etc.  See the ROSE README file
  207154             : //      for directions.
  207155             : 
  207156             : // tps: (02/22/2010): Adding DLL export requirements
  207157             : #include "rosedll.h"
  207158             : 
  207159             : // predeclarations for SgOmpTargetParallelStatement
  207160             : 
  207161             : /* #line 207162 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207162             : 
  207163             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  207164             : 
  207165             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207166             : 
  207167             : #if 1
  207168             : // Class Definition for SgOmpTargetParallelStatement
  207169             : class ROSE_DLL_API SgOmpTargetParallelStatement  : public SgUpirFieldBodyStatement
  207170             :    {
  207171             :      public:
  207172             : 
  207173             : 
  207174             : /* #line 207175 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207175             : 
  207176             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  207177             : // Start of memberFunctionString
  207178             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  207179             : 
  207180             : // *** COMMON CODE SECTION BEGINS HERE ***
  207181             : 
  207182             :     public:
  207183             : 
  207184             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  207185             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  207186             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  207187             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  207188             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  207189             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  207190             : 
  207191             :       /*! \brief returns a string representing the class name */
  207192             :           virtual std::string class_name() const override;
  207193             : 
  207194             :       /*! \brief returns new style SageIII enum values */
  207195             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  207196             : 
  207197             :       /*! \brief static variant value */
  207198             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  207199             :        // static const VariantT static_variant = V_SgOmpTargetParallelStatement;
  207200             :           enum { static_variant = V_SgOmpTargetParallelStatement };
  207201             : 
  207202             :        /* the generated cast function */
  207203             :       /*! \brief Casts pointer from base class to derived class */
  207204             :           ROSE_DLL_API friend       SgOmpTargetParallelStatement* isSgOmpTargetParallelStatement(       SgNode * s );
  207205             : 
  207206             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  207207             :           ROSE_DLL_API friend const SgOmpTargetParallelStatement* isSgOmpTargetParallelStatement( const SgNode * s );
  207208             : 
  207209             :      // ******************************************
  207210             :      // * Memory Pool / New / Delete
  207211             :      // ******************************************
  207212             : 
  207213             :      public:
  207214             :           /// \private
  207215             :           static const unsigned pool_size; //
  207216             :           /// \private
  207217             :           static std::vector<unsigned char *> pools; //
  207218             :           /// \private
  207219             :           static SgOmpTargetParallelStatement * next_node; // 
  207220             : 
  207221             :           /// \private
  207222             :           static unsigned long initializeStorageClassArray(SgOmpTargetParallelStatementStorageClass *); //
  207223             : 
  207224             :           /// \private
  207225             :           static void clearMemoryPool(); //
  207226             :           static void deleteMemoryPool(); //
  207227             : 
  207228             :           /// \private
  207229             :           static void extendMemoryPoolForFileIO(); //
  207230             : 
  207231             :           /// \private
  207232             :           static SgOmpTargetParallelStatement * getPointerFromGlobalIndex(unsigned long); //
  207233             :           /// \private
  207234             :           static SgOmpTargetParallelStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  207235             : 
  207236             :           /// \private
  207237             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  207238             :           /// \private
  207239             :           static void resetValidFreepointers(); //
  207240             :           /// \private
  207241             :           static unsigned long getNumberOfLastValidPointer(); //
  207242             : 
  207243             : 
  207244             : #if defined(INLINE_FUNCTIONS)
  207245             :       /*! \brief returns pointer to newly allocated IR node */
  207246             :           inline void *operator new (size_t size);
  207247             : #else
  207248             :       /*! \brief returns pointer to newly allocated IR node */
  207249             :           void *operator new (size_t size);
  207250             : #endif
  207251             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  207252             :           void operator delete (void* pointer, size_t size);
  207253             : 
  207254             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  207255           0 :           void operator delete (void* pointer)
  207256             :              {
  207257             :             // This is the generated delete operator...
  207258           0 :                SgOmpTargetParallelStatement::operator delete (pointer,sizeof(SgOmpTargetParallelStatement));
  207259             :              }
  207260             : 
  207261             :       /*! \brief Returns the total number of IR nodes of this type */
  207262             :           static size_t numberOfNodes();
  207263             : 
  207264             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  207265             :           static size_t memoryUsage();
  207266             : 
  207267             :       // End of scope which started in IR nodes specific code 
  207268             :       /* */
  207269             : 
  207270             :       /* name Internal Functions
  207271             :           \brief Internal functions ... incomplete-documentation
  207272             : 
  207273             :           These functions have been made public as part of the design, but they are suggested for internal use 
  207274             :           or by particularly knowledgeable users for specialized tools or applications.
  207275             : 
  207276             :           \internal We could not make these private because they are required by user for special purposes. And 
  207277             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  207278             :          
  207279             :        */
  207280             : 
  207281             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  207282             :        // overridden in every class by *generated* implementation
  207283             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  207284             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  207285             :        // MS: 06/28/02 container of names of variables or container indices 
  207286             :        // used used in the traversal to access AST successor nodes
  207287             :        // overridden in every class by *generated* implementation
  207288             :       /*! \brief container of names of variables or container indices used used in the traversal
  207289             :           to access AST successor nodes overridden in every class by *generated* implementation */
  207290             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  207291             : 
  207292             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  207293             :        // than all the vector copies. The implementation for these functions is generated for each class.
  207294             :       /*! \brief return number of children in the traversal successor list */
  207295             :           virtual size_t get_numberOfTraversalSuccessors() override;
  207296             :       /*! \brief index-based access to traversal successors by index number */
  207297             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  207298             :       /*! \brief index-based access to traversal successors by child node */
  207299             :           virtual size_t get_childIndex(SgNode *child) override;
  207300             : 
  207301             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  207302             :        // MS: 08/16/2002 method for generating RTI information
  207303             :       /*! \brief return C++ Runtime-Time-Information */
  207304             :           virtual RTIReturnType roseRTI() override;
  207305             : #endif
  207306             :       /* */
  207307             : 
  207308             : 
  207309             : 
  207310             :       /* name Deprecated Functions
  207311             :           \brief Deprecated functions ... incomplete-documentation
  207312             : 
  207313             :           These functions have been deprecated from use.
  207314             :        */
  207315             :       /* */
  207316             : 
  207317             :       /*! returns a C style string (char*) representing the class name */
  207318             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  207319             : 
  207320             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  207321             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  207322             : #if 0
  207323             :       /*! returns old style Sage II enum values */
  207324             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  207325             :       /*! returns old style Sage II enum values */
  207326             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  207327             : #endif
  207328             :       /* */
  207329             : 
  207330             : 
  207331             : 
  207332             : 
  207333             :      public:
  207334             :       /* name Traversal Support Functions
  207335             :           \brief Traversal support functions ... incomplete-documentation
  207336             : 
  207337             :           These functions have been made public as part of the design, but they are suggested for internal use 
  207338             :           or by particularly knowledgable users for specialized tools or applications.
  207339             :        */
  207340             :       /* */
  207341             : 
  207342             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  207343             :        // (inferior to ROSE traversal mechanism, experimental).
  207344             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  207345             :        */
  207346             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  207347             : 
  207348             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  207349             :       /*! \brief support for the classic visitor pattern done in GoF */
  207350             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  207351             : 
  207352             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  207353             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  207354             :        */
  207355             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  207356             : 
  207357             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  207358             :        */
  207359             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  207360             : 
  207361             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  207362             :        // This traversal helps support internal tools that call static member functions.
  207363             :        // note: this function operates on the memory pools.
  207364             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  207365             :        */
  207366             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  207367             :       /* */
  207368             : 
  207369             : 
  207370             :      public:
  207371             :       /* name Memory Allocation Functions
  207372             :           \brief Memory allocations functions ... incomplete-documentation
  207373             : 
  207374             :           These functions have been made public as part of the design, but they are suggested for internal use 
  207375             :           or by particularly knowledgable users for specialized tools or applications.
  207376             :        */
  207377             :       /* */
  207378             : 
  207379             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  207380             : 
  207381             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  207382             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  207383             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  207384             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  207385             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  207386             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  207387             :           being used with the AST File I/O mechanism.
  207388             :        */
  207389             :           virtual bool isInMemoryPool() override;
  207390             : 
  207391             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  207392             : 
  207393             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  207394             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  207395             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  207396             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  207397             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  207398             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  207399             :           being used with the AST File I/O mechanism.
  207400             :        */
  207401             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  207402             : 
  207403             :       // DQ (4/30/2006): Modified to be a const function.
  207404             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  207405             : 
  207406             :           This functions is part of general support for many possible tools to operate 
  207407             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  207408             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  207409             :           less than the set of pointers used by the AST file I/O. This is part of
  207410             :           work implemented by Andreas, and support tools such as the AST graph generation.
  207411             : 
  207412             :           \warning This function can return unexpected data members and thus the 
  207413             :                    order and the number of elements is unpredicable and subject 
  207414             :                    to change.
  207415             : 
  207416             :           \returns STL vector of pairs of SgNode* and strings
  207417             :        */
  207418             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  207419             : 
  207420             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  207421             : 
  207422             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  207423             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  207424             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  207425             : 
  207426             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  207427             :                    and subject to change.
  207428             :        */
  207429             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  207430             : 
  207431             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  207432             : 
  207433             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  207434             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  207435             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  207436             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  207437             : 
  207438             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  207439             : 
  207440             :           \returns long
  207441             :        */
  207442             :           virtual long getChildIndex( SgNode* childNode ) const override;
  207443             : 
  207444             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  207445             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207446             :       /* \brief Constructor for use by AST File I/O Mechanism
  207447             : 
  207448             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  207449             :           which obtained via fast binary file I/O from disk.
  207450             :        */
  207451             :        // SgOmpTargetParallelStatement( SgOmpTargetParallelStatementStorageClass& source );
  207452             : 
  207453             : 
  207454             : 
  207455             : 
  207456             : 
  207457             :  // JH (10/24/2005): methods added to support the ast file IO
  207458             :     private:
  207459             : 
  207460             :       /* name AST Memory Allocation Support Functions
  207461             :           \brief Memory allocations support....
  207462             : 
  207463             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  207464             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  207465             :           and support the AST File I/O Mechanism.
  207466             :        */
  207467             :       /* */
  207468             : 
  207469             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  207470             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  207471             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  207472             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  207473             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  207474             :           a correspinding one in the AST_FILE_IO class!
  207475             :        */
  207476             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  207477             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207478             :       /* \brief Typedef used for low level memory access.
  207479             :        */
  207480             :        // typedef unsigned char* TestType;
  207481             : 
  207482             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  207483             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207484             :       /* \brief Typedef used to hold memory addresses as values.
  207485             :        */
  207486             :        // typedef unsigned long  AddressType;
  207487             : 
  207488             : 
  207489             : 
  207490             :        // necessary, to have direct access to the p_freepointer and the private methods !
  207491             :       /*! \brief friend class declaration to support AST File I/O */
  207492             :           friend class AST_FILE_IO;
  207493             : 
  207494             :       /*! \brief friend class declaration to support AST File I/O */
  207495             :           friend class SgOmpTargetParallelStatementStorageClass;
  207496             : 
  207497             :       /*! \brief friend class declaration to support AST File I/O */
  207498             :           friend class AstSpecificDataManagingClass;
  207499             : 
  207500             :       /*! \brief friend class declaration to support AST File I/O */
  207501             :           friend class AstSpecificDataManagingClassStorageClass;
  207502             :     public:
  207503             :       /*! \brief IR node constructor to support AST File I/O */
  207504             :           SgOmpTargetParallelStatement( const SgOmpTargetParallelStatementStorageClass& source );
  207505             : 
  207506             :  // private: // JJW hack
  207507             :        /*
  207508             :           name AST Memory Allocation Support Variables
  207509             :           Memory allocations support variables 
  207510             : 
  207511             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  207512             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  207513             :           and support the AST File I/O Mechanism.
  207514             :        */
  207515             :       /* */
  207516             : 
  207517             :     public:
  207518             : 
  207519             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  207520             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  207521             :       // virtual SgNode* addRegExpAttribute();
  207522             :       /*! \brief Support for AST matching using regular expression.
  207523             : 
  207524             :           This support is incomplete and the subject of current research to define 
  207525             :           RegEx trees to support inexact matching.
  207526             :        */
  207527             :           SgOmpTargetParallelStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  207528             : 
  207529             : // *** COMMON CODE SECTION ENDS HERE ***
  207530             : 
  207531             : 
  207532             : // End of memberFunctionString
  207533             : // Start of memberFunctionString
  207534             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  207535             : 
  207536             :      // the generated cast function
  207537             :      // friend ROSE_DLL_API SgOmpTargetParallelStatement* isSgOmpTargetParallelStatement ( SgNode* s );
  207538             : 
  207539             :           typedef SgUpirFieldBodyStatement base_node_type;
  207540             : 
  207541             : 
  207542             : // End of memberFunctionString
  207543             : // Start of memberFunctionString
  207544             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  207545             : 
  207546             :           void post_construction_initialization() override;
  207547             : 
  207548             : 
  207549             : // End of memberFunctionString
  207550             : 
  207551             : 
  207552             :      public: 
  207553             :          virtual ~SgOmpTargetParallelStatement();
  207554             : 
  207555             : 
  207556             :      public: 
  207557             :          SgOmpTargetParallelStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  207558             :          SgOmpTargetParallelStatement(SgStatement* body); 
  207559             : 
  207560             :     protected:
  207561             : 
  207562             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetParallelStatement>;
  207563             : 
  207564             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207565             : 
  207566             : 
  207567             :    };
  207568             : #endif
  207569             : 
  207570             : // postdeclarations for SgOmpTargetParallelStatement
  207571             : 
  207572             : /* #line 207573 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207573             : 
  207574             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  207575             : 
  207576             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207577             : 
  207578             : 
  207579             : /* #line 207580 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207580             : 
  207581             : 
  207582             : 
  207583             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207584             : 
  207585             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  207586             : //      This code is automatically generated for each 
  207587             : //      terminal and non-terminal within the defined 
  207588             : //      grammar.  There is a simple way to change the 
  207589             : //      code to fix bugs etc.  See the ROSE README file
  207590             : //      for directions.
  207591             : 
  207592             : // tps: (02/22/2010): Adding DLL export requirements
  207593             : #include "rosedll.h"
  207594             : 
  207595             : // predeclarations for SgOmpTargetParallelForSimdStatement
  207596             : 
  207597             : /* #line 207598 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207598             : 
  207599             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  207600             : 
  207601             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  207602             : 
  207603             : #if 1
  207604             : // Class Definition for SgOmpTargetParallelForSimdStatement
  207605             : class ROSE_DLL_API SgOmpTargetParallelForSimdStatement  : public SgUpirFieldBodyStatement
  207606             :    {
  207607             :      public:
  207608             : 
  207609             : 
  207610             : /* #line 207611 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  207611             : 
  207612             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  207613             : // Start of memberFunctionString
  207614             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  207615             : 
  207616             : // *** COMMON CODE SECTION BEGINS HERE ***
  207617             : 
  207618             :     public:
  207619             : 
  207620             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  207621             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  207622             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  207623             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  207624             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  207625             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  207626             : 
  207627             :       /*! \brief returns a string representing the class name */
  207628             :           virtual std::string class_name() const override;
  207629             : 
  207630             :       /*! \brief returns new style SageIII enum values */
  207631             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  207632             : 
  207633             :       /*! \brief static variant value */
  207634             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  207635             :        // static const VariantT static_variant = V_SgOmpTargetParallelForSimdStatement;
  207636             :           enum { static_variant = V_SgOmpTargetParallelForSimdStatement };
  207637             : 
  207638             :        /* the generated cast function */
  207639             :       /*! \brief Casts pointer from base class to derived class */
  207640             :           ROSE_DLL_API friend       SgOmpTargetParallelForSimdStatement* isSgOmpTargetParallelForSimdStatement(       SgNode * s );
  207641             : 
  207642             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  207643             :           ROSE_DLL_API friend const SgOmpTargetParallelForSimdStatement* isSgOmpTargetParallelForSimdStatement( const SgNode * s );
  207644             : 
  207645             :      // ******************************************
  207646             :      // * Memory Pool / New / Delete
  207647             :      // ******************************************
  207648             : 
  207649             :      public:
  207650             :           /// \private
  207651             :           static const unsigned pool_size; //
  207652             :           /// \private
  207653             :           static std::vector<unsigned char *> pools; //
  207654             :           /// \private
  207655             :           static SgOmpTargetParallelForSimdStatement * next_node; // 
  207656             : 
  207657             :           /// \private
  207658             :           static unsigned long initializeStorageClassArray(SgOmpTargetParallelForSimdStatementStorageClass *); //
  207659             : 
  207660             :           /// \private
  207661             :           static void clearMemoryPool(); //
  207662             :           static void deleteMemoryPool(); //
  207663             : 
  207664             :           /// \private
  207665             :           static void extendMemoryPoolForFileIO(); //
  207666             : 
  207667             :           /// \private
  207668             :           static SgOmpTargetParallelForSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  207669             :           /// \private
  207670             :           static SgOmpTargetParallelForSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  207671             : 
  207672             :           /// \private
  207673             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  207674             :           /// \private
  207675             :           static void resetValidFreepointers(); //
  207676             :           /// \private
  207677             :           static unsigned long getNumberOfLastValidPointer(); //
  207678             : 
  207679             : 
  207680             : #if defined(INLINE_FUNCTIONS)
  207681             :       /*! \brief returns pointer to newly allocated IR node */
  207682             :           inline void *operator new (size_t size);
  207683             : #else
  207684             :       /*! \brief returns pointer to newly allocated IR node */
  207685             :           void *operator new (size_t size);
  207686             : #endif
  207687             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  207688             :           void operator delete (void* pointer, size_t size);
  207689             : 
  207690             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  207691           0 :           void operator delete (void* pointer)
  207692             :              {
  207693             :             // This is the generated delete operator...
  207694           0 :                SgOmpTargetParallelForSimdStatement::operator delete (pointer,sizeof(SgOmpTargetParallelForSimdStatement));
  207695             :              }
  207696             : 
  207697             :       /*! \brief Returns the total number of IR nodes of this type */
  207698             :           static size_t numberOfNodes();
  207699             : 
  207700             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  207701             :           static size_t memoryUsage();
  207702             : 
  207703             :       // End of scope which started in IR nodes specific code 
  207704             :       /* */
  207705             : 
  207706             :       /* name Internal Functions
  207707             :           \brief Internal functions ... incomplete-documentation
  207708             : 
  207709             :           These functions have been made public as part of the design, but they are suggested for internal use 
  207710             :           or by particularly knowledgeable users for specialized tools or applications.
  207711             : 
  207712             :           \internal We could not make these private because they are required by user for special purposes. And 
  207713             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  207714             :          
  207715             :        */
  207716             : 
  207717             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  207718             :        // overridden in every class by *generated* implementation
  207719             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  207720             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  207721             :        // MS: 06/28/02 container of names of variables or container indices 
  207722             :        // used used in the traversal to access AST successor nodes
  207723             :        // overridden in every class by *generated* implementation
  207724             :       /*! \brief container of names of variables or container indices used used in the traversal
  207725             :           to access AST successor nodes overridden in every class by *generated* implementation */
  207726             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  207727             : 
  207728             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  207729             :        // than all the vector copies. The implementation for these functions is generated for each class.
  207730             :       /*! \brief return number of children in the traversal successor list */
  207731             :           virtual size_t get_numberOfTraversalSuccessors() override;
  207732             :       /*! \brief index-based access to traversal successors by index number */
  207733             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  207734             :       /*! \brief index-based access to traversal successors by child node */
  207735             :           virtual size_t get_childIndex(SgNode *child) override;
  207736             : 
  207737             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  207738             :        // MS: 08/16/2002 method for generating RTI information
  207739             :       /*! \brief return C++ Runtime-Time-Information */
  207740             :           virtual RTIReturnType roseRTI() override;
  207741             : #endif
  207742             :       /* */
  207743             : 
  207744             : 
  207745             : 
  207746             :       /* name Deprecated Functions
  207747             :           \brief Deprecated functions ... incomplete-documentation
  207748             : 
  207749             :           These functions have been deprecated from use.
  207750             :        */
  207751             :       /* */
  207752             : 
  207753             :       /*! returns a C style string (char*) representing the class name */
  207754             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  207755             : 
  207756             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  207757             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  207758             : #if 0
  207759             :       /*! returns old style Sage II enum values */
  207760             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  207761             :       /*! returns old style Sage II enum values */
  207762             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  207763             : #endif
  207764             :       /* */
  207765             : 
  207766             : 
  207767             : 
  207768             : 
  207769             :      public:
  207770             :       /* name Traversal Support Functions
  207771             :           \brief Traversal support functions ... incomplete-documentation
  207772             : 
  207773             :           These functions have been made public as part of the design, but they are suggested for internal use 
  207774             :           or by particularly knowledgable users for specialized tools or applications.
  207775             :        */
  207776             :       /* */
  207777             : 
  207778             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  207779             :        // (inferior to ROSE traversal mechanism, experimental).
  207780             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  207781             :        */
  207782             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  207783             : 
  207784             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  207785             :       /*! \brief support for the classic visitor pattern done in GoF */
  207786             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  207787             : 
  207788             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  207789             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  207790             :        */
  207791             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  207792             : 
  207793             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  207794             :        */
  207795             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  207796             : 
  207797             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  207798             :        // This traversal helps support internal tools that call static member functions.
  207799             :        // note: this function operates on the memory pools.
  207800             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  207801             :        */
  207802             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  207803             :       /* */
  207804             : 
  207805             : 
  207806             :      public:
  207807             :       /* name Memory Allocation Functions
  207808             :           \brief Memory allocations functions ... incomplete-documentation
  207809             : 
  207810             :           These functions have been made public as part of the design, but they are suggested for internal use 
  207811             :           or by particularly knowledgable users for specialized tools or applications.
  207812             :        */
  207813             :       /* */
  207814             : 
  207815             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  207816             : 
  207817             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  207818             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  207819             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  207820             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  207821             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  207822             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  207823             :           being used with the AST File I/O mechanism.
  207824             :        */
  207825             :           virtual bool isInMemoryPool() override;
  207826             : 
  207827             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  207828             : 
  207829             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  207830             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  207831             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  207832             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  207833             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  207834             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  207835             :           being used with the AST File I/O mechanism.
  207836             :        */
  207837             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  207838             : 
  207839             :       // DQ (4/30/2006): Modified to be a const function.
  207840             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  207841             : 
  207842             :           This functions is part of general support for many possible tools to operate 
  207843             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  207844             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  207845             :           less than the set of pointers used by the AST file I/O. This is part of
  207846             :           work implemented by Andreas, and support tools such as the AST graph generation.
  207847             : 
  207848             :           \warning This function can return unexpected data members and thus the 
  207849             :                    order and the number of elements is unpredicable and subject 
  207850             :                    to change.
  207851             : 
  207852             :           \returns STL vector of pairs of SgNode* and strings
  207853             :        */
  207854             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  207855             : 
  207856             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  207857             : 
  207858             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  207859             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  207860             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  207861             : 
  207862             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  207863             :                    and subject to change.
  207864             :        */
  207865             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  207866             : 
  207867             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  207868             : 
  207869             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  207870             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  207871             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  207872             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  207873             : 
  207874             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  207875             : 
  207876             :           \returns long
  207877             :        */
  207878             :           virtual long getChildIndex( SgNode* childNode ) const override;
  207879             : 
  207880             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  207881             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207882             :       /* \brief Constructor for use by AST File I/O Mechanism
  207883             : 
  207884             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  207885             :           which obtained via fast binary file I/O from disk.
  207886             :        */
  207887             :        // SgOmpTargetParallelForSimdStatement( SgOmpTargetParallelForSimdStatementStorageClass& source );
  207888             : 
  207889             : 
  207890             : 
  207891             : 
  207892             : 
  207893             :  // JH (10/24/2005): methods added to support the ast file IO
  207894             :     private:
  207895             : 
  207896             :       /* name AST Memory Allocation Support Functions
  207897             :           \brief Memory allocations support....
  207898             : 
  207899             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  207900             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  207901             :           and support the AST File I/O Mechanism.
  207902             :        */
  207903             :       /* */
  207904             : 
  207905             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  207906             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  207907             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  207908             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  207909             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  207910             :           a correspinding one in the AST_FILE_IO class!
  207911             :        */
  207912             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  207913             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207914             :       /* \brief Typedef used for low level memory access.
  207915             :        */
  207916             :        // typedef unsigned char* TestType;
  207917             : 
  207918             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  207919             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  207920             :       /* \brief Typedef used to hold memory addresses as values.
  207921             :        */
  207922             :        // typedef unsigned long  AddressType;
  207923             : 
  207924             : 
  207925             : 
  207926             :        // necessary, to have direct access to the p_freepointer and the private methods !
  207927             :       /*! \brief friend class declaration to support AST File I/O */
  207928             :           friend class AST_FILE_IO;
  207929             : 
  207930             :       /*! \brief friend class declaration to support AST File I/O */
  207931             :           friend class SgOmpTargetParallelForSimdStatementStorageClass;
  207932             : 
  207933             :       /*! \brief friend class declaration to support AST File I/O */
  207934             :           friend class AstSpecificDataManagingClass;
  207935             : 
  207936             :       /*! \brief friend class declaration to support AST File I/O */
  207937             :           friend class AstSpecificDataManagingClassStorageClass;
  207938             :     public:
  207939             :       /*! \brief IR node constructor to support AST File I/O */
  207940             :           SgOmpTargetParallelForSimdStatement( const SgOmpTargetParallelForSimdStatementStorageClass& source );
  207941             : 
  207942             :  // private: // JJW hack
  207943             :        /*
  207944             :           name AST Memory Allocation Support Variables
  207945             :           Memory allocations support variables 
  207946             : 
  207947             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  207948             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  207949             :           and support the AST File I/O Mechanism.
  207950             :        */
  207951             :       /* */
  207952             : 
  207953             :     public:
  207954             : 
  207955             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  207956             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  207957             :       // virtual SgNode* addRegExpAttribute();
  207958             :       /*! \brief Support for AST matching using regular expression.
  207959             : 
  207960             :           This support is incomplete and the subject of current research to define 
  207961             :           RegEx trees to support inexact matching.
  207962             :        */
  207963             :           SgOmpTargetParallelForSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  207964             : 
  207965             : // *** COMMON CODE SECTION ENDS HERE ***
  207966             : 
  207967             : 
  207968             : // End of memberFunctionString
  207969             : // Start of memberFunctionString
  207970             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  207971             : 
  207972             :      // the generated cast function
  207973             :      // friend ROSE_DLL_API SgOmpTargetParallelForSimdStatement* isSgOmpTargetParallelForSimdStatement ( SgNode* s );
  207974             : 
  207975             :           typedef SgUpirFieldBodyStatement base_node_type;
  207976             : 
  207977             : 
  207978             : // End of memberFunctionString
  207979             : // Start of memberFunctionString
  207980             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  207981             : 
  207982             :           void post_construction_initialization() override;
  207983             : 
  207984             : 
  207985             : // End of memberFunctionString
  207986             : 
  207987             : 
  207988             :      public: 
  207989             :          virtual ~SgOmpTargetParallelForSimdStatement();
  207990             : 
  207991             : 
  207992             :      public: 
  207993             :          SgOmpTargetParallelForSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  207994             :          SgOmpTargetParallelForSimdStatement(SgStatement* body); 
  207995             : 
  207996             :     protected:
  207997             : 
  207998             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetParallelForSimdStatement>;
  207999             : 
  208000             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208001             : 
  208002             : 
  208003             :    };
  208004             : #endif
  208005             : 
  208006             : // postdeclarations for SgOmpTargetParallelForSimdStatement
  208007             : 
  208008             : /* #line 208009 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208009             : 
  208010             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  208011             : 
  208012             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208013             : 
  208014             : 
  208015             : /* #line 208016 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208016             : 
  208017             : 
  208018             : 
  208019             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208020             : 
  208021             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  208022             : //      This code is automatically generated for each 
  208023             : //      terminal and non-terminal within the defined 
  208024             : //      grammar.  There is a simple way to change the 
  208025             : //      code to fix bugs etc.  See the ROSE README file
  208026             : //      for directions.
  208027             : 
  208028             : // tps: (02/22/2010): Adding DLL export requirements
  208029             : #include "rosedll.h"
  208030             : 
  208031             : // predeclarations for SgOmpTargetParallelLoopStatement
  208032             : 
  208033             : /* #line 208034 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208034             : 
  208035             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  208036             : 
  208037             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208038             : 
  208039             : #if 1
  208040             : // Class Definition for SgOmpTargetParallelLoopStatement
  208041             : class ROSE_DLL_API SgOmpTargetParallelLoopStatement  : public SgUpirFieldBodyStatement
  208042             :    {
  208043             :      public:
  208044             : 
  208045             : 
  208046             : /* #line 208047 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208047             : 
  208048             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  208049             : // Start of memberFunctionString
  208050             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  208051             : 
  208052             : // *** COMMON CODE SECTION BEGINS HERE ***
  208053             : 
  208054             :     public:
  208055             : 
  208056             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  208057             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  208058             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  208059             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  208060             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  208061             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  208062             : 
  208063             :       /*! \brief returns a string representing the class name */
  208064             :           virtual std::string class_name() const override;
  208065             : 
  208066             :       /*! \brief returns new style SageIII enum values */
  208067             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  208068             : 
  208069             :       /*! \brief static variant value */
  208070             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  208071             :        // static const VariantT static_variant = V_SgOmpTargetParallelLoopStatement;
  208072             :           enum { static_variant = V_SgOmpTargetParallelLoopStatement };
  208073             : 
  208074             :        /* the generated cast function */
  208075             :       /*! \brief Casts pointer from base class to derived class */
  208076             :           ROSE_DLL_API friend       SgOmpTargetParallelLoopStatement* isSgOmpTargetParallelLoopStatement(       SgNode * s );
  208077             : 
  208078             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  208079             :           ROSE_DLL_API friend const SgOmpTargetParallelLoopStatement* isSgOmpTargetParallelLoopStatement( const SgNode * s );
  208080             : 
  208081             :      // ******************************************
  208082             :      // * Memory Pool / New / Delete
  208083             :      // ******************************************
  208084             : 
  208085             :      public:
  208086             :           /// \private
  208087             :           static const unsigned pool_size; //
  208088             :           /// \private
  208089             :           static std::vector<unsigned char *> pools; //
  208090             :           /// \private
  208091             :           static SgOmpTargetParallelLoopStatement * next_node; // 
  208092             : 
  208093             :           /// \private
  208094             :           static unsigned long initializeStorageClassArray(SgOmpTargetParallelLoopStatementStorageClass *); //
  208095             : 
  208096             :           /// \private
  208097             :           static void clearMemoryPool(); //
  208098             :           static void deleteMemoryPool(); //
  208099             : 
  208100             :           /// \private
  208101             :           static void extendMemoryPoolForFileIO(); //
  208102             : 
  208103             :           /// \private
  208104             :           static SgOmpTargetParallelLoopStatement * getPointerFromGlobalIndex(unsigned long); //
  208105             :           /// \private
  208106             :           static SgOmpTargetParallelLoopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  208107             : 
  208108             :           /// \private
  208109             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  208110             :           /// \private
  208111             :           static void resetValidFreepointers(); //
  208112             :           /// \private
  208113             :           static unsigned long getNumberOfLastValidPointer(); //
  208114             : 
  208115             : 
  208116             : #if defined(INLINE_FUNCTIONS)
  208117             :       /*! \brief returns pointer to newly allocated IR node */
  208118             :           inline void *operator new (size_t size);
  208119             : #else
  208120             :       /*! \brief returns pointer to newly allocated IR node */
  208121             :           void *operator new (size_t size);
  208122             : #endif
  208123             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  208124             :           void operator delete (void* pointer, size_t size);
  208125             : 
  208126             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  208127           0 :           void operator delete (void* pointer)
  208128             :              {
  208129             :             // This is the generated delete operator...
  208130           0 :                SgOmpTargetParallelLoopStatement::operator delete (pointer,sizeof(SgOmpTargetParallelLoopStatement));
  208131             :              }
  208132             : 
  208133             :       /*! \brief Returns the total number of IR nodes of this type */
  208134             :           static size_t numberOfNodes();
  208135             : 
  208136             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  208137             :           static size_t memoryUsage();
  208138             : 
  208139             :       // End of scope which started in IR nodes specific code 
  208140             :       /* */
  208141             : 
  208142             :       /* name Internal Functions
  208143             :           \brief Internal functions ... incomplete-documentation
  208144             : 
  208145             :           These functions have been made public as part of the design, but they are suggested for internal use 
  208146             :           or by particularly knowledgeable users for specialized tools or applications.
  208147             : 
  208148             :           \internal We could not make these private because they are required by user for special purposes. And 
  208149             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  208150             :          
  208151             :        */
  208152             : 
  208153             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  208154             :        // overridden in every class by *generated* implementation
  208155             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  208156             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  208157             :        // MS: 06/28/02 container of names of variables or container indices 
  208158             :        // used used in the traversal to access AST successor nodes
  208159             :        // overridden in every class by *generated* implementation
  208160             :       /*! \brief container of names of variables or container indices used used in the traversal
  208161             :           to access AST successor nodes overridden in every class by *generated* implementation */
  208162             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  208163             : 
  208164             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  208165             :        // than all the vector copies. The implementation for these functions is generated for each class.
  208166             :       /*! \brief return number of children in the traversal successor list */
  208167             :           virtual size_t get_numberOfTraversalSuccessors() override;
  208168             :       /*! \brief index-based access to traversal successors by index number */
  208169             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  208170             :       /*! \brief index-based access to traversal successors by child node */
  208171             :           virtual size_t get_childIndex(SgNode *child) override;
  208172             : 
  208173             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  208174             :        // MS: 08/16/2002 method for generating RTI information
  208175             :       /*! \brief return C++ Runtime-Time-Information */
  208176             :           virtual RTIReturnType roseRTI() override;
  208177             : #endif
  208178             :       /* */
  208179             : 
  208180             : 
  208181             : 
  208182             :       /* name Deprecated Functions
  208183             :           \brief Deprecated functions ... incomplete-documentation
  208184             : 
  208185             :           These functions have been deprecated from use.
  208186             :        */
  208187             :       /* */
  208188             : 
  208189             :       /*! returns a C style string (char*) representing the class name */
  208190             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  208191             : 
  208192             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  208193             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  208194             : #if 0
  208195             :       /*! returns old style Sage II enum values */
  208196             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  208197             :       /*! returns old style Sage II enum values */
  208198             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  208199             : #endif
  208200             :       /* */
  208201             : 
  208202             : 
  208203             : 
  208204             : 
  208205             :      public:
  208206             :       /* name Traversal Support Functions
  208207             :           \brief Traversal support functions ... incomplete-documentation
  208208             : 
  208209             :           These functions have been made public as part of the design, but they are suggested for internal use 
  208210             :           or by particularly knowledgable users for specialized tools or applications.
  208211             :        */
  208212             :       /* */
  208213             : 
  208214             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  208215             :        // (inferior to ROSE traversal mechanism, experimental).
  208216             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  208217             :        */
  208218             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  208219             : 
  208220             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  208221             :       /*! \brief support for the classic visitor pattern done in GoF */
  208222             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  208223             : 
  208224             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  208225             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  208226             :        */
  208227             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  208228             : 
  208229             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  208230             :        */
  208231             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  208232             : 
  208233             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  208234             :        // This traversal helps support internal tools that call static member functions.
  208235             :        // note: this function operates on the memory pools.
  208236             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  208237             :        */
  208238             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  208239             :       /* */
  208240             : 
  208241             : 
  208242             :      public:
  208243             :       /* name Memory Allocation Functions
  208244             :           \brief Memory allocations functions ... incomplete-documentation
  208245             : 
  208246             :           These functions have been made public as part of the design, but they are suggested for internal use 
  208247             :           or by particularly knowledgable users for specialized tools or applications.
  208248             :        */
  208249             :       /* */
  208250             : 
  208251             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  208252             : 
  208253             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  208254             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  208255             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  208256             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  208257             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  208258             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  208259             :           being used with the AST File I/O mechanism.
  208260             :        */
  208261             :           virtual bool isInMemoryPool() override;
  208262             : 
  208263             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  208264             : 
  208265             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  208266             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  208267             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  208268             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  208269             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  208270             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  208271             :           being used with the AST File I/O mechanism.
  208272             :        */
  208273             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  208274             : 
  208275             :       // DQ (4/30/2006): Modified to be a const function.
  208276             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  208277             : 
  208278             :           This functions is part of general support for many possible tools to operate 
  208279             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  208280             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  208281             :           less than the set of pointers used by the AST file I/O. This is part of
  208282             :           work implemented by Andreas, and support tools such as the AST graph generation.
  208283             : 
  208284             :           \warning This function can return unexpected data members and thus the 
  208285             :                    order and the number of elements is unpredicable and subject 
  208286             :                    to change.
  208287             : 
  208288             :           \returns STL vector of pairs of SgNode* and strings
  208289             :        */
  208290             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  208291             : 
  208292             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  208293             : 
  208294             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  208295             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  208296             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  208297             : 
  208298             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  208299             :                    and subject to change.
  208300             :        */
  208301             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  208302             : 
  208303             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  208304             : 
  208305             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  208306             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  208307             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  208308             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  208309             : 
  208310             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  208311             : 
  208312             :           \returns long
  208313             :        */
  208314             :           virtual long getChildIndex( SgNode* childNode ) const override;
  208315             : 
  208316             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  208317             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  208318             :       /* \brief Constructor for use by AST File I/O Mechanism
  208319             : 
  208320             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  208321             :           which obtained via fast binary file I/O from disk.
  208322             :        */
  208323             :        // SgOmpTargetParallelLoopStatement( SgOmpTargetParallelLoopStatementStorageClass& source );
  208324             : 
  208325             : 
  208326             : 
  208327             : 
  208328             : 
  208329             :  // JH (10/24/2005): methods added to support the ast file IO
  208330             :     private:
  208331             : 
  208332             :       /* name AST Memory Allocation Support Functions
  208333             :           \brief Memory allocations support....
  208334             : 
  208335             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  208336             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  208337             :           and support the AST File I/O Mechanism.
  208338             :        */
  208339             :       /* */
  208340             : 
  208341             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  208342             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  208343             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  208344             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  208345             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  208346             :           a correspinding one in the AST_FILE_IO class!
  208347             :        */
  208348             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  208349             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  208350             :       /* \brief Typedef used for low level memory access.
  208351             :        */
  208352             :        // typedef unsigned char* TestType;
  208353             : 
  208354             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  208355             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  208356             :       /* \brief Typedef used to hold memory addresses as values.
  208357             :        */
  208358             :        // typedef unsigned long  AddressType;
  208359             : 
  208360             : 
  208361             : 
  208362             :        // necessary, to have direct access to the p_freepointer and the private methods !
  208363             :       /*! \brief friend class declaration to support AST File I/O */
  208364             :           friend class AST_FILE_IO;
  208365             : 
  208366             :       /*! \brief friend class declaration to support AST File I/O */
  208367             :           friend class SgOmpTargetParallelLoopStatementStorageClass;
  208368             : 
  208369             :       /*! \brief friend class declaration to support AST File I/O */
  208370             :           friend class AstSpecificDataManagingClass;
  208371             : 
  208372             :       /*! \brief friend class declaration to support AST File I/O */
  208373             :           friend class AstSpecificDataManagingClassStorageClass;
  208374             :     public:
  208375             :       /*! \brief IR node constructor to support AST File I/O */
  208376             :           SgOmpTargetParallelLoopStatement( const SgOmpTargetParallelLoopStatementStorageClass& source );
  208377             : 
  208378             :  // private: // JJW hack
  208379             :        /*
  208380             :           name AST Memory Allocation Support Variables
  208381             :           Memory allocations support variables 
  208382             : 
  208383             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  208384             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  208385             :           and support the AST File I/O Mechanism.
  208386             :        */
  208387             :       /* */
  208388             : 
  208389             :     public:
  208390             : 
  208391             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  208392             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  208393             :       // virtual SgNode* addRegExpAttribute();
  208394             :       /*! \brief Support for AST matching using regular expression.
  208395             : 
  208396             :           This support is incomplete and the subject of current research to define 
  208397             :           RegEx trees to support inexact matching.
  208398             :        */
  208399             :           SgOmpTargetParallelLoopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  208400             : 
  208401             : // *** COMMON CODE SECTION ENDS HERE ***
  208402             : 
  208403             : 
  208404             : // End of memberFunctionString
  208405             : // Start of memberFunctionString
  208406             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  208407             : 
  208408             :      // the generated cast function
  208409             :      // friend ROSE_DLL_API SgOmpTargetParallelLoopStatement* isSgOmpTargetParallelLoopStatement ( SgNode* s );
  208410             : 
  208411             :           typedef SgUpirFieldBodyStatement base_node_type;
  208412             : 
  208413             : 
  208414             : // End of memberFunctionString
  208415             : // Start of memberFunctionString
  208416             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  208417             : 
  208418             :           void post_construction_initialization() override;
  208419             : 
  208420             : 
  208421             : // End of memberFunctionString
  208422             : 
  208423             : 
  208424             :      public: 
  208425             :          virtual ~SgOmpTargetParallelLoopStatement();
  208426             : 
  208427             : 
  208428             :      public: 
  208429             :          SgOmpTargetParallelLoopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  208430             :          SgOmpTargetParallelLoopStatement(SgStatement* body); 
  208431             : 
  208432             :     protected:
  208433             : 
  208434             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetParallelLoopStatement>;
  208435             : 
  208436             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208437             : 
  208438             : 
  208439             :    };
  208440             : #endif
  208441             : 
  208442             : // postdeclarations for SgOmpTargetParallelLoopStatement
  208443             : 
  208444             : /* #line 208445 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208445             : 
  208446             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  208447             : 
  208448             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208449             : 
  208450             : 
  208451             : /* #line 208452 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208452             : 
  208453             : 
  208454             : 
  208455             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208456             : 
  208457             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  208458             : //      This code is automatically generated for each 
  208459             : //      terminal and non-terminal within the defined 
  208460             : //      grammar.  There is a simple way to change the 
  208461             : //      code to fix bugs etc.  See the ROSE README file
  208462             : //      for directions.
  208463             : 
  208464             : // tps: (02/22/2010): Adding DLL export requirements
  208465             : #include "rosedll.h"
  208466             : 
  208467             : // predeclarations for SgOmpTargetSimdStatement
  208468             : 
  208469             : /* #line 208470 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208470             : 
  208471             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  208472             : 
  208473             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208474             : 
  208475             : #if 1
  208476             : // Class Definition for SgOmpTargetSimdStatement
  208477             : class ROSE_DLL_API SgOmpTargetSimdStatement  : public SgUpirFieldBodyStatement
  208478             :    {
  208479             :      public:
  208480             : 
  208481             : 
  208482             : /* #line 208483 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208483             : 
  208484             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  208485             : // Start of memberFunctionString
  208486             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  208487             : 
  208488             : // *** COMMON CODE SECTION BEGINS HERE ***
  208489             : 
  208490             :     public:
  208491             : 
  208492             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  208493             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  208494             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  208495             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  208496             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  208497             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  208498             : 
  208499             :       /*! \brief returns a string representing the class name */
  208500             :           virtual std::string class_name() const override;
  208501             : 
  208502             :       /*! \brief returns new style SageIII enum values */
  208503             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  208504             : 
  208505             :       /*! \brief static variant value */
  208506             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  208507             :        // static const VariantT static_variant = V_SgOmpTargetSimdStatement;
  208508             :           enum { static_variant = V_SgOmpTargetSimdStatement };
  208509             : 
  208510             :        /* the generated cast function */
  208511             :       /*! \brief Casts pointer from base class to derived class */
  208512             :           ROSE_DLL_API friend       SgOmpTargetSimdStatement* isSgOmpTargetSimdStatement(       SgNode * s );
  208513             : 
  208514             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  208515             :           ROSE_DLL_API friend const SgOmpTargetSimdStatement* isSgOmpTargetSimdStatement( const SgNode * s );
  208516             : 
  208517             :      // ******************************************
  208518             :      // * Memory Pool / New / Delete
  208519             :      // ******************************************
  208520             : 
  208521             :      public:
  208522             :           /// \private
  208523             :           static const unsigned pool_size; //
  208524             :           /// \private
  208525             :           static std::vector<unsigned char *> pools; //
  208526             :           /// \private
  208527             :           static SgOmpTargetSimdStatement * next_node; // 
  208528             : 
  208529             :           /// \private
  208530             :           static unsigned long initializeStorageClassArray(SgOmpTargetSimdStatementStorageClass *); //
  208531             : 
  208532             :           /// \private
  208533             :           static void clearMemoryPool(); //
  208534             :           static void deleteMemoryPool(); //
  208535             : 
  208536             :           /// \private
  208537             :           static void extendMemoryPoolForFileIO(); //
  208538             : 
  208539             :           /// \private
  208540             :           static SgOmpTargetSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  208541             :           /// \private
  208542             :           static SgOmpTargetSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  208543             : 
  208544             :           /// \private
  208545             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  208546             :           /// \private
  208547             :           static void resetValidFreepointers(); //
  208548             :           /// \private
  208549             :           static unsigned long getNumberOfLastValidPointer(); //
  208550             : 
  208551             : 
  208552             : #if defined(INLINE_FUNCTIONS)
  208553             :       /*! \brief returns pointer to newly allocated IR node */
  208554             :           inline void *operator new (size_t size);
  208555             : #else
  208556             :       /*! \brief returns pointer to newly allocated IR node */
  208557             :           void *operator new (size_t size);
  208558             : #endif
  208559             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  208560             :           void operator delete (void* pointer, size_t size);
  208561             : 
  208562             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  208563           0 :           void operator delete (void* pointer)
  208564             :              {
  208565             :             // This is the generated delete operator...
  208566           0 :                SgOmpTargetSimdStatement::operator delete (pointer,sizeof(SgOmpTargetSimdStatement));
  208567             :              }
  208568             : 
  208569             :       /*! \brief Returns the total number of IR nodes of this type */
  208570             :           static size_t numberOfNodes();
  208571             : 
  208572             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  208573             :           static size_t memoryUsage();
  208574             : 
  208575             :       // End of scope which started in IR nodes specific code 
  208576             :       /* */
  208577             : 
  208578             :       /* name Internal Functions
  208579             :           \brief Internal functions ... incomplete-documentation
  208580             : 
  208581             :           These functions have been made public as part of the design, but they are suggested for internal use 
  208582             :           or by particularly knowledgeable users for specialized tools or applications.
  208583             : 
  208584             :           \internal We could not make these private because they are required by user for special purposes. And 
  208585             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  208586             :          
  208587             :        */
  208588             : 
  208589             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  208590             :        // overridden in every class by *generated* implementation
  208591             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  208592             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  208593             :        // MS: 06/28/02 container of names of variables or container indices 
  208594             :        // used used in the traversal to access AST successor nodes
  208595             :        // overridden in every class by *generated* implementation
  208596             :       /*! \brief container of names of variables or container indices used used in the traversal
  208597             :           to access AST successor nodes overridden in every class by *generated* implementation */
  208598             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  208599             : 
  208600             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  208601             :        // than all the vector copies. The implementation for these functions is generated for each class.
  208602             :       /*! \brief return number of children in the traversal successor list */
  208603             :           virtual size_t get_numberOfTraversalSuccessors() override;
  208604             :       /*! \brief index-based access to traversal successors by index number */
  208605             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  208606             :       /*! \brief index-based access to traversal successors by child node */
  208607             :           virtual size_t get_childIndex(SgNode *child) override;
  208608             : 
  208609             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  208610             :        // MS: 08/16/2002 method for generating RTI information
  208611             :       /*! \brief return C++ Runtime-Time-Information */
  208612             :           virtual RTIReturnType roseRTI() override;
  208613             : #endif
  208614             :       /* */
  208615             : 
  208616             : 
  208617             : 
  208618             :       /* name Deprecated Functions
  208619             :           \brief Deprecated functions ... incomplete-documentation
  208620             : 
  208621             :           These functions have been deprecated from use.
  208622             :        */
  208623             :       /* */
  208624             : 
  208625             :       /*! returns a C style string (char*) representing the class name */
  208626             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  208627             : 
  208628             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  208629             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  208630             : #if 0
  208631             :       /*! returns old style Sage II enum values */
  208632             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  208633             :       /*! returns old style Sage II enum values */
  208634             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  208635             : #endif
  208636             :       /* */
  208637             : 
  208638             : 
  208639             : 
  208640             : 
  208641             :      public:
  208642             :       /* name Traversal Support Functions
  208643             :           \brief Traversal support functions ... incomplete-documentation
  208644             : 
  208645             :           These functions have been made public as part of the design, but they are suggested for internal use 
  208646             :           or by particularly knowledgable users for specialized tools or applications.
  208647             :        */
  208648             :       /* */
  208649             : 
  208650             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  208651             :        // (inferior to ROSE traversal mechanism, experimental).
  208652             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  208653             :        */
  208654             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  208655             : 
  208656             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  208657             :       /*! \brief support for the classic visitor pattern done in GoF */
  208658             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  208659             : 
  208660             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  208661             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  208662             :        */
  208663             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  208664             : 
  208665             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  208666             :        */
  208667             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  208668             : 
  208669             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  208670             :        // This traversal helps support internal tools that call static member functions.
  208671             :        // note: this function operates on the memory pools.
  208672             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  208673             :        */
  208674             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  208675             :       /* */
  208676             : 
  208677             : 
  208678             :      public:
  208679             :       /* name Memory Allocation Functions
  208680             :           \brief Memory allocations functions ... incomplete-documentation
  208681             : 
  208682             :           These functions have been made public as part of the design, but they are suggested for internal use 
  208683             :           or by particularly knowledgable users for specialized tools or applications.
  208684             :        */
  208685             :       /* */
  208686             : 
  208687             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  208688             : 
  208689             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  208690             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  208691             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  208692             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  208693             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  208694             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  208695             :           being used with the AST File I/O mechanism.
  208696             :        */
  208697             :           virtual bool isInMemoryPool() override;
  208698             : 
  208699             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  208700             : 
  208701             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  208702             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  208703             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  208704             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  208705             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  208706             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  208707             :           being used with the AST File I/O mechanism.
  208708             :        */
  208709             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  208710             : 
  208711             :       // DQ (4/30/2006): Modified to be a const function.
  208712             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  208713             : 
  208714             :           This functions is part of general support for many possible tools to operate 
  208715             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  208716             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  208717             :           less than the set of pointers used by the AST file I/O. This is part of
  208718             :           work implemented by Andreas, and support tools such as the AST graph generation.
  208719             : 
  208720             :           \warning This function can return unexpected data members and thus the 
  208721             :                    order and the number of elements is unpredicable and subject 
  208722             :                    to change.
  208723             : 
  208724             :           \returns STL vector of pairs of SgNode* and strings
  208725             :        */
  208726             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  208727             : 
  208728             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  208729             : 
  208730             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  208731             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  208732             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  208733             : 
  208734             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  208735             :                    and subject to change.
  208736             :        */
  208737             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  208738             : 
  208739             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  208740             : 
  208741             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  208742             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  208743             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  208744             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  208745             : 
  208746             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  208747             : 
  208748             :           \returns long
  208749             :        */
  208750             :           virtual long getChildIndex( SgNode* childNode ) const override;
  208751             : 
  208752             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  208753             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  208754             :       /* \brief Constructor for use by AST File I/O Mechanism
  208755             : 
  208756             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  208757             :           which obtained via fast binary file I/O from disk.
  208758             :        */
  208759             :        // SgOmpTargetSimdStatement( SgOmpTargetSimdStatementStorageClass& source );
  208760             : 
  208761             : 
  208762             : 
  208763             : 
  208764             : 
  208765             :  // JH (10/24/2005): methods added to support the ast file IO
  208766             :     private:
  208767             : 
  208768             :       /* name AST Memory Allocation Support Functions
  208769             :           \brief Memory allocations support....
  208770             : 
  208771             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  208772             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  208773             :           and support the AST File I/O Mechanism.
  208774             :        */
  208775             :       /* */
  208776             : 
  208777             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  208778             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  208779             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  208780             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  208781             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  208782             :           a correspinding one in the AST_FILE_IO class!
  208783             :        */
  208784             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  208785             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  208786             :       /* \brief Typedef used for low level memory access.
  208787             :        */
  208788             :        // typedef unsigned char* TestType;
  208789             : 
  208790             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  208791             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  208792             :       /* \brief Typedef used to hold memory addresses as values.
  208793             :        */
  208794             :        // typedef unsigned long  AddressType;
  208795             : 
  208796             : 
  208797             : 
  208798             :        // necessary, to have direct access to the p_freepointer and the private methods !
  208799             :       /*! \brief friend class declaration to support AST File I/O */
  208800             :           friend class AST_FILE_IO;
  208801             : 
  208802             :       /*! \brief friend class declaration to support AST File I/O */
  208803             :           friend class SgOmpTargetSimdStatementStorageClass;
  208804             : 
  208805             :       /*! \brief friend class declaration to support AST File I/O */
  208806             :           friend class AstSpecificDataManagingClass;
  208807             : 
  208808             :       /*! \brief friend class declaration to support AST File I/O */
  208809             :           friend class AstSpecificDataManagingClassStorageClass;
  208810             :     public:
  208811             :       /*! \brief IR node constructor to support AST File I/O */
  208812             :           SgOmpTargetSimdStatement( const SgOmpTargetSimdStatementStorageClass& source );
  208813             : 
  208814             :  // private: // JJW hack
  208815             :        /*
  208816             :           name AST Memory Allocation Support Variables
  208817             :           Memory allocations support variables 
  208818             : 
  208819             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  208820             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  208821             :           and support the AST File I/O Mechanism.
  208822             :        */
  208823             :       /* */
  208824             : 
  208825             :     public:
  208826             : 
  208827             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  208828             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  208829             :       // virtual SgNode* addRegExpAttribute();
  208830             :       /*! \brief Support for AST matching using regular expression.
  208831             : 
  208832             :           This support is incomplete and the subject of current research to define 
  208833             :           RegEx trees to support inexact matching.
  208834             :        */
  208835             :           SgOmpTargetSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  208836             : 
  208837             : // *** COMMON CODE SECTION ENDS HERE ***
  208838             : 
  208839             : 
  208840             : // End of memberFunctionString
  208841             : // Start of memberFunctionString
  208842             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  208843             : 
  208844             :      // the generated cast function
  208845             :      // friend ROSE_DLL_API SgOmpTargetSimdStatement* isSgOmpTargetSimdStatement ( SgNode* s );
  208846             : 
  208847             :           typedef SgUpirFieldBodyStatement base_node_type;
  208848             : 
  208849             : 
  208850             : // End of memberFunctionString
  208851             : // Start of memberFunctionString
  208852             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  208853             : 
  208854             :           void post_construction_initialization() override;
  208855             : 
  208856             : 
  208857             : // End of memberFunctionString
  208858             : 
  208859             : 
  208860             :      public: 
  208861             :          virtual ~SgOmpTargetSimdStatement();
  208862             : 
  208863             : 
  208864             :      public: 
  208865             :          SgOmpTargetSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  208866             :          SgOmpTargetSimdStatement(SgStatement* body); 
  208867             : 
  208868             :     protected:
  208869             : 
  208870             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetSimdStatement>;
  208871             : 
  208872             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208873             : 
  208874             : 
  208875             :    };
  208876             : #endif
  208877             : 
  208878             : // postdeclarations for SgOmpTargetSimdStatement
  208879             : 
  208880             : /* #line 208881 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208881             : 
  208882             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  208883             : 
  208884             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208885             : 
  208886             : 
  208887             : /* #line 208888 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208888             : 
  208889             : 
  208890             : 
  208891             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208892             : 
  208893             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  208894             : //      This code is automatically generated for each 
  208895             : //      terminal and non-terminal within the defined 
  208896             : //      grammar.  There is a simple way to change the 
  208897             : //      code to fix bugs etc.  See the ROSE README file
  208898             : //      for directions.
  208899             : 
  208900             : // tps: (02/22/2010): Adding DLL export requirements
  208901             : #include "rosedll.h"
  208902             : 
  208903             : // predeclarations for SgOmpTargetTeamsStatement
  208904             : 
  208905             : /* #line 208906 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208906             : 
  208907             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  208908             : 
  208909             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  208910             : 
  208911             : #if 1
  208912             : // Class Definition for SgOmpTargetTeamsStatement
  208913             : class ROSE_DLL_API SgOmpTargetTeamsStatement  : public SgUpirFieldBodyStatement
  208914             :    {
  208915             :      public:
  208916             : 
  208917             : 
  208918             : /* #line 208919 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  208919             : 
  208920             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  208921             : // Start of memberFunctionString
  208922             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  208923             : 
  208924             : // *** COMMON CODE SECTION BEGINS HERE ***
  208925             : 
  208926             :     public:
  208927             : 
  208928             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  208929             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  208930             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  208931             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  208932             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  208933             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  208934             : 
  208935             :       /*! \brief returns a string representing the class name */
  208936             :           virtual std::string class_name() const override;
  208937             : 
  208938             :       /*! \brief returns new style SageIII enum values */
  208939             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  208940             : 
  208941             :       /*! \brief static variant value */
  208942             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  208943             :        // static const VariantT static_variant = V_SgOmpTargetTeamsStatement;
  208944             :           enum { static_variant = V_SgOmpTargetTeamsStatement };
  208945             : 
  208946             :        /* the generated cast function */
  208947             :       /*! \brief Casts pointer from base class to derived class */
  208948             :           ROSE_DLL_API friend       SgOmpTargetTeamsStatement* isSgOmpTargetTeamsStatement(       SgNode * s );
  208949             : 
  208950             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  208951             :           ROSE_DLL_API friend const SgOmpTargetTeamsStatement* isSgOmpTargetTeamsStatement( const SgNode * s );
  208952             : 
  208953             :      // ******************************************
  208954             :      // * Memory Pool / New / Delete
  208955             :      // ******************************************
  208956             : 
  208957             :      public:
  208958             :           /// \private
  208959             :           static const unsigned pool_size; //
  208960             :           /// \private
  208961             :           static std::vector<unsigned char *> pools; //
  208962             :           /// \private
  208963             :           static SgOmpTargetTeamsStatement * next_node; // 
  208964             : 
  208965             :           /// \private
  208966             :           static unsigned long initializeStorageClassArray(SgOmpTargetTeamsStatementStorageClass *); //
  208967             : 
  208968             :           /// \private
  208969             :           static void clearMemoryPool(); //
  208970             :           static void deleteMemoryPool(); //
  208971             : 
  208972             :           /// \private
  208973             :           static void extendMemoryPoolForFileIO(); //
  208974             : 
  208975             :           /// \private
  208976             :           static SgOmpTargetTeamsStatement * getPointerFromGlobalIndex(unsigned long); //
  208977             :           /// \private
  208978             :           static SgOmpTargetTeamsStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  208979             : 
  208980             :           /// \private
  208981             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  208982             :           /// \private
  208983             :           static void resetValidFreepointers(); //
  208984             :           /// \private
  208985             :           static unsigned long getNumberOfLastValidPointer(); //
  208986             : 
  208987             : 
  208988             : #if defined(INLINE_FUNCTIONS)
  208989             :       /*! \brief returns pointer to newly allocated IR node */
  208990             :           inline void *operator new (size_t size);
  208991             : #else
  208992             :       /*! \brief returns pointer to newly allocated IR node */
  208993             :           void *operator new (size_t size);
  208994             : #endif
  208995             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  208996             :           void operator delete (void* pointer, size_t size);
  208997             : 
  208998             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  208999           0 :           void operator delete (void* pointer)
  209000             :              {
  209001             :             // This is the generated delete operator...
  209002           0 :                SgOmpTargetTeamsStatement::operator delete (pointer,sizeof(SgOmpTargetTeamsStatement));
  209003             :              }
  209004             : 
  209005             :       /*! \brief Returns the total number of IR nodes of this type */
  209006             :           static size_t numberOfNodes();
  209007             : 
  209008             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  209009             :           static size_t memoryUsage();
  209010             : 
  209011             :       // End of scope which started in IR nodes specific code 
  209012             :       /* */
  209013             : 
  209014             :       /* name Internal Functions
  209015             :           \brief Internal functions ... incomplete-documentation
  209016             : 
  209017             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209018             :           or by particularly knowledgeable users for specialized tools or applications.
  209019             : 
  209020             :           \internal We could not make these private because they are required by user for special purposes. And 
  209021             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  209022             :          
  209023             :        */
  209024             : 
  209025             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  209026             :        // overridden in every class by *generated* implementation
  209027             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  209028             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  209029             :        // MS: 06/28/02 container of names of variables or container indices 
  209030             :        // used used in the traversal to access AST successor nodes
  209031             :        // overridden in every class by *generated* implementation
  209032             :       /*! \brief container of names of variables or container indices used used in the traversal
  209033             :           to access AST successor nodes overridden in every class by *generated* implementation */
  209034             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  209035             : 
  209036             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  209037             :        // than all the vector copies. The implementation for these functions is generated for each class.
  209038             :       /*! \brief return number of children in the traversal successor list */
  209039             :           virtual size_t get_numberOfTraversalSuccessors() override;
  209040             :       /*! \brief index-based access to traversal successors by index number */
  209041             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  209042             :       /*! \brief index-based access to traversal successors by child node */
  209043             :           virtual size_t get_childIndex(SgNode *child) override;
  209044             : 
  209045             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  209046             :        // MS: 08/16/2002 method for generating RTI information
  209047             :       /*! \brief return C++ Runtime-Time-Information */
  209048             :           virtual RTIReturnType roseRTI() override;
  209049             : #endif
  209050             :       /* */
  209051             : 
  209052             : 
  209053             : 
  209054             :       /* name Deprecated Functions
  209055             :           \brief Deprecated functions ... incomplete-documentation
  209056             : 
  209057             :           These functions have been deprecated from use.
  209058             :        */
  209059             :       /* */
  209060             : 
  209061             :       /*! returns a C style string (char*) representing the class name */
  209062             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  209063             : 
  209064             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  209065             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  209066             : #if 0
  209067             :       /*! returns old style Sage II enum values */
  209068             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  209069             :       /*! returns old style Sage II enum values */
  209070             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  209071             : #endif
  209072             :       /* */
  209073             : 
  209074             : 
  209075             : 
  209076             : 
  209077             :      public:
  209078             :       /* name Traversal Support Functions
  209079             :           \brief Traversal support functions ... incomplete-documentation
  209080             : 
  209081             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209082             :           or by particularly knowledgable users for specialized tools or applications.
  209083             :        */
  209084             :       /* */
  209085             : 
  209086             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  209087             :        // (inferior to ROSE traversal mechanism, experimental).
  209088             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  209089             :        */
  209090             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  209091             : 
  209092             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  209093             :       /*! \brief support for the classic visitor pattern done in GoF */
  209094             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  209095             : 
  209096             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  209097             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  209098             :        */
  209099             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  209100             : 
  209101             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  209102             :        */
  209103             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  209104             : 
  209105             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  209106             :        // This traversal helps support internal tools that call static member functions.
  209107             :        // note: this function operates on the memory pools.
  209108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  209109             :        */
  209110             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  209111             :       /* */
  209112             : 
  209113             : 
  209114             :      public:
  209115             :       /* name Memory Allocation Functions
  209116             :           \brief Memory allocations functions ... incomplete-documentation
  209117             : 
  209118             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209119             :           or by particularly knowledgable users for specialized tools or applications.
  209120             :        */
  209121             :       /* */
  209122             : 
  209123             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  209124             : 
  209125             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  209126             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  209127             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  209128             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  209129             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  209130             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  209131             :           being used with the AST File I/O mechanism.
  209132             :        */
  209133             :           virtual bool isInMemoryPool() override;
  209134             : 
  209135             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  209136             : 
  209137             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  209138             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  209139             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  209140             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  209141             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  209142             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  209143             :           being used with the AST File I/O mechanism.
  209144             :        */
  209145             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  209146             : 
  209147             :       // DQ (4/30/2006): Modified to be a const function.
  209148             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  209149             : 
  209150             :           This functions is part of general support for many possible tools to operate 
  209151             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  209152             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  209153             :           less than the set of pointers used by the AST file I/O. This is part of
  209154             :           work implemented by Andreas, and support tools such as the AST graph generation.
  209155             : 
  209156             :           \warning This function can return unexpected data members and thus the 
  209157             :                    order and the number of elements is unpredicable and subject 
  209158             :                    to change.
  209159             : 
  209160             :           \returns STL vector of pairs of SgNode* and strings
  209161             :        */
  209162             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  209163             : 
  209164             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  209165             : 
  209166             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  209167             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  209168             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  209169             : 
  209170             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  209171             :                    and subject to change.
  209172             :        */
  209173             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  209174             : 
  209175             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  209176             : 
  209177             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  209178             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  209179             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  209180             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  209181             : 
  209182             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  209183             : 
  209184             :           \returns long
  209185             :        */
  209186             :           virtual long getChildIndex( SgNode* childNode ) const override;
  209187             : 
  209188             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  209189             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  209190             :       /* \brief Constructor for use by AST File I/O Mechanism
  209191             : 
  209192             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  209193             :           which obtained via fast binary file I/O from disk.
  209194             :        */
  209195             :        // SgOmpTargetTeamsStatement( SgOmpTargetTeamsStatementStorageClass& source );
  209196             : 
  209197             : 
  209198             : 
  209199             : 
  209200             : 
  209201             :  // JH (10/24/2005): methods added to support the ast file IO
  209202             :     private:
  209203             : 
  209204             :       /* name AST Memory Allocation Support Functions
  209205             :           \brief Memory allocations support....
  209206             : 
  209207             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  209208             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  209209             :           and support the AST File I/O Mechanism.
  209210             :        */
  209211             :       /* */
  209212             : 
  209213             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  209214             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  209215             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  209216             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  209217             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  209218             :           a correspinding one in the AST_FILE_IO class!
  209219             :        */
  209220             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  209221             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  209222             :       /* \brief Typedef used for low level memory access.
  209223             :        */
  209224             :        // typedef unsigned char* TestType;
  209225             : 
  209226             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  209227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  209228             :       /* \brief Typedef used to hold memory addresses as values.
  209229             :        */
  209230             :        // typedef unsigned long  AddressType;
  209231             : 
  209232             : 
  209233             : 
  209234             :        // necessary, to have direct access to the p_freepointer and the private methods !
  209235             :       /*! \brief friend class declaration to support AST File I/O */
  209236             :           friend class AST_FILE_IO;
  209237             : 
  209238             :       /*! \brief friend class declaration to support AST File I/O */
  209239             :           friend class SgOmpTargetTeamsStatementStorageClass;
  209240             : 
  209241             :       /*! \brief friend class declaration to support AST File I/O */
  209242             :           friend class AstSpecificDataManagingClass;
  209243             : 
  209244             :       /*! \brief friend class declaration to support AST File I/O */
  209245             :           friend class AstSpecificDataManagingClassStorageClass;
  209246             :     public:
  209247             :       /*! \brief IR node constructor to support AST File I/O */
  209248             :           SgOmpTargetTeamsStatement( const SgOmpTargetTeamsStatementStorageClass& source );
  209249             : 
  209250             :  // private: // JJW hack
  209251             :        /*
  209252             :           name AST Memory Allocation Support Variables
  209253             :           Memory allocations support variables 
  209254             : 
  209255             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  209256             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  209257             :           and support the AST File I/O Mechanism.
  209258             :        */
  209259             :       /* */
  209260             : 
  209261             :     public:
  209262             : 
  209263             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  209264             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  209265             :       // virtual SgNode* addRegExpAttribute();
  209266             :       /*! \brief Support for AST matching using regular expression.
  209267             : 
  209268             :           This support is incomplete and the subject of current research to define 
  209269             :           RegEx trees to support inexact matching.
  209270             :        */
  209271             :           SgOmpTargetTeamsStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  209272             : 
  209273             : // *** COMMON CODE SECTION ENDS HERE ***
  209274             : 
  209275             : 
  209276             : // End of memberFunctionString
  209277             : // Start of memberFunctionString
  209278             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  209279             : 
  209280             :      // the generated cast function
  209281             :      // friend ROSE_DLL_API SgOmpTargetTeamsStatement* isSgOmpTargetTeamsStatement ( SgNode* s );
  209282             : 
  209283             :           typedef SgUpirFieldBodyStatement base_node_type;
  209284             : 
  209285             : 
  209286             : // End of memberFunctionString
  209287             : // Start of memberFunctionString
  209288             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  209289             : 
  209290             :           void post_construction_initialization() override;
  209291             : 
  209292             : 
  209293             : // End of memberFunctionString
  209294             : 
  209295             : 
  209296             :      public: 
  209297             :          virtual ~SgOmpTargetTeamsStatement();
  209298             : 
  209299             : 
  209300             :      public: 
  209301             :          SgOmpTargetTeamsStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  209302             :          SgOmpTargetTeamsStatement(SgStatement* body); 
  209303             : 
  209304             :     protected:
  209305             : 
  209306             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetTeamsStatement>;
  209307             : 
  209308             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209309             : 
  209310             : 
  209311             :    };
  209312             : #endif
  209313             : 
  209314             : // postdeclarations for SgOmpTargetTeamsStatement
  209315             : 
  209316             : /* #line 209317 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209317             : 
  209318             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  209319             : 
  209320             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209321             : 
  209322             : 
  209323             : /* #line 209324 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209324             : 
  209325             : 
  209326             : 
  209327             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209328             : 
  209329             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  209330             : //      This code is automatically generated for each 
  209331             : //      terminal and non-terminal within the defined 
  209332             : //      grammar.  There is a simple way to change the 
  209333             : //      code to fix bugs etc.  See the ROSE README file
  209334             : //      for directions.
  209335             : 
  209336             : // tps: (02/22/2010): Adding DLL export requirements
  209337             : #include "rosedll.h"
  209338             : 
  209339             : // predeclarations for SgOmpTargetTeamsDistributeStatement
  209340             : 
  209341             : /* #line 209342 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209342             : 
  209343             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  209344             : 
  209345             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209346             : 
  209347             : #if 1
  209348             : // Class Definition for SgOmpTargetTeamsDistributeStatement
  209349             : class ROSE_DLL_API SgOmpTargetTeamsDistributeStatement  : public SgUpirFieldBodyStatement
  209350             :    {
  209351             :      public:
  209352             : 
  209353             : 
  209354             : /* #line 209355 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209355             : 
  209356             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  209357             : // Start of memberFunctionString
  209358             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  209359             : 
  209360             : // *** COMMON CODE SECTION BEGINS HERE ***
  209361             : 
  209362             :     public:
  209363             : 
  209364             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  209365             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  209366             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  209367             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  209368             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  209369             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  209370             : 
  209371             :       /*! \brief returns a string representing the class name */
  209372             :           virtual std::string class_name() const override;
  209373             : 
  209374             :       /*! \brief returns new style SageIII enum values */
  209375             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  209376             : 
  209377             :       /*! \brief static variant value */
  209378             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  209379             :        // static const VariantT static_variant = V_SgOmpTargetTeamsDistributeStatement;
  209380             :           enum { static_variant = V_SgOmpTargetTeamsDistributeStatement };
  209381             : 
  209382             :        /* the generated cast function */
  209383             :       /*! \brief Casts pointer from base class to derived class */
  209384             :           ROSE_DLL_API friend       SgOmpTargetTeamsDistributeStatement* isSgOmpTargetTeamsDistributeStatement(       SgNode * s );
  209385             : 
  209386             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  209387             :           ROSE_DLL_API friend const SgOmpTargetTeamsDistributeStatement* isSgOmpTargetTeamsDistributeStatement( const SgNode * s );
  209388             : 
  209389             :      // ******************************************
  209390             :      // * Memory Pool / New / Delete
  209391             :      // ******************************************
  209392             : 
  209393             :      public:
  209394             :           /// \private
  209395             :           static const unsigned pool_size; //
  209396             :           /// \private
  209397             :           static std::vector<unsigned char *> pools; //
  209398             :           /// \private
  209399             :           static SgOmpTargetTeamsDistributeStatement * next_node; // 
  209400             : 
  209401             :           /// \private
  209402             :           static unsigned long initializeStorageClassArray(SgOmpTargetTeamsDistributeStatementStorageClass *); //
  209403             : 
  209404             :           /// \private
  209405             :           static void clearMemoryPool(); //
  209406             :           static void deleteMemoryPool(); //
  209407             : 
  209408             :           /// \private
  209409             :           static void extendMemoryPoolForFileIO(); //
  209410             : 
  209411             :           /// \private
  209412             :           static SgOmpTargetTeamsDistributeStatement * getPointerFromGlobalIndex(unsigned long); //
  209413             :           /// \private
  209414             :           static SgOmpTargetTeamsDistributeStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  209415             : 
  209416             :           /// \private
  209417             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  209418             :           /// \private
  209419             :           static void resetValidFreepointers(); //
  209420             :           /// \private
  209421             :           static unsigned long getNumberOfLastValidPointer(); //
  209422             : 
  209423             : 
  209424             : #if defined(INLINE_FUNCTIONS)
  209425             :       /*! \brief returns pointer to newly allocated IR node */
  209426             :           inline void *operator new (size_t size);
  209427             : #else
  209428             :       /*! \brief returns pointer to newly allocated IR node */
  209429             :           void *operator new (size_t size);
  209430             : #endif
  209431             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  209432             :           void operator delete (void* pointer, size_t size);
  209433             : 
  209434             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  209435           0 :           void operator delete (void* pointer)
  209436             :              {
  209437             :             // This is the generated delete operator...
  209438           0 :                SgOmpTargetTeamsDistributeStatement::operator delete (pointer,sizeof(SgOmpTargetTeamsDistributeStatement));
  209439             :              }
  209440             : 
  209441             :       /*! \brief Returns the total number of IR nodes of this type */
  209442             :           static size_t numberOfNodes();
  209443             : 
  209444             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  209445             :           static size_t memoryUsage();
  209446             : 
  209447             :       // End of scope which started in IR nodes specific code 
  209448             :       /* */
  209449             : 
  209450             :       /* name Internal Functions
  209451             :           \brief Internal functions ... incomplete-documentation
  209452             : 
  209453             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209454             :           or by particularly knowledgeable users for specialized tools or applications.
  209455             : 
  209456             :           \internal We could not make these private because they are required by user for special purposes. And 
  209457             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  209458             :          
  209459             :        */
  209460             : 
  209461             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  209462             :        // overridden in every class by *generated* implementation
  209463             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  209464             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  209465             :        // MS: 06/28/02 container of names of variables or container indices 
  209466             :        // used used in the traversal to access AST successor nodes
  209467             :        // overridden in every class by *generated* implementation
  209468             :       /*! \brief container of names of variables or container indices used used in the traversal
  209469             :           to access AST successor nodes overridden in every class by *generated* implementation */
  209470             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  209471             : 
  209472             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  209473             :        // than all the vector copies. The implementation for these functions is generated for each class.
  209474             :       /*! \brief return number of children in the traversal successor list */
  209475             :           virtual size_t get_numberOfTraversalSuccessors() override;
  209476             :       /*! \brief index-based access to traversal successors by index number */
  209477             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  209478             :       /*! \brief index-based access to traversal successors by child node */
  209479             :           virtual size_t get_childIndex(SgNode *child) override;
  209480             : 
  209481             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  209482             :        // MS: 08/16/2002 method for generating RTI information
  209483             :       /*! \brief return C++ Runtime-Time-Information */
  209484             :           virtual RTIReturnType roseRTI() override;
  209485             : #endif
  209486             :       /* */
  209487             : 
  209488             : 
  209489             : 
  209490             :       /* name Deprecated Functions
  209491             :           \brief Deprecated functions ... incomplete-documentation
  209492             : 
  209493             :           These functions have been deprecated from use.
  209494             :        */
  209495             :       /* */
  209496             : 
  209497             :       /*! returns a C style string (char*) representing the class name */
  209498             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  209499             : 
  209500             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  209501             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  209502             : #if 0
  209503             :       /*! returns old style Sage II enum values */
  209504             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  209505             :       /*! returns old style Sage II enum values */
  209506             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  209507             : #endif
  209508             :       /* */
  209509             : 
  209510             : 
  209511             : 
  209512             : 
  209513             :      public:
  209514             :       /* name Traversal Support Functions
  209515             :           \brief Traversal support functions ... incomplete-documentation
  209516             : 
  209517             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209518             :           or by particularly knowledgable users for specialized tools or applications.
  209519             :        */
  209520             :       /* */
  209521             : 
  209522             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  209523             :        // (inferior to ROSE traversal mechanism, experimental).
  209524             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  209525             :        */
  209526             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  209527             : 
  209528             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  209529             :       /*! \brief support for the classic visitor pattern done in GoF */
  209530             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  209531             : 
  209532             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  209533             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  209534             :        */
  209535             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  209536             : 
  209537             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  209538             :        */
  209539             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  209540             : 
  209541             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  209542             :        // This traversal helps support internal tools that call static member functions.
  209543             :        // note: this function operates on the memory pools.
  209544             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  209545             :        */
  209546             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  209547             :       /* */
  209548             : 
  209549             : 
  209550             :      public:
  209551             :       /* name Memory Allocation Functions
  209552             :           \brief Memory allocations functions ... incomplete-documentation
  209553             : 
  209554             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209555             :           or by particularly knowledgable users for specialized tools or applications.
  209556             :        */
  209557             :       /* */
  209558             : 
  209559             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  209560             : 
  209561             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  209562             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  209563             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  209564             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  209565             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  209566             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  209567             :           being used with the AST File I/O mechanism.
  209568             :        */
  209569             :           virtual bool isInMemoryPool() override;
  209570             : 
  209571             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  209572             : 
  209573             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  209574             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  209575             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  209576             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  209577             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  209578             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  209579             :           being used with the AST File I/O mechanism.
  209580             :        */
  209581             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  209582             : 
  209583             :       // DQ (4/30/2006): Modified to be a const function.
  209584             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  209585             : 
  209586             :           This functions is part of general support for many possible tools to operate 
  209587             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  209588             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  209589             :           less than the set of pointers used by the AST file I/O. This is part of
  209590             :           work implemented by Andreas, and support tools such as the AST graph generation.
  209591             : 
  209592             :           \warning This function can return unexpected data members and thus the 
  209593             :                    order and the number of elements is unpredicable and subject 
  209594             :                    to change.
  209595             : 
  209596             :           \returns STL vector of pairs of SgNode* and strings
  209597             :        */
  209598             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  209599             : 
  209600             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  209601             : 
  209602             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  209603             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  209604             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  209605             : 
  209606             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  209607             :                    and subject to change.
  209608             :        */
  209609             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  209610             : 
  209611             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  209612             : 
  209613             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  209614             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  209615             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  209616             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  209617             : 
  209618             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  209619             : 
  209620             :           \returns long
  209621             :        */
  209622             :           virtual long getChildIndex( SgNode* childNode ) const override;
  209623             : 
  209624             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  209625             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  209626             :       /* \brief Constructor for use by AST File I/O Mechanism
  209627             : 
  209628             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  209629             :           which obtained via fast binary file I/O from disk.
  209630             :        */
  209631             :        // SgOmpTargetTeamsDistributeStatement( SgOmpTargetTeamsDistributeStatementStorageClass& source );
  209632             : 
  209633             : 
  209634             : 
  209635             : 
  209636             : 
  209637             :  // JH (10/24/2005): methods added to support the ast file IO
  209638             :     private:
  209639             : 
  209640             :       /* name AST Memory Allocation Support Functions
  209641             :           \brief Memory allocations support....
  209642             : 
  209643             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  209644             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  209645             :           and support the AST File I/O Mechanism.
  209646             :        */
  209647             :       /* */
  209648             : 
  209649             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  209650             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  209651             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  209652             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  209653             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  209654             :           a correspinding one in the AST_FILE_IO class!
  209655             :        */
  209656             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  209657             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  209658             :       /* \brief Typedef used for low level memory access.
  209659             :        */
  209660             :        // typedef unsigned char* TestType;
  209661             : 
  209662             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  209663             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  209664             :       /* \brief Typedef used to hold memory addresses as values.
  209665             :        */
  209666             :        // typedef unsigned long  AddressType;
  209667             : 
  209668             : 
  209669             : 
  209670             :        // necessary, to have direct access to the p_freepointer and the private methods !
  209671             :       /*! \brief friend class declaration to support AST File I/O */
  209672             :           friend class AST_FILE_IO;
  209673             : 
  209674             :       /*! \brief friend class declaration to support AST File I/O */
  209675             :           friend class SgOmpTargetTeamsDistributeStatementStorageClass;
  209676             : 
  209677             :       /*! \brief friend class declaration to support AST File I/O */
  209678             :           friend class AstSpecificDataManagingClass;
  209679             : 
  209680             :       /*! \brief friend class declaration to support AST File I/O */
  209681             :           friend class AstSpecificDataManagingClassStorageClass;
  209682             :     public:
  209683             :       /*! \brief IR node constructor to support AST File I/O */
  209684             :           SgOmpTargetTeamsDistributeStatement( const SgOmpTargetTeamsDistributeStatementStorageClass& source );
  209685             : 
  209686             :  // private: // JJW hack
  209687             :        /*
  209688             :           name AST Memory Allocation Support Variables
  209689             :           Memory allocations support variables 
  209690             : 
  209691             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  209692             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  209693             :           and support the AST File I/O Mechanism.
  209694             :        */
  209695             :       /* */
  209696             : 
  209697             :     public:
  209698             : 
  209699             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  209700             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  209701             :       // virtual SgNode* addRegExpAttribute();
  209702             :       /*! \brief Support for AST matching using regular expression.
  209703             : 
  209704             :           This support is incomplete and the subject of current research to define 
  209705             :           RegEx trees to support inexact matching.
  209706             :        */
  209707             :           SgOmpTargetTeamsDistributeStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  209708             : 
  209709             : // *** COMMON CODE SECTION ENDS HERE ***
  209710             : 
  209711             : 
  209712             : // End of memberFunctionString
  209713             : // Start of memberFunctionString
  209714             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  209715             : 
  209716             :      // the generated cast function
  209717             :      // friend ROSE_DLL_API SgOmpTargetTeamsDistributeStatement* isSgOmpTargetTeamsDistributeStatement ( SgNode* s );
  209718             : 
  209719             :           typedef SgUpirFieldBodyStatement base_node_type;
  209720             : 
  209721             : 
  209722             : // End of memberFunctionString
  209723             : // Start of memberFunctionString
  209724             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  209725             : 
  209726             :           void post_construction_initialization() override;
  209727             : 
  209728             : 
  209729             : // End of memberFunctionString
  209730             : 
  209731             : 
  209732             :      public: 
  209733             :          virtual ~SgOmpTargetTeamsDistributeStatement();
  209734             : 
  209735             : 
  209736             :      public: 
  209737             :          SgOmpTargetTeamsDistributeStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  209738             :          SgOmpTargetTeamsDistributeStatement(SgStatement* body); 
  209739             : 
  209740             :     protected:
  209741             : 
  209742             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetTeamsDistributeStatement>;
  209743             : 
  209744             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209745             : 
  209746             : 
  209747             :    };
  209748             : #endif
  209749             : 
  209750             : // postdeclarations for SgOmpTargetTeamsDistributeStatement
  209751             : 
  209752             : /* #line 209753 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209753             : 
  209754             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  209755             : 
  209756             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209757             : 
  209758             : 
  209759             : /* #line 209760 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209760             : 
  209761             : 
  209762             : 
  209763             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209764             : 
  209765             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  209766             : //      This code is automatically generated for each 
  209767             : //      terminal and non-terminal within the defined 
  209768             : //      grammar.  There is a simple way to change the 
  209769             : //      code to fix bugs etc.  See the ROSE README file
  209770             : //      for directions.
  209771             : 
  209772             : // tps: (02/22/2010): Adding DLL export requirements
  209773             : #include "rosedll.h"
  209774             : 
  209775             : // predeclarations for SgOmpTargetTeamsDistributeSimdStatement
  209776             : 
  209777             : /* #line 209778 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209778             : 
  209779             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  209780             : 
  209781             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  209782             : 
  209783             : #if 1
  209784             : // Class Definition for SgOmpTargetTeamsDistributeSimdStatement
  209785             : class ROSE_DLL_API SgOmpTargetTeamsDistributeSimdStatement  : public SgUpirFieldBodyStatement
  209786             :    {
  209787             :      public:
  209788             : 
  209789             : 
  209790             : /* #line 209791 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  209791             : 
  209792             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  209793             : // Start of memberFunctionString
  209794             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  209795             : 
  209796             : // *** COMMON CODE SECTION BEGINS HERE ***
  209797             : 
  209798             :     public:
  209799             : 
  209800             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  209801             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  209802             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  209803             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  209804             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  209805             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  209806             : 
  209807             :       /*! \brief returns a string representing the class name */
  209808             :           virtual std::string class_name() const override;
  209809             : 
  209810             :       /*! \brief returns new style SageIII enum values */
  209811             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  209812             : 
  209813             :       /*! \brief static variant value */
  209814             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  209815             :        // static const VariantT static_variant = V_SgOmpTargetTeamsDistributeSimdStatement;
  209816             :           enum { static_variant = V_SgOmpTargetTeamsDistributeSimdStatement };
  209817             : 
  209818             :        /* the generated cast function */
  209819             :       /*! \brief Casts pointer from base class to derived class */
  209820             :           ROSE_DLL_API friend       SgOmpTargetTeamsDistributeSimdStatement* isSgOmpTargetTeamsDistributeSimdStatement(       SgNode * s );
  209821             : 
  209822             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  209823             :           ROSE_DLL_API friend const SgOmpTargetTeamsDistributeSimdStatement* isSgOmpTargetTeamsDistributeSimdStatement( const SgNode * s );
  209824             : 
  209825             :      // ******************************************
  209826             :      // * Memory Pool / New / Delete
  209827             :      // ******************************************
  209828             : 
  209829             :      public:
  209830             :           /// \private
  209831             :           static const unsigned pool_size; //
  209832             :           /// \private
  209833             :           static std::vector<unsigned char *> pools; //
  209834             :           /// \private
  209835             :           static SgOmpTargetTeamsDistributeSimdStatement * next_node; // 
  209836             : 
  209837             :           /// \private
  209838             :           static unsigned long initializeStorageClassArray(SgOmpTargetTeamsDistributeSimdStatementStorageClass *); //
  209839             : 
  209840             :           /// \private
  209841             :           static void clearMemoryPool(); //
  209842             :           static void deleteMemoryPool(); //
  209843             : 
  209844             :           /// \private
  209845             :           static void extendMemoryPoolForFileIO(); //
  209846             : 
  209847             :           /// \private
  209848             :           static SgOmpTargetTeamsDistributeSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  209849             :           /// \private
  209850             :           static SgOmpTargetTeamsDistributeSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  209851             : 
  209852             :           /// \private
  209853             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  209854             :           /// \private
  209855             :           static void resetValidFreepointers(); //
  209856             :           /// \private
  209857             :           static unsigned long getNumberOfLastValidPointer(); //
  209858             : 
  209859             : 
  209860             : #if defined(INLINE_FUNCTIONS)
  209861             :       /*! \brief returns pointer to newly allocated IR node */
  209862             :           inline void *operator new (size_t size);
  209863             : #else
  209864             :       /*! \brief returns pointer to newly allocated IR node */
  209865             :           void *operator new (size_t size);
  209866             : #endif
  209867             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  209868             :           void operator delete (void* pointer, size_t size);
  209869             : 
  209870             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  209871           0 :           void operator delete (void* pointer)
  209872             :              {
  209873             :             // This is the generated delete operator...
  209874           0 :                SgOmpTargetTeamsDistributeSimdStatement::operator delete (pointer,sizeof(SgOmpTargetTeamsDistributeSimdStatement));
  209875             :              }
  209876             : 
  209877             :       /*! \brief Returns the total number of IR nodes of this type */
  209878             :           static size_t numberOfNodes();
  209879             : 
  209880             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  209881             :           static size_t memoryUsage();
  209882             : 
  209883             :       // End of scope which started in IR nodes specific code 
  209884             :       /* */
  209885             : 
  209886             :       /* name Internal Functions
  209887             :           \brief Internal functions ... incomplete-documentation
  209888             : 
  209889             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209890             :           or by particularly knowledgeable users for specialized tools or applications.
  209891             : 
  209892             :           \internal We could not make these private because they are required by user for special purposes. And 
  209893             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  209894             :          
  209895             :        */
  209896             : 
  209897             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  209898             :        // overridden in every class by *generated* implementation
  209899             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  209900             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  209901             :        // MS: 06/28/02 container of names of variables or container indices 
  209902             :        // used used in the traversal to access AST successor nodes
  209903             :        // overridden in every class by *generated* implementation
  209904             :       /*! \brief container of names of variables or container indices used used in the traversal
  209905             :           to access AST successor nodes overridden in every class by *generated* implementation */
  209906             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  209907             : 
  209908             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  209909             :        // than all the vector copies. The implementation for these functions is generated for each class.
  209910             :       /*! \brief return number of children in the traversal successor list */
  209911             :           virtual size_t get_numberOfTraversalSuccessors() override;
  209912             :       /*! \brief index-based access to traversal successors by index number */
  209913             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  209914             :       /*! \brief index-based access to traversal successors by child node */
  209915             :           virtual size_t get_childIndex(SgNode *child) override;
  209916             : 
  209917             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  209918             :        // MS: 08/16/2002 method for generating RTI information
  209919             :       /*! \brief return C++ Runtime-Time-Information */
  209920             :           virtual RTIReturnType roseRTI() override;
  209921             : #endif
  209922             :       /* */
  209923             : 
  209924             : 
  209925             : 
  209926             :       /* name Deprecated Functions
  209927             :           \brief Deprecated functions ... incomplete-documentation
  209928             : 
  209929             :           These functions have been deprecated from use.
  209930             :        */
  209931             :       /* */
  209932             : 
  209933             :       /*! returns a C style string (char*) representing the class name */
  209934             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  209935             : 
  209936             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  209937             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  209938             : #if 0
  209939             :       /*! returns old style Sage II enum values */
  209940             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  209941             :       /*! returns old style Sage II enum values */
  209942             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  209943             : #endif
  209944             :       /* */
  209945             : 
  209946             : 
  209947             : 
  209948             : 
  209949             :      public:
  209950             :       /* name Traversal Support Functions
  209951             :           \brief Traversal support functions ... incomplete-documentation
  209952             : 
  209953             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209954             :           or by particularly knowledgable users for specialized tools or applications.
  209955             :        */
  209956             :       /* */
  209957             : 
  209958             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  209959             :        // (inferior to ROSE traversal mechanism, experimental).
  209960             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  209961             :        */
  209962             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  209963             : 
  209964             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  209965             :       /*! \brief support for the classic visitor pattern done in GoF */
  209966             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  209967             : 
  209968             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  209969             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  209970             :        */
  209971             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  209972             : 
  209973             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  209974             :        */
  209975             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  209976             : 
  209977             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  209978             :        // This traversal helps support internal tools that call static member functions.
  209979             :        // note: this function operates on the memory pools.
  209980             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  209981             :        */
  209982             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  209983             :       /* */
  209984             : 
  209985             : 
  209986             :      public:
  209987             :       /* name Memory Allocation Functions
  209988             :           \brief Memory allocations functions ... incomplete-documentation
  209989             : 
  209990             :           These functions have been made public as part of the design, but they are suggested for internal use 
  209991             :           or by particularly knowledgable users for specialized tools or applications.
  209992             :        */
  209993             :       /* */
  209994             : 
  209995             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  209996             : 
  209997             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  209998             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  209999             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  210000             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  210001             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  210002             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  210003             :           being used with the AST File I/O mechanism.
  210004             :        */
  210005             :           virtual bool isInMemoryPool() override;
  210006             : 
  210007             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  210008             : 
  210009             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  210010             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  210011             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  210012             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  210013             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  210014             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  210015             :           being used with the AST File I/O mechanism.
  210016             :        */
  210017             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  210018             : 
  210019             :       // DQ (4/30/2006): Modified to be a const function.
  210020             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  210021             : 
  210022             :           This functions is part of general support for many possible tools to operate 
  210023             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  210024             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  210025             :           less than the set of pointers used by the AST file I/O. This is part of
  210026             :           work implemented by Andreas, and support tools such as the AST graph generation.
  210027             : 
  210028             :           \warning This function can return unexpected data members and thus the 
  210029             :                    order and the number of elements is unpredicable and subject 
  210030             :                    to change.
  210031             : 
  210032             :           \returns STL vector of pairs of SgNode* and strings
  210033             :        */
  210034             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  210035             : 
  210036             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  210037             : 
  210038             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  210039             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  210040             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  210041             : 
  210042             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  210043             :                    and subject to change.
  210044             :        */
  210045             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  210046             : 
  210047             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  210048             : 
  210049             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  210050             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  210051             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  210052             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  210053             : 
  210054             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  210055             : 
  210056             :           \returns long
  210057             :        */
  210058             :           virtual long getChildIndex( SgNode* childNode ) const override;
  210059             : 
  210060             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  210061             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210062             :       /* \brief Constructor for use by AST File I/O Mechanism
  210063             : 
  210064             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  210065             :           which obtained via fast binary file I/O from disk.
  210066             :        */
  210067             :        // SgOmpTargetTeamsDistributeSimdStatement( SgOmpTargetTeamsDistributeSimdStatementStorageClass& source );
  210068             : 
  210069             : 
  210070             : 
  210071             : 
  210072             : 
  210073             :  // JH (10/24/2005): methods added to support the ast file IO
  210074             :     private:
  210075             : 
  210076             :       /* name AST Memory Allocation Support Functions
  210077             :           \brief Memory allocations support....
  210078             : 
  210079             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  210080             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  210081             :           and support the AST File I/O Mechanism.
  210082             :        */
  210083             :       /* */
  210084             : 
  210085             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  210086             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  210087             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  210088             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  210089             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  210090             :           a correspinding one in the AST_FILE_IO class!
  210091             :        */
  210092             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  210093             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210094             :       /* \brief Typedef used for low level memory access.
  210095             :        */
  210096             :        // typedef unsigned char* TestType;
  210097             : 
  210098             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  210099             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210100             :       /* \brief Typedef used to hold memory addresses as values.
  210101             :        */
  210102             :        // typedef unsigned long  AddressType;
  210103             : 
  210104             : 
  210105             : 
  210106             :        // necessary, to have direct access to the p_freepointer and the private methods !
  210107             :       /*! \brief friend class declaration to support AST File I/O */
  210108             :           friend class AST_FILE_IO;
  210109             : 
  210110             :       /*! \brief friend class declaration to support AST File I/O */
  210111             :           friend class SgOmpTargetTeamsDistributeSimdStatementStorageClass;
  210112             : 
  210113             :       /*! \brief friend class declaration to support AST File I/O */
  210114             :           friend class AstSpecificDataManagingClass;
  210115             : 
  210116             :       /*! \brief friend class declaration to support AST File I/O */
  210117             :           friend class AstSpecificDataManagingClassStorageClass;
  210118             :     public:
  210119             :       /*! \brief IR node constructor to support AST File I/O */
  210120             :           SgOmpTargetTeamsDistributeSimdStatement( const SgOmpTargetTeamsDistributeSimdStatementStorageClass& source );
  210121             : 
  210122             :  // private: // JJW hack
  210123             :        /*
  210124             :           name AST Memory Allocation Support Variables
  210125             :           Memory allocations support variables 
  210126             : 
  210127             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  210128             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  210129             :           and support the AST File I/O Mechanism.
  210130             :        */
  210131             :       /* */
  210132             : 
  210133             :     public:
  210134             : 
  210135             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  210136             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  210137             :       // virtual SgNode* addRegExpAttribute();
  210138             :       /*! \brief Support for AST matching using regular expression.
  210139             : 
  210140             :           This support is incomplete and the subject of current research to define 
  210141             :           RegEx trees to support inexact matching.
  210142             :        */
  210143             :           SgOmpTargetTeamsDistributeSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  210144             : 
  210145             : // *** COMMON CODE SECTION ENDS HERE ***
  210146             : 
  210147             : 
  210148             : // End of memberFunctionString
  210149             : // Start of memberFunctionString
  210150             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  210151             : 
  210152             :      // the generated cast function
  210153             :      // friend ROSE_DLL_API SgOmpTargetTeamsDistributeSimdStatement* isSgOmpTargetTeamsDistributeSimdStatement ( SgNode* s );
  210154             : 
  210155             :           typedef SgUpirFieldBodyStatement base_node_type;
  210156             : 
  210157             : 
  210158             : // End of memberFunctionString
  210159             : // Start of memberFunctionString
  210160             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  210161             : 
  210162             :           void post_construction_initialization() override;
  210163             : 
  210164             : 
  210165             : // End of memberFunctionString
  210166             : 
  210167             : 
  210168             :      public: 
  210169             :          virtual ~SgOmpTargetTeamsDistributeSimdStatement();
  210170             : 
  210171             : 
  210172             :      public: 
  210173             :          SgOmpTargetTeamsDistributeSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  210174             :          SgOmpTargetTeamsDistributeSimdStatement(SgStatement* body); 
  210175             : 
  210176             :     protected:
  210177             : 
  210178             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetTeamsDistributeSimdStatement>;
  210179             : 
  210180             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210181             : 
  210182             : 
  210183             :    };
  210184             : #endif
  210185             : 
  210186             : // postdeclarations for SgOmpTargetTeamsDistributeSimdStatement
  210187             : 
  210188             : /* #line 210189 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210189             : 
  210190             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  210191             : 
  210192             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210193             : 
  210194             : 
  210195             : /* #line 210196 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210196             : 
  210197             : 
  210198             : 
  210199             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210200             : 
  210201             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  210202             : //      This code is automatically generated for each 
  210203             : //      terminal and non-terminal within the defined 
  210204             : //      grammar.  There is a simple way to change the 
  210205             : //      code to fix bugs etc.  See the ROSE README file
  210206             : //      for directions.
  210207             : 
  210208             : // tps: (02/22/2010): Adding DLL export requirements
  210209             : #include "rosedll.h"
  210210             : 
  210211             : // predeclarations for SgOmpTargetTeamsLoopStatement
  210212             : 
  210213             : /* #line 210214 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210214             : 
  210215             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  210216             : 
  210217             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210218             : 
  210219             : #if 1
  210220             : // Class Definition for SgOmpTargetTeamsLoopStatement
  210221             : class ROSE_DLL_API SgOmpTargetTeamsLoopStatement  : public SgUpirFieldBodyStatement
  210222             :    {
  210223             :      public:
  210224             : 
  210225             : 
  210226             : /* #line 210227 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210227             : 
  210228             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  210229             : // Start of memberFunctionString
  210230             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  210231             : 
  210232             : // *** COMMON CODE SECTION BEGINS HERE ***
  210233             : 
  210234             :     public:
  210235             : 
  210236             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  210237             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  210238             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  210239             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  210240             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  210241             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  210242             : 
  210243             :       /*! \brief returns a string representing the class name */
  210244             :           virtual std::string class_name() const override;
  210245             : 
  210246             :       /*! \brief returns new style SageIII enum values */
  210247             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  210248             : 
  210249             :       /*! \brief static variant value */
  210250             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  210251             :        // static const VariantT static_variant = V_SgOmpTargetTeamsLoopStatement;
  210252             :           enum { static_variant = V_SgOmpTargetTeamsLoopStatement };
  210253             : 
  210254             :        /* the generated cast function */
  210255             :       /*! \brief Casts pointer from base class to derived class */
  210256             :           ROSE_DLL_API friend       SgOmpTargetTeamsLoopStatement* isSgOmpTargetTeamsLoopStatement(       SgNode * s );
  210257             : 
  210258             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  210259             :           ROSE_DLL_API friend const SgOmpTargetTeamsLoopStatement* isSgOmpTargetTeamsLoopStatement( const SgNode * s );
  210260             : 
  210261             :      // ******************************************
  210262             :      // * Memory Pool / New / Delete
  210263             :      // ******************************************
  210264             : 
  210265             :      public:
  210266             :           /// \private
  210267             :           static const unsigned pool_size; //
  210268             :           /// \private
  210269             :           static std::vector<unsigned char *> pools; //
  210270             :           /// \private
  210271             :           static SgOmpTargetTeamsLoopStatement * next_node; // 
  210272             : 
  210273             :           /// \private
  210274             :           static unsigned long initializeStorageClassArray(SgOmpTargetTeamsLoopStatementStorageClass *); //
  210275             : 
  210276             :           /// \private
  210277             :           static void clearMemoryPool(); //
  210278             :           static void deleteMemoryPool(); //
  210279             : 
  210280             :           /// \private
  210281             :           static void extendMemoryPoolForFileIO(); //
  210282             : 
  210283             :           /// \private
  210284             :           static SgOmpTargetTeamsLoopStatement * getPointerFromGlobalIndex(unsigned long); //
  210285             :           /// \private
  210286             :           static SgOmpTargetTeamsLoopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  210287             : 
  210288             :           /// \private
  210289             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  210290             :           /// \private
  210291             :           static void resetValidFreepointers(); //
  210292             :           /// \private
  210293             :           static unsigned long getNumberOfLastValidPointer(); //
  210294             : 
  210295             : 
  210296             : #if defined(INLINE_FUNCTIONS)
  210297             :       /*! \brief returns pointer to newly allocated IR node */
  210298             :           inline void *operator new (size_t size);
  210299             : #else
  210300             :       /*! \brief returns pointer to newly allocated IR node */
  210301             :           void *operator new (size_t size);
  210302             : #endif
  210303             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  210304             :           void operator delete (void* pointer, size_t size);
  210305             : 
  210306             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  210307           0 :           void operator delete (void* pointer)
  210308             :              {
  210309             :             // This is the generated delete operator...
  210310           0 :                SgOmpTargetTeamsLoopStatement::operator delete (pointer,sizeof(SgOmpTargetTeamsLoopStatement));
  210311             :              }
  210312             : 
  210313             :       /*! \brief Returns the total number of IR nodes of this type */
  210314             :           static size_t numberOfNodes();
  210315             : 
  210316             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  210317             :           static size_t memoryUsage();
  210318             : 
  210319             :       // End of scope which started in IR nodes specific code 
  210320             :       /* */
  210321             : 
  210322             :       /* name Internal Functions
  210323             :           \brief Internal functions ... incomplete-documentation
  210324             : 
  210325             :           These functions have been made public as part of the design, but they are suggested for internal use 
  210326             :           or by particularly knowledgeable users for specialized tools or applications.
  210327             : 
  210328             :           \internal We could not make these private because they are required by user for special purposes. And 
  210329             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  210330             :          
  210331             :        */
  210332             : 
  210333             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  210334             :        // overridden in every class by *generated* implementation
  210335             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  210336             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  210337             :        // MS: 06/28/02 container of names of variables or container indices 
  210338             :        // used used in the traversal to access AST successor nodes
  210339             :        // overridden in every class by *generated* implementation
  210340             :       /*! \brief container of names of variables or container indices used used in the traversal
  210341             :           to access AST successor nodes overridden in every class by *generated* implementation */
  210342             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  210343             : 
  210344             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  210345             :        // than all the vector copies. The implementation for these functions is generated for each class.
  210346             :       /*! \brief return number of children in the traversal successor list */
  210347             :           virtual size_t get_numberOfTraversalSuccessors() override;
  210348             :       /*! \brief index-based access to traversal successors by index number */
  210349             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  210350             :       /*! \brief index-based access to traversal successors by child node */
  210351             :           virtual size_t get_childIndex(SgNode *child) override;
  210352             : 
  210353             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  210354             :        // MS: 08/16/2002 method for generating RTI information
  210355             :       /*! \brief return C++ Runtime-Time-Information */
  210356             :           virtual RTIReturnType roseRTI() override;
  210357             : #endif
  210358             :       /* */
  210359             : 
  210360             : 
  210361             : 
  210362             :       /* name Deprecated Functions
  210363             :           \brief Deprecated functions ... incomplete-documentation
  210364             : 
  210365             :           These functions have been deprecated from use.
  210366             :        */
  210367             :       /* */
  210368             : 
  210369             :       /*! returns a C style string (char*) representing the class name */
  210370             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  210371             : 
  210372             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  210373             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  210374             : #if 0
  210375             :       /*! returns old style Sage II enum values */
  210376             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  210377             :       /*! returns old style Sage II enum values */
  210378             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  210379             : #endif
  210380             :       /* */
  210381             : 
  210382             : 
  210383             : 
  210384             : 
  210385             :      public:
  210386             :       /* name Traversal Support Functions
  210387             :           \brief Traversal support functions ... incomplete-documentation
  210388             : 
  210389             :           These functions have been made public as part of the design, but they are suggested for internal use 
  210390             :           or by particularly knowledgable users for specialized tools or applications.
  210391             :        */
  210392             :       /* */
  210393             : 
  210394             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  210395             :        // (inferior to ROSE traversal mechanism, experimental).
  210396             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  210397             :        */
  210398             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  210399             : 
  210400             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  210401             :       /*! \brief support for the classic visitor pattern done in GoF */
  210402             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  210403             : 
  210404             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  210405             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  210406             :        */
  210407             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  210408             : 
  210409             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  210410             :        */
  210411             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  210412             : 
  210413             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  210414             :        // This traversal helps support internal tools that call static member functions.
  210415             :        // note: this function operates on the memory pools.
  210416             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  210417             :        */
  210418             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  210419             :       /* */
  210420             : 
  210421             : 
  210422             :      public:
  210423             :       /* name Memory Allocation Functions
  210424             :           \brief Memory allocations functions ... incomplete-documentation
  210425             : 
  210426             :           These functions have been made public as part of the design, but they are suggested for internal use 
  210427             :           or by particularly knowledgable users for specialized tools or applications.
  210428             :        */
  210429             :       /* */
  210430             : 
  210431             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  210432             : 
  210433             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  210434             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  210435             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  210436             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  210437             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  210438             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  210439             :           being used with the AST File I/O mechanism.
  210440             :        */
  210441             :           virtual bool isInMemoryPool() override;
  210442             : 
  210443             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  210444             : 
  210445             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  210446             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  210447             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  210448             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  210449             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  210450             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  210451             :           being used with the AST File I/O mechanism.
  210452             :        */
  210453             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  210454             : 
  210455             :       // DQ (4/30/2006): Modified to be a const function.
  210456             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  210457             : 
  210458             :           This functions is part of general support for many possible tools to operate 
  210459             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  210460             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  210461             :           less than the set of pointers used by the AST file I/O. This is part of
  210462             :           work implemented by Andreas, and support tools such as the AST graph generation.
  210463             : 
  210464             :           \warning This function can return unexpected data members and thus the 
  210465             :                    order and the number of elements is unpredicable and subject 
  210466             :                    to change.
  210467             : 
  210468             :           \returns STL vector of pairs of SgNode* and strings
  210469             :        */
  210470             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  210471             : 
  210472             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  210473             : 
  210474             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  210475             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  210476             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  210477             : 
  210478             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  210479             :                    and subject to change.
  210480             :        */
  210481             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  210482             : 
  210483             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  210484             : 
  210485             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  210486             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  210487             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  210488             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  210489             : 
  210490             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  210491             : 
  210492             :           \returns long
  210493             :        */
  210494             :           virtual long getChildIndex( SgNode* childNode ) const override;
  210495             : 
  210496             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  210497             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210498             :       /* \brief Constructor for use by AST File I/O Mechanism
  210499             : 
  210500             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  210501             :           which obtained via fast binary file I/O from disk.
  210502             :        */
  210503             :        // SgOmpTargetTeamsLoopStatement( SgOmpTargetTeamsLoopStatementStorageClass& source );
  210504             : 
  210505             : 
  210506             : 
  210507             : 
  210508             : 
  210509             :  // JH (10/24/2005): methods added to support the ast file IO
  210510             :     private:
  210511             : 
  210512             :       /* name AST Memory Allocation Support Functions
  210513             :           \brief Memory allocations support....
  210514             : 
  210515             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  210516             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  210517             :           and support the AST File I/O Mechanism.
  210518             :        */
  210519             :       /* */
  210520             : 
  210521             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  210522             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  210523             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  210524             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  210525             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  210526             :           a correspinding one in the AST_FILE_IO class!
  210527             :        */
  210528             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  210529             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210530             :       /* \brief Typedef used for low level memory access.
  210531             :        */
  210532             :        // typedef unsigned char* TestType;
  210533             : 
  210534             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  210535             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210536             :       /* \brief Typedef used to hold memory addresses as values.
  210537             :        */
  210538             :        // typedef unsigned long  AddressType;
  210539             : 
  210540             : 
  210541             : 
  210542             :        // necessary, to have direct access to the p_freepointer and the private methods !
  210543             :       /*! \brief friend class declaration to support AST File I/O */
  210544             :           friend class AST_FILE_IO;
  210545             : 
  210546             :       /*! \brief friend class declaration to support AST File I/O */
  210547             :           friend class SgOmpTargetTeamsLoopStatementStorageClass;
  210548             : 
  210549             :       /*! \brief friend class declaration to support AST File I/O */
  210550             :           friend class AstSpecificDataManagingClass;
  210551             : 
  210552             :       /*! \brief friend class declaration to support AST File I/O */
  210553             :           friend class AstSpecificDataManagingClassStorageClass;
  210554             :     public:
  210555             :       /*! \brief IR node constructor to support AST File I/O */
  210556             :           SgOmpTargetTeamsLoopStatement( const SgOmpTargetTeamsLoopStatementStorageClass& source );
  210557             : 
  210558             :  // private: // JJW hack
  210559             :        /*
  210560             :           name AST Memory Allocation Support Variables
  210561             :           Memory allocations support variables 
  210562             : 
  210563             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  210564             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  210565             :           and support the AST File I/O Mechanism.
  210566             :        */
  210567             :       /* */
  210568             : 
  210569             :     public:
  210570             : 
  210571             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  210572             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  210573             :       // virtual SgNode* addRegExpAttribute();
  210574             :       /*! \brief Support for AST matching using regular expression.
  210575             : 
  210576             :           This support is incomplete and the subject of current research to define 
  210577             :           RegEx trees to support inexact matching.
  210578             :        */
  210579             :           SgOmpTargetTeamsLoopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  210580             : 
  210581             : // *** COMMON CODE SECTION ENDS HERE ***
  210582             : 
  210583             : 
  210584             : // End of memberFunctionString
  210585             : // Start of memberFunctionString
  210586             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  210587             : 
  210588             :      // the generated cast function
  210589             :      // friend ROSE_DLL_API SgOmpTargetTeamsLoopStatement* isSgOmpTargetTeamsLoopStatement ( SgNode* s );
  210590             : 
  210591             :           typedef SgUpirFieldBodyStatement base_node_type;
  210592             : 
  210593             : 
  210594             : // End of memberFunctionString
  210595             : // Start of memberFunctionString
  210596             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  210597             : 
  210598             :           void post_construction_initialization() override;
  210599             : 
  210600             : 
  210601             : // End of memberFunctionString
  210602             : 
  210603             : 
  210604             :      public: 
  210605             :          virtual ~SgOmpTargetTeamsLoopStatement();
  210606             : 
  210607             : 
  210608             :      public: 
  210609             :          SgOmpTargetTeamsLoopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  210610             :          SgOmpTargetTeamsLoopStatement(SgStatement* body); 
  210611             : 
  210612             :     protected:
  210613             : 
  210614             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetTeamsLoopStatement>;
  210615             : 
  210616             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210617             : 
  210618             : 
  210619             :    };
  210620             : #endif
  210621             : 
  210622             : // postdeclarations for SgOmpTargetTeamsLoopStatement
  210623             : 
  210624             : /* #line 210625 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210625             : 
  210626             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  210627             : 
  210628             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210629             : 
  210630             : 
  210631             : /* #line 210632 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210632             : 
  210633             : 
  210634             : 
  210635             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210636             : 
  210637             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  210638             : //      This code is automatically generated for each 
  210639             : //      terminal and non-terminal within the defined 
  210640             : //      grammar.  There is a simple way to change the 
  210641             : //      code to fix bugs etc.  See the ROSE README file
  210642             : //      for directions.
  210643             : 
  210644             : // tps: (02/22/2010): Adding DLL export requirements
  210645             : #include "rosedll.h"
  210646             : 
  210647             : // predeclarations for SgOmpTargetTeamsDistributeParallelForStatement
  210648             : 
  210649             : /* #line 210650 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210650             : 
  210651             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  210652             : 
  210653             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  210654             : 
  210655             : #if 1
  210656             : // Class Definition for SgOmpTargetTeamsDistributeParallelForStatement
  210657             : class ROSE_DLL_API SgOmpTargetTeamsDistributeParallelForStatement  : public SgUpirFieldBodyStatement
  210658             :    {
  210659             :      public:
  210660             : 
  210661             : 
  210662             : /* #line 210663 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  210663             : 
  210664             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  210665             : // Start of memberFunctionString
  210666             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  210667             : 
  210668             : // *** COMMON CODE SECTION BEGINS HERE ***
  210669             : 
  210670             :     public:
  210671             : 
  210672             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  210673             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  210674             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  210675             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  210676             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  210677             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  210678             : 
  210679             :       /*! \brief returns a string representing the class name */
  210680             :           virtual std::string class_name() const override;
  210681             : 
  210682             :       /*! \brief returns new style SageIII enum values */
  210683             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  210684             : 
  210685             :       /*! \brief static variant value */
  210686             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  210687             :        // static const VariantT static_variant = V_SgOmpTargetTeamsDistributeParallelForStatement;
  210688             :           enum { static_variant = V_SgOmpTargetTeamsDistributeParallelForStatement };
  210689             : 
  210690             :        /* the generated cast function */
  210691             :       /*! \brief Casts pointer from base class to derived class */
  210692             :           ROSE_DLL_API friend       SgOmpTargetTeamsDistributeParallelForStatement* isSgOmpTargetTeamsDistributeParallelForStatement(       SgNode * s );
  210693             : 
  210694             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  210695             :           ROSE_DLL_API friend const SgOmpTargetTeamsDistributeParallelForStatement* isSgOmpTargetTeamsDistributeParallelForStatement( const SgNode * s );
  210696             : 
  210697             :      // ******************************************
  210698             :      // * Memory Pool / New / Delete
  210699             :      // ******************************************
  210700             : 
  210701             :      public:
  210702             :           /// \private
  210703             :           static const unsigned pool_size; //
  210704             :           /// \private
  210705             :           static std::vector<unsigned char *> pools; //
  210706             :           /// \private
  210707             :           static SgOmpTargetTeamsDistributeParallelForStatement * next_node; // 
  210708             : 
  210709             :           /// \private
  210710             :           static unsigned long initializeStorageClassArray(SgOmpTargetTeamsDistributeParallelForStatementStorageClass *); //
  210711             : 
  210712             :           /// \private
  210713             :           static void clearMemoryPool(); //
  210714             :           static void deleteMemoryPool(); //
  210715             : 
  210716             :           /// \private
  210717             :           static void extendMemoryPoolForFileIO(); //
  210718             : 
  210719             :           /// \private
  210720             :           static SgOmpTargetTeamsDistributeParallelForStatement * getPointerFromGlobalIndex(unsigned long); //
  210721             :           /// \private
  210722             :           static SgOmpTargetTeamsDistributeParallelForStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  210723             : 
  210724             :           /// \private
  210725             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  210726             :           /// \private
  210727             :           static void resetValidFreepointers(); //
  210728             :           /// \private
  210729             :           static unsigned long getNumberOfLastValidPointer(); //
  210730             : 
  210731             : 
  210732             : #if defined(INLINE_FUNCTIONS)
  210733             :       /*! \brief returns pointer to newly allocated IR node */
  210734             :           inline void *operator new (size_t size);
  210735             : #else
  210736             :       /*! \brief returns pointer to newly allocated IR node */
  210737             :           void *operator new (size_t size);
  210738             : #endif
  210739             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  210740             :           void operator delete (void* pointer, size_t size);
  210741             : 
  210742             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  210743           0 :           void operator delete (void* pointer)
  210744             :              {
  210745             :             // This is the generated delete operator...
  210746           0 :                SgOmpTargetTeamsDistributeParallelForStatement::operator delete (pointer,sizeof(SgOmpTargetTeamsDistributeParallelForStatement));
  210747             :              }
  210748             : 
  210749             :       /*! \brief Returns the total number of IR nodes of this type */
  210750             :           static size_t numberOfNodes();
  210751             : 
  210752             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  210753             :           static size_t memoryUsage();
  210754             : 
  210755             :       // End of scope which started in IR nodes specific code 
  210756             :       /* */
  210757             : 
  210758             :       /* name Internal Functions
  210759             :           \brief Internal functions ... incomplete-documentation
  210760             : 
  210761             :           These functions have been made public as part of the design, but they are suggested for internal use 
  210762             :           or by particularly knowledgeable users for specialized tools or applications.
  210763             : 
  210764             :           \internal We could not make these private because they are required by user for special purposes. And 
  210765             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  210766             :          
  210767             :        */
  210768             : 
  210769             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  210770             :        // overridden in every class by *generated* implementation
  210771             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  210772             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  210773             :        // MS: 06/28/02 container of names of variables or container indices 
  210774             :        // used used in the traversal to access AST successor nodes
  210775             :        // overridden in every class by *generated* implementation
  210776             :       /*! \brief container of names of variables or container indices used used in the traversal
  210777             :           to access AST successor nodes overridden in every class by *generated* implementation */
  210778             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  210779             : 
  210780             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  210781             :        // than all the vector copies. The implementation for these functions is generated for each class.
  210782             :       /*! \brief return number of children in the traversal successor list */
  210783             :           virtual size_t get_numberOfTraversalSuccessors() override;
  210784             :       /*! \brief index-based access to traversal successors by index number */
  210785             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  210786             :       /*! \brief index-based access to traversal successors by child node */
  210787             :           virtual size_t get_childIndex(SgNode *child) override;
  210788             : 
  210789             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  210790             :        // MS: 08/16/2002 method for generating RTI information
  210791             :       /*! \brief return C++ Runtime-Time-Information */
  210792             :           virtual RTIReturnType roseRTI() override;
  210793             : #endif
  210794             :       /* */
  210795             : 
  210796             : 
  210797             : 
  210798             :       /* name Deprecated Functions
  210799             :           \brief Deprecated functions ... incomplete-documentation
  210800             : 
  210801             :           These functions have been deprecated from use.
  210802             :        */
  210803             :       /* */
  210804             : 
  210805             :       /*! returns a C style string (char*) representing the class name */
  210806             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  210807             : 
  210808             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  210809             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  210810             : #if 0
  210811             :       /*! returns old style Sage II enum values */
  210812             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  210813             :       /*! returns old style Sage II enum values */
  210814             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  210815             : #endif
  210816             :       /* */
  210817             : 
  210818             : 
  210819             : 
  210820             : 
  210821             :      public:
  210822             :       /* name Traversal Support Functions
  210823             :           \brief Traversal support functions ... incomplete-documentation
  210824             : 
  210825             :           These functions have been made public as part of the design, but they are suggested for internal use 
  210826             :           or by particularly knowledgable users for specialized tools or applications.
  210827             :        */
  210828             :       /* */
  210829             : 
  210830             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  210831             :        // (inferior to ROSE traversal mechanism, experimental).
  210832             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  210833             :        */
  210834             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  210835             : 
  210836             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  210837             :       /*! \brief support for the classic visitor pattern done in GoF */
  210838             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  210839             : 
  210840             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  210841             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  210842             :        */
  210843             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  210844             : 
  210845             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  210846             :        */
  210847             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  210848             : 
  210849             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  210850             :        // This traversal helps support internal tools that call static member functions.
  210851             :        // note: this function operates on the memory pools.
  210852             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  210853             :        */
  210854             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  210855             :       /* */
  210856             : 
  210857             : 
  210858             :      public:
  210859             :       /* name Memory Allocation Functions
  210860             :           \brief Memory allocations functions ... incomplete-documentation
  210861             : 
  210862             :           These functions have been made public as part of the design, but they are suggested for internal use 
  210863             :           or by particularly knowledgable users for specialized tools or applications.
  210864             :        */
  210865             :       /* */
  210866             : 
  210867             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  210868             : 
  210869             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  210870             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  210871             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  210872             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  210873             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  210874             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  210875             :           being used with the AST File I/O mechanism.
  210876             :        */
  210877             :           virtual bool isInMemoryPool() override;
  210878             : 
  210879             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  210880             : 
  210881             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  210882             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  210883             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  210884             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  210885             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  210886             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  210887             :           being used with the AST File I/O mechanism.
  210888             :        */
  210889             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  210890             : 
  210891             :       // DQ (4/30/2006): Modified to be a const function.
  210892             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  210893             : 
  210894             :           This functions is part of general support for many possible tools to operate 
  210895             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  210896             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  210897             :           less than the set of pointers used by the AST file I/O. This is part of
  210898             :           work implemented by Andreas, and support tools such as the AST graph generation.
  210899             : 
  210900             :           \warning This function can return unexpected data members and thus the 
  210901             :                    order and the number of elements is unpredicable and subject 
  210902             :                    to change.
  210903             : 
  210904             :           \returns STL vector of pairs of SgNode* and strings
  210905             :        */
  210906             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  210907             : 
  210908             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  210909             : 
  210910             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  210911             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  210912             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  210913             : 
  210914             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  210915             :                    and subject to change.
  210916             :        */
  210917             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  210918             : 
  210919             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  210920             : 
  210921             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  210922             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  210923             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  210924             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  210925             : 
  210926             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  210927             : 
  210928             :           \returns long
  210929             :        */
  210930             :           virtual long getChildIndex( SgNode* childNode ) const override;
  210931             : 
  210932             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  210933             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210934             :       /* \brief Constructor for use by AST File I/O Mechanism
  210935             : 
  210936             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  210937             :           which obtained via fast binary file I/O from disk.
  210938             :        */
  210939             :        // SgOmpTargetTeamsDistributeParallelForStatement( SgOmpTargetTeamsDistributeParallelForStatementStorageClass& source );
  210940             : 
  210941             : 
  210942             : 
  210943             : 
  210944             : 
  210945             :  // JH (10/24/2005): methods added to support the ast file IO
  210946             :     private:
  210947             : 
  210948             :       /* name AST Memory Allocation Support Functions
  210949             :           \brief Memory allocations support....
  210950             : 
  210951             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  210952             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  210953             :           and support the AST File I/O Mechanism.
  210954             :        */
  210955             :       /* */
  210956             : 
  210957             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  210958             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  210959             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  210960             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  210961             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  210962             :           a correspinding one in the AST_FILE_IO class!
  210963             :        */
  210964             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  210965             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210966             :       /* \brief Typedef used for low level memory access.
  210967             :        */
  210968             :        // typedef unsigned char* TestType;
  210969             : 
  210970             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  210971             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  210972             :       /* \brief Typedef used to hold memory addresses as values.
  210973             :        */
  210974             :        // typedef unsigned long  AddressType;
  210975             : 
  210976             : 
  210977             : 
  210978             :        // necessary, to have direct access to the p_freepointer and the private methods !
  210979             :       /*! \brief friend class declaration to support AST File I/O */
  210980             :           friend class AST_FILE_IO;
  210981             : 
  210982             :       /*! \brief friend class declaration to support AST File I/O */
  210983             :           friend class SgOmpTargetTeamsDistributeParallelForStatementStorageClass;
  210984             : 
  210985             :       /*! \brief friend class declaration to support AST File I/O */
  210986             :           friend class AstSpecificDataManagingClass;
  210987             : 
  210988             :       /*! \brief friend class declaration to support AST File I/O */
  210989             :           friend class AstSpecificDataManagingClassStorageClass;
  210990             :     public:
  210991             :       /*! \brief IR node constructor to support AST File I/O */
  210992             :           SgOmpTargetTeamsDistributeParallelForStatement( const SgOmpTargetTeamsDistributeParallelForStatementStorageClass& source );
  210993             : 
  210994             :  // private: // JJW hack
  210995             :        /*
  210996             :           name AST Memory Allocation Support Variables
  210997             :           Memory allocations support variables 
  210998             : 
  210999             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  211000             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  211001             :           and support the AST File I/O Mechanism.
  211002             :        */
  211003             :       /* */
  211004             : 
  211005             :     public:
  211006             : 
  211007             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  211008             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  211009             :       // virtual SgNode* addRegExpAttribute();
  211010             :       /*! \brief Support for AST matching using regular expression.
  211011             : 
  211012             :           This support is incomplete and the subject of current research to define 
  211013             :           RegEx trees to support inexact matching.
  211014             :        */
  211015             :           SgOmpTargetTeamsDistributeParallelForStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  211016             : 
  211017             : // *** COMMON CODE SECTION ENDS HERE ***
  211018             : 
  211019             : 
  211020             : // End of memberFunctionString
  211021             : // Start of memberFunctionString
  211022             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  211023             : 
  211024             :      // the generated cast function
  211025             :      // friend ROSE_DLL_API SgOmpTargetTeamsDistributeParallelForStatement* isSgOmpTargetTeamsDistributeParallelForStatement ( SgNode* s );
  211026             : 
  211027             :           typedef SgUpirFieldBodyStatement base_node_type;
  211028             : 
  211029             : 
  211030             : // End of memberFunctionString
  211031             : // Start of memberFunctionString
  211032             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  211033             : 
  211034             :           void post_construction_initialization() override;
  211035             : 
  211036             : 
  211037             : // End of memberFunctionString
  211038             : 
  211039             : 
  211040             :      public: 
  211041             :          virtual ~SgOmpTargetTeamsDistributeParallelForStatement();
  211042             : 
  211043             : 
  211044             :      public: 
  211045             :          SgOmpTargetTeamsDistributeParallelForStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  211046             :          SgOmpTargetTeamsDistributeParallelForStatement(SgStatement* body); 
  211047             : 
  211048             :     protected:
  211049             : 
  211050             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetTeamsDistributeParallelForStatement>;
  211051             : 
  211052             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211053             : 
  211054             : 
  211055             :    };
  211056             : #endif
  211057             : 
  211058             : // postdeclarations for SgOmpTargetTeamsDistributeParallelForStatement
  211059             : 
  211060             : /* #line 211061 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211061             : 
  211062             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  211063             : 
  211064             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211065             : 
  211066             : 
  211067             : /* #line 211068 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211068             : 
  211069             : 
  211070             : 
  211071             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211072             : 
  211073             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  211074             : //      This code is automatically generated for each 
  211075             : //      terminal and non-terminal within the defined 
  211076             : //      grammar.  There is a simple way to change the 
  211077             : //      code to fix bugs etc.  See the ROSE README file
  211078             : //      for directions.
  211079             : 
  211080             : // tps: (02/22/2010): Adding DLL export requirements
  211081             : #include "rosedll.h"
  211082             : 
  211083             : // predeclarations for SgOmpTargetTeamsDistributeParallelForSimdStatement
  211084             : 
  211085             : /* #line 211086 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211086             : 
  211087             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  211088             : 
  211089             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211090             : 
  211091             : #if 1
  211092             : // Class Definition for SgOmpTargetTeamsDistributeParallelForSimdStatement
  211093             : class ROSE_DLL_API SgOmpTargetTeamsDistributeParallelForSimdStatement  : public SgUpirFieldBodyStatement
  211094             :    {
  211095             :      public:
  211096             : 
  211097             : 
  211098             : /* #line 211099 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211099             : 
  211100             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  211101             : // Start of memberFunctionString
  211102             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  211103             : 
  211104             : // *** COMMON CODE SECTION BEGINS HERE ***
  211105             : 
  211106             :     public:
  211107             : 
  211108             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  211109             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  211110             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  211111             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  211112             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  211113             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  211114             : 
  211115             :       /*! \brief returns a string representing the class name */
  211116             :           virtual std::string class_name() const override;
  211117             : 
  211118             :       /*! \brief returns new style SageIII enum values */
  211119             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  211120             : 
  211121             :       /*! \brief static variant value */
  211122             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  211123             :        // static const VariantT static_variant = V_SgOmpTargetTeamsDistributeParallelForSimdStatement;
  211124             :           enum { static_variant = V_SgOmpTargetTeamsDistributeParallelForSimdStatement };
  211125             : 
  211126             :        /* the generated cast function */
  211127             :       /*! \brief Casts pointer from base class to derived class */
  211128             :           ROSE_DLL_API friend       SgOmpTargetTeamsDistributeParallelForSimdStatement* isSgOmpTargetTeamsDistributeParallelForSimdStatement(       SgNode * s );
  211129             : 
  211130             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  211131             :           ROSE_DLL_API friend const SgOmpTargetTeamsDistributeParallelForSimdStatement* isSgOmpTargetTeamsDistributeParallelForSimdStatement( const SgNode * s );
  211132             : 
  211133             :      // ******************************************
  211134             :      // * Memory Pool / New / Delete
  211135             :      // ******************************************
  211136             : 
  211137             :      public:
  211138             :           /// \private
  211139             :           static const unsigned pool_size; //
  211140             :           /// \private
  211141             :           static std::vector<unsigned char *> pools; //
  211142             :           /// \private
  211143             :           static SgOmpTargetTeamsDistributeParallelForSimdStatement * next_node; // 
  211144             : 
  211145             :           /// \private
  211146             :           static unsigned long initializeStorageClassArray(SgOmpTargetTeamsDistributeParallelForSimdStatementStorageClass *); //
  211147             : 
  211148             :           /// \private
  211149             :           static void clearMemoryPool(); //
  211150             :           static void deleteMemoryPool(); //
  211151             : 
  211152             :           /// \private
  211153             :           static void extendMemoryPoolForFileIO(); //
  211154             : 
  211155             :           /// \private
  211156             :           static SgOmpTargetTeamsDistributeParallelForSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  211157             :           /// \private
  211158             :           static SgOmpTargetTeamsDistributeParallelForSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  211159             : 
  211160             :           /// \private
  211161             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  211162             :           /// \private
  211163             :           static void resetValidFreepointers(); //
  211164             :           /// \private
  211165             :           static unsigned long getNumberOfLastValidPointer(); //
  211166             : 
  211167             : 
  211168             : #if defined(INLINE_FUNCTIONS)
  211169             :       /*! \brief returns pointer to newly allocated IR node */
  211170             :           inline void *operator new (size_t size);
  211171             : #else
  211172             :       /*! \brief returns pointer to newly allocated IR node */
  211173             :           void *operator new (size_t size);
  211174             : #endif
  211175             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  211176             :           void operator delete (void* pointer, size_t size);
  211177             : 
  211178             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  211179           0 :           void operator delete (void* pointer)
  211180             :              {
  211181             :             // This is the generated delete operator...
  211182           0 :                SgOmpTargetTeamsDistributeParallelForSimdStatement::operator delete (pointer,sizeof(SgOmpTargetTeamsDistributeParallelForSimdStatement));
  211183             :              }
  211184             : 
  211185             :       /*! \brief Returns the total number of IR nodes of this type */
  211186             :           static size_t numberOfNodes();
  211187             : 
  211188             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  211189             :           static size_t memoryUsage();
  211190             : 
  211191             :       // End of scope which started in IR nodes specific code 
  211192             :       /* */
  211193             : 
  211194             :       /* name Internal Functions
  211195             :           \brief Internal functions ... incomplete-documentation
  211196             : 
  211197             :           These functions have been made public as part of the design, but they are suggested for internal use 
  211198             :           or by particularly knowledgeable users for specialized tools or applications.
  211199             : 
  211200             :           \internal We could not make these private because they are required by user for special purposes. And 
  211201             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  211202             :          
  211203             :        */
  211204             : 
  211205             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  211206             :        // overridden in every class by *generated* implementation
  211207             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  211208             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  211209             :        // MS: 06/28/02 container of names of variables or container indices 
  211210             :        // used used in the traversal to access AST successor nodes
  211211             :        // overridden in every class by *generated* implementation
  211212             :       /*! \brief container of names of variables or container indices used used in the traversal
  211213             :           to access AST successor nodes overridden in every class by *generated* implementation */
  211214             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  211215             : 
  211216             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  211217             :        // than all the vector copies. The implementation for these functions is generated for each class.
  211218             :       /*! \brief return number of children in the traversal successor list */
  211219             :           virtual size_t get_numberOfTraversalSuccessors() override;
  211220             :       /*! \brief index-based access to traversal successors by index number */
  211221             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  211222             :       /*! \brief index-based access to traversal successors by child node */
  211223             :           virtual size_t get_childIndex(SgNode *child) override;
  211224             : 
  211225             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  211226             :        // MS: 08/16/2002 method for generating RTI information
  211227             :       /*! \brief return C++ Runtime-Time-Information */
  211228             :           virtual RTIReturnType roseRTI() override;
  211229             : #endif
  211230             :       /* */
  211231             : 
  211232             : 
  211233             : 
  211234             :       /* name Deprecated Functions
  211235             :           \brief Deprecated functions ... incomplete-documentation
  211236             : 
  211237             :           These functions have been deprecated from use.
  211238             :        */
  211239             :       /* */
  211240             : 
  211241             :       /*! returns a C style string (char*) representing the class name */
  211242             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  211243             : 
  211244             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  211245             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  211246             : #if 0
  211247             :       /*! returns old style Sage II enum values */
  211248             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  211249             :       /*! returns old style Sage II enum values */
  211250             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  211251             : #endif
  211252             :       /* */
  211253             : 
  211254             : 
  211255             : 
  211256             : 
  211257             :      public:
  211258             :       /* name Traversal Support Functions
  211259             :           \brief Traversal support functions ... incomplete-documentation
  211260             : 
  211261             :           These functions have been made public as part of the design, but they are suggested for internal use 
  211262             :           or by particularly knowledgable users for specialized tools or applications.
  211263             :        */
  211264             :       /* */
  211265             : 
  211266             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  211267             :        // (inferior to ROSE traversal mechanism, experimental).
  211268             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  211269             :        */
  211270             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  211271             : 
  211272             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  211273             :       /*! \brief support for the classic visitor pattern done in GoF */
  211274             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  211275             : 
  211276             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  211277             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  211278             :        */
  211279             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  211280             : 
  211281             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  211282             :        */
  211283             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  211284             : 
  211285             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  211286             :        // This traversal helps support internal tools that call static member functions.
  211287             :        // note: this function operates on the memory pools.
  211288             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  211289             :        */
  211290             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  211291             :       /* */
  211292             : 
  211293             : 
  211294             :      public:
  211295             :       /* name Memory Allocation Functions
  211296             :           \brief Memory allocations functions ... incomplete-documentation
  211297             : 
  211298             :           These functions have been made public as part of the design, but they are suggested for internal use 
  211299             :           or by particularly knowledgable users for specialized tools or applications.
  211300             :        */
  211301             :       /* */
  211302             : 
  211303             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  211304             : 
  211305             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  211306             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  211307             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  211308             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  211309             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  211310             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  211311             :           being used with the AST File I/O mechanism.
  211312             :        */
  211313             :           virtual bool isInMemoryPool() override;
  211314             : 
  211315             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  211316             : 
  211317             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  211318             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  211319             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  211320             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  211321             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  211322             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  211323             :           being used with the AST File I/O mechanism.
  211324             :        */
  211325             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  211326             : 
  211327             :       // DQ (4/30/2006): Modified to be a const function.
  211328             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  211329             : 
  211330             :           This functions is part of general support for many possible tools to operate 
  211331             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  211332             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  211333             :           less than the set of pointers used by the AST file I/O. This is part of
  211334             :           work implemented by Andreas, and support tools such as the AST graph generation.
  211335             : 
  211336             :           \warning This function can return unexpected data members and thus the 
  211337             :                    order and the number of elements is unpredicable and subject 
  211338             :                    to change.
  211339             : 
  211340             :           \returns STL vector of pairs of SgNode* and strings
  211341             :        */
  211342             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  211343             : 
  211344             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  211345             : 
  211346             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  211347             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  211348             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  211349             : 
  211350             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  211351             :                    and subject to change.
  211352             :        */
  211353             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  211354             : 
  211355             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  211356             : 
  211357             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  211358             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  211359             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  211360             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  211361             : 
  211362             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  211363             : 
  211364             :           \returns long
  211365             :        */
  211366             :           virtual long getChildIndex( SgNode* childNode ) const override;
  211367             : 
  211368             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  211369             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  211370             :       /* \brief Constructor for use by AST File I/O Mechanism
  211371             : 
  211372             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  211373             :           which obtained via fast binary file I/O from disk.
  211374             :        */
  211375             :        // SgOmpTargetTeamsDistributeParallelForSimdStatement( SgOmpTargetTeamsDistributeParallelForSimdStatementStorageClass& source );
  211376             : 
  211377             : 
  211378             : 
  211379             : 
  211380             : 
  211381             :  // JH (10/24/2005): methods added to support the ast file IO
  211382             :     private:
  211383             : 
  211384             :       /* name AST Memory Allocation Support Functions
  211385             :           \brief Memory allocations support....
  211386             : 
  211387             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  211388             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  211389             :           and support the AST File I/O Mechanism.
  211390             :        */
  211391             :       /* */
  211392             : 
  211393             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  211394             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  211395             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  211396             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  211397             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  211398             :           a correspinding one in the AST_FILE_IO class!
  211399             :        */
  211400             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  211401             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  211402             :       /* \brief Typedef used for low level memory access.
  211403             :        */
  211404             :        // typedef unsigned char* TestType;
  211405             : 
  211406             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  211407             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  211408             :       /* \brief Typedef used to hold memory addresses as values.
  211409             :        */
  211410             :        // typedef unsigned long  AddressType;
  211411             : 
  211412             : 
  211413             : 
  211414             :        // necessary, to have direct access to the p_freepointer and the private methods !
  211415             :       /*! \brief friend class declaration to support AST File I/O */
  211416             :           friend class AST_FILE_IO;
  211417             : 
  211418             :       /*! \brief friend class declaration to support AST File I/O */
  211419             :           friend class SgOmpTargetTeamsDistributeParallelForSimdStatementStorageClass;
  211420             : 
  211421             :       /*! \brief friend class declaration to support AST File I/O */
  211422             :           friend class AstSpecificDataManagingClass;
  211423             : 
  211424             :       /*! \brief friend class declaration to support AST File I/O */
  211425             :           friend class AstSpecificDataManagingClassStorageClass;
  211426             :     public:
  211427             :       /*! \brief IR node constructor to support AST File I/O */
  211428             :           SgOmpTargetTeamsDistributeParallelForSimdStatement( const SgOmpTargetTeamsDistributeParallelForSimdStatementStorageClass& source );
  211429             : 
  211430             :  // private: // JJW hack
  211431             :        /*
  211432             :           name AST Memory Allocation Support Variables
  211433             :           Memory allocations support variables 
  211434             : 
  211435             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  211436             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  211437             :           and support the AST File I/O Mechanism.
  211438             :        */
  211439             :       /* */
  211440             : 
  211441             :     public:
  211442             : 
  211443             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  211444             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  211445             :       // virtual SgNode* addRegExpAttribute();
  211446             :       /*! \brief Support for AST matching using regular expression.
  211447             : 
  211448             :           This support is incomplete and the subject of current research to define 
  211449             :           RegEx trees to support inexact matching.
  211450             :        */
  211451             :           SgOmpTargetTeamsDistributeParallelForSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  211452             : 
  211453             : // *** COMMON CODE SECTION ENDS HERE ***
  211454             : 
  211455             : 
  211456             : // End of memberFunctionString
  211457             : // Start of memberFunctionString
  211458             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  211459             : 
  211460             :      // the generated cast function
  211461             :      // friend ROSE_DLL_API SgOmpTargetTeamsDistributeParallelForSimdStatement* isSgOmpTargetTeamsDistributeParallelForSimdStatement ( SgNode* s );
  211462             : 
  211463             :           typedef SgUpirFieldBodyStatement base_node_type;
  211464             : 
  211465             : 
  211466             : // End of memberFunctionString
  211467             : // Start of memberFunctionString
  211468             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  211469             : 
  211470             :           void post_construction_initialization() override;
  211471             : 
  211472             : 
  211473             : // End of memberFunctionString
  211474             : 
  211475             : 
  211476             :      public: 
  211477             :          virtual ~SgOmpTargetTeamsDistributeParallelForSimdStatement();
  211478             : 
  211479             : 
  211480             :      public: 
  211481             :          SgOmpTargetTeamsDistributeParallelForSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  211482             :          SgOmpTargetTeamsDistributeParallelForSimdStatement(SgStatement* body); 
  211483             : 
  211484             :     protected:
  211485             : 
  211486             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetTeamsDistributeParallelForSimdStatement>;
  211487             : 
  211488             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211489             : 
  211490             : 
  211491             :    };
  211492             : #endif
  211493             : 
  211494             : // postdeclarations for SgOmpTargetTeamsDistributeParallelForSimdStatement
  211495             : 
  211496             : /* #line 211497 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211497             : 
  211498             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  211499             : 
  211500             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211501             : 
  211502             : 
  211503             : /* #line 211504 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211504             : 
  211505             : 
  211506             : 
  211507             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211508             : 
  211509             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  211510             : //      This code is automatically generated for each 
  211511             : //      terminal and non-terminal within the defined 
  211512             : //      grammar.  There is a simple way to change the 
  211513             : //      code to fix bugs etc.  See the ROSE README file
  211514             : //      for directions.
  211515             : 
  211516             : // tps: (02/22/2010): Adding DLL export requirements
  211517             : #include "rosedll.h"
  211518             : 
  211519             : // predeclarations for SgOmpDistributeSimdStatement
  211520             : 
  211521             : /* #line 211522 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211522             : 
  211523             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  211524             : 
  211525             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211526             : 
  211527             : #if 1
  211528             : // Class Definition for SgOmpDistributeSimdStatement
  211529             : class ROSE_DLL_API SgOmpDistributeSimdStatement  : public SgUpirFieldBodyStatement
  211530             :    {
  211531             :      public:
  211532             : 
  211533             : 
  211534             : /* #line 211535 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211535             : 
  211536             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  211537             : // Start of memberFunctionString
  211538             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  211539             : 
  211540             : // *** COMMON CODE SECTION BEGINS HERE ***
  211541             : 
  211542             :     public:
  211543             : 
  211544             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  211545             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  211546             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  211547             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  211548             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  211549             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  211550             : 
  211551             :       /*! \brief returns a string representing the class name */
  211552             :           virtual std::string class_name() const override;
  211553             : 
  211554             :       /*! \brief returns new style SageIII enum values */
  211555             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  211556             : 
  211557             :       /*! \brief static variant value */
  211558             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  211559             :        // static const VariantT static_variant = V_SgOmpDistributeSimdStatement;
  211560             :           enum { static_variant = V_SgOmpDistributeSimdStatement };
  211561             : 
  211562             :        /* the generated cast function */
  211563             :       /*! \brief Casts pointer from base class to derived class */
  211564             :           ROSE_DLL_API friend       SgOmpDistributeSimdStatement* isSgOmpDistributeSimdStatement(       SgNode * s );
  211565             : 
  211566             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  211567             :           ROSE_DLL_API friend const SgOmpDistributeSimdStatement* isSgOmpDistributeSimdStatement( const SgNode * s );
  211568             : 
  211569             :      // ******************************************
  211570             :      // * Memory Pool / New / Delete
  211571             :      // ******************************************
  211572             : 
  211573             :      public:
  211574             :           /// \private
  211575             :           static const unsigned pool_size; //
  211576             :           /// \private
  211577             :           static std::vector<unsigned char *> pools; //
  211578             :           /// \private
  211579             :           static SgOmpDistributeSimdStatement * next_node; // 
  211580             : 
  211581             :           /// \private
  211582             :           static unsigned long initializeStorageClassArray(SgOmpDistributeSimdStatementStorageClass *); //
  211583             : 
  211584             :           /// \private
  211585             :           static void clearMemoryPool(); //
  211586             :           static void deleteMemoryPool(); //
  211587             : 
  211588             :           /// \private
  211589             :           static void extendMemoryPoolForFileIO(); //
  211590             : 
  211591             :           /// \private
  211592             :           static SgOmpDistributeSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  211593             :           /// \private
  211594             :           static SgOmpDistributeSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  211595             : 
  211596             :           /// \private
  211597             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  211598             :           /// \private
  211599             :           static void resetValidFreepointers(); //
  211600             :           /// \private
  211601             :           static unsigned long getNumberOfLastValidPointer(); //
  211602             : 
  211603             : 
  211604             : #if defined(INLINE_FUNCTIONS)
  211605             :       /*! \brief returns pointer to newly allocated IR node */
  211606             :           inline void *operator new (size_t size);
  211607             : #else
  211608             :       /*! \brief returns pointer to newly allocated IR node */
  211609             :           void *operator new (size_t size);
  211610             : #endif
  211611             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  211612             :           void operator delete (void* pointer, size_t size);
  211613             : 
  211614             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  211615           0 :           void operator delete (void* pointer)
  211616             :              {
  211617             :             // This is the generated delete operator...
  211618           0 :                SgOmpDistributeSimdStatement::operator delete (pointer,sizeof(SgOmpDistributeSimdStatement));
  211619             :              }
  211620             : 
  211621             :       /*! \brief Returns the total number of IR nodes of this type */
  211622             :           static size_t numberOfNodes();
  211623             : 
  211624             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  211625             :           static size_t memoryUsage();
  211626             : 
  211627             :       // End of scope which started in IR nodes specific code 
  211628             :       /* */
  211629             : 
  211630             :       /* name Internal Functions
  211631             :           \brief Internal functions ... incomplete-documentation
  211632             : 
  211633             :           These functions have been made public as part of the design, but they are suggested for internal use 
  211634             :           or by particularly knowledgeable users for specialized tools or applications.
  211635             : 
  211636             :           \internal We could not make these private because they are required by user for special purposes. And 
  211637             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  211638             :          
  211639             :        */
  211640             : 
  211641             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  211642             :        // overridden in every class by *generated* implementation
  211643             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  211644             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  211645             :        // MS: 06/28/02 container of names of variables or container indices 
  211646             :        // used used in the traversal to access AST successor nodes
  211647             :        // overridden in every class by *generated* implementation
  211648             :       /*! \brief container of names of variables or container indices used used in the traversal
  211649             :           to access AST successor nodes overridden in every class by *generated* implementation */
  211650             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  211651             : 
  211652             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  211653             :        // than all the vector copies. The implementation for these functions is generated for each class.
  211654             :       /*! \brief return number of children in the traversal successor list */
  211655             :           virtual size_t get_numberOfTraversalSuccessors() override;
  211656             :       /*! \brief index-based access to traversal successors by index number */
  211657             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  211658             :       /*! \brief index-based access to traversal successors by child node */
  211659             :           virtual size_t get_childIndex(SgNode *child) override;
  211660             : 
  211661             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  211662             :        // MS: 08/16/2002 method for generating RTI information
  211663             :       /*! \brief return C++ Runtime-Time-Information */
  211664             :           virtual RTIReturnType roseRTI() override;
  211665             : #endif
  211666             :       /* */
  211667             : 
  211668             : 
  211669             : 
  211670             :       /* name Deprecated Functions
  211671             :           \brief Deprecated functions ... incomplete-documentation
  211672             : 
  211673             :           These functions have been deprecated from use.
  211674             :        */
  211675             :       /* */
  211676             : 
  211677             :       /*! returns a C style string (char*) representing the class name */
  211678             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  211679             : 
  211680             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  211681             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  211682             : #if 0
  211683             :       /*! returns old style Sage II enum values */
  211684             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  211685             :       /*! returns old style Sage II enum values */
  211686             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  211687             : #endif
  211688             :       /* */
  211689             : 
  211690             : 
  211691             : 
  211692             : 
  211693             :      public:
  211694             :       /* name Traversal Support Functions
  211695             :           \brief Traversal support functions ... incomplete-documentation
  211696             : 
  211697             :           These functions have been made public as part of the design, but they are suggested for internal use 
  211698             :           or by particularly knowledgable users for specialized tools or applications.
  211699             :        */
  211700             :       /* */
  211701             : 
  211702             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  211703             :        // (inferior to ROSE traversal mechanism, experimental).
  211704             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  211705             :        */
  211706             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  211707             : 
  211708             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  211709             :       /*! \brief support for the classic visitor pattern done in GoF */
  211710             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  211711             : 
  211712             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  211713             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  211714             :        */
  211715             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  211716             : 
  211717             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  211718             :        */
  211719             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  211720             : 
  211721             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  211722             :        // This traversal helps support internal tools that call static member functions.
  211723             :        // note: this function operates on the memory pools.
  211724             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  211725             :        */
  211726             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  211727             :       /* */
  211728             : 
  211729             : 
  211730             :      public:
  211731             :       /* name Memory Allocation Functions
  211732             :           \brief Memory allocations functions ... incomplete-documentation
  211733             : 
  211734             :           These functions have been made public as part of the design, but they are suggested for internal use 
  211735             :           or by particularly knowledgable users for specialized tools or applications.
  211736             :        */
  211737             :       /* */
  211738             : 
  211739             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  211740             : 
  211741             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  211742             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  211743             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  211744             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  211745             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  211746             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  211747             :           being used with the AST File I/O mechanism.
  211748             :        */
  211749             :           virtual bool isInMemoryPool() override;
  211750             : 
  211751             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  211752             : 
  211753             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  211754             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  211755             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  211756             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  211757             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  211758             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  211759             :           being used with the AST File I/O mechanism.
  211760             :        */
  211761             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  211762             : 
  211763             :       // DQ (4/30/2006): Modified to be a const function.
  211764             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  211765             : 
  211766             :           This functions is part of general support for many possible tools to operate 
  211767             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  211768             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  211769             :           less than the set of pointers used by the AST file I/O. This is part of
  211770             :           work implemented by Andreas, and support tools such as the AST graph generation.
  211771             : 
  211772             :           \warning This function can return unexpected data members and thus the 
  211773             :                    order and the number of elements is unpredicable and subject 
  211774             :                    to change.
  211775             : 
  211776             :           \returns STL vector of pairs of SgNode* and strings
  211777             :        */
  211778             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  211779             : 
  211780             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  211781             : 
  211782             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  211783             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  211784             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  211785             : 
  211786             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  211787             :                    and subject to change.
  211788             :        */
  211789             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  211790             : 
  211791             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  211792             : 
  211793             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  211794             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  211795             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  211796             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  211797             : 
  211798             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  211799             : 
  211800             :           \returns long
  211801             :        */
  211802             :           virtual long getChildIndex( SgNode* childNode ) const override;
  211803             : 
  211804             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  211805             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  211806             :       /* \brief Constructor for use by AST File I/O Mechanism
  211807             : 
  211808             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  211809             :           which obtained via fast binary file I/O from disk.
  211810             :        */
  211811             :        // SgOmpDistributeSimdStatement( SgOmpDistributeSimdStatementStorageClass& source );
  211812             : 
  211813             : 
  211814             : 
  211815             : 
  211816             : 
  211817             :  // JH (10/24/2005): methods added to support the ast file IO
  211818             :     private:
  211819             : 
  211820             :       /* name AST Memory Allocation Support Functions
  211821             :           \brief Memory allocations support....
  211822             : 
  211823             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  211824             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  211825             :           and support the AST File I/O Mechanism.
  211826             :        */
  211827             :       /* */
  211828             : 
  211829             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  211830             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  211831             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  211832             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  211833             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  211834             :           a correspinding one in the AST_FILE_IO class!
  211835             :        */
  211836             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  211837             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  211838             :       /* \brief Typedef used for low level memory access.
  211839             :        */
  211840             :        // typedef unsigned char* TestType;
  211841             : 
  211842             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  211843             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  211844             :       /* \brief Typedef used to hold memory addresses as values.
  211845             :        */
  211846             :        // typedef unsigned long  AddressType;
  211847             : 
  211848             : 
  211849             : 
  211850             :        // necessary, to have direct access to the p_freepointer and the private methods !
  211851             :       /*! \brief friend class declaration to support AST File I/O */
  211852             :           friend class AST_FILE_IO;
  211853             : 
  211854             :       /*! \brief friend class declaration to support AST File I/O */
  211855             :           friend class SgOmpDistributeSimdStatementStorageClass;
  211856             : 
  211857             :       /*! \brief friend class declaration to support AST File I/O */
  211858             :           friend class AstSpecificDataManagingClass;
  211859             : 
  211860             :       /*! \brief friend class declaration to support AST File I/O */
  211861             :           friend class AstSpecificDataManagingClassStorageClass;
  211862             :     public:
  211863             :       /*! \brief IR node constructor to support AST File I/O */
  211864             :           SgOmpDistributeSimdStatement( const SgOmpDistributeSimdStatementStorageClass& source );
  211865             : 
  211866             :  // private: // JJW hack
  211867             :        /*
  211868             :           name AST Memory Allocation Support Variables
  211869             :           Memory allocations support variables 
  211870             : 
  211871             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  211872             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  211873             :           and support the AST File I/O Mechanism.
  211874             :        */
  211875             :       /* */
  211876             : 
  211877             :     public:
  211878             : 
  211879             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  211880             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  211881             :       // virtual SgNode* addRegExpAttribute();
  211882             :       /*! \brief Support for AST matching using regular expression.
  211883             : 
  211884             :           This support is incomplete and the subject of current research to define 
  211885             :           RegEx trees to support inexact matching.
  211886             :        */
  211887             :           SgOmpDistributeSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  211888             : 
  211889             : // *** COMMON CODE SECTION ENDS HERE ***
  211890             : 
  211891             : 
  211892             : // End of memberFunctionString
  211893             : // Start of memberFunctionString
  211894             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  211895             : 
  211896             :      // the generated cast function
  211897             :      // friend ROSE_DLL_API SgOmpDistributeSimdStatement* isSgOmpDistributeSimdStatement ( SgNode* s );
  211898             : 
  211899             :           typedef SgUpirFieldBodyStatement base_node_type;
  211900             : 
  211901             : 
  211902             : // End of memberFunctionString
  211903             : // Start of memberFunctionString
  211904             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  211905             : 
  211906             :           void post_construction_initialization() override;
  211907             : 
  211908             : 
  211909             : // End of memberFunctionString
  211910             : 
  211911             : 
  211912             :      public: 
  211913             :          virtual ~SgOmpDistributeSimdStatement();
  211914             : 
  211915             : 
  211916             :      public: 
  211917             :          SgOmpDistributeSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  211918             :          SgOmpDistributeSimdStatement(SgStatement* body); 
  211919             : 
  211920             :     protected:
  211921             : 
  211922             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDistributeSimdStatement>;
  211923             : 
  211924             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211925             : 
  211926             : 
  211927             :    };
  211928             : #endif
  211929             : 
  211930             : // postdeclarations for SgOmpDistributeSimdStatement
  211931             : 
  211932             : /* #line 211933 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211933             : 
  211934             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  211935             : 
  211936             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211937             : 
  211938             : 
  211939             : /* #line 211940 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211940             : 
  211941             : 
  211942             : 
  211943             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211944             : 
  211945             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  211946             : //      This code is automatically generated for each 
  211947             : //      terminal and non-terminal within the defined 
  211948             : //      grammar.  There is a simple way to change the 
  211949             : //      code to fix bugs etc.  See the ROSE README file
  211950             : //      for directions.
  211951             : 
  211952             : // tps: (02/22/2010): Adding DLL export requirements
  211953             : #include "rosedll.h"
  211954             : 
  211955             : // predeclarations for SgOmpDistributeParallelForStatement
  211956             : 
  211957             : /* #line 211958 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211958             : 
  211959             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  211960             : 
  211961             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  211962             : 
  211963             : #if 1
  211964             : // Class Definition for SgOmpDistributeParallelForStatement
  211965             : class ROSE_DLL_API SgOmpDistributeParallelForStatement  : public SgUpirFieldBodyStatement
  211966             :    {
  211967             :      public:
  211968             : 
  211969             : 
  211970             : /* #line 211971 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  211971             : 
  211972             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  211973             : // Start of memberFunctionString
  211974             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  211975             : 
  211976             : // *** COMMON CODE SECTION BEGINS HERE ***
  211977             : 
  211978             :     public:
  211979             : 
  211980             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  211981             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  211982             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  211983             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  211984             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  211985             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  211986             : 
  211987             :       /*! \brief returns a string representing the class name */
  211988             :           virtual std::string class_name() const override;
  211989             : 
  211990             :       /*! \brief returns new style SageIII enum values */
  211991             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  211992             : 
  211993             :       /*! \brief static variant value */
  211994             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  211995             :        // static const VariantT static_variant = V_SgOmpDistributeParallelForStatement;
  211996             :           enum { static_variant = V_SgOmpDistributeParallelForStatement };
  211997             : 
  211998             :        /* the generated cast function */
  211999             :       /*! \brief Casts pointer from base class to derived class */
  212000             :           ROSE_DLL_API friend       SgOmpDistributeParallelForStatement* isSgOmpDistributeParallelForStatement(       SgNode * s );
  212001             : 
  212002             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  212003             :           ROSE_DLL_API friend const SgOmpDistributeParallelForStatement* isSgOmpDistributeParallelForStatement( const SgNode * s );
  212004             : 
  212005             :      // ******************************************
  212006             :      // * Memory Pool / New / Delete
  212007             :      // ******************************************
  212008             : 
  212009             :      public:
  212010             :           /// \private
  212011             :           static const unsigned pool_size; //
  212012             :           /// \private
  212013             :           static std::vector<unsigned char *> pools; //
  212014             :           /// \private
  212015             :           static SgOmpDistributeParallelForStatement * next_node; // 
  212016             : 
  212017             :           /// \private
  212018             :           static unsigned long initializeStorageClassArray(SgOmpDistributeParallelForStatementStorageClass *); //
  212019             : 
  212020             :           /// \private
  212021             :           static void clearMemoryPool(); //
  212022             :           static void deleteMemoryPool(); //
  212023             : 
  212024             :           /// \private
  212025             :           static void extendMemoryPoolForFileIO(); //
  212026             : 
  212027             :           /// \private
  212028             :           static SgOmpDistributeParallelForStatement * getPointerFromGlobalIndex(unsigned long); //
  212029             :           /// \private
  212030             :           static SgOmpDistributeParallelForStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  212031             : 
  212032             :           /// \private
  212033             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  212034             :           /// \private
  212035             :           static void resetValidFreepointers(); //
  212036             :           /// \private
  212037             :           static unsigned long getNumberOfLastValidPointer(); //
  212038             : 
  212039             : 
  212040             : #if defined(INLINE_FUNCTIONS)
  212041             :       /*! \brief returns pointer to newly allocated IR node */
  212042             :           inline void *operator new (size_t size);
  212043             : #else
  212044             :       /*! \brief returns pointer to newly allocated IR node */
  212045             :           void *operator new (size_t size);
  212046             : #endif
  212047             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  212048             :           void operator delete (void* pointer, size_t size);
  212049             : 
  212050             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  212051           0 :           void operator delete (void* pointer)
  212052             :              {
  212053             :             // This is the generated delete operator...
  212054           0 :                SgOmpDistributeParallelForStatement::operator delete (pointer,sizeof(SgOmpDistributeParallelForStatement));
  212055             :              }
  212056             : 
  212057             :       /*! \brief Returns the total number of IR nodes of this type */
  212058             :           static size_t numberOfNodes();
  212059             : 
  212060             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  212061             :           static size_t memoryUsage();
  212062             : 
  212063             :       // End of scope which started in IR nodes specific code 
  212064             :       /* */
  212065             : 
  212066             :       /* name Internal Functions
  212067             :           \brief Internal functions ... incomplete-documentation
  212068             : 
  212069             :           These functions have been made public as part of the design, but they are suggested for internal use 
  212070             :           or by particularly knowledgeable users for specialized tools or applications.
  212071             : 
  212072             :           \internal We could not make these private because they are required by user for special purposes. And 
  212073             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  212074             :          
  212075             :        */
  212076             : 
  212077             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  212078             :        // overridden in every class by *generated* implementation
  212079             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  212080             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  212081             :        // MS: 06/28/02 container of names of variables or container indices 
  212082             :        // used used in the traversal to access AST successor nodes
  212083             :        // overridden in every class by *generated* implementation
  212084             :       /*! \brief container of names of variables or container indices used used in the traversal
  212085             :           to access AST successor nodes overridden in every class by *generated* implementation */
  212086             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  212087             : 
  212088             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  212089             :        // than all the vector copies. The implementation for these functions is generated for each class.
  212090             :       /*! \brief return number of children in the traversal successor list */
  212091             :           virtual size_t get_numberOfTraversalSuccessors() override;
  212092             :       /*! \brief index-based access to traversal successors by index number */
  212093             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  212094             :       /*! \brief index-based access to traversal successors by child node */
  212095             :           virtual size_t get_childIndex(SgNode *child) override;
  212096             : 
  212097             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  212098             :        // MS: 08/16/2002 method for generating RTI information
  212099             :       /*! \brief return C++ Runtime-Time-Information */
  212100             :           virtual RTIReturnType roseRTI() override;
  212101             : #endif
  212102             :       /* */
  212103             : 
  212104             : 
  212105             : 
  212106             :       /* name Deprecated Functions
  212107             :           \brief Deprecated functions ... incomplete-documentation
  212108             : 
  212109             :           These functions have been deprecated from use.
  212110             :        */
  212111             :       /* */
  212112             : 
  212113             :       /*! returns a C style string (char*) representing the class name */
  212114             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  212115             : 
  212116             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  212117             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  212118             : #if 0
  212119             :       /*! returns old style Sage II enum values */
  212120             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  212121             :       /*! returns old style Sage II enum values */
  212122             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  212123             : #endif
  212124             :       /* */
  212125             : 
  212126             : 
  212127             : 
  212128             : 
  212129             :      public:
  212130             :       /* name Traversal Support Functions
  212131             :           \brief Traversal support functions ... incomplete-documentation
  212132             : 
  212133             :           These functions have been made public as part of the design, but they are suggested for internal use 
  212134             :           or by particularly knowledgable users for specialized tools or applications.
  212135             :        */
  212136             :       /* */
  212137             : 
  212138             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  212139             :        // (inferior to ROSE traversal mechanism, experimental).
  212140             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  212141             :        */
  212142             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  212143             : 
  212144             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  212145             :       /*! \brief support for the classic visitor pattern done in GoF */
  212146             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  212147             : 
  212148             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  212149             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  212150             :        */
  212151             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  212152             : 
  212153             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  212154             :        */
  212155             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  212156             : 
  212157             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  212158             :        // This traversal helps support internal tools that call static member functions.
  212159             :        // note: this function operates on the memory pools.
  212160             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  212161             :        */
  212162             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  212163             :       /* */
  212164             : 
  212165             : 
  212166             :      public:
  212167             :       /* name Memory Allocation Functions
  212168             :           \brief Memory allocations functions ... incomplete-documentation
  212169             : 
  212170             :           These functions have been made public as part of the design, but they are suggested for internal use 
  212171             :           or by particularly knowledgable users for specialized tools or applications.
  212172             :        */
  212173             :       /* */
  212174             : 
  212175             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  212176             : 
  212177             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  212178             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  212179             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  212180             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  212181             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  212182             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  212183             :           being used with the AST File I/O mechanism.
  212184             :        */
  212185             :           virtual bool isInMemoryPool() override;
  212186             : 
  212187             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  212188             : 
  212189             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  212190             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  212191             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  212192             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  212193             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  212194             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  212195             :           being used with the AST File I/O mechanism.
  212196             :        */
  212197             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  212198             : 
  212199             :       // DQ (4/30/2006): Modified to be a const function.
  212200             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  212201             : 
  212202             :           This functions is part of general support for many possible tools to operate 
  212203             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  212204             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  212205             :           less than the set of pointers used by the AST file I/O. This is part of
  212206             :           work implemented by Andreas, and support tools such as the AST graph generation.
  212207             : 
  212208             :           \warning This function can return unexpected data members and thus the 
  212209             :                    order and the number of elements is unpredicable and subject 
  212210             :                    to change.
  212211             : 
  212212             :           \returns STL vector of pairs of SgNode* and strings
  212213             :        */
  212214             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  212215             : 
  212216             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  212217             : 
  212218             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  212219             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  212220             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  212221             : 
  212222             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  212223             :                    and subject to change.
  212224             :        */
  212225             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  212226             : 
  212227             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  212228             : 
  212229             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  212230             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  212231             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  212232             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  212233             : 
  212234             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  212235             : 
  212236             :           \returns long
  212237             :        */
  212238             :           virtual long getChildIndex( SgNode* childNode ) const override;
  212239             : 
  212240             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  212241             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  212242             :       /* \brief Constructor for use by AST File I/O Mechanism
  212243             : 
  212244             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  212245             :           which obtained via fast binary file I/O from disk.
  212246             :        */
  212247             :        // SgOmpDistributeParallelForStatement( SgOmpDistributeParallelForStatementStorageClass& source );
  212248             : 
  212249             : 
  212250             : 
  212251             : 
  212252             : 
  212253             :  // JH (10/24/2005): methods added to support the ast file IO
  212254             :     private:
  212255             : 
  212256             :       /* name AST Memory Allocation Support Functions
  212257             :           \brief Memory allocations support....
  212258             : 
  212259             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  212260             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  212261             :           and support the AST File I/O Mechanism.
  212262             :        */
  212263             :       /* */
  212264             : 
  212265             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  212266             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  212267             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  212268             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  212269             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  212270             :           a correspinding one in the AST_FILE_IO class!
  212271             :        */
  212272             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  212273             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  212274             :       /* \brief Typedef used for low level memory access.
  212275             :        */
  212276             :        // typedef unsigned char* TestType;
  212277             : 
  212278             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  212279             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  212280             :       /* \brief Typedef used to hold memory addresses as values.
  212281             :        */
  212282             :        // typedef unsigned long  AddressType;
  212283             : 
  212284             : 
  212285             : 
  212286             :        // necessary, to have direct access to the p_freepointer and the private methods !
  212287             :       /*! \brief friend class declaration to support AST File I/O */
  212288             :           friend class AST_FILE_IO;
  212289             : 
  212290             :       /*! \brief friend class declaration to support AST File I/O */
  212291             :           friend class SgOmpDistributeParallelForStatementStorageClass;
  212292             : 
  212293             :       /*! \brief friend class declaration to support AST File I/O */
  212294             :           friend class AstSpecificDataManagingClass;
  212295             : 
  212296             :       /*! \brief friend class declaration to support AST File I/O */
  212297             :           friend class AstSpecificDataManagingClassStorageClass;
  212298             :     public:
  212299             :       /*! \brief IR node constructor to support AST File I/O */
  212300             :           SgOmpDistributeParallelForStatement( const SgOmpDistributeParallelForStatementStorageClass& source );
  212301             : 
  212302             :  // private: // JJW hack
  212303             :        /*
  212304             :           name AST Memory Allocation Support Variables
  212305             :           Memory allocations support variables 
  212306             : 
  212307             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  212308             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  212309             :           and support the AST File I/O Mechanism.
  212310             :        */
  212311             :       /* */
  212312             : 
  212313             :     public:
  212314             : 
  212315             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  212316             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  212317             :       // virtual SgNode* addRegExpAttribute();
  212318             :       /*! \brief Support for AST matching using regular expression.
  212319             : 
  212320             :           This support is incomplete and the subject of current research to define 
  212321             :           RegEx trees to support inexact matching.
  212322             :        */
  212323             :           SgOmpDistributeParallelForStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  212324             : 
  212325             : // *** COMMON CODE SECTION ENDS HERE ***
  212326             : 
  212327             : 
  212328             : // End of memberFunctionString
  212329             : // Start of memberFunctionString
  212330             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  212331             : 
  212332             :      // the generated cast function
  212333             :      // friend ROSE_DLL_API SgOmpDistributeParallelForStatement* isSgOmpDistributeParallelForStatement ( SgNode* s );
  212334             : 
  212335             :           typedef SgUpirFieldBodyStatement base_node_type;
  212336             : 
  212337             : 
  212338             : // End of memberFunctionString
  212339             : // Start of memberFunctionString
  212340             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  212341             : 
  212342             :           void post_construction_initialization() override;
  212343             : 
  212344             : 
  212345             : // End of memberFunctionString
  212346             : 
  212347             : 
  212348             :      public: 
  212349             :          virtual ~SgOmpDistributeParallelForStatement();
  212350             : 
  212351             : 
  212352             :      public: 
  212353             :          SgOmpDistributeParallelForStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  212354             :          SgOmpDistributeParallelForStatement(SgStatement* body); 
  212355             : 
  212356             :     protected:
  212357             : 
  212358             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDistributeParallelForStatement>;
  212359             : 
  212360             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212361             : 
  212362             : 
  212363             :    };
  212364             : #endif
  212365             : 
  212366             : // postdeclarations for SgOmpDistributeParallelForStatement
  212367             : 
  212368             : /* #line 212369 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212369             : 
  212370             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  212371             : 
  212372             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212373             : 
  212374             : 
  212375             : /* #line 212376 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212376             : 
  212377             : 
  212378             : 
  212379             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212380             : 
  212381             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  212382             : //      This code is automatically generated for each 
  212383             : //      terminal and non-terminal within the defined 
  212384             : //      grammar.  There is a simple way to change the 
  212385             : //      code to fix bugs etc.  See the ROSE README file
  212386             : //      for directions.
  212387             : 
  212388             : // tps: (02/22/2010): Adding DLL export requirements
  212389             : #include "rosedll.h"
  212390             : 
  212391             : // predeclarations for SgOmpDistributeParallelForSimdStatement
  212392             : 
  212393             : /* #line 212394 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212394             : 
  212395             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  212396             : 
  212397             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212398             : 
  212399             : #if 1
  212400             : // Class Definition for SgOmpDistributeParallelForSimdStatement
  212401             : class ROSE_DLL_API SgOmpDistributeParallelForSimdStatement  : public SgUpirFieldBodyStatement
  212402             :    {
  212403             :      public:
  212404             : 
  212405             : 
  212406             : /* #line 212407 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212407             : 
  212408             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  212409             : // Start of memberFunctionString
  212410             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  212411             : 
  212412             : // *** COMMON CODE SECTION BEGINS HERE ***
  212413             : 
  212414             :     public:
  212415             : 
  212416             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  212417             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  212418             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  212419             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  212420             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  212421             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  212422             : 
  212423             :       /*! \brief returns a string representing the class name */
  212424             :           virtual std::string class_name() const override;
  212425             : 
  212426             :       /*! \brief returns new style SageIII enum values */
  212427             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  212428             : 
  212429             :       /*! \brief static variant value */
  212430             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  212431             :        // static const VariantT static_variant = V_SgOmpDistributeParallelForSimdStatement;
  212432             :           enum { static_variant = V_SgOmpDistributeParallelForSimdStatement };
  212433             : 
  212434             :        /* the generated cast function */
  212435             :       /*! \brief Casts pointer from base class to derived class */
  212436             :           ROSE_DLL_API friend       SgOmpDistributeParallelForSimdStatement* isSgOmpDistributeParallelForSimdStatement(       SgNode * s );
  212437             : 
  212438             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  212439             :           ROSE_DLL_API friend const SgOmpDistributeParallelForSimdStatement* isSgOmpDistributeParallelForSimdStatement( const SgNode * s );
  212440             : 
  212441             :      // ******************************************
  212442             :      // * Memory Pool / New / Delete
  212443             :      // ******************************************
  212444             : 
  212445             :      public:
  212446             :           /// \private
  212447             :           static const unsigned pool_size; //
  212448             :           /// \private
  212449             :           static std::vector<unsigned char *> pools; //
  212450             :           /// \private
  212451             :           static SgOmpDistributeParallelForSimdStatement * next_node; // 
  212452             : 
  212453             :           /// \private
  212454             :           static unsigned long initializeStorageClassArray(SgOmpDistributeParallelForSimdStatementStorageClass *); //
  212455             : 
  212456             :           /// \private
  212457             :           static void clearMemoryPool(); //
  212458             :           static void deleteMemoryPool(); //
  212459             : 
  212460             :           /// \private
  212461             :           static void extendMemoryPoolForFileIO(); //
  212462             : 
  212463             :           /// \private
  212464             :           static SgOmpDistributeParallelForSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  212465             :           /// \private
  212466             :           static SgOmpDistributeParallelForSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  212467             : 
  212468             :           /// \private
  212469             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  212470             :           /// \private
  212471             :           static void resetValidFreepointers(); //
  212472             :           /// \private
  212473             :           static unsigned long getNumberOfLastValidPointer(); //
  212474             : 
  212475             : 
  212476             : #if defined(INLINE_FUNCTIONS)
  212477             :       /*! \brief returns pointer to newly allocated IR node */
  212478             :           inline void *operator new (size_t size);
  212479             : #else
  212480             :       /*! \brief returns pointer to newly allocated IR node */
  212481             :           void *operator new (size_t size);
  212482             : #endif
  212483             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  212484             :           void operator delete (void* pointer, size_t size);
  212485             : 
  212486             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  212487           0 :           void operator delete (void* pointer)
  212488             :              {
  212489             :             // This is the generated delete operator...
  212490           0 :                SgOmpDistributeParallelForSimdStatement::operator delete (pointer,sizeof(SgOmpDistributeParallelForSimdStatement));
  212491             :              }
  212492             : 
  212493             :       /*! \brief Returns the total number of IR nodes of this type */
  212494             :           static size_t numberOfNodes();
  212495             : 
  212496             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  212497             :           static size_t memoryUsage();
  212498             : 
  212499             :       // End of scope which started in IR nodes specific code 
  212500             :       /* */
  212501             : 
  212502             :       /* name Internal Functions
  212503             :           \brief Internal functions ... incomplete-documentation
  212504             : 
  212505             :           These functions have been made public as part of the design, but they are suggested for internal use 
  212506             :           or by particularly knowledgeable users for specialized tools or applications.
  212507             : 
  212508             :           \internal We could not make these private because they are required by user for special purposes. And 
  212509             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  212510             :          
  212511             :        */
  212512             : 
  212513             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  212514             :        // overridden in every class by *generated* implementation
  212515             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  212516             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  212517             :        // MS: 06/28/02 container of names of variables or container indices 
  212518             :        // used used in the traversal to access AST successor nodes
  212519             :        // overridden in every class by *generated* implementation
  212520             :       /*! \brief container of names of variables or container indices used used in the traversal
  212521             :           to access AST successor nodes overridden in every class by *generated* implementation */
  212522             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  212523             : 
  212524             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  212525             :        // than all the vector copies. The implementation for these functions is generated for each class.
  212526             :       /*! \brief return number of children in the traversal successor list */
  212527             :           virtual size_t get_numberOfTraversalSuccessors() override;
  212528             :       /*! \brief index-based access to traversal successors by index number */
  212529             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  212530             :       /*! \brief index-based access to traversal successors by child node */
  212531             :           virtual size_t get_childIndex(SgNode *child) override;
  212532             : 
  212533             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  212534             :        // MS: 08/16/2002 method for generating RTI information
  212535             :       /*! \brief return C++ Runtime-Time-Information */
  212536             :           virtual RTIReturnType roseRTI() override;
  212537             : #endif
  212538             :       /* */
  212539             : 
  212540             : 
  212541             : 
  212542             :       /* name Deprecated Functions
  212543             :           \brief Deprecated functions ... incomplete-documentation
  212544             : 
  212545             :           These functions have been deprecated from use.
  212546             :        */
  212547             :       /* */
  212548             : 
  212549             :       /*! returns a C style string (char*) representing the class name */
  212550             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  212551             : 
  212552             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  212553             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  212554             : #if 0
  212555             :       /*! returns old style Sage II enum values */
  212556             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  212557             :       /*! returns old style Sage II enum values */
  212558             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  212559             : #endif
  212560             :       /* */
  212561             : 
  212562             : 
  212563             : 
  212564             : 
  212565             :      public:
  212566             :       /* name Traversal Support Functions
  212567             :           \brief Traversal support functions ... incomplete-documentation
  212568             : 
  212569             :           These functions have been made public as part of the design, but they are suggested for internal use 
  212570             :           or by particularly knowledgable users for specialized tools or applications.
  212571             :        */
  212572             :       /* */
  212573             : 
  212574             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  212575             :        // (inferior to ROSE traversal mechanism, experimental).
  212576             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  212577             :        */
  212578             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  212579             : 
  212580             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  212581             :       /*! \brief support for the classic visitor pattern done in GoF */
  212582             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  212583             : 
  212584             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  212585             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  212586             :        */
  212587             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  212588             : 
  212589             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  212590             :        */
  212591             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  212592             : 
  212593             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  212594             :        // This traversal helps support internal tools that call static member functions.
  212595             :        // note: this function operates on the memory pools.
  212596             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  212597             :        */
  212598             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  212599             :       /* */
  212600             : 
  212601             : 
  212602             :      public:
  212603             :       /* name Memory Allocation Functions
  212604             :           \brief Memory allocations functions ... incomplete-documentation
  212605             : 
  212606             :           These functions have been made public as part of the design, but they are suggested for internal use 
  212607             :           or by particularly knowledgable users for specialized tools or applications.
  212608             :        */
  212609             :       /* */
  212610             : 
  212611             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  212612             : 
  212613             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  212614             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  212615             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  212616             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  212617             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  212618             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  212619             :           being used with the AST File I/O mechanism.
  212620             :        */
  212621             :           virtual bool isInMemoryPool() override;
  212622             : 
  212623             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  212624             : 
  212625             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  212626             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  212627             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  212628             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  212629             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  212630             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  212631             :           being used with the AST File I/O mechanism.
  212632             :        */
  212633             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  212634             : 
  212635             :       // DQ (4/30/2006): Modified to be a const function.
  212636             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  212637             : 
  212638             :           This functions is part of general support for many possible tools to operate 
  212639             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  212640             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  212641             :           less than the set of pointers used by the AST file I/O. This is part of
  212642             :           work implemented by Andreas, and support tools such as the AST graph generation.
  212643             : 
  212644             :           \warning This function can return unexpected data members and thus the 
  212645             :                    order and the number of elements is unpredicable and subject 
  212646             :                    to change.
  212647             : 
  212648             :           \returns STL vector of pairs of SgNode* and strings
  212649             :        */
  212650             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  212651             : 
  212652             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  212653             : 
  212654             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  212655             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  212656             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  212657             : 
  212658             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  212659             :                    and subject to change.
  212660             :        */
  212661             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  212662             : 
  212663             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  212664             : 
  212665             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  212666             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  212667             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  212668             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  212669             : 
  212670             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  212671             : 
  212672             :           \returns long
  212673             :        */
  212674             :           virtual long getChildIndex( SgNode* childNode ) const override;
  212675             : 
  212676             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  212677             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  212678             :       /* \brief Constructor for use by AST File I/O Mechanism
  212679             : 
  212680             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  212681             :           which obtained via fast binary file I/O from disk.
  212682             :        */
  212683             :        // SgOmpDistributeParallelForSimdStatement( SgOmpDistributeParallelForSimdStatementStorageClass& source );
  212684             : 
  212685             : 
  212686             : 
  212687             : 
  212688             : 
  212689             :  // JH (10/24/2005): methods added to support the ast file IO
  212690             :     private:
  212691             : 
  212692             :       /* name AST Memory Allocation Support Functions
  212693             :           \brief Memory allocations support....
  212694             : 
  212695             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  212696             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  212697             :           and support the AST File I/O Mechanism.
  212698             :        */
  212699             :       /* */
  212700             : 
  212701             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  212702             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  212703             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  212704             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  212705             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  212706             :           a correspinding one in the AST_FILE_IO class!
  212707             :        */
  212708             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  212709             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  212710             :       /* \brief Typedef used for low level memory access.
  212711             :        */
  212712             :        // typedef unsigned char* TestType;
  212713             : 
  212714             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  212715             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  212716             :       /* \brief Typedef used to hold memory addresses as values.
  212717             :        */
  212718             :        // typedef unsigned long  AddressType;
  212719             : 
  212720             : 
  212721             : 
  212722             :        // necessary, to have direct access to the p_freepointer and the private methods !
  212723             :       /*! \brief friend class declaration to support AST File I/O */
  212724             :           friend class AST_FILE_IO;
  212725             : 
  212726             :       /*! \brief friend class declaration to support AST File I/O */
  212727             :           friend class SgOmpDistributeParallelForSimdStatementStorageClass;
  212728             : 
  212729             :       /*! \brief friend class declaration to support AST File I/O */
  212730             :           friend class AstSpecificDataManagingClass;
  212731             : 
  212732             :       /*! \brief friend class declaration to support AST File I/O */
  212733             :           friend class AstSpecificDataManagingClassStorageClass;
  212734             :     public:
  212735             :       /*! \brief IR node constructor to support AST File I/O */
  212736             :           SgOmpDistributeParallelForSimdStatement( const SgOmpDistributeParallelForSimdStatementStorageClass& source );
  212737             : 
  212738             :  // private: // JJW hack
  212739             :        /*
  212740             :           name AST Memory Allocation Support Variables
  212741             :           Memory allocations support variables 
  212742             : 
  212743             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  212744             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  212745             :           and support the AST File I/O Mechanism.
  212746             :        */
  212747             :       /* */
  212748             : 
  212749             :     public:
  212750             : 
  212751             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  212752             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  212753             :       // virtual SgNode* addRegExpAttribute();
  212754             :       /*! \brief Support for AST matching using regular expression.
  212755             : 
  212756             :           This support is incomplete and the subject of current research to define 
  212757             :           RegEx trees to support inexact matching.
  212758             :        */
  212759             :           SgOmpDistributeParallelForSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  212760             : 
  212761             : // *** COMMON CODE SECTION ENDS HERE ***
  212762             : 
  212763             : 
  212764             : // End of memberFunctionString
  212765             : // Start of memberFunctionString
  212766             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  212767             : 
  212768             :      // the generated cast function
  212769             :      // friend ROSE_DLL_API SgOmpDistributeParallelForSimdStatement* isSgOmpDistributeParallelForSimdStatement ( SgNode* s );
  212770             : 
  212771             :           typedef SgUpirFieldBodyStatement base_node_type;
  212772             : 
  212773             : 
  212774             : // End of memberFunctionString
  212775             : // Start of memberFunctionString
  212776             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  212777             : 
  212778             :           void post_construction_initialization() override;
  212779             : 
  212780             : 
  212781             : // End of memberFunctionString
  212782             : 
  212783             : 
  212784             :      public: 
  212785             :          virtual ~SgOmpDistributeParallelForSimdStatement();
  212786             : 
  212787             : 
  212788             :      public: 
  212789             :          SgOmpDistributeParallelForSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  212790             :          SgOmpDistributeParallelForSimdStatement(SgStatement* body); 
  212791             : 
  212792             :     protected:
  212793             : 
  212794             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDistributeParallelForSimdStatement>;
  212795             : 
  212796             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212797             : 
  212798             : 
  212799             :    };
  212800             : #endif
  212801             : 
  212802             : // postdeclarations for SgOmpDistributeParallelForSimdStatement
  212803             : 
  212804             : /* #line 212805 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212805             : 
  212806             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  212807             : 
  212808             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212809             : 
  212810             : 
  212811             : /* #line 212812 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212812             : 
  212813             : 
  212814             : 
  212815             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212816             : 
  212817             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  212818             : //      This code is automatically generated for each 
  212819             : //      terminal and non-terminal within the defined 
  212820             : //      grammar.  There is a simple way to change the 
  212821             : //      code to fix bugs etc.  See the ROSE README file
  212822             : //      for directions.
  212823             : 
  212824             : // tps: (02/22/2010): Adding DLL export requirements
  212825             : #include "rosedll.h"
  212826             : 
  212827             : // predeclarations for SgOmpTaskloopSimdStatement
  212828             : 
  212829             : /* #line 212830 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212830             : 
  212831             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  212832             : 
  212833             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  212834             : 
  212835             : #if 1
  212836             : // Class Definition for SgOmpTaskloopSimdStatement
  212837             : class ROSE_DLL_API SgOmpTaskloopSimdStatement  : public SgUpirFieldBodyStatement
  212838             :    {
  212839             :      public:
  212840             : 
  212841             : 
  212842             : /* #line 212843 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  212843             : 
  212844             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  212845             : // Start of memberFunctionString
  212846             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  212847             : 
  212848             : // *** COMMON CODE SECTION BEGINS HERE ***
  212849             : 
  212850             :     public:
  212851             : 
  212852             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  212853             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  212854             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  212855             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  212856             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  212857             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  212858             : 
  212859             :       /*! \brief returns a string representing the class name */
  212860             :           virtual std::string class_name() const override;
  212861             : 
  212862             :       /*! \brief returns new style SageIII enum values */
  212863             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  212864             : 
  212865             :       /*! \brief static variant value */
  212866             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  212867             :        // static const VariantT static_variant = V_SgOmpTaskloopSimdStatement;
  212868             :           enum { static_variant = V_SgOmpTaskloopSimdStatement };
  212869             : 
  212870             :        /* the generated cast function */
  212871             :       /*! \brief Casts pointer from base class to derived class */
  212872             :           ROSE_DLL_API friend       SgOmpTaskloopSimdStatement* isSgOmpTaskloopSimdStatement(       SgNode * s );
  212873             : 
  212874             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  212875             :           ROSE_DLL_API friend const SgOmpTaskloopSimdStatement* isSgOmpTaskloopSimdStatement( const SgNode * s );
  212876             : 
  212877             :      // ******************************************
  212878             :      // * Memory Pool / New / Delete
  212879             :      // ******************************************
  212880             : 
  212881             :      public:
  212882             :           /// \private
  212883             :           static const unsigned pool_size; //
  212884             :           /// \private
  212885             :           static std::vector<unsigned char *> pools; //
  212886             :           /// \private
  212887             :           static SgOmpTaskloopSimdStatement * next_node; // 
  212888             : 
  212889             :           /// \private
  212890             :           static unsigned long initializeStorageClassArray(SgOmpTaskloopSimdStatementStorageClass *); //
  212891             : 
  212892             :           /// \private
  212893             :           static void clearMemoryPool(); //
  212894             :           static void deleteMemoryPool(); //
  212895             : 
  212896             :           /// \private
  212897             :           static void extendMemoryPoolForFileIO(); //
  212898             : 
  212899             :           /// \private
  212900             :           static SgOmpTaskloopSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  212901             :           /// \private
  212902             :           static SgOmpTaskloopSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  212903             : 
  212904             :           /// \private
  212905             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  212906             :           /// \private
  212907             :           static void resetValidFreepointers(); //
  212908             :           /// \private
  212909             :           static unsigned long getNumberOfLastValidPointer(); //
  212910             : 
  212911             : 
  212912             : #if defined(INLINE_FUNCTIONS)
  212913             :       /*! \brief returns pointer to newly allocated IR node */
  212914             :           inline void *operator new (size_t size);
  212915             : #else
  212916             :       /*! \brief returns pointer to newly allocated IR node */
  212917             :           void *operator new (size_t size);
  212918             : #endif
  212919             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  212920             :           void operator delete (void* pointer, size_t size);
  212921             : 
  212922             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  212923           0 :           void operator delete (void* pointer)
  212924             :              {
  212925             :             // This is the generated delete operator...
  212926           0 :                SgOmpTaskloopSimdStatement::operator delete (pointer,sizeof(SgOmpTaskloopSimdStatement));
  212927             :              }
  212928             : 
  212929             :       /*! \brief Returns the total number of IR nodes of this type */
  212930             :           static size_t numberOfNodes();
  212931             : 
  212932             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  212933             :           static size_t memoryUsage();
  212934             : 
  212935             :       // End of scope which started in IR nodes specific code 
  212936             :       /* */
  212937             : 
  212938             :       /* name Internal Functions
  212939             :           \brief Internal functions ... incomplete-documentation
  212940             : 
  212941             :           These functions have been made public as part of the design, but they are suggested for internal use 
  212942             :           or by particularly knowledgeable users for specialized tools or applications.
  212943             : 
  212944             :           \internal We could not make these private because they are required by user for special purposes. And 
  212945             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  212946             :          
  212947             :        */
  212948             : 
  212949             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  212950             :        // overridden in every class by *generated* implementation
  212951             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  212952             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  212953             :        // MS: 06/28/02 container of names of variables or container indices 
  212954             :        // used used in the traversal to access AST successor nodes
  212955             :        // overridden in every class by *generated* implementation
  212956             :       /*! \brief container of names of variables or container indices used used in the traversal
  212957             :           to access AST successor nodes overridden in every class by *generated* implementation */
  212958             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  212959             : 
  212960             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  212961             :        // than all the vector copies. The implementation for these functions is generated for each class.
  212962             :       /*! \brief return number of children in the traversal successor list */
  212963             :           virtual size_t get_numberOfTraversalSuccessors() override;
  212964             :       /*! \brief index-based access to traversal successors by index number */
  212965             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  212966             :       /*! \brief index-based access to traversal successors by child node */
  212967             :           virtual size_t get_childIndex(SgNode *child) override;
  212968             : 
  212969             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  212970             :        // MS: 08/16/2002 method for generating RTI information
  212971             :       /*! \brief return C++ Runtime-Time-Information */
  212972             :           virtual RTIReturnType roseRTI() override;
  212973             : #endif
  212974             :       /* */
  212975             : 
  212976             : 
  212977             : 
  212978             :       /* name Deprecated Functions
  212979             :           \brief Deprecated functions ... incomplete-documentation
  212980             : 
  212981             :           These functions have been deprecated from use.
  212982             :        */
  212983             :       /* */
  212984             : 
  212985             :       /*! returns a C style string (char*) representing the class name */
  212986             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  212987             : 
  212988             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  212989             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  212990             : #if 0
  212991             :       /*! returns old style Sage II enum values */
  212992             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  212993             :       /*! returns old style Sage II enum values */
  212994             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  212995             : #endif
  212996             :       /* */
  212997             : 
  212998             : 
  212999             : 
  213000             : 
  213001             :      public:
  213002             :       /* name Traversal Support Functions
  213003             :           \brief Traversal support functions ... incomplete-documentation
  213004             : 
  213005             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213006             :           or by particularly knowledgable users for specialized tools or applications.
  213007             :        */
  213008             :       /* */
  213009             : 
  213010             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  213011             :        // (inferior to ROSE traversal mechanism, experimental).
  213012             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  213013             :        */
  213014             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  213015             : 
  213016             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  213017             :       /*! \brief support for the classic visitor pattern done in GoF */
  213018             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  213019             : 
  213020             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  213021             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  213022             :        */
  213023             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  213024             : 
  213025             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  213026             :        */
  213027             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  213028             : 
  213029             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  213030             :        // This traversal helps support internal tools that call static member functions.
  213031             :        // note: this function operates on the memory pools.
  213032             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  213033             :        */
  213034             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  213035             :       /* */
  213036             : 
  213037             : 
  213038             :      public:
  213039             :       /* name Memory Allocation Functions
  213040             :           \brief Memory allocations functions ... incomplete-documentation
  213041             : 
  213042             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213043             :           or by particularly knowledgable users for specialized tools or applications.
  213044             :        */
  213045             :       /* */
  213046             : 
  213047             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  213048             : 
  213049             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  213050             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  213051             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  213052             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  213053             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  213054             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  213055             :           being used with the AST File I/O mechanism.
  213056             :        */
  213057             :           virtual bool isInMemoryPool() override;
  213058             : 
  213059             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  213060             : 
  213061             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  213062             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  213063             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  213064             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  213065             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  213066             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  213067             :           being used with the AST File I/O mechanism.
  213068             :        */
  213069             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  213070             : 
  213071             :       // DQ (4/30/2006): Modified to be a const function.
  213072             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  213073             : 
  213074             :           This functions is part of general support for many possible tools to operate 
  213075             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  213076             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  213077             :           less than the set of pointers used by the AST file I/O. This is part of
  213078             :           work implemented by Andreas, and support tools such as the AST graph generation.
  213079             : 
  213080             :           \warning This function can return unexpected data members and thus the 
  213081             :                    order and the number of elements is unpredicable and subject 
  213082             :                    to change.
  213083             : 
  213084             :           \returns STL vector of pairs of SgNode* and strings
  213085             :        */
  213086             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  213087             : 
  213088             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  213089             : 
  213090             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  213091             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  213092             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  213093             : 
  213094             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  213095             :                    and subject to change.
  213096             :        */
  213097             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  213098             : 
  213099             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  213100             : 
  213101             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  213102             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  213103             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  213104             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  213105             : 
  213106             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  213107             : 
  213108             :           \returns long
  213109             :        */
  213110             :           virtual long getChildIndex( SgNode* childNode ) const override;
  213111             : 
  213112             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  213113             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  213114             :       /* \brief Constructor for use by AST File I/O Mechanism
  213115             : 
  213116             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  213117             :           which obtained via fast binary file I/O from disk.
  213118             :        */
  213119             :        // SgOmpTaskloopSimdStatement( SgOmpTaskloopSimdStatementStorageClass& source );
  213120             : 
  213121             : 
  213122             : 
  213123             : 
  213124             : 
  213125             :  // JH (10/24/2005): methods added to support the ast file IO
  213126             :     private:
  213127             : 
  213128             :       /* name AST Memory Allocation Support Functions
  213129             :           \brief Memory allocations support....
  213130             : 
  213131             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  213132             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  213133             :           and support the AST File I/O Mechanism.
  213134             :        */
  213135             :       /* */
  213136             : 
  213137             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  213138             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  213139             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  213140             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  213141             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  213142             :           a correspinding one in the AST_FILE_IO class!
  213143             :        */
  213144             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  213145             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  213146             :       /* \brief Typedef used for low level memory access.
  213147             :        */
  213148             :        // typedef unsigned char* TestType;
  213149             : 
  213150             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  213151             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  213152             :       /* \brief Typedef used to hold memory addresses as values.
  213153             :        */
  213154             :        // typedef unsigned long  AddressType;
  213155             : 
  213156             : 
  213157             : 
  213158             :        // necessary, to have direct access to the p_freepointer and the private methods !
  213159             :       /*! \brief friend class declaration to support AST File I/O */
  213160             :           friend class AST_FILE_IO;
  213161             : 
  213162             :       /*! \brief friend class declaration to support AST File I/O */
  213163             :           friend class SgOmpTaskloopSimdStatementStorageClass;
  213164             : 
  213165             :       /*! \brief friend class declaration to support AST File I/O */
  213166             :           friend class AstSpecificDataManagingClass;
  213167             : 
  213168             :       /*! \brief friend class declaration to support AST File I/O */
  213169             :           friend class AstSpecificDataManagingClassStorageClass;
  213170             :     public:
  213171             :       /*! \brief IR node constructor to support AST File I/O */
  213172             :           SgOmpTaskloopSimdStatement( const SgOmpTaskloopSimdStatementStorageClass& source );
  213173             : 
  213174             :  // private: // JJW hack
  213175             :        /*
  213176             :           name AST Memory Allocation Support Variables
  213177             :           Memory allocations support variables 
  213178             : 
  213179             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  213180             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  213181             :           and support the AST File I/O Mechanism.
  213182             :        */
  213183             :       /* */
  213184             : 
  213185             :     public:
  213186             : 
  213187             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  213188             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  213189             :       // virtual SgNode* addRegExpAttribute();
  213190             :       /*! \brief Support for AST matching using regular expression.
  213191             : 
  213192             :           This support is incomplete and the subject of current research to define 
  213193             :           RegEx trees to support inexact matching.
  213194             :        */
  213195             :           SgOmpTaskloopSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  213196             : 
  213197             : // *** COMMON CODE SECTION ENDS HERE ***
  213198             : 
  213199             : 
  213200             : // End of memberFunctionString
  213201             : // Start of memberFunctionString
  213202             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  213203             : 
  213204             :      // the generated cast function
  213205             :      // friend ROSE_DLL_API SgOmpTaskloopSimdStatement* isSgOmpTaskloopSimdStatement ( SgNode* s );
  213206             : 
  213207             :           typedef SgUpirFieldBodyStatement base_node_type;
  213208             : 
  213209             : 
  213210             : // End of memberFunctionString
  213211             : // Start of memberFunctionString
  213212             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  213213             : 
  213214             :           void post_construction_initialization() override;
  213215             : 
  213216             : 
  213217             : // End of memberFunctionString
  213218             : 
  213219             : 
  213220             :      public: 
  213221             :          virtual ~SgOmpTaskloopSimdStatement();
  213222             : 
  213223             : 
  213224             :      public: 
  213225             :          SgOmpTaskloopSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  213226             :          SgOmpTaskloopSimdStatement(SgStatement* body); 
  213227             : 
  213228             :     protected:
  213229             : 
  213230             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTaskloopSimdStatement>;
  213231             : 
  213232             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213233             : 
  213234             : 
  213235             :    };
  213236             : #endif
  213237             : 
  213238             : // postdeclarations for SgOmpTaskloopSimdStatement
  213239             : 
  213240             : /* #line 213241 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213241             : 
  213242             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  213243             : 
  213244             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213245             : 
  213246             : 
  213247             : /* #line 213248 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213248             : 
  213249             : 
  213250             : 
  213251             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213252             : 
  213253             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  213254             : //      This code is automatically generated for each 
  213255             : //      terminal and non-terminal within the defined 
  213256             : //      grammar.  There is a simple way to change the 
  213257             : //      code to fix bugs etc.  See the ROSE README file
  213258             : //      for directions.
  213259             : 
  213260             : // tps: (02/22/2010): Adding DLL export requirements
  213261             : #include "rosedll.h"
  213262             : 
  213263             : // predeclarations for SgOmpMasterTaskloopSimdStatement
  213264             : 
  213265             : /* #line 213266 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213266             : 
  213267             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  213268             : 
  213269             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213270             : 
  213271             : #if 1
  213272             : // Class Definition for SgOmpMasterTaskloopSimdStatement
  213273             : class ROSE_DLL_API SgOmpMasterTaskloopSimdStatement  : public SgUpirFieldBodyStatement
  213274             :    {
  213275             :      public:
  213276             : 
  213277             : 
  213278             : /* #line 213279 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213279             : 
  213280             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  213281             : // Start of memberFunctionString
  213282             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  213283             : 
  213284             : // *** COMMON CODE SECTION BEGINS HERE ***
  213285             : 
  213286             :     public:
  213287             : 
  213288             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  213289             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  213290             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  213291             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  213292             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  213293             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  213294             : 
  213295             :       /*! \brief returns a string representing the class name */
  213296             :           virtual std::string class_name() const override;
  213297             : 
  213298             :       /*! \brief returns new style SageIII enum values */
  213299             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  213300             : 
  213301             :       /*! \brief static variant value */
  213302             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  213303             :        // static const VariantT static_variant = V_SgOmpMasterTaskloopSimdStatement;
  213304             :           enum { static_variant = V_SgOmpMasterTaskloopSimdStatement };
  213305             : 
  213306             :        /* the generated cast function */
  213307             :       /*! \brief Casts pointer from base class to derived class */
  213308             :           ROSE_DLL_API friend       SgOmpMasterTaskloopSimdStatement* isSgOmpMasterTaskloopSimdStatement(       SgNode * s );
  213309             : 
  213310             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  213311             :           ROSE_DLL_API friend const SgOmpMasterTaskloopSimdStatement* isSgOmpMasterTaskloopSimdStatement( const SgNode * s );
  213312             : 
  213313             :      // ******************************************
  213314             :      // * Memory Pool / New / Delete
  213315             :      // ******************************************
  213316             : 
  213317             :      public:
  213318             :           /// \private
  213319             :           static const unsigned pool_size; //
  213320             :           /// \private
  213321             :           static std::vector<unsigned char *> pools; //
  213322             :           /// \private
  213323             :           static SgOmpMasterTaskloopSimdStatement * next_node; // 
  213324             : 
  213325             :           /// \private
  213326             :           static unsigned long initializeStorageClassArray(SgOmpMasterTaskloopSimdStatementStorageClass *); //
  213327             : 
  213328             :           /// \private
  213329             :           static void clearMemoryPool(); //
  213330             :           static void deleteMemoryPool(); //
  213331             : 
  213332             :           /// \private
  213333             :           static void extendMemoryPoolForFileIO(); //
  213334             : 
  213335             :           /// \private
  213336             :           static SgOmpMasterTaskloopSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  213337             :           /// \private
  213338             :           static SgOmpMasterTaskloopSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  213339             : 
  213340             :           /// \private
  213341             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  213342             :           /// \private
  213343             :           static void resetValidFreepointers(); //
  213344             :           /// \private
  213345             :           static unsigned long getNumberOfLastValidPointer(); //
  213346             : 
  213347             : 
  213348             : #if defined(INLINE_FUNCTIONS)
  213349             :       /*! \brief returns pointer to newly allocated IR node */
  213350             :           inline void *operator new (size_t size);
  213351             : #else
  213352             :       /*! \brief returns pointer to newly allocated IR node */
  213353             :           void *operator new (size_t size);
  213354             : #endif
  213355             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  213356             :           void operator delete (void* pointer, size_t size);
  213357             : 
  213358             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  213359           0 :           void operator delete (void* pointer)
  213360             :              {
  213361             :             // This is the generated delete operator...
  213362           0 :                SgOmpMasterTaskloopSimdStatement::operator delete (pointer,sizeof(SgOmpMasterTaskloopSimdStatement));
  213363             :              }
  213364             : 
  213365             :       /*! \brief Returns the total number of IR nodes of this type */
  213366             :           static size_t numberOfNodes();
  213367             : 
  213368             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  213369             :           static size_t memoryUsage();
  213370             : 
  213371             :       // End of scope which started in IR nodes specific code 
  213372             :       /* */
  213373             : 
  213374             :       /* name Internal Functions
  213375             :           \brief Internal functions ... incomplete-documentation
  213376             : 
  213377             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213378             :           or by particularly knowledgeable users for specialized tools or applications.
  213379             : 
  213380             :           \internal We could not make these private because they are required by user for special purposes. And 
  213381             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  213382             :          
  213383             :        */
  213384             : 
  213385             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  213386             :        // overridden in every class by *generated* implementation
  213387             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  213388             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  213389             :        // MS: 06/28/02 container of names of variables or container indices 
  213390             :        // used used in the traversal to access AST successor nodes
  213391             :        // overridden in every class by *generated* implementation
  213392             :       /*! \brief container of names of variables or container indices used used in the traversal
  213393             :           to access AST successor nodes overridden in every class by *generated* implementation */
  213394             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  213395             : 
  213396             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  213397             :        // than all the vector copies. The implementation for these functions is generated for each class.
  213398             :       /*! \brief return number of children in the traversal successor list */
  213399             :           virtual size_t get_numberOfTraversalSuccessors() override;
  213400             :       /*! \brief index-based access to traversal successors by index number */
  213401             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  213402             :       /*! \brief index-based access to traversal successors by child node */
  213403             :           virtual size_t get_childIndex(SgNode *child) override;
  213404             : 
  213405             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  213406             :        // MS: 08/16/2002 method for generating RTI information
  213407             :       /*! \brief return C++ Runtime-Time-Information */
  213408             :           virtual RTIReturnType roseRTI() override;
  213409             : #endif
  213410             :       /* */
  213411             : 
  213412             : 
  213413             : 
  213414             :       /* name Deprecated Functions
  213415             :           \brief Deprecated functions ... incomplete-documentation
  213416             : 
  213417             :           These functions have been deprecated from use.
  213418             :        */
  213419             :       /* */
  213420             : 
  213421             :       /*! returns a C style string (char*) representing the class name */
  213422             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  213423             : 
  213424             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  213425             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  213426             : #if 0
  213427             :       /*! returns old style Sage II enum values */
  213428             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  213429             :       /*! returns old style Sage II enum values */
  213430             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  213431             : #endif
  213432             :       /* */
  213433             : 
  213434             : 
  213435             : 
  213436             : 
  213437             :      public:
  213438             :       /* name Traversal Support Functions
  213439             :           \brief Traversal support functions ... incomplete-documentation
  213440             : 
  213441             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213442             :           or by particularly knowledgable users for specialized tools or applications.
  213443             :        */
  213444             :       /* */
  213445             : 
  213446             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  213447             :        // (inferior to ROSE traversal mechanism, experimental).
  213448             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  213449             :        */
  213450             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  213451             : 
  213452             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  213453             :       /*! \brief support for the classic visitor pattern done in GoF */
  213454             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  213455             : 
  213456             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  213457             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  213458             :        */
  213459             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  213460             : 
  213461             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  213462             :        */
  213463             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  213464             : 
  213465             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  213466             :        // This traversal helps support internal tools that call static member functions.
  213467             :        // note: this function operates on the memory pools.
  213468             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  213469             :        */
  213470             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  213471             :       /* */
  213472             : 
  213473             : 
  213474             :      public:
  213475             :       /* name Memory Allocation Functions
  213476             :           \brief Memory allocations functions ... incomplete-documentation
  213477             : 
  213478             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213479             :           or by particularly knowledgable users for specialized tools or applications.
  213480             :        */
  213481             :       /* */
  213482             : 
  213483             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  213484             : 
  213485             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  213486             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  213487             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  213488             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  213489             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  213490             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  213491             :           being used with the AST File I/O mechanism.
  213492             :        */
  213493             :           virtual bool isInMemoryPool() override;
  213494             : 
  213495             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  213496             : 
  213497             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  213498             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  213499             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  213500             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  213501             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  213502             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  213503             :           being used with the AST File I/O mechanism.
  213504             :        */
  213505             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  213506             : 
  213507             :       // DQ (4/30/2006): Modified to be a const function.
  213508             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  213509             : 
  213510             :           This functions is part of general support for many possible tools to operate 
  213511             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  213512             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  213513             :           less than the set of pointers used by the AST file I/O. This is part of
  213514             :           work implemented by Andreas, and support tools such as the AST graph generation.
  213515             : 
  213516             :           \warning This function can return unexpected data members and thus the 
  213517             :                    order and the number of elements is unpredicable and subject 
  213518             :                    to change.
  213519             : 
  213520             :           \returns STL vector of pairs of SgNode* and strings
  213521             :        */
  213522             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  213523             : 
  213524             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  213525             : 
  213526             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  213527             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  213528             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  213529             : 
  213530             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  213531             :                    and subject to change.
  213532             :        */
  213533             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  213534             : 
  213535             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  213536             : 
  213537             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  213538             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  213539             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  213540             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  213541             : 
  213542             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  213543             : 
  213544             :           \returns long
  213545             :        */
  213546             :           virtual long getChildIndex( SgNode* childNode ) const override;
  213547             : 
  213548             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  213549             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  213550             :       /* \brief Constructor for use by AST File I/O Mechanism
  213551             : 
  213552             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  213553             :           which obtained via fast binary file I/O from disk.
  213554             :        */
  213555             :        // SgOmpMasterTaskloopSimdStatement( SgOmpMasterTaskloopSimdStatementStorageClass& source );
  213556             : 
  213557             : 
  213558             : 
  213559             : 
  213560             : 
  213561             :  // JH (10/24/2005): methods added to support the ast file IO
  213562             :     private:
  213563             : 
  213564             :       /* name AST Memory Allocation Support Functions
  213565             :           \brief Memory allocations support....
  213566             : 
  213567             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  213568             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  213569             :           and support the AST File I/O Mechanism.
  213570             :        */
  213571             :       /* */
  213572             : 
  213573             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  213574             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  213575             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  213576             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  213577             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  213578             :           a correspinding one in the AST_FILE_IO class!
  213579             :        */
  213580             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  213581             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  213582             :       /* \brief Typedef used for low level memory access.
  213583             :        */
  213584             :        // typedef unsigned char* TestType;
  213585             : 
  213586             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  213587             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  213588             :       /* \brief Typedef used to hold memory addresses as values.
  213589             :        */
  213590             :        // typedef unsigned long  AddressType;
  213591             : 
  213592             : 
  213593             : 
  213594             :        // necessary, to have direct access to the p_freepointer and the private methods !
  213595             :       /*! \brief friend class declaration to support AST File I/O */
  213596             :           friend class AST_FILE_IO;
  213597             : 
  213598             :       /*! \brief friend class declaration to support AST File I/O */
  213599             :           friend class SgOmpMasterTaskloopSimdStatementStorageClass;
  213600             : 
  213601             :       /*! \brief friend class declaration to support AST File I/O */
  213602             :           friend class AstSpecificDataManagingClass;
  213603             : 
  213604             :       /*! \brief friend class declaration to support AST File I/O */
  213605             :           friend class AstSpecificDataManagingClassStorageClass;
  213606             :     public:
  213607             :       /*! \brief IR node constructor to support AST File I/O */
  213608             :           SgOmpMasterTaskloopSimdStatement( const SgOmpMasterTaskloopSimdStatementStorageClass& source );
  213609             : 
  213610             :  // private: // JJW hack
  213611             :        /*
  213612             :           name AST Memory Allocation Support Variables
  213613             :           Memory allocations support variables 
  213614             : 
  213615             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  213616             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  213617             :           and support the AST File I/O Mechanism.
  213618             :        */
  213619             :       /* */
  213620             : 
  213621             :     public:
  213622             : 
  213623             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  213624             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  213625             :       // virtual SgNode* addRegExpAttribute();
  213626             :       /*! \brief Support for AST matching using regular expression.
  213627             : 
  213628             :           This support is incomplete and the subject of current research to define 
  213629             :           RegEx trees to support inexact matching.
  213630             :        */
  213631             :           SgOmpMasterTaskloopSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  213632             : 
  213633             : // *** COMMON CODE SECTION ENDS HERE ***
  213634             : 
  213635             : 
  213636             : // End of memberFunctionString
  213637             : // Start of memberFunctionString
  213638             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  213639             : 
  213640             :      // the generated cast function
  213641             :      // friend ROSE_DLL_API SgOmpMasterTaskloopSimdStatement* isSgOmpMasterTaskloopSimdStatement ( SgNode* s );
  213642             : 
  213643             :           typedef SgUpirFieldBodyStatement base_node_type;
  213644             : 
  213645             : 
  213646             : // End of memberFunctionString
  213647             : // Start of memberFunctionString
  213648             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  213649             : 
  213650             :           void post_construction_initialization() override;
  213651             : 
  213652             : 
  213653             : // End of memberFunctionString
  213654             : 
  213655             : 
  213656             :      public: 
  213657             :          virtual ~SgOmpMasterTaskloopSimdStatement();
  213658             : 
  213659             : 
  213660             :      public: 
  213661             :          SgOmpMasterTaskloopSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  213662             :          SgOmpMasterTaskloopSimdStatement(SgStatement* body); 
  213663             : 
  213664             :     protected:
  213665             : 
  213666             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpMasterTaskloopSimdStatement>;
  213667             : 
  213668             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213669             : 
  213670             : 
  213671             :    };
  213672             : #endif
  213673             : 
  213674             : // postdeclarations for SgOmpMasterTaskloopSimdStatement
  213675             : 
  213676             : /* #line 213677 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213677             : 
  213678             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  213679             : 
  213680             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213681             : 
  213682             : 
  213683             : /* #line 213684 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213684             : 
  213685             : 
  213686             : 
  213687             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213688             : 
  213689             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  213690             : //      This code is automatically generated for each 
  213691             : //      terminal and non-terminal within the defined 
  213692             : //      grammar.  There is a simple way to change the 
  213693             : //      code to fix bugs etc.  See the ROSE README file
  213694             : //      for directions.
  213695             : 
  213696             : // tps: (02/22/2010): Adding DLL export requirements
  213697             : #include "rosedll.h"
  213698             : 
  213699             : // predeclarations for SgOmpParallelMasterTaskloopStatement
  213700             : 
  213701             : /* #line 213702 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213702             : 
  213703             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  213704             : 
  213705             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  213706             : 
  213707             : #if 1
  213708             : // Class Definition for SgOmpParallelMasterTaskloopStatement
  213709             : class ROSE_DLL_API SgOmpParallelMasterTaskloopStatement  : public SgUpirFieldBodyStatement
  213710             :    {
  213711             :      public:
  213712             : 
  213713             : 
  213714             : /* #line 213715 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  213715             : 
  213716             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  213717             : // Start of memberFunctionString
  213718             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  213719             : 
  213720             : // *** COMMON CODE SECTION BEGINS HERE ***
  213721             : 
  213722             :     public:
  213723             : 
  213724             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  213725             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  213726             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  213727             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  213728             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  213729             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  213730             : 
  213731             :       /*! \brief returns a string representing the class name */
  213732             :           virtual std::string class_name() const override;
  213733             : 
  213734             :       /*! \brief returns new style SageIII enum values */
  213735             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  213736             : 
  213737             :       /*! \brief static variant value */
  213738             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  213739             :        // static const VariantT static_variant = V_SgOmpParallelMasterTaskloopStatement;
  213740             :           enum { static_variant = V_SgOmpParallelMasterTaskloopStatement };
  213741             : 
  213742             :        /* the generated cast function */
  213743             :       /*! \brief Casts pointer from base class to derived class */
  213744             :           ROSE_DLL_API friend       SgOmpParallelMasterTaskloopStatement* isSgOmpParallelMasterTaskloopStatement(       SgNode * s );
  213745             : 
  213746             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  213747             :           ROSE_DLL_API friend const SgOmpParallelMasterTaskloopStatement* isSgOmpParallelMasterTaskloopStatement( const SgNode * s );
  213748             : 
  213749             :      // ******************************************
  213750             :      // * Memory Pool / New / Delete
  213751             :      // ******************************************
  213752             : 
  213753             :      public:
  213754             :           /// \private
  213755             :           static const unsigned pool_size; //
  213756             :           /// \private
  213757             :           static std::vector<unsigned char *> pools; //
  213758             :           /// \private
  213759             :           static SgOmpParallelMasterTaskloopStatement * next_node; // 
  213760             : 
  213761             :           /// \private
  213762             :           static unsigned long initializeStorageClassArray(SgOmpParallelMasterTaskloopStatementStorageClass *); //
  213763             : 
  213764             :           /// \private
  213765             :           static void clearMemoryPool(); //
  213766             :           static void deleteMemoryPool(); //
  213767             : 
  213768             :           /// \private
  213769             :           static void extendMemoryPoolForFileIO(); //
  213770             : 
  213771             :           /// \private
  213772             :           static SgOmpParallelMasterTaskloopStatement * getPointerFromGlobalIndex(unsigned long); //
  213773             :           /// \private
  213774             :           static SgOmpParallelMasterTaskloopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  213775             : 
  213776             :           /// \private
  213777             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  213778             :           /// \private
  213779             :           static void resetValidFreepointers(); //
  213780             :           /// \private
  213781             :           static unsigned long getNumberOfLastValidPointer(); //
  213782             : 
  213783             : 
  213784             : #if defined(INLINE_FUNCTIONS)
  213785             :       /*! \brief returns pointer to newly allocated IR node */
  213786             :           inline void *operator new (size_t size);
  213787             : #else
  213788             :       /*! \brief returns pointer to newly allocated IR node */
  213789             :           void *operator new (size_t size);
  213790             : #endif
  213791             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  213792             :           void operator delete (void* pointer, size_t size);
  213793             : 
  213794             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  213795           0 :           void operator delete (void* pointer)
  213796             :              {
  213797             :             // This is the generated delete operator...
  213798           0 :                SgOmpParallelMasterTaskloopStatement::operator delete (pointer,sizeof(SgOmpParallelMasterTaskloopStatement));
  213799             :              }
  213800             : 
  213801             :       /*! \brief Returns the total number of IR nodes of this type */
  213802             :           static size_t numberOfNodes();
  213803             : 
  213804             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  213805             :           static size_t memoryUsage();
  213806             : 
  213807             :       // End of scope which started in IR nodes specific code 
  213808             :       /* */
  213809             : 
  213810             :       /* name Internal Functions
  213811             :           \brief Internal functions ... incomplete-documentation
  213812             : 
  213813             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213814             :           or by particularly knowledgeable users for specialized tools or applications.
  213815             : 
  213816             :           \internal We could not make these private because they are required by user for special purposes. And 
  213817             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  213818             :          
  213819             :        */
  213820             : 
  213821             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  213822             :        // overridden in every class by *generated* implementation
  213823             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  213824             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  213825             :        // MS: 06/28/02 container of names of variables or container indices 
  213826             :        // used used in the traversal to access AST successor nodes
  213827             :        // overridden in every class by *generated* implementation
  213828             :       /*! \brief container of names of variables or container indices used used in the traversal
  213829             :           to access AST successor nodes overridden in every class by *generated* implementation */
  213830             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  213831             : 
  213832             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  213833             :        // than all the vector copies. The implementation for these functions is generated for each class.
  213834             :       /*! \brief return number of children in the traversal successor list */
  213835             :           virtual size_t get_numberOfTraversalSuccessors() override;
  213836             :       /*! \brief index-based access to traversal successors by index number */
  213837             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  213838             :       /*! \brief index-based access to traversal successors by child node */
  213839             :           virtual size_t get_childIndex(SgNode *child) override;
  213840             : 
  213841             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  213842             :        // MS: 08/16/2002 method for generating RTI information
  213843             :       /*! \brief return C++ Runtime-Time-Information */
  213844             :           virtual RTIReturnType roseRTI() override;
  213845             : #endif
  213846             :       /* */
  213847             : 
  213848             : 
  213849             : 
  213850             :       /* name Deprecated Functions
  213851             :           \brief Deprecated functions ... incomplete-documentation
  213852             : 
  213853             :           These functions have been deprecated from use.
  213854             :        */
  213855             :       /* */
  213856             : 
  213857             :       /*! returns a C style string (char*) representing the class name */
  213858             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  213859             : 
  213860             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  213861             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  213862             : #if 0
  213863             :       /*! returns old style Sage II enum values */
  213864             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  213865             :       /*! returns old style Sage II enum values */
  213866             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  213867             : #endif
  213868             :       /* */
  213869             : 
  213870             : 
  213871             : 
  213872             : 
  213873             :      public:
  213874             :       /* name Traversal Support Functions
  213875             :           \brief Traversal support functions ... incomplete-documentation
  213876             : 
  213877             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213878             :           or by particularly knowledgable users for specialized tools or applications.
  213879             :        */
  213880             :       /* */
  213881             : 
  213882             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  213883             :        // (inferior to ROSE traversal mechanism, experimental).
  213884             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  213885             :        */
  213886             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  213887             : 
  213888             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  213889             :       /*! \brief support for the classic visitor pattern done in GoF */
  213890             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  213891             : 
  213892             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  213893             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  213894             :        */
  213895             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  213896             : 
  213897             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  213898             :        */
  213899             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  213900             : 
  213901             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  213902             :        // This traversal helps support internal tools that call static member functions.
  213903             :        // note: this function operates on the memory pools.
  213904             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  213905             :        */
  213906             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  213907             :       /* */
  213908             : 
  213909             : 
  213910             :      public:
  213911             :       /* name Memory Allocation Functions
  213912             :           \brief Memory allocations functions ... incomplete-documentation
  213913             : 
  213914             :           These functions have been made public as part of the design, but they are suggested for internal use 
  213915             :           or by particularly knowledgable users for specialized tools or applications.
  213916             :        */
  213917             :       /* */
  213918             : 
  213919             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  213920             : 
  213921             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  213922             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  213923             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  213924             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  213925             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  213926             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  213927             :           being used with the AST File I/O mechanism.
  213928             :        */
  213929             :           virtual bool isInMemoryPool() override;
  213930             : 
  213931             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  213932             : 
  213933             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  213934             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  213935             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  213936             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  213937             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  213938             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  213939             :           being used with the AST File I/O mechanism.
  213940             :        */
  213941             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  213942             : 
  213943             :       // DQ (4/30/2006): Modified to be a const function.
  213944             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  213945             : 
  213946             :           This functions is part of general support for many possible tools to operate 
  213947             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  213948             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  213949             :           less than the set of pointers used by the AST file I/O. This is part of
  213950             :           work implemented by Andreas, and support tools such as the AST graph generation.
  213951             : 
  213952             :           \warning This function can return unexpected data members and thus the 
  213953             :                    order and the number of elements is unpredicable and subject 
  213954             :                    to change.
  213955             : 
  213956             :           \returns STL vector of pairs of SgNode* and strings
  213957             :        */
  213958             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  213959             : 
  213960             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  213961             : 
  213962             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  213963             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  213964             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  213965             : 
  213966             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  213967             :                    and subject to change.
  213968             :        */
  213969             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  213970             : 
  213971             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  213972             : 
  213973             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  213974             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  213975             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  213976             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  213977             : 
  213978             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  213979             : 
  213980             :           \returns long
  213981             :        */
  213982             :           virtual long getChildIndex( SgNode* childNode ) const override;
  213983             : 
  213984             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  213985             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  213986             :       /* \brief Constructor for use by AST File I/O Mechanism
  213987             : 
  213988             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  213989             :           which obtained via fast binary file I/O from disk.
  213990             :        */
  213991             :        // SgOmpParallelMasterTaskloopStatement( SgOmpParallelMasterTaskloopStatementStorageClass& source );
  213992             : 
  213993             : 
  213994             : 
  213995             : 
  213996             : 
  213997             :  // JH (10/24/2005): methods added to support the ast file IO
  213998             :     private:
  213999             : 
  214000             :       /* name AST Memory Allocation Support Functions
  214001             :           \brief Memory allocations support....
  214002             : 
  214003             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  214004             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  214005             :           and support the AST File I/O Mechanism.
  214006             :        */
  214007             :       /* */
  214008             : 
  214009             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  214010             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  214011             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  214012             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  214013             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  214014             :           a correspinding one in the AST_FILE_IO class!
  214015             :        */
  214016             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  214017             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214018             :       /* \brief Typedef used for low level memory access.
  214019             :        */
  214020             :        // typedef unsigned char* TestType;
  214021             : 
  214022             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  214023             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214024             :       /* \brief Typedef used to hold memory addresses as values.
  214025             :        */
  214026             :        // typedef unsigned long  AddressType;
  214027             : 
  214028             : 
  214029             : 
  214030             :        // necessary, to have direct access to the p_freepointer and the private methods !
  214031             :       /*! \brief friend class declaration to support AST File I/O */
  214032             :           friend class AST_FILE_IO;
  214033             : 
  214034             :       /*! \brief friend class declaration to support AST File I/O */
  214035             :           friend class SgOmpParallelMasterTaskloopStatementStorageClass;
  214036             : 
  214037             :       /*! \brief friend class declaration to support AST File I/O */
  214038             :           friend class AstSpecificDataManagingClass;
  214039             : 
  214040             :       /*! \brief friend class declaration to support AST File I/O */
  214041             :           friend class AstSpecificDataManagingClassStorageClass;
  214042             :     public:
  214043             :       /*! \brief IR node constructor to support AST File I/O */
  214044             :           SgOmpParallelMasterTaskloopStatement( const SgOmpParallelMasterTaskloopStatementStorageClass& source );
  214045             : 
  214046             :  // private: // JJW hack
  214047             :        /*
  214048             :           name AST Memory Allocation Support Variables
  214049             :           Memory allocations support variables 
  214050             : 
  214051             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  214052             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  214053             :           and support the AST File I/O Mechanism.
  214054             :        */
  214055             :       /* */
  214056             : 
  214057             :     public:
  214058             : 
  214059             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  214060             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  214061             :       // virtual SgNode* addRegExpAttribute();
  214062             :       /*! \brief Support for AST matching using regular expression.
  214063             : 
  214064             :           This support is incomplete and the subject of current research to define 
  214065             :           RegEx trees to support inexact matching.
  214066             :        */
  214067             :           SgOmpParallelMasterTaskloopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  214068             : 
  214069             : // *** COMMON CODE SECTION ENDS HERE ***
  214070             : 
  214071             : 
  214072             : // End of memberFunctionString
  214073             : // Start of memberFunctionString
  214074             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  214075             : 
  214076             :      // the generated cast function
  214077             :      // friend ROSE_DLL_API SgOmpParallelMasterTaskloopStatement* isSgOmpParallelMasterTaskloopStatement ( SgNode* s );
  214078             : 
  214079             :           typedef SgUpirFieldBodyStatement base_node_type;
  214080             : 
  214081             : 
  214082             : // End of memberFunctionString
  214083             : // Start of memberFunctionString
  214084             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  214085             : 
  214086             :           void post_construction_initialization() override;
  214087             : 
  214088             : 
  214089             : // End of memberFunctionString
  214090             : 
  214091             : 
  214092             :      public: 
  214093             :          virtual ~SgOmpParallelMasterTaskloopStatement();
  214094             : 
  214095             : 
  214096             :      public: 
  214097             :          SgOmpParallelMasterTaskloopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  214098             :          SgOmpParallelMasterTaskloopStatement(SgStatement* body); 
  214099             : 
  214100             :     protected:
  214101             : 
  214102             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpParallelMasterTaskloopStatement>;
  214103             : 
  214104             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214105             : 
  214106             : 
  214107             :    };
  214108             : #endif
  214109             : 
  214110             : // postdeclarations for SgOmpParallelMasterTaskloopStatement
  214111             : 
  214112             : /* #line 214113 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214113             : 
  214114             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  214115             : 
  214116             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214117             : 
  214118             : 
  214119             : /* #line 214120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214120             : 
  214121             : 
  214122             : 
  214123             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214124             : 
  214125             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  214126             : //      This code is automatically generated for each 
  214127             : //      terminal and non-terminal within the defined 
  214128             : //      grammar.  There is a simple way to change the 
  214129             : //      code to fix bugs etc.  See the ROSE README file
  214130             : //      for directions.
  214131             : 
  214132             : // tps: (02/22/2010): Adding DLL export requirements
  214133             : #include "rosedll.h"
  214134             : 
  214135             : // predeclarations for SgOmpParallelMasterTaskloopSimdStatement
  214136             : 
  214137             : /* #line 214138 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214138             : 
  214139             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  214140             : 
  214141             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214142             : 
  214143             : #if 1
  214144             : // Class Definition for SgOmpParallelMasterTaskloopSimdStatement
  214145             : class ROSE_DLL_API SgOmpParallelMasterTaskloopSimdStatement  : public SgUpirFieldBodyStatement
  214146             :    {
  214147             :      public:
  214148             : 
  214149             : 
  214150             : /* #line 214151 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214151             : 
  214152             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  214153             : // Start of memberFunctionString
  214154             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  214155             : 
  214156             : // *** COMMON CODE SECTION BEGINS HERE ***
  214157             : 
  214158             :     public:
  214159             : 
  214160             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  214161             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  214162             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  214163             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  214164             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  214165             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  214166             : 
  214167             :       /*! \brief returns a string representing the class name */
  214168             :           virtual std::string class_name() const override;
  214169             : 
  214170             :       /*! \brief returns new style SageIII enum values */
  214171             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  214172             : 
  214173             :       /*! \brief static variant value */
  214174             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  214175             :        // static const VariantT static_variant = V_SgOmpParallelMasterTaskloopSimdStatement;
  214176             :           enum { static_variant = V_SgOmpParallelMasterTaskloopSimdStatement };
  214177             : 
  214178             :        /* the generated cast function */
  214179             :       /*! \brief Casts pointer from base class to derived class */
  214180             :           ROSE_DLL_API friend       SgOmpParallelMasterTaskloopSimdStatement* isSgOmpParallelMasterTaskloopSimdStatement(       SgNode * s );
  214181             : 
  214182             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  214183             :           ROSE_DLL_API friend const SgOmpParallelMasterTaskloopSimdStatement* isSgOmpParallelMasterTaskloopSimdStatement( const SgNode * s );
  214184             : 
  214185             :      // ******************************************
  214186             :      // * Memory Pool / New / Delete
  214187             :      // ******************************************
  214188             : 
  214189             :      public:
  214190             :           /// \private
  214191             :           static const unsigned pool_size; //
  214192             :           /// \private
  214193             :           static std::vector<unsigned char *> pools; //
  214194             :           /// \private
  214195             :           static SgOmpParallelMasterTaskloopSimdStatement * next_node; // 
  214196             : 
  214197             :           /// \private
  214198             :           static unsigned long initializeStorageClassArray(SgOmpParallelMasterTaskloopSimdStatementStorageClass *); //
  214199             : 
  214200             :           /// \private
  214201             :           static void clearMemoryPool(); //
  214202             :           static void deleteMemoryPool(); //
  214203             : 
  214204             :           /// \private
  214205             :           static void extendMemoryPoolForFileIO(); //
  214206             : 
  214207             :           /// \private
  214208             :           static SgOmpParallelMasterTaskloopSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  214209             :           /// \private
  214210             :           static SgOmpParallelMasterTaskloopSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  214211             : 
  214212             :           /// \private
  214213             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  214214             :           /// \private
  214215             :           static void resetValidFreepointers(); //
  214216             :           /// \private
  214217             :           static unsigned long getNumberOfLastValidPointer(); //
  214218             : 
  214219             : 
  214220             : #if defined(INLINE_FUNCTIONS)
  214221             :       /*! \brief returns pointer to newly allocated IR node */
  214222             :           inline void *operator new (size_t size);
  214223             : #else
  214224             :       /*! \brief returns pointer to newly allocated IR node */
  214225             :           void *operator new (size_t size);
  214226             : #endif
  214227             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  214228             :           void operator delete (void* pointer, size_t size);
  214229             : 
  214230             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  214231           0 :           void operator delete (void* pointer)
  214232             :              {
  214233             :             // This is the generated delete operator...
  214234           0 :                SgOmpParallelMasterTaskloopSimdStatement::operator delete (pointer,sizeof(SgOmpParallelMasterTaskloopSimdStatement));
  214235             :              }
  214236             : 
  214237             :       /*! \brief Returns the total number of IR nodes of this type */
  214238             :           static size_t numberOfNodes();
  214239             : 
  214240             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  214241             :           static size_t memoryUsage();
  214242             : 
  214243             :       // End of scope which started in IR nodes specific code 
  214244             :       /* */
  214245             : 
  214246             :       /* name Internal Functions
  214247             :           \brief Internal functions ... incomplete-documentation
  214248             : 
  214249             :           These functions have been made public as part of the design, but they are suggested for internal use 
  214250             :           or by particularly knowledgeable users for specialized tools or applications.
  214251             : 
  214252             :           \internal We could not make these private because they are required by user for special purposes. And 
  214253             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  214254             :          
  214255             :        */
  214256             : 
  214257             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  214258             :        // overridden in every class by *generated* implementation
  214259             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  214260             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  214261             :        // MS: 06/28/02 container of names of variables or container indices 
  214262             :        // used used in the traversal to access AST successor nodes
  214263             :        // overridden in every class by *generated* implementation
  214264             :       /*! \brief container of names of variables or container indices used used in the traversal
  214265             :           to access AST successor nodes overridden in every class by *generated* implementation */
  214266             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  214267             : 
  214268             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  214269             :        // than all the vector copies. The implementation for these functions is generated for each class.
  214270             :       /*! \brief return number of children in the traversal successor list */
  214271             :           virtual size_t get_numberOfTraversalSuccessors() override;
  214272             :       /*! \brief index-based access to traversal successors by index number */
  214273             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  214274             :       /*! \brief index-based access to traversal successors by child node */
  214275             :           virtual size_t get_childIndex(SgNode *child) override;
  214276             : 
  214277             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  214278             :        // MS: 08/16/2002 method for generating RTI information
  214279             :       /*! \brief return C++ Runtime-Time-Information */
  214280             :           virtual RTIReturnType roseRTI() override;
  214281             : #endif
  214282             :       /* */
  214283             : 
  214284             : 
  214285             : 
  214286             :       /* name Deprecated Functions
  214287             :           \brief Deprecated functions ... incomplete-documentation
  214288             : 
  214289             :           These functions have been deprecated from use.
  214290             :        */
  214291             :       /* */
  214292             : 
  214293             :       /*! returns a C style string (char*) representing the class name */
  214294             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  214295             : 
  214296             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  214297             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  214298             : #if 0
  214299             :       /*! returns old style Sage II enum values */
  214300             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  214301             :       /*! returns old style Sage II enum values */
  214302             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  214303             : #endif
  214304             :       /* */
  214305             : 
  214306             : 
  214307             : 
  214308             : 
  214309             :      public:
  214310             :       /* name Traversal Support Functions
  214311             :           \brief Traversal support functions ... incomplete-documentation
  214312             : 
  214313             :           These functions have been made public as part of the design, but they are suggested for internal use 
  214314             :           or by particularly knowledgable users for specialized tools or applications.
  214315             :        */
  214316             :       /* */
  214317             : 
  214318             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  214319             :        // (inferior to ROSE traversal mechanism, experimental).
  214320             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  214321             :        */
  214322             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  214323             : 
  214324             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  214325             :       /*! \brief support for the classic visitor pattern done in GoF */
  214326             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  214327             : 
  214328             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  214329             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  214330             :        */
  214331             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  214332             : 
  214333             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  214334             :        */
  214335             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  214336             : 
  214337             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  214338             :        // This traversal helps support internal tools that call static member functions.
  214339             :        // note: this function operates on the memory pools.
  214340             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  214341             :        */
  214342             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  214343             :       /* */
  214344             : 
  214345             : 
  214346             :      public:
  214347             :       /* name Memory Allocation Functions
  214348             :           \brief Memory allocations functions ... incomplete-documentation
  214349             : 
  214350             :           These functions have been made public as part of the design, but they are suggested for internal use 
  214351             :           or by particularly knowledgable users for specialized tools or applications.
  214352             :        */
  214353             :       /* */
  214354             : 
  214355             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  214356             : 
  214357             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  214358             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  214359             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  214360             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  214361             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  214362             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  214363             :           being used with the AST File I/O mechanism.
  214364             :        */
  214365             :           virtual bool isInMemoryPool() override;
  214366             : 
  214367             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  214368             : 
  214369             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  214370             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  214371             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  214372             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  214373             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  214374             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  214375             :           being used with the AST File I/O mechanism.
  214376             :        */
  214377             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  214378             : 
  214379             :       // DQ (4/30/2006): Modified to be a const function.
  214380             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  214381             : 
  214382             :           This functions is part of general support for many possible tools to operate 
  214383             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  214384             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  214385             :           less than the set of pointers used by the AST file I/O. This is part of
  214386             :           work implemented by Andreas, and support tools such as the AST graph generation.
  214387             : 
  214388             :           \warning This function can return unexpected data members and thus the 
  214389             :                    order and the number of elements is unpredicable and subject 
  214390             :                    to change.
  214391             : 
  214392             :           \returns STL vector of pairs of SgNode* and strings
  214393             :        */
  214394             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  214395             : 
  214396             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  214397             : 
  214398             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  214399             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  214400             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  214401             : 
  214402             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  214403             :                    and subject to change.
  214404             :        */
  214405             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  214406             : 
  214407             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  214408             : 
  214409             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  214410             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  214411             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  214412             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  214413             : 
  214414             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  214415             : 
  214416             :           \returns long
  214417             :        */
  214418             :           virtual long getChildIndex( SgNode* childNode ) const override;
  214419             : 
  214420             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  214421             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214422             :       /* \brief Constructor for use by AST File I/O Mechanism
  214423             : 
  214424             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  214425             :           which obtained via fast binary file I/O from disk.
  214426             :        */
  214427             :        // SgOmpParallelMasterTaskloopSimdStatement( SgOmpParallelMasterTaskloopSimdStatementStorageClass& source );
  214428             : 
  214429             : 
  214430             : 
  214431             : 
  214432             : 
  214433             :  // JH (10/24/2005): methods added to support the ast file IO
  214434             :     private:
  214435             : 
  214436             :       /* name AST Memory Allocation Support Functions
  214437             :           \brief Memory allocations support....
  214438             : 
  214439             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  214440             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  214441             :           and support the AST File I/O Mechanism.
  214442             :        */
  214443             :       /* */
  214444             : 
  214445             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  214446             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  214447             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  214448             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  214449             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  214450             :           a correspinding one in the AST_FILE_IO class!
  214451             :        */
  214452             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  214453             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214454             :       /* \brief Typedef used for low level memory access.
  214455             :        */
  214456             :        // typedef unsigned char* TestType;
  214457             : 
  214458             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  214459             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214460             :       /* \brief Typedef used to hold memory addresses as values.
  214461             :        */
  214462             :        // typedef unsigned long  AddressType;
  214463             : 
  214464             : 
  214465             : 
  214466             :        // necessary, to have direct access to the p_freepointer and the private methods !
  214467             :       /*! \brief friend class declaration to support AST File I/O */
  214468             :           friend class AST_FILE_IO;
  214469             : 
  214470             :       /*! \brief friend class declaration to support AST File I/O */
  214471             :           friend class SgOmpParallelMasterTaskloopSimdStatementStorageClass;
  214472             : 
  214473             :       /*! \brief friend class declaration to support AST File I/O */
  214474             :           friend class AstSpecificDataManagingClass;
  214475             : 
  214476             :       /*! \brief friend class declaration to support AST File I/O */
  214477             :           friend class AstSpecificDataManagingClassStorageClass;
  214478             :     public:
  214479             :       /*! \brief IR node constructor to support AST File I/O */
  214480             :           SgOmpParallelMasterTaskloopSimdStatement( const SgOmpParallelMasterTaskloopSimdStatementStorageClass& source );
  214481             : 
  214482             :  // private: // JJW hack
  214483             :        /*
  214484             :           name AST Memory Allocation Support Variables
  214485             :           Memory allocations support variables 
  214486             : 
  214487             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  214488             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  214489             :           and support the AST File I/O Mechanism.
  214490             :        */
  214491             :       /* */
  214492             : 
  214493             :     public:
  214494             : 
  214495             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  214496             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  214497             :       // virtual SgNode* addRegExpAttribute();
  214498             :       /*! \brief Support for AST matching using regular expression.
  214499             : 
  214500             :           This support is incomplete and the subject of current research to define 
  214501             :           RegEx trees to support inexact matching.
  214502             :        */
  214503             :           SgOmpParallelMasterTaskloopSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  214504             : 
  214505             : // *** COMMON CODE SECTION ENDS HERE ***
  214506             : 
  214507             : 
  214508             : // End of memberFunctionString
  214509             : // Start of memberFunctionString
  214510             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  214511             : 
  214512             :      // the generated cast function
  214513             :      // friend ROSE_DLL_API SgOmpParallelMasterTaskloopSimdStatement* isSgOmpParallelMasterTaskloopSimdStatement ( SgNode* s );
  214514             : 
  214515             :           typedef SgUpirFieldBodyStatement base_node_type;
  214516             : 
  214517             : 
  214518             : // End of memberFunctionString
  214519             : // Start of memberFunctionString
  214520             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  214521             : 
  214522             :           void post_construction_initialization() override;
  214523             : 
  214524             : 
  214525             : // End of memberFunctionString
  214526             : 
  214527             : 
  214528             :      public: 
  214529             :          virtual ~SgOmpParallelMasterTaskloopSimdStatement();
  214530             : 
  214531             : 
  214532             :      public: 
  214533             :          SgOmpParallelMasterTaskloopSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  214534             :          SgOmpParallelMasterTaskloopSimdStatement(SgStatement* body); 
  214535             : 
  214536             :     protected:
  214537             : 
  214538             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpParallelMasterTaskloopSimdStatement>;
  214539             : 
  214540             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214541             : 
  214542             : 
  214543             :    };
  214544             : #endif
  214545             : 
  214546             : // postdeclarations for SgOmpParallelMasterTaskloopSimdStatement
  214547             : 
  214548             : /* #line 214549 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214549             : 
  214550             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  214551             : 
  214552             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214553             : 
  214554             : 
  214555             : /* #line 214556 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214556             : 
  214557             : 
  214558             : 
  214559             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214560             : 
  214561             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  214562             : //      This code is automatically generated for each 
  214563             : //      terminal and non-terminal within the defined 
  214564             : //      grammar.  There is a simple way to change the 
  214565             : //      code to fix bugs etc.  See the ROSE README file
  214566             : //      for directions.
  214567             : 
  214568             : // tps: (02/22/2010): Adding DLL export requirements
  214569             : #include "rosedll.h"
  214570             : 
  214571             : // predeclarations for SgOmpTeamsDistributeStatement
  214572             : 
  214573             : /* #line 214574 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214574             : 
  214575             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  214576             : 
  214577             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214578             : 
  214579             : #if 1
  214580             : // Class Definition for SgOmpTeamsDistributeStatement
  214581             : class ROSE_DLL_API SgOmpTeamsDistributeStatement  : public SgUpirFieldBodyStatement
  214582             :    {
  214583             :      public:
  214584             : 
  214585             : 
  214586             : /* #line 214587 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214587             : 
  214588             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  214589             : // Start of memberFunctionString
  214590             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  214591             : 
  214592             : // *** COMMON CODE SECTION BEGINS HERE ***
  214593             : 
  214594             :     public:
  214595             : 
  214596             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  214597             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  214598             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  214599             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  214600             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  214601             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  214602             : 
  214603             :       /*! \brief returns a string representing the class name */
  214604             :           virtual std::string class_name() const override;
  214605             : 
  214606             :       /*! \brief returns new style SageIII enum values */
  214607             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  214608             : 
  214609             :       /*! \brief static variant value */
  214610             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  214611             :        // static const VariantT static_variant = V_SgOmpTeamsDistributeStatement;
  214612             :           enum { static_variant = V_SgOmpTeamsDistributeStatement };
  214613             : 
  214614             :        /* the generated cast function */
  214615             :       /*! \brief Casts pointer from base class to derived class */
  214616             :           ROSE_DLL_API friend       SgOmpTeamsDistributeStatement* isSgOmpTeamsDistributeStatement(       SgNode * s );
  214617             : 
  214618             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  214619             :           ROSE_DLL_API friend const SgOmpTeamsDistributeStatement* isSgOmpTeamsDistributeStatement( const SgNode * s );
  214620             : 
  214621             :      // ******************************************
  214622             :      // * Memory Pool / New / Delete
  214623             :      // ******************************************
  214624             : 
  214625             :      public:
  214626             :           /// \private
  214627             :           static const unsigned pool_size; //
  214628             :           /// \private
  214629             :           static std::vector<unsigned char *> pools; //
  214630             :           /// \private
  214631             :           static SgOmpTeamsDistributeStatement * next_node; // 
  214632             : 
  214633             :           /// \private
  214634             :           static unsigned long initializeStorageClassArray(SgOmpTeamsDistributeStatementStorageClass *); //
  214635             : 
  214636             :           /// \private
  214637             :           static void clearMemoryPool(); //
  214638             :           static void deleteMemoryPool(); //
  214639             : 
  214640             :           /// \private
  214641             :           static void extendMemoryPoolForFileIO(); //
  214642             : 
  214643             :           /// \private
  214644             :           static SgOmpTeamsDistributeStatement * getPointerFromGlobalIndex(unsigned long); //
  214645             :           /// \private
  214646             :           static SgOmpTeamsDistributeStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  214647             : 
  214648             :           /// \private
  214649             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  214650             :           /// \private
  214651             :           static void resetValidFreepointers(); //
  214652             :           /// \private
  214653             :           static unsigned long getNumberOfLastValidPointer(); //
  214654             : 
  214655             : 
  214656             : #if defined(INLINE_FUNCTIONS)
  214657             :       /*! \brief returns pointer to newly allocated IR node */
  214658             :           inline void *operator new (size_t size);
  214659             : #else
  214660             :       /*! \brief returns pointer to newly allocated IR node */
  214661             :           void *operator new (size_t size);
  214662             : #endif
  214663             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  214664             :           void operator delete (void* pointer, size_t size);
  214665             : 
  214666             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  214667           0 :           void operator delete (void* pointer)
  214668             :              {
  214669             :             // This is the generated delete operator...
  214670           0 :                SgOmpTeamsDistributeStatement::operator delete (pointer,sizeof(SgOmpTeamsDistributeStatement));
  214671             :              }
  214672             : 
  214673             :       /*! \brief Returns the total number of IR nodes of this type */
  214674             :           static size_t numberOfNodes();
  214675             : 
  214676             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  214677             :           static size_t memoryUsage();
  214678             : 
  214679             :       // End of scope which started in IR nodes specific code 
  214680             :       /* */
  214681             : 
  214682             :       /* name Internal Functions
  214683             :           \brief Internal functions ... incomplete-documentation
  214684             : 
  214685             :           These functions have been made public as part of the design, but they are suggested for internal use 
  214686             :           or by particularly knowledgeable users for specialized tools or applications.
  214687             : 
  214688             :           \internal We could not make these private because they are required by user for special purposes. And 
  214689             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  214690             :          
  214691             :        */
  214692             : 
  214693             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  214694             :        // overridden in every class by *generated* implementation
  214695             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  214696             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  214697             :        // MS: 06/28/02 container of names of variables or container indices 
  214698             :        // used used in the traversal to access AST successor nodes
  214699             :        // overridden in every class by *generated* implementation
  214700             :       /*! \brief container of names of variables or container indices used used in the traversal
  214701             :           to access AST successor nodes overridden in every class by *generated* implementation */
  214702             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  214703             : 
  214704             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  214705             :        // than all the vector copies. The implementation for these functions is generated for each class.
  214706             :       /*! \brief return number of children in the traversal successor list */
  214707             :           virtual size_t get_numberOfTraversalSuccessors() override;
  214708             :       /*! \brief index-based access to traversal successors by index number */
  214709             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  214710             :       /*! \brief index-based access to traversal successors by child node */
  214711             :           virtual size_t get_childIndex(SgNode *child) override;
  214712             : 
  214713             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  214714             :        // MS: 08/16/2002 method for generating RTI information
  214715             :       /*! \brief return C++ Runtime-Time-Information */
  214716             :           virtual RTIReturnType roseRTI() override;
  214717             : #endif
  214718             :       /* */
  214719             : 
  214720             : 
  214721             : 
  214722             :       /* name Deprecated Functions
  214723             :           \brief Deprecated functions ... incomplete-documentation
  214724             : 
  214725             :           These functions have been deprecated from use.
  214726             :        */
  214727             :       /* */
  214728             : 
  214729             :       /*! returns a C style string (char*) representing the class name */
  214730             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  214731             : 
  214732             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  214733             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  214734             : #if 0
  214735             :       /*! returns old style Sage II enum values */
  214736             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  214737             :       /*! returns old style Sage II enum values */
  214738             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  214739             : #endif
  214740             :       /* */
  214741             : 
  214742             : 
  214743             : 
  214744             : 
  214745             :      public:
  214746             :       /* name Traversal Support Functions
  214747             :           \brief Traversal support functions ... incomplete-documentation
  214748             : 
  214749             :           These functions have been made public as part of the design, but they are suggested for internal use 
  214750             :           or by particularly knowledgable users for specialized tools or applications.
  214751             :        */
  214752             :       /* */
  214753             : 
  214754             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  214755             :        // (inferior to ROSE traversal mechanism, experimental).
  214756             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  214757             :        */
  214758             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  214759             : 
  214760             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  214761             :       /*! \brief support for the classic visitor pattern done in GoF */
  214762             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  214763             : 
  214764             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  214765             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  214766             :        */
  214767             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  214768             : 
  214769             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  214770             :        */
  214771             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  214772             : 
  214773             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  214774             :        // This traversal helps support internal tools that call static member functions.
  214775             :        // note: this function operates on the memory pools.
  214776             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  214777             :        */
  214778             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  214779             :       /* */
  214780             : 
  214781             : 
  214782             :      public:
  214783             :       /* name Memory Allocation Functions
  214784             :           \brief Memory allocations functions ... incomplete-documentation
  214785             : 
  214786             :           These functions have been made public as part of the design, but they are suggested for internal use 
  214787             :           or by particularly knowledgable users for specialized tools or applications.
  214788             :        */
  214789             :       /* */
  214790             : 
  214791             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  214792             : 
  214793             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  214794             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  214795             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  214796             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  214797             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  214798             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  214799             :           being used with the AST File I/O mechanism.
  214800             :        */
  214801             :           virtual bool isInMemoryPool() override;
  214802             : 
  214803             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  214804             : 
  214805             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  214806             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  214807             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  214808             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  214809             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  214810             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  214811             :           being used with the AST File I/O mechanism.
  214812             :        */
  214813             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  214814             : 
  214815             :       // DQ (4/30/2006): Modified to be a const function.
  214816             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  214817             : 
  214818             :           This functions is part of general support for many possible tools to operate 
  214819             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  214820             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  214821             :           less than the set of pointers used by the AST file I/O. This is part of
  214822             :           work implemented by Andreas, and support tools such as the AST graph generation.
  214823             : 
  214824             :           \warning This function can return unexpected data members and thus the 
  214825             :                    order and the number of elements is unpredicable and subject 
  214826             :                    to change.
  214827             : 
  214828             :           \returns STL vector of pairs of SgNode* and strings
  214829             :        */
  214830             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  214831             : 
  214832             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  214833             : 
  214834             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  214835             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  214836             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  214837             : 
  214838             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  214839             :                    and subject to change.
  214840             :        */
  214841             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  214842             : 
  214843             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  214844             : 
  214845             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  214846             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  214847             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  214848             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  214849             : 
  214850             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  214851             : 
  214852             :           \returns long
  214853             :        */
  214854             :           virtual long getChildIndex( SgNode* childNode ) const override;
  214855             : 
  214856             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  214857             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214858             :       /* \brief Constructor for use by AST File I/O Mechanism
  214859             : 
  214860             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  214861             :           which obtained via fast binary file I/O from disk.
  214862             :        */
  214863             :        // SgOmpTeamsDistributeStatement( SgOmpTeamsDistributeStatementStorageClass& source );
  214864             : 
  214865             : 
  214866             : 
  214867             : 
  214868             : 
  214869             :  // JH (10/24/2005): methods added to support the ast file IO
  214870             :     private:
  214871             : 
  214872             :       /* name AST Memory Allocation Support Functions
  214873             :           \brief Memory allocations support....
  214874             : 
  214875             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  214876             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  214877             :           and support the AST File I/O Mechanism.
  214878             :        */
  214879             :       /* */
  214880             : 
  214881             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  214882             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  214883             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  214884             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  214885             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  214886             :           a correspinding one in the AST_FILE_IO class!
  214887             :        */
  214888             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  214889             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214890             :       /* \brief Typedef used for low level memory access.
  214891             :        */
  214892             :        // typedef unsigned char* TestType;
  214893             : 
  214894             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  214895             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  214896             :       /* \brief Typedef used to hold memory addresses as values.
  214897             :        */
  214898             :        // typedef unsigned long  AddressType;
  214899             : 
  214900             : 
  214901             : 
  214902             :        // necessary, to have direct access to the p_freepointer and the private methods !
  214903             :       /*! \brief friend class declaration to support AST File I/O */
  214904             :           friend class AST_FILE_IO;
  214905             : 
  214906             :       /*! \brief friend class declaration to support AST File I/O */
  214907             :           friend class SgOmpTeamsDistributeStatementStorageClass;
  214908             : 
  214909             :       /*! \brief friend class declaration to support AST File I/O */
  214910             :           friend class AstSpecificDataManagingClass;
  214911             : 
  214912             :       /*! \brief friend class declaration to support AST File I/O */
  214913             :           friend class AstSpecificDataManagingClassStorageClass;
  214914             :     public:
  214915             :       /*! \brief IR node constructor to support AST File I/O */
  214916             :           SgOmpTeamsDistributeStatement( const SgOmpTeamsDistributeStatementStorageClass& source );
  214917             : 
  214918             :  // private: // JJW hack
  214919             :        /*
  214920             :           name AST Memory Allocation Support Variables
  214921             :           Memory allocations support variables 
  214922             : 
  214923             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  214924             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  214925             :           and support the AST File I/O Mechanism.
  214926             :        */
  214927             :       /* */
  214928             : 
  214929             :     public:
  214930             : 
  214931             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  214932             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  214933             :       // virtual SgNode* addRegExpAttribute();
  214934             :       /*! \brief Support for AST matching using regular expression.
  214935             : 
  214936             :           This support is incomplete and the subject of current research to define 
  214937             :           RegEx trees to support inexact matching.
  214938             :        */
  214939             :           SgOmpTeamsDistributeStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  214940             : 
  214941             : // *** COMMON CODE SECTION ENDS HERE ***
  214942             : 
  214943             : 
  214944             : // End of memberFunctionString
  214945             : // Start of memberFunctionString
  214946             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  214947             : 
  214948             :      // the generated cast function
  214949             :      // friend ROSE_DLL_API SgOmpTeamsDistributeStatement* isSgOmpTeamsDistributeStatement ( SgNode* s );
  214950             : 
  214951             :           typedef SgUpirFieldBodyStatement base_node_type;
  214952             : 
  214953             : 
  214954             : // End of memberFunctionString
  214955             : // Start of memberFunctionString
  214956             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  214957             : 
  214958             :           void post_construction_initialization() override;
  214959             : 
  214960             : 
  214961             : // End of memberFunctionString
  214962             : 
  214963             : 
  214964             :      public: 
  214965             :          virtual ~SgOmpTeamsDistributeStatement();
  214966             : 
  214967             : 
  214968             :      public: 
  214969             :          SgOmpTeamsDistributeStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  214970             :          SgOmpTeamsDistributeStatement(SgStatement* body); 
  214971             : 
  214972             :     protected:
  214973             : 
  214974             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTeamsDistributeStatement>;
  214975             : 
  214976             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214977             : 
  214978             : 
  214979             :    };
  214980             : #endif
  214981             : 
  214982             : // postdeclarations for SgOmpTeamsDistributeStatement
  214983             : 
  214984             : /* #line 214985 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214985             : 
  214986             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  214987             : 
  214988             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214989             : 
  214990             : 
  214991             : /* #line 214992 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  214992             : 
  214993             : 
  214994             : 
  214995             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  214996             : 
  214997             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  214998             : //      This code is automatically generated for each 
  214999             : //      terminal and non-terminal within the defined 
  215000             : //      grammar.  There is a simple way to change the 
  215001             : //      code to fix bugs etc.  See the ROSE README file
  215002             : //      for directions.
  215003             : 
  215004             : // tps: (02/22/2010): Adding DLL export requirements
  215005             : #include "rosedll.h"
  215006             : 
  215007             : // predeclarations for SgOmpTeamsDistributeSimdStatement
  215008             : 
  215009             : /* #line 215010 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215010             : 
  215011             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  215012             : 
  215013             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215014             : 
  215015             : #if 1
  215016             : // Class Definition for SgOmpTeamsDistributeSimdStatement
  215017             : class ROSE_DLL_API SgOmpTeamsDistributeSimdStatement  : public SgUpirFieldBodyStatement
  215018             :    {
  215019             :      public:
  215020             : 
  215021             : 
  215022             : /* #line 215023 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215023             : 
  215024             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  215025             : // Start of memberFunctionString
  215026             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  215027             : 
  215028             : // *** COMMON CODE SECTION BEGINS HERE ***
  215029             : 
  215030             :     public:
  215031             : 
  215032             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  215033             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  215034             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  215035             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  215036             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  215037             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  215038             : 
  215039             :       /*! \brief returns a string representing the class name */
  215040             :           virtual std::string class_name() const override;
  215041             : 
  215042             :       /*! \brief returns new style SageIII enum values */
  215043             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  215044             : 
  215045             :       /*! \brief static variant value */
  215046             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  215047             :        // static const VariantT static_variant = V_SgOmpTeamsDistributeSimdStatement;
  215048             :           enum { static_variant = V_SgOmpTeamsDistributeSimdStatement };
  215049             : 
  215050             :        /* the generated cast function */
  215051             :       /*! \brief Casts pointer from base class to derived class */
  215052             :           ROSE_DLL_API friend       SgOmpTeamsDistributeSimdStatement* isSgOmpTeamsDistributeSimdStatement(       SgNode * s );
  215053             : 
  215054             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  215055             :           ROSE_DLL_API friend const SgOmpTeamsDistributeSimdStatement* isSgOmpTeamsDistributeSimdStatement( const SgNode * s );
  215056             : 
  215057             :      // ******************************************
  215058             :      // * Memory Pool / New / Delete
  215059             :      // ******************************************
  215060             : 
  215061             :      public:
  215062             :           /// \private
  215063             :           static const unsigned pool_size; //
  215064             :           /// \private
  215065             :           static std::vector<unsigned char *> pools; //
  215066             :           /// \private
  215067             :           static SgOmpTeamsDistributeSimdStatement * next_node; // 
  215068             : 
  215069             :           /// \private
  215070             :           static unsigned long initializeStorageClassArray(SgOmpTeamsDistributeSimdStatementStorageClass *); //
  215071             : 
  215072             :           /// \private
  215073             :           static void clearMemoryPool(); //
  215074             :           static void deleteMemoryPool(); //
  215075             : 
  215076             :           /// \private
  215077             :           static void extendMemoryPoolForFileIO(); //
  215078             : 
  215079             :           /// \private
  215080             :           static SgOmpTeamsDistributeSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  215081             :           /// \private
  215082             :           static SgOmpTeamsDistributeSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  215083             : 
  215084             :           /// \private
  215085             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  215086             :           /// \private
  215087             :           static void resetValidFreepointers(); //
  215088             :           /// \private
  215089             :           static unsigned long getNumberOfLastValidPointer(); //
  215090             : 
  215091             : 
  215092             : #if defined(INLINE_FUNCTIONS)
  215093             :       /*! \brief returns pointer to newly allocated IR node */
  215094             :           inline void *operator new (size_t size);
  215095             : #else
  215096             :       /*! \brief returns pointer to newly allocated IR node */
  215097             :           void *operator new (size_t size);
  215098             : #endif
  215099             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  215100             :           void operator delete (void* pointer, size_t size);
  215101             : 
  215102             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  215103           0 :           void operator delete (void* pointer)
  215104             :              {
  215105             :             // This is the generated delete operator...
  215106           0 :                SgOmpTeamsDistributeSimdStatement::operator delete (pointer,sizeof(SgOmpTeamsDistributeSimdStatement));
  215107             :              }
  215108             : 
  215109             :       /*! \brief Returns the total number of IR nodes of this type */
  215110             :           static size_t numberOfNodes();
  215111             : 
  215112             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  215113             :           static size_t memoryUsage();
  215114             : 
  215115             :       // End of scope which started in IR nodes specific code 
  215116             :       /* */
  215117             : 
  215118             :       /* name Internal Functions
  215119             :           \brief Internal functions ... incomplete-documentation
  215120             : 
  215121             :           These functions have been made public as part of the design, but they are suggested for internal use 
  215122             :           or by particularly knowledgeable users for specialized tools or applications.
  215123             : 
  215124             :           \internal We could not make these private because they are required by user for special purposes. And 
  215125             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  215126             :          
  215127             :        */
  215128             : 
  215129             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  215130             :        // overridden in every class by *generated* implementation
  215131             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  215132             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  215133             :        // MS: 06/28/02 container of names of variables or container indices 
  215134             :        // used used in the traversal to access AST successor nodes
  215135             :        // overridden in every class by *generated* implementation
  215136             :       /*! \brief container of names of variables or container indices used used in the traversal
  215137             :           to access AST successor nodes overridden in every class by *generated* implementation */
  215138             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  215139             : 
  215140             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  215141             :        // than all the vector copies. The implementation for these functions is generated for each class.
  215142             :       /*! \brief return number of children in the traversal successor list */
  215143             :           virtual size_t get_numberOfTraversalSuccessors() override;
  215144             :       /*! \brief index-based access to traversal successors by index number */
  215145             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  215146             :       /*! \brief index-based access to traversal successors by child node */
  215147             :           virtual size_t get_childIndex(SgNode *child) override;
  215148             : 
  215149             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  215150             :        // MS: 08/16/2002 method for generating RTI information
  215151             :       /*! \brief return C++ Runtime-Time-Information */
  215152             :           virtual RTIReturnType roseRTI() override;
  215153             : #endif
  215154             :       /* */
  215155             : 
  215156             : 
  215157             : 
  215158             :       /* name Deprecated Functions
  215159             :           \brief Deprecated functions ... incomplete-documentation
  215160             : 
  215161             :           These functions have been deprecated from use.
  215162             :        */
  215163             :       /* */
  215164             : 
  215165             :       /*! returns a C style string (char*) representing the class name */
  215166             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  215167             : 
  215168             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  215169             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  215170             : #if 0
  215171             :       /*! returns old style Sage II enum values */
  215172             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  215173             :       /*! returns old style Sage II enum values */
  215174             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  215175             : #endif
  215176             :       /* */
  215177             : 
  215178             : 
  215179             : 
  215180             : 
  215181             :      public:
  215182             :       /* name Traversal Support Functions
  215183             :           \brief Traversal support functions ... incomplete-documentation
  215184             : 
  215185             :           These functions have been made public as part of the design, but they are suggested for internal use 
  215186             :           or by particularly knowledgable users for specialized tools or applications.
  215187             :        */
  215188             :       /* */
  215189             : 
  215190             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  215191             :        // (inferior to ROSE traversal mechanism, experimental).
  215192             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  215193             :        */
  215194             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  215195             : 
  215196             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  215197             :       /*! \brief support for the classic visitor pattern done in GoF */
  215198             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  215199             : 
  215200             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  215201             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  215202             :        */
  215203             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  215204             : 
  215205             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  215206             :        */
  215207             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  215208             : 
  215209             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  215210             :        // This traversal helps support internal tools that call static member functions.
  215211             :        // note: this function operates on the memory pools.
  215212             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  215213             :        */
  215214             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  215215             :       /* */
  215216             : 
  215217             : 
  215218             :      public:
  215219             :       /* name Memory Allocation Functions
  215220             :           \brief Memory allocations functions ... incomplete-documentation
  215221             : 
  215222             :           These functions have been made public as part of the design, but they are suggested for internal use 
  215223             :           or by particularly knowledgable users for specialized tools or applications.
  215224             :        */
  215225             :       /* */
  215226             : 
  215227             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  215228             : 
  215229             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  215230             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  215231             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  215232             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  215233             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  215234             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  215235             :           being used with the AST File I/O mechanism.
  215236             :        */
  215237             :           virtual bool isInMemoryPool() override;
  215238             : 
  215239             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  215240             : 
  215241             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  215242             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  215243             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  215244             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  215245             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  215246             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  215247             :           being used with the AST File I/O mechanism.
  215248             :        */
  215249             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  215250             : 
  215251             :       // DQ (4/30/2006): Modified to be a const function.
  215252             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  215253             : 
  215254             :           This functions is part of general support for many possible tools to operate 
  215255             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  215256             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  215257             :           less than the set of pointers used by the AST file I/O. This is part of
  215258             :           work implemented by Andreas, and support tools such as the AST graph generation.
  215259             : 
  215260             :           \warning This function can return unexpected data members and thus the 
  215261             :                    order and the number of elements is unpredicable and subject 
  215262             :                    to change.
  215263             : 
  215264             :           \returns STL vector of pairs of SgNode* and strings
  215265             :        */
  215266             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  215267             : 
  215268             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  215269             : 
  215270             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  215271             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  215272             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  215273             : 
  215274             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  215275             :                    and subject to change.
  215276             :        */
  215277             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  215278             : 
  215279             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  215280             : 
  215281             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  215282             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  215283             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  215284             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  215285             : 
  215286             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  215287             : 
  215288             :           \returns long
  215289             :        */
  215290             :           virtual long getChildIndex( SgNode* childNode ) const override;
  215291             : 
  215292             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  215293             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  215294             :       /* \brief Constructor for use by AST File I/O Mechanism
  215295             : 
  215296             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  215297             :           which obtained via fast binary file I/O from disk.
  215298             :        */
  215299             :        // SgOmpTeamsDistributeSimdStatement( SgOmpTeamsDistributeSimdStatementStorageClass& source );
  215300             : 
  215301             : 
  215302             : 
  215303             : 
  215304             : 
  215305             :  // JH (10/24/2005): methods added to support the ast file IO
  215306             :     private:
  215307             : 
  215308             :       /* name AST Memory Allocation Support Functions
  215309             :           \brief Memory allocations support....
  215310             : 
  215311             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  215312             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  215313             :           and support the AST File I/O Mechanism.
  215314             :        */
  215315             :       /* */
  215316             : 
  215317             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  215318             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  215319             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  215320             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  215321             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  215322             :           a correspinding one in the AST_FILE_IO class!
  215323             :        */
  215324             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  215325             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  215326             :       /* \brief Typedef used for low level memory access.
  215327             :        */
  215328             :        // typedef unsigned char* TestType;
  215329             : 
  215330             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  215331             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  215332             :       /* \brief Typedef used to hold memory addresses as values.
  215333             :        */
  215334             :        // typedef unsigned long  AddressType;
  215335             : 
  215336             : 
  215337             : 
  215338             :        // necessary, to have direct access to the p_freepointer and the private methods !
  215339             :       /*! \brief friend class declaration to support AST File I/O */
  215340             :           friend class AST_FILE_IO;
  215341             : 
  215342             :       /*! \brief friend class declaration to support AST File I/O */
  215343             :           friend class SgOmpTeamsDistributeSimdStatementStorageClass;
  215344             : 
  215345             :       /*! \brief friend class declaration to support AST File I/O */
  215346             :           friend class AstSpecificDataManagingClass;
  215347             : 
  215348             :       /*! \brief friend class declaration to support AST File I/O */
  215349             :           friend class AstSpecificDataManagingClassStorageClass;
  215350             :     public:
  215351             :       /*! \brief IR node constructor to support AST File I/O */
  215352             :           SgOmpTeamsDistributeSimdStatement( const SgOmpTeamsDistributeSimdStatementStorageClass& source );
  215353             : 
  215354             :  // private: // JJW hack
  215355             :        /*
  215356             :           name AST Memory Allocation Support Variables
  215357             :           Memory allocations support variables 
  215358             : 
  215359             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  215360             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  215361             :           and support the AST File I/O Mechanism.
  215362             :        */
  215363             :       /* */
  215364             : 
  215365             :     public:
  215366             : 
  215367             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  215368             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  215369             :       // virtual SgNode* addRegExpAttribute();
  215370             :       /*! \brief Support for AST matching using regular expression.
  215371             : 
  215372             :           This support is incomplete and the subject of current research to define 
  215373             :           RegEx trees to support inexact matching.
  215374             :        */
  215375             :           SgOmpTeamsDistributeSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  215376             : 
  215377             : // *** COMMON CODE SECTION ENDS HERE ***
  215378             : 
  215379             : 
  215380             : // End of memberFunctionString
  215381             : // Start of memberFunctionString
  215382             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  215383             : 
  215384             :      // the generated cast function
  215385             :      // friend ROSE_DLL_API SgOmpTeamsDistributeSimdStatement* isSgOmpTeamsDistributeSimdStatement ( SgNode* s );
  215386             : 
  215387             :           typedef SgUpirFieldBodyStatement base_node_type;
  215388             : 
  215389             : 
  215390             : // End of memberFunctionString
  215391             : // Start of memberFunctionString
  215392             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  215393             : 
  215394             :           void post_construction_initialization() override;
  215395             : 
  215396             : 
  215397             : // End of memberFunctionString
  215398             : 
  215399             : 
  215400             :      public: 
  215401             :          virtual ~SgOmpTeamsDistributeSimdStatement();
  215402             : 
  215403             : 
  215404             :      public: 
  215405             :          SgOmpTeamsDistributeSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  215406             :          SgOmpTeamsDistributeSimdStatement(SgStatement* body); 
  215407             : 
  215408             :     protected:
  215409             : 
  215410             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTeamsDistributeSimdStatement>;
  215411             : 
  215412             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215413             : 
  215414             : 
  215415             :    };
  215416             : #endif
  215417             : 
  215418             : // postdeclarations for SgOmpTeamsDistributeSimdStatement
  215419             : 
  215420             : /* #line 215421 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215421             : 
  215422             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  215423             : 
  215424             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215425             : 
  215426             : 
  215427             : /* #line 215428 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215428             : 
  215429             : 
  215430             : 
  215431             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215432             : 
  215433             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  215434             : //      This code is automatically generated for each 
  215435             : //      terminal and non-terminal within the defined 
  215436             : //      grammar.  There is a simple way to change the 
  215437             : //      code to fix bugs etc.  See the ROSE README file
  215438             : //      for directions.
  215439             : 
  215440             : // tps: (02/22/2010): Adding DLL export requirements
  215441             : #include "rosedll.h"
  215442             : 
  215443             : // predeclarations for SgOmpTeamsDistributeParallelForStatement
  215444             : 
  215445             : /* #line 215446 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215446             : 
  215447             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  215448             : 
  215449             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215450             : 
  215451             : #if 1
  215452             : // Class Definition for SgOmpTeamsDistributeParallelForStatement
  215453             : class ROSE_DLL_API SgOmpTeamsDistributeParallelForStatement  : public SgUpirFieldBodyStatement
  215454             :    {
  215455             :      public:
  215456             : 
  215457             : 
  215458             : /* #line 215459 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215459             : 
  215460             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  215461             : // Start of memberFunctionString
  215462             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  215463             : 
  215464             : // *** COMMON CODE SECTION BEGINS HERE ***
  215465             : 
  215466             :     public:
  215467             : 
  215468             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  215469             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  215470             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  215471             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  215472             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  215473             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  215474             : 
  215475             :       /*! \brief returns a string representing the class name */
  215476             :           virtual std::string class_name() const override;
  215477             : 
  215478             :       /*! \brief returns new style SageIII enum values */
  215479             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  215480             : 
  215481             :       /*! \brief static variant value */
  215482             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  215483             :        // static const VariantT static_variant = V_SgOmpTeamsDistributeParallelForStatement;
  215484             :           enum { static_variant = V_SgOmpTeamsDistributeParallelForStatement };
  215485             : 
  215486             :        /* the generated cast function */
  215487             :       /*! \brief Casts pointer from base class to derived class */
  215488             :           ROSE_DLL_API friend       SgOmpTeamsDistributeParallelForStatement* isSgOmpTeamsDistributeParallelForStatement(       SgNode * s );
  215489             : 
  215490             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  215491             :           ROSE_DLL_API friend const SgOmpTeamsDistributeParallelForStatement* isSgOmpTeamsDistributeParallelForStatement( const SgNode * s );
  215492             : 
  215493             :      // ******************************************
  215494             :      // * Memory Pool / New / Delete
  215495             :      // ******************************************
  215496             : 
  215497             :      public:
  215498             :           /// \private
  215499             :           static const unsigned pool_size; //
  215500             :           /// \private
  215501             :           static std::vector<unsigned char *> pools; //
  215502             :           /// \private
  215503             :           static SgOmpTeamsDistributeParallelForStatement * next_node; // 
  215504             : 
  215505             :           /// \private
  215506             :           static unsigned long initializeStorageClassArray(SgOmpTeamsDistributeParallelForStatementStorageClass *); //
  215507             : 
  215508             :           /// \private
  215509             :           static void clearMemoryPool(); //
  215510             :           static void deleteMemoryPool(); //
  215511             : 
  215512             :           /// \private
  215513             :           static void extendMemoryPoolForFileIO(); //
  215514             : 
  215515             :           /// \private
  215516             :           static SgOmpTeamsDistributeParallelForStatement * getPointerFromGlobalIndex(unsigned long); //
  215517             :           /// \private
  215518             :           static SgOmpTeamsDistributeParallelForStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  215519             : 
  215520             :           /// \private
  215521             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  215522             :           /// \private
  215523             :           static void resetValidFreepointers(); //
  215524             :           /// \private
  215525             :           static unsigned long getNumberOfLastValidPointer(); //
  215526             : 
  215527             : 
  215528             : #if defined(INLINE_FUNCTIONS)
  215529             :       /*! \brief returns pointer to newly allocated IR node */
  215530             :           inline void *operator new (size_t size);
  215531             : #else
  215532             :       /*! \brief returns pointer to newly allocated IR node */
  215533             :           void *operator new (size_t size);
  215534             : #endif
  215535             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  215536             :           void operator delete (void* pointer, size_t size);
  215537             : 
  215538             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  215539           0 :           void operator delete (void* pointer)
  215540             :              {
  215541             :             // This is the generated delete operator...
  215542           0 :                SgOmpTeamsDistributeParallelForStatement::operator delete (pointer,sizeof(SgOmpTeamsDistributeParallelForStatement));
  215543             :              }
  215544             : 
  215545             :       /*! \brief Returns the total number of IR nodes of this type */
  215546             :           static size_t numberOfNodes();
  215547             : 
  215548             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  215549             :           static size_t memoryUsage();
  215550             : 
  215551             :       // End of scope which started in IR nodes specific code 
  215552             :       /* */
  215553             : 
  215554             :       /* name Internal Functions
  215555             :           \brief Internal functions ... incomplete-documentation
  215556             : 
  215557             :           These functions have been made public as part of the design, but they are suggested for internal use 
  215558             :           or by particularly knowledgeable users for specialized tools or applications.
  215559             : 
  215560             :           \internal We could not make these private because they are required by user for special purposes. And 
  215561             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  215562             :          
  215563             :        */
  215564             : 
  215565             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  215566             :        // overridden in every class by *generated* implementation
  215567             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  215568             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  215569             :        // MS: 06/28/02 container of names of variables or container indices 
  215570             :        // used used in the traversal to access AST successor nodes
  215571             :        // overridden in every class by *generated* implementation
  215572             :       /*! \brief container of names of variables or container indices used used in the traversal
  215573             :           to access AST successor nodes overridden in every class by *generated* implementation */
  215574             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  215575             : 
  215576             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  215577             :        // than all the vector copies. The implementation for these functions is generated for each class.
  215578             :       /*! \brief return number of children in the traversal successor list */
  215579             :           virtual size_t get_numberOfTraversalSuccessors() override;
  215580             :       /*! \brief index-based access to traversal successors by index number */
  215581             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  215582             :       /*! \brief index-based access to traversal successors by child node */
  215583             :           virtual size_t get_childIndex(SgNode *child) override;
  215584             : 
  215585             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  215586             :        // MS: 08/16/2002 method for generating RTI information
  215587             :       /*! \brief return C++ Runtime-Time-Information */
  215588             :           virtual RTIReturnType roseRTI() override;
  215589             : #endif
  215590             :       /* */
  215591             : 
  215592             : 
  215593             : 
  215594             :       /* name Deprecated Functions
  215595             :           \brief Deprecated functions ... incomplete-documentation
  215596             : 
  215597             :           These functions have been deprecated from use.
  215598             :        */
  215599             :       /* */
  215600             : 
  215601             :       /*! returns a C style string (char*) representing the class name */
  215602             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  215603             : 
  215604             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  215605             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  215606             : #if 0
  215607             :       /*! returns old style Sage II enum values */
  215608             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  215609             :       /*! returns old style Sage II enum values */
  215610             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  215611             : #endif
  215612             :       /* */
  215613             : 
  215614             : 
  215615             : 
  215616             : 
  215617             :      public:
  215618             :       /* name Traversal Support Functions
  215619             :           \brief Traversal support functions ... incomplete-documentation
  215620             : 
  215621             :           These functions have been made public as part of the design, but they are suggested for internal use 
  215622             :           or by particularly knowledgable users for specialized tools or applications.
  215623             :        */
  215624             :       /* */
  215625             : 
  215626             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  215627             :        // (inferior to ROSE traversal mechanism, experimental).
  215628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  215629             :        */
  215630             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  215631             : 
  215632             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  215633             :       /*! \brief support for the classic visitor pattern done in GoF */
  215634             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  215635             : 
  215636             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  215637             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  215638             :        */
  215639             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  215640             : 
  215641             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  215642             :        */
  215643             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  215644             : 
  215645             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  215646             :        // This traversal helps support internal tools that call static member functions.
  215647             :        // note: this function operates on the memory pools.
  215648             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  215649             :        */
  215650             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  215651             :       /* */
  215652             : 
  215653             : 
  215654             :      public:
  215655             :       /* name Memory Allocation Functions
  215656             :           \brief Memory allocations functions ... incomplete-documentation
  215657             : 
  215658             :           These functions have been made public as part of the design, but they are suggested for internal use 
  215659             :           or by particularly knowledgable users for specialized tools or applications.
  215660             :        */
  215661             :       /* */
  215662             : 
  215663             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  215664             : 
  215665             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  215666             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  215667             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  215668             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  215669             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  215670             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  215671             :           being used with the AST File I/O mechanism.
  215672             :        */
  215673             :           virtual bool isInMemoryPool() override;
  215674             : 
  215675             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  215676             : 
  215677             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  215678             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  215679             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  215680             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  215681             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  215682             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  215683             :           being used with the AST File I/O mechanism.
  215684             :        */
  215685             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  215686             : 
  215687             :       // DQ (4/30/2006): Modified to be a const function.
  215688             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  215689             : 
  215690             :           This functions is part of general support for many possible tools to operate 
  215691             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  215692             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  215693             :           less than the set of pointers used by the AST file I/O. This is part of
  215694             :           work implemented by Andreas, and support tools such as the AST graph generation.
  215695             : 
  215696             :           \warning This function can return unexpected data members and thus the 
  215697             :                    order and the number of elements is unpredicable and subject 
  215698             :                    to change.
  215699             : 
  215700             :           \returns STL vector of pairs of SgNode* and strings
  215701             :        */
  215702             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  215703             : 
  215704             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  215705             : 
  215706             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  215707             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  215708             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  215709             : 
  215710             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  215711             :                    and subject to change.
  215712             :        */
  215713             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  215714             : 
  215715             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  215716             : 
  215717             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  215718             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  215719             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  215720             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  215721             : 
  215722             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  215723             : 
  215724             :           \returns long
  215725             :        */
  215726             :           virtual long getChildIndex( SgNode* childNode ) const override;
  215727             : 
  215728             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  215729             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  215730             :       /* \brief Constructor for use by AST File I/O Mechanism
  215731             : 
  215732             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  215733             :           which obtained via fast binary file I/O from disk.
  215734             :        */
  215735             :        // SgOmpTeamsDistributeParallelForStatement( SgOmpTeamsDistributeParallelForStatementStorageClass& source );
  215736             : 
  215737             : 
  215738             : 
  215739             : 
  215740             : 
  215741             :  // JH (10/24/2005): methods added to support the ast file IO
  215742             :     private:
  215743             : 
  215744             :       /* name AST Memory Allocation Support Functions
  215745             :           \brief Memory allocations support....
  215746             : 
  215747             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  215748             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  215749             :           and support the AST File I/O Mechanism.
  215750             :        */
  215751             :       /* */
  215752             : 
  215753             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  215754             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  215755             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  215756             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  215757             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  215758             :           a correspinding one in the AST_FILE_IO class!
  215759             :        */
  215760             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  215761             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  215762             :       /* \brief Typedef used for low level memory access.
  215763             :        */
  215764             :        // typedef unsigned char* TestType;
  215765             : 
  215766             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  215767             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  215768             :       /* \brief Typedef used to hold memory addresses as values.
  215769             :        */
  215770             :        // typedef unsigned long  AddressType;
  215771             : 
  215772             : 
  215773             : 
  215774             :        // necessary, to have direct access to the p_freepointer and the private methods !
  215775             :       /*! \brief friend class declaration to support AST File I/O */
  215776             :           friend class AST_FILE_IO;
  215777             : 
  215778             :       /*! \brief friend class declaration to support AST File I/O */
  215779             :           friend class SgOmpTeamsDistributeParallelForStatementStorageClass;
  215780             : 
  215781             :       /*! \brief friend class declaration to support AST File I/O */
  215782             :           friend class AstSpecificDataManagingClass;
  215783             : 
  215784             :       /*! \brief friend class declaration to support AST File I/O */
  215785             :           friend class AstSpecificDataManagingClassStorageClass;
  215786             :     public:
  215787             :       /*! \brief IR node constructor to support AST File I/O */
  215788             :           SgOmpTeamsDistributeParallelForStatement( const SgOmpTeamsDistributeParallelForStatementStorageClass& source );
  215789             : 
  215790             :  // private: // JJW hack
  215791             :        /*
  215792             :           name AST Memory Allocation Support Variables
  215793             :           Memory allocations support variables 
  215794             : 
  215795             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  215796             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  215797             :           and support the AST File I/O Mechanism.
  215798             :        */
  215799             :       /* */
  215800             : 
  215801             :     public:
  215802             : 
  215803             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  215804             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  215805             :       // virtual SgNode* addRegExpAttribute();
  215806             :       /*! \brief Support for AST matching using regular expression.
  215807             : 
  215808             :           This support is incomplete and the subject of current research to define 
  215809             :           RegEx trees to support inexact matching.
  215810             :        */
  215811             :           SgOmpTeamsDistributeParallelForStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  215812             : 
  215813             : // *** COMMON CODE SECTION ENDS HERE ***
  215814             : 
  215815             : 
  215816             : // End of memberFunctionString
  215817             : // Start of memberFunctionString
  215818             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  215819             : 
  215820             :      // the generated cast function
  215821             :      // friend ROSE_DLL_API SgOmpTeamsDistributeParallelForStatement* isSgOmpTeamsDistributeParallelForStatement ( SgNode* s );
  215822             : 
  215823             :           typedef SgUpirFieldBodyStatement base_node_type;
  215824             : 
  215825             : 
  215826             : // End of memberFunctionString
  215827             : // Start of memberFunctionString
  215828             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  215829             : 
  215830             :           void post_construction_initialization() override;
  215831             : 
  215832             : 
  215833             : // End of memberFunctionString
  215834             : 
  215835             : 
  215836             :      public: 
  215837             :          virtual ~SgOmpTeamsDistributeParallelForStatement();
  215838             : 
  215839             : 
  215840             :      public: 
  215841             :          SgOmpTeamsDistributeParallelForStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  215842             :          SgOmpTeamsDistributeParallelForStatement(SgStatement* body); 
  215843             : 
  215844             :     protected:
  215845             : 
  215846             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTeamsDistributeParallelForStatement>;
  215847             : 
  215848             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215849             : 
  215850             : 
  215851             :    };
  215852             : #endif
  215853             : 
  215854             : // postdeclarations for SgOmpTeamsDistributeParallelForStatement
  215855             : 
  215856             : /* #line 215857 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215857             : 
  215858             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  215859             : 
  215860             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215861             : 
  215862             : 
  215863             : /* #line 215864 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215864             : 
  215865             : 
  215866             : 
  215867             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215868             : 
  215869             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  215870             : //      This code is automatically generated for each 
  215871             : //      terminal and non-terminal within the defined 
  215872             : //      grammar.  There is a simple way to change the 
  215873             : //      code to fix bugs etc.  See the ROSE README file
  215874             : //      for directions.
  215875             : 
  215876             : // tps: (02/22/2010): Adding DLL export requirements
  215877             : #include "rosedll.h"
  215878             : 
  215879             : // predeclarations for SgOmpTeamsDistributeParallelForSimdStatement
  215880             : 
  215881             : /* #line 215882 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215882             : 
  215883             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  215884             : 
  215885             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  215886             : 
  215887             : #if 1
  215888             : // Class Definition for SgOmpTeamsDistributeParallelForSimdStatement
  215889             : class ROSE_DLL_API SgOmpTeamsDistributeParallelForSimdStatement  : public SgUpirFieldBodyStatement
  215890             :    {
  215891             :      public:
  215892             : 
  215893             : 
  215894             : /* #line 215895 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  215895             : 
  215896             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  215897             : // Start of memberFunctionString
  215898             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  215899             : 
  215900             : // *** COMMON CODE SECTION BEGINS HERE ***
  215901             : 
  215902             :     public:
  215903             : 
  215904             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  215905             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  215906             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  215907             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  215908             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  215909             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  215910             : 
  215911             :       /*! \brief returns a string representing the class name */
  215912             :           virtual std::string class_name() const override;
  215913             : 
  215914             :       /*! \brief returns new style SageIII enum values */
  215915             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  215916             : 
  215917             :       /*! \brief static variant value */
  215918             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  215919             :        // static const VariantT static_variant = V_SgOmpTeamsDistributeParallelForSimdStatement;
  215920             :           enum { static_variant = V_SgOmpTeamsDistributeParallelForSimdStatement };
  215921             : 
  215922             :        /* the generated cast function */
  215923             :       /*! \brief Casts pointer from base class to derived class */
  215924             :           ROSE_DLL_API friend       SgOmpTeamsDistributeParallelForSimdStatement* isSgOmpTeamsDistributeParallelForSimdStatement(       SgNode * s );
  215925             : 
  215926             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  215927             :           ROSE_DLL_API friend const SgOmpTeamsDistributeParallelForSimdStatement* isSgOmpTeamsDistributeParallelForSimdStatement( const SgNode * s );
  215928             : 
  215929             :      // ******************************************
  215930             :      // * Memory Pool / New / Delete
  215931             :      // ******************************************
  215932             : 
  215933             :      public:
  215934             :           /// \private
  215935             :           static const unsigned pool_size; //
  215936             :           /// \private
  215937             :           static std::vector<unsigned char *> pools; //
  215938             :           /// \private
  215939             :           static SgOmpTeamsDistributeParallelForSimdStatement * next_node; // 
  215940             : 
  215941             :           /// \private
  215942             :           static unsigned long initializeStorageClassArray(SgOmpTeamsDistributeParallelForSimdStatementStorageClass *); //
  215943             : 
  215944             :           /// \private
  215945             :           static void clearMemoryPool(); //
  215946             :           static void deleteMemoryPool(); //
  215947             : 
  215948             :           /// \private
  215949             :           static void extendMemoryPoolForFileIO(); //
  215950             : 
  215951             :           /// \private
  215952             :           static SgOmpTeamsDistributeParallelForSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  215953             :           /// \private
  215954             :           static SgOmpTeamsDistributeParallelForSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  215955             : 
  215956             :           /// \private
  215957             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  215958             :           /// \private
  215959             :           static void resetValidFreepointers(); //
  215960             :           /// \private
  215961             :           static unsigned long getNumberOfLastValidPointer(); //
  215962             : 
  215963             : 
  215964             : #if defined(INLINE_FUNCTIONS)
  215965             :       /*! \brief returns pointer to newly allocated IR node */
  215966             :           inline void *operator new (size_t size);
  215967             : #else
  215968             :       /*! \brief returns pointer to newly allocated IR node */
  215969             :           void *operator new (size_t size);
  215970             : #endif
  215971             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  215972             :           void operator delete (void* pointer, size_t size);
  215973             : 
  215974             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  215975           0 :           void operator delete (void* pointer)
  215976             :              {
  215977             :             // This is the generated delete operator...
  215978           0 :                SgOmpTeamsDistributeParallelForSimdStatement::operator delete (pointer,sizeof(SgOmpTeamsDistributeParallelForSimdStatement));
  215979             :              }
  215980             : 
  215981             :       /*! \brief Returns the total number of IR nodes of this type */
  215982             :           static size_t numberOfNodes();
  215983             : 
  215984             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  215985             :           static size_t memoryUsage();
  215986             : 
  215987             :       // End of scope which started in IR nodes specific code 
  215988             :       /* */
  215989             : 
  215990             :       /* name Internal Functions
  215991             :           \brief Internal functions ... incomplete-documentation
  215992             : 
  215993             :           These functions have been made public as part of the design, but they are suggested for internal use 
  215994             :           or by particularly knowledgeable users for specialized tools or applications.
  215995             : 
  215996             :           \internal We could not make these private because they are required by user for special purposes. And 
  215997             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  215998             :          
  215999             :        */
  216000             : 
  216001             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  216002             :        // overridden in every class by *generated* implementation
  216003             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  216004             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  216005             :        // MS: 06/28/02 container of names of variables or container indices 
  216006             :        // used used in the traversal to access AST successor nodes
  216007             :        // overridden in every class by *generated* implementation
  216008             :       /*! \brief container of names of variables or container indices used used in the traversal
  216009             :           to access AST successor nodes overridden in every class by *generated* implementation */
  216010             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  216011             : 
  216012             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  216013             :        // than all the vector copies. The implementation for these functions is generated for each class.
  216014             :       /*! \brief return number of children in the traversal successor list */
  216015             :           virtual size_t get_numberOfTraversalSuccessors() override;
  216016             :       /*! \brief index-based access to traversal successors by index number */
  216017             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  216018             :       /*! \brief index-based access to traversal successors by child node */
  216019             :           virtual size_t get_childIndex(SgNode *child) override;
  216020             : 
  216021             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  216022             :        // MS: 08/16/2002 method for generating RTI information
  216023             :       /*! \brief return C++ Runtime-Time-Information */
  216024             :           virtual RTIReturnType roseRTI() override;
  216025             : #endif
  216026             :       /* */
  216027             : 
  216028             : 
  216029             : 
  216030             :       /* name Deprecated Functions
  216031             :           \brief Deprecated functions ... incomplete-documentation
  216032             : 
  216033             :           These functions have been deprecated from use.
  216034             :        */
  216035             :       /* */
  216036             : 
  216037             :       /*! returns a C style string (char*) representing the class name */
  216038             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  216039             : 
  216040             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  216041             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  216042             : #if 0
  216043             :       /*! returns old style Sage II enum values */
  216044             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  216045             :       /*! returns old style Sage II enum values */
  216046             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  216047             : #endif
  216048             :       /* */
  216049             : 
  216050             : 
  216051             : 
  216052             : 
  216053             :      public:
  216054             :       /* name Traversal Support Functions
  216055             :           \brief Traversal support functions ... incomplete-documentation
  216056             : 
  216057             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216058             :           or by particularly knowledgable users for specialized tools or applications.
  216059             :        */
  216060             :       /* */
  216061             : 
  216062             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  216063             :        // (inferior to ROSE traversal mechanism, experimental).
  216064             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  216065             :        */
  216066             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  216067             : 
  216068             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  216069             :       /*! \brief support for the classic visitor pattern done in GoF */
  216070             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  216071             : 
  216072             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  216073             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  216074             :        */
  216075             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  216076             : 
  216077             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  216078             :        */
  216079             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  216080             : 
  216081             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  216082             :        // This traversal helps support internal tools that call static member functions.
  216083             :        // note: this function operates on the memory pools.
  216084             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  216085             :        */
  216086             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  216087             :       /* */
  216088             : 
  216089             : 
  216090             :      public:
  216091             :       /* name Memory Allocation Functions
  216092             :           \brief Memory allocations functions ... incomplete-documentation
  216093             : 
  216094             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216095             :           or by particularly knowledgable users for specialized tools or applications.
  216096             :        */
  216097             :       /* */
  216098             : 
  216099             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  216100             : 
  216101             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  216102             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  216103             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  216104             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  216105             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  216106             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  216107             :           being used with the AST File I/O mechanism.
  216108             :        */
  216109             :           virtual bool isInMemoryPool() override;
  216110             : 
  216111             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  216112             : 
  216113             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  216114             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  216115             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  216116             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  216117             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  216118             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  216119             :           being used with the AST File I/O mechanism.
  216120             :        */
  216121             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  216122             : 
  216123             :       // DQ (4/30/2006): Modified to be a const function.
  216124             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  216125             : 
  216126             :           This functions is part of general support for many possible tools to operate 
  216127             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  216128             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  216129             :           less than the set of pointers used by the AST file I/O. This is part of
  216130             :           work implemented by Andreas, and support tools such as the AST graph generation.
  216131             : 
  216132             :           \warning This function can return unexpected data members and thus the 
  216133             :                    order and the number of elements is unpredicable and subject 
  216134             :                    to change.
  216135             : 
  216136             :           \returns STL vector of pairs of SgNode* and strings
  216137             :        */
  216138             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  216139             : 
  216140             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  216141             : 
  216142             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  216143             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  216144             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  216145             : 
  216146             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  216147             :                    and subject to change.
  216148             :        */
  216149             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  216150             : 
  216151             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  216152             : 
  216153             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  216154             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  216155             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  216156             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  216157             : 
  216158             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  216159             : 
  216160             :           \returns long
  216161             :        */
  216162             :           virtual long getChildIndex( SgNode* childNode ) const override;
  216163             : 
  216164             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  216165             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  216166             :       /* \brief Constructor for use by AST File I/O Mechanism
  216167             : 
  216168             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  216169             :           which obtained via fast binary file I/O from disk.
  216170             :        */
  216171             :        // SgOmpTeamsDistributeParallelForSimdStatement( SgOmpTeamsDistributeParallelForSimdStatementStorageClass& source );
  216172             : 
  216173             : 
  216174             : 
  216175             : 
  216176             : 
  216177             :  // JH (10/24/2005): methods added to support the ast file IO
  216178             :     private:
  216179             : 
  216180             :       /* name AST Memory Allocation Support Functions
  216181             :           \brief Memory allocations support....
  216182             : 
  216183             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  216184             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  216185             :           and support the AST File I/O Mechanism.
  216186             :        */
  216187             :       /* */
  216188             : 
  216189             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  216190             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  216191             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  216192             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  216193             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  216194             :           a correspinding one in the AST_FILE_IO class!
  216195             :        */
  216196             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  216197             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  216198             :       /* \brief Typedef used for low level memory access.
  216199             :        */
  216200             :        // typedef unsigned char* TestType;
  216201             : 
  216202             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  216203             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  216204             :       /* \brief Typedef used to hold memory addresses as values.
  216205             :        */
  216206             :        // typedef unsigned long  AddressType;
  216207             : 
  216208             : 
  216209             : 
  216210             :        // necessary, to have direct access to the p_freepointer and the private methods !
  216211             :       /*! \brief friend class declaration to support AST File I/O */
  216212             :           friend class AST_FILE_IO;
  216213             : 
  216214             :       /*! \brief friend class declaration to support AST File I/O */
  216215             :           friend class SgOmpTeamsDistributeParallelForSimdStatementStorageClass;
  216216             : 
  216217             :       /*! \brief friend class declaration to support AST File I/O */
  216218             :           friend class AstSpecificDataManagingClass;
  216219             : 
  216220             :       /*! \brief friend class declaration to support AST File I/O */
  216221             :           friend class AstSpecificDataManagingClassStorageClass;
  216222             :     public:
  216223             :       /*! \brief IR node constructor to support AST File I/O */
  216224             :           SgOmpTeamsDistributeParallelForSimdStatement( const SgOmpTeamsDistributeParallelForSimdStatementStorageClass& source );
  216225             : 
  216226             :  // private: // JJW hack
  216227             :        /*
  216228             :           name AST Memory Allocation Support Variables
  216229             :           Memory allocations support variables 
  216230             : 
  216231             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  216232             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  216233             :           and support the AST File I/O Mechanism.
  216234             :        */
  216235             :       /* */
  216236             : 
  216237             :     public:
  216238             : 
  216239             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  216240             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  216241             :       // virtual SgNode* addRegExpAttribute();
  216242             :       /*! \brief Support for AST matching using regular expression.
  216243             : 
  216244             :           This support is incomplete and the subject of current research to define 
  216245             :           RegEx trees to support inexact matching.
  216246             :        */
  216247             :           SgOmpTeamsDistributeParallelForSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  216248             : 
  216249             : // *** COMMON CODE SECTION ENDS HERE ***
  216250             : 
  216251             : 
  216252             : // End of memberFunctionString
  216253             : // Start of memberFunctionString
  216254             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  216255             : 
  216256             :      // the generated cast function
  216257             :      // friend ROSE_DLL_API SgOmpTeamsDistributeParallelForSimdStatement* isSgOmpTeamsDistributeParallelForSimdStatement ( SgNode* s );
  216258             : 
  216259             :           typedef SgUpirFieldBodyStatement base_node_type;
  216260             : 
  216261             : 
  216262             : // End of memberFunctionString
  216263             : // Start of memberFunctionString
  216264             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  216265             : 
  216266             :           void post_construction_initialization() override;
  216267             : 
  216268             : 
  216269             : // End of memberFunctionString
  216270             : 
  216271             : 
  216272             :      public: 
  216273             :          virtual ~SgOmpTeamsDistributeParallelForSimdStatement();
  216274             : 
  216275             : 
  216276             :      public: 
  216277             :          SgOmpTeamsDistributeParallelForSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  216278             :          SgOmpTeamsDistributeParallelForSimdStatement(SgStatement* body); 
  216279             : 
  216280             :     protected:
  216281             : 
  216282             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTeamsDistributeParallelForSimdStatement>;
  216283             : 
  216284             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216285             : 
  216286             : 
  216287             :    };
  216288             : #endif
  216289             : 
  216290             : // postdeclarations for SgOmpTeamsDistributeParallelForSimdStatement
  216291             : 
  216292             : /* #line 216293 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216293             : 
  216294             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  216295             : 
  216296             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216297             : 
  216298             : 
  216299             : /* #line 216300 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216300             : 
  216301             : 
  216302             : 
  216303             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216304             : 
  216305             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  216306             : //      This code is automatically generated for each 
  216307             : //      terminal and non-terminal within the defined 
  216308             : //      grammar.  There is a simple way to change the 
  216309             : //      code to fix bugs etc.  See the ROSE README file
  216310             : //      for directions.
  216311             : 
  216312             : // tps: (02/22/2010): Adding DLL export requirements
  216313             : #include "rosedll.h"
  216314             : 
  216315             : // predeclarations for SgOmpTeamsLoopStatement
  216316             : 
  216317             : /* #line 216318 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216318             : 
  216319             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  216320             : 
  216321             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216322             : 
  216323             : #if 1
  216324             : // Class Definition for SgOmpTeamsLoopStatement
  216325             : class ROSE_DLL_API SgOmpTeamsLoopStatement  : public SgUpirFieldBodyStatement
  216326             :    {
  216327             :      public:
  216328             : 
  216329             : 
  216330             : /* #line 216331 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216331             : 
  216332             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  216333             : // Start of memberFunctionString
  216334             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  216335             : 
  216336             : // *** COMMON CODE SECTION BEGINS HERE ***
  216337             : 
  216338             :     public:
  216339             : 
  216340             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  216341             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  216342             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  216343             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  216344             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  216345             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  216346             : 
  216347             :       /*! \brief returns a string representing the class name */
  216348             :           virtual std::string class_name() const override;
  216349             : 
  216350             :       /*! \brief returns new style SageIII enum values */
  216351             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  216352             : 
  216353             :       /*! \brief static variant value */
  216354             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  216355             :        // static const VariantT static_variant = V_SgOmpTeamsLoopStatement;
  216356             :           enum { static_variant = V_SgOmpTeamsLoopStatement };
  216357             : 
  216358             :        /* the generated cast function */
  216359             :       /*! \brief Casts pointer from base class to derived class */
  216360             :           ROSE_DLL_API friend       SgOmpTeamsLoopStatement* isSgOmpTeamsLoopStatement(       SgNode * s );
  216361             : 
  216362             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  216363             :           ROSE_DLL_API friend const SgOmpTeamsLoopStatement* isSgOmpTeamsLoopStatement( const SgNode * s );
  216364             : 
  216365             :      // ******************************************
  216366             :      // * Memory Pool / New / Delete
  216367             :      // ******************************************
  216368             : 
  216369             :      public:
  216370             :           /// \private
  216371             :           static const unsigned pool_size; //
  216372             :           /// \private
  216373             :           static std::vector<unsigned char *> pools; //
  216374             :           /// \private
  216375             :           static SgOmpTeamsLoopStatement * next_node; // 
  216376             : 
  216377             :           /// \private
  216378             :           static unsigned long initializeStorageClassArray(SgOmpTeamsLoopStatementStorageClass *); //
  216379             : 
  216380             :           /// \private
  216381             :           static void clearMemoryPool(); //
  216382             :           static void deleteMemoryPool(); //
  216383             : 
  216384             :           /// \private
  216385             :           static void extendMemoryPoolForFileIO(); //
  216386             : 
  216387             :           /// \private
  216388             :           static SgOmpTeamsLoopStatement * getPointerFromGlobalIndex(unsigned long); //
  216389             :           /// \private
  216390             :           static SgOmpTeamsLoopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  216391             : 
  216392             :           /// \private
  216393             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  216394             :           /// \private
  216395             :           static void resetValidFreepointers(); //
  216396             :           /// \private
  216397             :           static unsigned long getNumberOfLastValidPointer(); //
  216398             : 
  216399             : 
  216400             : #if defined(INLINE_FUNCTIONS)
  216401             :       /*! \brief returns pointer to newly allocated IR node */
  216402             :           inline void *operator new (size_t size);
  216403             : #else
  216404             :       /*! \brief returns pointer to newly allocated IR node */
  216405             :           void *operator new (size_t size);
  216406             : #endif
  216407             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  216408             :           void operator delete (void* pointer, size_t size);
  216409             : 
  216410             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  216411           0 :           void operator delete (void* pointer)
  216412             :              {
  216413             :             // This is the generated delete operator...
  216414           0 :                SgOmpTeamsLoopStatement::operator delete (pointer,sizeof(SgOmpTeamsLoopStatement));
  216415             :              }
  216416             : 
  216417             :       /*! \brief Returns the total number of IR nodes of this type */
  216418             :           static size_t numberOfNodes();
  216419             : 
  216420             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  216421             :           static size_t memoryUsage();
  216422             : 
  216423             :       // End of scope which started in IR nodes specific code 
  216424             :       /* */
  216425             : 
  216426             :       /* name Internal Functions
  216427             :           \brief Internal functions ... incomplete-documentation
  216428             : 
  216429             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216430             :           or by particularly knowledgeable users for specialized tools or applications.
  216431             : 
  216432             :           \internal We could not make these private because they are required by user for special purposes. And 
  216433             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  216434             :          
  216435             :        */
  216436             : 
  216437             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  216438             :        // overridden in every class by *generated* implementation
  216439             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  216440             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  216441             :        // MS: 06/28/02 container of names of variables or container indices 
  216442             :        // used used in the traversal to access AST successor nodes
  216443             :        // overridden in every class by *generated* implementation
  216444             :       /*! \brief container of names of variables or container indices used used in the traversal
  216445             :           to access AST successor nodes overridden in every class by *generated* implementation */
  216446             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  216447             : 
  216448             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  216449             :        // than all the vector copies. The implementation for these functions is generated for each class.
  216450             :       /*! \brief return number of children in the traversal successor list */
  216451             :           virtual size_t get_numberOfTraversalSuccessors() override;
  216452             :       /*! \brief index-based access to traversal successors by index number */
  216453             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  216454             :       /*! \brief index-based access to traversal successors by child node */
  216455             :           virtual size_t get_childIndex(SgNode *child) override;
  216456             : 
  216457             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  216458             :        // MS: 08/16/2002 method for generating RTI information
  216459             :       /*! \brief return C++ Runtime-Time-Information */
  216460             :           virtual RTIReturnType roseRTI() override;
  216461             : #endif
  216462             :       /* */
  216463             : 
  216464             : 
  216465             : 
  216466             :       /* name Deprecated Functions
  216467             :           \brief Deprecated functions ... incomplete-documentation
  216468             : 
  216469             :           These functions have been deprecated from use.
  216470             :        */
  216471             :       /* */
  216472             : 
  216473             :       /*! returns a C style string (char*) representing the class name */
  216474             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  216475             : 
  216476             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  216477             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  216478             : #if 0
  216479             :       /*! returns old style Sage II enum values */
  216480             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  216481             :       /*! returns old style Sage II enum values */
  216482             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  216483             : #endif
  216484             :       /* */
  216485             : 
  216486             : 
  216487             : 
  216488             : 
  216489             :      public:
  216490             :       /* name Traversal Support Functions
  216491             :           \brief Traversal support functions ... incomplete-documentation
  216492             : 
  216493             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216494             :           or by particularly knowledgable users for specialized tools or applications.
  216495             :        */
  216496             :       /* */
  216497             : 
  216498             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  216499             :        // (inferior to ROSE traversal mechanism, experimental).
  216500             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  216501             :        */
  216502             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  216503             : 
  216504             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  216505             :       /*! \brief support for the classic visitor pattern done in GoF */
  216506             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  216507             : 
  216508             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  216509             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  216510             :        */
  216511             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  216512             : 
  216513             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  216514             :        */
  216515             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  216516             : 
  216517             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  216518             :        // This traversal helps support internal tools that call static member functions.
  216519             :        // note: this function operates on the memory pools.
  216520             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  216521             :        */
  216522             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  216523             :       /* */
  216524             : 
  216525             : 
  216526             :      public:
  216527             :       /* name Memory Allocation Functions
  216528             :           \brief Memory allocations functions ... incomplete-documentation
  216529             : 
  216530             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216531             :           or by particularly knowledgable users for specialized tools or applications.
  216532             :        */
  216533             :       /* */
  216534             : 
  216535             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  216536             : 
  216537             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  216538             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  216539             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  216540             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  216541             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  216542             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  216543             :           being used with the AST File I/O mechanism.
  216544             :        */
  216545             :           virtual bool isInMemoryPool() override;
  216546             : 
  216547             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  216548             : 
  216549             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  216550             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  216551             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  216552             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  216553             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  216554             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  216555             :           being used with the AST File I/O mechanism.
  216556             :        */
  216557             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  216558             : 
  216559             :       // DQ (4/30/2006): Modified to be a const function.
  216560             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  216561             : 
  216562             :           This functions is part of general support for many possible tools to operate 
  216563             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  216564             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  216565             :           less than the set of pointers used by the AST file I/O. This is part of
  216566             :           work implemented by Andreas, and support tools such as the AST graph generation.
  216567             : 
  216568             :           \warning This function can return unexpected data members and thus the 
  216569             :                    order and the number of elements is unpredicable and subject 
  216570             :                    to change.
  216571             : 
  216572             :           \returns STL vector of pairs of SgNode* and strings
  216573             :        */
  216574             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  216575             : 
  216576             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  216577             : 
  216578             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  216579             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  216580             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  216581             : 
  216582             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  216583             :                    and subject to change.
  216584             :        */
  216585             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  216586             : 
  216587             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  216588             : 
  216589             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  216590             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  216591             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  216592             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  216593             : 
  216594             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  216595             : 
  216596             :           \returns long
  216597             :        */
  216598             :           virtual long getChildIndex( SgNode* childNode ) const override;
  216599             : 
  216600             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  216601             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  216602             :       /* \brief Constructor for use by AST File I/O Mechanism
  216603             : 
  216604             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  216605             :           which obtained via fast binary file I/O from disk.
  216606             :        */
  216607             :        // SgOmpTeamsLoopStatement( SgOmpTeamsLoopStatementStorageClass& source );
  216608             : 
  216609             : 
  216610             : 
  216611             : 
  216612             : 
  216613             :  // JH (10/24/2005): methods added to support the ast file IO
  216614             :     private:
  216615             : 
  216616             :       /* name AST Memory Allocation Support Functions
  216617             :           \brief Memory allocations support....
  216618             : 
  216619             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  216620             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  216621             :           and support the AST File I/O Mechanism.
  216622             :        */
  216623             :       /* */
  216624             : 
  216625             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  216626             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  216627             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  216628             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  216629             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  216630             :           a correspinding one in the AST_FILE_IO class!
  216631             :        */
  216632             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  216633             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  216634             :       /* \brief Typedef used for low level memory access.
  216635             :        */
  216636             :        // typedef unsigned char* TestType;
  216637             : 
  216638             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  216639             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  216640             :       /* \brief Typedef used to hold memory addresses as values.
  216641             :        */
  216642             :        // typedef unsigned long  AddressType;
  216643             : 
  216644             : 
  216645             : 
  216646             :        // necessary, to have direct access to the p_freepointer and the private methods !
  216647             :       /*! \brief friend class declaration to support AST File I/O */
  216648             :           friend class AST_FILE_IO;
  216649             : 
  216650             :       /*! \brief friend class declaration to support AST File I/O */
  216651             :           friend class SgOmpTeamsLoopStatementStorageClass;
  216652             : 
  216653             :       /*! \brief friend class declaration to support AST File I/O */
  216654             :           friend class AstSpecificDataManagingClass;
  216655             : 
  216656             :       /*! \brief friend class declaration to support AST File I/O */
  216657             :           friend class AstSpecificDataManagingClassStorageClass;
  216658             :     public:
  216659             :       /*! \brief IR node constructor to support AST File I/O */
  216660             :           SgOmpTeamsLoopStatement( const SgOmpTeamsLoopStatementStorageClass& source );
  216661             : 
  216662             :  // private: // JJW hack
  216663             :        /*
  216664             :           name AST Memory Allocation Support Variables
  216665             :           Memory allocations support variables 
  216666             : 
  216667             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  216668             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  216669             :           and support the AST File I/O Mechanism.
  216670             :        */
  216671             :       /* */
  216672             : 
  216673             :     public:
  216674             : 
  216675             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  216676             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  216677             :       // virtual SgNode* addRegExpAttribute();
  216678             :       /*! \brief Support for AST matching using regular expression.
  216679             : 
  216680             :           This support is incomplete and the subject of current research to define 
  216681             :           RegEx trees to support inexact matching.
  216682             :        */
  216683             :           SgOmpTeamsLoopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  216684             : 
  216685             : // *** COMMON CODE SECTION ENDS HERE ***
  216686             : 
  216687             : 
  216688             : // End of memberFunctionString
  216689             : // Start of memberFunctionString
  216690             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  216691             : 
  216692             :      // the generated cast function
  216693             :      // friend ROSE_DLL_API SgOmpTeamsLoopStatement* isSgOmpTeamsLoopStatement ( SgNode* s );
  216694             : 
  216695             :           typedef SgUpirFieldBodyStatement base_node_type;
  216696             : 
  216697             : 
  216698             : // End of memberFunctionString
  216699             : // Start of memberFunctionString
  216700             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  216701             : 
  216702             :           void post_construction_initialization() override;
  216703             : 
  216704             : 
  216705             : // End of memberFunctionString
  216706             : 
  216707             : 
  216708             :      public: 
  216709             :          virtual ~SgOmpTeamsLoopStatement();
  216710             : 
  216711             : 
  216712             :      public: 
  216713             :          SgOmpTeamsLoopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  216714             :          SgOmpTeamsLoopStatement(SgStatement* body); 
  216715             : 
  216716             :     protected:
  216717             : 
  216718             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTeamsLoopStatement>;
  216719             : 
  216720             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216721             : 
  216722             : 
  216723             :    };
  216724             : #endif
  216725             : 
  216726             : // postdeclarations for SgOmpTeamsLoopStatement
  216727             : 
  216728             : /* #line 216729 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216729             : 
  216730             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  216731             : 
  216732             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216733             : 
  216734             : 
  216735             : /* #line 216736 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216736             : 
  216737             : 
  216738             : 
  216739             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216740             : 
  216741             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  216742             : //      This code is automatically generated for each 
  216743             : //      terminal and non-terminal within the defined 
  216744             : //      grammar.  There is a simple way to change the 
  216745             : //      code to fix bugs etc.  See the ROSE README file
  216746             : //      for directions.
  216747             : 
  216748             : // tps: (02/22/2010): Adding DLL export requirements
  216749             : #include "rosedll.h"
  216750             : 
  216751             : // predeclarations for SgOmpForSimdStatement
  216752             : 
  216753             : /* #line 216754 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216754             : 
  216755             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  216756             : 
  216757             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  216758             : 
  216759             : #if 1
  216760             : // Class Definition for SgOmpForSimdStatement
  216761             : class ROSE_DLL_API SgOmpForSimdStatement  : public SgUpirFieldBodyStatement
  216762             :    {
  216763             :      public:
  216764             : 
  216765             : 
  216766             : /* #line 216767 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  216767             : 
  216768             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  216769             : // Start of memberFunctionString
  216770             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  216771             : 
  216772             : // *** COMMON CODE SECTION BEGINS HERE ***
  216773             : 
  216774             :     public:
  216775             : 
  216776             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  216777             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  216778             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  216779             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  216780             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  216781             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  216782             : 
  216783             :       /*! \brief returns a string representing the class name */
  216784             :           virtual std::string class_name() const override;
  216785             : 
  216786             :       /*! \brief returns new style SageIII enum values */
  216787             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  216788             : 
  216789             :       /*! \brief static variant value */
  216790             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  216791             :        // static const VariantT static_variant = V_SgOmpForSimdStatement;
  216792             :           enum { static_variant = V_SgOmpForSimdStatement };
  216793             : 
  216794             :        /* the generated cast function */
  216795             :       /*! \brief Casts pointer from base class to derived class */
  216796             :           ROSE_DLL_API friend       SgOmpForSimdStatement* isSgOmpForSimdStatement(       SgNode * s );
  216797             : 
  216798             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  216799             :           ROSE_DLL_API friend const SgOmpForSimdStatement* isSgOmpForSimdStatement( const SgNode * s );
  216800             : 
  216801             :      // ******************************************
  216802             :      // * Memory Pool / New / Delete
  216803             :      // ******************************************
  216804             : 
  216805             :      public:
  216806             :           /// \private
  216807             :           static const unsigned pool_size; //
  216808             :           /// \private
  216809             :           static std::vector<unsigned char *> pools; //
  216810             :           /// \private
  216811             :           static SgOmpForSimdStatement * next_node; // 
  216812             : 
  216813             :           /// \private
  216814             :           static unsigned long initializeStorageClassArray(SgOmpForSimdStatementStorageClass *); //
  216815             : 
  216816             :           /// \private
  216817             :           static void clearMemoryPool(); //
  216818             :           static void deleteMemoryPool(); //
  216819             : 
  216820             :           /// \private
  216821             :           static void extendMemoryPoolForFileIO(); //
  216822             : 
  216823             :           /// \private
  216824             :           static SgOmpForSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  216825             :           /// \private
  216826             :           static SgOmpForSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  216827             : 
  216828             :           /// \private
  216829             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  216830             :           /// \private
  216831             :           static void resetValidFreepointers(); //
  216832             :           /// \private
  216833             :           static unsigned long getNumberOfLastValidPointer(); //
  216834             : 
  216835             : 
  216836             : #if defined(INLINE_FUNCTIONS)
  216837             :       /*! \brief returns pointer to newly allocated IR node */
  216838             :           inline void *operator new (size_t size);
  216839             : #else
  216840             :       /*! \brief returns pointer to newly allocated IR node */
  216841             :           void *operator new (size_t size);
  216842             : #endif
  216843             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  216844             :           void operator delete (void* pointer, size_t size);
  216845             : 
  216846             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  216847           0 :           void operator delete (void* pointer)
  216848             :              {
  216849             :             // This is the generated delete operator...
  216850           0 :                SgOmpForSimdStatement::operator delete (pointer,sizeof(SgOmpForSimdStatement));
  216851             :              }
  216852             : 
  216853             :       /*! \brief Returns the total number of IR nodes of this type */
  216854             :           static size_t numberOfNodes();
  216855             : 
  216856             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  216857             :           static size_t memoryUsage();
  216858             : 
  216859             :       // End of scope which started in IR nodes specific code 
  216860             :       /* */
  216861             : 
  216862             :       /* name Internal Functions
  216863             :           \brief Internal functions ... incomplete-documentation
  216864             : 
  216865             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216866             :           or by particularly knowledgeable users for specialized tools or applications.
  216867             : 
  216868             :           \internal We could not make these private because they are required by user for special purposes. And 
  216869             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  216870             :          
  216871             :        */
  216872             : 
  216873             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  216874             :        // overridden in every class by *generated* implementation
  216875             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  216876             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  216877             :        // MS: 06/28/02 container of names of variables or container indices 
  216878             :        // used used in the traversal to access AST successor nodes
  216879             :        // overridden in every class by *generated* implementation
  216880             :       /*! \brief container of names of variables or container indices used used in the traversal
  216881             :           to access AST successor nodes overridden in every class by *generated* implementation */
  216882             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  216883             : 
  216884             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  216885             :        // than all the vector copies. The implementation for these functions is generated for each class.
  216886             :       /*! \brief return number of children in the traversal successor list */
  216887             :           virtual size_t get_numberOfTraversalSuccessors() override;
  216888             :       /*! \brief index-based access to traversal successors by index number */
  216889             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  216890             :       /*! \brief index-based access to traversal successors by child node */
  216891             :           virtual size_t get_childIndex(SgNode *child) override;
  216892             : 
  216893             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  216894             :        // MS: 08/16/2002 method for generating RTI information
  216895             :       /*! \brief return C++ Runtime-Time-Information */
  216896             :           virtual RTIReturnType roseRTI() override;
  216897             : #endif
  216898             :       /* */
  216899             : 
  216900             : 
  216901             : 
  216902             :       /* name Deprecated Functions
  216903             :           \brief Deprecated functions ... incomplete-documentation
  216904             : 
  216905             :           These functions have been deprecated from use.
  216906             :        */
  216907             :       /* */
  216908             : 
  216909             :       /*! returns a C style string (char*) representing the class name */
  216910             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  216911             : 
  216912             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  216913             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  216914             : #if 0
  216915             :       /*! returns old style Sage II enum values */
  216916             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  216917             :       /*! returns old style Sage II enum values */
  216918             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  216919             : #endif
  216920             :       /* */
  216921             : 
  216922             : 
  216923             : 
  216924             : 
  216925             :      public:
  216926             :       /* name Traversal Support Functions
  216927             :           \brief Traversal support functions ... incomplete-documentation
  216928             : 
  216929             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216930             :           or by particularly knowledgable users for specialized tools or applications.
  216931             :        */
  216932             :       /* */
  216933             : 
  216934             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  216935             :        // (inferior to ROSE traversal mechanism, experimental).
  216936             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  216937             :        */
  216938             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  216939             : 
  216940             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  216941             :       /*! \brief support for the classic visitor pattern done in GoF */
  216942             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  216943             : 
  216944             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  216945             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  216946             :        */
  216947             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  216948             : 
  216949             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  216950             :        */
  216951             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  216952             : 
  216953             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  216954             :        // This traversal helps support internal tools that call static member functions.
  216955             :        // note: this function operates on the memory pools.
  216956             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  216957             :        */
  216958             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  216959             :       /* */
  216960             : 
  216961             : 
  216962             :      public:
  216963             :       /* name Memory Allocation Functions
  216964             :           \brief Memory allocations functions ... incomplete-documentation
  216965             : 
  216966             :           These functions have been made public as part of the design, but they are suggested for internal use 
  216967             :           or by particularly knowledgable users for specialized tools or applications.
  216968             :        */
  216969             :       /* */
  216970             : 
  216971             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  216972             : 
  216973             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  216974             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  216975             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  216976             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  216977             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  216978             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  216979             :           being used with the AST File I/O mechanism.
  216980             :        */
  216981             :           virtual bool isInMemoryPool() override;
  216982             : 
  216983             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  216984             : 
  216985             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  216986             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  216987             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  216988             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  216989             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  216990             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  216991             :           being used with the AST File I/O mechanism.
  216992             :        */
  216993             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  216994             : 
  216995             :       // DQ (4/30/2006): Modified to be a const function.
  216996             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  216997             : 
  216998             :           This functions is part of general support for many possible tools to operate 
  216999             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  217000             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  217001             :           less than the set of pointers used by the AST file I/O. This is part of
  217002             :           work implemented by Andreas, and support tools such as the AST graph generation.
  217003             : 
  217004             :           \warning This function can return unexpected data members and thus the 
  217005             :                    order and the number of elements is unpredicable and subject 
  217006             :                    to change.
  217007             : 
  217008             :           \returns STL vector of pairs of SgNode* and strings
  217009             :        */
  217010             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  217011             : 
  217012             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  217013             : 
  217014             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  217015             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  217016             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  217017             : 
  217018             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  217019             :                    and subject to change.
  217020             :        */
  217021             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  217022             : 
  217023             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  217024             : 
  217025             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  217026             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  217027             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  217028             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  217029             : 
  217030             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  217031             : 
  217032             :           \returns long
  217033             :        */
  217034             :           virtual long getChildIndex( SgNode* childNode ) const override;
  217035             : 
  217036             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  217037             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217038             :       /* \brief Constructor for use by AST File I/O Mechanism
  217039             : 
  217040             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  217041             :           which obtained via fast binary file I/O from disk.
  217042             :        */
  217043             :        // SgOmpForSimdStatement( SgOmpForSimdStatementStorageClass& source );
  217044             : 
  217045             : 
  217046             : 
  217047             : 
  217048             : 
  217049             :  // JH (10/24/2005): methods added to support the ast file IO
  217050             :     private:
  217051             : 
  217052             :       /* name AST Memory Allocation Support Functions
  217053             :           \brief Memory allocations support....
  217054             : 
  217055             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  217056             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  217057             :           and support the AST File I/O Mechanism.
  217058             :        */
  217059             :       /* */
  217060             : 
  217061             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  217062             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  217063             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  217064             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  217065             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  217066             :           a correspinding one in the AST_FILE_IO class!
  217067             :        */
  217068             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  217069             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217070             :       /* \brief Typedef used for low level memory access.
  217071             :        */
  217072             :        // typedef unsigned char* TestType;
  217073             : 
  217074             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  217075             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217076             :       /* \brief Typedef used to hold memory addresses as values.
  217077             :        */
  217078             :        // typedef unsigned long  AddressType;
  217079             : 
  217080             : 
  217081             : 
  217082             :        // necessary, to have direct access to the p_freepointer and the private methods !
  217083             :       /*! \brief friend class declaration to support AST File I/O */
  217084             :           friend class AST_FILE_IO;
  217085             : 
  217086             :       /*! \brief friend class declaration to support AST File I/O */
  217087             :           friend class SgOmpForSimdStatementStorageClass;
  217088             : 
  217089             :       /*! \brief friend class declaration to support AST File I/O */
  217090             :           friend class AstSpecificDataManagingClass;
  217091             : 
  217092             :       /*! \brief friend class declaration to support AST File I/O */
  217093             :           friend class AstSpecificDataManagingClassStorageClass;
  217094             :     public:
  217095             :       /*! \brief IR node constructor to support AST File I/O */
  217096             :           SgOmpForSimdStatement( const SgOmpForSimdStatementStorageClass& source );
  217097             : 
  217098             :  // private: // JJW hack
  217099             :        /*
  217100             :           name AST Memory Allocation Support Variables
  217101             :           Memory allocations support variables 
  217102             : 
  217103             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  217104             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  217105             :           and support the AST File I/O Mechanism.
  217106             :        */
  217107             :       /* */
  217108             : 
  217109             :     public:
  217110             : 
  217111             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  217112             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  217113             :       // virtual SgNode* addRegExpAttribute();
  217114             :       /*! \brief Support for AST matching using regular expression.
  217115             : 
  217116             :           This support is incomplete and the subject of current research to define 
  217117             :           RegEx trees to support inexact matching.
  217118             :        */
  217119             :           SgOmpForSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  217120             : 
  217121             : // *** COMMON CODE SECTION ENDS HERE ***
  217122             : 
  217123             : 
  217124             : // End of memberFunctionString
  217125             : // Start of memberFunctionString
  217126             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  217127             : 
  217128             :      // the generated cast function
  217129             :      // friend ROSE_DLL_API SgOmpForSimdStatement* isSgOmpForSimdStatement ( SgNode* s );
  217130             : 
  217131             :           typedef SgUpirFieldBodyStatement base_node_type;
  217132             : 
  217133             : 
  217134             : // End of memberFunctionString
  217135             : // Start of memberFunctionString
  217136             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  217137             : 
  217138             :           void post_construction_initialization() override;
  217139             : 
  217140             : 
  217141             : // End of memberFunctionString
  217142             : 
  217143             : 
  217144             :      public: 
  217145             :          virtual ~SgOmpForSimdStatement();
  217146             : 
  217147             : 
  217148             :      public: 
  217149             :          SgOmpForSimdStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  217150             :          SgOmpForSimdStatement(SgStatement* body); 
  217151             : 
  217152             :     protected:
  217153             : 
  217154             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpForSimdStatement>;
  217155             : 
  217156             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217157             : 
  217158             : 
  217159             :    };
  217160             : #endif
  217161             : 
  217162             : // postdeclarations for SgOmpForSimdStatement
  217163             : 
  217164             : /* #line 217165 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217165             : 
  217166             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  217167             : 
  217168             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217169             : 
  217170             : 
  217171             : /* #line 217172 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217172             : 
  217173             : 
  217174             : 
  217175             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217176             : 
  217177             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  217178             : //      This code is automatically generated for each 
  217179             : //      terminal and non-terminal within the defined 
  217180             : //      grammar.  There is a simple way to change the 
  217181             : //      code to fix bugs etc.  See the ROSE README file
  217182             : //      for directions.
  217183             : 
  217184             : // tps: (02/22/2010): Adding DLL export requirements
  217185             : #include "rosedll.h"
  217186             : 
  217187             : // predeclarations for SgOmpCriticalStatement
  217188             : 
  217189             : /* #line 217190 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217190             : 
  217191             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  217192             : 
  217193             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217194             : 
  217195             : #if 1
  217196             : // Class Definition for SgOmpCriticalStatement
  217197             : class ROSE_DLL_API SgOmpCriticalStatement  : public SgUpirFieldBodyStatement
  217198             :    {
  217199             :      public:
  217200             : 
  217201             : 
  217202             : /* #line 217203 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217203             : 
  217204             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  217205             : // Start of memberFunctionString
  217206             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  217207             : 
  217208             : // *** COMMON CODE SECTION BEGINS HERE ***
  217209             : 
  217210             :     public:
  217211             : 
  217212             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  217213             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  217214             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  217215             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  217216             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  217217             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  217218             : 
  217219             :       /*! \brief returns a string representing the class name */
  217220             :           virtual std::string class_name() const override;
  217221             : 
  217222             :       /*! \brief returns new style SageIII enum values */
  217223             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  217224             : 
  217225             :       /*! \brief static variant value */
  217226             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  217227             :        // static const VariantT static_variant = V_SgOmpCriticalStatement;
  217228             :           enum { static_variant = V_SgOmpCriticalStatement };
  217229             : 
  217230             :        /* the generated cast function */
  217231             :       /*! \brief Casts pointer from base class to derived class */
  217232             :           ROSE_DLL_API friend       SgOmpCriticalStatement* isSgOmpCriticalStatement(       SgNode * s );
  217233             : 
  217234             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  217235             :           ROSE_DLL_API friend const SgOmpCriticalStatement* isSgOmpCriticalStatement( const SgNode * s );
  217236             : 
  217237             :      // ******************************************
  217238             :      // * Memory Pool / New / Delete
  217239             :      // ******************************************
  217240             : 
  217241             :      public:
  217242             :           /// \private
  217243             :           static const unsigned pool_size; //
  217244             :           /// \private
  217245             :           static std::vector<unsigned char *> pools; //
  217246             :           /// \private
  217247             :           static SgOmpCriticalStatement * next_node; // 
  217248             : 
  217249             :           /// \private
  217250             :           static unsigned long initializeStorageClassArray(SgOmpCriticalStatementStorageClass *); //
  217251             : 
  217252             :           /// \private
  217253             :           static void clearMemoryPool(); //
  217254             :           static void deleteMemoryPool(); //
  217255             : 
  217256             :           /// \private
  217257             :           static void extendMemoryPoolForFileIO(); //
  217258             : 
  217259             :           /// \private
  217260             :           static SgOmpCriticalStatement * getPointerFromGlobalIndex(unsigned long); //
  217261             :           /// \private
  217262             :           static SgOmpCriticalStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  217263             : 
  217264             :           /// \private
  217265             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  217266             :           /// \private
  217267             :           static void resetValidFreepointers(); //
  217268             :           /// \private
  217269             :           static unsigned long getNumberOfLastValidPointer(); //
  217270             : 
  217271             : 
  217272             : #if defined(INLINE_FUNCTIONS)
  217273             :       /*! \brief returns pointer to newly allocated IR node */
  217274             :           inline void *operator new (size_t size);
  217275             : #else
  217276             :       /*! \brief returns pointer to newly allocated IR node */
  217277             :           void *operator new (size_t size);
  217278             : #endif
  217279             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  217280             :           void operator delete (void* pointer, size_t size);
  217281             : 
  217282             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  217283           0 :           void operator delete (void* pointer)
  217284             :              {
  217285             :             // This is the generated delete operator...
  217286           0 :                SgOmpCriticalStatement::operator delete (pointer,sizeof(SgOmpCriticalStatement));
  217287             :              }
  217288             : 
  217289             :       /*! \brief Returns the total number of IR nodes of this type */
  217290             :           static size_t numberOfNodes();
  217291             : 
  217292             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  217293             :           static size_t memoryUsage();
  217294             : 
  217295             :       // End of scope which started in IR nodes specific code 
  217296             :       /* */
  217297             : 
  217298             :       /* name Internal Functions
  217299             :           \brief Internal functions ... incomplete-documentation
  217300             : 
  217301             :           These functions have been made public as part of the design, but they are suggested for internal use 
  217302             :           or by particularly knowledgeable users for specialized tools or applications.
  217303             : 
  217304             :           \internal We could not make these private because they are required by user for special purposes. And 
  217305             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  217306             :          
  217307             :        */
  217308             : 
  217309             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  217310             :        // overridden in every class by *generated* implementation
  217311             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  217312             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  217313             :        // MS: 06/28/02 container of names of variables or container indices 
  217314             :        // used used in the traversal to access AST successor nodes
  217315             :        // overridden in every class by *generated* implementation
  217316             :       /*! \brief container of names of variables or container indices used used in the traversal
  217317             :           to access AST successor nodes overridden in every class by *generated* implementation */
  217318             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  217319             : 
  217320             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  217321             :        // than all the vector copies. The implementation for these functions is generated for each class.
  217322             :       /*! \brief return number of children in the traversal successor list */
  217323             :           virtual size_t get_numberOfTraversalSuccessors() override;
  217324             :       /*! \brief index-based access to traversal successors by index number */
  217325             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  217326             :       /*! \brief index-based access to traversal successors by child node */
  217327             :           virtual size_t get_childIndex(SgNode *child) override;
  217328             : 
  217329             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  217330             :        // MS: 08/16/2002 method for generating RTI information
  217331             :       /*! \brief return C++ Runtime-Time-Information */
  217332             :           virtual RTIReturnType roseRTI() override;
  217333             : #endif
  217334             :       /* */
  217335             : 
  217336             : 
  217337             : 
  217338             :       /* name Deprecated Functions
  217339             :           \brief Deprecated functions ... incomplete-documentation
  217340             : 
  217341             :           These functions have been deprecated from use.
  217342             :        */
  217343             :       /* */
  217344             : 
  217345             :       /*! returns a C style string (char*) representing the class name */
  217346             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  217347             : 
  217348             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  217349             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  217350             : #if 0
  217351             :       /*! returns old style Sage II enum values */
  217352             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  217353             :       /*! returns old style Sage II enum values */
  217354             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  217355             : #endif
  217356             :       /* */
  217357             : 
  217358             : 
  217359             : 
  217360             : 
  217361             :      public:
  217362             :       /* name Traversal Support Functions
  217363             :           \brief Traversal support functions ... incomplete-documentation
  217364             : 
  217365             :           These functions have been made public as part of the design, but they are suggested for internal use 
  217366             :           or by particularly knowledgable users for specialized tools or applications.
  217367             :        */
  217368             :       /* */
  217369             : 
  217370             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  217371             :        // (inferior to ROSE traversal mechanism, experimental).
  217372             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  217373             :        */
  217374             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  217375             : 
  217376             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  217377             :       /*! \brief support for the classic visitor pattern done in GoF */
  217378             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  217379             : 
  217380             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  217381             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  217382             :        */
  217383             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  217384             : 
  217385             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  217386             :        */
  217387             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  217388             : 
  217389             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  217390             :        // This traversal helps support internal tools that call static member functions.
  217391             :        // note: this function operates on the memory pools.
  217392             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  217393             :        */
  217394             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  217395             :       /* */
  217396             : 
  217397             : 
  217398             :      public:
  217399             :       /* name Memory Allocation Functions
  217400             :           \brief Memory allocations functions ... incomplete-documentation
  217401             : 
  217402             :           These functions have been made public as part of the design, but they are suggested for internal use 
  217403             :           or by particularly knowledgable users for specialized tools or applications.
  217404             :        */
  217405             :       /* */
  217406             : 
  217407             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  217408             : 
  217409             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  217410             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  217411             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  217412             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  217413             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  217414             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  217415             :           being used with the AST File I/O mechanism.
  217416             :        */
  217417             :           virtual bool isInMemoryPool() override;
  217418             : 
  217419             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  217420             : 
  217421             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  217422             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  217423             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  217424             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  217425             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  217426             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  217427             :           being used with the AST File I/O mechanism.
  217428             :        */
  217429             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  217430             : 
  217431             :       // DQ (4/30/2006): Modified to be a const function.
  217432             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  217433             : 
  217434             :           This functions is part of general support for many possible tools to operate 
  217435             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  217436             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  217437             :           less than the set of pointers used by the AST file I/O. This is part of
  217438             :           work implemented by Andreas, and support tools such as the AST graph generation.
  217439             : 
  217440             :           \warning This function can return unexpected data members and thus the 
  217441             :                    order and the number of elements is unpredicable and subject 
  217442             :                    to change.
  217443             : 
  217444             :           \returns STL vector of pairs of SgNode* and strings
  217445             :        */
  217446             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  217447             : 
  217448             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  217449             : 
  217450             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  217451             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  217452             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  217453             : 
  217454             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  217455             :                    and subject to change.
  217456             :        */
  217457             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  217458             : 
  217459             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  217460             : 
  217461             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  217462             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  217463             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  217464             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  217465             : 
  217466             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  217467             : 
  217468             :           \returns long
  217469             :        */
  217470             :           virtual long getChildIndex( SgNode* childNode ) const override;
  217471             : 
  217472             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  217473             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217474             :       /* \brief Constructor for use by AST File I/O Mechanism
  217475             : 
  217476             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  217477             :           which obtained via fast binary file I/O from disk.
  217478             :        */
  217479             :        // SgOmpCriticalStatement( SgOmpCriticalStatementStorageClass& source );
  217480             : 
  217481             : 
  217482             : 
  217483             : 
  217484             : 
  217485             :  // JH (10/24/2005): methods added to support the ast file IO
  217486             :     private:
  217487             : 
  217488             :       /* name AST Memory Allocation Support Functions
  217489             :           \brief Memory allocations support....
  217490             : 
  217491             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  217492             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  217493             :           and support the AST File I/O Mechanism.
  217494             :        */
  217495             :       /* */
  217496             : 
  217497             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  217498             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  217499             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  217500             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  217501             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  217502             :           a correspinding one in the AST_FILE_IO class!
  217503             :        */
  217504             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  217505             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217506             :       /* \brief Typedef used for low level memory access.
  217507             :        */
  217508             :        // typedef unsigned char* TestType;
  217509             : 
  217510             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  217511             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217512             :       /* \brief Typedef used to hold memory addresses as values.
  217513             :        */
  217514             :        // typedef unsigned long  AddressType;
  217515             : 
  217516             : 
  217517             : 
  217518             :        // necessary, to have direct access to the p_freepointer and the private methods !
  217519             :       /*! \brief friend class declaration to support AST File I/O */
  217520             :           friend class AST_FILE_IO;
  217521             : 
  217522             :       /*! \brief friend class declaration to support AST File I/O */
  217523             :           friend class SgOmpCriticalStatementStorageClass;
  217524             : 
  217525             :       /*! \brief friend class declaration to support AST File I/O */
  217526             :           friend class AstSpecificDataManagingClass;
  217527             : 
  217528             :       /*! \brief friend class declaration to support AST File I/O */
  217529             :           friend class AstSpecificDataManagingClassStorageClass;
  217530             :     public:
  217531             :       /*! \brief IR node constructor to support AST File I/O */
  217532             :           SgOmpCriticalStatement( const SgOmpCriticalStatementStorageClass& source );
  217533             : 
  217534             :  // private: // JJW hack
  217535             :        /*
  217536             :           name AST Memory Allocation Support Variables
  217537             :           Memory allocations support variables 
  217538             : 
  217539             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  217540             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  217541             :           and support the AST File I/O Mechanism.
  217542             :        */
  217543             :       /* */
  217544             : 
  217545             :     public:
  217546             : 
  217547             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  217548             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  217549             :       // virtual SgNode* addRegExpAttribute();
  217550             :       /*! \brief Support for AST matching using regular expression.
  217551             : 
  217552             :           This support is incomplete and the subject of current research to define 
  217553             :           RegEx trees to support inexact matching.
  217554             :        */
  217555             :           SgOmpCriticalStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  217556             : 
  217557             : // *** COMMON CODE SECTION ENDS HERE ***
  217558             : 
  217559             : 
  217560             : // End of memberFunctionString
  217561             : // Start of memberFunctionString
  217562             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  217563             : 
  217564             :      // the generated cast function
  217565             :      // friend ROSE_DLL_API SgOmpCriticalStatement* isSgOmpCriticalStatement ( SgNode* s );
  217566             : 
  217567             :           typedef SgUpirFieldBodyStatement base_node_type;
  217568             : 
  217569             : 
  217570             : // End of memberFunctionString
  217571             : // Start of memberFunctionString
  217572             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  217573             : 
  217574             :           void post_construction_initialization() override;
  217575             : 
  217576             : 
  217577             : // End of memberFunctionString
  217578             : 
  217579             :      public: 
  217580             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  217581             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  217582             : 
  217583             : 
  217584             :      public: 
  217585             :          virtual ~SgOmpCriticalStatement();
  217586             : 
  217587             : 
  217588             :      public: 
  217589             :          SgOmpCriticalStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL, SgName name = ""); 
  217590             :          SgOmpCriticalStatement(SgStatement* body, SgName name); 
  217591             : 
  217592             :     protected:
  217593             : // Start of memberFunctionString
  217594             : SgName p_name;
  217595             :           
  217596             : // End of memberFunctionString
  217597             : 
  217598             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpCriticalStatement>;
  217599             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpCriticalStatement, SgName,&SgOmpCriticalStatement::p_name>;
  217600             : 
  217601             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217602             : 
  217603             : 
  217604             :    };
  217605             : #endif
  217606             : 
  217607             : // postdeclarations for SgOmpCriticalStatement
  217608             : 
  217609             : /* #line 217610 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217610             : 
  217611             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  217612             : 
  217613             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217614             : 
  217615             : 
  217616             : /* #line 217617 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217617             : 
  217618             : 
  217619             : 
  217620             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217621             : 
  217622             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  217623             : //      This code is automatically generated for each 
  217624             : //      terminal and non-terminal within the defined 
  217625             : //      grammar.  There is a simple way to change the 
  217626             : //      code to fix bugs etc.  See the ROSE README file
  217627             : //      for directions.
  217628             : 
  217629             : // tps: (02/22/2010): Adding DLL export requirements
  217630             : #include "rosedll.h"
  217631             : 
  217632             : // predeclarations for SgOmpDistributeStatement
  217633             : 
  217634             : /* #line 217635 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217635             : 
  217636             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  217637             : 
  217638             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  217639             : 
  217640             : #if 1
  217641             : // Class Definition for SgOmpDistributeStatement
  217642             : class ROSE_DLL_API SgOmpDistributeStatement  : public SgUpirFieldBodyStatement
  217643             :    {
  217644             :      public:
  217645             : 
  217646             : 
  217647             : /* #line 217648 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  217648             : 
  217649             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  217650             : // Start of memberFunctionString
  217651             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  217652             : 
  217653             : // *** COMMON CODE SECTION BEGINS HERE ***
  217654             : 
  217655             :     public:
  217656             : 
  217657             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  217658             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  217659             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  217660             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  217661             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  217662             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  217663             : 
  217664             :       /*! \brief returns a string representing the class name */
  217665             :           virtual std::string class_name() const override;
  217666             : 
  217667             :       /*! \brief returns new style SageIII enum values */
  217668             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  217669             : 
  217670             :       /*! \brief static variant value */
  217671             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  217672             :        // static const VariantT static_variant = V_SgOmpDistributeStatement;
  217673             :           enum { static_variant = V_SgOmpDistributeStatement };
  217674             : 
  217675             :        /* the generated cast function */
  217676             :       /*! \brief Casts pointer from base class to derived class */
  217677             :           ROSE_DLL_API friend       SgOmpDistributeStatement* isSgOmpDistributeStatement(       SgNode * s );
  217678             : 
  217679             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  217680             :           ROSE_DLL_API friend const SgOmpDistributeStatement* isSgOmpDistributeStatement( const SgNode * s );
  217681             : 
  217682             :      // ******************************************
  217683             :      // * Memory Pool / New / Delete
  217684             :      // ******************************************
  217685             : 
  217686             :      public:
  217687             :           /// \private
  217688             :           static const unsigned pool_size; //
  217689             :           /// \private
  217690             :           static std::vector<unsigned char *> pools; //
  217691             :           /// \private
  217692             :           static SgOmpDistributeStatement * next_node; // 
  217693             : 
  217694             :           /// \private
  217695             :           static unsigned long initializeStorageClassArray(SgOmpDistributeStatementStorageClass *); //
  217696             : 
  217697             :           /// \private
  217698             :           static void clearMemoryPool(); //
  217699             :           static void deleteMemoryPool(); //
  217700             : 
  217701             :           /// \private
  217702             :           static void extendMemoryPoolForFileIO(); //
  217703             : 
  217704             :           /// \private
  217705             :           static SgOmpDistributeStatement * getPointerFromGlobalIndex(unsigned long); //
  217706             :           /// \private
  217707             :           static SgOmpDistributeStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  217708             : 
  217709             :           /// \private
  217710             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  217711             :           /// \private
  217712             :           static void resetValidFreepointers(); //
  217713             :           /// \private
  217714             :           static unsigned long getNumberOfLastValidPointer(); //
  217715             : 
  217716             : 
  217717             : #if defined(INLINE_FUNCTIONS)
  217718             :       /*! \brief returns pointer to newly allocated IR node */
  217719             :           inline void *operator new (size_t size);
  217720             : #else
  217721             :       /*! \brief returns pointer to newly allocated IR node */
  217722             :           void *operator new (size_t size);
  217723             : #endif
  217724             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  217725             :           void operator delete (void* pointer, size_t size);
  217726             : 
  217727             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  217728           0 :           void operator delete (void* pointer)
  217729             :              {
  217730             :             // This is the generated delete operator...
  217731           0 :                SgOmpDistributeStatement::operator delete (pointer,sizeof(SgOmpDistributeStatement));
  217732             :              }
  217733             : 
  217734             :       /*! \brief Returns the total number of IR nodes of this type */
  217735             :           static size_t numberOfNodes();
  217736             : 
  217737             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  217738             :           static size_t memoryUsage();
  217739             : 
  217740             :       // End of scope which started in IR nodes specific code 
  217741             :       /* */
  217742             : 
  217743             :       /* name Internal Functions
  217744             :           \brief Internal functions ... incomplete-documentation
  217745             : 
  217746             :           These functions have been made public as part of the design, but they are suggested for internal use 
  217747             :           or by particularly knowledgeable users for specialized tools or applications.
  217748             : 
  217749             :           \internal We could not make these private because they are required by user for special purposes. And 
  217750             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  217751             :          
  217752             :        */
  217753             : 
  217754             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  217755             :        // overridden in every class by *generated* implementation
  217756             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  217757             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  217758             :        // MS: 06/28/02 container of names of variables or container indices 
  217759             :        // used used in the traversal to access AST successor nodes
  217760             :        // overridden in every class by *generated* implementation
  217761             :       /*! \brief container of names of variables or container indices used used in the traversal
  217762             :           to access AST successor nodes overridden in every class by *generated* implementation */
  217763             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  217764             : 
  217765             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  217766             :        // than all the vector copies. The implementation for these functions is generated for each class.
  217767             :       /*! \brief return number of children in the traversal successor list */
  217768             :           virtual size_t get_numberOfTraversalSuccessors() override;
  217769             :       /*! \brief index-based access to traversal successors by index number */
  217770             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  217771             :       /*! \brief index-based access to traversal successors by child node */
  217772             :           virtual size_t get_childIndex(SgNode *child) override;
  217773             : 
  217774             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  217775             :        // MS: 08/16/2002 method for generating RTI information
  217776             :       /*! \brief return C++ Runtime-Time-Information */
  217777             :           virtual RTIReturnType roseRTI() override;
  217778             : #endif
  217779             :       /* */
  217780             : 
  217781             : 
  217782             : 
  217783             :       /* name Deprecated Functions
  217784             :           \brief Deprecated functions ... incomplete-documentation
  217785             : 
  217786             :           These functions have been deprecated from use.
  217787             :        */
  217788             :       /* */
  217789             : 
  217790             :       /*! returns a C style string (char*) representing the class name */
  217791             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  217792             : 
  217793             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  217794             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  217795             : #if 0
  217796             :       /*! returns old style Sage II enum values */
  217797             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  217798             :       /*! returns old style Sage II enum values */
  217799             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  217800             : #endif
  217801             :       /* */
  217802             : 
  217803             : 
  217804             : 
  217805             : 
  217806             :      public:
  217807             :       /* name Traversal Support Functions
  217808             :           \brief Traversal support functions ... incomplete-documentation
  217809             : 
  217810             :           These functions have been made public as part of the design, but they are suggested for internal use 
  217811             :           or by particularly knowledgable users for specialized tools or applications.
  217812             :        */
  217813             :       /* */
  217814             : 
  217815             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  217816             :        // (inferior to ROSE traversal mechanism, experimental).
  217817             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  217818             :        */
  217819             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  217820             : 
  217821             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  217822             :       /*! \brief support for the classic visitor pattern done in GoF */
  217823             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  217824             : 
  217825             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  217826             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  217827             :        */
  217828             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  217829             : 
  217830             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  217831             :        */
  217832             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  217833             : 
  217834             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  217835             :        // This traversal helps support internal tools that call static member functions.
  217836             :        // note: this function operates on the memory pools.
  217837             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  217838             :        */
  217839             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  217840             :       /* */
  217841             : 
  217842             : 
  217843             :      public:
  217844             :       /* name Memory Allocation Functions
  217845             :           \brief Memory allocations functions ... incomplete-documentation
  217846             : 
  217847             :           These functions have been made public as part of the design, but they are suggested for internal use 
  217848             :           or by particularly knowledgable users for specialized tools or applications.
  217849             :        */
  217850             :       /* */
  217851             : 
  217852             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  217853             : 
  217854             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  217855             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  217856             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  217857             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  217858             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  217859             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  217860             :           being used with the AST File I/O mechanism.
  217861             :        */
  217862             :           virtual bool isInMemoryPool() override;
  217863             : 
  217864             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  217865             : 
  217866             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  217867             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  217868             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  217869             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  217870             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  217871             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  217872             :           being used with the AST File I/O mechanism.
  217873             :        */
  217874             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  217875             : 
  217876             :       // DQ (4/30/2006): Modified to be a const function.
  217877             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  217878             : 
  217879             :           This functions is part of general support for many possible tools to operate 
  217880             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  217881             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  217882             :           less than the set of pointers used by the AST file I/O. This is part of
  217883             :           work implemented by Andreas, and support tools such as the AST graph generation.
  217884             : 
  217885             :           \warning This function can return unexpected data members and thus the 
  217886             :                    order and the number of elements is unpredicable and subject 
  217887             :                    to change.
  217888             : 
  217889             :           \returns STL vector of pairs of SgNode* and strings
  217890             :        */
  217891             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  217892             : 
  217893             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  217894             : 
  217895             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  217896             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  217897             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  217898             : 
  217899             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  217900             :                    and subject to change.
  217901             :        */
  217902             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  217903             : 
  217904             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  217905             : 
  217906             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  217907             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  217908             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  217909             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  217910             : 
  217911             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  217912             : 
  217913             :           \returns long
  217914             :        */
  217915             :           virtual long getChildIndex( SgNode* childNode ) const override;
  217916             : 
  217917             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  217918             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217919             :       /* \brief Constructor for use by AST File I/O Mechanism
  217920             : 
  217921             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  217922             :           which obtained via fast binary file I/O from disk.
  217923             :        */
  217924             :        // SgOmpDistributeStatement( SgOmpDistributeStatementStorageClass& source );
  217925             : 
  217926             : 
  217927             : 
  217928             : 
  217929             : 
  217930             :  // JH (10/24/2005): methods added to support the ast file IO
  217931             :     private:
  217932             : 
  217933             :       /* name AST Memory Allocation Support Functions
  217934             :           \brief Memory allocations support....
  217935             : 
  217936             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  217937             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  217938             :           and support the AST File I/O Mechanism.
  217939             :        */
  217940             :       /* */
  217941             : 
  217942             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  217943             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  217944             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  217945             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  217946             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  217947             :           a correspinding one in the AST_FILE_IO class!
  217948             :        */
  217949             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  217950             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217951             :       /* \brief Typedef used for low level memory access.
  217952             :        */
  217953             :        // typedef unsigned char* TestType;
  217954             : 
  217955             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  217956             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  217957             :       /* \brief Typedef used to hold memory addresses as values.
  217958             :        */
  217959             :        // typedef unsigned long  AddressType;
  217960             : 
  217961             : 
  217962             : 
  217963             :        // necessary, to have direct access to the p_freepointer and the private methods !
  217964             :       /*! \brief friend class declaration to support AST File I/O */
  217965             :           friend class AST_FILE_IO;
  217966             : 
  217967             :       /*! \brief friend class declaration to support AST File I/O */
  217968             :           friend class SgOmpDistributeStatementStorageClass;
  217969             : 
  217970             :       /*! \brief friend class declaration to support AST File I/O */
  217971             :           friend class AstSpecificDataManagingClass;
  217972             : 
  217973             :       /*! \brief friend class declaration to support AST File I/O */
  217974             :           friend class AstSpecificDataManagingClassStorageClass;
  217975             :     public:
  217976             :       /*! \brief IR node constructor to support AST File I/O */
  217977             :           SgOmpDistributeStatement( const SgOmpDistributeStatementStorageClass& source );
  217978             : 
  217979             :  // private: // JJW hack
  217980             :        /*
  217981             :           name AST Memory Allocation Support Variables
  217982             :           Memory allocations support variables 
  217983             : 
  217984             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  217985             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  217986             :           and support the AST File I/O Mechanism.
  217987             :        */
  217988             :       /* */
  217989             : 
  217990             :     public:
  217991             : 
  217992             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  217993             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  217994             :       // virtual SgNode* addRegExpAttribute();
  217995             :       /*! \brief Support for AST matching using regular expression.
  217996             : 
  217997             :           This support is incomplete and the subject of current research to define 
  217998             :           RegEx trees to support inexact matching.
  217999             :        */
  218000             :           SgOmpDistributeStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  218001             : 
  218002             : // *** COMMON CODE SECTION ENDS HERE ***
  218003             : 
  218004             : 
  218005             : // End of memberFunctionString
  218006             : // Start of memberFunctionString
  218007             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  218008             : 
  218009             :      // the generated cast function
  218010             :      // friend ROSE_DLL_API SgOmpDistributeStatement* isSgOmpDistributeStatement ( SgNode* s );
  218011             : 
  218012             :           typedef SgUpirFieldBodyStatement base_node_type;
  218013             : 
  218014             : 
  218015             : // End of memberFunctionString
  218016             : // Start of memberFunctionString
  218017             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  218018             : 
  218019             :           void post_construction_initialization() override;
  218020             : 
  218021             : 
  218022             : // End of memberFunctionString
  218023             : 
  218024             : 
  218025             :      public: 
  218026             :          virtual ~SgOmpDistributeStatement();
  218027             : 
  218028             : 
  218029             :      public: 
  218030             :          SgOmpDistributeStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  218031             :          SgOmpDistributeStatement(SgStatement* body); 
  218032             : 
  218033             :     protected:
  218034             : 
  218035             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDistributeStatement>;
  218036             : 
  218037             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218038             : 
  218039             : 
  218040             :    };
  218041             : #endif
  218042             : 
  218043             : // postdeclarations for SgOmpDistributeStatement
  218044             : 
  218045             : /* #line 218046 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218046             : 
  218047             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  218048             : 
  218049             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218050             : 
  218051             : 
  218052             : /* #line 218053 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218053             : 
  218054             : 
  218055             : 
  218056             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218057             : 
  218058             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  218059             : //      This code is automatically generated for each 
  218060             : //      terminal and non-terminal within the defined 
  218061             : //      grammar.  There is a simple way to change the 
  218062             : //      code to fix bugs etc.  See the ROSE README file
  218063             : //      for directions.
  218064             : 
  218065             : // tps: (02/22/2010): Adding DLL export requirements
  218066             : #include "rosedll.h"
  218067             : 
  218068             : // predeclarations for SgOmpUnrollStatement
  218069             : 
  218070             : /* #line 218071 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218071             : 
  218072             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  218073             : 
  218074             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218075             : 
  218076             : #if 1
  218077             : // Class Definition for SgOmpUnrollStatement
  218078             : class ROSE_DLL_API SgOmpUnrollStatement  : public SgUpirFieldBodyStatement
  218079             :    {
  218080             :      public:
  218081             : 
  218082             : 
  218083             : /* #line 218084 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218084             : 
  218085             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  218086             : // Start of memberFunctionString
  218087             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  218088             : 
  218089             : // *** COMMON CODE SECTION BEGINS HERE ***
  218090             : 
  218091             :     public:
  218092             : 
  218093             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  218094             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  218095             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  218096             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  218097             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  218098             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  218099             : 
  218100             :       /*! \brief returns a string representing the class name */
  218101             :           virtual std::string class_name() const override;
  218102             : 
  218103             :       /*! \brief returns new style SageIII enum values */
  218104             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  218105             : 
  218106             :       /*! \brief static variant value */
  218107             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  218108             :        // static const VariantT static_variant = V_SgOmpUnrollStatement;
  218109             :           enum { static_variant = V_SgOmpUnrollStatement };
  218110             : 
  218111             :        /* the generated cast function */
  218112             :       /*! \brief Casts pointer from base class to derived class */
  218113             :           ROSE_DLL_API friend       SgOmpUnrollStatement* isSgOmpUnrollStatement(       SgNode * s );
  218114             : 
  218115             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  218116             :           ROSE_DLL_API friend const SgOmpUnrollStatement* isSgOmpUnrollStatement( const SgNode * s );
  218117             : 
  218118             :      // ******************************************
  218119             :      // * Memory Pool / New / Delete
  218120             :      // ******************************************
  218121             : 
  218122             :      public:
  218123             :           /// \private
  218124             :           static const unsigned pool_size; //
  218125             :           /// \private
  218126             :           static std::vector<unsigned char *> pools; //
  218127             :           /// \private
  218128             :           static SgOmpUnrollStatement * next_node; // 
  218129             : 
  218130             :           /// \private
  218131             :           static unsigned long initializeStorageClassArray(SgOmpUnrollStatementStorageClass *); //
  218132             : 
  218133             :           /// \private
  218134             :           static void clearMemoryPool(); //
  218135             :           static void deleteMemoryPool(); //
  218136             : 
  218137             :           /// \private
  218138             :           static void extendMemoryPoolForFileIO(); //
  218139             : 
  218140             :           /// \private
  218141             :           static SgOmpUnrollStatement * getPointerFromGlobalIndex(unsigned long); //
  218142             :           /// \private
  218143             :           static SgOmpUnrollStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  218144             : 
  218145             :           /// \private
  218146             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  218147             :           /// \private
  218148             :           static void resetValidFreepointers(); //
  218149             :           /// \private
  218150             :           static unsigned long getNumberOfLastValidPointer(); //
  218151             : 
  218152             : 
  218153             : #if defined(INLINE_FUNCTIONS)
  218154             :       /*! \brief returns pointer to newly allocated IR node */
  218155             :           inline void *operator new (size_t size);
  218156             : #else
  218157             :       /*! \brief returns pointer to newly allocated IR node */
  218158             :           void *operator new (size_t size);
  218159             : #endif
  218160             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  218161             :           void operator delete (void* pointer, size_t size);
  218162             : 
  218163             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  218164           0 :           void operator delete (void* pointer)
  218165             :              {
  218166             :             // This is the generated delete operator...
  218167           0 :                SgOmpUnrollStatement::operator delete (pointer,sizeof(SgOmpUnrollStatement));
  218168             :              }
  218169             : 
  218170             :       /*! \brief Returns the total number of IR nodes of this type */
  218171             :           static size_t numberOfNodes();
  218172             : 
  218173             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  218174             :           static size_t memoryUsage();
  218175             : 
  218176             :       // End of scope which started in IR nodes specific code 
  218177             :       /* */
  218178             : 
  218179             :       /* name Internal Functions
  218180             :           \brief Internal functions ... incomplete-documentation
  218181             : 
  218182             :           These functions have been made public as part of the design, but they are suggested for internal use 
  218183             :           or by particularly knowledgeable users for specialized tools or applications.
  218184             : 
  218185             :           \internal We could not make these private because they are required by user for special purposes. And 
  218186             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  218187             :          
  218188             :        */
  218189             : 
  218190             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  218191             :        // overridden in every class by *generated* implementation
  218192             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  218193             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  218194             :        // MS: 06/28/02 container of names of variables or container indices 
  218195             :        // used used in the traversal to access AST successor nodes
  218196             :        // overridden in every class by *generated* implementation
  218197             :       /*! \brief container of names of variables or container indices used used in the traversal
  218198             :           to access AST successor nodes overridden in every class by *generated* implementation */
  218199             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  218200             : 
  218201             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  218202             :        // than all the vector copies. The implementation for these functions is generated for each class.
  218203             :       /*! \brief return number of children in the traversal successor list */
  218204             :           virtual size_t get_numberOfTraversalSuccessors() override;
  218205             :       /*! \brief index-based access to traversal successors by index number */
  218206             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  218207             :       /*! \brief index-based access to traversal successors by child node */
  218208             :           virtual size_t get_childIndex(SgNode *child) override;
  218209             : 
  218210             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  218211             :        // MS: 08/16/2002 method for generating RTI information
  218212             :       /*! \brief return C++ Runtime-Time-Information */
  218213             :           virtual RTIReturnType roseRTI() override;
  218214             : #endif
  218215             :       /* */
  218216             : 
  218217             : 
  218218             : 
  218219             :       /* name Deprecated Functions
  218220             :           \brief Deprecated functions ... incomplete-documentation
  218221             : 
  218222             :           These functions have been deprecated from use.
  218223             :        */
  218224             :       /* */
  218225             : 
  218226             :       /*! returns a C style string (char*) representing the class name */
  218227             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  218228             : 
  218229             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  218230             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  218231             : #if 0
  218232             :       /*! returns old style Sage II enum values */
  218233             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  218234             :       /*! returns old style Sage II enum values */
  218235             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  218236             : #endif
  218237             :       /* */
  218238             : 
  218239             : 
  218240             : 
  218241             : 
  218242             :      public:
  218243             :       /* name Traversal Support Functions
  218244             :           \brief Traversal support functions ... incomplete-documentation
  218245             : 
  218246             :           These functions have been made public as part of the design, but they are suggested for internal use 
  218247             :           or by particularly knowledgable users for specialized tools or applications.
  218248             :        */
  218249             :       /* */
  218250             : 
  218251             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  218252             :        // (inferior to ROSE traversal mechanism, experimental).
  218253             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  218254             :        */
  218255             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  218256             : 
  218257             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  218258             :       /*! \brief support for the classic visitor pattern done in GoF */
  218259             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  218260             : 
  218261             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  218262             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  218263             :        */
  218264             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  218265             : 
  218266             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  218267             :        */
  218268             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  218269             : 
  218270             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  218271             :        // This traversal helps support internal tools that call static member functions.
  218272             :        // note: this function operates on the memory pools.
  218273             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  218274             :        */
  218275             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  218276             :       /* */
  218277             : 
  218278             : 
  218279             :      public:
  218280             :       /* name Memory Allocation Functions
  218281             :           \brief Memory allocations functions ... incomplete-documentation
  218282             : 
  218283             :           These functions have been made public as part of the design, but they are suggested for internal use 
  218284             :           or by particularly knowledgable users for specialized tools or applications.
  218285             :        */
  218286             :       /* */
  218287             : 
  218288             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  218289             : 
  218290             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  218291             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  218292             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  218293             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  218294             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  218295             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  218296             :           being used with the AST File I/O mechanism.
  218297             :        */
  218298             :           virtual bool isInMemoryPool() override;
  218299             : 
  218300             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  218301             : 
  218302             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  218303             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  218304             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  218305             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  218306             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  218307             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  218308             :           being used with the AST File I/O mechanism.
  218309             :        */
  218310             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  218311             : 
  218312             :       // DQ (4/30/2006): Modified to be a const function.
  218313             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  218314             : 
  218315             :           This functions is part of general support for many possible tools to operate 
  218316             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  218317             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  218318             :           less than the set of pointers used by the AST file I/O. This is part of
  218319             :           work implemented by Andreas, and support tools such as the AST graph generation.
  218320             : 
  218321             :           \warning This function can return unexpected data members and thus the 
  218322             :                    order and the number of elements is unpredicable and subject 
  218323             :                    to change.
  218324             : 
  218325             :           \returns STL vector of pairs of SgNode* and strings
  218326             :        */
  218327             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  218328             : 
  218329             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  218330             : 
  218331             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  218332             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  218333             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  218334             : 
  218335             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  218336             :                    and subject to change.
  218337             :        */
  218338             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  218339             : 
  218340             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  218341             : 
  218342             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  218343             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  218344             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  218345             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  218346             : 
  218347             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  218348             : 
  218349             :           \returns long
  218350             :        */
  218351             :           virtual long getChildIndex( SgNode* childNode ) const override;
  218352             : 
  218353             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  218354             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  218355             :       /* \brief Constructor for use by AST File I/O Mechanism
  218356             : 
  218357             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  218358             :           which obtained via fast binary file I/O from disk.
  218359             :        */
  218360             :        // SgOmpUnrollStatement( SgOmpUnrollStatementStorageClass& source );
  218361             : 
  218362             : 
  218363             : 
  218364             : 
  218365             : 
  218366             :  // JH (10/24/2005): methods added to support the ast file IO
  218367             :     private:
  218368             : 
  218369             :       /* name AST Memory Allocation Support Functions
  218370             :           \brief Memory allocations support....
  218371             : 
  218372             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  218373             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  218374             :           and support the AST File I/O Mechanism.
  218375             :        */
  218376             :       /* */
  218377             : 
  218378             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  218379             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  218380             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  218381             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  218382             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  218383             :           a correspinding one in the AST_FILE_IO class!
  218384             :        */
  218385             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  218386             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  218387             :       /* \brief Typedef used for low level memory access.
  218388             :        */
  218389             :        // typedef unsigned char* TestType;
  218390             : 
  218391             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  218392             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  218393             :       /* \brief Typedef used to hold memory addresses as values.
  218394             :        */
  218395             :        // typedef unsigned long  AddressType;
  218396             : 
  218397             : 
  218398             : 
  218399             :        // necessary, to have direct access to the p_freepointer and the private methods !
  218400             :       /*! \brief friend class declaration to support AST File I/O */
  218401             :           friend class AST_FILE_IO;
  218402             : 
  218403             :       /*! \brief friend class declaration to support AST File I/O */
  218404             :           friend class SgOmpUnrollStatementStorageClass;
  218405             : 
  218406             :       /*! \brief friend class declaration to support AST File I/O */
  218407             :           friend class AstSpecificDataManagingClass;
  218408             : 
  218409             :       /*! \brief friend class declaration to support AST File I/O */
  218410             :           friend class AstSpecificDataManagingClassStorageClass;
  218411             :     public:
  218412             :       /*! \brief IR node constructor to support AST File I/O */
  218413             :           SgOmpUnrollStatement( const SgOmpUnrollStatementStorageClass& source );
  218414             : 
  218415             :  // private: // JJW hack
  218416             :        /*
  218417             :           name AST Memory Allocation Support Variables
  218418             :           Memory allocations support variables 
  218419             : 
  218420             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  218421             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  218422             :           and support the AST File I/O Mechanism.
  218423             :        */
  218424             :       /* */
  218425             : 
  218426             :     public:
  218427             : 
  218428             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  218429             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  218430             :       // virtual SgNode* addRegExpAttribute();
  218431             :       /*! \brief Support for AST matching using regular expression.
  218432             : 
  218433             :           This support is incomplete and the subject of current research to define 
  218434             :           RegEx trees to support inexact matching.
  218435             :        */
  218436             :           SgOmpUnrollStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  218437             : 
  218438             : // *** COMMON CODE SECTION ENDS HERE ***
  218439             : 
  218440             : 
  218441             : // End of memberFunctionString
  218442             : // Start of memberFunctionString
  218443             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  218444             : 
  218445             :      // the generated cast function
  218446             :      // friend ROSE_DLL_API SgOmpUnrollStatement* isSgOmpUnrollStatement ( SgNode* s );
  218447             : 
  218448             :           typedef SgUpirFieldBodyStatement base_node_type;
  218449             : 
  218450             : 
  218451             : // End of memberFunctionString
  218452             : // Start of memberFunctionString
  218453             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  218454             : 
  218455             :           void post_construction_initialization() override;
  218456             : 
  218457             : 
  218458             : // End of memberFunctionString
  218459             : 
  218460             : 
  218461             :      public: 
  218462             :          virtual ~SgOmpUnrollStatement();
  218463             : 
  218464             : 
  218465             :      public: 
  218466             :          SgOmpUnrollStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  218467             :          SgOmpUnrollStatement(SgStatement* body); 
  218468             : 
  218469             :     protected:
  218470             : 
  218471             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpUnrollStatement>;
  218472             : 
  218473             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218474             : 
  218475             : 
  218476             :    };
  218477             : #endif
  218478             : 
  218479             : // postdeclarations for SgOmpUnrollStatement
  218480             : 
  218481             : /* #line 218482 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218482             : 
  218483             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  218484             : 
  218485             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218486             : 
  218487             : 
  218488             : /* #line 218489 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218489             : 
  218490             : 
  218491             : 
  218492             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218493             : 
  218494             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  218495             : //      This code is automatically generated for each 
  218496             : //      terminal and non-terminal within the defined 
  218497             : //      grammar.  There is a simple way to change the 
  218498             : //      code to fix bugs etc.  See the ROSE README file
  218499             : //      for directions.
  218500             : 
  218501             : // tps: (02/22/2010): Adding DLL export requirements
  218502             : #include "rosedll.h"
  218503             : 
  218504             : // predeclarations for SgOmpTileStatement
  218505             : 
  218506             : /* #line 218507 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218507             : 
  218508             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  218509             : 
  218510             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218511             : 
  218512             : #if 1
  218513             : // Class Definition for SgOmpTileStatement
  218514             : class ROSE_DLL_API SgOmpTileStatement  : public SgUpirFieldBodyStatement
  218515             :    {
  218516             :      public:
  218517             : 
  218518             : 
  218519             : /* #line 218520 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218520             : 
  218521             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  218522             : // Start of memberFunctionString
  218523             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  218524             : 
  218525             : // *** COMMON CODE SECTION BEGINS HERE ***
  218526             : 
  218527             :     public:
  218528             : 
  218529             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  218530             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  218531             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  218532             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  218533             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  218534             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  218535             : 
  218536             :       /*! \brief returns a string representing the class name */
  218537             :           virtual std::string class_name() const override;
  218538             : 
  218539             :       /*! \brief returns new style SageIII enum values */
  218540             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  218541             : 
  218542             :       /*! \brief static variant value */
  218543             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  218544             :        // static const VariantT static_variant = V_SgOmpTileStatement;
  218545             :           enum { static_variant = V_SgOmpTileStatement };
  218546             : 
  218547             :        /* the generated cast function */
  218548             :       /*! \brief Casts pointer from base class to derived class */
  218549             :           ROSE_DLL_API friend       SgOmpTileStatement* isSgOmpTileStatement(       SgNode * s );
  218550             : 
  218551             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  218552             :           ROSE_DLL_API friend const SgOmpTileStatement* isSgOmpTileStatement( const SgNode * s );
  218553             : 
  218554             :      // ******************************************
  218555             :      // * Memory Pool / New / Delete
  218556             :      // ******************************************
  218557             : 
  218558             :      public:
  218559             :           /// \private
  218560             :           static const unsigned pool_size; //
  218561             :           /// \private
  218562             :           static std::vector<unsigned char *> pools; //
  218563             :           /// \private
  218564             :           static SgOmpTileStatement * next_node; // 
  218565             : 
  218566             :           /// \private
  218567             :           static unsigned long initializeStorageClassArray(SgOmpTileStatementStorageClass *); //
  218568             : 
  218569             :           /// \private
  218570             :           static void clearMemoryPool(); //
  218571             :           static void deleteMemoryPool(); //
  218572             : 
  218573             :           /// \private
  218574             :           static void extendMemoryPoolForFileIO(); //
  218575             : 
  218576             :           /// \private
  218577             :           static SgOmpTileStatement * getPointerFromGlobalIndex(unsigned long); //
  218578             :           /// \private
  218579             :           static SgOmpTileStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  218580             : 
  218581             :           /// \private
  218582             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  218583             :           /// \private
  218584             :           static void resetValidFreepointers(); //
  218585             :           /// \private
  218586             :           static unsigned long getNumberOfLastValidPointer(); //
  218587             : 
  218588             : 
  218589             : #if defined(INLINE_FUNCTIONS)
  218590             :       /*! \brief returns pointer to newly allocated IR node */
  218591             :           inline void *operator new (size_t size);
  218592             : #else
  218593             :       /*! \brief returns pointer to newly allocated IR node */
  218594             :           void *operator new (size_t size);
  218595             : #endif
  218596             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  218597             :           void operator delete (void* pointer, size_t size);
  218598             : 
  218599             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  218600           0 :           void operator delete (void* pointer)
  218601             :              {
  218602             :             // This is the generated delete operator...
  218603           0 :                SgOmpTileStatement::operator delete (pointer,sizeof(SgOmpTileStatement));
  218604             :              }
  218605             : 
  218606             :       /*! \brief Returns the total number of IR nodes of this type */
  218607             :           static size_t numberOfNodes();
  218608             : 
  218609             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  218610             :           static size_t memoryUsage();
  218611             : 
  218612             :       // End of scope which started in IR nodes specific code 
  218613             :       /* */
  218614             : 
  218615             :       /* name Internal Functions
  218616             :           \brief Internal functions ... incomplete-documentation
  218617             : 
  218618             :           These functions have been made public as part of the design, but they are suggested for internal use 
  218619             :           or by particularly knowledgeable users for specialized tools or applications.
  218620             : 
  218621             :           \internal We could not make these private because they are required by user for special purposes. And 
  218622             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  218623             :          
  218624             :        */
  218625             : 
  218626             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  218627             :        // overridden in every class by *generated* implementation
  218628             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  218629             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  218630             :        // MS: 06/28/02 container of names of variables or container indices 
  218631             :        // used used in the traversal to access AST successor nodes
  218632             :        // overridden in every class by *generated* implementation
  218633             :       /*! \brief container of names of variables or container indices used used in the traversal
  218634             :           to access AST successor nodes overridden in every class by *generated* implementation */
  218635             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  218636             : 
  218637             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  218638             :        // than all the vector copies. The implementation for these functions is generated for each class.
  218639             :       /*! \brief return number of children in the traversal successor list */
  218640             :           virtual size_t get_numberOfTraversalSuccessors() override;
  218641             :       /*! \brief index-based access to traversal successors by index number */
  218642             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  218643             :       /*! \brief index-based access to traversal successors by child node */
  218644             :           virtual size_t get_childIndex(SgNode *child) override;
  218645             : 
  218646             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  218647             :        // MS: 08/16/2002 method for generating RTI information
  218648             :       /*! \brief return C++ Runtime-Time-Information */
  218649             :           virtual RTIReturnType roseRTI() override;
  218650             : #endif
  218651             :       /* */
  218652             : 
  218653             : 
  218654             : 
  218655             :       /* name Deprecated Functions
  218656             :           \brief Deprecated functions ... incomplete-documentation
  218657             : 
  218658             :           These functions have been deprecated from use.
  218659             :        */
  218660             :       /* */
  218661             : 
  218662             :       /*! returns a C style string (char*) representing the class name */
  218663             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  218664             : 
  218665             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  218666             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  218667             : #if 0
  218668             :       /*! returns old style Sage II enum values */
  218669             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  218670             :       /*! returns old style Sage II enum values */
  218671             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  218672             : #endif
  218673             :       /* */
  218674             : 
  218675             : 
  218676             : 
  218677             : 
  218678             :      public:
  218679             :       /* name Traversal Support Functions
  218680             :           \brief Traversal support functions ... incomplete-documentation
  218681             : 
  218682             :           These functions have been made public as part of the design, but they are suggested for internal use 
  218683             :           or by particularly knowledgable users for specialized tools or applications.
  218684             :        */
  218685             :       /* */
  218686             : 
  218687             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  218688             :        // (inferior to ROSE traversal mechanism, experimental).
  218689             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  218690             :        */
  218691             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  218692             : 
  218693             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  218694             :       /*! \brief support for the classic visitor pattern done in GoF */
  218695             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  218696             : 
  218697             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  218698             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  218699             :        */
  218700             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  218701             : 
  218702             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  218703             :        */
  218704             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  218705             : 
  218706             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  218707             :        // This traversal helps support internal tools that call static member functions.
  218708             :        // note: this function operates on the memory pools.
  218709             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  218710             :        */
  218711             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  218712             :       /* */
  218713             : 
  218714             : 
  218715             :      public:
  218716             :       /* name Memory Allocation Functions
  218717             :           \brief Memory allocations functions ... incomplete-documentation
  218718             : 
  218719             :           These functions have been made public as part of the design, but they are suggested for internal use 
  218720             :           or by particularly knowledgable users for specialized tools or applications.
  218721             :        */
  218722             :       /* */
  218723             : 
  218724             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  218725             : 
  218726             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  218727             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  218728             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  218729             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  218730             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  218731             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  218732             :           being used with the AST File I/O mechanism.
  218733             :        */
  218734             :           virtual bool isInMemoryPool() override;
  218735             : 
  218736             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  218737             : 
  218738             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  218739             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  218740             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  218741             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  218742             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  218743             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  218744             :           being used with the AST File I/O mechanism.
  218745             :        */
  218746             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  218747             : 
  218748             :       // DQ (4/30/2006): Modified to be a const function.
  218749             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  218750             : 
  218751             :           This functions is part of general support for many possible tools to operate 
  218752             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  218753             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  218754             :           less than the set of pointers used by the AST file I/O. This is part of
  218755             :           work implemented by Andreas, and support tools such as the AST graph generation.
  218756             : 
  218757             :           \warning This function can return unexpected data members and thus the 
  218758             :                    order and the number of elements is unpredicable and subject 
  218759             :                    to change.
  218760             : 
  218761             :           \returns STL vector of pairs of SgNode* and strings
  218762             :        */
  218763             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  218764             : 
  218765             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  218766             : 
  218767             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  218768             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  218769             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  218770             : 
  218771             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  218772             :                    and subject to change.
  218773             :        */
  218774             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  218775             : 
  218776             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  218777             : 
  218778             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  218779             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  218780             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  218781             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  218782             : 
  218783             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  218784             : 
  218785             :           \returns long
  218786             :        */
  218787             :           virtual long getChildIndex( SgNode* childNode ) const override;
  218788             : 
  218789             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  218790             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  218791             :       /* \brief Constructor for use by AST File I/O Mechanism
  218792             : 
  218793             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  218794             :           which obtained via fast binary file I/O from disk.
  218795             :        */
  218796             :        // SgOmpTileStatement( SgOmpTileStatementStorageClass& source );
  218797             : 
  218798             : 
  218799             : 
  218800             : 
  218801             : 
  218802             :  // JH (10/24/2005): methods added to support the ast file IO
  218803             :     private:
  218804             : 
  218805             :       /* name AST Memory Allocation Support Functions
  218806             :           \brief Memory allocations support....
  218807             : 
  218808             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  218809             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  218810             :           and support the AST File I/O Mechanism.
  218811             :        */
  218812             :       /* */
  218813             : 
  218814             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  218815             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  218816             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  218817             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  218818             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  218819             :           a correspinding one in the AST_FILE_IO class!
  218820             :        */
  218821             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  218822             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  218823             :       /* \brief Typedef used for low level memory access.
  218824             :        */
  218825             :        // typedef unsigned char* TestType;
  218826             : 
  218827             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  218828             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  218829             :       /* \brief Typedef used to hold memory addresses as values.
  218830             :        */
  218831             :        // typedef unsigned long  AddressType;
  218832             : 
  218833             : 
  218834             : 
  218835             :        // necessary, to have direct access to the p_freepointer and the private methods !
  218836             :       /*! \brief friend class declaration to support AST File I/O */
  218837             :           friend class AST_FILE_IO;
  218838             : 
  218839             :       /*! \brief friend class declaration to support AST File I/O */
  218840             :           friend class SgOmpTileStatementStorageClass;
  218841             : 
  218842             :       /*! \brief friend class declaration to support AST File I/O */
  218843             :           friend class AstSpecificDataManagingClass;
  218844             : 
  218845             :       /*! \brief friend class declaration to support AST File I/O */
  218846             :           friend class AstSpecificDataManagingClassStorageClass;
  218847             :     public:
  218848             :       /*! \brief IR node constructor to support AST File I/O */
  218849             :           SgOmpTileStatement( const SgOmpTileStatementStorageClass& source );
  218850             : 
  218851             :  // private: // JJW hack
  218852             :        /*
  218853             :           name AST Memory Allocation Support Variables
  218854             :           Memory allocations support variables 
  218855             : 
  218856             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  218857             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  218858             :           and support the AST File I/O Mechanism.
  218859             :        */
  218860             :       /* */
  218861             : 
  218862             :     public:
  218863             : 
  218864             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  218865             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  218866             :       // virtual SgNode* addRegExpAttribute();
  218867             :       /*! \brief Support for AST matching using regular expression.
  218868             : 
  218869             :           This support is incomplete and the subject of current research to define 
  218870             :           RegEx trees to support inexact matching.
  218871             :        */
  218872             :           SgOmpTileStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  218873             : 
  218874             : // *** COMMON CODE SECTION ENDS HERE ***
  218875             : 
  218876             : 
  218877             : // End of memberFunctionString
  218878             : // Start of memberFunctionString
  218879             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  218880             : 
  218881             :      // the generated cast function
  218882             :      // friend ROSE_DLL_API SgOmpTileStatement* isSgOmpTileStatement ( SgNode* s );
  218883             : 
  218884             :           typedef SgUpirFieldBodyStatement base_node_type;
  218885             : 
  218886             : 
  218887             : // End of memberFunctionString
  218888             : // Start of memberFunctionString
  218889             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  218890             : 
  218891             :           void post_construction_initialization() override;
  218892             : 
  218893             : 
  218894             : // End of memberFunctionString
  218895             : 
  218896             : 
  218897             :      public: 
  218898             :          virtual ~SgOmpTileStatement();
  218899             : 
  218900             : 
  218901             :      public: 
  218902             :          SgOmpTileStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  218903             :          SgOmpTileStatement(SgStatement* body); 
  218904             : 
  218905             :     protected:
  218906             : 
  218907             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTileStatement>;
  218908             : 
  218909             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218910             : 
  218911             : 
  218912             :    };
  218913             : #endif
  218914             : 
  218915             : // postdeclarations for SgOmpTileStatement
  218916             : 
  218917             : /* #line 218918 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218918             : 
  218919             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  218920             : 
  218921             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218922             : 
  218923             : 
  218924             : /* #line 218925 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218925             : 
  218926             : 
  218927             : 
  218928             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218929             : 
  218930             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  218931             : //      This code is automatically generated for each 
  218932             : //      terminal and non-terminal within the defined 
  218933             : //      grammar.  There is a simple way to change the 
  218934             : //      code to fix bugs etc.  See the ROSE README file
  218935             : //      for directions.
  218936             : 
  218937             : // tps: (02/22/2010): Adding DLL export requirements
  218938             : #include "rosedll.h"
  218939             : 
  218940             : // predeclarations for SgUpirLoopStatement
  218941             : 
  218942             : /* #line 218943 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218943             : 
  218944             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  218945             : 
  218946             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  218947             : 
  218948             : #if 1
  218949             : // Class Definition for SgUpirLoopStatement
  218950             : class ROSE_DLL_API SgUpirLoopStatement  : public SgUpirFieldBodyStatement
  218951             :    {
  218952             :      public:
  218953             : 
  218954             : 
  218955             : /* #line 218956 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  218956             : 
  218957             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  218958             : // Start of memberFunctionString
  218959             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  218960             : 
  218961             : // *** COMMON CODE SECTION BEGINS HERE ***
  218962             : 
  218963             :     public:
  218964             : 
  218965             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  218966             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  218967             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  218968             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  218969             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  218970             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  218971             : 
  218972             :       /*! \brief returns a string representing the class name */
  218973             :           virtual std::string class_name() const override;
  218974             : 
  218975             :       /*! \brief returns new style SageIII enum values */
  218976             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  218977             : 
  218978             :       /*! \brief static variant value */
  218979             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  218980             :        // static const VariantT static_variant = V_SgUpirLoopStatement;
  218981             :           enum { static_variant = V_SgUpirLoopStatement };
  218982             : 
  218983             :        /* the generated cast function */
  218984             :       /*! \brief Casts pointer from base class to derived class */
  218985             :           ROSE_DLL_API friend       SgUpirLoopStatement* isSgUpirLoopStatement(       SgNode * s );
  218986             : 
  218987             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  218988             :           ROSE_DLL_API friend const SgUpirLoopStatement* isSgUpirLoopStatement( const SgNode * s );
  218989             : 
  218990             :      // ******************************************
  218991             :      // * Memory Pool / New / Delete
  218992             :      // ******************************************
  218993             : 
  218994             :      public:
  218995             :           /// \private
  218996             :           static const unsigned pool_size; //
  218997             :           /// \private
  218998             :           static std::vector<unsigned char *> pools; //
  218999             :           /// \private
  219000             :           static SgUpirLoopStatement * next_node; // 
  219001             : 
  219002             :           /// \private
  219003             :           static unsigned long initializeStorageClassArray(SgUpirLoopStatementStorageClass *); //
  219004             : 
  219005             :           /// \private
  219006             :           static void clearMemoryPool(); //
  219007             :           static void deleteMemoryPool(); //
  219008             : 
  219009             :           /// \private
  219010             :           static void extendMemoryPoolForFileIO(); //
  219011             : 
  219012             :           /// \private
  219013             :           static SgUpirLoopStatement * getPointerFromGlobalIndex(unsigned long); //
  219014             :           /// \private
  219015             :           static SgUpirLoopStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  219016             : 
  219017             :           /// \private
  219018             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  219019             :           /// \private
  219020             :           static void resetValidFreepointers(); //
  219021             :           /// \private
  219022             :           static unsigned long getNumberOfLastValidPointer(); //
  219023             : 
  219024             : 
  219025             : #if defined(INLINE_FUNCTIONS)
  219026             :       /*! \brief returns pointer to newly allocated IR node */
  219027             :           inline void *operator new (size_t size);
  219028             : #else
  219029             :       /*! \brief returns pointer to newly allocated IR node */
  219030             :           void *operator new (size_t size);
  219031             : #endif
  219032             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  219033             :           void operator delete (void* pointer, size_t size);
  219034             : 
  219035             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  219036           0 :           void operator delete (void* pointer)
  219037             :              {
  219038             :             // This is the generated delete operator...
  219039           0 :                SgUpirLoopStatement::operator delete (pointer,sizeof(SgUpirLoopStatement));
  219040             :              }
  219041             : 
  219042             :       /*! \brief Returns the total number of IR nodes of this type */
  219043             :           static size_t numberOfNodes();
  219044             : 
  219045             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  219046             :           static size_t memoryUsage();
  219047             : 
  219048             :       // End of scope which started in IR nodes specific code 
  219049             :       /* */
  219050             : 
  219051             :       /* name Internal Functions
  219052             :           \brief Internal functions ... incomplete-documentation
  219053             : 
  219054             :           These functions have been made public as part of the design, but they are suggested for internal use 
  219055             :           or by particularly knowledgeable users for specialized tools or applications.
  219056             : 
  219057             :           \internal We could not make these private because they are required by user for special purposes. And 
  219058             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  219059             :          
  219060             :        */
  219061             : 
  219062             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  219063             :        // overridden in every class by *generated* implementation
  219064             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  219065             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  219066             :        // MS: 06/28/02 container of names of variables or container indices 
  219067             :        // used used in the traversal to access AST successor nodes
  219068             :        // overridden in every class by *generated* implementation
  219069             :       /*! \brief container of names of variables or container indices used used in the traversal
  219070             :           to access AST successor nodes overridden in every class by *generated* implementation */
  219071             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  219072             : 
  219073             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  219074             :        // than all the vector copies. The implementation for these functions is generated for each class.
  219075             :       /*! \brief return number of children in the traversal successor list */
  219076             :           virtual size_t get_numberOfTraversalSuccessors() override;
  219077             :       /*! \brief index-based access to traversal successors by index number */
  219078             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  219079             :       /*! \brief index-based access to traversal successors by child node */
  219080             :           virtual size_t get_childIndex(SgNode *child) override;
  219081             : 
  219082             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  219083             :        // MS: 08/16/2002 method for generating RTI information
  219084             :       /*! \brief return C++ Runtime-Time-Information */
  219085             :           virtual RTIReturnType roseRTI() override;
  219086             : #endif
  219087             :       /* */
  219088             : 
  219089             : 
  219090             : 
  219091             :       /* name Deprecated Functions
  219092             :           \brief Deprecated functions ... incomplete-documentation
  219093             : 
  219094             :           These functions have been deprecated from use.
  219095             :        */
  219096             :       /* */
  219097             : 
  219098             :       /*! returns a C style string (char*) representing the class name */
  219099             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  219100             : 
  219101             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  219102             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  219103             : #if 0
  219104             :       /*! returns old style Sage II enum values */
  219105             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  219106             :       /*! returns old style Sage II enum values */
  219107             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  219108             : #endif
  219109             :       /* */
  219110             : 
  219111             : 
  219112             : 
  219113             : 
  219114             :      public:
  219115             :       /* name Traversal Support Functions
  219116             :           \brief Traversal support functions ... incomplete-documentation
  219117             : 
  219118             :           These functions have been made public as part of the design, but they are suggested for internal use 
  219119             :           or by particularly knowledgable users for specialized tools or applications.
  219120             :        */
  219121             :       /* */
  219122             : 
  219123             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  219124             :        // (inferior to ROSE traversal mechanism, experimental).
  219125             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  219126             :        */
  219127             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  219128             : 
  219129             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  219130             :       /*! \brief support for the classic visitor pattern done in GoF */
  219131             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  219132             : 
  219133             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  219134             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  219135             :        */
  219136             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  219137             : 
  219138             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  219139             :        */
  219140             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  219141             : 
  219142             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  219143             :        // This traversal helps support internal tools that call static member functions.
  219144             :        // note: this function operates on the memory pools.
  219145             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  219146             :        */
  219147             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  219148             :       /* */
  219149             : 
  219150             : 
  219151             :      public:
  219152             :       /* name Memory Allocation Functions
  219153             :           \brief Memory allocations functions ... incomplete-documentation
  219154             : 
  219155             :           These functions have been made public as part of the design, but they are suggested for internal use 
  219156             :           or by particularly knowledgable users for specialized tools or applications.
  219157             :        */
  219158             :       /* */
  219159             : 
  219160             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  219161             : 
  219162             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  219163             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  219164             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  219165             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  219166             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  219167             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  219168             :           being used with the AST File I/O mechanism.
  219169             :        */
  219170             :           virtual bool isInMemoryPool() override;
  219171             : 
  219172             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  219173             : 
  219174             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  219175             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  219176             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  219177             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  219178             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  219179             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  219180             :           being used with the AST File I/O mechanism.
  219181             :        */
  219182             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  219183             : 
  219184             :       // DQ (4/30/2006): Modified to be a const function.
  219185             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  219186             : 
  219187             :           This functions is part of general support for many possible tools to operate 
  219188             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  219189             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  219190             :           less than the set of pointers used by the AST file I/O. This is part of
  219191             :           work implemented by Andreas, and support tools such as the AST graph generation.
  219192             : 
  219193             :           \warning This function can return unexpected data members and thus the 
  219194             :                    order and the number of elements is unpredicable and subject 
  219195             :                    to change.
  219196             : 
  219197             :           \returns STL vector of pairs of SgNode* and strings
  219198             :        */
  219199             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  219200             : 
  219201             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  219202             : 
  219203             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  219204             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  219205             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  219206             : 
  219207             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  219208             :                    and subject to change.
  219209             :        */
  219210             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  219211             : 
  219212             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  219213             : 
  219214             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  219215             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  219216             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  219217             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  219218             : 
  219219             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  219220             : 
  219221             :           \returns long
  219222             :        */
  219223             :           virtual long getChildIndex( SgNode* childNode ) const override;
  219224             : 
  219225             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  219226             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  219227             :       /* \brief Constructor for use by AST File I/O Mechanism
  219228             : 
  219229             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  219230             :           which obtained via fast binary file I/O from disk.
  219231             :        */
  219232             :        // SgUpirLoopStatement( SgUpirLoopStatementStorageClass& source );
  219233             : 
  219234             : 
  219235             : 
  219236             : 
  219237             : 
  219238             :  // JH (10/24/2005): methods added to support the ast file IO
  219239             :     private:
  219240             : 
  219241             :       /* name AST Memory Allocation Support Functions
  219242             :           \brief Memory allocations support....
  219243             : 
  219244             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  219245             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  219246             :           and support the AST File I/O Mechanism.
  219247             :        */
  219248             :       /* */
  219249             : 
  219250             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  219251             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  219252             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  219253             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  219254             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  219255             :           a correspinding one in the AST_FILE_IO class!
  219256             :        */
  219257             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  219258             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  219259             :       /* \brief Typedef used for low level memory access.
  219260             :        */
  219261             :        // typedef unsigned char* TestType;
  219262             : 
  219263             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  219264             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  219265             :       /* \brief Typedef used to hold memory addresses as values.
  219266             :        */
  219267             :        // typedef unsigned long  AddressType;
  219268             : 
  219269             : 
  219270             : 
  219271             :        // necessary, to have direct access to the p_freepointer and the private methods !
  219272             :       /*! \brief friend class declaration to support AST File I/O */
  219273             :           friend class AST_FILE_IO;
  219274             : 
  219275             :       /*! \brief friend class declaration to support AST File I/O */
  219276             :           friend class SgUpirLoopStatementStorageClass;
  219277             : 
  219278             :       /*! \brief friend class declaration to support AST File I/O */
  219279             :           friend class AstSpecificDataManagingClass;
  219280             : 
  219281             :       /*! \brief friend class declaration to support AST File I/O */
  219282             :           friend class AstSpecificDataManagingClassStorageClass;
  219283             :     public:
  219284             :       /*! \brief IR node constructor to support AST File I/O */
  219285             :           SgUpirLoopStatement( const SgUpirLoopStatementStorageClass& source );
  219286             : 
  219287             :  // private: // JJW hack
  219288             :        /*
  219289             :           name AST Memory Allocation Support Variables
  219290             :           Memory allocations support variables 
  219291             : 
  219292             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  219293             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  219294             :           and support the AST File I/O Mechanism.
  219295             :        */
  219296             :       /* */
  219297             : 
  219298             :     public:
  219299             : 
  219300             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  219301             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  219302             :       // virtual SgNode* addRegExpAttribute();
  219303             :       /*! \brief Support for AST matching using regular expression.
  219304             : 
  219305             :           This support is incomplete and the subject of current research to define 
  219306             :           RegEx trees to support inexact matching.
  219307             :        */
  219308             :           SgUpirLoopStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  219309             : 
  219310             : // *** COMMON CODE SECTION ENDS HERE ***
  219311             : 
  219312             : 
  219313             : // End of memberFunctionString
  219314             : // Start of memberFunctionString
  219315             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  219316             : 
  219317             :      // the generated cast function
  219318             :      // friend ROSE_DLL_API SgUpirLoopStatement* isSgUpirLoopStatement ( SgNode* s );
  219319             : 
  219320             :           typedef SgUpirFieldBodyStatement base_node_type;
  219321             : 
  219322             : 
  219323             : // End of memberFunctionString
  219324             : // Start of memberFunctionString
  219325             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  219326             : 
  219327             :           void post_construction_initialization() override;
  219328             : 
  219329             : 
  219330             : // End of memberFunctionString
  219331             : 
  219332             :      public: 
  219333             :          SgInitializedName* get_induction() const;
  219334             :          void set_induction(SgInitializedName* induction);
  219335             : 
  219336             :      public: 
  219337             :          SgExpression* get_lower_bound() const;
  219338             :          void set_lower_bound(SgExpression* lower_bound);
  219339             : 
  219340             :      public: 
  219341             :          SgExpression* get_upper_bound() const;
  219342             :          void set_upper_bound(SgExpression* upper_bound);
  219343             : 
  219344             :      public: 
  219345             :          SgExpression* get_step() const;
  219346             :          void set_step(SgExpression* step);
  219347             : 
  219348             :      public: 
  219349             :          bool get_incremental() const;
  219350             :          void set_incremental(bool incremental);
  219351             : 
  219352             : 
  219353             :      public: 
  219354             :          virtual ~SgUpirLoopStatement();
  219355             : 
  219356             : 
  219357             :      public: 
  219358             :          SgUpirLoopStatement(Sg_File_Info* startOfConstruct , SgStatement* body = NULL); 
  219359             :          SgUpirLoopStatement(SgStatement* body); 
  219360             : 
  219361             :     protected:
  219362             : // Start of memberFunctionString
  219363             : SgInitializedName* p_induction;
  219364             :           
  219365             : // End of memberFunctionString
  219366             : // Start of memberFunctionString
  219367             : SgExpression* p_lower_bound;
  219368             :           
  219369             : // End of memberFunctionString
  219370             : // Start of memberFunctionString
  219371             : SgExpression* p_upper_bound;
  219372             :           
  219373             : // End of memberFunctionString
  219374             : // Start of memberFunctionString
  219375             : SgExpression* p_step;
  219376             :           
  219377             : // End of memberFunctionString
  219378             : // Start of memberFunctionString
  219379             : bool p_incremental;
  219380             :           
  219381             : // End of memberFunctionString
  219382             : 
  219383             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirLoopStatement>;
  219384             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopStatement, SgInitializedName*,&SgUpirLoopStatement::p_induction>;
  219385             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopStatement, SgExpression*,&SgUpirLoopStatement::p_lower_bound>;
  219386             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopStatement, SgExpression*,&SgUpirLoopStatement::p_upper_bound>;
  219387             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopStatement, SgExpression*,&SgUpirLoopStatement::p_step>;
  219388             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopStatement, bool,&SgUpirLoopStatement::p_incremental>;
  219389             : 
  219390             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219391             : 
  219392             : 
  219393             :    };
  219394             : #endif
  219395             : 
  219396             : // postdeclarations for SgUpirLoopStatement
  219397             : 
  219398             : /* #line 219399 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219399             : 
  219400             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  219401             : 
  219402             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219403             : 
  219404             : 
  219405             : /* #line 219406 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219406             : 
  219407             : 
  219408             : 
  219409             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219410             : 
  219411             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  219412             : //      This code is automatically generated for each 
  219413             : //      terminal and non-terminal within the defined 
  219414             : //      grammar.  There is a simple way to change the 
  219415             : //      code to fix bugs etc.  See the ROSE README file
  219416             : //      for directions.
  219417             : 
  219418             : // tps: (02/22/2010): Adding DLL export requirements
  219419             : #include "rosedll.h"
  219420             : 
  219421             : // predeclarations for SgUpirFieldStatement
  219422             : 
  219423             : /* #line 219424 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219424             : 
  219425             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  219426             : 
  219427             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219428             : 
  219429             : #if 1
  219430             : // Class Definition for SgUpirFieldStatement
  219431             : class ROSE_DLL_API SgUpirFieldStatement  : public SgUpirBaseStatement
  219432             :    {
  219433             :      public:
  219434             : 
  219435             : 
  219436             : /* #line 219437 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219437             : 
  219438             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  219439             : // Start of memberFunctionString
  219440             : /* #line 19514 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  219441             : 
  219442             : 
  219443             : 
  219444             : // End of memberFunctionString
  219445             : // Start of memberFunctionString
  219446             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  219447             : 
  219448             : // *** COMMON CODE SECTION BEGINS HERE ***
  219449             : 
  219450             :     public:
  219451             : 
  219452             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  219453             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  219454             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  219455             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  219456             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  219457             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  219458             : 
  219459             :       /*! \brief returns a string representing the class name */
  219460             :           virtual std::string class_name() const override;
  219461             : 
  219462             :       /*! \brief returns new style SageIII enum values */
  219463             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  219464             : 
  219465             :       /*! \brief static variant value */
  219466             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  219467             :        // static const VariantT static_variant = V_SgUpirFieldStatement;
  219468             :           enum { static_variant = V_SgUpirFieldStatement };
  219469             : 
  219470             :        /* the generated cast function */
  219471             :       /*! \brief Casts pointer from base class to derived class */
  219472             :           ROSE_DLL_API friend       SgUpirFieldStatement* isSgUpirFieldStatement(       SgNode * s );
  219473             : 
  219474             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  219475             :           ROSE_DLL_API friend const SgUpirFieldStatement* isSgUpirFieldStatement( const SgNode * s );
  219476             : 
  219477             :      // ******************************************
  219478             :      // * Memory Pool / New / Delete
  219479             :      // ******************************************
  219480             : 
  219481             :      public:
  219482             :           /// \private
  219483             :           static const unsigned pool_size; //
  219484             :           /// \private
  219485             :           static std::vector<unsigned char *> pools; //
  219486             :           /// \private
  219487             :           static SgUpirFieldStatement * next_node; // 
  219488             : 
  219489             :           /// \private
  219490             :           static unsigned long initializeStorageClassArray(SgUpirFieldStatementStorageClass *); //
  219491             : 
  219492             :           /// \private
  219493             :           static void clearMemoryPool(); //
  219494             :           static void deleteMemoryPool(); //
  219495             : 
  219496             :           /// \private
  219497             :           static void extendMemoryPoolForFileIO(); //
  219498             : 
  219499             :           /// \private
  219500             :           static SgUpirFieldStatement * getPointerFromGlobalIndex(unsigned long); //
  219501             :           /// \private
  219502             :           static SgUpirFieldStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  219503             : 
  219504             :           /// \private
  219505             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  219506             :           /// \private
  219507             :           static void resetValidFreepointers(); //
  219508             :           /// \private
  219509             :           static unsigned long getNumberOfLastValidPointer(); //
  219510             : 
  219511             : 
  219512             : #if defined(INLINE_FUNCTIONS)
  219513             :       /*! \brief returns pointer to newly allocated IR node */
  219514             :           inline void *operator new (size_t size);
  219515             : #else
  219516             :       /*! \brief returns pointer to newly allocated IR node */
  219517             :           void *operator new (size_t size);
  219518             : #endif
  219519             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  219520             :           void operator delete (void* pointer, size_t size);
  219521             : 
  219522             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  219523           0 :           void operator delete (void* pointer)
  219524             :              {
  219525             :             // This is the generated delete operator...
  219526           0 :                SgUpirFieldStatement::operator delete (pointer,sizeof(SgUpirFieldStatement));
  219527             :              }
  219528             : 
  219529             :       /*! \brief Returns the total number of IR nodes of this type */
  219530             :           static size_t numberOfNodes();
  219531             : 
  219532             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  219533             :           static size_t memoryUsage();
  219534             : 
  219535             :       // End of scope which started in IR nodes specific code 
  219536             :       /* */
  219537             : 
  219538             :       /* name Internal Functions
  219539             :           \brief Internal functions ... incomplete-documentation
  219540             : 
  219541             :           These functions have been made public as part of the design, but they are suggested for internal use 
  219542             :           or by particularly knowledgeable users for specialized tools or applications.
  219543             : 
  219544             :           \internal We could not make these private because they are required by user for special purposes. And 
  219545             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  219546             :          
  219547             :        */
  219548             : 
  219549             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  219550             :        // overridden in every class by *generated* implementation
  219551             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  219552             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  219553             :        // MS: 06/28/02 container of names of variables or container indices 
  219554             :        // used used in the traversal to access AST successor nodes
  219555             :        // overridden in every class by *generated* implementation
  219556             :       /*! \brief container of names of variables or container indices used used in the traversal
  219557             :           to access AST successor nodes overridden in every class by *generated* implementation */
  219558             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  219559             : 
  219560             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  219561             :        // than all the vector copies. The implementation for these functions is generated for each class.
  219562             :       /*! \brief return number of children in the traversal successor list */
  219563             :           virtual size_t get_numberOfTraversalSuccessors() override;
  219564             :       /*! \brief index-based access to traversal successors by index number */
  219565             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  219566             :       /*! \brief index-based access to traversal successors by child node */
  219567             :           virtual size_t get_childIndex(SgNode *child) override;
  219568             : 
  219569             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  219570             :        // MS: 08/16/2002 method for generating RTI information
  219571             :       /*! \brief return C++ Runtime-Time-Information */
  219572             :           virtual RTIReturnType roseRTI() override;
  219573             : #endif
  219574             :       /* */
  219575             : 
  219576             : 
  219577             : 
  219578             :       /* name Deprecated Functions
  219579             :           \brief Deprecated functions ... incomplete-documentation
  219580             : 
  219581             :           These functions have been deprecated from use.
  219582             :        */
  219583             :       /* */
  219584             : 
  219585             :       /*! returns a C style string (char*) representing the class name */
  219586             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  219587             : 
  219588             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  219589             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  219590             : #if 0
  219591             :       /*! returns old style Sage II enum values */
  219592             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  219593             :       /*! returns old style Sage II enum values */
  219594             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  219595             : #endif
  219596             :       /* */
  219597             : 
  219598             : 
  219599             : 
  219600             : 
  219601             :      public:
  219602             :       /* name Traversal Support Functions
  219603             :           \brief Traversal support functions ... incomplete-documentation
  219604             : 
  219605             :           These functions have been made public as part of the design, but they are suggested for internal use 
  219606             :           or by particularly knowledgable users for specialized tools or applications.
  219607             :        */
  219608             :       /* */
  219609             : 
  219610             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  219611             :        // (inferior to ROSE traversal mechanism, experimental).
  219612             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  219613             :        */
  219614             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  219615             : 
  219616             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  219617             :       /*! \brief support for the classic visitor pattern done in GoF */
  219618             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  219619             : 
  219620             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  219621             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  219622             :        */
  219623             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  219624             : 
  219625             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  219626             :        */
  219627             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  219628             : 
  219629             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  219630             :        // This traversal helps support internal tools that call static member functions.
  219631             :        // note: this function operates on the memory pools.
  219632             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  219633             :        */
  219634             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  219635             :       /* */
  219636             : 
  219637             : 
  219638             :      public:
  219639             :       /* name Memory Allocation Functions
  219640             :           \brief Memory allocations functions ... incomplete-documentation
  219641             : 
  219642             :           These functions have been made public as part of the design, but they are suggested for internal use 
  219643             :           or by particularly knowledgable users for specialized tools or applications.
  219644             :        */
  219645             :       /* */
  219646             : 
  219647             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  219648             : 
  219649             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  219650             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  219651             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  219652             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  219653             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  219654             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  219655             :           being used with the AST File I/O mechanism.
  219656             :        */
  219657             :           virtual bool isInMemoryPool() override;
  219658             : 
  219659             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  219660             : 
  219661             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  219662             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  219663             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  219664             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  219665             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  219666             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  219667             :           being used with the AST File I/O mechanism.
  219668             :        */
  219669             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  219670             : 
  219671             :       // DQ (4/30/2006): Modified to be a const function.
  219672             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  219673             : 
  219674             :           This functions is part of general support for many possible tools to operate 
  219675             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  219676             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  219677             :           less than the set of pointers used by the AST file I/O. This is part of
  219678             :           work implemented by Andreas, and support tools such as the AST graph generation.
  219679             : 
  219680             :           \warning This function can return unexpected data members and thus the 
  219681             :                    order and the number of elements is unpredicable and subject 
  219682             :                    to change.
  219683             : 
  219684             :           \returns STL vector of pairs of SgNode* and strings
  219685             :        */
  219686             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  219687             : 
  219688             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  219689             : 
  219690             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  219691             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  219692             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  219693             : 
  219694             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  219695             :                    and subject to change.
  219696             :        */
  219697             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  219698             : 
  219699             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  219700             : 
  219701             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  219702             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  219703             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  219704             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  219705             : 
  219706             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  219707             : 
  219708             :           \returns long
  219709             :        */
  219710             :           virtual long getChildIndex( SgNode* childNode ) const override;
  219711             : 
  219712             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  219713             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  219714             :       /* \brief Constructor for use by AST File I/O Mechanism
  219715             : 
  219716             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  219717             :           which obtained via fast binary file I/O from disk.
  219718             :        */
  219719             :        // SgUpirFieldStatement( SgUpirFieldStatementStorageClass& source );
  219720             : 
  219721             : 
  219722             : 
  219723             : 
  219724             : 
  219725             :  // JH (10/24/2005): methods added to support the ast file IO
  219726             :     private:
  219727             : 
  219728             :       /* name AST Memory Allocation Support Functions
  219729             :           \brief Memory allocations support....
  219730             : 
  219731             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  219732             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  219733             :           and support the AST File I/O Mechanism.
  219734             :        */
  219735             :       /* */
  219736             : 
  219737             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  219738             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  219739             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  219740             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  219741             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  219742             :           a correspinding one in the AST_FILE_IO class!
  219743             :        */
  219744             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  219745             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  219746             :       /* \brief Typedef used for low level memory access.
  219747             :        */
  219748             :        // typedef unsigned char* TestType;
  219749             : 
  219750             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  219751             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  219752             :       /* \brief Typedef used to hold memory addresses as values.
  219753             :        */
  219754             :        // typedef unsigned long  AddressType;
  219755             : 
  219756             : 
  219757             : 
  219758             :        // necessary, to have direct access to the p_freepointer and the private methods !
  219759             :       /*! \brief friend class declaration to support AST File I/O */
  219760             :           friend class AST_FILE_IO;
  219761             : 
  219762             :       /*! \brief friend class declaration to support AST File I/O */
  219763             :           friend class SgUpirFieldStatementStorageClass;
  219764             : 
  219765             :       /*! \brief friend class declaration to support AST File I/O */
  219766             :           friend class AstSpecificDataManagingClass;
  219767             : 
  219768             :       /*! \brief friend class declaration to support AST File I/O */
  219769             :           friend class AstSpecificDataManagingClassStorageClass;
  219770             :     public:
  219771             :       /*! \brief IR node constructor to support AST File I/O */
  219772             :           SgUpirFieldStatement( const SgUpirFieldStatementStorageClass& source );
  219773             : 
  219774             :  // private: // JJW hack
  219775             :        /*
  219776             :           name AST Memory Allocation Support Variables
  219777             :           Memory allocations support variables 
  219778             : 
  219779             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  219780             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  219781             :           and support the AST File I/O Mechanism.
  219782             :        */
  219783             :       /* */
  219784             : 
  219785             :     public:
  219786             : 
  219787             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  219788             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  219789             :       // virtual SgNode* addRegExpAttribute();
  219790             :       /*! \brief Support for AST matching using regular expression.
  219791             : 
  219792             :           This support is incomplete and the subject of current research to define 
  219793             :           RegEx trees to support inexact matching.
  219794             :        */
  219795             :           SgUpirFieldStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  219796             : 
  219797             : // *** COMMON CODE SECTION ENDS HERE ***
  219798             : 
  219799             : 
  219800             : // End of memberFunctionString
  219801             : // Start of memberFunctionString
  219802             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  219803             : 
  219804             :      // the generated cast function
  219805             :      // friend ROSE_DLL_API SgUpirFieldStatement* isSgUpirFieldStatement ( SgNode* s );
  219806             : 
  219807             :           typedef SgUpirBaseStatement base_node_type;
  219808             : 
  219809             : 
  219810             : // End of memberFunctionString
  219811             : // Start of memberFunctionString
  219812             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  219813             : 
  219814             :           void post_construction_initialization() override;
  219815             : 
  219816             : 
  219817             : // End of memberFunctionString
  219818             : 
  219819             :      public: 
  219820             :          const SgOmpClausePtrList&  get_clauses() const;
  219821             :          SgOmpClausePtrList& get_clauses(); 
  219822             : 
  219823             : 
  219824             :      public: 
  219825             :          virtual ~SgUpirFieldStatement();
  219826             : 
  219827             : 
  219828             :      public: 
  219829             :          SgUpirFieldStatement(Sg_File_Info* startOfConstruct ); 
  219830             :          SgUpirFieldStatement(); 
  219831             : 
  219832             :     protected:
  219833             : // Start of memberFunctionString
  219834             : SgOmpClausePtrList p_clauses;
  219835             :           
  219836             : // End of memberFunctionString
  219837             : 
  219838             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirFieldStatement>;
  219839             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirFieldStatement, SgOmpClausePtrList,&SgUpirFieldStatement::p_clauses>;
  219840             : 
  219841             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219842             : 
  219843             : 
  219844             :    };
  219845             : #endif
  219846             : 
  219847             : // postdeclarations for SgUpirFieldStatement
  219848             : 
  219849             : /* #line 219850 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219850             : 
  219851             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  219852             : 
  219853             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219854             : 
  219855             : 
  219856             : /* #line 219857 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219857             : 
  219858             : 
  219859             : 
  219860             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219861             : 
  219862             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  219863             : //      This code is automatically generated for each 
  219864             : //      terminal and non-terminal within the defined 
  219865             : //      grammar.  There is a simple way to change the 
  219866             : //      code to fix bugs etc.  See the ROSE README file
  219867             : //      for directions.
  219868             : 
  219869             : // tps: (02/22/2010): Adding DLL export requirements
  219870             : #include "rosedll.h"
  219871             : 
  219872             : // predeclarations for SgOmpCancelStatement
  219873             : 
  219874             : /* #line 219875 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219875             : 
  219876             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  219877             : 
  219878             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  219879             : 
  219880             : #if 1
  219881             : // Class Definition for SgOmpCancelStatement
  219882             : class ROSE_DLL_API SgOmpCancelStatement  : public SgUpirFieldStatement
  219883             :    {
  219884             :      public:
  219885             : 
  219886             : 
  219887             : /* #line 219888 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  219888             : 
  219889             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  219890             : // Start of memberFunctionString
  219891             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  219892             : 
  219893             : // *** COMMON CODE SECTION BEGINS HERE ***
  219894             : 
  219895             :     public:
  219896             : 
  219897             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  219898             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  219899             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  219900             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  219901             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  219902             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  219903             : 
  219904             :       /*! \brief returns a string representing the class name */
  219905             :           virtual std::string class_name() const override;
  219906             : 
  219907             :       /*! \brief returns new style SageIII enum values */
  219908             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  219909             : 
  219910             :       /*! \brief static variant value */
  219911             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  219912             :        // static const VariantT static_variant = V_SgOmpCancelStatement;
  219913             :           enum { static_variant = V_SgOmpCancelStatement };
  219914             : 
  219915             :        /* the generated cast function */
  219916             :       /*! \brief Casts pointer from base class to derived class */
  219917             :           ROSE_DLL_API friend       SgOmpCancelStatement* isSgOmpCancelStatement(       SgNode * s );
  219918             : 
  219919             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  219920             :           ROSE_DLL_API friend const SgOmpCancelStatement* isSgOmpCancelStatement( const SgNode * s );
  219921             : 
  219922             :      // ******************************************
  219923             :      // * Memory Pool / New / Delete
  219924             :      // ******************************************
  219925             : 
  219926             :      public:
  219927             :           /// \private
  219928             :           static const unsigned pool_size; //
  219929             :           /// \private
  219930             :           static std::vector<unsigned char *> pools; //
  219931             :           /// \private
  219932             :           static SgOmpCancelStatement * next_node; // 
  219933             : 
  219934             :           /// \private
  219935             :           static unsigned long initializeStorageClassArray(SgOmpCancelStatementStorageClass *); //
  219936             : 
  219937             :           /// \private
  219938             :           static void clearMemoryPool(); //
  219939             :           static void deleteMemoryPool(); //
  219940             : 
  219941             :           /// \private
  219942             :           static void extendMemoryPoolForFileIO(); //
  219943             : 
  219944             :           /// \private
  219945             :           static SgOmpCancelStatement * getPointerFromGlobalIndex(unsigned long); //
  219946             :           /// \private
  219947             :           static SgOmpCancelStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  219948             : 
  219949             :           /// \private
  219950             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  219951             :           /// \private
  219952             :           static void resetValidFreepointers(); //
  219953             :           /// \private
  219954             :           static unsigned long getNumberOfLastValidPointer(); //
  219955             : 
  219956             : 
  219957             : #if defined(INLINE_FUNCTIONS)
  219958             :       /*! \brief returns pointer to newly allocated IR node */
  219959             :           inline void *operator new (size_t size);
  219960             : #else
  219961             :       /*! \brief returns pointer to newly allocated IR node */
  219962             :           void *operator new (size_t size);
  219963             : #endif
  219964             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  219965             :           void operator delete (void* pointer, size_t size);
  219966             : 
  219967             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  219968           0 :           void operator delete (void* pointer)
  219969             :              {
  219970             :             // This is the generated delete operator...
  219971           0 :                SgOmpCancelStatement::operator delete (pointer,sizeof(SgOmpCancelStatement));
  219972             :              }
  219973             : 
  219974             :       /*! \brief Returns the total number of IR nodes of this type */
  219975             :           static size_t numberOfNodes();
  219976             : 
  219977             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  219978             :           static size_t memoryUsage();
  219979             : 
  219980             :       // End of scope which started in IR nodes specific code 
  219981             :       /* */
  219982             : 
  219983             :       /* name Internal Functions
  219984             :           \brief Internal functions ... incomplete-documentation
  219985             : 
  219986             :           These functions have been made public as part of the design, but they are suggested for internal use 
  219987             :           or by particularly knowledgeable users for specialized tools or applications.
  219988             : 
  219989             :           \internal We could not make these private because they are required by user for special purposes. And 
  219990             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  219991             :          
  219992             :        */
  219993             : 
  219994             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  219995             :        // overridden in every class by *generated* implementation
  219996             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  219997             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  219998             :        // MS: 06/28/02 container of names of variables or container indices 
  219999             :        // used used in the traversal to access AST successor nodes
  220000             :        // overridden in every class by *generated* implementation
  220001             :       /*! \brief container of names of variables or container indices used used in the traversal
  220002             :           to access AST successor nodes overridden in every class by *generated* implementation */
  220003             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  220004             : 
  220005             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  220006             :        // than all the vector copies. The implementation for these functions is generated for each class.
  220007             :       /*! \brief return number of children in the traversal successor list */
  220008             :           virtual size_t get_numberOfTraversalSuccessors() override;
  220009             :       /*! \brief index-based access to traversal successors by index number */
  220010             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  220011             :       /*! \brief index-based access to traversal successors by child node */
  220012             :           virtual size_t get_childIndex(SgNode *child) override;
  220013             : 
  220014             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  220015             :        // MS: 08/16/2002 method for generating RTI information
  220016             :       /*! \brief return C++ Runtime-Time-Information */
  220017             :           virtual RTIReturnType roseRTI() override;
  220018             : #endif
  220019             :       /* */
  220020             : 
  220021             : 
  220022             : 
  220023             :       /* name Deprecated Functions
  220024             :           \brief Deprecated functions ... incomplete-documentation
  220025             : 
  220026             :           These functions have been deprecated from use.
  220027             :        */
  220028             :       /* */
  220029             : 
  220030             :       /*! returns a C style string (char*) representing the class name */
  220031             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  220032             : 
  220033             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  220034             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  220035             : #if 0
  220036             :       /*! returns old style Sage II enum values */
  220037             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  220038             :       /*! returns old style Sage II enum values */
  220039             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  220040             : #endif
  220041             :       /* */
  220042             : 
  220043             : 
  220044             : 
  220045             : 
  220046             :      public:
  220047             :       /* name Traversal Support Functions
  220048             :           \brief Traversal support functions ... incomplete-documentation
  220049             : 
  220050             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220051             :           or by particularly knowledgable users for specialized tools or applications.
  220052             :        */
  220053             :       /* */
  220054             : 
  220055             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  220056             :        // (inferior to ROSE traversal mechanism, experimental).
  220057             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  220058             :        */
  220059             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  220060             : 
  220061             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  220062             :       /*! \brief support for the classic visitor pattern done in GoF */
  220063             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  220064             : 
  220065             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  220066             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  220067             :        */
  220068             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  220069             : 
  220070             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  220071             :        */
  220072             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  220073             : 
  220074             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  220075             :        // This traversal helps support internal tools that call static member functions.
  220076             :        // note: this function operates on the memory pools.
  220077             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  220078             :        */
  220079             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  220080             :       /* */
  220081             : 
  220082             : 
  220083             :      public:
  220084             :       /* name Memory Allocation Functions
  220085             :           \brief Memory allocations functions ... incomplete-documentation
  220086             : 
  220087             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220088             :           or by particularly knowledgable users for specialized tools or applications.
  220089             :        */
  220090             :       /* */
  220091             : 
  220092             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  220093             : 
  220094             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  220095             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  220096             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  220097             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  220098             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  220099             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  220100             :           being used with the AST File I/O mechanism.
  220101             :        */
  220102             :           virtual bool isInMemoryPool() override;
  220103             : 
  220104             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  220105             : 
  220106             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  220107             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  220108             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  220109             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  220110             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  220111             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  220112             :           being used with the AST File I/O mechanism.
  220113             :        */
  220114             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  220115             : 
  220116             :       // DQ (4/30/2006): Modified to be a const function.
  220117             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  220118             : 
  220119             :           This functions is part of general support for many possible tools to operate 
  220120             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  220121             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  220122             :           less than the set of pointers used by the AST file I/O. This is part of
  220123             :           work implemented by Andreas, and support tools such as the AST graph generation.
  220124             : 
  220125             :           \warning This function can return unexpected data members and thus the 
  220126             :                    order and the number of elements is unpredicable and subject 
  220127             :                    to change.
  220128             : 
  220129             :           \returns STL vector of pairs of SgNode* and strings
  220130             :        */
  220131             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  220132             : 
  220133             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  220134             : 
  220135             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  220136             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  220137             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  220138             : 
  220139             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  220140             :                    and subject to change.
  220141             :        */
  220142             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  220143             : 
  220144             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  220145             : 
  220146             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  220147             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  220148             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  220149             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  220150             : 
  220151             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  220152             : 
  220153             :           \returns long
  220154             :        */
  220155             :           virtual long getChildIndex( SgNode* childNode ) const override;
  220156             : 
  220157             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  220158             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  220159             :       /* \brief Constructor for use by AST File I/O Mechanism
  220160             : 
  220161             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  220162             :           which obtained via fast binary file I/O from disk.
  220163             :        */
  220164             :        // SgOmpCancelStatement( SgOmpCancelStatementStorageClass& source );
  220165             : 
  220166             : 
  220167             : 
  220168             : 
  220169             : 
  220170             :  // JH (10/24/2005): methods added to support the ast file IO
  220171             :     private:
  220172             : 
  220173             :       /* name AST Memory Allocation Support Functions
  220174             :           \brief Memory allocations support....
  220175             : 
  220176             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  220177             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  220178             :           and support the AST File I/O Mechanism.
  220179             :        */
  220180             :       /* */
  220181             : 
  220182             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  220183             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  220184             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  220185             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  220186             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  220187             :           a correspinding one in the AST_FILE_IO class!
  220188             :        */
  220189             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  220190             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  220191             :       /* \brief Typedef used for low level memory access.
  220192             :        */
  220193             :        // typedef unsigned char* TestType;
  220194             : 
  220195             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  220196             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  220197             :       /* \brief Typedef used to hold memory addresses as values.
  220198             :        */
  220199             :        // typedef unsigned long  AddressType;
  220200             : 
  220201             : 
  220202             : 
  220203             :        // necessary, to have direct access to the p_freepointer and the private methods !
  220204             :       /*! \brief friend class declaration to support AST File I/O */
  220205             :           friend class AST_FILE_IO;
  220206             : 
  220207             :       /*! \brief friend class declaration to support AST File I/O */
  220208             :           friend class SgOmpCancelStatementStorageClass;
  220209             : 
  220210             :       /*! \brief friend class declaration to support AST File I/O */
  220211             :           friend class AstSpecificDataManagingClass;
  220212             : 
  220213             :       /*! \brief friend class declaration to support AST File I/O */
  220214             :           friend class AstSpecificDataManagingClassStorageClass;
  220215             :     public:
  220216             :       /*! \brief IR node constructor to support AST File I/O */
  220217             :           SgOmpCancelStatement( const SgOmpCancelStatementStorageClass& source );
  220218             : 
  220219             :  // private: // JJW hack
  220220             :        /*
  220221             :           name AST Memory Allocation Support Variables
  220222             :           Memory allocations support variables 
  220223             : 
  220224             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  220225             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  220226             :           and support the AST File I/O Mechanism.
  220227             :        */
  220228             :       /* */
  220229             : 
  220230             :     public:
  220231             : 
  220232             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  220233             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  220234             :       // virtual SgNode* addRegExpAttribute();
  220235             :       /*! \brief Support for AST matching using regular expression.
  220236             : 
  220237             :           This support is incomplete and the subject of current research to define 
  220238             :           RegEx trees to support inexact matching.
  220239             :        */
  220240             :           SgOmpCancelStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  220241             : 
  220242             : // *** COMMON CODE SECTION ENDS HERE ***
  220243             : 
  220244             : 
  220245             : // End of memberFunctionString
  220246             : // Start of memberFunctionString
  220247             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  220248             : 
  220249             :      // the generated cast function
  220250             :      // friend ROSE_DLL_API SgOmpCancelStatement* isSgOmpCancelStatement ( SgNode* s );
  220251             : 
  220252             :           typedef SgUpirFieldStatement base_node_type;
  220253             : 
  220254             : 
  220255             : // End of memberFunctionString
  220256             : // Start of memberFunctionString
  220257             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  220258             : 
  220259             :           void post_construction_initialization() override;
  220260             : 
  220261             : 
  220262             : // End of memberFunctionString
  220263             : 
  220264             : 
  220265             :      public: 
  220266             :          virtual ~SgOmpCancelStatement();
  220267             : 
  220268             : 
  220269             :      public: 
  220270             :          SgOmpCancelStatement(Sg_File_Info* startOfConstruct ); 
  220271             :          SgOmpCancelStatement(); 
  220272             : 
  220273             :     protected:
  220274             : 
  220275             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpCancelStatement>;
  220276             : 
  220277             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220278             : 
  220279             : 
  220280             :    };
  220281             : #endif
  220282             : 
  220283             : // postdeclarations for SgOmpCancelStatement
  220284             : 
  220285             : /* #line 220286 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220286             : 
  220287             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  220288             : 
  220289             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220290             : 
  220291             : 
  220292             : /* #line 220293 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220293             : 
  220294             : 
  220295             : 
  220296             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220297             : 
  220298             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  220299             : //      This code is automatically generated for each 
  220300             : //      terminal and non-terminal within the defined 
  220301             : //      grammar.  There is a simple way to change the 
  220302             : //      code to fix bugs etc.  See the ROSE README file
  220303             : //      for directions.
  220304             : 
  220305             : // tps: (02/22/2010): Adding DLL export requirements
  220306             : #include "rosedll.h"
  220307             : 
  220308             : // predeclarations for SgOmpCancellationPointStatement
  220309             : 
  220310             : /* #line 220311 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220311             : 
  220312             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  220313             : 
  220314             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220315             : 
  220316             : #if 1
  220317             : // Class Definition for SgOmpCancellationPointStatement
  220318             : class ROSE_DLL_API SgOmpCancellationPointStatement  : public SgUpirFieldStatement
  220319             :    {
  220320             :      public:
  220321             : 
  220322             : 
  220323             : /* #line 220324 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220324             : 
  220325             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  220326             : // Start of memberFunctionString
  220327             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  220328             : 
  220329             : // *** COMMON CODE SECTION BEGINS HERE ***
  220330             : 
  220331             :     public:
  220332             : 
  220333             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  220334             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  220335             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  220336             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  220337             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  220338             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  220339             : 
  220340             :       /*! \brief returns a string representing the class name */
  220341             :           virtual std::string class_name() const override;
  220342             : 
  220343             :       /*! \brief returns new style SageIII enum values */
  220344             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  220345             : 
  220346             :       /*! \brief static variant value */
  220347             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  220348             :        // static const VariantT static_variant = V_SgOmpCancellationPointStatement;
  220349             :           enum { static_variant = V_SgOmpCancellationPointStatement };
  220350             : 
  220351             :        /* the generated cast function */
  220352             :       /*! \brief Casts pointer from base class to derived class */
  220353             :           ROSE_DLL_API friend       SgOmpCancellationPointStatement* isSgOmpCancellationPointStatement(       SgNode * s );
  220354             : 
  220355             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  220356             :           ROSE_DLL_API friend const SgOmpCancellationPointStatement* isSgOmpCancellationPointStatement( const SgNode * s );
  220357             : 
  220358             :      // ******************************************
  220359             :      // * Memory Pool / New / Delete
  220360             :      // ******************************************
  220361             : 
  220362             :      public:
  220363             :           /// \private
  220364             :           static const unsigned pool_size; //
  220365             :           /// \private
  220366             :           static std::vector<unsigned char *> pools; //
  220367             :           /// \private
  220368             :           static SgOmpCancellationPointStatement * next_node; // 
  220369             : 
  220370             :           /// \private
  220371             :           static unsigned long initializeStorageClassArray(SgOmpCancellationPointStatementStorageClass *); //
  220372             : 
  220373             :           /// \private
  220374             :           static void clearMemoryPool(); //
  220375             :           static void deleteMemoryPool(); //
  220376             : 
  220377             :           /// \private
  220378             :           static void extendMemoryPoolForFileIO(); //
  220379             : 
  220380             :           /// \private
  220381             :           static SgOmpCancellationPointStatement * getPointerFromGlobalIndex(unsigned long); //
  220382             :           /// \private
  220383             :           static SgOmpCancellationPointStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  220384             : 
  220385             :           /// \private
  220386             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  220387             :           /// \private
  220388             :           static void resetValidFreepointers(); //
  220389             :           /// \private
  220390             :           static unsigned long getNumberOfLastValidPointer(); //
  220391             : 
  220392             : 
  220393             : #if defined(INLINE_FUNCTIONS)
  220394             :       /*! \brief returns pointer to newly allocated IR node */
  220395             :           inline void *operator new (size_t size);
  220396             : #else
  220397             :       /*! \brief returns pointer to newly allocated IR node */
  220398             :           void *operator new (size_t size);
  220399             : #endif
  220400             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  220401             :           void operator delete (void* pointer, size_t size);
  220402             : 
  220403             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  220404           0 :           void operator delete (void* pointer)
  220405             :              {
  220406             :             // This is the generated delete operator...
  220407           0 :                SgOmpCancellationPointStatement::operator delete (pointer,sizeof(SgOmpCancellationPointStatement));
  220408             :              }
  220409             : 
  220410             :       /*! \brief Returns the total number of IR nodes of this type */
  220411             :           static size_t numberOfNodes();
  220412             : 
  220413             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  220414             :           static size_t memoryUsage();
  220415             : 
  220416             :       // End of scope which started in IR nodes specific code 
  220417             :       /* */
  220418             : 
  220419             :       /* name Internal Functions
  220420             :           \brief Internal functions ... incomplete-documentation
  220421             : 
  220422             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220423             :           or by particularly knowledgeable users for specialized tools or applications.
  220424             : 
  220425             :           \internal We could not make these private because they are required by user for special purposes. And 
  220426             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  220427             :          
  220428             :        */
  220429             : 
  220430             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  220431             :        // overridden in every class by *generated* implementation
  220432             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  220433             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  220434             :        // MS: 06/28/02 container of names of variables or container indices 
  220435             :        // used used in the traversal to access AST successor nodes
  220436             :        // overridden in every class by *generated* implementation
  220437             :       /*! \brief container of names of variables or container indices used used in the traversal
  220438             :           to access AST successor nodes overridden in every class by *generated* implementation */
  220439             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  220440             : 
  220441             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  220442             :        // than all the vector copies. The implementation for these functions is generated for each class.
  220443             :       /*! \brief return number of children in the traversal successor list */
  220444             :           virtual size_t get_numberOfTraversalSuccessors() override;
  220445             :       /*! \brief index-based access to traversal successors by index number */
  220446             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  220447             :       /*! \brief index-based access to traversal successors by child node */
  220448             :           virtual size_t get_childIndex(SgNode *child) override;
  220449             : 
  220450             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  220451             :        // MS: 08/16/2002 method for generating RTI information
  220452             :       /*! \brief return C++ Runtime-Time-Information */
  220453             :           virtual RTIReturnType roseRTI() override;
  220454             : #endif
  220455             :       /* */
  220456             : 
  220457             : 
  220458             : 
  220459             :       /* name Deprecated Functions
  220460             :           \brief Deprecated functions ... incomplete-documentation
  220461             : 
  220462             :           These functions have been deprecated from use.
  220463             :        */
  220464             :       /* */
  220465             : 
  220466             :       /*! returns a C style string (char*) representing the class name */
  220467             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  220468             : 
  220469             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  220470             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  220471             : #if 0
  220472             :       /*! returns old style Sage II enum values */
  220473             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  220474             :       /*! returns old style Sage II enum values */
  220475             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  220476             : #endif
  220477             :       /* */
  220478             : 
  220479             : 
  220480             : 
  220481             : 
  220482             :      public:
  220483             :       /* name Traversal Support Functions
  220484             :           \brief Traversal support functions ... incomplete-documentation
  220485             : 
  220486             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220487             :           or by particularly knowledgable users for specialized tools or applications.
  220488             :        */
  220489             :       /* */
  220490             : 
  220491             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  220492             :        // (inferior to ROSE traversal mechanism, experimental).
  220493             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  220494             :        */
  220495             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  220496             : 
  220497             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  220498             :       /*! \brief support for the classic visitor pattern done in GoF */
  220499             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  220500             : 
  220501             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  220502             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  220503             :        */
  220504             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  220505             : 
  220506             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  220507             :        */
  220508             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  220509             : 
  220510             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  220511             :        // This traversal helps support internal tools that call static member functions.
  220512             :        // note: this function operates on the memory pools.
  220513             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  220514             :        */
  220515             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  220516             :       /* */
  220517             : 
  220518             : 
  220519             :      public:
  220520             :       /* name Memory Allocation Functions
  220521             :           \brief Memory allocations functions ... incomplete-documentation
  220522             : 
  220523             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220524             :           or by particularly knowledgable users for specialized tools or applications.
  220525             :        */
  220526             :       /* */
  220527             : 
  220528             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  220529             : 
  220530             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  220531             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  220532             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  220533             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  220534             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  220535             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  220536             :           being used with the AST File I/O mechanism.
  220537             :        */
  220538             :           virtual bool isInMemoryPool() override;
  220539             : 
  220540             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  220541             : 
  220542             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  220543             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  220544             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  220545             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  220546             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  220547             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  220548             :           being used with the AST File I/O mechanism.
  220549             :        */
  220550             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  220551             : 
  220552             :       // DQ (4/30/2006): Modified to be a const function.
  220553             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  220554             : 
  220555             :           This functions is part of general support for many possible tools to operate 
  220556             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  220557             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  220558             :           less than the set of pointers used by the AST file I/O. This is part of
  220559             :           work implemented by Andreas, and support tools such as the AST graph generation.
  220560             : 
  220561             :           \warning This function can return unexpected data members and thus the 
  220562             :                    order and the number of elements is unpredicable and subject 
  220563             :                    to change.
  220564             : 
  220565             :           \returns STL vector of pairs of SgNode* and strings
  220566             :        */
  220567             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  220568             : 
  220569             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  220570             : 
  220571             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  220572             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  220573             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  220574             : 
  220575             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  220576             :                    and subject to change.
  220577             :        */
  220578             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  220579             : 
  220580             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  220581             : 
  220582             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  220583             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  220584             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  220585             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  220586             : 
  220587             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  220588             : 
  220589             :           \returns long
  220590             :        */
  220591             :           virtual long getChildIndex( SgNode* childNode ) const override;
  220592             : 
  220593             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  220594             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  220595             :       /* \brief Constructor for use by AST File I/O Mechanism
  220596             : 
  220597             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  220598             :           which obtained via fast binary file I/O from disk.
  220599             :        */
  220600             :        // SgOmpCancellationPointStatement( SgOmpCancellationPointStatementStorageClass& source );
  220601             : 
  220602             : 
  220603             : 
  220604             : 
  220605             : 
  220606             :  // JH (10/24/2005): methods added to support the ast file IO
  220607             :     private:
  220608             : 
  220609             :       /* name AST Memory Allocation Support Functions
  220610             :           \brief Memory allocations support....
  220611             : 
  220612             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  220613             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  220614             :           and support the AST File I/O Mechanism.
  220615             :        */
  220616             :       /* */
  220617             : 
  220618             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  220619             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  220620             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  220621             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  220622             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  220623             :           a correspinding one in the AST_FILE_IO class!
  220624             :        */
  220625             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  220626             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  220627             :       /* \brief Typedef used for low level memory access.
  220628             :        */
  220629             :        // typedef unsigned char* TestType;
  220630             : 
  220631             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  220632             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  220633             :       /* \brief Typedef used to hold memory addresses as values.
  220634             :        */
  220635             :        // typedef unsigned long  AddressType;
  220636             : 
  220637             : 
  220638             : 
  220639             :        // necessary, to have direct access to the p_freepointer and the private methods !
  220640             :       /*! \brief friend class declaration to support AST File I/O */
  220641             :           friend class AST_FILE_IO;
  220642             : 
  220643             :       /*! \brief friend class declaration to support AST File I/O */
  220644             :           friend class SgOmpCancellationPointStatementStorageClass;
  220645             : 
  220646             :       /*! \brief friend class declaration to support AST File I/O */
  220647             :           friend class AstSpecificDataManagingClass;
  220648             : 
  220649             :       /*! \brief friend class declaration to support AST File I/O */
  220650             :           friend class AstSpecificDataManagingClassStorageClass;
  220651             :     public:
  220652             :       /*! \brief IR node constructor to support AST File I/O */
  220653             :           SgOmpCancellationPointStatement( const SgOmpCancellationPointStatementStorageClass& source );
  220654             : 
  220655             :  // private: // JJW hack
  220656             :        /*
  220657             :           name AST Memory Allocation Support Variables
  220658             :           Memory allocations support variables 
  220659             : 
  220660             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  220661             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  220662             :           and support the AST File I/O Mechanism.
  220663             :        */
  220664             :       /* */
  220665             : 
  220666             :     public:
  220667             : 
  220668             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  220669             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  220670             :       // virtual SgNode* addRegExpAttribute();
  220671             :       /*! \brief Support for AST matching using regular expression.
  220672             : 
  220673             :           This support is incomplete and the subject of current research to define 
  220674             :           RegEx trees to support inexact matching.
  220675             :        */
  220676             :           SgOmpCancellationPointStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  220677             : 
  220678             : // *** COMMON CODE SECTION ENDS HERE ***
  220679             : 
  220680             : 
  220681             : // End of memberFunctionString
  220682             : // Start of memberFunctionString
  220683             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  220684             : 
  220685             :      // the generated cast function
  220686             :      // friend ROSE_DLL_API SgOmpCancellationPointStatement* isSgOmpCancellationPointStatement ( SgNode* s );
  220687             : 
  220688             :           typedef SgUpirFieldStatement base_node_type;
  220689             : 
  220690             : 
  220691             : // End of memberFunctionString
  220692             : // Start of memberFunctionString
  220693             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  220694             : 
  220695             :           void post_construction_initialization() override;
  220696             : 
  220697             : 
  220698             : // End of memberFunctionString
  220699             : 
  220700             : 
  220701             :      public: 
  220702             :          virtual ~SgOmpCancellationPointStatement();
  220703             : 
  220704             : 
  220705             :      public: 
  220706             :          SgOmpCancellationPointStatement(Sg_File_Info* startOfConstruct ); 
  220707             :          SgOmpCancellationPointStatement(); 
  220708             : 
  220709             :     protected:
  220710             : 
  220711             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpCancellationPointStatement>;
  220712             : 
  220713             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220714             : 
  220715             : 
  220716             :    };
  220717             : #endif
  220718             : 
  220719             : // postdeclarations for SgOmpCancellationPointStatement
  220720             : 
  220721             : /* #line 220722 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220722             : 
  220723             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  220724             : 
  220725             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220726             : 
  220727             : 
  220728             : /* #line 220729 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220729             : 
  220730             : 
  220731             : 
  220732             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220733             : 
  220734             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  220735             : //      This code is automatically generated for each 
  220736             : //      terminal and non-terminal within the defined 
  220737             : //      grammar.  There is a simple way to change the 
  220738             : //      code to fix bugs etc.  See the ROSE README file
  220739             : //      for directions.
  220740             : 
  220741             : // tps: (02/22/2010): Adding DLL export requirements
  220742             : #include "rosedll.h"
  220743             : 
  220744             : // predeclarations for SgOmpTargetUpdateStatement
  220745             : 
  220746             : /* #line 220747 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220747             : 
  220748             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  220749             : 
  220750             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  220751             : 
  220752             : #if 1
  220753             : // Class Definition for SgOmpTargetUpdateStatement
  220754             : class ROSE_DLL_API SgOmpTargetUpdateStatement  : public SgUpirFieldStatement
  220755             :    {
  220756             :      public:
  220757             : 
  220758             : 
  220759             : /* #line 220760 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  220760             : 
  220761             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  220762             : // Start of memberFunctionString
  220763             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  220764             : 
  220765             : // *** COMMON CODE SECTION BEGINS HERE ***
  220766             : 
  220767             :     public:
  220768             : 
  220769             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  220770             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  220771             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  220772             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  220773             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  220774             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  220775             : 
  220776             :       /*! \brief returns a string representing the class name */
  220777             :           virtual std::string class_name() const override;
  220778             : 
  220779             :       /*! \brief returns new style SageIII enum values */
  220780             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  220781             : 
  220782             :       /*! \brief static variant value */
  220783             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  220784             :        // static const VariantT static_variant = V_SgOmpTargetUpdateStatement;
  220785             :           enum { static_variant = V_SgOmpTargetUpdateStatement };
  220786             : 
  220787             :        /* the generated cast function */
  220788             :       /*! \brief Casts pointer from base class to derived class */
  220789             :           ROSE_DLL_API friend       SgOmpTargetUpdateStatement* isSgOmpTargetUpdateStatement(       SgNode * s );
  220790             : 
  220791             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  220792             :           ROSE_DLL_API friend const SgOmpTargetUpdateStatement* isSgOmpTargetUpdateStatement( const SgNode * s );
  220793             : 
  220794             :      // ******************************************
  220795             :      // * Memory Pool / New / Delete
  220796             :      // ******************************************
  220797             : 
  220798             :      public:
  220799             :           /// \private
  220800             :           static const unsigned pool_size; //
  220801             :           /// \private
  220802             :           static std::vector<unsigned char *> pools; //
  220803             :           /// \private
  220804             :           static SgOmpTargetUpdateStatement * next_node; // 
  220805             : 
  220806             :           /// \private
  220807             :           static unsigned long initializeStorageClassArray(SgOmpTargetUpdateStatementStorageClass *); //
  220808             : 
  220809             :           /// \private
  220810             :           static void clearMemoryPool(); //
  220811             :           static void deleteMemoryPool(); //
  220812             : 
  220813             :           /// \private
  220814             :           static void extendMemoryPoolForFileIO(); //
  220815             : 
  220816             :           /// \private
  220817             :           static SgOmpTargetUpdateStatement * getPointerFromGlobalIndex(unsigned long); //
  220818             :           /// \private
  220819             :           static SgOmpTargetUpdateStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  220820             : 
  220821             :           /// \private
  220822             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  220823             :           /// \private
  220824             :           static void resetValidFreepointers(); //
  220825             :           /// \private
  220826             :           static unsigned long getNumberOfLastValidPointer(); //
  220827             : 
  220828             : 
  220829             : #if defined(INLINE_FUNCTIONS)
  220830             :       /*! \brief returns pointer to newly allocated IR node */
  220831             :           inline void *operator new (size_t size);
  220832             : #else
  220833             :       /*! \brief returns pointer to newly allocated IR node */
  220834             :           void *operator new (size_t size);
  220835             : #endif
  220836             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  220837             :           void operator delete (void* pointer, size_t size);
  220838             : 
  220839             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  220840           0 :           void operator delete (void* pointer)
  220841             :              {
  220842             :             // This is the generated delete operator...
  220843           0 :                SgOmpTargetUpdateStatement::operator delete (pointer,sizeof(SgOmpTargetUpdateStatement));
  220844             :              }
  220845             : 
  220846             :       /*! \brief Returns the total number of IR nodes of this type */
  220847             :           static size_t numberOfNodes();
  220848             : 
  220849             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  220850             :           static size_t memoryUsage();
  220851             : 
  220852             :       // End of scope which started in IR nodes specific code 
  220853             :       /* */
  220854             : 
  220855             :       /* name Internal Functions
  220856             :           \brief Internal functions ... incomplete-documentation
  220857             : 
  220858             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220859             :           or by particularly knowledgeable users for specialized tools or applications.
  220860             : 
  220861             :           \internal We could not make these private because they are required by user for special purposes. And 
  220862             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  220863             :          
  220864             :        */
  220865             : 
  220866             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  220867             :        // overridden in every class by *generated* implementation
  220868             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  220869             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  220870             :        // MS: 06/28/02 container of names of variables or container indices 
  220871             :        // used used in the traversal to access AST successor nodes
  220872             :        // overridden in every class by *generated* implementation
  220873             :       /*! \brief container of names of variables or container indices used used in the traversal
  220874             :           to access AST successor nodes overridden in every class by *generated* implementation */
  220875             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  220876             : 
  220877             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  220878             :        // than all the vector copies. The implementation for these functions is generated for each class.
  220879             :       /*! \brief return number of children in the traversal successor list */
  220880             :           virtual size_t get_numberOfTraversalSuccessors() override;
  220881             :       /*! \brief index-based access to traversal successors by index number */
  220882             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  220883             :       /*! \brief index-based access to traversal successors by child node */
  220884             :           virtual size_t get_childIndex(SgNode *child) override;
  220885             : 
  220886             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  220887             :        // MS: 08/16/2002 method for generating RTI information
  220888             :       /*! \brief return C++ Runtime-Time-Information */
  220889             :           virtual RTIReturnType roseRTI() override;
  220890             : #endif
  220891             :       /* */
  220892             : 
  220893             : 
  220894             : 
  220895             :       /* name Deprecated Functions
  220896             :           \brief Deprecated functions ... incomplete-documentation
  220897             : 
  220898             :           These functions have been deprecated from use.
  220899             :        */
  220900             :       /* */
  220901             : 
  220902             :       /*! returns a C style string (char*) representing the class name */
  220903             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  220904             : 
  220905             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  220906             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  220907             : #if 0
  220908             :       /*! returns old style Sage II enum values */
  220909             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  220910             :       /*! returns old style Sage II enum values */
  220911             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  220912             : #endif
  220913             :       /* */
  220914             : 
  220915             : 
  220916             : 
  220917             : 
  220918             :      public:
  220919             :       /* name Traversal Support Functions
  220920             :           \brief Traversal support functions ... incomplete-documentation
  220921             : 
  220922             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220923             :           or by particularly knowledgable users for specialized tools or applications.
  220924             :        */
  220925             :       /* */
  220926             : 
  220927             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  220928             :        // (inferior to ROSE traversal mechanism, experimental).
  220929             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  220930             :        */
  220931             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  220932             : 
  220933             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  220934             :       /*! \brief support for the classic visitor pattern done in GoF */
  220935             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  220936             : 
  220937             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  220938             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  220939             :        */
  220940             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  220941             : 
  220942             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  220943             :        */
  220944             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  220945             : 
  220946             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  220947             :        // This traversal helps support internal tools that call static member functions.
  220948             :        // note: this function operates on the memory pools.
  220949             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  220950             :        */
  220951             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  220952             :       /* */
  220953             : 
  220954             : 
  220955             :      public:
  220956             :       /* name Memory Allocation Functions
  220957             :           \brief Memory allocations functions ... incomplete-documentation
  220958             : 
  220959             :           These functions have been made public as part of the design, but they are suggested for internal use 
  220960             :           or by particularly knowledgable users for specialized tools or applications.
  220961             :        */
  220962             :       /* */
  220963             : 
  220964             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  220965             : 
  220966             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  220967             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  220968             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  220969             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  220970             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  220971             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  220972             :           being used with the AST File I/O mechanism.
  220973             :        */
  220974             :           virtual bool isInMemoryPool() override;
  220975             : 
  220976             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  220977             : 
  220978             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  220979             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  220980             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  220981             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  220982             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  220983             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  220984             :           being used with the AST File I/O mechanism.
  220985             :        */
  220986             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  220987             : 
  220988             :       // DQ (4/30/2006): Modified to be a const function.
  220989             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  220990             : 
  220991             :           This functions is part of general support for many possible tools to operate 
  220992             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  220993             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  220994             :           less than the set of pointers used by the AST file I/O. This is part of
  220995             :           work implemented by Andreas, and support tools such as the AST graph generation.
  220996             : 
  220997             :           \warning This function can return unexpected data members and thus the 
  220998             :                    order and the number of elements is unpredicable and subject 
  220999             :                    to change.
  221000             : 
  221001             :           \returns STL vector of pairs of SgNode* and strings
  221002             :        */
  221003             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  221004             : 
  221005             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  221006             : 
  221007             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  221008             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  221009             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  221010             : 
  221011             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  221012             :                    and subject to change.
  221013             :        */
  221014             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  221015             : 
  221016             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  221017             : 
  221018             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  221019             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  221020             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  221021             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  221022             : 
  221023             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  221024             : 
  221025             :           \returns long
  221026             :        */
  221027             :           virtual long getChildIndex( SgNode* childNode ) const override;
  221028             : 
  221029             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  221030             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221031             :       /* \brief Constructor for use by AST File I/O Mechanism
  221032             : 
  221033             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  221034             :           which obtained via fast binary file I/O from disk.
  221035             :        */
  221036             :        // SgOmpTargetUpdateStatement( SgOmpTargetUpdateStatementStorageClass& source );
  221037             : 
  221038             : 
  221039             : 
  221040             : 
  221041             : 
  221042             :  // JH (10/24/2005): methods added to support the ast file IO
  221043             :     private:
  221044             : 
  221045             :       /* name AST Memory Allocation Support Functions
  221046             :           \brief Memory allocations support....
  221047             : 
  221048             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  221049             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  221050             :           and support the AST File I/O Mechanism.
  221051             :        */
  221052             :       /* */
  221053             : 
  221054             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  221055             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  221056             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  221057             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  221058             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  221059             :           a correspinding one in the AST_FILE_IO class!
  221060             :        */
  221061             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  221062             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221063             :       /* \brief Typedef used for low level memory access.
  221064             :        */
  221065             :        // typedef unsigned char* TestType;
  221066             : 
  221067             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  221068             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221069             :       /* \brief Typedef used to hold memory addresses as values.
  221070             :        */
  221071             :        // typedef unsigned long  AddressType;
  221072             : 
  221073             : 
  221074             : 
  221075             :        // necessary, to have direct access to the p_freepointer and the private methods !
  221076             :       /*! \brief friend class declaration to support AST File I/O */
  221077             :           friend class AST_FILE_IO;
  221078             : 
  221079             :       /*! \brief friend class declaration to support AST File I/O */
  221080             :           friend class SgOmpTargetUpdateStatementStorageClass;
  221081             : 
  221082             :       /*! \brief friend class declaration to support AST File I/O */
  221083             :           friend class AstSpecificDataManagingClass;
  221084             : 
  221085             :       /*! \brief friend class declaration to support AST File I/O */
  221086             :           friend class AstSpecificDataManagingClassStorageClass;
  221087             :     public:
  221088             :       /*! \brief IR node constructor to support AST File I/O */
  221089             :           SgOmpTargetUpdateStatement( const SgOmpTargetUpdateStatementStorageClass& source );
  221090             : 
  221091             :  // private: // JJW hack
  221092             :        /*
  221093             :           name AST Memory Allocation Support Variables
  221094             :           Memory allocations support variables 
  221095             : 
  221096             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  221097             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  221098             :           and support the AST File I/O Mechanism.
  221099             :        */
  221100             :       /* */
  221101             : 
  221102             :     public:
  221103             : 
  221104             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  221105             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  221106             :       // virtual SgNode* addRegExpAttribute();
  221107             :       /*! \brief Support for AST matching using regular expression.
  221108             : 
  221109             :           This support is incomplete and the subject of current research to define 
  221110             :           RegEx trees to support inexact matching.
  221111             :        */
  221112             :           SgOmpTargetUpdateStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  221113             : 
  221114             : // *** COMMON CODE SECTION ENDS HERE ***
  221115             : 
  221116             : 
  221117             : // End of memberFunctionString
  221118             : // Start of memberFunctionString
  221119             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  221120             : 
  221121             :      // the generated cast function
  221122             :      // friend ROSE_DLL_API SgOmpTargetUpdateStatement* isSgOmpTargetUpdateStatement ( SgNode* s );
  221123             : 
  221124             :           typedef SgUpirFieldStatement base_node_type;
  221125             : 
  221126             : 
  221127             : // End of memberFunctionString
  221128             : // Start of memberFunctionString
  221129             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  221130             : 
  221131             :           void post_construction_initialization() override;
  221132             : 
  221133             : 
  221134             : // End of memberFunctionString
  221135             : 
  221136             : 
  221137             :      public: 
  221138             :          virtual ~SgOmpTargetUpdateStatement();
  221139             : 
  221140             : 
  221141             :      public: 
  221142             :          SgOmpTargetUpdateStatement(Sg_File_Info* startOfConstruct ); 
  221143             :          SgOmpTargetUpdateStatement(); 
  221144             : 
  221145             :     protected:
  221146             : 
  221147             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpTargetUpdateStatement>;
  221148             : 
  221149             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221150             : 
  221151             : 
  221152             :    };
  221153             : #endif
  221154             : 
  221155             : // postdeclarations for SgOmpTargetUpdateStatement
  221156             : 
  221157             : /* #line 221158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221158             : 
  221159             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  221160             : 
  221161             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221162             : 
  221163             : 
  221164             : /* #line 221165 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221165             : 
  221166             : 
  221167             : 
  221168             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221169             : 
  221170             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  221171             : //      This code is automatically generated for each 
  221172             : //      terminal and non-terminal within the defined 
  221173             : //      grammar.  There is a simple way to change the 
  221174             : //      code to fix bugs etc.  See the ROSE README file
  221175             : //      for directions.
  221176             : 
  221177             : // tps: (02/22/2010): Adding DLL export requirements
  221178             : #include "rosedll.h"
  221179             : 
  221180             : // predeclarations for SgOmpFlushStatement
  221181             : 
  221182             : /* #line 221183 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221183             : 
  221184             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  221185             : 
  221186             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221187             : 
  221188             : #if 1
  221189             : // Class Definition for SgOmpFlushStatement
  221190             : class ROSE_DLL_API SgOmpFlushStatement  : public SgUpirFieldStatement
  221191             :    {
  221192             :      public:
  221193             : 
  221194             : 
  221195             : /* #line 221196 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221196             : 
  221197             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  221198             : // Start of memberFunctionString
  221199             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  221200             : 
  221201             : // *** COMMON CODE SECTION BEGINS HERE ***
  221202             : 
  221203             :     public:
  221204             : 
  221205             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  221206             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  221207             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  221208             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  221209             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  221210             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  221211             : 
  221212             :       /*! \brief returns a string representing the class name */
  221213             :           virtual std::string class_name() const override;
  221214             : 
  221215             :       /*! \brief returns new style SageIII enum values */
  221216             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  221217             : 
  221218             :       /*! \brief static variant value */
  221219             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  221220             :        // static const VariantT static_variant = V_SgOmpFlushStatement;
  221221             :           enum { static_variant = V_SgOmpFlushStatement };
  221222             : 
  221223             :        /* the generated cast function */
  221224             :       /*! \brief Casts pointer from base class to derived class */
  221225             :           ROSE_DLL_API friend       SgOmpFlushStatement* isSgOmpFlushStatement(       SgNode * s );
  221226             : 
  221227             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  221228             :           ROSE_DLL_API friend const SgOmpFlushStatement* isSgOmpFlushStatement( const SgNode * s );
  221229             : 
  221230             :      // ******************************************
  221231             :      // * Memory Pool / New / Delete
  221232             :      // ******************************************
  221233             : 
  221234             :      public:
  221235             :           /// \private
  221236             :           static const unsigned pool_size; //
  221237             :           /// \private
  221238             :           static std::vector<unsigned char *> pools; //
  221239             :           /// \private
  221240             :           static SgOmpFlushStatement * next_node; // 
  221241             : 
  221242             :           /// \private
  221243             :           static unsigned long initializeStorageClassArray(SgOmpFlushStatementStorageClass *); //
  221244             : 
  221245             :           /// \private
  221246             :           static void clearMemoryPool(); //
  221247             :           static void deleteMemoryPool(); //
  221248             : 
  221249             :           /// \private
  221250             :           static void extendMemoryPoolForFileIO(); //
  221251             : 
  221252             :           /// \private
  221253             :           static SgOmpFlushStatement * getPointerFromGlobalIndex(unsigned long); //
  221254             :           /// \private
  221255             :           static SgOmpFlushStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  221256             : 
  221257             :           /// \private
  221258             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  221259             :           /// \private
  221260             :           static void resetValidFreepointers(); //
  221261             :           /// \private
  221262             :           static unsigned long getNumberOfLastValidPointer(); //
  221263             : 
  221264             : 
  221265             : #if defined(INLINE_FUNCTIONS)
  221266             :       /*! \brief returns pointer to newly allocated IR node */
  221267             :           inline void *operator new (size_t size);
  221268             : #else
  221269             :       /*! \brief returns pointer to newly allocated IR node */
  221270             :           void *operator new (size_t size);
  221271             : #endif
  221272             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  221273             :           void operator delete (void* pointer, size_t size);
  221274             : 
  221275             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  221276           0 :           void operator delete (void* pointer)
  221277             :              {
  221278             :             // This is the generated delete operator...
  221279           0 :                SgOmpFlushStatement::operator delete (pointer,sizeof(SgOmpFlushStatement));
  221280             :              }
  221281             : 
  221282             :       /*! \brief Returns the total number of IR nodes of this type */
  221283             :           static size_t numberOfNodes();
  221284             : 
  221285             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  221286             :           static size_t memoryUsage();
  221287             : 
  221288             :       // End of scope which started in IR nodes specific code 
  221289             :       /* */
  221290             : 
  221291             :       /* name Internal Functions
  221292             :           \brief Internal functions ... incomplete-documentation
  221293             : 
  221294             :           These functions have been made public as part of the design, but they are suggested for internal use 
  221295             :           or by particularly knowledgeable users for specialized tools or applications.
  221296             : 
  221297             :           \internal We could not make these private because they are required by user for special purposes. And 
  221298             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  221299             :          
  221300             :        */
  221301             : 
  221302             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  221303             :        // overridden in every class by *generated* implementation
  221304             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  221305             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  221306             :        // MS: 06/28/02 container of names of variables or container indices 
  221307             :        // used used in the traversal to access AST successor nodes
  221308             :        // overridden in every class by *generated* implementation
  221309             :       /*! \brief container of names of variables or container indices used used in the traversal
  221310             :           to access AST successor nodes overridden in every class by *generated* implementation */
  221311             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  221312             : 
  221313             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  221314             :        // than all the vector copies. The implementation for these functions is generated for each class.
  221315             :       /*! \brief return number of children in the traversal successor list */
  221316             :           virtual size_t get_numberOfTraversalSuccessors() override;
  221317             :       /*! \brief index-based access to traversal successors by index number */
  221318             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  221319             :       /*! \brief index-based access to traversal successors by child node */
  221320             :           virtual size_t get_childIndex(SgNode *child) override;
  221321             : 
  221322             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  221323             :        // MS: 08/16/2002 method for generating RTI information
  221324             :       /*! \brief return C++ Runtime-Time-Information */
  221325             :           virtual RTIReturnType roseRTI() override;
  221326             : #endif
  221327             :       /* */
  221328             : 
  221329             : 
  221330             : 
  221331             :       /* name Deprecated Functions
  221332             :           \brief Deprecated functions ... incomplete-documentation
  221333             : 
  221334             :           These functions have been deprecated from use.
  221335             :        */
  221336             :       /* */
  221337             : 
  221338             :       /*! returns a C style string (char*) representing the class name */
  221339             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  221340             : 
  221341             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  221342             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  221343             : #if 0
  221344             :       /*! returns old style Sage II enum values */
  221345             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  221346             :       /*! returns old style Sage II enum values */
  221347             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  221348             : #endif
  221349             :       /* */
  221350             : 
  221351             : 
  221352             : 
  221353             : 
  221354             :      public:
  221355             :       /* name Traversal Support Functions
  221356             :           \brief Traversal support functions ... incomplete-documentation
  221357             : 
  221358             :           These functions have been made public as part of the design, but they are suggested for internal use 
  221359             :           or by particularly knowledgable users for specialized tools or applications.
  221360             :        */
  221361             :       /* */
  221362             : 
  221363             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  221364             :        // (inferior to ROSE traversal mechanism, experimental).
  221365             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  221366             :        */
  221367             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  221368             : 
  221369             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  221370             :       /*! \brief support for the classic visitor pattern done in GoF */
  221371             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  221372             : 
  221373             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  221374             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  221375             :        */
  221376             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  221377             : 
  221378             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  221379             :        */
  221380             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  221381             : 
  221382             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  221383             :        // This traversal helps support internal tools that call static member functions.
  221384             :        // note: this function operates on the memory pools.
  221385             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  221386             :        */
  221387             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  221388             :       /* */
  221389             : 
  221390             : 
  221391             :      public:
  221392             :       /* name Memory Allocation Functions
  221393             :           \brief Memory allocations functions ... incomplete-documentation
  221394             : 
  221395             :           These functions have been made public as part of the design, but they are suggested for internal use 
  221396             :           or by particularly knowledgable users for specialized tools or applications.
  221397             :        */
  221398             :       /* */
  221399             : 
  221400             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  221401             : 
  221402             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  221403             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  221404             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  221405             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  221406             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  221407             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  221408             :           being used with the AST File I/O mechanism.
  221409             :        */
  221410             :           virtual bool isInMemoryPool() override;
  221411             : 
  221412             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  221413             : 
  221414             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  221415             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  221416             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  221417             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  221418             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  221419             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  221420             :           being used with the AST File I/O mechanism.
  221421             :        */
  221422             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  221423             : 
  221424             :       // DQ (4/30/2006): Modified to be a const function.
  221425             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  221426             : 
  221427             :           This functions is part of general support for many possible tools to operate 
  221428             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  221429             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  221430             :           less than the set of pointers used by the AST file I/O. This is part of
  221431             :           work implemented by Andreas, and support tools such as the AST graph generation.
  221432             : 
  221433             :           \warning This function can return unexpected data members and thus the 
  221434             :                    order and the number of elements is unpredicable and subject 
  221435             :                    to change.
  221436             : 
  221437             :           \returns STL vector of pairs of SgNode* and strings
  221438             :        */
  221439             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  221440             : 
  221441             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  221442             : 
  221443             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  221444             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  221445             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  221446             : 
  221447             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  221448             :                    and subject to change.
  221449             :        */
  221450             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  221451             : 
  221452             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  221453             : 
  221454             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  221455             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  221456             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  221457             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  221458             : 
  221459             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  221460             : 
  221461             :           \returns long
  221462             :        */
  221463             :           virtual long getChildIndex( SgNode* childNode ) const override;
  221464             : 
  221465             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  221466             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221467             :       /* \brief Constructor for use by AST File I/O Mechanism
  221468             : 
  221469             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  221470             :           which obtained via fast binary file I/O from disk.
  221471             :        */
  221472             :        // SgOmpFlushStatement( SgOmpFlushStatementStorageClass& source );
  221473             : 
  221474             : 
  221475             : 
  221476             : 
  221477             : 
  221478             :  // JH (10/24/2005): methods added to support the ast file IO
  221479             :     private:
  221480             : 
  221481             :       /* name AST Memory Allocation Support Functions
  221482             :           \brief Memory allocations support....
  221483             : 
  221484             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  221485             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  221486             :           and support the AST File I/O Mechanism.
  221487             :        */
  221488             :       /* */
  221489             : 
  221490             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  221491             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  221492             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  221493             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  221494             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  221495             :           a correspinding one in the AST_FILE_IO class!
  221496             :        */
  221497             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  221498             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221499             :       /* \brief Typedef used for low level memory access.
  221500             :        */
  221501             :        // typedef unsigned char* TestType;
  221502             : 
  221503             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  221504             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221505             :       /* \brief Typedef used to hold memory addresses as values.
  221506             :        */
  221507             :        // typedef unsigned long  AddressType;
  221508             : 
  221509             : 
  221510             : 
  221511             :        // necessary, to have direct access to the p_freepointer and the private methods !
  221512             :       /*! \brief friend class declaration to support AST File I/O */
  221513             :           friend class AST_FILE_IO;
  221514             : 
  221515             :       /*! \brief friend class declaration to support AST File I/O */
  221516             :           friend class SgOmpFlushStatementStorageClass;
  221517             : 
  221518             :       /*! \brief friend class declaration to support AST File I/O */
  221519             :           friend class AstSpecificDataManagingClass;
  221520             : 
  221521             :       /*! \brief friend class declaration to support AST File I/O */
  221522             :           friend class AstSpecificDataManagingClassStorageClass;
  221523             :     public:
  221524             :       /*! \brief IR node constructor to support AST File I/O */
  221525             :           SgOmpFlushStatement( const SgOmpFlushStatementStorageClass& source );
  221526             : 
  221527             :  // private: // JJW hack
  221528             :        /*
  221529             :           name AST Memory Allocation Support Variables
  221530             :           Memory allocations support variables 
  221531             : 
  221532             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  221533             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  221534             :           and support the AST File I/O Mechanism.
  221535             :        */
  221536             :       /* */
  221537             : 
  221538             :     public:
  221539             : 
  221540             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  221541             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  221542             :       // virtual SgNode* addRegExpAttribute();
  221543             :       /*! \brief Support for AST matching using regular expression.
  221544             : 
  221545             :           This support is incomplete and the subject of current research to define 
  221546             :           RegEx trees to support inexact matching.
  221547             :        */
  221548             :           SgOmpFlushStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  221549             : 
  221550             : // *** COMMON CODE SECTION ENDS HERE ***
  221551             : 
  221552             : 
  221553             : // End of memberFunctionString
  221554             : // Start of memberFunctionString
  221555             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  221556             : 
  221557             :      // the generated cast function
  221558             :      // friend ROSE_DLL_API SgOmpFlushStatement* isSgOmpFlushStatement ( SgNode* s );
  221559             : 
  221560             :           typedef SgUpirFieldStatement base_node_type;
  221561             : 
  221562             : 
  221563             : // End of memberFunctionString
  221564             : // Start of memberFunctionString
  221565             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  221566             : 
  221567             :           void post_construction_initialization() override;
  221568             : 
  221569             : 
  221570             : // End of memberFunctionString
  221571             : 
  221572             :      public: 
  221573             :          const SgVarRefExpPtrList&  get_variables() const;
  221574             :          SgVarRefExpPtrList& get_variables(); 
  221575             : 
  221576             : 
  221577             :      public: 
  221578             :          virtual ~SgOmpFlushStatement();
  221579             : 
  221580             : 
  221581             :      public: 
  221582             :          SgOmpFlushStatement(Sg_File_Info* startOfConstruct ); 
  221583             :          SgOmpFlushStatement(); 
  221584             : 
  221585             :     protected:
  221586             : // Start of memberFunctionString
  221587             : SgVarRefExpPtrList p_variables;
  221588             :           
  221589             : // End of memberFunctionString
  221590             : 
  221591             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpFlushStatement>;
  221592             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpFlushStatement, SgVarRefExpPtrList,&SgOmpFlushStatement::p_variables>;
  221593             : 
  221594             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221595             : 
  221596             : 
  221597             :    };
  221598             : #endif
  221599             : 
  221600             : // postdeclarations for SgOmpFlushStatement
  221601             : 
  221602             : /* #line 221603 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221603             : 
  221604             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  221605             : 
  221606             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221607             : 
  221608             : 
  221609             : /* #line 221610 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221610             : 
  221611             : 
  221612             : 
  221613             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221614             : 
  221615             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  221616             : //      This code is automatically generated for each 
  221617             : //      terminal and non-terminal within the defined 
  221618             : //      grammar.  There is a simple way to change the 
  221619             : //      code to fix bugs etc.  See the ROSE README file
  221620             : //      for directions.
  221621             : 
  221622             : // tps: (02/22/2010): Adding DLL export requirements
  221623             : #include "rosedll.h"
  221624             : 
  221625             : // predeclarations for SgOmpAllocateStatement
  221626             : 
  221627             : /* #line 221628 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221628             : 
  221629             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  221630             : 
  221631             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  221632             : 
  221633             : #if 1
  221634             : // Class Definition for SgOmpAllocateStatement
  221635             : class ROSE_DLL_API SgOmpAllocateStatement  : public SgUpirFieldStatement
  221636             :    {
  221637             :      public:
  221638             : 
  221639             : 
  221640             : /* #line 221641 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  221641             : 
  221642             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  221643             : // Start of memberFunctionString
  221644             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  221645             : 
  221646             : // *** COMMON CODE SECTION BEGINS HERE ***
  221647             : 
  221648             :     public:
  221649             : 
  221650             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  221651             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  221652             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  221653             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  221654             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  221655             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  221656             : 
  221657             :       /*! \brief returns a string representing the class name */
  221658             :           virtual std::string class_name() const override;
  221659             : 
  221660             :       /*! \brief returns new style SageIII enum values */
  221661             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  221662             : 
  221663             :       /*! \brief static variant value */
  221664             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  221665             :        // static const VariantT static_variant = V_SgOmpAllocateStatement;
  221666             :           enum { static_variant = V_SgOmpAllocateStatement };
  221667             : 
  221668             :        /* the generated cast function */
  221669             :       /*! \brief Casts pointer from base class to derived class */
  221670             :           ROSE_DLL_API friend       SgOmpAllocateStatement* isSgOmpAllocateStatement(       SgNode * s );
  221671             : 
  221672             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  221673             :           ROSE_DLL_API friend const SgOmpAllocateStatement* isSgOmpAllocateStatement( const SgNode * s );
  221674             : 
  221675             :      // ******************************************
  221676             :      // * Memory Pool / New / Delete
  221677             :      // ******************************************
  221678             : 
  221679             :      public:
  221680             :           /// \private
  221681             :           static const unsigned pool_size; //
  221682             :           /// \private
  221683             :           static std::vector<unsigned char *> pools; //
  221684             :           /// \private
  221685             :           static SgOmpAllocateStatement * next_node; // 
  221686             : 
  221687             :           /// \private
  221688             :           static unsigned long initializeStorageClassArray(SgOmpAllocateStatementStorageClass *); //
  221689             : 
  221690             :           /// \private
  221691             :           static void clearMemoryPool(); //
  221692             :           static void deleteMemoryPool(); //
  221693             : 
  221694             :           /// \private
  221695             :           static void extendMemoryPoolForFileIO(); //
  221696             : 
  221697             :           /// \private
  221698             :           static SgOmpAllocateStatement * getPointerFromGlobalIndex(unsigned long); //
  221699             :           /// \private
  221700             :           static SgOmpAllocateStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  221701             : 
  221702             :           /// \private
  221703             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  221704             :           /// \private
  221705             :           static void resetValidFreepointers(); //
  221706             :           /// \private
  221707             :           static unsigned long getNumberOfLastValidPointer(); //
  221708             : 
  221709             : 
  221710             : #if defined(INLINE_FUNCTIONS)
  221711             :       /*! \brief returns pointer to newly allocated IR node */
  221712             :           inline void *operator new (size_t size);
  221713             : #else
  221714             :       /*! \brief returns pointer to newly allocated IR node */
  221715             :           void *operator new (size_t size);
  221716             : #endif
  221717             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  221718             :           void operator delete (void* pointer, size_t size);
  221719             : 
  221720             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  221721           0 :           void operator delete (void* pointer)
  221722             :              {
  221723             :             // This is the generated delete operator...
  221724           0 :                SgOmpAllocateStatement::operator delete (pointer,sizeof(SgOmpAllocateStatement));
  221725             :              }
  221726             : 
  221727             :       /*! \brief Returns the total number of IR nodes of this type */
  221728             :           static size_t numberOfNodes();
  221729             : 
  221730             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  221731             :           static size_t memoryUsage();
  221732             : 
  221733             :       // End of scope which started in IR nodes specific code 
  221734             :       /* */
  221735             : 
  221736             :       /* name Internal Functions
  221737             :           \brief Internal functions ... incomplete-documentation
  221738             : 
  221739             :           These functions have been made public as part of the design, but they are suggested for internal use 
  221740             :           or by particularly knowledgeable users for specialized tools or applications.
  221741             : 
  221742             :           \internal We could not make these private because they are required by user for special purposes. And 
  221743             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  221744             :          
  221745             :        */
  221746             : 
  221747             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  221748             :        // overridden in every class by *generated* implementation
  221749             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  221750             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  221751             :        // MS: 06/28/02 container of names of variables or container indices 
  221752             :        // used used in the traversal to access AST successor nodes
  221753             :        // overridden in every class by *generated* implementation
  221754             :       /*! \brief container of names of variables or container indices used used in the traversal
  221755             :           to access AST successor nodes overridden in every class by *generated* implementation */
  221756             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  221757             : 
  221758             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  221759             :        // than all the vector copies. The implementation for these functions is generated for each class.
  221760             :       /*! \brief return number of children in the traversal successor list */
  221761             :           virtual size_t get_numberOfTraversalSuccessors() override;
  221762             :       /*! \brief index-based access to traversal successors by index number */
  221763             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  221764             :       /*! \brief index-based access to traversal successors by child node */
  221765             :           virtual size_t get_childIndex(SgNode *child) override;
  221766             : 
  221767             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  221768             :        // MS: 08/16/2002 method for generating RTI information
  221769             :       /*! \brief return C++ Runtime-Time-Information */
  221770             :           virtual RTIReturnType roseRTI() override;
  221771             : #endif
  221772             :       /* */
  221773             : 
  221774             : 
  221775             : 
  221776             :       /* name Deprecated Functions
  221777             :           \brief Deprecated functions ... incomplete-documentation
  221778             : 
  221779             :           These functions have been deprecated from use.
  221780             :        */
  221781             :       /* */
  221782             : 
  221783             :       /*! returns a C style string (char*) representing the class name */
  221784             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  221785             : 
  221786             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  221787             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  221788             : #if 0
  221789             :       /*! returns old style Sage II enum values */
  221790             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  221791             :       /*! returns old style Sage II enum values */
  221792             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  221793             : #endif
  221794             :       /* */
  221795             : 
  221796             : 
  221797             : 
  221798             : 
  221799             :      public:
  221800             :       /* name Traversal Support Functions
  221801             :           \brief Traversal support functions ... incomplete-documentation
  221802             : 
  221803             :           These functions have been made public as part of the design, but they are suggested for internal use 
  221804             :           or by particularly knowledgable users for specialized tools or applications.
  221805             :        */
  221806             :       /* */
  221807             : 
  221808             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  221809             :        // (inferior to ROSE traversal mechanism, experimental).
  221810             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  221811             :        */
  221812             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  221813             : 
  221814             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  221815             :       /*! \brief support for the classic visitor pattern done in GoF */
  221816             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  221817             : 
  221818             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  221819             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  221820             :        */
  221821             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  221822             : 
  221823             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  221824             :        */
  221825             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  221826             : 
  221827             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  221828             :        // This traversal helps support internal tools that call static member functions.
  221829             :        // note: this function operates on the memory pools.
  221830             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  221831             :        */
  221832             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  221833             :       /* */
  221834             : 
  221835             : 
  221836             :      public:
  221837             :       /* name Memory Allocation Functions
  221838             :           \brief Memory allocations functions ... incomplete-documentation
  221839             : 
  221840             :           These functions have been made public as part of the design, but they are suggested for internal use 
  221841             :           or by particularly knowledgable users for specialized tools or applications.
  221842             :        */
  221843             :       /* */
  221844             : 
  221845             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  221846             : 
  221847             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  221848             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  221849             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  221850             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  221851             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  221852             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  221853             :           being used with the AST File I/O mechanism.
  221854             :        */
  221855             :           virtual bool isInMemoryPool() override;
  221856             : 
  221857             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  221858             : 
  221859             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  221860             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  221861             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  221862             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  221863             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  221864             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  221865             :           being used with the AST File I/O mechanism.
  221866             :        */
  221867             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  221868             : 
  221869             :       // DQ (4/30/2006): Modified to be a const function.
  221870             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  221871             : 
  221872             :           This functions is part of general support for many possible tools to operate 
  221873             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  221874             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  221875             :           less than the set of pointers used by the AST file I/O. This is part of
  221876             :           work implemented by Andreas, and support tools such as the AST graph generation.
  221877             : 
  221878             :           \warning This function can return unexpected data members and thus the 
  221879             :                    order and the number of elements is unpredicable and subject 
  221880             :                    to change.
  221881             : 
  221882             :           \returns STL vector of pairs of SgNode* and strings
  221883             :        */
  221884             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  221885             : 
  221886             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  221887             : 
  221888             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  221889             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  221890             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  221891             : 
  221892             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  221893             :                    and subject to change.
  221894             :        */
  221895             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  221896             : 
  221897             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  221898             : 
  221899             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  221900             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  221901             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  221902             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  221903             : 
  221904             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  221905             : 
  221906             :           \returns long
  221907             :        */
  221908             :           virtual long getChildIndex( SgNode* childNode ) const override;
  221909             : 
  221910             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  221911             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221912             :       /* \brief Constructor for use by AST File I/O Mechanism
  221913             : 
  221914             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  221915             :           which obtained via fast binary file I/O from disk.
  221916             :        */
  221917             :        // SgOmpAllocateStatement( SgOmpAllocateStatementStorageClass& source );
  221918             : 
  221919             : 
  221920             : 
  221921             : 
  221922             : 
  221923             :  // JH (10/24/2005): methods added to support the ast file IO
  221924             :     private:
  221925             : 
  221926             :       /* name AST Memory Allocation Support Functions
  221927             :           \brief Memory allocations support....
  221928             : 
  221929             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  221930             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  221931             :           and support the AST File I/O Mechanism.
  221932             :        */
  221933             :       /* */
  221934             : 
  221935             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  221936             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  221937             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  221938             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  221939             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  221940             :           a correspinding one in the AST_FILE_IO class!
  221941             :        */
  221942             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  221943             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221944             :       /* \brief Typedef used for low level memory access.
  221945             :        */
  221946             :        // typedef unsigned char* TestType;
  221947             : 
  221948             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  221949             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  221950             :       /* \brief Typedef used to hold memory addresses as values.
  221951             :        */
  221952             :        // typedef unsigned long  AddressType;
  221953             : 
  221954             : 
  221955             : 
  221956             :        // necessary, to have direct access to the p_freepointer and the private methods !
  221957             :       /*! \brief friend class declaration to support AST File I/O */
  221958             :           friend class AST_FILE_IO;
  221959             : 
  221960             :       /*! \brief friend class declaration to support AST File I/O */
  221961             :           friend class SgOmpAllocateStatementStorageClass;
  221962             : 
  221963             :       /*! \brief friend class declaration to support AST File I/O */
  221964             :           friend class AstSpecificDataManagingClass;
  221965             : 
  221966             :       /*! \brief friend class declaration to support AST File I/O */
  221967             :           friend class AstSpecificDataManagingClassStorageClass;
  221968             :     public:
  221969             :       /*! \brief IR node constructor to support AST File I/O */
  221970             :           SgOmpAllocateStatement( const SgOmpAllocateStatementStorageClass& source );
  221971             : 
  221972             :  // private: // JJW hack
  221973             :        /*
  221974             :           name AST Memory Allocation Support Variables
  221975             :           Memory allocations support variables 
  221976             : 
  221977             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  221978             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  221979             :           and support the AST File I/O Mechanism.
  221980             :        */
  221981             :       /* */
  221982             : 
  221983             :     public:
  221984             : 
  221985             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  221986             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  221987             :       // virtual SgNode* addRegExpAttribute();
  221988             :       /*! \brief Support for AST matching using regular expression.
  221989             : 
  221990             :           This support is incomplete and the subject of current research to define 
  221991             :           RegEx trees to support inexact matching.
  221992             :        */
  221993             :           SgOmpAllocateStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  221994             : 
  221995             : // *** COMMON CODE SECTION ENDS HERE ***
  221996             : 
  221997             : 
  221998             : // End of memberFunctionString
  221999             : // Start of memberFunctionString
  222000             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  222001             : 
  222002             :      // the generated cast function
  222003             :      // friend ROSE_DLL_API SgOmpAllocateStatement* isSgOmpAllocateStatement ( SgNode* s );
  222004             : 
  222005             :           typedef SgUpirFieldStatement base_node_type;
  222006             : 
  222007             : 
  222008             : // End of memberFunctionString
  222009             : // Start of memberFunctionString
  222010             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  222011             : 
  222012             :           void post_construction_initialization() override;
  222013             : 
  222014             : 
  222015             : // End of memberFunctionString
  222016             : 
  222017             :      public: 
  222018             :          const SgVarRefExpPtrList&  get_variables() const;
  222019             :          SgVarRefExpPtrList& get_variables(); 
  222020             : 
  222021             : 
  222022             :      public: 
  222023             :          virtual ~SgOmpAllocateStatement();
  222024             : 
  222025             : 
  222026             :      public: 
  222027             :          SgOmpAllocateStatement(Sg_File_Info* startOfConstruct ); 
  222028             :          SgOmpAllocateStatement(); 
  222029             : 
  222030             :     protected:
  222031             : // Start of memberFunctionString
  222032             : SgVarRefExpPtrList p_variables;
  222033             :           
  222034             : // End of memberFunctionString
  222035             : 
  222036             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpAllocateStatement>;
  222037             :     friend struct Rose::Traits::generated::describe_field_t<SgOmpAllocateStatement, SgVarRefExpPtrList,&SgOmpAllocateStatement::p_variables>;
  222038             : 
  222039             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222040             : 
  222041             : 
  222042             :    };
  222043             : #endif
  222044             : 
  222045             : // postdeclarations for SgOmpAllocateStatement
  222046             : 
  222047             : /* #line 222048 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222048             : 
  222049             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  222050             : 
  222051             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222052             : 
  222053             : 
  222054             : /* #line 222055 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222055             : 
  222056             : 
  222057             : 
  222058             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222059             : 
  222060             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  222061             : //      This code is automatically generated for each 
  222062             : //      terminal and non-terminal within the defined 
  222063             : //      grammar.  There is a simple way to change the 
  222064             : //      code to fix bugs etc.  See the ROSE README file
  222065             : //      for directions.
  222066             : 
  222067             : // tps: (02/22/2010): Adding DLL export requirements
  222068             : #include "rosedll.h"
  222069             : 
  222070             : // predeclarations for SgOmpOrderedDependStatement
  222071             : 
  222072             : /* #line 222073 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222073             : 
  222074             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  222075             : 
  222076             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222077             : 
  222078             : #if 1
  222079             : // Class Definition for SgOmpOrderedDependStatement
  222080             : class ROSE_DLL_API SgOmpOrderedDependStatement  : public SgUpirFieldStatement
  222081             :    {
  222082             :      public:
  222083             : 
  222084             : 
  222085             : /* #line 222086 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222086             : 
  222087             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  222088             : // Start of memberFunctionString
  222089             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  222090             : 
  222091             : // *** COMMON CODE SECTION BEGINS HERE ***
  222092             : 
  222093             :     public:
  222094             : 
  222095             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  222096             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  222097             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  222098             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  222099             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  222100             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  222101             : 
  222102             :       /*! \brief returns a string representing the class name */
  222103             :           virtual std::string class_name() const override;
  222104             : 
  222105             :       /*! \brief returns new style SageIII enum values */
  222106             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  222107             : 
  222108             :       /*! \brief static variant value */
  222109             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  222110             :        // static const VariantT static_variant = V_SgOmpOrderedDependStatement;
  222111             :           enum { static_variant = V_SgOmpOrderedDependStatement };
  222112             : 
  222113             :        /* the generated cast function */
  222114             :       /*! \brief Casts pointer from base class to derived class */
  222115             :           ROSE_DLL_API friend       SgOmpOrderedDependStatement* isSgOmpOrderedDependStatement(       SgNode * s );
  222116             : 
  222117             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  222118             :           ROSE_DLL_API friend const SgOmpOrderedDependStatement* isSgOmpOrderedDependStatement( const SgNode * s );
  222119             : 
  222120             :      // ******************************************
  222121             :      // * Memory Pool / New / Delete
  222122             :      // ******************************************
  222123             : 
  222124             :      public:
  222125             :           /// \private
  222126             :           static const unsigned pool_size; //
  222127             :           /// \private
  222128             :           static std::vector<unsigned char *> pools; //
  222129             :           /// \private
  222130             :           static SgOmpOrderedDependStatement * next_node; // 
  222131             : 
  222132             :           /// \private
  222133             :           static unsigned long initializeStorageClassArray(SgOmpOrderedDependStatementStorageClass *); //
  222134             : 
  222135             :           /// \private
  222136             :           static void clearMemoryPool(); //
  222137             :           static void deleteMemoryPool(); //
  222138             : 
  222139             :           /// \private
  222140             :           static void extendMemoryPoolForFileIO(); //
  222141             : 
  222142             :           /// \private
  222143             :           static SgOmpOrderedDependStatement * getPointerFromGlobalIndex(unsigned long); //
  222144             :           /// \private
  222145             :           static SgOmpOrderedDependStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  222146             : 
  222147             :           /// \private
  222148             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  222149             :           /// \private
  222150             :           static void resetValidFreepointers(); //
  222151             :           /// \private
  222152             :           static unsigned long getNumberOfLastValidPointer(); //
  222153             : 
  222154             : 
  222155             : #if defined(INLINE_FUNCTIONS)
  222156             :       /*! \brief returns pointer to newly allocated IR node */
  222157             :           inline void *operator new (size_t size);
  222158             : #else
  222159             :       /*! \brief returns pointer to newly allocated IR node */
  222160             :           void *operator new (size_t size);
  222161             : #endif
  222162             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  222163             :           void operator delete (void* pointer, size_t size);
  222164             : 
  222165             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  222166           0 :           void operator delete (void* pointer)
  222167             :              {
  222168             :             // This is the generated delete operator...
  222169           0 :                SgOmpOrderedDependStatement::operator delete (pointer,sizeof(SgOmpOrderedDependStatement));
  222170             :              }
  222171             : 
  222172             :       /*! \brief Returns the total number of IR nodes of this type */
  222173             :           static size_t numberOfNodes();
  222174             : 
  222175             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  222176             :           static size_t memoryUsage();
  222177             : 
  222178             :       // End of scope which started in IR nodes specific code 
  222179             :       /* */
  222180             : 
  222181             :       /* name Internal Functions
  222182             :           \brief Internal functions ... incomplete-documentation
  222183             : 
  222184             :           These functions have been made public as part of the design, but they are suggested for internal use 
  222185             :           or by particularly knowledgeable users for specialized tools or applications.
  222186             : 
  222187             :           \internal We could not make these private because they are required by user for special purposes. And 
  222188             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  222189             :          
  222190             :        */
  222191             : 
  222192             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  222193             :        // overridden in every class by *generated* implementation
  222194             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  222195             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  222196             :        // MS: 06/28/02 container of names of variables or container indices 
  222197             :        // used used in the traversal to access AST successor nodes
  222198             :        // overridden in every class by *generated* implementation
  222199             :       /*! \brief container of names of variables or container indices used used in the traversal
  222200             :           to access AST successor nodes overridden in every class by *generated* implementation */
  222201             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  222202             : 
  222203             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  222204             :        // than all the vector copies. The implementation for these functions is generated for each class.
  222205             :       /*! \brief return number of children in the traversal successor list */
  222206             :           virtual size_t get_numberOfTraversalSuccessors() override;
  222207             :       /*! \brief index-based access to traversal successors by index number */
  222208             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  222209             :       /*! \brief index-based access to traversal successors by child node */
  222210             :           virtual size_t get_childIndex(SgNode *child) override;
  222211             : 
  222212             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  222213             :        // MS: 08/16/2002 method for generating RTI information
  222214             :       /*! \brief return C++ Runtime-Time-Information */
  222215             :           virtual RTIReturnType roseRTI() override;
  222216             : #endif
  222217             :       /* */
  222218             : 
  222219             : 
  222220             : 
  222221             :       /* name Deprecated Functions
  222222             :           \brief Deprecated functions ... incomplete-documentation
  222223             : 
  222224             :           These functions have been deprecated from use.
  222225             :        */
  222226             :       /* */
  222227             : 
  222228             :       /*! returns a C style string (char*) representing the class name */
  222229             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  222230             : 
  222231             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  222232             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  222233             : #if 0
  222234             :       /*! returns old style Sage II enum values */
  222235             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  222236             :       /*! returns old style Sage II enum values */
  222237             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  222238             : #endif
  222239             :       /* */
  222240             : 
  222241             : 
  222242             : 
  222243             : 
  222244             :      public:
  222245             :       /* name Traversal Support Functions
  222246             :           \brief Traversal support functions ... incomplete-documentation
  222247             : 
  222248             :           These functions have been made public as part of the design, but they are suggested for internal use 
  222249             :           or by particularly knowledgable users for specialized tools or applications.
  222250             :        */
  222251             :       /* */
  222252             : 
  222253             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  222254             :        // (inferior to ROSE traversal mechanism, experimental).
  222255             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  222256             :        */
  222257             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  222258             : 
  222259             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  222260             :       /*! \brief support for the classic visitor pattern done in GoF */
  222261             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  222262             : 
  222263             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  222264             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  222265             :        */
  222266             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  222267             : 
  222268             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  222269             :        */
  222270             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  222271             : 
  222272             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  222273             :        // This traversal helps support internal tools that call static member functions.
  222274             :        // note: this function operates on the memory pools.
  222275             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  222276             :        */
  222277             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  222278             :       /* */
  222279             : 
  222280             : 
  222281             :      public:
  222282             :       /* name Memory Allocation Functions
  222283             :           \brief Memory allocations functions ... incomplete-documentation
  222284             : 
  222285             :           These functions have been made public as part of the design, but they are suggested for internal use 
  222286             :           or by particularly knowledgable users for specialized tools or applications.
  222287             :        */
  222288             :       /* */
  222289             : 
  222290             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  222291             : 
  222292             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  222293             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  222294             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  222295             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  222296             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  222297             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  222298             :           being used with the AST File I/O mechanism.
  222299             :        */
  222300             :           virtual bool isInMemoryPool() override;
  222301             : 
  222302             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  222303             : 
  222304             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  222305             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  222306             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  222307             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  222308             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  222309             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  222310             :           being used with the AST File I/O mechanism.
  222311             :        */
  222312             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  222313             : 
  222314             :       // DQ (4/30/2006): Modified to be a const function.
  222315             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  222316             : 
  222317             :           This functions is part of general support for many possible tools to operate 
  222318             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  222319             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  222320             :           less than the set of pointers used by the AST file I/O. This is part of
  222321             :           work implemented by Andreas, and support tools such as the AST graph generation.
  222322             : 
  222323             :           \warning This function can return unexpected data members and thus the 
  222324             :                    order and the number of elements is unpredicable and subject 
  222325             :                    to change.
  222326             : 
  222327             :           \returns STL vector of pairs of SgNode* and strings
  222328             :        */
  222329             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  222330             : 
  222331             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  222332             : 
  222333             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  222334             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  222335             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  222336             : 
  222337             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  222338             :                    and subject to change.
  222339             :        */
  222340             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  222341             : 
  222342             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  222343             : 
  222344             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  222345             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  222346             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  222347             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  222348             : 
  222349             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  222350             : 
  222351             :           \returns long
  222352             :        */
  222353             :           virtual long getChildIndex( SgNode* childNode ) const override;
  222354             : 
  222355             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  222356             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  222357             :       /* \brief Constructor for use by AST File I/O Mechanism
  222358             : 
  222359             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  222360             :           which obtained via fast binary file I/O from disk.
  222361             :        */
  222362             :        // SgOmpOrderedDependStatement( SgOmpOrderedDependStatementStorageClass& source );
  222363             : 
  222364             : 
  222365             : 
  222366             : 
  222367             : 
  222368             :  // JH (10/24/2005): methods added to support the ast file IO
  222369             :     private:
  222370             : 
  222371             :       /* name AST Memory Allocation Support Functions
  222372             :           \brief Memory allocations support....
  222373             : 
  222374             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  222375             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  222376             :           and support the AST File I/O Mechanism.
  222377             :        */
  222378             :       /* */
  222379             : 
  222380             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  222381             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  222382             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  222383             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  222384             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  222385             :           a correspinding one in the AST_FILE_IO class!
  222386             :        */
  222387             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  222388             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  222389             :       /* \brief Typedef used for low level memory access.
  222390             :        */
  222391             :        // typedef unsigned char* TestType;
  222392             : 
  222393             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  222394             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  222395             :       /* \brief Typedef used to hold memory addresses as values.
  222396             :        */
  222397             :        // typedef unsigned long  AddressType;
  222398             : 
  222399             : 
  222400             : 
  222401             :        // necessary, to have direct access to the p_freepointer and the private methods !
  222402             :       /*! \brief friend class declaration to support AST File I/O */
  222403             :           friend class AST_FILE_IO;
  222404             : 
  222405             :       /*! \brief friend class declaration to support AST File I/O */
  222406             :           friend class SgOmpOrderedDependStatementStorageClass;
  222407             : 
  222408             :       /*! \brief friend class declaration to support AST File I/O */
  222409             :           friend class AstSpecificDataManagingClass;
  222410             : 
  222411             :       /*! \brief friend class declaration to support AST File I/O */
  222412             :           friend class AstSpecificDataManagingClassStorageClass;
  222413             :     public:
  222414             :       /*! \brief IR node constructor to support AST File I/O */
  222415             :           SgOmpOrderedDependStatement( const SgOmpOrderedDependStatementStorageClass& source );
  222416             : 
  222417             :  // private: // JJW hack
  222418             :        /*
  222419             :           name AST Memory Allocation Support Variables
  222420             :           Memory allocations support variables 
  222421             : 
  222422             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  222423             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  222424             :           and support the AST File I/O Mechanism.
  222425             :        */
  222426             :       /* */
  222427             : 
  222428             :     public:
  222429             : 
  222430             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  222431             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  222432             :       // virtual SgNode* addRegExpAttribute();
  222433             :       /*! \brief Support for AST matching using regular expression.
  222434             : 
  222435             :           This support is incomplete and the subject of current research to define 
  222436             :           RegEx trees to support inexact matching.
  222437             :        */
  222438             :           SgOmpOrderedDependStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  222439             : 
  222440             : // *** COMMON CODE SECTION ENDS HERE ***
  222441             : 
  222442             : 
  222443             : // End of memberFunctionString
  222444             : // Start of memberFunctionString
  222445             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  222446             : 
  222447             :      // the generated cast function
  222448             :      // friend ROSE_DLL_API SgOmpOrderedDependStatement* isSgOmpOrderedDependStatement ( SgNode* s );
  222449             : 
  222450             :           typedef SgUpirFieldStatement base_node_type;
  222451             : 
  222452             : 
  222453             : // End of memberFunctionString
  222454             : // Start of memberFunctionString
  222455             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  222456             : 
  222457             :           void post_construction_initialization() override;
  222458             : 
  222459             : 
  222460             : // End of memberFunctionString
  222461             : 
  222462             : 
  222463             :      public: 
  222464             :          virtual ~SgOmpOrderedDependStatement();
  222465             : 
  222466             : 
  222467             :      public: 
  222468             :          SgOmpOrderedDependStatement(Sg_File_Info* startOfConstruct ); 
  222469             :          SgOmpOrderedDependStatement(); 
  222470             : 
  222471             :     protected:
  222472             : 
  222473             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpOrderedDependStatement>;
  222474             : 
  222475             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222476             : 
  222477             : 
  222478             :    };
  222479             : #endif
  222480             : 
  222481             : // postdeclarations for SgOmpOrderedDependStatement
  222482             : 
  222483             : /* #line 222484 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222484             : 
  222485             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  222486             : 
  222487             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222488             : 
  222489             : 
  222490             : /* #line 222491 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222491             : 
  222492             : 
  222493             : 
  222494             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222495             : 
  222496             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  222497             : //      This code is automatically generated for each 
  222498             : //      terminal and non-terminal within the defined 
  222499             : //      grammar.  There is a simple way to change the 
  222500             : //      code to fix bugs etc.  See the ROSE README file
  222501             : //      for directions.
  222502             : 
  222503             : // tps: (02/22/2010): Adding DLL export requirements
  222504             : #include "rosedll.h"
  222505             : 
  222506             : // predeclarations for SgUpirSyncStatement
  222507             : 
  222508             : /* #line 222509 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222509             : 
  222510             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  222511             : 
  222512             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222513             : 
  222514             : #if 1
  222515             : // Class Definition for SgUpirSyncStatement
  222516             : class ROSE_DLL_API SgUpirSyncStatement  : public SgUpirFieldStatement
  222517             :    {
  222518             :      public:
  222519             : 
  222520             : 
  222521             : /* #line 222522 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222522             : 
  222523             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  222524             : // Start of memberFunctionString
  222525             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  222526             : 
  222527             : // *** COMMON CODE SECTION BEGINS HERE ***
  222528             : 
  222529             :     public:
  222530             : 
  222531             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  222532             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  222533             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  222534             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  222535             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  222536             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  222537             : 
  222538             :       /*! \brief returns a string representing the class name */
  222539             :           virtual std::string class_name() const override;
  222540             : 
  222541             :       /*! \brief returns new style SageIII enum values */
  222542             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  222543             : 
  222544             :       /*! \brief static variant value */
  222545             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  222546             :        // static const VariantT static_variant = V_SgUpirSyncStatement;
  222547             :           enum { static_variant = V_SgUpirSyncStatement };
  222548             : 
  222549             :        /* the generated cast function */
  222550             :       /*! \brief Casts pointer from base class to derived class */
  222551             :           ROSE_DLL_API friend       SgUpirSyncStatement* isSgUpirSyncStatement(       SgNode * s );
  222552             : 
  222553             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  222554             :           ROSE_DLL_API friend const SgUpirSyncStatement* isSgUpirSyncStatement( const SgNode * s );
  222555             : 
  222556             :      // ******************************************
  222557             :      // * Memory Pool / New / Delete
  222558             :      // ******************************************
  222559             : 
  222560             :      public:
  222561             :           /// \private
  222562             :           static const unsigned pool_size; //
  222563             :           /// \private
  222564             :           static std::vector<unsigned char *> pools; //
  222565             :           /// \private
  222566             :           static SgUpirSyncStatement * next_node; // 
  222567             : 
  222568             :           /// \private
  222569             :           static unsigned long initializeStorageClassArray(SgUpirSyncStatementStorageClass *); //
  222570             : 
  222571             :           /// \private
  222572             :           static void clearMemoryPool(); //
  222573             :           static void deleteMemoryPool(); //
  222574             : 
  222575             :           /// \private
  222576             :           static void extendMemoryPoolForFileIO(); //
  222577             : 
  222578             :           /// \private
  222579             :           static SgUpirSyncStatement * getPointerFromGlobalIndex(unsigned long); //
  222580             :           /// \private
  222581             :           static SgUpirSyncStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  222582             : 
  222583             :           /// \private
  222584             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  222585             :           /// \private
  222586             :           static void resetValidFreepointers(); //
  222587             :           /// \private
  222588             :           static unsigned long getNumberOfLastValidPointer(); //
  222589             : 
  222590             : 
  222591             : #if defined(INLINE_FUNCTIONS)
  222592             :       /*! \brief returns pointer to newly allocated IR node */
  222593             :           inline void *operator new (size_t size);
  222594             : #else
  222595             :       /*! \brief returns pointer to newly allocated IR node */
  222596             :           void *operator new (size_t size);
  222597             : #endif
  222598             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  222599             :           void operator delete (void* pointer, size_t size);
  222600             : 
  222601             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  222602           0 :           void operator delete (void* pointer)
  222603             :              {
  222604             :             // This is the generated delete operator...
  222605           0 :                SgUpirSyncStatement::operator delete (pointer,sizeof(SgUpirSyncStatement));
  222606             :              }
  222607             : 
  222608             :       /*! \brief Returns the total number of IR nodes of this type */
  222609             :           static size_t numberOfNodes();
  222610             : 
  222611             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  222612             :           static size_t memoryUsage();
  222613             : 
  222614             :       // End of scope which started in IR nodes specific code 
  222615             :       /* */
  222616             : 
  222617             :       /* name Internal Functions
  222618             :           \brief Internal functions ... incomplete-documentation
  222619             : 
  222620             :           These functions have been made public as part of the design, but they are suggested for internal use 
  222621             :           or by particularly knowledgeable users for specialized tools or applications.
  222622             : 
  222623             :           \internal We could not make these private because they are required by user for special purposes. And 
  222624             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  222625             :          
  222626             :        */
  222627             : 
  222628             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  222629             :        // overridden in every class by *generated* implementation
  222630             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  222631             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  222632             :        // MS: 06/28/02 container of names of variables or container indices 
  222633             :        // used used in the traversal to access AST successor nodes
  222634             :        // overridden in every class by *generated* implementation
  222635             :       /*! \brief container of names of variables or container indices used used in the traversal
  222636             :           to access AST successor nodes overridden in every class by *generated* implementation */
  222637             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  222638             : 
  222639             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  222640             :        // than all the vector copies. The implementation for these functions is generated for each class.
  222641             :       /*! \brief return number of children in the traversal successor list */
  222642             :           virtual size_t get_numberOfTraversalSuccessors() override;
  222643             :       /*! \brief index-based access to traversal successors by index number */
  222644             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  222645             :       /*! \brief index-based access to traversal successors by child node */
  222646             :           virtual size_t get_childIndex(SgNode *child) override;
  222647             : 
  222648             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  222649             :        // MS: 08/16/2002 method for generating RTI information
  222650             :       /*! \brief return C++ Runtime-Time-Information */
  222651             :           virtual RTIReturnType roseRTI() override;
  222652             : #endif
  222653             :       /* */
  222654             : 
  222655             : 
  222656             : 
  222657             :       /* name Deprecated Functions
  222658             :           \brief Deprecated functions ... incomplete-documentation
  222659             : 
  222660             :           These functions have been deprecated from use.
  222661             :        */
  222662             :       /* */
  222663             : 
  222664             :       /*! returns a C style string (char*) representing the class name */
  222665             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  222666             : 
  222667             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  222668             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  222669             : #if 0
  222670             :       /*! returns old style Sage II enum values */
  222671             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  222672             :       /*! returns old style Sage II enum values */
  222673             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  222674             : #endif
  222675             :       /* */
  222676             : 
  222677             : 
  222678             : 
  222679             : 
  222680             :      public:
  222681             :       /* name Traversal Support Functions
  222682             :           \brief Traversal support functions ... incomplete-documentation
  222683             : 
  222684             :           These functions have been made public as part of the design, but they are suggested for internal use 
  222685             :           or by particularly knowledgable users for specialized tools or applications.
  222686             :        */
  222687             :       /* */
  222688             : 
  222689             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  222690             :        // (inferior to ROSE traversal mechanism, experimental).
  222691             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  222692             :        */
  222693             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  222694             : 
  222695             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  222696             :       /*! \brief support for the classic visitor pattern done in GoF */
  222697             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  222698             : 
  222699             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  222700             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  222701             :        */
  222702             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  222703             : 
  222704             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  222705             :        */
  222706             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  222707             : 
  222708             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  222709             :        // This traversal helps support internal tools that call static member functions.
  222710             :        // note: this function operates on the memory pools.
  222711             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  222712             :        */
  222713             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  222714             :       /* */
  222715             : 
  222716             : 
  222717             :      public:
  222718             :       /* name Memory Allocation Functions
  222719             :           \brief Memory allocations functions ... incomplete-documentation
  222720             : 
  222721             :           These functions have been made public as part of the design, but they are suggested for internal use 
  222722             :           or by particularly knowledgable users for specialized tools or applications.
  222723             :        */
  222724             :       /* */
  222725             : 
  222726             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  222727             : 
  222728             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  222729             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  222730             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  222731             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  222732             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  222733             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  222734             :           being used with the AST File I/O mechanism.
  222735             :        */
  222736             :           virtual bool isInMemoryPool() override;
  222737             : 
  222738             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  222739             : 
  222740             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  222741             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  222742             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  222743             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  222744             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  222745             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  222746             :           being used with the AST File I/O mechanism.
  222747             :        */
  222748             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  222749             : 
  222750             :       // DQ (4/30/2006): Modified to be a const function.
  222751             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  222752             : 
  222753             :           This functions is part of general support for many possible tools to operate 
  222754             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  222755             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  222756             :           less than the set of pointers used by the AST file I/O. This is part of
  222757             :           work implemented by Andreas, and support tools such as the AST graph generation.
  222758             : 
  222759             :           \warning This function can return unexpected data members and thus the 
  222760             :                    order and the number of elements is unpredicable and subject 
  222761             :                    to change.
  222762             : 
  222763             :           \returns STL vector of pairs of SgNode* and strings
  222764             :        */
  222765             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  222766             : 
  222767             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  222768             : 
  222769             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  222770             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  222771             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  222772             : 
  222773             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  222774             :                    and subject to change.
  222775             :        */
  222776             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  222777             : 
  222778             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  222779             : 
  222780             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  222781             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  222782             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  222783             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  222784             : 
  222785             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  222786             : 
  222787             :           \returns long
  222788             :        */
  222789             :           virtual long getChildIndex( SgNode* childNode ) const override;
  222790             : 
  222791             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  222792             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  222793             :       /* \brief Constructor for use by AST File I/O Mechanism
  222794             : 
  222795             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  222796             :           which obtained via fast binary file I/O from disk.
  222797             :        */
  222798             :        // SgUpirSyncStatement( SgUpirSyncStatementStorageClass& source );
  222799             : 
  222800             : 
  222801             : 
  222802             : 
  222803             : 
  222804             :  // JH (10/24/2005): methods added to support the ast file IO
  222805             :     private:
  222806             : 
  222807             :       /* name AST Memory Allocation Support Functions
  222808             :           \brief Memory allocations support....
  222809             : 
  222810             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  222811             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  222812             :           and support the AST File I/O Mechanism.
  222813             :        */
  222814             :       /* */
  222815             : 
  222816             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  222817             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  222818             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  222819             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  222820             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  222821             :           a correspinding one in the AST_FILE_IO class!
  222822             :        */
  222823             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  222824             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  222825             :       /* \brief Typedef used for low level memory access.
  222826             :        */
  222827             :        // typedef unsigned char* TestType;
  222828             : 
  222829             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  222830             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  222831             :       /* \brief Typedef used to hold memory addresses as values.
  222832             :        */
  222833             :        // typedef unsigned long  AddressType;
  222834             : 
  222835             : 
  222836             : 
  222837             :        // necessary, to have direct access to the p_freepointer and the private methods !
  222838             :       /*! \brief friend class declaration to support AST File I/O */
  222839             :           friend class AST_FILE_IO;
  222840             : 
  222841             :       /*! \brief friend class declaration to support AST File I/O */
  222842             :           friend class SgUpirSyncStatementStorageClass;
  222843             : 
  222844             :       /*! \brief friend class declaration to support AST File I/O */
  222845             :           friend class AstSpecificDataManagingClass;
  222846             : 
  222847             :       /*! \brief friend class declaration to support AST File I/O */
  222848             :           friend class AstSpecificDataManagingClassStorageClass;
  222849             :     public:
  222850             :       /*! \brief IR node constructor to support AST File I/O */
  222851             :           SgUpirSyncStatement( const SgUpirSyncStatementStorageClass& source );
  222852             : 
  222853             :  // private: // JJW hack
  222854             :        /*
  222855             :           name AST Memory Allocation Support Variables
  222856             :           Memory allocations support variables 
  222857             : 
  222858             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  222859             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  222860             :           and support the AST File I/O Mechanism.
  222861             :        */
  222862             :       /* */
  222863             : 
  222864             :     public:
  222865             : 
  222866             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  222867             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  222868             :       // virtual SgNode* addRegExpAttribute();
  222869             :       /*! \brief Support for AST matching using regular expression.
  222870             : 
  222871             :           This support is incomplete and the subject of current research to define 
  222872             :           RegEx trees to support inexact matching.
  222873             :        */
  222874             :           SgUpirSyncStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  222875             : 
  222876             : // *** COMMON CODE SECTION ENDS HERE ***
  222877             : 
  222878             : 
  222879             : // End of memberFunctionString
  222880             : // Start of memberFunctionString
  222881             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  222882             : 
  222883             :      // the generated cast function
  222884             :      // friend ROSE_DLL_API SgUpirSyncStatement* isSgUpirSyncStatement ( SgNode* s );
  222885             : 
  222886             :           typedef SgUpirFieldStatement base_node_type;
  222887             : 
  222888             : 
  222889             : // End of memberFunctionString
  222890             : // Start of memberFunctionString
  222891             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  222892             : 
  222893             :           void post_construction_initialization() override;
  222894             : 
  222895             : 
  222896             : // End of memberFunctionString
  222897             : 
  222898             : 
  222899             :      public: 
  222900             :          virtual ~SgUpirSyncStatement();
  222901             : 
  222902             : 
  222903             :      public: 
  222904             :          SgUpirSyncStatement(Sg_File_Info* startOfConstruct ); 
  222905             :          SgUpirSyncStatement(); 
  222906             : 
  222907             :     protected:
  222908             : 
  222909             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirSyncStatement>;
  222910             : 
  222911             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222912             : 
  222913             : 
  222914             :    };
  222915             : #endif
  222916             : 
  222917             : // postdeclarations for SgUpirSyncStatement
  222918             : 
  222919             : /* #line 222920 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222920             : 
  222921             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  222922             : 
  222923             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222924             : 
  222925             : 
  222926             : /* #line 222927 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222927             : 
  222928             : 
  222929             : 
  222930             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222931             : 
  222932             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  222933             : //      This code is automatically generated for each 
  222934             : //      terminal and non-terminal within the defined 
  222935             : //      grammar.  There is a simple way to change the 
  222936             : //      code to fix bugs etc.  See the ROSE README file
  222937             : //      for directions.
  222938             : 
  222939             : // tps: (02/22/2010): Adding DLL export requirements
  222940             : #include "rosedll.h"
  222941             : 
  222942             : // predeclarations for SgUpirLoopParallelStatement
  222943             : 
  222944             : /* #line 222945 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222945             : 
  222946             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  222947             : 
  222948             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  222949             : 
  222950             : #if 1
  222951             : // Class Definition for SgUpirLoopParallelStatement
  222952             : class ROSE_DLL_API SgUpirLoopParallelStatement  : public SgUpirFieldStatement
  222953             :    {
  222954             :      public:
  222955             : 
  222956             : 
  222957             : /* #line 222958 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  222958             : 
  222959             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  222960             : // Start of memberFunctionString
  222961             : /* #line 18997 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  222962             : 
  222963             :       virtual bool replace_child(SgStatement *,SgStatement *, bool extractListFromBasicBlock = false) override;
  222964             : 
  222965             :       public:
  222966             : 
  222967             : 
  222968             : // End of memberFunctionString
  222969             : // Start of memberFunctionString
  222970             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  222971             : 
  222972             : // *** COMMON CODE SECTION BEGINS HERE ***
  222973             : 
  222974             :     public:
  222975             : 
  222976             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  222977             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  222978             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  222979             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  222980             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  222981             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  222982             : 
  222983             :       /*! \brief returns a string representing the class name */
  222984             :           virtual std::string class_name() const override;
  222985             : 
  222986             :       /*! \brief returns new style SageIII enum values */
  222987             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  222988             : 
  222989             :       /*! \brief static variant value */
  222990             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  222991             :        // static const VariantT static_variant = V_SgUpirLoopParallelStatement;
  222992             :           enum { static_variant = V_SgUpirLoopParallelStatement };
  222993             : 
  222994             :        /* the generated cast function */
  222995             :       /*! \brief Casts pointer from base class to derived class */
  222996             :           ROSE_DLL_API friend       SgUpirLoopParallelStatement* isSgUpirLoopParallelStatement(       SgNode * s );
  222997             : 
  222998             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  222999             :           ROSE_DLL_API friend const SgUpirLoopParallelStatement* isSgUpirLoopParallelStatement( const SgNode * s );
  223000             : 
  223001             :      // ******************************************
  223002             :      // * Memory Pool / New / Delete
  223003             :      // ******************************************
  223004             : 
  223005             :      public:
  223006             :           /// \private
  223007             :           static const unsigned pool_size; //
  223008             :           /// \private
  223009             :           static std::vector<unsigned char *> pools; //
  223010             :           /// \private
  223011             :           static SgUpirLoopParallelStatement * next_node; // 
  223012             : 
  223013             :           /// \private
  223014             :           static unsigned long initializeStorageClassArray(SgUpirLoopParallelStatementStorageClass *); //
  223015             : 
  223016             :           /// \private
  223017             :           static void clearMemoryPool(); //
  223018             :           static void deleteMemoryPool(); //
  223019             : 
  223020             :           /// \private
  223021             :           static void extendMemoryPoolForFileIO(); //
  223022             : 
  223023             :           /// \private
  223024             :           static SgUpirLoopParallelStatement * getPointerFromGlobalIndex(unsigned long); //
  223025             :           /// \private
  223026             :           static SgUpirLoopParallelStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  223027             : 
  223028             :           /// \private
  223029             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  223030             :           /// \private
  223031             :           static void resetValidFreepointers(); //
  223032             :           /// \private
  223033             :           static unsigned long getNumberOfLastValidPointer(); //
  223034             : 
  223035             : 
  223036             : #if defined(INLINE_FUNCTIONS)
  223037             :       /*! \brief returns pointer to newly allocated IR node */
  223038             :           inline void *operator new (size_t size);
  223039             : #else
  223040             :       /*! \brief returns pointer to newly allocated IR node */
  223041             :           void *operator new (size_t size);
  223042             : #endif
  223043             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  223044             :           void operator delete (void* pointer, size_t size);
  223045             : 
  223046             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  223047           0 :           void operator delete (void* pointer)
  223048             :              {
  223049             :             // This is the generated delete operator...
  223050           0 :                SgUpirLoopParallelStatement::operator delete (pointer,sizeof(SgUpirLoopParallelStatement));
  223051             :              }
  223052             : 
  223053             :       /*! \brief Returns the total number of IR nodes of this type */
  223054             :           static size_t numberOfNodes();
  223055             : 
  223056             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  223057             :           static size_t memoryUsage();
  223058             : 
  223059             :       // End of scope which started in IR nodes specific code 
  223060             :       /* */
  223061             : 
  223062             :       /* name Internal Functions
  223063             :           \brief Internal functions ... incomplete-documentation
  223064             : 
  223065             :           These functions have been made public as part of the design, but they are suggested for internal use 
  223066             :           or by particularly knowledgeable users for specialized tools or applications.
  223067             : 
  223068             :           \internal We could not make these private because they are required by user for special purposes. And 
  223069             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  223070             :          
  223071             :        */
  223072             : 
  223073             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  223074             :        // overridden in every class by *generated* implementation
  223075             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  223076             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  223077             :        // MS: 06/28/02 container of names of variables or container indices 
  223078             :        // used used in the traversal to access AST successor nodes
  223079             :        // overridden in every class by *generated* implementation
  223080             :       /*! \brief container of names of variables or container indices used used in the traversal
  223081             :           to access AST successor nodes overridden in every class by *generated* implementation */
  223082             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  223083             : 
  223084             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  223085             :        // than all the vector copies. The implementation for these functions is generated for each class.
  223086             :       /*! \brief return number of children in the traversal successor list */
  223087             :           virtual size_t get_numberOfTraversalSuccessors() override;
  223088             :       /*! \brief index-based access to traversal successors by index number */
  223089             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  223090             :       /*! \brief index-based access to traversal successors by child node */
  223091             :           virtual size_t get_childIndex(SgNode *child) override;
  223092             : 
  223093             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  223094             :        // MS: 08/16/2002 method for generating RTI information
  223095             :       /*! \brief return C++ Runtime-Time-Information */
  223096             :           virtual RTIReturnType roseRTI() override;
  223097             : #endif
  223098             :       /* */
  223099             : 
  223100             : 
  223101             : 
  223102             :       /* name Deprecated Functions
  223103             :           \brief Deprecated functions ... incomplete-documentation
  223104             : 
  223105             :           These functions have been deprecated from use.
  223106             :        */
  223107             :       /* */
  223108             : 
  223109             :       /*! returns a C style string (char*) representing the class name */
  223110             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  223111             : 
  223112             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  223113             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  223114             : #if 0
  223115             :       /*! returns old style Sage II enum values */
  223116             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  223117             :       /*! returns old style Sage II enum values */
  223118             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  223119             : #endif
  223120             :       /* */
  223121             : 
  223122             : 
  223123             : 
  223124             : 
  223125             :      public:
  223126             :       /* name Traversal Support Functions
  223127             :           \brief Traversal support functions ... incomplete-documentation
  223128             : 
  223129             :           These functions have been made public as part of the design, but they are suggested for internal use 
  223130             :           or by particularly knowledgable users for specialized tools or applications.
  223131             :        */
  223132             :       /* */
  223133             : 
  223134             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  223135             :        // (inferior to ROSE traversal mechanism, experimental).
  223136             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  223137             :        */
  223138             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  223139             : 
  223140             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  223141             :       /*! \brief support for the classic visitor pattern done in GoF */
  223142             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  223143             : 
  223144             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  223145             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  223146             :        */
  223147             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  223148             : 
  223149             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  223150             :        */
  223151             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  223152             : 
  223153             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  223154             :        // This traversal helps support internal tools that call static member functions.
  223155             :        // note: this function operates on the memory pools.
  223156             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  223157             :        */
  223158             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  223159             :       /* */
  223160             : 
  223161             : 
  223162             :      public:
  223163             :       /* name Memory Allocation Functions
  223164             :           \brief Memory allocations functions ... incomplete-documentation
  223165             : 
  223166             :           These functions have been made public as part of the design, but they are suggested for internal use 
  223167             :           or by particularly knowledgable users for specialized tools or applications.
  223168             :        */
  223169             :       /* */
  223170             : 
  223171             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  223172             : 
  223173             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  223174             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  223175             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  223176             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  223177             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  223178             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  223179             :           being used with the AST File I/O mechanism.
  223180             :        */
  223181             :           virtual bool isInMemoryPool() override;
  223182             : 
  223183             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  223184             : 
  223185             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  223186             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  223187             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  223188             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  223189             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  223190             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  223191             :           being used with the AST File I/O mechanism.
  223192             :        */
  223193             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  223194             : 
  223195             :       // DQ (4/30/2006): Modified to be a const function.
  223196             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  223197             : 
  223198             :           This functions is part of general support for many possible tools to operate 
  223199             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  223200             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  223201             :           less than the set of pointers used by the AST file I/O. This is part of
  223202             :           work implemented by Andreas, and support tools such as the AST graph generation.
  223203             : 
  223204             :           \warning This function can return unexpected data members and thus the 
  223205             :                    order and the number of elements is unpredicable and subject 
  223206             :                    to change.
  223207             : 
  223208             :           \returns STL vector of pairs of SgNode* and strings
  223209             :        */
  223210             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  223211             : 
  223212             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  223213             : 
  223214             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  223215             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  223216             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  223217             : 
  223218             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  223219             :                    and subject to change.
  223220             :        */
  223221             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  223222             : 
  223223             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  223224             : 
  223225             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  223226             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  223227             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  223228             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  223229             : 
  223230             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  223231             : 
  223232             :           \returns long
  223233             :        */
  223234             :           virtual long getChildIndex( SgNode* childNode ) const override;
  223235             : 
  223236             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  223237             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  223238             :       /* \brief Constructor for use by AST File I/O Mechanism
  223239             : 
  223240             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  223241             :           which obtained via fast binary file I/O from disk.
  223242             :        */
  223243             :        // SgUpirLoopParallelStatement( SgUpirLoopParallelStatementStorageClass& source );
  223244             : 
  223245             : 
  223246             : 
  223247             : 
  223248             : 
  223249             :  // JH (10/24/2005): methods added to support the ast file IO
  223250             :     private:
  223251             : 
  223252             :       /* name AST Memory Allocation Support Functions
  223253             :           \brief Memory allocations support....
  223254             : 
  223255             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  223256             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  223257             :           and support the AST File I/O Mechanism.
  223258             :        */
  223259             :       /* */
  223260             : 
  223261             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  223262             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  223263             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  223264             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  223265             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  223266             :           a correspinding one in the AST_FILE_IO class!
  223267             :        */
  223268             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  223269             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  223270             :       /* \brief Typedef used for low level memory access.
  223271             :        */
  223272             :        // typedef unsigned char* TestType;
  223273             : 
  223274             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  223275             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  223276             :       /* \brief Typedef used to hold memory addresses as values.
  223277             :        */
  223278             :        // typedef unsigned long  AddressType;
  223279             : 
  223280             : 
  223281             : 
  223282             :        // necessary, to have direct access to the p_freepointer and the private methods !
  223283             :       /*! \brief friend class declaration to support AST File I/O */
  223284             :           friend class AST_FILE_IO;
  223285             : 
  223286             :       /*! \brief friend class declaration to support AST File I/O */
  223287             :           friend class SgUpirLoopParallelStatementStorageClass;
  223288             : 
  223289             :       /*! \brief friend class declaration to support AST File I/O */
  223290             :           friend class AstSpecificDataManagingClass;
  223291             : 
  223292             :       /*! \brief friend class declaration to support AST File I/O */
  223293             :           friend class AstSpecificDataManagingClassStorageClass;
  223294             :     public:
  223295             :       /*! \brief IR node constructor to support AST File I/O */
  223296             :           SgUpirLoopParallelStatement( const SgUpirLoopParallelStatementStorageClass& source );
  223297             : 
  223298             :  // private: // JJW hack
  223299             :        /*
  223300             :           name AST Memory Allocation Support Variables
  223301             :           Memory allocations support variables 
  223302             : 
  223303             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  223304             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  223305             :           and support the AST File I/O Mechanism.
  223306             :        */
  223307             :       /* */
  223308             : 
  223309             :     public:
  223310             : 
  223311             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  223312             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  223313             :       // virtual SgNode* addRegExpAttribute();
  223314             :       /*! \brief Support for AST matching using regular expression.
  223315             : 
  223316             :           This support is incomplete and the subject of current research to define 
  223317             :           RegEx trees to support inexact matching.
  223318             :        */
  223319             :           SgUpirLoopParallelStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  223320             : 
  223321             : // *** COMMON CODE SECTION ENDS HERE ***
  223322             : 
  223323             : 
  223324             : // End of memberFunctionString
  223325             : // Start of memberFunctionString
  223326             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  223327             : 
  223328             :      // the generated cast function
  223329             :      // friend ROSE_DLL_API SgUpirLoopParallelStatement* isSgUpirLoopParallelStatement ( SgNode* s );
  223330             : 
  223331             :           typedef SgUpirFieldStatement base_node_type;
  223332             : 
  223333             : 
  223334             : // End of memberFunctionString
  223335             : // Start of memberFunctionString
  223336             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  223337             : 
  223338             :           void post_construction_initialization() override;
  223339             : 
  223340             : 
  223341             : // End of memberFunctionString
  223342             : 
  223343             :      public: 
  223344             :          SgStatement* get_worksharing() const;
  223345             :          void set_worksharing(SgStatement* worksharing);
  223346             : 
  223347             :      public: 
  223348             :          SgStatement* get_simd() const;
  223349             :          void set_simd(SgStatement* simd);
  223350             : 
  223351             :      public: 
  223352             :          SgStatement* get_taskloop() const;
  223353             :          void set_taskloop(SgStatement* taskloop);
  223354             : 
  223355             :      public: 
  223356             :          SgStatement* get_loop() const;
  223357             :          void set_loop(SgStatement* loop);
  223358             : 
  223359             : 
  223360             :      public: 
  223361             :          virtual ~SgUpirLoopParallelStatement();
  223362             : 
  223363             : 
  223364             :      public: 
  223365             :          SgUpirLoopParallelStatement(Sg_File_Info* startOfConstruct ); 
  223366             :          SgUpirLoopParallelStatement(); 
  223367             : 
  223368             :     protected:
  223369             : // Start of memberFunctionString
  223370             : SgStatement* p_worksharing;
  223371             :           
  223372             : // End of memberFunctionString
  223373             : // Start of memberFunctionString
  223374             : SgStatement* p_simd;
  223375             :           
  223376             : // End of memberFunctionString
  223377             : // Start of memberFunctionString
  223378             : SgStatement* p_taskloop;
  223379             :           
  223380             : // End of memberFunctionString
  223381             : // Start of memberFunctionString
  223382             : SgStatement* p_loop;
  223383             :           
  223384             : // End of memberFunctionString
  223385             : 
  223386             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirLoopParallelStatement>;
  223387             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopParallelStatement, SgStatement*,&SgUpirLoopParallelStatement::p_worksharing>;
  223388             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopParallelStatement, SgStatement*,&SgUpirLoopParallelStatement::p_simd>;
  223389             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopParallelStatement, SgStatement*,&SgUpirLoopParallelStatement::p_taskloop>;
  223390             :     friend struct Rose::Traits::generated::describe_field_t<SgUpirLoopParallelStatement, SgStatement*,&SgUpirLoopParallelStatement::p_loop>;
  223391             : 
  223392             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223393             : 
  223394             : 
  223395             :    };
  223396             : #endif
  223397             : 
  223398             : // postdeclarations for SgUpirLoopParallelStatement
  223399             : 
  223400             : /* #line 223401 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223401             : 
  223402             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  223403             : 
  223404             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223405             : 
  223406             : 
  223407             : /* #line 223408 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223408             : 
  223409             : 
  223410             : 
  223411             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223412             : 
  223413             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  223414             : //      This code is automatically generated for each 
  223415             : //      terminal and non-terminal within the defined 
  223416             : //      grammar.  There is a simple way to change the 
  223417             : //      code to fix bugs etc.  See the ROSE README file
  223418             : //      for directions.
  223419             : 
  223420             : // tps: (02/22/2010): Adding DLL export requirements
  223421             : #include "rosedll.h"
  223422             : 
  223423             : // predeclarations for SgUpirWorksharingStatement
  223424             : 
  223425             : /* #line 223426 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223426             : 
  223427             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  223428             : 
  223429             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223430             : 
  223431             : #if 1
  223432             : // Class Definition for SgUpirWorksharingStatement
  223433             : class ROSE_DLL_API SgUpirWorksharingStatement  : public SgUpirFieldStatement
  223434             :    {
  223435             :      public:
  223436             : 
  223437             : 
  223438             : /* #line 223439 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223439             : 
  223440             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  223441             : // Start of memberFunctionString
  223442             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  223443             : 
  223444             : // *** COMMON CODE SECTION BEGINS HERE ***
  223445             : 
  223446             :     public:
  223447             : 
  223448             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  223449             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  223450             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  223451             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  223452             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  223453             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  223454             : 
  223455             :       /*! \brief returns a string representing the class name */
  223456             :           virtual std::string class_name() const override;
  223457             : 
  223458             :       /*! \brief returns new style SageIII enum values */
  223459             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  223460             : 
  223461             :       /*! \brief static variant value */
  223462             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  223463             :        // static const VariantT static_variant = V_SgUpirWorksharingStatement;
  223464             :           enum { static_variant = V_SgUpirWorksharingStatement };
  223465             : 
  223466             :        /* the generated cast function */
  223467             :       /*! \brief Casts pointer from base class to derived class */
  223468             :           ROSE_DLL_API friend       SgUpirWorksharingStatement* isSgUpirWorksharingStatement(       SgNode * s );
  223469             : 
  223470             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  223471             :           ROSE_DLL_API friend const SgUpirWorksharingStatement* isSgUpirWorksharingStatement( const SgNode * s );
  223472             : 
  223473             :      // ******************************************
  223474             :      // * Memory Pool / New / Delete
  223475             :      // ******************************************
  223476             : 
  223477             :      public:
  223478             :           /// \private
  223479             :           static const unsigned pool_size; //
  223480             :           /// \private
  223481             :           static std::vector<unsigned char *> pools; //
  223482             :           /// \private
  223483             :           static SgUpirWorksharingStatement * next_node; // 
  223484             : 
  223485             :           /// \private
  223486             :           static unsigned long initializeStorageClassArray(SgUpirWorksharingStatementStorageClass *); //
  223487             : 
  223488             :           /// \private
  223489             :           static void clearMemoryPool(); //
  223490             :           static void deleteMemoryPool(); //
  223491             : 
  223492             :           /// \private
  223493             :           static void extendMemoryPoolForFileIO(); //
  223494             : 
  223495             :           /// \private
  223496             :           static SgUpirWorksharingStatement * getPointerFromGlobalIndex(unsigned long); //
  223497             :           /// \private
  223498             :           static SgUpirWorksharingStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  223499             : 
  223500             :           /// \private
  223501             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  223502             :           /// \private
  223503             :           static void resetValidFreepointers(); //
  223504             :           /// \private
  223505             :           static unsigned long getNumberOfLastValidPointer(); //
  223506             : 
  223507             : 
  223508             : #if defined(INLINE_FUNCTIONS)
  223509             :       /*! \brief returns pointer to newly allocated IR node */
  223510             :           inline void *operator new (size_t size);
  223511             : #else
  223512             :       /*! \brief returns pointer to newly allocated IR node */
  223513             :           void *operator new (size_t size);
  223514             : #endif
  223515             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  223516             :           void operator delete (void* pointer, size_t size);
  223517             : 
  223518             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  223519           0 :           void operator delete (void* pointer)
  223520             :              {
  223521             :             // This is the generated delete operator...
  223522           0 :                SgUpirWorksharingStatement::operator delete (pointer,sizeof(SgUpirWorksharingStatement));
  223523             :              }
  223524             : 
  223525             :       /*! \brief Returns the total number of IR nodes of this type */
  223526             :           static size_t numberOfNodes();
  223527             : 
  223528             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  223529             :           static size_t memoryUsage();
  223530             : 
  223531             :       // End of scope which started in IR nodes specific code 
  223532             :       /* */
  223533             : 
  223534             :       /* name Internal Functions
  223535             :           \brief Internal functions ... incomplete-documentation
  223536             : 
  223537             :           These functions have been made public as part of the design, but they are suggested for internal use 
  223538             :           or by particularly knowledgeable users for specialized tools or applications.
  223539             : 
  223540             :           \internal We could not make these private because they are required by user for special purposes. And 
  223541             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  223542             :          
  223543             :        */
  223544             : 
  223545             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  223546             :        // overridden in every class by *generated* implementation
  223547             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  223548             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  223549             :        // MS: 06/28/02 container of names of variables or container indices 
  223550             :        // used used in the traversal to access AST successor nodes
  223551             :        // overridden in every class by *generated* implementation
  223552             :       /*! \brief container of names of variables or container indices used used in the traversal
  223553             :           to access AST successor nodes overridden in every class by *generated* implementation */
  223554             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  223555             : 
  223556             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  223557             :        // than all the vector copies. The implementation for these functions is generated for each class.
  223558             :       /*! \brief return number of children in the traversal successor list */
  223559             :           virtual size_t get_numberOfTraversalSuccessors() override;
  223560             :       /*! \brief index-based access to traversal successors by index number */
  223561             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  223562             :       /*! \brief index-based access to traversal successors by child node */
  223563             :           virtual size_t get_childIndex(SgNode *child) override;
  223564             : 
  223565             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  223566             :        // MS: 08/16/2002 method for generating RTI information
  223567             :       /*! \brief return C++ Runtime-Time-Information */
  223568             :           virtual RTIReturnType roseRTI() override;
  223569             : #endif
  223570             :       /* */
  223571             : 
  223572             : 
  223573             : 
  223574             :       /* name Deprecated Functions
  223575             :           \brief Deprecated functions ... incomplete-documentation
  223576             : 
  223577             :           These functions have been deprecated from use.
  223578             :        */
  223579             :       /* */
  223580             : 
  223581             :       /*! returns a C style string (char*) representing the class name */
  223582             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  223583             : 
  223584             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  223585             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  223586             : #if 0
  223587             :       /*! returns old style Sage II enum values */
  223588             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  223589             :       /*! returns old style Sage II enum values */
  223590             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  223591             : #endif
  223592             :       /* */
  223593             : 
  223594             : 
  223595             : 
  223596             : 
  223597             :      public:
  223598             :       /* name Traversal Support Functions
  223599             :           \brief Traversal support functions ... incomplete-documentation
  223600             : 
  223601             :           These functions have been made public as part of the design, but they are suggested for internal use 
  223602             :           or by particularly knowledgable users for specialized tools or applications.
  223603             :        */
  223604             :       /* */
  223605             : 
  223606             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  223607             :        // (inferior to ROSE traversal mechanism, experimental).
  223608             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  223609             :        */
  223610             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  223611             : 
  223612             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  223613             :       /*! \brief support for the classic visitor pattern done in GoF */
  223614             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  223615             : 
  223616             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  223617             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  223618             :        */
  223619             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  223620             : 
  223621             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  223622             :        */
  223623             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  223624             : 
  223625             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  223626             :        // This traversal helps support internal tools that call static member functions.
  223627             :        // note: this function operates on the memory pools.
  223628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  223629             :        */
  223630             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  223631             :       /* */
  223632             : 
  223633             : 
  223634             :      public:
  223635             :       /* name Memory Allocation Functions
  223636             :           \brief Memory allocations functions ... incomplete-documentation
  223637             : 
  223638             :           These functions have been made public as part of the design, but they are suggested for internal use 
  223639             :           or by particularly knowledgable users for specialized tools or applications.
  223640             :        */
  223641             :       /* */
  223642             : 
  223643             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  223644             : 
  223645             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  223646             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  223647             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  223648             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  223649             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  223650             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  223651             :           being used with the AST File I/O mechanism.
  223652             :        */
  223653             :           virtual bool isInMemoryPool() override;
  223654             : 
  223655             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  223656             : 
  223657             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  223658             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  223659             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  223660             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  223661             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  223662             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  223663             :           being used with the AST File I/O mechanism.
  223664             :        */
  223665             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  223666             : 
  223667             :       // DQ (4/30/2006): Modified to be a const function.
  223668             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  223669             : 
  223670             :           This functions is part of general support for many possible tools to operate 
  223671             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  223672             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  223673             :           less than the set of pointers used by the AST file I/O. This is part of
  223674             :           work implemented by Andreas, and support tools such as the AST graph generation.
  223675             : 
  223676             :           \warning This function can return unexpected data members and thus the 
  223677             :                    order and the number of elements is unpredicable and subject 
  223678             :                    to change.
  223679             : 
  223680             :           \returns STL vector of pairs of SgNode* and strings
  223681             :        */
  223682             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  223683             : 
  223684             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  223685             : 
  223686             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  223687             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  223688             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  223689             : 
  223690             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  223691             :                    and subject to change.
  223692             :        */
  223693             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  223694             : 
  223695             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  223696             : 
  223697             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  223698             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  223699             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  223700             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  223701             : 
  223702             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  223703             : 
  223704             :           \returns long
  223705             :        */
  223706             :           virtual long getChildIndex( SgNode* childNode ) const override;
  223707             : 
  223708             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  223709             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  223710             :       /* \brief Constructor for use by AST File I/O Mechanism
  223711             : 
  223712             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  223713             :           which obtained via fast binary file I/O from disk.
  223714             :        */
  223715             :        // SgUpirWorksharingStatement( SgUpirWorksharingStatementStorageClass& source );
  223716             : 
  223717             : 
  223718             : 
  223719             : 
  223720             : 
  223721             :  // JH (10/24/2005): methods added to support the ast file IO
  223722             :     private:
  223723             : 
  223724             :       /* name AST Memory Allocation Support Functions
  223725             :           \brief Memory allocations support....
  223726             : 
  223727             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  223728             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  223729             :           and support the AST File I/O Mechanism.
  223730             :        */
  223731             :       /* */
  223732             : 
  223733             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  223734             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  223735             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  223736             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  223737             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  223738             :           a correspinding one in the AST_FILE_IO class!
  223739             :        */
  223740             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  223741             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  223742             :       /* \brief Typedef used for low level memory access.
  223743             :        */
  223744             :        // typedef unsigned char* TestType;
  223745             : 
  223746             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  223747             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  223748             :       /* \brief Typedef used to hold memory addresses as values.
  223749             :        */
  223750             :        // typedef unsigned long  AddressType;
  223751             : 
  223752             : 
  223753             : 
  223754             :        // necessary, to have direct access to the p_freepointer and the private methods !
  223755             :       /*! \brief friend class declaration to support AST File I/O */
  223756             :           friend class AST_FILE_IO;
  223757             : 
  223758             :       /*! \brief friend class declaration to support AST File I/O */
  223759             :           friend class SgUpirWorksharingStatementStorageClass;
  223760             : 
  223761             :       /*! \brief friend class declaration to support AST File I/O */
  223762             :           friend class AstSpecificDataManagingClass;
  223763             : 
  223764             :       /*! \brief friend class declaration to support AST File I/O */
  223765             :           friend class AstSpecificDataManagingClassStorageClass;
  223766             :     public:
  223767             :       /*! \brief IR node constructor to support AST File I/O */
  223768             :           SgUpirWorksharingStatement( const SgUpirWorksharingStatementStorageClass& source );
  223769             : 
  223770             :  // private: // JJW hack
  223771             :        /*
  223772             :           name AST Memory Allocation Support Variables
  223773             :           Memory allocations support variables 
  223774             : 
  223775             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  223776             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  223777             :           and support the AST File I/O Mechanism.
  223778             :        */
  223779             :       /* */
  223780             : 
  223781             :     public:
  223782             : 
  223783             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  223784             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  223785             :       // virtual SgNode* addRegExpAttribute();
  223786             :       /*! \brief Support for AST matching using regular expression.
  223787             : 
  223788             :           This support is incomplete and the subject of current research to define 
  223789             :           RegEx trees to support inexact matching.
  223790             :        */
  223791             :           SgUpirWorksharingStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  223792             : 
  223793             : // *** COMMON CODE SECTION ENDS HERE ***
  223794             : 
  223795             : 
  223796             : // End of memberFunctionString
  223797             : // Start of memberFunctionString
  223798             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  223799             : 
  223800             :      // the generated cast function
  223801             :      // friend ROSE_DLL_API SgUpirWorksharingStatement* isSgUpirWorksharingStatement ( SgNode* s );
  223802             : 
  223803             :           typedef SgUpirFieldStatement base_node_type;
  223804             : 
  223805             : 
  223806             : // End of memberFunctionString
  223807             : // Start of memberFunctionString
  223808             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  223809             : 
  223810             :           void post_construction_initialization() override;
  223811             : 
  223812             : 
  223813             : // End of memberFunctionString
  223814             : 
  223815             : 
  223816             :      public: 
  223817             :          virtual ~SgUpirWorksharingStatement();
  223818             : 
  223819             : 
  223820             :      public: 
  223821             :          SgUpirWorksharingStatement(Sg_File_Info* startOfConstruct ); 
  223822             :          SgUpirWorksharingStatement(); 
  223823             : 
  223824             :     protected:
  223825             : 
  223826             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirWorksharingStatement>;
  223827             : 
  223828             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223829             : 
  223830             : 
  223831             :    };
  223832             : #endif
  223833             : 
  223834             : // postdeclarations for SgUpirWorksharingStatement
  223835             : 
  223836             : /* #line 223837 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223837             : 
  223838             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  223839             : 
  223840             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223841             : 
  223842             : 
  223843             : /* #line 223844 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223844             : 
  223845             : 
  223846             : 
  223847             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223848             : 
  223849             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  223850             : //      This code is automatically generated for each 
  223851             : //      terminal and non-terminal within the defined 
  223852             : //      grammar.  There is a simple way to change the 
  223853             : //      code to fix bugs etc.  See the ROSE README file
  223854             : //      for directions.
  223855             : 
  223856             : // tps: (02/22/2010): Adding DLL export requirements
  223857             : #include "rosedll.h"
  223858             : 
  223859             : // predeclarations for SgUpirSimdStatement
  223860             : 
  223861             : /* #line 223862 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223862             : 
  223863             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  223864             : 
  223865             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  223866             : 
  223867             : #if 1
  223868             : // Class Definition for SgUpirSimdStatement
  223869             : class ROSE_DLL_API SgUpirSimdStatement  : public SgUpirFieldStatement
  223870             :    {
  223871             :      public:
  223872             : 
  223873             : 
  223874             : /* #line 223875 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  223875             : 
  223876             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  223877             : // Start of memberFunctionString
  223878             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  223879             : 
  223880             : // *** COMMON CODE SECTION BEGINS HERE ***
  223881             : 
  223882             :     public:
  223883             : 
  223884             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  223885             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  223886             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  223887             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  223888             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  223889             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  223890             : 
  223891             :       /*! \brief returns a string representing the class name */
  223892             :           virtual std::string class_name() const override;
  223893             : 
  223894             :       /*! \brief returns new style SageIII enum values */
  223895             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  223896             : 
  223897             :       /*! \brief static variant value */
  223898             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  223899             :        // static const VariantT static_variant = V_SgUpirSimdStatement;
  223900             :           enum { static_variant = V_SgUpirSimdStatement };
  223901             : 
  223902             :        /* the generated cast function */
  223903             :       /*! \brief Casts pointer from base class to derived class */
  223904             :           ROSE_DLL_API friend       SgUpirSimdStatement* isSgUpirSimdStatement(       SgNode * s );
  223905             : 
  223906             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  223907             :           ROSE_DLL_API friend const SgUpirSimdStatement* isSgUpirSimdStatement( const SgNode * s );
  223908             : 
  223909             :      // ******************************************
  223910             :      // * Memory Pool / New / Delete
  223911             :      // ******************************************
  223912             : 
  223913             :      public:
  223914             :           /// \private
  223915             :           static const unsigned pool_size; //
  223916             :           /// \private
  223917             :           static std::vector<unsigned char *> pools; //
  223918             :           /// \private
  223919             :           static SgUpirSimdStatement * next_node; // 
  223920             : 
  223921             :           /// \private
  223922             :           static unsigned long initializeStorageClassArray(SgUpirSimdStatementStorageClass *); //
  223923             : 
  223924             :           /// \private
  223925             :           static void clearMemoryPool(); //
  223926             :           static void deleteMemoryPool(); //
  223927             : 
  223928             :           /// \private
  223929             :           static void extendMemoryPoolForFileIO(); //
  223930             : 
  223931             :           /// \private
  223932             :           static SgUpirSimdStatement * getPointerFromGlobalIndex(unsigned long); //
  223933             :           /// \private
  223934             :           static SgUpirSimdStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  223935             : 
  223936             :           /// \private
  223937             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  223938             :           /// \private
  223939             :           static void resetValidFreepointers(); //
  223940             :           /// \private
  223941             :           static unsigned long getNumberOfLastValidPointer(); //
  223942             : 
  223943             : 
  223944             : #if defined(INLINE_FUNCTIONS)
  223945             :       /*! \brief returns pointer to newly allocated IR node */
  223946             :           inline void *operator new (size_t size);
  223947             : #else
  223948             :       /*! \brief returns pointer to newly allocated IR node */
  223949             :           void *operator new (size_t size);
  223950             : #endif
  223951             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  223952             :           void operator delete (void* pointer, size_t size);
  223953             : 
  223954             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  223955           0 :           void operator delete (void* pointer)
  223956             :              {
  223957             :             // This is the generated delete operator...
  223958           0 :                SgUpirSimdStatement::operator delete (pointer,sizeof(SgUpirSimdStatement));
  223959             :              }
  223960             : 
  223961             :       /*! \brief Returns the total number of IR nodes of this type */
  223962             :           static size_t numberOfNodes();
  223963             : 
  223964             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  223965             :           static size_t memoryUsage();
  223966             : 
  223967             :       // End of scope which started in IR nodes specific code 
  223968             :       /* */
  223969             : 
  223970             :       /* name Internal Functions
  223971             :           \brief Internal functions ... incomplete-documentation
  223972             : 
  223973             :           These functions have been made public as part of the design, but they are suggested for internal use 
  223974             :           or by particularly knowledgeable users for specialized tools or applications.
  223975             : 
  223976             :           \internal We could not make these private because they are required by user for special purposes. And 
  223977             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  223978             :          
  223979             :        */
  223980             : 
  223981             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  223982             :        // overridden in every class by *generated* implementation
  223983             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  223984             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  223985             :        // MS: 06/28/02 container of names of variables or container indices 
  223986             :        // used used in the traversal to access AST successor nodes
  223987             :        // overridden in every class by *generated* implementation
  223988             :       /*! \brief container of names of variables or container indices used used in the traversal
  223989             :           to access AST successor nodes overridden in every class by *generated* implementation */
  223990             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  223991             : 
  223992             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  223993             :        // than all the vector copies. The implementation for these functions is generated for each class.
  223994             :       /*! \brief return number of children in the traversal successor list */
  223995             :           virtual size_t get_numberOfTraversalSuccessors() override;
  223996             :       /*! \brief index-based access to traversal successors by index number */
  223997             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  223998             :       /*! \brief index-based access to traversal successors by child node */
  223999             :           virtual size_t get_childIndex(SgNode *child) override;
  224000             : 
  224001             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  224002             :        // MS: 08/16/2002 method for generating RTI information
  224003             :       /*! \brief return C++ Runtime-Time-Information */
  224004             :           virtual RTIReturnType roseRTI() override;
  224005             : #endif
  224006             :       /* */
  224007             : 
  224008             : 
  224009             : 
  224010             :       /* name Deprecated Functions
  224011             :           \brief Deprecated functions ... incomplete-documentation
  224012             : 
  224013             :           These functions have been deprecated from use.
  224014             :        */
  224015             :       /* */
  224016             : 
  224017             :       /*! returns a C style string (char*) representing the class name */
  224018             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  224019             : 
  224020             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  224021             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  224022             : #if 0
  224023             :       /*! returns old style Sage II enum values */
  224024             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  224025             :       /*! returns old style Sage II enum values */
  224026             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  224027             : #endif
  224028             :       /* */
  224029             : 
  224030             : 
  224031             : 
  224032             : 
  224033             :      public:
  224034             :       /* name Traversal Support Functions
  224035             :           \brief Traversal support functions ... incomplete-documentation
  224036             : 
  224037             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224038             :           or by particularly knowledgable users for specialized tools or applications.
  224039             :        */
  224040             :       /* */
  224041             : 
  224042             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  224043             :        // (inferior to ROSE traversal mechanism, experimental).
  224044             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  224045             :        */
  224046             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  224047             : 
  224048             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  224049             :       /*! \brief support for the classic visitor pattern done in GoF */
  224050             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  224051             : 
  224052             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  224053             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  224054             :        */
  224055             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  224056             : 
  224057             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  224058             :        */
  224059             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  224060             : 
  224061             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  224062             :        // This traversal helps support internal tools that call static member functions.
  224063             :        // note: this function operates on the memory pools.
  224064             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  224065             :        */
  224066             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  224067             :       /* */
  224068             : 
  224069             : 
  224070             :      public:
  224071             :       /* name Memory Allocation Functions
  224072             :           \brief Memory allocations functions ... incomplete-documentation
  224073             : 
  224074             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224075             :           or by particularly knowledgable users for specialized tools or applications.
  224076             :        */
  224077             :       /* */
  224078             : 
  224079             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  224080             : 
  224081             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  224082             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  224083             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  224084             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  224085             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  224086             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  224087             :           being used with the AST File I/O mechanism.
  224088             :        */
  224089             :           virtual bool isInMemoryPool() override;
  224090             : 
  224091             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  224092             : 
  224093             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  224094             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  224095             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  224096             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  224097             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  224098             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  224099             :           being used with the AST File I/O mechanism.
  224100             :        */
  224101             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  224102             : 
  224103             :       // DQ (4/30/2006): Modified to be a const function.
  224104             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  224105             : 
  224106             :           This functions is part of general support for many possible tools to operate 
  224107             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  224108             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  224109             :           less than the set of pointers used by the AST file I/O. This is part of
  224110             :           work implemented by Andreas, and support tools such as the AST graph generation.
  224111             : 
  224112             :           \warning This function can return unexpected data members and thus the 
  224113             :                    order and the number of elements is unpredicable and subject 
  224114             :                    to change.
  224115             : 
  224116             :           \returns STL vector of pairs of SgNode* and strings
  224117             :        */
  224118             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  224119             : 
  224120             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  224121             : 
  224122             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  224123             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  224124             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  224125             : 
  224126             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  224127             :                    and subject to change.
  224128             :        */
  224129             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  224130             : 
  224131             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  224132             : 
  224133             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  224134             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  224135             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  224136             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  224137             : 
  224138             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  224139             : 
  224140             :           \returns long
  224141             :        */
  224142             :           virtual long getChildIndex( SgNode* childNode ) const override;
  224143             : 
  224144             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  224145             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  224146             :       /* \brief Constructor for use by AST File I/O Mechanism
  224147             : 
  224148             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  224149             :           which obtained via fast binary file I/O from disk.
  224150             :        */
  224151             :        // SgUpirSimdStatement( SgUpirSimdStatementStorageClass& source );
  224152             : 
  224153             : 
  224154             : 
  224155             : 
  224156             : 
  224157             :  // JH (10/24/2005): methods added to support the ast file IO
  224158             :     private:
  224159             : 
  224160             :       /* name AST Memory Allocation Support Functions
  224161             :           \brief Memory allocations support....
  224162             : 
  224163             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  224164             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  224165             :           and support the AST File I/O Mechanism.
  224166             :        */
  224167             :       /* */
  224168             : 
  224169             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  224170             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  224171             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  224172             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  224173             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  224174             :           a correspinding one in the AST_FILE_IO class!
  224175             :        */
  224176             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  224177             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  224178             :       /* \brief Typedef used for low level memory access.
  224179             :        */
  224180             :        // typedef unsigned char* TestType;
  224181             : 
  224182             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  224183             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  224184             :       /* \brief Typedef used to hold memory addresses as values.
  224185             :        */
  224186             :        // typedef unsigned long  AddressType;
  224187             : 
  224188             : 
  224189             : 
  224190             :        // necessary, to have direct access to the p_freepointer and the private methods !
  224191             :       /*! \brief friend class declaration to support AST File I/O */
  224192             :           friend class AST_FILE_IO;
  224193             : 
  224194             :       /*! \brief friend class declaration to support AST File I/O */
  224195             :           friend class SgUpirSimdStatementStorageClass;
  224196             : 
  224197             :       /*! \brief friend class declaration to support AST File I/O */
  224198             :           friend class AstSpecificDataManagingClass;
  224199             : 
  224200             :       /*! \brief friend class declaration to support AST File I/O */
  224201             :           friend class AstSpecificDataManagingClassStorageClass;
  224202             :     public:
  224203             :       /*! \brief IR node constructor to support AST File I/O */
  224204             :           SgUpirSimdStatement( const SgUpirSimdStatementStorageClass& source );
  224205             : 
  224206             :  // private: // JJW hack
  224207             :        /*
  224208             :           name AST Memory Allocation Support Variables
  224209             :           Memory allocations support variables 
  224210             : 
  224211             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  224212             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  224213             :           and support the AST File I/O Mechanism.
  224214             :        */
  224215             :       /* */
  224216             : 
  224217             :     public:
  224218             : 
  224219             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  224220             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  224221             :       // virtual SgNode* addRegExpAttribute();
  224222             :       /*! \brief Support for AST matching using regular expression.
  224223             : 
  224224             :           This support is incomplete and the subject of current research to define 
  224225             :           RegEx trees to support inexact matching.
  224226             :        */
  224227             :           SgUpirSimdStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  224228             : 
  224229             : // *** COMMON CODE SECTION ENDS HERE ***
  224230             : 
  224231             : 
  224232             : // End of memberFunctionString
  224233             : // Start of memberFunctionString
  224234             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  224235             : 
  224236             :      // the generated cast function
  224237             :      // friend ROSE_DLL_API SgUpirSimdStatement* isSgUpirSimdStatement ( SgNode* s );
  224238             : 
  224239             :           typedef SgUpirFieldStatement base_node_type;
  224240             : 
  224241             : 
  224242             : // End of memberFunctionString
  224243             : // Start of memberFunctionString
  224244             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  224245             : 
  224246             :           void post_construction_initialization() override;
  224247             : 
  224248             : 
  224249             : // End of memberFunctionString
  224250             : 
  224251             : 
  224252             :      public: 
  224253             :          virtual ~SgUpirSimdStatement();
  224254             : 
  224255             : 
  224256             :      public: 
  224257             :          SgUpirSimdStatement(Sg_File_Info* startOfConstruct ); 
  224258             :          SgUpirSimdStatement(); 
  224259             : 
  224260             :     protected:
  224261             : 
  224262             :     friend struct Rose::Traits::generated::describe_node_t<SgUpirSimdStatement>;
  224263             : 
  224264             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224265             : 
  224266             : 
  224267             :    };
  224268             : #endif
  224269             : 
  224270             : // postdeclarations for SgUpirSimdStatement
  224271             : 
  224272             : /* #line 224273 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224273             : 
  224274             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  224275             : 
  224276             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224277             : 
  224278             : 
  224279             : /* #line 224280 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224280             : 
  224281             : 
  224282             : 
  224283             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224284             : 
  224285             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  224286             : //      This code is automatically generated for each 
  224287             : //      terminal and non-terminal within the defined 
  224288             : //      grammar.  There is a simple way to change the 
  224289             : //      code to fix bugs etc.  See the ROSE README file
  224290             : //      for directions.
  224291             : 
  224292             : // tps: (02/22/2010): Adding DLL export requirements
  224293             : #include "rosedll.h"
  224294             : 
  224295             : // predeclarations for SgOmpDeclareMapperStatement
  224296             : 
  224297             : /* #line 224298 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224298             : 
  224299             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  224300             : 
  224301             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224302             : 
  224303             : #if 1
  224304             : // Class Definition for SgOmpDeclareMapperStatement
  224305             : class ROSE_DLL_API SgOmpDeclareMapperStatement  : public SgUpirBaseStatement
  224306             :    {
  224307             :      public:
  224308             : 
  224309             : 
  224310             : /* #line 224311 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224311             : 
  224312             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  224313             : // Start of memberFunctionString
  224314             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  224315             : 
  224316             : // *** COMMON CODE SECTION BEGINS HERE ***
  224317             : 
  224318             :     public:
  224319             : 
  224320             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  224321             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  224322             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  224323             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  224324             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  224325             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  224326             : 
  224327             :       /*! \brief returns a string representing the class name */
  224328             :           virtual std::string class_name() const override;
  224329             : 
  224330             :       /*! \brief returns new style SageIII enum values */
  224331             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  224332             : 
  224333             :       /*! \brief static variant value */
  224334             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  224335             :        // static const VariantT static_variant = V_SgOmpDeclareMapperStatement;
  224336             :           enum { static_variant = V_SgOmpDeclareMapperStatement };
  224337             : 
  224338             :        /* the generated cast function */
  224339             :       /*! \brief Casts pointer from base class to derived class */
  224340             :           ROSE_DLL_API friend       SgOmpDeclareMapperStatement* isSgOmpDeclareMapperStatement(       SgNode * s );
  224341             : 
  224342             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  224343             :           ROSE_DLL_API friend const SgOmpDeclareMapperStatement* isSgOmpDeclareMapperStatement( const SgNode * s );
  224344             : 
  224345             :      // ******************************************
  224346             :      // * Memory Pool / New / Delete
  224347             :      // ******************************************
  224348             : 
  224349             :      public:
  224350             :           /// \private
  224351             :           static const unsigned pool_size; //
  224352             :           /// \private
  224353             :           static std::vector<unsigned char *> pools; //
  224354             :           /// \private
  224355             :           static SgOmpDeclareMapperStatement * next_node; // 
  224356             : 
  224357             :           /// \private
  224358             :           static unsigned long initializeStorageClassArray(SgOmpDeclareMapperStatementStorageClass *); //
  224359             : 
  224360             :           /// \private
  224361             :           static void clearMemoryPool(); //
  224362             :           static void deleteMemoryPool(); //
  224363             : 
  224364             :           /// \private
  224365             :           static void extendMemoryPoolForFileIO(); //
  224366             : 
  224367             :           /// \private
  224368             :           static SgOmpDeclareMapperStatement * getPointerFromGlobalIndex(unsigned long); //
  224369             :           /// \private
  224370             :           static SgOmpDeclareMapperStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  224371             : 
  224372             :           /// \private
  224373             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  224374             :           /// \private
  224375             :           static void resetValidFreepointers(); //
  224376             :           /// \private
  224377             :           static unsigned long getNumberOfLastValidPointer(); //
  224378             : 
  224379             : 
  224380             : #if defined(INLINE_FUNCTIONS)
  224381             :       /*! \brief returns pointer to newly allocated IR node */
  224382             :           inline void *operator new (size_t size);
  224383             : #else
  224384             :       /*! \brief returns pointer to newly allocated IR node */
  224385             :           void *operator new (size_t size);
  224386             : #endif
  224387             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  224388             :           void operator delete (void* pointer, size_t size);
  224389             : 
  224390             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  224391           0 :           void operator delete (void* pointer)
  224392             :              {
  224393             :             // This is the generated delete operator...
  224394           0 :                SgOmpDeclareMapperStatement::operator delete (pointer,sizeof(SgOmpDeclareMapperStatement));
  224395             :              }
  224396             : 
  224397             :       /*! \brief Returns the total number of IR nodes of this type */
  224398             :           static size_t numberOfNodes();
  224399             : 
  224400             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  224401             :           static size_t memoryUsage();
  224402             : 
  224403             :       // End of scope which started in IR nodes specific code 
  224404             :       /* */
  224405             : 
  224406             :       /* name Internal Functions
  224407             :           \brief Internal functions ... incomplete-documentation
  224408             : 
  224409             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224410             :           or by particularly knowledgeable users for specialized tools or applications.
  224411             : 
  224412             :           \internal We could not make these private because they are required by user for special purposes. And 
  224413             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  224414             :          
  224415             :        */
  224416             : 
  224417             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  224418             :        // overridden in every class by *generated* implementation
  224419             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  224420             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  224421             :        // MS: 06/28/02 container of names of variables or container indices 
  224422             :        // used used in the traversal to access AST successor nodes
  224423             :        // overridden in every class by *generated* implementation
  224424             :       /*! \brief container of names of variables or container indices used used in the traversal
  224425             :           to access AST successor nodes overridden in every class by *generated* implementation */
  224426             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  224427             : 
  224428             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  224429             :        // than all the vector copies. The implementation for these functions is generated for each class.
  224430             :       /*! \brief return number of children in the traversal successor list */
  224431             :           virtual size_t get_numberOfTraversalSuccessors() override;
  224432             :       /*! \brief index-based access to traversal successors by index number */
  224433             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  224434             :       /*! \brief index-based access to traversal successors by child node */
  224435             :           virtual size_t get_childIndex(SgNode *child) override;
  224436             : 
  224437             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  224438             :        // MS: 08/16/2002 method for generating RTI information
  224439             :       /*! \brief return C++ Runtime-Time-Information */
  224440             :           virtual RTIReturnType roseRTI() override;
  224441             : #endif
  224442             :       /* */
  224443             : 
  224444             : 
  224445             : 
  224446             :       /* name Deprecated Functions
  224447             :           \brief Deprecated functions ... incomplete-documentation
  224448             : 
  224449             :           These functions have been deprecated from use.
  224450             :        */
  224451             :       /* */
  224452             : 
  224453             :       /*! returns a C style string (char*) representing the class name */
  224454             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  224455             : 
  224456             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  224457             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  224458             : #if 0
  224459             :       /*! returns old style Sage II enum values */
  224460             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  224461             :       /*! returns old style Sage II enum values */
  224462             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  224463             : #endif
  224464             :       /* */
  224465             : 
  224466             : 
  224467             : 
  224468             : 
  224469             :      public:
  224470             :       /* name Traversal Support Functions
  224471             :           \brief Traversal support functions ... incomplete-documentation
  224472             : 
  224473             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224474             :           or by particularly knowledgable users for specialized tools or applications.
  224475             :        */
  224476             :       /* */
  224477             : 
  224478             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  224479             :        // (inferior to ROSE traversal mechanism, experimental).
  224480             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  224481             :        */
  224482             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  224483             : 
  224484             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  224485             :       /*! \brief support for the classic visitor pattern done in GoF */
  224486             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  224487             : 
  224488             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  224489             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  224490             :        */
  224491             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  224492             : 
  224493             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  224494             :        */
  224495             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  224496             : 
  224497             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  224498             :        // This traversal helps support internal tools that call static member functions.
  224499             :        // note: this function operates on the memory pools.
  224500             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  224501             :        */
  224502             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  224503             :       /* */
  224504             : 
  224505             : 
  224506             :      public:
  224507             :       /* name Memory Allocation Functions
  224508             :           \brief Memory allocations functions ... incomplete-documentation
  224509             : 
  224510             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224511             :           or by particularly knowledgable users for specialized tools or applications.
  224512             :        */
  224513             :       /* */
  224514             : 
  224515             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  224516             : 
  224517             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  224518             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  224519             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  224520             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  224521             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  224522             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  224523             :           being used with the AST File I/O mechanism.
  224524             :        */
  224525             :           virtual bool isInMemoryPool() override;
  224526             : 
  224527             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  224528             : 
  224529             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  224530             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  224531             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  224532             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  224533             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  224534             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  224535             :           being used with the AST File I/O mechanism.
  224536             :        */
  224537             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  224538             : 
  224539             :       // DQ (4/30/2006): Modified to be a const function.
  224540             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  224541             : 
  224542             :           This functions is part of general support for many possible tools to operate 
  224543             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  224544             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  224545             :           less than the set of pointers used by the AST file I/O. This is part of
  224546             :           work implemented by Andreas, and support tools such as the AST graph generation.
  224547             : 
  224548             :           \warning This function can return unexpected data members and thus the 
  224549             :                    order and the number of elements is unpredicable and subject 
  224550             :                    to change.
  224551             : 
  224552             :           \returns STL vector of pairs of SgNode* and strings
  224553             :        */
  224554             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  224555             : 
  224556             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  224557             : 
  224558             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  224559             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  224560             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  224561             : 
  224562             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  224563             :                    and subject to change.
  224564             :        */
  224565             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  224566             : 
  224567             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  224568             : 
  224569             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  224570             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  224571             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  224572             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  224573             : 
  224574             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  224575             : 
  224576             :           \returns long
  224577             :        */
  224578             :           virtual long getChildIndex( SgNode* childNode ) const override;
  224579             : 
  224580             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  224581             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  224582             :       /* \brief Constructor for use by AST File I/O Mechanism
  224583             : 
  224584             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  224585             :           which obtained via fast binary file I/O from disk.
  224586             :        */
  224587             :        // SgOmpDeclareMapperStatement( SgOmpDeclareMapperStatementStorageClass& source );
  224588             : 
  224589             : 
  224590             : 
  224591             : 
  224592             : 
  224593             :  // JH (10/24/2005): methods added to support the ast file IO
  224594             :     private:
  224595             : 
  224596             :       /* name AST Memory Allocation Support Functions
  224597             :           \brief Memory allocations support....
  224598             : 
  224599             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  224600             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  224601             :           and support the AST File I/O Mechanism.
  224602             :        */
  224603             :       /* */
  224604             : 
  224605             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  224606             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  224607             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  224608             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  224609             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  224610             :           a correspinding one in the AST_FILE_IO class!
  224611             :        */
  224612             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  224613             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  224614             :       /* \brief Typedef used for low level memory access.
  224615             :        */
  224616             :        // typedef unsigned char* TestType;
  224617             : 
  224618             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  224619             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  224620             :       /* \brief Typedef used to hold memory addresses as values.
  224621             :        */
  224622             :        // typedef unsigned long  AddressType;
  224623             : 
  224624             : 
  224625             : 
  224626             :        // necessary, to have direct access to the p_freepointer and the private methods !
  224627             :       /*! \brief friend class declaration to support AST File I/O */
  224628             :           friend class AST_FILE_IO;
  224629             : 
  224630             :       /*! \brief friend class declaration to support AST File I/O */
  224631             :           friend class SgOmpDeclareMapperStatementStorageClass;
  224632             : 
  224633             :       /*! \brief friend class declaration to support AST File I/O */
  224634             :           friend class AstSpecificDataManagingClass;
  224635             : 
  224636             :       /*! \brief friend class declaration to support AST File I/O */
  224637             :           friend class AstSpecificDataManagingClassStorageClass;
  224638             :     public:
  224639             :       /*! \brief IR node constructor to support AST File I/O */
  224640             :           SgOmpDeclareMapperStatement( const SgOmpDeclareMapperStatementStorageClass& source );
  224641             : 
  224642             :  // private: // JJW hack
  224643             :        /*
  224644             :           name AST Memory Allocation Support Variables
  224645             :           Memory allocations support variables 
  224646             : 
  224647             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  224648             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  224649             :           and support the AST File I/O Mechanism.
  224650             :        */
  224651             :       /* */
  224652             : 
  224653             :     public:
  224654             : 
  224655             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  224656             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  224657             :       // virtual SgNode* addRegExpAttribute();
  224658             :       /*! \brief Support for AST matching using regular expression.
  224659             : 
  224660             :           This support is incomplete and the subject of current research to define 
  224661             :           RegEx trees to support inexact matching.
  224662             :        */
  224663             :           SgOmpDeclareMapperStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  224664             : 
  224665             : // *** COMMON CODE SECTION ENDS HERE ***
  224666             : 
  224667             : 
  224668             : // End of memberFunctionString
  224669             : // Start of memberFunctionString
  224670             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  224671             : 
  224672             :      // the generated cast function
  224673             :      // friend ROSE_DLL_API SgOmpDeclareMapperStatement* isSgOmpDeclareMapperStatement ( SgNode* s );
  224674             : 
  224675             :           typedef SgUpirBaseStatement base_node_type;
  224676             : 
  224677             : 
  224678             : // End of memberFunctionString
  224679             : // Start of memberFunctionString
  224680             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  224681             : 
  224682             :           void post_construction_initialization() override;
  224683             : 
  224684             : 
  224685             : // End of memberFunctionString
  224686             : 
  224687             : 
  224688             :      public: 
  224689             :          virtual ~SgOmpDeclareMapperStatement();
  224690             : 
  224691             : 
  224692             :      public: 
  224693             :          SgOmpDeclareMapperStatement(Sg_File_Info* startOfConstruct ); 
  224694             :          SgOmpDeclareMapperStatement(); 
  224695             : 
  224696             :     protected:
  224697             : 
  224698             :     friend struct Rose::Traits::generated::describe_node_t<SgOmpDeclareMapperStatement>;
  224699             : 
  224700             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224701             : 
  224702             : 
  224703             :    };
  224704             : #endif
  224705             : 
  224706             : // postdeclarations for SgOmpDeclareMapperStatement
  224707             : 
  224708             : /* #line 224709 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224709             : 
  224710             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  224711             : 
  224712             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224713             : 
  224714             : 
  224715             : /* #line 224716 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224716             : 
  224717             : 
  224718             : 
  224719             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224720             : 
  224721             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  224722             : //      This code is automatically generated for each 
  224723             : //      terminal and non-terminal within the defined 
  224724             : //      grammar.  There is a simple way to change the 
  224725             : //      code to fix bugs etc.  See the ROSE README file
  224726             : //      for directions.
  224727             : 
  224728             : // tps: (02/22/2010): Adding DLL export requirements
  224729             : #include "rosedll.h"
  224730             : 
  224731             : // predeclarations for SgSequenceStatement
  224732             : 
  224733             : /* #line 224734 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224734             : 
  224735             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  224736             : 
  224737             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  224738             : 
  224739             : #if 1
  224740             : // Class Definition for SgSequenceStatement
  224741             : class ROSE_DLL_API SgSequenceStatement  : public SgStatement
  224742             :    {
  224743             :      public:
  224744             : 
  224745             : 
  224746             : /* #line 224747 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  224747             : 
  224748             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  224749             : // Start of memberFunctionString
  224750             : /* #line 3749 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  224751             : 
  224752             : 
  224753             : 
  224754             : // End of memberFunctionString
  224755             : // Start of memberFunctionString
  224756             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  224757             : 
  224758             : // *** COMMON CODE SECTION BEGINS HERE ***
  224759             : 
  224760             :     public:
  224761             : 
  224762             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  224763             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  224764             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  224765             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  224766             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  224767             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  224768             : 
  224769             :       /*! \brief returns a string representing the class name */
  224770             :           virtual std::string class_name() const override;
  224771             : 
  224772             :       /*! \brief returns new style SageIII enum values */
  224773             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  224774             : 
  224775             :       /*! \brief static variant value */
  224776             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  224777             :        // static const VariantT static_variant = V_SgSequenceStatement;
  224778             :           enum { static_variant = V_SgSequenceStatement };
  224779             : 
  224780             :        /* the generated cast function */
  224781             :       /*! \brief Casts pointer from base class to derived class */
  224782             :           ROSE_DLL_API friend       SgSequenceStatement* isSgSequenceStatement(       SgNode * s );
  224783             : 
  224784             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  224785             :           ROSE_DLL_API friend const SgSequenceStatement* isSgSequenceStatement( const SgNode * s );
  224786             : 
  224787             :      // ******************************************
  224788             :      // * Memory Pool / New / Delete
  224789             :      // ******************************************
  224790             : 
  224791             :      public:
  224792             :           /// \private
  224793             :           static const unsigned pool_size; //
  224794             :           /// \private
  224795             :           static std::vector<unsigned char *> pools; //
  224796             :           /// \private
  224797             :           static SgSequenceStatement * next_node; // 
  224798             : 
  224799             :           /// \private
  224800             :           static unsigned long initializeStorageClassArray(SgSequenceStatementStorageClass *); //
  224801             : 
  224802             :           /// \private
  224803             :           static void clearMemoryPool(); //
  224804             :           static void deleteMemoryPool(); //
  224805             : 
  224806             :           /// \private
  224807             :           static void extendMemoryPoolForFileIO(); //
  224808             : 
  224809             :           /// \private
  224810             :           static SgSequenceStatement * getPointerFromGlobalIndex(unsigned long); //
  224811             :           /// \private
  224812             :           static SgSequenceStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  224813             : 
  224814             :           /// \private
  224815             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  224816             :           /// \private
  224817             :           static void resetValidFreepointers(); //
  224818             :           /// \private
  224819             :           static unsigned long getNumberOfLastValidPointer(); //
  224820             : 
  224821             : 
  224822             : #if defined(INLINE_FUNCTIONS)
  224823             :       /*! \brief returns pointer to newly allocated IR node */
  224824             :           inline void *operator new (size_t size);
  224825             : #else
  224826             :       /*! \brief returns pointer to newly allocated IR node */
  224827             :           void *operator new (size_t size);
  224828             : #endif
  224829             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  224830             :           void operator delete (void* pointer, size_t size);
  224831             : 
  224832             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  224833           0 :           void operator delete (void* pointer)
  224834             :              {
  224835             :             // This is the generated delete operator...
  224836           0 :                SgSequenceStatement::operator delete (pointer,sizeof(SgSequenceStatement));
  224837             :              }
  224838             : 
  224839             :       /*! \brief Returns the total number of IR nodes of this type */
  224840             :           static size_t numberOfNodes();
  224841             : 
  224842             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  224843             :           static size_t memoryUsage();
  224844             : 
  224845             :       // End of scope which started in IR nodes specific code 
  224846             :       /* */
  224847             : 
  224848             :       /* name Internal Functions
  224849             :           \brief Internal functions ... incomplete-documentation
  224850             : 
  224851             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224852             :           or by particularly knowledgeable users for specialized tools or applications.
  224853             : 
  224854             :           \internal We could not make these private because they are required by user for special purposes. And 
  224855             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  224856             :          
  224857             :        */
  224858             : 
  224859             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  224860             :        // overridden in every class by *generated* implementation
  224861             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  224862             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  224863             :        // MS: 06/28/02 container of names of variables or container indices 
  224864             :        // used used in the traversal to access AST successor nodes
  224865             :        // overridden in every class by *generated* implementation
  224866             :       /*! \brief container of names of variables or container indices used used in the traversal
  224867             :           to access AST successor nodes overridden in every class by *generated* implementation */
  224868             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  224869             : 
  224870             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  224871             :        // than all the vector copies. The implementation for these functions is generated for each class.
  224872             :       /*! \brief return number of children in the traversal successor list */
  224873             :           virtual size_t get_numberOfTraversalSuccessors() override;
  224874             :       /*! \brief index-based access to traversal successors by index number */
  224875             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  224876             :       /*! \brief index-based access to traversal successors by child node */
  224877             :           virtual size_t get_childIndex(SgNode *child) override;
  224878             : 
  224879             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  224880             :        // MS: 08/16/2002 method for generating RTI information
  224881             :       /*! \brief return C++ Runtime-Time-Information */
  224882             :           virtual RTIReturnType roseRTI() override;
  224883             : #endif
  224884             :       /* */
  224885             : 
  224886             : 
  224887             : 
  224888             :       /* name Deprecated Functions
  224889             :           \brief Deprecated functions ... incomplete-documentation
  224890             : 
  224891             :           These functions have been deprecated from use.
  224892             :        */
  224893             :       /* */
  224894             : 
  224895             :       /*! returns a C style string (char*) representing the class name */
  224896             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  224897             : 
  224898             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  224899             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  224900             : #if 0
  224901             :       /*! returns old style Sage II enum values */
  224902             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  224903             :       /*! returns old style Sage II enum values */
  224904             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  224905             : #endif
  224906             :       /* */
  224907             : 
  224908             : 
  224909             : 
  224910             : 
  224911             :      public:
  224912             :       /* name Traversal Support Functions
  224913             :           \brief Traversal support functions ... incomplete-documentation
  224914             : 
  224915             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224916             :           or by particularly knowledgable users for specialized tools or applications.
  224917             :        */
  224918             :       /* */
  224919             : 
  224920             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  224921             :        // (inferior to ROSE traversal mechanism, experimental).
  224922             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  224923             :        */
  224924             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  224925             : 
  224926             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  224927             :       /*! \brief support for the classic visitor pattern done in GoF */
  224928             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  224929             : 
  224930             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  224931             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  224932             :        */
  224933             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  224934             : 
  224935             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  224936             :        */
  224937             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  224938             : 
  224939             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  224940             :        // This traversal helps support internal tools that call static member functions.
  224941             :        // note: this function operates on the memory pools.
  224942             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  224943             :        */
  224944             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  224945             :       /* */
  224946             : 
  224947             : 
  224948             :      public:
  224949             :       /* name Memory Allocation Functions
  224950             :           \brief Memory allocations functions ... incomplete-documentation
  224951             : 
  224952             :           These functions have been made public as part of the design, but they are suggested for internal use 
  224953             :           or by particularly knowledgable users for specialized tools or applications.
  224954             :        */
  224955             :       /* */
  224956             : 
  224957             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  224958             : 
  224959             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  224960             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  224961             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  224962             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  224963             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  224964             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  224965             :           being used with the AST File I/O mechanism.
  224966             :        */
  224967             :           virtual bool isInMemoryPool() override;
  224968             : 
  224969             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  224970             : 
  224971             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  224972             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  224973             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  224974             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  224975             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  224976             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  224977             :           being used with the AST File I/O mechanism.
  224978             :        */
  224979             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  224980             : 
  224981             :       // DQ (4/30/2006): Modified to be a const function.
  224982             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  224983             : 
  224984             :           This functions is part of general support for many possible tools to operate 
  224985             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  224986             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  224987             :           less than the set of pointers used by the AST file I/O. This is part of
  224988             :           work implemented by Andreas, and support tools such as the AST graph generation.
  224989             : 
  224990             :           \warning This function can return unexpected data members and thus the 
  224991             :                    order and the number of elements is unpredicable and subject 
  224992             :                    to change.
  224993             : 
  224994             :           \returns STL vector of pairs of SgNode* and strings
  224995             :        */
  224996             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  224997             : 
  224998             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  224999             : 
  225000             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  225001             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  225002             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  225003             : 
  225004             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  225005             :                    and subject to change.
  225006             :        */
  225007             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  225008             : 
  225009             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  225010             : 
  225011             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  225012             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  225013             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  225014             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  225015             : 
  225016             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  225017             : 
  225018             :           \returns long
  225019             :        */
  225020             :           virtual long getChildIndex( SgNode* childNode ) const override;
  225021             : 
  225022             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  225023             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225024             :       /* \brief Constructor for use by AST File I/O Mechanism
  225025             : 
  225026             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  225027             :           which obtained via fast binary file I/O from disk.
  225028             :        */
  225029             :        // SgSequenceStatement( SgSequenceStatementStorageClass& source );
  225030             : 
  225031             : 
  225032             : 
  225033             : 
  225034             : 
  225035             :  // JH (10/24/2005): methods added to support the ast file IO
  225036             :     private:
  225037             : 
  225038             :       /* name AST Memory Allocation Support Functions
  225039             :           \brief Memory allocations support....
  225040             : 
  225041             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  225042             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  225043             :           and support the AST File I/O Mechanism.
  225044             :        */
  225045             :       /* */
  225046             : 
  225047             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  225048             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  225049             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  225050             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  225051             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  225052             :           a correspinding one in the AST_FILE_IO class!
  225053             :        */
  225054             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  225055             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225056             :       /* \brief Typedef used for low level memory access.
  225057             :        */
  225058             :        // typedef unsigned char* TestType;
  225059             : 
  225060             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  225061             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225062             :       /* \brief Typedef used to hold memory addresses as values.
  225063             :        */
  225064             :        // typedef unsigned long  AddressType;
  225065             : 
  225066             : 
  225067             : 
  225068             :        // necessary, to have direct access to the p_freepointer and the private methods !
  225069             :       /*! \brief friend class declaration to support AST File I/O */
  225070             :           friend class AST_FILE_IO;
  225071             : 
  225072             :       /*! \brief friend class declaration to support AST File I/O */
  225073             :           friend class SgSequenceStatementStorageClass;
  225074             : 
  225075             :       /*! \brief friend class declaration to support AST File I/O */
  225076             :           friend class AstSpecificDataManagingClass;
  225077             : 
  225078             :       /*! \brief friend class declaration to support AST File I/O */
  225079             :           friend class AstSpecificDataManagingClassStorageClass;
  225080             :     public:
  225081             :       /*! \brief IR node constructor to support AST File I/O */
  225082             :           SgSequenceStatement( const SgSequenceStatementStorageClass& source );
  225083             : 
  225084             :  // private: // JJW hack
  225085             :        /*
  225086             :           name AST Memory Allocation Support Variables
  225087             :           Memory allocations support variables 
  225088             : 
  225089             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  225090             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  225091             :           and support the AST File I/O Mechanism.
  225092             :        */
  225093             :       /* */
  225094             : 
  225095             :     public:
  225096             : 
  225097             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  225098             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  225099             :       // virtual SgNode* addRegExpAttribute();
  225100             :       /*! \brief Support for AST matching using regular expression.
  225101             : 
  225102             :           This support is incomplete and the subject of current research to define 
  225103             :           RegEx trees to support inexact matching.
  225104             :        */
  225105             :           SgSequenceStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  225106             : 
  225107             : // *** COMMON CODE SECTION ENDS HERE ***
  225108             : 
  225109             : 
  225110             : // End of memberFunctionString
  225111             : // Start of memberFunctionString
  225112             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  225113             : 
  225114             :      // the generated cast function
  225115             :      // friend ROSE_DLL_API SgSequenceStatement* isSgSequenceStatement ( SgNode* s );
  225116             : 
  225117             :           typedef SgStatement base_node_type;
  225118             : 
  225119             : 
  225120             : // End of memberFunctionString
  225121             : // Start of memberFunctionString
  225122             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  225123             : 
  225124             :           void post_construction_initialization() override;
  225125             : 
  225126             : 
  225127             : // End of memberFunctionString
  225128             : 
  225129             : 
  225130             :      public: 
  225131             :          virtual ~SgSequenceStatement();
  225132             : 
  225133             : 
  225134             :      public: 
  225135             :          SgSequenceStatement(Sg_File_Info* startOfConstruct ); 
  225136             :          SgSequenceStatement(); 
  225137             : 
  225138             :     protected:
  225139             : 
  225140             :     friend struct Rose::Traits::generated::describe_node_t<SgSequenceStatement>;
  225141             : 
  225142             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225143             : 
  225144             : 
  225145             :    };
  225146             : #endif
  225147             : 
  225148             : // postdeclarations for SgSequenceStatement
  225149             : 
  225150             : /* #line 225151 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225151             : 
  225152             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  225153             : 
  225154             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225155             : 
  225156             : 
  225157             : /* #line 225158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225158             : 
  225159             : 
  225160             : 
  225161             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225162             : 
  225163             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  225164             : //      This code is automatically generated for each 
  225165             : //      terminal and non-terminal within the defined 
  225166             : //      grammar.  There is a simple way to change the 
  225167             : //      code to fix bugs etc.  See the ROSE README file
  225168             : //      for directions.
  225169             : 
  225170             : // tps: (02/22/2010): Adding DLL export requirements
  225171             : #include "rosedll.h"
  225172             : 
  225173             : // predeclarations for SgWithStatement
  225174             : 
  225175             : /* #line 225176 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225176             : 
  225177             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  225178             : 
  225179             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225180             : 
  225181             : #if 1
  225182             : // Class Definition for SgWithStatement
  225183             : class ROSE_DLL_API SgWithStatement  : public SgStatement
  225184             :    {
  225185             :      public:
  225186             : 
  225187             : 
  225188             : /* #line 225189 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225189             : 
  225190             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  225191             : // Start of memberFunctionString
  225192             : /* #line 2311 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  225193             : 
  225194             : 
  225195             : 
  225196             : // End of memberFunctionString
  225197             : // Start of memberFunctionString
  225198             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  225199             : 
  225200             : // *** COMMON CODE SECTION BEGINS HERE ***
  225201             : 
  225202             :     public:
  225203             : 
  225204             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  225205             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  225206             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  225207             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  225208             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  225209             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  225210             : 
  225211             :       /*! \brief returns a string representing the class name */
  225212             :           virtual std::string class_name() const override;
  225213             : 
  225214             :       /*! \brief returns new style SageIII enum values */
  225215             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  225216             : 
  225217             :       /*! \brief static variant value */
  225218             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  225219             :        // static const VariantT static_variant = V_SgWithStatement;
  225220             :           enum { static_variant = V_SgWithStatement };
  225221             : 
  225222             :        /* the generated cast function */
  225223             :       /*! \brief Casts pointer from base class to derived class */
  225224             :           ROSE_DLL_API friend       SgWithStatement* isSgWithStatement(       SgNode * s );
  225225             : 
  225226             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  225227             :           ROSE_DLL_API friend const SgWithStatement* isSgWithStatement( const SgNode * s );
  225228             : 
  225229             :      // ******************************************
  225230             :      // * Memory Pool / New / Delete
  225231             :      // ******************************************
  225232             : 
  225233             :      public:
  225234             :           /// \private
  225235             :           static const unsigned pool_size; //
  225236             :           /// \private
  225237             :           static std::vector<unsigned char *> pools; //
  225238             :           /// \private
  225239             :           static SgWithStatement * next_node; // 
  225240             : 
  225241             :           /// \private
  225242             :           static unsigned long initializeStorageClassArray(SgWithStatementStorageClass *); //
  225243             : 
  225244             :           /// \private
  225245             :           static void clearMemoryPool(); //
  225246             :           static void deleteMemoryPool(); //
  225247             : 
  225248             :           /// \private
  225249             :           static void extendMemoryPoolForFileIO(); //
  225250             : 
  225251             :           /// \private
  225252             :           static SgWithStatement * getPointerFromGlobalIndex(unsigned long); //
  225253             :           /// \private
  225254             :           static SgWithStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  225255             : 
  225256             :           /// \private
  225257             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  225258             :           /// \private
  225259             :           static void resetValidFreepointers(); //
  225260             :           /// \private
  225261             :           static unsigned long getNumberOfLastValidPointer(); //
  225262             : 
  225263             : 
  225264             : #if defined(INLINE_FUNCTIONS)
  225265             :       /*! \brief returns pointer to newly allocated IR node */
  225266             :           inline void *operator new (size_t size);
  225267             : #else
  225268             :       /*! \brief returns pointer to newly allocated IR node */
  225269             :           void *operator new (size_t size);
  225270             : #endif
  225271             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  225272             :           void operator delete (void* pointer, size_t size);
  225273             : 
  225274             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  225275           0 :           void operator delete (void* pointer)
  225276             :              {
  225277             :             // This is the generated delete operator...
  225278           0 :                SgWithStatement::operator delete (pointer,sizeof(SgWithStatement));
  225279             :              }
  225280             : 
  225281             :       /*! \brief Returns the total number of IR nodes of this type */
  225282             :           static size_t numberOfNodes();
  225283             : 
  225284             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  225285             :           static size_t memoryUsage();
  225286             : 
  225287             :       // End of scope which started in IR nodes specific code 
  225288             :       /* */
  225289             : 
  225290             :       /* name Internal Functions
  225291             :           \brief Internal functions ... incomplete-documentation
  225292             : 
  225293             :           These functions have been made public as part of the design, but they are suggested for internal use 
  225294             :           or by particularly knowledgeable users for specialized tools or applications.
  225295             : 
  225296             :           \internal We could not make these private because they are required by user for special purposes. And 
  225297             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  225298             :          
  225299             :        */
  225300             : 
  225301             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  225302             :        // overridden in every class by *generated* implementation
  225303             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  225304             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  225305             :        // MS: 06/28/02 container of names of variables or container indices 
  225306             :        // used used in the traversal to access AST successor nodes
  225307             :        // overridden in every class by *generated* implementation
  225308             :       /*! \brief container of names of variables or container indices used used in the traversal
  225309             :           to access AST successor nodes overridden in every class by *generated* implementation */
  225310             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  225311             : 
  225312             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  225313             :        // than all the vector copies. The implementation for these functions is generated for each class.
  225314             :       /*! \brief return number of children in the traversal successor list */
  225315             :           virtual size_t get_numberOfTraversalSuccessors() override;
  225316             :       /*! \brief index-based access to traversal successors by index number */
  225317             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  225318             :       /*! \brief index-based access to traversal successors by child node */
  225319             :           virtual size_t get_childIndex(SgNode *child) override;
  225320             : 
  225321             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  225322             :        // MS: 08/16/2002 method for generating RTI information
  225323             :       /*! \brief return C++ Runtime-Time-Information */
  225324             :           virtual RTIReturnType roseRTI() override;
  225325             : #endif
  225326             :       /* */
  225327             : 
  225328             : 
  225329             : 
  225330             :       /* name Deprecated Functions
  225331             :           \brief Deprecated functions ... incomplete-documentation
  225332             : 
  225333             :           These functions have been deprecated from use.
  225334             :        */
  225335             :       /* */
  225336             : 
  225337             :       /*! returns a C style string (char*) representing the class name */
  225338             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  225339             : 
  225340             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  225341             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  225342             : #if 0
  225343             :       /*! returns old style Sage II enum values */
  225344             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  225345             :       /*! returns old style Sage II enum values */
  225346             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  225347             : #endif
  225348             :       /* */
  225349             : 
  225350             : 
  225351             : 
  225352             : 
  225353             :      public:
  225354             :       /* name Traversal Support Functions
  225355             :           \brief Traversal support functions ... incomplete-documentation
  225356             : 
  225357             :           These functions have been made public as part of the design, but they are suggested for internal use 
  225358             :           or by particularly knowledgable users for specialized tools or applications.
  225359             :        */
  225360             :       /* */
  225361             : 
  225362             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  225363             :        // (inferior to ROSE traversal mechanism, experimental).
  225364             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  225365             :        */
  225366             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  225367             : 
  225368             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  225369             :       /*! \brief support for the classic visitor pattern done in GoF */
  225370             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  225371             : 
  225372             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  225373             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  225374             :        */
  225375             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  225376             : 
  225377             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  225378             :        */
  225379             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  225380             : 
  225381             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  225382             :        // This traversal helps support internal tools that call static member functions.
  225383             :        // note: this function operates on the memory pools.
  225384             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  225385             :        */
  225386             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  225387             :       /* */
  225388             : 
  225389             : 
  225390             :      public:
  225391             :       /* name Memory Allocation Functions
  225392             :           \brief Memory allocations functions ... incomplete-documentation
  225393             : 
  225394             :           These functions have been made public as part of the design, but they are suggested for internal use 
  225395             :           or by particularly knowledgable users for specialized tools or applications.
  225396             :        */
  225397             :       /* */
  225398             : 
  225399             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  225400             : 
  225401             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  225402             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  225403             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  225404             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  225405             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  225406             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  225407             :           being used with the AST File I/O mechanism.
  225408             :        */
  225409             :           virtual bool isInMemoryPool() override;
  225410             : 
  225411             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  225412             : 
  225413             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  225414             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  225415             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  225416             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  225417             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  225418             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  225419             :           being used with the AST File I/O mechanism.
  225420             :        */
  225421             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  225422             : 
  225423             :       // DQ (4/30/2006): Modified to be a const function.
  225424             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  225425             : 
  225426             :           This functions is part of general support for many possible tools to operate 
  225427             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  225428             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  225429             :           less than the set of pointers used by the AST file I/O. This is part of
  225430             :           work implemented by Andreas, and support tools such as the AST graph generation.
  225431             : 
  225432             :           \warning This function can return unexpected data members and thus the 
  225433             :                    order and the number of elements is unpredicable and subject 
  225434             :                    to change.
  225435             : 
  225436             :           \returns STL vector of pairs of SgNode* and strings
  225437             :        */
  225438             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  225439             : 
  225440             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  225441             : 
  225442             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  225443             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  225444             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  225445             : 
  225446             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  225447             :                    and subject to change.
  225448             :        */
  225449             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  225450             : 
  225451             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  225452             : 
  225453             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  225454             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  225455             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  225456             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  225457             : 
  225458             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  225459             : 
  225460             :           \returns long
  225461             :        */
  225462             :           virtual long getChildIndex( SgNode* childNode ) const override;
  225463             : 
  225464             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  225465             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225466             :       /* \brief Constructor for use by AST File I/O Mechanism
  225467             : 
  225468             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  225469             :           which obtained via fast binary file I/O from disk.
  225470             :        */
  225471             :        // SgWithStatement( SgWithStatementStorageClass& source );
  225472             : 
  225473             : 
  225474             : 
  225475             : 
  225476             : 
  225477             :  // JH (10/24/2005): methods added to support the ast file IO
  225478             :     private:
  225479             : 
  225480             :       /* name AST Memory Allocation Support Functions
  225481             :           \brief Memory allocations support....
  225482             : 
  225483             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  225484             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  225485             :           and support the AST File I/O Mechanism.
  225486             :        */
  225487             :       /* */
  225488             : 
  225489             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  225490             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  225491             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  225492             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  225493             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  225494             :           a correspinding one in the AST_FILE_IO class!
  225495             :        */
  225496             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  225497             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225498             :       /* \brief Typedef used for low level memory access.
  225499             :        */
  225500             :        // typedef unsigned char* TestType;
  225501             : 
  225502             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  225503             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225504             :       /* \brief Typedef used to hold memory addresses as values.
  225505             :        */
  225506             :        // typedef unsigned long  AddressType;
  225507             : 
  225508             : 
  225509             : 
  225510             :        // necessary, to have direct access to the p_freepointer and the private methods !
  225511             :       /*! \brief friend class declaration to support AST File I/O */
  225512             :           friend class AST_FILE_IO;
  225513             : 
  225514             :       /*! \brief friend class declaration to support AST File I/O */
  225515             :           friend class SgWithStatementStorageClass;
  225516             : 
  225517             :       /*! \brief friend class declaration to support AST File I/O */
  225518             :           friend class AstSpecificDataManagingClass;
  225519             : 
  225520             :       /*! \brief friend class declaration to support AST File I/O */
  225521             :           friend class AstSpecificDataManagingClassStorageClass;
  225522             :     public:
  225523             :       /*! \brief IR node constructor to support AST File I/O */
  225524             :           SgWithStatement( const SgWithStatementStorageClass& source );
  225525             : 
  225526             :  // private: // JJW hack
  225527             :        /*
  225528             :           name AST Memory Allocation Support Variables
  225529             :           Memory allocations support variables 
  225530             : 
  225531             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  225532             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  225533             :           and support the AST File I/O Mechanism.
  225534             :        */
  225535             :       /* */
  225536             : 
  225537             :     public:
  225538             : 
  225539             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  225540             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  225541             :       // virtual SgNode* addRegExpAttribute();
  225542             :       /*! \brief Support for AST matching using regular expression.
  225543             : 
  225544             :           This support is incomplete and the subject of current research to define 
  225545             :           RegEx trees to support inexact matching.
  225546             :        */
  225547             :           SgWithStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  225548             : 
  225549             : // *** COMMON CODE SECTION ENDS HERE ***
  225550             : 
  225551             : 
  225552             : // End of memberFunctionString
  225553             : // Start of memberFunctionString
  225554             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  225555             : 
  225556             :      // the generated cast function
  225557             :      // friend ROSE_DLL_API SgWithStatement* isSgWithStatement ( SgNode* s );
  225558             : 
  225559             :           typedef SgStatement base_node_type;
  225560             : 
  225561             : 
  225562             : // End of memberFunctionString
  225563             : // Start of memberFunctionString
  225564             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  225565             : 
  225566             :           void post_construction_initialization() override;
  225567             : 
  225568             : 
  225569             : // End of memberFunctionString
  225570             : 
  225571             :      public: 
  225572             :          SgExpression* get_expression() const;
  225573             :          void set_expression(SgExpression* expression);
  225574             : 
  225575             :      public: 
  225576             :          SgStatement* get_body() const;
  225577             :          void set_body(SgStatement* body);
  225578             : 
  225579             : 
  225580             :      public: 
  225581             :          virtual ~SgWithStatement();
  225582             : 
  225583             : 
  225584             :      public: 
  225585             :          SgWithStatement(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL, SgStatement* body = NULL); 
  225586             :          SgWithStatement(SgExpression* expression, SgStatement* body); 
  225587             : 
  225588             :     protected:
  225589             : // Start of memberFunctionString
  225590             : SgExpression* p_expression;
  225591             :           
  225592             : // End of memberFunctionString
  225593             : // Start of memberFunctionString
  225594             : SgStatement* p_body;
  225595             :           
  225596             : // End of memberFunctionString
  225597             : 
  225598             :     friend struct Rose::Traits::generated::describe_node_t<SgWithStatement>;
  225599             :     friend struct Rose::Traits::generated::describe_field_t<SgWithStatement, SgExpression*,&SgWithStatement::p_expression>;
  225600             :     friend struct Rose::Traits::generated::describe_field_t<SgWithStatement, SgStatement*,&SgWithStatement::p_body>;
  225601             : 
  225602             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225603             : 
  225604             : 
  225605             :    };
  225606             : #endif
  225607             : 
  225608             : // postdeclarations for SgWithStatement
  225609             : 
  225610             : /* #line 225611 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225611             : 
  225612             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  225613             : 
  225614             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225615             : 
  225616             : 
  225617             : /* #line 225618 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225618             : 
  225619             : 
  225620             : 
  225621             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225622             : 
  225623             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  225624             : //      This code is automatically generated for each 
  225625             : //      terminal and non-terminal within the defined 
  225626             : //      grammar.  There is a simple way to change the 
  225627             : //      code to fix bugs etc.  See the ROSE README file
  225628             : //      for directions.
  225629             : 
  225630             : // tps: (02/22/2010): Adding DLL export requirements
  225631             : #include "rosedll.h"
  225632             : 
  225633             : // predeclarations for SgPassStatement
  225634             : 
  225635             : /* #line 225636 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225636             : 
  225637             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  225638             : 
  225639             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  225640             : 
  225641             : #if 1
  225642             : // Class Definition for SgPassStatement
  225643             : class ROSE_DLL_API SgPassStatement  : public SgStatement
  225644             :    {
  225645             :      public:
  225646             : 
  225647             : 
  225648             : /* #line 225649 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  225649             : 
  225650             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  225651             : // Start of memberFunctionString
  225652             : /* #line 2648 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  225653             : 
  225654             : 
  225655             : 
  225656             : // End of memberFunctionString
  225657             : // Start of memberFunctionString
  225658             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  225659             : 
  225660             : // *** COMMON CODE SECTION BEGINS HERE ***
  225661             : 
  225662             :     public:
  225663             : 
  225664             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  225665             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  225666             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  225667             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  225668             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  225669             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  225670             : 
  225671             :       /*! \brief returns a string representing the class name */
  225672             :           virtual std::string class_name() const override;
  225673             : 
  225674             :       /*! \brief returns new style SageIII enum values */
  225675             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  225676             : 
  225677             :       /*! \brief static variant value */
  225678             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  225679             :        // static const VariantT static_variant = V_SgPassStatement;
  225680             :           enum { static_variant = V_SgPassStatement };
  225681             : 
  225682             :        /* the generated cast function */
  225683             :       /*! \brief Casts pointer from base class to derived class */
  225684             :           ROSE_DLL_API friend       SgPassStatement* isSgPassStatement(       SgNode * s );
  225685             : 
  225686             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  225687             :           ROSE_DLL_API friend const SgPassStatement* isSgPassStatement( const SgNode * s );
  225688             : 
  225689             :      // ******************************************
  225690             :      // * Memory Pool / New / Delete
  225691             :      // ******************************************
  225692             : 
  225693             :      public:
  225694             :           /// \private
  225695             :           static const unsigned pool_size; //
  225696             :           /// \private
  225697             :           static std::vector<unsigned char *> pools; //
  225698             :           /// \private
  225699             :           static SgPassStatement * next_node; // 
  225700             : 
  225701             :           /// \private
  225702             :           static unsigned long initializeStorageClassArray(SgPassStatementStorageClass *); //
  225703             : 
  225704             :           /// \private
  225705             :           static void clearMemoryPool(); //
  225706             :           static void deleteMemoryPool(); //
  225707             : 
  225708             :           /// \private
  225709             :           static void extendMemoryPoolForFileIO(); //
  225710             : 
  225711             :           /// \private
  225712             :           static SgPassStatement * getPointerFromGlobalIndex(unsigned long); //
  225713             :           /// \private
  225714             :           static SgPassStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  225715             : 
  225716             :           /// \private
  225717             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  225718             :           /// \private
  225719             :           static void resetValidFreepointers(); //
  225720             :           /// \private
  225721             :           static unsigned long getNumberOfLastValidPointer(); //
  225722             : 
  225723             : 
  225724             : #if defined(INLINE_FUNCTIONS)
  225725             :       /*! \brief returns pointer to newly allocated IR node */
  225726             :           inline void *operator new (size_t size);
  225727             : #else
  225728             :       /*! \brief returns pointer to newly allocated IR node */
  225729             :           void *operator new (size_t size);
  225730             : #endif
  225731             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  225732             :           void operator delete (void* pointer, size_t size);
  225733             : 
  225734             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  225735           0 :           void operator delete (void* pointer)
  225736             :              {
  225737             :             // This is the generated delete operator...
  225738           0 :                SgPassStatement::operator delete (pointer,sizeof(SgPassStatement));
  225739             :              }
  225740             : 
  225741             :       /*! \brief Returns the total number of IR nodes of this type */
  225742             :           static size_t numberOfNodes();
  225743             : 
  225744             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  225745             :           static size_t memoryUsage();
  225746             : 
  225747             :       // End of scope which started in IR nodes specific code 
  225748             :       /* */
  225749             : 
  225750             :       /* name Internal Functions
  225751             :           \brief Internal functions ... incomplete-documentation
  225752             : 
  225753             :           These functions have been made public as part of the design, but they are suggested for internal use 
  225754             :           or by particularly knowledgeable users for specialized tools or applications.
  225755             : 
  225756             :           \internal We could not make these private because they are required by user for special purposes. And 
  225757             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  225758             :          
  225759             :        */
  225760             : 
  225761             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  225762             :        // overridden in every class by *generated* implementation
  225763             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  225764             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  225765             :        // MS: 06/28/02 container of names of variables or container indices 
  225766             :        // used used in the traversal to access AST successor nodes
  225767             :        // overridden in every class by *generated* implementation
  225768             :       /*! \brief container of names of variables or container indices used used in the traversal
  225769             :           to access AST successor nodes overridden in every class by *generated* implementation */
  225770             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  225771             : 
  225772             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  225773             :        // than all the vector copies. The implementation for these functions is generated for each class.
  225774             :       /*! \brief return number of children in the traversal successor list */
  225775             :           virtual size_t get_numberOfTraversalSuccessors() override;
  225776             :       /*! \brief index-based access to traversal successors by index number */
  225777             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  225778             :       /*! \brief index-based access to traversal successors by child node */
  225779             :           virtual size_t get_childIndex(SgNode *child) override;
  225780             : 
  225781             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  225782             :        // MS: 08/16/2002 method for generating RTI information
  225783             :       /*! \brief return C++ Runtime-Time-Information */
  225784             :           virtual RTIReturnType roseRTI() override;
  225785             : #endif
  225786             :       /* */
  225787             : 
  225788             : 
  225789             : 
  225790             :       /* name Deprecated Functions
  225791             :           \brief Deprecated functions ... incomplete-documentation
  225792             : 
  225793             :           These functions have been deprecated from use.
  225794             :        */
  225795             :       /* */
  225796             : 
  225797             :       /*! returns a C style string (char*) representing the class name */
  225798             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  225799             : 
  225800             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  225801             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  225802             : #if 0
  225803             :       /*! returns old style Sage II enum values */
  225804             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  225805             :       /*! returns old style Sage II enum values */
  225806             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  225807             : #endif
  225808             :       /* */
  225809             : 
  225810             : 
  225811             : 
  225812             : 
  225813             :      public:
  225814             :       /* name Traversal Support Functions
  225815             :           \brief Traversal support functions ... incomplete-documentation
  225816             : 
  225817             :           These functions have been made public as part of the design, but they are suggested for internal use 
  225818             :           or by particularly knowledgable users for specialized tools or applications.
  225819             :        */
  225820             :       /* */
  225821             : 
  225822             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  225823             :        // (inferior to ROSE traversal mechanism, experimental).
  225824             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  225825             :        */
  225826             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  225827             : 
  225828             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  225829             :       /*! \brief support for the classic visitor pattern done in GoF */
  225830             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  225831             : 
  225832             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  225833             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  225834             :        */
  225835             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  225836             : 
  225837             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  225838             :        */
  225839             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  225840             : 
  225841             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  225842             :        // This traversal helps support internal tools that call static member functions.
  225843             :        // note: this function operates on the memory pools.
  225844             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  225845             :        */
  225846             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  225847             :       /* */
  225848             : 
  225849             : 
  225850             :      public:
  225851             :       /* name Memory Allocation Functions
  225852             :           \brief Memory allocations functions ... incomplete-documentation
  225853             : 
  225854             :           These functions have been made public as part of the design, but they are suggested for internal use 
  225855             :           or by particularly knowledgable users for specialized tools or applications.
  225856             :        */
  225857             :       /* */
  225858             : 
  225859             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  225860             : 
  225861             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  225862             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  225863             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  225864             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  225865             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  225866             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  225867             :           being used with the AST File I/O mechanism.
  225868             :        */
  225869             :           virtual bool isInMemoryPool() override;
  225870             : 
  225871             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  225872             : 
  225873             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  225874             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  225875             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  225876             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  225877             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  225878             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  225879             :           being used with the AST File I/O mechanism.
  225880             :        */
  225881             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  225882             : 
  225883             :       // DQ (4/30/2006): Modified to be a const function.
  225884             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  225885             : 
  225886             :           This functions is part of general support for many possible tools to operate 
  225887             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  225888             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  225889             :           less than the set of pointers used by the AST file I/O. This is part of
  225890             :           work implemented by Andreas, and support tools such as the AST graph generation.
  225891             : 
  225892             :           \warning This function can return unexpected data members and thus the 
  225893             :                    order and the number of elements is unpredicable and subject 
  225894             :                    to change.
  225895             : 
  225896             :           \returns STL vector of pairs of SgNode* and strings
  225897             :        */
  225898             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  225899             : 
  225900             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  225901             : 
  225902             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  225903             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  225904             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  225905             : 
  225906             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  225907             :                    and subject to change.
  225908             :        */
  225909             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  225910             : 
  225911             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  225912             : 
  225913             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  225914             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  225915             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  225916             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  225917             : 
  225918             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  225919             : 
  225920             :           \returns long
  225921             :        */
  225922             :           virtual long getChildIndex( SgNode* childNode ) const override;
  225923             : 
  225924             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  225925             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225926             :       /* \brief Constructor for use by AST File I/O Mechanism
  225927             : 
  225928             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  225929             :           which obtained via fast binary file I/O from disk.
  225930             :        */
  225931             :        // SgPassStatement( SgPassStatementStorageClass& source );
  225932             : 
  225933             : 
  225934             : 
  225935             : 
  225936             : 
  225937             :  // JH (10/24/2005): methods added to support the ast file IO
  225938             :     private:
  225939             : 
  225940             :       /* name AST Memory Allocation Support Functions
  225941             :           \brief Memory allocations support....
  225942             : 
  225943             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  225944             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  225945             :           and support the AST File I/O Mechanism.
  225946             :        */
  225947             :       /* */
  225948             : 
  225949             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  225950             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  225951             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  225952             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  225953             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  225954             :           a correspinding one in the AST_FILE_IO class!
  225955             :        */
  225956             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  225957             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225958             :       /* \brief Typedef used for low level memory access.
  225959             :        */
  225960             :        // typedef unsigned char* TestType;
  225961             : 
  225962             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  225963             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  225964             :       /* \brief Typedef used to hold memory addresses as values.
  225965             :        */
  225966             :        // typedef unsigned long  AddressType;
  225967             : 
  225968             : 
  225969             : 
  225970             :        // necessary, to have direct access to the p_freepointer and the private methods !
  225971             :       /*! \brief friend class declaration to support AST File I/O */
  225972             :           friend class AST_FILE_IO;
  225973             : 
  225974             :       /*! \brief friend class declaration to support AST File I/O */
  225975             :           friend class SgPassStatementStorageClass;
  225976             : 
  225977             :       /*! \brief friend class declaration to support AST File I/O */
  225978             :           friend class AstSpecificDataManagingClass;
  225979             : 
  225980             :       /*! \brief friend class declaration to support AST File I/O */
  225981             :           friend class AstSpecificDataManagingClassStorageClass;
  225982             :     public:
  225983             :       /*! \brief IR node constructor to support AST File I/O */
  225984             :           SgPassStatement( const SgPassStatementStorageClass& source );
  225985             : 
  225986             :  // private: // JJW hack
  225987             :        /*
  225988             :           name AST Memory Allocation Support Variables
  225989             :           Memory allocations support variables 
  225990             : 
  225991             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  225992             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  225993             :           and support the AST File I/O Mechanism.
  225994             :        */
  225995             :       /* */
  225996             : 
  225997             :     public:
  225998             : 
  225999             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  226000             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  226001             :       // virtual SgNode* addRegExpAttribute();
  226002             :       /*! \brief Support for AST matching using regular expression.
  226003             : 
  226004             :           This support is incomplete and the subject of current research to define 
  226005             :           RegEx trees to support inexact matching.
  226006             :        */
  226007             :           SgPassStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  226008             : 
  226009             : // *** COMMON CODE SECTION ENDS HERE ***
  226010             : 
  226011             : 
  226012             : // End of memberFunctionString
  226013             : // Start of memberFunctionString
  226014             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  226015             : 
  226016             :      // the generated cast function
  226017             :      // friend ROSE_DLL_API SgPassStatement* isSgPassStatement ( SgNode* s );
  226018             : 
  226019             :           typedef SgStatement base_node_type;
  226020             : 
  226021             : 
  226022             : // End of memberFunctionString
  226023             : // Start of memberFunctionString
  226024             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  226025             : 
  226026             :           void post_construction_initialization() override;
  226027             : 
  226028             : 
  226029             : // End of memberFunctionString
  226030             : 
  226031             : 
  226032             :      public: 
  226033             :          virtual ~SgPassStatement();
  226034             : 
  226035             : 
  226036             :      public: 
  226037             :          SgPassStatement(Sg_File_Info* startOfConstruct ); 
  226038             :          SgPassStatement(); 
  226039             : 
  226040             :     protected:
  226041             : 
  226042             :     friend struct Rose::Traits::generated::describe_node_t<SgPassStatement>;
  226043             : 
  226044             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226045             : 
  226046             : 
  226047             :    };
  226048             : #endif
  226049             : 
  226050             : // postdeclarations for SgPassStatement
  226051             : 
  226052             : /* #line 226053 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226053             : 
  226054             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  226055             : 
  226056             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226057             : 
  226058             : 
  226059             : /* #line 226060 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226060             : 
  226061             : 
  226062             : 
  226063             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226064             : 
  226065             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  226066             : //      This code is automatically generated for each 
  226067             : //      terminal and non-terminal within the defined 
  226068             : //      grammar.  There is a simple way to change the 
  226069             : //      code to fix bugs etc.  See the ROSE README file
  226070             : //      for directions.
  226071             : 
  226072             : // tps: (02/22/2010): Adding DLL export requirements
  226073             : #include "rosedll.h"
  226074             : 
  226075             : // predeclarations for SgAssertStmt
  226076             : 
  226077             : /* #line 226078 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226078             : 
  226079             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  226080             : 
  226081             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226082             : 
  226083             : #if 1
  226084             : // Class Definition for SgAssertStmt
  226085             : class ROSE_DLL_API SgAssertStmt  : public SgStatement
  226086             :    {
  226087             :      public:
  226088             : 
  226089             : 
  226090             : /* #line 226091 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226091             : 
  226092             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  226093             : // Start of memberFunctionString
  226094             : /* #line 2627 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  226095             : 
  226096             : 
  226097             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  226098             :           virtual unsigned int cfgIndexForEnd() const override;
  226099             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  226100             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  226101             : #endif
  226102             : 
  226103             : 
  226104             : 
  226105             : // End of memberFunctionString
  226106             : // Start of memberFunctionString
  226107             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  226108             : 
  226109             : // *** COMMON CODE SECTION BEGINS HERE ***
  226110             : 
  226111             :     public:
  226112             : 
  226113             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  226114             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  226115             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  226116             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  226117             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  226118             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  226119             : 
  226120             :       /*! \brief returns a string representing the class name */
  226121             :           virtual std::string class_name() const override;
  226122             : 
  226123             :       /*! \brief returns new style SageIII enum values */
  226124             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  226125             : 
  226126             :       /*! \brief static variant value */
  226127             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  226128             :        // static const VariantT static_variant = V_SgAssertStmt;
  226129             :           enum { static_variant = V_SgAssertStmt };
  226130             : 
  226131             :        /* the generated cast function */
  226132             :       /*! \brief Casts pointer from base class to derived class */
  226133             :           ROSE_DLL_API friend       SgAssertStmt* isSgAssertStmt(       SgNode * s );
  226134             : 
  226135             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  226136             :           ROSE_DLL_API friend const SgAssertStmt* isSgAssertStmt( const SgNode * s );
  226137             : 
  226138             :      // ******************************************
  226139             :      // * Memory Pool / New / Delete
  226140             :      // ******************************************
  226141             : 
  226142             :      public:
  226143             :           /// \private
  226144             :           static const unsigned pool_size; //
  226145             :           /// \private
  226146             :           static std::vector<unsigned char *> pools; //
  226147             :           /// \private
  226148             :           static SgAssertStmt * next_node; // 
  226149             : 
  226150             :           /// \private
  226151             :           static unsigned long initializeStorageClassArray(SgAssertStmtStorageClass *); //
  226152             : 
  226153             :           /// \private
  226154             :           static void clearMemoryPool(); //
  226155             :           static void deleteMemoryPool(); //
  226156             : 
  226157             :           /// \private
  226158             :           static void extendMemoryPoolForFileIO(); //
  226159             : 
  226160             :           /// \private
  226161             :           static SgAssertStmt * getPointerFromGlobalIndex(unsigned long); //
  226162             :           /// \private
  226163             :           static SgAssertStmt * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  226164             : 
  226165             :           /// \private
  226166             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  226167             :           /// \private
  226168             :           static void resetValidFreepointers(); //
  226169             :           /// \private
  226170             :           static unsigned long getNumberOfLastValidPointer(); //
  226171             : 
  226172             : 
  226173             : #if defined(INLINE_FUNCTIONS)
  226174             :       /*! \brief returns pointer to newly allocated IR node */
  226175             :           inline void *operator new (size_t size);
  226176             : #else
  226177             :       /*! \brief returns pointer to newly allocated IR node */
  226178             :           void *operator new (size_t size);
  226179             : #endif
  226180             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  226181             :           void operator delete (void* pointer, size_t size);
  226182             : 
  226183             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  226184           0 :           void operator delete (void* pointer)
  226185             :              {
  226186             :             // This is the generated delete operator...
  226187           0 :                SgAssertStmt::operator delete (pointer,sizeof(SgAssertStmt));
  226188             :              }
  226189             : 
  226190             :       /*! \brief Returns the total number of IR nodes of this type */
  226191             :           static size_t numberOfNodes();
  226192             : 
  226193             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  226194             :           static size_t memoryUsage();
  226195             : 
  226196             :       // End of scope which started in IR nodes specific code 
  226197             :       /* */
  226198             : 
  226199             :       /* name Internal Functions
  226200             :           \brief Internal functions ... incomplete-documentation
  226201             : 
  226202             :           These functions have been made public as part of the design, but they are suggested for internal use 
  226203             :           or by particularly knowledgeable users for specialized tools or applications.
  226204             : 
  226205             :           \internal We could not make these private because they are required by user for special purposes. And 
  226206             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  226207             :          
  226208             :        */
  226209             : 
  226210             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  226211             :        // overridden in every class by *generated* implementation
  226212             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  226213             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  226214             :        // MS: 06/28/02 container of names of variables or container indices 
  226215             :        // used used in the traversal to access AST successor nodes
  226216             :        // overridden in every class by *generated* implementation
  226217             :       /*! \brief container of names of variables or container indices used used in the traversal
  226218             :           to access AST successor nodes overridden in every class by *generated* implementation */
  226219             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  226220             : 
  226221             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  226222             :        // than all the vector copies. The implementation for these functions is generated for each class.
  226223             :       /*! \brief return number of children in the traversal successor list */
  226224             :           virtual size_t get_numberOfTraversalSuccessors() override;
  226225             :       /*! \brief index-based access to traversal successors by index number */
  226226             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  226227             :       /*! \brief index-based access to traversal successors by child node */
  226228             :           virtual size_t get_childIndex(SgNode *child) override;
  226229             : 
  226230             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  226231             :        // MS: 08/16/2002 method for generating RTI information
  226232             :       /*! \brief return C++ Runtime-Time-Information */
  226233             :           virtual RTIReturnType roseRTI() override;
  226234             : #endif
  226235             :       /* */
  226236             : 
  226237             : 
  226238             : 
  226239             :       /* name Deprecated Functions
  226240             :           \brief Deprecated functions ... incomplete-documentation
  226241             : 
  226242             :           These functions have been deprecated from use.
  226243             :        */
  226244             :       /* */
  226245             : 
  226246             :       /*! returns a C style string (char*) representing the class name */
  226247             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  226248             : 
  226249             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  226250             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  226251             : #if 0
  226252             :       /*! returns old style Sage II enum values */
  226253             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  226254             :       /*! returns old style Sage II enum values */
  226255             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  226256             : #endif
  226257             :       /* */
  226258             : 
  226259             : 
  226260             : 
  226261             : 
  226262             :      public:
  226263             :       /* name Traversal Support Functions
  226264             :           \brief Traversal support functions ... incomplete-documentation
  226265             : 
  226266             :           These functions have been made public as part of the design, but they are suggested for internal use 
  226267             :           or by particularly knowledgable users for specialized tools or applications.
  226268             :        */
  226269             :       /* */
  226270             : 
  226271             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  226272             :        // (inferior to ROSE traversal mechanism, experimental).
  226273             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  226274             :        */
  226275             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  226276             : 
  226277             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  226278             :       /*! \brief support for the classic visitor pattern done in GoF */
  226279             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  226280             : 
  226281             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  226282             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  226283             :        */
  226284             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  226285             : 
  226286             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  226287             :        */
  226288             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  226289             : 
  226290             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  226291             :        // This traversal helps support internal tools that call static member functions.
  226292             :        // note: this function operates on the memory pools.
  226293             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  226294             :        */
  226295             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  226296             :       /* */
  226297             : 
  226298             : 
  226299             :      public:
  226300             :       /* name Memory Allocation Functions
  226301             :           \brief Memory allocations functions ... incomplete-documentation
  226302             : 
  226303             :           These functions have been made public as part of the design, but they are suggested for internal use 
  226304             :           or by particularly knowledgable users for specialized tools or applications.
  226305             :        */
  226306             :       /* */
  226307             : 
  226308             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  226309             : 
  226310             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  226311             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  226312             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  226313             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  226314             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  226315             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  226316             :           being used with the AST File I/O mechanism.
  226317             :        */
  226318             :           virtual bool isInMemoryPool() override;
  226319             : 
  226320             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  226321             : 
  226322             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  226323             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  226324             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  226325             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  226326             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  226327             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  226328             :           being used with the AST File I/O mechanism.
  226329             :        */
  226330             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  226331             : 
  226332             :       // DQ (4/30/2006): Modified to be a const function.
  226333             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  226334             : 
  226335             :           This functions is part of general support for many possible tools to operate 
  226336             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  226337             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  226338             :           less than the set of pointers used by the AST file I/O. This is part of
  226339             :           work implemented by Andreas, and support tools such as the AST graph generation.
  226340             : 
  226341             :           \warning This function can return unexpected data members and thus the 
  226342             :                    order and the number of elements is unpredicable and subject 
  226343             :                    to change.
  226344             : 
  226345             :           \returns STL vector of pairs of SgNode* and strings
  226346             :        */
  226347             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  226348             : 
  226349             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  226350             : 
  226351             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  226352             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  226353             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  226354             : 
  226355             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  226356             :                    and subject to change.
  226357             :        */
  226358             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  226359             : 
  226360             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  226361             : 
  226362             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  226363             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  226364             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  226365             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  226366             : 
  226367             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  226368             : 
  226369             :           \returns long
  226370             :        */
  226371             :           virtual long getChildIndex( SgNode* childNode ) const override;
  226372             : 
  226373             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  226374             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  226375             :       /* \brief Constructor for use by AST File I/O Mechanism
  226376             : 
  226377             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  226378             :           which obtained via fast binary file I/O from disk.
  226379             :        */
  226380             :        // SgAssertStmt( SgAssertStmtStorageClass& source );
  226381             : 
  226382             : 
  226383             : 
  226384             : 
  226385             : 
  226386             :  // JH (10/24/2005): methods added to support the ast file IO
  226387             :     private:
  226388             : 
  226389             :       /* name AST Memory Allocation Support Functions
  226390             :           \brief Memory allocations support....
  226391             : 
  226392             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  226393             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  226394             :           and support the AST File I/O Mechanism.
  226395             :        */
  226396             :       /* */
  226397             : 
  226398             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  226399             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  226400             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  226401             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  226402             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  226403             :           a correspinding one in the AST_FILE_IO class!
  226404             :        */
  226405             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  226406             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  226407             :       /* \brief Typedef used for low level memory access.
  226408             :        */
  226409             :        // typedef unsigned char* TestType;
  226410             : 
  226411             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  226412             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  226413             :       /* \brief Typedef used to hold memory addresses as values.
  226414             :        */
  226415             :        // typedef unsigned long  AddressType;
  226416             : 
  226417             : 
  226418             : 
  226419             :        // necessary, to have direct access to the p_freepointer and the private methods !
  226420             :       /*! \brief friend class declaration to support AST File I/O */
  226421             :           friend class AST_FILE_IO;
  226422             : 
  226423             :       /*! \brief friend class declaration to support AST File I/O */
  226424             :           friend class SgAssertStmtStorageClass;
  226425             : 
  226426             :       /*! \brief friend class declaration to support AST File I/O */
  226427             :           friend class AstSpecificDataManagingClass;
  226428             : 
  226429             :       /*! \brief friend class declaration to support AST File I/O */
  226430             :           friend class AstSpecificDataManagingClassStorageClass;
  226431             :     public:
  226432             :       /*! \brief IR node constructor to support AST File I/O */
  226433             :           SgAssertStmt( const SgAssertStmtStorageClass& source );
  226434             : 
  226435             :  // private: // JJW hack
  226436             :        /*
  226437             :           name AST Memory Allocation Support Variables
  226438             :           Memory allocations support variables 
  226439             : 
  226440             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  226441             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  226442             :           and support the AST File I/O Mechanism.
  226443             :        */
  226444             :       /* */
  226445             : 
  226446             :     public:
  226447             : 
  226448             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  226449             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  226450             :       // virtual SgNode* addRegExpAttribute();
  226451             :       /*! \brief Support for AST matching using regular expression.
  226452             : 
  226453             :           This support is incomplete and the subject of current research to define 
  226454             :           RegEx trees to support inexact matching.
  226455             :        */
  226456             :           SgAssertStmt* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  226457             : 
  226458             : // *** COMMON CODE SECTION ENDS HERE ***
  226459             : 
  226460             : 
  226461             : // End of memberFunctionString
  226462             : // Start of memberFunctionString
  226463             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  226464             : 
  226465             :      // the generated cast function
  226466             :      // friend ROSE_DLL_API SgAssertStmt* isSgAssertStmt ( SgNode* s );
  226467             : 
  226468             :           typedef SgStatement base_node_type;
  226469             : 
  226470             : 
  226471             : // End of memberFunctionString
  226472             : // Start of memberFunctionString
  226473             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  226474             : 
  226475             :           void post_construction_initialization() override;
  226476             : 
  226477             : 
  226478             : // End of memberFunctionString
  226479             : 
  226480             :      public: 
  226481             :          SgExpression* get_test() const;
  226482             :          void set_test(SgExpression* test);
  226483             : 
  226484             :      public: 
  226485             :          SgExpression* get_exception_argument() const;
  226486             :          void set_exception_argument(SgExpression* exception_argument);
  226487             : 
  226488             : 
  226489             :      public: 
  226490             :          virtual ~SgAssertStmt();
  226491             : 
  226492             : 
  226493             :      public: 
  226494             :          SgAssertStmt(Sg_File_Info* startOfConstruct , SgExpression* test = NULL); 
  226495             :          SgAssertStmt(SgExpression* test); 
  226496             : 
  226497             :     protected:
  226498             : // Start of memberFunctionString
  226499             : SgExpression* p_test;
  226500             :           
  226501             : // End of memberFunctionString
  226502             : // Start of memberFunctionString
  226503             : SgExpression* p_exception_argument;
  226504             :           
  226505             : // End of memberFunctionString
  226506             : 
  226507             :     friend struct Rose::Traits::generated::describe_node_t<SgAssertStmt>;
  226508             :     friend struct Rose::Traits::generated::describe_field_t<SgAssertStmt, SgExpression*,&SgAssertStmt::p_test>;
  226509             :     friend struct Rose::Traits::generated::describe_field_t<SgAssertStmt, SgExpression*,&SgAssertStmt::p_exception_argument>;
  226510             : 
  226511             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226512             : 
  226513             : 
  226514             :    };
  226515             : #endif
  226516             : 
  226517             : // postdeclarations for SgAssertStmt
  226518             : 
  226519             : /* #line 226520 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226520             : 
  226521             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  226522             : 
  226523             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226524             : 
  226525             : 
  226526             : /* #line 226527 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226527             : 
  226528             : 
  226529             : 
  226530             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226531             : 
  226532             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  226533             : //      This code is automatically generated for each 
  226534             : //      terminal and non-terminal within the defined 
  226535             : //      grammar.  There is a simple way to change the 
  226536             : //      code to fix bugs etc.  See the ROSE README file
  226537             : //      for directions.
  226538             : 
  226539             : // tps: (02/22/2010): Adding DLL export requirements
  226540             : #include "rosedll.h"
  226541             : 
  226542             : // predeclarations for SgExecStatement
  226543             : 
  226544             : /* #line 226545 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226545             : 
  226546             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  226547             : 
  226548             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226549             : 
  226550             : #if 1
  226551             : // Class Definition for SgExecStatement
  226552             : class ROSE_DLL_API SgExecStatement  : public SgStatement
  226553             :    {
  226554             :      public:
  226555             : 
  226556             : 
  226557             : /* #line 226558 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226558             : 
  226559             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  226560             : // Start of memberFunctionString
  226561             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  226562             : 
  226563             : // *** COMMON CODE SECTION BEGINS HERE ***
  226564             : 
  226565             :     public:
  226566             : 
  226567             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  226568             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  226569             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  226570             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  226571             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  226572             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  226573             : 
  226574             :       /*! \brief returns a string representing the class name */
  226575             :           virtual std::string class_name() const override;
  226576             : 
  226577             :       /*! \brief returns new style SageIII enum values */
  226578             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  226579             : 
  226580             :       /*! \brief static variant value */
  226581             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  226582             :        // static const VariantT static_variant = V_SgExecStatement;
  226583             :           enum { static_variant = V_SgExecStatement };
  226584             : 
  226585             :        /* the generated cast function */
  226586             :       /*! \brief Casts pointer from base class to derived class */
  226587             :           ROSE_DLL_API friend       SgExecStatement* isSgExecStatement(       SgNode * s );
  226588             : 
  226589             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  226590             :           ROSE_DLL_API friend const SgExecStatement* isSgExecStatement( const SgNode * s );
  226591             : 
  226592             :      // ******************************************
  226593             :      // * Memory Pool / New / Delete
  226594             :      // ******************************************
  226595             : 
  226596             :      public:
  226597             :           /// \private
  226598             :           static const unsigned pool_size; //
  226599             :           /// \private
  226600             :           static std::vector<unsigned char *> pools; //
  226601             :           /// \private
  226602             :           static SgExecStatement * next_node; // 
  226603             : 
  226604             :           /// \private
  226605             :           static unsigned long initializeStorageClassArray(SgExecStatementStorageClass *); //
  226606             : 
  226607             :           /// \private
  226608             :           static void clearMemoryPool(); //
  226609             :           static void deleteMemoryPool(); //
  226610             : 
  226611             :           /// \private
  226612             :           static void extendMemoryPoolForFileIO(); //
  226613             : 
  226614             :           /// \private
  226615             :           static SgExecStatement * getPointerFromGlobalIndex(unsigned long); //
  226616             :           /// \private
  226617             :           static SgExecStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  226618             : 
  226619             :           /// \private
  226620             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  226621             :           /// \private
  226622             :           static void resetValidFreepointers(); //
  226623             :           /// \private
  226624             :           static unsigned long getNumberOfLastValidPointer(); //
  226625             : 
  226626             : 
  226627             : #if defined(INLINE_FUNCTIONS)
  226628             :       /*! \brief returns pointer to newly allocated IR node */
  226629             :           inline void *operator new (size_t size);
  226630             : #else
  226631             :       /*! \brief returns pointer to newly allocated IR node */
  226632             :           void *operator new (size_t size);
  226633             : #endif
  226634             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  226635             :           void operator delete (void* pointer, size_t size);
  226636             : 
  226637             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  226638           0 :           void operator delete (void* pointer)
  226639             :              {
  226640             :             // This is the generated delete operator...
  226641           0 :                SgExecStatement::operator delete (pointer,sizeof(SgExecStatement));
  226642             :              }
  226643             : 
  226644             :       /*! \brief Returns the total number of IR nodes of this type */
  226645             :           static size_t numberOfNodes();
  226646             : 
  226647             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  226648             :           static size_t memoryUsage();
  226649             : 
  226650             :       // End of scope which started in IR nodes specific code 
  226651             :       /* */
  226652             : 
  226653             :       /* name Internal Functions
  226654             :           \brief Internal functions ... incomplete-documentation
  226655             : 
  226656             :           These functions have been made public as part of the design, but they are suggested for internal use 
  226657             :           or by particularly knowledgeable users for specialized tools or applications.
  226658             : 
  226659             :           \internal We could not make these private because they are required by user for special purposes. And 
  226660             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  226661             :          
  226662             :        */
  226663             : 
  226664             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  226665             :        // overridden in every class by *generated* implementation
  226666             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  226667             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  226668             :        // MS: 06/28/02 container of names of variables or container indices 
  226669             :        // used used in the traversal to access AST successor nodes
  226670             :        // overridden in every class by *generated* implementation
  226671             :       /*! \brief container of names of variables or container indices used used in the traversal
  226672             :           to access AST successor nodes overridden in every class by *generated* implementation */
  226673             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  226674             : 
  226675             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  226676             :        // than all the vector copies. The implementation for these functions is generated for each class.
  226677             :       /*! \brief return number of children in the traversal successor list */
  226678             :           virtual size_t get_numberOfTraversalSuccessors() override;
  226679             :       /*! \brief index-based access to traversal successors by index number */
  226680             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  226681             :       /*! \brief index-based access to traversal successors by child node */
  226682             :           virtual size_t get_childIndex(SgNode *child) override;
  226683             : 
  226684             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  226685             :        // MS: 08/16/2002 method for generating RTI information
  226686             :       /*! \brief return C++ Runtime-Time-Information */
  226687             :           virtual RTIReturnType roseRTI() override;
  226688             : #endif
  226689             :       /* */
  226690             : 
  226691             : 
  226692             : 
  226693             :       /* name Deprecated Functions
  226694             :           \brief Deprecated functions ... incomplete-documentation
  226695             : 
  226696             :           These functions have been deprecated from use.
  226697             :        */
  226698             :       /* */
  226699             : 
  226700             :       /*! returns a C style string (char*) representing the class name */
  226701             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  226702             : 
  226703             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  226704             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  226705             : #if 0
  226706             :       /*! returns old style Sage II enum values */
  226707             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  226708             :       /*! returns old style Sage II enum values */
  226709             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  226710             : #endif
  226711             :       /* */
  226712             : 
  226713             : 
  226714             : 
  226715             : 
  226716             :      public:
  226717             :       /* name Traversal Support Functions
  226718             :           \brief Traversal support functions ... incomplete-documentation
  226719             : 
  226720             :           These functions have been made public as part of the design, but they are suggested for internal use 
  226721             :           or by particularly knowledgable users for specialized tools or applications.
  226722             :        */
  226723             :       /* */
  226724             : 
  226725             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  226726             :        // (inferior to ROSE traversal mechanism, experimental).
  226727             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  226728             :        */
  226729             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  226730             : 
  226731             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  226732             :       /*! \brief support for the classic visitor pattern done in GoF */
  226733             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  226734             : 
  226735             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  226736             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  226737             :        */
  226738             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  226739             : 
  226740             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  226741             :        */
  226742             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  226743             : 
  226744             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  226745             :        // This traversal helps support internal tools that call static member functions.
  226746             :        // note: this function operates on the memory pools.
  226747             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  226748             :        */
  226749             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  226750             :       /* */
  226751             : 
  226752             : 
  226753             :      public:
  226754             :       /* name Memory Allocation Functions
  226755             :           \brief Memory allocations functions ... incomplete-documentation
  226756             : 
  226757             :           These functions have been made public as part of the design, but they are suggested for internal use 
  226758             :           or by particularly knowledgable users for specialized tools or applications.
  226759             :        */
  226760             :       /* */
  226761             : 
  226762             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  226763             : 
  226764             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  226765             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  226766             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  226767             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  226768             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  226769             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  226770             :           being used with the AST File I/O mechanism.
  226771             :        */
  226772             :           virtual bool isInMemoryPool() override;
  226773             : 
  226774             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  226775             : 
  226776             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  226777             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  226778             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  226779             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  226780             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  226781             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  226782             :           being used with the AST File I/O mechanism.
  226783             :        */
  226784             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  226785             : 
  226786             :       // DQ (4/30/2006): Modified to be a const function.
  226787             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  226788             : 
  226789             :           This functions is part of general support for many possible tools to operate 
  226790             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  226791             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  226792             :           less than the set of pointers used by the AST file I/O. This is part of
  226793             :           work implemented by Andreas, and support tools such as the AST graph generation.
  226794             : 
  226795             :           \warning This function can return unexpected data members and thus the 
  226796             :                    order and the number of elements is unpredicable and subject 
  226797             :                    to change.
  226798             : 
  226799             :           \returns STL vector of pairs of SgNode* and strings
  226800             :        */
  226801             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  226802             : 
  226803             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  226804             : 
  226805             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  226806             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  226807             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  226808             : 
  226809             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  226810             :                    and subject to change.
  226811             :        */
  226812             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  226813             : 
  226814             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  226815             : 
  226816             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  226817             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  226818             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  226819             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  226820             : 
  226821             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  226822             : 
  226823             :           \returns long
  226824             :        */
  226825             :           virtual long getChildIndex( SgNode* childNode ) const override;
  226826             : 
  226827             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  226828             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  226829             :       /* \brief Constructor for use by AST File I/O Mechanism
  226830             : 
  226831             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  226832             :           which obtained via fast binary file I/O from disk.
  226833             :        */
  226834             :        // SgExecStatement( SgExecStatementStorageClass& source );
  226835             : 
  226836             : 
  226837             : 
  226838             : 
  226839             : 
  226840             :  // JH (10/24/2005): methods added to support the ast file IO
  226841             :     private:
  226842             : 
  226843             :       /* name AST Memory Allocation Support Functions
  226844             :           \brief Memory allocations support....
  226845             : 
  226846             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  226847             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  226848             :           and support the AST File I/O Mechanism.
  226849             :        */
  226850             :       /* */
  226851             : 
  226852             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  226853             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  226854             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  226855             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  226856             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  226857             :           a correspinding one in the AST_FILE_IO class!
  226858             :        */
  226859             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  226860             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  226861             :       /* \brief Typedef used for low level memory access.
  226862             :        */
  226863             :        // typedef unsigned char* TestType;
  226864             : 
  226865             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  226866             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  226867             :       /* \brief Typedef used to hold memory addresses as values.
  226868             :        */
  226869             :        // typedef unsigned long  AddressType;
  226870             : 
  226871             : 
  226872             : 
  226873             :        // necessary, to have direct access to the p_freepointer and the private methods !
  226874             :       /*! \brief friend class declaration to support AST File I/O */
  226875             :           friend class AST_FILE_IO;
  226876             : 
  226877             :       /*! \brief friend class declaration to support AST File I/O */
  226878             :           friend class SgExecStatementStorageClass;
  226879             : 
  226880             :       /*! \brief friend class declaration to support AST File I/O */
  226881             :           friend class AstSpecificDataManagingClass;
  226882             : 
  226883             :       /*! \brief friend class declaration to support AST File I/O */
  226884             :           friend class AstSpecificDataManagingClassStorageClass;
  226885             :     public:
  226886             :       /*! \brief IR node constructor to support AST File I/O */
  226887             :           SgExecStatement( const SgExecStatementStorageClass& source );
  226888             : 
  226889             :  // private: // JJW hack
  226890             :        /*
  226891             :           name AST Memory Allocation Support Variables
  226892             :           Memory allocations support variables 
  226893             : 
  226894             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  226895             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  226896             :           and support the AST File I/O Mechanism.
  226897             :        */
  226898             :       /* */
  226899             : 
  226900             :     public:
  226901             : 
  226902             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  226903             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  226904             :       // virtual SgNode* addRegExpAttribute();
  226905             :       /*! \brief Support for AST matching using regular expression.
  226906             : 
  226907             :           This support is incomplete and the subject of current research to define 
  226908             :           RegEx trees to support inexact matching.
  226909             :        */
  226910             :           SgExecStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  226911             : 
  226912             : // *** COMMON CODE SECTION ENDS HERE ***
  226913             : 
  226914             : 
  226915             : // End of memberFunctionString
  226916             : // Start of memberFunctionString
  226917             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  226918             : 
  226919             :      // the generated cast function
  226920             :      // friend ROSE_DLL_API SgExecStatement* isSgExecStatement ( SgNode* s );
  226921             : 
  226922             :           typedef SgStatement base_node_type;
  226923             : 
  226924             : 
  226925             : // End of memberFunctionString
  226926             : // Start of memberFunctionString
  226927             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  226928             : 
  226929             :           void post_construction_initialization() override;
  226930             : 
  226931             : 
  226932             : // End of memberFunctionString
  226933             : 
  226934             :      public: 
  226935             :          SgExpression* get_executable() const;
  226936             :          void set_executable(SgExpression* executable);
  226937             : 
  226938             :      public: 
  226939             :          SgExpression* get_globals() const;
  226940             :          void set_globals(SgExpression* globals);
  226941             : 
  226942             :      public: 
  226943             :          SgExpression* get_locals() const;
  226944             :          void set_locals(SgExpression* locals);
  226945             : 
  226946             : 
  226947             :      public: 
  226948             :          virtual ~SgExecStatement();
  226949             : 
  226950             : 
  226951             :      public: 
  226952             :          SgExecStatement(Sg_File_Info* startOfConstruct , SgExpression* executable = NULL, SgExpression* globals = NULL, SgExpression* locals = NULL); 
  226953             :          SgExecStatement(SgExpression* executable, SgExpression* globals, SgExpression* locals); 
  226954             : 
  226955             :     protected:
  226956             : // Start of memberFunctionString
  226957             : SgExpression* p_executable;
  226958             :           
  226959             : // End of memberFunctionString
  226960             : // Start of memberFunctionString
  226961             : SgExpression* p_globals;
  226962             :           
  226963             : // End of memberFunctionString
  226964             : // Start of memberFunctionString
  226965             : SgExpression* p_locals;
  226966             :           
  226967             : // End of memberFunctionString
  226968             : 
  226969             :     friend struct Rose::Traits::generated::describe_node_t<SgExecStatement>;
  226970             :     friend struct Rose::Traits::generated::describe_field_t<SgExecStatement, SgExpression*,&SgExecStatement::p_executable>;
  226971             :     friend struct Rose::Traits::generated::describe_field_t<SgExecStatement, SgExpression*,&SgExecStatement::p_globals>;
  226972             :     friend struct Rose::Traits::generated::describe_field_t<SgExecStatement, SgExpression*,&SgExecStatement::p_locals>;
  226973             : 
  226974             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226975             : 
  226976             : 
  226977             :    };
  226978             : #endif
  226979             : 
  226980             : // postdeclarations for SgExecStatement
  226981             : 
  226982             : /* #line 226983 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226983             : 
  226984             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  226985             : 
  226986             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226987             : 
  226988             : 
  226989             : /* #line 226990 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  226990             : 
  226991             : 
  226992             : 
  226993             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  226994             : 
  226995             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  226996             : //      This code is automatically generated for each 
  226997             : //      terminal and non-terminal within the defined 
  226998             : //      grammar.  There is a simple way to change the 
  226999             : //      code to fix bugs etc.  See the ROSE README file
  227000             : //      for directions.
  227001             : 
  227002             : // tps: (02/22/2010): Adding DLL export requirements
  227003             : #include "rosedll.h"
  227004             : 
  227005             : // predeclarations for SgImageControlStatement
  227006             : 
  227007             : /* #line 227008 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227008             : 
  227009             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  227010             : 
  227011             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227012             : 
  227013             : #if 1
  227014             : // Class Definition for SgImageControlStatement
  227015             : class ROSE_DLL_API SgImageControlStatement  : public SgStatement
  227016             :    {
  227017             :      public:
  227018             : 
  227019             : 
  227020             : /* #line 227021 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227021             : 
  227022             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  227023             : // Start of memberFunctionString
  227024             : /* #line 3429 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  227025             : 
  227026             :   // This is a base class for all the image control statements.
  227027             :   // Except for allocate and deallocate statements
  227028             : 
  227029             :      public:
  227030             :       //! Fortran specific classification for image control statements
  227031             :           enum image_control_statement_enum
  227032             :              {
  227033             :                e_unknown,
  227034             :                e_sync_all,
  227035             :                e_sync_images,
  227036             :                e_sync_memory,
  227037             :                e_sync_team,
  227038             :                e_change_team,
  227039             :                e_critical,
  227040             :                e_event_post,
  227041             :                e_event_wait,
  227042             :                e_form_team,
  227043             :                e_lock,
  227044             :                e_unlock,
  227045             :             // e_allocate,      /* does not derive from SgImageControlStatement */
  227046             :             // e_deallocate,    /* does not derive from SgImageControlStatement */
  227047             :                e_last_image_control_statement
  227048             :              };
  227049             : 
  227050             : 
  227051             : 
  227052             : // End of memberFunctionString
  227053             : // Start of memberFunctionString
  227054             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  227055             : 
  227056             : // *** COMMON CODE SECTION BEGINS HERE ***
  227057             : 
  227058             :     public:
  227059             : 
  227060             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  227061             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  227062             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  227063             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  227064             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  227065             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  227066             : 
  227067             :       /*! \brief returns a string representing the class name */
  227068             :           virtual std::string class_name() const override;
  227069             : 
  227070             :       /*! \brief returns new style SageIII enum values */
  227071             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  227072             : 
  227073             :       /*! \brief static variant value */
  227074             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  227075             :        // static const VariantT static_variant = V_SgImageControlStatement;
  227076             :           enum { static_variant = V_SgImageControlStatement };
  227077             : 
  227078             :        /* the generated cast function */
  227079             :       /*! \brief Casts pointer from base class to derived class */
  227080             :           ROSE_DLL_API friend       SgImageControlStatement* isSgImageControlStatement(       SgNode * s );
  227081             : 
  227082             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  227083             :           ROSE_DLL_API friend const SgImageControlStatement* isSgImageControlStatement( const SgNode * s );
  227084             : 
  227085             :      // ******************************************
  227086             :      // * Memory Pool / New / Delete
  227087             :      // ******************************************
  227088             : 
  227089             :      public:
  227090             :           /// \private
  227091             :           static const unsigned pool_size; //
  227092             :           /// \private
  227093             :           static std::vector<unsigned char *> pools; //
  227094             :           /// \private
  227095             :           static SgImageControlStatement * next_node; // 
  227096             : 
  227097             :           /// \private
  227098             :           static unsigned long initializeStorageClassArray(SgImageControlStatementStorageClass *); //
  227099             : 
  227100             :           /// \private
  227101             :           static void clearMemoryPool(); //
  227102             :           static void deleteMemoryPool(); //
  227103             : 
  227104             :           /// \private
  227105             :           static void extendMemoryPoolForFileIO(); //
  227106             : 
  227107             :           /// \private
  227108             :           static SgImageControlStatement * getPointerFromGlobalIndex(unsigned long); //
  227109             :           /// \private
  227110             :           static SgImageControlStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  227111             : 
  227112             :           /// \private
  227113             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  227114             :           /// \private
  227115             :           static void resetValidFreepointers(); //
  227116             :           /// \private
  227117             :           static unsigned long getNumberOfLastValidPointer(); //
  227118             : 
  227119             : 
  227120             : #if defined(INLINE_FUNCTIONS)
  227121             :       /*! \brief returns pointer to newly allocated IR node */
  227122             :           inline void *operator new (size_t size);
  227123             : #else
  227124             :       /*! \brief returns pointer to newly allocated IR node */
  227125             :           void *operator new (size_t size);
  227126             : #endif
  227127             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  227128             :           void operator delete (void* pointer, size_t size);
  227129             : 
  227130             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  227131           0 :           void operator delete (void* pointer)
  227132             :              {
  227133             :             // This is the generated delete operator...
  227134           0 :                SgImageControlStatement::operator delete (pointer,sizeof(SgImageControlStatement));
  227135             :              }
  227136             : 
  227137             :       /*! \brief Returns the total number of IR nodes of this type */
  227138             :           static size_t numberOfNodes();
  227139             : 
  227140             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  227141             :           static size_t memoryUsage();
  227142             : 
  227143             :       // End of scope which started in IR nodes specific code 
  227144             :       /* */
  227145             : 
  227146             :       /* name Internal Functions
  227147             :           \brief Internal functions ... incomplete-documentation
  227148             : 
  227149             :           These functions have been made public as part of the design, but they are suggested for internal use 
  227150             :           or by particularly knowledgeable users for specialized tools or applications.
  227151             : 
  227152             :           \internal We could not make these private because they are required by user for special purposes. And 
  227153             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  227154             :          
  227155             :        */
  227156             : 
  227157             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  227158             :        // overridden in every class by *generated* implementation
  227159             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  227160             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  227161             :        // MS: 06/28/02 container of names of variables or container indices 
  227162             :        // used used in the traversal to access AST successor nodes
  227163             :        // overridden in every class by *generated* implementation
  227164             :       /*! \brief container of names of variables or container indices used used in the traversal
  227165             :           to access AST successor nodes overridden in every class by *generated* implementation */
  227166             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  227167             : 
  227168             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  227169             :        // than all the vector copies. The implementation for these functions is generated for each class.
  227170             :       /*! \brief return number of children in the traversal successor list */
  227171             :           virtual size_t get_numberOfTraversalSuccessors() override;
  227172             :       /*! \brief index-based access to traversal successors by index number */
  227173             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  227174             :       /*! \brief index-based access to traversal successors by child node */
  227175             :           virtual size_t get_childIndex(SgNode *child) override;
  227176             : 
  227177             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  227178             :        // MS: 08/16/2002 method for generating RTI information
  227179             :       /*! \brief return C++ Runtime-Time-Information */
  227180             :           virtual RTIReturnType roseRTI() override;
  227181             : #endif
  227182             :       /* */
  227183             : 
  227184             : 
  227185             : 
  227186             :       /* name Deprecated Functions
  227187             :           \brief Deprecated functions ... incomplete-documentation
  227188             : 
  227189             :           These functions have been deprecated from use.
  227190             :        */
  227191             :       /* */
  227192             : 
  227193             :       /*! returns a C style string (char*) representing the class name */
  227194             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  227195             : 
  227196             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  227197             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  227198             : #if 0
  227199             :       /*! returns old style Sage II enum values */
  227200             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  227201             :       /*! returns old style Sage II enum values */
  227202             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  227203             : #endif
  227204             :       /* */
  227205             : 
  227206             : 
  227207             : 
  227208             : 
  227209             :      public:
  227210             :       /* name Traversal Support Functions
  227211             :           \brief Traversal support functions ... incomplete-documentation
  227212             : 
  227213             :           These functions have been made public as part of the design, but they are suggested for internal use 
  227214             :           or by particularly knowledgable users for specialized tools or applications.
  227215             :        */
  227216             :       /* */
  227217             : 
  227218             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  227219             :        // (inferior to ROSE traversal mechanism, experimental).
  227220             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  227221             :        */
  227222             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  227223             : 
  227224             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  227225             :       /*! \brief support for the classic visitor pattern done in GoF */
  227226             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  227227             : 
  227228             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  227229             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  227230             :        */
  227231             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  227232             : 
  227233             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  227234             :        */
  227235             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  227236             : 
  227237             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  227238             :        // This traversal helps support internal tools that call static member functions.
  227239             :        // note: this function operates on the memory pools.
  227240             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  227241             :        */
  227242             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  227243             :       /* */
  227244             : 
  227245             : 
  227246             :      public:
  227247             :       /* name Memory Allocation Functions
  227248             :           \brief Memory allocations functions ... incomplete-documentation
  227249             : 
  227250             :           These functions have been made public as part of the design, but they are suggested for internal use 
  227251             :           or by particularly knowledgable users for specialized tools or applications.
  227252             :        */
  227253             :       /* */
  227254             : 
  227255             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  227256             : 
  227257             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  227258             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  227259             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  227260             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  227261             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  227262             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  227263             :           being used with the AST File I/O mechanism.
  227264             :        */
  227265             :           virtual bool isInMemoryPool() override;
  227266             : 
  227267             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  227268             : 
  227269             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  227270             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  227271             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  227272             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  227273             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  227274             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  227275             :           being used with the AST File I/O mechanism.
  227276             :        */
  227277             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  227278             : 
  227279             :       // DQ (4/30/2006): Modified to be a const function.
  227280             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  227281             : 
  227282             :           This functions is part of general support for many possible tools to operate 
  227283             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  227284             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  227285             :           less than the set of pointers used by the AST file I/O. This is part of
  227286             :           work implemented by Andreas, and support tools such as the AST graph generation.
  227287             : 
  227288             :           \warning This function can return unexpected data members and thus the 
  227289             :                    order and the number of elements is unpredicable and subject 
  227290             :                    to change.
  227291             : 
  227292             :           \returns STL vector of pairs of SgNode* and strings
  227293             :        */
  227294             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  227295             : 
  227296             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  227297             : 
  227298             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  227299             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  227300             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  227301             : 
  227302             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  227303             :                    and subject to change.
  227304             :        */
  227305             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  227306             : 
  227307             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  227308             : 
  227309             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  227310             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  227311             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  227312             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  227313             : 
  227314             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  227315             : 
  227316             :           \returns long
  227317             :        */
  227318             :           virtual long getChildIndex( SgNode* childNode ) const override;
  227319             : 
  227320             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  227321             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  227322             :       /* \brief Constructor for use by AST File I/O Mechanism
  227323             : 
  227324             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  227325             :           which obtained via fast binary file I/O from disk.
  227326             :        */
  227327             :        // SgImageControlStatement( SgImageControlStatementStorageClass& source );
  227328             : 
  227329             : 
  227330             : 
  227331             : 
  227332             : 
  227333             :  // JH (10/24/2005): methods added to support the ast file IO
  227334             :     private:
  227335             : 
  227336             :       /* name AST Memory Allocation Support Functions
  227337             :           \brief Memory allocations support....
  227338             : 
  227339             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  227340             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  227341             :           and support the AST File I/O Mechanism.
  227342             :        */
  227343             :       /* */
  227344             : 
  227345             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  227346             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  227347             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  227348             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  227349             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  227350             :           a correspinding one in the AST_FILE_IO class!
  227351             :        */
  227352             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  227353             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  227354             :       /* \brief Typedef used for low level memory access.
  227355             :        */
  227356             :        // typedef unsigned char* TestType;
  227357             : 
  227358             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  227359             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  227360             :       /* \brief Typedef used to hold memory addresses as values.
  227361             :        */
  227362             :        // typedef unsigned long  AddressType;
  227363             : 
  227364             : 
  227365             : 
  227366             :        // necessary, to have direct access to the p_freepointer and the private methods !
  227367             :       /*! \brief friend class declaration to support AST File I/O */
  227368             :           friend class AST_FILE_IO;
  227369             : 
  227370             :       /*! \brief friend class declaration to support AST File I/O */
  227371             :           friend class SgImageControlStatementStorageClass;
  227372             : 
  227373             :       /*! \brief friend class declaration to support AST File I/O */
  227374             :           friend class AstSpecificDataManagingClass;
  227375             : 
  227376             :       /*! \brief friend class declaration to support AST File I/O */
  227377             :           friend class AstSpecificDataManagingClassStorageClass;
  227378             :     public:
  227379             :       /*! \brief IR node constructor to support AST File I/O */
  227380             :           SgImageControlStatement( const SgImageControlStatementStorageClass& source );
  227381             : 
  227382             :  // private: // JJW hack
  227383             :        /*
  227384             :           name AST Memory Allocation Support Variables
  227385             :           Memory allocations support variables 
  227386             : 
  227387             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  227388             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  227389             :           and support the AST File I/O Mechanism.
  227390             :        */
  227391             :       /* */
  227392             : 
  227393             :     public:
  227394             : 
  227395             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  227396             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  227397             :       // virtual SgNode* addRegExpAttribute();
  227398             :       /*! \brief Support for AST matching using regular expression.
  227399             : 
  227400             :           This support is incomplete and the subject of current research to define 
  227401             :           RegEx trees to support inexact matching.
  227402             :        */
  227403             :           SgImageControlStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  227404             : 
  227405             : // *** COMMON CODE SECTION ENDS HERE ***
  227406             : 
  227407             : 
  227408             : // End of memberFunctionString
  227409             : // Start of memberFunctionString
  227410             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  227411             : 
  227412             :      // the generated cast function
  227413             :      // friend ROSE_DLL_API SgImageControlStatement* isSgImageControlStatement ( SgNode* s );
  227414             : 
  227415             :           typedef SgStatement base_node_type;
  227416             : 
  227417             : 
  227418             : // End of memberFunctionString
  227419             : // Start of memberFunctionString
  227420             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  227421             : 
  227422             :           void post_construction_initialization() override;
  227423             : 
  227424             : 
  227425             : // End of memberFunctionString
  227426             : 
  227427             :      public: 
  227428             :          SgImageControlStatement::image_control_statement_enum get_image_control_statement() const;
  227429             :          void set_image_control_statement(SgImageControlStatement::image_control_statement_enum image_control_statement);
  227430             : 
  227431             :      public: 
  227432             :          SgExpression* get_stat() const;
  227433             :          void set_stat(SgExpression* stat);
  227434             : 
  227435             :      public: 
  227436             :          SgExpression* get_err_msg() const;
  227437             :          void set_err_msg(SgExpression* err_msg);
  227438             : 
  227439             :      public: 
  227440             :          SgExpression* get_acquired_lock() const;
  227441             :          void set_acquired_lock(SgExpression* acquired_lock);
  227442             : 
  227443             : 
  227444             :      public: 
  227445             :          virtual ~SgImageControlStatement();
  227446             : 
  227447             : 
  227448             :      public: 
  227449             :          SgImageControlStatement(Sg_File_Info* startOfConstruct ); 
  227450             :          SgImageControlStatement(); 
  227451             : 
  227452             :     protected:
  227453             : // Start of memberFunctionString
  227454             : SgImageControlStatement::image_control_statement_enum p_image_control_statement;
  227455             :           
  227456             : // End of memberFunctionString
  227457             : // Start of memberFunctionString
  227458             : SgExpression* p_stat;
  227459             :           
  227460             : // End of memberFunctionString
  227461             : // Start of memberFunctionString
  227462             : SgExpression* p_err_msg;
  227463             :           
  227464             : // End of memberFunctionString
  227465             : // Start of memberFunctionString
  227466             : SgExpression* p_acquired_lock;
  227467             :           
  227468             : // End of memberFunctionString
  227469             : 
  227470             :     friend struct Rose::Traits::generated::describe_node_t<SgImageControlStatement>;
  227471             :     friend struct Rose::Traits::generated::describe_field_t<SgImageControlStatement, SgImageControlStatement::image_control_statement_enum,&SgImageControlStatement::p_image_control_statement>;
  227472             :     friend struct Rose::Traits::generated::describe_field_t<SgImageControlStatement, SgExpression*,&SgImageControlStatement::p_stat>;
  227473             :     friend struct Rose::Traits::generated::describe_field_t<SgImageControlStatement, SgExpression*,&SgImageControlStatement::p_err_msg>;
  227474             :     friend struct Rose::Traits::generated::describe_field_t<SgImageControlStatement, SgExpression*,&SgImageControlStatement::p_acquired_lock>;
  227475             : 
  227476             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227477             : 
  227478             : 
  227479             :    };
  227480             : #endif
  227481             : 
  227482             : // postdeclarations for SgImageControlStatement
  227483             : 
  227484             : /* #line 227485 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227485             : 
  227486             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  227487             : 
  227488             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227489             : 
  227490             : 
  227491             : /* #line 227492 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227492             : 
  227493             : 
  227494             : 
  227495             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227496             : 
  227497             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  227498             : //      This code is automatically generated for each 
  227499             : //      terminal and non-terminal within the defined 
  227500             : //      grammar.  There is a simple way to change the 
  227501             : //      code to fix bugs etc.  See the ROSE README file
  227502             : //      for directions.
  227503             : 
  227504             : // tps: (02/22/2010): Adding DLL export requirements
  227505             : #include "rosedll.h"
  227506             : 
  227507             : // predeclarations for SgSyncAllStatement
  227508             : 
  227509             : /* #line 227510 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227510             : 
  227511             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  227512             : 
  227513             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227514             : 
  227515             : #if 1
  227516             : // Class Definition for SgSyncAllStatement
  227517             : class ROSE_DLL_API SgSyncAllStatement  : public SgImageControlStatement
  227518             :    {
  227519             :      public:
  227520             : 
  227521             : 
  227522             : /* #line 227523 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227523             : 
  227524             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  227525             : // Start of memberFunctionString
  227526             : /* #line 3456 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  227527             : 
  227528             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  227529             :      virtual unsigned int cfgIndexForEnd() const override;
  227530             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  227531             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  227532             : #endif
  227533             : 
  227534             : 
  227535             : // End of memberFunctionString
  227536             : // Start of memberFunctionString
  227537             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  227538             : 
  227539             : // *** COMMON CODE SECTION BEGINS HERE ***
  227540             : 
  227541             :     public:
  227542             : 
  227543             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  227544             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  227545             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  227546             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  227547             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  227548             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  227549             : 
  227550             :       /*! \brief returns a string representing the class name */
  227551             :           virtual std::string class_name() const override;
  227552             : 
  227553             :       /*! \brief returns new style SageIII enum values */
  227554             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  227555             : 
  227556             :       /*! \brief static variant value */
  227557             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  227558             :        // static const VariantT static_variant = V_SgSyncAllStatement;
  227559             :           enum { static_variant = V_SgSyncAllStatement };
  227560             : 
  227561             :        /* the generated cast function */
  227562             :       /*! \brief Casts pointer from base class to derived class */
  227563             :           ROSE_DLL_API friend       SgSyncAllStatement* isSgSyncAllStatement(       SgNode * s );
  227564             : 
  227565             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  227566             :           ROSE_DLL_API friend const SgSyncAllStatement* isSgSyncAllStatement( const SgNode * s );
  227567             : 
  227568             :      // ******************************************
  227569             :      // * Memory Pool / New / Delete
  227570             :      // ******************************************
  227571             : 
  227572             :      public:
  227573             :           /// \private
  227574             :           static const unsigned pool_size; //
  227575             :           /// \private
  227576             :           static std::vector<unsigned char *> pools; //
  227577             :           /// \private
  227578             :           static SgSyncAllStatement * next_node; // 
  227579             : 
  227580             :           /// \private
  227581             :           static unsigned long initializeStorageClassArray(SgSyncAllStatementStorageClass *); //
  227582             : 
  227583             :           /// \private
  227584             :           static void clearMemoryPool(); //
  227585             :           static void deleteMemoryPool(); //
  227586             : 
  227587             :           /// \private
  227588             :           static void extendMemoryPoolForFileIO(); //
  227589             : 
  227590             :           /// \private
  227591             :           static SgSyncAllStatement * getPointerFromGlobalIndex(unsigned long); //
  227592             :           /// \private
  227593             :           static SgSyncAllStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  227594             : 
  227595             :           /// \private
  227596             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  227597             :           /// \private
  227598             :           static void resetValidFreepointers(); //
  227599             :           /// \private
  227600             :           static unsigned long getNumberOfLastValidPointer(); //
  227601             : 
  227602             : 
  227603             : #if defined(INLINE_FUNCTIONS)
  227604             :       /*! \brief returns pointer to newly allocated IR node */
  227605             :           inline void *operator new (size_t size);
  227606             : #else
  227607             :       /*! \brief returns pointer to newly allocated IR node */
  227608             :           void *operator new (size_t size);
  227609             : #endif
  227610             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  227611             :           void operator delete (void* pointer, size_t size);
  227612             : 
  227613             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  227614           0 :           void operator delete (void* pointer)
  227615             :              {
  227616             :             // This is the generated delete operator...
  227617           0 :                SgSyncAllStatement::operator delete (pointer,sizeof(SgSyncAllStatement));
  227618             :              }
  227619             : 
  227620             :       /*! \brief Returns the total number of IR nodes of this type */
  227621             :           static size_t numberOfNodes();
  227622             : 
  227623             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  227624             :           static size_t memoryUsage();
  227625             : 
  227626             :       // End of scope which started in IR nodes specific code 
  227627             :       /* */
  227628             : 
  227629             :       /* name Internal Functions
  227630             :           \brief Internal functions ... incomplete-documentation
  227631             : 
  227632             :           These functions have been made public as part of the design, but they are suggested for internal use 
  227633             :           or by particularly knowledgeable users for specialized tools or applications.
  227634             : 
  227635             :           \internal We could not make these private because they are required by user for special purposes. And 
  227636             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  227637             :          
  227638             :        */
  227639             : 
  227640             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  227641             :        // overridden in every class by *generated* implementation
  227642             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  227643             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  227644             :        // MS: 06/28/02 container of names of variables or container indices 
  227645             :        // used used in the traversal to access AST successor nodes
  227646             :        // overridden in every class by *generated* implementation
  227647             :       /*! \brief container of names of variables or container indices used used in the traversal
  227648             :           to access AST successor nodes overridden in every class by *generated* implementation */
  227649             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  227650             : 
  227651             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  227652             :        // than all the vector copies. The implementation for these functions is generated for each class.
  227653             :       /*! \brief return number of children in the traversal successor list */
  227654             :           virtual size_t get_numberOfTraversalSuccessors() override;
  227655             :       /*! \brief index-based access to traversal successors by index number */
  227656             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  227657             :       /*! \brief index-based access to traversal successors by child node */
  227658             :           virtual size_t get_childIndex(SgNode *child) override;
  227659             : 
  227660             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  227661             :        // MS: 08/16/2002 method for generating RTI information
  227662             :       /*! \brief return C++ Runtime-Time-Information */
  227663             :           virtual RTIReturnType roseRTI() override;
  227664             : #endif
  227665             :       /* */
  227666             : 
  227667             : 
  227668             : 
  227669             :       /* name Deprecated Functions
  227670             :           \brief Deprecated functions ... incomplete-documentation
  227671             : 
  227672             :           These functions have been deprecated from use.
  227673             :        */
  227674             :       /* */
  227675             : 
  227676             :       /*! returns a C style string (char*) representing the class name */
  227677             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  227678             : 
  227679             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  227680             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  227681             : #if 0
  227682             :       /*! returns old style Sage II enum values */
  227683             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  227684             :       /*! returns old style Sage II enum values */
  227685             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  227686             : #endif
  227687             :       /* */
  227688             : 
  227689             : 
  227690             : 
  227691             : 
  227692             :      public:
  227693             :       /* name Traversal Support Functions
  227694             :           \brief Traversal support functions ... incomplete-documentation
  227695             : 
  227696             :           These functions have been made public as part of the design, but they are suggested for internal use 
  227697             :           or by particularly knowledgable users for specialized tools or applications.
  227698             :        */
  227699             :       /* */
  227700             : 
  227701             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  227702             :        // (inferior to ROSE traversal mechanism, experimental).
  227703             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  227704             :        */
  227705             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  227706             : 
  227707             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  227708             :       /*! \brief support for the classic visitor pattern done in GoF */
  227709             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  227710             : 
  227711             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  227712             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  227713             :        */
  227714             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  227715             : 
  227716             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  227717             :        */
  227718             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  227719             : 
  227720             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  227721             :        // This traversal helps support internal tools that call static member functions.
  227722             :        // note: this function operates on the memory pools.
  227723             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  227724             :        */
  227725             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  227726             :       /* */
  227727             : 
  227728             : 
  227729             :      public:
  227730             :       /* name Memory Allocation Functions
  227731             :           \brief Memory allocations functions ... incomplete-documentation
  227732             : 
  227733             :           These functions have been made public as part of the design, but they are suggested for internal use 
  227734             :           or by particularly knowledgable users for specialized tools or applications.
  227735             :        */
  227736             :       /* */
  227737             : 
  227738             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  227739             : 
  227740             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  227741             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  227742             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  227743             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  227744             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  227745             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  227746             :           being used with the AST File I/O mechanism.
  227747             :        */
  227748             :           virtual bool isInMemoryPool() override;
  227749             : 
  227750             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  227751             : 
  227752             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  227753             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  227754             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  227755             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  227756             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  227757             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  227758             :           being used with the AST File I/O mechanism.
  227759             :        */
  227760             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  227761             : 
  227762             :       // DQ (4/30/2006): Modified to be a const function.
  227763             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  227764             : 
  227765             :           This functions is part of general support for many possible tools to operate 
  227766             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  227767             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  227768             :           less than the set of pointers used by the AST file I/O. This is part of
  227769             :           work implemented by Andreas, and support tools such as the AST graph generation.
  227770             : 
  227771             :           \warning This function can return unexpected data members and thus the 
  227772             :                    order and the number of elements is unpredicable and subject 
  227773             :                    to change.
  227774             : 
  227775             :           \returns STL vector of pairs of SgNode* and strings
  227776             :        */
  227777             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  227778             : 
  227779             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  227780             : 
  227781             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  227782             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  227783             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  227784             : 
  227785             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  227786             :                    and subject to change.
  227787             :        */
  227788             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  227789             : 
  227790             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  227791             : 
  227792             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  227793             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  227794             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  227795             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  227796             : 
  227797             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  227798             : 
  227799             :           \returns long
  227800             :        */
  227801             :           virtual long getChildIndex( SgNode* childNode ) const override;
  227802             : 
  227803             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  227804             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  227805             :       /* \brief Constructor for use by AST File I/O Mechanism
  227806             : 
  227807             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  227808             :           which obtained via fast binary file I/O from disk.
  227809             :        */
  227810             :        // SgSyncAllStatement( SgSyncAllStatementStorageClass& source );
  227811             : 
  227812             : 
  227813             : 
  227814             : 
  227815             : 
  227816             :  // JH (10/24/2005): methods added to support the ast file IO
  227817             :     private:
  227818             : 
  227819             :       /* name AST Memory Allocation Support Functions
  227820             :           \brief Memory allocations support....
  227821             : 
  227822             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  227823             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  227824             :           and support the AST File I/O Mechanism.
  227825             :        */
  227826             :       /* */
  227827             : 
  227828             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  227829             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  227830             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  227831             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  227832             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  227833             :           a correspinding one in the AST_FILE_IO class!
  227834             :        */
  227835             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  227836             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  227837             :       /* \brief Typedef used for low level memory access.
  227838             :        */
  227839             :        // typedef unsigned char* TestType;
  227840             : 
  227841             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  227842             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  227843             :       /* \brief Typedef used to hold memory addresses as values.
  227844             :        */
  227845             :        // typedef unsigned long  AddressType;
  227846             : 
  227847             : 
  227848             : 
  227849             :        // necessary, to have direct access to the p_freepointer and the private methods !
  227850             :       /*! \brief friend class declaration to support AST File I/O */
  227851             :           friend class AST_FILE_IO;
  227852             : 
  227853             :       /*! \brief friend class declaration to support AST File I/O */
  227854             :           friend class SgSyncAllStatementStorageClass;
  227855             : 
  227856             :       /*! \brief friend class declaration to support AST File I/O */
  227857             :           friend class AstSpecificDataManagingClass;
  227858             : 
  227859             :       /*! \brief friend class declaration to support AST File I/O */
  227860             :           friend class AstSpecificDataManagingClassStorageClass;
  227861             :     public:
  227862             :       /*! \brief IR node constructor to support AST File I/O */
  227863             :           SgSyncAllStatement( const SgSyncAllStatementStorageClass& source );
  227864             : 
  227865             :  // private: // JJW hack
  227866             :        /*
  227867             :           name AST Memory Allocation Support Variables
  227868             :           Memory allocations support variables 
  227869             : 
  227870             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  227871             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  227872             :           and support the AST File I/O Mechanism.
  227873             :        */
  227874             :       /* */
  227875             : 
  227876             :     public:
  227877             : 
  227878             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  227879             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  227880             :       // virtual SgNode* addRegExpAttribute();
  227881             :       /*! \brief Support for AST matching using regular expression.
  227882             : 
  227883             :           This support is incomplete and the subject of current research to define 
  227884             :           RegEx trees to support inexact matching.
  227885             :        */
  227886             :           SgSyncAllStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  227887             : 
  227888             : // *** COMMON CODE SECTION ENDS HERE ***
  227889             : 
  227890             : 
  227891             : // End of memberFunctionString
  227892             : // Start of memberFunctionString
  227893             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  227894             : 
  227895             :      // the generated cast function
  227896             :      // friend ROSE_DLL_API SgSyncAllStatement* isSgSyncAllStatement ( SgNode* s );
  227897             : 
  227898             :           typedef SgImageControlStatement base_node_type;
  227899             : 
  227900             : 
  227901             : // End of memberFunctionString
  227902             : // Start of memberFunctionString
  227903             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  227904             : 
  227905             :           void post_construction_initialization() override;
  227906             : 
  227907             : 
  227908             : // End of memberFunctionString
  227909             : 
  227910             : 
  227911             :      public: 
  227912             :          virtual ~SgSyncAllStatement();
  227913             : 
  227914             : 
  227915             :      public: 
  227916             :          SgSyncAllStatement(Sg_File_Info* startOfConstruct ); 
  227917             :          SgSyncAllStatement(); 
  227918             : 
  227919             :     protected:
  227920             : 
  227921             :     friend struct Rose::Traits::generated::describe_node_t<SgSyncAllStatement>;
  227922             : 
  227923             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227924             : 
  227925             : 
  227926             :    };
  227927             : #endif
  227928             : 
  227929             : // postdeclarations for SgSyncAllStatement
  227930             : 
  227931             : /* #line 227932 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227932             : 
  227933             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  227934             : 
  227935             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227936             : 
  227937             : 
  227938             : /* #line 227939 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227939             : 
  227940             : 
  227941             : 
  227942             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227943             : 
  227944             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  227945             : //      This code is automatically generated for each 
  227946             : //      terminal and non-terminal within the defined 
  227947             : //      grammar.  There is a simple way to change the 
  227948             : //      code to fix bugs etc.  See the ROSE README file
  227949             : //      for directions.
  227950             : 
  227951             : // tps: (02/22/2010): Adding DLL export requirements
  227952             : #include "rosedll.h"
  227953             : 
  227954             : // predeclarations for SgSyncImagesStatement
  227955             : 
  227956             : /* #line 227957 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227957             : 
  227958             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  227959             : 
  227960             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  227961             : 
  227962             : #if 1
  227963             : // Class Definition for SgSyncImagesStatement
  227964             : class ROSE_DLL_API SgSyncImagesStatement  : public SgImageControlStatement
  227965             :    {
  227966             :      public:
  227967             : 
  227968             : 
  227969             : /* #line 227970 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  227970             : 
  227971             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  227972             : // Start of memberFunctionString
  227973             : /* #line 3464 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  227974             : 
  227975             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  227976             :      virtual unsigned int cfgIndexForEnd() const override;
  227977             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  227978             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  227979             : #endif
  227980             : 
  227981             : 
  227982             : // End of memberFunctionString
  227983             : // Start of memberFunctionString
  227984             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  227985             : 
  227986             : // *** COMMON CODE SECTION BEGINS HERE ***
  227987             : 
  227988             :     public:
  227989             : 
  227990             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  227991             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  227992             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  227993             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  227994             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  227995             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  227996             : 
  227997             :       /*! \brief returns a string representing the class name */
  227998             :           virtual std::string class_name() const override;
  227999             : 
  228000             :       /*! \brief returns new style SageIII enum values */
  228001             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  228002             : 
  228003             :       /*! \brief static variant value */
  228004             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  228005             :        // static const VariantT static_variant = V_SgSyncImagesStatement;
  228006             :           enum { static_variant = V_SgSyncImagesStatement };
  228007             : 
  228008             :        /* the generated cast function */
  228009             :       /*! \brief Casts pointer from base class to derived class */
  228010             :           ROSE_DLL_API friend       SgSyncImagesStatement* isSgSyncImagesStatement(       SgNode * s );
  228011             : 
  228012             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  228013             :           ROSE_DLL_API friend const SgSyncImagesStatement* isSgSyncImagesStatement( const SgNode * s );
  228014             : 
  228015             :      // ******************************************
  228016             :      // * Memory Pool / New / Delete
  228017             :      // ******************************************
  228018             : 
  228019             :      public:
  228020             :           /// \private
  228021             :           static const unsigned pool_size; //
  228022             :           /// \private
  228023             :           static std::vector<unsigned char *> pools; //
  228024             :           /// \private
  228025             :           static SgSyncImagesStatement * next_node; // 
  228026             : 
  228027             :           /// \private
  228028             :           static unsigned long initializeStorageClassArray(SgSyncImagesStatementStorageClass *); //
  228029             : 
  228030             :           /// \private
  228031             :           static void clearMemoryPool(); //
  228032             :           static void deleteMemoryPool(); //
  228033             : 
  228034             :           /// \private
  228035             :           static void extendMemoryPoolForFileIO(); //
  228036             : 
  228037             :           /// \private
  228038             :           static SgSyncImagesStatement * getPointerFromGlobalIndex(unsigned long); //
  228039             :           /// \private
  228040             :           static SgSyncImagesStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  228041             : 
  228042             :           /// \private
  228043             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  228044             :           /// \private
  228045             :           static void resetValidFreepointers(); //
  228046             :           /// \private
  228047             :           static unsigned long getNumberOfLastValidPointer(); //
  228048             : 
  228049             : 
  228050             : #if defined(INLINE_FUNCTIONS)
  228051             :       /*! \brief returns pointer to newly allocated IR node */
  228052             :           inline void *operator new (size_t size);
  228053             : #else
  228054             :       /*! \brief returns pointer to newly allocated IR node */
  228055             :           void *operator new (size_t size);
  228056             : #endif
  228057             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  228058             :           void operator delete (void* pointer, size_t size);
  228059             : 
  228060             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  228061           0 :           void operator delete (void* pointer)
  228062             :              {
  228063             :             // This is the generated delete operator...
  228064           0 :                SgSyncImagesStatement::operator delete (pointer,sizeof(SgSyncImagesStatement));
  228065             :              }
  228066             : 
  228067             :       /*! \brief Returns the total number of IR nodes of this type */
  228068             :           static size_t numberOfNodes();
  228069             : 
  228070             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  228071             :           static size_t memoryUsage();
  228072             : 
  228073             :       // End of scope which started in IR nodes specific code 
  228074             :       /* */
  228075             : 
  228076             :       /* name Internal Functions
  228077             :           \brief Internal functions ... incomplete-documentation
  228078             : 
  228079             :           These functions have been made public as part of the design, but they are suggested for internal use 
  228080             :           or by particularly knowledgeable users for specialized tools or applications.
  228081             : 
  228082             :           \internal We could not make these private because they are required by user for special purposes. And 
  228083             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  228084             :          
  228085             :        */
  228086             : 
  228087             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  228088             :        // overridden in every class by *generated* implementation
  228089             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  228090             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  228091             :        // MS: 06/28/02 container of names of variables or container indices 
  228092             :        // used used in the traversal to access AST successor nodes
  228093             :        // overridden in every class by *generated* implementation
  228094             :       /*! \brief container of names of variables or container indices used used in the traversal
  228095             :           to access AST successor nodes overridden in every class by *generated* implementation */
  228096             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  228097             : 
  228098             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  228099             :        // than all the vector copies. The implementation for these functions is generated for each class.
  228100             :       /*! \brief return number of children in the traversal successor list */
  228101             :           virtual size_t get_numberOfTraversalSuccessors() override;
  228102             :       /*! \brief index-based access to traversal successors by index number */
  228103             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  228104             :       /*! \brief index-based access to traversal successors by child node */
  228105             :           virtual size_t get_childIndex(SgNode *child) override;
  228106             : 
  228107             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  228108             :        // MS: 08/16/2002 method for generating RTI information
  228109             :       /*! \brief return C++ Runtime-Time-Information */
  228110             :           virtual RTIReturnType roseRTI() override;
  228111             : #endif
  228112             :       /* */
  228113             : 
  228114             : 
  228115             : 
  228116             :       /* name Deprecated Functions
  228117             :           \brief Deprecated functions ... incomplete-documentation
  228118             : 
  228119             :           These functions have been deprecated from use.
  228120             :        */
  228121             :       /* */
  228122             : 
  228123             :       /*! returns a C style string (char*) representing the class name */
  228124             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  228125             : 
  228126             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  228127             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  228128             : #if 0
  228129             :       /*! returns old style Sage II enum values */
  228130             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  228131             :       /*! returns old style Sage II enum values */
  228132             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  228133             : #endif
  228134             :       /* */
  228135             : 
  228136             : 
  228137             : 
  228138             : 
  228139             :      public:
  228140             :       /* name Traversal Support Functions
  228141             :           \brief Traversal support functions ... incomplete-documentation
  228142             : 
  228143             :           These functions have been made public as part of the design, but they are suggested for internal use 
  228144             :           or by particularly knowledgable users for specialized tools or applications.
  228145             :        */
  228146             :       /* */
  228147             : 
  228148             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  228149             :        // (inferior to ROSE traversal mechanism, experimental).
  228150             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  228151             :        */
  228152             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  228153             : 
  228154             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  228155             :       /*! \brief support for the classic visitor pattern done in GoF */
  228156             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  228157             : 
  228158             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  228159             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  228160             :        */
  228161             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  228162             : 
  228163             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  228164             :        */
  228165             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  228166             : 
  228167             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  228168             :        // This traversal helps support internal tools that call static member functions.
  228169             :        // note: this function operates on the memory pools.
  228170             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  228171             :        */
  228172             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  228173             :       /* */
  228174             : 
  228175             : 
  228176             :      public:
  228177             :       /* name Memory Allocation Functions
  228178             :           \brief Memory allocations functions ... incomplete-documentation
  228179             : 
  228180             :           These functions have been made public as part of the design, but they are suggested for internal use 
  228181             :           or by particularly knowledgable users for specialized tools or applications.
  228182             :        */
  228183             :       /* */
  228184             : 
  228185             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  228186             : 
  228187             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  228188             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  228189             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  228190             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  228191             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  228192             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  228193             :           being used with the AST File I/O mechanism.
  228194             :        */
  228195             :           virtual bool isInMemoryPool() override;
  228196             : 
  228197             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  228198             : 
  228199             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  228200             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  228201             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  228202             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  228203             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  228204             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  228205             :           being used with the AST File I/O mechanism.
  228206             :        */
  228207             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  228208             : 
  228209             :       // DQ (4/30/2006): Modified to be a const function.
  228210             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  228211             : 
  228212             :           This functions is part of general support for many possible tools to operate 
  228213             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  228214             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  228215             :           less than the set of pointers used by the AST file I/O. This is part of
  228216             :           work implemented by Andreas, and support tools such as the AST graph generation.
  228217             : 
  228218             :           \warning This function can return unexpected data members and thus the 
  228219             :                    order and the number of elements is unpredicable and subject 
  228220             :                    to change.
  228221             : 
  228222             :           \returns STL vector of pairs of SgNode* and strings
  228223             :        */
  228224             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  228225             : 
  228226             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  228227             : 
  228228             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  228229             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  228230             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  228231             : 
  228232             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  228233             :                    and subject to change.
  228234             :        */
  228235             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  228236             : 
  228237             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  228238             : 
  228239             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  228240             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  228241             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  228242             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  228243             : 
  228244             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  228245             : 
  228246             :           \returns long
  228247             :        */
  228248             :           virtual long getChildIndex( SgNode* childNode ) const override;
  228249             : 
  228250             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  228251             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  228252             :       /* \brief Constructor for use by AST File I/O Mechanism
  228253             : 
  228254             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  228255             :           which obtained via fast binary file I/O from disk.
  228256             :        */
  228257             :        // SgSyncImagesStatement( SgSyncImagesStatementStorageClass& source );
  228258             : 
  228259             : 
  228260             : 
  228261             : 
  228262             : 
  228263             :  // JH (10/24/2005): methods added to support the ast file IO
  228264             :     private:
  228265             : 
  228266             :       /* name AST Memory Allocation Support Functions
  228267             :           \brief Memory allocations support....
  228268             : 
  228269             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  228270             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  228271             :           and support the AST File I/O Mechanism.
  228272             :        */
  228273             :       /* */
  228274             : 
  228275             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  228276             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  228277             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  228278             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  228279             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  228280             :           a correspinding one in the AST_FILE_IO class!
  228281             :        */
  228282             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  228283             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  228284             :       /* \brief Typedef used for low level memory access.
  228285             :        */
  228286             :        // typedef unsigned char* TestType;
  228287             : 
  228288             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  228289             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  228290             :       /* \brief Typedef used to hold memory addresses as values.
  228291             :        */
  228292             :        // typedef unsigned long  AddressType;
  228293             : 
  228294             : 
  228295             : 
  228296             :        // necessary, to have direct access to the p_freepointer and the private methods !
  228297             :       /*! \brief friend class declaration to support AST File I/O */
  228298             :           friend class AST_FILE_IO;
  228299             : 
  228300             :       /*! \brief friend class declaration to support AST File I/O */
  228301             :           friend class SgSyncImagesStatementStorageClass;
  228302             : 
  228303             :       /*! \brief friend class declaration to support AST File I/O */
  228304             :           friend class AstSpecificDataManagingClass;
  228305             : 
  228306             :       /*! \brief friend class declaration to support AST File I/O */
  228307             :           friend class AstSpecificDataManagingClassStorageClass;
  228308             :     public:
  228309             :       /*! \brief IR node constructor to support AST File I/O */
  228310             :           SgSyncImagesStatement( const SgSyncImagesStatementStorageClass& source );
  228311             : 
  228312             :  // private: // JJW hack
  228313             :        /*
  228314             :           name AST Memory Allocation Support Variables
  228315             :           Memory allocations support variables 
  228316             : 
  228317             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  228318             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  228319             :           and support the AST File I/O Mechanism.
  228320             :        */
  228321             :       /* */
  228322             : 
  228323             :     public:
  228324             : 
  228325             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  228326             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  228327             :       // virtual SgNode* addRegExpAttribute();
  228328             :       /*! \brief Support for AST matching using regular expression.
  228329             : 
  228330             :           This support is incomplete and the subject of current research to define 
  228331             :           RegEx trees to support inexact matching.
  228332             :        */
  228333             :           SgSyncImagesStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  228334             : 
  228335             : // *** COMMON CODE SECTION ENDS HERE ***
  228336             : 
  228337             : 
  228338             : // End of memberFunctionString
  228339             : // Start of memberFunctionString
  228340             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  228341             : 
  228342             :      // the generated cast function
  228343             :      // friend ROSE_DLL_API SgSyncImagesStatement* isSgSyncImagesStatement ( SgNode* s );
  228344             : 
  228345             :           typedef SgImageControlStatement base_node_type;
  228346             : 
  228347             : 
  228348             : // End of memberFunctionString
  228349             : // Start of memberFunctionString
  228350             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  228351             : 
  228352             :           void post_construction_initialization() override;
  228353             : 
  228354             : 
  228355             : // End of memberFunctionString
  228356             : 
  228357             :      public: 
  228358             :          SgExpression* get_image_set() const;
  228359             :          void set_image_set(SgExpression* image_set);
  228360             : 
  228361             : 
  228362             :      public: 
  228363             :          virtual ~SgSyncImagesStatement();
  228364             : 
  228365             : 
  228366             :      public: 
  228367             :          SgSyncImagesStatement(Sg_File_Info* startOfConstruct , SgExpression* image_set = NULL); 
  228368             :          SgSyncImagesStatement(SgExpression* image_set); 
  228369             : 
  228370             :     protected:
  228371             : // Start of memberFunctionString
  228372             : SgExpression* p_image_set;
  228373             :           
  228374             : // End of memberFunctionString
  228375             : 
  228376             :     friend struct Rose::Traits::generated::describe_node_t<SgSyncImagesStatement>;
  228377             :     friend struct Rose::Traits::generated::describe_field_t<SgSyncImagesStatement, SgExpression*,&SgSyncImagesStatement::p_image_set>;
  228378             : 
  228379             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228380             : 
  228381             : 
  228382             :    };
  228383             : #endif
  228384             : 
  228385             : // postdeclarations for SgSyncImagesStatement
  228386             : 
  228387             : /* #line 228388 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228388             : 
  228389             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  228390             : 
  228391             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228392             : 
  228393             : 
  228394             : /* #line 228395 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228395             : 
  228396             : 
  228397             : 
  228398             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228399             : 
  228400             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  228401             : //      This code is automatically generated for each 
  228402             : //      terminal and non-terminal within the defined 
  228403             : //      grammar.  There is a simple way to change the 
  228404             : //      code to fix bugs etc.  See the ROSE README file
  228405             : //      for directions.
  228406             : 
  228407             : // tps: (02/22/2010): Adding DLL export requirements
  228408             : #include "rosedll.h"
  228409             : 
  228410             : // predeclarations for SgSyncMemoryStatement
  228411             : 
  228412             : /* #line 228413 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228413             : 
  228414             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  228415             : 
  228416             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228417             : 
  228418             : #if 1
  228419             : // Class Definition for SgSyncMemoryStatement
  228420             : class ROSE_DLL_API SgSyncMemoryStatement  : public SgImageControlStatement
  228421             :    {
  228422             :      public:
  228423             : 
  228424             : 
  228425             : /* #line 228426 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228426             : 
  228427             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  228428             : // Start of memberFunctionString
  228429             : /* #line 3472 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  228430             : 
  228431             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  228432             :      virtual unsigned int cfgIndexForEnd() const override;
  228433             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  228434             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  228435             : #endif
  228436             : 
  228437             : 
  228438             : // End of memberFunctionString
  228439             : // Start of memberFunctionString
  228440             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  228441             : 
  228442             : // *** COMMON CODE SECTION BEGINS HERE ***
  228443             : 
  228444             :     public:
  228445             : 
  228446             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  228447             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  228448             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  228449             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  228450             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  228451             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  228452             : 
  228453             :       /*! \brief returns a string representing the class name */
  228454             :           virtual std::string class_name() const override;
  228455             : 
  228456             :       /*! \brief returns new style SageIII enum values */
  228457             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  228458             : 
  228459             :       /*! \brief static variant value */
  228460             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  228461             :        // static const VariantT static_variant = V_SgSyncMemoryStatement;
  228462             :           enum { static_variant = V_SgSyncMemoryStatement };
  228463             : 
  228464             :        /* the generated cast function */
  228465             :       /*! \brief Casts pointer from base class to derived class */
  228466             :           ROSE_DLL_API friend       SgSyncMemoryStatement* isSgSyncMemoryStatement(       SgNode * s );
  228467             : 
  228468             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  228469             :           ROSE_DLL_API friend const SgSyncMemoryStatement* isSgSyncMemoryStatement( const SgNode * s );
  228470             : 
  228471             :      // ******************************************
  228472             :      // * Memory Pool / New / Delete
  228473             :      // ******************************************
  228474             : 
  228475             :      public:
  228476             :           /// \private
  228477             :           static const unsigned pool_size; //
  228478             :           /// \private
  228479             :           static std::vector<unsigned char *> pools; //
  228480             :           /// \private
  228481             :           static SgSyncMemoryStatement * next_node; // 
  228482             : 
  228483             :           /// \private
  228484             :           static unsigned long initializeStorageClassArray(SgSyncMemoryStatementStorageClass *); //
  228485             : 
  228486             :           /// \private
  228487             :           static void clearMemoryPool(); //
  228488             :           static void deleteMemoryPool(); //
  228489             : 
  228490             :           /// \private
  228491             :           static void extendMemoryPoolForFileIO(); //
  228492             : 
  228493             :           /// \private
  228494             :           static SgSyncMemoryStatement * getPointerFromGlobalIndex(unsigned long); //
  228495             :           /// \private
  228496             :           static SgSyncMemoryStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  228497             : 
  228498             :           /// \private
  228499             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  228500             :           /// \private
  228501             :           static void resetValidFreepointers(); //
  228502             :           /// \private
  228503             :           static unsigned long getNumberOfLastValidPointer(); //
  228504             : 
  228505             : 
  228506             : #if defined(INLINE_FUNCTIONS)
  228507             :       /*! \brief returns pointer to newly allocated IR node */
  228508             :           inline void *operator new (size_t size);
  228509             : #else
  228510             :       /*! \brief returns pointer to newly allocated IR node */
  228511             :           void *operator new (size_t size);
  228512             : #endif
  228513             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  228514             :           void operator delete (void* pointer, size_t size);
  228515             : 
  228516             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  228517           0 :           void operator delete (void* pointer)
  228518             :              {
  228519             :             // This is the generated delete operator...
  228520           0 :                SgSyncMemoryStatement::operator delete (pointer,sizeof(SgSyncMemoryStatement));
  228521             :              }
  228522             : 
  228523             :       /*! \brief Returns the total number of IR nodes of this type */
  228524             :           static size_t numberOfNodes();
  228525             : 
  228526             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  228527             :           static size_t memoryUsage();
  228528             : 
  228529             :       // End of scope which started in IR nodes specific code 
  228530             :       /* */
  228531             : 
  228532             :       /* name Internal Functions
  228533             :           \brief Internal functions ... incomplete-documentation
  228534             : 
  228535             :           These functions have been made public as part of the design, but they are suggested for internal use 
  228536             :           or by particularly knowledgeable users for specialized tools or applications.
  228537             : 
  228538             :           \internal We could not make these private because they are required by user for special purposes. And 
  228539             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  228540             :          
  228541             :        */
  228542             : 
  228543             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  228544             :        // overridden in every class by *generated* implementation
  228545             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  228546             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  228547             :        // MS: 06/28/02 container of names of variables or container indices 
  228548             :        // used used in the traversal to access AST successor nodes
  228549             :        // overridden in every class by *generated* implementation
  228550             :       /*! \brief container of names of variables or container indices used used in the traversal
  228551             :           to access AST successor nodes overridden in every class by *generated* implementation */
  228552             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  228553             : 
  228554             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  228555             :        // than all the vector copies. The implementation for these functions is generated for each class.
  228556             :       /*! \brief return number of children in the traversal successor list */
  228557             :           virtual size_t get_numberOfTraversalSuccessors() override;
  228558             :       /*! \brief index-based access to traversal successors by index number */
  228559             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  228560             :       /*! \brief index-based access to traversal successors by child node */
  228561             :           virtual size_t get_childIndex(SgNode *child) override;
  228562             : 
  228563             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  228564             :        // MS: 08/16/2002 method for generating RTI information
  228565             :       /*! \brief return C++ Runtime-Time-Information */
  228566             :           virtual RTIReturnType roseRTI() override;
  228567             : #endif
  228568             :       /* */
  228569             : 
  228570             : 
  228571             : 
  228572             :       /* name Deprecated Functions
  228573             :           \brief Deprecated functions ... incomplete-documentation
  228574             : 
  228575             :           These functions have been deprecated from use.
  228576             :        */
  228577             :       /* */
  228578             : 
  228579             :       /*! returns a C style string (char*) representing the class name */
  228580             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  228581             : 
  228582             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  228583             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  228584             : #if 0
  228585             :       /*! returns old style Sage II enum values */
  228586             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  228587             :       /*! returns old style Sage II enum values */
  228588             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  228589             : #endif
  228590             :       /* */
  228591             : 
  228592             : 
  228593             : 
  228594             : 
  228595             :      public:
  228596             :       /* name Traversal Support Functions
  228597             :           \brief Traversal support functions ... incomplete-documentation
  228598             : 
  228599             :           These functions have been made public as part of the design, but they are suggested for internal use 
  228600             :           or by particularly knowledgable users for specialized tools or applications.
  228601             :        */
  228602             :       /* */
  228603             : 
  228604             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  228605             :        // (inferior to ROSE traversal mechanism, experimental).
  228606             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  228607             :        */
  228608             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  228609             : 
  228610             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  228611             :       /*! \brief support for the classic visitor pattern done in GoF */
  228612             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  228613             : 
  228614             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  228615             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  228616             :        */
  228617             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  228618             : 
  228619             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  228620             :        */
  228621             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  228622             : 
  228623             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  228624             :        // This traversal helps support internal tools that call static member functions.
  228625             :        // note: this function operates on the memory pools.
  228626             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  228627             :        */
  228628             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  228629             :       /* */
  228630             : 
  228631             : 
  228632             :      public:
  228633             :       /* name Memory Allocation Functions
  228634             :           \brief Memory allocations functions ... incomplete-documentation
  228635             : 
  228636             :           These functions have been made public as part of the design, but they are suggested for internal use 
  228637             :           or by particularly knowledgable users for specialized tools or applications.
  228638             :        */
  228639             :       /* */
  228640             : 
  228641             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  228642             : 
  228643             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  228644             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  228645             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  228646             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  228647             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  228648             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  228649             :           being used with the AST File I/O mechanism.
  228650             :        */
  228651             :           virtual bool isInMemoryPool() override;
  228652             : 
  228653             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  228654             : 
  228655             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  228656             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  228657             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  228658             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  228659             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  228660             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  228661             :           being used with the AST File I/O mechanism.
  228662             :        */
  228663             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  228664             : 
  228665             :       // DQ (4/30/2006): Modified to be a const function.
  228666             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  228667             : 
  228668             :           This functions is part of general support for many possible tools to operate 
  228669             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  228670             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  228671             :           less than the set of pointers used by the AST file I/O. This is part of
  228672             :           work implemented by Andreas, and support tools such as the AST graph generation.
  228673             : 
  228674             :           \warning This function can return unexpected data members and thus the 
  228675             :                    order and the number of elements is unpredicable and subject 
  228676             :                    to change.
  228677             : 
  228678             :           \returns STL vector of pairs of SgNode* and strings
  228679             :        */
  228680             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  228681             : 
  228682             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  228683             : 
  228684             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  228685             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  228686             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  228687             : 
  228688             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  228689             :                    and subject to change.
  228690             :        */
  228691             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  228692             : 
  228693             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  228694             : 
  228695             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  228696             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  228697             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  228698             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  228699             : 
  228700             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  228701             : 
  228702             :           \returns long
  228703             :        */
  228704             :           virtual long getChildIndex( SgNode* childNode ) const override;
  228705             : 
  228706             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  228707             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  228708             :       /* \brief Constructor for use by AST File I/O Mechanism
  228709             : 
  228710             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  228711             :           which obtained via fast binary file I/O from disk.
  228712             :        */
  228713             :        // SgSyncMemoryStatement( SgSyncMemoryStatementStorageClass& source );
  228714             : 
  228715             : 
  228716             : 
  228717             : 
  228718             : 
  228719             :  // JH (10/24/2005): methods added to support the ast file IO
  228720             :     private:
  228721             : 
  228722             :       /* name AST Memory Allocation Support Functions
  228723             :           \brief Memory allocations support....
  228724             : 
  228725             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  228726             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  228727             :           and support the AST File I/O Mechanism.
  228728             :        */
  228729             :       /* */
  228730             : 
  228731             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  228732             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  228733             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  228734             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  228735             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  228736             :           a correspinding one in the AST_FILE_IO class!
  228737             :        */
  228738             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  228739             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  228740             :       /* \brief Typedef used for low level memory access.
  228741             :        */
  228742             :        // typedef unsigned char* TestType;
  228743             : 
  228744             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  228745             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  228746             :       /* \brief Typedef used to hold memory addresses as values.
  228747             :        */
  228748             :        // typedef unsigned long  AddressType;
  228749             : 
  228750             : 
  228751             : 
  228752             :        // necessary, to have direct access to the p_freepointer and the private methods !
  228753             :       /*! \brief friend class declaration to support AST File I/O */
  228754             :           friend class AST_FILE_IO;
  228755             : 
  228756             :       /*! \brief friend class declaration to support AST File I/O */
  228757             :           friend class SgSyncMemoryStatementStorageClass;
  228758             : 
  228759             :       /*! \brief friend class declaration to support AST File I/O */
  228760             :           friend class AstSpecificDataManagingClass;
  228761             : 
  228762             :       /*! \brief friend class declaration to support AST File I/O */
  228763             :           friend class AstSpecificDataManagingClassStorageClass;
  228764             :     public:
  228765             :       /*! \brief IR node constructor to support AST File I/O */
  228766             :           SgSyncMemoryStatement( const SgSyncMemoryStatementStorageClass& source );
  228767             : 
  228768             :  // private: // JJW hack
  228769             :        /*
  228770             :           name AST Memory Allocation Support Variables
  228771             :           Memory allocations support variables 
  228772             : 
  228773             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  228774             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  228775             :           and support the AST File I/O Mechanism.
  228776             :        */
  228777             :       /* */
  228778             : 
  228779             :     public:
  228780             : 
  228781             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  228782             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  228783             :       // virtual SgNode* addRegExpAttribute();
  228784             :       /*! \brief Support for AST matching using regular expression.
  228785             : 
  228786             :           This support is incomplete and the subject of current research to define 
  228787             :           RegEx trees to support inexact matching.
  228788             :        */
  228789             :           SgSyncMemoryStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  228790             : 
  228791             : // *** COMMON CODE SECTION ENDS HERE ***
  228792             : 
  228793             : 
  228794             : // End of memberFunctionString
  228795             : // Start of memberFunctionString
  228796             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  228797             : 
  228798             :      // the generated cast function
  228799             :      // friend ROSE_DLL_API SgSyncMemoryStatement* isSgSyncMemoryStatement ( SgNode* s );
  228800             : 
  228801             :           typedef SgImageControlStatement base_node_type;
  228802             : 
  228803             : 
  228804             : // End of memberFunctionString
  228805             : // Start of memberFunctionString
  228806             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  228807             : 
  228808             :           void post_construction_initialization() override;
  228809             : 
  228810             : 
  228811             : // End of memberFunctionString
  228812             : 
  228813             : 
  228814             :      public: 
  228815             :          virtual ~SgSyncMemoryStatement();
  228816             : 
  228817             : 
  228818             :      public: 
  228819             :          SgSyncMemoryStatement(Sg_File_Info* startOfConstruct ); 
  228820             :          SgSyncMemoryStatement(); 
  228821             : 
  228822             :     protected:
  228823             : 
  228824             :     friend struct Rose::Traits::generated::describe_node_t<SgSyncMemoryStatement>;
  228825             : 
  228826             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228827             : 
  228828             : 
  228829             :    };
  228830             : #endif
  228831             : 
  228832             : // postdeclarations for SgSyncMemoryStatement
  228833             : 
  228834             : /* #line 228835 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228835             : 
  228836             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  228837             : 
  228838             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228839             : 
  228840             : 
  228841             : /* #line 228842 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228842             : 
  228843             : 
  228844             : 
  228845             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228846             : 
  228847             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  228848             : //      This code is automatically generated for each 
  228849             : //      terminal and non-terminal within the defined 
  228850             : //      grammar.  There is a simple way to change the 
  228851             : //      code to fix bugs etc.  See the ROSE README file
  228852             : //      for directions.
  228853             : 
  228854             : // tps: (02/22/2010): Adding DLL export requirements
  228855             : #include "rosedll.h"
  228856             : 
  228857             : // predeclarations for SgSyncTeamStatement
  228858             : 
  228859             : /* #line 228860 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228860             : 
  228861             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  228862             : 
  228863             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  228864             : 
  228865             : #if 1
  228866             : // Class Definition for SgSyncTeamStatement
  228867             : class ROSE_DLL_API SgSyncTeamStatement  : public SgImageControlStatement
  228868             :    {
  228869             :      public:
  228870             : 
  228871             : 
  228872             : /* #line 228873 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  228873             : 
  228874             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  228875             : // Start of memberFunctionString
  228876             : /* #line 3480 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  228877             : 
  228878             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  228879             :      virtual unsigned int cfgIndexForEnd() const override;
  228880             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  228881             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  228882             : #endif
  228883             : 
  228884             : 
  228885             : // End of memberFunctionString
  228886             : // Start of memberFunctionString
  228887             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  228888             : 
  228889             : // *** COMMON CODE SECTION BEGINS HERE ***
  228890             : 
  228891             :     public:
  228892             : 
  228893             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  228894             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  228895             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  228896             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  228897             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  228898             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  228899             : 
  228900             :       /*! \brief returns a string representing the class name */
  228901             :           virtual std::string class_name() const override;
  228902             : 
  228903             :       /*! \brief returns new style SageIII enum values */
  228904             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  228905             : 
  228906             :       /*! \brief static variant value */
  228907             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  228908             :        // static const VariantT static_variant = V_SgSyncTeamStatement;
  228909             :           enum { static_variant = V_SgSyncTeamStatement };
  228910             : 
  228911             :        /* the generated cast function */
  228912             :       /*! \brief Casts pointer from base class to derived class */
  228913             :           ROSE_DLL_API friend       SgSyncTeamStatement* isSgSyncTeamStatement(       SgNode * s );
  228914             : 
  228915             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  228916             :           ROSE_DLL_API friend const SgSyncTeamStatement* isSgSyncTeamStatement( const SgNode * s );
  228917             : 
  228918             :      // ******************************************
  228919             :      // * Memory Pool / New / Delete
  228920             :      // ******************************************
  228921             : 
  228922             :      public:
  228923             :           /// \private
  228924             :           static const unsigned pool_size; //
  228925             :           /// \private
  228926             :           static std::vector<unsigned char *> pools; //
  228927             :           /// \private
  228928             :           static SgSyncTeamStatement * next_node; // 
  228929             : 
  228930             :           /// \private
  228931             :           static unsigned long initializeStorageClassArray(SgSyncTeamStatementStorageClass *); //
  228932             : 
  228933             :           /// \private
  228934             :           static void clearMemoryPool(); //
  228935             :           static void deleteMemoryPool(); //
  228936             : 
  228937             :           /// \private
  228938             :           static void extendMemoryPoolForFileIO(); //
  228939             : 
  228940             :           /// \private
  228941             :           static SgSyncTeamStatement * getPointerFromGlobalIndex(unsigned long); //
  228942             :           /// \private
  228943             :           static SgSyncTeamStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  228944             : 
  228945             :           /// \private
  228946             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  228947             :           /// \private
  228948             :           static void resetValidFreepointers(); //
  228949             :           /// \private
  228950             :           static unsigned long getNumberOfLastValidPointer(); //
  228951             : 
  228952             : 
  228953             : #if defined(INLINE_FUNCTIONS)
  228954             :       /*! \brief returns pointer to newly allocated IR node */
  228955             :           inline void *operator new (size_t size);
  228956             : #else
  228957             :       /*! \brief returns pointer to newly allocated IR node */
  228958             :           void *operator new (size_t size);
  228959             : #endif
  228960             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  228961             :           void operator delete (void* pointer, size_t size);
  228962             : 
  228963             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  228964           0 :           void operator delete (void* pointer)
  228965             :              {
  228966             :             // This is the generated delete operator...
  228967           0 :                SgSyncTeamStatement::operator delete (pointer,sizeof(SgSyncTeamStatement));
  228968             :              }
  228969             : 
  228970             :       /*! \brief Returns the total number of IR nodes of this type */
  228971             :           static size_t numberOfNodes();
  228972             : 
  228973             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  228974             :           static size_t memoryUsage();
  228975             : 
  228976             :       // End of scope which started in IR nodes specific code 
  228977             :       /* */
  228978             : 
  228979             :       /* name Internal Functions
  228980             :           \brief Internal functions ... incomplete-documentation
  228981             : 
  228982             :           These functions have been made public as part of the design, but they are suggested for internal use 
  228983             :           or by particularly knowledgeable users for specialized tools or applications.
  228984             : 
  228985             :           \internal We could not make these private because they are required by user for special purposes. And 
  228986             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  228987             :          
  228988             :        */
  228989             : 
  228990             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  228991             :        // overridden in every class by *generated* implementation
  228992             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  228993             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  228994             :        // MS: 06/28/02 container of names of variables or container indices 
  228995             :        // used used in the traversal to access AST successor nodes
  228996             :        // overridden in every class by *generated* implementation
  228997             :       /*! \brief container of names of variables or container indices used used in the traversal
  228998             :           to access AST successor nodes overridden in every class by *generated* implementation */
  228999             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  229000             : 
  229001             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  229002             :        // than all the vector copies. The implementation for these functions is generated for each class.
  229003             :       /*! \brief return number of children in the traversal successor list */
  229004             :           virtual size_t get_numberOfTraversalSuccessors() override;
  229005             :       /*! \brief index-based access to traversal successors by index number */
  229006             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  229007             :       /*! \brief index-based access to traversal successors by child node */
  229008             :           virtual size_t get_childIndex(SgNode *child) override;
  229009             : 
  229010             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  229011             :        // MS: 08/16/2002 method for generating RTI information
  229012             :       /*! \brief return C++ Runtime-Time-Information */
  229013             :           virtual RTIReturnType roseRTI() override;
  229014             : #endif
  229015             :       /* */
  229016             : 
  229017             : 
  229018             : 
  229019             :       /* name Deprecated Functions
  229020             :           \brief Deprecated functions ... incomplete-documentation
  229021             : 
  229022             :           These functions have been deprecated from use.
  229023             :        */
  229024             :       /* */
  229025             : 
  229026             :       /*! returns a C style string (char*) representing the class name */
  229027             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  229028             : 
  229029             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  229030             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  229031             : #if 0
  229032             :       /*! returns old style Sage II enum values */
  229033             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  229034             :       /*! returns old style Sage II enum values */
  229035             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  229036             : #endif
  229037             :       /* */
  229038             : 
  229039             : 
  229040             : 
  229041             : 
  229042             :      public:
  229043             :       /* name Traversal Support Functions
  229044             :           \brief Traversal support functions ... incomplete-documentation
  229045             : 
  229046             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229047             :           or by particularly knowledgable users for specialized tools or applications.
  229048             :        */
  229049             :       /* */
  229050             : 
  229051             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  229052             :        // (inferior to ROSE traversal mechanism, experimental).
  229053             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  229054             :        */
  229055             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  229056             : 
  229057             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  229058             :       /*! \brief support for the classic visitor pattern done in GoF */
  229059             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  229060             : 
  229061             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  229062             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  229063             :        */
  229064             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  229065             : 
  229066             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  229067             :        */
  229068             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  229069             : 
  229070             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  229071             :        // This traversal helps support internal tools that call static member functions.
  229072             :        // note: this function operates on the memory pools.
  229073             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  229074             :        */
  229075             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  229076             :       /* */
  229077             : 
  229078             : 
  229079             :      public:
  229080             :       /* name Memory Allocation Functions
  229081             :           \brief Memory allocations functions ... incomplete-documentation
  229082             : 
  229083             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229084             :           or by particularly knowledgable users for specialized tools or applications.
  229085             :        */
  229086             :       /* */
  229087             : 
  229088             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  229089             : 
  229090             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  229091             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  229092             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  229093             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  229094             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  229095             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  229096             :           being used with the AST File I/O mechanism.
  229097             :        */
  229098             :           virtual bool isInMemoryPool() override;
  229099             : 
  229100             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  229101             : 
  229102             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  229103             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  229104             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  229105             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  229106             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  229107             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  229108             :           being used with the AST File I/O mechanism.
  229109             :        */
  229110             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  229111             : 
  229112             :       // DQ (4/30/2006): Modified to be a const function.
  229113             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  229114             : 
  229115             :           This functions is part of general support for many possible tools to operate 
  229116             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  229117             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  229118             :           less than the set of pointers used by the AST file I/O. This is part of
  229119             :           work implemented by Andreas, and support tools such as the AST graph generation.
  229120             : 
  229121             :           \warning This function can return unexpected data members and thus the 
  229122             :                    order and the number of elements is unpredicable and subject 
  229123             :                    to change.
  229124             : 
  229125             :           \returns STL vector of pairs of SgNode* and strings
  229126             :        */
  229127             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  229128             : 
  229129             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  229130             : 
  229131             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  229132             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  229133             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  229134             : 
  229135             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  229136             :                    and subject to change.
  229137             :        */
  229138             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  229139             : 
  229140             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  229141             : 
  229142             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  229143             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  229144             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  229145             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  229146             : 
  229147             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  229148             : 
  229149             :           \returns long
  229150             :        */
  229151             :           virtual long getChildIndex( SgNode* childNode ) const override;
  229152             : 
  229153             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  229154             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  229155             :       /* \brief Constructor for use by AST File I/O Mechanism
  229156             : 
  229157             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  229158             :           which obtained via fast binary file I/O from disk.
  229159             :        */
  229160             :        // SgSyncTeamStatement( SgSyncTeamStatementStorageClass& source );
  229161             : 
  229162             : 
  229163             : 
  229164             : 
  229165             : 
  229166             :  // JH (10/24/2005): methods added to support the ast file IO
  229167             :     private:
  229168             : 
  229169             :       /* name AST Memory Allocation Support Functions
  229170             :           \brief Memory allocations support....
  229171             : 
  229172             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  229173             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  229174             :           and support the AST File I/O Mechanism.
  229175             :        */
  229176             :       /* */
  229177             : 
  229178             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  229179             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  229180             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  229181             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  229182             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  229183             :           a correspinding one in the AST_FILE_IO class!
  229184             :        */
  229185             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  229186             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  229187             :       /* \brief Typedef used for low level memory access.
  229188             :        */
  229189             :        // typedef unsigned char* TestType;
  229190             : 
  229191             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  229192             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  229193             :       /* \brief Typedef used to hold memory addresses as values.
  229194             :        */
  229195             :        // typedef unsigned long  AddressType;
  229196             : 
  229197             : 
  229198             : 
  229199             :        // necessary, to have direct access to the p_freepointer and the private methods !
  229200             :       /*! \brief friend class declaration to support AST File I/O */
  229201             :           friend class AST_FILE_IO;
  229202             : 
  229203             :       /*! \brief friend class declaration to support AST File I/O */
  229204             :           friend class SgSyncTeamStatementStorageClass;
  229205             : 
  229206             :       /*! \brief friend class declaration to support AST File I/O */
  229207             :           friend class AstSpecificDataManagingClass;
  229208             : 
  229209             :       /*! \brief friend class declaration to support AST File I/O */
  229210             :           friend class AstSpecificDataManagingClassStorageClass;
  229211             :     public:
  229212             :       /*! \brief IR node constructor to support AST File I/O */
  229213             :           SgSyncTeamStatement( const SgSyncTeamStatementStorageClass& source );
  229214             : 
  229215             :  // private: // JJW hack
  229216             :        /*
  229217             :           name AST Memory Allocation Support Variables
  229218             :           Memory allocations support variables 
  229219             : 
  229220             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  229221             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  229222             :           and support the AST File I/O Mechanism.
  229223             :        */
  229224             :       /* */
  229225             : 
  229226             :     public:
  229227             : 
  229228             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  229229             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  229230             :       // virtual SgNode* addRegExpAttribute();
  229231             :       /*! \brief Support for AST matching using regular expression.
  229232             : 
  229233             :           This support is incomplete and the subject of current research to define 
  229234             :           RegEx trees to support inexact matching.
  229235             :        */
  229236             :           SgSyncTeamStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  229237             : 
  229238             : // *** COMMON CODE SECTION ENDS HERE ***
  229239             : 
  229240             : 
  229241             : // End of memberFunctionString
  229242             : // Start of memberFunctionString
  229243             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  229244             : 
  229245             :      // the generated cast function
  229246             :      // friend ROSE_DLL_API SgSyncTeamStatement* isSgSyncTeamStatement ( SgNode* s );
  229247             : 
  229248             :           typedef SgImageControlStatement base_node_type;
  229249             : 
  229250             : 
  229251             : // End of memberFunctionString
  229252             : // Start of memberFunctionString
  229253             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  229254             : 
  229255             :           void post_construction_initialization() override;
  229256             : 
  229257             : 
  229258             : // End of memberFunctionString
  229259             : 
  229260             :      public: 
  229261             :          SgExpression* get_team_value() const;
  229262             :          void set_team_value(SgExpression* team_value);
  229263             : 
  229264             : 
  229265             :      public: 
  229266             :          virtual ~SgSyncTeamStatement();
  229267             : 
  229268             : 
  229269             :      public: 
  229270             :          SgSyncTeamStatement(Sg_File_Info* startOfConstruct , SgExpression* team_value = NULL); 
  229271             :          SgSyncTeamStatement(SgExpression* team_value); 
  229272             : 
  229273             :     protected:
  229274             : // Start of memberFunctionString
  229275             : SgExpression* p_team_value;
  229276             :           
  229277             : // End of memberFunctionString
  229278             : 
  229279             :     friend struct Rose::Traits::generated::describe_node_t<SgSyncTeamStatement>;
  229280             :     friend struct Rose::Traits::generated::describe_field_t<SgSyncTeamStatement, SgExpression*,&SgSyncTeamStatement::p_team_value>;
  229281             : 
  229282             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229283             : 
  229284             : 
  229285             :    };
  229286             : #endif
  229287             : 
  229288             : // postdeclarations for SgSyncTeamStatement
  229289             : 
  229290             : /* #line 229291 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229291             : 
  229292             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  229293             : 
  229294             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229295             : 
  229296             : 
  229297             : /* #line 229298 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229298             : 
  229299             : 
  229300             : 
  229301             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229302             : 
  229303             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  229304             : //      This code is automatically generated for each 
  229305             : //      terminal and non-terminal within the defined 
  229306             : //      grammar.  There is a simple way to change the 
  229307             : //      code to fix bugs etc.  See the ROSE README file
  229308             : //      for directions.
  229309             : 
  229310             : // tps: (02/22/2010): Adding DLL export requirements
  229311             : #include "rosedll.h"
  229312             : 
  229313             : // predeclarations for SgLockStatement
  229314             : 
  229315             : /* #line 229316 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229316             : 
  229317             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  229318             : 
  229319             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229320             : 
  229321             : #if 1
  229322             : // Class Definition for SgLockStatement
  229323             : class ROSE_DLL_API SgLockStatement  : public SgImageControlStatement
  229324             :    {
  229325             :      public:
  229326             : 
  229327             : 
  229328             : /* #line 229329 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229329             : 
  229330             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  229331             : // Start of memberFunctionString
  229332             : /* #line 3488 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  229333             : 
  229334             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  229335             :      virtual unsigned int cfgIndexForEnd() const override;
  229336             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  229337             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  229338             : #endif
  229339             : 
  229340             : 
  229341             : // End of memberFunctionString
  229342             : // Start of memberFunctionString
  229343             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  229344             : 
  229345             : // *** COMMON CODE SECTION BEGINS HERE ***
  229346             : 
  229347             :     public:
  229348             : 
  229349             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  229350             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  229351             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  229352             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  229353             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  229354             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  229355             : 
  229356             :       /*! \brief returns a string representing the class name */
  229357             :           virtual std::string class_name() const override;
  229358             : 
  229359             :       /*! \brief returns new style SageIII enum values */
  229360             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  229361             : 
  229362             :       /*! \brief static variant value */
  229363             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  229364             :        // static const VariantT static_variant = V_SgLockStatement;
  229365             :           enum { static_variant = V_SgLockStatement };
  229366             : 
  229367             :        /* the generated cast function */
  229368             :       /*! \brief Casts pointer from base class to derived class */
  229369             :           ROSE_DLL_API friend       SgLockStatement* isSgLockStatement(       SgNode * s );
  229370             : 
  229371             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  229372             :           ROSE_DLL_API friend const SgLockStatement* isSgLockStatement( const SgNode * s );
  229373             : 
  229374             :      // ******************************************
  229375             :      // * Memory Pool / New / Delete
  229376             :      // ******************************************
  229377             : 
  229378             :      public:
  229379             :           /// \private
  229380             :           static const unsigned pool_size; //
  229381             :           /// \private
  229382             :           static std::vector<unsigned char *> pools; //
  229383             :           /// \private
  229384             :           static SgLockStatement * next_node; // 
  229385             : 
  229386             :           /// \private
  229387             :           static unsigned long initializeStorageClassArray(SgLockStatementStorageClass *); //
  229388             : 
  229389             :           /// \private
  229390             :           static void clearMemoryPool(); //
  229391             :           static void deleteMemoryPool(); //
  229392             : 
  229393             :           /// \private
  229394             :           static void extendMemoryPoolForFileIO(); //
  229395             : 
  229396             :           /// \private
  229397             :           static SgLockStatement * getPointerFromGlobalIndex(unsigned long); //
  229398             :           /// \private
  229399             :           static SgLockStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  229400             : 
  229401             :           /// \private
  229402             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  229403             :           /// \private
  229404             :           static void resetValidFreepointers(); //
  229405             :           /// \private
  229406             :           static unsigned long getNumberOfLastValidPointer(); //
  229407             : 
  229408             : 
  229409             : #if defined(INLINE_FUNCTIONS)
  229410             :       /*! \brief returns pointer to newly allocated IR node */
  229411             :           inline void *operator new (size_t size);
  229412             : #else
  229413             :       /*! \brief returns pointer to newly allocated IR node */
  229414             :           void *operator new (size_t size);
  229415             : #endif
  229416             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  229417             :           void operator delete (void* pointer, size_t size);
  229418             : 
  229419             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  229420           0 :           void operator delete (void* pointer)
  229421             :              {
  229422             :             // This is the generated delete operator...
  229423           0 :                SgLockStatement::operator delete (pointer,sizeof(SgLockStatement));
  229424             :              }
  229425             : 
  229426             :       /*! \brief Returns the total number of IR nodes of this type */
  229427             :           static size_t numberOfNodes();
  229428             : 
  229429             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  229430             :           static size_t memoryUsage();
  229431             : 
  229432             :       // End of scope which started in IR nodes specific code 
  229433             :       /* */
  229434             : 
  229435             :       /* name Internal Functions
  229436             :           \brief Internal functions ... incomplete-documentation
  229437             : 
  229438             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229439             :           or by particularly knowledgeable users for specialized tools or applications.
  229440             : 
  229441             :           \internal We could not make these private because they are required by user for special purposes. And 
  229442             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  229443             :          
  229444             :        */
  229445             : 
  229446             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  229447             :        // overridden in every class by *generated* implementation
  229448             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  229449             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  229450             :        // MS: 06/28/02 container of names of variables or container indices 
  229451             :        // used used in the traversal to access AST successor nodes
  229452             :        // overridden in every class by *generated* implementation
  229453             :       /*! \brief container of names of variables or container indices used used in the traversal
  229454             :           to access AST successor nodes overridden in every class by *generated* implementation */
  229455             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  229456             : 
  229457             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  229458             :        // than all the vector copies. The implementation for these functions is generated for each class.
  229459             :       /*! \brief return number of children in the traversal successor list */
  229460             :           virtual size_t get_numberOfTraversalSuccessors() override;
  229461             :       /*! \brief index-based access to traversal successors by index number */
  229462             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  229463             :       /*! \brief index-based access to traversal successors by child node */
  229464             :           virtual size_t get_childIndex(SgNode *child) override;
  229465             : 
  229466             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  229467             :        // MS: 08/16/2002 method for generating RTI information
  229468             :       /*! \brief return C++ Runtime-Time-Information */
  229469             :           virtual RTIReturnType roseRTI() override;
  229470             : #endif
  229471             :       /* */
  229472             : 
  229473             : 
  229474             : 
  229475             :       /* name Deprecated Functions
  229476             :           \brief Deprecated functions ... incomplete-documentation
  229477             : 
  229478             :           These functions have been deprecated from use.
  229479             :        */
  229480             :       /* */
  229481             : 
  229482             :       /*! returns a C style string (char*) representing the class name */
  229483             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  229484             : 
  229485             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  229486             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  229487             : #if 0
  229488             :       /*! returns old style Sage II enum values */
  229489             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  229490             :       /*! returns old style Sage II enum values */
  229491             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  229492             : #endif
  229493             :       /* */
  229494             : 
  229495             : 
  229496             : 
  229497             : 
  229498             :      public:
  229499             :       /* name Traversal Support Functions
  229500             :           \brief Traversal support functions ... incomplete-documentation
  229501             : 
  229502             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229503             :           or by particularly knowledgable users for specialized tools or applications.
  229504             :        */
  229505             :       /* */
  229506             : 
  229507             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  229508             :        // (inferior to ROSE traversal mechanism, experimental).
  229509             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  229510             :        */
  229511             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  229512             : 
  229513             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  229514             :       /*! \brief support for the classic visitor pattern done in GoF */
  229515             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  229516             : 
  229517             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  229518             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  229519             :        */
  229520             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  229521             : 
  229522             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  229523             :        */
  229524             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  229525             : 
  229526             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  229527             :        // This traversal helps support internal tools that call static member functions.
  229528             :        // note: this function operates on the memory pools.
  229529             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  229530             :        */
  229531             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  229532             :       /* */
  229533             : 
  229534             : 
  229535             :      public:
  229536             :       /* name Memory Allocation Functions
  229537             :           \brief Memory allocations functions ... incomplete-documentation
  229538             : 
  229539             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229540             :           or by particularly knowledgable users for specialized tools or applications.
  229541             :        */
  229542             :       /* */
  229543             : 
  229544             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  229545             : 
  229546             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  229547             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  229548             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  229549             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  229550             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  229551             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  229552             :           being used with the AST File I/O mechanism.
  229553             :        */
  229554             :           virtual bool isInMemoryPool() override;
  229555             : 
  229556             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  229557             : 
  229558             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  229559             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  229560             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  229561             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  229562             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  229563             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  229564             :           being used with the AST File I/O mechanism.
  229565             :        */
  229566             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  229567             : 
  229568             :       // DQ (4/30/2006): Modified to be a const function.
  229569             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  229570             : 
  229571             :           This functions is part of general support for many possible tools to operate 
  229572             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  229573             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  229574             :           less than the set of pointers used by the AST file I/O. This is part of
  229575             :           work implemented by Andreas, and support tools such as the AST graph generation.
  229576             : 
  229577             :           \warning This function can return unexpected data members and thus the 
  229578             :                    order and the number of elements is unpredicable and subject 
  229579             :                    to change.
  229580             : 
  229581             :           \returns STL vector of pairs of SgNode* and strings
  229582             :        */
  229583             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  229584             : 
  229585             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  229586             : 
  229587             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  229588             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  229589             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  229590             : 
  229591             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  229592             :                    and subject to change.
  229593             :        */
  229594             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  229595             : 
  229596             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  229597             : 
  229598             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  229599             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  229600             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  229601             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  229602             : 
  229603             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  229604             : 
  229605             :           \returns long
  229606             :        */
  229607             :           virtual long getChildIndex( SgNode* childNode ) const override;
  229608             : 
  229609             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  229610             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  229611             :       /* \brief Constructor for use by AST File I/O Mechanism
  229612             : 
  229613             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  229614             :           which obtained via fast binary file I/O from disk.
  229615             :        */
  229616             :        // SgLockStatement( SgLockStatementStorageClass& source );
  229617             : 
  229618             : 
  229619             : 
  229620             : 
  229621             : 
  229622             :  // JH (10/24/2005): methods added to support the ast file IO
  229623             :     private:
  229624             : 
  229625             :       /* name AST Memory Allocation Support Functions
  229626             :           \brief Memory allocations support....
  229627             : 
  229628             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  229629             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  229630             :           and support the AST File I/O Mechanism.
  229631             :        */
  229632             :       /* */
  229633             : 
  229634             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  229635             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  229636             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  229637             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  229638             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  229639             :           a correspinding one in the AST_FILE_IO class!
  229640             :        */
  229641             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  229642             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  229643             :       /* \brief Typedef used for low level memory access.
  229644             :        */
  229645             :        // typedef unsigned char* TestType;
  229646             : 
  229647             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  229648             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  229649             :       /* \brief Typedef used to hold memory addresses as values.
  229650             :        */
  229651             :        // typedef unsigned long  AddressType;
  229652             : 
  229653             : 
  229654             : 
  229655             :        // necessary, to have direct access to the p_freepointer and the private methods !
  229656             :       /*! \brief friend class declaration to support AST File I/O */
  229657             :           friend class AST_FILE_IO;
  229658             : 
  229659             :       /*! \brief friend class declaration to support AST File I/O */
  229660             :           friend class SgLockStatementStorageClass;
  229661             : 
  229662             :       /*! \brief friend class declaration to support AST File I/O */
  229663             :           friend class AstSpecificDataManagingClass;
  229664             : 
  229665             :       /*! \brief friend class declaration to support AST File I/O */
  229666             :           friend class AstSpecificDataManagingClassStorageClass;
  229667             :     public:
  229668             :       /*! \brief IR node constructor to support AST File I/O */
  229669             :           SgLockStatement( const SgLockStatementStorageClass& source );
  229670             : 
  229671             :  // private: // JJW hack
  229672             :        /*
  229673             :           name AST Memory Allocation Support Variables
  229674             :           Memory allocations support variables 
  229675             : 
  229676             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  229677             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  229678             :           and support the AST File I/O Mechanism.
  229679             :        */
  229680             :       /* */
  229681             : 
  229682             :     public:
  229683             : 
  229684             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  229685             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  229686             :       // virtual SgNode* addRegExpAttribute();
  229687             :       /*! \brief Support for AST matching using regular expression.
  229688             : 
  229689             :           This support is incomplete and the subject of current research to define 
  229690             :           RegEx trees to support inexact matching.
  229691             :        */
  229692             :           SgLockStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  229693             : 
  229694             : // *** COMMON CODE SECTION ENDS HERE ***
  229695             : 
  229696             : 
  229697             : // End of memberFunctionString
  229698             : // Start of memberFunctionString
  229699             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  229700             : 
  229701             :      // the generated cast function
  229702             :      // friend ROSE_DLL_API SgLockStatement* isSgLockStatement ( SgNode* s );
  229703             : 
  229704             :           typedef SgImageControlStatement base_node_type;
  229705             : 
  229706             : 
  229707             : // End of memberFunctionString
  229708             : // Start of memberFunctionString
  229709             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  229710             : 
  229711             :           void post_construction_initialization() override;
  229712             : 
  229713             : 
  229714             : // End of memberFunctionString
  229715             : 
  229716             :      public: 
  229717             :          SgExpression* get_lock_variable() const;
  229718             :          void set_lock_variable(SgExpression* lock_variable);
  229719             : 
  229720             : 
  229721             :      public: 
  229722             :          virtual ~SgLockStatement();
  229723             : 
  229724             : 
  229725             :      public: 
  229726             :          SgLockStatement(Sg_File_Info* startOfConstruct , SgExpression* lock_variable = NULL); 
  229727             :          SgLockStatement(SgExpression* lock_variable); 
  229728             : 
  229729             :     protected:
  229730             : // Start of memberFunctionString
  229731             : SgExpression* p_lock_variable;
  229732             :           
  229733             : // End of memberFunctionString
  229734             : 
  229735             :     friend struct Rose::Traits::generated::describe_node_t<SgLockStatement>;
  229736             :     friend struct Rose::Traits::generated::describe_field_t<SgLockStatement, SgExpression*,&SgLockStatement::p_lock_variable>;
  229737             : 
  229738             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229739             : 
  229740             : 
  229741             :    };
  229742             : #endif
  229743             : 
  229744             : // postdeclarations for SgLockStatement
  229745             : 
  229746             : /* #line 229747 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229747             : 
  229748             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  229749             : 
  229750             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229751             : 
  229752             : 
  229753             : /* #line 229754 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229754             : 
  229755             : 
  229756             : 
  229757             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229758             : 
  229759             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  229760             : //      This code is automatically generated for each 
  229761             : //      terminal and non-terminal within the defined 
  229762             : //      grammar.  There is a simple way to change the 
  229763             : //      code to fix bugs etc.  See the ROSE README file
  229764             : //      for directions.
  229765             : 
  229766             : // tps: (02/22/2010): Adding DLL export requirements
  229767             : #include "rosedll.h"
  229768             : 
  229769             : // predeclarations for SgUnlockStatement
  229770             : 
  229771             : /* #line 229772 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229772             : 
  229773             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  229774             : 
  229775             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  229776             : 
  229777             : #if 1
  229778             : // Class Definition for SgUnlockStatement
  229779             : class ROSE_DLL_API SgUnlockStatement  : public SgImageControlStatement
  229780             :    {
  229781             :      public:
  229782             : 
  229783             : 
  229784             : /* #line 229785 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  229785             : 
  229786             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  229787             : // Start of memberFunctionString
  229788             : /* #line 3496 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  229789             : 
  229790             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  229791             :      virtual unsigned int cfgIndexForEnd() const override;
  229792             :      virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  229793             :      virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  229794             : #endif
  229795             : 
  229796             : 
  229797             : // End of memberFunctionString
  229798             : // Start of memberFunctionString
  229799             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  229800             : 
  229801             : // *** COMMON CODE SECTION BEGINS HERE ***
  229802             : 
  229803             :     public:
  229804             : 
  229805             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  229806             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  229807             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  229808             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  229809             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  229810             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  229811             : 
  229812             :       /*! \brief returns a string representing the class name */
  229813             :           virtual std::string class_name() const override;
  229814             : 
  229815             :       /*! \brief returns new style SageIII enum values */
  229816             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  229817             : 
  229818             :       /*! \brief static variant value */
  229819             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  229820             :        // static const VariantT static_variant = V_SgUnlockStatement;
  229821             :           enum { static_variant = V_SgUnlockStatement };
  229822             : 
  229823             :        /* the generated cast function */
  229824             :       /*! \brief Casts pointer from base class to derived class */
  229825             :           ROSE_DLL_API friend       SgUnlockStatement* isSgUnlockStatement(       SgNode * s );
  229826             : 
  229827             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  229828             :           ROSE_DLL_API friend const SgUnlockStatement* isSgUnlockStatement( const SgNode * s );
  229829             : 
  229830             :      // ******************************************
  229831             :      // * Memory Pool / New / Delete
  229832             :      // ******************************************
  229833             : 
  229834             :      public:
  229835             :           /// \private
  229836             :           static const unsigned pool_size; //
  229837             :           /// \private
  229838             :           static std::vector<unsigned char *> pools; //
  229839             :           /// \private
  229840             :           static SgUnlockStatement * next_node; // 
  229841             : 
  229842             :           /// \private
  229843             :           static unsigned long initializeStorageClassArray(SgUnlockStatementStorageClass *); //
  229844             : 
  229845             :           /// \private
  229846             :           static void clearMemoryPool(); //
  229847             :           static void deleteMemoryPool(); //
  229848             : 
  229849             :           /// \private
  229850             :           static void extendMemoryPoolForFileIO(); //
  229851             : 
  229852             :           /// \private
  229853             :           static SgUnlockStatement * getPointerFromGlobalIndex(unsigned long); //
  229854             :           /// \private
  229855             :           static SgUnlockStatement * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  229856             : 
  229857             :           /// \private
  229858             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  229859             :           /// \private
  229860             :           static void resetValidFreepointers(); //
  229861             :           /// \private
  229862             :           static unsigned long getNumberOfLastValidPointer(); //
  229863             : 
  229864             : 
  229865             : #if defined(INLINE_FUNCTIONS)
  229866             :       /*! \brief returns pointer to newly allocated IR node */
  229867             :           inline void *operator new (size_t size);
  229868             : #else
  229869             :       /*! \brief returns pointer to newly allocated IR node */
  229870             :           void *operator new (size_t size);
  229871             : #endif
  229872             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  229873             :           void operator delete (void* pointer, size_t size);
  229874             : 
  229875             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  229876           0 :           void operator delete (void* pointer)
  229877             :              {
  229878             :             // This is the generated delete operator...
  229879           0 :                SgUnlockStatement::operator delete (pointer,sizeof(SgUnlockStatement));
  229880             :              }
  229881             : 
  229882             :       /*! \brief Returns the total number of IR nodes of this type */
  229883             :           static size_t numberOfNodes();
  229884             : 
  229885             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  229886             :           static size_t memoryUsage();
  229887             : 
  229888             :       // End of scope which started in IR nodes specific code 
  229889             :       /* */
  229890             : 
  229891             :       /* name Internal Functions
  229892             :           \brief Internal functions ... incomplete-documentation
  229893             : 
  229894             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229895             :           or by particularly knowledgeable users for specialized tools or applications.
  229896             : 
  229897             :           \internal We could not make these private because they are required by user for special purposes. And 
  229898             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  229899             :          
  229900             :        */
  229901             : 
  229902             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  229903             :        // overridden in every class by *generated* implementation
  229904             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  229905             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  229906             :        // MS: 06/28/02 container of names of variables or container indices 
  229907             :        // used used in the traversal to access AST successor nodes
  229908             :        // overridden in every class by *generated* implementation
  229909             :       /*! \brief container of names of variables or container indices used used in the traversal
  229910             :           to access AST successor nodes overridden in every class by *generated* implementation */
  229911             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  229912             : 
  229913             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  229914             :        // than all the vector copies. The implementation for these functions is generated for each class.
  229915             :       /*! \brief return number of children in the traversal successor list */
  229916             :           virtual size_t get_numberOfTraversalSuccessors() override;
  229917             :       /*! \brief index-based access to traversal successors by index number */
  229918             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  229919             :       /*! \brief index-based access to traversal successors by child node */
  229920             :           virtual size_t get_childIndex(SgNode *child) override;
  229921             : 
  229922             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  229923             :        // MS: 08/16/2002 method for generating RTI information
  229924             :       /*! \brief return C++ Runtime-Time-Information */
  229925             :           virtual RTIReturnType roseRTI() override;
  229926             : #endif
  229927             :       /* */
  229928             : 
  229929             : 
  229930             : 
  229931             :       /* name Deprecated Functions
  229932             :           \brief Deprecated functions ... incomplete-documentation
  229933             : 
  229934             :           These functions have been deprecated from use.
  229935             :        */
  229936             :       /* */
  229937             : 
  229938             :       /*! returns a C style string (char*) representing the class name */
  229939             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  229940             : 
  229941             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  229942             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  229943             : #if 0
  229944             :       /*! returns old style Sage II enum values */
  229945             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  229946             :       /*! returns old style Sage II enum values */
  229947             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  229948             : #endif
  229949             :       /* */
  229950             : 
  229951             : 
  229952             : 
  229953             : 
  229954             :      public:
  229955             :       /* name Traversal Support Functions
  229956             :           \brief Traversal support functions ... incomplete-documentation
  229957             : 
  229958             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229959             :           or by particularly knowledgable users for specialized tools or applications.
  229960             :        */
  229961             :       /* */
  229962             : 
  229963             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  229964             :        // (inferior to ROSE traversal mechanism, experimental).
  229965             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  229966             :        */
  229967             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  229968             : 
  229969             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  229970             :       /*! \brief support for the classic visitor pattern done in GoF */
  229971             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  229972             : 
  229973             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  229974             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  229975             :        */
  229976             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  229977             : 
  229978             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  229979             :        */
  229980             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  229981             : 
  229982             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  229983             :        // This traversal helps support internal tools that call static member functions.
  229984             :        // note: this function operates on the memory pools.
  229985             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  229986             :        */
  229987             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  229988             :       /* */
  229989             : 
  229990             : 
  229991             :      public:
  229992             :       /* name Memory Allocation Functions
  229993             :           \brief Memory allocations functions ... incomplete-documentation
  229994             : 
  229995             :           These functions have been made public as part of the design, but they are suggested for internal use 
  229996             :           or by particularly knowledgable users for specialized tools or applications.
  229997             :        */
  229998             :       /* */
  229999             : 
  230000             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  230001             : 
  230002             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  230003             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  230004             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  230005             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  230006             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  230007             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  230008             :           being used with the AST File I/O mechanism.
  230009             :        */
  230010             :           virtual bool isInMemoryPool() override;
  230011             : 
  230012             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  230013             : 
  230014             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  230015             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  230016             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  230017             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  230018             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  230019             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  230020             :           being used with the AST File I/O mechanism.
  230021             :        */
  230022             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  230023             : 
  230024             :       // DQ (4/30/2006): Modified to be a const function.
  230025             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  230026             : 
  230027             :           This functions is part of general support for many possible tools to operate 
  230028             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  230029             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  230030             :           less than the set of pointers used by the AST file I/O. This is part of
  230031             :           work implemented by Andreas, and support tools such as the AST graph generation.
  230032             : 
  230033             :           \warning This function can return unexpected data members and thus the 
  230034             :                    order and the number of elements is unpredicable and subject 
  230035             :                    to change.
  230036             : 
  230037             :           \returns STL vector of pairs of SgNode* and strings
  230038             :        */
  230039             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  230040             : 
  230041             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  230042             : 
  230043             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  230044             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  230045             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  230046             : 
  230047             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  230048             :                    and subject to change.
  230049             :        */
  230050             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  230051             : 
  230052             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  230053             : 
  230054             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  230055             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  230056             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  230057             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  230058             : 
  230059             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  230060             : 
  230061             :           \returns long
  230062             :        */
  230063             :           virtual long getChildIndex( SgNode* childNode ) const override;
  230064             : 
  230065             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  230066             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  230067             :       /* \brief Constructor for use by AST File I/O Mechanism
  230068             : 
  230069             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  230070             :           which obtained via fast binary file I/O from disk.
  230071             :        */
  230072             :        // SgUnlockStatement( SgUnlockStatementStorageClass& source );
  230073             : 
  230074             : 
  230075             : 
  230076             : 
  230077             : 
  230078             :  // JH (10/24/2005): methods added to support the ast file IO
  230079             :     private:
  230080             : 
  230081             :       /* name AST Memory Allocation Support Functions
  230082             :           \brief Memory allocations support....
  230083             : 
  230084             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  230085             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  230086             :           and support the AST File I/O Mechanism.
  230087             :        */
  230088             :       /* */
  230089             : 
  230090             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  230091             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  230092             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  230093             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  230094             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  230095             :           a correspinding one in the AST_FILE_IO class!
  230096             :        */
  230097             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  230098             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  230099             :       /* \brief Typedef used for low level memory access.
  230100             :        */
  230101             :        // typedef unsigned char* TestType;
  230102             : 
  230103             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  230104             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  230105             :       /* \brief Typedef used to hold memory addresses as values.
  230106             :        */
  230107             :        // typedef unsigned long  AddressType;
  230108             : 
  230109             : 
  230110             : 
  230111             :        // necessary, to have direct access to the p_freepointer and the private methods !
  230112             :       /*! \brief friend class declaration to support AST File I/O */
  230113             :           friend class AST_FILE_IO;
  230114             : 
  230115             :       /*! \brief friend class declaration to support AST File I/O */
  230116             :           friend class SgUnlockStatementStorageClass;
  230117             : 
  230118             :       /*! \brief friend class declaration to support AST File I/O */
  230119             :           friend class AstSpecificDataManagingClass;
  230120             : 
  230121             :       /*! \brief friend class declaration to support AST File I/O */
  230122             :           friend class AstSpecificDataManagingClassStorageClass;
  230123             :     public:
  230124             :       /*! \brief IR node constructor to support AST File I/O */
  230125             :           SgUnlockStatement( const SgUnlockStatementStorageClass& source );
  230126             : 
  230127             :  // private: // JJW hack
  230128             :        /*
  230129             :           name AST Memory Allocation Support Variables
  230130             :           Memory allocations support variables 
  230131             : 
  230132             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  230133             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  230134             :           and support the AST File I/O Mechanism.
  230135             :        */
  230136             :       /* */
  230137             : 
  230138             :     public:
  230139             : 
  230140             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  230141             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  230142             :       // virtual SgNode* addRegExpAttribute();
  230143             :       /*! \brief Support for AST matching using regular expression.
  230144             : 
  230145             :           This support is incomplete and the subject of current research to define 
  230146             :           RegEx trees to support inexact matching.
  230147             :        */
  230148             :           SgUnlockStatement* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  230149             : 
  230150             : // *** COMMON CODE SECTION ENDS HERE ***
  230151             : 
  230152             : 
  230153             : // End of memberFunctionString
  230154             : // Start of memberFunctionString
  230155             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  230156             : 
  230157             :      // the generated cast function
  230158             :      // friend ROSE_DLL_API SgUnlockStatement* isSgUnlockStatement ( SgNode* s );
  230159             : 
  230160             :           typedef SgImageControlStatement base_node_type;
  230161             : 
  230162             : 
  230163             : // End of memberFunctionString
  230164             : // Start of memberFunctionString
  230165             : /* #line 740 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Statement.code" */
  230166             : 
  230167             :           void post_construction_initialization() override;
  230168             : 
  230169             : 
  230170             : // End of memberFunctionString
  230171             : 
  230172             :      public: 
  230173             :          SgExpression* get_lock_variable() const;
  230174             :          void set_lock_variable(SgExpression* lock_variable);
  230175             : 
  230176             : 
  230177             :      public: 
  230178             :          virtual ~SgUnlockStatement();
  230179             : 
  230180             : 
  230181             :      public: 
  230182             :          SgUnlockStatement(Sg_File_Info* startOfConstruct , SgExpression* lock_variable = NULL); 
  230183             :          SgUnlockStatement(SgExpression* lock_variable); 
  230184             : 
  230185             :     protected:
  230186             : // Start of memberFunctionString
  230187             : SgExpression* p_lock_variable;
  230188             :           
  230189             : // End of memberFunctionString
  230190             : 
  230191             :     friend struct Rose::Traits::generated::describe_node_t<SgUnlockStatement>;
  230192             :     friend struct Rose::Traits::generated::describe_field_t<SgUnlockStatement, SgExpression*,&SgUnlockStatement::p_lock_variable>;
  230193             : 
  230194             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230195             : 
  230196             : 
  230197             :    };
  230198             : #endif
  230199             : 
  230200             : // postdeclarations for SgUnlockStatement
  230201             : 
  230202             : /* #line 230203 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230203             : 
  230204             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  230205             : 
  230206             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230207             : 
  230208             : 
  230209             : /* #line 230210 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230210             : 
  230211             : 
  230212             : 
  230213             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230214             : 
  230215             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  230216             : //      This code is automatically generated for each 
  230217             : //      terminal and non-terminal within the defined 
  230218             : //      grammar.  There is a simple way to change the 
  230219             : //      code to fix bugs etc.  See the ROSE README file
  230220             : //      for directions.
  230221             : 
  230222             : // tps: (02/22/2010): Adding DLL export requirements
  230223             : #include "rosedll.h"
  230224             : 
  230225             : // predeclarations for SgExpression
  230226             : 
  230227             : /* #line 230228 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230228             : 
  230229             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  230230             : 
  230231             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230232             : 
  230233             : #if 1
  230234             : // Class Definition for SgExpression
  230235             : class ROSE_DLL_API SgExpression  : public SgLocatedNode
  230236             :    {
  230237             :      public:
  230238             : 
  230239             : 
  230240             : /* #line 230241 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230241             : 
  230242             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  230243             : // Start of memberFunctionString
  230244             : /* #line 7 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  230245             : 
  230246             : 
  230247             : //! This class represents the base class of all the expressions within this grammar.
  230248             : /*! It contains all the base functionality for the construction, manipulation, and unparsing support.
  230249             :  */
  230250             :      public:
  230251             :        // SgExpression();
  230252             :        // SgExpression(Sg_File_Info* info);
  230253             : 
  230254             :       //! Function to get user defined attributes (as I recall)
  230255             :       //  SgAttributePtrList& get_uattributes();
  230256             : 
  230257             :       //! Replace an expression child of this node with another one.
  230258             :           virtual int replace_expression(SgExpression *oldChild,SgExpression *newChild);
  230259             : 
  230260             :       //! unparsing support for pragmas
  230261             :       //  void output_pragma(ostream& os);
  230262             : 
  230263             :        // Set pragmas associated with this expression
  230264             :        // note: pragmas are typically associated with statements not expressions
  230265             :        // void set_pragma() ROSE_DEPRECATED_FUNCTION;
  230266             : 
  230267             :       //! get the type associated with this expression
  230268             :           virtual SgType* get_type() const;
  230269             : 
  230270             :        // set the type \attention{why does this not take a parameter?}
  230271             :        // DQ (1/14/2006): Because the type is computed internally (often from operands stored internally).
  230272             :        // virtual void set_type();
  230273             : 
  230274             :       //! return precedence (scale of 0-10, as I recall)
  230275             :           virtual int precedence() const ;
  230276             : 
  230277             :        // DQ (8/21/2004): Support for pragmas (this is the old Sage II support for pragmas)
  230278             :        // It is largely redundant to the newer statement based pragma support.  However, this
  230279             :        // is support for pragmas on a expression level.  I'm not clear if this is important
  230280             :        // to support.
  230281             :        // void add_pragma(int cnt, SgPragma** plist);
  230282             :        // SgPragma* add_pragma(char *nm);
  230283             :        // SgPragma* get_pragma(char *nm) const;
  230284             :        // int remove_pragma(char *nm);
  230285             : 
  230286             :        // get attribute
  230287             :        // SgAttribute* get_user_attribute(char *nm) const;
  230288             :        // SgAttribute* add_user_attribute(char *nm, SgAttribute* attr);
  230289             :        // int remove_user_attribute(char *nm);
  230290             : 
  230291             :      public:
  230292             : 
  230293             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  230294             :     // Overriding SgNode versions of these
  230295             :           virtual unsigned int cfgIndexForEnd() const override;
  230296             :           virtual bool cfgIsIndexInteresting(unsigned int index) const override;
  230297             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  230298             :           virtual unsigned int cfgFindNextChildIndex(SgNode* n) override;
  230299             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  230300             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  230301             : #endif
  230302             : 
  230303             :        // get lvalue
  230304             :           virtual bool isDefinable() const;
  230305             :           virtual bool isUsedAsDefinable() const;
  230306             :           virtual bool isLValue() const;
  230307             :           virtual bool isUsedAsLValue() const; // Calls parent.isChildUsedAsLValue(this)
  230308             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const; // INTERNAL Recursively call up the chain to answer the child
  230309             : 
  230310             :        // DQ (11/6/2006): use this to return the operatorPosition
  230311             :        // (instead of the startOfConstruct as it is used for SgStatement objects)
  230312             :           virtual Sg_File_Info* get_file_info(void) const override;
  230313             :           virtual void set_file_info(Sg_File_Info* X) override;
  230314             : 
  230315             : #if ALT_FIXUP_COPY
  230316             :        // DQ (11/7/2007): These need to be called separately (see documentation)
  230317             :           virtual void fixupCopy_scopes     (SgNode* copy, SgCopyHelp & help) const override;
  230318             :           virtual void fixupCopy_symbols    (SgNode* copy, SgCopyHelp & help) const override;
  230319             :           virtual void fixupCopy_references (SgNode* copy, SgCopyHelp & help) const override;
  230320             : #else
  230321             :        // DQ (11/1/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  230322             :           virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  230323             : #endif
  230324             : 
  230325             :        // DQ (5/29/2011): Added to support for new qualified name generation
  230326             :       //! This function generates the qualified name prefix to be used with the type referenced by this expression.
  230327             :           SgName get_qualified_name_prefix() const;
  230328             : 
  230329             :        // DQ (6/2/2011): Added to support for new qualified name generation
  230330             :       //! This function generates the qualified name prefix to be used with the type referenced by this expression.
  230331             :           SgName get_qualified_name_prefix_for_referenced_type() const;
  230332             : 
  230333             :        // DQ (6/2/2011): Added virtual functions so that we can define specialized versions at specific IR nodes.
  230334             :           virtual int  get_name_qualification_length () const;
  230335             :           virtual void set_name_qualification_length ( int name_qualification_length );
  230336             :           virtual bool get_type_elaboration_required () const;
  230337             :           virtual void set_type_elaboration_required ( bool type_elaboration_required );
  230338             :           virtual bool get_global_qualification_required () const;
  230339             :           virtual void set_global_qualification_required ( bool global_qualification_required );
  230340             : 
  230341             :        // DQ (4/16/2019): Added virtual functions so that we can define specialized versions at specific IR nodes.
  230342             :           virtual int  get_name_qualification_for_pointer_to_member_class_length () const;
  230343             :           virtual void set_name_qualification_for_pointer_to_member_class_length ( int name_qualification_length );
  230344             :           virtual bool get_type_elaboration_for_pointer_to_member_class_required () const;
  230345             :           virtual void set_type_elaboration_for_pointer_to_member_class_required ( bool type_elaboration_required );
  230346             :           virtual bool get_global_qualification_for_pointer_to_member_class_required () const;
  230347             :           virtual void set_global_qualification_for_pointer_to_member_class_required ( bool global_qualification_required );
  230348             : 
  230349             :        // DQ (9/23/2011): Use the vitual function version so that we can test within ROSE (part of incremental testing of new original expression tree support).
  230350             :        // DQ (9/19/2011): Put back the original code (non-virtual functions) so that we can test against previously passing tests.
  230351             :        // DQ (9/16/2011): Modified to make this a virtual function and added set_originalExpressionTree().
  230352             :        // DQ (6/21/2011): Get the original expression if this is an IR node where it is defined and it is a valid pointer.
  230353             : #if 1
  230354             :           virtual SgExpression* get_originalExpressionTree() const;
  230355             : #else
  230356             :           SgExpression* get_originalExpressionTree() const;
  230357             : #endif
  230358             : #if 1
  230359             :        // DQ (9/19/2011): Modify this to be virtual as a single step for testing ROSE.
  230360             :           virtual void set_originalExpressionTree(SgExpression* X);
  230361             : #else
  230362             :        // DQ (9/19/2011): Added non-virtual set_originalExpressionTree() function so that code in fixupConstantFoldedValues.C would compile.
  230363             :           void set_originalExpressionTree(SgExpression* X);
  230364             : #endif
  230365             : 
  230366             :       /*! \brief Some expressions store internal SgType pointers explicitly while others compute them from other expressions.  This function is true if it has a data member that is a type (pointer, array, etc.).
  230367             : 
  230368             :           Result is true if it stores a type explicitly as a data member, else false.
  230369             : 
  230370             :           \internal True only if this is either a SgTemplateParameterVal, SgComplexVal, SgSizeOfOp, SgAlignOfOp,
  230371             :                     SgTypeIdOp, SgVarArgStartOp, SgVarArgStartOneOperandOp,
  230372             :                     SgVarArgOp, SgVarArgEndOp, SgVarArgCopyOp, SgNewExp, SgRefExp, SgAggregateInitializer, SgCompoundInitializer,
  230373             :                     SgConstructorInitializer, SgAssignInitializer, SgPseudoDestructorRefExp.
  230374             :        */
  230375             :           bool hasExplicitType();
  230376             : 
  230377             :       /*! \brief Some expressions store internal SgType pointers explicitly, this allows these IR nodes to be reset with new types (used in the snippet support).
  230378             :        */
  230379             :           void set_explicitly_stored_type( SgType* type );
  230380             : 
  230381             : 
  230382             : 
  230383             : // End of memberFunctionString
  230384             : // Start of memberFunctionString
  230385             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  230386             : 
  230387             :           void post_construction_initialization() override;
  230388             : 
  230389             : 
  230390             : // End of memberFunctionString
  230391             : // Start of memberFunctionString
  230392             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  230393             : 
  230394             : // *** COMMON CODE SECTION BEGINS HERE ***
  230395             : 
  230396             :     public:
  230397             : 
  230398             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  230399             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  230400             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  230401             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  230402             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  230403             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  230404             : 
  230405             :       /*! \brief returns a string representing the class name */
  230406             :           virtual std::string class_name() const override;
  230407             : 
  230408             :       /*! \brief returns new style SageIII enum values */
  230409             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  230410             : 
  230411             :       /*! \brief static variant value */
  230412             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  230413             :        // static const VariantT static_variant = V_SgExpression;
  230414             :           enum { static_variant = V_SgExpression };
  230415             : 
  230416             :        /* the generated cast function */
  230417             :       /*! \brief Casts pointer from base class to derived class */
  230418             :           ROSE_DLL_API friend       SgExpression* isSgExpression(       SgNode * s );
  230419             : 
  230420             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  230421             :           ROSE_DLL_API friend const SgExpression* isSgExpression( const SgNode * s );
  230422             : 
  230423             :      // ******************************************
  230424             :      // * Memory Pool / New / Delete
  230425             :      // ******************************************
  230426             : 
  230427             :      public:
  230428             :           /// \private
  230429             :           static const unsigned pool_size; //
  230430             :           /// \private
  230431             :           static std::vector<unsigned char *> pools; //
  230432             :           /// \private
  230433             :           static SgExpression * next_node; // 
  230434             : 
  230435             :           /// \private
  230436             :           static unsigned long initializeStorageClassArray(SgExpressionStorageClass *); //
  230437             : 
  230438             :           /// \private
  230439             :           static void clearMemoryPool(); //
  230440             :           static void deleteMemoryPool(); //
  230441             : 
  230442             :           /// \private
  230443             :           static void extendMemoryPoolForFileIO(); //
  230444             : 
  230445             :           /// \private
  230446             :           static SgExpression * getPointerFromGlobalIndex(unsigned long); //
  230447             :           /// \private
  230448             :           static SgExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  230449             : 
  230450             :           /// \private
  230451             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  230452             :           /// \private
  230453             :           static void resetValidFreepointers(); //
  230454             :           /// \private
  230455             :           static unsigned long getNumberOfLastValidPointer(); //
  230456             : 
  230457             : 
  230458             : #if defined(INLINE_FUNCTIONS)
  230459             :       /*! \brief returns pointer to newly allocated IR node */
  230460             :           inline void *operator new (size_t size);
  230461             : #else
  230462             :       /*! \brief returns pointer to newly allocated IR node */
  230463             :           void *operator new (size_t size);
  230464             : #endif
  230465             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  230466             :           void operator delete (void* pointer, size_t size);
  230467             : 
  230468             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  230469           0 :           void operator delete (void* pointer)
  230470             :              {
  230471             :             // This is the generated delete operator...
  230472           0 :                SgExpression::operator delete (pointer,sizeof(SgExpression));
  230473             :              }
  230474             : 
  230475             :       /*! \brief Returns the total number of IR nodes of this type */
  230476             :           static size_t numberOfNodes();
  230477             : 
  230478             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  230479             :           static size_t memoryUsage();
  230480             : 
  230481             :       // End of scope which started in IR nodes specific code 
  230482             :       /* */
  230483             : 
  230484             :       /* name Internal Functions
  230485             :           \brief Internal functions ... incomplete-documentation
  230486             : 
  230487             :           These functions have been made public as part of the design, but they are suggested for internal use 
  230488             :           or by particularly knowledgeable users for specialized tools or applications.
  230489             : 
  230490             :           \internal We could not make these private because they are required by user for special purposes. And 
  230491             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  230492             :          
  230493             :        */
  230494             : 
  230495             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  230496             :        // overridden in every class by *generated* implementation
  230497             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  230498             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  230499             :        // MS: 06/28/02 container of names of variables or container indices 
  230500             :        // used used in the traversal to access AST successor nodes
  230501             :        // overridden in every class by *generated* implementation
  230502             :       /*! \brief container of names of variables or container indices used used in the traversal
  230503             :           to access AST successor nodes overridden in every class by *generated* implementation */
  230504             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  230505             : 
  230506             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  230507             :        // than all the vector copies. The implementation for these functions is generated for each class.
  230508             :       /*! \brief return number of children in the traversal successor list */
  230509             :           virtual size_t get_numberOfTraversalSuccessors() override;
  230510             :       /*! \brief index-based access to traversal successors by index number */
  230511             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  230512             :       /*! \brief index-based access to traversal successors by child node */
  230513             :           virtual size_t get_childIndex(SgNode *child) override;
  230514             : 
  230515             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  230516             :        // MS: 08/16/2002 method for generating RTI information
  230517             :       /*! \brief return C++ Runtime-Time-Information */
  230518             :           virtual RTIReturnType roseRTI() override;
  230519             : #endif
  230520             :       /* */
  230521             : 
  230522             : 
  230523             : 
  230524             :       /* name Deprecated Functions
  230525             :           \brief Deprecated functions ... incomplete-documentation
  230526             : 
  230527             :           These functions have been deprecated from use.
  230528             :        */
  230529             :       /* */
  230530             : 
  230531             :       /*! returns a C style string (char*) representing the class name */
  230532             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  230533             : 
  230534             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  230535             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  230536             : #if 0
  230537             :       /*! returns old style Sage II enum values */
  230538             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  230539             :       /*! returns old style Sage II enum values */
  230540             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  230541             : #endif
  230542             :       /* */
  230543             : 
  230544             : 
  230545             : 
  230546             : 
  230547             :      public:
  230548             :       /* name Traversal Support Functions
  230549             :           \brief Traversal support functions ... incomplete-documentation
  230550             : 
  230551             :           These functions have been made public as part of the design, but they are suggested for internal use 
  230552             :           or by particularly knowledgable users for specialized tools or applications.
  230553             :        */
  230554             :       /* */
  230555             : 
  230556             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  230557             :        // (inferior to ROSE traversal mechanism, experimental).
  230558             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  230559             :        */
  230560             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  230561             : 
  230562             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  230563             :       /*! \brief support for the classic visitor pattern done in GoF */
  230564             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  230565             : 
  230566             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  230567             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  230568             :        */
  230569             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  230570             : 
  230571             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  230572             :        */
  230573             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  230574             : 
  230575             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  230576             :        // This traversal helps support internal tools that call static member functions.
  230577             :        // note: this function operates on the memory pools.
  230578             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  230579             :        */
  230580             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  230581             :       /* */
  230582             : 
  230583             : 
  230584             :      public:
  230585             :       /* name Memory Allocation Functions
  230586             :           \brief Memory allocations functions ... incomplete-documentation
  230587             : 
  230588             :           These functions have been made public as part of the design, but they are suggested for internal use 
  230589             :           or by particularly knowledgable users for specialized tools or applications.
  230590             :        */
  230591             :       /* */
  230592             : 
  230593             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  230594             : 
  230595             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  230596             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  230597             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  230598             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  230599             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  230600             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  230601             :           being used with the AST File I/O mechanism.
  230602             :        */
  230603             :           virtual bool isInMemoryPool() override;
  230604             : 
  230605             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  230606             : 
  230607             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  230608             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  230609             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  230610             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  230611             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  230612             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  230613             :           being used with the AST File I/O mechanism.
  230614             :        */
  230615             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  230616             : 
  230617             :       // DQ (4/30/2006): Modified to be a const function.
  230618             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  230619             : 
  230620             :           This functions is part of general support for many possible tools to operate 
  230621             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  230622             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  230623             :           less than the set of pointers used by the AST file I/O. This is part of
  230624             :           work implemented by Andreas, and support tools such as the AST graph generation.
  230625             : 
  230626             :           \warning This function can return unexpected data members and thus the 
  230627             :                    order and the number of elements is unpredicable and subject 
  230628             :                    to change.
  230629             : 
  230630             :           \returns STL vector of pairs of SgNode* and strings
  230631             :        */
  230632             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  230633             : 
  230634             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  230635             : 
  230636             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  230637             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  230638             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  230639             : 
  230640             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  230641             :                    and subject to change.
  230642             :        */
  230643             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  230644             : 
  230645             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  230646             : 
  230647             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  230648             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  230649             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  230650             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  230651             : 
  230652             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  230653             : 
  230654             :           \returns long
  230655             :        */
  230656             :           virtual long getChildIndex( SgNode* childNode ) const override;
  230657             : 
  230658             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  230659             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  230660             :       /* \brief Constructor for use by AST File I/O Mechanism
  230661             : 
  230662             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  230663             :           which obtained via fast binary file I/O from disk.
  230664             :        */
  230665             :        // SgExpression( SgExpressionStorageClass& source );
  230666             : 
  230667             : 
  230668             : 
  230669             : 
  230670             : 
  230671             :  // JH (10/24/2005): methods added to support the ast file IO
  230672             :     private:
  230673             : 
  230674             :       /* name AST Memory Allocation Support Functions
  230675             :           \brief Memory allocations support....
  230676             : 
  230677             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  230678             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  230679             :           and support the AST File I/O Mechanism.
  230680             :        */
  230681             :       /* */
  230682             : 
  230683             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  230684             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  230685             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  230686             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  230687             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  230688             :           a correspinding one in the AST_FILE_IO class!
  230689             :        */
  230690             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  230691             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  230692             :       /* \brief Typedef used for low level memory access.
  230693             :        */
  230694             :        // typedef unsigned char* TestType;
  230695             : 
  230696             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  230697             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  230698             :       /* \brief Typedef used to hold memory addresses as values.
  230699             :        */
  230700             :        // typedef unsigned long  AddressType;
  230701             : 
  230702             : 
  230703             : 
  230704             :        // necessary, to have direct access to the p_freepointer and the private methods !
  230705             :       /*! \brief friend class declaration to support AST File I/O */
  230706             :           friend class AST_FILE_IO;
  230707             : 
  230708             :       /*! \brief friend class declaration to support AST File I/O */
  230709             :           friend class SgExpressionStorageClass;
  230710             : 
  230711             :       /*! \brief friend class declaration to support AST File I/O */
  230712             :           friend class AstSpecificDataManagingClass;
  230713             : 
  230714             :       /*! \brief friend class declaration to support AST File I/O */
  230715             :           friend class AstSpecificDataManagingClassStorageClass;
  230716             :     public:
  230717             :       /*! \brief IR node constructor to support AST File I/O */
  230718             :           SgExpression( const SgExpressionStorageClass& source );
  230719             : 
  230720             :  // private: // JJW hack
  230721             :        /*
  230722             :           name AST Memory Allocation Support Variables
  230723             :           Memory allocations support variables 
  230724             : 
  230725             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  230726             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  230727             :           and support the AST File I/O Mechanism.
  230728             :        */
  230729             :       /* */
  230730             : 
  230731             :     public:
  230732             : 
  230733             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  230734             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  230735             :       // virtual SgNode* addRegExpAttribute();
  230736             :       /*! \brief Support for AST matching using regular expression.
  230737             : 
  230738             :           This support is incomplete and the subject of current research to define 
  230739             :           RegEx trees to support inexact matching.
  230740             :        */
  230741             :           SgExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  230742             : 
  230743             : // *** COMMON CODE SECTION ENDS HERE ***
  230744             : 
  230745             : 
  230746             : // End of memberFunctionString
  230747             : // Start of memberFunctionString
  230748             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  230749             : 
  230750             :      // the generated cast function
  230751             :      // friend ROSE_DLL_API SgExpression* isSgExpression ( SgNode* s );
  230752             : 
  230753             :           typedef SgLocatedNode base_node_type;
  230754             : 
  230755             : 
  230756             : // End of memberFunctionString
  230757             : 
  230758             :      public: 
  230759             :          bool get_need_paren() const;
  230760             :          void set_need_paren(bool need_paren);
  230761             : 
  230762             :      public: 
  230763             :          bool get_lvalue() const;
  230764             :          void set_lvalue(bool lvalue);
  230765             : 
  230766             :      public: 
  230767             :          bool get_global_qualified_name() const;
  230768             :          void set_global_qualified_name(bool global_qualified_name);
  230769             : 
  230770             :      public: 
  230771             :          Sg_File_Info* get_operatorPosition() const;
  230772             :          void set_operatorPosition(Sg_File_Info* operatorPosition);
  230773             : 
  230774             : 
  230775             :      public: 
  230776             :          virtual ~SgExpression();
  230777             : 
  230778             : 
  230779             :      public: 
  230780             :          SgExpression(Sg_File_Info* startOfConstruct ); 
  230781             :          SgExpression(); 
  230782             : 
  230783             :     protected:
  230784             : // Start of memberFunctionString
  230785             : bool p_need_paren;
  230786             :           
  230787             : // End of memberFunctionString
  230788             : // Start of memberFunctionString
  230789             : bool p_lvalue;
  230790             :           
  230791             : // End of memberFunctionString
  230792             : // Start of memberFunctionString
  230793             : bool p_global_qualified_name;
  230794             :           
  230795             : // End of memberFunctionString
  230796             : // Start of memberFunctionString
  230797             : Sg_File_Info* p_operatorPosition;
  230798             :           
  230799             : // End of memberFunctionString
  230800             : 
  230801             :     friend struct Rose::Traits::generated::describe_node_t<SgExpression>;
  230802             :     friend struct Rose::Traits::generated::describe_field_t<SgExpression, bool,&SgExpression::p_need_paren>;
  230803             :     friend struct Rose::Traits::generated::describe_field_t<SgExpression, bool,&SgExpression::p_lvalue>;
  230804             :     friend struct Rose::Traits::generated::describe_field_t<SgExpression, bool,&SgExpression::p_global_qualified_name>;
  230805             :     friend struct Rose::Traits::generated::describe_field_t<SgExpression, Sg_File_Info*,&SgExpression::p_operatorPosition>;
  230806             : 
  230807             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230808             : 
  230809             : 
  230810             :    };
  230811             : #endif
  230812             : 
  230813             : // postdeclarations for SgExpression
  230814             : 
  230815             : /* #line 230816 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230816             : 
  230817             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  230818             : 
  230819             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230820             : 
  230821             : 
  230822             : /* #line 230823 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230823             : 
  230824             : 
  230825             : 
  230826             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230827             : 
  230828             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  230829             : //      This code is automatically generated for each 
  230830             : //      terminal and non-terminal within the defined 
  230831             : //      grammar.  There is a simple way to change the 
  230832             : //      code to fix bugs etc.  See the ROSE README file
  230833             : //      for directions.
  230834             : 
  230835             : // tps: (02/22/2010): Adding DLL export requirements
  230836             : #include "rosedll.h"
  230837             : 
  230838             : // predeclarations for SgUnaryOp
  230839             : 
  230840             : /* #line 230841 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230841             : 
  230842             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  230843             : 
  230844             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  230845             : 
  230846             : #if 1
  230847             : // Class Definition for SgUnaryOp
  230848             : class ROSE_DLL_API SgUnaryOp  : public SgExpression
  230849             :    {
  230850             :      public:
  230851             : 
  230852             : 
  230853             : /* #line 230854 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  230854             : 
  230855             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  230856             : // Start of memberFunctionString
  230857             : /* #line 190 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  230858             : 
  230859             :           int length() const ROSE_DEPRECATED_FUNCTION;
  230860             :           bool empty() const ROSE_DEPRECATED_FUNCTION;
  230861             :        // void operator_unparse( const char *, Unparse_Info &, ostream & );
  230862             : 
  230863             : 
  230864             : // End of memberFunctionString
  230865             : // Start of memberFunctionString
  230866             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  230867             : 
  230868             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  230869             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  230870             : 
  230871             : 
  230872             : // End of memberFunctionString
  230873             : // Start of memberFunctionString
  230874             : /* #line 202 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  230875             : 
  230876             : 
  230877             :           SgExpression* get_operand() const;
  230878             :           void set_operand (SgExpression * exp);
  230879             :           SgType* get_type() const override;
  230880             : 
  230881             :        // Enums are not properly scoped in the class declaration and are assigned
  230882             :        // to a global scope so we have to change the name to make it unique across
  230883             :        // different grammars
  230884             :       /*! \brief Enum value defines operators as prefix or postfix, as appropriate, e.g. operator++().
  230885             : 
  230886             :           This enum type provides support for specification of prefix/postfix operators such
  230887             :           as operator++() using a simpler mechanism thatn that provided by C++.  See C++
  230888             :           standard for details of specification of prefix and postfix operators.
  230889             : 
  230890             :           \internal There should be an additional value added to support unknown setting (with value 0)
  230891             :        */
  230892             :           enum Sgop_mode
  230893             :              {
  230894             :                prefix=0 /*! Prefix Operator Specifier */,
  230895             :                postfix  /*! Postfix Operator Specifier */
  230896             :              };
  230897             : 
  230898             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  230899             :           virtual unsigned int cfgIndexForEnd() const override;
  230900             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  230901             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  230902             : #endif
  230903             : 
  230904             : 
  230905             : 
  230906             : // End of memberFunctionString
  230907             : // Start of memberFunctionString
  230908             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  230909             : 
  230910             : // *** COMMON CODE SECTION BEGINS HERE ***
  230911             : 
  230912             :     public:
  230913             : 
  230914             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  230915             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  230916             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  230917             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  230918             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  230919             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  230920             : 
  230921             :       /*! \brief returns a string representing the class name */
  230922             :           virtual std::string class_name() const override;
  230923             : 
  230924             :       /*! \brief returns new style SageIII enum values */
  230925             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  230926             : 
  230927             :       /*! \brief static variant value */
  230928             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  230929             :        // static const VariantT static_variant = V_SgUnaryOp;
  230930             :           enum { static_variant = V_SgUnaryOp };
  230931             : 
  230932             :        /* the generated cast function */
  230933             :       /*! \brief Casts pointer from base class to derived class */
  230934             :           ROSE_DLL_API friend       SgUnaryOp* isSgUnaryOp(       SgNode * s );
  230935             : 
  230936             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  230937             :           ROSE_DLL_API friend const SgUnaryOp* isSgUnaryOp( const SgNode * s );
  230938             : 
  230939             :      // ******************************************
  230940             :      // * Memory Pool / New / Delete
  230941             :      // ******************************************
  230942             : 
  230943             :      public:
  230944             :           /// \private
  230945             :           static const unsigned pool_size; //
  230946             :           /// \private
  230947             :           static std::vector<unsigned char *> pools; //
  230948             :           /// \private
  230949             :           static SgUnaryOp * next_node; // 
  230950             : 
  230951             :           /// \private
  230952             :           static unsigned long initializeStorageClassArray(SgUnaryOpStorageClass *); //
  230953             : 
  230954             :           /// \private
  230955             :           static void clearMemoryPool(); //
  230956             :           static void deleteMemoryPool(); //
  230957             : 
  230958             :           /// \private
  230959             :           static void extendMemoryPoolForFileIO(); //
  230960             : 
  230961             :           /// \private
  230962             :           static SgUnaryOp * getPointerFromGlobalIndex(unsigned long); //
  230963             :           /// \private
  230964             :           static SgUnaryOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  230965             : 
  230966             :           /// \private
  230967             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  230968             :           /// \private
  230969             :           static void resetValidFreepointers(); //
  230970             :           /// \private
  230971             :           static unsigned long getNumberOfLastValidPointer(); //
  230972             : 
  230973             : 
  230974             : #if defined(INLINE_FUNCTIONS)
  230975             :       /*! \brief returns pointer to newly allocated IR node */
  230976             :           inline void *operator new (size_t size);
  230977             : #else
  230978             :       /*! \brief returns pointer to newly allocated IR node */
  230979             :           void *operator new (size_t size);
  230980             : #endif
  230981             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  230982             :           void operator delete (void* pointer, size_t size);
  230983             : 
  230984             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  230985           0 :           void operator delete (void* pointer)
  230986             :              {
  230987             :             // This is the generated delete operator...
  230988           0 :                SgUnaryOp::operator delete (pointer,sizeof(SgUnaryOp));
  230989             :              }
  230990             : 
  230991             :       /*! \brief Returns the total number of IR nodes of this type */
  230992             :           static size_t numberOfNodes();
  230993             : 
  230994             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  230995             :           static size_t memoryUsage();
  230996             : 
  230997             :       // End of scope which started in IR nodes specific code 
  230998             :       /* */
  230999             : 
  231000             :       /* name Internal Functions
  231001             :           \brief Internal functions ... incomplete-documentation
  231002             : 
  231003             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231004             :           or by particularly knowledgeable users for specialized tools or applications.
  231005             : 
  231006             :           \internal We could not make these private because they are required by user for special purposes. And 
  231007             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  231008             :          
  231009             :        */
  231010             : 
  231011             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  231012             :        // overridden in every class by *generated* implementation
  231013             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  231014             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  231015             :        // MS: 06/28/02 container of names of variables or container indices 
  231016             :        // used used in the traversal to access AST successor nodes
  231017             :        // overridden in every class by *generated* implementation
  231018             :       /*! \brief container of names of variables or container indices used used in the traversal
  231019             :           to access AST successor nodes overridden in every class by *generated* implementation */
  231020             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  231021             : 
  231022             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  231023             :        // than all the vector copies. The implementation for these functions is generated for each class.
  231024             :       /*! \brief return number of children in the traversal successor list */
  231025             :           virtual size_t get_numberOfTraversalSuccessors() override;
  231026             :       /*! \brief index-based access to traversal successors by index number */
  231027             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  231028             :       /*! \brief index-based access to traversal successors by child node */
  231029             :           virtual size_t get_childIndex(SgNode *child) override;
  231030             : 
  231031             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  231032             :        // MS: 08/16/2002 method for generating RTI information
  231033             :       /*! \brief return C++ Runtime-Time-Information */
  231034             :           virtual RTIReturnType roseRTI() override;
  231035             : #endif
  231036             :       /* */
  231037             : 
  231038             : 
  231039             : 
  231040             :       /* name Deprecated Functions
  231041             :           \brief Deprecated functions ... incomplete-documentation
  231042             : 
  231043             :           These functions have been deprecated from use.
  231044             :        */
  231045             :       /* */
  231046             : 
  231047             :       /*! returns a C style string (char*) representing the class name */
  231048             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  231049             : 
  231050             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  231051             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  231052             : #if 0
  231053             :       /*! returns old style Sage II enum values */
  231054             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  231055             :       /*! returns old style Sage II enum values */
  231056             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  231057             : #endif
  231058             :       /* */
  231059             : 
  231060             : 
  231061             : 
  231062             : 
  231063             :      public:
  231064             :       /* name Traversal Support Functions
  231065             :           \brief Traversal support functions ... incomplete-documentation
  231066             : 
  231067             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231068             :           or by particularly knowledgable users for specialized tools or applications.
  231069             :        */
  231070             :       /* */
  231071             : 
  231072             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  231073             :        // (inferior to ROSE traversal mechanism, experimental).
  231074             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  231075             :        */
  231076             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  231077             : 
  231078             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  231079             :       /*! \brief support for the classic visitor pattern done in GoF */
  231080             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  231081             : 
  231082             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  231083             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  231084             :        */
  231085             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  231086             : 
  231087             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  231088             :        */
  231089             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  231090             : 
  231091             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  231092             :        // This traversal helps support internal tools that call static member functions.
  231093             :        // note: this function operates on the memory pools.
  231094             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  231095             :        */
  231096             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  231097             :       /* */
  231098             : 
  231099             : 
  231100             :      public:
  231101             :       /* name Memory Allocation Functions
  231102             :           \brief Memory allocations functions ... incomplete-documentation
  231103             : 
  231104             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231105             :           or by particularly knowledgable users for specialized tools or applications.
  231106             :        */
  231107             :       /* */
  231108             : 
  231109             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  231110             : 
  231111             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  231112             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  231113             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  231114             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  231115             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  231116             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  231117             :           being used with the AST File I/O mechanism.
  231118             :        */
  231119             :           virtual bool isInMemoryPool() override;
  231120             : 
  231121             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  231122             : 
  231123             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  231124             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  231125             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  231126             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  231127             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  231128             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  231129             :           being used with the AST File I/O mechanism.
  231130             :        */
  231131             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  231132             : 
  231133             :       // DQ (4/30/2006): Modified to be a const function.
  231134             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  231135             : 
  231136             :           This functions is part of general support for many possible tools to operate 
  231137             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  231138             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  231139             :           less than the set of pointers used by the AST file I/O. This is part of
  231140             :           work implemented by Andreas, and support tools such as the AST graph generation.
  231141             : 
  231142             :           \warning This function can return unexpected data members and thus the 
  231143             :                    order and the number of elements is unpredicable and subject 
  231144             :                    to change.
  231145             : 
  231146             :           \returns STL vector of pairs of SgNode* and strings
  231147             :        */
  231148             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  231149             : 
  231150             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  231151             : 
  231152             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  231153             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  231154             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  231155             : 
  231156             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  231157             :                    and subject to change.
  231158             :        */
  231159             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  231160             : 
  231161             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  231162             : 
  231163             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  231164             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  231165             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  231166             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  231167             : 
  231168             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  231169             : 
  231170             :           \returns long
  231171             :        */
  231172             :           virtual long getChildIndex( SgNode* childNode ) const override;
  231173             : 
  231174             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  231175             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  231176             :       /* \brief Constructor for use by AST File I/O Mechanism
  231177             : 
  231178             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  231179             :           which obtained via fast binary file I/O from disk.
  231180             :        */
  231181             :        // SgUnaryOp( SgUnaryOpStorageClass& source );
  231182             : 
  231183             : 
  231184             : 
  231185             : 
  231186             : 
  231187             :  // JH (10/24/2005): methods added to support the ast file IO
  231188             :     private:
  231189             : 
  231190             :       /* name AST Memory Allocation Support Functions
  231191             :           \brief Memory allocations support....
  231192             : 
  231193             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  231194             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  231195             :           and support the AST File I/O Mechanism.
  231196             :        */
  231197             :       /* */
  231198             : 
  231199             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  231200             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  231201             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  231202             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  231203             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  231204             :           a correspinding one in the AST_FILE_IO class!
  231205             :        */
  231206             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  231207             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  231208             :       /* \brief Typedef used for low level memory access.
  231209             :        */
  231210             :        // typedef unsigned char* TestType;
  231211             : 
  231212             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  231213             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  231214             :       /* \brief Typedef used to hold memory addresses as values.
  231215             :        */
  231216             :        // typedef unsigned long  AddressType;
  231217             : 
  231218             : 
  231219             : 
  231220             :        // necessary, to have direct access to the p_freepointer and the private methods !
  231221             :       /*! \brief friend class declaration to support AST File I/O */
  231222             :           friend class AST_FILE_IO;
  231223             : 
  231224             :       /*! \brief friend class declaration to support AST File I/O */
  231225             :           friend class SgUnaryOpStorageClass;
  231226             : 
  231227             :       /*! \brief friend class declaration to support AST File I/O */
  231228             :           friend class AstSpecificDataManagingClass;
  231229             : 
  231230             :       /*! \brief friend class declaration to support AST File I/O */
  231231             :           friend class AstSpecificDataManagingClassStorageClass;
  231232             :     public:
  231233             :       /*! \brief IR node constructor to support AST File I/O */
  231234             :           SgUnaryOp( const SgUnaryOpStorageClass& source );
  231235             : 
  231236             :  // private: // JJW hack
  231237             :        /*
  231238             :           name AST Memory Allocation Support Variables
  231239             :           Memory allocations support variables 
  231240             : 
  231241             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  231242             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  231243             :           and support the AST File I/O Mechanism.
  231244             :        */
  231245             :       /* */
  231246             : 
  231247             :     public:
  231248             : 
  231249             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  231250             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  231251             :       // virtual SgNode* addRegExpAttribute();
  231252             :       /*! \brief Support for AST matching using regular expression.
  231253             : 
  231254             :           This support is incomplete and the subject of current research to define 
  231255             :           RegEx trees to support inexact matching.
  231256             :        */
  231257             :           SgUnaryOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  231258             : 
  231259             : // *** COMMON CODE SECTION ENDS HERE ***
  231260             : 
  231261             : 
  231262             : // End of memberFunctionString
  231263             : // Start of memberFunctionString
  231264             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  231265             : 
  231266             :      // the generated cast function
  231267             :      // friend ROSE_DLL_API SgUnaryOp* isSgUnaryOp ( SgNode* s );
  231268             : 
  231269             :           typedef SgExpression base_node_type;
  231270             : 
  231271             : 
  231272             : // End of memberFunctionString
  231273             : // Start of memberFunctionString
  231274             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  231275             : 
  231276             :           void post_construction_initialization() override;
  231277             : 
  231278             : 
  231279             : // End of memberFunctionString
  231280             : 
  231281             :      public: 
  231282             :          SgExpression* get_operand_i() const;
  231283             :          void set_operand_i(SgExpression* operand_i);
  231284             : 
  231285             : 
  231286             :      public: 
  231287             :          SgUnaryOp::Sgop_mode get_mode() const;
  231288             :          void set_mode(SgUnaryOp::Sgop_mode mode);
  231289             : 
  231290             : 
  231291             :      public: 
  231292             :          virtual ~SgUnaryOp();
  231293             : 
  231294             : 
  231295             :      public: 
  231296             :          SgUnaryOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  231297             :          SgUnaryOp(SgExpression* operand_i, SgType* expression_type); 
  231298             : 
  231299             :     protected:
  231300             : // Start of memberFunctionString
  231301             : SgExpression* p_operand_i;
  231302             :           
  231303             : // End of memberFunctionString
  231304             : // Start of memberFunctionString
  231305             : SgType* p_expression_type;
  231306             :           
  231307             : // End of memberFunctionString
  231308             : // Start of memberFunctionString
  231309             : SgUnaryOp::Sgop_mode p_mode;
  231310             :           
  231311             : // End of memberFunctionString
  231312             : 
  231313             :     friend struct Rose::Traits::generated::describe_node_t<SgUnaryOp>;
  231314             :     friend struct Rose::Traits::generated::describe_field_t<SgUnaryOp, SgExpression*,&SgUnaryOp::p_operand_i>;
  231315             :     friend struct Rose::Traits::generated::describe_field_t<SgUnaryOp, SgType*,&SgUnaryOp::p_expression_type>;
  231316             :     friend struct Rose::Traits::generated::describe_field_t<SgUnaryOp, SgUnaryOp::Sgop_mode,&SgUnaryOp::p_mode>;
  231317             : 
  231318             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231319             : 
  231320             : 
  231321             :    };
  231322             : #endif
  231323             : 
  231324             : // postdeclarations for SgUnaryOp
  231325             : 
  231326             : /* #line 231327 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231327             : 
  231328             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  231329             : 
  231330             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231331             : 
  231332             : 
  231333             : /* #line 231334 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231334             : 
  231335             : 
  231336             : 
  231337             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231338             : 
  231339             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  231340             : //      This code is automatically generated for each 
  231341             : //      terminal and non-terminal within the defined 
  231342             : //      grammar.  There is a simple way to change the 
  231343             : //      code to fix bugs etc.  See the ROSE README file
  231344             : //      for directions.
  231345             : 
  231346             : // tps: (02/22/2010): Adding DLL export requirements
  231347             : #include "rosedll.h"
  231348             : 
  231349             : // predeclarations for SgExpressionRoot
  231350             : 
  231351             : /* #line 231352 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231352             : 
  231353             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  231354             : 
  231355             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231356             : 
  231357             : #if 1
  231358             : // Class Definition for SgExpressionRoot
  231359             : class ROSE_DLL_API SgExpressionRoot  : public SgUnaryOp
  231360             :    {
  231361             :      public:
  231362             : 
  231363             : 
  231364             : /* #line 231365 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231365             : 
  231366             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  231367             : // Start of memberFunctionString
  231368             : /* #line 249 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  231369             : 
  231370             :        // QY: 9/30/2004: removed stmt pointer inside exprRoot. Use parent pointer instead.
  231371             :        // void initialize_root (SgExpression* exp, SgStatement* stmt);
  231372             : 
  231373             :        // DQ (12/17/2006): Removed to clean up code (not used, I think).
  231374             :        // void set_statement( SgStatement* stmt );
  231375             :        // SgStatement* get_statement() const;
  231376             : 
  231377             : 
  231378             : 
  231379             : // End of memberFunctionString
  231380             : // Start of memberFunctionString
  231381             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  231382             : 
  231383             : // *** COMMON CODE SECTION BEGINS HERE ***
  231384             : 
  231385             :     public:
  231386             : 
  231387             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  231388             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  231389             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  231390             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  231391             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  231392             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  231393             : 
  231394             :       /*! \brief returns a string representing the class name */
  231395             :           virtual std::string class_name() const override;
  231396             : 
  231397             :       /*! \brief returns new style SageIII enum values */
  231398             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  231399             : 
  231400             :       /*! \brief static variant value */
  231401             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  231402             :        // static const VariantT static_variant = V_SgExpressionRoot;
  231403             :           enum { static_variant = V_SgExpressionRoot };
  231404             : 
  231405             :        /* the generated cast function */
  231406             :       /*! \brief Casts pointer from base class to derived class */
  231407             :           ROSE_DLL_API friend       SgExpressionRoot* isSgExpressionRoot(       SgNode * s );
  231408             : 
  231409             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  231410             :           ROSE_DLL_API friend const SgExpressionRoot* isSgExpressionRoot( const SgNode * s );
  231411             : 
  231412             :      // ******************************************
  231413             :      // * Memory Pool / New / Delete
  231414             :      // ******************************************
  231415             : 
  231416             :      public:
  231417             :           /// \private
  231418             :           static const unsigned pool_size; //
  231419             :           /// \private
  231420             :           static std::vector<unsigned char *> pools; //
  231421             :           /// \private
  231422             :           static SgExpressionRoot * next_node; // 
  231423             : 
  231424             :           /// \private
  231425             :           static unsigned long initializeStorageClassArray(SgExpressionRootStorageClass *); //
  231426             : 
  231427             :           /// \private
  231428             :           static void clearMemoryPool(); //
  231429             :           static void deleteMemoryPool(); //
  231430             : 
  231431             :           /// \private
  231432             :           static void extendMemoryPoolForFileIO(); //
  231433             : 
  231434             :           /// \private
  231435             :           static SgExpressionRoot * getPointerFromGlobalIndex(unsigned long); //
  231436             :           /// \private
  231437             :           static SgExpressionRoot * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  231438             : 
  231439             :           /// \private
  231440             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  231441             :           /// \private
  231442             :           static void resetValidFreepointers(); //
  231443             :           /// \private
  231444             :           static unsigned long getNumberOfLastValidPointer(); //
  231445             : 
  231446             : 
  231447             : #if defined(INLINE_FUNCTIONS)
  231448             :       /*! \brief returns pointer to newly allocated IR node */
  231449             :           inline void *operator new (size_t size);
  231450             : #else
  231451             :       /*! \brief returns pointer to newly allocated IR node */
  231452             :           void *operator new (size_t size);
  231453             : #endif
  231454             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  231455             :           void operator delete (void* pointer, size_t size);
  231456             : 
  231457             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  231458           0 :           void operator delete (void* pointer)
  231459             :              {
  231460             :             // This is the generated delete operator...
  231461           0 :                SgExpressionRoot::operator delete (pointer,sizeof(SgExpressionRoot));
  231462             :              }
  231463             : 
  231464             :       /*! \brief Returns the total number of IR nodes of this type */
  231465             :           static size_t numberOfNodes();
  231466             : 
  231467             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  231468             :           static size_t memoryUsage();
  231469             : 
  231470             :       // End of scope which started in IR nodes specific code 
  231471             :       /* */
  231472             : 
  231473             :       /* name Internal Functions
  231474             :           \brief Internal functions ... incomplete-documentation
  231475             : 
  231476             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231477             :           or by particularly knowledgeable users for specialized tools or applications.
  231478             : 
  231479             :           \internal We could not make these private because they are required by user for special purposes. And 
  231480             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  231481             :          
  231482             :        */
  231483             : 
  231484             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  231485             :        // overridden in every class by *generated* implementation
  231486             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  231487             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  231488             :        // MS: 06/28/02 container of names of variables or container indices 
  231489             :        // used used in the traversal to access AST successor nodes
  231490             :        // overridden in every class by *generated* implementation
  231491             :       /*! \brief container of names of variables or container indices used used in the traversal
  231492             :           to access AST successor nodes overridden in every class by *generated* implementation */
  231493             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  231494             : 
  231495             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  231496             :        // than all the vector copies. The implementation for these functions is generated for each class.
  231497             :       /*! \brief return number of children in the traversal successor list */
  231498             :           virtual size_t get_numberOfTraversalSuccessors() override;
  231499             :       /*! \brief index-based access to traversal successors by index number */
  231500             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  231501             :       /*! \brief index-based access to traversal successors by child node */
  231502             :           virtual size_t get_childIndex(SgNode *child) override;
  231503             : 
  231504             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  231505             :        // MS: 08/16/2002 method for generating RTI information
  231506             :       /*! \brief return C++ Runtime-Time-Information */
  231507             :           virtual RTIReturnType roseRTI() override;
  231508             : #endif
  231509             :       /* */
  231510             : 
  231511             : 
  231512             : 
  231513             :       /* name Deprecated Functions
  231514             :           \brief Deprecated functions ... incomplete-documentation
  231515             : 
  231516             :           These functions have been deprecated from use.
  231517             :        */
  231518             :       /* */
  231519             : 
  231520             :       /*! returns a C style string (char*) representing the class name */
  231521             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  231522             : 
  231523             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  231524             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  231525             : #if 0
  231526             :       /*! returns old style Sage II enum values */
  231527             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  231528             :       /*! returns old style Sage II enum values */
  231529             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  231530             : #endif
  231531             :       /* */
  231532             : 
  231533             : 
  231534             : 
  231535             : 
  231536             :      public:
  231537             :       /* name Traversal Support Functions
  231538             :           \brief Traversal support functions ... incomplete-documentation
  231539             : 
  231540             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231541             :           or by particularly knowledgable users for specialized tools or applications.
  231542             :        */
  231543             :       /* */
  231544             : 
  231545             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  231546             :        // (inferior to ROSE traversal mechanism, experimental).
  231547             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  231548             :        */
  231549             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  231550             : 
  231551             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  231552             :       /*! \brief support for the classic visitor pattern done in GoF */
  231553             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  231554             : 
  231555             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  231556             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  231557             :        */
  231558             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  231559             : 
  231560             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  231561             :        */
  231562             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  231563             : 
  231564             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  231565             :        // This traversal helps support internal tools that call static member functions.
  231566             :        // note: this function operates on the memory pools.
  231567             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  231568             :        */
  231569             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  231570             :       /* */
  231571             : 
  231572             : 
  231573             :      public:
  231574             :       /* name Memory Allocation Functions
  231575             :           \brief Memory allocations functions ... incomplete-documentation
  231576             : 
  231577             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231578             :           or by particularly knowledgable users for specialized tools or applications.
  231579             :        */
  231580             :       /* */
  231581             : 
  231582             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  231583             : 
  231584             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  231585             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  231586             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  231587             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  231588             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  231589             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  231590             :           being used with the AST File I/O mechanism.
  231591             :        */
  231592             :           virtual bool isInMemoryPool() override;
  231593             : 
  231594             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  231595             : 
  231596             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  231597             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  231598             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  231599             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  231600             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  231601             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  231602             :           being used with the AST File I/O mechanism.
  231603             :        */
  231604             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  231605             : 
  231606             :       // DQ (4/30/2006): Modified to be a const function.
  231607             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  231608             : 
  231609             :           This functions is part of general support for many possible tools to operate 
  231610             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  231611             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  231612             :           less than the set of pointers used by the AST file I/O. This is part of
  231613             :           work implemented by Andreas, and support tools such as the AST graph generation.
  231614             : 
  231615             :           \warning This function can return unexpected data members and thus the 
  231616             :                    order and the number of elements is unpredicable and subject 
  231617             :                    to change.
  231618             : 
  231619             :           \returns STL vector of pairs of SgNode* and strings
  231620             :        */
  231621             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  231622             : 
  231623             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  231624             : 
  231625             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  231626             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  231627             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  231628             : 
  231629             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  231630             :                    and subject to change.
  231631             :        */
  231632             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  231633             : 
  231634             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  231635             : 
  231636             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  231637             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  231638             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  231639             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  231640             : 
  231641             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  231642             : 
  231643             :           \returns long
  231644             :        */
  231645             :           virtual long getChildIndex( SgNode* childNode ) const override;
  231646             : 
  231647             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  231648             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  231649             :       /* \brief Constructor for use by AST File I/O Mechanism
  231650             : 
  231651             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  231652             :           which obtained via fast binary file I/O from disk.
  231653             :        */
  231654             :        // SgExpressionRoot( SgExpressionRootStorageClass& source );
  231655             : 
  231656             : 
  231657             : 
  231658             : 
  231659             : 
  231660             :  // JH (10/24/2005): methods added to support the ast file IO
  231661             :     private:
  231662             : 
  231663             :       /* name AST Memory Allocation Support Functions
  231664             :           \brief Memory allocations support....
  231665             : 
  231666             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  231667             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  231668             :           and support the AST File I/O Mechanism.
  231669             :        */
  231670             :       /* */
  231671             : 
  231672             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  231673             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  231674             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  231675             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  231676             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  231677             :           a correspinding one in the AST_FILE_IO class!
  231678             :        */
  231679             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  231680             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  231681             :       /* \brief Typedef used for low level memory access.
  231682             :        */
  231683             :        // typedef unsigned char* TestType;
  231684             : 
  231685             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  231686             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  231687             :       /* \brief Typedef used to hold memory addresses as values.
  231688             :        */
  231689             :        // typedef unsigned long  AddressType;
  231690             : 
  231691             : 
  231692             : 
  231693             :        // necessary, to have direct access to the p_freepointer and the private methods !
  231694             :       /*! \brief friend class declaration to support AST File I/O */
  231695             :           friend class AST_FILE_IO;
  231696             : 
  231697             :       /*! \brief friend class declaration to support AST File I/O */
  231698             :           friend class SgExpressionRootStorageClass;
  231699             : 
  231700             :       /*! \brief friend class declaration to support AST File I/O */
  231701             :           friend class AstSpecificDataManagingClass;
  231702             : 
  231703             :       /*! \brief friend class declaration to support AST File I/O */
  231704             :           friend class AstSpecificDataManagingClassStorageClass;
  231705             :     public:
  231706             :       /*! \brief IR node constructor to support AST File I/O */
  231707             :           SgExpressionRoot( const SgExpressionRootStorageClass& source );
  231708             : 
  231709             :  // private: // JJW hack
  231710             :        /*
  231711             :           name AST Memory Allocation Support Variables
  231712             :           Memory allocations support variables 
  231713             : 
  231714             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  231715             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  231716             :           and support the AST File I/O Mechanism.
  231717             :        */
  231718             :       /* */
  231719             : 
  231720             :     public:
  231721             : 
  231722             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  231723             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  231724             :       // virtual SgNode* addRegExpAttribute();
  231725             :       /*! \brief Support for AST matching using regular expression.
  231726             : 
  231727             :           This support is incomplete and the subject of current research to define 
  231728             :           RegEx trees to support inexact matching.
  231729             :        */
  231730             :           SgExpressionRoot* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  231731             : 
  231732             : // *** COMMON CODE SECTION ENDS HERE ***
  231733             : 
  231734             : 
  231735             : // End of memberFunctionString
  231736             : // Start of memberFunctionString
  231737             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  231738             : 
  231739             :      // the generated cast function
  231740             :      // friend ROSE_DLL_API SgExpressionRoot* isSgExpressionRoot ( SgNode* s );
  231741             : 
  231742             :           typedef SgUnaryOp base_node_type;
  231743             : 
  231744             : 
  231745             : // End of memberFunctionString
  231746             : // Start of memberFunctionString
  231747             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  231748             : 
  231749             :           void post_construction_initialization() override;
  231750             : 
  231751             : 
  231752             : // End of memberFunctionString
  231753             : 
  231754             : 
  231755             :      public: 
  231756             :          virtual ~SgExpressionRoot();
  231757             : 
  231758             : 
  231759             :      public: 
  231760             :          SgExpressionRoot(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  231761             :          SgExpressionRoot(SgExpression* operand_i, SgType* expression_type); 
  231762             : 
  231763             :     protected:
  231764             : 
  231765             :     friend struct Rose::Traits::generated::describe_node_t<SgExpressionRoot>;
  231766             : 
  231767             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231768             : 
  231769             : 
  231770             :    };
  231771             : #endif
  231772             : 
  231773             : // postdeclarations for SgExpressionRoot
  231774             : 
  231775             : /* #line 231776 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231776             : 
  231777             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  231778             : 
  231779             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231780             : 
  231781             : 
  231782             : /* #line 231783 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231783             : 
  231784             : 
  231785             : 
  231786             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231787             : 
  231788             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  231789             : //      This code is automatically generated for each 
  231790             : //      terminal and non-terminal within the defined 
  231791             : //      grammar.  There is a simple way to change the 
  231792             : //      code to fix bugs etc.  See the ROSE README file
  231793             : //      for directions.
  231794             : 
  231795             : // tps: (02/22/2010): Adding DLL export requirements
  231796             : #include "rosedll.h"
  231797             : 
  231798             : // predeclarations for SgMinusOp
  231799             : 
  231800             : /* #line 231801 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231801             : 
  231802             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  231803             : 
  231804             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  231805             : 
  231806             : #if 1
  231807             : // Class Definition for SgMinusOp
  231808             : class ROSE_DLL_API SgMinusOp  : public SgUnaryOp
  231809             :    {
  231810             :      public:
  231811             : 
  231812             : 
  231813             : /* #line 231814 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  231814             : 
  231815             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  231816             : // Start of memberFunctionString
  231817             : /* #line 968 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  231818             : 
  231819             : 
  231820             : 
  231821             : // End of memberFunctionString
  231822             : // Start of memberFunctionString
  231823             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  231824             : 
  231825             : // *** COMMON CODE SECTION BEGINS HERE ***
  231826             : 
  231827             :     public:
  231828             : 
  231829             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  231830             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  231831             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  231832             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  231833             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  231834             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  231835             : 
  231836             :       /*! \brief returns a string representing the class name */
  231837             :           virtual std::string class_name() const override;
  231838             : 
  231839             :       /*! \brief returns new style SageIII enum values */
  231840             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  231841             : 
  231842             :       /*! \brief static variant value */
  231843             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  231844             :        // static const VariantT static_variant = V_SgMinusOp;
  231845             :           enum { static_variant = V_SgMinusOp };
  231846             : 
  231847             :        /* the generated cast function */
  231848             :       /*! \brief Casts pointer from base class to derived class */
  231849             :           ROSE_DLL_API friend       SgMinusOp* isSgMinusOp(       SgNode * s );
  231850             : 
  231851             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  231852             :           ROSE_DLL_API friend const SgMinusOp* isSgMinusOp( const SgNode * s );
  231853             : 
  231854             :      // ******************************************
  231855             :      // * Memory Pool / New / Delete
  231856             :      // ******************************************
  231857             : 
  231858             :      public:
  231859             :           /// \private
  231860             :           static const unsigned pool_size; //
  231861             :           /// \private
  231862             :           static std::vector<unsigned char *> pools; //
  231863             :           /// \private
  231864             :           static SgMinusOp * next_node; // 
  231865             : 
  231866             :           /// \private
  231867             :           static unsigned long initializeStorageClassArray(SgMinusOpStorageClass *); //
  231868             : 
  231869             :           /// \private
  231870             :           static void clearMemoryPool(); //
  231871             :           static void deleteMemoryPool(); //
  231872             : 
  231873             :           /// \private
  231874             :           static void extendMemoryPoolForFileIO(); //
  231875             : 
  231876             :           /// \private
  231877             :           static SgMinusOp * getPointerFromGlobalIndex(unsigned long); //
  231878             :           /// \private
  231879             :           static SgMinusOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  231880             : 
  231881             :           /// \private
  231882             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  231883             :           /// \private
  231884             :           static void resetValidFreepointers(); //
  231885             :           /// \private
  231886             :           static unsigned long getNumberOfLastValidPointer(); //
  231887             : 
  231888             : 
  231889             : #if defined(INLINE_FUNCTIONS)
  231890             :       /*! \brief returns pointer to newly allocated IR node */
  231891             :           inline void *operator new (size_t size);
  231892             : #else
  231893             :       /*! \brief returns pointer to newly allocated IR node */
  231894             :           void *operator new (size_t size);
  231895             : #endif
  231896             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  231897             :           void operator delete (void* pointer, size_t size);
  231898             : 
  231899             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  231900         115 :           void operator delete (void* pointer)
  231901             :              {
  231902             :             // This is the generated delete operator...
  231903         115 :                SgMinusOp::operator delete (pointer,sizeof(SgMinusOp));
  231904             :              }
  231905             : 
  231906             :       /*! \brief Returns the total number of IR nodes of this type */
  231907             :           static size_t numberOfNodes();
  231908             : 
  231909             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  231910             :           static size_t memoryUsage();
  231911             : 
  231912             :       // End of scope which started in IR nodes specific code 
  231913             :       /* */
  231914             : 
  231915             :       /* name Internal Functions
  231916             :           \brief Internal functions ... incomplete-documentation
  231917             : 
  231918             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231919             :           or by particularly knowledgeable users for specialized tools or applications.
  231920             : 
  231921             :           \internal We could not make these private because they are required by user for special purposes. And 
  231922             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  231923             :          
  231924             :        */
  231925             : 
  231926             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  231927             :        // overridden in every class by *generated* implementation
  231928             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  231929             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  231930             :        // MS: 06/28/02 container of names of variables or container indices 
  231931             :        // used used in the traversal to access AST successor nodes
  231932             :        // overridden in every class by *generated* implementation
  231933             :       /*! \brief container of names of variables or container indices used used in the traversal
  231934             :           to access AST successor nodes overridden in every class by *generated* implementation */
  231935             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  231936             : 
  231937             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  231938             :        // than all the vector copies. The implementation for these functions is generated for each class.
  231939             :       /*! \brief return number of children in the traversal successor list */
  231940             :           virtual size_t get_numberOfTraversalSuccessors() override;
  231941             :       /*! \brief index-based access to traversal successors by index number */
  231942             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  231943             :       /*! \brief index-based access to traversal successors by child node */
  231944             :           virtual size_t get_childIndex(SgNode *child) override;
  231945             : 
  231946             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  231947             :        // MS: 08/16/2002 method for generating RTI information
  231948             :       /*! \brief return C++ Runtime-Time-Information */
  231949             :           virtual RTIReturnType roseRTI() override;
  231950             : #endif
  231951             :       /* */
  231952             : 
  231953             : 
  231954             : 
  231955             :       /* name Deprecated Functions
  231956             :           \brief Deprecated functions ... incomplete-documentation
  231957             : 
  231958             :           These functions have been deprecated from use.
  231959             :        */
  231960             :       /* */
  231961             : 
  231962             :       /*! returns a C style string (char*) representing the class name */
  231963             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  231964             : 
  231965             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  231966             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  231967             : #if 0
  231968             :       /*! returns old style Sage II enum values */
  231969             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  231970             :       /*! returns old style Sage II enum values */
  231971             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  231972             : #endif
  231973             :       /* */
  231974             : 
  231975             : 
  231976             : 
  231977             : 
  231978             :      public:
  231979             :       /* name Traversal Support Functions
  231980             :           \brief Traversal support functions ... incomplete-documentation
  231981             : 
  231982             :           These functions have been made public as part of the design, but they are suggested for internal use 
  231983             :           or by particularly knowledgable users for specialized tools or applications.
  231984             :        */
  231985             :       /* */
  231986             : 
  231987             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  231988             :        // (inferior to ROSE traversal mechanism, experimental).
  231989             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  231990             :        */
  231991             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  231992             : 
  231993             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  231994             :       /*! \brief support for the classic visitor pattern done in GoF */
  231995             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  231996             : 
  231997             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  231998             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  231999             :        */
  232000             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  232001             : 
  232002             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  232003             :        */
  232004             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  232005             : 
  232006             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  232007             :        // This traversal helps support internal tools that call static member functions.
  232008             :        // note: this function operates on the memory pools.
  232009             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  232010             :        */
  232011             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  232012             :       /* */
  232013             : 
  232014             : 
  232015             :      public:
  232016             :       /* name Memory Allocation Functions
  232017             :           \brief Memory allocations functions ... incomplete-documentation
  232018             : 
  232019             :           These functions have been made public as part of the design, but they are suggested for internal use 
  232020             :           or by particularly knowledgable users for specialized tools or applications.
  232021             :        */
  232022             :       /* */
  232023             : 
  232024             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  232025             : 
  232026             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  232027             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  232028             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  232029             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  232030             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  232031             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  232032             :           being used with the AST File I/O mechanism.
  232033             :        */
  232034             :           virtual bool isInMemoryPool() override;
  232035             : 
  232036             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  232037             : 
  232038             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  232039             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  232040             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  232041             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  232042             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  232043             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  232044             :           being used with the AST File I/O mechanism.
  232045             :        */
  232046             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  232047             : 
  232048             :       // DQ (4/30/2006): Modified to be a const function.
  232049             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  232050             : 
  232051             :           This functions is part of general support for many possible tools to operate 
  232052             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  232053             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  232054             :           less than the set of pointers used by the AST file I/O. This is part of
  232055             :           work implemented by Andreas, and support tools such as the AST graph generation.
  232056             : 
  232057             :           \warning This function can return unexpected data members and thus the 
  232058             :                    order and the number of elements is unpredicable and subject 
  232059             :                    to change.
  232060             : 
  232061             :           \returns STL vector of pairs of SgNode* and strings
  232062             :        */
  232063             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  232064             : 
  232065             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  232066             : 
  232067             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  232068             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  232069             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  232070             : 
  232071             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  232072             :                    and subject to change.
  232073             :        */
  232074             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  232075             : 
  232076             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  232077             : 
  232078             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  232079             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  232080             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  232081             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  232082             : 
  232083             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  232084             : 
  232085             :           \returns long
  232086             :        */
  232087             :           virtual long getChildIndex( SgNode* childNode ) const override;
  232088             : 
  232089             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  232090             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  232091             :       /* \brief Constructor for use by AST File I/O Mechanism
  232092             : 
  232093             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  232094             :           which obtained via fast binary file I/O from disk.
  232095             :        */
  232096             :        // SgMinusOp( SgMinusOpStorageClass& source );
  232097             : 
  232098             : 
  232099             : 
  232100             : 
  232101             : 
  232102             :  // JH (10/24/2005): methods added to support the ast file IO
  232103             :     private:
  232104             : 
  232105             :       /* name AST Memory Allocation Support Functions
  232106             :           \brief Memory allocations support....
  232107             : 
  232108             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  232109             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  232110             :           and support the AST File I/O Mechanism.
  232111             :        */
  232112             :       /* */
  232113             : 
  232114             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  232115             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  232116             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  232117             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  232118             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  232119             :           a correspinding one in the AST_FILE_IO class!
  232120             :        */
  232121             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  232122             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  232123             :       /* \brief Typedef used for low level memory access.
  232124             :        */
  232125             :        // typedef unsigned char* TestType;
  232126             : 
  232127             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  232128             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  232129             :       /* \brief Typedef used to hold memory addresses as values.
  232130             :        */
  232131             :        // typedef unsigned long  AddressType;
  232132             : 
  232133             : 
  232134             : 
  232135             :        // necessary, to have direct access to the p_freepointer and the private methods !
  232136             :       /*! \brief friend class declaration to support AST File I/O */
  232137             :           friend class AST_FILE_IO;
  232138             : 
  232139             :       /*! \brief friend class declaration to support AST File I/O */
  232140             :           friend class SgMinusOpStorageClass;
  232141             : 
  232142             :       /*! \brief friend class declaration to support AST File I/O */
  232143             :           friend class AstSpecificDataManagingClass;
  232144             : 
  232145             :       /*! \brief friend class declaration to support AST File I/O */
  232146             :           friend class AstSpecificDataManagingClassStorageClass;
  232147             :     public:
  232148             :       /*! \brief IR node constructor to support AST File I/O */
  232149             :           SgMinusOp( const SgMinusOpStorageClass& source );
  232150             : 
  232151             :  // private: // JJW hack
  232152             :        /*
  232153             :           name AST Memory Allocation Support Variables
  232154             :           Memory allocations support variables 
  232155             : 
  232156             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  232157             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  232158             :           and support the AST File I/O Mechanism.
  232159             :        */
  232160             :       /* */
  232161             : 
  232162             :     public:
  232163             : 
  232164             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  232165             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  232166             :       // virtual SgNode* addRegExpAttribute();
  232167             :       /*! \brief Support for AST matching using regular expression.
  232168             : 
  232169             :           This support is incomplete and the subject of current research to define 
  232170             :           RegEx trees to support inexact matching.
  232171             :        */
  232172             :           SgMinusOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  232173             : 
  232174             : // *** COMMON CODE SECTION ENDS HERE ***
  232175             : 
  232176             : 
  232177             : // End of memberFunctionString
  232178             : // Start of memberFunctionString
  232179             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  232180             : 
  232181             :      // the generated cast function
  232182             :      // friend ROSE_DLL_API SgMinusOp* isSgMinusOp ( SgNode* s );
  232183             : 
  232184             :           typedef SgUnaryOp base_node_type;
  232185             : 
  232186             : 
  232187             : // End of memberFunctionString
  232188             : // Start of memberFunctionString
  232189             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  232190             : 
  232191             :           void post_construction_initialization() override;
  232192             : 
  232193             : 
  232194             : // End of memberFunctionString
  232195             : // Start of memberFunctionString
  232196             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  232197             : 
  232198           0 :           int precedence() const override { return 15; }
  232199             : 
  232200             : 
  232201             : // End of memberFunctionString
  232202             : 
  232203             : 
  232204             :      public: 
  232205             :          virtual ~SgMinusOp();
  232206             : 
  232207             : 
  232208             :      public: 
  232209             :          SgMinusOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  232210             :          SgMinusOp(SgExpression* operand_i, SgType* expression_type); 
  232211             : 
  232212             :     protected:
  232213             : 
  232214             :     friend struct Rose::Traits::generated::describe_node_t<SgMinusOp>;
  232215             : 
  232216             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232217             : 
  232218             : 
  232219             :    };
  232220             : #endif
  232221             : 
  232222             : // postdeclarations for SgMinusOp
  232223             : 
  232224             : /* #line 232225 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232225             : 
  232226             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  232227             : 
  232228             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232229             : 
  232230             : 
  232231             : /* #line 232232 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232232             : 
  232233             : 
  232234             : 
  232235             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232236             : 
  232237             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  232238             : //      This code is automatically generated for each 
  232239             : //      terminal and non-terminal within the defined 
  232240             : //      grammar.  There is a simple way to change the 
  232241             : //      code to fix bugs etc.  See the ROSE README file
  232242             : //      for directions.
  232243             : 
  232244             : // tps: (02/22/2010): Adding DLL export requirements
  232245             : #include "rosedll.h"
  232246             : 
  232247             : // predeclarations for SgUnaryAddOp
  232248             : 
  232249             : /* #line 232250 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232250             : 
  232251             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  232252             : 
  232253             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232254             : 
  232255             : #if 1
  232256             : // Class Definition for SgUnaryAddOp
  232257             : class ROSE_DLL_API SgUnaryAddOp  : public SgUnaryOp
  232258             :    {
  232259             :      public:
  232260             : 
  232261             : 
  232262             : /* #line 232263 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232263             : 
  232264             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  232265             : // Start of memberFunctionString
  232266             : /* #line 974 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  232267             : 
  232268             : 
  232269             : 
  232270             : // End of memberFunctionString
  232271             : // Start of memberFunctionString
  232272             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  232273             : 
  232274             : // *** COMMON CODE SECTION BEGINS HERE ***
  232275             : 
  232276             :     public:
  232277             : 
  232278             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  232279             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  232280             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  232281             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  232282             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  232283             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  232284             : 
  232285             :       /*! \brief returns a string representing the class name */
  232286             :           virtual std::string class_name() const override;
  232287             : 
  232288             :       /*! \brief returns new style SageIII enum values */
  232289             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  232290             : 
  232291             :       /*! \brief static variant value */
  232292             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  232293             :        // static const VariantT static_variant = V_SgUnaryAddOp;
  232294             :           enum { static_variant = V_SgUnaryAddOp };
  232295             : 
  232296             :        /* the generated cast function */
  232297             :       /*! \brief Casts pointer from base class to derived class */
  232298             :           ROSE_DLL_API friend       SgUnaryAddOp* isSgUnaryAddOp(       SgNode * s );
  232299             : 
  232300             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  232301             :           ROSE_DLL_API friend const SgUnaryAddOp* isSgUnaryAddOp( const SgNode * s );
  232302             : 
  232303             :      // ******************************************
  232304             :      // * Memory Pool / New / Delete
  232305             :      // ******************************************
  232306             : 
  232307             :      public:
  232308             :           /// \private
  232309             :           static const unsigned pool_size; //
  232310             :           /// \private
  232311             :           static std::vector<unsigned char *> pools; //
  232312             :           /// \private
  232313             :           static SgUnaryAddOp * next_node; // 
  232314             : 
  232315             :           /// \private
  232316             :           static unsigned long initializeStorageClassArray(SgUnaryAddOpStorageClass *); //
  232317             : 
  232318             :           /// \private
  232319             :           static void clearMemoryPool(); //
  232320             :           static void deleteMemoryPool(); //
  232321             : 
  232322             :           /// \private
  232323             :           static void extendMemoryPoolForFileIO(); //
  232324             : 
  232325             :           /// \private
  232326             :           static SgUnaryAddOp * getPointerFromGlobalIndex(unsigned long); //
  232327             :           /// \private
  232328             :           static SgUnaryAddOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  232329             : 
  232330             :           /// \private
  232331             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  232332             :           /// \private
  232333             :           static void resetValidFreepointers(); //
  232334             :           /// \private
  232335             :           static unsigned long getNumberOfLastValidPointer(); //
  232336             : 
  232337             : 
  232338             : #if defined(INLINE_FUNCTIONS)
  232339             :       /*! \brief returns pointer to newly allocated IR node */
  232340             :           inline void *operator new (size_t size);
  232341             : #else
  232342             :       /*! \brief returns pointer to newly allocated IR node */
  232343             :           void *operator new (size_t size);
  232344             : #endif
  232345             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  232346             :           void operator delete (void* pointer, size_t size);
  232347             : 
  232348             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  232349           0 :           void operator delete (void* pointer)
  232350             :              {
  232351             :             // This is the generated delete operator...
  232352           0 :                SgUnaryAddOp::operator delete (pointer,sizeof(SgUnaryAddOp));
  232353             :              }
  232354             : 
  232355             :       /*! \brief Returns the total number of IR nodes of this type */
  232356             :           static size_t numberOfNodes();
  232357             : 
  232358             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  232359             :           static size_t memoryUsage();
  232360             : 
  232361             :       // End of scope which started in IR nodes specific code 
  232362             :       /* */
  232363             : 
  232364             :       /* name Internal Functions
  232365             :           \brief Internal functions ... incomplete-documentation
  232366             : 
  232367             :           These functions have been made public as part of the design, but they are suggested for internal use 
  232368             :           or by particularly knowledgeable users for specialized tools or applications.
  232369             : 
  232370             :           \internal We could not make these private because they are required by user for special purposes. And 
  232371             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  232372             :          
  232373             :        */
  232374             : 
  232375             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  232376             :        // overridden in every class by *generated* implementation
  232377             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  232378             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  232379             :        // MS: 06/28/02 container of names of variables or container indices 
  232380             :        // used used in the traversal to access AST successor nodes
  232381             :        // overridden in every class by *generated* implementation
  232382             :       /*! \brief container of names of variables or container indices used used in the traversal
  232383             :           to access AST successor nodes overridden in every class by *generated* implementation */
  232384             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  232385             : 
  232386             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  232387             :        // than all the vector copies. The implementation for these functions is generated for each class.
  232388             :       /*! \brief return number of children in the traversal successor list */
  232389             :           virtual size_t get_numberOfTraversalSuccessors() override;
  232390             :       /*! \brief index-based access to traversal successors by index number */
  232391             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  232392             :       /*! \brief index-based access to traversal successors by child node */
  232393             :           virtual size_t get_childIndex(SgNode *child) override;
  232394             : 
  232395             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  232396             :        // MS: 08/16/2002 method for generating RTI information
  232397             :       /*! \brief return C++ Runtime-Time-Information */
  232398             :           virtual RTIReturnType roseRTI() override;
  232399             : #endif
  232400             :       /* */
  232401             : 
  232402             : 
  232403             : 
  232404             :       /* name Deprecated Functions
  232405             :           \brief Deprecated functions ... incomplete-documentation
  232406             : 
  232407             :           These functions have been deprecated from use.
  232408             :        */
  232409             :       /* */
  232410             : 
  232411             :       /*! returns a C style string (char*) representing the class name */
  232412             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  232413             : 
  232414             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  232415             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  232416             : #if 0
  232417             :       /*! returns old style Sage II enum values */
  232418             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  232419             :       /*! returns old style Sage II enum values */
  232420             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  232421             : #endif
  232422             :       /* */
  232423             : 
  232424             : 
  232425             : 
  232426             : 
  232427             :      public:
  232428             :       /* name Traversal Support Functions
  232429             :           \brief Traversal support functions ... incomplete-documentation
  232430             : 
  232431             :           These functions have been made public as part of the design, but they are suggested for internal use 
  232432             :           or by particularly knowledgable users for specialized tools or applications.
  232433             :        */
  232434             :       /* */
  232435             : 
  232436             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  232437             :        // (inferior to ROSE traversal mechanism, experimental).
  232438             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  232439             :        */
  232440             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  232441             : 
  232442             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  232443             :       /*! \brief support for the classic visitor pattern done in GoF */
  232444             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  232445             : 
  232446             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  232447             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  232448             :        */
  232449             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  232450             : 
  232451             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  232452             :        */
  232453             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  232454             : 
  232455             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  232456             :        // This traversal helps support internal tools that call static member functions.
  232457             :        // note: this function operates on the memory pools.
  232458             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  232459             :        */
  232460             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  232461             :       /* */
  232462             : 
  232463             : 
  232464             :      public:
  232465             :       /* name Memory Allocation Functions
  232466             :           \brief Memory allocations functions ... incomplete-documentation
  232467             : 
  232468             :           These functions have been made public as part of the design, but they are suggested for internal use 
  232469             :           or by particularly knowledgable users for specialized tools or applications.
  232470             :        */
  232471             :       /* */
  232472             : 
  232473             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  232474             : 
  232475             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  232476             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  232477             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  232478             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  232479             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  232480             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  232481             :           being used with the AST File I/O mechanism.
  232482             :        */
  232483             :           virtual bool isInMemoryPool() override;
  232484             : 
  232485             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  232486             : 
  232487             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  232488             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  232489             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  232490             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  232491             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  232492             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  232493             :           being used with the AST File I/O mechanism.
  232494             :        */
  232495             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  232496             : 
  232497             :       // DQ (4/30/2006): Modified to be a const function.
  232498             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  232499             : 
  232500             :           This functions is part of general support for many possible tools to operate 
  232501             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  232502             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  232503             :           less than the set of pointers used by the AST file I/O. This is part of
  232504             :           work implemented by Andreas, and support tools such as the AST graph generation.
  232505             : 
  232506             :           \warning This function can return unexpected data members and thus the 
  232507             :                    order and the number of elements is unpredicable and subject 
  232508             :                    to change.
  232509             : 
  232510             :           \returns STL vector of pairs of SgNode* and strings
  232511             :        */
  232512             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  232513             : 
  232514             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  232515             : 
  232516             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  232517             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  232518             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  232519             : 
  232520             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  232521             :                    and subject to change.
  232522             :        */
  232523             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  232524             : 
  232525             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  232526             : 
  232527             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  232528             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  232529             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  232530             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  232531             : 
  232532             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  232533             : 
  232534             :           \returns long
  232535             :        */
  232536             :           virtual long getChildIndex( SgNode* childNode ) const override;
  232537             : 
  232538             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  232539             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  232540             :       /* \brief Constructor for use by AST File I/O Mechanism
  232541             : 
  232542             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  232543             :           which obtained via fast binary file I/O from disk.
  232544             :        */
  232545             :        // SgUnaryAddOp( SgUnaryAddOpStorageClass& source );
  232546             : 
  232547             : 
  232548             : 
  232549             : 
  232550             : 
  232551             :  // JH (10/24/2005): methods added to support the ast file IO
  232552             :     private:
  232553             : 
  232554             :       /* name AST Memory Allocation Support Functions
  232555             :           \brief Memory allocations support....
  232556             : 
  232557             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  232558             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  232559             :           and support the AST File I/O Mechanism.
  232560             :        */
  232561             :       /* */
  232562             : 
  232563             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  232564             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  232565             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  232566             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  232567             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  232568             :           a correspinding one in the AST_FILE_IO class!
  232569             :        */
  232570             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  232571             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  232572             :       /* \brief Typedef used for low level memory access.
  232573             :        */
  232574             :        // typedef unsigned char* TestType;
  232575             : 
  232576             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  232577             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  232578             :       /* \brief Typedef used to hold memory addresses as values.
  232579             :        */
  232580             :        // typedef unsigned long  AddressType;
  232581             : 
  232582             : 
  232583             : 
  232584             :        // necessary, to have direct access to the p_freepointer and the private methods !
  232585             :       /*! \brief friend class declaration to support AST File I/O */
  232586             :           friend class AST_FILE_IO;
  232587             : 
  232588             :       /*! \brief friend class declaration to support AST File I/O */
  232589             :           friend class SgUnaryAddOpStorageClass;
  232590             : 
  232591             :       /*! \brief friend class declaration to support AST File I/O */
  232592             :           friend class AstSpecificDataManagingClass;
  232593             : 
  232594             :       /*! \brief friend class declaration to support AST File I/O */
  232595             :           friend class AstSpecificDataManagingClassStorageClass;
  232596             :     public:
  232597             :       /*! \brief IR node constructor to support AST File I/O */
  232598             :           SgUnaryAddOp( const SgUnaryAddOpStorageClass& source );
  232599             : 
  232600             :  // private: // JJW hack
  232601             :        /*
  232602             :           name AST Memory Allocation Support Variables
  232603             :           Memory allocations support variables 
  232604             : 
  232605             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  232606             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  232607             :           and support the AST File I/O Mechanism.
  232608             :        */
  232609             :       /* */
  232610             : 
  232611             :     public:
  232612             : 
  232613             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  232614             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  232615             :       // virtual SgNode* addRegExpAttribute();
  232616             :       /*! \brief Support for AST matching using regular expression.
  232617             : 
  232618             :           This support is incomplete and the subject of current research to define 
  232619             :           RegEx trees to support inexact matching.
  232620             :        */
  232621             :           SgUnaryAddOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  232622             : 
  232623             : // *** COMMON CODE SECTION ENDS HERE ***
  232624             : 
  232625             : 
  232626             : // End of memberFunctionString
  232627             : // Start of memberFunctionString
  232628             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  232629             : 
  232630             :      // the generated cast function
  232631             :      // friend ROSE_DLL_API SgUnaryAddOp* isSgUnaryAddOp ( SgNode* s );
  232632             : 
  232633             :           typedef SgUnaryOp base_node_type;
  232634             : 
  232635             : 
  232636             : // End of memberFunctionString
  232637             : // Start of memberFunctionString
  232638             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  232639             : 
  232640             :           void post_construction_initialization() override;
  232641             : 
  232642             : 
  232643             : // End of memberFunctionString
  232644             : // Start of memberFunctionString
  232645             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  232646             : 
  232647           0 :           int precedence() const override { return 15; }
  232648             : 
  232649             : 
  232650             : // End of memberFunctionString
  232651             : 
  232652             : 
  232653             :      public: 
  232654             :          virtual ~SgUnaryAddOp();
  232655             : 
  232656             : 
  232657             :      public: 
  232658             :          SgUnaryAddOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  232659             :          SgUnaryAddOp(SgExpression* operand_i, SgType* expression_type); 
  232660             : 
  232661             :     protected:
  232662             : 
  232663             :     friend struct Rose::Traits::generated::describe_node_t<SgUnaryAddOp>;
  232664             : 
  232665             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232666             : 
  232667             : 
  232668             :    };
  232669             : #endif
  232670             : 
  232671             : // postdeclarations for SgUnaryAddOp
  232672             : 
  232673             : /* #line 232674 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232674             : 
  232675             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  232676             : 
  232677             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232678             : 
  232679             : 
  232680             : /* #line 232681 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232681             : 
  232682             : 
  232683             : 
  232684             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232685             : 
  232686             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  232687             : //      This code is automatically generated for each 
  232688             : //      terminal and non-terminal within the defined 
  232689             : //      grammar.  There is a simple way to change the 
  232690             : //      code to fix bugs etc.  See the ROSE README file
  232691             : //      for directions.
  232692             : 
  232693             : // tps: (02/22/2010): Adding DLL export requirements
  232694             : #include "rosedll.h"
  232695             : 
  232696             : // predeclarations for SgNotOp
  232697             : 
  232698             : /* #line 232699 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232699             : 
  232700             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  232701             : 
  232702             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  232703             : 
  232704             : #if 1
  232705             : // Class Definition for SgNotOp
  232706             : class ROSE_DLL_API SgNotOp  : public SgUnaryOp
  232707             :    {
  232708             :      public:
  232709             : 
  232710             : 
  232711             : /* #line 232712 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  232712             : 
  232713             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  232714             : // Start of memberFunctionString
  232715             : /* #line 1122 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  232716             : 
  232717             :           SgType* get_type() const override;
  232718             : 
  232719             : 
  232720             : 
  232721             : // End of memberFunctionString
  232722             : // Start of memberFunctionString
  232723             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  232724             : 
  232725             : // *** COMMON CODE SECTION BEGINS HERE ***
  232726             : 
  232727             :     public:
  232728             : 
  232729             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  232730             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  232731             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  232732             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  232733             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  232734             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  232735             : 
  232736             :       /*! \brief returns a string representing the class name */
  232737             :           virtual std::string class_name() const override;
  232738             : 
  232739             :       /*! \brief returns new style SageIII enum values */
  232740             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  232741             : 
  232742             :       /*! \brief static variant value */
  232743             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  232744             :        // static const VariantT static_variant = V_SgNotOp;
  232745             :           enum { static_variant = V_SgNotOp };
  232746             : 
  232747             :        /* the generated cast function */
  232748             :       /*! \brief Casts pointer from base class to derived class */
  232749             :           ROSE_DLL_API friend       SgNotOp* isSgNotOp(       SgNode * s );
  232750             : 
  232751             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  232752             :           ROSE_DLL_API friend const SgNotOp* isSgNotOp( const SgNode * s );
  232753             : 
  232754             :      // ******************************************
  232755             :      // * Memory Pool / New / Delete
  232756             :      // ******************************************
  232757             : 
  232758             :      public:
  232759             :           /// \private
  232760             :           static const unsigned pool_size; //
  232761             :           /// \private
  232762             :           static std::vector<unsigned char *> pools; //
  232763             :           /// \private
  232764             :           static SgNotOp * next_node; // 
  232765             : 
  232766             :           /// \private
  232767             :           static unsigned long initializeStorageClassArray(SgNotOpStorageClass *); //
  232768             : 
  232769             :           /// \private
  232770             :           static void clearMemoryPool(); //
  232771             :           static void deleteMemoryPool(); //
  232772             : 
  232773             :           /// \private
  232774             :           static void extendMemoryPoolForFileIO(); //
  232775             : 
  232776             :           /// \private
  232777             :           static SgNotOp * getPointerFromGlobalIndex(unsigned long); //
  232778             :           /// \private
  232779             :           static SgNotOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  232780             : 
  232781             :           /// \private
  232782             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  232783             :           /// \private
  232784             :           static void resetValidFreepointers(); //
  232785             :           /// \private
  232786             :           static unsigned long getNumberOfLastValidPointer(); //
  232787             : 
  232788             : 
  232789             : #if defined(INLINE_FUNCTIONS)
  232790             :       /*! \brief returns pointer to newly allocated IR node */
  232791             :           inline void *operator new (size_t size);
  232792             : #else
  232793             :       /*! \brief returns pointer to newly allocated IR node */
  232794             :           void *operator new (size_t size);
  232795             : #endif
  232796             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  232797             :           void operator delete (void* pointer, size_t size);
  232798             : 
  232799             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  232800         746 :           void operator delete (void* pointer)
  232801             :              {
  232802             :             // This is the generated delete operator...
  232803         746 :                SgNotOp::operator delete (pointer,sizeof(SgNotOp));
  232804             :              }
  232805             : 
  232806             :       /*! \brief Returns the total number of IR nodes of this type */
  232807             :           static size_t numberOfNodes();
  232808             : 
  232809             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  232810             :           static size_t memoryUsage();
  232811             : 
  232812             :       // End of scope which started in IR nodes specific code 
  232813             :       /* */
  232814             : 
  232815             :       /* name Internal Functions
  232816             :           \brief Internal functions ... incomplete-documentation
  232817             : 
  232818             :           These functions have been made public as part of the design, but they are suggested for internal use 
  232819             :           or by particularly knowledgeable users for specialized tools or applications.
  232820             : 
  232821             :           \internal We could not make these private because they are required by user for special purposes. And 
  232822             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  232823             :          
  232824             :        */
  232825             : 
  232826             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  232827             :        // overridden in every class by *generated* implementation
  232828             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  232829             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  232830             :        // MS: 06/28/02 container of names of variables or container indices 
  232831             :        // used used in the traversal to access AST successor nodes
  232832             :        // overridden in every class by *generated* implementation
  232833             :       /*! \brief container of names of variables or container indices used used in the traversal
  232834             :           to access AST successor nodes overridden in every class by *generated* implementation */
  232835             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  232836             : 
  232837             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  232838             :        // than all the vector copies. The implementation for these functions is generated for each class.
  232839             :       /*! \brief return number of children in the traversal successor list */
  232840             :           virtual size_t get_numberOfTraversalSuccessors() override;
  232841             :       /*! \brief index-based access to traversal successors by index number */
  232842             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  232843             :       /*! \brief index-based access to traversal successors by child node */
  232844             :           virtual size_t get_childIndex(SgNode *child) override;
  232845             : 
  232846             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  232847             :        // MS: 08/16/2002 method for generating RTI information
  232848             :       /*! \brief return C++ Runtime-Time-Information */
  232849             :           virtual RTIReturnType roseRTI() override;
  232850             : #endif
  232851             :       /* */
  232852             : 
  232853             : 
  232854             : 
  232855             :       /* name Deprecated Functions
  232856             :           \brief Deprecated functions ... incomplete-documentation
  232857             : 
  232858             :           These functions have been deprecated from use.
  232859             :        */
  232860             :       /* */
  232861             : 
  232862             :       /*! returns a C style string (char*) representing the class name */
  232863             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  232864             : 
  232865             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  232866             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  232867             : #if 0
  232868             :       /*! returns old style Sage II enum values */
  232869             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  232870             :       /*! returns old style Sage II enum values */
  232871             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  232872             : #endif
  232873             :       /* */
  232874             : 
  232875             : 
  232876             : 
  232877             : 
  232878             :      public:
  232879             :       /* name Traversal Support Functions
  232880             :           \brief Traversal support functions ... incomplete-documentation
  232881             : 
  232882             :           These functions have been made public as part of the design, but they are suggested for internal use 
  232883             :           or by particularly knowledgable users for specialized tools or applications.
  232884             :        */
  232885             :       /* */
  232886             : 
  232887             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  232888             :        // (inferior to ROSE traversal mechanism, experimental).
  232889             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  232890             :        */
  232891             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  232892             : 
  232893             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  232894             :       /*! \brief support for the classic visitor pattern done in GoF */
  232895             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  232896             : 
  232897             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  232898             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  232899             :        */
  232900             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  232901             : 
  232902             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  232903             :        */
  232904             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  232905             : 
  232906             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  232907             :        // This traversal helps support internal tools that call static member functions.
  232908             :        // note: this function operates on the memory pools.
  232909             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  232910             :        */
  232911             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  232912             :       /* */
  232913             : 
  232914             : 
  232915             :      public:
  232916             :       /* name Memory Allocation Functions
  232917             :           \brief Memory allocations functions ... incomplete-documentation
  232918             : 
  232919             :           These functions have been made public as part of the design, but they are suggested for internal use 
  232920             :           or by particularly knowledgable users for specialized tools or applications.
  232921             :        */
  232922             :       /* */
  232923             : 
  232924             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  232925             : 
  232926             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  232927             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  232928             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  232929             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  232930             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  232931             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  232932             :           being used with the AST File I/O mechanism.
  232933             :        */
  232934             :           virtual bool isInMemoryPool() override;
  232935             : 
  232936             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  232937             : 
  232938             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  232939             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  232940             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  232941             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  232942             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  232943             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  232944             :           being used with the AST File I/O mechanism.
  232945             :        */
  232946             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  232947             : 
  232948             :       // DQ (4/30/2006): Modified to be a const function.
  232949             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  232950             : 
  232951             :           This functions is part of general support for many possible tools to operate 
  232952             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  232953             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  232954             :           less than the set of pointers used by the AST file I/O. This is part of
  232955             :           work implemented by Andreas, and support tools such as the AST graph generation.
  232956             : 
  232957             :           \warning This function can return unexpected data members and thus the 
  232958             :                    order and the number of elements is unpredicable and subject 
  232959             :                    to change.
  232960             : 
  232961             :           \returns STL vector of pairs of SgNode* and strings
  232962             :        */
  232963             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  232964             : 
  232965             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  232966             : 
  232967             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  232968             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  232969             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  232970             : 
  232971             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  232972             :                    and subject to change.
  232973             :        */
  232974             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  232975             : 
  232976             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  232977             : 
  232978             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  232979             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  232980             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  232981             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  232982             : 
  232983             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  232984             : 
  232985             :           \returns long
  232986             :        */
  232987             :           virtual long getChildIndex( SgNode* childNode ) const override;
  232988             : 
  232989             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  232990             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  232991             :       /* \brief Constructor for use by AST File I/O Mechanism
  232992             : 
  232993             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  232994             :           which obtained via fast binary file I/O from disk.
  232995             :        */
  232996             :        // SgNotOp( SgNotOpStorageClass& source );
  232997             : 
  232998             : 
  232999             : 
  233000             : 
  233001             : 
  233002             :  // JH (10/24/2005): methods added to support the ast file IO
  233003             :     private:
  233004             : 
  233005             :       /* name AST Memory Allocation Support Functions
  233006             :           \brief Memory allocations support....
  233007             : 
  233008             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  233009             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  233010             :           and support the AST File I/O Mechanism.
  233011             :        */
  233012             :       /* */
  233013             : 
  233014             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  233015             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  233016             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  233017             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  233018             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  233019             :           a correspinding one in the AST_FILE_IO class!
  233020             :        */
  233021             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  233022             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233023             :       /* \brief Typedef used for low level memory access.
  233024             :        */
  233025             :        // typedef unsigned char* TestType;
  233026             : 
  233027             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  233028             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233029             :       /* \brief Typedef used to hold memory addresses as values.
  233030             :        */
  233031             :        // typedef unsigned long  AddressType;
  233032             : 
  233033             : 
  233034             : 
  233035             :        // necessary, to have direct access to the p_freepointer and the private methods !
  233036             :       /*! \brief friend class declaration to support AST File I/O */
  233037             :           friend class AST_FILE_IO;
  233038             : 
  233039             :       /*! \brief friend class declaration to support AST File I/O */
  233040             :           friend class SgNotOpStorageClass;
  233041             : 
  233042             :       /*! \brief friend class declaration to support AST File I/O */
  233043             :           friend class AstSpecificDataManagingClass;
  233044             : 
  233045             :       /*! \brief friend class declaration to support AST File I/O */
  233046             :           friend class AstSpecificDataManagingClassStorageClass;
  233047             :     public:
  233048             :       /*! \brief IR node constructor to support AST File I/O */
  233049             :           SgNotOp( const SgNotOpStorageClass& source );
  233050             : 
  233051             :  // private: // JJW hack
  233052             :        /*
  233053             :           name AST Memory Allocation Support Variables
  233054             :           Memory allocations support variables 
  233055             : 
  233056             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  233057             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  233058             :           and support the AST File I/O Mechanism.
  233059             :        */
  233060             :       /* */
  233061             : 
  233062             :     public:
  233063             : 
  233064             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  233065             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  233066             :       // virtual SgNode* addRegExpAttribute();
  233067             :       /*! \brief Support for AST matching using regular expression.
  233068             : 
  233069             :           This support is incomplete and the subject of current research to define 
  233070             :           RegEx trees to support inexact matching.
  233071             :        */
  233072             :           SgNotOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  233073             : 
  233074             : // *** COMMON CODE SECTION ENDS HERE ***
  233075             : 
  233076             : 
  233077             : // End of memberFunctionString
  233078             : // Start of memberFunctionString
  233079             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  233080             : 
  233081             :      // the generated cast function
  233082             :      // friend ROSE_DLL_API SgNotOp* isSgNotOp ( SgNode* s );
  233083             : 
  233084             :           typedef SgUnaryOp base_node_type;
  233085             : 
  233086             : 
  233087             : // End of memberFunctionString
  233088             : // Start of memberFunctionString
  233089             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  233090             : 
  233091             :           void post_construction_initialization() override;
  233092             : 
  233093             : 
  233094             : // End of memberFunctionString
  233095             : // Start of memberFunctionString
  233096             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  233097             : 
  233098           0 :           int precedence() const override { return 15; }
  233099             : 
  233100             : 
  233101             : // End of memberFunctionString
  233102             : 
  233103             : 
  233104             :      public: 
  233105             :          virtual ~SgNotOp();
  233106             : 
  233107             : 
  233108             :      public: 
  233109             :          SgNotOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  233110             :          SgNotOp(SgExpression* operand_i, SgType* expression_type); 
  233111             : 
  233112             :     protected:
  233113             : 
  233114             :     friend struct Rose::Traits::generated::describe_node_t<SgNotOp>;
  233115             : 
  233116             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233117             : 
  233118             : 
  233119             :    };
  233120             : #endif
  233121             : 
  233122             : // postdeclarations for SgNotOp
  233123             : 
  233124             : /* #line 233125 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233125             : 
  233126             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  233127             : 
  233128             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233129             : 
  233130             : 
  233131             : /* #line 233132 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233132             : 
  233133             : 
  233134             : 
  233135             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233136             : 
  233137             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  233138             : //      This code is automatically generated for each 
  233139             : //      terminal and non-terminal within the defined 
  233140             : //      grammar.  There is a simple way to change the 
  233141             : //      code to fix bugs etc.  See the ROSE README file
  233142             : //      for directions.
  233143             : 
  233144             : // tps: (02/22/2010): Adding DLL export requirements
  233145             : #include "rosedll.h"
  233146             : 
  233147             : // predeclarations for SgPointerDerefExp
  233148             : 
  233149             : /* #line 233150 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233150             : 
  233151             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  233152             : 
  233153             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233154             : 
  233155             : #if 1
  233156             : // Class Definition for SgPointerDerefExp
  233157             : class ROSE_DLL_API SgPointerDerefExp  : public SgUnaryOp
  233158             :    {
  233159             :      public:
  233160             : 
  233161             : 
  233162             : /* #line 233163 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233163             : 
  233164             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  233165             : // Start of memberFunctionString
  233166             : /* #line 1128 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  233167             : 
  233168             :           SgType* get_type() const override;
  233169             : 
  233170             :        // get lvalue
  233171             :           virtual bool isLValue() const override;
  233172             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  233173             : 
  233174             : 
  233175             : 
  233176             : // End of memberFunctionString
  233177             : // Start of memberFunctionString
  233178             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  233179             : 
  233180             : // *** COMMON CODE SECTION BEGINS HERE ***
  233181             : 
  233182             :     public:
  233183             : 
  233184             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  233185             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  233186             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  233187             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  233188             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  233189             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  233190             : 
  233191             :       /*! \brief returns a string representing the class name */
  233192             :           virtual std::string class_name() const override;
  233193             : 
  233194             :       /*! \brief returns new style SageIII enum values */
  233195             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  233196             : 
  233197             :       /*! \brief static variant value */
  233198             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  233199             :        // static const VariantT static_variant = V_SgPointerDerefExp;
  233200             :           enum { static_variant = V_SgPointerDerefExp };
  233201             : 
  233202             :        /* the generated cast function */
  233203             :       /*! \brief Casts pointer from base class to derived class */
  233204             :           ROSE_DLL_API friend       SgPointerDerefExp* isSgPointerDerefExp(       SgNode * s );
  233205             : 
  233206             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  233207             :           ROSE_DLL_API friend const SgPointerDerefExp* isSgPointerDerefExp( const SgNode * s );
  233208             : 
  233209             :      // ******************************************
  233210             :      // * Memory Pool / New / Delete
  233211             :      // ******************************************
  233212             : 
  233213             :      public:
  233214             :           /// \private
  233215             :           static const unsigned pool_size; //
  233216             :           /// \private
  233217             :           static std::vector<unsigned char *> pools; //
  233218             :           /// \private
  233219             :           static SgPointerDerefExp * next_node; // 
  233220             : 
  233221             :           /// \private
  233222             :           static unsigned long initializeStorageClassArray(SgPointerDerefExpStorageClass *); //
  233223             : 
  233224             :           /// \private
  233225             :           static void clearMemoryPool(); //
  233226             :           static void deleteMemoryPool(); //
  233227             : 
  233228             :           /// \private
  233229             :           static void extendMemoryPoolForFileIO(); //
  233230             : 
  233231             :           /// \private
  233232             :           static SgPointerDerefExp * getPointerFromGlobalIndex(unsigned long); //
  233233             :           /// \private
  233234             :           static SgPointerDerefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  233235             : 
  233236             :           /// \private
  233237             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  233238             :           /// \private
  233239             :           static void resetValidFreepointers(); //
  233240             :           /// \private
  233241             :           static unsigned long getNumberOfLastValidPointer(); //
  233242             : 
  233243             : 
  233244             : #if defined(INLINE_FUNCTIONS)
  233245             :       /*! \brief returns pointer to newly allocated IR node */
  233246             :           inline void *operator new (size_t size);
  233247             : #else
  233248             :       /*! \brief returns pointer to newly allocated IR node */
  233249             :           void *operator new (size_t size);
  233250             : #endif
  233251             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  233252             :           void operator delete (void* pointer, size_t size);
  233253             : 
  233254             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  233255         808 :           void operator delete (void* pointer)
  233256             :              {
  233257             :             // This is the generated delete operator...
  233258         808 :                SgPointerDerefExp::operator delete (pointer,sizeof(SgPointerDerefExp));
  233259             :              }
  233260             : 
  233261             :       /*! \brief Returns the total number of IR nodes of this type */
  233262             :           static size_t numberOfNodes();
  233263             : 
  233264             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  233265             :           static size_t memoryUsage();
  233266             : 
  233267             :       // End of scope which started in IR nodes specific code 
  233268             :       /* */
  233269             : 
  233270             :       /* name Internal Functions
  233271             :           \brief Internal functions ... incomplete-documentation
  233272             : 
  233273             :           These functions have been made public as part of the design, but they are suggested for internal use 
  233274             :           or by particularly knowledgeable users for specialized tools or applications.
  233275             : 
  233276             :           \internal We could not make these private because they are required by user for special purposes. And 
  233277             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  233278             :          
  233279             :        */
  233280             : 
  233281             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  233282             :        // overridden in every class by *generated* implementation
  233283             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  233284             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  233285             :        // MS: 06/28/02 container of names of variables or container indices 
  233286             :        // used used in the traversal to access AST successor nodes
  233287             :        // overridden in every class by *generated* implementation
  233288             :       /*! \brief container of names of variables or container indices used used in the traversal
  233289             :           to access AST successor nodes overridden in every class by *generated* implementation */
  233290             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  233291             : 
  233292             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  233293             :        // than all the vector copies. The implementation for these functions is generated for each class.
  233294             :       /*! \brief return number of children in the traversal successor list */
  233295             :           virtual size_t get_numberOfTraversalSuccessors() override;
  233296             :       /*! \brief index-based access to traversal successors by index number */
  233297             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  233298             :       /*! \brief index-based access to traversal successors by child node */
  233299             :           virtual size_t get_childIndex(SgNode *child) override;
  233300             : 
  233301             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  233302             :        // MS: 08/16/2002 method for generating RTI information
  233303             :       /*! \brief return C++ Runtime-Time-Information */
  233304             :           virtual RTIReturnType roseRTI() override;
  233305             : #endif
  233306             :       /* */
  233307             : 
  233308             : 
  233309             : 
  233310             :       /* name Deprecated Functions
  233311             :           \brief Deprecated functions ... incomplete-documentation
  233312             : 
  233313             :           These functions have been deprecated from use.
  233314             :        */
  233315             :       /* */
  233316             : 
  233317             :       /*! returns a C style string (char*) representing the class name */
  233318             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  233319             : 
  233320             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  233321             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  233322             : #if 0
  233323             :       /*! returns old style Sage II enum values */
  233324             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  233325             :       /*! returns old style Sage II enum values */
  233326             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  233327             : #endif
  233328             :       /* */
  233329             : 
  233330             : 
  233331             : 
  233332             : 
  233333             :      public:
  233334             :       /* name Traversal Support Functions
  233335             :           \brief Traversal support functions ... incomplete-documentation
  233336             : 
  233337             :           These functions have been made public as part of the design, but they are suggested for internal use 
  233338             :           or by particularly knowledgable users for specialized tools or applications.
  233339             :        */
  233340             :       /* */
  233341             : 
  233342             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  233343             :        // (inferior to ROSE traversal mechanism, experimental).
  233344             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  233345             :        */
  233346             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  233347             : 
  233348             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  233349             :       /*! \brief support for the classic visitor pattern done in GoF */
  233350             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  233351             : 
  233352             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  233353             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  233354             :        */
  233355             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  233356             : 
  233357             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  233358             :        */
  233359             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  233360             : 
  233361             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  233362             :        // This traversal helps support internal tools that call static member functions.
  233363             :        // note: this function operates on the memory pools.
  233364             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  233365             :        */
  233366             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  233367             :       /* */
  233368             : 
  233369             : 
  233370             :      public:
  233371             :       /* name Memory Allocation Functions
  233372             :           \brief Memory allocations functions ... incomplete-documentation
  233373             : 
  233374             :           These functions have been made public as part of the design, but they are suggested for internal use 
  233375             :           or by particularly knowledgable users for specialized tools or applications.
  233376             :        */
  233377             :       /* */
  233378             : 
  233379             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  233380             : 
  233381             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  233382             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  233383             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  233384             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  233385             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  233386             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  233387             :           being used with the AST File I/O mechanism.
  233388             :        */
  233389             :           virtual bool isInMemoryPool() override;
  233390             : 
  233391             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  233392             : 
  233393             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  233394             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  233395             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  233396             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  233397             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  233398             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  233399             :           being used with the AST File I/O mechanism.
  233400             :        */
  233401             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  233402             : 
  233403             :       // DQ (4/30/2006): Modified to be a const function.
  233404             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  233405             : 
  233406             :           This functions is part of general support for many possible tools to operate 
  233407             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  233408             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  233409             :           less than the set of pointers used by the AST file I/O. This is part of
  233410             :           work implemented by Andreas, and support tools such as the AST graph generation.
  233411             : 
  233412             :           \warning This function can return unexpected data members and thus the 
  233413             :                    order and the number of elements is unpredicable and subject 
  233414             :                    to change.
  233415             : 
  233416             :           \returns STL vector of pairs of SgNode* and strings
  233417             :        */
  233418             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  233419             : 
  233420             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  233421             : 
  233422             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  233423             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  233424             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  233425             : 
  233426             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  233427             :                    and subject to change.
  233428             :        */
  233429             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  233430             : 
  233431             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  233432             : 
  233433             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  233434             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  233435             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  233436             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  233437             : 
  233438             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  233439             : 
  233440             :           \returns long
  233441             :        */
  233442             :           virtual long getChildIndex( SgNode* childNode ) const override;
  233443             : 
  233444             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  233445             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233446             :       /* \brief Constructor for use by AST File I/O Mechanism
  233447             : 
  233448             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  233449             :           which obtained via fast binary file I/O from disk.
  233450             :        */
  233451             :        // SgPointerDerefExp( SgPointerDerefExpStorageClass& source );
  233452             : 
  233453             : 
  233454             : 
  233455             : 
  233456             : 
  233457             :  // JH (10/24/2005): methods added to support the ast file IO
  233458             :     private:
  233459             : 
  233460             :       /* name AST Memory Allocation Support Functions
  233461             :           \brief Memory allocations support....
  233462             : 
  233463             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  233464             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  233465             :           and support the AST File I/O Mechanism.
  233466             :        */
  233467             :       /* */
  233468             : 
  233469             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  233470             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  233471             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  233472             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  233473             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  233474             :           a correspinding one in the AST_FILE_IO class!
  233475             :        */
  233476             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  233477             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233478             :       /* \brief Typedef used for low level memory access.
  233479             :        */
  233480             :        // typedef unsigned char* TestType;
  233481             : 
  233482             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  233483             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233484             :       /* \brief Typedef used to hold memory addresses as values.
  233485             :        */
  233486             :        // typedef unsigned long  AddressType;
  233487             : 
  233488             : 
  233489             : 
  233490             :        // necessary, to have direct access to the p_freepointer and the private methods !
  233491             :       /*! \brief friend class declaration to support AST File I/O */
  233492             :           friend class AST_FILE_IO;
  233493             : 
  233494             :       /*! \brief friend class declaration to support AST File I/O */
  233495             :           friend class SgPointerDerefExpStorageClass;
  233496             : 
  233497             :       /*! \brief friend class declaration to support AST File I/O */
  233498             :           friend class AstSpecificDataManagingClass;
  233499             : 
  233500             :       /*! \brief friend class declaration to support AST File I/O */
  233501             :           friend class AstSpecificDataManagingClassStorageClass;
  233502             :     public:
  233503             :       /*! \brief IR node constructor to support AST File I/O */
  233504             :           SgPointerDerefExp( const SgPointerDerefExpStorageClass& source );
  233505             : 
  233506             :  // private: // JJW hack
  233507             :        /*
  233508             :           name AST Memory Allocation Support Variables
  233509             :           Memory allocations support variables 
  233510             : 
  233511             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  233512             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  233513             :           and support the AST File I/O Mechanism.
  233514             :        */
  233515             :       /* */
  233516             : 
  233517             :     public:
  233518             : 
  233519             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  233520             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  233521             :       // virtual SgNode* addRegExpAttribute();
  233522             :       /*! \brief Support for AST matching using regular expression.
  233523             : 
  233524             :           This support is incomplete and the subject of current research to define 
  233525             :           RegEx trees to support inexact matching.
  233526             :        */
  233527             :           SgPointerDerefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  233528             : 
  233529             : // *** COMMON CODE SECTION ENDS HERE ***
  233530             : 
  233531             : 
  233532             : // End of memberFunctionString
  233533             : // Start of memberFunctionString
  233534             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  233535             : 
  233536             :      // the generated cast function
  233537             :      // friend ROSE_DLL_API SgPointerDerefExp* isSgPointerDerefExp ( SgNode* s );
  233538             : 
  233539             :           typedef SgUnaryOp base_node_type;
  233540             : 
  233541             : 
  233542             : // End of memberFunctionString
  233543             : // Start of memberFunctionString
  233544             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  233545             : 
  233546             :           void post_construction_initialization() override;
  233547             : 
  233548             : 
  233549             : // End of memberFunctionString
  233550             : // Start of memberFunctionString
  233551             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  233552             : 
  233553           0 :           int precedence() const override { return 15; }
  233554             : 
  233555             : 
  233556             : // End of memberFunctionString
  233557             : 
  233558             : 
  233559             :      public: 
  233560             :          virtual ~SgPointerDerefExp();
  233561             : 
  233562             : 
  233563             :      public: 
  233564             :          SgPointerDerefExp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  233565             :          SgPointerDerefExp(SgExpression* operand_i, SgType* expression_type); 
  233566             : 
  233567             :     protected:
  233568             : 
  233569             :     friend struct Rose::Traits::generated::describe_node_t<SgPointerDerefExp>;
  233570             : 
  233571             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233572             : 
  233573             : 
  233574             :    };
  233575             : #endif
  233576             : 
  233577             : // postdeclarations for SgPointerDerefExp
  233578             : 
  233579             : /* #line 233580 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233580             : 
  233581             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  233582             : 
  233583             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233584             : 
  233585             : 
  233586             : /* #line 233587 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233587             : 
  233588             : 
  233589             : 
  233590             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233591             : 
  233592             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  233593             : //      This code is automatically generated for each 
  233594             : //      terminal and non-terminal within the defined 
  233595             : //      grammar.  There is a simple way to change the 
  233596             : //      code to fix bugs etc.  See the ROSE README file
  233597             : //      for directions.
  233598             : 
  233599             : // tps: (02/22/2010): Adding DLL export requirements
  233600             : #include "rosedll.h"
  233601             : 
  233602             : // predeclarations for SgAddressOfOp
  233603             : 
  233604             : /* #line 233605 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233605             : 
  233606             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  233607             : 
  233608             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  233609             : 
  233610             : #if 1
  233611             : // Class Definition for SgAddressOfOp
  233612             : class ROSE_DLL_API SgAddressOfOp  : public SgUnaryOp
  233613             :    {
  233614             :      public:
  233615             : 
  233616             : 
  233617             : /* #line 233618 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  233618             : 
  233619             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  233620             : // Start of memberFunctionString
  233621             : /* #line 1138 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  233622             : 
  233623             :           SgType* get_type() const override;
  233624             : 
  233625             :        // get lvalue
  233626             :           virtual bool isLValue() const override;
  233627             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  233628             : 
  233629             :        // DQ (7/16/2014): Shared types from expressions in UPC have some expected symantics that are not a matter of returning the result of get_type().
  233630             :        // This function supports the get_type() function.
  233631             :           SgType* checkForSharedTypeAndReturnSharedType( SgType* possibleReturnType ) const;
  233632             : 
  233633             : 
  233634             : 
  233635             : // End of memberFunctionString
  233636             : // Start of memberFunctionString
  233637             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  233638             : 
  233639             : // *** COMMON CODE SECTION BEGINS HERE ***
  233640             : 
  233641             :     public:
  233642             : 
  233643             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  233644             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  233645             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  233646             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  233647             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  233648             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  233649             : 
  233650             :       /*! \brief returns a string representing the class name */
  233651             :           virtual std::string class_name() const override;
  233652             : 
  233653             :       /*! \brief returns new style SageIII enum values */
  233654             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  233655             : 
  233656             :       /*! \brief static variant value */
  233657             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  233658             :        // static const VariantT static_variant = V_SgAddressOfOp;
  233659             :           enum { static_variant = V_SgAddressOfOp };
  233660             : 
  233661             :        /* the generated cast function */
  233662             :       /*! \brief Casts pointer from base class to derived class */
  233663             :           ROSE_DLL_API friend       SgAddressOfOp* isSgAddressOfOp(       SgNode * s );
  233664             : 
  233665             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  233666             :           ROSE_DLL_API friend const SgAddressOfOp* isSgAddressOfOp( const SgNode * s );
  233667             : 
  233668             :      // ******************************************
  233669             :      // * Memory Pool / New / Delete
  233670             :      // ******************************************
  233671             : 
  233672             :      public:
  233673             :           /// \private
  233674             :           static const unsigned pool_size; //
  233675             :           /// \private
  233676             :           static std::vector<unsigned char *> pools; //
  233677             :           /// \private
  233678             :           static SgAddressOfOp * next_node; // 
  233679             : 
  233680             :           /// \private
  233681             :           static unsigned long initializeStorageClassArray(SgAddressOfOpStorageClass *); //
  233682             : 
  233683             :           /// \private
  233684             :           static void clearMemoryPool(); //
  233685             :           static void deleteMemoryPool(); //
  233686             : 
  233687             :           /// \private
  233688             :           static void extendMemoryPoolForFileIO(); //
  233689             : 
  233690             :           /// \private
  233691             :           static SgAddressOfOp * getPointerFromGlobalIndex(unsigned long); //
  233692             :           /// \private
  233693             :           static SgAddressOfOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  233694             : 
  233695             :           /// \private
  233696             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  233697             :           /// \private
  233698             :           static void resetValidFreepointers(); //
  233699             :           /// \private
  233700             :           static unsigned long getNumberOfLastValidPointer(); //
  233701             : 
  233702             : 
  233703             : #if defined(INLINE_FUNCTIONS)
  233704             :       /*! \brief returns pointer to newly allocated IR node */
  233705             :           inline void *operator new (size_t size);
  233706             : #else
  233707             :       /*! \brief returns pointer to newly allocated IR node */
  233708             :           void *operator new (size_t size);
  233709             : #endif
  233710             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  233711             :           void operator delete (void* pointer, size_t size);
  233712             : 
  233713             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  233714         169 :           void operator delete (void* pointer)
  233715             :              {
  233716             :             // This is the generated delete operator...
  233717         169 :                SgAddressOfOp::operator delete (pointer,sizeof(SgAddressOfOp));
  233718             :              }
  233719             : 
  233720             :       /*! \brief Returns the total number of IR nodes of this type */
  233721             :           static size_t numberOfNodes();
  233722             : 
  233723             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  233724             :           static size_t memoryUsage();
  233725             : 
  233726             :       // End of scope which started in IR nodes specific code 
  233727             :       /* */
  233728             : 
  233729             :       /* name Internal Functions
  233730             :           \brief Internal functions ... incomplete-documentation
  233731             : 
  233732             :           These functions have been made public as part of the design, but they are suggested for internal use 
  233733             :           or by particularly knowledgeable users for specialized tools or applications.
  233734             : 
  233735             :           \internal We could not make these private because they are required by user for special purposes. And 
  233736             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  233737             :          
  233738             :        */
  233739             : 
  233740             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  233741             :        // overridden in every class by *generated* implementation
  233742             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  233743             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  233744             :        // MS: 06/28/02 container of names of variables or container indices 
  233745             :        // used used in the traversal to access AST successor nodes
  233746             :        // overridden in every class by *generated* implementation
  233747             :       /*! \brief container of names of variables or container indices used used in the traversal
  233748             :           to access AST successor nodes overridden in every class by *generated* implementation */
  233749             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  233750             : 
  233751             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  233752             :        // than all the vector copies. The implementation for these functions is generated for each class.
  233753             :       /*! \brief return number of children in the traversal successor list */
  233754             :           virtual size_t get_numberOfTraversalSuccessors() override;
  233755             :       /*! \brief index-based access to traversal successors by index number */
  233756             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  233757             :       /*! \brief index-based access to traversal successors by child node */
  233758             :           virtual size_t get_childIndex(SgNode *child) override;
  233759             : 
  233760             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  233761             :        // MS: 08/16/2002 method for generating RTI information
  233762             :       /*! \brief return C++ Runtime-Time-Information */
  233763             :           virtual RTIReturnType roseRTI() override;
  233764             : #endif
  233765             :       /* */
  233766             : 
  233767             : 
  233768             : 
  233769             :       /* name Deprecated Functions
  233770             :           \brief Deprecated functions ... incomplete-documentation
  233771             : 
  233772             :           These functions have been deprecated from use.
  233773             :        */
  233774             :       /* */
  233775             : 
  233776             :       /*! returns a C style string (char*) representing the class name */
  233777             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  233778             : 
  233779             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  233780             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  233781             : #if 0
  233782             :       /*! returns old style Sage II enum values */
  233783             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  233784             :       /*! returns old style Sage II enum values */
  233785             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  233786             : #endif
  233787             :       /* */
  233788             : 
  233789             : 
  233790             : 
  233791             : 
  233792             :      public:
  233793             :       /* name Traversal Support Functions
  233794             :           \brief Traversal support functions ... incomplete-documentation
  233795             : 
  233796             :           These functions have been made public as part of the design, but they are suggested for internal use 
  233797             :           or by particularly knowledgable users for specialized tools or applications.
  233798             :        */
  233799             :       /* */
  233800             : 
  233801             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  233802             :        // (inferior to ROSE traversal mechanism, experimental).
  233803             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  233804             :        */
  233805             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  233806             : 
  233807             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  233808             :       /*! \brief support for the classic visitor pattern done in GoF */
  233809             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  233810             : 
  233811             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  233812             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  233813             :        */
  233814             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  233815             : 
  233816             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  233817             :        */
  233818             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  233819             : 
  233820             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  233821             :        // This traversal helps support internal tools that call static member functions.
  233822             :        // note: this function operates on the memory pools.
  233823             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  233824             :        */
  233825             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  233826             :       /* */
  233827             : 
  233828             : 
  233829             :      public:
  233830             :       /* name Memory Allocation Functions
  233831             :           \brief Memory allocations functions ... incomplete-documentation
  233832             : 
  233833             :           These functions have been made public as part of the design, but they are suggested for internal use 
  233834             :           or by particularly knowledgable users for specialized tools or applications.
  233835             :        */
  233836             :       /* */
  233837             : 
  233838             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  233839             : 
  233840             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  233841             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  233842             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  233843             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  233844             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  233845             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  233846             :           being used with the AST File I/O mechanism.
  233847             :        */
  233848             :           virtual bool isInMemoryPool() override;
  233849             : 
  233850             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  233851             : 
  233852             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  233853             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  233854             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  233855             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  233856             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  233857             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  233858             :           being used with the AST File I/O mechanism.
  233859             :        */
  233860             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  233861             : 
  233862             :       // DQ (4/30/2006): Modified to be a const function.
  233863             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  233864             : 
  233865             :           This functions is part of general support for many possible tools to operate 
  233866             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  233867             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  233868             :           less than the set of pointers used by the AST file I/O. This is part of
  233869             :           work implemented by Andreas, and support tools such as the AST graph generation.
  233870             : 
  233871             :           \warning This function can return unexpected data members and thus the 
  233872             :                    order and the number of elements is unpredicable and subject 
  233873             :                    to change.
  233874             : 
  233875             :           \returns STL vector of pairs of SgNode* and strings
  233876             :        */
  233877             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  233878             : 
  233879             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  233880             : 
  233881             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  233882             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  233883             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  233884             : 
  233885             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  233886             :                    and subject to change.
  233887             :        */
  233888             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  233889             : 
  233890             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  233891             : 
  233892             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  233893             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  233894             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  233895             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  233896             : 
  233897             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  233898             : 
  233899             :           \returns long
  233900             :        */
  233901             :           virtual long getChildIndex( SgNode* childNode ) const override;
  233902             : 
  233903             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  233904             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233905             :       /* \brief Constructor for use by AST File I/O Mechanism
  233906             : 
  233907             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  233908             :           which obtained via fast binary file I/O from disk.
  233909             :        */
  233910             :        // SgAddressOfOp( SgAddressOfOpStorageClass& source );
  233911             : 
  233912             : 
  233913             : 
  233914             : 
  233915             : 
  233916             :  // JH (10/24/2005): methods added to support the ast file IO
  233917             :     private:
  233918             : 
  233919             :       /* name AST Memory Allocation Support Functions
  233920             :           \brief Memory allocations support....
  233921             : 
  233922             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  233923             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  233924             :           and support the AST File I/O Mechanism.
  233925             :        */
  233926             :       /* */
  233927             : 
  233928             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  233929             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  233930             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  233931             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  233932             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  233933             :           a correspinding one in the AST_FILE_IO class!
  233934             :        */
  233935             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  233936             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233937             :       /* \brief Typedef used for low level memory access.
  233938             :        */
  233939             :        // typedef unsigned char* TestType;
  233940             : 
  233941             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  233942             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  233943             :       /* \brief Typedef used to hold memory addresses as values.
  233944             :        */
  233945             :        // typedef unsigned long  AddressType;
  233946             : 
  233947             : 
  233948             : 
  233949             :        // necessary, to have direct access to the p_freepointer and the private methods !
  233950             :       /*! \brief friend class declaration to support AST File I/O */
  233951             :           friend class AST_FILE_IO;
  233952             : 
  233953             :       /*! \brief friend class declaration to support AST File I/O */
  233954             :           friend class SgAddressOfOpStorageClass;
  233955             : 
  233956             :       /*! \brief friend class declaration to support AST File I/O */
  233957             :           friend class AstSpecificDataManagingClass;
  233958             : 
  233959             :       /*! \brief friend class declaration to support AST File I/O */
  233960             :           friend class AstSpecificDataManagingClassStorageClass;
  233961             :     public:
  233962             :       /*! \brief IR node constructor to support AST File I/O */
  233963             :           SgAddressOfOp( const SgAddressOfOpStorageClass& source );
  233964             : 
  233965             :  // private: // JJW hack
  233966             :        /*
  233967             :           name AST Memory Allocation Support Variables
  233968             :           Memory allocations support variables 
  233969             : 
  233970             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  233971             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  233972             :           and support the AST File I/O Mechanism.
  233973             :        */
  233974             :       /* */
  233975             : 
  233976             :     public:
  233977             : 
  233978             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  233979             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  233980             :       // virtual SgNode* addRegExpAttribute();
  233981             :       /*! \brief Support for AST matching using regular expression.
  233982             : 
  233983             :           This support is incomplete and the subject of current research to define 
  233984             :           RegEx trees to support inexact matching.
  233985             :        */
  233986             :           SgAddressOfOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  233987             : 
  233988             : // *** COMMON CODE SECTION ENDS HERE ***
  233989             : 
  233990             : 
  233991             : // End of memberFunctionString
  233992             : // Start of memberFunctionString
  233993             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  233994             : 
  233995             :      // the generated cast function
  233996             :      // friend ROSE_DLL_API SgAddressOfOp* isSgAddressOfOp ( SgNode* s );
  233997             : 
  233998             :           typedef SgUnaryOp base_node_type;
  233999             : 
  234000             : 
  234001             : // End of memberFunctionString
  234002             : // Start of memberFunctionString
  234003             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234004             : 
  234005             :           void post_construction_initialization() override;
  234006             : 
  234007             : 
  234008             : // End of memberFunctionString
  234009             : // Start of memberFunctionString
  234010             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234011             : 
  234012           0 :           int precedence() const override { return 15; }
  234013             : 
  234014             : 
  234015             : // End of memberFunctionString
  234016             : 
  234017             :      public: 
  234018             :          SgExpression* get_originalExpressionTree() const override /* (getDataAccessFunctionPrototypeString) */;
  234019             :          void set_originalExpressionTree(SgExpression* originalExpressionTree) override /* (getDataAccessFunctionPrototypeString) */;
  234020             : 
  234021             : 
  234022             :      public: 
  234023             :          virtual ~SgAddressOfOp();
  234024             : 
  234025             : 
  234026             :      public: 
  234027             :          SgAddressOfOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  234028             :          SgAddressOfOp(SgExpression* operand_i, SgType* expression_type); 
  234029             : 
  234030             :     protected:
  234031             : // Start of memberFunctionString
  234032             : SgExpression* p_originalExpressionTree;
  234033             :           
  234034             : // End of memberFunctionString
  234035             : 
  234036             :     friend struct Rose::Traits::generated::describe_node_t<SgAddressOfOp>;
  234037             :     friend struct Rose::Traits::generated::describe_field_t<SgAddressOfOp, SgExpression*,&SgAddressOfOp::p_originalExpressionTree>;
  234038             : 
  234039             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234040             : 
  234041             : 
  234042             :    };
  234043             : #endif
  234044             : 
  234045             : // postdeclarations for SgAddressOfOp
  234046             : 
  234047             : /* #line 234048 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234048             : 
  234049             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  234050             : 
  234051             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234052             : 
  234053             : 
  234054             : /* #line 234055 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234055             : 
  234056             : 
  234057             : 
  234058             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234059             : 
  234060             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  234061             : //      This code is automatically generated for each 
  234062             : //      terminal and non-terminal within the defined 
  234063             : //      grammar.  There is a simple way to change the 
  234064             : //      code to fix bugs etc.  See the ROSE README file
  234065             : //      for directions.
  234066             : 
  234067             : // tps: (02/22/2010): Adding DLL export requirements
  234068             : #include "rosedll.h"
  234069             : 
  234070             : // predeclarations for SgMinusMinusOp
  234071             : 
  234072             : /* #line 234073 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234073             : 
  234074             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  234075             : 
  234076             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234077             : 
  234078             : #if 1
  234079             : // Class Definition for SgMinusMinusOp
  234080             : class ROSE_DLL_API SgMinusMinusOp  : public SgUnaryOp
  234081             :    {
  234082             :      public:
  234083             : 
  234084             : 
  234085             : /* #line 234086 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234086             : 
  234087             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  234088             : // Start of memberFunctionString
  234089             : /* #line 1152 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234090             : 
  234091             :           SgMinusMinusOp ( Sg_File_Info* file_info, SgExpression* operand_i, Sgop_mode a_mode );
  234092             :           SgMinusMinusOp ( SgExpression* operand_i, Sgop_mode a_mode );
  234093             : 
  234094             :        // get lvalue
  234095             :           virtual bool isLValue() const override;
  234096             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  234097             : 
  234098             : 
  234099             : 
  234100             : // End of memberFunctionString
  234101             : // Start of memberFunctionString
  234102             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  234103             : 
  234104             : // *** COMMON CODE SECTION BEGINS HERE ***
  234105             : 
  234106             :     public:
  234107             : 
  234108             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  234109             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  234110             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  234111             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  234112             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  234113             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  234114             : 
  234115             :       /*! \brief returns a string representing the class name */
  234116             :           virtual std::string class_name() const override;
  234117             : 
  234118             :       /*! \brief returns new style SageIII enum values */
  234119             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  234120             : 
  234121             :       /*! \brief static variant value */
  234122             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  234123             :        // static const VariantT static_variant = V_SgMinusMinusOp;
  234124             :           enum { static_variant = V_SgMinusMinusOp };
  234125             : 
  234126             :        /* the generated cast function */
  234127             :       /*! \brief Casts pointer from base class to derived class */
  234128             :           ROSE_DLL_API friend       SgMinusMinusOp* isSgMinusMinusOp(       SgNode * s );
  234129             : 
  234130             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  234131             :           ROSE_DLL_API friend const SgMinusMinusOp* isSgMinusMinusOp( const SgNode * s );
  234132             : 
  234133             :      // ******************************************
  234134             :      // * Memory Pool / New / Delete
  234135             :      // ******************************************
  234136             : 
  234137             :      public:
  234138             :           /// \private
  234139             :           static const unsigned pool_size; //
  234140             :           /// \private
  234141             :           static std::vector<unsigned char *> pools; //
  234142             :           /// \private
  234143             :           static SgMinusMinusOp * next_node; // 
  234144             : 
  234145             :           /// \private
  234146             :           static unsigned long initializeStorageClassArray(SgMinusMinusOpStorageClass *); //
  234147             : 
  234148             :           /// \private
  234149             :           static void clearMemoryPool(); //
  234150             :           static void deleteMemoryPool(); //
  234151             : 
  234152             :           /// \private
  234153             :           static void extendMemoryPoolForFileIO(); //
  234154             : 
  234155             :           /// \private
  234156             :           static SgMinusMinusOp * getPointerFromGlobalIndex(unsigned long); //
  234157             :           /// \private
  234158             :           static SgMinusMinusOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  234159             : 
  234160             :           /// \private
  234161             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  234162             :           /// \private
  234163             :           static void resetValidFreepointers(); //
  234164             :           /// \private
  234165             :           static unsigned long getNumberOfLastValidPointer(); //
  234166             : 
  234167             : 
  234168             : #if defined(INLINE_FUNCTIONS)
  234169             :       /*! \brief returns pointer to newly allocated IR node */
  234170             :           inline void *operator new (size_t size);
  234171             : #else
  234172             :       /*! \brief returns pointer to newly allocated IR node */
  234173             :           void *operator new (size_t size);
  234174             : #endif
  234175             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  234176             :           void operator delete (void* pointer, size_t size);
  234177             : 
  234178             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  234179         157 :           void operator delete (void* pointer)
  234180             :              {
  234181             :             // This is the generated delete operator...
  234182         157 :                SgMinusMinusOp::operator delete (pointer,sizeof(SgMinusMinusOp));
  234183             :              }
  234184             : 
  234185             :       /*! \brief Returns the total number of IR nodes of this type */
  234186             :           static size_t numberOfNodes();
  234187             : 
  234188             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  234189             :           static size_t memoryUsage();
  234190             : 
  234191             :       // End of scope which started in IR nodes specific code 
  234192             :       /* */
  234193             : 
  234194             :       /* name Internal Functions
  234195             :           \brief Internal functions ... incomplete-documentation
  234196             : 
  234197             :           These functions have been made public as part of the design, but they are suggested for internal use 
  234198             :           or by particularly knowledgeable users for specialized tools or applications.
  234199             : 
  234200             :           \internal We could not make these private because they are required by user for special purposes. And 
  234201             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  234202             :          
  234203             :        */
  234204             : 
  234205             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  234206             :        // overridden in every class by *generated* implementation
  234207             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  234208             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  234209             :        // MS: 06/28/02 container of names of variables or container indices 
  234210             :        // used used in the traversal to access AST successor nodes
  234211             :        // overridden in every class by *generated* implementation
  234212             :       /*! \brief container of names of variables or container indices used used in the traversal
  234213             :           to access AST successor nodes overridden in every class by *generated* implementation */
  234214             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  234215             : 
  234216             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  234217             :        // than all the vector copies. The implementation for these functions is generated for each class.
  234218             :       /*! \brief return number of children in the traversal successor list */
  234219             :           virtual size_t get_numberOfTraversalSuccessors() override;
  234220             :       /*! \brief index-based access to traversal successors by index number */
  234221             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  234222             :       /*! \brief index-based access to traversal successors by child node */
  234223             :           virtual size_t get_childIndex(SgNode *child) override;
  234224             : 
  234225             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  234226             :        // MS: 08/16/2002 method for generating RTI information
  234227             :       /*! \brief return C++ Runtime-Time-Information */
  234228             :           virtual RTIReturnType roseRTI() override;
  234229             : #endif
  234230             :       /* */
  234231             : 
  234232             : 
  234233             : 
  234234             :       /* name Deprecated Functions
  234235             :           \brief Deprecated functions ... incomplete-documentation
  234236             : 
  234237             :           These functions have been deprecated from use.
  234238             :        */
  234239             :       /* */
  234240             : 
  234241             :       /*! returns a C style string (char*) representing the class name */
  234242             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  234243             : 
  234244             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  234245             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  234246             : #if 0
  234247             :       /*! returns old style Sage II enum values */
  234248             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  234249             :       /*! returns old style Sage II enum values */
  234250             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  234251             : #endif
  234252             :       /* */
  234253             : 
  234254             : 
  234255             : 
  234256             : 
  234257             :      public:
  234258             :       /* name Traversal Support Functions
  234259             :           \brief Traversal support functions ... incomplete-documentation
  234260             : 
  234261             :           These functions have been made public as part of the design, but they are suggested for internal use 
  234262             :           or by particularly knowledgable users for specialized tools or applications.
  234263             :        */
  234264             :       /* */
  234265             : 
  234266             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  234267             :        // (inferior to ROSE traversal mechanism, experimental).
  234268             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  234269             :        */
  234270             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  234271             : 
  234272             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  234273             :       /*! \brief support for the classic visitor pattern done in GoF */
  234274             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  234275             : 
  234276             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  234277             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  234278             :        */
  234279             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  234280             : 
  234281             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  234282             :        */
  234283             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  234284             : 
  234285             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  234286             :        // This traversal helps support internal tools that call static member functions.
  234287             :        // note: this function operates on the memory pools.
  234288             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  234289             :        */
  234290             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  234291             :       /* */
  234292             : 
  234293             : 
  234294             :      public:
  234295             :       /* name Memory Allocation Functions
  234296             :           \brief Memory allocations functions ... incomplete-documentation
  234297             : 
  234298             :           These functions have been made public as part of the design, but they are suggested for internal use 
  234299             :           or by particularly knowledgable users for specialized tools or applications.
  234300             :        */
  234301             :       /* */
  234302             : 
  234303             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  234304             : 
  234305             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  234306             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  234307             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  234308             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  234309             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  234310             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  234311             :           being used with the AST File I/O mechanism.
  234312             :        */
  234313             :           virtual bool isInMemoryPool() override;
  234314             : 
  234315             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  234316             : 
  234317             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  234318             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  234319             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  234320             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  234321             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  234322             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  234323             :           being used with the AST File I/O mechanism.
  234324             :        */
  234325             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  234326             : 
  234327             :       // DQ (4/30/2006): Modified to be a const function.
  234328             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  234329             : 
  234330             :           This functions is part of general support for many possible tools to operate 
  234331             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  234332             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  234333             :           less than the set of pointers used by the AST file I/O. This is part of
  234334             :           work implemented by Andreas, and support tools such as the AST graph generation.
  234335             : 
  234336             :           \warning This function can return unexpected data members and thus the 
  234337             :                    order and the number of elements is unpredicable and subject 
  234338             :                    to change.
  234339             : 
  234340             :           \returns STL vector of pairs of SgNode* and strings
  234341             :        */
  234342             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  234343             : 
  234344             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  234345             : 
  234346             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  234347             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  234348             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  234349             : 
  234350             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  234351             :                    and subject to change.
  234352             :        */
  234353             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  234354             : 
  234355             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  234356             : 
  234357             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  234358             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  234359             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  234360             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  234361             : 
  234362             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  234363             : 
  234364             :           \returns long
  234365             :        */
  234366             :           virtual long getChildIndex( SgNode* childNode ) const override;
  234367             : 
  234368             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  234369             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  234370             :       /* \brief Constructor for use by AST File I/O Mechanism
  234371             : 
  234372             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  234373             :           which obtained via fast binary file I/O from disk.
  234374             :        */
  234375             :        // SgMinusMinusOp( SgMinusMinusOpStorageClass& source );
  234376             : 
  234377             : 
  234378             : 
  234379             : 
  234380             : 
  234381             :  // JH (10/24/2005): methods added to support the ast file IO
  234382             :     private:
  234383             : 
  234384             :       /* name AST Memory Allocation Support Functions
  234385             :           \brief Memory allocations support....
  234386             : 
  234387             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  234388             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  234389             :           and support the AST File I/O Mechanism.
  234390             :        */
  234391             :       /* */
  234392             : 
  234393             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  234394             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  234395             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  234396             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  234397             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  234398             :           a correspinding one in the AST_FILE_IO class!
  234399             :        */
  234400             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  234401             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  234402             :       /* \brief Typedef used for low level memory access.
  234403             :        */
  234404             :        // typedef unsigned char* TestType;
  234405             : 
  234406             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  234407             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  234408             :       /* \brief Typedef used to hold memory addresses as values.
  234409             :        */
  234410             :        // typedef unsigned long  AddressType;
  234411             : 
  234412             : 
  234413             : 
  234414             :        // necessary, to have direct access to the p_freepointer and the private methods !
  234415             :       /*! \brief friend class declaration to support AST File I/O */
  234416             :           friend class AST_FILE_IO;
  234417             : 
  234418             :       /*! \brief friend class declaration to support AST File I/O */
  234419             :           friend class SgMinusMinusOpStorageClass;
  234420             : 
  234421             :       /*! \brief friend class declaration to support AST File I/O */
  234422             :           friend class AstSpecificDataManagingClass;
  234423             : 
  234424             :       /*! \brief friend class declaration to support AST File I/O */
  234425             :           friend class AstSpecificDataManagingClassStorageClass;
  234426             :     public:
  234427             :       /*! \brief IR node constructor to support AST File I/O */
  234428             :           SgMinusMinusOp( const SgMinusMinusOpStorageClass& source );
  234429             : 
  234430             :  // private: // JJW hack
  234431             :        /*
  234432             :           name AST Memory Allocation Support Variables
  234433             :           Memory allocations support variables 
  234434             : 
  234435             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  234436             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  234437             :           and support the AST File I/O Mechanism.
  234438             :        */
  234439             :       /* */
  234440             : 
  234441             :     public:
  234442             : 
  234443             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  234444             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  234445             :       // virtual SgNode* addRegExpAttribute();
  234446             :       /*! \brief Support for AST matching using regular expression.
  234447             : 
  234448             :           This support is incomplete and the subject of current research to define 
  234449             :           RegEx trees to support inexact matching.
  234450             :        */
  234451             :           SgMinusMinusOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  234452             : 
  234453             : // *** COMMON CODE SECTION ENDS HERE ***
  234454             : 
  234455             : 
  234456             : // End of memberFunctionString
  234457             : // Start of memberFunctionString
  234458             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  234459             : 
  234460             :      // the generated cast function
  234461             :      // friend ROSE_DLL_API SgMinusMinusOp* isSgMinusMinusOp ( SgNode* s );
  234462             : 
  234463             :           typedef SgUnaryOp base_node_type;
  234464             : 
  234465             : 
  234466             : // End of memberFunctionString
  234467             : // Start of memberFunctionString
  234468             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234469             : 
  234470             :           void post_construction_initialization() override;
  234471             : 
  234472             : 
  234473             : // End of memberFunctionString
  234474             : // Start of memberFunctionString
  234475             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234476             : 
  234477           0 :           int precedence() const override { return 15; }
  234478             : 
  234479             : 
  234480             : // End of memberFunctionString
  234481             : 
  234482             : 
  234483             :      public: 
  234484             :          virtual ~SgMinusMinusOp();
  234485             : 
  234486             : 
  234487             :      public: 
  234488             :          SgMinusMinusOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  234489             :          SgMinusMinusOp(SgExpression* operand_i, SgType* expression_type); 
  234490             : 
  234491             :     protected:
  234492             : 
  234493             :     friend struct Rose::Traits::generated::describe_node_t<SgMinusMinusOp>;
  234494             : 
  234495             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234496             : 
  234497             : 
  234498             :    };
  234499             : #endif
  234500             : 
  234501             : // postdeclarations for SgMinusMinusOp
  234502             : 
  234503             : /* #line 234504 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234504             : 
  234505             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  234506             : 
  234507             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234508             : 
  234509             : 
  234510             : /* #line 234511 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234511             : 
  234512             : 
  234513             : 
  234514             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234515             : 
  234516             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  234517             : //      This code is automatically generated for each 
  234518             : //      terminal and non-terminal within the defined 
  234519             : //      grammar.  There is a simple way to change the 
  234520             : //      code to fix bugs etc.  See the ROSE README file
  234521             : //      for directions.
  234522             : 
  234523             : // tps: (02/22/2010): Adding DLL export requirements
  234524             : #include "rosedll.h"
  234525             : 
  234526             : // predeclarations for SgPlusPlusOp
  234527             : 
  234528             : /* #line 234529 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234529             : 
  234530             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  234531             : 
  234532             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234533             : 
  234534             : #if 1
  234535             : // Class Definition for SgPlusPlusOp
  234536             : class ROSE_DLL_API SgPlusPlusOp  : public SgUnaryOp
  234537             :    {
  234538             :      public:
  234539             : 
  234540             : 
  234541             : /* #line 234542 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234542             : 
  234543             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  234544             : // Start of memberFunctionString
  234545             : /* #line 1163 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234546             : 
  234547             :           SgPlusPlusOp ( Sg_File_Info* file_info, SgExpression* operand_i, Sgop_mode a_mode );
  234548             :           SgPlusPlusOp ( SgExpression* operand_i, Sgop_mode a_mode );
  234549             : 
  234550             :        // get lvalue
  234551             :           virtual bool isLValue() const override;
  234552             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  234553             : 
  234554             : 
  234555             : 
  234556             : // End of memberFunctionString
  234557             : // Start of memberFunctionString
  234558             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  234559             : 
  234560             : // *** COMMON CODE SECTION BEGINS HERE ***
  234561             : 
  234562             :     public:
  234563             : 
  234564             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  234565             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  234566             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  234567             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  234568             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  234569             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  234570             : 
  234571             :       /*! \brief returns a string representing the class name */
  234572             :           virtual std::string class_name() const override;
  234573             : 
  234574             :       /*! \brief returns new style SageIII enum values */
  234575             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  234576             : 
  234577             :       /*! \brief static variant value */
  234578             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  234579             :        // static const VariantT static_variant = V_SgPlusPlusOp;
  234580             :           enum { static_variant = V_SgPlusPlusOp };
  234581             : 
  234582             :        /* the generated cast function */
  234583             :       /*! \brief Casts pointer from base class to derived class */
  234584             :           ROSE_DLL_API friend       SgPlusPlusOp* isSgPlusPlusOp(       SgNode * s );
  234585             : 
  234586             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  234587             :           ROSE_DLL_API friend const SgPlusPlusOp* isSgPlusPlusOp( const SgNode * s );
  234588             : 
  234589             :      // ******************************************
  234590             :      // * Memory Pool / New / Delete
  234591             :      // ******************************************
  234592             : 
  234593             :      public:
  234594             :           /// \private
  234595             :           static const unsigned pool_size; //
  234596             :           /// \private
  234597             :           static std::vector<unsigned char *> pools; //
  234598             :           /// \private
  234599             :           static SgPlusPlusOp * next_node; // 
  234600             : 
  234601             :           /// \private
  234602             :           static unsigned long initializeStorageClassArray(SgPlusPlusOpStorageClass *); //
  234603             : 
  234604             :           /// \private
  234605             :           static void clearMemoryPool(); //
  234606             :           static void deleteMemoryPool(); //
  234607             : 
  234608             :           /// \private
  234609             :           static void extendMemoryPoolForFileIO(); //
  234610             : 
  234611             :           /// \private
  234612             :           static SgPlusPlusOp * getPointerFromGlobalIndex(unsigned long); //
  234613             :           /// \private
  234614             :           static SgPlusPlusOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  234615             : 
  234616             :           /// \private
  234617             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  234618             :           /// \private
  234619             :           static void resetValidFreepointers(); //
  234620             :           /// \private
  234621             :           static unsigned long getNumberOfLastValidPointer(); //
  234622             : 
  234623             : 
  234624             : #if defined(INLINE_FUNCTIONS)
  234625             :       /*! \brief returns pointer to newly allocated IR node */
  234626             :           inline void *operator new (size_t size);
  234627             : #else
  234628             :       /*! \brief returns pointer to newly allocated IR node */
  234629             :           void *operator new (size_t size);
  234630             : #endif
  234631             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  234632             :           void operator delete (void* pointer, size_t size);
  234633             : 
  234634             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  234635         276 :           void operator delete (void* pointer)
  234636             :              {
  234637             :             // This is the generated delete operator...
  234638         276 :                SgPlusPlusOp::operator delete (pointer,sizeof(SgPlusPlusOp));
  234639             :              }
  234640             : 
  234641             :       /*! \brief Returns the total number of IR nodes of this type */
  234642             :           static size_t numberOfNodes();
  234643             : 
  234644             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  234645             :           static size_t memoryUsage();
  234646             : 
  234647             :       // End of scope which started in IR nodes specific code 
  234648             :       /* */
  234649             : 
  234650             :       /* name Internal Functions
  234651             :           \brief Internal functions ... incomplete-documentation
  234652             : 
  234653             :           These functions have been made public as part of the design, but they are suggested for internal use 
  234654             :           or by particularly knowledgeable users for specialized tools or applications.
  234655             : 
  234656             :           \internal We could not make these private because they are required by user for special purposes. And 
  234657             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  234658             :          
  234659             :        */
  234660             : 
  234661             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  234662             :        // overridden in every class by *generated* implementation
  234663             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  234664             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  234665             :        // MS: 06/28/02 container of names of variables or container indices 
  234666             :        // used used in the traversal to access AST successor nodes
  234667             :        // overridden in every class by *generated* implementation
  234668             :       /*! \brief container of names of variables or container indices used used in the traversal
  234669             :           to access AST successor nodes overridden in every class by *generated* implementation */
  234670             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  234671             : 
  234672             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  234673             :        // than all the vector copies. The implementation for these functions is generated for each class.
  234674             :       /*! \brief return number of children in the traversal successor list */
  234675             :           virtual size_t get_numberOfTraversalSuccessors() override;
  234676             :       /*! \brief index-based access to traversal successors by index number */
  234677             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  234678             :       /*! \brief index-based access to traversal successors by child node */
  234679             :           virtual size_t get_childIndex(SgNode *child) override;
  234680             : 
  234681             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  234682             :        // MS: 08/16/2002 method for generating RTI information
  234683             :       /*! \brief return C++ Runtime-Time-Information */
  234684             :           virtual RTIReturnType roseRTI() override;
  234685             : #endif
  234686             :       /* */
  234687             : 
  234688             : 
  234689             : 
  234690             :       /* name Deprecated Functions
  234691             :           \brief Deprecated functions ... incomplete-documentation
  234692             : 
  234693             :           These functions have been deprecated from use.
  234694             :        */
  234695             :       /* */
  234696             : 
  234697             :       /*! returns a C style string (char*) representing the class name */
  234698             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  234699             : 
  234700             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  234701             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  234702             : #if 0
  234703             :       /*! returns old style Sage II enum values */
  234704             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  234705             :       /*! returns old style Sage II enum values */
  234706             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  234707             : #endif
  234708             :       /* */
  234709             : 
  234710             : 
  234711             : 
  234712             : 
  234713             :      public:
  234714             :       /* name Traversal Support Functions
  234715             :           \brief Traversal support functions ... incomplete-documentation
  234716             : 
  234717             :           These functions have been made public as part of the design, but they are suggested for internal use 
  234718             :           or by particularly knowledgable users for specialized tools or applications.
  234719             :        */
  234720             :       /* */
  234721             : 
  234722             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  234723             :        // (inferior to ROSE traversal mechanism, experimental).
  234724             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  234725             :        */
  234726             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  234727             : 
  234728             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  234729             :       /*! \brief support for the classic visitor pattern done in GoF */
  234730             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  234731             : 
  234732             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  234733             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  234734             :        */
  234735             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  234736             : 
  234737             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  234738             :        */
  234739             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  234740             : 
  234741             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  234742             :        // This traversal helps support internal tools that call static member functions.
  234743             :        // note: this function operates on the memory pools.
  234744             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  234745             :        */
  234746             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  234747             :       /* */
  234748             : 
  234749             : 
  234750             :      public:
  234751             :       /* name Memory Allocation Functions
  234752             :           \brief Memory allocations functions ... incomplete-documentation
  234753             : 
  234754             :           These functions have been made public as part of the design, but they are suggested for internal use 
  234755             :           or by particularly knowledgable users for specialized tools or applications.
  234756             :        */
  234757             :       /* */
  234758             : 
  234759             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  234760             : 
  234761             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  234762             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  234763             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  234764             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  234765             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  234766             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  234767             :           being used with the AST File I/O mechanism.
  234768             :        */
  234769             :           virtual bool isInMemoryPool() override;
  234770             : 
  234771             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  234772             : 
  234773             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  234774             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  234775             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  234776             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  234777             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  234778             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  234779             :           being used with the AST File I/O mechanism.
  234780             :        */
  234781             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  234782             : 
  234783             :       // DQ (4/30/2006): Modified to be a const function.
  234784             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  234785             : 
  234786             :           This functions is part of general support for many possible tools to operate 
  234787             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  234788             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  234789             :           less than the set of pointers used by the AST file I/O. This is part of
  234790             :           work implemented by Andreas, and support tools such as the AST graph generation.
  234791             : 
  234792             :           \warning This function can return unexpected data members and thus the 
  234793             :                    order and the number of elements is unpredicable and subject 
  234794             :                    to change.
  234795             : 
  234796             :           \returns STL vector of pairs of SgNode* and strings
  234797             :        */
  234798             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  234799             : 
  234800             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  234801             : 
  234802             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  234803             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  234804             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  234805             : 
  234806             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  234807             :                    and subject to change.
  234808             :        */
  234809             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  234810             : 
  234811             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  234812             : 
  234813             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  234814             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  234815             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  234816             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  234817             : 
  234818             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  234819             : 
  234820             :           \returns long
  234821             :        */
  234822             :           virtual long getChildIndex( SgNode* childNode ) const override;
  234823             : 
  234824             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  234825             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  234826             :       /* \brief Constructor for use by AST File I/O Mechanism
  234827             : 
  234828             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  234829             :           which obtained via fast binary file I/O from disk.
  234830             :        */
  234831             :        // SgPlusPlusOp( SgPlusPlusOpStorageClass& source );
  234832             : 
  234833             : 
  234834             : 
  234835             : 
  234836             : 
  234837             :  // JH (10/24/2005): methods added to support the ast file IO
  234838             :     private:
  234839             : 
  234840             :       /* name AST Memory Allocation Support Functions
  234841             :           \brief Memory allocations support....
  234842             : 
  234843             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  234844             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  234845             :           and support the AST File I/O Mechanism.
  234846             :        */
  234847             :       /* */
  234848             : 
  234849             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  234850             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  234851             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  234852             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  234853             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  234854             :           a correspinding one in the AST_FILE_IO class!
  234855             :        */
  234856             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  234857             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  234858             :       /* \brief Typedef used for low level memory access.
  234859             :        */
  234860             :        // typedef unsigned char* TestType;
  234861             : 
  234862             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  234863             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  234864             :       /* \brief Typedef used to hold memory addresses as values.
  234865             :        */
  234866             :        // typedef unsigned long  AddressType;
  234867             : 
  234868             : 
  234869             : 
  234870             :        // necessary, to have direct access to the p_freepointer and the private methods !
  234871             :       /*! \brief friend class declaration to support AST File I/O */
  234872             :           friend class AST_FILE_IO;
  234873             : 
  234874             :       /*! \brief friend class declaration to support AST File I/O */
  234875             :           friend class SgPlusPlusOpStorageClass;
  234876             : 
  234877             :       /*! \brief friend class declaration to support AST File I/O */
  234878             :           friend class AstSpecificDataManagingClass;
  234879             : 
  234880             :       /*! \brief friend class declaration to support AST File I/O */
  234881             :           friend class AstSpecificDataManagingClassStorageClass;
  234882             :     public:
  234883             :       /*! \brief IR node constructor to support AST File I/O */
  234884             :           SgPlusPlusOp( const SgPlusPlusOpStorageClass& source );
  234885             : 
  234886             :  // private: // JJW hack
  234887             :        /*
  234888             :           name AST Memory Allocation Support Variables
  234889             :           Memory allocations support variables 
  234890             : 
  234891             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  234892             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  234893             :           and support the AST File I/O Mechanism.
  234894             :        */
  234895             :       /* */
  234896             : 
  234897             :     public:
  234898             : 
  234899             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  234900             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  234901             :       // virtual SgNode* addRegExpAttribute();
  234902             :       /*! \brief Support for AST matching using regular expression.
  234903             : 
  234904             :           This support is incomplete and the subject of current research to define 
  234905             :           RegEx trees to support inexact matching.
  234906             :        */
  234907             :           SgPlusPlusOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  234908             : 
  234909             : // *** COMMON CODE SECTION ENDS HERE ***
  234910             : 
  234911             : 
  234912             : // End of memberFunctionString
  234913             : // Start of memberFunctionString
  234914             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  234915             : 
  234916             :      // the generated cast function
  234917             :      // friend ROSE_DLL_API SgPlusPlusOp* isSgPlusPlusOp ( SgNode* s );
  234918             : 
  234919             :           typedef SgUnaryOp base_node_type;
  234920             : 
  234921             : 
  234922             : // End of memberFunctionString
  234923             : // Start of memberFunctionString
  234924             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234925             : 
  234926             :           void post_construction_initialization() override;
  234927             : 
  234928             : 
  234929             : // End of memberFunctionString
  234930             : // Start of memberFunctionString
  234931             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  234932             : 
  234933           0 :           int precedence() const override { return 15; }
  234934             : 
  234935             : 
  234936             : // End of memberFunctionString
  234937             : 
  234938             : 
  234939             :      public: 
  234940             :          virtual ~SgPlusPlusOp();
  234941             : 
  234942             : 
  234943             :      public: 
  234944             :          SgPlusPlusOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  234945             :          SgPlusPlusOp(SgExpression* operand_i, SgType* expression_type); 
  234946             : 
  234947             :     protected:
  234948             : 
  234949             :     friend struct Rose::Traits::generated::describe_node_t<SgPlusPlusOp>;
  234950             : 
  234951             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234952             : 
  234953             : 
  234954             :    };
  234955             : #endif
  234956             : 
  234957             : // postdeclarations for SgPlusPlusOp
  234958             : 
  234959             : /* #line 234960 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234960             : 
  234961             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  234962             : 
  234963             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234964             : 
  234965             : 
  234966             : /* #line 234967 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234967             : 
  234968             : 
  234969             : 
  234970             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234971             : 
  234972             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  234973             : //      This code is automatically generated for each 
  234974             : //      terminal and non-terminal within the defined 
  234975             : //      grammar.  There is a simple way to change the 
  234976             : //      code to fix bugs etc.  See the ROSE README file
  234977             : //      for directions.
  234978             : 
  234979             : // tps: (02/22/2010): Adding DLL export requirements
  234980             : #include "rosedll.h"
  234981             : 
  234982             : // predeclarations for SgBitComplementOp
  234983             : 
  234984             : /* #line 234985 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234985             : 
  234986             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  234987             : 
  234988             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  234989             : 
  234990             : #if 1
  234991             : // Class Definition for SgBitComplementOp
  234992             : class ROSE_DLL_API SgBitComplementOp  : public SgUnaryOp
  234993             :    {
  234994             :      public:
  234995             : 
  234996             : 
  234997             : /* #line 234998 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  234998             : 
  234999             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  235000             : // Start of memberFunctionString
  235001             : /* #line 1174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  235002             : 
  235003             : 
  235004             : 
  235005             : // End of memberFunctionString
  235006             : // Start of memberFunctionString
  235007             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  235008             : 
  235009             : // *** COMMON CODE SECTION BEGINS HERE ***
  235010             : 
  235011             :     public:
  235012             : 
  235013             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  235014             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  235015             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  235016             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  235017             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  235018             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  235019             : 
  235020             :       /*! \brief returns a string representing the class name */
  235021             :           virtual std::string class_name() const override;
  235022             : 
  235023             :       /*! \brief returns new style SageIII enum values */
  235024             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  235025             : 
  235026             :       /*! \brief static variant value */
  235027             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  235028             :        // static const VariantT static_variant = V_SgBitComplementOp;
  235029             :           enum { static_variant = V_SgBitComplementOp };
  235030             : 
  235031             :        /* the generated cast function */
  235032             :       /*! \brief Casts pointer from base class to derived class */
  235033             :           ROSE_DLL_API friend       SgBitComplementOp* isSgBitComplementOp(       SgNode * s );
  235034             : 
  235035             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  235036             :           ROSE_DLL_API friend const SgBitComplementOp* isSgBitComplementOp( const SgNode * s );
  235037             : 
  235038             :      // ******************************************
  235039             :      // * Memory Pool / New / Delete
  235040             :      // ******************************************
  235041             : 
  235042             :      public:
  235043             :           /// \private
  235044             :           static const unsigned pool_size; //
  235045             :           /// \private
  235046             :           static std::vector<unsigned char *> pools; //
  235047             :           /// \private
  235048             :           static SgBitComplementOp * next_node; // 
  235049             : 
  235050             :           /// \private
  235051             :           static unsigned long initializeStorageClassArray(SgBitComplementOpStorageClass *); //
  235052             : 
  235053             :           /// \private
  235054             :           static void clearMemoryPool(); //
  235055             :           static void deleteMemoryPool(); //
  235056             : 
  235057             :           /// \private
  235058             :           static void extendMemoryPoolForFileIO(); //
  235059             : 
  235060             :           /// \private
  235061             :           static SgBitComplementOp * getPointerFromGlobalIndex(unsigned long); //
  235062             :           /// \private
  235063             :           static SgBitComplementOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  235064             : 
  235065             :           /// \private
  235066             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  235067             :           /// \private
  235068             :           static void resetValidFreepointers(); //
  235069             :           /// \private
  235070             :           static unsigned long getNumberOfLastValidPointer(); //
  235071             : 
  235072             : 
  235073             : #if defined(INLINE_FUNCTIONS)
  235074             :       /*! \brief returns pointer to newly allocated IR node */
  235075             :           inline void *operator new (size_t size);
  235076             : #else
  235077             :       /*! \brief returns pointer to newly allocated IR node */
  235078             :           void *operator new (size_t size);
  235079             : #endif
  235080             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  235081             :           void operator delete (void* pointer, size_t size);
  235082             : 
  235083             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  235084          70 :           void operator delete (void* pointer)
  235085             :              {
  235086             :             // This is the generated delete operator...
  235087          70 :                SgBitComplementOp::operator delete (pointer,sizeof(SgBitComplementOp));
  235088             :              }
  235089             : 
  235090             :       /*! \brief Returns the total number of IR nodes of this type */
  235091             :           static size_t numberOfNodes();
  235092             : 
  235093             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  235094             :           static size_t memoryUsage();
  235095             : 
  235096             :       // End of scope which started in IR nodes specific code 
  235097             :       /* */
  235098             : 
  235099             :       /* name Internal Functions
  235100             :           \brief Internal functions ... incomplete-documentation
  235101             : 
  235102             :           These functions have been made public as part of the design, but they are suggested for internal use 
  235103             :           or by particularly knowledgeable users for specialized tools or applications.
  235104             : 
  235105             :           \internal We could not make these private because they are required by user for special purposes. And 
  235106             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  235107             :          
  235108             :        */
  235109             : 
  235110             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  235111             :        // overridden in every class by *generated* implementation
  235112             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  235113             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  235114             :        // MS: 06/28/02 container of names of variables or container indices 
  235115             :        // used used in the traversal to access AST successor nodes
  235116             :        // overridden in every class by *generated* implementation
  235117             :       /*! \brief container of names of variables or container indices used used in the traversal
  235118             :           to access AST successor nodes overridden in every class by *generated* implementation */
  235119             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  235120             : 
  235121             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  235122             :        // than all the vector copies. The implementation for these functions is generated for each class.
  235123             :       /*! \brief return number of children in the traversal successor list */
  235124             :           virtual size_t get_numberOfTraversalSuccessors() override;
  235125             :       /*! \brief index-based access to traversal successors by index number */
  235126             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  235127             :       /*! \brief index-based access to traversal successors by child node */
  235128             :           virtual size_t get_childIndex(SgNode *child) override;
  235129             : 
  235130             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  235131             :        // MS: 08/16/2002 method for generating RTI information
  235132             :       /*! \brief return C++ Runtime-Time-Information */
  235133             :           virtual RTIReturnType roseRTI() override;
  235134             : #endif
  235135             :       /* */
  235136             : 
  235137             : 
  235138             : 
  235139             :       /* name Deprecated Functions
  235140             :           \brief Deprecated functions ... incomplete-documentation
  235141             : 
  235142             :           These functions have been deprecated from use.
  235143             :        */
  235144             :       /* */
  235145             : 
  235146             :       /*! returns a C style string (char*) representing the class name */
  235147             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  235148             : 
  235149             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  235150             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  235151             : #if 0
  235152             :       /*! returns old style Sage II enum values */
  235153             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  235154             :       /*! returns old style Sage II enum values */
  235155             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  235156             : #endif
  235157             :       /* */
  235158             : 
  235159             : 
  235160             : 
  235161             : 
  235162             :      public:
  235163             :       /* name Traversal Support Functions
  235164             :           \brief Traversal support functions ... incomplete-documentation
  235165             : 
  235166             :           These functions have been made public as part of the design, but they are suggested for internal use 
  235167             :           or by particularly knowledgable users for specialized tools or applications.
  235168             :        */
  235169             :       /* */
  235170             : 
  235171             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  235172             :        // (inferior to ROSE traversal mechanism, experimental).
  235173             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  235174             :        */
  235175             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  235176             : 
  235177             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  235178             :       /*! \brief support for the classic visitor pattern done in GoF */
  235179             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  235180             : 
  235181             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  235182             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  235183             :        */
  235184             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  235185             : 
  235186             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  235187             :        */
  235188             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  235189             : 
  235190             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  235191             :        // This traversal helps support internal tools that call static member functions.
  235192             :        // note: this function operates on the memory pools.
  235193             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  235194             :        */
  235195             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  235196             :       /* */
  235197             : 
  235198             : 
  235199             :      public:
  235200             :       /* name Memory Allocation Functions
  235201             :           \brief Memory allocations functions ... incomplete-documentation
  235202             : 
  235203             :           These functions have been made public as part of the design, but they are suggested for internal use 
  235204             :           or by particularly knowledgable users for specialized tools or applications.
  235205             :        */
  235206             :       /* */
  235207             : 
  235208             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  235209             : 
  235210             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  235211             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  235212             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  235213             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  235214             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  235215             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  235216             :           being used with the AST File I/O mechanism.
  235217             :        */
  235218             :           virtual bool isInMemoryPool() override;
  235219             : 
  235220             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  235221             : 
  235222             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  235223             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  235224             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  235225             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  235226             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  235227             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  235228             :           being used with the AST File I/O mechanism.
  235229             :        */
  235230             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  235231             : 
  235232             :       // DQ (4/30/2006): Modified to be a const function.
  235233             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  235234             : 
  235235             :           This functions is part of general support for many possible tools to operate 
  235236             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  235237             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  235238             :           less than the set of pointers used by the AST file I/O. This is part of
  235239             :           work implemented by Andreas, and support tools such as the AST graph generation.
  235240             : 
  235241             :           \warning This function can return unexpected data members and thus the 
  235242             :                    order and the number of elements is unpredicable and subject 
  235243             :                    to change.
  235244             : 
  235245             :           \returns STL vector of pairs of SgNode* and strings
  235246             :        */
  235247             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  235248             : 
  235249             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  235250             : 
  235251             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  235252             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  235253             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  235254             : 
  235255             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  235256             :                    and subject to change.
  235257             :        */
  235258             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  235259             : 
  235260             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  235261             : 
  235262             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  235263             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  235264             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  235265             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  235266             : 
  235267             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  235268             : 
  235269             :           \returns long
  235270             :        */
  235271             :           virtual long getChildIndex( SgNode* childNode ) const override;
  235272             : 
  235273             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  235274             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  235275             :       /* \brief Constructor for use by AST File I/O Mechanism
  235276             : 
  235277             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  235278             :           which obtained via fast binary file I/O from disk.
  235279             :        */
  235280             :        // SgBitComplementOp( SgBitComplementOpStorageClass& source );
  235281             : 
  235282             : 
  235283             : 
  235284             : 
  235285             : 
  235286             :  // JH (10/24/2005): methods added to support the ast file IO
  235287             :     private:
  235288             : 
  235289             :       /* name AST Memory Allocation Support Functions
  235290             :           \brief Memory allocations support....
  235291             : 
  235292             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  235293             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  235294             :           and support the AST File I/O Mechanism.
  235295             :        */
  235296             :       /* */
  235297             : 
  235298             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  235299             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  235300             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  235301             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  235302             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  235303             :           a correspinding one in the AST_FILE_IO class!
  235304             :        */
  235305             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  235306             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  235307             :       /* \brief Typedef used for low level memory access.
  235308             :        */
  235309             :        // typedef unsigned char* TestType;
  235310             : 
  235311             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  235312             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  235313             :       /* \brief Typedef used to hold memory addresses as values.
  235314             :        */
  235315             :        // typedef unsigned long  AddressType;
  235316             : 
  235317             : 
  235318             : 
  235319             :        // necessary, to have direct access to the p_freepointer and the private methods !
  235320             :       /*! \brief friend class declaration to support AST File I/O */
  235321             :           friend class AST_FILE_IO;
  235322             : 
  235323             :       /*! \brief friend class declaration to support AST File I/O */
  235324             :           friend class SgBitComplementOpStorageClass;
  235325             : 
  235326             :       /*! \brief friend class declaration to support AST File I/O */
  235327             :           friend class AstSpecificDataManagingClass;
  235328             : 
  235329             :       /*! \brief friend class declaration to support AST File I/O */
  235330             :           friend class AstSpecificDataManagingClassStorageClass;
  235331             :     public:
  235332             :       /*! \brief IR node constructor to support AST File I/O */
  235333             :           SgBitComplementOp( const SgBitComplementOpStorageClass& source );
  235334             : 
  235335             :  // private: // JJW hack
  235336             :        /*
  235337             :           name AST Memory Allocation Support Variables
  235338             :           Memory allocations support variables 
  235339             : 
  235340             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  235341             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  235342             :           and support the AST File I/O Mechanism.
  235343             :        */
  235344             :       /* */
  235345             : 
  235346             :     public:
  235347             : 
  235348             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  235349             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  235350             :       // virtual SgNode* addRegExpAttribute();
  235351             :       /*! \brief Support for AST matching using regular expression.
  235352             : 
  235353             :           This support is incomplete and the subject of current research to define 
  235354             :           RegEx trees to support inexact matching.
  235355             :        */
  235356             :           SgBitComplementOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  235357             : 
  235358             : // *** COMMON CODE SECTION ENDS HERE ***
  235359             : 
  235360             : 
  235361             : // End of memberFunctionString
  235362             : // Start of memberFunctionString
  235363             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  235364             : 
  235365             :      // the generated cast function
  235366             :      // friend ROSE_DLL_API SgBitComplementOp* isSgBitComplementOp ( SgNode* s );
  235367             : 
  235368             :           typedef SgUnaryOp base_node_type;
  235369             : 
  235370             : 
  235371             : // End of memberFunctionString
  235372             : // Start of memberFunctionString
  235373             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  235374             : 
  235375             :           void post_construction_initialization() override;
  235376             : 
  235377             : 
  235378             : // End of memberFunctionString
  235379             : // Start of memberFunctionString
  235380             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  235381             : 
  235382           0 :           int precedence() const override { return 15; }
  235383             : 
  235384             : 
  235385             : // End of memberFunctionString
  235386             : 
  235387             : 
  235388             :      public: 
  235389             :          virtual ~SgBitComplementOp();
  235390             : 
  235391             : 
  235392             :      public: 
  235393             :          SgBitComplementOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  235394             :          SgBitComplementOp(SgExpression* operand_i, SgType* expression_type); 
  235395             : 
  235396             :     protected:
  235397             : 
  235398             :     friend struct Rose::Traits::generated::describe_node_t<SgBitComplementOp>;
  235399             : 
  235400             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  235401             : 
  235402             : 
  235403             :    };
  235404             : #endif
  235405             : 
  235406             : // postdeclarations for SgBitComplementOp
  235407             : 
  235408             : /* #line 235409 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  235409             : 
  235410             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  235411             : 
  235412             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  235413             : 
  235414             : 
  235415             : /* #line 235416 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  235416             : 
  235417             : 
  235418             : 
  235419             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  235420             : 
  235421             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  235422             : //      This code is automatically generated for each 
  235423             : //      terminal and non-terminal within the defined 
  235424             : //      grammar.  There is a simple way to change the 
  235425             : //      code to fix bugs etc.  See the ROSE README file
  235426             : //      for directions.
  235427             : 
  235428             : // tps: (02/22/2010): Adding DLL export requirements
  235429             : #include "rosedll.h"
  235430             : 
  235431             : // predeclarations for SgCastExp
  235432             : 
  235433             : /* #line 235434 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  235434             : 
  235435             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  235436             : 
  235437             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  235438             : 
  235439             : #if 1
  235440             : // Class Definition for SgCastExp
  235441             : class ROSE_DLL_API SgCastExp  : public SgUnaryOp
  235442             :    {
  235443             :      public:
  235444             : 
  235445             : 
  235446             : /* #line 235447 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  235447             : 
  235448             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  235449             : // Start of memberFunctionString
  235450             : /* #line 1205 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  235451             : 
  235452             :        // DQ (6/14/2005): Modified to make enum name consistant with elsewhere in ROSE (Sage III)
  235453             :        // enum Sg_e_cast_type
  235454             :       /*! \brief Classification of Casts
  235455             : 
  235456             :           Must be either C style cast or C++ style const_cast<>, static_cast<>,
  235457             :           dynamic_cast<>, or reinterpret_cast<>.
  235458             : 
  235459             :           \internal Only a single value is permited.
  235460             :        */
  235461             :           enum cast_type_enum
  235462             :              {
  235463             :                e_unknown               = 0, /*!< Unknown value (error value) */
  235464             :                e_default               = 1, /*!< Default value (default) */
  235465             :                e_C_style_cast          = 2, /*!< C style cast */
  235466             :                e_const_cast            = 3, /*!< C++ const cast */
  235467             :                e_static_cast           = 4, /*!< C++ static cast */
  235468             :                e_dynamic_cast          = 5, /*!< C++ dynamic cast */
  235469             :                e_reinterpret_cast      = 6,  /*!< C++ reinterpret cast */
  235470             :             // DQ (8/22/2016): Adding more comprehensive setting of cast semantics (as part of improved C++ cast support).
  235471             :             // Not clear if these really need to be present.
  235472             :             // e_reference_cast        = 7, /*!< C++ reference cast (base class cast) */
  235473             :             // e_rvalue_reference_cast = 8,  /*!< C++ rvalue reference cast (base class cast to rvalue) */
  235474             :                e_safe_cast             = 8, /*!< C++ MSVC specific safe cast */
  235475             :                e_last_cast  /*!< Last entry in enum of cast types */
  235476             :              };
  235477             : 
  235478             :        // Sg_e_cast_type cast_type();
  235479             :           cast_type_enum cast_type() const;
  235480             : 
  235481             :        // DQ (1/16/2006): Added to support special version of get_type which uses the p_expression_type
  235482             :        // (one of the few places where we have to store the expression type explicitly).
  235483             :           SgType* get_type() const override;
  235484             : 
  235485             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  235486             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override; // CFG children do not match traversalSuccessorContainer
  235487             : #endif
  235488             : 
  235489             :        // DQ (1/17/2008): Added to permit the type to be set.
  235490             :           void set_type (SgType* type);
  235491             : 
  235492             :        // get lvalue
  235493             :           virtual bool isLValue() const override;
  235494             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  235495             : 
  235496             :        // DQ (10/24/2014): Added support to determine when cast should be allowable.
  235497             :        // This is used in the SageInterace support for evaluation of constant expressions.
  235498             :           bool cast_looses_precision();
  235499             : 
  235500             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  235501             :           int get_name_qualification_length() const override;
  235502             :           void set_name_qualification_length(int name_qualification_length) override;
  235503             : 
  235504             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  235505             :           bool get_type_elaboration_required() const override;
  235506             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  235507             : 
  235508             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  235509             :           bool get_global_qualification_required() const override;
  235510             :           void set_global_qualification_required(bool global_qualification_required) override;
  235511             : 
  235512             :           static std::string cast_type_to_string ( enum cast_type_enum );
  235513             : 
  235514             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  235515             :           int get_name_qualification_for_pointer_to_member_class_length() const override;
  235516             :           void set_name_qualification_for_pointer_to_member_class_length(int name_qualification_length) override;
  235517             : 
  235518             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  235519             :           bool get_type_elaboration_for_pointer_to_member_class_required() const override;
  235520             :           void set_type_elaboration_for_pointer_to_member_class_required(bool type_elaboration_required) override;
  235521             : 
  235522             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  235523             :           bool get_global_qualification_for_pointer_to_member_class_required() const override;
  235524             :           void set_global_qualification_for_pointer_to_member_class_required(bool global_qualification_required) override;
  235525             : 
  235526             : 
  235527             : 
  235528             : // End of memberFunctionString
  235529             : // Start of memberFunctionString
  235530             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  235531             : 
  235532             : // *** COMMON CODE SECTION BEGINS HERE ***
  235533             : 
  235534             :     public:
  235535             : 
  235536             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  235537             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  235538             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  235539             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  235540             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  235541             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  235542             : 
  235543             :       /*! \brief returns a string representing the class name */
  235544             :           virtual std::string class_name() const override;
  235545             : 
  235546             :       /*! \brief returns new style SageIII enum values */
  235547             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  235548             : 
  235549             :       /*! \brief static variant value */
  235550             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  235551             :        // static const VariantT static_variant = V_SgCastExp;
  235552             :           enum { static_variant = V_SgCastExp };
  235553             : 
  235554             :        /* the generated cast function */
  235555             :       /*! \brief Casts pointer from base class to derived class */
  235556             :           ROSE_DLL_API friend       SgCastExp* isSgCastExp(       SgNode * s );
  235557             : 
  235558             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  235559             :           ROSE_DLL_API friend const SgCastExp* isSgCastExp( const SgNode * s );
  235560             : 
  235561             :      // ******************************************
  235562             :      // * Memory Pool / New / Delete
  235563             :      // ******************************************
  235564             : 
  235565             :      public:
  235566             :           /// \private
  235567             :           static const unsigned pool_size; //
  235568             :           /// \private
  235569             :           static std::vector<unsigned char *> pools; //
  235570             :           /// \private
  235571             :           static SgCastExp * next_node; // 
  235572             : 
  235573             :           /// \private
  235574             :           static unsigned long initializeStorageClassArray(SgCastExpStorageClass *); //
  235575             : 
  235576             :           /// \private
  235577             :           static void clearMemoryPool(); //
  235578             :           static void deleteMemoryPool(); //
  235579             : 
  235580             :           /// \private
  235581             :           static void extendMemoryPoolForFileIO(); //
  235582             : 
  235583             :           /// \private
  235584             :           static SgCastExp * getPointerFromGlobalIndex(unsigned long); //
  235585             :           /// \private
  235586             :           static SgCastExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  235587             : 
  235588             :           /// \private
  235589             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  235590             :           /// \private
  235591             :           static void resetValidFreepointers(); //
  235592             :           /// \private
  235593             :           static unsigned long getNumberOfLastValidPointer(); //
  235594             : 
  235595             : 
  235596             : #if defined(INLINE_FUNCTIONS)
  235597             :       /*! \brief returns pointer to newly allocated IR node */
  235598             :           inline void *operator new (size_t size);
  235599             : #else
  235600             :       /*! \brief returns pointer to newly allocated IR node */
  235601             :           void *operator new (size_t size);
  235602             : #endif
  235603             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  235604             :           void operator delete (void* pointer, size_t size);
  235605             : 
  235606             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  235607        8044 :           void operator delete (void* pointer)
  235608             :              {
  235609             :             // This is the generated delete operator...
  235610        8044 :                SgCastExp::operator delete (pointer,sizeof(SgCastExp));
  235611             :              }
  235612             : 
  235613             :       /*! \brief Returns the total number of IR nodes of this type */
  235614             :           static size_t numberOfNodes();
  235615             : 
  235616             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  235617             :           static size_t memoryUsage();
  235618             : 
  235619             :       // End of scope which started in IR nodes specific code 
  235620             :       /* */
  235621             : 
  235622             :       /* name Internal Functions
  235623             :           \brief Internal functions ... incomplete-documentation
  235624             : 
  235625             :           These functions have been made public as part of the design, but they are suggested for internal use 
  235626             :           or by particularly knowledgeable users for specialized tools or applications.
  235627             : 
  235628             :           \internal We could not make these private because they are required by user for special purposes. And 
  235629             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  235630             :          
  235631             :        */
  235632             : 
  235633             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  235634             :        // overridden in every class by *generated* implementation
  235635             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  235636             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  235637             :        // MS: 06/28/02 container of names of variables or container indices 
  235638             :        // used used in the traversal to access AST successor nodes
  235639             :        // overridden in every class by *generated* implementation
  235640             :       /*! \brief container of names of variables or container indices used used in the traversal
  235641             :           to access AST successor nodes overridden in every class by *generated* implementation */
  235642             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  235643             : 
  235644             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  235645             :        // than all the vector copies. The implementation for these functions is generated for each class.
  235646             :       /*! \brief return number of children in the traversal successor list */
  235647             :           virtual size_t get_numberOfTraversalSuccessors() override;
  235648             :       /*! \brief index-based access to traversal successors by index number */
  235649             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  235650             :       /*! \brief index-based access to traversal successors by child node */
  235651             :           virtual size_t get_childIndex(SgNode *child) override;
  235652             : 
  235653             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  235654             :        // MS: 08/16/2002 method for generating RTI information
  235655             :       /*! \brief return C++ Runtime-Time-Information */
  235656             :           virtual RTIReturnType roseRTI() override;
  235657             : #endif
  235658             :       /* */
  235659             : 
  235660             : 
  235661             : 
  235662             :       /* name Deprecated Functions
  235663             :           \brief Deprecated functions ... incomplete-documentation
  235664             : 
  235665             :           These functions have been deprecated from use.
  235666             :        */
  235667             :       /* */
  235668             : 
  235669             :       /*! returns a C style string (char*) representing the class name */
  235670             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  235671             : 
  235672             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  235673             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  235674             : #if 0
  235675             :       /*! returns old style Sage II enum values */
  235676             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  235677             :       /*! returns old style Sage II enum values */
  235678             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  235679             : #endif
  235680             :       /* */
  235681             : 
  235682             : 
  235683             : 
  235684             : 
  235685             :      public:
  235686             :       /* name Traversal Support Functions
  235687             :           \brief Traversal support functions ... incomplete-documentation
  235688             : 
  235689             :           These functions have been made public as part of the design, but they are suggested for internal use 
  235690             :           or by particularly knowledgable users for specialized tools or applications.
  235691             :        */
  235692             :       /* */
  235693             : 
  235694             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  235695             :        // (inferior to ROSE traversal mechanism, experimental).
  235696             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  235697             :        */
  235698             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  235699             : 
  235700             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  235701             :       /*! \brief support for the classic visitor pattern done in GoF */
  235702             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  235703             : 
  235704             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  235705             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  235706             :        */
  235707             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  235708             : 
  235709             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  235710             :        */
  235711             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  235712             : 
  235713             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  235714             :        // This traversal helps support internal tools that call static member functions.
  235715             :        // note: this function operates on the memory pools.
  235716             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  235717             :        */
  235718             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  235719             :       /* */
  235720             : 
  235721             : 
  235722             :      public:
  235723             :       /* name Memory Allocation Functions
  235724             :           \brief Memory allocations functions ... incomplete-documentation
  235725             : 
  235726             :           These functions have been made public as part of the design, but they are suggested for internal use 
  235727             :           or by particularly knowledgable users for specialized tools or applications.
  235728             :        */
  235729             :       /* */
  235730             : 
  235731             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  235732             : 
  235733             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  235734             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  235735             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  235736             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  235737             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  235738             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  235739             :           being used with the AST File I/O mechanism.
  235740             :        */
  235741             :           virtual bool isInMemoryPool() override;
  235742             : 
  235743             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  235744             : 
  235745             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  235746             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  235747             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  235748             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  235749             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  235750             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  235751             :           being used with the AST File I/O mechanism.
  235752             :        */
  235753             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  235754             : 
  235755             :       // DQ (4/30/2006): Modified to be a const function.
  235756             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  235757             : 
  235758             :           This functions is part of general support for many possible tools to operate 
  235759             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  235760             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  235761             :           less than the set of pointers used by the AST file I/O. This is part of
  235762             :           work implemented by Andreas, and support tools such as the AST graph generation.
  235763             : 
  235764             :           \warning This function can return unexpected data members and thus the 
  235765             :                    order and the number of elements is unpredicable and subject 
  235766             :                    to change.
  235767             : 
  235768             :           \returns STL vector of pairs of SgNode* and strings
  235769             :        */
  235770             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  235771             : 
  235772             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  235773             : 
  235774             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  235775             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  235776             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  235777             : 
  235778             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  235779             :                    and subject to change.
  235780             :        */
  235781             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  235782             : 
  235783             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  235784             : 
  235785             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  235786             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  235787             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  235788             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  235789             : 
  235790             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  235791             : 
  235792             :           \returns long
  235793             :        */
  235794             :           virtual long getChildIndex( SgNode* childNode ) const override;
  235795             : 
  235796             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  235797             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  235798             :       /* \brief Constructor for use by AST File I/O Mechanism
  235799             : 
  235800             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  235801             :           which obtained via fast binary file I/O from disk.
  235802             :        */
  235803             :        // SgCastExp( SgCastExpStorageClass& source );
  235804             : 
  235805             : 
  235806             : 
  235807             : 
  235808             : 
  235809             :  // JH (10/24/2005): methods added to support the ast file IO
  235810             :     private:
  235811             : 
  235812             :       /* name AST Memory Allocation Support Functions
  235813             :           \brief Memory allocations support....
  235814             : 
  235815             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  235816             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  235817             :           and support the AST File I/O Mechanism.
  235818             :        */
  235819             :       /* */
  235820             : 
  235821             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  235822             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  235823             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  235824             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  235825             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  235826             :           a correspinding one in the AST_FILE_IO class!
  235827             :        */
  235828             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  235829             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  235830             :       /* \brief Typedef used for low level memory access.
  235831             :        */
  235832             :        // typedef unsigned char* TestType;
  235833             : 
  235834             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  235835             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  235836             :       /* \brief Typedef used to hold memory addresses as values.
  235837             :        */
  235838             :        // typedef unsigned long  AddressType;
  235839             : 
  235840             : 
  235841             : 
  235842             :        // necessary, to have direct access to the p_freepointer and the private methods !
  235843             :       /*! \brief friend class declaration to support AST File I/O */
  235844             :           friend class AST_FILE_IO;
  235845             : 
  235846             :       /*! \brief friend class declaration to support AST File I/O */
  235847             :           friend class SgCastExpStorageClass;
  235848             : 
  235849             :       /*! \brief friend class declaration to support AST File I/O */
  235850             :           friend class AstSpecificDataManagingClass;
  235851             : 
  235852             :       /*! \brief friend class declaration to support AST File I/O */
  235853             :           friend class AstSpecificDataManagingClassStorageClass;
  235854             :     public:
  235855             :       /*! \brief IR node constructor to support AST File I/O */
  235856             :           SgCastExp( const SgCastExpStorageClass& source );
  235857             : 
  235858             :  // private: // JJW hack
  235859             :        /*
  235860             :           name AST Memory Allocation Support Variables
  235861             :           Memory allocations support variables 
  235862             : 
  235863             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  235864             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  235865             :           and support the AST File I/O Mechanism.
  235866             :        */
  235867             :       /* */
  235868             : 
  235869             :     public:
  235870             : 
  235871             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  235872             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  235873             :       // virtual SgNode* addRegExpAttribute();
  235874             :       /*! \brief Support for AST matching using regular expression.
  235875             : 
  235876             :           This support is incomplete and the subject of current research to define 
  235877             :           RegEx trees to support inexact matching.
  235878             :        */
  235879             :           SgCastExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  235880             : 
  235881             : // *** COMMON CODE SECTION ENDS HERE ***
  235882             : 
  235883             : 
  235884             : // End of memberFunctionString
  235885             : // Start of memberFunctionString
  235886             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  235887             : 
  235888             :      // the generated cast function
  235889             :      // friend ROSE_DLL_API SgCastExp* isSgCastExp ( SgNode* s );
  235890             : 
  235891             :           typedef SgUnaryOp base_node_type;
  235892             : 
  235893             : 
  235894             : // End of memberFunctionString
  235895             : // Start of memberFunctionString
  235896             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  235897             : 
  235898             :           void post_construction_initialization() override;
  235899             : 
  235900             : 
  235901             : // End of memberFunctionString
  235902             : // Start of memberFunctionString
  235903             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  235904             : 
  235905           0 :           int precedence() const override { return 15; }
  235906             : 
  235907             : 
  235908             : // End of memberFunctionString
  235909             : 
  235910             :      public: 
  235911             :          SgCastExp::cast_type_enum get_cast_type() const;
  235912             :          void set_cast_type(SgCastExp::cast_type_enum cast_type);
  235913             : 
  235914             :      public: 
  235915             :          SgExpression* get_originalExpressionTree() const override /* (getDataAccessFunctionPrototypeString) */;
  235916             :          void set_originalExpressionTree(SgExpression* originalExpressionTree) override /* (getDataAccessFunctionPrototypeString) */;
  235917             : 
  235918             : 
  235919             : 
  235920             : 
  235921             :      public: 
  235922             :          bool get_castContainsBaseTypeDefiningDeclaration() const;
  235923             :          void set_castContainsBaseTypeDefiningDeclaration(bool castContainsBaseTypeDefiningDeclaration);
  235924             : 
  235925             : 
  235926             : 
  235927             : 
  235928             : 
  235929             :      public: 
  235930             :          virtual ~SgCastExp();
  235931             : 
  235932             : 
  235933             :      public: 
  235934             :          SgCastExp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL, SgCastExp::cast_type_enum cast_type = SgCastExp::e_C_style_cast); 
  235935             :          SgCastExp(SgExpression* operand_i, SgType* expression_type, SgCastExp::cast_type_enum cast_type); 
  235936             : 
  235937             :     protected:
  235938             : // Start of memberFunctionString
  235939             : SgCastExp::cast_type_enum p_cast_type;
  235940             :           
  235941             : // End of memberFunctionString
  235942             : // Start of memberFunctionString
  235943             : SgExpression* p_originalExpressionTree;
  235944             :           
  235945             : // End of memberFunctionString
  235946             : // Start of memberFunctionString
  235947             : int p_name_qualification_length;
  235948             :           
  235949             : // End of memberFunctionString
  235950             : // Start of memberFunctionString
  235951             : bool p_type_elaboration_required;
  235952             :           
  235953             : // End of memberFunctionString
  235954             : // Start of memberFunctionString
  235955             : bool p_global_qualification_required;
  235956             :           
  235957             : // End of memberFunctionString
  235958             : // Start of memberFunctionString
  235959             : bool p_castContainsBaseTypeDefiningDeclaration;
  235960             :           
  235961             : // End of memberFunctionString
  235962             : // Start of memberFunctionString
  235963             : int p_name_qualification_for_pointer_to_member_class_length;
  235964             :           
  235965             : // End of memberFunctionString
  235966             : // Start of memberFunctionString
  235967             : bool p_type_elaboration_for_pointer_to_member_class_required;
  235968             :           
  235969             : // End of memberFunctionString
  235970             : // Start of memberFunctionString
  235971             : bool p_global_qualification_for_pointer_to_member_class_required;
  235972             :           
  235973             : // End of memberFunctionString
  235974             : 
  235975             :     friend struct Rose::Traits::generated::describe_node_t<SgCastExp>;
  235976             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, SgCastExp::cast_type_enum,&SgCastExp::p_cast_type>;
  235977             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, SgExpression*,&SgCastExp::p_originalExpressionTree>;
  235978             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, int,&SgCastExp::p_name_qualification_length>;
  235979             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, bool,&SgCastExp::p_type_elaboration_required>;
  235980             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, bool,&SgCastExp::p_global_qualification_required>;
  235981             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, bool,&SgCastExp::p_castContainsBaseTypeDefiningDeclaration>;
  235982             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, int,&SgCastExp::p_name_qualification_for_pointer_to_member_class_length>;
  235983             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, bool,&SgCastExp::p_type_elaboration_for_pointer_to_member_class_required>;
  235984             :     friend struct Rose::Traits::generated::describe_field_t<SgCastExp, bool,&SgCastExp::p_global_qualification_for_pointer_to_member_class_required>;
  235985             : 
  235986             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  235987             : 
  235988             : 
  235989             :    };
  235990             : #endif
  235991             : 
  235992             : // postdeclarations for SgCastExp
  235993             : 
  235994             : /* #line 235995 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  235995             : 
  235996             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  235997             : 
  235998             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  235999             : 
  236000             : 
  236001             : /* #line 236002 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236002             : 
  236003             : 
  236004             : 
  236005             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236006             : 
  236007             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  236008             : //      This code is automatically generated for each 
  236009             : //      terminal and non-terminal within the defined 
  236010             : //      grammar.  There is a simple way to change the 
  236011             : //      code to fix bugs etc.  See the ROSE README file
  236012             : //      for directions.
  236013             : 
  236014             : // tps: (02/22/2010): Adding DLL export requirements
  236015             : #include "rosedll.h"
  236016             : 
  236017             : // predeclarations for SgThrowOp
  236018             : 
  236019             : /* #line 236020 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236020             : 
  236021             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  236022             : 
  236023             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236024             : 
  236025             : #if 1
  236026             : // Class Definition for SgThrowOp
  236027             : class ROSE_DLL_API SgThrowOp  : public SgUnaryOp
  236028             :    {
  236029             :      public:
  236030             : 
  236031             : 
  236032             : /* #line 236033 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236033             : 
  236034             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  236035             : // Start of memberFunctionString
  236036             : /* #line 1452 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  236037             : 
  236038             : 
  236039             :       //! Throw IR node can be used in three different ways.
  236040             :           enum e_throw_kind
  236041             :              {
  236042             :                unknown_throw = 0             /*! error value */,
  236043             :                throw_expression              /*! throw expression (takes an expression) */,
  236044             :                // throw_exception_specification /*! takes a list of types */, JJW (8/6/2008) -- SgThrowOp is not used for exception specifications
  236045             :                rethrow                       /*! rethow expression (as in \"rethrow;\") */
  236046             :              };
  236047             : 
  236048             :        // DQ (1/16/2006): Added to support special version of get_type()
  236049             :           SgType* get_type() const override;
  236050             : 
  236051             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  236052             :           unsigned int cfgIndexForEnd() const override;
  236053             :           std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  236054             :           std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  236055             : #endif
  236056             : 
  236057             : 
  236058             : 
  236059             : // End of memberFunctionString
  236060             : // Start of memberFunctionString
  236061             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  236062             : 
  236063             : // *** COMMON CODE SECTION BEGINS HERE ***
  236064             : 
  236065             :     public:
  236066             : 
  236067             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  236068             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  236069             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  236070             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  236071             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  236072             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  236073             : 
  236074             :       /*! \brief returns a string representing the class name */
  236075             :           virtual std::string class_name() const override;
  236076             : 
  236077             :       /*! \brief returns new style SageIII enum values */
  236078             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  236079             : 
  236080             :       /*! \brief static variant value */
  236081             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  236082             :        // static const VariantT static_variant = V_SgThrowOp;
  236083             :           enum { static_variant = V_SgThrowOp };
  236084             : 
  236085             :        /* the generated cast function */
  236086             :       /*! \brief Casts pointer from base class to derived class */
  236087             :           ROSE_DLL_API friend       SgThrowOp* isSgThrowOp(       SgNode * s );
  236088             : 
  236089             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  236090             :           ROSE_DLL_API friend const SgThrowOp* isSgThrowOp( const SgNode * s );
  236091             : 
  236092             :      // ******************************************
  236093             :      // * Memory Pool / New / Delete
  236094             :      // ******************************************
  236095             : 
  236096             :      public:
  236097             :           /// \private
  236098             :           static const unsigned pool_size; //
  236099             :           /// \private
  236100             :           static std::vector<unsigned char *> pools; //
  236101             :           /// \private
  236102             :           static SgThrowOp * next_node; // 
  236103             : 
  236104             :           /// \private
  236105             :           static unsigned long initializeStorageClassArray(SgThrowOpStorageClass *); //
  236106             : 
  236107             :           /// \private
  236108             :           static void clearMemoryPool(); //
  236109             :           static void deleteMemoryPool(); //
  236110             : 
  236111             :           /// \private
  236112             :           static void extendMemoryPoolForFileIO(); //
  236113             : 
  236114             :           /// \private
  236115             :           static SgThrowOp * getPointerFromGlobalIndex(unsigned long); //
  236116             :           /// \private
  236117             :           static SgThrowOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  236118             : 
  236119             :           /// \private
  236120             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  236121             :           /// \private
  236122             :           static void resetValidFreepointers(); //
  236123             :           /// \private
  236124             :           static unsigned long getNumberOfLastValidPointer(); //
  236125             : 
  236126             : 
  236127             : #if defined(INLINE_FUNCTIONS)
  236128             :       /*! \brief returns pointer to newly allocated IR node */
  236129             :           inline void *operator new (size_t size);
  236130             : #else
  236131             :       /*! \brief returns pointer to newly allocated IR node */
  236132             :           void *operator new (size_t size);
  236133             : #endif
  236134             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  236135             :           void operator delete (void* pointer, size_t size);
  236136             : 
  236137             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  236138         104 :           void operator delete (void* pointer)
  236139             :              {
  236140             :             // This is the generated delete operator...
  236141         104 :                SgThrowOp::operator delete (pointer,sizeof(SgThrowOp));
  236142             :              }
  236143             : 
  236144             :       /*! \brief Returns the total number of IR nodes of this type */
  236145             :           static size_t numberOfNodes();
  236146             : 
  236147             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  236148             :           static size_t memoryUsage();
  236149             : 
  236150             :       // End of scope which started in IR nodes specific code 
  236151             :       /* */
  236152             : 
  236153             :       /* name Internal Functions
  236154             :           \brief Internal functions ... incomplete-documentation
  236155             : 
  236156             :           These functions have been made public as part of the design, but they are suggested for internal use 
  236157             :           or by particularly knowledgeable users for specialized tools or applications.
  236158             : 
  236159             :           \internal We could not make these private because they are required by user for special purposes. And 
  236160             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  236161             :          
  236162             :        */
  236163             : 
  236164             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  236165             :        // overridden in every class by *generated* implementation
  236166             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  236167             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  236168             :        // MS: 06/28/02 container of names of variables or container indices 
  236169             :        // used used in the traversal to access AST successor nodes
  236170             :        // overridden in every class by *generated* implementation
  236171             :       /*! \brief container of names of variables or container indices used used in the traversal
  236172             :           to access AST successor nodes overridden in every class by *generated* implementation */
  236173             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  236174             : 
  236175             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  236176             :        // than all the vector copies. The implementation for these functions is generated for each class.
  236177             :       /*! \brief return number of children in the traversal successor list */
  236178             :           virtual size_t get_numberOfTraversalSuccessors() override;
  236179             :       /*! \brief index-based access to traversal successors by index number */
  236180             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  236181             :       /*! \brief index-based access to traversal successors by child node */
  236182             :           virtual size_t get_childIndex(SgNode *child) override;
  236183             : 
  236184             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  236185             :        // MS: 08/16/2002 method for generating RTI information
  236186             :       /*! \brief return C++ Runtime-Time-Information */
  236187             :           virtual RTIReturnType roseRTI() override;
  236188             : #endif
  236189             :       /* */
  236190             : 
  236191             : 
  236192             : 
  236193             :       /* name Deprecated Functions
  236194             :           \brief Deprecated functions ... incomplete-documentation
  236195             : 
  236196             :           These functions have been deprecated from use.
  236197             :        */
  236198             :       /* */
  236199             : 
  236200             :       /*! returns a C style string (char*) representing the class name */
  236201             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  236202             : 
  236203             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  236204             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  236205             : #if 0
  236206             :       /*! returns old style Sage II enum values */
  236207             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  236208             :       /*! returns old style Sage II enum values */
  236209             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  236210             : #endif
  236211             :       /* */
  236212             : 
  236213             : 
  236214             : 
  236215             : 
  236216             :      public:
  236217             :       /* name Traversal Support Functions
  236218             :           \brief Traversal support functions ... incomplete-documentation
  236219             : 
  236220             :           These functions have been made public as part of the design, but they are suggested for internal use 
  236221             :           or by particularly knowledgable users for specialized tools or applications.
  236222             :        */
  236223             :       /* */
  236224             : 
  236225             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  236226             :        // (inferior to ROSE traversal mechanism, experimental).
  236227             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  236228             :        */
  236229             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  236230             : 
  236231             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  236232             :       /*! \brief support for the classic visitor pattern done in GoF */
  236233             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  236234             : 
  236235             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  236236             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  236237             :        */
  236238             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  236239             : 
  236240             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  236241             :        */
  236242             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  236243             : 
  236244             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  236245             :        // This traversal helps support internal tools that call static member functions.
  236246             :        // note: this function operates on the memory pools.
  236247             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  236248             :        */
  236249             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  236250             :       /* */
  236251             : 
  236252             : 
  236253             :      public:
  236254             :       /* name Memory Allocation Functions
  236255             :           \brief Memory allocations functions ... incomplete-documentation
  236256             : 
  236257             :           These functions have been made public as part of the design, but they are suggested for internal use 
  236258             :           or by particularly knowledgable users for specialized tools or applications.
  236259             :        */
  236260             :       /* */
  236261             : 
  236262             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  236263             : 
  236264             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  236265             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  236266             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  236267             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  236268             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  236269             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  236270             :           being used with the AST File I/O mechanism.
  236271             :        */
  236272             :           virtual bool isInMemoryPool() override;
  236273             : 
  236274             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  236275             : 
  236276             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  236277             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  236278             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  236279             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  236280             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  236281             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  236282             :           being used with the AST File I/O mechanism.
  236283             :        */
  236284             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  236285             : 
  236286             :       // DQ (4/30/2006): Modified to be a const function.
  236287             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  236288             : 
  236289             :           This functions is part of general support for many possible tools to operate 
  236290             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  236291             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  236292             :           less than the set of pointers used by the AST file I/O. This is part of
  236293             :           work implemented by Andreas, and support tools such as the AST graph generation.
  236294             : 
  236295             :           \warning This function can return unexpected data members and thus the 
  236296             :                    order and the number of elements is unpredicable and subject 
  236297             :                    to change.
  236298             : 
  236299             :           \returns STL vector of pairs of SgNode* and strings
  236300             :        */
  236301             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  236302             : 
  236303             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  236304             : 
  236305             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  236306             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  236307             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  236308             : 
  236309             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  236310             :                    and subject to change.
  236311             :        */
  236312             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  236313             : 
  236314             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  236315             : 
  236316             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  236317             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  236318             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  236319             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  236320             : 
  236321             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  236322             : 
  236323             :           \returns long
  236324             :        */
  236325             :           virtual long getChildIndex( SgNode* childNode ) const override;
  236326             : 
  236327             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  236328             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  236329             :       /* \brief Constructor for use by AST File I/O Mechanism
  236330             : 
  236331             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  236332             :           which obtained via fast binary file I/O from disk.
  236333             :        */
  236334             :        // SgThrowOp( SgThrowOpStorageClass& source );
  236335             : 
  236336             : 
  236337             : 
  236338             : 
  236339             : 
  236340             :  // JH (10/24/2005): methods added to support the ast file IO
  236341             :     private:
  236342             : 
  236343             :       /* name AST Memory Allocation Support Functions
  236344             :           \brief Memory allocations support....
  236345             : 
  236346             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  236347             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  236348             :           and support the AST File I/O Mechanism.
  236349             :        */
  236350             :       /* */
  236351             : 
  236352             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  236353             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  236354             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  236355             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  236356             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  236357             :           a correspinding one in the AST_FILE_IO class!
  236358             :        */
  236359             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  236360             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  236361             :       /* \brief Typedef used for low level memory access.
  236362             :        */
  236363             :        // typedef unsigned char* TestType;
  236364             : 
  236365             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  236366             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  236367             :       /* \brief Typedef used to hold memory addresses as values.
  236368             :        */
  236369             :        // typedef unsigned long  AddressType;
  236370             : 
  236371             : 
  236372             : 
  236373             :        // necessary, to have direct access to the p_freepointer and the private methods !
  236374             :       /*! \brief friend class declaration to support AST File I/O */
  236375             :           friend class AST_FILE_IO;
  236376             : 
  236377             :       /*! \brief friend class declaration to support AST File I/O */
  236378             :           friend class SgThrowOpStorageClass;
  236379             : 
  236380             :       /*! \brief friend class declaration to support AST File I/O */
  236381             :           friend class AstSpecificDataManagingClass;
  236382             : 
  236383             :       /*! \brief friend class declaration to support AST File I/O */
  236384             :           friend class AstSpecificDataManagingClassStorageClass;
  236385             :     public:
  236386             :       /*! \brief IR node constructor to support AST File I/O */
  236387             :           SgThrowOp( const SgThrowOpStorageClass& source );
  236388             : 
  236389             :  // private: // JJW hack
  236390             :        /*
  236391             :           name AST Memory Allocation Support Variables
  236392             :           Memory allocations support variables 
  236393             : 
  236394             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  236395             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  236396             :           and support the AST File I/O Mechanism.
  236397             :        */
  236398             :       /* */
  236399             : 
  236400             :     public:
  236401             : 
  236402             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  236403             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  236404             :       // virtual SgNode* addRegExpAttribute();
  236405             :       /*! \brief Support for AST matching using regular expression.
  236406             : 
  236407             :           This support is incomplete and the subject of current research to define 
  236408             :           RegEx trees to support inexact matching.
  236409             :        */
  236410             :           SgThrowOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  236411             : 
  236412             : // *** COMMON CODE SECTION ENDS HERE ***
  236413             : 
  236414             : 
  236415             : // End of memberFunctionString
  236416             : // Start of memberFunctionString
  236417             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  236418             : 
  236419             :      // the generated cast function
  236420             :      // friend ROSE_DLL_API SgThrowOp* isSgThrowOp ( SgNode* s );
  236421             : 
  236422             :           typedef SgUnaryOp base_node_type;
  236423             : 
  236424             : 
  236425             : // End of memberFunctionString
  236426             : // Start of memberFunctionString
  236427             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  236428             : 
  236429             :           void post_construction_initialization() override;
  236430             : 
  236431             : 
  236432             : // End of memberFunctionString
  236433             : // Start of memberFunctionString
  236434             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  236435             : 
  236436           0 :           int precedence() const override { return 15; }
  236437             : 
  236438             : 
  236439             : // End of memberFunctionString
  236440             : 
  236441             :      public: 
  236442             :          SgThrowOp::e_throw_kind get_throwKind() const;
  236443             :          void set_throwKind(SgThrowOp::e_throw_kind throwKind);
  236444             : 
  236445             : 
  236446             :      public: 
  236447             :          virtual ~SgThrowOp();
  236448             : 
  236449             : 
  236450             :      public: 
  236451             :          SgThrowOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL, SgThrowOp::e_throw_kind throwKind = SgThrowOp::unknown_throw); 
  236452             :          SgThrowOp(SgExpression* operand_i, SgType* expression_type, SgThrowOp::e_throw_kind throwKind); 
  236453             : 
  236454             :     protected:
  236455             : // Start of memberFunctionString
  236456             : SgThrowOp::e_throw_kind p_throwKind;
  236457             :           
  236458             : // End of memberFunctionString
  236459             : 
  236460             :     friend struct Rose::Traits::generated::describe_node_t<SgThrowOp>;
  236461             :     friend struct Rose::Traits::generated::describe_field_t<SgThrowOp, SgThrowOp::e_throw_kind,&SgThrowOp::p_throwKind>;
  236462             : 
  236463             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236464             : 
  236465             : 
  236466             :    };
  236467             : #endif
  236468             : 
  236469             : // postdeclarations for SgThrowOp
  236470             : 
  236471             : /* #line 236472 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236472             : 
  236473             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  236474             : 
  236475             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236476             : 
  236477             : 
  236478             : /* #line 236479 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236479             : 
  236480             : 
  236481             : 
  236482             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236483             : 
  236484             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  236485             : //      This code is automatically generated for each 
  236486             : //      terminal and non-terminal within the defined 
  236487             : //      grammar.  There is a simple way to change the 
  236488             : //      code to fix bugs etc.  See the ROSE README file
  236489             : //      for directions.
  236490             : 
  236491             : // tps: (02/22/2010): Adding DLL export requirements
  236492             : #include "rosedll.h"
  236493             : 
  236494             : // predeclarations for SgRealPartOp
  236495             : 
  236496             : /* #line 236497 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236497             : 
  236498             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  236499             : 
  236500             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236501             : 
  236502             : #if 1
  236503             : // Class Definition for SgRealPartOp
  236504             : class ROSE_DLL_API SgRealPartOp  : public SgUnaryOp
  236505             :    {
  236506             :      public:
  236507             : 
  236508             : 
  236509             : /* #line 236510 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236510             : 
  236511             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  236512             : // Start of memberFunctionString
  236513             : /* #line 1178 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  236514             : 
  236515             : 
  236516             : 
  236517             : // End of memberFunctionString
  236518             : // Start of memberFunctionString
  236519             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  236520             : 
  236521             : // *** COMMON CODE SECTION BEGINS HERE ***
  236522             : 
  236523             :     public:
  236524             : 
  236525             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  236526             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  236527             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  236528             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  236529             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  236530             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  236531             : 
  236532             :       /*! \brief returns a string representing the class name */
  236533             :           virtual std::string class_name() const override;
  236534             : 
  236535             :       /*! \brief returns new style SageIII enum values */
  236536             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  236537             : 
  236538             :       /*! \brief static variant value */
  236539             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  236540             :        // static const VariantT static_variant = V_SgRealPartOp;
  236541             :           enum { static_variant = V_SgRealPartOp };
  236542             : 
  236543             :        /* the generated cast function */
  236544             :       /*! \brief Casts pointer from base class to derived class */
  236545             :           ROSE_DLL_API friend       SgRealPartOp* isSgRealPartOp(       SgNode * s );
  236546             : 
  236547             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  236548             :           ROSE_DLL_API friend const SgRealPartOp* isSgRealPartOp( const SgNode * s );
  236549             : 
  236550             :      // ******************************************
  236551             :      // * Memory Pool / New / Delete
  236552             :      // ******************************************
  236553             : 
  236554             :      public:
  236555             :           /// \private
  236556             :           static const unsigned pool_size; //
  236557             :           /// \private
  236558             :           static std::vector<unsigned char *> pools; //
  236559             :           /// \private
  236560             :           static SgRealPartOp * next_node; // 
  236561             : 
  236562             :           /// \private
  236563             :           static unsigned long initializeStorageClassArray(SgRealPartOpStorageClass *); //
  236564             : 
  236565             :           /// \private
  236566             :           static void clearMemoryPool(); //
  236567             :           static void deleteMemoryPool(); //
  236568             : 
  236569             :           /// \private
  236570             :           static void extendMemoryPoolForFileIO(); //
  236571             : 
  236572             :           /// \private
  236573             :           static SgRealPartOp * getPointerFromGlobalIndex(unsigned long); //
  236574             :           /// \private
  236575             :           static SgRealPartOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  236576             : 
  236577             :           /// \private
  236578             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  236579             :           /// \private
  236580             :           static void resetValidFreepointers(); //
  236581             :           /// \private
  236582             :           static unsigned long getNumberOfLastValidPointer(); //
  236583             : 
  236584             : 
  236585             : #if defined(INLINE_FUNCTIONS)
  236586             :       /*! \brief returns pointer to newly allocated IR node */
  236587             :           inline void *operator new (size_t size);
  236588             : #else
  236589             :       /*! \brief returns pointer to newly allocated IR node */
  236590             :           void *operator new (size_t size);
  236591             : #endif
  236592             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  236593             :           void operator delete (void* pointer, size_t size);
  236594             : 
  236595             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  236596           0 :           void operator delete (void* pointer)
  236597             :              {
  236598             :             // This is the generated delete operator...
  236599           0 :                SgRealPartOp::operator delete (pointer,sizeof(SgRealPartOp));
  236600             :              }
  236601             : 
  236602             :       /*! \brief Returns the total number of IR nodes of this type */
  236603             :           static size_t numberOfNodes();
  236604             : 
  236605             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  236606             :           static size_t memoryUsage();
  236607             : 
  236608             :       // End of scope which started in IR nodes specific code 
  236609             :       /* */
  236610             : 
  236611             :       /* name Internal Functions
  236612             :           \brief Internal functions ... incomplete-documentation
  236613             : 
  236614             :           These functions have been made public as part of the design, but they are suggested for internal use 
  236615             :           or by particularly knowledgeable users for specialized tools or applications.
  236616             : 
  236617             :           \internal We could not make these private because they are required by user for special purposes. And 
  236618             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  236619             :          
  236620             :        */
  236621             : 
  236622             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  236623             :        // overridden in every class by *generated* implementation
  236624             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  236625             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  236626             :        // MS: 06/28/02 container of names of variables or container indices 
  236627             :        // used used in the traversal to access AST successor nodes
  236628             :        // overridden in every class by *generated* implementation
  236629             :       /*! \brief container of names of variables or container indices used used in the traversal
  236630             :           to access AST successor nodes overridden in every class by *generated* implementation */
  236631             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  236632             : 
  236633             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  236634             :        // than all the vector copies. The implementation for these functions is generated for each class.
  236635             :       /*! \brief return number of children in the traversal successor list */
  236636             :           virtual size_t get_numberOfTraversalSuccessors() override;
  236637             :       /*! \brief index-based access to traversal successors by index number */
  236638             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  236639             :       /*! \brief index-based access to traversal successors by child node */
  236640             :           virtual size_t get_childIndex(SgNode *child) override;
  236641             : 
  236642             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  236643             :        // MS: 08/16/2002 method for generating RTI information
  236644             :       /*! \brief return C++ Runtime-Time-Information */
  236645             :           virtual RTIReturnType roseRTI() override;
  236646             : #endif
  236647             :       /* */
  236648             : 
  236649             : 
  236650             : 
  236651             :       /* name Deprecated Functions
  236652             :           \brief Deprecated functions ... incomplete-documentation
  236653             : 
  236654             :           These functions have been deprecated from use.
  236655             :        */
  236656             :       /* */
  236657             : 
  236658             :       /*! returns a C style string (char*) representing the class name */
  236659             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  236660             : 
  236661             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  236662             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  236663             : #if 0
  236664             :       /*! returns old style Sage II enum values */
  236665             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  236666             :       /*! returns old style Sage II enum values */
  236667             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  236668             : #endif
  236669             :       /* */
  236670             : 
  236671             : 
  236672             : 
  236673             : 
  236674             :      public:
  236675             :       /* name Traversal Support Functions
  236676             :           \brief Traversal support functions ... incomplete-documentation
  236677             : 
  236678             :           These functions have been made public as part of the design, but they are suggested for internal use 
  236679             :           or by particularly knowledgable users for specialized tools or applications.
  236680             :        */
  236681             :       /* */
  236682             : 
  236683             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  236684             :        // (inferior to ROSE traversal mechanism, experimental).
  236685             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  236686             :        */
  236687             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  236688             : 
  236689             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  236690             :       /*! \brief support for the classic visitor pattern done in GoF */
  236691             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  236692             : 
  236693             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  236694             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  236695             :        */
  236696             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  236697             : 
  236698             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  236699             :        */
  236700             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  236701             : 
  236702             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  236703             :        // This traversal helps support internal tools that call static member functions.
  236704             :        // note: this function operates on the memory pools.
  236705             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  236706             :        */
  236707             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  236708             :       /* */
  236709             : 
  236710             : 
  236711             :      public:
  236712             :       /* name Memory Allocation Functions
  236713             :           \brief Memory allocations functions ... incomplete-documentation
  236714             : 
  236715             :           These functions have been made public as part of the design, but they are suggested for internal use 
  236716             :           or by particularly knowledgable users for specialized tools or applications.
  236717             :        */
  236718             :       /* */
  236719             : 
  236720             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  236721             : 
  236722             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  236723             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  236724             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  236725             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  236726             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  236727             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  236728             :           being used with the AST File I/O mechanism.
  236729             :        */
  236730             :           virtual bool isInMemoryPool() override;
  236731             : 
  236732             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  236733             : 
  236734             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  236735             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  236736             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  236737             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  236738             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  236739             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  236740             :           being used with the AST File I/O mechanism.
  236741             :        */
  236742             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  236743             : 
  236744             :       // DQ (4/30/2006): Modified to be a const function.
  236745             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  236746             : 
  236747             :           This functions is part of general support for many possible tools to operate 
  236748             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  236749             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  236750             :           less than the set of pointers used by the AST file I/O. This is part of
  236751             :           work implemented by Andreas, and support tools such as the AST graph generation.
  236752             : 
  236753             :           \warning This function can return unexpected data members and thus the 
  236754             :                    order and the number of elements is unpredicable and subject 
  236755             :                    to change.
  236756             : 
  236757             :           \returns STL vector of pairs of SgNode* and strings
  236758             :        */
  236759             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  236760             : 
  236761             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  236762             : 
  236763             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  236764             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  236765             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  236766             : 
  236767             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  236768             :                    and subject to change.
  236769             :        */
  236770             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  236771             : 
  236772             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  236773             : 
  236774             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  236775             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  236776             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  236777             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  236778             : 
  236779             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  236780             : 
  236781             :           \returns long
  236782             :        */
  236783             :           virtual long getChildIndex( SgNode* childNode ) const override;
  236784             : 
  236785             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  236786             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  236787             :       /* \brief Constructor for use by AST File I/O Mechanism
  236788             : 
  236789             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  236790             :           which obtained via fast binary file I/O from disk.
  236791             :        */
  236792             :        // SgRealPartOp( SgRealPartOpStorageClass& source );
  236793             : 
  236794             : 
  236795             : 
  236796             : 
  236797             : 
  236798             :  // JH (10/24/2005): methods added to support the ast file IO
  236799             :     private:
  236800             : 
  236801             :       /* name AST Memory Allocation Support Functions
  236802             :           \brief Memory allocations support....
  236803             : 
  236804             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  236805             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  236806             :           and support the AST File I/O Mechanism.
  236807             :        */
  236808             :       /* */
  236809             : 
  236810             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  236811             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  236812             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  236813             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  236814             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  236815             :           a correspinding one in the AST_FILE_IO class!
  236816             :        */
  236817             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  236818             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  236819             :       /* \brief Typedef used for low level memory access.
  236820             :        */
  236821             :        // typedef unsigned char* TestType;
  236822             : 
  236823             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  236824             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  236825             :       /* \brief Typedef used to hold memory addresses as values.
  236826             :        */
  236827             :        // typedef unsigned long  AddressType;
  236828             : 
  236829             : 
  236830             : 
  236831             :        // necessary, to have direct access to the p_freepointer and the private methods !
  236832             :       /*! \brief friend class declaration to support AST File I/O */
  236833             :           friend class AST_FILE_IO;
  236834             : 
  236835             :       /*! \brief friend class declaration to support AST File I/O */
  236836             :           friend class SgRealPartOpStorageClass;
  236837             : 
  236838             :       /*! \brief friend class declaration to support AST File I/O */
  236839             :           friend class AstSpecificDataManagingClass;
  236840             : 
  236841             :       /*! \brief friend class declaration to support AST File I/O */
  236842             :           friend class AstSpecificDataManagingClassStorageClass;
  236843             :     public:
  236844             :       /*! \brief IR node constructor to support AST File I/O */
  236845             :           SgRealPartOp( const SgRealPartOpStorageClass& source );
  236846             : 
  236847             :  // private: // JJW hack
  236848             :        /*
  236849             :           name AST Memory Allocation Support Variables
  236850             :           Memory allocations support variables 
  236851             : 
  236852             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  236853             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  236854             :           and support the AST File I/O Mechanism.
  236855             :        */
  236856             :       /* */
  236857             : 
  236858             :     public:
  236859             : 
  236860             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  236861             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  236862             :       // virtual SgNode* addRegExpAttribute();
  236863             :       /*! \brief Support for AST matching using regular expression.
  236864             : 
  236865             :           This support is incomplete and the subject of current research to define 
  236866             :           RegEx trees to support inexact matching.
  236867             :        */
  236868             :           SgRealPartOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  236869             : 
  236870             : // *** COMMON CODE SECTION ENDS HERE ***
  236871             : 
  236872             : 
  236873             : // End of memberFunctionString
  236874             : // Start of memberFunctionString
  236875             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  236876             : 
  236877             :      // the generated cast function
  236878             :      // friend ROSE_DLL_API SgRealPartOp* isSgRealPartOp ( SgNode* s );
  236879             : 
  236880             :           typedef SgUnaryOp base_node_type;
  236881             : 
  236882             : 
  236883             : // End of memberFunctionString
  236884             : // Start of memberFunctionString
  236885             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  236886             : 
  236887             :           void post_construction_initialization() override;
  236888             : 
  236889             : 
  236890             : // End of memberFunctionString
  236891             : // Start of memberFunctionString
  236892             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  236893             : 
  236894           0 :           int precedence() const override { return 15; }
  236895             : 
  236896             : 
  236897             : // End of memberFunctionString
  236898             : 
  236899             : 
  236900             :      public: 
  236901             :          virtual ~SgRealPartOp();
  236902             : 
  236903             : 
  236904             :      public: 
  236905             :          SgRealPartOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  236906             :          SgRealPartOp(SgExpression* operand_i, SgType* expression_type); 
  236907             : 
  236908             :     protected:
  236909             : 
  236910             :     friend struct Rose::Traits::generated::describe_node_t<SgRealPartOp>;
  236911             : 
  236912             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236913             : 
  236914             : 
  236915             :    };
  236916             : #endif
  236917             : 
  236918             : // postdeclarations for SgRealPartOp
  236919             : 
  236920             : /* #line 236921 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236921             : 
  236922             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  236923             : 
  236924             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236925             : 
  236926             : 
  236927             : /* #line 236928 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236928             : 
  236929             : 
  236930             : 
  236931             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236932             : 
  236933             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  236934             : //      This code is automatically generated for each 
  236935             : //      terminal and non-terminal within the defined 
  236936             : //      grammar.  There is a simple way to change the 
  236937             : //      code to fix bugs etc.  See the ROSE README file
  236938             : //      for directions.
  236939             : 
  236940             : // tps: (02/22/2010): Adding DLL export requirements
  236941             : #include "rosedll.h"
  236942             : 
  236943             : // predeclarations for SgImagPartOp
  236944             : 
  236945             : /* #line 236946 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236946             : 
  236947             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  236948             : 
  236949             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  236950             : 
  236951             : #if 1
  236952             : // Class Definition for SgImagPartOp
  236953             : class ROSE_DLL_API SgImagPartOp  : public SgUnaryOp
  236954             :    {
  236955             :      public:
  236956             : 
  236957             : 
  236958             : /* #line 236959 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  236959             : 
  236960             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  236961             : // Start of memberFunctionString
  236962             : /* #line 1182 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  236963             : 
  236964             : 
  236965             : 
  236966             : // End of memberFunctionString
  236967             : // Start of memberFunctionString
  236968             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  236969             : 
  236970             : // *** COMMON CODE SECTION BEGINS HERE ***
  236971             : 
  236972             :     public:
  236973             : 
  236974             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  236975             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  236976             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  236977             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  236978             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  236979             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  236980             : 
  236981             :       /*! \brief returns a string representing the class name */
  236982             :           virtual std::string class_name() const override;
  236983             : 
  236984             :       /*! \brief returns new style SageIII enum values */
  236985             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  236986             : 
  236987             :       /*! \brief static variant value */
  236988             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  236989             :        // static const VariantT static_variant = V_SgImagPartOp;
  236990             :           enum { static_variant = V_SgImagPartOp };
  236991             : 
  236992             :        /* the generated cast function */
  236993             :       /*! \brief Casts pointer from base class to derived class */
  236994             :           ROSE_DLL_API friend       SgImagPartOp* isSgImagPartOp(       SgNode * s );
  236995             : 
  236996             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  236997             :           ROSE_DLL_API friend const SgImagPartOp* isSgImagPartOp( const SgNode * s );
  236998             : 
  236999             :      // ******************************************
  237000             :      // * Memory Pool / New / Delete
  237001             :      // ******************************************
  237002             : 
  237003             :      public:
  237004             :           /// \private
  237005             :           static const unsigned pool_size; //
  237006             :           /// \private
  237007             :           static std::vector<unsigned char *> pools; //
  237008             :           /// \private
  237009             :           static SgImagPartOp * next_node; // 
  237010             : 
  237011             :           /// \private
  237012             :           static unsigned long initializeStorageClassArray(SgImagPartOpStorageClass *); //
  237013             : 
  237014             :           /// \private
  237015             :           static void clearMemoryPool(); //
  237016             :           static void deleteMemoryPool(); //
  237017             : 
  237018             :           /// \private
  237019             :           static void extendMemoryPoolForFileIO(); //
  237020             : 
  237021             :           /// \private
  237022             :           static SgImagPartOp * getPointerFromGlobalIndex(unsigned long); //
  237023             :           /// \private
  237024             :           static SgImagPartOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  237025             : 
  237026             :           /// \private
  237027             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  237028             :           /// \private
  237029             :           static void resetValidFreepointers(); //
  237030             :           /// \private
  237031             :           static unsigned long getNumberOfLastValidPointer(); //
  237032             : 
  237033             : 
  237034             : #if defined(INLINE_FUNCTIONS)
  237035             :       /*! \brief returns pointer to newly allocated IR node */
  237036             :           inline void *operator new (size_t size);
  237037             : #else
  237038             :       /*! \brief returns pointer to newly allocated IR node */
  237039             :           void *operator new (size_t size);
  237040             : #endif
  237041             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  237042             :           void operator delete (void* pointer, size_t size);
  237043             : 
  237044             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  237045           0 :           void operator delete (void* pointer)
  237046             :              {
  237047             :             // This is the generated delete operator...
  237048           0 :                SgImagPartOp::operator delete (pointer,sizeof(SgImagPartOp));
  237049             :              }
  237050             : 
  237051             :       /*! \brief Returns the total number of IR nodes of this type */
  237052             :           static size_t numberOfNodes();
  237053             : 
  237054             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  237055             :           static size_t memoryUsage();
  237056             : 
  237057             :       // End of scope which started in IR nodes specific code 
  237058             :       /* */
  237059             : 
  237060             :       /* name Internal Functions
  237061             :           \brief Internal functions ... incomplete-documentation
  237062             : 
  237063             :           These functions have been made public as part of the design, but they are suggested for internal use 
  237064             :           or by particularly knowledgeable users for specialized tools or applications.
  237065             : 
  237066             :           \internal We could not make these private because they are required by user for special purposes. And 
  237067             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  237068             :          
  237069             :        */
  237070             : 
  237071             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  237072             :        // overridden in every class by *generated* implementation
  237073             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  237074             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  237075             :        // MS: 06/28/02 container of names of variables or container indices 
  237076             :        // used used in the traversal to access AST successor nodes
  237077             :        // overridden in every class by *generated* implementation
  237078             :       /*! \brief container of names of variables or container indices used used in the traversal
  237079             :           to access AST successor nodes overridden in every class by *generated* implementation */
  237080             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  237081             : 
  237082             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  237083             :        // than all the vector copies. The implementation for these functions is generated for each class.
  237084             :       /*! \brief return number of children in the traversal successor list */
  237085             :           virtual size_t get_numberOfTraversalSuccessors() override;
  237086             :       /*! \brief index-based access to traversal successors by index number */
  237087             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  237088             :       /*! \brief index-based access to traversal successors by child node */
  237089             :           virtual size_t get_childIndex(SgNode *child) override;
  237090             : 
  237091             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  237092             :        // MS: 08/16/2002 method for generating RTI information
  237093             :       /*! \brief return C++ Runtime-Time-Information */
  237094             :           virtual RTIReturnType roseRTI() override;
  237095             : #endif
  237096             :       /* */
  237097             : 
  237098             : 
  237099             : 
  237100             :       /* name Deprecated Functions
  237101             :           \brief Deprecated functions ... incomplete-documentation
  237102             : 
  237103             :           These functions have been deprecated from use.
  237104             :        */
  237105             :       /* */
  237106             : 
  237107             :       /*! returns a C style string (char*) representing the class name */
  237108             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  237109             : 
  237110             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  237111             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  237112             : #if 0
  237113             :       /*! returns old style Sage II enum values */
  237114             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  237115             :       /*! returns old style Sage II enum values */
  237116             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  237117             : #endif
  237118             :       /* */
  237119             : 
  237120             : 
  237121             : 
  237122             : 
  237123             :      public:
  237124             :       /* name Traversal Support Functions
  237125             :           \brief Traversal support functions ... incomplete-documentation
  237126             : 
  237127             :           These functions have been made public as part of the design, but they are suggested for internal use 
  237128             :           or by particularly knowledgable users for specialized tools or applications.
  237129             :        */
  237130             :       /* */
  237131             : 
  237132             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  237133             :        // (inferior to ROSE traversal mechanism, experimental).
  237134             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  237135             :        */
  237136             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  237137             : 
  237138             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  237139             :       /*! \brief support for the classic visitor pattern done in GoF */
  237140             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  237141             : 
  237142             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  237143             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  237144             :        */
  237145             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  237146             : 
  237147             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  237148             :        */
  237149             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  237150             : 
  237151             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  237152             :        // This traversal helps support internal tools that call static member functions.
  237153             :        // note: this function operates on the memory pools.
  237154             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  237155             :        */
  237156             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  237157             :       /* */
  237158             : 
  237159             : 
  237160             :      public:
  237161             :       /* name Memory Allocation Functions
  237162             :           \brief Memory allocations functions ... incomplete-documentation
  237163             : 
  237164             :           These functions have been made public as part of the design, but they are suggested for internal use 
  237165             :           or by particularly knowledgable users for specialized tools or applications.
  237166             :        */
  237167             :       /* */
  237168             : 
  237169             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  237170             : 
  237171             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  237172             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  237173             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  237174             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  237175             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  237176             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  237177             :           being used with the AST File I/O mechanism.
  237178             :        */
  237179             :           virtual bool isInMemoryPool() override;
  237180             : 
  237181             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  237182             : 
  237183             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  237184             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  237185             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  237186             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  237187             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  237188             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  237189             :           being used with the AST File I/O mechanism.
  237190             :        */
  237191             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  237192             : 
  237193             :       // DQ (4/30/2006): Modified to be a const function.
  237194             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  237195             : 
  237196             :           This functions is part of general support for many possible tools to operate 
  237197             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  237198             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  237199             :           less than the set of pointers used by the AST file I/O. This is part of
  237200             :           work implemented by Andreas, and support tools such as the AST graph generation.
  237201             : 
  237202             :           \warning This function can return unexpected data members and thus the 
  237203             :                    order and the number of elements is unpredicable and subject 
  237204             :                    to change.
  237205             : 
  237206             :           \returns STL vector of pairs of SgNode* and strings
  237207             :        */
  237208             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  237209             : 
  237210             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  237211             : 
  237212             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  237213             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  237214             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  237215             : 
  237216             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  237217             :                    and subject to change.
  237218             :        */
  237219             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  237220             : 
  237221             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  237222             : 
  237223             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  237224             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  237225             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  237226             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  237227             : 
  237228             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  237229             : 
  237230             :           \returns long
  237231             :        */
  237232             :           virtual long getChildIndex( SgNode* childNode ) const override;
  237233             : 
  237234             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  237235             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  237236             :       /* \brief Constructor for use by AST File I/O Mechanism
  237237             : 
  237238             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  237239             :           which obtained via fast binary file I/O from disk.
  237240             :        */
  237241             :        // SgImagPartOp( SgImagPartOpStorageClass& source );
  237242             : 
  237243             : 
  237244             : 
  237245             : 
  237246             : 
  237247             :  // JH (10/24/2005): methods added to support the ast file IO
  237248             :     private:
  237249             : 
  237250             :       /* name AST Memory Allocation Support Functions
  237251             :           \brief Memory allocations support....
  237252             : 
  237253             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  237254             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  237255             :           and support the AST File I/O Mechanism.
  237256             :        */
  237257             :       /* */
  237258             : 
  237259             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  237260             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  237261             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  237262             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  237263             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  237264             :           a correspinding one in the AST_FILE_IO class!
  237265             :        */
  237266             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  237267             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  237268             :       /* \brief Typedef used for low level memory access.
  237269             :        */
  237270             :        // typedef unsigned char* TestType;
  237271             : 
  237272             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  237273             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  237274             :       /* \brief Typedef used to hold memory addresses as values.
  237275             :        */
  237276             :        // typedef unsigned long  AddressType;
  237277             : 
  237278             : 
  237279             : 
  237280             :        // necessary, to have direct access to the p_freepointer and the private methods !
  237281             :       /*! \brief friend class declaration to support AST File I/O */
  237282             :           friend class AST_FILE_IO;
  237283             : 
  237284             :       /*! \brief friend class declaration to support AST File I/O */
  237285             :           friend class SgImagPartOpStorageClass;
  237286             : 
  237287             :       /*! \brief friend class declaration to support AST File I/O */
  237288             :           friend class AstSpecificDataManagingClass;
  237289             : 
  237290             :       /*! \brief friend class declaration to support AST File I/O */
  237291             :           friend class AstSpecificDataManagingClassStorageClass;
  237292             :     public:
  237293             :       /*! \brief IR node constructor to support AST File I/O */
  237294             :           SgImagPartOp( const SgImagPartOpStorageClass& source );
  237295             : 
  237296             :  // private: // JJW hack
  237297             :        /*
  237298             :           name AST Memory Allocation Support Variables
  237299             :           Memory allocations support variables 
  237300             : 
  237301             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  237302             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  237303             :           and support the AST File I/O Mechanism.
  237304             :        */
  237305             :       /* */
  237306             : 
  237307             :     public:
  237308             : 
  237309             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  237310             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  237311             :       // virtual SgNode* addRegExpAttribute();
  237312             :       /*! \brief Support for AST matching using regular expression.
  237313             : 
  237314             :           This support is incomplete and the subject of current research to define 
  237315             :           RegEx trees to support inexact matching.
  237316             :        */
  237317             :           SgImagPartOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  237318             : 
  237319             : // *** COMMON CODE SECTION ENDS HERE ***
  237320             : 
  237321             : 
  237322             : // End of memberFunctionString
  237323             : // Start of memberFunctionString
  237324             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  237325             : 
  237326             :      // the generated cast function
  237327             :      // friend ROSE_DLL_API SgImagPartOp* isSgImagPartOp ( SgNode* s );
  237328             : 
  237329             :           typedef SgUnaryOp base_node_type;
  237330             : 
  237331             : 
  237332             : // End of memberFunctionString
  237333             : // Start of memberFunctionString
  237334             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  237335             : 
  237336             :           void post_construction_initialization() override;
  237337             : 
  237338             : 
  237339             : // End of memberFunctionString
  237340             : // Start of memberFunctionString
  237341             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  237342             : 
  237343           0 :           int precedence() const override { return 15; }
  237344             : 
  237345             : 
  237346             : // End of memberFunctionString
  237347             : 
  237348             : 
  237349             :      public: 
  237350             :          virtual ~SgImagPartOp();
  237351             : 
  237352             : 
  237353             :      public: 
  237354             :          SgImagPartOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  237355             :          SgImagPartOp(SgExpression* operand_i, SgType* expression_type); 
  237356             : 
  237357             :     protected:
  237358             : 
  237359             :     friend struct Rose::Traits::generated::describe_node_t<SgImagPartOp>;
  237360             : 
  237361             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237362             : 
  237363             : 
  237364             :    };
  237365             : #endif
  237366             : 
  237367             : // postdeclarations for SgImagPartOp
  237368             : 
  237369             : /* #line 237370 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237370             : 
  237371             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  237372             : 
  237373             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237374             : 
  237375             : 
  237376             : /* #line 237377 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237377             : 
  237378             : 
  237379             : 
  237380             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237381             : 
  237382             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  237383             : //      This code is automatically generated for each 
  237384             : //      terminal and non-terminal within the defined 
  237385             : //      grammar.  There is a simple way to change the 
  237386             : //      code to fix bugs etc.  See the ROSE README file
  237387             : //      for directions.
  237388             : 
  237389             : // tps: (02/22/2010): Adding DLL export requirements
  237390             : #include "rosedll.h"
  237391             : 
  237392             : // predeclarations for SgConjugateOp
  237393             : 
  237394             : /* #line 237395 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237395             : 
  237396             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  237397             : 
  237398             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237399             : 
  237400             : #if 1
  237401             : // Class Definition for SgConjugateOp
  237402             : class ROSE_DLL_API SgConjugateOp  : public SgUnaryOp
  237403             :    {
  237404             :      public:
  237405             : 
  237406             : 
  237407             : /* #line 237408 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237408             : 
  237409             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  237410             : // Start of memberFunctionString
  237411             : /* #line 1186 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  237412             : 
  237413             : 
  237414             : 
  237415             : // End of memberFunctionString
  237416             : // Start of memberFunctionString
  237417             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  237418             : 
  237419             : // *** COMMON CODE SECTION BEGINS HERE ***
  237420             : 
  237421             :     public:
  237422             : 
  237423             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  237424             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  237425             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  237426             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  237427             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  237428             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  237429             : 
  237430             :       /*! \brief returns a string representing the class name */
  237431             :           virtual std::string class_name() const override;
  237432             : 
  237433             :       /*! \brief returns new style SageIII enum values */
  237434             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  237435             : 
  237436             :       /*! \brief static variant value */
  237437             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  237438             :        // static const VariantT static_variant = V_SgConjugateOp;
  237439             :           enum { static_variant = V_SgConjugateOp };
  237440             : 
  237441             :        /* the generated cast function */
  237442             :       /*! \brief Casts pointer from base class to derived class */
  237443             :           ROSE_DLL_API friend       SgConjugateOp* isSgConjugateOp(       SgNode * s );
  237444             : 
  237445             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  237446             :           ROSE_DLL_API friend const SgConjugateOp* isSgConjugateOp( const SgNode * s );
  237447             : 
  237448             :      // ******************************************
  237449             :      // * Memory Pool / New / Delete
  237450             :      // ******************************************
  237451             : 
  237452             :      public:
  237453             :           /// \private
  237454             :           static const unsigned pool_size; //
  237455             :           /// \private
  237456             :           static std::vector<unsigned char *> pools; //
  237457             :           /// \private
  237458             :           static SgConjugateOp * next_node; // 
  237459             : 
  237460             :           /// \private
  237461             :           static unsigned long initializeStorageClassArray(SgConjugateOpStorageClass *); //
  237462             : 
  237463             :           /// \private
  237464             :           static void clearMemoryPool(); //
  237465             :           static void deleteMemoryPool(); //
  237466             : 
  237467             :           /// \private
  237468             :           static void extendMemoryPoolForFileIO(); //
  237469             : 
  237470             :           /// \private
  237471             :           static SgConjugateOp * getPointerFromGlobalIndex(unsigned long); //
  237472             :           /// \private
  237473             :           static SgConjugateOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  237474             : 
  237475             :           /// \private
  237476             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  237477             :           /// \private
  237478             :           static void resetValidFreepointers(); //
  237479             :           /// \private
  237480             :           static unsigned long getNumberOfLastValidPointer(); //
  237481             : 
  237482             : 
  237483             : #if defined(INLINE_FUNCTIONS)
  237484             :       /*! \brief returns pointer to newly allocated IR node */
  237485             :           inline void *operator new (size_t size);
  237486             : #else
  237487             :       /*! \brief returns pointer to newly allocated IR node */
  237488             :           void *operator new (size_t size);
  237489             : #endif
  237490             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  237491             :           void operator delete (void* pointer, size_t size);
  237492             : 
  237493             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  237494           0 :           void operator delete (void* pointer)
  237495             :              {
  237496             :             // This is the generated delete operator...
  237497           0 :                SgConjugateOp::operator delete (pointer,sizeof(SgConjugateOp));
  237498             :              }
  237499             : 
  237500             :       /*! \brief Returns the total number of IR nodes of this type */
  237501             :           static size_t numberOfNodes();
  237502             : 
  237503             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  237504             :           static size_t memoryUsage();
  237505             : 
  237506             :       // End of scope which started in IR nodes specific code 
  237507             :       /* */
  237508             : 
  237509             :       /* name Internal Functions
  237510             :           \brief Internal functions ... incomplete-documentation
  237511             : 
  237512             :           These functions have been made public as part of the design, but they are suggested for internal use 
  237513             :           or by particularly knowledgeable users for specialized tools or applications.
  237514             : 
  237515             :           \internal We could not make these private because they are required by user for special purposes. And 
  237516             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  237517             :          
  237518             :        */
  237519             : 
  237520             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  237521             :        // overridden in every class by *generated* implementation
  237522             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  237523             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  237524             :        // MS: 06/28/02 container of names of variables or container indices 
  237525             :        // used used in the traversal to access AST successor nodes
  237526             :        // overridden in every class by *generated* implementation
  237527             :       /*! \brief container of names of variables or container indices used used in the traversal
  237528             :           to access AST successor nodes overridden in every class by *generated* implementation */
  237529             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  237530             : 
  237531             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  237532             :        // than all the vector copies. The implementation for these functions is generated for each class.
  237533             :       /*! \brief return number of children in the traversal successor list */
  237534             :           virtual size_t get_numberOfTraversalSuccessors() override;
  237535             :       /*! \brief index-based access to traversal successors by index number */
  237536             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  237537             :       /*! \brief index-based access to traversal successors by child node */
  237538             :           virtual size_t get_childIndex(SgNode *child) override;
  237539             : 
  237540             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  237541             :        // MS: 08/16/2002 method for generating RTI information
  237542             :       /*! \brief return C++ Runtime-Time-Information */
  237543             :           virtual RTIReturnType roseRTI() override;
  237544             : #endif
  237545             :       /* */
  237546             : 
  237547             : 
  237548             : 
  237549             :       /* name Deprecated Functions
  237550             :           \brief Deprecated functions ... incomplete-documentation
  237551             : 
  237552             :           These functions have been deprecated from use.
  237553             :        */
  237554             :       /* */
  237555             : 
  237556             :       /*! returns a C style string (char*) representing the class name */
  237557             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  237558             : 
  237559             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  237560             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  237561             : #if 0
  237562             :       /*! returns old style Sage II enum values */
  237563             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  237564             :       /*! returns old style Sage II enum values */
  237565             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  237566             : #endif
  237567             :       /* */
  237568             : 
  237569             : 
  237570             : 
  237571             : 
  237572             :      public:
  237573             :       /* name Traversal Support Functions
  237574             :           \brief Traversal support functions ... incomplete-documentation
  237575             : 
  237576             :           These functions have been made public as part of the design, but they are suggested for internal use 
  237577             :           or by particularly knowledgable users for specialized tools or applications.
  237578             :        */
  237579             :       /* */
  237580             : 
  237581             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  237582             :        // (inferior to ROSE traversal mechanism, experimental).
  237583             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  237584             :        */
  237585             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  237586             : 
  237587             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  237588             :       /*! \brief support for the classic visitor pattern done in GoF */
  237589             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  237590             : 
  237591             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  237592             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  237593             :        */
  237594             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  237595             : 
  237596             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  237597             :        */
  237598             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  237599             : 
  237600             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  237601             :        // This traversal helps support internal tools that call static member functions.
  237602             :        // note: this function operates on the memory pools.
  237603             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  237604             :        */
  237605             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  237606             :       /* */
  237607             : 
  237608             : 
  237609             :      public:
  237610             :       /* name Memory Allocation Functions
  237611             :           \brief Memory allocations functions ... incomplete-documentation
  237612             : 
  237613             :           These functions have been made public as part of the design, but they are suggested for internal use 
  237614             :           or by particularly knowledgable users for specialized tools or applications.
  237615             :        */
  237616             :       /* */
  237617             : 
  237618             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  237619             : 
  237620             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  237621             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  237622             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  237623             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  237624             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  237625             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  237626             :           being used with the AST File I/O mechanism.
  237627             :        */
  237628             :           virtual bool isInMemoryPool() override;
  237629             : 
  237630             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  237631             : 
  237632             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  237633             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  237634             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  237635             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  237636             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  237637             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  237638             :           being used with the AST File I/O mechanism.
  237639             :        */
  237640             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  237641             : 
  237642             :       // DQ (4/30/2006): Modified to be a const function.
  237643             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  237644             : 
  237645             :           This functions is part of general support for many possible tools to operate 
  237646             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  237647             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  237648             :           less than the set of pointers used by the AST file I/O. This is part of
  237649             :           work implemented by Andreas, and support tools such as the AST graph generation.
  237650             : 
  237651             :           \warning This function can return unexpected data members and thus the 
  237652             :                    order and the number of elements is unpredicable and subject 
  237653             :                    to change.
  237654             : 
  237655             :           \returns STL vector of pairs of SgNode* and strings
  237656             :        */
  237657             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  237658             : 
  237659             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  237660             : 
  237661             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  237662             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  237663             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  237664             : 
  237665             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  237666             :                    and subject to change.
  237667             :        */
  237668             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  237669             : 
  237670             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  237671             : 
  237672             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  237673             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  237674             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  237675             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  237676             : 
  237677             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  237678             : 
  237679             :           \returns long
  237680             :        */
  237681             :           virtual long getChildIndex( SgNode* childNode ) const override;
  237682             : 
  237683             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  237684             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  237685             :       /* \brief Constructor for use by AST File I/O Mechanism
  237686             : 
  237687             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  237688             :           which obtained via fast binary file I/O from disk.
  237689             :        */
  237690             :        // SgConjugateOp( SgConjugateOpStorageClass& source );
  237691             : 
  237692             : 
  237693             : 
  237694             : 
  237695             : 
  237696             :  // JH (10/24/2005): methods added to support the ast file IO
  237697             :     private:
  237698             : 
  237699             :       /* name AST Memory Allocation Support Functions
  237700             :           \brief Memory allocations support....
  237701             : 
  237702             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  237703             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  237704             :           and support the AST File I/O Mechanism.
  237705             :        */
  237706             :       /* */
  237707             : 
  237708             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  237709             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  237710             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  237711             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  237712             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  237713             :           a correspinding one in the AST_FILE_IO class!
  237714             :        */
  237715             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  237716             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  237717             :       /* \brief Typedef used for low level memory access.
  237718             :        */
  237719             :        // typedef unsigned char* TestType;
  237720             : 
  237721             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  237722             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  237723             :       /* \brief Typedef used to hold memory addresses as values.
  237724             :        */
  237725             :        // typedef unsigned long  AddressType;
  237726             : 
  237727             : 
  237728             : 
  237729             :        // necessary, to have direct access to the p_freepointer and the private methods !
  237730             :       /*! \brief friend class declaration to support AST File I/O */
  237731             :           friend class AST_FILE_IO;
  237732             : 
  237733             :       /*! \brief friend class declaration to support AST File I/O */
  237734             :           friend class SgConjugateOpStorageClass;
  237735             : 
  237736             :       /*! \brief friend class declaration to support AST File I/O */
  237737             :           friend class AstSpecificDataManagingClass;
  237738             : 
  237739             :       /*! \brief friend class declaration to support AST File I/O */
  237740             :           friend class AstSpecificDataManagingClassStorageClass;
  237741             :     public:
  237742             :       /*! \brief IR node constructor to support AST File I/O */
  237743             :           SgConjugateOp( const SgConjugateOpStorageClass& source );
  237744             : 
  237745             :  // private: // JJW hack
  237746             :        /*
  237747             :           name AST Memory Allocation Support Variables
  237748             :           Memory allocations support variables 
  237749             : 
  237750             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  237751             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  237752             :           and support the AST File I/O Mechanism.
  237753             :        */
  237754             :       /* */
  237755             : 
  237756             :     public:
  237757             : 
  237758             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  237759             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  237760             :       // virtual SgNode* addRegExpAttribute();
  237761             :       /*! \brief Support for AST matching using regular expression.
  237762             : 
  237763             :           This support is incomplete and the subject of current research to define 
  237764             :           RegEx trees to support inexact matching.
  237765             :        */
  237766             :           SgConjugateOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  237767             : 
  237768             : // *** COMMON CODE SECTION ENDS HERE ***
  237769             : 
  237770             : 
  237771             : // End of memberFunctionString
  237772             : // Start of memberFunctionString
  237773             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  237774             : 
  237775             :      // the generated cast function
  237776             :      // friend ROSE_DLL_API SgConjugateOp* isSgConjugateOp ( SgNode* s );
  237777             : 
  237778             :           typedef SgUnaryOp base_node_type;
  237779             : 
  237780             : 
  237781             : // End of memberFunctionString
  237782             : // Start of memberFunctionString
  237783             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  237784             : 
  237785             :           void post_construction_initialization() override;
  237786             : 
  237787             : 
  237788             : // End of memberFunctionString
  237789             : // Start of memberFunctionString
  237790             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  237791             : 
  237792           0 :           int precedence() const override { return 15; }
  237793             : 
  237794             : 
  237795             : // End of memberFunctionString
  237796             : 
  237797             : 
  237798             :      public: 
  237799             :          virtual ~SgConjugateOp();
  237800             : 
  237801             : 
  237802             :      public: 
  237803             :          SgConjugateOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  237804             :          SgConjugateOp(SgExpression* operand_i, SgType* expression_type); 
  237805             : 
  237806             :     protected:
  237807             : 
  237808             :     friend struct Rose::Traits::generated::describe_node_t<SgConjugateOp>;
  237809             : 
  237810             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237811             : 
  237812             : 
  237813             :    };
  237814             : #endif
  237815             : 
  237816             : // postdeclarations for SgConjugateOp
  237817             : 
  237818             : /* #line 237819 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237819             : 
  237820             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  237821             : 
  237822             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237823             : 
  237824             : 
  237825             : /* #line 237826 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237826             : 
  237827             : 
  237828             : 
  237829             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237830             : 
  237831             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  237832             : //      This code is automatically generated for each 
  237833             : //      terminal and non-terminal within the defined 
  237834             : //      grammar.  There is a simple way to change the 
  237835             : //      code to fix bugs etc.  See the ROSE README file
  237836             : //      for directions.
  237837             : 
  237838             : // tps: (02/22/2010): Adding DLL export requirements
  237839             : #include "rosedll.h"
  237840             : 
  237841             : // predeclarations for SgUserDefinedUnaryOp
  237842             : 
  237843             : /* #line 237844 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237844             : 
  237845             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  237846             : 
  237847             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  237848             : 
  237849             : #if 1
  237850             : // Class Definition for SgUserDefinedUnaryOp
  237851             : class ROSE_DLL_API SgUserDefinedUnaryOp  : public SgUnaryOp
  237852             :    {
  237853             :      public:
  237854             : 
  237855             : 
  237856             : /* #line 237857 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  237857             : 
  237858             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  237859             : // Start of memberFunctionString
  237860             : /* #line 1851 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  237861             : 
  237862             :           SgType* get_type() const override;
  237863             : 
  237864             : 
  237865             : // End of memberFunctionString
  237866             : // Start of memberFunctionString
  237867             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  237868             : 
  237869             : // *** COMMON CODE SECTION BEGINS HERE ***
  237870             : 
  237871             :     public:
  237872             : 
  237873             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  237874             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  237875             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  237876             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  237877             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  237878             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  237879             : 
  237880             :       /*! \brief returns a string representing the class name */
  237881             :           virtual std::string class_name() const override;
  237882             : 
  237883             :       /*! \brief returns new style SageIII enum values */
  237884             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  237885             : 
  237886             :       /*! \brief static variant value */
  237887             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  237888             :        // static const VariantT static_variant = V_SgUserDefinedUnaryOp;
  237889             :           enum { static_variant = V_SgUserDefinedUnaryOp };
  237890             : 
  237891             :        /* the generated cast function */
  237892             :       /*! \brief Casts pointer from base class to derived class */
  237893             :           ROSE_DLL_API friend       SgUserDefinedUnaryOp* isSgUserDefinedUnaryOp(       SgNode * s );
  237894             : 
  237895             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  237896             :           ROSE_DLL_API friend const SgUserDefinedUnaryOp* isSgUserDefinedUnaryOp( const SgNode * s );
  237897             : 
  237898             :      // ******************************************
  237899             :      // * Memory Pool / New / Delete
  237900             :      // ******************************************
  237901             : 
  237902             :      public:
  237903             :           /// \private
  237904             :           static const unsigned pool_size; //
  237905             :           /// \private
  237906             :           static std::vector<unsigned char *> pools; //
  237907             :           /// \private
  237908             :           static SgUserDefinedUnaryOp * next_node; // 
  237909             : 
  237910             :           /// \private
  237911             :           static unsigned long initializeStorageClassArray(SgUserDefinedUnaryOpStorageClass *); //
  237912             : 
  237913             :           /// \private
  237914             :           static void clearMemoryPool(); //
  237915             :           static void deleteMemoryPool(); //
  237916             : 
  237917             :           /// \private
  237918             :           static void extendMemoryPoolForFileIO(); //
  237919             : 
  237920             :           /// \private
  237921             :           static SgUserDefinedUnaryOp * getPointerFromGlobalIndex(unsigned long); //
  237922             :           /// \private
  237923             :           static SgUserDefinedUnaryOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  237924             : 
  237925             :           /// \private
  237926             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  237927             :           /// \private
  237928             :           static void resetValidFreepointers(); //
  237929             :           /// \private
  237930             :           static unsigned long getNumberOfLastValidPointer(); //
  237931             : 
  237932             : 
  237933             : #if defined(INLINE_FUNCTIONS)
  237934             :       /*! \brief returns pointer to newly allocated IR node */
  237935             :           inline void *operator new (size_t size);
  237936             : #else
  237937             :       /*! \brief returns pointer to newly allocated IR node */
  237938             :           void *operator new (size_t size);
  237939             : #endif
  237940             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  237941             :           void operator delete (void* pointer, size_t size);
  237942             : 
  237943             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  237944           0 :           void operator delete (void* pointer)
  237945             :              {
  237946             :             // This is the generated delete operator...
  237947           0 :                SgUserDefinedUnaryOp::operator delete (pointer,sizeof(SgUserDefinedUnaryOp));
  237948             :              }
  237949             : 
  237950             :       /*! \brief Returns the total number of IR nodes of this type */
  237951             :           static size_t numberOfNodes();
  237952             : 
  237953             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  237954             :           static size_t memoryUsage();
  237955             : 
  237956             :       // End of scope which started in IR nodes specific code 
  237957             :       /* */
  237958             : 
  237959             :       /* name Internal Functions
  237960             :           \brief Internal functions ... incomplete-documentation
  237961             : 
  237962             :           These functions have been made public as part of the design, but they are suggested for internal use 
  237963             :           or by particularly knowledgeable users for specialized tools or applications.
  237964             : 
  237965             :           \internal We could not make these private because they are required by user for special purposes. And 
  237966             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  237967             :          
  237968             :        */
  237969             : 
  237970             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  237971             :        // overridden in every class by *generated* implementation
  237972             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  237973             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  237974             :        // MS: 06/28/02 container of names of variables or container indices 
  237975             :        // used used in the traversal to access AST successor nodes
  237976             :        // overridden in every class by *generated* implementation
  237977             :       /*! \brief container of names of variables or container indices used used in the traversal
  237978             :           to access AST successor nodes overridden in every class by *generated* implementation */
  237979             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  237980             : 
  237981             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  237982             :        // than all the vector copies. The implementation for these functions is generated for each class.
  237983             :       /*! \brief return number of children in the traversal successor list */
  237984             :           virtual size_t get_numberOfTraversalSuccessors() override;
  237985             :       /*! \brief index-based access to traversal successors by index number */
  237986             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  237987             :       /*! \brief index-based access to traversal successors by child node */
  237988             :           virtual size_t get_childIndex(SgNode *child) override;
  237989             : 
  237990             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  237991             :        // MS: 08/16/2002 method for generating RTI information
  237992             :       /*! \brief return C++ Runtime-Time-Information */
  237993             :           virtual RTIReturnType roseRTI() override;
  237994             : #endif
  237995             :       /* */
  237996             : 
  237997             : 
  237998             : 
  237999             :       /* name Deprecated Functions
  238000             :           \brief Deprecated functions ... incomplete-documentation
  238001             : 
  238002             :           These functions have been deprecated from use.
  238003             :        */
  238004             :       /* */
  238005             : 
  238006             :       /*! returns a C style string (char*) representing the class name */
  238007             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  238008             : 
  238009             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  238010             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  238011             : #if 0
  238012             :       /*! returns old style Sage II enum values */
  238013             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  238014             :       /*! returns old style Sage II enum values */
  238015             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  238016             : #endif
  238017             :       /* */
  238018             : 
  238019             : 
  238020             : 
  238021             : 
  238022             :      public:
  238023             :       /* name Traversal Support Functions
  238024             :           \brief Traversal support functions ... incomplete-documentation
  238025             : 
  238026             :           These functions have been made public as part of the design, but they are suggested for internal use 
  238027             :           or by particularly knowledgable users for specialized tools or applications.
  238028             :        */
  238029             :       /* */
  238030             : 
  238031             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  238032             :        // (inferior to ROSE traversal mechanism, experimental).
  238033             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  238034             :        */
  238035             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  238036             : 
  238037             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  238038             :       /*! \brief support for the classic visitor pattern done in GoF */
  238039             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  238040             : 
  238041             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  238042             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  238043             :        */
  238044             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  238045             : 
  238046             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  238047             :        */
  238048             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  238049             : 
  238050             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  238051             :        // This traversal helps support internal tools that call static member functions.
  238052             :        // note: this function operates on the memory pools.
  238053             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  238054             :        */
  238055             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  238056             :       /* */
  238057             : 
  238058             : 
  238059             :      public:
  238060             :       /* name Memory Allocation Functions
  238061             :           \brief Memory allocations functions ... incomplete-documentation
  238062             : 
  238063             :           These functions have been made public as part of the design, but they are suggested for internal use 
  238064             :           or by particularly knowledgable users for specialized tools or applications.
  238065             :        */
  238066             :       /* */
  238067             : 
  238068             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  238069             : 
  238070             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  238071             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  238072             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  238073             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  238074             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  238075             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  238076             :           being used with the AST File I/O mechanism.
  238077             :        */
  238078             :           virtual bool isInMemoryPool() override;
  238079             : 
  238080             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  238081             : 
  238082             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  238083             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  238084             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  238085             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  238086             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  238087             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  238088             :           being used with the AST File I/O mechanism.
  238089             :        */
  238090             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  238091             : 
  238092             :       // DQ (4/30/2006): Modified to be a const function.
  238093             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  238094             : 
  238095             :           This functions is part of general support for many possible tools to operate 
  238096             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  238097             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  238098             :           less than the set of pointers used by the AST file I/O. This is part of
  238099             :           work implemented by Andreas, and support tools such as the AST graph generation.
  238100             : 
  238101             :           \warning This function can return unexpected data members and thus the 
  238102             :                    order and the number of elements is unpredicable and subject 
  238103             :                    to change.
  238104             : 
  238105             :           \returns STL vector of pairs of SgNode* and strings
  238106             :        */
  238107             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  238108             : 
  238109             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  238110             : 
  238111             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  238112             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  238113             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  238114             : 
  238115             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  238116             :                    and subject to change.
  238117             :        */
  238118             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  238119             : 
  238120             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  238121             : 
  238122             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  238123             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  238124             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  238125             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  238126             : 
  238127             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  238128             : 
  238129             :           \returns long
  238130             :        */
  238131             :           virtual long getChildIndex( SgNode* childNode ) const override;
  238132             : 
  238133             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  238134             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  238135             :       /* \brief Constructor for use by AST File I/O Mechanism
  238136             : 
  238137             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  238138             :           which obtained via fast binary file I/O from disk.
  238139             :        */
  238140             :        // SgUserDefinedUnaryOp( SgUserDefinedUnaryOpStorageClass& source );
  238141             : 
  238142             : 
  238143             : 
  238144             : 
  238145             : 
  238146             :  // JH (10/24/2005): methods added to support the ast file IO
  238147             :     private:
  238148             : 
  238149             :       /* name AST Memory Allocation Support Functions
  238150             :           \brief Memory allocations support....
  238151             : 
  238152             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  238153             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  238154             :           and support the AST File I/O Mechanism.
  238155             :        */
  238156             :       /* */
  238157             : 
  238158             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  238159             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  238160             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  238161             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  238162             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  238163             :           a correspinding one in the AST_FILE_IO class!
  238164             :        */
  238165             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  238166             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  238167             :       /* \brief Typedef used for low level memory access.
  238168             :        */
  238169             :        // typedef unsigned char* TestType;
  238170             : 
  238171             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  238172             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  238173             :       /* \brief Typedef used to hold memory addresses as values.
  238174             :        */
  238175             :        // typedef unsigned long  AddressType;
  238176             : 
  238177             : 
  238178             : 
  238179             :        // necessary, to have direct access to the p_freepointer and the private methods !
  238180             :       /*! \brief friend class declaration to support AST File I/O */
  238181             :           friend class AST_FILE_IO;
  238182             : 
  238183             :       /*! \brief friend class declaration to support AST File I/O */
  238184             :           friend class SgUserDefinedUnaryOpStorageClass;
  238185             : 
  238186             :       /*! \brief friend class declaration to support AST File I/O */
  238187             :           friend class AstSpecificDataManagingClass;
  238188             : 
  238189             :       /*! \brief friend class declaration to support AST File I/O */
  238190             :           friend class AstSpecificDataManagingClassStorageClass;
  238191             :     public:
  238192             :       /*! \brief IR node constructor to support AST File I/O */
  238193             :           SgUserDefinedUnaryOp( const SgUserDefinedUnaryOpStorageClass& source );
  238194             : 
  238195             :  // private: // JJW hack
  238196             :        /*
  238197             :           name AST Memory Allocation Support Variables
  238198             :           Memory allocations support variables 
  238199             : 
  238200             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  238201             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  238202             :           and support the AST File I/O Mechanism.
  238203             :        */
  238204             :       /* */
  238205             : 
  238206             :     public:
  238207             : 
  238208             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  238209             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  238210             :       // virtual SgNode* addRegExpAttribute();
  238211             :       /*! \brief Support for AST matching using regular expression.
  238212             : 
  238213             :           This support is incomplete and the subject of current research to define 
  238214             :           RegEx trees to support inexact matching.
  238215             :        */
  238216             :           SgUserDefinedUnaryOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  238217             : 
  238218             : // *** COMMON CODE SECTION ENDS HERE ***
  238219             : 
  238220             : 
  238221             : // End of memberFunctionString
  238222             : // Start of memberFunctionString
  238223             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  238224             : 
  238225             :      // the generated cast function
  238226             :      // friend ROSE_DLL_API SgUserDefinedUnaryOp* isSgUserDefinedUnaryOp ( SgNode* s );
  238227             : 
  238228             :           typedef SgUnaryOp base_node_type;
  238229             : 
  238230             : 
  238231             : // End of memberFunctionString
  238232             : // Start of memberFunctionString
  238233             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  238234             : 
  238235             :           void post_construction_initialization() override;
  238236             : 
  238237             : 
  238238             : // End of memberFunctionString
  238239             : // Start of memberFunctionString
  238240             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  238241             : 
  238242           0 :           int precedence() const override { return  2; }
  238243             : 
  238244             : 
  238245             : // End of memberFunctionString
  238246             : 
  238247             :      public: 
  238248             :          SgName get_operator_name() const;
  238249             :          void set_operator_name(SgName operator_name);
  238250             : 
  238251             :      public: 
  238252             :          SgFunctionSymbol* get_symbol() const;
  238253             :          void set_symbol(SgFunctionSymbol* symbol);
  238254             : 
  238255             : 
  238256             :      public: 
  238257             :          virtual ~SgUserDefinedUnaryOp();
  238258             : 
  238259             : 
  238260             :      public: 
  238261             :          SgUserDefinedUnaryOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL, SgName operator_name = "", SgFunctionSymbol* symbol = NULL); 
  238262             :          SgUserDefinedUnaryOp(SgExpression* operand_i, SgType* expression_type, SgName operator_name, SgFunctionSymbol* symbol); 
  238263             : 
  238264             :     protected:
  238265             : // Start of memberFunctionString
  238266             : SgName p_operator_name;
  238267             :           
  238268             : // End of memberFunctionString
  238269             : // Start of memberFunctionString
  238270             : SgFunctionSymbol* p_symbol;
  238271             :           
  238272             : // End of memberFunctionString
  238273             : 
  238274             :     friend struct Rose::Traits::generated::describe_node_t<SgUserDefinedUnaryOp>;
  238275             :     friend struct Rose::Traits::generated::describe_field_t<SgUserDefinedUnaryOp, SgName,&SgUserDefinedUnaryOp::p_operator_name>;
  238276             :     friend struct Rose::Traits::generated::describe_field_t<SgUserDefinedUnaryOp, SgFunctionSymbol*,&SgUserDefinedUnaryOp::p_symbol>;
  238277             : 
  238278             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238279             : 
  238280             : 
  238281             :    };
  238282             : #endif
  238283             : 
  238284             : // postdeclarations for SgUserDefinedUnaryOp
  238285             : 
  238286             : /* #line 238287 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238287             : 
  238288             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  238289             : 
  238290             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238291             : 
  238292             : 
  238293             : /* #line 238294 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238294             : 
  238295             : 
  238296             : 
  238297             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238298             : 
  238299             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  238300             : //      This code is automatically generated for each 
  238301             : //      terminal and non-terminal within the defined 
  238302             : //      grammar.  There is a simple way to change the 
  238303             : //      code to fix bugs etc.  See the ROSE README file
  238304             : //      for directions.
  238305             : 
  238306             : // tps: (02/22/2010): Adding DLL export requirements
  238307             : #include "rosedll.h"
  238308             : 
  238309             : // predeclarations for SgMatrixTransposeOp
  238310             : 
  238311             : /* #line 238312 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238312             : 
  238313             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  238314             : 
  238315             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238316             : 
  238317             : #if 1
  238318             : // Class Definition for SgMatrixTransposeOp
  238319             : class ROSE_DLL_API SgMatrixTransposeOp  : public SgUnaryOp
  238320             :    {
  238321             :      public:
  238322             : 
  238323             : 
  238324             : /* #line 238325 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238325             : 
  238326             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  238327             : // Start of memberFunctionString
  238328             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  238329             : 
  238330             : // *** COMMON CODE SECTION BEGINS HERE ***
  238331             : 
  238332             :     public:
  238333             : 
  238334             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  238335             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  238336             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  238337             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  238338             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  238339             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  238340             : 
  238341             :       /*! \brief returns a string representing the class name */
  238342             :           virtual std::string class_name() const override;
  238343             : 
  238344             :       /*! \brief returns new style SageIII enum values */
  238345             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  238346             : 
  238347             :       /*! \brief static variant value */
  238348             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  238349             :        // static const VariantT static_variant = V_SgMatrixTransposeOp;
  238350             :           enum { static_variant = V_SgMatrixTransposeOp };
  238351             : 
  238352             :        /* the generated cast function */
  238353             :       /*! \brief Casts pointer from base class to derived class */
  238354             :           ROSE_DLL_API friend       SgMatrixTransposeOp* isSgMatrixTransposeOp(       SgNode * s );
  238355             : 
  238356             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  238357             :           ROSE_DLL_API friend const SgMatrixTransposeOp* isSgMatrixTransposeOp( const SgNode * s );
  238358             : 
  238359             :      // ******************************************
  238360             :      // * Memory Pool / New / Delete
  238361             :      // ******************************************
  238362             : 
  238363             :      public:
  238364             :           /// \private
  238365             :           static const unsigned pool_size; //
  238366             :           /// \private
  238367             :           static std::vector<unsigned char *> pools; //
  238368             :           /// \private
  238369             :           static SgMatrixTransposeOp * next_node; // 
  238370             : 
  238371             :           /// \private
  238372             :           static unsigned long initializeStorageClassArray(SgMatrixTransposeOpStorageClass *); //
  238373             : 
  238374             :           /// \private
  238375             :           static void clearMemoryPool(); //
  238376             :           static void deleteMemoryPool(); //
  238377             : 
  238378             :           /// \private
  238379             :           static void extendMemoryPoolForFileIO(); //
  238380             : 
  238381             :           /// \private
  238382             :           static SgMatrixTransposeOp * getPointerFromGlobalIndex(unsigned long); //
  238383             :           /// \private
  238384             :           static SgMatrixTransposeOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  238385             : 
  238386             :           /// \private
  238387             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  238388             :           /// \private
  238389             :           static void resetValidFreepointers(); //
  238390             :           /// \private
  238391             :           static unsigned long getNumberOfLastValidPointer(); //
  238392             : 
  238393             : 
  238394             : #if defined(INLINE_FUNCTIONS)
  238395             :       /*! \brief returns pointer to newly allocated IR node */
  238396             :           inline void *operator new (size_t size);
  238397             : #else
  238398             :       /*! \brief returns pointer to newly allocated IR node */
  238399             :           void *operator new (size_t size);
  238400             : #endif
  238401             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  238402             :           void operator delete (void* pointer, size_t size);
  238403             : 
  238404             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  238405           0 :           void operator delete (void* pointer)
  238406             :              {
  238407             :             // This is the generated delete operator...
  238408           0 :                SgMatrixTransposeOp::operator delete (pointer,sizeof(SgMatrixTransposeOp));
  238409             :              }
  238410             : 
  238411             :       /*! \brief Returns the total number of IR nodes of this type */
  238412             :           static size_t numberOfNodes();
  238413             : 
  238414             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  238415             :           static size_t memoryUsage();
  238416             : 
  238417             :       // End of scope which started in IR nodes specific code 
  238418             :       /* */
  238419             : 
  238420             :       /* name Internal Functions
  238421             :           \brief Internal functions ... incomplete-documentation
  238422             : 
  238423             :           These functions have been made public as part of the design, but they are suggested for internal use 
  238424             :           or by particularly knowledgeable users for specialized tools or applications.
  238425             : 
  238426             :           \internal We could not make these private because they are required by user for special purposes. And 
  238427             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  238428             :          
  238429             :        */
  238430             : 
  238431             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  238432             :        // overridden in every class by *generated* implementation
  238433             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  238434             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  238435             :        // MS: 06/28/02 container of names of variables or container indices 
  238436             :        // used used in the traversal to access AST successor nodes
  238437             :        // overridden in every class by *generated* implementation
  238438             :       /*! \brief container of names of variables or container indices used used in the traversal
  238439             :           to access AST successor nodes overridden in every class by *generated* implementation */
  238440             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  238441             : 
  238442             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  238443             :        // than all the vector copies. The implementation for these functions is generated for each class.
  238444             :       /*! \brief return number of children in the traversal successor list */
  238445             :           virtual size_t get_numberOfTraversalSuccessors() override;
  238446             :       /*! \brief index-based access to traversal successors by index number */
  238447             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  238448             :       /*! \brief index-based access to traversal successors by child node */
  238449             :           virtual size_t get_childIndex(SgNode *child) override;
  238450             : 
  238451             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  238452             :        // MS: 08/16/2002 method for generating RTI information
  238453             :       /*! \brief return C++ Runtime-Time-Information */
  238454             :           virtual RTIReturnType roseRTI() override;
  238455             : #endif
  238456             :       /* */
  238457             : 
  238458             : 
  238459             : 
  238460             :       /* name Deprecated Functions
  238461             :           \brief Deprecated functions ... incomplete-documentation
  238462             : 
  238463             :           These functions have been deprecated from use.
  238464             :        */
  238465             :       /* */
  238466             : 
  238467             :       /*! returns a C style string (char*) representing the class name */
  238468             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  238469             : 
  238470             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  238471             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  238472             : #if 0
  238473             :       /*! returns old style Sage II enum values */
  238474             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  238475             :       /*! returns old style Sage II enum values */
  238476             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  238477             : #endif
  238478             :       /* */
  238479             : 
  238480             : 
  238481             : 
  238482             : 
  238483             :      public:
  238484             :       /* name Traversal Support Functions
  238485             :           \brief Traversal support functions ... incomplete-documentation
  238486             : 
  238487             :           These functions have been made public as part of the design, but they are suggested for internal use 
  238488             :           or by particularly knowledgable users for specialized tools or applications.
  238489             :        */
  238490             :       /* */
  238491             : 
  238492             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  238493             :        // (inferior to ROSE traversal mechanism, experimental).
  238494             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  238495             :        */
  238496             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  238497             : 
  238498             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  238499             :       /*! \brief support for the classic visitor pattern done in GoF */
  238500             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  238501             : 
  238502             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  238503             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  238504             :        */
  238505             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  238506             : 
  238507             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  238508             :        */
  238509             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  238510             : 
  238511             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  238512             :        // This traversal helps support internal tools that call static member functions.
  238513             :        // note: this function operates on the memory pools.
  238514             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  238515             :        */
  238516             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  238517             :       /* */
  238518             : 
  238519             : 
  238520             :      public:
  238521             :       /* name Memory Allocation Functions
  238522             :           \brief Memory allocations functions ... incomplete-documentation
  238523             : 
  238524             :           These functions have been made public as part of the design, but they are suggested for internal use 
  238525             :           or by particularly knowledgable users for specialized tools or applications.
  238526             :        */
  238527             :       /* */
  238528             : 
  238529             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  238530             : 
  238531             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  238532             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  238533             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  238534             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  238535             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  238536             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  238537             :           being used with the AST File I/O mechanism.
  238538             :        */
  238539             :           virtual bool isInMemoryPool() override;
  238540             : 
  238541             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  238542             : 
  238543             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  238544             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  238545             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  238546             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  238547             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  238548             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  238549             :           being used with the AST File I/O mechanism.
  238550             :        */
  238551             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  238552             : 
  238553             :       // DQ (4/30/2006): Modified to be a const function.
  238554             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  238555             : 
  238556             :           This functions is part of general support for many possible tools to operate 
  238557             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  238558             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  238559             :           less than the set of pointers used by the AST file I/O. This is part of
  238560             :           work implemented by Andreas, and support tools such as the AST graph generation.
  238561             : 
  238562             :           \warning This function can return unexpected data members and thus the 
  238563             :                    order and the number of elements is unpredicable and subject 
  238564             :                    to change.
  238565             : 
  238566             :           \returns STL vector of pairs of SgNode* and strings
  238567             :        */
  238568             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  238569             : 
  238570             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  238571             : 
  238572             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  238573             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  238574             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  238575             : 
  238576             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  238577             :                    and subject to change.
  238578             :        */
  238579             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  238580             : 
  238581             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  238582             : 
  238583             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  238584             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  238585             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  238586             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  238587             : 
  238588             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  238589             : 
  238590             :           \returns long
  238591             :        */
  238592             :           virtual long getChildIndex( SgNode* childNode ) const override;
  238593             : 
  238594             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  238595             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  238596             :       /* \brief Constructor for use by AST File I/O Mechanism
  238597             : 
  238598             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  238599             :           which obtained via fast binary file I/O from disk.
  238600             :        */
  238601             :        // SgMatrixTransposeOp( SgMatrixTransposeOpStorageClass& source );
  238602             : 
  238603             : 
  238604             : 
  238605             : 
  238606             : 
  238607             :  // JH (10/24/2005): methods added to support the ast file IO
  238608             :     private:
  238609             : 
  238610             :       /* name AST Memory Allocation Support Functions
  238611             :           \brief Memory allocations support....
  238612             : 
  238613             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  238614             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  238615             :           and support the AST File I/O Mechanism.
  238616             :        */
  238617             :       /* */
  238618             : 
  238619             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  238620             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  238621             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  238622             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  238623             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  238624             :           a correspinding one in the AST_FILE_IO class!
  238625             :        */
  238626             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  238627             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  238628             :       /* \brief Typedef used for low level memory access.
  238629             :        */
  238630             :        // typedef unsigned char* TestType;
  238631             : 
  238632             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  238633             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  238634             :       /* \brief Typedef used to hold memory addresses as values.
  238635             :        */
  238636             :        // typedef unsigned long  AddressType;
  238637             : 
  238638             : 
  238639             : 
  238640             :        // necessary, to have direct access to the p_freepointer and the private methods !
  238641             :       /*! \brief friend class declaration to support AST File I/O */
  238642             :           friend class AST_FILE_IO;
  238643             : 
  238644             :       /*! \brief friend class declaration to support AST File I/O */
  238645             :           friend class SgMatrixTransposeOpStorageClass;
  238646             : 
  238647             :       /*! \brief friend class declaration to support AST File I/O */
  238648             :           friend class AstSpecificDataManagingClass;
  238649             : 
  238650             :       /*! \brief friend class declaration to support AST File I/O */
  238651             :           friend class AstSpecificDataManagingClassStorageClass;
  238652             :     public:
  238653             :       /*! \brief IR node constructor to support AST File I/O */
  238654             :           SgMatrixTransposeOp( const SgMatrixTransposeOpStorageClass& source );
  238655             : 
  238656             :  // private: // JJW hack
  238657             :        /*
  238658             :           name AST Memory Allocation Support Variables
  238659             :           Memory allocations support variables 
  238660             : 
  238661             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  238662             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  238663             :           and support the AST File I/O Mechanism.
  238664             :        */
  238665             :       /* */
  238666             : 
  238667             :     public:
  238668             : 
  238669             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  238670             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  238671             :       // virtual SgNode* addRegExpAttribute();
  238672             :       /*! \brief Support for AST matching using regular expression.
  238673             : 
  238674             :           This support is incomplete and the subject of current research to define 
  238675             :           RegEx trees to support inexact matching.
  238676             :        */
  238677             :           SgMatrixTransposeOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  238678             : 
  238679             : // *** COMMON CODE SECTION ENDS HERE ***
  238680             : 
  238681             : 
  238682             : // End of memberFunctionString
  238683             : // Start of memberFunctionString
  238684             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  238685             : 
  238686             :      // the generated cast function
  238687             :      // friend ROSE_DLL_API SgMatrixTransposeOp* isSgMatrixTransposeOp ( SgNode* s );
  238688             : 
  238689             :           typedef SgUnaryOp base_node_type;
  238690             : 
  238691             : 
  238692             : // End of memberFunctionString
  238693             : // Start of memberFunctionString
  238694             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  238695             : 
  238696             :           void post_construction_initialization() override;
  238697             : 
  238698             : 
  238699             : // End of memberFunctionString
  238700             : // Start of memberFunctionString
  238701             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  238702             : 
  238703           0 :           int precedence() const override { return 15; }
  238704             : 
  238705             : 
  238706             : // End of memberFunctionString
  238707             : 
  238708             :      public: 
  238709             :          bool get_is_conjugate() const;
  238710             :          void set_is_conjugate(bool is_conjugate);
  238711             : 
  238712             : 
  238713             :      public: 
  238714             :          virtual ~SgMatrixTransposeOp();
  238715             : 
  238716             : 
  238717             :      public: 
  238718             :          SgMatrixTransposeOp(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  238719             :          SgMatrixTransposeOp(SgExpression* operand_i, SgType* expression_type); 
  238720             : 
  238721             :     protected:
  238722             : // Start of memberFunctionString
  238723             : bool p_is_conjugate;
  238724             :           
  238725             : // End of memberFunctionString
  238726             : 
  238727             :     friend struct Rose::Traits::generated::describe_node_t<SgMatrixTransposeOp>;
  238728             :     friend struct Rose::Traits::generated::describe_field_t<SgMatrixTransposeOp, bool,&SgMatrixTransposeOp::p_is_conjugate>;
  238729             : 
  238730             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238731             : 
  238732             : 
  238733             :    };
  238734             : #endif
  238735             : 
  238736             : // postdeclarations for SgMatrixTransposeOp
  238737             : 
  238738             : /* #line 238739 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238739             : 
  238740             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  238741             : 
  238742             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238743             : 
  238744             : 
  238745             : /* #line 238746 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238746             : 
  238747             : 
  238748             : 
  238749             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238750             : 
  238751             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  238752             : //      This code is automatically generated for each 
  238753             : //      terminal and non-terminal within the defined 
  238754             : //      grammar.  There is a simple way to change the 
  238755             : //      code to fix bugs etc.  See the ROSE README file
  238756             : //      for directions.
  238757             : 
  238758             : // tps: (02/22/2010): Adding DLL export requirements
  238759             : #include "rosedll.h"
  238760             : 
  238761             : // predeclarations for SgBinaryOp
  238762             : 
  238763             : /* #line 238764 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238764             : 
  238765             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  238766             : 
  238767             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  238768             : 
  238769             : #if 1
  238770             : // Class Definition for SgBinaryOp
  238771             : class ROSE_DLL_API SgBinaryOp  : public SgExpression
  238772             :    {
  238773             :      public:
  238774             : 
  238775             : 
  238776             : /* #line 238777 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  238777             : 
  238778             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  238779             : // Start of memberFunctionString
  238780             : /* #line 190 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  238781             : 
  238782             :           int length() const ROSE_DEPRECATED_FUNCTION;
  238783             :           bool empty() const ROSE_DEPRECATED_FUNCTION;
  238784             :        // void operator_unparse( const char *, Unparse_Info &, ostream & );
  238785             : 
  238786             : 
  238787             : // End of memberFunctionString
  238788             : // Start of memberFunctionString
  238789             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  238790             : 
  238791             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  238792             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  238793             : 
  238794             : 
  238795             : // End of memberFunctionString
  238796             : // Start of memberFunctionString
  238797             : /* #line 233 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  238798             : 
  238799             :           SgExpression* get_lhs_operand() const;
  238800             :           void set_lhs_operand(SgExpression * exp);
  238801             :           SgExpression* get_rhs_operand() const;
  238802             :           void set_rhs_operand(SgExpression * exp);
  238803             :           SgType* get_type() const override;
  238804             : 
  238805             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  238806             :           virtual unsigned int cfgIndexForEnd() const override;
  238807             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  238808             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  238809             : #endif
  238810             : 
  238811             : 
  238812             : 
  238813             : // End of memberFunctionString
  238814             : // Start of memberFunctionString
  238815             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  238816             : 
  238817             : // *** COMMON CODE SECTION BEGINS HERE ***
  238818             : 
  238819             :     public:
  238820             : 
  238821             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  238822             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  238823             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  238824             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  238825             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  238826             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  238827             : 
  238828             :       /*! \brief returns a string representing the class name */
  238829             :           virtual std::string class_name() const override;
  238830             : 
  238831             :       /*! \brief returns new style SageIII enum values */
  238832             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  238833             : 
  238834             :       /*! \brief static variant value */
  238835             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  238836             :        // static const VariantT static_variant = V_SgBinaryOp;
  238837             :           enum { static_variant = V_SgBinaryOp };
  238838             : 
  238839             :        /* the generated cast function */
  238840             :       /*! \brief Casts pointer from base class to derived class */
  238841             :           ROSE_DLL_API friend       SgBinaryOp* isSgBinaryOp(       SgNode * s );
  238842             : 
  238843             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  238844             :           ROSE_DLL_API friend const SgBinaryOp* isSgBinaryOp( const SgNode * s );
  238845             : 
  238846             :      // ******************************************
  238847             :      // * Memory Pool / New / Delete
  238848             :      // ******************************************
  238849             : 
  238850             :      public:
  238851             :           /// \private
  238852             :           static const unsigned pool_size; //
  238853             :           /// \private
  238854             :           static std::vector<unsigned char *> pools; //
  238855             :           /// \private
  238856             :           static SgBinaryOp * next_node; // 
  238857             : 
  238858             :           /// \private
  238859             :           static unsigned long initializeStorageClassArray(SgBinaryOpStorageClass *); //
  238860             : 
  238861             :           /// \private
  238862             :           static void clearMemoryPool(); //
  238863             :           static void deleteMemoryPool(); //
  238864             : 
  238865             :           /// \private
  238866             :           static void extendMemoryPoolForFileIO(); //
  238867             : 
  238868             :           /// \private
  238869             :           static SgBinaryOp * getPointerFromGlobalIndex(unsigned long); //
  238870             :           /// \private
  238871             :           static SgBinaryOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  238872             : 
  238873             :           /// \private
  238874             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  238875             :           /// \private
  238876             :           static void resetValidFreepointers(); //
  238877             :           /// \private
  238878             :           static unsigned long getNumberOfLastValidPointer(); //
  238879             : 
  238880             : 
  238881             : #if defined(INLINE_FUNCTIONS)
  238882             :       /*! \brief returns pointer to newly allocated IR node */
  238883             :           inline void *operator new (size_t size);
  238884             : #else
  238885             :       /*! \brief returns pointer to newly allocated IR node */
  238886             :           void *operator new (size_t size);
  238887             : #endif
  238888             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  238889             :           void operator delete (void* pointer, size_t size);
  238890             : 
  238891             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  238892           0 :           void operator delete (void* pointer)
  238893             :              {
  238894             :             // This is the generated delete operator...
  238895           0 :                SgBinaryOp::operator delete (pointer,sizeof(SgBinaryOp));
  238896             :              }
  238897             : 
  238898             :       /*! \brief Returns the total number of IR nodes of this type */
  238899             :           static size_t numberOfNodes();
  238900             : 
  238901             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  238902             :           static size_t memoryUsage();
  238903             : 
  238904             :       // End of scope which started in IR nodes specific code 
  238905             :       /* */
  238906             : 
  238907             :       /* name Internal Functions
  238908             :           \brief Internal functions ... incomplete-documentation
  238909             : 
  238910             :           These functions have been made public as part of the design, but they are suggested for internal use 
  238911             :           or by particularly knowledgeable users for specialized tools or applications.
  238912             : 
  238913             :           \internal We could not make these private because they are required by user for special purposes. And 
  238914             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  238915             :          
  238916             :        */
  238917             : 
  238918             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  238919             :        // overridden in every class by *generated* implementation
  238920             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  238921             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  238922             :        // MS: 06/28/02 container of names of variables or container indices 
  238923             :        // used used in the traversal to access AST successor nodes
  238924             :        // overridden in every class by *generated* implementation
  238925             :       /*! \brief container of names of variables or container indices used used in the traversal
  238926             :           to access AST successor nodes overridden in every class by *generated* implementation */
  238927             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  238928             : 
  238929             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  238930             :        // than all the vector copies. The implementation for these functions is generated for each class.
  238931             :       /*! \brief return number of children in the traversal successor list */
  238932             :           virtual size_t get_numberOfTraversalSuccessors() override;
  238933             :       /*! \brief index-based access to traversal successors by index number */
  238934             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  238935             :       /*! \brief index-based access to traversal successors by child node */
  238936             :           virtual size_t get_childIndex(SgNode *child) override;
  238937             : 
  238938             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  238939             :        // MS: 08/16/2002 method for generating RTI information
  238940             :       /*! \brief return C++ Runtime-Time-Information */
  238941             :           virtual RTIReturnType roseRTI() override;
  238942             : #endif
  238943             :       /* */
  238944             : 
  238945             : 
  238946             : 
  238947             :       /* name Deprecated Functions
  238948             :           \brief Deprecated functions ... incomplete-documentation
  238949             : 
  238950             :           These functions have been deprecated from use.
  238951             :        */
  238952             :       /* */
  238953             : 
  238954             :       /*! returns a C style string (char*) representing the class name */
  238955             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  238956             : 
  238957             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  238958             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  238959             : #if 0
  238960             :       /*! returns old style Sage II enum values */
  238961             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  238962             :       /*! returns old style Sage II enum values */
  238963             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  238964             : #endif
  238965             :       /* */
  238966             : 
  238967             : 
  238968             : 
  238969             : 
  238970             :      public:
  238971             :       /* name Traversal Support Functions
  238972             :           \brief Traversal support functions ... incomplete-documentation
  238973             : 
  238974             :           These functions have been made public as part of the design, but they are suggested for internal use 
  238975             :           or by particularly knowledgable users for specialized tools or applications.
  238976             :        */
  238977             :       /* */
  238978             : 
  238979             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  238980             :        // (inferior to ROSE traversal mechanism, experimental).
  238981             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  238982             :        */
  238983             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  238984             : 
  238985             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  238986             :       /*! \brief support for the classic visitor pattern done in GoF */
  238987             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  238988             : 
  238989             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  238990             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  238991             :        */
  238992             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  238993             : 
  238994             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  238995             :        */
  238996             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  238997             : 
  238998             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  238999             :        // This traversal helps support internal tools that call static member functions.
  239000             :        // note: this function operates on the memory pools.
  239001             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  239002             :        */
  239003             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  239004             :       /* */
  239005             : 
  239006             : 
  239007             :      public:
  239008             :       /* name Memory Allocation Functions
  239009             :           \brief Memory allocations functions ... incomplete-documentation
  239010             : 
  239011             :           These functions have been made public as part of the design, but they are suggested for internal use 
  239012             :           or by particularly knowledgable users for specialized tools or applications.
  239013             :        */
  239014             :       /* */
  239015             : 
  239016             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  239017             : 
  239018             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  239019             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  239020             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  239021             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  239022             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  239023             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  239024             :           being used with the AST File I/O mechanism.
  239025             :        */
  239026             :           virtual bool isInMemoryPool() override;
  239027             : 
  239028             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  239029             : 
  239030             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  239031             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  239032             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  239033             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  239034             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  239035             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  239036             :           being used with the AST File I/O mechanism.
  239037             :        */
  239038             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  239039             : 
  239040             :       // DQ (4/30/2006): Modified to be a const function.
  239041             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  239042             : 
  239043             :           This functions is part of general support for many possible tools to operate 
  239044             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  239045             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  239046             :           less than the set of pointers used by the AST file I/O. This is part of
  239047             :           work implemented by Andreas, and support tools such as the AST graph generation.
  239048             : 
  239049             :           \warning This function can return unexpected data members and thus the 
  239050             :                    order and the number of elements is unpredicable and subject 
  239051             :                    to change.
  239052             : 
  239053             :           \returns STL vector of pairs of SgNode* and strings
  239054             :        */
  239055             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  239056             : 
  239057             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  239058             : 
  239059             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  239060             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  239061             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  239062             : 
  239063             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  239064             :                    and subject to change.
  239065             :        */
  239066             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  239067             : 
  239068             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  239069             : 
  239070             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  239071             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  239072             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  239073             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  239074             : 
  239075             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  239076             : 
  239077             :           \returns long
  239078             :        */
  239079             :           virtual long getChildIndex( SgNode* childNode ) const override;
  239080             : 
  239081             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  239082             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  239083             :       /* \brief Constructor for use by AST File I/O Mechanism
  239084             : 
  239085             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  239086             :           which obtained via fast binary file I/O from disk.
  239087             :        */
  239088             :        // SgBinaryOp( SgBinaryOpStorageClass& source );
  239089             : 
  239090             : 
  239091             : 
  239092             : 
  239093             : 
  239094             :  // JH (10/24/2005): methods added to support the ast file IO
  239095             :     private:
  239096             : 
  239097             :       /* name AST Memory Allocation Support Functions
  239098             :           \brief Memory allocations support....
  239099             : 
  239100             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  239101             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  239102             :           and support the AST File I/O Mechanism.
  239103             :        */
  239104             :       /* */
  239105             : 
  239106             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  239107             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  239108             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  239109             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  239110             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  239111             :           a correspinding one in the AST_FILE_IO class!
  239112             :        */
  239113             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  239114             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  239115             :       /* \brief Typedef used for low level memory access.
  239116             :        */
  239117             :        // typedef unsigned char* TestType;
  239118             : 
  239119             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  239120             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  239121             :       /* \brief Typedef used to hold memory addresses as values.
  239122             :        */
  239123             :        // typedef unsigned long  AddressType;
  239124             : 
  239125             : 
  239126             : 
  239127             :        // necessary, to have direct access to the p_freepointer and the private methods !
  239128             :       /*! \brief friend class declaration to support AST File I/O */
  239129             :           friend class AST_FILE_IO;
  239130             : 
  239131             :       /*! \brief friend class declaration to support AST File I/O */
  239132             :           friend class SgBinaryOpStorageClass;
  239133             : 
  239134             :       /*! \brief friend class declaration to support AST File I/O */
  239135             :           friend class AstSpecificDataManagingClass;
  239136             : 
  239137             :       /*! \brief friend class declaration to support AST File I/O */
  239138             :           friend class AstSpecificDataManagingClassStorageClass;
  239139             :     public:
  239140             :       /*! \brief IR node constructor to support AST File I/O */
  239141             :           SgBinaryOp( const SgBinaryOpStorageClass& source );
  239142             : 
  239143             :  // private: // JJW hack
  239144             :        /*
  239145             :           name AST Memory Allocation Support Variables
  239146             :           Memory allocations support variables 
  239147             : 
  239148             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  239149             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  239150             :           and support the AST File I/O Mechanism.
  239151             :        */
  239152             :       /* */
  239153             : 
  239154             :     public:
  239155             : 
  239156             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  239157             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  239158             :       // virtual SgNode* addRegExpAttribute();
  239159             :       /*! \brief Support for AST matching using regular expression.
  239160             : 
  239161             :           This support is incomplete and the subject of current research to define 
  239162             :           RegEx trees to support inexact matching.
  239163             :        */
  239164             :           SgBinaryOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  239165             : 
  239166             : // *** COMMON CODE SECTION ENDS HERE ***
  239167             : 
  239168             : 
  239169             : // End of memberFunctionString
  239170             : // Start of memberFunctionString
  239171             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  239172             : 
  239173             :      // the generated cast function
  239174             :      // friend ROSE_DLL_API SgBinaryOp* isSgBinaryOp ( SgNode* s );
  239175             : 
  239176             :           typedef SgExpression base_node_type;
  239177             : 
  239178             : 
  239179             : // End of memberFunctionString
  239180             : // Start of memberFunctionString
  239181             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  239182             : 
  239183             :           void post_construction_initialization() override;
  239184             : 
  239185             : 
  239186             : // End of memberFunctionString
  239187             : 
  239188             :      public: 
  239189             :          SgExpression* get_lhs_operand_i() const;
  239190             :          void set_lhs_operand_i(SgExpression* lhs_operand_i);
  239191             : 
  239192             :      public: 
  239193             :          SgExpression* get_rhs_operand_i() const;
  239194             :          void set_rhs_operand_i(SgExpression* rhs_operand_i);
  239195             : 
  239196             : 
  239197             :      public: 
  239198             :          SgExpression* get_originalExpressionTree() const override /* (getDataAccessFunctionPrototypeString) */;
  239199             :          void set_originalExpressionTree(SgExpression* originalExpressionTree) override /* (getDataAccessFunctionPrototypeString) */;
  239200             : 
  239201             : 
  239202             :      public: 
  239203             :          virtual ~SgBinaryOp();
  239204             : 
  239205             : 
  239206             :      public: 
  239207             :          SgBinaryOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  239208             :          SgBinaryOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  239209             : 
  239210             :     protected:
  239211             : // Start of memberFunctionString
  239212             : SgExpression* p_lhs_operand_i;
  239213             :           
  239214             : // End of memberFunctionString
  239215             : // Start of memberFunctionString
  239216             : SgExpression* p_rhs_operand_i;
  239217             :           
  239218             : // End of memberFunctionString
  239219             : // Start of memberFunctionString
  239220             : SgType* p_expression_type;
  239221             :           
  239222             : // End of memberFunctionString
  239223             : // Start of memberFunctionString
  239224             : SgExpression* p_originalExpressionTree;
  239225             :           
  239226             : // End of memberFunctionString
  239227             : 
  239228             :     friend struct Rose::Traits::generated::describe_node_t<SgBinaryOp>;
  239229             :     friend struct Rose::Traits::generated::describe_field_t<SgBinaryOp, SgExpression*,&SgBinaryOp::p_lhs_operand_i>;
  239230             :     friend struct Rose::Traits::generated::describe_field_t<SgBinaryOp, SgExpression*,&SgBinaryOp::p_rhs_operand_i>;
  239231             :     friend struct Rose::Traits::generated::describe_field_t<SgBinaryOp, SgType*,&SgBinaryOp::p_expression_type>;
  239232             :     friend struct Rose::Traits::generated::describe_field_t<SgBinaryOp, SgExpression*,&SgBinaryOp::p_originalExpressionTree>;
  239233             : 
  239234             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239235             : 
  239236             : 
  239237             :    };
  239238             : #endif
  239239             : 
  239240             : // postdeclarations for SgBinaryOp
  239241             : 
  239242             : /* #line 239243 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239243             : 
  239244             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  239245             : 
  239246             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239247             : 
  239248             : 
  239249             : /* #line 239250 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239250             : 
  239251             : 
  239252             : 
  239253             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239254             : 
  239255             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  239256             : //      This code is automatically generated for each 
  239257             : //      terminal and non-terminal within the defined 
  239258             : //      grammar.  There is a simple way to change the 
  239259             : //      code to fix bugs etc.  See the ROSE README file
  239260             : //      for directions.
  239261             : 
  239262             : // tps: (02/22/2010): Adding DLL export requirements
  239263             : #include "rosedll.h"
  239264             : 
  239265             : // predeclarations for SgArrowExp
  239266             : 
  239267             : /* #line 239268 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239268             : 
  239269             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  239270             : 
  239271             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239272             : 
  239273             : #if 1
  239274             : // Class Definition for SgArrowExp
  239275             : class ROSE_DLL_API SgArrowExp  : public SgBinaryOp
  239276             :    {
  239277             :      public:
  239278             : 
  239279             : 
  239280             : /* #line 239281 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239281             : 
  239282             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  239283             : // Start of memberFunctionString
  239284             : /* #line 778 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  239285             : 
  239286             :           SgType* get_type() const override;
  239287             : 
  239288             :        // get lvalue
  239289             :           virtual bool isLValue() const override;
  239290             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  239291             : 
  239292             :        // DQ (7/16/2014): Shared types from expressions in UPC have some expected symantics that are not a matter of returning the result of get_type().
  239293             :        // This function supports the get_type() function.
  239294             :           SgType* checkForSharedTypeAndReturnSharedType( SgType* possibleReturnType ) const;
  239295             : 
  239296             : 
  239297             : 
  239298             : // End of memberFunctionString
  239299             : // Start of memberFunctionString
  239300             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  239301             : 
  239302             : // *** COMMON CODE SECTION BEGINS HERE ***
  239303             : 
  239304             :     public:
  239305             : 
  239306             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  239307             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  239308             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  239309             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  239310             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  239311             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  239312             : 
  239313             :       /*! \brief returns a string representing the class name */
  239314             :           virtual std::string class_name() const override;
  239315             : 
  239316             :       /*! \brief returns new style SageIII enum values */
  239317             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  239318             : 
  239319             :       /*! \brief static variant value */
  239320             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  239321             :        // static const VariantT static_variant = V_SgArrowExp;
  239322             :           enum { static_variant = V_SgArrowExp };
  239323             : 
  239324             :        /* the generated cast function */
  239325             :       /*! \brief Casts pointer from base class to derived class */
  239326             :           ROSE_DLL_API friend       SgArrowExp* isSgArrowExp(       SgNode * s );
  239327             : 
  239328             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  239329             :           ROSE_DLL_API friend const SgArrowExp* isSgArrowExp( const SgNode * s );
  239330             : 
  239331             :      // ******************************************
  239332             :      // * Memory Pool / New / Delete
  239333             :      // ******************************************
  239334             : 
  239335             :      public:
  239336             :           /// \private
  239337             :           static const unsigned pool_size; //
  239338             :           /// \private
  239339             :           static std::vector<unsigned char *> pools; //
  239340             :           /// \private
  239341             :           static SgArrowExp * next_node; // 
  239342             : 
  239343             :           /// \private
  239344             :           static unsigned long initializeStorageClassArray(SgArrowExpStorageClass *); //
  239345             : 
  239346             :           /// \private
  239347             :           static void clearMemoryPool(); //
  239348             :           static void deleteMemoryPool(); //
  239349             : 
  239350             :           /// \private
  239351             :           static void extendMemoryPoolForFileIO(); //
  239352             : 
  239353             :           /// \private
  239354             :           static SgArrowExp * getPointerFromGlobalIndex(unsigned long); //
  239355             :           /// \private
  239356             :           static SgArrowExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  239357             : 
  239358             :           /// \private
  239359             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  239360             :           /// \private
  239361             :           static void resetValidFreepointers(); //
  239362             :           /// \private
  239363             :           static unsigned long getNumberOfLastValidPointer(); //
  239364             : 
  239365             : 
  239366             : #if defined(INLINE_FUNCTIONS)
  239367             :       /*! \brief returns pointer to newly allocated IR node */
  239368             :           inline void *operator new (size_t size);
  239369             : #else
  239370             :       /*! \brief returns pointer to newly allocated IR node */
  239371             :           void *operator new (size_t size);
  239372             : #endif
  239373             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  239374             :           void operator delete (void* pointer, size_t size);
  239375             : 
  239376             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  239377        2634 :           void operator delete (void* pointer)
  239378             :              {
  239379             :             // This is the generated delete operator...
  239380        2634 :                SgArrowExp::operator delete (pointer,sizeof(SgArrowExp));
  239381             :              }
  239382             : 
  239383             :       /*! \brief Returns the total number of IR nodes of this type */
  239384             :           static size_t numberOfNodes();
  239385             : 
  239386             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  239387             :           static size_t memoryUsage();
  239388             : 
  239389             :       // End of scope which started in IR nodes specific code 
  239390             :       /* */
  239391             : 
  239392             :       /* name Internal Functions
  239393             :           \brief Internal functions ... incomplete-documentation
  239394             : 
  239395             :           These functions have been made public as part of the design, but they are suggested for internal use 
  239396             :           or by particularly knowledgeable users for specialized tools or applications.
  239397             : 
  239398             :           \internal We could not make these private because they are required by user for special purposes. And 
  239399             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  239400             :          
  239401             :        */
  239402             : 
  239403             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  239404             :        // overridden in every class by *generated* implementation
  239405             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  239406             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  239407             :        // MS: 06/28/02 container of names of variables or container indices 
  239408             :        // used used in the traversal to access AST successor nodes
  239409             :        // overridden in every class by *generated* implementation
  239410             :       /*! \brief container of names of variables or container indices used used in the traversal
  239411             :           to access AST successor nodes overridden in every class by *generated* implementation */
  239412             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  239413             : 
  239414             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  239415             :        // than all the vector copies. The implementation for these functions is generated for each class.
  239416             :       /*! \brief return number of children in the traversal successor list */
  239417             :           virtual size_t get_numberOfTraversalSuccessors() override;
  239418             :       /*! \brief index-based access to traversal successors by index number */
  239419             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  239420             :       /*! \brief index-based access to traversal successors by child node */
  239421             :           virtual size_t get_childIndex(SgNode *child) override;
  239422             : 
  239423             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  239424             :        // MS: 08/16/2002 method for generating RTI information
  239425             :       /*! \brief return C++ Runtime-Time-Information */
  239426             :           virtual RTIReturnType roseRTI() override;
  239427             : #endif
  239428             :       /* */
  239429             : 
  239430             : 
  239431             : 
  239432             :       /* name Deprecated Functions
  239433             :           \brief Deprecated functions ... incomplete-documentation
  239434             : 
  239435             :           These functions have been deprecated from use.
  239436             :        */
  239437             :       /* */
  239438             : 
  239439             :       /*! returns a C style string (char*) representing the class name */
  239440             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  239441             : 
  239442             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  239443             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  239444             : #if 0
  239445             :       /*! returns old style Sage II enum values */
  239446             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  239447             :       /*! returns old style Sage II enum values */
  239448             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  239449             : #endif
  239450             :       /* */
  239451             : 
  239452             : 
  239453             : 
  239454             : 
  239455             :      public:
  239456             :       /* name Traversal Support Functions
  239457             :           \brief Traversal support functions ... incomplete-documentation
  239458             : 
  239459             :           These functions have been made public as part of the design, but they are suggested for internal use 
  239460             :           or by particularly knowledgable users for specialized tools or applications.
  239461             :        */
  239462             :       /* */
  239463             : 
  239464             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  239465             :        // (inferior to ROSE traversal mechanism, experimental).
  239466             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  239467             :        */
  239468             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  239469             : 
  239470             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  239471             :       /*! \brief support for the classic visitor pattern done in GoF */
  239472             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  239473             : 
  239474             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  239475             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  239476             :        */
  239477             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  239478             : 
  239479             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  239480             :        */
  239481             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  239482             : 
  239483             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  239484             :        // This traversal helps support internal tools that call static member functions.
  239485             :        // note: this function operates on the memory pools.
  239486             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  239487             :        */
  239488             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  239489             :       /* */
  239490             : 
  239491             : 
  239492             :      public:
  239493             :       /* name Memory Allocation Functions
  239494             :           \brief Memory allocations functions ... incomplete-documentation
  239495             : 
  239496             :           These functions have been made public as part of the design, but they are suggested for internal use 
  239497             :           or by particularly knowledgable users for specialized tools or applications.
  239498             :        */
  239499             :       /* */
  239500             : 
  239501             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  239502             : 
  239503             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  239504             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  239505             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  239506             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  239507             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  239508             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  239509             :           being used with the AST File I/O mechanism.
  239510             :        */
  239511             :           virtual bool isInMemoryPool() override;
  239512             : 
  239513             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  239514             : 
  239515             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  239516             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  239517             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  239518             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  239519             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  239520             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  239521             :           being used with the AST File I/O mechanism.
  239522             :        */
  239523             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  239524             : 
  239525             :       // DQ (4/30/2006): Modified to be a const function.
  239526             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  239527             : 
  239528             :           This functions is part of general support for many possible tools to operate 
  239529             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  239530             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  239531             :           less than the set of pointers used by the AST file I/O. This is part of
  239532             :           work implemented by Andreas, and support tools such as the AST graph generation.
  239533             : 
  239534             :           \warning This function can return unexpected data members and thus the 
  239535             :                    order and the number of elements is unpredicable and subject 
  239536             :                    to change.
  239537             : 
  239538             :           \returns STL vector of pairs of SgNode* and strings
  239539             :        */
  239540             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  239541             : 
  239542             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  239543             : 
  239544             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  239545             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  239546             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  239547             : 
  239548             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  239549             :                    and subject to change.
  239550             :        */
  239551             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  239552             : 
  239553             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  239554             : 
  239555             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  239556             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  239557             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  239558             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  239559             : 
  239560             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  239561             : 
  239562             :           \returns long
  239563             :        */
  239564             :           virtual long getChildIndex( SgNode* childNode ) const override;
  239565             : 
  239566             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  239567             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  239568             :       /* \brief Constructor for use by AST File I/O Mechanism
  239569             : 
  239570             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  239571             :           which obtained via fast binary file I/O from disk.
  239572             :        */
  239573             :        // SgArrowExp( SgArrowExpStorageClass& source );
  239574             : 
  239575             : 
  239576             : 
  239577             : 
  239578             : 
  239579             :  // JH (10/24/2005): methods added to support the ast file IO
  239580             :     private:
  239581             : 
  239582             :       /* name AST Memory Allocation Support Functions
  239583             :           \brief Memory allocations support....
  239584             : 
  239585             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  239586             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  239587             :           and support the AST File I/O Mechanism.
  239588             :        */
  239589             :       /* */
  239590             : 
  239591             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  239592             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  239593             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  239594             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  239595             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  239596             :           a correspinding one in the AST_FILE_IO class!
  239597             :        */
  239598             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  239599             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  239600             :       /* \brief Typedef used for low level memory access.
  239601             :        */
  239602             :        // typedef unsigned char* TestType;
  239603             : 
  239604             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  239605             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  239606             :       /* \brief Typedef used to hold memory addresses as values.
  239607             :        */
  239608             :        // typedef unsigned long  AddressType;
  239609             : 
  239610             : 
  239611             : 
  239612             :        // necessary, to have direct access to the p_freepointer and the private methods !
  239613             :       /*! \brief friend class declaration to support AST File I/O */
  239614             :           friend class AST_FILE_IO;
  239615             : 
  239616             :       /*! \brief friend class declaration to support AST File I/O */
  239617             :           friend class SgArrowExpStorageClass;
  239618             : 
  239619             :       /*! \brief friend class declaration to support AST File I/O */
  239620             :           friend class AstSpecificDataManagingClass;
  239621             : 
  239622             :       /*! \brief friend class declaration to support AST File I/O */
  239623             :           friend class AstSpecificDataManagingClassStorageClass;
  239624             :     public:
  239625             :       /*! \brief IR node constructor to support AST File I/O */
  239626             :           SgArrowExp( const SgArrowExpStorageClass& source );
  239627             : 
  239628             :  // private: // JJW hack
  239629             :        /*
  239630             :           name AST Memory Allocation Support Variables
  239631             :           Memory allocations support variables 
  239632             : 
  239633             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  239634             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  239635             :           and support the AST File I/O Mechanism.
  239636             :        */
  239637             :       /* */
  239638             : 
  239639             :     public:
  239640             : 
  239641             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  239642             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  239643             :       // virtual SgNode* addRegExpAttribute();
  239644             :       /*! \brief Support for AST matching using regular expression.
  239645             : 
  239646             :           This support is incomplete and the subject of current research to define 
  239647             :           RegEx trees to support inexact matching.
  239648             :        */
  239649             :           SgArrowExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  239650             : 
  239651             : // *** COMMON CODE SECTION ENDS HERE ***
  239652             : 
  239653             : 
  239654             : // End of memberFunctionString
  239655             : // Start of memberFunctionString
  239656             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  239657             : 
  239658             :      // the generated cast function
  239659             :      // friend ROSE_DLL_API SgArrowExp* isSgArrowExp ( SgNode* s );
  239660             : 
  239661             :           typedef SgBinaryOp base_node_type;
  239662             : 
  239663             : 
  239664             : // End of memberFunctionString
  239665             : // Start of memberFunctionString
  239666             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  239667             : 
  239668             :           void post_construction_initialization() override;
  239669             : 
  239670             : 
  239671             : // End of memberFunctionString
  239672             : // Start of memberFunctionString
  239673             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  239674             : 
  239675           0 :           int precedence() const override { return 16; }
  239676             : 
  239677             : 
  239678             : // End of memberFunctionString
  239679             : 
  239680             : 
  239681             :      public: 
  239682             :          virtual ~SgArrowExp();
  239683             : 
  239684             : 
  239685             :      public: 
  239686             :          SgArrowExp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  239687             :          SgArrowExp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  239688             : 
  239689             :     protected:
  239690             : 
  239691             :     friend struct Rose::Traits::generated::describe_node_t<SgArrowExp>;
  239692             : 
  239693             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239694             : 
  239695             : 
  239696             :    };
  239697             : #endif
  239698             : 
  239699             : // postdeclarations for SgArrowExp
  239700             : 
  239701             : /* #line 239702 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239702             : 
  239703             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  239704             : 
  239705             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239706             : 
  239707             : 
  239708             : /* #line 239709 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239709             : 
  239710             : 
  239711             : 
  239712             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239713             : 
  239714             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  239715             : //      This code is automatically generated for each 
  239716             : //      terminal and non-terminal within the defined 
  239717             : //      grammar.  There is a simple way to change the 
  239718             : //      code to fix bugs etc.  See the ROSE README file
  239719             : //      for directions.
  239720             : 
  239721             : // tps: (02/22/2010): Adding DLL export requirements
  239722             : #include "rosedll.h"
  239723             : 
  239724             : // predeclarations for SgDotExp
  239725             : 
  239726             : /* #line 239727 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239727             : 
  239728             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  239729             : 
  239730             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  239731             : 
  239732             : #if 1
  239733             : // Class Definition for SgDotExp
  239734             : class ROSE_DLL_API SgDotExp  : public SgBinaryOp
  239735             :    {
  239736             :      public:
  239737             : 
  239738             : 
  239739             : /* #line 239740 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  239740             : 
  239741             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  239742             : // Start of memberFunctionString
  239743             : /* #line 792 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  239744             : 
  239745             :           SgType* get_type() const override;
  239746             : 
  239747             :        // get lvalue
  239748             :           virtual bool isLValue() const override;
  239749             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  239750             : 
  239751             : 
  239752             : 
  239753             : // End of memberFunctionString
  239754             : // Start of memberFunctionString
  239755             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  239756             : 
  239757             : // *** COMMON CODE SECTION BEGINS HERE ***
  239758             : 
  239759             :     public:
  239760             : 
  239761             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  239762             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  239763             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  239764             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  239765             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  239766             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  239767             : 
  239768             :       /*! \brief returns a string representing the class name */
  239769             :           virtual std::string class_name() const override;
  239770             : 
  239771             :       /*! \brief returns new style SageIII enum values */
  239772             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  239773             : 
  239774             :       /*! \brief static variant value */
  239775             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  239776             :        // static const VariantT static_variant = V_SgDotExp;
  239777             :           enum { static_variant = V_SgDotExp };
  239778             : 
  239779             :        /* the generated cast function */
  239780             :       /*! \brief Casts pointer from base class to derived class */
  239781             :           ROSE_DLL_API friend       SgDotExp* isSgDotExp(       SgNode * s );
  239782             : 
  239783             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  239784             :           ROSE_DLL_API friend const SgDotExp* isSgDotExp( const SgNode * s );
  239785             : 
  239786             :      // ******************************************
  239787             :      // * Memory Pool / New / Delete
  239788             :      // ******************************************
  239789             : 
  239790             :      public:
  239791             :           /// \private
  239792             :           static const unsigned pool_size; //
  239793             :           /// \private
  239794             :           static std::vector<unsigned char *> pools; //
  239795             :           /// \private
  239796             :           static SgDotExp * next_node; // 
  239797             : 
  239798             :           /// \private
  239799             :           static unsigned long initializeStorageClassArray(SgDotExpStorageClass *); //
  239800             : 
  239801             :           /// \private
  239802             :           static void clearMemoryPool(); //
  239803             :           static void deleteMemoryPool(); //
  239804             : 
  239805             :           /// \private
  239806             :           static void extendMemoryPoolForFileIO(); //
  239807             : 
  239808             :           /// \private
  239809             :           static SgDotExp * getPointerFromGlobalIndex(unsigned long); //
  239810             :           /// \private
  239811             :           static SgDotExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  239812             : 
  239813             :           /// \private
  239814             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  239815             :           /// \private
  239816             :           static void resetValidFreepointers(); //
  239817             :           /// \private
  239818             :           static unsigned long getNumberOfLastValidPointer(); //
  239819             : 
  239820             : 
  239821             : #if defined(INLINE_FUNCTIONS)
  239822             :       /*! \brief returns pointer to newly allocated IR node */
  239823             :           inline void *operator new (size_t size);
  239824             : #else
  239825             :       /*! \brief returns pointer to newly allocated IR node */
  239826             :           void *operator new (size_t size);
  239827             : #endif
  239828             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  239829             :           void operator delete (void* pointer, size_t size);
  239830             : 
  239831             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  239832        1657 :           void operator delete (void* pointer)
  239833             :              {
  239834             :             // This is the generated delete operator...
  239835        1657 :                SgDotExp::operator delete (pointer,sizeof(SgDotExp));
  239836             :              }
  239837             : 
  239838             :       /*! \brief Returns the total number of IR nodes of this type */
  239839             :           static size_t numberOfNodes();
  239840             : 
  239841             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  239842             :           static size_t memoryUsage();
  239843             : 
  239844             :       // End of scope which started in IR nodes specific code 
  239845             :       /* */
  239846             : 
  239847             :       /* name Internal Functions
  239848             :           \brief Internal functions ... incomplete-documentation
  239849             : 
  239850             :           These functions have been made public as part of the design, but they are suggested for internal use 
  239851             :           or by particularly knowledgeable users for specialized tools or applications.
  239852             : 
  239853             :           \internal We could not make these private because they are required by user for special purposes. And 
  239854             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  239855             :          
  239856             :        */
  239857             : 
  239858             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  239859             :        // overridden in every class by *generated* implementation
  239860             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  239861             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  239862             :        // MS: 06/28/02 container of names of variables or container indices 
  239863             :        // used used in the traversal to access AST successor nodes
  239864             :        // overridden in every class by *generated* implementation
  239865             :       /*! \brief container of names of variables or container indices used used in the traversal
  239866             :           to access AST successor nodes overridden in every class by *generated* implementation */
  239867             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  239868             : 
  239869             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  239870             :        // than all the vector copies. The implementation for these functions is generated for each class.
  239871             :       /*! \brief return number of children in the traversal successor list */
  239872             :           virtual size_t get_numberOfTraversalSuccessors() override;
  239873             :       /*! \brief index-based access to traversal successors by index number */
  239874             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  239875             :       /*! \brief index-based access to traversal successors by child node */
  239876             :           virtual size_t get_childIndex(SgNode *child) override;
  239877             : 
  239878             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  239879             :        // MS: 08/16/2002 method for generating RTI information
  239880             :       /*! \brief return C++ Runtime-Time-Information */
  239881             :           virtual RTIReturnType roseRTI() override;
  239882             : #endif
  239883             :       /* */
  239884             : 
  239885             : 
  239886             : 
  239887             :       /* name Deprecated Functions
  239888             :           \brief Deprecated functions ... incomplete-documentation
  239889             : 
  239890             :           These functions have been deprecated from use.
  239891             :        */
  239892             :       /* */
  239893             : 
  239894             :       /*! returns a C style string (char*) representing the class name */
  239895             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  239896             : 
  239897             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  239898             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  239899             : #if 0
  239900             :       /*! returns old style Sage II enum values */
  239901             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  239902             :       /*! returns old style Sage II enum values */
  239903             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  239904             : #endif
  239905             :       /* */
  239906             : 
  239907             : 
  239908             : 
  239909             : 
  239910             :      public:
  239911             :       /* name Traversal Support Functions
  239912             :           \brief Traversal support functions ... incomplete-documentation
  239913             : 
  239914             :           These functions have been made public as part of the design, but they are suggested for internal use 
  239915             :           or by particularly knowledgable users for specialized tools or applications.
  239916             :        */
  239917             :       /* */
  239918             : 
  239919             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  239920             :        // (inferior to ROSE traversal mechanism, experimental).
  239921             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  239922             :        */
  239923             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  239924             : 
  239925             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  239926             :       /*! \brief support for the classic visitor pattern done in GoF */
  239927             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  239928             : 
  239929             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  239930             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  239931             :        */
  239932             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  239933             : 
  239934             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  239935             :        */
  239936             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  239937             : 
  239938             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  239939             :        // This traversal helps support internal tools that call static member functions.
  239940             :        // note: this function operates on the memory pools.
  239941             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  239942             :        */
  239943             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  239944             :       /* */
  239945             : 
  239946             : 
  239947             :      public:
  239948             :       /* name Memory Allocation Functions
  239949             :           \brief Memory allocations functions ... incomplete-documentation
  239950             : 
  239951             :           These functions have been made public as part of the design, but they are suggested for internal use 
  239952             :           or by particularly knowledgable users for specialized tools or applications.
  239953             :        */
  239954             :       /* */
  239955             : 
  239956             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  239957             : 
  239958             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  239959             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  239960             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  239961             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  239962             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  239963             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  239964             :           being used with the AST File I/O mechanism.
  239965             :        */
  239966             :           virtual bool isInMemoryPool() override;
  239967             : 
  239968             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  239969             : 
  239970             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  239971             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  239972             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  239973             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  239974             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  239975             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  239976             :           being used with the AST File I/O mechanism.
  239977             :        */
  239978             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  239979             : 
  239980             :       // DQ (4/30/2006): Modified to be a const function.
  239981             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  239982             : 
  239983             :           This functions is part of general support for many possible tools to operate 
  239984             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  239985             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  239986             :           less than the set of pointers used by the AST file I/O. This is part of
  239987             :           work implemented by Andreas, and support tools such as the AST graph generation.
  239988             : 
  239989             :           \warning This function can return unexpected data members and thus the 
  239990             :                    order and the number of elements is unpredicable and subject 
  239991             :                    to change.
  239992             : 
  239993             :           \returns STL vector of pairs of SgNode* and strings
  239994             :        */
  239995             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  239996             : 
  239997             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  239998             : 
  239999             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  240000             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  240001             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  240002             : 
  240003             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  240004             :                    and subject to change.
  240005             :        */
  240006             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  240007             : 
  240008             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  240009             : 
  240010             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  240011             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  240012             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  240013             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  240014             : 
  240015             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  240016             : 
  240017             :           \returns long
  240018             :        */
  240019             :           virtual long getChildIndex( SgNode* childNode ) const override;
  240020             : 
  240021             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  240022             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240023             :       /* \brief Constructor for use by AST File I/O Mechanism
  240024             : 
  240025             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  240026             :           which obtained via fast binary file I/O from disk.
  240027             :        */
  240028             :        // SgDotExp( SgDotExpStorageClass& source );
  240029             : 
  240030             : 
  240031             : 
  240032             : 
  240033             : 
  240034             :  // JH (10/24/2005): methods added to support the ast file IO
  240035             :     private:
  240036             : 
  240037             :       /* name AST Memory Allocation Support Functions
  240038             :           \brief Memory allocations support....
  240039             : 
  240040             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  240041             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  240042             :           and support the AST File I/O Mechanism.
  240043             :        */
  240044             :       /* */
  240045             : 
  240046             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  240047             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  240048             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  240049             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  240050             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  240051             :           a correspinding one in the AST_FILE_IO class!
  240052             :        */
  240053             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  240054             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240055             :       /* \brief Typedef used for low level memory access.
  240056             :        */
  240057             :        // typedef unsigned char* TestType;
  240058             : 
  240059             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  240060             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240061             :       /* \brief Typedef used to hold memory addresses as values.
  240062             :        */
  240063             :        // typedef unsigned long  AddressType;
  240064             : 
  240065             : 
  240066             : 
  240067             :        // necessary, to have direct access to the p_freepointer and the private methods !
  240068             :       /*! \brief friend class declaration to support AST File I/O */
  240069             :           friend class AST_FILE_IO;
  240070             : 
  240071             :       /*! \brief friend class declaration to support AST File I/O */
  240072             :           friend class SgDotExpStorageClass;
  240073             : 
  240074             :       /*! \brief friend class declaration to support AST File I/O */
  240075             :           friend class AstSpecificDataManagingClass;
  240076             : 
  240077             :       /*! \brief friend class declaration to support AST File I/O */
  240078             :           friend class AstSpecificDataManagingClassStorageClass;
  240079             :     public:
  240080             :       /*! \brief IR node constructor to support AST File I/O */
  240081             :           SgDotExp( const SgDotExpStorageClass& source );
  240082             : 
  240083             :  // private: // JJW hack
  240084             :        /*
  240085             :           name AST Memory Allocation Support Variables
  240086             :           Memory allocations support variables 
  240087             : 
  240088             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  240089             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  240090             :           and support the AST File I/O Mechanism.
  240091             :        */
  240092             :       /* */
  240093             : 
  240094             :     public:
  240095             : 
  240096             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  240097             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  240098             :       // virtual SgNode* addRegExpAttribute();
  240099             :       /*! \brief Support for AST matching using regular expression.
  240100             : 
  240101             :           This support is incomplete and the subject of current research to define 
  240102             :           RegEx trees to support inexact matching.
  240103             :        */
  240104             :           SgDotExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  240105             : 
  240106             : // *** COMMON CODE SECTION ENDS HERE ***
  240107             : 
  240108             : 
  240109             : // End of memberFunctionString
  240110             : // Start of memberFunctionString
  240111             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  240112             : 
  240113             :      // the generated cast function
  240114             :      // friend ROSE_DLL_API SgDotExp* isSgDotExp ( SgNode* s );
  240115             : 
  240116             :           typedef SgBinaryOp base_node_type;
  240117             : 
  240118             : 
  240119             : // End of memberFunctionString
  240120             : // Start of memberFunctionString
  240121             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  240122             : 
  240123             :           void post_construction_initialization() override;
  240124             : 
  240125             : 
  240126             : // End of memberFunctionString
  240127             : // Start of memberFunctionString
  240128             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  240129             : 
  240130           0 :           int precedence() const override { return 16; }
  240131             : 
  240132             : 
  240133             : // End of memberFunctionString
  240134             : 
  240135             : 
  240136             :      public: 
  240137             :          virtual ~SgDotExp();
  240138             : 
  240139             : 
  240140             :      public: 
  240141             :          SgDotExp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  240142             :          SgDotExp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  240143             : 
  240144             :     protected:
  240145             : 
  240146             :     friend struct Rose::Traits::generated::describe_node_t<SgDotExp>;
  240147             : 
  240148             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240149             : 
  240150             : 
  240151             :    };
  240152             : #endif
  240153             : 
  240154             : // postdeclarations for SgDotExp
  240155             : 
  240156             : /* #line 240157 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240157             : 
  240158             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  240159             : 
  240160             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240161             : 
  240162             : 
  240163             : /* #line 240164 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240164             : 
  240165             : 
  240166             : 
  240167             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240168             : 
  240169             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  240170             : //      This code is automatically generated for each 
  240171             : //      terminal and non-terminal within the defined 
  240172             : //      grammar.  There is a simple way to change the 
  240173             : //      code to fix bugs etc.  See the ROSE README file
  240174             : //      for directions.
  240175             : 
  240176             : // tps: (02/22/2010): Adding DLL export requirements
  240177             : #include "rosedll.h"
  240178             : 
  240179             : // predeclarations for SgDotStarOp
  240180             : 
  240181             : /* #line 240182 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240182             : 
  240183             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  240184             : 
  240185             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240186             : 
  240187             : #if 1
  240188             : // Class Definition for SgDotStarOp
  240189             : class ROSE_DLL_API SgDotStarOp  : public SgBinaryOp
  240190             :    {
  240191             :      public:
  240192             : 
  240193             : 
  240194             : /* #line 240195 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240195             : 
  240196             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  240197             : // Start of memberFunctionString
  240198             : /* #line 802 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  240199             : 
  240200             :           SgType* get_type() const override;
  240201             : 
  240202             :        // get lvalue
  240203             :           virtual bool isLValue() const override;
  240204             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  240205             : 
  240206             : 
  240207             : 
  240208             : // End of memberFunctionString
  240209             : // Start of memberFunctionString
  240210             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  240211             : 
  240212             : // *** COMMON CODE SECTION BEGINS HERE ***
  240213             : 
  240214             :     public:
  240215             : 
  240216             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  240217             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  240218             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  240219             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  240220             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  240221             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  240222             : 
  240223             :       /*! \brief returns a string representing the class name */
  240224             :           virtual std::string class_name() const override;
  240225             : 
  240226             :       /*! \brief returns new style SageIII enum values */
  240227             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  240228             : 
  240229             :       /*! \brief static variant value */
  240230             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  240231             :        // static const VariantT static_variant = V_SgDotStarOp;
  240232             :           enum { static_variant = V_SgDotStarOp };
  240233             : 
  240234             :        /* the generated cast function */
  240235             :       /*! \brief Casts pointer from base class to derived class */
  240236             :           ROSE_DLL_API friend       SgDotStarOp* isSgDotStarOp(       SgNode * s );
  240237             : 
  240238             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  240239             :           ROSE_DLL_API friend const SgDotStarOp* isSgDotStarOp( const SgNode * s );
  240240             : 
  240241             :      // ******************************************
  240242             :      // * Memory Pool / New / Delete
  240243             :      // ******************************************
  240244             : 
  240245             :      public:
  240246             :           /// \private
  240247             :           static const unsigned pool_size; //
  240248             :           /// \private
  240249             :           static std::vector<unsigned char *> pools; //
  240250             :           /// \private
  240251             :           static SgDotStarOp * next_node; // 
  240252             : 
  240253             :           /// \private
  240254             :           static unsigned long initializeStorageClassArray(SgDotStarOpStorageClass *); //
  240255             : 
  240256             :           /// \private
  240257             :           static void clearMemoryPool(); //
  240258             :           static void deleteMemoryPool(); //
  240259             : 
  240260             :           /// \private
  240261             :           static void extendMemoryPoolForFileIO(); //
  240262             : 
  240263             :           /// \private
  240264             :           static SgDotStarOp * getPointerFromGlobalIndex(unsigned long); //
  240265             :           /// \private
  240266             :           static SgDotStarOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  240267             : 
  240268             :           /// \private
  240269             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  240270             :           /// \private
  240271             :           static void resetValidFreepointers(); //
  240272             :           /// \private
  240273             :           static unsigned long getNumberOfLastValidPointer(); //
  240274             : 
  240275             : 
  240276             : #if defined(INLINE_FUNCTIONS)
  240277             :       /*! \brief returns pointer to newly allocated IR node */
  240278             :           inline void *operator new (size_t size);
  240279             : #else
  240280             :       /*! \brief returns pointer to newly allocated IR node */
  240281             :           void *operator new (size_t size);
  240282             : #endif
  240283             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  240284             :           void operator delete (void* pointer, size_t size);
  240285             : 
  240286             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  240287          24 :           void operator delete (void* pointer)
  240288             :              {
  240289             :             // This is the generated delete operator...
  240290          24 :                SgDotStarOp::operator delete (pointer,sizeof(SgDotStarOp));
  240291             :              }
  240292             : 
  240293             :       /*! \brief Returns the total number of IR nodes of this type */
  240294             :           static size_t numberOfNodes();
  240295             : 
  240296             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  240297             :           static size_t memoryUsage();
  240298             : 
  240299             :       // End of scope which started in IR nodes specific code 
  240300             :       /* */
  240301             : 
  240302             :       /* name Internal Functions
  240303             :           \brief Internal functions ... incomplete-documentation
  240304             : 
  240305             :           These functions have been made public as part of the design, but they are suggested for internal use 
  240306             :           or by particularly knowledgeable users for specialized tools or applications.
  240307             : 
  240308             :           \internal We could not make these private because they are required by user for special purposes. And 
  240309             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  240310             :          
  240311             :        */
  240312             : 
  240313             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  240314             :        // overridden in every class by *generated* implementation
  240315             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  240316             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  240317             :        // MS: 06/28/02 container of names of variables or container indices 
  240318             :        // used used in the traversal to access AST successor nodes
  240319             :        // overridden in every class by *generated* implementation
  240320             :       /*! \brief container of names of variables or container indices used used in the traversal
  240321             :           to access AST successor nodes overridden in every class by *generated* implementation */
  240322             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  240323             : 
  240324             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  240325             :        // than all the vector copies. The implementation for these functions is generated for each class.
  240326             :       /*! \brief return number of children in the traversal successor list */
  240327             :           virtual size_t get_numberOfTraversalSuccessors() override;
  240328             :       /*! \brief index-based access to traversal successors by index number */
  240329             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  240330             :       /*! \brief index-based access to traversal successors by child node */
  240331             :           virtual size_t get_childIndex(SgNode *child) override;
  240332             : 
  240333             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  240334             :        // MS: 08/16/2002 method for generating RTI information
  240335             :       /*! \brief return C++ Runtime-Time-Information */
  240336             :           virtual RTIReturnType roseRTI() override;
  240337             : #endif
  240338             :       /* */
  240339             : 
  240340             : 
  240341             : 
  240342             :       /* name Deprecated Functions
  240343             :           \brief Deprecated functions ... incomplete-documentation
  240344             : 
  240345             :           These functions have been deprecated from use.
  240346             :        */
  240347             :       /* */
  240348             : 
  240349             :       /*! returns a C style string (char*) representing the class name */
  240350             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  240351             : 
  240352             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  240353             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  240354             : #if 0
  240355             :       /*! returns old style Sage II enum values */
  240356             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  240357             :       /*! returns old style Sage II enum values */
  240358             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  240359             : #endif
  240360             :       /* */
  240361             : 
  240362             : 
  240363             : 
  240364             : 
  240365             :      public:
  240366             :       /* name Traversal Support Functions
  240367             :           \brief Traversal support functions ... incomplete-documentation
  240368             : 
  240369             :           These functions have been made public as part of the design, but they are suggested for internal use 
  240370             :           or by particularly knowledgable users for specialized tools or applications.
  240371             :        */
  240372             :       /* */
  240373             : 
  240374             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  240375             :        // (inferior to ROSE traversal mechanism, experimental).
  240376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  240377             :        */
  240378             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  240379             : 
  240380             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  240381             :       /*! \brief support for the classic visitor pattern done in GoF */
  240382             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  240383             : 
  240384             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  240385             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  240386             :        */
  240387             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  240388             : 
  240389             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  240390             :        */
  240391             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  240392             : 
  240393             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  240394             :        // This traversal helps support internal tools that call static member functions.
  240395             :        // note: this function operates on the memory pools.
  240396             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  240397             :        */
  240398             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  240399             :       /* */
  240400             : 
  240401             : 
  240402             :      public:
  240403             :       /* name Memory Allocation Functions
  240404             :           \brief Memory allocations functions ... incomplete-documentation
  240405             : 
  240406             :           These functions have been made public as part of the design, but they are suggested for internal use 
  240407             :           or by particularly knowledgable users for specialized tools or applications.
  240408             :        */
  240409             :       /* */
  240410             : 
  240411             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  240412             : 
  240413             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  240414             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  240415             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  240416             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  240417             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  240418             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  240419             :           being used with the AST File I/O mechanism.
  240420             :        */
  240421             :           virtual bool isInMemoryPool() override;
  240422             : 
  240423             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  240424             : 
  240425             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  240426             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  240427             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  240428             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  240429             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  240430             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  240431             :           being used with the AST File I/O mechanism.
  240432             :        */
  240433             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  240434             : 
  240435             :       // DQ (4/30/2006): Modified to be a const function.
  240436             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  240437             : 
  240438             :           This functions is part of general support for many possible tools to operate 
  240439             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  240440             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  240441             :           less than the set of pointers used by the AST file I/O. This is part of
  240442             :           work implemented by Andreas, and support tools such as the AST graph generation.
  240443             : 
  240444             :           \warning This function can return unexpected data members and thus the 
  240445             :                    order and the number of elements is unpredicable and subject 
  240446             :                    to change.
  240447             : 
  240448             :           \returns STL vector of pairs of SgNode* and strings
  240449             :        */
  240450             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  240451             : 
  240452             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  240453             : 
  240454             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  240455             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  240456             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  240457             : 
  240458             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  240459             :                    and subject to change.
  240460             :        */
  240461             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  240462             : 
  240463             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  240464             : 
  240465             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  240466             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  240467             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  240468             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  240469             : 
  240470             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  240471             : 
  240472             :           \returns long
  240473             :        */
  240474             :           virtual long getChildIndex( SgNode* childNode ) const override;
  240475             : 
  240476             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  240477             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240478             :       /* \brief Constructor for use by AST File I/O Mechanism
  240479             : 
  240480             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  240481             :           which obtained via fast binary file I/O from disk.
  240482             :        */
  240483             :        // SgDotStarOp( SgDotStarOpStorageClass& source );
  240484             : 
  240485             : 
  240486             : 
  240487             : 
  240488             : 
  240489             :  // JH (10/24/2005): methods added to support the ast file IO
  240490             :     private:
  240491             : 
  240492             :       /* name AST Memory Allocation Support Functions
  240493             :           \brief Memory allocations support....
  240494             : 
  240495             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  240496             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  240497             :           and support the AST File I/O Mechanism.
  240498             :        */
  240499             :       /* */
  240500             : 
  240501             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  240502             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  240503             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  240504             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  240505             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  240506             :           a correspinding one in the AST_FILE_IO class!
  240507             :        */
  240508             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  240509             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240510             :       /* \brief Typedef used for low level memory access.
  240511             :        */
  240512             :        // typedef unsigned char* TestType;
  240513             : 
  240514             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  240515             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240516             :       /* \brief Typedef used to hold memory addresses as values.
  240517             :        */
  240518             :        // typedef unsigned long  AddressType;
  240519             : 
  240520             : 
  240521             : 
  240522             :        // necessary, to have direct access to the p_freepointer and the private methods !
  240523             :       /*! \brief friend class declaration to support AST File I/O */
  240524             :           friend class AST_FILE_IO;
  240525             : 
  240526             :       /*! \brief friend class declaration to support AST File I/O */
  240527             :           friend class SgDotStarOpStorageClass;
  240528             : 
  240529             :       /*! \brief friend class declaration to support AST File I/O */
  240530             :           friend class AstSpecificDataManagingClass;
  240531             : 
  240532             :       /*! \brief friend class declaration to support AST File I/O */
  240533             :           friend class AstSpecificDataManagingClassStorageClass;
  240534             :     public:
  240535             :       /*! \brief IR node constructor to support AST File I/O */
  240536             :           SgDotStarOp( const SgDotStarOpStorageClass& source );
  240537             : 
  240538             :  // private: // JJW hack
  240539             :        /*
  240540             :           name AST Memory Allocation Support Variables
  240541             :           Memory allocations support variables 
  240542             : 
  240543             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  240544             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  240545             :           and support the AST File I/O Mechanism.
  240546             :        */
  240547             :       /* */
  240548             : 
  240549             :     public:
  240550             : 
  240551             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  240552             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  240553             :       // virtual SgNode* addRegExpAttribute();
  240554             :       /*! \brief Support for AST matching using regular expression.
  240555             : 
  240556             :           This support is incomplete and the subject of current research to define 
  240557             :           RegEx trees to support inexact matching.
  240558             :        */
  240559             :           SgDotStarOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  240560             : 
  240561             : // *** COMMON CODE SECTION ENDS HERE ***
  240562             : 
  240563             : 
  240564             : // End of memberFunctionString
  240565             : // Start of memberFunctionString
  240566             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  240567             : 
  240568             :      // the generated cast function
  240569             :      // friend ROSE_DLL_API SgDotStarOp* isSgDotStarOp ( SgNode* s );
  240570             : 
  240571             :           typedef SgBinaryOp base_node_type;
  240572             : 
  240573             : 
  240574             : // End of memberFunctionString
  240575             : // Start of memberFunctionString
  240576             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  240577             : 
  240578             :           void post_construction_initialization() override;
  240579             : 
  240580             : 
  240581             : // End of memberFunctionString
  240582             : // Start of memberFunctionString
  240583             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  240584             : 
  240585           0 :           int precedence() const override { return 14; }
  240586             : 
  240587             : 
  240588             : // End of memberFunctionString
  240589             : 
  240590             : 
  240591             :      public: 
  240592             :          virtual ~SgDotStarOp();
  240593             : 
  240594             : 
  240595             :      public: 
  240596             :          SgDotStarOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  240597             :          SgDotStarOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  240598             : 
  240599             :     protected:
  240600             : 
  240601             :     friend struct Rose::Traits::generated::describe_node_t<SgDotStarOp>;
  240602             : 
  240603             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240604             : 
  240605             : 
  240606             :    };
  240607             : #endif
  240608             : 
  240609             : // postdeclarations for SgDotStarOp
  240610             : 
  240611             : /* #line 240612 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240612             : 
  240613             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  240614             : 
  240615             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240616             : 
  240617             : 
  240618             : /* #line 240619 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240619             : 
  240620             : 
  240621             : 
  240622             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240623             : 
  240624             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  240625             : //      This code is automatically generated for each 
  240626             : //      terminal and non-terminal within the defined 
  240627             : //      grammar.  There is a simple way to change the 
  240628             : //      code to fix bugs etc.  See the ROSE README file
  240629             : //      for directions.
  240630             : 
  240631             : // tps: (02/22/2010): Adding DLL export requirements
  240632             : #include "rosedll.h"
  240633             : 
  240634             : // predeclarations for SgArrowStarOp
  240635             : 
  240636             : /* #line 240637 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240637             : 
  240638             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  240639             : 
  240640             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  240641             : 
  240642             : #if 1
  240643             : // Class Definition for SgArrowStarOp
  240644             : class ROSE_DLL_API SgArrowStarOp  : public SgBinaryOp
  240645             :    {
  240646             :      public:
  240647             : 
  240648             : 
  240649             : /* #line 240650 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  240650             : 
  240651             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  240652             : // Start of memberFunctionString
  240653             : /* #line 812 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  240654             : 
  240655             :           SgType* get_type() const override;
  240656             : 
  240657             :        // get lvalue
  240658             :           virtual bool isLValue() const override;
  240659             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  240660             : 
  240661             : 
  240662             : 
  240663             : // End of memberFunctionString
  240664             : // Start of memberFunctionString
  240665             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  240666             : 
  240667             : // *** COMMON CODE SECTION BEGINS HERE ***
  240668             : 
  240669             :     public:
  240670             : 
  240671             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  240672             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  240673             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  240674             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  240675             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  240676             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  240677             : 
  240678             :       /*! \brief returns a string representing the class name */
  240679             :           virtual std::string class_name() const override;
  240680             : 
  240681             :       /*! \brief returns new style SageIII enum values */
  240682             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  240683             : 
  240684             :       /*! \brief static variant value */
  240685             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  240686             :        // static const VariantT static_variant = V_SgArrowStarOp;
  240687             :           enum { static_variant = V_SgArrowStarOp };
  240688             : 
  240689             :        /* the generated cast function */
  240690             :       /*! \brief Casts pointer from base class to derived class */
  240691             :           ROSE_DLL_API friend       SgArrowStarOp* isSgArrowStarOp(       SgNode * s );
  240692             : 
  240693             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  240694             :           ROSE_DLL_API friend const SgArrowStarOp* isSgArrowStarOp( const SgNode * s );
  240695             : 
  240696             :      // ******************************************
  240697             :      // * Memory Pool / New / Delete
  240698             :      // ******************************************
  240699             : 
  240700             :      public:
  240701             :           /// \private
  240702             :           static const unsigned pool_size; //
  240703             :           /// \private
  240704             :           static std::vector<unsigned char *> pools; //
  240705             :           /// \private
  240706             :           static SgArrowStarOp * next_node; // 
  240707             : 
  240708             :           /// \private
  240709             :           static unsigned long initializeStorageClassArray(SgArrowStarOpStorageClass *); //
  240710             : 
  240711             :           /// \private
  240712             :           static void clearMemoryPool(); //
  240713             :           static void deleteMemoryPool(); //
  240714             : 
  240715             :           /// \private
  240716             :           static void extendMemoryPoolForFileIO(); //
  240717             : 
  240718             :           /// \private
  240719             :           static SgArrowStarOp * getPointerFromGlobalIndex(unsigned long); //
  240720             :           /// \private
  240721             :           static SgArrowStarOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  240722             : 
  240723             :           /// \private
  240724             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  240725             :           /// \private
  240726             :           static void resetValidFreepointers(); //
  240727             :           /// \private
  240728             :           static unsigned long getNumberOfLastValidPointer(); //
  240729             : 
  240730             : 
  240731             : #if defined(INLINE_FUNCTIONS)
  240732             :       /*! \brief returns pointer to newly allocated IR node */
  240733             :           inline void *operator new (size_t size);
  240734             : #else
  240735             :       /*! \brief returns pointer to newly allocated IR node */
  240736             :           void *operator new (size_t size);
  240737             : #endif
  240738             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  240739             :           void operator delete (void* pointer, size_t size);
  240740             : 
  240741             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  240742           8 :           void operator delete (void* pointer)
  240743             :              {
  240744             :             // This is the generated delete operator...
  240745           8 :                SgArrowStarOp::operator delete (pointer,sizeof(SgArrowStarOp));
  240746             :              }
  240747             : 
  240748             :       /*! \brief Returns the total number of IR nodes of this type */
  240749             :           static size_t numberOfNodes();
  240750             : 
  240751             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  240752             :           static size_t memoryUsage();
  240753             : 
  240754             :       // End of scope which started in IR nodes specific code 
  240755             :       /* */
  240756             : 
  240757             :       /* name Internal Functions
  240758             :           \brief Internal functions ... incomplete-documentation
  240759             : 
  240760             :           These functions have been made public as part of the design, but they are suggested for internal use 
  240761             :           or by particularly knowledgeable users for specialized tools or applications.
  240762             : 
  240763             :           \internal We could not make these private because they are required by user for special purposes. And 
  240764             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  240765             :          
  240766             :        */
  240767             : 
  240768             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  240769             :        // overridden in every class by *generated* implementation
  240770             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  240771             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  240772             :        // MS: 06/28/02 container of names of variables or container indices 
  240773             :        // used used in the traversal to access AST successor nodes
  240774             :        // overridden in every class by *generated* implementation
  240775             :       /*! \brief container of names of variables or container indices used used in the traversal
  240776             :           to access AST successor nodes overridden in every class by *generated* implementation */
  240777             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  240778             : 
  240779             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  240780             :        // than all the vector copies. The implementation for these functions is generated for each class.
  240781             :       /*! \brief return number of children in the traversal successor list */
  240782             :           virtual size_t get_numberOfTraversalSuccessors() override;
  240783             :       /*! \brief index-based access to traversal successors by index number */
  240784             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  240785             :       /*! \brief index-based access to traversal successors by child node */
  240786             :           virtual size_t get_childIndex(SgNode *child) override;
  240787             : 
  240788             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  240789             :        // MS: 08/16/2002 method for generating RTI information
  240790             :       /*! \brief return C++ Runtime-Time-Information */
  240791             :           virtual RTIReturnType roseRTI() override;
  240792             : #endif
  240793             :       /* */
  240794             : 
  240795             : 
  240796             : 
  240797             :       /* name Deprecated Functions
  240798             :           \brief Deprecated functions ... incomplete-documentation
  240799             : 
  240800             :           These functions have been deprecated from use.
  240801             :        */
  240802             :       /* */
  240803             : 
  240804             :       /*! returns a C style string (char*) representing the class name */
  240805             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  240806             : 
  240807             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  240808             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  240809             : #if 0
  240810             :       /*! returns old style Sage II enum values */
  240811             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  240812             :       /*! returns old style Sage II enum values */
  240813             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  240814             : #endif
  240815             :       /* */
  240816             : 
  240817             : 
  240818             : 
  240819             : 
  240820             :      public:
  240821             :       /* name Traversal Support Functions
  240822             :           \brief Traversal support functions ... incomplete-documentation
  240823             : 
  240824             :           These functions have been made public as part of the design, but they are suggested for internal use 
  240825             :           or by particularly knowledgable users for specialized tools or applications.
  240826             :        */
  240827             :       /* */
  240828             : 
  240829             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  240830             :        // (inferior to ROSE traversal mechanism, experimental).
  240831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  240832             :        */
  240833             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  240834             : 
  240835             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  240836             :       /*! \brief support for the classic visitor pattern done in GoF */
  240837             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  240838             : 
  240839             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  240840             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  240841             :        */
  240842             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  240843             : 
  240844             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  240845             :        */
  240846             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  240847             : 
  240848             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  240849             :        // This traversal helps support internal tools that call static member functions.
  240850             :        // note: this function operates on the memory pools.
  240851             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  240852             :        */
  240853             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  240854             :       /* */
  240855             : 
  240856             : 
  240857             :      public:
  240858             :       /* name Memory Allocation Functions
  240859             :           \brief Memory allocations functions ... incomplete-documentation
  240860             : 
  240861             :           These functions have been made public as part of the design, but they are suggested for internal use 
  240862             :           or by particularly knowledgable users for specialized tools or applications.
  240863             :        */
  240864             :       /* */
  240865             : 
  240866             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  240867             : 
  240868             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  240869             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  240870             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  240871             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  240872             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  240873             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  240874             :           being used with the AST File I/O mechanism.
  240875             :        */
  240876             :           virtual bool isInMemoryPool() override;
  240877             : 
  240878             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  240879             : 
  240880             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  240881             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  240882             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  240883             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  240884             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  240885             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  240886             :           being used with the AST File I/O mechanism.
  240887             :        */
  240888             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  240889             : 
  240890             :       // DQ (4/30/2006): Modified to be a const function.
  240891             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  240892             : 
  240893             :           This functions is part of general support for many possible tools to operate 
  240894             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  240895             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  240896             :           less than the set of pointers used by the AST file I/O. This is part of
  240897             :           work implemented by Andreas, and support tools such as the AST graph generation.
  240898             : 
  240899             :           \warning This function can return unexpected data members and thus the 
  240900             :                    order and the number of elements is unpredicable and subject 
  240901             :                    to change.
  240902             : 
  240903             :           \returns STL vector of pairs of SgNode* and strings
  240904             :        */
  240905             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  240906             : 
  240907             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  240908             : 
  240909             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  240910             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  240911             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  240912             : 
  240913             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  240914             :                    and subject to change.
  240915             :        */
  240916             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  240917             : 
  240918             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  240919             : 
  240920             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  240921             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  240922             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  240923             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  240924             : 
  240925             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  240926             : 
  240927             :           \returns long
  240928             :        */
  240929             :           virtual long getChildIndex( SgNode* childNode ) const override;
  240930             : 
  240931             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  240932             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240933             :       /* \brief Constructor for use by AST File I/O Mechanism
  240934             : 
  240935             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  240936             :           which obtained via fast binary file I/O from disk.
  240937             :        */
  240938             :        // SgArrowStarOp( SgArrowStarOpStorageClass& source );
  240939             : 
  240940             : 
  240941             : 
  240942             : 
  240943             : 
  240944             :  // JH (10/24/2005): methods added to support the ast file IO
  240945             :     private:
  240946             : 
  240947             :       /* name AST Memory Allocation Support Functions
  240948             :           \brief Memory allocations support....
  240949             : 
  240950             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  240951             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  240952             :           and support the AST File I/O Mechanism.
  240953             :        */
  240954             :       /* */
  240955             : 
  240956             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  240957             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  240958             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  240959             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  240960             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  240961             :           a correspinding one in the AST_FILE_IO class!
  240962             :        */
  240963             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  240964             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240965             :       /* \brief Typedef used for low level memory access.
  240966             :        */
  240967             :        // typedef unsigned char* TestType;
  240968             : 
  240969             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  240970             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  240971             :       /* \brief Typedef used to hold memory addresses as values.
  240972             :        */
  240973             :        // typedef unsigned long  AddressType;
  240974             : 
  240975             : 
  240976             : 
  240977             :        // necessary, to have direct access to the p_freepointer and the private methods !
  240978             :       /*! \brief friend class declaration to support AST File I/O */
  240979             :           friend class AST_FILE_IO;
  240980             : 
  240981             :       /*! \brief friend class declaration to support AST File I/O */
  240982             :           friend class SgArrowStarOpStorageClass;
  240983             : 
  240984             :       /*! \brief friend class declaration to support AST File I/O */
  240985             :           friend class AstSpecificDataManagingClass;
  240986             : 
  240987             :       /*! \brief friend class declaration to support AST File I/O */
  240988             :           friend class AstSpecificDataManagingClassStorageClass;
  240989             :     public:
  240990             :       /*! \brief IR node constructor to support AST File I/O */
  240991             :           SgArrowStarOp( const SgArrowStarOpStorageClass& source );
  240992             : 
  240993             :  // private: // JJW hack
  240994             :        /*
  240995             :           name AST Memory Allocation Support Variables
  240996             :           Memory allocations support variables 
  240997             : 
  240998             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  240999             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  241000             :           and support the AST File I/O Mechanism.
  241001             :        */
  241002             :       /* */
  241003             : 
  241004             :     public:
  241005             : 
  241006             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  241007             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  241008             :       // virtual SgNode* addRegExpAttribute();
  241009             :       /*! \brief Support for AST matching using regular expression.
  241010             : 
  241011             :           This support is incomplete and the subject of current research to define 
  241012             :           RegEx trees to support inexact matching.
  241013             :        */
  241014             :           SgArrowStarOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  241015             : 
  241016             : // *** COMMON CODE SECTION ENDS HERE ***
  241017             : 
  241018             : 
  241019             : // End of memberFunctionString
  241020             : // Start of memberFunctionString
  241021             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  241022             : 
  241023             :      // the generated cast function
  241024             :      // friend ROSE_DLL_API SgArrowStarOp* isSgArrowStarOp ( SgNode* s );
  241025             : 
  241026             :           typedef SgBinaryOp base_node_type;
  241027             : 
  241028             : 
  241029             : // End of memberFunctionString
  241030             : // Start of memberFunctionString
  241031             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241032             : 
  241033             :           void post_construction_initialization() override;
  241034             : 
  241035             : 
  241036             : // End of memberFunctionString
  241037             : // Start of memberFunctionString
  241038             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241039             : 
  241040           0 :           int precedence() const override { return 14; }
  241041             : 
  241042             : 
  241043             : // End of memberFunctionString
  241044             : 
  241045             : 
  241046             :      public: 
  241047             :          virtual ~SgArrowStarOp();
  241048             : 
  241049             : 
  241050             :      public: 
  241051             :          SgArrowStarOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  241052             :          SgArrowStarOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  241053             : 
  241054             :     protected:
  241055             : 
  241056             :     friend struct Rose::Traits::generated::describe_node_t<SgArrowStarOp>;
  241057             : 
  241058             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241059             : 
  241060             : 
  241061             :    };
  241062             : #endif
  241063             : 
  241064             : // postdeclarations for SgArrowStarOp
  241065             : 
  241066             : /* #line 241067 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241067             : 
  241068             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  241069             : 
  241070             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241071             : 
  241072             : 
  241073             : /* #line 241074 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241074             : 
  241075             : 
  241076             : 
  241077             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241078             : 
  241079             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  241080             : //      This code is automatically generated for each 
  241081             : //      terminal and non-terminal within the defined 
  241082             : //      grammar.  There is a simple way to change the 
  241083             : //      code to fix bugs etc.  See the ROSE README file
  241084             : //      for directions.
  241085             : 
  241086             : // tps: (02/22/2010): Adding DLL export requirements
  241087             : #include "rosedll.h"
  241088             : 
  241089             : // predeclarations for SgEqualityOp
  241090             : 
  241091             : /* #line 241092 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241092             : 
  241093             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  241094             : 
  241095             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241096             : 
  241097             : #if 1
  241098             : // Class Definition for SgEqualityOp
  241099             : class ROSE_DLL_API SgEqualityOp  : public SgBinaryOp
  241100             :    {
  241101             :      public:
  241102             : 
  241103             : 
  241104             : /* #line 241105 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241105             : 
  241106             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  241107             : // Start of memberFunctionString
  241108             : /* #line 827 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241109             : 
  241110             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241111             : 
  241112             :        // DQ (6/20/2006): Used for all relational operators
  241113             :           virtual SgType* get_type() const override;
  241114             : 
  241115             : 
  241116             : 
  241117             : 
  241118             : // End of memberFunctionString
  241119             : // Start of memberFunctionString
  241120             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  241121             : 
  241122             : // *** COMMON CODE SECTION BEGINS HERE ***
  241123             : 
  241124             :     public:
  241125             : 
  241126             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  241127             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  241128             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  241129             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  241130             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  241131             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  241132             : 
  241133             :       /*! \brief returns a string representing the class name */
  241134             :           virtual std::string class_name() const override;
  241135             : 
  241136             :       /*! \brief returns new style SageIII enum values */
  241137             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  241138             : 
  241139             :       /*! \brief static variant value */
  241140             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  241141             :        // static const VariantT static_variant = V_SgEqualityOp;
  241142             :           enum { static_variant = V_SgEqualityOp };
  241143             : 
  241144             :        /* the generated cast function */
  241145             :       /*! \brief Casts pointer from base class to derived class */
  241146             :           ROSE_DLL_API friend       SgEqualityOp* isSgEqualityOp(       SgNode * s );
  241147             : 
  241148             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  241149             :           ROSE_DLL_API friend const SgEqualityOp* isSgEqualityOp( const SgNode * s );
  241150             : 
  241151             :      // ******************************************
  241152             :      // * Memory Pool / New / Delete
  241153             :      // ******************************************
  241154             : 
  241155             :      public:
  241156             :           /// \private
  241157             :           static const unsigned pool_size; //
  241158             :           /// \private
  241159             :           static std::vector<unsigned char *> pools; //
  241160             :           /// \private
  241161             :           static SgEqualityOp * next_node; // 
  241162             : 
  241163             :           /// \private
  241164             :           static unsigned long initializeStorageClassArray(SgEqualityOpStorageClass *); //
  241165             : 
  241166             :           /// \private
  241167             :           static void clearMemoryPool(); //
  241168             :           static void deleteMemoryPool(); //
  241169             : 
  241170             :           /// \private
  241171             :           static void extendMemoryPoolForFileIO(); //
  241172             : 
  241173             :           /// \private
  241174             :           static SgEqualityOp * getPointerFromGlobalIndex(unsigned long); //
  241175             :           /// \private
  241176             :           static SgEqualityOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  241177             : 
  241178             :           /// \private
  241179             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  241180             :           /// \private
  241181             :           static void resetValidFreepointers(); //
  241182             :           /// \private
  241183             :           static unsigned long getNumberOfLastValidPointer(); //
  241184             : 
  241185             : 
  241186             : #if defined(INLINE_FUNCTIONS)
  241187             :       /*! \brief returns pointer to newly allocated IR node */
  241188             :           inline void *operator new (size_t size);
  241189             : #else
  241190             :       /*! \brief returns pointer to newly allocated IR node */
  241191             :           void *operator new (size_t size);
  241192             : #endif
  241193             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  241194             :           void operator delete (void* pointer, size_t size);
  241195             : 
  241196             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  241197         528 :           void operator delete (void* pointer)
  241198             :              {
  241199             :             // This is the generated delete operator...
  241200         528 :                SgEqualityOp::operator delete (pointer,sizeof(SgEqualityOp));
  241201             :              }
  241202             : 
  241203             :       /*! \brief Returns the total number of IR nodes of this type */
  241204             :           static size_t numberOfNodes();
  241205             : 
  241206             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  241207             :           static size_t memoryUsage();
  241208             : 
  241209             :       // End of scope which started in IR nodes specific code 
  241210             :       /* */
  241211             : 
  241212             :       /* name Internal Functions
  241213             :           \brief Internal functions ... incomplete-documentation
  241214             : 
  241215             :           These functions have been made public as part of the design, but they are suggested for internal use 
  241216             :           or by particularly knowledgeable users for specialized tools or applications.
  241217             : 
  241218             :           \internal We could not make these private because they are required by user for special purposes. And 
  241219             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  241220             :          
  241221             :        */
  241222             : 
  241223             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  241224             :        // overridden in every class by *generated* implementation
  241225             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  241226             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  241227             :        // MS: 06/28/02 container of names of variables or container indices 
  241228             :        // used used in the traversal to access AST successor nodes
  241229             :        // overridden in every class by *generated* implementation
  241230             :       /*! \brief container of names of variables or container indices used used in the traversal
  241231             :           to access AST successor nodes overridden in every class by *generated* implementation */
  241232             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  241233             : 
  241234             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  241235             :        // than all the vector copies. The implementation for these functions is generated for each class.
  241236             :       /*! \brief return number of children in the traversal successor list */
  241237             :           virtual size_t get_numberOfTraversalSuccessors() override;
  241238             :       /*! \brief index-based access to traversal successors by index number */
  241239             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  241240             :       /*! \brief index-based access to traversal successors by child node */
  241241             :           virtual size_t get_childIndex(SgNode *child) override;
  241242             : 
  241243             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  241244             :        // MS: 08/16/2002 method for generating RTI information
  241245             :       /*! \brief return C++ Runtime-Time-Information */
  241246             :           virtual RTIReturnType roseRTI() override;
  241247             : #endif
  241248             :       /* */
  241249             : 
  241250             : 
  241251             : 
  241252             :       /* name Deprecated Functions
  241253             :           \brief Deprecated functions ... incomplete-documentation
  241254             : 
  241255             :           These functions have been deprecated from use.
  241256             :        */
  241257             :       /* */
  241258             : 
  241259             :       /*! returns a C style string (char*) representing the class name */
  241260             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  241261             : 
  241262             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  241263             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  241264             : #if 0
  241265             :       /*! returns old style Sage II enum values */
  241266             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  241267             :       /*! returns old style Sage II enum values */
  241268             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  241269             : #endif
  241270             :       /* */
  241271             : 
  241272             : 
  241273             : 
  241274             : 
  241275             :      public:
  241276             :       /* name Traversal Support Functions
  241277             :           \brief Traversal support functions ... incomplete-documentation
  241278             : 
  241279             :           These functions have been made public as part of the design, but they are suggested for internal use 
  241280             :           or by particularly knowledgable users for specialized tools or applications.
  241281             :        */
  241282             :       /* */
  241283             : 
  241284             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  241285             :        // (inferior to ROSE traversal mechanism, experimental).
  241286             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  241287             :        */
  241288             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  241289             : 
  241290             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  241291             :       /*! \brief support for the classic visitor pattern done in GoF */
  241292             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  241293             : 
  241294             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  241295             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  241296             :        */
  241297             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  241298             : 
  241299             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  241300             :        */
  241301             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  241302             : 
  241303             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  241304             :        // This traversal helps support internal tools that call static member functions.
  241305             :        // note: this function operates on the memory pools.
  241306             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  241307             :        */
  241308             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  241309             :       /* */
  241310             : 
  241311             : 
  241312             :      public:
  241313             :       /* name Memory Allocation Functions
  241314             :           \brief Memory allocations functions ... incomplete-documentation
  241315             : 
  241316             :           These functions have been made public as part of the design, but they are suggested for internal use 
  241317             :           or by particularly knowledgable users for specialized tools or applications.
  241318             :        */
  241319             :       /* */
  241320             : 
  241321             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  241322             : 
  241323             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  241324             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  241325             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  241326             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  241327             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  241328             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  241329             :           being used with the AST File I/O mechanism.
  241330             :        */
  241331             :           virtual bool isInMemoryPool() override;
  241332             : 
  241333             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  241334             : 
  241335             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  241336             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  241337             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  241338             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  241339             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  241340             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  241341             :           being used with the AST File I/O mechanism.
  241342             :        */
  241343             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  241344             : 
  241345             :       // DQ (4/30/2006): Modified to be a const function.
  241346             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  241347             : 
  241348             :           This functions is part of general support for many possible tools to operate 
  241349             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  241350             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  241351             :           less than the set of pointers used by the AST file I/O. This is part of
  241352             :           work implemented by Andreas, and support tools such as the AST graph generation.
  241353             : 
  241354             :           \warning This function can return unexpected data members and thus the 
  241355             :                    order and the number of elements is unpredicable and subject 
  241356             :                    to change.
  241357             : 
  241358             :           \returns STL vector of pairs of SgNode* and strings
  241359             :        */
  241360             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  241361             : 
  241362             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  241363             : 
  241364             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  241365             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  241366             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  241367             : 
  241368             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  241369             :                    and subject to change.
  241370             :        */
  241371             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  241372             : 
  241373             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  241374             : 
  241375             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  241376             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  241377             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  241378             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  241379             : 
  241380             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  241381             : 
  241382             :           \returns long
  241383             :        */
  241384             :           virtual long getChildIndex( SgNode* childNode ) const override;
  241385             : 
  241386             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  241387             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  241388             :       /* \brief Constructor for use by AST File I/O Mechanism
  241389             : 
  241390             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  241391             :           which obtained via fast binary file I/O from disk.
  241392             :        */
  241393             :        // SgEqualityOp( SgEqualityOpStorageClass& source );
  241394             : 
  241395             : 
  241396             : 
  241397             : 
  241398             : 
  241399             :  // JH (10/24/2005): methods added to support the ast file IO
  241400             :     private:
  241401             : 
  241402             :       /* name AST Memory Allocation Support Functions
  241403             :           \brief Memory allocations support....
  241404             : 
  241405             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  241406             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  241407             :           and support the AST File I/O Mechanism.
  241408             :        */
  241409             :       /* */
  241410             : 
  241411             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  241412             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  241413             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  241414             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  241415             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  241416             :           a correspinding one in the AST_FILE_IO class!
  241417             :        */
  241418             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  241419             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  241420             :       /* \brief Typedef used for low level memory access.
  241421             :        */
  241422             :        // typedef unsigned char* TestType;
  241423             : 
  241424             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  241425             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  241426             :       /* \brief Typedef used to hold memory addresses as values.
  241427             :        */
  241428             :        // typedef unsigned long  AddressType;
  241429             : 
  241430             : 
  241431             : 
  241432             :        // necessary, to have direct access to the p_freepointer and the private methods !
  241433             :       /*! \brief friend class declaration to support AST File I/O */
  241434             :           friend class AST_FILE_IO;
  241435             : 
  241436             :       /*! \brief friend class declaration to support AST File I/O */
  241437             :           friend class SgEqualityOpStorageClass;
  241438             : 
  241439             :       /*! \brief friend class declaration to support AST File I/O */
  241440             :           friend class AstSpecificDataManagingClass;
  241441             : 
  241442             :       /*! \brief friend class declaration to support AST File I/O */
  241443             :           friend class AstSpecificDataManagingClassStorageClass;
  241444             :     public:
  241445             :       /*! \brief IR node constructor to support AST File I/O */
  241446             :           SgEqualityOp( const SgEqualityOpStorageClass& source );
  241447             : 
  241448             :  // private: // JJW hack
  241449             :        /*
  241450             :           name AST Memory Allocation Support Variables
  241451             :           Memory allocations support variables 
  241452             : 
  241453             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  241454             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  241455             :           and support the AST File I/O Mechanism.
  241456             :        */
  241457             :       /* */
  241458             : 
  241459             :     public:
  241460             : 
  241461             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  241462             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  241463             :       // virtual SgNode* addRegExpAttribute();
  241464             :       /*! \brief Support for AST matching using regular expression.
  241465             : 
  241466             :           This support is incomplete and the subject of current research to define 
  241467             :           RegEx trees to support inexact matching.
  241468             :        */
  241469             :           SgEqualityOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  241470             : 
  241471             : // *** COMMON CODE SECTION ENDS HERE ***
  241472             : 
  241473             : 
  241474             : // End of memberFunctionString
  241475             : // Start of memberFunctionString
  241476             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  241477             : 
  241478             :      // the generated cast function
  241479             :      // friend ROSE_DLL_API SgEqualityOp* isSgEqualityOp ( SgNode* s );
  241480             : 
  241481             :           typedef SgBinaryOp base_node_type;
  241482             : 
  241483             : 
  241484             : // End of memberFunctionString
  241485             : // Start of memberFunctionString
  241486             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241487             : 
  241488             :           void post_construction_initialization() override;
  241489             : 
  241490             : 
  241491             : // End of memberFunctionString
  241492             : // Start of memberFunctionString
  241493             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241494             : 
  241495           0 :           int precedence() const override { return  9; }
  241496             : 
  241497             : 
  241498             : // End of memberFunctionString
  241499             : 
  241500             : 
  241501             :      public: 
  241502             :          virtual ~SgEqualityOp();
  241503             : 
  241504             : 
  241505             :      public: 
  241506             :          SgEqualityOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  241507             :          SgEqualityOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  241508             : 
  241509             :     protected:
  241510             : 
  241511             :     friend struct Rose::Traits::generated::describe_node_t<SgEqualityOp>;
  241512             : 
  241513             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241514             : 
  241515             : 
  241516             :    };
  241517             : #endif
  241518             : 
  241519             : // postdeclarations for SgEqualityOp
  241520             : 
  241521             : /* #line 241522 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241522             : 
  241523             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  241524             : 
  241525             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241526             : 
  241527             : 
  241528             : /* #line 241529 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241529             : 
  241530             : 
  241531             : 
  241532             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241533             : 
  241534             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  241535             : //      This code is automatically generated for each 
  241536             : //      terminal and non-terminal within the defined 
  241537             : //      grammar.  There is a simple way to change the 
  241538             : //      code to fix bugs etc.  See the ROSE README file
  241539             : //      for directions.
  241540             : 
  241541             : // tps: (02/22/2010): Adding DLL export requirements
  241542             : #include "rosedll.h"
  241543             : 
  241544             : // predeclarations for SgLessThanOp
  241545             : 
  241546             : /* #line 241547 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241547             : 
  241548             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  241549             : 
  241550             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241551             : 
  241552             : #if 1
  241553             : // Class Definition for SgLessThanOp
  241554             : class ROSE_DLL_API SgLessThanOp  : public SgBinaryOp
  241555             :    {
  241556             :      public:
  241557             : 
  241558             : 
  241559             : /* #line 241560 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241560             : 
  241561             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  241562             : // Start of memberFunctionString
  241563             : /* #line 831 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241564             : 
  241565             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241566             : 
  241567             :        // DQ (6/20/2006): Used for all relational operators
  241568             :           virtual SgType* get_type() const override;
  241569             : 
  241570             : 
  241571             : 
  241572             : 
  241573             : // End of memberFunctionString
  241574             : // Start of memberFunctionString
  241575             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  241576             : 
  241577             : // *** COMMON CODE SECTION BEGINS HERE ***
  241578             : 
  241579             :     public:
  241580             : 
  241581             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  241582             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  241583             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  241584             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  241585             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  241586             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  241587             : 
  241588             :       /*! \brief returns a string representing the class name */
  241589             :           virtual std::string class_name() const override;
  241590             : 
  241591             :       /*! \brief returns new style SageIII enum values */
  241592             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  241593             : 
  241594             :       /*! \brief static variant value */
  241595             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  241596             :        // static const VariantT static_variant = V_SgLessThanOp;
  241597             :           enum { static_variant = V_SgLessThanOp };
  241598             : 
  241599             :        /* the generated cast function */
  241600             :       /*! \brief Casts pointer from base class to derived class */
  241601             :           ROSE_DLL_API friend       SgLessThanOp* isSgLessThanOp(       SgNode * s );
  241602             : 
  241603             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  241604             :           ROSE_DLL_API friend const SgLessThanOp* isSgLessThanOp( const SgNode * s );
  241605             : 
  241606             :      // ******************************************
  241607             :      // * Memory Pool / New / Delete
  241608             :      // ******************************************
  241609             : 
  241610             :      public:
  241611             :           /// \private
  241612             :           static const unsigned pool_size; //
  241613             :           /// \private
  241614             :           static std::vector<unsigned char *> pools; //
  241615             :           /// \private
  241616             :           static SgLessThanOp * next_node; // 
  241617             : 
  241618             :           /// \private
  241619             :           static unsigned long initializeStorageClassArray(SgLessThanOpStorageClass *); //
  241620             : 
  241621             :           /// \private
  241622             :           static void clearMemoryPool(); //
  241623             :           static void deleteMemoryPool(); //
  241624             : 
  241625             :           /// \private
  241626             :           static void extendMemoryPoolForFileIO(); //
  241627             : 
  241628             :           /// \private
  241629             :           static SgLessThanOp * getPointerFromGlobalIndex(unsigned long); //
  241630             :           /// \private
  241631             :           static SgLessThanOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  241632             : 
  241633             :           /// \private
  241634             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  241635             :           /// \private
  241636             :           static void resetValidFreepointers(); //
  241637             :           /// \private
  241638             :           static unsigned long getNumberOfLastValidPointer(); //
  241639             : 
  241640             : 
  241641             : #if defined(INLINE_FUNCTIONS)
  241642             :       /*! \brief returns pointer to newly allocated IR node */
  241643             :           inline void *operator new (size_t size);
  241644             : #else
  241645             :       /*! \brief returns pointer to newly allocated IR node */
  241646             :           void *operator new (size_t size);
  241647             : #endif
  241648             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  241649             :           void operator delete (void* pointer, size_t size);
  241650             : 
  241651             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  241652        1177 :           void operator delete (void* pointer)
  241653             :              {
  241654             :             // This is the generated delete operator...
  241655        1177 :                SgLessThanOp::operator delete (pointer,sizeof(SgLessThanOp));
  241656             :              }
  241657             : 
  241658             :       /*! \brief Returns the total number of IR nodes of this type */
  241659             :           static size_t numberOfNodes();
  241660             : 
  241661             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  241662             :           static size_t memoryUsage();
  241663             : 
  241664             :       // End of scope which started in IR nodes specific code 
  241665             :       /* */
  241666             : 
  241667             :       /* name Internal Functions
  241668             :           \brief Internal functions ... incomplete-documentation
  241669             : 
  241670             :           These functions have been made public as part of the design, but they are suggested for internal use 
  241671             :           or by particularly knowledgeable users for specialized tools or applications.
  241672             : 
  241673             :           \internal We could not make these private because they are required by user for special purposes. And 
  241674             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  241675             :          
  241676             :        */
  241677             : 
  241678             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  241679             :        // overridden in every class by *generated* implementation
  241680             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  241681             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  241682             :        // MS: 06/28/02 container of names of variables or container indices 
  241683             :        // used used in the traversal to access AST successor nodes
  241684             :        // overridden in every class by *generated* implementation
  241685             :       /*! \brief container of names of variables or container indices used used in the traversal
  241686             :           to access AST successor nodes overridden in every class by *generated* implementation */
  241687             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  241688             : 
  241689             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  241690             :        // than all the vector copies. The implementation for these functions is generated for each class.
  241691             :       /*! \brief return number of children in the traversal successor list */
  241692             :           virtual size_t get_numberOfTraversalSuccessors() override;
  241693             :       /*! \brief index-based access to traversal successors by index number */
  241694             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  241695             :       /*! \brief index-based access to traversal successors by child node */
  241696             :           virtual size_t get_childIndex(SgNode *child) override;
  241697             : 
  241698             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  241699             :        // MS: 08/16/2002 method for generating RTI information
  241700             :       /*! \brief return C++ Runtime-Time-Information */
  241701             :           virtual RTIReturnType roseRTI() override;
  241702             : #endif
  241703             :       /* */
  241704             : 
  241705             : 
  241706             : 
  241707             :       /* name Deprecated Functions
  241708             :           \brief Deprecated functions ... incomplete-documentation
  241709             : 
  241710             :           These functions have been deprecated from use.
  241711             :        */
  241712             :       /* */
  241713             : 
  241714             :       /*! returns a C style string (char*) representing the class name */
  241715             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  241716             : 
  241717             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  241718             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  241719             : #if 0
  241720             :       /*! returns old style Sage II enum values */
  241721             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  241722             :       /*! returns old style Sage II enum values */
  241723             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  241724             : #endif
  241725             :       /* */
  241726             : 
  241727             : 
  241728             : 
  241729             : 
  241730             :      public:
  241731             :       /* name Traversal Support Functions
  241732             :           \brief Traversal support functions ... incomplete-documentation
  241733             : 
  241734             :           These functions have been made public as part of the design, but they are suggested for internal use 
  241735             :           or by particularly knowledgable users for specialized tools or applications.
  241736             :        */
  241737             :       /* */
  241738             : 
  241739             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  241740             :        // (inferior to ROSE traversal mechanism, experimental).
  241741             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  241742             :        */
  241743             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  241744             : 
  241745             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  241746             :       /*! \brief support for the classic visitor pattern done in GoF */
  241747             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  241748             : 
  241749             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  241750             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  241751             :        */
  241752             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  241753             : 
  241754             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  241755             :        */
  241756             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  241757             : 
  241758             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  241759             :        // This traversal helps support internal tools that call static member functions.
  241760             :        // note: this function operates on the memory pools.
  241761             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  241762             :        */
  241763             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  241764             :       /* */
  241765             : 
  241766             : 
  241767             :      public:
  241768             :       /* name Memory Allocation Functions
  241769             :           \brief Memory allocations functions ... incomplete-documentation
  241770             : 
  241771             :           These functions have been made public as part of the design, but they are suggested for internal use 
  241772             :           or by particularly knowledgable users for specialized tools or applications.
  241773             :        */
  241774             :       /* */
  241775             : 
  241776             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  241777             : 
  241778             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  241779             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  241780             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  241781             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  241782             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  241783             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  241784             :           being used with the AST File I/O mechanism.
  241785             :        */
  241786             :           virtual bool isInMemoryPool() override;
  241787             : 
  241788             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  241789             : 
  241790             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  241791             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  241792             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  241793             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  241794             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  241795             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  241796             :           being used with the AST File I/O mechanism.
  241797             :        */
  241798             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  241799             : 
  241800             :       // DQ (4/30/2006): Modified to be a const function.
  241801             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  241802             : 
  241803             :           This functions is part of general support for many possible tools to operate 
  241804             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  241805             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  241806             :           less than the set of pointers used by the AST file I/O. This is part of
  241807             :           work implemented by Andreas, and support tools such as the AST graph generation.
  241808             : 
  241809             :           \warning This function can return unexpected data members and thus the 
  241810             :                    order and the number of elements is unpredicable and subject 
  241811             :                    to change.
  241812             : 
  241813             :           \returns STL vector of pairs of SgNode* and strings
  241814             :        */
  241815             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  241816             : 
  241817             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  241818             : 
  241819             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  241820             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  241821             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  241822             : 
  241823             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  241824             :                    and subject to change.
  241825             :        */
  241826             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  241827             : 
  241828             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  241829             : 
  241830             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  241831             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  241832             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  241833             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  241834             : 
  241835             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  241836             : 
  241837             :           \returns long
  241838             :        */
  241839             :           virtual long getChildIndex( SgNode* childNode ) const override;
  241840             : 
  241841             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  241842             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  241843             :       /* \brief Constructor for use by AST File I/O Mechanism
  241844             : 
  241845             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  241846             :           which obtained via fast binary file I/O from disk.
  241847             :        */
  241848             :        // SgLessThanOp( SgLessThanOpStorageClass& source );
  241849             : 
  241850             : 
  241851             : 
  241852             : 
  241853             : 
  241854             :  // JH (10/24/2005): methods added to support the ast file IO
  241855             :     private:
  241856             : 
  241857             :       /* name AST Memory Allocation Support Functions
  241858             :           \brief Memory allocations support....
  241859             : 
  241860             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  241861             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  241862             :           and support the AST File I/O Mechanism.
  241863             :        */
  241864             :       /* */
  241865             : 
  241866             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  241867             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  241868             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  241869             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  241870             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  241871             :           a correspinding one in the AST_FILE_IO class!
  241872             :        */
  241873             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  241874             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  241875             :       /* \brief Typedef used for low level memory access.
  241876             :        */
  241877             :        // typedef unsigned char* TestType;
  241878             : 
  241879             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  241880             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  241881             :       /* \brief Typedef used to hold memory addresses as values.
  241882             :        */
  241883             :        // typedef unsigned long  AddressType;
  241884             : 
  241885             : 
  241886             : 
  241887             :        // necessary, to have direct access to the p_freepointer and the private methods !
  241888             :       /*! \brief friend class declaration to support AST File I/O */
  241889             :           friend class AST_FILE_IO;
  241890             : 
  241891             :       /*! \brief friend class declaration to support AST File I/O */
  241892             :           friend class SgLessThanOpStorageClass;
  241893             : 
  241894             :       /*! \brief friend class declaration to support AST File I/O */
  241895             :           friend class AstSpecificDataManagingClass;
  241896             : 
  241897             :       /*! \brief friend class declaration to support AST File I/O */
  241898             :           friend class AstSpecificDataManagingClassStorageClass;
  241899             :     public:
  241900             :       /*! \brief IR node constructor to support AST File I/O */
  241901             :           SgLessThanOp( const SgLessThanOpStorageClass& source );
  241902             : 
  241903             :  // private: // JJW hack
  241904             :        /*
  241905             :           name AST Memory Allocation Support Variables
  241906             :           Memory allocations support variables 
  241907             : 
  241908             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  241909             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  241910             :           and support the AST File I/O Mechanism.
  241911             :        */
  241912             :       /* */
  241913             : 
  241914             :     public:
  241915             : 
  241916             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  241917             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  241918             :       // virtual SgNode* addRegExpAttribute();
  241919             :       /*! \brief Support for AST matching using regular expression.
  241920             : 
  241921             :           This support is incomplete and the subject of current research to define 
  241922             :           RegEx trees to support inexact matching.
  241923             :        */
  241924             :           SgLessThanOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  241925             : 
  241926             : // *** COMMON CODE SECTION ENDS HERE ***
  241927             : 
  241928             : 
  241929             : // End of memberFunctionString
  241930             : // Start of memberFunctionString
  241931             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  241932             : 
  241933             :      // the generated cast function
  241934             :      // friend ROSE_DLL_API SgLessThanOp* isSgLessThanOp ( SgNode* s );
  241935             : 
  241936             :           typedef SgBinaryOp base_node_type;
  241937             : 
  241938             : 
  241939             : // End of memberFunctionString
  241940             : // Start of memberFunctionString
  241941             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241942             : 
  241943             :           void post_construction_initialization() override;
  241944             : 
  241945             : 
  241946             : // End of memberFunctionString
  241947             : // Start of memberFunctionString
  241948             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  241949             : 
  241950           0 :           int precedence() const override { return 10; }
  241951             : 
  241952             : 
  241953             : // End of memberFunctionString
  241954             : 
  241955             : 
  241956             :      public: 
  241957             :          virtual ~SgLessThanOp();
  241958             : 
  241959             : 
  241960             :      public: 
  241961             :          SgLessThanOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  241962             :          SgLessThanOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  241963             : 
  241964             :     protected:
  241965             : 
  241966             :     friend struct Rose::Traits::generated::describe_node_t<SgLessThanOp>;
  241967             : 
  241968             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241969             : 
  241970             : 
  241971             :    };
  241972             : #endif
  241973             : 
  241974             : // postdeclarations for SgLessThanOp
  241975             : 
  241976             : /* #line 241977 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241977             : 
  241978             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  241979             : 
  241980             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241981             : 
  241982             : 
  241983             : /* #line 241984 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  241984             : 
  241985             : 
  241986             : 
  241987             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  241988             : 
  241989             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  241990             : //      This code is automatically generated for each 
  241991             : //      terminal and non-terminal within the defined 
  241992             : //      grammar.  There is a simple way to change the 
  241993             : //      code to fix bugs etc.  See the ROSE README file
  241994             : //      for directions.
  241995             : 
  241996             : // tps: (02/22/2010): Adding DLL export requirements
  241997             : #include "rosedll.h"
  241998             : 
  241999             : // predeclarations for SgGreaterThanOp
  242000             : 
  242001             : /* #line 242002 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242002             : 
  242003             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  242004             : 
  242005             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242006             : 
  242007             : #if 1
  242008             : // Class Definition for SgGreaterThanOp
  242009             : class ROSE_DLL_API SgGreaterThanOp  : public SgBinaryOp
  242010             :    {
  242011             :      public:
  242012             : 
  242013             : 
  242014             : /* #line 242015 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242015             : 
  242016             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  242017             : // Start of memberFunctionString
  242018             : /* #line 835 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242019             : 
  242020             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242021             : 
  242022             :        // DQ (6/20/2006): Used for all relational operators
  242023             :           virtual SgType* get_type() const override;
  242024             : 
  242025             : 
  242026             : 
  242027             : 
  242028             : // End of memberFunctionString
  242029             : // Start of memberFunctionString
  242030             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  242031             : 
  242032             : // *** COMMON CODE SECTION BEGINS HERE ***
  242033             : 
  242034             :     public:
  242035             : 
  242036             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  242037             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  242038             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  242039             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  242040             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  242041             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  242042             : 
  242043             :       /*! \brief returns a string representing the class name */
  242044             :           virtual std::string class_name() const override;
  242045             : 
  242046             :       /*! \brief returns new style SageIII enum values */
  242047             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  242048             : 
  242049             :       /*! \brief static variant value */
  242050             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  242051             :        // static const VariantT static_variant = V_SgGreaterThanOp;
  242052             :           enum { static_variant = V_SgGreaterThanOp };
  242053             : 
  242054             :        /* the generated cast function */
  242055             :       /*! \brief Casts pointer from base class to derived class */
  242056             :           ROSE_DLL_API friend       SgGreaterThanOp* isSgGreaterThanOp(       SgNode * s );
  242057             : 
  242058             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  242059             :           ROSE_DLL_API friend const SgGreaterThanOp* isSgGreaterThanOp( const SgNode * s );
  242060             : 
  242061             :      // ******************************************
  242062             :      // * Memory Pool / New / Delete
  242063             :      // ******************************************
  242064             : 
  242065             :      public:
  242066             :           /// \private
  242067             :           static const unsigned pool_size; //
  242068             :           /// \private
  242069             :           static std::vector<unsigned char *> pools; //
  242070             :           /// \private
  242071             :           static SgGreaterThanOp * next_node; // 
  242072             : 
  242073             :           /// \private
  242074             :           static unsigned long initializeStorageClassArray(SgGreaterThanOpStorageClass *); //
  242075             : 
  242076             :           /// \private
  242077             :           static void clearMemoryPool(); //
  242078             :           static void deleteMemoryPool(); //
  242079             : 
  242080             :           /// \private
  242081             :           static void extendMemoryPoolForFileIO(); //
  242082             : 
  242083             :           /// \private
  242084             :           static SgGreaterThanOp * getPointerFromGlobalIndex(unsigned long); //
  242085             :           /// \private
  242086             :           static SgGreaterThanOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  242087             : 
  242088             :           /// \private
  242089             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  242090             :           /// \private
  242091             :           static void resetValidFreepointers(); //
  242092             :           /// \private
  242093             :           static unsigned long getNumberOfLastValidPointer(); //
  242094             : 
  242095             : 
  242096             : #if defined(INLINE_FUNCTIONS)
  242097             :       /*! \brief returns pointer to newly allocated IR node */
  242098             :           inline void *operator new (size_t size);
  242099             : #else
  242100             :       /*! \brief returns pointer to newly allocated IR node */
  242101             :           void *operator new (size_t size);
  242102             : #endif
  242103             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  242104             :           void operator delete (void* pointer, size_t size);
  242105             : 
  242106             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  242107         236 :           void operator delete (void* pointer)
  242108             :              {
  242109             :             // This is the generated delete operator...
  242110         236 :                SgGreaterThanOp::operator delete (pointer,sizeof(SgGreaterThanOp));
  242111             :              }
  242112             : 
  242113             :       /*! \brief Returns the total number of IR nodes of this type */
  242114             :           static size_t numberOfNodes();
  242115             : 
  242116             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  242117             :           static size_t memoryUsage();
  242118             : 
  242119             :       // End of scope which started in IR nodes specific code 
  242120             :       /* */
  242121             : 
  242122             :       /* name Internal Functions
  242123             :           \brief Internal functions ... incomplete-documentation
  242124             : 
  242125             :           These functions have been made public as part of the design, but they are suggested for internal use 
  242126             :           or by particularly knowledgeable users for specialized tools or applications.
  242127             : 
  242128             :           \internal We could not make these private because they are required by user for special purposes. And 
  242129             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  242130             :          
  242131             :        */
  242132             : 
  242133             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  242134             :        // overridden in every class by *generated* implementation
  242135             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  242136             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  242137             :        // MS: 06/28/02 container of names of variables or container indices 
  242138             :        // used used in the traversal to access AST successor nodes
  242139             :        // overridden in every class by *generated* implementation
  242140             :       /*! \brief container of names of variables or container indices used used in the traversal
  242141             :           to access AST successor nodes overridden in every class by *generated* implementation */
  242142             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  242143             : 
  242144             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  242145             :        // than all the vector copies. The implementation for these functions is generated for each class.
  242146             :       /*! \brief return number of children in the traversal successor list */
  242147             :           virtual size_t get_numberOfTraversalSuccessors() override;
  242148             :       /*! \brief index-based access to traversal successors by index number */
  242149             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  242150             :       /*! \brief index-based access to traversal successors by child node */
  242151             :           virtual size_t get_childIndex(SgNode *child) override;
  242152             : 
  242153             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  242154             :        // MS: 08/16/2002 method for generating RTI information
  242155             :       /*! \brief return C++ Runtime-Time-Information */
  242156             :           virtual RTIReturnType roseRTI() override;
  242157             : #endif
  242158             :       /* */
  242159             : 
  242160             : 
  242161             : 
  242162             :       /* name Deprecated Functions
  242163             :           \brief Deprecated functions ... incomplete-documentation
  242164             : 
  242165             :           These functions have been deprecated from use.
  242166             :        */
  242167             :       /* */
  242168             : 
  242169             :       /*! returns a C style string (char*) representing the class name */
  242170             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  242171             : 
  242172             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  242173             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  242174             : #if 0
  242175             :       /*! returns old style Sage II enum values */
  242176             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  242177             :       /*! returns old style Sage II enum values */
  242178             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  242179             : #endif
  242180             :       /* */
  242181             : 
  242182             : 
  242183             : 
  242184             : 
  242185             :      public:
  242186             :       /* name Traversal Support Functions
  242187             :           \brief Traversal support functions ... incomplete-documentation
  242188             : 
  242189             :           These functions have been made public as part of the design, but they are suggested for internal use 
  242190             :           or by particularly knowledgable users for specialized tools or applications.
  242191             :        */
  242192             :       /* */
  242193             : 
  242194             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  242195             :        // (inferior to ROSE traversal mechanism, experimental).
  242196             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  242197             :        */
  242198             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  242199             : 
  242200             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  242201             :       /*! \brief support for the classic visitor pattern done in GoF */
  242202             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  242203             : 
  242204             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  242205             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  242206             :        */
  242207             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  242208             : 
  242209             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  242210             :        */
  242211             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  242212             : 
  242213             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  242214             :        // This traversal helps support internal tools that call static member functions.
  242215             :        // note: this function operates on the memory pools.
  242216             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  242217             :        */
  242218             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  242219             :       /* */
  242220             : 
  242221             : 
  242222             :      public:
  242223             :       /* name Memory Allocation Functions
  242224             :           \brief Memory allocations functions ... incomplete-documentation
  242225             : 
  242226             :           These functions have been made public as part of the design, but they are suggested for internal use 
  242227             :           or by particularly knowledgable users for specialized tools or applications.
  242228             :        */
  242229             :       /* */
  242230             : 
  242231             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  242232             : 
  242233             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  242234             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  242235             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  242236             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  242237             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  242238             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  242239             :           being used with the AST File I/O mechanism.
  242240             :        */
  242241             :           virtual bool isInMemoryPool() override;
  242242             : 
  242243             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  242244             : 
  242245             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  242246             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  242247             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  242248             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  242249             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  242250             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  242251             :           being used with the AST File I/O mechanism.
  242252             :        */
  242253             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  242254             : 
  242255             :       // DQ (4/30/2006): Modified to be a const function.
  242256             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  242257             : 
  242258             :           This functions is part of general support for many possible tools to operate 
  242259             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  242260             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  242261             :           less than the set of pointers used by the AST file I/O. This is part of
  242262             :           work implemented by Andreas, and support tools such as the AST graph generation.
  242263             : 
  242264             :           \warning This function can return unexpected data members and thus the 
  242265             :                    order and the number of elements is unpredicable and subject 
  242266             :                    to change.
  242267             : 
  242268             :           \returns STL vector of pairs of SgNode* and strings
  242269             :        */
  242270             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  242271             : 
  242272             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  242273             : 
  242274             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  242275             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  242276             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  242277             : 
  242278             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  242279             :                    and subject to change.
  242280             :        */
  242281             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  242282             : 
  242283             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  242284             : 
  242285             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  242286             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  242287             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  242288             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  242289             : 
  242290             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  242291             : 
  242292             :           \returns long
  242293             :        */
  242294             :           virtual long getChildIndex( SgNode* childNode ) const override;
  242295             : 
  242296             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  242297             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  242298             :       /* \brief Constructor for use by AST File I/O Mechanism
  242299             : 
  242300             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  242301             :           which obtained via fast binary file I/O from disk.
  242302             :        */
  242303             :        // SgGreaterThanOp( SgGreaterThanOpStorageClass& source );
  242304             : 
  242305             : 
  242306             : 
  242307             : 
  242308             : 
  242309             :  // JH (10/24/2005): methods added to support the ast file IO
  242310             :     private:
  242311             : 
  242312             :       /* name AST Memory Allocation Support Functions
  242313             :           \brief Memory allocations support....
  242314             : 
  242315             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  242316             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  242317             :           and support the AST File I/O Mechanism.
  242318             :        */
  242319             :       /* */
  242320             : 
  242321             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  242322             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  242323             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  242324             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  242325             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  242326             :           a correspinding one in the AST_FILE_IO class!
  242327             :        */
  242328             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  242329             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  242330             :       /* \brief Typedef used for low level memory access.
  242331             :        */
  242332             :        // typedef unsigned char* TestType;
  242333             : 
  242334             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  242335             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  242336             :       /* \brief Typedef used to hold memory addresses as values.
  242337             :        */
  242338             :        // typedef unsigned long  AddressType;
  242339             : 
  242340             : 
  242341             : 
  242342             :        // necessary, to have direct access to the p_freepointer and the private methods !
  242343             :       /*! \brief friend class declaration to support AST File I/O */
  242344             :           friend class AST_FILE_IO;
  242345             : 
  242346             :       /*! \brief friend class declaration to support AST File I/O */
  242347             :           friend class SgGreaterThanOpStorageClass;
  242348             : 
  242349             :       /*! \brief friend class declaration to support AST File I/O */
  242350             :           friend class AstSpecificDataManagingClass;
  242351             : 
  242352             :       /*! \brief friend class declaration to support AST File I/O */
  242353             :           friend class AstSpecificDataManagingClassStorageClass;
  242354             :     public:
  242355             :       /*! \brief IR node constructor to support AST File I/O */
  242356             :           SgGreaterThanOp( const SgGreaterThanOpStorageClass& source );
  242357             : 
  242358             :  // private: // JJW hack
  242359             :        /*
  242360             :           name AST Memory Allocation Support Variables
  242361             :           Memory allocations support variables 
  242362             : 
  242363             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  242364             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  242365             :           and support the AST File I/O Mechanism.
  242366             :        */
  242367             :       /* */
  242368             : 
  242369             :     public:
  242370             : 
  242371             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  242372             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  242373             :       // virtual SgNode* addRegExpAttribute();
  242374             :       /*! \brief Support for AST matching using regular expression.
  242375             : 
  242376             :           This support is incomplete and the subject of current research to define 
  242377             :           RegEx trees to support inexact matching.
  242378             :        */
  242379             :           SgGreaterThanOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  242380             : 
  242381             : // *** COMMON CODE SECTION ENDS HERE ***
  242382             : 
  242383             : 
  242384             : // End of memberFunctionString
  242385             : // Start of memberFunctionString
  242386             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  242387             : 
  242388             :      // the generated cast function
  242389             :      // friend ROSE_DLL_API SgGreaterThanOp* isSgGreaterThanOp ( SgNode* s );
  242390             : 
  242391             :           typedef SgBinaryOp base_node_type;
  242392             : 
  242393             : 
  242394             : // End of memberFunctionString
  242395             : // Start of memberFunctionString
  242396             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242397             : 
  242398             :           void post_construction_initialization() override;
  242399             : 
  242400             : 
  242401             : // End of memberFunctionString
  242402             : // Start of memberFunctionString
  242403             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242404             : 
  242405           0 :           int precedence() const override { return 10; }
  242406             : 
  242407             : 
  242408             : // End of memberFunctionString
  242409             : 
  242410             : 
  242411             :      public: 
  242412             :          virtual ~SgGreaterThanOp();
  242413             : 
  242414             : 
  242415             :      public: 
  242416             :          SgGreaterThanOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  242417             :          SgGreaterThanOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  242418             : 
  242419             :     protected:
  242420             : 
  242421             :     friend struct Rose::Traits::generated::describe_node_t<SgGreaterThanOp>;
  242422             : 
  242423             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242424             : 
  242425             : 
  242426             :    };
  242427             : #endif
  242428             : 
  242429             : // postdeclarations for SgGreaterThanOp
  242430             : 
  242431             : /* #line 242432 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242432             : 
  242433             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  242434             : 
  242435             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242436             : 
  242437             : 
  242438             : /* #line 242439 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242439             : 
  242440             : 
  242441             : 
  242442             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242443             : 
  242444             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  242445             : //      This code is automatically generated for each 
  242446             : //      terminal and non-terminal within the defined 
  242447             : //      grammar.  There is a simple way to change the 
  242448             : //      code to fix bugs etc.  See the ROSE README file
  242449             : //      for directions.
  242450             : 
  242451             : // tps: (02/22/2010): Adding DLL export requirements
  242452             : #include "rosedll.h"
  242453             : 
  242454             : // predeclarations for SgNotEqualOp
  242455             : 
  242456             : /* #line 242457 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242457             : 
  242458             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  242459             : 
  242460             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242461             : 
  242462             : #if 1
  242463             : // Class Definition for SgNotEqualOp
  242464             : class ROSE_DLL_API SgNotEqualOp  : public SgBinaryOp
  242465             :    {
  242466             :      public:
  242467             : 
  242468             : 
  242469             : /* #line 242470 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242470             : 
  242471             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  242472             : // Start of memberFunctionString
  242473             : /* #line 839 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242474             : 
  242475             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242476             : 
  242477             :        // DQ (6/20/2006): Used for all relational operators
  242478             :           virtual SgType* get_type() const override;
  242479             : 
  242480             : 
  242481             : 
  242482             : 
  242483             : // End of memberFunctionString
  242484             : // Start of memberFunctionString
  242485             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  242486             : 
  242487             : // *** COMMON CODE SECTION BEGINS HERE ***
  242488             : 
  242489             :     public:
  242490             : 
  242491             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  242492             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  242493             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  242494             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  242495             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  242496             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  242497             : 
  242498             :       /*! \brief returns a string representing the class name */
  242499             :           virtual std::string class_name() const override;
  242500             : 
  242501             :       /*! \brief returns new style SageIII enum values */
  242502             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  242503             : 
  242504             :       /*! \brief static variant value */
  242505             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  242506             :        // static const VariantT static_variant = V_SgNotEqualOp;
  242507             :           enum { static_variant = V_SgNotEqualOp };
  242508             : 
  242509             :        /* the generated cast function */
  242510             :       /*! \brief Casts pointer from base class to derived class */
  242511             :           ROSE_DLL_API friend       SgNotEqualOp* isSgNotEqualOp(       SgNode * s );
  242512             : 
  242513             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  242514             :           ROSE_DLL_API friend const SgNotEqualOp* isSgNotEqualOp( const SgNode * s );
  242515             : 
  242516             :      // ******************************************
  242517             :      // * Memory Pool / New / Delete
  242518             :      // ******************************************
  242519             : 
  242520             :      public:
  242521             :           /// \private
  242522             :           static const unsigned pool_size; //
  242523             :           /// \private
  242524             :           static std::vector<unsigned char *> pools; //
  242525             :           /// \private
  242526             :           static SgNotEqualOp * next_node; // 
  242527             : 
  242528             :           /// \private
  242529             :           static unsigned long initializeStorageClassArray(SgNotEqualOpStorageClass *); //
  242530             : 
  242531             :           /// \private
  242532             :           static void clearMemoryPool(); //
  242533             :           static void deleteMemoryPool(); //
  242534             : 
  242535             :           /// \private
  242536             :           static void extendMemoryPoolForFileIO(); //
  242537             : 
  242538             :           /// \private
  242539             :           static SgNotEqualOp * getPointerFromGlobalIndex(unsigned long); //
  242540             :           /// \private
  242541             :           static SgNotEqualOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  242542             : 
  242543             :           /// \private
  242544             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  242545             :           /// \private
  242546             :           static void resetValidFreepointers(); //
  242547             :           /// \private
  242548             :           static unsigned long getNumberOfLastValidPointer(); //
  242549             : 
  242550             : 
  242551             : #if defined(INLINE_FUNCTIONS)
  242552             :       /*! \brief returns pointer to newly allocated IR node */
  242553             :           inline void *operator new (size_t size);
  242554             : #else
  242555             :       /*! \brief returns pointer to newly allocated IR node */
  242556             :           void *operator new (size_t size);
  242557             : #endif
  242558             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  242559             :           void operator delete (void* pointer, size_t size);
  242560             : 
  242561             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  242562         206 :           void operator delete (void* pointer)
  242563             :              {
  242564             :             // This is the generated delete operator...
  242565         206 :                SgNotEqualOp::operator delete (pointer,sizeof(SgNotEqualOp));
  242566             :              }
  242567             : 
  242568             :       /*! \brief Returns the total number of IR nodes of this type */
  242569             :           static size_t numberOfNodes();
  242570             : 
  242571             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  242572             :           static size_t memoryUsage();
  242573             : 
  242574             :       // End of scope which started in IR nodes specific code 
  242575             :       /* */
  242576             : 
  242577             :       /* name Internal Functions
  242578             :           \brief Internal functions ... incomplete-documentation
  242579             : 
  242580             :           These functions have been made public as part of the design, but they are suggested for internal use 
  242581             :           or by particularly knowledgeable users for specialized tools or applications.
  242582             : 
  242583             :           \internal We could not make these private because they are required by user for special purposes. And 
  242584             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  242585             :          
  242586             :        */
  242587             : 
  242588             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  242589             :        // overridden in every class by *generated* implementation
  242590             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  242591             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  242592             :        // MS: 06/28/02 container of names of variables or container indices 
  242593             :        // used used in the traversal to access AST successor nodes
  242594             :        // overridden in every class by *generated* implementation
  242595             :       /*! \brief container of names of variables or container indices used used in the traversal
  242596             :           to access AST successor nodes overridden in every class by *generated* implementation */
  242597             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  242598             : 
  242599             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  242600             :        // than all the vector copies. The implementation for these functions is generated for each class.
  242601             :       /*! \brief return number of children in the traversal successor list */
  242602             :           virtual size_t get_numberOfTraversalSuccessors() override;
  242603             :       /*! \brief index-based access to traversal successors by index number */
  242604             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  242605             :       /*! \brief index-based access to traversal successors by child node */
  242606             :           virtual size_t get_childIndex(SgNode *child) override;
  242607             : 
  242608             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  242609             :        // MS: 08/16/2002 method for generating RTI information
  242610             :       /*! \brief return C++ Runtime-Time-Information */
  242611             :           virtual RTIReturnType roseRTI() override;
  242612             : #endif
  242613             :       /* */
  242614             : 
  242615             : 
  242616             : 
  242617             :       /* name Deprecated Functions
  242618             :           \brief Deprecated functions ... incomplete-documentation
  242619             : 
  242620             :           These functions have been deprecated from use.
  242621             :        */
  242622             :       /* */
  242623             : 
  242624             :       /*! returns a C style string (char*) representing the class name */
  242625             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  242626             : 
  242627             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  242628             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  242629             : #if 0
  242630             :       /*! returns old style Sage II enum values */
  242631             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  242632             :       /*! returns old style Sage II enum values */
  242633             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  242634             : #endif
  242635             :       /* */
  242636             : 
  242637             : 
  242638             : 
  242639             : 
  242640             :      public:
  242641             :       /* name Traversal Support Functions
  242642             :           \brief Traversal support functions ... incomplete-documentation
  242643             : 
  242644             :           These functions have been made public as part of the design, but they are suggested for internal use 
  242645             :           or by particularly knowledgable users for specialized tools or applications.
  242646             :        */
  242647             :       /* */
  242648             : 
  242649             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  242650             :        // (inferior to ROSE traversal mechanism, experimental).
  242651             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  242652             :        */
  242653             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  242654             : 
  242655             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  242656             :       /*! \brief support for the classic visitor pattern done in GoF */
  242657             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  242658             : 
  242659             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  242660             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  242661             :        */
  242662             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  242663             : 
  242664             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  242665             :        */
  242666             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  242667             : 
  242668             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  242669             :        // This traversal helps support internal tools that call static member functions.
  242670             :        // note: this function operates on the memory pools.
  242671             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  242672             :        */
  242673             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  242674             :       /* */
  242675             : 
  242676             : 
  242677             :      public:
  242678             :       /* name Memory Allocation Functions
  242679             :           \brief Memory allocations functions ... incomplete-documentation
  242680             : 
  242681             :           These functions have been made public as part of the design, but they are suggested for internal use 
  242682             :           or by particularly knowledgable users for specialized tools or applications.
  242683             :        */
  242684             :       /* */
  242685             : 
  242686             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  242687             : 
  242688             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  242689             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  242690             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  242691             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  242692             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  242693             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  242694             :           being used with the AST File I/O mechanism.
  242695             :        */
  242696             :           virtual bool isInMemoryPool() override;
  242697             : 
  242698             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  242699             : 
  242700             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  242701             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  242702             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  242703             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  242704             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  242705             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  242706             :           being used with the AST File I/O mechanism.
  242707             :        */
  242708             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  242709             : 
  242710             :       // DQ (4/30/2006): Modified to be a const function.
  242711             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  242712             : 
  242713             :           This functions is part of general support for many possible tools to operate 
  242714             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  242715             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  242716             :           less than the set of pointers used by the AST file I/O. This is part of
  242717             :           work implemented by Andreas, and support tools such as the AST graph generation.
  242718             : 
  242719             :           \warning This function can return unexpected data members and thus the 
  242720             :                    order and the number of elements is unpredicable and subject 
  242721             :                    to change.
  242722             : 
  242723             :           \returns STL vector of pairs of SgNode* and strings
  242724             :        */
  242725             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  242726             : 
  242727             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  242728             : 
  242729             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  242730             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  242731             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  242732             : 
  242733             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  242734             :                    and subject to change.
  242735             :        */
  242736             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  242737             : 
  242738             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  242739             : 
  242740             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  242741             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  242742             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  242743             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  242744             : 
  242745             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  242746             : 
  242747             :           \returns long
  242748             :        */
  242749             :           virtual long getChildIndex( SgNode* childNode ) const override;
  242750             : 
  242751             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  242752             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  242753             :       /* \brief Constructor for use by AST File I/O Mechanism
  242754             : 
  242755             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  242756             :           which obtained via fast binary file I/O from disk.
  242757             :        */
  242758             :        // SgNotEqualOp( SgNotEqualOpStorageClass& source );
  242759             : 
  242760             : 
  242761             : 
  242762             : 
  242763             : 
  242764             :  // JH (10/24/2005): methods added to support the ast file IO
  242765             :     private:
  242766             : 
  242767             :       /* name AST Memory Allocation Support Functions
  242768             :           \brief Memory allocations support....
  242769             : 
  242770             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  242771             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  242772             :           and support the AST File I/O Mechanism.
  242773             :        */
  242774             :       /* */
  242775             : 
  242776             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  242777             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  242778             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  242779             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  242780             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  242781             :           a correspinding one in the AST_FILE_IO class!
  242782             :        */
  242783             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  242784             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  242785             :       /* \brief Typedef used for low level memory access.
  242786             :        */
  242787             :        // typedef unsigned char* TestType;
  242788             : 
  242789             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  242790             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  242791             :       /* \brief Typedef used to hold memory addresses as values.
  242792             :        */
  242793             :        // typedef unsigned long  AddressType;
  242794             : 
  242795             : 
  242796             : 
  242797             :        // necessary, to have direct access to the p_freepointer and the private methods !
  242798             :       /*! \brief friend class declaration to support AST File I/O */
  242799             :           friend class AST_FILE_IO;
  242800             : 
  242801             :       /*! \brief friend class declaration to support AST File I/O */
  242802             :           friend class SgNotEqualOpStorageClass;
  242803             : 
  242804             :       /*! \brief friend class declaration to support AST File I/O */
  242805             :           friend class AstSpecificDataManagingClass;
  242806             : 
  242807             :       /*! \brief friend class declaration to support AST File I/O */
  242808             :           friend class AstSpecificDataManagingClassStorageClass;
  242809             :     public:
  242810             :       /*! \brief IR node constructor to support AST File I/O */
  242811             :           SgNotEqualOp( const SgNotEqualOpStorageClass& source );
  242812             : 
  242813             :  // private: // JJW hack
  242814             :        /*
  242815             :           name AST Memory Allocation Support Variables
  242816             :           Memory allocations support variables 
  242817             : 
  242818             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  242819             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  242820             :           and support the AST File I/O Mechanism.
  242821             :        */
  242822             :       /* */
  242823             : 
  242824             :     public:
  242825             : 
  242826             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  242827             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  242828             :       // virtual SgNode* addRegExpAttribute();
  242829             :       /*! \brief Support for AST matching using regular expression.
  242830             : 
  242831             :           This support is incomplete and the subject of current research to define 
  242832             :           RegEx trees to support inexact matching.
  242833             :        */
  242834             :           SgNotEqualOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  242835             : 
  242836             : // *** COMMON CODE SECTION ENDS HERE ***
  242837             : 
  242838             : 
  242839             : // End of memberFunctionString
  242840             : // Start of memberFunctionString
  242841             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  242842             : 
  242843             :      // the generated cast function
  242844             :      // friend ROSE_DLL_API SgNotEqualOp* isSgNotEqualOp ( SgNode* s );
  242845             : 
  242846             :           typedef SgBinaryOp base_node_type;
  242847             : 
  242848             : 
  242849             : // End of memberFunctionString
  242850             : // Start of memberFunctionString
  242851             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242852             : 
  242853             :           void post_construction_initialization() override;
  242854             : 
  242855             : 
  242856             : // End of memberFunctionString
  242857             : // Start of memberFunctionString
  242858             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242859             : 
  242860           0 :           int precedence() const override { return  9; }
  242861             : 
  242862             : 
  242863             : // End of memberFunctionString
  242864             : 
  242865             : 
  242866             :      public: 
  242867             :          virtual ~SgNotEqualOp();
  242868             : 
  242869             : 
  242870             :      public: 
  242871             :          SgNotEqualOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  242872             :          SgNotEqualOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  242873             : 
  242874             :     protected:
  242875             : 
  242876             :     friend struct Rose::Traits::generated::describe_node_t<SgNotEqualOp>;
  242877             : 
  242878             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242879             : 
  242880             : 
  242881             :    };
  242882             : #endif
  242883             : 
  242884             : // postdeclarations for SgNotEqualOp
  242885             : 
  242886             : /* #line 242887 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242887             : 
  242888             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  242889             : 
  242890             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242891             : 
  242892             : 
  242893             : /* #line 242894 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242894             : 
  242895             : 
  242896             : 
  242897             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242898             : 
  242899             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  242900             : //      This code is automatically generated for each 
  242901             : //      terminal and non-terminal within the defined 
  242902             : //      grammar.  There is a simple way to change the 
  242903             : //      code to fix bugs etc.  See the ROSE README file
  242904             : //      for directions.
  242905             : 
  242906             : // tps: (02/22/2010): Adding DLL export requirements
  242907             : #include "rosedll.h"
  242908             : 
  242909             : // predeclarations for SgLessOrEqualOp
  242910             : 
  242911             : /* #line 242912 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242912             : 
  242913             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  242914             : 
  242915             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  242916             : 
  242917             : #if 1
  242918             : // Class Definition for SgLessOrEqualOp
  242919             : class ROSE_DLL_API SgLessOrEqualOp  : public SgBinaryOp
  242920             :    {
  242921             :      public:
  242922             : 
  242923             : 
  242924             : /* #line 242925 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  242925             : 
  242926             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  242927             : // Start of memberFunctionString
  242928             : /* #line 843 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242929             : 
  242930             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  242931             : 
  242932             :        // DQ (6/20/2006): Used for all relational operators
  242933             :           virtual SgType* get_type() const override;
  242934             : 
  242935             : 
  242936             : 
  242937             : 
  242938             : // End of memberFunctionString
  242939             : // Start of memberFunctionString
  242940             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  242941             : 
  242942             : // *** COMMON CODE SECTION BEGINS HERE ***
  242943             : 
  242944             :     public:
  242945             : 
  242946             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  242947             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  242948             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  242949             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  242950             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  242951             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  242952             : 
  242953             :       /*! \brief returns a string representing the class name */
  242954             :           virtual std::string class_name() const override;
  242955             : 
  242956             :       /*! \brief returns new style SageIII enum values */
  242957             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  242958             : 
  242959             :       /*! \brief static variant value */
  242960             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  242961             :        // static const VariantT static_variant = V_SgLessOrEqualOp;
  242962             :           enum { static_variant = V_SgLessOrEqualOp };
  242963             : 
  242964             :        /* the generated cast function */
  242965             :       /*! \brief Casts pointer from base class to derived class */
  242966             :           ROSE_DLL_API friend       SgLessOrEqualOp* isSgLessOrEqualOp(       SgNode * s );
  242967             : 
  242968             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  242969             :           ROSE_DLL_API friend const SgLessOrEqualOp* isSgLessOrEqualOp( const SgNode * s );
  242970             : 
  242971             :      // ******************************************
  242972             :      // * Memory Pool / New / Delete
  242973             :      // ******************************************
  242974             : 
  242975             :      public:
  242976             :           /// \private
  242977             :           static const unsigned pool_size; //
  242978             :           /// \private
  242979             :           static std::vector<unsigned char *> pools; //
  242980             :           /// \private
  242981             :           static SgLessOrEqualOp * next_node; // 
  242982             : 
  242983             :           /// \private
  242984             :           static unsigned long initializeStorageClassArray(SgLessOrEqualOpStorageClass *); //
  242985             : 
  242986             :           /// \private
  242987             :           static void clearMemoryPool(); //
  242988             :           static void deleteMemoryPool(); //
  242989             : 
  242990             :           /// \private
  242991             :           static void extendMemoryPoolForFileIO(); //
  242992             : 
  242993             :           /// \private
  242994             :           static SgLessOrEqualOp * getPointerFromGlobalIndex(unsigned long); //
  242995             :           /// \private
  242996             :           static SgLessOrEqualOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  242997             : 
  242998             :           /// \private
  242999             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  243000             :           /// \private
  243001             :           static void resetValidFreepointers(); //
  243002             :           /// \private
  243003             :           static unsigned long getNumberOfLastValidPointer(); //
  243004             : 
  243005             : 
  243006             : #if defined(INLINE_FUNCTIONS)
  243007             :       /*! \brief returns pointer to newly allocated IR node */
  243008             :           inline void *operator new (size_t size);
  243009             : #else
  243010             :       /*! \brief returns pointer to newly allocated IR node */
  243011             :           void *operator new (size_t size);
  243012             : #endif
  243013             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  243014             :           void operator delete (void* pointer, size_t size);
  243015             : 
  243016             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  243017          62 :           void operator delete (void* pointer)
  243018             :              {
  243019             :             // This is the generated delete operator...
  243020          62 :                SgLessOrEqualOp::operator delete (pointer,sizeof(SgLessOrEqualOp));
  243021             :              }
  243022             : 
  243023             :       /*! \brief Returns the total number of IR nodes of this type */
  243024             :           static size_t numberOfNodes();
  243025             : 
  243026             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  243027             :           static size_t memoryUsage();
  243028             : 
  243029             :       // End of scope which started in IR nodes specific code 
  243030             :       /* */
  243031             : 
  243032             :       /* name Internal Functions
  243033             :           \brief Internal functions ... incomplete-documentation
  243034             : 
  243035             :           These functions have been made public as part of the design, but they are suggested for internal use 
  243036             :           or by particularly knowledgeable users for specialized tools or applications.
  243037             : 
  243038             :           \internal We could not make these private because they are required by user for special purposes. And 
  243039             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  243040             :          
  243041             :        */
  243042             : 
  243043             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  243044             :        // overridden in every class by *generated* implementation
  243045             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  243046             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  243047             :        // MS: 06/28/02 container of names of variables or container indices 
  243048             :        // used used in the traversal to access AST successor nodes
  243049             :        // overridden in every class by *generated* implementation
  243050             :       /*! \brief container of names of variables or container indices used used in the traversal
  243051             :           to access AST successor nodes overridden in every class by *generated* implementation */
  243052             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  243053             : 
  243054             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  243055             :        // than all the vector copies. The implementation for these functions is generated for each class.
  243056             :       /*! \brief return number of children in the traversal successor list */
  243057             :           virtual size_t get_numberOfTraversalSuccessors() override;
  243058             :       /*! \brief index-based access to traversal successors by index number */
  243059             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  243060             :       /*! \brief index-based access to traversal successors by child node */
  243061             :           virtual size_t get_childIndex(SgNode *child) override;
  243062             : 
  243063             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  243064             :        // MS: 08/16/2002 method for generating RTI information
  243065             :       /*! \brief return C++ Runtime-Time-Information */
  243066             :           virtual RTIReturnType roseRTI() override;
  243067             : #endif
  243068             :       /* */
  243069             : 
  243070             : 
  243071             : 
  243072             :       /* name Deprecated Functions
  243073             :           \brief Deprecated functions ... incomplete-documentation
  243074             : 
  243075             :           These functions have been deprecated from use.
  243076             :        */
  243077             :       /* */
  243078             : 
  243079             :       /*! returns a C style string (char*) representing the class name */
  243080             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  243081             : 
  243082             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  243083             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  243084             : #if 0
  243085             :       /*! returns old style Sage II enum values */
  243086             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  243087             :       /*! returns old style Sage II enum values */
  243088             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  243089             : #endif
  243090             :       /* */
  243091             : 
  243092             : 
  243093             : 
  243094             : 
  243095             :      public:
  243096             :       /* name Traversal Support Functions
  243097             :           \brief Traversal support functions ... incomplete-documentation
  243098             : 
  243099             :           These functions have been made public as part of the design, but they are suggested for internal use 
  243100             :           or by particularly knowledgable users for specialized tools or applications.
  243101             :        */
  243102             :       /* */
  243103             : 
  243104             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  243105             :        // (inferior to ROSE traversal mechanism, experimental).
  243106             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  243107             :        */
  243108             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  243109             : 
  243110             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  243111             :       /*! \brief support for the classic visitor pattern done in GoF */
  243112             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  243113             : 
  243114             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  243115             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  243116             :        */
  243117             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  243118             : 
  243119             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  243120             :        */
  243121             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  243122             : 
  243123             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  243124             :        // This traversal helps support internal tools that call static member functions.
  243125             :        // note: this function operates on the memory pools.
  243126             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  243127             :        */
  243128             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  243129             :       /* */
  243130             : 
  243131             : 
  243132             :      public:
  243133             :       /* name Memory Allocation Functions
  243134             :           \brief Memory allocations functions ... incomplete-documentation
  243135             : 
  243136             :           These functions have been made public as part of the design, but they are suggested for internal use 
  243137             :           or by particularly knowledgable users for specialized tools or applications.
  243138             :        */
  243139             :       /* */
  243140             : 
  243141             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  243142             : 
  243143             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  243144             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  243145             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  243146             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  243147             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  243148             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  243149             :           being used with the AST File I/O mechanism.
  243150             :        */
  243151             :           virtual bool isInMemoryPool() override;
  243152             : 
  243153             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  243154             : 
  243155             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  243156             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  243157             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  243158             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  243159             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  243160             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  243161             :           being used with the AST File I/O mechanism.
  243162             :        */
  243163             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  243164             : 
  243165             :       // DQ (4/30/2006): Modified to be a const function.
  243166             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  243167             : 
  243168             :           This functions is part of general support for many possible tools to operate 
  243169             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  243170             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  243171             :           less than the set of pointers used by the AST file I/O. This is part of
  243172             :           work implemented by Andreas, and support tools such as the AST graph generation.
  243173             : 
  243174             :           \warning This function can return unexpected data members and thus the 
  243175             :                    order and the number of elements is unpredicable and subject 
  243176             :                    to change.
  243177             : 
  243178             :           \returns STL vector of pairs of SgNode* and strings
  243179             :        */
  243180             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  243181             : 
  243182             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  243183             : 
  243184             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  243185             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  243186             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  243187             : 
  243188             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  243189             :                    and subject to change.
  243190             :        */
  243191             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  243192             : 
  243193             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  243194             : 
  243195             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  243196             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  243197             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  243198             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  243199             : 
  243200             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  243201             : 
  243202             :           \returns long
  243203             :        */
  243204             :           virtual long getChildIndex( SgNode* childNode ) const override;
  243205             : 
  243206             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  243207             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  243208             :       /* \brief Constructor for use by AST File I/O Mechanism
  243209             : 
  243210             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  243211             :           which obtained via fast binary file I/O from disk.
  243212             :        */
  243213             :        // SgLessOrEqualOp( SgLessOrEqualOpStorageClass& source );
  243214             : 
  243215             : 
  243216             : 
  243217             : 
  243218             : 
  243219             :  // JH (10/24/2005): methods added to support the ast file IO
  243220             :     private:
  243221             : 
  243222             :       /* name AST Memory Allocation Support Functions
  243223             :           \brief Memory allocations support....
  243224             : 
  243225             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  243226             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  243227             :           and support the AST File I/O Mechanism.
  243228             :        */
  243229             :       /* */
  243230             : 
  243231             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  243232             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  243233             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  243234             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  243235             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  243236             :           a correspinding one in the AST_FILE_IO class!
  243237             :        */
  243238             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  243239             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  243240             :       /* \brief Typedef used for low level memory access.
  243241             :        */
  243242             :        // typedef unsigned char* TestType;
  243243             : 
  243244             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  243245             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  243246             :       /* \brief Typedef used to hold memory addresses as values.
  243247             :        */
  243248             :        // typedef unsigned long  AddressType;
  243249             : 
  243250             : 
  243251             : 
  243252             :        // necessary, to have direct access to the p_freepointer and the private methods !
  243253             :       /*! \brief friend class declaration to support AST File I/O */
  243254             :           friend class AST_FILE_IO;
  243255             : 
  243256             :       /*! \brief friend class declaration to support AST File I/O */
  243257             :           friend class SgLessOrEqualOpStorageClass;
  243258             : 
  243259             :       /*! \brief friend class declaration to support AST File I/O */
  243260             :           friend class AstSpecificDataManagingClass;
  243261             : 
  243262             :       /*! \brief friend class declaration to support AST File I/O */
  243263             :           friend class AstSpecificDataManagingClassStorageClass;
  243264             :     public:
  243265             :       /*! \brief IR node constructor to support AST File I/O */
  243266             :           SgLessOrEqualOp( const SgLessOrEqualOpStorageClass& source );
  243267             : 
  243268             :  // private: // JJW hack
  243269             :        /*
  243270             :           name AST Memory Allocation Support Variables
  243271             :           Memory allocations support variables 
  243272             : 
  243273             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  243274             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  243275             :           and support the AST File I/O Mechanism.
  243276             :        */
  243277             :       /* */
  243278             : 
  243279             :     public:
  243280             : 
  243281             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  243282             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  243283             :       // virtual SgNode* addRegExpAttribute();
  243284             :       /*! \brief Support for AST matching using regular expression.
  243285             : 
  243286             :           This support is incomplete and the subject of current research to define 
  243287             :           RegEx trees to support inexact matching.
  243288             :        */
  243289             :           SgLessOrEqualOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  243290             : 
  243291             : // *** COMMON CODE SECTION ENDS HERE ***
  243292             : 
  243293             : 
  243294             : // End of memberFunctionString
  243295             : // Start of memberFunctionString
  243296             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  243297             : 
  243298             :      // the generated cast function
  243299             :      // friend ROSE_DLL_API SgLessOrEqualOp* isSgLessOrEqualOp ( SgNode* s );
  243300             : 
  243301             :           typedef SgBinaryOp base_node_type;
  243302             : 
  243303             : 
  243304             : // End of memberFunctionString
  243305             : // Start of memberFunctionString
  243306             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  243307             : 
  243308             :           void post_construction_initialization() override;
  243309             : 
  243310             : 
  243311             : // End of memberFunctionString
  243312             : // Start of memberFunctionString
  243313             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  243314             : 
  243315           0 :           int precedence() const override { return 10; }
  243316             : 
  243317             : 
  243318             : // End of memberFunctionString
  243319             : 
  243320             : 
  243321             :      public: 
  243322             :          virtual ~SgLessOrEqualOp();
  243323             : 
  243324             : 
  243325             :      public: 
  243326             :          SgLessOrEqualOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  243327             :          SgLessOrEqualOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  243328             : 
  243329             :     protected:
  243330             : 
  243331             :     friend struct Rose::Traits::generated::describe_node_t<SgLessOrEqualOp>;
  243332             : 
  243333             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243334             : 
  243335             : 
  243336             :    };
  243337             : #endif
  243338             : 
  243339             : // postdeclarations for SgLessOrEqualOp
  243340             : 
  243341             : /* #line 243342 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243342             : 
  243343             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  243344             : 
  243345             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243346             : 
  243347             : 
  243348             : /* #line 243349 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243349             : 
  243350             : 
  243351             : 
  243352             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243353             : 
  243354             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  243355             : //      This code is automatically generated for each 
  243356             : //      terminal and non-terminal within the defined 
  243357             : //      grammar.  There is a simple way to change the 
  243358             : //      code to fix bugs etc.  See the ROSE README file
  243359             : //      for directions.
  243360             : 
  243361             : // tps: (02/22/2010): Adding DLL export requirements
  243362             : #include "rosedll.h"
  243363             : 
  243364             : // predeclarations for SgGreaterOrEqualOp
  243365             : 
  243366             : /* #line 243367 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243367             : 
  243368             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  243369             : 
  243370             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243371             : 
  243372             : #if 1
  243373             : // Class Definition for SgGreaterOrEqualOp
  243374             : class ROSE_DLL_API SgGreaterOrEqualOp  : public SgBinaryOp
  243375             :    {
  243376             :      public:
  243377             : 
  243378             : 
  243379             : /* #line 243380 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243380             : 
  243381             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  243382             : // Start of memberFunctionString
  243383             : /* #line 847 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  243384             : 
  243385             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  243386             : 
  243387             :        // DQ (6/20/2006): Used for all relational operators
  243388             :           virtual SgType* get_type() const override;
  243389             : 
  243390             : 
  243391             : 
  243392             : 
  243393             : // End of memberFunctionString
  243394             : // Start of memberFunctionString
  243395             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  243396             : 
  243397             : // *** COMMON CODE SECTION BEGINS HERE ***
  243398             : 
  243399             :     public:
  243400             : 
  243401             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  243402             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  243403             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  243404             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  243405             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  243406             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  243407             : 
  243408             :       /*! \brief returns a string representing the class name */
  243409             :           virtual std::string class_name() const override;
  243410             : 
  243411             :       /*! \brief returns new style SageIII enum values */
  243412             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  243413             : 
  243414             :       /*! \brief static variant value */
  243415             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  243416             :        // static const VariantT static_variant = V_SgGreaterOrEqualOp;
  243417             :           enum { static_variant = V_SgGreaterOrEqualOp };
  243418             : 
  243419             :        /* the generated cast function */
  243420             :       /*! \brief Casts pointer from base class to derived class */
  243421             :           ROSE_DLL_API friend       SgGreaterOrEqualOp* isSgGreaterOrEqualOp(       SgNode * s );
  243422             : 
  243423             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  243424             :           ROSE_DLL_API friend const SgGreaterOrEqualOp* isSgGreaterOrEqualOp( const SgNode * s );
  243425             : 
  243426             :      // ******************************************
  243427             :      // * Memory Pool / New / Delete
  243428             :      // ******************************************
  243429             : 
  243430             :      public:
  243431             :           /// \private
  243432             :           static const unsigned pool_size; //
  243433             :           /// \private
  243434             :           static std::vector<unsigned char *> pools; //
  243435             :           /// \private
  243436             :           static SgGreaterOrEqualOp * next_node; // 
  243437             : 
  243438             :           /// \private
  243439             :           static unsigned long initializeStorageClassArray(SgGreaterOrEqualOpStorageClass *); //
  243440             : 
  243441             :           /// \private
  243442             :           static void clearMemoryPool(); //
  243443             :           static void deleteMemoryPool(); //
  243444             : 
  243445             :           /// \private
  243446             :           static void extendMemoryPoolForFileIO(); //
  243447             : 
  243448             :           /// \private
  243449             :           static SgGreaterOrEqualOp * getPointerFromGlobalIndex(unsigned long); //
  243450             :           /// \private
  243451             :           static SgGreaterOrEqualOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  243452             : 
  243453             :           /// \private
  243454             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  243455             :           /// \private
  243456             :           static void resetValidFreepointers(); //
  243457             :           /// \private
  243458             :           static unsigned long getNumberOfLastValidPointer(); //
  243459             : 
  243460             : 
  243461             : #if defined(INLINE_FUNCTIONS)
  243462             :       /*! \brief returns pointer to newly allocated IR node */
  243463             :           inline void *operator new (size_t size);
  243464             : #else
  243465             :       /*! \brief returns pointer to newly allocated IR node */
  243466             :           void *operator new (size_t size);
  243467             : #endif
  243468             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  243469             :           void operator delete (void* pointer, size_t size);
  243470             : 
  243471             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  243472          56 :           void operator delete (void* pointer)
  243473             :              {
  243474             :             // This is the generated delete operator...
  243475          56 :                SgGreaterOrEqualOp::operator delete (pointer,sizeof(SgGreaterOrEqualOp));
  243476             :              }
  243477             : 
  243478             :       /*! \brief Returns the total number of IR nodes of this type */
  243479             :           static size_t numberOfNodes();
  243480             : 
  243481             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  243482             :           static size_t memoryUsage();
  243483             : 
  243484             :       // End of scope which started in IR nodes specific code 
  243485             :       /* */
  243486             : 
  243487             :       /* name Internal Functions
  243488             :           \brief Internal functions ... incomplete-documentation
  243489             : 
  243490             :           These functions have been made public as part of the design, but they are suggested for internal use 
  243491             :           or by particularly knowledgeable users for specialized tools or applications.
  243492             : 
  243493             :           \internal We could not make these private because they are required by user for special purposes. And 
  243494             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  243495             :          
  243496             :        */
  243497             : 
  243498             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  243499             :        // overridden in every class by *generated* implementation
  243500             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  243501             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  243502             :        // MS: 06/28/02 container of names of variables or container indices 
  243503             :        // used used in the traversal to access AST successor nodes
  243504             :        // overridden in every class by *generated* implementation
  243505             :       /*! \brief container of names of variables or container indices used used in the traversal
  243506             :           to access AST successor nodes overridden in every class by *generated* implementation */
  243507             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  243508             : 
  243509             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  243510             :        // than all the vector copies. The implementation for these functions is generated for each class.
  243511             :       /*! \brief return number of children in the traversal successor list */
  243512             :           virtual size_t get_numberOfTraversalSuccessors() override;
  243513             :       /*! \brief index-based access to traversal successors by index number */
  243514             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  243515             :       /*! \brief index-based access to traversal successors by child node */
  243516             :           virtual size_t get_childIndex(SgNode *child) override;
  243517             : 
  243518             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  243519             :        // MS: 08/16/2002 method for generating RTI information
  243520             :       /*! \brief return C++ Runtime-Time-Information */
  243521             :           virtual RTIReturnType roseRTI() override;
  243522             : #endif
  243523             :       /* */
  243524             : 
  243525             : 
  243526             : 
  243527             :       /* name Deprecated Functions
  243528             :           \brief Deprecated functions ... incomplete-documentation
  243529             : 
  243530             :           These functions have been deprecated from use.
  243531             :        */
  243532             :       /* */
  243533             : 
  243534             :       /*! returns a C style string (char*) representing the class name */
  243535             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  243536             : 
  243537             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  243538             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  243539             : #if 0
  243540             :       /*! returns old style Sage II enum values */
  243541             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  243542             :       /*! returns old style Sage II enum values */
  243543             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  243544             : #endif
  243545             :       /* */
  243546             : 
  243547             : 
  243548             : 
  243549             : 
  243550             :      public:
  243551             :       /* name Traversal Support Functions
  243552             :           \brief Traversal support functions ... incomplete-documentation
  243553             : 
  243554             :           These functions have been made public as part of the design, but they are suggested for internal use 
  243555             :           or by particularly knowledgable users for specialized tools or applications.
  243556             :        */
  243557             :       /* */
  243558             : 
  243559             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  243560             :        // (inferior to ROSE traversal mechanism, experimental).
  243561             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  243562             :        */
  243563             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  243564             : 
  243565             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  243566             :       /*! \brief support for the classic visitor pattern done in GoF */
  243567             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  243568             : 
  243569             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  243570             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  243571             :        */
  243572             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  243573             : 
  243574             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  243575             :        */
  243576             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  243577             : 
  243578             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  243579             :        // This traversal helps support internal tools that call static member functions.
  243580             :        // note: this function operates on the memory pools.
  243581             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  243582             :        */
  243583             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  243584             :       /* */
  243585             : 
  243586             : 
  243587             :      public:
  243588             :       /* name Memory Allocation Functions
  243589             :           \brief Memory allocations functions ... incomplete-documentation
  243590             : 
  243591             :           These functions have been made public as part of the design, but they are suggested for internal use 
  243592             :           or by particularly knowledgable users for specialized tools or applications.
  243593             :        */
  243594             :       /* */
  243595             : 
  243596             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  243597             : 
  243598             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  243599             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  243600             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  243601             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  243602             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  243603             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  243604             :           being used with the AST File I/O mechanism.
  243605             :        */
  243606             :           virtual bool isInMemoryPool() override;
  243607             : 
  243608             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  243609             : 
  243610             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  243611             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  243612             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  243613             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  243614             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  243615             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  243616             :           being used with the AST File I/O mechanism.
  243617             :        */
  243618             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  243619             : 
  243620             :       // DQ (4/30/2006): Modified to be a const function.
  243621             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  243622             : 
  243623             :           This functions is part of general support for many possible tools to operate 
  243624             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  243625             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  243626             :           less than the set of pointers used by the AST file I/O. This is part of
  243627             :           work implemented by Andreas, and support tools such as the AST graph generation.
  243628             : 
  243629             :           \warning This function can return unexpected data members and thus the 
  243630             :                    order and the number of elements is unpredicable and subject 
  243631             :                    to change.
  243632             : 
  243633             :           \returns STL vector of pairs of SgNode* and strings
  243634             :        */
  243635             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  243636             : 
  243637             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  243638             : 
  243639             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  243640             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  243641             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  243642             : 
  243643             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  243644             :                    and subject to change.
  243645             :        */
  243646             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  243647             : 
  243648             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  243649             : 
  243650             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  243651             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  243652             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  243653             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  243654             : 
  243655             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  243656             : 
  243657             :           \returns long
  243658             :        */
  243659             :           virtual long getChildIndex( SgNode* childNode ) const override;
  243660             : 
  243661             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  243662             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  243663             :       /* \brief Constructor for use by AST File I/O Mechanism
  243664             : 
  243665             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  243666             :           which obtained via fast binary file I/O from disk.
  243667             :        */
  243668             :        // SgGreaterOrEqualOp( SgGreaterOrEqualOpStorageClass& source );
  243669             : 
  243670             : 
  243671             : 
  243672             : 
  243673             : 
  243674             :  // JH (10/24/2005): methods added to support the ast file IO
  243675             :     private:
  243676             : 
  243677             :       /* name AST Memory Allocation Support Functions
  243678             :           \brief Memory allocations support....
  243679             : 
  243680             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  243681             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  243682             :           and support the AST File I/O Mechanism.
  243683             :        */
  243684             :       /* */
  243685             : 
  243686             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  243687             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  243688             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  243689             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  243690             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  243691             :           a correspinding one in the AST_FILE_IO class!
  243692             :        */
  243693             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  243694             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  243695             :       /* \brief Typedef used for low level memory access.
  243696             :        */
  243697             :        // typedef unsigned char* TestType;
  243698             : 
  243699             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  243700             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  243701             :       /* \brief Typedef used to hold memory addresses as values.
  243702             :        */
  243703             :        // typedef unsigned long  AddressType;
  243704             : 
  243705             : 
  243706             : 
  243707             :        // necessary, to have direct access to the p_freepointer and the private methods !
  243708             :       /*! \brief friend class declaration to support AST File I/O */
  243709             :           friend class AST_FILE_IO;
  243710             : 
  243711             :       /*! \brief friend class declaration to support AST File I/O */
  243712             :           friend class SgGreaterOrEqualOpStorageClass;
  243713             : 
  243714             :       /*! \brief friend class declaration to support AST File I/O */
  243715             :           friend class AstSpecificDataManagingClass;
  243716             : 
  243717             :       /*! \brief friend class declaration to support AST File I/O */
  243718             :           friend class AstSpecificDataManagingClassStorageClass;
  243719             :     public:
  243720             :       /*! \brief IR node constructor to support AST File I/O */
  243721             :           SgGreaterOrEqualOp( const SgGreaterOrEqualOpStorageClass& source );
  243722             : 
  243723             :  // private: // JJW hack
  243724             :        /*
  243725             :           name AST Memory Allocation Support Variables
  243726             :           Memory allocations support variables 
  243727             : 
  243728             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  243729             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  243730             :           and support the AST File I/O Mechanism.
  243731             :        */
  243732             :       /* */
  243733             : 
  243734             :     public:
  243735             : 
  243736             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  243737             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  243738             :       // virtual SgNode* addRegExpAttribute();
  243739             :       /*! \brief Support for AST matching using regular expression.
  243740             : 
  243741             :           This support is incomplete and the subject of current research to define 
  243742             :           RegEx trees to support inexact matching.
  243743             :        */
  243744             :           SgGreaterOrEqualOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  243745             : 
  243746             : // *** COMMON CODE SECTION ENDS HERE ***
  243747             : 
  243748             : 
  243749             : // End of memberFunctionString
  243750             : // Start of memberFunctionString
  243751             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  243752             : 
  243753             :      // the generated cast function
  243754             :      // friend ROSE_DLL_API SgGreaterOrEqualOp* isSgGreaterOrEqualOp ( SgNode* s );
  243755             : 
  243756             :           typedef SgBinaryOp base_node_type;
  243757             : 
  243758             : 
  243759             : // End of memberFunctionString
  243760             : // Start of memberFunctionString
  243761             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  243762             : 
  243763             :           void post_construction_initialization() override;
  243764             : 
  243765             : 
  243766             : // End of memberFunctionString
  243767             : // Start of memberFunctionString
  243768             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  243769             : 
  243770           0 :           int precedence() const override { return 10; }
  243771             : 
  243772             : 
  243773             : // End of memberFunctionString
  243774             : 
  243775             : 
  243776             :      public: 
  243777             :          virtual ~SgGreaterOrEqualOp();
  243778             : 
  243779             : 
  243780             :      public: 
  243781             :          SgGreaterOrEqualOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  243782             :          SgGreaterOrEqualOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  243783             : 
  243784             :     protected:
  243785             : 
  243786             :     friend struct Rose::Traits::generated::describe_node_t<SgGreaterOrEqualOp>;
  243787             : 
  243788             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243789             : 
  243790             : 
  243791             :    };
  243792             : #endif
  243793             : 
  243794             : // postdeclarations for SgGreaterOrEqualOp
  243795             : 
  243796             : /* #line 243797 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243797             : 
  243798             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  243799             : 
  243800             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243801             : 
  243802             : 
  243803             : /* #line 243804 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243804             : 
  243805             : 
  243806             : 
  243807             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243808             : 
  243809             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  243810             : //      This code is automatically generated for each 
  243811             : //      terminal and non-terminal within the defined 
  243812             : //      grammar.  There is a simple way to change the 
  243813             : //      code to fix bugs etc.  See the ROSE README file
  243814             : //      for directions.
  243815             : 
  243816             : // tps: (02/22/2010): Adding DLL export requirements
  243817             : #include "rosedll.h"
  243818             : 
  243819             : // predeclarations for SgAddOp
  243820             : 
  243821             : /* #line 243822 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243822             : 
  243823             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  243824             : 
  243825             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  243826             : 
  243827             : #if 1
  243828             : // Class Definition for SgAddOp
  243829             : class ROSE_DLL_API SgAddOp  : public SgBinaryOp
  243830             :    {
  243831             :      public:
  243832             : 
  243833             : 
  243834             : /* #line 243835 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  243835             : 
  243836             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  243837             : // Start of memberFunctionString
  243838             : /* #line 852 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  243839             : 
  243840             : 
  243841             : 
  243842             : // End of memberFunctionString
  243843             : // Start of memberFunctionString
  243844             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  243845             : 
  243846             : // *** COMMON CODE SECTION BEGINS HERE ***
  243847             : 
  243848             :     public:
  243849             : 
  243850             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  243851             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  243852             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  243853             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  243854             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  243855             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  243856             : 
  243857             :       /*! \brief returns a string representing the class name */
  243858             :           virtual std::string class_name() const override;
  243859             : 
  243860             :       /*! \brief returns new style SageIII enum values */
  243861             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  243862             : 
  243863             :       /*! \brief static variant value */
  243864             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  243865             :        // static const VariantT static_variant = V_SgAddOp;
  243866             :           enum { static_variant = V_SgAddOp };
  243867             : 
  243868             :        /* the generated cast function */
  243869             :       /*! \brief Casts pointer from base class to derived class */
  243870             :           ROSE_DLL_API friend       SgAddOp* isSgAddOp(       SgNode * s );
  243871             : 
  243872             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  243873             :           ROSE_DLL_API friend const SgAddOp* isSgAddOp( const SgNode * s );
  243874             : 
  243875             :      // ******************************************
  243876             :      // * Memory Pool / New / Delete
  243877             :      // ******************************************
  243878             : 
  243879             :      public:
  243880             :           /// \private
  243881             :           static const unsigned pool_size; //
  243882             :           /// \private
  243883             :           static std::vector<unsigned char *> pools; //
  243884             :           /// \private
  243885             :           static SgAddOp * next_node; // 
  243886             : 
  243887             :           /// \private
  243888             :           static unsigned long initializeStorageClassArray(SgAddOpStorageClass *); //
  243889             : 
  243890             :           /// \private
  243891             :           static void clearMemoryPool(); //
  243892             :           static void deleteMemoryPool(); //
  243893             : 
  243894             :           /// \private
  243895             :           static void extendMemoryPoolForFileIO(); //
  243896             : 
  243897             :           /// \private
  243898             :           static SgAddOp * getPointerFromGlobalIndex(unsigned long); //
  243899             :           /// \private
  243900             :           static SgAddOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  243901             : 
  243902             :           /// \private
  243903             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  243904             :           /// \private
  243905             :           static void resetValidFreepointers(); //
  243906             :           /// \private
  243907             :           static unsigned long getNumberOfLastValidPointer(); //
  243908             : 
  243909             : 
  243910             : #if defined(INLINE_FUNCTIONS)
  243911             :       /*! \brief returns pointer to newly allocated IR node */
  243912             :           inline void *operator new (size_t size);
  243913             : #else
  243914             :       /*! \brief returns pointer to newly allocated IR node */
  243915             :           void *operator new (size_t size);
  243916             : #endif
  243917             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  243918             :           void operator delete (void* pointer, size_t size);
  243919             : 
  243920             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  243921         764 :           void operator delete (void* pointer)
  243922             :              {
  243923             :             // This is the generated delete operator...
  243924         764 :                SgAddOp::operator delete (pointer,sizeof(SgAddOp));
  243925             :              }
  243926             : 
  243927             :       /*! \brief Returns the total number of IR nodes of this type */
  243928             :           static size_t numberOfNodes();
  243929             : 
  243930             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  243931             :           static size_t memoryUsage();
  243932             : 
  243933             :       // End of scope which started in IR nodes specific code 
  243934             :       /* */
  243935             : 
  243936             :       /* name Internal Functions
  243937             :           \brief Internal functions ... incomplete-documentation
  243938             : 
  243939             :           These functions have been made public as part of the design, but they are suggested for internal use 
  243940             :           or by particularly knowledgeable users for specialized tools or applications.
  243941             : 
  243942             :           \internal We could not make these private because they are required by user for special purposes. And 
  243943             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  243944             :          
  243945             :        */
  243946             : 
  243947             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  243948             :        // overridden in every class by *generated* implementation
  243949             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  243950             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  243951             :        // MS: 06/28/02 container of names of variables or container indices 
  243952             :        // used used in the traversal to access AST successor nodes
  243953             :        // overridden in every class by *generated* implementation
  243954             :       /*! \brief container of names of variables or container indices used used in the traversal
  243955             :           to access AST successor nodes overridden in every class by *generated* implementation */
  243956             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  243957             : 
  243958             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  243959             :        // than all the vector copies. The implementation for these functions is generated for each class.
  243960             :       /*! \brief return number of children in the traversal successor list */
  243961             :           virtual size_t get_numberOfTraversalSuccessors() override;
  243962             :       /*! \brief index-based access to traversal successors by index number */
  243963             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  243964             :       /*! \brief index-based access to traversal successors by child node */
  243965             :           virtual size_t get_childIndex(SgNode *child) override;
  243966             : 
  243967             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  243968             :        // MS: 08/16/2002 method for generating RTI information
  243969             :       /*! \brief return C++ Runtime-Time-Information */
  243970             :           virtual RTIReturnType roseRTI() override;
  243971             : #endif
  243972             :       /* */
  243973             : 
  243974             : 
  243975             : 
  243976             :       /* name Deprecated Functions
  243977             :           \brief Deprecated functions ... incomplete-documentation
  243978             : 
  243979             :           These functions have been deprecated from use.
  243980             :        */
  243981             :       /* */
  243982             : 
  243983             :       /*! returns a C style string (char*) representing the class name */
  243984             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  243985             : 
  243986             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  243987             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  243988             : #if 0
  243989             :       /*! returns old style Sage II enum values */
  243990             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  243991             :       /*! returns old style Sage II enum values */
  243992             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  243993             : #endif
  243994             :       /* */
  243995             : 
  243996             : 
  243997             : 
  243998             : 
  243999             :      public:
  244000             :       /* name Traversal Support Functions
  244001             :           \brief Traversal support functions ... incomplete-documentation
  244002             : 
  244003             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244004             :           or by particularly knowledgable users for specialized tools or applications.
  244005             :        */
  244006             :       /* */
  244007             : 
  244008             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  244009             :        // (inferior to ROSE traversal mechanism, experimental).
  244010             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  244011             :        */
  244012             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  244013             : 
  244014             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  244015             :       /*! \brief support for the classic visitor pattern done in GoF */
  244016             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  244017             : 
  244018             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  244019             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  244020             :        */
  244021             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  244022             : 
  244023             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  244024             :        */
  244025             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  244026             : 
  244027             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  244028             :        // This traversal helps support internal tools that call static member functions.
  244029             :        // note: this function operates on the memory pools.
  244030             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  244031             :        */
  244032             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  244033             :       /* */
  244034             : 
  244035             : 
  244036             :      public:
  244037             :       /* name Memory Allocation Functions
  244038             :           \brief Memory allocations functions ... incomplete-documentation
  244039             : 
  244040             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244041             :           or by particularly knowledgable users for specialized tools or applications.
  244042             :        */
  244043             :       /* */
  244044             : 
  244045             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  244046             : 
  244047             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  244048             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  244049             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  244050             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  244051             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  244052             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  244053             :           being used with the AST File I/O mechanism.
  244054             :        */
  244055             :           virtual bool isInMemoryPool() override;
  244056             : 
  244057             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  244058             : 
  244059             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  244060             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  244061             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  244062             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  244063             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  244064             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  244065             :           being used with the AST File I/O mechanism.
  244066             :        */
  244067             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  244068             : 
  244069             :       // DQ (4/30/2006): Modified to be a const function.
  244070             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  244071             : 
  244072             :           This functions is part of general support for many possible tools to operate 
  244073             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  244074             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  244075             :           less than the set of pointers used by the AST file I/O. This is part of
  244076             :           work implemented by Andreas, and support tools such as the AST graph generation.
  244077             : 
  244078             :           \warning This function can return unexpected data members and thus the 
  244079             :                    order and the number of elements is unpredicable and subject 
  244080             :                    to change.
  244081             : 
  244082             :           \returns STL vector of pairs of SgNode* and strings
  244083             :        */
  244084             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  244085             : 
  244086             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  244087             : 
  244088             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  244089             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  244090             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  244091             : 
  244092             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  244093             :                    and subject to change.
  244094             :        */
  244095             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  244096             : 
  244097             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  244098             : 
  244099             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  244100             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  244101             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  244102             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  244103             : 
  244104             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  244105             : 
  244106             :           \returns long
  244107             :        */
  244108             :           virtual long getChildIndex( SgNode* childNode ) const override;
  244109             : 
  244110             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  244111             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  244112             :       /* \brief Constructor for use by AST File I/O Mechanism
  244113             : 
  244114             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  244115             :           which obtained via fast binary file I/O from disk.
  244116             :        */
  244117             :        // SgAddOp( SgAddOpStorageClass& source );
  244118             : 
  244119             : 
  244120             : 
  244121             : 
  244122             : 
  244123             :  // JH (10/24/2005): methods added to support the ast file IO
  244124             :     private:
  244125             : 
  244126             :       /* name AST Memory Allocation Support Functions
  244127             :           \brief Memory allocations support....
  244128             : 
  244129             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  244130             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  244131             :           and support the AST File I/O Mechanism.
  244132             :        */
  244133             :       /* */
  244134             : 
  244135             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  244136             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  244137             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  244138             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  244139             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  244140             :           a correspinding one in the AST_FILE_IO class!
  244141             :        */
  244142             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  244143             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  244144             :       /* \brief Typedef used for low level memory access.
  244145             :        */
  244146             :        // typedef unsigned char* TestType;
  244147             : 
  244148             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  244149             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  244150             :       /* \brief Typedef used to hold memory addresses as values.
  244151             :        */
  244152             :        // typedef unsigned long  AddressType;
  244153             : 
  244154             : 
  244155             : 
  244156             :        // necessary, to have direct access to the p_freepointer and the private methods !
  244157             :       /*! \brief friend class declaration to support AST File I/O */
  244158             :           friend class AST_FILE_IO;
  244159             : 
  244160             :       /*! \brief friend class declaration to support AST File I/O */
  244161             :           friend class SgAddOpStorageClass;
  244162             : 
  244163             :       /*! \brief friend class declaration to support AST File I/O */
  244164             :           friend class AstSpecificDataManagingClass;
  244165             : 
  244166             :       /*! \brief friend class declaration to support AST File I/O */
  244167             :           friend class AstSpecificDataManagingClassStorageClass;
  244168             :     public:
  244169             :       /*! \brief IR node constructor to support AST File I/O */
  244170             :           SgAddOp( const SgAddOpStorageClass& source );
  244171             : 
  244172             :  // private: // JJW hack
  244173             :        /*
  244174             :           name AST Memory Allocation Support Variables
  244175             :           Memory allocations support variables 
  244176             : 
  244177             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  244178             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  244179             :           and support the AST File I/O Mechanism.
  244180             :        */
  244181             :       /* */
  244182             : 
  244183             :     public:
  244184             : 
  244185             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  244186             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  244187             :       // virtual SgNode* addRegExpAttribute();
  244188             :       /*! \brief Support for AST matching using regular expression.
  244189             : 
  244190             :           This support is incomplete and the subject of current research to define 
  244191             :           RegEx trees to support inexact matching.
  244192             :        */
  244193             :           SgAddOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  244194             : 
  244195             : // *** COMMON CODE SECTION ENDS HERE ***
  244196             : 
  244197             : 
  244198             : // End of memberFunctionString
  244199             : // Start of memberFunctionString
  244200             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  244201             : 
  244202             :      // the generated cast function
  244203             :      // friend ROSE_DLL_API SgAddOp* isSgAddOp ( SgNode* s );
  244204             : 
  244205             :           typedef SgBinaryOp base_node_type;
  244206             : 
  244207             : 
  244208             : // End of memberFunctionString
  244209             : // Start of memberFunctionString
  244210             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  244211             : 
  244212             :           void post_construction_initialization() override;
  244213             : 
  244214             : 
  244215             : // End of memberFunctionString
  244216             : // Start of memberFunctionString
  244217             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  244218             : 
  244219           0 :           int precedence() const override { return 12; }
  244220             : 
  244221             : 
  244222             : // End of memberFunctionString
  244223             : 
  244224             : 
  244225             :      public: 
  244226             :          virtual ~SgAddOp();
  244227             : 
  244228             : 
  244229             :      public: 
  244230             :          SgAddOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  244231             :          SgAddOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  244232             : 
  244233             :     protected:
  244234             : 
  244235             :     friend struct Rose::Traits::generated::describe_node_t<SgAddOp>;
  244236             : 
  244237             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244238             : 
  244239             : 
  244240             :    };
  244241             : #endif
  244242             : 
  244243             : // postdeclarations for SgAddOp
  244244             : 
  244245             : /* #line 244246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244246             : 
  244247             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  244248             : 
  244249             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244250             : 
  244251             : 
  244252             : /* #line 244253 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244253             : 
  244254             : 
  244255             : 
  244256             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244257             : 
  244258             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  244259             : //      This code is automatically generated for each 
  244260             : //      terminal and non-terminal within the defined 
  244261             : //      grammar.  There is a simple way to change the 
  244262             : //      code to fix bugs etc.  See the ROSE README file
  244263             : //      for directions.
  244264             : 
  244265             : // tps: (02/22/2010): Adding DLL export requirements
  244266             : #include "rosedll.h"
  244267             : 
  244268             : // predeclarations for SgSubtractOp
  244269             : 
  244270             : /* #line 244271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244271             : 
  244272             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  244273             : 
  244274             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244275             : 
  244276             : #if 1
  244277             : // Class Definition for SgSubtractOp
  244278             : class ROSE_DLL_API SgSubtractOp  : public SgBinaryOp
  244279             :    {
  244280             :      public:
  244281             : 
  244282             : 
  244283             : /* #line 244284 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244284             : 
  244285             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  244286             : // Start of memberFunctionString
  244287             : /* #line 855 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  244288             : 
  244289             : 
  244290             : 
  244291             : // End of memberFunctionString
  244292             : // Start of memberFunctionString
  244293             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  244294             : 
  244295             : // *** COMMON CODE SECTION BEGINS HERE ***
  244296             : 
  244297             :     public:
  244298             : 
  244299             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  244300             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  244301             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  244302             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  244303             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  244304             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  244305             : 
  244306             :       /*! \brief returns a string representing the class name */
  244307             :           virtual std::string class_name() const override;
  244308             : 
  244309             :       /*! \brief returns new style SageIII enum values */
  244310             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  244311             : 
  244312             :       /*! \brief static variant value */
  244313             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  244314             :        // static const VariantT static_variant = V_SgSubtractOp;
  244315             :           enum { static_variant = V_SgSubtractOp };
  244316             : 
  244317             :        /* the generated cast function */
  244318             :       /*! \brief Casts pointer from base class to derived class */
  244319             :           ROSE_DLL_API friend       SgSubtractOp* isSgSubtractOp(       SgNode * s );
  244320             : 
  244321             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  244322             :           ROSE_DLL_API friend const SgSubtractOp* isSgSubtractOp( const SgNode * s );
  244323             : 
  244324             :      // ******************************************
  244325             :      // * Memory Pool / New / Delete
  244326             :      // ******************************************
  244327             : 
  244328             :      public:
  244329             :           /// \private
  244330             :           static const unsigned pool_size; //
  244331             :           /// \private
  244332             :           static std::vector<unsigned char *> pools; //
  244333             :           /// \private
  244334             :           static SgSubtractOp * next_node; // 
  244335             : 
  244336             :           /// \private
  244337             :           static unsigned long initializeStorageClassArray(SgSubtractOpStorageClass *); //
  244338             : 
  244339             :           /// \private
  244340             :           static void clearMemoryPool(); //
  244341             :           static void deleteMemoryPool(); //
  244342             : 
  244343             :           /// \private
  244344             :           static void extendMemoryPoolForFileIO(); //
  244345             : 
  244346             :           /// \private
  244347             :           static SgSubtractOp * getPointerFromGlobalIndex(unsigned long); //
  244348             :           /// \private
  244349             :           static SgSubtractOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  244350             : 
  244351             :           /// \private
  244352             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  244353             :           /// \private
  244354             :           static void resetValidFreepointers(); //
  244355             :           /// \private
  244356             :           static unsigned long getNumberOfLastValidPointer(); //
  244357             : 
  244358             : 
  244359             : #if defined(INLINE_FUNCTIONS)
  244360             :       /*! \brief returns pointer to newly allocated IR node */
  244361             :           inline void *operator new (size_t size);
  244362             : #else
  244363             :       /*! \brief returns pointer to newly allocated IR node */
  244364             :           void *operator new (size_t size);
  244365             : #endif
  244366             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  244367             :           void operator delete (void* pointer, size_t size);
  244368             : 
  244369             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  244370         448 :           void operator delete (void* pointer)
  244371             :              {
  244372             :             // This is the generated delete operator...
  244373         448 :                SgSubtractOp::operator delete (pointer,sizeof(SgSubtractOp));
  244374             :              }
  244375             : 
  244376             :       /*! \brief Returns the total number of IR nodes of this type */
  244377             :           static size_t numberOfNodes();
  244378             : 
  244379             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  244380             :           static size_t memoryUsage();
  244381             : 
  244382             :       // End of scope which started in IR nodes specific code 
  244383             :       /* */
  244384             : 
  244385             :       /* name Internal Functions
  244386             :           \brief Internal functions ... incomplete-documentation
  244387             : 
  244388             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244389             :           or by particularly knowledgeable users for specialized tools or applications.
  244390             : 
  244391             :           \internal We could not make these private because they are required by user for special purposes. And 
  244392             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  244393             :          
  244394             :        */
  244395             : 
  244396             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  244397             :        // overridden in every class by *generated* implementation
  244398             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  244399             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  244400             :        // MS: 06/28/02 container of names of variables or container indices 
  244401             :        // used used in the traversal to access AST successor nodes
  244402             :        // overridden in every class by *generated* implementation
  244403             :       /*! \brief container of names of variables or container indices used used in the traversal
  244404             :           to access AST successor nodes overridden in every class by *generated* implementation */
  244405             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  244406             : 
  244407             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  244408             :        // than all the vector copies. The implementation for these functions is generated for each class.
  244409             :       /*! \brief return number of children in the traversal successor list */
  244410             :           virtual size_t get_numberOfTraversalSuccessors() override;
  244411             :       /*! \brief index-based access to traversal successors by index number */
  244412             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  244413             :       /*! \brief index-based access to traversal successors by child node */
  244414             :           virtual size_t get_childIndex(SgNode *child) override;
  244415             : 
  244416             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  244417             :        // MS: 08/16/2002 method for generating RTI information
  244418             :       /*! \brief return C++ Runtime-Time-Information */
  244419             :           virtual RTIReturnType roseRTI() override;
  244420             : #endif
  244421             :       /* */
  244422             : 
  244423             : 
  244424             : 
  244425             :       /* name Deprecated Functions
  244426             :           \brief Deprecated functions ... incomplete-documentation
  244427             : 
  244428             :           These functions have been deprecated from use.
  244429             :        */
  244430             :       /* */
  244431             : 
  244432             :       /*! returns a C style string (char*) representing the class name */
  244433             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  244434             : 
  244435             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  244436             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  244437             : #if 0
  244438             :       /*! returns old style Sage II enum values */
  244439             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  244440             :       /*! returns old style Sage II enum values */
  244441             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  244442             : #endif
  244443             :       /* */
  244444             : 
  244445             : 
  244446             : 
  244447             : 
  244448             :      public:
  244449             :       /* name Traversal Support Functions
  244450             :           \brief Traversal support functions ... incomplete-documentation
  244451             : 
  244452             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244453             :           or by particularly knowledgable users for specialized tools or applications.
  244454             :        */
  244455             :       /* */
  244456             : 
  244457             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  244458             :        // (inferior to ROSE traversal mechanism, experimental).
  244459             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  244460             :        */
  244461             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  244462             : 
  244463             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  244464             :       /*! \brief support for the classic visitor pattern done in GoF */
  244465             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  244466             : 
  244467             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  244468             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  244469             :        */
  244470             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  244471             : 
  244472             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  244473             :        */
  244474             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  244475             : 
  244476             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  244477             :        // This traversal helps support internal tools that call static member functions.
  244478             :        // note: this function operates on the memory pools.
  244479             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  244480             :        */
  244481             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  244482             :       /* */
  244483             : 
  244484             : 
  244485             :      public:
  244486             :       /* name Memory Allocation Functions
  244487             :           \brief Memory allocations functions ... incomplete-documentation
  244488             : 
  244489             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244490             :           or by particularly knowledgable users for specialized tools or applications.
  244491             :        */
  244492             :       /* */
  244493             : 
  244494             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  244495             : 
  244496             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  244497             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  244498             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  244499             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  244500             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  244501             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  244502             :           being used with the AST File I/O mechanism.
  244503             :        */
  244504             :           virtual bool isInMemoryPool() override;
  244505             : 
  244506             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  244507             : 
  244508             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  244509             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  244510             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  244511             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  244512             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  244513             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  244514             :           being used with the AST File I/O mechanism.
  244515             :        */
  244516             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  244517             : 
  244518             :       // DQ (4/30/2006): Modified to be a const function.
  244519             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  244520             : 
  244521             :           This functions is part of general support for many possible tools to operate 
  244522             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  244523             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  244524             :           less than the set of pointers used by the AST file I/O. This is part of
  244525             :           work implemented by Andreas, and support tools such as the AST graph generation.
  244526             : 
  244527             :           \warning This function can return unexpected data members and thus the 
  244528             :                    order and the number of elements is unpredicable and subject 
  244529             :                    to change.
  244530             : 
  244531             :           \returns STL vector of pairs of SgNode* and strings
  244532             :        */
  244533             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  244534             : 
  244535             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  244536             : 
  244537             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  244538             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  244539             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  244540             : 
  244541             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  244542             :                    and subject to change.
  244543             :        */
  244544             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  244545             : 
  244546             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  244547             : 
  244548             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  244549             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  244550             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  244551             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  244552             : 
  244553             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  244554             : 
  244555             :           \returns long
  244556             :        */
  244557             :           virtual long getChildIndex( SgNode* childNode ) const override;
  244558             : 
  244559             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  244560             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  244561             :       /* \brief Constructor for use by AST File I/O Mechanism
  244562             : 
  244563             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  244564             :           which obtained via fast binary file I/O from disk.
  244565             :        */
  244566             :        // SgSubtractOp( SgSubtractOpStorageClass& source );
  244567             : 
  244568             : 
  244569             : 
  244570             : 
  244571             : 
  244572             :  // JH (10/24/2005): methods added to support the ast file IO
  244573             :     private:
  244574             : 
  244575             :       /* name AST Memory Allocation Support Functions
  244576             :           \brief Memory allocations support....
  244577             : 
  244578             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  244579             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  244580             :           and support the AST File I/O Mechanism.
  244581             :        */
  244582             :       /* */
  244583             : 
  244584             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  244585             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  244586             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  244587             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  244588             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  244589             :           a correspinding one in the AST_FILE_IO class!
  244590             :        */
  244591             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  244592             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  244593             :       /* \brief Typedef used for low level memory access.
  244594             :        */
  244595             :        // typedef unsigned char* TestType;
  244596             : 
  244597             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  244598             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  244599             :       /* \brief Typedef used to hold memory addresses as values.
  244600             :        */
  244601             :        // typedef unsigned long  AddressType;
  244602             : 
  244603             : 
  244604             : 
  244605             :        // necessary, to have direct access to the p_freepointer and the private methods !
  244606             :       /*! \brief friend class declaration to support AST File I/O */
  244607             :           friend class AST_FILE_IO;
  244608             : 
  244609             :       /*! \brief friend class declaration to support AST File I/O */
  244610             :           friend class SgSubtractOpStorageClass;
  244611             : 
  244612             :       /*! \brief friend class declaration to support AST File I/O */
  244613             :           friend class AstSpecificDataManagingClass;
  244614             : 
  244615             :       /*! \brief friend class declaration to support AST File I/O */
  244616             :           friend class AstSpecificDataManagingClassStorageClass;
  244617             :     public:
  244618             :       /*! \brief IR node constructor to support AST File I/O */
  244619             :           SgSubtractOp( const SgSubtractOpStorageClass& source );
  244620             : 
  244621             :  // private: // JJW hack
  244622             :        /*
  244623             :           name AST Memory Allocation Support Variables
  244624             :           Memory allocations support variables 
  244625             : 
  244626             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  244627             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  244628             :           and support the AST File I/O Mechanism.
  244629             :        */
  244630             :       /* */
  244631             : 
  244632             :     public:
  244633             : 
  244634             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  244635             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  244636             :       // virtual SgNode* addRegExpAttribute();
  244637             :       /*! \brief Support for AST matching using regular expression.
  244638             : 
  244639             :           This support is incomplete and the subject of current research to define 
  244640             :           RegEx trees to support inexact matching.
  244641             :        */
  244642             :           SgSubtractOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  244643             : 
  244644             : // *** COMMON CODE SECTION ENDS HERE ***
  244645             : 
  244646             : 
  244647             : // End of memberFunctionString
  244648             : // Start of memberFunctionString
  244649             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  244650             : 
  244651             :      // the generated cast function
  244652             :      // friend ROSE_DLL_API SgSubtractOp* isSgSubtractOp ( SgNode* s );
  244653             : 
  244654             :           typedef SgBinaryOp base_node_type;
  244655             : 
  244656             : 
  244657             : // End of memberFunctionString
  244658             : // Start of memberFunctionString
  244659             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  244660             : 
  244661             :           void post_construction_initialization() override;
  244662             : 
  244663             : 
  244664             : // End of memberFunctionString
  244665             : // Start of memberFunctionString
  244666             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  244667             : 
  244668           0 :           int precedence() const override { return 12; }
  244669             : 
  244670             : 
  244671             : // End of memberFunctionString
  244672             : 
  244673             : 
  244674             :      public: 
  244675             :          virtual ~SgSubtractOp();
  244676             : 
  244677             : 
  244678             :      public: 
  244679             :          SgSubtractOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  244680             :          SgSubtractOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  244681             : 
  244682             :     protected:
  244683             : 
  244684             :     friend struct Rose::Traits::generated::describe_node_t<SgSubtractOp>;
  244685             : 
  244686             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244687             : 
  244688             : 
  244689             :    };
  244690             : #endif
  244691             : 
  244692             : // postdeclarations for SgSubtractOp
  244693             : 
  244694             : /* #line 244695 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244695             : 
  244696             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  244697             : 
  244698             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244699             : 
  244700             : 
  244701             : /* #line 244702 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244702             : 
  244703             : 
  244704             : 
  244705             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244706             : 
  244707             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  244708             : //      This code is automatically generated for each 
  244709             : //      terminal and non-terminal within the defined 
  244710             : //      grammar.  There is a simple way to change the 
  244711             : //      code to fix bugs etc.  See the ROSE README file
  244712             : //      for directions.
  244713             : 
  244714             : // tps: (02/22/2010): Adding DLL export requirements
  244715             : #include "rosedll.h"
  244716             : 
  244717             : // predeclarations for SgMultiplyOp
  244718             : 
  244719             : /* #line 244720 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244720             : 
  244721             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  244722             : 
  244723             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  244724             : 
  244725             : #if 1
  244726             : // Class Definition for SgMultiplyOp
  244727             : class ROSE_DLL_API SgMultiplyOp  : public SgBinaryOp
  244728             :    {
  244729             :      public:
  244730             : 
  244731             : 
  244732             : /* #line 244733 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  244733             : 
  244734             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  244735             : // Start of memberFunctionString
  244736             : /* #line 859 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  244737             : 
  244738             : 
  244739             : 
  244740             : // End of memberFunctionString
  244741             : // Start of memberFunctionString
  244742             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  244743             : 
  244744             : // *** COMMON CODE SECTION BEGINS HERE ***
  244745             : 
  244746             :     public:
  244747             : 
  244748             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  244749             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  244750             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  244751             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  244752             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  244753             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  244754             : 
  244755             :       /*! \brief returns a string representing the class name */
  244756             :           virtual std::string class_name() const override;
  244757             : 
  244758             :       /*! \brief returns new style SageIII enum values */
  244759             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  244760             : 
  244761             :       /*! \brief static variant value */
  244762             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  244763             :        // static const VariantT static_variant = V_SgMultiplyOp;
  244764             :           enum { static_variant = V_SgMultiplyOp };
  244765             : 
  244766             :        /* the generated cast function */
  244767             :       /*! \brief Casts pointer from base class to derived class */
  244768             :           ROSE_DLL_API friend       SgMultiplyOp* isSgMultiplyOp(       SgNode * s );
  244769             : 
  244770             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  244771             :           ROSE_DLL_API friend const SgMultiplyOp* isSgMultiplyOp( const SgNode * s );
  244772             : 
  244773             :      // ******************************************
  244774             :      // * Memory Pool / New / Delete
  244775             :      // ******************************************
  244776             : 
  244777             :      public:
  244778             :           /// \private
  244779             :           static const unsigned pool_size; //
  244780             :           /// \private
  244781             :           static std::vector<unsigned char *> pools; //
  244782             :           /// \private
  244783             :           static SgMultiplyOp * next_node; // 
  244784             : 
  244785             :           /// \private
  244786             :           static unsigned long initializeStorageClassArray(SgMultiplyOpStorageClass *); //
  244787             : 
  244788             :           /// \private
  244789             :           static void clearMemoryPool(); //
  244790             :           static void deleteMemoryPool(); //
  244791             : 
  244792             :           /// \private
  244793             :           static void extendMemoryPoolForFileIO(); //
  244794             : 
  244795             :           /// \private
  244796             :           static SgMultiplyOp * getPointerFromGlobalIndex(unsigned long); //
  244797             :           /// \private
  244798             :           static SgMultiplyOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  244799             : 
  244800             :           /// \private
  244801             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  244802             :           /// \private
  244803             :           static void resetValidFreepointers(); //
  244804             :           /// \private
  244805             :           static unsigned long getNumberOfLastValidPointer(); //
  244806             : 
  244807             : 
  244808             : #if defined(INLINE_FUNCTIONS)
  244809             :       /*! \brief returns pointer to newly allocated IR node */
  244810             :           inline void *operator new (size_t size);
  244811             : #else
  244812             :       /*! \brief returns pointer to newly allocated IR node */
  244813             :           void *operator new (size_t size);
  244814             : #endif
  244815             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  244816             :           void operator delete (void* pointer, size_t size);
  244817             : 
  244818             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  244819         373 :           void operator delete (void* pointer)
  244820             :              {
  244821             :             // This is the generated delete operator...
  244822         373 :                SgMultiplyOp::operator delete (pointer,sizeof(SgMultiplyOp));
  244823             :              }
  244824             : 
  244825             :       /*! \brief Returns the total number of IR nodes of this type */
  244826             :           static size_t numberOfNodes();
  244827             : 
  244828             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  244829             :           static size_t memoryUsage();
  244830             : 
  244831             :       // End of scope which started in IR nodes specific code 
  244832             :       /* */
  244833             : 
  244834             :       /* name Internal Functions
  244835             :           \brief Internal functions ... incomplete-documentation
  244836             : 
  244837             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244838             :           or by particularly knowledgeable users for specialized tools or applications.
  244839             : 
  244840             :           \internal We could not make these private because they are required by user for special purposes. And 
  244841             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  244842             :          
  244843             :        */
  244844             : 
  244845             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  244846             :        // overridden in every class by *generated* implementation
  244847             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  244848             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  244849             :        // MS: 06/28/02 container of names of variables or container indices 
  244850             :        // used used in the traversal to access AST successor nodes
  244851             :        // overridden in every class by *generated* implementation
  244852             :       /*! \brief container of names of variables or container indices used used in the traversal
  244853             :           to access AST successor nodes overridden in every class by *generated* implementation */
  244854             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  244855             : 
  244856             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  244857             :        // than all the vector copies. The implementation for these functions is generated for each class.
  244858             :       /*! \brief return number of children in the traversal successor list */
  244859             :           virtual size_t get_numberOfTraversalSuccessors() override;
  244860             :       /*! \brief index-based access to traversal successors by index number */
  244861             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  244862             :       /*! \brief index-based access to traversal successors by child node */
  244863             :           virtual size_t get_childIndex(SgNode *child) override;
  244864             : 
  244865             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  244866             :        // MS: 08/16/2002 method for generating RTI information
  244867             :       /*! \brief return C++ Runtime-Time-Information */
  244868             :           virtual RTIReturnType roseRTI() override;
  244869             : #endif
  244870             :       /* */
  244871             : 
  244872             : 
  244873             : 
  244874             :       /* name Deprecated Functions
  244875             :           \brief Deprecated functions ... incomplete-documentation
  244876             : 
  244877             :           These functions have been deprecated from use.
  244878             :        */
  244879             :       /* */
  244880             : 
  244881             :       /*! returns a C style string (char*) representing the class name */
  244882             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  244883             : 
  244884             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  244885             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  244886             : #if 0
  244887             :       /*! returns old style Sage II enum values */
  244888             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  244889             :       /*! returns old style Sage II enum values */
  244890             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  244891             : #endif
  244892             :       /* */
  244893             : 
  244894             : 
  244895             : 
  244896             : 
  244897             :      public:
  244898             :       /* name Traversal Support Functions
  244899             :           \brief Traversal support functions ... incomplete-documentation
  244900             : 
  244901             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244902             :           or by particularly knowledgable users for specialized tools or applications.
  244903             :        */
  244904             :       /* */
  244905             : 
  244906             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  244907             :        // (inferior to ROSE traversal mechanism, experimental).
  244908             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  244909             :        */
  244910             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  244911             : 
  244912             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  244913             :       /*! \brief support for the classic visitor pattern done in GoF */
  244914             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  244915             : 
  244916             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  244917             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  244918             :        */
  244919             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  244920             : 
  244921             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  244922             :        */
  244923             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  244924             : 
  244925             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  244926             :        // This traversal helps support internal tools that call static member functions.
  244927             :        // note: this function operates on the memory pools.
  244928             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  244929             :        */
  244930             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  244931             :       /* */
  244932             : 
  244933             : 
  244934             :      public:
  244935             :       /* name Memory Allocation Functions
  244936             :           \brief Memory allocations functions ... incomplete-documentation
  244937             : 
  244938             :           These functions have been made public as part of the design, but they are suggested for internal use 
  244939             :           or by particularly knowledgable users for specialized tools or applications.
  244940             :        */
  244941             :       /* */
  244942             : 
  244943             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  244944             : 
  244945             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  244946             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  244947             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  244948             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  244949             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  244950             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  244951             :           being used with the AST File I/O mechanism.
  244952             :        */
  244953             :           virtual bool isInMemoryPool() override;
  244954             : 
  244955             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  244956             : 
  244957             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  244958             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  244959             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  244960             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  244961             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  244962             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  244963             :           being used with the AST File I/O mechanism.
  244964             :        */
  244965             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  244966             : 
  244967             :       // DQ (4/30/2006): Modified to be a const function.
  244968             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  244969             : 
  244970             :           This functions is part of general support for many possible tools to operate 
  244971             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  244972             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  244973             :           less than the set of pointers used by the AST file I/O. This is part of
  244974             :           work implemented by Andreas, and support tools such as the AST graph generation.
  244975             : 
  244976             :           \warning This function can return unexpected data members and thus the 
  244977             :                    order and the number of elements is unpredicable and subject 
  244978             :                    to change.
  244979             : 
  244980             :           \returns STL vector of pairs of SgNode* and strings
  244981             :        */
  244982             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  244983             : 
  244984             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  244985             : 
  244986             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  244987             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  244988             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  244989             : 
  244990             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  244991             :                    and subject to change.
  244992             :        */
  244993             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  244994             : 
  244995             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  244996             : 
  244997             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  244998             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  244999             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  245000             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  245001             : 
  245002             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  245003             : 
  245004             :           \returns long
  245005             :        */
  245006             :           virtual long getChildIndex( SgNode* childNode ) const override;
  245007             : 
  245008             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  245009             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245010             :       /* \brief Constructor for use by AST File I/O Mechanism
  245011             : 
  245012             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  245013             :           which obtained via fast binary file I/O from disk.
  245014             :        */
  245015             :        // SgMultiplyOp( SgMultiplyOpStorageClass& source );
  245016             : 
  245017             : 
  245018             : 
  245019             : 
  245020             : 
  245021             :  // JH (10/24/2005): methods added to support the ast file IO
  245022             :     private:
  245023             : 
  245024             :       /* name AST Memory Allocation Support Functions
  245025             :           \brief Memory allocations support....
  245026             : 
  245027             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  245028             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  245029             :           and support the AST File I/O Mechanism.
  245030             :        */
  245031             :       /* */
  245032             : 
  245033             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  245034             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  245035             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  245036             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  245037             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  245038             :           a correspinding one in the AST_FILE_IO class!
  245039             :        */
  245040             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  245041             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245042             :       /* \brief Typedef used for low level memory access.
  245043             :        */
  245044             :        // typedef unsigned char* TestType;
  245045             : 
  245046             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  245047             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245048             :       /* \brief Typedef used to hold memory addresses as values.
  245049             :        */
  245050             :        // typedef unsigned long  AddressType;
  245051             : 
  245052             : 
  245053             : 
  245054             :        // necessary, to have direct access to the p_freepointer and the private methods !
  245055             :       /*! \brief friend class declaration to support AST File I/O */
  245056             :           friend class AST_FILE_IO;
  245057             : 
  245058             :       /*! \brief friend class declaration to support AST File I/O */
  245059             :           friend class SgMultiplyOpStorageClass;
  245060             : 
  245061             :       /*! \brief friend class declaration to support AST File I/O */
  245062             :           friend class AstSpecificDataManagingClass;
  245063             : 
  245064             :       /*! \brief friend class declaration to support AST File I/O */
  245065             :           friend class AstSpecificDataManagingClassStorageClass;
  245066             :     public:
  245067             :       /*! \brief IR node constructor to support AST File I/O */
  245068             :           SgMultiplyOp( const SgMultiplyOpStorageClass& source );
  245069             : 
  245070             :  // private: // JJW hack
  245071             :        /*
  245072             :           name AST Memory Allocation Support Variables
  245073             :           Memory allocations support variables 
  245074             : 
  245075             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  245076             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  245077             :           and support the AST File I/O Mechanism.
  245078             :        */
  245079             :       /* */
  245080             : 
  245081             :     public:
  245082             : 
  245083             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  245084             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  245085             :       // virtual SgNode* addRegExpAttribute();
  245086             :       /*! \brief Support for AST matching using regular expression.
  245087             : 
  245088             :           This support is incomplete and the subject of current research to define 
  245089             :           RegEx trees to support inexact matching.
  245090             :        */
  245091             :           SgMultiplyOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  245092             : 
  245093             : // *** COMMON CODE SECTION ENDS HERE ***
  245094             : 
  245095             : 
  245096             : // End of memberFunctionString
  245097             : // Start of memberFunctionString
  245098             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  245099             : 
  245100             :      // the generated cast function
  245101             :      // friend ROSE_DLL_API SgMultiplyOp* isSgMultiplyOp ( SgNode* s );
  245102             : 
  245103             :           typedef SgBinaryOp base_node_type;
  245104             : 
  245105             : 
  245106             : // End of memberFunctionString
  245107             : // Start of memberFunctionString
  245108             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  245109             : 
  245110             :           void post_construction_initialization() override;
  245111             : 
  245112             : 
  245113             : // End of memberFunctionString
  245114             : // Start of memberFunctionString
  245115             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  245116             : 
  245117           0 :           int precedence() const override { return 13; }
  245118             : 
  245119             : 
  245120             : // End of memberFunctionString
  245121             : 
  245122             : 
  245123             :      public: 
  245124             :          virtual ~SgMultiplyOp();
  245125             : 
  245126             : 
  245127             :      public: 
  245128             :          SgMultiplyOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  245129             :          SgMultiplyOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  245130             : 
  245131             :     protected:
  245132             : 
  245133             :     friend struct Rose::Traits::generated::describe_node_t<SgMultiplyOp>;
  245134             : 
  245135             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245136             : 
  245137             : 
  245138             :    };
  245139             : #endif
  245140             : 
  245141             : // postdeclarations for SgMultiplyOp
  245142             : 
  245143             : /* #line 245144 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245144             : 
  245145             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  245146             : 
  245147             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245148             : 
  245149             : 
  245150             : /* #line 245151 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245151             : 
  245152             : 
  245153             : 
  245154             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245155             : 
  245156             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  245157             : //      This code is automatically generated for each 
  245158             : //      terminal and non-terminal within the defined 
  245159             : //      grammar.  There is a simple way to change the 
  245160             : //      code to fix bugs etc.  See the ROSE README file
  245161             : //      for directions.
  245162             : 
  245163             : // tps: (02/22/2010): Adding DLL export requirements
  245164             : #include "rosedll.h"
  245165             : 
  245166             : // predeclarations for SgDivideOp
  245167             : 
  245168             : /* #line 245169 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245169             : 
  245170             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  245171             : 
  245172             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245173             : 
  245174             : #if 1
  245175             : // Class Definition for SgDivideOp
  245176             : class ROSE_DLL_API SgDivideOp  : public SgBinaryOp
  245177             :    {
  245178             :      public:
  245179             : 
  245180             : 
  245181             : /* #line 245182 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245182             : 
  245183             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  245184             : // Start of memberFunctionString
  245185             : /* #line 863 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  245186             : 
  245187             : 
  245188             : 
  245189             : // End of memberFunctionString
  245190             : // Start of memberFunctionString
  245191             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  245192             : 
  245193             : // *** COMMON CODE SECTION BEGINS HERE ***
  245194             : 
  245195             :     public:
  245196             : 
  245197             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  245198             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  245199             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  245200             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  245201             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  245202             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  245203             : 
  245204             :       /*! \brief returns a string representing the class name */
  245205             :           virtual std::string class_name() const override;
  245206             : 
  245207             :       /*! \brief returns new style SageIII enum values */
  245208             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  245209             : 
  245210             :       /*! \brief static variant value */
  245211             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  245212             :        // static const VariantT static_variant = V_SgDivideOp;
  245213             :           enum { static_variant = V_SgDivideOp };
  245214             : 
  245215             :        /* the generated cast function */
  245216             :       /*! \brief Casts pointer from base class to derived class */
  245217             :           ROSE_DLL_API friend       SgDivideOp* isSgDivideOp(       SgNode * s );
  245218             : 
  245219             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  245220             :           ROSE_DLL_API friend const SgDivideOp* isSgDivideOp( const SgNode * s );
  245221             : 
  245222             :      // ******************************************
  245223             :      // * Memory Pool / New / Delete
  245224             :      // ******************************************
  245225             : 
  245226             :      public:
  245227             :           /// \private
  245228             :           static const unsigned pool_size; //
  245229             :           /// \private
  245230             :           static std::vector<unsigned char *> pools; //
  245231             :           /// \private
  245232             :           static SgDivideOp * next_node; // 
  245233             : 
  245234             :           /// \private
  245235             :           static unsigned long initializeStorageClassArray(SgDivideOpStorageClass *); //
  245236             : 
  245237             :           /// \private
  245238             :           static void clearMemoryPool(); //
  245239             :           static void deleteMemoryPool(); //
  245240             : 
  245241             :           /// \private
  245242             :           static void extendMemoryPoolForFileIO(); //
  245243             : 
  245244             :           /// \private
  245245             :           static SgDivideOp * getPointerFromGlobalIndex(unsigned long); //
  245246             :           /// \private
  245247             :           static SgDivideOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  245248             : 
  245249             :           /// \private
  245250             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  245251             :           /// \private
  245252             :           static void resetValidFreepointers(); //
  245253             :           /// \private
  245254             :           static unsigned long getNumberOfLastValidPointer(); //
  245255             : 
  245256             : 
  245257             : #if defined(INLINE_FUNCTIONS)
  245258             :       /*! \brief returns pointer to newly allocated IR node */
  245259             :           inline void *operator new (size_t size);
  245260             : #else
  245261             :       /*! \brief returns pointer to newly allocated IR node */
  245262             :           void *operator new (size_t size);
  245263             : #endif
  245264             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  245265             :           void operator delete (void* pointer, size_t size);
  245266             : 
  245267             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  245268         276 :           void operator delete (void* pointer)
  245269             :              {
  245270             :             // This is the generated delete operator...
  245271         276 :                SgDivideOp::operator delete (pointer,sizeof(SgDivideOp));
  245272             :              }
  245273             : 
  245274             :       /*! \brief Returns the total number of IR nodes of this type */
  245275             :           static size_t numberOfNodes();
  245276             : 
  245277             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  245278             :           static size_t memoryUsage();
  245279             : 
  245280             :       // End of scope which started in IR nodes specific code 
  245281             :       /* */
  245282             : 
  245283             :       /* name Internal Functions
  245284             :           \brief Internal functions ... incomplete-documentation
  245285             : 
  245286             :           These functions have been made public as part of the design, but they are suggested for internal use 
  245287             :           or by particularly knowledgeable users for specialized tools or applications.
  245288             : 
  245289             :           \internal We could not make these private because they are required by user for special purposes. And 
  245290             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  245291             :          
  245292             :        */
  245293             : 
  245294             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  245295             :        // overridden in every class by *generated* implementation
  245296             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  245297             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  245298             :        // MS: 06/28/02 container of names of variables or container indices 
  245299             :        // used used in the traversal to access AST successor nodes
  245300             :        // overridden in every class by *generated* implementation
  245301             :       /*! \brief container of names of variables or container indices used used in the traversal
  245302             :           to access AST successor nodes overridden in every class by *generated* implementation */
  245303             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  245304             : 
  245305             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  245306             :        // than all the vector copies. The implementation for these functions is generated for each class.
  245307             :       /*! \brief return number of children in the traversal successor list */
  245308             :           virtual size_t get_numberOfTraversalSuccessors() override;
  245309             :       /*! \brief index-based access to traversal successors by index number */
  245310             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  245311             :       /*! \brief index-based access to traversal successors by child node */
  245312             :           virtual size_t get_childIndex(SgNode *child) override;
  245313             : 
  245314             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  245315             :        // MS: 08/16/2002 method for generating RTI information
  245316             :       /*! \brief return C++ Runtime-Time-Information */
  245317             :           virtual RTIReturnType roseRTI() override;
  245318             : #endif
  245319             :       /* */
  245320             : 
  245321             : 
  245322             : 
  245323             :       /* name Deprecated Functions
  245324             :           \brief Deprecated functions ... incomplete-documentation
  245325             : 
  245326             :           These functions have been deprecated from use.
  245327             :        */
  245328             :       /* */
  245329             : 
  245330             :       /*! returns a C style string (char*) representing the class name */
  245331             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  245332             : 
  245333             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  245334             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  245335             : #if 0
  245336             :       /*! returns old style Sage II enum values */
  245337             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  245338             :       /*! returns old style Sage II enum values */
  245339             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  245340             : #endif
  245341             :       /* */
  245342             : 
  245343             : 
  245344             : 
  245345             : 
  245346             :      public:
  245347             :       /* name Traversal Support Functions
  245348             :           \brief Traversal support functions ... incomplete-documentation
  245349             : 
  245350             :           These functions have been made public as part of the design, but they are suggested for internal use 
  245351             :           or by particularly knowledgable users for specialized tools or applications.
  245352             :        */
  245353             :       /* */
  245354             : 
  245355             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  245356             :        // (inferior to ROSE traversal mechanism, experimental).
  245357             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  245358             :        */
  245359             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  245360             : 
  245361             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  245362             :       /*! \brief support for the classic visitor pattern done in GoF */
  245363             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  245364             : 
  245365             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  245366             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  245367             :        */
  245368             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  245369             : 
  245370             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  245371             :        */
  245372             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  245373             : 
  245374             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  245375             :        // This traversal helps support internal tools that call static member functions.
  245376             :        // note: this function operates on the memory pools.
  245377             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  245378             :        */
  245379             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  245380             :       /* */
  245381             : 
  245382             : 
  245383             :      public:
  245384             :       /* name Memory Allocation Functions
  245385             :           \brief Memory allocations functions ... incomplete-documentation
  245386             : 
  245387             :           These functions have been made public as part of the design, but they are suggested for internal use 
  245388             :           or by particularly knowledgable users for specialized tools or applications.
  245389             :        */
  245390             :       /* */
  245391             : 
  245392             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  245393             : 
  245394             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  245395             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  245396             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  245397             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  245398             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  245399             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  245400             :           being used with the AST File I/O mechanism.
  245401             :        */
  245402             :           virtual bool isInMemoryPool() override;
  245403             : 
  245404             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  245405             : 
  245406             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  245407             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  245408             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  245409             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  245410             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  245411             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  245412             :           being used with the AST File I/O mechanism.
  245413             :        */
  245414             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  245415             : 
  245416             :       // DQ (4/30/2006): Modified to be a const function.
  245417             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  245418             : 
  245419             :           This functions is part of general support for many possible tools to operate 
  245420             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  245421             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  245422             :           less than the set of pointers used by the AST file I/O. This is part of
  245423             :           work implemented by Andreas, and support tools such as the AST graph generation.
  245424             : 
  245425             :           \warning This function can return unexpected data members and thus the 
  245426             :                    order and the number of elements is unpredicable and subject 
  245427             :                    to change.
  245428             : 
  245429             :           \returns STL vector of pairs of SgNode* and strings
  245430             :        */
  245431             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  245432             : 
  245433             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  245434             : 
  245435             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  245436             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  245437             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  245438             : 
  245439             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  245440             :                    and subject to change.
  245441             :        */
  245442             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  245443             : 
  245444             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  245445             : 
  245446             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  245447             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  245448             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  245449             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  245450             : 
  245451             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  245452             : 
  245453             :           \returns long
  245454             :        */
  245455             :           virtual long getChildIndex( SgNode* childNode ) const override;
  245456             : 
  245457             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  245458             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245459             :       /* \brief Constructor for use by AST File I/O Mechanism
  245460             : 
  245461             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  245462             :           which obtained via fast binary file I/O from disk.
  245463             :        */
  245464             :        // SgDivideOp( SgDivideOpStorageClass& source );
  245465             : 
  245466             : 
  245467             : 
  245468             : 
  245469             : 
  245470             :  // JH (10/24/2005): methods added to support the ast file IO
  245471             :     private:
  245472             : 
  245473             :       /* name AST Memory Allocation Support Functions
  245474             :           \brief Memory allocations support....
  245475             : 
  245476             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  245477             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  245478             :           and support the AST File I/O Mechanism.
  245479             :        */
  245480             :       /* */
  245481             : 
  245482             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  245483             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  245484             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  245485             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  245486             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  245487             :           a correspinding one in the AST_FILE_IO class!
  245488             :        */
  245489             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  245490             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245491             :       /* \brief Typedef used for low level memory access.
  245492             :        */
  245493             :        // typedef unsigned char* TestType;
  245494             : 
  245495             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  245496             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245497             :       /* \brief Typedef used to hold memory addresses as values.
  245498             :        */
  245499             :        // typedef unsigned long  AddressType;
  245500             : 
  245501             : 
  245502             : 
  245503             :        // necessary, to have direct access to the p_freepointer and the private methods !
  245504             :       /*! \brief friend class declaration to support AST File I/O */
  245505             :           friend class AST_FILE_IO;
  245506             : 
  245507             :       /*! \brief friend class declaration to support AST File I/O */
  245508             :           friend class SgDivideOpStorageClass;
  245509             : 
  245510             :       /*! \brief friend class declaration to support AST File I/O */
  245511             :           friend class AstSpecificDataManagingClass;
  245512             : 
  245513             :       /*! \brief friend class declaration to support AST File I/O */
  245514             :           friend class AstSpecificDataManagingClassStorageClass;
  245515             :     public:
  245516             :       /*! \brief IR node constructor to support AST File I/O */
  245517             :           SgDivideOp( const SgDivideOpStorageClass& source );
  245518             : 
  245519             :  // private: // JJW hack
  245520             :        /*
  245521             :           name AST Memory Allocation Support Variables
  245522             :           Memory allocations support variables 
  245523             : 
  245524             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  245525             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  245526             :           and support the AST File I/O Mechanism.
  245527             :        */
  245528             :       /* */
  245529             : 
  245530             :     public:
  245531             : 
  245532             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  245533             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  245534             :       // virtual SgNode* addRegExpAttribute();
  245535             :       /*! \brief Support for AST matching using regular expression.
  245536             : 
  245537             :           This support is incomplete and the subject of current research to define 
  245538             :           RegEx trees to support inexact matching.
  245539             :        */
  245540             :           SgDivideOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  245541             : 
  245542             : // *** COMMON CODE SECTION ENDS HERE ***
  245543             : 
  245544             : 
  245545             : // End of memberFunctionString
  245546             : // Start of memberFunctionString
  245547             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  245548             : 
  245549             :      // the generated cast function
  245550             :      // friend ROSE_DLL_API SgDivideOp* isSgDivideOp ( SgNode* s );
  245551             : 
  245552             :           typedef SgBinaryOp base_node_type;
  245553             : 
  245554             : 
  245555             : // End of memberFunctionString
  245556             : // Start of memberFunctionString
  245557             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  245558             : 
  245559             :           void post_construction_initialization() override;
  245560             : 
  245561             : 
  245562             : // End of memberFunctionString
  245563             : // Start of memberFunctionString
  245564             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  245565             : 
  245566           0 :           int precedence() const override { return 13; }
  245567             : 
  245568             : 
  245569             : // End of memberFunctionString
  245570             : 
  245571             : 
  245572             :      public: 
  245573             :          virtual ~SgDivideOp();
  245574             : 
  245575             : 
  245576             :      public: 
  245577             :          SgDivideOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  245578             :          SgDivideOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  245579             : 
  245580             :     protected:
  245581             : 
  245582             :     friend struct Rose::Traits::generated::describe_node_t<SgDivideOp>;
  245583             : 
  245584             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245585             : 
  245586             : 
  245587             :    };
  245588             : #endif
  245589             : 
  245590             : // postdeclarations for SgDivideOp
  245591             : 
  245592             : /* #line 245593 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245593             : 
  245594             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  245595             : 
  245596             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245597             : 
  245598             : 
  245599             : /* #line 245600 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245600             : 
  245601             : 
  245602             : 
  245603             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245604             : 
  245605             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  245606             : //      This code is automatically generated for each 
  245607             : //      terminal and non-terminal within the defined 
  245608             : //      grammar.  There is a simple way to change the 
  245609             : //      code to fix bugs etc.  See the ROSE README file
  245610             : //      for directions.
  245611             : 
  245612             : // tps: (02/22/2010): Adding DLL export requirements
  245613             : #include "rosedll.h"
  245614             : 
  245615             : // predeclarations for SgIntegerDivideOp
  245616             : 
  245617             : /* #line 245618 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245618             : 
  245619             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  245620             : 
  245621             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  245622             : 
  245623             : #if 1
  245624             : // Class Definition for SgIntegerDivideOp
  245625             : class ROSE_DLL_API SgIntegerDivideOp  : public SgBinaryOp
  245626             :    {
  245627             :      public:
  245628             : 
  245629             : 
  245630             : /* #line 245631 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  245631             : 
  245632             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  245633             : // Start of memberFunctionString
  245634             : /* #line 867 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  245635             : 
  245636             : 
  245637             : 
  245638             : // End of memberFunctionString
  245639             : // Start of memberFunctionString
  245640             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  245641             : 
  245642             : // *** COMMON CODE SECTION BEGINS HERE ***
  245643             : 
  245644             :     public:
  245645             : 
  245646             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  245647             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  245648             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  245649             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  245650             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  245651             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  245652             : 
  245653             :       /*! \brief returns a string representing the class name */
  245654             :           virtual std::string class_name() const override;
  245655             : 
  245656             :       /*! \brief returns new style SageIII enum values */
  245657             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  245658             : 
  245659             :       /*! \brief static variant value */
  245660             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  245661             :        // static const VariantT static_variant = V_SgIntegerDivideOp;
  245662             :           enum { static_variant = V_SgIntegerDivideOp };
  245663             : 
  245664             :        /* the generated cast function */
  245665             :       /*! \brief Casts pointer from base class to derived class */
  245666             :           ROSE_DLL_API friend       SgIntegerDivideOp* isSgIntegerDivideOp(       SgNode * s );
  245667             : 
  245668             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  245669             :           ROSE_DLL_API friend const SgIntegerDivideOp* isSgIntegerDivideOp( const SgNode * s );
  245670             : 
  245671             :      // ******************************************
  245672             :      // * Memory Pool / New / Delete
  245673             :      // ******************************************
  245674             : 
  245675             :      public:
  245676             :           /// \private
  245677             :           static const unsigned pool_size; //
  245678             :           /// \private
  245679             :           static std::vector<unsigned char *> pools; //
  245680             :           /// \private
  245681             :           static SgIntegerDivideOp * next_node; // 
  245682             : 
  245683             :           /// \private
  245684             :           static unsigned long initializeStorageClassArray(SgIntegerDivideOpStorageClass *); //
  245685             : 
  245686             :           /// \private
  245687             :           static void clearMemoryPool(); //
  245688             :           static void deleteMemoryPool(); //
  245689             : 
  245690             :           /// \private
  245691             :           static void extendMemoryPoolForFileIO(); //
  245692             : 
  245693             :           /// \private
  245694             :           static SgIntegerDivideOp * getPointerFromGlobalIndex(unsigned long); //
  245695             :           /// \private
  245696             :           static SgIntegerDivideOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  245697             : 
  245698             :           /// \private
  245699             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  245700             :           /// \private
  245701             :           static void resetValidFreepointers(); //
  245702             :           /// \private
  245703             :           static unsigned long getNumberOfLastValidPointer(); //
  245704             : 
  245705             : 
  245706             : #if defined(INLINE_FUNCTIONS)
  245707             :       /*! \brief returns pointer to newly allocated IR node */
  245708             :           inline void *operator new (size_t size);
  245709             : #else
  245710             :       /*! \brief returns pointer to newly allocated IR node */
  245711             :           void *operator new (size_t size);
  245712             : #endif
  245713             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  245714             :           void operator delete (void* pointer, size_t size);
  245715             : 
  245716             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  245717           0 :           void operator delete (void* pointer)
  245718             :              {
  245719             :             // This is the generated delete operator...
  245720           0 :                SgIntegerDivideOp::operator delete (pointer,sizeof(SgIntegerDivideOp));
  245721             :              }
  245722             : 
  245723             :       /*! \brief Returns the total number of IR nodes of this type */
  245724             :           static size_t numberOfNodes();
  245725             : 
  245726             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  245727             :           static size_t memoryUsage();
  245728             : 
  245729             :       // End of scope which started in IR nodes specific code 
  245730             :       /* */
  245731             : 
  245732             :       /* name Internal Functions
  245733             :           \brief Internal functions ... incomplete-documentation
  245734             : 
  245735             :           These functions have been made public as part of the design, but they are suggested for internal use 
  245736             :           or by particularly knowledgeable users for specialized tools or applications.
  245737             : 
  245738             :           \internal We could not make these private because they are required by user for special purposes. And 
  245739             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  245740             :          
  245741             :        */
  245742             : 
  245743             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  245744             :        // overridden in every class by *generated* implementation
  245745             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  245746             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  245747             :        // MS: 06/28/02 container of names of variables or container indices 
  245748             :        // used used in the traversal to access AST successor nodes
  245749             :        // overridden in every class by *generated* implementation
  245750             :       /*! \brief container of names of variables or container indices used used in the traversal
  245751             :           to access AST successor nodes overridden in every class by *generated* implementation */
  245752             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  245753             : 
  245754             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  245755             :        // than all the vector copies. The implementation for these functions is generated for each class.
  245756             :       /*! \brief return number of children in the traversal successor list */
  245757             :           virtual size_t get_numberOfTraversalSuccessors() override;
  245758             :       /*! \brief index-based access to traversal successors by index number */
  245759             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  245760             :       /*! \brief index-based access to traversal successors by child node */
  245761             :           virtual size_t get_childIndex(SgNode *child) override;
  245762             : 
  245763             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  245764             :        // MS: 08/16/2002 method for generating RTI information
  245765             :       /*! \brief return C++ Runtime-Time-Information */
  245766             :           virtual RTIReturnType roseRTI() override;
  245767             : #endif
  245768             :       /* */
  245769             : 
  245770             : 
  245771             : 
  245772             :       /* name Deprecated Functions
  245773             :           \brief Deprecated functions ... incomplete-documentation
  245774             : 
  245775             :           These functions have been deprecated from use.
  245776             :        */
  245777             :       /* */
  245778             : 
  245779             :       /*! returns a C style string (char*) representing the class name */
  245780             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  245781             : 
  245782             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  245783             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  245784             : #if 0
  245785             :       /*! returns old style Sage II enum values */
  245786             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  245787             :       /*! returns old style Sage II enum values */
  245788             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  245789             : #endif
  245790             :       /* */
  245791             : 
  245792             : 
  245793             : 
  245794             : 
  245795             :      public:
  245796             :       /* name Traversal Support Functions
  245797             :           \brief Traversal support functions ... incomplete-documentation
  245798             : 
  245799             :           These functions have been made public as part of the design, but they are suggested for internal use 
  245800             :           or by particularly knowledgable users for specialized tools or applications.
  245801             :        */
  245802             :       /* */
  245803             : 
  245804             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  245805             :        // (inferior to ROSE traversal mechanism, experimental).
  245806             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  245807             :        */
  245808             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  245809             : 
  245810             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  245811             :       /*! \brief support for the classic visitor pattern done in GoF */
  245812             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  245813             : 
  245814             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  245815             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  245816             :        */
  245817             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  245818             : 
  245819             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  245820             :        */
  245821             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  245822             : 
  245823             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  245824             :        // This traversal helps support internal tools that call static member functions.
  245825             :        // note: this function operates on the memory pools.
  245826             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  245827             :        */
  245828             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  245829             :       /* */
  245830             : 
  245831             : 
  245832             :      public:
  245833             :       /* name Memory Allocation Functions
  245834             :           \brief Memory allocations functions ... incomplete-documentation
  245835             : 
  245836             :           These functions have been made public as part of the design, but they are suggested for internal use 
  245837             :           or by particularly knowledgable users for specialized tools or applications.
  245838             :        */
  245839             :       /* */
  245840             : 
  245841             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  245842             : 
  245843             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  245844             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  245845             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  245846             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  245847             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  245848             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  245849             :           being used with the AST File I/O mechanism.
  245850             :        */
  245851             :           virtual bool isInMemoryPool() override;
  245852             : 
  245853             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  245854             : 
  245855             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  245856             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  245857             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  245858             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  245859             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  245860             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  245861             :           being used with the AST File I/O mechanism.
  245862             :        */
  245863             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  245864             : 
  245865             :       // DQ (4/30/2006): Modified to be a const function.
  245866             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  245867             : 
  245868             :           This functions is part of general support for many possible tools to operate 
  245869             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  245870             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  245871             :           less than the set of pointers used by the AST file I/O. This is part of
  245872             :           work implemented by Andreas, and support tools such as the AST graph generation.
  245873             : 
  245874             :           \warning This function can return unexpected data members and thus the 
  245875             :                    order and the number of elements is unpredicable and subject 
  245876             :                    to change.
  245877             : 
  245878             :           \returns STL vector of pairs of SgNode* and strings
  245879             :        */
  245880             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  245881             : 
  245882             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  245883             : 
  245884             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  245885             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  245886             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  245887             : 
  245888             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  245889             :                    and subject to change.
  245890             :        */
  245891             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  245892             : 
  245893             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  245894             : 
  245895             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  245896             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  245897             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  245898             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  245899             : 
  245900             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  245901             : 
  245902             :           \returns long
  245903             :        */
  245904             :           virtual long getChildIndex( SgNode* childNode ) const override;
  245905             : 
  245906             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  245907             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245908             :       /* \brief Constructor for use by AST File I/O Mechanism
  245909             : 
  245910             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  245911             :           which obtained via fast binary file I/O from disk.
  245912             :        */
  245913             :        // SgIntegerDivideOp( SgIntegerDivideOpStorageClass& source );
  245914             : 
  245915             : 
  245916             : 
  245917             : 
  245918             : 
  245919             :  // JH (10/24/2005): methods added to support the ast file IO
  245920             :     private:
  245921             : 
  245922             :       /* name AST Memory Allocation Support Functions
  245923             :           \brief Memory allocations support....
  245924             : 
  245925             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  245926             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  245927             :           and support the AST File I/O Mechanism.
  245928             :        */
  245929             :       /* */
  245930             : 
  245931             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  245932             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  245933             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  245934             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  245935             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  245936             :           a correspinding one in the AST_FILE_IO class!
  245937             :        */
  245938             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  245939             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245940             :       /* \brief Typedef used for low level memory access.
  245941             :        */
  245942             :        // typedef unsigned char* TestType;
  245943             : 
  245944             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  245945             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  245946             :       /* \brief Typedef used to hold memory addresses as values.
  245947             :        */
  245948             :        // typedef unsigned long  AddressType;
  245949             : 
  245950             : 
  245951             : 
  245952             :        // necessary, to have direct access to the p_freepointer and the private methods !
  245953             :       /*! \brief friend class declaration to support AST File I/O */
  245954             :           friend class AST_FILE_IO;
  245955             : 
  245956             :       /*! \brief friend class declaration to support AST File I/O */
  245957             :           friend class SgIntegerDivideOpStorageClass;
  245958             : 
  245959             :       /*! \brief friend class declaration to support AST File I/O */
  245960             :           friend class AstSpecificDataManagingClass;
  245961             : 
  245962             :       /*! \brief friend class declaration to support AST File I/O */
  245963             :           friend class AstSpecificDataManagingClassStorageClass;
  245964             :     public:
  245965             :       /*! \brief IR node constructor to support AST File I/O */
  245966             :           SgIntegerDivideOp( const SgIntegerDivideOpStorageClass& source );
  245967             : 
  245968             :  // private: // JJW hack
  245969             :        /*
  245970             :           name AST Memory Allocation Support Variables
  245971             :           Memory allocations support variables 
  245972             : 
  245973             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  245974             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  245975             :           and support the AST File I/O Mechanism.
  245976             :        */
  245977             :       /* */
  245978             : 
  245979             :     public:
  245980             : 
  245981             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  245982             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  245983             :       // virtual SgNode* addRegExpAttribute();
  245984             :       /*! \brief Support for AST matching using regular expression.
  245985             : 
  245986             :           This support is incomplete and the subject of current research to define 
  245987             :           RegEx trees to support inexact matching.
  245988             :        */
  245989             :           SgIntegerDivideOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  245990             : 
  245991             : // *** COMMON CODE SECTION ENDS HERE ***
  245992             : 
  245993             : 
  245994             : // End of memberFunctionString
  245995             : // Start of memberFunctionString
  245996             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  245997             : 
  245998             :      // the generated cast function
  245999             :      // friend ROSE_DLL_API SgIntegerDivideOp* isSgIntegerDivideOp ( SgNode* s );
  246000             : 
  246001             :           typedef SgBinaryOp base_node_type;
  246002             : 
  246003             : 
  246004             : // End of memberFunctionString
  246005             : // Start of memberFunctionString
  246006             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246007             : 
  246008             :           void post_construction_initialization() override;
  246009             : 
  246010             : 
  246011             : // End of memberFunctionString
  246012             : // Start of memberFunctionString
  246013             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246014             : 
  246015           0 :           int precedence() const override { return 13; }
  246016             : 
  246017             : 
  246018             : // End of memberFunctionString
  246019             : 
  246020             : 
  246021             :      public: 
  246022             :          virtual ~SgIntegerDivideOp();
  246023             : 
  246024             : 
  246025             :      public: 
  246026             :          SgIntegerDivideOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  246027             :          SgIntegerDivideOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  246028             : 
  246029             :     protected:
  246030             : 
  246031             :     friend struct Rose::Traits::generated::describe_node_t<SgIntegerDivideOp>;
  246032             : 
  246033             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246034             : 
  246035             : 
  246036             :    };
  246037             : #endif
  246038             : 
  246039             : // postdeclarations for SgIntegerDivideOp
  246040             : 
  246041             : /* #line 246042 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246042             : 
  246043             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  246044             : 
  246045             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246046             : 
  246047             : 
  246048             : /* #line 246049 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246049             : 
  246050             : 
  246051             : 
  246052             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246053             : 
  246054             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  246055             : //      This code is automatically generated for each 
  246056             : //      terminal and non-terminal within the defined 
  246057             : //      grammar.  There is a simple way to change the 
  246058             : //      code to fix bugs etc.  See the ROSE README file
  246059             : //      for directions.
  246060             : 
  246061             : // tps: (02/22/2010): Adding DLL export requirements
  246062             : #include "rosedll.h"
  246063             : 
  246064             : // predeclarations for SgModOp
  246065             : 
  246066             : /* #line 246067 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246067             : 
  246068             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  246069             : 
  246070             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246071             : 
  246072             : #if 1
  246073             : // Class Definition for SgModOp
  246074             : class ROSE_DLL_API SgModOp  : public SgBinaryOp
  246075             :    {
  246076             :      public:
  246077             : 
  246078             : 
  246079             : /* #line 246080 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246080             : 
  246081             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  246082             : // Start of memberFunctionString
  246083             : /* #line 871 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246084             : 
  246085             : 
  246086             : 
  246087             : // End of memberFunctionString
  246088             : // Start of memberFunctionString
  246089             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  246090             : 
  246091             : // *** COMMON CODE SECTION BEGINS HERE ***
  246092             : 
  246093             :     public:
  246094             : 
  246095             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  246096             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  246097             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  246098             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  246099             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  246100             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  246101             : 
  246102             :       /*! \brief returns a string representing the class name */
  246103             :           virtual std::string class_name() const override;
  246104             : 
  246105             :       /*! \brief returns new style SageIII enum values */
  246106             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  246107             : 
  246108             :       /*! \brief static variant value */
  246109             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  246110             :        // static const VariantT static_variant = V_SgModOp;
  246111             :           enum { static_variant = V_SgModOp };
  246112             : 
  246113             :        /* the generated cast function */
  246114             :       /*! \brief Casts pointer from base class to derived class */
  246115             :           ROSE_DLL_API friend       SgModOp* isSgModOp(       SgNode * s );
  246116             : 
  246117             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  246118             :           ROSE_DLL_API friend const SgModOp* isSgModOp( const SgNode * s );
  246119             : 
  246120             :      // ******************************************
  246121             :      // * Memory Pool / New / Delete
  246122             :      // ******************************************
  246123             : 
  246124             :      public:
  246125             :           /// \private
  246126             :           static const unsigned pool_size; //
  246127             :           /// \private
  246128             :           static std::vector<unsigned char *> pools; //
  246129             :           /// \private
  246130             :           static SgModOp * next_node; // 
  246131             : 
  246132             :           /// \private
  246133             :           static unsigned long initializeStorageClassArray(SgModOpStorageClass *); //
  246134             : 
  246135             :           /// \private
  246136             :           static void clearMemoryPool(); //
  246137             :           static void deleteMemoryPool(); //
  246138             : 
  246139             :           /// \private
  246140             :           static void extendMemoryPoolForFileIO(); //
  246141             : 
  246142             :           /// \private
  246143             :           static SgModOp * getPointerFromGlobalIndex(unsigned long); //
  246144             :           /// \private
  246145             :           static SgModOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  246146             : 
  246147             :           /// \private
  246148             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  246149             :           /// \private
  246150             :           static void resetValidFreepointers(); //
  246151             :           /// \private
  246152             :           static unsigned long getNumberOfLastValidPointer(); //
  246153             : 
  246154             : 
  246155             : #if defined(INLINE_FUNCTIONS)
  246156             :       /*! \brief returns pointer to newly allocated IR node */
  246157             :           inline void *operator new (size_t size);
  246158             : #else
  246159             :       /*! \brief returns pointer to newly allocated IR node */
  246160             :           void *operator new (size_t size);
  246161             : #endif
  246162             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  246163             :           void operator delete (void* pointer, size_t size);
  246164             : 
  246165             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  246166          10 :           void operator delete (void* pointer)
  246167             :              {
  246168             :             // This is the generated delete operator...
  246169          10 :                SgModOp::operator delete (pointer,sizeof(SgModOp));
  246170             :              }
  246171             : 
  246172             :       /*! \brief Returns the total number of IR nodes of this type */
  246173             :           static size_t numberOfNodes();
  246174             : 
  246175             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  246176             :           static size_t memoryUsage();
  246177             : 
  246178             :       // End of scope which started in IR nodes specific code 
  246179             :       /* */
  246180             : 
  246181             :       /* name Internal Functions
  246182             :           \brief Internal functions ... incomplete-documentation
  246183             : 
  246184             :           These functions have been made public as part of the design, but they are suggested for internal use 
  246185             :           or by particularly knowledgeable users for specialized tools or applications.
  246186             : 
  246187             :           \internal We could not make these private because they are required by user for special purposes. And 
  246188             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  246189             :          
  246190             :        */
  246191             : 
  246192             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  246193             :        // overridden in every class by *generated* implementation
  246194             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  246195             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  246196             :        // MS: 06/28/02 container of names of variables or container indices 
  246197             :        // used used in the traversal to access AST successor nodes
  246198             :        // overridden in every class by *generated* implementation
  246199             :       /*! \brief container of names of variables or container indices used used in the traversal
  246200             :           to access AST successor nodes overridden in every class by *generated* implementation */
  246201             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  246202             : 
  246203             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  246204             :        // than all the vector copies. The implementation for these functions is generated for each class.
  246205             :       /*! \brief return number of children in the traversal successor list */
  246206             :           virtual size_t get_numberOfTraversalSuccessors() override;
  246207             :       /*! \brief index-based access to traversal successors by index number */
  246208             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  246209             :       /*! \brief index-based access to traversal successors by child node */
  246210             :           virtual size_t get_childIndex(SgNode *child) override;
  246211             : 
  246212             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  246213             :        // MS: 08/16/2002 method for generating RTI information
  246214             :       /*! \brief return C++ Runtime-Time-Information */
  246215             :           virtual RTIReturnType roseRTI() override;
  246216             : #endif
  246217             :       /* */
  246218             : 
  246219             : 
  246220             : 
  246221             :       /* name Deprecated Functions
  246222             :           \brief Deprecated functions ... incomplete-documentation
  246223             : 
  246224             :           These functions have been deprecated from use.
  246225             :        */
  246226             :       /* */
  246227             : 
  246228             :       /*! returns a C style string (char*) representing the class name */
  246229             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  246230             : 
  246231             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  246232             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  246233             : #if 0
  246234             :       /*! returns old style Sage II enum values */
  246235             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  246236             :       /*! returns old style Sage II enum values */
  246237             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  246238             : #endif
  246239             :       /* */
  246240             : 
  246241             : 
  246242             : 
  246243             : 
  246244             :      public:
  246245             :       /* name Traversal Support Functions
  246246             :           \brief Traversal support functions ... incomplete-documentation
  246247             : 
  246248             :           These functions have been made public as part of the design, but they are suggested for internal use 
  246249             :           or by particularly knowledgable users for specialized tools or applications.
  246250             :        */
  246251             :       /* */
  246252             : 
  246253             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  246254             :        // (inferior to ROSE traversal mechanism, experimental).
  246255             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  246256             :        */
  246257             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  246258             : 
  246259             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  246260             :       /*! \brief support for the classic visitor pattern done in GoF */
  246261             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  246262             : 
  246263             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  246264             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  246265             :        */
  246266             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  246267             : 
  246268             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  246269             :        */
  246270             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  246271             : 
  246272             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  246273             :        // This traversal helps support internal tools that call static member functions.
  246274             :        // note: this function operates on the memory pools.
  246275             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  246276             :        */
  246277             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  246278             :       /* */
  246279             : 
  246280             : 
  246281             :      public:
  246282             :       /* name Memory Allocation Functions
  246283             :           \brief Memory allocations functions ... incomplete-documentation
  246284             : 
  246285             :           These functions have been made public as part of the design, but they are suggested for internal use 
  246286             :           or by particularly knowledgable users for specialized tools or applications.
  246287             :        */
  246288             :       /* */
  246289             : 
  246290             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  246291             : 
  246292             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  246293             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  246294             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  246295             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  246296             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  246297             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  246298             :           being used with the AST File I/O mechanism.
  246299             :        */
  246300             :           virtual bool isInMemoryPool() override;
  246301             : 
  246302             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  246303             : 
  246304             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  246305             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  246306             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  246307             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  246308             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  246309             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  246310             :           being used with the AST File I/O mechanism.
  246311             :        */
  246312             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  246313             : 
  246314             :       // DQ (4/30/2006): Modified to be a const function.
  246315             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  246316             : 
  246317             :           This functions is part of general support for many possible tools to operate 
  246318             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  246319             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  246320             :           less than the set of pointers used by the AST file I/O. This is part of
  246321             :           work implemented by Andreas, and support tools such as the AST graph generation.
  246322             : 
  246323             :           \warning This function can return unexpected data members and thus the 
  246324             :                    order and the number of elements is unpredicable and subject 
  246325             :                    to change.
  246326             : 
  246327             :           \returns STL vector of pairs of SgNode* and strings
  246328             :        */
  246329             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  246330             : 
  246331             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  246332             : 
  246333             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  246334             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  246335             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  246336             : 
  246337             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  246338             :                    and subject to change.
  246339             :        */
  246340             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  246341             : 
  246342             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  246343             : 
  246344             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  246345             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  246346             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  246347             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  246348             : 
  246349             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  246350             : 
  246351             :           \returns long
  246352             :        */
  246353             :           virtual long getChildIndex( SgNode* childNode ) const override;
  246354             : 
  246355             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  246356             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  246357             :       /* \brief Constructor for use by AST File I/O Mechanism
  246358             : 
  246359             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  246360             :           which obtained via fast binary file I/O from disk.
  246361             :        */
  246362             :        // SgModOp( SgModOpStorageClass& source );
  246363             : 
  246364             : 
  246365             : 
  246366             : 
  246367             : 
  246368             :  // JH (10/24/2005): methods added to support the ast file IO
  246369             :     private:
  246370             : 
  246371             :       /* name AST Memory Allocation Support Functions
  246372             :           \brief Memory allocations support....
  246373             : 
  246374             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  246375             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  246376             :           and support the AST File I/O Mechanism.
  246377             :        */
  246378             :       /* */
  246379             : 
  246380             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  246381             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  246382             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  246383             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  246384             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  246385             :           a correspinding one in the AST_FILE_IO class!
  246386             :        */
  246387             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  246388             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  246389             :       /* \brief Typedef used for low level memory access.
  246390             :        */
  246391             :        // typedef unsigned char* TestType;
  246392             : 
  246393             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  246394             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  246395             :       /* \brief Typedef used to hold memory addresses as values.
  246396             :        */
  246397             :        // typedef unsigned long  AddressType;
  246398             : 
  246399             : 
  246400             : 
  246401             :        // necessary, to have direct access to the p_freepointer and the private methods !
  246402             :       /*! \brief friend class declaration to support AST File I/O */
  246403             :           friend class AST_FILE_IO;
  246404             : 
  246405             :       /*! \brief friend class declaration to support AST File I/O */
  246406             :           friend class SgModOpStorageClass;
  246407             : 
  246408             :       /*! \brief friend class declaration to support AST File I/O */
  246409             :           friend class AstSpecificDataManagingClass;
  246410             : 
  246411             :       /*! \brief friend class declaration to support AST File I/O */
  246412             :           friend class AstSpecificDataManagingClassStorageClass;
  246413             :     public:
  246414             :       /*! \brief IR node constructor to support AST File I/O */
  246415             :           SgModOp( const SgModOpStorageClass& source );
  246416             : 
  246417             :  // private: // JJW hack
  246418             :        /*
  246419             :           name AST Memory Allocation Support Variables
  246420             :           Memory allocations support variables 
  246421             : 
  246422             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  246423             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  246424             :           and support the AST File I/O Mechanism.
  246425             :        */
  246426             :       /* */
  246427             : 
  246428             :     public:
  246429             : 
  246430             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  246431             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  246432             :       // virtual SgNode* addRegExpAttribute();
  246433             :       /*! \brief Support for AST matching using regular expression.
  246434             : 
  246435             :           This support is incomplete and the subject of current research to define 
  246436             :           RegEx trees to support inexact matching.
  246437             :        */
  246438             :           SgModOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  246439             : 
  246440             : // *** COMMON CODE SECTION ENDS HERE ***
  246441             : 
  246442             : 
  246443             : // End of memberFunctionString
  246444             : // Start of memberFunctionString
  246445             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  246446             : 
  246447             :      // the generated cast function
  246448             :      // friend ROSE_DLL_API SgModOp* isSgModOp ( SgNode* s );
  246449             : 
  246450             :           typedef SgBinaryOp base_node_type;
  246451             : 
  246452             : 
  246453             : // End of memberFunctionString
  246454             : // Start of memberFunctionString
  246455             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246456             : 
  246457             :           void post_construction_initialization() override;
  246458             : 
  246459             : 
  246460             : // End of memberFunctionString
  246461             : // Start of memberFunctionString
  246462             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246463             : 
  246464           0 :           int precedence() const override { return 13; }
  246465             : 
  246466             : 
  246467             : // End of memberFunctionString
  246468             : 
  246469             : 
  246470             :      public: 
  246471             :          virtual ~SgModOp();
  246472             : 
  246473             : 
  246474             :      public: 
  246475             :          SgModOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  246476             :          SgModOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  246477             : 
  246478             :     protected:
  246479             : 
  246480             :     friend struct Rose::Traits::generated::describe_node_t<SgModOp>;
  246481             : 
  246482             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246483             : 
  246484             : 
  246485             :    };
  246486             : #endif
  246487             : 
  246488             : // postdeclarations for SgModOp
  246489             : 
  246490             : /* #line 246491 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246491             : 
  246492             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  246493             : 
  246494             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246495             : 
  246496             : 
  246497             : /* #line 246498 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246498             : 
  246499             : 
  246500             : 
  246501             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246502             : 
  246503             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  246504             : //      This code is automatically generated for each 
  246505             : //      terminal and non-terminal within the defined 
  246506             : //      grammar.  There is a simple way to change the 
  246507             : //      code to fix bugs etc.  See the ROSE README file
  246508             : //      for directions.
  246509             : 
  246510             : // tps: (02/22/2010): Adding DLL export requirements
  246511             : #include "rosedll.h"
  246512             : 
  246513             : // predeclarations for SgAndOp
  246514             : 
  246515             : /* #line 246516 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246516             : 
  246517             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  246518             : 
  246519             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246520             : 
  246521             : #if 1
  246522             : // Class Definition for SgAndOp
  246523             : class ROSE_DLL_API SgAndOp  : public SgBinaryOp
  246524             :    {
  246525             :      public:
  246526             : 
  246527             : 
  246528             : /* #line 246529 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246529             : 
  246530             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  246531             : // Start of memberFunctionString
  246532             : /* #line 911 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246533             : 
  246534             :           SgType* get_type() const override;
  246535             : 
  246536             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  246537             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  246538             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  246539             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  246540             : #endif
  246541             : 
  246542             : 
  246543             : 
  246544             : // End of memberFunctionString
  246545             : // Start of memberFunctionString
  246546             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  246547             : 
  246548             : // *** COMMON CODE SECTION BEGINS HERE ***
  246549             : 
  246550             :     public:
  246551             : 
  246552             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  246553             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  246554             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  246555             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  246556             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  246557             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  246558             : 
  246559             :       /*! \brief returns a string representing the class name */
  246560             :           virtual std::string class_name() const override;
  246561             : 
  246562             :       /*! \brief returns new style SageIII enum values */
  246563             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  246564             : 
  246565             :       /*! \brief static variant value */
  246566             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  246567             :        // static const VariantT static_variant = V_SgAndOp;
  246568             :           enum { static_variant = V_SgAndOp };
  246569             : 
  246570             :        /* the generated cast function */
  246571             :       /*! \brief Casts pointer from base class to derived class */
  246572             :           ROSE_DLL_API friend       SgAndOp* isSgAndOp(       SgNode * s );
  246573             : 
  246574             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  246575             :           ROSE_DLL_API friend const SgAndOp* isSgAndOp( const SgNode * s );
  246576             : 
  246577             :      // ******************************************
  246578             :      // * Memory Pool / New / Delete
  246579             :      // ******************************************
  246580             : 
  246581             :      public:
  246582             :           /// \private
  246583             :           static const unsigned pool_size; //
  246584             :           /// \private
  246585             :           static std::vector<unsigned char *> pools; //
  246586             :           /// \private
  246587             :           static SgAndOp * next_node; // 
  246588             : 
  246589             :           /// \private
  246590             :           static unsigned long initializeStorageClassArray(SgAndOpStorageClass *); //
  246591             : 
  246592             :           /// \private
  246593             :           static void clearMemoryPool(); //
  246594             :           static void deleteMemoryPool(); //
  246595             : 
  246596             :           /// \private
  246597             :           static void extendMemoryPoolForFileIO(); //
  246598             : 
  246599             :           /// \private
  246600             :           static SgAndOp * getPointerFromGlobalIndex(unsigned long); //
  246601             :           /// \private
  246602             :           static SgAndOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  246603             : 
  246604             :           /// \private
  246605             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  246606             :           /// \private
  246607             :           static void resetValidFreepointers(); //
  246608             :           /// \private
  246609             :           static unsigned long getNumberOfLastValidPointer(); //
  246610             : 
  246611             : 
  246612             : #if defined(INLINE_FUNCTIONS)
  246613             :       /*! \brief returns pointer to newly allocated IR node */
  246614             :           inline void *operator new (size_t size);
  246615             : #else
  246616             :       /*! \brief returns pointer to newly allocated IR node */
  246617             :           void *operator new (size_t size);
  246618             : #endif
  246619             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  246620             :           void operator delete (void* pointer, size_t size);
  246621             : 
  246622             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  246623         386 :           void operator delete (void* pointer)
  246624             :              {
  246625             :             // This is the generated delete operator...
  246626         386 :                SgAndOp::operator delete (pointer,sizeof(SgAndOp));
  246627             :              }
  246628             : 
  246629             :       /*! \brief Returns the total number of IR nodes of this type */
  246630             :           static size_t numberOfNodes();
  246631             : 
  246632             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  246633             :           static size_t memoryUsage();
  246634             : 
  246635             :       // End of scope which started in IR nodes specific code 
  246636             :       /* */
  246637             : 
  246638             :       /* name Internal Functions
  246639             :           \brief Internal functions ... incomplete-documentation
  246640             : 
  246641             :           These functions have been made public as part of the design, but they are suggested for internal use 
  246642             :           or by particularly knowledgeable users for specialized tools or applications.
  246643             : 
  246644             :           \internal We could not make these private because they are required by user for special purposes. And 
  246645             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  246646             :          
  246647             :        */
  246648             : 
  246649             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  246650             :        // overridden in every class by *generated* implementation
  246651             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  246652             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  246653             :        // MS: 06/28/02 container of names of variables or container indices 
  246654             :        // used used in the traversal to access AST successor nodes
  246655             :        // overridden in every class by *generated* implementation
  246656             :       /*! \brief container of names of variables or container indices used used in the traversal
  246657             :           to access AST successor nodes overridden in every class by *generated* implementation */
  246658             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  246659             : 
  246660             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  246661             :        // than all the vector copies. The implementation for these functions is generated for each class.
  246662             :       /*! \brief return number of children in the traversal successor list */
  246663             :           virtual size_t get_numberOfTraversalSuccessors() override;
  246664             :       /*! \brief index-based access to traversal successors by index number */
  246665             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  246666             :       /*! \brief index-based access to traversal successors by child node */
  246667             :           virtual size_t get_childIndex(SgNode *child) override;
  246668             : 
  246669             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  246670             :        // MS: 08/16/2002 method for generating RTI information
  246671             :       /*! \brief return C++ Runtime-Time-Information */
  246672             :           virtual RTIReturnType roseRTI() override;
  246673             : #endif
  246674             :       /* */
  246675             : 
  246676             : 
  246677             : 
  246678             :       /* name Deprecated Functions
  246679             :           \brief Deprecated functions ... incomplete-documentation
  246680             : 
  246681             :           These functions have been deprecated from use.
  246682             :        */
  246683             :       /* */
  246684             : 
  246685             :       /*! returns a C style string (char*) representing the class name */
  246686             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  246687             : 
  246688             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  246689             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  246690             : #if 0
  246691             :       /*! returns old style Sage II enum values */
  246692             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  246693             :       /*! returns old style Sage II enum values */
  246694             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  246695             : #endif
  246696             :       /* */
  246697             : 
  246698             : 
  246699             : 
  246700             : 
  246701             :      public:
  246702             :       /* name Traversal Support Functions
  246703             :           \brief Traversal support functions ... incomplete-documentation
  246704             : 
  246705             :           These functions have been made public as part of the design, but they are suggested for internal use 
  246706             :           or by particularly knowledgable users for specialized tools or applications.
  246707             :        */
  246708             :       /* */
  246709             : 
  246710             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  246711             :        // (inferior to ROSE traversal mechanism, experimental).
  246712             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  246713             :        */
  246714             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  246715             : 
  246716             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  246717             :       /*! \brief support for the classic visitor pattern done in GoF */
  246718             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  246719             : 
  246720             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  246721             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  246722             :        */
  246723             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  246724             : 
  246725             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  246726             :        */
  246727             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  246728             : 
  246729             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  246730             :        // This traversal helps support internal tools that call static member functions.
  246731             :        // note: this function operates on the memory pools.
  246732             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  246733             :        */
  246734             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  246735             :       /* */
  246736             : 
  246737             : 
  246738             :      public:
  246739             :       /* name Memory Allocation Functions
  246740             :           \brief Memory allocations functions ... incomplete-documentation
  246741             : 
  246742             :           These functions have been made public as part of the design, but they are suggested for internal use 
  246743             :           or by particularly knowledgable users for specialized tools or applications.
  246744             :        */
  246745             :       /* */
  246746             : 
  246747             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  246748             : 
  246749             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  246750             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  246751             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  246752             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  246753             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  246754             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  246755             :           being used with the AST File I/O mechanism.
  246756             :        */
  246757             :           virtual bool isInMemoryPool() override;
  246758             : 
  246759             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  246760             : 
  246761             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  246762             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  246763             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  246764             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  246765             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  246766             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  246767             :           being used with the AST File I/O mechanism.
  246768             :        */
  246769             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  246770             : 
  246771             :       // DQ (4/30/2006): Modified to be a const function.
  246772             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  246773             : 
  246774             :           This functions is part of general support for many possible tools to operate 
  246775             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  246776             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  246777             :           less than the set of pointers used by the AST file I/O. This is part of
  246778             :           work implemented by Andreas, and support tools such as the AST graph generation.
  246779             : 
  246780             :           \warning This function can return unexpected data members and thus the 
  246781             :                    order and the number of elements is unpredicable and subject 
  246782             :                    to change.
  246783             : 
  246784             :           \returns STL vector of pairs of SgNode* and strings
  246785             :        */
  246786             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  246787             : 
  246788             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  246789             : 
  246790             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  246791             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  246792             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  246793             : 
  246794             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  246795             :                    and subject to change.
  246796             :        */
  246797             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  246798             : 
  246799             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  246800             : 
  246801             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  246802             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  246803             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  246804             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  246805             : 
  246806             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  246807             : 
  246808             :           \returns long
  246809             :        */
  246810             :           virtual long getChildIndex( SgNode* childNode ) const override;
  246811             : 
  246812             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  246813             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  246814             :       /* \brief Constructor for use by AST File I/O Mechanism
  246815             : 
  246816             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  246817             :           which obtained via fast binary file I/O from disk.
  246818             :        */
  246819             :        // SgAndOp( SgAndOpStorageClass& source );
  246820             : 
  246821             : 
  246822             : 
  246823             : 
  246824             : 
  246825             :  // JH (10/24/2005): methods added to support the ast file IO
  246826             :     private:
  246827             : 
  246828             :       /* name AST Memory Allocation Support Functions
  246829             :           \brief Memory allocations support....
  246830             : 
  246831             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  246832             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  246833             :           and support the AST File I/O Mechanism.
  246834             :        */
  246835             :       /* */
  246836             : 
  246837             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  246838             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  246839             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  246840             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  246841             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  246842             :           a correspinding one in the AST_FILE_IO class!
  246843             :        */
  246844             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  246845             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  246846             :       /* \brief Typedef used for low level memory access.
  246847             :        */
  246848             :        // typedef unsigned char* TestType;
  246849             : 
  246850             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  246851             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  246852             :       /* \brief Typedef used to hold memory addresses as values.
  246853             :        */
  246854             :        // typedef unsigned long  AddressType;
  246855             : 
  246856             : 
  246857             : 
  246858             :        // necessary, to have direct access to the p_freepointer and the private methods !
  246859             :       /*! \brief friend class declaration to support AST File I/O */
  246860             :           friend class AST_FILE_IO;
  246861             : 
  246862             :       /*! \brief friend class declaration to support AST File I/O */
  246863             :           friend class SgAndOpStorageClass;
  246864             : 
  246865             :       /*! \brief friend class declaration to support AST File I/O */
  246866             :           friend class AstSpecificDataManagingClass;
  246867             : 
  246868             :       /*! \brief friend class declaration to support AST File I/O */
  246869             :           friend class AstSpecificDataManagingClassStorageClass;
  246870             :     public:
  246871             :       /*! \brief IR node constructor to support AST File I/O */
  246872             :           SgAndOp( const SgAndOpStorageClass& source );
  246873             : 
  246874             :  // private: // JJW hack
  246875             :        /*
  246876             :           name AST Memory Allocation Support Variables
  246877             :           Memory allocations support variables 
  246878             : 
  246879             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  246880             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  246881             :           and support the AST File I/O Mechanism.
  246882             :        */
  246883             :       /* */
  246884             : 
  246885             :     public:
  246886             : 
  246887             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  246888             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  246889             :       // virtual SgNode* addRegExpAttribute();
  246890             :       /*! \brief Support for AST matching using regular expression.
  246891             : 
  246892             :           This support is incomplete and the subject of current research to define 
  246893             :           RegEx trees to support inexact matching.
  246894             :        */
  246895             :           SgAndOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  246896             : 
  246897             : // *** COMMON CODE SECTION ENDS HERE ***
  246898             : 
  246899             : 
  246900             : // End of memberFunctionString
  246901             : // Start of memberFunctionString
  246902             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  246903             : 
  246904             :      // the generated cast function
  246905             :      // friend ROSE_DLL_API SgAndOp* isSgAndOp ( SgNode* s );
  246906             : 
  246907             :           typedef SgBinaryOp base_node_type;
  246908             : 
  246909             : 
  246910             : // End of memberFunctionString
  246911             : // Start of memberFunctionString
  246912             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246913             : 
  246914             :           void post_construction_initialization() override;
  246915             : 
  246916             : 
  246917             : // End of memberFunctionString
  246918             : // Start of memberFunctionString
  246919             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246920             : 
  246921           0 :           int precedence() const override { return  5; }
  246922             : 
  246923             : 
  246924             : // End of memberFunctionString
  246925             : 
  246926             : 
  246927             :      public: 
  246928             :          virtual ~SgAndOp();
  246929             : 
  246930             : 
  246931             :      public: 
  246932             :          SgAndOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  246933             :          SgAndOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  246934             : 
  246935             :     protected:
  246936             : 
  246937             :     friend struct Rose::Traits::generated::describe_node_t<SgAndOp>;
  246938             : 
  246939             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246940             : 
  246941             : 
  246942             :    };
  246943             : #endif
  246944             : 
  246945             : // postdeclarations for SgAndOp
  246946             : 
  246947             : /* #line 246948 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246948             : 
  246949             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  246950             : 
  246951             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246952             : 
  246953             : 
  246954             : /* #line 246955 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246955             : 
  246956             : 
  246957             : 
  246958             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246959             : 
  246960             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  246961             : //      This code is automatically generated for each 
  246962             : //      terminal and non-terminal within the defined 
  246963             : //      grammar.  There is a simple way to change the 
  246964             : //      code to fix bugs etc.  See the ROSE README file
  246965             : //      for directions.
  246966             : 
  246967             : // tps: (02/22/2010): Adding DLL export requirements
  246968             : #include "rosedll.h"
  246969             : 
  246970             : // predeclarations for SgOrOp
  246971             : 
  246972             : /* #line 246973 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246973             : 
  246974             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  246975             : 
  246976             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  246977             : 
  246978             : #if 1
  246979             : // Class Definition for SgOrOp
  246980             : class ROSE_DLL_API SgOrOp  : public SgBinaryOp
  246981             :    {
  246982             :      public:
  246983             : 
  246984             : 
  246985             : /* #line 246986 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  246986             : 
  246987             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  246988             : // Start of memberFunctionString
  246989             : /* #line 923 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  246990             : 
  246991             :           SgType* get_type() const override;
  246992             : 
  246993             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  246994             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  246995             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  246996             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  246997             : #endif
  246998             : 
  246999             : 
  247000             : 
  247001             : // End of memberFunctionString
  247002             : // Start of memberFunctionString
  247003             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  247004             : 
  247005             : // *** COMMON CODE SECTION BEGINS HERE ***
  247006             : 
  247007             :     public:
  247008             : 
  247009             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  247010             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  247011             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  247012             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  247013             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  247014             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  247015             : 
  247016             :       /*! \brief returns a string representing the class name */
  247017             :           virtual std::string class_name() const override;
  247018             : 
  247019             :       /*! \brief returns new style SageIII enum values */
  247020             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  247021             : 
  247022             :       /*! \brief static variant value */
  247023             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  247024             :        // static const VariantT static_variant = V_SgOrOp;
  247025             :           enum { static_variant = V_SgOrOp };
  247026             : 
  247027             :        /* the generated cast function */
  247028             :       /*! \brief Casts pointer from base class to derived class */
  247029             :           ROSE_DLL_API friend       SgOrOp* isSgOrOp(       SgNode * s );
  247030             : 
  247031             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  247032             :           ROSE_DLL_API friend const SgOrOp* isSgOrOp( const SgNode * s );
  247033             : 
  247034             :      // ******************************************
  247035             :      // * Memory Pool / New / Delete
  247036             :      // ******************************************
  247037             : 
  247038             :      public:
  247039             :           /// \private
  247040             :           static const unsigned pool_size; //
  247041             :           /// \private
  247042             :           static std::vector<unsigned char *> pools; //
  247043             :           /// \private
  247044             :           static SgOrOp * next_node; // 
  247045             : 
  247046             :           /// \private
  247047             :           static unsigned long initializeStorageClassArray(SgOrOpStorageClass *); //
  247048             : 
  247049             :           /// \private
  247050             :           static void clearMemoryPool(); //
  247051             :           static void deleteMemoryPool(); //
  247052             : 
  247053             :           /// \private
  247054             :           static void extendMemoryPoolForFileIO(); //
  247055             : 
  247056             :           /// \private
  247057             :           static SgOrOp * getPointerFromGlobalIndex(unsigned long); //
  247058             :           /// \private
  247059             :           static SgOrOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  247060             : 
  247061             :           /// \private
  247062             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  247063             :           /// \private
  247064             :           static void resetValidFreepointers(); //
  247065             :           /// \private
  247066             :           static unsigned long getNumberOfLastValidPointer(); //
  247067             : 
  247068             : 
  247069             : #if defined(INLINE_FUNCTIONS)
  247070             :       /*! \brief returns pointer to newly allocated IR node */
  247071             :           inline void *operator new (size_t size);
  247072             : #else
  247073             :       /*! \brief returns pointer to newly allocated IR node */
  247074             :           void *operator new (size_t size);
  247075             : #endif
  247076             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  247077             :           void operator delete (void* pointer, size_t size);
  247078             : 
  247079             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  247080         166 :           void operator delete (void* pointer)
  247081             :              {
  247082             :             // This is the generated delete operator...
  247083         166 :                SgOrOp::operator delete (pointer,sizeof(SgOrOp));
  247084             :              }
  247085             : 
  247086             :       /*! \brief Returns the total number of IR nodes of this type */
  247087             :           static size_t numberOfNodes();
  247088             : 
  247089             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  247090             :           static size_t memoryUsage();
  247091             : 
  247092             :       // End of scope which started in IR nodes specific code 
  247093             :       /* */
  247094             : 
  247095             :       /* name Internal Functions
  247096             :           \brief Internal functions ... incomplete-documentation
  247097             : 
  247098             :           These functions have been made public as part of the design, but they are suggested for internal use 
  247099             :           or by particularly knowledgeable users for specialized tools or applications.
  247100             : 
  247101             :           \internal We could not make these private because they are required by user for special purposes. And 
  247102             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  247103             :          
  247104             :        */
  247105             : 
  247106             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  247107             :        // overridden in every class by *generated* implementation
  247108             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  247109             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  247110             :        // MS: 06/28/02 container of names of variables or container indices 
  247111             :        // used used in the traversal to access AST successor nodes
  247112             :        // overridden in every class by *generated* implementation
  247113             :       /*! \brief container of names of variables or container indices used used in the traversal
  247114             :           to access AST successor nodes overridden in every class by *generated* implementation */
  247115             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  247116             : 
  247117             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  247118             :        // than all the vector copies. The implementation for these functions is generated for each class.
  247119             :       /*! \brief return number of children in the traversal successor list */
  247120             :           virtual size_t get_numberOfTraversalSuccessors() override;
  247121             :       /*! \brief index-based access to traversal successors by index number */
  247122             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  247123             :       /*! \brief index-based access to traversal successors by child node */
  247124             :           virtual size_t get_childIndex(SgNode *child) override;
  247125             : 
  247126             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  247127             :        // MS: 08/16/2002 method for generating RTI information
  247128             :       /*! \brief return C++ Runtime-Time-Information */
  247129             :           virtual RTIReturnType roseRTI() override;
  247130             : #endif
  247131             :       /* */
  247132             : 
  247133             : 
  247134             : 
  247135             :       /* name Deprecated Functions
  247136             :           \brief Deprecated functions ... incomplete-documentation
  247137             : 
  247138             :           These functions have been deprecated from use.
  247139             :        */
  247140             :       /* */
  247141             : 
  247142             :       /*! returns a C style string (char*) representing the class name */
  247143             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  247144             : 
  247145             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  247146             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  247147             : #if 0
  247148             :       /*! returns old style Sage II enum values */
  247149             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  247150             :       /*! returns old style Sage II enum values */
  247151             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  247152             : #endif
  247153             :       /* */
  247154             : 
  247155             : 
  247156             : 
  247157             : 
  247158             :      public:
  247159             :       /* name Traversal Support Functions
  247160             :           \brief Traversal support functions ... incomplete-documentation
  247161             : 
  247162             :           These functions have been made public as part of the design, but they are suggested for internal use 
  247163             :           or by particularly knowledgable users for specialized tools or applications.
  247164             :        */
  247165             :       /* */
  247166             : 
  247167             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  247168             :        // (inferior to ROSE traversal mechanism, experimental).
  247169             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  247170             :        */
  247171             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  247172             : 
  247173             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  247174             :       /*! \brief support for the classic visitor pattern done in GoF */
  247175             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  247176             : 
  247177             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  247178             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  247179             :        */
  247180             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  247181             : 
  247182             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  247183             :        */
  247184             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  247185             : 
  247186             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  247187             :        // This traversal helps support internal tools that call static member functions.
  247188             :        // note: this function operates on the memory pools.
  247189             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  247190             :        */
  247191             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  247192             :       /* */
  247193             : 
  247194             : 
  247195             :      public:
  247196             :       /* name Memory Allocation Functions
  247197             :           \brief Memory allocations functions ... incomplete-documentation
  247198             : 
  247199             :           These functions have been made public as part of the design, but they are suggested for internal use 
  247200             :           or by particularly knowledgable users for specialized tools or applications.
  247201             :        */
  247202             :       /* */
  247203             : 
  247204             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  247205             : 
  247206             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  247207             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  247208             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  247209             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  247210             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  247211             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  247212             :           being used with the AST File I/O mechanism.
  247213             :        */
  247214             :           virtual bool isInMemoryPool() override;
  247215             : 
  247216             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  247217             : 
  247218             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  247219             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  247220             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  247221             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  247222             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  247223             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  247224             :           being used with the AST File I/O mechanism.
  247225             :        */
  247226             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  247227             : 
  247228             :       // DQ (4/30/2006): Modified to be a const function.
  247229             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  247230             : 
  247231             :           This functions is part of general support for many possible tools to operate 
  247232             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  247233             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  247234             :           less than the set of pointers used by the AST file I/O. This is part of
  247235             :           work implemented by Andreas, and support tools such as the AST graph generation.
  247236             : 
  247237             :           \warning This function can return unexpected data members and thus the 
  247238             :                    order and the number of elements is unpredicable and subject 
  247239             :                    to change.
  247240             : 
  247241             :           \returns STL vector of pairs of SgNode* and strings
  247242             :        */
  247243             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  247244             : 
  247245             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  247246             : 
  247247             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  247248             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  247249             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  247250             : 
  247251             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  247252             :                    and subject to change.
  247253             :        */
  247254             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  247255             : 
  247256             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  247257             : 
  247258             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  247259             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  247260             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  247261             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  247262             : 
  247263             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  247264             : 
  247265             :           \returns long
  247266             :        */
  247267             :           virtual long getChildIndex( SgNode* childNode ) const override;
  247268             : 
  247269             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  247270             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  247271             :       /* \brief Constructor for use by AST File I/O Mechanism
  247272             : 
  247273             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  247274             :           which obtained via fast binary file I/O from disk.
  247275             :        */
  247276             :        // SgOrOp( SgOrOpStorageClass& source );
  247277             : 
  247278             : 
  247279             : 
  247280             : 
  247281             : 
  247282             :  // JH (10/24/2005): methods added to support the ast file IO
  247283             :     private:
  247284             : 
  247285             :       /* name AST Memory Allocation Support Functions
  247286             :           \brief Memory allocations support....
  247287             : 
  247288             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  247289             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  247290             :           and support the AST File I/O Mechanism.
  247291             :        */
  247292             :       /* */
  247293             : 
  247294             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  247295             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  247296             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  247297             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  247298             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  247299             :           a correspinding one in the AST_FILE_IO class!
  247300             :        */
  247301             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  247302             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  247303             :       /* \brief Typedef used for low level memory access.
  247304             :        */
  247305             :        // typedef unsigned char* TestType;
  247306             : 
  247307             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  247308             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  247309             :       /* \brief Typedef used to hold memory addresses as values.
  247310             :        */
  247311             :        // typedef unsigned long  AddressType;
  247312             : 
  247313             : 
  247314             : 
  247315             :        // necessary, to have direct access to the p_freepointer and the private methods !
  247316             :       /*! \brief friend class declaration to support AST File I/O */
  247317             :           friend class AST_FILE_IO;
  247318             : 
  247319             :       /*! \brief friend class declaration to support AST File I/O */
  247320             :           friend class SgOrOpStorageClass;
  247321             : 
  247322             :       /*! \brief friend class declaration to support AST File I/O */
  247323             :           friend class AstSpecificDataManagingClass;
  247324             : 
  247325             :       /*! \brief friend class declaration to support AST File I/O */
  247326             :           friend class AstSpecificDataManagingClassStorageClass;
  247327             :     public:
  247328             :       /*! \brief IR node constructor to support AST File I/O */
  247329             :           SgOrOp( const SgOrOpStorageClass& source );
  247330             : 
  247331             :  // private: // JJW hack
  247332             :        /*
  247333             :           name AST Memory Allocation Support Variables
  247334             :           Memory allocations support variables 
  247335             : 
  247336             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  247337             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  247338             :           and support the AST File I/O Mechanism.
  247339             :        */
  247340             :       /* */
  247341             : 
  247342             :     public:
  247343             : 
  247344             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  247345             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  247346             :       // virtual SgNode* addRegExpAttribute();
  247347             :       /*! \brief Support for AST matching using regular expression.
  247348             : 
  247349             :           This support is incomplete and the subject of current research to define 
  247350             :           RegEx trees to support inexact matching.
  247351             :        */
  247352             :           SgOrOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  247353             : 
  247354             : // *** COMMON CODE SECTION ENDS HERE ***
  247355             : 
  247356             : 
  247357             : // End of memberFunctionString
  247358             : // Start of memberFunctionString
  247359             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  247360             : 
  247361             :      // the generated cast function
  247362             :      // friend ROSE_DLL_API SgOrOp* isSgOrOp ( SgNode* s );
  247363             : 
  247364             :           typedef SgBinaryOp base_node_type;
  247365             : 
  247366             : 
  247367             : // End of memberFunctionString
  247368             : // Start of memberFunctionString
  247369             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  247370             : 
  247371             :           void post_construction_initialization() override;
  247372             : 
  247373             : 
  247374             : // End of memberFunctionString
  247375             : // Start of memberFunctionString
  247376             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  247377             : 
  247378           0 :           int precedence() const override { return  4; }
  247379             : 
  247380             : 
  247381             : // End of memberFunctionString
  247382             : 
  247383             : 
  247384             :      public: 
  247385             :          virtual ~SgOrOp();
  247386             : 
  247387             : 
  247388             :      public: 
  247389             :          SgOrOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  247390             :          SgOrOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  247391             : 
  247392             :     protected:
  247393             : 
  247394             :     friend struct Rose::Traits::generated::describe_node_t<SgOrOp>;
  247395             : 
  247396             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247397             : 
  247398             : 
  247399             :    };
  247400             : #endif
  247401             : 
  247402             : // postdeclarations for SgOrOp
  247403             : 
  247404             : /* #line 247405 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247405             : 
  247406             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  247407             : 
  247408             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247409             : 
  247410             : 
  247411             : /* #line 247412 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247412             : 
  247413             : 
  247414             : 
  247415             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247416             : 
  247417             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  247418             : //      This code is automatically generated for each 
  247419             : //      terminal and non-terminal within the defined 
  247420             : //      grammar.  There is a simple way to change the 
  247421             : //      code to fix bugs etc.  See the ROSE README file
  247422             : //      for directions.
  247423             : 
  247424             : // tps: (02/22/2010): Adding DLL export requirements
  247425             : #include "rosedll.h"
  247426             : 
  247427             : // predeclarations for SgBitXorOp
  247428             : 
  247429             : /* #line 247430 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247430             : 
  247431             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  247432             : 
  247433             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247434             : 
  247435             : #if 1
  247436             : // Class Definition for SgBitXorOp
  247437             : class ROSE_DLL_API SgBitXorOp  : public SgBinaryOp
  247438             :    {
  247439             :      public:
  247440             : 
  247441             : 
  247442             : /* #line 247443 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247443             : 
  247444             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  247445             : // Start of memberFunctionString
  247446             : /* #line 935 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  247447             : 
  247448             : 
  247449             : 
  247450             : // End of memberFunctionString
  247451             : // Start of memberFunctionString
  247452             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  247453             : 
  247454             : // *** COMMON CODE SECTION BEGINS HERE ***
  247455             : 
  247456             :     public:
  247457             : 
  247458             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  247459             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  247460             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  247461             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  247462             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  247463             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  247464             : 
  247465             :       /*! \brief returns a string representing the class name */
  247466             :           virtual std::string class_name() const override;
  247467             : 
  247468             :       /*! \brief returns new style SageIII enum values */
  247469             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  247470             : 
  247471             :       /*! \brief static variant value */
  247472             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  247473             :        // static const VariantT static_variant = V_SgBitXorOp;
  247474             :           enum { static_variant = V_SgBitXorOp };
  247475             : 
  247476             :        /* the generated cast function */
  247477             :       /*! \brief Casts pointer from base class to derived class */
  247478             :           ROSE_DLL_API friend       SgBitXorOp* isSgBitXorOp(       SgNode * s );
  247479             : 
  247480             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  247481             :           ROSE_DLL_API friend const SgBitXorOp* isSgBitXorOp( const SgNode * s );
  247482             : 
  247483             :      // ******************************************
  247484             :      // * Memory Pool / New / Delete
  247485             :      // ******************************************
  247486             : 
  247487             :      public:
  247488             :           /// \private
  247489             :           static const unsigned pool_size; //
  247490             :           /// \private
  247491             :           static std::vector<unsigned char *> pools; //
  247492             :           /// \private
  247493             :           static SgBitXorOp * next_node; // 
  247494             : 
  247495             :           /// \private
  247496             :           static unsigned long initializeStorageClassArray(SgBitXorOpStorageClass *); //
  247497             : 
  247498             :           /// \private
  247499             :           static void clearMemoryPool(); //
  247500             :           static void deleteMemoryPool(); //
  247501             : 
  247502             :           /// \private
  247503             :           static void extendMemoryPoolForFileIO(); //
  247504             : 
  247505             :           /// \private
  247506             :           static SgBitXorOp * getPointerFromGlobalIndex(unsigned long); //
  247507             :           /// \private
  247508             :           static SgBitXorOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  247509             : 
  247510             :           /// \private
  247511             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  247512             :           /// \private
  247513             :           static void resetValidFreepointers(); //
  247514             :           /// \private
  247515             :           static unsigned long getNumberOfLastValidPointer(); //
  247516             : 
  247517             : 
  247518             : #if defined(INLINE_FUNCTIONS)
  247519             :       /*! \brief returns pointer to newly allocated IR node */
  247520             :           inline void *operator new (size_t size);
  247521             : #else
  247522             :       /*! \brief returns pointer to newly allocated IR node */
  247523             :           void *operator new (size_t size);
  247524             : #endif
  247525             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  247526             :           void operator delete (void* pointer, size_t size);
  247527             : 
  247528             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  247529          12 :           void operator delete (void* pointer)
  247530             :              {
  247531             :             // This is the generated delete operator...
  247532          12 :                SgBitXorOp::operator delete (pointer,sizeof(SgBitXorOp));
  247533             :              }
  247534             : 
  247535             :       /*! \brief Returns the total number of IR nodes of this type */
  247536             :           static size_t numberOfNodes();
  247537             : 
  247538             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  247539             :           static size_t memoryUsage();
  247540             : 
  247541             :       // End of scope which started in IR nodes specific code 
  247542             :       /* */
  247543             : 
  247544             :       /* name Internal Functions
  247545             :           \brief Internal functions ... incomplete-documentation
  247546             : 
  247547             :           These functions have been made public as part of the design, but they are suggested for internal use 
  247548             :           or by particularly knowledgeable users for specialized tools or applications.
  247549             : 
  247550             :           \internal We could not make these private because they are required by user for special purposes. And 
  247551             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  247552             :          
  247553             :        */
  247554             : 
  247555             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  247556             :        // overridden in every class by *generated* implementation
  247557             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  247558             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  247559             :        // MS: 06/28/02 container of names of variables or container indices 
  247560             :        // used used in the traversal to access AST successor nodes
  247561             :        // overridden in every class by *generated* implementation
  247562             :       /*! \brief container of names of variables or container indices used used in the traversal
  247563             :           to access AST successor nodes overridden in every class by *generated* implementation */
  247564             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  247565             : 
  247566             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  247567             :        // than all the vector copies. The implementation for these functions is generated for each class.
  247568             :       /*! \brief return number of children in the traversal successor list */
  247569             :           virtual size_t get_numberOfTraversalSuccessors() override;
  247570             :       /*! \brief index-based access to traversal successors by index number */
  247571             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  247572             :       /*! \brief index-based access to traversal successors by child node */
  247573             :           virtual size_t get_childIndex(SgNode *child) override;
  247574             : 
  247575             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  247576             :        // MS: 08/16/2002 method for generating RTI information
  247577             :       /*! \brief return C++ Runtime-Time-Information */
  247578             :           virtual RTIReturnType roseRTI() override;
  247579             : #endif
  247580             :       /* */
  247581             : 
  247582             : 
  247583             : 
  247584             :       /* name Deprecated Functions
  247585             :           \brief Deprecated functions ... incomplete-documentation
  247586             : 
  247587             :           These functions have been deprecated from use.
  247588             :        */
  247589             :       /* */
  247590             : 
  247591             :       /*! returns a C style string (char*) representing the class name */
  247592             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  247593             : 
  247594             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  247595             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  247596             : #if 0
  247597             :       /*! returns old style Sage II enum values */
  247598             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  247599             :       /*! returns old style Sage II enum values */
  247600             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  247601             : #endif
  247602             :       /* */
  247603             : 
  247604             : 
  247605             : 
  247606             : 
  247607             :      public:
  247608             :       /* name Traversal Support Functions
  247609             :           \brief Traversal support functions ... incomplete-documentation
  247610             : 
  247611             :           These functions have been made public as part of the design, but they are suggested for internal use 
  247612             :           or by particularly knowledgable users for specialized tools or applications.
  247613             :        */
  247614             :       /* */
  247615             : 
  247616             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  247617             :        // (inferior to ROSE traversal mechanism, experimental).
  247618             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  247619             :        */
  247620             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  247621             : 
  247622             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  247623             :       /*! \brief support for the classic visitor pattern done in GoF */
  247624             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  247625             : 
  247626             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  247627             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  247628             :        */
  247629             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  247630             : 
  247631             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  247632             :        */
  247633             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  247634             : 
  247635             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  247636             :        // This traversal helps support internal tools that call static member functions.
  247637             :        // note: this function operates on the memory pools.
  247638             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  247639             :        */
  247640             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  247641             :       /* */
  247642             : 
  247643             : 
  247644             :      public:
  247645             :       /* name Memory Allocation Functions
  247646             :           \brief Memory allocations functions ... incomplete-documentation
  247647             : 
  247648             :           These functions have been made public as part of the design, but they are suggested for internal use 
  247649             :           or by particularly knowledgable users for specialized tools or applications.
  247650             :        */
  247651             :       /* */
  247652             : 
  247653             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  247654             : 
  247655             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  247656             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  247657             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  247658             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  247659             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  247660             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  247661             :           being used with the AST File I/O mechanism.
  247662             :        */
  247663             :           virtual bool isInMemoryPool() override;
  247664             : 
  247665             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  247666             : 
  247667             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  247668             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  247669             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  247670             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  247671             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  247672             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  247673             :           being used with the AST File I/O mechanism.
  247674             :        */
  247675             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  247676             : 
  247677             :       // DQ (4/30/2006): Modified to be a const function.
  247678             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  247679             : 
  247680             :           This functions is part of general support for many possible tools to operate 
  247681             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  247682             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  247683             :           less than the set of pointers used by the AST file I/O. This is part of
  247684             :           work implemented by Andreas, and support tools such as the AST graph generation.
  247685             : 
  247686             :           \warning This function can return unexpected data members and thus the 
  247687             :                    order and the number of elements is unpredicable and subject 
  247688             :                    to change.
  247689             : 
  247690             :           \returns STL vector of pairs of SgNode* and strings
  247691             :        */
  247692             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  247693             : 
  247694             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  247695             : 
  247696             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  247697             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  247698             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  247699             : 
  247700             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  247701             :                    and subject to change.
  247702             :        */
  247703             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  247704             : 
  247705             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  247706             : 
  247707             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  247708             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  247709             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  247710             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  247711             : 
  247712             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  247713             : 
  247714             :           \returns long
  247715             :        */
  247716             :           virtual long getChildIndex( SgNode* childNode ) const override;
  247717             : 
  247718             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  247719             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  247720             :       /* \brief Constructor for use by AST File I/O Mechanism
  247721             : 
  247722             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  247723             :           which obtained via fast binary file I/O from disk.
  247724             :        */
  247725             :        // SgBitXorOp( SgBitXorOpStorageClass& source );
  247726             : 
  247727             : 
  247728             : 
  247729             : 
  247730             : 
  247731             :  // JH (10/24/2005): methods added to support the ast file IO
  247732             :     private:
  247733             : 
  247734             :       /* name AST Memory Allocation Support Functions
  247735             :           \brief Memory allocations support....
  247736             : 
  247737             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  247738             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  247739             :           and support the AST File I/O Mechanism.
  247740             :        */
  247741             :       /* */
  247742             : 
  247743             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  247744             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  247745             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  247746             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  247747             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  247748             :           a correspinding one in the AST_FILE_IO class!
  247749             :        */
  247750             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  247751             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  247752             :       /* \brief Typedef used for low level memory access.
  247753             :        */
  247754             :        // typedef unsigned char* TestType;
  247755             : 
  247756             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  247757             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  247758             :       /* \brief Typedef used to hold memory addresses as values.
  247759             :        */
  247760             :        // typedef unsigned long  AddressType;
  247761             : 
  247762             : 
  247763             : 
  247764             :        // necessary, to have direct access to the p_freepointer and the private methods !
  247765             :       /*! \brief friend class declaration to support AST File I/O */
  247766             :           friend class AST_FILE_IO;
  247767             : 
  247768             :       /*! \brief friend class declaration to support AST File I/O */
  247769             :           friend class SgBitXorOpStorageClass;
  247770             : 
  247771             :       /*! \brief friend class declaration to support AST File I/O */
  247772             :           friend class AstSpecificDataManagingClass;
  247773             : 
  247774             :       /*! \brief friend class declaration to support AST File I/O */
  247775             :           friend class AstSpecificDataManagingClassStorageClass;
  247776             :     public:
  247777             :       /*! \brief IR node constructor to support AST File I/O */
  247778             :           SgBitXorOp( const SgBitXorOpStorageClass& source );
  247779             : 
  247780             :  // private: // JJW hack
  247781             :        /*
  247782             :           name AST Memory Allocation Support Variables
  247783             :           Memory allocations support variables 
  247784             : 
  247785             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  247786             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  247787             :           and support the AST File I/O Mechanism.
  247788             :        */
  247789             :       /* */
  247790             : 
  247791             :     public:
  247792             : 
  247793             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  247794             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  247795             :       // virtual SgNode* addRegExpAttribute();
  247796             :       /*! \brief Support for AST matching using regular expression.
  247797             : 
  247798             :           This support is incomplete and the subject of current research to define 
  247799             :           RegEx trees to support inexact matching.
  247800             :        */
  247801             :           SgBitXorOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  247802             : 
  247803             : // *** COMMON CODE SECTION ENDS HERE ***
  247804             : 
  247805             : 
  247806             : // End of memberFunctionString
  247807             : // Start of memberFunctionString
  247808             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  247809             : 
  247810             :      // the generated cast function
  247811             :      // friend ROSE_DLL_API SgBitXorOp* isSgBitXorOp ( SgNode* s );
  247812             : 
  247813             :           typedef SgBinaryOp base_node_type;
  247814             : 
  247815             : 
  247816             : // End of memberFunctionString
  247817             : // Start of memberFunctionString
  247818             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  247819             : 
  247820             :           void post_construction_initialization() override;
  247821             : 
  247822             : 
  247823             : // End of memberFunctionString
  247824             : // Start of memberFunctionString
  247825             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  247826             : 
  247827           0 :           int precedence() const override { return  7; }
  247828             : 
  247829             : 
  247830             : // End of memberFunctionString
  247831             : 
  247832             : 
  247833             :      public: 
  247834             :          virtual ~SgBitXorOp();
  247835             : 
  247836             : 
  247837             :      public: 
  247838             :          SgBitXorOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  247839             :          SgBitXorOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  247840             : 
  247841             :     protected:
  247842             : 
  247843             :     friend struct Rose::Traits::generated::describe_node_t<SgBitXorOp>;
  247844             : 
  247845             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247846             : 
  247847             : 
  247848             :    };
  247849             : #endif
  247850             : 
  247851             : // postdeclarations for SgBitXorOp
  247852             : 
  247853             : /* #line 247854 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247854             : 
  247855             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  247856             : 
  247857             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247858             : 
  247859             : 
  247860             : /* #line 247861 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247861             : 
  247862             : 
  247863             : 
  247864             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247865             : 
  247866             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  247867             : //      This code is automatically generated for each 
  247868             : //      terminal and non-terminal within the defined 
  247869             : //      grammar.  There is a simple way to change the 
  247870             : //      code to fix bugs etc.  See the ROSE README file
  247871             : //      for directions.
  247872             : 
  247873             : // tps: (02/22/2010): Adding DLL export requirements
  247874             : #include "rosedll.h"
  247875             : 
  247876             : // predeclarations for SgBitAndOp
  247877             : 
  247878             : /* #line 247879 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247879             : 
  247880             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  247881             : 
  247882             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  247883             : 
  247884             : #if 1
  247885             : // Class Definition for SgBitAndOp
  247886             : class ROSE_DLL_API SgBitAndOp  : public SgBinaryOp
  247887             :    {
  247888             :      public:
  247889             : 
  247890             : 
  247891             : /* #line 247892 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  247892             : 
  247893             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  247894             : // Start of memberFunctionString
  247895             : /* #line 938 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  247896             : 
  247897             : 
  247898             : 
  247899             : // End of memberFunctionString
  247900             : // Start of memberFunctionString
  247901             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  247902             : 
  247903             : // *** COMMON CODE SECTION BEGINS HERE ***
  247904             : 
  247905             :     public:
  247906             : 
  247907             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  247908             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  247909             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  247910             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  247911             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  247912             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  247913             : 
  247914             :       /*! \brief returns a string representing the class name */
  247915             :           virtual std::string class_name() const override;
  247916             : 
  247917             :       /*! \brief returns new style SageIII enum values */
  247918             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  247919             : 
  247920             :       /*! \brief static variant value */
  247921             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  247922             :        // static const VariantT static_variant = V_SgBitAndOp;
  247923             :           enum { static_variant = V_SgBitAndOp };
  247924             : 
  247925             :        /* the generated cast function */
  247926             :       /*! \brief Casts pointer from base class to derived class */
  247927             :           ROSE_DLL_API friend       SgBitAndOp* isSgBitAndOp(       SgNode * s );
  247928             : 
  247929             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  247930             :           ROSE_DLL_API friend const SgBitAndOp* isSgBitAndOp( const SgNode * s );
  247931             : 
  247932             :      // ******************************************
  247933             :      // * Memory Pool / New / Delete
  247934             :      // ******************************************
  247935             : 
  247936             :      public:
  247937             :           /// \private
  247938             :           static const unsigned pool_size; //
  247939             :           /// \private
  247940             :           static std::vector<unsigned char *> pools; //
  247941             :           /// \private
  247942             :           static SgBitAndOp * next_node; // 
  247943             : 
  247944             :           /// \private
  247945             :           static unsigned long initializeStorageClassArray(SgBitAndOpStorageClass *); //
  247946             : 
  247947             :           /// \private
  247948             :           static void clearMemoryPool(); //
  247949             :           static void deleteMemoryPool(); //
  247950             : 
  247951             :           /// \private
  247952             :           static void extendMemoryPoolForFileIO(); //
  247953             : 
  247954             :           /// \private
  247955             :           static SgBitAndOp * getPointerFromGlobalIndex(unsigned long); //
  247956             :           /// \private
  247957             :           static SgBitAndOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  247958             : 
  247959             :           /// \private
  247960             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  247961             :           /// \private
  247962             :           static void resetValidFreepointers(); //
  247963             :           /// \private
  247964             :           static unsigned long getNumberOfLastValidPointer(); //
  247965             : 
  247966             : 
  247967             : #if defined(INLINE_FUNCTIONS)
  247968             :       /*! \brief returns pointer to newly allocated IR node */
  247969             :           inline void *operator new (size_t size);
  247970             : #else
  247971             :       /*! \brief returns pointer to newly allocated IR node */
  247972             :           void *operator new (size_t size);
  247973             : #endif
  247974             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  247975             :           void operator delete (void* pointer, size_t size);
  247976             : 
  247977             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  247978          40 :           void operator delete (void* pointer)
  247979             :              {
  247980             :             // This is the generated delete operator...
  247981          40 :                SgBitAndOp::operator delete (pointer,sizeof(SgBitAndOp));
  247982             :              }
  247983             : 
  247984             :       /*! \brief Returns the total number of IR nodes of this type */
  247985             :           static size_t numberOfNodes();
  247986             : 
  247987             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  247988             :           static size_t memoryUsage();
  247989             : 
  247990             :       // End of scope which started in IR nodes specific code 
  247991             :       /* */
  247992             : 
  247993             :       /* name Internal Functions
  247994             :           \brief Internal functions ... incomplete-documentation
  247995             : 
  247996             :           These functions have been made public as part of the design, but they are suggested for internal use 
  247997             :           or by particularly knowledgeable users for specialized tools or applications.
  247998             : 
  247999             :           \internal We could not make these private because they are required by user for special purposes. And 
  248000             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  248001             :          
  248002             :        */
  248003             : 
  248004             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  248005             :        // overridden in every class by *generated* implementation
  248006             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  248007             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  248008             :        // MS: 06/28/02 container of names of variables or container indices 
  248009             :        // used used in the traversal to access AST successor nodes
  248010             :        // overridden in every class by *generated* implementation
  248011             :       /*! \brief container of names of variables or container indices used used in the traversal
  248012             :           to access AST successor nodes overridden in every class by *generated* implementation */
  248013             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  248014             : 
  248015             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  248016             :        // than all the vector copies. The implementation for these functions is generated for each class.
  248017             :       /*! \brief return number of children in the traversal successor list */
  248018             :           virtual size_t get_numberOfTraversalSuccessors() override;
  248019             :       /*! \brief index-based access to traversal successors by index number */
  248020             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  248021             :       /*! \brief index-based access to traversal successors by child node */
  248022             :           virtual size_t get_childIndex(SgNode *child) override;
  248023             : 
  248024             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  248025             :        // MS: 08/16/2002 method for generating RTI information
  248026             :       /*! \brief return C++ Runtime-Time-Information */
  248027             :           virtual RTIReturnType roseRTI() override;
  248028             : #endif
  248029             :       /* */
  248030             : 
  248031             : 
  248032             : 
  248033             :       /* name Deprecated Functions
  248034             :           \brief Deprecated functions ... incomplete-documentation
  248035             : 
  248036             :           These functions have been deprecated from use.
  248037             :        */
  248038             :       /* */
  248039             : 
  248040             :       /*! returns a C style string (char*) representing the class name */
  248041             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  248042             : 
  248043             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  248044             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  248045             : #if 0
  248046             :       /*! returns old style Sage II enum values */
  248047             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  248048             :       /*! returns old style Sage II enum values */
  248049             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  248050             : #endif
  248051             :       /* */
  248052             : 
  248053             : 
  248054             : 
  248055             : 
  248056             :      public:
  248057             :       /* name Traversal Support Functions
  248058             :           \brief Traversal support functions ... incomplete-documentation
  248059             : 
  248060             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248061             :           or by particularly knowledgable users for specialized tools or applications.
  248062             :        */
  248063             :       /* */
  248064             : 
  248065             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  248066             :        // (inferior to ROSE traversal mechanism, experimental).
  248067             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  248068             :        */
  248069             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  248070             : 
  248071             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  248072             :       /*! \brief support for the classic visitor pattern done in GoF */
  248073             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  248074             : 
  248075             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  248076             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  248077             :        */
  248078             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  248079             : 
  248080             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  248081             :        */
  248082             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  248083             : 
  248084             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  248085             :        // This traversal helps support internal tools that call static member functions.
  248086             :        // note: this function operates on the memory pools.
  248087             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  248088             :        */
  248089             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  248090             :       /* */
  248091             : 
  248092             : 
  248093             :      public:
  248094             :       /* name Memory Allocation Functions
  248095             :           \brief Memory allocations functions ... incomplete-documentation
  248096             : 
  248097             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248098             :           or by particularly knowledgable users for specialized tools or applications.
  248099             :        */
  248100             :       /* */
  248101             : 
  248102             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  248103             : 
  248104             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  248105             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  248106             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  248107             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  248108             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  248109             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  248110             :           being used with the AST File I/O mechanism.
  248111             :        */
  248112             :           virtual bool isInMemoryPool() override;
  248113             : 
  248114             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  248115             : 
  248116             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  248117             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  248118             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  248119             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  248120             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  248121             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  248122             :           being used with the AST File I/O mechanism.
  248123             :        */
  248124             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  248125             : 
  248126             :       // DQ (4/30/2006): Modified to be a const function.
  248127             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  248128             : 
  248129             :           This functions is part of general support for many possible tools to operate 
  248130             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  248131             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  248132             :           less than the set of pointers used by the AST file I/O. This is part of
  248133             :           work implemented by Andreas, and support tools such as the AST graph generation.
  248134             : 
  248135             :           \warning This function can return unexpected data members and thus the 
  248136             :                    order and the number of elements is unpredicable and subject 
  248137             :                    to change.
  248138             : 
  248139             :           \returns STL vector of pairs of SgNode* and strings
  248140             :        */
  248141             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  248142             : 
  248143             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  248144             : 
  248145             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  248146             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  248147             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  248148             : 
  248149             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  248150             :                    and subject to change.
  248151             :        */
  248152             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  248153             : 
  248154             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  248155             : 
  248156             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  248157             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  248158             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  248159             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  248160             : 
  248161             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  248162             : 
  248163             :           \returns long
  248164             :        */
  248165             :           virtual long getChildIndex( SgNode* childNode ) const override;
  248166             : 
  248167             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  248168             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  248169             :       /* \brief Constructor for use by AST File I/O Mechanism
  248170             : 
  248171             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  248172             :           which obtained via fast binary file I/O from disk.
  248173             :        */
  248174             :        // SgBitAndOp( SgBitAndOpStorageClass& source );
  248175             : 
  248176             : 
  248177             : 
  248178             : 
  248179             : 
  248180             :  // JH (10/24/2005): methods added to support the ast file IO
  248181             :     private:
  248182             : 
  248183             :       /* name AST Memory Allocation Support Functions
  248184             :           \brief Memory allocations support....
  248185             : 
  248186             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  248187             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  248188             :           and support the AST File I/O Mechanism.
  248189             :        */
  248190             :       /* */
  248191             : 
  248192             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  248193             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  248194             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  248195             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  248196             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  248197             :           a correspinding one in the AST_FILE_IO class!
  248198             :        */
  248199             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  248200             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  248201             :       /* \brief Typedef used for low level memory access.
  248202             :        */
  248203             :        // typedef unsigned char* TestType;
  248204             : 
  248205             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  248206             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  248207             :       /* \brief Typedef used to hold memory addresses as values.
  248208             :        */
  248209             :        // typedef unsigned long  AddressType;
  248210             : 
  248211             : 
  248212             : 
  248213             :        // necessary, to have direct access to the p_freepointer and the private methods !
  248214             :       /*! \brief friend class declaration to support AST File I/O */
  248215             :           friend class AST_FILE_IO;
  248216             : 
  248217             :       /*! \brief friend class declaration to support AST File I/O */
  248218             :           friend class SgBitAndOpStorageClass;
  248219             : 
  248220             :       /*! \brief friend class declaration to support AST File I/O */
  248221             :           friend class AstSpecificDataManagingClass;
  248222             : 
  248223             :       /*! \brief friend class declaration to support AST File I/O */
  248224             :           friend class AstSpecificDataManagingClassStorageClass;
  248225             :     public:
  248226             :       /*! \brief IR node constructor to support AST File I/O */
  248227             :           SgBitAndOp( const SgBitAndOpStorageClass& source );
  248228             : 
  248229             :  // private: // JJW hack
  248230             :        /*
  248231             :           name AST Memory Allocation Support Variables
  248232             :           Memory allocations support variables 
  248233             : 
  248234             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  248235             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  248236             :           and support the AST File I/O Mechanism.
  248237             :        */
  248238             :       /* */
  248239             : 
  248240             :     public:
  248241             : 
  248242             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  248243             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  248244             :       // virtual SgNode* addRegExpAttribute();
  248245             :       /*! \brief Support for AST matching using regular expression.
  248246             : 
  248247             :           This support is incomplete and the subject of current research to define 
  248248             :           RegEx trees to support inexact matching.
  248249             :        */
  248250             :           SgBitAndOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  248251             : 
  248252             : // *** COMMON CODE SECTION ENDS HERE ***
  248253             : 
  248254             : 
  248255             : // End of memberFunctionString
  248256             : // Start of memberFunctionString
  248257             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  248258             : 
  248259             :      // the generated cast function
  248260             :      // friend ROSE_DLL_API SgBitAndOp* isSgBitAndOp ( SgNode* s );
  248261             : 
  248262             :           typedef SgBinaryOp base_node_type;
  248263             : 
  248264             : 
  248265             : // End of memberFunctionString
  248266             : // Start of memberFunctionString
  248267             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  248268             : 
  248269             :           void post_construction_initialization() override;
  248270             : 
  248271             : 
  248272             : // End of memberFunctionString
  248273             : // Start of memberFunctionString
  248274             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  248275             : 
  248276           0 :           int precedence() const override { return  8; }
  248277             : 
  248278             : 
  248279             : // End of memberFunctionString
  248280             : 
  248281             : 
  248282             :      public: 
  248283             :          virtual ~SgBitAndOp();
  248284             : 
  248285             : 
  248286             :      public: 
  248287             :          SgBitAndOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  248288             :          SgBitAndOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  248289             : 
  248290             :     protected:
  248291             : 
  248292             :     friend struct Rose::Traits::generated::describe_node_t<SgBitAndOp>;
  248293             : 
  248294             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248295             : 
  248296             : 
  248297             :    };
  248298             : #endif
  248299             : 
  248300             : // postdeclarations for SgBitAndOp
  248301             : 
  248302             : /* #line 248303 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248303             : 
  248304             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  248305             : 
  248306             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248307             : 
  248308             : 
  248309             : /* #line 248310 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248310             : 
  248311             : 
  248312             : 
  248313             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248314             : 
  248315             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  248316             : //      This code is automatically generated for each 
  248317             : //      terminal and non-terminal within the defined 
  248318             : //      grammar.  There is a simple way to change the 
  248319             : //      code to fix bugs etc.  See the ROSE README file
  248320             : //      for directions.
  248321             : 
  248322             : // tps: (02/22/2010): Adding DLL export requirements
  248323             : #include "rosedll.h"
  248324             : 
  248325             : // predeclarations for SgBitOrOp
  248326             : 
  248327             : /* #line 248328 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248328             : 
  248329             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  248330             : 
  248331             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248332             : 
  248333             : #if 1
  248334             : // Class Definition for SgBitOrOp
  248335             : class ROSE_DLL_API SgBitOrOp  : public SgBinaryOp
  248336             :    {
  248337             :      public:
  248338             : 
  248339             : 
  248340             : /* #line 248341 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248341             : 
  248342             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  248343             : // Start of memberFunctionString
  248344             : /* #line 941 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  248345             : 
  248346             : 
  248347             : 
  248348             : // End of memberFunctionString
  248349             : // Start of memberFunctionString
  248350             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  248351             : 
  248352             : // *** COMMON CODE SECTION BEGINS HERE ***
  248353             : 
  248354             :     public:
  248355             : 
  248356             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  248357             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  248358             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  248359             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  248360             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  248361             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  248362             : 
  248363             :       /*! \brief returns a string representing the class name */
  248364             :           virtual std::string class_name() const override;
  248365             : 
  248366             :       /*! \brief returns new style SageIII enum values */
  248367             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  248368             : 
  248369             :       /*! \brief static variant value */
  248370             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  248371             :        // static const VariantT static_variant = V_SgBitOrOp;
  248372             :           enum { static_variant = V_SgBitOrOp };
  248373             : 
  248374             :        /* the generated cast function */
  248375             :       /*! \brief Casts pointer from base class to derived class */
  248376             :           ROSE_DLL_API friend       SgBitOrOp* isSgBitOrOp(       SgNode * s );
  248377             : 
  248378             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  248379             :           ROSE_DLL_API friend const SgBitOrOp* isSgBitOrOp( const SgNode * s );
  248380             : 
  248381             :      // ******************************************
  248382             :      // * Memory Pool / New / Delete
  248383             :      // ******************************************
  248384             : 
  248385             :      public:
  248386             :           /// \private
  248387             :           static const unsigned pool_size; //
  248388             :           /// \private
  248389             :           static std::vector<unsigned char *> pools; //
  248390             :           /// \private
  248391             :           static SgBitOrOp * next_node; // 
  248392             : 
  248393             :           /// \private
  248394             :           static unsigned long initializeStorageClassArray(SgBitOrOpStorageClass *); //
  248395             : 
  248396             :           /// \private
  248397             :           static void clearMemoryPool(); //
  248398             :           static void deleteMemoryPool(); //
  248399             : 
  248400             :           /// \private
  248401             :           static void extendMemoryPoolForFileIO(); //
  248402             : 
  248403             :           /// \private
  248404             :           static SgBitOrOp * getPointerFromGlobalIndex(unsigned long); //
  248405             :           /// \private
  248406             :           static SgBitOrOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  248407             : 
  248408             :           /// \private
  248409             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  248410             :           /// \private
  248411             :           static void resetValidFreepointers(); //
  248412             :           /// \private
  248413             :           static unsigned long getNumberOfLastValidPointer(); //
  248414             : 
  248415             : 
  248416             : #if defined(INLINE_FUNCTIONS)
  248417             :       /*! \brief returns pointer to newly allocated IR node */
  248418             :           inline void *operator new (size_t size);
  248419             : #else
  248420             :       /*! \brief returns pointer to newly allocated IR node */
  248421             :           void *operator new (size_t size);
  248422             : #endif
  248423             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  248424             :           void operator delete (void* pointer, size_t size);
  248425             : 
  248426             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  248427         150 :           void operator delete (void* pointer)
  248428             :              {
  248429             :             // This is the generated delete operator...
  248430         150 :                SgBitOrOp::operator delete (pointer,sizeof(SgBitOrOp));
  248431             :              }
  248432             : 
  248433             :       /*! \brief Returns the total number of IR nodes of this type */
  248434             :           static size_t numberOfNodes();
  248435             : 
  248436             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  248437             :           static size_t memoryUsage();
  248438             : 
  248439             :       // End of scope which started in IR nodes specific code 
  248440             :       /* */
  248441             : 
  248442             :       /* name Internal Functions
  248443             :           \brief Internal functions ... incomplete-documentation
  248444             : 
  248445             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248446             :           or by particularly knowledgeable users for specialized tools or applications.
  248447             : 
  248448             :           \internal We could not make these private because they are required by user for special purposes. And 
  248449             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  248450             :          
  248451             :        */
  248452             : 
  248453             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  248454             :        // overridden in every class by *generated* implementation
  248455             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  248456             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  248457             :        // MS: 06/28/02 container of names of variables or container indices 
  248458             :        // used used in the traversal to access AST successor nodes
  248459             :        // overridden in every class by *generated* implementation
  248460             :       /*! \brief container of names of variables or container indices used used in the traversal
  248461             :           to access AST successor nodes overridden in every class by *generated* implementation */
  248462             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  248463             : 
  248464             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  248465             :        // than all the vector copies. The implementation for these functions is generated for each class.
  248466             :       /*! \brief return number of children in the traversal successor list */
  248467             :           virtual size_t get_numberOfTraversalSuccessors() override;
  248468             :       /*! \brief index-based access to traversal successors by index number */
  248469             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  248470             :       /*! \brief index-based access to traversal successors by child node */
  248471             :           virtual size_t get_childIndex(SgNode *child) override;
  248472             : 
  248473             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  248474             :        // MS: 08/16/2002 method for generating RTI information
  248475             :       /*! \brief return C++ Runtime-Time-Information */
  248476             :           virtual RTIReturnType roseRTI() override;
  248477             : #endif
  248478             :       /* */
  248479             : 
  248480             : 
  248481             : 
  248482             :       /* name Deprecated Functions
  248483             :           \brief Deprecated functions ... incomplete-documentation
  248484             : 
  248485             :           These functions have been deprecated from use.
  248486             :        */
  248487             :       /* */
  248488             : 
  248489             :       /*! returns a C style string (char*) representing the class name */
  248490             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  248491             : 
  248492             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  248493             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  248494             : #if 0
  248495             :       /*! returns old style Sage II enum values */
  248496             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  248497             :       /*! returns old style Sage II enum values */
  248498             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  248499             : #endif
  248500             :       /* */
  248501             : 
  248502             : 
  248503             : 
  248504             : 
  248505             :      public:
  248506             :       /* name Traversal Support Functions
  248507             :           \brief Traversal support functions ... incomplete-documentation
  248508             : 
  248509             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248510             :           or by particularly knowledgable users for specialized tools or applications.
  248511             :        */
  248512             :       /* */
  248513             : 
  248514             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  248515             :        // (inferior to ROSE traversal mechanism, experimental).
  248516             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  248517             :        */
  248518             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  248519             : 
  248520             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  248521             :       /*! \brief support for the classic visitor pattern done in GoF */
  248522             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  248523             : 
  248524             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  248525             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  248526             :        */
  248527             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  248528             : 
  248529             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  248530             :        */
  248531             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  248532             : 
  248533             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  248534             :        // This traversal helps support internal tools that call static member functions.
  248535             :        // note: this function operates on the memory pools.
  248536             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  248537             :        */
  248538             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  248539             :       /* */
  248540             : 
  248541             : 
  248542             :      public:
  248543             :       /* name Memory Allocation Functions
  248544             :           \brief Memory allocations functions ... incomplete-documentation
  248545             : 
  248546             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248547             :           or by particularly knowledgable users for specialized tools or applications.
  248548             :        */
  248549             :       /* */
  248550             : 
  248551             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  248552             : 
  248553             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  248554             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  248555             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  248556             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  248557             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  248558             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  248559             :           being used with the AST File I/O mechanism.
  248560             :        */
  248561             :           virtual bool isInMemoryPool() override;
  248562             : 
  248563             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  248564             : 
  248565             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  248566             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  248567             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  248568             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  248569             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  248570             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  248571             :           being used with the AST File I/O mechanism.
  248572             :        */
  248573             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  248574             : 
  248575             :       // DQ (4/30/2006): Modified to be a const function.
  248576             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  248577             : 
  248578             :           This functions is part of general support for many possible tools to operate 
  248579             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  248580             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  248581             :           less than the set of pointers used by the AST file I/O. This is part of
  248582             :           work implemented by Andreas, and support tools such as the AST graph generation.
  248583             : 
  248584             :           \warning This function can return unexpected data members and thus the 
  248585             :                    order and the number of elements is unpredicable and subject 
  248586             :                    to change.
  248587             : 
  248588             :           \returns STL vector of pairs of SgNode* and strings
  248589             :        */
  248590             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  248591             : 
  248592             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  248593             : 
  248594             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  248595             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  248596             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  248597             : 
  248598             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  248599             :                    and subject to change.
  248600             :        */
  248601             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  248602             : 
  248603             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  248604             : 
  248605             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  248606             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  248607             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  248608             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  248609             : 
  248610             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  248611             : 
  248612             :           \returns long
  248613             :        */
  248614             :           virtual long getChildIndex( SgNode* childNode ) const override;
  248615             : 
  248616             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  248617             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  248618             :       /* \brief Constructor for use by AST File I/O Mechanism
  248619             : 
  248620             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  248621             :           which obtained via fast binary file I/O from disk.
  248622             :        */
  248623             :        // SgBitOrOp( SgBitOrOpStorageClass& source );
  248624             : 
  248625             : 
  248626             : 
  248627             : 
  248628             : 
  248629             :  // JH (10/24/2005): methods added to support the ast file IO
  248630             :     private:
  248631             : 
  248632             :       /* name AST Memory Allocation Support Functions
  248633             :           \brief Memory allocations support....
  248634             : 
  248635             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  248636             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  248637             :           and support the AST File I/O Mechanism.
  248638             :        */
  248639             :       /* */
  248640             : 
  248641             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  248642             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  248643             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  248644             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  248645             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  248646             :           a correspinding one in the AST_FILE_IO class!
  248647             :        */
  248648             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  248649             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  248650             :       /* \brief Typedef used for low level memory access.
  248651             :        */
  248652             :        // typedef unsigned char* TestType;
  248653             : 
  248654             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  248655             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  248656             :       /* \brief Typedef used to hold memory addresses as values.
  248657             :        */
  248658             :        // typedef unsigned long  AddressType;
  248659             : 
  248660             : 
  248661             : 
  248662             :        // necessary, to have direct access to the p_freepointer and the private methods !
  248663             :       /*! \brief friend class declaration to support AST File I/O */
  248664             :           friend class AST_FILE_IO;
  248665             : 
  248666             :       /*! \brief friend class declaration to support AST File I/O */
  248667             :           friend class SgBitOrOpStorageClass;
  248668             : 
  248669             :       /*! \brief friend class declaration to support AST File I/O */
  248670             :           friend class AstSpecificDataManagingClass;
  248671             : 
  248672             :       /*! \brief friend class declaration to support AST File I/O */
  248673             :           friend class AstSpecificDataManagingClassStorageClass;
  248674             :     public:
  248675             :       /*! \brief IR node constructor to support AST File I/O */
  248676             :           SgBitOrOp( const SgBitOrOpStorageClass& source );
  248677             : 
  248678             :  // private: // JJW hack
  248679             :        /*
  248680             :           name AST Memory Allocation Support Variables
  248681             :           Memory allocations support variables 
  248682             : 
  248683             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  248684             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  248685             :           and support the AST File I/O Mechanism.
  248686             :        */
  248687             :       /* */
  248688             : 
  248689             :     public:
  248690             : 
  248691             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  248692             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  248693             :       // virtual SgNode* addRegExpAttribute();
  248694             :       /*! \brief Support for AST matching using regular expression.
  248695             : 
  248696             :           This support is incomplete and the subject of current research to define 
  248697             :           RegEx trees to support inexact matching.
  248698             :        */
  248699             :           SgBitOrOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  248700             : 
  248701             : // *** COMMON CODE SECTION ENDS HERE ***
  248702             : 
  248703             : 
  248704             : // End of memberFunctionString
  248705             : // Start of memberFunctionString
  248706             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  248707             : 
  248708             :      // the generated cast function
  248709             :      // friend ROSE_DLL_API SgBitOrOp* isSgBitOrOp ( SgNode* s );
  248710             : 
  248711             :           typedef SgBinaryOp base_node_type;
  248712             : 
  248713             : 
  248714             : // End of memberFunctionString
  248715             : // Start of memberFunctionString
  248716             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  248717             : 
  248718             :           void post_construction_initialization() override;
  248719             : 
  248720             : 
  248721             : // End of memberFunctionString
  248722             : // Start of memberFunctionString
  248723             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  248724             : 
  248725           0 :           int precedence() const override { return  6; }
  248726             : 
  248727             : 
  248728             : // End of memberFunctionString
  248729             : 
  248730             : 
  248731             :      public: 
  248732             :          virtual ~SgBitOrOp();
  248733             : 
  248734             : 
  248735             :      public: 
  248736             :          SgBitOrOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  248737             :          SgBitOrOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  248738             : 
  248739             :     protected:
  248740             : 
  248741             :     friend struct Rose::Traits::generated::describe_node_t<SgBitOrOp>;
  248742             : 
  248743             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248744             : 
  248745             : 
  248746             :    };
  248747             : #endif
  248748             : 
  248749             : // postdeclarations for SgBitOrOp
  248750             : 
  248751             : /* #line 248752 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248752             : 
  248753             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  248754             : 
  248755             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248756             : 
  248757             : 
  248758             : /* #line 248759 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248759             : 
  248760             : 
  248761             : 
  248762             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248763             : 
  248764             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  248765             : //      This code is automatically generated for each 
  248766             : //      terminal and non-terminal within the defined 
  248767             : //      grammar.  There is a simple way to change the 
  248768             : //      code to fix bugs etc.  See the ROSE README file
  248769             : //      for directions.
  248770             : 
  248771             : // tps: (02/22/2010): Adding DLL export requirements
  248772             : #include "rosedll.h"
  248773             : 
  248774             : // predeclarations for SgBitEqvOp
  248775             : 
  248776             : /* #line 248777 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248777             : 
  248778             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  248779             : 
  248780             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  248781             : 
  248782             : #if 1
  248783             : // Class Definition for SgBitEqvOp
  248784             : class ROSE_DLL_API SgBitEqvOp  : public SgBinaryOp
  248785             :    {
  248786             :      public:
  248787             : 
  248788             : 
  248789             : /* #line 248790 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  248790             : 
  248791             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  248792             : // Start of memberFunctionString
  248793             : /* #line 945 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  248794             : 
  248795             : 
  248796             : 
  248797             : // End of memberFunctionString
  248798             : // Start of memberFunctionString
  248799             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  248800             : 
  248801             : // *** COMMON CODE SECTION BEGINS HERE ***
  248802             : 
  248803             :     public:
  248804             : 
  248805             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  248806             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  248807             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  248808             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  248809             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  248810             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  248811             : 
  248812             :       /*! \brief returns a string representing the class name */
  248813             :           virtual std::string class_name() const override;
  248814             : 
  248815             :       /*! \brief returns new style SageIII enum values */
  248816             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  248817             : 
  248818             :       /*! \brief static variant value */
  248819             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  248820             :        // static const VariantT static_variant = V_SgBitEqvOp;
  248821             :           enum { static_variant = V_SgBitEqvOp };
  248822             : 
  248823             :        /* the generated cast function */
  248824             :       /*! \brief Casts pointer from base class to derived class */
  248825             :           ROSE_DLL_API friend       SgBitEqvOp* isSgBitEqvOp(       SgNode * s );
  248826             : 
  248827             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  248828             :           ROSE_DLL_API friend const SgBitEqvOp* isSgBitEqvOp( const SgNode * s );
  248829             : 
  248830             :      // ******************************************
  248831             :      // * Memory Pool / New / Delete
  248832             :      // ******************************************
  248833             : 
  248834             :      public:
  248835             :           /// \private
  248836             :           static const unsigned pool_size; //
  248837             :           /// \private
  248838             :           static std::vector<unsigned char *> pools; //
  248839             :           /// \private
  248840             :           static SgBitEqvOp * next_node; // 
  248841             : 
  248842             :           /// \private
  248843             :           static unsigned long initializeStorageClassArray(SgBitEqvOpStorageClass *); //
  248844             : 
  248845             :           /// \private
  248846             :           static void clearMemoryPool(); //
  248847             :           static void deleteMemoryPool(); //
  248848             : 
  248849             :           /// \private
  248850             :           static void extendMemoryPoolForFileIO(); //
  248851             : 
  248852             :           /// \private
  248853             :           static SgBitEqvOp * getPointerFromGlobalIndex(unsigned long); //
  248854             :           /// \private
  248855             :           static SgBitEqvOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  248856             : 
  248857             :           /// \private
  248858             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  248859             :           /// \private
  248860             :           static void resetValidFreepointers(); //
  248861             :           /// \private
  248862             :           static unsigned long getNumberOfLastValidPointer(); //
  248863             : 
  248864             : 
  248865             : #if defined(INLINE_FUNCTIONS)
  248866             :       /*! \brief returns pointer to newly allocated IR node */
  248867             :           inline void *operator new (size_t size);
  248868             : #else
  248869             :       /*! \brief returns pointer to newly allocated IR node */
  248870             :           void *operator new (size_t size);
  248871             : #endif
  248872             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  248873             :           void operator delete (void* pointer, size_t size);
  248874             : 
  248875             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  248876           0 :           void operator delete (void* pointer)
  248877             :              {
  248878             :             // This is the generated delete operator...
  248879           0 :                SgBitEqvOp::operator delete (pointer,sizeof(SgBitEqvOp));
  248880             :              }
  248881             : 
  248882             :       /*! \brief Returns the total number of IR nodes of this type */
  248883             :           static size_t numberOfNodes();
  248884             : 
  248885             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  248886             :           static size_t memoryUsage();
  248887             : 
  248888             :       // End of scope which started in IR nodes specific code 
  248889             :       /* */
  248890             : 
  248891             :       /* name Internal Functions
  248892             :           \brief Internal functions ... incomplete-documentation
  248893             : 
  248894             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248895             :           or by particularly knowledgeable users for specialized tools or applications.
  248896             : 
  248897             :           \internal We could not make these private because they are required by user for special purposes. And 
  248898             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  248899             :          
  248900             :        */
  248901             : 
  248902             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  248903             :        // overridden in every class by *generated* implementation
  248904             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  248905             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  248906             :        // MS: 06/28/02 container of names of variables or container indices 
  248907             :        // used used in the traversal to access AST successor nodes
  248908             :        // overridden in every class by *generated* implementation
  248909             :       /*! \brief container of names of variables or container indices used used in the traversal
  248910             :           to access AST successor nodes overridden in every class by *generated* implementation */
  248911             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  248912             : 
  248913             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  248914             :        // than all the vector copies. The implementation for these functions is generated for each class.
  248915             :       /*! \brief return number of children in the traversal successor list */
  248916             :           virtual size_t get_numberOfTraversalSuccessors() override;
  248917             :       /*! \brief index-based access to traversal successors by index number */
  248918             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  248919             :       /*! \brief index-based access to traversal successors by child node */
  248920             :           virtual size_t get_childIndex(SgNode *child) override;
  248921             : 
  248922             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  248923             :        // MS: 08/16/2002 method for generating RTI information
  248924             :       /*! \brief return C++ Runtime-Time-Information */
  248925             :           virtual RTIReturnType roseRTI() override;
  248926             : #endif
  248927             :       /* */
  248928             : 
  248929             : 
  248930             : 
  248931             :       /* name Deprecated Functions
  248932             :           \brief Deprecated functions ... incomplete-documentation
  248933             : 
  248934             :           These functions have been deprecated from use.
  248935             :        */
  248936             :       /* */
  248937             : 
  248938             :       /*! returns a C style string (char*) representing the class name */
  248939             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  248940             : 
  248941             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  248942             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  248943             : #if 0
  248944             :       /*! returns old style Sage II enum values */
  248945             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  248946             :       /*! returns old style Sage II enum values */
  248947             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  248948             : #endif
  248949             :       /* */
  248950             : 
  248951             : 
  248952             : 
  248953             : 
  248954             :      public:
  248955             :       /* name Traversal Support Functions
  248956             :           \brief Traversal support functions ... incomplete-documentation
  248957             : 
  248958             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248959             :           or by particularly knowledgable users for specialized tools or applications.
  248960             :        */
  248961             :       /* */
  248962             : 
  248963             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  248964             :        // (inferior to ROSE traversal mechanism, experimental).
  248965             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  248966             :        */
  248967             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  248968             : 
  248969             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  248970             :       /*! \brief support for the classic visitor pattern done in GoF */
  248971             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  248972             : 
  248973             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  248974             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  248975             :        */
  248976             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  248977             : 
  248978             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  248979             :        */
  248980             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  248981             : 
  248982             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  248983             :        // This traversal helps support internal tools that call static member functions.
  248984             :        // note: this function operates on the memory pools.
  248985             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  248986             :        */
  248987             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  248988             :       /* */
  248989             : 
  248990             : 
  248991             :      public:
  248992             :       /* name Memory Allocation Functions
  248993             :           \brief Memory allocations functions ... incomplete-documentation
  248994             : 
  248995             :           These functions have been made public as part of the design, but they are suggested for internal use 
  248996             :           or by particularly knowledgable users for specialized tools or applications.
  248997             :        */
  248998             :       /* */
  248999             : 
  249000             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  249001             : 
  249002             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  249003             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  249004             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  249005             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  249006             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  249007             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  249008             :           being used with the AST File I/O mechanism.
  249009             :        */
  249010             :           virtual bool isInMemoryPool() override;
  249011             : 
  249012             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  249013             : 
  249014             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  249015             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  249016             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  249017             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  249018             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  249019             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  249020             :           being used with the AST File I/O mechanism.
  249021             :        */
  249022             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  249023             : 
  249024             :       // DQ (4/30/2006): Modified to be a const function.
  249025             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  249026             : 
  249027             :           This functions is part of general support for many possible tools to operate 
  249028             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  249029             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  249030             :           less than the set of pointers used by the AST file I/O. This is part of
  249031             :           work implemented by Andreas, and support tools such as the AST graph generation.
  249032             : 
  249033             :           \warning This function can return unexpected data members and thus the 
  249034             :                    order and the number of elements is unpredicable and subject 
  249035             :                    to change.
  249036             : 
  249037             :           \returns STL vector of pairs of SgNode* and strings
  249038             :        */
  249039             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  249040             : 
  249041             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  249042             : 
  249043             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  249044             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  249045             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  249046             : 
  249047             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  249048             :                    and subject to change.
  249049             :        */
  249050             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  249051             : 
  249052             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  249053             : 
  249054             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  249055             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  249056             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  249057             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  249058             : 
  249059             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  249060             : 
  249061             :           \returns long
  249062             :        */
  249063             :           virtual long getChildIndex( SgNode* childNode ) const override;
  249064             : 
  249065             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  249066             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  249067             :       /* \brief Constructor for use by AST File I/O Mechanism
  249068             : 
  249069             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  249070             :           which obtained via fast binary file I/O from disk.
  249071             :        */
  249072             :        // SgBitEqvOp( SgBitEqvOpStorageClass& source );
  249073             : 
  249074             : 
  249075             : 
  249076             : 
  249077             : 
  249078             :  // JH (10/24/2005): methods added to support the ast file IO
  249079             :     private:
  249080             : 
  249081             :       /* name AST Memory Allocation Support Functions
  249082             :           \brief Memory allocations support....
  249083             : 
  249084             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  249085             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  249086             :           and support the AST File I/O Mechanism.
  249087             :        */
  249088             :       /* */
  249089             : 
  249090             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  249091             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  249092             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  249093             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  249094             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  249095             :           a correspinding one in the AST_FILE_IO class!
  249096             :        */
  249097             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  249098             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  249099             :       /* \brief Typedef used for low level memory access.
  249100             :        */
  249101             :        // typedef unsigned char* TestType;
  249102             : 
  249103             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  249104             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  249105             :       /* \brief Typedef used to hold memory addresses as values.
  249106             :        */
  249107             :        // typedef unsigned long  AddressType;
  249108             : 
  249109             : 
  249110             : 
  249111             :        // necessary, to have direct access to the p_freepointer and the private methods !
  249112             :       /*! \brief friend class declaration to support AST File I/O */
  249113             :           friend class AST_FILE_IO;
  249114             : 
  249115             :       /*! \brief friend class declaration to support AST File I/O */
  249116             :           friend class SgBitEqvOpStorageClass;
  249117             : 
  249118             :       /*! \brief friend class declaration to support AST File I/O */
  249119             :           friend class AstSpecificDataManagingClass;
  249120             : 
  249121             :       /*! \brief friend class declaration to support AST File I/O */
  249122             :           friend class AstSpecificDataManagingClassStorageClass;
  249123             :     public:
  249124             :       /*! \brief IR node constructor to support AST File I/O */
  249125             :           SgBitEqvOp( const SgBitEqvOpStorageClass& source );
  249126             : 
  249127             :  // private: // JJW hack
  249128             :        /*
  249129             :           name AST Memory Allocation Support Variables
  249130             :           Memory allocations support variables 
  249131             : 
  249132             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  249133             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  249134             :           and support the AST File I/O Mechanism.
  249135             :        */
  249136             :       /* */
  249137             : 
  249138             :     public:
  249139             : 
  249140             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  249141             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  249142             :       // virtual SgNode* addRegExpAttribute();
  249143             :       /*! \brief Support for AST matching using regular expression.
  249144             : 
  249145             :           This support is incomplete and the subject of current research to define 
  249146             :           RegEx trees to support inexact matching.
  249147             :        */
  249148             :           SgBitEqvOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  249149             : 
  249150             : // *** COMMON CODE SECTION ENDS HERE ***
  249151             : 
  249152             : 
  249153             : // End of memberFunctionString
  249154             : // Start of memberFunctionString
  249155             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  249156             : 
  249157             :      // the generated cast function
  249158             :      // friend ROSE_DLL_API SgBitEqvOp* isSgBitEqvOp ( SgNode* s );
  249159             : 
  249160             :           typedef SgBinaryOp base_node_type;
  249161             : 
  249162             : 
  249163             : // End of memberFunctionString
  249164             : // Start of memberFunctionString
  249165             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  249166             : 
  249167             :           void post_construction_initialization() override;
  249168             : 
  249169             : 
  249170             : // End of memberFunctionString
  249171             : // Start of memberFunctionString
  249172             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  249173             : 
  249174           0 :           int precedence() const override { return  6; }
  249175             : 
  249176             : 
  249177             : // End of memberFunctionString
  249178             : 
  249179             : 
  249180             :      public: 
  249181             :          virtual ~SgBitEqvOp();
  249182             : 
  249183             : 
  249184             :      public: 
  249185             :          SgBitEqvOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  249186             :          SgBitEqvOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  249187             : 
  249188             :     protected:
  249189             : 
  249190             :     friend struct Rose::Traits::generated::describe_node_t<SgBitEqvOp>;
  249191             : 
  249192             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249193             : 
  249194             : 
  249195             :    };
  249196             : #endif
  249197             : 
  249198             : // postdeclarations for SgBitEqvOp
  249199             : 
  249200             : /* #line 249201 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249201             : 
  249202             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  249203             : 
  249204             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249205             : 
  249206             : 
  249207             : /* #line 249208 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249208             : 
  249209             : 
  249210             : 
  249211             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249212             : 
  249213             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  249214             : //      This code is automatically generated for each 
  249215             : //      terminal and non-terminal within the defined 
  249216             : //      grammar.  There is a simple way to change the 
  249217             : //      code to fix bugs etc.  See the ROSE README file
  249218             : //      for directions.
  249219             : 
  249220             : // tps: (02/22/2010): Adding DLL export requirements
  249221             : #include "rosedll.h"
  249222             : 
  249223             : // predeclarations for SgCommaOpExp
  249224             : 
  249225             : /* #line 249226 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249226             : 
  249227             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  249228             : 
  249229             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249230             : 
  249231             : #if 1
  249232             : // Class Definition for SgCommaOpExp
  249233             : class ROSE_DLL_API SgCommaOpExp  : public SgBinaryOp
  249234             :    {
  249235             :      public:
  249236             : 
  249237             : 
  249238             : /* #line 249239 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249239             : 
  249240             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  249241             : // Start of memberFunctionString
  249242             : /* #line 949 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  249243             : 
  249244             : 
  249245             :        // get the type associated with this expression (using the rhs)
  249246             :           virtual SgType* get_type() const override;
  249247             : 
  249248             :        // get lvalue
  249249             :           virtual bool isLValue() const override;
  249250             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  249251             : 
  249252             : 
  249253             : 
  249254             : // End of memberFunctionString
  249255             : // Start of memberFunctionString
  249256             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  249257             : 
  249258             : // *** COMMON CODE SECTION BEGINS HERE ***
  249259             : 
  249260             :     public:
  249261             : 
  249262             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  249263             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  249264             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  249265             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  249266             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  249267             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  249268             : 
  249269             :       /*! \brief returns a string representing the class name */
  249270             :           virtual std::string class_name() const override;
  249271             : 
  249272             :       /*! \brief returns new style SageIII enum values */
  249273             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  249274             : 
  249275             :       /*! \brief static variant value */
  249276             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  249277             :        // static const VariantT static_variant = V_SgCommaOpExp;
  249278             :           enum { static_variant = V_SgCommaOpExp };
  249279             : 
  249280             :        /* the generated cast function */
  249281             :       /*! \brief Casts pointer from base class to derived class */
  249282             :           ROSE_DLL_API friend       SgCommaOpExp* isSgCommaOpExp(       SgNode * s );
  249283             : 
  249284             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  249285             :           ROSE_DLL_API friend const SgCommaOpExp* isSgCommaOpExp( const SgNode * s );
  249286             : 
  249287             :      // ******************************************
  249288             :      // * Memory Pool / New / Delete
  249289             :      // ******************************************
  249290             : 
  249291             :      public:
  249292             :           /// \private
  249293             :           static const unsigned pool_size; //
  249294             :           /// \private
  249295             :           static std::vector<unsigned char *> pools; //
  249296             :           /// \private
  249297             :           static SgCommaOpExp * next_node; // 
  249298             : 
  249299             :           /// \private
  249300             :           static unsigned long initializeStorageClassArray(SgCommaOpExpStorageClass *); //
  249301             : 
  249302             :           /// \private
  249303             :           static void clearMemoryPool(); //
  249304             :           static void deleteMemoryPool(); //
  249305             : 
  249306             :           /// \private
  249307             :           static void extendMemoryPoolForFileIO(); //
  249308             : 
  249309             :           /// \private
  249310             :           static SgCommaOpExp * getPointerFromGlobalIndex(unsigned long); //
  249311             :           /// \private
  249312             :           static SgCommaOpExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  249313             : 
  249314             :           /// \private
  249315             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  249316             :           /// \private
  249317             :           static void resetValidFreepointers(); //
  249318             :           /// \private
  249319             :           static unsigned long getNumberOfLastValidPointer(); //
  249320             : 
  249321             : 
  249322             : #if defined(INLINE_FUNCTIONS)
  249323             :       /*! \brief returns pointer to newly allocated IR node */
  249324             :           inline void *operator new (size_t size);
  249325             : #else
  249326             :       /*! \brief returns pointer to newly allocated IR node */
  249327             :           void *operator new (size_t size);
  249328             : #endif
  249329             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  249330             :           void operator delete (void* pointer, size_t size);
  249331             : 
  249332             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  249333          32 :           void operator delete (void* pointer)
  249334             :              {
  249335             :             // This is the generated delete operator...
  249336          32 :                SgCommaOpExp::operator delete (pointer,sizeof(SgCommaOpExp));
  249337             :              }
  249338             : 
  249339             :       /*! \brief Returns the total number of IR nodes of this type */
  249340             :           static size_t numberOfNodes();
  249341             : 
  249342             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  249343             :           static size_t memoryUsage();
  249344             : 
  249345             :       // End of scope which started in IR nodes specific code 
  249346             :       /* */
  249347             : 
  249348             :       /* name Internal Functions
  249349             :           \brief Internal functions ... incomplete-documentation
  249350             : 
  249351             :           These functions have been made public as part of the design, but they are suggested for internal use 
  249352             :           or by particularly knowledgeable users for specialized tools or applications.
  249353             : 
  249354             :           \internal We could not make these private because they are required by user for special purposes. And 
  249355             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  249356             :          
  249357             :        */
  249358             : 
  249359             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  249360             :        // overridden in every class by *generated* implementation
  249361             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  249362             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  249363             :        // MS: 06/28/02 container of names of variables or container indices 
  249364             :        // used used in the traversal to access AST successor nodes
  249365             :        // overridden in every class by *generated* implementation
  249366             :       /*! \brief container of names of variables or container indices used used in the traversal
  249367             :           to access AST successor nodes overridden in every class by *generated* implementation */
  249368             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  249369             : 
  249370             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  249371             :        // than all the vector copies. The implementation for these functions is generated for each class.
  249372             :       /*! \brief return number of children in the traversal successor list */
  249373             :           virtual size_t get_numberOfTraversalSuccessors() override;
  249374             :       /*! \brief index-based access to traversal successors by index number */
  249375             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  249376             :       /*! \brief index-based access to traversal successors by child node */
  249377             :           virtual size_t get_childIndex(SgNode *child) override;
  249378             : 
  249379             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  249380             :        // MS: 08/16/2002 method for generating RTI information
  249381             :       /*! \brief return C++ Runtime-Time-Information */
  249382             :           virtual RTIReturnType roseRTI() override;
  249383             : #endif
  249384             :       /* */
  249385             : 
  249386             : 
  249387             : 
  249388             :       /* name Deprecated Functions
  249389             :           \brief Deprecated functions ... incomplete-documentation
  249390             : 
  249391             :           These functions have been deprecated from use.
  249392             :        */
  249393             :       /* */
  249394             : 
  249395             :       /*! returns a C style string (char*) representing the class name */
  249396             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  249397             : 
  249398             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  249399             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  249400             : #if 0
  249401             :       /*! returns old style Sage II enum values */
  249402             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  249403             :       /*! returns old style Sage II enum values */
  249404             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  249405             : #endif
  249406             :       /* */
  249407             : 
  249408             : 
  249409             : 
  249410             : 
  249411             :      public:
  249412             :       /* name Traversal Support Functions
  249413             :           \brief Traversal support functions ... incomplete-documentation
  249414             : 
  249415             :           These functions have been made public as part of the design, but they are suggested for internal use 
  249416             :           or by particularly knowledgable users for specialized tools or applications.
  249417             :        */
  249418             :       /* */
  249419             : 
  249420             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  249421             :        // (inferior to ROSE traversal mechanism, experimental).
  249422             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  249423             :        */
  249424             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  249425             : 
  249426             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  249427             :       /*! \brief support for the classic visitor pattern done in GoF */
  249428             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  249429             : 
  249430             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  249431             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  249432             :        */
  249433             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  249434             : 
  249435             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  249436             :        */
  249437             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  249438             : 
  249439             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  249440             :        // This traversal helps support internal tools that call static member functions.
  249441             :        // note: this function operates on the memory pools.
  249442             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  249443             :        */
  249444             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  249445             :       /* */
  249446             : 
  249447             : 
  249448             :      public:
  249449             :       /* name Memory Allocation Functions
  249450             :           \brief Memory allocations functions ... incomplete-documentation
  249451             : 
  249452             :           These functions have been made public as part of the design, but they are suggested for internal use 
  249453             :           or by particularly knowledgable users for specialized tools or applications.
  249454             :        */
  249455             :       /* */
  249456             : 
  249457             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  249458             : 
  249459             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  249460             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  249461             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  249462             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  249463             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  249464             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  249465             :           being used with the AST File I/O mechanism.
  249466             :        */
  249467             :           virtual bool isInMemoryPool() override;
  249468             : 
  249469             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  249470             : 
  249471             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  249472             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  249473             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  249474             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  249475             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  249476             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  249477             :           being used with the AST File I/O mechanism.
  249478             :        */
  249479             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  249480             : 
  249481             :       // DQ (4/30/2006): Modified to be a const function.
  249482             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  249483             : 
  249484             :           This functions is part of general support for many possible tools to operate 
  249485             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  249486             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  249487             :           less than the set of pointers used by the AST file I/O. This is part of
  249488             :           work implemented by Andreas, and support tools such as the AST graph generation.
  249489             : 
  249490             :           \warning This function can return unexpected data members and thus the 
  249491             :                    order and the number of elements is unpredicable and subject 
  249492             :                    to change.
  249493             : 
  249494             :           \returns STL vector of pairs of SgNode* and strings
  249495             :        */
  249496             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  249497             : 
  249498             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  249499             : 
  249500             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  249501             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  249502             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  249503             : 
  249504             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  249505             :                    and subject to change.
  249506             :        */
  249507             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  249508             : 
  249509             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  249510             : 
  249511             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  249512             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  249513             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  249514             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  249515             : 
  249516             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  249517             : 
  249518             :           \returns long
  249519             :        */
  249520             :           virtual long getChildIndex( SgNode* childNode ) const override;
  249521             : 
  249522             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  249523             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  249524             :       /* \brief Constructor for use by AST File I/O Mechanism
  249525             : 
  249526             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  249527             :           which obtained via fast binary file I/O from disk.
  249528             :        */
  249529             :        // SgCommaOpExp( SgCommaOpExpStorageClass& source );
  249530             : 
  249531             : 
  249532             : 
  249533             : 
  249534             : 
  249535             :  // JH (10/24/2005): methods added to support the ast file IO
  249536             :     private:
  249537             : 
  249538             :       /* name AST Memory Allocation Support Functions
  249539             :           \brief Memory allocations support....
  249540             : 
  249541             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  249542             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  249543             :           and support the AST File I/O Mechanism.
  249544             :        */
  249545             :       /* */
  249546             : 
  249547             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  249548             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  249549             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  249550             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  249551             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  249552             :           a correspinding one in the AST_FILE_IO class!
  249553             :        */
  249554             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  249555             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  249556             :       /* \brief Typedef used for low level memory access.
  249557             :        */
  249558             :        // typedef unsigned char* TestType;
  249559             : 
  249560             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  249561             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  249562             :       /* \brief Typedef used to hold memory addresses as values.
  249563             :        */
  249564             :        // typedef unsigned long  AddressType;
  249565             : 
  249566             : 
  249567             : 
  249568             :        // necessary, to have direct access to the p_freepointer and the private methods !
  249569             :       /*! \brief friend class declaration to support AST File I/O */
  249570             :           friend class AST_FILE_IO;
  249571             : 
  249572             :       /*! \brief friend class declaration to support AST File I/O */
  249573             :           friend class SgCommaOpExpStorageClass;
  249574             : 
  249575             :       /*! \brief friend class declaration to support AST File I/O */
  249576             :           friend class AstSpecificDataManagingClass;
  249577             : 
  249578             :       /*! \brief friend class declaration to support AST File I/O */
  249579             :           friend class AstSpecificDataManagingClassStorageClass;
  249580             :     public:
  249581             :       /*! \brief IR node constructor to support AST File I/O */
  249582             :           SgCommaOpExp( const SgCommaOpExpStorageClass& source );
  249583             : 
  249584             :  // private: // JJW hack
  249585             :        /*
  249586             :           name AST Memory Allocation Support Variables
  249587             :           Memory allocations support variables 
  249588             : 
  249589             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  249590             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  249591             :           and support the AST File I/O Mechanism.
  249592             :        */
  249593             :       /* */
  249594             : 
  249595             :     public:
  249596             : 
  249597             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  249598             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  249599             :       // virtual SgNode* addRegExpAttribute();
  249600             :       /*! \brief Support for AST matching using regular expression.
  249601             : 
  249602             :           This support is incomplete and the subject of current research to define 
  249603             :           RegEx trees to support inexact matching.
  249604             :        */
  249605             :           SgCommaOpExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  249606             : 
  249607             : // *** COMMON CODE SECTION ENDS HERE ***
  249608             : 
  249609             : 
  249610             : // End of memberFunctionString
  249611             : // Start of memberFunctionString
  249612             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  249613             : 
  249614             :      // the generated cast function
  249615             :      // friend ROSE_DLL_API SgCommaOpExp* isSgCommaOpExp ( SgNode* s );
  249616             : 
  249617             :           typedef SgBinaryOp base_node_type;
  249618             : 
  249619             : 
  249620             : // End of memberFunctionString
  249621             : // Start of memberFunctionString
  249622             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  249623             : 
  249624             :           void post_construction_initialization() override;
  249625             : 
  249626             : 
  249627             : // End of memberFunctionString
  249628             : // Start of memberFunctionString
  249629             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  249630             : 
  249631           0 :           int precedence() const override { return  1; }
  249632             : 
  249633             : 
  249634             : // End of memberFunctionString
  249635             : 
  249636             : 
  249637             :      public: 
  249638             :          virtual ~SgCommaOpExp();
  249639             : 
  249640             : 
  249641             :      public: 
  249642             :          SgCommaOpExp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  249643             :          SgCommaOpExp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  249644             : 
  249645             :     protected:
  249646             : 
  249647             :     friend struct Rose::Traits::generated::describe_node_t<SgCommaOpExp>;
  249648             : 
  249649             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249650             : 
  249651             : 
  249652             :    };
  249653             : #endif
  249654             : 
  249655             : // postdeclarations for SgCommaOpExp
  249656             : 
  249657             : /* #line 249658 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249658             : 
  249659             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  249660             : 
  249661             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249662             : 
  249663             : 
  249664             : /* #line 249665 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249665             : 
  249666             : 
  249667             : 
  249668             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249669             : 
  249670             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  249671             : //      This code is automatically generated for each 
  249672             : //      terminal and non-terminal within the defined 
  249673             : //      grammar.  There is a simple way to change the 
  249674             : //      code to fix bugs etc.  See the ROSE README file
  249675             : //      for directions.
  249676             : 
  249677             : // tps: (02/22/2010): Adding DLL export requirements
  249678             : #include "rosedll.h"
  249679             : 
  249680             : // predeclarations for SgLshiftOp
  249681             : 
  249682             : /* #line 249683 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249683             : 
  249684             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  249685             : 
  249686             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  249687             : 
  249688             : #if 1
  249689             : // Class Definition for SgLshiftOp
  249690             : class ROSE_DLL_API SgLshiftOp  : public SgBinaryOp
  249691             :    {
  249692             :      public:
  249693             : 
  249694             : 
  249695             : /* #line 249696 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  249696             : 
  249697             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  249698             : // Start of memberFunctionString
  249699             : /* #line 961 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  249700             : 
  249701             : 
  249702             : 
  249703             : // End of memberFunctionString
  249704             : // Start of memberFunctionString
  249705             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  249706             : 
  249707             : // *** COMMON CODE SECTION BEGINS HERE ***
  249708             : 
  249709             :     public:
  249710             : 
  249711             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  249712             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  249713             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  249714             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  249715             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  249716             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  249717             : 
  249718             :       /*! \brief returns a string representing the class name */
  249719             :           virtual std::string class_name() const override;
  249720             : 
  249721             :       /*! \brief returns new style SageIII enum values */
  249722             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  249723             : 
  249724             :       /*! \brief static variant value */
  249725             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  249726             :        // static const VariantT static_variant = V_SgLshiftOp;
  249727             :           enum { static_variant = V_SgLshiftOp };
  249728             : 
  249729             :        /* the generated cast function */
  249730             :       /*! \brief Casts pointer from base class to derived class */
  249731             :           ROSE_DLL_API friend       SgLshiftOp* isSgLshiftOp(       SgNode * s );
  249732             : 
  249733             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  249734             :           ROSE_DLL_API friend const SgLshiftOp* isSgLshiftOp( const SgNode * s );
  249735             : 
  249736             :      // ******************************************
  249737             :      // * Memory Pool / New / Delete
  249738             :      // ******************************************
  249739             : 
  249740             :      public:
  249741             :           /// \private
  249742             :           static const unsigned pool_size; //
  249743             :           /// \private
  249744             :           static std::vector<unsigned char *> pools; //
  249745             :           /// \private
  249746             :           static SgLshiftOp * next_node; // 
  249747             : 
  249748             :           /// \private
  249749             :           static unsigned long initializeStorageClassArray(SgLshiftOpStorageClass *); //
  249750             : 
  249751             :           /// \private
  249752             :           static void clearMemoryPool(); //
  249753             :           static void deleteMemoryPool(); //
  249754             : 
  249755             :           /// \private
  249756             :           static void extendMemoryPoolForFileIO(); //
  249757             : 
  249758             :           /// \private
  249759             :           static SgLshiftOp * getPointerFromGlobalIndex(unsigned long); //
  249760             :           /// \private
  249761             :           static SgLshiftOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  249762             : 
  249763             :           /// \private
  249764             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  249765             :           /// \private
  249766             :           static void resetValidFreepointers(); //
  249767             :           /// \private
  249768             :           static unsigned long getNumberOfLastValidPointer(); //
  249769             : 
  249770             : 
  249771             : #if defined(INLINE_FUNCTIONS)
  249772             :       /*! \brief returns pointer to newly allocated IR node */
  249773             :           inline void *operator new (size_t size);
  249774             : #else
  249775             :       /*! \brief returns pointer to newly allocated IR node */
  249776             :           void *operator new (size_t size);
  249777             : #endif
  249778             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  249779             :           void operator delete (void* pointer, size_t size);
  249780             : 
  249781             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  249782        2974 :           void operator delete (void* pointer)
  249783             :              {
  249784             :             // This is the generated delete operator...
  249785        2974 :                SgLshiftOp::operator delete (pointer,sizeof(SgLshiftOp));
  249786             :              }
  249787             : 
  249788             :       /*! \brief Returns the total number of IR nodes of this type */
  249789             :           static size_t numberOfNodes();
  249790             : 
  249791             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  249792             :           static size_t memoryUsage();
  249793             : 
  249794             :       // End of scope which started in IR nodes specific code 
  249795             :       /* */
  249796             : 
  249797             :       /* name Internal Functions
  249798             :           \brief Internal functions ... incomplete-documentation
  249799             : 
  249800             :           These functions have been made public as part of the design, but they are suggested for internal use 
  249801             :           or by particularly knowledgeable users for specialized tools or applications.
  249802             : 
  249803             :           \internal We could not make these private because they are required by user for special purposes. And 
  249804             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  249805             :          
  249806             :        */
  249807             : 
  249808             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  249809             :        // overridden in every class by *generated* implementation
  249810             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  249811             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  249812             :        // MS: 06/28/02 container of names of variables or container indices 
  249813             :        // used used in the traversal to access AST successor nodes
  249814             :        // overridden in every class by *generated* implementation
  249815             :       /*! \brief container of names of variables or container indices used used in the traversal
  249816             :           to access AST successor nodes overridden in every class by *generated* implementation */
  249817             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  249818             : 
  249819             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  249820             :        // than all the vector copies. The implementation for these functions is generated for each class.
  249821             :       /*! \brief return number of children in the traversal successor list */
  249822             :           virtual size_t get_numberOfTraversalSuccessors() override;
  249823             :       /*! \brief index-based access to traversal successors by index number */
  249824             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  249825             :       /*! \brief index-based access to traversal successors by child node */
  249826             :           virtual size_t get_childIndex(SgNode *child) override;
  249827             : 
  249828             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  249829             :        // MS: 08/16/2002 method for generating RTI information
  249830             :       /*! \brief return C++ Runtime-Time-Information */
  249831             :           virtual RTIReturnType roseRTI() override;
  249832             : #endif
  249833             :       /* */
  249834             : 
  249835             : 
  249836             : 
  249837             :       /* name Deprecated Functions
  249838             :           \brief Deprecated functions ... incomplete-documentation
  249839             : 
  249840             :           These functions have been deprecated from use.
  249841             :        */
  249842             :       /* */
  249843             : 
  249844             :       /*! returns a C style string (char*) representing the class name */
  249845             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  249846             : 
  249847             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  249848             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  249849             : #if 0
  249850             :       /*! returns old style Sage II enum values */
  249851             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  249852             :       /*! returns old style Sage II enum values */
  249853             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  249854             : #endif
  249855             :       /* */
  249856             : 
  249857             : 
  249858             : 
  249859             : 
  249860             :      public:
  249861             :       /* name Traversal Support Functions
  249862             :           \brief Traversal support functions ... incomplete-documentation
  249863             : 
  249864             :           These functions have been made public as part of the design, but they are suggested for internal use 
  249865             :           or by particularly knowledgable users for specialized tools or applications.
  249866             :        */
  249867             :       /* */
  249868             : 
  249869             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  249870             :        // (inferior to ROSE traversal mechanism, experimental).
  249871             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  249872             :        */
  249873             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  249874             : 
  249875             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  249876             :       /*! \brief support for the classic visitor pattern done in GoF */
  249877             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  249878             : 
  249879             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  249880             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  249881             :        */
  249882             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  249883             : 
  249884             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  249885             :        */
  249886             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  249887             : 
  249888             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  249889             :        // This traversal helps support internal tools that call static member functions.
  249890             :        // note: this function operates on the memory pools.
  249891             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  249892             :        */
  249893             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  249894             :       /* */
  249895             : 
  249896             : 
  249897             :      public:
  249898             :       /* name Memory Allocation Functions
  249899             :           \brief Memory allocations functions ... incomplete-documentation
  249900             : 
  249901             :           These functions have been made public as part of the design, but they are suggested for internal use 
  249902             :           or by particularly knowledgable users for specialized tools or applications.
  249903             :        */
  249904             :       /* */
  249905             : 
  249906             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  249907             : 
  249908             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  249909             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  249910             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  249911             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  249912             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  249913             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  249914             :           being used with the AST File I/O mechanism.
  249915             :        */
  249916             :           virtual bool isInMemoryPool() override;
  249917             : 
  249918             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  249919             : 
  249920             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  249921             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  249922             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  249923             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  249924             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  249925             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  249926             :           being used with the AST File I/O mechanism.
  249927             :        */
  249928             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  249929             : 
  249930             :       // DQ (4/30/2006): Modified to be a const function.
  249931             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  249932             : 
  249933             :           This functions is part of general support for many possible tools to operate 
  249934             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  249935             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  249936             :           less than the set of pointers used by the AST file I/O. This is part of
  249937             :           work implemented by Andreas, and support tools such as the AST graph generation.
  249938             : 
  249939             :           \warning This function can return unexpected data members and thus the 
  249940             :                    order and the number of elements is unpredicable and subject 
  249941             :                    to change.
  249942             : 
  249943             :           \returns STL vector of pairs of SgNode* and strings
  249944             :        */
  249945             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  249946             : 
  249947             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  249948             : 
  249949             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  249950             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  249951             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  249952             : 
  249953             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  249954             :                    and subject to change.
  249955             :        */
  249956             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  249957             : 
  249958             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  249959             : 
  249960             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  249961             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  249962             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  249963             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  249964             : 
  249965             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  249966             : 
  249967             :           \returns long
  249968             :        */
  249969             :           virtual long getChildIndex( SgNode* childNode ) const override;
  249970             : 
  249971             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  249972             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  249973             :       /* \brief Constructor for use by AST File I/O Mechanism
  249974             : 
  249975             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  249976             :           which obtained via fast binary file I/O from disk.
  249977             :        */
  249978             :        // SgLshiftOp( SgLshiftOpStorageClass& source );
  249979             : 
  249980             : 
  249981             : 
  249982             : 
  249983             : 
  249984             :  // JH (10/24/2005): methods added to support the ast file IO
  249985             :     private:
  249986             : 
  249987             :       /* name AST Memory Allocation Support Functions
  249988             :           \brief Memory allocations support....
  249989             : 
  249990             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  249991             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  249992             :           and support the AST File I/O Mechanism.
  249993             :        */
  249994             :       /* */
  249995             : 
  249996             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  249997             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  249998             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  249999             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  250000             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  250001             :           a correspinding one in the AST_FILE_IO class!
  250002             :        */
  250003             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  250004             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250005             :       /* \brief Typedef used for low level memory access.
  250006             :        */
  250007             :        // typedef unsigned char* TestType;
  250008             : 
  250009             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  250010             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250011             :       /* \brief Typedef used to hold memory addresses as values.
  250012             :        */
  250013             :        // typedef unsigned long  AddressType;
  250014             : 
  250015             : 
  250016             : 
  250017             :        // necessary, to have direct access to the p_freepointer and the private methods !
  250018             :       /*! \brief friend class declaration to support AST File I/O */
  250019             :           friend class AST_FILE_IO;
  250020             : 
  250021             :       /*! \brief friend class declaration to support AST File I/O */
  250022             :           friend class SgLshiftOpStorageClass;
  250023             : 
  250024             :       /*! \brief friend class declaration to support AST File I/O */
  250025             :           friend class AstSpecificDataManagingClass;
  250026             : 
  250027             :       /*! \brief friend class declaration to support AST File I/O */
  250028             :           friend class AstSpecificDataManagingClassStorageClass;
  250029             :     public:
  250030             :       /*! \brief IR node constructor to support AST File I/O */
  250031             :           SgLshiftOp( const SgLshiftOpStorageClass& source );
  250032             : 
  250033             :  // private: // JJW hack
  250034             :        /*
  250035             :           name AST Memory Allocation Support Variables
  250036             :           Memory allocations support variables 
  250037             : 
  250038             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  250039             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  250040             :           and support the AST File I/O Mechanism.
  250041             :        */
  250042             :       /* */
  250043             : 
  250044             :     public:
  250045             : 
  250046             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  250047             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  250048             :       // virtual SgNode* addRegExpAttribute();
  250049             :       /*! \brief Support for AST matching using regular expression.
  250050             : 
  250051             :           This support is incomplete and the subject of current research to define 
  250052             :           RegEx trees to support inexact matching.
  250053             :        */
  250054             :           SgLshiftOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  250055             : 
  250056             : // *** COMMON CODE SECTION ENDS HERE ***
  250057             : 
  250058             : 
  250059             : // End of memberFunctionString
  250060             : // Start of memberFunctionString
  250061             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  250062             : 
  250063             :      // the generated cast function
  250064             :      // friend ROSE_DLL_API SgLshiftOp* isSgLshiftOp ( SgNode* s );
  250065             : 
  250066             :           typedef SgBinaryOp base_node_type;
  250067             : 
  250068             : 
  250069             : // End of memberFunctionString
  250070             : // Start of memberFunctionString
  250071             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250072             : 
  250073             :           void post_construction_initialization() override;
  250074             : 
  250075             : 
  250076             : // End of memberFunctionString
  250077             : // Start of memberFunctionString
  250078             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250079             : 
  250080           0 :           int precedence() const override { return 11; }
  250081             : 
  250082             : 
  250083             : // End of memberFunctionString
  250084             : 
  250085             : 
  250086             :      public: 
  250087             :          virtual ~SgLshiftOp();
  250088             : 
  250089             : 
  250090             :      public: 
  250091             :          SgLshiftOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  250092             :          SgLshiftOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  250093             : 
  250094             :     protected:
  250095             : 
  250096             :     friend struct Rose::Traits::generated::describe_node_t<SgLshiftOp>;
  250097             : 
  250098             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250099             : 
  250100             : 
  250101             :    };
  250102             : #endif
  250103             : 
  250104             : // postdeclarations for SgLshiftOp
  250105             : 
  250106             : /* #line 250107 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250107             : 
  250108             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  250109             : 
  250110             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250111             : 
  250112             : 
  250113             : /* #line 250114 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250114             : 
  250115             : 
  250116             : 
  250117             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250118             : 
  250119             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  250120             : //      This code is automatically generated for each 
  250121             : //      terminal and non-terminal within the defined 
  250122             : //      grammar.  There is a simple way to change the 
  250123             : //      code to fix bugs etc.  See the ROSE README file
  250124             : //      for directions.
  250125             : 
  250126             : // tps: (02/22/2010): Adding DLL export requirements
  250127             : #include "rosedll.h"
  250128             : 
  250129             : // predeclarations for SgRshiftOp
  250130             : 
  250131             : /* #line 250132 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250132             : 
  250133             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  250134             : 
  250135             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250136             : 
  250137             : #if 1
  250138             : // Class Definition for SgRshiftOp
  250139             : class ROSE_DLL_API SgRshiftOp  : public SgBinaryOp
  250140             :    {
  250141             :      public:
  250142             : 
  250143             : 
  250144             : /* #line 250145 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250145             : 
  250146             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  250147             : // Start of memberFunctionString
  250148             : /* #line 965 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250149             : 
  250150             : 
  250151             : 
  250152             : // End of memberFunctionString
  250153             : // Start of memberFunctionString
  250154             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  250155             : 
  250156             : // *** COMMON CODE SECTION BEGINS HERE ***
  250157             : 
  250158             :     public:
  250159             : 
  250160             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  250161             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  250162             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  250163             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  250164             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  250165             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  250166             : 
  250167             :       /*! \brief returns a string representing the class name */
  250168             :           virtual std::string class_name() const override;
  250169             : 
  250170             :       /*! \brief returns new style SageIII enum values */
  250171             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  250172             : 
  250173             :       /*! \brief static variant value */
  250174             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  250175             :        // static const VariantT static_variant = V_SgRshiftOp;
  250176             :           enum { static_variant = V_SgRshiftOp };
  250177             : 
  250178             :        /* the generated cast function */
  250179             :       /*! \brief Casts pointer from base class to derived class */
  250180             :           ROSE_DLL_API friend       SgRshiftOp* isSgRshiftOp(       SgNode * s );
  250181             : 
  250182             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  250183             :           ROSE_DLL_API friend const SgRshiftOp* isSgRshiftOp( const SgNode * s );
  250184             : 
  250185             :      // ******************************************
  250186             :      // * Memory Pool / New / Delete
  250187             :      // ******************************************
  250188             : 
  250189             :      public:
  250190             :           /// \private
  250191             :           static const unsigned pool_size; //
  250192             :           /// \private
  250193             :           static std::vector<unsigned char *> pools; //
  250194             :           /// \private
  250195             :           static SgRshiftOp * next_node; // 
  250196             : 
  250197             :           /// \private
  250198             :           static unsigned long initializeStorageClassArray(SgRshiftOpStorageClass *); //
  250199             : 
  250200             :           /// \private
  250201             :           static void clearMemoryPool(); //
  250202             :           static void deleteMemoryPool(); //
  250203             : 
  250204             :           /// \private
  250205             :           static void extendMemoryPoolForFileIO(); //
  250206             : 
  250207             :           /// \private
  250208             :           static SgRshiftOp * getPointerFromGlobalIndex(unsigned long); //
  250209             :           /// \private
  250210             :           static SgRshiftOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  250211             : 
  250212             :           /// \private
  250213             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  250214             :           /// \private
  250215             :           static void resetValidFreepointers(); //
  250216             :           /// \private
  250217             :           static unsigned long getNumberOfLastValidPointer(); //
  250218             : 
  250219             : 
  250220             : #if defined(INLINE_FUNCTIONS)
  250221             :       /*! \brief returns pointer to newly allocated IR node */
  250222             :           inline void *operator new (size_t size);
  250223             : #else
  250224             :       /*! \brief returns pointer to newly allocated IR node */
  250225             :           void *operator new (size_t size);
  250226             : #endif
  250227             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  250228             :           void operator delete (void* pointer, size_t size);
  250229             : 
  250230             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  250231         712 :           void operator delete (void* pointer)
  250232             :              {
  250233             :             // This is the generated delete operator...
  250234         712 :                SgRshiftOp::operator delete (pointer,sizeof(SgRshiftOp));
  250235             :              }
  250236             : 
  250237             :       /*! \brief Returns the total number of IR nodes of this type */
  250238             :           static size_t numberOfNodes();
  250239             : 
  250240             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  250241             :           static size_t memoryUsage();
  250242             : 
  250243             :       // End of scope which started in IR nodes specific code 
  250244             :       /* */
  250245             : 
  250246             :       /* name Internal Functions
  250247             :           \brief Internal functions ... incomplete-documentation
  250248             : 
  250249             :           These functions have been made public as part of the design, but they are suggested for internal use 
  250250             :           or by particularly knowledgeable users for specialized tools or applications.
  250251             : 
  250252             :           \internal We could not make these private because they are required by user for special purposes. And 
  250253             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  250254             :          
  250255             :        */
  250256             : 
  250257             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  250258             :        // overridden in every class by *generated* implementation
  250259             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  250260             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  250261             :        // MS: 06/28/02 container of names of variables or container indices 
  250262             :        // used used in the traversal to access AST successor nodes
  250263             :        // overridden in every class by *generated* implementation
  250264             :       /*! \brief container of names of variables or container indices used used in the traversal
  250265             :           to access AST successor nodes overridden in every class by *generated* implementation */
  250266             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  250267             : 
  250268             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  250269             :        // than all the vector copies. The implementation for these functions is generated for each class.
  250270             :       /*! \brief return number of children in the traversal successor list */
  250271             :           virtual size_t get_numberOfTraversalSuccessors() override;
  250272             :       /*! \brief index-based access to traversal successors by index number */
  250273             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  250274             :       /*! \brief index-based access to traversal successors by child node */
  250275             :           virtual size_t get_childIndex(SgNode *child) override;
  250276             : 
  250277             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  250278             :        // MS: 08/16/2002 method for generating RTI information
  250279             :       /*! \brief return C++ Runtime-Time-Information */
  250280             :           virtual RTIReturnType roseRTI() override;
  250281             : #endif
  250282             :       /* */
  250283             : 
  250284             : 
  250285             : 
  250286             :       /* name Deprecated Functions
  250287             :           \brief Deprecated functions ... incomplete-documentation
  250288             : 
  250289             :           These functions have been deprecated from use.
  250290             :        */
  250291             :       /* */
  250292             : 
  250293             :       /*! returns a C style string (char*) representing the class name */
  250294             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  250295             : 
  250296             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  250297             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  250298             : #if 0
  250299             :       /*! returns old style Sage II enum values */
  250300             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  250301             :       /*! returns old style Sage II enum values */
  250302             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  250303             : #endif
  250304             :       /* */
  250305             : 
  250306             : 
  250307             : 
  250308             : 
  250309             :      public:
  250310             :       /* name Traversal Support Functions
  250311             :           \brief Traversal support functions ... incomplete-documentation
  250312             : 
  250313             :           These functions have been made public as part of the design, but they are suggested for internal use 
  250314             :           or by particularly knowledgable users for specialized tools or applications.
  250315             :        */
  250316             :       /* */
  250317             : 
  250318             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  250319             :        // (inferior to ROSE traversal mechanism, experimental).
  250320             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  250321             :        */
  250322             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  250323             : 
  250324             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  250325             :       /*! \brief support for the classic visitor pattern done in GoF */
  250326             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  250327             : 
  250328             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  250329             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  250330             :        */
  250331             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  250332             : 
  250333             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  250334             :        */
  250335             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  250336             : 
  250337             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  250338             :        // This traversal helps support internal tools that call static member functions.
  250339             :        // note: this function operates on the memory pools.
  250340             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  250341             :        */
  250342             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  250343             :       /* */
  250344             : 
  250345             : 
  250346             :      public:
  250347             :       /* name Memory Allocation Functions
  250348             :           \brief Memory allocations functions ... incomplete-documentation
  250349             : 
  250350             :           These functions have been made public as part of the design, but they are suggested for internal use 
  250351             :           or by particularly knowledgable users for specialized tools or applications.
  250352             :        */
  250353             :       /* */
  250354             : 
  250355             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  250356             : 
  250357             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  250358             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  250359             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  250360             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  250361             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  250362             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  250363             :           being used with the AST File I/O mechanism.
  250364             :        */
  250365             :           virtual bool isInMemoryPool() override;
  250366             : 
  250367             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  250368             : 
  250369             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  250370             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  250371             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  250372             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  250373             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  250374             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  250375             :           being used with the AST File I/O mechanism.
  250376             :        */
  250377             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  250378             : 
  250379             :       // DQ (4/30/2006): Modified to be a const function.
  250380             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  250381             : 
  250382             :           This functions is part of general support for many possible tools to operate 
  250383             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  250384             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  250385             :           less than the set of pointers used by the AST file I/O. This is part of
  250386             :           work implemented by Andreas, and support tools such as the AST graph generation.
  250387             : 
  250388             :           \warning This function can return unexpected data members and thus the 
  250389             :                    order and the number of elements is unpredicable and subject 
  250390             :                    to change.
  250391             : 
  250392             :           \returns STL vector of pairs of SgNode* and strings
  250393             :        */
  250394             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  250395             : 
  250396             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  250397             : 
  250398             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  250399             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  250400             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  250401             : 
  250402             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  250403             :                    and subject to change.
  250404             :        */
  250405             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  250406             : 
  250407             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  250408             : 
  250409             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  250410             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  250411             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  250412             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  250413             : 
  250414             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  250415             : 
  250416             :           \returns long
  250417             :        */
  250418             :           virtual long getChildIndex( SgNode* childNode ) const override;
  250419             : 
  250420             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  250421             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250422             :       /* \brief Constructor for use by AST File I/O Mechanism
  250423             : 
  250424             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  250425             :           which obtained via fast binary file I/O from disk.
  250426             :        */
  250427             :        // SgRshiftOp( SgRshiftOpStorageClass& source );
  250428             : 
  250429             : 
  250430             : 
  250431             : 
  250432             : 
  250433             :  // JH (10/24/2005): methods added to support the ast file IO
  250434             :     private:
  250435             : 
  250436             :       /* name AST Memory Allocation Support Functions
  250437             :           \brief Memory allocations support....
  250438             : 
  250439             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  250440             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  250441             :           and support the AST File I/O Mechanism.
  250442             :        */
  250443             :       /* */
  250444             : 
  250445             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  250446             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  250447             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  250448             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  250449             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  250450             :           a correspinding one in the AST_FILE_IO class!
  250451             :        */
  250452             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  250453             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250454             :       /* \brief Typedef used for low level memory access.
  250455             :        */
  250456             :        // typedef unsigned char* TestType;
  250457             : 
  250458             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  250459             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250460             :       /* \brief Typedef used to hold memory addresses as values.
  250461             :        */
  250462             :        // typedef unsigned long  AddressType;
  250463             : 
  250464             : 
  250465             : 
  250466             :        // necessary, to have direct access to the p_freepointer and the private methods !
  250467             :       /*! \brief friend class declaration to support AST File I/O */
  250468             :           friend class AST_FILE_IO;
  250469             : 
  250470             :       /*! \brief friend class declaration to support AST File I/O */
  250471             :           friend class SgRshiftOpStorageClass;
  250472             : 
  250473             :       /*! \brief friend class declaration to support AST File I/O */
  250474             :           friend class AstSpecificDataManagingClass;
  250475             : 
  250476             :       /*! \brief friend class declaration to support AST File I/O */
  250477             :           friend class AstSpecificDataManagingClassStorageClass;
  250478             :     public:
  250479             :       /*! \brief IR node constructor to support AST File I/O */
  250480             :           SgRshiftOp( const SgRshiftOpStorageClass& source );
  250481             : 
  250482             :  // private: // JJW hack
  250483             :        /*
  250484             :           name AST Memory Allocation Support Variables
  250485             :           Memory allocations support variables 
  250486             : 
  250487             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  250488             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  250489             :           and support the AST File I/O Mechanism.
  250490             :        */
  250491             :       /* */
  250492             : 
  250493             :     public:
  250494             : 
  250495             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  250496             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  250497             :       // virtual SgNode* addRegExpAttribute();
  250498             :       /*! \brief Support for AST matching using regular expression.
  250499             : 
  250500             :           This support is incomplete and the subject of current research to define 
  250501             :           RegEx trees to support inexact matching.
  250502             :        */
  250503             :           SgRshiftOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  250504             : 
  250505             : // *** COMMON CODE SECTION ENDS HERE ***
  250506             : 
  250507             : 
  250508             : // End of memberFunctionString
  250509             : // Start of memberFunctionString
  250510             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  250511             : 
  250512             :      // the generated cast function
  250513             :      // friend ROSE_DLL_API SgRshiftOp* isSgRshiftOp ( SgNode* s );
  250514             : 
  250515             :           typedef SgBinaryOp base_node_type;
  250516             : 
  250517             : 
  250518             : // End of memberFunctionString
  250519             : // Start of memberFunctionString
  250520             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250521             : 
  250522             :           void post_construction_initialization() override;
  250523             : 
  250524             : 
  250525             : // End of memberFunctionString
  250526             : // Start of memberFunctionString
  250527             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250528             : 
  250529           0 :           int precedence() const override { return 11; }
  250530             : 
  250531             : 
  250532             : // End of memberFunctionString
  250533             : 
  250534             : 
  250535             :      public: 
  250536             :          virtual ~SgRshiftOp();
  250537             : 
  250538             : 
  250539             :      public: 
  250540             :          SgRshiftOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  250541             :          SgRshiftOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  250542             : 
  250543             :     protected:
  250544             : 
  250545             :     friend struct Rose::Traits::generated::describe_node_t<SgRshiftOp>;
  250546             : 
  250547             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250548             : 
  250549             : 
  250550             :    };
  250551             : #endif
  250552             : 
  250553             : // postdeclarations for SgRshiftOp
  250554             : 
  250555             : /* #line 250556 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250556             : 
  250557             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  250558             : 
  250559             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250560             : 
  250561             : 
  250562             : /* #line 250563 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250563             : 
  250564             : 
  250565             : 
  250566             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250567             : 
  250568             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  250569             : //      This code is automatically generated for each 
  250570             : //      terminal and non-terminal within the defined 
  250571             : //      grammar.  There is a simple way to change the 
  250572             : //      code to fix bugs etc.  See the ROSE README file
  250573             : //      for directions.
  250574             : 
  250575             : // tps: (02/22/2010): Adding DLL export requirements
  250576             : #include "rosedll.h"
  250577             : 
  250578             : // predeclarations for SgPntrArrRefExp
  250579             : 
  250580             : /* #line 250581 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250581             : 
  250582             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  250583             : 
  250584             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  250585             : 
  250586             : #if 1
  250587             : // Class Definition for SgPntrArrRefExp
  250588             : class ROSE_DLL_API SgPntrArrRefExp  : public SgBinaryOp
  250589             :    {
  250590             :      public:
  250591             : 
  250592             : 
  250593             : /* #line 250594 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  250594             : 
  250595             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  250596             : // Start of memberFunctionString
  250597             : /* #line 1283 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250598             : 
  250599             :        // DQ (1/16/2006): Added to support special version of get_type.
  250600             :        // returns get_lhs_operand()->get_type()  (maybe we should call get_base_type() ???)
  250601             :           SgType* get_type() const override;
  250602             : 
  250603             :        // get lvalue
  250604             :           virtual bool isLValue() const override;
  250605             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  250606             : 
  250607             : 
  250608             : 
  250609             : // End of memberFunctionString
  250610             : // Start of memberFunctionString
  250611             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  250612             : 
  250613             : // *** COMMON CODE SECTION BEGINS HERE ***
  250614             : 
  250615             :     public:
  250616             : 
  250617             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  250618             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  250619             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  250620             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  250621             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  250622             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  250623             : 
  250624             :       /*! \brief returns a string representing the class name */
  250625             :           virtual std::string class_name() const override;
  250626             : 
  250627             :       /*! \brief returns new style SageIII enum values */
  250628             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  250629             : 
  250630             :       /*! \brief static variant value */
  250631             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  250632             :        // static const VariantT static_variant = V_SgPntrArrRefExp;
  250633             :           enum { static_variant = V_SgPntrArrRefExp };
  250634             : 
  250635             :        /* the generated cast function */
  250636             :       /*! \brief Casts pointer from base class to derived class */
  250637             :           ROSE_DLL_API friend       SgPntrArrRefExp* isSgPntrArrRefExp(       SgNode * s );
  250638             : 
  250639             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  250640             :           ROSE_DLL_API friend const SgPntrArrRefExp* isSgPntrArrRefExp( const SgNode * s );
  250641             : 
  250642             :      // ******************************************
  250643             :      // * Memory Pool / New / Delete
  250644             :      // ******************************************
  250645             : 
  250646             :      public:
  250647             :           /// \private
  250648             :           static const unsigned pool_size; //
  250649             :           /// \private
  250650             :           static std::vector<unsigned char *> pools; //
  250651             :           /// \private
  250652             :           static SgPntrArrRefExp * next_node; // 
  250653             : 
  250654             :           /// \private
  250655             :           static unsigned long initializeStorageClassArray(SgPntrArrRefExpStorageClass *); //
  250656             : 
  250657             :           /// \private
  250658             :           static void clearMemoryPool(); //
  250659             :           static void deleteMemoryPool(); //
  250660             : 
  250661             :           /// \private
  250662             :           static void extendMemoryPoolForFileIO(); //
  250663             : 
  250664             :           /// \private
  250665             :           static SgPntrArrRefExp * getPointerFromGlobalIndex(unsigned long); //
  250666             :           /// \private
  250667             :           static SgPntrArrRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  250668             : 
  250669             :           /// \private
  250670             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  250671             :           /// \private
  250672             :           static void resetValidFreepointers(); //
  250673             :           /// \private
  250674             :           static unsigned long getNumberOfLastValidPointer(); //
  250675             : 
  250676             : 
  250677             : #if defined(INLINE_FUNCTIONS)
  250678             :       /*! \brief returns pointer to newly allocated IR node */
  250679             :           inline void *operator new (size_t size);
  250680             : #else
  250681             :       /*! \brief returns pointer to newly allocated IR node */
  250682             :           void *operator new (size_t size);
  250683             : #endif
  250684             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  250685             :           void operator delete (void* pointer, size_t size);
  250686             : 
  250687             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  250688         284 :           void operator delete (void* pointer)
  250689             :              {
  250690             :             // This is the generated delete operator...
  250691         284 :                SgPntrArrRefExp::operator delete (pointer,sizeof(SgPntrArrRefExp));
  250692             :              }
  250693             : 
  250694             :       /*! \brief Returns the total number of IR nodes of this type */
  250695             :           static size_t numberOfNodes();
  250696             : 
  250697             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  250698             :           static size_t memoryUsage();
  250699             : 
  250700             :       // End of scope which started in IR nodes specific code 
  250701             :       /* */
  250702             : 
  250703             :       /* name Internal Functions
  250704             :           \brief Internal functions ... incomplete-documentation
  250705             : 
  250706             :           These functions have been made public as part of the design, but they are suggested for internal use 
  250707             :           or by particularly knowledgeable users for specialized tools or applications.
  250708             : 
  250709             :           \internal We could not make these private because they are required by user for special purposes. And 
  250710             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  250711             :          
  250712             :        */
  250713             : 
  250714             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  250715             :        // overridden in every class by *generated* implementation
  250716             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  250717             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  250718             :        // MS: 06/28/02 container of names of variables or container indices 
  250719             :        // used used in the traversal to access AST successor nodes
  250720             :        // overridden in every class by *generated* implementation
  250721             :       /*! \brief container of names of variables or container indices used used in the traversal
  250722             :           to access AST successor nodes overridden in every class by *generated* implementation */
  250723             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  250724             : 
  250725             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  250726             :        // than all the vector copies. The implementation for these functions is generated for each class.
  250727             :       /*! \brief return number of children in the traversal successor list */
  250728             :           virtual size_t get_numberOfTraversalSuccessors() override;
  250729             :       /*! \brief index-based access to traversal successors by index number */
  250730             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  250731             :       /*! \brief index-based access to traversal successors by child node */
  250732             :           virtual size_t get_childIndex(SgNode *child) override;
  250733             : 
  250734             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  250735             :        // MS: 08/16/2002 method for generating RTI information
  250736             :       /*! \brief return C++ Runtime-Time-Information */
  250737             :           virtual RTIReturnType roseRTI() override;
  250738             : #endif
  250739             :       /* */
  250740             : 
  250741             : 
  250742             : 
  250743             :       /* name Deprecated Functions
  250744             :           \brief Deprecated functions ... incomplete-documentation
  250745             : 
  250746             :           These functions have been deprecated from use.
  250747             :        */
  250748             :       /* */
  250749             : 
  250750             :       /*! returns a C style string (char*) representing the class name */
  250751             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  250752             : 
  250753             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  250754             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  250755             : #if 0
  250756             :       /*! returns old style Sage II enum values */
  250757             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  250758             :       /*! returns old style Sage II enum values */
  250759             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  250760             : #endif
  250761             :       /* */
  250762             : 
  250763             : 
  250764             : 
  250765             : 
  250766             :      public:
  250767             :       /* name Traversal Support Functions
  250768             :           \brief Traversal support functions ... incomplete-documentation
  250769             : 
  250770             :           These functions have been made public as part of the design, but they are suggested for internal use 
  250771             :           or by particularly knowledgable users for specialized tools or applications.
  250772             :        */
  250773             :       /* */
  250774             : 
  250775             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  250776             :        // (inferior to ROSE traversal mechanism, experimental).
  250777             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  250778             :        */
  250779             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  250780             : 
  250781             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  250782             :       /*! \brief support for the classic visitor pattern done in GoF */
  250783             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  250784             : 
  250785             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  250786             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  250787             :        */
  250788             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  250789             : 
  250790             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  250791             :        */
  250792             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  250793             : 
  250794             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  250795             :        // This traversal helps support internal tools that call static member functions.
  250796             :        // note: this function operates on the memory pools.
  250797             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  250798             :        */
  250799             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  250800             :       /* */
  250801             : 
  250802             : 
  250803             :      public:
  250804             :       /* name Memory Allocation Functions
  250805             :           \brief Memory allocations functions ... incomplete-documentation
  250806             : 
  250807             :           These functions have been made public as part of the design, but they are suggested for internal use 
  250808             :           or by particularly knowledgable users for specialized tools or applications.
  250809             :        */
  250810             :       /* */
  250811             : 
  250812             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  250813             : 
  250814             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  250815             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  250816             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  250817             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  250818             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  250819             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  250820             :           being used with the AST File I/O mechanism.
  250821             :        */
  250822             :           virtual bool isInMemoryPool() override;
  250823             : 
  250824             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  250825             : 
  250826             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  250827             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  250828             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  250829             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  250830             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  250831             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  250832             :           being used with the AST File I/O mechanism.
  250833             :        */
  250834             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  250835             : 
  250836             :       // DQ (4/30/2006): Modified to be a const function.
  250837             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  250838             : 
  250839             :           This functions is part of general support for many possible tools to operate 
  250840             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  250841             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  250842             :           less than the set of pointers used by the AST file I/O. This is part of
  250843             :           work implemented by Andreas, and support tools such as the AST graph generation.
  250844             : 
  250845             :           \warning This function can return unexpected data members and thus the 
  250846             :                    order and the number of elements is unpredicable and subject 
  250847             :                    to change.
  250848             : 
  250849             :           \returns STL vector of pairs of SgNode* and strings
  250850             :        */
  250851             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  250852             : 
  250853             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  250854             : 
  250855             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  250856             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  250857             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  250858             : 
  250859             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  250860             :                    and subject to change.
  250861             :        */
  250862             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  250863             : 
  250864             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  250865             : 
  250866             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  250867             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  250868             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  250869             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  250870             : 
  250871             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  250872             : 
  250873             :           \returns long
  250874             :        */
  250875             :           virtual long getChildIndex( SgNode* childNode ) const override;
  250876             : 
  250877             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  250878             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250879             :       /* \brief Constructor for use by AST File I/O Mechanism
  250880             : 
  250881             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  250882             :           which obtained via fast binary file I/O from disk.
  250883             :        */
  250884             :        // SgPntrArrRefExp( SgPntrArrRefExpStorageClass& source );
  250885             : 
  250886             : 
  250887             : 
  250888             : 
  250889             : 
  250890             :  // JH (10/24/2005): methods added to support the ast file IO
  250891             :     private:
  250892             : 
  250893             :       /* name AST Memory Allocation Support Functions
  250894             :           \brief Memory allocations support....
  250895             : 
  250896             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  250897             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  250898             :           and support the AST File I/O Mechanism.
  250899             :        */
  250900             :       /* */
  250901             : 
  250902             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  250903             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  250904             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  250905             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  250906             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  250907             :           a correspinding one in the AST_FILE_IO class!
  250908             :        */
  250909             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  250910             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250911             :       /* \brief Typedef used for low level memory access.
  250912             :        */
  250913             :        // typedef unsigned char* TestType;
  250914             : 
  250915             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  250916             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  250917             :       /* \brief Typedef used to hold memory addresses as values.
  250918             :        */
  250919             :        // typedef unsigned long  AddressType;
  250920             : 
  250921             : 
  250922             : 
  250923             :        // necessary, to have direct access to the p_freepointer and the private methods !
  250924             :       /*! \brief friend class declaration to support AST File I/O */
  250925             :           friend class AST_FILE_IO;
  250926             : 
  250927             :       /*! \brief friend class declaration to support AST File I/O */
  250928             :           friend class SgPntrArrRefExpStorageClass;
  250929             : 
  250930             :       /*! \brief friend class declaration to support AST File I/O */
  250931             :           friend class AstSpecificDataManagingClass;
  250932             : 
  250933             :       /*! \brief friend class declaration to support AST File I/O */
  250934             :           friend class AstSpecificDataManagingClassStorageClass;
  250935             :     public:
  250936             :       /*! \brief IR node constructor to support AST File I/O */
  250937             :           SgPntrArrRefExp( const SgPntrArrRefExpStorageClass& source );
  250938             : 
  250939             :  // private: // JJW hack
  250940             :        /*
  250941             :           name AST Memory Allocation Support Variables
  250942             :           Memory allocations support variables 
  250943             : 
  250944             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  250945             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  250946             :           and support the AST File I/O Mechanism.
  250947             :        */
  250948             :       /* */
  250949             : 
  250950             :     public:
  250951             : 
  250952             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  250953             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  250954             :       // virtual SgNode* addRegExpAttribute();
  250955             :       /*! \brief Support for AST matching using regular expression.
  250956             : 
  250957             :           This support is incomplete and the subject of current research to define 
  250958             :           RegEx trees to support inexact matching.
  250959             :        */
  250960             :           SgPntrArrRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  250961             : 
  250962             : // *** COMMON CODE SECTION ENDS HERE ***
  250963             : 
  250964             : 
  250965             : // End of memberFunctionString
  250966             : // Start of memberFunctionString
  250967             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  250968             : 
  250969             :      // the generated cast function
  250970             :      // friend ROSE_DLL_API SgPntrArrRefExp* isSgPntrArrRefExp ( SgNode* s );
  250971             : 
  250972             :           typedef SgBinaryOp base_node_type;
  250973             : 
  250974             : 
  250975             : // End of memberFunctionString
  250976             : // Start of memberFunctionString
  250977             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250978             : 
  250979             :           void post_construction_initialization() override;
  250980             : 
  250981             : 
  250982             : // End of memberFunctionString
  250983             : // Start of memberFunctionString
  250984             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  250985             : 
  250986           0 :           int precedence() const override { return 16; }
  250987             : 
  250988             : 
  250989             : // End of memberFunctionString
  250990             : 
  250991             : 
  250992             :      public: 
  250993             :          virtual ~SgPntrArrRefExp();
  250994             : 
  250995             : 
  250996             :      public: 
  250997             :          SgPntrArrRefExp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  250998             :          SgPntrArrRefExp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  250999             : 
  251000             :     protected:
  251001             : 
  251002             :     friend struct Rose::Traits::generated::describe_node_t<SgPntrArrRefExp>;
  251003             : 
  251004             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251005             : 
  251006             : 
  251007             :    };
  251008             : #endif
  251009             : 
  251010             : // postdeclarations for SgPntrArrRefExp
  251011             : 
  251012             : /* #line 251013 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251013             : 
  251014             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  251015             : 
  251016             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251017             : 
  251018             : 
  251019             : /* #line 251020 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251020             : 
  251021             : 
  251022             : 
  251023             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251024             : 
  251025             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  251026             : //      This code is automatically generated for each 
  251027             : //      terminal and non-terminal within the defined 
  251028             : //      grammar.  There is a simple way to change the 
  251029             : //      code to fix bugs etc.  See the ROSE README file
  251030             : //      for directions.
  251031             : 
  251032             : // tps: (02/22/2010): Adding DLL export requirements
  251033             : #include "rosedll.h"
  251034             : 
  251035             : // predeclarations for SgScopeOp
  251036             : 
  251037             : /* #line 251038 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251038             : 
  251039             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  251040             : 
  251041             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251042             : 
  251043             : #if 1
  251044             : // Class Definition for SgScopeOp
  251045             : class ROSE_DLL_API SgScopeOp  : public SgBinaryOp
  251046             :    {
  251047             :      public:
  251048             : 
  251049             : 
  251050             : /* #line 251051 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251051             : 
  251052             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  251053             : // Start of memberFunctionString
  251054             : /* #line 1400 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  251055             : 
  251056             :        // get lvalue
  251057             :           virtual bool isLValue() const override;
  251058             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  251059             : 
  251060             : 
  251061             : // End of memberFunctionString
  251062             : // Start of memberFunctionString
  251063             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  251064             : 
  251065             : // *** COMMON CODE SECTION BEGINS HERE ***
  251066             : 
  251067             :     public:
  251068             : 
  251069             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  251070             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  251071             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  251072             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  251073             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  251074             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  251075             : 
  251076             :       /*! \brief returns a string representing the class name */
  251077             :           virtual std::string class_name() const override;
  251078             : 
  251079             :       /*! \brief returns new style SageIII enum values */
  251080             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  251081             : 
  251082             :       /*! \brief static variant value */
  251083             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  251084             :        // static const VariantT static_variant = V_SgScopeOp;
  251085             :           enum { static_variant = V_SgScopeOp };
  251086             : 
  251087             :        /* the generated cast function */
  251088             :       /*! \brief Casts pointer from base class to derived class */
  251089             :           ROSE_DLL_API friend       SgScopeOp* isSgScopeOp(       SgNode * s );
  251090             : 
  251091             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  251092             :           ROSE_DLL_API friend const SgScopeOp* isSgScopeOp( const SgNode * s );
  251093             : 
  251094             :      // ******************************************
  251095             :      // * Memory Pool / New / Delete
  251096             :      // ******************************************
  251097             : 
  251098             :      public:
  251099             :           /// \private
  251100             :           static const unsigned pool_size; //
  251101             :           /// \private
  251102             :           static std::vector<unsigned char *> pools; //
  251103             :           /// \private
  251104             :           static SgScopeOp * next_node; // 
  251105             : 
  251106             :           /// \private
  251107             :           static unsigned long initializeStorageClassArray(SgScopeOpStorageClass *); //
  251108             : 
  251109             :           /// \private
  251110             :           static void clearMemoryPool(); //
  251111             :           static void deleteMemoryPool(); //
  251112             : 
  251113             :           /// \private
  251114             :           static void extendMemoryPoolForFileIO(); //
  251115             : 
  251116             :           /// \private
  251117             :           static SgScopeOp * getPointerFromGlobalIndex(unsigned long); //
  251118             :           /// \private
  251119             :           static SgScopeOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  251120             : 
  251121             :           /// \private
  251122             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  251123             :           /// \private
  251124             :           static void resetValidFreepointers(); //
  251125             :           /// \private
  251126             :           static unsigned long getNumberOfLastValidPointer(); //
  251127             : 
  251128             : 
  251129             : #if defined(INLINE_FUNCTIONS)
  251130             :       /*! \brief returns pointer to newly allocated IR node */
  251131             :           inline void *operator new (size_t size);
  251132             : #else
  251133             :       /*! \brief returns pointer to newly allocated IR node */
  251134             :           void *operator new (size_t size);
  251135             : #endif
  251136             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  251137             :           void operator delete (void* pointer, size_t size);
  251138             : 
  251139             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  251140           0 :           void operator delete (void* pointer)
  251141             :              {
  251142             :             // This is the generated delete operator...
  251143           0 :                SgScopeOp::operator delete (pointer,sizeof(SgScopeOp));
  251144             :              }
  251145             : 
  251146             :       /*! \brief Returns the total number of IR nodes of this type */
  251147             :           static size_t numberOfNodes();
  251148             : 
  251149             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  251150             :           static size_t memoryUsage();
  251151             : 
  251152             :       // End of scope which started in IR nodes specific code 
  251153             :       /* */
  251154             : 
  251155             :       /* name Internal Functions
  251156             :           \brief Internal functions ... incomplete-documentation
  251157             : 
  251158             :           These functions have been made public as part of the design, but they are suggested for internal use 
  251159             :           or by particularly knowledgeable users for specialized tools or applications.
  251160             : 
  251161             :           \internal We could not make these private because they are required by user for special purposes. And 
  251162             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  251163             :          
  251164             :        */
  251165             : 
  251166             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  251167             :        // overridden in every class by *generated* implementation
  251168             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  251169             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  251170             :        // MS: 06/28/02 container of names of variables or container indices 
  251171             :        // used used in the traversal to access AST successor nodes
  251172             :        // overridden in every class by *generated* implementation
  251173             :       /*! \brief container of names of variables or container indices used used in the traversal
  251174             :           to access AST successor nodes overridden in every class by *generated* implementation */
  251175             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  251176             : 
  251177             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  251178             :        // than all the vector copies. The implementation for these functions is generated for each class.
  251179             :       /*! \brief return number of children in the traversal successor list */
  251180             :           virtual size_t get_numberOfTraversalSuccessors() override;
  251181             :       /*! \brief index-based access to traversal successors by index number */
  251182             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  251183             :       /*! \brief index-based access to traversal successors by child node */
  251184             :           virtual size_t get_childIndex(SgNode *child) override;
  251185             : 
  251186             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  251187             :        // MS: 08/16/2002 method for generating RTI information
  251188             :       /*! \brief return C++ Runtime-Time-Information */
  251189             :           virtual RTIReturnType roseRTI() override;
  251190             : #endif
  251191             :       /* */
  251192             : 
  251193             : 
  251194             : 
  251195             :       /* name Deprecated Functions
  251196             :           \brief Deprecated functions ... incomplete-documentation
  251197             : 
  251198             :           These functions have been deprecated from use.
  251199             :        */
  251200             :       /* */
  251201             : 
  251202             :       /*! returns a C style string (char*) representing the class name */
  251203             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  251204             : 
  251205             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  251206             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  251207             : #if 0
  251208             :       /*! returns old style Sage II enum values */
  251209             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  251210             :       /*! returns old style Sage II enum values */
  251211             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  251212             : #endif
  251213             :       /* */
  251214             : 
  251215             : 
  251216             : 
  251217             : 
  251218             :      public:
  251219             :       /* name Traversal Support Functions
  251220             :           \brief Traversal support functions ... incomplete-documentation
  251221             : 
  251222             :           These functions have been made public as part of the design, but they are suggested for internal use 
  251223             :           or by particularly knowledgable users for specialized tools or applications.
  251224             :        */
  251225             :       /* */
  251226             : 
  251227             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  251228             :        // (inferior to ROSE traversal mechanism, experimental).
  251229             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  251230             :        */
  251231             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  251232             : 
  251233             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  251234             :       /*! \brief support for the classic visitor pattern done in GoF */
  251235             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  251236             : 
  251237             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  251238             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  251239             :        */
  251240             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  251241             : 
  251242             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  251243             :        */
  251244             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  251245             : 
  251246             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  251247             :        // This traversal helps support internal tools that call static member functions.
  251248             :        // note: this function operates on the memory pools.
  251249             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  251250             :        */
  251251             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  251252             :       /* */
  251253             : 
  251254             : 
  251255             :      public:
  251256             :       /* name Memory Allocation Functions
  251257             :           \brief Memory allocations functions ... incomplete-documentation
  251258             : 
  251259             :           These functions have been made public as part of the design, but they are suggested for internal use 
  251260             :           or by particularly knowledgable users for specialized tools or applications.
  251261             :        */
  251262             :       /* */
  251263             : 
  251264             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  251265             : 
  251266             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  251267             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  251268             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  251269             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  251270             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  251271             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  251272             :           being used with the AST File I/O mechanism.
  251273             :        */
  251274             :           virtual bool isInMemoryPool() override;
  251275             : 
  251276             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  251277             : 
  251278             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  251279             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  251280             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  251281             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  251282             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  251283             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  251284             :           being used with the AST File I/O mechanism.
  251285             :        */
  251286             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  251287             : 
  251288             :       // DQ (4/30/2006): Modified to be a const function.
  251289             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  251290             : 
  251291             :           This functions is part of general support for many possible tools to operate 
  251292             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  251293             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  251294             :           less than the set of pointers used by the AST file I/O. This is part of
  251295             :           work implemented by Andreas, and support tools such as the AST graph generation.
  251296             : 
  251297             :           \warning This function can return unexpected data members and thus the 
  251298             :                    order and the number of elements is unpredicable and subject 
  251299             :                    to change.
  251300             : 
  251301             :           \returns STL vector of pairs of SgNode* and strings
  251302             :        */
  251303             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  251304             : 
  251305             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  251306             : 
  251307             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  251308             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  251309             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  251310             : 
  251311             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  251312             :                    and subject to change.
  251313             :        */
  251314             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  251315             : 
  251316             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  251317             : 
  251318             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  251319             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  251320             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  251321             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  251322             : 
  251323             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  251324             : 
  251325             :           \returns long
  251326             :        */
  251327             :           virtual long getChildIndex( SgNode* childNode ) const override;
  251328             : 
  251329             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  251330             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  251331             :       /* \brief Constructor for use by AST File I/O Mechanism
  251332             : 
  251333             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  251334             :           which obtained via fast binary file I/O from disk.
  251335             :        */
  251336             :        // SgScopeOp( SgScopeOpStorageClass& source );
  251337             : 
  251338             : 
  251339             : 
  251340             : 
  251341             : 
  251342             :  // JH (10/24/2005): methods added to support the ast file IO
  251343             :     private:
  251344             : 
  251345             :       /* name AST Memory Allocation Support Functions
  251346             :           \brief Memory allocations support....
  251347             : 
  251348             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  251349             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  251350             :           and support the AST File I/O Mechanism.
  251351             :        */
  251352             :       /* */
  251353             : 
  251354             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  251355             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  251356             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  251357             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  251358             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  251359             :           a correspinding one in the AST_FILE_IO class!
  251360             :        */
  251361             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  251362             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  251363             :       /* \brief Typedef used for low level memory access.
  251364             :        */
  251365             :        // typedef unsigned char* TestType;
  251366             : 
  251367             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  251368             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  251369             :       /* \brief Typedef used to hold memory addresses as values.
  251370             :        */
  251371             :        // typedef unsigned long  AddressType;
  251372             : 
  251373             : 
  251374             : 
  251375             :        // necessary, to have direct access to the p_freepointer and the private methods !
  251376             :       /*! \brief friend class declaration to support AST File I/O */
  251377             :           friend class AST_FILE_IO;
  251378             : 
  251379             :       /*! \brief friend class declaration to support AST File I/O */
  251380             :           friend class SgScopeOpStorageClass;
  251381             : 
  251382             :       /*! \brief friend class declaration to support AST File I/O */
  251383             :           friend class AstSpecificDataManagingClass;
  251384             : 
  251385             :       /*! \brief friend class declaration to support AST File I/O */
  251386             :           friend class AstSpecificDataManagingClassStorageClass;
  251387             :     public:
  251388             :       /*! \brief IR node constructor to support AST File I/O */
  251389             :           SgScopeOp( const SgScopeOpStorageClass& source );
  251390             : 
  251391             :  // private: // JJW hack
  251392             :        /*
  251393             :           name AST Memory Allocation Support Variables
  251394             :           Memory allocations support variables 
  251395             : 
  251396             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  251397             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  251398             :           and support the AST File I/O Mechanism.
  251399             :        */
  251400             :       /* */
  251401             : 
  251402             :     public:
  251403             : 
  251404             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  251405             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  251406             :       // virtual SgNode* addRegExpAttribute();
  251407             :       /*! \brief Support for AST matching using regular expression.
  251408             : 
  251409             :           This support is incomplete and the subject of current research to define 
  251410             :           RegEx trees to support inexact matching.
  251411             :        */
  251412             :           SgScopeOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  251413             : 
  251414             : // *** COMMON CODE SECTION ENDS HERE ***
  251415             : 
  251416             : 
  251417             : // End of memberFunctionString
  251418             : // Start of memberFunctionString
  251419             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  251420             : 
  251421             :      // the generated cast function
  251422             :      // friend ROSE_DLL_API SgScopeOp* isSgScopeOp ( SgNode* s );
  251423             : 
  251424             :           typedef SgBinaryOp base_node_type;
  251425             : 
  251426             : 
  251427             : // End of memberFunctionString
  251428             : // Start of memberFunctionString
  251429             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  251430             : 
  251431             :           void post_construction_initialization() override;
  251432             : 
  251433             : 
  251434             : // End of memberFunctionString
  251435             : // Start of memberFunctionString
  251436             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  251437             : 
  251438           0 :           int precedence() const override { return 17; }
  251439             : 
  251440             : 
  251441             : // End of memberFunctionString
  251442             : 
  251443             : 
  251444             :      public: 
  251445             :          virtual ~SgScopeOp();
  251446             : 
  251447             : 
  251448             :      public: 
  251449             :          SgScopeOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  251450             :          SgScopeOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  251451             : 
  251452             :     protected:
  251453             : 
  251454             :     friend struct Rose::Traits::generated::describe_node_t<SgScopeOp>;
  251455             : 
  251456             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251457             : 
  251458             : 
  251459             :    };
  251460             : #endif
  251461             : 
  251462             : // postdeclarations for SgScopeOp
  251463             : 
  251464             : /* #line 251465 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251465             : 
  251466             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  251467             : 
  251468             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251469             : 
  251470             : 
  251471             : /* #line 251472 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251472             : 
  251473             : 
  251474             : 
  251475             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251476             : 
  251477             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  251478             : //      This code is automatically generated for each 
  251479             : //      terminal and non-terminal within the defined 
  251480             : //      grammar.  There is a simple way to change the 
  251481             : //      code to fix bugs etc.  See the ROSE README file
  251482             : //      for directions.
  251483             : 
  251484             : // tps: (02/22/2010): Adding DLL export requirements
  251485             : #include "rosedll.h"
  251486             : 
  251487             : // predeclarations for SgAssignOp
  251488             : 
  251489             : /* #line 251490 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251490             : 
  251491             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  251492             : 
  251493             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251494             : 
  251495             : #if 1
  251496             : // Class Definition for SgAssignOp
  251497             : class ROSE_DLL_API SgAssignOp  : public SgBinaryOp
  251498             :    {
  251499             :      public:
  251500             : 
  251501             : 
  251502             : /* #line 251503 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251503             : 
  251504             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  251505             : // Start of memberFunctionString
  251506             : /* #line 1407 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  251507             : 
  251508             : 
  251509             :        // get lvalue
  251510             :           virtual bool isLValue() const override;
  251511             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  251512             : 
  251513             : 
  251514             : 
  251515             : // End of memberFunctionString
  251516             : // Start of memberFunctionString
  251517             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  251518             : 
  251519             : // *** COMMON CODE SECTION BEGINS HERE ***
  251520             : 
  251521             :     public:
  251522             : 
  251523             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  251524             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  251525             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  251526             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  251527             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  251528             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  251529             : 
  251530             :       /*! \brief returns a string representing the class name */
  251531             :           virtual std::string class_name() const override;
  251532             : 
  251533             :       /*! \brief returns new style SageIII enum values */
  251534             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  251535             : 
  251536             :       /*! \brief static variant value */
  251537             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  251538             :        // static const VariantT static_variant = V_SgAssignOp;
  251539             :           enum { static_variant = V_SgAssignOp };
  251540             : 
  251541             :        /* the generated cast function */
  251542             :       /*! \brief Casts pointer from base class to derived class */
  251543             :           ROSE_DLL_API friend       SgAssignOp* isSgAssignOp(       SgNode * s );
  251544             : 
  251545             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  251546             :           ROSE_DLL_API friend const SgAssignOp* isSgAssignOp( const SgNode * s );
  251547             : 
  251548             :      // ******************************************
  251549             :      // * Memory Pool / New / Delete
  251550             :      // ******************************************
  251551             : 
  251552             :      public:
  251553             :           /// \private
  251554             :           static const unsigned pool_size; //
  251555             :           /// \private
  251556             :           static std::vector<unsigned char *> pools; //
  251557             :           /// \private
  251558             :           static SgAssignOp * next_node; // 
  251559             : 
  251560             :           /// \private
  251561             :           static unsigned long initializeStorageClassArray(SgAssignOpStorageClass *); //
  251562             : 
  251563             :           /// \private
  251564             :           static void clearMemoryPool(); //
  251565             :           static void deleteMemoryPool(); //
  251566             : 
  251567             :           /// \private
  251568             :           static void extendMemoryPoolForFileIO(); //
  251569             : 
  251570             :           /// \private
  251571             :           static SgAssignOp * getPointerFromGlobalIndex(unsigned long); //
  251572             :           /// \private
  251573             :           static SgAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  251574             : 
  251575             :           /// \private
  251576             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  251577             :           /// \private
  251578             :           static void resetValidFreepointers(); //
  251579             :           /// \private
  251580             :           static unsigned long getNumberOfLastValidPointer(); //
  251581             : 
  251582             : 
  251583             : #if defined(INLINE_FUNCTIONS)
  251584             :       /*! \brief returns pointer to newly allocated IR node */
  251585             :           inline void *operator new (size_t size);
  251586             : #else
  251587             :       /*! \brief returns pointer to newly allocated IR node */
  251588             :           void *operator new (size_t size);
  251589             : #endif
  251590             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  251591             :           void operator delete (void* pointer, size_t size);
  251592             : 
  251593             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  251594         911 :           void operator delete (void* pointer)
  251595             :              {
  251596             :             // This is the generated delete operator...
  251597         911 :                SgAssignOp::operator delete (pointer,sizeof(SgAssignOp));
  251598             :              }
  251599             : 
  251600             :       /*! \brief Returns the total number of IR nodes of this type */
  251601             :           static size_t numberOfNodes();
  251602             : 
  251603             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  251604             :           static size_t memoryUsage();
  251605             : 
  251606             :       // End of scope which started in IR nodes specific code 
  251607             :       /* */
  251608             : 
  251609             :       /* name Internal Functions
  251610             :           \brief Internal functions ... incomplete-documentation
  251611             : 
  251612             :           These functions have been made public as part of the design, but they are suggested for internal use 
  251613             :           or by particularly knowledgeable users for specialized tools or applications.
  251614             : 
  251615             :           \internal We could not make these private because they are required by user for special purposes. And 
  251616             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  251617             :          
  251618             :        */
  251619             : 
  251620             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  251621             :        // overridden in every class by *generated* implementation
  251622             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  251623             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  251624             :        // MS: 06/28/02 container of names of variables or container indices 
  251625             :        // used used in the traversal to access AST successor nodes
  251626             :        // overridden in every class by *generated* implementation
  251627             :       /*! \brief container of names of variables or container indices used used in the traversal
  251628             :           to access AST successor nodes overridden in every class by *generated* implementation */
  251629             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  251630             : 
  251631             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  251632             :        // than all the vector copies. The implementation for these functions is generated for each class.
  251633             :       /*! \brief return number of children in the traversal successor list */
  251634             :           virtual size_t get_numberOfTraversalSuccessors() override;
  251635             :       /*! \brief index-based access to traversal successors by index number */
  251636             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  251637             :       /*! \brief index-based access to traversal successors by child node */
  251638             :           virtual size_t get_childIndex(SgNode *child) override;
  251639             : 
  251640             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  251641             :        // MS: 08/16/2002 method for generating RTI information
  251642             :       /*! \brief return C++ Runtime-Time-Information */
  251643             :           virtual RTIReturnType roseRTI() override;
  251644             : #endif
  251645             :       /* */
  251646             : 
  251647             : 
  251648             : 
  251649             :       /* name Deprecated Functions
  251650             :           \brief Deprecated functions ... incomplete-documentation
  251651             : 
  251652             :           These functions have been deprecated from use.
  251653             :        */
  251654             :       /* */
  251655             : 
  251656             :       /*! returns a C style string (char*) representing the class name */
  251657             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  251658             : 
  251659             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  251660             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  251661             : #if 0
  251662             :       /*! returns old style Sage II enum values */
  251663             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  251664             :       /*! returns old style Sage II enum values */
  251665             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  251666             : #endif
  251667             :       /* */
  251668             : 
  251669             : 
  251670             : 
  251671             : 
  251672             :      public:
  251673             :       /* name Traversal Support Functions
  251674             :           \brief Traversal support functions ... incomplete-documentation
  251675             : 
  251676             :           These functions have been made public as part of the design, but they are suggested for internal use 
  251677             :           or by particularly knowledgable users for specialized tools or applications.
  251678             :        */
  251679             :       /* */
  251680             : 
  251681             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  251682             :        // (inferior to ROSE traversal mechanism, experimental).
  251683             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  251684             :        */
  251685             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  251686             : 
  251687             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  251688             :       /*! \brief support for the classic visitor pattern done in GoF */
  251689             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  251690             : 
  251691             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  251692             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  251693             :        */
  251694             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  251695             : 
  251696             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  251697             :        */
  251698             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  251699             : 
  251700             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  251701             :        // This traversal helps support internal tools that call static member functions.
  251702             :        // note: this function operates on the memory pools.
  251703             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  251704             :        */
  251705             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  251706             :       /* */
  251707             : 
  251708             : 
  251709             :      public:
  251710             :       /* name Memory Allocation Functions
  251711             :           \brief Memory allocations functions ... incomplete-documentation
  251712             : 
  251713             :           These functions have been made public as part of the design, but they are suggested for internal use 
  251714             :           or by particularly knowledgable users for specialized tools or applications.
  251715             :        */
  251716             :       /* */
  251717             : 
  251718             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  251719             : 
  251720             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  251721             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  251722             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  251723             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  251724             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  251725             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  251726             :           being used with the AST File I/O mechanism.
  251727             :        */
  251728             :           virtual bool isInMemoryPool() override;
  251729             : 
  251730             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  251731             : 
  251732             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  251733             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  251734             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  251735             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  251736             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  251737             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  251738             :           being used with the AST File I/O mechanism.
  251739             :        */
  251740             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  251741             : 
  251742             :       // DQ (4/30/2006): Modified to be a const function.
  251743             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  251744             : 
  251745             :           This functions is part of general support for many possible tools to operate 
  251746             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  251747             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  251748             :           less than the set of pointers used by the AST file I/O. This is part of
  251749             :           work implemented by Andreas, and support tools such as the AST graph generation.
  251750             : 
  251751             :           \warning This function can return unexpected data members and thus the 
  251752             :                    order and the number of elements is unpredicable and subject 
  251753             :                    to change.
  251754             : 
  251755             :           \returns STL vector of pairs of SgNode* and strings
  251756             :        */
  251757             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  251758             : 
  251759             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  251760             : 
  251761             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  251762             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  251763             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  251764             : 
  251765             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  251766             :                    and subject to change.
  251767             :        */
  251768             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  251769             : 
  251770             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  251771             : 
  251772             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  251773             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  251774             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  251775             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  251776             : 
  251777             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  251778             : 
  251779             :           \returns long
  251780             :        */
  251781             :           virtual long getChildIndex( SgNode* childNode ) const override;
  251782             : 
  251783             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  251784             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  251785             :       /* \brief Constructor for use by AST File I/O Mechanism
  251786             : 
  251787             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  251788             :           which obtained via fast binary file I/O from disk.
  251789             :        */
  251790             :        // SgAssignOp( SgAssignOpStorageClass& source );
  251791             : 
  251792             : 
  251793             : 
  251794             : 
  251795             : 
  251796             :  // JH (10/24/2005): methods added to support the ast file IO
  251797             :     private:
  251798             : 
  251799             :       /* name AST Memory Allocation Support Functions
  251800             :           \brief Memory allocations support....
  251801             : 
  251802             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  251803             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  251804             :           and support the AST File I/O Mechanism.
  251805             :        */
  251806             :       /* */
  251807             : 
  251808             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  251809             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  251810             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  251811             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  251812             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  251813             :           a correspinding one in the AST_FILE_IO class!
  251814             :        */
  251815             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  251816             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  251817             :       /* \brief Typedef used for low level memory access.
  251818             :        */
  251819             :        // typedef unsigned char* TestType;
  251820             : 
  251821             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  251822             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  251823             :       /* \brief Typedef used to hold memory addresses as values.
  251824             :        */
  251825             :        // typedef unsigned long  AddressType;
  251826             : 
  251827             : 
  251828             : 
  251829             :        // necessary, to have direct access to the p_freepointer and the private methods !
  251830             :       /*! \brief friend class declaration to support AST File I/O */
  251831             :           friend class AST_FILE_IO;
  251832             : 
  251833             :       /*! \brief friend class declaration to support AST File I/O */
  251834             :           friend class SgAssignOpStorageClass;
  251835             : 
  251836             :       /*! \brief friend class declaration to support AST File I/O */
  251837             :           friend class AstSpecificDataManagingClass;
  251838             : 
  251839             :       /*! \brief friend class declaration to support AST File I/O */
  251840             :           friend class AstSpecificDataManagingClassStorageClass;
  251841             :     public:
  251842             :       /*! \brief IR node constructor to support AST File I/O */
  251843             :           SgAssignOp( const SgAssignOpStorageClass& source );
  251844             : 
  251845             :  // private: // JJW hack
  251846             :        /*
  251847             :           name AST Memory Allocation Support Variables
  251848             :           Memory allocations support variables 
  251849             : 
  251850             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  251851             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  251852             :           and support the AST File I/O Mechanism.
  251853             :        */
  251854             :       /* */
  251855             : 
  251856             :     public:
  251857             : 
  251858             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  251859             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  251860             :       // virtual SgNode* addRegExpAttribute();
  251861             :       /*! \brief Support for AST matching using regular expression.
  251862             : 
  251863             :           This support is incomplete and the subject of current research to define 
  251864             :           RegEx trees to support inexact matching.
  251865             :        */
  251866             :           SgAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  251867             : 
  251868             : // *** COMMON CODE SECTION ENDS HERE ***
  251869             : 
  251870             : 
  251871             : // End of memberFunctionString
  251872             : // Start of memberFunctionString
  251873             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  251874             : 
  251875             :      // the generated cast function
  251876             :      // friend ROSE_DLL_API SgAssignOp* isSgAssignOp ( SgNode* s );
  251877             : 
  251878             :           typedef SgBinaryOp base_node_type;
  251879             : 
  251880             : 
  251881             : // End of memberFunctionString
  251882             : // Start of memberFunctionString
  251883             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  251884             : 
  251885             :           void post_construction_initialization() override;
  251886             : 
  251887             : 
  251888             : // End of memberFunctionString
  251889             : // Start of memberFunctionString
  251890             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  251891             : 
  251892           0 :           int precedence() const override { return  2; }
  251893             : 
  251894             : 
  251895             : // End of memberFunctionString
  251896             : 
  251897             : 
  251898             :      public: 
  251899             :          virtual ~SgAssignOp();
  251900             : 
  251901             : 
  251902             :      public: 
  251903             :          SgAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  251904             :          SgAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  251905             : 
  251906             :     protected:
  251907             : 
  251908             :     friend struct Rose::Traits::generated::describe_node_t<SgAssignOp>;
  251909             : 
  251910             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251911             : 
  251912             : 
  251913             :    };
  251914             : #endif
  251915             : 
  251916             : // postdeclarations for SgAssignOp
  251917             : 
  251918             : /* #line 251919 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251919             : 
  251920             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  251921             : 
  251922             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251923             : 
  251924             : 
  251925             : /* #line 251926 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251926             : 
  251927             : 
  251928             : 
  251929             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251930             : 
  251931             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  251932             : //      This code is automatically generated for each 
  251933             : //      terminal and non-terminal within the defined 
  251934             : //      grammar.  There is a simple way to change the 
  251935             : //      code to fix bugs etc.  See the ROSE README file
  251936             : //      for directions.
  251937             : 
  251938             : // tps: (02/22/2010): Adding DLL export requirements
  251939             : #include "rosedll.h"
  251940             : 
  251941             : // predeclarations for SgExponentiationOp
  251942             : 
  251943             : /* #line 251944 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251944             : 
  251945             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  251946             : 
  251947             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  251948             : 
  251949             : #if 1
  251950             : // Class Definition for SgExponentiationOp
  251951             : class ROSE_DLL_API SgExponentiationOp  : public SgBinaryOp
  251952             :    {
  251953             :      public:
  251954             : 
  251955             : 
  251956             : /* #line 251957 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  251957             : 
  251958             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  251959             : // Start of memberFunctionString
  251960             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  251961             : 
  251962             : // *** COMMON CODE SECTION BEGINS HERE ***
  251963             : 
  251964             :     public:
  251965             : 
  251966             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  251967             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  251968             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  251969             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  251970             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  251971             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  251972             : 
  251973             :       /*! \brief returns a string representing the class name */
  251974             :           virtual std::string class_name() const override;
  251975             : 
  251976             :       /*! \brief returns new style SageIII enum values */
  251977             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  251978             : 
  251979             :       /*! \brief static variant value */
  251980             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  251981             :        // static const VariantT static_variant = V_SgExponentiationOp;
  251982             :           enum { static_variant = V_SgExponentiationOp };
  251983             : 
  251984             :        /* the generated cast function */
  251985             :       /*! \brief Casts pointer from base class to derived class */
  251986             :           ROSE_DLL_API friend       SgExponentiationOp* isSgExponentiationOp(       SgNode * s );
  251987             : 
  251988             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  251989             :           ROSE_DLL_API friend const SgExponentiationOp* isSgExponentiationOp( const SgNode * s );
  251990             : 
  251991             :      // ******************************************
  251992             :      // * Memory Pool / New / Delete
  251993             :      // ******************************************
  251994             : 
  251995             :      public:
  251996             :           /// \private
  251997             :           static const unsigned pool_size; //
  251998             :           /// \private
  251999             :           static std::vector<unsigned char *> pools; //
  252000             :           /// \private
  252001             :           static SgExponentiationOp * next_node; // 
  252002             : 
  252003             :           /// \private
  252004             :           static unsigned long initializeStorageClassArray(SgExponentiationOpStorageClass *); //
  252005             : 
  252006             :           /// \private
  252007             :           static void clearMemoryPool(); //
  252008             :           static void deleteMemoryPool(); //
  252009             : 
  252010             :           /// \private
  252011             :           static void extendMemoryPoolForFileIO(); //
  252012             : 
  252013             :           /// \private
  252014             :           static SgExponentiationOp * getPointerFromGlobalIndex(unsigned long); //
  252015             :           /// \private
  252016             :           static SgExponentiationOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  252017             : 
  252018             :           /// \private
  252019             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  252020             :           /// \private
  252021             :           static void resetValidFreepointers(); //
  252022             :           /// \private
  252023             :           static unsigned long getNumberOfLastValidPointer(); //
  252024             : 
  252025             : 
  252026             : #if defined(INLINE_FUNCTIONS)
  252027             :       /*! \brief returns pointer to newly allocated IR node */
  252028             :           inline void *operator new (size_t size);
  252029             : #else
  252030             :       /*! \brief returns pointer to newly allocated IR node */
  252031             :           void *operator new (size_t size);
  252032             : #endif
  252033             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  252034             :           void operator delete (void* pointer, size_t size);
  252035             : 
  252036             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  252037           0 :           void operator delete (void* pointer)
  252038             :              {
  252039             :             // This is the generated delete operator...
  252040           0 :                SgExponentiationOp::operator delete (pointer,sizeof(SgExponentiationOp));
  252041             :              }
  252042             : 
  252043             :       /*! \brief Returns the total number of IR nodes of this type */
  252044             :           static size_t numberOfNodes();
  252045             : 
  252046             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  252047             :           static size_t memoryUsage();
  252048             : 
  252049             :       // End of scope which started in IR nodes specific code 
  252050             :       /* */
  252051             : 
  252052             :       /* name Internal Functions
  252053             :           \brief Internal functions ... incomplete-documentation
  252054             : 
  252055             :           These functions have been made public as part of the design, but they are suggested for internal use 
  252056             :           or by particularly knowledgeable users for specialized tools or applications.
  252057             : 
  252058             :           \internal We could not make these private because they are required by user for special purposes. And 
  252059             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  252060             :          
  252061             :        */
  252062             : 
  252063             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  252064             :        // overridden in every class by *generated* implementation
  252065             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  252066             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  252067             :        // MS: 06/28/02 container of names of variables or container indices 
  252068             :        // used used in the traversal to access AST successor nodes
  252069             :        // overridden in every class by *generated* implementation
  252070             :       /*! \brief container of names of variables or container indices used used in the traversal
  252071             :           to access AST successor nodes overridden in every class by *generated* implementation */
  252072             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  252073             : 
  252074             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  252075             :        // than all the vector copies. The implementation for these functions is generated for each class.
  252076             :       /*! \brief return number of children in the traversal successor list */
  252077             :           virtual size_t get_numberOfTraversalSuccessors() override;
  252078             :       /*! \brief index-based access to traversal successors by index number */
  252079             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  252080             :       /*! \brief index-based access to traversal successors by child node */
  252081             :           virtual size_t get_childIndex(SgNode *child) override;
  252082             : 
  252083             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  252084             :        // MS: 08/16/2002 method for generating RTI information
  252085             :       /*! \brief return C++ Runtime-Time-Information */
  252086             :           virtual RTIReturnType roseRTI() override;
  252087             : #endif
  252088             :       /* */
  252089             : 
  252090             : 
  252091             : 
  252092             :       /* name Deprecated Functions
  252093             :           \brief Deprecated functions ... incomplete-documentation
  252094             : 
  252095             :           These functions have been deprecated from use.
  252096             :        */
  252097             :       /* */
  252098             : 
  252099             :       /*! returns a C style string (char*) representing the class name */
  252100             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  252101             : 
  252102             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  252103             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  252104             : #if 0
  252105             :       /*! returns old style Sage II enum values */
  252106             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  252107             :       /*! returns old style Sage II enum values */
  252108             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  252109             : #endif
  252110             :       /* */
  252111             : 
  252112             : 
  252113             : 
  252114             : 
  252115             :      public:
  252116             :       /* name Traversal Support Functions
  252117             :           \brief Traversal support functions ... incomplete-documentation
  252118             : 
  252119             :           These functions have been made public as part of the design, but they are suggested for internal use 
  252120             :           or by particularly knowledgable users for specialized tools or applications.
  252121             :        */
  252122             :       /* */
  252123             : 
  252124             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  252125             :        // (inferior to ROSE traversal mechanism, experimental).
  252126             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  252127             :        */
  252128             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  252129             : 
  252130             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  252131             :       /*! \brief support for the classic visitor pattern done in GoF */
  252132             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  252133             : 
  252134             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  252135             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  252136             :        */
  252137             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  252138             : 
  252139             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  252140             :        */
  252141             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  252142             : 
  252143             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  252144             :        // This traversal helps support internal tools that call static member functions.
  252145             :        // note: this function operates on the memory pools.
  252146             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  252147             :        */
  252148             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  252149             :       /* */
  252150             : 
  252151             : 
  252152             :      public:
  252153             :       /* name Memory Allocation Functions
  252154             :           \brief Memory allocations functions ... incomplete-documentation
  252155             : 
  252156             :           These functions have been made public as part of the design, but they are suggested for internal use 
  252157             :           or by particularly knowledgable users for specialized tools or applications.
  252158             :        */
  252159             :       /* */
  252160             : 
  252161             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  252162             : 
  252163             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  252164             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  252165             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  252166             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  252167             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  252168             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  252169             :           being used with the AST File I/O mechanism.
  252170             :        */
  252171             :           virtual bool isInMemoryPool() override;
  252172             : 
  252173             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  252174             : 
  252175             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  252176             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  252177             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  252178             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  252179             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  252180             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  252181             :           being used with the AST File I/O mechanism.
  252182             :        */
  252183             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  252184             : 
  252185             :       // DQ (4/30/2006): Modified to be a const function.
  252186             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  252187             : 
  252188             :           This functions is part of general support for many possible tools to operate 
  252189             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  252190             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  252191             :           less than the set of pointers used by the AST file I/O. This is part of
  252192             :           work implemented by Andreas, and support tools such as the AST graph generation.
  252193             : 
  252194             :           \warning This function can return unexpected data members and thus the 
  252195             :                    order and the number of elements is unpredicable and subject 
  252196             :                    to change.
  252197             : 
  252198             :           \returns STL vector of pairs of SgNode* and strings
  252199             :        */
  252200             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  252201             : 
  252202             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  252203             : 
  252204             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  252205             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  252206             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  252207             : 
  252208             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  252209             :                    and subject to change.
  252210             :        */
  252211             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  252212             : 
  252213             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  252214             : 
  252215             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  252216             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  252217             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  252218             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  252219             : 
  252220             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  252221             : 
  252222             :           \returns long
  252223             :        */
  252224             :           virtual long getChildIndex( SgNode* childNode ) const override;
  252225             : 
  252226             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  252227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  252228             :       /* \brief Constructor for use by AST File I/O Mechanism
  252229             : 
  252230             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  252231             :           which obtained via fast binary file I/O from disk.
  252232             :        */
  252233             :        // SgExponentiationOp( SgExponentiationOpStorageClass& source );
  252234             : 
  252235             : 
  252236             : 
  252237             : 
  252238             : 
  252239             :  // JH (10/24/2005): methods added to support the ast file IO
  252240             :     private:
  252241             : 
  252242             :       /* name AST Memory Allocation Support Functions
  252243             :           \brief Memory allocations support....
  252244             : 
  252245             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  252246             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  252247             :           and support the AST File I/O Mechanism.
  252248             :        */
  252249             :       /* */
  252250             : 
  252251             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  252252             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  252253             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  252254             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  252255             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  252256             :           a correspinding one in the AST_FILE_IO class!
  252257             :        */
  252258             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  252259             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  252260             :       /* \brief Typedef used for low level memory access.
  252261             :        */
  252262             :        // typedef unsigned char* TestType;
  252263             : 
  252264             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  252265             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  252266             :       /* \brief Typedef used to hold memory addresses as values.
  252267             :        */
  252268             :        // typedef unsigned long  AddressType;
  252269             : 
  252270             : 
  252271             : 
  252272             :        // necessary, to have direct access to the p_freepointer and the private methods !
  252273             :       /*! \brief friend class declaration to support AST File I/O */
  252274             :           friend class AST_FILE_IO;
  252275             : 
  252276             :       /*! \brief friend class declaration to support AST File I/O */
  252277             :           friend class SgExponentiationOpStorageClass;
  252278             : 
  252279             :       /*! \brief friend class declaration to support AST File I/O */
  252280             :           friend class AstSpecificDataManagingClass;
  252281             : 
  252282             :       /*! \brief friend class declaration to support AST File I/O */
  252283             :           friend class AstSpecificDataManagingClassStorageClass;
  252284             :     public:
  252285             :       /*! \brief IR node constructor to support AST File I/O */
  252286             :           SgExponentiationOp( const SgExponentiationOpStorageClass& source );
  252287             : 
  252288             :  // private: // JJW hack
  252289             :        /*
  252290             :           name AST Memory Allocation Support Variables
  252291             :           Memory allocations support variables 
  252292             : 
  252293             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  252294             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  252295             :           and support the AST File I/O Mechanism.
  252296             :        */
  252297             :       /* */
  252298             : 
  252299             :     public:
  252300             : 
  252301             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  252302             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  252303             :       // virtual SgNode* addRegExpAttribute();
  252304             :       /*! \brief Support for AST matching using regular expression.
  252305             : 
  252306             :           This support is incomplete and the subject of current research to define 
  252307             :           RegEx trees to support inexact matching.
  252308             :        */
  252309             :           SgExponentiationOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  252310             : 
  252311             : // *** COMMON CODE SECTION ENDS HERE ***
  252312             : 
  252313             : 
  252314             : // End of memberFunctionString
  252315             : // Start of memberFunctionString
  252316             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  252317             : 
  252318             :      // the generated cast function
  252319             :      // friend ROSE_DLL_API SgExponentiationOp* isSgExponentiationOp ( SgNode* s );
  252320             : 
  252321             :           typedef SgBinaryOp base_node_type;
  252322             : 
  252323             : 
  252324             : // End of memberFunctionString
  252325             : // Start of memberFunctionString
  252326             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  252327             : 
  252328             :           void post_construction_initialization() override;
  252329             : 
  252330             : 
  252331             : // End of memberFunctionString
  252332             : // Start of memberFunctionString
  252333             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  252334             : 
  252335           0 :           int precedence() const override { return  2; }
  252336             : 
  252337             : 
  252338             : // End of memberFunctionString
  252339             : 
  252340             : 
  252341             :      public: 
  252342             :          virtual ~SgExponentiationOp();
  252343             : 
  252344             : 
  252345             :      public: 
  252346             :          SgExponentiationOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  252347             :          SgExponentiationOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  252348             : 
  252349             :     protected:
  252350             : 
  252351             :     friend struct Rose::Traits::generated::describe_node_t<SgExponentiationOp>;
  252352             : 
  252353             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252354             : 
  252355             : 
  252356             :    };
  252357             : #endif
  252358             : 
  252359             : // postdeclarations for SgExponentiationOp
  252360             : 
  252361             : /* #line 252362 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252362             : 
  252363             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  252364             : 
  252365             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252366             : 
  252367             : 
  252368             : /* #line 252369 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252369             : 
  252370             : 
  252371             : 
  252372             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252373             : 
  252374             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  252375             : //      This code is automatically generated for each 
  252376             : //      terminal and non-terminal within the defined 
  252377             : //      grammar.  There is a simple way to change the 
  252378             : //      code to fix bugs etc.  See the ROSE README file
  252379             : //      for directions.
  252380             : 
  252381             : // tps: (02/22/2010): Adding DLL export requirements
  252382             : #include "rosedll.h"
  252383             : 
  252384             : // predeclarations for SgConcatenationOp
  252385             : 
  252386             : /* #line 252387 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252387             : 
  252388             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  252389             : 
  252390             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252391             : 
  252392             : #if 1
  252393             : // Class Definition for SgConcatenationOp
  252394             : class ROSE_DLL_API SgConcatenationOp  : public SgBinaryOp
  252395             :    {
  252396             :      public:
  252397             : 
  252398             : 
  252399             : /* #line 252400 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252400             : 
  252401             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  252402             : // Start of memberFunctionString
  252403             : /* #line 1475 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  252404             : 
  252405             : 
  252406             : 
  252407             : // End of memberFunctionString
  252408             : // Start of memberFunctionString
  252409             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  252410             : 
  252411             : // *** COMMON CODE SECTION BEGINS HERE ***
  252412             : 
  252413             :     public:
  252414             : 
  252415             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  252416             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  252417             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  252418             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  252419             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  252420             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  252421             : 
  252422             :       /*! \brief returns a string representing the class name */
  252423             :           virtual std::string class_name() const override;
  252424             : 
  252425             :       /*! \brief returns new style SageIII enum values */
  252426             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  252427             : 
  252428             :       /*! \brief static variant value */
  252429             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  252430             :        // static const VariantT static_variant = V_SgConcatenationOp;
  252431             :           enum { static_variant = V_SgConcatenationOp };
  252432             : 
  252433             :        /* the generated cast function */
  252434             :       /*! \brief Casts pointer from base class to derived class */
  252435             :           ROSE_DLL_API friend       SgConcatenationOp* isSgConcatenationOp(       SgNode * s );
  252436             : 
  252437             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  252438             :           ROSE_DLL_API friend const SgConcatenationOp* isSgConcatenationOp( const SgNode * s );
  252439             : 
  252440             :      // ******************************************
  252441             :      // * Memory Pool / New / Delete
  252442             :      // ******************************************
  252443             : 
  252444             :      public:
  252445             :           /// \private
  252446             :           static const unsigned pool_size; //
  252447             :           /// \private
  252448             :           static std::vector<unsigned char *> pools; //
  252449             :           /// \private
  252450             :           static SgConcatenationOp * next_node; // 
  252451             : 
  252452             :           /// \private
  252453             :           static unsigned long initializeStorageClassArray(SgConcatenationOpStorageClass *); //
  252454             : 
  252455             :           /// \private
  252456             :           static void clearMemoryPool(); //
  252457             :           static void deleteMemoryPool(); //
  252458             : 
  252459             :           /// \private
  252460             :           static void extendMemoryPoolForFileIO(); //
  252461             : 
  252462             :           /// \private
  252463             :           static SgConcatenationOp * getPointerFromGlobalIndex(unsigned long); //
  252464             :           /// \private
  252465             :           static SgConcatenationOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  252466             : 
  252467             :           /// \private
  252468             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  252469             :           /// \private
  252470             :           static void resetValidFreepointers(); //
  252471             :           /// \private
  252472             :           static unsigned long getNumberOfLastValidPointer(); //
  252473             : 
  252474             : 
  252475             : #if defined(INLINE_FUNCTIONS)
  252476             :       /*! \brief returns pointer to newly allocated IR node */
  252477             :           inline void *operator new (size_t size);
  252478             : #else
  252479             :       /*! \brief returns pointer to newly allocated IR node */
  252480             :           void *operator new (size_t size);
  252481             : #endif
  252482             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  252483             :           void operator delete (void* pointer, size_t size);
  252484             : 
  252485             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  252486           0 :           void operator delete (void* pointer)
  252487             :              {
  252488             :             // This is the generated delete operator...
  252489           0 :                SgConcatenationOp::operator delete (pointer,sizeof(SgConcatenationOp));
  252490             :              }
  252491             : 
  252492             :       /*! \brief Returns the total number of IR nodes of this type */
  252493             :           static size_t numberOfNodes();
  252494             : 
  252495             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  252496             :           static size_t memoryUsage();
  252497             : 
  252498             :       // End of scope which started in IR nodes specific code 
  252499             :       /* */
  252500             : 
  252501             :       /* name Internal Functions
  252502             :           \brief Internal functions ... incomplete-documentation
  252503             : 
  252504             :           These functions have been made public as part of the design, but they are suggested for internal use 
  252505             :           or by particularly knowledgeable users for specialized tools or applications.
  252506             : 
  252507             :           \internal We could not make these private because they are required by user for special purposes. And 
  252508             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  252509             :          
  252510             :        */
  252511             : 
  252512             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  252513             :        // overridden in every class by *generated* implementation
  252514             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  252515             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  252516             :        // MS: 06/28/02 container of names of variables or container indices 
  252517             :        // used used in the traversal to access AST successor nodes
  252518             :        // overridden in every class by *generated* implementation
  252519             :       /*! \brief container of names of variables or container indices used used in the traversal
  252520             :           to access AST successor nodes overridden in every class by *generated* implementation */
  252521             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  252522             : 
  252523             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  252524             :        // than all the vector copies. The implementation for these functions is generated for each class.
  252525             :       /*! \brief return number of children in the traversal successor list */
  252526             :           virtual size_t get_numberOfTraversalSuccessors() override;
  252527             :       /*! \brief index-based access to traversal successors by index number */
  252528             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  252529             :       /*! \brief index-based access to traversal successors by child node */
  252530             :           virtual size_t get_childIndex(SgNode *child) override;
  252531             : 
  252532             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  252533             :        // MS: 08/16/2002 method for generating RTI information
  252534             :       /*! \brief return C++ Runtime-Time-Information */
  252535             :           virtual RTIReturnType roseRTI() override;
  252536             : #endif
  252537             :       /* */
  252538             : 
  252539             : 
  252540             : 
  252541             :       /* name Deprecated Functions
  252542             :           \brief Deprecated functions ... incomplete-documentation
  252543             : 
  252544             :           These functions have been deprecated from use.
  252545             :        */
  252546             :       /* */
  252547             : 
  252548             :       /*! returns a C style string (char*) representing the class name */
  252549             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  252550             : 
  252551             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  252552             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  252553             : #if 0
  252554             :       /*! returns old style Sage II enum values */
  252555             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  252556             :       /*! returns old style Sage II enum values */
  252557             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  252558             : #endif
  252559             :       /* */
  252560             : 
  252561             : 
  252562             : 
  252563             : 
  252564             :      public:
  252565             :       /* name Traversal Support Functions
  252566             :           \brief Traversal support functions ... incomplete-documentation
  252567             : 
  252568             :           These functions have been made public as part of the design, but they are suggested for internal use 
  252569             :           or by particularly knowledgable users for specialized tools or applications.
  252570             :        */
  252571             :       /* */
  252572             : 
  252573             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  252574             :        // (inferior to ROSE traversal mechanism, experimental).
  252575             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  252576             :        */
  252577             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  252578             : 
  252579             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  252580             :       /*! \brief support for the classic visitor pattern done in GoF */
  252581             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  252582             : 
  252583             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  252584             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  252585             :        */
  252586             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  252587             : 
  252588             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  252589             :        */
  252590             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  252591             : 
  252592             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  252593             :        // This traversal helps support internal tools that call static member functions.
  252594             :        // note: this function operates on the memory pools.
  252595             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  252596             :        */
  252597             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  252598             :       /* */
  252599             : 
  252600             : 
  252601             :      public:
  252602             :       /* name Memory Allocation Functions
  252603             :           \brief Memory allocations functions ... incomplete-documentation
  252604             : 
  252605             :           These functions have been made public as part of the design, but they are suggested for internal use 
  252606             :           or by particularly knowledgable users for specialized tools or applications.
  252607             :        */
  252608             :       /* */
  252609             : 
  252610             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  252611             : 
  252612             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  252613             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  252614             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  252615             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  252616             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  252617             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  252618             :           being used with the AST File I/O mechanism.
  252619             :        */
  252620             :           virtual bool isInMemoryPool() override;
  252621             : 
  252622             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  252623             : 
  252624             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  252625             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  252626             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  252627             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  252628             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  252629             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  252630             :           being used with the AST File I/O mechanism.
  252631             :        */
  252632             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  252633             : 
  252634             :       // DQ (4/30/2006): Modified to be a const function.
  252635             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  252636             : 
  252637             :           This functions is part of general support for many possible tools to operate 
  252638             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  252639             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  252640             :           less than the set of pointers used by the AST file I/O. This is part of
  252641             :           work implemented by Andreas, and support tools such as the AST graph generation.
  252642             : 
  252643             :           \warning This function can return unexpected data members and thus the 
  252644             :                    order and the number of elements is unpredicable and subject 
  252645             :                    to change.
  252646             : 
  252647             :           \returns STL vector of pairs of SgNode* and strings
  252648             :        */
  252649             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  252650             : 
  252651             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  252652             : 
  252653             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  252654             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  252655             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  252656             : 
  252657             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  252658             :                    and subject to change.
  252659             :        */
  252660             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  252661             : 
  252662             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  252663             : 
  252664             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  252665             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  252666             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  252667             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  252668             : 
  252669             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  252670             : 
  252671             :           \returns long
  252672             :        */
  252673             :           virtual long getChildIndex( SgNode* childNode ) const override;
  252674             : 
  252675             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  252676             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  252677             :       /* \brief Constructor for use by AST File I/O Mechanism
  252678             : 
  252679             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  252680             :           which obtained via fast binary file I/O from disk.
  252681             :        */
  252682             :        // SgConcatenationOp( SgConcatenationOpStorageClass& source );
  252683             : 
  252684             : 
  252685             : 
  252686             : 
  252687             : 
  252688             :  // JH (10/24/2005): methods added to support the ast file IO
  252689             :     private:
  252690             : 
  252691             :       /* name AST Memory Allocation Support Functions
  252692             :           \brief Memory allocations support....
  252693             : 
  252694             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  252695             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  252696             :           and support the AST File I/O Mechanism.
  252697             :        */
  252698             :       /* */
  252699             : 
  252700             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  252701             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  252702             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  252703             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  252704             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  252705             :           a correspinding one in the AST_FILE_IO class!
  252706             :        */
  252707             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  252708             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  252709             :       /* \brief Typedef used for low level memory access.
  252710             :        */
  252711             :        // typedef unsigned char* TestType;
  252712             : 
  252713             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  252714             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  252715             :       /* \brief Typedef used to hold memory addresses as values.
  252716             :        */
  252717             :        // typedef unsigned long  AddressType;
  252718             : 
  252719             : 
  252720             : 
  252721             :        // necessary, to have direct access to the p_freepointer and the private methods !
  252722             :       /*! \brief friend class declaration to support AST File I/O */
  252723             :           friend class AST_FILE_IO;
  252724             : 
  252725             :       /*! \brief friend class declaration to support AST File I/O */
  252726             :           friend class SgConcatenationOpStorageClass;
  252727             : 
  252728             :       /*! \brief friend class declaration to support AST File I/O */
  252729             :           friend class AstSpecificDataManagingClass;
  252730             : 
  252731             :       /*! \brief friend class declaration to support AST File I/O */
  252732             :           friend class AstSpecificDataManagingClassStorageClass;
  252733             :     public:
  252734             :       /*! \brief IR node constructor to support AST File I/O */
  252735             :           SgConcatenationOp( const SgConcatenationOpStorageClass& source );
  252736             : 
  252737             :  // private: // JJW hack
  252738             :        /*
  252739             :           name AST Memory Allocation Support Variables
  252740             :           Memory allocations support variables 
  252741             : 
  252742             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  252743             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  252744             :           and support the AST File I/O Mechanism.
  252745             :        */
  252746             :       /* */
  252747             : 
  252748             :     public:
  252749             : 
  252750             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  252751             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  252752             :       // virtual SgNode* addRegExpAttribute();
  252753             :       /*! \brief Support for AST matching using regular expression.
  252754             : 
  252755             :           This support is incomplete and the subject of current research to define 
  252756             :           RegEx trees to support inexact matching.
  252757             :        */
  252758             :           SgConcatenationOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  252759             : 
  252760             : // *** COMMON CODE SECTION ENDS HERE ***
  252761             : 
  252762             : 
  252763             : // End of memberFunctionString
  252764             : // Start of memberFunctionString
  252765             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  252766             : 
  252767             :      // the generated cast function
  252768             :      // friend ROSE_DLL_API SgConcatenationOp* isSgConcatenationOp ( SgNode* s );
  252769             : 
  252770             :           typedef SgBinaryOp base_node_type;
  252771             : 
  252772             : 
  252773             : // End of memberFunctionString
  252774             : // Start of memberFunctionString
  252775             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  252776             : 
  252777             :           void post_construction_initialization() override;
  252778             : 
  252779             : 
  252780             : // End of memberFunctionString
  252781             : // Start of memberFunctionString
  252782             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  252783             : 
  252784           0 :           int precedence() const override { return  3; }
  252785             : 
  252786             : 
  252787             : // End of memberFunctionString
  252788             : 
  252789             : 
  252790             :      public: 
  252791             :          virtual ~SgConcatenationOp();
  252792             : 
  252793             : 
  252794             :      public: 
  252795             :          SgConcatenationOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  252796             :          SgConcatenationOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  252797             : 
  252798             :     protected:
  252799             : 
  252800             :     friend struct Rose::Traits::generated::describe_node_t<SgConcatenationOp>;
  252801             : 
  252802             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252803             : 
  252804             : 
  252805             :    };
  252806             : #endif
  252807             : 
  252808             : // postdeclarations for SgConcatenationOp
  252809             : 
  252810             : /* #line 252811 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252811             : 
  252812             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  252813             : 
  252814             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252815             : 
  252816             : 
  252817             : /* #line 252818 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252818             : 
  252819             : 
  252820             : 
  252821             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252822             : 
  252823             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  252824             : //      This code is automatically generated for each 
  252825             : //      terminal and non-terminal within the defined 
  252826             : //      grammar.  There is a simple way to change the 
  252827             : //      code to fix bugs etc.  See the ROSE README file
  252828             : //      for directions.
  252829             : 
  252830             : // tps: (02/22/2010): Adding DLL export requirements
  252831             : #include "rosedll.h"
  252832             : 
  252833             : // predeclarations for SgPointerAssignOp
  252834             : 
  252835             : /* #line 252836 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252836             : 
  252837             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  252838             : 
  252839             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  252840             : 
  252841             : #if 1
  252842             : // Class Definition for SgPointerAssignOp
  252843             : class ROSE_DLL_API SgPointerAssignOp  : public SgBinaryOp
  252844             :    {
  252845             :      public:
  252846             : 
  252847             : 
  252848             : /* #line 252849 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  252849             : 
  252850             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  252851             : // Start of memberFunctionString
  252852             : /* #line 1435 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  252853             : 
  252854             : 
  252855             :        // get lvalue
  252856             :           virtual bool isDefinable() const override;
  252857             : 
  252858             : 
  252859             : 
  252860             : // End of memberFunctionString
  252861             : // Start of memberFunctionString
  252862             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  252863             : 
  252864             : // *** COMMON CODE SECTION BEGINS HERE ***
  252865             : 
  252866             :     public:
  252867             : 
  252868             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  252869             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  252870             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  252871             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  252872             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  252873             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  252874             : 
  252875             :       /*! \brief returns a string representing the class name */
  252876             :           virtual std::string class_name() const override;
  252877             : 
  252878             :       /*! \brief returns new style SageIII enum values */
  252879             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  252880             : 
  252881             :       /*! \brief static variant value */
  252882             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  252883             :        // static const VariantT static_variant = V_SgPointerAssignOp;
  252884             :           enum { static_variant = V_SgPointerAssignOp };
  252885             : 
  252886             :        /* the generated cast function */
  252887             :       /*! \brief Casts pointer from base class to derived class */
  252888             :           ROSE_DLL_API friend       SgPointerAssignOp* isSgPointerAssignOp(       SgNode * s );
  252889             : 
  252890             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  252891             :           ROSE_DLL_API friend const SgPointerAssignOp* isSgPointerAssignOp( const SgNode * s );
  252892             : 
  252893             :      // ******************************************
  252894             :      // * Memory Pool / New / Delete
  252895             :      // ******************************************
  252896             : 
  252897             :      public:
  252898             :           /// \private
  252899             :           static const unsigned pool_size; //
  252900             :           /// \private
  252901             :           static std::vector<unsigned char *> pools; //
  252902             :           /// \private
  252903             :           static SgPointerAssignOp * next_node; // 
  252904             : 
  252905             :           /// \private
  252906             :           static unsigned long initializeStorageClassArray(SgPointerAssignOpStorageClass *); //
  252907             : 
  252908             :           /// \private
  252909             :           static void clearMemoryPool(); //
  252910             :           static void deleteMemoryPool(); //
  252911             : 
  252912             :           /// \private
  252913             :           static void extendMemoryPoolForFileIO(); //
  252914             : 
  252915             :           /// \private
  252916             :           static SgPointerAssignOp * getPointerFromGlobalIndex(unsigned long); //
  252917             :           /// \private
  252918             :           static SgPointerAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  252919             : 
  252920             :           /// \private
  252921             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  252922             :           /// \private
  252923             :           static void resetValidFreepointers(); //
  252924             :           /// \private
  252925             :           static unsigned long getNumberOfLastValidPointer(); //
  252926             : 
  252927             : 
  252928             : #if defined(INLINE_FUNCTIONS)
  252929             :       /*! \brief returns pointer to newly allocated IR node */
  252930             :           inline void *operator new (size_t size);
  252931             : #else
  252932             :       /*! \brief returns pointer to newly allocated IR node */
  252933             :           void *operator new (size_t size);
  252934             : #endif
  252935             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  252936             :           void operator delete (void* pointer, size_t size);
  252937             : 
  252938             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  252939           0 :           void operator delete (void* pointer)
  252940             :              {
  252941             :             // This is the generated delete operator...
  252942           0 :                SgPointerAssignOp::operator delete (pointer,sizeof(SgPointerAssignOp));
  252943             :              }
  252944             : 
  252945             :       /*! \brief Returns the total number of IR nodes of this type */
  252946             :           static size_t numberOfNodes();
  252947             : 
  252948             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  252949             :           static size_t memoryUsage();
  252950             : 
  252951             :       // End of scope which started in IR nodes specific code 
  252952             :       /* */
  252953             : 
  252954             :       /* name Internal Functions
  252955             :           \brief Internal functions ... incomplete-documentation
  252956             : 
  252957             :           These functions have been made public as part of the design, but they are suggested for internal use 
  252958             :           or by particularly knowledgeable users for specialized tools or applications.
  252959             : 
  252960             :           \internal We could not make these private because they are required by user for special purposes. And 
  252961             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  252962             :          
  252963             :        */
  252964             : 
  252965             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  252966             :        // overridden in every class by *generated* implementation
  252967             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  252968             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  252969             :        // MS: 06/28/02 container of names of variables or container indices 
  252970             :        // used used in the traversal to access AST successor nodes
  252971             :        // overridden in every class by *generated* implementation
  252972             :       /*! \brief container of names of variables or container indices used used in the traversal
  252973             :           to access AST successor nodes overridden in every class by *generated* implementation */
  252974             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  252975             : 
  252976             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  252977             :        // than all the vector copies. The implementation for these functions is generated for each class.
  252978             :       /*! \brief return number of children in the traversal successor list */
  252979             :           virtual size_t get_numberOfTraversalSuccessors() override;
  252980             :       /*! \brief index-based access to traversal successors by index number */
  252981             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  252982             :       /*! \brief index-based access to traversal successors by child node */
  252983             :           virtual size_t get_childIndex(SgNode *child) override;
  252984             : 
  252985             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  252986             :        // MS: 08/16/2002 method for generating RTI information
  252987             :       /*! \brief return C++ Runtime-Time-Information */
  252988             :           virtual RTIReturnType roseRTI() override;
  252989             : #endif
  252990             :       /* */
  252991             : 
  252992             : 
  252993             : 
  252994             :       /* name Deprecated Functions
  252995             :           \brief Deprecated functions ... incomplete-documentation
  252996             : 
  252997             :           These functions have been deprecated from use.
  252998             :        */
  252999             :       /* */
  253000             : 
  253001             :       /*! returns a C style string (char*) representing the class name */
  253002             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  253003             : 
  253004             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  253005             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  253006             : #if 0
  253007             :       /*! returns old style Sage II enum values */
  253008             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  253009             :       /*! returns old style Sage II enum values */
  253010             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  253011             : #endif
  253012             :       /* */
  253013             : 
  253014             : 
  253015             : 
  253016             : 
  253017             :      public:
  253018             :       /* name Traversal Support Functions
  253019             :           \brief Traversal support functions ... incomplete-documentation
  253020             : 
  253021             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253022             :           or by particularly knowledgable users for specialized tools or applications.
  253023             :        */
  253024             :       /* */
  253025             : 
  253026             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  253027             :        // (inferior to ROSE traversal mechanism, experimental).
  253028             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  253029             :        */
  253030             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  253031             : 
  253032             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  253033             :       /*! \brief support for the classic visitor pattern done in GoF */
  253034             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  253035             : 
  253036             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  253037             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  253038             :        */
  253039             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  253040             : 
  253041             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  253042             :        */
  253043             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  253044             : 
  253045             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  253046             :        // This traversal helps support internal tools that call static member functions.
  253047             :        // note: this function operates on the memory pools.
  253048             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  253049             :        */
  253050             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  253051             :       /* */
  253052             : 
  253053             : 
  253054             :      public:
  253055             :       /* name Memory Allocation Functions
  253056             :           \brief Memory allocations functions ... incomplete-documentation
  253057             : 
  253058             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253059             :           or by particularly knowledgable users for specialized tools or applications.
  253060             :        */
  253061             :       /* */
  253062             : 
  253063             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  253064             : 
  253065             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  253066             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  253067             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  253068             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  253069             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  253070             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  253071             :           being used with the AST File I/O mechanism.
  253072             :        */
  253073             :           virtual bool isInMemoryPool() override;
  253074             : 
  253075             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  253076             : 
  253077             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  253078             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  253079             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  253080             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  253081             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  253082             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  253083             :           being used with the AST File I/O mechanism.
  253084             :        */
  253085             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  253086             : 
  253087             :       // DQ (4/30/2006): Modified to be a const function.
  253088             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  253089             : 
  253090             :           This functions is part of general support for many possible tools to operate 
  253091             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  253092             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  253093             :           less than the set of pointers used by the AST file I/O. This is part of
  253094             :           work implemented by Andreas, and support tools such as the AST graph generation.
  253095             : 
  253096             :           \warning This function can return unexpected data members and thus the 
  253097             :                    order and the number of elements is unpredicable and subject 
  253098             :                    to change.
  253099             : 
  253100             :           \returns STL vector of pairs of SgNode* and strings
  253101             :        */
  253102             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  253103             : 
  253104             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  253105             : 
  253106             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  253107             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  253108             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  253109             : 
  253110             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  253111             :                    and subject to change.
  253112             :        */
  253113             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  253114             : 
  253115             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  253116             : 
  253117             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  253118             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  253119             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  253120             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  253121             : 
  253122             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  253123             : 
  253124             :           \returns long
  253125             :        */
  253126             :           virtual long getChildIndex( SgNode* childNode ) const override;
  253127             : 
  253128             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  253129             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  253130             :       /* \brief Constructor for use by AST File I/O Mechanism
  253131             : 
  253132             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  253133             :           which obtained via fast binary file I/O from disk.
  253134             :        */
  253135             :        // SgPointerAssignOp( SgPointerAssignOpStorageClass& source );
  253136             : 
  253137             : 
  253138             : 
  253139             : 
  253140             : 
  253141             :  // JH (10/24/2005): methods added to support the ast file IO
  253142             :     private:
  253143             : 
  253144             :       /* name AST Memory Allocation Support Functions
  253145             :           \brief Memory allocations support....
  253146             : 
  253147             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  253148             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  253149             :           and support the AST File I/O Mechanism.
  253150             :        */
  253151             :       /* */
  253152             : 
  253153             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  253154             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  253155             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  253156             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  253157             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  253158             :           a correspinding one in the AST_FILE_IO class!
  253159             :        */
  253160             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  253161             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  253162             :       /* \brief Typedef used for low level memory access.
  253163             :        */
  253164             :        // typedef unsigned char* TestType;
  253165             : 
  253166             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  253167             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  253168             :       /* \brief Typedef used to hold memory addresses as values.
  253169             :        */
  253170             :        // typedef unsigned long  AddressType;
  253171             : 
  253172             : 
  253173             : 
  253174             :        // necessary, to have direct access to the p_freepointer and the private methods !
  253175             :       /*! \brief friend class declaration to support AST File I/O */
  253176             :           friend class AST_FILE_IO;
  253177             : 
  253178             :       /*! \brief friend class declaration to support AST File I/O */
  253179             :           friend class SgPointerAssignOpStorageClass;
  253180             : 
  253181             :       /*! \brief friend class declaration to support AST File I/O */
  253182             :           friend class AstSpecificDataManagingClass;
  253183             : 
  253184             :       /*! \brief friend class declaration to support AST File I/O */
  253185             :           friend class AstSpecificDataManagingClassStorageClass;
  253186             :     public:
  253187             :       /*! \brief IR node constructor to support AST File I/O */
  253188             :           SgPointerAssignOp( const SgPointerAssignOpStorageClass& source );
  253189             : 
  253190             :  // private: // JJW hack
  253191             :        /*
  253192             :           name AST Memory Allocation Support Variables
  253193             :           Memory allocations support variables 
  253194             : 
  253195             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  253196             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  253197             :           and support the AST File I/O Mechanism.
  253198             :        */
  253199             :       /* */
  253200             : 
  253201             :     public:
  253202             : 
  253203             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  253204             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  253205             :       // virtual SgNode* addRegExpAttribute();
  253206             :       /*! \brief Support for AST matching using regular expression.
  253207             : 
  253208             :           This support is incomplete and the subject of current research to define 
  253209             :           RegEx trees to support inexact matching.
  253210             :        */
  253211             :           SgPointerAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  253212             : 
  253213             : // *** COMMON CODE SECTION ENDS HERE ***
  253214             : 
  253215             : 
  253216             : // End of memberFunctionString
  253217             : // Start of memberFunctionString
  253218             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  253219             : 
  253220             :      // the generated cast function
  253221             :      // friend ROSE_DLL_API SgPointerAssignOp* isSgPointerAssignOp ( SgNode* s );
  253222             : 
  253223             :           typedef SgBinaryOp base_node_type;
  253224             : 
  253225             : 
  253226             : // End of memberFunctionString
  253227             : // Start of memberFunctionString
  253228             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  253229             : 
  253230             :           void post_construction_initialization() override;
  253231             : 
  253232             : 
  253233             : // End of memberFunctionString
  253234             : // Start of memberFunctionString
  253235             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  253236             : 
  253237           0 :           int precedence() const override { return  2; }
  253238             : 
  253239             : 
  253240             : // End of memberFunctionString
  253241             : 
  253242             : 
  253243             :      public: 
  253244             :          virtual ~SgPointerAssignOp();
  253245             : 
  253246             : 
  253247             :      public: 
  253248             :          SgPointerAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  253249             :          SgPointerAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  253250             : 
  253251             :     protected:
  253252             : 
  253253             :     friend struct Rose::Traits::generated::describe_node_t<SgPointerAssignOp>;
  253254             : 
  253255             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253256             : 
  253257             : 
  253258             :    };
  253259             : #endif
  253260             : 
  253261             : // postdeclarations for SgPointerAssignOp
  253262             : 
  253263             : /* #line 253264 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253264             : 
  253265             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  253266             : 
  253267             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253268             : 
  253269             : 
  253270             : /* #line 253271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253271             : 
  253272             : 
  253273             : 
  253274             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253275             : 
  253276             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  253277             : //      This code is automatically generated for each 
  253278             : //      terminal and non-terminal within the defined 
  253279             : //      grammar.  There is a simple way to change the 
  253280             : //      code to fix bugs etc.  See the ROSE README file
  253281             : //      for directions.
  253282             : 
  253283             : // tps: (02/22/2010): Adding DLL export requirements
  253284             : #include "rosedll.h"
  253285             : 
  253286             : // predeclarations for SgUserDefinedBinaryOp
  253287             : 
  253288             : /* #line 253289 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253289             : 
  253290             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  253291             : 
  253292             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253293             : 
  253294             : #if 1
  253295             : // Class Definition for SgUserDefinedBinaryOp
  253296             : class ROSE_DLL_API SgUserDefinedBinaryOp  : public SgBinaryOp
  253297             :    {
  253298             :      public:
  253299             : 
  253300             : 
  253301             : /* #line 253302 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253302             : 
  253303             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  253304             : // Start of memberFunctionString
  253305             : /* #line 1855 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  253306             : 
  253307             :           SgType* get_type() const override;
  253308             : 
  253309             : 
  253310             : // End of memberFunctionString
  253311             : // Start of memberFunctionString
  253312             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  253313             : 
  253314             : // *** COMMON CODE SECTION BEGINS HERE ***
  253315             : 
  253316             :     public:
  253317             : 
  253318             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  253319             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  253320             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  253321             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  253322             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  253323             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  253324             : 
  253325             :       /*! \brief returns a string representing the class name */
  253326             :           virtual std::string class_name() const override;
  253327             : 
  253328             :       /*! \brief returns new style SageIII enum values */
  253329             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  253330             : 
  253331             :       /*! \brief static variant value */
  253332             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  253333             :        // static const VariantT static_variant = V_SgUserDefinedBinaryOp;
  253334             :           enum { static_variant = V_SgUserDefinedBinaryOp };
  253335             : 
  253336             :        /* the generated cast function */
  253337             :       /*! \brief Casts pointer from base class to derived class */
  253338             :           ROSE_DLL_API friend       SgUserDefinedBinaryOp* isSgUserDefinedBinaryOp(       SgNode * s );
  253339             : 
  253340             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  253341             :           ROSE_DLL_API friend const SgUserDefinedBinaryOp* isSgUserDefinedBinaryOp( const SgNode * s );
  253342             : 
  253343             :      // ******************************************
  253344             :      // * Memory Pool / New / Delete
  253345             :      // ******************************************
  253346             : 
  253347             :      public:
  253348             :           /// \private
  253349             :           static const unsigned pool_size; //
  253350             :           /// \private
  253351             :           static std::vector<unsigned char *> pools; //
  253352             :           /// \private
  253353             :           static SgUserDefinedBinaryOp * next_node; // 
  253354             : 
  253355             :           /// \private
  253356             :           static unsigned long initializeStorageClassArray(SgUserDefinedBinaryOpStorageClass *); //
  253357             : 
  253358             :           /// \private
  253359             :           static void clearMemoryPool(); //
  253360             :           static void deleteMemoryPool(); //
  253361             : 
  253362             :           /// \private
  253363             :           static void extendMemoryPoolForFileIO(); //
  253364             : 
  253365             :           /// \private
  253366             :           static SgUserDefinedBinaryOp * getPointerFromGlobalIndex(unsigned long); //
  253367             :           /// \private
  253368             :           static SgUserDefinedBinaryOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  253369             : 
  253370             :           /// \private
  253371             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  253372             :           /// \private
  253373             :           static void resetValidFreepointers(); //
  253374             :           /// \private
  253375             :           static unsigned long getNumberOfLastValidPointer(); //
  253376             : 
  253377             : 
  253378             : #if defined(INLINE_FUNCTIONS)
  253379             :       /*! \brief returns pointer to newly allocated IR node */
  253380             :           inline void *operator new (size_t size);
  253381             : #else
  253382             :       /*! \brief returns pointer to newly allocated IR node */
  253383             :           void *operator new (size_t size);
  253384             : #endif
  253385             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  253386             :           void operator delete (void* pointer, size_t size);
  253387             : 
  253388             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  253389           0 :           void operator delete (void* pointer)
  253390             :              {
  253391             :             // This is the generated delete operator...
  253392           0 :                SgUserDefinedBinaryOp::operator delete (pointer,sizeof(SgUserDefinedBinaryOp));
  253393             :              }
  253394             : 
  253395             :       /*! \brief Returns the total number of IR nodes of this type */
  253396             :           static size_t numberOfNodes();
  253397             : 
  253398             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  253399             :           static size_t memoryUsage();
  253400             : 
  253401             :       // End of scope which started in IR nodes specific code 
  253402             :       /* */
  253403             : 
  253404             :       /* name Internal Functions
  253405             :           \brief Internal functions ... incomplete-documentation
  253406             : 
  253407             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253408             :           or by particularly knowledgeable users for specialized tools or applications.
  253409             : 
  253410             :           \internal We could not make these private because they are required by user for special purposes. And 
  253411             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  253412             :          
  253413             :        */
  253414             : 
  253415             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  253416             :        // overridden in every class by *generated* implementation
  253417             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  253418             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  253419             :        // MS: 06/28/02 container of names of variables or container indices 
  253420             :        // used used in the traversal to access AST successor nodes
  253421             :        // overridden in every class by *generated* implementation
  253422             :       /*! \brief container of names of variables or container indices used used in the traversal
  253423             :           to access AST successor nodes overridden in every class by *generated* implementation */
  253424             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  253425             : 
  253426             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  253427             :        // than all the vector copies. The implementation for these functions is generated for each class.
  253428             :       /*! \brief return number of children in the traversal successor list */
  253429             :           virtual size_t get_numberOfTraversalSuccessors() override;
  253430             :       /*! \brief index-based access to traversal successors by index number */
  253431             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  253432             :       /*! \brief index-based access to traversal successors by child node */
  253433             :           virtual size_t get_childIndex(SgNode *child) override;
  253434             : 
  253435             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  253436             :        // MS: 08/16/2002 method for generating RTI information
  253437             :       /*! \brief return C++ Runtime-Time-Information */
  253438             :           virtual RTIReturnType roseRTI() override;
  253439             : #endif
  253440             :       /* */
  253441             : 
  253442             : 
  253443             : 
  253444             :       /* name Deprecated Functions
  253445             :           \brief Deprecated functions ... incomplete-documentation
  253446             : 
  253447             :           These functions have been deprecated from use.
  253448             :        */
  253449             :       /* */
  253450             : 
  253451             :       /*! returns a C style string (char*) representing the class name */
  253452             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  253453             : 
  253454             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  253455             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  253456             : #if 0
  253457             :       /*! returns old style Sage II enum values */
  253458             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  253459             :       /*! returns old style Sage II enum values */
  253460             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  253461             : #endif
  253462             :       /* */
  253463             : 
  253464             : 
  253465             : 
  253466             : 
  253467             :      public:
  253468             :       /* name Traversal Support Functions
  253469             :           \brief Traversal support functions ... incomplete-documentation
  253470             : 
  253471             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253472             :           or by particularly knowledgable users for specialized tools or applications.
  253473             :        */
  253474             :       /* */
  253475             : 
  253476             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  253477             :        // (inferior to ROSE traversal mechanism, experimental).
  253478             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  253479             :        */
  253480             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  253481             : 
  253482             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  253483             :       /*! \brief support for the classic visitor pattern done in GoF */
  253484             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  253485             : 
  253486             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  253487             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  253488             :        */
  253489             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  253490             : 
  253491             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  253492             :        */
  253493             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  253494             : 
  253495             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  253496             :        // This traversal helps support internal tools that call static member functions.
  253497             :        // note: this function operates on the memory pools.
  253498             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  253499             :        */
  253500             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  253501             :       /* */
  253502             : 
  253503             : 
  253504             :      public:
  253505             :       /* name Memory Allocation Functions
  253506             :           \brief Memory allocations functions ... incomplete-documentation
  253507             : 
  253508             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253509             :           or by particularly knowledgable users for specialized tools or applications.
  253510             :        */
  253511             :       /* */
  253512             : 
  253513             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  253514             : 
  253515             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  253516             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  253517             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  253518             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  253519             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  253520             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  253521             :           being used with the AST File I/O mechanism.
  253522             :        */
  253523             :           virtual bool isInMemoryPool() override;
  253524             : 
  253525             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  253526             : 
  253527             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  253528             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  253529             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  253530             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  253531             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  253532             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  253533             :           being used with the AST File I/O mechanism.
  253534             :        */
  253535             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  253536             : 
  253537             :       // DQ (4/30/2006): Modified to be a const function.
  253538             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  253539             : 
  253540             :           This functions is part of general support for many possible tools to operate 
  253541             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  253542             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  253543             :           less than the set of pointers used by the AST file I/O. This is part of
  253544             :           work implemented by Andreas, and support tools such as the AST graph generation.
  253545             : 
  253546             :           \warning This function can return unexpected data members and thus the 
  253547             :                    order and the number of elements is unpredicable and subject 
  253548             :                    to change.
  253549             : 
  253550             :           \returns STL vector of pairs of SgNode* and strings
  253551             :        */
  253552             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  253553             : 
  253554             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  253555             : 
  253556             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  253557             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  253558             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  253559             : 
  253560             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  253561             :                    and subject to change.
  253562             :        */
  253563             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  253564             : 
  253565             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  253566             : 
  253567             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  253568             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  253569             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  253570             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  253571             : 
  253572             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  253573             : 
  253574             :           \returns long
  253575             :        */
  253576             :           virtual long getChildIndex( SgNode* childNode ) const override;
  253577             : 
  253578             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  253579             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  253580             :       /* \brief Constructor for use by AST File I/O Mechanism
  253581             : 
  253582             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  253583             :           which obtained via fast binary file I/O from disk.
  253584             :        */
  253585             :        // SgUserDefinedBinaryOp( SgUserDefinedBinaryOpStorageClass& source );
  253586             : 
  253587             : 
  253588             : 
  253589             : 
  253590             : 
  253591             :  // JH (10/24/2005): methods added to support the ast file IO
  253592             :     private:
  253593             : 
  253594             :       /* name AST Memory Allocation Support Functions
  253595             :           \brief Memory allocations support....
  253596             : 
  253597             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  253598             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  253599             :           and support the AST File I/O Mechanism.
  253600             :        */
  253601             :       /* */
  253602             : 
  253603             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  253604             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  253605             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  253606             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  253607             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  253608             :           a correspinding one in the AST_FILE_IO class!
  253609             :        */
  253610             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  253611             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  253612             :       /* \brief Typedef used for low level memory access.
  253613             :        */
  253614             :        // typedef unsigned char* TestType;
  253615             : 
  253616             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  253617             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  253618             :       /* \brief Typedef used to hold memory addresses as values.
  253619             :        */
  253620             :        // typedef unsigned long  AddressType;
  253621             : 
  253622             : 
  253623             : 
  253624             :        // necessary, to have direct access to the p_freepointer and the private methods !
  253625             :       /*! \brief friend class declaration to support AST File I/O */
  253626             :           friend class AST_FILE_IO;
  253627             : 
  253628             :       /*! \brief friend class declaration to support AST File I/O */
  253629             :           friend class SgUserDefinedBinaryOpStorageClass;
  253630             : 
  253631             :       /*! \brief friend class declaration to support AST File I/O */
  253632             :           friend class AstSpecificDataManagingClass;
  253633             : 
  253634             :       /*! \brief friend class declaration to support AST File I/O */
  253635             :           friend class AstSpecificDataManagingClassStorageClass;
  253636             :     public:
  253637             :       /*! \brief IR node constructor to support AST File I/O */
  253638             :           SgUserDefinedBinaryOp( const SgUserDefinedBinaryOpStorageClass& source );
  253639             : 
  253640             :  // private: // JJW hack
  253641             :        /*
  253642             :           name AST Memory Allocation Support Variables
  253643             :           Memory allocations support variables 
  253644             : 
  253645             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  253646             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  253647             :           and support the AST File I/O Mechanism.
  253648             :        */
  253649             :       /* */
  253650             : 
  253651             :     public:
  253652             : 
  253653             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  253654             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  253655             :       // virtual SgNode* addRegExpAttribute();
  253656             :       /*! \brief Support for AST matching using regular expression.
  253657             : 
  253658             :           This support is incomplete and the subject of current research to define 
  253659             :           RegEx trees to support inexact matching.
  253660             :        */
  253661             :           SgUserDefinedBinaryOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  253662             : 
  253663             : // *** COMMON CODE SECTION ENDS HERE ***
  253664             : 
  253665             : 
  253666             : // End of memberFunctionString
  253667             : // Start of memberFunctionString
  253668             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  253669             : 
  253670             :      // the generated cast function
  253671             :      // friend ROSE_DLL_API SgUserDefinedBinaryOp* isSgUserDefinedBinaryOp ( SgNode* s );
  253672             : 
  253673             :           typedef SgBinaryOp base_node_type;
  253674             : 
  253675             : 
  253676             : // End of memberFunctionString
  253677             : // Start of memberFunctionString
  253678             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  253679             : 
  253680             :           void post_construction_initialization() override;
  253681             : 
  253682             : 
  253683             : // End of memberFunctionString
  253684             : // Start of memberFunctionString
  253685             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  253686             : 
  253687           0 :           int precedence() const override { return  2; }
  253688             : 
  253689             : 
  253690             : // End of memberFunctionString
  253691             : 
  253692             :      public: 
  253693             :          SgName get_operator_name() const;
  253694             :          void set_operator_name(SgName operator_name);
  253695             : 
  253696             :      public: 
  253697             :          SgFunctionSymbol* get_symbol() const;
  253698             :          void set_symbol(SgFunctionSymbol* symbol);
  253699             : 
  253700             : 
  253701             :      public: 
  253702             :          virtual ~SgUserDefinedBinaryOp();
  253703             : 
  253704             : 
  253705             :      public: 
  253706             :          SgUserDefinedBinaryOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL, SgName operator_name = "", SgFunctionSymbol* symbol = NULL); 
  253707             :          SgUserDefinedBinaryOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type, SgName operator_name, SgFunctionSymbol* symbol); 
  253708             : 
  253709             :     protected:
  253710             : // Start of memberFunctionString
  253711             : SgName p_operator_name;
  253712             :           
  253713             : // End of memberFunctionString
  253714             : // Start of memberFunctionString
  253715             : SgFunctionSymbol* p_symbol;
  253716             :           
  253717             : // End of memberFunctionString
  253718             : 
  253719             :     friend struct Rose::Traits::generated::describe_node_t<SgUserDefinedBinaryOp>;
  253720             :     friend struct Rose::Traits::generated::describe_field_t<SgUserDefinedBinaryOp, SgName,&SgUserDefinedBinaryOp::p_operator_name>;
  253721             :     friend struct Rose::Traits::generated::describe_field_t<SgUserDefinedBinaryOp, SgFunctionSymbol*,&SgUserDefinedBinaryOp::p_symbol>;
  253722             : 
  253723             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253724             : 
  253725             : 
  253726             :    };
  253727             : #endif
  253728             : 
  253729             : // postdeclarations for SgUserDefinedBinaryOp
  253730             : 
  253731             : /* #line 253732 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253732             : 
  253733             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  253734             : 
  253735             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253736             : 
  253737             : 
  253738             : /* #line 253739 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253739             : 
  253740             : 
  253741             : 
  253742             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253743             : 
  253744             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  253745             : //      This code is automatically generated for each 
  253746             : //      terminal and non-terminal within the defined 
  253747             : //      grammar.  There is a simple way to change the 
  253748             : //      code to fix bugs etc.  See the ROSE README file
  253749             : //      for directions.
  253750             : 
  253751             : // tps: (02/22/2010): Adding DLL export requirements
  253752             : #include "rosedll.h"
  253753             : 
  253754             : // predeclarations for SgCompoundAssignOp
  253755             : 
  253756             : /* #line 253757 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253757             : 
  253758             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  253759             : 
  253760             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  253761             : 
  253762             : #if 1
  253763             : // Class Definition for SgCompoundAssignOp
  253764             : class ROSE_DLL_API SgCompoundAssignOp  : public SgBinaryOp
  253765             :    {
  253766             :      public:
  253767             : 
  253768             : 
  253769             : /* #line 253770 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  253770             : 
  253771             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  253772             : // Start of memberFunctionString
  253773             : /* #line 1416 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  253774             : 
  253775             : 
  253776             :        // get lvalue
  253777             :           virtual bool isLValue() const override;
  253778             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  253779             : 
  253780             : 
  253781             : 
  253782             : // End of memberFunctionString
  253783             : // Start of memberFunctionString
  253784             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  253785             : 
  253786             : // *** COMMON CODE SECTION BEGINS HERE ***
  253787             : 
  253788             :     public:
  253789             : 
  253790             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  253791             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  253792             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  253793             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  253794             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  253795             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  253796             : 
  253797             :       /*! \brief returns a string representing the class name */
  253798             :           virtual std::string class_name() const override;
  253799             : 
  253800             :       /*! \brief returns new style SageIII enum values */
  253801             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  253802             : 
  253803             :       /*! \brief static variant value */
  253804             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  253805             :        // static const VariantT static_variant = V_SgCompoundAssignOp;
  253806             :           enum { static_variant = V_SgCompoundAssignOp };
  253807             : 
  253808             :        /* the generated cast function */
  253809             :       /*! \brief Casts pointer from base class to derived class */
  253810             :           ROSE_DLL_API friend       SgCompoundAssignOp* isSgCompoundAssignOp(       SgNode * s );
  253811             : 
  253812             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  253813             :           ROSE_DLL_API friend const SgCompoundAssignOp* isSgCompoundAssignOp( const SgNode * s );
  253814             : 
  253815             :      // ******************************************
  253816             :      // * Memory Pool / New / Delete
  253817             :      // ******************************************
  253818             : 
  253819             :      public:
  253820             :           /// \private
  253821             :           static const unsigned pool_size; //
  253822             :           /// \private
  253823             :           static std::vector<unsigned char *> pools; //
  253824             :           /// \private
  253825             :           static SgCompoundAssignOp * next_node; // 
  253826             : 
  253827             :           /// \private
  253828             :           static unsigned long initializeStorageClassArray(SgCompoundAssignOpStorageClass *); //
  253829             : 
  253830             :           /// \private
  253831             :           static void clearMemoryPool(); //
  253832             :           static void deleteMemoryPool(); //
  253833             : 
  253834             :           /// \private
  253835             :           static void extendMemoryPoolForFileIO(); //
  253836             : 
  253837             :           /// \private
  253838             :           static SgCompoundAssignOp * getPointerFromGlobalIndex(unsigned long); //
  253839             :           /// \private
  253840             :           static SgCompoundAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  253841             : 
  253842             :           /// \private
  253843             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  253844             :           /// \private
  253845             :           static void resetValidFreepointers(); //
  253846             :           /// \private
  253847             :           static unsigned long getNumberOfLastValidPointer(); //
  253848             : 
  253849             : 
  253850             : #if defined(INLINE_FUNCTIONS)
  253851             :       /*! \brief returns pointer to newly allocated IR node */
  253852             :           inline void *operator new (size_t size);
  253853             : #else
  253854             :       /*! \brief returns pointer to newly allocated IR node */
  253855             :           void *operator new (size_t size);
  253856             : #endif
  253857             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  253858             :           void operator delete (void* pointer, size_t size);
  253859             : 
  253860             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  253861           0 :           void operator delete (void* pointer)
  253862             :              {
  253863             :             // This is the generated delete operator...
  253864           0 :                SgCompoundAssignOp::operator delete (pointer,sizeof(SgCompoundAssignOp));
  253865             :              }
  253866             : 
  253867             :       /*! \brief Returns the total number of IR nodes of this type */
  253868             :           static size_t numberOfNodes();
  253869             : 
  253870             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  253871             :           static size_t memoryUsage();
  253872             : 
  253873             :       // End of scope which started in IR nodes specific code 
  253874             :       /* */
  253875             : 
  253876             :       /* name Internal Functions
  253877             :           \brief Internal functions ... incomplete-documentation
  253878             : 
  253879             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253880             :           or by particularly knowledgeable users for specialized tools or applications.
  253881             : 
  253882             :           \internal We could not make these private because they are required by user for special purposes. And 
  253883             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  253884             :          
  253885             :        */
  253886             : 
  253887             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  253888             :        // overridden in every class by *generated* implementation
  253889             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  253890             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  253891             :        // MS: 06/28/02 container of names of variables or container indices 
  253892             :        // used used in the traversal to access AST successor nodes
  253893             :        // overridden in every class by *generated* implementation
  253894             :       /*! \brief container of names of variables or container indices used used in the traversal
  253895             :           to access AST successor nodes overridden in every class by *generated* implementation */
  253896             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  253897             : 
  253898             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  253899             :        // than all the vector copies. The implementation for these functions is generated for each class.
  253900             :       /*! \brief return number of children in the traversal successor list */
  253901             :           virtual size_t get_numberOfTraversalSuccessors() override;
  253902             :       /*! \brief index-based access to traversal successors by index number */
  253903             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  253904             :       /*! \brief index-based access to traversal successors by child node */
  253905             :           virtual size_t get_childIndex(SgNode *child) override;
  253906             : 
  253907             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  253908             :        // MS: 08/16/2002 method for generating RTI information
  253909             :       /*! \brief return C++ Runtime-Time-Information */
  253910             :           virtual RTIReturnType roseRTI() override;
  253911             : #endif
  253912             :       /* */
  253913             : 
  253914             : 
  253915             : 
  253916             :       /* name Deprecated Functions
  253917             :           \brief Deprecated functions ... incomplete-documentation
  253918             : 
  253919             :           These functions have been deprecated from use.
  253920             :        */
  253921             :       /* */
  253922             : 
  253923             :       /*! returns a C style string (char*) representing the class name */
  253924             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  253925             : 
  253926             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  253927             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  253928             : #if 0
  253929             :       /*! returns old style Sage II enum values */
  253930             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  253931             :       /*! returns old style Sage II enum values */
  253932             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  253933             : #endif
  253934             :       /* */
  253935             : 
  253936             : 
  253937             : 
  253938             : 
  253939             :      public:
  253940             :       /* name Traversal Support Functions
  253941             :           \brief Traversal support functions ... incomplete-documentation
  253942             : 
  253943             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253944             :           or by particularly knowledgable users for specialized tools or applications.
  253945             :        */
  253946             :       /* */
  253947             : 
  253948             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  253949             :        // (inferior to ROSE traversal mechanism, experimental).
  253950             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  253951             :        */
  253952             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  253953             : 
  253954             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  253955             :       /*! \brief support for the classic visitor pattern done in GoF */
  253956             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  253957             : 
  253958             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  253959             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  253960             :        */
  253961             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  253962             : 
  253963             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  253964             :        */
  253965             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  253966             : 
  253967             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  253968             :        // This traversal helps support internal tools that call static member functions.
  253969             :        // note: this function operates on the memory pools.
  253970             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  253971             :        */
  253972             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  253973             :       /* */
  253974             : 
  253975             : 
  253976             :      public:
  253977             :       /* name Memory Allocation Functions
  253978             :           \brief Memory allocations functions ... incomplete-documentation
  253979             : 
  253980             :           These functions have been made public as part of the design, but they are suggested for internal use 
  253981             :           or by particularly knowledgable users for specialized tools or applications.
  253982             :        */
  253983             :       /* */
  253984             : 
  253985             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  253986             : 
  253987             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  253988             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  253989             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  253990             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  253991             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  253992             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  253993             :           being used with the AST File I/O mechanism.
  253994             :        */
  253995             :           virtual bool isInMemoryPool() override;
  253996             : 
  253997             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  253998             : 
  253999             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  254000             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  254001             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  254002             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  254003             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  254004             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  254005             :           being used with the AST File I/O mechanism.
  254006             :        */
  254007             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  254008             : 
  254009             :       // DQ (4/30/2006): Modified to be a const function.
  254010             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  254011             : 
  254012             :           This functions is part of general support for many possible tools to operate 
  254013             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  254014             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  254015             :           less than the set of pointers used by the AST file I/O. This is part of
  254016             :           work implemented by Andreas, and support tools such as the AST graph generation.
  254017             : 
  254018             :           \warning This function can return unexpected data members and thus the 
  254019             :                    order and the number of elements is unpredicable and subject 
  254020             :                    to change.
  254021             : 
  254022             :           \returns STL vector of pairs of SgNode* and strings
  254023             :        */
  254024             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  254025             : 
  254026             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  254027             : 
  254028             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  254029             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  254030             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  254031             : 
  254032             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  254033             :                    and subject to change.
  254034             :        */
  254035             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  254036             : 
  254037             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  254038             : 
  254039             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  254040             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  254041             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  254042             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  254043             : 
  254044             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  254045             : 
  254046             :           \returns long
  254047             :        */
  254048             :           virtual long getChildIndex( SgNode* childNode ) const override;
  254049             : 
  254050             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  254051             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254052             :       /* \brief Constructor for use by AST File I/O Mechanism
  254053             : 
  254054             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  254055             :           which obtained via fast binary file I/O from disk.
  254056             :        */
  254057             :        // SgCompoundAssignOp( SgCompoundAssignOpStorageClass& source );
  254058             : 
  254059             : 
  254060             : 
  254061             : 
  254062             : 
  254063             :  // JH (10/24/2005): methods added to support the ast file IO
  254064             :     private:
  254065             : 
  254066             :       /* name AST Memory Allocation Support Functions
  254067             :           \brief Memory allocations support....
  254068             : 
  254069             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  254070             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  254071             :           and support the AST File I/O Mechanism.
  254072             :        */
  254073             :       /* */
  254074             : 
  254075             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  254076             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  254077             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  254078             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  254079             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  254080             :           a correspinding one in the AST_FILE_IO class!
  254081             :        */
  254082             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  254083             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254084             :       /* \brief Typedef used for low level memory access.
  254085             :        */
  254086             :        // typedef unsigned char* TestType;
  254087             : 
  254088             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  254089             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254090             :       /* \brief Typedef used to hold memory addresses as values.
  254091             :        */
  254092             :        // typedef unsigned long  AddressType;
  254093             : 
  254094             : 
  254095             : 
  254096             :        // necessary, to have direct access to the p_freepointer and the private methods !
  254097             :       /*! \brief friend class declaration to support AST File I/O */
  254098             :           friend class AST_FILE_IO;
  254099             : 
  254100             :       /*! \brief friend class declaration to support AST File I/O */
  254101             :           friend class SgCompoundAssignOpStorageClass;
  254102             : 
  254103             :       /*! \brief friend class declaration to support AST File I/O */
  254104             :           friend class AstSpecificDataManagingClass;
  254105             : 
  254106             :       /*! \brief friend class declaration to support AST File I/O */
  254107             :           friend class AstSpecificDataManagingClassStorageClass;
  254108             :     public:
  254109             :       /*! \brief IR node constructor to support AST File I/O */
  254110             :           SgCompoundAssignOp( const SgCompoundAssignOpStorageClass& source );
  254111             : 
  254112             :  // private: // JJW hack
  254113             :        /*
  254114             :           name AST Memory Allocation Support Variables
  254115             :           Memory allocations support variables 
  254116             : 
  254117             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  254118             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  254119             :           and support the AST File I/O Mechanism.
  254120             :        */
  254121             :       /* */
  254122             : 
  254123             :     public:
  254124             : 
  254125             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  254126             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  254127             :       // virtual SgNode* addRegExpAttribute();
  254128             :       /*! \brief Support for AST matching using regular expression.
  254129             : 
  254130             :           This support is incomplete and the subject of current research to define 
  254131             :           RegEx trees to support inexact matching.
  254132             :        */
  254133             :           SgCompoundAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  254134             : 
  254135             : // *** COMMON CODE SECTION ENDS HERE ***
  254136             : 
  254137             : 
  254138             : // End of memberFunctionString
  254139             : // Start of memberFunctionString
  254140             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  254141             : 
  254142             :      // the generated cast function
  254143             :      // friend ROSE_DLL_API SgCompoundAssignOp* isSgCompoundAssignOp ( SgNode* s );
  254144             : 
  254145             :           typedef SgBinaryOp base_node_type;
  254146             : 
  254147             : 
  254148             : // End of memberFunctionString
  254149             : // Start of memberFunctionString
  254150             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  254151             : 
  254152             :           void post_construction_initialization() override;
  254153             : 
  254154             : 
  254155             : // End of memberFunctionString
  254156             : 
  254157             : 
  254158             :      public: 
  254159             :          virtual ~SgCompoundAssignOp();
  254160             : 
  254161             : 
  254162             :      public: 
  254163             :          SgCompoundAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  254164             :          SgCompoundAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  254165             : 
  254166             :     protected:
  254167             : 
  254168             :     friend struct Rose::Traits::generated::describe_node_t<SgCompoundAssignOp>;
  254169             : 
  254170             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254171             : 
  254172             : 
  254173             :    };
  254174             : #endif
  254175             : 
  254176             : // postdeclarations for SgCompoundAssignOp
  254177             : 
  254178             : /* #line 254179 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254179             : 
  254180             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  254181             : 
  254182             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254183             : 
  254184             : 
  254185             : /* #line 254186 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254186             : 
  254187             : 
  254188             : 
  254189             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254190             : 
  254191             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  254192             : //      This code is automatically generated for each 
  254193             : //      terminal and non-terminal within the defined 
  254194             : //      grammar.  There is a simple way to change the 
  254195             : //      code to fix bugs etc.  See the ROSE README file
  254196             : //      for directions.
  254197             : 
  254198             : // tps: (02/22/2010): Adding DLL export requirements
  254199             : #include "rosedll.h"
  254200             : 
  254201             : // predeclarations for SgPlusAssignOp
  254202             : 
  254203             : /* #line 254204 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254204             : 
  254205             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  254206             : 
  254207             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254208             : 
  254209             : #if 1
  254210             : // Class Definition for SgPlusAssignOp
  254211             : class ROSE_DLL_API SgPlusAssignOp  : public SgCompoundAssignOp
  254212             :    {
  254213             :      public:
  254214             : 
  254215             : 
  254216             : /* #line 254217 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254217             : 
  254218             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  254219             : // Start of memberFunctionString
  254220             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  254221             : 
  254222             : // *** COMMON CODE SECTION BEGINS HERE ***
  254223             : 
  254224             :     public:
  254225             : 
  254226             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  254227             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  254228             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  254229             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  254230             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  254231             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  254232             : 
  254233             :       /*! \brief returns a string representing the class name */
  254234             :           virtual std::string class_name() const override;
  254235             : 
  254236             :       /*! \brief returns new style SageIII enum values */
  254237             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  254238             : 
  254239             :       /*! \brief static variant value */
  254240             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  254241             :        // static const VariantT static_variant = V_SgPlusAssignOp;
  254242             :           enum { static_variant = V_SgPlusAssignOp };
  254243             : 
  254244             :        /* the generated cast function */
  254245             :       /*! \brief Casts pointer from base class to derived class */
  254246             :           ROSE_DLL_API friend       SgPlusAssignOp* isSgPlusAssignOp(       SgNode * s );
  254247             : 
  254248             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  254249             :           ROSE_DLL_API friend const SgPlusAssignOp* isSgPlusAssignOp( const SgNode * s );
  254250             : 
  254251             :      // ******************************************
  254252             :      // * Memory Pool / New / Delete
  254253             :      // ******************************************
  254254             : 
  254255             :      public:
  254256             :           /// \private
  254257             :           static const unsigned pool_size; //
  254258             :           /// \private
  254259             :           static std::vector<unsigned char *> pools; //
  254260             :           /// \private
  254261             :           static SgPlusAssignOp * next_node; // 
  254262             : 
  254263             :           /// \private
  254264             :           static unsigned long initializeStorageClassArray(SgPlusAssignOpStorageClass *); //
  254265             : 
  254266             :           /// \private
  254267             :           static void clearMemoryPool(); //
  254268             :           static void deleteMemoryPool(); //
  254269             : 
  254270             :           /// \private
  254271             :           static void extendMemoryPoolForFileIO(); //
  254272             : 
  254273             :           /// \private
  254274             :           static SgPlusAssignOp * getPointerFromGlobalIndex(unsigned long); //
  254275             :           /// \private
  254276             :           static SgPlusAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  254277             : 
  254278             :           /// \private
  254279             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  254280             :           /// \private
  254281             :           static void resetValidFreepointers(); //
  254282             :           /// \private
  254283             :           static unsigned long getNumberOfLastValidPointer(); //
  254284             : 
  254285             : 
  254286             : #if defined(INLINE_FUNCTIONS)
  254287             :       /*! \brief returns pointer to newly allocated IR node */
  254288             :           inline void *operator new (size_t size);
  254289             : #else
  254290             :       /*! \brief returns pointer to newly allocated IR node */
  254291             :           void *operator new (size_t size);
  254292             : #endif
  254293             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  254294             :           void operator delete (void* pointer, size_t size);
  254295             : 
  254296             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  254297          58 :           void operator delete (void* pointer)
  254298             :              {
  254299             :             // This is the generated delete operator...
  254300          58 :                SgPlusAssignOp::operator delete (pointer,sizeof(SgPlusAssignOp));
  254301             :              }
  254302             : 
  254303             :       /*! \brief Returns the total number of IR nodes of this type */
  254304             :           static size_t numberOfNodes();
  254305             : 
  254306             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  254307             :           static size_t memoryUsage();
  254308             : 
  254309             :       // End of scope which started in IR nodes specific code 
  254310             :       /* */
  254311             : 
  254312             :       /* name Internal Functions
  254313             :           \brief Internal functions ... incomplete-documentation
  254314             : 
  254315             :           These functions have been made public as part of the design, but they are suggested for internal use 
  254316             :           or by particularly knowledgeable users for specialized tools or applications.
  254317             : 
  254318             :           \internal We could not make these private because they are required by user for special purposes. And 
  254319             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  254320             :          
  254321             :        */
  254322             : 
  254323             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  254324             :        // overridden in every class by *generated* implementation
  254325             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  254326             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  254327             :        // MS: 06/28/02 container of names of variables or container indices 
  254328             :        // used used in the traversal to access AST successor nodes
  254329             :        // overridden in every class by *generated* implementation
  254330             :       /*! \brief container of names of variables or container indices used used in the traversal
  254331             :           to access AST successor nodes overridden in every class by *generated* implementation */
  254332             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  254333             : 
  254334             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  254335             :        // than all the vector copies. The implementation for these functions is generated for each class.
  254336             :       /*! \brief return number of children in the traversal successor list */
  254337             :           virtual size_t get_numberOfTraversalSuccessors() override;
  254338             :       /*! \brief index-based access to traversal successors by index number */
  254339             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  254340             :       /*! \brief index-based access to traversal successors by child node */
  254341             :           virtual size_t get_childIndex(SgNode *child) override;
  254342             : 
  254343             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  254344             :        // MS: 08/16/2002 method for generating RTI information
  254345             :       /*! \brief return C++ Runtime-Time-Information */
  254346             :           virtual RTIReturnType roseRTI() override;
  254347             : #endif
  254348             :       /* */
  254349             : 
  254350             : 
  254351             : 
  254352             :       /* name Deprecated Functions
  254353             :           \brief Deprecated functions ... incomplete-documentation
  254354             : 
  254355             :           These functions have been deprecated from use.
  254356             :        */
  254357             :       /* */
  254358             : 
  254359             :       /*! returns a C style string (char*) representing the class name */
  254360             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  254361             : 
  254362             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  254363             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  254364             : #if 0
  254365             :       /*! returns old style Sage II enum values */
  254366             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  254367             :       /*! returns old style Sage II enum values */
  254368             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  254369             : #endif
  254370             :       /* */
  254371             : 
  254372             : 
  254373             : 
  254374             : 
  254375             :      public:
  254376             :       /* name Traversal Support Functions
  254377             :           \brief Traversal support functions ... incomplete-documentation
  254378             : 
  254379             :           These functions have been made public as part of the design, but they are suggested for internal use 
  254380             :           or by particularly knowledgable users for specialized tools or applications.
  254381             :        */
  254382             :       /* */
  254383             : 
  254384             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  254385             :        // (inferior to ROSE traversal mechanism, experimental).
  254386             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  254387             :        */
  254388             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  254389             : 
  254390             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  254391             :       /*! \brief support for the classic visitor pattern done in GoF */
  254392             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  254393             : 
  254394             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  254395             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  254396             :        */
  254397             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  254398             : 
  254399             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  254400             :        */
  254401             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  254402             : 
  254403             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  254404             :        // This traversal helps support internal tools that call static member functions.
  254405             :        // note: this function operates on the memory pools.
  254406             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  254407             :        */
  254408             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  254409             :       /* */
  254410             : 
  254411             : 
  254412             :      public:
  254413             :       /* name Memory Allocation Functions
  254414             :           \brief Memory allocations functions ... incomplete-documentation
  254415             : 
  254416             :           These functions have been made public as part of the design, but they are suggested for internal use 
  254417             :           or by particularly knowledgable users for specialized tools or applications.
  254418             :        */
  254419             :       /* */
  254420             : 
  254421             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  254422             : 
  254423             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  254424             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  254425             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  254426             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  254427             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  254428             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  254429             :           being used with the AST File I/O mechanism.
  254430             :        */
  254431             :           virtual bool isInMemoryPool() override;
  254432             : 
  254433             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  254434             : 
  254435             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  254436             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  254437             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  254438             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  254439             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  254440             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  254441             :           being used with the AST File I/O mechanism.
  254442             :        */
  254443             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  254444             : 
  254445             :       // DQ (4/30/2006): Modified to be a const function.
  254446             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  254447             : 
  254448             :           This functions is part of general support for many possible tools to operate 
  254449             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  254450             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  254451             :           less than the set of pointers used by the AST file I/O. This is part of
  254452             :           work implemented by Andreas, and support tools such as the AST graph generation.
  254453             : 
  254454             :           \warning This function can return unexpected data members and thus the 
  254455             :                    order and the number of elements is unpredicable and subject 
  254456             :                    to change.
  254457             : 
  254458             :           \returns STL vector of pairs of SgNode* and strings
  254459             :        */
  254460             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  254461             : 
  254462             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  254463             : 
  254464             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  254465             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  254466             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  254467             : 
  254468             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  254469             :                    and subject to change.
  254470             :        */
  254471             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  254472             : 
  254473             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  254474             : 
  254475             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  254476             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  254477             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  254478             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  254479             : 
  254480             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  254481             : 
  254482             :           \returns long
  254483             :        */
  254484             :           virtual long getChildIndex( SgNode* childNode ) const override;
  254485             : 
  254486             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  254487             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254488             :       /* \brief Constructor for use by AST File I/O Mechanism
  254489             : 
  254490             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  254491             :           which obtained via fast binary file I/O from disk.
  254492             :        */
  254493             :        // SgPlusAssignOp( SgPlusAssignOpStorageClass& source );
  254494             : 
  254495             : 
  254496             : 
  254497             : 
  254498             : 
  254499             :  // JH (10/24/2005): methods added to support the ast file IO
  254500             :     private:
  254501             : 
  254502             :       /* name AST Memory Allocation Support Functions
  254503             :           \brief Memory allocations support....
  254504             : 
  254505             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  254506             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  254507             :           and support the AST File I/O Mechanism.
  254508             :        */
  254509             :       /* */
  254510             : 
  254511             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  254512             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  254513             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  254514             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  254515             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  254516             :           a correspinding one in the AST_FILE_IO class!
  254517             :        */
  254518             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  254519             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254520             :       /* \brief Typedef used for low level memory access.
  254521             :        */
  254522             :        // typedef unsigned char* TestType;
  254523             : 
  254524             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  254525             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254526             :       /* \brief Typedef used to hold memory addresses as values.
  254527             :        */
  254528             :        // typedef unsigned long  AddressType;
  254529             : 
  254530             : 
  254531             : 
  254532             :        // necessary, to have direct access to the p_freepointer and the private methods !
  254533             :       /*! \brief friend class declaration to support AST File I/O */
  254534             :           friend class AST_FILE_IO;
  254535             : 
  254536             :       /*! \brief friend class declaration to support AST File I/O */
  254537             :           friend class SgPlusAssignOpStorageClass;
  254538             : 
  254539             :       /*! \brief friend class declaration to support AST File I/O */
  254540             :           friend class AstSpecificDataManagingClass;
  254541             : 
  254542             :       /*! \brief friend class declaration to support AST File I/O */
  254543             :           friend class AstSpecificDataManagingClassStorageClass;
  254544             :     public:
  254545             :       /*! \brief IR node constructor to support AST File I/O */
  254546             :           SgPlusAssignOp( const SgPlusAssignOpStorageClass& source );
  254547             : 
  254548             :  // private: // JJW hack
  254549             :        /*
  254550             :           name AST Memory Allocation Support Variables
  254551             :           Memory allocations support variables 
  254552             : 
  254553             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  254554             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  254555             :           and support the AST File I/O Mechanism.
  254556             :        */
  254557             :       /* */
  254558             : 
  254559             :     public:
  254560             : 
  254561             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  254562             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  254563             :       // virtual SgNode* addRegExpAttribute();
  254564             :       /*! \brief Support for AST matching using regular expression.
  254565             : 
  254566             :           This support is incomplete and the subject of current research to define 
  254567             :           RegEx trees to support inexact matching.
  254568             :        */
  254569             :           SgPlusAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  254570             : 
  254571             : // *** COMMON CODE SECTION ENDS HERE ***
  254572             : 
  254573             : 
  254574             : // End of memberFunctionString
  254575             : // Start of memberFunctionString
  254576             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  254577             : 
  254578             :      // the generated cast function
  254579             :      // friend ROSE_DLL_API SgPlusAssignOp* isSgPlusAssignOp ( SgNode* s );
  254580             : 
  254581             :           typedef SgCompoundAssignOp base_node_type;
  254582             : 
  254583             : 
  254584             : // End of memberFunctionString
  254585             : // Start of memberFunctionString
  254586             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  254587             : 
  254588             :           void post_construction_initialization() override;
  254589             : 
  254590             : 
  254591             : // End of memberFunctionString
  254592             : // Start of memberFunctionString
  254593             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  254594             : 
  254595           0 :           int precedence() const override { return  2; }
  254596             : 
  254597             : 
  254598             : // End of memberFunctionString
  254599             : 
  254600             : 
  254601             :      public: 
  254602             :          virtual ~SgPlusAssignOp();
  254603             : 
  254604             : 
  254605             :      public: 
  254606             :          SgPlusAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  254607             :          SgPlusAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  254608             : 
  254609             :     protected:
  254610             : 
  254611             :     friend struct Rose::Traits::generated::describe_node_t<SgPlusAssignOp>;
  254612             : 
  254613             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254614             : 
  254615             : 
  254616             :    };
  254617             : #endif
  254618             : 
  254619             : // postdeclarations for SgPlusAssignOp
  254620             : 
  254621             : /* #line 254622 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254622             : 
  254623             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  254624             : 
  254625             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254626             : 
  254627             : 
  254628             : /* #line 254629 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254629             : 
  254630             : 
  254631             : 
  254632             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254633             : 
  254634             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  254635             : //      This code is automatically generated for each 
  254636             : //      terminal and non-terminal within the defined 
  254637             : //      grammar.  There is a simple way to change the 
  254638             : //      code to fix bugs etc.  See the ROSE README file
  254639             : //      for directions.
  254640             : 
  254641             : // tps: (02/22/2010): Adding DLL export requirements
  254642             : #include "rosedll.h"
  254643             : 
  254644             : // predeclarations for SgMinusAssignOp
  254645             : 
  254646             : /* #line 254647 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254647             : 
  254648             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  254649             : 
  254650             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  254651             : 
  254652             : #if 1
  254653             : // Class Definition for SgMinusAssignOp
  254654             : class ROSE_DLL_API SgMinusAssignOp  : public SgCompoundAssignOp
  254655             :    {
  254656             :      public:
  254657             : 
  254658             : 
  254659             : /* #line 254660 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  254660             : 
  254661             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  254662             : // Start of memberFunctionString
  254663             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  254664             : 
  254665             : // *** COMMON CODE SECTION BEGINS HERE ***
  254666             : 
  254667             :     public:
  254668             : 
  254669             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  254670             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  254671             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  254672             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  254673             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  254674             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  254675             : 
  254676             :       /*! \brief returns a string representing the class name */
  254677             :           virtual std::string class_name() const override;
  254678             : 
  254679             :       /*! \brief returns new style SageIII enum values */
  254680             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  254681             : 
  254682             :       /*! \brief static variant value */
  254683             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  254684             :        // static const VariantT static_variant = V_SgMinusAssignOp;
  254685             :           enum { static_variant = V_SgMinusAssignOp };
  254686             : 
  254687             :        /* the generated cast function */
  254688             :       /*! \brief Casts pointer from base class to derived class */
  254689             :           ROSE_DLL_API friend       SgMinusAssignOp* isSgMinusAssignOp(       SgNode * s );
  254690             : 
  254691             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  254692             :           ROSE_DLL_API friend const SgMinusAssignOp* isSgMinusAssignOp( const SgNode * s );
  254693             : 
  254694             :      // ******************************************
  254695             :      // * Memory Pool / New / Delete
  254696             :      // ******************************************
  254697             : 
  254698             :      public:
  254699             :           /// \private
  254700             :           static const unsigned pool_size; //
  254701             :           /// \private
  254702             :           static std::vector<unsigned char *> pools; //
  254703             :           /// \private
  254704             :           static SgMinusAssignOp * next_node; // 
  254705             : 
  254706             :           /// \private
  254707             :           static unsigned long initializeStorageClassArray(SgMinusAssignOpStorageClass *); //
  254708             : 
  254709             :           /// \private
  254710             :           static void clearMemoryPool(); //
  254711             :           static void deleteMemoryPool(); //
  254712             : 
  254713             :           /// \private
  254714             :           static void extendMemoryPoolForFileIO(); //
  254715             : 
  254716             :           /// \private
  254717             :           static SgMinusAssignOp * getPointerFromGlobalIndex(unsigned long); //
  254718             :           /// \private
  254719             :           static SgMinusAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  254720             : 
  254721             :           /// \private
  254722             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  254723             :           /// \private
  254724             :           static void resetValidFreepointers(); //
  254725             :           /// \private
  254726             :           static unsigned long getNumberOfLastValidPointer(); //
  254727             : 
  254728             : 
  254729             : #if defined(INLINE_FUNCTIONS)
  254730             :       /*! \brief returns pointer to newly allocated IR node */
  254731             :           inline void *operator new (size_t size);
  254732             : #else
  254733             :       /*! \brief returns pointer to newly allocated IR node */
  254734             :           void *operator new (size_t size);
  254735             : #endif
  254736             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  254737             :           void operator delete (void* pointer, size_t size);
  254738             : 
  254739             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  254740          21 :           void operator delete (void* pointer)
  254741             :              {
  254742             :             // This is the generated delete operator...
  254743          21 :                SgMinusAssignOp::operator delete (pointer,sizeof(SgMinusAssignOp));
  254744             :              }
  254745             : 
  254746             :       /*! \brief Returns the total number of IR nodes of this type */
  254747             :           static size_t numberOfNodes();
  254748             : 
  254749             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  254750             :           static size_t memoryUsage();
  254751             : 
  254752             :       // End of scope which started in IR nodes specific code 
  254753             :       /* */
  254754             : 
  254755             :       /* name Internal Functions
  254756             :           \brief Internal functions ... incomplete-documentation
  254757             : 
  254758             :           These functions have been made public as part of the design, but they are suggested for internal use 
  254759             :           or by particularly knowledgeable users for specialized tools or applications.
  254760             : 
  254761             :           \internal We could not make these private because they are required by user for special purposes. And 
  254762             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  254763             :          
  254764             :        */
  254765             : 
  254766             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  254767             :        // overridden in every class by *generated* implementation
  254768             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  254769             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  254770             :        // MS: 06/28/02 container of names of variables or container indices 
  254771             :        // used used in the traversal to access AST successor nodes
  254772             :        // overridden in every class by *generated* implementation
  254773             :       /*! \brief container of names of variables or container indices used used in the traversal
  254774             :           to access AST successor nodes overridden in every class by *generated* implementation */
  254775             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  254776             : 
  254777             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  254778             :        // than all the vector copies. The implementation for these functions is generated for each class.
  254779             :       /*! \brief return number of children in the traversal successor list */
  254780             :           virtual size_t get_numberOfTraversalSuccessors() override;
  254781             :       /*! \brief index-based access to traversal successors by index number */
  254782             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  254783             :       /*! \brief index-based access to traversal successors by child node */
  254784             :           virtual size_t get_childIndex(SgNode *child) override;
  254785             : 
  254786             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  254787             :        // MS: 08/16/2002 method for generating RTI information
  254788             :       /*! \brief return C++ Runtime-Time-Information */
  254789             :           virtual RTIReturnType roseRTI() override;
  254790             : #endif
  254791             :       /* */
  254792             : 
  254793             : 
  254794             : 
  254795             :       /* name Deprecated Functions
  254796             :           \brief Deprecated functions ... incomplete-documentation
  254797             : 
  254798             :           These functions have been deprecated from use.
  254799             :        */
  254800             :       /* */
  254801             : 
  254802             :       /*! returns a C style string (char*) representing the class name */
  254803             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  254804             : 
  254805             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  254806             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  254807             : #if 0
  254808             :       /*! returns old style Sage II enum values */
  254809             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  254810             :       /*! returns old style Sage II enum values */
  254811             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  254812             : #endif
  254813             :       /* */
  254814             : 
  254815             : 
  254816             : 
  254817             : 
  254818             :      public:
  254819             :       /* name Traversal Support Functions
  254820             :           \brief Traversal support functions ... incomplete-documentation
  254821             : 
  254822             :           These functions have been made public as part of the design, but they are suggested for internal use 
  254823             :           or by particularly knowledgable users for specialized tools or applications.
  254824             :        */
  254825             :       /* */
  254826             : 
  254827             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  254828             :        // (inferior to ROSE traversal mechanism, experimental).
  254829             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  254830             :        */
  254831             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  254832             : 
  254833             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  254834             :       /*! \brief support for the classic visitor pattern done in GoF */
  254835             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  254836             : 
  254837             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  254838             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  254839             :        */
  254840             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  254841             : 
  254842             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  254843             :        */
  254844             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  254845             : 
  254846             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  254847             :        // This traversal helps support internal tools that call static member functions.
  254848             :        // note: this function operates on the memory pools.
  254849             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  254850             :        */
  254851             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  254852             :       /* */
  254853             : 
  254854             : 
  254855             :      public:
  254856             :       /* name Memory Allocation Functions
  254857             :           \brief Memory allocations functions ... incomplete-documentation
  254858             : 
  254859             :           These functions have been made public as part of the design, but they are suggested for internal use 
  254860             :           or by particularly knowledgable users for specialized tools or applications.
  254861             :        */
  254862             :       /* */
  254863             : 
  254864             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  254865             : 
  254866             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  254867             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  254868             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  254869             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  254870             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  254871             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  254872             :           being used with the AST File I/O mechanism.
  254873             :        */
  254874             :           virtual bool isInMemoryPool() override;
  254875             : 
  254876             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  254877             : 
  254878             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  254879             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  254880             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  254881             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  254882             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  254883             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  254884             :           being used with the AST File I/O mechanism.
  254885             :        */
  254886             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  254887             : 
  254888             :       // DQ (4/30/2006): Modified to be a const function.
  254889             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  254890             : 
  254891             :           This functions is part of general support for many possible tools to operate 
  254892             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  254893             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  254894             :           less than the set of pointers used by the AST file I/O. This is part of
  254895             :           work implemented by Andreas, and support tools such as the AST graph generation.
  254896             : 
  254897             :           \warning This function can return unexpected data members and thus the 
  254898             :                    order and the number of elements is unpredicable and subject 
  254899             :                    to change.
  254900             : 
  254901             :           \returns STL vector of pairs of SgNode* and strings
  254902             :        */
  254903             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  254904             : 
  254905             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  254906             : 
  254907             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  254908             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  254909             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  254910             : 
  254911             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  254912             :                    and subject to change.
  254913             :        */
  254914             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  254915             : 
  254916             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  254917             : 
  254918             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  254919             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  254920             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  254921             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  254922             : 
  254923             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  254924             : 
  254925             :           \returns long
  254926             :        */
  254927             :           virtual long getChildIndex( SgNode* childNode ) const override;
  254928             : 
  254929             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  254930             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254931             :       /* \brief Constructor for use by AST File I/O Mechanism
  254932             : 
  254933             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  254934             :           which obtained via fast binary file I/O from disk.
  254935             :        */
  254936             :        // SgMinusAssignOp( SgMinusAssignOpStorageClass& source );
  254937             : 
  254938             : 
  254939             : 
  254940             : 
  254941             : 
  254942             :  // JH (10/24/2005): methods added to support the ast file IO
  254943             :     private:
  254944             : 
  254945             :       /* name AST Memory Allocation Support Functions
  254946             :           \brief Memory allocations support....
  254947             : 
  254948             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  254949             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  254950             :           and support the AST File I/O Mechanism.
  254951             :        */
  254952             :       /* */
  254953             : 
  254954             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  254955             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  254956             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  254957             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  254958             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  254959             :           a correspinding one in the AST_FILE_IO class!
  254960             :        */
  254961             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  254962             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254963             :       /* \brief Typedef used for low level memory access.
  254964             :        */
  254965             :        // typedef unsigned char* TestType;
  254966             : 
  254967             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  254968             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  254969             :       /* \brief Typedef used to hold memory addresses as values.
  254970             :        */
  254971             :        // typedef unsigned long  AddressType;
  254972             : 
  254973             : 
  254974             : 
  254975             :        // necessary, to have direct access to the p_freepointer and the private methods !
  254976             :       /*! \brief friend class declaration to support AST File I/O */
  254977             :           friend class AST_FILE_IO;
  254978             : 
  254979             :       /*! \brief friend class declaration to support AST File I/O */
  254980             :           friend class SgMinusAssignOpStorageClass;
  254981             : 
  254982             :       /*! \brief friend class declaration to support AST File I/O */
  254983             :           friend class AstSpecificDataManagingClass;
  254984             : 
  254985             :       /*! \brief friend class declaration to support AST File I/O */
  254986             :           friend class AstSpecificDataManagingClassStorageClass;
  254987             :     public:
  254988             :       /*! \brief IR node constructor to support AST File I/O */
  254989             :           SgMinusAssignOp( const SgMinusAssignOpStorageClass& source );
  254990             : 
  254991             :  // private: // JJW hack
  254992             :        /*
  254993             :           name AST Memory Allocation Support Variables
  254994             :           Memory allocations support variables 
  254995             : 
  254996             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  254997             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  254998             :           and support the AST File I/O Mechanism.
  254999             :        */
  255000             :       /* */
  255001             : 
  255002             :     public:
  255003             : 
  255004             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  255005             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  255006             :       // virtual SgNode* addRegExpAttribute();
  255007             :       /*! \brief Support for AST matching using regular expression.
  255008             : 
  255009             :           This support is incomplete and the subject of current research to define 
  255010             :           RegEx trees to support inexact matching.
  255011             :        */
  255012             :           SgMinusAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  255013             : 
  255014             : // *** COMMON CODE SECTION ENDS HERE ***
  255015             : 
  255016             : 
  255017             : // End of memberFunctionString
  255018             : // Start of memberFunctionString
  255019             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  255020             : 
  255021             :      // the generated cast function
  255022             :      // friend ROSE_DLL_API SgMinusAssignOp* isSgMinusAssignOp ( SgNode* s );
  255023             : 
  255024             :           typedef SgCompoundAssignOp base_node_type;
  255025             : 
  255026             : 
  255027             : // End of memberFunctionString
  255028             : // Start of memberFunctionString
  255029             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  255030             : 
  255031             :           void post_construction_initialization() override;
  255032             : 
  255033             : 
  255034             : // End of memberFunctionString
  255035             : // Start of memberFunctionString
  255036             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  255037             : 
  255038           0 :           int precedence() const override { return  2; }
  255039             : 
  255040             : 
  255041             : // End of memberFunctionString
  255042             : 
  255043             : 
  255044             :      public: 
  255045             :          virtual ~SgMinusAssignOp();
  255046             : 
  255047             : 
  255048             :      public: 
  255049             :          SgMinusAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  255050             :          SgMinusAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  255051             : 
  255052             :     protected:
  255053             : 
  255054             :     friend struct Rose::Traits::generated::describe_node_t<SgMinusAssignOp>;
  255055             : 
  255056             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255057             : 
  255058             : 
  255059             :    };
  255060             : #endif
  255061             : 
  255062             : // postdeclarations for SgMinusAssignOp
  255063             : 
  255064             : /* #line 255065 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255065             : 
  255066             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  255067             : 
  255068             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255069             : 
  255070             : 
  255071             : /* #line 255072 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255072             : 
  255073             : 
  255074             : 
  255075             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255076             : 
  255077             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  255078             : //      This code is automatically generated for each 
  255079             : //      terminal and non-terminal within the defined 
  255080             : //      grammar.  There is a simple way to change the 
  255081             : //      code to fix bugs etc.  See the ROSE README file
  255082             : //      for directions.
  255083             : 
  255084             : // tps: (02/22/2010): Adding DLL export requirements
  255085             : #include "rosedll.h"
  255086             : 
  255087             : // predeclarations for SgAndAssignOp
  255088             : 
  255089             : /* #line 255090 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255090             : 
  255091             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  255092             : 
  255093             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255094             : 
  255095             : #if 1
  255096             : // Class Definition for SgAndAssignOp
  255097             : class ROSE_DLL_API SgAndAssignOp  : public SgCompoundAssignOp
  255098             :    {
  255099             :      public:
  255100             : 
  255101             : 
  255102             : /* #line 255103 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255103             : 
  255104             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  255105             : // Start of memberFunctionString
  255106             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  255107             : 
  255108             : // *** COMMON CODE SECTION BEGINS HERE ***
  255109             : 
  255110             :     public:
  255111             : 
  255112             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  255113             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  255114             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  255115             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  255116             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  255117             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  255118             : 
  255119             :       /*! \brief returns a string representing the class name */
  255120             :           virtual std::string class_name() const override;
  255121             : 
  255122             :       /*! \brief returns new style SageIII enum values */
  255123             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  255124             : 
  255125             :       /*! \brief static variant value */
  255126             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  255127             :        // static const VariantT static_variant = V_SgAndAssignOp;
  255128             :           enum { static_variant = V_SgAndAssignOp };
  255129             : 
  255130             :        /* the generated cast function */
  255131             :       /*! \brief Casts pointer from base class to derived class */
  255132             :           ROSE_DLL_API friend       SgAndAssignOp* isSgAndAssignOp(       SgNode * s );
  255133             : 
  255134             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  255135             :           ROSE_DLL_API friend const SgAndAssignOp* isSgAndAssignOp( const SgNode * s );
  255136             : 
  255137             :      // ******************************************
  255138             :      // * Memory Pool / New / Delete
  255139             :      // ******************************************
  255140             : 
  255141             :      public:
  255142             :           /// \private
  255143             :           static const unsigned pool_size; //
  255144             :           /// \private
  255145             :           static std::vector<unsigned char *> pools; //
  255146             :           /// \private
  255147             :           static SgAndAssignOp * next_node; // 
  255148             : 
  255149             :           /// \private
  255150             :           static unsigned long initializeStorageClassArray(SgAndAssignOpStorageClass *); //
  255151             : 
  255152             :           /// \private
  255153             :           static void clearMemoryPool(); //
  255154             :           static void deleteMemoryPool(); //
  255155             : 
  255156             :           /// \private
  255157             :           static void extendMemoryPoolForFileIO(); //
  255158             : 
  255159             :           /// \private
  255160             :           static SgAndAssignOp * getPointerFromGlobalIndex(unsigned long); //
  255161             :           /// \private
  255162             :           static SgAndAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  255163             : 
  255164             :           /// \private
  255165             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  255166             :           /// \private
  255167             :           static void resetValidFreepointers(); //
  255168             :           /// \private
  255169             :           static unsigned long getNumberOfLastValidPointer(); //
  255170             : 
  255171             : 
  255172             : #if defined(INLINE_FUNCTIONS)
  255173             :       /*! \brief returns pointer to newly allocated IR node */
  255174             :           inline void *operator new (size_t size);
  255175             : #else
  255176             :       /*! \brief returns pointer to newly allocated IR node */
  255177             :           void *operator new (size_t size);
  255178             : #endif
  255179             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  255180             :           void operator delete (void* pointer, size_t size);
  255181             : 
  255182             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  255183           0 :           void operator delete (void* pointer)
  255184             :              {
  255185             :             // This is the generated delete operator...
  255186           0 :                SgAndAssignOp::operator delete (pointer,sizeof(SgAndAssignOp));
  255187             :              }
  255188             : 
  255189             :       /*! \brief Returns the total number of IR nodes of this type */
  255190             :           static size_t numberOfNodes();
  255191             : 
  255192             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  255193             :           static size_t memoryUsage();
  255194             : 
  255195             :       // End of scope which started in IR nodes specific code 
  255196             :       /* */
  255197             : 
  255198             :       /* name Internal Functions
  255199             :           \brief Internal functions ... incomplete-documentation
  255200             : 
  255201             :           These functions have been made public as part of the design, but they are suggested for internal use 
  255202             :           or by particularly knowledgeable users for specialized tools or applications.
  255203             : 
  255204             :           \internal We could not make these private because they are required by user for special purposes. And 
  255205             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  255206             :          
  255207             :        */
  255208             : 
  255209             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  255210             :        // overridden in every class by *generated* implementation
  255211             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  255212             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  255213             :        // MS: 06/28/02 container of names of variables or container indices 
  255214             :        // used used in the traversal to access AST successor nodes
  255215             :        // overridden in every class by *generated* implementation
  255216             :       /*! \brief container of names of variables or container indices used used in the traversal
  255217             :           to access AST successor nodes overridden in every class by *generated* implementation */
  255218             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  255219             : 
  255220             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  255221             :        // than all the vector copies. The implementation for these functions is generated for each class.
  255222             :       /*! \brief return number of children in the traversal successor list */
  255223             :           virtual size_t get_numberOfTraversalSuccessors() override;
  255224             :       /*! \brief index-based access to traversal successors by index number */
  255225             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  255226             :       /*! \brief index-based access to traversal successors by child node */
  255227             :           virtual size_t get_childIndex(SgNode *child) override;
  255228             : 
  255229             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  255230             :        // MS: 08/16/2002 method for generating RTI information
  255231             :       /*! \brief return C++ Runtime-Time-Information */
  255232             :           virtual RTIReturnType roseRTI() override;
  255233             : #endif
  255234             :       /* */
  255235             : 
  255236             : 
  255237             : 
  255238             :       /* name Deprecated Functions
  255239             :           \brief Deprecated functions ... incomplete-documentation
  255240             : 
  255241             :           These functions have been deprecated from use.
  255242             :        */
  255243             :       /* */
  255244             : 
  255245             :       /*! returns a C style string (char*) representing the class name */
  255246             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  255247             : 
  255248             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  255249             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  255250             : #if 0
  255251             :       /*! returns old style Sage II enum values */
  255252             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  255253             :       /*! returns old style Sage II enum values */
  255254             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  255255             : #endif
  255256             :       /* */
  255257             : 
  255258             : 
  255259             : 
  255260             : 
  255261             :      public:
  255262             :       /* name Traversal Support Functions
  255263             :           \brief Traversal support functions ... incomplete-documentation
  255264             : 
  255265             :           These functions have been made public as part of the design, but they are suggested for internal use 
  255266             :           or by particularly knowledgable users for specialized tools or applications.
  255267             :        */
  255268             :       /* */
  255269             : 
  255270             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  255271             :        // (inferior to ROSE traversal mechanism, experimental).
  255272             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  255273             :        */
  255274             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  255275             : 
  255276             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  255277             :       /*! \brief support for the classic visitor pattern done in GoF */
  255278             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  255279             : 
  255280             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  255281             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  255282             :        */
  255283             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  255284             : 
  255285             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  255286             :        */
  255287             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  255288             : 
  255289             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  255290             :        // This traversal helps support internal tools that call static member functions.
  255291             :        // note: this function operates on the memory pools.
  255292             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  255293             :        */
  255294             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  255295             :       /* */
  255296             : 
  255297             : 
  255298             :      public:
  255299             :       /* name Memory Allocation Functions
  255300             :           \brief Memory allocations functions ... incomplete-documentation
  255301             : 
  255302             :           These functions have been made public as part of the design, but they are suggested for internal use 
  255303             :           or by particularly knowledgable users for specialized tools or applications.
  255304             :        */
  255305             :       /* */
  255306             : 
  255307             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  255308             : 
  255309             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  255310             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  255311             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  255312             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  255313             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  255314             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  255315             :           being used with the AST File I/O mechanism.
  255316             :        */
  255317             :           virtual bool isInMemoryPool() override;
  255318             : 
  255319             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  255320             : 
  255321             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  255322             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  255323             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  255324             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  255325             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  255326             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  255327             :           being used with the AST File I/O mechanism.
  255328             :        */
  255329             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  255330             : 
  255331             :       // DQ (4/30/2006): Modified to be a const function.
  255332             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  255333             : 
  255334             :           This functions is part of general support for many possible tools to operate 
  255335             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  255336             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  255337             :           less than the set of pointers used by the AST file I/O. This is part of
  255338             :           work implemented by Andreas, and support tools such as the AST graph generation.
  255339             : 
  255340             :           \warning This function can return unexpected data members and thus the 
  255341             :                    order and the number of elements is unpredicable and subject 
  255342             :                    to change.
  255343             : 
  255344             :           \returns STL vector of pairs of SgNode* and strings
  255345             :        */
  255346             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  255347             : 
  255348             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  255349             : 
  255350             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  255351             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  255352             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  255353             : 
  255354             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  255355             :                    and subject to change.
  255356             :        */
  255357             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  255358             : 
  255359             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  255360             : 
  255361             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  255362             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  255363             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  255364             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  255365             : 
  255366             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  255367             : 
  255368             :           \returns long
  255369             :        */
  255370             :           virtual long getChildIndex( SgNode* childNode ) const override;
  255371             : 
  255372             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  255373             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  255374             :       /* \brief Constructor for use by AST File I/O Mechanism
  255375             : 
  255376             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  255377             :           which obtained via fast binary file I/O from disk.
  255378             :        */
  255379             :        // SgAndAssignOp( SgAndAssignOpStorageClass& source );
  255380             : 
  255381             : 
  255382             : 
  255383             : 
  255384             : 
  255385             :  // JH (10/24/2005): methods added to support the ast file IO
  255386             :     private:
  255387             : 
  255388             :       /* name AST Memory Allocation Support Functions
  255389             :           \brief Memory allocations support....
  255390             : 
  255391             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  255392             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  255393             :           and support the AST File I/O Mechanism.
  255394             :        */
  255395             :       /* */
  255396             : 
  255397             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  255398             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  255399             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  255400             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  255401             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  255402             :           a correspinding one in the AST_FILE_IO class!
  255403             :        */
  255404             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  255405             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  255406             :       /* \brief Typedef used for low level memory access.
  255407             :        */
  255408             :        // typedef unsigned char* TestType;
  255409             : 
  255410             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  255411             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  255412             :       /* \brief Typedef used to hold memory addresses as values.
  255413             :        */
  255414             :        // typedef unsigned long  AddressType;
  255415             : 
  255416             : 
  255417             : 
  255418             :        // necessary, to have direct access to the p_freepointer and the private methods !
  255419             :       /*! \brief friend class declaration to support AST File I/O */
  255420             :           friend class AST_FILE_IO;
  255421             : 
  255422             :       /*! \brief friend class declaration to support AST File I/O */
  255423             :           friend class SgAndAssignOpStorageClass;
  255424             : 
  255425             :       /*! \brief friend class declaration to support AST File I/O */
  255426             :           friend class AstSpecificDataManagingClass;
  255427             : 
  255428             :       /*! \brief friend class declaration to support AST File I/O */
  255429             :           friend class AstSpecificDataManagingClassStorageClass;
  255430             :     public:
  255431             :       /*! \brief IR node constructor to support AST File I/O */
  255432             :           SgAndAssignOp( const SgAndAssignOpStorageClass& source );
  255433             : 
  255434             :  // private: // JJW hack
  255435             :        /*
  255436             :           name AST Memory Allocation Support Variables
  255437             :           Memory allocations support variables 
  255438             : 
  255439             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  255440             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  255441             :           and support the AST File I/O Mechanism.
  255442             :        */
  255443             :       /* */
  255444             : 
  255445             :     public:
  255446             : 
  255447             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  255448             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  255449             :       // virtual SgNode* addRegExpAttribute();
  255450             :       /*! \brief Support for AST matching using regular expression.
  255451             : 
  255452             :           This support is incomplete and the subject of current research to define 
  255453             :           RegEx trees to support inexact matching.
  255454             :        */
  255455             :           SgAndAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  255456             : 
  255457             : // *** COMMON CODE SECTION ENDS HERE ***
  255458             : 
  255459             : 
  255460             : // End of memberFunctionString
  255461             : // Start of memberFunctionString
  255462             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  255463             : 
  255464             :      // the generated cast function
  255465             :      // friend ROSE_DLL_API SgAndAssignOp* isSgAndAssignOp ( SgNode* s );
  255466             : 
  255467             :           typedef SgCompoundAssignOp base_node_type;
  255468             : 
  255469             : 
  255470             : // End of memberFunctionString
  255471             : // Start of memberFunctionString
  255472             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  255473             : 
  255474             :           void post_construction_initialization() override;
  255475             : 
  255476             : 
  255477             : // End of memberFunctionString
  255478             : // Start of memberFunctionString
  255479             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  255480             : 
  255481           0 :           int precedence() const override { return  2; }
  255482             : 
  255483             : 
  255484             : // End of memberFunctionString
  255485             : 
  255486             : 
  255487             :      public: 
  255488             :          virtual ~SgAndAssignOp();
  255489             : 
  255490             : 
  255491             :      public: 
  255492             :          SgAndAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  255493             :          SgAndAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  255494             : 
  255495             :     protected:
  255496             : 
  255497             :     friend struct Rose::Traits::generated::describe_node_t<SgAndAssignOp>;
  255498             : 
  255499             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255500             : 
  255501             : 
  255502             :    };
  255503             : #endif
  255504             : 
  255505             : // postdeclarations for SgAndAssignOp
  255506             : 
  255507             : /* #line 255508 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255508             : 
  255509             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  255510             : 
  255511             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255512             : 
  255513             : 
  255514             : /* #line 255515 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255515             : 
  255516             : 
  255517             : 
  255518             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255519             : 
  255520             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  255521             : //      This code is automatically generated for each 
  255522             : //      terminal and non-terminal within the defined 
  255523             : //      grammar.  There is a simple way to change the 
  255524             : //      code to fix bugs etc.  See the ROSE README file
  255525             : //      for directions.
  255526             : 
  255527             : // tps: (02/22/2010): Adding DLL export requirements
  255528             : #include "rosedll.h"
  255529             : 
  255530             : // predeclarations for SgIorAssignOp
  255531             : 
  255532             : /* #line 255533 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255533             : 
  255534             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  255535             : 
  255536             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255537             : 
  255538             : #if 1
  255539             : // Class Definition for SgIorAssignOp
  255540             : class ROSE_DLL_API SgIorAssignOp  : public SgCompoundAssignOp
  255541             :    {
  255542             :      public:
  255543             : 
  255544             : 
  255545             : /* #line 255546 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255546             : 
  255547             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  255548             : // Start of memberFunctionString
  255549             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  255550             : 
  255551             : // *** COMMON CODE SECTION BEGINS HERE ***
  255552             : 
  255553             :     public:
  255554             : 
  255555             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  255556             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  255557             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  255558             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  255559             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  255560             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  255561             : 
  255562             :       /*! \brief returns a string representing the class name */
  255563             :           virtual std::string class_name() const override;
  255564             : 
  255565             :       /*! \brief returns new style SageIII enum values */
  255566             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  255567             : 
  255568             :       /*! \brief static variant value */
  255569             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  255570             :        // static const VariantT static_variant = V_SgIorAssignOp;
  255571             :           enum { static_variant = V_SgIorAssignOp };
  255572             : 
  255573             :        /* the generated cast function */
  255574             :       /*! \brief Casts pointer from base class to derived class */
  255575             :           ROSE_DLL_API friend       SgIorAssignOp* isSgIorAssignOp(       SgNode * s );
  255576             : 
  255577             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  255578             :           ROSE_DLL_API friend const SgIorAssignOp* isSgIorAssignOp( const SgNode * s );
  255579             : 
  255580             :      // ******************************************
  255581             :      // * Memory Pool / New / Delete
  255582             :      // ******************************************
  255583             : 
  255584             :      public:
  255585             :           /// \private
  255586             :           static const unsigned pool_size; //
  255587             :           /// \private
  255588             :           static std::vector<unsigned char *> pools; //
  255589             :           /// \private
  255590             :           static SgIorAssignOp * next_node; // 
  255591             : 
  255592             :           /// \private
  255593             :           static unsigned long initializeStorageClassArray(SgIorAssignOpStorageClass *); //
  255594             : 
  255595             :           /// \private
  255596             :           static void clearMemoryPool(); //
  255597             :           static void deleteMemoryPool(); //
  255598             : 
  255599             :           /// \private
  255600             :           static void extendMemoryPoolForFileIO(); //
  255601             : 
  255602             :           /// \private
  255603             :           static SgIorAssignOp * getPointerFromGlobalIndex(unsigned long); //
  255604             :           /// \private
  255605             :           static SgIorAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  255606             : 
  255607             :           /// \private
  255608             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  255609             :           /// \private
  255610             :           static void resetValidFreepointers(); //
  255611             :           /// \private
  255612             :           static unsigned long getNumberOfLastValidPointer(); //
  255613             : 
  255614             : 
  255615             : #if defined(INLINE_FUNCTIONS)
  255616             :       /*! \brief returns pointer to newly allocated IR node */
  255617             :           inline void *operator new (size_t size);
  255618             : #else
  255619             :       /*! \brief returns pointer to newly allocated IR node */
  255620             :           void *operator new (size_t size);
  255621             : #endif
  255622             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  255623             :           void operator delete (void* pointer, size_t size);
  255624             : 
  255625             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  255626          14 :           void operator delete (void* pointer)
  255627             :              {
  255628             :             // This is the generated delete operator...
  255629          14 :                SgIorAssignOp::operator delete (pointer,sizeof(SgIorAssignOp));
  255630             :              }
  255631             : 
  255632             :       /*! \brief Returns the total number of IR nodes of this type */
  255633             :           static size_t numberOfNodes();
  255634             : 
  255635             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  255636             :           static size_t memoryUsage();
  255637             : 
  255638             :       // End of scope which started in IR nodes specific code 
  255639             :       /* */
  255640             : 
  255641             :       /* name Internal Functions
  255642             :           \brief Internal functions ... incomplete-documentation
  255643             : 
  255644             :           These functions have been made public as part of the design, but they are suggested for internal use 
  255645             :           or by particularly knowledgeable users for specialized tools or applications.
  255646             : 
  255647             :           \internal We could not make these private because they are required by user for special purposes. And 
  255648             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  255649             :          
  255650             :        */
  255651             : 
  255652             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  255653             :        // overridden in every class by *generated* implementation
  255654             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  255655             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  255656             :        // MS: 06/28/02 container of names of variables or container indices 
  255657             :        // used used in the traversal to access AST successor nodes
  255658             :        // overridden in every class by *generated* implementation
  255659             :       /*! \brief container of names of variables or container indices used used in the traversal
  255660             :           to access AST successor nodes overridden in every class by *generated* implementation */
  255661             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  255662             : 
  255663             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  255664             :        // than all the vector copies. The implementation for these functions is generated for each class.
  255665             :       /*! \brief return number of children in the traversal successor list */
  255666             :           virtual size_t get_numberOfTraversalSuccessors() override;
  255667             :       /*! \brief index-based access to traversal successors by index number */
  255668             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  255669             :       /*! \brief index-based access to traversal successors by child node */
  255670             :           virtual size_t get_childIndex(SgNode *child) override;
  255671             : 
  255672             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  255673             :        // MS: 08/16/2002 method for generating RTI information
  255674             :       /*! \brief return C++ Runtime-Time-Information */
  255675             :           virtual RTIReturnType roseRTI() override;
  255676             : #endif
  255677             :       /* */
  255678             : 
  255679             : 
  255680             : 
  255681             :       /* name Deprecated Functions
  255682             :           \brief Deprecated functions ... incomplete-documentation
  255683             : 
  255684             :           These functions have been deprecated from use.
  255685             :        */
  255686             :       /* */
  255687             : 
  255688             :       /*! returns a C style string (char*) representing the class name */
  255689             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  255690             : 
  255691             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  255692             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  255693             : #if 0
  255694             :       /*! returns old style Sage II enum values */
  255695             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  255696             :       /*! returns old style Sage II enum values */
  255697             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  255698             : #endif
  255699             :       /* */
  255700             : 
  255701             : 
  255702             : 
  255703             : 
  255704             :      public:
  255705             :       /* name Traversal Support Functions
  255706             :           \brief Traversal support functions ... incomplete-documentation
  255707             : 
  255708             :           These functions have been made public as part of the design, but they are suggested for internal use 
  255709             :           or by particularly knowledgable users for specialized tools or applications.
  255710             :        */
  255711             :       /* */
  255712             : 
  255713             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  255714             :        // (inferior to ROSE traversal mechanism, experimental).
  255715             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  255716             :        */
  255717             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  255718             : 
  255719             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  255720             :       /*! \brief support for the classic visitor pattern done in GoF */
  255721             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  255722             : 
  255723             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  255724             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  255725             :        */
  255726             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  255727             : 
  255728             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  255729             :        */
  255730             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  255731             : 
  255732             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  255733             :        // This traversal helps support internal tools that call static member functions.
  255734             :        // note: this function operates on the memory pools.
  255735             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  255736             :        */
  255737             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  255738             :       /* */
  255739             : 
  255740             : 
  255741             :      public:
  255742             :       /* name Memory Allocation Functions
  255743             :           \brief Memory allocations functions ... incomplete-documentation
  255744             : 
  255745             :           These functions have been made public as part of the design, but they are suggested for internal use 
  255746             :           or by particularly knowledgable users for specialized tools or applications.
  255747             :        */
  255748             :       /* */
  255749             : 
  255750             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  255751             : 
  255752             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  255753             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  255754             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  255755             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  255756             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  255757             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  255758             :           being used with the AST File I/O mechanism.
  255759             :        */
  255760             :           virtual bool isInMemoryPool() override;
  255761             : 
  255762             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  255763             : 
  255764             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  255765             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  255766             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  255767             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  255768             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  255769             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  255770             :           being used with the AST File I/O mechanism.
  255771             :        */
  255772             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  255773             : 
  255774             :       // DQ (4/30/2006): Modified to be a const function.
  255775             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  255776             : 
  255777             :           This functions is part of general support for many possible tools to operate 
  255778             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  255779             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  255780             :           less than the set of pointers used by the AST file I/O. This is part of
  255781             :           work implemented by Andreas, and support tools such as the AST graph generation.
  255782             : 
  255783             :           \warning This function can return unexpected data members and thus the 
  255784             :                    order and the number of elements is unpredicable and subject 
  255785             :                    to change.
  255786             : 
  255787             :           \returns STL vector of pairs of SgNode* and strings
  255788             :        */
  255789             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  255790             : 
  255791             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  255792             : 
  255793             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  255794             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  255795             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  255796             : 
  255797             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  255798             :                    and subject to change.
  255799             :        */
  255800             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  255801             : 
  255802             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  255803             : 
  255804             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  255805             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  255806             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  255807             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  255808             : 
  255809             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  255810             : 
  255811             :           \returns long
  255812             :        */
  255813             :           virtual long getChildIndex( SgNode* childNode ) const override;
  255814             : 
  255815             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  255816             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  255817             :       /* \brief Constructor for use by AST File I/O Mechanism
  255818             : 
  255819             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  255820             :           which obtained via fast binary file I/O from disk.
  255821             :        */
  255822             :        // SgIorAssignOp( SgIorAssignOpStorageClass& source );
  255823             : 
  255824             : 
  255825             : 
  255826             : 
  255827             : 
  255828             :  // JH (10/24/2005): methods added to support the ast file IO
  255829             :     private:
  255830             : 
  255831             :       /* name AST Memory Allocation Support Functions
  255832             :           \brief Memory allocations support....
  255833             : 
  255834             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  255835             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  255836             :           and support the AST File I/O Mechanism.
  255837             :        */
  255838             :       /* */
  255839             : 
  255840             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  255841             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  255842             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  255843             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  255844             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  255845             :           a correspinding one in the AST_FILE_IO class!
  255846             :        */
  255847             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  255848             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  255849             :       /* \brief Typedef used for low level memory access.
  255850             :        */
  255851             :        // typedef unsigned char* TestType;
  255852             : 
  255853             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  255854             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  255855             :       /* \brief Typedef used to hold memory addresses as values.
  255856             :        */
  255857             :        // typedef unsigned long  AddressType;
  255858             : 
  255859             : 
  255860             : 
  255861             :        // necessary, to have direct access to the p_freepointer and the private methods !
  255862             :       /*! \brief friend class declaration to support AST File I/O */
  255863             :           friend class AST_FILE_IO;
  255864             : 
  255865             :       /*! \brief friend class declaration to support AST File I/O */
  255866             :           friend class SgIorAssignOpStorageClass;
  255867             : 
  255868             :       /*! \brief friend class declaration to support AST File I/O */
  255869             :           friend class AstSpecificDataManagingClass;
  255870             : 
  255871             :       /*! \brief friend class declaration to support AST File I/O */
  255872             :           friend class AstSpecificDataManagingClassStorageClass;
  255873             :     public:
  255874             :       /*! \brief IR node constructor to support AST File I/O */
  255875             :           SgIorAssignOp( const SgIorAssignOpStorageClass& source );
  255876             : 
  255877             :  // private: // JJW hack
  255878             :        /*
  255879             :           name AST Memory Allocation Support Variables
  255880             :           Memory allocations support variables 
  255881             : 
  255882             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  255883             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  255884             :           and support the AST File I/O Mechanism.
  255885             :        */
  255886             :       /* */
  255887             : 
  255888             :     public:
  255889             : 
  255890             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  255891             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  255892             :       // virtual SgNode* addRegExpAttribute();
  255893             :       /*! \brief Support for AST matching using regular expression.
  255894             : 
  255895             :           This support is incomplete and the subject of current research to define 
  255896             :           RegEx trees to support inexact matching.
  255897             :        */
  255898             :           SgIorAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  255899             : 
  255900             : // *** COMMON CODE SECTION ENDS HERE ***
  255901             : 
  255902             : 
  255903             : // End of memberFunctionString
  255904             : // Start of memberFunctionString
  255905             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  255906             : 
  255907             :      // the generated cast function
  255908             :      // friend ROSE_DLL_API SgIorAssignOp* isSgIorAssignOp ( SgNode* s );
  255909             : 
  255910             :           typedef SgCompoundAssignOp base_node_type;
  255911             : 
  255912             : 
  255913             : // End of memberFunctionString
  255914             : // Start of memberFunctionString
  255915             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  255916             : 
  255917             :           void post_construction_initialization() override;
  255918             : 
  255919             : 
  255920             : // End of memberFunctionString
  255921             : // Start of memberFunctionString
  255922             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  255923             : 
  255924           0 :           int precedence() const override { return  2; }
  255925             : 
  255926             : 
  255927             : // End of memberFunctionString
  255928             : 
  255929             : 
  255930             :      public: 
  255931             :          virtual ~SgIorAssignOp();
  255932             : 
  255933             : 
  255934             :      public: 
  255935             :          SgIorAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  255936             :          SgIorAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  255937             : 
  255938             :     protected:
  255939             : 
  255940             :     friend struct Rose::Traits::generated::describe_node_t<SgIorAssignOp>;
  255941             : 
  255942             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255943             : 
  255944             : 
  255945             :    };
  255946             : #endif
  255947             : 
  255948             : // postdeclarations for SgIorAssignOp
  255949             : 
  255950             : /* #line 255951 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255951             : 
  255952             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  255953             : 
  255954             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255955             : 
  255956             : 
  255957             : /* #line 255958 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255958             : 
  255959             : 
  255960             : 
  255961             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255962             : 
  255963             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  255964             : //      This code is automatically generated for each 
  255965             : //      terminal and non-terminal within the defined 
  255966             : //      grammar.  There is a simple way to change the 
  255967             : //      code to fix bugs etc.  See the ROSE README file
  255968             : //      for directions.
  255969             : 
  255970             : // tps: (02/22/2010): Adding DLL export requirements
  255971             : #include "rosedll.h"
  255972             : 
  255973             : // predeclarations for SgMultAssignOp
  255974             : 
  255975             : /* #line 255976 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255976             : 
  255977             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  255978             : 
  255979             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  255980             : 
  255981             : #if 1
  255982             : // Class Definition for SgMultAssignOp
  255983             : class ROSE_DLL_API SgMultAssignOp  : public SgCompoundAssignOp
  255984             :    {
  255985             :      public:
  255986             : 
  255987             : 
  255988             : /* #line 255989 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  255989             : 
  255990             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  255991             : // Start of memberFunctionString
  255992             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  255993             : 
  255994             : // *** COMMON CODE SECTION BEGINS HERE ***
  255995             : 
  255996             :     public:
  255997             : 
  255998             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  255999             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  256000             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  256001             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  256002             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  256003             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  256004             : 
  256005             :       /*! \brief returns a string representing the class name */
  256006             :           virtual std::string class_name() const override;
  256007             : 
  256008             :       /*! \brief returns new style SageIII enum values */
  256009             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  256010             : 
  256011             :       /*! \brief static variant value */
  256012             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  256013             :        // static const VariantT static_variant = V_SgMultAssignOp;
  256014             :           enum { static_variant = V_SgMultAssignOp };
  256015             : 
  256016             :        /* the generated cast function */
  256017             :       /*! \brief Casts pointer from base class to derived class */
  256018             :           ROSE_DLL_API friend       SgMultAssignOp* isSgMultAssignOp(       SgNode * s );
  256019             : 
  256020             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  256021             :           ROSE_DLL_API friend const SgMultAssignOp* isSgMultAssignOp( const SgNode * s );
  256022             : 
  256023             :      // ******************************************
  256024             :      // * Memory Pool / New / Delete
  256025             :      // ******************************************
  256026             : 
  256027             :      public:
  256028             :           /// \private
  256029             :           static const unsigned pool_size; //
  256030             :           /// \private
  256031             :           static std::vector<unsigned char *> pools; //
  256032             :           /// \private
  256033             :           static SgMultAssignOp * next_node; // 
  256034             : 
  256035             :           /// \private
  256036             :           static unsigned long initializeStorageClassArray(SgMultAssignOpStorageClass *); //
  256037             : 
  256038             :           /// \private
  256039             :           static void clearMemoryPool(); //
  256040             :           static void deleteMemoryPool(); //
  256041             : 
  256042             :           /// \private
  256043             :           static void extendMemoryPoolForFileIO(); //
  256044             : 
  256045             :           /// \private
  256046             :           static SgMultAssignOp * getPointerFromGlobalIndex(unsigned long); //
  256047             :           /// \private
  256048             :           static SgMultAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  256049             : 
  256050             :           /// \private
  256051             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  256052             :           /// \private
  256053             :           static void resetValidFreepointers(); //
  256054             :           /// \private
  256055             :           static unsigned long getNumberOfLastValidPointer(); //
  256056             : 
  256057             : 
  256058             : #if defined(INLINE_FUNCTIONS)
  256059             :       /*! \brief returns pointer to newly allocated IR node */
  256060             :           inline void *operator new (size_t size);
  256061             : #else
  256062             :       /*! \brief returns pointer to newly allocated IR node */
  256063             :           void *operator new (size_t size);
  256064             : #endif
  256065             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  256066             :           void operator delete (void* pointer, size_t size);
  256067             : 
  256068             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  256069           4 :           void operator delete (void* pointer)
  256070             :              {
  256071             :             // This is the generated delete operator...
  256072           4 :                SgMultAssignOp::operator delete (pointer,sizeof(SgMultAssignOp));
  256073             :              }
  256074             : 
  256075             :       /*! \brief Returns the total number of IR nodes of this type */
  256076             :           static size_t numberOfNodes();
  256077             : 
  256078             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  256079             :           static size_t memoryUsage();
  256080             : 
  256081             :       // End of scope which started in IR nodes specific code 
  256082             :       /* */
  256083             : 
  256084             :       /* name Internal Functions
  256085             :           \brief Internal functions ... incomplete-documentation
  256086             : 
  256087             :           These functions have been made public as part of the design, but they are suggested for internal use 
  256088             :           or by particularly knowledgeable users for specialized tools or applications.
  256089             : 
  256090             :           \internal We could not make these private because they are required by user for special purposes. And 
  256091             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  256092             :          
  256093             :        */
  256094             : 
  256095             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  256096             :        // overridden in every class by *generated* implementation
  256097             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  256098             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  256099             :        // MS: 06/28/02 container of names of variables or container indices 
  256100             :        // used used in the traversal to access AST successor nodes
  256101             :        // overridden in every class by *generated* implementation
  256102             :       /*! \brief container of names of variables or container indices used used in the traversal
  256103             :           to access AST successor nodes overridden in every class by *generated* implementation */
  256104             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  256105             : 
  256106             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  256107             :        // than all the vector copies. The implementation for these functions is generated for each class.
  256108             :       /*! \brief return number of children in the traversal successor list */
  256109             :           virtual size_t get_numberOfTraversalSuccessors() override;
  256110             :       /*! \brief index-based access to traversal successors by index number */
  256111             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  256112             :       /*! \brief index-based access to traversal successors by child node */
  256113             :           virtual size_t get_childIndex(SgNode *child) override;
  256114             : 
  256115             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  256116             :        // MS: 08/16/2002 method for generating RTI information
  256117             :       /*! \brief return C++ Runtime-Time-Information */
  256118             :           virtual RTIReturnType roseRTI() override;
  256119             : #endif
  256120             :       /* */
  256121             : 
  256122             : 
  256123             : 
  256124             :       /* name Deprecated Functions
  256125             :           \brief Deprecated functions ... incomplete-documentation
  256126             : 
  256127             :           These functions have been deprecated from use.
  256128             :        */
  256129             :       /* */
  256130             : 
  256131             :       /*! returns a C style string (char*) representing the class name */
  256132             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  256133             : 
  256134             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  256135             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  256136             : #if 0
  256137             :       /*! returns old style Sage II enum values */
  256138             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  256139             :       /*! returns old style Sage II enum values */
  256140             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  256141             : #endif
  256142             :       /* */
  256143             : 
  256144             : 
  256145             : 
  256146             : 
  256147             :      public:
  256148             :       /* name Traversal Support Functions
  256149             :           \brief Traversal support functions ... incomplete-documentation
  256150             : 
  256151             :           These functions have been made public as part of the design, but they are suggested for internal use 
  256152             :           or by particularly knowledgable users for specialized tools or applications.
  256153             :        */
  256154             :       /* */
  256155             : 
  256156             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  256157             :        // (inferior to ROSE traversal mechanism, experimental).
  256158             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  256159             :        */
  256160             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  256161             : 
  256162             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  256163             :       /*! \brief support for the classic visitor pattern done in GoF */
  256164             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  256165             : 
  256166             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  256167             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  256168             :        */
  256169             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  256170             : 
  256171             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  256172             :        */
  256173             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  256174             : 
  256175             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  256176             :        // This traversal helps support internal tools that call static member functions.
  256177             :        // note: this function operates on the memory pools.
  256178             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  256179             :        */
  256180             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  256181             :       /* */
  256182             : 
  256183             : 
  256184             :      public:
  256185             :       /* name Memory Allocation Functions
  256186             :           \brief Memory allocations functions ... incomplete-documentation
  256187             : 
  256188             :           These functions have been made public as part of the design, but they are suggested for internal use 
  256189             :           or by particularly knowledgable users for specialized tools or applications.
  256190             :        */
  256191             :       /* */
  256192             : 
  256193             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  256194             : 
  256195             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  256196             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  256197             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  256198             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  256199             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  256200             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  256201             :           being used with the AST File I/O mechanism.
  256202             :        */
  256203             :           virtual bool isInMemoryPool() override;
  256204             : 
  256205             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  256206             : 
  256207             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  256208             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  256209             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  256210             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  256211             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  256212             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  256213             :           being used with the AST File I/O mechanism.
  256214             :        */
  256215             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  256216             : 
  256217             :       // DQ (4/30/2006): Modified to be a const function.
  256218             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  256219             : 
  256220             :           This functions is part of general support for many possible tools to operate 
  256221             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  256222             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  256223             :           less than the set of pointers used by the AST file I/O. This is part of
  256224             :           work implemented by Andreas, and support tools such as the AST graph generation.
  256225             : 
  256226             :           \warning This function can return unexpected data members and thus the 
  256227             :                    order and the number of elements is unpredicable and subject 
  256228             :                    to change.
  256229             : 
  256230             :           \returns STL vector of pairs of SgNode* and strings
  256231             :        */
  256232             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  256233             : 
  256234             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  256235             : 
  256236             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  256237             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  256238             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  256239             : 
  256240             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  256241             :                    and subject to change.
  256242             :        */
  256243             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  256244             : 
  256245             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  256246             : 
  256247             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  256248             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  256249             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  256250             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  256251             : 
  256252             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  256253             : 
  256254             :           \returns long
  256255             :        */
  256256             :           virtual long getChildIndex( SgNode* childNode ) const override;
  256257             : 
  256258             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  256259             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  256260             :       /* \brief Constructor for use by AST File I/O Mechanism
  256261             : 
  256262             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  256263             :           which obtained via fast binary file I/O from disk.
  256264             :        */
  256265             :        // SgMultAssignOp( SgMultAssignOpStorageClass& source );
  256266             : 
  256267             : 
  256268             : 
  256269             : 
  256270             : 
  256271             :  // JH (10/24/2005): methods added to support the ast file IO
  256272             :     private:
  256273             : 
  256274             :       /* name AST Memory Allocation Support Functions
  256275             :           \brief Memory allocations support....
  256276             : 
  256277             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  256278             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  256279             :           and support the AST File I/O Mechanism.
  256280             :        */
  256281             :       /* */
  256282             : 
  256283             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  256284             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  256285             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  256286             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  256287             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  256288             :           a correspinding one in the AST_FILE_IO class!
  256289             :        */
  256290             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  256291             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  256292             :       /* \brief Typedef used for low level memory access.
  256293             :        */
  256294             :        // typedef unsigned char* TestType;
  256295             : 
  256296             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  256297             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  256298             :       /* \brief Typedef used to hold memory addresses as values.
  256299             :        */
  256300             :        // typedef unsigned long  AddressType;
  256301             : 
  256302             : 
  256303             : 
  256304             :        // necessary, to have direct access to the p_freepointer and the private methods !
  256305             :       /*! \brief friend class declaration to support AST File I/O */
  256306             :           friend class AST_FILE_IO;
  256307             : 
  256308             :       /*! \brief friend class declaration to support AST File I/O */
  256309             :           friend class SgMultAssignOpStorageClass;
  256310             : 
  256311             :       /*! \brief friend class declaration to support AST File I/O */
  256312             :           friend class AstSpecificDataManagingClass;
  256313             : 
  256314             :       /*! \brief friend class declaration to support AST File I/O */
  256315             :           friend class AstSpecificDataManagingClassStorageClass;
  256316             :     public:
  256317             :       /*! \brief IR node constructor to support AST File I/O */
  256318             :           SgMultAssignOp( const SgMultAssignOpStorageClass& source );
  256319             : 
  256320             :  // private: // JJW hack
  256321             :        /*
  256322             :           name AST Memory Allocation Support Variables
  256323             :           Memory allocations support variables 
  256324             : 
  256325             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  256326             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  256327             :           and support the AST File I/O Mechanism.
  256328             :        */
  256329             :       /* */
  256330             : 
  256331             :     public:
  256332             : 
  256333             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  256334             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  256335             :       // virtual SgNode* addRegExpAttribute();
  256336             :       /*! \brief Support for AST matching using regular expression.
  256337             : 
  256338             :           This support is incomplete and the subject of current research to define 
  256339             :           RegEx trees to support inexact matching.
  256340             :        */
  256341             :           SgMultAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  256342             : 
  256343             : // *** COMMON CODE SECTION ENDS HERE ***
  256344             : 
  256345             : 
  256346             : // End of memberFunctionString
  256347             : // Start of memberFunctionString
  256348             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  256349             : 
  256350             :      // the generated cast function
  256351             :      // friend ROSE_DLL_API SgMultAssignOp* isSgMultAssignOp ( SgNode* s );
  256352             : 
  256353             :           typedef SgCompoundAssignOp base_node_type;
  256354             : 
  256355             : 
  256356             : // End of memberFunctionString
  256357             : // Start of memberFunctionString
  256358             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  256359             : 
  256360             :           void post_construction_initialization() override;
  256361             : 
  256362             : 
  256363             : // End of memberFunctionString
  256364             : // Start of memberFunctionString
  256365             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  256366             : 
  256367           0 :           int precedence() const override { return  2; }
  256368             : 
  256369             : 
  256370             : // End of memberFunctionString
  256371             : 
  256372             : 
  256373             :      public: 
  256374             :          virtual ~SgMultAssignOp();
  256375             : 
  256376             : 
  256377             :      public: 
  256378             :          SgMultAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  256379             :          SgMultAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  256380             : 
  256381             :     protected:
  256382             : 
  256383             :     friend struct Rose::Traits::generated::describe_node_t<SgMultAssignOp>;
  256384             : 
  256385             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256386             : 
  256387             : 
  256388             :    };
  256389             : #endif
  256390             : 
  256391             : // postdeclarations for SgMultAssignOp
  256392             : 
  256393             : /* #line 256394 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256394             : 
  256395             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  256396             : 
  256397             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256398             : 
  256399             : 
  256400             : /* #line 256401 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256401             : 
  256402             : 
  256403             : 
  256404             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256405             : 
  256406             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  256407             : //      This code is automatically generated for each 
  256408             : //      terminal and non-terminal within the defined 
  256409             : //      grammar.  There is a simple way to change the 
  256410             : //      code to fix bugs etc.  See the ROSE README file
  256411             : //      for directions.
  256412             : 
  256413             : // tps: (02/22/2010): Adding DLL export requirements
  256414             : #include "rosedll.h"
  256415             : 
  256416             : // predeclarations for SgDivAssignOp
  256417             : 
  256418             : /* #line 256419 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256419             : 
  256420             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  256421             : 
  256422             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256423             : 
  256424             : #if 1
  256425             : // Class Definition for SgDivAssignOp
  256426             : class ROSE_DLL_API SgDivAssignOp  : public SgCompoundAssignOp
  256427             :    {
  256428             :      public:
  256429             : 
  256430             : 
  256431             : /* #line 256432 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256432             : 
  256433             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  256434             : // Start of memberFunctionString
  256435             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  256436             : 
  256437             : // *** COMMON CODE SECTION BEGINS HERE ***
  256438             : 
  256439             :     public:
  256440             : 
  256441             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  256442             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  256443             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  256444             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  256445             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  256446             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  256447             : 
  256448             :       /*! \brief returns a string representing the class name */
  256449             :           virtual std::string class_name() const override;
  256450             : 
  256451             :       /*! \brief returns new style SageIII enum values */
  256452             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  256453             : 
  256454             :       /*! \brief static variant value */
  256455             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  256456             :        // static const VariantT static_variant = V_SgDivAssignOp;
  256457             :           enum { static_variant = V_SgDivAssignOp };
  256458             : 
  256459             :        /* the generated cast function */
  256460             :       /*! \brief Casts pointer from base class to derived class */
  256461             :           ROSE_DLL_API friend       SgDivAssignOp* isSgDivAssignOp(       SgNode * s );
  256462             : 
  256463             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  256464             :           ROSE_DLL_API friend const SgDivAssignOp* isSgDivAssignOp( const SgNode * s );
  256465             : 
  256466             :      // ******************************************
  256467             :      // * Memory Pool / New / Delete
  256468             :      // ******************************************
  256469             : 
  256470             :      public:
  256471             :           /// \private
  256472             :           static const unsigned pool_size; //
  256473             :           /// \private
  256474             :           static std::vector<unsigned char *> pools; //
  256475             :           /// \private
  256476             :           static SgDivAssignOp * next_node; // 
  256477             : 
  256478             :           /// \private
  256479             :           static unsigned long initializeStorageClassArray(SgDivAssignOpStorageClass *); //
  256480             : 
  256481             :           /// \private
  256482             :           static void clearMemoryPool(); //
  256483             :           static void deleteMemoryPool(); //
  256484             : 
  256485             :           /// \private
  256486             :           static void extendMemoryPoolForFileIO(); //
  256487             : 
  256488             :           /// \private
  256489             :           static SgDivAssignOp * getPointerFromGlobalIndex(unsigned long); //
  256490             :           /// \private
  256491             :           static SgDivAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  256492             : 
  256493             :           /// \private
  256494             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  256495             :           /// \private
  256496             :           static void resetValidFreepointers(); //
  256497             :           /// \private
  256498             :           static unsigned long getNumberOfLastValidPointer(); //
  256499             : 
  256500             : 
  256501             : #if defined(INLINE_FUNCTIONS)
  256502             :       /*! \brief returns pointer to newly allocated IR node */
  256503             :           inline void *operator new (size_t size);
  256504             : #else
  256505             :       /*! \brief returns pointer to newly allocated IR node */
  256506             :           void *operator new (size_t size);
  256507             : #endif
  256508             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  256509             :           void operator delete (void* pointer, size_t size);
  256510             : 
  256511             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  256512           2 :           void operator delete (void* pointer)
  256513             :              {
  256514             :             // This is the generated delete operator...
  256515           2 :                SgDivAssignOp::operator delete (pointer,sizeof(SgDivAssignOp));
  256516             :              }
  256517             : 
  256518             :       /*! \brief Returns the total number of IR nodes of this type */
  256519             :           static size_t numberOfNodes();
  256520             : 
  256521             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  256522             :           static size_t memoryUsage();
  256523             : 
  256524             :       // End of scope which started in IR nodes specific code 
  256525             :       /* */
  256526             : 
  256527             :       /* name Internal Functions
  256528             :           \brief Internal functions ... incomplete-documentation
  256529             : 
  256530             :           These functions have been made public as part of the design, but they are suggested for internal use 
  256531             :           or by particularly knowledgeable users for specialized tools or applications.
  256532             : 
  256533             :           \internal We could not make these private because they are required by user for special purposes. And 
  256534             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  256535             :          
  256536             :        */
  256537             : 
  256538             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  256539             :        // overridden in every class by *generated* implementation
  256540             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  256541             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  256542             :        // MS: 06/28/02 container of names of variables or container indices 
  256543             :        // used used in the traversal to access AST successor nodes
  256544             :        // overridden in every class by *generated* implementation
  256545             :       /*! \brief container of names of variables or container indices used used in the traversal
  256546             :           to access AST successor nodes overridden in every class by *generated* implementation */
  256547             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  256548             : 
  256549             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  256550             :        // than all the vector copies. The implementation for these functions is generated for each class.
  256551             :       /*! \brief return number of children in the traversal successor list */
  256552             :           virtual size_t get_numberOfTraversalSuccessors() override;
  256553             :       /*! \brief index-based access to traversal successors by index number */
  256554             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  256555             :       /*! \brief index-based access to traversal successors by child node */
  256556             :           virtual size_t get_childIndex(SgNode *child) override;
  256557             : 
  256558             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  256559             :        // MS: 08/16/2002 method for generating RTI information
  256560             :       /*! \brief return C++ Runtime-Time-Information */
  256561             :           virtual RTIReturnType roseRTI() override;
  256562             : #endif
  256563             :       /* */
  256564             : 
  256565             : 
  256566             : 
  256567             :       /* name Deprecated Functions
  256568             :           \brief Deprecated functions ... incomplete-documentation
  256569             : 
  256570             :           These functions have been deprecated from use.
  256571             :        */
  256572             :       /* */
  256573             : 
  256574             :       /*! returns a C style string (char*) representing the class name */
  256575             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  256576             : 
  256577             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  256578             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  256579             : #if 0
  256580             :       /*! returns old style Sage II enum values */
  256581             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  256582             :       /*! returns old style Sage II enum values */
  256583             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  256584             : #endif
  256585             :       /* */
  256586             : 
  256587             : 
  256588             : 
  256589             : 
  256590             :      public:
  256591             :       /* name Traversal Support Functions
  256592             :           \brief Traversal support functions ... incomplete-documentation
  256593             : 
  256594             :           These functions have been made public as part of the design, but they are suggested for internal use 
  256595             :           or by particularly knowledgable users for specialized tools or applications.
  256596             :        */
  256597             :       /* */
  256598             : 
  256599             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  256600             :        // (inferior to ROSE traversal mechanism, experimental).
  256601             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  256602             :        */
  256603             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  256604             : 
  256605             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  256606             :       /*! \brief support for the classic visitor pattern done in GoF */
  256607             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  256608             : 
  256609             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  256610             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  256611             :        */
  256612             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  256613             : 
  256614             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  256615             :        */
  256616             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  256617             : 
  256618             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  256619             :        // This traversal helps support internal tools that call static member functions.
  256620             :        // note: this function operates on the memory pools.
  256621             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  256622             :        */
  256623             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  256624             :       /* */
  256625             : 
  256626             : 
  256627             :      public:
  256628             :       /* name Memory Allocation Functions
  256629             :           \brief Memory allocations functions ... incomplete-documentation
  256630             : 
  256631             :           These functions have been made public as part of the design, but they are suggested for internal use 
  256632             :           or by particularly knowledgable users for specialized tools or applications.
  256633             :        */
  256634             :       /* */
  256635             : 
  256636             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  256637             : 
  256638             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  256639             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  256640             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  256641             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  256642             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  256643             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  256644             :           being used with the AST File I/O mechanism.
  256645             :        */
  256646             :           virtual bool isInMemoryPool() override;
  256647             : 
  256648             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  256649             : 
  256650             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  256651             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  256652             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  256653             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  256654             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  256655             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  256656             :           being used with the AST File I/O mechanism.
  256657             :        */
  256658             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  256659             : 
  256660             :       // DQ (4/30/2006): Modified to be a const function.
  256661             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  256662             : 
  256663             :           This functions is part of general support for many possible tools to operate 
  256664             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  256665             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  256666             :           less than the set of pointers used by the AST file I/O. This is part of
  256667             :           work implemented by Andreas, and support tools such as the AST graph generation.
  256668             : 
  256669             :           \warning This function can return unexpected data members and thus the 
  256670             :                    order and the number of elements is unpredicable and subject 
  256671             :                    to change.
  256672             : 
  256673             :           \returns STL vector of pairs of SgNode* and strings
  256674             :        */
  256675             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  256676             : 
  256677             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  256678             : 
  256679             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  256680             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  256681             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  256682             : 
  256683             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  256684             :                    and subject to change.
  256685             :        */
  256686             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  256687             : 
  256688             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  256689             : 
  256690             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  256691             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  256692             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  256693             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  256694             : 
  256695             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  256696             : 
  256697             :           \returns long
  256698             :        */
  256699             :           virtual long getChildIndex( SgNode* childNode ) const override;
  256700             : 
  256701             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  256702             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  256703             :       /* \brief Constructor for use by AST File I/O Mechanism
  256704             : 
  256705             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  256706             :           which obtained via fast binary file I/O from disk.
  256707             :        */
  256708             :        // SgDivAssignOp( SgDivAssignOpStorageClass& source );
  256709             : 
  256710             : 
  256711             : 
  256712             : 
  256713             : 
  256714             :  // JH (10/24/2005): methods added to support the ast file IO
  256715             :     private:
  256716             : 
  256717             :       /* name AST Memory Allocation Support Functions
  256718             :           \brief Memory allocations support....
  256719             : 
  256720             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  256721             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  256722             :           and support the AST File I/O Mechanism.
  256723             :        */
  256724             :       /* */
  256725             : 
  256726             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  256727             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  256728             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  256729             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  256730             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  256731             :           a correspinding one in the AST_FILE_IO class!
  256732             :        */
  256733             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  256734             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  256735             :       /* \brief Typedef used for low level memory access.
  256736             :        */
  256737             :        // typedef unsigned char* TestType;
  256738             : 
  256739             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  256740             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  256741             :       /* \brief Typedef used to hold memory addresses as values.
  256742             :        */
  256743             :        // typedef unsigned long  AddressType;
  256744             : 
  256745             : 
  256746             : 
  256747             :        // necessary, to have direct access to the p_freepointer and the private methods !
  256748             :       /*! \brief friend class declaration to support AST File I/O */
  256749             :           friend class AST_FILE_IO;
  256750             : 
  256751             :       /*! \brief friend class declaration to support AST File I/O */
  256752             :           friend class SgDivAssignOpStorageClass;
  256753             : 
  256754             :       /*! \brief friend class declaration to support AST File I/O */
  256755             :           friend class AstSpecificDataManagingClass;
  256756             : 
  256757             :       /*! \brief friend class declaration to support AST File I/O */
  256758             :           friend class AstSpecificDataManagingClassStorageClass;
  256759             :     public:
  256760             :       /*! \brief IR node constructor to support AST File I/O */
  256761             :           SgDivAssignOp( const SgDivAssignOpStorageClass& source );
  256762             : 
  256763             :  // private: // JJW hack
  256764             :        /*
  256765             :           name AST Memory Allocation Support Variables
  256766             :           Memory allocations support variables 
  256767             : 
  256768             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  256769             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  256770             :           and support the AST File I/O Mechanism.
  256771             :        */
  256772             :       /* */
  256773             : 
  256774             :     public:
  256775             : 
  256776             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  256777             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  256778             :       // virtual SgNode* addRegExpAttribute();
  256779             :       /*! \brief Support for AST matching using regular expression.
  256780             : 
  256781             :           This support is incomplete and the subject of current research to define 
  256782             :           RegEx trees to support inexact matching.
  256783             :        */
  256784             :           SgDivAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  256785             : 
  256786             : // *** COMMON CODE SECTION ENDS HERE ***
  256787             : 
  256788             : 
  256789             : // End of memberFunctionString
  256790             : // Start of memberFunctionString
  256791             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  256792             : 
  256793             :      // the generated cast function
  256794             :      // friend ROSE_DLL_API SgDivAssignOp* isSgDivAssignOp ( SgNode* s );
  256795             : 
  256796             :           typedef SgCompoundAssignOp base_node_type;
  256797             : 
  256798             : 
  256799             : // End of memberFunctionString
  256800             : // Start of memberFunctionString
  256801             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  256802             : 
  256803             :           void post_construction_initialization() override;
  256804             : 
  256805             : 
  256806             : // End of memberFunctionString
  256807             : // Start of memberFunctionString
  256808             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  256809             : 
  256810           0 :           int precedence() const override { return  2; }
  256811             : 
  256812             : 
  256813             : // End of memberFunctionString
  256814             : 
  256815             : 
  256816             :      public: 
  256817             :          virtual ~SgDivAssignOp();
  256818             : 
  256819             : 
  256820             :      public: 
  256821             :          SgDivAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  256822             :          SgDivAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  256823             : 
  256824             :     protected:
  256825             : 
  256826             :     friend struct Rose::Traits::generated::describe_node_t<SgDivAssignOp>;
  256827             : 
  256828             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256829             : 
  256830             : 
  256831             :    };
  256832             : #endif
  256833             : 
  256834             : // postdeclarations for SgDivAssignOp
  256835             : 
  256836             : /* #line 256837 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256837             : 
  256838             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  256839             : 
  256840             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256841             : 
  256842             : 
  256843             : /* #line 256844 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256844             : 
  256845             : 
  256846             : 
  256847             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256848             : 
  256849             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  256850             : //      This code is automatically generated for each 
  256851             : //      terminal and non-terminal within the defined 
  256852             : //      grammar.  There is a simple way to change the 
  256853             : //      code to fix bugs etc.  See the ROSE README file
  256854             : //      for directions.
  256855             : 
  256856             : // tps: (02/22/2010): Adding DLL export requirements
  256857             : #include "rosedll.h"
  256858             : 
  256859             : // predeclarations for SgModAssignOp
  256860             : 
  256861             : /* #line 256862 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256862             : 
  256863             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  256864             : 
  256865             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  256866             : 
  256867             : #if 1
  256868             : // Class Definition for SgModAssignOp
  256869             : class ROSE_DLL_API SgModAssignOp  : public SgCompoundAssignOp
  256870             :    {
  256871             :      public:
  256872             : 
  256873             : 
  256874             : /* #line 256875 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  256875             : 
  256876             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  256877             : // Start of memberFunctionString
  256878             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  256879             : 
  256880             : // *** COMMON CODE SECTION BEGINS HERE ***
  256881             : 
  256882             :     public:
  256883             : 
  256884             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  256885             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  256886             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  256887             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  256888             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  256889             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  256890             : 
  256891             :       /*! \brief returns a string representing the class name */
  256892             :           virtual std::string class_name() const override;
  256893             : 
  256894             :       /*! \brief returns new style SageIII enum values */
  256895             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  256896             : 
  256897             :       /*! \brief static variant value */
  256898             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  256899             :        // static const VariantT static_variant = V_SgModAssignOp;
  256900             :           enum { static_variant = V_SgModAssignOp };
  256901             : 
  256902             :        /* the generated cast function */
  256903             :       /*! \brief Casts pointer from base class to derived class */
  256904             :           ROSE_DLL_API friend       SgModAssignOp* isSgModAssignOp(       SgNode * s );
  256905             : 
  256906             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  256907             :           ROSE_DLL_API friend const SgModAssignOp* isSgModAssignOp( const SgNode * s );
  256908             : 
  256909             :      // ******************************************
  256910             :      // * Memory Pool / New / Delete
  256911             :      // ******************************************
  256912             : 
  256913             :      public:
  256914             :           /// \private
  256915             :           static const unsigned pool_size; //
  256916             :           /// \private
  256917             :           static std::vector<unsigned char *> pools; //
  256918             :           /// \private
  256919             :           static SgModAssignOp * next_node; // 
  256920             : 
  256921             :           /// \private
  256922             :           static unsigned long initializeStorageClassArray(SgModAssignOpStorageClass *); //
  256923             : 
  256924             :           /// \private
  256925             :           static void clearMemoryPool(); //
  256926             :           static void deleteMemoryPool(); //
  256927             : 
  256928             :           /// \private
  256929             :           static void extendMemoryPoolForFileIO(); //
  256930             : 
  256931             :           /// \private
  256932             :           static SgModAssignOp * getPointerFromGlobalIndex(unsigned long); //
  256933             :           /// \private
  256934             :           static SgModAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  256935             : 
  256936             :           /// \private
  256937             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  256938             :           /// \private
  256939             :           static void resetValidFreepointers(); //
  256940             :           /// \private
  256941             :           static unsigned long getNumberOfLastValidPointer(); //
  256942             : 
  256943             : 
  256944             : #if defined(INLINE_FUNCTIONS)
  256945             :       /*! \brief returns pointer to newly allocated IR node */
  256946             :           inline void *operator new (size_t size);
  256947             : #else
  256948             :       /*! \brief returns pointer to newly allocated IR node */
  256949             :           void *operator new (size_t size);
  256950             : #endif
  256951             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  256952             :           void operator delete (void* pointer, size_t size);
  256953             : 
  256954             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  256955           0 :           void operator delete (void* pointer)
  256956             :              {
  256957             :             // This is the generated delete operator...
  256958           0 :                SgModAssignOp::operator delete (pointer,sizeof(SgModAssignOp));
  256959             :              }
  256960             : 
  256961             :       /*! \brief Returns the total number of IR nodes of this type */
  256962             :           static size_t numberOfNodes();
  256963             : 
  256964             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  256965             :           static size_t memoryUsage();
  256966             : 
  256967             :       // End of scope which started in IR nodes specific code 
  256968             :       /* */
  256969             : 
  256970             :       /* name Internal Functions
  256971             :           \brief Internal functions ... incomplete-documentation
  256972             : 
  256973             :           These functions have been made public as part of the design, but they are suggested for internal use 
  256974             :           or by particularly knowledgeable users for specialized tools or applications.
  256975             : 
  256976             :           \internal We could not make these private because they are required by user for special purposes. And 
  256977             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  256978             :          
  256979             :        */
  256980             : 
  256981             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  256982             :        // overridden in every class by *generated* implementation
  256983             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  256984             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  256985             :        // MS: 06/28/02 container of names of variables or container indices 
  256986             :        // used used in the traversal to access AST successor nodes
  256987             :        // overridden in every class by *generated* implementation
  256988             :       /*! \brief container of names of variables or container indices used used in the traversal
  256989             :           to access AST successor nodes overridden in every class by *generated* implementation */
  256990             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  256991             : 
  256992             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  256993             :        // than all the vector copies. The implementation for these functions is generated for each class.
  256994             :       /*! \brief return number of children in the traversal successor list */
  256995             :           virtual size_t get_numberOfTraversalSuccessors() override;
  256996             :       /*! \brief index-based access to traversal successors by index number */
  256997             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  256998             :       /*! \brief index-based access to traversal successors by child node */
  256999             :           virtual size_t get_childIndex(SgNode *child) override;
  257000             : 
  257001             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  257002             :        // MS: 08/16/2002 method for generating RTI information
  257003             :       /*! \brief return C++ Runtime-Time-Information */
  257004             :           virtual RTIReturnType roseRTI() override;
  257005             : #endif
  257006             :       /* */
  257007             : 
  257008             : 
  257009             : 
  257010             :       /* name Deprecated Functions
  257011             :           \brief Deprecated functions ... incomplete-documentation
  257012             : 
  257013             :           These functions have been deprecated from use.
  257014             :        */
  257015             :       /* */
  257016             : 
  257017             :       /*! returns a C style string (char*) representing the class name */
  257018             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  257019             : 
  257020             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  257021             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  257022             : #if 0
  257023             :       /*! returns old style Sage II enum values */
  257024             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  257025             :       /*! returns old style Sage II enum values */
  257026             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  257027             : #endif
  257028             :       /* */
  257029             : 
  257030             : 
  257031             : 
  257032             : 
  257033             :      public:
  257034             :       /* name Traversal Support Functions
  257035             :           \brief Traversal support functions ... incomplete-documentation
  257036             : 
  257037             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257038             :           or by particularly knowledgable users for specialized tools or applications.
  257039             :        */
  257040             :       /* */
  257041             : 
  257042             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  257043             :        // (inferior to ROSE traversal mechanism, experimental).
  257044             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  257045             :        */
  257046             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  257047             : 
  257048             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  257049             :       /*! \brief support for the classic visitor pattern done in GoF */
  257050             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  257051             : 
  257052             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  257053             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  257054             :        */
  257055             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  257056             : 
  257057             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  257058             :        */
  257059             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  257060             : 
  257061             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  257062             :        // This traversal helps support internal tools that call static member functions.
  257063             :        // note: this function operates on the memory pools.
  257064             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  257065             :        */
  257066             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  257067             :       /* */
  257068             : 
  257069             : 
  257070             :      public:
  257071             :       /* name Memory Allocation Functions
  257072             :           \brief Memory allocations functions ... incomplete-documentation
  257073             : 
  257074             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257075             :           or by particularly knowledgable users for specialized tools or applications.
  257076             :        */
  257077             :       /* */
  257078             : 
  257079             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  257080             : 
  257081             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  257082             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  257083             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  257084             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  257085             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  257086             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  257087             :           being used with the AST File I/O mechanism.
  257088             :        */
  257089             :           virtual bool isInMemoryPool() override;
  257090             : 
  257091             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  257092             : 
  257093             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  257094             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  257095             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  257096             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  257097             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  257098             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  257099             :           being used with the AST File I/O mechanism.
  257100             :        */
  257101             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  257102             : 
  257103             :       // DQ (4/30/2006): Modified to be a const function.
  257104             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  257105             : 
  257106             :           This functions is part of general support for many possible tools to operate 
  257107             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  257108             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  257109             :           less than the set of pointers used by the AST file I/O. This is part of
  257110             :           work implemented by Andreas, and support tools such as the AST graph generation.
  257111             : 
  257112             :           \warning This function can return unexpected data members and thus the 
  257113             :                    order and the number of elements is unpredicable and subject 
  257114             :                    to change.
  257115             : 
  257116             :           \returns STL vector of pairs of SgNode* and strings
  257117             :        */
  257118             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  257119             : 
  257120             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  257121             : 
  257122             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  257123             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  257124             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  257125             : 
  257126             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  257127             :                    and subject to change.
  257128             :        */
  257129             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  257130             : 
  257131             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  257132             : 
  257133             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  257134             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  257135             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  257136             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  257137             : 
  257138             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  257139             : 
  257140             :           \returns long
  257141             :        */
  257142             :           virtual long getChildIndex( SgNode* childNode ) const override;
  257143             : 
  257144             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  257145             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  257146             :       /* \brief Constructor for use by AST File I/O Mechanism
  257147             : 
  257148             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  257149             :           which obtained via fast binary file I/O from disk.
  257150             :        */
  257151             :        // SgModAssignOp( SgModAssignOpStorageClass& source );
  257152             : 
  257153             : 
  257154             : 
  257155             : 
  257156             : 
  257157             :  // JH (10/24/2005): methods added to support the ast file IO
  257158             :     private:
  257159             : 
  257160             :       /* name AST Memory Allocation Support Functions
  257161             :           \brief Memory allocations support....
  257162             : 
  257163             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  257164             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  257165             :           and support the AST File I/O Mechanism.
  257166             :        */
  257167             :       /* */
  257168             : 
  257169             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  257170             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  257171             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  257172             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  257173             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  257174             :           a correspinding one in the AST_FILE_IO class!
  257175             :        */
  257176             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  257177             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  257178             :       /* \brief Typedef used for low level memory access.
  257179             :        */
  257180             :        // typedef unsigned char* TestType;
  257181             : 
  257182             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  257183             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  257184             :       /* \brief Typedef used to hold memory addresses as values.
  257185             :        */
  257186             :        // typedef unsigned long  AddressType;
  257187             : 
  257188             : 
  257189             : 
  257190             :        // necessary, to have direct access to the p_freepointer and the private methods !
  257191             :       /*! \brief friend class declaration to support AST File I/O */
  257192             :           friend class AST_FILE_IO;
  257193             : 
  257194             :       /*! \brief friend class declaration to support AST File I/O */
  257195             :           friend class SgModAssignOpStorageClass;
  257196             : 
  257197             :       /*! \brief friend class declaration to support AST File I/O */
  257198             :           friend class AstSpecificDataManagingClass;
  257199             : 
  257200             :       /*! \brief friend class declaration to support AST File I/O */
  257201             :           friend class AstSpecificDataManagingClassStorageClass;
  257202             :     public:
  257203             :       /*! \brief IR node constructor to support AST File I/O */
  257204             :           SgModAssignOp( const SgModAssignOpStorageClass& source );
  257205             : 
  257206             :  // private: // JJW hack
  257207             :        /*
  257208             :           name AST Memory Allocation Support Variables
  257209             :           Memory allocations support variables 
  257210             : 
  257211             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  257212             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  257213             :           and support the AST File I/O Mechanism.
  257214             :        */
  257215             :       /* */
  257216             : 
  257217             :     public:
  257218             : 
  257219             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  257220             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  257221             :       // virtual SgNode* addRegExpAttribute();
  257222             :       /*! \brief Support for AST matching using regular expression.
  257223             : 
  257224             :           This support is incomplete and the subject of current research to define 
  257225             :           RegEx trees to support inexact matching.
  257226             :        */
  257227             :           SgModAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  257228             : 
  257229             : // *** COMMON CODE SECTION ENDS HERE ***
  257230             : 
  257231             : 
  257232             : // End of memberFunctionString
  257233             : // Start of memberFunctionString
  257234             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  257235             : 
  257236             :      // the generated cast function
  257237             :      // friend ROSE_DLL_API SgModAssignOp* isSgModAssignOp ( SgNode* s );
  257238             : 
  257239             :           typedef SgCompoundAssignOp base_node_type;
  257240             : 
  257241             : 
  257242             : // End of memberFunctionString
  257243             : // Start of memberFunctionString
  257244             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  257245             : 
  257246             :           void post_construction_initialization() override;
  257247             : 
  257248             : 
  257249             : // End of memberFunctionString
  257250             : // Start of memberFunctionString
  257251             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  257252             : 
  257253           0 :           int precedence() const override { return  2; }
  257254             : 
  257255             : 
  257256             : // End of memberFunctionString
  257257             : 
  257258             : 
  257259             :      public: 
  257260             :          virtual ~SgModAssignOp();
  257261             : 
  257262             : 
  257263             :      public: 
  257264             :          SgModAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  257265             :          SgModAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  257266             : 
  257267             :     protected:
  257268             : 
  257269             :     friend struct Rose::Traits::generated::describe_node_t<SgModAssignOp>;
  257270             : 
  257271             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257272             : 
  257273             : 
  257274             :    };
  257275             : #endif
  257276             : 
  257277             : // postdeclarations for SgModAssignOp
  257278             : 
  257279             : /* #line 257280 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257280             : 
  257281             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  257282             : 
  257283             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257284             : 
  257285             : 
  257286             : /* #line 257287 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257287             : 
  257288             : 
  257289             : 
  257290             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257291             : 
  257292             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  257293             : //      This code is automatically generated for each 
  257294             : //      terminal and non-terminal within the defined 
  257295             : //      grammar.  There is a simple way to change the 
  257296             : //      code to fix bugs etc.  See the ROSE README file
  257297             : //      for directions.
  257298             : 
  257299             : // tps: (02/22/2010): Adding DLL export requirements
  257300             : #include "rosedll.h"
  257301             : 
  257302             : // predeclarations for SgXorAssignOp
  257303             : 
  257304             : /* #line 257305 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257305             : 
  257306             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  257307             : 
  257308             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257309             : 
  257310             : #if 1
  257311             : // Class Definition for SgXorAssignOp
  257312             : class ROSE_DLL_API SgXorAssignOp  : public SgCompoundAssignOp
  257313             :    {
  257314             :      public:
  257315             : 
  257316             : 
  257317             : /* #line 257318 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257318             : 
  257319             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  257320             : // Start of memberFunctionString
  257321             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  257322             : 
  257323             : // *** COMMON CODE SECTION BEGINS HERE ***
  257324             : 
  257325             :     public:
  257326             : 
  257327             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  257328             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  257329             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  257330             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  257331             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  257332             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  257333             : 
  257334             :       /*! \brief returns a string representing the class name */
  257335             :           virtual std::string class_name() const override;
  257336             : 
  257337             :       /*! \brief returns new style SageIII enum values */
  257338             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  257339             : 
  257340             :       /*! \brief static variant value */
  257341             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  257342             :        // static const VariantT static_variant = V_SgXorAssignOp;
  257343             :           enum { static_variant = V_SgXorAssignOp };
  257344             : 
  257345             :        /* the generated cast function */
  257346             :       /*! \brief Casts pointer from base class to derived class */
  257347             :           ROSE_DLL_API friend       SgXorAssignOp* isSgXorAssignOp(       SgNode * s );
  257348             : 
  257349             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  257350             :           ROSE_DLL_API friend const SgXorAssignOp* isSgXorAssignOp( const SgNode * s );
  257351             : 
  257352             :      // ******************************************
  257353             :      // * Memory Pool / New / Delete
  257354             :      // ******************************************
  257355             : 
  257356             :      public:
  257357             :           /// \private
  257358             :           static const unsigned pool_size; //
  257359             :           /// \private
  257360             :           static std::vector<unsigned char *> pools; //
  257361             :           /// \private
  257362             :           static SgXorAssignOp * next_node; // 
  257363             : 
  257364             :           /// \private
  257365             :           static unsigned long initializeStorageClassArray(SgXorAssignOpStorageClass *); //
  257366             : 
  257367             :           /// \private
  257368             :           static void clearMemoryPool(); //
  257369             :           static void deleteMemoryPool(); //
  257370             : 
  257371             :           /// \private
  257372             :           static void extendMemoryPoolForFileIO(); //
  257373             : 
  257374             :           /// \private
  257375             :           static SgXorAssignOp * getPointerFromGlobalIndex(unsigned long); //
  257376             :           /// \private
  257377             :           static SgXorAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  257378             : 
  257379             :           /// \private
  257380             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  257381             :           /// \private
  257382             :           static void resetValidFreepointers(); //
  257383             :           /// \private
  257384             :           static unsigned long getNumberOfLastValidPointer(); //
  257385             : 
  257386             : 
  257387             : #if defined(INLINE_FUNCTIONS)
  257388             :       /*! \brief returns pointer to newly allocated IR node */
  257389             :           inline void *operator new (size_t size);
  257390             : #else
  257391             :       /*! \brief returns pointer to newly allocated IR node */
  257392             :           void *operator new (size_t size);
  257393             : #endif
  257394             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  257395             :           void operator delete (void* pointer, size_t size);
  257396             : 
  257397             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  257398           0 :           void operator delete (void* pointer)
  257399             :              {
  257400             :             // This is the generated delete operator...
  257401           0 :                SgXorAssignOp::operator delete (pointer,sizeof(SgXorAssignOp));
  257402             :              }
  257403             : 
  257404             :       /*! \brief Returns the total number of IR nodes of this type */
  257405             :           static size_t numberOfNodes();
  257406             : 
  257407             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  257408             :           static size_t memoryUsage();
  257409             : 
  257410             :       // End of scope which started in IR nodes specific code 
  257411             :       /* */
  257412             : 
  257413             :       /* name Internal Functions
  257414             :           \brief Internal functions ... incomplete-documentation
  257415             : 
  257416             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257417             :           or by particularly knowledgeable users for specialized tools or applications.
  257418             : 
  257419             :           \internal We could not make these private because they are required by user for special purposes. And 
  257420             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  257421             :          
  257422             :        */
  257423             : 
  257424             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  257425             :        // overridden in every class by *generated* implementation
  257426             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  257427             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  257428             :        // MS: 06/28/02 container of names of variables or container indices 
  257429             :        // used used in the traversal to access AST successor nodes
  257430             :        // overridden in every class by *generated* implementation
  257431             :       /*! \brief container of names of variables or container indices used used in the traversal
  257432             :           to access AST successor nodes overridden in every class by *generated* implementation */
  257433             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  257434             : 
  257435             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  257436             :        // than all the vector copies. The implementation for these functions is generated for each class.
  257437             :       /*! \brief return number of children in the traversal successor list */
  257438             :           virtual size_t get_numberOfTraversalSuccessors() override;
  257439             :       /*! \brief index-based access to traversal successors by index number */
  257440             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  257441             :       /*! \brief index-based access to traversal successors by child node */
  257442             :           virtual size_t get_childIndex(SgNode *child) override;
  257443             : 
  257444             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  257445             :        // MS: 08/16/2002 method for generating RTI information
  257446             :       /*! \brief return C++ Runtime-Time-Information */
  257447             :           virtual RTIReturnType roseRTI() override;
  257448             : #endif
  257449             :       /* */
  257450             : 
  257451             : 
  257452             : 
  257453             :       /* name Deprecated Functions
  257454             :           \brief Deprecated functions ... incomplete-documentation
  257455             : 
  257456             :           These functions have been deprecated from use.
  257457             :        */
  257458             :       /* */
  257459             : 
  257460             :       /*! returns a C style string (char*) representing the class name */
  257461             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  257462             : 
  257463             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  257464             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  257465             : #if 0
  257466             :       /*! returns old style Sage II enum values */
  257467             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  257468             :       /*! returns old style Sage II enum values */
  257469             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  257470             : #endif
  257471             :       /* */
  257472             : 
  257473             : 
  257474             : 
  257475             : 
  257476             :      public:
  257477             :       /* name Traversal Support Functions
  257478             :           \brief Traversal support functions ... incomplete-documentation
  257479             : 
  257480             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257481             :           or by particularly knowledgable users for specialized tools or applications.
  257482             :        */
  257483             :       /* */
  257484             : 
  257485             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  257486             :        // (inferior to ROSE traversal mechanism, experimental).
  257487             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  257488             :        */
  257489             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  257490             : 
  257491             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  257492             :       /*! \brief support for the classic visitor pattern done in GoF */
  257493             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  257494             : 
  257495             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  257496             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  257497             :        */
  257498             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  257499             : 
  257500             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  257501             :        */
  257502             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  257503             : 
  257504             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  257505             :        // This traversal helps support internal tools that call static member functions.
  257506             :        // note: this function operates on the memory pools.
  257507             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  257508             :        */
  257509             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  257510             :       /* */
  257511             : 
  257512             : 
  257513             :      public:
  257514             :       /* name Memory Allocation Functions
  257515             :           \brief Memory allocations functions ... incomplete-documentation
  257516             : 
  257517             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257518             :           or by particularly knowledgable users for specialized tools or applications.
  257519             :        */
  257520             :       /* */
  257521             : 
  257522             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  257523             : 
  257524             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  257525             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  257526             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  257527             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  257528             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  257529             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  257530             :           being used with the AST File I/O mechanism.
  257531             :        */
  257532             :           virtual bool isInMemoryPool() override;
  257533             : 
  257534             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  257535             : 
  257536             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  257537             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  257538             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  257539             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  257540             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  257541             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  257542             :           being used with the AST File I/O mechanism.
  257543             :        */
  257544             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  257545             : 
  257546             :       // DQ (4/30/2006): Modified to be a const function.
  257547             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  257548             : 
  257549             :           This functions is part of general support for many possible tools to operate 
  257550             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  257551             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  257552             :           less than the set of pointers used by the AST file I/O. This is part of
  257553             :           work implemented by Andreas, and support tools such as the AST graph generation.
  257554             : 
  257555             :           \warning This function can return unexpected data members and thus the 
  257556             :                    order and the number of elements is unpredicable and subject 
  257557             :                    to change.
  257558             : 
  257559             :           \returns STL vector of pairs of SgNode* and strings
  257560             :        */
  257561             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  257562             : 
  257563             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  257564             : 
  257565             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  257566             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  257567             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  257568             : 
  257569             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  257570             :                    and subject to change.
  257571             :        */
  257572             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  257573             : 
  257574             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  257575             : 
  257576             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  257577             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  257578             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  257579             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  257580             : 
  257581             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  257582             : 
  257583             :           \returns long
  257584             :        */
  257585             :           virtual long getChildIndex( SgNode* childNode ) const override;
  257586             : 
  257587             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  257588             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  257589             :       /* \brief Constructor for use by AST File I/O Mechanism
  257590             : 
  257591             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  257592             :           which obtained via fast binary file I/O from disk.
  257593             :        */
  257594             :        // SgXorAssignOp( SgXorAssignOpStorageClass& source );
  257595             : 
  257596             : 
  257597             : 
  257598             : 
  257599             : 
  257600             :  // JH (10/24/2005): methods added to support the ast file IO
  257601             :     private:
  257602             : 
  257603             :       /* name AST Memory Allocation Support Functions
  257604             :           \brief Memory allocations support....
  257605             : 
  257606             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  257607             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  257608             :           and support the AST File I/O Mechanism.
  257609             :        */
  257610             :       /* */
  257611             : 
  257612             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  257613             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  257614             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  257615             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  257616             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  257617             :           a correspinding one in the AST_FILE_IO class!
  257618             :        */
  257619             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  257620             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  257621             :       /* \brief Typedef used for low level memory access.
  257622             :        */
  257623             :        // typedef unsigned char* TestType;
  257624             : 
  257625             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  257626             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  257627             :       /* \brief Typedef used to hold memory addresses as values.
  257628             :        */
  257629             :        // typedef unsigned long  AddressType;
  257630             : 
  257631             : 
  257632             : 
  257633             :        // necessary, to have direct access to the p_freepointer and the private methods !
  257634             :       /*! \brief friend class declaration to support AST File I/O */
  257635             :           friend class AST_FILE_IO;
  257636             : 
  257637             :       /*! \brief friend class declaration to support AST File I/O */
  257638             :           friend class SgXorAssignOpStorageClass;
  257639             : 
  257640             :       /*! \brief friend class declaration to support AST File I/O */
  257641             :           friend class AstSpecificDataManagingClass;
  257642             : 
  257643             :       /*! \brief friend class declaration to support AST File I/O */
  257644             :           friend class AstSpecificDataManagingClassStorageClass;
  257645             :     public:
  257646             :       /*! \brief IR node constructor to support AST File I/O */
  257647             :           SgXorAssignOp( const SgXorAssignOpStorageClass& source );
  257648             : 
  257649             :  // private: // JJW hack
  257650             :        /*
  257651             :           name AST Memory Allocation Support Variables
  257652             :           Memory allocations support variables 
  257653             : 
  257654             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  257655             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  257656             :           and support the AST File I/O Mechanism.
  257657             :        */
  257658             :       /* */
  257659             : 
  257660             :     public:
  257661             : 
  257662             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  257663             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  257664             :       // virtual SgNode* addRegExpAttribute();
  257665             :       /*! \brief Support for AST matching using regular expression.
  257666             : 
  257667             :           This support is incomplete and the subject of current research to define 
  257668             :           RegEx trees to support inexact matching.
  257669             :        */
  257670             :           SgXorAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  257671             : 
  257672             : // *** COMMON CODE SECTION ENDS HERE ***
  257673             : 
  257674             : 
  257675             : // End of memberFunctionString
  257676             : // Start of memberFunctionString
  257677             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  257678             : 
  257679             :      // the generated cast function
  257680             :      // friend ROSE_DLL_API SgXorAssignOp* isSgXorAssignOp ( SgNode* s );
  257681             : 
  257682             :           typedef SgCompoundAssignOp base_node_type;
  257683             : 
  257684             : 
  257685             : // End of memberFunctionString
  257686             : // Start of memberFunctionString
  257687             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  257688             : 
  257689             :           void post_construction_initialization() override;
  257690             : 
  257691             : 
  257692             : // End of memberFunctionString
  257693             : // Start of memberFunctionString
  257694             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  257695             : 
  257696           0 :           int precedence() const override { return  2; }
  257697             : 
  257698             : 
  257699             : // End of memberFunctionString
  257700             : 
  257701             : 
  257702             :      public: 
  257703             :          virtual ~SgXorAssignOp();
  257704             : 
  257705             : 
  257706             :      public: 
  257707             :          SgXorAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  257708             :          SgXorAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  257709             : 
  257710             :     protected:
  257711             : 
  257712             :     friend struct Rose::Traits::generated::describe_node_t<SgXorAssignOp>;
  257713             : 
  257714             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257715             : 
  257716             : 
  257717             :    };
  257718             : #endif
  257719             : 
  257720             : // postdeclarations for SgXorAssignOp
  257721             : 
  257722             : /* #line 257723 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257723             : 
  257724             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  257725             : 
  257726             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257727             : 
  257728             : 
  257729             : /* #line 257730 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257730             : 
  257731             : 
  257732             : 
  257733             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257734             : 
  257735             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  257736             : //      This code is automatically generated for each 
  257737             : //      terminal and non-terminal within the defined 
  257738             : //      grammar.  There is a simple way to change the 
  257739             : //      code to fix bugs etc.  See the ROSE README file
  257740             : //      for directions.
  257741             : 
  257742             : // tps: (02/22/2010): Adding DLL export requirements
  257743             : #include "rosedll.h"
  257744             : 
  257745             : // predeclarations for SgLshiftAssignOp
  257746             : 
  257747             : /* #line 257748 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257748             : 
  257749             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  257750             : 
  257751             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  257752             : 
  257753             : #if 1
  257754             : // Class Definition for SgLshiftAssignOp
  257755             : class ROSE_DLL_API SgLshiftAssignOp  : public SgCompoundAssignOp
  257756             :    {
  257757             :      public:
  257758             : 
  257759             : 
  257760             : /* #line 257761 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  257761             : 
  257762             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  257763             : // Start of memberFunctionString
  257764             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  257765             : 
  257766             : // *** COMMON CODE SECTION BEGINS HERE ***
  257767             : 
  257768             :     public:
  257769             : 
  257770             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  257771             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  257772             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  257773             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  257774             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  257775             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  257776             : 
  257777             :       /*! \brief returns a string representing the class name */
  257778             :           virtual std::string class_name() const override;
  257779             : 
  257780             :       /*! \brief returns new style SageIII enum values */
  257781             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  257782             : 
  257783             :       /*! \brief static variant value */
  257784             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  257785             :        // static const VariantT static_variant = V_SgLshiftAssignOp;
  257786             :           enum { static_variant = V_SgLshiftAssignOp };
  257787             : 
  257788             :        /* the generated cast function */
  257789             :       /*! \brief Casts pointer from base class to derived class */
  257790             :           ROSE_DLL_API friend       SgLshiftAssignOp* isSgLshiftAssignOp(       SgNode * s );
  257791             : 
  257792             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  257793             :           ROSE_DLL_API friend const SgLshiftAssignOp* isSgLshiftAssignOp( const SgNode * s );
  257794             : 
  257795             :      // ******************************************
  257796             :      // * Memory Pool / New / Delete
  257797             :      // ******************************************
  257798             : 
  257799             :      public:
  257800             :           /// \private
  257801             :           static const unsigned pool_size; //
  257802             :           /// \private
  257803             :           static std::vector<unsigned char *> pools; //
  257804             :           /// \private
  257805             :           static SgLshiftAssignOp * next_node; // 
  257806             : 
  257807             :           /// \private
  257808             :           static unsigned long initializeStorageClassArray(SgLshiftAssignOpStorageClass *); //
  257809             : 
  257810             :           /// \private
  257811             :           static void clearMemoryPool(); //
  257812             :           static void deleteMemoryPool(); //
  257813             : 
  257814             :           /// \private
  257815             :           static void extendMemoryPoolForFileIO(); //
  257816             : 
  257817             :           /// \private
  257818             :           static SgLshiftAssignOp * getPointerFromGlobalIndex(unsigned long); //
  257819             :           /// \private
  257820             :           static SgLshiftAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  257821             : 
  257822             :           /// \private
  257823             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  257824             :           /// \private
  257825             :           static void resetValidFreepointers(); //
  257826             :           /// \private
  257827             :           static unsigned long getNumberOfLastValidPointer(); //
  257828             : 
  257829             : 
  257830             : #if defined(INLINE_FUNCTIONS)
  257831             :       /*! \brief returns pointer to newly allocated IR node */
  257832             :           inline void *operator new (size_t size);
  257833             : #else
  257834             :       /*! \brief returns pointer to newly allocated IR node */
  257835             :           void *operator new (size_t size);
  257836             : #endif
  257837             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  257838             :           void operator delete (void* pointer, size_t size);
  257839             : 
  257840             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  257841           0 :           void operator delete (void* pointer)
  257842             :              {
  257843             :             // This is the generated delete operator...
  257844           0 :                SgLshiftAssignOp::operator delete (pointer,sizeof(SgLshiftAssignOp));
  257845             :              }
  257846             : 
  257847             :       /*! \brief Returns the total number of IR nodes of this type */
  257848             :           static size_t numberOfNodes();
  257849             : 
  257850             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  257851             :           static size_t memoryUsage();
  257852             : 
  257853             :       // End of scope which started in IR nodes specific code 
  257854             :       /* */
  257855             : 
  257856             :       /* name Internal Functions
  257857             :           \brief Internal functions ... incomplete-documentation
  257858             : 
  257859             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257860             :           or by particularly knowledgeable users for specialized tools or applications.
  257861             : 
  257862             :           \internal We could not make these private because they are required by user for special purposes. And 
  257863             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  257864             :          
  257865             :        */
  257866             : 
  257867             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  257868             :        // overridden in every class by *generated* implementation
  257869             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  257870             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  257871             :        // MS: 06/28/02 container of names of variables or container indices 
  257872             :        // used used in the traversal to access AST successor nodes
  257873             :        // overridden in every class by *generated* implementation
  257874             :       /*! \brief container of names of variables or container indices used used in the traversal
  257875             :           to access AST successor nodes overridden in every class by *generated* implementation */
  257876             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  257877             : 
  257878             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  257879             :        // than all the vector copies. The implementation for these functions is generated for each class.
  257880             :       /*! \brief return number of children in the traversal successor list */
  257881             :           virtual size_t get_numberOfTraversalSuccessors() override;
  257882             :       /*! \brief index-based access to traversal successors by index number */
  257883             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  257884             :       /*! \brief index-based access to traversal successors by child node */
  257885             :           virtual size_t get_childIndex(SgNode *child) override;
  257886             : 
  257887             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  257888             :        // MS: 08/16/2002 method for generating RTI information
  257889             :       /*! \brief return C++ Runtime-Time-Information */
  257890             :           virtual RTIReturnType roseRTI() override;
  257891             : #endif
  257892             :       /* */
  257893             : 
  257894             : 
  257895             : 
  257896             :       /* name Deprecated Functions
  257897             :           \brief Deprecated functions ... incomplete-documentation
  257898             : 
  257899             :           These functions have been deprecated from use.
  257900             :        */
  257901             :       /* */
  257902             : 
  257903             :       /*! returns a C style string (char*) representing the class name */
  257904             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  257905             : 
  257906             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  257907             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  257908             : #if 0
  257909             :       /*! returns old style Sage II enum values */
  257910             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  257911             :       /*! returns old style Sage II enum values */
  257912             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  257913             : #endif
  257914             :       /* */
  257915             : 
  257916             : 
  257917             : 
  257918             : 
  257919             :      public:
  257920             :       /* name Traversal Support Functions
  257921             :           \brief Traversal support functions ... incomplete-documentation
  257922             : 
  257923             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257924             :           or by particularly knowledgable users for specialized tools or applications.
  257925             :        */
  257926             :       /* */
  257927             : 
  257928             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  257929             :        // (inferior to ROSE traversal mechanism, experimental).
  257930             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  257931             :        */
  257932             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  257933             : 
  257934             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  257935             :       /*! \brief support for the classic visitor pattern done in GoF */
  257936             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  257937             : 
  257938             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  257939             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  257940             :        */
  257941             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  257942             : 
  257943             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  257944             :        */
  257945             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  257946             : 
  257947             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  257948             :        // This traversal helps support internal tools that call static member functions.
  257949             :        // note: this function operates on the memory pools.
  257950             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  257951             :        */
  257952             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  257953             :       /* */
  257954             : 
  257955             : 
  257956             :      public:
  257957             :       /* name Memory Allocation Functions
  257958             :           \brief Memory allocations functions ... incomplete-documentation
  257959             : 
  257960             :           These functions have been made public as part of the design, but they are suggested for internal use 
  257961             :           or by particularly knowledgable users for specialized tools or applications.
  257962             :        */
  257963             :       /* */
  257964             : 
  257965             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  257966             : 
  257967             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  257968             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  257969             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  257970             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  257971             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  257972             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  257973             :           being used with the AST File I/O mechanism.
  257974             :        */
  257975             :           virtual bool isInMemoryPool() override;
  257976             : 
  257977             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  257978             : 
  257979             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  257980             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  257981             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  257982             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  257983             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  257984             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  257985             :           being used with the AST File I/O mechanism.
  257986             :        */
  257987             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  257988             : 
  257989             :       // DQ (4/30/2006): Modified to be a const function.
  257990             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  257991             : 
  257992             :           This functions is part of general support for many possible tools to operate 
  257993             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  257994             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  257995             :           less than the set of pointers used by the AST file I/O. This is part of
  257996             :           work implemented by Andreas, and support tools such as the AST graph generation.
  257997             : 
  257998             :           \warning This function can return unexpected data members and thus the 
  257999             :                    order and the number of elements is unpredicable and subject 
  258000             :                    to change.
  258001             : 
  258002             :           \returns STL vector of pairs of SgNode* and strings
  258003             :        */
  258004             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  258005             : 
  258006             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  258007             : 
  258008             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  258009             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  258010             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  258011             : 
  258012             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  258013             :                    and subject to change.
  258014             :        */
  258015             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  258016             : 
  258017             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  258018             : 
  258019             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  258020             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  258021             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  258022             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  258023             : 
  258024             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  258025             : 
  258026             :           \returns long
  258027             :        */
  258028             :           virtual long getChildIndex( SgNode* childNode ) const override;
  258029             : 
  258030             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  258031             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258032             :       /* \brief Constructor for use by AST File I/O Mechanism
  258033             : 
  258034             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  258035             :           which obtained via fast binary file I/O from disk.
  258036             :        */
  258037             :        // SgLshiftAssignOp( SgLshiftAssignOpStorageClass& source );
  258038             : 
  258039             : 
  258040             : 
  258041             : 
  258042             : 
  258043             :  // JH (10/24/2005): methods added to support the ast file IO
  258044             :     private:
  258045             : 
  258046             :       /* name AST Memory Allocation Support Functions
  258047             :           \brief Memory allocations support....
  258048             : 
  258049             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  258050             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  258051             :           and support the AST File I/O Mechanism.
  258052             :        */
  258053             :       /* */
  258054             : 
  258055             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  258056             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  258057             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  258058             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  258059             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  258060             :           a correspinding one in the AST_FILE_IO class!
  258061             :        */
  258062             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  258063             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258064             :       /* \brief Typedef used for low level memory access.
  258065             :        */
  258066             :        // typedef unsigned char* TestType;
  258067             : 
  258068             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  258069             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258070             :       /* \brief Typedef used to hold memory addresses as values.
  258071             :        */
  258072             :        // typedef unsigned long  AddressType;
  258073             : 
  258074             : 
  258075             : 
  258076             :        // necessary, to have direct access to the p_freepointer and the private methods !
  258077             :       /*! \brief friend class declaration to support AST File I/O */
  258078             :           friend class AST_FILE_IO;
  258079             : 
  258080             :       /*! \brief friend class declaration to support AST File I/O */
  258081             :           friend class SgLshiftAssignOpStorageClass;
  258082             : 
  258083             :       /*! \brief friend class declaration to support AST File I/O */
  258084             :           friend class AstSpecificDataManagingClass;
  258085             : 
  258086             :       /*! \brief friend class declaration to support AST File I/O */
  258087             :           friend class AstSpecificDataManagingClassStorageClass;
  258088             :     public:
  258089             :       /*! \brief IR node constructor to support AST File I/O */
  258090             :           SgLshiftAssignOp( const SgLshiftAssignOpStorageClass& source );
  258091             : 
  258092             :  // private: // JJW hack
  258093             :        /*
  258094             :           name AST Memory Allocation Support Variables
  258095             :           Memory allocations support variables 
  258096             : 
  258097             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  258098             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  258099             :           and support the AST File I/O Mechanism.
  258100             :        */
  258101             :       /* */
  258102             : 
  258103             :     public:
  258104             : 
  258105             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  258106             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  258107             :       // virtual SgNode* addRegExpAttribute();
  258108             :       /*! \brief Support for AST matching using regular expression.
  258109             : 
  258110             :           This support is incomplete and the subject of current research to define 
  258111             :           RegEx trees to support inexact matching.
  258112             :        */
  258113             :           SgLshiftAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  258114             : 
  258115             : // *** COMMON CODE SECTION ENDS HERE ***
  258116             : 
  258117             : 
  258118             : // End of memberFunctionString
  258119             : // Start of memberFunctionString
  258120             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  258121             : 
  258122             :      // the generated cast function
  258123             :      // friend ROSE_DLL_API SgLshiftAssignOp* isSgLshiftAssignOp ( SgNode* s );
  258124             : 
  258125             :           typedef SgCompoundAssignOp base_node_type;
  258126             : 
  258127             : 
  258128             : // End of memberFunctionString
  258129             : // Start of memberFunctionString
  258130             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  258131             : 
  258132             :           void post_construction_initialization() override;
  258133             : 
  258134             : 
  258135             : // End of memberFunctionString
  258136             : // Start of memberFunctionString
  258137             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  258138             : 
  258139           0 :           int precedence() const override { return  2; }
  258140             : 
  258141             : 
  258142             : // End of memberFunctionString
  258143             : 
  258144             : 
  258145             :      public: 
  258146             :          virtual ~SgLshiftAssignOp();
  258147             : 
  258148             : 
  258149             :      public: 
  258150             :          SgLshiftAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  258151             :          SgLshiftAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  258152             : 
  258153             :     protected:
  258154             : 
  258155             :     friend struct Rose::Traits::generated::describe_node_t<SgLshiftAssignOp>;
  258156             : 
  258157             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258158             : 
  258159             : 
  258160             :    };
  258161             : #endif
  258162             : 
  258163             : // postdeclarations for SgLshiftAssignOp
  258164             : 
  258165             : /* #line 258166 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258166             : 
  258167             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  258168             : 
  258169             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258170             : 
  258171             : 
  258172             : /* #line 258173 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258173             : 
  258174             : 
  258175             : 
  258176             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258177             : 
  258178             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  258179             : //      This code is automatically generated for each 
  258180             : //      terminal and non-terminal within the defined 
  258181             : //      grammar.  There is a simple way to change the 
  258182             : //      code to fix bugs etc.  See the ROSE README file
  258183             : //      for directions.
  258184             : 
  258185             : // tps: (02/22/2010): Adding DLL export requirements
  258186             : #include "rosedll.h"
  258187             : 
  258188             : // predeclarations for SgRshiftAssignOp
  258189             : 
  258190             : /* #line 258191 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258191             : 
  258192             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  258193             : 
  258194             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258195             : 
  258196             : #if 1
  258197             : // Class Definition for SgRshiftAssignOp
  258198             : class ROSE_DLL_API SgRshiftAssignOp  : public SgCompoundAssignOp
  258199             :    {
  258200             :      public:
  258201             : 
  258202             : 
  258203             : /* #line 258204 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258204             : 
  258205             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  258206             : // Start of memberFunctionString
  258207             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  258208             : 
  258209             : // *** COMMON CODE SECTION BEGINS HERE ***
  258210             : 
  258211             :     public:
  258212             : 
  258213             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  258214             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  258215             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  258216             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  258217             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  258218             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  258219             : 
  258220             :       /*! \brief returns a string representing the class name */
  258221             :           virtual std::string class_name() const override;
  258222             : 
  258223             :       /*! \brief returns new style SageIII enum values */
  258224             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  258225             : 
  258226             :       /*! \brief static variant value */
  258227             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  258228             :        // static const VariantT static_variant = V_SgRshiftAssignOp;
  258229             :           enum { static_variant = V_SgRshiftAssignOp };
  258230             : 
  258231             :        /* the generated cast function */
  258232             :       /*! \brief Casts pointer from base class to derived class */
  258233             :           ROSE_DLL_API friend       SgRshiftAssignOp* isSgRshiftAssignOp(       SgNode * s );
  258234             : 
  258235             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  258236             :           ROSE_DLL_API friend const SgRshiftAssignOp* isSgRshiftAssignOp( const SgNode * s );
  258237             : 
  258238             :      // ******************************************
  258239             :      // * Memory Pool / New / Delete
  258240             :      // ******************************************
  258241             : 
  258242             :      public:
  258243             :           /// \private
  258244             :           static const unsigned pool_size; //
  258245             :           /// \private
  258246             :           static std::vector<unsigned char *> pools; //
  258247             :           /// \private
  258248             :           static SgRshiftAssignOp * next_node; // 
  258249             : 
  258250             :           /// \private
  258251             :           static unsigned long initializeStorageClassArray(SgRshiftAssignOpStorageClass *); //
  258252             : 
  258253             :           /// \private
  258254             :           static void clearMemoryPool(); //
  258255             :           static void deleteMemoryPool(); //
  258256             : 
  258257             :           /// \private
  258258             :           static void extendMemoryPoolForFileIO(); //
  258259             : 
  258260             :           /// \private
  258261             :           static SgRshiftAssignOp * getPointerFromGlobalIndex(unsigned long); //
  258262             :           /// \private
  258263             :           static SgRshiftAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  258264             : 
  258265             :           /// \private
  258266             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  258267             :           /// \private
  258268             :           static void resetValidFreepointers(); //
  258269             :           /// \private
  258270             :           static unsigned long getNumberOfLastValidPointer(); //
  258271             : 
  258272             : 
  258273             : #if defined(INLINE_FUNCTIONS)
  258274             :       /*! \brief returns pointer to newly allocated IR node */
  258275             :           inline void *operator new (size_t size);
  258276             : #else
  258277             :       /*! \brief returns pointer to newly allocated IR node */
  258278             :           void *operator new (size_t size);
  258279             : #endif
  258280             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  258281             :           void operator delete (void* pointer, size_t size);
  258282             : 
  258283             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  258284           4 :           void operator delete (void* pointer)
  258285             :              {
  258286             :             // This is the generated delete operator...
  258287           4 :                SgRshiftAssignOp::operator delete (pointer,sizeof(SgRshiftAssignOp));
  258288             :              }
  258289             : 
  258290             :       /*! \brief Returns the total number of IR nodes of this type */
  258291             :           static size_t numberOfNodes();
  258292             : 
  258293             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  258294             :           static size_t memoryUsage();
  258295             : 
  258296             :       // End of scope which started in IR nodes specific code 
  258297             :       /* */
  258298             : 
  258299             :       /* name Internal Functions
  258300             :           \brief Internal functions ... incomplete-documentation
  258301             : 
  258302             :           These functions have been made public as part of the design, but they are suggested for internal use 
  258303             :           or by particularly knowledgeable users for specialized tools or applications.
  258304             : 
  258305             :           \internal We could not make these private because they are required by user for special purposes. And 
  258306             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  258307             :          
  258308             :        */
  258309             : 
  258310             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  258311             :        // overridden in every class by *generated* implementation
  258312             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  258313             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  258314             :        // MS: 06/28/02 container of names of variables or container indices 
  258315             :        // used used in the traversal to access AST successor nodes
  258316             :        // overridden in every class by *generated* implementation
  258317             :       /*! \brief container of names of variables or container indices used used in the traversal
  258318             :           to access AST successor nodes overridden in every class by *generated* implementation */
  258319             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  258320             : 
  258321             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  258322             :        // than all the vector copies. The implementation for these functions is generated for each class.
  258323             :       /*! \brief return number of children in the traversal successor list */
  258324             :           virtual size_t get_numberOfTraversalSuccessors() override;
  258325             :       /*! \brief index-based access to traversal successors by index number */
  258326             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  258327             :       /*! \brief index-based access to traversal successors by child node */
  258328             :           virtual size_t get_childIndex(SgNode *child) override;
  258329             : 
  258330             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  258331             :        // MS: 08/16/2002 method for generating RTI information
  258332             :       /*! \brief return C++ Runtime-Time-Information */
  258333             :           virtual RTIReturnType roseRTI() override;
  258334             : #endif
  258335             :       /* */
  258336             : 
  258337             : 
  258338             : 
  258339             :       /* name Deprecated Functions
  258340             :           \brief Deprecated functions ... incomplete-documentation
  258341             : 
  258342             :           These functions have been deprecated from use.
  258343             :        */
  258344             :       /* */
  258345             : 
  258346             :       /*! returns a C style string (char*) representing the class name */
  258347             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  258348             : 
  258349             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  258350             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  258351             : #if 0
  258352             :       /*! returns old style Sage II enum values */
  258353             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  258354             :       /*! returns old style Sage II enum values */
  258355             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  258356             : #endif
  258357             :       /* */
  258358             : 
  258359             : 
  258360             : 
  258361             : 
  258362             :      public:
  258363             :       /* name Traversal Support Functions
  258364             :           \brief Traversal support functions ... incomplete-documentation
  258365             : 
  258366             :           These functions have been made public as part of the design, but they are suggested for internal use 
  258367             :           or by particularly knowledgable users for specialized tools or applications.
  258368             :        */
  258369             :       /* */
  258370             : 
  258371             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  258372             :        // (inferior to ROSE traversal mechanism, experimental).
  258373             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  258374             :        */
  258375             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  258376             : 
  258377             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  258378             :       /*! \brief support for the classic visitor pattern done in GoF */
  258379             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  258380             : 
  258381             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  258382             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  258383             :        */
  258384             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  258385             : 
  258386             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  258387             :        */
  258388             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  258389             : 
  258390             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  258391             :        // This traversal helps support internal tools that call static member functions.
  258392             :        // note: this function operates on the memory pools.
  258393             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  258394             :        */
  258395             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  258396             :       /* */
  258397             : 
  258398             : 
  258399             :      public:
  258400             :       /* name Memory Allocation Functions
  258401             :           \brief Memory allocations functions ... incomplete-documentation
  258402             : 
  258403             :           These functions have been made public as part of the design, but they are suggested for internal use 
  258404             :           or by particularly knowledgable users for specialized tools or applications.
  258405             :        */
  258406             :       /* */
  258407             : 
  258408             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  258409             : 
  258410             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  258411             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  258412             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  258413             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  258414             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  258415             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  258416             :           being used with the AST File I/O mechanism.
  258417             :        */
  258418             :           virtual bool isInMemoryPool() override;
  258419             : 
  258420             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  258421             : 
  258422             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  258423             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  258424             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  258425             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  258426             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  258427             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  258428             :           being used with the AST File I/O mechanism.
  258429             :        */
  258430             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  258431             : 
  258432             :       // DQ (4/30/2006): Modified to be a const function.
  258433             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  258434             : 
  258435             :           This functions is part of general support for many possible tools to operate 
  258436             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  258437             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  258438             :           less than the set of pointers used by the AST file I/O. This is part of
  258439             :           work implemented by Andreas, and support tools such as the AST graph generation.
  258440             : 
  258441             :           \warning This function can return unexpected data members and thus the 
  258442             :                    order and the number of elements is unpredicable and subject 
  258443             :                    to change.
  258444             : 
  258445             :           \returns STL vector of pairs of SgNode* and strings
  258446             :        */
  258447             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  258448             : 
  258449             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  258450             : 
  258451             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  258452             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  258453             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  258454             : 
  258455             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  258456             :                    and subject to change.
  258457             :        */
  258458             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  258459             : 
  258460             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  258461             : 
  258462             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  258463             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  258464             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  258465             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  258466             : 
  258467             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  258468             : 
  258469             :           \returns long
  258470             :        */
  258471             :           virtual long getChildIndex( SgNode* childNode ) const override;
  258472             : 
  258473             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  258474             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258475             :       /* \brief Constructor for use by AST File I/O Mechanism
  258476             : 
  258477             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  258478             :           which obtained via fast binary file I/O from disk.
  258479             :        */
  258480             :        // SgRshiftAssignOp( SgRshiftAssignOpStorageClass& source );
  258481             : 
  258482             : 
  258483             : 
  258484             : 
  258485             : 
  258486             :  // JH (10/24/2005): methods added to support the ast file IO
  258487             :     private:
  258488             : 
  258489             :       /* name AST Memory Allocation Support Functions
  258490             :           \brief Memory allocations support....
  258491             : 
  258492             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  258493             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  258494             :           and support the AST File I/O Mechanism.
  258495             :        */
  258496             :       /* */
  258497             : 
  258498             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  258499             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  258500             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  258501             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  258502             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  258503             :           a correspinding one in the AST_FILE_IO class!
  258504             :        */
  258505             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  258506             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258507             :       /* \brief Typedef used for low level memory access.
  258508             :        */
  258509             :        // typedef unsigned char* TestType;
  258510             : 
  258511             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  258512             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258513             :       /* \brief Typedef used to hold memory addresses as values.
  258514             :        */
  258515             :        // typedef unsigned long  AddressType;
  258516             : 
  258517             : 
  258518             : 
  258519             :        // necessary, to have direct access to the p_freepointer and the private methods !
  258520             :       /*! \brief friend class declaration to support AST File I/O */
  258521             :           friend class AST_FILE_IO;
  258522             : 
  258523             :       /*! \brief friend class declaration to support AST File I/O */
  258524             :           friend class SgRshiftAssignOpStorageClass;
  258525             : 
  258526             :       /*! \brief friend class declaration to support AST File I/O */
  258527             :           friend class AstSpecificDataManagingClass;
  258528             : 
  258529             :       /*! \brief friend class declaration to support AST File I/O */
  258530             :           friend class AstSpecificDataManagingClassStorageClass;
  258531             :     public:
  258532             :       /*! \brief IR node constructor to support AST File I/O */
  258533             :           SgRshiftAssignOp( const SgRshiftAssignOpStorageClass& source );
  258534             : 
  258535             :  // private: // JJW hack
  258536             :        /*
  258537             :           name AST Memory Allocation Support Variables
  258538             :           Memory allocations support variables 
  258539             : 
  258540             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  258541             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  258542             :           and support the AST File I/O Mechanism.
  258543             :        */
  258544             :       /* */
  258545             : 
  258546             :     public:
  258547             : 
  258548             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  258549             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  258550             :       // virtual SgNode* addRegExpAttribute();
  258551             :       /*! \brief Support for AST matching using regular expression.
  258552             : 
  258553             :           This support is incomplete and the subject of current research to define 
  258554             :           RegEx trees to support inexact matching.
  258555             :        */
  258556             :           SgRshiftAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  258557             : 
  258558             : // *** COMMON CODE SECTION ENDS HERE ***
  258559             : 
  258560             : 
  258561             : // End of memberFunctionString
  258562             : // Start of memberFunctionString
  258563             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  258564             : 
  258565             :      // the generated cast function
  258566             :      // friend ROSE_DLL_API SgRshiftAssignOp* isSgRshiftAssignOp ( SgNode* s );
  258567             : 
  258568             :           typedef SgCompoundAssignOp base_node_type;
  258569             : 
  258570             : 
  258571             : // End of memberFunctionString
  258572             : // Start of memberFunctionString
  258573             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  258574             : 
  258575             :           void post_construction_initialization() override;
  258576             : 
  258577             : 
  258578             : // End of memberFunctionString
  258579             : // Start of memberFunctionString
  258580             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  258581             : 
  258582           0 :           int precedence() const override { return  2; }
  258583             : 
  258584             : 
  258585             : // End of memberFunctionString
  258586             : 
  258587             : 
  258588             :      public: 
  258589             :          virtual ~SgRshiftAssignOp();
  258590             : 
  258591             : 
  258592             :      public: 
  258593             :          SgRshiftAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  258594             :          SgRshiftAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  258595             : 
  258596             :     protected:
  258597             : 
  258598             :     friend struct Rose::Traits::generated::describe_node_t<SgRshiftAssignOp>;
  258599             : 
  258600             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258601             : 
  258602             : 
  258603             :    };
  258604             : #endif
  258605             : 
  258606             : // postdeclarations for SgRshiftAssignOp
  258607             : 
  258608             : /* #line 258609 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258609             : 
  258610             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  258611             : 
  258612             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258613             : 
  258614             : 
  258615             : /* #line 258616 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258616             : 
  258617             : 
  258618             : 
  258619             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258620             : 
  258621             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  258622             : //      This code is automatically generated for each 
  258623             : //      terminal and non-terminal within the defined 
  258624             : //      grammar.  There is a simple way to change the 
  258625             : //      code to fix bugs etc.  See the ROSE README file
  258626             : //      for directions.
  258627             : 
  258628             : // tps: (02/22/2010): Adding DLL export requirements
  258629             : #include "rosedll.h"
  258630             : 
  258631             : // predeclarations for SgIntegerDivideAssignOp
  258632             : 
  258633             : /* #line 258634 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258634             : 
  258635             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  258636             : 
  258637             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  258638             : 
  258639             : #if 1
  258640             : // Class Definition for SgIntegerDivideAssignOp
  258641             : class ROSE_DLL_API SgIntegerDivideAssignOp  : public SgCompoundAssignOp
  258642             :    {
  258643             :      public:
  258644             : 
  258645             : 
  258646             : /* #line 258647 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  258647             : 
  258648             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  258649             : // Start of memberFunctionString
  258650             : /* #line 1442 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  258651             : 
  258652             : 
  258653             : 
  258654             : // End of memberFunctionString
  258655             : // Start of memberFunctionString
  258656             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  258657             : 
  258658             : // *** COMMON CODE SECTION BEGINS HERE ***
  258659             : 
  258660             :     public:
  258661             : 
  258662             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  258663             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  258664             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  258665             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  258666             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  258667             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  258668             : 
  258669             :       /*! \brief returns a string representing the class name */
  258670             :           virtual std::string class_name() const override;
  258671             : 
  258672             :       /*! \brief returns new style SageIII enum values */
  258673             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  258674             : 
  258675             :       /*! \brief static variant value */
  258676             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  258677             :        // static const VariantT static_variant = V_SgIntegerDivideAssignOp;
  258678             :           enum { static_variant = V_SgIntegerDivideAssignOp };
  258679             : 
  258680             :        /* the generated cast function */
  258681             :       /*! \brief Casts pointer from base class to derived class */
  258682             :           ROSE_DLL_API friend       SgIntegerDivideAssignOp* isSgIntegerDivideAssignOp(       SgNode * s );
  258683             : 
  258684             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  258685             :           ROSE_DLL_API friend const SgIntegerDivideAssignOp* isSgIntegerDivideAssignOp( const SgNode * s );
  258686             : 
  258687             :      // ******************************************
  258688             :      // * Memory Pool / New / Delete
  258689             :      // ******************************************
  258690             : 
  258691             :      public:
  258692             :           /// \private
  258693             :           static const unsigned pool_size; //
  258694             :           /// \private
  258695             :           static std::vector<unsigned char *> pools; //
  258696             :           /// \private
  258697             :           static SgIntegerDivideAssignOp * next_node; // 
  258698             : 
  258699             :           /// \private
  258700             :           static unsigned long initializeStorageClassArray(SgIntegerDivideAssignOpStorageClass *); //
  258701             : 
  258702             :           /// \private
  258703             :           static void clearMemoryPool(); //
  258704             :           static void deleteMemoryPool(); //
  258705             : 
  258706             :           /// \private
  258707             :           static void extendMemoryPoolForFileIO(); //
  258708             : 
  258709             :           /// \private
  258710             :           static SgIntegerDivideAssignOp * getPointerFromGlobalIndex(unsigned long); //
  258711             :           /// \private
  258712             :           static SgIntegerDivideAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  258713             : 
  258714             :           /// \private
  258715             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  258716             :           /// \private
  258717             :           static void resetValidFreepointers(); //
  258718             :           /// \private
  258719             :           static unsigned long getNumberOfLastValidPointer(); //
  258720             : 
  258721             : 
  258722             : #if defined(INLINE_FUNCTIONS)
  258723             :       /*! \brief returns pointer to newly allocated IR node */
  258724             :           inline void *operator new (size_t size);
  258725             : #else
  258726             :       /*! \brief returns pointer to newly allocated IR node */
  258727             :           void *operator new (size_t size);
  258728             : #endif
  258729             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  258730             :           void operator delete (void* pointer, size_t size);
  258731             : 
  258732             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  258733           0 :           void operator delete (void* pointer)
  258734             :              {
  258735             :             // This is the generated delete operator...
  258736           0 :                SgIntegerDivideAssignOp::operator delete (pointer,sizeof(SgIntegerDivideAssignOp));
  258737             :              }
  258738             : 
  258739             :       /*! \brief Returns the total number of IR nodes of this type */
  258740             :           static size_t numberOfNodes();
  258741             : 
  258742             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  258743             :           static size_t memoryUsage();
  258744             : 
  258745             :       // End of scope which started in IR nodes specific code 
  258746             :       /* */
  258747             : 
  258748             :       /* name Internal Functions
  258749             :           \brief Internal functions ... incomplete-documentation
  258750             : 
  258751             :           These functions have been made public as part of the design, but they are suggested for internal use 
  258752             :           or by particularly knowledgeable users for specialized tools or applications.
  258753             : 
  258754             :           \internal We could not make these private because they are required by user for special purposes. And 
  258755             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  258756             :          
  258757             :        */
  258758             : 
  258759             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  258760             :        // overridden in every class by *generated* implementation
  258761             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  258762             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  258763             :        // MS: 06/28/02 container of names of variables or container indices 
  258764             :        // used used in the traversal to access AST successor nodes
  258765             :        // overridden in every class by *generated* implementation
  258766             :       /*! \brief container of names of variables or container indices used used in the traversal
  258767             :           to access AST successor nodes overridden in every class by *generated* implementation */
  258768             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  258769             : 
  258770             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  258771             :        // than all the vector copies. The implementation for these functions is generated for each class.
  258772             :       /*! \brief return number of children in the traversal successor list */
  258773             :           virtual size_t get_numberOfTraversalSuccessors() override;
  258774             :       /*! \brief index-based access to traversal successors by index number */
  258775             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  258776             :       /*! \brief index-based access to traversal successors by child node */
  258777             :           virtual size_t get_childIndex(SgNode *child) override;
  258778             : 
  258779             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  258780             :        // MS: 08/16/2002 method for generating RTI information
  258781             :       /*! \brief return C++ Runtime-Time-Information */
  258782             :           virtual RTIReturnType roseRTI() override;
  258783             : #endif
  258784             :       /* */
  258785             : 
  258786             : 
  258787             : 
  258788             :       /* name Deprecated Functions
  258789             :           \brief Deprecated functions ... incomplete-documentation
  258790             : 
  258791             :           These functions have been deprecated from use.
  258792             :        */
  258793             :       /* */
  258794             : 
  258795             :       /*! returns a C style string (char*) representing the class name */
  258796             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  258797             : 
  258798             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  258799             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  258800             : #if 0
  258801             :       /*! returns old style Sage II enum values */
  258802             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  258803             :       /*! returns old style Sage II enum values */
  258804             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  258805             : #endif
  258806             :       /* */
  258807             : 
  258808             : 
  258809             : 
  258810             : 
  258811             :      public:
  258812             :       /* name Traversal Support Functions
  258813             :           \brief Traversal support functions ... incomplete-documentation
  258814             : 
  258815             :           These functions have been made public as part of the design, but they are suggested for internal use 
  258816             :           or by particularly knowledgable users for specialized tools or applications.
  258817             :        */
  258818             :       /* */
  258819             : 
  258820             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  258821             :        // (inferior to ROSE traversal mechanism, experimental).
  258822             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  258823             :        */
  258824             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  258825             : 
  258826             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  258827             :       /*! \brief support for the classic visitor pattern done in GoF */
  258828             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  258829             : 
  258830             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  258831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  258832             :        */
  258833             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  258834             : 
  258835             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  258836             :        */
  258837             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  258838             : 
  258839             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  258840             :        // This traversal helps support internal tools that call static member functions.
  258841             :        // note: this function operates on the memory pools.
  258842             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  258843             :        */
  258844             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  258845             :       /* */
  258846             : 
  258847             : 
  258848             :      public:
  258849             :       /* name Memory Allocation Functions
  258850             :           \brief Memory allocations functions ... incomplete-documentation
  258851             : 
  258852             :           These functions have been made public as part of the design, but they are suggested for internal use 
  258853             :           or by particularly knowledgable users for specialized tools or applications.
  258854             :        */
  258855             :       /* */
  258856             : 
  258857             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  258858             : 
  258859             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  258860             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  258861             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  258862             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  258863             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  258864             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  258865             :           being used with the AST File I/O mechanism.
  258866             :        */
  258867             :           virtual bool isInMemoryPool() override;
  258868             : 
  258869             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  258870             : 
  258871             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  258872             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  258873             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  258874             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  258875             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  258876             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  258877             :           being used with the AST File I/O mechanism.
  258878             :        */
  258879             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  258880             : 
  258881             :       // DQ (4/30/2006): Modified to be a const function.
  258882             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  258883             : 
  258884             :           This functions is part of general support for many possible tools to operate 
  258885             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  258886             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  258887             :           less than the set of pointers used by the AST file I/O. This is part of
  258888             :           work implemented by Andreas, and support tools such as the AST graph generation.
  258889             : 
  258890             :           \warning This function can return unexpected data members and thus the 
  258891             :                    order and the number of elements is unpredicable and subject 
  258892             :                    to change.
  258893             : 
  258894             :           \returns STL vector of pairs of SgNode* and strings
  258895             :        */
  258896             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  258897             : 
  258898             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  258899             : 
  258900             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  258901             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  258902             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  258903             : 
  258904             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  258905             :                    and subject to change.
  258906             :        */
  258907             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  258908             : 
  258909             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  258910             : 
  258911             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  258912             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  258913             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  258914             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  258915             : 
  258916             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  258917             : 
  258918             :           \returns long
  258919             :        */
  258920             :           virtual long getChildIndex( SgNode* childNode ) const override;
  258921             : 
  258922             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  258923             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258924             :       /* \brief Constructor for use by AST File I/O Mechanism
  258925             : 
  258926             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  258927             :           which obtained via fast binary file I/O from disk.
  258928             :        */
  258929             :        // SgIntegerDivideAssignOp( SgIntegerDivideAssignOpStorageClass& source );
  258930             : 
  258931             : 
  258932             : 
  258933             : 
  258934             : 
  258935             :  // JH (10/24/2005): methods added to support the ast file IO
  258936             :     private:
  258937             : 
  258938             :       /* name AST Memory Allocation Support Functions
  258939             :           \brief Memory allocations support....
  258940             : 
  258941             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  258942             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  258943             :           and support the AST File I/O Mechanism.
  258944             :        */
  258945             :       /* */
  258946             : 
  258947             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  258948             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  258949             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  258950             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  258951             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  258952             :           a correspinding one in the AST_FILE_IO class!
  258953             :        */
  258954             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  258955             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258956             :       /* \brief Typedef used for low level memory access.
  258957             :        */
  258958             :        // typedef unsigned char* TestType;
  258959             : 
  258960             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  258961             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  258962             :       /* \brief Typedef used to hold memory addresses as values.
  258963             :        */
  258964             :        // typedef unsigned long  AddressType;
  258965             : 
  258966             : 
  258967             : 
  258968             :        // necessary, to have direct access to the p_freepointer and the private methods !
  258969             :       /*! \brief friend class declaration to support AST File I/O */
  258970             :           friend class AST_FILE_IO;
  258971             : 
  258972             :       /*! \brief friend class declaration to support AST File I/O */
  258973             :           friend class SgIntegerDivideAssignOpStorageClass;
  258974             : 
  258975             :       /*! \brief friend class declaration to support AST File I/O */
  258976             :           friend class AstSpecificDataManagingClass;
  258977             : 
  258978             :       /*! \brief friend class declaration to support AST File I/O */
  258979             :           friend class AstSpecificDataManagingClassStorageClass;
  258980             :     public:
  258981             :       /*! \brief IR node constructor to support AST File I/O */
  258982             :           SgIntegerDivideAssignOp( const SgIntegerDivideAssignOpStorageClass& source );
  258983             : 
  258984             :  // private: // JJW hack
  258985             :        /*
  258986             :           name AST Memory Allocation Support Variables
  258987             :           Memory allocations support variables 
  258988             : 
  258989             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  258990             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  258991             :           and support the AST File I/O Mechanism.
  258992             :        */
  258993             :       /* */
  258994             : 
  258995             :     public:
  258996             : 
  258997             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  258998             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  258999             :       // virtual SgNode* addRegExpAttribute();
  259000             :       /*! \brief Support for AST matching using regular expression.
  259001             : 
  259002             :           This support is incomplete and the subject of current research to define 
  259003             :           RegEx trees to support inexact matching.
  259004             :        */
  259005             :           SgIntegerDivideAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  259006             : 
  259007             : // *** COMMON CODE SECTION ENDS HERE ***
  259008             : 
  259009             : 
  259010             : // End of memberFunctionString
  259011             : // Start of memberFunctionString
  259012             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  259013             : 
  259014             :      // the generated cast function
  259015             :      // friend ROSE_DLL_API SgIntegerDivideAssignOp* isSgIntegerDivideAssignOp ( SgNode* s );
  259016             : 
  259017             :           typedef SgCompoundAssignOp base_node_type;
  259018             : 
  259019             : 
  259020             : // End of memberFunctionString
  259021             : // Start of memberFunctionString
  259022             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259023             : 
  259024             :           void post_construction_initialization() override;
  259025             : 
  259026             : 
  259027             : // End of memberFunctionString
  259028             : // Start of memberFunctionString
  259029             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259030             : 
  259031           0 :           int precedence() const override { return  2; }
  259032             : 
  259033             : 
  259034             : // End of memberFunctionString
  259035             : 
  259036             : 
  259037             :      public: 
  259038             :          virtual ~SgIntegerDivideAssignOp();
  259039             : 
  259040             : 
  259041             :      public: 
  259042             :          SgIntegerDivideAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  259043             :          SgIntegerDivideAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  259044             : 
  259045             :     protected:
  259046             : 
  259047             :     friend struct Rose::Traits::generated::describe_node_t<SgIntegerDivideAssignOp>;
  259048             : 
  259049             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259050             : 
  259051             : 
  259052             :    };
  259053             : #endif
  259054             : 
  259055             : // postdeclarations for SgIntegerDivideAssignOp
  259056             : 
  259057             : /* #line 259058 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259058             : 
  259059             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  259060             : 
  259061             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259062             : 
  259063             : 
  259064             : /* #line 259065 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259065             : 
  259066             : 
  259067             : 
  259068             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259069             : 
  259070             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  259071             : //      This code is automatically generated for each 
  259072             : //      terminal and non-terminal within the defined 
  259073             : //      grammar.  There is a simple way to change the 
  259074             : //      code to fix bugs etc.  See the ROSE README file
  259075             : //      for directions.
  259076             : 
  259077             : // tps: (02/22/2010): Adding DLL export requirements
  259078             : #include "rosedll.h"
  259079             : 
  259080             : // predeclarations for SgExponentiationAssignOp
  259081             : 
  259082             : /* #line 259083 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259083             : 
  259084             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  259085             : 
  259086             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259087             : 
  259088             : #if 1
  259089             : // Class Definition for SgExponentiationAssignOp
  259090             : class ROSE_DLL_API SgExponentiationAssignOp  : public SgCompoundAssignOp
  259091             :    {
  259092             :      public:
  259093             : 
  259094             : 
  259095             : /* #line 259096 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259096             : 
  259097             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  259098             : // Start of memberFunctionString
  259099             : /* #line 1445 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259100             : 
  259101             : 
  259102             : 
  259103             : // End of memberFunctionString
  259104             : // Start of memberFunctionString
  259105             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  259106             : 
  259107             : // *** COMMON CODE SECTION BEGINS HERE ***
  259108             : 
  259109             :     public:
  259110             : 
  259111             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  259112             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  259113             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  259114             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  259115             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  259116             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  259117             : 
  259118             :       /*! \brief returns a string representing the class name */
  259119             :           virtual std::string class_name() const override;
  259120             : 
  259121             :       /*! \brief returns new style SageIII enum values */
  259122             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  259123             : 
  259124             :       /*! \brief static variant value */
  259125             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  259126             :        // static const VariantT static_variant = V_SgExponentiationAssignOp;
  259127             :           enum { static_variant = V_SgExponentiationAssignOp };
  259128             : 
  259129             :        /* the generated cast function */
  259130             :       /*! \brief Casts pointer from base class to derived class */
  259131             :           ROSE_DLL_API friend       SgExponentiationAssignOp* isSgExponentiationAssignOp(       SgNode * s );
  259132             : 
  259133             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  259134             :           ROSE_DLL_API friend const SgExponentiationAssignOp* isSgExponentiationAssignOp( const SgNode * s );
  259135             : 
  259136             :      // ******************************************
  259137             :      // * Memory Pool / New / Delete
  259138             :      // ******************************************
  259139             : 
  259140             :      public:
  259141             :           /// \private
  259142             :           static const unsigned pool_size; //
  259143             :           /// \private
  259144             :           static std::vector<unsigned char *> pools; //
  259145             :           /// \private
  259146             :           static SgExponentiationAssignOp * next_node; // 
  259147             : 
  259148             :           /// \private
  259149             :           static unsigned long initializeStorageClassArray(SgExponentiationAssignOpStorageClass *); //
  259150             : 
  259151             :           /// \private
  259152             :           static void clearMemoryPool(); //
  259153             :           static void deleteMemoryPool(); //
  259154             : 
  259155             :           /// \private
  259156             :           static void extendMemoryPoolForFileIO(); //
  259157             : 
  259158             :           /// \private
  259159             :           static SgExponentiationAssignOp * getPointerFromGlobalIndex(unsigned long); //
  259160             :           /// \private
  259161             :           static SgExponentiationAssignOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  259162             : 
  259163             :           /// \private
  259164             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  259165             :           /// \private
  259166             :           static void resetValidFreepointers(); //
  259167             :           /// \private
  259168             :           static unsigned long getNumberOfLastValidPointer(); //
  259169             : 
  259170             : 
  259171             : #if defined(INLINE_FUNCTIONS)
  259172             :       /*! \brief returns pointer to newly allocated IR node */
  259173             :           inline void *operator new (size_t size);
  259174             : #else
  259175             :       /*! \brief returns pointer to newly allocated IR node */
  259176             :           void *operator new (size_t size);
  259177             : #endif
  259178             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  259179             :           void operator delete (void* pointer, size_t size);
  259180             : 
  259181             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  259182           0 :           void operator delete (void* pointer)
  259183             :              {
  259184             :             // This is the generated delete operator...
  259185           0 :                SgExponentiationAssignOp::operator delete (pointer,sizeof(SgExponentiationAssignOp));
  259186             :              }
  259187             : 
  259188             :       /*! \brief Returns the total number of IR nodes of this type */
  259189             :           static size_t numberOfNodes();
  259190             : 
  259191             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  259192             :           static size_t memoryUsage();
  259193             : 
  259194             :       // End of scope which started in IR nodes specific code 
  259195             :       /* */
  259196             : 
  259197             :       /* name Internal Functions
  259198             :           \brief Internal functions ... incomplete-documentation
  259199             : 
  259200             :           These functions have been made public as part of the design, but they are suggested for internal use 
  259201             :           or by particularly knowledgeable users for specialized tools or applications.
  259202             : 
  259203             :           \internal We could not make these private because they are required by user for special purposes. And 
  259204             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  259205             :          
  259206             :        */
  259207             : 
  259208             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  259209             :        // overridden in every class by *generated* implementation
  259210             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  259211             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  259212             :        // MS: 06/28/02 container of names of variables or container indices 
  259213             :        // used used in the traversal to access AST successor nodes
  259214             :        // overridden in every class by *generated* implementation
  259215             :       /*! \brief container of names of variables or container indices used used in the traversal
  259216             :           to access AST successor nodes overridden in every class by *generated* implementation */
  259217             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  259218             : 
  259219             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  259220             :        // than all the vector copies. The implementation for these functions is generated for each class.
  259221             :       /*! \brief return number of children in the traversal successor list */
  259222             :           virtual size_t get_numberOfTraversalSuccessors() override;
  259223             :       /*! \brief index-based access to traversal successors by index number */
  259224             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  259225             :       /*! \brief index-based access to traversal successors by child node */
  259226             :           virtual size_t get_childIndex(SgNode *child) override;
  259227             : 
  259228             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  259229             :        // MS: 08/16/2002 method for generating RTI information
  259230             :       /*! \brief return C++ Runtime-Time-Information */
  259231             :           virtual RTIReturnType roseRTI() override;
  259232             : #endif
  259233             :       /* */
  259234             : 
  259235             : 
  259236             : 
  259237             :       /* name Deprecated Functions
  259238             :           \brief Deprecated functions ... incomplete-documentation
  259239             : 
  259240             :           These functions have been deprecated from use.
  259241             :        */
  259242             :       /* */
  259243             : 
  259244             :       /*! returns a C style string (char*) representing the class name */
  259245             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  259246             : 
  259247             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  259248             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  259249             : #if 0
  259250             :       /*! returns old style Sage II enum values */
  259251             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  259252             :       /*! returns old style Sage II enum values */
  259253             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  259254             : #endif
  259255             :       /* */
  259256             : 
  259257             : 
  259258             : 
  259259             : 
  259260             :      public:
  259261             :       /* name Traversal Support Functions
  259262             :           \brief Traversal support functions ... incomplete-documentation
  259263             : 
  259264             :           These functions have been made public as part of the design, but they are suggested for internal use 
  259265             :           or by particularly knowledgable users for specialized tools or applications.
  259266             :        */
  259267             :       /* */
  259268             : 
  259269             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  259270             :        // (inferior to ROSE traversal mechanism, experimental).
  259271             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  259272             :        */
  259273             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  259274             : 
  259275             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  259276             :       /*! \brief support for the classic visitor pattern done in GoF */
  259277             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  259278             : 
  259279             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  259280             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  259281             :        */
  259282             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  259283             : 
  259284             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  259285             :        */
  259286             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  259287             : 
  259288             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  259289             :        // This traversal helps support internal tools that call static member functions.
  259290             :        // note: this function operates on the memory pools.
  259291             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  259292             :        */
  259293             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  259294             :       /* */
  259295             : 
  259296             : 
  259297             :      public:
  259298             :       /* name Memory Allocation Functions
  259299             :           \brief Memory allocations functions ... incomplete-documentation
  259300             : 
  259301             :           These functions have been made public as part of the design, but they are suggested for internal use 
  259302             :           or by particularly knowledgable users for specialized tools or applications.
  259303             :        */
  259304             :       /* */
  259305             : 
  259306             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  259307             : 
  259308             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  259309             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  259310             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  259311             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  259312             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  259313             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  259314             :           being used with the AST File I/O mechanism.
  259315             :        */
  259316             :           virtual bool isInMemoryPool() override;
  259317             : 
  259318             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  259319             : 
  259320             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  259321             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  259322             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  259323             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  259324             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  259325             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  259326             :           being used with the AST File I/O mechanism.
  259327             :        */
  259328             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  259329             : 
  259330             :       // DQ (4/30/2006): Modified to be a const function.
  259331             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  259332             : 
  259333             :           This functions is part of general support for many possible tools to operate 
  259334             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  259335             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  259336             :           less than the set of pointers used by the AST file I/O. This is part of
  259337             :           work implemented by Andreas, and support tools such as the AST graph generation.
  259338             : 
  259339             :           \warning This function can return unexpected data members and thus the 
  259340             :                    order and the number of elements is unpredicable and subject 
  259341             :                    to change.
  259342             : 
  259343             :           \returns STL vector of pairs of SgNode* and strings
  259344             :        */
  259345             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  259346             : 
  259347             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  259348             : 
  259349             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  259350             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  259351             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  259352             : 
  259353             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  259354             :                    and subject to change.
  259355             :        */
  259356             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  259357             : 
  259358             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  259359             : 
  259360             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  259361             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  259362             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  259363             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  259364             : 
  259365             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  259366             : 
  259367             :           \returns long
  259368             :        */
  259369             :           virtual long getChildIndex( SgNode* childNode ) const override;
  259370             : 
  259371             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  259372             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  259373             :       /* \brief Constructor for use by AST File I/O Mechanism
  259374             : 
  259375             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  259376             :           which obtained via fast binary file I/O from disk.
  259377             :        */
  259378             :        // SgExponentiationAssignOp( SgExponentiationAssignOpStorageClass& source );
  259379             : 
  259380             : 
  259381             : 
  259382             : 
  259383             : 
  259384             :  // JH (10/24/2005): methods added to support the ast file IO
  259385             :     private:
  259386             : 
  259387             :       /* name AST Memory Allocation Support Functions
  259388             :           \brief Memory allocations support....
  259389             : 
  259390             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  259391             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  259392             :           and support the AST File I/O Mechanism.
  259393             :        */
  259394             :       /* */
  259395             : 
  259396             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  259397             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  259398             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  259399             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  259400             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  259401             :           a correspinding one in the AST_FILE_IO class!
  259402             :        */
  259403             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  259404             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  259405             :       /* \brief Typedef used for low level memory access.
  259406             :        */
  259407             :        // typedef unsigned char* TestType;
  259408             : 
  259409             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  259410             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  259411             :       /* \brief Typedef used to hold memory addresses as values.
  259412             :        */
  259413             :        // typedef unsigned long  AddressType;
  259414             : 
  259415             : 
  259416             : 
  259417             :        // necessary, to have direct access to the p_freepointer and the private methods !
  259418             :       /*! \brief friend class declaration to support AST File I/O */
  259419             :           friend class AST_FILE_IO;
  259420             : 
  259421             :       /*! \brief friend class declaration to support AST File I/O */
  259422             :           friend class SgExponentiationAssignOpStorageClass;
  259423             : 
  259424             :       /*! \brief friend class declaration to support AST File I/O */
  259425             :           friend class AstSpecificDataManagingClass;
  259426             : 
  259427             :       /*! \brief friend class declaration to support AST File I/O */
  259428             :           friend class AstSpecificDataManagingClassStorageClass;
  259429             :     public:
  259430             :       /*! \brief IR node constructor to support AST File I/O */
  259431             :           SgExponentiationAssignOp( const SgExponentiationAssignOpStorageClass& source );
  259432             : 
  259433             :  // private: // JJW hack
  259434             :        /*
  259435             :           name AST Memory Allocation Support Variables
  259436             :           Memory allocations support variables 
  259437             : 
  259438             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  259439             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  259440             :           and support the AST File I/O Mechanism.
  259441             :        */
  259442             :       /* */
  259443             : 
  259444             :     public:
  259445             : 
  259446             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  259447             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  259448             :       // virtual SgNode* addRegExpAttribute();
  259449             :       /*! \brief Support for AST matching using regular expression.
  259450             : 
  259451             :           This support is incomplete and the subject of current research to define 
  259452             :           RegEx trees to support inexact matching.
  259453             :        */
  259454             :           SgExponentiationAssignOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  259455             : 
  259456             : // *** COMMON CODE SECTION ENDS HERE ***
  259457             : 
  259458             : 
  259459             : // End of memberFunctionString
  259460             : // Start of memberFunctionString
  259461             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  259462             : 
  259463             :      // the generated cast function
  259464             :      // friend ROSE_DLL_API SgExponentiationAssignOp* isSgExponentiationAssignOp ( SgNode* s );
  259465             : 
  259466             :           typedef SgCompoundAssignOp base_node_type;
  259467             : 
  259468             : 
  259469             : // End of memberFunctionString
  259470             : // Start of memberFunctionString
  259471             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259472             : 
  259473             :           void post_construction_initialization() override;
  259474             : 
  259475             : 
  259476             : // End of memberFunctionString
  259477             : // Start of memberFunctionString
  259478             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259479             : 
  259480           0 :           int precedence() const override { return  2; }
  259481             : 
  259482             : 
  259483             : // End of memberFunctionString
  259484             : 
  259485             : 
  259486             :      public: 
  259487             :          virtual ~SgExponentiationAssignOp();
  259488             : 
  259489             : 
  259490             :      public: 
  259491             :          SgExponentiationAssignOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  259492             :          SgExponentiationAssignOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  259493             : 
  259494             :     protected:
  259495             : 
  259496             :     friend struct Rose::Traits::generated::describe_node_t<SgExponentiationAssignOp>;
  259497             : 
  259498             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259499             : 
  259500             : 
  259501             :    };
  259502             : #endif
  259503             : 
  259504             : // postdeclarations for SgExponentiationAssignOp
  259505             : 
  259506             : /* #line 259507 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259507             : 
  259508             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  259509             : 
  259510             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259511             : 
  259512             : 
  259513             : /* #line 259514 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259514             : 
  259515             : 
  259516             : 
  259517             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259518             : 
  259519             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  259520             : //      This code is automatically generated for each 
  259521             : //      terminal and non-terminal within the defined 
  259522             : //      grammar.  There is a simple way to change the 
  259523             : //      code to fix bugs etc.  See the ROSE README file
  259524             : //      for directions.
  259525             : 
  259526             : // tps: (02/22/2010): Adding DLL export requirements
  259527             : #include "rosedll.h"
  259528             : 
  259529             : // predeclarations for SgMembershipOp
  259530             : 
  259531             : /* #line 259532 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259532             : 
  259533             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  259534             : 
  259535             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259536             : 
  259537             : #if 1
  259538             : // Class Definition for SgMembershipOp
  259539             : class ROSE_DLL_API SgMembershipOp  : public SgBinaryOp
  259540             :    {
  259541             :      public:
  259542             : 
  259543             : 
  259544             : /* #line 259545 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259545             : 
  259546             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  259547             : // Start of memberFunctionString
  259548             : /* #line 874 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259549             : 
  259550             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259551             : 
  259552             :        // DQ (6/20/2006): Used for all relational operators
  259553             :           virtual SgType* get_type() const override;
  259554             : 
  259555             : 
  259556             : 
  259557             : 
  259558             : // End of memberFunctionString
  259559             : // Start of memberFunctionString
  259560             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  259561             : 
  259562             : // *** COMMON CODE SECTION BEGINS HERE ***
  259563             : 
  259564             :     public:
  259565             : 
  259566             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  259567             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  259568             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  259569             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  259570             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  259571             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  259572             : 
  259573             :       /*! \brief returns a string representing the class name */
  259574             :           virtual std::string class_name() const override;
  259575             : 
  259576             :       /*! \brief returns new style SageIII enum values */
  259577             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  259578             : 
  259579             :       /*! \brief static variant value */
  259580             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  259581             :        // static const VariantT static_variant = V_SgMembershipOp;
  259582             :           enum { static_variant = V_SgMembershipOp };
  259583             : 
  259584             :        /* the generated cast function */
  259585             :       /*! \brief Casts pointer from base class to derived class */
  259586             :           ROSE_DLL_API friend       SgMembershipOp* isSgMembershipOp(       SgNode * s );
  259587             : 
  259588             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  259589             :           ROSE_DLL_API friend const SgMembershipOp* isSgMembershipOp( const SgNode * s );
  259590             : 
  259591             :      // ******************************************
  259592             :      // * Memory Pool / New / Delete
  259593             :      // ******************************************
  259594             : 
  259595             :      public:
  259596             :           /// \private
  259597             :           static const unsigned pool_size; //
  259598             :           /// \private
  259599             :           static std::vector<unsigned char *> pools; //
  259600             :           /// \private
  259601             :           static SgMembershipOp * next_node; // 
  259602             : 
  259603             :           /// \private
  259604             :           static unsigned long initializeStorageClassArray(SgMembershipOpStorageClass *); //
  259605             : 
  259606             :           /// \private
  259607             :           static void clearMemoryPool(); //
  259608             :           static void deleteMemoryPool(); //
  259609             : 
  259610             :           /// \private
  259611             :           static void extendMemoryPoolForFileIO(); //
  259612             : 
  259613             :           /// \private
  259614             :           static SgMembershipOp * getPointerFromGlobalIndex(unsigned long); //
  259615             :           /// \private
  259616             :           static SgMembershipOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  259617             : 
  259618             :           /// \private
  259619             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  259620             :           /// \private
  259621             :           static void resetValidFreepointers(); //
  259622             :           /// \private
  259623             :           static unsigned long getNumberOfLastValidPointer(); //
  259624             : 
  259625             : 
  259626             : #if defined(INLINE_FUNCTIONS)
  259627             :       /*! \brief returns pointer to newly allocated IR node */
  259628             :           inline void *operator new (size_t size);
  259629             : #else
  259630             :       /*! \brief returns pointer to newly allocated IR node */
  259631             :           void *operator new (size_t size);
  259632             : #endif
  259633             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  259634             :           void operator delete (void* pointer, size_t size);
  259635             : 
  259636             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  259637           0 :           void operator delete (void* pointer)
  259638             :              {
  259639             :             // This is the generated delete operator...
  259640           0 :                SgMembershipOp::operator delete (pointer,sizeof(SgMembershipOp));
  259641             :              }
  259642             : 
  259643             :       /*! \brief Returns the total number of IR nodes of this type */
  259644             :           static size_t numberOfNodes();
  259645             : 
  259646             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  259647             :           static size_t memoryUsage();
  259648             : 
  259649             :       // End of scope which started in IR nodes specific code 
  259650             :       /* */
  259651             : 
  259652             :       /* name Internal Functions
  259653             :           \brief Internal functions ... incomplete-documentation
  259654             : 
  259655             :           These functions have been made public as part of the design, but they are suggested for internal use 
  259656             :           or by particularly knowledgeable users for specialized tools or applications.
  259657             : 
  259658             :           \internal We could not make these private because they are required by user for special purposes. And 
  259659             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  259660             :          
  259661             :        */
  259662             : 
  259663             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  259664             :        // overridden in every class by *generated* implementation
  259665             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  259666             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  259667             :        // MS: 06/28/02 container of names of variables or container indices 
  259668             :        // used used in the traversal to access AST successor nodes
  259669             :        // overridden in every class by *generated* implementation
  259670             :       /*! \brief container of names of variables or container indices used used in the traversal
  259671             :           to access AST successor nodes overridden in every class by *generated* implementation */
  259672             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  259673             : 
  259674             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  259675             :        // than all the vector copies. The implementation for these functions is generated for each class.
  259676             :       /*! \brief return number of children in the traversal successor list */
  259677             :           virtual size_t get_numberOfTraversalSuccessors() override;
  259678             :       /*! \brief index-based access to traversal successors by index number */
  259679             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  259680             :       /*! \brief index-based access to traversal successors by child node */
  259681             :           virtual size_t get_childIndex(SgNode *child) override;
  259682             : 
  259683             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  259684             :        // MS: 08/16/2002 method for generating RTI information
  259685             :       /*! \brief return C++ Runtime-Time-Information */
  259686             :           virtual RTIReturnType roseRTI() override;
  259687             : #endif
  259688             :       /* */
  259689             : 
  259690             : 
  259691             : 
  259692             :       /* name Deprecated Functions
  259693             :           \brief Deprecated functions ... incomplete-documentation
  259694             : 
  259695             :           These functions have been deprecated from use.
  259696             :        */
  259697             :       /* */
  259698             : 
  259699             :       /*! returns a C style string (char*) representing the class name */
  259700             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  259701             : 
  259702             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  259703             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  259704             : #if 0
  259705             :       /*! returns old style Sage II enum values */
  259706             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  259707             :       /*! returns old style Sage II enum values */
  259708             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  259709             : #endif
  259710             :       /* */
  259711             : 
  259712             : 
  259713             : 
  259714             : 
  259715             :      public:
  259716             :       /* name Traversal Support Functions
  259717             :           \brief Traversal support functions ... incomplete-documentation
  259718             : 
  259719             :           These functions have been made public as part of the design, but they are suggested for internal use 
  259720             :           or by particularly knowledgable users for specialized tools or applications.
  259721             :        */
  259722             :       /* */
  259723             : 
  259724             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  259725             :        // (inferior to ROSE traversal mechanism, experimental).
  259726             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  259727             :        */
  259728             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  259729             : 
  259730             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  259731             :       /*! \brief support for the classic visitor pattern done in GoF */
  259732             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  259733             : 
  259734             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  259735             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  259736             :        */
  259737             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  259738             : 
  259739             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  259740             :        */
  259741             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  259742             : 
  259743             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  259744             :        // This traversal helps support internal tools that call static member functions.
  259745             :        // note: this function operates on the memory pools.
  259746             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  259747             :        */
  259748             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  259749             :       /* */
  259750             : 
  259751             : 
  259752             :      public:
  259753             :       /* name Memory Allocation Functions
  259754             :           \brief Memory allocations functions ... incomplete-documentation
  259755             : 
  259756             :           These functions have been made public as part of the design, but they are suggested for internal use 
  259757             :           or by particularly knowledgable users for specialized tools or applications.
  259758             :        */
  259759             :       /* */
  259760             : 
  259761             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  259762             : 
  259763             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  259764             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  259765             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  259766             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  259767             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  259768             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  259769             :           being used with the AST File I/O mechanism.
  259770             :        */
  259771             :           virtual bool isInMemoryPool() override;
  259772             : 
  259773             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  259774             : 
  259775             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  259776             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  259777             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  259778             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  259779             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  259780             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  259781             :           being used with the AST File I/O mechanism.
  259782             :        */
  259783             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  259784             : 
  259785             :       // DQ (4/30/2006): Modified to be a const function.
  259786             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  259787             : 
  259788             :           This functions is part of general support for many possible tools to operate 
  259789             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  259790             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  259791             :           less than the set of pointers used by the AST file I/O. This is part of
  259792             :           work implemented by Andreas, and support tools such as the AST graph generation.
  259793             : 
  259794             :           \warning This function can return unexpected data members and thus the 
  259795             :                    order and the number of elements is unpredicable and subject 
  259796             :                    to change.
  259797             : 
  259798             :           \returns STL vector of pairs of SgNode* and strings
  259799             :        */
  259800             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  259801             : 
  259802             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  259803             : 
  259804             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  259805             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  259806             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  259807             : 
  259808             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  259809             :                    and subject to change.
  259810             :        */
  259811             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  259812             : 
  259813             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  259814             : 
  259815             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  259816             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  259817             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  259818             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  259819             : 
  259820             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  259821             : 
  259822             :           \returns long
  259823             :        */
  259824             :           virtual long getChildIndex( SgNode* childNode ) const override;
  259825             : 
  259826             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  259827             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  259828             :       /* \brief Constructor for use by AST File I/O Mechanism
  259829             : 
  259830             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  259831             :           which obtained via fast binary file I/O from disk.
  259832             :        */
  259833             :        // SgMembershipOp( SgMembershipOpStorageClass& source );
  259834             : 
  259835             : 
  259836             : 
  259837             : 
  259838             : 
  259839             :  // JH (10/24/2005): methods added to support the ast file IO
  259840             :     private:
  259841             : 
  259842             :       /* name AST Memory Allocation Support Functions
  259843             :           \brief Memory allocations support....
  259844             : 
  259845             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  259846             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  259847             :           and support the AST File I/O Mechanism.
  259848             :        */
  259849             :       /* */
  259850             : 
  259851             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  259852             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  259853             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  259854             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  259855             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  259856             :           a correspinding one in the AST_FILE_IO class!
  259857             :        */
  259858             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  259859             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  259860             :       /* \brief Typedef used for low level memory access.
  259861             :        */
  259862             :        // typedef unsigned char* TestType;
  259863             : 
  259864             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  259865             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  259866             :       /* \brief Typedef used to hold memory addresses as values.
  259867             :        */
  259868             :        // typedef unsigned long  AddressType;
  259869             : 
  259870             : 
  259871             : 
  259872             :        // necessary, to have direct access to the p_freepointer and the private methods !
  259873             :       /*! \brief friend class declaration to support AST File I/O */
  259874             :           friend class AST_FILE_IO;
  259875             : 
  259876             :       /*! \brief friend class declaration to support AST File I/O */
  259877             :           friend class SgMembershipOpStorageClass;
  259878             : 
  259879             :       /*! \brief friend class declaration to support AST File I/O */
  259880             :           friend class AstSpecificDataManagingClass;
  259881             : 
  259882             :       /*! \brief friend class declaration to support AST File I/O */
  259883             :           friend class AstSpecificDataManagingClassStorageClass;
  259884             :     public:
  259885             :       /*! \brief IR node constructor to support AST File I/O */
  259886             :           SgMembershipOp( const SgMembershipOpStorageClass& source );
  259887             : 
  259888             :  // private: // JJW hack
  259889             :        /*
  259890             :           name AST Memory Allocation Support Variables
  259891             :           Memory allocations support variables 
  259892             : 
  259893             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  259894             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  259895             :           and support the AST File I/O Mechanism.
  259896             :        */
  259897             :       /* */
  259898             : 
  259899             :     public:
  259900             : 
  259901             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  259902             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  259903             :       // virtual SgNode* addRegExpAttribute();
  259904             :       /*! \brief Support for AST matching using regular expression.
  259905             : 
  259906             :           This support is incomplete and the subject of current research to define 
  259907             :           RegEx trees to support inexact matching.
  259908             :        */
  259909             :           SgMembershipOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  259910             : 
  259911             : // *** COMMON CODE SECTION ENDS HERE ***
  259912             : 
  259913             : 
  259914             : // End of memberFunctionString
  259915             : // Start of memberFunctionString
  259916             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  259917             : 
  259918             :      // the generated cast function
  259919             :      // friend ROSE_DLL_API SgMembershipOp* isSgMembershipOp ( SgNode* s );
  259920             : 
  259921             :           typedef SgBinaryOp base_node_type;
  259922             : 
  259923             : 
  259924             : // End of memberFunctionString
  259925             : // Start of memberFunctionString
  259926             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259927             : 
  259928             :           void post_construction_initialization() override;
  259929             : 
  259930             : 
  259931             : // End of memberFunctionString
  259932             : // Start of memberFunctionString
  259933             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  259934             : 
  259935           0 :           int precedence() const override { return  9; }
  259936             : 
  259937             : 
  259938             : // End of memberFunctionString
  259939             : 
  259940             : 
  259941             :      public: 
  259942             :          virtual ~SgMembershipOp();
  259943             : 
  259944             : 
  259945             :      public: 
  259946             :          SgMembershipOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  259947             :          SgMembershipOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  259948             : 
  259949             :     protected:
  259950             : 
  259951             :     friend struct Rose::Traits::generated::describe_node_t<SgMembershipOp>;
  259952             : 
  259953             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259954             : 
  259955             : 
  259956             :    };
  259957             : #endif
  259958             : 
  259959             : // postdeclarations for SgMembershipOp
  259960             : 
  259961             : /* #line 259962 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259962             : 
  259963             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  259964             : 
  259965             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259966             : 
  259967             : 
  259968             : /* #line 259969 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259969             : 
  259970             : 
  259971             : 
  259972             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259973             : 
  259974             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  259975             : //      This code is automatically generated for each 
  259976             : //      terminal and non-terminal within the defined 
  259977             : //      grammar.  There is a simple way to change the 
  259978             : //      code to fix bugs etc.  See the ROSE README file
  259979             : //      for directions.
  259980             : 
  259981             : // tps: (02/22/2010): Adding DLL export requirements
  259982             : #include "rosedll.h"
  259983             : 
  259984             : // predeclarations for SgSpaceshipOp
  259985             : 
  259986             : /* #line 259987 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  259987             : 
  259988             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  259989             : 
  259990             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  259991             : 
  259992             : #if 1
  259993             : // Class Definition for SgSpaceshipOp
  259994             : class ROSE_DLL_API SgSpaceshipOp  : public SgBinaryOp
  259995             :    {
  259996             :      public:
  259997             : 
  259998             : 
  259999             : /* #line 260000 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260000             : 
  260001             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  260002             : // Start of memberFunctionString
  260003             : /* #line 727 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260004             : 
  260005             : 
  260006             : 
  260007             : // End of memberFunctionString
  260008             : // Start of memberFunctionString
  260009             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  260010             : 
  260011             : // *** COMMON CODE SECTION BEGINS HERE ***
  260012             : 
  260013             :     public:
  260014             : 
  260015             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  260016             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  260017             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  260018             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  260019             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  260020             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  260021             : 
  260022             :       /*! \brief returns a string representing the class name */
  260023             :           virtual std::string class_name() const override;
  260024             : 
  260025             :       /*! \brief returns new style SageIII enum values */
  260026             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  260027             : 
  260028             :       /*! \brief static variant value */
  260029             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  260030             :        // static const VariantT static_variant = V_SgSpaceshipOp;
  260031             :           enum { static_variant = V_SgSpaceshipOp };
  260032             : 
  260033             :        /* the generated cast function */
  260034             :       /*! \brief Casts pointer from base class to derived class */
  260035             :           ROSE_DLL_API friend       SgSpaceshipOp* isSgSpaceshipOp(       SgNode * s );
  260036             : 
  260037             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  260038             :           ROSE_DLL_API friend const SgSpaceshipOp* isSgSpaceshipOp( const SgNode * s );
  260039             : 
  260040             :      // ******************************************
  260041             :      // * Memory Pool / New / Delete
  260042             :      // ******************************************
  260043             : 
  260044             :      public:
  260045             :           /// \private
  260046             :           static const unsigned pool_size; //
  260047             :           /// \private
  260048             :           static std::vector<unsigned char *> pools; //
  260049             :           /// \private
  260050             :           static SgSpaceshipOp * next_node; // 
  260051             : 
  260052             :           /// \private
  260053             :           static unsigned long initializeStorageClassArray(SgSpaceshipOpStorageClass *); //
  260054             : 
  260055             :           /// \private
  260056             :           static void clearMemoryPool(); //
  260057             :           static void deleteMemoryPool(); //
  260058             : 
  260059             :           /// \private
  260060             :           static void extendMemoryPoolForFileIO(); //
  260061             : 
  260062             :           /// \private
  260063             :           static SgSpaceshipOp * getPointerFromGlobalIndex(unsigned long); //
  260064             :           /// \private
  260065             :           static SgSpaceshipOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  260066             : 
  260067             :           /// \private
  260068             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  260069             :           /// \private
  260070             :           static void resetValidFreepointers(); //
  260071             :           /// \private
  260072             :           static unsigned long getNumberOfLastValidPointer(); //
  260073             : 
  260074             : 
  260075             : #if defined(INLINE_FUNCTIONS)
  260076             :       /*! \brief returns pointer to newly allocated IR node */
  260077             :           inline void *operator new (size_t size);
  260078             : #else
  260079             :       /*! \brief returns pointer to newly allocated IR node */
  260080             :           void *operator new (size_t size);
  260081             : #endif
  260082             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  260083             :           void operator delete (void* pointer, size_t size);
  260084             : 
  260085             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  260086           0 :           void operator delete (void* pointer)
  260087             :              {
  260088             :             // This is the generated delete operator...
  260089           0 :                SgSpaceshipOp::operator delete (pointer,sizeof(SgSpaceshipOp));
  260090             :              }
  260091             : 
  260092             :       /*! \brief Returns the total number of IR nodes of this type */
  260093             :           static size_t numberOfNodes();
  260094             : 
  260095             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  260096             :           static size_t memoryUsage();
  260097             : 
  260098             :       // End of scope which started in IR nodes specific code 
  260099             :       /* */
  260100             : 
  260101             :       /* name Internal Functions
  260102             :           \brief Internal functions ... incomplete-documentation
  260103             : 
  260104             :           These functions have been made public as part of the design, but they are suggested for internal use 
  260105             :           or by particularly knowledgeable users for specialized tools or applications.
  260106             : 
  260107             :           \internal We could not make these private because they are required by user for special purposes. And 
  260108             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  260109             :          
  260110             :        */
  260111             : 
  260112             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  260113             :        // overridden in every class by *generated* implementation
  260114             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  260115             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  260116             :        // MS: 06/28/02 container of names of variables or container indices 
  260117             :        // used used in the traversal to access AST successor nodes
  260118             :        // overridden in every class by *generated* implementation
  260119             :       /*! \brief container of names of variables or container indices used used in the traversal
  260120             :           to access AST successor nodes overridden in every class by *generated* implementation */
  260121             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  260122             : 
  260123             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  260124             :        // than all the vector copies. The implementation for these functions is generated for each class.
  260125             :       /*! \brief return number of children in the traversal successor list */
  260126             :           virtual size_t get_numberOfTraversalSuccessors() override;
  260127             :       /*! \brief index-based access to traversal successors by index number */
  260128             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  260129             :       /*! \brief index-based access to traversal successors by child node */
  260130             :           virtual size_t get_childIndex(SgNode *child) override;
  260131             : 
  260132             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  260133             :        // MS: 08/16/2002 method for generating RTI information
  260134             :       /*! \brief return C++ Runtime-Time-Information */
  260135             :           virtual RTIReturnType roseRTI() override;
  260136             : #endif
  260137             :       /* */
  260138             : 
  260139             : 
  260140             : 
  260141             :       /* name Deprecated Functions
  260142             :           \brief Deprecated functions ... incomplete-documentation
  260143             : 
  260144             :           These functions have been deprecated from use.
  260145             :        */
  260146             :       /* */
  260147             : 
  260148             :       /*! returns a C style string (char*) representing the class name */
  260149             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  260150             : 
  260151             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  260152             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  260153             : #if 0
  260154             :       /*! returns old style Sage II enum values */
  260155             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  260156             :       /*! returns old style Sage II enum values */
  260157             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  260158             : #endif
  260159             :       /* */
  260160             : 
  260161             : 
  260162             : 
  260163             : 
  260164             :      public:
  260165             :       /* name Traversal Support Functions
  260166             :           \brief Traversal support functions ... incomplete-documentation
  260167             : 
  260168             :           These functions have been made public as part of the design, but they are suggested for internal use 
  260169             :           or by particularly knowledgable users for specialized tools or applications.
  260170             :        */
  260171             :       /* */
  260172             : 
  260173             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  260174             :        // (inferior to ROSE traversal mechanism, experimental).
  260175             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  260176             :        */
  260177             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  260178             : 
  260179             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  260180             :       /*! \brief support for the classic visitor pattern done in GoF */
  260181             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  260182             : 
  260183             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  260184             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  260185             :        */
  260186             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  260187             : 
  260188             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  260189             :        */
  260190             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  260191             : 
  260192             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  260193             :        // This traversal helps support internal tools that call static member functions.
  260194             :        // note: this function operates on the memory pools.
  260195             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  260196             :        */
  260197             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  260198             :       /* */
  260199             : 
  260200             : 
  260201             :      public:
  260202             :       /* name Memory Allocation Functions
  260203             :           \brief Memory allocations functions ... incomplete-documentation
  260204             : 
  260205             :           These functions have been made public as part of the design, but they are suggested for internal use 
  260206             :           or by particularly knowledgable users for specialized tools or applications.
  260207             :        */
  260208             :       /* */
  260209             : 
  260210             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  260211             : 
  260212             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  260213             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  260214             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  260215             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  260216             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  260217             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  260218             :           being used with the AST File I/O mechanism.
  260219             :        */
  260220             :           virtual bool isInMemoryPool() override;
  260221             : 
  260222             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  260223             : 
  260224             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  260225             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  260226             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  260227             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  260228             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  260229             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  260230             :           being used with the AST File I/O mechanism.
  260231             :        */
  260232             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  260233             : 
  260234             :       // DQ (4/30/2006): Modified to be a const function.
  260235             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  260236             : 
  260237             :           This functions is part of general support for many possible tools to operate 
  260238             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  260239             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  260240             :           less than the set of pointers used by the AST file I/O. This is part of
  260241             :           work implemented by Andreas, and support tools such as the AST graph generation.
  260242             : 
  260243             :           \warning This function can return unexpected data members and thus the 
  260244             :                    order and the number of elements is unpredicable and subject 
  260245             :                    to change.
  260246             : 
  260247             :           \returns STL vector of pairs of SgNode* and strings
  260248             :        */
  260249             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  260250             : 
  260251             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  260252             : 
  260253             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  260254             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  260255             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  260256             : 
  260257             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  260258             :                    and subject to change.
  260259             :        */
  260260             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  260261             : 
  260262             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  260263             : 
  260264             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  260265             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  260266             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  260267             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  260268             : 
  260269             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  260270             : 
  260271             :           \returns long
  260272             :        */
  260273             :           virtual long getChildIndex( SgNode* childNode ) const override;
  260274             : 
  260275             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  260276             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  260277             :       /* \brief Constructor for use by AST File I/O Mechanism
  260278             : 
  260279             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  260280             :           which obtained via fast binary file I/O from disk.
  260281             :        */
  260282             :        // SgSpaceshipOp( SgSpaceshipOpStorageClass& source );
  260283             : 
  260284             : 
  260285             : 
  260286             : 
  260287             : 
  260288             :  // JH (10/24/2005): methods added to support the ast file IO
  260289             :     private:
  260290             : 
  260291             :       /* name AST Memory Allocation Support Functions
  260292             :           \brief Memory allocations support....
  260293             : 
  260294             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  260295             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  260296             :           and support the AST File I/O Mechanism.
  260297             :        */
  260298             :       /* */
  260299             : 
  260300             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  260301             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  260302             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  260303             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  260304             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  260305             :           a correspinding one in the AST_FILE_IO class!
  260306             :        */
  260307             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  260308             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  260309             :       /* \brief Typedef used for low level memory access.
  260310             :        */
  260311             :        // typedef unsigned char* TestType;
  260312             : 
  260313             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  260314             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  260315             :       /* \brief Typedef used to hold memory addresses as values.
  260316             :        */
  260317             :        // typedef unsigned long  AddressType;
  260318             : 
  260319             : 
  260320             : 
  260321             :        // necessary, to have direct access to the p_freepointer and the private methods !
  260322             :       /*! \brief friend class declaration to support AST File I/O */
  260323             :           friend class AST_FILE_IO;
  260324             : 
  260325             :       /*! \brief friend class declaration to support AST File I/O */
  260326             :           friend class SgSpaceshipOpStorageClass;
  260327             : 
  260328             :       /*! \brief friend class declaration to support AST File I/O */
  260329             :           friend class AstSpecificDataManagingClass;
  260330             : 
  260331             :       /*! \brief friend class declaration to support AST File I/O */
  260332             :           friend class AstSpecificDataManagingClassStorageClass;
  260333             :     public:
  260334             :       /*! \brief IR node constructor to support AST File I/O */
  260335             :           SgSpaceshipOp( const SgSpaceshipOpStorageClass& source );
  260336             : 
  260337             :  // private: // JJW hack
  260338             :        /*
  260339             :           name AST Memory Allocation Support Variables
  260340             :           Memory allocations support variables 
  260341             : 
  260342             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  260343             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  260344             :           and support the AST File I/O Mechanism.
  260345             :        */
  260346             :       /* */
  260347             : 
  260348             :     public:
  260349             : 
  260350             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  260351             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  260352             :       // virtual SgNode* addRegExpAttribute();
  260353             :       /*! \brief Support for AST matching using regular expression.
  260354             : 
  260355             :           This support is incomplete and the subject of current research to define 
  260356             :           RegEx trees to support inexact matching.
  260357             :        */
  260358             :           SgSpaceshipOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  260359             : 
  260360             : // *** COMMON CODE SECTION ENDS HERE ***
  260361             : 
  260362             : 
  260363             : // End of memberFunctionString
  260364             : // Start of memberFunctionString
  260365             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  260366             : 
  260367             :      // the generated cast function
  260368             :      // friend ROSE_DLL_API SgSpaceshipOp* isSgSpaceshipOp ( SgNode* s );
  260369             : 
  260370             :           typedef SgBinaryOp base_node_type;
  260371             : 
  260372             : 
  260373             : // End of memberFunctionString
  260374             : // Start of memberFunctionString
  260375             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260376             : 
  260377             :           void post_construction_initialization() override;
  260378             : 
  260379             : 
  260380             : // End of memberFunctionString
  260381             : // Start of memberFunctionString
  260382             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260383             : 
  260384           0 :           int precedence() const override { return 12; }
  260385             : 
  260386             : 
  260387             : // End of memberFunctionString
  260388             : 
  260389             : 
  260390             :      public: 
  260391             :          virtual ~SgSpaceshipOp();
  260392             : 
  260393             : 
  260394             :      public: 
  260395             :          SgSpaceshipOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  260396             :          SgSpaceshipOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  260397             : 
  260398             :     protected:
  260399             : 
  260400             :     friend struct Rose::Traits::generated::describe_node_t<SgSpaceshipOp>;
  260401             : 
  260402             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260403             : 
  260404             : 
  260405             :    };
  260406             : #endif
  260407             : 
  260408             : // postdeclarations for SgSpaceshipOp
  260409             : 
  260410             : /* #line 260411 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260411             : 
  260412             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  260413             : 
  260414             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260415             : 
  260416             : 
  260417             : /* #line 260418 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260418             : 
  260419             : 
  260420             : 
  260421             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260422             : 
  260423             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  260424             : //      This code is automatically generated for each 
  260425             : //      terminal and non-terminal within the defined 
  260426             : //      grammar.  There is a simple way to change the 
  260427             : //      code to fix bugs etc.  See the ROSE README file
  260428             : //      for directions.
  260429             : 
  260430             : // tps: (02/22/2010): Adding DLL export requirements
  260431             : #include "rosedll.h"
  260432             : 
  260433             : // predeclarations for SgNonMembershipOp
  260434             : 
  260435             : /* #line 260436 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260436             : 
  260437             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  260438             : 
  260439             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260440             : 
  260441             : #if 1
  260442             : // Class Definition for SgNonMembershipOp
  260443             : class ROSE_DLL_API SgNonMembershipOp  : public SgBinaryOp
  260444             :    {
  260445             :      public:
  260446             : 
  260447             : 
  260448             : /* #line 260449 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260449             : 
  260450             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  260451             : // Start of memberFunctionString
  260452             : /* #line 878 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260453             : 
  260454             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260455             : 
  260456             :        // DQ (6/20/2006): Used for all relational operators
  260457             :           virtual SgType* get_type() const override;
  260458             : 
  260459             : 
  260460             : 
  260461             : 
  260462             : // End of memberFunctionString
  260463             : // Start of memberFunctionString
  260464             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  260465             : 
  260466             : // *** COMMON CODE SECTION BEGINS HERE ***
  260467             : 
  260468             :     public:
  260469             : 
  260470             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  260471             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  260472             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  260473             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  260474             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  260475             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  260476             : 
  260477             :       /*! \brief returns a string representing the class name */
  260478             :           virtual std::string class_name() const override;
  260479             : 
  260480             :       /*! \brief returns new style SageIII enum values */
  260481             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  260482             : 
  260483             :       /*! \brief static variant value */
  260484             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  260485             :        // static const VariantT static_variant = V_SgNonMembershipOp;
  260486             :           enum { static_variant = V_SgNonMembershipOp };
  260487             : 
  260488             :        /* the generated cast function */
  260489             :       /*! \brief Casts pointer from base class to derived class */
  260490             :           ROSE_DLL_API friend       SgNonMembershipOp* isSgNonMembershipOp(       SgNode * s );
  260491             : 
  260492             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  260493             :           ROSE_DLL_API friend const SgNonMembershipOp* isSgNonMembershipOp( const SgNode * s );
  260494             : 
  260495             :      // ******************************************
  260496             :      // * Memory Pool / New / Delete
  260497             :      // ******************************************
  260498             : 
  260499             :      public:
  260500             :           /// \private
  260501             :           static const unsigned pool_size; //
  260502             :           /// \private
  260503             :           static std::vector<unsigned char *> pools; //
  260504             :           /// \private
  260505             :           static SgNonMembershipOp * next_node; // 
  260506             : 
  260507             :           /// \private
  260508             :           static unsigned long initializeStorageClassArray(SgNonMembershipOpStorageClass *); //
  260509             : 
  260510             :           /// \private
  260511             :           static void clearMemoryPool(); //
  260512             :           static void deleteMemoryPool(); //
  260513             : 
  260514             :           /// \private
  260515             :           static void extendMemoryPoolForFileIO(); //
  260516             : 
  260517             :           /// \private
  260518             :           static SgNonMembershipOp * getPointerFromGlobalIndex(unsigned long); //
  260519             :           /// \private
  260520             :           static SgNonMembershipOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  260521             : 
  260522             :           /// \private
  260523             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  260524             :           /// \private
  260525             :           static void resetValidFreepointers(); //
  260526             :           /// \private
  260527             :           static unsigned long getNumberOfLastValidPointer(); //
  260528             : 
  260529             : 
  260530             : #if defined(INLINE_FUNCTIONS)
  260531             :       /*! \brief returns pointer to newly allocated IR node */
  260532             :           inline void *operator new (size_t size);
  260533             : #else
  260534             :       /*! \brief returns pointer to newly allocated IR node */
  260535             :           void *operator new (size_t size);
  260536             : #endif
  260537             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  260538             :           void operator delete (void* pointer, size_t size);
  260539             : 
  260540             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  260541           0 :           void operator delete (void* pointer)
  260542             :              {
  260543             :             // This is the generated delete operator...
  260544           0 :                SgNonMembershipOp::operator delete (pointer,sizeof(SgNonMembershipOp));
  260545             :              }
  260546             : 
  260547             :       /*! \brief Returns the total number of IR nodes of this type */
  260548             :           static size_t numberOfNodes();
  260549             : 
  260550             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  260551             :           static size_t memoryUsage();
  260552             : 
  260553             :       // End of scope which started in IR nodes specific code 
  260554             :       /* */
  260555             : 
  260556             :       /* name Internal Functions
  260557             :           \brief Internal functions ... incomplete-documentation
  260558             : 
  260559             :           These functions have been made public as part of the design, but they are suggested for internal use 
  260560             :           or by particularly knowledgeable users for specialized tools or applications.
  260561             : 
  260562             :           \internal We could not make these private because they are required by user for special purposes. And 
  260563             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  260564             :          
  260565             :        */
  260566             : 
  260567             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  260568             :        // overridden in every class by *generated* implementation
  260569             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  260570             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  260571             :        // MS: 06/28/02 container of names of variables or container indices 
  260572             :        // used used in the traversal to access AST successor nodes
  260573             :        // overridden in every class by *generated* implementation
  260574             :       /*! \brief container of names of variables or container indices used used in the traversal
  260575             :           to access AST successor nodes overridden in every class by *generated* implementation */
  260576             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  260577             : 
  260578             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  260579             :        // than all the vector copies. The implementation for these functions is generated for each class.
  260580             :       /*! \brief return number of children in the traversal successor list */
  260581             :           virtual size_t get_numberOfTraversalSuccessors() override;
  260582             :       /*! \brief index-based access to traversal successors by index number */
  260583             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  260584             :       /*! \brief index-based access to traversal successors by child node */
  260585             :           virtual size_t get_childIndex(SgNode *child) override;
  260586             : 
  260587             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  260588             :        // MS: 08/16/2002 method for generating RTI information
  260589             :       /*! \brief return C++ Runtime-Time-Information */
  260590             :           virtual RTIReturnType roseRTI() override;
  260591             : #endif
  260592             :       /* */
  260593             : 
  260594             : 
  260595             : 
  260596             :       /* name Deprecated Functions
  260597             :           \brief Deprecated functions ... incomplete-documentation
  260598             : 
  260599             :           These functions have been deprecated from use.
  260600             :        */
  260601             :       /* */
  260602             : 
  260603             :       /*! returns a C style string (char*) representing the class name */
  260604             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  260605             : 
  260606             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  260607             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  260608             : #if 0
  260609             :       /*! returns old style Sage II enum values */
  260610             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  260611             :       /*! returns old style Sage II enum values */
  260612             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  260613             : #endif
  260614             :       /* */
  260615             : 
  260616             : 
  260617             : 
  260618             : 
  260619             :      public:
  260620             :       /* name Traversal Support Functions
  260621             :           \brief Traversal support functions ... incomplete-documentation
  260622             : 
  260623             :           These functions have been made public as part of the design, but they are suggested for internal use 
  260624             :           or by particularly knowledgable users for specialized tools or applications.
  260625             :        */
  260626             :       /* */
  260627             : 
  260628             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  260629             :        // (inferior to ROSE traversal mechanism, experimental).
  260630             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  260631             :        */
  260632             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  260633             : 
  260634             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  260635             :       /*! \brief support for the classic visitor pattern done in GoF */
  260636             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  260637             : 
  260638             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  260639             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  260640             :        */
  260641             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  260642             : 
  260643             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  260644             :        */
  260645             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  260646             : 
  260647             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  260648             :        // This traversal helps support internal tools that call static member functions.
  260649             :        // note: this function operates on the memory pools.
  260650             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  260651             :        */
  260652             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  260653             :       /* */
  260654             : 
  260655             : 
  260656             :      public:
  260657             :       /* name Memory Allocation Functions
  260658             :           \brief Memory allocations functions ... incomplete-documentation
  260659             : 
  260660             :           These functions have been made public as part of the design, but they are suggested for internal use 
  260661             :           or by particularly knowledgable users for specialized tools or applications.
  260662             :        */
  260663             :       /* */
  260664             : 
  260665             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  260666             : 
  260667             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  260668             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  260669             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  260670             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  260671             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  260672             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  260673             :           being used with the AST File I/O mechanism.
  260674             :        */
  260675             :           virtual bool isInMemoryPool() override;
  260676             : 
  260677             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  260678             : 
  260679             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  260680             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  260681             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  260682             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  260683             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  260684             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  260685             :           being used with the AST File I/O mechanism.
  260686             :        */
  260687             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  260688             : 
  260689             :       // DQ (4/30/2006): Modified to be a const function.
  260690             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  260691             : 
  260692             :           This functions is part of general support for many possible tools to operate 
  260693             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  260694             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  260695             :           less than the set of pointers used by the AST file I/O. This is part of
  260696             :           work implemented by Andreas, and support tools such as the AST graph generation.
  260697             : 
  260698             :           \warning This function can return unexpected data members and thus the 
  260699             :                    order and the number of elements is unpredicable and subject 
  260700             :                    to change.
  260701             : 
  260702             :           \returns STL vector of pairs of SgNode* and strings
  260703             :        */
  260704             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  260705             : 
  260706             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  260707             : 
  260708             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  260709             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  260710             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  260711             : 
  260712             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  260713             :                    and subject to change.
  260714             :        */
  260715             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  260716             : 
  260717             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  260718             : 
  260719             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  260720             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  260721             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  260722             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  260723             : 
  260724             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  260725             : 
  260726             :           \returns long
  260727             :        */
  260728             :           virtual long getChildIndex( SgNode* childNode ) const override;
  260729             : 
  260730             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  260731             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  260732             :       /* \brief Constructor for use by AST File I/O Mechanism
  260733             : 
  260734             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  260735             :           which obtained via fast binary file I/O from disk.
  260736             :        */
  260737             :        // SgNonMembershipOp( SgNonMembershipOpStorageClass& source );
  260738             : 
  260739             : 
  260740             : 
  260741             : 
  260742             : 
  260743             :  // JH (10/24/2005): methods added to support the ast file IO
  260744             :     private:
  260745             : 
  260746             :       /* name AST Memory Allocation Support Functions
  260747             :           \brief Memory allocations support....
  260748             : 
  260749             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  260750             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  260751             :           and support the AST File I/O Mechanism.
  260752             :        */
  260753             :       /* */
  260754             : 
  260755             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  260756             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  260757             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  260758             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  260759             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  260760             :           a correspinding one in the AST_FILE_IO class!
  260761             :        */
  260762             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  260763             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  260764             :       /* \brief Typedef used for low level memory access.
  260765             :        */
  260766             :        // typedef unsigned char* TestType;
  260767             : 
  260768             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  260769             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  260770             :       /* \brief Typedef used to hold memory addresses as values.
  260771             :        */
  260772             :        // typedef unsigned long  AddressType;
  260773             : 
  260774             : 
  260775             : 
  260776             :        // necessary, to have direct access to the p_freepointer and the private methods !
  260777             :       /*! \brief friend class declaration to support AST File I/O */
  260778             :           friend class AST_FILE_IO;
  260779             : 
  260780             :       /*! \brief friend class declaration to support AST File I/O */
  260781             :           friend class SgNonMembershipOpStorageClass;
  260782             : 
  260783             :       /*! \brief friend class declaration to support AST File I/O */
  260784             :           friend class AstSpecificDataManagingClass;
  260785             : 
  260786             :       /*! \brief friend class declaration to support AST File I/O */
  260787             :           friend class AstSpecificDataManagingClassStorageClass;
  260788             :     public:
  260789             :       /*! \brief IR node constructor to support AST File I/O */
  260790             :           SgNonMembershipOp( const SgNonMembershipOpStorageClass& source );
  260791             : 
  260792             :  // private: // JJW hack
  260793             :        /*
  260794             :           name AST Memory Allocation Support Variables
  260795             :           Memory allocations support variables 
  260796             : 
  260797             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  260798             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  260799             :           and support the AST File I/O Mechanism.
  260800             :        */
  260801             :       /* */
  260802             : 
  260803             :     public:
  260804             : 
  260805             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  260806             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  260807             :       // virtual SgNode* addRegExpAttribute();
  260808             :       /*! \brief Support for AST matching using regular expression.
  260809             : 
  260810             :           This support is incomplete and the subject of current research to define 
  260811             :           RegEx trees to support inexact matching.
  260812             :        */
  260813             :           SgNonMembershipOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  260814             : 
  260815             : // *** COMMON CODE SECTION ENDS HERE ***
  260816             : 
  260817             : 
  260818             : // End of memberFunctionString
  260819             : // Start of memberFunctionString
  260820             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  260821             : 
  260822             :      // the generated cast function
  260823             :      // friend ROSE_DLL_API SgNonMembershipOp* isSgNonMembershipOp ( SgNode* s );
  260824             : 
  260825             :           typedef SgBinaryOp base_node_type;
  260826             : 
  260827             : 
  260828             : // End of memberFunctionString
  260829             : // Start of memberFunctionString
  260830             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260831             : 
  260832             :           void post_construction_initialization() override;
  260833             : 
  260834             : 
  260835             : // End of memberFunctionString
  260836             : // Start of memberFunctionString
  260837             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260838             : 
  260839           0 :           int precedence() const override { return  9; }
  260840             : 
  260841             : 
  260842             : // End of memberFunctionString
  260843             : 
  260844             : 
  260845             :      public: 
  260846             :          virtual ~SgNonMembershipOp();
  260847             : 
  260848             : 
  260849             :      public: 
  260850             :          SgNonMembershipOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  260851             :          SgNonMembershipOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  260852             : 
  260853             :     protected:
  260854             : 
  260855             :     friend struct Rose::Traits::generated::describe_node_t<SgNonMembershipOp>;
  260856             : 
  260857             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260858             : 
  260859             : 
  260860             :    };
  260861             : #endif
  260862             : 
  260863             : // postdeclarations for SgNonMembershipOp
  260864             : 
  260865             : /* #line 260866 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260866             : 
  260867             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  260868             : 
  260869             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260870             : 
  260871             : 
  260872             : /* #line 260873 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260873             : 
  260874             : 
  260875             : 
  260876             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260877             : 
  260878             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  260879             : //      This code is automatically generated for each 
  260880             : //      terminal and non-terminal within the defined 
  260881             : //      grammar.  There is a simple way to change the 
  260882             : //      code to fix bugs etc.  See the ROSE README file
  260883             : //      for directions.
  260884             : 
  260885             : // tps: (02/22/2010): Adding DLL export requirements
  260886             : #include "rosedll.h"
  260887             : 
  260888             : // predeclarations for SgIsOp
  260889             : 
  260890             : /* #line 260891 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260891             : 
  260892             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  260893             : 
  260894             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  260895             : 
  260896             : #if 1
  260897             : // Class Definition for SgIsOp
  260898             : class ROSE_DLL_API SgIsOp  : public SgBinaryOp
  260899             :    {
  260900             :      public:
  260901             : 
  260902             : 
  260903             : /* #line 260904 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  260904             : 
  260905             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  260906             : // Start of memberFunctionString
  260907             : /* #line 882 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260908             : 
  260909             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  260910             : 
  260911             :        // DQ (6/20/2006): Used for all relational operators
  260912             :           virtual SgType* get_type() const override;
  260913             : 
  260914             : 
  260915             : 
  260916             : 
  260917             : // End of memberFunctionString
  260918             : // Start of memberFunctionString
  260919             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  260920             : 
  260921             : // *** COMMON CODE SECTION BEGINS HERE ***
  260922             : 
  260923             :     public:
  260924             : 
  260925             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  260926             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  260927             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  260928             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  260929             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  260930             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  260931             : 
  260932             :       /*! \brief returns a string representing the class name */
  260933             :           virtual std::string class_name() const override;
  260934             : 
  260935             :       /*! \brief returns new style SageIII enum values */
  260936             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  260937             : 
  260938             :       /*! \brief static variant value */
  260939             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  260940             :        // static const VariantT static_variant = V_SgIsOp;
  260941             :           enum { static_variant = V_SgIsOp };
  260942             : 
  260943             :        /* the generated cast function */
  260944             :       /*! \brief Casts pointer from base class to derived class */
  260945             :           ROSE_DLL_API friend       SgIsOp* isSgIsOp(       SgNode * s );
  260946             : 
  260947             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  260948             :           ROSE_DLL_API friend const SgIsOp* isSgIsOp( const SgNode * s );
  260949             : 
  260950             :      // ******************************************
  260951             :      // * Memory Pool / New / Delete
  260952             :      // ******************************************
  260953             : 
  260954             :      public:
  260955             :           /// \private
  260956             :           static const unsigned pool_size; //
  260957             :           /// \private
  260958             :           static std::vector<unsigned char *> pools; //
  260959             :           /// \private
  260960             :           static SgIsOp * next_node; // 
  260961             : 
  260962             :           /// \private
  260963             :           static unsigned long initializeStorageClassArray(SgIsOpStorageClass *); //
  260964             : 
  260965             :           /// \private
  260966             :           static void clearMemoryPool(); //
  260967             :           static void deleteMemoryPool(); //
  260968             : 
  260969             :           /// \private
  260970             :           static void extendMemoryPoolForFileIO(); //
  260971             : 
  260972             :           /// \private
  260973             :           static SgIsOp * getPointerFromGlobalIndex(unsigned long); //
  260974             :           /// \private
  260975             :           static SgIsOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  260976             : 
  260977             :           /// \private
  260978             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  260979             :           /// \private
  260980             :           static void resetValidFreepointers(); //
  260981             :           /// \private
  260982             :           static unsigned long getNumberOfLastValidPointer(); //
  260983             : 
  260984             : 
  260985             : #if defined(INLINE_FUNCTIONS)
  260986             :       /*! \brief returns pointer to newly allocated IR node */
  260987             :           inline void *operator new (size_t size);
  260988             : #else
  260989             :       /*! \brief returns pointer to newly allocated IR node */
  260990             :           void *operator new (size_t size);
  260991             : #endif
  260992             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  260993             :           void operator delete (void* pointer, size_t size);
  260994             : 
  260995             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  260996           0 :           void operator delete (void* pointer)
  260997             :              {
  260998             :             // This is the generated delete operator...
  260999           0 :                SgIsOp::operator delete (pointer,sizeof(SgIsOp));
  261000             :              }
  261001             : 
  261002             :       /*! \brief Returns the total number of IR nodes of this type */
  261003             :           static size_t numberOfNodes();
  261004             : 
  261005             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  261006             :           static size_t memoryUsage();
  261007             : 
  261008             :       // End of scope which started in IR nodes specific code 
  261009             :       /* */
  261010             : 
  261011             :       /* name Internal Functions
  261012             :           \brief Internal functions ... incomplete-documentation
  261013             : 
  261014             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261015             :           or by particularly knowledgeable users for specialized tools or applications.
  261016             : 
  261017             :           \internal We could not make these private because they are required by user for special purposes. And 
  261018             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  261019             :          
  261020             :        */
  261021             : 
  261022             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  261023             :        // overridden in every class by *generated* implementation
  261024             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  261025             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  261026             :        // MS: 06/28/02 container of names of variables or container indices 
  261027             :        // used used in the traversal to access AST successor nodes
  261028             :        // overridden in every class by *generated* implementation
  261029             :       /*! \brief container of names of variables or container indices used used in the traversal
  261030             :           to access AST successor nodes overridden in every class by *generated* implementation */
  261031             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  261032             : 
  261033             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  261034             :        // than all the vector copies. The implementation for these functions is generated for each class.
  261035             :       /*! \brief return number of children in the traversal successor list */
  261036             :           virtual size_t get_numberOfTraversalSuccessors() override;
  261037             :       /*! \brief index-based access to traversal successors by index number */
  261038             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  261039             :       /*! \brief index-based access to traversal successors by child node */
  261040             :           virtual size_t get_childIndex(SgNode *child) override;
  261041             : 
  261042             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  261043             :        // MS: 08/16/2002 method for generating RTI information
  261044             :       /*! \brief return C++ Runtime-Time-Information */
  261045             :           virtual RTIReturnType roseRTI() override;
  261046             : #endif
  261047             :       /* */
  261048             : 
  261049             : 
  261050             : 
  261051             :       /* name Deprecated Functions
  261052             :           \brief Deprecated functions ... incomplete-documentation
  261053             : 
  261054             :           These functions have been deprecated from use.
  261055             :        */
  261056             :       /* */
  261057             : 
  261058             :       /*! returns a C style string (char*) representing the class name */
  261059             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  261060             : 
  261061             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  261062             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  261063             : #if 0
  261064             :       /*! returns old style Sage II enum values */
  261065             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  261066             :       /*! returns old style Sage II enum values */
  261067             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  261068             : #endif
  261069             :       /* */
  261070             : 
  261071             : 
  261072             : 
  261073             : 
  261074             :      public:
  261075             :       /* name Traversal Support Functions
  261076             :           \brief Traversal support functions ... incomplete-documentation
  261077             : 
  261078             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261079             :           or by particularly knowledgable users for specialized tools or applications.
  261080             :        */
  261081             :       /* */
  261082             : 
  261083             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  261084             :        // (inferior to ROSE traversal mechanism, experimental).
  261085             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  261086             :        */
  261087             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  261088             : 
  261089             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  261090             :       /*! \brief support for the classic visitor pattern done in GoF */
  261091             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  261092             : 
  261093             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  261094             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  261095             :        */
  261096             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  261097             : 
  261098             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  261099             :        */
  261100             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  261101             : 
  261102             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  261103             :        // This traversal helps support internal tools that call static member functions.
  261104             :        // note: this function operates on the memory pools.
  261105             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  261106             :        */
  261107             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  261108             :       /* */
  261109             : 
  261110             : 
  261111             :      public:
  261112             :       /* name Memory Allocation Functions
  261113             :           \brief Memory allocations functions ... incomplete-documentation
  261114             : 
  261115             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261116             :           or by particularly knowledgable users for specialized tools or applications.
  261117             :        */
  261118             :       /* */
  261119             : 
  261120             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  261121             : 
  261122             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  261123             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  261124             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  261125             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  261126             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  261127             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  261128             :           being used with the AST File I/O mechanism.
  261129             :        */
  261130             :           virtual bool isInMemoryPool() override;
  261131             : 
  261132             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  261133             : 
  261134             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  261135             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  261136             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  261137             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  261138             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  261139             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  261140             :           being used with the AST File I/O mechanism.
  261141             :        */
  261142             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  261143             : 
  261144             :       // DQ (4/30/2006): Modified to be a const function.
  261145             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  261146             : 
  261147             :           This functions is part of general support for many possible tools to operate 
  261148             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  261149             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  261150             :           less than the set of pointers used by the AST file I/O. This is part of
  261151             :           work implemented by Andreas, and support tools such as the AST graph generation.
  261152             : 
  261153             :           \warning This function can return unexpected data members and thus the 
  261154             :                    order and the number of elements is unpredicable and subject 
  261155             :                    to change.
  261156             : 
  261157             :           \returns STL vector of pairs of SgNode* and strings
  261158             :        */
  261159             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  261160             : 
  261161             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  261162             : 
  261163             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  261164             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  261165             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  261166             : 
  261167             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  261168             :                    and subject to change.
  261169             :        */
  261170             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  261171             : 
  261172             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  261173             : 
  261174             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  261175             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  261176             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  261177             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  261178             : 
  261179             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  261180             : 
  261181             :           \returns long
  261182             :        */
  261183             :           virtual long getChildIndex( SgNode* childNode ) const override;
  261184             : 
  261185             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  261186             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  261187             :       /* \brief Constructor for use by AST File I/O Mechanism
  261188             : 
  261189             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  261190             :           which obtained via fast binary file I/O from disk.
  261191             :        */
  261192             :        // SgIsOp( SgIsOpStorageClass& source );
  261193             : 
  261194             : 
  261195             : 
  261196             : 
  261197             : 
  261198             :  // JH (10/24/2005): methods added to support the ast file IO
  261199             :     private:
  261200             : 
  261201             :       /* name AST Memory Allocation Support Functions
  261202             :           \brief Memory allocations support....
  261203             : 
  261204             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  261205             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  261206             :           and support the AST File I/O Mechanism.
  261207             :        */
  261208             :       /* */
  261209             : 
  261210             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  261211             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  261212             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  261213             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  261214             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  261215             :           a correspinding one in the AST_FILE_IO class!
  261216             :        */
  261217             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  261218             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  261219             :       /* \brief Typedef used for low level memory access.
  261220             :        */
  261221             :        // typedef unsigned char* TestType;
  261222             : 
  261223             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  261224             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  261225             :       /* \brief Typedef used to hold memory addresses as values.
  261226             :        */
  261227             :        // typedef unsigned long  AddressType;
  261228             : 
  261229             : 
  261230             : 
  261231             :        // necessary, to have direct access to the p_freepointer and the private methods !
  261232             :       /*! \brief friend class declaration to support AST File I/O */
  261233             :           friend class AST_FILE_IO;
  261234             : 
  261235             :       /*! \brief friend class declaration to support AST File I/O */
  261236             :           friend class SgIsOpStorageClass;
  261237             : 
  261238             :       /*! \brief friend class declaration to support AST File I/O */
  261239             :           friend class AstSpecificDataManagingClass;
  261240             : 
  261241             :       /*! \brief friend class declaration to support AST File I/O */
  261242             :           friend class AstSpecificDataManagingClassStorageClass;
  261243             :     public:
  261244             :       /*! \brief IR node constructor to support AST File I/O */
  261245             :           SgIsOp( const SgIsOpStorageClass& source );
  261246             : 
  261247             :  // private: // JJW hack
  261248             :        /*
  261249             :           name AST Memory Allocation Support Variables
  261250             :           Memory allocations support variables 
  261251             : 
  261252             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  261253             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  261254             :           and support the AST File I/O Mechanism.
  261255             :        */
  261256             :       /* */
  261257             : 
  261258             :     public:
  261259             : 
  261260             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  261261             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  261262             :       // virtual SgNode* addRegExpAttribute();
  261263             :       /*! \brief Support for AST matching using regular expression.
  261264             : 
  261265             :           This support is incomplete and the subject of current research to define 
  261266             :           RegEx trees to support inexact matching.
  261267             :        */
  261268             :           SgIsOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  261269             : 
  261270             : // *** COMMON CODE SECTION ENDS HERE ***
  261271             : 
  261272             : 
  261273             : // End of memberFunctionString
  261274             : // Start of memberFunctionString
  261275             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  261276             : 
  261277             :      // the generated cast function
  261278             :      // friend ROSE_DLL_API SgIsOp* isSgIsOp ( SgNode* s );
  261279             : 
  261280             :           typedef SgBinaryOp base_node_type;
  261281             : 
  261282             : 
  261283             : // End of memberFunctionString
  261284             : // Start of memberFunctionString
  261285             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  261286             : 
  261287             :           void post_construction_initialization() override;
  261288             : 
  261289             : 
  261290             : // End of memberFunctionString
  261291             : // Start of memberFunctionString
  261292             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  261293             : 
  261294           0 :           int precedence() const override { return  9; }
  261295             : 
  261296             : 
  261297             : // End of memberFunctionString
  261298             : 
  261299             : 
  261300             :      public: 
  261301             :          virtual ~SgIsOp();
  261302             : 
  261303             : 
  261304             :      public: 
  261305             :          SgIsOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  261306             :          SgIsOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  261307             : 
  261308             :     protected:
  261309             : 
  261310             :     friend struct Rose::Traits::generated::describe_node_t<SgIsOp>;
  261311             : 
  261312             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261313             : 
  261314             : 
  261315             :    };
  261316             : #endif
  261317             : 
  261318             : // postdeclarations for SgIsOp
  261319             : 
  261320             : /* #line 261321 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261321             : 
  261322             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  261323             : 
  261324             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261325             : 
  261326             : 
  261327             : /* #line 261328 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261328             : 
  261329             : 
  261330             : 
  261331             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261332             : 
  261333             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  261334             : //      This code is automatically generated for each 
  261335             : //      terminal and non-terminal within the defined 
  261336             : //      grammar.  There is a simple way to change the 
  261337             : //      code to fix bugs etc.  See the ROSE README file
  261338             : //      for directions.
  261339             : 
  261340             : // tps: (02/22/2010): Adding DLL export requirements
  261341             : #include "rosedll.h"
  261342             : 
  261343             : // predeclarations for SgIsNotOp
  261344             : 
  261345             : /* #line 261346 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261346             : 
  261347             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  261348             : 
  261349             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261350             : 
  261351             : #if 1
  261352             : // Class Definition for SgIsNotOp
  261353             : class ROSE_DLL_API SgIsNotOp  : public SgBinaryOp
  261354             :    {
  261355             :      public:
  261356             : 
  261357             : 
  261358             : /* #line 261359 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261359             : 
  261360             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  261361             : // Start of memberFunctionString
  261362             : /* #line 886 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  261363             : 
  261364             : /* #line 822 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  261365             : 
  261366             :        // DQ (6/20/2006): Used for all relational operators
  261367             :           virtual SgType* get_type() const override;
  261368             : 
  261369             : 
  261370             : 
  261371             : 
  261372             : // End of memberFunctionString
  261373             : // Start of memberFunctionString
  261374             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  261375             : 
  261376             : // *** COMMON CODE SECTION BEGINS HERE ***
  261377             : 
  261378             :     public:
  261379             : 
  261380             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  261381             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  261382             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  261383             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  261384             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  261385             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  261386             : 
  261387             :       /*! \brief returns a string representing the class name */
  261388             :           virtual std::string class_name() const override;
  261389             : 
  261390             :       /*! \brief returns new style SageIII enum values */
  261391             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  261392             : 
  261393             :       /*! \brief static variant value */
  261394             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  261395             :        // static const VariantT static_variant = V_SgIsNotOp;
  261396             :           enum { static_variant = V_SgIsNotOp };
  261397             : 
  261398             :        /* the generated cast function */
  261399             :       /*! \brief Casts pointer from base class to derived class */
  261400             :           ROSE_DLL_API friend       SgIsNotOp* isSgIsNotOp(       SgNode * s );
  261401             : 
  261402             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  261403             :           ROSE_DLL_API friend const SgIsNotOp* isSgIsNotOp( const SgNode * s );
  261404             : 
  261405             :      // ******************************************
  261406             :      // * Memory Pool / New / Delete
  261407             :      // ******************************************
  261408             : 
  261409             :      public:
  261410             :           /// \private
  261411             :           static const unsigned pool_size; //
  261412             :           /// \private
  261413             :           static std::vector<unsigned char *> pools; //
  261414             :           /// \private
  261415             :           static SgIsNotOp * next_node; // 
  261416             : 
  261417             :           /// \private
  261418             :           static unsigned long initializeStorageClassArray(SgIsNotOpStorageClass *); //
  261419             : 
  261420             :           /// \private
  261421             :           static void clearMemoryPool(); //
  261422             :           static void deleteMemoryPool(); //
  261423             : 
  261424             :           /// \private
  261425             :           static void extendMemoryPoolForFileIO(); //
  261426             : 
  261427             :           /// \private
  261428             :           static SgIsNotOp * getPointerFromGlobalIndex(unsigned long); //
  261429             :           /// \private
  261430             :           static SgIsNotOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  261431             : 
  261432             :           /// \private
  261433             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  261434             :           /// \private
  261435             :           static void resetValidFreepointers(); //
  261436             :           /// \private
  261437             :           static unsigned long getNumberOfLastValidPointer(); //
  261438             : 
  261439             : 
  261440             : #if defined(INLINE_FUNCTIONS)
  261441             :       /*! \brief returns pointer to newly allocated IR node */
  261442             :           inline void *operator new (size_t size);
  261443             : #else
  261444             :       /*! \brief returns pointer to newly allocated IR node */
  261445             :           void *operator new (size_t size);
  261446             : #endif
  261447             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  261448             :           void operator delete (void* pointer, size_t size);
  261449             : 
  261450             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  261451           0 :           void operator delete (void* pointer)
  261452             :              {
  261453             :             // This is the generated delete operator...
  261454           0 :                SgIsNotOp::operator delete (pointer,sizeof(SgIsNotOp));
  261455             :              }
  261456             : 
  261457             :       /*! \brief Returns the total number of IR nodes of this type */
  261458             :           static size_t numberOfNodes();
  261459             : 
  261460             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  261461             :           static size_t memoryUsage();
  261462             : 
  261463             :       // End of scope which started in IR nodes specific code 
  261464             :       /* */
  261465             : 
  261466             :       /* name Internal Functions
  261467             :           \brief Internal functions ... incomplete-documentation
  261468             : 
  261469             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261470             :           or by particularly knowledgeable users for specialized tools or applications.
  261471             : 
  261472             :           \internal We could not make these private because they are required by user for special purposes. And 
  261473             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  261474             :          
  261475             :        */
  261476             : 
  261477             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  261478             :        // overridden in every class by *generated* implementation
  261479             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  261480             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  261481             :        // MS: 06/28/02 container of names of variables or container indices 
  261482             :        // used used in the traversal to access AST successor nodes
  261483             :        // overridden in every class by *generated* implementation
  261484             :       /*! \brief container of names of variables or container indices used used in the traversal
  261485             :           to access AST successor nodes overridden in every class by *generated* implementation */
  261486             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  261487             : 
  261488             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  261489             :        // than all the vector copies. The implementation for these functions is generated for each class.
  261490             :       /*! \brief return number of children in the traversal successor list */
  261491             :           virtual size_t get_numberOfTraversalSuccessors() override;
  261492             :       /*! \brief index-based access to traversal successors by index number */
  261493             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  261494             :       /*! \brief index-based access to traversal successors by child node */
  261495             :           virtual size_t get_childIndex(SgNode *child) override;
  261496             : 
  261497             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  261498             :        // MS: 08/16/2002 method for generating RTI information
  261499             :       /*! \brief return C++ Runtime-Time-Information */
  261500             :           virtual RTIReturnType roseRTI() override;
  261501             : #endif
  261502             :       /* */
  261503             : 
  261504             : 
  261505             : 
  261506             :       /* name Deprecated Functions
  261507             :           \brief Deprecated functions ... incomplete-documentation
  261508             : 
  261509             :           These functions have been deprecated from use.
  261510             :        */
  261511             :       /* */
  261512             : 
  261513             :       /*! returns a C style string (char*) representing the class name */
  261514             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  261515             : 
  261516             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  261517             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  261518             : #if 0
  261519             :       /*! returns old style Sage II enum values */
  261520             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  261521             :       /*! returns old style Sage II enum values */
  261522             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  261523             : #endif
  261524             :       /* */
  261525             : 
  261526             : 
  261527             : 
  261528             : 
  261529             :      public:
  261530             :       /* name Traversal Support Functions
  261531             :           \brief Traversal support functions ... incomplete-documentation
  261532             : 
  261533             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261534             :           or by particularly knowledgable users for specialized tools or applications.
  261535             :        */
  261536             :       /* */
  261537             : 
  261538             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  261539             :        // (inferior to ROSE traversal mechanism, experimental).
  261540             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  261541             :        */
  261542             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  261543             : 
  261544             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  261545             :       /*! \brief support for the classic visitor pattern done in GoF */
  261546             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  261547             : 
  261548             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  261549             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  261550             :        */
  261551             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  261552             : 
  261553             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  261554             :        */
  261555             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  261556             : 
  261557             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  261558             :        // This traversal helps support internal tools that call static member functions.
  261559             :        // note: this function operates on the memory pools.
  261560             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  261561             :        */
  261562             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  261563             :       /* */
  261564             : 
  261565             : 
  261566             :      public:
  261567             :       /* name Memory Allocation Functions
  261568             :           \brief Memory allocations functions ... incomplete-documentation
  261569             : 
  261570             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261571             :           or by particularly knowledgable users for specialized tools or applications.
  261572             :        */
  261573             :       /* */
  261574             : 
  261575             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  261576             : 
  261577             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  261578             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  261579             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  261580             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  261581             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  261582             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  261583             :           being used with the AST File I/O mechanism.
  261584             :        */
  261585             :           virtual bool isInMemoryPool() override;
  261586             : 
  261587             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  261588             : 
  261589             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  261590             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  261591             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  261592             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  261593             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  261594             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  261595             :           being used with the AST File I/O mechanism.
  261596             :        */
  261597             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  261598             : 
  261599             :       // DQ (4/30/2006): Modified to be a const function.
  261600             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  261601             : 
  261602             :           This functions is part of general support for many possible tools to operate 
  261603             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  261604             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  261605             :           less than the set of pointers used by the AST file I/O. This is part of
  261606             :           work implemented by Andreas, and support tools such as the AST graph generation.
  261607             : 
  261608             :           \warning This function can return unexpected data members and thus the 
  261609             :                    order and the number of elements is unpredicable and subject 
  261610             :                    to change.
  261611             : 
  261612             :           \returns STL vector of pairs of SgNode* and strings
  261613             :        */
  261614             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  261615             : 
  261616             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  261617             : 
  261618             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  261619             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  261620             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  261621             : 
  261622             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  261623             :                    and subject to change.
  261624             :        */
  261625             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  261626             : 
  261627             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  261628             : 
  261629             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  261630             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  261631             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  261632             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  261633             : 
  261634             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  261635             : 
  261636             :           \returns long
  261637             :        */
  261638             :           virtual long getChildIndex( SgNode* childNode ) const override;
  261639             : 
  261640             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  261641             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  261642             :       /* \brief Constructor for use by AST File I/O Mechanism
  261643             : 
  261644             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  261645             :           which obtained via fast binary file I/O from disk.
  261646             :        */
  261647             :        // SgIsNotOp( SgIsNotOpStorageClass& source );
  261648             : 
  261649             : 
  261650             : 
  261651             : 
  261652             : 
  261653             :  // JH (10/24/2005): methods added to support the ast file IO
  261654             :     private:
  261655             : 
  261656             :       /* name AST Memory Allocation Support Functions
  261657             :           \brief Memory allocations support....
  261658             : 
  261659             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  261660             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  261661             :           and support the AST File I/O Mechanism.
  261662             :        */
  261663             :       /* */
  261664             : 
  261665             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  261666             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  261667             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  261668             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  261669             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  261670             :           a correspinding one in the AST_FILE_IO class!
  261671             :        */
  261672             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  261673             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  261674             :       /* \brief Typedef used for low level memory access.
  261675             :        */
  261676             :        // typedef unsigned char* TestType;
  261677             : 
  261678             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  261679             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  261680             :       /* \brief Typedef used to hold memory addresses as values.
  261681             :        */
  261682             :        // typedef unsigned long  AddressType;
  261683             : 
  261684             : 
  261685             : 
  261686             :        // necessary, to have direct access to the p_freepointer and the private methods !
  261687             :       /*! \brief friend class declaration to support AST File I/O */
  261688             :           friend class AST_FILE_IO;
  261689             : 
  261690             :       /*! \brief friend class declaration to support AST File I/O */
  261691             :           friend class SgIsNotOpStorageClass;
  261692             : 
  261693             :       /*! \brief friend class declaration to support AST File I/O */
  261694             :           friend class AstSpecificDataManagingClass;
  261695             : 
  261696             :       /*! \brief friend class declaration to support AST File I/O */
  261697             :           friend class AstSpecificDataManagingClassStorageClass;
  261698             :     public:
  261699             :       /*! \brief IR node constructor to support AST File I/O */
  261700             :           SgIsNotOp( const SgIsNotOpStorageClass& source );
  261701             : 
  261702             :  // private: // JJW hack
  261703             :        /*
  261704             :           name AST Memory Allocation Support Variables
  261705             :           Memory allocations support variables 
  261706             : 
  261707             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  261708             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  261709             :           and support the AST File I/O Mechanism.
  261710             :        */
  261711             :       /* */
  261712             : 
  261713             :     public:
  261714             : 
  261715             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  261716             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  261717             :       // virtual SgNode* addRegExpAttribute();
  261718             :       /*! \brief Support for AST matching using regular expression.
  261719             : 
  261720             :           This support is incomplete and the subject of current research to define 
  261721             :           RegEx trees to support inexact matching.
  261722             :        */
  261723             :           SgIsNotOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  261724             : 
  261725             : // *** COMMON CODE SECTION ENDS HERE ***
  261726             : 
  261727             : 
  261728             : // End of memberFunctionString
  261729             : // Start of memberFunctionString
  261730             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  261731             : 
  261732             :      // the generated cast function
  261733             :      // friend ROSE_DLL_API SgIsNotOp* isSgIsNotOp ( SgNode* s );
  261734             : 
  261735             :           typedef SgBinaryOp base_node_type;
  261736             : 
  261737             : 
  261738             : // End of memberFunctionString
  261739             : // Start of memberFunctionString
  261740             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  261741             : 
  261742             :           void post_construction_initialization() override;
  261743             : 
  261744             : 
  261745             : // End of memberFunctionString
  261746             : // Start of memberFunctionString
  261747             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  261748             : 
  261749           0 :           int precedence() const override { return  9; }
  261750             : 
  261751             : 
  261752             : // End of memberFunctionString
  261753             : 
  261754             : 
  261755             :      public: 
  261756             :          virtual ~SgIsNotOp();
  261757             : 
  261758             : 
  261759             :      public: 
  261760             :          SgIsNotOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  261761             :          SgIsNotOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  261762             : 
  261763             :     protected:
  261764             : 
  261765             :     friend struct Rose::Traits::generated::describe_node_t<SgIsNotOp>;
  261766             : 
  261767             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261768             : 
  261769             : 
  261770             :    };
  261771             : #endif
  261772             : 
  261773             : // postdeclarations for SgIsNotOp
  261774             : 
  261775             : /* #line 261776 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261776             : 
  261777             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  261778             : 
  261779             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261780             : 
  261781             : 
  261782             : /* #line 261783 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261783             : 
  261784             : 
  261785             : 
  261786             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261787             : 
  261788             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  261789             : //      This code is automatically generated for each 
  261790             : //      terminal and non-terminal within the defined 
  261791             : //      grammar.  There is a simple way to change the 
  261792             : //      code to fix bugs etc.  See the ROSE README file
  261793             : //      for directions.
  261794             : 
  261795             : // tps: (02/22/2010): Adding DLL export requirements
  261796             : #include "rosedll.h"
  261797             : 
  261798             : // predeclarations for SgElementwiseOp
  261799             : 
  261800             : /* #line 261801 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261801             : 
  261802             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  261803             : 
  261804             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  261805             : 
  261806             : #if 1
  261807             : // Class Definition for SgElementwiseOp
  261808             : class ROSE_DLL_API SgElementwiseOp  : public SgBinaryOp
  261809             :    {
  261810             :      public:
  261811             : 
  261812             : 
  261813             : /* #line 261814 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  261814             : 
  261815             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  261816             : // Start of memberFunctionString
  261817             : /* #line 1425 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  261818             : 
  261819             : 
  261820             : 
  261821             :           // virtual bool isLValue() const;
  261822             :           // virtual bool isChildUsedAsLValue(const SgExpression* child) const; // INTERNAL Recursively call up the chain to answer the child
  261823             : 
  261824             : 
  261825             : 
  261826             : // End of memberFunctionString
  261827             : // Start of memberFunctionString
  261828             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  261829             : 
  261830             : // *** COMMON CODE SECTION BEGINS HERE ***
  261831             : 
  261832             :     public:
  261833             : 
  261834             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  261835             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  261836             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  261837             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  261838             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  261839             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  261840             : 
  261841             :       /*! \brief returns a string representing the class name */
  261842             :           virtual std::string class_name() const override;
  261843             : 
  261844             :       /*! \brief returns new style SageIII enum values */
  261845             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  261846             : 
  261847             :       /*! \brief static variant value */
  261848             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  261849             :        // static const VariantT static_variant = V_SgElementwiseOp;
  261850             :           enum { static_variant = V_SgElementwiseOp };
  261851             : 
  261852             :        /* the generated cast function */
  261853             :       /*! \brief Casts pointer from base class to derived class */
  261854             :           ROSE_DLL_API friend       SgElementwiseOp* isSgElementwiseOp(       SgNode * s );
  261855             : 
  261856             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  261857             :           ROSE_DLL_API friend const SgElementwiseOp* isSgElementwiseOp( const SgNode * s );
  261858             : 
  261859             :      // ******************************************
  261860             :      // * Memory Pool / New / Delete
  261861             :      // ******************************************
  261862             : 
  261863             :      public:
  261864             :           /// \private
  261865             :           static const unsigned pool_size; //
  261866             :           /// \private
  261867             :           static std::vector<unsigned char *> pools; //
  261868             :           /// \private
  261869             :           static SgElementwiseOp * next_node; // 
  261870             : 
  261871             :           /// \private
  261872             :           static unsigned long initializeStorageClassArray(SgElementwiseOpStorageClass *); //
  261873             : 
  261874             :           /// \private
  261875             :           static void clearMemoryPool(); //
  261876             :           static void deleteMemoryPool(); //
  261877             : 
  261878             :           /// \private
  261879             :           static void extendMemoryPoolForFileIO(); //
  261880             : 
  261881             :           /// \private
  261882             :           static SgElementwiseOp * getPointerFromGlobalIndex(unsigned long); //
  261883             :           /// \private
  261884             :           static SgElementwiseOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  261885             : 
  261886             :           /// \private
  261887             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  261888             :           /// \private
  261889             :           static void resetValidFreepointers(); //
  261890             :           /// \private
  261891             :           static unsigned long getNumberOfLastValidPointer(); //
  261892             : 
  261893             : 
  261894             : #if defined(INLINE_FUNCTIONS)
  261895             :       /*! \brief returns pointer to newly allocated IR node */
  261896             :           inline void *operator new (size_t size);
  261897             : #else
  261898             :       /*! \brief returns pointer to newly allocated IR node */
  261899             :           void *operator new (size_t size);
  261900             : #endif
  261901             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  261902             :           void operator delete (void* pointer, size_t size);
  261903             : 
  261904             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  261905           0 :           void operator delete (void* pointer)
  261906             :              {
  261907             :             // This is the generated delete operator...
  261908           0 :                SgElementwiseOp::operator delete (pointer,sizeof(SgElementwiseOp));
  261909             :              }
  261910             : 
  261911             :       /*! \brief Returns the total number of IR nodes of this type */
  261912             :           static size_t numberOfNodes();
  261913             : 
  261914             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  261915             :           static size_t memoryUsage();
  261916             : 
  261917             :       // End of scope which started in IR nodes specific code 
  261918             :       /* */
  261919             : 
  261920             :       /* name Internal Functions
  261921             :           \brief Internal functions ... incomplete-documentation
  261922             : 
  261923             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261924             :           or by particularly knowledgeable users for specialized tools or applications.
  261925             : 
  261926             :           \internal We could not make these private because they are required by user for special purposes. And 
  261927             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  261928             :          
  261929             :        */
  261930             : 
  261931             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  261932             :        // overridden in every class by *generated* implementation
  261933             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  261934             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  261935             :        // MS: 06/28/02 container of names of variables or container indices 
  261936             :        // used used in the traversal to access AST successor nodes
  261937             :        // overridden in every class by *generated* implementation
  261938             :       /*! \brief container of names of variables or container indices used used in the traversal
  261939             :           to access AST successor nodes overridden in every class by *generated* implementation */
  261940             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  261941             : 
  261942             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  261943             :        // than all the vector copies. The implementation for these functions is generated for each class.
  261944             :       /*! \brief return number of children in the traversal successor list */
  261945             :           virtual size_t get_numberOfTraversalSuccessors() override;
  261946             :       /*! \brief index-based access to traversal successors by index number */
  261947             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  261948             :       /*! \brief index-based access to traversal successors by child node */
  261949             :           virtual size_t get_childIndex(SgNode *child) override;
  261950             : 
  261951             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  261952             :        // MS: 08/16/2002 method for generating RTI information
  261953             :       /*! \brief return C++ Runtime-Time-Information */
  261954             :           virtual RTIReturnType roseRTI() override;
  261955             : #endif
  261956             :       /* */
  261957             : 
  261958             : 
  261959             : 
  261960             :       /* name Deprecated Functions
  261961             :           \brief Deprecated functions ... incomplete-documentation
  261962             : 
  261963             :           These functions have been deprecated from use.
  261964             :        */
  261965             :       /* */
  261966             : 
  261967             :       /*! returns a C style string (char*) representing the class name */
  261968             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  261969             : 
  261970             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  261971             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  261972             : #if 0
  261973             :       /*! returns old style Sage II enum values */
  261974             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  261975             :       /*! returns old style Sage II enum values */
  261976             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  261977             : #endif
  261978             :       /* */
  261979             : 
  261980             : 
  261981             : 
  261982             : 
  261983             :      public:
  261984             :       /* name Traversal Support Functions
  261985             :           \brief Traversal support functions ... incomplete-documentation
  261986             : 
  261987             :           These functions have been made public as part of the design, but they are suggested for internal use 
  261988             :           or by particularly knowledgable users for specialized tools or applications.
  261989             :        */
  261990             :       /* */
  261991             : 
  261992             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  261993             :        // (inferior to ROSE traversal mechanism, experimental).
  261994             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  261995             :        */
  261996             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  261997             : 
  261998             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  261999             :       /*! \brief support for the classic visitor pattern done in GoF */
  262000             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  262001             : 
  262002             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  262003             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  262004             :        */
  262005             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  262006             : 
  262007             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  262008             :        */
  262009             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  262010             : 
  262011             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  262012             :        // This traversal helps support internal tools that call static member functions.
  262013             :        // note: this function operates on the memory pools.
  262014             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  262015             :        */
  262016             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  262017             :       /* */
  262018             : 
  262019             : 
  262020             :      public:
  262021             :       /* name Memory Allocation Functions
  262022             :           \brief Memory allocations functions ... incomplete-documentation
  262023             : 
  262024             :           These functions have been made public as part of the design, but they are suggested for internal use 
  262025             :           or by particularly knowledgable users for specialized tools or applications.
  262026             :        */
  262027             :       /* */
  262028             : 
  262029             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  262030             : 
  262031             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  262032             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  262033             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  262034             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  262035             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  262036             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  262037             :           being used with the AST File I/O mechanism.
  262038             :        */
  262039             :           virtual bool isInMemoryPool() override;
  262040             : 
  262041             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  262042             : 
  262043             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  262044             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  262045             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  262046             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  262047             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  262048             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  262049             :           being used with the AST File I/O mechanism.
  262050             :        */
  262051             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  262052             : 
  262053             :       // DQ (4/30/2006): Modified to be a const function.
  262054             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  262055             : 
  262056             :           This functions is part of general support for many possible tools to operate 
  262057             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  262058             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  262059             :           less than the set of pointers used by the AST file I/O. This is part of
  262060             :           work implemented by Andreas, and support tools such as the AST graph generation.
  262061             : 
  262062             :           \warning This function can return unexpected data members and thus the 
  262063             :                    order and the number of elements is unpredicable and subject 
  262064             :                    to change.
  262065             : 
  262066             :           \returns STL vector of pairs of SgNode* and strings
  262067             :        */
  262068             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  262069             : 
  262070             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  262071             : 
  262072             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  262073             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  262074             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  262075             : 
  262076             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  262077             :                    and subject to change.
  262078             :        */
  262079             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  262080             : 
  262081             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  262082             : 
  262083             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  262084             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  262085             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  262086             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  262087             : 
  262088             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  262089             : 
  262090             :           \returns long
  262091             :        */
  262092             :           virtual long getChildIndex( SgNode* childNode ) const override;
  262093             : 
  262094             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  262095             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  262096             :       /* \brief Constructor for use by AST File I/O Mechanism
  262097             : 
  262098             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  262099             :           which obtained via fast binary file I/O from disk.
  262100             :        */
  262101             :        // SgElementwiseOp( SgElementwiseOpStorageClass& source );
  262102             : 
  262103             : 
  262104             : 
  262105             : 
  262106             : 
  262107             :  // JH (10/24/2005): methods added to support the ast file IO
  262108             :     private:
  262109             : 
  262110             :       /* name AST Memory Allocation Support Functions
  262111             :           \brief Memory allocations support....
  262112             : 
  262113             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  262114             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  262115             :           and support the AST File I/O Mechanism.
  262116             :        */
  262117             :       /* */
  262118             : 
  262119             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  262120             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  262121             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  262122             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  262123             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  262124             :           a correspinding one in the AST_FILE_IO class!
  262125             :        */
  262126             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  262127             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  262128             :       /* \brief Typedef used for low level memory access.
  262129             :        */
  262130             :        // typedef unsigned char* TestType;
  262131             : 
  262132             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  262133             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  262134             :       /* \brief Typedef used to hold memory addresses as values.
  262135             :        */
  262136             :        // typedef unsigned long  AddressType;
  262137             : 
  262138             : 
  262139             : 
  262140             :        // necessary, to have direct access to the p_freepointer and the private methods !
  262141             :       /*! \brief friend class declaration to support AST File I/O */
  262142             :           friend class AST_FILE_IO;
  262143             : 
  262144             :       /*! \brief friend class declaration to support AST File I/O */
  262145             :           friend class SgElementwiseOpStorageClass;
  262146             : 
  262147             :       /*! \brief friend class declaration to support AST File I/O */
  262148             :           friend class AstSpecificDataManagingClass;
  262149             : 
  262150             :       /*! \brief friend class declaration to support AST File I/O */
  262151             :           friend class AstSpecificDataManagingClassStorageClass;
  262152             :     public:
  262153             :       /*! \brief IR node constructor to support AST File I/O */
  262154             :           SgElementwiseOp( const SgElementwiseOpStorageClass& source );
  262155             : 
  262156             :  // private: // JJW hack
  262157             :        /*
  262158             :           name AST Memory Allocation Support Variables
  262159             :           Memory allocations support variables 
  262160             : 
  262161             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  262162             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  262163             :           and support the AST File I/O Mechanism.
  262164             :        */
  262165             :       /* */
  262166             : 
  262167             :     public:
  262168             : 
  262169             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  262170             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  262171             :       // virtual SgNode* addRegExpAttribute();
  262172             :       /*! \brief Support for AST matching using regular expression.
  262173             : 
  262174             :           This support is incomplete and the subject of current research to define 
  262175             :           RegEx trees to support inexact matching.
  262176             :        */
  262177             :           SgElementwiseOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  262178             : 
  262179             : // *** COMMON CODE SECTION ENDS HERE ***
  262180             : 
  262181             : 
  262182             : // End of memberFunctionString
  262183             : // Start of memberFunctionString
  262184             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  262185             : 
  262186             :      // the generated cast function
  262187             :      // friend ROSE_DLL_API SgElementwiseOp* isSgElementwiseOp ( SgNode* s );
  262188             : 
  262189             :           typedef SgBinaryOp base_node_type;
  262190             : 
  262191             : 
  262192             : // End of memberFunctionString
  262193             : // Start of memberFunctionString
  262194             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  262195             : 
  262196             :           void post_construction_initialization() override;
  262197             : 
  262198             : 
  262199             : // End of memberFunctionString
  262200             : 
  262201             : 
  262202             :      public: 
  262203             :          virtual ~SgElementwiseOp();
  262204             : 
  262205             : 
  262206             :      public: 
  262207             :          SgElementwiseOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  262208             :          SgElementwiseOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  262209             : 
  262210             :     protected:
  262211             : 
  262212             :     friend struct Rose::Traits::generated::describe_node_t<SgElementwiseOp>;
  262213             : 
  262214             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262215             : 
  262216             : 
  262217             :    };
  262218             : #endif
  262219             : 
  262220             : // postdeclarations for SgElementwiseOp
  262221             : 
  262222             : /* #line 262223 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262223             : 
  262224             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  262225             : 
  262226             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262227             : 
  262228             : 
  262229             : /* #line 262230 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262230             : 
  262231             : 
  262232             : 
  262233             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262234             : 
  262235             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  262236             : //      This code is automatically generated for each 
  262237             : //      terminal and non-terminal within the defined 
  262238             : //      grammar.  There is a simple way to change the 
  262239             : //      code to fix bugs etc.  See the ROSE README file
  262240             : //      for directions.
  262241             : 
  262242             : // tps: (02/22/2010): Adding DLL export requirements
  262243             : #include "rosedll.h"
  262244             : 
  262245             : // predeclarations for SgElementwiseMultiplyOp
  262246             : 
  262247             : /* #line 262248 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262248             : 
  262249             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  262250             : 
  262251             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262252             : 
  262253             : #if 1
  262254             : // Class Definition for SgElementwiseMultiplyOp
  262255             : class ROSE_DLL_API SgElementwiseMultiplyOp  : public SgElementwiseOp
  262256             :    {
  262257             :      public:
  262258             : 
  262259             : 
  262260             : /* #line 262261 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262261             : 
  262262             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  262263             : // Start of memberFunctionString
  262264             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  262265             : 
  262266             : // *** COMMON CODE SECTION BEGINS HERE ***
  262267             : 
  262268             :     public:
  262269             : 
  262270             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  262271             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  262272             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  262273             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  262274             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  262275             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  262276             : 
  262277             :       /*! \brief returns a string representing the class name */
  262278             :           virtual std::string class_name() const override;
  262279             : 
  262280             :       /*! \brief returns new style SageIII enum values */
  262281             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  262282             : 
  262283             :       /*! \brief static variant value */
  262284             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  262285             :        // static const VariantT static_variant = V_SgElementwiseMultiplyOp;
  262286             :           enum { static_variant = V_SgElementwiseMultiplyOp };
  262287             : 
  262288             :        /* the generated cast function */
  262289             :       /*! \brief Casts pointer from base class to derived class */
  262290             :           ROSE_DLL_API friend       SgElementwiseMultiplyOp* isSgElementwiseMultiplyOp(       SgNode * s );
  262291             : 
  262292             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  262293             :           ROSE_DLL_API friend const SgElementwiseMultiplyOp* isSgElementwiseMultiplyOp( const SgNode * s );
  262294             : 
  262295             :      // ******************************************
  262296             :      // * Memory Pool / New / Delete
  262297             :      // ******************************************
  262298             : 
  262299             :      public:
  262300             :           /// \private
  262301             :           static const unsigned pool_size; //
  262302             :           /// \private
  262303             :           static std::vector<unsigned char *> pools; //
  262304             :           /// \private
  262305             :           static SgElementwiseMultiplyOp * next_node; // 
  262306             : 
  262307             :           /// \private
  262308             :           static unsigned long initializeStorageClassArray(SgElementwiseMultiplyOpStorageClass *); //
  262309             : 
  262310             :           /// \private
  262311             :           static void clearMemoryPool(); //
  262312             :           static void deleteMemoryPool(); //
  262313             : 
  262314             :           /// \private
  262315             :           static void extendMemoryPoolForFileIO(); //
  262316             : 
  262317             :           /// \private
  262318             :           static SgElementwiseMultiplyOp * getPointerFromGlobalIndex(unsigned long); //
  262319             :           /// \private
  262320             :           static SgElementwiseMultiplyOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  262321             : 
  262322             :           /// \private
  262323             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  262324             :           /// \private
  262325             :           static void resetValidFreepointers(); //
  262326             :           /// \private
  262327             :           static unsigned long getNumberOfLastValidPointer(); //
  262328             : 
  262329             : 
  262330             : #if defined(INLINE_FUNCTIONS)
  262331             :       /*! \brief returns pointer to newly allocated IR node */
  262332             :           inline void *operator new (size_t size);
  262333             : #else
  262334             :       /*! \brief returns pointer to newly allocated IR node */
  262335             :           void *operator new (size_t size);
  262336             : #endif
  262337             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  262338             :           void operator delete (void* pointer, size_t size);
  262339             : 
  262340             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  262341           0 :           void operator delete (void* pointer)
  262342             :              {
  262343             :             // This is the generated delete operator...
  262344           0 :                SgElementwiseMultiplyOp::operator delete (pointer,sizeof(SgElementwiseMultiplyOp));
  262345             :              }
  262346             : 
  262347             :       /*! \brief Returns the total number of IR nodes of this type */
  262348             :           static size_t numberOfNodes();
  262349             : 
  262350             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  262351             :           static size_t memoryUsage();
  262352             : 
  262353             :       // End of scope which started in IR nodes specific code 
  262354             :       /* */
  262355             : 
  262356             :       /* name Internal Functions
  262357             :           \brief Internal functions ... incomplete-documentation
  262358             : 
  262359             :           These functions have been made public as part of the design, but they are suggested for internal use 
  262360             :           or by particularly knowledgeable users for specialized tools or applications.
  262361             : 
  262362             :           \internal We could not make these private because they are required by user for special purposes. And 
  262363             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  262364             :          
  262365             :        */
  262366             : 
  262367             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  262368             :        // overridden in every class by *generated* implementation
  262369             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  262370             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  262371             :        // MS: 06/28/02 container of names of variables or container indices 
  262372             :        // used used in the traversal to access AST successor nodes
  262373             :        // overridden in every class by *generated* implementation
  262374             :       /*! \brief container of names of variables or container indices used used in the traversal
  262375             :           to access AST successor nodes overridden in every class by *generated* implementation */
  262376             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  262377             : 
  262378             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  262379             :        // than all the vector copies. The implementation for these functions is generated for each class.
  262380             :       /*! \brief return number of children in the traversal successor list */
  262381             :           virtual size_t get_numberOfTraversalSuccessors() override;
  262382             :       /*! \brief index-based access to traversal successors by index number */
  262383             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  262384             :       /*! \brief index-based access to traversal successors by child node */
  262385             :           virtual size_t get_childIndex(SgNode *child) override;
  262386             : 
  262387             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  262388             :        // MS: 08/16/2002 method for generating RTI information
  262389             :       /*! \brief return C++ Runtime-Time-Information */
  262390             :           virtual RTIReturnType roseRTI() override;
  262391             : #endif
  262392             :       /* */
  262393             : 
  262394             : 
  262395             : 
  262396             :       /* name Deprecated Functions
  262397             :           \brief Deprecated functions ... incomplete-documentation
  262398             : 
  262399             :           These functions have been deprecated from use.
  262400             :        */
  262401             :       /* */
  262402             : 
  262403             :       /*! returns a C style string (char*) representing the class name */
  262404             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  262405             : 
  262406             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  262407             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  262408             : #if 0
  262409             :       /*! returns old style Sage II enum values */
  262410             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  262411             :       /*! returns old style Sage II enum values */
  262412             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  262413             : #endif
  262414             :       /* */
  262415             : 
  262416             : 
  262417             : 
  262418             : 
  262419             :      public:
  262420             :       /* name Traversal Support Functions
  262421             :           \brief Traversal support functions ... incomplete-documentation
  262422             : 
  262423             :           These functions have been made public as part of the design, but they are suggested for internal use 
  262424             :           or by particularly knowledgable users for specialized tools or applications.
  262425             :        */
  262426             :       /* */
  262427             : 
  262428             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  262429             :        // (inferior to ROSE traversal mechanism, experimental).
  262430             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  262431             :        */
  262432             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  262433             : 
  262434             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  262435             :       /*! \brief support for the classic visitor pattern done in GoF */
  262436             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  262437             : 
  262438             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  262439             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  262440             :        */
  262441             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  262442             : 
  262443             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  262444             :        */
  262445             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  262446             : 
  262447             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  262448             :        // This traversal helps support internal tools that call static member functions.
  262449             :        // note: this function operates on the memory pools.
  262450             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  262451             :        */
  262452             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  262453             :       /* */
  262454             : 
  262455             : 
  262456             :      public:
  262457             :       /* name Memory Allocation Functions
  262458             :           \brief Memory allocations functions ... incomplete-documentation
  262459             : 
  262460             :           These functions have been made public as part of the design, but they are suggested for internal use 
  262461             :           or by particularly knowledgable users for specialized tools or applications.
  262462             :        */
  262463             :       /* */
  262464             : 
  262465             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  262466             : 
  262467             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  262468             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  262469             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  262470             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  262471             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  262472             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  262473             :           being used with the AST File I/O mechanism.
  262474             :        */
  262475             :           virtual bool isInMemoryPool() override;
  262476             : 
  262477             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  262478             : 
  262479             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  262480             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  262481             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  262482             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  262483             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  262484             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  262485             :           being used with the AST File I/O mechanism.
  262486             :        */
  262487             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  262488             : 
  262489             :       // DQ (4/30/2006): Modified to be a const function.
  262490             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  262491             : 
  262492             :           This functions is part of general support for many possible tools to operate 
  262493             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  262494             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  262495             :           less than the set of pointers used by the AST file I/O. This is part of
  262496             :           work implemented by Andreas, and support tools such as the AST graph generation.
  262497             : 
  262498             :           \warning This function can return unexpected data members and thus the 
  262499             :                    order and the number of elements is unpredicable and subject 
  262500             :                    to change.
  262501             : 
  262502             :           \returns STL vector of pairs of SgNode* and strings
  262503             :        */
  262504             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  262505             : 
  262506             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  262507             : 
  262508             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  262509             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  262510             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  262511             : 
  262512             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  262513             :                    and subject to change.
  262514             :        */
  262515             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  262516             : 
  262517             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  262518             : 
  262519             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  262520             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  262521             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  262522             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  262523             : 
  262524             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  262525             : 
  262526             :           \returns long
  262527             :        */
  262528             :           virtual long getChildIndex( SgNode* childNode ) const override;
  262529             : 
  262530             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  262531             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  262532             :       /* \brief Constructor for use by AST File I/O Mechanism
  262533             : 
  262534             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  262535             :           which obtained via fast binary file I/O from disk.
  262536             :        */
  262537             :        // SgElementwiseMultiplyOp( SgElementwiseMultiplyOpStorageClass& source );
  262538             : 
  262539             : 
  262540             : 
  262541             : 
  262542             : 
  262543             :  // JH (10/24/2005): methods added to support the ast file IO
  262544             :     private:
  262545             : 
  262546             :       /* name AST Memory Allocation Support Functions
  262547             :           \brief Memory allocations support....
  262548             : 
  262549             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  262550             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  262551             :           and support the AST File I/O Mechanism.
  262552             :        */
  262553             :       /* */
  262554             : 
  262555             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  262556             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  262557             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  262558             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  262559             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  262560             :           a correspinding one in the AST_FILE_IO class!
  262561             :        */
  262562             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  262563             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  262564             :       /* \brief Typedef used for low level memory access.
  262565             :        */
  262566             :        // typedef unsigned char* TestType;
  262567             : 
  262568             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  262569             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  262570             :       /* \brief Typedef used to hold memory addresses as values.
  262571             :        */
  262572             :        // typedef unsigned long  AddressType;
  262573             : 
  262574             : 
  262575             : 
  262576             :        // necessary, to have direct access to the p_freepointer and the private methods !
  262577             :       /*! \brief friend class declaration to support AST File I/O */
  262578             :           friend class AST_FILE_IO;
  262579             : 
  262580             :       /*! \brief friend class declaration to support AST File I/O */
  262581             :           friend class SgElementwiseMultiplyOpStorageClass;
  262582             : 
  262583             :       /*! \brief friend class declaration to support AST File I/O */
  262584             :           friend class AstSpecificDataManagingClass;
  262585             : 
  262586             :       /*! \brief friend class declaration to support AST File I/O */
  262587             :           friend class AstSpecificDataManagingClassStorageClass;
  262588             :     public:
  262589             :       /*! \brief IR node constructor to support AST File I/O */
  262590             :           SgElementwiseMultiplyOp( const SgElementwiseMultiplyOpStorageClass& source );
  262591             : 
  262592             :  // private: // JJW hack
  262593             :        /*
  262594             :           name AST Memory Allocation Support Variables
  262595             :           Memory allocations support variables 
  262596             : 
  262597             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  262598             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  262599             :           and support the AST File I/O Mechanism.
  262600             :        */
  262601             :       /* */
  262602             : 
  262603             :     public:
  262604             : 
  262605             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  262606             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  262607             :       // virtual SgNode* addRegExpAttribute();
  262608             :       /*! \brief Support for AST matching using regular expression.
  262609             : 
  262610             :           This support is incomplete and the subject of current research to define 
  262611             :           RegEx trees to support inexact matching.
  262612             :        */
  262613             :           SgElementwiseMultiplyOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  262614             : 
  262615             : // *** COMMON CODE SECTION ENDS HERE ***
  262616             : 
  262617             : 
  262618             : // End of memberFunctionString
  262619             : // Start of memberFunctionString
  262620             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  262621             : 
  262622             :      // the generated cast function
  262623             :      // friend ROSE_DLL_API SgElementwiseMultiplyOp* isSgElementwiseMultiplyOp ( SgNode* s );
  262624             : 
  262625             :           typedef SgElementwiseOp base_node_type;
  262626             : 
  262627             : 
  262628             : // End of memberFunctionString
  262629             : // Start of memberFunctionString
  262630             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  262631             : 
  262632             :           void post_construction_initialization() override;
  262633             : 
  262634             : 
  262635             : // End of memberFunctionString
  262636             : // Start of memberFunctionString
  262637             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  262638             : 
  262639           0 :           int precedence() const override { return 13; }
  262640             : 
  262641             : 
  262642             : // End of memberFunctionString
  262643             : 
  262644             : 
  262645             :      public: 
  262646             :          virtual ~SgElementwiseMultiplyOp();
  262647             : 
  262648             : 
  262649             :      public: 
  262650             :          SgElementwiseMultiplyOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  262651             :          SgElementwiseMultiplyOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  262652             : 
  262653             :     protected:
  262654             : 
  262655             :     friend struct Rose::Traits::generated::describe_node_t<SgElementwiseMultiplyOp>;
  262656             : 
  262657             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262658             : 
  262659             : 
  262660             :    };
  262661             : #endif
  262662             : 
  262663             : // postdeclarations for SgElementwiseMultiplyOp
  262664             : 
  262665             : /* #line 262666 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262666             : 
  262667             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  262668             : 
  262669             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262670             : 
  262671             : 
  262672             : /* #line 262673 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262673             : 
  262674             : 
  262675             : 
  262676             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262677             : 
  262678             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  262679             : //      This code is automatically generated for each 
  262680             : //      terminal and non-terminal within the defined 
  262681             : //      grammar.  There is a simple way to change the 
  262682             : //      code to fix bugs etc.  See the ROSE README file
  262683             : //      for directions.
  262684             : 
  262685             : // tps: (02/22/2010): Adding DLL export requirements
  262686             : #include "rosedll.h"
  262687             : 
  262688             : // predeclarations for SgElementwisePowerOp
  262689             : 
  262690             : /* #line 262691 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262691             : 
  262692             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  262693             : 
  262694             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  262695             : 
  262696             : #if 1
  262697             : // Class Definition for SgElementwisePowerOp
  262698             : class ROSE_DLL_API SgElementwisePowerOp  : public SgElementwiseOp
  262699             :    {
  262700             :      public:
  262701             : 
  262702             : 
  262703             : /* #line 262704 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  262704             : 
  262705             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  262706             : // Start of memberFunctionString
  262707             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  262708             : 
  262709             : // *** COMMON CODE SECTION BEGINS HERE ***
  262710             : 
  262711             :     public:
  262712             : 
  262713             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  262714             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  262715             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  262716             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  262717             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  262718             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  262719             : 
  262720             :       /*! \brief returns a string representing the class name */
  262721             :           virtual std::string class_name() const override;
  262722             : 
  262723             :       /*! \brief returns new style SageIII enum values */
  262724             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  262725             : 
  262726             :       /*! \brief static variant value */
  262727             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  262728             :        // static const VariantT static_variant = V_SgElementwisePowerOp;
  262729             :           enum { static_variant = V_SgElementwisePowerOp };
  262730             : 
  262731             :        /* the generated cast function */
  262732             :       /*! \brief Casts pointer from base class to derived class */
  262733             :           ROSE_DLL_API friend       SgElementwisePowerOp* isSgElementwisePowerOp(       SgNode * s );
  262734             : 
  262735             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  262736             :           ROSE_DLL_API friend const SgElementwisePowerOp* isSgElementwisePowerOp( const SgNode * s );
  262737             : 
  262738             :      // ******************************************
  262739             :      // * Memory Pool / New / Delete
  262740             :      // ******************************************
  262741             : 
  262742             :      public:
  262743             :           /// \private
  262744             :           static const unsigned pool_size; //
  262745             :           /// \private
  262746             :           static std::vector<unsigned char *> pools; //
  262747             :           /// \private
  262748             :           static SgElementwisePowerOp * next_node; // 
  262749             : 
  262750             :           /// \private
  262751             :           static unsigned long initializeStorageClassArray(SgElementwisePowerOpStorageClass *); //
  262752             : 
  262753             :           /// \private
  262754             :           static void clearMemoryPool(); //
  262755             :           static void deleteMemoryPool(); //
  262756             : 
  262757             :           /// \private
  262758             :           static void extendMemoryPoolForFileIO(); //
  262759             : 
  262760             :           /// \private
  262761             :           static SgElementwisePowerOp * getPointerFromGlobalIndex(unsigned long); //
  262762             :           /// \private
  262763             :           static SgElementwisePowerOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  262764             : 
  262765             :           /// \private
  262766             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  262767             :           /// \private
  262768             :           static void resetValidFreepointers(); //
  262769             :           /// \private
  262770             :           static unsigned long getNumberOfLastValidPointer(); //
  262771             : 
  262772             : 
  262773             : #if defined(INLINE_FUNCTIONS)
  262774             :       /*! \brief returns pointer to newly allocated IR node */
  262775             :           inline void *operator new (size_t size);
  262776             : #else
  262777             :       /*! \brief returns pointer to newly allocated IR node */
  262778             :           void *operator new (size_t size);
  262779             : #endif
  262780             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  262781             :           void operator delete (void* pointer, size_t size);
  262782             : 
  262783             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  262784           0 :           void operator delete (void* pointer)
  262785             :              {
  262786             :             // This is the generated delete operator...
  262787           0 :                SgElementwisePowerOp::operator delete (pointer,sizeof(SgElementwisePowerOp));
  262788             :              }
  262789             : 
  262790             :       /*! \brief Returns the total number of IR nodes of this type */
  262791             :           static size_t numberOfNodes();
  262792             : 
  262793             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  262794             :           static size_t memoryUsage();
  262795             : 
  262796             :       // End of scope which started in IR nodes specific code 
  262797             :       /* */
  262798             : 
  262799             :       /* name Internal Functions
  262800             :           \brief Internal functions ... incomplete-documentation
  262801             : 
  262802             :           These functions have been made public as part of the design, but they are suggested for internal use 
  262803             :           or by particularly knowledgeable users for specialized tools or applications.
  262804             : 
  262805             :           \internal We could not make these private because they are required by user for special purposes. And 
  262806             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  262807             :          
  262808             :        */
  262809             : 
  262810             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  262811             :        // overridden in every class by *generated* implementation
  262812             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  262813             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  262814             :        // MS: 06/28/02 container of names of variables or container indices 
  262815             :        // used used in the traversal to access AST successor nodes
  262816             :        // overridden in every class by *generated* implementation
  262817             :       /*! \brief container of names of variables or container indices used used in the traversal
  262818             :           to access AST successor nodes overridden in every class by *generated* implementation */
  262819             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  262820             : 
  262821             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  262822             :        // than all the vector copies. The implementation for these functions is generated for each class.
  262823             :       /*! \brief return number of children in the traversal successor list */
  262824             :           virtual size_t get_numberOfTraversalSuccessors() override;
  262825             :       /*! \brief index-based access to traversal successors by index number */
  262826             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  262827             :       /*! \brief index-based access to traversal successors by child node */
  262828             :           virtual size_t get_childIndex(SgNode *child) override;
  262829             : 
  262830             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  262831             :        // MS: 08/16/2002 method for generating RTI information
  262832             :       /*! \brief return C++ Runtime-Time-Information */
  262833             :           virtual RTIReturnType roseRTI() override;
  262834             : #endif
  262835             :       /* */
  262836             : 
  262837             : 
  262838             : 
  262839             :       /* name Deprecated Functions
  262840             :           \brief Deprecated functions ... incomplete-documentation
  262841             : 
  262842             :           These functions have been deprecated from use.
  262843             :        */
  262844             :       /* */
  262845             : 
  262846             :       /*! returns a C style string (char*) representing the class name */
  262847             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  262848             : 
  262849             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  262850             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  262851             : #if 0
  262852             :       /*! returns old style Sage II enum values */
  262853             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  262854             :       /*! returns old style Sage II enum values */
  262855             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  262856             : #endif
  262857             :       /* */
  262858             : 
  262859             : 
  262860             : 
  262861             : 
  262862             :      public:
  262863             :       /* name Traversal Support Functions
  262864             :           \brief Traversal support functions ... incomplete-documentation
  262865             : 
  262866             :           These functions have been made public as part of the design, but they are suggested for internal use 
  262867             :           or by particularly knowledgable users for specialized tools or applications.
  262868             :        */
  262869             :       /* */
  262870             : 
  262871             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  262872             :        // (inferior to ROSE traversal mechanism, experimental).
  262873             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  262874             :        */
  262875             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  262876             : 
  262877             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  262878             :       /*! \brief support for the classic visitor pattern done in GoF */
  262879             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  262880             : 
  262881             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  262882             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  262883             :        */
  262884             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  262885             : 
  262886             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  262887             :        */
  262888             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  262889             : 
  262890             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  262891             :        // This traversal helps support internal tools that call static member functions.
  262892             :        // note: this function operates on the memory pools.
  262893             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  262894             :        */
  262895             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  262896             :       /* */
  262897             : 
  262898             : 
  262899             :      public:
  262900             :       /* name Memory Allocation Functions
  262901             :           \brief Memory allocations functions ... incomplete-documentation
  262902             : 
  262903             :           These functions have been made public as part of the design, but they are suggested for internal use 
  262904             :           or by particularly knowledgable users for specialized tools or applications.
  262905             :        */
  262906             :       /* */
  262907             : 
  262908             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  262909             : 
  262910             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  262911             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  262912             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  262913             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  262914             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  262915             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  262916             :           being used with the AST File I/O mechanism.
  262917             :        */
  262918             :           virtual bool isInMemoryPool() override;
  262919             : 
  262920             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  262921             : 
  262922             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  262923             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  262924             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  262925             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  262926             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  262927             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  262928             :           being used with the AST File I/O mechanism.
  262929             :        */
  262930             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  262931             : 
  262932             :       // DQ (4/30/2006): Modified to be a const function.
  262933             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  262934             : 
  262935             :           This functions is part of general support for many possible tools to operate 
  262936             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  262937             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  262938             :           less than the set of pointers used by the AST file I/O. This is part of
  262939             :           work implemented by Andreas, and support tools such as the AST graph generation.
  262940             : 
  262941             :           \warning This function can return unexpected data members and thus the 
  262942             :                    order and the number of elements is unpredicable and subject 
  262943             :                    to change.
  262944             : 
  262945             :           \returns STL vector of pairs of SgNode* and strings
  262946             :        */
  262947             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  262948             : 
  262949             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  262950             : 
  262951             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  262952             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  262953             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  262954             : 
  262955             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  262956             :                    and subject to change.
  262957             :        */
  262958             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  262959             : 
  262960             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  262961             : 
  262962             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  262963             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  262964             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  262965             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  262966             : 
  262967             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  262968             : 
  262969             :           \returns long
  262970             :        */
  262971             :           virtual long getChildIndex( SgNode* childNode ) const override;
  262972             : 
  262973             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  262974             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  262975             :       /* \brief Constructor for use by AST File I/O Mechanism
  262976             : 
  262977             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  262978             :           which obtained via fast binary file I/O from disk.
  262979             :        */
  262980             :        // SgElementwisePowerOp( SgElementwisePowerOpStorageClass& source );
  262981             : 
  262982             : 
  262983             : 
  262984             : 
  262985             : 
  262986             :  // JH (10/24/2005): methods added to support the ast file IO
  262987             :     private:
  262988             : 
  262989             :       /* name AST Memory Allocation Support Functions
  262990             :           \brief Memory allocations support....
  262991             : 
  262992             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  262993             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  262994             :           and support the AST File I/O Mechanism.
  262995             :        */
  262996             :       /* */
  262997             : 
  262998             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  262999             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  263000             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  263001             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  263002             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  263003             :           a correspinding one in the AST_FILE_IO class!
  263004             :        */
  263005             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  263006             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263007             :       /* \brief Typedef used for low level memory access.
  263008             :        */
  263009             :        // typedef unsigned char* TestType;
  263010             : 
  263011             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  263012             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263013             :       /* \brief Typedef used to hold memory addresses as values.
  263014             :        */
  263015             :        // typedef unsigned long  AddressType;
  263016             : 
  263017             : 
  263018             : 
  263019             :        // necessary, to have direct access to the p_freepointer and the private methods !
  263020             :       /*! \brief friend class declaration to support AST File I/O */
  263021             :           friend class AST_FILE_IO;
  263022             : 
  263023             :       /*! \brief friend class declaration to support AST File I/O */
  263024             :           friend class SgElementwisePowerOpStorageClass;
  263025             : 
  263026             :       /*! \brief friend class declaration to support AST File I/O */
  263027             :           friend class AstSpecificDataManagingClass;
  263028             : 
  263029             :       /*! \brief friend class declaration to support AST File I/O */
  263030             :           friend class AstSpecificDataManagingClassStorageClass;
  263031             :     public:
  263032             :       /*! \brief IR node constructor to support AST File I/O */
  263033             :           SgElementwisePowerOp( const SgElementwisePowerOpStorageClass& source );
  263034             : 
  263035             :  // private: // JJW hack
  263036             :        /*
  263037             :           name AST Memory Allocation Support Variables
  263038             :           Memory allocations support variables 
  263039             : 
  263040             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  263041             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  263042             :           and support the AST File I/O Mechanism.
  263043             :        */
  263044             :       /* */
  263045             : 
  263046             :     public:
  263047             : 
  263048             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  263049             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  263050             :       // virtual SgNode* addRegExpAttribute();
  263051             :       /*! \brief Support for AST matching using regular expression.
  263052             : 
  263053             :           This support is incomplete and the subject of current research to define 
  263054             :           RegEx trees to support inexact matching.
  263055             :        */
  263056             :           SgElementwisePowerOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  263057             : 
  263058             : // *** COMMON CODE SECTION ENDS HERE ***
  263059             : 
  263060             : 
  263061             : // End of memberFunctionString
  263062             : // Start of memberFunctionString
  263063             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  263064             : 
  263065             :      // the generated cast function
  263066             :      // friend ROSE_DLL_API SgElementwisePowerOp* isSgElementwisePowerOp ( SgNode* s );
  263067             : 
  263068             :           typedef SgElementwiseOp base_node_type;
  263069             : 
  263070             : 
  263071             : // End of memberFunctionString
  263072             : // Start of memberFunctionString
  263073             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  263074             : 
  263075             :           void post_construction_initialization() override;
  263076             : 
  263077             : 
  263078             : // End of memberFunctionString
  263079             : // Start of memberFunctionString
  263080             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  263081             : 
  263082           0 :           int precedence() const override { return 14; }
  263083             : 
  263084             : 
  263085             : // End of memberFunctionString
  263086             : 
  263087             : 
  263088             :      public: 
  263089             :          virtual ~SgElementwisePowerOp();
  263090             : 
  263091             : 
  263092             :      public: 
  263093             :          SgElementwisePowerOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  263094             :          SgElementwisePowerOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  263095             : 
  263096             :     protected:
  263097             : 
  263098             :     friend struct Rose::Traits::generated::describe_node_t<SgElementwisePowerOp>;
  263099             : 
  263100             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263101             : 
  263102             : 
  263103             :    };
  263104             : #endif
  263105             : 
  263106             : // postdeclarations for SgElementwisePowerOp
  263107             : 
  263108             : /* #line 263109 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263109             : 
  263110             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  263111             : 
  263112             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263113             : 
  263114             : 
  263115             : /* #line 263116 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263116             : 
  263117             : 
  263118             : 
  263119             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263120             : 
  263121             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  263122             : //      This code is automatically generated for each 
  263123             : //      terminal and non-terminal within the defined 
  263124             : //      grammar.  There is a simple way to change the 
  263125             : //      code to fix bugs etc.  See the ROSE README file
  263126             : //      for directions.
  263127             : 
  263128             : // tps: (02/22/2010): Adding DLL export requirements
  263129             : #include "rosedll.h"
  263130             : 
  263131             : // predeclarations for SgElementwiseLeftDivideOp
  263132             : 
  263133             : /* #line 263134 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263134             : 
  263135             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  263136             : 
  263137             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263138             : 
  263139             : #if 1
  263140             : // Class Definition for SgElementwiseLeftDivideOp
  263141             : class ROSE_DLL_API SgElementwiseLeftDivideOp  : public SgElementwiseOp
  263142             :    {
  263143             :      public:
  263144             : 
  263145             : 
  263146             : /* #line 263147 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263147             : 
  263148             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  263149             : // Start of memberFunctionString
  263150             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  263151             : 
  263152             : // *** COMMON CODE SECTION BEGINS HERE ***
  263153             : 
  263154             :     public:
  263155             : 
  263156             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  263157             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  263158             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  263159             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  263160             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  263161             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  263162             : 
  263163             :       /*! \brief returns a string representing the class name */
  263164             :           virtual std::string class_name() const override;
  263165             : 
  263166             :       /*! \brief returns new style SageIII enum values */
  263167             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  263168             : 
  263169             :       /*! \brief static variant value */
  263170             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  263171             :        // static const VariantT static_variant = V_SgElementwiseLeftDivideOp;
  263172             :           enum { static_variant = V_SgElementwiseLeftDivideOp };
  263173             : 
  263174             :        /* the generated cast function */
  263175             :       /*! \brief Casts pointer from base class to derived class */
  263176             :           ROSE_DLL_API friend       SgElementwiseLeftDivideOp* isSgElementwiseLeftDivideOp(       SgNode * s );
  263177             : 
  263178             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  263179             :           ROSE_DLL_API friend const SgElementwiseLeftDivideOp* isSgElementwiseLeftDivideOp( const SgNode * s );
  263180             : 
  263181             :      // ******************************************
  263182             :      // * Memory Pool / New / Delete
  263183             :      // ******************************************
  263184             : 
  263185             :      public:
  263186             :           /// \private
  263187             :           static const unsigned pool_size; //
  263188             :           /// \private
  263189             :           static std::vector<unsigned char *> pools; //
  263190             :           /// \private
  263191             :           static SgElementwiseLeftDivideOp * next_node; // 
  263192             : 
  263193             :           /// \private
  263194             :           static unsigned long initializeStorageClassArray(SgElementwiseLeftDivideOpStorageClass *); //
  263195             : 
  263196             :           /// \private
  263197             :           static void clearMemoryPool(); //
  263198             :           static void deleteMemoryPool(); //
  263199             : 
  263200             :           /// \private
  263201             :           static void extendMemoryPoolForFileIO(); //
  263202             : 
  263203             :           /// \private
  263204             :           static SgElementwiseLeftDivideOp * getPointerFromGlobalIndex(unsigned long); //
  263205             :           /// \private
  263206             :           static SgElementwiseLeftDivideOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  263207             : 
  263208             :           /// \private
  263209             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  263210             :           /// \private
  263211             :           static void resetValidFreepointers(); //
  263212             :           /// \private
  263213             :           static unsigned long getNumberOfLastValidPointer(); //
  263214             : 
  263215             : 
  263216             : #if defined(INLINE_FUNCTIONS)
  263217             :       /*! \brief returns pointer to newly allocated IR node */
  263218             :           inline void *operator new (size_t size);
  263219             : #else
  263220             :       /*! \brief returns pointer to newly allocated IR node */
  263221             :           void *operator new (size_t size);
  263222             : #endif
  263223             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  263224             :           void operator delete (void* pointer, size_t size);
  263225             : 
  263226             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  263227           0 :           void operator delete (void* pointer)
  263228             :              {
  263229             :             // This is the generated delete operator...
  263230           0 :                SgElementwiseLeftDivideOp::operator delete (pointer,sizeof(SgElementwiseLeftDivideOp));
  263231             :              }
  263232             : 
  263233             :       /*! \brief Returns the total number of IR nodes of this type */
  263234             :           static size_t numberOfNodes();
  263235             : 
  263236             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  263237             :           static size_t memoryUsage();
  263238             : 
  263239             :       // End of scope which started in IR nodes specific code 
  263240             :       /* */
  263241             : 
  263242             :       /* name Internal Functions
  263243             :           \brief Internal functions ... incomplete-documentation
  263244             : 
  263245             :           These functions have been made public as part of the design, but they are suggested for internal use 
  263246             :           or by particularly knowledgeable users for specialized tools or applications.
  263247             : 
  263248             :           \internal We could not make these private because they are required by user for special purposes. And 
  263249             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  263250             :          
  263251             :        */
  263252             : 
  263253             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  263254             :        // overridden in every class by *generated* implementation
  263255             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  263256             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  263257             :        // MS: 06/28/02 container of names of variables or container indices 
  263258             :        // used used in the traversal to access AST successor nodes
  263259             :        // overridden in every class by *generated* implementation
  263260             :       /*! \brief container of names of variables or container indices used used in the traversal
  263261             :           to access AST successor nodes overridden in every class by *generated* implementation */
  263262             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  263263             : 
  263264             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  263265             :        // than all the vector copies. The implementation for these functions is generated for each class.
  263266             :       /*! \brief return number of children in the traversal successor list */
  263267             :           virtual size_t get_numberOfTraversalSuccessors() override;
  263268             :       /*! \brief index-based access to traversal successors by index number */
  263269             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  263270             :       /*! \brief index-based access to traversal successors by child node */
  263271             :           virtual size_t get_childIndex(SgNode *child) override;
  263272             : 
  263273             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  263274             :        // MS: 08/16/2002 method for generating RTI information
  263275             :       /*! \brief return C++ Runtime-Time-Information */
  263276             :           virtual RTIReturnType roseRTI() override;
  263277             : #endif
  263278             :       /* */
  263279             : 
  263280             : 
  263281             : 
  263282             :       /* name Deprecated Functions
  263283             :           \brief Deprecated functions ... incomplete-documentation
  263284             : 
  263285             :           These functions have been deprecated from use.
  263286             :        */
  263287             :       /* */
  263288             : 
  263289             :       /*! returns a C style string (char*) representing the class name */
  263290             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  263291             : 
  263292             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  263293             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  263294             : #if 0
  263295             :       /*! returns old style Sage II enum values */
  263296             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  263297             :       /*! returns old style Sage II enum values */
  263298             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  263299             : #endif
  263300             :       /* */
  263301             : 
  263302             : 
  263303             : 
  263304             : 
  263305             :      public:
  263306             :       /* name Traversal Support Functions
  263307             :           \brief Traversal support functions ... incomplete-documentation
  263308             : 
  263309             :           These functions have been made public as part of the design, but they are suggested for internal use 
  263310             :           or by particularly knowledgable users for specialized tools or applications.
  263311             :        */
  263312             :       /* */
  263313             : 
  263314             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  263315             :        // (inferior to ROSE traversal mechanism, experimental).
  263316             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  263317             :        */
  263318             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  263319             : 
  263320             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  263321             :       /*! \brief support for the classic visitor pattern done in GoF */
  263322             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  263323             : 
  263324             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  263325             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  263326             :        */
  263327             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  263328             : 
  263329             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  263330             :        */
  263331             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  263332             : 
  263333             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  263334             :        // This traversal helps support internal tools that call static member functions.
  263335             :        // note: this function operates on the memory pools.
  263336             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  263337             :        */
  263338             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  263339             :       /* */
  263340             : 
  263341             : 
  263342             :      public:
  263343             :       /* name Memory Allocation Functions
  263344             :           \brief Memory allocations functions ... incomplete-documentation
  263345             : 
  263346             :           These functions have been made public as part of the design, but they are suggested for internal use 
  263347             :           or by particularly knowledgable users for specialized tools or applications.
  263348             :        */
  263349             :       /* */
  263350             : 
  263351             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  263352             : 
  263353             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  263354             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  263355             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  263356             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  263357             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  263358             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  263359             :           being used with the AST File I/O mechanism.
  263360             :        */
  263361             :           virtual bool isInMemoryPool() override;
  263362             : 
  263363             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  263364             : 
  263365             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  263366             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  263367             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  263368             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  263369             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  263370             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  263371             :           being used with the AST File I/O mechanism.
  263372             :        */
  263373             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  263374             : 
  263375             :       // DQ (4/30/2006): Modified to be a const function.
  263376             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  263377             : 
  263378             :           This functions is part of general support for many possible tools to operate 
  263379             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  263380             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  263381             :           less than the set of pointers used by the AST file I/O. This is part of
  263382             :           work implemented by Andreas, and support tools such as the AST graph generation.
  263383             : 
  263384             :           \warning This function can return unexpected data members and thus the 
  263385             :                    order and the number of elements is unpredicable and subject 
  263386             :                    to change.
  263387             : 
  263388             :           \returns STL vector of pairs of SgNode* and strings
  263389             :        */
  263390             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  263391             : 
  263392             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  263393             : 
  263394             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  263395             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  263396             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  263397             : 
  263398             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  263399             :                    and subject to change.
  263400             :        */
  263401             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  263402             : 
  263403             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  263404             : 
  263405             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  263406             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  263407             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  263408             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  263409             : 
  263410             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  263411             : 
  263412             :           \returns long
  263413             :        */
  263414             :           virtual long getChildIndex( SgNode* childNode ) const override;
  263415             : 
  263416             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  263417             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263418             :       /* \brief Constructor for use by AST File I/O Mechanism
  263419             : 
  263420             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  263421             :           which obtained via fast binary file I/O from disk.
  263422             :        */
  263423             :        // SgElementwiseLeftDivideOp( SgElementwiseLeftDivideOpStorageClass& source );
  263424             : 
  263425             : 
  263426             : 
  263427             : 
  263428             : 
  263429             :  // JH (10/24/2005): methods added to support the ast file IO
  263430             :     private:
  263431             : 
  263432             :       /* name AST Memory Allocation Support Functions
  263433             :           \brief Memory allocations support....
  263434             : 
  263435             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  263436             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  263437             :           and support the AST File I/O Mechanism.
  263438             :        */
  263439             :       /* */
  263440             : 
  263441             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  263442             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  263443             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  263444             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  263445             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  263446             :           a correspinding one in the AST_FILE_IO class!
  263447             :        */
  263448             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  263449             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263450             :       /* \brief Typedef used for low level memory access.
  263451             :        */
  263452             :        // typedef unsigned char* TestType;
  263453             : 
  263454             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  263455             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263456             :       /* \brief Typedef used to hold memory addresses as values.
  263457             :        */
  263458             :        // typedef unsigned long  AddressType;
  263459             : 
  263460             : 
  263461             : 
  263462             :        // necessary, to have direct access to the p_freepointer and the private methods !
  263463             :       /*! \brief friend class declaration to support AST File I/O */
  263464             :           friend class AST_FILE_IO;
  263465             : 
  263466             :       /*! \brief friend class declaration to support AST File I/O */
  263467             :           friend class SgElementwiseLeftDivideOpStorageClass;
  263468             : 
  263469             :       /*! \brief friend class declaration to support AST File I/O */
  263470             :           friend class AstSpecificDataManagingClass;
  263471             : 
  263472             :       /*! \brief friend class declaration to support AST File I/O */
  263473             :           friend class AstSpecificDataManagingClassStorageClass;
  263474             :     public:
  263475             :       /*! \brief IR node constructor to support AST File I/O */
  263476             :           SgElementwiseLeftDivideOp( const SgElementwiseLeftDivideOpStorageClass& source );
  263477             : 
  263478             :  // private: // JJW hack
  263479             :        /*
  263480             :           name AST Memory Allocation Support Variables
  263481             :           Memory allocations support variables 
  263482             : 
  263483             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  263484             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  263485             :           and support the AST File I/O Mechanism.
  263486             :        */
  263487             :       /* */
  263488             : 
  263489             :     public:
  263490             : 
  263491             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  263492             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  263493             :       // virtual SgNode* addRegExpAttribute();
  263494             :       /*! \brief Support for AST matching using regular expression.
  263495             : 
  263496             :           This support is incomplete and the subject of current research to define 
  263497             :           RegEx trees to support inexact matching.
  263498             :        */
  263499             :           SgElementwiseLeftDivideOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  263500             : 
  263501             : // *** COMMON CODE SECTION ENDS HERE ***
  263502             : 
  263503             : 
  263504             : // End of memberFunctionString
  263505             : // Start of memberFunctionString
  263506             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  263507             : 
  263508             :      // the generated cast function
  263509             :      // friend ROSE_DLL_API SgElementwiseLeftDivideOp* isSgElementwiseLeftDivideOp ( SgNode* s );
  263510             : 
  263511             :           typedef SgElementwiseOp base_node_type;
  263512             : 
  263513             : 
  263514             : // End of memberFunctionString
  263515             : // Start of memberFunctionString
  263516             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  263517             : 
  263518             :           void post_construction_initialization() override;
  263519             : 
  263520             : 
  263521             : // End of memberFunctionString
  263522             : // Start of memberFunctionString
  263523             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  263524             : 
  263525           0 :           int precedence() const override { return 13; }
  263526             : 
  263527             : 
  263528             : // End of memberFunctionString
  263529             : 
  263530             : 
  263531             :      public: 
  263532             :          virtual ~SgElementwiseLeftDivideOp();
  263533             : 
  263534             : 
  263535             :      public: 
  263536             :          SgElementwiseLeftDivideOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  263537             :          SgElementwiseLeftDivideOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  263538             : 
  263539             :     protected:
  263540             : 
  263541             :     friend struct Rose::Traits::generated::describe_node_t<SgElementwiseLeftDivideOp>;
  263542             : 
  263543             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263544             : 
  263545             : 
  263546             :    };
  263547             : #endif
  263548             : 
  263549             : // postdeclarations for SgElementwiseLeftDivideOp
  263550             : 
  263551             : /* #line 263552 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263552             : 
  263553             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  263554             : 
  263555             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263556             : 
  263557             : 
  263558             : /* #line 263559 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263559             : 
  263560             : 
  263561             : 
  263562             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263563             : 
  263564             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  263565             : //      This code is automatically generated for each 
  263566             : //      terminal and non-terminal within the defined 
  263567             : //      grammar.  There is a simple way to change the 
  263568             : //      code to fix bugs etc.  See the ROSE README file
  263569             : //      for directions.
  263570             : 
  263571             : // tps: (02/22/2010): Adding DLL export requirements
  263572             : #include "rosedll.h"
  263573             : 
  263574             : // predeclarations for SgElementwiseDivideOp
  263575             : 
  263576             : /* #line 263577 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263577             : 
  263578             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  263579             : 
  263580             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263581             : 
  263582             : #if 1
  263583             : // Class Definition for SgElementwiseDivideOp
  263584             : class ROSE_DLL_API SgElementwiseDivideOp  : public SgElementwiseOp
  263585             :    {
  263586             :      public:
  263587             : 
  263588             : 
  263589             : /* #line 263590 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263590             : 
  263591             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  263592             : // Start of memberFunctionString
  263593             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  263594             : 
  263595             : // *** COMMON CODE SECTION BEGINS HERE ***
  263596             : 
  263597             :     public:
  263598             : 
  263599             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  263600             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  263601             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  263602             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  263603             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  263604             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  263605             : 
  263606             :       /*! \brief returns a string representing the class name */
  263607             :           virtual std::string class_name() const override;
  263608             : 
  263609             :       /*! \brief returns new style SageIII enum values */
  263610             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  263611             : 
  263612             :       /*! \brief static variant value */
  263613             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  263614             :        // static const VariantT static_variant = V_SgElementwiseDivideOp;
  263615             :           enum { static_variant = V_SgElementwiseDivideOp };
  263616             : 
  263617             :        /* the generated cast function */
  263618             :       /*! \brief Casts pointer from base class to derived class */
  263619             :           ROSE_DLL_API friend       SgElementwiseDivideOp* isSgElementwiseDivideOp(       SgNode * s );
  263620             : 
  263621             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  263622             :           ROSE_DLL_API friend const SgElementwiseDivideOp* isSgElementwiseDivideOp( const SgNode * s );
  263623             : 
  263624             :      // ******************************************
  263625             :      // * Memory Pool / New / Delete
  263626             :      // ******************************************
  263627             : 
  263628             :      public:
  263629             :           /// \private
  263630             :           static const unsigned pool_size; //
  263631             :           /// \private
  263632             :           static std::vector<unsigned char *> pools; //
  263633             :           /// \private
  263634             :           static SgElementwiseDivideOp * next_node; // 
  263635             : 
  263636             :           /// \private
  263637             :           static unsigned long initializeStorageClassArray(SgElementwiseDivideOpStorageClass *); //
  263638             : 
  263639             :           /// \private
  263640             :           static void clearMemoryPool(); //
  263641             :           static void deleteMemoryPool(); //
  263642             : 
  263643             :           /// \private
  263644             :           static void extendMemoryPoolForFileIO(); //
  263645             : 
  263646             :           /// \private
  263647             :           static SgElementwiseDivideOp * getPointerFromGlobalIndex(unsigned long); //
  263648             :           /// \private
  263649             :           static SgElementwiseDivideOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  263650             : 
  263651             :           /// \private
  263652             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  263653             :           /// \private
  263654             :           static void resetValidFreepointers(); //
  263655             :           /// \private
  263656             :           static unsigned long getNumberOfLastValidPointer(); //
  263657             : 
  263658             : 
  263659             : #if defined(INLINE_FUNCTIONS)
  263660             :       /*! \brief returns pointer to newly allocated IR node */
  263661             :           inline void *operator new (size_t size);
  263662             : #else
  263663             :       /*! \brief returns pointer to newly allocated IR node */
  263664             :           void *operator new (size_t size);
  263665             : #endif
  263666             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  263667             :           void operator delete (void* pointer, size_t size);
  263668             : 
  263669             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  263670           0 :           void operator delete (void* pointer)
  263671             :              {
  263672             :             // This is the generated delete operator...
  263673           0 :                SgElementwiseDivideOp::operator delete (pointer,sizeof(SgElementwiseDivideOp));
  263674             :              }
  263675             : 
  263676             :       /*! \brief Returns the total number of IR nodes of this type */
  263677             :           static size_t numberOfNodes();
  263678             : 
  263679             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  263680             :           static size_t memoryUsage();
  263681             : 
  263682             :       // End of scope which started in IR nodes specific code 
  263683             :       /* */
  263684             : 
  263685             :       /* name Internal Functions
  263686             :           \brief Internal functions ... incomplete-documentation
  263687             : 
  263688             :           These functions have been made public as part of the design, but they are suggested for internal use 
  263689             :           or by particularly knowledgeable users for specialized tools or applications.
  263690             : 
  263691             :           \internal We could not make these private because they are required by user for special purposes. And 
  263692             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  263693             :          
  263694             :        */
  263695             : 
  263696             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  263697             :        // overridden in every class by *generated* implementation
  263698             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  263699             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  263700             :        // MS: 06/28/02 container of names of variables or container indices 
  263701             :        // used used in the traversal to access AST successor nodes
  263702             :        // overridden in every class by *generated* implementation
  263703             :       /*! \brief container of names of variables or container indices used used in the traversal
  263704             :           to access AST successor nodes overridden in every class by *generated* implementation */
  263705             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  263706             : 
  263707             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  263708             :        // than all the vector copies. The implementation for these functions is generated for each class.
  263709             :       /*! \brief return number of children in the traversal successor list */
  263710             :           virtual size_t get_numberOfTraversalSuccessors() override;
  263711             :       /*! \brief index-based access to traversal successors by index number */
  263712             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  263713             :       /*! \brief index-based access to traversal successors by child node */
  263714             :           virtual size_t get_childIndex(SgNode *child) override;
  263715             : 
  263716             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  263717             :        // MS: 08/16/2002 method for generating RTI information
  263718             :       /*! \brief return C++ Runtime-Time-Information */
  263719             :           virtual RTIReturnType roseRTI() override;
  263720             : #endif
  263721             :       /* */
  263722             : 
  263723             : 
  263724             : 
  263725             :       /* name Deprecated Functions
  263726             :           \brief Deprecated functions ... incomplete-documentation
  263727             : 
  263728             :           These functions have been deprecated from use.
  263729             :        */
  263730             :       /* */
  263731             : 
  263732             :       /*! returns a C style string (char*) representing the class name */
  263733             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  263734             : 
  263735             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  263736             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  263737             : #if 0
  263738             :       /*! returns old style Sage II enum values */
  263739             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  263740             :       /*! returns old style Sage II enum values */
  263741             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  263742             : #endif
  263743             :       /* */
  263744             : 
  263745             : 
  263746             : 
  263747             : 
  263748             :      public:
  263749             :       /* name Traversal Support Functions
  263750             :           \brief Traversal support functions ... incomplete-documentation
  263751             : 
  263752             :           These functions have been made public as part of the design, but they are suggested for internal use 
  263753             :           or by particularly knowledgable users for specialized tools or applications.
  263754             :        */
  263755             :       /* */
  263756             : 
  263757             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  263758             :        // (inferior to ROSE traversal mechanism, experimental).
  263759             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  263760             :        */
  263761             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  263762             : 
  263763             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  263764             :       /*! \brief support for the classic visitor pattern done in GoF */
  263765             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  263766             : 
  263767             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  263768             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  263769             :        */
  263770             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  263771             : 
  263772             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  263773             :        */
  263774             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  263775             : 
  263776             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  263777             :        // This traversal helps support internal tools that call static member functions.
  263778             :        // note: this function operates on the memory pools.
  263779             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  263780             :        */
  263781             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  263782             :       /* */
  263783             : 
  263784             : 
  263785             :      public:
  263786             :       /* name Memory Allocation Functions
  263787             :           \brief Memory allocations functions ... incomplete-documentation
  263788             : 
  263789             :           These functions have been made public as part of the design, but they are suggested for internal use 
  263790             :           or by particularly knowledgable users for specialized tools or applications.
  263791             :        */
  263792             :       /* */
  263793             : 
  263794             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  263795             : 
  263796             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  263797             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  263798             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  263799             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  263800             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  263801             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  263802             :           being used with the AST File I/O mechanism.
  263803             :        */
  263804             :           virtual bool isInMemoryPool() override;
  263805             : 
  263806             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  263807             : 
  263808             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  263809             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  263810             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  263811             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  263812             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  263813             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  263814             :           being used with the AST File I/O mechanism.
  263815             :        */
  263816             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  263817             : 
  263818             :       // DQ (4/30/2006): Modified to be a const function.
  263819             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  263820             : 
  263821             :           This functions is part of general support for many possible tools to operate 
  263822             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  263823             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  263824             :           less than the set of pointers used by the AST file I/O. This is part of
  263825             :           work implemented by Andreas, and support tools such as the AST graph generation.
  263826             : 
  263827             :           \warning This function can return unexpected data members and thus the 
  263828             :                    order and the number of elements is unpredicable and subject 
  263829             :                    to change.
  263830             : 
  263831             :           \returns STL vector of pairs of SgNode* and strings
  263832             :        */
  263833             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  263834             : 
  263835             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  263836             : 
  263837             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  263838             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  263839             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  263840             : 
  263841             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  263842             :                    and subject to change.
  263843             :        */
  263844             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  263845             : 
  263846             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  263847             : 
  263848             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  263849             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  263850             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  263851             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  263852             : 
  263853             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  263854             : 
  263855             :           \returns long
  263856             :        */
  263857             :           virtual long getChildIndex( SgNode* childNode ) const override;
  263858             : 
  263859             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  263860             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263861             :       /* \brief Constructor for use by AST File I/O Mechanism
  263862             : 
  263863             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  263864             :           which obtained via fast binary file I/O from disk.
  263865             :        */
  263866             :        // SgElementwiseDivideOp( SgElementwiseDivideOpStorageClass& source );
  263867             : 
  263868             : 
  263869             : 
  263870             : 
  263871             : 
  263872             :  // JH (10/24/2005): methods added to support the ast file IO
  263873             :     private:
  263874             : 
  263875             :       /* name AST Memory Allocation Support Functions
  263876             :           \brief Memory allocations support....
  263877             : 
  263878             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  263879             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  263880             :           and support the AST File I/O Mechanism.
  263881             :        */
  263882             :       /* */
  263883             : 
  263884             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  263885             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  263886             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  263887             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  263888             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  263889             :           a correspinding one in the AST_FILE_IO class!
  263890             :        */
  263891             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  263892             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263893             :       /* \brief Typedef used for low level memory access.
  263894             :        */
  263895             :        // typedef unsigned char* TestType;
  263896             : 
  263897             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  263898             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  263899             :       /* \brief Typedef used to hold memory addresses as values.
  263900             :        */
  263901             :        // typedef unsigned long  AddressType;
  263902             : 
  263903             : 
  263904             : 
  263905             :        // necessary, to have direct access to the p_freepointer and the private methods !
  263906             :       /*! \brief friend class declaration to support AST File I/O */
  263907             :           friend class AST_FILE_IO;
  263908             : 
  263909             :       /*! \brief friend class declaration to support AST File I/O */
  263910             :           friend class SgElementwiseDivideOpStorageClass;
  263911             : 
  263912             :       /*! \brief friend class declaration to support AST File I/O */
  263913             :           friend class AstSpecificDataManagingClass;
  263914             : 
  263915             :       /*! \brief friend class declaration to support AST File I/O */
  263916             :           friend class AstSpecificDataManagingClassStorageClass;
  263917             :     public:
  263918             :       /*! \brief IR node constructor to support AST File I/O */
  263919             :           SgElementwiseDivideOp( const SgElementwiseDivideOpStorageClass& source );
  263920             : 
  263921             :  // private: // JJW hack
  263922             :        /*
  263923             :           name AST Memory Allocation Support Variables
  263924             :           Memory allocations support variables 
  263925             : 
  263926             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  263927             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  263928             :           and support the AST File I/O Mechanism.
  263929             :        */
  263930             :       /* */
  263931             : 
  263932             :     public:
  263933             : 
  263934             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  263935             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  263936             :       // virtual SgNode* addRegExpAttribute();
  263937             :       /*! \brief Support for AST matching using regular expression.
  263938             : 
  263939             :           This support is incomplete and the subject of current research to define 
  263940             :           RegEx trees to support inexact matching.
  263941             :        */
  263942             :           SgElementwiseDivideOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  263943             : 
  263944             : // *** COMMON CODE SECTION ENDS HERE ***
  263945             : 
  263946             : 
  263947             : // End of memberFunctionString
  263948             : // Start of memberFunctionString
  263949             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  263950             : 
  263951             :      // the generated cast function
  263952             :      // friend ROSE_DLL_API SgElementwiseDivideOp* isSgElementwiseDivideOp ( SgNode* s );
  263953             : 
  263954             :           typedef SgElementwiseOp base_node_type;
  263955             : 
  263956             : 
  263957             : // End of memberFunctionString
  263958             : // Start of memberFunctionString
  263959             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  263960             : 
  263961             :           void post_construction_initialization() override;
  263962             : 
  263963             : 
  263964             : // End of memberFunctionString
  263965             : // Start of memberFunctionString
  263966             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  263967             : 
  263968           0 :           int precedence() const override { return 13; }
  263969             : 
  263970             : 
  263971             : // End of memberFunctionString
  263972             : 
  263973             : 
  263974             :      public: 
  263975             :          virtual ~SgElementwiseDivideOp();
  263976             : 
  263977             : 
  263978             :      public: 
  263979             :          SgElementwiseDivideOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  263980             :          SgElementwiseDivideOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  263981             : 
  263982             :     protected:
  263983             : 
  263984             :     friend struct Rose::Traits::generated::describe_node_t<SgElementwiseDivideOp>;
  263985             : 
  263986             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263987             : 
  263988             : 
  263989             :    };
  263990             : #endif
  263991             : 
  263992             : // postdeclarations for SgElementwiseDivideOp
  263993             : 
  263994             : /* #line 263995 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  263995             : 
  263996             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  263997             : 
  263998             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  263999             : 
  264000             : 
  264001             : /* #line 264002 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264002             : 
  264003             : 
  264004             : 
  264005             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264006             : 
  264007             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  264008             : //      This code is automatically generated for each 
  264009             : //      terminal and non-terminal within the defined 
  264010             : //      grammar.  There is a simple way to change the 
  264011             : //      code to fix bugs etc.  See the ROSE README file
  264012             : //      for directions.
  264013             : 
  264014             : // tps: (02/22/2010): Adding DLL export requirements
  264015             : #include "rosedll.h"
  264016             : 
  264017             : // predeclarations for SgElementwiseAddOp
  264018             : 
  264019             : /* #line 264020 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264020             : 
  264021             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  264022             : 
  264023             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264024             : 
  264025             : #if 1
  264026             : // Class Definition for SgElementwiseAddOp
  264027             : class ROSE_DLL_API SgElementwiseAddOp  : public SgElementwiseOp
  264028             :    {
  264029             :      public:
  264030             : 
  264031             : 
  264032             : /* #line 264033 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264033             : 
  264034             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  264035             : // Start of memberFunctionString
  264036             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  264037             : 
  264038             : // *** COMMON CODE SECTION BEGINS HERE ***
  264039             : 
  264040             :     public:
  264041             : 
  264042             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  264043             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  264044             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  264045             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  264046             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  264047             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  264048             : 
  264049             :       /*! \brief returns a string representing the class name */
  264050             :           virtual std::string class_name() const override;
  264051             : 
  264052             :       /*! \brief returns new style SageIII enum values */
  264053             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  264054             : 
  264055             :       /*! \brief static variant value */
  264056             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  264057             :        // static const VariantT static_variant = V_SgElementwiseAddOp;
  264058             :           enum { static_variant = V_SgElementwiseAddOp };
  264059             : 
  264060             :        /* the generated cast function */
  264061             :       /*! \brief Casts pointer from base class to derived class */
  264062             :           ROSE_DLL_API friend       SgElementwiseAddOp* isSgElementwiseAddOp(       SgNode * s );
  264063             : 
  264064             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  264065             :           ROSE_DLL_API friend const SgElementwiseAddOp* isSgElementwiseAddOp( const SgNode * s );
  264066             : 
  264067             :      // ******************************************
  264068             :      // * Memory Pool / New / Delete
  264069             :      // ******************************************
  264070             : 
  264071             :      public:
  264072             :           /// \private
  264073             :           static const unsigned pool_size; //
  264074             :           /// \private
  264075             :           static std::vector<unsigned char *> pools; //
  264076             :           /// \private
  264077             :           static SgElementwiseAddOp * next_node; // 
  264078             : 
  264079             :           /// \private
  264080             :           static unsigned long initializeStorageClassArray(SgElementwiseAddOpStorageClass *); //
  264081             : 
  264082             :           /// \private
  264083             :           static void clearMemoryPool(); //
  264084             :           static void deleteMemoryPool(); //
  264085             : 
  264086             :           /// \private
  264087             :           static void extendMemoryPoolForFileIO(); //
  264088             : 
  264089             :           /// \private
  264090             :           static SgElementwiseAddOp * getPointerFromGlobalIndex(unsigned long); //
  264091             :           /// \private
  264092             :           static SgElementwiseAddOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  264093             : 
  264094             :           /// \private
  264095             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  264096             :           /// \private
  264097             :           static void resetValidFreepointers(); //
  264098             :           /// \private
  264099             :           static unsigned long getNumberOfLastValidPointer(); //
  264100             : 
  264101             : 
  264102             : #if defined(INLINE_FUNCTIONS)
  264103             :       /*! \brief returns pointer to newly allocated IR node */
  264104             :           inline void *operator new (size_t size);
  264105             : #else
  264106             :       /*! \brief returns pointer to newly allocated IR node */
  264107             :           void *operator new (size_t size);
  264108             : #endif
  264109             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  264110             :           void operator delete (void* pointer, size_t size);
  264111             : 
  264112             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  264113           0 :           void operator delete (void* pointer)
  264114             :              {
  264115             :             // This is the generated delete operator...
  264116           0 :                SgElementwiseAddOp::operator delete (pointer,sizeof(SgElementwiseAddOp));
  264117             :              }
  264118             : 
  264119             :       /*! \brief Returns the total number of IR nodes of this type */
  264120             :           static size_t numberOfNodes();
  264121             : 
  264122             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  264123             :           static size_t memoryUsage();
  264124             : 
  264125             :       // End of scope which started in IR nodes specific code 
  264126             :       /* */
  264127             : 
  264128             :       /* name Internal Functions
  264129             :           \brief Internal functions ... incomplete-documentation
  264130             : 
  264131             :           These functions have been made public as part of the design, but they are suggested for internal use 
  264132             :           or by particularly knowledgeable users for specialized tools or applications.
  264133             : 
  264134             :           \internal We could not make these private because they are required by user for special purposes. And 
  264135             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  264136             :          
  264137             :        */
  264138             : 
  264139             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  264140             :        // overridden in every class by *generated* implementation
  264141             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  264142             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  264143             :        // MS: 06/28/02 container of names of variables or container indices 
  264144             :        // used used in the traversal to access AST successor nodes
  264145             :        // overridden in every class by *generated* implementation
  264146             :       /*! \brief container of names of variables or container indices used used in the traversal
  264147             :           to access AST successor nodes overridden in every class by *generated* implementation */
  264148             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  264149             : 
  264150             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  264151             :        // than all the vector copies. The implementation for these functions is generated for each class.
  264152             :       /*! \brief return number of children in the traversal successor list */
  264153             :           virtual size_t get_numberOfTraversalSuccessors() override;
  264154             :       /*! \brief index-based access to traversal successors by index number */
  264155             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  264156             :       /*! \brief index-based access to traversal successors by child node */
  264157             :           virtual size_t get_childIndex(SgNode *child) override;
  264158             : 
  264159             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  264160             :        // MS: 08/16/2002 method for generating RTI information
  264161             :       /*! \brief return C++ Runtime-Time-Information */
  264162             :           virtual RTIReturnType roseRTI() override;
  264163             : #endif
  264164             :       /* */
  264165             : 
  264166             : 
  264167             : 
  264168             :       /* name Deprecated Functions
  264169             :           \brief Deprecated functions ... incomplete-documentation
  264170             : 
  264171             :           These functions have been deprecated from use.
  264172             :        */
  264173             :       /* */
  264174             : 
  264175             :       /*! returns a C style string (char*) representing the class name */
  264176             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  264177             : 
  264178             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  264179             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  264180             : #if 0
  264181             :       /*! returns old style Sage II enum values */
  264182             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  264183             :       /*! returns old style Sage II enum values */
  264184             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  264185             : #endif
  264186             :       /* */
  264187             : 
  264188             : 
  264189             : 
  264190             : 
  264191             :      public:
  264192             :       /* name Traversal Support Functions
  264193             :           \brief Traversal support functions ... incomplete-documentation
  264194             : 
  264195             :           These functions have been made public as part of the design, but they are suggested for internal use 
  264196             :           or by particularly knowledgable users for specialized tools or applications.
  264197             :        */
  264198             :       /* */
  264199             : 
  264200             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  264201             :        // (inferior to ROSE traversal mechanism, experimental).
  264202             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  264203             :        */
  264204             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  264205             : 
  264206             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  264207             :       /*! \brief support for the classic visitor pattern done in GoF */
  264208             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  264209             : 
  264210             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  264211             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  264212             :        */
  264213             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  264214             : 
  264215             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  264216             :        */
  264217             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  264218             : 
  264219             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  264220             :        // This traversal helps support internal tools that call static member functions.
  264221             :        // note: this function operates on the memory pools.
  264222             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  264223             :        */
  264224             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  264225             :       /* */
  264226             : 
  264227             : 
  264228             :      public:
  264229             :       /* name Memory Allocation Functions
  264230             :           \brief Memory allocations functions ... incomplete-documentation
  264231             : 
  264232             :           These functions have been made public as part of the design, but they are suggested for internal use 
  264233             :           or by particularly knowledgable users for specialized tools or applications.
  264234             :        */
  264235             :       /* */
  264236             : 
  264237             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  264238             : 
  264239             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  264240             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  264241             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  264242             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  264243             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  264244             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  264245             :           being used with the AST File I/O mechanism.
  264246             :        */
  264247             :           virtual bool isInMemoryPool() override;
  264248             : 
  264249             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  264250             : 
  264251             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  264252             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  264253             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  264254             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  264255             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  264256             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  264257             :           being used with the AST File I/O mechanism.
  264258             :        */
  264259             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  264260             : 
  264261             :       // DQ (4/30/2006): Modified to be a const function.
  264262             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  264263             : 
  264264             :           This functions is part of general support for many possible tools to operate 
  264265             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  264266             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  264267             :           less than the set of pointers used by the AST file I/O. This is part of
  264268             :           work implemented by Andreas, and support tools such as the AST graph generation.
  264269             : 
  264270             :           \warning This function can return unexpected data members and thus the 
  264271             :                    order and the number of elements is unpredicable and subject 
  264272             :                    to change.
  264273             : 
  264274             :           \returns STL vector of pairs of SgNode* and strings
  264275             :        */
  264276             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  264277             : 
  264278             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  264279             : 
  264280             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  264281             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  264282             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  264283             : 
  264284             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  264285             :                    and subject to change.
  264286             :        */
  264287             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  264288             : 
  264289             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  264290             : 
  264291             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  264292             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  264293             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  264294             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  264295             : 
  264296             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  264297             : 
  264298             :           \returns long
  264299             :        */
  264300             :           virtual long getChildIndex( SgNode* childNode ) const override;
  264301             : 
  264302             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  264303             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  264304             :       /* \brief Constructor for use by AST File I/O Mechanism
  264305             : 
  264306             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  264307             :           which obtained via fast binary file I/O from disk.
  264308             :        */
  264309             :        // SgElementwiseAddOp( SgElementwiseAddOpStorageClass& source );
  264310             : 
  264311             : 
  264312             : 
  264313             : 
  264314             : 
  264315             :  // JH (10/24/2005): methods added to support the ast file IO
  264316             :     private:
  264317             : 
  264318             :       /* name AST Memory Allocation Support Functions
  264319             :           \brief Memory allocations support....
  264320             : 
  264321             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  264322             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  264323             :           and support the AST File I/O Mechanism.
  264324             :        */
  264325             :       /* */
  264326             : 
  264327             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  264328             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  264329             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  264330             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  264331             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  264332             :           a correspinding one in the AST_FILE_IO class!
  264333             :        */
  264334             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  264335             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  264336             :       /* \brief Typedef used for low level memory access.
  264337             :        */
  264338             :        // typedef unsigned char* TestType;
  264339             : 
  264340             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  264341             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  264342             :       /* \brief Typedef used to hold memory addresses as values.
  264343             :        */
  264344             :        // typedef unsigned long  AddressType;
  264345             : 
  264346             : 
  264347             : 
  264348             :        // necessary, to have direct access to the p_freepointer and the private methods !
  264349             :       /*! \brief friend class declaration to support AST File I/O */
  264350             :           friend class AST_FILE_IO;
  264351             : 
  264352             :       /*! \brief friend class declaration to support AST File I/O */
  264353             :           friend class SgElementwiseAddOpStorageClass;
  264354             : 
  264355             :       /*! \brief friend class declaration to support AST File I/O */
  264356             :           friend class AstSpecificDataManagingClass;
  264357             : 
  264358             :       /*! \brief friend class declaration to support AST File I/O */
  264359             :           friend class AstSpecificDataManagingClassStorageClass;
  264360             :     public:
  264361             :       /*! \brief IR node constructor to support AST File I/O */
  264362             :           SgElementwiseAddOp( const SgElementwiseAddOpStorageClass& source );
  264363             : 
  264364             :  // private: // JJW hack
  264365             :        /*
  264366             :           name AST Memory Allocation Support Variables
  264367             :           Memory allocations support variables 
  264368             : 
  264369             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  264370             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  264371             :           and support the AST File I/O Mechanism.
  264372             :        */
  264373             :       /* */
  264374             : 
  264375             :     public:
  264376             : 
  264377             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  264378             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  264379             :       // virtual SgNode* addRegExpAttribute();
  264380             :       /*! \brief Support for AST matching using regular expression.
  264381             : 
  264382             :           This support is incomplete and the subject of current research to define 
  264383             :           RegEx trees to support inexact matching.
  264384             :        */
  264385             :           SgElementwiseAddOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  264386             : 
  264387             : // *** COMMON CODE SECTION ENDS HERE ***
  264388             : 
  264389             : 
  264390             : // End of memberFunctionString
  264391             : // Start of memberFunctionString
  264392             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  264393             : 
  264394             :      // the generated cast function
  264395             :      // friend ROSE_DLL_API SgElementwiseAddOp* isSgElementwiseAddOp ( SgNode* s );
  264396             : 
  264397             :           typedef SgElementwiseOp base_node_type;
  264398             : 
  264399             : 
  264400             : // End of memberFunctionString
  264401             : // Start of memberFunctionString
  264402             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  264403             : 
  264404             :           void post_construction_initialization() override;
  264405             : 
  264406             : 
  264407             : // End of memberFunctionString
  264408             : // Start of memberFunctionString
  264409             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  264410             : 
  264411           0 :           int precedence() const override { return 12; }
  264412             : 
  264413             : 
  264414             : // End of memberFunctionString
  264415             : 
  264416             : 
  264417             :      public: 
  264418             :          virtual ~SgElementwiseAddOp();
  264419             : 
  264420             : 
  264421             :      public: 
  264422             :          SgElementwiseAddOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  264423             :          SgElementwiseAddOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  264424             : 
  264425             :     protected:
  264426             : 
  264427             :     friend struct Rose::Traits::generated::describe_node_t<SgElementwiseAddOp>;
  264428             : 
  264429             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264430             : 
  264431             : 
  264432             :    };
  264433             : #endif
  264434             : 
  264435             : // postdeclarations for SgElementwiseAddOp
  264436             : 
  264437             : /* #line 264438 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264438             : 
  264439             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  264440             : 
  264441             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264442             : 
  264443             : 
  264444             : /* #line 264445 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264445             : 
  264446             : 
  264447             : 
  264448             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264449             : 
  264450             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  264451             : //      This code is automatically generated for each 
  264452             : //      terminal and non-terminal within the defined 
  264453             : //      grammar.  There is a simple way to change the 
  264454             : //      code to fix bugs etc.  See the ROSE README file
  264455             : //      for directions.
  264456             : 
  264457             : // tps: (02/22/2010): Adding DLL export requirements
  264458             : #include "rosedll.h"
  264459             : 
  264460             : // predeclarations for SgElementwiseSubtractOp
  264461             : 
  264462             : /* #line 264463 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264463             : 
  264464             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  264465             : 
  264466             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264467             : 
  264468             : #if 1
  264469             : // Class Definition for SgElementwiseSubtractOp
  264470             : class ROSE_DLL_API SgElementwiseSubtractOp  : public SgElementwiseOp
  264471             :    {
  264472             :      public:
  264473             : 
  264474             : 
  264475             : /* #line 264476 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264476             : 
  264477             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  264478             : // Start of memberFunctionString
  264479             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  264480             : 
  264481             : // *** COMMON CODE SECTION BEGINS HERE ***
  264482             : 
  264483             :     public:
  264484             : 
  264485             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  264486             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  264487             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  264488             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  264489             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  264490             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  264491             : 
  264492             :       /*! \brief returns a string representing the class name */
  264493             :           virtual std::string class_name() const override;
  264494             : 
  264495             :       /*! \brief returns new style SageIII enum values */
  264496             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  264497             : 
  264498             :       /*! \brief static variant value */
  264499             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  264500             :        // static const VariantT static_variant = V_SgElementwiseSubtractOp;
  264501             :           enum { static_variant = V_SgElementwiseSubtractOp };
  264502             : 
  264503             :        /* the generated cast function */
  264504             :       /*! \brief Casts pointer from base class to derived class */
  264505             :           ROSE_DLL_API friend       SgElementwiseSubtractOp* isSgElementwiseSubtractOp(       SgNode * s );
  264506             : 
  264507             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  264508             :           ROSE_DLL_API friend const SgElementwiseSubtractOp* isSgElementwiseSubtractOp( const SgNode * s );
  264509             : 
  264510             :      // ******************************************
  264511             :      // * Memory Pool / New / Delete
  264512             :      // ******************************************
  264513             : 
  264514             :      public:
  264515             :           /// \private
  264516             :           static const unsigned pool_size; //
  264517             :           /// \private
  264518             :           static std::vector<unsigned char *> pools; //
  264519             :           /// \private
  264520             :           static SgElementwiseSubtractOp * next_node; // 
  264521             : 
  264522             :           /// \private
  264523             :           static unsigned long initializeStorageClassArray(SgElementwiseSubtractOpStorageClass *); //
  264524             : 
  264525             :           /// \private
  264526             :           static void clearMemoryPool(); //
  264527             :           static void deleteMemoryPool(); //
  264528             : 
  264529             :           /// \private
  264530             :           static void extendMemoryPoolForFileIO(); //
  264531             : 
  264532             :           /// \private
  264533             :           static SgElementwiseSubtractOp * getPointerFromGlobalIndex(unsigned long); //
  264534             :           /// \private
  264535             :           static SgElementwiseSubtractOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  264536             : 
  264537             :           /// \private
  264538             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  264539             :           /// \private
  264540             :           static void resetValidFreepointers(); //
  264541             :           /// \private
  264542             :           static unsigned long getNumberOfLastValidPointer(); //
  264543             : 
  264544             : 
  264545             : #if defined(INLINE_FUNCTIONS)
  264546             :       /*! \brief returns pointer to newly allocated IR node */
  264547             :           inline void *operator new (size_t size);
  264548             : #else
  264549             :       /*! \brief returns pointer to newly allocated IR node */
  264550             :           void *operator new (size_t size);
  264551             : #endif
  264552             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  264553             :           void operator delete (void* pointer, size_t size);
  264554             : 
  264555             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  264556           0 :           void operator delete (void* pointer)
  264557             :              {
  264558             :             // This is the generated delete operator...
  264559           0 :                SgElementwiseSubtractOp::operator delete (pointer,sizeof(SgElementwiseSubtractOp));
  264560             :              }
  264561             : 
  264562             :       /*! \brief Returns the total number of IR nodes of this type */
  264563             :           static size_t numberOfNodes();
  264564             : 
  264565             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  264566             :           static size_t memoryUsage();
  264567             : 
  264568             :       // End of scope which started in IR nodes specific code 
  264569             :       /* */
  264570             : 
  264571             :       /* name Internal Functions
  264572             :           \brief Internal functions ... incomplete-documentation
  264573             : 
  264574             :           These functions have been made public as part of the design, but they are suggested for internal use 
  264575             :           or by particularly knowledgeable users for specialized tools or applications.
  264576             : 
  264577             :           \internal We could not make these private because they are required by user for special purposes. And 
  264578             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  264579             :          
  264580             :        */
  264581             : 
  264582             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  264583             :        // overridden in every class by *generated* implementation
  264584             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  264585             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  264586             :        // MS: 06/28/02 container of names of variables or container indices 
  264587             :        // used used in the traversal to access AST successor nodes
  264588             :        // overridden in every class by *generated* implementation
  264589             :       /*! \brief container of names of variables or container indices used used in the traversal
  264590             :           to access AST successor nodes overridden in every class by *generated* implementation */
  264591             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  264592             : 
  264593             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  264594             :        // than all the vector copies. The implementation for these functions is generated for each class.
  264595             :       /*! \brief return number of children in the traversal successor list */
  264596             :           virtual size_t get_numberOfTraversalSuccessors() override;
  264597             :       /*! \brief index-based access to traversal successors by index number */
  264598             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  264599             :       /*! \brief index-based access to traversal successors by child node */
  264600             :           virtual size_t get_childIndex(SgNode *child) override;
  264601             : 
  264602             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  264603             :        // MS: 08/16/2002 method for generating RTI information
  264604             :       /*! \brief return C++ Runtime-Time-Information */
  264605             :           virtual RTIReturnType roseRTI() override;
  264606             : #endif
  264607             :       /* */
  264608             : 
  264609             : 
  264610             : 
  264611             :       /* name Deprecated Functions
  264612             :           \brief Deprecated functions ... incomplete-documentation
  264613             : 
  264614             :           These functions have been deprecated from use.
  264615             :        */
  264616             :       /* */
  264617             : 
  264618             :       /*! returns a C style string (char*) representing the class name */
  264619             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  264620             : 
  264621             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  264622             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  264623             : #if 0
  264624             :       /*! returns old style Sage II enum values */
  264625             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  264626             :       /*! returns old style Sage II enum values */
  264627             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  264628             : #endif
  264629             :       /* */
  264630             : 
  264631             : 
  264632             : 
  264633             : 
  264634             :      public:
  264635             :       /* name Traversal Support Functions
  264636             :           \brief Traversal support functions ... incomplete-documentation
  264637             : 
  264638             :           These functions have been made public as part of the design, but they are suggested for internal use 
  264639             :           or by particularly knowledgable users for specialized tools or applications.
  264640             :        */
  264641             :       /* */
  264642             : 
  264643             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  264644             :        // (inferior to ROSE traversal mechanism, experimental).
  264645             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  264646             :        */
  264647             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  264648             : 
  264649             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  264650             :       /*! \brief support for the classic visitor pattern done in GoF */
  264651             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  264652             : 
  264653             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  264654             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  264655             :        */
  264656             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  264657             : 
  264658             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  264659             :        */
  264660             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  264661             : 
  264662             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  264663             :        // This traversal helps support internal tools that call static member functions.
  264664             :        // note: this function operates on the memory pools.
  264665             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  264666             :        */
  264667             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  264668             :       /* */
  264669             : 
  264670             : 
  264671             :      public:
  264672             :       /* name Memory Allocation Functions
  264673             :           \brief Memory allocations functions ... incomplete-documentation
  264674             : 
  264675             :           These functions have been made public as part of the design, but they are suggested for internal use 
  264676             :           or by particularly knowledgable users for specialized tools or applications.
  264677             :        */
  264678             :       /* */
  264679             : 
  264680             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  264681             : 
  264682             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  264683             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  264684             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  264685             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  264686             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  264687             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  264688             :           being used with the AST File I/O mechanism.
  264689             :        */
  264690             :           virtual bool isInMemoryPool() override;
  264691             : 
  264692             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  264693             : 
  264694             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  264695             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  264696             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  264697             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  264698             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  264699             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  264700             :           being used with the AST File I/O mechanism.
  264701             :        */
  264702             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  264703             : 
  264704             :       // DQ (4/30/2006): Modified to be a const function.
  264705             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  264706             : 
  264707             :           This functions is part of general support for many possible tools to operate 
  264708             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  264709             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  264710             :           less than the set of pointers used by the AST file I/O. This is part of
  264711             :           work implemented by Andreas, and support tools such as the AST graph generation.
  264712             : 
  264713             :           \warning This function can return unexpected data members and thus the 
  264714             :                    order and the number of elements is unpredicable and subject 
  264715             :                    to change.
  264716             : 
  264717             :           \returns STL vector of pairs of SgNode* and strings
  264718             :        */
  264719             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  264720             : 
  264721             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  264722             : 
  264723             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  264724             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  264725             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  264726             : 
  264727             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  264728             :                    and subject to change.
  264729             :        */
  264730             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  264731             : 
  264732             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  264733             : 
  264734             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  264735             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  264736             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  264737             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  264738             : 
  264739             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  264740             : 
  264741             :           \returns long
  264742             :        */
  264743             :           virtual long getChildIndex( SgNode* childNode ) const override;
  264744             : 
  264745             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  264746             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  264747             :       /* \brief Constructor for use by AST File I/O Mechanism
  264748             : 
  264749             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  264750             :           which obtained via fast binary file I/O from disk.
  264751             :        */
  264752             :        // SgElementwiseSubtractOp( SgElementwiseSubtractOpStorageClass& source );
  264753             : 
  264754             : 
  264755             : 
  264756             : 
  264757             : 
  264758             :  // JH (10/24/2005): methods added to support the ast file IO
  264759             :     private:
  264760             : 
  264761             :       /* name AST Memory Allocation Support Functions
  264762             :           \brief Memory allocations support....
  264763             : 
  264764             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  264765             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  264766             :           and support the AST File I/O Mechanism.
  264767             :        */
  264768             :       /* */
  264769             : 
  264770             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  264771             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  264772             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  264773             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  264774             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  264775             :           a correspinding one in the AST_FILE_IO class!
  264776             :        */
  264777             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  264778             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  264779             :       /* \brief Typedef used for low level memory access.
  264780             :        */
  264781             :        // typedef unsigned char* TestType;
  264782             : 
  264783             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  264784             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  264785             :       /* \brief Typedef used to hold memory addresses as values.
  264786             :        */
  264787             :        // typedef unsigned long  AddressType;
  264788             : 
  264789             : 
  264790             : 
  264791             :        // necessary, to have direct access to the p_freepointer and the private methods !
  264792             :       /*! \brief friend class declaration to support AST File I/O */
  264793             :           friend class AST_FILE_IO;
  264794             : 
  264795             :       /*! \brief friend class declaration to support AST File I/O */
  264796             :           friend class SgElementwiseSubtractOpStorageClass;
  264797             : 
  264798             :       /*! \brief friend class declaration to support AST File I/O */
  264799             :           friend class AstSpecificDataManagingClass;
  264800             : 
  264801             :       /*! \brief friend class declaration to support AST File I/O */
  264802             :           friend class AstSpecificDataManagingClassStorageClass;
  264803             :     public:
  264804             :       /*! \brief IR node constructor to support AST File I/O */
  264805             :           SgElementwiseSubtractOp( const SgElementwiseSubtractOpStorageClass& source );
  264806             : 
  264807             :  // private: // JJW hack
  264808             :        /*
  264809             :           name AST Memory Allocation Support Variables
  264810             :           Memory allocations support variables 
  264811             : 
  264812             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  264813             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  264814             :           and support the AST File I/O Mechanism.
  264815             :        */
  264816             :       /* */
  264817             : 
  264818             :     public:
  264819             : 
  264820             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  264821             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  264822             :       // virtual SgNode* addRegExpAttribute();
  264823             :       /*! \brief Support for AST matching using regular expression.
  264824             : 
  264825             :           This support is incomplete and the subject of current research to define 
  264826             :           RegEx trees to support inexact matching.
  264827             :        */
  264828             :           SgElementwiseSubtractOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  264829             : 
  264830             : // *** COMMON CODE SECTION ENDS HERE ***
  264831             : 
  264832             : 
  264833             : // End of memberFunctionString
  264834             : // Start of memberFunctionString
  264835             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  264836             : 
  264837             :      // the generated cast function
  264838             :      // friend ROSE_DLL_API SgElementwiseSubtractOp* isSgElementwiseSubtractOp ( SgNode* s );
  264839             : 
  264840             :           typedef SgElementwiseOp base_node_type;
  264841             : 
  264842             : 
  264843             : // End of memberFunctionString
  264844             : // Start of memberFunctionString
  264845             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  264846             : 
  264847             :           void post_construction_initialization() override;
  264848             : 
  264849             : 
  264850             : // End of memberFunctionString
  264851             : // Start of memberFunctionString
  264852             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  264853             : 
  264854           0 :           int precedence() const override { return 12; }
  264855             : 
  264856             : 
  264857             : // End of memberFunctionString
  264858             : 
  264859             : 
  264860             :      public: 
  264861             :          virtual ~SgElementwiseSubtractOp();
  264862             : 
  264863             : 
  264864             :      public: 
  264865             :          SgElementwiseSubtractOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  264866             :          SgElementwiseSubtractOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  264867             : 
  264868             :     protected:
  264869             : 
  264870             :     friend struct Rose::Traits::generated::describe_node_t<SgElementwiseSubtractOp>;
  264871             : 
  264872             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264873             : 
  264874             : 
  264875             :    };
  264876             : #endif
  264877             : 
  264878             : // postdeclarations for SgElementwiseSubtractOp
  264879             : 
  264880             : /* #line 264881 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264881             : 
  264882             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  264883             : 
  264884             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264885             : 
  264886             : 
  264887             : /* #line 264888 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264888             : 
  264889             : 
  264890             : 
  264891             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264892             : 
  264893             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  264894             : //      This code is automatically generated for each 
  264895             : //      terminal and non-terminal within the defined 
  264896             : //      grammar.  There is a simple way to change the 
  264897             : //      code to fix bugs etc.  See the ROSE README file
  264898             : //      for directions.
  264899             : 
  264900             : // tps: (02/22/2010): Adding DLL export requirements
  264901             : #include "rosedll.h"
  264902             : 
  264903             : // predeclarations for SgPowerOp
  264904             : 
  264905             : /* #line 264906 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264906             : 
  264907             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  264908             : 
  264909             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  264910             : 
  264911             : #if 1
  264912             : // Class Definition for SgPowerOp
  264913             : class ROSE_DLL_API SgPowerOp  : public SgBinaryOp
  264914             :    {
  264915             :      public:
  264916             : 
  264917             : 
  264918             : /* #line 264919 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  264919             : 
  264920             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  264921             : // Start of memberFunctionString
  264922             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  264923             : 
  264924             : // *** COMMON CODE SECTION BEGINS HERE ***
  264925             : 
  264926             :     public:
  264927             : 
  264928             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  264929             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  264930             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  264931             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  264932             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  264933             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  264934             : 
  264935             :       /*! \brief returns a string representing the class name */
  264936             :           virtual std::string class_name() const override;
  264937             : 
  264938             :       /*! \brief returns new style SageIII enum values */
  264939             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  264940             : 
  264941             :       /*! \brief static variant value */
  264942             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  264943             :        // static const VariantT static_variant = V_SgPowerOp;
  264944             :           enum { static_variant = V_SgPowerOp };
  264945             : 
  264946             :        /* the generated cast function */
  264947             :       /*! \brief Casts pointer from base class to derived class */
  264948             :           ROSE_DLL_API friend       SgPowerOp* isSgPowerOp(       SgNode * s );
  264949             : 
  264950             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  264951             :           ROSE_DLL_API friend const SgPowerOp* isSgPowerOp( const SgNode * s );
  264952             : 
  264953             :      // ******************************************
  264954             :      // * Memory Pool / New / Delete
  264955             :      // ******************************************
  264956             : 
  264957             :      public:
  264958             :           /// \private
  264959             :           static const unsigned pool_size; //
  264960             :           /// \private
  264961             :           static std::vector<unsigned char *> pools; //
  264962             :           /// \private
  264963             :           static SgPowerOp * next_node; // 
  264964             : 
  264965             :           /// \private
  264966             :           static unsigned long initializeStorageClassArray(SgPowerOpStorageClass *); //
  264967             : 
  264968             :           /// \private
  264969             :           static void clearMemoryPool(); //
  264970             :           static void deleteMemoryPool(); //
  264971             : 
  264972             :           /// \private
  264973             :           static void extendMemoryPoolForFileIO(); //
  264974             : 
  264975             :           /// \private
  264976             :           static SgPowerOp * getPointerFromGlobalIndex(unsigned long); //
  264977             :           /// \private
  264978             :           static SgPowerOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  264979             : 
  264980             :           /// \private
  264981             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  264982             :           /// \private
  264983             :           static void resetValidFreepointers(); //
  264984             :           /// \private
  264985             :           static unsigned long getNumberOfLastValidPointer(); //
  264986             : 
  264987             : 
  264988             : #if defined(INLINE_FUNCTIONS)
  264989             :       /*! \brief returns pointer to newly allocated IR node */
  264990             :           inline void *operator new (size_t size);
  264991             : #else
  264992             :       /*! \brief returns pointer to newly allocated IR node */
  264993             :           void *operator new (size_t size);
  264994             : #endif
  264995             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  264996             :           void operator delete (void* pointer, size_t size);
  264997             : 
  264998             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  264999           0 :           void operator delete (void* pointer)
  265000             :              {
  265001             :             // This is the generated delete operator...
  265002           0 :                SgPowerOp::operator delete (pointer,sizeof(SgPowerOp));
  265003             :              }
  265004             : 
  265005             :       /*! \brief Returns the total number of IR nodes of this type */
  265006             :           static size_t numberOfNodes();
  265007             : 
  265008             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  265009             :           static size_t memoryUsage();
  265010             : 
  265011             :       // End of scope which started in IR nodes specific code 
  265012             :       /* */
  265013             : 
  265014             :       /* name Internal Functions
  265015             :           \brief Internal functions ... incomplete-documentation
  265016             : 
  265017             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265018             :           or by particularly knowledgeable users for specialized tools or applications.
  265019             : 
  265020             :           \internal We could not make these private because they are required by user for special purposes. And 
  265021             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  265022             :          
  265023             :        */
  265024             : 
  265025             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  265026             :        // overridden in every class by *generated* implementation
  265027             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  265028             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  265029             :        // MS: 06/28/02 container of names of variables or container indices 
  265030             :        // used used in the traversal to access AST successor nodes
  265031             :        // overridden in every class by *generated* implementation
  265032             :       /*! \brief container of names of variables or container indices used used in the traversal
  265033             :           to access AST successor nodes overridden in every class by *generated* implementation */
  265034             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  265035             : 
  265036             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  265037             :        // than all the vector copies. The implementation for these functions is generated for each class.
  265038             :       /*! \brief return number of children in the traversal successor list */
  265039             :           virtual size_t get_numberOfTraversalSuccessors() override;
  265040             :       /*! \brief index-based access to traversal successors by index number */
  265041             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  265042             :       /*! \brief index-based access to traversal successors by child node */
  265043             :           virtual size_t get_childIndex(SgNode *child) override;
  265044             : 
  265045             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  265046             :        // MS: 08/16/2002 method for generating RTI information
  265047             :       /*! \brief return C++ Runtime-Time-Information */
  265048             :           virtual RTIReturnType roseRTI() override;
  265049             : #endif
  265050             :       /* */
  265051             : 
  265052             : 
  265053             : 
  265054             :       /* name Deprecated Functions
  265055             :           \brief Deprecated functions ... incomplete-documentation
  265056             : 
  265057             :           These functions have been deprecated from use.
  265058             :        */
  265059             :       /* */
  265060             : 
  265061             :       /*! returns a C style string (char*) representing the class name */
  265062             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  265063             : 
  265064             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  265065             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  265066             : #if 0
  265067             :       /*! returns old style Sage II enum values */
  265068             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  265069             :       /*! returns old style Sage II enum values */
  265070             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  265071             : #endif
  265072             :       /* */
  265073             : 
  265074             : 
  265075             : 
  265076             : 
  265077             :      public:
  265078             :       /* name Traversal Support Functions
  265079             :           \brief Traversal support functions ... incomplete-documentation
  265080             : 
  265081             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265082             :           or by particularly knowledgable users for specialized tools or applications.
  265083             :        */
  265084             :       /* */
  265085             : 
  265086             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  265087             :        // (inferior to ROSE traversal mechanism, experimental).
  265088             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  265089             :        */
  265090             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  265091             : 
  265092             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  265093             :       /*! \brief support for the classic visitor pattern done in GoF */
  265094             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  265095             : 
  265096             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  265097             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  265098             :        */
  265099             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  265100             : 
  265101             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  265102             :        */
  265103             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  265104             : 
  265105             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  265106             :        // This traversal helps support internal tools that call static member functions.
  265107             :        // note: this function operates on the memory pools.
  265108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  265109             :        */
  265110             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  265111             :       /* */
  265112             : 
  265113             : 
  265114             :      public:
  265115             :       /* name Memory Allocation Functions
  265116             :           \brief Memory allocations functions ... incomplete-documentation
  265117             : 
  265118             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265119             :           or by particularly knowledgable users for specialized tools or applications.
  265120             :        */
  265121             :       /* */
  265122             : 
  265123             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  265124             : 
  265125             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  265126             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  265127             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  265128             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  265129             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  265130             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  265131             :           being used with the AST File I/O mechanism.
  265132             :        */
  265133             :           virtual bool isInMemoryPool() override;
  265134             : 
  265135             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  265136             : 
  265137             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  265138             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  265139             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  265140             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  265141             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  265142             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  265143             :           being used with the AST File I/O mechanism.
  265144             :        */
  265145             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  265146             : 
  265147             :       // DQ (4/30/2006): Modified to be a const function.
  265148             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  265149             : 
  265150             :           This functions is part of general support for many possible tools to operate 
  265151             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  265152             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  265153             :           less than the set of pointers used by the AST file I/O. This is part of
  265154             :           work implemented by Andreas, and support tools such as the AST graph generation.
  265155             : 
  265156             :           \warning This function can return unexpected data members and thus the 
  265157             :                    order and the number of elements is unpredicable and subject 
  265158             :                    to change.
  265159             : 
  265160             :           \returns STL vector of pairs of SgNode* and strings
  265161             :        */
  265162             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  265163             : 
  265164             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  265165             : 
  265166             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  265167             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  265168             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  265169             : 
  265170             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  265171             :                    and subject to change.
  265172             :        */
  265173             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  265174             : 
  265175             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  265176             : 
  265177             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  265178             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  265179             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  265180             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  265181             : 
  265182             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  265183             : 
  265184             :           \returns long
  265185             :        */
  265186             :           virtual long getChildIndex( SgNode* childNode ) const override;
  265187             : 
  265188             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  265189             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  265190             :       /* \brief Constructor for use by AST File I/O Mechanism
  265191             : 
  265192             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  265193             :           which obtained via fast binary file I/O from disk.
  265194             :        */
  265195             :        // SgPowerOp( SgPowerOpStorageClass& source );
  265196             : 
  265197             : 
  265198             : 
  265199             : 
  265200             : 
  265201             :  // JH (10/24/2005): methods added to support the ast file IO
  265202             :     private:
  265203             : 
  265204             :       /* name AST Memory Allocation Support Functions
  265205             :           \brief Memory allocations support....
  265206             : 
  265207             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  265208             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  265209             :           and support the AST File I/O Mechanism.
  265210             :        */
  265211             :       /* */
  265212             : 
  265213             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  265214             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  265215             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  265216             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  265217             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  265218             :           a correspinding one in the AST_FILE_IO class!
  265219             :        */
  265220             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  265221             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  265222             :       /* \brief Typedef used for low level memory access.
  265223             :        */
  265224             :        // typedef unsigned char* TestType;
  265225             : 
  265226             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  265227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  265228             :       /* \brief Typedef used to hold memory addresses as values.
  265229             :        */
  265230             :        // typedef unsigned long  AddressType;
  265231             : 
  265232             : 
  265233             : 
  265234             :        // necessary, to have direct access to the p_freepointer and the private methods !
  265235             :       /*! \brief friend class declaration to support AST File I/O */
  265236             :           friend class AST_FILE_IO;
  265237             : 
  265238             :       /*! \brief friend class declaration to support AST File I/O */
  265239             :           friend class SgPowerOpStorageClass;
  265240             : 
  265241             :       /*! \brief friend class declaration to support AST File I/O */
  265242             :           friend class AstSpecificDataManagingClass;
  265243             : 
  265244             :       /*! \brief friend class declaration to support AST File I/O */
  265245             :           friend class AstSpecificDataManagingClassStorageClass;
  265246             :     public:
  265247             :       /*! \brief IR node constructor to support AST File I/O */
  265248             :           SgPowerOp( const SgPowerOpStorageClass& source );
  265249             : 
  265250             :  // private: // JJW hack
  265251             :        /*
  265252             :           name AST Memory Allocation Support Variables
  265253             :           Memory allocations support variables 
  265254             : 
  265255             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  265256             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  265257             :           and support the AST File I/O Mechanism.
  265258             :        */
  265259             :       /* */
  265260             : 
  265261             :     public:
  265262             : 
  265263             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  265264             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  265265             :       // virtual SgNode* addRegExpAttribute();
  265266             :       /*! \brief Support for AST matching using regular expression.
  265267             : 
  265268             :           This support is incomplete and the subject of current research to define 
  265269             :           RegEx trees to support inexact matching.
  265270             :        */
  265271             :           SgPowerOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  265272             : 
  265273             : // *** COMMON CODE SECTION ENDS HERE ***
  265274             : 
  265275             : 
  265276             : // End of memberFunctionString
  265277             : // Start of memberFunctionString
  265278             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  265279             : 
  265280             :      // the generated cast function
  265281             :      // friend ROSE_DLL_API SgPowerOp* isSgPowerOp ( SgNode* s );
  265282             : 
  265283             :           typedef SgBinaryOp base_node_type;
  265284             : 
  265285             : 
  265286             : // End of memberFunctionString
  265287             : // Start of memberFunctionString
  265288             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  265289             : 
  265290             :           void post_construction_initialization() override;
  265291             : 
  265292             : 
  265293             : // End of memberFunctionString
  265294             : // Start of memberFunctionString
  265295             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  265296             : 
  265297           0 :           int precedence() const override { return 14; }
  265298             : 
  265299             : 
  265300             : // End of memberFunctionString
  265301             : 
  265302             : 
  265303             :      public: 
  265304             :          virtual ~SgPowerOp();
  265305             : 
  265306             : 
  265307             :      public: 
  265308             :          SgPowerOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  265309             :          SgPowerOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  265310             : 
  265311             :     protected:
  265312             : 
  265313             :     friend struct Rose::Traits::generated::describe_node_t<SgPowerOp>;
  265314             : 
  265315             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265316             : 
  265317             : 
  265318             :    };
  265319             : #endif
  265320             : 
  265321             : // postdeclarations for SgPowerOp
  265322             : 
  265323             : /* #line 265324 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265324             : 
  265325             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  265326             : 
  265327             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265328             : 
  265329             : 
  265330             : /* #line 265331 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265331             : 
  265332             : 
  265333             : 
  265334             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265335             : 
  265336             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  265337             : //      This code is automatically generated for each 
  265338             : //      terminal and non-terminal within the defined 
  265339             : //      grammar.  There is a simple way to change the 
  265340             : //      code to fix bugs etc.  See the ROSE README file
  265341             : //      for directions.
  265342             : 
  265343             : // tps: (02/22/2010): Adding DLL export requirements
  265344             : #include "rosedll.h"
  265345             : 
  265346             : // predeclarations for SgLeftDivideOp
  265347             : 
  265348             : /* #line 265349 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265349             : 
  265350             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  265351             : 
  265352             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265353             : 
  265354             : #if 1
  265355             : // Class Definition for SgLeftDivideOp
  265356             : class ROSE_DLL_API SgLeftDivideOp  : public SgBinaryOp
  265357             :    {
  265358             :      public:
  265359             : 
  265360             : 
  265361             : /* #line 265362 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265362             : 
  265363             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  265364             : // Start of memberFunctionString
  265365             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  265366             : 
  265367             : // *** COMMON CODE SECTION BEGINS HERE ***
  265368             : 
  265369             :     public:
  265370             : 
  265371             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  265372             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  265373             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  265374             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  265375             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  265376             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  265377             : 
  265378             :       /*! \brief returns a string representing the class name */
  265379             :           virtual std::string class_name() const override;
  265380             : 
  265381             :       /*! \brief returns new style SageIII enum values */
  265382             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  265383             : 
  265384             :       /*! \brief static variant value */
  265385             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  265386             :        // static const VariantT static_variant = V_SgLeftDivideOp;
  265387             :           enum { static_variant = V_SgLeftDivideOp };
  265388             : 
  265389             :        /* the generated cast function */
  265390             :       /*! \brief Casts pointer from base class to derived class */
  265391             :           ROSE_DLL_API friend       SgLeftDivideOp* isSgLeftDivideOp(       SgNode * s );
  265392             : 
  265393             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  265394             :           ROSE_DLL_API friend const SgLeftDivideOp* isSgLeftDivideOp( const SgNode * s );
  265395             : 
  265396             :      // ******************************************
  265397             :      // * Memory Pool / New / Delete
  265398             :      // ******************************************
  265399             : 
  265400             :      public:
  265401             :           /// \private
  265402             :           static const unsigned pool_size; //
  265403             :           /// \private
  265404             :           static std::vector<unsigned char *> pools; //
  265405             :           /// \private
  265406             :           static SgLeftDivideOp * next_node; // 
  265407             : 
  265408             :           /// \private
  265409             :           static unsigned long initializeStorageClassArray(SgLeftDivideOpStorageClass *); //
  265410             : 
  265411             :           /// \private
  265412             :           static void clearMemoryPool(); //
  265413             :           static void deleteMemoryPool(); //
  265414             : 
  265415             :           /// \private
  265416             :           static void extendMemoryPoolForFileIO(); //
  265417             : 
  265418             :           /// \private
  265419             :           static SgLeftDivideOp * getPointerFromGlobalIndex(unsigned long); //
  265420             :           /// \private
  265421             :           static SgLeftDivideOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  265422             : 
  265423             :           /// \private
  265424             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  265425             :           /// \private
  265426             :           static void resetValidFreepointers(); //
  265427             :           /// \private
  265428             :           static unsigned long getNumberOfLastValidPointer(); //
  265429             : 
  265430             : 
  265431             : #if defined(INLINE_FUNCTIONS)
  265432             :       /*! \brief returns pointer to newly allocated IR node */
  265433             :           inline void *operator new (size_t size);
  265434             : #else
  265435             :       /*! \brief returns pointer to newly allocated IR node */
  265436             :           void *operator new (size_t size);
  265437             : #endif
  265438             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  265439             :           void operator delete (void* pointer, size_t size);
  265440             : 
  265441             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  265442           0 :           void operator delete (void* pointer)
  265443             :              {
  265444             :             // This is the generated delete operator...
  265445           0 :                SgLeftDivideOp::operator delete (pointer,sizeof(SgLeftDivideOp));
  265446             :              }
  265447             : 
  265448             :       /*! \brief Returns the total number of IR nodes of this type */
  265449             :           static size_t numberOfNodes();
  265450             : 
  265451             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  265452             :           static size_t memoryUsage();
  265453             : 
  265454             :       // End of scope which started in IR nodes specific code 
  265455             :       /* */
  265456             : 
  265457             :       /* name Internal Functions
  265458             :           \brief Internal functions ... incomplete-documentation
  265459             : 
  265460             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265461             :           or by particularly knowledgeable users for specialized tools or applications.
  265462             : 
  265463             :           \internal We could not make these private because they are required by user for special purposes. And 
  265464             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  265465             :          
  265466             :        */
  265467             : 
  265468             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  265469             :        // overridden in every class by *generated* implementation
  265470             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  265471             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  265472             :        // MS: 06/28/02 container of names of variables or container indices 
  265473             :        // used used in the traversal to access AST successor nodes
  265474             :        // overridden in every class by *generated* implementation
  265475             :       /*! \brief container of names of variables or container indices used used in the traversal
  265476             :           to access AST successor nodes overridden in every class by *generated* implementation */
  265477             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  265478             : 
  265479             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  265480             :        // than all the vector copies. The implementation for these functions is generated for each class.
  265481             :       /*! \brief return number of children in the traversal successor list */
  265482             :           virtual size_t get_numberOfTraversalSuccessors() override;
  265483             :       /*! \brief index-based access to traversal successors by index number */
  265484             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  265485             :       /*! \brief index-based access to traversal successors by child node */
  265486             :           virtual size_t get_childIndex(SgNode *child) override;
  265487             : 
  265488             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  265489             :        // MS: 08/16/2002 method for generating RTI information
  265490             :       /*! \brief return C++ Runtime-Time-Information */
  265491             :           virtual RTIReturnType roseRTI() override;
  265492             : #endif
  265493             :       /* */
  265494             : 
  265495             : 
  265496             : 
  265497             :       /* name Deprecated Functions
  265498             :           \brief Deprecated functions ... incomplete-documentation
  265499             : 
  265500             :           These functions have been deprecated from use.
  265501             :        */
  265502             :       /* */
  265503             : 
  265504             :       /*! returns a C style string (char*) representing the class name */
  265505             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  265506             : 
  265507             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  265508             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  265509             : #if 0
  265510             :       /*! returns old style Sage II enum values */
  265511             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  265512             :       /*! returns old style Sage II enum values */
  265513             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  265514             : #endif
  265515             :       /* */
  265516             : 
  265517             : 
  265518             : 
  265519             : 
  265520             :      public:
  265521             :       /* name Traversal Support Functions
  265522             :           \brief Traversal support functions ... incomplete-documentation
  265523             : 
  265524             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265525             :           or by particularly knowledgable users for specialized tools or applications.
  265526             :        */
  265527             :       /* */
  265528             : 
  265529             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  265530             :        // (inferior to ROSE traversal mechanism, experimental).
  265531             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  265532             :        */
  265533             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  265534             : 
  265535             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  265536             :       /*! \brief support for the classic visitor pattern done in GoF */
  265537             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  265538             : 
  265539             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  265540             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  265541             :        */
  265542             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  265543             : 
  265544             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  265545             :        */
  265546             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  265547             : 
  265548             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  265549             :        // This traversal helps support internal tools that call static member functions.
  265550             :        // note: this function operates on the memory pools.
  265551             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  265552             :        */
  265553             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  265554             :       /* */
  265555             : 
  265556             : 
  265557             :      public:
  265558             :       /* name Memory Allocation Functions
  265559             :           \brief Memory allocations functions ... incomplete-documentation
  265560             : 
  265561             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265562             :           or by particularly knowledgable users for specialized tools or applications.
  265563             :        */
  265564             :       /* */
  265565             : 
  265566             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  265567             : 
  265568             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  265569             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  265570             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  265571             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  265572             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  265573             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  265574             :           being used with the AST File I/O mechanism.
  265575             :        */
  265576             :           virtual bool isInMemoryPool() override;
  265577             : 
  265578             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  265579             : 
  265580             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  265581             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  265582             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  265583             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  265584             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  265585             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  265586             :           being used with the AST File I/O mechanism.
  265587             :        */
  265588             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  265589             : 
  265590             :       // DQ (4/30/2006): Modified to be a const function.
  265591             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  265592             : 
  265593             :           This functions is part of general support for many possible tools to operate 
  265594             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  265595             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  265596             :           less than the set of pointers used by the AST file I/O. This is part of
  265597             :           work implemented by Andreas, and support tools such as the AST graph generation.
  265598             : 
  265599             :           \warning This function can return unexpected data members and thus the 
  265600             :                    order and the number of elements is unpredicable and subject 
  265601             :                    to change.
  265602             : 
  265603             :           \returns STL vector of pairs of SgNode* and strings
  265604             :        */
  265605             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  265606             : 
  265607             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  265608             : 
  265609             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  265610             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  265611             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  265612             : 
  265613             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  265614             :                    and subject to change.
  265615             :        */
  265616             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  265617             : 
  265618             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  265619             : 
  265620             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  265621             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  265622             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  265623             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  265624             : 
  265625             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  265626             : 
  265627             :           \returns long
  265628             :        */
  265629             :           virtual long getChildIndex( SgNode* childNode ) const override;
  265630             : 
  265631             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  265632             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  265633             :       /* \brief Constructor for use by AST File I/O Mechanism
  265634             : 
  265635             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  265636             :           which obtained via fast binary file I/O from disk.
  265637             :        */
  265638             :        // SgLeftDivideOp( SgLeftDivideOpStorageClass& source );
  265639             : 
  265640             : 
  265641             : 
  265642             : 
  265643             : 
  265644             :  // JH (10/24/2005): methods added to support the ast file IO
  265645             :     private:
  265646             : 
  265647             :       /* name AST Memory Allocation Support Functions
  265648             :           \brief Memory allocations support....
  265649             : 
  265650             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  265651             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  265652             :           and support the AST File I/O Mechanism.
  265653             :        */
  265654             :       /* */
  265655             : 
  265656             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  265657             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  265658             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  265659             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  265660             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  265661             :           a correspinding one in the AST_FILE_IO class!
  265662             :        */
  265663             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  265664             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  265665             :       /* \brief Typedef used for low level memory access.
  265666             :        */
  265667             :        // typedef unsigned char* TestType;
  265668             : 
  265669             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  265670             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  265671             :       /* \brief Typedef used to hold memory addresses as values.
  265672             :        */
  265673             :        // typedef unsigned long  AddressType;
  265674             : 
  265675             : 
  265676             : 
  265677             :        // necessary, to have direct access to the p_freepointer and the private methods !
  265678             :       /*! \brief friend class declaration to support AST File I/O */
  265679             :           friend class AST_FILE_IO;
  265680             : 
  265681             :       /*! \brief friend class declaration to support AST File I/O */
  265682             :           friend class SgLeftDivideOpStorageClass;
  265683             : 
  265684             :       /*! \brief friend class declaration to support AST File I/O */
  265685             :           friend class AstSpecificDataManagingClass;
  265686             : 
  265687             :       /*! \brief friend class declaration to support AST File I/O */
  265688             :           friend class AstSpecificDataManagingClassStorageClass;
  265689             :     public:
  265690             :       /*! \brief IR node constructor to support AST File I/O */
  265691             :           SgLeftDivideOp( const SgLeftDivideOpStorageClass& source );
  265692             : 
  265693             :  // private: // JJW hack
  265694             :        /*
  265695             :           name AST Memory Allocation Support Variables
  265696             :           Memory allocations support variables 
  265697             : 
  265698             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  265699             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  265700             :           and support the AST File I/O Mechanism.
  265701             :        */
  265702             :       /* */
  265703             : 
  265704             :     public:
  265705             : 
  265706             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  265707             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  265708             :       // virtual SgNode* addRegExpAttribute();
  265709             :       /*! \brief Support for AST matching using regular expression.
  265710             : 
  265711             :           This support is incomplete and the subject of current research to define 
  265712             :           RegEx trees to support inexact matching.
  265713             :        */
  265714             :           SgLeftDivideOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  265715             : 
  265716             : // *** COMMON CODE SECTION ENDS HERE ***
  265717             : 
  265718             : 
  265719             : // End of memberFunctionString
  265720             : // Start of memberFunctionString
  265721             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  265722             : 
  265723             :      // the generated cast function
  265724             :      // friend ROSE_DLL_API SgLeftDivideOp* isSgLeftDivideOp ( SgNode* s );
  265725             : 
  265726             :           typedef SgBinaryOp base_node_type;
  265727             : 
  265728             : 
  265729             : // End of memberFunctionString
  265730             : // Start of memberFunctionString
  265731             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  265732             : 
  265733             :           void post_construction_initialization() override;
  265734             : 
  265735             : 
  265736             : // End of memberFunctionString
  265737             : // Start of memberFunctionString
  265738             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  265739             : 
  265740           0 :           int precedence() const override { return 13; }
  265741             : 
  265742             : 
  265743             : // End of memberFunctionString
  265744             : 
  265745             : 
  265746             :      public: 
  265747             :          virtual ~SgLeftDivideOp();
  265748             : 
  265749             : 
  265750             :      public: 
  265751             :          SgLeftDivideOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  265752             :          SgLeftDivideOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  265753             : 
  265754             :     protected:
  265755             : 
  265756             :     friend struct Rose::Traits::generated::describe_node_t<SgLeftDivideOp>;
  265757             : 
  265758             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265759             : 
  265760             : 
  265761             :    };
  265762             : #endif
  265763             : 
  265764             : // postdeclarations for SgLeftDivideOp
  265765             : 
  265766             : /* #line 265767 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265767             : 
  265768             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  265769             : 
  265770             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265771             : 
  265772             : 
  265773             : /* #line 265774 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265774             : 
  265775             : 
  265776             : 
  265777             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265778             : 
  265779             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  265780             : //      This code is automatically generated for each 
  265781             : //      terminal and non-terminal within the defined 
  265782             : //      grammar.  There is a simple way to change the 
  265783             : //      code to fix bugs etc.  See the ROSE README file
  265784             : //      for directions.
  265785             : 
  265786             : // tps: (02/22/2010): Adding DLL export requirements
  265787             : #include "rosedll.h"
  265788             : 
  265789             : // predeclarations for SgSIMDBinaryOp
  265790             : 
  265791             : /* #line 265792 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265792             : 
  265793             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  265794             : 
  265795             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  265796             : 
  265797             : #if 1
  265798             : // Class Definition for SgSIMDBinaryOp
  265799             : class ROSE_DLL_API SgSIMDBinaryOp  : public SgBinaryOp
  265800             :    {
  265801             :      public:
  265802             : 
  265803             : 
  265804             : /* #line 265805 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  265805             : 
  265806             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  265807             : // Start of memberFunctionString
  265808             : /* #line 190 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  265809             : 
  265810             :           int length() const ROSE_DEPRECATED_FUNCTION;
  265811             :           bool empty() const ROSE_DEPRECATED_FUNCTION;
  265812             :        // void operator_unparse( const char *, Unparse_Info &, ostream & );
  265813             : 
  265814             : 
  265815             : // End of memberFunctionString
  265816             : // Start of memberFunctionString
  265817             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  265818             : 
  265819             : // *** COMMON CODE SECTION BEGINS HERE ***
  265820             : 
  265821             :     public:
  265822             : 
  265823             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  265824             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  265825             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  265826             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  265827             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  265828             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  265829             : 
  265830             :       /*! \brief returns a string representing the class name */
  265831             :           virtual std::string class_name() const override;
  265832             : 
  265833             :       /*! \brief returns new style SageIII enum values */
  265834             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  265835             : 
  265836             :       /*! \brief static variant value */
  265837             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  265838             :        // static const VariantT static_variant = V_SgSIMDBinaryOp;
  265839             :           enum { static_variant = V_SgSIMDBinaryOp };
  265840             : 
  265841             :        /* the generated cast function */
  265842             :       /*! \brief Casts pointer from base class to derived class */
  265843             :           ROSE_DLL_API friend       SgSIMDBinaryOp* isSgSIMDBinaryOp(       SgNode * s );
  265844             : 
  265845             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  265846             :           ROSE_DLL_API friend const SgSIMDBinaryOp* isSgSIMDBinaryOp( const SgNode * s );
  265847             : 
  265848             :      // ******************************************
  265849             :      // * Memory Pool / New / Delete
  265850             :      // ******************************************
  265851             : 
  265852             :      public:
  265853             :           /// \private
  265854             :           static const unsigned pool_size; //
  265855             :           /// \private
  265856             :           static std::vector<unsigned char *> pools; //
  265857             :           /// \private
  265858             :           static SgSIMDBinaryOp * next_node; // 
  265859             : 
  265860             :           /// \private
  265861             :           static unsigned long initializeStorageClassArray(SgSIMDBinaryOpStorageClass *); //
  265862             : 
  265863             :           /// \private
  265864             :           static void clearMemoryPool(); //
  265865             :           static void deleteMemoryPool(); //
  265866             : 
  265867             :           /// \private
  265868             :           static void extendMemoryPoolForFileIO(); //
  265869             : 
  265870             :           /// \private
  265871             :           static SgSIMDBinaryOp * getPointerFromGlobalIndex(unsigned long); //
  265872             :           /// \private
  265873             :           static SgSIMDBinaryOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  265874             : 
  265875             :           /// \private
  265876             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  265877             :           /// \private
  265878             :           static void resetValidFreepointers(); //
  265879             :           /// \private
  265880             :           static unsigned long getNumberOfLastValidPointer(); //
  265881             : 
  265882             : 
  265883             : #if defined(INLINE_FUNCTIONS)
  265884             :       /*! \brief returns pointer to newly allocated IR node */
  265885             :           inline void *operator new (size_t size);
  265886             : #else
  265887             :       /*! \brief returns pointer to newly allocated IR node */
  265888             :           void *operator new (size_t size);
  265889             : #endif
  265890             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  265891             :           void operator delete (void* pointer, size_t size);
  265892             : 
  265893             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  265894           0 :           void operator delete (void* pointer)
  265895             :              {
  265896             :             // This is the generated delete operator...
  265897           0 :                SgSIMDBinaryOp::operator delete (pointer,sizeof(SgSIMDBinaryOp));
  265898             :              }
  265899             : 
  265900             :       /*! \brief Returns the total number of IR nodes of this type */
  265901             :           static size_t numberOfNodes();
  265902             : 
  265903             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  265904             :           static size_t memoryUsage();
  265905             : 
  265906             :       // End of scope which started in IR nodes specific code 
  265907             :       /* */
  265908             : 
  265909             :       /* name Internal Functions
  265910             :           \brief Internal functions ... incomplete-documentation
  265911             : 
  265912             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265913             :           or by particularly knowledgeable users for specialized tools or applications.
  265914             : 
  265915             :           \internal We could not make these private because they are required by user for special purposes. And 
  265916             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  265917             :          
  265918             :        */
  265919             : 
  265920             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  265921             :        // overridden in every class by *generated* implementation
  265922             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  265923             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  265924             :        // MS: 06/28/02 container of names of variables or container indices 
  265925             :        // used used in the traversal to access AST successor nodes
  265926             :        // overridden in every class by *generated* implementation
  265927             :       /*! \brief container of names of variables or container indices used used in the traversal
  265928             :           to access AST successor nodes overridden in every class by *generated* implementation */
  265929             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  265930             : 
  265931             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  265932             :        // than all the vector copies. The implementation for these functions is generated for each class.
  265933             :       /*! \brief return number of children in the traversal successor list */
  265934             :           virtual size_t get_numberOfTraversalSuccessors() override;
  265935             :       /*! \brief index-based access to traversal successors by index number */
  265936             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  265937             :       /*! \brief index-based access to traversal successors by child node */
  265938             :           virtual size_t get_childIndex(SgNode *child) override;
  265939             : 
  265940             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  265941             :        // MS: 08/16/2002 method for generating RTI information
  265942             :       /*! \brief return C++ Runtime-Time-Information */
  265943             :           virtual RTIReturnType roseRTI() override;
  265944             : #endif
  265945             :       /* */
  265946             : 
  265947             : 
  265948             : 
  265949             :       /* name Deprecated Functions
  265950             :           \brief Deprecated functions ... incomplete-documentation
  265951             : 
  265952             :           These functions have been deprecated from use.
  265953             :        */
  265954             :       /* */
  265955             : 
  265956             :       /*! returns a C style string (char*) representing the class name */
  265957             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  265958             : 
  265959             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  265960             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  265961             : #if 0
  265962             :       /*! returns old style Sage II enum values */
  265963             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  265964             :       /*! returns old style Sage II enum values */
  265965             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  265966             : #endif
  265967             :       /* */
  265968             : 
  265969             : 
  265970             : 
  265971             : 
  265972             :      public:
  265973             :       /* name Traversal Support Functions
  265974             :           \brief Traversal support functions ... incomplete-documentation
  265975             : 
  265976             :           These functions have been made public as part of the design, but they are suggested for internal use 
  265977             :           or by particularly knowledgable users for specialized tools or applications.
  265978             :        */
  265979             :       /* */
  265980             : 
  265981             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  265982             :        // (inferior to ROSE traversal mechanism, experimental).
  265983             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  265984             :        */
  265985             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  265986             : 
  265987             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  265988             :       /*! \brief support for the classic visitor pattern done in GoF */
  265989             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  265990             : 
  265991             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  265992             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  265993             :        */
  265994             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  265995             : 
  265996             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  265997             :        */
  265998             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  265999             : 
  266000             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  266001             :        // This traversal helps support internal tools that call static member functions.
  266002             :        // note: this function operates on the memory pools.
  266003             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  266004             :        */
  266005             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  266006             :       /* */
  266007             : 
  266008             : 
  266009             :      public:
  266010             :       /* name Memory Allocation Functions
  266011             :           \brief Memory allocations functions ... incomplete-documentation
  266012             : 
  266013             :           These functions have been made public as part of the design, but they are suggested for internal use 
  266014             :           or by particularly knowledgable users for specialized tools or applications.
  266015             :        */
  266016             :       /* */
  266017             : 
  266018             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  266019             : 
  266020             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  266021             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  266022             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  266023             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  266024             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  266025             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  266026             :           being used with the AST File I/O mechanism.
  266027             :        */
  266028             :           virtual bool isInMemoryPool() override;
  266029             : 
  266030             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  266031             : 
  266032             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  266033             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  266034             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  266035             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  266036             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  266037             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  266038             :           being used with the AST File I/O mechanism.
  266039             :        */
  266040             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  266041             : 
  266042             :       // DQ (4/30/2006): Modified to be a const function.
  266043             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  266044             : 
  266045             :           This functions is part of general support for many possible tools to operate 
  266046             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  266047             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  266048             :           less than the set of pointers used by the AST file I/O. This is part of
  266049             :           work implemented by Andreas, and support tools such as the AST graph generation.
  266050             : 
  266051             :           \warning This function can return unexpected data members and thus the 
  266052             :                    order and the number of elements is unpredicable and subject 
  266053             :                    to change.
  266054             : 
  266055             :           \returns STL vector of pairs of SgNode* and strings
  266056             :        */
  266057             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  266058             : 
  266059             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  266060             : 
  266061             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  266062             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  266063             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  266064             : 
  266065             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  266066             :                    and subject to change.
  266067             :        */
  266068             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  266069             : 
  266070             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  266071             : 
  266072             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  266073             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  266074             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  266075             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  266076             : 
  266077             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  266078             : 
  266079             :           \returns long
  266080             :        */
  266081             :           virtual long getChildIndex( SgNode* childNode ) const override;
  266082             : 
  266083             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  266084             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  266085             :       /* \brief Constructor for use by AST File I/O Mechanism
  266086             : 
  266087             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  266088             :           which obtained via fast binary file I/O from disk.
  266089             :        */
  266090             :        // SgSIMDBinaryOp( SgSIMDBinaryOpStorageClass& source );
  266091             : 
  266092             : 
  266093             : 
  266094             : 
  266095             : 
  266096             :  // JH (10/24/2005): methods added to support the ast file IO
  266097             :     private:
  266098             : 
  266099             :       /* name AST Memory Allocation Support Functions
  266100             :           \brief Memory allocations support....
  266101             : 
  266102             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  266103             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  266104             :           and support the AST File I/O Mechanism.
  266105             :        */
  266106             :       /* */
  266107             : 
  266108             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  266109             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  266110             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  266111             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  266112             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  266113             :           a correspinding one in the AST_FILE_IO class!
  266114             :        */
  266115             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  266116             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  266117             :       /* \brief Typedef used for low level memory access.
  266118             :        */
  266119             :        // typedef unsigned char* TestType;
  266120             : 
  266121             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  266122             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  266123             :       /* \brief Typedef used to hold memory addresses as values.
  266124             :        */
  266125             :        // typedef unsigned long  AddressType;
  266126             : 
  266127             : 
  266128             : 
  266129             :        // necessary, to have direct access to the p_freepointer and the private methods !
  266130             :       /*! \brief friend class declaration to support AST File I/O */
  266131             :           friend class AST_FILE_IO;
  266132             : 
  266133             :       /*! \brief friend class declaration to support AST File I/O */
  266134             :           friend class SgSIMDBinaryOpStorageClass;
  266135             : 
  266136             :       /*! \brief friend class declaration to support AST File I/O */
  266137             :           friend class AstSpecificDataManagingClass;
  266138             : 
  266139             :       /*! \brief friend class declaration to support AST File I/O */
  266140             :           friend class AstSpecificDataManagingClassStorageClass;
  266141             :     public:
  266142             :       /*! \brief IR node constructor to support AST File I/O */
  266143             :           SgSIMDBinaryOp( const SgSIMDBinaryOpStorageClass& source );
  266144             : 
  266145             :  // private: // JJW hack
  266146             :        /*
  266147             :           name AST Memory Allocation Support Variables
  266148             :           Memory allocations support variables 
  266149             : 
  266150             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  266151             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  266152             :           and support the AST File I/O Mechanism.
  266153             :        */
  266154             :       /* */
  266155             : 
  266156             :     public:
  266157             : 
  266158             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  266159             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  266160             :       // virtual SgNode* addRegExpAttribute();
  266161             :       /*! \brief Support for AST matching using regular expression.
  266162             : 
  266163             :           This support is incomplete and the subject of current research to define 
  266164             :           RegEx trees to support inexact matching.
  266165             :        */
  266166             :           SgSIMDBinaryOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  266167             : 
  266168             : // *** COMMON CODE SECTION ENDS HERE ***
  266169             : 
  266170             : 
  266171             : // End of memberFunctionString
  266172             : // Start of memberFunctionString
  266173             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  266174             : 
  266175             :      // the generated cast function
  266176             :      // friend ROSE_DLL_API SgSIMDBinaryOp* isSgSIMDBinaryOp ( SgNode* s );
  266177             : 
  266178             :           typedef SgBinaryOp base_node_type;
  266179             : 
  266180             : 
  266181             : // End of memberFunctionString
  266182             : // Start of memberFunctionString
  266183             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  266184             : 
  266185             :           void post_construction_initialization() override;
  266186             : 
  266187             : 
  266188             : // End of memberFunctionString
  266189             : // Start of memberFunctionString
  266190             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  266191             : 
  266192           0 :           int precedence() const override { return 16; }
  266193             : 
  266194             : 
  266195             : // End of memberFunctionString
  266196             : 
  266197             : 
  266198             :      public: 
  266199             :          virtual ~SgSIMDBinaryOp();
  266200             : 
  266201             : 
  266202             :      public: 
  266203             :          SgSIMDBinaryOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  266204             :          SgSIMDBinaryOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  266205             : 
  266206             :     protected:
  266207             : 
  266208             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDBinaryOp>;
  266209             : 
  266210             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266211             : 
  266212             : 
  266213             :    };
  266214             : #endif
  266215             : 
  266216             : // postdeclarations for SgSIMDBinaryOp
  266217             : 
  266218             : /* #line 266219 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266219             : 
  266220             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  266221             : 
  266222             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266223             : 
  266224             : 
  266225             : /* #line 266226 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266226             : 
  266227             : 
  266228             : 
  266229             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266230             : 
  266231             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  266232             : //      This code is automatically generated for each 
  266233             : //      terminal and non-terminal within the defined 
  266234             : //      grammar.  There is a simple way to change the 
  266235             : //      code to fix bugs etc.  See the ROSE README file
  266236             : //      for directions.
  266237             : 
  266238             : // tps: (02/22/2010): Adding DLL export requirements
  266239             : #include "rosedll.h"
  266240             : 
  266241             : // predeclarations for SgSIMDAddOp
  266242             : 
  266243             : /* #line 266244 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266244             : 
  266245             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  266246             : 
  266247             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266248             : 
  266249             : #if 1
  266250             : // Class Definition for SgSIMDAddOp
  266251             : class ROSE_DLL_API SgSIMDAddOp  : public SgSIMDBinaryOp
  266252             :    {
  266253             :      public:
  266254             : 
  266255             : 
  266256             : /* #line 266257 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266257             : 
  266258             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  266259             : // Start of memberFunctionString
  266260             : /* #line 9544 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  266261             : 
  266262             : 
  266263             : 
  266264             : // End of memberFunctionString
  266265             : // Start of memberFunctionString
  266266             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  266267             : 
  266268             : // *** COMMON CODE SECTION BEGINS HERE ***
  266269             : 
  266270             :     public:
  266271             : 
  266272             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  266273             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  266274             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  266275             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  266276             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  266277             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  266278             : 
  266279             :       /*! \brief returns a string representing the class name */
  266280             :           virtual std::string class_name() const override;
  266281             : 
  266282             :       /*! \brief returns new style SageIII enum values */
  266283             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  266284             : 
  266285             :       /*! \brief static variant value */
  266286             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  266287             :        // static const VariantT static_variant = V_SgSIMDAddOp;
  266288             :           enum { static_variant = V_SgSIMDAddOp };
  266289             : 
  266290             :        /* the generated cast function */
  266291             :       /*! \brief Casts pointer from base class to derived class */
  266292             :           ROSE_DLL_API friend       SgSIMDAddOp* isSgSIMDAddOp(       SgNode * s );
  266293             : 
  266294             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  266295             :           ROSE_DLL_API friend const SgSIMDAddOp* isSgSIMDAddOp( const SgNode * s );
  266296             : 
  266297             :      // ******************************************
  266298             :      // * Memory Pool / New / Delete
  266299             :      // ******************************************
  266300             : 
  266301             :      public:
  266302             :           /// \private
  266303             :           static const unsigned pool_size; //
  266304             :           /// \private
  266305             :           static std::vector<unsigned char *> pools; //
  266306             :           /// \private
  266307             :           static SgSIMDAddOp * next_node; // 
  266308             : 
  266309             :           /// \private
  266310             :           static unsigned long initializeStorageClassArray(SgSIMDAddOpStorageClass *); //
  266311             : 
  266312             :           /// \private
  266313             :           static void clearMemoryPool(); //
  266314             :           static void deleteMemoryPool(); //
  266315             : 
  266316             :           /// \private
  266317             :           static void extendMemoryPoolForFileIO(); //
  266318             : 
  266319             :           /// \private
  266320             :           static SgSIMDAddOp * getPointerFromGlobalIndex(unsigned long); //
  266321             :           /// \private
  266322             :           static SgSIMDAddOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  266323             : 
  266324             :           /// \private
  266325             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  266326             :           /// \private
  266327             :           static void resetValidFreepointers(); //
  266328             :           /// \private
  266329             :           static unsigned long getNumberOfLastValidPointer(); //
  266330             : 
  266331             : 
  266332             : #if defined(INLINE_FUNCTIONS)
  266333             :       /*! \brief returns pointer to newly allocated IR node */
  266334             :           inline void *operator new (size_t size);
  266335             : #else
  266336             :       /*! \brief returns pointer to newly allocated IR node */
  266337             :           void *operator new (size_t size);
  266338             : #endif
  266339             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  266340             :           void operator delete (void* pointer, size_t size);
  266341             : 
  266342             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  266343           0 :           void operator delete (void* pointer)
  266344             :              {
  266345             :             // This is the generated delete operator...
  266346           0 :                SgSIMDAddOp::operator delete (pointer,sizeof(SgSIMDAddOp));
  266347             :              }
  266348             : 
  266349             :       /*! \brief Returns the total number of IR nodes of this type */
  266350             :           static size_t numberOfNodes();
  266351             : 
  266352             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  266353             :           static size_t memoryUsage();
  266354             : 
  266355             :       // End of scope which started in IR nodes specific code 
  266356             :       /* */
  266357             : 
  266358             :       /* name Internal Functions
  266359             :           \brief Internal functions ... incomplete-documentation
  266360             : 
  266361             :           These functions have been made public as part of the design, but they are suggested for internal use 
  266362             :           or by particularly knowledgeable users for specialized tools or applications.
  266363             : 
  266364             :           \internal We could not make these private because they are required by user for special purposes. And 
  266365             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  266366             :          
  266367             :        */
  266368             : 
  266369             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  266370             :        // overridden in every class by *generated* implementation
  266371             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  266372             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  266373             :        // MS: 06/28/02 container of names of variables or container indices 
  266374             :        // used used in the traversal to access AST successor nodes
  266375             :        // overridden in every class by *generated* implementation
  266376             :       /*! \brief container of names of variables or container indices used used in the traversal
  266377             :           to access AST successor nodes overridden in every class by *generated* implementation */
  266378             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  266379             : 
  266380             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  266381             :        // than all the vector copies. The implementation for these functions is generated for each class.
  266382             :       /*! \brief return number of children in the traversal successor list */
  266383             :           virtual size_t get_numberOfTraversalSuccessors() override;
  266384             :       /*! \brief index-based access to traversal successors by index number */
  266385             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  266386             :       /*! \brief index-based access to traversal successors by child node */
  266387             :           virtual size_t get_childIndex(SgNode *child) override;
  266388             : 
  266389             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  266390             :        // MS: 08/16/2002 method for generating RTI information
  266391             :       /*! \brief return C++ Runtime-Time-Information */
  266392             :           virtual RTIReturnType roseRTI() override;
  266393             : #endif
  266394             :       /* */
  266395             : 
  266396             : 
  266397             : 
  266398             :       /* name Deprecated Functions
  266399             :           \brief Deprecated functions ... incomplete-documentation
  266400             : 
  266401             :           These functions have been deprecated from use.
  266402             :        */
  266403             :       /* */
  266404             : 
  266405             :       /*! returns a C style string (char*) representing the class name */
  266406             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  266407             : 
  266408             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  266409             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  266410             : #if 0
  266411             :       /*! returns old style Sage II enum values */
  266412             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  266413             :       /*! returns old style Sage II enum values */
  266414             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  266415             : #endif
  266416             :       /* */
  266417             : 
  266418             : 
  266419             : 
  266420             : 
  266421             :      public:
  266422             :       /* name Traversal Support Functions
  266423             :           \brief Traversal support functions ... incomplete-documentation
  266424             : 
  266425             :           These functions have been made public as part of the design, but they are suggested for internal use 
  266426             :           or by particularly knowledgable users for specialized tools or applications.
  266427             :        */
  266428             :       /* */
  266429             : 
  266430             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  266431             :        // (inferior to ROSE traversal mechanism, experimental).
  266432             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  266433             :        */
  266434             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  266435             : 
  266436             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  266437             :       /*! \brief support for the classic visitor pattern done in GoF */
  266438             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  266439             : 
  266440             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  266441             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  266442             :        */
  266443             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  266444             : 
  266445             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  266446             :        */
  266447             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  266448             : 
  266449             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  266450             :        // This traversal helps support internal tools that call static member functions.
  266451             :        // note: this function operates on the memory pools.
  266452             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  266453             :        */
  266454             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  266455             :       /* */
  266456             : 
  266457             : 
  266458             :      public:
  266459             :       /* name Memory Allocation Functions
  266460             :           \brief Memory allocations functions ... incomplete-documentation
  266461             : 
  266462             :           These functions have been made public as part of the design, but they are suggested for internal use 
  266463             :           or by particularly knowledgable users for specialized tools or applications.
  266464             :        */
  266465             :       /* */
  266466             : 
  266467             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  266468             : 
  266469             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  266470             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  266471             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  266472             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  266473             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  266474             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  266475             :           being used with the AST File I/O mechanism.
  266476             :        */
  266477             :           virtual bool isInMemoryPool() override;
  266478             : 
  266479             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  266480             : 
  266481             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  266482             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  266483             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  266484             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  266485             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  266486             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  266487             :           being used with the AST File I/O mechanism.
  266488             :        */
  266489             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  266490             : 
  266491             :       // DQ (4/30/2006): Modified to be a const function.
  266492             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  266493             : 
  266494             :           This functions is part of general support for many possible tools to operate 
  266495             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  266496             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  266497             :           less than the set of pointers used by the AST file I/O. This is part of
  266498             :           work implemented by Andreas, and support tools such as the AST graph generation.
  266499             : 
  266500             :           \warning This function can return unexpected data members and thus the 
  266501             :                    order and the number of elements is unpredicable and subject 
  266502             :                    to change.
  266503             : 
  266504             :           \returns STL vector of pairs of SgNode* and strings
  266505             :        */
  266506             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  266507             : 
  266508             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  266509             : 
  266510             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  266511             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  266512             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  266513             : 
  266514             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  266515             :                    and subject to change.
  266516             :        */
  266517             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  266518             : 
  266519             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  266520             : 
  266521             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  266522             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  266523             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  266524             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  266525             : 
  266526             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  266527             : 
  266528             :           \returns long
  266529             :        */
  266530             :           virtual long getChildIndex( SgNode* childNode ) const override;
  266531             : 
  266532             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  266533             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  266534             :       /* \brief Constructor for use by AST File I/O Mechanism
  266535             : 
  266536             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  266537             :           which obtained via fast binary file I/O from disk.
  266538             :        */
  266539             :        // SgSIMDAddOp( SgSIMDAddOpStorageClass& source );
  266540             : 
  266541             : 
  266542             : 
  266543             : 
  266544             : 
  266545             :  // JH (10/24/2005): methods added to support the ast file IO
  266546             :     private:
  266547             : 
  266548             :       /* name AST Memory Allocation Support Functions
  266549             :           \brief Memory allocations support....
  266550             : 
  266551             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  266552             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  266553             :           and support the AST File I/O Mechanism.
  266554             :        */
  266555             :       /* */
  266556             : 
  266557             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  266558             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  266559             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  266560             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  266561             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  266562             :           a correspinding one in the AST_FILE_IO class!
  266563             :        */
  266564             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  266565             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  266566             :       /* \brief Typedef used for low level memory access.
  266567             :        */
  266568             :        // typedef unsigned char* TestType;
  266569             : 
  266570             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  266571             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  266572             :       /* \brief Typedef used to hold memory addresses as values.
  266573             :        */
  266574             :        // typedef unsigned long  AddressType;
  266575             : 
  266576             : 
  266577             : 
  266578             :        // necessary, to have direct access to the p_freepointer and the private methods !
  266579             :       /*! \brief friend class declaration to support AST File I/O */
  266580             :           friend class AST_FILE_IO;
  266581             : 
  266582             :       /*! \brief friend class declaration to support AST File I/O */
  266583             :           friend class SgSIMDAddOpStorageClass;
  266584             : 
  266585             :       /*! \brief friend class declaration to support AST File I/O */
  266586             :           friend class AstSpecificDataManagingClass;
  266587             : 
  266588             :       /*! \brief friend class declaration to support AST File I/O */
  266589             :           friend class AstSpecificDataManagingClassStorageClass;
  266590             :     public:
  266591             :       /*! \brief IR node constructor to support AST File I/O */
  266592             :           SgSIMDAddOp( const SgSIMDAddOpStorageClass& source );
  266593             : 
  266594             :  // private: // JJW hack
  266595             :        /*
  266596             :           name AST Memory Allocation Support Variables
  266597             :           Memory allocations support variables 
  266598             : 
  266599             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  266600             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  266601             :           and support the AST File I/O Mechanism.
  266602             :        */
  266603             :       /* */
  266604             : 
  266605             :     public:
  266606             : 
  266607             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  266608             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  266609             :       // virtual SgNode* addRegExpAttribute();
  266610             :       /*! \brief Support for AST matching using regular expression.
  266611             : 
  266612             :           This support is incomplete and the subject of current research to define 
  266613             :           RegEx trees to support inexact matching.
  266614             :        */
  266615             :           SgSIMDAddOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  266616             : 
  266617             : // *** COMMON CODE SECTION ENDS HERE ***
  266618             : 
  266619             : 
  266620             : // End of memberFunctionString
  266621             : // Start of memberFunctionString
  266622             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  266623             : 
  266624             :      // the generated cast function
  266625             :      // friend ROSE_DLL_API SgSIMDAddOp* isSgSIMDAddOp ( SgNode* s );
  266626             : 
  266627             :           typedef SgSIMDBinaryOp base_node_type;
  266628             : 
  266629             : 
  266630             : // End of memberFunctionString
  266631             : // Start of memberFunctionString
  266632             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  266633             : 
  266634             :           void post_construction_initialization() override;
  266635             : 
  266636             : 
  266637             : // End of memberFunctionString
  266638             : // Start of memberFunctionString
  266639             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  266640             : 
  266641           0 :           int precedence() const override { return 16; }
  266642             : 
  266643             : 
  266644             : // End of memberFunctionString
  266645             : 
  266646             : 
  266647             :      public: 
  266648             :          virtual ~SgSIMDAddOp();
  266649             : 
  266650             : 
  266651             :      public: 
  266652             :          SgSIMDAddOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  266653             :          SgSIMDAddOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  266654             : 
  266655             :     protected:
  266656             : 
  266657             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDAddOp>;
  266658             : 
  266659             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266660             : 
  266661             : 
  266662             :    };
  266663             : #endif
  266664             : 
  266665             : // postdeclarations for SgSIMDAddOp
  266666             : 
  266667             : /* #line 266668 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266668             : 
  266669             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  266670             : 
  266671             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266672             : 
  266673             : 
  266674             : /* #line 266675 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266675             : 
  266676             : 
  266677             : 
  266678             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266679             : 
  266680             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  266681             : //      This code is automatically generated for each 
  266682             : //      terminal and non-terminal within the defined 
  266683             : //      grammar.  There is a simple way to change the 
  266684             : //      code to fix bugs etc.  See the ROSE README file
  266685             : //      for directions.
  266686             : 
  266687             : // tps: (02/22/2010): Adding DLL export requirements
  266688             : #include "rosedll.h"
  266689             : 
  266690             : // predeclarations for SgSIMDSubOp
  266691             : 
  266692             : /* #line 266693 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266693             : 
  266694             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  266695             : 
  266696             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  266697             : 
  266698             : #if 1
  266699             : // Class Definition for SgSIMDSubOp
  266700             : class ROSE_DLL_API SgSIMDSubOp  : public SgSIMDBinaryOp
  266701             :    {
  266702             :      public:
  266703             : 
  266704             : 
  266705             : /* #line 266706 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  266706             : 
  266707             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  266708             : // Start of memberFunctionString
  266709             : /* #line 9548 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  266710             : 
  266711             : 
  266712             : 
  266713             : // End of memberFunctionString
  266714             : // Start of memberFunctionString
  266715             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  266716             : 
  266717             : // *** COMMON CODE SECTION BEGINS HERE ***
  266718             : 
  266719             :     public:
  266720             : 
  266721             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  266722             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  266723             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  266724             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  266725             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  266726             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  266727             : 
  266728             :       /*! \brief returns a string representing the class name */
  266729             :           virtual std::string class_name() const override;
  266730             : 
  266731             :       /*! \brief returns new style SageIII enum values */
  266732             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  266733             : 
  266734             :       /*! \brief static variant value */
  266735             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  266736             :        // static const VariantT static_variant = V_SgSIMDSubOp;
  266737             :           enum { static_variant = V_SgSIMDSubOp };
  266738             : 
  266739             :        /* the generated cast function */
  266740             :       /*! \brief Casts pointer from base class to derived class */
  266741             :           ROSE_DLL_API friend       SgSIMDSubOp* isSgSIMDSubOp(       SgNode * s );
  266742             : 
  266743             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  266744             :           ROSE_DLL_API friend const SgSIMDSubOp* isSgSIMDSubOp( const SgNode * s );
  266745             : 
  266746             :      // ******************************************
  266747             :      // * Memory Pool / New / Delete
  266748             :      // ******************************************
  266749             : 
  266750             :      public:
  266751             :           /// \private
  266752             :           static const unsigned pool_size; //
  266753             :           /// \private
  266754             :           static std::vector<unsigned char *> pools; //
  266755             :           /// \private
  266756             :           static SgSIMDSubOp * next_node; // 
  266757             : 
  266758             :           /// \private
  266759             :           static unsigned long initializeStorageClassArray(SgSIMDSubOpStorageClass *); //
  266760             : 
  266761             :           /// \private
  266762             :           static void clearMemoryPool(); //
  266763             :           static void deleteMemoryPool(); //
  266764             : 
  266765             :           /// \private
  266766             :           static void extendMemoryPoolForFileIO(); //
  266767             : 
  266768             :           /// \private
  266769             :           static SgSIMDSubOp * getPointerFromGlobalIndex(unsigned long); //
  266770             :           /// \private
  266771             :           static SgSIMDSubOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  266772             : 
  266773             :           /// \private
  266774             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  266775             :           /// \private
  266776             :           static void resetValidFreepointers(); //
  266777             :           /// \private
  266778             :           static unsigned long getNumberOfLastValidPointer(); //
  266779             : 
  266780             : 
  266781             : #if defined(INLINE_FUNCTIONS)
  266782             :       /*! \brief returns pointer to newly allocated IR node */
  266783             :           inline void *operator new (size_t size);
  266784             : #else
  266785             :       /*! \brief returns pointer to newly allocated IR node */
  266786             :           void *operator new (size_t size);
  266787             : #endif
  266788             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  266789             :           void operator delete (void* pointer, size_t size);
  266790             : 
  266791             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  266792           0 :           void operator delete (void* pointer)
  266793             :              {
  266794             :             // This is the generated delete operator...
  266795           0 :                SgSIMDSubOp::operator delete (pointer,sizeof(SgSIMDSubOp));
  266796             :              }
  266797             : 
  266798             :       /*! \brief Returns the total number of IR nodes of this type */
  266799             :           static size_t numberOfNodes();
  266800             : 
  266801             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  266802             :           static size_t memoryUsage();
  266803             : 
  266804             :       // End of scope which started in IR nodes specific code 
  266805             :       /* */
  266806             : 
  266807             :       /* name Internal Functions
  266808             :           \brief Internal functions ... incomplete-documentation
  266809             : 
  266810             :           These functions have been made public as part of the design, but they are suggested for internal use 
  266811             :           or by particularly knowledgeable users for specialized tools or applications.
  266812             : 
  266813             :           \internal We could not make these private because they are required by user for special purposes. And 
  266814             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  266815             :          
  266816             :        */
  266817             : 
  266818             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  266819             :        // overridden in every class by *generated* implementation
  266820             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  266821             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  266822             :        // MS: 06/28/02 container of names of variables or container indices 
  266823             :        // used used in the traversal to access AST successor nodes
  266824             :        // overridden in every class by *generated* implementation
  266825             :       /*! \brief container of names of variables or container indices used used in the traversal
  266826             :           to access AST successor nodes overridden in every class by *generated* implementation */
  266827             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  266828             : 
  266829             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  266830             :        // than all the vector copies. The implementation for these functions is generated for each class.
  266831             :       /*! \brief return number of children in the traversal successor list */
  266832             :           virtual size_t get_numberOfTraversalSuccessors() override;
  266833             :       /*! \brief index-based access to traversal successors by index number */
  266834             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  266835             :       /*! \brief index-based access to traversal successors by child node */
  266836             :           virtual size_t get_childIndex(SgNode *child) override;
  266837             : 
  266838             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  266839             :        // MS: 08/16/2002 method for generating RTI information
  266840             :       /*! \brief return C++ Runtime-Time-Information */
  266841             :           virtual RTIReturnType roseRTI() override;
  266842             : #endif
  266843             :       /* */
  266844             : 
  266845             : 
  266846             : 
  266847             :       /* name Deprecated Functions
  266848             :           \brief Deprecated functions ... incomplete-documentation
  266849             : 
  266850             :           These functions have been deprecated from use.
  266851             :        */
  266852             :       /* */
  266853             : 
  266854             :       /*! returns a C style string (char*) representing the class name */
  266855             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  266856             : 
  266857             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  266858             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  266859             : #if 0
  266860             :       /*! returns old style Sage II enum values */
  266861             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  266862             :       /*! returns old style Sage II enum values */
  266863             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  266864             : #endif
  266865             :       /* */
  266866             : 
  266867             : 
  266868             : 
  266869             : 
  266870             :      public:
  266871             :       /* name Traversal Support Functions
  266872             :           \brief Traversal support functions ... incomplete-documentation
  266873             : 
  266874             :           These functions have been made public as part of the design, but they are suggested for internal use 
  266875             :           or by particularly knowledgable users for specialized tools or applications.
  266876             :        */
  266877             :       /* */
  266878             : 
  266879             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  266880             :        // (inferior to ROSE traversal mechanism, experimental).
  266881             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  266882             :        */
  266883             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  266884             : 
  266885             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  266886             :       /*! \brief support for the classic visitor pattern done in GoF */
  266887             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  266888             : 
  266889             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  266890             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  266891             :        */
  266892             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  266893             : 
  266894             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  266895             :        */
  266896             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  266897             : 
  266898             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  266899             :        // This traversal helps support internal tools that call static member functions.
  266900             :        // note: this function operates on the memory pools.
  266901             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  266902             :        */
  266903             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  266904             :       /* */
  266905             : 
  266906             : 
  266907             :      public:
  266908             :       /* name Memory Allocation Functions
  266909             :           \brief Memory allocations functions ... incomplete-documentation
  266910             : 
  266911             :           These functions have been made public as part of the design, but they are suggested for internal use 
  266912             :           or by particularly knowledgable users for specialized tools or applications.
  266913             :        */
  266914             :       /* */
  266915             : 
  266916             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  266917             : 
  266918             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  266919             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  266920             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  266921             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  266922             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  266923             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  266924             :           being used with the AST File I/O mechanism.
  266925             :        */
  266926             :           virtual bool isInMemoryPool() override;
  266927             : 
  266928             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  266929             : 
  266930             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  266931             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  266932             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  266933             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  266934             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  266935             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  266936             :           being used with the AST File I/O mechanism.
  266937             :        */
  266938             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  266939             : 
  266940             :       // DQ (4/30/2006): Modified to be a const function.
  266941             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  266942             : 
  266943             :           This functions is part of general support for many possible tools to operate 
  266944             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  266945             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  266946             :           less than the set of pointers used by the AST file I/O. This is part of
  266947             :           work implemented by Andreas, and support tools such as the AST graph generation.
  266948             : 
  266949             :           \warning This function can return unexpected data members and thus the 
  266950             :                    order and the number of elements is unpredicable and subject 
  266951             :                    to change.
  266952             : 
  266953             :           \returns STL vector of pairs of SgNode* and strings
  266954             :        */
  266955             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  266956             : 
  266957             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  266958             : 
  266959             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  266960             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  266961             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  266962             : 
  266963             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  266964             :                    and subject to change.
  266965             :        */
  266966             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  266967             : 
  266968             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  266969             : 
  266970             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  266971             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  266972             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  266973             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  266974             : 
  266975             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  266976             : 
  266977             :           \returns long
  266978             :        */
  266979             :           virtual long getChildIndex( SgNode* childNode ) const override;
  266980             : 
  266981             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  266982             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  266983             :       /* \brief Constructor for use by AST File I/O Mechanism
  266984             : 
  266985             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  266986             :           which obtained via fast binary file I/O from disk.
  266987             :        */
  266988             :        // SgSIMDSubOp( SgSIMDSubOpStorageClass& source );
  266989             : 
  266990             : 
  266991             : 
  266992             : 
  266993             : 
  266994             :  // JH (10/24/2005): methods added to support the ast file IO
  266995             :     private:
  266996             : 
  266997             :       /* name AST Memory Allocation Support Functions
  266998             :           \brief Memory allocations support....
  266999             : 
  267000             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  267001             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  267002             :           and support the AST File I/O Mechanism.
  267003             :        */
  267004             :       /* */
  267005             : 
  267006             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  267007             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  267008             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  267009             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  267010             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  267011             :           a correspinding one in the AST_FILE_IO class!
  267012             :        */
  267013             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  267014             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267015             :       /* \brief Typedef used for low level memory access.
  267016             :        */
  267017             :        // typedef unsigned char* TestType;
  267018             : 
  267019             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  267020             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267021             :       /* \brief Typedef used to hold memory addresses as values.
  267022             :        */
  267023             :        // typedef unsigned long  AddressType;
  267024             : 
  267025             : 
  267026             : 
  267027             :        // necessary, to have direct access to the p_freepointer and the private methods !
  267028             :       /*! \brief friend class declaration to support AST File I/O */
  267029             :           friend class AST_FILE_IO;
  267030             : 
  267031             :       /*! \brief friend class declaration to support AST File I/O */
  267032             :           friend class SgSIMDSubOpStorageClass;
  267033             : 
  267034             :       /*! \brief friend class declaration to support AST File I/O */
  267035             :           friend class AstSpecificDataManagingClass;
  267036             : 
  267037             :       /*! \brief friend class declaration to support AST File I/O */
  267038             :           friend class AstSpecificDataManagingClassStorageClass;
  267039             :     public:
  267040             :       /*! \brief IR node constructor to support AST File I/O */
  267041             :           SgSIMDSubOp( const SgSIMDSubOpStorageClass& source );
  267042             : 
  267043             :  // private: // JJW hack
  267044             :        /*
  267045             :           name AST Memory Allocation Support Variables
  267046             :           Memory allocations support variables 
  267047             : 
  267048             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  267049             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  267050             :           and support the AST File I/O Mechanism.
  267051             :        */
  267052             :       /* */
  267053             : 
  267054             :     public:
  267055             : 
  267056             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  267057             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  267058             :       // virtual SgNode* addRegExpAttribute();
  267059             :       /*! \brief Support for AST matching using regular expression.
  267060             : 
  267061             :           This support is incomplete and the subject of current research to define 
  267062             :           RegEx trees to support inexact matching.
  267063             :        */
  267064             :           SgSIMDSubOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  267065             : 
  267066             : // *** COMMON CODE SECTION ENDS HERE ***
  267067             : 
  267068             : 
  267069             : // End of memberFunctionString
  267070             : // Start of memberFunctionString
  267071             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  267072             : 
  267073             :      // the generated cast function
  267074             :      // friend ROSE_DLL_API SgSIMDSubOp* isSgSIMDSubOp ( SgNode* s );
  267075             : 
  267076             :           typedef SgSIMDBinaryOp base_node_type;
  267077             : 
  267078             : 
  267079             : // End of memberFunctionString
  267080             : // Start of memberFunctionString
  267081             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267082             : 
  267083             :           void post_construction_initialization() override;
  267084             : 
  267085             : 
  267086             : // End of memberFunctionString
  267087             : // Start of memberFunctionString
  267088             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267089             : 
  267090           0 :           int precedence() const override { return 16; }
  267091             : 
  267092             : 
  267093             : // End of memberFunctionString
  267094             : 
  267095             : 
  267096             :      public: 
  267097             :          virtual ~SgSIMDSubOp();
  267098             : 
  267099             : 
  267100             :      public: 
  267101             :          SgSIMDSubOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  267102             :          SgSIMDSubOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  267103             : 
  267104             :     protected:
  267105             : 
  267106             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDSubOp>;
  267107             : 
  267108             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267109             : 
  267110             : 
  267111             :    };
  267112             : #endif
  267113             : 
  267114             : // postdeclarations for SgSIMDSubOp
  267115             : 
  267116             : /* #line 267117 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267117             : 
  267118             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  267119             : 
  267120             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267121             : 
  267122             : 
  267123             : /* #line 267124 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267124             : 
  267125             : 
  267126             : 
  267127             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267128             : 
  267129             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  267130             : //      This code is automatically generated for each 
  267131             : //      terminal and non-terminal within the defined 
  267132             : //      grammar.  There is a simple way to change the 
  267133             : //      code to fix bugs etc.  See the ROSE README file
  267134             : //      for directions.
  267135             : 
  267136             : // tps: (02/22/2010): Adding DLL export requirements
  267137             : #include "rosedll.h"
  267138             : 
  267139             : // predeclarations for SgSIMDMulOp
  267140             : 
  267141             : /* #line 267142 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267142             : 
  267143             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  267144             : 
  267145             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267146             : 
  267147             : #if 1
  267148             : // Class Definition for SgSIMDMulOp
  267149             : class ROSE_DLL_API SgSIMDMulOp  : public SgSIMDBinaryOp
  267150             :    {
  267151             :      public:
  267152             : 
  267153             : 
  267154             : /* #line 267155 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267155             : 
  267156             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  267157             : // Start of memberFunctionString
  267158             : /* #line 9552 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267159             : 
  267160             : 
  267161             : 
  267162             : // End of memberFunctionString
  267163             : // Start of memberFunctionString
  267164             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  267165             : 
  267166             : // *** COMMON CODE SECTION BEGINS HERE ***
  267167             : 
  267168             :     public:
  267169             : 
  267170             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  267171             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  267172             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  267173             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  267174             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  267175             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  267176             : 
  267177             :       /*! \brief returns a string representing the class name */
  267178             :           virtual std::string class_name() const override;
  267179             : 
  267180             :       /*! \brief returns new style SageIII enum values */
  267181             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  267182             : 
  267183             :       /*! \brief static variant value */
  267184             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  267185             :        // static const VariantT static_variant = V_SgSIMDMulOp;
  267186             :           enum { static_variant = V_SgSIMDMulOp };
  267187             : 
  267188             :        /* the generated cast function */
  267189             :       /*! \brief Casts pointer from base class to derived class */
  267190             :           ROSE_DLL_API friend       SgSIMDMulOp* isSgSIMDMulOp(       SgNode * s );
  267191             : 
  267192             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  267193             :           ROSE_DLL_API friend const SgSIMDMulOp* isSgSIMDMulOp( const SgNode * s );
  267194             : 
  267195             :      // ******************************************
  267196             :      // * Memory Pool / New / Delete
  267197             :      // ******************************************
  267198             : 
  267199             :      public:
  267200             :           /// \private
  267201             :           static const unsigned pool_size; //
  267202             :           /// \private
  267203             :           static std::vector<unsigned char *> pools; //
  267204             :           /// \private
  267205             :           static SgSIMDMulOp * next_node; // 
  267206             : 
  267207             :           /// \private
  267208             :           static unsigned long initializeStorageClassArray(SgSIMDMulOpStorageClass *); //
  267209             : 
  267210             :           /// \private
  267211             :           static void clearMemoryPool(); //
  267212             :           static void deleteMemoryPool(); //
  267213             : 
  267214             :           /// \private
  267215             :           static void extendMemoryPoolForFileIO(); //
  267216             : 
  267217             :           /// \private
  267218             :           static SgSIMDMulOp * getPointerFromGlobalIndex(unsigned long); //
  267219             :           /// \private
  267220             :           static SgSIMDMulOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  267221             : 
  267222             :           /// \private
  267223             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  267224             :           /// \private
  267225             :           static void resetValidFreepointers(); //
  267226             :           /// \private
  267227             :           static unsigned long getNumberOfLastValidPointer(); //
  267228             : 
  267229             : 
  267230             : #if defined(INLINE_FUNCTIONS)
  267231             :       /*! \brief returns pointer to newly allocated IR node */
  267232             :           inline void *operator new (size_t size);
  267233             : #else
  267234             :       /*! \brief returns pointer to newly allocated IR node */
  267235             :           void *operator new (size_t size);
  267236             : #endif
  267237             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  267238             :           void operator delete (void* pointer, size_t size);
  267239             : 
  267240             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  267241           0 :           void operator delete (void* pointer)
  267242             :              {
  267243             :             // This is the generated delete operator...
  267244           0 :                SgSIMDMulOp::operator delete (pointer,sizeof(SgSIMDMulOp));
  267245             :              }
  267246             : 
  267247             :       /*! \brief Returns the total number of IR nodes of this type */
  267248             :           static size_t numberOfNodes();
  267249             : 
  267250             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  267251             :           static size_t memoryUsage();
  267252             : 
  267253             :       // End of scope which started in IR nodes specific code 
  267254             :       /* */
  267255             : 
  267256             :       /* name Internal Functions
  267257             :           \brief Internal functions ... incomplete-documentation
  267258             : 
  267259             :           These functions have been made public as part of the design, but they are suggested for internal use 
  267260             :           or by particularly knowledgeable users for specialized tools or applications.
  267261             : 
  267262             :           \internal We could not make these private because they are required by user for special purposes. And 
  267263             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  267264             :          
  267265             :        */
  267266             : 
  267267             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  267268             :        // overridden in every class by *generated* implementation
  267269             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  267270             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  267271             :        // MS: 06/28/02 container of names of variables or container indices 
  267272             :        // used used in the traversal to access AST successor nodes
  267273             :        // overridden in every class by *generated* implementation
  267274             :       /*! \brief container of names of variables or container indices used used in the traversal
  267275             :           to access AST successor nodes overridden in every class by *generated* implementation */
  267276             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  267277             : 
  267278             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  267279             :        // than all the vector copies. The implementation for these functions is generated for each class.
  267280             :       /*! \brief return number of children in the traversal successor list */
  267281             :           virtual size_t get_numberOfTraversalSuccessors() override;
  267282             :       /*! \brief index-based access to traversal successors by index number */
  267283             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  267284             :       /*! \brief index-based access to traversal successors by child node */
  267285             :           virtual size_t get_childIndex(SgNode *child) override;
  267286             : 
  267287             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  267288             :        // MS: 08/16/2002 method for generating RTI information
  267289             :       /*! \brief return C++ Runtime-Time-Information */
  267290             :           virtual RTIReturnType roseRTI() override;
  267291             : #endif
  267292             :       /* */
  267293             : 
  267294             : 
  267295             : 
  267296             :       /* name Deprecated Functions
  267297             :           \brief Deprecated functions ... incomplete-documentation
  267298             : 
  267299             :           These functions have been deprecated from use.
  267300             :        */
  267301             :       /* */
  267302             : 
  267303             :       /*! returns a C style string (char*) representing the class name */
  267304             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  267305             : 
  267306             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  267307             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  267308             : #if 0
  267309             :       /*! returns old style Sage II enum values */
  267310             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  267311             :       /*! returns old style Sage II enum values */
  267312             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  267313             : #endif
  267314             :       /* */
  267315             : 
  267316             : 
  267317             : 
  267318             : 
  267319             :      public:
  267320             :       /* name Traversal Support Functions
  267321             :           \brief Traversal support functions ... incomplete-documentation
  267322             : 
  267323             :           These functions have been made public as part of the design, but they are suggested for internal use 
  267324             :           or by particularly knowledgable users for specialized tools or applications.
  267325             :        */
  267326             :       /* */
  267327             : 
  267328             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  267329             :        // (inferior to ROSE traversal mechanism, experimental).
  267330             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  267331             :        */
  267332             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  267333             : 
  267334             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  267335             :       /*! \brief support for the classic visitor pattern done in GoF */
  267336             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  267337             : 
  267338             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  267339             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  267340             :        */
  267341             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  267342             : 
  267343             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  267344             :        */
  267345             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  267346             : 
  267347             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  267348             :        // This traversal helps support internal tools that call static member functions.
  267349             :        // note: this function operates on the memory pools.
  267350             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  267351             :        */
  267352             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  267353             :       /* */
  267354             : 
  267355             : 
  267356             :      public:
  267357             :       /* name Memory Allocation Functions
  267358             :           \brief Memory allocations functions ... incomplete-documentation
  267359             : 
  267360             :           These functions have been made public as part of the design, but they are suggested for internal use 
  267361             :           or by particularly knowledgable users for specialized tools or applications.
  267362             :        */
  267363             :       /* */
  267364             : 
  267365             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  267366             : 
  267367             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  267368             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  267369             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  267370             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  267371             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  267372             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  267373             :           being used with the AST File I/O mechanism.
  267374             :        */
  267375             :           virtual bool isInMemoryPool() override;
  267376             : 
  267377             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  267378             : 
  267379             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  267380             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  267381             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  267382             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  267383             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  267384             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  267385             :           being used with the AST File I/O mechanism.
  267386             :        */
  267387             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  267388             : 
  267389             :       // DQ (4/30/2006): Modified to be a const function.
  267390             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  267391             : 
  267392             :           This functions is part of general support for many possible tools to operate 
  267393             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  267394             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  267395             :           less than the set of pointers used by the AST file I/O. This is part of
  267396             :           work implemented by Andreas, and support tools such as the AST graph generation.
  267397             : 
  267398             :           \warning This function can return unexpected data members and thus the 
  267399             :                    order and the number of elements is unpredicable and subject 
  267400             :                    to change.
  267401             : 
  267402             :           \returns STL vector of pairs of SgNode* and strings
  267403             :        */
  267404             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  267405             : 
  267406             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  267407             : 
  267408             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  267409             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  267410             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  267411             : 
  267412             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  267413             :                    and subject to change.
  267414             :        */
  267415             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  267416             : 
  267417             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  267418             : 
  267419             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  267420             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  267421             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  267422             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  267423             : 
  267424             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  267425             : 
  267426             :           \returns long
  267427             :        */
  267428             :           virtual long getChildIndex( SgNode* childNode ) const override;
  267429             : 
  267430             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  267431             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267432             :       /* \brief Constructor for use by AST File I/O Mechanism
  267433             : 
  267434             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  267435             :           which obtained via fast binary file I/O from disk.
  267436             :        */
  267437             :        // SgSIMDMulOp( SgSIMDMulOpStorageClass& source );
  267438             : 
  267439             : 
  267440             : 
  267441             : 
  267442             : 
  267443             :  // JH (10/24/2005): methods added to support the ast file IO
  267444             :     private:
  267445             : 
  267446             :       /* name AST Memory Allocation Support Functions
  267447             :           \brief Memory allocations support....
  267448             : 
  267449             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  267450             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  267451             :           and support the AST File I/O Mechanism.
  267452             :        */
  267453             :       /* */
  267454             : 
  267455             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  267456             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  267457             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  267458             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  267459             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  267460             :           a correspinding one in the AST_FILE_IO class!
  267461             :        */
  267462             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  267463             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267464             :       /* \brief Typedef used for low level memory access.
  267465             :        */
  267466             :        // typedef unsigned char* TestType;
  267467             : 
  267468             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  267469             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267470             :       /* \brief Typedef used to hold memory addresses as values.
  267471             :        */
  267472             :        // typedef unsigned long  AddressType;
  267473             : 
  267474             : 
  267475             : 
  267476             :        // necessary, to have direct access to the p_freepointer and the private methods !
  267477             :       /*! \brief friend class declaration to support AST File I/O */
  267478             :           friend class AST_FILE_IO;
  267479             : 
  267480             :       /*! \brief friend class declaration to support AST File I/O */
  267481             :           friend class SgSIMDMulOpStorageClass;
  267482             : 
  267483             :       /*! \brief friend class declaration to support AST File I/O */
  267484             :           friend class AstSpecificDataManagingClass;
  267485             : 
  267486             :       /*! \brief friend class declaration to support AST File I/O */
  267487             :           friend class AstSpecificDataManagingClassStorageClass;
  267488             :     public:
  267489             :       /*! \brief IR node constructor to support AST File I/O */
  267490             :           SgSIMDMulOp( const SgSIMDMulOpStorageClass& source );
  267491             : 
  267492             :  // private: // JJW hack
  267493             :        /*
  267494             :           name AST Memory Allocation Support Variables
  267495             :           Memory allocations support variables 
  267496             : 
  267497             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  267498             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  267499             :           and support the AST File I/O Mechanism.
  267500             :        */
  267501             :       /* */
  267502             : 
  267503             :     public:
  267504             : 
  267505             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  267506             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  267507             :       // virtual SgNode* addRegExpAttribute();
  267508             :       /*! \brief Support for AST matching using regular expression.
  267509             : 
  267510             :           This support is incomplete and the subject of current research to define 
  267511             :           RegEx trees to support inexact matching.
  267512             :        */
  267513             :           SgSIMDMulOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  267514             : 
  267515             : // *** COMMON CODE SECTION ENDS HERE ***
  267516             : 
  267517             : 
  267518             : // End of memberFunctionString
  267519             : // Start of memberFunctionString
  267520             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  267521             : 
  267522             :      // the generated cast function
  267523             :      // friend ROSE_DLL_API SgSIMDMulOp* isSgSIMDMulOp ( SgNode* s );
  267524             : 
  267525             :           typedef SgSIMDBinaryOp base_node_type;
  267526             : 
  267527             : 
  267528             : // End of memberFunctionString
  267529             : // Start of memberFunctionString
  267530             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267531             : 
  267532             :           void post_construction_initialization() override;
  267533             : 
  267534             : 
  267535             : // End of memberFunctionString
  267536             : // Start of memberFunctionString
  267537             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267538             : 
  267539           0 :           int precedence() const override { return 16; }
  267540             : 
  267541             : 
  267542             : // End of memberFunctionString
  267543             : 
  267544             : 
  267545             :      public: 
  267546             :          virtual ~SgSIMDMulOp();
  267547             : 
  267548             : 
  267549             :      public: 
  267550             :          SgSIMDMulOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  267551             :          SgSIMDMulOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  267552             : 
  267553             :     protected:
  267554             : 
  267555             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDMulOp>;
  267556             : 
  267557             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267558             : 
  267559             : 
  267560             :    };
  267561             : #endif
  267562             : 
  267563             : // postdeclarations for SgSIMDMulOp
  267564             : 
  267565             : /* #line 267566 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267566             : 
  267567             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  267568             : 
  267569             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267570             : 
  267571             : 
  267572             : /* #line 267573 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267573             : 
  267574             : 
  267575             : 
  267576             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267577             : 
  267578             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  267579             : //      This code is automatically generated for each 
  267580             : //      terminal and non-terminal within the defined 
  267581             : //      grammar.  There is a simple way to change the 
  267582             : //      code to fix bugs etc.  See the ROSE README file
  267583             : //      for directions.
  267584             : 
  267585             : // tps: (02/22/2010): Adding DLL export requirements
  267586             : #include "rosedll.h"
  267587             : 
  267588             : // predeclarations for SgSIMDDivOp
  267589             : 
  267590             : /* #line 267591 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267591             : 
  267592             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  267593             : 
  267594             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  267595             : 
  267596             : #if 1
  267597             : // Class Definition for SgSIMDDivOp
  267598             : class ROSE_DLL_API SgSIMDDivOp  : public SgSIMDBinaryOp
  267599             :    {
  267600             :      public:
  267601             : 
  267602             : 
  267603             : /* #line 267604 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  267604             : 
  267605             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  267606             : // Start of memberFunctionString
  267607             : /* #line 9556 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267608             : 
  267609             : 
  267610             : 
  267611             : // End of memberFunctionString
  267612             : // Start of memberFunctionString
  267613             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  267614             : 
  267615             : // *** COMMON CODE SECTION BEGINS HERE ***
  267616             : 
  267617             :     public:
  267618             : 
  267619             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  267620             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  267621             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  267622             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  267623             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  267624             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  267625             : 
  267626             :       /*! \brief returns a string representing the class name */
  267627             :           virtual std::string class_name() const override;
  267628             : 
  267629             :       /*! \brief returns new style SageIII enum values */
  267630             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  267631             : 
  267632             :       /*! \brief static variant value */
  267633             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  267634             :        // static const VariantT static_variant = V_SgSIMDDivOp;
  267635             :           enum { static_variant = V_SgSIMDDivOp };
  267636             : 
  267637             :        /* the generated cast function */
  267638             :       /*! \brief Casts pointer from base class to derived class */
  267639             :           ROSE_DLL_API friend       SgSIMDDivOp* isSgSIMDDivOp(       SgNode * s );
  267640             : 
  267641             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  267642             :           ROSE_DLL_API friend const SgSIMDDivOp* isSgSIMDDivOp( const SgNode * s );
  267643             : 
  267644             :      // ******************************************
  267645             :      // * Memory Pool / New / Delete
  267646             :      // ******************************************
  267647             : 
  267648             :      public:
  267649             :           /// \private
  267650             :           static const unsigned pool_size; //
  267651             :           /// \private
  267652             :           static std::vector<unsigned char *> pools; //
  267653             :           /// \private
  267654             :           static SgSIMDDivOp * next_node; // 
  267655             : 
  267656             :           /// \private
  267657             :           static unsigned long initializeStorageClassArray(SgSIMDDivOpStorageClass *); //
  267658             : 
  267659             :           /// \private
  267660             :           static void clearMemoryPool(); //
  267661             :           static void deleteMemoryPool(); //
  267662             : 
  267663             :           /// \private
  267664             :           static void extendMemoryPoolForFileIO(); //
  267665             : 
  267666             :           /// \private
  267667             :           static SgSIMDDivOp * getPointerFromGlobalIndex(unsigned long); //
  267668             :           /// \private
  267669             :           static SgSIMDDivOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  267670             : 
  267671             :           /// \private
  267672             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  267673             :           /// \private
  267674             :           static void resetValidFreepointers(); //
  267675             :           /// \private
  267676             :           static unsigned long getNumberOfLastValidPointer(); //
  267677             : 
  267678             : 
  267679             : #if defined(INLINE_FUNCTIONS)
  267680             :       /*! \brief returns pointer to newly allocated IR node */
  267681             :           inline void *operator new (size_t size);
  267682             : #else
  267683             :       /*! \brief returns pointer to newly allocated IR node */
  267684             :           void *operator new (size_t size);
  267685             : #endif
  267686             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  267687             :           void operator delete (void* pointer, size_t size);
  267688             : 
  267689             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  267690           0 :           void operator delete (void* pointer)
  267691             :              {
  267692             :             // This is the generated delete operator...
  267693           0 :                SgSIMDDivOp::operator delete (pointer,sizeof(SgSIMDDivOp));
  267694             :              }
  267695             : 
  267696             :       /*! \brief Returns the total number of IR nodes of this type */
  267697             :           static size_t numberOfNodes();
  267698             : 
  267699             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  267700             :           static size_t memoryUsage();
  267701             : 
  267702             :       // End of scope which started in IR nodes specific code 
  267703             :       /* */
  267704             : 
  267705             :       /* name Internal Functions
  267706             :           \brief Internal functions ... incomplete-documentation
  267707             : 
  267708             :           These functions have been made public as part of the design, but they are suggested for internal use 
  267709             :           or by particularly knowledgeable users for specialized tools or applications.
  267710             : 
  267711             :           \internal We could not make these private because they are required by user for special purposes. And 
  267712             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  267713             :          
  267714             :        */
  267715             : 
  267716             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  267717             :        // overridden in every class by *generated* implementation
  267718             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  267719             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  267720             :        // MS: 06/28/02 container of names of variables or container indices 
  267721             :        // used used in the traversal to access AST successor nodes
  267722             :        // overridden in every class by *generated* implementation
  267723             :       /*! \brief container of names of variables or container indices used used in the traversal
  267724             :           to access AST successor nodes overridden in every class by *generated* implementation */
  267725             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  267726             : 
  267727             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  267728             :        // than all the vector copies. The implementation for these functions is generated for each class.
  267729             :       /*! \brief return number of children in the traversal successor list */
  267730             :           virtual size_t get_numberOfTraversalSuccessors() override;
  267731             :       /*! \brief index-based access to traversal successors by index number */
  267732             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  267733             :       /*! \brief index-based access to traversal successors by child node */
  267734             :           virtual size_t get_childIndex(SgNode *child) override;
  267735             : 
  267736             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  267737             :        // MS: 08/16/2002 method for generating RTI information
  267738             :       /*! \brief return C++ Runtime-Time-Information */
  267739             :           virtual RTIReturnType roseRTI() override;
  267740             : #endif
  267741             :       /* */
  267742             : 
  267743             : 
  267744             : 
  267745             :       /* name Deprecated Functions
  267746             :           \brief Deprecated functions ... incomplete-documentation
  267747             : 
  267748             :           These functions have been deprecated from use.
  267749             :        */
  267750             :       /* */
  267751             : 
  267752             :       /*! returns a C style string (char*) representing the class name */
  267753             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  267754             : 
  267755             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  267756             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  267757             : #if 0
  267758             :       /*! returns old style Sage II enum values */
  267759             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  267760             :       /*! returns old style Sage II enum values */
  267761             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  267762             : #endif
  267763             :       /* */
  267764             : 
  267765             : 
  267766             : 
  267767             : 
  267768             :      public:
  267769             :       /* name Traversal Support Functions
  267770             :           \brief Traversal support functions ... incomplete-documentation
  267771             : 
  267772             :           These functions have been made public as part of the design, but they are suggested for internal use 
  267773             :           or by particularly knowledgable users for specialized tools or applications.
  267774             :        */
  267775             :       /* */
  267776             : 
  267777             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  267778             :        // (inferior to ROSE traversal mechanism, experimental).
  267779             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  267780             :        */
  267781             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  267782             : 
  267783             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  267784             :       /*! \brief support for the classic visitor pattern done in GoF */
  267785             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  267786             : 
  267787             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  267788             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  267789             :        */
  267790             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  267791             : 
  267792             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  267793             :        */
  267794             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  267795             : 
  267796             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  267797             :        // This traversal helps support internal tools that call static member functions.
  267798             :        // note: this function operates on the memory pools.
  267799             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  267800             :        */
  267801             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  267802             :       /* */
  267803             : 
  267804             : 
  267805             :      public:
  267806             :       /* name Memory Allocation Functions
  267807             :           \brief Memory allocations functions ... incomplete-documentation
  267808             : 
  267809             :           These functions have been made public as part of the design, but they are suggested for internal use 
  267810             :           or by particularly knowledgable users for specialized tools or applications.
  267811             :        */
  267812             :       /* */
  267813             : 
  267814             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  267815             : 
  267816             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  267817             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  267818             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  267819             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  267820             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  267821             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  267822             :           being used with the AST File I/O mechanism.
  267823             :        */
  267824             :           virtual bool isInMemoryPool() override;
  267825             : 
  267826             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  267827             : 
  267828             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  267829             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  267830             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  267831             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  267832             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  267833             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  267834             :           being used with the AST File I/O mechanism.
  267835             :        */
  267836             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  267837             : 
  267838             :       // DQ (4/30/2006): Modified to be a const function.
  267839             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  267840             : 
  267841             :           This functions is part of general support for many possible tools to operate 
  267842             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  267843             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  267844             :           less than the set of pointers used by the AST file I/O. This is part of
  267845             :           work implemented by Andreas, and support tools such as the AST graph generation.
  267846             : 
  267847             :           \warning This function can return unexpected data members and thus the 
  267848             :                    order and the number of elements is unpredicable and subject 
  267849             :                    to change.
  267850             : 
  267851             :           \returns STL vector of pairs of SgNode* and strings
  267852             :        */
  267853             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  267854             : 
  267855             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  267856             : 
  267857             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  267858             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  267859             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  267860             : 
  267861             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  267862             :                    and subject to change.
  267863             :        */
  267864             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  267865             : 
  267866             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  267867             : 
  267868             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  267869             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  267870             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  267871             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  267872             : 
  267873             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  267874             : 
  267875             :           \returns long
  267876             :        */
  267877             :           virtual long getChildIndex( SgNode* childNode ) const override;
  267878             : 
  267879             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  267880             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267881             :       /* \brief Constructor for use by AST File I/O Mechanism
  267882             : 
  267883             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  267884             :           which obtained via fast binary file I/O from disk.
  267885             :        */
  267886             :        // SgSIMDDivOp( SgSIMDDivOpStorageClass& source );
  267887             : 
  267888             : 
  267889             : 
  267890             : 
  267891             : 
  267892             :  // JH (10/24/2005): methods added to support the ast file IO
  267893             :     private:
  267894             : 
  267895             :       /* name AST Memory Allocation Support Functions
  267896             :           \brief Memory allocations support....
  267897             : 
  267898             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  267899             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  267900             :           and support the AST File I/O Mechanism.
  267901             :        */
  267902             :       /* */
  267903             : 
  267904             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  267905             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  267906             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  267907             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  267908             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  267909             :           a correspinding one in the AST_FILE_IO class!
  267910             :        */
  267911             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  267912             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267913             :       /* \brief Typedef used for low level memory access.
  267914             :        */
  267915             :        // typedef unsigned char* TestType;
  267916             : 
  267917             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  267918             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  267919             :       /* \brief Typedef used to hold memory addresses as values.
  267920             :        */
  267921             :        // typedef unsigned long  AddressType;
  267922             : 
  267923             : 
  267924             : 
  267925             :        // necessary, to have direct access to the p_freepointer and the private methods !
  267926             :       /*! \brief friend class declaration to support AST File I/O */
  267927             :           friend class AST_FILE_IO;
  267928             : 
  267929             :       /*! \brief friend class declaration to support AST File I/O */
  267930             :           friend class SgSIMDDivOpStorageClass;
  267931             : 
  267932             :       /*! \brief friend class declaration to support AST File I/O */
  267933             :           friend class AstSpecificDataManagingClass;
  267934             : 
  267935             :       /*! \brief friend class declaration to support AST File I/O */
  267936             :           friend class AstSpecificDataManagingClassStorageClass;
  267937             :     public:
  267938             :       /*! \brief IR node constructor to support AST File I/O */
  267939             :           SgSIMDDivOp( const SgSIMDDivOpStorageClass& source );
  267940             : 
  267941             :  // private: // JJW hack
  267942             :        /*
  267943             :           name AST Memory Allocation Support Variables
  267944             :           Memory allocations support variables 
  267945             : 
  267946             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  267947             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  267948             :           and support the AST File I/O Mechanism.
  267949             :        */
  267950             :       /* */
  267951             : 
  267952             :     public:
  267953             : 
  267954             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  267955             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  267956             :       // virtual SgNode* addRegExpAttribute();
  267957             :       /*! \brief Support for AST matching using regular expression.
  267958             : 
  267959             :           This support is incomplete and the subject of current research to define 
  267960             :           RegEx trees to support inexact matching.
  267961             :        */
  267962             :           SgSIMDDivOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  267963             : 
  267964             : // *** COMMON CODE SECTION ENDS HERE ***
  267965             : 
  267966             : 
  267967             : // End of memberFunctionString
  267968             : // Start of memberFunctionString
  267969             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  267970             : 
  267971             :      // the generated cast function
  267972             :      // friend ROSE_DLL_API SgSIMDDivOp* isSgSIMDDivOp ( SgNode* s );
  267973             : 
  267974             :           typedef SgSIMDBinaryOp base_node_type;
  267975             : 
  267976             : 
  267977             : // End of memberFunctionString
  267978             : // Start of memberFunctionString
  267979             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267980             : 
  267981             :           void post_construction_initialization() override;
  267982             : 
  267983             : 
  267984             : // End of memberFunctionString
  267985             : // Start of memberFunctionString
  267986             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  267987             : 
  267988           0 :           int precedence() const override { return 16; }
  267989             : 
  267990             : 
  267991             : // End of memberFunctionString
  267992             : 
  267993             : 
  267994             :      public: 
  267995             :          virtual ~SgSIMDDivOp();
  267996             : 
  267997             : 
  267998             :      public: 
  267999             :          SgSIMDDivOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  268000             :          SgSIMDDivOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  268001             : 
  268002             :     protected:
  268003             : 
  268004             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDDivOp>;
  268005             : 
  268006             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268007             : 
  268008             : 
  268009             :    };
  268010             : #endif
  268011             : 
  268012             : // postdeclarations for SgSIMDDivOp
  268013             : 
  268014             : /* #line 268015 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268015             : 
  268016             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  268017             : 
  268018             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268019             : 
  268020             : 
  268021             : /* #line 268022 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268022             : 
  268023             : 
  268024             : 
  268025             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268026             : 
  268027             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  268028             : //      This code is automatically generated for each 
  268029             : //      terminal and non-terminal within the defined 
  268030             : //      grammar.  There is a simple way to change the 
  268031             : //      code to fix bugs etc.  See the ROSE README file
  268032             : //      for directions.
  268033             : 
  268034             : // tps: (02/22/2010): Adding DLL export requirements
  268035             : #include "rosedll.h"
  268036             : 
  268037             : // predeclarations for SgSIMDFmaOp
  268038             : 
  268039             : /* #line 268040 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268040             : 
  268041             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  268042             : 
  268043             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268044             : 
  268045             : #if 1
  268046             : // Class Definition for SgSIMDFmaOp
  268047             : class ROSE_DLL_API SgSIMDFmaOp  : public SgSIMDBinaryOp
  268048             :    {
  268049             :      public:
  268050             : 
  268051             : 
  268052             : /* #line 268053 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268053             : 
  268054             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  268055             : // Start of memberFunctionString
  268056             : /* #line 9560 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  268057             : 
  268058             : 
  268059             : 
  268060             : // End of memberFunctionString
  268061             : // Start of memberFunctionString
  268062             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  268063             : 
  268064             : // *** COMMON CODE SECTION BEGINS HERE ***
  268065             : 
  268066             :     public:
  268067             : 
  268068             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  268069             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  268070             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  268071             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  268072             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  268073             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  268074             : 
  268075             :       /*! \brief returns a string representing the class name */
  268076             :           virtual std::string class_name() const override;
  268077             : 
  268078             :       /*! \brief returns new style SageIII enum values */
  268079             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  268080             : 
  268081             :       /*! \brief static variant value */
  268082             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  268083             :        // static const VariantT static_variant = V_SgSIMDFmaOp;
  268084             :           enum { static_variant = V_SgSIMDFmaOp };
  268085             : 
  268086             :        /* the generated cast function */
  268087             :       /*! \brief Casts pointer from base class to derived class */
  268088             :           ROSE_DLL_API friend       SgSIMDFmaOp* isSgSIMDFmaOp(       SgNode * s );
  268089             : 
  268090             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  268091             :           ROSE_DLL_API friend const SgSIMDFmaOp* isSgSIMDFmaOp( const SgNode * s );
  268092             : 
  268093             :      // ******************************************
  268094             :      // * Memory Pool / New / Delete
  268095             :      // ******************************************
  268096             : 
  268097             :      public:
  268098             :           /// \private
  268099             :           static const unsigned pool_size; //
  268100             :           /// \private
  268101             :           static std::vector<unsigned char *> pools; //
  268102             :           /// \private
  268103             :           static SgSIMDFmaOp * next_node; // 
  268104             : 
  268105             :           /// \private
  268106             :           static unsigned long initializeStorageClassArray(SgSIMDFmaOpStorageClass *); //
  268107             : 
  268108             :           /// \private
  268109             :           static void clearMemoryPool(); //
  268110             :           static void deleteMemoryPool(); //
  268111             : 
  268112             :           /// \private
  268113             :           static void extendMemoryPoolForFileIO(); //
  268114             : 
  268115             :           /// \private
  268116             :           static SgSIMDFmaOp * getPointerFromGlobalIndex(unsigned long); //
  268117             :           /// \private
  268118             :           static SgSIMDFmaOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  268119             : 
  268120             :           /// \private
  268121             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  268122             :           /// \private
  268123             :           static void resetValidFreepointers(); //
  268124             :           /// \private
  268125             :           static unsigned long getNumberOfLastValidPointer(); //
  268126             : 
  268127             : 
  268128             : #if defined(INLINE_FUNCTIONS)
  268129             :       /*! \brief returns pointer to newly allocated IR node */
  268130             :           inline void *operator new (size_t size);
  268131             : #else
  268132             :       /*! \brief returns pointer to newly allocated IR node */
  268133             :           void *operator new (size_t size);
  268134             : #endif
  268135             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  268136             :           void operator delete (void* pointer, size_t size);
  268137             : 
  268138             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  268139           0 :           void operator delete (void* pointer)
  268140             :              {
  268141             :             // This is the generated delete operator...
  268142           0 :                SgSIMDFmaOp::operator delete (pointer,sizeof(SgSIMDFmaOp));
  268143             :              }
  268144             : 
  268145             :       /*! \brief Returns the total number of IR nodes of this type */
  268146             :           static size_t numberOfNodes();
  268147             : 
  268148             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  268149             :           static size_t memoryUsage();
  268150             : 
  268151             :       // End of scope which started in IR nodes specific code 
  268152             :       /* */
  268153             : 
  268154             :       /* name Internal Functions
  268155             :           \brief Internal functions ... incomplete-documentation
  268156             : 
  268157             :           These functions have been made public as part of the design, but they are suggested for internal use 
  268158             :           or by particularly knowledgeable users for specialized tools or applications.
  268159             : 
  268160             :           \internal We could not make these private because they are required by user for special purposes. And 
  268161             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  268162             :          
  268163             :        */
  268164             : 
  268165             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  268166             :        // overridden in every class by *generated* implementation
  268167             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  268168             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  268169             :        // MS: 06/28/02 container of names of variables or container indices 
  268170             :        // used used in the traversal to access AST successor nodes
  268171             :        // overridden in every class by *generated* implementation
  268172             :       /*! \brief container of names of variables or container indices used used in the traversal
  268173             :           to access AST successor nodes overridden in every class by *generated* implementation */
  268174             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  268175             : 
  268176             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  268177             :        // than all the vector copies. The implementation for these functions is generated for each class.
  268178             :       /*! \brief return number of children in the traversal successor list */
  268179             :           virtual size_t get_numberOfTraversalSuccessors() override;
  268180             :       /*! \brief index-based access to traversal successors by index number */
  268181             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  268182             :       /*! \brief index-based access to traversal successors by child node */
  268183             :           virtual size_t get_childIndex(SgNode *child) override;
  268184             : 
  268185             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  268186             :        // MS: 08/16/2002 method for generating RTI information
  268187             :       /*! \brief return C++ Runtime-Time-Information */
  268188             :           virtual RTIReturnType roseRTI() override;
  268189             : #endif
  268190             :       /* */
  268191             : 
  268192             : 
  268193             : 
  268194             :       /* name Deprecated Functions
  268195             :           \brief Deprecated functions ... incomplete-documentation
  268196             : 
  268197             :           These functions have been deprecated from use.
  268198             :        */
  268199             :       /* */
  268200             : 
  268201             :       /*! returns a C style string (char*) representing the class name */
  268202             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  268203             : 
  268204             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  268205             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  268206             : #if 0
  268207             :       /*! returns old style Sage II enum values */
  268208             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  268209             :       /*! returns old style Sage II enum values */
  268210             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  268211             : #endif
  268212             :       /* */
  268213             : 
  268214             : 
  268215             : 
  268216             : 
  268217             :      public:
  268218             :       /* name Traversal Support Functions
  268219             :           \brief Traversal support functions ... incomplete-documentation
  268220             : 
  268221             :           These functions have been made public as part of the design, but they are suggested for internal use 
  268222             :           or by particularly knowledgable users for specialized tools or applications.
  268223             :        */
  268224             :       /* */
  268225             : 
  268226             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  268227             :        // (inferior to ROSE traversal mechanism, experimental).
  268228             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  268229             :        */
  268230             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  268231             : 
  268232             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  268233             :       /*! \brief support for the classic visitor pattern done in GoF */
  268234             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  268235             : 
  268236             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  268237             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  268238             :        */
  268239             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  268240             : 
  268241             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  268242             :        */
  268243             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  268244             : 
  268245             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  268246             :        // This traversal helps support internal tools that call static member functions.
  268247             :        // note: this function operates on the memory pools.
  268248             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  268249             :        */
  268250             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  268251             :       /* */
  268252             : 
  268253             : 
  268254             :      public:
  268255             :       /* name Memory Allocation Functions
  268256             :           \brief Memory allocations functions ... incomplete-documentation
  268257             : 
  268258             :           These functions have been made public as part of the design, but they are suggested for internal use 
  268259             :           or by particularly knowledgable users for specialized tools or applications.
  268260             :        */
  268261             :       /* */
  268262             : 
  268263             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  268264             : 
  268265             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  268266             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  268267             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  268268             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  268269             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  268270             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  268271             :           being used with the AST File I/O mechanism.
  268272             :        */
  268273             :           virtual bool isInMemoryPool() override;
  268274             : 
  268275             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  268276             : 
  268277             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  268278             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  268279             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  268280             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  268281             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  268282             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  268283             :           being used with the AST File I/O mechanism.
  268284             :        */
  268285             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  268286             : 
  268287             :       // DQ (4/30/2006): Modified to be a const function.
  268288             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  268289             : 
  268290             :           This functions is part of general support for many possible tools to operate 
  268291             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  268292             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  268293             :           less than the set of pointers used by the AST file I/O. This is part of
  268294             :           work implemented by Andreas, and support tools such as the AST graph generation.
  268295             : 
  268296             :           \warning This function can return unexpected data members and thus the 
  268297             :                    order and the number of elements is unpredicable and subject 
  268298             :                    to change.
  268299             : 
  268300             :           \returns STL vector of pairs of SgNode* and strings
  268301             :        */
  268302             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  268303             : 
  268304             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  268305             : 
  268306             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  268307             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  268308             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  268309             : 
  268310             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  268311             :                    and subject to change.
  268312             :        */
  268313             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  268314             : 
  268315             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  268316             : 
  268317             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  268318             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  268319             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  268320             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  268321             : 
  268322             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  268323             : 
  268324             :           \returns long
  268325             :        */
  268326             :           virtual long getChildIndex( SgNode* childNode ) const override;
  268327             : 
  268328             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  268329             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  268330             :       /* \brief Constructor for use by AST File I/O Mechanism
  268331             : 
  268332             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  268333             :           which obtained via fast binary file I/O from disk.
  268334             :        */
  268335             :        // SgSIMDFmaOp( SgSIMDFmaOpStorageClass& source );
  268336             : 
  268337             : 
  268338             : 
  268339             : 
  268340             : 
  268341             :  // JH (10/24/2005): methods added to support the ast file IO
  268342             :     private:
  268343             : 
  268344             :       /* name AST Memory Allocation Support Functions
  268345             :           \brief Memory allocations support....
  268346             : 
  268347             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  268348             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  268349             :           and support the AST File I/O Mechanism.
  268350             :        */
  268351             :       /* */
  268352             : 
  268353             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  268354             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  268355             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  268356             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  268357             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  268358             :           a correspinding one in the AST_FILE_IO class!
  268359             :        */
  268360             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  268361             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  268362             :       /* \brief Typedef used for low level memory access.
  268363             :        */
  268364             :        // typedef unsigned char* TestType;
  268365             : 
  268366             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  268367             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  268368             :       /* \brief Typedef used to hold memory addresses as values.
  268369             :        */
  268370             :        // typedef unsigned long  AddressType;
  268371             : 
  268372             : 
  268373             : 
  268374             :        // necessary, to have direct access to the p_freepointer and the private methods !
  268375             :       /*! \brief friend class declaration to support AST File I/O */
  268376             :           friend class AST_FILE_IO;
  268377             : 
  268378             :       /*! \brief friend class declaration to support AST File I/O */
  268379             :           friend class SgSIMDFmaOpStorageClass;
  268380             : 
  268381             :       /*! \brief friend class declaration to support AST File I/O */
  268382             :           friend class AstSpecificDataManagingClass;
  268383             : 
  268384             :       /*! \brief friend class declaration to support AST File I/O */
  268385             :           friend class AstSpecificDataManagingClassStorageClass;
  268386             :     public:
  268387             :       /*! \brief IR node constructor to support AST File I/O */
  268388             :           SgSIMDFmaOp( const SgSIMDFmaOpStorageClass& source );
  268389             : 
  268390             :  // private: // JJW hack
  268391             :        /*
  268392             :           name AST Memory Allocation Support Variables
  268393             :           Memory allocations support variables 
  268394             : 
  268395             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  268396             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  268397             :           and support the AST File I/O Mechanism.
  268398             :        */
  268399             :       /* */
  268400             : 
  268401             :     public:
  268402             : 
  268403             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  268404             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  268405             :       // virtual SgNode* addRegExpAttribute();
  268406             :       /*! \brief Support for AST matching using regular expression.
  268407             : 
  268408             :           This support is incomplete and the subject of current research to define 
  268409             :           RegEx trees to support inexact matching.
  268410             :        */
  268411             :           SgSIMDFmaOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  268412             : 
  268413             : // *** COMMON CODE SECTION ENDS HERE ***
  268414             : 
  268415             : 
  268416             : // End of memberFunctionString
  268417             : // Start of memberFunctionString
  268418             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  268419             : 
  268420             :      // the generated cast function
  268421             :      // friend ROSE_DLL_API SgSIMDFmaOp* isSgSIMDFmaOp ( SgNode* s );
  268422             : 
  268423             :           typedef SgSIMDBinaryOp base_node_type;
  268424             : 
  268425             : 
  268426             : // End of memberFunctionString
  268427             : // Start of memberFunctionString
  268428             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  268429             : 
  268430             :           void post_construction_initialization() override;
  268431             : 
  268432             : 
  268433             : // End of memberFunctionString
  268434             : // Start of memberFunctionString
  268435             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  268436             : 
  268437           0 :           int precedence() const override { return 16; }
  268438             : 
  268439             : 
  268440             : // End of memberFunctionString
  268441             : 
  268442             : 
  268443             :      public: 
  268444             :          virtual ~SgSIMDFmaOp();
  268445             : 
  268446             : 
  268447             :      public: 
  268448             :          SgSIMDFmaOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  268449             :          SgSIMDFmaOp(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  268450             : 
  268451             :     protected:
  268452             : 
  268453             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDFmaOp>;
  268454             : 
  268455             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268456             : 
  268457             : 
  268458             :    };
  268459             : #endif
  268460             : 
  268461             : // postdeclarations for SgSIMDFmaOp
  268462             : 
  268463             : /* #line 268464 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268464             : 
  268465             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  268466             : 
  268467             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268468             : 
  268469             : 
  268470             : /* #line 268471 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268471             : 
  268472             : 
  268473             : 
  268474             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268475             : 
  268476             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  268477             : //      This code is automatically generated for each 
  268478             : //      terminal and non-terminal within the defined 
  268479             : //      grammar.  There is a simple way to change the 
  268480             : //      code to fix bugs etc.  See the ROSE README file
  268481             : //      for directions.
  268482             : 
  268483             : // tps: (02/22/2010): Adding DLL export requirements
  268484             : #include "rosedll.h"
  268485             : 
  268486             : // predeclarations for SgSIMDLoad
  268487             : 
  268488             : /* #line 268489 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268489             : 
  268490             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  268491             : 
  268492             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268493             : 
  268494             : #if 1
  268495             : // Class Definition for SgSIMDLoad
  268496             : class ROSE_DLL_API SgSIMDLoad  : public SgBinaryOp
  268497             :    {
  268498             :      public:
  268499             : 
  268500             : 
  268501             : /* #line 268502 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268502             : 
  268503             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  268504             : // Start of memberFunctionString
  268505             : /* #line 9564 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  268506             : 
  268507             : 
  268508             : 
  268509             : // End of memberFunctionString
  268510             : // Start of memberFunctionString
  268511             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  268512             : 
  268513             : // *** COMMON CODE SECTION BEGINS HERE ***
  268514             : 
  268515             :     public:
  268516             : 
  268517             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  268518             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  268519             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  268520             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  268521             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  268522             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  268523             : 
  268524             :       /*! \brief returns a string representing the class name */
  268525             :           virtual std::string class_name() const override;
  268526             : 
  268527             :       /*! \brief returns new style SageIII enum values */
  268528             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  268529             : 
  268530             :       /*! \brief static variant value */
  268531             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  268532             :        // static const VariantT static_variant = V_SgSIMDLoad;
  268533             :           enum { static_variant = V_SgSIMDLoad };
  268534             : 
  268535             :        /* the generated cast function */
  268536             :       /*! \brief Casts pointer from base class to derived class */
  268537             :           ROSE_DLL_API friend       SgSIMDLoad* isSgSIMDLoad(       SgNode * s );
  268538             : 
  268539             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  268540             :           ROSE_DLL_API friend const SgSIMDLoad* isSgSIMDLoad( const SgNode * s );
  268541             : 
  268542             :      // ******************************************
  268543             :      // * Memory Pool / New / Delete
  268544             :      // ******************************************
  268545             : 
  268546             :      public:
  268547             :           /// \private
  268548             :           static const unsigned pool_size; //
  268549             :           /// \private
  268550             :           static std::vector<unsigned char *> pools; //
  268551             :           /// \private
  268552             :           static SgSIMDLoad * next_node; // 
  268553             : 
  268554             :           /// \private
  268555             :           static unsigned long initializeStorageClassArray(SgSIMDLoadStorageClass *); //
  268556             : 
  268557             :           /// \private
  268558             :           static void clearMemoryPool(); //
  268559             :           static void deleteMemoryPool(); //
  268560             : 
  268561             :           /// \private
  268562             :           static void extendMemoryPoolForFileIO(); //
  268563             : 
  268564             :           /// \private
  268565             :           static SgSIMDLoad * getPointerFromGlobalIndex(unsigned long); //
  268566             :           /// \private
  268567             :           static SgSIMDLoad * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  268568             : 
  268569             :           /// \private
  268570             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  268571             :           /// \private
  268572             :           static void resetValidFreepointers(); //
  268573             :           /// \private
  268574             :           static unsigned long getNumberOfLastValidPointer(); //
  268575             : 
  268576             : 
  268577             : #if defined(INLINE_FUNCTIONS)
  268578             :       /*! \brief returns pointer to newly allocated IR node */
  268579             :           inline void *operator new (size_t size);
  268580             : #else
  268581             :       /*! \brief returns pointer to newly allocated IR node */
  268582             :           void *operator new (size_t size);
  268583             : #endif
  268584             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  268585             :           void operator delete (void* pointer, size_t size);
  268586             : 
  268587             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  268588           0 :           void operator delete (void* pointer)
  268589             :              {
  268590             :             // This is the generated delete operator...
  268591           0 :                SgSIMDLoad::operator delete (pointer,sizeof(SgSIMDLoad));
  268592             :              }
  268593             : 
  268594             :       /*! \brief Returns the total number of IR nodes of this type */
  268595             :           static size_t numberOfNodes();
  268596             : 
  268597             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  268598             :           static size_t memoryUsage();
  268599             : 
  268600             :       // End of scope which started in IR nodes specific code 
  268601             :       /* */
  268602             : 
  268603             :       /* name Internal Functions
  268604             :           \brief Internal functions ... incomplete-documentation
  268605             : 
  268606             :           These functions have been made public as part of the design, but they are suggested for internal use 
  268607             :           or by particularly knowledgeable users for specialized tools or applications.
  268608             : 
  268609             :           \internal We could not make these private because they are required by user for special purposes. And 
  268610             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  268611             :          
  268612             :        */
  268613             : 
  268614             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  268615             :        // overridden in every class by *generated* implementation
  268616             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  268617             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  268618             :        // MS: 06/28/02 container of names of variables or container indices 
  268619             :        // used used in the traversal to access AST successor nodes
  268620             :        // overridden in every class by *generated* implementation
  268621             :       /*! \brief container of names of variables or container indices used used in the traversal
  268622             :           to access AST successor nodes overridden in every class by *generated* implementation */
  268623             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  268624             : 
  268625             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  268626             :        // than all the vector copies. The implementation for these functions is generated for each class.
  268627             :       /*! \brief return number of children in the traversal successor list */
  268628             :           virtual size_t get_numberOfTraversalSuccessors() override;
  268629             :       /*! \brief index-based access to traversal successors by index number */
  268630             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  268631             :       /*! \brief index-based access to traversal successors by child node */
  268632             :           virtual size_t get_childIndex(SgNode *child) override;
  268633             : 
  268634             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  268635             :        // MS: 08/16/2002 method for generating RTI information
  268636             :       /*! \brief return C++ Runtime-Time-Information */
  268637             :           virtual RTIReturnType roseRTI() override;
  268638             : #endif
  268639             :       /* */
  268640             : 
  268641             : 
  268642             : 
  268643             :       /* name Deprecated Functions
  268644             :           \brief Deprecated functions ... incomplete-documentation
  268645             : 
  268646             :           These functions have been deprecated from use.
  268647             :        */
  268648             :       /* */
  268649             : 
  268650             :       /*! returns a C style string (char*) representing the class name */
  268651             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  268652             : 
  268653             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  268654             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  268655             : #if 0
  268656             :       /*! returns old style Sage II enum values */
  268657             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  268658             :       /*! returns old style Sage II enum values */
  268659             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  268660             : #endif
  268661             :       /* */
  268662             : 
  268663             : 
  268664             : 
  268665             : 
  268666             :      public:
  268667             :       /* name Traversal Support Functions
  268668             :           \brief Traversal support functions ... incomplete-documentation
  268669             : 
  268670             :           These functions have been made public as part of the design, but they are suggested for internal use 
  268671             :           or by particularly knowledgable users for specialized tools or applications.
  268672             :        */
  268673             :       /* */
  268674             : 
  268675             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  268676             :        // (inferior to ROSE traversal mechanism, experimental).
  268677             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  268678             :        */
  268679             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  268680             : 
  268681             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  268682             :       /*! \brief support for the classic visitor pattern done in GoF */
  268683             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  268684             : 
  268685             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  268686             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  268687             :        */
  268688             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  268689             : 
  268690             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  268691             :        */
  268692             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  268693             : 
  268694             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  268695             :        // This traversal helps support internal tools that call static member functions.
  268696             :        // note: this function operates on the memory pools.
  268697             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  268698             :        */
  268699             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  268700             :       /* */
  268701             : 
  268702             : 
  268703             :      public:
  268704             :       /* name Memory Allocation Functions
  268705             :           \brief Memory allocations functions ... incomplete-documentation
  268706             : 
  268707             :           These functions have been made public as part of the design, but they are suggested for internal use 
  268708             :           or by particularly knowledgable users for specialized tools or applications.
  268709             :        */
  268710             :       /* */
  268711             : 
  268712             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  268713             : 
  268714             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  268715             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  268716             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  268717             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  268718             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  268719             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  268720             :           being used with the AST File I/O mechanism.
  268721             :        */
  268722             :           virtual bool isInMemoryPool() override;
  268723             : 
  268724             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  268725             : 
  268726             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  268727             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  268728             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  268729             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  268730             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  268731             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  268732             :           being used with the AST File I/O mechanism.
  268733             :        */
  268734             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  268735             : 
  268736             :       // DQ (4/30/2006): Modified to be a const function.
  268737             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  268738             : 
  268739             :           This functions is part of general support for many possible tools to operate 
  268740             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  268741             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  268742             :           less than the set of pointers used by the AST file I/O. This is part of
  268743             :           work implemented by Andreas, and support tools such as the AST graph generation.
  268744             : 
  268745             :           \warning This function can return unexpected data members and thus the 
  268746             :                    order and the number of elements is unpredicable and subject 
  268747             :                    to change.
  268748             : 
  268749             :           \returns STL vector of pairs of SgNode* and strings
  268750             :        */
  268751             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  268752             : 
  268753             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  268754             : 
  268755             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  268756             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  268757             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  268758             : 
  268759             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  268760             :                    and subject to change.
  268761             :        */
  268762             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  268763             : 
  268764             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  268765             : 
  268766             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  268767             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  268768             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  268769             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  268770             : 
  268771             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  268772             : 
  268773             :           \returns long
  268774             :        */
  268775             :           virtual long getChildIndex( SgNode* childNode ) const override;
  268776             : 
  268777             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  268778             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  268779             :       /* \brief Constructor for use by AST File I/O Mechanism
  268780             : 
  268781             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  268782             :           which obtained via fast binary file I/O from disk.
  268783             :        */
  268784             :        // SgSIMDLoad( SgSIMDLoadStorageClass& source );
  268785             : 
  268786             : 
  268787             : 
  268788             : 
  268789             : 
  268790             :  // JH (10/24/2005): methods added to support the ast file IO
  268791             :     private:
  268792             : 
  268793             :       /* name AST Memory Allocation Support Functions
  268794             :           \brief Memory allocations support....
  268795             : 
  268796             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  268797             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  268798             :           and support the AST File I/O Mechanism.
  268799             :        */
  268800             :       /* */
  268801             : 
  268802             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  268803             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  268804             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  268805             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  268806             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  268807             :           a correspinding one in the AST_FILE_IO class!
  268808             :        */
  268809             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  268810             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  268811             :       /* \brief Typedef used for low level memory access.
  268812             :        */
  268813             :        // typedef unsigned char* TestType;
  268814             : 
  268815             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  268816             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  268817             :       /* \brief Typedef used to hold memory addresses as values.
  268818             :        */
  268819             :        // typedef unsigned long  AddressType;
  268820             : 
  268821             : 
  268822             : 
  268823             :        // necessary, to have direct access to the p_freepointer and the private methods !
  268824             :       /*! \brief friend class declaration to support AST File I/O */
  268825             :           friend class AST_FILE_IO;
  268826             : 
  268827             :       /*! \brief friend class declaration to support AST File I/O */
  268828             :           friend class SgSIMDLoadStorageClass;
  268829             : 
  268830             :       /*! \brief friend class declaration to support AST File I/O */
  268831             :           friend class AstSpecificDataManagingClass;
  268832             : 
  268833             :       /*! \brief friend class declaration to support AST File I/O */
  268834             :           friend class AstSpecificDataManagingClassStorageClass;
  268835             :     public:
  268836             :       /*! \brief IR node constructor to support AST File I/O */
  268837             :           SgSIMDLoad( const SgSIMDLoadStorageClass& source );
  268838             : 
  268839             :  // private: // JJW hack
  268840             :        /*
  268841             :           name AST Memory Allocation Support Variables
  268842             :           Memory allocations support variables 
  268843             : 
  268844             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  268845             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  268846             :           and support the AST File I/O Mechanism.
  268847             :        */
  268848             :       /* */
  268849             : 
  268850             :     public:
  268851             : 
  268852             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  268853             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  268854             :       // virtual SgNode* addRegExpAttribute();
  268855             :       /*! \brief Support for AST matching using regular expression.
  268856             : 
  268857             :           This support is incomplete and the subject of current research to define 
  268858             :           RegEx trees to support inexact matching.
  268859             :        */
  268860             :           SgSIMDLoad* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  268861             : 
  268862             : // *** COMMON CODE SECTION ENDS HERE ***
  268863             : 
  268864             : 
  268865             : // End of memberFunctionString
  268866             : // Start of memberFunctionString
  268867             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  268868             : 
  268869             :      // the generated cast function
  268870             :      // friend ROSE_DLL_API SgSIMDLoad* isSgSIMDLoad ( SgNode* s );
  268871             : 
  268872             :           typedef SgBinaryOp base_node_type;
  268873             : 
  268874             : 
  268875             : // End of memberFunctionString
  268876             : // Start of memberFunctionString
  268877             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  268878             : 
  268879             :           void post_construction_initialization() override;
  268880             : 
  268881             : 
  268882             : // End of memberFunctionString
  268883             : // Start of memberFunctionString
  268884             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  268885             : 
  268886           0 :           int precedence() const override { return 16; }
  268887             : 
  268888             : 
  268889             : // End of memberFunctionString
  268890             : 
  268891             : 
  268892             :      public: 
  268893             :          virtual ~SgSIMDLoad();
  268894             : 
  268895             : 
  268896             :      public: 
  268897             :          SgSIMDLoad(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  268898             :          SgSIMDLoad(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  268899             : 
  268900             :     protected:
  268901             : 
  268902             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDLoad>;
  268903             : 
  268904             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268905             : 
  268906             : 
  268907             :    };
  268908             : #endif
  268909             : 
  268910             : // postdeclarations for SgSIMDLoad
  268911             : 
  268912             : /* #line 268913 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268913             : 
  268914             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  268915             : 
  268916             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268917             : 
  268918             : 
  268919             : /* #line 268920 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268920             : 
  268921             : 
  268922             : 
  268923             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268924             : 
  268925             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  268926             : //      This code is automatically generated for each 
  268927             : //      terminal and non-terminal within the defined 
  268928             : //      grammar.  There is a simple way to change the 
  268929             : //      code to fix bugs etc.  See the ROSE README file
  268930             : //      for directions.
  268931             : 
  268932             : // tps: (02/22/2010): Adding DLL export requirements
  268933             : #include "rosedll.h"
  268934             : 
  268935             : // predeclarations for SgSIMDBroadcast
  268936             : 
  268937             : /* #line 268938 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268938             : 
  268939             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  268940             : 
  268941             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  268942             : 
  268943             : #if 1
  268944             : // Class Definition for SgSIMDBroadcast
  268945             : class ROSE_DLL_API SgSIMDBroadcast  : public SgBinaryOp
  268946             :    {
  268947             :      public:
  268948             : 
  268949             : 
  268950             : /* #line 268951 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  268951             : 
  268952             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  268953             : // Start of memberFunctionString
  268954             : /* #line 9572 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  268955             : 
  268956             : 
  268957             : 
  268958             : // End of memberFunctionString
  268959             : // Start of memberFunctionString
  268960             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  268961             : 
  268962             : // *** COMMON CODE SECTION BEGINS HERE ***
  268963             : 
  268964             :     public:
  268965             : 
  268966             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  268967             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  268968             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  268969             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  268970             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  268971             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  268972             : 
  268973             :       /*! \brief returns a string representing the class name */
  268974             :           virtual std::string class_name() const override;
  268975             : 
  268976             :       /*! \brief returns new style SageIII enum values */
  268977             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  268978             : 
  268979             :       /*! \brief static variant value */
  268980             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  268981             :        // static const VariantT static_variant = V_SgSIMDBroadcast;
  268982             :           enum { static_variant = V_SgSIMDBroadcast };
  268983             : 
  268984             :        /* the generated cast function */
  268985             :       /*! \brief Casts pointer from base class to derived class */
  268986             :           ROSE_DLL_API friend       SgSIMDBroadcast* isSgSIMDBroadcast(       SgNode * s );
  268987             : 
  268988             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  268989             :           ROSE_DLL_API friend const SgSIMDBroadcast* isSgSIMDBroadcast( const SgNode * s );
  268990             : 
  268991             :      // ******************************************
  268992             :      // * Memory Pool / New / Delete
  268993             :      // ******************************************
  268994             : 
  268995             :      public:
  268996             :           /// \private
  268997             :           static const unsigned pool_size; //
  268998             :           /// \private
  268999             :           static std::vector<unsigned char *> pools; //
  269000             :           /// \private
  269001             :           static SgSIMDBroadcast * next_node; // 
  269002             : 
  269003             :           /// \private
  269004             :           static unsigned long initializeStorageClassArray(SgSIMDBroadcastStorageClass *); //
  269005             : 
  269006             :           /// \private
  269007             :           static void clearMemoryPool(); //
  269008             :           static void deleteMemoryPool(); //
  269009             : 
  269010             :           /// \private
  269011             :           static void extendMemoryPoolForFileIO(); //
  269012             : 
  269013             :           /// \private
  269014             :           static SgSIMDBroadcast * getPointerFromGlobalIndex(unsigned long); //
  269015             :           /// \private
  269016             :           static SgSIMDBroadcast * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  269017             : 
  269018             :           /// \private
  269019             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  269020             :           /// \private
  269021             :           static void resetValidFreepointers(); //
  269022             :           /// \private
  269023             :           static unsigned long getNumberOfLastValidPointer(); //
  269024             : 
  269025             : 
  269026             : #if defined(INLINE_FUNCTIONS)
  269027             :       /*! \brief returns pointer to newly allocated IR node */
  269028             :           inline void *operator new (size_t size);
  269029             : #else
  269030             :       /*! \brief returns pointer to newly allocated IR node */
  269031             :           void *operator new (size_t size);
  269032             : #endif
  269033             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  269034             :           void operator delete (void* pointer, size_t size);
  269035             : 
  269036             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  269037           0 :           void operator delete (void* pointer)
  269038             :              {
  269039             :             // This is the generated delete operator...
  269040           0 :                SgSIMDBroadcast::operator delete (pointer,sizeof(SgSIMDBroadcast));
  269041             :              }
  269042             : 
  269043             :       /*! \brief Returns the total number of IR nodes of this type */
  269044             :           static size_t numberOfNodes();
  269045             : 
  269046             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  269047             :           static size_t memoryUsage();
  269048             : 
  269049             :       // End of scope which started in IR nodes specific code 
  269050             :       /* */
  269051             : 
  269052             :       /* name Internal Functions
  269053             :           \brief Internal functions ... incomplete-documentation
  269054             : 
  269055             :           These functions have been made public as part of the design, but they are suggested for internal use 
  269056             :           or by particularly knowledgeable users for specialized tools or applications.
  269057             : 
  269058             :           \internal We could not make these private because they are required by user for special purposes. And 
  269059             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  269060             :          
  269061             :        */
  269062             : 
  269063             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  269064             :        // overridden in every class by *generated* implementation
  269065             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  269066             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  269067             :        // MS: 06/28/02 container of names of variables or container indices 
  269068             :        // used used in the traversal to access AST successor nodes
  269069             :        // overridden in every class by *generated* implementation
  269070             :       /*! \brief container of names of variables or container indices used used in the traversal
  269071             :           to access AST successor nodes overridden in every class by *generated* implementation */
  269072             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  269073             : 
  269074             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  269075             :        // than all the vector copies. The implementation for these functions is generated for each class.
  269076             :       /*! \brief return number of children in the traversal successor list */
  269077             :           virtual size_t get_numberOfTraversalSuccessors() override;
  269078             :       /*! \brief index-based access to traversal successors by index number */
  269079             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  269080             :       /*! \brief index-based access to traversal successors by child node */
  269081             :           virtual size_t get_childIndex(SgNode *child) override;
  269082             : 
  269083             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  269084             :        // MS: 08/16/2002 method for generating RTI information
  269085             :       /*! \brief return C++ Runtime-Time-Information */
  269086             :           virtual RTIReturnType roseRTI() override;
  269087             : #endif
  269088             :       /* */
  269089             : 
  269090             : 
  269091             : 
  269092             :       /* name Deprecated Functions
  269093             :           \brief Deprecated functions ... incomplete-documentation
  269094             : 
  269095             :           These functions have been deprecated from use.
  269096             :        */
  269097             :       /* */
  269098             : 
  269099             :       /*! returns a C style string (char*) representing the class name */
  269100             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  269101             : 
  269102             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  269103             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  269104             : #if 0
  269105             :       /*! returns old style Sage II enum values */
  269106             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  269107             :       /*! returns old style Sage II enum values */
  269108             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  269109             : #endif
  269110             :       /* */
  269111             : 
  269112             : 
  269113             : 
  269114             : 
  269115             :      public:
  269116             :       /* name Traversal Support Functions
  269117             :           \brief Traversal support functions ... incomplete-documentation
  269118             : 
  269119             :           These functions have been made public as part of the design, but they are suggested for internal use 
  269120             :           or by particularly knowledgable users for specialized tools or applications.
  269121             :        */
  269122             :       /* */
  269123             : 
  269124             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  269125             :        // (inferior to ROSE traversal mechanism, experimental).
  269126             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  269127             :        */
  269128             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  269129             : 
  269130             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  269131             :       /*! \brief support for the classic visitor pattern done in GoF */
  269132             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  269133             : 
  269134             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  269135             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  269136             :        */
  269137             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  269138             : 
  269139             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  269140             :        */
  269141             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  269142             : 
  269143             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  269144             :        // This traversal helps support internal tools that call static member functions.
  269145             :        // note: this function operates on the memory pools.
  269146             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  269147             :        */
  269148             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  269149             :       /* */
  269150             : 
  269151             : 
  269152             :      public:
  269153             :       /* name Memory Allocation Functions
  269154             :           \brief Memory allocations functions ... incomplete-documentation
  269155             : 
  269156             :           These functions have been made public as part of the design, but they are suggested for internal use 
  269157             :           or by particularly knowledgable users for specialized tools or applications.
  269158             :        */
  269159             :       /* */
  269160             : 
  269161             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  269162             : 
  269163             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  269164             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  269165             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  269166             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  269167             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  269168             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  269169             :           being used with the AST File I/O mechanism.
  269170             :        */
  269171             :           virtual bool isInMemoryPool() override;
  269172             : 
  269173             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  269174             : 
  269175             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  269176             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  269177             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  269178             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  269179             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  269180             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  269181             :           being used with the AST File I/O mechanism.
  269182             :        */
  269183             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  269184             : 
  269185             :       // DQ (4/30/2006): Modified to be a const function.
  269186             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  269187             : 
  269188             :           This functions is part of general support for many possible tools to operate 
  269189             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  269190             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  269191             :           less than the set of pointers used by the AST file I/O. This is part of
  269192             :           work implemented by Andreas, and support tools such as the AST graph generation.
  269193             : 
  269194             :           \warning This function can return unexpected data members and thus the 
  269195             :                    order and the number of elements is unpredicable and subject 
  269196             :                    to change.
  269197             : 
  269198             :           \returns STL vector of pairs of SgNode* and strings
  269199             :        */
  269200             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  269201             : 
  269202             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  269203             : 
  269204             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  269205             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  269206             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  269207             : 
  269208             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  269209             :                    and subject to change.
  269210             :        */
  269211             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  269212             : 
  269213             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  269214             : 
  269215             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  269216             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  269217             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  269218             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  269219             : 
  269220             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  269221             : 
  269222             :           \returns long
  269223             :        */
  269224             :           virtual long getChildIndex( SgNode* childNode ) const override;
  269225             : 
  269226             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  269227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  269228             :       /* \brief Constructor for use by AST File I/O Mechanism
  269229             : 
  269230             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  269231             :           which obtained via fast binary file I/O from disk.
  269232             :        */
  269233             :        // SgSIMDBroadcast( SgSIMDBroadcastStorageClass& source );
  269234             : 
  269235             : 
  269236             : 
  269237             : 
  269238             : 
  269239             :  // JH (10/24/2005): methods added to support the ast file IO
  269240             :     private:
  269241             : 
  269242             :       /* name AST Memory Allocation Support Functions
  269243             :           \brief Memory allocations support....
  269244             : 
  269245             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  269246             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  269247             :           and support the AST File I/O Mechanism.
  269248             :        */
  269249             :       /* */
  269250             : 
  269251             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  269252             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  269253             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  269254             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  269255             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  269256             :           a correspinding one in the AST_FILE_IO class!
  269257             :        */
  269258             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  269259             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  269260             :       /* \brief Typedef used for low level memory access.
  269261             :        */
  269262             :        // typedef unsigned char* TestType;
  269263             : 
  269264             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  269265             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  269266             :       /* \brief Typedef used to hold memory addresses as values.
  269267             :        */
  269268             :        // typedef unsigned long  AddressType;
  269269             : 
  269270             : 
  269271             : 
  269272             :        // necessary, to have direct access to the p_freepointer and the private methods !
  269273             :       /*! \brief friend class declaration to support AST File I/O */
  269274             :           friend class AST_FILE_IO;
  269275             : 
  269276             :       /*! \brief friend class declaration to support AST File I/O */
  269277             :           friend class SgSIMDBroadcastStorageClass;
  269278             : 
  269279             :       /*! \brief friend class declaration to support AST File I/O */
  269280             :           friend class AstSpecificDataManagingClass;
  269281             : 
  269282             :       /*! \brief friend class declaration to support AST File I/O */
  269283             :           friend class AstSpecificDataManagingClassStorageClass;
  269284             :     public:
  269285             :       /*! \brief IR node constructor to support AST File I/O */
  269286             :           SgSIMDBroadcast( const SgSIMDBroadcastStorageClass& source );
  269287             : 
  269288             :  // private: // JJW hack
  269289             :        /*
  269290             :           name AST Memory Allocation Support Variables
  269291             :           Memory allocations support variables 
  269292             : 
  269293             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  269294             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  269295             :           and support the AST File I/O Mechanism.
  269296             :        */
  269297             :       /* */
  269298             : 
  269299             :     public:
  269300             : 
  269301             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  269302             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  269303             :       // virtual SgNode* addRegExpAttribute();
  269304             :       /*! \brief Support for AST matching using regular expression.
  269305             : 
  269306             :           This support is incomplete and the subject of current research to define 
  269307             :           RegEx trees to support inexact matching.
  269308             :        */
  269309             :           SgSIMDBroadcast* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  269310             : 
  269311             : // *** COMMON CODE SECTION ENDS HERE ***
  269312             : 
  269313             : 
  269314             : // End of memberFunctionString
  269315             : // Start of memberFunctionString
  269316             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  269317             : 
  269318             :      // the generated cast function
  269319             :      // friend ROSE_DLL_API SgSIMDBroadcast* isSgSIMDBroadcast ( SgNode* s );
  269320             : 
  269321             :           typedef SgBinaryOp base_node_type;
  269322             : 
  269323             : 
  269324             : // End of memberFunctionString
  269325             : // Start of memberFunctionString
  269326             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  269327             : 
  269328             :           void post_construction_initialization() override;
  269329             : 
  269330             : 
  269331             : // End of memberFunctionString
  269332             : // Start of memberFunctionString
  269333             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  269334             : 
  269335           0 :           int precedence() const override { return 16; }
  269336             : 
  269337             : 
  269338             : // End of memberFunctionString
  269339             : 
  269340             : 
  269341             :      public: 
  269342             :          virtual ~SgSIMDBroadcast();
  269343             : 
  269344             : 
  269345             :      public: 
  269346             :          SgSIMDBroadcast(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  269347             :          SgSIMDBroadcast(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  269348             : 
  269349             :     protected:
  269350             : 
  269351             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDBroadcast>;
  269352             : 
  269353             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269354             : 
  269355             : 
  269356             :    };
  269357             : #endif
  269358             : 
  269359             : // postdeclarations for SgSIMDBroadcast
  269360             : 
  269361             : /* #line 269362 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269362             : 
  269363             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  269364             : 
  269365             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269366             : 
  269367             : 
  269368             : /* #line 269369 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269369             : 
  269370             : 
  269371             : 
  269372             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269373             : 
  269374             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  269375             : //      This code is automatically generated for each 
  269376             : //      terminal and non-terminal within the defined 
  269377             : //      grammar.  There is a simple way to change the 
  269378             : //      code to fix bugs etc.  See the ROSE README file
  269379             : //      for directions.
  269380             : 
  269381             : // tps: (02/22/2010): Adding DLL export requirements
  269382             : #include "rosedll.h"
  269383             : 
  269384             : // predeclarations for SgSIMDStore
  269385             : 
  269386             : /* #line 269387 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269387             : 
  269388             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  269389             : 
  269390             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269391             : 
  269392             : #if 1
  269393             : // Class Definition for SgSIMDStore
  269394             : class ROSE_DLL_API SgSIMDStore  : public SgBinaryOp
  269395             :    {
  269396             :      public:
  269397             : 
  269398             : 
  269399             : /* #line 269400 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269400             : 
  269401             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  269402             : // Start of memberFunctionString
  269403             : /* #line 9580 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  269404             : 
  269405             : 
  269406             : 
  269407             : // End of memberFunctionString
  269408             : // Start of memberFunctionString
  269409             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  269410             : 
  269411             : // *** COMMON CODE SECTION BEGINS HERE ***
  269412             : 
  269413             :     public:
  269414             : 
  269415             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  269416             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  269417             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  269418             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  269419             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  269420             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  269421             : 
  269422             :       /*! \brief returns a string representing the class name */
  269423             :           virtual std::string class_name() const override;
  269424             : 
  269425             :       /*! \brief returns new style SageIII enum values */
  269426             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  269427             : 
  269428             :       /*! \brief static variant value */
  269429             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  269430             :        // static const VariantT static_variant = V_SgSIMDStore;
  269431             :           enum { static_variant = V_SgSIMDStore };
  269432             : 
  269433             :        /* the generated cast function */
  269434             :       /*! \brief Casts pointer from base class to derived class */
  269435             :           ROSE_DLL_API friend       SgSIMDStore* isSgSIMDStore(       SgNode * s );
  269436             : 
  269437             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  269438             :           ROSE_DLL_API friend const SgSIMDStore* isSgSIMDStore( const SgNode * s );
  269439             : 
  269440             :      // ******************************************
  269441             :      // * Memory Pool / New / Delete
  269442             :      // ******************************************
  269443             : 
  269444             :      public:
  269445             :           /// \private
  269446             :           static const unsigned pool_size; //
  269447             :           /// \private
  269448             :           static std::vector<unsigned char *> pools; //
  269449             :           /// \private
  269450             :           static SgSIMDStore * next_node; // 
  269451             : 
  269452             :           /// \private
  269453             :           static unsigned long initializeStorageClassArray(SgSIMDStoreStorageClass *); //
  269454             : 
  269455             :           /// \private
  269456             :           static void clearMemoryPool(); //
  269457             :           static void deleteMemoryPool(); //
  269458             : 
  269459             :           /// \private
  269460             :           static void extendMemoryPoolForFileIO(); //
  269461             : 
  269462             :           /// \private
  269463             :           static SgSIMDStore * getPointerFromGlobalIndex(unsigned long); //
  269464             :           /// \private
  269465             :           static SgSIMDStore * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  269466             : 
  269467             :           /// \private
  269468             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  269469             :           /// \private
  269470             :           static void resetValidFreepointers(); //
  269471             :           /// \private
  269472             :           static unsigned long getNumberOfLastValidPointer(); //
  269473             : 
  269474             : 
  269475             : #if defined(INLINE_FUNCTIONS)
  269476             :       /*! \brief returns pointer to newly allocated IR node */
  269477             :           inline void *operator new (size_t size);
  269478             : #else
  269479             :       /*! \brief returns pointer to newly allocated IR node */
  269480             :           void *operator new (size_t size);
  269481             : #endif
  269482             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  269483             :           void operator delete (void* pointer, size_t size);
  269484             : 
  269485             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  269486           0 :           void operator delete (void* pointer)
  269487             :              {
  269488             :             // This is the generated delete operator...
  269489           0 :                SgSIMDStore::operator delete (pointer,sizeof(SgSIMDStore));
  269490             :              }
  269491             : 
  269492             :       /*! \brief Returns the total number of IR nodes of this type */
  269493             :           static size_t numberOfNodes();
  269494             : 
  269495             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  269496             :           static size_t memoryUsage();
  269497             : 
  269498             :       // End of scope which started in IR nodes specific code 
  269499             :       /* */
  269500             : 
  269501             :       /* name Internal Functions
  269502             :           \brief Internal functions ... incomplete-documentation
  269503             : 
  269504             :           These functions have been made public as part of the design, but they are suggested for internal use 
  269505             :           or by particularly knowledgeable users for specialized tools or applications.
  269506             : 
  269507             :           \internal We could not make these private because they are required by user for special purposes. And 
  269508             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  269509             :          
  269510             :        */
  269511             : 
  269512             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  269513             :        // overridden in every class by *generated* implementation
  269514             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  269515             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  269516             :        // MS: 06/28/02 container of names of variables or container indices 
  269517             :        // used used in the traversal to access AST successor nodes
  269518             :        // overridden in every class by *generated* implementation
  269519             :       /*! \brief container of names of variables or container indices used used in the traversal
  269520             :           to access AST successor nodes overridden in every class by *generated* implementation */
  269521             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  269522             : 
  269523             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  269524             :        // than all the vector copies. The implementation for these functions is generated for each class.
  269525             :       /*! \brief return number of children in the traversal successor list */
  269526             :           virtual size_t get_numberOfTraversalSuccessors() override;
  269527             :       /*! \brief index-based access to traversal successors by index number */
  269528             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  269529             :       /*! \brief index-based access to traversal successors by child node */
  269530             :           virtual size_t get_childIndex(SgNode *child) override;
  269531             : 
  269532             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  269533             :        // MS: 08/16/2002 method for generating RTI information
  269534             :       /*! \brief return C++ Runtime-Time-Information */
  269535             :           virtual RTIReturnType roseRTI() override;
  269536             : #endif
  269537             :       /* */
  269538             : 
  269539             : 
  269540             : 
  269541             :       /* name Deprecated Functions
  269542             :           \brief Deprecated functions ... incomplete-documentation
  269543             : 
  269544             :           These functions have been deprecated from use.
  269545             :        */
  269546             :       /* */
  269547             : 
  269548             :       /*! returns a C style string (char*) representing the class name */
  269549             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  269550             : 
  269551             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  269552             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  269553             : #if 0
  269554             :       /*! returns old style Sage II enum values */
  269555             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  269556             :       /*! returns old style Sage II enum values */
  269557             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  269558             : #endif
  269559             :       /* */
  269560             : 
  269561             : 
  269562             : 
  269563             : 
  269564             :      public:
  269565             :       /* name Traversal Support Functions
  269566             :           \brief Traversal support functions ... incomplete-documentation
  269567             : 
  269568             :           These functions have been made public as part of the design, but they are suggested for internal use 
  269569             :           or by particularly knowledgable users for specialized tools or applications.
  269570             :        */
  269571             :       /* */
  269572             : 
  269573             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  269574             :        // (inferior to ROSE traversal mechanism, experimental).
  269575             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  269576             :        */
  269577             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  269578             : 
  269579             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  269580             :       /*! \brief support for the classic visitor pattern done in GoF */
  269581             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  269582             : 
  269583             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  269584             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  269585             :        */
  269586             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  269587             : 
  269588             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  269589             :        */
  269590             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  269591             : 
  269592             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  269593             :        // This traversal helps support internal tools that call static member functions.
  269594             :        // note: this function operates on the memory pools.
  269595             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  269596             :        */
  269597             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  269598             :       /* */
  269599             : 
  269600             : 
  269601             :      public:
  269602             :       /* name Memory Allocation Functions
  269603             :           \brief Memory allocations functions ... incomplete-documentation
  269604             : 
  269605             :           These functions have been made public as part of the design, but they are suggested for internal use 
  269606             :           or by particularly knowledgable users for specialized tools or applications.
  269607             :        */
  269608             :       /* */
  269609             : 
  269610             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  269611             : 
  269612             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  269613             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  269614             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  269615             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  269616             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  269617             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  269618             :           being used with the AST File I/O mechanism.
  269619             :        */
  269620             :           virtual bool isInMemoryPool() override;
  269621             : 
  269622             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  269623             : 
  269624             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  269625             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  269626             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  269627             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  269628             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  269629             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  269630             :           being used with the AST File I/O mechanism.
  269631             :        */
  269632             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  269633             : 
  269634             :       // DQ (4/30/2006): Modified to be a const function.
  269635             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  269636             : 
  269637             :           This functions is part of general support for many possible tools to operate 
  269638             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  269639             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  269640             :           less than the set of pointers used by the AST file I/O. This is part of
  269641             :           work implemented by Andreas, and support tools such as the AST graph generation.
  269642             : 
  269643             :           \warning This function can return unexpected data members and thus the 
  269644             :                    order and the number of elements is unpredicable and subject 
  269645             :                    to change.
  269646             : 
  269647             :           \returns STL vector of pairs of SgNode* and strings
  269648             :        */
  269649             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  269650             : 
  269651             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  269652             : 
  269653             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  269654             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  269655             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  269656             : 
  269657             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  269658             :                    and subject to change.
  269659             :        */
  269660             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  269661             : 
  269662             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  269663             : 
  269664             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  269665             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  269666             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  269667             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  269668             : 
  269669             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  269670             : 
  269671             :           \returns long
  269672             :        */
  269673             :           virtual long getChildIndex( SgNode* childNode ) const override;
  269674             : 
  269675             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  269676             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  269677             :       /* \brief Constructor for use by AST File I/O Mechanism
  269678             : 
  269679             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  269680             :           which obtained via fast binary file I/O from disk.
  269681             :        */
  269682             :        // SgSIMDStore( SgSIMDStoreStorageClass& source );
  269683             : 
  269684             : 
  269685             : 
  269686             : 
  269687             : 
  269688             :  // JH (10/24/2005): methods added to support the ast file IO
  269689             :     private:
  269690             : 
  269691             :       /* name AST Memory Allocation Support Functions
  269692             :           \brief Memory allocations support....
  269693             : 
  269694             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  269695             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  269696             :           and support the AST File I/O Mechanism.
  269697             :        */
  269698             :       /* */
  269699             : 
  269700             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  269701             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  269702             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  269703             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  269704             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  269705             :           a correspinding one in the AST_FILE_IO class!
  269706             :        */
  269707             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  269708             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  269709             :       /* \brief Typedef used for low level memory access.
  269710             :        */
  269711             :        // typedef unsigned char* TestType;
  269712             : 
  269713             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  269714             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  269715             :       /* \brief Typedef used to hold memory addresses as values.
  269716             :        */
  269717             :        // typedef unsigned long  AddressType;
  269718             : 
  269719             : 
  269720             : 
  269721             :        // necessary, to have direct access to the p_freepointer and the private methods !
  269722             :       /*! \brief friend class declaration to support AST File I/O */
  269723             :           friend class AST_FILE_IO;
  269724             : 
  269725             :       /*! \brief friend class declaration to support AST File I/O */
  269726             :           friend class SgSIMDStoreStorageClass;
  269727             : 
  269728             :       /*! \brief friend class declaration to support AST File I/O */
  269729             :           friend class AstSpecificDataManagingClass;
  269730             : 
  269731             :       /*! \brief friend class declaration to support AST File I/O */
  269732             :           friend class AstSpecificDataManagingClassStorageClass;
  269733             :     public:
  269734             :       /*! \brief IR node constructor to support AST File I/O */
  269735             :           SgSIMDStore( const SgSIMDStoreStorageClass& source );
  269736             : 
  269737             :  // private: // JJW hack
  269738             :        /*
  269739             :           name AST Memory Allocation Support Variables
  269740             :           Memory allocations support variables 
  269741             : 
  269742             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  269743             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  269744             :           and support the AST File I/O Mechanism.
  269745             :        */
  269746             :       /* */
  269747             : 
  269748             :     public:
  269749             : 
  269750             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  269751             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  269752             :       // virtual SgNode* addRegExpAttribute();
  269753             :       /*! \brief Support for AST matching using regular expression.
  269754             : 
  269755             :           This support is incomplete and the subject of current research to define 
  269756             :           RegEx trees to support inexact matching.
  269757             :        */
  269758             :           SgSIMDStore* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  269759             : 
  269760             : // *** COMMON CODE SECTION ENDS HERE ***
  269761             : 
  269762             : 
  269763             : // End of memberFunctionString
  269764             : // Start of memberFunctionString
  269765             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  269766             : 
  269767             :      // the generated cast function
  269768             :      // friend ROSE_DLL_API SgSIMDStore* isSgSIMDStore ( SgNode* s );
  269769             : 
  269770             :           typedef SgBinaryOp base_node_type;
  269771             : 
  269772             : 
  269773             : // End of memberFunctionString
  269774             : // Start of memberFunctionString
  269775             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  269776             : 
  269777             :           void post_construction_initialization() override;
  269778             : 
  269779             : 
  269780             : // End of memberFunctionString
  269781             : // Start of memberFunctionString
  269782             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  269783             : 
  269784           0 :           int precedence() const override { return 16; }
  269785             : 
  269786             : 
  269787             : // End of memberFunctionString
  269788             : 
  269789             : 
  269790             :      public: 
  269791             :          virtual ~SgSIMDStore();
  269792             : 
  269793             : 
  269794             :      public: 
  269795             :          SgSIMDStore(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  269796             :          SgSIMDStore(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  269797             : 
  269798             :     protected:
  269799             : 
  269800             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDStore>;
  269801             : 
  269802             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269803             : 
  269804             : 
  269805             :    };
  269806             : #endif
  269807             : 
  269808             : // postdeclarations for SgSIMDStore
  269809             : 
  269810             : /* #line 269811 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269811             : 
  269812             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  269813             : 
  269814             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269815             : 
  269816             : 
  269817             : /* #line 269818 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269818             : 
  269819             : 
  269820             : 
  269821             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269822             : 
  269823             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  269824             : //      This code is automatically generated for each 
  269825             : //      terminal and non-terminal within the defined 
  269826             : //      grammar.  There is a simple way to change the 
  269827             : //      code to fix bugs etc.  See the ROSE README file
  269828             : //      for directions.
  269829             : 
  269830             : // tps: (02/22/2010): Adding DLL export requirements
  269831             : #include "rosedll.h"
  269832             : 
  269833             : // predeclarations for SgSIMDPartialStore
  269834             : 
  269835             : /* #line 269836 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269836             : 
  269837             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  269838             : 
  269839             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  269840             : 
  269841             : #if 1
  269842             : // Class Definition for SgSIMDPartialStore
  269843             : class ROSE_DLL_API SgSIMDPartialStore  : public SgBinaryOp
  269844             :    {
  269845             :      public:
  269846             : 
  269847             : 
  269848             : /* #line 269849 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  269849             : 
  269850             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  269851             : // Start of memberFunctionString
  269852             : /* #line 9588 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  269853             : 
  269854             : 
  269855             : 
  269856             : // End of memberFunctionString
  269857             : // Start of memberFunctionString
  269858             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  269859             : 
  269860             : // *** COMMON CODE SECTION BEGINS HERE ***
  269861             : 
  269862             :     public:
  269863             : 
  269864             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  269865             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  269866             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  269867             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  269868             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  269869             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  269870             : 
  269871             :       /*! \brief returns a string representing the class name */
  269872             :           virtual std::string class_name() const override;
  269873             : 
  269874             :       /*! \brief returns new style SageIII enum values */
  269875             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  269876             : 
  269877             :       /*! \brief static variant value */
  269878             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  269879             :        // static const VariantT static_variant = V_SgSIMDPartialStore;
  269880             :           enum { static_variant = V_SgSIMDPartialStore };
  269881             : 
  269882             :        /* the generated cast function */
  269883             :       /*! \brief Casts pointer from base class to derived class */
  269884             :           ROSE_DLL_API friend       SgSIMDPartialStore* isSgSIMDPartialStore(       SgNode * s );
  269885             : 
  269886             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  269887             :           ROSE_DLL_API friend const SgSIMDPartialStore* isSgSIMDPartialStore( const SgNode * s );
  269888             : 
  269889             :      // ******************************************
  269890             :      // * Memory Pool / New / Delete
  269891             :      // ******************************************
  269892             : 
  269893             :      public:
  269894             :           /// \private
  269895             :           static const unsigned pool_size; //
  269896             :           /// \private
  269897             :           static std::vector<unsigned char *> pools; //
  269898             :           /// \private
  269899             :           static SgSIMDPartialStore * next_node; // 
  269900             : 
  269901             :           /// \private
  269902             :           static unsigned long initializeStorageClassArray(SgSIMDPartialStoreStorageClass *); //
  269903             : 
  269904             :           /// \private
  269905             :           static void clearMemoryPool(); //
  269906             :           static void deleteMemoryPool(); //
  269907             : 
  269908             :           /// \private
  269909             :           static void extendMemoryPoolForFileIO(); //
  269910             : 
  269911             :           /// \private
  269912             :           static SgSIMDPartialStore * getPointerFromGlobalIndex(unsigned long); //
  269913             :           /// \private
  269914             :           static SgSIMDPartialStore * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  269915             : 
  269916             :           /// \private
  269917             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  269918             :           /// \private
  269919             :           static void resetValidFreepointers(); //
  269920             :           /// \private
  269921             :           static unsigned long getNumberOfLastValidPointer(); //
  269922             : 
  269923             : 
  269924             : #if defined(INLINE_FUNCTIONS)
  269925             :       /*! \brief returns pointer to newly allocated IR node */
  269926             :           inline void *operator new (size_t size);
  269927             : #else
  269928             :       /*! \brief returns pointer to newly allocated IR node */
  269929             :           void *operator new (size_t size);
  269930             : #endif
  269931             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  269932             :           void operator delete (void* pointer, size_t size);
  269933             : 
  269934             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  269935           0 :           void operator delete (void* pointer)
  269936             :              {
  269937             :             // This is the generated delete operator...
  269938           0 :                SgSIMDPartialStore::operator delete (pointer,sizeof(SgSIMDPartialStore));
  269939             :              }
  269940             : 
  269941             :       /*! \brief Returns the total number of IR nodes of this type */
  269942             :           static size_t numberOfNodes();
  269943             : 
  269944             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  269945             :           static size_t memoryUsage();
  269946             : 
  269947             :       // End of scope which started in IR nodes specific code 
  269948             :       /* */
  269949             : 
  269950             :       /* name Internal Functions
  269951             :           \brief Internal functions ... incomplete-documentation
  269952             : 
  269953             :           These functions have been made public as part of the design, but they are suggested for internal use 
  269954             :           or by particularly knowledgeable users for specialized tools or applications.
  269955             : 
  269956             :           \internal We could not make these private because they are required by user for special purposes. And 
  269957             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  269958             :          
  269959             :        */
  269960             : 
  269961             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  269962             :        // overridden in every class by *generated* implementation
  269963             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  269964             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  269965             :        // MS: 06/28/02 container of names of variables or container indices 
  269966             :        // used used in the traversal to access AST successor nodes
  269967             :        // overridden in every class by *generated* implementation
  269968             :       /*! \brief container of names of variables or container indices used used in the traversal
  269969             :           to access AST successor nodes overridden in every class by *generated* implementation */
  269970             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  269971             : 
  269972             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  269973             :        // than all the vector copies. The implementation for these functions is generated for each class.
  269974             :       /*! \brief return number of children in the traversal successor list */
  269975             :           virtual size_t get_numberOfTraversalSuccessors() override;
  269976             :       /*! \brief index-based access to traversal successors by index number */
  269977             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  269978             :       /*! \brief index-based access to traversal successors by child node */
  269979             :           virtual size_t get_childIndex(SgNode *child) override;
  269980             : 
  269981             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  269982             :        // MS: 08/16/2002 method for generating RTI information
  269983             :       /*! \brief return C++ Runtime-Time-Information */
  269984             :           virtual RTIReturnType roseRTI() override;
  269985             : #endif
  269986             :       /* */
  269987             : 
  269988             : 
  269989             : 
  269990             :       /* name Deprecated Functions
  269991             :           \brief Deprecated functions ... incomplete-documentation
  269992             : 
  269993             :           These functions have been deprecated from use.
  269994             :        */
  269995             :       /* */
  269996             : 
  269997             :       /*! returns a C style string (char*) representing the class name */
  269998             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  269999             : 
  270000             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  270001             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  270002             : #if 0
  270003             :       /*! returns old style Sage II enum values */
  270004             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  270005             :       /*! returns old style Sage II enum values */
  270006             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  270007             : #endif
  270008             :       /* */
  270009             : 
  270010             : 
  270011             : 
  270012             : 
  270013             :      public:
  270014             :       /* name Traversal Support Functions
  270015             :           \brief Traversal support functions ... incomplete-documentation
  270016             : 
  270017             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270018             :           or by particularly knowledgable users for specialized tools or applications.
  270019             :        */
  270020             :       /* */
  270021             : 
  270022             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  270023             :        // (inferior to ROSE traversal mechanism, experimental).
  270024             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  270025             :        */
  270026             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  270027             : 
  270028             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  270029             :       /*! \brief support for the classic visitor pattern done in GoF */
  270030             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  270031             : 
  270032             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  270033             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  270034             :        */
  270035             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  270036             : 
  270037             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  270038             :        */
  270039             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  270040             : 
  270041             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  270042             :        // This traversal helps support internal tools that call static member functions.
  270043             :        // note: this function operates on the memory pools.
  270044             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  270045             :        */
  270046             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  270047             :       /* */
  270048             : 
  270049             : 
  270050             :      public:
  270051             :       /* name Memory Allocation Functions
  270052             :           \brief Memory allocations functions ... incomplete-documentation
  270053             : 
  270054             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270055             :           or by particularly knowledgable users for specialized tools or applications.
  270056             :        */
  270057             :       /* */
  270058             : 
  270059             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  270060             : 
  270061             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  270062             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  270063             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  270064             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  270065             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  270066             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  270067             :           being used with the AST File I/O mechanism.
  270068             :        */
  270069             :           virtual bool isInMemoryPool() override;
  270070             : 
  270071             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  270072             : 
  270073             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  270074             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  270075             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  270076             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  270077             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  270078             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  270079             :           being used with the AST File I/O mechanism.
  270080             :        */
  270081             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  270082             : 
  270083             :       // DQ (4/30/2006): Modified to be a const function.
  270084             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  270085             : 
  270086             :           This functions is part of general support for many possible tools to operate 
  270087             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  270088             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  270089             :           less than the set of pointers used by the AST file I/O. This is part of
  270090             :           work implemented by Andreas, and support tools such as the AST graph generation.
  270091             : 
  270092             :           \warning This function can return unexpected data members and thus the 
  270093             :                    order and the number of elements is unpredicable and subject 
  270094             :                    to change.
  270095             : 
  270096             :           \returns STL vector of pairs of SgNode* and strings
  270097             :        */
  270098             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  270099             : 
  270100             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  270101             : 
  270102             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  270103             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  270104             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  270105             : 
  270106             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  270107             :                    and subject to change.
  270108             :        */
  270109             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  270110             : 
  270111             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  270112             : 
  270113             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  270114             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  270115             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  270116             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  270117             : 
  270118             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  270119             : 
  270120             :           \returns long
  270121             :        */
  270122             :           virtual long getChildIndex( SgNode* childNode ) const override;
  270123             : 
  270124             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  270125             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  270126             :       /* \brief Constructor for use by AST File I/O Mechanism
  270127             : 
  270128             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  270129             :           which obtained via fast binary file I/O from disk.
  270130             :        */
  270131             :        // SgSIMDPartialStore( SgSIMDPartialStoreStorageClass& source );
  270132             : 
  270133             : 
  270134             : 
  270135             : 
  270136             : 
  270137             :  // JH (10/24/2005): methods added to support the ast file IO
  270138             :     private:
  270139             : 
  270140             :       /* name AST Memory Allocation Support Functions
  270141             :           \brief Memory allocations support....
  270142             : 
  270143             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  270144             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  270145             :           and support the AST File I/O Mechanism.
  270146             :        */
  270147             :       /* */
  270148             : 
  270149             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  270150             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  270151             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  270152             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  270153             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  270154             :           a correspinding one in the AST_FILE_IO class!
  270155             :        */
  270156             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  270157             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  270158             :       /* \brief Typedef used for low level memory access.
  270159             :        */
  270160             :        // typedef unsigned char* TestType;
  270161             : 
  270162             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  270163             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  270164             :       /* \brief Typedef used to hold memory addresses as values.
  270165             :        */
  270166             :        // typedef unsigned long  AddressType;
  270167             : 
  270168             : 
  270169             : 
  270170             :        // necessary, to have direct access to the p_freepointer and the private methods !
  270171             :       /*! \brief friend class declaration to support AST File I/O */
  270172             :           friend class AST_FILE_IO;
  270173             : 
  270174             :       /*! \brief friend class declaration to support AST File I/O */
  270175             :           friend class SgSIMDPartialStoreStorageClass;
  270176             : 
  270177             :       /*! \brief friend class declaration to support AST File I/O */
  270178             :           friend class AstSpecificDataManagingClass;
  270179             : 
  270180             :       /*! \brief friend class declaration to support AST File I/O */
  270181             :           friend class AstSpecificDataManagingClassStorageClass;
  270182             :     public:
  270183             :       /*! \brief IR node constructor to support AST File I/O */
  270184             :           SgSIMDPartialStore( const SgSIMDPartialStoreStorageClass& source );
  270185             : 
  270186             :  // private: // JJW hack
  270187             :        /*
  270188             :           name AST Memory Allocation Support Variables
  270189             :           Memory allocations support variables 
  270190             : 
  270191             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  270192             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  270193             :           and support the AST File I/O Mechanism.
  270194             :        */
  270195             :       /* */
  270196             : 
  270197             :     public:
  270198             : 
  270199             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  270200             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  270201             :       // virtual SgNode* addRegExpAttribute();
  270202             :       /*! \brief Support for AST matching using regular expression.
  270203             : 
  270204             :           This support is incomplete and the subject of current research to define 
  270205             :           RegEx trees to support inexact matching.
  270206             :        */
  270207             :           SgSIMDPartialStore* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  270208             : 
  270209             : // *** COMMON CODE SECTION ENDS HERE ***
  270210             : 
  270211             : 
  270212             : // End of memberFunctionString
  270213             : // Start of memberFunctionString
  270214             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  270215             : 
  270216             :      // the generated cast function
  270217             :      // friend ROSE_DLL_API SgSIMDPartialStore* isSgSIMDPartialStore ( SgNode* s );
  270218             : 
  270219             :           typedef SgBinaryOp base_node_type;
  270220             : 
  270221             : 
  270222             : // End of memberFunctionString
  270223             : // Start of memberFunctionString
  270224             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  270225             : 
  270226             :           void post_construction_initialization() override;
  270227             : 
  270228             : 
  270229             : // End of memberFunctionString
  270230             : // Start of memberFunctionString
  270231             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  270232             : 
  270233           0 :           int precedence() const override { return 16; }
  270234             : 
  270235             : 
  270236             : // End of memberFunctionString
  270237             : 
  270238             : 
  270239             :      public: 
  270240             :          virtual ~SgSIMDPartialStore();
  270241             : 
  270242             : 
  270243             :      public: 
  270244             :          SgSIMDPartialStore(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  270245             :          SgSIMDPartialStore(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  270246             : 
  270247             :     protected:
  270248             : 
  270249             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDPartialStore>;
  270250             : 
  270251             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270252             : 
  270253             : 
  270254             :    };
  270255             : #endif
  270256             : 
  270257             : // postdeclarations for SgSIMDPartialStore
  270258             : 
  270259             : /* #line 270260 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270260             : 
  270261             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  270262             : 
  270263             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270264             : 
  270265             : 
  270266             : /* #line 270267 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270267             : 
  270268             : 
  270269             : 
  270270             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270271             : 
  270272             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  270273             : //      This code is automatically generated for each 
  270274             : //      terminal and non-terminal within the defined 
  270275             : //      grammar.  There is a simple way to change the 
  270276             : //      code to fix bugs etc.  See the ROSE README file
  270277             : //      for directions.
  270278             : 
  270279             : // tps: (02/22/2010): Adding DLL export requirements
  270280             : #include "rosedll.h"
  270281             : 
  270282             : // predeclarations for SgSIMDScalarStore
  270283             : 
  270284             : /* #line 270285 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270285             : 
  270286             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  270287             : 
  270288             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270289             : 
  270290             : #if 1
  270291             : // Class Definition for SgSIMDScalarStore
  270292             : class ROSE_DLL_API SgSIMDScalarStore  : public SgBinaryOp
  270293             :    {
  270294             :      public:
  270295             : 
  270296             : 
  270297             : /* #line 270298 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270298             : 
  270299             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  270300             : // Start of memberFunctionString
  270301             : /* #line 9596 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  270302             : 
  270303             : 
  270304             : 
  270305             : // End of memberFunctionString
  270306             : // Start of memberFunctionString
  270307             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  270308             : 
  270309             : // *** COMMON CODE SECTION BEGINS HERE ***
  270310             : 
  270311             :     public:
  270312             : 
  270313             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  270314             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  270315             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  270316             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  270317             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  270318             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  270319             : 
  270320             :       /*! \brief returns a string representing the class name */
  270321             :           virtual std::string class_name() const override;
  270322             : 
  270323             :       /*! \brief returns new style SageIII enum values */
  270324             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  270325             : 
  270326             :       /*! \brief static variant value */
  270327             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  270328             :        // static const VariantT static_variant = V_SgSIMDScalarStore;
  270329             :           enum { static_variant = V_SgSIMDScalarStore };
  270330             : 
  270331             :        /* the generated cast function */
  270332             :       /*! \brief Casts pointer from base class to derived class */
  270333             :           ROSE_DLL_API friend       SgSIMDScalarStore* isSgSIMDScalarStore(       SgNode * s );
  270334             : 
  270335             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  270336             :           ROSE_DLL_API friend const SgSIMDScalarStore* isSgSIMDScalarStore( const SgNode * s );
  270337             : 
  270338             :      // ******************************************
  270339             :      // * Memory Pool / New / Delete
  270340             :      // ******************************************
  270341             : 
  270342             :      public:
  270343             :           /// \private
  270344             :           static const unsigned pool_size; //
  270345             :           /// \private
  270346             :           static std::vector<unsigned char *> pools; //
  270347             :           /// \private
  270348             :           static SgSIMDScalarStore * next_node; // 
  270349             : 
  270350             :           /// \private
  270351             :           static unsigned long initializeStorageClassArray(SgSIMDScalarStoreStorageClass *); //
  270352             : 
  270353             :           /// \private
  270354             :           static void clearMemoryPool(); //
  270355             :           static void deleteMemoryPool(); //
  270356             : 
  270357             :           /// \private
  270358             :           static void extendMemoryPoolForFileIO(); //
  270359             : 
  270360             :           /// \private
  270361             :           static SgSIMDScalarStore * getPointerFromGlobalIndex(unsigned long); //
  270362             :           /// \private
  270363             :           static SgSIMDScalarStore * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  270364             : 
  270365             :           /// \private
  270366             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  270367             :           /// \private
  270368             :           static void resetValidFreepointers(); //
  270369             :           /// \private
  270370             :           static unsigned long getNumberOfLastValidPointer(); //
  270371             : 
  270372             : 
  270373             : #if defined(INLINE_FUNCTIONS)
  270374             :       /*! \brief returns pointer to newly allocated IR node */
  270375             :           inline void *operator new (size_t size);
  270376             : #else
  270377             :       /*! \brief returns pointer to newly allocated IR node */
  270378             :           void *operator new (size_t size);
  270379             : #endif
  270380             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  270381             :           void operator delete (void* pointer, size_t size);
  270382             : 
  270383             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  270384           0 :           void operator delete (void* pointer)
  270385             :              {
  270386             :             // This is the generated delete operator...
  270387           0 :                SgSIMDScalarStore::operator delete (pointer,sizeof(SgSIMDScalarStore));
  270388             :              }
  270389             : 
  270390             :       /*! \brief Returns the total number of IR nodes of this type */
  270391             :           static size_t numberOfNodes();
  270392             : 
  270393             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  270394             :           static size_t memoryUsage();
  270395             : 
  270396             :       // End of scope which started in IR nodes specific code 
  270397             :       /* */
  270398             : 
  270399             :       /* name Internal Functions
  270400             :           \brief Internal functions ... incomplete-documentation
  270401             : 
  270402             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270403             :           or by particularly knowledgeable users for specialized tools or applications.
  270404             : 
  270405             :           \internal We could not make these private because they are required by user for special purposes. And 
  270406             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  270407             :          
  270408             :        */
  270409             : 
  270410             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  270411             :        // overridden in every class by *generated* implementation
  270412             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  270413             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  270414             :        // MS: 06/28/02 container of names of variables or container indices 
  270415             :        // used used in the traversal to access AST successor nodes
  270416             :        // overridden in every class by *generated* implementation
  270417             :       /*! \brief container of names of variables or container indices used used in the traversal
  270418             :           to access AST successor nodes overridden in every class by *generated* implementation */
  270419             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  270420             : 
  270421             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  270422             :        // than all the vector copies. The implementation for these functions is generated for each class.
  270423             :       /*! \brief return number of children in the traversal successor list */
  270424             :           virtual size_t get_numberOfTraversalSuccessors() override;
  270425             :       /*! \brief index-based access to traversal successors by index number */
  270426             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  270427             :       /*! \brief index-based access to traversal successors by child node */
  270428             :           virtual size_t get_childIndex(SgNode *child) override;
  270429             : 
  270430             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  270431             :        // MS: 08/16/2002 method for generating RTI information
  270432             :       /*! \brief return C++ Runtime-Time-Information */
  270433             :           virtual RTIReturnType roseRTI() override;
  270434             : #endif
  270435             :       /* */
  270436             : 
  270437             : 
  270438             : 
  270439             :       /* name Deprecated Functions
  270440             :           \brief Deprecated functions ... incomplete-documentation
  270441             : 
  270442             :           These functions have been deprecated from use.
  270443             :        */
  270444             :       /* */
  270445             : 
  270446             :       /*! returns a C style string (char*) representing the class name */
  270447             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  270448             : 
  270449             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  270450             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  270451             : #if 0
  270452             :       /*! returns old style Sage II enum values */
  270453             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  270454             :       /*! returns old style Sage II enum values */
  270455             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  270456             : #endif
  270457             :       /* */
  270458             : 
  270459             : 
  270460             : 
  270461             : 
  270462             :      public:
  270463             :       /* name Traversal Support Functions
  270464             :           \brief Traversal support functions ... incomplete-documentation
  270465             : 
  270466             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270467             :           or by particularly knowledgable users for specialized tools or applications.
  270468             :        */
  270469             :       /* */
  270470             : 
  270471             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  270472             :        // (inferior to ROSE traversal mechanism, experimental).
  270473             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  270474             :        */
  270475             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  270476             : 
  270477             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  270478             :       /*! \brief support for the classic visitor pattern done in GoF */
  270479             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  270480             : 
  270481             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  270482             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  270483             :        */
  270484             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  270485             : 
  270486             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  270487             :        */
  270488             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  270489             : 
  270490             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  270491             :        // This traversal helps support internal tools that call static member functions.
  270492             :        // note: this function operates on the memory pools.
  270493             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  270494             :        */
  270495             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  270496             :       /* */
  270497             : 
  270498             : 
  270499             :      public:
  270500             :       /* name Memory Allocation Functions
  270501             :           \brief Memory allocations functions ... incomplete-documentation
  270502             : 
  270503             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270504             :           or by particularly knowledgable users for specialized tools or applications.
  270505             :        */
  270506             :       /* */
  270507             : 
  270508             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  270509             : 
  270510             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  270511             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  270512             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  270513             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  270514             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  270515             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  270516             :           being used with the AST File I/O mechanism.
  270517             :        */
  270518             :           virtual bool isInMemoryPool() override;
  270519             : 
  270520             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  270521             : 
  270522             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  270523             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  270524             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  270525             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  270526             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  270527             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  270528             :           being used with the AST File I/O mechanism.
  270529             :        */
  270530             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  270531             : 
  270532             :       // DQ (4/30/2006): Modified to be a const function.
  270533             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  270534             : 
  270535             :           This functions is part of general support for many possible tools to operate 
  270536             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  270537             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  270538             :           less than the set of pointers used by the AST file I/O. This is part of
  270539             :           work implemented by Andreas, and support tools such as the AST graph generation.
  270540             : 
  270541             :           \warning This function can return unexpected data members and thus the 
  270542             :                    order and the number of elements is unpredicable and subject 
  270543             :                    to change.
  270544             : 
  270545             :           \returns STL vector of pairs of SgNode* and strings
  270546             :        */
  270547             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  270548             : 
  270549             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  270550             : 
  270551             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  270552             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  270553             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  270554             : 
  270555             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  270556             :                    and subject to change.
  270557             :        */
  270558             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  270559             : 
  270560             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  270561             : 
  270562             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  270563             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  270564             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  270565             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  270566             : 
  270567             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  270568             : 
  270569             :           \returns long
  270570             :        */
  270571             :           virtual long getChildIndex( SgNode* childNode ) const override;
  270572             : 
  270573             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  270574             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  270575             :       /* \brief Constructor for use by AST File I/O Mechanism
  270576             : 
  270577             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  270578             :           which obtained via fast binary file I/O from disk.
  270579             :        */
  270580             :        // SgSIMDScalarStore( SgSIMDScalarStoreStorageClass& source );
  270581             : 
  270582             : 
  270583             : 
  270584             : 
  270585             : 
  270586             :  // JH (10/24/2005): methods added to support the ast file IO
  270587             :     private:
  270588             : 
  270589             :       /* name AST Memory Allocation Support Functions
  270590             :           \brief Memory allocations support....
  270591             : 
  270592             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  270593             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  270594             :           and support the AST File I/O Mechanism.
  270595             :        */
  270596             :       /* */
  270597             : 
  270598             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  270599             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  270600             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  270601             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  270602             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  270603             :           a correspinding one in the AST_FILE_IO class!
  270604             :        */
  270605             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  270606             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  270607             :       /* \brief Typedef used for low level memory access.
  270608             :        */
  270609             :        // typedef unsigned char* TestType;
  270610             : 
  270611             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  270612             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  270613             :       /* \brief Typedef used to hold memory addresses as values.
  270614             :        */
  270615             :        // typedef unsigned long  AddressType;
  270616             : 
  270617             : 
  270618             : 
  270619             :        // necessary, to have direct access to the p_freepointer and the private methods !
  270620             :       /*! \brief friend class declaration to support AST File I/O */
  270621             :           friend class AST_FILE_IO;
  270622             : 
  270623             :       /*! \brief friend class declaration to support AST File I/O */
  270624             :           friend class SgSIMDScalarStoreStorageClass;
  270625             : 
  270626             :       /*! \brief friend class declaration to support AST File I/O */
  270627             :           friend class AstSpecificDataManagingClass;
  270628             : 
  270629             :       /*! \brief friend class declaration to support AST File I/O */
  270630             :           friend class AstSpecificDataManagingClassStorageClass;
  270631             :     public:
  270632             :       /*! \brief IR node constructor to support AST File I/O */
  270633             :           SgSIMDScalarStore( const SgSIMDScalarStoreStorageClass& source );
  270634             : 
  270635             :  // private: // JJW hack
  270636             :        /*
  270637             :           name AST Memory Allocation Support Variables
  270638             :           Memory allocations support variables 
  270639             : 
  270640             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  270641             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  270642             :           and support the AST File I/O Mechanism.
  270643             :        */
  270644             :       /* */
  270645             : 
  270646             :     public:
  270647             : 
  270648             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  270649             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  270650             :       // virtual SgNode* addRegExpAttribute();
  270651             :       /*! \brief Support for AST matching using regular expression.
  270652             : 
  270653             :           This support is incomplete and the subject of current research to define 
  270654             :           RegEx trees to support inexact matching.
  270655             :        */
  270656             :           SgSIMDScalarStore* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  270657             : 
  270658             : // *** COMMON CODE SECTION ENDS HERE ***
  270659             : 
  270660             : 
  270661             : // End of memberFunctionString
  270662             : // Start of memberFunctionString
  270663             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  270664             : 
  270665             :      // the generated cast function
  270666             :      // friend ROSE_DLL_API SgSIMDScalarStore* isSgSIMDScalarStore ( SgNode* s );
  270667             : 
  270668             :           typedef SgBinaryOp base_node_type;
  270669             : 
  270670             : 
  270671             : // End of memberFunctionString
  270672             : // Start of memberFunctionString
  270673             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  270674             : 
  270675             :           void post_construction_initialization() override;
  270676             : 
  270677             : 
  270678             : // End of memberFunctionString
  270679             : // Start of memberFunctionString
  270680             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  270681             : 
  270682           0 :           int precedence() const override { return 16; }
  270683             : 
  270684             : 
  270685             : // End of memberFunctionString
  270686             : 
  270687             : 
  270688             :      public: 
  270689             :          virtual ~SgSIMDScalarStore();
  270690             : 
  270691             : 
  270692             :      public: 
  270693             :          SgSIMDScalarStore(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  270694             :          SgSIMDScalarStore(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  270695             : 
  270696             :     protected:
  270697             : 
  270698             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDScalarStore>;
  270699             : 
  270700             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270701             : 
  270702             : 
  270703             :    };
  270704             : #endif
  270705             : 
  270706             : // postdeclarations for SgSIMDScalarStore
  270707             : 
  270708             : /* #line 270709 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270709             : 
  270710             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  270711             : 
  270712             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270713             : 
  270714             : 
  270715             : /* #line 270716 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270716             : 
  270717             : 
  270718             : 
  270719             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270720             : 
  270721             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  270722             : //      This code is automatically generated for each 
  270723             : //      terminal and non-terminal within the defined 
  270724             : //      grammar.  There is a simple way to change the 
  270725             : //      code to fix bugs etc.  See the ROSE README file
  270726             : //      for directions.
  270727             : 
  270728             : // tps: (02/22/2010): Adding DLL export requirements
  270729             : #include "rosedll.h"
  270730             : 
  270731             : // predeclarations for SgSIMDGather
  270732             : 
  270733             : /* #line 270734 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270734             : 
  270735             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  270736             : 
  270737             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  270738             : 
  270739             : #if 1
  270740             : // Class Definition for SgSIMDGather
  270741             : class ROSE_DLL_API SgSIMDGather  : public SgBinaryOp
  270742             :    {
  270743             :      public:
  270744             : 
  270745             : 
  270746             : /* #line 270747 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  270747             : 
  270748             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  270749             : // Start of memberFunctionString
  270750             : /* #line 9604 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  270751             : 
  270752             : 
  270753             : 
  270754             : // End of memberFunctionString
  270755             : // Start of memberFunctionString
  270756             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  270757             : 
  270758             : // *** COMMON CODE SECTION BEGINS HERE ***
  270759             : 
  270760             :     public:
  270761             : 
  270762             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  270763             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  270764             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  270765             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  270766             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  270767             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  270768             : 
  270769             :       /*! \brief returns a string representing the class name */
  270770             :           virtual std::string class_name() const override;
  270771             : 
  270772             :       /*! \brief returns new style SageIII enum values */
  270773             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  270774             : 
  270775             :       /*! \brief static variant value */
  270776             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  270777             :        // static const VariantT static_variant = V_SgSIMDGather;
  270778             :           enum { static_variant = V_SgSIMDGather };
  270779             : 
  270780             :        /* the generated cast function */
  270781             :       /*! \brief Casts pointer from base class to derived class */
  270782             :           ROSE_DLL_API friend       SgSIMDGather* isSgSIMDGather(       SgNode * s );
  270783             : 
  270784             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  270785             :           ROSE_DLL_API friend const SgSIMDGather* isSgSIMDGather( const SgNode * s );
  270786             : 
  270787             :      // ******************************************
  270788             :      // * Memory Pool / New / Delete
  270789             :      // ******************************************
  270790             : 
  270791             :      public:
  270792             :           /// \private
  270793             :           static const unsigned pool_size; //
  270794             :           /// \private
  270795             :           static std::vector<unsigned char *> pools; //
  270796             :           /// \private
  270797             :           static SgSIMDGather * next_node; // 
  270798             : 
  270799             :           /// \private
  270800             :           static unsigned long initializeStorageClassArray(SgSIMDGatherStorageClass *); //
  270801             : 
  270802             :           /// \private
  270803             :           static void clearMemoryPool(); //
  270804             :           static void deleteMemoryPool(); //
  270805             : 
  270806             :           /// \private
  270807             :           static void extendMemoryPoolForFileIO(); //
  270808             : 
  270809             :           /// \private
  270810             :           static SgSIMDGather * getPointerFromGlobalIndex(unsigned long); //
  270811             :           /// \private
  270812             :           static SgSIMDGather * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  270813             : 
  270814             :           /// \private
  270815             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  270816             :           /// \private
  270817             :           static void resetValidFreepointers(); //
  270818             :           /// \private
  270819             :           static unsigned long getNumberOfLastValidPointer(); //
  270820             : 
  270821             : 
  270822             : #if defined(INLINE_FUNCTIONS)
  270823             :       /*! \brief returns pointer to newly allocated IR node */
  270824             :           inline void *operator new (size_t size);
  270825             : #else
  270826             :       /*! \brief returns pointer to newly allocated IR node */
  270827             :           void *operator new (size_t size);
  270828             : #endif
  270829             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  270830             :           void operator delete (void* pointer, size_t size);
  270831             : 
  270832             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  270833           0 :           void operator delete (void* pointer)
  270834             :              {
  270835             :             // This is the generated delete operator...
  270836           0 :                SgSIMDGather::operator delete (pointer,sizeof(SgSIMDGather));
  270837             :              }
  270838             : 
  270839             :       /*! \brief Returns the total number of IR nodes of this type */
  270840             :           static size_t numberOfNodes();
  270841             : 
  270842             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  270843             :           static size_t memoryUsage();
  270844             : 
  270845             :       // End of scope which started in IR nodes specific code 
  270846             :       /* */
  270847             : 
  270848             :       /* name Internal Functions
  270849             :           \brief Internal functions ... incomplete-documentation
  270850             : 
  270851             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270852             :           or by particularly knowledgeable users for specialized tools or applications.
  270853             : 
  270854             :           \internal We could not make these private because they are required by user for special purposes. And 
  270855             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  270856             :          
  270857             :        */
  270858             : 
  270859             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  270860             :        // overridden in every class by *generated* implementation
  270861             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  270862             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  270863             :        // MS: 06/28/02 container of names of variables or container indices 
  270864             :        // used used in the traversal to access AST successor nodes
  270865             :        // overridden in every class by *generated* implementation
  270866             :       /*! \brief container of names of variables or container indices used used in the traversal
  270867             :           to access AST successor nodes overridden in every class by *generated* implementation */
  270868             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  270869             : 
  270870             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  270871             :        // than all the vector copies. The implementation for these functions is generated for each class.
  270872             :       /*! \brief return number of children in the traversal successor list */
  270873             :           virtual size_t get_numberOfTraversalSuccessors() override;
  270874             :       /*! \brief index-based access to traversal successors by index number */
  270875             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  270876             :       /*! \brief index-based access to traversal successors by child node */
  270877             :           virtual size_t get_childIndex(SgNode *child) override;
  270878             : 
  270879             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  270880             :        // MS: 08/16/2002 method for generating RTI information
  270881             :       /*! \brief return C++ Runtime-Time-Information */
  270882             :           virtual RTIReturnType roseRTI() override;
  270883             : #endif
  270884             :       /* */
  270885             : 
  270886             : 
  270887             : 
  270888             :       /* name Deprecated Functions
  270889             :           \brief Deprecated functions ... incomplete-documentation
  270890             : 
  270891             :           These functions have been deprecated from use.
  270892             :        */
  270893             :       /* */
  270894             : 
  270895             :       /*! returns a C style string (char*) representing the class name */
  270896             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  270897             : 
  270898             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  270899             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  270900             : #if 0
  270901             :       /*! returns old style Sage II enum values */
  270902             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  270903             :       /*! returns old style Sage II enum values */
  270904             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  270905             : #endif
  270906             :       /* */
  270907             : 
  270908             : 
  270909             : 
  270910             : 
  270911             :      public:
  270912             :       /* name Traversal Support Functions
  270913             :           \brief Traversal support functions ... incomplete-documentation
  270914             : 
  270915             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270916             :           or by particularly knowledgable users for specialized tools or applications.
  270917             :        */
  270918             :       /* */
  270919             : 
  270920             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  270921             :        // (inferior to ROSE traversal mechanism, experimental).
  270922             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  270923             :        */
  270924             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  270925             : 
  270926             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  270927             :       /*! \brief support for the classic visitor pattern done in GoF */
  270928             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  270929             : 
  270930             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  270931             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  270932             :        */
  270933             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  270934             : 
  270935             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  270936             :        */
  270937             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  270938             : 
  270939             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  270940             :        // This traversal helps support internal tools that call static member functions.
  270941             :        // note: this function operates on the memory pools.
  270942             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  270943             :        */
  270944             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  270945             :       /* */
  270946             : 
  270947             : 
  270948             :      public:
  270949             :       /* name Memory Allocation Functions
  270950             :           \brief Memory allocations functions ... incomplete-documentation
  270951             : 
  270952             :           These functions have been made public as part of the design, but they are suggested for internal use 
  270953             :           or by particularly knowledgable users for specialized tools or applications.
  270954             :        */
  270955             :       /* */
  270956             : 
  270957             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  270958             : 
  270959             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  270960             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  270961             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  270962             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  270963             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  270964             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  270965             :           being used with the AST File I/O mechanism.
  270966             :        */
  270967             :           virtual bool isInMemoryPool() override;
  270968             : 
  270969             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  270970             : 
  270971             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  270972             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  270973             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  270974             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  270975             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  270976             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  270977             :           being used with the AST File I/O mechanism.
  270978             :        */
  270979             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  270980             : 
  270981             :       // DQ (4/30/2006): Modified to be a const function.
  270982             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  270983             : 
  270984             :           This functions is part of general support for many possible tools to operate 
  270985             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  270986             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  270987             :           less than the set of pointers used by the AST file I/O. This is part of
  270988             :           work implemented by Andreas, and support tools such as the AST graph generation.
  270989             : 
  270990             :           \warning This function can return unexpected data members and thus the 
  270991             :                    order and the number of elements is unpredicable and subject 
  270992             :                    to change.
  270993             : 
  270994             :           \returns STL vector of pairs of SgNode* and strings
  270995             :        */
  270996             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  270997             : 
  270998             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  270999             : 
  271000             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  271001             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  271002             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  271003             : 
  271004             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  271005             :                    and subject to change.
  271006             :        */
  271007             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  271008             : 
  271009             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  271010             : 
  271011             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  271012             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  271013             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  271014             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  271015             : 
  271016             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  271017             : 
  271018             :           \returns long
  271019             :        */
  271020             :           virtual long getChildIndex( SgNode* childNode ) const override;
  271021             : 
  271022             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  271023             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271024             :       /* \brief Constructor for use by AST File I/O Mechanism
  271025             : 
  271026             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  271027             :           which obtained via fast binary file I/O from disk.
  271028             :        */
  271029             :        // SgSIMDGather( SgSIMDGatherStorageClass& source );
  271030             : 
  271031             : 
  271032             : 
  271033             : 
  271034             : 
  271035             :  // JH (10/24/2005): methods added to support the ast file IO
  271036             :     private:
  271037             : 
  271038             :       /* name AST Memory Allocation Support Functions
  271039             :           \brief Memory allocations support....
  271040             : 
  271041             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  271042             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  271043             :           and support the AST File I/O Mechanism.
  271044             :        */
  271045             :       /* */
  271046             : 
  271047             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  271048             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  271049             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  271050             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  271051             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  271052             :           a correspinding one in the AST_FILE_IO class!
  271053             :        */
  271054             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  271055             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271056             :       /* \brief Typedef used for low level memory access.
  271057             :        */
  271058             :        // typedef unsigned char* TestType;
  271059             : 
  271060             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  271061             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271062             :       /* \brief Typedef used to hold memory addresses as values.
  271063             :        */
  271064             :        // typedef unsigned long  AddressType;
  271065             : 
  271066             : 
  271067             : 
  271068             :        // necessary, to have direct access to the p_freepointer and the private methods !
  271069             :       /*! \brief friend class declaration to support AST File I/O */
  271070             :           friend class AST_FILE_IO;
  271071             : 
  271072             :       /*! \brief friend class declaration to support AST File I/O */
  271073             :           friend class SgSIMDGatherStorageClass;
  271074             : 
  271075             :       /*! \brief friend class declaration to support AST File I/O */
  271076             :           friend class AstSpecificDataManagingClass;
  271077             : 
  271078             :       /*! \brief friend class declaration to support AST File I/O */
  271079             :           friend class AstSpecificDataManagingClassStorageClass;
  271080             :     public:
  271081             :       /*! \brief IR node constructor to support AST File I/O */
  271082             :           SgSIMDGather( const SgSIMDGatherStorageClass& source );
  271083             : 
  271084             :  // private: // JJW hack
  271085             :        /*
  271086             :           name AST Memory Allocation Support Variables
  271087             :           Memory allocations support variables 
  271088             : 
  271089             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  271090             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  271091             :           and support the AST File I/O Mechanism.
  271092             :        */
  271093             :       /* */
  271094             : 
  271095             :     public:
  271096             : 
  271097             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  271098             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  271099             :       // virtual SgNode* addRegExpAttribute();
  271100             :       /*! \brief Support for AST matching using regular expression.
  271101             : 
  271102             :           This support is incomplete and the subject of current research to define 
  271103             :           RegEx trees to support inexact matching.
  271104             :        */
  271105             :           SgSIMDGather* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  271106             : 
  271107             : // *** COMMON CODE SECTION ENDS HERE ***
  271108             : 
  271109             : 
  271110             : // End of memberFunctionString
  271111             : // Start of memberFunctionString
  271112             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  271113             : 
  271114             :      // the generated cast function
  271115             :      // friend ROSE_DLL_API SgSIMDGather* isSgSIMDGather ( SgNode* s );
  271116             : 
  271117             :           typedef SgBinaryOp base_node_type;
  271118             : 
  271119             : 
  271120             : // End of memberFunctionString
  271121             : // Start of memberFunctionString
  271122             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  271123             : 
  271124             :           void post_construction_initialization() override;
  271125             : 
  271126             : 
  271127             : // End of memberFunctionString
  271128             : // Start of memberFunctionString
  271129             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  271130             : 
  271131           0 :           int precedence() const override { return 16; }
  271132             : 
  271133             : 
  271134             : // End of memberFunctionString
  271135             : 
  271136             : 
  271137             :      public: 
  271138             :          virtual ~SgSIMDGather();
  271139             : 
  271140             : 
  271141             :      public: 
  271142             :          SgSIMDGather(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  271143             :          SgSIMDGather(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  271144             : 
  271145             :     protected:
  271146             : 
  271147             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDGather>;
  271148             : 
  271149             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271150             : 
  271151             : 
  271152             :    };
  271153             : #endif
  271154             : 
  271155             : // postdeclarations for SgSIMDGather
  271156             : 
  271157             : /* #line 271158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271158             : 
  271159             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  271160             : 
  271161             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271162             : 
  271163             : 
  271164             : /* #line 271165 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271165             : 
  271166             : 
  271167             : 
  271168             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271169             : 
  271170             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  271171             : //      This code is automatically generated for each 
  271172             : //      terminal and non-terminal within the defined 
  271173             : //      grammar.  There is a simple way to change the 
  271174             : //      code to fix bugs etc.  See the ROSE README file
  271175             : //      for directions.
  271176             : 
  271177             : // tps: (02/22/2010): Adding DLL export requirements
  271178             : #include "rosedll.h"
  271179             : 
  271180             : // predeclarations for SgSIMDExplicitGather
  271181             : 
  271182             : /* #line 271183 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271183             : 
  271184             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  271185             : 
  271186             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271187             : 
  271188             : #if 1
  271189             : // Class Definition for SgSIMDExplicitGather
  271190             : class ROSE_DLL_API SgSIMDExplicitGather  : public SgBinaryOp
  271191             :    {
  271192             :      public:
  271193             : 
  271194             : 
  271195             : /* #line 271196 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271196             : 
  271197             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  271198             : // Start of memberFunctionString
  271199             : /* #line 9612 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  271200             : 
  271201             : 
  271202             : 
  271203             : // End of memberFunctionString
  271204             : // Start of memberFunctionString
  271205             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  271206             : 
  271207             : // *** COMMON CODE SECTION BEGINS HERE ***
  271208             : 
  271209             :     public:
  271210             : 
  271211             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  271212             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  271213             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  271214             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  271215             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  271216             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  271217             : 
  271218             :       /*! \brief returns a string representing the class name */
  271219             :           virtual std::string class_name() const override;
  271220             : 
  271221             :       /*! \brief returns new style SageIII enum values */
  271222             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  271223             : 
  271224             :       /*! \brief static variant value */
  271225             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  271226             :        // static const VariantT static_variant = V_SgSIMDExplicitGather;
  271227             :           enum { static_variant = V_SgSIMDExplicitGather };
  271228             : 
  271229             :        /* the generated cast function */
  271230             :       /*! \brief Casts pointer from base class to derived class */
  271231             :           ROSE_DLL_API friend       SgSIMDExplicitGather* isSgSIMDExplicitGather(       SgNode * s );
  271232             : 
  271233             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  271234             :           ROSE_DLL_API friend const SgSIMDExplicitGather* isSgSIMDExplicitGather( const SgNode * s );
  271235             : 
  271236             :      // ******************************************
  271237             :      // * Memory Pool / New / Delete
  271238             :      // ******************************************
  271239             : 
  271240             :      public:
  271241             :           /// \private
  271242             :           static const unsigned pool_size; //
  271243             :           /// \private
  271244             :           static std::vector<unsigned char *> pools; //
  271245             :           /// \private
  271246             :           static SgSIMDExplicitGather * next_node; // 
  271247             : 
  271248             :           /// \private
  271249             :           static unsigned long initializeStorageClassArray(SgSIMDExplicitGatherStorageClass *); //
  271250             : 
  271251             :           /// \private
  271252             :           static void clearMemoryPool(); //
  271253             :           static void deleteMemoryPool(); //
  271254             : 
  271255             :           /// \private
  271256             :           static void extendMemoryPoolForFileIO(); //
  271257             : 
  271258             :           /// \private
  271259             :           static SgSIMDExplicitGather * getPointerFromGlobalIndex(unsigned long); //
  271260             :           /// \private
  271261             :           static SgSIMDExplicitGather * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  271262             : 
  271263             :           /// \private
  271264             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  271265             :           /// \private
  271266             :           static void resetValidFreepointers(); //
  271267             :           /// \private
  271268             :           static unsigned long getNumberOfLastValidPointer(); //
  271269             : 
  271270             : 
  271271             : #if defined(INLINE_FUNCTIONS)
  271272             :       /*! \brief returns pointer to newly allocated IR node */
  271273             :           inline void *operator new (size_t size);
  271274             : #else
  271275             :       /*! \brief returns pointer to newly allocated IR node */
  271276             :           void *operator new (size_t size);
  271277             : #endif
  271278             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  271279             :           void operator delete (void* pointer, size_t size);
  271280             : 
  271281             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  271282           0 :           void operator delete (void* pointer)
  271283             :              {
  271284             :             // This is the generated delete operator...
  271285           0 :                SgSIMDExplicitGather::operator delete (pointer,sizeof(SgSIMDExplicitGather));
  271286             :              }
  271287             : 
  271288             :       /*! \brief Returns the total number of IR nodes of this type */
  271289             :           static size_t numberOfNodes();
  271290             : 
  271291             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  271292             :           static size_t memoryUsage();
  271293             : 
  271294             :       // End of scope which started in IR nodes specific code 
  271295             :       /* */
  271296             : 
  271297             :       /* name Internal Functions
  271298             :           \brief Internal functions ... incomplete-documentation
  271299             : 
  271300             :           These functions have been made public as part of the design, but they are suggested for internal use 
  271301             :           or by particularly knowledgeable users for specialized tools or applications.
  271302             : 
  271303             :           \internal We could not make these private because they are required by user for special purposes. And 
  271304             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  271305             :          
  271306             :        */
  271307             : 
  271308             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  271309             :        // overridden in every class by *generated* implementation
  271310             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  271311             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  271312             :        // MS: 06/28/02 container of names of variables or container indices 
  271313             :        // used used in the traversal to access AST successor nodes
  271314             :        // overridden in every class by *generated* implementation
  271315             :       /*! \brief container of names of variables or container indices used used in the traversal
  271316             :           to access AST successor nodes overridden in every class by *generated* implementation */
  271317             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  271318             : 
  271319             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  271320             :        // than all the vector copies. The implementation for these functions is generated for each class.
  271321             :       /*! \brief return number of children in the traversal successor list */
  271322             :           virtual size_t get_numberOfTraversalSuccessors() override;
  271323             :       /*! \brief index-based access to traversal successors by index number */
  271324             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  271325             :       /*! \brief index-based access to traversal successors by child node */
  271326             :           virtual size_t get_childIndex(SgNode *child) override;
  271327             : 
  271328             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  271329             :        // MS: 08/16/2002 method for generating RTI information
  271330             :       /*! \brief return C++ Runtime-Time-Information */
  271331             :           virtual RTIReturnType roseRTI() override;
  271332             : #endif
  271333             :       /* */
  271334             : 
  271335             : 
  271336             : 
  271337             :       /* name Deprecated Functions
  271338             :           \brief Deprecated functions ... incomplete-documentation
  271339             : 
  271340             :           These functions have been deprecated from use.
  271341             :        */
  271342             :       /* */
  271343             : 
  271344             :       /*! returns a C style string (char*) representing the class name */
  271345             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  271346             : 
  271347             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  271348             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  271349             : #if 0
  271350             :       /*! returns old style Sage II enum values */
  271351             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  271352             :       /*! returns old style Sage II enum values */
  271353             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  271354             : #endif
  271355             :       /* */
  271356             : 
  271357             : 
  271358             : 
  271359             : 
  271360             :      public:
  271361             :       /* name Traversal Support Functions
  271362             :           \brief Traversal support functions ... incomplete-documentation
  271363             : 
  271364             :           These functions have been made public as part of the design, but they are suggested for internal use 
  271365             :           or by particularly knowledgable users for specialized tools or applications.
  271366             :        */
  271367             :       /* */
  271368             : 
  271369             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  271370             :        // (inferior to ROSE traversal mechanism, experimental).
  271371             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  271372             :        */
  271373             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  271374             : 
  271375             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  271376             :       /*! \brief support for the classic visitor pattern done in GoF */
  271377             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  271378             : 
  271379             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  271380             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  271381             :        */
  271382             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  271383             : 
  271384             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  271385             :        */
  271386             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  271387             : 
  271388             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  271389             :        // This traversal helps support internal tools that call static member functions.
  271390             :        // note: this function operates on the memory pools.
  271391             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  271392             :        */
  271393             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  271394             :       /* */
  271395             : 
  271396             : 
  271397             :      public:
  271398             :       /* name Memory Allocation Functions
  271399             :           \brief Memory allocations functions ... incomplete-documentation
  271400             : 
  271401             :           These functions have been made public as part of the design, but they are suggested for internal use 
  271402             :           or by particularly knowledgable users for specialized tools or applications.
  271403             :        */
  271404             :       /* */
  271405             : 
  271406             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  271407             : 
  271408             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  271409             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  271410             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  271411             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  271412             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  271413             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  271414             :           being used with the AST File I/O mechanism.
  271415             :        */
  271416             :           virtual bool isInMemoryPool() override;
  271417             : 
  271418             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  271419             : 
  271420             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  271421             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  271422             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  271423             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  271424             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  271425             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  271426             :           being used with the AST File I/O mechanism.
  271427             :        */
  271428             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  271429             : 
  271430             :       // DQ (4/30/2006): Modified to be a const function.
  271431             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  271432             : 
  271433             :           This functions is part of general support for many possible tools to operate 
  271434             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  271435             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  271436             :           less than the set of pointers used by the AST file I/O. This is part of
  271437             :           work implemented by Andreas, and support tools such as the AST graph generation.
  271438             : 
  271439             :           \warning This function can return unexpected data members and thus the 
  271440             :                    order and the number of elements is unpredicable and subject 
  271441             :                    to change.
  271442             : 
  271443             :           \returns STL vector of pairs of SgNode* and strings
  271444             :        */
  271445             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  271446             : 
  271447             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  271448             : 
  271449             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  271450             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  271451             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  271452             : 
  271453             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  271454             :                    and subject to change.
  271455             :        */
  271456             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  271457             : 
  271458             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  271459             : 
  271460             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  271461             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  271462             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  271463             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  271464             : 
  271465             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  271466             : 
  271467             :           \returns long
  271468             :        */
  271469             :           virtual long getChildIndex( SgNode* childNode ) const override;
  271470             : 
  271471             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  271472             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271473             :       /* \brief Constructor for use by AST File I/O Mechanism
  271474             : 
  271475             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  271476             :           which obtained via fast binary file I/O from disk.
  271477             :        */
  271478             :        // SgSIMDExplicitGather( SgSIMDExplicitGatherStorageClass& source );
  271479             : 
  271480             : 
  271481             : 
  271482             : 
  271483             : 
  271484             :  // JH (10/24/2005): methods added to support the ast file IO
  271485             :     private:
  271486             : 
  271487             :       /* name AST Memory Allocation Support Functions
  271488             :           \brief Memory allocations support....
  271489             : 
  271490             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  271491             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  271492             :           and support the AST File I/O Mechanism.
  271493             :        */
  271494             :       /* */
  271495             : 
  271496             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  271497             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  271498             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  271499             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  271500             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  271501             :           a correspinding one in the AST_FILE_IO class!
  271502             :        */
  271503             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  271504             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271505             :       /* \brief Typedef used for low level memory access.
  271506             :        */
  271507             :        // typedef unsigned char* TestType;
  271508             : 
  271509             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  271510             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271511             :       /* \brief Typedef used to hold memory addresses as values.
  271512             :        */
  271513             :        // typedef unsigned long  AddressType;
  271514             : 
  271515             : 
  271516             : 
  271517             :        // necessary, to have direct access to the p_freepointer and the private methods !
  271518             :       /*! \brief friend class declaration to support AST File I/O */
  271519             :           friend class AST_FILE_IO;
  271520             : 
  271521             :       /*! \brief friend class declaration to support AST File I/O */
  271522             :           friend class SgSIMDExplicitGatherStorageClass;
  271523             : 
  271524             :       /*! \brief friend class declaration to support AST File I/O */
  271525             :           friend class AstSpecificDataManagingClass;
  271526             : 
  271527             :       /*! \brief friend class declaration to support AST File I/O */
  271528             :           friend class AstSpecificDataManagingClassStorageClass;
  271529             :     public:
  271530             :       /*! \brief IR node constructor to support AST File I/O */
  271531             :           SgSIMDExplicitGather( const SgSIMDExplicitGatherStorageClass& source );
  271532             : 
  271533             :  // private: // JJW hack
  271534             :        /*
  271535             :           name AST Memory Allocation Support Variables
  271536             :           Memory allocations support variables 
  271537             : 
  271538             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  271539             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  271540             :           and support the AST File I/O Mechanism.
  271541             :        */
  271542             :       /* */
  271543             : 
  271544             :     public:
  271545             : 
  271546             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  271547             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  271548             :       // virtual SgNode* addRegExpAttribute();
  271549             :       /*! \brief Support for AST matching using regular expression.
  271550             : 
  271551             :           This support is incomplete and the subject of current research to define 
  271552             :           RegEx trees to support inexact matching.
  271553             :        */
  271554             :           SgSIMDExplicitGather* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  271555             : 
  271556             : // *** COMMON CODE SECTION ENDS HERE ***
  271557             : 
  271558             : 
  271559             : // End of memberFunctionString
  271560             : // Start of memberFunctionString
  271561             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  271562             : 
  271563             :      // the generated cast function
  271564             :      // friend ROSE_DLL_API SgSIMDExplicitGather* isSgSIMDExplicitGather ( SgNode* s );
  271565             : 
  271566             :           typedef SgBinaryOp base_node_type;
  271567             : 
  271568             : 
  271569             : // End of memberFunctionString
  271570             : // Start of memberFunctionString
  271571             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  271572             : 
  271573             :           void post_construction_initialization() override;
  271574             : 
  271575             : 
  271576             : // End of memberFunctionString
  271577             : // Start of memberFunctionString
  271578             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  271579             : 
  271580           0 :           int precedence() const override { return 16; }
  271581             : 
  271582             : 
  271583             : // End of memberFunctionString
  271584             : 
  271585             : 
  271586             :      public: 
  271587             :          virtual ~SgSIMDExplicitGather();
  271588             : 
  271589             : 
  271590             :      public: 
  271591             :          SgSIMDExplicitGather(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  271592             :          SgSIMDExplicitGather(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  271593             : 
  271594             :     protected:
  271595             : 
  271596             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDExplicitGather>;
  271597             : 
  271598             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271599             : 
  271600             : 
  271601             :    };
  271602             : #endif
  271603             : 
  271604             : // postdeclarations for SgSIMDExplicitGather
  271605             : 
  271606             : /* #line 271607 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271607             : 
  271608             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  271609             : 
  271610             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271611             : 
  271612             : 
  271613             : /* #line 271614 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271614             : 
  271615             : 
  271616             : 
  271617             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271618             : 
  271619             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  271620             : //      This code is automatically generated for each 
  271621             : //      terminal and non-terminal within the defined 
  271622             : //      grammar.  There is a simple way to change the 
  271623             : //      code to fix bugs etc.  See the ROSE README file
  271624             : //      for directions.
  271625             : 
  271626             : // tps: (02/22/2010): Adding DLL export requirements
  271627             : #include "rosedll.h"
  271628             : 
  271629             : // predeclarations for SgSIMDScatter
  271630             : 
  271631             : /* #line 271632 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271632             : 
  271633             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  271634             : 
  271635             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  271636             : 
  271637             : #if 1
  271638             : // Class Definition for SgSIMDScatter
  271639             : class ROSE_DLL_API SgSIMDScatter  : public SgBinaryOp
  271640             :    {
  271641             :      public:
  271642             : 
  271643             : 
  271644             : /* #line 271645 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  271645             : 
  271646             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  271647             : // Start of memberFunctionString
  271648             : /* #line 9620 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  271649             : 
  271650             : 
  271651             : 
  271652             : // End of memberFunctionString
  271653             : // Start of memberFunctionString
  271654             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  271655             : 
  271656             : // *** COMMON CODE SECTION BEGINS HERE ***
  271657             : 
  271658             :     public:
  271659             : 
  271660             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  271661             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  271662             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  271663             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  271664             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  271665             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  271666             : 
  271667             :       /*! \brief returns a string representing the class name */
  271668             :           virtual std::string class_name() const override;
  271669             : 
  271670             :       /*! \brief returns new style SageIII enum values */
  271671             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  271672             : 
  271673             :       /*! \brief static variant value */
  271674             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  271675             :        // static const VariantT static_variant = V_SgSIMDScatter;
  271676             :           enum { static_variant = V_SgSIMDScatter };
  271677             : 
  271678             :        /* the generated cast function */
  271679             :       /*! \brief Casts pointer from base class to derived class */
  271680             :           ROSE_DLL_API friend       SgSIMDScatter* isSgSIMDScatter(       SgNode * s );
  271681             : 
  271682             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  271683             :           ROSE_DLL_API friend const SgSIMDScatter* isSgSIMDScatter( const SgNode * s );
  271684             : 
  271685             :      // ******************************************
  271686             :      // * Memory Pool / New / Delete
  271687             :      // ******************************************
  271688             : 
  271689             :      public:
  271690             :           /// \private
  271691             :           static const unsigned pool_size; //
  271692             :           /// \private
  271693             :           static std::vector<unsigned char *> pools; //
  271694             :           /// \private
  271695             :           static SgSIMDScatter * next_node; // 
  271696             : 
  271697             :           /// \private
  271698             :           static unsigned long initializeStorageClassArray(SgSIMDScatterStorageClass *); //
  271699             : 
  271700             :           /// \private
  271701             :           static void clearMemoryPool(); //
  271702             :           static void deleteMemoryPool(); //
  271703             : 
  271704             :           /// \private
  271705             :           static void extendMemoryPoolForFileIO(); //
  271706             : 
  271707             :           /// \private
  271708             :           static SgSIMDScatter * getPointerFromGlobalIndex(unsigned long); //
  271709             :           /// \private
  271710             :           static SgSIMDScatter * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  271711             : 
  271712             :           /// \private
  271713             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  271714             :           /// \private
  271715             :           static void resetValidFreepointers(); //
  271716             :           /// \private
  271717             :           static unsigned long getNumberOfLastValidPointer(); //
  271718             : 
  271719             : 
  271720             : #if defined(INLINE_FUNCTIONS)
  271721             :       /*! \brief returns pointer to newly allocated IR node */
  271722             :           inline void *operator new (size_t size);
  271723             : #else
  271724             :       /*! \brief returns pointer to newly allocated IR node */
  271725             :           void *operator new (size_t size);
  271726             : #endif
  271727             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  271728             :           void operator delete (void* pointer, size_t size);
  271729             : 
  271730             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  271731           0 :           void operator delete (void* pointer)
  271732             :              {
  271733             :             // This is the generated delete operator...
  271734           0 :                SgSIMDScatter::operator delete (pointer,sizeof(SgSIMDScatter));
  271735             :              }
  271736             : 
  271737             :       /*! \brief Returns the total number of IR nodes of this type */
  271738             :           static size_t numberOfNodes();
  271739             : 
  271740             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  271741             :           static size_t memoryUsage();
  271742             : 
  271743             :       // End of scope which started in IR nodes specific code 
  271744             :       /* */
  271745             : 
  271746             :       /* name Internal Functions
  271747             :           \brief Internal functions ... incomplete-documentation
  271748             : 
  271749             :           These functions have been made public as part of the design, but they are suggested for internal use 
  271750             :           or by particularly knowledgeable users for specialized tools or applications.
  271751             : 
  271752             :           \internal We could not make these private because they are required by user for special purposes. And 
  271753             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  271754             :          
  271755             :        */
  271756             : 
  271757             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  271758             :        // overridden in every class by *generated* implementation
  271759             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  271760             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  271761             :        // MS: 06/28/02 container of names of variables or container indices 
  271762             :        // used used in the traversal to access AST successor nodes
  271763             :        // overridden in every class by *generated* implementation
  271764             :       /*! \brief container of names of variables or container indices used used in the traversal
  271765             :           to access AST successor nodes overridden in every class by *generated* implementation */
  271766             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  271767             : 
  271768             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  271769             :        // than all the vector copies. The implementation for these functions is generated for each class.
  271770             :       /*! \brief return number of children in the traversal successor list */
  271771             :           virtual size_t get_numberOfTraversalSuccessors() override;
  271772             :       /*! \brief index-based access to traversal successors by index number */
  271773             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  271774             :       /*! \brief index-based access to traversal successors by child node */
  271775             :           virtual size_t get_childIndex(SgNode *child) override;
  271776             : 
  271777             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  271778             :        // MS: 08/16/2002 method for generating RTI information
  271779             :       /*! \brief return C++ Runtime-Time-Information */
  271780             :           virtual RTIReturnType roseRTI() override;
  271781             : #endif
  271782             :       /* */
  271783             : 
  271784             : 
  271785             : 
  271786             :       /* name Deprecated Functions
  271787             :           \brief Deprecated functions ... incomplete-documentation
  271788             : 
  271789             :           These functions have been deprecated from use.
  271790             :        */
  271791             :       /* */
  271792             : 
  271793             :       /*! returns a C style string (char*) representing the class name */
  271794             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  271795             : 
  271796             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  271797             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  271798             : #if 0
  271799             :       /*! returns old style Sage II enum values */
  271800             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  271801             :       /*! returns old style Sage II enum values */
  271802             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  271803             : #endif
  271804             :       /* */
  271805             : 
  271806             : 
  271807             : 
  271808             : 
  271809             :      public:
  271810             :       /* name Traversal Support Functions
  271811             :           \brief Traversal support functions ... incomplete-documentation
  271812             : 
  271813             :           These functions have been made public as part of the design, but they are suggested for internal use 
  271814             :           or by particularly knowledgable users for specialized tools or applications.
  271815             :        */
  271816             :       /* */
  271817             : 
  271818             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  271819             :        // (inferior to ROSE traversal mechanism, experimental).
  271820             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  271821             :        */
  271822             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  271823             : 
  271824             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  271825             :       /*! \brief support for the classic visitor pattern done in GoF */
  271826             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  271827             : 
  271828             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  271829             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  271830             :        */
  271831             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  271832             : 
  271833             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  271834             :        */
  271835             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  271836             : 
  271837             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  271838             :        // This traversal helps support internal tools that call static member functions.
  271839             :        // note: this function operates on the memory pools.
  271840             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  271841             :        */
  271842             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  271843             :       /* */
  271844             : 
  271845             : 
  271846             :      public:
  271847             :       /* name Memory Allocation Functions
  271848             :           \brief Memory allocations functions ... incomplete-documentation
  271849             : 
  271850             :           These functions have been made public as part of the design, but they are suggested for internal use 
  271851             :           or by particularly knowledgable users for specialized tools or applications.
  271852             :        */
  271853             :       /* */
  271854             : 
  271855             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  271856             : 
  271857             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  271858             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  271859             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  271860             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  271861             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  271862             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  271863             :           being used with the AST File I/O mechanism.
  271864             :        */
  271865             :           virtual bool isInMemoryPool() override;
  271866             : 
  271867             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  271868             : 
  271869             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  271870             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  271871             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  271872             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  271873             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  271874             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  271875             :           being used with the AST File I/O mechanism.
  271876             :        */
  271877             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  271878             : 
  271879             :       // DQ (4/30/2006): Modified to be a const function.
  271880             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  271881             : 
  271882             :           This functions is part of general support for many possible tools to operate 
  271883             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  271884             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  271885             :           less than the set of pointers used by the AST file I/O. This is part of
  271886             :           work implemented by Andreas, and support tools such as the AST graph generation.
  271887             : 
  271888             :           \warning This function can return unexpected data members and thus the 
  271889             :                    order and the number of elements is unpredicable and subject 
  271890             :                    to change.
  271891             : 
  271892             :           \returns STL vector of pairs of SgNode* and strings
  271893             :        */
  271894             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  271895             : 
  271896             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  271897             : 
  271898             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  271899             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  271900             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  271901             : 
  271902             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  271903             :                    and subject to change.
  271904             :        */
  271905             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  271906             : 
  271907             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  271908             : 
  271909             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  271910             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  271911             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  271912             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  271913             : 
  271914             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  271915             : 
  271916             :           \returns long
  271917             :        */
  271918             :           virtual long getChildIndex( SgNode* childNode ) const override;
  271919             : 
  271920             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  271921             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271922             :       /* \brief Constructor for use by AST File I/O Mechanism
  271923             : 
  271924             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  271925             :           which obtained via fast binary file I/O from disk.
  271926             :        */
  271927             :        // SgSIMDScatter( SgSIMDScatterStorageClass& source );
  271928             : 
  271929             : 
  271930             : 
  271931             : 
  271932             : 
  271933             :  // JH (10/24/2005): methods added to support the ast file IO
  271934             :     private:
  271935             : 
  271936             :       /* name AST Memory Allocation Support Functions
  271937             :           \brief Memory allocations support....
  271938             : 
  271939             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  271940             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  271941             :           and support the AST File I/O Mechanism.
  271942             :        */
  271943             :       /* */
  271944             : 
  271945             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  271946             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  271947             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  271948             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  271949             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  271950             :           a correspinding one in the AST_FILE_IO class!
  271951             :        */
  271952             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  271953             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271954             :       /* \brief Typedef used for low level memory access.
  271955             :        */
  271956             :        // typedef unsigned char* TestType;
  271957             : 
  271958             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  271959             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  271960             :       /* \brief Typedef used to hold memory addresses as values.
  271961             :        */
  271962             :        // typedef unsigned long  AddressType;
  271963             : 
  271964             : 
  271965             : 
  271966             :        // necessary, to have direct access to the p_freepointer and the private methods !
  271967             :       /*! \brief friend class declaration to support AST File I/O */
  271968             :           friend class AST_FILE_IO;
  271969             : 
  271970             :       /*! \brief friend class declaration to support AST File I/O */
  271971             :           friend class SgSIMDScatterStorageClass;
  271972             : 
  271973             :       /*! \brief friend class declaration to support AST File I/O */
  271974             :           friend class AstSpecificDataManagingClass;
  271975             : 
  271976             :       /*! \brief friend class declaration to support AST File I/O */
  271977             :           friend class AstSpecificDataManagingClassStorageClass;
  271978             :     public:
  271979             :       /*! \brief IR node constructor to support AST File I/O */
  271980             :           SgSIMDScatter( const SgSIMDScatterStorageClass& source );
  271981             : 
  271982             :  // private: // JJW hack
  271983             :        /*
  271984             :           name AST Memory Allocation Support Variables
  271985             :           Memory allocations support variables 
  271986             : 
  271987             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  271988             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  271989             :           and support the AST File I/O Mechanism.
  271990             :        */
  271991             :       /* */
  271992             : 
  271993             :     public:
  271994             : 
  271995             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  271996             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  271997             :       // virtual SgNode* addRegExpAttribute();
  271998             :       /*! \brief Support for AST matching using regular expression.
  271999             : 
  272000             :           This support is incomplete and the subject of current research to define 
  272001             :           RegEx trees to support inexact matching.
  272002             :        */
  272003             :           SgSIMDScatter* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  272004             : 
  272005             : // *** COMMON CODE SECTION ENDS HERE ***
  272006             : 
  272007             : 
  272008             : // End of memberFunctionString
  272009             : // Start of memberFunctionString
  272010             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  272011             : 
  272012             :      // the generated cast function
  272013             :      // friend ROSE_DLL_API SgSIMDScatter* isSgSIMDScatter ( SgNode* s );
  272014             : 
  272015             :           typedef SgBinaryOp base_node_type;
  272016             : 
  272017             : 
  272018             : // End of memberFunctionString
  272019             : // Start of memberFunctionString
  272020             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272021             : 
  272022             :           void post_construction_initialization() override;
  272023             : 
  272024             : 
  272025             : // End of memberFunctionString
  272026             : // Start of memberFunctionString
  272027             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272028             : 
  272029           0 :           int precedence() const override { return 16; }
  272030             : 
  272031             : 
  272032             : // End of memberFunctionString
  272033             : 
  272034             : 
  272035             :      public: 
  272036             :          virtual ~SgSIMDScatter();
  272037             : 
  272038             : 
  272039             :      public: 
  272040             :          SgSIMDScatter(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand_i = NULL, SgExpression* rhs_operand_i = NULL, SgType* expression_type = NULL); 
  272041             :          SgSIMDScatter(SgExpression* lhs_operand_i, SgExpression* rhs_operand_i, SgType* expression_type); 
  272042             : 
  272043             :     protected:
  272044             : 
  272045             :     friend struct Rose::Traits::generated::describe_node_t<SgSIMDScatter>;
  272046             : 
  272047             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272048             : 
  272049             : 
  272050             :    };
  272051             : #endif
  272052             : 
  272053             : // postdeclarations for SgSIMDScatter
  272054             : 
  272055             : /* #line 272056 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272056             : 
  272057             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  272058             : 
  272059             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272060             : 
  272061             : 
  272062             : /* #line 272063 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272063             : 
  272064             : 
  272065             : 
  272066             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272067             : 
  272068             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  272069             : //      This code is automatically generated for each 
  272070             : //      terminal and non-terminal within the defined 
  272071             : //      grammar.  There is a simple way to change the 
  272072             : //      code to fix bugs etc.  See the ROSE README file
  272073             : //      for directions.
  272074             : 
  272075             : // tps: (02/22/2010): Adding DLL export requirements
  272076             : #include "rosedll.h"
  272077             : 
  272078             : // predeclarations for SgExprListExp
  272079             : 
  272080             : /* #line 272081 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272081             : 
  272082             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  272083             : 
  272084             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272085             : 
  272086             : #if 1
  272087             : // Class Definition for SgExprListExp
  272088             : class ROSE_DLL_API SgExprListExp  : public SgExpression
  272089             :    {
  272090             :      public:
  272091             : 
  272092             : 
  272093             : /* #line 272094 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272094             : 
  272095             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  272096             : // Start of memberFunctionString
  272097             : /* #line 260 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272098             : 
  272099             : 
  272100             :           SgExpressionPtrList& get_expressions();
  272101             :           const SgExpressionPtrList& get_expressions() const;
  272102             :           void set_expressions(SgExpressionPtrList e_list);
  272103             : 
  272104             : /* #line 196 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272105             : 
  272106             :           void append_expression(SgExpression* what);
  272107             :        // void insert_expression(const SgExpression::iterator & where, SgExpression* what);
  272108             :        // void insert_expression(const SgExpressionPtrList::iterator & where, SgExpression* what);
  272109             : 
  272110             : 
  272111             : 
  272112             :           void prepend_expression(SgExpression *what);
  272113             : 
  272114             :           bool empty() const ROSE_DEPRECATED_FUNCTION;
  272115             : 
  272116             :           //SgExpression* get_first() const ROSE_DEPRECATED_FUNCTION;
  272117             :           //SgExpression* get_end() const ROSE_DEPRECATED_FUNCTION;
  272118             :           //int get_index(SgExpression*) const ROSE_DEPRECATED_FUNCTION;
  272119             : 
  272120             :         // void insert_expression(const SgExpressionPtrList::iterator &, SgExpression*);
  272121             :         // void insert_expression( SgExpression*, SgExpression*, int);
  272122             : 
  272123             :           int replace_expression(SgExpression *o, SgExpression *n) override ROSE_DEPRECATED_FUNCTION;
  272124             : 
  272125             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  272126             :           virtual unsigned int cfgIndexForEnd() const override;
  272127             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  272128             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  272129             : #endif
  272130             : 
  272131             :        // get lvalue
  272132             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  272133             : 
  272134             : 
  272135             : // End of memberFunctionString
  272136             : // Start of memberFunctionString
  272137             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  272138             : 
  272139             : // *** COMMON CODE SECTION BEGINS HERE ***
  272140             : 
  272141             :     public:
  272142             : 
  272143             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  272144             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  272145             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  272146             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  272147             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  272148             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  272149             : 
  272150             :       /*! \brief returns a string representing the class name */
  272151             :           virtual std::string class_name() const override;
  272152             : 
  272153             :       /*! \brief returns new style SageIII enum values */
  272154             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  272155             : 
  272156             :       /*! \brief static variant value */
  272157             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  272158             :        // static const VariantT static_variant = V_SgExprListExp;
  272159             :           enum { static_variant = V_SgExprListExp };
  272160             : 
  272161             :        /* the generated cast function */
  272162             :       /*! \brief Casts pointer from base class to derived class */
  272163             :           ROSE_DLL_API friend       SgExprListExp* isSgExprListExp(       SgNode * s );
  272164             : 
  272165             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  272166             :           ROSE_DLL_API friend const SgExprListExp* isSgExprListExp( const SgNode * s );
  272167             : 
  272168             :      // ******************************************
  272169             :      // * Memory Pool / New / Delete
  272170             :      // ******************************************
  272171             : 
  272172             :      public:
  272173             :           /// \private
  272174             :           static const unsigned pool_size; //
  272175             :           /// \private
  272176             :           static std::vector<unsigned char *> pools; //
  272177             :           /// \private
  272178             :           static SgExprListExp * next_node; // 
  272179             : 
  272180             :           /// \private
  272181             :           static unsigned long initializeStorageClassArray(SgExprListExpStorageClass *); //
  272182             : 
  272183             :           /// \private
  272184             :           static void clearMemoryPool(); //
  272185             :           static void deleteMemoryPool(); //
  272186             : 
  272187             :           /// \private
  272188             :           static void extendMemoryPoolForFileIO(); //
  272189             : 
  272190             :           /// \private
  272191             :           static SgExprListExp * getPointerFromGlobalIndex(unsigned long); //
  272192             :           /// \private
  272193             :           static SgExprListExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  272194             : 
  272195             :           /// \private
  272196             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  272197             :           /// \private
  272198             :           static void resetValidFreepointers(); //
  272199             :           /// \private
  272200             :           static unsigned long getNumberOfLastValidPointer(); //
  272201             : 
  272202             : 
  272203             : #if defined(INLINE_FUNCTIONS)
  272204             :       /*! \brief returns pointer to newly allocated IR node */
  272205             :           inline void *operator new (size_t size);
  272206             : #else
  272207             :       /*! \brief returns pointer to newly allocated IR node */
  272208             :           void *operator new (size_t size);
  272209             : #endif
  272210             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  272211             :           void operator delete (void* pointer, size_t size);
  272212             : 
  272213             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  272214        8125 :           void operator delete (void* pointer)
  272215             :              {
  272216             :             // This is the generated delete operator...
  272217        8125 :                SgExprListExp::operator delete (pointer,sizeof(SgExprListExp));
  272218             :              }
  272219             : 
  272220             :       /*! \brief Returns the total number of IR nodes of this type */
  272221             :           static size_t numberOfNodes();
  272222             : 
  272223             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  272224             :           static size_t memoryUsage();
  272225             : 
  272226             :       // End of scope which started in IR nodes specific code 
  272227             :       /* */
  272228             : 
  272229             :       /* name Internal Functions
  272230             :           \brief Internal functions ... incomplete-documentation
  272231             : 
  272232             :           These functions have been made public as part of the design, but they are suggested for internal use 
  272233             :           or by particularly knowledgeable users for specialized tools or applications.
  272234             : 
  272235             :           \internal We could not make these private because they are required by user for special purposes. And 
  272236             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  272237             :          
  272238             :        */
  272239             : 
  272240             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  272241             :        // overridden in every class by *generated* implementation
  272242             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  272243             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  272244             :        // MS: 06/28/02 container of names of variables or container indices 
  272245             :        // used used in the traversal to access AST successor nodes
  272246             :        // overridden in every class by *generated* implementation
  272247             :       /*! \brief container of names of variables or container indices used used in the traversal
  272248             :           to access AST successor nodes overridden in every class by *generated* implementation */
  272249             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  272250             : 
  272251             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  272252             :        // than all the vector copies. The implementation for these functions is generated for each class.
  272253             :       /*! \brief return number of children in the traversal successor list */
  272254             :           virtual size_t get_numberOfTraversalSuccessors() override;
  272255             :       /*! \brief index-based access to traversal successors by index number */
  272256             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  272257             :       /*! \brief index-based access to traversal successors by child node */
  272258             :           virtual size_t get_childIndex(SgNode *child) override;
  272259             : 
  272260             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  272261             :        // MS: 08/16/2002 method for generating RTI information
  272262             :       /*! \brief return C++ Runtime-Time-Information */
  272263             :           virtual RTIReturnType roseRTI() override;
  272264             : #endif
  272265             :       /* */
  272266             : 
  272267             : 
  272268             : 
  272269             :       /* name Deprecated Functions
  272270             :           \brief Deprecated functions ... incomplete-documentation
  272271             : 
  272272             :           These functions have been deprecated from use.
  272273             :        */
  272274             :       /* */
  272275             : 
  272276             :       /*! returns a C style string (char*) representing the class name */
  272277             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  272278             : 
  272279             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  272280             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  272281             : #if 0
  272282             :       /*! returns old style Sage II enum values */
  272283             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  272284             :       /*! returns old style Sage II enum values */
  272285             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  272286             : #endif
  272287             :       /* */
  272288             : 
  272289             : 
  272290             : 
  272291             : 
  272292             :      public:
  272293             :       /* name Traversal Support Functions
  272294             :           \brief Traversal support functions ... incomplete-documentation
  272295             : 
  272296             :           These functions have been made public as part of the design, but they are suggested for internal use 
  272297             :           or by particularly knowledgable users for specialized tools or applications.
  272298             :        */
  272299             :       /* */
  272300             : 
  272301             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  272302             :        // (inferior to ROSE traversal mechanism, experimental).
  272303             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  272304             :        */
  272305             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  272306             : 
  272307             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  272308             :       /*! \brief support for the classic visitor pattern done in GoF */
  272309             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  272310             : 
  272311             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  272312             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  272313             :        */
  272314             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  272315             : 
  272316             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  272317             :        */
  272318             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  272319             : 
  272320             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  272321             :        // This traversal helps support internal tools that call static member functions.
  272322             :        // note: this function operates on the memory pools.
  272323             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  272324             :        */
  272325             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  272326             :       /* */
  272327             : 
  272328             : 
  272329             :      public:
  272330             :       /* name Memory Allocation Functions
  272331             :           \brief Memory allocations functions ... incomplete-documentation
  272332             : 
  272333             :           These functions have been made public as part of the design, but they are suggested for internal use 
  272334             :           or by particularly knowledgable users for specialized tools or applications.
  272335             :        */
  272336             :       /* */
  272337             : 
  272338             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  272339             : 
  272340             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  272341             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  272342             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  272343             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  272344             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  272345             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  272346             :           being used with the AST File I/O mechanism.
  272347             :        */
  272348             :           virtual bool isInMemoryPool() override;
  272349             : 
  272350             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  272351             : 
  272352             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  272353             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  272354             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  272355             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  272356             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  272357             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  272358             :           being used with the AST File I/O mechanism.
  272359             :        */
  272360             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  272361             : 
  272362             :       // DQ (4/30/2006): Modified to be a const function.
  272363             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  272364             : 
  272365             :           This functions is part of general support for many possible tools to operate 
  272366             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  272367             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  272368             :           less than the set of pointers used by the AST file I/O. This is part of
  272369             :           work implemented by Andreas, and support tools such as the AST graph generation.
  272370             : 
  272371             :           \warning This function can return unexpected data members and thus the 
  272372             :                    order and the number of elements is unpredicable and subject 
  272373             :                    to change.
  272374             : 
  272375             :           \returns STL vector of pairs of SgNode* and strings
  272376             :        */
  272377             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  272378             : 
  272379             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  272380             : 
  272381             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  272382             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  272383             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  272384             : 
  272385             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  272386             :                    and subject to change.
  272387             :        */
  272388             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  272389             : 
  272390             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  272391             : 
  272392             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  272393             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  272394             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  272395             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  272396             : 
  272397             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  272398             : 
  272399             :           \returns long
  272400             :        */
  272401             :           virtual long getChildIndex( SgNode* childNode ) const override;
  272402             : 
  272403             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  272404             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  272405             :       /* \brief Constructor for use by AST File I/O Mechanism
  272406             : 
  272407             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  272408             :           which obtained via fast binary file I/O from disk.
  272409             :        */
  272410             :        // SgExprListExp( SgExprListExpStorageClass& source );
  272411             : 
  272412             : 
  272413             : 
  272414             : 
  272415             : 
  272416             :  // JH (10/24/2005): methods added to support the ast file IO
  272417             :     private:
  272418             : 
  272419             :       /* name AST Memory Allocation Support Functions
  272420             :           \brief Memory allocations support....
  272421             : 
  272422             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  272423             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  272424             :           and support the AST File I/O Mechanism.
  272425             :        */
  272426             :       /* */
  272427             : 
  272428             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  272429             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  272430             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  272431             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  272432             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  272433             :           a correspinding one in the AST_FILE_IO class!
  272434             :        */
  272435             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  272436             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  272437             :       /* \brief Typedef used for low level memory access.
  272438             :        */
  272439             :        // typedef unsigned char* TestType;
  272440             : 
  272441             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  272442             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  272443             :       /* \brief Typedef used to hold memory addresses as values.
  272444             :        */
  272445             :        // typedef unsigned long  AddressType;
  272446             : 
  272447             : 
  272448             : 
  272449             :        // necessary, to have direct access to the p_freepointer and the private methods !
  272450             :       /*! \brief friend class declaration to support AST File I/O */
  272451             :           friend class AST_FILE_IO;
  272452             : 
  272453             :       /*! \brief friend class declaration to support AST File I/O */
  272454             :           friend class SgExprListExpStorageClass;
  272455             : 
  272456             :       /*! \brief friend class declaration to support AST File I/O */
  272457             :           friend class AstSpecificDataManagingClass;
  272458             : 
  272459             :       /*! \brief friend class declaration to support AST File I/O */
  272460             :           friend class AstSpecificDataManagingClassStorageClass;
  272461             :     public:
  272462             :       /*! \brief IR node constructor to support AST File I/O */
  272463             :           SgExprListExp( const SgExprListExpStorageClass& source );
  272464             : 
  272465             :  // private: // JJW hack
  272466             :        /*
  272467             :           name AST Memory Allocation Support Variables
  272468             :           Memory allocations support variables 
  272469             : 
  272470             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  272471             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  272472             :           and support the AST File I/O Mechanism.
  272473             :        */
  272474             :       /* */
  272475             : 
  272476             :     public:
  272477             : 
  272478             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  272479             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  272480             :       // virtual SgNode* addRegExpAttribute();
  272481             :       /*! \brief Support for AST matching using regular expression.
  272482             : 
  272483             :           This support is incomplete and the subject of current research to define 
  272484             :           RegEx trees to support inexact matching.
  272485             :        */
  272486             :           SgExprListExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  272487             : 
  272488             : // *** COMMON CODE SECTION ENDS HERE ***
  272489             : 
  272490             : 
  272491             : // End of memberFunctionString
  272492             : // Start of memberFunctionString
  272493             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  272494             : 
  272495             :      // the generated cast function
  272496             :      // friend ROSE_DLL_API SgExprListExp* isSgExprListExp ( SgNode* s );
  272497             : 
  272498             :           typedef SgExpression base_node_type;
  272499             : 
  272500             : 
  272501             : // End of memberFunctionString
  272502             : // Start of memberFunctionString
  272503             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272504             : 
  272505             :           SgType* get_type() const override;
  272506             : 
  272507             : 
  272508             : // End of memberFunctionString
  272509             : // Start of memberFunctionString
  272510             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272511             : 
  272512             :           void post_construction_initialization() override;
  272513             : 
  272514             : 
  272515             : // End of memberFunctionString
  272516             : 
  272517             : 
  272518             : 
  272519             :      public: 
  272520             :          virtual ~SgExprListExp();
  272521             : 
  272522             : 
  272523             :      public: 
  272524             :          SgExprListExp(Sg_File_Info* startOfConstruct ); 
  272525             :          SgExprListExp(); 
  272526             : 
  272527             :     protected:
  272528             : // Start of memberFunctionString
  272529             : SgExpressionPtrList p_expressions;
  272530             :           
  272531             : // End of memberFunctionString
  272532             : 
  272533             :     friend struct Rose::Traits::generated::describe_node_t<SgExprListExp>;
  272534             :     friend struct Rose::Traits::generated::describe_field_t<SgExprListExp, SgExpressionPtrList,&SgExprListExp::p_expressions>;
  272535             : 
  272536             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272537             : 
  272538             : 
  272539             :    };
  272540             : #endif
  272541             : 
  272542             : // postdeclarations for SgExprListExp
  272543             : 
  272544             : /* #line 272545 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272545             : 
  272546             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  272547             : 
  272548             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272549             : 
  272550             : 
  272551             : /* #line 272552 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272552             : 
  272553             : 
  272554             : 
  272555             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272556             : 
  272557             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  272558             : //      This code is automatically generated for each 
  272559             : //      terminal and non-terminal within the defined 
  272560             : //      grammar.  There is a simple way to change the 
  272561             : //      code to fix bugs etc.  See the ROSE README file
  272562             : //      for directions.
  272563             : 
  272564             : // tps: (02/22/2010): Adding DLL export requirements
  272565             : #include "rosedll.h"
  272566             : 
  272567             : // predeclarations for SgListExp
  272568             : 
  272569             : /* #line 272570 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272570             : 
  272571             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  272572             : 
  272573             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272574             : 
  272575             : #if 1
  272576             : // Class Definition for SgListExp
  272577             : class ROSE_DLL_API SgListExp  : public SgExprListExp
  272578             :    {
  272579             :      public:
  272580             : 
  272581             : 
  272582             : /* #line 272583 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272583             : 
  272584             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  272585             : // Start of memberFunctionString
  272586             : /* #line 1373 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272587             : 
  272588             : 
  272589             : 
  272590             : // End of memberFunctionString
  272591             : // Start of memberFunctionString
  272592             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  272593             : 
  272594             : // *** COMMON CODE SECTION BEGINS HERE ***
  272595             : 
  272596             :     public:
  272597             : 
  272598             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  272599             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  272600             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  272601             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  272602             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  272603             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  272604             : 
  272605             :       /*! \brief returns a string representing the class name */
  272606             :           virtual std::string class_name() const override;
  272607             : 
  272608             :       /*! \brief returns new style SageIII enum values */
  272609             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  272610             : 
  272611             :       /*! \brief static variant value */
  272612             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  272613             :        // static const VariantT static_variant = V_SgListExp;
  272614             :           enum { static_variant = V_SgListExp };
  272615             : 
  272616             :        /* the generated cast function */
  272617             :       /*! \brief Casts pointer from base class to derived class */
  272618             :           ROSE_DLL_API friend       SgListExp* isSgListExp(       SgNode * s );
  272619             : 
  272620             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  272621             :           ROSE_DLL_API friend const SgListExp* isSgListExp( const SgNode * s );
  272622             : 
  272623             :      // ******************************************
  272624             :      // * Memory Pool / New / Delete
  272625             :      // ******************************************
  272626             : 
  272627             :      public:
  272628             :           /// \private
  272629             :           static const unsigned pool_size; //
  272630             :           /// \private
  272631             :           static std::vector<unsigned char *> pools; //
  272632             :           /// \private
  272633             :           static SgListExp * next_node; // 
  272634             : 
  272635             :           /// \private
  272636             :           static unsigned long initializeStorageClassArray(SgListExpStorageClass *); //
  272637             : 
  272638             :           /// \private
  272639             :           static void clearMemoryPool(); //
  272640             :           static void deleteMemoryPool(); //
  272641             : 
  272642             :           /// \private
  272643             :           static void extendMemoryPoolForFileIO(); //
  272644             : 
  272645             :           /// \private
  272646             :           static SgListExp * getPointerFromGlobalIndex(unsigned long); //
  272647             :           /// \private
  272648             :           static SgListExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  272649             : 
  272650             :           /// \private
  272651             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  272652             :           /// \private
  272653             :           static void resetValidFreepointers(); //
  272654             :           /// \private
  272655             :           static unsigned long getNumberOfLastValidPointer(); //
  272656             : 
  272657             : 
  272658             : #if defined(INLINE_FUNCTIONS)
  272659             :       /*! \brief returns pointer to newly allocated IR node */
  272660             :           inline void *operator new (size_t size);
  272661             : #else
  272662             :       /*! \brief returns pointer to newly allocated IR node */
  272663             :           void *operator new (size_t size);
  272664             : #endif
  272665             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  272666             :           void operator delete (void* pointer, size_t size);
  272667             : 
  272668             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  272669           0 :           void operator delete (void* pointer)
  272670             :              {
  272671             :             // This is the generated delete operator...
  272672           0 :                SgListExp::operator delete (pointer,sizeof(SgListExp));
  272673             :              }
  272674             : 
  272675             :       /*! \brief Returns the total number of IR nodes of this type */
  272676             :           static size_t numberOfNodes();
  272677             : 
  272678             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  272679             :           static size_t memoryUsage();
  272680             : 
  272681             :       // End of scope which started in IR nodes specific code 
  272682             :       /* */
  272683             : 
  272684             :       /* name Internal Functions
  272685             :           \brief Internal functions ... incomplete-documentation
  272686             : 
  272687             :           These functions have been made public as part of the design, but they are suggested for internal use 
  272688             :           or by particularly knowledgeable users for specialized tools or applications.
  272689             : 
  272690             :           \internal We could not make these private because they are required by user for special purposes. And 
  272691             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  272692             :          
  272693             :        */
  272694             : 
  272695             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  272696             :        // overridden in every class by *generated* implementation
  272697             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  272698             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  272699             :        // MS: 06/28/02 container of names of variables or container indices 
  272700             :        // used used in the traversal to access AST successor nodes
  272701             :        // overridden in every class by *generated* implementation
  272702             :       /*! \brief container of names of variables or container indices used used in the traversal
  272703             :           to access AST successor nodes overridden in every class by *generated* implementation */
  272704             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  272705             : 
  272706             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  272707             :        // than all the vector copies. The implementation for these functions is generated for each class.
  272708             :       /*! \brief return number of children in the traversal successor list */
  272709             :           virtual size_t get_numberOfTraversalSuccessors() override;
  272710             :       /*! \brief index-based access to traversal successors by index number */
  272711             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  272712             :       /*! \brief index-based access to traversal successors by child node */
  272713             :           virtual size_t get_childIndex(SgNode *child) override;
  272714             : 
  272715             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  272716             :        // MS: 08/16/2002 method for generating RTI information
  272717             :       /*! \brief return C++ Runtime-Time-Information */
  272718             :           virtual RTIReturnType roseRTI() override;
  272719             : #endif
  272720             :       /* */
  272721             : 
  272722             : 
  272723             : 
  272724             :       /* name Deprecated Functions
  272725             :           \brief Deprecated functions ... incomplete-documentation
  272726             : 
  272727             :           These functions have been deprecated from use.
  272728             :        */
  272729             :       /* */
  272730             : 
  272731             :       /*! returns a C style string (char*) representing the class name */
  272732             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  272733             : 
  272734             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  272735             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  272736             : #if 0
  272737             :       /*! returns old style Sage II enum values */
  272738             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  272739             :       /*! returns old style Sage II enum values */
  272740             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  272741             : #endif
  272742             :       /* */
  272743             : 
  272744             : 
  272745             : 
  272746             : 
  272747             :      public:
  272748             :       /* name Traversal Support Functions
  272749             :           \brief Traversal support functions ... incomplete-documentation
  272750             : 
  272751             :           These functions have been made public as part of the design, but they are suggested for internal use 
  272752             :           or by particularly knowledgable users for specialized tools or applications.
  272753             :        */
  272754             :       /* */
  272755             : 
  272756             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  272757             :        // (inferior to ROSE traversal mechanism, experimental).
  272758             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  272759             :        */
  272760             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  272761             : 
  272762             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  272763             :       /*! \brief support for the classic visitor pattern done in GoF */
  272764             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  272765             : 
  272766             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  272767             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  272768             :        */
  272769             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  272770             : 
  272771             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  272772             :        */
  272773             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  272774             : 
  272775             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  272776             :        // This traversal helps support internal tools that call static member functions.
  272777             :        // note: this function operates on the memory pools.
  272778             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  272779             :        */
  272780             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  272781             :       /* */
  272782             : 
  272783             : 
  272784             :      public:
  272785             :       /* name Memory Allocation Functions
  272786             :           \brief Memory allocations functions ... incomplete-documentation
  272787             : 
  272788             :           These functions have been made public as part of the design, but they are suggested for internal use 
  272789             :           or by particularly knowledgable users for specialized tools or applications.
  272790             :        */
  272791             :       /* */
  272792             : 
  272793             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  272794             : 
  272795             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  272796             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  272797             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  272798             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  272799             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  272800             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  272801             :           being used with the AST File I/O mechanism.
  272802             :        */
  272803             :           virtual bool isInMemoryPool() override;
  272804             : 
  272805             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  272806             : 
  272807             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  272808             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  272809             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  272810             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  272811             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  272812             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  272813             :           being used with the AST File I/O mechanism.
  272814             :        */
  272815             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  272816             : 
  272817             :       // DQ (4/30/2006): Modified to be a const function.
  272818             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  272819             : 
  272820             :           This functions is part of general support for many possible tools to operate 
  272821             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  272822             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  272823             :           less than the set of pointers used by the AST file I/O. This is part of
  272824             :           work implemented by Andreas, and support tools such as the AST graph generation.
  272825             : 
  272826             :           \warning This function can return unexpected data members and thus the 
  272827             :                    order and the number of elements is unpredicable and subject 
  272828             :                    to change.
  272829             : 
  272830             :           \returns STL vector of pairs of SgNode* and strings
  272831             :        */
  272832             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  272833             : 
  272834             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  272835             : 
  272836             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  272837             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  272838             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  272839             : 
  272840             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  272841             :                    and subject to change.
  272842             :        */
  272843             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  272844             : 
  272845             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  272846             : 
  272847             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  272848             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  272849             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  272850             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  272851             : 
  272852             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  272853             : 
  272854             :           \returns long
  272855             :        */
  272856             :           virtual long getChildIndex( SgNode* childNode ) const override;
  272857             : 
  272858             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  272859             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  272860             :       /* \brief Constructor for use by AST File I/O Mechanism
  272861             : 
  272862             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  272863             :           which obtained via fast binary file I/O from disk.
  272864             :        */
  272865             :        // SgListExp( SgListExpStorageClass& source );
  272866             : 
  272867             : 
  272868             : 
  272869             : 
  272870             : 
  272871             :  // JH (10/24/2005): methods added to support the ast file IO
  272872             :     private:
  272873             : 
  272874             :       /* name AST Memory Allocation Support Functions
  272875             :           \brief Memory allocations support....
  272876             : 
  272877             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  272878             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  272879             :           and support the AST File I/O Mechanism.
  272880             :        */
  272881             :       /* */
  272882             : 
  272883             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  272884             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  272885             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  272886             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  272887             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  272888             :           a correspinding one in the AST_FILE_IO class!
  272889             :        */
  272890             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  272891             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  272892             :       /* \brief Typedef used for low level memory access.
  272893             :        */
  272894             :        // typedef unsigned char* TestType;
  272895             : 
  272896             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  272897             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  272898             :       /* \brief Typedef used to hold memory addresses as values.
  272899             :        */
  272900             :        // typedef unsigned long  AddressType;
  272901             : 
  272902             : 
  272903             : 
  272904             :        // necessary, to have direct access to the p_freepointer and the private methods !
  272905             :       /*! \brief friend class declaration to support AST File I/O */
  272906             :           friend class AST_FILE_IO;
  272907             : 
  272908             :       /*! \brief friend class declaration to support AST File I/O */
  272909             :           friend class SgListExpStorageClass;
  272910             : 
  272911             :       /*! \brief friend class declaration to support AST File I/O */
  272912             :           friend class AstSpecificDataManagingClass;
  272913             : 
  272914             :       /*! \brief friend class declaration to support AST File I/O */
  272915             :           friend class AstSpecificDataManagingClassStorageClass;
  272916             :     public:
  272917             :       /*! \brief IR node constructor to support AST File I/O */
  272918             :           SgListExp( const SgListExpStorageClass& source );
  272919             : 
  272920             :  // private: // JJW hack
  272921             :        /*
  272922             :           name AST Memory Allocation Support Variables
  272923             :           Memory allocations support variables 
  272924             : 
  272925             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  272926             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  272927             :           and support the AST File I/O Mechanism.
  272928             :        */
  272929             :       /* */
  272930             : 
  272931             :     public:
  272932             : 
  272933             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  272934             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  272935             :       // virtual SgNode* addRegExpAttribute();
  272936             :       /*! \brief Support for AST matching using regular expression.
  272937             : 
  272938             :           This support is incomplete and the subject of current research to define 
  272939             :           RegEx trees to support inexact matching.
  272940             :        */
  272941             :           SgListExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  272942             : 
  272943             : // *** COMMON CODE SECTION ENDS HERE ***
  272944             : 
  272945             : 
  272946             : // End of memberFunctionString
  272947             : // Start of memberFunctionString
  272948             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  272949             : 
  272950             :      // the generated cast function
  272951             :      // friend ROSE_DLL_API SgListExp* isSgListExp ( SgNode* s );
  272952             : 
  272953             :           typedef SgExprListExp base_node_type;
  272954             : 
  272955             : 
  272956             : // End of memberFunctionString
  272957             : // Start of memberFunctionString
  272958             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272959             : 
  272960             :           SgType* get_type() const override;
  272961             : 
  272962             : 
  272963             : // End of memberFunctionString
  272964             : // Start of memberFunctionString
  272965             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  272966             : 
  272967             :           void post_construction_initialization() override;
  272968             : 
  272969             : 
  272970             : // End of memberFunctionString
  272971             : 
  272972             : 
  272973             :      public: 
  272974             :          virtual ~SgListExp();
  272975             : 
  272976             : 
  272977             :      public: 
  272978             :          SgListExp(Sg_File_Info* startOfConstruct ); 
  272979             :          SgListExp(); 
  272980             : 
  272981             :     protected:
  272982             : 
  272983             :     friend struct Rose::Traits::generated::describe_node_t<SgListExp>;
  272984             : 
  272985             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272986             : 
  272987             : 
  272988             :    };
  272989             : #endif
  272990             : 
  272991             : // postdeclarations for SgListExp
  272992             : 
  272993             : /* #line 272994 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  272994             : 
  272995             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  272996             : 
  272997             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  272998             : 
  272999             : 
  273000             : /* #line 273001 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273001             : 
  273002             : 
  273003             : 
  273004             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273005             : 
  273006             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  273007             : //      This code is automatically generated for each 
  273008             : //      terminal and non-terminal within the defined 
  273009             : //      grammar.  There is a simple way to change the 
  273010             : //      code to fix bugs etc.  See the ROSE README file
  273011             : //      for directions.
  273012             : 
  273013             : // tps: (02/22/2010): Adding DLL export requirements
  273014             : #include "rosedll.h"
  273015             : 
  273016             : // predeclarations for SgTupleExp
  273017             : 
  273018             : /* #line 273019 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273019             : 
  273020             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  273021             : 
  273022             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273023             : 
  273024             : #if 1
  273025             : // Class Definition for SgTupleExp
  273026             : class ROSE_DLL_API SgTupleExp  : public SgExprListExp
  273027             :    {
  273028             :      public:
  273029             : 
  273030             : 
  273031             : /* #line 273032 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273032             : 
  273033             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  273034             : // Start of memberFunctionString
  273035             : /* #line 1370 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  273036             : 
  273037             : 
  273038             : 
  273039             : // End of memberFunctionString
  273040             : // Start of memberFunctionString
  273041             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  273042             : 
  273043             : // *** COMMON CODE SECTION BEGINS HERE ***
  273044             : 
  273045             :     public:
  273046             : 
  273047             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  273048             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  273049             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  273050             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  273051             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  273052             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  273053             : 
  273054             :       /*! \brief returns a string representing the class name */
  273055             :           virtual std::string class_name() const override;
  273056             : 
  273057             :       /*! \brief returns new style SageIII enum values */
  273058             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  273059             : 
  273060             :       /*! \brief static variant value */
  273061             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  273062             :        // static const VariantT static_variant = V_SgTupleExp;
  273063             :           enum { static_variant = V_SgTupleExp };
  273064             : 
  273065             :        /* the generated cast function */
  273066             :       /*! \brief Casts pointer from base class to derived class */
  273067             :           ROSE_DLL_API friend       SgTupleExp* isSgTupleExp(       SgNode * s );
  273068             : 
  273069             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  273070             :           ROSE_DLL_API friend const SgTupleExp* isSgTupleExp( const SgNode * s );
  273071             : 
  273072             :      // ******************************************
  273073             :      // * Memory Pool / New / Delete
  273074             :      // ******************************************
  273075             : 
  273076             :      public:
  273077             :           /// \private
  273078             :           static const unsigned pool_size; //
  273079             :           /// \private
  273080             :           static std::vector<unsigned char *> pools; //
  273081             :           /// \private
  273082             :           static SgTupleExp * next_node; // 
  273083             : 
  273084             :           /// \private
  273085             :           static unsigned long initializeStorageClassArray(SgTupleExpStorageClass *); //
  273086             : 
  273087             :           /// \private
  273088             :           static void clearMemoryPool(); //
  273089             :           static void deleteMemoryPool(); //
  273090             : 
  273091             :           /// \private
  273092             :           static void extendMemoryPoolForFileIO(); //
  273093             : 
  273094             :           /// \private
  273095             :           static SgTupleExp * getPointerFromGlobalIndex(unsigned long); //
  273096             :           /// \private
  273097             :           static SgTupleExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  273098             : 
  273099             :           /// \private
  273100             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  273101             :           /// \private
  273102             :           static void resetValidFreepointers(); //
  273103             :           /// \private
  273104             :           static unsigned long getNumberOfLastValidPointer(); //
  273105             : 
  273106             : 
  273107             : #if defined(INLINE_FUNCTIONS)
  273108             :       /*! \brief returns pointer to newly allocated IR node */
  273109             :           inline void *operator new (size_t size);
  273110             : #else
  273111             :       /*! \brief returns pointer to newly allocated IR node */
  273112             :           void *operator new (size_t size);
  273113             : #endif
  273114             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  273115             :           void operator delete (void* pointer, size_t size);
  273116             : 
  273117             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  273118           0 :           void operator delete (void* pointer)
  273119             :              {
  273120             :             // This is the generated delete operator...
  273121           0 :                SgTupleExp::operator delete (pointer,sizeof(SgTupleExp));
  273122             :              }
  273123             : 
  273124             :       /*! \brief Returns the total number of IR nodes of this type */
  273125             :           static size_t numberOfNodes();
  273126             : 
  273127             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  273128             :           static size_t memoryUsage();
  273129             : 
  273130             :       // End of scope which started in IR nodes specific code 
  273131             :       /* */
  273132             : 
  273133             :       /* name Internal Functions
  273134             :           \brief Internal functions ... incomplete-documentation
  273135             : 
  273136             :           These functions have been made public as part of the design, but they are suggested for internal use 
  273137             :           or by particularly knowledgeable users for specialized tools or applications.
  273138             : 
  273139             :           \internal We could not make these private because they are required by user for special purposes. And 
  273140             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  273141             :          
  273142             :        */
  273143             : 
  273144             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  273145             :        // overridden in every class by *generated* implementation
  273146             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  273147             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  273148             :        // MS: 06/28/02 container of names of variables or container indices 
  273149             :        // used used in the traversal to access AST successor nodes
  273150             :        // overridden in every class by *generated* implementation
  273151             :       /*! \brief container of names of variables or container indices used used in the traversal
  273152             :           to access AST successor nodes overridden in every class by *generated* implementation */
  273153             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  273154             : 
  273155             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  273156             :        // than all the vector copies. The implementation for these functions is generated for each class.
  273157             :       /*! \brief return number of children in the traversal successor list */
  273158             :           virtual size_t get_numberOfTraversalSuccessors() override;
  273159             :       /*! \brief index-based access to traversal successors by index number */
  273160             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  273161             :       /*! \brief index-based access to traversal successors by child node */
  273162             :           virtual size_t get_childIndex(SgNode *child) override;
  273163             : 
  273164             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  273165             :        // MS: 08/16/2002 method for generating RTI information
  273166             :       /*! \brief return C++ Runtime-Time-Information */
  273167             :           virtual RTIReturnType roseRTI() override;
  273168             : #endif
  273169             :       /* */
  273170             : 
  273171             : 
  273172             : 
  273173             :       /* name Deprecated Functions
  273174             :           \brief Deprecated functions ... incomplete-documentation
  273175             : 
  273176             :           These functions have been deprecated from use.
  273177             :        */
  273178             :       /* */
  273179             : 
  273180             :       /*! returns a C style string (char*) representing the class name */
  273181             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  273182             : 
  273183             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  273184             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  273185             : #if 0
  273186             :       /*! returns old style Sage II enum values */
  273187             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  273188             :       /*! returns old style Sage II enum values */
  273189             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  273190             : #endif
  273191             :       /* */
  273192             : 
  273193             : 
  273194             : 
  273195             : 
  273196             :      public:
  273197             :       /* name Traversal Support Functions
  273198             :           \brief Traversal support functions ... incomplete-documentation
  273199             : 
  273200             :           These functions have been made public as part of the design, but they are suggested for internal use 
  273201             :           or by particularly knowledgable users for specialized tools or applications.
  273202             :        */
  273203             :       /* */
  273204             : 
  273205             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  273206             :        // (inferior to ROSE traversal mechanism, experimental).
  273207             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  273208             :        */
  273209             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  273210             : 
  273211             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  273212             :       /*! \brief support for the classic visitor pattern done in GoF */
  273213             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  273214             : 
  273215             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  273216             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  273217             :        */
  273218             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  273219             : 
  273220             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  273221             :        */
  273222             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  273223             : 
  273224             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  273225             :        // This traversal helps support internal tools that call static member functions.
  273226             :        // note: this function operates on the memory pools.
  273227             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  273228             :        */
  273229             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  273230             :       /* */
  273231             : 
  273232             : 
  273233             :      public:
  273234             :       /* name Memory Allocation Functions
  273235             :           \brief Memory allocations functions ... incomplete-documentation
  273236             : 
  273237             :           These functions have been made public as part of the design, but they are suggested for internal use 
  273238             :           or by particularly knowledgable users for specialized tools or applications.
  273239             :        */
  273240             :       /* */
  273241             : 
  273242             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  273243             : 
  273244             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  273245             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  273246             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  273247             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  273248             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  273249             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  273250             :           being used with the AST File I/O mechanism.
  273251             :        */
  273252             :           virtual bool isInMemoryPool() override;
  273253             : 
  273254             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  273255             : 
  273256             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  273257             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  273258             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  273259             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  273260             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  273261             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  273262             :           being used with the AST File I/O mechanism.
  273263             :        */
  273264             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  273265             : 
  273266             :       // DQ (4/30/2006): Modified to be a const function.
  273267             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  273268             : 
  273269             :           This functions is part of general support for many possible tools to operate 
  273270             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  273271             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  273272             :           less than the set of pointers used by the AST file I/O. This is part of
  273273             :           work implemented by Andreas, and support tools such as the AST graph generation.
  273274             : 
  273275             :           \warning This function can return unexpected data members and thus the 
  273276             :                    order and the number of elements is unpredicable and subject 
  273277             :                    to change.
  273278             : 
  273279             :           \returns STL vector of pairs of SgNode* and strings
  273280             :        */
  273281             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  273282             : 
  273283             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  273284             : 
  273285             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  273286             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  273287             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  273288             : 
  273289             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  273290             :                    and subject to change.
  273291             :        */
  273292             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  273293             : 
  273294             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  273295             : 
  273296             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  273297             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  273298             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  273299             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  273300             : 
  273301             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  273302             : 
  273303             :           \returns long
  273304             :        */
  273305             :           virtual long getChildIndex( SgNode* childNode ) const override;
  273306             : 
  273307             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  273308             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  273309             :       /* \brief Constructor for use by AST File I/O Mechanism
  273310             : 
  273311             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  273312             :           which obtained via fast binary file I/O from disk.
  273313             :        */
  273314             :        // SgTupleExp( SgTupleExpStorageClass& source );
  273315             : 
  273316             : 
  273317             : 
  273318             : 
  273319             : 
  273320             :  // JH (10/24/2005): methods added to support the ast file IO
  273321             :     private:
  273322             : 
  273323             :       /* name AST Memory Allocation Support Functions
  273324             :           \brief Memory allocations support....
  273325             : 
  273326             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  273327             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  273328             :           and support the AST File I/O Mechanism.
  273329             :        */
  273330             :       /* */
  273331             : 
  273332             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  273333             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  273334             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  273335             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  273336             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  273337             :           a correspinding one in the AST_FILE_IO class!
  273338             :        */
  273339             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  273340             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  273341             :       /* \brief Typedef used for low level memory access.
  273342             :        */
  273343             :        // typedef unsigned char* TestType;
  273344             : 
  273345             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  273346             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  273347             :       /* \brief Typedef used to hold memory addresses as values.
  273348             :        */
  273349             :        // typedef unsigned long  AddressType;
  273350             : 
  273351             : 
  273352             : 
  273353             :        // necessary, to have direct access to the p_freepointer and the private methods !
  273354             :       /*! \brief friend class declaration to support AST File I/O */
  273355             :           friend class AST_FILE_IO;
  273356             : 
  273357             :       /*! \brief friend class declaration to support AST File I/O */
  273358             :           friend class SgTupleExpStorageClass;
  273359             : 
  273360             :       /*! \brief friend class declaration to support AST File I/O */
  273361             :           friend class AstSpecificDataManagingClass;
  273362             : 
  273363             :       /*! \brief friend class declaration to support AST File I/O */
  273364             :           friend class AstSpecificDataManagingClassStorageClass;
  273365             :     public:
  273366             :       /*! \brief IR node constructor to support AST File I/O */
  273367             :           SgTupleExp( const SgTupleExpStorageClass& source );
  273368             : 
  273369             :  // private: // JJW hack
  273370             :        /*
  273371             :           name AST Memory Allocation Support Variables
  273372             :           Memory allocations support variables 
  273373             : 
  273374             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  273375             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  273376             :           and support the AST File I/O Mechanism.
  273377             :        */
  273378             :       /* */
  273379             : 
  273380             :     public:
  273381             : 
  273382             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  273383             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  273384             :       // virtual SgNode* addRegExpAttribute();
  273385             :       /*! \brief Support for AST matching using regular expression.
  273386             : 
  273387             :           This support is incomplete and the subject of current research to define 
  273388             :           RegEx trees to support inexact matching.
  273389             :        */
  273390             :           SgTupleExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  273391             : 
  273392             : // *** COMMON CODE SECTION ENDS HERE ***
  273393             : 
  273394             : 
  273395             : // End of memberFunctionString
  273396             : // Start of memberFunctionString
  273397             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  273398             : 
  273399             :      // the generated cast function
  273400             :      // friend ROSE_DLL_API SgTupleExp* isSgTupleExp ( SgNode* s );
  273401             : 
  273402             :           typedef SgExprListExp base_node_type;
  273403             : 
  273404             : 
  273405             : // End of memberFunctionString
  273406             : // Start of memberFunctionString
  273407             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  273408             : 
  273409             :           SgType* get_type() const override;
  273410             : 
  273411             : 
  273412             : // End of memberFunctionString
  273413             : // Start of memberFunctionString
  273414             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  273415             : 
  273416             :           void post_construction_initialization() override;
  273417             : 
  273418             : 
  273419             : // End of memberFunctionString
  273420             : 
  273421             : 
  273422             :      public: 
  273423             :          virtual ~SgTupleExp();
  273424             : 
  273425             : 
  273426             :      public: 
  273427             :          SgTupleExp(Sg_File_Info* startOfConstruct ); 
  273428             :          SgTupleExp(); 
  273429             : 
  273430             :     protected:
  273431             : 
  273432             :     friend struct Rose::Traits::generated::describe_node_t<SgTupleExp>;
  273433             : 
  273434             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273435             : 
  273436             : 
  273437             :    };
  273438             : #endif
  273439             : 
  273440             : // postdeclarations for SgTupleExp
  273441             : 
  273442             : /* #line 273443 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273443             : 
  273444             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  273445             : 
  273446             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273447             : 
  273448             : 
  273449             : /* #line 273450 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273450             : 
  273451             : 
  273452             : 
  273453             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273454             : 
  273455             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  273456             : //      This code is automatically generated for each 
  273457             : //      terminal and non-terminal within the defined 
  273458             : //      grammar.  There is a simple way to change the 
  273459             : //      code to fix bugs etc.  See the ROSE README file
  273460             : //      for directions.
  273461             : 
  273462             : // tps: (02/22/2010): Adding DLL export requirements
  273463             : #include "rosedll.h"
  273464             : 
  273465             : // predeclarations for SgMatrixExp
  273466             : 
  273467             : /* #line 273468 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273468             : 
  273469             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  273470             : 
  273471             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273472             : 
  273473             : #if 1
  273474             : // Class Definition for SgMatrixExp
  273475             : class ROSE_DLL_API SgMatrixExp  : public SgExprListExp
  273476             :    {
  273477             :      public:
  273478             : 
  273479             : 
  273480             : /* #line 273481 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273481             : 
  273482             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  273483             : // Start of memberFunctionString
  273484             : /* #line 292 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  273485             : 
  273486             : 
  273487             : 
  273488             : // End of memberFunctionString
  273489             : // Start of memberFunctionString
  273490             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  273491             : 
  273492             : // *** COMMON CODE SECTION BEGINS HERE ***
  273493             : 
  273494             :     public:
  273495             : 
  273496             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  273497             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  273498             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  273499             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  273500             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  273501             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  273502             : 
  273503             :       /*! \brief returns a string representing the class name */
  273504             :           virtual std::string class_name() const override;
  273505             : 
  273506             :       /*! \brief returns new style SageIII enum values */
  273507             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  273508             : 
  273509             :       /*! \brief static variant value */
  273510             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  273511             :        // static const VariantT static_variant = V_SgMatrixExp;
  273512             :           enum { static_variant = V_SgMatrixExp };
  273513             : 
  273514             :        /* the generated cast function */
  273515             :       /*! \brief Casts pointer from base class to derived class */
  273516             :           ROSE_DLL_API friend       SgMatrixExp* isSgMatrixExp(       SgNode * s );
  273517             : 
  273518             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  273519             :           ROSE_DLL_API friend const SgMatrixExp* isSgMatrixExp( const SgNode * s );
  273520             : 
  273521             :      // ******************************************
  273522             :      // * Memory Pool / New / Delete
  273523             :      // ******************************************
  273524             : 
  273525             :      public:
  273526             :           /// \private
  273527             :           static const unsigned pool_size; //
  273528             :           /// \private
  273529             :           static std::vector<unsigned char *> pools; //
  273530             :           /// \private
  273531             :           static SgMatrixExp * next_node; // 
  273532             : 
  273533             :           /// \private
  273534             :           static unsigned long initializeStorageClassArray(SgMatrixExpStorageClass *); //
  273535             : 
  273536             :           /// \private
  273537             :           static void clearMemoryPool(); //
  273538             :           static void deleteMemoryPool(); //
  273539             : 
  273540             :           /// \private
  273541             :           static void extendMemoryPoolForFileIO(); //
  273542             : 
  273543             :           /// \private
  273544             :           static SgMatrixExp * getPointerFromGlobalIndex(unsigned long); //
  273545             :           /// \private
  273546             :           static SgMatrixExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  273547             : 
  273548             :           /// \private
  273549             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  273550             :           /// \private
  273551             :           static void resetValidFreepointers(); //
  273552             :           /// \private
  273553             :           static unsigned long getNumberOfLastValidPointer(); //
  273554             : 
  273555             : 
  273556             : #if defined(INLINE_FUNCTIONS)
  273557             :       /*! \brief returns pointer to newly allocated IR node */
  273558             :           inline void *operator new (size_t size);
  273559             : #else
  273560             :       /*! \brief returns pointer to newly allocated IR node */
  273561             :           void *operator new (size_t size);
  273562             : #endif
  273563             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  273564             :           void operator delete (void* pointer, size_t size);
  273565             : 
  273566             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  273567           0 :           void operator delete (void* pointer)
  273568             :              {
  273569             :             // This is the generated delete operator...
  273570           0 :                SgMatrixExp::operator delete (pointer,sizeof(SgMatrixExp));
  273571             :              }
  273572             : 
  273573             :       /*! \brief Returns the total number of IR nodes of this type */
  273574             :           static size_t numberOfNodes();
  273575             : 
  273576             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  273577             :           static size_t memoryUsage();
  273578             : 
  273579             :       // End of scope which started in IR nodes specific code 
  273580             :       /* */
  273581             : 
  273582             :       /* name Internal Functions
  273583             :           \brief Internal functions ... incomplete-documentation
  273584             : 
  273585             :           These functions have been made public as part of the design, but they are suggested for internal use 
  273586             :           or by particularly knowledgeable users for specialized tools or applications.
  273587             : 
  273588             :           \internal We could not make these private because they are required by user for special purposes. And 
  273589             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  273590             :          
  273591             :        */
  273592             : 
  273593             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  273594             :        // overridden in every class by *generated* implementation
  273595             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  273596             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  273597             :        // MS: 06/28/02 container of names of variables or container indices 
  273598             :        // used used in the traversal to access AST successor nodes
  273599             :        // overridden in every class by *generated* implementation
  273600             :       /*! \brief container of names of variables or container indices used used in the traversal
  273601             :           to access AST successor nodes overridden in every class by *generated* implementation */
  273602             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  273603             : 
  273604             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  273605             :        // than all the vector copies. The implementation for these functions is generated for each class.
  273606             :       /*! \brief return number of children in the traversal successor list */
  273607             :           virtual size_t get_numberOfTraversalSuccessors() override;
  273608             :       /*! \brief index-based access to traversal successors by index number */
  273609             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  273610             :       /*! \brief index-based access to traversal successors by child node */
  273611             :           virtual size_t get_childIndex(SgNode *child) override;
  273612             : 
  273613             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  273614             :        // MS: 08/16/2002 method for generating RTI information
  273615             :       /*! \brief return C++ Runtime-Time-Information */
  273616             :           virtual RTIReturnType roseRTI() override;
  273617             : #endif
  273618             :       /* */
  273619             : 
  273620             : 
  273621             : 
  273622             :       /* name Deprecated Functions
  273623             :           \brief Deprecated functions ... incomplete-documentation
  273624             : 
  273625             :           These functions have been deprecated from use.
  273626             :        */
  273627             :       /* */
  273628             : 
  273629             :       /*! returns a C style string (char*) representing the class name */
  273630             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  273631             : 
  273632             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  273633             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  273634             : #if 0
  273635             :       /*! returns old style Sage II enum values */
  273636             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  273637             :       /*! returns old style Sage II enum values */
  273638             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  273639             : #endif
  273640             :       /* */
  273641             : 
  273642             : 
  273643             : 
  273644             : 
  273645             :      public:
  273646             :       /* name Traversal Support Functions
  273647             :           \brief Traversal support functions ... incomplete-documentation
  273648             : 
  273649             :           These functions have been made public as part of the design, but they are suggested for internal use 
  273650             :           or by particularly knowledgable users for specialized tools or applications.
  273651             :        */
  273652             :       /* */
  273653             : 
  273654             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  273655             :        // (inferior to ROSE traversal mechanism, experimental).
  273656             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  273657             :        */
  273658             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  273659             : 
  273660             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  273661             :       /*! \brief support for the classic visitor pattern done in GoF */
  273662             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  273663             : 
  273664             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  273665             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  273666             :        */
  273667             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  273668             : 
  273669             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  273670             :        */
  273671             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  273672             : 
  273673             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  273674             :        // This traversal helps support internal tools that call static member functions.
  273675             :        // note: this function operates on the memory pools.
  273676             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  273677             :        */
  273678             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  273679             :       /* */
  273680             : 
  273681             : 
  273682             :      public:
  273683             :       /* name Memory Allocation Functions
  273684             :           \brief Memory allocations functions ... incomplete-documentation
  273685             : 
  273686             :           These functions have been made public as part of the design, but they are suggested for internal use 
  273687             :           or by particularly knowledgable users for specialized tools or applications.
  273688             :        */
  273689             :       /* */
  273690             : 
  273691             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  273692             : 
  273693             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  273694             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  273695             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  273696             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  273697             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  273698             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  273699             :           being used with the AST File I/O mechanism.
  273700             :        */
  273701             :           virtual bool isInMemoryPool() override;
  273702             : 
  273703             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  273704             : 
  273705             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  273706             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  273707             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  273708             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  273709             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  273710             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  273711             :           being used with the AST File I/O mechanism.
  273712             :        */
  273713             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  273714             : 
  273715             :       // DQ (4/30/2006): Modified to be a const function.
  273716             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  273717             : 
  273718             :           This functions is part of general support for many possible tools to operate 
  273719             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  273720             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  273721             :           less than the set of pointers used by the AST file I/O. This is part of
  273722             :           work implemented by Andreas, and support tools such as the AST graph generation.
  273723             : 
  273724             :           \warning This function can return unexpected data members and thus the 
  273725             :                    order and the number of elements is unpredicable and subject 
  273726             :                    to change.
  273727             : 
  273728             :           \returns STL vector of pairs of SgNode* and strings
  273729             :        */
  273730             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  273731             : 
  273732             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  273733             : 
  273734             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  273735             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  273736             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  273737             : 
  273738             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  273739             :                    and subject to change.
  273740             :        */
  273741             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  273742             : 
  273743             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  273744             : 
  273745             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  273746             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  273747             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  273748             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  273749             : 
  273750             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  273751             : 
  273752             :           \returns long
  273753             :        */
  273754             :           virtual long getChildIndex( SgNode* childNode ) const override;
  273755             : 
  273756             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  273757             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  273758             :       /* \brief Constructor for use by AST File I/O Mechanism
  273759             : 
  273760             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  273761             :           which obtained via fast binary file I/O from disk.
  273762             :        */
  273763             :        // SgMatrixExp( SgMatrixExpStorageClass& source );
  273764             : 
  273765             : 
  273766             : 
  273767             : 
  273768             : 
  273769             :  // JH (10/24/2005): methods added to support the ast file IO
  273770             :     private:
  273771             : 
  273772             :       /* name AST Memory Allocation Support Functions
  273773             :           \brief Memory allocations support....
  273774             : 
  273775             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  273776             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  273777             :           and support the AST File I/O Mechanism.
  273778             :        */
  273779             :       /* */
  273780             : 
  273781             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  273782             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  273783             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  273784             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  273785             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  273786             :           a correspinding one in the AST_FILE_IO class!
  273787             :        */
  273788             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  273789             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  273790             :       /* \brief Typedef used for low level memory access.
  273791             :        */
  273792             :        // typedef unsigned char* TestType;
  273793             : 
  273794             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  273795             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  273796             :       /* \brief Typedef used to hold memory addresses as values.
  273797             :        */
  273798             :        // typedef unsigned long  AddressType;
  273799             : 
  273800             : 
  273801             : 
  273802             :        // necessary, to have direct access to the p_freepointer and the private methods !
  273803             :       /*! \brief friend class declaration to support AST File I/O */
  273804             :           friend class AST_FILE_IO;
  273805             : 
  273806             :       /*! \brief friend class declaration to support AST File I/O */
  273807             :           friend class SgMatrixExpStorageClass;
  273808             : 
  273809             :       /*! \brief friend class declaration to support AST File I/O */
  273810             :           friend class AstSpecificDataManagingClass;
  273811             : 
  273812             :       /*! \brief friend class declaration to support AST File I/O */
  273813             :           friend class AstSpecificDataManagingClassStorageClass;
  273814             :     public:
  273815             :       /*! \brief IR node constructor to support AST File I/O */
  273816             :           SgMatrixExp( const SgMatrixExpStorageClass& source );
  273817             : 
  273818             :  // private: // JJW hack
  273819             :        /*
  273820             :           name AST Memory Allocation Support Variables
  273821             :           Memory allocations support variables 
  273822             : 
  273823             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  273824             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  273825             :           and support the AST File I/O Mechanism.
  273826             :        */
  273827             :       /* */
  273828             : 
  273829             :     public:
  273830             : 
  273831             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  273832             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  273833             :       // virtual SgNode* addRegExpAttribute();
  273834             :       /*! \brief Support for AST matching using regular expression.
  273835             : 
  273836             :           This support is incomplete and the subject of current research to define 
  273837             :           RegEx trees to support inexact matching.
  273838             :        */
  273839             :           SgMatrixExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  273840             : 
  273841             : // *** COMMON CODE SECTION ENDS HERE ***
  273842             : 
  273843             : 
  273844             : // End of memberFunctionString
  273845             : // Start of memberFunctionString
  273846             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  273847             : 
  273848             :      // the generated cast function
  273849             :      // friend ROSE_DLL_API SgMatrixExp* isSgMatrixExp ( SgNode* s );
  273850             : 
  273851             :           typedef SgExprListExp base_node_type;
  273852             : 
  273853             : 
  273854             : // End of memberFunctionString
  273855             : // Start of memberFunctionString
  273856             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  273857             : 
  273858             :           SgType* get_type() const override;
  273859             : 
  273860             : 
  273861             : // End of memberFunctionString
  273862             : // Start of memberFunctionString
  273863             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  273864             : 
  273865             :           void post_construction_initialization() override;
  273866             : 
  273867             : 
  273868             : // End of memberFunctionString
  273869             : 
  273870             : 
  273871             :      public: 
  273872             :          virtual ~SgMatrixExp();
  273873             : 
  273874             : 
  273875             :      public: 
  273876             :          SgMatrixExp(Sg_File_Info* startOfConstruct ); 
  273877             :          SgMatrixExp(); 
  273878             : 
  273879             :     protected:
  273880             : 
  273881             :     friend struct Rose::Traits::generated::describe_node_t<SgMatrixExp>;
  273882             : 
  273883             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273884             : 
  273885             : 
  273886             :    };
  273887             : #endif
  273888             : 
  273889             : // postdeclarations for SgMatrixExp
  273890             : 
  273891             : /* #line 273892 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273892             : 
  273893             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  273894             : 
  273895             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273896             : 
  273897             : 
  273898             : /* #line 273899 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273899             : 
  273900             : 
  273901             : 
  273902             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273903             : 
  273904             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  273905             : //      This code is automatically generated for each 
  273906             : //      terminal and non-terminal within the defined 
  273907             : //      grammar.  There is a simple way to change the 
  273908             : //      code to fix bugs etc.  See the ROSE README file
  273909             : //      for directions.
  273910             : 
  273911             : // tps: (02/22/2010): Adding DLL export requirements
  273912             : #include "rosedll.h"
  273913             : 
  273914             : // predeclarations for SgVarRefExp
  273915             : 
  273916             : /* #line 273917 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273917             : 
  273918             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  273919             : 
  273920             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  273921             : 
  273922             : #if 1
  273923             : // Class Definition for SgVarRefExp
  273924             : class ROSE_DLL_API SgVarRefExp  : public SgExpression
  273925             :    {
  273926             :      public:
  273927             : 
  273928             : 
  273929             : /* #line 273930 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  273930             : 
  273931             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  273932             : // Start of memberFunctionString
  273933             : /* #line 300 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  273934             : 
  273935             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  273936             :           virtual unsigned int cfgIndexForEnd() const override;
  273937             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  273938             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  273939             : #endif
  273940             : 
  273941             :        // DQ (11/7/2007): I think this is not used any more.
  273942             :        // DQ (10/5/2007): Added fixup function to set scopes not set properly by the ROSETTA generated copy!
  273943             :        // virtual void fixupCopy(SgNode* copy, SgCopyHelp & help) const;
  273944             : 
  273945             :        // get lvalue
  273946             :           virtual bool isDefinable() const override;
  273947             :           virtual bool isLValue() const override;
  273948             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  273949             : 
  273950             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  273951             :           int get_name_qualification_length() const override;
  273952             :           void set_name_qualification_length(int name_qualification_length) override;
  273953             : 
  273954             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  273955             :           bool get_type_elaboration_required() const override;
  273956             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  273957             : 
  273958             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  273959             :           bool get_global_qualification_required() const override;
  273960             :           void set_global_qualification_required(bool global_qualification_required) override;
  273961             : 
  273962             : 
  273963             : 
  273964             : // End of memberFunctionString
  273965             : // Start of memberFunctionString
  273966             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  273967             : 
  273968             : // *** COMMON CODE SECTION BEGINS HERE ***
  273969             : 
  273970             :     public:
  273971             : 
  273972             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  273973             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  273974             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  273975             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  273976             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  273977             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  273978             : 
  273979             :       /*! \brief returns a string representing the class name */
  273980             :           virtual std::string class_name() const override;
  273981             : 
  273982             :       /*! \brief returns new style SageIII enum values */
  273983             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  273984             : 
  273985             :       /*! \brief static variant value */
  273986             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  273987             :        // static const VariantT static_variant = V_SgVarRefExp;
  273988             :           enum { static_variant = V_SgVarRefExp };
  273989             : 
  273990             :        /* the generated cast function */
  273991             :       /*! \brief Casts pointer from base class to derived class */
  273992             :           ROSE_DLL_API friend       SgVarRefExp* isSgVarRefExp(       SgNode * s );
  273993             : 
  273994             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  273995             :           ROSE_DLL_API friend const SgVarRefExp* isSgVarRefExp( const SgNode * s );
  273996             : 
  273997             :      // ******************************************
  273998             :      // * Memory Pool / New / Delete
  273999             :      // ******************************************
  274000             : 
  274001             :      public:
  274002             :           /// \private
  274003             :           static const unsigned pool_size; //
  274004             :           /// \private
  274005             :           static std::vector<unsigned char *> pools; //
  274006             :           /// \private
  274007             :           static SgVarRefExp * next_node; // 
  274008             : 
  274009             :           /// \private
  274010             :           static unsigned long initializeStorageClassArray(SgVarRefExpStorageClass *); //
  274011             : 
  274012             :           /// \private
  274013             :           static void clearMemoryPool(); //
  274014             :           static void deleteMemoryPool(); //
  274015             : 
  274016             :           /// \private
  274017             :           static void extendMemoryPoolForFileIO(); //
  274018             : 
  274019             :           /// \private
  274020             :           static SgVarRefExp * getPointerFromGlobalIndex(unsigned long); //
  274021             :           /// \private
  274022             :           static SgVarRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  274023             : 
  274024             :           /// \private
  274025             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  274026             :           /// \private
  274027             :           static void resetValidFreepointers(); //
  274028             :           /// \private
  274029             :           static unsigned long getNumberOfLastValidPointer(); //
  274030             : 
  274031             : 
  274032             : #if defined(INLINE_FUNCTIONS)
  274033             :       /*! \brief returns pointer to newly allocated IR node */
  274034             :           inline void *operator new (size_t size);
  274035             : #else
  274036             :       /*! \brief returns pointer to newly allocated IR node */
  274037             :           void *operator new (size_t size);
  274038             : #endif
  274039             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  274040             :           void operator delete (void* pointer, size_t size);
  274041             : 
  274042             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  274043       16805 :           void operator delete (void* pointer)
  274044             :              {
  274045             :             // This is the generated delete operator...
  274046       16805 :                SgVarRefExp::operator delete (pointer,sizeof(SgVarRefExp));
  274047             :              }
  274048             : 
  274049             :       /*! \brief Returns the total number of IR nodes of this type */
  274050             :           static size_t numberOfNodes();
  274051             : 
  274052             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  274053             :           static size_t memoryUsage();
  274054             : 
  274055             :       // End of scope which started in IR nodes specific code 
  274056             :       /* */
  274057             : 
  274058             :       /* name Internal Functions
  274059             :           \brief Internal functions ... incomplete-documentation
  274060             : 
  274061             :           These functions have been made public as part of the design, but they are suggested for internal use 
  274062             :           or by particularly knowledgeable users for specialized tools or applications.
  274063             : 
  274064             :           \internal We could not make these private because they are required by user for special purposes. And 
  274065             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  274066             :          
  274067             :        */
  274068             : 
  274069             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  274070             :        // overridden in every class by *generated* implementation
  274071             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  274072             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  274073             :        // MS: 06/28/02 container of names of variables or container indices 
  274074             :        // used used in the traversal to access AST successor nodes
  274075             :        // overridden in every class by *generated* implementation
  274076             :       /*! \brief container of names of variables or container indices used used in the traversal
  274077             :           to access AST successor nodes overridden in every class by *generated* implementation */
  274078             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  274079             : 
  274080             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  274081             :        // than all the vector copies. The implementation for these functions is generated for each class.
  274082             :       /*! \brief return number of children in the traversal successor list */
  274083             :           virtual size_t get_numberOfTraversalSuccessors() override;
  274084             :       /*! \brief index-based access to traversal successors by index number */
  274085             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  274086             :       /*! \brief index-based access to traversal successors by child node */
  274087             :           virtual size_t get_childIndex(SgNode *child) override;
  274088             : 
  274089             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  274090             :        // MS: 08/16/2002 method for generating RTI information
  274091             :       /*! \brief return C++ Runtime-Time-Information */
  274092             :           virtual RTIReturnType roseRTI() override;
  274093             : #endif
  274094             :       /* */
  274095             : 
  274096             : 
  274097             : 
  274098             :       /* name Deprecated Functions
  274099             :           \brief Deprecated functions ... incomplete-documentation
  274100             : 
  274101             :           These functions have been deprecated from use.
  274102             :        */
  274103             :       /* */
  274104             : 
  274105             :       /*! returns a C style string (char*) representing the class name */
  274106             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  274107             : 
  274108             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  274109             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  274110             : #if 0
  274111             :       /*! returns old style Sage II enum values */
  274112             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  274113             :       /*! returns old style Sage II enum values */
  274114             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  274115             : #endif
  274116             :       /* */
  274117             : 
  274118             : 
  274119             : 
  274120             : 
  274121             :      public:
  274122             :       /* name Traversal Support Functions
  274123             :           \brief Traversal support functions ... incomplete-documentation
  274124             : 
  274125             :           These functions have been made public as part of the design, but they are suggested for internal use 
  274126             :           or by particularly knowledgable users for specialized tools or applications.
  274127             :        */
  274128             :       /* */
  274129             : 
  274130             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  274131             :        // (inferior to ROSE traversal mechanism, experimental).
  274132             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  274133             :        */
  274134             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  274135             : 
  274136             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  274137             :       /*! \brief support for the classic visitor pattern done in GoF */
  274138             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  274139             : 
  274140             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  274141             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  274142             :        */
  274143             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  274144             : 
  274145             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  274146             :        */
  274147             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  274148             : 
  274149             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  274150             :        // This traversal helps support internal tools that call static member functions.
  274151             :        // note: this function operates on the memory pools.
  274152             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  274153             :        */
  274154             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  274155             :       /* */
  274156             : 
  274157             : 
  274158             :      public:
  274159             :       /* name Memory Allocation Functions
  274160             :           \brief Memory allocations functions ... incomplete-documentation
  274161             : 
  274162             :           These functions have been made public as part of the design, but they are suggested for internal use 
  274163             :           or by particularly knowledgable users for specialized tools or applications.
  274164             :        */
  274165             :       /* */
  274166             : 
  274167             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  274168             : 
  274169             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  274170             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  274171             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  274172             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  274173             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  274174             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  274175             :           being used with the AST File I/O mechanism.
  274176             :        */
  274177             :           virtual bool isInMemoryPool() override;
  274178             : 
  274179             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  274180             : 
  274181             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  274182             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  274183             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  274184             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  274185             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  274186             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  274187             :           being used with the AST File I/O mechanism.
  274188             :        */
  274189             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  274190             : 
  274191             :       // DQ (4/30/2006): Modified to be a const function.
  274192             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  274193             : 
  274194             :           This functions is part of general support for many possible tools to operate 
  274195             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  274196             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  274197             :           less than the set of pointers used by the AST file I/O. This is part of
  274198             :           work implemented by Andreas, and support tools such as the AST graph generation.
  274199             : 
  274200             :           \warning This function can return unexpected data members and thus the 
  274201             :                    order and the number of elements is unpredicable and subject 
  274202             :                    to change.
  274203             : 
  274204             :           \returns STL vector of pairs of SgNode* and strings
  274205             :        */
  274206             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  274207             : 
  274208             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  274209             : 
  274210             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  274211             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  274212             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  274213             : 
  274214             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  274215             :                    and subject to change.
  274216             :        */
  274217             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  274218             : 
  274219             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  274220             : 
  274221             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  274222             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  274223             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  274224             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  274225             : 
  274226             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  274227             : 
  274228             :           \returns long
  274229             :        */
  274230             :           virtual long getChildIndex( SgNode* childNode ) const override;
  274231             : 
  274232             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  274233             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  274234             :       /* \brief Constructor for use by AST File I/O Mechanism
  274235             : 
  274236             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  274237             :           which obtained via fast binary file I/O from disk.
  274238             :        */
  274239             :        // SgVarRefExp( SgVarRefExpStorageClass& source );
  274240             : 
  274241             : 
  274242             : 
  274243             : 
  274244             : 
  274245             :  // JH (10/24/2005): methods added to support the ast file IO
  274246             :     private:
  274247             : 
  274248             :       /* name AST Memory Allocation Support Functions
  274249             :           \brief Memory allocations support....
  274250             : 
  274251             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  274252             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  274253             :           and support the AST File I/O Mechanism.
  274254             :        */
  274255             :       /* */
  274256             : 
  274257             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  274258             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  274259             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  274260             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  274261             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  274262             :           a correspinding one in the AST_FILE_IO class!
  274263             :        */
  274264             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  274265             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  274266             :       /* \brief Typedef used for low level memory access.
  274267             :        */
  274268             :        // typedef unsigned char* TestType;
  274269             : 
  274270             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  274271             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  274272             :       /* \brief Typedef used to hold memory addresses as values.
  274273             :        */
  274274             :        // typedef unsigned long  AddressType;
  274275             : 
  274276             : 
  274277             : 
  274278             :        // necessary, to have direct access to the p_freepointer and the private methods !
  274279             :       /*! \brief friend class declaration to support AST File I/O */
  274280             :           friend class AST_FILE_IO;
  274281             : 
  274282             :       /*! \brief friend class declaration to support AST File I/O */
  274283             :           friend class SgVarRefExpStorageClass;
  274284             : 
  274285             :       /*! \brief friend class declaration to support AST File I/O */
  274286             :           friend class AstSpecificDataManagingClass;
  274287             : 
  274288             :       /*! \brief friend class declaration to support AST File I/O */
  274289             :           friend class AstSpecificDataManagingClassStorageClass;
  274290             :     public:
  274291             :       /*! \brief IR node constructor to support AST File I/O */
  274292             :           SgVarRefExp( const SgVarRefExpStorageClass& source );
  274293             : 
  274294             :  // private: // JJW hack
  274295             :        /*
  274296             :           name AST Memory Allocation Support Variables
  274297             :           Memory allocations support variables 
  274298             : 
  274299             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  274300             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  274301             :           and support the AST File I/O Mechanism.
  274302             :        */
  274303             :       /* */
  274304             : 
  274305             :     public:
  274306             : 
  274307             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  274308             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  274309             :       // virtual SgNode* addRegExpAttribute();
  274310             :       /*! \brief Support for AST matching using regular expression.
  274311             : 
  274312             :           This support is incomplete and the subject of current research to define 
  274313             :           RegEx trees to support inexact matching.
  274314             :        */
  274315             :           SgVarRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  274316             : 
  274317             : // *** COMMON CODE SECTION ENDS HERE ***
  274318             : 
  274319             : 
  274320             : // End of memberFunctionString
  274321             : // Start of memberFunctionString
  274322             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  274323             : 
  274324             :      // the generated cast function
  274325             :      // friend ROSE_DLL_API SgVarRefExp* isSgVarRefExp ( SgNode* s );
  274326             : 
  274327             :           typedef SgExpression base_node_type;
  274328             : 
  274329             : 
  274330             : // End of memberFunctionString
  274331             : // Start of memberFunctionString
  274332             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  274333             : 
  274334             :           SgType* get_type() const override;
  274335             : 
  274336             : 
  274337             : // End of memberFunctionString
  274338             : // Start of memberFunctionString
  274339             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  274340             : 
  274341             :           void post_construction_initialization() override;
  274342             : 
  274343             : 
  274344             : // End of memberFunctionString
  274345             : 
  274346             :      public: 
  274347             :          SgVariableSymbol* get_symbol() const;
  274348             :          void set_symbol(SgVariableSymbol* symbol);
  274349             : 
  274350             :      public: 
  274351             :          SgExpression* get_originalExpressionTree() const override /* (getDataAccessFunctionPrototypeString) */;
  274352             :          void set_originalExpressionTree(SgExpression* originalExpressionTree) override /* (getDataAccessFunctionPrototypeString) */;
  274353             : 
  274354             : 
  274355             : 
  274356             : 
  274357             : 
  274358             :      public: 
  274359             :          virtual ~SgVarRefExp();
  274360             : 
  274361             : 
  274362             :      public: 
  274363             :          SgVarRefExp(Sg_File_Info* startOfConstruct , SgVariableSymbol* symbol = NULL); 
  274364             :          SgVarRefExp(SgVariableSymbol* symbol); 
  274365             : 
  274366             :     protected:
  274367             : // Start of memberFunctionString
  274368             : SgVariableSymbol* p_symbol;
  274369             :           
  274370             : // End of memberFunctionString
  274371             : // Start of memberFunctionString
  274372             : SgExpression* p_originalExpressionTree;
  274373             :           
  274374             : // End of memberFunctionString
  274375             : // Start of memberFunctionString
  274376             : int p_name_qualification_length;
  274377             :           
  274378             : // End of memberFunctionString
  274379             : // Start of memberFunctionString
  274380             : bool p_type_elaboration_required;
  274381             :           
  274382             : // End of memberFunctionString
  274383             : // Start of memberFunctionString
  274384             : bool p_global_qualification_required;
  274385             :           
  274386             : // End of memberFunctionString
  274387             : 
  274388             :     friend struct Rose::Traits::generated::describe_node_t<SgVarRefExp>;
  274389             :     friend struct Rose::Traits::generated::describe_field_t<SgVarRefExp, SgVariableSymbol*,&SgVarRefExp::p_symbol>;
  274390             :     friend struct Rose::Traits::generated::describe_field_t<SgVarRefExp, SgExpression*,&SgVarRefExp::p_originalExpressionTree>;
  274391             :     friend struct Rose::Traits::generated::describe_field_t<SgVarRefExp, int,&SgVarRefExp::p_name_qualification_length>;
  274392             :     friend struct Rose::Traits::generated::describe_field_t<SgVarRefExp, bool,&SgVarRefExp::p_type_elaboration_required>;
  274393             :     friend struct Rose::Traits::generated::describe_field_t<SgVarRefExp, bool,&SgVarRefExp::p_global_qualification_required>;
  274394             : 
  274395             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274396             : 
  274397             : 
  274398             :    };
  274399             : #endif
  274400             : 
  274401             : // postdeclarations for SgVarRefExp
  274402             : 
  274403             : /* #line 274404 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274404             : 
  274405             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  274406             : 
  274407             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274408             : 
  274409             : 
  274410             : /* #line 274411 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274411             : 
  274412             : 
  274413             : 
  274414             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274415             : 
  274416             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  274417             : //      This code is automatically generated for each 
  274418             : //      terminal and non-terminal within the defined 
  274419             : //      grammar.  There is a simple way to change the 
  274420             : //      code to fix bugs etc.  See the ROSE README file
  274421             : //      for directions.
  274422             : 
  274423             : // tps: (02/22/2010): Adding DLL export requirements
  274424             : #include "rosedll.h"
  274425             : 
  274426             : // predeclarations for SgClassNameRefExp
  274427             : 
  274428             : /* #line 274429 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274429             : 
  274430             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  274431             : 
  274432             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274433             : 
  274434             : #if 1
  274435             : // Class Definition for SgClassNameRefExp
  274436             : class ROSE_DLL_API SgClassNameRefExp  : public SgExpression
  274437             :    {
  274438             :      public:
  274439             : 
  274440             : 
  274441             : /* #line 274442 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274442             : 
  274443             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  274444             : // Start of memberFunctionString
  274445             : /* #line 391 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  274446             : 
  274447             : 
  274448             : 
  274449             : // End of memberFunctionString
  274450             : // Start of memberFunctionString
  274451             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  274452             : 
  274453             : // *** COMMON CODE SECTION BEGINS HERE ***
  274454             : 
  274455             :     public:
  274456             : 
  274457             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  274458             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  274459             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  274460             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  274461             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  274462             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  274463             : 
  274464             :       /*! \brief returns a string representing the class name */
  274465             :           virtual std::string class_name() const override;
  274466             : 
  274467             :       /*! \brief returns new style SageIII enum values */
  274468             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  274469             : 
  274470             :       /*! \brief static variant value */
  274471             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  274472             :        // static const VariantT static_variant = V_SgClassNameRefExp;
  274473             :           enum { static_variant = V_SgClassNameRefExp };
  274474             : 
  274475             :        /* the generated cast function */
  274476             :       /*! \brief Casts pointer from base class to derived class */
  274477             :           ROSE_DLL_API friend       SgClassNameRefExp* isSgClassNameRefExp(       SgNode * s );
  274478             : 
  274479             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  274480             :           ROSE_DLL_API friend const SgClassNameRefExp* isSgClassNameRefExp( const SgNode * s );
  274481             : 
  274482             :      // ******************************************
  274483             :      // * Memory Pool / New / Delete
  274484             :      // ******************************************
  274485             : 
  274486             :      public:
  274487             :           /// \private
  274488             :           static const unsigned pool_size; //
  274489             :           /// \private
  274490             :           static std::vector<unsigned char *> pools; //
  274491             :           /// \private
  274492             :           static SgClassNameRefExp * next_node; // 
  274493             : 
  274494             :           /// \private
  274495             :           static unsigned long initializeStorageClassArray(SgClassNameRefExpStorageClass *); //
  274496             : 
  274497             :           /// \private
  274498             :           static void clearMemoryPool(); //
  274499             :           static void deleteMemoryPool(); //
  274500             : 
  274501             :           /// \private
  274502             :           static void extendMemoryPoolForFileIO(); //
  274503             : 
  274504             :           /// \private
  274505             :           static SgClassNameRefExp * getPointerFromGlobalIndex(unsigned long); //
  274506             :           /// \private
  274507             :           static SgClassNameRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  274508             : 
  274509             :           /// \private
  274510             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  274511             :           /// \private
  274512             :           static void resetValidFreepointers(); //
  274513             :           /// \private
  274514             :           static unsigned long getNumberOfLastValidPointer(); //
  274515             : 
  274516             : 
  274517             : #if defined(INLINE_FUNCTIONS)
  274518             :       /*! \brief returns pointer to newly allocated IR node */
  274519             :           inline void *operator new (size_t size);
  274520             : #else
  274521             :       /*! \brief returns pointer to newly allocated IR node */
  274522             :           void *operator new (size_t size);
  274523             : #endif
  274524             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  274525             :           void operator delete (void* pointer, size_t size);
  274526             : 
  274527             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  274528           0 :           void operator delete (void* pointer)
  274529             :              {
  274530             :             // This is the generated delete operator...
  274531           0 :                SgClassNameRefExp::operator delete (pointer,sizeof(SgClassNameRefExp));
  274532             :              }
  274533             : 
  274534             :       /*! \brief Returns the total number of IR nodes of this type */
  274535             :           static size_t numberOfNodes();
  274536             : 
  274537             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  274538             :           static size_t memoryUsage();
  274539             : 
  274540             :       // End of scope which started in IR nodes specific code 
  274541             :       /* */
  274542             : 
  274543             :       /* name Internal Functions
  274544             :           \brief Internal functions ... incomplete-documentation
  274545             : 
  274546             :           These functions have been made public as part of the design, but they are suggested for internal use 
  274547             :           or by particularly knowledgeable users for specialized tools or applications.
  274548             : 
  274549             :           \internal We could not make these private because they are required by user for special purposes. And 
  274550             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  274551             :          
  274552             :        */
  274553             : 
  274554             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  274555             :        // overridden in every class by *generated* implementation
  274556             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  274557             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  274558             :        // MS: 06/28/02 container of names of variables or container indices 
  274559             :        // used used in the traversal to access AST successor nodes
  274560             :        // overridden in every class by *generated* implementation
  274561             :       /*! \brief container of names of variables or container indices used used in the traversal
  274562             :           to access AST successor nodes overridden in every class by *generated* implementation */
  274563             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  274564             : 
  274565             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  274566             :        // than all the vector copies. The implementation for these functions is generated for each class.
  274567             :       /*! \brief return number of children in the traversal successor list */
  274568             :           virtual size_t get_numberOfTraversalSuccessors() override;
  274569             :       /*! \brief index-based access to traversal successors by index number */
  274570             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  274571             :       /*! \brief index-based access to traversal successors by child node */
  274572             :           virtual size_t get_childIndex(SgNode *child) override;
  274573             : 
  274574             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  274575             :        // MS: 08/16/2002 method for generating RTI information
  274576             :       /*! \brief return C++ Runtime-Time-Information */
  274577             :           virtual RTIReturnType roseRTI() override;
  274578             : #endif
  274579             :       /* */
  274580             : 
  274581             : 
  274582             : 
  274583             :       /* name Deprecated Functions
  274584             :           \brief Deprecated functions ... incomplete-documentation
  274585             : 
  274586             :           These functions have been deprecated from use.
  274587             :        */
  274588             :       /* */
  274589             : 
  274590             :       /*! returns a C style string (char*) representing the class name */
  274591             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  274592             : 
  274593             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  274594             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  274595             : #if 0
  274596             :       /*! returns old style Sage II enum values */
  274597             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  274598             :       /*! returns old style Sage II enum values */
  274599             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  274600             : #endif
  274601             :       /* */
  274602             : 
  274603             : 
  274604             : 
  274605             : 
  274606             :      public:
  274607             :       /* name Traversal Support Functions
  274608             :           \brief Traversal support functions ... incomplete-documentation
  274609             : 
  274610             :           These functions have been made public as part of the design, but they are suggested for internal use 
  274611             :           or by particularly knowledgable users for specialized tools or applications.
  274612             :        */
  274613             :       /* */
  274614             : 
  274615             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  274616             :        // (inferior to ROSE traversal mechanism, experimental).
  274617             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  274618             :        */
  274619             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  274620             : 
  274621             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  274622             :       /*! \brief support for the classic visitor pattern done in GoF */
  274623             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  274624             : 
  274625             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  274626             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  274627             :        */
  274628             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  274629             : 
  274630             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  274631             :        */
  274632             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  274633             : 
  274634             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  274635             :        // This traversal helps support internal tools that call static member functions.
  274636             :        // note: this function operates on the memory pools.
  274637             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  274638             :        */
  274639             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  274640             :       /* */
  274641             : 
  274642             : 
  274643             :      public:
  274644             :       /* name Memory Allocation Functions
  274645             :           \brief Memory allocations functions ... incomplete-documentation
  274646             : 
  274647             :           These functions have been made public as part of the design, but they are suggested for internal use 
  274648             :           or by particularly knowledgable users for specialized tools or applications.
  274649             :        */
  274650             :       /* */
  274651             : 
  274652             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  274653             : 
  274654             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  274655             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  274656             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  274657             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  274658             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  274659             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  274660             :           being used with the AST File I/O mechanism.
  274661             :        */
  274662             :           virtual bool isInMemoryPool() override;
  274663             : 
  274664             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  274665             : 
  274666             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  274667             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  274668             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  274669             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  274670             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  274671             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  274672             :           being used with the AST File I/O mechanism.
  274673             :        */
  274674             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  274675             : 
  274676             :       // DQ (4/30/2006): Modified to be a const function.
  274677             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  274678             : 
  274679             :           This functions is part of general support for many possible tools to operate 
  274680             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  274681             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  274682             :           less than the set of pointers used by the AST file I/O. This is part of
  274683             :           work implemented by Andreas, and support tools such as the AST graph generation.
  274684             : 
  274685             :           \warning This function can return unexpected data members and thus the 
  274686             :                    order and the number of elements is unpredicable and subject 
  274687             :                    to change.
  274688             : 
  274689             :           \returns STL vector of pairs of SgNode* and strings
  274690             :        */
  274691             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  274692             : 
  274693             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  274694             : 
  274695             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  274696             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  274697             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  274698             : 
  274699             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  274700             :                    and subject to change.
  274701             :        */
  274702             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  274703             : 
  274704             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  274705             : 
  274706             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  274707             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  274708             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  274709             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  274710             : 
  274711             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  274712             : 
  274713             :           \returns long
  274714             :        */
  274715             :           virtual long getChildIndex( SgNode* childNode ) const override;
  274716             : 
  274717             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  274718             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  274719             :       /* \brief Constructor for use by AST File I/O Mechanism
  274720             : 
  274721             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  274722             :           which obtained via fast binary file I/O from disk.
  274723             :        */
  274724             :        // SgClassNameRefExp( SgClassNameRefExpStorageClass& source );
  274725             : 
  274726             : 
  274727             : 
  274728             : 
  274729             : 
  274730             :  // JH (10/24/2005): methods added to support the ast file IO
  274731             :     private:
  274732             : 
  274733             :       /* name AST Memory Allocation Support Functions
  274734             :           \brief Memory allocations support....
  274735             : 
  274736             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  274737             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  274738             :           and support the AST File I/O Mechanism.
  274739             :        */
  274740             :       /* */
  274741             : 
  274742             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  274743             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  274744             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  274745             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  274746             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  274747             :           a correspinding one in the AST_FILE_IO class!
  274748             :        */
  274749             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  274750             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  274751             :       /* \brief Typedef used for low level memory access.
  274752             :        */
  274753             :        // typedef unsigned char* TestType;
  274754             : 
  274755             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  274756             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  274757             :       /* \brief Typedef used to hold memory addresses as values.
  274758             :        */
  274759             :        // typedef unsigned long  AddressType;
  274760             : 
  274761             : 
  274762             : 
  274763             :        // necessary, to have direct access to the p_freepointer and the private methods !
  274764             :       /*! \brief friend class declaration to support AST File I/O */
  274765             :           friend class AST_FILE_IO;
  274766             : 
  274767             :       /*! \brief friend class declaration to support AST File I/O */
  274768             :           friend class SgClassNameRefExpStorageClass;
  274769             : 
  274770             :       /*! \brief friend class declaration to support AST File I/O */
  274771             :           friend class AstSpecificDataManagingClass;
  274772             : 
  274773             :       /*! \brief friend class declaration to support AST File I/O */
  274774             :           friend class AstSpecificDataManagingClassStorageClass;
  274775             :     public:
  274776             :       /*! \brief IR node constructor to support AST File I/O */
  274777             :           SgClassNameRefExp( const SgClassNameRefExpStorageClass& source );
  274778             : 
  274779             :  // private: // JJW hack
  274780             :        /*
  274781             :           name AST Memory Allocation Support Variables
  274782             :           Memory allocations support variables 
  274783             : 
  274784             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  274785             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  274786             :           and support the AST File I/O Mechanism.
  274787             :        */
  274788             :       /* */
  274789             : 
  274790             :     public:
  274791             : 
  274792             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  274793             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  274794             :       // virtual SgNode* addRegExpAttribute();
  274795             :       /*! \brief Support for AST matching using regular expression.
  274796             : 
  274797             :           This support is incomplete and the subject of current research to define 
  274798             :           RegEx trees to support inexact matching.
  274799             :        */
  274800             :           SgClassNameRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  274801             : 
  274802             : // *** COMMON CODE SECTION ENDS HERE ***
  274803             : 
  274804             : 
  274805             : // End of memberFunctionString
  274806             : // Start of memberFunctionString
  274807             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  274808             : 
  274809             :      // the generated cast function
  274810             :      // friend ROSE_DLL_API SgClassNameRefExp* isSgClassNameRefExp ( SgNode* s );
  274811             : 
  274812             :           typedef SgExpression base_node_type;
  274813             : 
  274814             : 
  274815             : // End of memberFunctionString
  274816             : // Start of memberFunctionString
  274817             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  274818             : 
  274819             :           void post_construction_initialization() override;
  274820             : 
  274821             : 
  274822             : // End of memberFunctionString
  274823             : 
  274824             :      public: 
  274825             :          SgClassSymbol* get_symbol() const;
  274826             :          void set_symbol(SgClassSymbol* symbol);
  274827             : 
  274828             : 
  274829             :      public: 
  274830             :          virtual ~SgClassNameRefExp();
  274831             : 
  274832             : 
  274833             :      public: 
  274834             :          SgClassNameRefExp(Sg_File_Info* startOfConstruct , SgClassSymbol* symbol = NULL); 
  274835             :          SgClassNameRefExp(SgClassSymbol* symbol); 
  274836             : 
  274837             :     protected:
  274838             : // Start of memberFunctionString
  274839             : SgClassSymbol* p_symbol;
  274840             :           
  274841             : // End of memberFunctionString
  274842             : 
  274843             :     friend struct Rose::Traits::generated::describe_node_t<SgClassNameRefExp>;
  274844             :     friend struct Rose::Traits::generated::describe_field_t<SgClassNameRefExp, SgClassSymbol*,&SgClassNameRefExp::p_symbol>;
  274845             : 
  274846             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274847             : 
  274848             : 
  274849             :    };
  274850             : #endif
  274851             : 
  274852             : // postdeclarations for SgClassNameRefExp
  274853             : 
  274854             : /* #line 274855 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274855             : 
  274856             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  274857             : 
  274858             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274859             : 
  274860             : 
  274861             : /* #line 274862 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274862             : 
  274863             : 
  274864             : 
  274865             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274866             : 
  274867             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  274868             : //      This code is automatically generated for each 
  274869             : //      terminal and non-terminal within the defined 
  274870             : //      grammar.  There is a simple way to change the 
  274871             : //      code to fix bugs etc.  See the ROSE README file
  274872             : //      for directions.
  274873             : 
  274874             : // tps: (02/22/2010): Adding DLL export requirements
  274875             : #include "rosedll.h"
  274876             : 
  274877             : // predeclarations for SgFunctionRefExp
  274878             : 
  274879             : /* #line 274880 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274880             : 
  274881             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  274882             : 
  274883             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  274884             : 
  274885             : #if 1
  274886             : // Class Definition for SgFunctionRefExp
  274887             : class ROSE_DLL_API SgFunctionRefExp  : public SgExpression
  274888             :    {
  274889             :      public:
  274890             : 
  274891             : 
  274892             : /* #line 274893 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  274893             : 
  274894             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  274895             : // Start of memberFunctionString
  274896             : /* #line 395 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  274897             : 
  274898             :           SgFunctionSymbol* get_symbol() const;
  274899             :           void set_symbol(SgFunctionSymbol * symbol);
  274900             : 
  274901             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  274902             :           virtual unsigned int cfgIndexForEnd() const override;
  274903             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  274904             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  274905             : #endif
  274906             : 
  274907             :       /** Returns the associated function declaration, if it can be resolved statically. In some cases,
  274908             :       * such as function pointers and virtual functions, the function called cannot be resolved statically;
  274909             :       * for those cases this function returns NULL. The actual function expression is available through
  274910             :       * get_function(). */
  274911             :           SgFunctionDeclaration* getAssociatedFunctionDeclaration() const;
  274912             : 
  274913             : //       // get lvalue
  274914             : //          virtual bool isLValue() const;
  274915             : //          virtual bool isChildUsedAsLValue(const SgExpression* child) const; // INTERNAL Recursively call up the chain to answer the child
  274916             : 
  274917             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  274918             :           int get_name_qualification_length() const override;
  274919             :           void set_name_qualification_length(int name_qualification_length) override;
  274920             : 
  274921             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  274922             :           bool get_type_elaboration_required() const override;
  274923             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  274924             : 
  274925             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  274926             :           bool get_global_qualification_required() const override;
  274927             :           void set_global_qualification_required(bool global_qualification_required) override;
  274928             : 
  274929             : 
  274930             : 
  274931             : // End of memberFunctionString
  274932             : // Start of memberFunctionString
  274933             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  274934             : 
  274935             : // *** COMMON CODE SECTION BEGINS HERE ***
  274936             : 
  274937             :     public:
  274938             : 
  274939             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  274940             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  274941             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  274942             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  274943             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  274944             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  274945             : 
  274946             :       /*! \brief returns a string representing the class name */
  274947             :           virtual std::string class_name() const override;
  274948             : 
  274949             :       /*! \brief returns new style SageIII enum values */
  274950             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  274951             : 
  274952             :       /*! \brief static variant value */
  274953             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  274954             :        // static const VariantT static_variant = V_SgFunctionRefExp;
  274955             :           enum { static_variant = V_SgFunctionRefExp };
  274956             : 
  274957             :        /* the generated cast function */
  274958             :       /*! \brief Casts pointer from base class to derived class */
  274959             :           ROSE_DLL_API friend       SgFunctionRefExp* isSgFunctionRefExp(       SgNode * s );
  274960             : 
  274961             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  274962             :           ROSE_DLL_API friend const SgFunctionRefExp* isSgFunctionRefExp( const SgNode * s );
  274963             : 
  274964             :      // ******************************************
  274965             :      // * Memory Pool / New / Delete
  274966             :      // ******************************************
  274967             : 
  274968             :      public:
  274969             :           /// \private
  274970             :           static const unsigned pool_size; //
  274971             :           /// \private
  274972             :           static std::vector<unsigned char *> pools; //
  274973             :           /// \private
  274974             :           static SgFunctionRefExp * next_node; // 
  274975             : 
  274976             :           /// \private
  274977             :           static unsigned long initializeStorageClassArray(SgFunctionRefExpStorageClass *); //
  274978             : 
  274979             :           /// \private
  274980             :           static void clearMemoryPool(); //
  274981             :           static void deleteMemoryPool(); //
  274982             : 
  274983             :           /// \private
  274984             :           static void extendMemoryPoolForFileIO(); //
  274985             : 
  274986             :           /// \private
  274987             :           static SgFunctionRefExp * getPointerFromGlobalIndex(unsigned long); //
  274988             :           /// \private
  274989             :           static SgFunctionRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  274990             : 
  274991             :           /// \private
  274992             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  274993             :           /// \private
  274994             :           static void resetValidFreepointers(); //
  274995             :           /// \private
  274996             :           static unsigned long getNumberOfLastValidPointer(); //
  274997             : 
  274998             : 
  274999             : #if defined(INLINE_FUNCTIONS)
  275000             :       /*! \brief returns pointer to newly allocated IR node */
  275001             :           inline void *operator new (size_t size);
  275002             : #else
  275003             :       /*! \brief returns pointer to newly allocated IR node */
  275004             :           void *operator new (size_t size);
  275005             : #endif
  275006             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  275007             :           void operator delete (void* pointer, size_t size);
  275008             : 
  275009             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  275010        1379 :           void operator delete (void* pointer)
  275011             :              {
  275012             :             // This is the generated delete operator...
  275013        1379 :                SgFunctionRefExp::operator delete (pointer,sizeof(SgFunctionRefExp));
  275014             :              }
  275015             : 
  275016             :       /*! \brief Returns the total number of IR nodes of this type */
  275017             :           static size_t numberOfNodes();
  275018             : 
  275019             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  275020             :           static size_t memoryUsage();
  275021             : 
  275022             :       // End of scope which started in IR nodes specific code 
  275023             :       /* */
  275024             : 
  275025             :       /* name Internal Functions
  275026             :           \brief Internal functions ... incomplete-documentation
  275027             : 
  275028             :           These functions have been made public as part of the design, but they are suggested for internal use 
  275029             :           or by particularly knowledgeable users for specialized tools or applications.
  275030             : 
  275031             :           \internal We could not make these private because they are required by user for special purposes. And 
  275032             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  275033             :          
  275034             :        */
  275035             : 
  275036             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  275037             :        // overridden in every class by *generated* implementation
  275038             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  275039             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  275040             :        // MS: 06/28/02 container of names of variables or container indices 
  275041             :        // used used in the traversal to access AST successor nodes
  275042             :        // overridden in every class by *generated* implementation
  275043             :       /*! \brief container of names of variables or container indices used used in the traversal
  275044             :           to access AST successor nodes overridden in every class by *generated* implementation */
  275045             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  275046             : 
  275047             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  275048             :        // than all the vector copies. The implementation for these functions is generated for each class.
  275049             :       /*! \brief return number of children in the traversal successor list */
  275050             :           virtual size_t get_numberOfTraversalSuccessors() override;
  275051             :       /*! \brief index-based access to traversal successors by index number */
  275052             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  275053             :       /*! \brief index-based access to traversal successors by child node */
  275054             :           virtual size_t get_childIndex(SgNode *child) override;
  275055             : 
  275056             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  275057             :        // MS: 08/16/2002 method for generating RTI information
  275058             :       /*! \brief return C++ Runtime-Time-Information */
  275059             :           virtual RTIReturnType roseRTI() override;
  275060             : #endif
  275061             :       /* */
  275062             : 
  275063             : 
  275064             : 
  275065             :       /* name Deprecated Functions
  275066             :           \brief Deprecated functions ... incomplete-documentation
  275067             : 
  275068             :           These functions have been deprecated from use.
  275069             :        */
  275070             :       /* */
  275071             : 
  275072             :       /*! returns a C style string (char*) representing the class name */
  275073             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  275074             : 
  275075             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  275076             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  275077             : #if 0
  275078             :       /*! returns old style Sage II enum values */
  275079             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  275080             :       /*! returns old style Sage II enum values */
  275081             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  275082             : #endif
  275083             :       /* */
  275084             : 
  275085             : 
  275086             : 
  275087             : 
  275088             :      public:
  275089             :       /* name Traversal Support Functions
  275090             :           \brief Traversal support functions ... incomplete-documentation
  275091             : 
  275092             :           These functions have been made public as part of the design, but they are suggested for internal use 
  275093             :           or by particularly knowledgable users for specialized tools or applications.
  275094             :        */
  275095             :       /* */
  275096             : 
  275097             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  275098             :        // (inferior to ROSE traversal mechanism, experimental).
  275099             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  275100             :        */
  275101             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  275102             : 
  275103             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  275104             :       /*! \brief support for the classic visitor pattern done in GoF */
  275105             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  275106             : 
  275107             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  275108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  275109             :        */
  275110             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  275111             : 
  275112             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  275113             :        */
  275114             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  275115             : 
  275116             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  275117             :        // This traversal helps support internal tools that call static member functions.
  275118             :        // note: this function operates on the memory pools.
  275119             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  275120             :        */
  275121             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  275122             :       /* */
  275123             : 
  275124             : 
  275125             :      public:
  275126             :       /* name Memory Allocation Functions
  275127             :           \brief Memory allocations functions ... incomplete-documentation
  275128             : 
  275129             :           These functions have been made public as part of the design, but they are suggested for internal use 
  275130             :           or by particularly knowledgable users for specialized tools or applications.
  275131             :        */
  275132             :       /* */
  275133             : 
  275134             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  275135             : 
  275136             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  275137             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  275138             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  275139             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  275140             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  275141             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  275142             :           being used with the AST File I/O mechanism.
  275143             :        */
  275144             :           virtual bool isInMemoryPool() override;
  275145             : 
  275146             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  275147             : 
  275148             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  275149             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  275150             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  275151             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  275152             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  275153             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  275154             :           being used with the AST File I/O mechanism.
  275155             :        */
  275156             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  275157             : 
  275158             :       // DQ (4/30/2006): Modified to be a const function.
  275159             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  275160             : 
  275161             :           This functions is part of general support for many possible tools to operate 
  275162             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  275163             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  275164             :           less than the set of pointers used by the AST file I/O. This is part of
  275165             :           work implemented by Andreas, and support tools such as the AST graph generation.
  275166             : 
  275167             :           \warning This function can return unexpected data members and thus the 
  275168             :                    order and the number of elements is unpredicable and subject 
  275169             :                    to change.
  275170             : 
  275171             :           \returns STL vector of pairs of SgNode* and strings
  275172             :        */
  275173             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  275174             : 
  275175             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  275176             : 
  275177             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  275178             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  275179             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  275180             : 
  275181             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  275182             :                    and subject to change.
  275183             :        */
  275184             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  275185             : 
  275186             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  275187             : 
  275188             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  275189             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  275190             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  275191             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  275192             : 
  275193             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  275194             : 
  275195             :           \returns long
  275196             :        */
  275197             :           virtual long getChildIndex( SgNode* childNode ) const override;
  275198             : 
  275199             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  275200             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  275201             :       /* \brief Constructor for use by AST File I/O Mechanism
  275202             : 
  275203             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  275204             :           which obtained via fast binary file I/O from disk.
  275205             :        */
  275206             :        // SgFunctionRefExp( SgFunctionRefExpStorageClass& source );
  275207             : 
  275208             : 
  275209             : 
  275210             : 
  275211             : 
  275212             :  // JH (10/24/2005): methods added to support the ast file IO
  275213             :     private:
  275214             : 
  275215             :       /* name AST Memory Allocation Support Functions
  275216             :           \brief Memory allocations support....
  275217             : 
  275218             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  275219             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  275220             :           and support the AST File I/O Mechanism.
  275221             :        */
  275222             :       /* */
  275223             : 
  275224             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  275225             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  275226             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  275227             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  275228             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  275229             :           a correspinding one in the AST_FILE_IO class!
  275230             :        */
  275231             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  275232             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  275233             :       /* \brief Typedef used for low level memory access.
  275234             :        */
  275235             :        // typedef unsigned char* TestType;
  275236             : 
  275237             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  275238             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  275239             :       /* \brief Typedef used to hold memory addresses as values.
  275240             :        */
  275241             :        // typedef unsigned long  AddressType;
  275242             : 
  275243             : 
  275244             : 
  275245             :        // necessary, to have direct access to the p_freepointer and the private methods !
  275246             :       /*! \brief friend class declaration to support AST File I/O */
  275247             :           friend class AST_FILE_IO;
  275248             : 
  275249             :       /*! \brief friend class declaration to support AST File I/O */
  275250             :           friend class SgFunctionRefExpStorageClass;
  275251             : 
  275252             :       /*! \brief friend class declaration to support AST File I/O */
  275253             :           friend class AstSpecificDataManagingClass;
  275254             : 
  275255             :       /*! \brief friend class declaration to support AST File I/O */
  275256             :           friend class AstSpecificDataManagingClassStorageClass;
  275257             :     public:
  275258             :       /*! \brief IR node constructor to support AST File I/O */
  275259             :           SgFunctionRefExp( const SgFunctionRefExpStorageClass& source );
  275260             : 
  275261             :  // private: // JJW hack
  275262             :        /*
  275263             :           name AST Memory Allocation Support Variables
  275264             :           Memory allocations support variables 
  275265             : 
  275266             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  275267             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  275268             :           and support the AST File I/O Mechanism.
  275269             :        */
  275270             :       /* */
  275271             : 
  275272             :     public:
  275273             : 
  275274             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  275275             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  275276             :       // virtual SgNode* addRegExpAttribute();
  275277             :       /*! \brief Support for AST matching using regular expression.
  275278             : 
  275279             :           This support is incomplete and the subject of current research to define 
  275280             :           RegEx trees to support inexact matching.
  275281             :        */
  275282             :           SgFunctionRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  275283             : 
  275284             : // *** COMMON CODE SECTION ENDS HERE ***
  275285             : 
  275286             : 
  275287             : // End of memberFunctionString
  275288             : // Start of memberFunctionString
  275289             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  275290             : 
  275291             :      // the generated cast function
  275292             :      // friend ROSE_DLL_API SgFunctionRefExp* isSgFunctionRefExp ( SgNode* s );
  275293             : 
  275294             :           typedef SgExpression base_node_type;
  275295             : 
  275296             : 
  275297             : // End of memberFunctionString
  275298             : // Start of memberFunctionString
  275299             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  275300             : 
  275301             :           SgType* get_type() const override;
  275302             : 
  275303             : 
  275304             : // End of memberFunctionString
  275305             : // Start of memberFunctionString
  275306             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  275307             : 
  275308             :           void post_construction_initialization() override;
  275309             : 
  275310             : 
  275311             : // End of memberFunctionString
  275312             : 
  275313             :      public: 
  275314             :          SgFunctionSymbol* get_symbol_i() const;
  275315             :          void set_symbol_i(SgFunctionSymbol* symbol_i);
  275316             : 
  275317             : 
  275318             :      public: 
  275319             :          SgExpression* get_originalExpressionTree() const override /* (getDataAccessFunctionPrototypeString) */;
  275320             :          void set_originalExpressionTree(SgExpression* originalExpressionTree) override /* (getDataAccessFunctionPrototypeString) */;
  275321             : 
  275322             : 
  275323             : 
  275324             : 
  275325             : 
  275326             :      public: 
  275327             :          virtual ~SgFunctionRefExp();
  275328             : 
  275329             : 
  275330             :      public: 
  275331             :          SgFunctionRefExp(Sg_File_Info* startOfConstruct , SgFunctionSymbol* symbol_i = NULL, SgFunctionType* function_type = NULL); 
  275332             :          SgFunctionRefExp(SgFunctionSymbol* symbol_i, SgFunctionType* function_type); 
  275333             : 
  275334             :     protected:
  275335             : // Start of memberFunctionString
  275336             : SgFunctionSymbol* p_symbol_i;
  275337             :           
  275338             : // End of memberFunctionString
  275339             : // Start of memberFunctionString
  275340             : SgFunctionType* p_function_type;
  275341             :           
  275342             : // End of memberFunctionString
  275343             : // Start of memberFunctionString
  275344             : SgExpression* p_originalExpressionTree;
  275345             :           
  275346             : // End of memberFunctionString
  275347             : // Start of memberFunctionString
  275348             : int p_name_qualification_length;
  275349             :           
  275350             : // End of memberFunctionString
  275351             : // Start of memberFunctionString
  275352             : bool p_type_elaboration_required;
  275353             :           
  275354             : // End of memberFunctionString
  275355             : // Start of memberFunctionString
  275356             : bool p_global_qualification_required;
  275357             :           
  275358             : // End of memberFunctionString
  275359             : 
  275360             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionRefExp>;
  275361             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionRefExp, SgFunctionSymbol*,&SgFunctionRefExp::p_symbol_i>;
  275362             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionRefExp, SgFunctionType*,&SgFunctionRefExp::p_function_type>;
  275363             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionRefExp, SgExpression*,&SgFunctionRefExp::p_originalExpressionTree>;
  275364             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionRefExp, int,&SgFunctionRefExp::p_name_qualification_length>;
  275365             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionRefExp, bool,&SgFunctionRefExp::p_type_elaboration_required>;
  275366             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionRefExp, bool,&SgFunctionRefExp::p_global_qualification_required>;
  275367             : 
  275368             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275369             : 
  275370             : 
  275371             :    };
  275372             : #endif
  275373             : 
  275374             : // postdeclarations for SgFunctionRefExp
  275375             : 
  275376             : /* #line 275377 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275377             : 
  275378             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  275379             : 
  275380             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275381             : 
  275382             : 
  275383             : /* #line 275384 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275384             : 
  275385             : 
  275386             : 
  275387             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275388             : 
  275389             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  275390             : //      This code is automatically generated for each 
  275391             : //      terminal and non-terminal within the defined 
  275392             : //      grammar.  There is a simple way to change the 
  275393             : //      code to fix bugs etc.  See the ROSE README file
  275394             : //      for directions.
  275395             : 
  275396             : // tps: (02/22/2010): Adding DLL export requirements
  275397             : #include "rosedll.h"
  275398             : 
  275399             : // predeclarations for SgMemberFunctionRefExp
  275400             : 
  275401             : /* #line 275402 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275402             : 
  275403             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  275404             : 
  275405             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275406             : 
  275407             : #if 1
  275408             : // Class Definition for SgMemberFunctionRefExp
  275409             : class ROSE_DLL_API SgMemberFunctionRefExp  : public SgExpression
  275410             :    {
  275411             :      public:
  275412             : 
  275413             : 
  275414             : /* #line 275415 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275415             : 
  275416             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  275417             : // Start of memberFunctionString
  275418             : /* #line 430 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  275419             : 
  275420             :           SgMemberFunctionSymbol* get_symbol() const;
  275421             :           void set_symbol(SgMemberFunctionSymbol * symbol);
  275422             : 
  275423             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  275424             :           virtual unsigned int cfgIndexForEnd() const override;
  275425             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  275426             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  275427             : #endif
  275428             : 
  275429             :           //! This is helpful in chasing down the associated declaration to this member function reference.
  275430             :       //! Note: This function can return NULL - for example when the function call occurs through a function
  275431             :       //! pointer.
  275432             :           SgMemberFunctionDeclaration* getAssociatedMemberFunctionDeclaration() const;
  275433             : 
  275434             :        // get lvalue
  275435             :           virtual bool isLValue() const override;
  275436             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  275437             : 
  275438             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  275439             :           int get_name_qualification_length() const override;
  275440             :           void set_name_qualification_length(int name_qualification_length) override;
  275441             : 
  275442             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  275443             :           bool get_type_elaboration_required() const override;
  275444             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  275445             : 
  275446             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  275447             :           bool get_global_qualification_required() const override;
  275448             :           void set_global_qualification_required(bool global_qualification_required) override;
  275449             : 
  275450             : 
  275451             : 
  275452             : // End of memberFunctionString
  275453             : // Start of memberFunctionString
  275454             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  275455             : 
  275456             : // *** COMMON CODE SECTION BEGINS HERE ***
  275457             : 
  275458             :     public:
  275459             : 
  275460             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  275461             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  275462             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  275463             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  275464             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  275465             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  275466             : 
  275467             :       /*! \brief returns a string representing the class name */
  275468             :           virtual std::string class_name() const override;
  275469             : 
  275470             :       /*! \brief returns new style SageIII enum values */
  275471             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  275472             : 
  275473             :       /*! \brief static variant value */
  275474             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  275475             :        // static const VariantT static_variant = V_SgMemberFunctionRefExp;
  275476             :           enum { static_variant = V_SgMemberFunctionRefExp };
  275477             : 
  275478             :        /* the generated cast function */
  275479             :       /*! \brief Casts pointer from base class to derived class */
  275480             :           ROSE_DLL_API friend       SgMemberFunctionRefExp* isSgMemberFunctionRefExp(       SgNode * s );
  275481             : 
  275482             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  275483             :           ROSE_DLL_API friend const SgMemberFunctionRefExp* isSgMemberFunctionRefExp( const SgNode * s );
  275484             : 
  275485             :      // ******************************************
  275486             :      // * Memory Pool / New / Delete
  275487             :      // ******************************************
  275488             : 
  275489             :      public:
  275490             :           /// \private
  275491             :           static const unsigned pool_size; //
  275492             :           /// \private
  275493             :           static std::vector<unsigned char *> pools; //
  275494             :           /// \private
  275495             :           static SgMemberFunctionRefExp * next_node; // 
  275496             : 
  275497             :           /// \private
  275498             :           static unsigned long initializeStorageClassArray(SgMemberFunctionRefExpStorageClass *); //
  275499             : 
  275500             :           /// \private
  275501             :           static void clearMemoryPool(); //
  275502             :           static void deleteMemoryPool(); //
  275503             : 
  275504             :           /// \private
  275505             :           static void extendMemoryPoolForFileIO(); //
  275506             : 
  275507             :           /// \private
  275508             :           static SgMemberFunctionRefExp * getPointerFromGlobalIndex(unsigned long); //
  275509             :           /// \private
  275510             :           static SgMemberFunctionRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  275511             : 
  275512             :           /// \private
  275513             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  275514             :           /// \private
  275515             :           static void resetValidFreepointers(); //
  275516             :           /// \private
  275517             :           static unsigned long getNumberOfLastValidPointer(); //
  275518             : 
  275519             : 
  275520             : #if defined(INLINE_FUNCTIONS)
  275521             :       /*! \brief returns pointer to newly allocated IR node */
  275522             :           inline void *operator new (size_t size);
  275523             : #else
  275524             :       /*! \brief returns pointer to newly allocated IR node */
  275525             :           void *operator new (size_t size);
  275526             : #endif
  275527             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  275528             :           void operator delete (void* pointer, size_t size);
  275529             : 
  275530             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  275531        1080 :           void operator delete (void* pointer)
  275532             :              {
  275533             :             // This is the generated delete operator...
  275534        1080 :                SgMemberFunctionRefExp::operator delete (pointer,sizeof(SgMemberFunctionRefExp));
  275535             :              }
  275536             : 
  275537             :       /*! \brief Returns the total number of IR nodes of this type */
  275538             :           static size_t numberOfNodes();
  275539             : 
  275540             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  275541             :           static size_t memoryUsage();
  275542             : 
  275543             :       // End of scope which started in IR nodes specific code 
  275544             :       /* */
  275545             : 
  275546             :       /* name Internal Functions
  275547             :           \brief Internal functions ... incomplete-documentation
  275548             : 
  275549             :           These functions have been made public as part of the design, but they are suggested for internal use 
  275550             :           or by particularly knowledgeable users for specialized tools or applications.
  275551             : 
  275552             :           \internal We could not make these private because they are required by user for special purposes. And 
  275553             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  275554             :          
  275555             :        */
  275556             : 
  275557             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  275558             :        // overridden in every class by *generated* implementation
  275559             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  275560             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  275561             :        // MS: 06/28/02 container of names of variables or container indices 
  275562             :        // used used in the traversal to access AST successor nodes
  275563             :        // overridden in every class by *generated* implementation
  275564             :       /*! \brief container of names of variables or container indices used used in the traversal
  275565             :           to access AST successor nodes overridden in every class by *generated* implementation */
  275566             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  275567             : 
  275568             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  275569             :        // than all the vector copies. The implementation for these functions is generated for each class.
  275570             :       /*! \brief return number of children in the traversal successor list */
  275571             :           virtual size_t get_numberOfTraversalSuccessors() override;
  275572             :       /*! \brief index-based access to traversal successors by index number */
  275573             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  275574             :       /*! \brief index-based access to traversal successors by child node */
  275575             :           virtual size_t get_childIndex(SgNode *child) override;
  275576             : 
  275577             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  275578             :        // MS: 08/16/2002 method for generating RTI information
  275579             :       /*! \brief return C++ Runtime-Time-Information */
  275580             :           virtual RTIReturnType roseRTI() override;
  275581             : #endif
  275582             :       /* */
  275583             : 
  275584             : 
  275585             : 
  275586             :       /* name Deprecated Functions
  275587             :           \brief Deprecated functions ... incomplete-documentation
  275588             : 
  275589             :           These functions have been deprecated from use.
  275590             :        */
  275591             :       /* */
  275592             : 
  275593             :       /*! returns a C style string (char*) representing the class name */
  275594             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  275595             : 
  275596             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  275597             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  275598             : #if 0
  275599             :       /*! returns old style Sage II enum values */
  275600             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  275601             :       /*! returns old style Sage II enum values */
  275602             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  275603             : #endif
  275604             :       /* */
  275605             : 
  275606             : 
  275607             : 
  275608             : 
  275609             :      public:
  275610             :       /* name Traversal Support Functions
  275611             :           \brief Traversal support functions ... incomplete-documentation
  275612             : 
  275613             :           These functions have been made public as part of the design, but they are suggested for internal use 
  275614             :           or by particularly knowledgable users for specialized tools or applications.
  275615             :        */
  275616             :       /* */
  275617             : 
  275618             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  275619             :        // (inferior to ROSE traversal mechanism, experimental).
  275620             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  275621             :        */
  275622             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  275623             : 
  275624             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  275625             :       /*! \brief support for the classic visitor pattern done in GoF */
  275626             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  275627             : 
  275628             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  275629             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  275630             :        */
  275631             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  275632             : 
  275633             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  275634             :        */
  275635             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  275636             : 
  275637             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  275638             :        // This traversal helps support internal tools that call static member functions.
  275639             :        // note: this function operates on the memory pools.
  275640             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  275641             :        */
  275642             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  275643             :       /* */
  275644             : 
  275645             : 
  275646             :      public:
  275647             :       /* name Memory Allocation Functions
  275648             :           \brief Memory allocations functions ... incomplete-documentation
  275649             : 
  275650             :           These functions have been made public as part of the design, but they are suggested for internal use 
  275651             :           or by particularly knowledgable users for specialized tools or applications.
  275652             :        */
  275653             :       /* */
  275654             : 
  275655             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  275656             : 
  275657             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  275658             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  275659             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  275660             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  275661             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  275662             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  275663             :           being used with the AST File I/O mechanism.
  275664             :        */
  275665             :           virtual bool isInMemoryPool() override;
  275666             : 
  275667             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  275668             : 
  275669             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  275670             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  275671             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  275672             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  275673             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  275674             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  275675             :           being used with the AST File I/O mechanism.
  275676             :        */
  275677             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  275678             : 
  275679             :       // DQ (4/30/2006): Modified to be a const function.
  275680             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  275681             : 
  275682             :           This functions is part of general support for many possible tools to operate 
  275683             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  275684             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  275685             :           less than the set of pointers used by the AST file I/O. This is part of
  275686             :           work implemented by Andreas, and support tools such as the AST graph generation.
  275687             : 
  275688             :           \warning This function can return unexpected data members and thus the 
  275689             :                    order and the number of elements is unpredicable and subject 
  275690             :                    to change.
  275691             : 
  275692             :           \returns STL vector of pairs of SgNode* and strings
  275693             :        */
  275694             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  275695             : 
  275696             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  275697             : 
  275698             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  275699             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  275700             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  275701             : 
  275702             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  275703             :                    and subject to change.
  275704             :        */
  275705             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  275706             : 
  275707             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  275708             : 
  275709             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  275710             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  275711             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  275712             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  275713             : 
  275714             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  275715             : 
  275716             :           \returns long
  275717             :        */
  275718             :           virtual long getChildIndex( SgNode* childNode ) const override;
  275719             : 
  275720             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  275721             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  275722             :       /* \brief Constructor for use by AST File I/O Mechanism
  275723             : 
  275724             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  275725             :           which obtained via fast binary file I/O from disk.
  275726             :        */
  275727             :        // SgMemberFunctionRefExp( SgMemberFunctionRefExpStorageClass& source );
  275728             : 
  275729             : 
  275730             : 
  275731             : 
  275732             : 
  275733             :  // JH (10/24/2005): methods added to support the ast file IO
  275734             :     private:
  275735             : 
  275736             :       /* name AST Memory Allocation Support Functions
  275737             :           \brief Memory allocations support....
  275738             : 
  275739             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  275740             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  275741             :           and support the AST File I/O Mechanism.
  275742             :        */
  275743             :       /* */
  275744             : 
  275745             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  275746             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  275747             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  275748             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  275749             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  275750             :           a correspinding one in the AST_FILE_IO class!
  275751             :        */
  275752             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  275753             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  275754             :       /* \brief Typedef used for low level memory access.
  275755             :        */
  275756             :        // typedef unsigned char* TestType;
  275757             : 
  275758             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  275759             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  275760             :       /* \brief Typedef used to hold memory addresses as values.
  275761             :        */
  275762             :        // typedef unsigned long  AddressType;
  275763             : 
  275764             : 
  275765             : 
  275766             :        // necessary, to have direct access to the p_freepointer and the private methods !
  275767             :       /*! \brief friend class declaration to support AST File I/O */
  275768             :           friend class AST_FILE_IO;
  275769             : 
  275770             :       /*! \brief friend class declaration to support AST File I/O */
  275771             :           friend class SgMemberFunctionRefExpStorageClass;
  275772             : 
  275773             :       /*! \brief friend class declaration to support AST File I/O */
  275774             :           friend class AstSpecificDataManagingClass;
  275775             : 
  275776             :       /*! \brief friend class declaration to support AST File I/O */
  275777             :           friend class AstSpecificDataManagingClassStorageClass;
  275778             :     public:
  275779             :       /*! \brief IR node constructor to support AST File I/O */
  275780             :           SgMemberFunctionRefExp( const SgMemberFunctionRefExpStorageClass& source );
  275781             : 
  275782             :  // private: // JJW hack
  275783             :        /*
  275784             :           name AST Memory Allocation Support Variables
  275785             :           Memory allocations support variables 
  275786             : 
  275787             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  275788             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  275789             :           and support the AST File I/O Mechanism.
  275790             :        */
  275791             :       /* */
  275792             : 
  275793             :     public:
  275794             : 
  275795             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  275796             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  275797             :       // virtual SgNode* addRegExpAttribute();
  275798             :       /*! \brief Support for AST matching using regular expression.
  275799             : 
  275800             :           This support is incomplete and the subject of current research to define 
  275801             :           RegEx trees to support inexact matching.
  275802             :        */
  275803             :           SgMemberFunctionRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  275804             : 
  275805             : // *** COMMON CODE SECTION ENDS HERE ***
  275806             : 
  275807             : 
  275808             : // End of memberFunctionString
  275809             : // Start of memberFunctionString
  275810             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  275811             : 
  275812             :      // the generated cast function
  275813             :      // friend ROSE_DLL_API SgMemberFunctionRefExp* isSgMemberFunctionRefExp ( SgNode* s );
  275814             : 
  275815             :           typedef SgExpression base_node_type;
  275816             : 
  275817             : 
  275818             : // End of memberFunctionString
  275819             : // Start of memberFunctionString
  275820             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  275821             : 
  275822             :           SgType* get_type() const override;
  275823             : 
  275824             : 
  275825             : // End of memberFunctionString
  275826             : // Start of memberFunctionString
  275827             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  275828             : 
  275829             :           void post_construction_initialization() override;
  275830             : 
  275831             : 
  275832             : // End of memberFunctionString
  275833             : 
  275834             :      public: 
  275835             :          SgMemberFunctionSymbol* get_symbol_i() const;
  275836             :          void set_symbol_i(SgMemberFunctionSymbol* symbol_i);
  275837             : 
  275838             :      public: 
  275839             :          int get_virtual_call() const;
  275840             :          void set_virtual_call(int virtual_call);
  275841             : 
  275842             : 
  275843             :      public: 
  275844             :          int get_need_qualifier() const;
  275845             :          void set_need_qualifier(int need_qualifier);
  275846             : 
  275847             : 
  275848             : 
  275849             : 
  275850             : 
  275851             :      public: 
  275852             :          virtual ~SgMemberFunctionRefExp();
  275853             : 
  275854             : 
  275855             :      public: 
  275856             :          SgMemberFunctionRefExp(Sg_File_Info* startOfConstruct , SgMemberFunctionSymbol* symbol_i = NULL, int virtual_call = 0, SgFunctionType* function_type = NULL, int need_qualifier = true); 
  275857             :          SgMemberFunctionRefExp(SgMemberFunctionSymbol* symbol_i, int virtual_call, SgFunctionType* function_type, int need_qualifier); 
  275858             : 
  275859             :     protected:
  275860             : // Start of memberFunctionString
  275861             : SgMemberFunctionSymbol* p_symbol_i;
  275862             :           
  275863             : // End of memberFunctionString
  275864             : // Start of memberFunctionString
  275865             : int p_virtual_call;
  275866             :           
  275867             : // End of memberFunctionString
  275868             : // Start of memberFunctionString
  275869             : SgFunctionType* p_function_type;
  275870             :           
  275871             : // End of memberFunctionString
  275872             : // Start of memberFunctionString
  275873             : int p_need_qualifier;
  275874             :           
  275875             : // End of memberFunctionString
  275876             : // Start of memberFunctionString
  275877             : int p_name_qualification_length;
  275878             :           
  275879             : // End of memberFunctionString
  275880             : // Start of memberFunctionString
  275881             : bool p_type_elaboration_required;
  275882             :           
  275883             : // End of memberFunctionString
  275884             : // Start of memberFunctionString
  275885             : bool p_global_qualification_required;
  275886             :           
  275887             : // End of memberFunctionString
  275888             : 
  275889             :     friend struct Rose::Traits::generated::describe_node_t<SgMemberFunctionRefExp>;
  275890             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionRefExp, SgMemberFunctionSymbol*,&SgMemberFunctionRefExp::p_symbol_i>;
  275891             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionRefExp, int,&SgMemberFunctionRefExp::p_virtual_call>;
  275892             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionRefExp, SgFunctionType*,&SgMemberFunctionRefExp::p_function_type>;
  275893             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionRefExp, int,&SgMemberFunctionRefExp::p_need_qualifier>;
  275894             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionRefExp, int,&SgMemberFunctionRefExp::p_name_qualification_length>;
  275895             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionRefExp, bool,&SgMemberFunctionRefExp::p_type_elaboration_required>;
  275896             :     friend struct Rose::Traits::generated::describe_field_t<SgMemberFunctionRefExp, bool,&SgMemberFunctionRefExp::p_global_qualification_required>;
  275897             : 
  275898             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275899             : 
  275900             : 
  275901             :    };
  275902             : #endif
  275903             : 
  275904             : // postdeclarations for SgMemberFunctionRefExp
  275905             : 
  275906             : /* #line 275907 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275907             : 
  275908             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  275909             : 
  275910             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275911             : 
  275912             : 
  275913             : /* #line 275914 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275914             : 
  275915             : 
  275916             : 
  275917             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275918             : 
  275919             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  275920             : //      This code is automatically generated for each 
  275921             : //      terminal and non-terminal within the defined 
  275922             : //      grammar.  There is a simple way to change the 
  275923             : //      code to fix bugs etc.  See the ROSE README file
  275924             : //      for directions.
  275925             : 
  275926             : // tps: (02/22/2010): Adding DLL export requirements
  275927             : #include "rosedll.h"
  275928             : 
  275929             : // predeclarations for SgValueExp
  275930             : 
  275931             : /* #line 275932 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275932             : 
  275933             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  275934             : 
  275935             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  275936             : 
  275937             : #if 1
  275938             : // Class Definition for SgValueExp
  275939             : class ROSE_DLL_API SgValueExp  : public SgExpression
  275940             :    {
  275941             :      public:
  275942             : 
  275943             : 
  275944             : /* #line 275945 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  275945             : 
  275946             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  275947             : // Start of memberFunctionString
  275948             : /* #line 538 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  275949             : 
  275950             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  275951             :           virtual unsigned int cfgIndexForEnd() const override;
  275952             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  275953             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  275954             : #endif
  275955             : 
  275956             :        // DQ (2/12/2011): Added const so that this could be called in get_mangled() (and more generally).
  275957             :        // DQ (8/18/2009): Added support to get the constant folded value as a string instead of the expression tree.
  275958             :        // std::string get_constant_folded_value_as_string();
  275959             :           std::string get_constant_folded_value_as_string() const;
  275960             : 
  275961             : 
  275962             : 
  275963             : // End of memberFunctionString
  275964             : // Start of memberFunctionString
  275965             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  275966             : 
  275967             : // *** COMMON CODE SECTION BEGINS HERE ***
  275968             : 
  275969             :     public:
  275970             : 
  275971             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  275972             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  275973             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  275974             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  275975             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  275976             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  275977             : 
  275978             :       /*! \brief returns a string representing the class name */
  275979             :           virtual std::string class_name() const override;
  275980             : 
  275981             :       /*! \brief returns new style SageIII enum values */
  275982             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  275983             : 
  275984             :       /*! \brief static variant value */
  275985             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  275986             :        // static const VariantT static_variant = V_SgValueExp;
  275987             :           enum { static_variant = V_SgValueExp };
  275988             : 
  275989             :        /* the generated cast function */
  275990             :       /*! \brief Casts pointer from base class to derived class */
  275991             :           ROSE_DLL_API friend       SgValueExp* isSgValueExp(       SgNode * s );
  275992             : 
  275993             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  275994             :           ROSE_DLL_API friend const SgValueExp* isSgValueExp( const SgNode * s );
  275995             : 
  275996             :      // ******************************************
  275997             :      // * Memory Pool / New / Delete
  275998             :      // ******************************************
  275999             : 
  276000             :      public:
  276001             :           /// \private
  276002             :           static const unsigned pool_size; //
  276003             :           /// \private
  276004             :           static std::vector<unsigned char *> pools; //
  276005             :           /// \private
  276006             :           static SgValueExp * next_node; // 
  276007             : 
  276008             :           /// \private
  276009             :           static unsigned long initializeStorageClassArray(SgValueExpStorageClass *); //
  276010             : 
  276011             :           /// \private
  276012             :           static void clearMemoryPool(); //
  276013             :           static void deleteMemoryPool(); //
  276014             : 
  276015             :           /// \private
  276016             :           static void extendMemoryPoolForFileIO(); //
  276017             : 
  276018             :           /// \private
  276019             :           static SgValueExp * getPointerFromGlobalIndex(unsigned long); //
  276020             :           /// \private
  276021             :           static SgValueExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  276022             : 
  276023             :           /// \private
  276024             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  276025             :           /// \private
  276026             :           static void resetValidFreepointers(); //
  276027             :           /// \private
  276028             :           static unsigned long getNumberOfLastValidPointer(); //
  276029             : 
  276030             : 
  276031             : #if defined(INLINE_FUNCTIONS)
  276032             :       /*! \brief returns pointer to newly allocated IR node */
  276033             :           inline void *operator new (size_t size);
  276034             : #else
  276035             :       /*! \brief returns pointer to newly allocated IR node */
  276036             :           void *operator new (size_t size);
  276037             : #endif
  276038             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  276039             :           void operator delete (void* pointer, size_t size);
  276040             : 
  276041             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  276042           0 :           void operator delete (void* pointer)
  276043             :              {
  276044             :             // This is the generated delete operator...
  276045           0 :                SgValueExp::operator delete (pointer,sizeof(SgValueExp));
  276046             :              }
  276047             : 
  276048             :       /*! \brief Returns the total number of IR nodes of this type */
  276049             :           static size_t numberOfNodes();
  276050             : 
  276051             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  276052             :           static size_t memoryUsage();
  276053             : 
  276054             :       // End of scope which started in IR nodes specific code 
  276055             :       /* */
  276056             : 
  276057             :       /* name Internal Functions
  276058             :           \brief Internal functions ... incomplete-documentation
  276059             : 
  276060             :           These functions have been made public as part of the design, but they are suggested for internal use 
  276061             :           or by particularly knowledgeable users for specialized tools or applications.
  276062             : 
  276063             :           \internal We could not make these private because they are required by user for special purposes. And 
  276064             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  276065             :          
  276066             :        */
  276067             : 
  276068             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  276069             :        // overridden in every class by *generated* implementation
  276070             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  276071             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  276072             :        // MS: 06/28/02 container of names of variables or container indices 
  276073             :        // used used in the traversal to access AST successor nodes
  276074             :        // overridden in every class by *generated* implementation
  276075             :       /*! \brief container of names of variables or container indices used used in the traversal
  276076             :           to access AST successor nodes overridden in every class by *generated* implementation */
  276077             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  276078             : 
  276079             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  276080             :        // than all the vector copies. The implementation for these functions is generated for each class.
  276081             :       /*! \brief return number of children in the traversal successor list */
  276082             :           virtual size_t get_numberOfTraversalSuccessors() override;
  276083             :       /*! \brief index-based access to traversal successors by index number */
  276084             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  276085             :       /*! \brief index-based access to traversal successors by child node */
  276086             :           virtual size_t get_childIndex(SgNode *child) override;
  276087             : 
  276088             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  276089             :        // MS: 08/16/2002 method for generating RTI information
  276090             :       /*! \brief return C++ Runtime-Time-Information */
  276091             :           virtual RTIReturnType roseRTI() override;
  276092             : #endif
  276093             :       /* */
  276094             : 
  276095             : 
  276096             : 
  276097             :       /* name Deprecated Functions
  276098             :           \brief Deprecated functions ... incomplete-documentation
  276099             : 
  276100             :           These functions have been deprecated from use.
  276101             :        */
  276102             :       /* */
  276103             : 
  276104             :       /*! returns a C style string (char*) representing the class name */
  276105             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  276106             : 
  276107             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  276108             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  276109             : #if 0
  276110             :       /*! returns old style Sage II enum values */
  276111             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  276112             :       /*! returns old style Sage II enum values */
  276113             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  276114             : #endif
  276115             :       /* */
  276116             : 
  276117             : 
  276118             : 
  276119             : 
  276120             :      public:
  276121             :       /* name Traversal Support Functions
  276122             :           \brief Traversal support functions ... incomplete-documentation
  276123             : 
  276124             :           These functions have been made public as part of the design, but they are suggested for internal use 
  276125             :           or by particularly knowledgable users for specialized tools or applications.
  276126             :        */
  276127             :       /* */
  276128             : 
  276129             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  276130             :        // (inferior to ROSE traversal mechanism, experimental).
  276131             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  276132             :        */
  276133             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  276134             : 
  276135             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  276136             :       /*! \brief support for the classic visitor pattern done in GoF */
  276137             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  276138             : 
  276139             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  276140             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  276141             :        */
  276142             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  276143             : 
  276144             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  276145             :        */
  276146             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  276147             : 
  276148             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  276149             :        // This traversal helps support internal tools that call static member functions.
  276150             :        // note: this function operates on the memory pools.
  276151             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  276152             :        */
  276153             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  276154             :       /* */
  276155             : 
  276156             : 
  276157             :      public:
  276158             :       /* name Memory Allocation Functions
  276159             :           \brief Memory allocations functions ... incomplete-documentation
  276160             : 
  276161             :           These functions have been made public as part of the design, but they are suggested for internal use 
  276162             :           or by particularly knowledgable users for specialized tools or applications.
  276163             :        */
  276164             :       /* */
  276165             : 
  276166             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  276167             : 
  276168             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  276169             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  276170             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  276171             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  276172             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  276173             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  276174             :           being used with the AST File I/O mechanism.
  276175             :        */
  276176             :           virtual bool isInMemoryPool() override;
  276177             : 
  276178             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  276179             : 
  276180             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  276181             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  276182             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  276183             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  276184             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  276185             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  276186             :           being used with the AST File I/O mechanism.
  276187             :        */
  276188             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  276189             : 
  276190             :       // DQ (4/30/2006): Modified to be a const function.
  276191             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  276192             : 
  276193             :           This functions is part of general support for many possible tools to operate 
  276194             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  276195             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  276196             :           less than the set of pointers used by the AST file I/O. This is part of
  276197             :           work implemented by Andreas, and support tools such as the AST graph generation.
  276198             : 
  276199             :           \warning This function can return unexpected data members and thus the 
  276200             :                    order and the number of elements is unpredicable and subject 
  276201             :                    to change.
  276202             : 
  276203             :           \returns STL vector of pairs of SgNode* and strings
  276204             :        */
  276205             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  276206             : 
  276207             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  276208             : 
  276209             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  276210             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  276211             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  276212             : 
  276213             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  276214             :                    and subject to change.
  276215             :        */
  276216             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  276217             : 
  276218             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  276219             : 
  276220             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  276221             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  276222             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  276223             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  276224             : 
  276225             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  276226             : 
  276227             :           \returns long
  276228             :        */
  276229             :           virtual long getChildIndex( SgNode* childNode ) const override;
  276230             : 
  276231             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  276232             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  276233             :       /* \brief Constructor for use by AST File I/O Mechanism
  276234             : 
  276235             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  276236             :           which obtained via fast binary file I/O from disk.
  276237             :        */
  276238             :        // SgValueExp( SgValueExpStorageClass& source );
  276239             : 
  276240             : 
  276241             : 
  276242             : 
  276243             : 
  276244             :  // JH (10/24/2005): methods added to support the ast file IO
  276245             :     private:
  276246             : 
  276247             :       /* name AST Memory Allocation Support Functions
  276248             :           \brief Memory allocations support....
  276249             : 
  276250             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  276251             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  276252             :           and support the AST File I/O Mechanism.
  276253             :        */
  276254             :       /* */
  276255             : 
  276256             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  276257             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  276258             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  276259             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  276260             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  276261             :           a correspinding one in the AST_FILE_IO class!
  276262             :        */
  276263             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  276264             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  276265             :       /* \brief Typedef used for low level memory access.
  276266             :        */
  276267             :        // typedef unsigned char* TestType;
  276268             : 
  276269             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  276270             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  276271             :       /* \brief Typedef used to hold memory addresses as values.
  276272             :        */
  276273             :        // typedef unsigned long  AddressType;
  276274             : 
  276275             : 
  276276             : 
  276277             :        // necessary, to have direct access to the p_freepointer and the private methods !
  276278             :       /*! \brief friend class declaration to support AST File I/O */
  276279             :           friend class AST_FILE_IO;
  276280             : 
  276281             :       /*! \brief friend class declaration to support AST File I/O */
  276282             :           friend class SgValueExpStorageClass;
  276283             : 
  276284             :       /*! \brief friend class declaration to support AST File I/O */
  276285             :           friend class AstSpecificDataManagingClass;
  276286             : 
  276287             :       /*! \brief friend class declaration to support AST File I/O */
  276288             :           friend class AstSpecificDataManagingClassStorageClass;
  276289             :     public:
  276290             :       /*! \brief IR node constructor to support AST File I/O */
  276291             :           SgValueExp( const SgValueExpStorageClass& source );
  276292             : 
  276293             :  // private: // JJW hack
  276294             :        /*
  276295             :           name AST Memory Allocation Support Variables
  276296             :           Memory allocations support variables 
  276297             : 
  276298             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  276299             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  276300             :           and support the AST File I/O Mechanism.
  276301             :        */
  276302             :       /* */
  276303             : 
  276304             :     public:
  276305             : 
  276306             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  276307             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  276308             :       // virtual SgNode* addRegExpAttribute();
  276309             :       /*! \brief Support for AST matching using regular expression.
  276310             : 
  276311             :           This support is incomplete and the subject of current research to define 
  276312             :           RegEx trees to support inexact matching.
  276313             :        */
  276314             :           SgValueExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  276315             : 
  276316             : // *** COMMON CODE SECTION ENDS HERE ***
  276317             : 
  276318             : 
  276319             : // End of memberFunctionString
  276320             : // Start of memberFunctionString
  276321             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  276322             : 
  276323             :      // the generated cast function
  276324             :      // friend ROSE_DLL_API SgValueExp* isSgValueExp ( SgNode* s );
  276325             : 
  276326             :           typedef SgExpression base_node_type;
  276327             : 
  276328             : 
  276329             : // End of memberFunctionString
  276330             : // Start of memberFunctionString
  276331             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  276332             : 
  276333             :           void post_construction_initialization() override;
  276334             : 
  276335             : 
  276336             : // End of memberFunctionString
  276337             : 
  276338             :      public: 
  276339             :          SgExpression* get_originalExpressionTree() const override /* (getDataAccessFunctionPrototypeString) */;
  276340             :          void set_originalExpressionTree(SgExpression* originalExpressionTree) override /* (getDataAccessFunctionPrototypeString) */;
  276341             : 
  276342             : 
  276343             :      public: 
  276344             :          virtual ~SgValueExp();
  276345             : 
  276346             : 
  276347             :      public: 
  276348             :          SgValueExp(Sg_File_Info* startOfConstruct ); 
  276349             :          SgValueExp(); 
  276350             : 
  276351             :     protected:
  276352             : // Start of memberFunctionString
  276353             : SgExpression* p_originalExpressionTree;
  276354             :           
  276355             : // End of memberFunctionString
  276356             : 
  276357             :     friend struct Rose::Traits::generated::describe_node_t<SgValueExp>;
  276358             :     friend struct Rose::Traits::generated::describe_field_t<SgValueExp, SgExpression*,&SgValueExp::p_originalExpressionTree>;
  276359             : 
  276360             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276361             : 
  276362             : 
  276363             :    };
  276364             : #endif
  276365             : 
  276366             : // postdeclarations for SgValueExp
  276367             : 
  276368             : /* #line 276369 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276369             : 
  276370             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  276371             : 
  276372             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276373             : 
  276374             : 
  276375             : /* #line 276376 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276376             : 
  276377             : 
  276378             : 
  276379             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276380             : 
  276381             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  276382             : //      This code is automatically generated for each 
  276383             : //      terminal and non-terminal within the defined 
  276384             : //      grammar.  There is a simple way to change the 
  276385             : //      code to fix bugs etc.  See the ROSE README file
  276386             : //      for directions.
  276387             : 
  276388             : // tps: (02/22/2010): Adding DLL export requirements
  276389             : #include "rosedll.h"
  276390             : 
  276391             : // predeclarations for SgBoolValExp
  276392             : 
  276393             : /* #line 276394 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276394             : 
  276395             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  276396             : 
  276397             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276398             : 
  276399             : #if 1
  276400             : // Class Definition for SgBoolValExp
  276401             : class ROSE_DLL_API SgBoolValExp  : public SgValueExp
  276402             :    {
  276403             :      public:
  276404             : 
  276405             : 
  276406             : /* #line 276407 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276407             : 
  276408             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  276409             : // Start of memberFunctionString
  276410             : /* #line 553 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  276411             : 
  276412             : 
  276413             : 
  276414             : // End of memberFunctionString
  276415             : // Start of memberFunctionString
  276416             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  276417             : 
  276418             : // *** COMMON CODE SECTION BEGINS HERE ***
  276419             : 
  276420             :     public:
  276421             : 
  276422             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  276423             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  276424             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  276425             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  276426             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  276427             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  276428             : 
  276429             :       /*! \brief returns a string representing the class name */
  276430             :           virtual std::string class_name() const override;
  276431             : 
  276432             :       /*! \brief returns new style SageIII enum values */
  276433             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  276434             : 
  276435             :       /*! \brief static variant value */
  276436             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  276437             :        // static const VariantT static_variant = V_SgBoolValExp;
  276438             :           enum { static_variant = V_SgBoolValExp };
  276439             : 
  276440             :        /* the generated cast function */
  276441             :       /*! \brief Casts pointer from base class to derived class */
  276442             :           ROSE_DLL_API friend       SgBoolValExp* isSgBoolValExp(       SgNode * s );
  276443             : 
  276444             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  276445             :           ROSE_DLL_API friend const SgBoolValExp* isSgBoolValExp( const SgNode * s );
  276446             : 
  276447             :      // ******************************************
  276448             :      // * Memory Pool / New / Delete
  276449             :      // ******************************************
  276450             : 
  276451             :      public:
  276452             :           /// \private
  276453             :           static const unsigned pool_size; //
  276454             :           /// \private
  276455             :           static std::vector<unsigned char *> pools; //
  276456             :           /// \private
  276457             :           static SgBoolValExp * next_node; // 
  276458             : 
  276459             :           /// \private
  276460             :           static unsigned long initializeStorageClassArray(SgBoolValExpStorageClass *); //
  276461             : 
  276462             :           /// \private
  276463             :           static void clearMemoryPool(); //
  276464             :           static void deleteMemoryPool(); //
  276465             : 
  276466             :           /// \private
  276467             :           static void extendMemoryPoolForFileIO(); //
  276468             : 
  276469             :           /// \private
  276470             :           static SgBoolValExp * getPointerFromGlobalIndex(unsigned long); //
  276471             :           /// \private
  276472             :           static SgBoolValExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  276473             : 
  276474             :           /// \private
  276475             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  276476             :           /// \private
  276477             :           static void resetValidFreepointers(); //
  276478             :           /// \private
  276479             :           static unsigned long getNumberOfLastValidPointer(); //
  276480             : 
  276481             : 
  276482             : #if defined(INLINE_FUNCTIONS)
  276483             :       /*! \brief returns pointer to newly allocated IR node */
  276484             :           inline void *operator new (size_t size);
  276485             : #else
  276486             :       /*! \brief returns pointer to newly allocated IR node */
  276487             :           void *operator new (size_t size);
  276488             : #endif
  276489             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  276490             :           void operator delete (void* pointer, size_t size);
  276491             : 
  276492             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  276493        2068 :           void operator delete (void* pointer)
  276494             :              {
  276495             :             // This is the generated delete operator...
  276496        2068 :                SgBoolValExp::operator delete (pointer,sizeof(SgBoolValExp));
  276497             :              }
  276498             : 
  276499             :       /*! \brief Returns the total number of IR nodes of this type */
  276500             :           static size_t numberOfNodes();
  276501             : 
  276502             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  276503             :           static size_t memoryUsage();
  276504             : 
  276505             :       // End of scope which started in IR nodes specific code 
  276506             :       /* */
  276507             : 
  276508             :       /* name Internal Functions
  276509             :           \brief Internal functions ... incomplete-documentation
  276510             : 
  276511             :           These functions have been made public as part of the design, but they are suggested for internal use 
  276512             :           or by particularly knowledgeable users for specialized tools or applications.
  276513             : 
  276514             :           \internal We could not make these private because they are required by user for special purposes. And 
  276515             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  276516             :          
  276517             :        */
  276518             : 
  276519             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  276520             :        // overridden in every class by *generated* implementation
  276521             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  276522             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  276523             :        // MS: 06/28/02 container of names of variables or container indices 
  276524             :        // used used in the traversal to access AST successor nodes
  276525             :        // overridden in every class by *generated* implementation
  276526             :       /*! \brief container of names of variables or container indices used used in the traversal
  276527             :           to access AST successor nodes overridden in every class by *generated* implementation */
  276528             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  276529             : 
  276530             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  276531             :        // than all the vector copies. The implementation for these functions is generated for each class.
  276532             :       /*! \brief return number of children in the traversal successor list */
  276533             :           virtual size_t get_numberOfTraversalSuccessors() override;
  276534             :       /*! \brief index-based access to traversal successors by index number */
  276535             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  276536             :       /*! \brief index-based access to traversal successors by child node */
  276537             :           virtual size_t get_childIndex(SgNode *child) override;
  276538             : 
  276539             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  276540             :        // MS: 08/16/2002 method for generating RTI information
  276541             :       /*! \brief return C++ Runtime-Time-Information */
  276542             :           virtual RTIReturnType roseRTI() override;
  276543             : #endif
  276544             :       /* */
  276545             : 
  276546             : 
  276547             : 
  276548             :       /* name Deprecated Functions
  276549             :           \brief Deprecated functions ... incomplete-documentation
  276550             : 
  276551             :           These functions have been deprecated from use.
  276552             :        */
  276553             :       /* */
  276554             : 
  276555             :       /*! returns a C style string (char*) representing the class name */
  276556             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  276557             : 
  276558             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  276559             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  276560             : #if 0
  276561             :       /*! returns old style Sage II enum values */
  276562             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  276563             :       /*! returns old style Sage II enum values */
  276564             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  276565             : #endif
  276566             :       /* */
  276567             : 
  276568             : 
  276569             : 
  276570             : 
  276571             :      public:
  276572             :       /* name Traversal Support Functions
  276573             :           \brief Traversal support functions ... incomplete-documentation
  276574             : 
  276575             :           These functions have been made public as part of the design, but they are suggested for internal use 
  276576             :           or by particularly knowledgable users for specialized tools or applications.
  276577             :        */
  276578             :       /* */
  276579             : 
  276580             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  276581             :        // (inferior to ROSE traversal mechanism, experimental).
  276582             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  276583             :        */
  276584             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  276585             : 
  276586             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  276587             :       /*! \brief support for the classic visitor pattern done in GoF */
  276588             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  276589             : 
  276590             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  276591             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  276592             :        */
  276593             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  276594             : 
  276595             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  276596             :        */
  276597             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  276598             : 
  276599             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  276600             :        // This traversal helps support internal tools that call static member functions.
  276601             :        // note: this function operates on the memory pools.
  276602             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  276603             :        */
  276604             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  276605             :       /* */
  276606             : 
  276607             : 
  276608             :      public:
  276609             :       /* name Memory Allocation Functions
  276610             :           \brief Memory allocations functions ... incomplete-documentation
  276611             : 
  276612             :           These functions have been made public as part of the design, but they are suggested for internal use 
  276613             :           or by particularly knowledgable users for specialized tools or applications.
  276614             :        */
  276615             :       /* */
  276616             : 
  276617             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  276618             : 
  276619             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  276620             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  276621             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  276622             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  276623             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  276624             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  276625             :           being used with the AST File I/O mechanism.
  276626             :        */
  276627             :           virtual bool isInMemoryPool() override;
  276628             : 
  276629             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  276630             : 
  276631             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  276632             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  276633             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  276634             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  276635             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  276636             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  276637             :           being used with the AST File I/O mechanism.
  276638             :        */
  276639             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  276640             : 
  276641             :       // DQ (4/30/2006): Modified to be a const function.
  276642             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  276643             : 
  276644             :           This functions is part of general support for many possible tools to operate 
  276645             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  276646             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  276647             :           less than the set of pointers used by the AST file I/O. This is part of
  276648             :           work implemented by Andreas, and support tools such as the AST graph generation.
  276649             : 
  276650             :           \warning This function can return unexpected data members and thus the 
  276651             :                    order and the number of elements is unpredicable and subject 
  276652             :                    to change.
  276653             : 
  276654             :           \returns STL vector of pairs of SgNode* and strings
  276655             :        */
  276656             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  276657             : 
  276658             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  276659             : 
  276660             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  276661             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  276662             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  276663             : 
  276664             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  276665             :                    and subject to change.
  276666             :        */
  276667             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  276668             : 
  276669             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  276670             : 
  276671             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  276672             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  276673             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  276674             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  276675             : 
  276676             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  276677             : 
  276678             :           \returns long
  276679             :        */
  276680             :           virtual long getChildIndex( SgNode* childNode ) const override;
  276681             : 
  276682             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  276683             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  276684             :       /* \brief Constructor for use by AST File I/O Mechanism
  276685             : 
  276686             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  276687             :           which obtained via fast binary file I/O from disk.
  276688             :        */
  276689             :        // SgBoolValExp( SgBoolValExpStorageClass& source );
  276690             : 
  276691             : 
  276692             : 
  276693             : 
  276694             : 
  276695             :  // JH (10/24/2005): methods added to support the ast file IO
  276696             :     private:
  276697             : 
  276698             :       /* name AST Memory Allocation Support Functions
  276699             :           \brief Memory allocations support....
  276700             : 
  276701             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  276702             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  276703             :           and support the AST File I/O Mechanism.
  276704             :        */
  276705             :       /* */
  276706             : 
  276707             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  276708             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  276709             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  276710             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  276711             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  276712             :           a correspinding one in the AST_FILE_IO class!
  276713             :        */
  276714             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  276715             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  276716             :       /* \brief Typedef used for low level memory access.
  276717             :        */
  276718             :        // typedef unsigned char* TestType;
  276719             : 
  276720             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  276721             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  276722             :       /* \brief Typedef used to hold memory addresses as values.
  276723             :        */
  276724             :        // typedef unsigned long  AddressType;
  276725             : 
  276726             : 
  276727             : 
  276728             :        // necessary, to have direct access to the p_freepointer and the private methods !
  276729             :       /*! \brief friend class declaration to support AST File I/O */
  276730             :           friend class AST_FILE_IO;
  276731             : 
  276732             :       /*! \brief friend class declaration to support AST File I/O */
  276733             :           friend class SgBoolValExpStorageClass;
  276734             : 
  276735             :       /*! \brief friend class declaration to support AST File I/O */
  276736             :           friend class AstSpecificDataManagingClass;
  276737             : 
  276738             :       /*! \brief friend class declaration to support AST File I/O */
  276739             :           friend class AstSpecificDataManagingClassStorageClass;
  276740             :     public:
  276741             :       /*! \brief IR node constructor to support AST File I/O */
  276742             :           SgBoolValExp( const SgBoolValExpStorageClass& source );
  276743             : 
  276744             :  // private: // JJW hack
  276745             :        /*
  276746             :           name AST Memory Allocation Support Variables
  276747             :           Memory allocations support variables 
  276748             : 
  276749             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  276750             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  276751             :           and support the AST File I/O Mechanism.
  276752             :        */
  276753             :       /* */
  276754             : 
  276755             :     public:
  276756             : 
  276757             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  276758             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  276759             :       // virtual SgNode* addRegExpAttribute();
  276760             :       /*! \brief Support for AST matching using regular expression.
  276761             : 
  276762             :           This support is incomplete and the subject of current research to define 
  276763             :           RegEx trees to support inexact matching.
  276764             :        */
  276765             :           SgBoolValExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  276766             : 
  276767             : // *** COMMON CODE SECTION ENDS HERE ***
  276768             : 
  276769             : 
  276770             : // End of memberFunctionString
  276771             : // Start of memberFunctionString
  276772             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  276773             : 
  276774             :      // the generated cast function
  276775             :      // friend ROSE_DLL_API SgBoolValExp* isSgBoolValExp ( SgNode* s );
  276776             : 
  276777             :           typedef SgValueExp base_node_type;
  276778             : 
  276779             : 
  276780             : // End of memberFunctionString
  276781             : // Start of memberFunctionString
  276782             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  276783             : 
  276784             :           SgType* get_type() const override;
  276785             : 
  276786             : 
  276787             : // End of memberFunctionString
  276788             : // Start of memberFunctionString
  276789             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  276790             : 
  276791             :           void post_construction_initialization() override;
  276792             : 
  276793             : 
  276794             : // End of memberFunctionString
  276795             : 
  276796             :      public: 
  276797             :          int get_value() const;
  276798             :          void set_value(int value);
  276799             : 
  276800             : 
  276801             :      public: 
  276802             :          virtual ~SgBoolValExp();
  276803             : 
  276804             : 
  276805             :      public: 
  276806             :          SgBoolValExp(Sg_File_Info* startOfConstruct , int value = 0); 
  276807             :          SgBoolValExp(int value); 
  276808             : 
  276809             :     protected:
  276810             : // Start of memberFunctionString
  276811             : int p_value;
  276812             :           
  276813             : // End of memberFunctionString
  276814             : 
  276815             :     friend struct Rose::Traits::generated::describe_node_t<SgBoolValExp>;
  276816             :     friend struct Rose::Traits::generated::describe_field_t<SgBoolValExp, int,&SgBoolValExp::p_value>;
  276817             : 
  276818             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276819             : 
  276820             : 
  276821             :    };
  276822             : #endif
  276823             : 
  276824             : // postdeclarations for SgBoolValExp
  276825             : 
  276826             : /* #line 276827 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276827             : 
  276828             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  276829             : 
  276830             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276831             : 
  276832             : 
  276833             : /* #line 276834 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276834             : 
  276835             : 
  276836             : 
  276837             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276838             : 
  276839             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  276840             : //      This code is automatically generated for each 
  276841             : //      terminal and non-terminal within the defined 
  276842             : //      grammar.  There is a simple way to change the 
  276843             : //      code to fix bugs etc.  See the ROSE README file
  276844             : //      for directions.
  276845             : 
  276846             : // tps: (02/22/2010): Adding DLL export requirements
  276847             : #include "rosedll.h"
  276848             : 
  276849             : // predeclarations for SgStringVal
  276850             : 
  276851             : /* #line 276852 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276852             : 
  276853             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  276854             : 
  276855             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  276856             : 
  276857             : #if 1
  276858             : // Class Definition for SgStringVal
  276859             : class ROSE_DLL_API SgStringVal  : public SgValueExp
  276860             :    {
  276861             :      public:
  276862             : 
  276863             : 
  276864             : /* #line 276865 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  276865             : 
  276866             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  276867             : // Start of memberFunctionString
  276868             : /* #line 565 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  276869             : 
  276870             :       // DQ (3/25/2006): This is not generated by ROSETTA automatically (using C++ style string type)
  276871             :       // SgStringVal( Sg_File_Info* file_info = NULL, char* value = NULL );
  276872             :       // ~SgStringVal();
  276873             : 
  276874             :        // get lvalue
  276875             :           virtual bool isLValue() const override;
  276876             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  276877             : 
  276878             :        // PP (4/25/21) implement usesSingleQuote and usesDoubleQuote based on
  276879             :        //              stringDelimiter for backward compatibility.
  276880          93 :           bool get_usesSingleQuotes() const    { return get_stringDelimiter() == '\''; }
  276881           0 :           bool get_usesDoubleQuotes() const    { return get_stringDelimiter() == '"'; }
  276882             : 
  276883             :           void set_usesSingleQuotes(bool usesSingleQuotes);
  276884             :           void set_usesDoubleQuotes(bool usesDoubleQuotes);
  276885             : 
  276886             : 
  276887             : // End of memberFunctionString
  276888             : // Start of memberFunctionString
  276889             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  276890             : 
  276891             : // *** COMMON CODE SECTION BEGINS HERE ***
  276892             : 
  276893             :     public:
  276894             : 
  276895             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  276896             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  276897             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  276898             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  276899             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  276900             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  276901             : 
  276902             :       /*! \brief returns a string representing the class name */
  276903             :           virtual std::string class_name() const override;
  276904             : 
  276905             :       /*! \brief returns new style SageIII enum values */
  276906             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  276907             : 
  276908             :       /*! \brief static variant value */
  276909             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  276910             :        // static const VariantT static_variant = V_SgStringVal;
  276911             :           enum { static_variant = V_SgStringVal };
  276912             : 
  276913             :        /* the generated cast function */
  276914             :       /*! \brief Casts pointer from base class to derived class */
  276915             :           ROSE_DLL_API friend       SgStringVal* isSgStringVal(       SgNode * s );
  276916             : 
  276917             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  276918             :           ROSE_DLL_API friend const SgStringVal* isSgStringVal( const SgNode * s );
  276919             : 
  276920             :      // ******************************************
  276921             :      // * Memory Pool / New / Delete
  276922             :      // ******************************************
  276923             : 
  276924             :      public:
  276925             :           /// \private
  276926             :           static const unsigned pool_size; //
  276927             :           /// \private
  276928             :           static std::vector<unsigned char *> pools; //
  276929             :           /// \private
  276930             :           static SgStringVal * next_node; // 
  276931             : 
  276932             :           /// \private
  276933             :           static unsigned long initializeStorageClassArray(SgStringValStorageClass *); //
  276934             : 
  276935             :           /// \private
  276936             :           static void clearMemoryPool(); //
  276937             :           static void deleteMemoryPool(); //
  276938             : 
  276939             :           /// \private
  276940             :           static void extendMemoryPoolForFileIO(); //
  276941             : 
  276942             :           /// \private
  276943             :           static SgStringVal * getPointerFromGlobalIndex(unsigned long); //
  276944             :           /// \private
  276945             :           static SgStringVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  276946             : 
  276947             :           /// \private
  276948             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  276949             :           /// \private
  276950             :           static void resetValidFreepointers(); //
  276951             :           /// \private
  276952             :           static unsigned long getNumberOfLastValidPointer(); //
  276953             : 
  276954             : 
  276955             : #if defined(INLINE_FUNCTIONS)
  276956             :       /*! \brief returns pointer to newly allocated IR node */
  276957             :           inline void *operator new (size_t size);
  276958             : #else
  276959             :       /*! \brief returns pointer to newly allocated IR node */
  276960             :           void *operator new (size_t size);
  276961             : #endif
  276962             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  276963             :           void operator delete (void* pointer, size_t size);
  276964             : 
  276965             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  276966         368 :           void operator delete (void* pointer)
  276967             :              {
  276968             :             // This is the generated delete operator...
  276969         368 :                SgStringVal::operator delete (pointer,sizeof(SgStringVal));
  276970             :              }
  276971             : 
  276972             :       /*! \brief Returns the total number of IR nodes of this type */
  276973             :           static size_t numberOfNodes();
  276974             : 
  276975             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  276976             :           static size_t memoryUsage();
  276977             : 
  276978             :       // End of scope which started in IR nodes specific code 
  276979             :       /* */
  276980             : 
  276981             :       /* name Internal Functions
  276982             :           \brief Internal functions ... incomplete-documentation
  276983             : 
  276984             :           These functions have been made public as part of the design, but they are suggested for internal use 
  276985             :           or by particularly knowledgeable users for specialized tools or applications.
  276986             : 
  276987             :           \internal We could not make these private because they are required by user for special purposes. And 
  276988             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  276989             :          
  276990             :        */
  276991             : 
  276992             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  276993             :        // overridden in every class by *generated* implementation
  276994             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  276995             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  276996             :        // MS: 06/28/02 container of names of variables or container indices 
  276997             :        // used used in the traversal to access AST successor nodes
  276998             :        // overridden in every class by *generated* implementation
  276999             :       /*! \brief container of names of variables or container indices used used in the traversal
  277000             :           to access AST successor nodes overridden in every class by *generated* implementation */
  277001             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  277002             : 
  277003             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  277004             :        // than all the vector copies. The implementation for these functions is generated for each class.
  277005             :       /*! \brief return number of children in the traversal successor list */
  277006             :           virtual size_t get_numberOfTraversalSuccessors() override;
  277007             :       /*! \brief index-based access to traversal successors by index number */
  277008             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  277009             :       /*! \brief index-based access to traversal successors by child node */
  277010             :           virtual size_t get_childIndex(SgNode *child) override;
  277011             : 
  277012             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  277013             :        // MS: 08/16/2002 method for generating RTI information
  277014             :       /*! \brief return C++ Runtime-Time-Information */
  277015             :           virtual RTIReturnType roseRTI() override;
  277016             : #endif
  277017             :       /* */
  277018             : 
  277019             : 
  277020             : 
  277021             :       /* name Deprecated Functions
  277022             :           \brief Deprecated functions ... incomplete-documentation
  277023             : 
  277024             :           These functions have been deprecated from use.
  277025             :        */
  277026             :       /* */
  277027             : 
  277028             :       /*! returns a C style string (char*) representing the class name */
  277029             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  277030             : 
  277031             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  277032             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  277033             : #if 0
  277034             :       /*! returns old style Sage II enum values */
  277035             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  277036             :       /*! returns old style Sage II enum values */
  277037             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  277038             : #endif
  277039             :       /* */
  277040             : 
  277041             : 
  277042             : 
  277043             : 
  277044             :      public:
  277045             :       /* name Traversal Support Functions
  277046             :           \brief Traversal support functions ... incomplete-documentation
  277047             : 
  277048             :           These functions have been made public as part of the design, but they are suggested for internal use 
  277049             :           or by particularly knowledgable users for specialized tools or applications.
  277050             :        */
  277051             :       /* */
  277052             : 
  277053             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  277054             :        // (inferior to ROSE traversal mechanism, experimental).
  277055             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  277056             :        */
  277057             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  277058             : 
  277059             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  277060             :       /*! \brief support for the classic visitor pattern done in GoF */
  277061             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  277062             : 
  277063             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  277064             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  277065             :        */
  277066             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  277067             : 
  277068             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  277069             :        */
  277070             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  277071             : 
  277072             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  277073             :        // This traversal helps support internal tools that call static member functions.
  277074             :        // note: this function operates on the memory pools.
  277075             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  277076             :        */
  277077             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  277078             :       /* */
  277079             : 
  277080             : 
  277081             :      public:
  277082             :       /* name Memory Allocation Functions
  277083             :           \brief Memory allocations functions ... incomplete-documentation
  277084             : 
  277085             :           These functions have been made public as part of the design, but they are suggested for internal use 
  277086             :           or by particularly knowledgable users for specialized tools or applications.
  277087             :        */
  277088             :       /* */
  277089             : 
  277090             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  277091             : 
  277092             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  277093             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  277094             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  277095             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  277096             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  277097             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  277098             :           being used with the AST File I/O mechanism.
  277099             :        */
  277100             :           virtual bool isInMemoryPool() override;
  277101             : 
  277102             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  277103             : 
  277104             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  277105             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  277106             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  277107             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  277108             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  277109             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  277110             :           being used with the AST File I/O mechanism.
  277111             :        */
  277112             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  277113             : 
  277114             :       // DQ (4/30/2006): Modified to be a const function.
  277115             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  277116             : 
  277117             :           This functions is part of general support for many possible tools to operate 
  277118             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  277119             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  277120             :           less than the set of pointers used by the AST file I/O. This is part of
  277121             :           work implemented by Andreas, and support tools such as the AST graph generation.
  277122             : 
  277123             :           \warning This function can return unexpected data members and thus the 
  277124             :                    order and the number of elements is unpredicable and subject 
  277125             :                    to change.
  277126             : 
  277127             :           \returns STL vector of pairs of SgNode* and strings
  277128             :        */
  277129             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  277130             : 
  277131             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  277132             : 
  277133             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  277134             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  277135             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  277136             : 
  277137             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  277138             :                    and subject to change.
  277139             :        */
  277140             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  277141             : 
  277142             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  277143             : 
  277144             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  277145             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  277146             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  277147             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  277148             : 
  277149             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  277150             : 
  277151             :           \returns long
  277152             :        */
  277153             :           virtual long getChildIndex( SgNode* childNode ) const override;
  277154             : 
  277155             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  277156             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  277157             :       /* \brief Constructor for use by AST File I/O Mechanism
  277158             : 
  277159             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  277160             :           which obtained via fast binary file I/O from disk.
  277161             :        */
  277162             :        // SgStringVal( SgStringValStorageClass& source );
  277163             : 
  277164             : 
  277165             : 
  277166             : 
  277167             : 
  277168             :  // JH (10/24/2005): methods added to support the ast file IO
  277169             :     private:
  277170             : 
  277171             :       /* name AST Memory Allocation Support Functions
  277172             :           \brief Memory allocations support....
  277173             : 
  277174             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  277175             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  277176             :           and support the AST File I/O Mechanism.
  277177             :        */
  277178             :       /* */
  277179             : 
  277180             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  277181             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  277182             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  277183             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  277184             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  277185             :           a correspinding one in the AST_FILE_IO class!
  277186             :        */
  277187             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  277188             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  277189             :       /* \brief Typedef used for low level memory access.
  277190             :        */
  277191             :        // typedef unsigned char* TestType;
  277192             : 
  277193             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  277194             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  277195             :       /* \brief Typedef used to hold memory addresses as values.
  277196             :        */
  277197             :        // typedef unsigned long  AddressType;
  277198             : 
  277199             : 
  277200             : 
  277201             :        // necessary, to have direct access to the p_freepointer and the private methods !
  277202             :       /*! \brief friend class declaration to support AST File I/O */
  277203             :           friend class AST_FILE_IO;
  277204             : 
  277205             :       /*! \brief friend class declaration to support AST File I/O */
  277206             :           friend class SgStringValStorageClass;
  277207             : 
  277208             :       /*! \brief friend class declaration to support AST File I/O */
  277209             :           friend class AstSpecificDataManagingClass;
  277210             : 
  277211             :       /*! \brief friend class declaration to support AST File I/O */
  277212             :           friend class AstSpecificDataManagingClassStorageClass;
  277213             :     public:
  277214             :       /*! \brief IR node constructor to support AST File I/O */
  277215             :           SgStringVal( const SgStringValStorageClass& source );
  277216             : 
  277217             :  // private: // JJW hack
  277218             :        /*
  277219             :           name AST Memory Allocation Support Variables
  277220             :           Memory allocations support variables 
  277221             : 
  277222             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  277223             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  277224             :           and support the AST File I/O Mechanism.
  277225             :        */
  277226             :       /* */
  277227             : 
  277228             :     public:
  277229             : 
  277230             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  277231             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  277232             :       // virtual SgNode* addRegExpAttribute();
  277233             :       /*! \brief Support for AST matching using regular expression.
  277234             : 
  277235             :           This support is incomplete and the subject of current research to define 
  277236             :           RegEx trees to support inexact matching.
  277237             :        */
  277238             :           SgStringVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  277239             : 
  277240             : // *** COMMON CODE SECTION ENDS HERE ***
  277241             : 
  277242             : 
  277243             : // End of memberFunctionString
  277244             : // Start of memberFunctionString
  277245             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  277246             : 
  277247             :      // the generated cast function
  277248             :      // friend ROSE_DLL_API SgStringVal* isSgStringVal ( SgNode* s );
  277249             : 
  277250             :           typedef SgValueExp base_node_type;
  277251             : 
  277252             : 
  277253             : // End of memberFunctionString
  277254             : // Start of memberFunctionString
  277255             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  277256             : 
  277257             :           SgType* get_type() const override;
  277258             : 
  277259             : 
  277260             : // End of memberFunctionString
  277261             : // Start of memberFunctionString
  277262             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  277263             : 
  277264             :           void post_construction_initialization() override;
  277265             : 
  277266             : 
  277267             : // End of memberFunctionString
  277268             : 
  277269             :      public: 
  277270             :          std::string get_value() const;
  277271             :          void set_value(std::string value);
  277272             : 
  277273             :      public: 
  277274             :          bool get_wcharString() const;
  277275             :          void set_wcharString(bool wcharString);
  277276             : 
  277277             :      public: 
  277278             :          char get_stringDelimiter() const;
  277279             :          void set_stringDelimiter(char stringDelimiter);
  277280             : 
  277281             :      public: 
  277282             :          bool get_is16bitString() const;
  277283             :          void set_is16bitString(bool is16bitString);
  277284             : 
  277285             :      public: 
  277286             :          bool get_is32bitString() const;
  277287             :          void set_is32bitString(bool is32bitString);
  277288             : 
  277289             :      public: 
  277290             :          bool get_isRawString() const;
  277291             :          void set_isRawString(bool isRawString);
  277292             : 
  277293             :      public: 
  277294             :          std::string get_raw_string_value() const;
  277295             :          void set_raw_string_value(std::string raw_string_value);
  277296             : 
  277297             : 
  277298             :      public: 
  277299             :          virtual ~SgStringVal();
  277300             : 
  277301             : 
  277302             :      public: 
  277303             :          SgStringVal(Sg_File_Info* startOfConstruct , std::string value = ""); 
  277304             :          SgStringVal(std::string value); 
  277305             : 
  277306             :     protected:
  277307             : // Start of memberFunctionString
  277308             : std::string p_value;
  277309             :           
  277310             : // End of memberFunctionString
  277311             : // Start of memberFunctionString
  277312             : bool p_wcharString;
  277313             :           
  277314             : // End of memberFunctionString
  277315             : // Start of memberFunctionString
  277316             : char p_stringDelimiter;
  277317             :           
  277318             : // End of memberFunctionString
  277319             : // Start of memberFunctionString
  277320             : bool p_is16bitString;
  277321             :           
  277322             : // End of memberFunctionString
  277323             : // Start of memberFunctionString
  277324             : bool p_is32bitString;
  277325             :           
  277326             : // End of memberFunctionString
  277327             : // Start of memberFunctionString
  277328             : bool p_isRawString;
  277329             :           
  277330             : // End of memberFunctionString
  277331             : // Start of memberFunctionString
  277332             : std::string p_raw_string_value;
  277333             :           
  277334             : // End of memberFunctionString
  277335             : 
  277336             :     friend struct Rose::Traits::generated::describe_node_t<SgStringVal>;
  277337             :     friend struct Rose::Traits::generated::describe_field_t<SgStringVal, std::string,&SgStringVal::p_value>;
  277338             :     friend struct Rose::Traits::generated::describe_field_t<SgStringVal, bool,&SgStringVal::p_wcharString>;
  277339             :     friend struct Rose::Traits::generated::describe_field_t<SgStringVal, char,&SgStringVal::p_stringDelimiter>;
  277340             :     friend struct Rose::Traits::generated::describe_field_t<SgStringVal, bool,&SgStringVal::p_is16bitString>;
  277341             :     friend struct Rose::Traits::generated::describe_field_t<SgStringVal, bool,&SgStringVal::p_is32bitString>;
  277342             :     friend struct Rose::Traits::generated::describe_field_t<SgStringVal, bool,&SgStringVal::p_isRawString>;
  277343             :     friend struct Rose::Traits::generated::describe_field_t<SgStringVal, std::string,&SgStringVal::p_raw_string_value>;
  277344             : 
  277345             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277346             : 
  277347             : 
  277348             :    };
  277349             : #endif
  277350             : 
  277351             : // postdeclarations for SgStringVal
  277352             : 
  277353             : /* #line 277354 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277354             : 
  277355             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  277356             : 
  277357             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277358             : 
  277359             : 
  277360             : /* #line 277361 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277361             : 
  277362             : 
  277363             : 
  277364             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277365             : 
  277366             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  277367             : //      This code is automatically generated for each 
  277368             : //      terminal and non-terminal within the defined 
  277369             : //      grammar.  There is a simple way to change the 
  277370             : //      code to fix bugs etc.  See the ROSE README file
  277371             : //      for directions.
  277372             : 
  277373             : // tps: (02/22/2010): Adding DLL export requirements
  277374             : #include "rosedll.h"
  277375             : 
  277376             : // predeclarations for SgShortVal
  277377             : 
  277378             : /* #line 277379 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277379             : 
  277380             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  277381             : 
  277382             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277383             : 
  277384             : #if 1
  277385             : // Class Definition for SgShortVal
  277386             : class ROSE_DLL_API SgShortVal  : public SgValueExp
  277387             :    {
  277388             :      public:
  277389             : 
  277390             : 
  277391             : /* #line 277392 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277392             : 
  277393             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  277394             : // Start of memberFunctionString
  277395             : /* #line 584 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  277396             : 
  277397             : 
  277398             : 
  277399             : // End of memberFunctionString
  277400             : // Start of memberFunctionString
  277401             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  277402             : 
  277403             : // *** COMMON CODE SECTION BEGINS HERE ***
  277404             : 
  277405             :     public:
  277406             : 
  277407             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  277408             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  277409             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  277410             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  277411             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  277412             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  277413             : 
  277414             :       /*! \brief returns a string representing the class name */
  277415             :           virtual std::string class_name() const override;
  277416             : 
  277417             :       /*! \brief returns new style SageIII enum values */
  277418             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  277419             : 
  277420             :       /*! \brief static variant value */
  277421             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  277422             :        // static const VariantT static_variant = V_SgShortVal;
  277423             :           enum { static_variant = V_SgShortVal };
  277424             : 
  277425             :        /* the generated cast function */
  277426             :       /*! \brief Casts pointer from base class to derived class */
  277427             :           ROSE_DLL_API friend       SgShortVal* isSgShortVal(       SgNode * s );
  277428             : 
  277429             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  277430             :           ROSE_DLL_API friend const SgShortVal* isSgShortVal( const SgNode * s );
  277431             : 
  277432             :      // ******************************************
  277433             :      // * Memory Pool / New / Delete
  277434             :      // ******************************************
  277435             : 
  277436             :      public:
  277437             :           /// \private
  277438             :           static const unsigned pool_size; //
  277439             :           /// \private
  277440             :           static std::vector<unsigned char *> pools; //
  277441             :           /// \private
  277442             :           static SgShortVal * next_node; // 
  277443             : 
  277444             :           /// \private
  277445             :           static unsigned long initializeStorageClassArray(SgShortValStorageClass *); //
  277446             : 
  277447             :           /// \private
  277448             :           static void clearMemoryPool(); //
  277449             :           static void deleteMemoryPool(); //
  277450             : 
  277451             :           /// \private
  277452             :           static void extendMemoryPoolForFileIO(); //
  277453             : 
  277454             :           /// \private
  277455             :           static SgShortVal * getPointerFromGlobalIndex(unsigned long); //
  277456             :           /// \private
  277457             :           static SgShortVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  277458             : 
  277459             :           /// \private
  277460             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  277461             :           /// \private
  277462             :           static void resetValidFreepointers(); //
  277463             :           /// \private
  277464             :           static unsigned long getNumberOfLastValidPointer(); //
  277465             : 
  277466             : 
  277467             : #if defined(INLINE_FUNCTIONS)
  277468             :       /*! \brief returns pointer to newly allocated IR node */
  277469             :           inline void *operator new (size_t size);
  277470             : #else
  277471             :       /*! \brief returns pointer to newly allocated IR node */
  277472             :           void *operator new (size_t size);
  277473             : #endif
  277474             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  277475             :           void operator delete (void* pointer, size_t size);
  277476             : 
  277477             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  277478          33 :           void operator delete (void* pointer)
  277479             :              {
  277480             :             // This is the generated delete operator...
  277481          33 :                SgShortVal::operator delete (pointer,sizeof(SgShortVal));
  277482             :              }
  277483             : 
  277484             :       /*! \brief Returns the total number of IR nodes of this type */
  277485             :           static size_t numberOfNodes();
  277486             : 
  277487             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  277488             :           static size_t memoryUsage();
  277489             : 
  277490             :       // End of scope which started in IR nodes specific code 
  277491             :       /* */
  277492             : 
  277493             :       /* name Internal Functions
  277494             :           \brief Internal functions ... incomplete-documentation
  277495             : 
  277496             :           These functions have been made public as part of the design, but they are suggested for internal use 
  277497             :           or by particularly knowledgeable users for specialized tools or applications.
  277498             : 
  277499             :           \internal We could not make these private because they are required by user for special purposes. And 
  277500             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  277501             :          
  277502             :        */
  277503             : 
  277504             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  277505             :        // overridden in every class by *generated* implementation
  277506             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  277507             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  277508             :        // MS: 06/28/02 container of names of variables or container indices 
  277509             :        // used used in the traversal to access AST successor nodes
  277510             :        // overridden in every class by *generated* implementation
  277511             :       /*! \brief container of names of variables or container indices used used in the traversal
  277512             :           to access AST successor nodes overridden in every class by *generated* implementation */
  277513             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  277514             : 
  277515             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  277516             :        // than all the vector copies. The implementation for these functions is generated for each class.
  277517             :       /*! \brief return number of children in the traversal successor list */
  277518             :           virtual size_t get_numberOfTraversalSuccessors() override;
  277519             :       /*! \brief index-based access to traversal successors by index number */
  277520             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  277521             :       /*! \brief index-based access to traversal successors by child node */
  277522             :           virtual size_t get_childIndex(SgNode *child) override;
  277523             : 
  277524             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  277525             :        // MS: 08/16/2002 method for generating RTI information
  277526             :       /*! \brief return C++ Runtime-Time-Information */
  277527             :           virtual RTIReturnType roseRTI() override;
  277528             : #endif
  277529             :       /* */
  277530             : 
  277531             : 
  277532             : 
  277533             :       /* name Deprecated Functions
  277534             :           \brief Deprecated functions ... incomplete-documentation
  277535             : 
  277536             :           These functions have been deprecated from use.
  277537             :        */
  277538             :       /* */
  277539             : 
  277540             :       /*! returns a C style string (char*) representing the class name */
  277541             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  277542             : 
  277543             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  277544             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  277545             : #if 0
  277546             :       /*! returns old style Sage II enum values */
  277547             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  277548             :       /*! returns old style Sage II enum values */
  277549             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  277550             : #endif
  277551             :       /* */
  277552             : 
  277553             : 
  277554             : 
  277555             : 
  277556             :      public:
  277557             :       /* name Traversal Support Functions
  277558             :           \brief Traversal support functions ... incomplete-documentation
  277559             : 
  277560             :           These functions have been made public as part of the design, but they are suggested for internal use 
  277561             :           or by particularly knowledgable users for specialized tools or applications.
  277562             :        */
  277563             :       /* */
  277564             : 
  277565             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  277566             :        // (inferior to ROSE traversal mechanism, experimental).
  277567             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  277568             :        */
  277569             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  277570             : 
  277571             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  277572             :       /*! \brief support for the classic visitor pattern done in GoF */
  277573             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  277574             : 
  277575             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  277576             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  277577             :        */
  277578             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  277579             : 
  277580             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  277581             :        */
  277582             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  277583             : 
  277584             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  277585             :        // This traversal helps support internal tools that call static member functions.
  277586             :        // note: this function operates on the memory pools.
  277587             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  277588             :        */
  277589             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  277590             :       /* */
  277591             : 
  277592             : 
  277593             :      public:
  277594             :       /* name Memory Allocation Functions
  277595             :           \brief Memory allocations functions ... incomplete-documentation
  277596             : 
  277597             :           These functions have been made public as part of the design, but they are suggested for internal use 
  277598             :           or by particularly knowledgable users for specialized tools or applications.
  277599             :        */
  277600             :       /* */
  277601             : 
  277602             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  277603             : 
  277604             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  277605             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  277606             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  277607             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  277608             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  277609             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  277610             :           being used with the AST File I/O mechanism.
  277611             :        */
  277612             :           virtual bool isInMemoryPool() override;
  277613             : 
  277614             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  277615             : 
  277616             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  277617             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  277618             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  277619             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  277620             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  277621             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  277622             :           being used with the AST File I/O mechanism.
  277623             :        */
  277624             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  277625             : 
  277626             :       // DQ (4/30/2006): Modified to be a const function.
  277627             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  277628             : 
  277629             :           This functions is part of general support for many possible tools to operate 
  277630             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  277631             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  277632             :           less than the set of pointers used by the AST file I/O. This is part of
  277633             :           work implemented by Andreas, and support tools such as the AST graph generation.
  277634             : 
  277635             :           \warning This function can return unexpected data members and thus the 
  277636             :                    order and the number of elements is unpredicable and subject 
  277637             :                    to change.
  277638             : 
  277639             :           \returns STL vector of pairs of SgNode* and strings
  277640             :        */
  277641             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  277642             : 
  277643             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  277644             : 
  277645             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  277646             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  277647             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  277648             : 
  277649             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  277650             :                    and subject to change.
  277651             :        */
  277652             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  277653             : 
  277654             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  277655             : 
  277656             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  277657             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  277658             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  277659             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  277660             : 
  277661             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  277662             : 
  277663             :           \returns long
  277664             :        */
  277665             :           virtual long getChildIndex( SgNode* childNode ) const override;
  277666             : 
  277667             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  277668             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  277669             :       /* \brief Constructor for use by AST File I/O Mechanism
  277670             : 
  277671             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  277672             :           which obtained via fast binary file I/O from disk.
  277673             :        */
  277674             :        // SgShortVal( SgShortValStorageClass& source );
  277675             : 
  277676             : 
  277677             : 
  277678             : 
  277679             : 
  277680             :  // JH (10/24/2005): methods added to support the ast file IO
  277681             :     private:
  277682             : 
  277683             :       /* name AST Memory Allocation Support Functions
  277684             :           \brief Memory allocations support....
  277685             : 
  277686             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  277687             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  277688             :           and support the AST File I/O Mechanism.
  277689             :        */
  277690             :       /* */
  277691             : 
  277692             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  277693             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  277694             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  277695             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  277696             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  277697             :           a correspinding one in the AST_FILE_IO class!
  277698             :        */
  277699             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  277700             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  277701             :       /* \brief Typedef used for low level memory access.
  277702             :        */
  277703             :        // typedef unsigned char* TestType;
  277704             : 
  277705             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  277706             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  277707             :       /* \brief Typedef used to hold memory addresses as values.
  277708             :        */
  277709             :        // typedef unsigned long  AddressType;
  277710             : 
  277711             : 
  277712             : 
  277713             :        // necessary, to have direct access to the p_freepointer and the private methods !
  277714             :       /*! \brief friend class declaration to support AST File I/O */
  277715             :           friend class AST_FILE_IO;
  277716             : 
  277717             :       /*! \brief friend class declaration to support AST File I/O */
  277718             :           friend class SgShortValStorageClass;
  277719             : 
  277720             :       /*! \brief friend class declaration to support AST File I/O */
  277721             :           friend class AstSpecificDataManagingClass;
  277722             : 
  277723             :       /*! \brief friend class declaration to support AST File I/O */
  277724             :           friend class AstSpecificDataManagingClassStorageClass;
  277725             :     public:
  277726             :       /*! \brief IR node constructor to support AST File I/O */
  277727             :           SgShortVal( const SgShortValStorageClass& source );
  277728             : 
  277729             :  // private: // JJW hack
  277730             :        /*
  277731             :           name AST Memory Allocation Support Variables
  277732             :           Memory allocations support variables 
  277733             : 
  277734             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  277735             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  277736             :           and support the AST File I/O Mechanism.
  277737             :        */
  277738             :       /* */
  277739             : 
  277740             :     public:
  277741             : 
  277742             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  277743             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  277744             :       // virtual SgNode* addRegExpAttribute();
  277745             :       /*! \brief Support for AST matching using regular expression.
  277746             : 
  277747             :           This support is incomplete and the subject of current research to define 
  277748             :           RegEx trees to support inexact matching.
  277749             :        */
  277750             :           SgShortVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  277751             : 
  277752             : // *** COMMON CODE SECTION ENDS HERE ***
  277753             : 
  277754             : 
  277755             : // End of memberFunctionString
  277756             : // Start of memberFunctionString
  277757             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  277758             : 
  277759             :      // the generated cast function
  277760             :      // friend ROSE_DLL_API SgShortVal* isSgShortVal ( SgNode* s );
  277761             : 
  277762             :           typedef SgValueExp base_node_type;
  277763             : 
  277764             : 
  277765             : // End of memberFunctionString
  277766             : // Start of memberFunctionString
  277767             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  277768             : 
  277769             :           SgType* get_type() const override;
  277770             : 
  277771             : 
  277772             : // End of memberFunctionString
  277773             : // Start of memberFunctionString
  277774             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  277775             : 
  277776             :           void post_construction_initialization() override;
  277777             : 
  277778             : 
  277779             : // End of memberFunctionString
  277780             : 
  277781             :      public: 
  277782             :          short get_value() const;
  277783             :          void set_value(short value);
  277784             : 
  277785             :      public: 
  277786             :          std::string get_valueString() const;
  277787             :          void set_valueString(std::string valueString);
  277788             : 
  277789             : 
  277790             :      public: 
  277791             :          virtual ~SgShortVal();
  277792             : 
  277793             : 
  277794             :      public: 
  277795             :          SgShortVal(Sg_File_Info* startOfConstruct , short value = 0, std::string valueString = ""); 
  277796             :          SgShortVal(short value, std::string valueString); 
  277797             : 
  277798             :     protected:
  277799             : // Start of memberFunctionString
  277800             : short p_value;
  277801             :           
  277802             : // End of memberFunctionString
  277803             : // Start of memberFunctionString
  277804             : std::string p_valueString;
  277805             :           
  277806             : // End of memberFunctionString
  277807             : 
  277808             :     friend struct Rose::Traits::generated::describe_node_t<SgShortVal>;
  277809             :     friend struct Rose::Traits::generated::describe_field_t<SgShortVal, short,&SgShortVal::p_value>;
  277810             :     friend struct Rose::Traits::generated::describe_field_t<SgShortVal, std::string,&SgShortVal::p_valueString>;
  277811             : 
  277812             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277813             : 
  277814             : 
  277815             :    };
  277816             : #endif
  277817             : 
  277818             : // postdeclarations for SgShortVal
  277819             : 
  277820             : /* #line 277821 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277821             : 
  277822             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  277823             : 
  277824             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277825             : 
  277826             : 
  277827             : /* #line 277828 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277828             : 
  277829             : 
  277830             : 
  277831             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277832             : 
  277833             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  277834             : //      This code is automatically generated for each 
  277835             : //      terminal and non-terminal within the defined 
  277836             : //      grammar.  There is a simple way to change the 
  277837             : //      code to fix bugs etc.  See the ROSE README file
  277838             : //      for directions.
  277839             : 
  277840             : // tps: (02/22/2010): Adding DLL export requirements
  277841             : #include "rosedll.h"
  277842             : 
  277843             : // predeclarations for SgCharVal
  277844             : 
  277845             : /* #line 277846 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277846             : 
  277847             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  277848             : 
  277849             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  277850             : 
  277851             : #if 1
  277852             : // Class Definition for SgCharVal
  277853             : class ROSE_DLL_API SgCharVal  : public SgValueExp
  277854             :    {
  277855             :      public:
  277856             : 
  277857             : 
  277858             : /* #line 277859 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  277859             : 
  277860             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  277861             : // Start of memberFunctionString
  277862             : /* #line 588 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  277863             : 
  277864             : 
  277865             : 
  277866             : // End of memberFunctionString
  277867             : // Start of memberFunctionString
  277868             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  277869             : 
  277870             : // *** COMMON CODE SECTION BEGINS HERE ***
  277871             : 
  277872             :     public:
  277873             : 
  277874             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  277875             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  277876             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  277877             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  277878             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  277879             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  277880             : 
  277881             :       /*! \brief returns a string representing the class name */
  277882             :           virtual std::string class_name() const override;
  277883             : 
  277884             :       /*! \brief returns new style SageIII enum values */
  277885             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  277886             : 
  277887             :       /*! \brief static variant value */
  277888             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  277889             :        // static const VariantT static_variant = V_SgCharVal;
  277890             :           enum { static_variant = V_SgCharVal };
  277891             : 
  277892             :        /* the generated cast function */
  277893             :       /*! \brief Casts pointer from base class to derived class */
  277894             :           ROSE_DLL_API friend       SgCharVal* isSgCharVal(       SgNode * s );
  277895             : 
  277896             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  277897             :           ROSE_DLL_API friend const SgCharVal* isSgCharVal( const SgNode * s );
  277898             : 
  277899             :      // ******************************************
  277900             :      // * Memory Pool / New / Delete
  277901             :      // ******************************************
  277902             : 
  277903             :      public:
  277904             :           /// \private
  277905             :           static const unsigned pool_size; //
  277906             :           /// \private
  277907             :           static std::vector<unsigned char *> pools; //
  277908             :           /// \private
  277909             :           static SgCharVal * next_node; // 
  277910             : 
  277911             :           /// \private
  277912             :           static unsigned long initializeStorageClassArray(SgCharValStorageClass *); //
  277913             : 
  277914             :           /// \private
  277915             :           static void clearMemoryPool(); //
  277916             :           static void deleteMemoryPool(); //
  277917             : 
  277918             :           /// \private
  277919             :           static void extendMemoryPoolForFileIO(); //
  277920             : 
  277921             :           /// \private
  277922             :           static SgCharVal * getPointerFromGlobalIndex(unsigned long); //
  277923             :           /// \private
  277924             :           static SgCharVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  277925             : 
  277926             :           /// \private
  277927             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  277928             :           /// \private
  277929             :           static void resetValidFreepointers(); //
  277930             :           /// \private
  277931             :           static unsigned long getNumberOfLastValidPointer(); //
  277932             : 
  277933             : 
  277934             : #if defined(INLINE_FUNCTIONS)
  277935             :       /*! \brief returns pointer to newly allocated IR node */
  277936             :           inline void *operator new (size_t size);
  277937             : #else
  277938             :       /*! \brief returns pointer to newly allocated IR node */
  277939             :           void *operator new (size_t size);
  277940             : #endif
  277941             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  277942             :           void operator delete (void* pointer, size_t size);
  277943             : 
  277944             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  277945         121 :           void operator delete (void* pointer)
  277946             :              {
  277947             :             // This is the generated delete operator...
  277948         121 :                SgCharVal::operator delete (pointer,sizeof(SgCharVal));
  277949             :              }
  277950             : 
  277951             :       /*! \brief Returns the total number of IR nodes of this type */
  277952             :           static size_t numberOfNodes();
  277953             : 
  277954             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  277955             :           static size_t memoryUsage();
  277956             : 
  277957             :       // End of scope which started in IR nodes specific code 
  277958             :       /* */
  277959             : 
  277960             :       /* name Internal Functions
  277961             :           \brief Internal functions ... incomplete-documentation
  277962             : 
  277963             :           These functions have been made public as part of the design, but they are suggested for internal use 
  277964             :           or by particularly knowledgeable users for specialized tools or applications.
  277965             : 
  277966             :           \internal We could not make these private because they are required by user for special purposes. And 
  277967             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  277968             :          
  277969             :        */
  277970             : 
  277971             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  277972             :        // overridden in every class by *generated* implementation
  277973             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  277974             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  277975             :        // MS: 06/28/02 container of names of variables or container indices 
  277976             :        // used used in the traversal to access AST successor nodes
  277977             :        // overridden in every class by *generated* implementation
  277978             :       /*! \brief container of names of variables or container indices used used in the traversal
  277979             :           to access AST successor nodes overridden in every class by *generated* implementation */
  277980             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  277981             : 
  277982             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  277983             :        // than all the vector copies. The implementation for these functions is generated for each class.
  277984             :       /*! \brief return number of children in the traversal successor list */
  277985             :           virtual size_t get_numberOfTraversalSuccessors() override;
  277986             :       /*! \brief index-based access to traversal successors by index number */
  277987             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  277988             :       /*! \brief index-based access to traversal successors by child node */
  277989             :           virtual size_t get_childIndex(SgNode *child) override;
  277990             : 
  277991             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  277992             :        // MS: 08/16/2002 method for generating RTI information
  277993             :       /*! \brief return C++ Runtime-Time-Information */
  277994             :           virtual RTIReturnType roseRTI() override;
  277995             : #endif
  277996             :       /* */
  277997             : 
  277998             : 
  277999             : 
  278000             :       /* name Deprecated Functions
  278001             :           \brief Deprecated functions ... incomplete-documentation
  278002             : 
  278003             :           These functions have been deprecated from use.
  278004             :        */
  278005             :       /* */
  278006             : 
  278007             :       /*! returns a C style string (char*) representing the class name */
  278008             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  278009             : 
  278010             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  278011             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  278012             : #if 0
  278013             :       /*! returns old style Sage II enum values */
  278014             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  278015             :       /*! returns old style Sage II enum values */
  278016             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  278017             : #endif
  278018             :       /* */
  278019             : 
  278020             : 
  278021             : 
  278022             : 
  278023             :      public:
  278024             :       /* name Traversal Support Functions
  278025             :           \brief Traversal support functions ... incomplete-documentation
  278026             : 
  278027             :           These functions have been made public as part of the design, but they are suggested for internal use 
  278028             :           or by particularly knowledgable users for specialized tools or applications.
  278029             :        */
  278030             :       /* */
  278031             : 
  278032             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  278033             :        // (inferior to ROSE traversal mechanism, experimental).
  278034             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  278035             :        */
  278036             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  278037             : 
  278038             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  278039             :       /*! \brief support for the classic visitor pattern done in GoF */
  278040             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  278041             : 
  278042             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  278043             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  278044             :        */
  278045             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  278046             : 
  278047             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  278048             :        */
  278049             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  278050             : 
  278051             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  278052             :        // This traversal helps support internal tools that call static member functions.
  278053             :        // note: this function operates on the memory pools.
  278054             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  278055             :        */
  278056             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  278057             :       /* */
  278058             : 
  278059             : 
  278060             :      public:
  278061             :       /* name Memory Allocation Functions
  278062             :           \brief Memory allocations functions ... incomplete-documentation
  278063             : 
  278064             :           These functions have been made public as part of the design, but they are suggested for internal use 
  278065             :           or by particularly knowledgable users for specialized tools or applications.
  278066             :        */
  278067             :       /* */
  278068             : 
  278069             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  278070             : 
  278071             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  278072             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  278073             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  278074             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  278075             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  278076             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  278077             :           being used with the AST File I/O mechanism.
  278078             :        */
  278079             :           virtual bool isInMemoryPool() override;
  278080             : 
  278081             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  278082             : 
  278083             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  278084             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  278085             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  278086             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  278087             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  278088             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  278089             :           being used with the AST File I/O mechanism.
  278090             :        */
  278091             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  278092             : 
  278093             :       // DQ (4/30/2006): Modified to be a const function.
  278094             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  278095             : 
  278096             :           This functions is part of general support for many possible tools to operate 
  278097             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  278098             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  278099             :           less than the set of pointers used by the AST file I/O. This is part of
  278100             :           work implemented by Andreas, and support tools such as the AST graph generation.
  278101             : 
  278102             :           \warning This function can return unexpected data members and thus the 
  278103             :                    order and the number of elements is unpredicable and subject 
  278104             :                    to change.
  278105             : 
  278106             :           \returns STL vector of pairs of SgNode* and strings
  278107             :        */
  278108             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  278109             : 
  278110             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  278111             : 
  278112             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  278113             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  278114             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  278115             : 
  278116             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  278117             :                    and subject to change.
  278118             :        */
  278119             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  278120             : 
  278121             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  278122             : 
  278123             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  278124             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  278125             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  278126             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  278127             : 
  278128             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  278129             : 
  278130             :           \returns long
  278131             :        */
  278132             :           virtual long getChildIndex( SgNode* childNode ) const override;
  278133             : 
  278134             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  278135             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  278136             :       /* \brief Constructor for use by AST File I/O Mechanism
  278137             : 
  278138             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  278139             :           which obtained via fast binary file I/O from disk.
  278140             :        */
  278141             :        // SgCharVal( SgCharValStorageClass& source );
  278142             : 
  278143             : 
  278144             : 
  278145             : 
  278146             : 
  278147             :  // JH (10/24/2005): methods added to support the ast file IO
  278148             :     private:
  278149             : 
  278150             :       /* name AST Memory Allocation Support Functions
  278151             :           \brief Memory allocations support....
  278152             : 
  278153             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  278154             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  278155             :           and support the AST File I/O Mechanism.
  278156             :        */
  278157             :       /* */
  278158             : 
  278159             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  278160             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  278161             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  278162             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  278163             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  278164             :           a correspinding one in the AST_FILE_IO class!
  278165             :        */
  278166             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  278167             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  278168             :       /* \brief Typedef used for low level memory access.
  278169             :        */
  278170             :        // typedef unsigned char* TestType;
  278171             : 
  278172             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  278173             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  278174             :       /* \brief Typedef used to hold memory addresses as values.
  278175             :        */
  278176             :        // typedef unsigned long  AddressType;
  278177             : 
  278178             : 
  278179             : 
  278180             :        // necessary, to have direct access to the p_freepointer and the private methods !
  278181             :       /*! \brief friend class declaration to support AST File I/O */
  278182             :           friend class AST_FILE_IO;
  278183             : 
  278184             :       /*! \brief friend class declaration to support AST File I/O */
  278185             :           friend class SgCharValStorageClass;
  278186             : 
  278187             :       /*! \brief friend class declaration to support AST File I/O */
  278188             :           friend class AstSpecificDataManagingClass;
  278189             : 
  278190             :       /*! \brief friend class declaration to support AST File I/O */
  278191             :           friend class AstSpecificDataManagingClassStorageClass;
  278192             :     public:
  278193             :       /*! \brief IR node constructor to support AST File I/O */
  278194             :           SgCharVal( const SgCharValStorageClass& source );
  278195             : 
  278196             :  // private: // JJW hack
  278197             :        /*
  278198             :           name AST Memory Allocation Support Variables
  278199             :           Memory allocations support variables 
  278200             : 
  278201             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  278202             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  278203             :           and support the AST File I/O Mechanism.
  278204             :        */
  278205             :       /* */
  278206             : 
  278207             :     public:
  278208             : 
  278209             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  278210             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  278211             :       // virtual SgNode* addRegExpAttribute();
  278212             :       /*! \brief Support for AST matching using regular expression.
  278213             : 
  278214             :           This support is incomplete and the subject of current research to define 
  278215             :           RegEx trees to support inexact matching.
  278216             :        */
  278217             :           SgCharVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  278218             : 
  278219             : // *** COMMON CODE SECTION ENDS HERE ***
  278220             : 
  278221             : 
  278222             : // End of memberFunctionString
  278223             : // Start of memberFunctionString
  278224             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  278225             : 
  278226             :      // the generated cast function
  278227             :      // friend ROSE_DLL_API SgCharVal* isSgCharVal ( SgNode* s );
  278228             : 
  278229             :           typedef SgValueExp base_node_type;
  278230             : 
  278231             : 
  278232             : // End of memberFunctionString
  278233             : // Start of memberFunctionString
  278234             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  278235             : 
  278236             :           SgType* get_type() const override;
  278237             : 
  278238             : 
  278239             : // End of memberFunctionString
  278240             : // Start of memberFunctionString
  278241             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  278242             : 
  278243             :           void post_construction_initialization() override;
  278244             : 
  278245             : 
  278246             : // End of memberFunctionString
  278247             : 
  278248             :      public: 
  278249             :          char get_value() const;
  278250             :          void set_value(char value);
  278251             : 
  278252             :      public: 
  278253             :          std::string get_valueString() const;
  278254             :          void set_valueString(std::string valueString);
  278255             : 
  278256             : 
  278257             :      public: 
  278258             :          virtual ~SgCharVal();
  278259             : 
  278260             : 
  278261             :      public: 
  278262             :          SgCharVal(Sg_File_Info* startOfConstruct , char value = 0, std::string valueString = ""); 
  278263             :          SgCharVal(char value, std::string valueString); 
  278264             : 
  278265             :     protected:
  278266             : // Start of memberFunctionString
  278267             : char p_value;
  278268             :           
  278269             : // End of memberFunctionString
  278270             : // Start of memberFunctionString
  278271             : std::string p_valueString;
  278272             :           
  278273             : // End of memberFunctionString
  278274             : 
  278275             :     friend struct Rose::Traits::generated::describe_node_t<SgCharVal>;
  278276             :     friend struct Rose::Traits::generated::describe_field_t<SgCharVal, char,&SgCharVal::p_value>;
  278277             :     friend struct Rose::Traits::generated::describe_field_t<SgCharVal, std::string,&SgCharVal::p_valueString>;
  278278             : 
  278279             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278280             : 
  278281             : 
  278282             :    };
  278283             : #endif
  278284             : 
  278285             : // postdeclarations for SgCharVal
  278286             : 
  278287             : /* #line 278288 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278288             : 
  278289             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  278290             : 
  278291             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278292             : 
  278293             : 
  278294             : /* #line 278295 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278295             : 
  278296             : 
  278297             : 
  278298             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278299             : 
  278300             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  278301             : //      This code is automatically generated for each 
  278302             : //      terminal and non-terminal within the defined 
  278303             : //      grammar.  There is a simple way to change the 
  278304             : //      code to fix bugs etc.  See the ROSE README file
  278305             : //      for directions.
  278306             : 
  278307             : // tps: (02/22/2010): Adding DLL export requirements
  278308             : #include "rosedll.h"
  278309             : 
  278310             : // predeclarations for SgUnsignedCharVal
  278311             : 
  278312             : /* #line 278313 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278313             : 
  278314             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  278315             : 
  278316             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278317             : 
  278318             : #if 1
  278319             : // Class Definition for SgUnsignedCharVal
  278320             : class ROSE_DLL_API SgUnsignedCharVal  : public SgValueExp
  278321             :    {
  278322             :      public:
  278323             : 
  278324             : 
  278325             : /* #line 278326 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278326             : 
  278327             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  278328             : // Start of memberFunctionString
  278329             : /* #line 592 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  278330             : 
  278331             : 
  278332             : 
  278333             : // End of memberFunctionString
  278334             : // Start of memberFunctionString
  278335             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  278336             : 
  278337             : // *** COMMON CODE SECTION BEGINS HERE ***
  278338             : 
  278339             :     public:
  278340             : 
  278341             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  278342             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  278343             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  278344             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  278345             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  278346             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  278347             : 
  278348             :       /*! \brief returns a string representing the class name */
  278349             :           virtual std::string class_name() const override;
  278350             : 
  278351             :       /*! \brief returns new style SageIII enum values */
  278352             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  278353             : 
  278354             :       /*! \brief static variant value */
  278355             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  278356             :        // static const VariantT static_variant = V_SgUnsignedCharVal;
  278357             :           enum { static_variant = V_SgUnsignedCharVal };
  278358             : 
  278359             :        /* the generated cast function */
  278360             :       /*! \brief Casts pointer from base class to derived class */
  278361             :           ROSE_DLL_API friend       SgUnsignedCharVal* isSgUnsignedCharVal(       SgNode * s );
  278362             : 
  278363             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  278364             :           ROSE_DLL_API friend const SgUnsignedCharVal* isSgUnsignedCharVal( const SgNode * s );
  278365             : 
  278366             :      // ******************************************
  278367             :      // * Memory Pool / New / Delete
  278368             :      // ******************************************
  278369             : 
  278370             :      public:
  278371             :           /// \private
  278372             :           static const unsigned pool_size; //
  278373             :           /// \private
  278374             :           static std::vector<unsigned char *> pools; //
  278375             :           /// \private
  278376             :           static SgUnsignedCharVal * next_node; // 
  278377             : 
  278378             :           /// \private
  278379             :           static unsigned long initializeStorageClassArray(SgUnsignedCharValStorageClass *); //
  278380             : 
  278381             :           /// \private
  278382             :           static void clearMemoryPool(); //
  278383             :           static void deleteMemoryPool(); //
  278384             : 
  278385             :           /// \private
  278386             :           static void extendMemoryPoolForFileIO(); //
  278387             : 
  278388             :           /// \private
  278389             :           static SgUnsignedCharVal * getPointerFromGlobalIndex(unsigned long); //
  278390             :           /// \private
  278391             :           static SgUnsignedCharVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  278392             : 
  278393             :           /// \private
  278394             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  278395             :           /// \private
  278396             :           static void resetValidFreepointers(); //
  278397             :           /// \private
  278398             :           static unsigned long getNumberOfLastValidPointer(); //
  278399             : 
  278400             : 
  278401             : #if defined(INLINE_FUNCTIONS)
  278402             :       /*! \brief returns pointer to newly allocated IR node */
  278403             :           inline void *operator new (size_t size);
  278404             : #else
  278405             :       /*! \brief returns pointer to newly allocated IR node */
  278406             :           void *operator new (size_t size);
  278407             : #endif
  278408             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  278409             :           void operator delete (void* pointer, size_t size);
  278410             : 
  278411             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  278412           0 :           void operator delete (void* pointer)
  278413             :              {
  278414             :             // This is the generated delete operator...
  278415           0 :                SgUnsignedCharVal::operator delete (pointer,sizeof(SgUnsignedCharVal));
  278416             :              }
  278417             : 
  278418             :       /*! \brief Returns the total number of IR nodes of this type */
  278419             :           static size_t numberOfNodes();
  278420             : 
  278421             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  278422             :           static size_t memoryUsage();
  278423             : 
  278424             :       // End of scope which started in IR nodes specific code 
  278425             :       /* */
  278426             : 
  278427             :       /* name Internal Functions
  278428             :           \brief Internal functions ... incomplete-documentation
  278429             : 
  278430             :           These functions have been made public as part of the design, but they are suggested for internal use 
  278431             :           or by particularly knowledgeable users for specialized tools or applications.
  278432             : 
  278433             :           \internal We could not make these private because they are required by user for special purposes. And 
  278434             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  278435             :          
  278436             :        */
  278437             : 
  278438             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  278439             :        // overridden in every class by *generated* implementation
  278440             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  278441             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  278442             :        // MS: 06/28/02 container of names of variables or container indices 
  278443             :        // used used in the traversal to access AST successor nodes
  278444             :        // overridden in every class by *generated* implementation
  278445             :       /*! \brief container of names of variables or container indices used used in the traversal
  278446             :           to access AST successor nodes overridden in every class by *generated* implementation */
  278447             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  278448             : 
  278449             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  278450             :        // than all the vector copies. The implementation for these functions is generated for each class.
  278451             :       /*! \brief return number of children in the traversal successor list */
  278452             :           virtual size_t get_numberOfTraversalSuccessors() override;
  278453             :       /*! \brief index-based access to traversal successors by index number */
  278454             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  278455             :       /*! \brief index-based access to traversal successors by child node */
  278456             :           virtual size_t get_childIndex(SgNode *child) override;
  278457             : 
  278458             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  278459             :        // MS: 08/16/2002 method for generating RTI information
  278460             :       /*! \brief return C++ Runtime-Time-Information */
  278461             :           virtual RTIReturnType roseRTI() override;
  278462             : #endif
  278463             :       /* */
  278464             : 
  278465             : 
  278466             : 
  278467             :       /* name Deprecated Functions
  278468             :           \brief Deprecated functions ... incomplete-documentation
  278469             : 
  278470             :           These functions have been deprecated from use.
  278471             :        */
  278472             :       /* */
  278473             : 
  278474             :       /*! returns a C style string (char*) representing the class name */
  278475             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  278476             : 
  278477             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  278478             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  278479             : #if 0
  278480             :       /*! returns old style Sage II enum values */
  278481             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  278482             :       /*! returns old style Sage II enum values */
  278483             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  278484             : #endif
  278485             :       /* */
  278486             : 
  278487             : 
  278488             : 
  278489             : 
  278490             :      public:
  278491             :       /* name Traversal Support Functions
  278492             :           \brief Traversal support functions ... incomplete-documentation
  278493             : 
  278494             :           These functions have been made public as part of the design, but they are suggested for internal use 
  278495             :           or by particularly knowledgable users for specialized tools or applications.
  278496             :        */
  278497             :       /* */
  278498             : 
  278499             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  278500             :        // (inferior to ROSE traversal mechanism, experimental).
  278501             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  278502             :        */
  278503             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  278504             : 
  278505             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  278506             :       /*! \brief support for the classic visitor pattern done in GoF */
  278507             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  278508             : 
  278509             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  278510             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  278511             :        */
  278512             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  278513             : 
  278514             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  278515             :        */
  278516             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  278517             : 
  278518             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  278519             :        // This traversal helps support internal tools that call static member functions.
  278520             :        // note: this function operates on the memory pools.
  278521             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  278522             :        */
  278523             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  278524             :       /* */
  278525             : 
  278526             : 
  278527             :      public:
  278528             :       /* name Memory Allocation Functions
  278529             :           \brief Memory allocations functions ... incomplete-documentation
  278530             : 
  278531             :           These functions have been made public as part of the design, but they are suggested for internal use 
  278532             :           or by particularly knowledgable users for specialized tools or applications.
  278533             :        */
  278534             :       /* */
  278535             : 
  278536             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  278537             : 
  278538             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  278539             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  278540             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  278541             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  278542             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  278543             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  278544             :           being used with the AST File I/O mechanism.
  278545             :        */
  278546             :           virtual bool isInMemoryPool() override;
  278547             : 
  278548             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  278549             : 
  278550             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  278551             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  278552             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  278553             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  278554             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  278555             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  278556             :           being used with the AST File I/O mechanism.
  278557             :        */
  278558             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  278559             : 
  278560             :       // DQ (4/30/2006): Modified to be a const function.
  278561             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  278562             : 
  278563             :           This functions is part of general support for many possible tools to operate 
  278564             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  278565             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  278566             :           less than the set of pointers used by the AST file I/O. This is part of
  278567             :           work implemented by Andreas, and support tools such as the AST graph generation.
  278568             : 
  278569             :           \warning This function can return unexpected data members and thus the 
  278570             :                    order and the number of elements is unpredicable and subject 
  278571             :                    to change.
  278572             : 
  278573             :           \returns STL vector of pairs of SgNode* and strings
  278574             :        */
  278575             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  278576             : 
  278577             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  278578             : 
  278579             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  278580             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  278581             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  278582             : 
  278583             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  278584             :                    and subject to change.
  278585             :        */
  278586             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  278587             : 
  278588             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  278589             : 
  278590             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  278591             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  278592             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  278593             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  278594             : 
  278595             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  278596             : 
  278597             :           \returns long
  278598             :        */
  278599             :           virtual long getChildIndex( SgNode* childNode ) const override;
  278600             : 
  278601             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  278602             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  278603             :       /* \brief Constructor for use by AST File I/O Mechanism
  278604             : 
  278605             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  278606             :           which obtained via fast binary file I/O from disk.
  278607             :        */
  278608             :        // SgUnsignedCharVal( SgUnsignedCharValStorageClass& source );
  278609             : 
  278610             : 
  278611             : 
  278612             : 
  278613             : 
  278614             :  // JH (10/24/2005): methods added to support the ast file IO
  278615             :     private:
  278616             : 
  278617             :       /* name AST Memory Allocation Support Functions
  278618             :           \brief Memory allocations support....
  278619             : 
  278620             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  278621             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  278622             :           and support the AST File I/O Mechanism.
  278623             :        */
  278624             :       /* */
  278625             : 
  278626             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  278627             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  278628             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  278629             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  278630             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  278631             :           a correspinding one in the AST_FILE_IO class!
  278632             :        */
  278633             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  278634             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  278635             :       /* \brief Typedef used for low level memory access.
  278636             :        */
  278637             :        // typedef unsigned char* TestType;
  278638             : 
  278639             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  278640             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  278641             :       /* \brief Typedef used to hold memory addresses as values.
  278642             :        */
  278643             :        // typedef unsigned long  AddressType;
  278644             : 
  278645             : 
  278646             : 
  278647             :        // necessary, to have direct access to the p_freepointer and the private methods !
  278648             :       /*! \brief friend class declaration to support AST File I/O */
  278649             :           friend class AST_FILE_IO;
  278650             : 
  278651             :       /*! \brief friend class declaration to support AST File I/O */
  278652             :           friend class SgUnsignedCharValStorageClass;
  278653             : 
  278654             :       /*! \brief friend class declaration to support AST File I/O */
  278655             :           friend class AstSpecificDataManagingClass;
  278656             : 
  278657             :       /*! \brief friend class declaration to support AST File I/O */
  278658             :           friend class AstSpecificDataManagingClassStorageClass;
  278659             :     public:
  278660             :       /*! \brief IR node constructor to support AST File I/O */
  278661             :           SgUnsignedCharVal( const SgUnsignedCharValStorageClass& source );
  278662             : 
  278663             :  // private: // JJW hack
  278664             :        /*
  278665             :           name AST Memory Allocation Support Variables
  278666             :           Memory allocations support variables 
  278667             : 
  278668             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  278669             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  278670             :           and support the AST File I/O Mechanism.
  278671             :        */
  278672             :       /* */
  278673             : 
  278674             :     public:
  278675             : 
  278676             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  278677             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  278678             :       // virtual SgNode* addRegExpAttribute();
  278679             :       /*! \brief Support for AST matching using regular expression.
  278680             : 
  278681             :           This support is incomplete and the subject of current research to define 
  278682             :           RegEx trees to support inexact matching.
  278683             :        */
  278684             :           SgUnsignedCharVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  278685             : 
  278686             : // *** COMMON CODE SECTION ENDS HERE ***
  278687             : 
  278688             : 
  278689             : // End of memberFunctionString
  278690             : // Start of memberFunctionString
  278691             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  278692             : 
  278693             :      // the generated cast function
  278694             :      // friend ROSE_DLL_API SgUnsignedCharVal* isSgUnsignedCharVal ( SgNode* s );
  278695             : 
  278696             :           typedef SgValueExp base_node_type;
  278697             : 
  278698             : 
  278699             : // End of memberFunctionString
  278700             : // Start of memberFunctionString
  278701             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  278702             : 
  278703             :           SgType* get_type() const override;
  278704             : 
  278705             : 
  278706             : // End of memberFunctionString
  278707             : // Start of memberFunctionString
  278708             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  278709             : 
  278710             :           void post_construction_initialization() override;
  278711             : 
  278712             : 
  278713             : // End of memberFunctionString
  278714             : 
  278715             :      public: 
  278716             :          unsigned char get_value() const;
  278717             :          void set_value(unsigned char value);
  278718             : 
  278719             :      public: 
  278720             :          std::string get_valueString() const;
  278721             :          void set_valueString(std::string valueString);
  278722             : 
  278723             : 
  278724             :      public: 
  278725             :          virtual ~SgUnsignedCharVal();
  278726             : 
  278727             : 
  278728             :      public: 
  278729             :          SgUnsignedCharVal(Sg_File_Info* startOfConstruct , unsigned char value = 0, std::string valueString = ""); 
  278730             :          SgUnsignedCharVal(unsigned char value, std::string valueString); 
  278731             : 
  278732             :     protected:
  278733             : // Start of memberFunctionString
  278734             : unsigned char p_value;
  278735             :           
  278736             : // End of memberFunctionString
  278737             : // Start of memberFunctionString
  278738             : std::string p_valueString;
  278739             :           
  278740             : // End of memberFunctionString
  278741             : 
  278742             :     friend struct Rose::Traits::generated::describe_node_t<SgUnsignedCharVal>;
  278743             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedCharVal, unsigned char,&SgUnsignedCharVal::p_value>;
  278744             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedCharVal, std::string,&SgUnsignedCharVal::p_valueString>;
  278745             : 
  278746             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278747             : 
  278748             : 
  278749             :    };
  278750             : #endif
  278751             : 
  278752             : // postdeclarations for SgUnsignedCharVal
  278753             : 
  278754             : /* #line 278755 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278755             : 
  278756             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  278757             : 
  278758             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278759             : 
  278760             : 
  278761             : /* #line 278762 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278762             : 
  278763             : 
  278764             : 
  278765             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278766             : 
  278767             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  278768             : //      This code is automatically generated for each 
  278769             : //      terminal and non-terminal within the defined 
  278770             : //      grammar.  There is a simple way to change the 
  278771             : //      code to fix bugs etc.  See the ROSE README file
  278772             : //      for directions.
  278773             : 
  278774             : // tps: (02/22/2010): Adding DLL export requirements
  278775             : #include "rosedll.h"
  278776             : 
  278777             : // predeclarations for SgWcharVal
  278778             : 
  278779             : /* #line 278780 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278780             : 
  278781             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  278782             : 
  278783             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  278784             : 
  278785             : #if 1
  278786             : // Class Definition for SgWcharVal
  278787             : class ROSE_DLL_API SgWcharVal  : public SgValueExp
  278788             :    {
  278789             :      public:
  278790             : 
  278791             : 
  278792             : /* #line 278793 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  278793             : 
  278794             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  278795             : // Start of memberFunctionString
  278796             : /* #line 596 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  278797             : 
  278798             :           wchar_t get_value() const;
  278799             :           void set_value(wchar_t new_val);
  278800             : 
  278801             : 
  278802             : 
  278803             : // End of memberFunctionString
  278804             : // Start of memberFunctionString
  278805             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  278806             : 
  278807             : // *** COMMON CODE SECTION BEGINS HERE ***
  278808             : 
  278809             :     public:
  278810             : 
  278811             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  278812             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  278813             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  278814             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  278815             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  278816             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  278817             : 
  278818             :       /*! \brief returns a string representing the class name */
  278819             :           virtual std::string class_name() const override;
  278820             : 
  278821             :       /*! \brief returns new style SageIII enum values */
  278822             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  278823             : 
  278824             :       /*! \brief static variant value */
  278825             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  278826             :        // static const VariantT static_variant = V_SgWcharVal;
  278827             :           enum { static_variant = V_SgWcharVal };
  278828             : 
  278829             :        /* the generated cast function */
  278830             :       /*! \brief Casts pointer from base class to derived class */
  278831             :           ROSE_DLL_API friend       SgWcharVal* isSgWcharVal(       SgNode * s );
  278832             : 
  278833             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  278834             :           ROSE_DLL_API friend const SgWcharVal* isSgWcharVal( const SgNode * s );
  278835             : 
  278836             :      // ******************************************
  278837             :      // * Memory Pool / New / Delete
  278838             :      // ******************************************
  278839             : 
  278840             :      public:
  278841             :           /// \private
  278842             :           static const unsigned pool_size; //
  278843             :           /// \private
  278844             :           static std::vector<unsigned char *> pools; //
  278845             :           /// \private
  278846             :           static SgWcharVal * next_node; // 
  278847             : 
  278848             :           /// \private
  278849             :           static unsigned long initializeStorageClassArray(SgWcharValStorageClass *); //
  278850             : 
  278851             :           /// \private
  278852             :           static void clearMemoryPool(); //
  278853             :           static void deleteMemoryPool(); //
  278854             : 
  278855             :           /// \private
  278856             :           static void extendMemoryPoolForFileIO(); //
  278857             : 
  278858             :           /// \private
  278859             :           static SgWcharVal * getPointerFromGlobalIndex(unsigned long); //
  278860             :           /// \private
  278861             :           static SgWcharVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  278862             : 
  278863             :           /// \private
  278864             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  278865             :           /// \private
  278866             :           static void resetValidFreepointers(); //
  278867             :           /// \private
  278868             :           static unsigned long getNumberOfLastValidPointer(); //
  278869             : 
  278870             : 
  278871             : #if defined(INLINE_FUNCTIONS)
  278872             :       /*! \brief returns pointer to newly allocated IR node */
  278873             :           inline void *operator new (size_t size);
  278874             : #else
  278875             :       /*! \brief returns pointer to newly allocated IR node */
  278876             :           void *operator new (size_t size);
  278877             : #endif
  278878             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  278879             :           void operator delete (void* pointer, size_t size);
  278880             : 
  278881             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  278882           8 :           void operator delete (void* pointer)
  278883             :              {
  278884             :             // This is the generated delete operator...
  278885           8 :                SgWcharVal::operator delete (pointer,sizeof(SgWcharVal));
  278886             :              }
  278887             : 
  278888             :       /*! \brief Returns the total number of IR nodes of this type */
  278889             :           static size_t numberOfNodes();
  278890             : 
  278891             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  278892             :           static size_t memoryUsage();
  278893             : 
  278894             :       // End of scope which started in IR nodes specific code 
  278895             :       /* */
  278896             : 
  278897             :       /* name Internal Functions
  278898             :           \brief Internal functions ... incomplete-documentation
  278899             : 
  278900             :           These functions have been made public as part of the design, but they are suggested for internal use 
  278901             :           or by particularly knowledgeable users for specialized tools or applications.
  278902             : 
  278903             :           \internal We could not make these private because they are required by user for special purposes. And 
  278904             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  278905             :          
  278906             :        */
  278907             : 
  278908             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  278909             :        // overridden in every class by *generated* implementation
  278910             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  278911             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  278912             :        // MS: 06/28/02 container of names of variables or container indices 
  278913             :        // used used in the traversal to access AST successor nodes
  278914             :        // overridden in every class by *generated* implementation
  278915             :       /*! \brief container of names of variables or container indices used used in the traversal
  278916             :           to access AST successor nodes overridden in every class by *generated* implementation */
  278917             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  278918             : 
  278919             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  278920             :        // than all the vector copies. The implementation for these functions is generated for each class.
  278921             :       /*! \brief return number of children in the traversal successor list */
  278922             :           virtual size_t get_numberOfTraversalSuccessors() override;
  278923             :       /*! \brief index-based access to traversal successors by index number */
  278924             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  278925             :       /*! \brief index-based access to traversal successors by child node */
  278926             :           virtual size_t get_childIndex(SgNode *child) override;
  278927             : 
  278928             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  278929             :        // MS: 08/16/2002 method for generating RTI information
  278930             :       /*! \brief return C++ Runtime-Time-Information */
  278931             :           virtual RTIReturnType roseRTI() override;
  278932             : #endif
  278933             :       /* */
  278934             : 
  278935             : 
  278936             : 
  278937             :       /* name Deprecated Functions
  278938             :           \brief Deprecated functions ... incomplete-documentation
  278939             : 
  278940             :           These functions have been deprecated from use.
  278941             :        */
  278942             :       /* */
  278943             : 
  278944             :       /*! returns a C style string (char*) representing the class name */
  278945             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  278946             : 
  278947             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  278948             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  278949             : #if 0
  278950             :       /*! returns old style Sage II enum values */
  278951             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  278952             :       /*! returns old style Sage II enum values */
  278953             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  278954             : #endif
  278955             :       /* */
  278956             : 
  278957             : 
  278958             : 
  278959             : 
  278960             :      public:
  278961             :       /* name Traversal Support Functions
  278962             :           \brief Traversal support functions ... incomplete-documentation
  278963             : 
  278964             :           These functions have been made public as part of the design, but they are suggested for internal use 
  278965             :           or by particularly knowledgable users for specialized tools or applications.
  278966             :        */
  278967             :       /* */
  278968             : 
  278969             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  278970             :        // (inferior to ROSE traversal mechanism, experimental).
  278971             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  278972             :        */
  278973             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  278974             : 
  278975             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  278976             :       /*! \brief support for the classic visitor pattern done in GoF */
  278977             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  278978             : 
  278979             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  278980             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  278981             :        */
  278982             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  278983             : 
  278984             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  278985             :        */
  278986             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  278987             : 
  278988             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  278989             :        // This traversal helps support internal tools that call static member functions.
  278990             :        // note: this function operates on the memory pools.
  278991             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  278992             :        */
  278993             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  278994             :       /* */
  278995             : 
  278996             : 
  278997             :      public:
  278998             :       /* name Memory Allocation Functions
  278999             :           \brief Memory allocations functions ... incomplete-documentation
  279000             : 
  279001             :           These functions have been made public as part of the design, but they are suggested for internal use 
  279002             :           or by particularly knowledgable users for specialized tools or applications.
  279003             :        */
  279004             :       /* */
  279005             : 
  279006             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  279007             : 
  279008             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  279009             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  279010             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  279011             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  279012             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  279013             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  279014             :           being used with the AST File I/O mechanism.
  279015             :        */
  279016             :           virtual bool isInMemoryPool() override;
  279017             : 
  279018             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  279019             : 
  279020             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  279021             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  279022             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  279023             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  279024             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  279025             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  279026             :           being used with the AST File I/O mechanism.
  279027             :        */
  279028             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  279029             : 
  279030             :       // DQ (4/30/2006): Modified to be a const function.
  279031             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  279032             : 
  279033             :           This functions is part of general support for many possible tools to operate 
  279034             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  279035             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  279036             :           less than the set of pointers used by the AST file I/O. This is part of
  279037             :           work implemented by Andreas, and support tools such as the AST graph generation.
  279038             : 
  279039             :           \warning This function can return unexpected data members and thus the 
  279040             :                    order and the number of elements is unpredicable and subject 
  279041             :                    to change.
  279042             : 
  279043             :           \returns STL vector of pairs of SgNode* and strings
  279044             :        */
  279045             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  279046             : 
  279047             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  279048             : 
  279049             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  279050             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  279051             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  279052             : 
  279053             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  279054             :                    and subject to change.
  279055             :        */
  279056             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  279057             : 
  279058             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  279059             : 
  279060             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  279061             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  279062             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  279063             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  279064             : 
  279065             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  279066             : 
  279067             :           \returns long
  279068             :        */
  279069             :           virtual long getChildIndex( SgNode* childNode ) const override;
  279070             : 
  279071             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  279072             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  279073             :       /* \brief Constructor for use by AST File I/O Mechanism
  279074             : 
  279075             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  279076             :           which obtained via fast binary file I/O from disk.
  279077             :        */
  279078             :        // SgWcharVal( SgWcharValStorageClass& source );
  279079             : 
  279080             : 
  279081             : 
  279082             : 
  279083             : 
  279084             :  // JH (10/24/2005): methods added to support the ast file IO
  279085             :     private:
  279086             : 
  279087             :       /* name AST Memory Allocation Support Functions
  279088             :           \brief Memory allocations support....
  279089             : 
  279090             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  279091             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  279092             :           and support the AST File I/O Mechanism.
  279093             :        */
  279094             :       /* */
  279095             : 
  279096             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  279097             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  279098             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  279099             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  279100             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  279101             :           a correspinding one in the AST_FILE_IO class!
  279102             :        */
  279103             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  279104             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  279105             :       /* \brief Typedef used for low level memory access.
  279106             :        */
  279107             :        // typedef unsigned char* TestType;
  279108             : 
  279109             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  279110             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  279111             :       /* \brief Typedef used to hold memory addresses as values.
  279112             :        */
  279113             :        // typedef unsigned long  AddressType;
  279114             : 
  279115             : 
  279116             : 
  279117             :        // necessary, to have direct access to the p_freepointer and the private methods !
  279118             :       /*! \brief friend class declaration to support AST File I/O */
  279119             :           friend class AST_FILE_IO;
  279120             : 
  279121             :       /*! \brief friend class declaration to support AST File I/O */
  279122             :           friend class SgWcharValStorageClass;
  279123             : 
  279124             :       /*! \brief friend class declaration to support AST File I/O */
  279125             :           friend class AstSpecificDataManagingClass;
  279126             : 
  279127             :       /*! \brief friend class declaration to support AST File I/O */
  279128             :           friend class AstSpecificDataManagingClassStorageClass;
  279129             :     public:
  279130             :       /*! \brief IR node constructor to support AST File I/O */
  279131             :           SgWcharVal( const SgWcharValStorageClass& source );
  279132             : 
  279133             :  // private: // JJW hack
  279134             :        /*
  279135             :           name AST Memory Allocation Support Variables
  279136             :           Memory allocations support variables 
  279137             : 
  279138             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  279139             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  279140             :           and support the AST File I/O Mechanism.
  279141             :        */
  279142             :       /* */
  279143             : 
  279144             :     public:
  279145             : 
  279146             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  279147             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  279148             :       // virtual SgNode* addRegExpAttribute();
  279149             :       /*! \brief Support for AST matching using regular expression.
  279150             : 
  279151             :           This support is incomplete and the subject of current research to define 
  279152             :           RegEx trees to support inexact matching.
  279153             :        */
  279154             :           SgWcharVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  279155             : 
  279156             : // *** COMMON CODE SECTION ENDS HERE ***
  279157             : 
  279158             : 
  279159             : // End of memberFunctionString
  279160             : // Start of memberFunctionString
  279161             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  279162             : 
  279163             :      // the generated cast function
  279164             :      // friend ROSE_DLL_API SgWcharVal* isSgWcharVal ( SgNode* s );
  279165             : 
  279166             :           typedef SgValueExp base_node_type;
  279167             : 
  279168             : 
  279169             : // End of memberFunctionString
  279170             : // Start of memberFunctionString
  279171             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  279172             : 
  279173             :           SgType* get_type() const override;
  279174             : 
  279175             : 
  279176             : // End of memberFunctionString
  279177             : // Start of memberFunctionString
  279178             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  279179             : 
  279180             :           void post_construction_initialization() override;
  279181             : 
  279182             : 
  279183             : // End of memberFunctionString
  279184             : 
  279185             :      public: 
  279186             :          unsigned long get_valueUL() const;
  279187             :          void set_valueUL(unsigned long valueUL);
  279188             : 
  279189             :      public: 
  279190             :          std::string get_valueString() const;
  279191             :          void set_valueString(std::string valueString);
  279192             : 
  279193             : 
  279194             :      public: 
  279195             :          virtual ~SgWcharVal();
  279196             : 
  279197             : 
  279198             :      public: 
  279199             :          SgWcharVal(Sg_File_Info* startOfConstruct , unsigned long valueUL = 0, std::string valueString = ""); 
  279200             :          SgWcharVal(unsigned long valueUL, std::string valueString); 
  279201             : 
  279202             :     protected:
  279203             : // Start of memberFunctionString
  279204             : unsigned long p_valueUL;
  279205             :           
  279206             : // End of memberFunctionString
  279207             : // Start of memberFunctionString
  279208             : std::string p_valueString;
  279209             :           
  279210             : // End of memberFunctionString
  279211             : 
  279212             :     friend struct Rose::Traits::generated::describe_node_t<SgWcharVal>;
  279213             :     friend struct Rose::Traits::generated::describe_field_t<SgWcharVal, unsigned long,&SgWcharVal::p_valueUL>;
  279214             :     friend struct Rose::Traits::generated::describe_field_t<SgWcharVal, std::string,&SgWcharVal::p_valueString>;
  279215             : 
  279216             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279217             : 
  279218             : 
  279219             :    };
  279220             : #endif
  279221             : 
  279222             : // postdeclarations for SgWcharVal
  279223             : 
  279224             : /* #line 279225 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279225             : 
  279226             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  279227             : 
  279228             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279229             : 
  279230             : 
  279231             : /* #line 279232 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279232             : 
  279233             : 
  279234             : 
  279235             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279236             : 
  279237             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  279238             : //      This code is automatically generated for each 
  279239             : //      terminal and non-terminal within the defined 
  279240             : //      grammar.  There is a simple way to change the 
  279241             : //      code to fix bugs etc.  See the ROSE README file
  279242             : //      for directions.
  279243             : 
  279244             : // tps: (02/22/2010): Adding DLL export requirements
  279245             : #include "rosedll.h"
  279246             : 
  279247             : // predeclarations for SgUnsignedShortVal
  279248             : 
  279249             : /* #line 279250 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279250             : 
  279251             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  279252             : 
  279253             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279254             : 
  279255             : #if 1
  279256             : // Class Definition for SgUnsignedShortVal
  279257             : class ROSE_DLL_API SgUnsignedShortVal  : public SgValueExp
  279258             :    {
  279259             :      public:
  279260             : 
  279261             : 
  279262             : /* #line 279263 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279263             : 
  279264             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  279265             : // Start of memberFunctionString
  279266             : /* #line 623 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  279267             : 
  279268             : 
  279269             : 
  279270             : // End of memberFunctionString
  279271             : // Start of memberFunctionString
  279272             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  279273             : 
  279274             : // *** COMMON CODE SECTION BEGINS HERE ***
  279275             : 
  279276             :     public:
  279277             : 
  279278             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  279279             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  279280             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  279281             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  279282             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  279283             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  279284             : 
  279285             :       /*! \brief returns a string representing the class name */
  279286             :           virtual std::string class_name() const override;
  279287             : 
  279288             :       /*! \brief returns new style SageIII enum values */
  279289             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  279290             : 
  279291             :       /*! \brief static variant value */
  279292             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  279293             :        // static const VariantT static_variant = V_SgUnsignedShortVal;
  279294             :           enum { static_variant = V_SgUnsignedShortVal };
  279295             : 
  279296             :        /* the generated cast function */
  279297             :       /*! \brief Casts pointer from base class to derived class */
  279298             :           ROSE_DLL_API friend       SgUnsignedShortVal* isSgUnsignedShortVal(       SgNode * s );
  279299             : 
  279300             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  279301             :           ROSE_DLL_API friend const SgUnsignedShortVal* isSgUnsignedShortVal( const SgNode * s );
  279302             : 
  279303             :      // ******************************************
  279304             :      // * Memory Pool / New / Delete
  279305             :      // ******************************************
  279306             : 
  279307             :      public:
  279308             :           /// \private
  279309             :           static const unsigned pool_size; //
  279310             :           /// \private
  279311             :           static std::vector<unsigned char *> pools; //
  279312             :           /// \private
  279313             :           static SgUnsignedShortVal * next_node; // 
  279314             : 
  279315             :           /// \private
  279316             :           static unsigned long initializeStorageClassArray(SgUnsignedShortValStorageClass *); //
  279317             : 
  279318             :           /// \private
  279319             :           static void clearMemoryPool(); //
  279320             :           static void deleteMemoryPool(); //
  279321             : 
  279322             :           /// \private
  279323             :           static void extendMemoryPoolForFileIO(); //
  279324             : 
  279325             :           /// \private
  279326             :           static SgUnsignedShortVal * getPointerFromGlobalIndex(unsigned long); //
  279327             :           /// \private
  279328             :           static SgUnsignedShortVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  279329             : 
  279330             :           /// \private
  279331             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  279332             :           /// \private
  279333             :           static void resetValidFreepointers(); //
  279334             :           /// \private
  279335             :           static unsigned long getNumberOfLastValidPointer(); //
  279336             : 
  279337             : 
  279338             : #if defined(INLINE_FUNCTIONS)
  279339             :       /*! \brief returns pointer to newly allocated IR node */
  279340             :           inline void *operator new (size_t size);
  279341             : #else
  279342             :       /*! \brief returns pointer to newly allocated IR node */
  279343             :           void *operator new (size_t size);
  279344             : #endif
  279345             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  279346             :           void operator delete (void* pointer, size_t size);
  279347             : 
  279348             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  279349         217 :           void operator delete (void* pointer)
  279350             :              {
  279351             :             // This is the generated delete operator...
  279352         217 :                SgUnsignedShortVal::operator delete (pointer,sizeof(SgUnsignedShortVal));
  279353             :              }
  279354             : 
  279355             :       /*! \brief Returns the total number of IR nodes of this type */
  279356             :           static size_t numberOfNodes();
  279357             : 
  279358             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  279359             :           static size_t memoryUsage();
  279360             : 
  279361             :       // End of scope which started in IR nodes specific code 
  279362             :       /* */
  279363             : 
  279364             :       /* name Internal Functions
  279365             :           \brief Internal functions ... incomplete-documentation
  279366             : 
  279367             :           These functions have been made public as part of the design, but they are suggested for internal use 
  279368             :           or by particularly knowledgeable users for specialized tools or applications.
  279369             : 
  279370             :           \internal We could not make these private because they are required by user for special purposes. And 
  279371             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  279372             :          
  279373             :        */
  279374             : 
  279375             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  279376             :        // overridden in every class by *generated* implementation
  279377             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  279378             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  279379             :        // MS: 06/28/02 container of names of variables or container indices 
  279380             :        // used used in the traversal to access AST successor nodes
  279381             :        // overridden in every class by *generated* implementation
  279382             :       /*! \brief container of names of variables or container indices used used in the traversal
  279383             :           to access AST successor nodes overridden in every class by *generated* implementation */
  279384             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  279385             : 
  279386             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  279387             :        // than all the vector copies. The implementation for these functions is generated for each class.
  279388             :       /*! \brief return number of children in the traversal successor list */
  279389             :           virtual size_t get_numberOfTraversalSuccessors() override;
  279390             :       /*! \brief index-based access to traversal successors by index number */
  279391             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  279392             :       /*! \brief index-based access to traversal successors by child node */
  279393             :           virtual size_t get_childIndex(SgNode *child) override;
  279394             : 
  279395             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  279396             :        // MS: 08/16/2002 method for generating RTI information
  279397             :       /*! \brief return C++ Runtime-Time-Information */
  279398             :           virtual RTIReturnType roseRTI() override;
  279399             : #endif
  279400             :       /* */
  279401             : 
  279402             : 
  279403             : 
  279404             :       /* name Deprecated Functions
  279405             :           \brief Deprecated functions ... incomplete-documentation
  279406             : 
  279407             :           These functions have been deprecated from use.
  279408             :        */
  279409             :       /* */
  279410             : 
  279411             :       /*! returns a C style string (char*) representing the class name */
  279412             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  279413             : 
  279414             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  279415             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  279416             : #if 0
  279417             :       /*! returns old style Sage II enum values */
  279418             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  279419             :       /*! returns old style Sage II enum values */
  279420             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  279421             : #endif
  279422             :       /* */
  279423             : 
  279424             : 
  279425             : 
  279426             : 
  279427             :      public:
  279428             :       /* name Traversal Support Functions
  279429             :           \brief Traversal support functions ... incomplete-documentation
  279430             : 
  279431             :           These functions have been made public as part of the design, but they are suggested for internal use 
  279432             :           or by particularly knowledgable users for specialized tools or applications.
  279433             :        */
  279434             :       /* */
  279435             : 
  279436             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  279437             :        // (inferior to ROSE traversal mechanism, experimental).
  279438             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  279439             :        */
  279440             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  279441             : 
  279442             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  279443             :       /*! \brief support for the classic visitor pattern done in GoF */
  279444             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  279445             : 
  279446             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  279447             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  279448             :        */
  279449             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  279450             : 
  279451             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  279452             :        */
  279453             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  279454             : 
  279455             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  279456             :        // This traversal helps support internal tools that call static member functions.
  279457             :        // note: this function operates on the memory pools.
  279458             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  279459             :        */
  279460             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  279461             :       /* */
  279462             : 
  279463             : 
  279464             :      public:
  279465             :       /* name Memory Allocation Functions
  279466             :           \brief Memory allocations functions ... incomplete-documentation
  279467             : 
  279468             :           These functions have been made public as part of the design, but they are suggested for internal use 
  279469             :           or by particularly knowledgable users for specialized tools or applications.
  279470             :        */
  279471             :       /* */
  279472             : 
  279473             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  279474             : 
  279475             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  279476             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  279477             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  279478             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  279479             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  279480             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  279481             :           being used with the AST File I/O mechanism.
  279482             :        */
  279483             :           virtual bool isInMemoryPool() override;
  279484             : 
  279485             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  279486             : 
  279487             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  279488             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  279489             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  279490             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  279491             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  279492             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  279493             :           being used with the AST File I/O mechanism.
  279494             :        */
  279495             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  279496             : 
  279497             :       // DQ (4/30/2006): Modified to be a const function.
  279498             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  279499             : 
  279500             :           This functions is part of general support for many possible tools to operate 
  279501             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  279502             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  279503             :           less than the set of pointers used by the AST file I/O. This is part of
  279504             :           work implemented by Andreas, and support tools such as the AST graph generation.
  279505             : 
  279506             :           \warning This function can return unexpected data members and thus the 
  279507             :                    order and the number of elements is unpredicable and subject 
  279508             :                    to change.
  279509             : 
  279510             :           \returns STL vector of pairs of SgNode* and strings
  279511             :        */
  279512             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  279513             : 
  279514             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  279515             : 
  279516             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  279517             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  279518             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  279519             : 
  279520             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  279521             :                    and subject to change.
  279522             :        */
  279523             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  279524             : 
  279525             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  279526             : 
  279527             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  279528             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  279529             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  279530             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  279531             : 
  279532             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  279533             : 
  279534             :           \returns long
  279535             :        */
  279536             :           virtual long getChildIndex( SgNode* childNode ) const override;
  279537             : 
  279538             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  279539             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  279540             :       /* \brief Constructor for use by AST File I/O Mechanism
  279541             : 
  279542             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  279543             :           which obtained via fast binary file I/O from disk.
  279544             :        */
  279545             :        // SgUnsignedShortVal( SgUnsignedShortValStorageClass& source );
  279546             : 
  279547             : 
  279548             : 
  279549             : 
  279550             : 
  279551             :  // JH (10/24/2005): methods added to support the ast file IO
  279552             :     private:
  279553             : 
  279554             :       /* name AST Memory Allocation Support Functions
  279555             :           \brief Memory allocations support....
  279556             : 
  279557             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  279558             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  279559             :           and support the AST File I/O Mechanism.
  279560             :        */
  279561             :       /* */
  279562             : 
  279563             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  279564             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  279565             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  279566             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  279567             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  279568             :           a correspinding one in the AST_FILE_IO class!
  279569             :        */
  279570             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  279571             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  279572             :       /* \brief Typedef used for low level memory access.
  279573             :        */
  279574             :        // typedef unsigned char* TestType;
  279575             : 
  279576             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  279577             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  279578             :       /* \brief Typedef used to hold memory addresses as values.
  279579             :        */
  279580             :        // typedef unsigned long  AddressType;
  279581             : 
  279582             : 
  279583             : 
  279584             :        // necessary, to have direct access to the p_freepointer and the private methods !
  279585             :       /*! \brief friend class declaration to support AST File I/O */
  279586             :           friend class AST_FILE_IO;
  279587             : 
  279588             :       /*! \brief friend class declaration to support AST File I/O */
  279589             :           friend class SgUnsignedShortValStorageClass;
  279590             : 
  279591             :       /*! \brief friend class declaration to support AST File I/O */
  279592             :           friend class AstSpecificDataManagingClass;
  279593             : 
  279594             :       /*! \brief friend class declaration to support AST File I/O */
  279595             :           friend class AstSpecificDataManagingClassStorageClass;
  279596             :     public:
  279597             :       /*! \brief IR node constructor to support AST File I/O */
  279598             :           SgUnsignedShortVal( const SgUnsignedShortValStorageClass& source );
  279599             : 
  279600             :  // private: // JJW hack
  279601             :        /*
  279602             :           name AST Memory Allocation Support Variables
  279603             :           Memory allocations support variables 
  279604             : 
  279605             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  279606             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  279607             :           and support the AST File I/O Mechanism.
  279608             :        */
  279609             :       /* */
  279610             : 
  279611             :     public:
  279612             : 
  279613             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  279614             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  279615             :       // virtual SgNode* addRegExpAttribute();
  279616             :       /*! \brief Support for AST matching using regular expression.
  279617             : 
  279618             :           This support is incomplete and the subject of current research to define 
  279619             :           RegEx trees to support inexact matching.
  279620             :        */
  279621             :           SgUnsignedShortVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  279622             : 
  279623             : // *** COMMON CODE SECTION ENDS HERE ***
  279624             : 
  279625             : 
  279626             : // End of memberFunctionString
  279627             : // Start of memberFunctionString
  279628             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  279629             : 
  279630             :      // the generated cast function
  279631             :      // friend ROSE_DLL_API SgUnsignedShortVal* isSgUnsignedShortVal ( SgNode* s );
  279632             : 
  279633             :           typedef SgValueExp base_node_type;
  279634             : 
  279635             : 
  279636             : // End of memberFunctionString
  279637             : // Start of memberFunctionString
  279638             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  279639             : 
  279640             :           SgType* get_type() const override;
  279641             : 
  279642             : 
  279643             : // End of memberFunctionString
  279644             : // Start of memberFunctionString
  279645             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  279646             : 
  279647             :           void post_construction_initialization() override;
  279648             : 
  279649             : 
  279650             : // End of memberFunctionString
  279651             : 
  279652             :      public: 
  279653             :          unsigned short get_value() const;
  279654             :          void set_value(unsigned short value);
  279655             : 
  279656             :      public: 
  279657             :          std::string get_valueString() const;
  279658             :          void set_valueString(std::string valueString);
  279659             : 
  279660             : 
  279661             :      public: 
  279662             :          virtual ~SgUnsignedShortVal();
  279663             : 
  279664             : 
  279665             :      public: 
  279666             :          SgUnsignedShortVal(Sg_File_Info* startOfConstruct , unsigned short value = 0, std::string valueString = ""); 
  279667             :          SgUnsignedShortVal(unsigned short value, std::string valueString); 
  279668             : 
  279669             :     protected:
  279670             : // Start of memberFunctionString
  279671             : unsigned short p_value;
  279672             :           
  279673             : // End of memberFunctionString
  279674             : // Start of memberFunctionString
  279675             : std::string p_valueString;
  279676             :           
  279677             : // End of memberFunctionString
  279678             : 
  279679             :     friend struct Rose::Traits::generated::describe_node_t<SgUnsignedShortVal>;
  279680             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedShortVal, unsigned short,&SgUnsignedShortVal::p_value>;
  279681             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedShortVal, std::string,&SgUnsignedShortVal::p_valueString>;
  279682             : 
  279683             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279684             : 
  279685             : 
  279686             :    };
  279687             : #endif
  279688             : 
  279689             : // postdeclarations for SgUnsignedShortVal
  279690             : 
  279691             : /* #line 279692 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279692             : 
  279693             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  279694             : 
  279695             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279696             : 
  279697             : 
  279698             : /* #line 279699 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279699             : 
  279700             : 
  279701             : 
  279702             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279703             : 
  279704             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  279705             : //      This code is automatically generated for each 
  279706             : //      terminal and non-terminal within the defined 
  279707             : //      grammar.  There is a simple way to change the 
  279708             : //      code to fix bugs etc.  See the ROSE README file
  279709             : //      for directions.
  279710             : 
  279711             : // tps: (02/22/2010): Adding DLL export requirements
  279712             : #include "rosedll.h"
  279713             : 
  279714             : // predeclarations for SgIntVal
  279715             : 
  279716             : /* #line 279717 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279717             : 
  279718             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  279719             : 
  279720             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  279721             : 
  279722             : #if 1
  279723             : // Class Definition for SgIntVal
  279724             : class ROSE_DLL_API SgIntVal  : public SgValueExp
  279725             :    {
  279726             :      public:
  279727             : 
  279728             : 
  279729             : /* #line 279730 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  279730             : 
  279731             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  279732             : // Start of memberFunctionString
  279733             : /* #line 627 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  279734             : 
  279735             : 
  279736             : 
  279737             : // End of memberFunctionString
  279738             : // Start of memberFunctionString
  279739             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  279740             : 
  279741             : // *** COMMON CODE SECTION BEGINS HERE ***
  279742             : 
  279743             :     public:
  279744             : 
  279745             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  279746             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  279747             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  279748             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  279749             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  279750             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  279751             : 
  279752             :       /*! \brief returns a string representing the class name */
  279753             :           virtual std::string class_name() const override;
  279754             : 
  279755             :       /*! \brief returns new style SageIII enum values */
  279756             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  279757             : 
  279758             :       /*! \brief static variant value */
  279759             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  279760             :        // static const VariantT static_variant = V_SgIntVal;
  279761             :           enum { static_variant = V_SgIntVal };
  279762             : 
  279763             :        /* the generated cast function */
  279764             :       /*! \brief Casts pointer from base class to derived class */
  279765             :           ROSE_DLL_API friend       SgIntVal* isSgIntVal(       SgNode * s );
  279766             : 
  279767             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  279768             :           ROSE_DLL_API friend const SgIntVal* isSgIntVal( const SgNode * s );
  279769             : 
  279770             :      // ******************************************
  279771             :      // * Memory Pool / New / Delete
  279772             :      // ******************************************
  279773             : 
  279774             :      public:
  279775             :           /// \private
  279776             :           static const unsigned pool_size; //
  279777             :           /// \private
  279778             :           static std::vector<unsigned char *> pools; //
  279779             :           /// \private
  279780             :           static SgIntVal * next_node; // 
  279781             : 
  279782             :           /// \private
  279783             :           static unsigned long initializeStorageClassArray(SgIntValStorageClass *); //
  279784             : 
  279785             :           /// \private
  279786             :           static void clearMemoryPool(); //
  279787             :           static void deleteMemoryPool(); //
  279788             : 
  279789             :           /// \private
  279790             :           static void extendMemoryPoolForFileIO(); //
  279791             : 
  279792             :           /// \private
  279793             :           static SgIntVal * getPointerFromGlobalIndex(unsigned long); //
  279794             :           /// \private
  279795             :           static SgIntVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  279796             : 
  279797             :           /// \private
  279798             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  279799             :           /// \private
  279800             :           static void resetValidFreepointers(); //
  279801             :           /// \private
  279802             :           static unsigned long getNumberOfLastValidPointer(); //
  279803             : 
  279804             : 
  279805             : #if defined(INLINE_FUNCTIONS)
  279806             :       /*! \brief returns pointer to newly allocated IR node */
  279807             :           inline void *operator new (size_t size);
  279808             : #else
  279809             :       /*! \brief returns pointer to newly allocated IR node */
  279810             :           void *operator new (size_t size);
  279811             : #endif
  279812             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  279813             :           void operator delete (void* pointer, size_t size);
  279814             : 
  279815             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  279816       13280 :           void operator delete (void* pointer)
  279817             :              {
  279818             :             // This is the generated delete operator...
  279819       13280 :                SgIntVal::operator delete (pointer,sizeof(SgIntVal));
  279820             :              }
  279821             : 
  279822             :       /*! \brief Returns the total number of IR nodes of this type */
  279823             :           static size_t numberOfNodes();
  279824             : 
  279825             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  279826             :           static size_t memoryUsage();
  279827             : 
  279828             :       // End of scope which started in IR nodes specific code 
  279829             :       /* */
  279830             : 
  279831             :       /* name Internal Functions
  279832             :           \brief Internal functions ... incomplete-documentation
  279833             : 
  279834             :           These functions have been made public as part of the design, but they are suggested for internal use 
  279835             :           or by particularly knowledgeable users for specialized tools or applications.
  279836             : 
  279837             :           \internal We could not make these private because they are required by user for special purposes. And 
  279838             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  279839             :          
  279840             :        */
  279841             : 
  279842             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  279843             :        // overridden in every class by *generated* implementation
  279844             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  279845             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  279846             :        // MS: 06/28/02 container of names of variables or container indices 
  279847             :        // used used in the traversal to access AST successor nodes
  279848             :        // overridden in every class by *generated* implementation
  279849             :       /*! \brief container of names of variables or container indices used used in the traversal
  279850             :           to access AST successor nodes overridden in every class by *generated* implementation */
  279851             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  279852             : 
  279853             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  279854             :        // than all the vector copies. The implementation for these functions is generated for each class.
  279855             :       /*! \brief return number of children in the traversal successor list */
  279856             :           virtual size_t get_numberOfTraversalSuccessors() override;
  279857             :       /*! \brief index-based access to traversal successors by index number */
  279858             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  279859             :       /*! \brief index-based access to traversal successors by child node */
  279860             :           virtual size_t get_childIndex(SgNode *child) override;
  279861             : 
  279862             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  279863             :        // MS: 08/16/2002 method for generating RTI information
  279864             :       /*! \brief return C++ Runtime-Time-Information */
  279865             :           virtual RTIReturnType roseRTI() override;
  279866             : #endif
  279867             :       /* */
  279868             : 
  279869             : 
  279870             : 
  279871             :       /* name Deprecated Functions
  279872             :           \brief Deprecated functions ... incomplete-documentation
  279873             : 
  279874             :           These functions have been deprecated from use.
  279875             :        */
  279876             :       /* */
  279877             : 
  279878             :       /*! returns a C style string (char*) representing the class name */
  279879             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  279880             : 
  279881             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  279882             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  279883             : #if 0
  279884             :       /*! returns old style Sage II enum values */
  279885             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  279886             :       /*! returns old style Sage II enum values */
  279887             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  279888             : #endif
  279889             :       /* */
  279890             : 
  279891             : 
  279892             : 
  279893             : 
  279894             :      public:
  279895             :       /* name Traversal Support Functions
  279896             :           \brief Traversal support functions ... incomplete-documentation
  279897             : 
  279898             :           These functions have been made public as part of the design, but they are suggested for internal use 
  279899             :           or by particularly knowledgable users for specialized tools or applications.
  279900             :        */
  279901             :       /* */
  279902             : 
  279903             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  279904             :        // (inferior to ROSE traversal mechanism, experimental).
  279905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  279906             :        */
  279907             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  279908             : 
  279909             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  279910             :       /*! \brief support for the classic visitor pattern done in GoF */
  279911             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  279912             : 
  279913             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  279914             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  279915             :        */
  279916             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  279917             : 
  279918             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  279919             :        */
  279920             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  279921             : 
  279922             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  279923             :        // This traversal helps support internal tools that call static member functions.
  279924             :        // note: this function operates on the memory pools.
  279925             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  279926             :        */
  279927             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  279928             :       /* */
  279929             : 
  279930             : 
  279931             :      public:
  279932             :       /* name Memory Allocation Functions
  279933             :           \brief Memory allocations functions ... incomplete-documentation
  279934             : 
  279935             :           These functions have been made public as part of the design, but they are suggested for internal use 
  279936             :           or by particularly knowledgable users for specialized tools or applications.
  279937             :        */
  279938             :       /* */
  279939             : 
  279940             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  279941             : 
  279942             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  279943             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  279944             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  279945             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  279946             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  279947             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  279948             :           being used with the AST File I/O mechanism.
  279949             :        */
  279950             :           virtual bool isInMemoryPool() override;
  279951             : 
  279952             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  279953             : 
  279954             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  279955             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  279956             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  279957             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  279958             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  279959             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  279960             :           being used with the AST File I/O mechanism.
  279961             :        */
  279962             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  279963             : 
  279964             :       // DQ (4/30/2006): Modified to be a const function.
  279965             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  279966             : 
  279967             :           This functions is part of general support for many possible tools to operate 
  279968             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  279969             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  279970             :           less than the set of pointers used by the AST file I/O. This is part of
  279971             :           work implemented by Andreas, and support tools such as the AST graph generation.
  279972             : 
  279973             :           \warning This function can return unexpected data members and thus the 
  279974             :                    order and the number of elements is unpredicable and subject 
  279975             :                    to change.
  279976             : 
  279977             :           \returns STL vector of pairs of SgNode* and strings
  279978             :        */
  279979             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  279980             : 
  279981             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  279982             : 
  279983             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  279984             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  279985             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  279986             : 
  279987             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  279988             :                    and subject to change.
  279989             :        */
  279990             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  279991             : 
  279992             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  279993             : 
  279994             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  279995             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  279996             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  279997             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  279998             : 
  279999             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  280000             : 
  280001             :           \returns long
  280002             :        */
  280003             :           virtual long getChildIndex( SgNode* childNode ) const override;
  280004             : 
  280005             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  280006             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  280007             :       /* \brief Constructor for use by AST File I/O Mechanism
  280008             : 
  280009             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  280010             :           which obtained via fast binary file I/O from disk.
  280011             :        */
  280012             :        // SgIntVal( SgIntValStorageClass& source );
  280013             : 
  280014             : 
  280015             : 
  280016             : 
  280017             : 
  280018             :  // JH (10/24/2005): methods added to support the ast file IO
  280019             :     private:
  280020             : 
  280021             :       /* name AST Memory Allocation Support Functions
  280022             :           \brief Memory allocations support....
  280023             : 
  280024             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  280025             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  280026             :           and support the AST File I/O Mechanism.
  280027             :        */
  280028             :       /* */
  280029             : 
  280030             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  280031             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  280032             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  280033             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  280034             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  280035             :           a correspinding one in the AST_FILE_IO class!
  280036             :        */
  280037             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  280038             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  280039             :       /* \brief Typedef used for low level memory access.
  280040             :        */
  280041             :        // typedef unsigned char* TestType;
  280042             : 
  280043             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  280044             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  280045             :       /* \brief Typedef used to hold memory addresses as values.
  280046             :        */
  280047             :        // typedef unsigned long  AddressType;
  280048             : 
  280049             : 
  280050             : 
  280051             :        // necessary, to have direct access to the p_freepointer and the private methods !
  280052             :       /*! \brief friend class declaration to support AST File I/O */
  280053             :           friend class AST_FILE_IO;
  280054             : 
  280055             :       /*! \brief friend class declaration to support AST File I/O */
  280056             :           friend class SgIntValStorageClass;
  280057             : 
  280058             :       /*! \brief friend class declaration to support AST File I/O */
  280059             :           friend class AstSpecificDataManagingClass;
  280060             : 
  280061             :       /*! \brief friend class declaration to support AST File I/O */
  280062             :           friend class AstSpecificDataManagingClassStorageClass;
  280063             :     public:
  280064             :       /*! \brief IR node constructor to support AST File I/O */
  280065             :           SgIntVal( const SgIntValStorageClass& source );
  280066             : 
  280067             :  // private: // JJW hack
  280068             :        /*
  280069             :           name AST Memory Allocation Support Variables
  280070             :           Memory allocations support variables 
  280071             : 
  280072             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  280073             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  280074             :           and support the AST File I/O Mechanism.
  280075             :        */
  280076             :       /* */
  280077             : 
  280078             :     public:
  280079             : 
  280080             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  280081             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  280082             :       // virtual SgNode* addRegExpAttribute();
  280083             :       /*! \brief Support for AST matching using regular expression.
  280084             : 
  280085             :           This support is incomplete and the subject of current research to define 
  280086             :           RegEx trees to support inexact matching.
  280087             :        */
  280088             :           SgIntVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  280089             : 
  280090             : // *** COMMON CODE SECTION ENDS HERE ***
  280091             : 
  280092             : 
  280093             : // End of memberFunctionString
  280094             : // Start of memberFunctionString
  280095             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  280096             : 
  280097             :      // the generated cast function
  280098             :      // friend ROSE_DLL_API SgIntVal* isSgIntVal ( SgNode* s );
  280099             : 
  280100             :           typedef SgValueExp base_node_type;
  280101             : 
  280102             : 
  280103             : // End of memberFunctionString
  280104             : // Start of memberFunctionString
  280105             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  280106             : 
  280107             :           SgType* get_type() const override;
  280108             : 
  280109             : 
  280110             : // End of memberFunctionString
  280111             : // Start of memberFunctionString
  280112             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  280113             : 
  280114             :           void post_construction_initialization() override;
  280115             : 
  280116             : 
  280117             : // End of memberFunctionString
  280118             : 
  280119             :      public: 
  280120             :          int get_value() const;
  280121             :          void set_value(int value);
  280122             : 
  280123             :      public: 
  280124             :          std::string get_valueString() const;
  280125             :          void set_valueString(std::string valueString);
  280126             : 
  280127             : 
  280128             :      public: 
  280129             :          virtual ~SgIntVal();
  280130             : 
  280131             : 
  280132             :      public: 
  280133             :          SgIntVal(Sg_File_Info* startOfConstruct , int value = 0, std::string valueString = ""); 
  280134             :          SgIntVal(int value, std::string valueString); 
  280135             : 
  280136             :     protected:
  280137             : // Start of memberFunctionString
  280138             : int p_value;
  280139             :           
  280140             : // End of memberFunctionString
  280141             : // Start of memberFunctionString
  280142             : std::string p_valueString;
  280143             :           
  280144             : // End of memberFunctionString
  280145             : 
  280146             :     friend struct Rose::Traits::generated::describe_node_t<SgIntVal>;
  280147             :     friend struct Rose::Traits::generated::describe_field_t<SgIntVal, int,&SgIntVal::p_value>;
  280148             :     friend struct Rose::Traits::generated::describe_field_t<SgIntVal, std::string,&SgIntVal::p_valueString>;
  280149             : 
  280150             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280151             : 
  280152             : 
  280153             :    };
  280154             : #endif
  280155             : 
  280156             : // postdeclarations for SgIntVal
  280157             : 
  280158             : /* #line 280159 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280159             : 
  280160             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  280161             : 
  280162             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280163             : 
  280164             : 
  280165             : /* #line 280166 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280166             : 
  280167             : 
  280168             : 
  280169             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280170             : 
  280171             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  280172             : //      This code is automatically generated for each 
  280173             : //      terminal and non-terminal within the defined 
  280174             : //      grammar.  There is a simple way to change the 
  280175             : //      code to fix bugs etc.  See the ROSE README file
  280176             : //      for directions.
  280177             : 
  280178             : // tps: (02/22/2010): Adding DLL export requirements
  280179             : #include "rosedll.h"
  280180             : 
  280181             : // predeclarations for SgEnumVal
  280182             : 
  280183             : /* #line 280184 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280184             : 
  280185             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  280186             : 
  280187             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280188             : 
  280189             : #if 1
  280190             : // Class Definition for SgEnumVal
  280191             : class ROSE_DLL_API SgEnumVal  : public SgValueExp
  280192             :    {
  280193             :      public:
  280194             : 
  280195             : 
  280196             : /* #line 280197 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280197             : 
  280198             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  280199             : // Start of memberFunctionString
  280200             : /* #line 631 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  280201             : 
  280202             : 
  280203             :        // DQ (2/5/2020): Addedin custom get_type() function so that we can pass the associated SgEnumDeclaration.
  280204             :        // This code is already generated by ROSETTA, so we don't need to specify this here.
  280205             :        // SgType* get_type() const override;
  280206             : 
  280207             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  280208             :           int get_name_qualification_length() const override;
  280209             :           void set_name_qualification_length(int name_qualification_length) override;
  280210             : 
  280211             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  280212             :           bool get_type_elaboration_required() const override;
  280213             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  280214             : 
  280215             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  280216             :           bool get_global_qualification_required() const override;
  280217             :           void set_global_qualification_required(bool global_qualification_required) override;
  280218             : 
  280219             : 
  280220             : 
  280221             : // End of memberFunctionString
  280222             : // Start of memberFunctionString
  280223             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  280224             : 
  280225             : // *** COMMON CODE SECTION BEGINS HERE ***
  280226             : 
  280227             :     public:
  280228             : 
  280229             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  280230             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  280231             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  280232             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  280233             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  280234             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  280235             : 
  280236             :       /*! \brief returns a string representing the class name */
  280237             :           virtual std::string class_name() const override;
  280238             : 
  280239             :       /*! \brief returns new style SageIII enum values */
  280240             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  280241             : 
  280242             :       /*! \brief static variant value */
  280243             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  280244             :        // static const VariantT static_variant = V_SgEnumVal;
  280245             :           enum { static_variant = V_SgEnumVal };
  280246             : 
  280247             :        /* the generated cast function */
  280248             :       /*! \brief Casts pointer from base class to derived class */
  280249             :           ROSE_DLL_API friend       SgEnumVal* isSgEnumVal(       SgNode * s );
  280250             : 
  280251             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  280252             :           ROSE_DLL_API friend const SgEnumVal* isSgEnumVal( const SgNode * s );
  280253             : 
  280254             :      // ******************************************
  280255             :      // * Memory Pool / New / Delete
  280256             :      // ******************************************
  280257             : 
  280258             :      public:
  280259             :           /// \private
  280260             :           static const unsigned pool_size; //
  280261             :           /// \private
  280262             :           static std::vector<unsigned char *> pools; //
  280263             :           /// \private
  280264             :           static SgEnumVal * next_node; // 
  280265             : 
  280266             :           /// \private
  280267             :           static unsigned long initializeStorageClassArray(SgEnumValStorageClass *); //
  280268             : 
  280269             :           /// \private
  280270             :           static void clearMemoryPool(); //
  280271             :           static void deleteMemoryPool(); //
  280272             : 
  280273             :           /// \private
  280274             :           static void extendMemoryPoolForFileIO(); //
  280275             : 
  280276             :           /// \private
  280277             :           static SgEnumVal * getPointerFromGlobalIndex(unsigned long); //
  280278             :           /// \private
  280279             :           static SgEnumVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  280280             : 
  280281             :           /// \private
  280282             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  280283             :           /// \private
  280284             :           static void resetValidFreepointers(); //
  280285             :           /// \private
  280286             :           static unsigned long getNumberOfLastValidPointer(); //
  280287             : 
  280288             : 
  280289             : #if defined(INLINE_FUNCTIONS)
  280290             :       /*! \brief returns pointer to newly allocated IR node */
  280291             :           inline void *operator new (size_t size);
  280292             : #else
  280293             :       /*! \brief returns pointer to newly allocated IR node */
  280294             :           void *operator new (size_t size);
  280295             : #endif
  280296             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  280297             :           void operator delete (void* pointer, size_t size);
  280298             : 
  280299             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  280300        4013 :           void operator delete (void* pointer)
  280301             :              {
  280302             :             // This is the generated delete operator...
  280303        4013 :                SgEnumVal::operator delete (pointer,sizeof(SgEnumVal));
  280304             :              }
  280305             : 
  280306             :       /*! \brief Returns the total number of IR nodes of this type */
  280307             :           static size_t numberOfNodes();
  280308             : 
  280309             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  280310             :           static size_t memoryUsage();
  280311             : 
  280312             :       // End of scope which started in IR nodes specific code 
  280313             :       /* */
  280314             : 
  280315             :       /* name Internal Functions
  280316             :           \brief Internal functions ... incomplete-documentation
  280317             : 
  280318             :           These functions have been made public as part of the design, but they are suggested for internal use 
  280319             :           or by particularly knowledgeable users for specialized tools or applications.
  280320             : 
  280321             :           \internal We could not make these private because they are required by user for special purposes. And 
  280322             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  280323             :          
  280324             :        */
  280325             : 
  280326             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  280327             :        // overridden in every class by *generated* implementation
  280328             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  280329             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  280330             :        // MS: 06/28/02 container of names of variables or container indices 
  280331             :        // used used in the traversal to access AST successor nodes
  280332             :        // overridden in every class by *generated* implementation
  280333             :       /*! \brief container of names of variables or container indices used used in the traversal
  280334             :           to access AST successor nodes overridden in every class by *generated* implementation */
  280335             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  280336             : 
  280337             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  280338             :        // than all the vector copies. The implementation for these functions is generated for each class.
  280339             :       /*! \brief return number of children in the traversal successor list */
  280340             :           virtual size_t get_numberOfTraversalSuccessors() override;
  280341             :       /*! \brief index-based access to traversal successors by index number */
  280342             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  280343             :       /*! \brief index-based access to traversal successors by child node */
  280344             :           virtual size_t get_childIndex(SgNode *child) override;
  280345             : 
  280346             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  280347             :        // MS: 08/16/2002 method for generating RTI information
  280348             :       /*! \brief return C++ Runtime-Time-Information */
  280349             :           virtual RTIReturnType roseRTI() override;
  280350             : #endif
  280351             :       /* */
  280352             : 
  280353             : 
  280354             : 
  280355             :       /* name Deprecated Functions
  280356             :           \brief Deprecated functions ... incomplete-documentation
  280357             : 
  280358             :           These functions have been deprecated from use.
  280359             :        */
  280360             :       /* */
  280361             : 
  280362             :       /*! returns a C style string (char*) representing the class name */
  280363             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  280364             : 
  280365             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  280366             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  280367             : #if 0
  280368             :       /*! returns old style Sage II enum values */
  280369             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  280370             :       /*! returns old style Sage II enum values */
  280371             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  280372             : #endif
  280373             :       /* */
  280374             : 
  280375             : 
  280376             : 
  280377             : 
  280378             :      public:
  280379             :       /* name Traversal Support Functions
  280380             :           \brief Traversal support functions ... incomplete-documentation
  280381             : 
  280382             :           These functions have been made public as part of the design, but they are suggested for internal use 
  280383             :           or by particularly knowledgable users for specialized tools or applications.
  280384             :        */
  280385             :       /* */
  280386             : 
  280387             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  280388             :        // (inferior to ROSE traversal mechanism, experimental).
  280389             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  280390             :        */
  280391             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  280392             : 
  280393             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  280394             :       /*! \brief support for the classic visitor pattern done in GoF */
  280395             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  280396             : 
  280397             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  280398             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  280399             :        */
  280400             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  280401             : 
  280402             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  280403             :        */
  280404             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  280405             : 
  280406             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  280407             :        // This traversal helps support internal tools that call static member functions.
  280408             :        // note: this function operates on the memory pools.
  280409             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  280410             :        */
  280411             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  280412             :       /* */
  280413             : 
  280414             : 
  280415             :      public:
  280416             :       /* name Memory Allocation Functions
  280417             :           \brief Memory allocations functions ... incomplete-documentation
  280418             : 
  280419             :           These functions have been made public as part of the design, but they are suggested for internal use 
  280420             :           or by particularly knowledgable users for specialized tools or applications.
  280421             :        */
  280422             :       /* */
  280423             : 
  280424             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  280425             : 
  280426             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  280427             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  280428             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  280429             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  280430             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  280431             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  280432             :           being used with the AST File I/O mechanism.
  280433             :        */
  280434             :           virtual bool isInMemoryPool() override;
  280435             : 
  280436             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  280437             : 
  280438             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  280439             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  280440             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  280441             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  280442             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  280443             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  280444             :           being used with the AST File I/O mechanism.
  280445             :        */
  280446             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  280447             : 
  280448             :       // DQ (4/30/2006): Modified to be a const function.
  280449             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  280450             : 
  280451             :           This functions is part of general support for many possible tools to operate 
  280452             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  280453             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  280454             :           less than the set of pointers used by the AST file I/O. This is part of
  280455             :           work implemented by Andreas, and support tools such as the AST graph generation.
  280456             : 
  280457             :           \warning This function can return unexpected data members and thus the 
  280458             :                    order and the number of elements is unpredicable and subject 
  280459             :                    to change.
  280460             : 
  280461             :           \returns STL vector of pairs of SgNode* and strings
  280462             :        */
  280463             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  280464             : 
  280465             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  280466             : 
  280467             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  280468             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  280469             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  280470             : 
  280471             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  280472             :                    and subject to change.
  280473             :        */
  280474             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  280475             : 
  280476             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  280477             : 
  280478             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  280479             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  280480             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  280481             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  280482             : 
  280483             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  280484             : 
  280485             :           \returns long
  280486             :        */
  280487             :           virtual long getChildIndex( SgNode* childNode ) const override;
  280488             : 
  280489             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  280490             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  280491             :       /* \brief Constructor for use by AST File I/O Mechanism
  280492             : 
  280493             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  280494             :           which obtained via fast binary file I/O from disk.
  280495             :        */
  280496             :        // SgEnumVal( SgEnumValStorageClass& source );
  280497             : 
  280498             : 
  280499             : 
  280500             : 
  280501             : 
  280502             :  // JH (10/24/2005): methods added to support the ast file IO
  280503             :     private:
  280504             : 
  280505             :       /* name AST Memory Allocation Support Functions
  280506             :           \brief Memory allocations support....
  280507             : 
  280508             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  280509             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  280510             :           and support the AST File I/O Mechanism.
  280511             :        */
  280512             :       /* */
  280513             : 
  280514             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  280515             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  280516             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  280517             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  280518             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  280519             :           a correspinding one in the AST_FILE_IO class!
  280520             :        */
  280521             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  280522             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  280523             :       /* \brief Typedef used for low level memory access.
  280524             :        */
  280525             :        // typedef unsigned char* TestType;
  280526             : 
  280527             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  280528             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  280529             :       /* \brief Typedef used to hold memory addresses as values.
  280530             :        */
  280531             :        // typedef unsigned long  AddressType;
  280532             : 
  280533             : 
  280534             : 
  280535             :        // necessary, to have direct access to the p_freepointer and the private methods !
  280536             :       /*! \brief friend class declaration to support AST File I/O */
  280537             :           friend class AST_FILE_IO;
  280538             : 
  280539             :       /*! \brief friend class declaration to support AST File I/O */
  280540             :           friend class SgEnumValStorageClass;
  280541             : 
  280542             :       /*! \brief friend class declaration to support AST File I/O */
  280543             :           friend class AstSpecificDataManagingClass;
  280544             : 
  280545             :       /*! \brief friend class declaration to support AST File I/O */
  280546             :           friend class AstSpecificDataManagingClassStorageClass;
  280547             :     public:
  280548             :       /*! \brief IR node constructor to support AST File I/O */
  280549             :           SgEnumVal( const SgEnumValStorageClass& source );
  280550             : 
  280551             :  // private: // JJW hack
  280552             :        /*
  280553             :           name AST Memory Allocation Support Variables
  280554             :           Memory allocations support variables 
  280555             : 
  280556             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  280557             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  280558             :           and support the AST File I/O Mechanism.
  280559             :        */
  280560             :       /* */
  280561             : 
  280562             :     public:
  280563             : 
  280564             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  280565             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  280566             :       // virtual SgNode* addRegExpAttribute();
  280567             :       /*! \brief Support for AST matching using regular expression.
  280568             : 
  280569             :           This support is incomplete and the subject of current research to define 
  280570             :           RegEx trees to support inexact matching.
  280571             :        */
  280572             :           SgEnumVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  280573             : 
  280574             : // *** COMMON CODE SECTION ENDS HERE ***
  280575             : 
  280576             : 
  280577             : // End of memberFunctionString
  280578             : // Start of memberFunctionString
  280579             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  280580             : 
  280581             :      // the generated cast function
  280582             :      // friend ROSE_DLL_API SgEnumVal* isSgEnumVal ( SgNode* s );
  280583             : 
  280584             :           typedef SgValueExp base_node_type;
  280585             : 
  280586             : 
  280587             : // End of memberFunctionString
  280588             : // Start of memberFunctionString
  280589             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  280590             : 
  280591             :           SgType* get_type() const override;
  280592             : 
  280593             : 
  280594             : // End of memberFunctionString
  280595             : // Start of memberFunctionString
  280596             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  280597             : 
  280598             :           void post_construction_initialization() override;
  280599             : 
  280600             : 
  280601             : // End of memberFunctionString
  280602             : 
  280603             :      public: 
  280604             :          long long int get_value() const;
  280605             :          void set_value(long long int value);
  280606             : 
  280607             :      public: 
  280608             :          SgEnumDeclaration* get_declaration() const;
  280609             :          void set_declaration(SgEnumDeclaration* declaration);
  280610             : 
  280611             :      public: 
  280612             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  280613             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  280614             : 
  280615             :      public: 
  280616             :          bool get_requiresNameQualification() const;
  280617             :          void set_requiresNameQualification(bool requiresNameQualification);
  280618             : 
  280619             : 
  280620             : 
  280621             : 
  280622             : 
  280623             :      public: 
  280624             :          virtual ~SgEnumVal();
  280625             : 
  280626             : 
  280627             :      public: 
  280628             :          SgEnumVal(Sg_File_Info* startOfConstruct , long long int value = 0, SgEnumDeclaration* declaration = NULL, SgName name = ""); 
  280629             :          SgEnumVal(long long int value, SgEnumDeclaration* declaration, SgName name); 
  280630             : 
  280631             :     protected:
  280632             : // Start of memberFunctionString
  280633             : long long int p_value;
  280634             :           
  280635             : // End of memberFunctionString
  280636             : // Start of memberFunctionString
  280637             : SgEnumDeclaration* p_declaration;
  280638             :           
  280639             : // End of memberFunctionString
  280640             : // Start of memberFunctionString
  280641             : SgName p_name;
  280642             :           
  280643             : // End of memberFunctionString
  280644             : // Start of memberFunctionString
  280645             : bool p_requiresNameQualification;
  280646             :           
  280647             : // End of memberFunctionString
  280648             : // Start of memberFunctionString
  280649             : int p_name_qualification_length;
  280650             :           
  280651             : // End of memberFunctionString
  280652             : // Start of memberFunctionString
  280653             : bool p_type_elaboration_required;
  280654             :           
  280655             : // End of memberFunctionString
  280656             : // Start of memberFunctionString
  280657             : bool p_global_qualification_required;
  280658             :           
  280659             : // End of memberFunctionString
  280660             : 
  280661             :     friend struct Rose::Traits::generated::describe_node_t<SgEnumVal>;
  280662             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumVal, long long int,&SgEnumVal::p_value>;
  280663             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumVal, SgEnumDeclaration*,&SgEnumVal::p_declaration>;
  280664             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumVal, SgName,&SgEnumVal::p_name>;
  280665             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumVal, bool,&SgEnumVal::p_requiresNameQualification>;
  280666             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumVal, int,&SgEnumVal::p_name_qualification_length>;
  280667             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumVal, bool,&SgEnumVal::p_type_elaboration_required>;
  280668             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumVal, bool,&SgEnumVal::p_global_qualification_required>;
  280669             : 
  280670             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280671             : 
  280672             : 
  280673             :    };
  280674             : #endif
  280675             : 
  280676             : // postdeclarations for SgEnumVal
  280677             : 
  280678             : /* #line 280679 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280679             : 
  280680             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  280681             : 
  280682             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280683             : 
  280684             : 
  280685             : /* #line 280686 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280686             : 
  280687             : 
  280688             : 
  280689             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280690             : 
  280691             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  280692             : //      This code is automatically generated for each 
  280693             : //      terminal and non-terminal within the defined 
  280694             : //      grammar.  There is a simple way to change the 
  280695             : //      code to fix bugs etc.  See the ROSE README file
  280696             : //      for directions.
  280697             : 
  280698             : // tps: (02/22/2010): Adding DLL export requirements
  280699             : #include "rosedll.h"
  280700             : 
  280701             : // predeclarations for SgUnsignedIntVal
  280702             : 
  280703             : /* #line 280704 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280704             : 
  280705             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  280706             : 
  280707             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  280708             : 
  280709             : #if 1
  280710             : // Class Definition for SgUnsignedIntVal
  280711             : class ROSE_DLL_API SgUnsignedIntVal  : public SgValueExp
  280712             :    {
  280713             :      public:
  280714             : 
  280715             : 
  280716             : /* #line 280717 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  280717             : 
  280718             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  280719             : // Start of memberFunctionString
  280720             : /* #line 652 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  280721             : 
  280722             : 
  280723             : 
  280724             : // End of memberFunctionString
  280725             : // Start of memberFunctionString
  280726             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  280727             : 
  280728             : // *** COMMON CODE SECTION BEGINS HERE ***
  280729             : 
  280730             :     public:
  280731             : 
  280732             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  280733             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  280734             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  280735             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  280736             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  280737             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  280738             : 
  280739             :       /*! \brief returns a string representing the class name */
  280740             :           virtual std::string class_name() const override;
  280741             : 
  280742             :       /*! \brief returns new style SageIII enum values */
  280743             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  280744             : 
  280745             :       /*! \brief static variant value */
  280746             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  280747             :        // static const VariantT static_variant = V_SgUnsignedIntVal;
  280748             :           enum { static_variant = V_SgUnsignedIntVal };
  280749             : 
  280750             :        /* the generated cast function */
  280751             :       /*! \brief Casts pointer from base class to derived class */
  280752             :           ROSE_DLL_API friend       SgUnsignedIntVal* isSgUnsignedIntVal(       SgNode * s );
  280753             : 
  280754             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  280755             :           ROSE_DLL_API friend const SgUnsignedIntVal* isSgUnsignedIntVal( const SgNode * s );
  280756             : 
  280757             :      // ******************************************
  280758             :      // * Memory Pool / New / Delete
  280759             :      // ******************************************
  280760             : 
  280761             :      public:
  280762             :           /// \private
  280763             :           static const unsigned pool_size; //
  280764             :           /// \private
  280765             :           static std::vector<unsigned char *> pools; //
  280766             :           /// \private
  280767             :           static SgUnsignedIntVal * next_node; // 
  280768             : 
  280769             :           /// \private
  280770             :           static unsigned long initializeStorageClassArray(SgUnsignedIntValStorageClass *); //
  280771             : 
  280772             :           /// \private
  280773             :           static void clearMemoryPool(); //
  280774             :           static void deleteMemoryPool(); //
  280775             : 
  280776             :           /// \private
  280777             :           static void extendMemoryPoolForFileIO(); //
  280778             : 
  280779             :           /// \private
  280780             :           static SgUnsignedIntVal * getPointerFromGlobalIndex(unsigned long); //
  280781             :           /// \private
  280782             :           static SgUnsignedIntVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  280783             : 
  280784             :           /// \private
  280785             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  280786             :           /// \private
  280787             :           static void resetValidFreepointers(); //
  280788             :           /// \private
  280789             :           static unsigned long getNumberOfLastValidPointer(); //
  280790             : 
  280791             : 
  280792             : #if defined(INLINE_FUNCTIONS)
  280793             :       /*! \brief returns pointer to newly allocated IR node */
  280794             :           inline void *operator new (size_t size);
  280795             : #else
  280796             :       /*! \brief returns pointer to newly allocated IR node */
  280797             :           void *operator new (size_t size);
  280798             : #endif
  280799             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  280800             :           void operator delete (void* pointer, size_t size);
  280801             : 
  280802             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  280803         186 :           void operator delete (void* pointer)
  280804             :              {
  280805             :             // This is the generated delete operator...
  280806         186 :                SgUnsignedIntVal::operator delete (pointer,sizeof(SgUnsignedIntVal));
  280807             :              }
  280808             : 
  280809             :       /*! \brief Returns the total number of IR nodes of this type */
  280810             :           static size_t numberOfNodes();
  280811             : 
  280812             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  280813             :           static size_t memoryUsage();
  280814             : 
  280815             :       // End of scope which started in IR nodes specific code 
  280816             :       /* */
  280817             : 
  280818             :       /* name Internal Functions
  280819             :           \brief Internal functions ... incomplete-documentation
  280820             : 
  280821             :           These functions have been made public as part of the design, but they are suggested for internal use 
  280822             :           or by particularly knowledgeable users for specialized tools or applications.
  280823             : 
  280824             :           \internal We could not make these private because they are required by user for special purposes. And 
  280825             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  280826             :          
  280827             :        */
  280828             : 
  280829             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  280830             :        // overridden in every class by *generated* implementation
  280831             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  280832             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  280833             :        // MS: 06/28/02 container of names of variables or container indices 
  280834             :        // used used in the traversal to access AST successor nodes
  280835             :        // overridden in every class by *generated* implementation
  280836             :       /*! \brief container of names of variables or container indices used used in the traversal
  280837             :           to access AST successor nodes overridden in every class by *generated* implementation */
  280838             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  280839             : 
  280840             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  280841             :        // than all the vector copies. The implementation for these functions is generated for each class.
  280842             :       /*! \brief return number of children in the traversal successor list */
  280843             :           virtual size_t get_numberOfTraversalSuccessors() override;
  280844             :       /*! \brief index-based access to traversal successors by index number */
  280845             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  280846             :       /*! \brief index-based access to traversal successors by child node */
  280847             :           virtual size_t get_childIndex(SgNode *child) override;
  280848             : 
  280849             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  280850             :        // MS: 08/16/2002 method for generating RTI information
  280851             :       /*! \brief return C++ Runtime-Time-Information */
  280852             :           virtual RTIReturnType roseRTI() override;
  280853             : #endif
  280854             :       /* */
  280855             : 
  280856             : 
  280857             : 
  280858             :       /* name Deprecated Functions
  280859             :           \brief Deprecated functions ... incomplete-documentation
  280860             : 
  280861             :           These functions have been deprecated from use.
  280862             :        */
  280863             :       /* */
  280864             : 
  280865             :       /*! returns a C style string (char*) representing the class name */
  280866             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  280867             : 
  280868             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  280869             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  280870             : #if 0
  280871             :       /*! returns old style Sage II enum values */
  280872             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  280873             :       /*! returns old style Sage II enum values */
  280874             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  280875             : #endif
  280876             :       /* */
  280877             : 
  280878             : 
  280879             : 
  280880             : 
  280881             :      public:
  280882             :       /* name Traversal Support Functions
  280883             :           \brief Traversal support functions ... incomplete-documentation
  280884             : 
  280885             :           These functions have been made public as part of the design, but they are suggested for internal use 
  280886             :           or by particularly knowledgable users for specialized tools or applications.
  280887             :        */
  280888             :       /* */
  280889             : 
  280890             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  280891             :        // (inferior to ROSE traversal mechanism, experimental).
  280892             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  280893             :        */
  280894             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  280895             : 
  280896             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  280897             :       /*! \brief support for the classic visitor pattern done in GoF */
  280898             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  280899             : 
  280900             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  280901             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  280902             :        */
  280903             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  280904             : 
  280905             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  280906             :        */
  280907             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  280908             : 
  280909             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  280910             :        // This traversal helps support internal tools that call static member functions.
  280911             :        // note: this function operates on the memory pools.
  280912             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  280913             :        */
  280914             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  280915             :       /* */
  280916             : 
  280917             : 
  280918             :      public:
  280919             :       /* name Memory Allocation Functions
  280920             :           \brief Memory allocations functions ... incomplete-documentation
  280921             : 
  280922             :           These functions have been made public as part of the design, but they are suggested for internal use 
  280923             :           or by particularly knowledgable users for specialized tools or applications.
  280924             :        */
  280925             :       /* */
  280926             : 
  280927             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  280928             : 
  280929             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  280930             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  280931             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  280932             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  280933             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  280934             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  280935             :           being used with the AST File I/O mechanism.
  280936             :        */
  280937             :           virtual bool isInMemoryPool() override;
  280938             : 
  280939             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  280940             : 
  280941             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  280942             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  280943             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  280944             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  280945             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  280946             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  280947             :           being used with the AST File I/O mechanism.
  280948             :        */
  280949             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  280950             : 
  280951             :       // DQ (4/30/2006): Modified to be a const function.
  280952             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  280953             : 
  280954             :           This functions is part of general support for many possible tools to operate 
  280955             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  280956             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  280957             :           less than the set of pointers used by the AST file I/O. This is part of
  280958             :           work implemented by Andreas, and support tools such as the AST graph generation.
  280959             : 
  280960             :           \warning This function can return unexpected data members and thus the 
  280961             :                    order and the number of elements is unpredicable and subject 
  280962             :                    to change.
  280963             : 
  280964             :           \returns STL vector of pairs of SgNode* and strings
  280965             :        */
  280966             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  280967             : 
  280968             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  280969             : 
  280970             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  280971             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  280972             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  280973             : 
  280974             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  280975             :                    and subject to change.
  280976             :        */
  280977             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  280978             : 
  280979             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  280980             : 
  280981             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  280982             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  280983             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  280984             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  280985             : 
  280986             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  280987             : 
  280988             :           \returns long
  280989             :        */
  280990             :           virtual long getChildIndex( SgNode* childNode ) const override;
  280991             : 
  280992             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  280993             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  280994             :       /* \brief Constructor for use by AST File I/O Mechanism
  280995             : 
  280996             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  280997             :           which obtained via fast binary file I/O from disk.
  280998             :        */
  280999             :        // SgUnsignedIntVal( SgUnsignedIntValStorageClass& source );
  281000             : 
  281001             : 
  281002             : 
  281003             : 
  281004             : 
  281005             :  // JH (10/24/2005): methods added to support the ast file IO
  281006             :     private:
  281007             : 
  281008             :       /* name AST Memory Allocation Support Functions
  281009             :           \brief Memory allocations support....
  281010             : 
  281011             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  281012             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  281013             :           and support the AST File I/O Mechanism.
  281014             :        */
  281015             :       /* */
  281016             : 
  281017             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  281018             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  281019             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  281020             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  281021             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  281022             :           a correspinding one in the AST_FILE_IO class!
  281023             :        */
  281024             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  281025             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281026             :       /* \brief Typedef used for low level memory access.
  281027             :        */
  281028             :        // typedef unsigned char* TestType;
  281029             : 
  281030             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  281031             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281032             :       /* \brief Typedef used to hold memory addresses as values.
  281033             :        */
  281034             :        // typedef unsigned long  AddressType;
  281035             : 
  281036             : 
  281037             : 
  281038             :        // necessary, to have direct access to the p_freepointer and the private methods !
  281039             :       /*! \brief friend class declaration to support AST File I/O */
  281040             :           friend class AST_FILE_IO;
  281041             : 
  281042             :       /*! \brief friend class declaration to support AST File I/O */
  281043             :           friend class SgUnsignedIntValStorageClass;
  281044             : 
  281045             :       /*! \brief friend class declaration to support AST File I/O */
  281046             :           friend class AstSpecificDataManagingClass;
  281047             : 
  281048             :       /*! \brief friend class declaration to support AST File I/O */
  281049             :           friend class AstSpecificDataManagingClassStorageClass;
  281050             :     public:
  281051             :       /*! \brief IR node constructor to support AST File I/O */
  281052             :           SgUnsignedIntVal( const SgUnsignedIntValStorageClass& source );
  281053             : 
  281054             :  // private: // JJW hack
  281055             :        /*
  281056             :           name AST Memory Allocation Support Variables
  281057             :           Memory allocations support variables 
  281058             : 
  281059             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  281060             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  281061             :           and support the AST File I/O Mechanism.
  281062             :        */
  281063             :       /* */
  281064             : 
  281065             :     public:
  281066             : 
  281067             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  281068             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  281069             :       // virtual SgNode* addRegExpAttribute();
  281070             :       /*! \brief Support for AST matching using regular expression.
  281071             : 
  281072             :           This support is incomplete and the subject of current research to define 
  281073             :           RegEx trees to support inexact matching.
  281074             :        */
  281075             :           SgUnsignedIntVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  281076             : 
  281077             : // *** COMMON CODE SECTION ENDS HERE ***
  281078             : 
  281079             : 
  281080             : // End of memberFunctionString
  281081             : // Start of memberFunctionString
  281082             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  281083             : 
  281084             :      // the generated cast function
  281085             :      // friend ROSE_DLL_API SgUnsignedIntVal* isSgUnsignedIntVal ( SgNode* s );
  281086             : 
  281087             :           typedef SgValueExp base_node_type;
  281088             : 
  281089             : 
  281090             : // End of memberFunctionString
  281091             : // Start of memberFunctionString
  281092             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  281093             : 
  281094             :           SgType* get_type() const override;
  281095             : 
  281096             : 
  281097             : // End of memberFunctionString
  281098             : // Start of memberFunctionString
  281099             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  281100             : 
  281101             :           void post_construction_initialization() override;
  281102             : 
  281103             : 
  281104             : // End of memberFunctionString
  281105             : 
  281106             :      public: 
  281107             :          unsigned int get_value() const;
  281108             :          void set_value(unsigned int value);
  281109             : 
  281110             :      public: 
  281111             :          std::string get_valueString() const;
  281112             :          void set_valueString(std::string valueString);
  281113             : 
  281114             : 
  281115             :      public: 
  281116             :          virtual ~SgUnsignedIntVal();
  281117             : 
  281118             : 
  281119             :      public: 
  281120             :          SgUnsignedIntVal(Sg_File_Info* startOfConstruct , unsigned int value = 0, std::string valueString = ""); 
  281121             :          SgUnsignedIntVal(unsigned int value, std::string valueString); 
  281122             : 
  281123             :     protected:
  281124             : // Start of memberFunctionString
  281125             : unsigned int p_value;
  281126             :           
  281127             : // End of memberFunctionString
  281128             : // Start of memberFunctionString
  281129             : std::string p_valueString;
  281130             :           
  281131             : // End of memberFunctionString
  281132             : 
  281133             :     friend struct Rose::Traits::generated::describe_node_t<SgUnsignedIntVal>;
  281134             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedIntVal, unsigned int,&SgUnsignedIntVal::p_value>;
  281135             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedIntVal, std::string,&SgUnsignedIntVal::p_valueString>;
  281136             : 
  281137             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281138             : 
  281139             : 
  281140             :    };
  281141             : #endif
  281142             : 
  281143             : // postdeclarations for SgUnsignedIntVal
  281144             : 
  281145             : /* #line 281146 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281146             : 
  281147             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  281148             : 
  281149             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281150             : 
  281151             : 
  281152             : /* #line 281153 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281153             : 
  281154             : 
  281155             : 
  281156             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281157             : 
  281158             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  281159             : //      This code is automatically generated for each 
  281160             : //      terminal and non-terminal within the defined 
  281161             : //      grammar.  There is a simple way to change the 
  281162             : //      code to fix bugs etc.  See the ROSE README file
  281163             : //      for directions.
  281164             : 
  281165             : // tps: (02/22/2010): Adding DLL export requirements
  281166             : #include "rosedll.h"
  281167             : 
  281168             : // predeclarations for SgLongIntVal
  281169             : 
  281170             : /* #line 281171 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281171             : 
  281172             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  281173             : 
  281174             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281175             : 
  281176             : #if 1
  281177             : // Class Definition for SgLongIntVal
  281178             : class ROSE_DLL_API SgLongIntVal  : public SgValueExp
  281179             :    {
  281180             :      public:
  281181             : 
  281182             : 
  281183             : /* #line 281184 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281184             : 
  281185             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  281186             : // Start of memberFunctionString
  281187             : /* #line 656 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  281188             : 
  281189             : 
  281190             : 
  281191             : // End of memberFunctionString
  281192             : // Start of memberFunctionString
  281193             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  281194             : 
  281195             : // *** COMMON CODE SECTION BEGINS HERE ***
  281196             : 
  281197             :     public:
  281198             : 
  281199             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  281200             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  281201             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  281202             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  281203             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  281204             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  281205             : 
  281206             :       /*! \brief returns a string representing the class name */
  281207             :           virtual std::string class_name() const override;
  281208             : 
  281209             :       /*! \brief returns new style SageIII enum values */
  281210             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  281211             : 
  281212             :       /*! \brief static variant value */
  281213             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  281214             :        // static const VariantT static_variant = V_SgLongIntVal;
  281215             :           enum { static_variant = V_SgLongIntVal };
  281216             : 
  281217             :        /* the generated cast function */
  281218             :       /*! \brief Casts pointer from base class to derived class */
  281219             :           ROSE_DLL_API friend       SgLongIntVal* isSgLongIntVal(       SgNode * s );
  281220             : 
  281221             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  281222             :           ROSE_DLL_API friend const SgLongIntVal* isSgLongIntVal( const SgNode * s );
  281223             : 
  281224             :      // ******************************************
  281225             :      // * Memory Pool / New / Delete
  281226             :      // ******************************************
  281227             : 
  281228             :      public:
  281229             :           /// \private
  281230             :           static const unsigned pool_size; //
  281231             :           /// \private
  281232             :           static std::vector<unsigned char *> pools; //
  281233             :           /// \private
  281234             :           static SgLongIntVal * next_node; // 
  281235             : 
  281236             :           /// \private
  281237             :           static unsigned long initializeStorageClassArray(SgLongIntValStorageClass *); //
  281238             : 
  281239             :           /// \private
  281240             :           static void clearMemoryPool(); //
  281241             :           static void deleteMemoryPool(); //
  281242             : 
  281243             :           /// \private
  281244             :           static void extendMemoryPoolForFileIO(); //
  281245             : 
  281246             :           /// \private
  281247             :           static SgLongIntVal * getPointerFromGlobalIndex(unsigned long); //
  281248             :           /// \private
  281249             :           static SgLongIntVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  281250             : 
  281251             :           /// \private
  281252             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  281253             :           /// \private
  281254             :           static void resetValidFreepointers(); //
  281255             :           /// \private
  281256             :           static unsigned long getNumberOfLastValidPointer(); //
  281257             : 
  281258             : 
  281259             : #if defined(INLINE_FUNCTIONS)
  281260             :       /*! \brief returns pointer to newly allocated IR node */
  281261             :           inline void *operator new (size_t size);
  281262             : #else
  281263             :       /*! \brief returns pointer to newly allocated IR node */
  281264             :           void *operator new (size_t size);
  281265             : #endif
  281266             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  281267             :           void operator delete (void* pointer, size_t size);
  281268             : 
  281269             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  281270        1844 :           void operator delete (void* pointer)
  281271             :              {
  281272             :             // This is the generated delete operator...
  281273        1844 :                SgLongIntVal::operator delete (pointer,sizeof(SgLongIntVal));
  281274             :              }
  281275             : 
  281276             :       /*! \brief Returns the total number of IR nodes of this type */
  281277             :           static size_t numberOfNodes();
  281278             : 
  281279             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  281280             :           static size_t memoryUsage();
  281281             : 
  281282             :       // End of scope which started in IR nodes specific code 
  281283             :       /* */
  281284             : 
  281285             :       /* name Internal Functions
  281286             :           \brief Internal functions ... incomplete-documentation
  281287             : 
  281288             :           These functions have been made public as part of the design, but they are suggested for internal use 
  281289             :           or by particularly knowledgeable users for specialized tools or applications.
  281290             : 
  281291             :           \internal We could not make these private because they are required by user for special purposes. And 
  281292             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  281293             :          
  281294             :        */
  281295             : 
  281296             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  281297             :        // overridden in every class by *generated* implementation
  281298             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  281299             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  281300             :        // MS: 06/28/02 container of names of variables or container indices 
  281301             :        // used used in the traversal to access AST successor nodes
  281302             :        // overridden in every class by *generated* implementation
  281303             :       /*! \brief container of names of variables or container indices used used in the traversal
  281304             :           to access AST successor nodes overridden in every class by *generated* implementation */
  281305             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  281306             : 
  281307             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  281308             :        // than all the vector copies. The implementation for these functions is generated for each class.
  281309             :       /*! \brief return number of children in the traversal successor list */
  281310             :           virtual size_t get_numberOfTraversalSuccessors() override;
  281311             :       /*! \brief index-based access to traversal successors by index number */
  281312             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  281313             :       /*! \brief index-based access to traversal successors by child node */
  281314             :           virtual size_t get_childIndex(SgNode *child) override;
  281315             : 
  281316             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  281317             :        // MS: 08/16/2002 method for generating RTI information
  281318             :       /*! \brief return C++ Runtime-Time-Information */
  281319             :           virtual RTIReturnType roseRTI() override;
  281320             : #endif
  281321             :       /* */
  281322             : 
  281323             : 
  281324             : 
  281325             :       /* name Deprecated Functions
  281326             :           \brief Deprecated functions ... incomplete-documentation
  281327             : 
  281328             :           These functions have been deprecated from use.
  281329             :        */
  281330             :       /* */
  281331             : 
  281332             :       /*! returns a C style string (char*) representing the class name */
  281333             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  281334             : 
  281335             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  281336             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  281337             : #if 0
  281338             :       /*! returns old style Sage II enum values */
  281339             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  281340             :       /*! returns old style Sage II enum values */
  281341             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  281342             : #endif
  281343             :       /* */
  281344             : 
  281345             : 
  281346             : 
  281347             : 
  281348             :      public:
  281349             :       /* name Traversal Support Functions
  281350             :           \brief Traversal support functions ... incomplete-documentation
  281351             : 
  281352             :           These functions have been made public as part of the design, but they are suggested for internal use 
  281353             :           or by particularly knowledgable users for specialized tools or applications.
  281354             :        */
  281355             :       /* */
  281356             : 
  281357             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  281358             :        // (inferior to ROSE traversal mechanism, experimental).
  281359             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  281360             :        */
  281361             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  281362             : 
  281363             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  281364             :       /*! \brief support for the classic visitor pattern done in GoF */
  281365             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  281366             : 
  281367             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  281368             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  281369             :        */
  281370             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  281371             : 
  281372             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  281373             :        */
  281374             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  281375             : 
  281376             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  281377             :        // This traversal helps support internal tools that call static member functions.
  281378             :        // note: this function operates on the memory pools.
  281379             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  281380             :        */
  281381             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  281382             :       /* */
  281383             : 
  281384             : 
  281385             :      public:
  281386             :       /* name Memory Allocation Functions
  281387             :           \brief Memory allocations functions ... incomplete-documentation
  281388             : 
  281389             :           These functions have been made public as part of the design, but they are suggested for internal use 
  281390             :           or by particularly knowledgable users for specialized tools or applications.
  281391             :        */
  281392             :       /* */
  281393             : 
  281394             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  281395             : 
  281396             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  281397             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  281398             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  281399             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  281400             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  281401             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  281402             :           being used with the AST File I/O mechanism.
  281403             :        */
  281404             :           virtual bool isInMemoryPool() override;
  281405             : 
  281406             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  281407             : 
  281408             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  281409             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  281410             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  281411             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  281412             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  281413             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  281414             :           being used with the AST File I/O mechanism.
  281415             :        */
  281416             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  281417             : 
  281418             :       // DQ (4/30/2006): Modified to be a const function.
  281419             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  281420             : 
  281421             :           This functions is part of general support for many possible tools to operate 
  281422             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  281423             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  281424             :           less than the set of pointers used by the AST file I/O. This is part of
  281425             :           work implemented by Andreas, and support tools such as the AST graph generation.
  281426             : 
  281427             :           \warning This function can return unexpected data members and thus the 
  281428             :                    order and the number of elements is unpredicable and subject 
  281429             :                    to change.
  281430             : 
  281431             :           \returns STL vector of pairs of SgNode* and strings
  281432             :        */
  281433             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  281434             : 
  281435             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  281436             : 
  281437             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  281438             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  281439             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  281440             : 
  281441             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  281442             :                    and subject to change.
  281443             :        */
  281444             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  281445             : 
  281446             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  281447             : 
  281448             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  281449             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  281450             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  281451             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  281452             : 
  281453             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  281454             : 
  281455             :           \returns long
  281456             :        */
  281457             :           virtual long getChildIndex( SgNode* childNode ) const override;
  281458             : 
  281459             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  281460             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281461             :       /* \brief Constructor for use by AST File I/O Mechanism
  281462             : 
  281463             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  281464             :           which obtained via fast binary file I/O from disk.
  281465             :        */
  281466             :        // SgLongIntVal( SgLongIntValStorageClass& source );
  281467             : 
  281468             : 
  281469             : 
  281470             : 
  281471             : 
  281472             :  // JH (10/24/2005): methods added to support the ast file IO
  281473             :     private:
  281474             : 
  281475             :       /* name AST Memory Allocation Support Functions
  281476             :           \brief Memory allocations support....
  281477             : 
  281478             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  281479             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  281480             :           and support the AST File I/O Mechanism.
  281481             :        */
  281482             :       /* */
  281483             : 
  281484             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  281485             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  281486             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  281487             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  281488             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  281489             :           a correspinding one in the AST_FILE_IO class!
  281490             :        */
  281491             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  281492             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281493             :       /* \brief Typedef used for low level memory access.
  281494             :        */
  281495             :        // typedef unsigned char* TestType;
  281496             : 
  281497             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  281498             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281499             :       /* \brief Typedef used to hold memory addresses as values.
  281500             :        */
  281501             :        // typedef unsigned long  AddressType;
  281502             : 
  281503             : 
  281504             : 
  281505             :        // necessary, to have direct access to the p_freepointer and the private methods !
  281506             :       /*! \brief friend class declaration to support AST File I/O */
  281507             :           friend class AST_FILE_IO;
  281508             : 
  281509             :       /*! \brief friend class declaration to support AST File I/O */
  281510             :           friend class SgLongIntValStorageClass;
  281511             : 
  281512             :       /*! \brief friend class declaration to support AST File I/O */
  281513             :           friend class AstSpecificDataManagingClass;
  281514             : 
  281515             :       /*! \brief friend class declaration to support AST File I/O */
  281516             :           friend class AstSpecificDataManagingClassStorageClass;
  281517             :     public:
  281518             :       /*! \brief IR node constructor to support AST File I/O */
  281519             :           SgLongIntVal( const SgLongIntValStorageClass& source );
  281520             : 
  281521             :  // private: // JJW hack
  281522             :        /*
  281523             :           name AST Memory Allocation Support Variables
  281524             :           Memory allocations support variables 
  281525             : 
  281526             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  281527             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  281528             :           and support the AST File I/O Mechanism.
  281529             :        */
  281530             :       /* */
  281531             : 
  281532             :     public:
  281533             : 
  281534             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  281535             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  281536             :       // virtual SgNode* addRegExpAttribute();
  281537             :       /*! \brief Support for AST matching using regular expression.
  281538             : 
  281539             :           This support is incomplete and the subject of current research to define 
  281540             :           RegEx trees to support inexact matching.
  281541             :        */
  281542             :           SgLongIntVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  281543             : 
  281544             : // *** COMMON CODE SECTION ENDS HERE ***
  281545             : 
  281546             : 
  281547             : // End of memberFunctionString
  281548             : // Start of memberFunctionString
  281549             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  281550             : 
  281551             :      // the generated cast function
  281552             :      // friend ROSE_DLL_API SgLongIntVal* isSgLongIntVal ( SgNode* s );
  281553             : 
  281554             :           typedef SgValueExp base_node_type;
  281555             : 
  281556             : 
  281557             : // End of memberFunctionString
  281558             : // Start of memberFunctionString
  281559             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  281560             : 
  281561             :           SgType* get_type() const override;
  281562             : 
  281563             : 
  281564             : // End of memberFunctionString
  281565             : // Start of memberFunctionString
  281566             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  281567             : 
  281568             :           void post_construction_initialization() override;
  281569             : 
  281570             : 
  281571             : // End of memberFunctionString
  281572             : 
  281573             :      public: 
  281574             :          long int get_value() const;
  281575             :          void set_value(long int value);
  281576             : 
  281577             :      public: 
  281578             :          std::string get_valueString() const;
  281579             :          void set_valueString(std::string valueString);
  281580             : 
  281581             : 
  281582             :      public: 
  281583             :          virtual ~SgLongIntVal();
  281584             : 
  281585             : 
  281586             :      public: 
  281587             :          SgLongIntVal(Sg_File_Info* startOfConstruct , long int value = 0, std::string valueString = ""); 
  281588             :          SgLongIntVal(long int value, std::string valueString); 
  281589             : 
  281590             :     protected:
  281591             : // Start of memberFunctionString
  281592             : long int p_value;
  281593             :           
  281594             : // End of memberFunctionString
  281595             : // Start of memberFunctionString
  281596             : std::string p_valueString;
  281597             :           
  281598             : // End of memberFunctionString
  281599             : 
  281600             :     friend struct Rose::Traits::generated::describe_node_t<SgLongIntVal>;
  281601             :     friend struct Rose::Traits::generated::describe_field_t<SgLongIntVal, long int,&SgLongIntVal::p_value>;
  281602             :     friend struct Rose::Traits::generated::describe_field_t<SgLongIntVal, std::string,&SgLongIntVal::p_valueString>;
  281603             : 
  281604             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281605             : 
  281606             : 
  281607             :    };
  281608             : #endif
  281609             : 
  281610             : // postdeclarations for SgLongIntVal
  281611             : 
  281612             : /* #line 281613 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281613             : 
  281614             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  281615             : 
  281616             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281617             : 
  281618             : 
  281619             : /* #line 281620 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281620             : 
  281621             : 
  281622             : 
  281623             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281624             : 
  281625             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  281626             : //      This code is automatically generated for each 
  281627             : //      terminal and non-terminal within the defined 
  281628             : //      grammar.  There is a simple way to change the 
  281629             : //      code to fix bugs etc.  See the ROSE README file
  281630             : //      for directions.
  281631             : 
  281632             : // tps: (02/22/2010): Adding DLL export requirements
  281633             : #include "rosedll.h"
  281634             : 
  281635             : // predeclarations for SgLongLongIntVal
  281636             : 
  281637             : /* #line 281638 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281638             : 
  281639             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  281640             : 
  281641             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  281642             : 
  281643             : #if 1
  281644             : // Class Definition for SgLongLongIntVal
  281645             : class ROSE_DLL_API SgLongLongIntVal  : public SgValueExp
  281646             :    {
  281647             :      public:
  281648             : 
  281649             : 
  281650             : /* #line 281651 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  281651             : 
  281652             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  281653             : // Start of memberFunctionString
  281654             : /* #line 660 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  281655             : 
  281656             : 
  281657             : 
  281658             : // End of memberFunctionString
  281659             : // Start of memberFunctionString
  281660             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  281661             : 
  281662             : // *** COMMON CODE SECTION BEGINS HERE ***
  281663             : 
  281664             :     public:
  281665             : 
  281666             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  281667             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  281668             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  281669             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  281670             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  281671             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  281672             : 
  281673             :       /*! \brief returns a string representing the class name */
  281674             :           virtual std::string class_name() const override;
  281675             : 
  281676             :       /*! \brief returns new style SageIII enum values */
  281677             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  281678             : 
  281679             :       /*! \brief static variant value */
  281680             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  281681             :        // static const VariantT static_variant = V_SgLongLongIntVal;
  281682             :           enum { static_variant = V_SgLongLongIntVal };
  281683             : 
  281684             :        /* the generated cast function */
  281685             :       /*! \brief Casts pointer from base class to derived class */
  281686             :           ROSE_DLL_API friend       SgLongLongIntVal* isSgLongLongIntVal(       SgNode * s );
  281687             : 
  281688             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  281689             :           ROSE_DLL_API friend const SgLongLongIntVal* isSgLongLongIntVal( const SgNode * s );
  281690             : 
  281691             :      // ******************************************
  281692             :      // * Memory Pool / New / Delete
  281693             :      // ******************************************
  281694             : 
  281695             :      public:
  281696             :           /// \private
  281697             :           static const unsigned pool_size; //
  281698             :           /// \private
  281699             :           static std::vector<unsigned char *> pools; //
  281700             :           /// \private
  281701             :           static SgLongLongIntVal * next_node; // 
  281702             : 
  281703             :           /// \private
  281704             :           static unsigned long initializeStorageClassArray(SgLongLongIntValStorageClass *); //
  281705             : 
  281706             :           /// \private
  281707             :           static void clearMemoryPool(); //
  281708             :           static void deleteMemoryPool(); //
  281709             : 
  281710             :           /// \private
  281711             :           static void extendMemoryPoolForFileIO(); //
  281712             : 
  281713             :           /// \private
  281714             :           static SgLongLongIntVal * getPointerFromGlobalIndex(unsigned long); //
  281715             :           /// \private
  281716             :           static SgLongLongIntVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  281717             : 
  281718             :           /// \private
  281719             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  281720             :           /// \private
  281721             :           static void resetValidFreepointers(); //
  281722             :           /// \private
  281723             :           static unsigned long getNumberOfLastValidPointer(); //
  281724             : 
  281725             : 
  281726             : #if defined(INLINE_FUNCTIONS)
  281727             :       /*! \brief returns pointer to newly allocated IR node */
  281728             :           inline void *operator new (size_t size);
  281729             : #else
  281730             :       /*! \brief returns pointer to newly allocated IR node */
  281731             :           void *operator new (size_t size);
  281732             : #endif
  281733             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  281734             :           void operator delete (void* pointer, size_t size);
  281735             : 
  281736             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  281737          46 :           void operator delete (void* pointer)
  281738             :              {
  281739             :             // This is the generated delete operator...
  281740          46 :                SgLongLongIntVal::operator delete (pointer,sizeof(SgLongLongIntVal));
  281741             :              }
  281742             : 
  281743             :       /*! \brief Returns the total number of IR nodes of this type */
  281744             :           static size_t numberOfNodes();
  281745             : 
  281746             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  281747             :           static size_t memoryUsage();
  281748             : 
  281749             :       // End of scope which started in IR nodes specific code 
  281750             :       /* */
  281751             : 
  281752             :       /* name Internal Functions
  281753             :           \brief Internal functions ... incomplete-documentation
  281754             : 
  281755             :           These functions have been made public as part of the design, but they are suggested for internal use 
  281756             :           or by particularly knowledgeable users for specialized tools or applications.
  281757             : 
  281758             :           \internal We could not make these private because they are required by user for special purposes. And 
  281759             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  281760             :          
  281761             :        */
  281762             : 
  281763             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  281764             :        // overridden in every class by *generated* implementation
  281765             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  281766             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  281767             :        // MS: 06/28/02 container of names of variables or container indices 
  281768             :        // used used in the traversal to access AST successor nodes
  281769             :        // overridden in every class by *generated* implementation
  281770             :       /*! \brief container of names of variables or container indices used used in the traversal
  281771             :           to access AST successor nodes overridden in every class by *generated* implementation */
  281772             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  281773             : 
  281774             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  281775             :        // than all the vector copies. The implementation for these functions is generated for each class.
  281776             :       /*! \brief return number of children in the traversal successor list */
  281777             :           virtual size_t get_numberOfTraversalSuccessors() override;
  281778             :       /*! \brief index-based access to traversal successors by index number */
  281779             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  281780             :       /*! \brief index-based access to traversal successors by child node */
  281781             :           virtual size_t get_childIndex(SgNode *child) override;
  281782             : 
  281783             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  281784             :        // MS: 08/16/2002 method for generating RTI information
  281785             :       /*! \brief return C++ Runtime-Time-Information */
  281786             :           virtual RTIReturnType roseRTI() override;
  281787             : #endif
  281788             :       /* */
  281789             : 
  281790             : 
  281791             : 
  281792             :       /* name Deprecated Functions
  281793             :           \brief Deprecated functions ... incomplete-documentation
  281794             : 
  281795             :           These functions have been deprecated from use.
  281796             :        */
  281797             :       /* */
  281798             : 
  281799             :       /*! returns a C style string (char*) representing the class name */
  281800             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  281801             : 
  281802             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  281803             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  281804             : #if 0
  281805             :       /*! returns old style Sage II enum values */
  281806             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  281807             :       /*! returns old style Sage II enum values */
  281808             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  281809             : #endif
  281810             :       /* */
  281811             : 
  281812             : 
  281813             : 
  281814             : 
  281815             :      public:
  281816             :       /* name Traversal Support Functions
  281817             :           \brief Traversal support functions ... incomplete-documentation
  281818             : 
  281819             :           These functions have been made public as part of the design, but they are suggested for internal use 
  281820             :           or by particularly knowledgable users for specialized tools or applications.
  281821             :        */
  281822             :       /* */
  281823             : 
  281824             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  281825             :        // (inferior to ROSE traversal mechanism, experimental).
  281826             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  281827             :        */
  281828             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  281829             : 
  281830             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  281831             :       /*! \brief support for the classic visitor pattern done in GoF */
  281832             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  281833             : 
  281834             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  281835             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  281836             :        */
  281837             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  281838             : 
  281839             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  281840             :        */
  281841             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  281842             : 
  281843             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  281844             :        // This traversal helps support internal tools that call static member functions.
  281845             :        // note: this function operates on the memory pools.
  281846             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  281847             :        */
  281848             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  281849             :       /* */
  281850             : 
  281851             : 
  281852             :      public:
  281853             :       /* name Memory Allocation Functions
  281854             :           \brief Memory allocations functions ... incomplete-documentation
  281855             : 
  281856             :           These functions have been made public as part of the design, but they are suggested for internal use 
  281857             :           or by particularly knowledgable users for specialized tools or applications.
  281858             :        */
  281859             :       /* */
  281860             : 
  281861             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  281862             : 
  281863             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  281864             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  281865             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  281866             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  281867             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  281868             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  281869             :           being used with the AST File I/O mechanism.
  281870             :        */
  281871             :           virtual bool isInMemoryPool() override;
  281872             : 
  281873             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  281874             : 
  281875             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  281876             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  281877             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  281878             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  281879             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  281880             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  281881             :           being used with the AST File I/O mechanism.
  281882             :        */
  281883             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  281884             : 
  281885             :       // DQ (4/30/2006): Modified to be a const function.
  281886             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  281887             : 
  281888             :           This functions is part of general support for many possible tools to operate 
  281889             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  281890             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  281891             :           less than the set of pointers used by the AST file I/O. This is part of
  281892             :           work implemented by Andreas, and support tools such as the AST graph generation.
  281893             : 
  281894             :           \warning This function can return unexpected data members and thus the 
  281895             :                    order and the number of elements is unpredicable and subject 
  281896             :                    to change.
  281897             : 
  281898             :           \returns STL vector of pairs of SgNode* and strings
  281899             :        */
  281900             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  281901             : 
  281902             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  281903             : 
  281904             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  281905             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  281906             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  281907             : 
  281908             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  281909             :                    and subject to change.
  281910             :        */
  281911             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  281912             : 
  281913             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  281914             : 
  281915             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  281916             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  281917             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  281918             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  281919             : 
  281920             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  281921             : 
  281922             :           \returns long
  281923             :        */
  281924             :           virtual long getChildIndex( SgNode* childNode ) const override;
  281925             : 
  281926             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  281927             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281928             :       /* \brief Constructor for use by AST File I/O Mechanism
  281929             : 
  281930             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  281931             :           which obtained via fast binary file I/O from disk.
  281932             :        */
  281933             :        // SgLongLongIntVal( SgLongLongIntValStorageClass& source );
  281934             : 
  281935             : 
  281936             : 
  281937             : 
  281938             : 
  281939             :  // JH (10/24/2005): methods added to support the ast file IO
  281940             :     private:
  281941             : 
  281942             :       /* name AST Memory Allocation Support Functions
  281943             :           \brief Memory allocations support....
  281944             : 
  281945             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  281946             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  281947             :           and support the AST File I/O Mechanism.
  281948             :        */
  281949             :       /* */
  281950             : 
  281951             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  281952             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  281953             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  281954             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  281955             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  281956             :           a correspinding one in the AST_FILE_IO class!
  281957             :        */
  281958             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  281959             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281960             :       /* \brief Typedef used for low level memory access.
  281961             :        */
  281962             :        // typedef unsigned char* TestType;
  281963             : 
  281964             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  281965             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  281966             :       /* \brief Typedef used to hold memory addresses as values.
  281967             :        */
  281968             :        // typedef unsigned long  AddressType;
  281969             : 
  281970             : 
  281971             : 
  281972             :        // necessary, to have direct access to the p_freepointer and the private methods !
  281973             :       /*! \brief friend class declaration to support AST File I/O */
  281974             :           friend class AST_FILE_IO;
  281975             : 
  281976             :       /*! \brief friend class declaration to support AST File I/O */
  281977             :           friend class SgLongLongIntValStorageClass;
  281978             : 
  281979             :       /*! \brief friend class declaration to support AST File I/O */
  281980             :           friend class AstSpecificDataManagingClass;
  281981             : 
  281982             :       /*! \brief friend class declaration to support AST File I/O */
  281983             :           friend class AstSpecificDataManagingClassStorageClass;
  281984             :     public:
  281985             :       /*! \brief IR node constructor to support AST File I/O */
  281986             :           SgLongLongIntVal( const SgLongLongIntValStorageClass& source );
  281987             : 
  281988             :  // private: // JJW hack
  281989             :        /*
  281990             :           name AST Memory Allocation Support Variables
  281991             :           Memory allocations support variables 
  281992             : 
  281993             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  281994             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  281995             :           and support the AST File I/O Mechanism.
  281996             :        */
  281997             :       /* */
  281998             : 
  281999             :     public:
  282000             : 
  282001             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  282002             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  282003             :       // virtual SgNode* addRegExpAttribute();
  282004             :       /*! \brief Support for AST matching using regular expression.
  282005             : 
  282006             :           This support is incomplete and the subject of current research to define 
  282007             :           RegEx trees to support inexact matching.
  282008             :        */
  282009             :           SgLongLongIntVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  282010             : 
  282011             : // *** COMMON CODE SECTION ENDS HERE ***
  282012             : 
  282013             : 
  282014             : // End of memberFunctionString
  282015             : // Start of memberFunctionString
  282016             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  282017             : 
  282018             :      // the generated cast function
  282019             :      // friend ROSE_DLL_API SgLongLongIntVal* isSgLongLongIntVal ( SgNode* s );
  282020             : 
  282021             :           typedef SgValueExp base_node_type;
  282022             : 
  282023             : 
  282024             : // End of memberFunctionString
  282025             : // Start of memberFunctionString
  282026             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282027             : 
  282028             :           SgType* get_type() const override;
  282029             : 
  282030             : 
  282031             : // End of memberFunctionString
  282032             : // Start of memberFunctionString
  282033             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282034             : 
  282035             :           void post_construction_initialization() override;
  282036             : 
  282037             : 
  282038             : // End of memberFunctionString
  282039             : 
  282040             :      public: 
  282041             :          long long int get_value() const;
  282042             :          void set_value(long long int value);
  282043             : 
  282044             :      public: 
  282045             :          std::string get_valueString() const;
  282046             :          void set_valueString(std::string valueString);
  282047             : 
  282048             : 
  282049             :      public: 
  282050             :          virtual ~SgLongLongIntVal();
  282051             : 
  282052             : 
  282053             :      public: 
  282054             :          SgLongLongIntVal(Sg_File_Info* startOfConstruct , long long int value = 0, std::string valueString = ""); 
  282055             :          SgLongLongIntVal(long long int value, std::string valueString); 
  282056             : 
  282057             :     protected:
  282058             : // Start of memberFunctionString
  282059             : long long int p_value;
  282060             :           
  282061             : // End of memberFunctionString
  282062             : // Start of memberFunctionString
  282063             : std::string p_valueString;
  282064             :           
  282065             : // End of memberFunctionString
  282066             : 
  282067             :     friend struct Rose::Traits::generated::describe_node_t<SgLongLongIntVal>;
  282068             :     friend struct Rose::Traits::generated::describe_field_t<SgLongLongIntVal, long long int,&SgLongLongIntVal::p_value>;
  282069             :     friend struct Rose::Traits::generated::describe_field_t<SgLongLongIntVal, std::string,&SgLongLongIntVal::p_valueString>;
  282070             : 
  282071             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282072             : 
  282073             : 
  282074             :    };
  282075             : #endif
  282076             : 
  282077             : // postdeclarations for SgLongLongIntVal
  282078             : 
  282079             : /* #line 282080 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282080             : 
  282081             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  282082             : 
  282083             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282084             : 
  282085             : 
  282086             : /* #line 282087 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282087             : 
  282088             : 
  282089             : 
  282090             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282091             : 
  282092             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  282093             : //      This code is automatically generated for each 
  282094             : //      terminal and non-terminal within the defined 
  282095             : //      grammar.  There is a simple way to change the 
  282096             : //      code to fix bugs etc.  See the ROSE README file
  282097             : //      for directions.
  282098             : 
  282099             : // tps: (02/22/2010): Adding DLL export requirements
  282100             : #include "rosedll.h"
  282101             : 
  282102             : // predeclarations for SgUnsignedLongLongIntVal
  282103             : 
  282104             : /* #line 282105 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282105             : 
  282106             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  282107             : 
  282108             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282109             : 
  282110             : #if 1
  282111             : // Class Definition for SgUnsignedLongLongIntVal
  282112             : class ROSE_DLL_API SgUnsignedLongLongIntVal  : public SgValueExp
  282113             :    {
  282114             :      public:
  282115             : 
  282116             : 
  282117             : /* #line 282118 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282118             : 
  282119             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  282120             : // Start of memberFunctionString
  282121             : /* #line 664 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282122             : 
  282123             : 
  282124             : 
  282125             : // End of memberFunctionString
  282126             : // Start of memberFunctionString
  282127             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  282128             : 
  282129             : // *** COMMON CODE SECTION BEGINS HERE ***
  282130             : 
  282131             :     public:
  282132             : 
  282133             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  282134             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  282135             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  282136             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  282137             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  282138             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  282139             : 
  282140             :       /*! \brief returns a string representing the class name */
  282141             :           virtual std::string class_name() const override;
  282142             : 
  282143             :       /*! \brief returns new style SageIII enum values */
  282144             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  282145             : 
  282146             :       /*! \brief static variant value */
  282147             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  282148             :        // static const VariantT static_variant = V_SgUnsignedLongLongIntVal;
  282149             :           enum { static_variant = V_SgUnsignedLongLongIntVal };
  282150             : 
  282151             :        /* the generated cast function */
  282152             :       /*! \brief Casts pointer from base class to derived class */
  282153             :           ROSE_DLL_API friend       SgUnsignedLongLongIntVal* isSgUnsignedLongLongIntVal(       SgNode * s );
  282154             : 
  282155             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  282156             :           ROSE_DLL_API friend const SgUnsignedLongLongIntVal* isSgUnsignedLongLongIntVal( const SgNode * s );
  282157             : 
  282158             :      // ******************************************
  282159             :      // * Memory Pool / New / Delete
  282160             :      // ******************************************
  282161             : 
  282162             :      public:
  282163             :           /// \private
  282164             :           static const unsigned pool_size; //
  282165             :           /// \private
  282166             :           static std::vector<unsigned char *> pools; //
  282167             :           /// \private
  282168             :           static SgUnsignedLongLongIntVal * next_node; // 
  282169             : 
  282170             :           /// \private
  282171             :           static unsigned long initializeStorageClassArray(SgUnsignedLongLongIntValStorageClass *); //
  282172             : 
  282173             :           /// \private
  282174             :           static void clearMemoryPool(); //
  282175             :           static void deleteMemoryPool(); //
  282176             : 
  282177             :           /// \private
  282178             :           static void extendMemoryPoolForFileIO(); //
  282179             : 
  282180             :           /// \private
  282181             :           static SgUnsignedLongLongIntVal * getPointerFromGlobalIndex(unsigned long); //
  282182             :           /// \private
  282183             :           static SgUnsignedLongLongIntVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  282184             : 
  282185             :           /// \private
  282186             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  282187             :           /// \private
  282188             :           static void resetValidFreepointers(); //
  282189             :           /// \private
  282190             :           static unsigned long getNumberOfLastValidPointer(); //
  282191             : 
  282192             : 
  282193             : #if defined(INLINE_FUNCTIONS)
  282194             :       /*! \brief returns pointer to newly allocated IR node */
  282195             :           inline void *operator new (size_t size);
  282196             : #else
  282197             :       /*! \brief returns pointer to newly allocated IR node */
  282198             :           void *operator new (size_t size);
  282199             : #endif
  282200             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  282201             :           void operator delete (void* pointer, size_t size);
  282202             : 
  282203             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  282204          33 :           void operator delete (void* pointer)
  282205             :              {
  282206             :             // This is the generated delete operator...
  282207          33 :                SgUnsignedLongLongIntVal::operator delete (pointer,sizeof(SgUnsignedLongLongIntVal));
  282208             :              }
  282209             : 
  282210             :       /*! \brief Returns the total number of IR nodes of this type */
  282211             :           static size_t numberOfNodes();
  282212             : 
  282213             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  282214             :           static size_t memoryUsage();
  282215             : 
  282216             :       // End of scope which started in IR nodes specific code 
  282217             :       /* */
  282218             : 
  282219             :       /* name Internal Functions
  282220             :           \brief Internal functions ... incomplete-documentation
  282221             : 
  282222             :           These functions have been made public as part of the design, but they are suggested for internal use 
  282223             :           or by particularly knowledgeable users for specialized tools or applications.
  282224             : 
  282225             :           \internal We could not make these private because they are required by user for special purposes. And 
  282226             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  282227             :          
  282228             :        */
  282229             : 
  282230             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  282231             :        // overridden in every class by *generated* implementation
  282232             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  282233             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  282234             :        // MS: 06/28/02 container of names of variables or container indices 
  282235             :        // used used in the traversal to access AST successor nodes
  282236             :        // overridden in every class by *generated* implementation
  282237             :       /*! \brief container of names of variables or container indices used used in the traversal
  282238             :           to access AST successor nodes overridden in every class by *generated* implementation */
  282239             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  282240             : 
  282241             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  282242             :        // than all the vector copies. The implementation for these functions is generated for each class.
  282243             :       /*! \brief return number of children in the traversal successor list */
  282244             :           virtual size_t get_numberOfTraversalSuccessors() override;
  282245             :       /*! \brief index-based access to traversal successors by index number */
  282246             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  282247             :       /*! \brief index-based access to traversal successors by child node */
  282248             :           virtual size_t get_childIndex(SgNode *child) override;
  282249             : 
  282250             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  282251             :        // MS: 08/16/2002 method for generating RTI information
  282252             :       /*! \brief return C++ Runtime-Time-Information */
  282253             :           virtual RTIReturnType roseRTI() override;
  282254             : #endif
  282255             :       /* */
  282256             : 
  282257             : 
  282258             : 
  282259             :       /* name Deprecated Functions
  282260             :           \brief Deprecated functions ... incomplete-documentation
  282261             : 
  282262             :           These functions have been deprecated from use.
  282263             :        */
  282264             :       /* */
  282265             : 
  282266             :       /*! returns a C style string (char*) representing the class name */
  282267             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  282268             : 
  282269             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  282270             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  282271             : #if 0
  282272             :       /*! returns old style Sage II enum values */
  282273             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  282274             :       /*! returns old style Sage II enum values */
  282275             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  282276             : #endif
  282277             :       /* */
  282278             : 
  282279             : 
  282280             : 
  282281             : 
  282282             :      public:
  282283             :       /* name Traversal Support Functions
  282284             :           \brief Traversal support functions ... incomplete-documentation
  282285             : 
  282286             :           These functions have been made public as part of the design, but they are suggested for internal use 
  282287             :           or by particularly knowledgable users for specialized tools or applications.
  282288             :        */
  282289             :       /* */
  282290             : 
  282291             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  282292             :        // (inferior to ROSE traversal mechanism, experimental).
  282293             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  282294             :        */
  282295             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  282296             : 
  282297             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  282298             :       /*! \brief support for the classic visitor pattern done in GoF */
  282299             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  282300             : 
  282301             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  282302             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  282303             :        */
  282304             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  282305             : 
  282306             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  282307             :        */
  282308             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  282309             : 
  282310             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  282311             :        // This traversal helps support internal tools that call static member functions.
  282312             :        // note: this function operates on the memory pools.
  282313             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  282314             :        */
  282315             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  282316             :       /* */
  282317             : 
  282318             : 
  282319             :      public:
  282320             :       /* name Memory Allocation Functions
  282321             :           \brief Memory allocations functions ... incomplete-documentation
  282322             : 
  282323             :           These functions have been made public as part of the design, but they are suggested for internal use 
  282324             :           or by particularly knowledgable users for specialized tools or applications.
  282325             :        */
  282326             :       /* */
  282327             : 
  282328             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  282329             : 
  282330             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  282331             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  282332             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  282333             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  282334             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  282335             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  282336             :           being used with the AST File I/O mechanism.
  282337             :        */
  282338             :           virtual bool isInMemoryPool() override;
  282339             : 
  282340             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  282341             : 
  282342             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  282343             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  282344             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  282345             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  282346             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  282347             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  282348             :           being used with the AST File I/O mechanism.
  282349             :        */
  282350             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  282351             : 
  282352             :       // DQ (4/30/2006): Modified to be a const function.
  282353             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  282354             : 
  282355             :           This functions is part of general support for many possible tools to operate 
  282356             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  282357             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  282358             :           less than the set of pointers used by the AST file I/O. This is part of
  282359             :           work implemented by Andreas, and support tools such as the AST graph generation.
  282360             : 
  282361             :           \warning This function can return unexpected data members and thus the 
  282362             :                    order and the number of elements is unpredicable and subject 
  282363             :                    to change.
  282364             : 
  282365             :           \returns STL vector of pairs of SgNode* and strings
  282366             :        */
  282367             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  282368             : 
  282369             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  282370             : 
  282371             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  282372             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  282373             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  282374             : 
  282375             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  282376             :                    and subject to change.
  282377             :        */
  282378             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  282379             : 
  282380             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  282381             : 
  282382             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  282383             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  282384             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  282385             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  282386             : 
  282387             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  282388             : 
  282389             :           \returns long
  282390             :        */
  282391             :           virtual long getChildIndex( SgNode* childNode ) const override;
  282392             : 
  282393             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  282394             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  282395             :       /* \brief Constructor for use by AST File I/O Mechanism
  282396             : 
  282397             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  282398             :           which obtained via fast binary file I/O from disk.
  282399             :        */
  282400             :        // SgUnsignedLongLongIntVal( SgUnsignedLongLongIntValStorageClass& source );
  282401             : 
  282402             : 
  282403             : 
  282404             : 
  282405             : 
  282406             :  // JH (10/24/2005): methods added to support the ast file IO
  282407             :     private:
  282408             : 
  282409             :       /* name AST Memory Allocation Support Functions
  282410             :           \brief Memory allocations support....
  282411             : 
  282412             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  282413             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  282414             :           and support the AST File I/O Mechanism.
  282415             :        */
  282416             :       /* */
  282417             : 
  282418             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  282419             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  282420             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  282421             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  282422             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  282423             :           a correspinding one in the AST_FILE_IO class!
  282424             :        */
  282425             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  282426             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  282427             :       /* \brief Typedef used for low level memory access.
  282428             :        */
  282429             :        // typedef unsigned char* TestType;
  282430             : 
  282431             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  282432             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  282433             :       /* \brief Typedef used to hold memory addresses as values.
  282434             :        */
  282435             :        // typedef unsigned long  AddressType;
  282436             : 
  282437             : 
  282438             : 
  282439             :        // necessary, to have direct access to the p_freepointer and the private methods !
  282440             :       /*! \brief friend class declaration to support AST File I/O */
  282441             :           friend class AST_FILE_IO;
  282442             : 
  282443             :       /*! \brief friend class declaration to support AST File I/O */
  282444             :           friend class SgUnsignedLongLongIntValStorageClass;
  282445             : 
  282446             :       /*! \brief friend class declaration to support AST File I/O */
  282447             :           friend class AstSpecificDataManagingClass;
  282448             : 
  282449             :       /*! \brief friend class declaration to support AST File I/O */
  282450             :           friend class AstSpecificDataManagingClassStorageClass;
  282451             :     public:
  282452             :       /*! \brief IR node constructor to support AST File I/O */
  282453             :           SgUnsignedLongLongIntVal( const SgUnsignedLongLongIntValStorageClass& source );
  282454             : 
  282455             :  // private: // JJW hack
  282456             :        /*
  282457             :           name AST Memory Allocation Support Variables
  282458             :           Memory allocations support variables 
  282459             : 
  282460             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  282461             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  282462             :           and support the AST File I/O Mechanism.
  282463             :        */
  282464             :       /* */
  282465             : 
  282466             :     public:
  282467             : 
  282468             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  282469             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  282470             :       // virtual SgNode* addRegExpAttribute();
  282471             :       /*! \brief Support for AST matching using regular expression.
  282472             : 
  282473             :           This support is incomplete and the subject of current research to define 
  282474             :           RegEx trees to support inexact matching.
  282475             :        */
  282476             :           SgUnsignedLongLongIntVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  282477             : 
  282478             : // *** COMMON CODE SECTION ENDS HERE ***
  282479             : 
  282480             : 
  282481             : // End of memberFunctionString
  282482             : // Start of memberFunctionString
  282483             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  282484             : 
  282485             :      // the generated cast function
  282486             :      // friend ROSE_DLL_API SgUnsignedLongLongIntVal* isSgUnsignedLongLongIntVal ( SgNode* s );
  282487             : 
  282488             :           typedef SgValueExp base_node_type;
  282489             : 
  282490             : 
  282491             : // End of memberFunctionString
  282492             : // Start of memberFunctionString
  282493             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282494             : 
  282495             :           SgType* get_type() const override;
  282496             : 
  282497             : 
  282498             : // End of memberFunctionString
  282499             : // Start of memberFunctionString
  282500             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282501             : 
  282502             :           void post_construction_initialization() override;
  282503             : 
  282504             : 
  282505             : // End of memberFunctionString
  282506             : 
  282507             :      public: 
  282508             :          unsigned long long int get_value() const;
  282509             :          void set_value(unsigned long long int value);
  282510             : 
  282511             :      public: 
  282512             :          std::string get_valueString() const;
  282513             :          void set_valueString(std::string valueString);
  282514             : 
  282515             : 
  282516             :      public: 
  282517             :          virtual ~SgUnsignedLongLongIntVal();
  282518             : 
  282519             : 
  282520             :      public: 
  282521             :          SgUnsignedLongLongIntVal(Sg_File_Info* startOfConstruct , unsigned long long int value = 0, std::string valueString = ""); 
  282522             :          SgUnsignedLongLongIntVal(unsigned long long int value, std::string valueString); 
  282523             : 
  282524             :     protected:
  282525             : // Start of memberFunctionString
  282526             : unsigned long long int p_value;
  282527             :           
  282528             : // End of memberFunctionString
  282529             : // Start of memberFunctionString
  282530             : std::string p_valueString;
  282531             :           
  282532             : // End of memberFunctionString
  282533             : 
  282534             :     friend struct Rose::Traits::generated::describe_node_t<SgUnsignedLongLongIntVal>;
  282535             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedLongLongIntVal, unsigned long long int,&SgUnsignedLongLongIntVal::p_value>;
  282536             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedLongLongIntVal, std::string,&SgUnsignedLongLongIntVal::p_valueString>;
  282537             : 
  282538             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282539             : 
  282540             : 
  282541             :    };
  282542             : #endif
  282543             : 
  282544             : // postdeclarations for SgUnsignedLongLongIntVal
  282545             : 
  282546             : /* #line 282547 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282547             : 
  282548             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  282549             : 
  282550             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282551             : 
  282552             : 
  282553             : /* #line 282554 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282554             : 
  282555             : 
  282556             : 
  282557             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282558             : 
  282559             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  282560             : //      This code is automatically generated for each 
  282561             : //      terminal and non-terminal within the defined 
  282562             : //      grammar.  There is a simple way to change the 
  282563             : //      code to fix bugs etc.  See the ROSE README file
  282564             : //      for directions.
  282565             : 
  282566             : // tps: (02/22/2010): Adding DLL export requirements
  282567             : #include "rosedll.h"
  282568             : 
  282569             : // predeclarations for SgUnsignedLongVal
  282570             : 
  282571             : /* #line 282572 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282572             : 
  282573             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  282574             : 
  282575             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  282576             : 
  282577             : #if 1
  282578             : // Class Definition for SgUnsignedLongVal
  282579             : class ROSE_DLL_API SgUnsignedLongVal  : public SgValueExp
  282580             :    {
  282581             :      public:
  282582             : 
  282583             : 
  282584             : /* #line 282585 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  282585             : 
  282586             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  282587             : // Start of memberFunctionString
  282588             : /* #line 668 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282589             : 
  282590             : 
  282591             : 
  282592             : // End of memberFunctionString
  282593             : // Start of memberFunctionString
  282594             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  282595             : 
  282596             : // *** COMMON CODE SECTION BEGINS HERE ***
  282597             : 
  282598             :     public:
  282599             : 
  282600             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  282601             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  282602             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  282603             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  282604             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  282605             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  282606             : 
  282607             :       /*! \brief returns a string representing the class name */
  282608             :           virtual std::string class_name() const override;
  282609             : 
  282610             :       /*! \brief returns new style SageIII enum values */
  282611             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  282612             : 
  282613             :       /*! \brief static variant value */
  282614             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  282615             :        // static const VariantT static_variant = V_SgUnsignedLongVal;
  282616             :           enum { static_variant = V_SgUnsignedLongVal };
  282617             : 
  282618             :        /* the generated cast function */
  282619             :       /*! \brief Casts pointer from base class to derived class */
  282620             :           ROSE_DLL_API friend       SgUnsignedLongVal* isSgUnsignedLongVal(       SgNode * s );
  282621             : 
  282622             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  282623             :           ROSE_DLL_API friend const SgUnsignedLongVal* isSgUnsignedLongVal( const SgNode * s );
  282624             : 
  282625             :      // ******************************************
  282626             :      // * Memory Pool / New / Delete
  282627             :      // ******************************************
  282628             : 
  282629             :      public:
  282630             :           /// \private
  282631             :           static const unsigned pool_size; //
  282632             :           /// \private
  282633             :           static std::vector<unsigned char *> pools; //
  282634             :           /// \private
  282635             :           static SgUnsignedLongVal * next_node; // 
  282636             : 
  282637             :           /// \private
  282638             :           static unsigned long initializeStorageClassArray(SgUnsignedLongValStorageClass *); //
  282639             : 
  282640             :           /// \private
  282641             :           static void clearMemoryPool(); //
  282642             :           static void deleteMemoryPool(); //
  282643             : 
  282644             :           /// \private
  282645             :           static void extendMemoryPoolForFileIO(); //
  282646             : 
  282647             :           /// \private
  282648             :           static SgUnsignedLongVal * getPointerFromGlobalIndex(unsigned long); //
  282649             :           /// \private
  282650             :           static SgUnsignedLongVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  282651             : 
  282652             :           /// \private
  282653             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  282654             :           /// \private
  282655             :           static void resetValidFreepointers(); //
  282656             :           /// \private
  282657             :           static unsigned long getNumberOfLastValidPointer(); //
  282658             : 
  282659             : 
  282660             : #if defined(INLINE_FUNCTIONS)
  282661             :       /*! \brief returns pointer to newly allocated IR node */
  282662             :           inline void *operator new (size_t size);
  282663             : #else
  282664             :       /*! \brief returns pointer to newly allocated IR node */
  282665             :           void *operator new (size_t size);
  282666             : #endif
  282667             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  282668             :           void operator delete (void* pointer, size_t size);
  282669             : 
  282670             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  282671        7698 :           void operator delete (void* pointer)
  282672             :              {
  282673             :             // This is the generated delete operator...
  282674        7698 :                SgUnsignedLongVal::operator delete (pointer,sizeof(SgUnsignedLongVal));
  282675             :              }
  282676             : 
  282677             :       /*! \brief Returns the total number of IR nodes of this type */
  282678             :           static size_t numberOfNodes();
  282679             : 
  282680             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  282681             :           static size_t memoryUsage();
  282682             : 
  282683             :       // End of scope which started in IR nodes specific code 
  282684             :       /* */
  282685             : 
  282686             :       /* name Internal Functions
  282687             :           \brief Internal functions ... incomplete-documentation
  282688             : 
  282689             :           These functions have been made public as part of the design, but they are suggested for internal use 
  282690             :           or by particularly knowledgeable users for specialized tools or applications.
  282691             : 
  282692             :           \internal We could not make these private because they are required by user for special purposes. And 
  282693             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  282694             :          
  282695             :        */
  282696             : 
  282697             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  282698             :        // overridden in every class by *generated* implementation
  282699             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  282700             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  282701             :        // MS: 06/28/02 container of names of variables or container indices 
  282702             :        // used used in the traversal to access AST successor nodes
  282703             :        // overridden in every class by *generated* implementation
  282704             :       /*! \brief container of names of variables or container indices used used in the traversal
  282705             :           to access AST successor nodes overridden in every class by *generated* implementation */
  282706             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  282707             : 
  282708             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  282709             :        // than all the vector copies. The implementation for these functions is generated for each class.
  282710             :       /*! \brief return number of children in the traversal successor list */
  282711             :           virtual size_t get_numberOfTraversalSuccessors() override;
  282712             :       /*! \brief index-based access to traversal successors by index number */
  282713             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  282714             :       /*! \brief index-based access to traversal successors by child node */
  282715             :           virtual size_t get_childIndex(SgNode *child) override;
  282716             : 
  282717             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  282718             :        // MS: 08/16/2002 method for generating RTI information
  282719             :       /*! \brief return C++ Runtime-Time-Information */
  282720             :           virtual RTIReturnType roseRTI() override;
  282721             : #endif
  282722             :       /* */
  282723             : 
  282724             : 
  282725             : 
  282726             :       /* name Deprecated Functions
  282727             :           \brief Deprecated functions ... incomplete-documentation
  282728             : 
  282729             :           These functions have been deprecated from use.
  282730             :        */
  282731             :       /* */
  282732             : 
  282733             :       /*! returns a C style string (char*) representing the class name */
  282734             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  282735             : 
  282736             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  282737             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  282738             : #if 0
  282739             :       /*! returns old style Sage II enum values */
  282740             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  282741             :       /*! returns old style Sage II enum values */
  282742             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  282743             : #endif
  282744             :       /* */
  282745             : 
  282746             : 
  282747             : 
  282748             : 
  282749             :      public:
  282750             :       /* name Traversal Support Functions
  282751             :           \brief Traversal support functions ... incomplete-documentation
  282752             : 
  282753             :           These functions have been made public as part of the design, but they are suggested for internal use 
  282754             :           or by particularly knowledgable users for specialized tools or applications.
  282755             :        */
  282756             :       /* */
  282757             : 
  282758             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  282759             :        // (inferior to ROSE traversal mechanism, experimental).
  282760             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  282761             :        */
  282762             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  282763             : 
  282764             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  282765             :       /*! \brief support for the classic visitor pattern done in GoF */
  282766             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  282767             : 
  282768             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  282769             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  282770             :        */
  282771             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  282772             : 
  282773             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  282774             :        */
  282775             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  282776             : 
  282777             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  282778             :        // This traversal helps support internal tools that call static member functions.
  282779             :        // note: this function operates on the memory pools.
  282780             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  282781             :        */
  282782             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  282783             :       /* */
  282784             : 
  282785             : 
  282786             :      public:
  282787             :       /* name Memory Allocation Functions
  282788             :           \brief Memory allocations functions ... incomplete-documentation
  282789             : 
  282790             :           These functions have been made public as part of the design, but they are suggested for internal use 
  282791             :           or by particularly knowledgable users for specialized tools or applications.
  282792             :        */
  282793             :       /* */
  282794             : 
  282795             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  282796             : 
  282797             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  282798             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  282799             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  282800             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  282801             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  282802             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  282803             :           being used with the AST File I/O mechanism.
  282804             :        */
  282805             :           virtual bool isInMemoryPool() override;
  282806             : 
  282807             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  282808             : 
  282809             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  282810             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  282811             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  282812             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  282813             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  282814             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  282815             :           being used with the AST File I/O mechanism.
  282816             :        */
  282817             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  282818             : 
  282819             :       // DQ (4/30/2006): Modified to be a const function.
  282820             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  282821             : 
  282822             :           This functions is part of general support for many possible tools to operate 
  282823             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  282824             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  282825             :           less than the set of pointers used by the AST file I/O. This is part of
  282826             :           work implemented by Andreas, and support tools such as the AST graph generation.
  282827             : 
  282828             :           \warning This function can return unexpected data members and thus the 
  282829             :                    order and the number of elements is unpredicable and subject 
  282830             :                    to change.
  282831             : 
  282832             :           \returns STL vector of pairs of SgNode* and strings
  282833             :        */
  282834             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  282835             : 
  282836             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  282837             : 
  282838             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  282839             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  282840             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  282841             : 
  282842             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  282843             :                    and subject to change.
  282844             :        */
  282845             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  282846             : 
  282847             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  282848             : 
  282849             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  282850             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  282851             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  282852             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  282853             : 
  282854             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  282855             : 
  282856             :           \returns long
  282857             :        */
  282858             :           virtual long getChildIndex( SgNode* childNode ) const override;
  282859             : 
  282860             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  282861             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  282862             :       /* \brief Constructor for use by AST File I/O Mechanism
  282863             : 
  282864             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  282865             :           which obtained via fast binary file I/O from disk.
  282866             :        */
  282867             :        // SgUnsignedLongVal( SgUnsignedLongValStorageClass& source );
  282868             : 
  282869             : 
  282870             : 
  282871             : 
  282872             : 
  282873             :  // JH (10/24/2005): methods added to support the ast file IO
  282874             :     private:
  282875             : 
  282876             :       /* name AST Memory Allocation Support Functions
  282877             :           \brief Memory allocations support....
  282878             : 
  282879             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  282880             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  282881             :           and support the AST File I/O Mechanism.
  282882             :        */
  282883             :       /* */
  282884             : 
  282885             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  282886             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  282887             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  282888             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  282889             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  282890             :           a correspinding one in the AST_FILE_IO class!
  282891             :        */
  282892             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  282893             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  282894             :       /* \brief Typedef used for low level memory access.
  282895             :        */
  282896             :        // typedef unsigned char* TestType;
  282897             : 
  282898             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  282899             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  282900             :       /* \brief Typedef used to hold memory addresses as values.
  282901             :        */
  282902             :        // typedef unsigned long  AddressType;
  282903             : 
  282904             : 
  282905             : 
  282906             :        // necessary, to have direct access to the p_freepointer and the private methods !
  282907             :       /*! \brief friend class declaration to support AST File I/O */
  282908             :           friend class AST_FILE_IO;
  282909             : 
  282910             :       /*! \brief friend class declaration to support AST File I/O */
  282911             :           friend class SgUnsignedLongValStorageClass;
  282912             : 
  282913             :       /*! \brief friend class declaration to support AST File I/O */
  282914             :           friend class AstSpecificDataManagingClass;
  282915             : 
  282916             :       /*! \brief friend class declaration to support AST File I/O */
  282917             :           friend class AstSpecificDataManagingClassStorageClass;
  282918             :     public:
  282919             :       /*! \brief IR node constructor to support AST File I/O */
  282920             :           SgUnsignedLongVal( const SgUnsignedLongValStorageClass& source );
  282921             : 
  282922             :  // private: // JJW hack
  282923             :        /*
  282924             :           name AST Memory Allocation Support Variables
  282925             :           Memory allocations support variables 
  282926             : 
  282927             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  282928             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  282929             :           and support the AST File I/O Mechanism.
  282930             :        */
  282931             :       /* */
  282932             : 
  282933             :     public:
  282934             : 
  282935             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  282936             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  282937             :       // virtual SgNode* addRegExpAttribute();
  282938             :       /*! \brief Support for AST matching using regular expression.
  282939             : 
  282940             :           This support is incomplete and the subject of current research to define 
  282941             :           RegEx trees to support inexact matching.
  282942             :        */
  282943             :           SgUnsignedLongVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  282944             : 
  282945             : // *** COMMON CODE SECTION ENDS HERE ***
  282946             : 
  282947             : 
  282948             : // End of memberFunctionString
  282949             : // Start of memberFunctionString
  282950             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  282951             : 
  282952             :      // the generated cast function
  282953             :      // friend ROSE_DLL_API SgUnsignedLongVal* isSgUnsignedLongVal ( SgNode* s );
  282954             : 
  282955             :           typedef SgValueExp base_node_type;
  282956             : 
  282957             : 
  282958             : // End of memberFunctionString
  282959             : // Start of memberFunctionString
  282960             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282961             : 
  282962             :           SgType* get_type() const override;
  282963             : 
  282964             : 
  282965             : // End of memberFunctionString
  282966             : // Start of memberFunctionString
  282967             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  282968             : 
  282969             :           void post_construction_initialization() override;
  282970             : 
  282971             : 
  282972             : // End of memberFunctionString
  282973             : 
  282974             :      public: 
  282975             :          unsigned long get_value() const;
  282976             :          void set_value(unsigned long value);
  282977             : 
  282978             :      public: 
  282979             :          std::string get_valueString() const;
  282980             :          void set_valueString(std::string valueString);
  282981             : 
  282982             : 
  282983             :      public: 
  282984             :          virtual ~SgUnsignedLongVal();
  282985             : 
  282986             : 
  282987             :      public: 
  282988             :          SgUnsignedLongVal(Sg_File_Info* startOfConstruct , unsigned long value = 0, std::string valueString = ""); 
  282989             :          SgUnsignedLongVal(unsigned long value, std::string valueString); 
  282990             : 
  282991             :     protected:
  282992             : // Start of memberFunctionString
  282993             : unsigned long p_value;
  282994             :           
  282995             : // End of memberFunctionString
  282996             : // Start of memberFunctionString
  282997             : std::string p_valueString;
  282998             :           
  282999             : // End of memberFunctionString
  283000             : 
  283001             :     friend struct Rose::Traits::generated::describe_node_t<SgUnsignedLongVal>;
  283002             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedLongVal, unsigned long,&SgUnsignedLongVal::p_value>;
  283003             :     friend struct Rose::Traits::generated::describe_field_t<SgUnsignedLongVal, std::string,&SgUnsignedLongVal::p_valueString>;
  283004             : 
  283005             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283006             : 
  283007             : 
  283008             :    };
  283009             : #endif
  283010             : 
  283011             : // postdeclarations for SgUnsignedLongVal
  283012             : 
  283013             : /* #line 283014 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283014             : 
  283015             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  283016             : 
  283017             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283018             : 
  283019             : 
  283020             : /* #line 283021 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283021             : 
  283022             : 
  283023             : 
  283024             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283025             : 
  283026             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  283027             : //      This code is automatically generated for each 
  283028             : //      terminal and non-terminal within the defined 
  283029             : //      grammar.  There is a simple way to change the 
  283030             : //      code to fix bugs etc.  See the ROSE README file
  283031             : //      for directions.
  283032             : 
  283033             : // tps: (02/22/2010): Adding DLL export requirements
  283034             : #include "rosedll.h"
  283035             : 
  283036             : // predeclarations for SgFloatVal
  283037             : 
  283038             : /* #line 283039 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283039             : 
  283040             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  283041             : 
  283042             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283043             : 
  283044             : #if 1
  283045             : // Class Definition for SgFloatVal
  283046             : class ROSE_DLL_API SgFloatVal  : public SgValueExp
  283047             :    {
  283048             :      public:
  283049             : 
  283050             : 
  283051             : /* #line 283052 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283052             : 
  283053             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  283054             : // Start of memberFunctionString
  283055             : /* #line 672 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  283056             : 
  283057             : 
  283058             : 
  283059             : // End of memberFunctionString
  283060             : // Start of memberFunctionString
  283061             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  283062             : 
  283063             : // *** COMMON CODE SECTION BEGINS HERE ***
  283064             : 
  283065             :     public:
  283066             : 
  283067             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  283068             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  283069             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  283070             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  283071             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  283072             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  283073             : 
  283074             :       /*! \brief returns a string representing the class name */
  283075             :           virtual std::string class_name() const override;
  283076             : 
  283077             :       /*! \brief returns new style SageIII enum values */
  283078             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  283079             : 
  283080             :       /*! \brief static variant value */
  283081             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  283082             :        // static const VariantT static_variant = V_SgFloatVal;
  283083             :           enum { static_variant = V_SgFloatVal };
  283084             : 
  283085             :        /* the generated cast function */
  283086             :       /*! \brief Casts pointer from base class to derived class */
  283087             :           ROSE_DLL_API friend       SgFloatVal* isSgFloatVal(       SgNode * s );
  283088             : 
  283089             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  283090             :           ROSE_DLL_API friend const SgFloatVal* isSgFloatVal( const SgNode * s );
  283091             : 
  283092             :      // ******************************************
  283093             :      // * Memory Pool / New / Delete
  283094             :      // ******************************************
  283095             : 
  283096             :      public:
  283097             :           /// \private
  283098             :           static const unsigned pool_size; //
  283099             :           /// \private
  283100             :           static std::vector<unsigned char *> pools; //
  283101             :           /// \private
  283102             :           static SgFloatVal * next_node; // 
  283103             : 
  283104             :           /// \private
  283105             :           static unsigned long initializeStorageClassArray(SgFloatValStorageClass *); //
  283106             : 
  283107             :           /// \private
  283108             :           static void clearMemoryPool(); //
  283109             :           static void deleteMemoryPool(); //
  283110             : 
  283111             :           /// \private
  283112             :           static void extendMemoryPoolForFileIO(); //
  283113             : 
  283114             :           /// \private
  283115             :           static SgFloatVal * getPointerFromGlobalIndex(unsigned long); //
  283116             :           /// \private
  283117             :           static SgFloatVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  283118             : 
  283119             :           /// \private
  283120             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  283121             :           /// \private
  283122             :           static void resetValidFreepointers(); //
  283123             :           /// \private
  283124             :           static unsigned long getNumberOfLastValidPointer(); //
  283125             : 
  283126             : 
  283127             : #if defined(INLINE_FUNCTIONS)
  283128             :       /*! \brief returns pointer to newly allocated IR node */
  283129             :           inline void *operator new (size_t size);
  283130             : #else
  283131             :       /*! \brief returns pointer to newly allocated IR node */
  283132             :           void *operator new (size_t size);
  283133             : #endif
  283134             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  283135             :           void operator delete (void* pointer, size_t size);
  283136             : 
  283137             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  283138         105 :           void operator delete (void* pointer)
  283139             :              {
  283140             :             // This is the generated delete operator...
  283141         105 :                SgFloatVal::operator delete (pointer,sizeof(SgFloatVal));
  283142             :              }
  283143             : 
  283144             :       /*! \brief Returns the total number of IR nodes of this type */
  283145             :           static size_t numberOfNodes();
  283146             : 
  283147             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  283148             :           static size_t memoryUsage();
  283149             : 
  283150             :       // End of scope which started in IR nodes specific code 
  283151             :       /* */
  283152             : 
  283153             :       /* name Internal Functions
  283154             :           \brief Internal functions ... incomplete-documentation
  283155             : 
  283156             :           These functions have been made public as part of the design, but they are suggested for internal use 
  283157             :           or by particularly knowledgeable users for specialized tools or applications.
  283158             : 
  283159             :           \internal We could not make these private because they are required by user for special purposes. And 
  283160             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  283161             :          
  283162             :        */
  283163             : 
  283164             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  283165             :        // overridden in every class by *generated* implementation
  283166             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  283167             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  283168             :        // MS: 06/28/02 container of names of variables or container indices 
  283169             :        // used used in the traversal to access AST successor nodes
  283170             :        // overridden in every class by *generated* implementation
  283171             :       /*! \brief container of names of variables or container indices used used in the traversal
  283172             :           to access AST successor nodes overridden in every class by *generated* implementation */
  283173             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  283174             : 
  283175             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  283176             :        // than all the vector copies. The implementation for these functions is generated for each class.
  283177             :       /*! \brief return number of children in the traversal successor list */
  283178             :           virtual size_t get_numberOfTraversalSuccessors() override;
  283179             :       /*! \brief index-based access to traversal successors by index number */
  283180             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  283181             :       /*! \brief index-based access to traversal successors by child node */
  283182             :           virtual size_t get_childIndex(SgNode *child) override;
  283183             : 
  283184             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  283185             :        // MS: 08/16/2002 method for generating RTI information
  283186             :       /*! \brief return C++ Runtime-Time-Information */
  283187             :           virtual RTIReturnType roseRTI() override;
  283188             : #endif
  283189             :       /* */
  283190             : 
  283191             : 
  283192             : 
  283193             :       /* name Deprecated Functions
  283194             :           \brief Deprecated functions ... incomplete-documentation
  283195             : 
  283196             :           These functions have been deprecated from use.
  283197             :        */
  283198             :       /* */
  283199             : 
  283200             :       /*! returns a C style string (char*) representing the class name */
  283201             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  283202             : 
  283203             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  283204             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  283205             : #if 0
  283206             :       /*! returns old style Sage II enum values */
  283207             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  283208             :       /*! returns old style Sage II enum values */
  283209             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  283210             : #endif
  283211             :       /* */
  283212             : 
  283213             : 
  283214             : 
  283215             : 
  283216             :      public:
  283217             :       /* name Traversal Support Functions
  283218             :           \brief Traversal support functions ... incomplete-documentation
  283219             : 
  283220             :           These functions have been made public as part of the design, but they are suggested for internal use 
  283221             :           or by particularly knowledgable users for specialized tools or applications.
  283222             :        */
  283223             :       /* */
  283224             : 
  283225             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  283226             :        // (inferior to ROSE traversal mechanism, experimental).
  283227             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  283228             :        */
  283229             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  283230             : 
  283231             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  283232             :       /*! \brief support for the classic visitor pattern done in GoF */
  283233             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  283234             : 
  283235             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  283236             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  283237             :        */
  283238             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  283239             : 
  283240             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  283241             :        */
  283242             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  283243             : 
  283244             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  283245             :        // This traversal helps support internal tools that call static member functions.
  283246             :        // note: this function operates on the memory pools.
  283247             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  283248             :        */
  283249             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  283250             :       /* */
  283251             : 
  283252             : 
  283253             :      public:
  283254             :       /* name Memory Allocation Functions
  283255             :           \brief Memory allocations functions ... incomplete-documentation
  283256             : 
  283257             :           These functions have been made public as part of the design, but they are suggested for internal use 
  283258             :           or by particularly knowledgable users for specialized tools or applications.
  283259             :        */
  283260             :       /* */
  283261             : 
  283262             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  283263             : 
  283264             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  283265             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  283266             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  283267             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  283268             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  283269             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  283270             :           being used with the AST File I/O mechanism.
  283271             :        */
  283272             :           virtual bool isInMemoryPool() override;
  283273             : 
  283274             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  283275             : 
  283276             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  283277             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  283278             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  283279             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  283280             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  283281             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  283282             :           being used with the AST File I/O mechanism.
  283283             :        */
  283284             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  283285             : 
  283286             :       // DQ (4/30/2006): Modified to be a const function.
  283287             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  283288             : 
  283289             :           This functions is part of general support for many possible tools to operate 
  283290             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  283291             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  283292             :           less than the set of pointers used by the AST file I/O. This is part of
  283293             :           work implemented by Andreas, and support tools such as the AST graph generation.
  283294             : 
  283295             :           \warning This function can return unexpected data members and thus the 
  283296             :                    order and the number of elements is unpredicable and subject 
  283297             :                    to change.
  283298             : 
  283299             :           \returns STL vector of pairs of SgNode* and strings
  283300             :        */
  283301             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  283302             : 
  283303             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  283304             : 
  283305             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  283306             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  283307             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  283308             : 
  283309             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  283310             :                    and subject to change.
  283311             :        */
  283312             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  283313             : 
  283314             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  283315             : 
  283316             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  283317             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  283318             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  283319             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  283320             : 
  283321             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  283322             : 
  283323             :           \returns long
  283324             :        */
  283325             :           virtual long getChildIndex( SgNode* childNode ) const override;
  283326             : 
  283327             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  283328             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  283329             :       /* \brief Constructor for use by AST File I/O Mechanism
  283330             : 
  283331             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  283332             :           which obtained via fast binary file I/O from disk.
  283333             :        */
  283334             :        // SgFloatVal( SgFloatValStorageClass& source );
  283335             : 
  283336             : 
  283337             : 
  283338             : 
  283339             : 
  283340             :  // JH (10/24/2005): methods added to support the ast file IO
  283341             :     private:
  283342             : 
  283343             :       /* name AST Memory Allocation Support Functions
  283344             :           \brief Memory allocations support....
  283345             : 
  283346             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  283347             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  283348             :           and support the AST File I/O Mechanism.
  283349             :        */
  283350             :       /* */
  283351             : 
  283352             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  283353             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  283354             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  283355             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  283356             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  283357             :           a correspinding one in the AST_FILE_IO class!
  283358             :        */
  283359             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  283360             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  283361             :       /* \brief Typedef used for low level memory access.
  283362             :        */
  283363             :        // typedef unsigned char* TestType;
  283364             : 
  283365             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  283366             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  283367             :       /* \brief Typedef used to hold memory addresses as values.
  283368             :        */
  283369             :        // typedef unsigned long  AddressType;
  283370             : 
  283371             : 
  283372             : 
  283373             :        // necessary, to have direct access to the p_freepointer and the private methods !
  283374             :       /*! \brief friend class declaration to support AST File I/O */
  283375             :           friend class AST_FILE_IO;
  283376             : 
  283377             :       /*! \brief friend class declaration to support AST File I/O */
  283378             :           friend class SgFloatValStorageClass;
  283379             : 
  283380             :       /*! \brief friend class declaration to support AST File I/O */
  283381             :           friend class AstSpecificDataManagingClass;
  283382             : 
  283383             :       /*! \brief friend class declaration to support AST File I/O */
  283384             :           friend class AstSpecificDataManagingClassStorageClass;
  283385             :     public:
  283386             :       /*! \brief IR node constructor to support AST File I/O */
  283387             :           SgFloatVal( const SgFloatValStorageClass& source );
  283388             : 
  283389             :  // private: // JJW hack
  283390             :        /*
  283391             :           name AST Memory Allocation Support Variables
  283392             :           Memory allocations support variables 
  283393             : 
  283394             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  283395             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  283396             :           and support the AST File I/O Mechanism.
  283397             :        */
  283398             :       /* */
  283399             : 
  283400             :     public:
  283401             : 
  283402             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  283403             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  283404             :       // virtual SgNode* addRegExpAttribute();
  283405             :       /*! \brief Support for AST matching using regular expression.
  283406             : 
  283407             :           This support is incomplete and the subject of current research to define 
  283408             :           RegEx trees to support inexact matching.
  283409             :        */
  283410             :           SgFloatVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  283411             : 
  283412             : // *** COMMON CODE SECTION ENDS HERE ***
  283413             : 
  283414             : 
  283415             : // End of memberFunctionString
  283416             : // Start of memberFunctionString
  283417             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  283418             : 
  283419             :      // the generated cast function
  283420             :      // friend ROSE_DLL_API SgFloatVal* isSgFloatVal ( SgNode* s );
  283421             : 
  283422             :           typedef SgValueExp base_node_type;
  283423             : 
  283424             : 
  283425             : // End of memberFunctionString
  283426             : // Start of memberFunctionString
  283427             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  283428             : 
  283429             :           SgType* get_type() const override;
  283430             : 
  283431             : 
  283432             : // End of memberFunctionString
  283433             : // Start of memberFunctionString
  283434             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  283435             : 
  283436             :           void post_construction_initialization() override;
  283437             : 
  283438             : 
  283439             : // End of memberFunctionString
  283440             : 
  283441             :      public: 
  283442             :          float get_value() const;
  283443             :          void set_value(float value);
  283444             : 
  283445             :      public: 
  283446             :          std::string get_valueString() const;
  283447             :          void set_valueString(std::string valueString);
  283448             : 
  283449             : 
  283450             :      public: 
  283451             :          virtual ~SgFloatVal();
  283452             : 
  283453             : 
  283454             :      public: 
  283455             :          SgFloatVal(Sg_File_Info* startOfConstruct , float value = 0.0, std::string valueString = ""); 
  283456             :          SgFloatVal(float value, std::string valueString); 
  283457             : 
  283458             :     protected:
  283459             : // Start of memberFunctionString
  283460             : float p_value;
  283461             :           
  283462             : // End of memberFunctionString
  283463             : // Start of memberFunctionString
  283464             : std::string p_valueString;
  283465             :           
  283466             : // End of memberFunctionString
  283467             : 
  283468             :     friend struct Rose::Traits::generated::describe_node_t<SgFloatVal>;
  283469             :     friend struct Rose::Traits::generated::describe_field_t<SgFloatVal, float,&SgFloatVal::p_value>;
  283470             :     friend struct Rose::Traits::generated::describe_field_t<SgFloatVal, std::string,&SgFloatVal::p_valueString>;
  283471             : 
  283472             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283473             : 
  283474             : 
  283475             :    };
  283476             : #endif
  283477             : 
  283478             : // postdeclarations for SgFloatVal
  283479             : 
  283480             : /* #line 283481 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283481             : 
  283482             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  283483             : 
  283484             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283485             : 
  283486             : 
  283487             : /* #line 283488 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283488             : 
  283489             : 
  283490             : 
  283491             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283492             : 
  283493             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  283494             : //      This code is automatically generated for each 
  283495             : //      terminal and non-terminal within the defined 
  283496             : //      grammar.  There is a simple way to change the 
  283497             : //      code to fix bugs etc.  See the ROSE README file
  283498             : //      for directions.
  283499             : 
  283500             : // tps: (02/22/2010): Adding DLL export requirements
  283501             : #include "rosedll.h"
  283502             : 
  283503             : // predeclarations for SgDoubleVal
  283504             : 
  283505             : /* #line 283506 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283506             : 
  283507             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  283508             : 
  283509             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283510             : 
  283511             : #if 1
  283512             : // Class Definition for SgDoubleVal
  283513             : class ROSE_DLL_API SgDoubleVal  : public SgValueExp
  283514             :    {
  283515             :      public:
  283516             : 
  283517             : 
  283518             : /* #line 283519 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283519             : 
  283520             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  283521             : // Start of memberFunctionString
  283522             : /* #line 676 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  283523             : 
  283524             : 
  283525             : 
  283526             : // End of memberFunctionString
  283527             : // Start of memberFunctionString
  283528             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  283529             : 
  283530             : // *** COMMON CODE SECTION BEGINS HERE ***
  283531             : 
  283532             :     public:
  283533             : 
  283534             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  283535             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  283536             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  283537             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  283538             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  283539             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  283540             : 
  283541             :       /*! \brief returns a string representing the class name */
  283542             :           virtual std::string class_name() const override;
  283543             : 
  283544             :       /*! \brief returns new style SageIII enum values */
  283545             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  283546             : 
  283547             :       /*! \brief static variant value */
  283548             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  283549             :        // static const VariantT static_variant = V_SgDoubleVal;
  283550             :           enum { static_variant = V_SgDoubleVal };
  283551             : 
  283552             :        /* the generated cast function */
  283553             :       /*! \brief Casts pointer from base class to derived class */
  283554             :           ROSE_DLL_API friend       SgDoubleVal* isSgDoubleVal(       SgNode * s );
  283555             : 
  283556             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  283557             :           ROSE_DLL_API friend const SgDoubleVal* isSgDoubleVal( const SgNode * s );
  283558             : 
  283559             :      // ******************************************
  283560             :      // * Memory Pool / New / Delete
  283561             :      // ******************************************
  283562             : 
  283563             :      public:
  283564             :           /// \private
  283565             :           static const unsigned pool_size; //
  283566             :           /// \private
  283567             :           static std::vector<unsigned char *> pools; //
  283568             :           /// \private
  283569             :           static SgDoubleVal * next_node; // 
  283570             : 
  283571             :           /// \private
  283572             :           static unsigned long initializeStorageClassArray(SgDoubleValStorageClass *); //
  283573             : 
  283574             :           /// \private
  283575             :           static void clearMemoryPool(); //
  283576             :           static void deleteMemoryPool(); //
  283577             : 
  283578             :           /// \private
  283579             :           static void extendMemoryPoolForFileIO(); //
  283580             : 
  283581             :           /// \private
  283582             :           static SgDoubleVal * getPointerFromGlobalIndex(unsigned long); //
  283583             :           /// \private
  283584             :           static SgDoubleVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  283585             : 
  283586             :           /// \private
  283587             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  283588             :           /// \private
  283589             :           static void resetValidFreepointers(); //
  283590             :           /// \private
  283591             :           static unsigned long getNumberOfLastValidPointer(); //
  283592             : 
  283593             : 
  283594             : #if defined(INLINE_FUNCTIONS)
  283595             :       /*! \brief returns pointer to newly allocated IR node */
  283596             :           inline void *operator new (size_t size);
  283597             : #else
  283598             :       /*! \brief returns pointer to newly allocated IR node */
  283599             :           void *operator new (size_t size);
  283600             : #endif
  283601             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  283602             :           void operator delete (void* pointer, size_t size);
  283603             : 
  283604             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  283605         146 :           void operator delete (void* pointer)
  283606             :              {
  283607             :             // This is the generated delete operator...
  283608         146 :                SgDoubleVal::operator delete (pointer,sizeof(SgDoubleVal));
  283609             :              }
  283610             : 
  283611             :       /*! \brief Returns the total number of IR nodes of this type */
  283612             :           static size_t numberOfNodes();
  283613             : 
  283614             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  283615             :           static size_t memoryUsage();
  283616             : 
  283617             :       // End of scope which started in IR nodes specific code 
  283618             :       /* */
  283619             : 
  283620             :       /* name Internal Functions
  283621             :           \brief Internal functions ... incomplete-documentation
  283622             : 
  283623             :           These functions have been made public as part of the design, but they are suggested for internal use 
  283624             :           or by particularly knowledgeable users for specialized tools or applications.
  283625             : 
  283626             :           \internal We could not make these private because they are required by user for special purposes. And 
  283627             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  283628             :          
  283629             :        */
  283630             : 
  283631             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  283632             :        // overridden in every class by *generated* implementation
  283633             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  283634             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  283635             :        // MS: 06/28/02 container of names of variables or container indices 
  283636             :        // used used in the traversal to access AST successor nodes
  283637             :        // overridden in every class by *generated* implementation
  283638             :       /*! \brief container of names of variables or container indices used used in the traversal
  283639             :           to access AST successor nodes overridden in every class by *generated* implementation */
  283640             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  283641             : 
  283642             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  283643             :        // than all the vector copies. The implementation for these functions is generated for each class.
  283644             :       /*! \brief return number of children in the traversal successor list */
  283645             :           virtual size_t get_numberOfTraversalSuccessors() override;
  283646             :       /*! \brief index-based access to traversal successors by index number */
  283647             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  283648             :       /*! \brief index-based access to traversal successors by child node */
  283649             :           virtual size_t get_childIndex(SgNode *child) override;
  283650             : 
  283651             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  283652             :        // MS: 08/16/2002 method for generating RTI information
  283653             :       /*! \brief return C++ Runtime-Time-Information */
  283654             :           virtual RTIReturnType roseRTI() override;
  283655             : #endif
  283656             :       /* */
  283657             : 
  283658             : 
  283659             : 
  283660             :       /* name Deprecated Functions
  283661             :           \brief Deprecated functions ... incomplete-documentation
  283662             : 
  283663             :           These functions have been deprecated from use.
  283664             :        */
  283665             :       /* */
  283666             : 
  283667             :       /*! returns a C style string (char*) representing the class name */
  283668             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  283669             : 
  283670             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  283671             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  283672             : #if 0
  283673             :       /*! returns old style Sage II enum values */
  283674             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  283675             :       /*! returns old style Sage II enum values */
  283676             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  283677             : #endif
  283678             :       /* */
  283679             : 
  283680             : 
  283681             : 
  283682             : 
  283683             :      public:
  283684             :       /* name Traversal Support Functions
  283685             :           \brief Traversal support functions ... incomplete-documentation
  283686             : 
  283687             :           These functions have been made public as part of the design, but they are suggested for internal use 
  283688             :           or by particularly knowledgable users for specialized tools or applications.
  283689             :        */
  283690             :       /* */
  283691             : 
  283692             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  283693             :        // (inferior to ROSE traversal mechanism, experimental).
  283694             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  283695             :        */
  283696             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  283697             : 
  283698             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  283699             :       /*! \brief support for the classic visitor pattern done in GoF */
  283700             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  283701             : 
  283702             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  283703             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  283704             :        */
  283705             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  283706             : 
  283707             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  283708             :        */
  283709             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  283710             : 
  283711             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  283712             :        // This traversal helps support internal tools that call static member functions.
  283713             :        // note: this function operates on the memory pools.
  283714             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  283715             :        */
  283716             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  283717             :       /* */
  283718             : 
  283719             : 
  283720             :      public:
  283721             :       /* name Memory Allocation Functions
  283722             :           \brief Memory allocations functions ... incomplete-documentation
  283723             : 
  283724             :           These functions have been made public as part of the design, but they are suggested for internal use 
  283725             :           or by particularly knowledgable users for specialized tools or applications.
  283726             :        */
  283727             :       /* */
  283728             : 
  283729             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  283730             : 
  283731             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  283732             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  283733             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  283734             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  283735             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  283736             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  283737             :           being used with the AST File I/O mechanism.
  283738             :        */
  283739             :           virtual bool isInMemoryPool() override;
  283740             : 
  283741             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  283742             : 
  283743             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  283744             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  283745             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  283746             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  283747             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  283748             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  283749             :           being used with the AST File I/O mechanism.
  283750             :        */
  283751             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  283752             : 
  283753             :       // DQ (4/30/2006): Modified to be a const function.
  283754             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  283755             : 
  283756             :           This functions is part of general support for many possible tools to operate 
  283757             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  283758             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  283759             :           less than the set of pointers used by the AST file I/O. This is part of
  283760             :           work implemented by Andreas, and support tools such as the AST graph generation.
  283761             : 
  283762             :           \warning This function can return unexpected data members and thus the 
  283763             :                    order and the number of elements is unpredicable and subject 
  283764             :                    to change.
  283765             : 
  283766             :           \returns STL vector of pairs of SgNode* and strings
  283767             :        */
  283768             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  283769             : 
  283770             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  283771             : 
  283772             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  283773             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  283774             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  283775             : 
  283776             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  283777             :                    and subject to change.
  283778             :        */
  283779             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  283780             : 
  283781             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  283782             : 
  283783             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  283784             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  283785             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  283786             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  283787             : 
  283788             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  283789             : 
  283790             :           \returns long
  283791             :        */
  283792             :           virtual long getChildIndex( SgNode* childNode ) const override;
  283793             : 
  283794             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  283795             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  283796             :       /* \brief Constructor for use by AST File I/O Mechanism
  283797             : 
  283798             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  283799             :           which obtained via fast binary file I/O from disk.
  283800             :        */
  283801             :        // SgDoubleVal( SgDoubleValStorageClass& source );
  283802             : 
  283803             : 
  283804             : 
  283805             : 
  283806             : 
  283807             :  // JH (10/24/2005): methods added to support the ast file IO
  283808             :     private:
  283809             : 
  283810             :       /* name AST Memory Allocation Support Functions
  283811             :           \brief Memory allocations support....
  283812             : 
  283813             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  283814             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  283815             :           and support the AST File I/O Mechanism.
  283816             :        */
  283817             :       /* */
  283818             : 
  283819             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  283820             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  283821             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  283822             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  283823             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  283824             :           a correspinding one in the AST_FILE_IO class!
  283825             :        */
  283826             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  283827             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  283828             :       /* \brief Typedef used for low level memory access.
  283829             :        */
  283830             :        // typedef unsigned char* TestType;
  283831             : 
  283832             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  283833             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  283834             :       /* \brief Typedef used to hold memory addresses as values.
  283835             :        */
  283836             :        // typedef unsigned long  AddressType;
  283837             : 
  283838             : 
  283839             : 
  283840             :        // necessary, to have direct access to the p_freepointer and the private methods !
  283841             :       /*! \brief friend class declaration to support AST File I/O */
  283842             :           friend class AST_FILE_IO;
  283843             : 
  283844             :       /*! \brief friend class declaration to support AST File I/O */
  283845             :           friend class SgDoubleValStorageClass;
  283846             : 
  283847             :       /*! \brief friend class declaration to support AST File I/O */
  283848             :           friend class AstSpecificDataManagingClass;
  283849             : 
  283850             :       /*! \brief friend class declaration to support AST File I/O */
  283851             :           friend class AstSpecificDataManagingClassStorageClass;
  283852             :     public:
  283853             :       /*! \brief IR node constructor to support AST File I/O */
  283854             :           SgDoubleVal( const SgDoubleValStorageClass& source );
  283855             : 
  283856             :  // private: // JJW hack
  283857             :        /*
  283858             :           name AST Memory Allocation Support Variables
  283859             :           Memory allocations support variables 
  283860             : 
  283861             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  283862             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  283863             :           and support the AST File I/O Mechanism.
  283864             :        */
  283865             :       /* */
  283866             : 
  283867             :     public:
  283868             : 
  283869             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  283870             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  283871             :       // virtual SgNode* addRegExpAttribute();
  283872             :       /*! \brief Support for AST matching using regular expression.
  283873             : 
  283874             :           This support is incomplete and the subject of current research to define 
  283875             :           RegEx trees to support inexact matching.
  283876             :        */
  283877             :           SgDoubleVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  283878             : 
  283879             : // *** COMMON CODE SECTION ENDS HERE ***
  283880             : 
  283881             : 
  283882             : // End of memberFunctionString
  283883             : // Start of memberFunctionString
  283884             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  283885             : 
  283886             :      // the generated cast function
  283887             :      // friend ROSE_DLL_API SgDoubleVal* isSgDoubleVal ( SgNode* s );
  283888             : 
  283889             :           typedef SgValueExp base_node_type;
  283890             : 
  283891             : 
  283892             : // End of memberFunctionString
  283893             : // Start of memberFunctionString
  283894             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  283895             : 
  283896             :           SgType* get_type() const override;
  283897             : 
  283898             : 
  283899             : // End of memberFunctionString
  283900             : // Start of memberFunctionString
  283901             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  283902             : 
  283903             :           void post_construction_initialization() override;
  283904             : 
  283905             : 
  283906             : // End of memberFunctionString
  283907             : 
  283908             :      public: 
  283909             :          double get_value() const;
  283910             :          void set_value(double value);
  283911             : 
  283912             :      public: 
  283913             :          std::string get_valueString() const;
  283914             :          void set_valueString(std::string valueString);
  283915             : 
  283916             : 
  283917             :      public: 
  283918             :          virtual ~SgDoubleVal();
  283919             : 
  283920             : 
  283921             :      public: 
  283922             :          SgDoubleVal(Sg_File_Info* startOfConstruct , double value = 0.0, std::string valueString = ""); 
  283923             :          SgDoubleVal(double value, std::string valueString); 
  283924             : 
  283925             :     protected:
  283926             : // Start of memberFunctionString
  283927             : double p_value;
  283928             :           
  283929             : // End of memberFunctionString
  283930             : // Start of memberFunctionString
  283931             : std::string p_valueString;
  283932             :           
  283933             : // End of memberFunctionString
  283934             : 
  283935             :     friend struct Rose::Traits::generated::describe_node_t<SgDoubleVal>;
  283936             :     friend struct Rose::Traits::generated::describe_field_t<SgDoubleVal, double,&SgDoubleVal::p_value>;
  283937             :     friend struct Rose::Traits::generated::describe_field_t<SgDoubleVal, std::string,&SgDoubleVal::p_valueString>;
  283938             : 
  283939             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283940             : 
  283941             : 
  283942             :    };
  283943             : #endif
  283944             : 
  283945             : // postdeclarations for SgDoubleVal
  283946             : 
  283947             : /* #line 283948 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283948             : 
  283949             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  283950             : 
  283951             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283952             : 
  283953             : 
  283954             : /* #line 283955 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283955             : 
  283956             : 
  283957             : 
  283958             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283959             : 
  283960             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  283961             : //      This code is automatically generated for each 
  283962             : //      terminal and non-terminal within the defined 
  283963             : //      grammar.  There is a simple way to change the 
  283964             : //      code to fix bugs etc.  See the ROSE README file
  283965             : //      for directions.
  283966             : 
  283967             : // tps: (02/22/2010): Adding DLL export requirements
  283968             : #include "rosedll.h"
  283969             : 
  283970             : // predeclarations for SgLongDoubleVal
  283971             : 
  283972             : /* #line 283973 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283973             : 
  283974             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  283975             : 
  283976             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  283977             : 
  283978             : #if 1
  283979             : // Class Definition for SgLongDoubleVal
  283980             : class ROSE_DLL_API SgLongDoubleVal  : public SgValueExp
  283981             :    {
  283982             :      public:
  283983             : 
  283984             : 
  283985             : /* #line 283986 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  283986             : 
  283987             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  283988             : // Start of memberFunctionString
  283989             : /* #line 680 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  283990             : 
  283991             : 
  283992             : 
  283993             : // End of memberFunctionString
  283994             : // Start of memberFunctionString
  283995             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  283996             : 
  283997             : // *** COMMON CODE SECTION BEGINS HERE ***
  283998             : 
  283999             :     public:
  284000             : 
  284001             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  284002             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  284003             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  284004             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  284005             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  284006             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  284007             : 
  284008             :       /*! \brief returns a string representing the class name */
  284009             :           virtual std::string class_name() const override;
  284010             : 
  284011             :       /*! \brief returns new style SageIII enum values */
  284012             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  284013             : 
  284014             :       /*! \brief static variant value */
  284015             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  284016             :        // static const VariantT static_variant = V_SgLongDoubleVal;
  284017             :           enum { static_variant = V_SgLongDoubleVal };
  284018             : 
  284019             :        /* the generated cast function */
  284020             :       /*! \brief Casts pointer from base class to derived class */
  284021             :           ROSE_DLL_API friend       SgLongDoubleVal* isSgLongDoubleVal(       SgNode * s );
  284022             : 
  284023             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  284024             :           ROSE_DLL_API friend const SgLongDoubleVal* isSgLongDoubleVal( const SgNode * s );
  284025             : 
  284026             :      // ******************************************
  284027             :      // * Memory Pool / New / Delete
  284028             :      // ******************************************
  284029             : 
  284030             :      public:
  284031             :           /// \private
  284032             :           static const unsigned pool_size; //
  284033             :           /// \private
  284034             :           static std::vector<unsigned char *> pools; //
  284035             :           /// \private
  284036             :           static SgLongDoubleVal * next_node; // 
  284037             : 
  284038             :           /// \private
  284039             :           static unsigned long initializeStorageClassArray(SgLongDoubleValStorageClass *); //
  284040             : 
  284041             :           /// \private
  284042             :           static void clearMemoryPool(); //
  284043             :           static void deleteMemoryPool(); //
  284044             : 
  284045             :           /// \private
  284046             :           static void extendMemoryPoolForFileIO(); //
  284047             : 
  284048             :           /// \private
  284049             :           static SgLongDoubleVal * getPointerFromGlobalIndex(unsigned long); //
  284050             :           /// \private
  284051             :           static SgLongDoubleVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  284052             : 
  284053             :           /// \private
  284054             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  284055             :           /// \private
  284056             :           static void resetValidFreepointers(); //
  284057             :           /// \private
  284058             :           static unsigned long getNumberOfLastValidPointer(); //
  284059             : 
  284060             : 
  284061             : #if defined(INLINE_FUNCTIONS)
  284062             :       /*! \brief returns pointer to newly allocated IR node */
  284063             :           inline void *operator new (size_t size);
  284064             : #else
  284065             :       /*! \brief returns pointer to newly allocated IR node */
  284066             :           void *operator new (size_t size);
  284067             : #endif
  284068             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  284069             :           void operator delete (void* pointer, size_t size);
  284070             : 
  284071             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  284072          32 :           void operator delete (void* pointer)
  284073             :              {
  284074             :             // This is the generated delete operator...
  284075          32 :                SgLongDoubleVal::operator delete (pointer,sizeof(SgLongDoubleVal));
  284076             :              }
  284077             : 
  284078             :       /*! \brief Returns the total number of IR nodes of this type */
  284079             :           static size_t numberOfNodes();
  284080             : 
  284081             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  284082             :           static size_t memoryUsage();
  284083             : 
  284084             :       // End of scope which started in IR nodes specific code 
  284085             :       /* */
  284086             : 
  284087             :       /* name Internal Functions
  284088             :           \brief Internal functions ... incomplete-documentation
  284089             : 
  284090             :           These functions have been made public as part of the design, but they are suggested for internal use 
  284091             :           or by particularly knowledgeable users for specialized tools or applications.
  284092             : 
  284093             :           \internal We could not make these private because they are required by user for special purposes. And 
  284094             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  284095             :          
  284096             :        */
  284097             : 
  284098             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  284099             :        // overridden in every class by *generated* implementation
  284100             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  284101             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  284102             :        // MS: 06/28/02 container of names of variables or container indices 
  284103             :        // used used in the traversal to access AST successor nodes
  284104             :        // overridden in every class by *generated* implementation
  284105             :       /*! \brief container of names of variables or container indices used used in the traversal
  284106             :           to access AST successor nodes overridden in every class by *generated* implementation */
  284107             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  284108             : 
  284109             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  284110             :        // than all the vector copies. The implementation for these functions is generated for each class.
  284111             :       /*! \brief return number of children in the traversal successor list */
  284112             :           virtual size_t get_numberOfTraversalSuccessors() override;
  284113             :       /*! \brief index-based access to traversal successors by index number */
  284114             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  284115             :       /*! \brief index-based access to traversal successors by child node */
  284116             :           virtual size_t get_childIndex(SgNode *child) override;
  284117             : 
  284118             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  284119             :        // MS: 08/16/2002 method for generating RTI information
  284120             :       /*! \brief return C++ Runtime-Time-Information */
  284121             :           virtual RTIReturnType roseRTI() override;
  284122             : #endif
  284123             :       /* */
  284124             : 
  284125             : 
  284126             : 
  284127             :       /* name Deprecated Functions
  284128             :           \brief Deprecated functions ... incomplete-documentation
  284129             : 
  284130             :           These functions have been deprecated from use.
  284131             :        */
  284132             :       /* */
  284133             : 
  284134             :       /*! returns a C style string (char*) representing the class name */
  284135             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  284136             : 
  284137             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  284138             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  284139             : #if 0
  284140             :       /*! returns old style Sage II enum values */
  284141             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  284142             :       /*! returns old style Sage II enum values */
  284143             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  284144             : #endif
  284145             :       /* */
  284146             : 
  284147             : 
  284148             : 
  284149             : 
  284150             :      public:
  284151             :       /* name Traversal Support Functions
  284152             :           \brief Traversal support functions ... incomplete-documentation
  284153             : 
  284154             :           These functions have been made public as part of the design, but they are suggested for internal use 
  284155             :           or by particularly knowledgable users for specialized tools or applications.
  284156             :        */
  284157             :       /* */
  284158             : 
  284159             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  284160             :        // (inferior to ROSE traversal mechanism, experimental).
  284161             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  284162             :        */
  284163             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  284164             : 
  284165             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  284166             :       /*! \brief support for the classic visitor pattern done in GoF */
  284167             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  284168             : 
  284169             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  284170             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  284171             :        */
  284172             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  284173             : 
  284174             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  284175             :        */
  284176             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  284177             : 
  284178             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  284179             :        // This traversal helps support internal tools that call static member functions.
  284180             :        // note: this function operates on the memory pools.
  284181             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  284182             :        */
  284183             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  284184             :       /* */
  284185             : 
  284186             : 
  284187             :      public:
  284188             :       /* name Memory Allocation Functions
  284189             :           \brief Memory allocations functions ... incomplete-documentation
  284190             : 
  284191             :           These functions have been made public as part of the design, but they are suggested for internal use 
  284192             :           or by particularly knowledgable users for specialized tools or applications.
  284193             :        */
  284194             :       /* */
  284195             : 
  284196             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  284197             : 
  284198             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  284199             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  284200             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  284201             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  284202             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  284203             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  284204             :           being used with the AST File I/O mechanism.
  284205             :        */
  284206             :           virtual bool isInMemoryPool() override;
  284207             : 
  284208             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  284209             : 
  284210             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  284211             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  284212             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  284213             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  284214             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  284215             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  284216             :           being used with the AST File I/O mechanism.
  284217             :        */
  284218             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  284219             : 
  284220             :       // DQ (4/30/2006): Modified to be a const function.
  284221             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  284222             : 
  284223             :           This functions is part of general support for many possible tools to operate 
  284224             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  284225             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  284226             :           less than the set of pointers used by the AST file I/O. This is part of
  284227             :           work implemented by Andreas, and support tools such as the AST graph generation.
  284228             : 
  284229             :           \warning This function can return unexpected data members and thus the 
  284230             :                    order and the number of elements is unpredicable and subject 
  284231             :                    to change.
  284232             : 
  284233             :           \returns STL vector of pairs of SgNode* and strings
  284234             :        */
  284235             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  284236             : 
  284237             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  284238             : 
  284239             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  284240             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  284241             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  284242             : 
  284243             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  284244             :                    and subject to change.
  284245             :        */
  284246             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  284247             : 
  284248             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  284249             : 
  284250             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  284251             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  284252             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  284253             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  284254             : 
  284255             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  284256             : 
  284257             :           \returns long
  284258             :        */
  284259             :           virtual long getChildIndex( SgNode* childNode ) const override;
  284260             : 
  284261             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  284262             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  284263             :       /* \brief Constructor for use by AST File I/O Mechanism
  284264             : 
  284265             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  284266             :           which obtained via fast binary file I/O from disk.
  284267             :        */
  284268             :        // SgLongDoubleVal( SgLongDoubleValStorageClass& source );
  284269             : 
  284270             : 
  284271             : 
  284272             : 
  284273             : 
  284274             :  // JH (10/24/2005): methods added to support the ast file IO
  284275             :     private:
  284276             : 
  284277             :       /* name AST Memory Allocation Support Functions
  284278             :           \brief Memory allocations support....
  284279             : 
  284280             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  284281             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  284282             :           and support the AST File I/O Mechanism.
  284283             :        */
  284284             :       /* */
  284285             : 
  284286             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  284287             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  284288             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  284289             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  284290             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  284291             :           a correspinding one in the AST_FILE_IO class!
  284292             :        */
  284293             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  284294             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  284295             :       /* \brief Typedef used for low level memory access.
  284296             :        */
  284297             :        // typedef unsigned char* TestType;
  284298             : 
  284299             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  284300             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  284301             :       /* \brief Typedef used to hold memory addresses as values.
  284302             :        */
  284303             :        // typedef unsigned long  AddressType;
  284304             : 
  284305             : 
  284306             : 
  284307             :        // necessary, to have direct access to the p_freepointer and the private methods !
  284308             :       /*! \brief friend class declaration to support AST File I/O */
  284309             :           friend class AST_FILE_IO;
  284310             : 
  284311             :       /*! \brief friend class declaration to support AST File I/O */
  284312             :           friend class SgLongDoubleValStorageClass;
  284313             : 
  284314             :       /*! \brief friend class declaration to support AST File I/O */
  284315             :           friend class AstSpecificDataManagingClass;
  284316             : 
  284317             :       /*! \brief friend class declaration to support AST File I/O */
  284318             :           friend class AstSpecificDataManagingClassStorageClass;
  284319             :     public:
  284320             :       /*! \brief IR node constructor to support AST File I/O */
  284321             :           SgLongDoubleVal( const SgLongDoubleValStorageClass& source );
  284322             : 
  284323             :  // private: // JJW hack
  284324             :        /*
  284325             :           name AST Memory Allocation Support Variables
  284326             :           Memory allocations support variables 
  284327             : 
  284328             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  284329             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  284330             :           and support the AST File I/O Mechanism.
  284331             :        */
  284332             :       /* */
  284333             : 
  284334             :     public:
  284335             : 
  284336             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  284337             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  284338             :       // virtual SgNode* addRegExpAttribute();
  284339             :       /*! \brief Support for AST matching using regular expression.
  284340             : 
  284341             :           This support is incomplete and the subject of current research to define 
  284342             :           RegEx trees to support inexact matching.
  284343             :        */
  284344             :           SgLongDoubleVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  284345             : 
  284346             : // *** COMMON CODE SECTION ENDS HERE ***
  284347             : 
  284348             : 
  284349             : // End of memberFunctionString
  284350             : // Start of memberFunctionString
  284351             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  284352             : 
  284353             :      // the generated cast function
  284354             :      // friend ROSE_DLL_API SgLongDoubleVal* isSgLongDoubleVal ( SgNode* s );
  284355             : 
  284356             :           typedef SgValueExp base_node_type;
  284357             : 
  284358             : 
  284359             : // End of memberFunctionString
  284360             : // Start of memberFunctionString
  284361             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  284362             : 
  284363             :           SgType* get_type() const override;
  284364             : 
  284365             : 
  284366             : // End of memberFunctionString
  284367             : // Start of memberFunctionString
  284368             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  284369             : 
  284370             :           void post_construction_initialization() override;
  284371             : 
  284372             : 
  284373             : // End of memberFunctionString
  284374             : 
  284375             :      public: 
  284376             :          long double get_value() const;
  284377             :          void set_value(long double value);
  284378             : 
  284379             :      public: 
  284380             :          std::string get_valueString() const;
  284381             :          void set_valueString(std::string valueString);
  284382             : 
  284383             : 
  284384             :      public: 
  284385             :          virtual ~SgLongDoubleVal();
  284386             : 
  284387             : 
  284388             :      public: 
  284389             :          SgLongDoubleVal(Sg_File_Info* startOfConstruct , long double value = 0.0, std::string valueString = ""); 
  284390             :          SgLongDoubleVal(long double value, std::string valueString); 
  284391             : 
  284392             :     protected:
  284393             : // Start of memberFunctionString
  284394             : long double p_value;
  284395             :           
  284396             : // End of memberFunctionString
  284397             : // Start of memberFunctionString
  284398             : std::string p_valueString;
  284399             :           
  284400             : // End of memberFunctionString
  284401             : 
  284402             :     friend struct Rose::Traits::generated::describe_node_t<SgLongDoubleVal>;
  284403             :     friend struct Rose::Traits::generated::describe_field_t<SgLongDoubleVal, long double,&SgLongDoubleVal::p_value>;
  284404             :     friend struct Rose::Traits::generated::describe_field_t<SgLongDoubleVal, std::string,&SgLongDoubleVal::p_valueString>;
  284405             : 
  284406             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284407             : 
  284408             : 
  284409             :    };
  284410             : #endif
  284411             : 
  284412             : // postdeclarations for SgLongDoubleVal
  284413             : 
  284414             : /* #line 284415 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284415             : 
  284416             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  284417             : 
  284418             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284419             : 
  284420             : 
  284421             : /* #line 284422 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284422             : 
  284423             : 
  284424             : 
  284425             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284426             : 
  284427             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  284428             : //      This code is automatically generated for each 
  284429             : //      terminal and non-terminal within the defined 
  284430             : //      grammar.  There is a simple way to change the 
  284431             : //      code to fix bugs etc.  See the ROSE README file
  284432             : //      for directions.
  284433             : 
  284434             : // tps: (02/22/2010): Adding DLL export requirements
  284435             : #include "rosedll.h"
  284436             : 
  284437             : // predeclarations for SgComplexVal
  284438             : 
  284439             : /* #line 284440 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284440             : 
  284441             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  284442             : 
  284443             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284444             : 
  284445             : #if 1
  284446             : // Class Definition for SgComplexVal
  284447             : class ROSE_DLL_API SgComplexVal  : public SgValueExp
  284448             :    {
  284449             :      public:
  284450             : 
  284451             : 
  284452             : /* #line 284453 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284453             : 
  284454             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  284455             : // Start of memberFunctionString
  284456             : /* #line 699 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  284457             : 
  284458             : 
  284459             : 
  284460             : // End of memberFunctionString
  284461             : // Start of memberFunctionString
  284462             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  284463             : 
  284464             : // *** COMMON CODE SECTION BEGINS HERE ***
  284465             : 
  284466             :     public:
  284467             : 
  284468             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  284469             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  284470             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  284471             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  284472             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  284473             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  284474             : 
  284475             :       /*! \brief returns a string representing the class name */
  284476             :           virtual std::string class_name() const override;
  284477             : 
  284478             :       /*! \brief returns new style SageIII enum values */
  284479             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  284480             : 
  284481             :       /*! \brief static variant value */
  284482             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  284483             :        // static const VariantT static_variant = V_SgComplexVal;
  284484             :           enum { static_variant = V_SgComplexVal };
  284485             : 
  284486             :        /* the generated cast function */
  284487             :       /*! \brief Casts pointer from base class to derived class */
  284488             :           ROSE_DLL_API friend       SgComplexVal* isSgComplexVal(       SgNode * s );
  284489             : 
  284490             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  284491             :           ROSE_DLL_API friend const SgComplexVal* isSgComplexVal( const SgNode * s );
  284492             : 
  284493             :      // ******************************************
  284494             :      // * Memory Pool / New / Delete
  284495             :      // ******************************************
  284496             : 
  284497             :      public:
  284498             :           /// \private
  284499             :           static const unsigned pool_size; //
  284500             :           /// \private
  284501             :           static std::vector<unsigned char *> pools; //
  284502             :           /// \private
  284503             :           static SgComplexVal * next_node; // 
  284504             : 
  284505             :           /// \private
  284506             :           static unsigned long initializeStorageClassArray(SgComplexValStorageClass *); //
  284507             : 
  284508             :           /// \private
  284509             :           static void clearMemoryPool(); //
  284510             :           static void deleteMemoryPool(); //
  284511             : 
  284512             :           /// \private
  284513             :           static void extendMemoryPoolForFileIO(); //
  284514             : 
  284515             :           /// \private
  284516             :           static SgComplexVal * getPointerFromGlobalIndex(unsigned long); //
  284517             :           /// \private
  284518             :           static SgComplexVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  284519             : 
  284520             :           /// \private
  284521             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  284522             :           /// \private
  284523             :           static void resetValidFreepointers(); //
  284524             :           /// \private
  284525             :           static unsigned long getNumberOfLastValidPointer(); //
  284526             : 
  284527             : 
  284528             : #if defined(INLINE_FUNCTIONS)
  284529             :       /*! \brief returns pointer to newly allocated IR node */
  284530             :           inline void *operator new (size_t size);
  284531             : #else
  284532             :       /*! \brief returns pointer to newly allocated IR node */
  284533             :           void *operator new (size_t size);
  284534             : #endif
  284535             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  284536             :           void operator delete (void* pointer, size_t size);
  284537             : 
  284538             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  284539           0 :           void operator delete (void* pointer)
  284540             :              {
  284541             :             // This is the generated delete operator...
  284542           0 :                SgComplexVal::operator delete (pointer,sizeof(SgComplexVal));
  284543             :              }
  284544             : 
  284545             :       /*! \brief Returns the total number of IR nodes of this type */
  284546             :           static size_t numberOfNodes();
  284547             : 
  284548             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  284549             :           static size_t memoryUsage();
  284550             : 
  284551             :       // End of scope which started in IR nodes specific code 
  284552             :       /* */
  284553             : 
  284554             :       /* name Internal Functions
  284555             :           \brief Internal functions ... incomplete-documentation
  284556             : 
  284557             :           These functions have been made public as part of the design, but they are suggested for internal use 
  284558             :           or by particularly knowledgeable users for specialized tools or applications.
  284559             : 
  284560             :           \internal We could not make these private because they are required by user for special purposes. And 
  284561             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  284562             :          
  284563             :        */
  284564             : 
  284565             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  284566             :        // overridden in every class by *generated* implementation
  284567             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  284568             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  284569             :        // MS: 06/28/02 container of names of variables or container indices 
  284570             :        // used used in the traversal to access AST successor nodes
  284571             :        // overridden in every class by *generated* implementation
  284572             :       /*! \brief container of names of variables or container indices used used in the traversal
  284573             :           to access AST successor nodes overridden in every class by *generated* implementation */
  284574             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  284575             : 
  284576             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  284577             :        // than all the vector copies. The implementation for these functions is generated for each class.
  284578             :       /*! \brief return number of children in the traversal successor list */
  284579             :           virtual size_t get_numberOfTraversalSuccessors() override;
  284580             :       /*! \brief index-based access to traversal successors by index number */
  284581             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  284582             :       /*! \brief index-based access to traversal successors by child node */
  284583             :           virtual size_t get_childIndex(SgNode *child) override;
  284584             : 
  284585             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  284586             :        // MS: 08/16/2002 method for generating RTI information
  284587             :       /*! \brief return C++ Runtime-Time-Information */
  284588             :           virtual RTIReturnType roseRTI() override;
  284589             : #endif
  284590             :       /* */
  284591             : 
  284592             : 
  284593             : 
  284594             :       /* name Deprecated Functions
  284595             :           \brief Deprecated functions ... incomplete-documentation
  284596             : 
  284597             :           These functions have been deprecated from use.
  284598             :        */
  284599             :       /* */
  284600             : 
  284601             :       /*! returns a C style string (char*) representing the class name */
  284602             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  284603             : 
  284604             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  284605             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  284606             : #if 0
  284607             :       /*! returns old style Sage II enum values */
  284608             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  284609             :       /*! returns old style Sage II enum values */
  284610             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  284611             : #endif
  284612             :       /* */
  284613             : 
  284614             : 
  284615             : 
  284616             : 
  284617             :      public:
  284618             :       /* name Traversal Support Functions
  284619             :           \brief Traversal support functions ... incomplete-documentation
  284620             : 
  284621             :           These functions have been made public as part of the design, but they are suggested for internal use 
  284622             :           or by particularly knowledgable users for specialized tools or applications.
  284623             :        */
  284624             :       /* */
  284625             : 
  284626             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  284627             :        // (inferior to ROSE traversal mechanism, experimental).
  284628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  284629             :        */
  284630             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  284631             : 
  284632             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  284633             :       /*! \brief support for the classic visitor pattern done in GoF */
  284634             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  284635             : 
  284636             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  284637             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  284638             :        */
  284639             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  284640             : 
  284641             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  284642             :        */
  284643             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  284644             : 
  284645             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  284646             :        // This traversal helps support internal tools that call static member functions.
  284647             :        // note: this function operates on the memory pools.
  284648             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  284649             :        */
  284650             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  284651             :       /* */
  284652             : 
  284653             : 
  284654             :      public:
  284655             :       /* name Memory Allocation Functions
  284656             :           \brief Memory allocations functions ... incomplete-documentation
  284657             : 
  284658             :           These functions have been made public as part of the design, but they are suggested for internal use 
  284659             :           or by particularly knowledgable users for specialized tools or applications.
  284660             :        */
  284661             :       /* */
  284662             : 
  284663             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  284664             : 
  284665             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  284666             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  284667             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  284668             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  284669             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  284670             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  284671             :           being used with the AST File I/O mechanism.
  284672             :        */
  284673             :           virtual bool isInMemoryPool() override;
  284674             : 
  284675             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  284676             : 
  284677             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  284678             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  284679             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  284680             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  284681             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  284682             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  284683             :           being used with the AST File I/O mechanism.
  284684             :        */
  284685             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  284686             : 
  284687             :       // DQ (4/30/2006): Modified to be a const function.
  284688             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  284689             : 
  284690             :           This functions is part of general support for many possible tools to operate 
  284691             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  284692             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  284693             :           less than the set of pointers used by the AST file I/O. This is part of
  284694             :           work implemented by Andreas, and support tools such as the AST graph generation.
  284695             : 
  284696             :           \warning This function can return unexpected data members and thus the 
  284697             :                    order and the number of elements is unpredicable and subject 
  284698             :                    to change.
  284699             : 
  284700             :           \returns STL vector of pairs of SgNode* and strings
  284701             :        */
  284702             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  284703             : 
  284704             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  284705             : 
  284706             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  284707             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  284708             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  284709             : 
  284710             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  284711             :                    and subject to change.
  284712             :        */
  284713             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  284714             : 
  284715             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  284716             : 
  284717             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  284718             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  284719             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  284720             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  284721             : 
  284722             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  284723             : 
  284724             :           \returns long
  284725             :        */
  284726             :           virtual long getChildIndex( SgNode* childNode ) const override;
  284727             : 
  284728             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  284729             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  284730             :       /* \brief Constructor for use by AST File I/O Mechanism
  284731             : 
  284732             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  284733             :           which obtained via fast binary file I/O from disk.
  284734             :        */
  284735             :        // SgComplexVal( SgComplexValStorageClass& source );
  284736             : 
  284737             : 
  284738             : 
  284739             : 
  284740             : 
  284741             :  // JH (10/24/2005): methods added to support the ast file IO
  284742             :     private:
  284743             : 
  284744             :       /* name AST Memory Allocation Support Functions
  284745             :           \brief Memory allocations support....
  284746             : 
  284747             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  284748             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  284749             :           and support the AST File I/O Mechanism.
  284750             :        */
  284751             :       /* */
  284752             : 
  284753             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  284754             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  284755             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  284756             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  284757             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  284758             :           a correspinding one in the AST_FILE_IO class!
  284759             :        */
  284760             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  284761             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  284762             :       /* \brief Typedef used for low level memory access.
  284763             :        */
  284764             :        // typedef unsigned char* TestType;
  284765             : 
  284766             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  284767             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  284768             :       /* \brief Typedef used to hold memory addresses as values.
  284769             :        */
  284770             :        // typedef unsigned long  AddressType;
  284771             : 
  284772             : 
  284773             : 
  284774             :        // necessary, to have direct access to the p_freepointer and the private methods !
  284775             :       /*! \brief friend class declaration to support AST File I/O */
  284776             :           friend class AST_FILE_IO;
  284777             : 
  284778             :       /*! \brief friend class declaration to support AST File I/O */
  284779             :           friend class SgComplexValStorageClass;
  284780             : 
  284781             :       /*! \brief friend class declaration to support AST File I/O */
  284782             :           friend class AstSpecificDataManagingClass;
  284783             : 
  284784             :       /*! \brief friend class declaration to support AST File I/O */
  284785             :           friend class AstSpecificDataManagingClassStorageClass;
  284786             :     public:
  284787             :       /*! \brief IR node constructor to support AST File I/O */
  284788             :           SgComplexVal( const SgComplexValStorageClass& source );
  284789             : 
  284790             :  // private: // JJW hack
  284791             :        /*
  284792             :           name AST Memory Allocation Support Variables
  284793             :           Memory allocations support variables 
  284794             : 
  284795             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  284796             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  284797             :           and support the AST File I/O Mechanism.
  284798             :        */
  284799             :       /* */
  284800             : 
  284801             :     public:
  284802             : 
  284803             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  284804             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  284805             :       // virtual SgNode* addRegExpAttribute();
  284806             :       /*! \brief Support for AST matching using regular expression.
  284807             : 
  284808             :           This support is incomplete and the subject of current research to define 
  284809             :           RegEx trees to support inexact matching.
  284810             :        */
  284811             :           SgComplexVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  284812             : 
  284813             : // *** COMMON CODE SECTION ENDS HERE ***
  284814             : 
  284815             : 
  284816             : // End of memberFunctionString
  284817             : // Start of memberFunctionString
  284818             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  284819             : 
  284820             :      // the generated cast function
  284821             :      // friend ROSE_DLL_API SgComplexVal* isSgComplexVal ( SgNode* s );
  284822             : 
  284823             :           typedef SgValueExp base_node_type;
  284824             : 
  284825             : 
  284826             : // End of memberFunctionString
  284827             : // Start of memberFunctionString
  284828             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  284829             : 
  284830             :           SgType* get_type() const override;
  284831             : 
  284832             : 
  284833             : // End of memberFunctionString
  284834             : // Start of memberFunctionString
  284835             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  284836             : 
  284837             :           void post_construction_initialization() override;
  284838             : 
  284839             : 
  284840             : // End of memberFunctionString
  284841             : 
  284842             :      public: 
  284843             :          SgValueExp* get_real_value() const;
  284844             :          void set_real_value(SgValueExp* real_value);
  284845             : 
  284846             :      public: 
  284847             :          SgValueExp* get_imaginary_value() const;
  284848             :          void set_imaginary_value(SgValueExp* imaginary_value);
  284849             : 
  284850             :      public: 
  284851             :          SgType* get_precisionType() const;
  284852             :          void set_precisionType(SgType* precisionType);
  284853             : 
  284854             :      public: 
  284855             :          std::string get_valueString() const;
  284856             :          void set_valueString(std::string valueString);
  284857             : 
  284858             : 
  284859             :      public: 
  284860             :          virtual ~SgComplexVal();
  284861             : 
  284862             : 
  284863             :      public: 
  284864             :          SgComplexVal(Sg_File_Info* startOfConstruct , SgValueExp* real_value = NULL, SgValueExp* imaginary_value = NULL, SgType* precisionType = NULL, std::string valueString = ""); 
  284865             :          SgComplexVal(SgValueExp* real_value, SgValueExp* imaginary_value, SgType* precisionType, std::string valueString); 
  284866             : 
  284867             :     protected:
  284868             : // Start of memberFunctionString
  284869             : SgValueExp* p_real_value;
  284870             :           
  284871             : // End of memberFunctionString
  284872             : // Start of memberFunctionString
  284873             : SgValueExp* p_imaginary_value;
  284874             :           
  284875             : // End of memberFunctionString
  284876             : // Start of memberFunctionString
  284877             : SgType* p_precisionType;
  284878             :           
  284879             : // End of memberFunctionString
  284880             : // Start of memberFunctionString
  284881             : std::string p_valueString;
  284882             :           
  284883             : // End of memberFunctionString
  284884             : 
  284885             :     friend struct Rose::Traits::generated::describe_node_t<SgComplexVal>;
  284886             :     friend struct Rose::Traits::generated::describe_field_t<SgComplexVal, SgValueExp*,&SgComplexVal::p_real_value>;
  284887             :     friend struct Rose::Traits::generated::describe_field_t<SgComplexVal, SgValueExp*,&SgComplexVal::p_imaginary_value>;
  284888             :     friend struct Rose::Traits::generated::describe_field_t<SgComplexVal, SgType*,&SgComplexVal::p_precisionType>;
  284889             :     friend struct Rose::Traits::generated::describe_field_t<SgComplexVal, std::string,&SgComplexVal::p_valueString>;
  284890             : 
  284891             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284892             : 
  284893             : 
  284894             :    };
  284895             : #endif
  284896             : 
  284897             : // postdeclarations for SgComplexVal
  284898             : 
  284899             : /* #line 284900 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284900             : 
  284901             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  284902             : 
  284903             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284904             : 
  284905             : 
  284906             : /* #line 284907 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284907             : 
  284908             : 
  284909             : 
  284910             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284911             : 
  284912             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  284913             : //      This code is automatically generated for each 
  284914             : //      terminal and non-terminal within the defined 
  284915             : //      grammar.  There is a simple way to change the 
  284916             : //      code to fix bugs etc.  See the ROSE README file
  284917             : //      for directions.
  284918             : 
  284919             : // tps: (02/22/2010): Adding DLL export requirements
  284920             : #include "rosedll.h"
  284921             : 
  284922             : // predeclarations for SgUpcThreads
  284923             : 
  284924             : /* #line 284925 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284925             : 
  284926             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  284927             : 
  284928             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  284929             : 
  284930             : #if 1
  284931             : // Class Definition for SgUpcThreads
  284932             : class ROSE_DLL_API SgUpcThreads  : public SgValueExp
  284933             :    {
  284934             :      public:
  284935             : 
  284936             : 
  284937             : /* #line 284938 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  284938             : 
  284939             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  284940             : // Start of memberFunctionString
  284941             : /* #line 705 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  284942             : 
  284943             : 
  284944             : 
  284945             : // End of memberFunctionString
  284946             : // Start of memberFunctionString
  284947             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  284948             : 
  284949             : // *** COMMON CODE SECTION BEGINS HERE ***
  284950             : 
  284951             :     public:
  284952             : 
  284953             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  284954             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  284955             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  284956             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  284957             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  284958             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  284959             : 
  284960             :       /*! \brief returns a string representing the class name */
  284961             :           virtual std::string class_name() const override;
  284962             : 
  284963             :       /*! \brief returns new style SageIII enum values */
  284964             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  284965             : 
  284966             :       /*! \brief static variant value */
  284967             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  284968             :        // static const VariantT static_variant = V_SgUpcThreads;
  284969             :           enum { static_variant = V_SgUpcThreads };
  284970             : 
  284971             :        /* the generated cast function */
  284972             :       /*! \brief Casts pointer from base class to derived class */
  284973             :           ROSE_DLL_API friend       SgUpcThreads* isSgUpcThreads(       SgNode * s );
  284974             : 
  284975             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  284976             :           ROSE_DLL_API friend const SgUpcThreads* isSgUpcThreads( const SgNode * s );
  284977             : 
  284978             :      // ******************************************
  284979             :      // * Memory Pool / New / Delete
  284980             :      // ******************************************
  284981             : 
  284982             :      public:
  284983             :           /// \private
  284984             :           static const unsigned pool_size; //
  284985             :           /// \private
  284986             :           static std::vector<unsigned char *> pools; //
  284987             :           /// \private
  284988             :           static SgUpcThreads * next_node; // 
  284989             : 
  284990             :           /// \private
  284991             :           static unsigned long initializeStorageClassArray(SgUpcThreadsStorageClass *); //
  284992             : 
  284993             :           /// \private
  284994             :           static void clearMemoryPool(); //
  284995             :           static void deleteMemoryPool(); //
  284996             : 
  284997             :           /// \private
  284998             :           static void extendMemoryPoolForFileIO(); //
  284999             : 
  285000             :           /// \private
  285001             :           static SgUpcThreads * getPointerFromGlobalIndex(unsigned long); //
  285002             :           /// \private
  285003             :           static SgUpcThreads * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  285004             : 
  285005             :           /// \private
  285006             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  285007             :           /// \private
  285008             :           static void resetValidFreepointers(); //
  285009             :           /// \private
  285010             :           static unsigned long getNumberOfLastValidPointer(); //
  285011             : 
  285012             : 
  285013             : #if defined(INLINE_FUNCTIONS)
  285014             :       /*! \brief returns pointer to newly allocated IR node */
  285015             :           inline void *operator new (size_t size);
  285016             : #else
  285017             :       /*! \brief returns pointer to newly allocated IR node */
  285018             :           void *operator new (size_t size);
  285019             : #endif
  285020             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  285021             :           void operator delete (void* pointer, size_t size);
  285022             : 
  285023             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  285024           0 :           void operator delete (void* pointer)
  285025             :              {
  285026             :             // This is the generated delete operator...
  285027           0 :                SgUpcThreads::operator delete (pointer,sizeof(SgUpcThreads));
  285028             :              }
  285029             : 
  285030             :       /*! \brief Returns the total number of IR nodes of this type */
  285031             :           static size_t numberOfNodes();
  285032             : 
  285033             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  285034             :           static size_t memoryUsage();
  285035             : 
  285036             :       // End of scope which started in IR nodes specific code 
  285037             :       /* */
  285038             : 
  285039             :       /* name Internal Functions
  285040             :           \brief Internal functions ... incomplete-documentation
  285041             : 
  285042             :           These functions have been made public as part of the design, but they are suggested for internal use 
  285043             :           or by particularly knowledgeable users for specialized tools or applications.
  285044             : 
  285045             :           \internal We could not make these private because they are required by user for special purposes. And 
  285046             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  285047             :          
  285048             :        */
  285049             : 
  285050             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  285051             :        // overridden in every class by *generated* implementation
  285052             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  285053             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  285054             :        // MS: 06/28/02 container of names of variables or container indices 
  285055             :        // used used in the traversal to access AST successor nodes
  285056             :        // overridden in every class by *generated* implementation
  285057             :       /*! \brief container of names of variables or container indices used used in the traversal
  285058             :           to access AST successor nodes overridden in every class by *generated* implementation */
  285059             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  285060             : 
  285061             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  285062             :        // than all the vector copies. The implementation for these functions is generated for each class.
  285063             :       /*! \brief return number of children in the traversal successor list */
  285064             :           virtual size_t get_numberOfTraversalSuccessors() override;
  285065             :       /*! \brief index-based access to traversal successors by index number */
  285066             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  285067             :       /*! \brief index-based access to traversal successors by child node */
  285068             :           virtual size_t get_childIndex(SgNode *child) override;
  285069             : 
  285070             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  285071             :        // MS: 08/16/2002 method for generating RTI information
  285072             :       /*! \brief return C++ Runtime-Time-Information */
  285073             :           virtual RTIReturnType roseRTI() override;
  285074             : #endif
  285075             :       /* */
  285076             : 
  285077             : 
  285078             : 
  285079             :       /* name Deprecated Functions
  285080             :           \brief Deprecated functions ... incomplete-documentation
  285081             : 
  285082             :           These functions have been deprecated from use.
  285083             :        */
  285084             :       /* */
  285085             : 
  285086             :       /*! returns a C style string (char*) representing the class name */
  285087             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  285088             : 
  285089             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  285090             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  285091             : #if 0
  285092             :       /*! returns old style Sage II enum values */
  285093             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  285094             :       /*! returns old style Sage II enum values */
  285095             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  285096             : #endif
  285097             :       /* */
  285098             : 
  285099             : 
  285100             : 
  285101             : 
  285102             :      public:
  285103             :       /* name Traversal Support Functions
  285104             :           \brief Traversal support functions ... incomplete-documentation
  285105             : 
  285106             :           These functions have been made public as part of the design, but they are suggested for internal use 
  285107             :           or by particularly knowledgable users for specialized tools or applications.
  285108             :        */
  285109             :       /* */
  285110             : 
  285111             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  285112             :        // (inferior to ROSE traversal mechanism, experimental).
  285113             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  285114             :        */
  285115             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  285116             : 
  285117             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  285118             :       /*! \brief support for the classic visitor pattern done in GoF */
  285119             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  285120             : 
  285121             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  285122             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  285123             :        */
  285124             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  285125             : 
  285126             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  285127             :        */
  285128             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  285129             : 
  285130             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  285131             :        // This traversal helps support internal tools that call static member functions.
  285132             :        // note: this function operates on the memory pools.
  285133             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  285134             :        */
  285135             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  285136             :       /* */
  285137             : 
  285138             : 
  285139             :      public:
  285140             :       /* name Memory Allocation Functions
  285141             :           \brief Memory allocations functions ... incomplete-documentation
  285142             : 
  285143             :           These functions have been made public as part of the design, but they are suggested for internal use 
  285144             :           or by particularly knowledgable users for specialized tools or applications.
  285145             :        */
  285146             :       /* */
  285147             : 
  285148             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  285149             : 
  285150             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  285151             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  285152             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  285153             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  285154             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  285155             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  285156             :           being used with the AST File I/O mechanism.
  285157             :        */
  285158             :           virtual bool isInMemoryPool() override;
  285159             : 
  285160             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  285161             : 
  285162             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  285163             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  285164             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  285165             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  285166             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  285167             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  285168             :           being used with the AST File I/O mechanism.
  285169             :        */
  285170             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  285171             : 
  285172             :       // DQ (4/30/2006): Modified to be a const function.
  285173             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  285174             : 
  285175             :           This functions is part of general support for many possible tools to operate 
  285176             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  285177             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  285178             :           less than the set of pointers used by the AST file I/O. This is part of
  285179             :           work implemented by Andreas, and support tools such as the AST graph generation.
  285180             : 
  285181             :           \warning This function can return unexpected data members and thus the 
  285182             :                    order and the number of elements is unpredicable and subject 
  285183             :                    to change.
  285184             : 
  285185             :           \returns STL vector of pairs of SgNode* and strings
  285186             :        */
  285187             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  285188             : 
  285189             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  285190             : 
  285191             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  285192             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  285193             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  285194             : 
  285195             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  285196             :                    and subject to change.
  285197             :        */
  285198             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  285199             : 
  285200             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  285201             : 
  285202             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  285203             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  285204             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  285205             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  285206             : 
  285207             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  285208             : 
  285209             :           \returns long
  285210             :        */
  285211             :           virtual long getChildIndex( SgNode* childNode ) const override;
  285212             : 
  285213             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  285214             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  285215             :       /* \brief Constructor for use by AST File I/O Mechanism
  285216             : 
  285217             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  285218             :           which obtained via fast binary file I/O from disk.
  285219             :        */
  285220             :        // SgUpcThreads( SgUpcThreadsStorageClass& source );
  285221             : 
  285222             : 
  285223             : 
  285224             : 
  285225             : 
  285226             :  // JH (10/24/2005): methods added to support the ast file IO
  285227             :     private:
  285228             : 
  285229             :       /* name AST Memory Allocation Support Functions
  285230             :           \brief Memory allocations support....
  285231             : 
  285232             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  285233             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  285234             :           and support the AST File I/O Mechanism.
  285235             :        */
  285236             :       /* */
  285237             : 
  285238             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  285239             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  285240             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  285241             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  285242             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  285243             :           a correspinding one in the AST_FILE_IO class!
  285244             :        */
  285245             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  285246             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  285247             :       /* \brief Typedef used for low level memory access.
  285248             :        */
  285249             :        // typedef unsigned char* TestType;
  285250             : 
  285251             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  285252             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  285253             :       /* \brief Typedef used to hold memory addresses as values.
  285254             :        */
  285255             :        // typedef unsigned long  AddressType;
  285256             : 
  285257             : 
  285258             : 
  285259             :        // necessary, to have direct access to the p_freepointer and the private methods !
  285260             :       /*! \brief friend class declaration to support AST File I/O */
  285261             :           friend class AST_FILE_IO;
  285262             : 
  285263             :       /*! \brief friend class declaration to support AST File I/O */
  285264             :           friend class SgUpcThreadsStorageClass;
  285265             : 
  285266             :       /*! \brief friend class declaration to support AST File I/O */
  285267             :           friend class AstSpecificDataManagingClass;
  285268             : 
  285269             :       /*! \brief friend class declaration to support AST File I/O */
  285270             :           friend class AstSpecificDataManagingClassStorageClass;
  285271             :     public:
  285272             :       /*! \brief IR node constructor to support AST File I/O */
  285273             :           SgUpcThreads( const SgUpcThreadsStorageClass& source );
  285274             : 
  285275             :  // private: // JJW hack
  285276             :        /*
  285277             :           name AST Memory Allocation Support Variables
  285278             :           Memory allocations support variables 
  285279             : 
  285280             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  285281             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  285282             :           and support the AST File I/O Mechanism.
  285283             :        */
  285284             :       /* */
  285285             : 
  285286             :     public:
  285287             : 
  285288             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  285289             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  285290             :       // virtual SgNode* addRegExpAttribute();
  285291             :       /*! \brief Support for AST matching using regular expression.
  285292             : 
  285293             :           This support is incomplete and the subject of current research to define 
  285294             :           RegEx trees to support inexact matching.
  285295             :        */
  285296             :           SgUpcThreads* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  285297             : 
  285298             : // *** COMMON CODE SECTION ENDS HERE ***
  285299             : 
  285300             : 
  285301             : // End of memberFunctionString
  285302             : // Start of memberFunctionString
  285303             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  285304             : 
  285305             :      // the generated cast function
  285306             :      // friend ROSE_DLL_API SgUpcThreads* isSgUpcThreads ( SgNode* s );
  285307             : 
  285308             :           typedef SgValueExp base_node_type;
  285309             : 
  285310             : 
  285311             : // End of memberFunctionString
  285312             : // Start of memberFunctionString
  285313             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  285314             : 
  285315             :           SgType* get_type() const override;
  285316             : 
  285317             : 
  285318             : // End of memberFunctionString
  285319             : // Start of memberFunctionString
  285320             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  285321             : 
  285322             :           void post_construction_initialization() override;
  285323             : 
  285324             : 
  285325             : // End of memberFunctionString
  285326             : 
  285327             :      public: 
  285328             :          int get_value() const;
  285329             :          void set_value(int value);
  285330             : 
  285331             :      public: 
  285332             :          std::string get_valueString() const;
  285333             :          void set_valueString(std::string valueString);
  285334             : 
  285335             : 
  285336             :      public: 
  285337             :          virtual ~SgUpcThreads();
  285338             : 
  285339             : 
  285340             :      public: 
  285341             :          SgUpcThreads(Sg_File_Info* startOfConstruct , int value = 0, std::string valueString = ""); 
  285342             :          SgUpcThreads(int value, std::string valueString); 
  285343             : 
  285344             :     protected:
  285345             : // Start of memberFunctionString
  285346             : int p_value;
  285347             :           
  285348             : // End of memberFunctionString
  285349             : // Start of memberFunctionString
  285350             : std::string p_valueString;
  285351             :           
  285352             : // End of memberFunctionString
  285353             : 
  285354             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcThreads>;
  285355             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcThreads, int,&SgUpcThreads::p_value>;
  285356             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcThreads, std::string,&SgUpcThreads::p_valueString>;
  285357             : 
  285358             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285359             : 
  285360             : 
  285361             :    };
  285362             : #endif
  285363             : 
  285364             : // postdeclarations for SgUpcThreads
  285365             : 
  285366             : /* #line 285367 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285367             : 
  285368             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  285369             : 
  285370             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285371             : 
  285372             : 
  285373             : /* #line 285374 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285374             : 
  285375             : 
  285376             : 
  285377             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285378             : 
  285379             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  285380             : //      This code is automatically generated for each 
  285381             : //      terminal and non-terminal within the defined 
  285382             : //      grammar.  There is a simple way to change the 
  285383             : //      code to fix bugs etc.  See the ROSE README file
  285384             : //      for directions.
  285385             : 
  285386             : // tps: (02/22/2010): Adding DLL export requirements
  285387             : #include "rosedll.h"
  285388             : 
  285389             : // predeclarations for SgUpcMythread
  285390             : 
  285391             : /* #line 285392 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285392             : 
  285393             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  285394             : 
  285395             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285396             : 
  285397             : #if 1
  285398             : // Class Definition for SgUpcMythread
  285399             : class ROSE_DLL_API SgUpcMythread  : public SgValueExp
  285400             :    {
  285401             :      public:
  285402             : 
  285403             : 
  285404             : /* #line 285405 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285405             : 
  285406             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  285407             : // Start of memberFunctionString
  285408             : /* #line 708 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  285409             : 
  285410             : 
  285411             : 
  285412             : // End of memberFunctionString
  285413             : // Start of memberFunctionString
  285414             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  285415             : 
  285416             : // *** COMMON CODE SECTION BEGINS HERE ***
  285417             : 
  285418             :     public:
  285419             : 
  285420             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  285421             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  285422             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  285423             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  285424             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  285425             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  285426             : 
  285427             :       /*! \brief returns a string representing the class name */
  285428             :           virtual std::string class_name() const override;
  285429             : 
  285430             :       /*! \brief returns new style SageIII enum values */
  285431             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  285432             : 
  285433             :       /*! \brief static variant value */
  285434             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  285435             :        // static const VariantT static_variant = V_SgUpcMythread;
  285436             :           enum { static_variant = V_SgUpcMythread };
  285437             : 
  285438             :        /* the generated cast function */
  285439             :       /*! \brief Casts pointer from base class to derived class */
  285440             :           ROSE_DLL_API friend       SgUpcMythread* isSgUpcMythread(       SgNode * s );
  285441             : 
  285442             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  285443             :           ROSE_DLL_API friend const SgUpcMythread* isSgUpcMythread( const SgNode * s );
  285444             : 
  285445             :      // ******************************************
  285446             :      // * Memory Pool / New / Delete
  285447             :      // ******************************************
  285448             : 
  285449             :      public:
  285450             :           /// \private
  285451             :           static const unsigned pool_size; //
  285452             :           /// \private
  285453             :           static std::vector<unsigned char *> pools; //
  285454             :           /// \private
  285455             :           static SgUpcMythread * next_node; // 
  285456             : 
  285457             :           /// \private
  285458             :           static unsigned long initializeStorageClassArray(SgUpcMythreadStorageClass *); //
  285459             : 
  285460             :           /// \private
  285461             :           static void clearMemoryPool(); //
  285462             :           static void deleteMemoryPool(); //
  285463             : 
  285464             :           /// \private
  285465             :           static void extendMemoryPoolForFileIO(); //
  285466             : 
  285467             :           /// \private
  285468             :           static SgUpcMythread * getPointerFromGlobalIndex(unsigned long); //
  285469             :           /// \private
  285470             :           static SgUpcMythread * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  285471             : 
  285472             :           /// \private
  285473             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  285474             :           /// \private
  285475             :           static void resetValidFreepointers(); //
  285476             :           /// \private
  285477             :           static unsigned long getNumberOfLastValidPointer(); //
  285478             : 
  285479             : 
  285480             : #if defined(INLINE_FUNCTIONS)
  285481             :       /*! \brief returns pointer to newly allocated IR node */
  285482             :           inline void *operator new (size_t size);
  285483             : #else
  285484             :       /*! \brief returns pointer to newly allocated IR node */
  285485             :           void *operator new (size_t size);
  285486             : #endif
  285487             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  285488             :           void operator delete (void* pointer, size_t size);
  285489             : 
  285490             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  285491           0 :           void operator delete (void* pointer)
  285492             :              {
  285493             :             // This is the generated delete operator...
  285494           0 :                SgUpcMythread::operator delete (pointer,sizeof(SgUpcMythread));
  285495             :              }
  285496             : 
  285497             :       /*! \brief Returns the total number of IR nodes of this type */
  285498             :           static size_t numberOfNodes();
  285499             : 
  285500             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  285501             :           static size_t memoryUsage();
  285502             : 
  285503             :       // End of scope which started in IR nodes specific code 
  285504             :       /* */
  285505             : 
  285506             :       /* name Internal Functions
  285507             :           \brief Internal functions ... incomplete-documentation
  285508             : 
  285509             :           These functions have been made public as part of the design, but they are suggested for internal use 
  285510             :           or by particularly knowledgeable users for specialized tools or applications.
  285511             : 
  285512             :           \internal We could not make these private because they are required by user for special purposes. And 
  285513             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  285514             :          
  285515             :        */
  285516             : 
  285517             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  285518             :        // overridden in every class by *generated* implementation
  285519             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  285520             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  285521             :        // MS: 06/28/02 container of names of variables or container indices 
  285522             :        // used used in the traversal to access AST successor nodes
  285523             :        // overridden in every class by *generated* implementation
  285524             :       /*! \brief container of names of variables or container indices used used in the traversal
  285525             :           to access AST successor nodes overridden in every class by *generated* implementation */
  285526             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  285527             : 
  285528             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  285529             :        // than all the vector copies. The implementation for these functions is generated for each class.
  285530             :       /*! \brief return number of children in the traversal successor list */
  285531             :           virtual size_t get_numberOfTraversalSuccessors() override;
  285532             :       /*! \brief index-based access to traversal successors by index number */
  285533             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  285534             :       /*! \brief index-based access to traversal successors by child node */
  285535             :           virtual size_t get_childIndex(SgNode *child) override;
  285536             : 
  285537             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  285538             :        // MS: 08/16/2002 method for generating RTI information
  285539             :       /*! \brief return C++ Runtime-Time-Information */
  285540             :           virtual RTIReturnType roseRTI() override;
  285541             : #endif
  285542             :       /* */
  285543             : 
  285544             : 
  285545             : 
  285546             :       /* name Deprecated Functions
  285547             :           \brief Deprecated functions ... incomplete-documentation
  285548             : 
  285549             :           These functions have been deprecated from use.
  285550             :        */
  285551             :       /* */
  285552             : 
  285553             :       /*! returns a C style string (char*) representing the class name */
  285554             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  285555             : 
  285556             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  285557             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  285558             : #if 0
  285559             :       /*! returns old style Sage II enum values */
  285560             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  285561             :       /*! returns old style Sage II enum values */
  285562             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  285563             : #endif
  285564             :       /* */
  285565             : 
  285566             : 
  285567             : 
  285568             : 
  285569             :      public:
  285570             :       /* name Traversal Support Functions
  285571             :           \brief Traversal support functions ... incomplete-documentation
  285572             : 
  285573             :           These functions have been made public as part of the design, but they are suggested for internal use 
  285574             :           or by particularly knowledgable users for specialized tools or applications.
  285575             :        */
  285576             :       /* */
  285577             : 
  285578             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  285579             :        // (inferior to ROSE traversal mechanism, experimental).
  285580             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  285581             :        */
  285582             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  285583             : 
  285584             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  285585             :       /*! \brief support for the classic visitor pattern done in GoF */
  285586             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  285587             : 
  285588             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  285589             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  285590             :        */
  285591             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  285592             : 
  285593             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  285594             :        */
  285595             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  285596             : 
  285597             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  285598             :        // This traversal helps support internal tools that call static member functions.
  285599             :        // note: this function operates on the memory pools.
  285600             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  285601             :        */
  285602             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  285603             :       /* */
  285604             : 
  285605             : 
  285606             :      public:
  285607             :       /* name Memory Allocation Functions
  285608             :           \brief Memory allocations functions ... incomplete-documentation
  285609             : 
  285610             :           These functions have been made public as part of the design, but they are suggested for internal use 
  285611             :           or by particularly knowledgable users for specialized tools or applications.
  285612             :        */
  285613             :       /* */
  285614             : 
  285615             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  285616             : 
  285617             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  285618             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  285619             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  285620             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  285621             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  285622             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  285623             :           being used with the AST File I/O mechanism.
  285624             :        */
  285625             :           virtual bool isInMemoryPool() override;
  285626             : 
  285627             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  285628             : 
  285629             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  285630             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  285631             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  285632             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  285633             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  285634             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  285635             :           being used with the AST File I/O mechanism.
  285636             :        */
  285637             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  285638             : 
  285639             :       // DQ (4/30/2006): Modified to be a const function.
  285640             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  285641             : 
  285642             :           This functions is part of general support for many possible tools to operate 
  285643             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  285644             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  285645             :           less than the set of pointers used by the AST file I/O. This is part of
  285646             :           work implemented by Andreas, and support tools such as the AST graph generation.
  285647             : 
  285648             :           \warning This function can return unexpected data members and thus the 
  285649             :                    order and the number of elements is unpredicable and subject 
  285650             :                    to change.
  285651             : 
  285652             :           \returns STL vector of pairs of SgNode* and strings
  285653             :        */
  285654             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  285655             : 
  285656             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  285657             : 
  285658             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  285659             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  285660             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  285661             : 
  285662             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  285663             :                    and subject to change.
  285664             :        */
  285665             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  285666             : 
  285667             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  285668             : 
  285669             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  285670             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  285671             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  285672             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  285673             : 
  285674             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  285675             : 
  285676             :           \returns long
  285677             :        */
  285678             :           virtual long getChildIndex( SgNode* childNode ) const override;
  285679             : 
  285680             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  285681             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  285682             :       /* \brief Constructor for use by AST File I/O Mechanism
  285683             : 
  285684             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  285685             :           which obtained via fast binary file I/O from disk.
  285686             :        */
  285687             :        // SgUpcMythread( SgUpcMythreadStorageClass& source );
  285688             : 
  285689             : 
  285690             : 
  285691             : 
  285692             : 
  285693             :  // JH (10/24/2005): methods added to support the ast file IO
  285694             :     private:
  285695             : 
  285696             :       /* name AST Memory Allocation Support Functions
  285697             :           \brief Memory allocations support....
  285698             : 
  285699             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  285700             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  285701             :           and support the AST File I/O Mechanism.
  285702             :        */
  285703             :       /* */
  285704             : 
  285705             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  285706             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  285707             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  285708             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  285709             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  285710             :           a correspinding one in the AST_FILE_IO class!
  285711             :        */
  285712             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  285713             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  285714             :       /* \brief Typedef used for low level memory access.
  285715             :        */
  285716             :        // typedef unsigned char* TestType;
  285717             : 
  285718             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  285719             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  285720             :       /* \brief Typedef used to hold memory addresses as values.
  285721             :        */
  285722             :        // typedef unsigned long  AddressType;
  285723             : 
  285724             : 
  285725             : 
  285726             :        // necessary, to have direct access to the p_freepointer and the private methods !
  285727             :       /*! \brief friend class declaration to support AST File I/O */
  285728             :           friend class AST_FILE_IO;
  285729             : 
  285730             :       /*! \brief friend class declaration to support AST File I/O */
  285731             :           friend class SgUpcMythreadStorageClass;
  285732             : 
  285733             :       /*! \brief friend class declaration to support AST File I/O */
  285734             :           friend class AstSpecificDataManagingClass;
  285735             : 
  285736             :       /*! \brief friend class declaration to support AST File I/O */
  285737             :           friend class AstSpecificDataManagingClassStorageClass;
  285738             :     public:
  285739             :       /*! \brief IR node constructor to support AST File I/O */
  285740             :           SgUpcMythread( const SgUpcMythreadStorageClass& source );
  285741             : 
  285742             :  // private: // JJW hack
  285743             :        /*
  285744             :           name AST Memory Allocation Support Variables
  285745             :           Memory allocations support variables 
  285746             : 
  285747             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  285748             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  285749             :           and support the AST File I/O Mechanism.
  285750             :        */
  285751             :       /* */
  285752             : 
  285753             :     public:
  285754             : 
  285755             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  285756             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  285757             :       // virtual SgNode* addRegExpAttribute();
  285758             :       /*! \brief Support for AST matching using regular expression.
  285759             : 
  285760             :           This support is incomplete and the subject of current research to define 
  285761             :           RegEx trees to support inexact matching.
  285762             :        */
  285763             :           SgUpcMythread* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  285764             : 
  285765             : // *** COMMON CODE SECTION ENDS HERE ***
  285766             : 
  285767             : 
  285768             : // End of memberFunctionString
  285769             : // Start of memberFunctionString
  285770             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  285771             : 
  285772             :      // the generated cast function
  285773             :      // friend ROSE_DLL_API SgUpcMythread* isSgUpcMythread ( SgNode* s );
  285774             : 
  285775             :           typedef SgValueExp base_node_type;
  285776             : 
  285777             : 
  285778             : // End of memberFunctionString
  285779             : // Start of memberFunctionString
  285780             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  285781             : 
  285782             :           SgType* get_type() const override;
  285783             : 
  285784             : 
  285785             : // End of memberFunctionString
  285786             : // Start of memberFunctionString
  285787             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  285788             : 
  285789             :           void post_construction_initialization() override;
  285790             : 
  285791             : 
  285792             : // End of memberFunctionString
  285793             : 
  285794             :      public: 
  285795             :          int get_value() const;
  285796             :          void set_value(int value);
  285797             : 
  285798             :      public: 
  285799             :          std::string get_valueString() const;
  285800             :          void set_valueString(std::string valueString);
  285801             : 
  285802             : 
  285803             :      public: 
  285804             :          virtual ~SgUpcMythread();
  285805             : 
  285806             : 
  285807             :      public: 
  285808             :          SgUpcMythread(Sg_File_Info* startOfConstruct , int value = 0, std::string valueString = ""); 
  285809             :          SgUpcMythread(int value, std::string valueString); 
  285810             : 
  285811             :     protected:
  285812             : // Start of memberFunctionString
  285813             : int p_value;
  285814             :           
  285815             : // End of memberFunctionString
  285816             : // Start of memberFunctionString
  285817             : std::string p_valueString;
  285818             :           
  285819             : // End of memberFunctionString
  285820             : 
  285821             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcMythread>;
  285822             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcMythread, int,&SgUpcMythread::p_value>;
  285823             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcMythread, std::string,&SgUpcMythread::p_valueString>;
  285824             : 
  285825             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285826             : 
  285827             : 
  285828             :    };
  285829             : #endif
  285830             : 
  285831             : // postdeclarations for SgUpcMythread
  285832             : 
  285833             : /* #line 285834 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285834             : 
  285835             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  285836             : 
  285837             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285838             : 
  285839             : 
  285840             : /* #line 285841 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285841             : 
  285842             : 
  285843             : 
  285844             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285845             : 
  285846             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  285847             : //      This code is automatically generated for each 
  285848             : //      terminal and non-terminal within the defined 
  285849             : //      grammar.  There is a simple way to change the 
  285850             : //      code to fix bugs etc.  See the ROSE README file
  285851             : //      for directions.
  285852             : 
  285853             : // tps: (02/22/2010): Adding DLL export requirements
  285854             : #include "rosedll.h"
  285855             : 
  285856             : // predeclarations for SgTemplateParameterVal
  285857             : 
  285858             : /* #line 285859 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285859             : 
  285860             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  285861             : 
  285862             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  285863             : 
  285864             : #if 1
  285865             : // Class Definition for SgTemplateParameterVal
  285866             : class ROSE_DLL_API SgTemplateParameterVal  : public SgValueExp
  285867             :    {
  285868             :      public:
  285869             : 
  285870             : 
  285871             : /* #line 285872 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  285872             : 
  285873             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  285874             : // Start of memberFunctionString
  285875             : /* #line 689 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  285876             : 
  285877             : 
  285878             :        // DQ (11/28/2011): Added to support template declarations in the AST.
  285879             :           SgName get_template_parameter_name() const;
  285880             : 
  285881             :           SgType* get_type() const override;
  285882             : 
  285883             : 
  285884             : 
  285885             : // End of memberFunctionString
  285886             : // Start of memberFunctionString
  285887             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  285888             : 
  285889             : // *** COMMON CODE SECTION BEGINS HERE ***
  285890             : 
  285891             :     public:
  285892             : 
  285893             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  285894             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  285895             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  285896             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  285897             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  285898             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  285899             : 
  285900             :       /*! \brief returns a string representing the class name */
  285901             :           virtual std::string class_name() const override;
  285902             : 
  285903             :       /*! \brief returns new style SageIII enum values */
  285904             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  285905             : 
  285906             :       /*! \brief static variant value */
  285907             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  285908             :        // static const VariantT static_variant = V_SgTemplateParameterVal;
  285909             :           enum { static_variant = V_SgTemplateParameterVal };
  285910             : 
  285911             :        /* the generated cast function */
  285912             :       /*! \brief Casts pointer from base class to derived class */
  285913             :           ROSE_DLL_API friend       SgTemplateParameterVal* isSgTemplateParameterVal(       SgNode * s );
  285914             : 
  285915             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  285916             :           ROSE_DLL_API friend const SgTemplateParameterVal* isSgTemplateParameterVal( const SgNode * s );
  285917             : 
  285918             :      // ******************************************
  285919             :      // * Memory Pool / New / Delete
  285920             :      // ******************************************
  285921             : 
  285922             :      public:
  285923             :           /// \private
  285924             :           static const unsigned pool_size; //
  285925             :           /// \private
  285926             :           static std::vector<unsigned char *> pools; //
  285927             :           /// \private
  285928             :           static SgTemplateParameterVal * next_node; // 
  285929             : 
  285930             :           /// \private
  285931             :           static unsigned long initializeStorageClassArray(SgTemplateParameterValStorageClass *); //
  285932             : 
  285933             :           /// \private
  285934             :           static void clearMemoryPool(); //
  285935             :           static void deleteMemoryPool(); //
  285936             : 
  285937             :           /// \private
  285938             :           static void extendMemoryPoolForFileIO(); //
  285939             : 
  285940             :           /// \private
  285941             :           static SgTemplateParameterVal * getPointerFromGlobalIndex(unsigned long); //
  285942             :           /// \private
  285943             :           static SgTemplateParameterVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  285944             : 
  285945             :           /// \private
  285946             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  285947             :           /// \private
  285948             :           static void resetValidFreepointers(); //
  285949             :           /// \private
  285950             :           static unsigned long getNumberOfLastValidPointer(); //
  285951             : 
  285952             : 
  285953             : #if defined(INLINE_FUNCTIONS)
  285954             :       /*! \brief returns pointer to newly allocated IR node */
  285955             :           inline void *operator new (size_t size);
  285956             : #else
  285957             :       /*! \brief returns pointer to newly allocated IR node */
  285958             :           void *operator new (size_t size);
  285959             : #endif
  285960             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  285961             :           void operator delete (void* pointer, size_t size);
  285962             : 
  285963             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  285964           0 :           void operator delete (void* pointer)
  285965             :              {
  285966             :             // This is the generated delete operator...
  285967           0 :                SgTemplateParameterVal::operator delete (pointer,sizeof(SgTemplateParameterVal));
  285968             :              }
  285969             : 
  285970             :       /*! \brief Returns the total number of IR nodes of this type */
  285971             :           static size_t numberOfNodes();
  285972             : 
  285973             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  285974             :           static size_t memoryUsage();
  285975             : 
  285976             :       // End of scope which started in IR nodes specific code 
  285977             :       /* */
  285978             : 
  285979             :       /* name Internal Functions
  285980             :           \brief Internal functions ... incomplete-documentation
  285981             : 
  285982             :           These functions have been made public as part of the design, but they are suggested for internal use 
  285983             :           or by particularly knowledgeable users for specialized tools or applications.
  285984             : 
  285985             :           \internal We could not make these private because they are required by user for special purposes. And 
  285986             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  285987             :          
  285988             :        */
  285989             : 
  285990             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  285991             :        // overridden in every class by *generated* implementation
  285992             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  285993             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  285994             :        // MS: 06/28/02 container of names of variables or container indices 
  285995             :        // used used in the traversal to access AST successor nodes
  285996             :        // overridden in every class by *generated* implementation
  285997             :       /*! \brief container of names of variables or container indices used used in the traversal
  285998             :           to access AST successor nodes overridden in every class by *generated* implementation */
  285999             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  286000             : 
  286001             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  286002             :        // than all the vector copies. The implementation for these functions is generated for each class.
  286003             :       /*! \brief return number of children in the traversal successor list */
  286004             :           virtual size_t get_numberOfTraversalSuccessors() override;
  286005             :       /*! \brief index-based access to traversal successors by index number */
  286006             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  286007             :       /*! \brief index-based access to traversal successors by child node */
  286008             :           virtual size_t get_childIndex(SgNode *child) override;
  286009             : 
  286010             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  286011             :        // MS: 08/16/2002 method for generating RTI information
  286012             :       /*! \brief return C++ Runtime-Time-Information */
  286013             :           virtual RTIReturnType roseRTI() override;
  286014             : #endif
  286015             :       /* */
  286016             : 
  286017             : 
  286018             : 
  286019             :       /* name Deprecated Functions
  286020             :           \brief Deprecated functions ... incomplete-documentation
  286021             : 
  286022             :           These functions have been deprecated from use.
  286023             :        */
  286024             :       /* */
  286025             : 
  286026             :       /*! returns a C style string (char*) representing the class name */
  286027             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  286028             : 
  286029             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  286030             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  286031             : #if 0
  286032             :       /*! returns old style Sage II enum values */
  286033             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  286034             :       /*! returns old style Sage II enum values */
  286035             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  286036             : #endif
  286037             :       /* */
  286038             : 
  286039             : 
  286040             : 
  286041             : 
  286042             :      public:
  286043             :       /* name Traversal Support Functions
  286044             :           \brief Traversal support functions ... incomplete-documentation
  286045             : 
  286046             :           These functions have been made public as part of the design, but they are suggested for internal use 
  286047             :           or by particularly knowledgable users for specialized tools or applications.
  286048             :        */
  286049             :       /* */
  286050             : 
  286051             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  286052             :        // (inferior to ROSE traversal mechanism, experimental).
  286053             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  286054             :        */
  286055             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  286056             : 
  286057             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  286058             :       /*! \brief support for the classic visitor pattern done in GoF */
  286059             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  286060             : 
  286061             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  286062             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  286063             :        */
  286064             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  286065             : 
  286066             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  286067             :        */
  286068             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  286069             : 
  286070             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  286071             :        // This traversal helps support internal tools that call static member functions.
  286072             :        // note: this function operates on the memory pools.
  286073             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  286074             :        */
  286075             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  286076             :       /* */
  286077             : 
  286078             : 
  286079             :      public:
  286080             :       /* name Memory Allocation Functions
  286081             :           \brief Memory allocations functions ... incomplete-documentation
  286082             : 
  286083             :           These functions have been made public as part of the design, but they are suggested for internal use 
  286084             :           or by particularly knowledgable users for specialized tools or applications.
  286085             :        */
  286086             :       /* */
  286087             : 
  286088             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  286089             : 
  286090             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  286091             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  286092             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  286093             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  286094             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  286095             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  286096             :           being used with the AST File I/O mechanism.
  286097             :        */
  286098             :           virtual bool isInMemoryPool() override;
  286099             : 
  286100             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  286101             : 
  286102             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  286103             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  286104             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  286105             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  286106             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  286107             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  286108             :           being used with the AST File I/O mechanism.
  286109             :        */
  286110             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  286111             : 
  286112             :       // DQ (4/30/2006): Modified to be a const function.
  286113             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  286114             : 
  286115             :           This functions is part of general support for many possible tools to operate 
  286116             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  286117             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  286118             :           less than the set of pointers used by the AST file I/O. This is part of
  286119             :           work implemented by Andreas, and support tools such as the AST graph generation.
  286120             : 
  286121             :           \warning This function can return unexpected data members and thus the 
  286122             :                    order and the number of elements is unpredicable and subject 
  286123             :                    to change.
  286124             : 
  286125             :           \returns STL vector of pairs of SgNode* and strings
  286126             :        */
  286127             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  286128             : 
  286129             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  286130             : 
  286131             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  286132             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  286133             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  286134             : 
  286135             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  286136             :                    and subject to change.
  286137             :        */
  286138             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  286139             : 
  286140             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  286141             : 
  286142             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  286143             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  286144             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  286145             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  286146             : 
  286147             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  286148             : 
  286149             :           \returns long
  286150             :        */
  286151             :           virtual long getChildIndex( SgNode* childNode ) const override;
  286152             : 
  286153             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  286154             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  286155             :       /* \brief Constructor for use by AST File I/O Mechanism
  286156             : 
  286157             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  286158             :           which obtained via fast binary file I/O from disk.
  286159             :        */
  286160             :        // SgTemplateParameterVal( SgTemplateParameterValStorageClass& source );
  286161             : 
  286162             : 
  286163             : 
  286164             : 
  286165             : 
  286166             :  // JH (10/24/2005): methods added to support the ast file IO
  286167             :     private:
  286168             : 
  286169             :       /* name AST Memory Allocation Support Functions
  286170             :           \brief Memory allocations support....
  286171             : 
  286172             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  286173             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  286174             :           and support the AST File I/O Mechanism.
  286175             :        */
  286176             :       /* */
  286177             : 
  286178             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  286179             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  286180             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  286181             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  286182             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  286183             :           a correspinding one in the AST_FILE_IO class!
  286184             :        */
  286185             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  286186             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  286187             :       /* \brief Typedef used for low level memory access.
  286188             :        */
  286189             :        // typedef unsigned char* TestType;
  286190             : 
  286191             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  286192             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  286193             :       /* \brief Typedef used to hold memory addresses as values.
  286194             :        */
  286195             :        // typedef unsigned long  AddressType;
  286196             : 
  286197             : 
  286198             : 
  286199             :        // necessary, to have direct access to the p_freepointer and the private methods !
  286200             :       /*! \brief friend class declaration to support AST File I/O */
  286201             :           friend class AST_FILE_IO;
  286202             : 
  286203             :       /*! \brief friend class declaration to support AST File I/O */
  286204             :           friend class SgTemplateParameterValStorageClass;
  286205             : 
  286206             :       /*! \brief friend class declaration to support AST File I/O */
  286207             :           friend class AstSpecificDataManagingClass;
  286208             : 
  286209             :       /*! \brief friend class declaration to support AST File I/O */
  286210             :           friend class AstSpecificDataManagingClassStorageClass;
  286211             :     public:
  286212             :       /*! \brief IR node constructor to support AST File I/O */
  286213             :           SgTemplateParameterVal( const SgTemplateParameterValStorageClass& source );
  286214             : 
  286215             :  // private: // JJW hack
  286216             :        /*
  286217             :           name AST Memory Allocation Support Variables
  286218             :           Memory allocations support variables 
  286219             : 
  286220             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  286221             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  286222             :           and support the AST File I/O Mechanism.
  286223             :        */
  286224             :       /* */
  286225             : 
  286226             :     public:
  286227             : 
  286228             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  286229             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  286230             :       // virtual SgNode* addRegExpAttribute();
  286231             :       /*! \brief Support for AST matching using regular expression.
  286232             : 
  286233             :           This support is incomplete and the subject of current research to define 
  286234             :           RegEx trees to support inexact matching.
  286235             :        */
  286236             :           SgTemplateParameterVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  286237             : 
  286238             : // *** COMMON CODE SECTION ENDS HERE ***
  286239             : 
  286240             : 
  286241             : // End of memberFunctionString
  286242             : // Start of memberFunctionString
  286243             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  286244             : 
  286245             :      // the generated cast function
  286246             :      // friend ROSE_DLL_API SgTemplateParameterVal* isSgTemplateParameterVal ( SgNode* s );
  286247             : 
  286248             :           typedef SgValueExp base_node_type;
  286249             : 
  286250             : 
  286251             : // End of memberFunctionString
  286252             : // Start of memberFunctionString
  286253             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  286254             : 
  286255             :           void post_construction_initialization() override;
  286256             : 
  286257             : 
  286258             : // End of memberFunctionString
  286259             : 
  286260             :      public: 
  286261             :          int get_template_parameter_position() const;
  286262             :          void set_template_parameter_position(int template_parameter_position);
  286263             : 
  286264             :      public: 
  286265             :          std::string get_valueString() const;
  286266             :          void set_valueString(std::string valueString);
  286267             : 
  286268             :      public: 
  286269             :          SgType* get_valueType() const;
  286270             :          void set_valueType(SgType* valueType);
  286271             : 
  286272             : 
  286273             :      public: 
  286274             :          virtual ~SgTemplateParameterVal();
  286275             : 
  286276             : 
  286277             :      public: 
  286278             :          SgTemplateParameterVal(Sg_File_Info* startOfConstruct , int template_parameter_position = -1, std::string valueString = ""); 
  286279             :          SgTemplateParameterVal(int template_parameter_position, std::string valueString); 
  286280             : 
  286281             :     protected:
  286282             : // Start of memberFunctionString
  286283             : int p_template_parameter_position;
  286284             :           
  286285             : // End of memberFunctionString
  286286             : // Start of memberFunctionString
  286287             : std::string p_valueString;
  286288             :           
  286289             : // End of memberFunctionString
  286290             : // Start of memberFunctionString
  286291             : SgType* p_valueType;
  286292             :           
  286293             : // End of memberFunctionString
  286294             : 
  286295             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateParameterVal>;
  286296             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameterVal, int,&SgTemplateParameterVal::p_template_parameter_position>;
  286297             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameterVal, std::string,&SgTemplateParameterVal::p_valueString>;
  286298             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateParameterVal, SgType*,&SgTemplateParameterVal::p_valueType>;
  286299             : 
  286300             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286301             : 
  286302             : 
  286303             :    };
  286304             : #endif
  286305             : 
  286306             : // postdeclarations for SgTemplateParameterVal
  286307             : 
  286308             : /* #line 286309 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286309             : 
  286310             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  286311             : 
  286312             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286313             : 
  286314             : 
  286315             : /* #line 286316 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286316             : 
  286317             : 
  286318             : 
  286319             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286320             : 
  286321             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  286322             : //      This code is automatically generated for each 
  286323             : //      terminal and non-terminal within the defined 
  286324             : //      grammar.  There is a simple way to change the 
  286325             : //      code to fix bugs etc.  See the ROSE README file
  286326             : //      for directions.
  286327             : 
  286328             : // tps: (02/22/2010): Adding DLL export requirements
  286329             : #include "rosedll.h"
  286330             : 
  286331             : // predeclarations for SgNullptrValExp
  286332             : 
  286333             : /* #line 286334 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286334             : 
  286335             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  286336             : 
  286337             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286338             : 
  286339             : #if 1
  286340             : // Class Definition for SgNullptrValExp
  286341             : class ROSE_DLL_API SgNullptrValExp  : public SgValueExp
  286342             :    {
  286343             :      public:
  286344             : 
  286345             : 
  286346             : /* #line 286347 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286347             : 
  286348             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  286349             : // Start of memberFunctionString
  286350             : /* #line 557 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  286351             : 
  286352             : 
  286353             : 
  286354             : // End of memberFunctionString
  286355             : // Start of memberFunctionString
  286356             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  286357             : 
  286358             : // *** COMMON CODE SECTION BEGINS HERE ***
  286359             : 
  286360             :     public:
  286361             : 
  286362             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  286363             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  286364             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  286365             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  286366             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  286367             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  286368             : 
  286369             :       /*! \brief returns a string representing the class name */
  286370             :           virtual std::string class_name() const override;
  286371             : 
  286372             :       /*! \brief returns new style SageIII enum values */
  286373             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  286374             : 
  286375             :       /*! \brief static variant value */
  286376             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  286377             :        // static const VariantT static_variant = V_SgNullptrValExp;
  286378             :           enum { static_variant = V_SgNullptrValExp };
  286379             : 
  286380             :        /* the generated cast function */
  286381             :       /*! \brief Casts pointer from base class to derived class */
  286382             :           ROSE_DLL_API friend       SgNullptrValExp* isSgNullptrValExp(       SgNode * s );
  286383             : 
  286384             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  286385             :           ROSE_DLL_API friend const SgNullptrValExp* isSgNullptrValExp( const SgNode * s );
  286386             : 
  286387             :      // ******************************************
  286388             :      // * Memory Pool / New / Delete
  286389             :      // ******************************************
  286390             : 
  286391             :      public:
  286392             :           /// \private
  286393             :           static const unsigned pool_size; //
  286394             :           /// \private
  286395             :           static std::vector<unsigned char *> pools; //
  286396             :           /// \private
  286397             :           static SgNullptrValExp * next_node; // 
  286398             : 
  286399             :           /// \private
  286400             :           static unsigned long initializeStorageClassArray(SgNullptrValExpStorageClass *); //
  286401             : 
  286402             :           /// \private
  286403             :           static void clearMemoryPool(); //
  286404             :           static void deleteMemoryPool(); //
  286405             : 
  286406             :           /// \private
  286407             :           static void extendMemoryPoolForFileIO(); //
  286408             : 
  286409             :           /// \private
  286410             :           static SgNullptrValExp * getPointerFromGlobalIndex(unsigned long); //
  286411             :           /// \private
  286412             :           static SgNullptrValExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  286413             : 
  286414             :           /// \private
  286415             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  286416             :           /// \private
  286417             :           static void resetValidFreepointers(); //
  286418             :           /// \private
  286419             :           static unsigned long getNumberOfLastValidPointer(); //
  286420             : 
  286421             : 
  286422             : #if defined(INLINE_FUNCTIONS)
  286423             :       /*! \brief returns pointer to newly allocated IR node */
  286424             :           inline void *operator new (size_t size);
  286425             : #else
  286426             :       /*! \brief returns pointer to newly allocated IR node */
  286427             :           void *operator new (size_t size);
  286428             : #endif
  286429             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  286430             :           void operator delete (void* pointer, size_t size);
  286431             : 
  286432             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  286433          12 :           void operator delete (void* pointer)
  286434             :              {
  286435             :             // This is the generated delete operator...
  286436          12 :                SgNullptrValExp::operator delete (pointer,sizeof(SgNullptrValExp));
  286437             :              }
  286438             : 
  286439             :       /*! \brief Returns the total number of IR nodes of this type */
  286440             :           static size_t numberOfNodes();
  286441             : 
  286442             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  286443             :           static size_t memoryUsage();
  286444             : 
  286445             :       // End of scope which started in IR nodes specific code 
  286446             :       /* */
  286447             : 
  286448             :       /* name Internal Functions
  286449             :           \brief Internal functions ... incomplete-documentation
  286450             : 
  286451             :           These functions have been made public as part of the design, but they are suggested for internal use 
  286452             :           or by particularly knowledgeable users for specialized tools or applications.
  286453             : 
  286454             :           \internal We could not make these private because they are required by user for special purposes. And 
  286455             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  286456             :          
  286457             :        */
  286458             : 
  286459             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  286460             :        // overridden in every class by *generated* implementation
  286461             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  286462             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  286463             :        // MS: 06/28/02 container of names of variables or container indices 
  286464             :        // used used in the traversal to access AST successor nodes
  286465             :        // overridden in every class by *generated* implementation
  286466             :       /*! \brief container of names of variables or container indices used used in the traversal
  286467             :           to access AST successor nodes overridden in every class by *generated* implementation */
  286468             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  286469             : 
  286470             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  286471             :        // than all the vector copies. The implementation for these functions is generated for each class.
  286472             :       /*! \brief return number of children in the traversal successor list */
  286473             :           virtual size_t get_numberOfTraversalSuccessors() override;
  286474             :       /*! \brief index-based access to traversal successors by index number */
  286475             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  286476             :       /*! \brief index-based access to traversal successors by child node */
  286477             :           virtual size_t get_childIndex(SgNode *child) override;
  286478             : 
  286479             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  286480             :        // MS: 08/16/2002 method for generating RTI information
  286481             :       /*! \brief return C++ Runtime-Time-Information */
  286482             :           virtual RTIReturnType roseRTI() override;
  286483             : #endif
  286484             :       /* */
  286485             : 
  286486             : 
  286487             : 
  286488             :       /* name Deprecated Functions
  286489             :           \brief Deprecated functions ... incomplete-documentation
  286490             : 
  286491             :           These functions have been deprecated from use.
  286492             :        */
  286493             :       /* */
  286494             : 
  286495             :       /*! returns a C style string (char*) representing the class name */
  286496             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  286497             : 
  286498             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  286499             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  286500             : #if 0
  286501             :       /*! returns old style Sage II enum values */
  286502             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  286503             :       /*! returns old style Sage II enum values */
  286504             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  286505             : #endif
  286506             :       /* */
  286507             : 
  286508             : 
  286509             : 
  286510             : 
  286511             :      public:
  286512             :       /* name Traversal Support Functions
  286513             :           \brief Traversal support functions ... incomplete-documentation
  286514             : 
  286515             :           These functions have been made public as part of the design, but they are suggested for internal use 
  286516             :           or by particularly knowledgable users for specialized tools or applications.
  286517             :        */
  286518             :       /* */
  286519             : 
  286520             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  286521             :        // (inferior to ROSE traversal mechanism, experimental).
  286522             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  286523             :        */
  286524             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  286525             : 
  286526             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  286527             :       /*! \brief support for the classic visitor pattern done in GoF */
  286528             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  286529             : 
  286530             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  286531             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  286532             :        */
  286533             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  286534             : 
  286535             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  286536             :        */
  286537             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  286538             : 
  286539             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  286540             :        // This traversal helps support internal tools that call static member functions.
  286541             :        // note: this function operates on the memory pools.
  286542             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  286543             :        */
  286544             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  286545             :       /* */
  286546             : 
  286547             : 
  286548             :      public:
  286549             :       /* name Memory Allocation Functions
  286550             :           \brief Memory allocations functions ... incomplete-documentation
  286551             : 
  286552             :           These functions have been made public as part of the design, but they are suggested for internal use 
  286553             :           or by particularly knowledgable users for specialized tools or applications.
  286554             :        */
  286555             :       /* */
  286556             : 
  286557             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  286558             : 
  286559             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  286560             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  286561             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  286562             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  286563             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  286564             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  286565             :           being used with the AST File I/O mechanism.
  286566             :        */
  286567             :           virtual bool isInMemoryPool() override;
  286568             : 
  286569             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  286570             : 
  286571             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  286572             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  286573             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  286574             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  286575             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  286576             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  286577             :           being used with the AST File I/O mechanism.
  286578             :        */
  286579             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  286580             : 
  286581             :       // DQ (4/30/2006): Modified to be a const function.
  286582             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  286583             : 
  286584             :           This functions is part of general support for many possible tools to operate 
  286585             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  286586             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  286587             :           less than the set of pointers used by the AST file I/O. This is part of
  286588             :           work implemented by Andreas, and support tools such as the AST graph generation.
  286589             : 
  286590             :           \warning This function can return unexpected data members and thus the 
  286591             :                    order and the number of elements is unpredicable and subject 
  286592             :                    to change.
  286593             : 
  286594             :           \returns STL vector of pairs of SgNode* and strings
  286595             :        */
  286596             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  286597             : 
  286598             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  286599             : 
  286600             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  286601             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  286602             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  286603             : 
  286604             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  286605             :                    and subject to change.
  286606             :        */
  286607             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  286608             : 
  286609             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  286610             : 
  286611             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  286612             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  286613             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  286614             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  286615             : 
  286616             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  286617             : 
  286618             :           \returns long
  286619             :        */
  286620             :           virtual long getChildIndex( SgNode* childNode ) const override;
  286621             : 
  286622             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  286623             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  286624             :       /* \brief Constructor for use by AST File I/O Mechanism
  286625             : 
  286626             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  286627             :           which obtained via fast binary file I/O from disk.
  286628             :        */
  286629             :        // SgNullptrValExp( SgNullptrValExpStorageClass& source );
  286630             : 
  286631             : 
  286632             : 
  286633             : 
  286634             : 
  286635             :  // JH (10/24/2005): methods added to support the ast file IO
  286636             :     private:
  286637             : 
  286638             :       /* name AST Memory Allocation Support Functions
  286639             :           \brief Memory allocations support....
  286640             : 
  286641             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  286642             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  286643             :           and support the AST File I/O Mechanism.
  286644             :        */
  286645             :       /* */
  286646             : 
  286647             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  286648             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  286649             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  286650             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  286651             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  286652             :           a correspinding one in the AST_FILE_IO class!
  286653             :        */
  286654             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  286655             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  286656             :       /* \brief Typedef used for low level memory access.
  286657             :        */
  286658             :        // typedef unsigned char* TestType;
  286659             : 
  286660             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  286661             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  286662             :       /* \brief Typedef used to hold memory addresses as values.
  286663             :        */
  286664             :        // typedef unsigned long  AddressType;
  286665             : 
  286666             : 
  286667             : 
  286668             :        // necessary, to have direct access to the p_freepointer and the private methods !
  286669             :       /*! \brief friend class declaration to support AST File I/O */
  286670             :           friend class AST_FILE_IO;
  286671             : 
  286672             :       /*! \brief friend class declaration to support AST File I/O */
  286673             :           friend class SgNullptrValExpStorageClass;
  286674             : 
  286675             :       /*! \brief friend class declaration to support AST File I/O */
  286676             :           friend class AstSpecificDataManagingClass;
  286677             : 
  286678             :       /*! \brief friend class declaration to support AST File I/O */
  286679             :           friend class AstSpecificDataManagingClassStorageClass;
  286680             :     public:
  286681             :       /*! \brief IR node constructor to support AST File I/O */
  286682             :           SgNullptrValExp( const SgNullptrValExpStorageClass& source );
  286683             : 
  286684             :  // private: // JJW hack
  286685             :        /*
  286686             :           name AST Memory Allocation Support Variables
  286687             :           Memory allocations support variables 
  286688             : 
  286689             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  286690             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  286691             :           and support the AST File I/O Mechanism.
  286692             :        */
  286693             :       /* */
  286694             : 
  286695             :     public:
  286696             : 
  286697             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  286698             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  286699             :       // virtual SgNode* addRegExpAttribute();
  286700             :       /*! \brief Support for AST matching using regular expression.
  286701             : 
  286702             :           This support is incomplete and the subject of current research to define 
  286703             :           RegEx trees to support inexact matching.
  286704             :        */
  286705             :           SgNullptrValExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  286706             : 
  286707             : // *** COMMON CODE SECTION ENDS HERE ***
  286708             : 
  286709             : 
  286710             : // End of memberFunctionString
  286711             : // Start of memberFunctionString
  286712             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  286713             : 
  286714             :      // the generated cast function
  286715             :      // friend ROSE_DLL_API SgNullptrValExp* isSgNullptrValExp ( SgNode* s );
  286716             : 
  286717             :           typedef SgValueExp base_node_type;
  286718             : 
  286719             : 
  286720             : // End of memberFunctionString
  286721             : // Start of memberFunctionString
  286722             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  286723             : 
  286724             :           SgType* get_type() const override;
  286725             : 
  286726             : 
  286727             : // End of memberFunctionString
  286728             : // Start of memberFunctionString
  286729             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  286730             : 
  286731             :           void post_construction_initialization() override;
  286732             : 
  286733             : 
  286734             : // End of memberFunctionString
  286735             : 
  286736             : 
  286737             :      public: 
  286738             :          virtual ~SgNullptrValExp();
  286739             : 
  286740             : 
  286741             :      public: 
  286742             :          SgNullptrValExp(Sg_File_Info* startOfConstruct ); 
  286743             :          SgNullptrValExp(); 
  286744             : 
  286745             :     protected:
  286746             : 
  286747             :     friend struct Rose::Traits::generated::describe_node_t<SgNullptrValExp>;
  286748             : 
  286749             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286750             : 
  286751             : 
  286752             :    };
  286753             : #endif
  286754             : 
  286755             : // postdeclarations for SgNullptrValExp
  286756             : 
  286757             : /* #line 286758 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286758             : 
  286759             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  286760             : 
  286761             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286762             : 
  286763             : 
  286764             : /* #line 286765 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286765             : 
  286766             : 
  286767             : 
  286768             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286769             : 
  286770             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  286771             : //      This code is automatically generated for each 
  286772             : //      terminal and non-terminal within the defined 
  286773             : //      grammar.  There is a simple way to change the 
  286774             : //      code to fix bugs etc.  See the ROSE README file
  286775             : //      for directions.
  286776             : 
  286777             : // tps: (02/22/2010): Adding DLL export requirements
  286778             : #include "rosedll.h"
  286779             : 
  286780             : // predeclarations for SgChar16Val
  286781             : 
  286782             : /* #line 286783 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286783             : 
  286784             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  286785             : 
  286786             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  286787             : 
  286788             : #if 1
  286789             : // Class Definition for SgChar16Val
  286790             : class ROSE_DLL_API SgChar16Val  : public SgValueExp
  286791             :    {
  286792             :      public:
  286793             : 
  286794             : 
  286795             : /* #line 286796 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  286796             : 
  286797             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  286798             : // Start of memberFunctionString
  286799             : /* #line 603 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  286800             : 
  286801             :        // DQ (2/16/2018): ROSE needs to be able to be compiled on non C++11 systems where char_32_t is not defiled.
  286802             :        // char16_t get_value() const;
  286803             :        // void set_value(char16_t new_val);
  286804             :           unsigned short get_value() const;
  286805             :           void set_value(unsigned short new_val);
  286806             : 
  286807             : 
  286808             : 
  286809             : // End of memberFunctionString
  286810             : // Start of memberFunctionString
  286811             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  286812             : 
  286813             : // *** COMMON CODE SECTION BEGINS HERE ***
  286814             : 
  286815             :     public:
  286816             : 
  286817             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  286818             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  286819             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  286820             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  286821             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  286822             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  286823             : 
  286824             :       /*! \brief returns a string representing the class name */
  286825             :           virtual std::string class_name() const override;
  286826             : 
  286827             :       /*! \brief returns new style SageIII enum values */
  286828             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  286829             : 
  286830             :       /*! \brief static variant value */
  286831             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  286832             :        // static const VariantT static_variant = V_SgChar16Val;
  286833             :           enum { static_variant = V_SgChar16Val };
  286834             : 
  286835             :        /* the generated cast function */
  286836             :       /*! \brief Casts pointer from base class to derived class */
  286837             :           ROSE_DLL_API friend       SgChar16Val* isSgChar16Val(       SgNode * s );
  286838             : 
  286839             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  286840             :           ROSE_DLL_API friend const SgChar16Val* isSgChar16Val( const SgNode * s );
  286841             : 
  286842             :      // ******************************************
  286843             :      // * Memory Pool / New / Delete
  286844             :      // ******************************************
  286845             : 
  286846             :      public:
  286847             :           /// \private
  286848             :           static const unsigned pool_size; //
  286849             :           /// \private
  286850             :           static std::vector<unsigned char *> pools; //
  286851             :           /// \private
  286852             :           static SgChar16Val * next_node; // 
  286853             : 
  286854             :           /// \private
  286855             :           static unsigned long initializeStorageClassArray(SgChar16ValStorageClass *); //
  286856             : 
  286857             :           /// \private
  286858             :           static void clearMemoryPool(); //
  286859             :           static void deleteMemoryPool(); //
  286860             : 
  286861             :           /// \private
  286862             :           static void extendMemoryPoolForFileIO(); //
  286863             : 
  286864             :           /// \private
  286865             :           static SgChar16Val * getPointerFromGlobalIndex(unsigned long); //
  286866             :           /// \private
  286867             :           static SgChar16Val * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  286868             : 
  286869             :           /// \private
  286870             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  286871             :           /// \private
  286872             :           static void resetValidFreepointers(); //
  286873             :           /// \private
  286874             :           static unsigned long getNumberOfLastValidPointer(); //
  286875             : 
  286876             : 
  286877             : #if defined(INLINE_FUNCTIONS)
  286878             :       /*! \brief returns pointer to newly allocated IR node */
  286879             :           inline void *operator new (size_t size);
  286880             : #else
  286881             :       /*! \brief returns pointer to newly allocated IR node */
  286882             :           void *operator new (size_t size);
  286883             : #endif
  286884             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  286885             :           void operator delete (void* pointer, size_t size);
  286886             : 
  286887             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  286888           0 :           void operator delete (void* pointer)
  286889             :              {
  286890             :             // This is the generated delete operator...
  286891           0 :                SgChar16Val::operator delete (pointer,sizeof(SgChar16Val));
  286892             :              }
  286893             : 
  286894             :       /*! \brief Returns the total number of IR nodes of this type */
  286895             :           static size_t numberOfNodes();
  286896             : 
  286897             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  286898             :           static size_t memoryUsage();
  286899             : 
  286900             :       // End of scope which started in IR nodes specific code 
  286901             :       /* */
  286902             : 
  286903             :       /* name Internal Functions
  286904             :           \brief Internal functions ... incomplete-documentation
  286905             : 
  286906             :           These functions have been made public as part of the design, but they are suggested for internal use 
  286907             :           or by particularly knowledgeable users for specialized tools or applications.
  286908             : 
  286909             :           \internal We could not make these private because they are required by user for special purposes. And 
  286910             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  286911             :          
  286912             :        */
  286913             : 
  286914             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  286915             :        // overridden in every class by *generated* implementation
  286916             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  286917             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  286918             :        // MS: 06/28/02 container of names of variables or container indices 
  286919             :        // used used in the traversal to access AST successor nodes
  286920             :        // overridden in every class by *generated* implementation
  286921             :       /*! \brief container of names of variables or container indices used used in the traversal
  286922             :           to access AST successor nodes overridden in every class by *generated* implementation */
  286923             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  286924             : 
  286925             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  286926             :        // than all the vector copies. The implementation for these functions is generated for each class.
  286927             :       /*! \brief return number of children in the traversal successor list */
  286928             :           virtual size_t get_numberOfTraversalSuccessors() override;
  286929             :       /*! \brief index-based access to traversal successors by index number */
  286930             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  286931             :       /*! \brief index-based access to traversal successors by child node */
  286932             :           virtual size_t get_childIndex(SgNode *child) override;
  286933             : 
  286934             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  286935             :        // MS: 08/16/2002 method for generating RTI information
  286936             :       /*! \brief return C++ Runtime-Time-Information */
  286937             :           virtual RTIReturnType roseRTI() override;
  286938             : #endif
  286939             :       /* */
  286940             : 
  286941             : 
  286942             : 
  286943             :       /* name Deprecated Functions
  286944             :           \brief Deprecated functions ... incomplete-documentation
  286945             : 
  286946             :           These functions have been deprecated from use.
  286947             :        */
  286948             :       /* */
  286949             : 
  286950             :       /*! returns a C style string (char*) representing the class name */
  286951             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  286952             : 
  286953             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  286954             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  286955             : #if 0
  286956             :       /*! returns old style Sage II enum values */
  286957             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  286958             :       /*! returns old style Sage II enum values */
  286959             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  286960             : #endif
  286961             :       /* */
  286962             : 
  286963             : 
  286964             : 
  286965             : 
  286966             :      public:
  286967             :       /* name Traversal Support Functions
  286968             :           \brief Traversal support functions ... incomplete-documentation
  286969             : 
  286970             :           These functions have been made public as part of the design, but they are suggested for internal use 
  286971             :           or by particularly knowledgable users for specialized tools or applications.
  286972             :        */
  286973             :       /* */
  286974             : 
  286975             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  286976             :        // (inferior to ROSE traversal mechanism, experimental).
  286977             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  286978             :        */
  286979             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  286980             : 
  286981             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  286982             :       /*! \brief support for the classic visitor pattern done in GoF */
  286983             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  286984             : 
  286985             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  286986             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  286987             :        */
  286988             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  286989             : 
  286990             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  286991             :        */
  286992             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  286993             : 
  286994             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  286995             :        // This traversal helps support internal tools that call static member functions.
  286996             :        // note: this function operates on the memory pools.
  286997             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  286998             :        */
  286999             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  287000             :       /* */
  287001             : 
  287002             : 
  287003             :      public:
  287004             :       /* name Memory Allocation Functions
  287005             :           \brief Memory allocations functions ... incomplete-documentation
  287006             : 
  287007             :           These functions have been made public as part of the design, but they are suggested for internal use 
  287008             :           or by particularly knowledgable users for specialized tools or applications.
  287009             :        */
  287010             :       /* */
  287011             : 
  287012             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  287013             : 
  287014             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  287015             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  287016             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  287017             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  287018             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  287019             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  287020             :           being used with the AST File I/O mechanism.
  287021             :        */
  287022             :           virtual bool isInMemoryPool() override;
  287023             : 
  287024             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  287025             : 
  287026             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  287027             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  287028             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  287029             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  287030             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  287031             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  287032             :           being used with the AST File I/O mechanism.
  287033             :        */
  287034             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  287035             : 
  287036             :       // DQ (4/30/2006): Modified to be a const function.
  287037             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  287038             : 
  287039             :           This functions is part of general support for many possible tools to operate 
  287040             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  287041             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  287042             :           less than the set of pointers used by the AST file I/O. This is part of
  287043             :           work implemented by Andreas, and support tools such as the AST graph generation.
  287044             : 
  287045             :           \warning This function can return unexpected data members and thus the 
  287046             :                    order and the number of elements is unpredicable and subject 
  287047             :                    to change.
  287048             : 
  287049             :           \returns STL vector of pairs of SgNode* and strings
  287050             :        */
  287051             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  287052             : 
  287053             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  287054             : 
  287055             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  287056             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  287057             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  287058             : 
  287059             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  287060             :                    and subject to change.
  287061             :        */
  287062             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  287063             : 
  287064             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  287065             : 
  287066             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  287067             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  287068             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  287069             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  287070             : 
  287071             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  287072             : 
  287073             :           \returns long
  287074             :        */
  287075             :           virtual long getChildIndex( SgNode* childNode ) const override;
  287076             : 
  287077             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  287078             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  287079             :       /* \brief Constructor for use by AST File I/O Mechanism
  287080             : 
  287081             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  287082             :           which obtained via fast binary file I/O from disk.
  287083             :        */
  287084             :        // SgChar16Val( SgChar16ValStorageClass& source );
  287085             : 
  287086             : 
  287087             : 
  287088             : 
  287089             : 
  287090             :  // JH (10/24/2005): methods added to support the ast file IO
  287091             :     private:
  287092             : 
  287093             :       /* name AST Memory Allocation Support Functions
  287094             :           \brief Memory allocations support....
  287095             : 
  287096             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  287097             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  287098             :           and support the AST File I/O Mechanism.
  287099             :        */
  287100             :       /* */
  287101             : 
  287102             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  287103             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  287104             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  287105             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  287106             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  287107             :           a correspinding one in the AST_FILE_IO class!
  287108             :        */
  287109             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  287110             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  287111             :       /* \brief Typedef used for low level memory access.
  287112             :        */
  287113             :        // typedef unsigned char* TestType;
  287114             : 
  287115             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  287116             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  287117             :       /* \brief Typedef used to hold memory addresses as values.
  287118             :        */
  287119             :        // typedef unsigned long  AddressType;
  287120             : 
  287121             : 
  287122             : 
  287123             :        // necessary, to have direct access to the p_freepointer and the private methods !
  287124             :       /*! \brief friend class declaration to support AST File I/O */
  287125             :           friend class AST_FILE_IO;
  287126             : 
  287127             :       /*! \brief friend class declaration to support AST File I/O */
  287128             :           friend class SgChar16ValStorageClass;
  287129             : 
  287130             :       /*! \brief friend class declaration to support AST File I/O */
  287131             :           friend class AstSpecificDataManagingClass;
  287132             : 
  287133             :       /*! \brief friend class declaration to support AST File I/O */
  287134             :           friend class AstSpecificDataManagingClassStorageClass;
  287135             :     public:
  287136             :       /*! \brief IR node constructor to support AST File I/O */
  287137             :           SgChar16Val( const SgChar16ValStorageClass& source );
  287138             : 
  287139             :  // private: // JJW hack
  287140             :        /*
  287141             :           name AST Memory Allocation Support Variables
  287142             :           Memory allocations support variables 
  287143             : 
  287144             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  287145             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  287146             :           and support the AST File I/O Mechanism.
  287147             :        */
  287148             :       /* */
  287149             : 
  287150             :     public:
  287151             : 
  287152             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  287153             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  287154             :       // virtual SgNode* addRegExpAttribute();
  287155             :       /*! \brief Support for AST matching using regular expression.
  287156             : 
  287157             :           This support is incomplete and the subject of current research to define 
  287158             :           RegEx trees to support inexact matching.
  287159             :        */
  287160             :           SgChar16Val* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  287161             : 
  287162             : // *** COMMON CODE SECTION ENDS HERE ***
  287163             : 
  287164             : 
  287165             : // End of memberFunctionString
  287166             : // Start of memberFunctionString
  287167             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  287168             : 
  287169             :      // the generated cast function
  287170             :      // friend ROSE_DLL_API SgChar16Val* isSgChar16Val ( SgNode* s );
  287171             : 
  287172             :           typedef SgValueExp base_node_type;
  287173             : 
  287174             : 
  287175             : // End of memberFunctionString
  287176             : // Start of memberFunctionString
  287177             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  287178             : 
  287179             :           SgType* get_type() const override;
  287180             : 
  287181             : 
  287182             : // End of memberFunctionString
  287183             : // Start of memberFunctionString
  287184             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  287185             : 
  287186             :           void post_construction_initialization() override;
  287187             : 
  287188             : 
  287189             : // End of memberFunctionString
  287190             : 
  287191             :      public: 
  287192             :          unsigned short get_valueUL() const;
  287193             :          void set_valueUL(unsigned short valueUL);
  287194             : 
  287195             :      public: 
  287196             :          std::string get_valueString() const;
  287197             :          void set_valueString(std::string valueString);
  287198             : 
  287199             : 
  287200             :      public: 
  287201             :          virtual ~SgChar16Val();
  287202             : 
  287203             : 
  287204             :      public: 
  287205             :          SgChar16Val(Sg_File_Info* startOfConstruct , unsigned short valueUL = 0, std::string valueString = ""); 
  287206             :          SgChar16Val(unsigned short valueUL, std::string valueString); 
  287207             : 
  287208             :     protected:
  287209             : // Start of memberFunctionString
  287210             : unsigned short p_valueUL;
  287211             :           
  287212             : // End of memberFunctionString
  287213             : // Start of memberFunctionString
  287214             : std::string p_valueString;
  287215             :           
  287216             : // End of memberFunctionString
  287217             : 
  287218             :     friend struct Rose::Traits::generated::describe_node_t<SgChar16Val>;
  287219             :     friend struct Rose::Traits::generated::describe_field_t<SgChar16Val, unsigned short,&SgChar16Val::p_valueUL>;
  287220             :     friend struct Rose::Traits::generated::describe_field_t<SgChar16Val, std::string,&SgChar16Val::p_valueString>;
  287221             : 
  287222             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287223             : 
  287224             : 
  287225             :    };
  287226             : #endif
  287227             : 
  287228             : // postdeclarations for SgChar16Val
  287229             : 
  287230             : /* #line 287231 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287231             : 
  287232             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  287233             : 
  287234             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287235             : 
  287236             : 
  287237             : /* #line 287238 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287238             : 
  287239             : 
  287240             : 
  287241             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287242             : 
  287243             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  287244             : //      This code is automatically generated for each 
  287245             : //      terminal and non-terminal within the defined 
  287246             : //      grammar.  There is a simple way to change the 
  287247             : //      code to fix bugs etc.  See the ROSE README file
  287248             : //      for directions.
  287249             : 
  287250             : // tps: (02/22/2010): Adding DLL export requirements
  287251             : #include "rosedll.h"
  287252             : 
  287253             : // predeclarations for SgChar32Val
  287254             : 
  287255             : /* #line 287256 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287256             : 
  287257             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  287258             : 
  287259             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287260             : 
  287261             : #if 1
  287262             : // Class Definition for SgChar32Val
  287263             : class ROSE_DLL_API SgChar32Val  : public SgValueExp
  287264             :    {
  287265             :      public:
  287266             : 
  287267             : 
  287268             : /* #line 287269 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287269             : 
  287270             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  287271             : // Start of memberFunctionString
  287272             : /* #line 613 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  287273             : 
  287274             :        // DQ (2/16/2018): ROSE needs to be able to be compiled on non C++11 systems where char_32_t is not defiled.
  287275             :        // char32_t get_value() const;
  287276             :        // void set_value(char32_t new_val);
  287277             :           unsigned int get_value() const;
  287278             :           void set_value(unsigned int new_val);
  287279             : 
  287280             : 
  287281             : 
  287282             : // End of memberFunctionString
  287283             : // Start of memberFunctionString
  287284             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  287285             : 
  287286             : // *** COMMON CODE SECTION BEGINS HERE ***
  287287             : 
  287288             :     public:
  287289             : 
  287290             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  287291             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  287292             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  287293             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  287294             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  287295             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  287296             : 
  287297             :       /*! \brief returns a string representing the class name */
  287298             :           virtual std::string class_name() const override;
  287299             : 
  287300             :       /*! \brief returns new style SageIII enum values */
  287301             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  287302             : 
  287303             :       /*! \brief static variant value */
  287304             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  287305             :        // static const VariantT static_variant = V_SgChar32Val;
  287306             :           enum { static_variant = V_SgChar32Val };
  287307             : 
  287308             :        /* the generated cast function */
  287309             :       /*! \brief Casts pointer from base class to derived class */
  287310             :           ROSE_DLL_API friend       SgChar32Val* isSgChar32Val(       SgNode * s );
  287311             : 
  287312             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  287313             :           ROSE_DLL_API friend const SgChar32Val* isSgChar32Val( const SgNode * s );
  287314             : 
  287315             :      // ******************************************
  287316             :      // * Memory Pool / New / Delete
  287317             :      // ******************************************
  287318             : 
  287319             :      public:
  287320             :           /// \private
  287321             :           static const unsigned pool_size; //
  287322             :           /// \private
  287323             :           static std::vector<unsigned char *> pools; //
  287324             :           /// \private
  287325             :           static SgChar32Val * next_node; // 
  287326             : 
  287327             :           /// \private
  287328             :           static unsigned long initializeStorageClassArray(SgChar32ValStorageClass *); //
  287329             : 
  287330             :           /// \private
  287331             :           static void clearMemoryPool(); //
  287332             :           static void deleteMemoryPool(); //
  287333             : 
  287334             :           /// \private
  287335             :           static void extendMemoryPoolForFileIO(); //
  287336             : 
  287337             :           /// \private
  287338             :           static SgChar32Val * getPointerFromGlobalIndex(unsigned long); //
  287339             :           /// \private
  287340             :           static SgChar32Val * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  287341             : 
  287342             :           /// \private
  287343             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  287344             :           /// \private
  287345             :           static void resetValidFreepointers(); //
  287346             :           /// \private
  287347             :           static unsigned long getNumberOfLastValidPointer(); //
  287348             : 
  287349             : 
  287350             : #if defined(INLINE_FUNCTIONS)
  287351             :       /*! \brief returns pointer to newly allocated IR node */
  287352             :           inline void *operator new (size_t size);
  287353             : #else
  287354             :       /*! \brief returns pointer to newly allocated IR node */
  287355             :           void *operator new (size_t size);
  287356             : #endif
  287357             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  287358             :           void operator delete (void* pointer, size_t size);
  287359             : 
  287360             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  287361           0 :           void operator delete (void* pointer)
  287362             :              {
  287363             :             // This is the generated delete operator...
  287364           0 :                SgChar32Val::operator delete (pointer,sizeof(SgChar32Val));
  287365             :              }
  287366             : 
  287367             :       /*! \brief Returns the total number of IR nodes of this type */
  287368             :           static size_t numberOfNodes();
  287369             : 
  287370             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  287371             :           static size_t memoryUsage();
  287372             : 
  287373             :       // End of scope which started in IR nodes specific code 
  287374             :       /* */
  287375             : 
  287376             :       /* name Internal Functions
  287377             :           \brief Internal functions ... incomplete-documentation
  287378             : 
  287379             :           These functions have been made public as part of the design, but they are suggested for internal use 
  287380             :           or by particularly knowledgeable users for specialized tools or applications.
  287381             : 
  287382             :           \internal We could not make these private because they are required by user for special purposes. And 
  287383             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  287384             :          
  287385             :        */
  287386             : 
  287387             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  287388             :        // overridden in every class by *generated* implementation
  287389             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  287390             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  287391             :        // MS: 06/28/02 container of names of variables or container indices 
  287392             :        // used used in the traversal to access AST successor nodes
  287393             :        // overridden in every class by *generated* implementation
  287394             :       /*! \brief container of names of variables or container indices used used in the traversal
  287395             :           to access AST successor nodes overridden in every class by *generated* implementation */
  287396             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  287397             : 
  287398             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  287399             :        // than all the vector copies. The implementation for these functions is generated for each class.
  287400             :       /*! \brief return number of children in the traversal successor list */
  287401             :           virtual size_t get_numberOfTraversalSuccessors() override;
  287402             :       /*! \brief index-based access to traversal successors by index number */
  287403             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  287404             :       /*! \brief index-based access to traversal successors by child node */
  287405             :           virtual size_t get_childIndex(SgNode *child) override;
  287406             : 
  287407             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  287408             :        // MS: 08/16/2002 method for generating RTI information
  287409             :       /*! \brief return C++ Runtime-Time-Information */
  287410             :           virtual RTIReturnType roseRTI() override;
  287411             : #endif
  287412             :       /* */
  287413             : 
  287414             : 
  287415             : 
  287416             :       /* name Deprecated Functions
  287417             :           \brief Deprecated functions ... incomplete-documentation
  287418             : 
  287419             :           These functions have been deprecated from use.
  287420             :        */
  287421             :       /* */
  287422             : 
  287423             :       /*! returns a C style string (char*) representing the class name */
  287424             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  287425             : 
  287426             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  287427             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  287428             : #if 0
  287429             :       /*! returns old style Sage II enum values */
  287430             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  287431             :       /*! returns old style Sage II enum values */
  287432             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  287433             : #endif
  287434             :       /* */
  287435             : 
  287436             : 
  287437             : 
  287438             : 
  287439             :      public:
  287440             :       /* name Traversal Support Functions
  287441             :           \brief Traversal support functions ... incomplete-documentation
  287442             : 
  287443             :           These functions have been made public as part of the design, but they are suggested for internal use 
  287444             :           or by particularly knowledgable users for specialized tools or applications.
  287445             :        */
  287446             :       /* */
  287447             : 
  287448             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  287449             :        // (inferior to ROSE traversal mechanism, experimental).
  287450             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  287451             :        */
  287452             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  287453             : 
  287454             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  287455             :       /*! \brief support for the classic visitor pattern done in GoF */
  287456             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  287457             : 
  287458             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  287459             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  287460             :        */
  287461             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  287462             : 
  287463             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  287464             :        */
  287465             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  287466             : 
  287467             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  287468             :        // This traversal helps support internal tools that call static member functions.
  287469             :        // note: this function operates on the memory pools.
  287470             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  287471             :        */
  287472             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  287473             :       /* */
  287474             : 
  287475             : 
  287476             :      public:
  287477             :       /* name Memory Allocation Functions
  287478             :           \brief Memory allocations functions ... incomplete-documentation
  287479             : 
  287480             :           These functions have been made public as part of the design, but they are suggested for internal use 
  287481             :           or by particularly knowledgable users for specialized tools or applications.
  287482             :        */
  287483             :       /* */
  287484             : 
  287485             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  287486             : 
  287487             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  287488             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  287489             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  287490             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  287491             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  287492             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  287493             :           being used with the AST File I/O mechanism.
  287494             :        */
  287495             :           virtual bool isInMemoryPool() override;
  287496             : 
  287497             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  287498             : 
  287499             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  287500             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  287501             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  287502             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  287503             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  287504             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  287505             :           being used with the AST File I/O mechanism.
  287506             :        */
  287507             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  287508             : 
  287509             :       // DQ (4/30/2006): Modified to be a const function.
  287510             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  287511             : 
  287512             :           This functions is part of general support for many possible tools to operate 
  287513             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  287514             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  287515             :           less than the set of pointers used by the AST file I/O. This is part of
  287516             :           work implemented by Andreas, and support tools such as the AST graph generation.
  287517             : 
  287518             :           \warning This function can return unexpected data members and thus the 
  287519             :                    order and the number of elements is unpredicable and subject 
  287520             :                    to change.
  287521             : 
  287522             :           \returns STL vector of pairs of SgNode* and strings
  287523             :        */
  287524             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  287525             : 
  287526             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  287527             : 
  287528             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  287529             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  287530             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  287531             : 
  287532             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  287533             :                    and subject to change.
  287534             :        */
  287535             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  287536             : 
  287537             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  287538             : 
  287539             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  287540             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  287541             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  287542             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  287543             : 
  287544             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  287545             : 
  287546             :           \returns long
  287547             :        */
  287548             :           virtual long getChildIndex( SgNode* childNode ) const override;
  287549             : 
  287550             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  287551             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  287552             :       /* \brief Constructor for use by AST File I/O Mechanism
  287553             : 
  287554             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  287555             :           which obtained via fast binary file I/O from disk.
  287556             :        */
  287557             :        // SgChar32Val( SgChar32ValStorageClass& source );
  287558             : 
  287559             : 
  287560             : 
  287561             : 
  287562             : 
  287563             :  // JH (10/24/2005): methods added to support the ast file IO
  287564             :     private:
  287565             : 
  287566             :       /* name AST Memory Allocation Support Functions
  287567             :           \brief Memory allocations support....
  287568             : 
  287569             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  287570             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  287571             :           and support the AST File I/O Mechanism.
  287572             :        */
  287573             :       /* */
  287574             : 
  287575             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  287576             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  287577             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  287578             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  287579             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  287580             :           a correspinding one in the AST_FILE_IO class!
  287581             :        */
  287582             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  287583             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  287584             :       /* \brief Typedef used for low level memory access.
  287585             :        */
  287586             :        // typedef unsigned char* TestType;
  287587             : 
  287588             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  287589             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  287590             :       /* \brief Typedef used to hold memory addresses as values.
  287591             :        */
  287592             :        // typedef unsigned long  AddressType;
  287593             : 
  287594             : 
  287595             : 
  287596             :        // necessary, to have direct access to the p_freepointer and the private methods !
  287597             :       /*! \brief friend class declaration to support AST File I/O */
  287598             :           friend class AST_FILE_IO;
  287599             : 
  287600             :       /*! \brief friend class declaration to support AST File I/O */
  287601             :           friend class SgChar32ValStorageClass;
  287602             : 
  287603             :       /*! \brief friend class declaration to support AST File I/O */
  287604             :           friend class AstSpecificDataManagingClass;
  287605             : 
  287606             :       /*! \brief friend class declaration to support AST File I/O */
  287607             :           friend class AstSpecificDataManagingClassStorageClass;
  287608             :     public:
  287609             :       /*! \brief IR node constructor to support AST File I/O */
  287610             :           SgChar32Val( const SgChar32ValStorageClass& source );
  287611             : 
  287612             :  // private: // JJW hack
  287613             :        /*
  287614             :           name AST Memory Allocation Support Variables
  287615             :           Memory allocations support variables 
  287616             : 
  287617             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  287618             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  287619             :           and support the AST File I/O Mechanism.
  287620             :        */
  287621             :       /* */
  287622             : 
  287623             :     public:
  287624             : 
  287625             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  287626             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  287627             :       // virtual SgNode* addRegExpAttribute();
  287628             :       /*! \brief Support for AST matching using regular expression.
  287629             : 
  287630             :           This support is incomplete and the subject of current research to define 
  287631             :           RegEx trees to support inexact matching.
  287632             :        */
  287633             :           SgChar32Val* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  287634             : 
  287635             : // *** COMMON CODE SECTION ENDS HERE ***
  287636             : 
  287637             : 
  287638             : // End of memberFunctionString
  287639             : // Start of memberFunctionString
  287640             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  287641             : 
  287642             :      // the generated cast function
  287643             :      // friend ROSE_DLL_API SgChar32Val* isSgChar32Val ( SgNode* s );
  287644             : 
  287645             :           typedef SgValueExp base_node_type;
  287646             : 
  287647             : 
  287648             : // End of memberFunctionString
  287649             : // Start of memberFunctionString
  287650             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  287651             : 
  287652             :           SgType* get_type() const override;
  287653             : 
  287654             : 
  287655             : // End of memberFunctionString
  287656             : // Start of memberFunctionString
  287657             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  287658             : 
  287659             :           void post_construction_initialization() override;
  287660             : 
  287661             : 
  287662             : // End of memberFunctionString
  287663             : 
  287664             :      public: 
  287665             :          unsigned int get_valueUL() const;
  287666             :          void set_valueUL(unsigned int valueUL);
  287667             : 
  287668             :      public: 
  287669             :          std::string get_valueString() const;
  287670             :          void set_valueString(std::string valueString);
  287671             : 
  287672             : 
  287673             :      public: 
  287674             :          virtual ~SgChar32Val();
  287675             : 
  287676             : 
  287677             :      public: 
  287678             :          SgChar32Val(Sg_File_Info* startOfConstruct , unsigned int valueUL = 0, std::string valueString = ""); 
  287679             :          SgChar32Val(unsigned int valueUL, std::string valueString); 
  287680             : 
  287681             :     protected:
  287682             : // Start of memberFunctionString
  287683             : unsigned int p_valueUL;
  287684             :           
  287685             : // End of memberFunctionString
  287686             : // Start of memberFunctionString
  287687             : std::string p_valueString;
  287688             :           
  287689             : // End of memberFunctionString
  287690             : 
  287691             :     friend struct Rose::Traits::generated::describe_node_t<SgChar32Val>;
  287692             :     friend struct Rose::Traits::generated::describe_field_t<SgChar32Val, unsigned int,&SgChar32Val::p_valueUL>;
  287693             :     friend struct Rose::Traits::generated::describe_field_t<SgChar32Val, std::string,&SgChar32Val::p_valueString>;
  287694             : 
  287695             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287696             : 
  287697             : 
  287698             :    };
  287699             : #endif
  287700             : 
  287701             : // postdeclarations for SgChar32Val
  287702             : 
  287703             : /* #line 287704 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287704             : 
  287705             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  287706             : 
  287707             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287708             : 
  287709             : 
  287710             : /* #line 287711 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287711             : 
  287712             : 
  287713             : 
  287714             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287715             : 
  287716             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  287717             : //      This code is automatically generated for each 
  287718             : //      terminal and non-terminal within the defined 
  287719             : //      grammar.  There is a simple way to change the 
  287720             : //      code to fix bugs etc.  See the ROSE README file
  287721             : //      for directions.
  287722             : 
  287723             : // tps: (02/22/2010): Adding DLL export requirements
  287724             : #include "rosedll.h"
  287725             : 
  287726             : // predeclarations for SgFloat80Val
  287727             : 
  287728             : /* #line 287729 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287729             : 
  287730             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  287731             : 
  287732             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  287733             : 
  287734             : #if 1
  287735             : // Class Definition for SgFloat80Val
  287736             : class ROSE_DLL_API SgFloat80Val  : public SgValueExp
  287737             :    {
  287738             :      public:
  287739             : 
  287740             : 
  287741             : /* #line 287742 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  287742             : 
  287743             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  287744             : // Start of memberFunctionString
  287745             : /* #line 683 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  287746             : 
  287747             : 
  287748             : 
  287749             : // End of memberFunctionString
  287750             : // Start of memberFunctionString
  287751             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  287752             : 
  287753             : // *** COMMON CODE SECTION BEGINS HERE ***
  287754             : 
  287755             :     public:
  287756             : 
  287757             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  287758             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  287759             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  287760             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  287761             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  287762             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  287763             : 
  287764             :       /*! \brief returns a string representing the class name */
  287765             :           virtual std::string class_name() const override;
  287766             : 
  287767             :       /*! \brief returns new style SageIII enum values */
  287768             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  287769             : 
  287770             :       /*! \brief static variant value */
  287771             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  287772             :        // static const VariantT static_variant = V_SgFloat80Val;
  287773             :           enum { static_variant = V_SgFloat80Val };
  287774             : 
  287775             :        /* the generated cast function */
  287776             :       /*! \brief Casts pointer from base class to derived class */
  287777             :           ROSE_DLL_API friend       SgFloat80Val* isSgFloat80Val(       SgNode * s );
  287778             : 
  287779             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  287780             :           ROSE_DLL_API friend const SgFloat80Val* isSgFloat80Val( const SgNode * s );
  287781             : 
  287782             :      // ******************************************
  287783             :      // * Memory Pool / New / Delete
  287784             :      // ******************************************
  287785             : 
  287786             :      public:
  287787             :           /// \private
  287788             :           static const unsigned pool_size; //
  287789             :           /// \private
  287790             :           static std::vector<unsigned char *> pools; //
  287791             :           /// \private
  287792             :           static SgFloat80Val * next_node; // 
  287793             : 
  287794             :           /// \private
  287795             :           static unsigned long initializeStorageClassArray(SgFloat80ValStorageClass *); //
  287796             : 
  287797             :           /// \private
  287798             :           static void clearMemoryPool(); //
  287799             :           static void deleteMemoryPool(); //
  287800             : 
  287801             :           /// \private
  287802             :           static void extendMemoryPoolForFileIO(); //
  287803             : 
  287804             :           /// \private
  287805             :           static SgFloat80Val * getPointerFromGlobalIndex(unsigned long); //
  287806             :           /// \private
  287807             :           static SgFloat80Val * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  287808             : 
  287809             :           /// \private
  287810             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  287811             :           /// \private
  287812             :           static void resetValidFreepointers(); //
  287813             :           /// \private
  287814             :           static unsigned long getNumberOfLastValidPointer(); //
  287815             : 
  287816             : 
  287817             : #if defined(INLINE_FUNCTIONS)
  287818             :       /*! \brief returns pointer to newly allocated IR node */
  287819             :           inline void *operator new (size_t size);
  287820             : #else
  287821             :       /*! \brief returns pointer to newly allocated IR node */
  287822             :           void *operator new (size_t size);
  287823             : #endif
  287824             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  287825             :           void operator delete (void* pointer, size_t size);
  287826             : 
  287827             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  287828           0 :           void operator delete (void* pointer)
  287829             :              {
  287830             :             // This is the generated delete operator...
  287831           0 :                SgFloat80Val::operator delete (pointer,sizeof(SgFloat80Val));
  287832             :              }
  287833             : 
  287834             :       /*! \brief Returns the total number of IR nodes of this type */
  287835             :           static size_t numberOfNodes();
  287836             : 
  287837             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  287838             :           static size_t memoryUsage();
  287839             : 
  287840             :       // End of scope which started in IR nodes specific code 
  287841             :       /* */
  287842             : 
  287843             :       /* name Internal Functions
  287844             :           \brief Internal functions ... incomplete-documentation
  287845             : 
  287846             :           These functions have been made public as part of the design, but they are suggested for internal use 
  287847             :           or by particularly knowledgeable users for specialized tools or applications.
  287848             : 
  287849             :           \internal We could not make these private because they are required by user for special purposes. And 
  287850             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  287851             :          
  287852             :        */
  287853             : 
  287854             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  287855             :        // overridden in every class by *generated* implementation
  287856             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  287857             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  287858             :        // MS: 06/28/02 container of names of variables or container indices 
  287859             :        // used used in the traversal to access AST successor nodes
  287860             :        // overridden in every class by *generated* implementation
  287861             :       /*! \brief container of names of variables or container indices used used in the traversal
  287862             :           to access AST successor nodes overridden in every class by *generated* implementation */
  287863             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  287864             : 
  287865             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  287866             :        // than all the vector copies. The implementation for these functions is generated for each class.
  287867             :       /*! \brief return number of children in the traversal successor list */
  287868             :           virtual size_t get_numberOfTraversalSuccessors() override;
  287869             :       /*! \brief index-based access to traversal successors by index number */
  287870             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  287871             :       /*! \brief index-based access to traversal successors by child node */
  287872             :           virtual size_t get_childIndex(SgNode *child) override;
  287873             : 
  287874             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  287875             :        // MS: 08/16/2002 method for generating RTI information
  287876             :       /*! \brief return C++ Runtime-Time-Information */
  287877             :           virtual RTIReturnType roseRTI() override;
  287878             : #endif
  287879             :       /* */
  287880             : 
  287881             : 
  287882             : 
  287883             :       /* name Deprecated Functions
  287884             :           \brief Deprecated functions ... incomplete-documentation
  287885             : 
  287886             :           These functions have been deprecated from use.
  287887             :        */
  287888             :       /* */
  287889             : 
  287890             :       /*! returns a C style string (char*) representing the class name */
  287891             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  287892             : 
  287893             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  287894             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  287895             : #if 0
  287896             :       /*! returns old style Sage II enum values */
  287897             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  287898             :       /*! returns old style Sage II enum values */
  287899             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  287900             : #endif
  287901             :       /* */
  287902             : 
  287903             : 
  287904             : 
  287905             : 
  287906             :      public:
  287907             :       /* name Traversal Support Functions
  287908             :           \brief Traversal support functions ... incomplete-documentation
  287909             : 
  287910             :           These functions have been made public as part of the design, but they are suggested for internal use 
  287911             :           or by particularly knowledgable users for specialized tools or applications.
  287912             :        */
  287913             :       /* */
  287914             : 
  287915             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  287916             :        // (inferior to ROSE traversal mechanism, experimental).
  287917             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  287918             :        */
  287919             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  287920             : 
  287921             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  287922             :       /*! \brief support for the classic visitor pattern done in GoF */
  287923             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  287924             : 
  287925             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  287926             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  287927             :        */
  287928             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  287929             : 
  287930             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  287931             :        */
  287932             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  287933             : 
  287934             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  287935             :        // This traversal helps support internal tools that call static member functions.
  287936             :        // note: this function operates on the memory pools.
  287937             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  287938             :        */
  287939             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  287940             :       /* */
  287941             : 
  287942             : 
  287943             :      public:
  287944             :       /* name Memory Allocation Functions
  287945             :           \brief Memory allocations functions ... incomplete-documentation
  287946             : 
  287947             :           These functions have been made public as part of the design, but they are suggested for internal use 
  287948             :           or by particularly knowledgable users for specialized tools or applications.
  287949             :        */
  287950             :       /* */
  287951             : 
  287952             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  287953             : 
  287954             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  287955             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  287956             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  287957             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  287958             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  287959             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  287960             :           being used with the AST File I/O mechanism.
  287961             :        */
  287962             :           virtual bool isInMemoryPool() override;
  287963             : 
  287964             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  287965             : 
  287966             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  287967             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  287968             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  287969             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  287970             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  287971             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  287972             :           being used with the AST File I/O mechanism.
  287973             :        */
  287974             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  287975             : 
  287976             :       // DQ (4/30/2006): Modified to be a const function.
  287977             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  287978             : 
  287979             :           This functions is part of general support for many possible tools to operate 
  287980             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  287981             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  287982             :           less than the set of pointers used by the AST file I/O. This is part of
  287983             :           work implemented by Andreas, and support tools such as the AST graph generation.
  287984             : 
  287985             :           \warning This function can return unexpected data members and thus the 
  287986             :                    order and the number of elements is unpredicable and subject 
  287987             :                    to change.
  287988             : 
  287989             :           \returns STL vector of pairs of SgNode* and strings
  287990             :        */
  287991             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  287992             : 
  287993             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  287994             : 
  287995             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  287996             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  287997             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  287998             : 
  287999             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  288000             :                    and subject to change.
  288001             :        */
  288002             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  288003             : 
  288004             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  288005             : 
  288006             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  288007             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  288008             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  288009             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  288010             : 
  288011             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  288012             : 
  288013             :           \returns long
  288014             :        */
  288015             :           virtual long getChildIndex( SgNode* childNode ) const override;
  288016             : 
  288017             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  288018             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288019             :       /* \brief Constructor for use by AST File I/O Mechanism
  288020             : 
  288021             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  288022             :           which obtained via fast binary file I/O from disk.
  288023             :        */
  288024             :        // SgFloat80Val( SgFloat80ValStorageClass& source );
  288025             : 
  288026             : 
  288027             : 
  288028             : 
  288029             : 
  288030             :  // JH (10/24/2005): methods added to support the ast file IO
  288031             :     private:
  288032             : 
  288033             :       /* name AST Memory Allocation Support Functions
  288034             :           \brief Memory allocations support....
  288035             : 
  288036             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  288037             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  288038             :           and support the AST File I/O Mechanism.
  288039             :        */
  288040             :       /* */
  288041             : 
  288042             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  288043             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  288044             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  288045             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  288046             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  288047             :           a correspinding one in the AST_FILE_IO class!
  288048             :        */
  288049             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  288050             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288051             :       /* \brief Typedef used for low level memory access.
  288052             :        */
  288053             :        // typedef unsigned char* TestType;
  288054             : 
  288055             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  288056             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288057             :       /* \brief Typedef used to hold memory addresses as values.
  288058             :        */
  288059             :        // typedef unsigned long  AddressType;
  288060             : 
  288061             : 
  288062             : 
  288063             :        // necessary, to have direct access to the p_freepointer and the private methods !
  288064             :       /*! \brief friend class declaration to support AST File I/O */
  288065             :           friend class AST_FILE_IO;
  288066             : 
  288067             :       /*! \brief friend class declaration to support AST File I/O */
  288068             :           friend class SgFloat80ValStorageClass;
  288069             : 
  288070             :       /*! \brief friend class declaration to support AST File I/O */
  288071             :           friend class AstSpecificDataManagingClass;
  288072             : 
  288073             :       /*! \brief friend class declaration to support AST File I/O */
  288074             :           friend class AstSpecificDataManagingClassStorageClass;
  288075             :     public:
  288076             :       /*! \brief IR node constructor to support AST File I/O */
  288077             :           SgFloat80Val( const SgFloat80ValStorageClass& source );
  288078             : 
  288079             :  // private: // JJW hack
  288080             :        /*
  288081             :           name AST Memory Allocation Support Variables
  288082             :           Memory allocations support variables 
  288083             : 
  288084             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  288085             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  288086             :           and support the AST File I/O Mechanism.
  288087             :        */
  288088             :       /* */
  288089             : 
  288090             :     public:
  288091             : 
  288092             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  288093             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  288094             :       // virtual SgNode* addRegExpAttribute();
  288095             :       /*! \brief Support for AST matching using regular expression.
  288096             : 
  288097             :           This support is incomplete and the subject of current research to define 
  288098             :           RegEx trees to support inexact matching.
  288099             :        */
  288100             :           SgFloat80Val* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  288101             : 
  288102             : // *** COMMON CODE SECTION ENDS HERE ***
  288103             : 
  288104             : 
  288105             : // End of memberFunctionString
  288106             : // Start of memberFunctionString
  288107             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  288108             : 
  288109             :      // the generated cast function
  288110             :      // friend ROSE_DLL_API SgFloat80Val* isSgFloat80Val ( SgNode* s );
  288111             : 
  288112             :           typedef SgValueExp base_node_type;
  288113             : 
  288114             : 
  288115             : // End of memberFunctionString
  288116             : // Start of memberFunctionString
  288117             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  288118             : 
  288119             :           SgType* get_type() const override;
  288120             : 
  288121             : 
  288122             : // End of memberFunctionString
  288123             : // Start of memberFunctionString
  288124             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  288125             : 
  288126             :           void post_construction_initialization() override;
  288127             : 
  288128             : 
  288129             : // End of memberFunctionString
  288130             : 
  288131             :      public: 
  288132             :          long double get_value() const;
  288133             :          void set_value(long double value);
  288134             : 
  288135             :      public: 
  288136             :          std::string get_valueString() const;
  288137             :          void set_valueString(std::string valueString);
  288138             : 
  288139             : 
  288140             :      public: 
  288141             :          virtual ~SgFloat80Val();
  288142             : 
  288143             : 
  288144             :      public: 
  288145             :          SgFloat80Val(Sg_File_Info* startOfConstruct , long double value = 0.0, std::string valueString = ""); 
  288146             :          SgFloat80Val(long double value, std::string valueString); 
  288147             : 
  288148             :     protected:
  288149             : // Start of memberFunctionString
  288150             : long double p_value;
  288151             :           
  288152             : // End of memberFunctionString
  288153             : // Start of memberFunctionString
  288154             : std::string p_valueString;
  288155             :           
  288156             : // End of memberFunctionString
  288157             : 
  288158             :     friend struct Rose::Traits::generated::describe_node_t<SgFloat80Val>;
  288159             :     friend struct Rose::Traits::generated::describe_field_t<SgFloat80Val, long double,&SgFloat80Val::p_value>;
  288160             :     friend struct Rose::Traits::generated::describe_field_t<SgFloat80Val, std::string,&SgFloat80Val::p_valueString>;
  288161             : 
  288162             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288163             : 
  288164             : 
  288165             :    };
  288166             : #endif
  288167             : 
  288168             : // postdeclarations for SgFloat80Val
  288169             : 
  288170             : /* #line 288171 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288171             : 
  288172             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  288173             : 
  288174             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288175             : 
  288176             : 
  288177             : /* #line 288178 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288178             : 
  288179             : 
  288180             : 
  288181             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288182             : 
  288183             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  288184             : //      This code is automatically generated for each 
  288185             : //      terminal and non-terminal within the defined 
  288186             : //      grammar.  There is a simple way to change the 
  288187             : //      code to fix bugs etc.  See the ROSE README file
  288188             : //      for directions.
  288189             : 
  288190             : // tps: (02/22/2010): Adding DLL export requirements
  288191             : #include "rosedll.h"
  288192             : 
  288193             : // predeclarations for SgFloat128Val
  288194             : 
  288195             : /* #line 288196 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288196             : 
  288197             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  288198             : 
  288199             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288200             : 
  288201             : #if 1
  288202             : // Class Definition for SgFloat128Val
  288203             : class ROSE_DLL_API SgFloat128Val  : public SgValueExp
  288204             :    {
  288205             :      public:
  288206             : 
  288207             : 
  288208             : /* #line 288209 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288209             : 
  288210             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  288211             : // Start of memberFunctionString
  288212             : /* #line 686 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  288213             : 
  288214             : 
  288215             : 
  288216             : // End of memberFunctionString
  288217             : // Start of memberFunctionString
  288218             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  288219             : 
  288220             : // *** COMMON CODE SECTION BEGINS HERE ***
  288221             : 
  288222             :     public:
  288223             : 
  288224             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  288225             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  288226             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  288227             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  288228             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  288229             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  288230             : 
  288231             :       /*! \brief returns a string representing the class name */
  288232             :           virtual std::string class_name() const override;
  288233             : 
  288234             :       /*! \brief returns new style SageIII enum values */
  288235             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  288236             : 
  288237             :       /*! \brief static variant value */
  288238             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  288239             :        // static const VariantT static_variant = V_SgFloat128Val;
  288240             :           enum { static_variant = V_SgFloat128Val };
  288241             : 
  288242             :        /* the generated cast function */
  288243             :       /*! \brief Casts pointer from base class to derived class */
  288244             :           ROSE_DLL_API friend       SgFloat128Val* isSgFloat128Val(       SgNode * s );
  288245             : 
  288246             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  288247             :           ROSE_DLL_API friend const SgFloat128Val* isSgFloat128Val( const SgNode * s );
  288248             : 
  288249             :      // ******************************************
  288250             :      // * Memory Pool / New / Delete
  288251             :      // ******************************************
  288252             : 
  288253             :      public:
  288254             :           /// \private
  288255             :           static const unsigned pool_size; //
  288256             :           /// \private
  288257             :           static std::vector<unsigned char *> pools; //
  288258             :           /// \private
  288259             :           static SgFloat128Val * next_node; // 
  288260             : 
  288261             :           /// \private
  288262             :           static unsigned long initializeStorageClassArray(SgFloat128ValStorageClass *); //
  288263             : 
  288264             :           /// \private
  288265             :           static void clearMemoryPool(); //
  288266             :           static void deleteMemoryPool(); //
  288267             : 
  288268             :           /// \private
  288269             :           static void extendMemoryPoolForFileIO(); //
  288270             : 
  288271             :           /// \private
  288272             :           static SgFloat128Val * getPointerFromGlobalIndex(unsigned long); //
  288273             :           /// \private
  288274             :           static SgFloat128Val * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  288275             : 
  288276             :           /// \private
  288277             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  288278             :           /// \private
  288279             :           static void resetValidFreepointers(); //
  288280             :           /// \private
  288281             :           static unsigned long getNumberOfLastValidPointer(); //
  288282             : 
  288283             : 
  288284             : #if defined(INLINE_FUNCTIONS)
  288285             :       /*! \brief returns pointer to newly allocated IR node */
  288286             :           inline void *operator new (size_t size);
  288287             : #else
  288288             :       /*! \brief returns pointer to newly allocated IR node */
  288289             :           void *operator new (size_t size);
  288290             : #endif
  288291             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  288292             :           void operator delete (void* pointer, size_t size);
  288293             : 
  288294             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  288295           0 :           void operator delete (void* pointer)
  288296             :              {
  288297             :             // This is the generated delete operator...
  288298           0 :                SgFloat128Val::operator delete (pointer,sizeof(SgFloat128Val));
  288299             :              }
  288300             : 
  288301             :       /*! \brief Returns the total number of IR nodes of this type */
  288302             :           static size_t numberOfNodes();
  288303             : 
  288304             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  288305             :           static size_t memoryUsage();
  288306             : 
  288307             :       // End of scope which started in IR nodes specific code 
  288308             :       /* */
  288309             : 
  288310             :       /* name Internal Functions
  288311             :           \brief Internal functions ... incomplete-documentation
  288312             : 
  288313             :           These functions have been made public as part of the design, but they are suggested for internal use 
  288314             :           or by particularly knowledgeable users for specialized tools or applications.
  288315             : 
  288316             :           \internal We could not make these private because they are required by user for special purposes. And 
  288317             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  288318             :          
  288319             :        */
  288320             : 
  288321             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  288322             :        // overridden in every class by *generated* implementation
  288323             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  288324             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  288325             :        // MS: 06/28/02 container of names of variables or container indices 
  288326             :        // used used in the traversal to access AST successor nodes
  288327             :        // overridden in every class by *generated* implementation
  288328             :       /*! \brief container of names of variables or container indices used used in the traversal
  288329             :           to access AST successor nodes overridden in every class by *generated* implementation */
  288330             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  288331             : 
  288332             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  288333             :        // than all the vector copies. The implementation for these functions is generated for each class.
  288334             :       /*! \brief return number of children in the traversal successor list */
  288335             :           virtual size_t get_numberOfTraversalSuccessors() override;
  288336             :       /*! \brief index-based access to traversal successors by index number */
  288337             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  288338             :       /*! \brief index-based access to traversal successors by child node */
  288339             :           virtual size_t get_childIndex(SgNode *child) override;
  288340             : 
  288341             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  288342             :        // MS: 08/16/2002 method for generating RTI information
  288343             :       /*! \brief return C++ Runtime-Time-Information */
  288344             :           virtual RTIReturnType roseRTI() override;
  288345             : #endif
  288346             :       /* */
  288347             : 
  288348             : 
  288349             : 
  288350             :       /* name Deprecated Functions
  288351             :           \brief Deprecated functions ... incomplete-documentation
  288352             : 
  288353             :           These functions have been deprecated from use.
  288354             :        */
  288355             :       /* */
  288356             : 
  288357             :       /*! returns a C style string (char*) representing the class name */
  288358             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  288359             : 
  288360             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  288361             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  288362             : #if 0
  288363             :       /*! returns old style Sage II enum values */
  288364             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  288365             :       /*! returns old style Sage II enum values */
  288366             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  288367             : #endif
  288368             :       /* */
  288369             : 
  288370             : 
  288371             : 
  288372             : 
  288373             :      public:
  288374             :       /* name Traversal Support Functions
  288375             :           \brief Traversal support functions ... incomplete-documentation
  288376             : 
  288377             :           These functions have been made public as part of the design, but they are suggested for internal use 
  288378             :           or by particularly knowledgable users for specialized tools or applications.
  288379             :        */
  288380             :       /* */
  288381             : 
  288382             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  288383             :        // (inferior to ROSE traversal mechanism, experimental).
  288384             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  288385             :        */
  288386             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  288387             : 
  288388             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  288389             :       /*! \brief support for the classic visitor pattern done in GoF */
  288390             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  288391             : 
  288392             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  288393             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  288394             :        */
  288395             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  288396             : 
  288397             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  288398             :        */
  288399             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  288400             : 
  288401             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  288402             :        // This traversal helps support internal tools that call static member functions.
  288403             :        // note: this function operates on the memory pools.
  288404             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  288405             :        */
  288406             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  288407             :       /* */
  288408             : 
  288409             : 
  288410             :      public:
  288411             :       /* name Memory Allocation Functions
  288412             :           \brief Memory allocations functions ... incomplete-documentation
  288413             : 
  288414             :           These functions have been made public as part of the design, but they are suggested for internal use 
  288415             :           or by particularly knowledgable users for specialized tools or applications.
  288416             :        */
  288417             :       /* */
  288418             : 
  288419             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  288420             : 
  288421             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  288422             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  288423             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  288424             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  288425             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  288426             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  288427             :           being used with the AST File I/O mechanism.
  288428             :        */
  288429             :           virtual bool isInMemoryPool() override;
  288430             : 
  288431             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  288432             : 
  288433             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  288434             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  288435             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  288436             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  288437             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  288438             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  288439             :           being used with the AST File I/O mechanism.
  288440             :        */
  288441             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  288442             : 
  288443             :       // DQ (4/30/2006): Modified to be a const function.
  288444             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  288445             : 
  288446             :           This functions is part of general support for many possible tools to operate 
  288447             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  288448             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  288449             :           less than the set of pointers used by the AST file I/O. This is part of
  288450             :           work implemented by Andreas, and support tools such as the AST graph generation.
  288451             : 
  288452             :           \warning This function can return unexpected data members and thus the 
  288453             :                    order and the number of elements is unpredicable and subject 
  288454             :                    to change.
  288455             : 
  288456             :           \returns STL vector of pairs of SgNode* and strings
  288457             :        */
  288458             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  288459             : 
  288460             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  288461             : 
  288462             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  288463             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  288464             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  288465             : 
  288466             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  288467             :                    and subject to change.
  288468             :        */
  288469             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  288470             : 
  288471             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  288472             : 
  288473             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  288474             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  288475             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  288476             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  288477             : 
  288478             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  288479             : 
  288480             :           \returns long
  288481             :        */
  288482             :           virtual long getChildIndex( SgNode* childNode ) const override;
  288483             : 
  288484             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  288485             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288486             :       /* \brief Constructor for use by AST File I/O Mechanism
  288487             : 
  288488             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  288489             :           which obtained via fast binary file I/O from disk.
  288490             :        */
  288491             :        // SgFloat128Val( SgFloat128ValStorageClass& source );
  288492             : 
  288493             : 
  288494             : 
  288495             : 
  288496             : 
  288497             :  // JH (10/24/2005): methods added to support the ast file IO
  288498             :     private:
  288499             : 
  288500             :       /* name AST Memory Allocation Support Functions
  288501             :           \brief Memory allocations support....
  288502             : 
  288503             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  288504             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  288505             :           and support the AST File I/O Mechanism.
  288506             :        */
  288507             :       /* */
  288508             : 
  288509             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  288510             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  288511             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  288512             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  288513             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  288514             :           a correspinding one in the AST_FILE_IO class!
  288515             :        */
  288516             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  288517             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288518             :       /* \brief Typedef used for low level memory access.
  288519             :        */
  288520             :        // typedef unsigned char* TestType;
  288521             : 
  288522             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  288523             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288524             :       /* \brief Typedef used to hold memory addresses as values.
  288525             :        */
  288526             :        // typedef unsigned long  AddressType;
  288527             : 
  288528             : 
  288529             : 
  288530             :        // necessary, to have direct access to the p_freepointer and the private methods !
  288531             :       /*! \brief friend class declaration to support AST File I/O */
  288532             :           friend class AST_FILE_IO;
  288533             : 
  288534             :       /*! \brief friend class declaration to support AST File I/O */
  288535             :           friend class SgFloat128ValStorageClass;
  288536             : 
  288537             :       /*! \brief friend class declaration to support AST File I/O */
  288538             :           friend class AstSpecificDataManagingClass;
  288539             : 
  288540             :       /*! \brief friend class declaration to support AST File I/O */
  288541             :           friend class AstSpecificDataManagingClassStorageClass;
  288542             :     public:
  288543             :       /*! \brief IR node constructor to support AST File I/O */
  288544             :           SgFloat128Val( const SgFloat128ValStorageClass& source );
  288545             : 
  288546             :  // private: // JJW hack
  288547             :        /*
  288548             :           name AST Memory Allocation Support Variables
  288549             :           Memory allocations support variables 
  288550             : 
  288551             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  288552             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  288553             :           and support the AST File I/O Mechanism.
  288554             :        */
  288555             :       /* */
  288556             : 
  288557             :     public:
  288558             : 
  288559             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  288560             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  288561             :       // virtual SgNode* addRegExpAttribute();
  288562             :       /*! \brief Support for AST matching using regular expression.
  288563             : 
  288564             :           This support is incomplete and the subject of current research to define 
  288565             :           RegEx trees to support inexact matching.
  288566             :        */
  288567             :           SgFloat128Val* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  288568             : 
  288569             : // *** COMMON CODE SECTION ENDS HERE ***
  288570             : 
  288571             : 
  288572             : // End of memberFunctionString
  288573             : // Start of memberFunctionString
  288574             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  288575             : 
  288576             :      // the generated cast function
  288577             :      // friend ROSE_DLL_API SgFloat128Val* isSgFloat128Val ( SgNode* s );
  288578             : 
  288579             :           typedef SgValueExp base_node_type;
  288580             : 
  288581             : 
  288582             : // End of memberFunctionString
  288583             : // Start of memberFunctionString
  288584             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  288585             : 
  288586             :           SgType* get_type() const override;
  288587             : 
  288588             : 
  288589             : // End of memberFunctionString
  288590             : // Start of memberFunctionString
  288591             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  288592             : 
  288593             :           void post_construction_initialization() override;
  288594             : 
  288595             : 
  288596             : // End of memberFunctionString
  288597             : 
  288598             :      public: 
  288599             :          long double get_value() const;
  288600             :          void set_value(long double value);
  288601             : 
  288602             :      public: 
  288603             :          std::string get_valueString() const;
  288604             :          void set_valueString(std::string valueString);
  288605             : 
  288606             : 
  288607             :      public: 
  288608             :          virtual ~SgFloat128Val();
  288609             : 
  288610             : 
  288611             :      public: 
  288612             :          SgFloat128Val(Sg_File_Info* startOfConstruct , long double value = 0.0, std::string valueString = ""); 
  288613             :          SgFloat128Val(long double value, std::string valueString); 
  288614             : 
  288615             :     protected:
  288616             : // Start of memberFunctionString
  288617             : long double p_value;
  288618             :           
  288619             : // End of memberFunctionString
  288620             : // Start of memberFunctionString
  288621             : std::string p_valueString;
  288622             :           
  288623             : // End of memberFunctionString
  288624             : 
  288625             :     friend struct Rose::Traits::generated::describe_node_t<SgFloat128Val>;
  288626             :     friend struct Rose::Traits::generated::describe_field_t<SgFloat128Val, long double,&SgFloat128Val::p_value>;
  288627             :     friend struct Rose::Traits::generated::describe_field_t<SgFloat128Val, std::string,&SgFloat128Val::p_valueString>;
  288628             : 
  288629             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288630             : 
  288631             : 
  288632             :    };
  288633             : #endif
  288634             : 
  288635             : // postdeclarations for SgFloat128Val
  288636             : 
  288637             : /* #line 288638 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288638             : 
  288639             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  288640             : 
  288641             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288642             : 
  288643             : 
  288644             : /* #line 288645 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288645             : 
  288646             : 
  288647             : 
  288648             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288649             : 
  288650             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  288651             : //      This code is automatically generated for each 
  288652             : //      terminal and non-terminal within the defined 
  288653             : //      grammar.  There is a simple way to change the 
  288654             : //      code to fix bugs etc.  See the ROSE README file
  288655             : //      for directions.
  288656             : 
  288657             : // tps: (02/22/2010): Adding DLL export requirements
  288658             : #include "rosedll.h"
  288659             : 
  288660             : // predeclarations for SgVoidVal
  288661             : 
  288662             : /* #line 288663 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288663             : 
  288664             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  288665             : 
  288666             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  288667             : 
  288668             : #if 1
  288669             : // Class Definition for SgVoidVal
  288670             : class ROSE_DLL_API SgVoidVal  : public SgValueExp
  288671             :    {
  288672             :      public:
  288673             : 
  288674             : 
  288675             : /* #line 288676 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  288676             : 
  288677             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  288678             : // Start of memberFunctionString
  288679             : /* #line 561 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  288680             : 
  288681             : 
  288682             : 
  288683             : // End of memberFunctionString
  288684             : // Start of memberFunctionString
  288685             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  288686             : 
  288687             : // *** COMMON CODE SECTION BEGINS HERE ***
  288688             : 
  288689             :     public:
  288690             : 
  288691             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  288692             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  288693             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  288694             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  288695             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  288696             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  288697             : 
  288698             :       /*! \brief returns a string representing the class name */
  288699             :           virtual std::string class_name() const override;
  288700             : 
  288701             :       /*! \brief returns new style SageIII enum values */
  288702             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  288703             : 
  288704             :       /*! \brief static variant value */
  288705             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  288706             :        // static const VariantT static_variant = V_SgVoidVal;
  288707             :           enum { static_variant = V_SgVoidVal };
  288708             : 
  288709             :        /* the generated cast function */
  288710             :       /*! \brief Casts pointer from base class to derived class */
  288711             :           ROSE_DLL_API friend       SgVoidVal* isSgVoidVal(       SgNode * s );
  288712             : 
  288713             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  288714             :           ROSE_DLL_API friend const SgVoidVal* isSgVoidVal( const SgNode * s );
  288715             : 
  288716             :      // ******************************************
  288717             :      // * Memory Pool / New / Delete
  288718             :      // ******************************************
  288719             : 
  288720             :      public:
  288721             :           /// \private
  288722             :           static const unsigned pool_size; //
  288723             :           /// \private
  288724             :           static std::vector<unsigned char *> pools; //
  288725             :           /// \private
  288726             :           static SgVoidVal * next_node; // 
  288727             : 
  288728             :           /// \private
  288729             :           static unsigned long initializeStorageClassArray(SgVoidValStorageClass *); //
  288730             : 
  288731             :           /// \private
  288732             :           static void clearMemoryPool(); //
  288733             :           static void deleteMemoryPool(); //
  288734             : 
  288735             :           /// \private
  288736             :           static void extendMemoryPoolForFileIO(); //
  288737             : 
  288738             :           /// \private
  288739             :           static SgVoidVal * getPointerFromGlobalIndex(unsigned long); //
  288740             :           /// \private
  288741             :           static SgVoidVal * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  288742             : 
  288743             :           /// \private
  288744             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  288745             :           /// \private
  288746             :           static void resetValidFreepointers(); //
  288747             :           /// \private
  288748             :           static unsigned long getNumberOfLastValidPointer(); //
  288749             : 
  288750             : 
  288751             : #if defined(INLINE_FUNCTIONS)
  288752             :       /*! \brief returns pointer to newly allocated IR node */
  288753             :           inline void *operator new (size_t size);
  288754             : #else
  288755             :       /*! \brief returns pointer to newly allocated IR node */
  288756             :           void *operator new (size_t size);
  288757             : #endif
  288758             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  288759             :           void operator delete (void* pointer, size_t size);
  288760             : 
  288761             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  288762           0 :           void operator delete (void* pointer)
  288763             :              {
  288764             :             // This is the generated delete operator...
  288765           0 :                SgVoidVal::operator delete (pointer,sizeof(SgVoidVal));
  288766             :              }
  288767             : 
  288768             :       /*! \brief Returns the total number of IR nodes of this type */
  288769             :           static size_t numberOfNodes();
  288770             : 
  288771             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  288772             :           static size_t memoryUsage();
  288773             : 
  288774             :       // End of scope which started in IR nodes specific code 
  288775             :       /* */
  288776             : 
  288777             :       /* name Internal Functions
  288778             :           \brief Internal functions ... incomplete-documentation
  288779             : 
  288780             :           These functions have been made public as part of the design, but they are suggested for internal use 
  288781             :           or by particularly knowledgeable users for specialized tools or applications.
  288782             : 
  288783             :           \internal We could not make these private because they are required by user for special purposes. And 
  288784             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  288785             :          
  288786             :        */
  288787             : 
  288788             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  288789             :        // overridden in every class by *generated* implementation
  288790             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  288791             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  288792             :        // MS: 06/28/02 container of names of variables or container indices 
  288793             :        // used used in the traversal to access AST successor nodes
  288794             :        // overridden in every class by *generated* implementation
  288795             :       /*! \brief container of names of variables or container indices used used in the traversal
  288796             :           to access AST successor nodes overridden in every class by *generated* implementation */
  288797             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  288798             : 
  288799             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  288800             :        // than all the vector copies. The implementation for these functions is generated for each class.
  288801             :       /*! \brief return number of children in the traversal successor list */
  288802             :           virtual size_t get_numberOfTraversalSuccessors() override;
  288803             :       /*! \brief index-based access to traversal successors by index number */
  288804             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  288805             :       /*! \brief index-based access to traversal successors by child node */
  288806             :           virtual size_t get_childIndex(SgNode *child) override;
  288807             : 
  288808             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  288809             :        // MS: 08/16/2002 method for generating RTI information
  288810             :       /*! \brief return C++ Runtime-Time-Information */
  288811             :           virtual RTIReturnType roseRTI() override;
  288812             : #endif
  288813             :       /* */
  288814             : 
  288815             : 
  288816             : 
  288817             :       /* name Deprecated Functions
  288818             :           \brief Deprecated functions ... incomplete-documentation
  288819             : 
  288820             :           These functions have been deprecated from use.
  288821             :        */
  288822             :       /* */
  288823             : 
  288824             :       /*! returns a C style string (char*) representing the class name */
  288825             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  288826             : 
  288827             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  288828             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  288829             : #if 0
  288830             :       /*! returns old style Sage II enum values */
  288831             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  288832             :       /*! returns old style Sage II enum values */
  288833             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  288834             : #endif
  288835             :       /* */
  288836             : 
  288837             : 
  288838             : 
  288839             : 
  288840             :      public:
  288841             :       /* name Traversal Support Functions
  288842             :           \brief Traversal support functions ... incomplete-documentation
  288843             : 
  288844             :           These functions have been made public as part of the design, but they are suggested for internal use 
  288845             :           or by particularly knowledgable users for specialized tools or applications.
  288846             :        */
  288847             :       /* */
  288848             : 
  288849             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  288850             :        // (inferior to ROSE traversal mechanism, experimental).
  288851             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  288852             :        */
  288853             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  288854             : 
  288855             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  288856             :       /*! \brief support for the classic visitor pattern done in GoF */
  288857             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  288858             : 
  288859             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  288860             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  288861             :        */
  288862             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  288863             : 
  288864             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  288865             :        */
  288866             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  288867             : 
  288868             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  288869             :        // This traversal helps support internal tools that call static member functions.
  288870             :        // note: this function operates on the memory pools.
  288871             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  288872             :        */
  288873             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  288874             :       /* */
  288875             : 
  288876             : 
  288877             :      public:
  288878             :       /* name Memory Allocation Functions
  288879             :           \brief Memory allocations functions ... incomplete-documentation
  288880             : 
  288881             :           These functions have been made public as part of the design, but they are suggested for internal use 
  288882             :           or by particularly knowledgable users for specialized tools or applications.
  288883             :        */
  288884             :       /* */
  288885             : 
  288886             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  288887             : 
  288888             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  288889             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  288890             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  288891             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  288892             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  288893             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  288894             :           being used with the AST File I/O mechanism.
  288895             :        */
  288896             :           virtual bool isInMemoryPool() override;
  288897             : 
  288898             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  288899             : 
  288900             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  288901             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  288902             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  288903             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  288904             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  288905             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  288906             :           being used with the AST File I/O mechanism.
  288907             :        */
  288908             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  288909             : 
  288910             :       // DQ (4/30/2006): Modified to be a const function.
  288911             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  288912             : 
  288913             :           This functions is part of general support for many possible tools to operate 
  288914             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  288915             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  288916             :           less than the set of pointers used by the AST file I/O. This is part of
  288917             :           work implemented by Andreas, and support tools such as the AST graph generation.
  288918             : 
  288919             :           \warning This function can return unexpected data members and thus the 
  288920             :                    order and the number of elements is unpredicable and subject 
  288921             :                    to change.
  288922             : 
  288923             :           \returns STL vector of pairs of SgNode* and strings
  288924             :        */
  288925             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  288926             : 
  288927             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  288928             : 
  288929             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  288930             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  288931             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  288932             : 
  288933             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  288934             :                    and subject to change.
  288935             :        */
  288936             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  288937             : 
  288938             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  288939             : 
  288940             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  288941             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  288942             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  288943             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  288944             : 
  288945             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  288946             : 
  288947             :           \returns long
  288948             :        */
  288949             :           virtual long getChildIndex( SgNode* childNode ) const override;
  288950             : 
  288951             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  288952             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288953             :       /* \brief Constructor for use by AST File I/O Mechanism
  288954             : 
  288955             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  288956             :           which obtained via fast binary file I/O from disk.
  288957             :        */
  288958             :        // SgVoidVal( SgVoidValStorageClass& source );
  288959             : 
  288960             : 
  288961             : 
  288962             : 
  288963             : 
  288964             :  // JH (10/24/2005): methods added to support the ast file IO
  288965             :     private:
  288966             : 
  288967             :       /* name AST Memory Allocation Support Functions
  288968             :           \brief Memory allocations support....
  288969             : 
  288970             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  288971             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  288972             :           and support the AST File I/O Mechanism.
  288973             :        */
  288974             :       /* */
  288975             : 
  288976             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  288977             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  288978             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  288979             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  288980             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  288981             :           a correspinding one in the AST_FILE_IO class!
  288982             :        */
  288983             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  288984             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288985             :       /* \brief Typedef used for low level memory access.
  288986             :        */
  288987             :        // typedef unsigned char* TestType;
  288988             : 
  288989             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  288990             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  288991             :       /* \brief Typedef used to hold memory addresses as values.
  288992             :        */
  288993             :        // typedef unsigned long  AddressType;
  288994             : 
  288995             : 
  288996             : 
  288997             :        // necessary, to have direct access to the p_freepointer and the private methods !
  288998             :       /*! \brief friend class declaration to support AST File I/O */
  288999             :           friend class AST_FILE_IO;
  289000             : 
  289001             :       /*! \brief friend class declaration to support AST File I/O */
  289002             :           friend class SgVoidValStorageClass;
  289003             : 
  289004             :       /*! \brief friend class declaration to support AST File I/O */
  289005             :           friend class AstSpecificDataManagingClass;
  289006             : 
  289007             :       /*! \brief friend class declaration to support AST File I/O */
  289008             :           friend class AstSpecificDataManagingClassStorageClass;
  289009             :     public:
  289010             :       /*! \brief IR node constructor to support AST File I/O */
  289011             :           SgVoidVal( const SgVoidValStorageClass& source );
  289012             : 
  289013             :  // private: // JJW hack
  289014             :        /*
  289015             :           name AST Memory Allocation Support Variables
  289016             :           Memory allocations support variables 
  289017             : 
  289018             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  289019             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  289020             :           and support the AST File I/O Mechanism.
  289021             :        */
  289022             :       /* */
  289023             : 
  289024             :     public:
  289025             : 
  289026             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  289027             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  289028             :       // virtual SgNode* addRegExpAttribute();
  289029             :       /*! \brief Support for AST matching using regular expression.
  289030             : 
  289031             :           This support is incomplete and the subject of current research to define 
  289032             :           RegEx trees to support inexact matching.
  289033             :        */
  289034             :           SgVoidVal* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  289035             : 
  289036             : // *** COMMON CODE SECTION ENDS HERE ***
  289037             : 
  289038             : 
  289039             : // End of memberFunctionString
  289040             : // Start of memberFunctionString
  289041             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  289042             : 
  289043             :      // the generated cast function
  289044             :      // friend ROSE_DLL_API SgVoidVal* isSgVoidVal ( SgNode* s );
  289045             : 
  289046             :           typedef SgValueExp base_node_type;
  289047             : 
  289048             : 
  289049             : // End of memberFunctionString
  289050             : // Start of memberFunctionString
  289051             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289052             : 
  289053             :           SgType* get_type() const override;
  289054             : 
  289055             : 
  289056             : // End of memberFunctionString
  289057             : // Start of memberFunctionString
  289058             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289059             : 
  289060             :           void post_construction_initialization() override;
  289061             : 
  289062             : 
  289063             : // End of memberFunctionString
  289064             : 
  289065             : 
  289066             :      public: 
  289067             :          virtual ~SgVoidVal();
  289068             : 
  289069             : 
  289070             :      public: 
  289071             :          SgVoidVal(Sg_File_Info* startOfConstruct ); 
  289072             :          SgVoidVal(); 
  289073             : 
  289074             :     protected:
  289075             : 
  289076             :     friend struct Rose::Traits::generated::describe_node_t<SgVoidVal>;
  289077             : 
  289078             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289079             : 
  289080             : 
  289081             :    };
  289082             : #endif
  289083             : 
  289084             : // postdeclarations for SgVoidVal
  289085             : 
  289086             : /* #line 289087 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289087             : 
  289088             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  289089             : 
  289090             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289091             : 
  289092             : 
  289093             : /* #line 289094 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289094             : 
  289095             : 
  289096             : 
  289097             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289098             : 
  289099             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  289100             : //      This code is automatically generated for each 
  289101             : //      terminal and non-terminal within the defined 
  289102             : //      grammar.  There is a simple way to change the 
  289103             : //      code to fix bugs etc.  See the ROSE README file
  289104             : //      for directions.
  289105             : 
  289106             : // tps: (02/22/2010): Adding DLL export requirements
  289107             : #include "rosedll.h"
  289108             : 
  289109             : // predeclarations for SgCallExpression
  289110             : 
  289111             : /* #line 289112 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289112             : 
  289113             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  289114             : 
  289115             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289116             : 
  289117             : #if 1
  289118             : // Class Definition for SgCallExpression
  289119             : class ROSE_DLL_API SgCallExpression  : public SgExpression
  289120             :    {
  289121             :      public:
  289122             : 
  289123             : 
  289124             : /* #line 289125 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289125             : 
  289126             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  289127             : // Start of memberFunctionString
  289128             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289129             : 
  289130             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  289131             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  289132             : 
  289133             : 
  289134             : // End of memberFunctionString
  289135             : // Start of memberFunctionString
  289136             : /* #line 731 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289137             : 
  289138             : /* #line 196 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289139             : 
  289140             :           void append_arg(SgExpression* what);
  289141             :        // void insert_arg(const SgExpression::iterator & where, SgExpression* what);
  289142             :        // void insert_arg(const SgExpressionPtrList::iterator & where, SgExpression* what);
  289143             : 
  289144             : 
  289145             : 
  289146             : 
  289147             : // End of memberFunctionString
  289148             : // Start of memberFunctionString
  289149             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  289150             : 
  289151             : // *** COMMON CODE SECTION BEGINS HERE ***
  289152             : 
  289153             :     public:
  289154             : 
  289155             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  289156             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  289157             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  289158             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  289159             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  289160             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  289161             : 
  289162             :       /*! \brief returns a string representing the class name */
  289163             :           virtual std::string class_name() const override;
  289164             : 
  289165             :       /*! \brief returns new style SageIII enum values */
  289166             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  289167             : 
  289168             :       /*! \brief static variant value */
  289169             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  289170             :        // static const VariantT static_variant = V_SgCallExpression;
  289171             :           enum { static_variant = V_SgCallExpression };
  289172             : 
  289173             :        /* the generated cast function */
  289174             :       /*! \brief Casts pointer from base class to derived class */
  289175             :           ROSE_DLL_API friend       SgCallExpression* isSgCallExpression(       SgNode * s );
  289176             : 
  289177             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  289178             :           ROSE_DLL_API friend const SgCallExpression* isSgCallExpression( const SgNode * s );
  289179             : 
  289180             :      // ******************************************
  289181             :      // * Memory Pool / New / Delete
  289182             :      // ******************************************
  289183             : 
  289184             :      public:
  289185             :           /// \private
  289186             :           static const unsigned pool_size; //
  289187             :           /// \private
  289188             :           static std::vector<unsigned char *> pools; //
  289189             :           /// \private
  289190             :           static SgCallExpression * next_node; // 
  289191             : 
  289192             :           /// \private
  289193             :           static unsigned long initializeStorageClassArray(SgCallExpressionStorageClass *); //
  289194             : 
  289195             :           /// \private
  289196             :           static void clearMemoryPool(); //
  289197             :           static void deleteMemoryPool(); //
  289198             : 
  289199             :           /// \private
  289200             :           static void extendMemoryPoolForFileIO(); //
  289201             : 
  289202             :           /// \private
  289203             :           static SgCallExpression * getPointerFromGlobalIndex(unsigned long); //
  289204             :           /// \private
  289205             :           static SgCallExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  289206             : 
  289207             :           /// \private
  289208             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  289209             :           /// \private
  289210             :           static void resetValidFreepointers(); //
  289211             :           /// \private
  289212             :           static unsigned long getNumberOfLastValidPointer(); //
  289213             : 
  289214             : 
  289215             : #if defined(INLINE_FUNCTIONS)
  289216             :       /*! \brief returns pointer to newly allocated IR node */
  289217             :           inline void *operator new (size_t size);
  289218             : #else
  289219             :       /*! \brief returns pointer to newly allocated IR node */
  289220             :           void *operator new (size_t size);
  289221             : #endif
  289222             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  289223             :           void operator delete (void* pointer, size_t size);
  289224             : 
  289225             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  289226           0 :           void operator delete (void* pointer)
  289227             :              {
  289228             :             // This is the generated delete operator...
  289229           0 :                SgCallExpression::operator delete (pointer,sizeof(SgCallExpression));
  289230             :              }
  289231             : 
  289232             :       /*! \brief Returns the total number of IR nodes of this type */
  289233             :           static size_t numberOfNodes();
  289234             : 
  289235             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  289236             :           static size_t memoryUsage();
  289237             : 
  289238             :       // End of scope which started in IR nodes specific code 
  289239             :       /* */
  289240             : 
  289241             :       /* name Internal Functions
  289242             :           \brief Internal functions ... incomplete-documentation
  289243             : 
  289244             :           These functions have been made public as part of the design, but they are suggested for internal use 
  289245             :           or by particularly knowledgeable users for specialized tools or applications.
  289246             : 
  289247             :           \internal We could not make these private because they are required by user for special purposes. And 
  289248             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  289249             :          
  289250             :        */
  289251             : 
  289252             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  289253             :        // overridden in every class by *generated* implementation
  289254             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  289255             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  289256             :        // MS: 06/28/02 container of names of variables or container indices 
  289257             :        // used used in the traversal to access AST successor nodes
  289258             :        // overridden in every class by *generated* implementation
  289259             :       /*! \brief container of names of variables or container indices used used in the traversal
  289260             :           to access AST successor nodes overridden in every class by *generated* implementation */
  289261             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  289262             : 
  289263             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  289264             :        // than all the vector copies. The implementation for these functions is generated for each class.
  289265             :       /*! \brief return number of children in the traversal successor list */
  289266             :           virtual size_t get_numberOfTraversalSuccessors() override;
  289267             :       /*! \brief index-based access to traversal successors by index number */
  289268             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  289269             :       /*! \brief index-based access to traversal successors by child node */
  289270             :           virtual size_t get_childIndex(SgNode *child) override;
  289271             : 
  289272             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  289273             :        // MS: 08/16/2002 method for generating RTI information
  289274             :       /*! \brief return C++ Runtime-Time-Information */
  289275             :           virtual RTIReturnType roseRTI() override;
  289276             : #endif
  289277             :       /* */
  289278             : 
  289279             : 
  289280             : 
  289281             :       /* name Deprecated Functions
  289282             :           \brief Deprecated functions ... incomplete-documentation
  289283             : 
  289284             :           These functions have been deprecated from use.
  289285             :        */
  289286             :       /* */
  289287             : 
  289288             :       /*! returns a C style string (char*) representing the class name */
  289289             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  289290             : 
  289291             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  289292             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  289293             : #if 0
  289294             :       /*! returns old style Sage II enum values */
  289295             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  289296             :       /*! returns old style Sage II enum values */
  289297             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  289298             : #endif
  289299             :       /* */
  289300             : 
  289301             : 
  289302             : 
  289303             : 
  289304             :      public:
  289305             :       /* name Traversal Support Functions
  289306             :           \brief Traversal support functions ... incomplete-documentation
  289307             : 
  289308             :           These functions have been made public as part of the design, but they are suggested for internal use 
  289309             :           or by particularly knowledgable users for specialized tools or applications.
  289310             :        */
  289311             :       /* */
  289312             : 
  289313             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  289314             :        // (inferior to ROSE traversal mechanism, experimental).
  289315             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  289316             :        */
  289317             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  289318             : 
  289319             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  289320             :       /*! \brief support for the classic visitor pattern done in GoF */
  289321             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  289322             : 
  289323             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  289324             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  289325             :        */
  289326             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  289327             : 
  289328             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  289329             :        */
  289330             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  289331             : 
  289332             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  289333             :        // This traversal helps support internal tools that call static member functions.
  289334             :        // note: this function operates on the memory pools.
  289335             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  289336             :        */
  289337             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  289338             :       /* */
  289339             : 
  289340             : 
  289341             :      public:
  289342             :       /* name Memory Allocation Functions
  289343             :           \brief Memory allocations functions ... incomplete-documentation
  289344             : 
  289345             :           These functions have been made public as part of the design, but they are suggested for internal use 
  289346             :           or by particularly knowledgable users for specialized tools or applications.
  289347             :        */
  289348             :       /* */
  289349             : 
  289350             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  289351             : 
  289352             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  289353             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  289354             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  289355             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  289356             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  289357             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  289358             :           being used with the AST File I/O mechanism.
  289359             :        */
  289360             :           virtual bool isInMemoryPool() override;
  289361             : 
  289362             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  289363             : 
  289364             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  289365             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  289366             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  289367             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  289368             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  289369             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  289370             :           being used with the AST File I/O mechanism.
  289371             :        */
  289372             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  289373             : 
  289374             :       // DQ (4/30/2006): Modified to be a const function.
  289375             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  289376             : 
  289377             :           This functions is part of general support for many possible tools to operate 
  289378             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  289379             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  289380             :           less than the set of pointers used by the AST file I/O. This is part of
  289381             :           work implemented by Andreas, and support tools such as the AST graph generation.
  289382             : 
  289383             :           \warning This function can return unexpected data members and thus the 
  289384             :                    order and the number of elements is unpredicable and subject 
  289385             :                    to change.
  289386             : 
  289387             :           \returns STL vector of pairs of SgNode* and strings
  289388             :        */
  289389             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  289390             : 
  289391             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  289392             : 
  289393             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  289394             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  289395             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  289396             : 
  289397             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  289398             :                    and subject to change.
  289399             :        */
  289400             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  289401             : 
  289402             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  289403             : 
  289404             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  289405             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  289406             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  289407             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  289408             : 
  289409             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  289410             : 
  289411             :           \returns long
  289412             :        */
  289413             :           virtual long getChildIndex( SgNode* childNode ) const override;
  289414             : 
  289415             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  289416             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  289417             :       /* \brief Constructor for use by AST File I/O Mechanism
  289418             : 
  289419             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  289420             :           which obtained via fast binary file I/O from disk.
  289421             :        */
  289422             :        // SgCallExpression( SgCallExpressionStorageClass& source );
  289423             : 
  289424             : 
  289425             : 
  289426             : 
  289427             : 
  289428             :  // JH (10/24/2005): methods added to support the ast file IO
  289429             :     private:
  289430             : 
  289431             :       /* name AST Memory Allocation Support Functions
  289432             :           \brief Memory allocations support....
  289433             : 
  289434             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  289435             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  289436             :           and support the AST File I/O Mechanism.
  289437             :        */
  289438             :       /* */
  289439             : 
  289440             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  289441             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  289442             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  289443             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  289444             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  289445             :           a correspinding one in the AST_FILE_IO class!
  289446             :        */
  289447             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  289448             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  289449             :       /* \brief Typedef used for low level memory access.
  289450             :        */
  289451             :        // typedef unsigned char* TestType;
  289452             : 
  289453             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  289454             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  289455             :       /* \brief Typedef used to hold memory addresses as values.
  289456             :        */
  289457             :        // typedef unsigned long  AddressType;
  289458             : 
  289459             : 
  289460             : 
  289461             :        // necessary, to have direct access to the p_freepointer and the private methods !
  289462             :       /*! \brief friend class declaration to support AST File I/O */
  289463             :           friend class AST_FILE_IO;
  289464             : 
  289465             :       /*! \brief friend class declaration to support AST File I/O */
  289466             :           friend class SgCallExpressionStorageClass;
  289467             : 
  289468             :       /*! \brief friend class declaration to support AST File I/O */
  289469             :           friend class AstSpecificDataManagingClass;
  289470             : 
  289471             :       /*! \brief friend class declaration to support AST File I/O */
  289472             :           friend class AstSpecificDataManagingClassStorageClass;
  289473             :     public:
  289474             :       /*! \brief IR node constructor to support AST File I/O */
  289475             :           SgCallExpression( const SgCallExpressionStorageClass& source );
  289476             : 
  289477             :  // private: // JJW hack
  289478             :        /*
  289479             :           name AST Memory Allocation Support Variables
  289480             :           Memory allocations support variables 
  289481             : 
  289482             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  289483             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  289484             :           and support the AST File I/O Mechanism.
  289485             :        */
  289486             :       /* */
  289487             : 
  289488             :     public:
  289489             : 
  289490             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  289491             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  289492             :       // virtual SgNode* addRegExpAttribute();
  289493             :       /*! \brief Support for AST matching using regular expression.
  289494             : 
  289495             :           This support is incomplete and the subject of current research to define 
  289496             :           RegEx trees to support inexact matching.
  289497             :        */
  289498             :           SgCallExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  289499             : 
  289500             : // *** COMMON CODE SECTION ENDS HERE ***
  289501             : 
  289502             : 
  289503             : // End of memberFunctionString
  289504             : // Start of memberFunctionString
  289505             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  289506             : 
  289507             :      // the generated cast function
  289508             :      // friend ROSE_DLL_API SgCallExpression* isSgCallExpression ( SgNode* s );
  289509             : 
  289510             :           typedef SgExpression base_node_type;
  289511             : 
  289512             : 
  289513             : // End of memberFunctionString
  289514             : // Start of memberFunctionString
  289515             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289516             : 
  289517             :           SgType* get_type() const override;
  289518             : 
  289519             : 
  289520             : // End of memberFunctionString
  289521             : // Start of memberFunctionString
  289522             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289523             : 
  289524             :           void post_construction_initialization() override;
  289525             : 
  289526             : 
  289527             : // End of memberFunctionString
  289528             : 
  289529             :      public: 
  289530             :          SgExpression* get_function() const;
  289531             :          void set_function(SgExpression* function);
  289532             : 
  289533             :      public: 
  289534             :          SgExprListExp* get_args() const;
  289535             :          void set_args(SgExprListExp* args);
  289536             : 
  289537             : 
  289538             : 
  289539             :      public: 
  289540             :          virtual ~SgCallExpression();
  289541             : 
  289542             : 
  289543             :      public: 
  289544             :          SgCallExpression(Sg_File_Info* startOfConstruct , SgExpression* function = NULL, SgExprListExp* args = NULL, SgType* expression_type = NULL); 
  289545             :          SgCallExpression(SgExpression* function, SgExprListExp* args, SgType* expression_type); 
  289546             : 
  289547             :     protected:
  289548             : // Start of memberFunctionString
  289549             : SgExpression* p_function;
  289550             :           
  289551             : // End of memberFunctionString
  289552             : // Start of memberFunctionString
  289553             : SgExprListExp* p_args;
  289554             :           
  289555             : // End of memberFunctionString
  289556             : // Start of memberFunctionString
  289557             : SgType* p_expression_type;
  289558             :           
  289559             : // End of memberFunctionString
  289560             : 
  289561             :     friend struct Rose::Traits::generated::describe_node_t<SgCallExpression>;
  289562             :     friend struct Rose::Traits::generated::describe_field_t<SgCallExpression, SgExpression*,&SgCallExpression::p_function>;
  289563             :     friend struct Rose::Traits::generated::describe_field_t<SgCallExpression, SgExprListExp*,&SgCallExpression::p_args>;
  289564             :     friend struct Rose::Traits::generated::describe_field_t<SgCallExpression, SgType*,&SgCallExpression::p_expression_type>;
  289565             : 
  289566             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289567             : 
  289568             : 
  289569             :    };
  289570             : #endif
  289571             : 
  289572             : // postdeclarations for SgCallExpression
  289573             : 
  289574             : /* #line 289575 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289575             : 
  289576             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  289577             : 
  289578             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289579             : 
  289580             : 
  289581             : /* #line 289582 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289582             : 
  289583             : 
  289584             : 
  289585             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289586             : 
  289587             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  289588             : //      This code is automatically generated for each 
  289589             : //      terminal and non-terminal within the defined 
  289590             : //      grammar.  There is a simple way to change the 
  289591             : //      code to fix bugs etc.  See the ROSE README file
  289592             : //      for directions.
  289593             : 
  289594             : // tps: (02/22/2010): Adding DLL export requirements
  289595             : #include "rosedll.h"
  289596             : 
  289597             : // predeclarations for SgFunctionCallExp
  289598             : 
  289599             : /* #line 289600 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289600             : 
  289601             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  289602             : 
  289603             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  289604             : 
  289605             : #if 1
  289606             : // Class Definition for SgFunctionCallExp
  289607             : class ROSE_DLL_API SgFunctionCallExp  : public SgCallExpression
  289608             :    {
  289609             :      public:
  289610             : 
  289611             : 
  289612             : /* #line 289613 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  289613             : 
  289614             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  289615             : // Start of memberFunctionString
  289616             : /* #line 735 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  289617             : 
  289618             : 
  289619             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  289620             :           virtual unsigned int cfgIndexForEnd() const override;
  289621             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  289622             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  289623             : #endif
  289624             : 
  289625             :       /** Returns the associated function declaration, if it can be resolved statically. In some cases,
  289626             :       * such as function pointers and virtual functions, the function called cannot be resolved statically;
  289627             :       * for those cases this function returns NULL. The actual function expression is available through
  289628             :       * get_function(). */
  289629             :           SgFunctionDeclaration* getAssociatedFunctionDeclaration() const;
  289630             : 
  289631             :       /** Returns the associated function symbol, if it can be resolved statically. In some cases,
  289632             :       * such as function pointers and virtual functions, the function called cannot be resolved statically;
  289633             :       * for those cases this function returns NULL. The actual function expression is available through
  289634             :       * get_function(). */
  289635             :           SgFunctionSymbol* getAssociatedFunctionSymbol() const;
  289636             : 
  289637             :        // get lvalue
  289638             :           virtual bool isLValue() const override;
  289639             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  289640             : 
  289641             : 
  289642             : 
  289643             : // End of memberFunctionString
  289644             : // Start of memberFunctionString
  289645             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  289646             : 
  289647             : // *** COMMON CODE SECTION BEGINS HERE ***
  289648             : 
  289649             :     public:
  289650             : 
  289651             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  289652             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  289653             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  289654             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  289655             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  289656             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  289657             : 
  289658             :       /*! \brief returns a string representing the class name */
  289659             :           virtual std::string class_name() const override;
  289660             : 
  289661             :       /*! \brief returns new style SageIII enum values */
  289662             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  289663             : 
  289664             :       /*! \brief static variant value */
  289665             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  289666             :        // static const VariantT static_variant = V_SgFunctionCallExp;
  289667             :           enum { static_variant = V_SgFunctionCallExp };
  289668             : 
  289669             :        /* the generated cast function */
  289670             :       /*! \brief Casts pointer from base class to derived class */
  289671             :           ROSE_DLL_API friend       SgFunctionCallExp* isSgFunctionCallExp(       SgNode * s );
  289672             : 
  289673             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  289674             :           ROSE_DLL_API friend const SgFunctionCallExp* isSgFunctionCallExp( const SgNode * s );
  289675             : 
  289676             :      // ******************************************
  289677             :      // * Memory Pool / New / Delete
  289678             :      // ******************************************
  289679             : 
  289680             :      public:
  289681             :           /// \private
  289682             :           static const unsigned pool_size; //
  289683             :           /// \private
  289684             :           static std::vector<unsigned char *> pools; //
  289685             :           /// \private
  289686             :           static SgFunctionCallExp * next_node; // 
  289687             : 
  289688             :           /// \private
  289689             :           static unsigned long initializeStorageClassArray(SgFunctionCallExpStorageClass *); //
  289690             : 
  289691             :           /// \private
  289692             :           static void clearMemoryPool(); //
  289693             :           static void deleteMemoryPool(); //
  289694             : 
  289695             :           /// \private
  289696             :           static void extendMemoryPoolForFileIO(); //
  289697             : 
  289698             :           /// \private
  289699             :           static SgFunctionCallExp * getPointerFromGlobalIndex(unsigned long); //
  289700             :           /// \private
  289701             :           static SgFunctionCallExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  289702             : 
  289703             :           /// \private
  289704             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  289705             :           /// \private
  289706             :           static void resetValidFreepointers(); //
  289707             :           /// \private
  289708             :           static unsigned long getNumberOfLastValidPointer(); //
  289709             : 
  289710             : 
  289711             : #if defined(INLINE_FUNCTIONS)
  289712             :       /*! \brief returns pointer to newly allocated IR node */
  289713             :           inline void *operator new (size_t size);
  289714             : #else
  289715             :       /*! \brief returns pointer to newly allocated IR node */
  289716             :           void *operator new (size_t size);
  289717             : #endif
  289718             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  289719             :           void operator delete (void* pointer, size_t size);
  289720             : 
  289721             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  289722        6889 :           void operator delete (void* pointer)
  289723             :              {
  289724             :             // This is the generated delete operator...
  289725        6889 :                SgFunctionCallExp::operator delete (pointer,sizeof(SgFunctionCallExp));
  289726             :              }
  289727             : 
  289728             :       /*! \brief Returns the total number of IR nodes of this type */
  289729             :           static size_t numberOfNodes();
  289730             : 
  289731             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  289732             :           static size_t memoryUsage();
  289733             : 
  289734             :       // End of scope which started in IR nodes specific code 
  289735             :       /* */
  289736             : 
  289737             :       /* name Internal Functions
  289738             :           \brief Internal functions ... incomplete-documentation
  289739             : 
  289740             :           These functions have been made public as part of the design, but they are suggested for internal use 
  289741             :           or by particularly knowledgeable users for specialized tools or applications.
  289742             : 
  289743             :           \internal We could not make these private because they are required by user for special purposes. And 
  289744             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  289745             :          
  289746             :        */
  289747             : 
  289748             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  289749             :        // overridden in every class by *generated* implementation
  289750             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  289751             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  289752             :        // MS: 06/28/02 container of names of variables or container indices 
  289753             :        // used used in the traversal to access AST successor nodes
  289754             :        // overridden in every class by *generated* implementation
  289755             :       /*! \brief container of names of variables or container indices used used in the traversal
  289756             :           to access AST successor nodes overridden in every class by *generated* implementation */
  289757             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  289758             : 
  289759             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  289760             :        // than all the vector copies. The implementation for these functions is generated for each class.
  289761             :       /*! \brief return number of children in the traversal successor list */
  289762             :           virtual size_t get_numberOfTraversalSuccessors() override;
  289763             :       /*! \brief index-based access to traversal successors by index number */
  289764             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  289765             :       /*! \brief index-based access to traversal successors by child node */
  289766             :           virtual size_t get_childIndex(SgNode *child) override;
  289767             : 
  289768             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  289769             :        // MS: 08/16/2002 method for generating RTI information
  289770             :       /*! \brief return C++ Runtime-Time-Information */
  289771             :           virtual RTIReturnType roseRTI() override;
  289772             : #endif
  289773             :       /* */
  289774             : 
  289775             : 
  289776             : 
  289777             :       /* name Deprecated Functions
  289778             :           \brief Deprecated functions ... incomplete-documentation
  289779             : 
  289780             :           These functions have been deprecated from use.
  289781             :        */
  289782             :       /* */
  289783             : 
  289784             :       /*! returns a C style string (char*) representing the class name */
  289785             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  289786             : 
  289787             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  289788             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  289789             : #if 0
  289790             :       /*! returns old style Sage II enum values */
  289791             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  289792             :       /*! returns old style Sage II enum values */
  289793             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  289794             : #endif
  289795             :       /* */
  289796             : 
  289797             : 
  289798             : 
  289799             : 
  289800             :      public:
  289801             :       /* name Traversal Support Functions
  289802             :           \brief Traversal support functions ... incomplete-documentation
  289803             : 
  289804             :           These functions have been made public as part of the design, but they are suggested for internal use 
  289805             :           or by particularly knowledgable users for specialized tools or applications.
  289806             :        */
  289807             :       /* */
  289808             : 
  289809             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  289810             :        // (inferior to ROSE traversal mechanism, experimental).
  289811             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  289812             :        */
  289813             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  289814             : 
  289815             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  289816             :       /*! \brief support for the classic visitor pattern done in GoF */
  289817             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  289818             : 
  289819             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  289820             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  289821             :        */
  289822             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  289823             : 
  289824             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  289825             :        */
  289826             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  289827             : 
  289828             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  289829             :        // This traversal helps support internal tools that call static member functions.
  289830             :        // note: this function operates on the memory pools.
  289831             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  289832             :        */
  289833             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  289834             :       /* */
  289835             : 
  289836             : 
  289837             :      public:
  289838             :       /* name Memory Allocation Functions
  289839             :           \brief Memory allocations functions ... incomplete-documentation
  289840             : 
  289841             :           These functions have been made public as part of the design, but they are suggested for internal use 
  289842             :           or by particularly knowledgable users for specialized tools or applications.
  289843             :        */
  289844             :       /* */
  289845             : 
  289846             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  289847             : 
  289848             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  289849             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  289850             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  289851             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  289852             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  289853             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  289854             :           being used with the AST File I/O mechanism.
  289855             :        */
  289856             :           virtual bool isInMemoryPool() override;
  289857             : 
  289858             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  289859             : 
  289860             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  289861             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  289862             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  289863             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  289864             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  289865             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  289866             :           being used with the AST File I/O mechanism.
  289867             :        */
  289868             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  289869             : 
  289870             :       // DQ (4/30/2006): Modified to be a const function.
  289871             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  289872             : 
  289873             :           This functions is part of general support for many possible tools to operate 
  289874             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  289875             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  289876             :           less than the set of pointers used by the AST file I/O. This is part of
  289877             :           work implemented by Andreas, and support tools such as the AST graph generation.
  289878             : 
  289879             :           \warning This function can return unexpected data members and thus the 
  289880             :                    order and the number of elements is unpredicable and subject 
  289881             :                    to change.
  289882             : 
  289883             :           \returns STL vector of pairs of SgNode* and strings
  289884             :        */
  289885             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  289886             : 
  289887             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  289888             : 
  289889             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  289890             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  289891             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  289892             : 
  289893             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  289894             :                    and subject to change.
  289895             :        */
  289896             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  289897             : 
  289898             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  289899             : 
  289900             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  289901             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  289902             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  289903             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  289904             : 
  289905             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  289906             : 
  289907             :           \returns long
  289908             :        */
  289909             :           virtual long getChildIndex( SgNode* childNode ) const override;
  289910             : 
  289911             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  289912             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  289913             :       /* \brief Constructor for use by AST File I/O Mechanism
  289914             : 
  289915             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  289916             :           which obtained via fast binary file I/O from disk.
  289917             :        */
  289918             :        // SgFunctionCallExp( SgFunctionCallExpStorageClass& source );
  289919             : 
  289920             : 
  289921             : 
  289922             : 
  289923             : 
  289924             :  // JH (10/24/2005): methods added to support the ast file IO
  289925             :     private:
  289926             : 
  289927             :       /* name AST Memory Allocation Support Functions
  289928             :           \brief Memory allocations support....
  289929             : 
  289930             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  289931             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  289932             :           and support the AST File I/O Mechanism.
  289933             :        */
  289934             :       /* */
  289935             : 
  289936             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  289937             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  289938             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  289939             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  289940             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  289941             :           a correspinding one in the AST_FILE_IO class!
  289942             :        */
  289943             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  289944             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  289945             :       /* \brief Typedef used for low level memory access.
  289946             :        */
  289947             :        // typedef unsigned char* TestType;
  289948             : 
  289949             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  289950             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  289951             :       /* \brief Typedef used to hold memory addresses as values.
  289952             :        */
  289953             :        // typedef unsigned long  AddressType;
  289954             : 
  289955             : 
  289956             : 
  289957             :        // necessary, to have direct access to the p_freepointer and the private methods !
  289958             :       /*! \brief friend class declaration to support AST File I/O */
  289959             :           friend class AST_FILE_IO;
  289960             : 
  289961             :       /*! \brief friend class declaration to support AST File I/O */
  289962             :           friend class SgFunctionCallExpStorageClass;
  289963             : 
  289964             :       /*! \brief friend class declaration to support AST File I/O */
  289965             :           friend class AstSpecificDataManagingClass;
  289966             : 
  289967             :       /*! \brief friend class declaration to support AST File I/O */
  289968             :           friend class AstSpecificDataManagingClassStorageClass;
  289969             :     public:
  289970             :       /*! \brief IR node constructor to support AST File I/O */
  289971             :           SgFunctionCallExp( const SgFunctionCallExpStorageClass& source );
  289972             : 
  289973             :  // private: // JJW hack
  289974             :        /*
  289975             :           name AST Memory Allocation Support Variables
  289976             :           Memory allocations support variables 
  289977             : 
  289978             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  289979             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  289980             :           and support the AST File I/O Mechanism.
  289981             :        */
  289982             :       /* */
  289983             : 
  289984             :     public:
  289985             : 
  289986             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  289987             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  289988             :       // virtual SgNode* addRegExpAttribute();
  289989             :       /*! \brief Support for AST matching using regular expression.
  289990             : 
  289991             :           This support is incomplete and the subject of current research to define 
  289992             :           RegEx trees to support inexact matching.
  289993             :        */
  289994             :           SgFunctionCallExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  289995             : 
  289996             : // *** COMMON CODE SECTION ENDS HERE ***
  289997             : 
  289998             : 
  289999             : // End of memberFunctionString
  290000             : // Start of memberFunctionString
  290001             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  290002             : 
  290003             :      // the generated cast function
  290004             :      // friend ROSE_DLL_API SgFunctionCallExp* isSgFunctionCallExp ( SgNode* s );
  290005             : 
  290006             :           typedef SgCallExpression base_node_type;
  290007             : 
  290008             : 
  290009             : // End of memberFunctionString
  290010             : // Start of memberFunctionString
  290011             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290012             : 
  290013             :           SgType* get_type() const override;
  290014             : 
  290015             : 
  290016             : // End of memberFunctionString
  290017             : // Start of memberFunctionString
  290018             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290019             : 
  290020             :           void post_construction_initialization() override;
  290021             : 
  290022             : 
  290023             : // End of memberFunctionString
  290024             : 
  290025             :      public: 
  290026             :          bool get_uses_operator_syntax() const;
  290027             :          void set_uses_operator_syntax(bool uses_operator_syntax);
  290028             : 
  290029             : 
  290030             :      public: 
  290031             :          virtual ~SgFunctionCallExp();
  290032             : 
  290033             : 
  290034             :      public: 
  290035             :          SgFunctionCallExp(Sg_File_Info* startOfConstruct , SgExpression* function = NULL, SgExprListExp* args = NULL, SgType* expression_type = NULL); 
  290036             :          SgFunctionCallExp(SgExpression* function, SgExprListExp* args, SgType* expression_type); 
  290037             : 
  290038             :     protected:
  290039             : // Start of memberFunctionString
  290040             : bool p_uses_operator_syntax;
  290041             :           
  290042             : // End of memberFunctionString
  290043             : 
  290044             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionCallExp>;
  290045             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionCallExp, bool,&SgFunctionCallExp::p_uses_operator_syntax>;
  290046             : 
  290047             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290048             : 
  290049             : 
  290050             :    };
  290051             : #endif
  290052             : 
  290053             : // postdeclarations for SgFunctionCallExp
  290054             : 
  290055             : /* #line 290056 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290056             : 
  290057             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  290058             : 
  290059             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290060             : 
  290061             : 
  290062             : /* #line 290063 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290063             : 
  290064             : 
  290065             : 
  290066             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290067             : 
  290068             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  290069             : //      This code is automatically generated for each 
  290070             : //      terminal and non-terminal within the defined 
  290071             : //      grammar.  There is a simple way to change the 
  290072             : //      code to fix bugs etc.  See the ROSE README file
  290073             : //      for directions.
  290074             : 
  290075             : // tps: (02/22/2010): Adding DLL export requirements
  290076             : #include "rosedll.h"
  290077             : 
  290078             : // predeclarations for SgCudaKernelCallExp
  290079             : 
  290080             : /* #line 290081 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290081             : 
  290082             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  290083             : 
  290084             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290085             : 
  290086             : #if 1
  290087             : // Class Definition for SgCudaKernelCallExp
  290088             : class ROSE_DLL_API SgCudaKernelCallExp  : public SgFunctionCallExp
  290089             :    {
  290090             :      public:
  290091             : 
  290092             : 
  290093             : /* #line 290094 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290094             : 
  290095             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  290096             : // Start of memberFunctionString
  290097             : /* #line 1896 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290098             : 
  290099             : 
  290100             : 
  290101             : // End of memberFunctionString
  290102             : // Start of memberFunctionString
  290103             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  290104             : 
  290105             : // *** COMMON CODE SECTION BEGINS HERE ***
  290106             : 
  290107             :     public:
  290108             : 
  290109             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  290110             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  290111             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  290112             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  290113             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  290114             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  290115             : 
  290116             :       /*! \brief returns a string representing the class name */
  290117             :           virtual std::string class_name() const override;
  290118             : 
  290119             :       /*! \brief returns new style SageIII enum values */
  290120             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  290121             : 
  290122             :       /*! \brief static variant value */
  290123             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  290124             :        // static const VariantT static_variant = V_SgCudaKernelCallExp;
  290125             :           enum { static_variant = V_SgCudaKernelCallExp };
  290126             : 
  290127             :        /* the generated cast function */
  290128             :       /*! \brief Casts pointer from base class to derived class */
  290129             :           ROSE_DLL_API friend       SgCudaKernelCallExp* isSgCudaKernelCallExp(       SgNode * s );
  290130             : 
  290131             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  290132             :           ROSE_DLL_API friend const SgCudaKernelCallExp* isSgCudaKernelCallExp( const SgNode * s );
  290133             : 
  290134             :      // ******************************************
  290135             :      // * Memory Pool / New / Delete
  290136             :      // ******************************************
  290137             : 
  290138             :      public:
  290139             :           /// \private
  290140             :           static const unsigned pool_size; //
  290141             :           /// \private
  290142             :           static std::vector<unsigned char *> pools; //
  290143             :           /// \private
  290144             :           static SgCudaKernelCallExp * next_node; // 
  290145             : 
  290146             :           /// \private
  290147             :           static unsigned long initializeStorageClassArray(SgCudaKernelCallExpStorageClass *); //
  290148             : 
  290149             :           /// \private
  290150             :           static void clearMemoryPool(); //
  290151             :           static void deleteMemoryPool(); //
  290152             : 
  290153             :           /// \private
  290154             :           static void extendMemoryPoolForFileIO(); //
  290155             : 
  290156             :           /// \private
  290157             :           static SgCudaKernelCallExp * getPointerFromGlobalIndex(unsigned long); //
  290158             :           /// \private
  290159             :           static SgCudaKernelCallExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  290160             : 
  290161             :           /// \private
  290162             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  290163             :           /// \private
  290164             :           static void resetValidFreepointers(); //
  290165             :           /// \private
  290166             :           static unsigned long getNumberOfLastValidPointer(); //
  290167             : 
  290168             : 
  290169             : #if defined(INLINE_FUNCTIONS)
  290170             :       /*! \brief returns pointer to newly allocated IR node */
  290171             :           inline void *operator new (size_t size);
  290172             : #else
  290173             :       /*! \brief returns pointer to newly allocated IR node */
  290174             :           void *operator new (size_t size);
  290175             : #endif
  290176             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  290177             :           void operator delete (void* pointer, size_t size);
  290178             : 
  290179             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  290180           0 :           void operator delete (void* pointer)
  290181             :              {
  290182             :             // This is the generated delete operator...
  290183           0 :                SgCudaKernelCallExp::operator delete (pointer,sizeof(SgCudaKernelCallExp));
  290184             :              }
  290185             : 
  290186             :       /*! \brief Returns the total number of IR nodes of this type */
  290187             :           static size_t numberOfNodes();
  290188             : 
  290189             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  290190             :           static size_t memoryUsage();
  290191             : 
  290192             :       // End of scope which started in IR nodes specific code 
  290193             :       /* */
  290194             : 
  290195             :       /* name Internal Functions
  290196             :           \brief Internal functions ... incomplete-documentation
  290197             : 
  290198             :           These functions have been made public as part of the design, but they are suggested for internal use 
  290199             :           or by particularly knowledgeable users for specialized tools or applications.
  290200             : 
  290201             :           \internal We could not make these private because they are required by user for special purposes. And 
  290202             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  290203             :          
  290204             :        */
  290205             : 
  290206             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  290207             :        // overridden in every class by *generated* implementation
  290208             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  290209             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  290210             :        // MS: 06/28/02 container of names of variables or container indices 
  290211             :        // used used in the traversal to access AST successor nodes
  290212             :        // overridden in every class by *generated* implementation
  290213             :       /*! \brief container of names of variables or container indices used used in the traversal
  290214             :           to access AST successor nodes overridden in every class by *generated* implementation */
  290215             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  290216             : 
  290217             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  290218             :        // than all the vector copies. The implementation for these functions is generated for each class.
  290219             :       /*! \brief return number of children in the traversal successor list */
  290220             :           virtual size_t get_numberOfTraversalSuccessors() override;
  290221             :       /*! \brief index-based access to traversal successors by index number */
  290222             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  290223             :       /*! \brief index-based access to traversal successors by child node */
  290224             :           virtual size_t get_childIndex(SgNode *child) override;
  290225             : 
  290226             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  290227             :        // MS: 08/16/2002 method for generating RTI information
  290228             :       /*! \brief return C++ Runtime-Time-Information */
  290229             :           virtual RTIReturnType roseRTI() override;
  290230             : #endif
  290231             :       /* */
  290232             : 
  290233             : 
  290234             : 
  290235             :       /* name Deprecated Functions
  290236             :           \brief Deprecated functions ... incomplete-documentation
  290237             : 
  290238             :           These functions have been deprecated from use.
  290239             :        */
  290240             :       /* */
  290241             : 
  290242             :       /*! returns a C style string (char*) representing the class name */
  290243             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  290244             : 
  290245             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  290246             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  290247             : #if 0
  290248             :       /*! returns old style Sage II enum values */
  290249             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  290250             :       /*! returns old style Sage II enum values */
  290251             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  290252             : #endif
  290253             :       /* */
  290254             : 
  290255             : 
  290256             : 
  290257             : 
  290258             :      public:
  290259             :       /* name Traversal Support Functions
  290260             :           \brief Traversal support functions ... incomplete-documentation
  290261             : 
  290262             :           These functions have been made public as part of the design, but they are suggested for internal use 
  290263             :           or by particularly knowledgable users for specialized tools or applications.
  290264             :        */
  290265             :       /* */
  290266             : 
  290267             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  290268             :        // (inferior to ROSE traversal mechanism, experimental).
  290269             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  290270             :        */
  290271             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  290272             : 
  290273             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  290274             :       /*! \brief support for the classic visitor pattern done in GoF */
  290275             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  290276             : 
  290277             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  290278             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  290279             :        */
  290280             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  290281             : 
  290282             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  290283             :        */
  290284             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  290285             : 
  290286             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  290287             :        // This traversal helps support internal tools that call static member functions.
  290288             :        // note: this function operates on the memory pools.
  290289             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  290290             :        */
  290291             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  290292             :       /* */
  290293             : 
  290294             : 
  290295             :      public:
  290296             :       /* name Memory Allocation Functions
  290297             :           \brief Memory allocations functions ... incomplete-documentation
  290298             : 
  290299             :           These functions have been made public as part of the design, but they are suggested for internal use 
  290300             :           or by particularly knowledgable users for specialized tools or applications.
  290301             :        */
  290302             :       /* */
  290303             : 
  290304             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  290305             : 
  290306             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  290307             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  290308             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  290309             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  290310             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  290311             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  290312             :           being used with the AST File I/O mechanism.
  290313             :        */
  290314             :           virtual bool isInMemoryPool() override;
  290315             : 
  290316             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  290317             : 
  290318             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  290319             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  290320             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  290321             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  290322             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  290323             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  290324             :           being used with the AST File I/O mechanism.
  290325             :        */
  290326             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  290327             : 
  290328             :       // DQ (4/30/2006): Modified to be a const function.
  290329             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  290330             : 
  290331             :           This functions is part of general support for many possible tools to operate 
  290332             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  290333             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  290334             :           less than the set of pointers used by the AST file I/O. This is part of
  290335             :           work implemented by Andreas, and support tools such as the AST graph generation.
  290336             : 
  290337             :           \warning This function can return unexpected data members and thus the 
  290338             :                    order and the number of elements is unpredicable and subject 
  290339             :                    to change.
  290340             : 
  290341             :           \returns STL vector of pairs of SgNode* and strings
  290342             :        */
  290343             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  290344             : 
  290345             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  290346             : 
  290347             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  290348             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  290349             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  290350             : 
  290351             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  290352             :                    and subject to change.
  290353             :        */
  290354             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  290355             : 
  290356             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  290357             : 
  290358             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  290359             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  290360             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  290361             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  290362             : 
  290363             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  290364             : 
  290365             :           \returns long
  290366             :        */
  290367             :           virtual long getChildIndex( SgNode* childNode ) const override;
  290368             : 
  290369             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  290370             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  290371             :       /* \brief Constructor for use by AST File I/O Mechanism
  290372             : 
  290373             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  290374             :           which obtained via fast binary file I/O from disk.
  290375             :        */
  290376             :        // SgCudaKernelCallExp( SgCudaKernelCallExpStorageClass& source );
  290377             : 
  290378             : 
  290379             : 
  290380             : 
  290381             : 
  290382             :  // JH (10/24/2005): methods added to support the ast file IO
  290383             :     private:
  290384             : 
  290385             :       /* name AST Memory Allocation Support Functions
  290386             :           \brief Memory allocations support....
  290387             : 
  290388             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  290389             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  290390             :           and support the AST File I/O Mechanism.
  290391             :        */
  290392             :       /* */
  290393             : 
  290394             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  290395             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  290396             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  290397             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  290398             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  290399             :           a correspinding one in the AST_FILE_IO class!
  290400             :        */
  290401             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  290402             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  290403             :       /* \brief Typedef used for low level memory access.
  290404             :        */
  290405             :        // typedef unsigned char* TestType;
  290406             : 
  290407             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  290408             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  290409             :       /* \brief Typedef used to hold memory addresses as values.
  290410             :        */
  290411             :        // typedef unsigned long  AddressType;
  290412             : 
  290413             : 
  290414             : 
  290415             :        // necessary, to have direct access to the p_freepointer and the private methods !
  290416             :       /*! \brief friend class declaration to support AST File I/O */
  290417             :           friend class AST_FILE_IO;
  290418             : 
  290419             :       /*! \brief friend class declaration to support AST File I/O */
  290420             :           friend class SgCudaKernelCallExpStorageClass;
  290421             : 
  290422             :       /*! \brief friend class declaration to support AST File I/O */
  290423             :           friend class AstSpecificDataManagingClass;
  290424             : 
  290425             :       /*! \brief friend class declaration to support AST File I/O */
  290426             :           friend class AstSpecificDataManagingClassStorageClass;
  290427             :     public:
  290428             :       /*! \brief IR node constructor to support AST File I/O */
  290429             :           SgCudaKernelCallExp( const SgCudaKernelCallExpStorageClass& source );
  290430             : 
  290431             :  // private: // JJW hack
  290432             :        /*
  290433             :           name AST Memory Allocation Support Variables
  290434             :           Memory allocations support variables 
  290435             : 
  290436             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  290437             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  290438             :           and support the AST File I/O Mechanism.
  290439             :        */
  290440             :       /* */
  290441             : 
  290442             :     public:
  290443             : 
  290444             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  290445             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  290446             :       // virtual SgNode* addRegExpAttribute();
  290447             :       /*! \brief Support for AST matching using regular expression.
  290448             : 
  290449             :           This support is incomplete and the subject of current research to define 
  290450             :           RegEx trees to support inexact matching.
  290451             :        */
  290452             :           SgCudaKernelCallExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  290453             : 
  290454             : // *** COMMON CODE SECTION ENDS HERE ***
  290455             : 
  290456             : 
  290457             : // End of memberFunctionString
  290458             : // Start of memberFunctionString
  290459             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  290460             : 
  290461             :      // the generated cast function
  290462             :      // friend ROSE_DLL_API SgCudaKernelCallExp* isSgCudaKernelCallExp ( SgNode* s );
  290463             : 
  290464             :           typedef SgFunctionCallExp base_node_type;
  290465             : 
  290466             : 
  290467             : // End of memberFunctionString
  290468             : // Start of memberFunctionString
  290469             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290470             : 
  290471             :           SgType* get_type() const override;
  290472             : 
  290473             : 
  290474             : // End of memberFunctionString
  290475             : // Start of memberFunctionString
  290476             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290477             : 
  290478             :           void post_construction_initialization() override;
  290479             : 
  290480             : 
  290481             : // End of memberFunctionString
  290482             : 
  290483             :      public: 
  290484             :          SgCudaKernelExecConfig* get_exec_config() const;
  290485             :          void set_exec_config(SgCudaKernelExecConfig* exec_config);
  290486             : 
  290487             : 
  290488             :      public: 
  290489             :          virtual ~SgCudaKernelCallExp();
  290490             : 
  290491             : 
  290492             :      public: 
  290493             :          SgCudaKernelCallExp(Sg_File_Info* startOfConstruct , SgExpression* function = NULL, SgExprListExp* args = NULL, SgType* expression_type = NULL, SgCudaKernelExecConfig* exec_config = NULL); 
  290494             :          SgCudaKernelCallExp(SgExpression* function, SgExprListExp* args, SgType* expression_type, SgCudaKernelExecConfig* exec_config); 
  290495             : 
  290496             :     protected:
  290497             : // Start of memberFunctionString
  290498             : SgCudaKernelExecConfig* p_exec_config;
  290499             :           
  290500             : // End of memberFunctionString
  290501             : 
  290502             :     friend struct Rose::Traits::generated::describe_node_t<SgCudaKernelCallExp>;
  290503             :     friend struct Rose::Traits::generated::describe_field_t<SgCudaKernelCallExp, SgCudaKernelExecConfig*,&SgCudaKernelCallExp::p_exec_config>;
  290504             : 
  290505             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290506             : 
  290507             : 
  290508             :    };
  290509             : #endif
  290510             : 
  290511             : // postdeclarations for SgCudaKernelCallExp
  290512             : 
  290513             : /* #line 290514 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290514             : 
  290515             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  290516             : 
  290517             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290518             : 
  290519             : 
  290520             : /* #line 290521 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290521             : 
  290522             : 
  290523             : 
  290524             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290525             : 
  290526             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  290527             : //      This code is automatically generated for each 
  290528             : //      terminal and non-terminal within the defined 
  290529             : //      grammar.  There is a simple way to change the 
  290530             : //      code to fix bugs etc.  See the ROSE README file
  290531             : //      for directions.
  290532             : 
  290533             : // tps: (02/22/2010): Adding DLL export requirements
  290534             : #include "rosedll.h"
  290535             : 
  290536             : // predeclarations for SgSizeOfOp
  290537             : 
  290538             : /* #line 290539 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290539             : 
  290540             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  290541             : 
  290542             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  290543             : 
  290544             : #if 1
  290545             : // Class Definition for SgSizeOfOp
  290546             : class ROSE_DLL_API SgSizeOfOp  : public SgExpression
  290547             :    {
  290548             :      public:
  290549             : 
  290550             : 
  290551             : /* #line 290552 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  290552             : 
  290553             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  290554             : // Start of memberFunctionString
  290555             : /* #line 978 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290556             : 
  290557             :  // Liao, 11/17/2009
  290558             :           int replace_expression(SgExpression*, SgExpression*) override ROSE_DEPRECATED_FUNCTION;
  290559             : 
  290560             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  290561             :           virtual unsigned int cfgIndexForEnd() const override;
  290562             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  290563             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  290564             : #endif
  290565             : 
  290566             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  290567             :           int get_name_qualification_length() const override;
  290568             :           void set_name_qualification_length(int name_qualification_length) override;
  290569             : 
  290570             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  290571             :           bool get_type_elaboration_required() const override;
  290572             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  290573             : 
  290574             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  290575             :           bool get_global_qualification_required() const override;
  290576             :           void set_global_qualification_required(bool global_qualification_required) override;
  290577             : 
  290578             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  290579             :           int get_name_qualification_for_pointer_to_member_class_length() const override;
  290580             :           void set_name_qualification_for_pointer_to_member_class_length(int name_qualification_length) override;
  290581             : 
  290582             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  290583             :           bool get_type_elaboration_for_pointer_to_member_class_required() const override;
  290584             :           void set_type_elaboration_for_pointer_to_member_class_required(bool type_elaboration_required) override;
  290585             : 
  290586             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  290587             :           bool get_global_qualification_for_pointer_to_member_class_required() const override;
  290588             :           void set_global_qualification_for_pointer_to_member_class_required(bool global_qualification_required) override;
  290589             : 
  290590             : 
  290591             : 
  290592             : // End of memberFunctionString
  290593             : // Start of memberFunctionString
  290594             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  290595             : 
  290596             : // *** COMMON CODE SECTION BEGINS HERE ***
  290597             : 
  290598             :     public:
  290599             : 
  290600             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  290601             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  290602             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  290603             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  290604             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  290605             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  290606             : 
  290607             :       /*! \brief returns a string representing the class name */
  290608             :           virtual std::string class_name() const override;
  290609             : 
  290610             :       /*! \brief returns new style SageIII enum values */
  290611             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  290612             : 
  290613             :       /*! \brief static variant value */
  290614             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  290615             :        // static const VariantT static_variant = V_SgSizeOfOp;
  290616             :           enum { static_variant = V_SgSizeOfOp };
  290617             : 
  290618             :        /* the generated cast function */
  290619             :       /*! \brief Casts pointer from base class to derived class */
  290620             :           ROSE_DLL_API friend       SgSizeOfOp* isSgSizeOfOp(       SgNode * s );
  290621             : 
  290622             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  290623             :           ROSE_DLL_API friend const SgSizeOfOp* isSgSizeOfOp( const SgNode * s );
  290624             : 
  290625             :      // ******************************************
  290626             :      // * Memory Pool / New / Delete
  290627             :      // ******************************************
  290628             : 
  290629             :      public:
  290630             :           /// \private
  290631             :           static const unsigned pool_size; //
  290632             :           /// \private
  290633             :           static std::vector<unsigned char *> pools; //
  290634             :           /// \private
  290635             :           static SgSizeOfOp * next_node; // 
  290636             : 
  290637             :           /// \private
  290638             :           static unsigned long initializeStorageClassArray(SgSizeOfOpStorageClass *); //
  290639             : 
  290640             :           /// \private
  290641             :           static void clearMemoryPool(); //
  290642             :           static void deleteMemoryPool(); //
  290643             : 
  290644             :           /// \private
  290645             :           static void extendMemoryPoolForFileIO(); //
  290646             : 
  290647             :           /// \private
  290648             :           static SgSizeOfOp * getPointerFromGlobalIndex(unsigned long); //
  290649             :           /// \private
  290650             :           static SgSizeOfOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  290651             : 
  290652             :           /// \private
  290653             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  290654             :           /// \private
  290655             :           static void resetValidFreepointers(); //
  290656             :           /// \private
  290657             :           static unsigned long getNumberOfLastValidPointer(); //
  290658             : 
  290659             : 
  290660             : #if defined(INLINE_FUNCTIONS)
  290661             :       /*! \brief returns pointer to newly allocated IR node */
  290662             :           inline void *operator new (size_t size);
  290663             : #else
  290664             :       /*! \brief returns pointer to newly allocated IR node */
  290665             :           void *operator new (size_t size);
  290666             : #endif
  290667             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  290668             :           void operator delete (void* pointer, size_t size);
  290669             : 
  290670             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  290671         629 :           void operator delete (void* pointer)
  290672             :              {
  290673             :             // This is the generated delete operator...
  290674         629 :                SgSizeOfOp::operator delete (pointer,sizeof(SgSizeOfOp));
  290675             :              }
  290676             : 
  290677             :       /*! \brief Returns the total number of IR nodes of this type */
  290678             :           static size_t numberOfNodes();
  290679             : 
  290680             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  290681             :           static size_t memoryUsage();
  290682             : 
  290683             :       // End of scope which started in IR nodes specific code 
  290684             :       /* */
  290685             : 
  290686             :       /* name Internal Functions
  290687             :           \brief Internal functions ... incomplete-documentation
  290688             : 
  290689             :           These functions have been made public as part of the design, but they are suggested for internal use 
  290690             :           or by particularly knowledgeable users for specialized tools or applications.
  290691             : 
  290692             :           \internal We could not make these private because they are required by user for special purposes. And 
  290693             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  290694             :          
  290695             :        */
  290696             : 
  290697             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  290698             :        // overridden in every class by *generated* implementation
  290699             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  290700             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  290701             :        // MS: 06/28/02 container of names of variables or container indices 
  290702             :        // used used in the traversal to access AST successor nodes
  290703             :        // overridden in every class by *generated* implementation
  290704             :       /*! \brief container of names of variables or container indices used used in the traversal
  290705             :           to access AST successor nodes overridden in every class by *generated* implementation */
  290706             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  290707             : 
  290708             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  290709             :        // than all the vector copies. The implementation for these functions is generated for each class.
  290710             :       /*! \brief return number of children in the traversal successor list */
  290711             :           virtual size_t get_numberOfTraversalSuccessors() override;
  290712             :       /*! \brief index-based access to traversal successors by index number */
  290713             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  290714             :       /*! \brief index-based access to traversal successors by child node */
  290715             :           virtual size_t get_childIndex(SgNode *child) override;
  290716             : 
  290717             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  290718             :        // MS: 08/16/2002 method for generating RTI information
  290719             :       /*! \brief return C++ Runtime-Time-Information */
  290720             :           virtual RTIReturnType roseRTI() override;
  290721             : #endif
  290722             :       /* */
  290723             : 
  290724             : 
  290725             : 
  290726             :       /* name Deprecated Functions
  290727             :           \brief Deprecated functions ... incomplete-documentation
  290728             : 
  290729             :           These functions have been deprecated from use.
  290730             :        */
  290731             :       /* */
  290732             : 
  290733             :       /*! returns a C style string (char*) representing the class name */
  290734             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  290735             : 
  290736             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  290737             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  290738             : #if 0
  290739             :       /*! returns old style Sage II enum values */
  290740             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  290741             :       /*! returns old style Sage II enum values */
  290742             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  290743             : #endif
  290744             :       /* */
  290745             : 
  290746             : 
  290747             : 
  290748             : 
  290749             :      public:
  290750             :       /* name Traversal Support Functions
  290751             :           \brief Traversal support functions ... incomplete-documentation
  290752             : 
  290753             :           These functions have been made public as part of the design, but they are suggested for internal use 
  290754             :           or by particularly knowledgable users for specialized tools or applications.
  290755             :        */
  290756             :       /* */
  290757             : 
  290758             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  290759             :        // (inferior to ROSE traversal mechanism, experimental).
  290760             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  290761             :        */
  290762             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  290763             : 
  290764             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  290765             :       /*! \brief support for the classic visitor pattern done in GoF */
  290766             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  290767             : 
  290768             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  290769             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  290770             :        */
  290771             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  290772             : 
  290773             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  290774             :        */
  290775             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  290776             : 
  290777             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  290778             :        // This traversal helps support internal tools that call static member functions.
  290779             :        // note: this function operates on the memory pools.
  290780             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  290781             :        */
  290782             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  290783             :       /* */
  290784             : 
  290785             : 
  290786             :      public:
  290787             :       /* name Memory Allocation Functions
  290788             :           \brief Memory allocations functions ... incomplete-documentation
  290789             : 
  290790             :           These functions have been made public as part of the design, but they are suggested for internal use 
  290791             :           or by particularly knowledgable users for specialized tools or applications.
  290792             :        */
  290793             :       /* */
  290794             : 
  290795             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  290796             : 
  290797             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  290798             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  290799             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  290800             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  290801             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  290802             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  290803             :           being used with the AST File I/O mechanism.
  290804             :        */
  290805             :           virtual bool isInMemoryPool() override;
  290806             : 
  290807             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  290808             : 
  290809             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  290810             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  290811             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  290812             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  290813             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  290814             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  290815             :           being used with the AST File I/O mechanism.
  290816             :        */
  290817             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  290818             : 
  290819             :       // DQ (4/30/2006): Modified to be a const function.
  290820             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  290821             : 
  290822             :           This functions is part of general support for many possible tools to operate 
  290823             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  290824             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  290825             :           less than the set of pointers used by the AST file I/O. This is part of
  290826             :           work implemented by Andreas, and support tools such as the AST graph generation.
  290827             : 
  290828             :           \warning This function can return unexpected data members and thus the 
  290829             :                    order and the number of elements is unpredicable and subject 
  290830             :                    to change.
  290831             : 
  290832             :           \returns STL vector of pairs of SgNode* and strings
  290833             :        */
  290834             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  290835             : 
  290836             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  290837             : 
  290838             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  290839             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  290840             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  290841             : 
  290842             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  290843             :                    and subject to change.
  290844             :        */
  290845             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  290846             : 
  290847             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  290848             : 
  290849             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  290850             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  290851             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  290852             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  290853             : 
  290854             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  290855             : 
  290856             :           \returns long
  290857             :        */
  290858             :           virtual long getChildIndex( SgNode* childNode ) const override;
  290859             : 
  290860             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  290861             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  290862             :       /* \brief Constructor for use by AST File I/O Mechanism
  290863             : 
  290864             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  290865             :           which obtained via fast binary file I/O from disk.
  290866             :        */
  290867             :        // SgSizeOfOp( SgSizeOfOpStorageClass& source );
  290868             : 
  290869             : 
  290870             : 
  290871             : 
  290872             : 
  290873             :  // JH (10/24/2005): methods added to support the ast file IO
  290874             :     private:
  290875             : 
  290876             :       /* name AST Memory Allocation Support Functions
  290877             :           \brief Memory allocations support....
  290878             : 
  290879             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  290880             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  290881             :           and support the AST File I/O Mechanism.
  290882             :        */
  290883             :       /* */
  290884             : 
  290885             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  290886             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  290887             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  290888             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  290889             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  290890             :           a correspinding one in the AST_FILE_IO class!
  290891             :        */
  290892             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  290893             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  290894             :       /* \brief Typedef used for low level memory access.
  290895             :        */
  290896             :        // typedef unsigned char* TestType;
  290897             : 
  290898             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  290899             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  290900             :       /* \brief Typedef used to hold memory addresses as values.
  290901             :        */
  290902             :        // typedef unsigned long  AddressType;
  290903             : 
  290904             : 
  290905             : 
  290906             :        // necessary, to have direct access to the p_freepointer and the private methods !
  290907             :       /*! \brief friend class declaration to support AST File I/O */
  290908             :           friend class AST_FILE_IO;
  290909             : 
  290910             :       /*! \brief friend class declaration to support AST File I/O */
  290911             :           friend class SgSizeOfOpStorageClass;
  290912             : 
  290913             :       /*! \brief friend class declaration to support AST File I/O */
  290914             :           friend class AstSpecificDataManagingClass;
  290915             : 
  290916             :       /*! \brief friend class declaration to support AST File I/O */
  290917             :           friend class AstSpecificDataManagingClassStorageClass;
  290918             :     public:
  290919             :       /*! \brief IR node constructor to support AST File I/O */
  290920             :           SgSizeOfOp( const SgSizeOfOpStorageClass& source );
  290921             : 
  290922             :  // private: // JJW hack
  290923             :        /*
  290924             :           name AST Memory Allocation Support Variables
  290925             :           Memory allocations support variables 
  290926             : 
  290927             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  290928             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  290929             :           and support the AST File I/O Mechanism.
  290930             :        */
  290931             :       /* */
  290932             : 
  290933             :     public:
  290934             : 
  290935             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  290936             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  290937             :       // virtual SgNode* addRegExpAttribute();
  290938             :       /*! \brief Support for AST matching using regular expression.
  290939             : 
  290940             :           This support is incomplete and the subject of current research to define 
  290941             :           RegEx trees to support inexact matching.
  290942             :        */
  290943             :           SgSizeOfOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  290944             : 
  290945             : // *** COMMON CODE SECTION ENDS HERE ***
  290946             : 
  290947             : 
  290948             : // End of memberFunctionString
  290949             : // Start of memberFunctionString
  290950             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  290951             : 
  290952             :      // the generated cast function
  290953             :      // friend ROSE_DLL_API SgSizeOfOp* isSgSizeOfOp ( SgNode* s );
  290954             : 
  290955             :           typedef SgExpression base_node_type;
  290956             : 
  290957             : 
  290958             : // End of memberFunctionString
  290959             : // Start of memberFunctionString
  290960             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290961             : 
  290962             :           SgType* get_type() const override;
  290963             : 
  290964             : 
  290965             : // End of memberFunctionString
  290966             : // Start of memberFunctionString
  290967             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  290968             : 
  290969             :           void post_construction_initialization() override;
  290970             : 
  290971             : 
  290972             : // End of memberFunctionString
  290973             : 
  290974             :      public: 
  290975             :          SgExpression* get_operand_expr() const;
  290976             :          void set_operand_expr(SgExpression* operand_expr);
  290977             : 
  290978             :      public: 
  290979             :          SgType* get_operand_type() const;
  290980             :          void set_operand_type(SgType* operand_type);
  290981             : 
  290982             : 
  290983             : 
  290984             : 
  290985             : 
  290986             :      public: 
  290987             :          bool get_sizeOfContainsBaseTypeDefiningDeclaration() const;
  290988             :          void set_sizeOfContainsBaseTypeDefiningDeclaration(bool sizeOfContainsBaseTypeDefiningDeclaration);
  290989             : 
  290990             :      public: 
  290991             :          bool get_is_objectless_nonstatic_data_member_reference() const;
  290992             :          void set_is_objectless_nonstatic_data_member_reference(bool is_objectless_nonstatic_data_member_reference);
  290993             : 
  290994             : 
  290995             : 
  290996             : 
  290997             : 
  290998             :      public: 
  290999             :          virtual ~SgSizeOfOp();
  291000             : 
  291001             : 
  291002             :      public: 
  291003             :          SgSizeOfOp(Sg_File_Info* startOfConstruct , SgExpression* operand_expr = NULL, SgType* operand_type = NULL, SgType* expression_type = NULL); 
  291004             :          SgSizeOfOp(SgExpression* operand_expr, SgType* operand_type, SgType* expression_type); 
  291005             : 
  291006             :     protected:
  291007             : // Start of memberFunctionString
  291008             : SgExpression* p_operand_expr;
  291009             :           
  291010             : // End of memberFunctionString
  291011             : // Start of memberFunctionString
  291012             : SgType* p_operand_type;
  291013             :           
  291014             : // End of memberFunctionString
  291015             : // Start of memberFunctionString
  291016             : SgType* p_expression_type;
  291017             :           
  291018             : // End of memberFunctionString
  291019             : // Start of memberFunctionString
  291020             : int p_name_qualification_length;
  291021             :           
  291022             : // End of memberFunctionString
  291023             : // Start of memberFunctionString
  291024             : bool p_type_elaboration_required;
  291025             :           
  291026             : // End of memberFunctionString
  291027             : // Start of memberFunctionString
  291028             : bool p_global_qualification_required;
  291029             :           
  291030             : // End of memberFunctionString
  291031             : // Start of memberFunctionString
  291032             : bool p_sizeOfContainsBaseTypeDefiningDeclaration;
  291033             :           
  291034             : // End of memberFunctionString
  291035             : // Start of memberFunctionString
  291036             : bool p_is_objectless_nonstatic_data_member_reference;
  291037             :           
  291038             : // End of memberFunctionString
  291039             : // Start of memberFunctionString
  291040             : int p_name_qualification_for_pointer_to_member_class_length;
  291041             :           
  291042             : // End of memberFunctionString
  291043             : // Start of memberFunctionString
  291044             : bool p_type_elaboration_for_pointer_to_member_class_required;
  291045             :           
  291046             : // End of memberFunctionString
  291047             : // Start of memberFunctionString
  291048             : bool p_global_qualification_for_pointer_to_member_class_required;
  291049             :           
  291050             : // End of memberFunctionString
  291051             : 
  291052             :     friend struct Rose::Traits::generated::describe_node_t<SgSizeOfOp>;
  291053             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, SgExpression*,&SgSizeOfOp::p_operand_expr>;
  291054             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, SgType*,&SgSizeOfOp::p_operand_type>;
  291055             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, SgType*,&SgSizeOfOp::p_expression_type>;
  291056             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, int,&SgSizeOfOp::p_name_qualification_length>;
  291057             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, bool,&SgSizeOfOp::p_type_elaboration_required>;
  291058             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, bool,&SgSizeOfOp::p_global_qualification_required>;
  291059             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, bool,&SgSizeOfOp::p_sizeOfContainsBaseTypeDefiningDeclaration>;
  291060             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, bool,&SgSizeOfOp::p_is_objectless_nonstatic_data_member_reference>;
  291061             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, int,&SgSizeOfOp::p_name_qualification_for_pointer_to_member_class_length>;
  291062             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, bool,&SgSizeOfOp::p_type_elaboration_for_pointer_to_member_class_required>;
  291063             :     friend struct Rose::Traits::generated::describe_field_t<SgSizeOfOp, bool,&SgSizeOfOp::p_global_qualification_for_pointer_to_member_class_required>;
  291064             : 
  291065             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291066             : 
  291067             : 
  291068             :    };
  291069             : #endif
  291070             : 
  291071             : // postdeclarations for SgSizeOfOp
  291072             : 
  291073             : /* #line 291074 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291074             : 
  291075             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  291076             : 
  291077             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291078             : 
  291079             : 
  291080             : /* #line 291081 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291081             : 
  291082             : 
  291083             : 
  291084             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291085             : 
  291086             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  291087             : //      This code is automatically generated for each 
  291088             : //      terminal and non-terminal within the defined 
  291089             : //      grammar.  There is a simple way to change the 
  291090             : //      code to fix bugs etc.  See the ROSE README file
  291091             : //      for directions.
  291092             : 
  291093             : // tps: (02/22/2010): Adding DLL export requirements
  291094             : #include "rosedll.h"
  291095             : 
  291096             : // predeclarations for SgUpcLocalsizeofExpression
  291097             : 
  291098             : /* #line 291099 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291099             : 
  291100             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  291101             : 
  291102             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291103             : 
  291104             : #if 1
  291105             : // Class Definition for SgUpcLocalsizeofExpression
  291106             : class ROSE_DLL_API SgUpcLocalsizeofExpression  : public SgExpression
  291107             :    {
  291108             :      public:
  291109             : 
  291110             : 
  291111             : /* #line 291112 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291112             : 
  291113             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  291114             : // Start of memberFunctionString
  291115             : /* #line 1833 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  291116             : 
  291117             : //        virtual unsigned int cfgIndexForEnd() const;
  291118             : //        virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index);
  291119             : //        virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index);
  291120             : 
  291121             : 
  291122             : // End of memberFunctionString
  291123             : // Start of memberFunctionString
  291124             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  291125             : 
  291126             : // *** COMMON CODE SECTION BEGINS HERE ***
  291127             : 
  291128             :     public:
  291129             : 
  291130             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  291131             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  291132             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  291133             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  291134             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  291135             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  291136             : 
  291137             :       /*! \brief returns a string representing the class name */
  291138             :           virtual std::string class_name() const override;
  291139             : 
  291140             :       /*! \brief returns new style SageIII enum values */
  291141             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  291142             : 
  291143             :       /*! \brief static variant value */
  291144             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  291145             :        // static const VariantT static_variant = V_SgUpcLocalsizeofExpression;
  291146             :           enum { static_variant = V_SgUpcLocalsizeofExpression };
  291147             : 
  291148             :        /* the generated cast function */
  291149             :       /*! \brief Casts pointer from base class to derived class */
  291150             :           ROSE_DLL_API friend       SgUpcLocalsizeofExpression* isSgUpcLocalsizeofExpression(       SgNode * s );
  291151             : 
  291152             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  291153             :           ROSE_DLL_API friend const SgUpcLocalsizeofExpression* isSgUpcLocalsizeofExpression( const SgNode * s );
  291154             : 
  291155             :      // ******************************************
  291156             :      // * Memory Pool / New / Delete
  291157             :      // ******************************************
  291158             : 
  291159             :      public:
  291160             :           /// \private
  291161             :           static const unsigned pool_size; //
  291162             :           /// \private
  291163             :           static std::vector<unsigned char *> pools; //
  291164             :           /// \private
  291165             :           static SgUpcLocalsizeofExpression * next_node; // 
  291166             : 
  291167             :           /// \private
  291168             :           static unsigned long initializeStorageClassArray(SgUpcLocalsizeofExpressionStorageClass *); //
  291169             : 
  291170             :           /// \private
  291171             :           static void clearMemoryPool(); //
  291172             :           static void deleteMemoryPool(); //
  291173             : 
  291174             :           /// \private
  291175             :           static void extendMemoryPoolForFileIO(); //
  291176             : 
  291177             :           /// \private
  291178             :           static SgUpcLocalsizeofExpression * getPointerFromGlobalIndex(unsigned long); //
  291179             :           /// \private
  291180             :           static SgUpcLocalsizeofExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  291181             : 
  291182             :           /// \private
  291183             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  291184             :           /// \private
  291185             :           static void resetValidFreepointers(); //
  291186             :           /// \private
  291187             :           static unsigned long getNumberOfLastValidPointer(); //
  291188             : 
  291189             : 
  291190             : #if defined(INLINE_FUNCTIONS)
  291191             :       /*! \brief returns pointer to newly allocated IR node */
  291192             :           inline void *operator new (size_t size);
  291193             : #else
  291194             :       /*! \brief returns pointer to newly allocated IR node */
  291195             :           void *operator new (size_t size);
  291196             : #endif
  291197             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  291198             :           void operator delete (void* pointer, size_t size);
  291199             : 
  291200             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  291201           0 :           void operator delete (void* pointer)
  291202             :              {
  291203             :             // This is the generated delete operator...
  291204           0 :                SgUpcLocalsizeofExpression::operator delete (pointer,sizeof(SgUpcLocalsizeofExpression));
  291205             :              }
  291206             : 
  291207             :       /*! \brief Returns the total number of IR nodes of this type */
  291208             :           static size_t numberOfNodes();
  291209             : 
  291210             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  291211             :           static size_t memoryUsage();
  291212             : 
  291213             :       // End of scope which started in IR nodes specific code 
  291214             :       /* */
  291215             : 
  291216             :       /* name Internal Functions
  291217             :           \brief Internal functions ... incomplete-documentation
  291218             : 
  291219             :           These functions have been made public as part of the design, but they are suggested for internal use 
  291220             :           or by particularly knowledgeable users for specialized tools or applications.
  291221             : 
  291222             :           \internal We could not make these private because they are required by user for special purposes. And 
  291223             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  291224             :          
  291225             :        */
  291226             : 
  291227             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  291228             :        // overridden in every class by *generated* implementation
  291229             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  291230             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  291231             :        // MS: 06/28/02 container of names of variables or container indices 
  291232             :        // used used in the traversal to access AST successor nodes
  291233             :        // overridden in every class by *generated* implementation
  291234             :       /*! \brief container of names of variables or container indices used used in the traversal
  291235             :           to access AST successor nodes overridden in every class by *generated* implementation */
  291236             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  291237             : 
  291238             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  291239             :        // than all the vector copies. The implementation for these functions is generated for each class.
  291240             :       /*! \brief return number of children in the traversal successor list */
  291241             :           virtual size_t get_numberOfTraversalSuccessors() override;
  291242             :       /*! \brief index-based access to traversal successors by index number */
  291243             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  291244             :       /*! \brief index-based access to traversal successors by child node */
  291245             :           virtual size_t get_childIndex(SgNode *child) override;
  291246             : 
  291247             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  291248             :        // MS: 08/16/2002 method for generating RTI information
  291249             :       /*! \brief return C++ Runtime-Time-Information */
  291250             :           virtual RTIReturnType roseRTI() override;
  291251             : #endif
  291252             :       /* */
  291253             : 
  291254             : 
  291255             : 
  291256             :       /* name Deprecated Functions
  291257             :           \brief Deprecated functions ... incomplete-documentation
  291258             : 
  291259             :           These functions have been deprecated from use.
  291260             :        */
  291261             :       /* */
  291262             : 
  291263             :       /*! returns a C style string (char*) representing the class name */
  291264             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  291265             : 
  291266             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  291267             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  291268             : #if 0
  291269             :       /*! returns old style Sage II enum values */
  291270             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  291271             :       /*! returns old style Sage II enum values */
  291272             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  291273             : #endif
  291274             :       /* */
  291275             : 
  291276             : 
  291277             : 
  291278             : 
  291279             :      public:
  291280             :       /* name Traversal Support Functions
  291281             :           \brief Traversal support functions ... incomplete-documentation
  291282             : 
  291283             :           These functions have been made public as part of the design, but they are suggested for internal use 
  291284             :           or by particularly knowledgable users for specialized tools or applications.
  291285             :        */
  291286             :       /* */
  291287             : 
  291288             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  291289             :        // (inferior to ROSE traversal mechanism, experimental).
  291290             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  291291             :        */
  291292             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  291293             : 
  291294             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  291295             :       /*! \brief support for the classic visitor pattern done in GoF */
  291296             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  291297             : 
  291298             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  291299             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  291300             :        */
  291301             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  291302             : 
  291303             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  291304             :        */
  291305             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  291306             : 
  291307             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  291308             :        // This traversal helps support internal tools that call static member functions.
  291309             :        // note: this function operates on the memory pools.
  291310             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  291311             :        */
  291312             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  291313             :       /* */
  291314             : 
  291315             : 
  291316             :      public:
  291317             :       /* name Memory Allocation Functions
  291318             :           \brief Memory allocations functions ... incomplete-documentation
  291319             : 
  291320             :           These functions have been made public as part of the design, but they are suggested for internal use 
  291321             :           or by particularly knowledgable users for specialized tools or applications.
  291322             :        */
  291323             :       /* */
  291324             : 
  291325             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  291326             : 
  291327             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  291328             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  291329             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  291330             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  291331             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  291332             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  291333             :           being used with the AST File I/O mechanism.
  291334             :        */
  291335             :           virtual bool isInMemoryPool() override;
  291336             : 
  291337             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  291338             : 
  291339             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  291340             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  291341             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  291342             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  291343             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  291344             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  291345             :           being used with the AST File I/O mechanism.
  291346             :        */
  291347             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  291348             : 
  291349             :       // DQ (4/30/2006): Modified to be a const function.
  291350             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  291351             : 
  291352             :           This functions is part of general support for many possible tools to operate 
  291353             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  291354             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  291355             :           less than the set of pointers used by the AST file I/O. This is part of
  291356             :           work implemented by Andreas, and support tools such as the AST graph generation.
  291357             : 
  291358             :           \warning This function can return unexpected data members and thus the 
  291359             :                    order and the number of elements is unpredicable and subject 
  291360             :                    to change.
  291361             : 
  291362             :           \returns STL vector of pairs of SgNode* and strings
  291363             :        */
  291364             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  291365             : 
  291366             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  291367             : 
  291368             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  291369             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  291370             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  291371             : 
  291372             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  291373             :                    and subject to change.
  291374             :        */
  291375             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  291376             : 
  291377             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  291378             : 
  291379             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  291380             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  291381             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  291382             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  291383             : 
  291384             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  291385             : 
  291386             :           \returns long
  291387             :        */
  291388             :           virtual long getChildIndex( SgNode* childNode ) const override;
  291389             : 
  291390             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  291391             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  291392             :       /* \brief Constructor for use by AST File I/O Mechanism
  291393             : 
  291394             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  291395             :           which obtained via fast binary file I/O from disk.
  291396             :        */
  291397             :        // SgUpcLocalsizeofExpression( SgUpcLocalsizeofExpressionStorageClass& source );
  291398             : 
  291399             : 
  291400             : 
  291401             : 
  291402             : 
  291403             :  // JH (10/24/2005): methods added to support the ast file IO
  291404             :     private:
  291405             : 
  291406             :       /* name AST Memory Allocation Support Functions
  291407             :           \brief Memory allocations support....
  291408             : 
  291409             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  291410             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  291411             :           and support the AST File I/O Mechanism.
  291412             :        */
  291413             :       /* */
  291414             : 
  291415             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  291416             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  291417             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  291418             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  291419             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  291420             :           a correspinding one in the AST_FILE_IO class!
  291421             :        */
  291422             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  291423             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  291424             :       /* \brief Typedef used for low level memory access.
  291425             :        */
  291426             :        // typedef unsigned char* TestType;
  291427             : 
  291428             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  291429             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  291430             :       /* \brief Typedef used to hold memory addresses as values.
  291431             :        */
  291432             :        // typedef unsigned long  AddressType;
  291433             : 
  291434             : 
  291435             : 
  291436             :        // necessary, to have direct access to the p_freepointer and the private methods !
  291437             :       /*! \brief friend class declaration to support AST File I/O */
  291438             :           friend class AST_FILE_IO;
  291439             : 
  291440             :       /*! \brief friend class declaration to support AST File I/O */
  291441             :           friend class SgUpcLocalsizeofExpressionStorageClass;
  291442             : 
  291443             :       /*! \brief friend class declaration to support AST File I/O */
  291444             :           friend class AstSpecificDataManagingClass;
  291445             : 
  291446             :       /*! \brief friend class declaration to support AST File I/O */
  291447             :           friend class AstSpecificDataManagingClassStorageClass;
  291448             :     public:
  291449             :       /*! \brief IR node constructor to support AST File I/O */
  291450             :           SgUpcLocalsizeofExpression( const SgUpcLocalsizeofExpressionStorageClass& source );
  291451             : 
  291452             :  // private: // JJW hack
  291453             :        /*
  291454             :           name AST Memory Allocation Support Variables
  291455             :           Memory allocations support variables 
  291456             : 
  291457             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  291458             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  291459             :           and support the AST File I/O Mechanism.
  291460             :        */
  291461             :       /* */
  291462             : 
  291463             :     public:
  291464             : 
  291465             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  291466             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  291467             :       // virtual SgNode* addRegExpAttribute();
  291468             :       /*! \brief Support for AST matching using regular expression.
  291469             : 
  291470             :           This support is incomplete and the subject of current research to define 
  291471             :           RegEx trees to support inexact matching.
  291472             :        */
  291473             :           SgUpcLocalsizeofExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  291474             : 
  291475             : // *** COMMON CODE SECTION ENDS HERE ***
  291476             : 
  291477             : 
  291478             : // End of memberFunctionString
  291479             : // Start of memberFunctionString
  291480             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  291481             : 
  291482             :      // the generated cast function
  291483             :      // friend ROSE_DLL_API SgUpcLocalsizeofExpression* isSgUpcLocalsizeofExpression ( SgNode* s );
  291484             : 
  291485             :           typedef SgExpression base_node_type;
  291486             : 
  291487             : 
  291488             : // End of memberFunctionString
  291489             : // Start of memberFunctionString
  291490             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  291491             : 
  291492             :           SgType* get_type() const override;
  291493             : 
  291494             : 
  291495             : // End of memberFunctionString
  291496             : // Start of memberFunctionString
  291497             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  291498             : 
  291499             :           void post_construction_initialization() override;
  291500             : 
  291501             : 
  291502             : // End of memberFunctionString
  291503             : 
  291504             :      public: 
  291505             :          SgExpression* get_expression() const;
  291506             :          void set_expression(SgExpression* expression);
  291507             : 
  291508             :      public: 
  291509             :          SgType* get_operand_type() const;
  291510             :          void set_operand_type(SgType* operand_type);
  291511             : 
  291512             : 
  291513             : 
  291514             :      public: 
  291515             :          virtual ~SgUpcLocalsizeofExpression();
  291516             : 
  291517             : 
  291518             :      public: 
  291519             :          SgUpcLocalsizeofExpression(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL, SgType* operand_type = NULL, SgType* expression_type = NULL); 
  291520             :          SgUpcLocalsizeofExpression(SgExpression* expression, SgType* operand_type, SgType* expression_type); 
  291521             : 
  291522             :     protected:
  291523             : // Start of memberFunctionString
  291524             : SgExpression* p_expression;
  291525             :           
  291526             : // End of memberFunctionString
  291527             : // Start of memberFunctionString
  291528             : SgType* p_operand_type;
  291529             :           
  291530             : // End of memberFunctionString
  291531             : // Start of memberFunctionString
  291532             : SgType* p_expression_type;
  291533             :           
  291534             : // End of memberFunctionString
  291535             : 
  291536             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcLocalsizeofExpression>;
  291537             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcLocalsizeofExpression, SgExpression*,&SgUpcLocalsizeofExpression::p_expression>;
  291538             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcLocalsizeofExpression, SgType*,&SgUpcLocalsizeofExpression::p_operand_type>;
  291539             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcLocalsizeofExpression, SgType*,&SgUpcLocalsizeofExpression::p_expression_type>;
  291540             : 
  291541             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291542             : 
  291543             : 
  291544             :    };
  291545             : #endif
  291546             : 
  291547             : // postdeclarations for SgUpcLocalsizeofExpression
  291548             : 
  291549             : /* #line 291550 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291550             : 
  291551             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  291552             : 
  291553             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291554             : 
  291555             : 
  291556             : /* #line 291557 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291557             : 
  291558             : 
  291559             : 
  291560             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291561             : 
  291562             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  291563             : //      This code is automatically generated for each 
  291564             : //      terminal and non-terminal within the defined 
  291565             : //      grammar.  There is a simple way to change the 
  291566             : //      code to fix bugs etc.  See the ROSE README file
  291567             : //      for directions.
  291568             : 
  291569             : // tps: (02/22/2010): Adding DLL export requirements
  291570             : #include "rosedll.h"
  291571             : 
  291572             : // predeclarations for SgUpcBlocksizeofExpression
  291573             : 
  291574             : /* #line 291575 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291575             : 
  291576             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  291577             : 
  291578             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  291579             : 
  291580             : #if 1
  291581             : // Class Definition for SgUpcBlocksizeofExpression
  291582             : class ROSE_DLL_API SgUpcBlocksizeofExpression  : public SgExpression
  291583             :    {
  291584             :      public:
  291585             : 
  291586             : 
  291587             : /* #line 291588 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  291588             : 
  291589             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  291590             : // Start of memberFunctionString
  291591             : /* #line 1839 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  291592             : 
  291593             : //        virtual unsigned int cfgIndexForEnd() const;
  291594             : //        virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index);
  291595             : //        virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index);
  291596             : 
  291597             : 
  291598             : // End of memberFunctionString
  291599             : // Start of memberFunctionString
  291600             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  291601             : 
  291602             : // *** COMMON CODE SECTION BEGINS HERE ***
  291603             : 
  291604             :     public:
  291605             : 
  291606             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  291607             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  291608             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  291609             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  291610             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  291611             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  291612             : 
  291613             :       /*! \brief returns a string representing the class name */
  291614             :           virtual std::string class_name() const override;
  291615             : 
  291616             :       /*! \brief returns new style SageIII enum values */
  291617             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  291618             : 
  291619             :       /*! \brief static variant value */
  291620             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  291621             :        // static const VariantT static_variant = V_SgUpcBlocksizeofExpression;
  291622             :           enum { static_variant = V_SgUpcBlocksizeofExpression };
  291623             : 
  291624             :        /* the generated cast function */
  291625             :       /*! \brief Casts pointer from base class to derived class */
  291626             :           ROSE_DLL_API friend       SgUpcBlocksizeofExpression* isSgUpcBlocksizeofExpression(       SgNode * s );
  291627             : 
  291628             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  291629             :           ROSE_DLL_API friend const SgUpcBlocksizeofExpression* isSgUpcBlocksizeofExpression( const SgNode * s );
  291630             : 
  291631             :      // ******************************************
  291632             :      // * Memory Pool / New / Delete
  291633             :      // ******************************************
  291634             : 
  291635             :      public:
  291636             :           /// \private
  291637             :           static const unsigned pool_size; //
  291638             :           /// \private
  291639             :           static std::vector<unsigned char *> pools; //
  291640             :           /// \private
  291641             :           static SgUpcBlocksizeofExpression * next_node; // 
  291642             : 
  291643             :           /// \private
  291644             :           static unsigned long initializeStorageClassArray(SgUpcBlocksizeofExpressionStorageClass *); //
  291645             : 
  291646             :           /// \private
  291647             :           static void clearMemoryPool(); //
  291648             :           static void deleteMemoryPool(); //
  291649             : 
  291650             :           /// \private
  291651             :           static void extendMemoryPoolForFileIO(); //
  291652             : 
  291653             :           /// \private
  291654             :           static SgUpcBlocksizeofExpression * getPointerFromGlobalIndex(unsigned long); //
  291655             :           /// \private
  291656             :           static SgUpcBlocksizeofExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  291657             : 
  291658             :           /// \private
  291659             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  291660             :           /// \private
  291661             :           static void resetValidFreepointers(); //
  291662             :           /// \private
  291663             :           static unsigned long getNumberOfLastValidPointer(); //
  291664             : 
  291665             : 
  291666             : #if defined(INLINE_FUNCTIONS)
  291667             :       /*! \brief returns pointer to newly allocated IR node */
  291668             :           inline void *operator new (size_t size);
  291669             : #else
  291670             :       /*! \brief returns pointer to newly allocated IR node */
  291671             :           void *operator new (size_t size);
  291672             : #endif
  291673             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  291674             :           void operator delete (void* pointer, size_t size);
  291675             : 
  291676             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  291677           0 :           void operator delete (void* pointer)
  291678             :              {
  291679             :             // This is the generated delete operator...
  291680           0 :                SgUpcBlocksizeofExpression::operator delete (pointer,sizeof(SgUpcBlocksizeofExpression));
  291681             :              }
  291682             : 
  291683             :       /*! \brief Returns the total number of IR nodes of this type */
  291684             :           static size_t numberOfNodes();
  291685             : 
  291686             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  291687             :           static size_t memoryUsage();
  291688             : 
  291689             :       // End of scope which started in IR nodes specific code 
  291690             :       /* */
  291691             : 
  291692             :       /* name Internal Functions
  291693             :           \brief Internal functions ... incomplete-documentation
  291694             : 
  291695             :           These functions have been made public as part of the design, but they are suggested for internal use 
  291696             :           or by particularly knowledgeable users for specialized tools or applications.
  291697             : 
  291698             :           \internal We could not make these private because they are required by user for special purposes. And 
  291699             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  291700             :          
  291701             :        */
  291702             : 
  291703             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  291704             :        // overridden in every class by *generated* implementation
  291705             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  291706             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  291707             :        // MS: 06/28/02 container of names of variables or container indices 
  291708             :        // used used in the traversal to access AST successor nodes
  291709             :        // overridden in every class by *generated* implementation
  291710             :       /*! \brief container of names of variables or container indices used used in the traversal
  291711             :           to access AST successor nodes overridden in every class by *generated* implementation */
  291712             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  291713             : 
  291714             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  291715             :        // than all the vector copies. The implementation for these functions is generated for each class.
  291716             :       /*! \brief return number of children in the traversal successor list */
  291717             :           virtual size_t get_numberOfTraversalSuccessors() override;
  291718             :       /*! \brief index-based access to traversal successors by index number */
  291719             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  291720             :       /*! \brief index-based access to traversal successors by child node */
  291721             :           virtual size_t get_childIndex(SgNode *child) override;
  291722             : 
  291723             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  291724             :        // MS: 08/16/2002 method for generating RTI information
  291725             :       /*! \brief return C++ Runtime-Time-Information */
  291726             :           virtual RTIReturnType roseRTI() override;
  291727             : #endif
  291728             :       /* */
  291729             : 
  291730             : 
  291731             : 
  291732             :       /* name Deprecated Functions
  291733             :           \brief Deprecated functions ... incomplete-documentation
  291734             : 
  291735             :           These functions have been deprecated from use.
  291736             :        */
  291737             :       /* */
  291738             : 
  291739             :       /*! returns a C style string (char*) representing the class name */
  291740             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  291741             : 
  291742             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  291743             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  291744             : #if 0
  291745             :       /*! returns old style Sage II enum values */
  291746             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  291747             :       /*! returns old style Sage II enum values */
  291748             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  291749             : #endif
  291750             :       /* */
  291751             : 
  291752             : 
  291753             : 
  291754             : 
  291755             :      public:
  291756             :       /* name Traversal Support Functions
  291757             :           \brief Traversal support functions ... incomplete-documentation
  291758             : 
  291759             :           These functions have been made public as part of the design, but they are suggested for internal use 
  291760             :           or by particularly knowledgable users for specialized tools or applications.
  291761             :        */
  291762             :       /* */
  291763             : 
  291764             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  291765             :        // (inferior to ROSE traversal mechanism, experimental).
  291766             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  291767             :        */
  291768             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  291769             : 
  291770             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  291771             :       /*! \brief support for the classic visitor pattern done in GoF */
  291772             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  291773             : 
  291774             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  291775             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  291776             :        */
  291777             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  291778             : 
  291779             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  291780             :        */
  291781             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  291782             : 
  291783             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  291784             :        // This traversal helps support internal tools that call static member functions.
  291785             :        // note: this function operates on the memory pools.
  291786             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  291787             :        */
  291788             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  291789             :       /* */
  291790             : 
  291791             : 
  291792             :      public:
  291793             :       /* name Memory Allocation Functions
  291794             :           \brief Memory allocations functions ... incomplete-documentation
  291795             : 
  291796             :           These functions have been made public as part of the design, but they are suggested for internal use 
  291797             :           or by particularly knowledgable users for specialized tools or applications.
  291798             :        */
  291799             :       /* */
  291800             : 
  291801             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  291802             : 
  291803             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  291804             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  291805             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  291806             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  291807             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  291808             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  291809             :           being used with the AST File I/O mechanism.
  291810             :        */
  291811             :           virtual bool isInMemoryPool() override;
  291812             : 
  291813             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  291814             : 
  291815             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  291816             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  291817             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  291818             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  291819             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  291820             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  291821             :           being used with the AST File I/O mechanism.
  291822             :        */
  291823             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  291824             : 
  291825             :       // DQ (4/30/2006): Modified to be a const function.
  291826             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  291827             : 
  291828             :           This functions is part of general support for many possible tools to operate 
  291829             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  291830             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  291831             :           less than the set of pointers used by the AST file I/O. This is part of
  291832             :           work implemented by Andreas, and support tools such as the AST graph generation.
  291833             : 
  291834             :           \warning This function can return unexpected data members and thus the 
  291835             :                    order and the number of elements is unpredicable and subject 
  291836             :                    to change.
  291837             : 
  291838             :           \returns STL vector of pairs of SgNode* and strings
  291839             :        */
  291840             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  291841             : 
  291842             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  291843             : 
  291844             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  291845             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  291846             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  291847             : 
  291848             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  291849             :                    and subject to change.
  291850             :        */
  291851             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  291852             : 
  291853             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  291854             : 
  291855             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  291856             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  291857             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  291858             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  291859             : 
  291860             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  291861             : 
  291862             :           \returns long
  291863             :        */
  291864             :           virtual long getChildIndex( SgNode* childNode ) const override;
  291865             : 
  291866             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  291867             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  291868             :       /* \brief Constructor for use by AST File I/O Mechanism
  291869             : 
  291870             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  291871             :           which obtained via fast binary file I/O from disk.
  291872             :        */
  291873             :        // SgUpcBlocksizeofExpression( SgUpcBlocksizeofExpressionStorageClass& source );
  291874             : 
  291875             : 
  291876             : 
  291877             : 
  291878             : 
  291879             :  // JH (10/24/2005): methods added to support the ast file IO
  291880             :     private:
  291881             : 
  291882             :       /* name AST Memory Allocation Support Functions
  291883             :           \brief Memory allocations support....
  291884             : 
  291885             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  291886             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  291887             :           and support the AST File I/O Mechanism.
  291888             :        */
  291889             :       /* */
  291890             : 
  291891             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  291892             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  291893             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  291894             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  291895             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  291896             :           a correspinding one in the AST_FILE_IO class!
  291897             :        */
  291898             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  291899             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  291900             :       /* \brief Typedef used for low level memory access.
  291901             :        */
  291902             :        // typedef unsigned char* TestType;
  291903             : 
  291904             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  291905             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  291906             :       /* \brief Typedef used to hold memory addresses as values.
  291907             :        */
  291908             :        // typedef unsigned long  AddressType;
  291909             : 
  291910             : 
  291911             : 
  291912             :        // necessary, to have direct access to the p_freepointer and the private methods !
  291913             :       /*! \brief friend class declaration to support AST File I/O */
  291914             :           friend class AST_FILE_IO;
  291915             : 
  291916             :       /*! \brief friend class declaration to support AST File I/O */
  291917             :           friend class SgUpcBlocksizeofExpressionStorageClass;
  291918             : 
  291919             :       /*! \brief friend class declaration to support AST File I/O */
  291920             :           friend class AstSpecificDataManagingClass;
  291921             : 
  291922             :       /*! \brief friend class declaration to support AST File I/O */
  291923             :           friend class AstSpecificDataManagingClassStorageClass;
  291924             :     public:
  291925             :       /*! \brief IR node constructor to support AST File I/O */
  291926             :           SgUpcBlocksizeofExpression( const SgUpcBlocksizeofExpressionStorageClass& source );
  291927             : 
  291928             :  // private: // JJW hack
  291929             :        /*
  291930             :           name AST Memory Allocation Support Variables
  291931             :           Memory allocations support variables 
  291932             : 
  291933             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  291934             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  291935             :           and support the AST File I/O Mechanism.
  291936             :        */
  291937             :       /* */
  291938             : 
  291939             :     public:
  291940             : 
  291941             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  291942             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  291943             :       // virtual SgNode* addRegExpAttribute();
  291944             :       /*! \brief Support for AST matching using regular expression.
  291945             : 
  291946             :           This support is incomplete and the subject of current research to define 
  291947             :           RegEx trees to support inexact matching.
  291948             :        */
  291949             :           SgUpcBlocksizeofExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  291950             : 
  291951             : // *** COMMON CODE SECTION ENDS HERE ***
  291952             : 
  291953             : 
  291954             : // End of memberFunctionString
  291955             : // Start of memberFunctionString
  291956             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  291957             : 
  291958             :      // the generated cast function
  291959             :      // friend ROSE_DLL_API SgUpcBlocksizeofExpression* isSgUpcBlocksizeofExpression ( SgNode* s );
  291960             : 
  291961             :           typedef SgExpression base_node_type;
  291962             : 
  291963             : 
  291964             : // End of memberFunctionString
  291965             : // Start of memberFunctionString
  291966             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  291967             : 
  291968             :           SgType* get_type() const override;
  291969             : 
  291970             : 
  291971             : // End of memberFunctionString
  291972             : // Start of memberFunctionString
  291973             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  291974             : 
  291975             :           void post_construction_initialization() override;
  291976             : 
  291977             : 
  291978             : // End of memberFunctionString
  291979             : 
  291980             :      public: 
  291981             :          SgExpression* get_expression() const;
  291982             :          void set_expression(SgExpression* expression);
  291983             : 
  291984             :      public: 
  291985             :          SgType* get_operand_type() const;
  291986             :          void set_operand_type(SgType* operand_type);
  291987             : 
  291988             : 
  291989             : 
  291990             :      public: 
  291991             :          virtual ~SgUpcBlocksizeofExpression();
  291992             : 
  291993             : 
  291994             :      public: 
  291995             :          SgUpcBlocksizeofExpression(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL, SgType* operand_type = NULL, SgType* expression_type = NULL); 
  291996             :          SgUpcBlocksizeofExpression(SgExpression* expression, SgType* operand_type, SgType* expression_type); 
  291997             : 
  291998             :     protected:
  291999             : // Start of memberFunctionString
  292000             : SgExpression* p_expression;
  292001             :           
  292002             : // End of memberFunctionString
  292003             : // Start of memberFunctionString
  292004             : SgType* p_operand_type;
  292005             :           
  292006             : // End of memberFunctionString
  292007             : // Start of memberFunctionString
  292008             : SgType* p_expression_type;
  292009             :           
  292010             : // End of memberFunctionString
  292011             : 
  292012             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcBlocksizeofExpression>;
  292013             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcBlocksizeofExpression, SgExpression*,&SgUpcBlocksizeofExpression::p_expression>;
  292014             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcBlocksizeofExpression, SgType*,&SgUpcBlocksizeofExpression::p_operand_type>;
  292015             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcBlocksizeofExpression, SgType*,&SgUpcBlocksizeofExpression::p_expression_type>;
  292016             : 
  292017             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292018             : 
  292019             : 
  292020             :    };
  292021             : #endif
  292022             : 
  292023             : // postdeclarations for SgUpcBlocksizeofExpression
  292024             : 
  292025             : /* #line 292026 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292026             : 
  292027             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  292028             : 
  292029             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292030             : 
  292031             : 
  292032             : /* #line 292033 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292033             : 
  292034             : 
  292035             : 
  292036             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292037             : 
  292038             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  292039             : //      This code is automatically generated for each 
  292040             : //      terminal and non-terminal within the defined 
  292041             : //      grammar.  There is a simple way to change the 
  292042             : //      code to fix bugs etc.  See the ROSE README file
  292043             : //      for directions.
  292044             : 
  292045             : // tps: (02/22/2010): Adding DLL export requirements
  292046             : #include "rosedll.h"
  292047             : 
  292048             : // predeclarations for SgUpcElemsizeofExpression
  292049             : 
  292050             : /* #line 292051 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292051             : 
  292052             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  292053             : 
  292054             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292055             : 
  292056             : #if 1
  292057             : // Class Definition for SgUpcElemsizeofExpression
  292058             : class ROSE_DLL_API SgUpcElemsizeofExpression  : public SgExpression
  292059             :    {
  292060             :      public:
  292061             : 
  292062             : 
  292063             : /* #line 292064 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292064             : 
  292065             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  292066             : // Start of memberFunctionString
  292067             : /* #line 1845 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  292068             : 
  292069             : //        virtual unsigned int cfgIndexForEnd() const;
  292070             : //        virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index);
  292071             : //        virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index);
  292072             : 
  292073             : 
  292074             : // End of memberFunctionString
  292075             : // Start of memberFunctionString
  292076             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  292077             : 
  292078             : // *** COMMON CODE SECTION BEGINS HERE ***
  292079             : 
  292080             :     public:
  292081             : 
  292082             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  292083             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  292084             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  292085             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  292086             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  292087             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  292088             : 
  292089             :       /*! \brief returns a string representing the class name */
  292090             :           virtual std::string class_name() const override;
  292091             : 
  292092             :       /*! \brief returns new style SageIII enum values */
  292093             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  292094             : 
  292095             :       /*! \brief static variant value */
  292096             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  292097             :        // static const VariantT static_variant = V_SgUpcElemsizeofExpression;
  292098             :           enum { static_variant = V_SgUpcElemsizeofExpression };
  292099             : 
  292100             :        /* the generated cast function */
  292101             :       /*! \brief Casts pointer from base class to derived class */
  292102             :           ROSE_DLL_API friend       SgUpcElemsizeofExpression* isSgUpcElemsizeofExpression(       SgNode * s );
  292103             : 
  292104             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  292105             :           ROSE_DLL_API friend const SgUpcElemsizeofExpression* isSgUpcElemsizeofExpression( const SgNode * s );
  292106             : 
  292107             :      // ******************************************
  292108             :      // * Memory Pool / New / Delete
  292109             :      // ******************************************
  292110             : 
  292111             :      public:
  292112             :           /// \private
  292113             :           static const unsigned pool_size; //
  292114             :           /// \private
  292115             :           static std::vector<unsigned char *> pools; //
  292116             :           /// \private
  292117             :           static SgUpcElemsizeofExpression * next_node; // 
  292118             : 
  292119             :           /// \private
  292120             :           static unsigned long initializeStorageClassArray(SgUpcElemsizeofExpressionStorageClass *); //
  292121             : 
  292122             :           /// \private
  292123             :           static void clearMemoryPool(); //
  292124             :           static void deleteMemoryPool(); //
  292125             : 
  292126             :           /// \private
  292127             :           static void extendMemoryPoolForFileIO(); //
  292128             : 
  292129             :           /// \private
  292130             :           static SgUpcElemsizeofExpression * getPointerFromGlobalIndex(unsigned long); //
  292131             :           /// \private
  292132             :           static SgUpcElemsizeofExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  292133             : 
  292134             :           /// \private
  292135             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  292136             :           /// \private
  292137             :           static void resetValidFreepointers(); //
  292138             :           /// \private
  292139             :           static unsigned long getNumberOfLastValidPointer(); //
  292140             : 
  292141             : 
  292142             : #if defined(INLINE_FUNCTIONS)
  292143             :       /*! \brief returns pointer to newly allocated IR node */
  292144             :           inline void *operator new (size_t size);
  292145             : #else
  292146             :       /*! \brief returns pointer to newly allocated IR node */
  292147             :           void *operator new (size_t size);
  292148             : #endif
  292149             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  292150             :           void operator delete (void* pointer, size_t size);
  292151             : 
  292152             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  292153           0 :           void operator delete (void* pointer)
  292154             :              {
  292155             :             // This is the generated delete operator...
  292156           0 :                SgUpcElemsizeofExpression::operator delete (pointer,sizeof(SgUpcElemsizeofExpression));
  292157             :              }
  292158             : 
  292159             :       /*! \brief Returns the total number of IR nodes of this type */
  292160             :           static size_t numberOfNodes();
  292161             : 
  292162             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  292163             :           static size_t memoryUsage();
  292164             : 
  292165             :       // End of scope which started in IR nodes specific code 
  292166             :       /* */
  292167             : 
  292168             :       /* name Internal Functions
  292169             :           \brief Internal functions ... incomplete-documentation
  292170             : 
  292171             :           These functions have been made public as part of the design, but they are suggested for internal use 
  292172             :           or by particularly knowledgeable users for specialized tools or applications.
  292173             : 
  292174             :           \internal We could not make these private because they are required by user for special purposes. And 
  292175             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  292176             :          
  292177             :        */
  292178             : 
  292179             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  292180             :        // overridden in every class by *generated* implementation
  292181             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  292182             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  292183             :        // MS: 06/28/02 container of names of variables or container indices 
  292184             :        // used used in the traversal to access AST successor nodes
  292185             :        // overridden in every class by *generated* implementation
  292186             :       /*! \brief container of names of variables or container indices used used in the traversal
  292187             :           to access AST successor nodes overridden in every class by *generated* implementation */
  292188             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  292189             : 
  292190             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  292191             :        // than all the vector copies. The implementation for these functions is generated for each class.
  292192             :       /*! \brief return number of children in the traversal successor list */
  292193             :           virtual size_t get_numberOfTraversalSuccessors() override;
  292194             :       /*! \brief index-based access to traversal successors by index number */
  292195             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  292196             :       /*! \brief index-based access to traversal successors by child node */
  292197             :           virtual size_t get_childIndex(SgNode *child) override;
  292198             : 
  292199             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  292200             :        // MS: 08/16/2002 method for generating RTI information
  292201             :       /*! \brief return C++ Runtime-Time-Information */
  292202             :           virtual RTIReturnType roseRTI() override;
  292203             : #endif
  292204             :       /* */
  292205             : 
  292206             : 
  292207             : 
  292208             :       /* name Deprecated Functions
  292209             :           \brief Deprecated functions ... incomplete-documentation
  292210             : 
  292211             :           These functions have been deprecated from use.
  292212             :        */
  292213             :       /* */
  292214             : 
  292215             :       /*! returns a C style string (char*) representing the class name */
  292216             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  292217             : 
  292218             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  292219             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  292220             : #if 0
  292221             :       /*! returns old style Sage II enum values */
  292222             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  292223             :       /*! returns old style Sage II enum values */
  292224             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  292225             : #endif
  292226             :       /* */
  292227             : 
  292228             : 
  292229             : 
  292230             : 
  292231             :      public:
  292232             :       /* name Traversal Support Functions
  292233             :           \brief Traversal support functions ... incomplete-documentation
  292234             : 
  292235             :           These functions have been made public as part of the design, but they are suggested for internal use 
  292236             :           or by particularly knowledgable users for specialized tools or applications.
  292237             :        */
  292238             :       /* */
  292239             : 
  292240             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  292241             :        // (inferior to ROSE traversal mechanism, experimental).
  292242             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  292243             :        */
  292244             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  292245             : 
  292246             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  292247             :       /*! \brief support for the classic visitor pattern done in GoF */
  292248             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  292249             : 
  292250             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  292251             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  292252             :        */
  292253             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  292254             : 
  292255             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  292256             :        */
  292257             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  292258             : 
  292259             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  292260             :        // This traversal helps support internal tools that call static member functions.
  292261             :        // note: this function operates on the memory pools.
  292262             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  292263             :        */
  292264             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  292265             :       /* */
  292266             : 
  292267             : 
  292268             :      public:
  292269             :       /* name Memory Allocation Functions
  292270             :           \brief Memory allocations functions ... incomplete-documentation
  292271             : 
  292272             :           These functions have been made public as part of the design, but they are suggested for internal use 
  292273             :           or by particularly knowledgable users for specialized tools or applications.
  292274             :        */
  292275             :       /* */
  292276             : 
  292277             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  292278             : 
  292279             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  292280             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  292281             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  292282             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  292283             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  292284             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  292285             :           being used with the AST File I/O mechanism.
  292286             :        */
  292287             :           virtual bool isInMemoryPool() override;
  292288             : 
  292289             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  292290             : 
  292291             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  292292             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  292293             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  292294             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  292295             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  292296             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  292297             :           being used with the AST File I/O mechanism.
  292298             :        */
  292299             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  292300             : 
  292301             :       // DQ (4/30/2006): Modified to be a const function.
  292302             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  292303             : 
  292304             :           This functions is part of general support for many possible tools to operate 
  292305             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  292306             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  292307             :           less than the set of pointers used by the AST file I/O. This is part of
  292308             :           work implemented by Andreas, and support tools such as the AST graph generation.
  292309             : 
  292310             :           \warning This function can return unexpected data members and thus the 
  292311             :                    order and the number of elements is unpredicable and subject 
  292312             :                    to change.
  292313             : 
  292314             :           \returns STL vector of pairs of SgNode* and strings
  292315             :        */
  292316             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  292317             : 
  292318             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  292319             : 
  292320             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  292321             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  292322             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  292323             : 
  292324             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  292325             :                    and subject to change.
  292326             :        */
  292327             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  292328             : 
  292329             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  292330             : 
  292331             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  292332             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  292333             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  292334             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  292335             : 
  292336             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  292337             : 
  292338             :           \returns long
  292339             :        */
  292340             :           virtual long getChildIndex( SgNode* childNode ) const override;
  292341             : 
  292342             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  292343             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  292344             :       /* \brief Constructor for use by AST File I/O Mechanism
  292345             : 
  292346             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  292347             :           which obtained via fast binary file I/O from disk.
  292348             :        */
  292349             :        // SgUpcElemsizeofExpression( SgUpcElemsizeofExpressionStorageClass& source );
  292350             : 
  292351             : 
  292352             : 
  292353             : 
  292354             : 
  292355             :  // JH (10/24/2005): methods added to support the ast file IO
  292356             :     private:
  292357             : 
  292358             :       /* name AST Memory Allocation Support Functions
  292359             :           \brief Memory allocations support....
  292360             : 
  292361             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  292362             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  292363             :           and support the AST File I/O Mechanism.
  292364             :        */
  292365             :       /* */
  292366             : 
  292367             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  292368             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  292369             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  292370             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  292371             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  292372             :           a correspinding one in the AST_FILE_IO class!
  292373             :        */
  292374             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  292375             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  292376             :       /* \brief Typedef used for low level memory access.
  292377             :        */
  292378             :        // typedef unsigned char* TestType;
  292379             : 
  292380             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  292381             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  292382             :       /* \brief Typedef used to hold memory addresses as values.
  292383             :        */
  292384             :        // typedef unsigned long  AddressType;
  292385             : 
  292386             : 
  292387             : 
  292388             :        // necessary, to have direct access to the p_freepointer and the private methods !
  292389             :       /*! \brief friend class declaration to support AST File I/O */
  292390             :           friend class AST_FILE_IO;
  292391             : 
  292392             :       /*! \brief friend class declaration to support AST File I/O */
  292393             :           friend class SgUpcElemsizeofExpressionStorageClass;
  292394             : 
  292395             :       /*! \brief friend class declaration to support AST File I/O */
  292396             :           friend class AstSpecificDataManagingClass;
  292397             : 
  292398             :       /*! \brief friend class declaration to support AST File I/O */
  292399             :           friend class AstSpecificDataManagingClassStorageClass;
  292400             :     public:
  292401             :       /*! \brief IR node constructor to support AST File I/O */
  292402             :           SgUpcElemsizeofExpression( const SgUpcElemsizeofExpressionStorageClass& source );
  292403             : 
  292404             :  // private: // JJW hack
  292405             :        /*
  292406             :           name AST Memory Allocation Support Variables
  292407             :           Memory allocations support variables 
  292408             : 
  292409             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  292410             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  292411             :           and support the AST File I/O Mechanism.
  292412             :        */
  292413             :       /* */
  292414             : 
  292415             :     public:
  292416             : 
  292417             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  292418             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  292419             :       // virtual SgNode* addRegExpAttribute();
  292420             :       /*! \brief Support for AST matching using regular expression.
  292421             : 
  292422             :           This support is incomplete and the subject of current research to define 
  292423             :           RegEx trees to support inexact matching.
  292424             :        */
  292425             :           SgUpcElemsizeofExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  292426             : 
  292427             : // *** COMMON CODE SECTION ENDS HERE ***
  292428             : 
  292429             : 
  292430             : // End of memberFunctionString
  292431             : // Start of memberFunctionString
  292432             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  292433             : 
  292434             :      // the generated cast function
  292435             :      // friend ROSE_DLL_API SgUpcElemsizeofExpression* isSgUpcElemsizeofExpression ( SgNode* s );
  292436             : 
  292437             :           typedef SgExpression base_node_type;
  292438             : 
  292439             : 
  292440             : // End of memberFunctionString
  292441             : // Start of memberFunctionString
  292442             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  292443             : 
  292444             :           SgType* get_type() const override;
  292445             : 
  292446             : 
  292447             : // End of memberFunctionString
  292448             : // Start of memberFunctionString
  292449             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  292450             : 
  292451             :           void post_construction_initialization() override;
  292452             : 
  292453             : 
  292454             : // End of memberFunctionString
  292455             : 
  292456             :      public: 
  292457             :          SgExpression* get_expression() const;
  292458             :          void set_expression(SgExpression* expression);
  292459             : 
  292460             :      public: 
  292461             :          SgType* get_operand_type() const;
  292462             :          void set_operand_type(SgType* operand_type);
  292463             : 
  292464             : 
  292465             : 
  292466             :      public: 
  292467             :          virtual ~SgUpcElemsizeofExpression();
  292468             : 
  292469             : 
  292470             :      public: 
  292471             :          SgUpcElemsizeofExpression(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL, SgType* operand_type = NULL, SgType* expression_type = NULL); 
  292472             :          SgUpcElemsizeofExpression(SgExpression* expression, SgType* operand_type, SgType* expression_type); 
  292473             : 
  292474             :     protected:
  292475             : // Start of memberFunctionString
  292476             : SgExpression* p_expression;
  292477             :           
  292478             : // End of memberFunctionString
  292479             : // Start of memberFunctionString
  292480             : SgType* p_operand_type;
  292481             :           
  292482             : // End of memberFunctionString
  292483             : // Start of memberFunctionString
  292484             : SgType* p_expression_type;
  292485             :           
  292486             : // End of memberFunctionString
  292487             : 
  292488             :     friend struct Rose::Traits::generated::describe_node_t<SgUpcElemsizeofExpression>;
  292489             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcElemsizeofExpression, SgExpression*,&SgUpcElemsizeofExpression::p_expression>;
  292490             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcElemsizeofExpression, SgType*,&SgUpcElemsizeofExpression::p_operand_type>;
  292491             :     friend struct Rose::Traits::generated::describe_field_t<SgUpcElemsizeofExpression, SgType*,&SgUpcElemsizeofExpression::p_expression_type>;
  292492             : 
  292493             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292494             : 
  292495             : 
  292496             :    };
  292497             : #endif
  292498             : 
  292499             : // postdeclarations for SgUpcElemsizeofExpression
  292500             : 
  292501             : /* #line 292502 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292502             : 
  292503             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  292504             : 
  292505             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292506             : 
  292507             : 
  292508             : /* #line 292509 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292509             : 
  292510             : 
  292511             : 
  292512             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292513             : 
  292514             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  292515             : //      This code is automatically generated for each 
  292516             : //      terminal and non-terminal within the defined 
  292517             : //      grammar.  There is a simple way to change the 
  292518             : //      code to fix bugs etc.  See the ROSE README file
  292519             : //      for directions.
  292520             : 
  292521             : // tps: (02/22/2010): Adding DLL export requirements
  292522             : #include "rosedll.h"
  292523             : 
  292524             : // predeclarations for SgSuperExp
  292525             : 
  292526             : /* #line 292527 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292527             : 
  292528             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  292529             : 
  292530             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292531             : 
  292532             : #if 1
  292533             : // Class Definition for SgSuperExp
  292534             : class ROSE_DLL_API SgSuperExp  : public SgExpression
  292535             :    {
  292536             :      public:
  292537             : 
  292538             : 
  292539             : /* #line 292540 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292540             : 
  292541             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  292542             : // Start of memberFunctionString
  292543             : /* #line 1352 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  292544             : 
  292545             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  292546             :           virtual unsigned int cfgIndexForEnd() const override;
  292547             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  292548             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  292549             : #endif
  292550             : 
  292551             : 
  292552             : 
  292553             : // End of memberFunctionString
  292554             : // Start of memberFunctionString
  292555             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  292556             : 
  292557             : // *** COMMON CODE SECTION BEGINS HERE ***
  292558             : 
  292559             :     public:
  292560             : 
  292561             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  292562             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  292563             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  292564             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  292565             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  292566             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  292567             : 
  292568             :       /*! \brief returns a string representing the class name */
  292569             :           virtual std::string class_name() const override;
  292570             : 
  292571             :       /*! \brief returns new style SageIII enum values */
  292572             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  292573             : 
  292574             :       /*! \brief static variant value */
  292575             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  292576             :        // static const VariantT static_variant = V_SgSuperExp;
  292577             :           enum { static_variant = V_SgSuperExp };
  292578             : 
  292579             :        /* the generated cast function */
  292580             :       /*! \brief Casts pointer from base class to derived class */
  292581             :           ROSE_DLL_API friend       SgSuperExp* isSgSuperExp(       SgNode * s );
  292582             : 
  292583             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  292584             :           ROSE_DLL_API friend const SgSuperExp* isSgSuperExp( const SgNode * s );
  292585             : 
  292586             :      // ******************************************
  292587             :      // * Memory Pool / New / Delete
  292588             :      // ******************************************
  292589             : 
  292590             :      public:
  292591             :           /// \private
  292592             :           static const unsigned pool_size; //
  292593             :           /// \private
  292594             :           static std::vector<unsigned char *> pools; //
  292595             :           /// \private
  292596             :           static SgSuperExp * next_node; // 
  292597             : 
  292598             :           /// \private
  292599             :           static unsigned long initializeStorageClassArray(SgSuperExpStorageClass *); //
  292600             : 
  292601             :           /// \private
  292602             :           static void clearMemoryPool(); //
  292603             :           static void deleteMemoryPool(); //
  292604             : 
  292605             :           /// \private
  292606             :           static void extendMemoryPoolForFileIO(); //
  292607             : 
  292608             :           /// \private
  292609             :           static SgSuperExp * getPointerFromGlobalIndex(unsigned long); //
  292610             :           /// \private
  292611             :           static SgSuperExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  292612             : 
  292613             :           /// \private
  292614             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  292615             :           /// \private
  292616             :           static void resetValidFreepointers(); //
  292617             :           /// \private
  292618             :           static unsigned long getNumberOfLastValidPointer(); //
  292619             : 
  292620             : 
  292621             : #if defined(INLINE_FUNCTIONS)
  292622             :       /*! \brief returns pointer to newly allocated IR node */
  292623             :           inline void *operator new (size_t size);
  292624             : #else
  292625             :       /*! \brief returns pointer to newly allocated IR node */
  292626             :           void *operator new (size_t size);
  292627             : #endif
  292628             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  292629             :           void operator delete (void* pointer, size_t size);
  292630             : 
  292631             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  292632           0 :           void operator delete (void* pointer)
  292633             :              {
  292634             :             // This is the generated delete operator...
  292635           0 :                SgSuperExp::operator delete (pointer,sizeof(SgSuperExp));
  292636             :              }
  292637             : 
  292638             :       /*! \brief Returns the total number of IR nodes of this type */
  292639             :           static size_t numberOfNodes();
  292640             : 
  292641             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  292642             :           static size_t memoryUsage();
  292643             : 
  292644             :       // End of scope which started in IR nodes specific code 
  292645             :       /* */
  292646             : 
  292647             :       /* name Internal Functions
  292648             :           \brief Internal functions ... incomplete-documentation
  292649             : 
  292650             :           These functions have been made public as part of the design, but they are suggested for internal use 
  292651             :           or by particularly knowledgeable users for specialized tools or applications.
  292652             : 
  292653             :           \internal We could not make these private because they are required by user for special purposes. And 
  292654             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  292655             :          
  292656             :        */
  292657             : 
  292658             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  292659             :        // overridden in every class by *generated* implementation
  292660             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  292661             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  292662             :        // MS: 06/28/02 container of names of variables or container indices 
  292663             :        // used used in the traversal to access AST successor nodes
  292664             :        // overridden in every class by *generated* implementation
  292665             :       /*! \brief container of names of variables or container indices used used in the traversal
  292666             :           to access AST successor nodes overridden in every class by *generated* implementation */
  292667             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  292668             : 
  292669             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  292670             :        // than all the vector copies. The implementation for these functions is generated for each class.
  292671             :       /*! \brief return number of children in the traversal successor list */
  292672             :           virtual size_t get_numberOfTraversalSuccessors() override;
  292673             :       /*! \brief index-based access to traversal successors by index number */
  292674             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  292675             :       /*! \brief index-based access to traversal successors by child node */
  292676             :           virtual size_t get_childIndex(SgNode *child) override;
  292677             : 
  292678             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  292679             :        // MS: 08/16/2002 method for generating RTI information
  292680             :       /*! \brief return C++ Runtime-Time-Information */
  292681             :           virtual RTIReturnType roseRTI() override;
  292682             : #endif
  292683             :       /* */
  292684             : 
  292685             : 
  292686             : 
  292687             :       /* name Deprecated Functions
  292688             :           \brief Deprecated functions ... incomplete-documentation
  292689             : 
  292690             :           These functions have been deprecated from use.
  292691             :        */
  292692             :       /* */
  292693             : 
  292694             :       /*! returns a C style string (char*) representing the class name */
  292695             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  292696             : 
  292697             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  292698             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  292699             : #if 0
  292700             :       /*! returns old style Sage II enum values */
  292701             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  292702             :       /*! returns old style Sage II enum values */
  292703             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  292704             : #endif
  292705             :       /* */
  292706             : 
  292707             : 
  292708             : 
  292709             : 
  292710             :      public:
  292711             :       /* name Traversal Support Functions
  292712             :           \brief Traversal support functions ... incomplete-documentation
  292713             : 
  292714             :           These functions have been made public as part of the design, but they are suggested for internal use 
  292715             :           or by particularly knowledgable users for specialized tools or applications.
  292716             :        */
  292717             :       /* */
  292718             : 
  292719             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  292720             :        // (inferior to ROSE traversal mechanism, experimental).
  292721             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  292722             :        */
  292723             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  292724             : 
  292725             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  292726             :       /*! \brief support for the classic visitor pattern done in GoF */
  292727             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  292728             : 
  292729             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  292730             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  292731             :        */
  292732             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  292733             : 
  292734             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  292735             :        */
  292736             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  292737             : 
  292738             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  292739             :        // This traversal helps support internal tools that call static member functions.
  292740             :        // note: this function operates on the memory pools.
  292741             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  292742             :        */
  292743             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  292744             :       /* */
  292745             : 
  292746             : 
  292747             :      public:
  292748             :       /* name Memory Allocation Functions
  292749             :           \brief Memory allocations functions ... incomplete-documentation
  292750             : 
  292751             :           These functions have been made public as part of the design, but they are suggested for internal use 
  292752             :           or by particularly knowledgable users for specialized tools or applications.
  292753             :        */
  292754             :       /* */
  292755             : 
  292756             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  292757             : 
  292758             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  292759             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  292760             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  292761             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  292762             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  292763             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  292764             :           being used with the AST File I/O mechanism.
  292765             :        */
  292766             :           virtual bool isInMemoryPool() override;
  292767             : 
  292768             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  292769             : 
  292770             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  292771             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  292772             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  292773             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  292774             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  292775             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  292776             :           being used with the AST File I/O mechanism.
  292777             :        */
  292778             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  292779             : 
  292780             :       // DQ (4/30/2006): Modified to be a const function.
  292781             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  292782             : 
  292783             :           This functions is part of general support for many possible tools to operate 
  292784             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  292785             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  292786             :           less than the set of pointers used by the AST file I/O. This is part of
  292787             :           work implemented by Andreas, and support tools such as the AST graph generation.
  292788             : 
  292789             :           \warning This function can return unexpected data members and thus the 
  292790             :                    order and the number of elements is unpredicable and subject 
  292791             :                    to change.
  292792             : 
  292793             :           \returns STL vector of pairs of SgNode* and strings
  292794             :        */
  292795             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  292796             : 
  292797             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  292798             : 
  292799             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  292800             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  292801             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  292802             : 
  292803             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  292804             :                    and subject to change.
  292805             :        */
  292806             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  292807             : 
  292808             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  292809             : 
  292810             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  292811             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  292812             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  292813             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  292814             : 
  292815             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  292816             : 
  292817             :           \returns long
  292818             :        */
  292819             :           virtual long getChildIndex( SgNode* childNode ) const override;
  292820             : 
  292821             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  292822             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  292823             :       /* \brief Constructor for use by AST File I/O Mechanism
  292824             : 
  292825             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  292826             :           which obtained via fast binary file I/O from disk.
  292827             :        */
  292828             :        // SgSuperExp( SgSuperExpStorageClass& source );
  292829             : 
  292830             : 
  292831             : 
  292832             : 
  292833             : 
  292834             :  // JH (10/24/2005): methods added to support the ast file IO
  292835             :     private:
  292836             : 
  292837             :       /* name AST Memory Allocation Support Functions
  292838             :           \brief Memory allocations support....
  292839             : 
  292840             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  292841             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  292842             :           and support the AST File I/O Mechanism.
  292843             :        */
  292844             :       /* */
  292845             : 
  292846             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  292847             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  292848             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  292849             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  292850             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  292851             :           a correspinding one in the AST_FILE_IO class!
  292852             :        */
  292853             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  292854             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  292855             :       /* \brief Typedef used for low level memory access.
  292856             :        */
  292857             :        // typedef unsigned char* TestType;
  292858             : 
  292859             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  292860             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  292861             :       /* \brief Typedef used to hold memory addresses as values.
  292862             :        */
  292863             :        // typedef unsigned long  AddressType;
  292864             : 
  292865             : 
  292866             : 
  292867             :        // necessary, to have direct access to the p_freepointer and the private methods !
  292868             :       /*! \brief friend class declaration to support AST File I/O */
  292869             :           friend class AST_FILE_IO;
  292870             : 
  292871             :       /*! \brief friend class declaration to support AST File I/O */
  292872             :           friend class SgSuperExpStorageClass;
  292873             : 
  292874             :       /*! \brief friend class declaration to support AST File I/O */
  292875             :           friend class AstSpecificDataManagingClass;
  292876             : 
  292877             :       /*! \brief friend class declaration to support AST File I/O */
  292878             :           friend class AstSpecificDataManagingClassStorageClass;
  292879             :     public:
  292880             :       /*! \brief IR node constructor to support AST File I/O */
  292881             :           SgSuperExp( const SgSuperExpStorageClass& source );
  292882             : 
  292883             :  // private: // JJW hack
  292884             :        /*
  292885             :           name AST Memory Allocation Support Variables
  292886             :           Memory allocations support variables 
  292887             : 
  292888             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  292889             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  292890             :           and support the AST File I/O Mechanism.
  292891             :        */
  292892             :       /* */
  292893             : 
  292894             :     public:
  292895             : 
  292896             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  292897             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  292898             :       // virtual SgNode* addRegExpAttribute();
  292899             :       /*! \brief Support for AST matching using regular expression.
  292900             : 
  292901             :           This support is incomplete and the subject of current research to define 
  292902             :           RegEx trees to support inexact matching.
  292903             :        */
  292904             :           SgSuperExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  292905             : 
  292906             : // *** COMMON CODE SECTION ENDS HERE ***
  292907             : 
  292908             : 
  292909             : // End of memberFunctionString
  292910             : // Start of memberFunctionString
  292911             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  292912             : 
  292913             :      // the generated cast function
  292914             :      // friend ROSE_DLL_API SgSuperExp* isSgSuperExp ( SgNode* s );
  292915             : 
  292916             :           typedef SgExpression base_node_type;
  292917             : 
  292918             : 
  292919             : // End of memberFunctionString
  292920             : // Start of memberFunctionString
  292921             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  292922             : 
  292923             :           SgType* get_type() const override;
  292924             : 
  292925             : 
  292926             : // End of memberFunctionString
  292927             : // Start of memberFunctionString
  292928             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  292929             : 
  292930             :           void post_construction_initialization() override;
  292931             : 
  292932             : 
  292933             : // End of memberFunctionString
  292934             : 
  292935             :      public: 
  292936             :          SgClassSymbol* get_class_symbol() const;
  292937             :          void set_class_symbol(SgClassSymbol* class_symbol);
  292938             : 
  292939             :      public: 
  292940             :          int get_pobj_super() const;
  292941             :          void set_pobj_super(int pobj_super);
  292942             : 
  292943             : 
  292944             :      public: 
  292945             :          virtual ~SgSuperExp();
  292946             : 
  292947             : 
  292948             :      public: 
  292949             :          SgSuperExp(Sg_File_Info* startOfConstruct , SgClassSymbol* class_symbol = NULL, int pobj_super = 0); 
  292950             :          SgSuperExp(SgClassSymbol* class_symbol, int pobj_super); 
  292951             : 
  292952             :     protected:
  292953             : // Start of memberFunctionString
  292954             : SgClassSymbol* p_class_symbol;
  292955             :           
  292956             : // End of memberFunctionString
  292957             : // Start of memberFunctionString
  292958             : int p_pobj_super;
  292959             :           
  292960             : // End of memberFunctionString
  292961             : 
  292962             :     friend struct Rose::Traits::generated::describe_node_t<SgSuperExp>;
  292963             :     friend struct Rose::Traits::generated::describe_field_t<SgSuperExp, SgClassSymbol*,&SgSuperExp::p_class_symbol>;
  292964             :     friend struct Rose::Traits::generated::describe_field_t<SgSuperExp, int,&SgSuperExp::p_pobj_super>;
  292965             : 
  292966             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292967             : 
  292968             : 
  292969             :    };
  292970             : #endif
  292971             : 
  292972             : // postdeclarations for SgSuperExp
  292973             : 
  292974             : /* #line 292975 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292975             : 
  292976             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  292977             : 
  292978             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292979             : 
  292980             : 
  292981             : /* #line 292982 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  292982             : 
  292983             : 
  292984             : 
  292985             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  292986             : 
  292987             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  292988             : //      This code is automatically generated for each 
  292989             : //      terminal and non-terminal within the defined 
  292990             : //      grammar.  There is a simple way to change the 
  292991             : //      code to fix bugs etc.  See the ROSE README file
  292992             : //      for directions.
  292993             : 
  292994             : // tps: (02/22/2010): Adding DLL export requirements
  292995             : #include "rosedll.h"
  292996             : 
  292997             : // predeclarations for SgTypeIdOp
  292998             : 
  292999             : /* #line 293000 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  293000             : 
  293001             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  293002             : 
  293003             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  293004             : 
  293005             : #if 1
  293006             : // Class Definition for SgTypeIdOp
  293007             : class ROSE_DLL_API SgTypeIdOp  : public SgExpression
  293008             :    {
  293009             :      public:
  293010             : 
  293011             : 
  293012             : /* #line 293013 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  293013             : 
  293014             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  293015             : // Start of memberFunctionString
  293016             : /* #line 1052 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  293017             : 
  293018             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  293019             :           virtual unsigned int cfgIndexForEnd() const override;
  293020             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  293021             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  293022             : #endif
  293023             : 
  293024             :        // get lvalue
  293025             :           virtual bool isLValue() const override;
  293026             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  293027             : 
  293028             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  293029             :           int get_name_qualification_length() const override;
  293030             :           void set_name_qualification_length(int name_qualification_length) override;
  293031             : 
  293032             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  293033             :           bool get_type_elaboration_required() const override;
  293034             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  293035             : 
  293036             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  293037             :           bool get_global_qualification_required() const override;
  293038             :           void set_global_qualification_required(bool global_qualification_required) override;
  293039             : 
  293040             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  293041             :           int get_name_qualification_for_pointer_to_member_class_length() const override;
  293042             :           void set_name_qualification_for_pointer_to_member_class_length(int name_qualification_length) override;
  293043             : 
  293044             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  293045             :           bool get_type_elaboration_for_pointer_to_member_class_required() const override;
  293046             :           void set_type_elaboration_for_pointer_to_member_class_required(bool type_elaboration_required) override;
  293047             : 
  293048             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  293049             :           bool get_global_qualification_for_pointer_to_member_class_required() const override;
  293050             :           void set_global_qualification_for_pointer_to_member_class_required(bool global_qualification_required) override;
  293051             : 
  293052             : 
  293053             : 
  293054             : // End of memberFunctionString
  293055             : // Start of memberFunctionString
  293056             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  293057             : 
  293058             : // *** COMMON CODE SECTION BEGINS HERE ***
  293059             : 
  293060             :     public:
  293061             : 
  293062             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  293063             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  293064             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  293065             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  293066             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  293067             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  293068             : 
  293069             :       /*! \brief returns a string representing the class name */
  293070             :           virtual std::string class_name() const override;
  293071             : 
  293072             :       /*! \brief returns new style SageIII enum values */
  293073             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  293074             : 
  293075             :       /*! \brief static variant value */
  293076             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  293077             :        // static const VariantT static_variant = V_SgTypeIdOp;
  293078             :           enum { static_variant = V_SgTypeIdOp };
  293079             : 
  293080             :        /* the generated cast function */
  293081             :       /*! \brief Casts pointer from base class to derived class */
  293082             :           ROSE_DLL_API friend       SgTypeIdOp* isSgTypeIdOp(       SgNode * s );
  293083             : 
  293084             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  293085             :           ROSE_DLL_API friend const SgTypeIdOp* isSgTypeIdOp( const SgNode * s );
  293086             : 
  293087             :      // ******************************************
  293088             :      // * Memory Pool / New / Delete
  293089             :      // ******************************************
  293090             : 
  293091             :      public:
  293092             :           /// \private
  293093             :           static const unsigned pool_size; //
  293094             :           /// \private
  293095             :           static std::vector<unsigned char *> pools; //
  293096             :           /// \private
  293097             :           static SgTypeIdOp * next_node; // 
  293098             : 
  293099             :           /// \private
  293100             :           static unsigned long initializeStorageClassArray(SgTypeIdOpStorageClass *); //
  293101             : 
  293102             :           /// \private
  293103             :           static void clearMemoryPool(); //
  293104             :           static void deleteMemoryPool(); //
  293105             : 
  293106             :           /// \private
  293107             :           static void extendMemoryPoolForFileIO(); //
  293108             : 
  293109             :           /// \private
  293110             :           static SgTypeIdOp * getPointerFromGlobalIndex(unsigned long); //
  293111             :           /// \private
  293112             :           static SgTypeIdOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  293113             : 
  293114             :           /// \private
  293115             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  293116             :           /// \private
  293117             :           static void resetValidFreepointers(); //
  293118             :           /// \private
  293119             :           static unsigned long getNumberOfLastValidPointer(); //
  293120             : 
  293121             : 
  293122             : #if defined(INLINE_FUNCTIONS)
  293123             :       /*! \brief returns pointer to newly allocated IR node */
  293124             :           inline void *operator new (size_t size);
  293125             : #else
  293126             :       /*! \brief returns pointer to newly allocated IR node */
  293127             :           void *operator new (size_t size);
  293128             : #endif
  293129             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  293130             :           void operator delete (void* pointer, size_t size);
  293131             : 
  293132             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  293133           2 :           void operator delete (void* pointer)
  293134             :              {
  293135             :             // This is the generated delete operator...
  293136           2 :                SgTypeIdOp::operator delete (pointer,sizeof(SgTypeIdOp));
  293137             :              }
  293138             : 
  293139             :       /*! \brief Returns the total number of IR nodes of this type */
  293140             :           static size_t numberOfNodes();
  293141             : 
  293142             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  293143             :           static size_t memoryUsage();
  293144             : 
  293145             :       // End of scope which started in IR nodes specific code 
  293146             :       /* */
  293147             : 
  293148             :       /* name Internal Functions
  293149             :           \brief Internal functions ... incomplete-documentation
  293150             : 
  293151             :           These functions have been made public as part of the design, but they are suggested for internal use 
  293152             :           or by particularly knowledgeable users for specialized tools or applications.
  293153             : 
  293154             :           \internal We could not make these private because they are required by user for special purposes. And 
  293155             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  293156             :          
  293157             :        */
  293158             : 
  293159             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  293160             :        // overridden in every class by *generated* implementation
  293161             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  293162             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  293163             :        // MS: 06/28/02 container of names of variables or container indices 
  293164             :        // used used in the traversal to access AST successor nodes
  293165             :        // overridden in every class by *generated* implementation
  293166             :       /*! \brief container of names of variables or container indices used used in the traversal
  293167             :           to access AST successor nodes overridden in every class by *generated* implementation */
  293168             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  293169             : 
  293170             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  293171             :        // than all the vector copies. The implementation for these functions is generated for each class.
  293172             :       /*! \brief return number of children in the traversal successor list */
  293173             :           virtual size_t get_numberOfTraversalSuccessors() override;
  293174             :       /*! \brief index-based access to traversal successors by index number */
  293175             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  293176             :       /*! \brief index-based access to traversal successors by child node */
  293177             :           virtual size_t get_childIndex(SgNode *child) override;
  293178             : 
  293179             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  293180             :        // MS: 08/16/2002 method for generating RTI information
  293181             :       /*! \brief return C++ Runtime-Time-Information */
  293182             :           virtual RTIReturnType roseRTI() override;
  293183             : #endif
  293184             :       /* */
  293185             : 
  293186             : 
  293187             : 
  293188             :       /* name Deprecated Functions
  293189             :           \brief Deprecated functions ... incomplete-documentation
  293190             : 
  293191             :           These functions have been deprecated from use.
  293192             :        */
  293193             :       /* */
  293194             : 
  293195             :       /*! returns a C style string (char*) representing the class name */
  293196             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  293197             : 
  293198             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  293199             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  293200             : #if 0
  293201             :       /*! returns old style Sage II enum values */
  293202             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  293203             :       /*! returns old style Sage II enum values */
  293204             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  293205             : #endif
  293206             :       /* */
  293207             : 
  293208             : 
  293209             : 
  293210             : 
  293211             :      public:
  293212             :       /* name Traversal Support Functions
  293213             :           \brief Traversal support functions ... incomplete-documentation
  293214             : 
  293215             :           These functions have been made public as part of the design, but they are suggested for internal use 
  293216             :           or by particularly knowledgable users for specialized tools or applications.
  293217             :        */
  293218             :       /* */
  293219             : 
  293220             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  293221             :        // (inferior to ROSE traversal mechanism, experimental).
  293222             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  293223             :        */
  293224             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  293225             : 
  293226             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  293227             :       /*! \brief support for the classic visitor pattern done in GoF */
  293228             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  293229             : 
  293230             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  293231             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  293232             :        */
  293233             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  293234             : 
  293235             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  293236             :        */
  293237             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  293238             : 
  293239             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  293240             :        // This traversal helps support internal tools that call static member functions.
  293241             :        // note: this function operates on the memory pools.
  293242             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  293243             :        */
  293244             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  293245             :       /* */
  293246             : 
  293247             : 
  293248             :      public:
  293249             :       /* name Memory Allocation Functions
  293250             :           \brief Memory allocations functions ... incomplete-documentation
  293251             : 
  293252             :           These functions have been made public as part of the design, but they are suggested for internal use 
  293253             :           or by particularly knowledgable users for specialized tools or applications.
  293254             :        */
  293255             :       /* */
  293256             : 
  293257             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  293258             : 
  293259             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  293260             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  293261             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  293262             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  293263             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  293264             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  293265             :           being used with the AST File I/O mechanism.
  293266             :        */
  293267             :           virtual bool isInMemoryPool() override;
  293268             : 
  293269             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  293270             : 
  293271             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  293272             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  293273             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  293274             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  293275             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  293276             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  293277             :           being used with the AST File I/O mechanism.
  293278             :        */
  293279             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  293280             : 
  293281             :       // DQ (4/30/2006): Modified to be a const function.
  293282             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  293283             : 
  293284             :           This functions is part of general support for many possible tools to operate 
  293285             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  293286             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  293287             :           less than the set of pointers used by the AST file I/O. This is part of
  293288             :           work implemented by Andreas, and support tools such as the AST graph generation.
  293289             : 
  293290             :           \warning This function can return unexpected data members and thus the 
  293291             :                    order and the number of elements is unpredicable and subject 
  293292             :                    to change.
  293293             : 
  293294             :           \returns STL vector of pairs of SgNode* and strings
  293295             :        */
  293296             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  293297             : 
  293298             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  293299             : 
  293300             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  293301             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  293302             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  293303             : 
  293304             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  293305             :                    and subject to change.
  293306             :        */
  293307             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  293308             : 
  293309             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  293310             : 
  293311             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  293312             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  293313             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  293314             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  293315             : 
  293316             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  293317             : 
  293318             :           \returns long
  293319             :        */
  293320             :           virtual long getChildIndex( SgNode* childNode ) const override;
  293321             : 
  293322             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  293323             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  293324             :       /* \brief Constructor for use by AST File I/O Mechanism
  293325             : 
  293326             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  293327             :           which obtained via fast binary file I/O from disk.
  293328             :        */
  293329             :        // SgTypeIdOp( SgTypeIdOpStorageClass& source );
  293330             : 
  293331             : 
  293332             : 
  293333             : 
  293334             : 
  293335             :  // JH (10/24/2005): methods added to support the ast file IO
  293336             :     private:
  293337             : 
  293338             :       /* name AST Memory Allocation Support Functions
  293339             :           \brief Memory allocations support....
  293340             : 
  293341             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  293342             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  293343             :           and support the AST File I/O Mechanism.
  293344             :        */
  293345             :       /* */
  293346             : 
  293347             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  293348             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  293349             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  293350             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  293351             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  293352             :           a correspinding one in the AST_FILE_IO class!
  293353             :        */
  293354             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  293355             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  293356             :       /* \brief Typedef used for low level memory access.
  293357             :        */
  293358             :        // typedef unsigned char* TestType;
  293359             : 
  293360             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  293361             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  293362             :       /* \brief Typedef used to hold memory addresses as values.
  293363             :        */
  293364             :        // typedef unsigned long  AddressType;
  293365             : 
  293366             : 
  293367             : 
  293368             :        // necessary, to have direct access to the p_freepointer and the private methods !
  293369             :       /*! \brief friend class declaration to support AST File I/O */
  293370             :           friend class AST_FILE_IO;
  293371             : 
  293372             :       /*! \brief friend class declaration to support AST File I/O */
  293373             :           friend class SgTypeIdOpStorageClass;
  293374             : 
  293375             :       /*! \brief friend class declaration to support AST File I/O */
  293376             :           friend class AstSpecificDataManagingClass;
  293377             : 
  293378             :       /*! \brief friend class declaration to support AST File I/O */
  293379             :           friend class AstSpecificDataManagingClassStorageClass;
  293380             :     public:
  293381             :       /*! \brief IR node constructor to support AST File I/O */
  293382             :           SgTypeIdOp( const SgTypeIdOpStorageClass& source );
  293383             : 
  293384             :  // private: // JJW hack
  293385             :        /*
  293386             :           name AST Memory Allocation Support Variables
  293387             :           Memory allocations support variables 
  293388             : 
  293389             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  293390             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  293391             :           and support the AST File I/O Mechanism.
  293392             :        */
  293393             :       /* */
  293394             : 
  293395             :     public:
  293396             : 
  293397             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  293398             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  293399             :       // virtual SgNode* addRegExpAttribute();
  293400             :       /*! \brief Support for AST matching using regular expression.
  293401             : 
  293402             :           This support is incomplete and the subject of current research to define 
  293403             :           RegEx trees to support inexact matching.
  293404             :        */
  293405             :           SgTypeIdOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  293406             : 
  293407             : // *** COMMON CODE SECTION ENDS HERE ***
  293408             : 
  293409             : 
  293410             : // End of memberFunctionString
  293411             : // Start of memberFunctionString
  293412             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  293413             : 
  293414             :      // the generated cast function
  293415             :      // friend ROSE_DLL_API SgTypeIdOp* isSgTypeIdOp ( SgNode* s );
  293416             : 
  293417             :           typedef SgExpression base_node_type;
  293418             : 
  293419             : 
  293420             : // End of memberFunctionString
  293421             : // Start of memberFunctionString
  293422             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  293423             : 
  293424             :           SgType* get_type() const override;
  293425             : 
  293426             : 
  293427             : // End of memberFunctionString
  293428             : // Start of memberFunctionString
  293429             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  293430             : 
  293431             :           void post_construction_initialization() override;
  293432             : 
  293433             : 
  293434             : // End of memberFunctionString
  293435             : 
  293436             :      public: 
  293437             :          SgExpression* get_operand_expr() const;
  293438             :          void set_operand_expr(SgExpression* operand_expr);
  293439             : 
  293440             :      public: 
  293441             :          SgType* get_operand_type() const;
  293442             :          void set_operand_type(SgType* operand_type);
  293443             : 
  293444             : 
  293445             : 
  293446             : 
  293447             : 
  293448             : 
  293449             : 
  293450             : 
  293451             :      public: 
  293452             :          virtual ~SgTypeIdOp();
  293453             : 
  293454             : 
  293455             :      public: 
  293456             :          SgTypeIdOp(Sg_File_Info* startOfConstruct , SgExpression* operand_expr = NULL, SgType* operand_type = NULL); 
  293457             :          SgTypeIdOp(SgExpression* operand_expr, SgType* operand_type); 
  293458             : 
  293459             :     protected:
  293460             : // Start of memberFunctionString
  293461             : SgExpression* p_operand_expr;
  293462             :           
  293463             : // End of memberFunctionString
  293464             : // Start of memberFunctionString
  293465             : SgType* p_operand_type;
  293466             :           
  293467             : // End of memberFunctionString
  293468             : // Start of memberFunctionString
  293469             : int p_name_qualification_length;
  293470             :           
  293471             : // End of memberFunctionString
  293472             : // Start of memberFunctionString
  293473             : bool p_type_elaboration_required;
  293474             :           
  293475             : // End of memberFunctionString
  293476             : // Start of memberFunctionString
  293477             : bool p_global_qualification_required;
  293478             :           
  293479             : // End of memberFunctionString
  293480             : // Start of memberFunctionString
  293481             : int p_name_qualification_for_pointer_to_member_class_length;
  293482             :           
  293483             : // End of memberFunctionString
  293484             : // Start of memberFunctionString
  293485             : bool p_type_elaboration_for_pointer_to_member_class_required;
  293486             :           
  293487             : // End of memberFunctionString
  293488             : // Start of memberFunctionString
  293489             : bool p_global_qualification_for_pointer_to_member_class_required;
  293490             :           
  293491             : // End of memberFunctionString
  293492             : 
  293493             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeIdOp>;
  293494             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, SgExpression*,&SgTypeIdOp::p_operand_expr>;
  293495             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, SgType*,&SgTypeIdOp::p_operand_type>;
  293496             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, int,&SgTypeIdOp::p_name_qualification_length>;
  293497             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, bool,&SgTypeIdOp::p_type_elaboration_required>;
  293498             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, bool,&SgTypeIdOp::p_global_qualification_required>;
  293499             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, int,&SgTypeIdOp::p_name_qualification_for_pointer_to_member_class_length>;
  293500             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, bool,&SgTypeIdOp::p_type_elaboration_for_pointer_to_member_class_required>;
  293501             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeIdOp, bool,&SgTypeIdOp::p_global_qualification_for_pointer_to_member_class_required>;
  293502             : 
  293503             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  293504             : 
  293505             : 
  293506             :    };
  293507             : #endif
  293508             : 
  293509             : // postdeclarations for SgTypeIdOp
  293510             : 
  293511             : /* #line 293512 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  293512             : 
  293513             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  293514             : 
  293515             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  293516             : 
  293517             : 
  293518             : /* #line 293519 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  293519             : 
  293520             : 
  293521             : 
  293522             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  293523             : 
  293524             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  293525             : //      This code is automatically generated for each 
  293526             : //      terminal and non-terminal within the defined 
  293527             : //      grammar.  There is a simple way to change the 
  293528             : //      code to fix bugs etc.  See the ROSE README file
  293529             : //      for directions.
  293530             : 
  293531             : // tps: (02/22/2010): Adding DLL export requirements
  293532             : #include "rosedll.h"
  293533             : 
  293534             : // predeclarations for SgConditionalExp
  293535             : 
  293536             : /* #line 293537 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  293537             : 
  293538             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  293539             : 
  293540             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  293541             : 
  293542             : #if 1
  293543             : // Class Definition for SgConditionalExp
  293544             : class ROSE_DLL_API SgConditionalExp  : public SgExpression
  293545             :    {
  293546             :      public:
  293547             : 
  293548             : 
  293549             : /* #line 293550 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  293550             : 
  293551             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  293552             : // Start of memberFunctionString
  293553             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  293554             : 
  293555             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  293556             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  293557             : 
  293558             : 
  293559             : // End of memberFunctionString
  293560             : // Start of memberFunctionString
  293561             : /* #line 1189 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  293562             : 
  293563             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  293564             :           virtual unsigned int cfgIndexForEnd() const override;
  293565             :           virtual bool cfgIsIndexInteresting(unsigned int) const override;
  293566             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  293567             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  293568             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  293569             : #endif
  293570             : 
  293571             :        // get lvalue
  293572             :           virtual bool isLValue() const override;
  293573             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  293574             : 
  293575             : 
  293576             : 
  293577             : // End of memberFunctionString
  293578             : // Start of memberFunctionString
  293579             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  293580             : 
  293581             : // *** COMMON CODE SECTION BEGINS HERE ***
  293582             : 
  293583             :     public:
  293584             : 
  293585             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  293586             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  293587             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  293588             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  293589             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  293590             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  293591             : 
  293592             :       /*! \brief returns a string representing the class name */
  293593             :           virtual std::string class_name() const override;
  293594             : 
  293595             :       /*! \brief returns new style SageIII enum values */
  293596             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  293597             : 
  293598             :       /*! \brief static variant value */
  293599             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  293600             :        // static const VariantT static_variant = V_SgConditionalExp;
  293601             :           enum { static_variant = V_SgConditionalExp };
  293602             : 
  293603             :        /* the generated cast function */
  293604             :       /*! \brief Casts pointer from base class to derived class */
  293605             :           ROSE_DLL_API friend       SgConditionalExp* isSgConditionalExp(       SgNode * s );
  293606             : 
  293607             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  293608             :           ROSE_DLL_API friend const SgConditionalExp* isSgConditionalExp( const SgNode * s );
  293609             : 
  293610             :      // ******************************************
  293611             :      // * Memory Pool / New / Delete
  293612             :      // ******************************************
  293613             : 
  293614             :      public:
  293615             :           /// \private
  293616             :           static const unsigned pool_size; //
  293617             :           /// \private
  293618             :           static std::vector<unsigned char *> pools; //
  293619             :           /// \private
  293620             :           static SgConditionalExp * next_node; // 
  293621             : 
  293622             :           /// \private
  293623             :           static unsigned long initializeStorageClassArray(SgConditionalExpStorageClass *); //
  293624             : 
  293625             :           /// \private
  293626             :           static void clearMemoryPool(); //
  293627             :           static void deleteMemoryPool(); //
  293628             : 
  293629             :           /// \private
  293630             :           static void extendMemoryPoolForFileIO(); //
  293631             : 
  293632             :           /// \private
  293633             :           static SgConditionalExp * getPointerFromGlobalIndex(unsigned long); //
  293634             :           /// \private
  293635             :           static SgConditionalExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  293636             : 
  293637             :           /// \private
  293638             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  293639             :           /// \private
  293640             :           static void resetValidFreepointers(); //
  293641             :           /// \private
  293642             :           static unsigned long getNumberOfLastValidPointer(); //
  293643             : 
  293644             : 
  293645             : #if defined(INLINE_FUNCTIONS)
  293646             :       /*! \brief returns pointer to newly allocated IR node */
  293647             :           inline void *operator new (size_t size);
  293648             : #else
  293649             :       /*! \brief returns pointer to newly allocated IR node */
  293650             :           void *operator new (size_t size);
  293651             : #endif
  293652             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  293653             :           void operator delete (void* pointer, size_t size);
  293654             : 
  293655             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  293656        1216 :           void operator delete (void* pointer)
  293657             :              {
  293658             :             // This is the generated delete operator...
  293659        1216 :                SgConditionalExp::operator delete (pointer,sizeof(SgConditionalExp));
  293660             :              }
  293661             : 
  293662             :       /*! \brief Returns the total number of IR nodes of this type */
  293663             :           static size_t numberOfNodes();
  293664             : 
  293665             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  293666             :           static size_t memoryUsage();
  293667             : 
  293668             :       // End of scope which started in IR nodes specific code 
  293669             :       /* */
  293670             : 
  293671             :       /* name Internal Functions
  293672             :           \brief Internal functions ... incomplete-documentation
  293673             : 
  293674             :           These functions have been made public as part of the design, but they are suggested for internal use 
  293675             :           or by particularly knowledgeable users for specialized tools or applications.
  293676             : 
  293677             :           \internal We could not make these private because they are required by user for special purposes. And 
  293678             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  293679             :          
  293680             :        */
  293681             : 
  293682             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  293683             :        // overridden in every class by *generated* implementation
  293684             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  293685             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  293686             :        // MS: 06/28/02 container of names of variables or container indices 
  293687             :        // used used in the traversal to access AST successor nodes
  293688             :        // overridden in every class by *generated* implementation
  293689             :       /*! \brief container of names of variables or container indices used used in the traversal
  293690             :           to access AST successor nodes overridden in every class by *generated* implementation */
  293691             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  293692             : 
  293693             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  293694             :        // than all the vector copies. The implementation for these functions is generated for each class.
  293695             :       /*! \brief return number of children in the traversal successor list */
  293696             :           virtual size_t get_numberOfTraversalSuccessors() override;
  293697             :       /*! \brief index-based access to traversal successors by index number */
  293698             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  293699             :       /*! \brief index-based access to traversal successors by child node */
  293700             :           virtual size_t get_childIndex(SgNode *child) override;
  293701             : 
  293702             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  293703             :        // MS: 08/16/2002 method for generating RTI information
  293704             :       /*! \brief return C++ Runtime-Time-Information */
  293705             :           virtual RTIReturnType roseRTI() override;
  293706             : #endif
  293707             :       /* */
  293708             : 
  293709             : 
  293710             : 
  293711             :       /* name Deprecated Functions
  293712             :           \brief Deprecated functions ... incomplete-documentation
  293713             : 
  293714             :           These functions have been deprecated from use.
  293715             :        */
  293716             :       /* */
  293717             : 
  293718             :       /*! returns a C style string (char*) representing the class name */
  293719             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  293720             : 
  293721             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  293722             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  293723             : #if 0
  293724             :       /*! returns old style Sage II enum values */
  293725             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  293726             :       /*! returns old style Sage II enum values */
  293727             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  293728             : #endif
  293729             :       /* */
  293730             : 
  293731             : 
  293732             : 
  293733             : 
  293734             :      public:
  293735             :       /* name Traversal Support Functions
  293736             :           \brief Traversal support functions ... incomplete-documentation
  293737             : 
  293738             :           These functions have been made public as part of the design, but they are suggested for internal use 
  293739             :           or by particularly knowledgable users for specialized tools or applications.
  293740             :        */
  293741             :       /* */
  293742             : 
  293743             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  293744             :        // (inferior to ROSE traversal mechanism, experimental).
  293745             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  293746             :        */
  293747             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  293748             : 
  293749             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  293750             :       /*! \brief support for the classic visitor pattern done in GoF */
  293751             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  293752             : 
  293753             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  293754             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  293755             :        */
  293756             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  293757             : 
  293758             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  293759             :        */
  293760             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  293761             : 
  293762             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  293763             :        // This traversal helps support internal tools that call static member functions.
  293764             :        // note: this function operates on the memory pools.
  293765             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  293766             :        */
  293767             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  293768             :       /* */
  293769             : 
  293770             : 
  293771             :      public:
  293772             :       /* name Memory Allocation Functions
  293773             :           \brief Memory allocations functions ... incomplete-documentation
  293774             : 
  293775             :           These functions have been made public as part of the design, but they are suggested for internal use 
  293776             :           or by particularly knowledgable users for specialized tools or applications.
  293777             :        */
  293778             :       /* */
  293779             : 
  293780             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  293781             : 
  293782             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  293783             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  293784             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  293785             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  293786             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  293787             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  293788             :           being used with the AST File I/O mechanism.
  293789             :        */
  293790             :           virtual bool isInMemoryPool() override;
  293791             : 
  293792             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  293793             : 
  293794             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  293795             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  293796             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  293797             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  293798             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  293799             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  293800             :           being used with the AST File I/O mechanism.
  293801             :        */
  293802             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  293803             : 
  293804             :       // DQ (4/30/2006): Modified to be a const function.
  293805             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  293806             : 
  293807             :           This functions is part of general support for many possible tools to operate 
  293808             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  293809             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  293810             :           less than the set of pointers used by the AST file I/O. This is part of
  293811             :           work implemented by Andreas, and support tools such as the AST graph generation.
  293812             : 
  293813             :           \warning This function can return unexpected data members and thus the 
  293814             :                    order and the number of elements is unpredicable and subject 
  293815             :                    to change.
  293816             : 
  293817             :           \returns STL vector of pairs of SgNode* and strings
  293818             :        */
  293819             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  293820             : 
  293821             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  293822             : 
  293823             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  293824             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  293825             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  293826             : 
  293827             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  293828             :                    and subject to change.
  293829             :        */
  293830             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  293831             : 
  293832             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  293833             : 
  293834             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  293835             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  293836             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  293837             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  293838             : 
  293839             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  293840             : 
  293841             :           \returns long
  293842             :        */
  293843             :           virtual long getChildIndex( SgNode* childNode ) const override;
  293844             : 
  293845             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  293846             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  293847             :       /* \brief Constructor for use by AST File I/O Mechanism
  293848             : 
  293849             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  293850             :           which obtained via fast binary file I/O from disk.
  293851             :        */
  293852             :        // SgConditionalExp( SgConditionalExpStorageClass& source );
  293853             : 
  293854             : 
  293855             : 
  293856             : 
  293857             : 
  293858             :  // JH (10/24/2005): methods added to support the ast file IO
  293859             :     private:
  293860             : 
  293861             :       /* name AST Memory Allocation Support Functions
  293862             :           \brief Memory allocations support....
  293863             : 
  293864             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  293865             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  293866             :           and support the AST File I/O Mechanism.
  293867             :        */
  293868             :       /* */
  293869             : 
  293870             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  293871             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  293872             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  293873             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  293874             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  293875             :           a correspinding one in the AST_FILE_IO class!
  293876             :        */
  293877             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  293878             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  293879             :       /* \brief Typedef used for low level memory access.
  293880             :        */
  293881             :        // typedef unsigned char* TestType;
  293882             : 
  293883             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  293884             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  293885             :       /* \brief Typedef used to hold memory addresses as values.
  293886             :        */
  293887             :        // typedef unsigned long  AddressType;
  293888             : 
  293889             : 
  293890             : 
  293891             :        // necessary, to have direct access to the p_freepointer and the private methods !
  293892             :       /*! \brief friend class declaration to support AST File I/O */
  293893             :           friend class AST_FILE_IO;
  293894             : 
  293895             :       /*! \brief friend class declaration to support AST File I/O */
  293896             :           friend class SgConditionalExpStorageClass;
  293897             : 
  293898             :       /*! \brief friend class declaration to support AST File I/O */
  293899             :           friend class AstSpecificDataManagingClass;
  293900             : 
  293901             :       /*! \brief friend class declaration to support AST File I/O */
  293902             :           friend class AstSpecificDataManagingClassStorageClass;
  293903             :     public:
  293904             :       /*! \brief IR node constructor to support AST File I/O */
  293905             :           SgConditionalExp( const SgConditionalExpStorageClass& source );
  293906             : 
  293907             :  // private: // JJW hack
  293908             :        /*
  293909             :           name AST Memory Allocation Support Variables
  293910             :           Memory allocations support variables 
  293911             : 
  293912             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  293913             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  293914             :           and support the AST File I/O Mechanism.
  293915             :        */
  293916             :       /* */
  293917             : 
  293918             :     public:
  293919             : 
  293920             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  293921             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  293922             :       // virtual SgNode* addRegExpAttribute();
  293923             :       /*! \brief Support for AST matching using regular expression.
  293924             : 
  293925             :           This support is incomplete and the subject of current research to define 
  293926             :           RegEx trees to support inexact matching.
  293927             :        */
  293928             :           SgConditionalExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  293929             : 
  293930             : // *** COMMON CODE SECTION ENDS HERE ***
  293931             : 
  293932             : 
  293933             : // End of memberFunctionString
  293934             : // Start of memberFunctionString
  293935             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  293936             : 
  293937             :      // the generated cast function
  293938             :      // friend ROSE_DLL_API SgConditionalExp* isSgConditionalExp ( SgNode* s );
  293939             : 
  293940             :           typedef SgExpression base_node_type;
  293941             : 
  293942             : 
  293943             : // End of memberFunctionString
  293944             : // Start of memberFunctionString
  293945             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  293946             : 
  293947             :           SgType* get_type() const override;
  293948             : 
  293949             : 
  293950             : // End of memberFunctionString
  293951             : // Start of memberFunctionString
  293952             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  293953             : 
  293954             :           void post_construction_initialization() override;
  293955             : 
  293956             : 
  293957             : // End of memberFunctionString
  293958             : 
  293959             :      public: 
  293960             :          SgExpression* get_conditional_exp() const;
  293961             :          void set_conditional_exp(SgExpression* conditional_exp);
  293962             : 
  293963             :      public: 
  293964             :          SgExpression* get_true_exp() const;
  293965             :          void set_true_exp(SgExpression* true_exp);
  293966             : 
  293967             :      public: 
  293968             :          SgExpression* get_false_exp() const;
  293969             :          void set_false_exp(SgExpression* false_exp);
  293970             : 
  293971             : 
  293972             : 
  293973             :      public: 
  293974             :          virtual ~SgConditionalExp();
  293975             : 
  293976             : 
  293977             :      public: 
  293978             :          SgConditionalExp(Sg_File_Info* startOfConstruct , SgExpression* conditional_exp = NULL, SgExpression* true_exp = NULL, SgExpression* false_exp = NULL, SgType* expression_type = NULL); 
  293979             :          SgConditionalExp(SgExpression* conditional_exp, SgExpression* true_exp, SgExpression* false_exp, SgType* expression_type); 
  293980             : 
  293981             :     protected:
  293982             : // Start of memberFunctionString
  293983             : SgExpression* p_conditional_exp;
  293984             :           
  293985             : // End of memberFunctionString
  293986             : // Start of memberFunctionString
  293987             : SgExpression* p_true_exp;
  293988             :           
  293989             : // End of memberFunctionString
  293990             : // Start of memberFunctionString
  293991             : SgExpression* p_false_exp;
  293992             :           
  293993             : // End of memberFunctionString
  293994             : // Start of memberFunctionString
  293995             : SgType* p_expression_type;
  293996             :           
  293997             : // End of memberFunctionString
  293998             : 
  293999             :     friend struct Rose::Traits::generated::describe_node_t<SgConditionalExp>;
  294000             :     friend struct Rose::Traits::generated::describe_field_t<SgConditionalExp, SgExpression*,&SgConditionalExp::p_conditional_exp>;
  294001             :     friend struct Rose::Traits::generated::describe_field_t<SgConditionalExp, SgExpression*,&SgConditionalExp::p_true_exp>;
  294002             :     friend struct Rose::Traits::generated::describe_field_t<SgConditionalExp, SgExpression*,&SgConditionalExp::p_false_exp>;
  294003             :     friend struct Rose::Traits::generated::describe_field_t<SgConditionalExp, SgType*,&SgConditionalExp::p_expression_type>;
  294004             : 
  294005             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294006             : 
  294007             : 
  294008             :    };
  294009             : #endif
  294010             : 
  294011             : // postdeclarations for SgConditionalExp
  294012             : 
  294013             : /* #line 294014 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294014             : 
  294015             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  294016             : 
  294017             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294018             : 
  294019             : 
  294020             : /* #line 294021 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294021             : 
  294022             : 
  294023             : 
  294024             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294025             : 
  294026             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  294027             : //      This code is automatically generated for each 
  294028             : //      terminal and non-terminal within the defined 
  294029             : //      grammar.  There is a simple way to change the 
  294030             : //      code to fix bugs etc.  See the ROSE README file
  294031             : //      for directions.
  294032             : 
  294033             : // tps: (02/22/2010): Adding DLL export requirements
  294034             : #include "rosedll.h"
  294035             : 
  294036             : // predeclarations for SgNewExp
  294037             : 
  294038             : /* #line 294039 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294039             : 
  294040             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  294041             : 
  294042             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294043             : 
  294044             : #if 1
  294045             : // Class Definition for SgNewExp
  294046             : class ROSE_DLL_API SgNewExp  : public SgExpression
  294047             :    {
  294048             :      public:
  294049             : 
  294050             : 
  294051             : /* #line 294052 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294052             : 
  294053             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  294054             : // Start of memberFunctionString
  294055             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  294056             : 
  294057             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  294058             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  294059             : 
  294060             : 
  294061             : // End of memberFunctionString
  294062             : // Start of memberFunctionString
  294063             : /* #line 1295 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  294064             : 
  294065             :        // DQ (1/16/2006): Added to support special version of get_type.
  294066             :        // returns SgPointerType::createType(p_expression_type)
  294067             :        // SgType* get_type() const;
  294068             : 
  294069             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  294070             :           virtual unsigned int cfgIndexForEnd() const override;
  294071             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  294072             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  294073             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  294074             : #endif
  294075             : 
  294076             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  294077             :           int get_name_qualification_length() const override;
  294078             :           void set_name_qualification_length(int name_qualification_length) override;
  294079             : 
  294080             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  294081             :           bool get_type_elaboration_required() const override;
  294082             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  294083             : 
  294084             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  294085             :           bool get_global_qualification_required() const override;
  294086             :           void set_global_qualification_required(bool global_qualification_required) override;
  294087             : 
  294088             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  294089             :           int get_name_qualification_for_pointer_to_member_class_length() const override;
  294090             :           void set_name_qualification_for_pointer_to_member_class_length(int name_qualification_length) override;
  294091             : 
  294092             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  294093             :           bool get_type_elaboration_for_pointer_to_member_class_required() const override;
  294094             :           void set_type_elaboration_for_pointer_to_member_class_required(bool type_elaboration_required) override;
  294095             : 
  294096             :        // DQ (4/15/2019): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  294097             :           bool get_global_qualification_for_pointer_to_member_class_required() const override;
  294098             :           void set_global_qualification_for_pointer_to_member_class_required(bool global_qualification_required) override;
  294099             : 
  294100             : 
  294101             : 
  294102             : // End of memberFunctionString
  294103             : // Start of memberFunctionString
  294104             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  294105             : 
  294106             : // *** COMMON CODE SECTION BEGINS HERE ***
  294107             : 
  294108             :     public:
  294109             : 
  294110             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  294111             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  294112             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  294113             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  294114             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  294115             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  294116             : 
  294117             :       /*! \brief returns a string representing the class name */
  294118             :           virtual std::string class_name() const override;
  294119             : 
  294120             :       /*! \brief returns new style SageIII enum values */
  294121             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  294122             : 
  294123             :       /*! \brief static variant value */
  294124             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  294125             :        // static const VariantT static_variant = V_SgNewExp;
  294126             :           enum { static_variant = V_SgNewExp };
  294127             : 
  294128             :        /* the generated cast function */
  294129             :       /*! \brief Casts pointer from base class to derived class */
  294130             :           ROSE_DLL_API friend       SgNewExp* isSgNewExp(       SgNode * s );
  294131             : 
  294132             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  294133             :           ROSE_DLL_API friend const SgNewExp* isSgNewExp( const SgNode * s );
  294134             : 
  294135             :      // ******************************************
  294136             :      // * Memory Pool / New / Delete
  294137             :      // ******************************************
  294138             : 
  294139             :      public:
  294140             :           /// \private
  294141             :           static const unsigned pool_size; //
  294142             :           /// \private
  294143             :           static std::vector<unsigned char *> pools; //
  294144             :           /// \private
  294145             :           static SgNewExp * next_node; // 
  294146             : 
  294147             :           /// \private
  294148             :           static unsigned long initializeStorageClassArray(SgNewExpStorageClass *); //
  294149             : 
  294150             :           /// \private
  294151             :           static void clearMemoryPool(); //
  294152             :           static void deleteMemoryPool(); //
  294153             : 
  294154             :           /// \private
  294155             :           static void extendMemoryPoolForFileIO(); //
  294156             : 
  294157             :           /// \private
  294158             :           static SgNewExp * getPointerFromGlobalIndex(unsigned long); //
  294159             :           /// \private
  294160             :           static SgNewExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  294161             : 
  294162             :           /// \private
  294163             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  294164             :           /// \private
  294165             :           static void resetValidFreepointers(); //
  294166             :           /// \private
  294167             :           static unsigned long getNumberOfLastValidPointer(); //
  294168             : 
  294169             : 
  294170             : #if defined(INLINE_FUNCTIONS)
  294171             :       /*! \brief returns pointer to newly allocated IR node */
  294172             :           inline void *operator new (size_t size);
  294173             : #else
  294174             :       /*! \brief returns pointer to newly allocated IR node */
  294175             :           void *operator new (size_t size);
  294176             : #endif
  294177             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  294178             :           void operator delete (void* pointer, size_t size);
  294179             : 
  294180             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  294181          28 :           void operator delete (void* pointer)
  294182             :              {
  294183             :             // This is the generated delete operator...
  294184          28 :                SgNewExp::operator delete (pointer,sizeof(SgNewExp));
  294185             :              }
  294186             : 
  294187             :       /*! \brief Returns the total number of IR nodes of this type */
  294188             :           static size_t numberOfNodes();
  294189             : 
  294190             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  294191             :           static size_t memoryUsage();
  294192             : 
  294193             :       // End of scope which started in IR nodes specific code 
  294194             :       /* */
  294195             : 
  294196             :       /* name Internal Functions
  294197             :           \brief Internal functions ... incomplete-documentation
  294198             : 
  294199             :           These functions have been made public as part of the design, but they are suggested for internal use 
  294200             :           or by particularly knowledgeable users for specialized tools or applications.
  294201             : 
  294202             :           \internal We could not make these private because they are required by user for special purposes. And 
  294203             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  294204             :          
  294205             :        */
  294206             : 
  294207             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  294208             :        // overridden in every class by *generated* implementation
  294209             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  294210             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  294211             :        // MS: 06/28/02 container of names of variables or container indices 
  294212             :        // used used in the traversal to access AST successor nodes
  294213             :        // overridden in every class by *generated* implementation
  294214             :       /*! \brief container of names of variables or container indices used used in the traversal
  294215             :           to access AST successor nodes overridden in every class by *generated* implementation */
  294216             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  294217             : 
  294218             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  294219             :        // than all the vector copies. The implementation for these functions is generated for each class.
  294220             :       /*! \brief return number of children in the traversal successor list */
  294221             :           virtual size_t get_numberOfTraversalSuccessors() override;
  294222             :       /*! \brief index-based access to traversal successors by index number */
  294223             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  294224             :       /*! \brief index-based access to traversal successors by child node */
  294225             :           virtual size_t get_childIndex(SgNode *child) override;
  294226             : 
  294227             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  294228             :        // MS: 08/16/2002 method for generating RTI information
  294229             :       /*! \brief return C++ Runtime-Time-Information */
  294230             :           virtual RTIReturnType roseRTI() override;
  294231             : #endif
  294232             :       /* */
  294233             : 
  294234             : 
  294235             : 
  294236             :       /* name Deprecated Functions
  294237             :           \brief Deprecated functions ... incomplete-documentation
  294238             : 
  294239             :           These functions have been deprecated from use.
  294240             :        */
  294241             :       /* */
  294242             : 
  294243             :       /*! returns a C style string (char*) representing the class name */
  294244             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  294245             : 
  294246             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  294247             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  294248             : #if 0
  294249             :       /*! returns old style Sage II enum values */
  294250             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  294251             :       /*! returns old style Sage II enum values */
  294252             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  294253             : #endif
  294254             :       /* */
  294255             : 
  294256             : 
  294257             : 
  294258             : 
  294259             :      public:
  294260             :       /* name Traversal Support Functions
  294261             :           \brief Traversal support functions ... incomplete-documentation
  294262             : 
  294263             :           These functions have been made public as part of the design, but they are suggested for internal use 
  294264             :           or by particularly knowledgable users for specialized tools or applications.
  294265             :        */
  294266             :       /* */
  294267             : 
  294268             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  294269             :        // (inferior to ROSE traversal mechanism, experimental).
  294270             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  294271             :        */
  294272             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  294273             : 
  294274             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  294275             :       /*! \brief support for the classic visitor pattern done in GoF */
  294276             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  294277             : 
  294278             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  294279             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  294280             :        */
  294281             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  294282             : 
  294283             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  294284             :        */
  294285             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  294286             : 
  294287             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  294288             :        // This traversal helps support internal tools that call static member functions.
  294289             :        // note: this function operates on the memory pools.
  294290             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  294291             :        */
  294292             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  294293             :       /* */
  294294             : 
  294295             : 
  294296             :      public:
  294297             :       /* name Memory Allocation Functions
  294298             :           \brief Memory allocations functions ... incomplete-documentation
  294299             : 
  294300             :           These functions have been made public as part of the design, but they are suggested for internal use 
  294301             :           or by particularly knowledgable users for specialized tools or applications.
  294302             :        */
  294303             :       /* */
  294304             : 
  294305             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  294306             : 
  294307             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  294308             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  294309             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  294310             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  294311             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  294312             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  294313             :           being used with the AST File I/O mechanism.
  294314             :        */
  294315             :           virtual bool isInMemoryPool() override;
  294316             : 
  294317             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  294318             : 
  294319             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  294320             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  294321             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  294322             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  294323             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  294324             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  294325             :           being used with the AST File I/O mechanism.
  294326             :        */
  294327             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  294328             : 
  294329             :       // DQ (4/30/2006): Modified to be a const function.
  294330             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  294331             : 
  294332             :           This functions is part of general support for many possible tools to operate 
  294333             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  294334             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  294335             :           less than the set of pointers used by the AST file I/O. This is part of
  294336             :           work implemented by Andreas, and support tools such as the AST graph generation.
  294337             : 
  294338             :           \warning This function can return unexpected data members and thus the 
  294339             :                    order and the number of elements is unpredicable and subject 
  294340             :                    to change.
  294341             : 
  294342             :           \returns STL vector of pairs of SgNode* and strings
  294343             :        */
  294344             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  294345             : 
  294346             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  294347             : 
  294348             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  294349             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  294350             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  294351             : 
  294352             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  294353             :                    and subject to change.
  294354             :        */
  294355             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  294356             : 
  294357             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  294358             : 
  294359             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  294360             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  294361             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  294362             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  294363             : 
  294364             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  294365             : 
  294366             :           \returns long
  294367             :        */
  294368             :           virtual long getChildIndex( SgNode* childNode ) const override;
  294369             : 
  294370             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  294371             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  294372             :       /* \brief Constructor for use by AST File I/O Mechanism
  294373             : 
  294374             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  294375             :           which obtained via fast binary file I/O from disk.
  294376             :        */
  294377             :        // SgNewExp( SgNewExpStorageClass& source );
  294378             : 
  294379             : 
  294380             : 
  294381             : 
  294382             : 
  294383             :  // JH (10/24/2005): methods added to support the ast file IO
  294384             :     private:
  294385             : 
  294386             :       /* name AST Memory Allocation Support Functions
  294387             :           \brief Memory allocations support....
  294388             : 
  294389             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  294390             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  294391             :           and support the AST File I/O Mechanism.
  294392             :        */
  294393             :       /* */
  294394             : 
  294395             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  294396             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  294397             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  294398             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  294399             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  294400             :           a correspinding one in the AST_FILE_IO class!
  294401             :        */
  294402             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  294403             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  294404             :       /* \brief Typedef used for low level memory access.
  294405             :        */
  294406             :        // typedef unsigned char* TestType;
  294407             : 
  294408             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  294409             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  294410             :       /* \brief Typedef used to hold memory addresses as values.
  294411             :        */
  294412             :        // typedef unsigned long  AddressType;
  294413             : 
  294414             : 
  294415             : 
  294416             :        // necessary, to have direct access to the p_freepointer and the private methods !
  294417             :       /*! \brief friend class declaration to support AST File I/O */
  294418             :           friend class AST_FILE_IO;
  294419             : 
  294420             :       /*! \brief friend class declaration to support AST File I/O */
  294421             :           friend class SgNewExpStorageClass;
  294422             : 
  294423             :       /*! \brief friend class declaration to support AST File I/O */
  294424             :           friend class AstSpecificDataManagingClass;
  294425             : 
  294426             :       /*! \brief friend class declaration to support AST File I/O */
  294427             :           friend class AstSpecificDataManagingClassStorageClass;
  294428             :     public:
  294429             :       /*! \brief IR node constructor to support AST File I/O */
  294430             :           SgNewExp( const SgNewExpStorageClass& source );
  294431             : 
  294432             :  // private: // JJW hack
  294433             :        /*
  294434             :           name AST Memory Allocation Support Variables
  294435             :           Memory allocations support variables 
  294436             : 
  294437             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  294438             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  294439             :           and support the AST File I/O Mechanism.
  294440             :        */
  294441             :       /* */
  294442             : 
  294443             :     public:
  294444             : 
  294445             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  294446             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  294447             :       // virtual SgNode* addRegExpAttribute();
  294448             :       /*! \brief Support for AST matching using regular expression.
  294449             : 
  294450             :           This support is incomplete and the subject of current research to define 
  294451             :           RegEx trees to support inexact matching.
  294452             :        */
  294453             :           SgNewExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  294454             : 
  294455             : // *** COMMON CODE SECTION ENDS HERE ***
  294456             : 
  294457             : 
  294458             : // End of memberFunctionString
  294459             : // Start of memberFunctionString
  294460             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  294461             : 
  294462             :      // the generated cast function
  294463             :      // friend ROSE_DLL_API SgNewExp* isSgNewExp ( SgNode* s );
  294464             : 
  294465             :           typedef SgExpression base_node_type;
  294466             : 
  294467             : 
  294468             : // End of memberFunctionString
  294469             : // Start of memberFunctionString
  294470             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  294471             : 
  294472             :           SgType* get_type() const override;
  294473             : 
  294474             : 
  294475             : // End of memberFunctionString
  294476             : // Start of memberFunctionString
  294477             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  294478             : 
  294479             :           void post_construction_initialization() override;
  294480             : 
  294481             : 
  294482             : // End of memberFunctionString
  294483             : 
  294484             :      public: 
  294485             :          SgType* get_specified_type() const;
  294486             :          void set_specified_type(SgType* specified_type);
  294487             : 
  294488             :      public: 
  294489             :          SgExprListExp* get_placement_args() const;
  294490             :          void set_placement_args(SgExprListExp* placement_args);
  294491             : 
  294492             :      public: 
  294493             :          SgConstructorInitializer* get_constructor_args() const;
  294494             :          void set_constructor_args(SgConstructorInitializer* constructor_args);
  294495             : 
  294496             :      public: 
  294497             :          SgExpression* get_builtin_args() const;
  294498             :          void set_builtin_args(SgExpression* builtin_args);
  294499             : 
  294500             :      public: 
  294501             :          short get_need_global_specifier() const;
  294502             :          void set_need_global_specifier(short need_global_specifier);
  294503             : 
  294504             :      public: 
  294505             :          SgFunctionDeclaration* get_newOperatorDeclaration() const;
  294506             :          void set_newOperatorDeclaration(SgFunctionDeclaration* newOperatorDeclaration);
  294507             : 
  294508             : 
  294509             : 
  294510             : 
  294511             : 
  294512             : 
  294513             : 
  294514             : 
  294515             :      public: 
  294516             :          virtual ~SgNewExp();
  294517             : 
  294518             : 
  294519             :      public: 
  294520             :          SgNewExp(Sg_File_Info* startOfConstruct , SgType* specified_type = NULL, SgExprListExp* placement_args = NULL, SgConstructorInitializer* constructor_args = NULL, SgExpression* builtin_args = NULL, short need_global_specifier = 0, SgFunctionDeclaration* newOperatorDeclaration = NULL); 
  294521             :          SgNewExp(SgType* specified_type, SgExprListExp* placement_args, SgConstructorInitializer* constructor_args, SgExpression* builtin_args, short need_global_specifier, SgFunctionDeclaration* newOperatorDeclaration); 
  294522             : 
  294523             :     protected:
  294524             : // Start of memberFunctionString
  294525             : SgType* p_specified_type;
  294526             :           
  294527             : // End of memberFunctionString
  294528             : // Start of memberFunctionString
  294529             : SgExprListExp* p_placement_args;
  294530             :           
  294531             : // End of memberFunctionString
  294532             : // Start of memberFunctionString
  294533             : SgConstructorInitializer* p_constructor_args;
  294534             :           
  294535             : // End of memberFunctionString
  294536             : // Start of memberFunctionString
  294537             : SgExpression* p_builtin_args;
  294538             :           
  294539             : // End of memberFunctionString
  294540             : // Start of memberFunctionString
  294541             : short p_need_global_specifier;
  294542             :           
  294543             : // End of memberFunctionString
  294544             : // Start of memberFunctionString
  294545             : SgFunctionDeclaration* p_newOperatorDeclaration;
  294546             :           
  294547             : // End of memberFunctionString
  294548             : // Start of memberFunctionString
  294549             : int p_name_qualification_length;
  294550             :           
  294551             : // End of memberFunctionString
  294552             : // Start of memberFunctionString
  294553             : bool p_type_elaboration_required;
  294554             :           
  294555             : // End of memberFunctionString
  294556             : // Start of memberFunctionString
  294557             : bool p_global_qualification_required;
  294558             :           
  294559             : // End of memberFunctionString
  294560             : // Start of memberFunctionString
  294561             : int p_name_qualification_for_pointer_to_member_class_length;
  294562             :           
  294563             : // End of memberFunctionString
  294564             : // Start of memberFunctionString
  294565             : bool p_type_elaboration_for_pointer_to_member_class_required;
  294566             :           
  294567             : // End of memberFunctionString
  294568             : // Start of memberFunctionString
  294569             : bool p_global_qualification_for_pointer_to_member_class_required;
  294570             :           
  294571             : // End of memberFunctionString
  294572             : 
  294573             :     friend struct Rose::Traits::generated::describe_node_t<SgNewExp>;
  294574             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, SgType*,&SgNewExp::p_specified_type>;
  294575             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, SgExprListExp*,&SgNewExp::p_placement_args>;
  294576             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, SgConstructorInitializer*,&SgNewExp::p_constructor_args>;
  294577             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, SgExpression*,&SgNewExp::p_builtin_args>;
  294578             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, short,&SgNewExp::p_need_global_specifier>;
  294579             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, SgFunctionDeclaration*,&SgNewExp::p_newOperatorDeclaration>;
  294580             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, int,&SgNewExp::p_name_qualification_length>;
  294581             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, bool,&SgNewExp::p_type_elaboration_required>;
  294582             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, bool,&SgNewExp::p_global_qualification_required>;
  294583             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, int,&SgNewExp::p_name_qualification_for_pointer_to_member_class_length>;
  294584             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, bool,&SgNewExp::p_type_elaboration_for_pointer_to_member_class_required>;
  294585             :     friend struct Rose::Traits::generated::describe_field_t<SgNewExp, bool,&SgNewExp::p_global_qualification_for_pointer_to_member_class_required>;
  294586             : 
  294587             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294588             : 
  294589             : 
  294590             :    };
  294591             : #endif
  294592             : 
  294593             : // postdeclarations for SgNewExp
  294594             : 
  294595             : /* #line 294596 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294596             : 
  294597             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  294598             : 
  294599             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294600             : 
  294601             : 
  294602             : /* #line 294603 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294603             : 
  294604             : 
  294605             : 
  294606             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294607             : 
  294608             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  294609             : //      This code is automatically generated for each 
  294610             : //      terminal and non-terminal within the defined 
  294611             : //      grammar.  There is a simple way to change the 
  294612             : //      code to fix bugs etc.  See the ROSE README file
  294613             : //      for directions.
  294614             : 
  294615             : // tps: (02/22/2010): Adding DLL export requirements
  294616             : #include "rosedll.h"
  294617             : 
  294618             : // predeclarations for SgDeleteExp
  294619             : 
  294620             : /* #line 294621 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294621             : 
  294622             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  294623             : 
  294624             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  294625             : 
  294626             : #if 1
  294627             : // Class Definition for SgDeleteExp
  294628             : class ROSE_DLL_API SgDeleteExp  : public SgExpression
  294629             :    {
  294630             :      public:
  294631             : 
  294632             : 
  294633             : /* #line 294634 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  294634             : 
  294635             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  294636             : // Start of memberFunctionString
  294637             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  294638             : 
  294639             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  294640             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  294641             : 
  294642             : 
  294643             : // End of memberFunctionString
  294644             : // Start of memberFunctionString
  294645             : /* #line 1334 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  294646             : 
  294647             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  294648             :           virtual unsigned int cfgIndexForEnd() const override;
  294649             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  294650             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  294651             : #endif
  294652             : 
  294653             : 
  294654             : 
  294655             : // End of memberFunctionString
  294656             : // Start of memberFunctionString
  294657             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  294658             : 
  294659             : // *** COMMON CODE SECTION BEGINS HERE ***
  294660             : 
  294661             :     public:
  294662             : 
  294663             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  294664             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  294665             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  294666             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  294667             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  294668             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  294669             : 
  294670             :       /*! \brief returns a string representing the class name */
  294671             :           virtual std::string class_name() const override;
  294672             : 
  294673             :       /*! \brief returns new style SageIII enum values */
  294674             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  294675             : 
  294676             :       /*! \brief static variant value */
  294677             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  294678             :        // static const VariantT static_variant = V_SgDeleteExp;
  294679             :           enum { static_variant = V_SgDeleteExp };
  294680             : 
  294681             :        /* the generated cast function */
  294682             :       /*! \brief Casts pointer from base class to derived class */
  294683             :           ROSE_DLL_API friend       SgDeleteExp* isSgDeleteExp(       SgNode * s );
  294684             : 
  294685             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  294686             :           ROSE_DLL_API friend const SgDeleteExp* isSgDeleteExp( const SgNode * s );
  294687             : 
  294688             :      // ******************************************
  294689             :      // * Memory Pool / New / Delete
  294690             :      // ******************************************
  294691             : 
  294692             :      public:
  294693             :           /// \private
  294694             :           static const unsigned pool_size; //
  294695             :           /// \private
  294696             :           static std::vector<unsigned char *> pools; //
  294697             :           /// \private
  294698             :           static SgDeleteExp * next_node; // 
  294699             : 
  294700             :           /// \private
  294701             :           static unsigned long initializeStorageClassArray(SgDeleteExpStorageClass *); //
  294702             : 
  294703             :           /// \private
  294704             :           static void clearMemoryPool(); //
  294705             :           static void deleteMemoryPool(); //
  294706             : 
  294707             :           /// \private
  294708             :           static void extendMemoryPoolForFileIO(); //
  294709             : 
  294710             :           /// \private
  294711             :           static SgDeleteExp * getPointerFromGlobalIndex(unsigned long); //
  294712             :           /// \private
  294713             :           static SgDeleteExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  294714             : 
  294715             :           /// \private
  294716             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  294717             :           /// \private
  294718             :           static void resetValidFreepointers(); //
  294719             :           /// \private
  294720             :           static unsigned long getNumberOfLastValidPointer(); //
  294721             : 
  294722             : 
  294723             : #if defined(INLINE_FUNCTIONS)
  294724             :       /*! \brief returns pointer to newly allocated IR node */
  294725             :           inline void *operator new (size_t size);
  294726             : #else
  294727             :       /*! \brief returns pointer to newly allocated IR node */
  294728             :           void *operator new (size_t size);
  294729             : #endif
  294730             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  294731             :           void operator delete (void* pointer, size_t size);
  294732             : 
  294733             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  294734          30 :           void operator delete (void* pointer)
  294735             :              {
  294736             :             // This is the generated delete operator...
  294737          30 :                SgDeleteExp::operator delete (pointer,sizeof(SgDeleteExp));
  294738             :              }
  294739             : 
  294740             :       /*! \brief Returns the total number of IR nodes of this type */
  294741             :           static size_t numberOfNodes();
  294742             : 
  294743             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  294744             :           static size_t memoryUsage();
  294745             : 
  294746             :       // End of scope which started in IR nodes specific code 
  294747             :       /* */
  294748             : 
  294749             :       /* name Internal Functions
  294750             :           \brief Internal functions ... incomplete-documentation
  294751             : 
  294752             :           These functions have been made public as part of the design, but they are suggested for internal use 
  294753             :           or by particularly knowledgeable users for specialized tools or applications.
  294754             : 
  294755             :           \internal We could not make these private because they are required by user for special purposes. And 
  294756             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  294757             :          
  294758             :        */
  294759             : 
  294760             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  294761             :        // overridden in every class by *generated* implementation
  294762             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  294763             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  294764             :        // MS: 06/28/02 container of names of variables or container indices 
  294765             :        // used used in the traversal to access AST successor nodes
  294766             :        // overridden in every class by *generated* implementation
  294767             :       /*! \brief container of names of variables or container indices used used in the traversal
  294768             :           to access AST successor nodes overridden in every class by *generated* implementation */
  294769             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  294770             : 
  294771             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  294772             :        // than all the vector copies. The implementation for these functions is generated for each class.
  294773             :       /*! \brief return number of children in the traversal successor list */
  294774             :           virtual size_t get_numberOfTraversalSuccessors() override;
  294775             :       /*! \brief index-based access to traversal successors by index number */
  294776             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  294777             :       /*! \brief index-based access to traversal successors by child node */
  294778             :           virtual size_t get_childIndex(SgNode *child) override;
  294779             : 
  294780             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  294781             :        // MS: 08/16/2002 method for generating RTI information
  294782             :       /*! \brief return C++ Runtime-Time-Information */
  294783             :           virtual RTIReturnType roseRTI() override;
  294784             : #endif
  294785             :       /* */
  294786             : 
  294787             : 
  294788             : 
  294789             :       /* name Deprecated Functions
  294790             :           \brief Deprecated functions ... incomplete-documentation
  294791             : 
  294792             :           These functions have been deprecated from use.
  294793             :        */
  294794             :       /* */
  294795             : 
  294796             :       /*! returns a C style string (char*) representing the class name */
  294797             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  294798             : 
  294799             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  294800             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  294801             : #if 0
  294802             :       /*! returns old style Sage II enum values */
  294803             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  294804             :       /*! returns old style Sage II enum values */
  294805             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  294806             : #endif
  294807             :       /* */
  294808             : 
  294809             : 
  294810             : 
  294811             : 
  294812             :      public:
  294813             :       /* name Traversal Support Functions
  294814             :           \brief Traversal support functions ... incomplete-documentation
  294815             : 
  294816             :           These functions have been made public as part of the design, but they are suggested for internal use 
  294817             :           or by particularly knowledgable users for specialized tools or applications.
  294818             :        */
  294819             :       /* */
  294820             : 
  294821             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  294822             :        // (inferior to ROSE traversal mechanism, experimental).
  294823             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  294824             :        */
  294825             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  294826             : 
  294827             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  294828             :       /*! \brief support for the classic visitor pattern done in GoF */
  294829             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  294830             : 
  294831             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  294832             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  294833             :        */
  294834             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  294835             : 
  294836             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  294837             :        */
  294838             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  294839             : 
  294840             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  294841             :        // This traversal helps support internal tools that call static member functions.
  294842             :        // note: this function operates on the memory pools.
  294843             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  294844             :        */
  294845             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  294846             :       /* */
  294847             : 
  294848             : 
  294849             :      public:
  294850             :       /* name Memory Allocation Functions
  294851             :           \brief Memory allocations functions ... incomplete-documentation
  294852             : 
  294853             :           These functions have been made public as part of the design, but they are suggested for internal use 
  294854             :           or by particularly knowledgable users for specialized tools or applications.
  294855             :        */
  294856             :       /* */
  294857             : 
  294858             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  294859             : 
  294860             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  294861             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  294862             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  294863             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  294864             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  294865             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  294866             :           being used with the AST File I/O mechanism.
  294867             :        */
  294868             :           virtual bool isInMemoryPool() override;
  294869             : 
  294870             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  294871             : 
  294872             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  294873             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  294874             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  294875             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  294876             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  294877             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  294878             :           being used with the AST File I/O mechanism.
  294879             :        */
  294880             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  294881             : 
  294882             :       // DQ (4/30/2006): Modified to be a const function.
  294883             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  294884             : 
  294885             :           This functions is part of general support for many possible tools to operate 
  294886             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  294887             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  294888             :           less than the set of pointers used by the AST file I/O. This is part of
  294889             :           work implemented by Andreas, and support tools such as the AST graph generation.
  294890             : 
  294891             :           \warning This function can return unexpected data members and thus the 
  294892             :                    order and the number of elements is unpredicable and subject 
  294893             :                    to change.
  294894             : 
  294895             :           \returns STL vector of pairs of SgNode* and strings
  294896             :        */
  294897             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  294898             : 
  294899             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  294900             : 
  294901             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  294902             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  294903             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  294904             : 
  294905             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  294906             :                    and subject to change.
  294907             :        */
  294908             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  294909             : 
  294910             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  294911             : 
  294912             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  294913             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  294914             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  294915             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  294916             : 
  294917             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  294918             : 
  294919             :           \returns long
  294920             :        */
  294921             :           virtual long getChildIndex( SgNode* childNode ) const override;
  294922             : 
  294923             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  294924             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  294925             :       /* \brief Constructor for use by AST File I/O Mechanism
  294926             : 
  294927             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  294928             :           which obtained via fast binary file I/O from disk.
  294929             :        */
  294930             :        // SgDeleteExp( SgDeleteExpStorageClass& source );
  294931             : 
  294932             : 
  294933             : 
  294934             : 
  294935             : 
  294936             :  // JH (10/24/2005): methods added to support the ast file IO
  294937             :     private:
  294938             : 
  294939             :       /* name AST Memory Allocation Support Functions
  294940             :           \brief Memory allocations support....
  294941             : 
  294942             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  294943             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  294944             :           and support the AST File I/O Mechanism.
  294945             :        */
  294946             :       /* */
  294947             : 
  294948             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  294949             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  294950             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  294951             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  294952             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  294953             :           a correspinding one in the AST_FILE_IO class!
  294954             :        */
  294955             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  294956             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  294957             :       /* \brief Typedef used for low level memory access.
  294958             :        */
  294959             :        // typedef unsigned char* TestType;
  294960             : 
  294961             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  294962             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  294963             :       /* \brief Typedef used to hold memory addresses as values.
  294964             :        */
  294965             :        // typedef unsigned long  AddressType;
  294966             : 
  294967             : 
  294968             : 
  294969             :        // necessary, to have direct access to the p_freepointer and the private methods !
  294970             :       /*! \brief friend class declaration to support AST File I/O */
  294971             :           friend class AST_FILE_IO;
  294972             : 
  294973             :       /*! \brief friend class declaration to support AST File I/O */
  294974             :           friend class SgDeleteExpStorageClass;
  294975             : 
  294976             :       /*! \brief friend class declaration to support AST File I/O */
  294977             :           friend class AstSpecificDataManagingClass;
  294978             : 
  294979             :       /*! \brief friend class declaration to support AST File I/O */
  294980             :           friend class AstSpecificDataManagingClassStorageClass;
  294981             :     public:
  294982             :       /*! \brief IR node constructor to support AST File I/O */
  294983             :           SgDeleteExp( const SgDeleteExpStorageClass& source );
  294984             : 
  294985             :  // private: // JJW hack
  294986             :        /*
  294987             :           name AST Memory Allocation Support Variables
  294988             :           Memory allocations support variables 
  294989             : 
  294990             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  294991             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  294992             :           and support the AST File I/O Mechanism.
  294993             :        */
  294994             :       /* */
  294995             : 
  294996             :     public:
  294997             : 
  294998             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  294999             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  295000             :       // virtual SgNode* addRegExpAttribute();
  295001             :       /*! \brief Support for AST matching using regular expression.
  295002             : 
  295003             :           This support is incomplete and the subject of current research to define 
  295004             :           RegEx trees to support inexact matching.
  295005             :        */
  295006             :           SgDeleteExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  295007             : 
  295008             : // *** COMMON CODE SECTION ENDS HERE ***
  295009             : 
  295010             : 
  295011             : // End of memberFunctionString
  295012             : // Start of memberFunctionString
  295013             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  295014             : 
  295015             :      // the generated cast function
  295016             :      // friend ROSE_DLL_API SgDeleteExp* isSgDeleteExp ( SgNode* s );
  295017             : 
  295018             :           typedef SgExpression base_node_type;
  295019             : 
  295020             : 
  295021             : // End of memberFunctionString
  295022             : // Start of memberFunctionString
  295023             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  295024             : 
  295025             :           SgType* get_type() const override;
  295026             : 
  295027             : 
  295028             : // End of memberFunctionString
  295029             : // Start of memberFunctionString
  295030             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  295031             : 
  295032             :           void post_construction_initialization() override;
  295033             : 
  295034             : 
  295035             : // End of memberFunctionString
  295036             : 
  295037             :      public: 
  295038             :          SgExpression* get_variable() const;
  295039             :          void set_variable(SgExpression* variable);
  295040             : 
  295041             :      public: 
  295042             :          short get_is_array() const;
  295043             :          void set_is_array(short is_array);
  295044             : 
  295045             :      public: 
  295046             :          short get_need_global_specifier() const;
  295047             :          void set_need_global_specifier(short need_global_specifier);
  295048             : 
  295049             :      public: 
  295050             :          SgFunctionDeclaration* get_deleteOperatorDeclaration() const;
  295051             :          void set_deleteOperatorDeclaration(SgFunctionDeclaration* deleteOperatorDeclaration);
  295052             : 
  295053             : 
  295054             :      public: 
  295055             :          virtual ~SgDeleteExp();
  295056             : 
  295057             : 
  295058             :      public: 
  295059             :          SgDeleteExp(Sg_File_Info* startOfConstruct , SgExpression* variable = NULL, short is_array = 0, short need_global_specifier = 0, SgFunctionDeclaration* deleteOperatorDeclaration = NULL); 
  295060             :          SgDeleteExp(SgExpression* variable, short is_array, short need_global_specifier, SgFunctionDeclaration* deleteOperatorDeclaration); 
  295061             : 
  295062             :     protected:
  295063             : // Start of memberFunctionString
  295064             : SgExpression* p_variable;
  295065             :           
  295066             : // End of memberFunctionString
  295067             : // Start of memberFunctionString
  295068             : short p_is_array;
  295069             :           
  295070             : // End of memberFunctionString
  295071             : // Start of memberFunctionString
  295072             : short p_need_global_specifier;
  295073             :           
  295074             : // End of memberFunctionString
  295075             : // Start of memberFunctionString
  295076             : SgFunctionDeclaration* p_deleteOperatorDeclaration;
  295077             :           
  295078             : // End of memberFunctionString
  295079             : 
  295080             :     friend struct Rose::Traits::generated::describe_node_t<SgDeleteExp>;
  295081             :     friend struct Rose::Traits::generated::describe_field_t<SgDeleteExp, SgExpression*,&SgDeleteExp::p_variable>;
  295082             :     friend struct Rose::Traits::generated::describe_field_t<SgDeleteExp, short,&SgDeleteExp::p_is_array>;
  295083             :     friend struct Rose::Traits::generated::describe_field_t<SgDeleteExp, short,&SgDeleteExp::p_need_global_specifier>;
  295084             :     friend struct Rose::Traits::generated::describe_field_t<SgDeleteExp, SgFunctionDeclaration*,&SgDeleteExp::p_deleteOperatorDeclaration>;
  295085             : 
  295086             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295087             : 
  295088             : 
  295089             :    };
  295090             : #endif
  295091             : 
  295092             : // postdeclarations for SgDeleteExp
  295093             : 
  295094             : /* #line 295095 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295095             : 
  295096             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  295097             : 
  295098             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295099             : 
  295100             : 
  295101             : /* #line 295102 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295102             : 
  295103             : 
  295104             : 
  295105             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295106             : 
  295107             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  295108             : //      This code is automatically generated for each 
  295109             : //      terminal and non-terminal within the defined 
  295110             : //      grammar.  There is a simple way to change the 
  295111             : //      code to fix bugs etc.  See the ROSE README file
  295112             : //      for directions.
  295113             : 
  295114             : // tps: (02/22/2010): Adding DLL export requirements
  295115             : #include "rosedll.h"
  295116             : 
  295117             : // predeclarations for SgThisExp
  295118             : 
  295119             : /* #line 295120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295120             : 
  295121             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  295122             : 
  295123             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295124             : 
  295125             : #if 1
  295126             : // Class Definition for SgThisExp
  295127             : class ROSE_DLL_API SgThisExp  : public SgExpression
  295128             :    {
  295129             :      public:
  295130             : 
  295131             : 
  295132             : /* #line 295133 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295133             : 
  295134             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  295135             : // Start of memberFunctionString
  295136             : /* #line 1343 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  295137             : 
  295138             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  295139             :           virtual unsigned int cfgIndexForEnd() const override;
  295140             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  295141             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  295142             : #endif
  295143             : 
  295144             : 
  295145             : 
  295146             : // End of memberFunctionString
  295147             : // Start of memberFunctionString
  295148             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  295149             : 
  295150             : // *** COMMON CODE SECTION BEGINS HERE ***
  295151             : 
  295152             :     public:
  295153             : 
  295154             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  295155             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  295156             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  295157             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  295158             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  295159             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  295160             : 
  295161             :       /*! \brief returns a string representing the class name */
  295162             :           virtual std::string class_name() const override;
  295163             : 
  295164             :       /*! \brief returns new style SageIII enum values */
  295165             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  295166             : 
  295167             :       /*! \brief static variant value */
  295168             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  295169             :        // static const VariantT static_variant = V_SgThisExp;
  295170             :           enum { static_variant = V_SgThisExp };
  295171             : 
  295172             :        /* the generated cast function */
  295173             :       /*! \brief Casts pointer from base class to derived class */
  295174             :           ROSE_DLL_API friend       SgThisExp* isSgThisExp(       SgNode * s );
  295175             : 
  295176             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  295177             :           ROSE_DLL_API friend const SgThisExp* isSgThisExp( const SgNode * s );
  295178             : 
  295179             :      // ******************************************
  295180             :      // * Memory Pool / New / Delete
  295181             :      // ******************************************
  295182             : 
  295183             :      public:
  295184             :           /// \private
  295185             :           static const unsigned pool_size; //
  295186             :           /// \private
  295187             :           static std::vector<unsigned char *> pools; //
  295188             :           /// \private
  295189             :           static SgThisExp * next_node; // 
  295190             : 
  295191             :           /// \private
  295192             :           static unsigned long initializeStorageClassArray(SgThisExpStorageClass *); //
  295193             : 
  295194             :           /// \private
  295195             :           static void clearMemoryPool(); //
  295196             :           static void deleteMemoryPool(); //
  295197             : 
  295198             :           /// \private
  295199             :           static void extendMemoryPoolForFileIO(); //
  295200             : 
  295201             :           /// \private
  295202             :           static SgThisExp * getPointerFromGlobalIndex(unsigned long); //
  295203             :           /// \private
  295204             :           static SgThisExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  295205             : 
  295206             :           /// \private
  295207             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  295208             :           /// \private
  295209             :           static void resetValidFreepointers(); //
  295210             :           /// \private
  295211             :           static unsigned long getNumberOfLastValidPointer(); //
  295212             : 
  295213             : 
  295214             : #if defined(INLINE_FUNCTIONS)
  295215             :       /*! \brief returns pointer to newly allocated IR node */
  295216             :           inline void *operator new (size_t size);
  295217             : #else
  295218             :       /*! \brief returns pointer to newly allocated IR node */
  295219             :           void *operator new (size_t size);
  295220             : #endif
  295221             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  295222             :           void operator delete (void* pointer, size_t size);
  295223             : 
  295224             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  295225        2550 :           void operator delete (void* pointer)
  295226             :              {
  295227             :             // This is the generated delete operator...
  295228        2550 :                SgThisExp::operator delete (pointer,sizeof(SgThisExp));
  295229             :              }
  295230             : 
  295231             :       /*! \brief Returns the total number of IR nodes of this type */
  295232             :           static size_t numberOfNodes();
  295233             : 
  295234             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  295235             :           static size_t memoryUsage();
  295236             : 
  295237             :       // End of scope which started in IR nodes specific code 
  295238             :       /* */
  295239             : 
  295240             :       /* name Internal Functions
  295241             :           \brief Internal functions ... incomplete-documentation
  295242             : 
  295243             :           These functions have been made public as part of the design, but they are suggested for internal use 
  295244             :           or by particularly knowledgeable users for specialized tools or applications.
  295245             : 
  295246             :           \internal We could not make these private because they are required by user for special purposes. And 
  295247             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  295248             :          
  295249             :        */
  295250             : 
  295251             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  295252             :        // overridden in every class by *generated* implementation
  295253             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  295254             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  295255             :        // MS: 06/28/02 container of names of variables or container indices 
  295256             :        // used used in the traversal to access AST successor nodes
  295257             :        // overridden in every class by *generated* implementation
  295258             :       /*! \brief container of names of variables or container indices used used in the traversal
  295259             :           to access AST successor nodes overridden in every class by *generated* implementation */
  295260             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  295261             : 
  295262             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  295263             :        // than all the vector copies. The implementation for these functions is generated for each class.
  295264             :       /*! \brief return number of children in the traversal successor list */
  295265             :           virtual size_t get_numberOfTraversalSuccessors() override;
  295266             :       /*! \brief index-based access to traversal successors by index number */
  295267             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  295268             :       /*! \brief index-based access to traversal successors by child node */
  295269             :           virtual size_t get_childIndex(SgNode *child) override;
  295270             : 
  295271             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  295272             :        // MS: 08/16/2002 method for generating RTI information
  295273             :       /*! \brief return C++ Runtime-Time-Information */
  295274             :           virtual RTIReturnType roseRTI() override;
  295275             : #endif
  295276             :       /* */
  295277             : 
  295278             : 
  295279             : 
  295280             :       /* name Deprecated Functions
  295281             :           \brief Deprecated functions ... incomplete-documentation
  295282             : 
  295283             :           These functions have been deprecated from use.
  295284             :        */
  295285             :       /* */
  295286             : 
  295287             :       /*! returns a C style string (char*) representing the class name */
  295288             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  295289             : 
  295290             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  295291             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  295292             : #if 0
  295293             :       /*! returns old style Sage II enum values */
  295294             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  295295             :       /*! returns old style Sage II enum values */
  295296             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  295297             : #endif
  295298             :       /* */
  295299             : 
  295300             : 
  295301             : 
  295302             : 
  295303             :      public:
  295304             :       /* name Traversal Support Functions
  295305             :           \brief Traversal support functions ... incomplete-documentation
  295306             : 
  295307             :           These functions have been made public as part of the design, but they are suggested for internal use 
  295308             :           or by particularly knowledgable users for specialized tools or applications.
  295309             :        */
  295310             :       /* */
  295311             : 
  295312             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  295313             :        // (inferior to ROSE traversal mechanism, experimental).
  295314             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  295315             :        */
  295316             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  295317             : 
  295318             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  295319             :       /*! \brief support for the classic visitor pattern done in GoF */
  295320             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  295321             : 
  295322             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  295323             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  295324             :        */
  295325             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  295326             : 
  295327             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  295328             :        */
  295329             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  295330             : 
  295331             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  295332             :        // This traversal helps support internal tools that call static member functions.
  295333             :        // note: this function operates on the memory pools.
  295334             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  295335             :        */
  295336             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  295337             :       /* */
  295338             : 
  295339             : 
  295340             :      public:
  295341             :       /* name Memory Allocation Functions
  295342             :           \brief Memory allocations functions ... incomplete-documentation
  295343             : 
  295344             :           These functions have been made public as part of the design, but they are suggested for internal use 
  295345             :           or by particularly knowledgable users for specialized tools or applications.
  295346             :        */
  295347             :       /* */
  295348             : 
  295349             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  295350             : 
  295351             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  295352             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  295353             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  295354             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  295355             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  295356             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  295357             :           being used with the AST File I/O mechanism.
  295358             :        */
  295359             :           virtual bool isInMemoryPool() override;
  295360             : 
  295361             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  295362             : 
  295363             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  295364             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  295365             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  295366             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  295367             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  295368             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  295369             :           being used with the AST File I/O mechanism.
  295370             :        */
  295371             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  295372             : 
  295373             :       // DQ (4/30/2006): Modified to be a const function.
  295374             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  295375             : 
  295376             :           This functions is part of general support for many possible tools to operate 
  295377             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  295378             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  295379             :           less than the set of pointers used by the AST file I/O. This is part of
  295380             :           work implemented by Andreas, and support tools such as the AST graph generation.
  295381             : 
  295382             :           \warning This function can return unexpected data members and thus the 
  295383             :                    order and the number of elements is unpredicable and subject 
  295384             :                    to change.
  295385             : 
  295386             :           \returns STL vector of pairs of SgNode* and strings
  295387             :        */
  295388             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  295389             : 
  295390             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  295391             : 
  295392             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  295393             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  295394             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  295395             : 
  295396             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  295397             :                    and subject to change.
  295398             :        */
  295399             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  295400             : 
  295401             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  295402             : 
  295403             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  295404             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  295405             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  295406             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  295407             : 
  295408             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  295409             : 
  295410             :           \returns long
  295411             :        */
  295412             :           virtual long getChildIndex( SgNode* childNode ) const override;
  295413             : 
  295414             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  295415             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  295416             :       /* \brief Constructor for use by AST File I/O Mechanism
  295417             : 
  295418             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  295419             :           which obtained via fast binary file I/O from disk.
  295420             :        */
  295421             :        // SgThisExp( SgThisExpStorageClass& source );
  295422             : 
  295423             : 
  295424             : 
  295425             : 
  295426             : 
  295427             :  // JH (10/24/2005): methods added to support the ast file IO
  295428             :     private:
  295429             : 
  295430             :       /* name AST Memory Allocation Support Functions
  295431             :           \brief Memory allocations support....
  295432             : 
  295433             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  295434             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  295435             :           and support the AST File I/O Mechanism.
  295436             :        */
  295437             :       /* */
  295438             : 
  295439             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  295440             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  295441             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  295442             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  295443             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  295444             :           a correspinding one in the AST_FILE_IO class!
  295445             :        */
  295446             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  295447             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  295448             :       /* \brief Typedef used for low level memory access.
  295449             :        */
  295450             :        // typedef unsigned char* TestType;
  295451             : 
  295452             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  295453             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  295454             :       /* \brief Typedef used to hold memory addresses as values.
  295455             :        */
  295456             :        // typedef unsigned long  AddressType;
  295457             : 
  295458             : 
  295459             : 
  295460             :        // necessary, to have direct access to the p_freepointer and the private methods !
  295461             :       /*! \brief friend class declaration to support AST File I/O */
  295462             :           friend class AST_FILE_IO;
  295463             : 
  295464             :       /*! \brief friend class declaration to support AST File I/O */
  295465             :           friend class SgThisExpStorageClass;
  295466             : 
  295467             :       /*! \brief friend class declaration to support AST File I/O */
  295468             :           friend class AstSpecificDataManagingClass;
  295469             : 
  295470             :       /*! \brief friend class declaration to support AST File I/O */
  295471             :           friend class AstSpecificDataManagingClassStorageClass;
  295472             :     public:
  295473             :       /*! \brief IR node constructor to support AST File I/O */
  295474             :           SgThisExp( const SgThisExpStorageClass& source );
  295475             : 
  295476             :  // private: // JJW hack
  295477             :        /*
  295478             :           name AST Memory Allocation Support Variables
  295479             :           Memory allocations support variables 
  295480             : 
  295481             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  295482             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  295483             :           and support the AST File I/O Mechanism.
  295484             :        */
  295485             :       /* */
  295486             : 
  295487             :     public:
  295488             : 
  295489             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  295490             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  295491             :       // virtual SgNode* addRegExpAttribute();
  295492             :       /*! \brief Support for AST matching using regular expression.
  295493             : 
  295494             :           This support is incomplete and the subject of current research to define 
  295495             :           RegEx trees to support inexact matching.
  295496             :        */
  295497             :           SgThisExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  295498             : 
  295499             : // *** COMMON CODE SECTION ENDS HERE ***
  295500             : 
  295501             : 
  295502             : // End of memberFunctionString
  295503             : // Start of memberFunctionString
  295504             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  295505             : 
  295506             :      // the generated cast function
  295507             :      // friend ROSE_DLL_API SgThisExp* isSgThisExp ( SgNode* s );
  295508             : 
  295509             :           typedef SgExpression base_node_type;
  295510             : 
  295511             : 
  295512             : // End of memberFunctionString
  295513             : // Start of memberFunctionString
  295514             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  295515             : 
  295516             :           SgType* get_type() const override;
  295517             : 
  295518             : 
  295519             : // End of memberFunctionString
  295520             : // Start of memberFunctionString
  295521             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  295522             : 
  295523             :           void post_construction_initialization() override;
  295524             : 
  295525             : 
  295526             : // End of memberFunctionString
  295527             : 
  295528             :      public: 
  295529             :          SgClassSymbol* get_class_symbol() const;
  295530             :          void set_class_symbol(SgClassSymbol* class_symbol);
  295531             : 
  295532             :      public: 
  295533             :          SgNonrealSymbol* get_nonreal_symbol() const;
  295534             :          void set_nonreal_symbol(SgNonrealSymbol* nonreal_symbol);
  295535             : 
  295536             :      public: 
  295537             :          int get_pobj_this() const;
  295538             :          void set_pobj_this(int pobj_this);
  295539             : 
  295540             : 
  295541             :      public: 
  295542             :          virtual ~SgThisExp();
  295543             : 
  295544             : 
  295545             :      public: 
  295546             :          SgThisExp(Sg_File_Info* startOfConstruct , SgClassSymbol* class_symbol = NULL, SgNonrealSymbol* nonreal_symbol = NULL, int pobj_this = 0); 
  295547             :          SgThisExp(SgClassSymbol* class_symbol, SgNonrealSymbol* nonreal_symbol, int pobj_this); 
  295548             : 
  295549             :     protected:
  295550             : // Start of memberFunctionString
  295551             : SgClassSymbol* p_class_symbol;
  295552             :           
  295553             : // End of memberFunctionString
  295554             : // Start of memberFunctionString
  295555             : SgNonrealSymbol* p_nonreal_symbol;
  295556             :           
  295557             : // End of memberFunctionString
  295558             : // Start of memberFunctionString
  295559             : int p_pobj_this;
  295560             :           
  295561             : // End of memberFunctionString
  295562             : 
  295563             :     friend struct Rose::Traits::generated::describe_node_t<SgThisExp>;
  295564             :     friend struct Rose::Traits::generated::describe_field_t<SgThisExp, SgClassSymbol*,&SgThisExp::p_class_symbol>;
  295565             :     friend struct Rose::Traits::generated::describe_field_t<SgThisExp, SgNonrealSymbol*,&SgThisExp::p_nonreal_symbol>;
  295566             :     friend struct Rose::Traits::generated::describe_field_t<SgThisExp, int,&SgThisExp::p_pobj_this>;
  295567             : 
  295568             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295569             : 
  295570             : 
  295571             :    };
  295572             : #endif
  295573             : 
  295574             : // postdeclarations for SgThisExp
  295575             : 
  295576             : /* #line 295577 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295577             : 
  295578             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  295579             : 
  295580             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295581             : 
  295582             : 
  295583             : /* #line 295584 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295584             : 
  295585             : 
  295586             : 
  295587             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295588             : 
  295589             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  295590             : //      This code is automatically generated for each 
  295591             : //      terminal and non-terminal within the defined 
  295592             : //      grammar.  There is a simple way to change the 
  295593             : //      code to fix bugs etc.  See the ROSE README file
  295594             : //      for directions.
  295595             : 
  295596             : // tps: (02/22/2010): Adding DLL export requirements
  295597             : #include "rosedll.h"
  295598             : 
  295599             : // predeclarations for SgRefExp
  295600             : 
  295601             : /* #line 295602 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295602             : 
  295603             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  295604             : 
  295605             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  295606             : 
  295607             : #if 1
  295608             : // Class Definition for SgRefExp
  295609             : class ROSE_DLL_API SgRefExp  : public SgExpression
  295610             :    {
  295611             :      public:
  295612             : 
  295613             : 
  295614             : /* #line 295615 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  295615             : 
  295616             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  295617             : // Start of memberFunctionString
  295618             : /* #line 1448 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  295619             : 
  295620             : 
  295621             : 
  295622             : // End of memberFunctionString
  295623             : // Start of memberFunctionString
  295624             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  295625             : 
  295626             : // *** COMMON CODE SECTION BEGINS HERE ***
  295627             : 
  295628             :     public:
  295629             : 
  295630             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  295631             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  295632             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  295633             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  295634             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  295635             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  295636             : 
  295637             :       /*! \brief returns a string representing the class name */
  295638             :           virtual std::string class_name() const override;
  295639             : 
  295640             :       /*! \brief returns new style SageIII enum values */
  295641             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  295642             : 
  295643             :       /*! \brief static variant value */
  295644             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  295645             :        // static const VariantT static_variant = V_SgRefExp;
  295646             :           enum { static_variant = V_SgRefExp };
  295647             : 
  295648             :        /* the generated cast function */
  295649             :       /*! \brief Casts pointer from base class to derived class */
  295650             :           ROSE_DLL_API friend       SgRefExp* isSgRefExp(       SgNode * s );
  295651             : 
  295652             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  295653             :           ROSE_DLL_API friend const SgRefExp* isSgRefExp( const SgNode * s );
  295654             : 
  295655             :      // ******************************************
  295656             :      // * Memory Pool / New / Delete
  295657             :      // ******************************************
  295658             : 
  295659             :      public:
  295660             :           /// \private
  295661             :           static const unsigned pool_size; //
  295662             :           /// \private
  295663             :           static std::vector<unsigned char *> pools; //
  295664             :           /// \private
  295665             :           static SgRefExp * next_node; // 
  295666             : 
  295667             :           /// \private
  295668             :           static unsigned long initializeStorageClassArray(SgRefExpStorageClass *); //
  295669             : 
  295670             :           /// \private
  295671             :           static void clearMemoryPool(); //
  295672             :           static void deleteMemoryPool(); //
  295673             : 
  295674             :           /// \private
  295675             :           static void extendMemoryPoolForFileIO(); //
  295676             : 
  295677             :           /// \private
  295678             :           static SgRefExp * getPointerFromGlobalIndex(unsigned long); //
  295679             :           /// \private
  295680             :           static SgRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  295681             : 
  295682             :           /// \private
  295683             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  295684             :           /// \private
  295685             :           static void resetValidFreepointers(); //
  295686             :           /// \private
  295687             :           static unsigned long getNumberOfLastValidPointer(); //
  295688             : 
  295689             : 
  295690             : #if defined(INLINE_FUNCTIONS)
  295691             :       /*! \brief returns pointer to newly allocated IR node */
  295692             :           inline void *operator new (size_t size);
  295693             : #else
  295694             :       /*! \brief returns pointer to newly allocated IR node */
  295695             :           void *operator new (size_t size);
  295696             : #endif
  295697             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  295698             :           void operator delete (void* pointer, size_t size);
  295699             : 
  295700             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  295701           0 :           void operator delete (void* pointer)
  295702             :              {
  295703             :             // This is the generated delete operator...
  295704           0 :                SgRefExp::operator delete (pointer,sizeof(SgRefExp));
  295705             :              }
  295706             : 
  295707             :       /*! \brief Returns the total number of IR nodes of this type */
  295708             :           static size_t numberOfNodes();
  295709             : 
  295710             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  295711             :           static size_t memoryUsage();
  295712             : 
  295713             :       // End of scope which started in IR nodes specific code 
  295714             :       /* */
  295715             : 
  295716             :       /* name Internal Functions
  295717             :           \brief Internal functions ... incomplete-documentation
  295718             : 
  295719             :           These functions have been made public as part of the design, but they are suggested for internal use 
  295720             :           or by particularly knowledgeable users for specialized tools or applications.
  295721             : 
  295722             :           \internal We could not make these private because they are required by user for special purposes. And 
  295723             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  295724             :          
  295725             :        */
  295726             : 
  295727             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  295728             :        // overridden in every class by *generated* implementation
  295729             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  295730             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  295731             :        // MS: 06/28/02 container of names of variables or container indices 
  295732             :        // used used in the traversal to access AST successor nodes
  295733             :        // overridden in every class by *generated* implementation
  295734             :       /*! \brief container of names of variables or container indices used used in the traversal
  295735             :           to access AST successor nodes overridden in every class by *generated* implementation */
  295736             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  295737             : 
  295738             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  295739             :        // than all the vector copies. The implementation for these functions is generated for each class.
  295740             :       /*! \brief return number of children in the traversal successor list */
  295741             :           virtual size_t get_numberOfTraversalSuccessors() override;
  295742             :       /*! \brief index-based access to traversal successors by index number */
  295743             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  295744             :       /*! \brief index-based access to traversal successors by child node */
  295745             :           virtual size_t get_childIndex(SgNode *child) override;
  295746             : 
  295747             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  295748             :        // MS: 08/16/2002 method for generating RTI information
  295749             :       /*! \brief return C++ Runtime-Time-Information */
  295750             :           virtual RTIReturnType roseRTI() override;
  295751             : #endif
  295752             :       /* */
  295753             : 
  295754             : 
  295755             : 
  295756             :       /* name Deprecated Functions
  295757             :           \brief Deprecated functions ... incomplete-documentation
  295758             : 
  295759             :           These functions have been deprecated from use.
  295760             :        */
  295761             :       /* */
  295762             : 
  295763             :       /*! returns a C style string (char*) representing the class name */
  295764             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  295765             : 
  295766             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  295767             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  295768             : #if 0
  295769             :       /*! returns old style Sage II enum values */
  295770             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  295771             :       /*! returns old style Sage II enum values */
  295772             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  295773             : #endif
  295774             :       /* */
  295775             : 
  295776             : 
  295777             : 
  295778             : 
  295779             :      public:
  295780             :       /* name Traversal Support Functions
  295781             :           \brief Traversal support functions ... incomplete-documentation
  295782             : 
  295783             :           These functions have been made public as part of the design, but they are suggested for internal use 
  295784             :           or by particularly knowledgable users for specialized tools or applications.
  295785             :        */
  295786             :       /* */
  295787             : 
  295788             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  295789             :        // (inferior to ROSE traversal mechanism, experimental).
  295790             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  295791             :        */
  295792             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  295793             : 
  295794             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  295795             :       /*! \brief support for the classic visitor pattern done in GoF */
  295796             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  295797             : 
  295798             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  295799             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  295800             :        */
  295801             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  295802             : 
  295803             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  295804             :        */
  295805             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  295806             : 
  295807             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  295808             :        // This traversal helps support internal tools that call static member functions.
  295809             :        // note: this function operates on the memory pools.
  295810             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  295811             :        */
  295812             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  295813             :       /* */
  295814             : 
  295815             : 
  295816             :      public:
  295817             :       /* name Memory Allocation Functions
  295818             :           \brief Memory allocations functions ... incomplete-documentation
  295819             : 
  295820             :           These functions have been made public as part of the design, but they are suggested for internal use 
  295821             :           or by particularly knowledgable users for specialized tools or applications.
  295822             :        */
  295823             :       /* */
  295824             : 
  295825             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  295826             : 
  295827             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  295828             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  295829             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  295830             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  295831             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  295832             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  295833             :           being used with the AST File I/O mechanism.
  295834             :        */
  295835             :           virtual bool isInMemoryPool() override;
  295836             : 
  295837             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  295838             : 
  295839             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  295840             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  295841             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  295842             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  295843             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  295844             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  295845             :           being used with the AST File I/O mechanism.
  295846             :        */
  295847             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  295848             : 
  295849             :       // DQ (4/30/2006): Modified to be a const function.
  295850             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  295851             : 
  295852             :           This functions is part of general support for many possible tools to operate 
  295853             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  295854             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  295855             :           less than the set of pointers used by the AST file I/O. This is part of
  295856             :           work implemented by Andreas, and support tools such as the AST graph generation.
  295857             : 
  295858             :           \warning This function can return unexpected data members and thus the 
  295859             :                    order and the number of elements is unpredicable and subject 
  295860             :                    to change.
  295861             : 
  295862             :           \returns STL vector of pairs of SgNode* and strings
  295863             :        */
  295864             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  295865             : 
  295866             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  295867             : 
  295868             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  295869             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  295870             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  295871             : 
  295872             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  295873             :                    and subject to change.
  295874             :        */
  295875             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  295876             : 
  295877             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  295878             : 
  295879             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  295880             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  295881             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  295882             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  295883             : 
  295884             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  295885             : 
  295886             :           \returns long
  295887             :        */
  295888             :           virtual long getChildIndex( SgNode* childNode ) const override;
  295889             : 
  295890             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  295891             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  295892             :       /* \brief Constructor for use by AST File I/O Mechanism
  295893             : 
  295894             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  295895             :           which obtained via fast binary file I/O from disk.
  295896             :        */
  295897             :        // SgRefExp( SgRefExpStorageClass& source );
  295898             : 
  295899             : 
  295900             : 
  295901             : 
  295902             : 
  295903             :  // JH (10/24/2005): methods added to support the ast file IO
  295904             :     private:
  295905             : 
  295906             :       /* name AST Memory Allocation Support Functions
  295907             :           \brief Memory allocations support....
  295908             : 
  295909             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  295910             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  295911             :           and support the AST File I/O Mechanism.
  295912             :        */
  295913             :       /* */
  295914             : 
  295915             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  295916             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  295917             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  295918             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  295919             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  295920             :           a correspinding one in the AST_FILE_IO class!
  295921             :        */
  295922             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  295923             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  295924             :       /* \brief Typedef used for low level memory access.
  295925             :        */
  295926             :        // typedef unsigned char* TestType;
  295927             : 
  295928             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  295929             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  295930             :       /* \brief Typedef used to hold memory addresses as values.
  295931             :        */
  295932             :        // typedef unsigned long  AddressType;
  295933             : 
  295934             : 
  295935             : 
  295936             :        // necessary, to have direct access to the p_freepointer and the private methods !
  295937             :       /*! \brief friend class declaration to support AST File I/O */
  295938             :           friend class AST_FILE_IO;
  295939             : 
  295940             :       /*! \brief friend class declaration to support AST File I/O */
  295941             :           friend class SgRefExpStorageClass;
  295942             : 
  295943             :       /*! \brief friend class declaration to support AST File I/O */
  295944             :           friend class AstSpecificDataManagingClass;
  295945             : 
  295946             :       /*! \brief friend class declaration to support AST File I/O */
  295947             :           friend class AstSpecificDataManagingClassStorageClass;
  295948             :     public:
  295949             :       /*! \brief IR node constructor to support AST File I/O */
  295950             :           SgRefExp( const SgRefExpStorageClass& source );
  295951             : 
  295952             :  // private: // JJW hack
  295953             :        /*
  295954             :           name AST Memory Allocation Support Variables
  295955             :           Memory allocations support variables 
  295956             : 
  295957             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  295958             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  295959             :           and support the AST File I/O Mechanism.
  295960             :        */
  295961             :       /* */
  295962             : 
  295963             :     public:
  295964             : 
  295965             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  295966             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  295967             :       // virtual SgNode* addRegExpAttribute();
  295968             :       /*! \brief Support for AST matching using regular expression.
  295969             : 
  295970             :           This support is incomplete and the subject of current research to define 
  295971             :           RegEx trees to support inexact matching.
  295972             :        */
  295973             :           SgRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  295974             : 
  295975             : // *** COMMON CODE SECTION ENDS HERE ***
  295976             : 
  295977             : 
  295978             : // End of memberFunctionString
  295979             : // Start of memberFunctionString
  295980             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  295981             : 
  295982             :      // the generated cast function
  295983             :      // friend ROSE_DLL_API SgRefExp* isSgRefExp ( SgNode* s );
  295984             : 
  295985             :           typedef SgExpression base_node_type;
  295986             : 
  295987             : 
  295988             : // End of memberFunctionString
  295989             : // Start of memberFunctionString
  295990             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  295991             : 
  295992             :           void post_construction_initialization() override;
  295993             : 
  295994             : 
  295995             : // End of memberFunctionString
  295996             : 
  295997             :      public: 
  295998             :          SgType* get_type_name() const;
  295999             :          void set_type_name(SgType* type_name);
  296000             : 
  296001             : 
  296002             :      public: 
  296003             :          virtual ~SgRefExp();
  296004             : 
  296005             : 
  296006             :      public: 
  296007             :          SgRefExp(Sg_File_Info* startOfConstruct , SgType* type_name = NULL); 
  296008             :          SgRefExp(SgType* type_name); 
  296009             : 
  296010             :     protected:
  296011             : // Start of memberFunctionString
  296012             : SgType* p_type_name;
  296013             :           
  296014             : // End of memberFunctionString
  296015             : 
  296016             :     friend struct Rose::Traits::generated::describe_node_t<SgRefExp>;
  296017             :     friend struct Rose::Traits::generated::describe_field_t<SgRefExp, SgType*,&SgRefExp::p_type_name>;
  296018             : 
  296019             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296020             : 
  296021             : 
  296022             :    };
  296023             : #endif
  296024             : 
  296025             : // postdeclarations for SgRefExp
  296026             : 
  296027             : /* #line 296028 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296028             : 
  296029             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  296030             : 
  296031             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296032             : 
  296033             : 
  296034             : /* #line 296035 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296035             : 
  296036             : 
  296037             : 
  296038             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296039             : 
  296040             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  296041             : //      This code is automatically generated for each 
  296042             : //      terminal and non-terminal within the defined 
  296043             : //      grammar.  There is a simple way to change the 
  296044             : //      code to fix bugs etc.  See the ROSE README file
  296045             : //      for directions.
  296046             : 
  296047             : // tps: (02/22/2010): Adding DLL export requirements
  296048             : #include "rosedll.h"
  296049             : 
  296050             : // predeclarations for SgInitializer
  296051             : 
  296052             : /* #line 296053 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296053             : 
  296054             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  296055             : 
  296056             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296057             : 
  296058             : #if 1
  296059             : // Class Definition for SgInitializer
  296060             : class ROSE_DLL_API SgInitializer  : public SgExpression
  296061             :    {
  296062             :      public:
  296063             : 
  296064             : 
  296065             : /* #line 296066 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296066             : 
  296067             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  296068             : // Start of memberFunctionString
  296069             : /* #line 1484 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  296070             : 
  296071             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  296072             :           virtual unsigned int cfgIndexForEnd() const override;
  296073             : #endif
  296074             : 
  296075             : 
  296076             : 
  296077             : // End of memberFunctionString
  296078             : // Start of memberFunctionString
  296079             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  296080             : 
  296081             : // *** COMMON CODE SECTION BEGINS HERE ***
  296082             : 
  296083             :     public:
  296084             : 
  296085             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  296086             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  296087             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  296088             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  296089             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  296090             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  296091             : 
  296092             :       /*! \brief returns a string representing the class name */
  296093             :           virtual std::string class_name() const override;
  296094             : 
  296095             :       /*! \brief returns new style SageIII enum values */
  296096             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  296097             : 
  296098             :       /*! \brief static variant value */
  296099             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  296100             :        // static const VariantT static_variant = V_SgInitializer;
  296101             :           enum { static_variant = V_SgInitializer };
  296102             : 
  296103             :        /* the generated cast function */
  296104             :       /*! \brief Casts pointer from base class to derived class */
  296105             :           ROSE_DLL_API friend       SgInitializer* isSgInitializer(       SgNode * s );
  296106             : 
  296107             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  296108             :           ROSE_DLL_API friend const SgInitializer* isSgInitializer( const SgNode * s );
  296109             : 
  296110             :      // ******************************************
  296111             :      // * Memory Pool / New / Delete
  296112             :      // ******************************************
  296113             : 
  296114             :      public:
  296115             :           /// \private
  296116             :           static const unsigned pool_size; //
  296117             :           /// \private
  296118             :           static std::vector<unsigned char *> pools; //
  296119             :           /// \private
  296120             :           static SgInitializer * next_node; // 
  296121             : 
  296122             :           /// \private
  296123             :           static unsigned long initializeStorageClassArray(SgInitializerStorageClass *); //
  296124             : 
  296125             :           /// \private
  296126             :           static void clearMemoryPool(); //
  296127             :           static void deleteMemoryPool(); //
  296128             : 
  296129             :           /// \private
  296130             :           static void extendMemoryPoolForFileIO(); //
  296131             : 
  296132             :           /// \private
  296133             :           static SgInitializer * getPointerFromGlobalIndex(unsigned long); //
  296134             :           /// \private
  296135             :           static SgInitializer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  296136             : 
  296137             :           /// \private
  296138             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  296139             :           /// \private
  296140             :           static void resetValidFreepointers(); //
  296141             :           /// \private
  296142             :           static unsigned long getNumberOfLastValidPointer(); //
  296143             : 
  296144             : 
  296145             : #if defined(INLINE_FUNCTIONS)
  296146             :       /*! \brief returns pointer to newly allocated IR node */
  296147             :           inline void *operator new (size_t size);
  296148             : #else
  296149             :       /*! \brief returns pointer to newly allocated IR node */
  296150             :           void *operator new (size_t size);
  296151             : #endif
  296152             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  296153             :           void operator delete (void* pointer, size_t size);
  296154             : 
  296155             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  296156           0 :           void operator delete (void* pointer)
  296157             :              {
  296158             :             // This is the generated delete operator...
  296159           0 :                SgInitializer::operator delete (pointer,sizeof(SgInitializer));
  296160             :              }
  296161             : 
  296162             :       /*! \brief Returns the total number of IR nodes of this type */
  296163             :           static size_t numberOfNodes();
  296164             : 
  296165             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  296166             :           static size_t memoryUsage();
  296167             : 
  296168             :       // End of scope which started in IR nodes specific code 
  296169             :       /* */
  296170             : 
  296171             :       /* name Internal Functions
  296172             :           \brief Internal functions ... incomplete-documentation
  296173             : 
  296174             :           These functions have been made public as part of the design, but they are suggested for internal use 
  296175             :           or by particularly knowledgeable users for specialized tools or applications.
  296176             : 
  296177             :           \internal We could not make these private because they are required by user for special purposes. And 
  296178             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  296179             :          
  296180             :        */
  296181             : 
  296182             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  296183             :        // overridden in every class by *generated* implementation
  296184             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  296185             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  296186             :        // MS: 06/28/02 container of names of variables or container indices 
  296187             :        // used used in the traversal to access AST successor nodes
  296188             :        // overridden in every class by *generated* implementation
  296189             :       /*! \brief container of names of variables or container indices used used in the traversal
  296190             :           to access AST successor nodes overridden in every class by *generated* implementation */
  296191             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  296192             : 
  296193             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  296194             :        // than all the vector copies. The implementation for these functions is generated for each class.
  296195             :       /*! \brief return number of children in the traversal successor list */
  296196             :           virtual size_t get_numberOfTraversalSuccessors() override;
  296197             :       /*! \brief index-based access to traversal successors by index number */
  296198             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  296199             :       /*! \brief index-based access to traversal successors by child node */
  296200             :           virtual size_t get_childIndex(SgNode *child) override;
  296201             : 
  296202             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  296203             :        // MS: 08/16/2002 method for generating RTI information
  296204             :       /*! \brief return C++ Runtime-Time-Information */
  296205             :           virtual RTIReturnType roseRTI() override;
  296206             : #endif
  296207             :       /* */
  296208             : 
  296209             : 
  296210             : 
  296211             :       /* name Deprecated Functions
  296212             :           \brief Deprecated functions ... incomplete-documentation
  296213             : 
  296214             :           These functions have been deprecated from use.
  296215             :        */
  296216             :       /* */
  296217             : 
  296218             :       /*! returns a C style string (char*) representing the class name */
  296219             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  296220             : 
  296221             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  296222             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  296223             : #if 0
  296224             :       /*! returns old style Sage II enum values */
  296225             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  296226             :       /*! returns old style Sage II enum values */
  296227             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  296228             : #endif
  296229             :       /* */
  296230             : 
  296231             : 
  296232             : 
  296233             : 
  296234             :      public:
  296235             :       /* name Traversal Support Functions
  296236             :           \brief Traversal support functions ... incomplete-documentation
  296237             : 
  296238             :           These functions have been made public as part of the design, but they are suggested for internal use 
  296239             :           or by particularly knowledgable users for specialized tools or applications.
  296240             :        */
  296241             :       /* */
  296242             : 
  296243             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  296244             :        // (inferior to ROSE traversal mechanism, experimental).
  296245             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  296246             :        */
  296247             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  296248             : 
  296249             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  296250             :       /*! \brief support for the classic visitor pattern done in GoF */
  296251             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  296252             : 
  296253             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  296254             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  296255             :        */
  296256             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  296257             : 
  296258             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  296259             :        */
  296260             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  296261             : 
  296262             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  296263             :        // This traversal helps support internal tools that call static member functions.
  296264             :        // note: this function operates on the memory pools.
  296265             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  296266             :        */
  296267             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  296268             :       /* */
  296269             : 
  296270             : 
  296271             :      public:
  296272             :       /* name Memory Allocation Functions
  296273             :           \brief Memory allocations functions ... incomplete-documentation
  296274             : 
  296275             :           These functions have been made public as part of the design, but they are suggested for internal use 
  296276             :           or by particularly knowledgable users for specialized tools or applications.
  296277             :        */
  296278             :       /* */
  296279             : 
  296280             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  296281             : 
  296282             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  296283             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  296284             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  296285             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  296286             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  296287             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  296288             :           being used with the AST File I/O mechanism.
  296289             :        */
  296290             :           virtual bool isInMemoryPool() override;
  296291             : 
  296292             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  296293             : 
  296294             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  296295             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  296296             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  296297             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  296298             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  296299             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  296300             :           being used with the AST File I/O mechanism.
  296301             :        */
  296302             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  296303             : 
  296304             :       // DQ (4/30/2006): Modified to be a const function.
  296305             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  296306             : 
  296307             :           This functions is part of general support for many possible tools to operate 
  296308             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  296309             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  296310             :           less than the set of pointers used by the AST file I/O. This is part of
  296311             :           work implemented by Andreas, and support tools such as the AST graph generation.
  296312             : 
  296313             :           \warning This function can return unexpected data members and thus the 
  296314             :                    order and the number of elements is unpredicable and subject 
  296315             :                    to change.
  296316             : 
  296317             :           \returns STL vector of pairs of SgNode* and strings
  296318             :        */
  296319             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  296320             : 
  296321             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  296322             : 
  296323             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  296324             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  296325             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  296326             : 
  296327             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  296328             :                    and subject to change.
  296329             :        */
  296330             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  296331             : 
  296332             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  296333             : 
  296334             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  296335             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  296336             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  296337             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  296338             : 
  296339             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  296340             : 
  296341             :           \returns long
  296342             :        */
  296343             :           virtual long getChildIndex( SgNode* childNode ) const override;
  296344             : 
  296345             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  296346             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  296347             :       /* \brief Constructor for use by AST File I/O Mechanism
  296348             : 
  296349             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  296350             :           which obtained via fast binary file I/O from disk.
  296351             :        */
  296352             :        // SgInitializer( SgInitializerStorageClass& source );
  296353             : 
  296354             : 
  296355             : 
  296356             : 
  296357             : 
  296358             :  // JH (10/24/2005): methods added to support the ast file IO
  296359             :     private:
  296360             : 
  296361             :       /* name AST Memory Allocation Support Functions
  296362             :           \brief Memory allocations support....
  296363             : 
  296364             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  296365             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  296366             :           and support the AST File I/O Mechanism.
  296367             :        */
  296368             :       /* */
  296369             : 
  296370             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  296371             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  296372             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  296373             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  296374             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  296375             :           a correspinding one in the AST_FILE_IO class!
  296376             :        */
  296377             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  296378             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  296379             :       /* \brief Typedef used for low level memory access.
  296380             :        */
  296381             :        // typedef unsigned char* TestType;
  296382             : 
  296383             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  296384             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  296385             :       /* \brief Typedef used to hold memory addresses as values.
  296386             :        */
  296387             :        // typedef unsigned long  AddressType;
  296388             : 
  296389             : 
  296390             : 
  296391             :        // necessary, to have direct access to the p_freepointer and the private methods !
  296392             :       /*! \brief friend class declaration to support AST File I/O */
  296393             :           friend class AST_FILE_IO;
  296394             : 
  296395             :       /*! \brief friend class declaration to support AST File I/O */
  296396             :           friend class SgInitializerStorageClass;
  296397             : 
  296398             :       /*! \brief friend class declaration to support AST File I/O */
  296399             :           friend class AstSpecificDataManagingClass;
  296400             : 
  296401             :       /*! \brief friend class declaration to support AST File I/O */
  296402             :           friend class AstSpecificDataManagingClassStorageClass;
  296403             :     public:
  296404             :       /*! \brief IR node constructor to support AST File I/O */
  296405             :           SgInitializer( const SgInitializerStorageClass& source );
  296406             : 
  296407             :  // private: // JJW hack
  296408             :        /*
  296409             :           name AST Memory Allocation Support Variables
  296410             :           Memory allocations support variables 
  296411             : 
  296412             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  296413             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  296414             :           and support the AST File I/O Mechanism.
  296415             :        */
  296416             :       /* */
  296417             : 
  296418             :     public:
  296419             : 
  296420             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  296421             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  296422             :       // virtual SgNode* addRegExpAttribute();
  296423             :       /*! \brief Support for AST matching using regular expression.
  296424             : 
  296425             :           This support is incomplete and the subject of current research to define 
  296426             :           RegEx trees to support inexact matching.
  296427             :        */
  296428             :           SgInitializer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  296429             : 
  296430             : // *** COMMON CODE SECTION ENDS HERE ***
  296431             : 
  296432             : 
  296433             : // End of memberFunctionString
  296434             : // Start of memberFunctionString
  296435             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  296436             : 
  296437             :      // the generated cast function
  296438             :      // friend ROSE_DLL_API SgInitializer* isSgInitializer ( SgNode* s );
  296439             : 
  296440             :           typedef SgExpression base_node_type;
  296441             : 
  296442             : 
  296443             : // End of memberFunctionString
  296444             : // Start of memberFunctionString
  296445             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  296446             : 
  296447             :           void post_construction_initialization() override;
  296448             : 
  296449             : 
  296450             : // End of memberFunctionString
  296451             : 
  296452             :      public: 
  296453             :          bool get_is_explicit_cast() const;
  296454             :          void set_is_explicit_cast(bool is_explicit_cast);
  296455             : 
  296456             :      public: 
  296457             :          bool get_is_braced_initialized() const;
  296458             :          void set_is_braced_initialized(bool is_braced_initialized);
  296459             : 
  296460             : 
  296461             :      public: 
  296462             :          virtual ~SgInitializer();
  296463             : 
  296464             : 
  296465             :      public: 
  296466             :          SgInitializer(Sg_File_Info* startOfConstruct ); 
  296467             :          SgInitializer(); 
  296468             : 
  296469             :     protected:
  296470             : // Start of memberFunctionString
  296471             : bool p_is_explicit_cast;
  296472             :           
  296473             : // End of memberFunctionString
  296474             : // Start of memberFunctionString
  296475             : bool p_is_braced_initialized;
  296476             :           
  296477             : // End of memberFunctionString
  296478             : 
  296479             :     friend struct Rose::Traits::generated::describe_node_t<SgInitializer>;
  296480             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializer, bool,&SgInitializer::p_is_explicit_cast>;
  296481             :     friend struct Rose::Traits::generated::describe_field_t<SgInitializer, bool,&SgInitializer::p_is_braced_initialized>;
  296482             : 
  296483             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296484             : 
  296485             : 
  296486             :    };
  296487             : #endif
  296488             : 
  296489             : // postdeclarations for SgInitializer
  296490             : 
  296491             : /* #line 296492 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296492             : 
  296493             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  296494             : 
  296495             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296496             : 
  296497             : 
  296498             : /* #line 296499 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296499             : 
  296500             : 
  296501             : 
  296502             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296503             : 
  296504             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  296505             : //      This code is automatically generated for each 
  296506             : //      terminal and non-terminal within the defined 
  296507             : //      grammar.  There is a simple way to change the 
  296508             : //      code to fix bugs etc.  See the ROSE README file
  296509             : //      for directions.
  296510             : 
  296511             : // tps: (02/22/2010): Adding DLL export requirements
  296512             : #include "rosedll.h"
  296513             : 
  296514             : // predeclarations for SgAggregateInitializer
  296515             : 
  296516             : /* #line 296517 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296517             : 
  296518             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  296519             : 
  296520             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  296521             : 
  296522             : #if 1
  296523             : // Class Definition for SgAggregateInitializer
  296524             : class ROSE_DLL_API SgAggregateInitializer  : public SgInitializer
  296525             :    {
  296526             :      public:
  296527             : 
  296528             : 
  296529             : /* #line 296530 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  296530             : 
  296531             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  296532             : // Start of memberFunctionString
  296533             : /* #line 1492 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  296534             : 
  296535             : /* #line 196 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  296536             : 
  296537             :           void append_initializer(SgExpression* what);
  296538             :        // void insert_initializer(const SgExpression::iterator & where, SgExpression* what);
  296539             :        // void insert_initializer(const SgExpressionPtrList::iterator & where, SgExpression* what);
  296540             : 
  296541             : 
  296542             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  296543             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  296544             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  296545             : #endif
  296546             : 
  296547             : #if 1
  296548             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  296549             :           bool get_requiresGlobalNameQualificationOnType() const;
  296550             :           void set_requiresGlobalNameQualificationOnType(bool requiresGlobalNameQualificationOnType);
  296551             : 
  296552             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  296553             :           int get_name_qualification_length_for_type() const;
  296554             :           void set_name_qualification_length_for_type(int name_qualification_length_for_type);
  296555             : 
  296556             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  296557             :           bool get_type_elaboration_required_for_type() const;
  296558             :           void set_type_elaboration_required_for_type(bool type_elaboration_required_for_type);
  296559             : 
  296560             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  296561             :           bool get_global_qualification_required_for_type() const;
  296562             :           void set_global_qualification_required_for_type(bool global_qualification_required_for_type);
  296563             : #else
  296564             :        // DQ (3/22/2018): The names of the data members have been renamed to support the name qualification support
  296565             :        // using the same support as for the SgConstructor initializer.  The name qualification that is supported for
  296566             :        // an aggregate initializer is just that for the C++11 specific type specifier that is sometime required
  296567             :        // (for an example of this see Cxx11_tests/test2018_47.C).  Since it is the type name that is qualified
  296568             :        // it does make sens to use the original names (e.g. name_qualification_length_for_type), but it would be
  296569             :        // inconsistant with the constructor initializer support, and eliminate the opportunity to reuse that
  296570             :        // supporting name qualification code.
  296571             : 
  296572             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  296573             :           int get_name_qualification_length() const;
  296574             :           void set_name_qualification_length(int name_qualification_length);
  296575             : 
  296576             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  296577             :           bool get_type_elaboration_required() const;
  296578             :           void set_type_elaboration_required(bool type_elaboration_required);
  296579             : 
  296580             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  296581             :           bool get_global_qualification_required() const;
  296582             :           void set_global_qualification_required(bool global_qualification_required);
  296583             : #endif
  296584             : 
  296585             : 
  296586             : 
  296587             : // End of memberFunctionString
  296588             : // Start of memberFunctionString
  296589             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  296590             : 
  296591             : // *** COMMON CODE SECTION BEGINS HERE ***
  296592             : 
  296593             :     public:
  296594             : 
  296595             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  296596             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  296597             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  296598             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  296599             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  296600             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  296601             : 
  296602             :       /*! \brief returns a string representing the class name */
  296603             :           virtual std::string class_name() const override;
  296604             : 
  296605             :       /*! \brief returns new style SageIII enum values */
  296606             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  296607             : 
  296608             :       /*! \brief static variant value */
  296609             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  296610             :        // static const VariantT static_variant = V_SgAggregateInitializer;
  296611             :           enum { static_variant = V_SgAggregateInitializer };
  296612             : 
  296613             :        /* the generated cast function */
  296614             :       /*! \brief Casts pointer from base class to derived class */
  296615             :           ROSE_DLL_API friend       SgAggregateInitializer* isSgAggregateInitializer(       SgNode * s );
  296616             : 
  296617             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  296618             :           ROSE_DLL_API friend const SgAggregateInitializer* isSgAggregateInitializer( const SgNode * s );
  296619             : 
  296620             :      // ******************************************
  296621             :      // * Memory Pool / New / Delete
  296622             :      // ******************************************
  296623             : 
  296624             :      public:
  296625             :           /// \private
  296626             :           static const unsigned pool_size; //
  296627             :           /// \private
  296628             :           static std::vector<unsigned char *> pools; //
  296629             :           /// \private
  296630             :           static SgAggregateInitializer * next_node; // 
  296631             : 
  296632             :           /// \private
  296633             :           static unsigned long initializeStorageClassArray(SgAggregateInitializerStorageClass *); //
  296634             : 
  296635             :           /// \private
  296636             :           static void clearMemoryPool(); //
  296637             :           static void deleteMemoryPool(); //
  296638             : 
  296639             :           /// \private
  296640             :           static void extendMemoryPoolForFileIO(); //
  296641             : 
  296642             :           /// \private
  296643             :           static SgAggregateInitializer * getPointerFromGlobalIndex(unsigned long); //
  296644             :           /// \private
  296645             :           static SgAggregateInitializer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  296646             : 
  296647             :           /// \private
  296648             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  296649             :           /// \private
  296650             :           static void resetValidFreepointers(); //
  296651             :           /// \private
  296652             :           static unsigned long getNumberOfLastValidPointer(); //
  296653             : 
  296654             : 
  296655             : #if defined(INLINE_FUNCTIONS)
  296656             :       /*! \brief returns pointer to newly allocated IR node */
  296657             :           inline void *operator new (size_t size);
  296658             : #else
  296659             :       /*! \brief returns pointer to newly allocated IR node */
  296660             :           void *operator new (size_t size);
  296661             : #endif
  296662             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  296663             :           void operator delete (void* pointer, size_t size);
  296664             : 
  296665             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  296666         198 :           void operator delete (void* pointer)
  296667             :              {
  296668             :             // This is the generated delete operator...
  296669         198 :                SgAggregateInitializer::operator delete (pointer,sizeof(SgAggregateInitializer));
  296670             :              }
  296671             : 
  296672             :       /*! \brief Returns the total number of IR nodes of this type */
  296673             :           static size_t numberOfNodes();
  296674             : 
  296675             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  296676             :           static size_t memoryUsage();
  296677             : 
  296678             :       // End of scope which started in IR nodes specific code 
  296679             :       /* */
  296680             : 
  296681             :       /* name Internal Functions
  296682             :           \brief Internal functions ... incomplete-documentation
  296683             : 
  296684             :           These functions have been made public as part of the design, but they are suggested for internal use 
  296685             :           or by particularly knowledgeable users for specialized tools or applications.
  296686             : 
  296687             :           \internal We could not make these private because they are required by user for special purposes. And 
  296688             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  296689             :          
  296690             :        */
  296691             : 
  296692             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  296693             :        // overridden in every class by *generated* implementation
  296694             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  296695             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  296696             :        // MS: 06/28/02 container of names of variables or container indices 
  296697             :        // used used in the traversal to access AST successor nodes
  296698             :        // overridden in every class by *generated* implementation
  296699             :       /*! \brief container of names of variables or container indices used used in the traversal
  296700             :           to access AST successor nodes overridden in every class by *generated* implementation */
  296701             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  296702             : 
  296703             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  296704             :        // than all the vector copies. The implementation for these functions is generated for each class.
  296705             :       /*! \brief return number of children in the traversal successor list */
  296706             :           virtual size_t get_numberOfTraversalSuccessors() override;
  296707             :       /*! \brief index-based access to traversal successors by index number */
  296708             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  296709             :       /*! \brief index-based access to traversal successors by child node */
  296710             :           virtual size_t get_childIndex(SgNode *child) override;
  296711             : 
  296712             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  296713             :        // MS: 08/16/2002 method for generating RTI information
  296714             :       /*! \brief return C++ Runtime-Time-Information */
  296715             :           virtual RTIReturnType roseRTI() override;
  296716             : #endif
  296717             :       /* */
  296718             : 
  296719             : 
  296720             : 
  296721             :       /* name Deprecated Functions
  296722             :           \brief Deprecated functions ... incomplete-documentation
  296723             : 
  296724             :           These functions have been deprecated from use.
  296725             :        */
  296726             :       /* */
  296727             : 
  296728             :       /*! returns a C style string (char*) representing the class name */
  296729             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  296730             : 
  296731             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  296732             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  296733             : #if 0
  296734             :       /*! returns old style Sage II enum values */
  296735             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  296736             :       /*! returns old style Sage II enum values */
  296737             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  296738             : #endif
  296739             :       /* */
  296740             : 
  296741             : 
  296742             : 
  296743             : 
  296744             :      public:
  296745             :       /* name Traversal Support Functions
  296746             :           \brief Traversal support functions ... incomplete-documentation
  296747             : 
  296748             :           These functions have been made public as part of the design, but they are suggested for internal use 
  296749             :           or by particularly knowledgable users for specialized tools or applications.
  296750             :        */
  296751             :       /* */
  296752             : 
  296753             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  296754             :        // (inferior to ROSE traversal mechanism, experimental).
  296755             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  296756             :        */
  296757             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  296758             : 
  296759             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  296760             :       /*! \brief support for the classic visitor pattern done in GoF */
  296761             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  296762             : 
  296763             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  296764             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  296765             :        */
  296766             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  296767             : 
  296768             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  296769             :        */
  296770             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  296771             : 
  296772             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  296773             :        // This traversal helps support internal tools that call static member functions.
  296774             :        // note: this function operates on the memory pools.
  296775             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  296776             :        */
  296777             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  296778             :       /* */
  296779             : 
  296780             : 
  296781             :      public:
  296782             :       /* name Memory Allocation Functions
  296783             :           \brief Memory allocations functions ... incomplete-documentation
  296784             : 
  296785             :           These functions have been made public as part of the design, but they are suggested for internal use 
  296786             :           or by particularly knowledgable users for specialized tools or applications.
  296787             :        */
  296788             :       /* */
  296789             : 
  296790             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  296791             : 
  296792             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  296793             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  296794             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  296795             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  296796             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  296797             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  296798             :           being used with the AST File I/O mechanism.
  296799             :        */
  296800             :           virtual bool isInMemoryPool() override;
  296801             : 
  296802             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  296803             : 
  296804             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  296805             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  296806             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  296807             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  296808             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  296809             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  296810             :           being used with the AST File I/O mechanism.
  296811             :        */
  296812             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  296813             : 
  296814             :       // DQ (4/30/2006): Modified to be a const function.
  296815             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  296816             : 
  296817             :           This functions is part of general support for many possible tools to operate 
  296818             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  296819             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  296820             :           less than the set of pointers used by the AST file I/O. This is part of
  296821             :           work implemented by Andreas, and support tools such as the AST graph generation.
  296822             : 
  296823             :           \warning This function can return unexpected data members and thus the 
  296824             :                    order and the number of elements is unpredicable and subject 
  296825             :                    to change.
  296826             : 
  296827             :           \returns STL vector of pairs of SgNode* and strings
  296828             :        */
  296829             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  296830             : 
  296831             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  296832             : 
  296833             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  296834             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  296835             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  296836             : 
  296837             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  296838             :                    and subject to change.
  296839             :        */
  296840             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  296841             : 
  296842             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  296843             : 
  296844             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  296845             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  296846             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  296847             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  296848             : 
  296849             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  296850             : 
  296851             :           \returns long
  296852             :        */
  296853             :           virtual long getChildIndex( SgNode* childNode ) const override;
  296854             : 
  296855             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  296856             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  296857             :       /* \brief Constructor for use by AST File I/O Mechanism
  296858             : 
  296859             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  296860             :           which obtained via fast binary file I/O from disk.
  296861             :        */
  296862             :        // SgAggregateInitializer( SgAggregateInitializerStorageClass& source );
  296863             : 
  296864             : 
  296865             : 
  296866             : 
  296867             : 
  296868             :  // JH (10/24/2005): methods added to support the ast file IO
  296869             :     private:
  296870             : 
  296871             :       /* name AST Memory Allocation Support Functions
  296872             :           \brief Memory allocations support....
  296873             : 
  296874             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  296875             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  296876             :           and support the AST File I/O Mechanism.
  296877             :        */
  296878             :       /* */
  296879             : 
  296880             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  296881             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  296882             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  296883             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  296884             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  296885             :           a correspinding one in the AST_FILE_IO class!
  296886             :        */
  296887             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  296888             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  296889             :       /* \brief Typedef used for low level memory access.
  296890             :        */
  296891             :        // typedef unsigned char* TestType;
  296892             : 
  296893             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  296894             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  296895             :       /* \brief Typedef used to hold memory addresses as values.
  296896             :        */
  296897             :        // typedef unsigned long  AddressType;
  296898             : 
  296899             : 
  296900             : 
  296901             :        // necessary, to have direct access to the p_freepointer and the private methods !
  296902             :       /*! \brief friend class declaration to support AST File I/O */
  296903             :           friend class AST_FILE_IO;
  296904             : 
  296905             :       /*! \brief friend class declaration to support AST File I/O */
  296906             :           friend class SgAggregateInitializerStorageClass;
  296907             : 
  296908             :       /*! \brief friend class declaration to support AST File I/O */
  296909             :           friend class AstSpecificDataManagingClass;
  296910             : 
  296911             :       /*! \brief friend class declaration to support AST File I/O */
  296912             :           friend class AstSpecificDataManagingClassStorageClass;
  296913             :     public:
  296914             :       /*! \brief IR node constructor to support AST File I/O */
  296915             :           SgAggregateInitializer( const SgAggregateInitializerStorageClass& source );
  296916             : 
  296917             :  // private: // JJW hack
  296918             :        /*
  296919             :           name AST Memory Allocation Support Variables
  296920             :           Memory allocations support variables 
  296921             : 
  296922             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  296923             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  296924             :           and support the AST File I/O Mechanism.
  296925             :        */
  296926             :       /* */
  296927             : 
  296928             :     public:
  296929             : 
  296930             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  296931             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  296932             :       // virtual SgNode* addRegExpAttribute();
  296933             :       /*! \brief Support for AST matching using regular expression.
  296934             : 
  296935             :           This support is incomplete and the subject of current research to define 
  296936             :           RegEx trees to support inexact matching.
  296937             :        */
  296938             :           SgAggregateInitializer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  296939             : 
  296940             : // *** COMMON CODE SECTION ENDS HERE ***
  296941             : 
  296942             : 
  296943             : // End of memberFunctionString
  296944             : // Start of memberFunctionString
  296945             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  296946             : 
  296947             :      // the generated cast function
  296948             :      // friend ROSE_DLL_API SgAggregateInitializer* isSgAggregateInitializer ( SgNode* s );
  296949             : 
  296950             :           typedef SgInitializer base_node_type;
  296951             : 
  296952             : 
  296953             : // End of memberFunctionString
  296954             : // Start of memberFunctionString
  296955             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  296956             : 
  296957             :           SgType* get_type() const override;
  296958             : 
  296959             : 
  296960             : // End of memberFunctionString
  296961             : // Start of memberFunctionString
  296962             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  296963             : 
  296964             :           void post_construction_initialization() override;
  296965             : 
  296966             : 
  296967             : // End of memberFunctionString
  296968             : // Start of memberFunctionString
  296969             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  296970             : 
  296971             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  296972             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  296973             : 
  296974             : 
  296975             : // End of memberFunctionString
  296976             : 
  296977             :      public: 
  296978             :          SgExprListExp* get_initializers() const;
  296979             :          void set_initializers(SgExprListExp* initializers);
  296980             : 
  296981             :      public: 
  296982             :          SgType* get_expression_type() const;
  296983             :          void set_expression_type(SgType* expression_type);
  296984             : 
  296985             :      public: 
  296986             :          bool get_need_explicit_braces() const;
  296987             :          void set_need_explicit_braces(bool need_explicit_braces);
  296988             : 
  296989             :      public: 
  296990             :          bool get_uses_compound_literal() const;
  296991             :          void set_uses_compound_literal(bool uses_compound_literal);
  296992             : 
  296993             : 
  296994             : 
  296995             : 
  296996             : 
  296997             :      public: 
  296998             :          SgExpression* get_originalExpressionTree() const override /* (getDataAccessFunctionPrototypeString) */;
  296999             :          void set_originalExpressionTree(SgExpression* originalExpressionTree) override /* (getDataAccessFunctionPrototypeString) */;
  297000             : 
  297001             : 
  297002             :      public: 
  297003             :          virtual ~SgAggregateInitializer();
  297004             : 
  297005             : 
  297006             :      public: 
  297007             :          SgAggregateInitializer(Sg_File_Info* startOfConstruct , SgExprListExp* initializers = NULL, SgType* expression_type = NULL); 
  297008             :          SgAggregateInitializer(SgExprListExp* initializers, SgType* expression_type); 
  297009             : 
  297010             :     protected:
  297011             : // Start of memberFunctionString
  297012             : SgExprListExp* p_initializers;
  297013             :           
  297014             : // End of memberFunctionString
  297015             : // Start of memberFunctionString
  297016             : SgType* p_expression_type;
  297017             :           
  297018             : // End of memberFunctionString
  297019             : // Start of memberFunctionString
  297020             : bool p_need_explicit_braces;
  297021             :           
  297022             : // End of memberFunctionString
  297023             : // Start of memberFunctionString
  297024             : bool p_uses_compound_literal;
  297025             :           
  297026             : // End of memberFunctionString
  297027             : // Start of memberFunctionString
  297028             : bool p_requiresGlobalNameQualificationOnType;
  297029             :           
  297030             : // End of memberFunctionString
  297031             : // Start of memberFunctionString
  297032             : int p_name_qualification_length_for_type;
  297033             :           
  297034             : // End of memberFunctionString
  297035             : // Start of memberFunctionString
  297036             : bool p_type_elaboration_required_for_type;
  297037             :           
  297038             : // End of memberFunctionString
  297039             : // Start of memberFunctionString
  297040             : bool p_global_qualification_required_for_type;
  297041             :           
  297042             : // End of memberFunctionString
  297043             : // Start of memberFunctionString
  297044             : SgExpression* p_originalExpressionTree;
  297045             :           
  297046             : // End of memberFunctionString
  297047             : 
  297048             :     friend struct Rose::Traits::generated::describe_node_t<SgAggregateInitializer>;
  297049             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, SgExprListExp*,&SgAggregateInitializer::p_initializers>;
  297050             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, SgType*,&SgAggregateInitializer::p_expression_type>;
  297051             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, bool,&SgAggregateInitializer::p_need_explicit_braces>;
  297052             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, bool,&SgAggregateInitializer::p_uses_compound_literal>;
  297053             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, bool,&SgAggregateInitializer::p_requiresGlobalNameQualificationOnType>;
  297054             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, int,&SgAggregateInitializer::p_name_qualification_length_for_type>;
  297055             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, bool,&SgAggregateInitializer::p_type_elaboration_required_for_type>;
  297056             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, bool,&SgAggregateInitializer::p_global_qualification_required_for_type>;
  297057             :     friend struct Rose::Traits::generated::describe_field_t<SgAggregateInitializer, SgExpression*,&SgAggregateInitializer::p_originalExpressionTree>;
  297058             : 
  297059             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297060             : 
  297061             : 
  297062             :    };
  297063             : #endif
  297064             : 
  297065             : // postdeclarations for SgAggregateInitializer
  297066             : 
  297067             : /* #line 297068 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297068             : 
  297069             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  297070             : 
  297071             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297072             : 
  297073             : 
  297074             : /* #line 297075 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297075             : 
  297076             : 
  297077             : 
  297078             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297079             : 
  297080             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  297081             : //      This code is automatically generated for each 
  297082             : //      terminal and non-terminal within the defined 
  297083             : //      grammar.  There is a simple way to change the 
  297084             : //      code to fix bugs etc.  See the ROSE README file
  297085             : //      for directions.
  297086             : 
  297087             : // tps: (02/22/2010): Adding DLL export requirements
  297088             : #include "rosedll.h"
  297089             : 
  297090             : // predeclarations for SgCompoundInitializer
  297091             : 
  297092             : /* #line 297093 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297093             : 
  297094             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  297095             : 
  297096             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297097             : 
  297098             : #if 1
  297099             : // Class Definition for SgCompoundInitializer
  297100             : class ROSE_DLL_API SgCompoundInitializer  : public SgInitializer
  297101             :    {
  297102             :      public:
  297103             : 
  297104             : 
  297105             : /* #line 297106 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297106             : 
  297107             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  297108             : // Start of memberFunctionString
  297109             : /* #line 1539 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  297110             : 
  297111             : /* #line 196 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  297112             : 
  297113             :           void append_initializer(SgExpression* what);
  297114             :        // void insert_initializer(const SgExpression::iterator & where, SgExpression* what);
  297115             :        // void insert_initializer(const SgExpressionPtrList::iterator & where, SgExpression* what);
  297116             : 
  297117             : 
  297118             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  297119             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  297120             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  297121             : #endif
  297122             : 
  297123             : 
  297124             : 
  297125             : // End of memberFunctionString
  297126             : // Start of memberFunctionString
  297127             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  297128             : 
  297129             : // *** COMMON CODE SECTION BEGINS HERE ***
  297130             : 
  297131             :     public:
  297132             : 
  297133             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  297134             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  297135             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  297136             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  297137             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  297138             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  297139             : 
  297140             :       /*! \brief returns a string representing the class name */
  297141             :           virtual std::string class_name() const override;
  297142             : 
  297143             :       /*! \brief returns new style SageIII enum values */
  297144             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  297145             : 
  297146             :       /*! \brief static variant value */
  297147             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  297148             :        // static const VariantT static_variant = V_SgCompoundInitializer;
  297149             :           enum { static_variant = V_SgCompoundInitializer };
  297150             : 
  297151             :        /* the generated cast function */
  297152             :       /*! \brief Casts pointer from base class to derived class */
  297153             :           ROSE_DLL_API friend       SgCompoundInitializer* isSgCompoundInitializer(       SgNode * s );
  297154             : 
  297155             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  297156             :           ROSE_DLL_API friend const SgCompoundInitializer* isSgCompoundInitializer( const SgNode * s );
  297157             : 
  297158             :      // ******************************************
  297159             :      // * Memory Pool / New / Delete
  297160             :      // ******************************************
  297161             : 
  297162             :      public:
  297163             :           /// \private
  297164             :           static const unsigned pool_size; //
  297165             :           /// \private
  297166             :           static std::vector<unsigned char *> pools; //
  297167             :           /// \private
  297168             :           static SgCompoundInitializer * next_node; // 
  297169             : 
  297170             :           /// \private
  297171             :           static unsigned long initializeStorageClassArray(SgCompoundInitializerStorageClass *); //
  297172             : 
  297173             :           /// \private
  297174             :           static void clearMemoryPool(); //
  297175             :           static void deleteMemoryPool(); //
  297176             : 
  297177             :           /// \private
  297178             :           static void extendMemoryPoolForFileIO(); //
  297179             : 
  297180             :           /// \private
  297181             :           static SgCompoundInitializer * getPointerFromGlobalIndex(unsigned long); //
  297182             :           /// \private
  297183             :           static SgCompoundInitializer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  297184             : 
  297185             :           /// \private
  297186             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  297187             :           /// \private
  297188             :           static void resetValidFreepointers(); //
  297189             :           /// \private
  297190             :           static unsigned long getNumberOfLastValidPointer(); //
  297191             : 
  297192             : 
  297193             : #if defined(INLINE_FUNCTIONS)
  297194             :       /*! \brief returns pointer to newly allocated IR node */
  297195             :           inline void *operator new (size_t size);
  297196             : #else
  297197             :       /*! \brief returns pointer to newly allocated IR node */
  297198             :           void *operator new (size_t size);
  297199             : #endif
  297200             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  297201             :           void operator delete (void* pointer, size_t size);
  297202             : 
  297203             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  297204           0 :           void operator delete (void* pointer)
  297205             :              {
  297206             :             // This is the generated delete operator...
  297207           0 :                SgCompoundInitializer::operator delete (pointer,sizeof(SgCompoundInitializer));
  297208             :              }
  297209             : 
  297210             :       /*! \brief Returns the total number of IR nodes of this type */
  297211             :           static size_t numberOfNodes();
  297212             : 
  297213             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  297214             :           static size_t memoryUsage();
  297215             : 
  297216             :       // End of scope which started in IR nodes specific code 
  297217             :       /* */
  297218             : 
  297219             :       /* name Internal Functions
  297220             :           \brief Internal functions ... incomplete-documentation
  297221             : 
  297222             :           These functions have been made public as part of the design, but they are suggested for internal use 
  297223             :           or by particularly knowledgeable users for specialized tools or applications.
  297224             : 
  297225             :           \internal We could not make these private because they are required by user for special purposes. And 
  297226             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  297227             :          
  297228             :        */
  297229             : 
  297230             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  297231             :        // overridden in every class by *generated* implementation
  297232             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  297233             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  297234             :        // MS: 06/28/02 container of names of variables or container indices 
  297235             :        // used used in the traversal to access AST successor nodes
  297236             :        // overridden in every class by *generated* implementation
  297237             :       /*! \brief container of names of variables or container indices used used in the traversal
  297238             :           to access AST successor nodes overridden in every class by *generated* implementation */
  297239             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  297240             : 
  297241             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  297242             :        // than all the vector copies. The implementation for these functions is generated for each class.
  297243             :       /*! \brief return number of children in the traversal successor list */
  297244             :           virtual size_t get_numberOfTraversalSuccessors() override;
  297245             :       /*! \brief index-based access to traversal successors by index number */
  297246             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  297247             :       /*! \brief index-based access to traversal successors by child node */
  297248             :           virtual size_t get_childIndex(SgNode *child) override;
  297249             : 
  297250             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  297251             :        // MS: 08/16/2002 method for generating RTI information
  297252             :       /*! \brief return C++ Runtime-Time-Information */
  297253             :           virtual RTIReturnType roseRTI() override;
  297254             : #endif
  297255             :       /* */
  297256             : 
  297257             : 
  297258             : 
  297259             :       /* name Deprecated Functions
  297260             :           \brief Deprecated functions ... incomplete-documentation
  297261             : 
  297262             :           These functions have been deprecated from use.
  297263             :        */
  297264             :       /* */
  297265             : 
  297266             :       /*! returns a C style string (char*) representing the class name */
  297267             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  297268             : 
  297269             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  297270             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  297271             : #if 0
  297272             :       /*! returns old style Sage II enum values */
  297273             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  297274             :       /*! returns old style Sage II enum values */
  297275             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  297276             : #endif
  297277             :       /* */
  297278             : 
  297279             : 
  297280             : 
  297281             : 
  297282             :      public:
  297283             :       /* name Traversal Support Functions
  297284             :           \brief Traversal support functions ... incomplete-documentation
  297285             : 
  297286             :           These functions have been made public as part of the design, but they are suggested for internal use 
  297287             :           or by particularly knowledgable users for specialized tools or applications.
  297288             :        */
  297289             :       /* */
  297290             : 
  297291             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  297292             :        // (inferior to ROSE traversal mechanism, experimental).
  297293             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  297294             :        */
  297295             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  297296             : 
  297297             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  297298             :       /*! \brief support for the classic visitor pattern done in GoF */
  297299             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  297300             : 
  297301             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  297302             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  297303             :        */
  297304             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  297305             : 
  297306             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  297307             :        */
  297308             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  297309             : 
  297310             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  297311             :        // This traversal helps support internal tools that call static member functions.
  297312             :        // note: this function operates on the memory pools.
  297313             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  297314             :        */
  297315             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  297316             :       /* */
  297317             : 
  297318             : 
  297319             :      public:
  297320             :       /* name Memory Allocation Functions
  297321             :           \brief Memory allocations functions ... incomplete-documentation
  297322             : 
  297323             :           These functions have been made public as part of the design, but they are suggested for internal use 
  297324             :           or by particularly knowledgable users for specialized tools or applications.
  297325             :        */
  297326             :       /* */
  297327             : 
  297328             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  297329             : 
  297330             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  297331             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  297332             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  297333             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  297334             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  297335             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  297336             :           being used with the AST File I/O mechanism.
  297337             :        */
  297338             :           virtual bool isInMemoryPool() override;
  297339             : 
  297340             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  297341             : 
  297342             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  297343             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  297344             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  297345             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  297346             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  297347             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  297348             :           being used with the AST File I/O mechanism.
  297349             :        */
  297350             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  297351             : 
  297352             :       // DQ (4/30/2006): Modified to be a const function.
  297353             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  297354             : 
  297355             :           This functions is part of general support for many possible tools to operate 
  297356             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  297357             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  297358             :           less than the set of pointers used by the AST file I/O. This is part of
  297359             :           work implemented by Andreas, and support tools such as the AST graph generation.
  297360             : 
  297361             :           \warning This function can return unexpected data members and thus the 
  297362             :                    order and the number of elements is unpredicable and subject 
  297363             :                    to change.
  297364             : 
  297365             :           \returns STL vector of pairs of SgNode* and strings
  297366             :        */
  297367             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  297368             : 
  297369             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  297370             : 
  297371             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  297372             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  297373             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  297374             : 
  297375             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  297376             :                    and subject to change.
  297377             :        */
  297378             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  297379             : 
  297380             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  297381             : 
  297382             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  297383             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  297384             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  297385             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  297386             : 
  297387             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  297388             : 
  297389             :           \returns long
  297390             :        */
  297391             :           virtual long getChildIndex( SgNode* childNode ) const override;
  297392             : 
  297393             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  297394             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  297395             :       /* \brief Constructor for use by AST File I/O Mechanism
  297396             : 
  297397             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  297398             :           which obtained via fast binary file I/O from disk.
  297399             :        */
  297400             :        // SgCompoundInitializer( SgCompoundInitializerStorageClass& source );
  297401             : 
  297402             : 
  297403             : 
  297404             : 
  297405             : 
  297406             :  // JH (10/24/2005): methods added to support the ast file IO
  297407             :     private:
  297408             : 
  297409             :       /* name AST Memory Allocation Support Functions
  297410             :           \brief Memory allocations support....
  297411             : 
  297412             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  297413             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  297414             :           and support the AST File I/O Mechanism.
  297415             :        */
  297416             :       /* */
  297417             : 
  297418             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  297419             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  297420             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  297421             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  297422             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  297423             :           a correspinding one in the AST_FILE_IO class!
  297424             :        */
  297425             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  297426             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  297427             :       /* \brief Typedef used for low level memory access.
  297428             :        */
  297429             :        // typedef unsigned char* TestType;
  297430             : 
  297431             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  297432             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  297433             :       /* \brief Typedef used to hold memory addresses as values.
  297434             :        */
  297435             :        // typedef unsigned long  AddressType;
  297436             : 
  297437             : 
  297438             : 
  297439             :        // necessary, to have direct access to the p_freepointer and the private methods !
  297440             :       /*! \brief friend class declaration to support AST File I/O */
  297441             :           friend class AST_FILE_IO;
  297442             : 
  297443             :       /*! \brief friend class declaration to support AST File I/O */
  297444             :           friend class SgCompoundInitializerStorageClass;
  297445             : 
  297446             :       /*! \brief friend class declaration to support AST File I/O */
  297447             :           friend class AstSpecificDataManagingClass;
  297448             : 
  297449             :       /*! \brief friend class declaration to support AST File I/O */
  297450             :           friend class AstSpecificDataManagingClassStorageClass;
  297451             :     public:
  297452             :       /*! \brief IR node constructor to support AST File I/O */
  297453             :           SgCompoundInitializer( const SgCompoundInitializerStorageClass& source );
  297454             : 
  297455             :  // private: // JJW hack
  297456             :        /*
  297457             :           name AST Memory Allocation Support Variables
  297458             :           Memory allocations support variables 
  297459             : 
  297460             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  297461             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  297462             :           and support the AST File I/O Mechanism.
  297463             :        */
  297464             :       /* */
  297465             : 
  297466             :     public:
  297467             : 
  297468             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  297469             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  297470             :       // virtual SgNode* addRegExpAttribute();
  297471             :       /*! \brief Support for AST matching using regular expression.
  297472             : 
  297473             :           This support is incomplete and the subject of current research to define 
  297474             :           RegEx trees to support inexact matching.
  297475             :        */
  297476             :           SgCompoundInitializer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  297477             : 
  297478             : // *** COMMON CODE SECTION ENDS HERE ***
  297479             : 
  297480             : 
  297481             : // End of memberFunctionString
  297482             : // Start of memberFunctionString
  297483             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  297484             : 
  297485             :      // the generated cast function
  297486             :      // friend ROSE_DLL_API SgCompoundInitializer* isSgCompoundInitializer ( SgNode* s );
  297487             : 
  297488             :           typedef SgInitializer base_node_type;
  297489             : 
  297490             : 
  297491             : // End of memberFunctionString
  297492             : // Start of memberFunctionString
  297493             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  297494             : 
  297495             :           SgType* get_type() const override;
  297496             : 
  297497             : 
  297498             : // End of memberFunctionString
  297499             : // Start of memberFunctionString
  297500             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  297501             : 
  297502             :           void post_construction_initialization() override;
  297503             : 
  297504             : 
  297505             : // End of memberFunctionString
  297506             : // Start of memberFunctionString
  297507             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  297508             : 
  297509             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  297510             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  297511             : 
  297512             : 
  297513             : // End of memberFunctionString
  297514             : 
  297515             :      public: 
  297516             :          SgExprListExp* get_initializers() const;
  297517             :          void set_initializers(SgExprListExp* initializers);
  297518             : 
  297519             :      public: 
  297520             :          SgType* get_expression_type() const;
  297521             :          void set_expression_type(SgType* expression_type);
  297522             : 
  297523             : 
  297524             :      public: 
  297525             :          virtual ~SgCompoundInitializer();
  297526             : 
  297527             : 
  297528             :      public: 
  297529             :          SgCompoundInitializer(Sg_File_Info* startOfConstruct , SgExprListExp* initializers = NULL, SgType* expression_type = NULL); 
  297530             :          SgCompoundInitializer(SgExprListExp* initializers, SgType* expression_type); 
  297531             : 
  297532             :     protected:
  297533             : // Start of memberFunctionString
  297534             : SgExprListExp* p_initializers;
  297535             :           
  297536             : // End of memberFunctionString
  297537             : // Start of memberFunctionString
  297538             : SgType* p_expression_type;
  297539             :           
  297540             : // End of memberFunctionString
  297541             : 
  297542             :     friend struct Rose::Traits::generated::describe_node_t<SgCompoundInitializer>;
  297543             :     friend struct Rose::Traits::generated::describe_field_t<SgCompoundInitializer, SgExprListExp*,&SgCompoundInitializer::p_initializers>;
  297544             :     friend struct Rose::Traits::generated::describe_field_t<SgCompoundInitializer, SgType*,&SgCompoundInitializer::p_expression_type>;
  297545             : 
  297546             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297547             : 
  297548             : 
  297549             :    };
  297550             : #endif
  297551             : 
  297552             : // postdeclarations for SgCompoundInitializer
  297553             : 
  297554             : /* #line 297555 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297555             : 
  297556             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  297557             : 
  297558             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297559             : 
  297560             : 
  297561             : /* #line 297562 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297562             : 
  297563             : 
  297564             : 
  297565             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297566             : 
  297567             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  297568             : //      This code is automatically generated for each 
  297569             : //      terminal and non-terminal within the defined 
  297570             : //      grammar.  There is a simple way to change the 
  297571             : //      code to fix bugs etc.  See the ROSE README file
  297572             : //      for directions.
  297573             : 
  297574             : // tps: (02/22/2010): Adding DLL export requirements
  297575             : #include "rosedll.h"
  297576             : 
  297577             : // predeclarations for SgConstructorInitializer
  297578             : 
  297579             : /* #line 297580 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297580             : 
  297581             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  297582             : 
  297583             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  297584             : 
  297585             : #if 1
  297586             : // Class Definition for SgConstructorInitializer
  297587             : class ROSE_DLL_API SgConstructorInitializer  : public SgInitializer
  297588             :    {
  297589             :      public:
  297590             : 
  297591             : 
  297592             : /* #line 297593 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  297593             : 
  297594             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  297595             : // Start of memberFunctionString
  297596             : /* #line 1548 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  297597             : 
  297598             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  297599             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  297600             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  297601             :           virtual unsigned int cfgIndexForEnd() const override;
  297602             : #endif
  297603             : 
  297604             :       /*! \brief Get the SgClassDeclaration associated with this constructor call.
  297605             : 
  297606             :           Note that in rare cases where the constructor is associated with a primative type
  297607             :           this function will return a NULL pointer.  In which case p_expression_type is a
  297608             :           pointer to a SgType which is not a SgClassType, but is a valid pointer to a
  297609             :           primative type.
  297610             : 
  297611             :           \internal if p_declaration is NULL then p_associated_class_unknown is true.
  297612             :        */
  297613             :           SgClassDeclaration* get_class_decl () const;
  297614             : 
  297615             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  297616             :           int get_name_qualification_length() const override;
  297617             :           void set_name_qualification_length(int name_qualification_length) override;
  297618             : 
  297619             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  297620             :           bool get_type_elaboration_required() const override;
  297621             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  297622             : 
  297623             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  297624             :           bool get_global_qualification_required() const override;
  297625             :           void set_global_qualification_required(bool global_qualification_required) override;
  297626             : 
  297627             : 
  297628             : 
  297629             : // End of memberFunctionString
  297630             : // Start of memberFunctionString
  297631             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  297632             : 
  297633             : // *** COMMON CODE SECTION BEGINS HERE ***
  297634             : 
  297635             :     public:
  297636             : 
  297637             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  297638             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  297639             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  297640             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  297641             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  297642             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  297643             : 
  297644             :       /*! \brief returns a string representing the class name */
  297645             :           virtual std::string class_name() const override;
  297646             : 
  297647             :       /*! \brief returns new style SageIII enum values */
  297648             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  297649             : 
  297650             :       /*! \brief static variant value */
  297651             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  297652             :        // static const VariantT static_variant = V_SgConstructorInitializer;
  297653             :           enum { static_variant = V_SgConstructorInitializer };
  297654             : 
  297655             :        /* the generated cast function */
  297656             :       /*! \brief Casts pointer from base class to derived class */
  297657             :           ROSE_DLL_API friend       SgConstructorInitializer* isSgConstructorInitializer(       SgNode * s );
  297658             : 
  297659             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  297660             :           ROSE_DLL_API friend const SgConstructorInitializer* isSgConstructorInitializer( const SgNode * s );
  297661             : 
  297662             :      // ******************************************
  297663             :      // * Memory Pool / New / Delete
  297664             :      // ******************************************
  297665             : 
  297666             :      public:
  297667             :           /// \private
  297668             :           static const unsigned pool_size; //
  297669             :           /// \private
  297670             :           static std::vector<unsigned char *> pools; //
  297671             :           /// \private
  297672             :           static SgConstructorInitializer * next_node; // 
  297673             : 
  297674             :           /// \private
  297675             :           static unsigned long initializeStorageClassArray(SgConstructorInitializerStorageClass *); //
  297676             : 
  297677             :           /// \private
  297678             :           static void clearMemoryPool(); //
  297679             :           static void deleteMemoryPool(); //
  297680             : 
  297681             :           /// \private
  297682             :           static void extendMemoryPoolForFileIO(); //
  297683             : 
  297684             :           /// \private
  297685             :           static SgConstructorInitializer * getPointerFromGlobalIndex(unsigned long); //
  297686             :           /// \private
  297687             :           static SgConstructorInitializer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  297688             : 
  297689             :           /// \private
  297690             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  297691             :           /// \private
  297692             :           static void resetValidFreepointers(); //
  297693             :           /// \private
  297694             :           static unsigned long getNumberOfLastValidPointer(); //
  297695             : 
  297696             : 
  297697             : #if defined(INLINE_FUNCTIONS)
  297698             :       /*! \brief returns pointer to newly allocated IR node */
  297699             :           inline void *operator new (size_t size);
  297700             : #else
  297701             :       /*! \brief returns pointer to newly allocated IR node */
  297702             :           void *operator new (size_t size);
  297703             : #endif
  297704             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  297705             :           void operator delete (void* pointer, size_t size);
  297706             : 
  297707             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  297708        1027 :           void operator delete (void* pointer)
  297709             :              {
  297710             :             // This is the generated delete operator...
  297711        1027 :                SgConstructorInitializer::operator delete (pointer,sizeof(SgConstructorInitializer));
  297712             :              }
  297713             : 
  297714             :       /*! \brief Returns the total number of IR nodes of this type */
  297715             :           static size_t numberOfNodes();
  297716             : 
  297717             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  297718             :           static size_t memoryUsage();
  297719             : 
  297720             :       // End of scope which started in IR nodes specific code 
  297721             :       /* */
  297722             : 
  297723             :       /* name Internal Functions
  297724             :           \brief Internal functions ... incomplete-documentation
  297725             : 
  297726             :           These functions have been made public as part of the design, but they are suggested for internal use 
  297727             :           or by particularly knowledgeable users for specialized tools or applications.
  297728             : 
  297729             :           \internal We could not make these private because they are required by user for special purposes. And 
  297730             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  297731             :          
  297732             :        */
  297733             : 
  297734             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  297735             :        // overridden in every class by *generated* implementation
  297736             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  297737             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  297738             :        // MS: 06/28/02 container of names of variables or container indices 
  297739             :        // used used in the traversal to access AST successor nodes
  297740             :        // overridden in every class by *generated* implementation
  297741             :       /*! \brief container of names of variables or container indices used used in the traversal
  297742             :           to access AST successor nodes overridden in every class by *generated* implementation */
  297743             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  297744             : 
  297745             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  297746             :        // than all the vector copies. The implementation for these functions is generated for each class.
  297747             :       /*! \brief return number of children in the traversal successor list */
  297748             :           virtual size_t get_numberOfTraversalSuccessors() override;
  297749             :       /*! \brief index-based access to traversal successors by index number */
  297750             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  297751             :       /*! \brief index-based access to traversal successors by child node */
  297752             :           virtual size_t get_childIndex(SgNode *child) override;
  297753             : 
  297754             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  297755             :        // MS: 08/16/2002 method for generating RTI information
  297756             :       /*! \brief return C++ Runtime-Time-Information */
  297757             :           virtual RTIReturnType roseRTI() override;
  297758             : #endif
  297759             :       /* */
  297760             : 
  297761             : 
  297762             : 
  297763             :       /* name Deprecated Functions
  297764             :           \brief Deprecated functions ... incomplete-documentation
  297765             : 
  297766             :           These functions have been deprecated from use.
  297767             :        */
  297768             :       /* */
  297769             : 
  297770             :       /*! returns a C style string (char*) representing the class name */
  297771             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  297772             : 
  297773             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  297774             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  297775             : #if 0
  297776             :       /*! returns old style Sage II enum values */
  297777             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  297778             :       /*! returns old style Sage II enum values */
  297779             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  297780             : #endif
  297781             :       /* */
  297782             : 
  297783             : 
  297784             : 
  297785             : 
  297786             :      public:
  297787             :       /* name Traversal Support Functions
  297788             :           \brief Traversal support functions ... incomplete-documentation
  297789             : 
  297790             :           These functions have been made public as part of the design, but they are suggested for internal use 
  297791             :           or by particularly knowledgable users for specialized tools or applications.
  297792             :        */
  297793             :       /* */
  297794             : 
  297795             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  297796             :        // (inferior to ROSE traversal mechanism, experimental).
  297797             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  297798             :        */
  297799             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  297800             : 
  297801             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  297802             :       /*! \brief support for the classic visitor pattern done in GoF */
  297803             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  297804             : 
  297805             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  297806             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  297807             :        */
  297808             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  297809             : 
  297810             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  297811             :        */
  297812             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  297813             : 
  297814             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  297815             :        // This traversal helps support internal tools that call static member functions.
  297816             :        // note: this function operates on the memory pools.
  297817             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  297818             :        */
  297819             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  297820             :       /* */
  297821             : 
  297822             : 
  297823             :      public:
  297824             :       /* name Memory Allocation Functions
  297825             :           \brief Memory allocations functions ... incomplete-documentation
  297826             : 
  297827             :           These functions have been made public as part of the design, but they are suggested for internal use 
  297828             :           or by particularly knowledgable users for specialized tools or applications.
  297829             :        */
  297830             :       /* */
  297831             : 
  297832             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  297833             : 
  297834             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  297835             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  297836             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  297837             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  297838             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  297839             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  297840             :           being used with the AST File I/O mechanism.
  297841             :        */
  297842             :           virtual bool isInMemoryPool() override;
  297843             : 
  297844             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  297845             : 
  297846             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  297847             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  297848             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  297849             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  297850             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  297851             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  297852             :           being used with the AST File I/O mechanism.
  297853             :        */
  297854             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  297855             : 
  297856             :       // DQ (4/30/2006): Modified to be a const function.
  297857             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  297858             : 
  297859             :           This functions is part of general support for many possible tools to operate 
  297860             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  297861             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  297862             :           less than the set of pointers used by the AST file I/O. This is part of
  297863             :           work implemented by Andreas, and support tools such as the AST graph generation.
  297864             : 
  297865             :           \warning This function can return unexpected data members and thus the 
  297866             :                    order and the number of elements is unpredicable and subject 
  297867             :                    to change.
  297868             : 
  297869             :           \returns STL vector of pairs of SgNode* and strings
  297870             :        */
  297871             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  297872             : 
  297873             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  297874             : 
  297875             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  297876             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  297877             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  297878             : 
  297879             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  297880             :                    and subject to change.
  297881             :        */
  297882             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  297883             : 
  297884             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  297885             : 
  297886             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  297887             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  297888             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  297889             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  297890             : 
  297891             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  297892             : 
  297893             :           \returns long
  297894             :        */
  297895             :           virtual long getChildIndex( SgNode* childNode ) const override;
  297896             : 
  297897             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  297898             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  297899             :       /* \brief Constructor for use by AST File I/O Mechanism
  297900             : 
  297901             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  297902             :           which obtained via fast binary file I/O from disk.
  297903             :        */
  297904             :        // SgConstructorInitializer( SgConstructorInitializerStorageClass& source );
  297905             : 
  297906             : 
  297907             : 
  297908             : 
  297909             : 
  297910             :  // JH (10/24/2005): methods added to support the ast file IO
  297911             :     private:
  297912             : 
  297913             :       /* name AST Memory Allocation Support Functions
  297914             :           \brief Memory allocations support....
  297915             : 
  297916             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  297917             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  297918             :           and support the AST File I/O Mechanism.
  297919             :        */
  297920             :       /* */
  297921             : 
  297922             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  297923             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  297924             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  297925             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  297926             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  297927             :           a correspinding one in the AST_FILE_IO class!
  297928             :        */
  297929             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  297930             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  297931             :       /* \brief Typedef used for low level memory access.
  297932             :        */
  297933             :        // typedef unsigned char* TestType;
  297934             : 
  297935             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  297936             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  297937             :       /* \brief Typedef used to hold memory addresses as values.
  297938             :        */
  297939             :        // typedef unsigned long  AddressType;
  297940             : 
  297941             : 
  297942             : 
  297943             :        // necessary, to have direct access to the p_freepointer and the private methods !
  297944             :       /*! \brief friend class declaration to support AST File I/O */
  297945             :           friend class AST_FILE_IO;
  297946             : 
  297947             :       /*! \brief friend class declaration to support AST File I/O */
  297948             :           friend class SgConstructorInitializerStorageClass;
  297949             : 
  297950             :       /*! \brief friend class declaration to support AST File I/O */
  297951             :           friend class AstSpecificDataManagingClass;
  297952             : 
  297953             :       /*! \brief friend class declaration to support AST File I/O */
  297954             :           friend class AstSpecificDataManagingClassStorageClass;
  297955             :     public:
  297956             :       /*! \brief IR node constructor to support AST File I/O */
  297957             :           SgConstructorInitializer( const SgConstructorInitializerStorageClass& source );
  297958             : 
  297959             :  // private: // JJW hack
  297960             :        /*
  297961             :           name AST Memory Allocation Support Variables
  297962             :           Memory allocations support variables 
  297963             : 
  297964             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  297965             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  297966             :           and support the AST File I/O Mechanism.
  297967             :        */
  297968             :       /* */
  297969             : 
  297970             :     public:
  297971             : 
  297972             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  297973             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  297974             :       // virtual SgNode* addRegExpAttribute();
  297975             :       /*! \brief Support for AST matching using regular expression.
  297976             : 
  297977             :           This support is incomplete and the subject of current research to define 
  297978             :           RegEx trees to support inexact matching.
  297979             :        */
  297980             :           SgConstructorInitializer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  297981             : 
  297982             : // *** COMMON CODE SECTION ENDS HERE ***
  297983             : 
  297984             : 
  297985             : // End of memberFunctionString
  297986             : // Start of memberFunctionString
  297987             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  297988             : 
  297989             :      // the generated cast function
  297990             :      // friend ROSE_DLL_API SgConstructorInitializer* isSgConstructorInitializer ( SgNode* s );
  297991             : 
  297992             :           typedef SgInitializer base_node_type;
  297993             : 
  297994             : 
  297995             : // End of memberFunctionString
  297996             : // Start of memberFunctionString
  297997             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  297998             : 
  297999             :           SgType* get_type() const override;
  298000             : 
  298001             : 
  298002             : // End of memberFunctionString
  298003             : // Start of memberFunctionString
  298004             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  298005             : 
  298006             :           void post_construction_initialization() override;
  298007             : 
  298008             : 
  298009             : // End of memberFunctionString
  298010             : // Start of memberFunctionString
  298011             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  298012             : 
  298013             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  298014             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  298015             : 
  298016             : 
  298017             : // End of memberFunctionString
  298018             : 
  298019             :      public: 
  298020             :          SgMemberFunctionDeclaration* get_declaration() const;
  298021             :          void set_declaration(SgMemberFunctionDeclaration* declaration);
  298022             : 
  298023             :      public: 
  298024             :          SgExprListExp* get_args() const;
  298025             :          void set_args(SgExprListExp* args);
  298026             : 
  298027             :      public: 
  298028             :          SgType* get_expression_type() const;
  298029             :          void set_expression_type(SgType* expression_type);
  298030             : 
  298031             :      public: 
  298032             :          bool get_need_name() const;
  298033             :          void set_need_name(bool need_name);
  298034             : 
  298035             :      public: 
  298036             :          bool get_need_qualifier() const;
  298037             :          void set_need_qualifier(bool need_qualifier);
  298038             : 
  298039             :      public: 
  298040             :          bool get_need_parenthesis_after_name() const;
  298041             :          void set_need_parenthesis_after_name(bool need_parenthesis_after_name);
  298042             : 
  298043             :      public: 
  298044             :          bool get_associated_class_unknown() const;
  298045             :          void set_associated_class_unknown(bool associated_class_unknown);
  298046             : 
  298047             : 
  298048             : 
  298049             : 
  298050             :      public: 
  298051             :          bool get_is_used_in_conditional() const;
  298052             :          void set_is_used_in_conditional(bool is_used_in_conditional);
  298053             : 
  298054             : 
  298055             :      public: 
  298056             :          virtual ~SgConstructorInitializer();
  298057             : 
  298058             : 
  298059             :      public: 
  298060             :          SgConstructorInitializer(Sg_File_Info* startOfConstruct , SgMemberFunctionDeclaration* declaration = NULL, SgExprListExp* args = NULL, SgType* expression_type = NULL, bool need_name = false, bool need_qualifier = false, bool need_parenthesis_after_name = false, bool associated_class_unknown = false); 
  298061             :          SgConstructorInitializer(SgMemberFunctionDeclaration* declaration, SgExprListExp* args, SgType* expression_type, bool need_name, bool need_qualifier, bool need_parenthesis_after_name, bool associated_class_unknown); 
  298062             : 
  298063             :     protected:
  298064             : // Start of memberFunctionString
  298065             : SgMemberFunctionDeclaration* p_declaration;
  298066             :           
  298067             : // End of memberFunctionString
  298068             : // Start of memberFunctionString
  298069             : SgExprListExp* p_args;
  298070             :           
  298071             : // End of memberFunctionString
  298072             : // Start of memberFunctionString
  298073             : SgType* p_expression_type;
  298074             :           
  298075             : // End of memberFunctionString
  298076             : // Start of memberFunctionString
  298077             : bool p_need_name;
  298078             :           
  298079             : // End of memberFunctionString
  298080             : // Start of memberFunctionString
  298081             : bool p_need_qualifier;
  298082             :           
  298083             : // End of memberFunctionString
  298084             : // Start of memberFunctionString
  298085             : bool p_need_parenthesis_after_name;
  298086             :           
  298087             : // End of memberFunctionString
  298088             : // Start of memberFunctionString
  298089             : bool p_associated_class_unknown;
  298090             :           
  298091             : // End of memberFunctionString
  298092             : // Start of memberFunctionString
  298093             : int p_name_qualification_length;
  298094             :           
  298095             : // End of memberFunctionString
  298096             : // Start of memberFunctionString
  298097             : bool p_type_elaboration_required;
  298098             :           
  298099             : // End of memberFunctionString
  298100             : // Start of memberFunctionString
  298101             : bool p_global_qualification_required;
  298102             :           
  298103             : // End of memberFunctionString
  298104             : // Start of memberFunctionString
  298105             : bool p_is_used_in_conditional;
  298106             :           
  298107             : // End of memberFunctionString
  298108             : 
  298109             :     friend struct Rose::Traits::generated::describe_node_t<SgConstructorInitializer>;
  298110             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, SgMemberFunctionDeclaration*,&SgConstructorInitializer::p_declaration>;
  298111             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, SgExprListExp*,&SgConstructorInitializer::p_args>;
  298112             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, SgType*,&SgConstructorInitializer::p_expression_type>;
  298113             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, bool,&SgConstructorInitializer::p_need_name>;
  298114             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, bool,&SgConstructorInitializer::p_need_qualifier>;
  298115             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, bool,&SgConstructorInitializer::p_need_parenthesis_after_name>;
  298116             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, bool,&SgConstructorInitializer::p_associated_class_unknown>;
  298117             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, int,&SgConstructorInitializer::p_name_qualification_length>;
  298118             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, bool,&SgConstructorInitializer::p_type_elaboration_required>;
  298119             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, bool,&SgConstructorInitializer::p_global_qualification_required>;
  298120             :     friend struct Rose::Traits::generated::describe_field_t<SgConstructorInitializer, bool,&SgConstructorInitializer::p_is_used_in_conditional>;
  298121             : 
  298122             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298123             : 
  298124             : 
  298125             :    };
  298126             : #endif
  298127             : 
  298128             : // postdeclarations for SgConstructorInitializer
  298129             : 
  298130             : /* #line 298131 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298131             : 
  298132             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  298133             : 
  298134             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298135             : 
  298136             : 
  298137             : /* #line 298138 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298138             : 
  298139             : 
  298140             : 
  298141             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298142             : 
  298143             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  298144             : //      This code is automatically generated for each 
  298145             : //      terminal and non-terminal within the defined 
  298146             : //      grammar.  There is a simple way to change the 
  298147             : //      code to fix bugs etc.  See the ROSE README file
  298148             : //      for directions.
  298149             : 
  298150             : // tps: (02/22/2010): Adding DLL export requirements
  298151             : #include "rosedll.h"
  298152             : 
  298153             : // predeclarations for SgAssignInitializer
  298154             : 
  298155             : /* #line 298156 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298156             : 
  298157             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  298158             : 
  298159             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298160             : 
  298161             : #if 1
  298162             : // Class Definition for SgAssignInitializer
  298163             : class ROSE_DLL_API SgAssignInitializer  : public SgInitializer
  298164             :    {
  298165             :      public:
  298166             : 
  298167             : 
  298168             : /* #line 298169 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298169             : 
  298170             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  298171             : // Start of memberFunctionString
  298172             : /* #line 1581 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  298173             : 
  298174             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  298175             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  298176             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  298177             : #endif
  298178             : 
  298179             :           SgExpression * get_operand() const;
  298180             :           void set_operand(SgExpression * exp);
  298181             : 
  298182             :        // get lvalue
  298183             :           virtual bool isLValue() const override;
  298184             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  298185             : 
  298186             : 
  298187             : 
  298188             : // End of memberFunctionString
  298189             : // Start of memberFunctionString
  298190             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  298191             : 
  298192             : // *** COMMON CODE SECTION BEGINS HERE ***
  298193             : 
  298194             :     public:
  298195             : 
  298196             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  298197             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  298198             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  298199             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  298200             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  298201             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  298202             : 
  298203             :       /*! \brief returns a string representing the class name */
  298204             :           virtual std::string class_name() const override;
  298205             : 
  298206             :       /*! \brief returns new style SageIII enum values */
  298207             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  298208             : 
  298209             :       /*! \brief static variant value */
  298210             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  298211             :        // static const VariantT static_variant = V_SgAssignInitializer;
  298212             :           enum { static_variant = V_SgAssignInitializer };
  298213             : 
  298214             :        /* the generated cast function */
  298215             :       /*! \brief Casts pointer from base class to derived class */
  298216             :           ROSE_DLL_API friend       SgAssignInitializer* isSgAssignInitializer(       SgNode * s );
  298217             : 
  298218             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  298219             :           ROSE_DLL_API friend const SgAssignInitializer* isSgAssignInitializer( const SgNode * s );
  298220             : 
  298221             :      // ******************************************
  298222             :      // * Memory Pool / New / Delete
  298223             :      // ******************************************
  298224             : 
  298225             :      public:
  298226             :           /// \private
  298227             :           static const unsigned pool_size; //
  298228             :           /// \private
  298229             :           static std::vector<unsigned char *> pools; //
  298230             :           /// \private
  298231             :           static SgAssignInitializer * next_node; // 
  298232             : 
  298233             :           /// \private
  298234             :           static unsigned long initializeStorageClassArray(SgAssignInitializerStorageClass *); //
  298235             : 
  298236             :           /// \private
  298237             :           static void clearMemoryPool(); //
  298238             :           static void deleteMemoryPool(); //
  298239             : 
  298240             :           /// \private
  298241             :           static void extendMemoryPoolForFileIO(); //
  298242             : 
  298243             :           /// \private
  298244             :           static SgAssignInitializer * getPointerFromGlobalIndex(unsigned long); //
  298245             :           /// \private
  298246             :           static SgAssignInitializer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  298247             : 
  298248             :           /// \private
  298249             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  298250             :           /// \private
  298251             :           static void resetValidFreepointers(); //
  298252             :           /// \private
  298253             :           static unsigned long getNumberOfLastValidPointer(); //
  298254             : 
  298255             : 
  298256             : #if defined(INLINE_FUNCTIONS)
  298257             :       /*! \brief returns pointer to newly allocated IR node */
  298258             :           inline void *operator new (size_t size);
  298259             : #else
  298260             :       /*! \brief returns pointer to newly allocated IR node */
  298261             :           void *operator new (size_t size);
  298262             : #endif
  298263             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  298264             :           void operator delete (void* pointer, size_t size);
  298265             : 
  298266             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  298267        2917 :           void operator delete (void* pointer)
  298268             :              {
  298269             :             // This is the generated delete operator...
  298270        2917 :                SgAssignInitializer::operator delete (pointer,sizeof(SgAssignInitializer));
  298271             :              }
  298272             : 
  298273             :       /*! \brief Returns the total number of IR nodes of this type */
  298274             :           static size_t numberOfNodes();
  298275             : 
  298276             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  298277             :           static size_t memoryUsage();
  298278             : 
  298279             :       // End of scope which started in IR nodes specific code 
  298280             :       /* */
  298281             : 
  298282             :       /* name Internal Functions
  298283             :           \brief Internal functions ... incomplete-documentation
  298284             : 
  298285             :           These functions have been made public as part of the design, but they are suggested for internal use 
  298286             :           or by particularly knowledgeable users for specialized tools or applications.
  298287             : 
  298288             :           \internal We could not make these private because they are required by user for special purposes. And 
  298289             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  298290             :          
  298291             :        */
  298292             : 
  298293             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  298294             :        // overridden in every class by *generated* implementation
  298295             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  298296             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  298297             :        // MS: 06/28/02 container of names of variables or container indices 
  298298             :        // used used in the traversal to access AST successor nodes
  298299             :        // overridden in every class by *generated* implementation
  298300             :       /*! \brief container of names of variables or container indices used used in the traversal
  298301             :           to access AST successor nodes overridden in every class by *generated* implementation */
  298302             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  298303             : 
  298304             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  298305             :        // than all the vector copies. The implementation for these functions is generated for each class.
  298306             :       /*! \brief return number of children in the traversal successor list */
  298307             :           virtual size_t get_numberOfTraversalSuccessors() override;
  298308             :       /*! \brief index-based access to traversal successors by index number */
  298309             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  298310             :       /*! \brief index-based access to traversal successors by child node */
  298311             :           virtual size_t get_childIndex(SgNode *child) override;
  298312             : 
  298313             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  298314             :        // MS: 08/16/2002 method for generating RTI information
  298315             :       /*! \brief return C++ Runtime-Time-Information */
  298316             :           virtual RTIReturnType roseRTI() override;
  298317             : #endif
  298318             :       /* */
  298319             : 
  298320             : 
  298321             : 
  298322             :       /* name Deprecated Functions
  298323             :           \brief Deprecated functions ... incomplete-documentation
  298324             : 
  298325             :           These functions have been deprecated from use.
  298326             :        */
  298327             :       /* */
  298328             : 
  298329             :       /*! returns a C style string (char*) representing the class name */
  298330             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  298331             : 
  298332             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  298333             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  298334             : #if 0
  298335             :       /*! returns old style Sage II enum values */
  298336             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  298337             :       /*! returns old style Sage II enum values */
  298338             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  298339             : #endif
  298340             :       /* */
  298341             : 
  298342             : 
  298343             : 
  298344             : 
  298345             :      public:
  298346             :       /* name Traversal Support Functions
  298347             :           \brief Traversal support functions ... incomplete-documentation
  298348             : 
  298349             :           These functions have been made public as part of the design, but they are suggested for internal use 
  298350             :           or by particularly knowledgable users for specialized tools or applications.
  298351             :        */
  298352             :       /* */
  298353             : 
  298354             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  298355             :        // (inferior to ROSE traversal mechanism, experimental).
  298356             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  298357             :        */
  298358             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  298359             : 
  298360             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  298361             :       /*! \brief support for the classic visitor pattern done in GoF */
  298362             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  298363             : 
  298364             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  298365             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  298366             :        */
  298367             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  298368             : 
  298369             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  298370             :        */
  298371             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  298372             : 
  298373             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  298374             :        // This traversal helps support internal tools that call static member functions.
  298375             :        // note: this function operates on the memory pools.
  298376             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  298377             :        */
  298378             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  298379             :       /* */
  298380             : 
  298381             : 
  298382             :      public:
  298383             :       /* name Memory Allocation Functions
  298384             :           \brief Memory allocations functions ... incomplete-documentation
  298385             : 
  298386             :           These functions have been made public as part of the design, but they are suggested for internal use 
  298387             :           or by particularly knowledgable users for specialized tools or applications.
  298388             :        */
  298389             :       /* */
  298390             : 
  298391             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  298392             : 
  298393             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  298394             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  298395             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  298396             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  298397             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  298398             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  298399             :           being used with the AST File I/O mechanism.
  298400             :        */
  298401             :           virtual bool isInMemoryPool() override;
  298402             : 
  298403             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  298404             : 
  298405             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  298406             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  298407             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  298408             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  298409             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  298410             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  298411             :           being used with the AST File I/O mechanism.
  298412             :        */
  298413             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  298414             : 
  298415             :       // DQ (4/30/2006): Modified to be a const function.
  298416             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  298417             : 
  298418             :           This functions is part of general support for many possible tools to operate 
  298419             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  298420             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  298421             :           less than the set of pointers used by the AST file I/O. This is part of
  298422             :           work implemented by Andreas, and support tools such as the AST graph generation.
  298423             : 
  298424             :           \warning This function can return unexpected data members and thus the 
  298425             :                    order and the number of elements is unpredicable and subject 
  298426             :                    to change.
  298427             : 
  298428             :           \returns STL vector of pairs of SgNode* and strings
  298429             :        */
  298430             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  298431             : 
  298432             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  298433             : 
  298434             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  298435             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  298436             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  298437             : 
  298438             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  298439             :                    and subject to change.
  298440             :        */
  298441             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  298442             : 
  298443             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  298444             : 
  298445             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  298446             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  298447             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  298448             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  298449             : 
  298450             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  298451             : 
  298452             :           \returns long
  298453             :        */
  298454             :           virtual long getChildIndex( SgNode* childNode ) const override;
  298455             : 
  298456             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  298457             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  298458             :       /* \brief Constructor for use by AST File I/O Mechanism
  298459             : 
  298460             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  298461             :           which obtained via fast binary file I/O from disk.
  298462             :        */
  298463             :        // SgAssignInitializer( SgAssignInitializerStorageClass& source );
  298464             : 
  298465             : 
  298466             : 
  298467             : 
  298468             : 
  298469             :  // JH (10/24/2005): methods added to support the ast file IO
  298470             :     private:
  298471             : 
  298472             :       /* name AST Memory Allocation Support Functions
  298473             :           \brief Memory allocations support....
  298474             : 
  298475             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  298476             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  298477             :           and support the AST File I/O Mechanism.
  298478             :        */
  298479             :       /* */
  298480             : 
  298481             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  298482             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  298483             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  298484             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  298485             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  298486             :           a correspinding one in the AST_FILE_IO class!
  298487             :        */
  298488             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  298489             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  298490             :       /* \brief Typedef used for low level memory access.
  298491             :        */
  298492             :        // typedef unsigned char* TestType;
  298493             : 
  298494             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  298495             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  298496             :       /* \brief Typedef used to hold memory addresses as values.
  298497             :        */
  298498             :        // typedef unsigned long  AddressType;
  298499             : 
  298500             : 
  298501             : 
  298502             :        // necessary, to have direct access to the p_freepointer and the private methods !
  298503             :       /*! \brief friend class declaration to support AST File I/O */
  298504             :           friend class AST_FILE_IO;
  298505             : 
  298506             :       /*! \brief friend class declaration to support AST File I/O */
  298507             :           friend class SgAssignInitializerStorageClass;
  298508             : 
  298509             :       /*! \brief friend class declaration to support AST File I/O */
  298510             :           friend class AstSpecificDataManagingClass;
  298511             : 
  298512             :       /*! \brief friend class declaration to support AST File I/O */
  298513             :           friend class AstSpecificDataManagingClassStorageClass;
  298514             :     public:
  298515             :       /*! \brief IR node constructor to support AST File I/O */
  298516             :           SgAssignInitializer( const SgAssignInitializerStorageClass& source );
  298517             : 
  298518             :  // private: // JJW hack
  298519             :        /*
  298520             :           name AST Memory Allocation Support Variables
  298521             :           Memory allocations support variables 
  298522             : 
  298523             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  298524             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  298525             :           and support the AST File I/O Mechanism.
  298526             :        */
  298527             :       /* */
  298528             : 
  298529             :     public:
  298530             : 
  298531             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  298532             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  298533             :       // virtual SgNode* addRegExpAttribute();
  298534             :       /*! \brief Support for AST matching using regular expression.
  298535             : 
  298536             :           This support is incomplete and the subject of current research to define 
  298537             :           RegEx trees to support inexact matching.
  298538             :        */
  298539             :           SgAssignInitializer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  298540             : 
  298541             : // *** COMMON CODE SECTION ENDS HERE ***
  298542             : 
  298543             : 
  298544             : // End of memberFunctionString
  298545             : // Start of memberFunctionString
  298546             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  298547             : 
  298548             :      // the generated cast function
  298549             :      // friend ROSE_DLL_API SgAssignInitializer* isSgAssignInitializer ( SgNode* s );
  298550             : 
  298551             :           typedef SgInitializer base_node_type;
  298552             : 
  298553             : 
  298554             : // End of memberFunctionString
  298555             : // Start of memberFunctionString
  298556             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  298557             : 
  298558             :           SgType* get_type() const override;
  298559             : 
  298560             : 
  298561             : // End of memberFunctionString
  298562             : // Start of memberFunctionString
  298563             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  298564             : 
  298565             :           void post_construction_initialization() override;
  298566             : 
  298567             : 
  298568             : // End of memberFunctionString
  298569             : // Start of memberFunctionString
  298570             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  298571             : 
  298572             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  298573             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  298574             : 
  298575             : 
  298576             : // End of memberFunctionString
  298577             : 
  298578             :      public: 
  298579             :          SgExpression* get_operand_i() const;
  298580             :          void set_operand_i(SgExpression* operand_i);
  298581             : 
  298582             : 
  298583             : 
  298584             :      public: 
  298585             :          virtual ~SgAssignInitializer();
  298586             : 
  298587             : 
  298588             :      public: 
  298589             :          SgAssignInitializer(Sg_File_Info* startOfConstruct , SgExpression* operand_i = NULL, SgType* expression_type = NULL); 
  298590             :          SgAssignInitializer(SgExpression* operand_i, SgType* expression_type); 
  298591             : 
  298592             :     protected:
  298593             : // Start of memberFunctionString
  298594             : SgExpression* p_operand_i;
  298595             :           
  298596             : // End of memberFunctionString
  298597             : // Start of memberFunctionString
  298598             : SgType* p_expression_type;
  298599             :           
  298600             : // End of memberFunctionString
  298601             : 
  298602             :     friend struct Rose::Traits::generated::describe_node_t<SgAssignInitializer>;
  298603             :     friend struct Rose::Traits::generated::describe_field_t<SgAssignInitializer, SgExpression*,&SgAssignInitializer::p_operand_i>;
  298604             :     friend struct Rose::Traits::generated::describe_field_t<SgAssignInitializer, SgType*,&SgAssignInitializer::p_expression_type>;
  298605             : 
  298606             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298607             : 
  298608             : 
  298609             :    };
  298610             : #endif
  298611             : 
  298612             : // postdeclarations for SgAssignInitializer
  298613             : 
  298614             : /* #line 298615 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298615             : 
  298616             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  298617             : 
  298618             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298619             : 
  298620             : 
  298621             : /* #line 298622 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298622             : 
  298623             : 
  298624             : 
  298625             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298626             : 
  298627             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  298628             : //      This code is automatically generated for each 
  298629             : //      terminal and non-terminal within the defined 
  298630             : //      grammar.  There is a simple way to change the 
  298631             : //      code to fix bugs etc.  See the ROSE README file
  298632             : //      for directions.
  298633             : 
  298634             : // tps: (02/22/2010): Adding DLL export requirements
  298635             : #include "rosedll.h"
  298636             : 
  298637             : // predeclarations for SgDesignatedInitializer
  298638             : 
  298639             : /* #line 298640 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298640             : 
  298641             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  298642             : 
  298643             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  298644             : 
  298645             : #if 1
  298646             : // Class Definition for SgDesignatedInitializer
  298647             : class ROSE_DLL_API SgDesignatedInitializer  : public SgInitializer
  298648             :    {
  298649             :      public:
  298650             : 
  298651             : 
  298652             : /* #line 298653 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  298653             : 
  298654             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  298655             : // Start of memberFunctionString
  298656             : /* #line 1824 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  298657             : 
  298658             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  298659             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  298660             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  298661             :           virtual unsigned int cfgFindChildIndex(SgNode* n) override;
  298662             : #endif
  298663             : 
  298664             : 
  298665             : 
  298666             : // End of memberFunctionString
  298667             : // Start of memberFunctionString
  298668             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  298669             : 
  298670             : // *** COMMON CODE SECTION BEGINS HERE ***
  298671             : 
  298672             :     public:
  298673             : 
  298674             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  298675             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  298676             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  298677             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  298678             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  298679             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  298680             : 
  298681             :       /*! \brief returns a string representing the class name */
  298682             :           virtual std::string class_name() const override;
  298683             : 
  298684             :       /*! \brief returns new style SageIII enum values */
  298685             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  298686             : 
  298687             :       /*! \brief static variant value */
  298688             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  298689             :        // static const VariantT static_variant = V_SgDesignatedInitializer;
  298690             :           enum { static_variant = V_SgDesignatedInitializer };
  298691             : 
  298692             :        /* the generated cast function */
  298693             :       /*! \brief Casts pointer from base class to derived class */
  298694             :           ROSE_DLL_API friend       SgDesignatedInitializer* isSgDesignatedInitializer(       SgNode * s );
  298695             : 
  298696             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  298697             :           ROSE_DLL_API friend const SgDesignatedInitializer* isSgDesignatedInitializer( const SgNode * s );
  298698             : 
  298699             :      // ******************************************
  298700             :      // * Memory Pool / New / Delete
  298701             :      // ******************************************
  298702             : 
  298703             :      public:
  298704             :           /// \private
  298705             :           static const unsigned pool_size; //
  298706             :           /// \private
  298707             :           static std::vector<unsigned char *> pools; //
  298708             :           /// \private
  298709             :           static SgDesignatedInitializer * next_node; // 
  298710             : 
  298711             :           /// \private
  298712             :           static unsigned long initializeStorageClassArray(SgDesignatedInitializerStorageClass *); //
  298713             : 
  298714             :           /// \private
  298715             :           static void clearMemoryPool(); //
  298716             :           static void deleteMemoryPool(); //
  298717             : 
  298718             :           /// \private
  298719             :           static void extendMemoryPoolForFileIO(); //
  298720             : 
  298721             :           /// \private
  298722             :           static SgDesignatedInitializer * getPointerFromGlobalIndex(unsigned long); //
  298723             :           /// \private
  298724             :           static SgDesignatedInitializer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  298725             : 
  298726             :           /// \private
  298727             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  298728             :           /// \private
  298729             :           static void resetValidFreepointers(); //
  298730             :           /// \private
  298731             :           static unsigned long getNumberOfLastValidPointer(); //
  298732             : 
  298733             : 
  298734             : #if defined(INLINE_FUNCTIONS)
  298735             :       /*! \brief returns pointer to newly allocated IR node */
  298736             :           inline void *operator new (size_t size);
  298737             : #else
  298738             :       /*! \brief returns pointer to newly allocated IR node */
  298739             :           void *operator new (size_t size);
  298740             : #endif
  298741             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  298742             :           void operator delete (void* pointer, size_t size);
  298743             : 
  298744             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  298745           0 :           void operator delete (void* pointer)
  298746             :              {
  298747             :             // This is the generated delete operator...
  298748           0 :                SgDesignatedInitializer::operator delete (pointer,sizeof(SgDesignatedInitializer));
  298749             :              }
  298750             : 
  298751             :       /*! \brief Returns the total number of IR nodes of this type */
  298752             :           static size_t numberOfNodes();
  298753             : 
  298754             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  298755             :           static size_t memoryUsage();
  298756             : 
  298757             :       // End of scope which started in IR nodes specific code 
  298758             :       /* */
  298759             : 
  298760             :       /* name Internal Functions
  298761             :           \brief Internal functions ... incomplete-documentation
  298762             : 
  298763             :           These functions have been made public as part of the design, but they are suggested for internal use 
  298764             :           or by particularly knowledgeable users for specialized tools or applications.
  298765             : 
  298766             :           \internal We could not make these private because they are required by user for special purposes. And 
  298767             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  298768             :          
  298769             :        */
  298770             : 
  298771             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  298772             :        // overridden in every class by *generated* implementation
  298773             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  298774             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  298775             :        // MS: 06/28/02 container of names of variables or container indices 
  298776             :        // used used in the traversal to access AST successor nodes
  298777             :        // overridden in every class by *generated* implementation
  298778             :       /*! \brief container of names of variables or container indices used used in the traversal
  298779             :           to access AST successor nodes overridden in every class by *generated* implementation */
  298780             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  298781             : 
  298782             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  298783             :        // than all the vector copies. The implementation for these functions is generated for each class.
  298784             :       /*! \brief return number of children in the traversal successor list */
  298785             :           virtual size_t get_numberOfTraversalSuccessors() override;
  298786             :       /*! \brief index-based access to traversal successors by index number */
  298787             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  298788             :       /*! \brief index-based access to traversal successors by child node */
  298789             :           virtual size_t get_childIndex(SgNode *child) override;
  298790             : 
  298791             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  298792             :        // MS: 08/16/2002 method for generating RTI information
  298793             :       /*! \brief return C++ Runtime-Time-Information */
  298794             :           virtual RTIReturnType roseRTI() override;
  298795             : #endif
  298796             :       /* */
  298797             : 
  298798             : 
  298799             : 
  298800             :       /* name Deprecated Functions
  298801             :           \brief Deprecated functions ... incomplete-documentation
  298802             : 
  298803             :           These functions have been deprecated from use.
  298804             :        */
  298805             :       /* */
  298806             : 
  298807             :       /*! returns a C style string (char*) representing the class name */
  298808             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  298809             : 
  298810             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  298811             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  298812             : #if 0
  298813             :       /*! returns old style Sage II enum values */
  298814             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  298815             :       /*! returns old style Sage II enum values */
  298816             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  298817             : #endif
  298818             :       /* */
  298819             : 
  298820             : 
  298821             : 
  298822             : 
  298823             :      public:
  298824             :       /* name Traversal Support Functions
  298825             :           \brief Traversal support functions ... incomplete-documentation
  298826             : 
  298827             :           These functions have been made public as part of the design, but they are suggested for internal use 
  298828             :           or by particularly knowledgable users for specialized tools or applications.
  298829             :        */
  298830             :       /* */
  298831             : 
  298832             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  298833             :        // (inferior to ROSE traversal mechanism, experimental).
  298834             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  298835             :        */
  298836             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  298837             : 
  298838             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  298839             :       /*! \brief support for the classic visitor pattern done in GoF */
  298840             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  298841             : 
  298842             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  298843             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  298844             :        */
  298845             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  298846             : 
  298847             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  298848             :        */
  298849             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  298850             : 
  298851             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  298852             :        // This traversal helps support internal tools that call static member functions.
  298853             :        // note: this function operates on the memory pools.
  298854             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  298855             :        */
  298856             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  298857             :       /* */
  298858             : 
  298859             : 
  298860             :      public:
  298861             :       /* name Memory Allocation Functions
  298862             :           \brief Memory allocations functions ... incomplete-documentation
  298863             : 
  298864             :           These functions have been made public as part of the design, but they are suggested for internal use 
  298865             :           or by particularly knowledgable users for specialized tools or applications.
  298866             :        */
  298867             :       /* */
  298868             : 
  298869             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  298870             : 
  298871             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  298872             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  298873             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  298874             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  298875             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  298876             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  298877             :           being used with the AST File I/O mechanism.
  298878             :        */
  298879             :           virtual bool isInMemoryPool() override;
  298880             : 
  298881             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  298882             : 
  298883             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  298884             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  298885             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  298886             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  298887             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  298888             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  298889             :           being used with the AST File I/O mechanism.
  298890             :        */
  298891             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  298892             : 
  298893             :       // DQ (4/30/2006): Modified to be a const function.
  298894             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  298895             : 
  298896             :           This functions is part of general support for many possible tools to operate 
  298897             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  298898             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  298899             :           less than the set of pointers used by the AST file I/O. This is part of
  298900             :           work implemented by Andreas, and support tools such as the AST graph generation.
  298901             : 
  298902             :           \warning This function can return unexpected data members and thus the 
  298903             :                    order and the number of elements is unpredicable and subject 
  298904             :                    to change.
  298905             : 
  298906             :           \returns STL vector of pairs of SgNode* and strings
  298907             :        */
  298908             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  298909             : 
  298910             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  298911             : 
  298912             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  298913             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  298914             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  298915             : 
  298916             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  298917             :                    and subject to change.
  298918             :        */
  298919             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  298920             : 
  298921             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  298922             : 
  298923             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  298924             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  298925             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  298926             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  298927             : 
  298928             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  298929             : 
  298930             :           \returns long
  298931             :        */
  298932             :           virtual long getChildIndex( SgNode* childNode ) const override;
  298933             : 
  298934             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  298935             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  298936             :       /* \brief Constructor for use by AST File I/O Mechanism
  298937             : 
  298938             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  298939             :           which obtained via fast binary file I/O from disk.
  298940             :        */
  298941             :        // SgDesignatedInitializer( SgDesignatedInitializerStorageClass& source );
  298942             : 
  298943             : 
  298944             : 
  298945             : 
  298946             : 
  298947             :  // JH (10/24/2005): methods added to support the ast file IO
  298948             :     private:
  298949             : 
  298950             :       /* name AST Memory Allocation Support Functions
  298951             :           \brief Memory allocations support....
  298952             : 
  298953             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  298954             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  298955             :           and support the AST File I/O Mechanism.
  298956             :        */
  298957             :       /* */
  298958             : 
  298959             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  298960             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  298961             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  298962             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  298963             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  298964             :           a correspinding one in the AST_FILE_IO class!
  298965             :        */
  298966             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  298967             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  298968             :       /* \brief Typedef used for low level memory access.
  298969             :        */
  298970             :        // typedef unsigned char* TestType;
  298971             : 
  298972             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  298973             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  298974             :       /* \brief Typedef used to hold memory addresses as values.
  298975             :        */
  298976             :        // typedef unsigned long  AddressType;
  298977             : 
  298978             : 
  298979             : 
  298980             :        // necessary, to have direct access to the p_freepointer and the private methods !
  298981             :       /*! \brief friend class declaration to support AST File I/O */
  298982             :           friend class AST_FILE_IO;
  298983             : 
  298984             :       /*! \brief friend class declaration to support AST File I/O */
  298985             :           friend class SgDesignatedInitializerStorageClass;
  298986             : 
  298987             :       /*! \brief friend class declaration to support AST File I/O */
  298988             :           friend class AstSpecificDataManagingClass;
  298989             : 
  298990             :       /*! \brief friend class declaration to support AST File I/O */
  298991             :           friend class AstSpecificDataManagingClassStorageClass;
  298992             :     public:
  298993             :       /*! \brief IR node constructor to support AST File I/O */
  298994             :           SgDesignatedInitializer( const SgDesignatedInitializerStorageClass& source );
  298995             : 
  298996             :  // private: // JJW hack
  298997             :        /*
  298998             :           name AST Memory Allocation Support Variables
  298999             :           Memory allocations support variables 
  299000             : 
  299001             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  299002             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  299003             :           and support the AST File I/O Mechanism.
  299004             :        */
  299005             :       /* */
  299006             : 
  299007             :     public:
  299008             : 
  299009             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  299010             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  299011             :       // virtual SgNode* addRegExpAttribute();
  299012             :       /*! \brief Support for AST matching using regular expression.
  299013             : 
  299014             :           This support is incomplete and the subject of current research to define 
  299015             :           RegEx trees to support inexact matching.
  299016             :        */
  299017             :           SgDesignatedInitializer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  299018             : 
  299019             : // *** COMMON CODE SECTION ENDS HERE ***
  299020             : 
  299021             : 
  299022             : // End of memberFunctionString
  299023             : // Start of memberFunctionString
  299024             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  299025             : 
  299026             :      // the generated cast function
  299027             :      // friend ROSE_DLL_API SgDesignatedInitializer* isSgDesignatedInitializer ( SgNode* s );
  299028             : 
  299029             :           typedef SgInitializer base_node_type;
  299030             : 
  299031             : 
  299032             : // End of memberFunctionString
  299033             : // Start of memberFunctionString
  299034             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299035             : 
  299036             :           SgType* get_type() const override;
  299037             : 
  299038             : 
  299039             : // End of memberFunctionString
  299040             : // Start of memberFunctionString
  299041             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299042             : 
  299043             :           void post_construction_initialization() override;
  299044             : 
  299045             : 
  299046             : // End of memberFunctionString
  299047             : // Start of memberFunctionString
  299048             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299049             : 
  299050             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  299051             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  299052             : 
  299053             : 
  299054             : // End of memberFunctionString
  299055             : 
  299056             :      public: 
  299057             :          SgExprListExp* get_designatorList() const;
  299058             :          void set_designatorList(SgExprListExp* designatorList);
  299059             : 
  299060             :      public: 
  299061             :          SgInitializer* get_memberInit() const;
  299062             :          void set_memberInit(SgInitializer* memberInit);
  299063             : 
  299064             : 
  299065             :      public: 
  299066             :          virtual ~SgDesignatedInitializer();
  299067             : 
  299068             : 
  299069             :      public: 
  299070             :          SgDesignatedInitializer(Sg_File_Info* startOfConstruct , SgExprListExp* designatorList = NULL, SgInitializer* memberInit = NULL); 
  299071             :          SgDesignatedInitializer(SgExprListExp* designatorList, SgInitializer* memberInit); 
  299072             : 
  299073             :     protected:
  299074             : // Start of memberFunctionString
  299075             : SgExprListExp* p_designatorList;
  299076             :           
  299077             : // End of memberFunctionString
  299078             : // Start of memberFunctionString
  299079             : SgInitializer* p_memberInit;
  299080             :           
  299081             : // End of memberFunctionString
  299082             : 
  299083             :     friend struct Rose::Traits::generated::describe_node_t<SgDesignatedInitializer>;
  299084             :     friend struct Rose::Traits::generated::describe_field_t<SgDesignatedInitializer, SgExprListExp*,&SgDesignatedInitializer::p_designatorList>;
  299085             :     friend struct Rose::Traits::generated::describe_field_t<SgDesignatedInitializer, SgInitializer*,&SgDesignatedInitializer::p_memberInit>;
  299086             : 
  299087             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299088             : 
  299089             : 
  299090             :    };
  299091             : #endif
  299092             : 
  299093             : // postdeclarations for SgDesignatedInitializer
  299094             : 
  299095             : /* #line 299096 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299096             : 
  299097             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  299098             : 
  299099             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299100             : 
  299101             : 
  299102             : /* #line 299103 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299103             : 
  299104             : 
  299105             : 
  299106             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299107             : 
  299108             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  299109             : //      This code is automatically generated for each 
  299110             : //      terminal and non-terminal within the defined 
  299111             : //      grammar.  There is a simple way to change the 
  299112             : //      code to fix bugs etc.  See the ROSE README file
  299113             : //      for directions.
  299114             : 
  299115             : // tps: (02/22/2010): Adding DLL export requirements
  299116             : #include "rosedll.h"
  299117             : 
  299118             : // predeclarations for SgBracedInitializer
  299119             : 
  299120             : /* #line 299121 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299121             : 
  299122             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  299123             : 
  299124             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299125             : 
  299126             : #if 1
  299127             : // Class Definition for SgBracedInitializer
  299128             : class ROSE_DLL_API SgBracedInitializer  : public SgInitializer
  299129             :    {
  299130             :      public:
  299131             : 
  299132             : 
  299133             : /* #line 299134 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299134             : 
  299135             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  299136             : // Start of memberFunctionString
  299137             : /* #line 1596 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299138             : 
  299139             : /* #line 196 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299140             : 
  299141             :           void append_initializer(SgExpression* what);
  299142             :        // void insert_initializer(const SgExpression::iterator & where, SgExpression* what);
  299143             :        // void insert_initializer(const SgExpressionPtrList::iterator & where, SgExpression* what);
  299144             : 
  299145             : 
  299146             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  299147             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  299148             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  299149             : #endif
  299150             : 
  299151             : #if 0
  299152             :        // DQ (11/15/2016): I don' think that name qualification maes sense for a braced initializer.
  299153             : 
  299154             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  299155             :           bool get_requiresGlobalNameQualificationOnType() const;
  299156             :           void set_requiresGlobalNameQualificationOnType(bool requiresGlobalNameQualificationOnType);
  299157             : 
  299158             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  299159             :           int get_name_qualification_length_for_type() const override;
  299160             :           void set_name_qualification_length_for_type(int name_qualification_length_for_type) override;
  299161             : 
  299162             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  299163             :           bool get_type_elaboration_required_for_type() const override;
  299164             :           void set_type_elaboration_required_for_type(bool type_elaboration_required_for_type) override;
  299165             : 
  299166             :        // DQ (6/11/2015): Added support for non ROSETTA generated access functions to avoid isModified flag setting semantics.
  299167             :           bool get_global_qualification_required_for_type() const override;
  299168             :           void set_global_qualification_required_for_type(bool global_qualification_required_for_type) override;
  299169             : #endif
  299170             : 
  299171             : 
  299172             : 
  299173             : // End of memberFunctionString
  299174             : // Start of memberFunctionString
  299175             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  299176             : 
  299177             : // *** COMMON CODE SECTION BEGINS HERE ***
  299178             : 
  299179             :     public:
  299180             : 
  299181             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  299182             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  299183             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  299184             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  299185             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  299186             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  299187             : 
  299188             :       /*! \brief returns a string representing the class name */
  299189             :           virtual std::string class_name() const override;
  299190             : 
  299191             :       /*! \brief returns new style SageIII enum values */
  299192             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  299193             : 
  299194             :       /*! \brief static variant value */
  299195             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  299196             :        // static const VariantT static_variant = V_SgBracedInitializer;
  299197             :           enum { static_variant = V_SgBracedInitializer };
  299198             : 
  299199             :        /* the generated cast function */
  299200             :       /*! \brief Casts pointer from base class to derived class */
  299201             :           ROSE_DLL_API friend       SgBracedInitializer* isSgBracedInitializer(       SgNode * s );
  299202             : 
  299203             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  299204             :           ROSE_DLL_API friend const SgBracedInitializer* isSgBracedInitializer( const SgNode * s );
  299205             : 
  299206             :      // ******************************************
  299207             :      // * Memory Pool / New / Delete
  299208             :      // ******************************************
  299209             : 
  299210             :      public:
  299211             :           /// \private
  299212             :           static const unsigned pool_size; //
  299213             :           /// \private
  299214             :           static std::vector<unsigned char *> pools; //
  299215             :           /// \private
  299216             :           static SgBracedInitializer * next_node; // 
  299217             : 
  299218             :           /// \private
  299219             :           static unsigned long initializeStorageClassArray(SgBracedInitializerStorageClass *); //
  299220             : 
  299221             :           /// \private
  299222             :           static void clearMemoryPool(); //
  299223             :           static void deleteMemoryPool(); //
  299224             : 
  299225             :           /// \private
  299226             :           static void extendMemoryPoolForFileIO(); //
  299227             : 
  299228             :           /// \private
  299229             :           static SgBracedInitializer * getPointerFromGlobalIndex(unsigned long); //
  299230             :           /// \private
  299231             :           static SgBracedInitializer * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  299232             : 
  299233             :           /// \private
  299234             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  299235             :           /// \private
  299236             :           static void resetValidFreepointers(); //
  299237             :           /// \private
  299238             :           static unsigned long getNumberOfLastValidPointer(); //
  299239             : 
  299240             : 
  299241             : #if defined(INLINE_FUNCTIONS)
  299242             :       /*! \brief returns pointer to newly allocated IR node */
  299243             :           inline void *operator new (size_t size);
  299244             : #else
  299245             :       /*! \brief returns pointer to newly allocated IR node */
  299246             :           void *operator new (size_t size);
  299247             : #endif
  299248             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  299249             :           void operator delete (void* pointer, size_t size);
  299250             : 
  299251             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  299252           2 :           void operator delete (void* pointer)
  299253             :              {
  299254             :             // This is the generated delete operator...
  299255           2 :                SgBracedInitializer::operator delete (pointer,sizeof(SgBracedInitializer));
  299256             :              }
  299257             : 
  299258             :       /*! \brief Returns the total number of IR nodes of this type */
  299259             :           static size_t numberOfNodes();
  299260             : 
  299261             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  299262             :           static size_t memoryUsage();
  299263             : 
  299264             :       // End of scope which started in IR nodes specific code 
  299265             :       /* */
  299266             : 
  299267             :       /* name Internal Functions
  299268             :           \brief Internal functions ... incomplete-documentation
  299269             : 
  299270             :           These functions have been made public as part of the design, but they are suggested for internal use 
  299271             :           or by particularly knowledgeable users for specialized tools or applications.
  299272             : 
  299273             :           \internal We could not make these private because they are required by user for special purposes. And 
  299274             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  299275             :          
  299276             :        */
  299277             : 
  299278             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  299279             :        // overridden in every class by *generated* implementation
  299280             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  299281             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  299282             :        // MS: 06/28/02 container of names of variables or container indices 
  299283             :        // used used in the traversal to access AST successor nodes
  299284             :        // overridden in every class by *generated* implementation
  299285             :       /*! \brief container of names of variables or container indices used used in the traversal
  299286             :           to access AST successor nodes overridden in every class by *generated* implementation */
  299287             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  299288             : 
  299289             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  299290             :        // than all the vector copies. The implementation for these functions is generated for each class.
  299291             :       /*! \brief return number of children in the traversal successor list */
  299292             :           virtual size_t get_numberOfTraversalSuccessors() override;
  299293             :       /*! \brief index-based access to traversal successors by index number */
  299294             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  299295             :       /*! \brief index-based access to traversal successors by child node */
  299296             :           virtual size_t get_childIndex(SgNode *child) override;
  299297             : 
  299298             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  299299             :        // MS: 08/16/2002 method for generating RTI information
  299300             :       /*! \brief return C++ Runtime-Time-Information */
  299301             :           virtual RTIReturnType roseRTI() override;
  299302             : #endif
  299303             :       /* */
  299304             : 
  299305             : 
  299306             : 
  299307             :       /* name Deprecated Functions
  299308             :           \brief Deprecated functions ... incomplete-documentation
  299309             : 
  299310             :           These functions have been deprecated from use.
  299311             :        */
  299312             :       /* */
  299313             : 
  299314             :       /*! returns a C style string (char*) representing the class name */
  299315             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  299316             : 
  299317             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  299318             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  299319             : #if 0
  299320             :       /*! returns old style Sage II enum values */
  299321             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  299322             :       /*! returns old style Sage II enum values */
  299323             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  299324             : #endif
  299325             :       /* */
  299326             : 
  299327             : 
  299328             : 
  299329             : 
  299330             :      public:
  299331             :       /* name Traversal Support Functions
  299332             :           \brief Traversal support functions ... incomplete-documentation
  299333             : 
  299334             :           These functions have been made public as part of the design, but they are suggested for internal use 
  299335             :           or by particularly knowledgable users for specialized tools or applications.
  299336             :        */
  299337             :       /* */
  299338             : 
  299339             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  299340             :        // (inferior to ROSE traversal mechanism, experimental).
  299341             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  299342             :        */
  299343             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  299344             : 
  299345             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  299346             :       /*! \brief support for the classic visitor pattern done in GoF */
  299347             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  299348             : 
  299349             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  299350             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  299351             :        */
  299352             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  299353             : 
  299354             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  299355             :        */
  299356             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  299357             : 
  299358             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  299359             :        // This traversal helps support internal tools that call static member functions.
  299360             :        // note: this function operates on the memory pools.
  299361             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  299362             :        */
  299363             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  299364             :       /* */
  299365             : 
  299366             : 
  299367             :      public:
  299368             :       /* name Memory Allocation Functions
  299369             :           \brief Memory allocations functions ... incomplete-documentation
  299370             : 
  299371             :           These functions have been made public as part of the design, but they are suggested for internal use 
  299372             :           or by particularly knowledgable users for specialized tools or applications.
  299373             :        */
  299374             :       /* */
  299375             : 
  299376             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  299377             : 
  299378             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  299379             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  299380             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  299381             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  299382             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  299383             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  299384             :           being used with the AST File I/O mechanism.
  299385             :        */
  299386             :           virtual bool isInMemoryPool() override;
  299387             : 
  299388             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  299389             : 
  299390             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  299391             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  299392             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  299393             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  299394             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  299395             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  299396             :           being used with the AST File I/O mechanism.
  299397             :        */
  299398             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  299399             : 
  299400             :       // DQ (4/30/2006): Modified to be a const function.
  299401             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  299402             : 
  299403             :           This functions is part of general support for many possible tools to operate 
  299404             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  299405             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  299406             :           less than the set of pointers used by the AST file I/O. This is part of
  299407             :           work implemented by Andreas, and support tools such as the AST graph generation.
  299408             : 
  299409             :           \warning This function can return unexpected data members and thus the 
  299410             :                    order and the number of elements is unpredicable and subject 
  299411             :                    to change.
  299412             : 
  299413             :           \returns STL vector of pairs of SgNode* and strings
  299414             :        */
  299415             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  299416             : 
  299417             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  299418             : 
  299419             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  299420             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  299421             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  299422             : 
  299423             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  299424             :                    and subject to change.
  299425             :        */
  299426             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  299427             : 
  299428             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  299429             : 
  299430             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  299431             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  299432             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  299433             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  299434             : 
  299435             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  299436             : 
  299437             :           \returns long
  299438             :        */
  299439             :           virtual long getChildIndex( SgNode* childNode ) const override;
  299440             : 
  299441             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  299442             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  299443             :       /* \brief Constructor for use by AST File I/O Mechanism
  299444             : 
  299445             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  299446             :           which obtained via fast binary file I/O from disk.
  299447             :        */
  299448             :        // SgBracedInitializer( SgBracedInitializerStorageClass& source );
  299449             : 
  299450             : 
  299451             : 
  299452             : 
  299453             : 
  299454             :  // JH (10/24/2005): methods added to support the ast file IO
  299455             :     private:
  299456             : 
  299457             :       /* name AST Memory Allocation Support Functions
  299458             :           \brief Memory allocations support....
  299459             : 
  299460             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  299461             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  299462             :           and support the AST File I/O Mechanism.
  299463             :        */
  299464             :       /* */
  299465             : 
  299466             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  299467             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  299468             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  299469             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  299470             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  299471             :           a correspinding one in the AST_FILE_IO class!
  299472             :        */
  299473             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  299474             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  299475             :       /* \brief Typedef used for low level memory access.
  299476             :        */
  299477             :        // typedef unsigned char* TestType;
  299478             : 
  299479             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  299480             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  299481             :       /* \brief Typedef used to hold memory addresses as values.
  299482             :        */
  299483             :        // typedef unsigned long  AddressType;
  299484             : 
  299485             : 
  299486             : 
  299487             :        // necessary, to have direct access to the p_freepointer and the private methods !
  299488             :       /*! \brief friend class declaration to support AST File I/O */
  299489             :           friend class AST_FILE_IO;
  299490             : 
  299491             :       /*! \brief friend class declaration to support AST File I/O */
  299492             :           friend class SgBracedInitializerStorageClass;
  299493             : 
  299494             :       /*! \brief friend class declaration to support AST File I/O */
  299495             :           friend class AstSpecificDataManagingClass;
  299496             : 
  299497             :       /*! \brief friend class declaration to support AST File I/O */
  299498             :           friend class AstSpecificDataManagingClassStorageClass;
  299499             :     public:
  299500             :       /*! \brief IR node constructor to support AST File I/O */
  299501             :           SgBracedInitializer( const SgBracedInitializerStorageClass& source );
  299502             : 
  299503             :  // private: // JJW hack
  299504             :        /*
  299505             :           name AST Memory Allocation Support Variables
  299506             :           Memory allocations support variables 
  299507             : 
  299508             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  299509             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  299510             :           and support the AST File I/O Mechanism.
  299511             :        */
  299512             :       /* */
  299513             : 
  299514             :     public:
  299515             : 
  299516             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  299517             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  299518             :       // virtual SgNode* addRegExpAttribute();
  299519             :       /*! \brief Support for AST matching using regular expression.
  299520             : 
  299521             :           This support is incomplete and the subject of current research to define 
  299522             :           RegEx trees to support inexact matching.
  299523             :        */
  299524             :           SgBracedInitializer* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  299525             : 
  299526             : // *** COMMON CODE SECTION ENDS HERE ***
  299527             : 
  299528             : 
  299529             : // End of memberFunctionString
  299530             : // Start of memberFunctionString
  299531             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  299532             : 
  299533             :      // the generated cast function
  299534             :      // friend ROSE_DLL_API SgBracedInitializer* isSgBracedInitializer ( SgNode* s );
  299535             : 
  299536             :           typedef SgInitializer base_node_type;
  299537             : 
  299538             : 
  299539             : // End of memberFunctionString
  299540             : // Start of memberFunctionString
  299541             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299542             : 
  299543             :           SgType* get_type() const override;
  299544             : 
  299545             : 
  299546             : // End of memberFunctionString
  299547             : // Start of memberFunctionString
  299548             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299549             : 
  299550             :           void post_construction_initialization() override;
  299551             : 
  299552             : 
  299553             : // End of memberFunctionString
  299554             : // Start of memberFunctionString
  299555             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299556             : 
  299557             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  299558             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  299559             : 
  299560             : 
  299561             : // End of memberFunctionString
  299562             : 
  299563             :      public: 
  299564             :          SgExprListExp* get_initializers() const;
  299565             :          void set_initializers(SgExprListExp* initializers);
  299566             : 
  299567             : 
  299568             : 
  299569             :      public: 
  299570             :          virtual ~SgBracedInitializer();
  299571             : 
  299572             : 
  299573             :      public: 
  299574             :          SgBracedInitializer(Sg_File_Info* startOfConstruct , SgExprListExp* initializers = NULL, SgType* expression_type = NULL); 
  299575             :          SgBracedInitializer(SgExprListExp* initializers, SgType* expression_type); 
  299576             : 
  299577             :     protected:
  299578             : // Start of memberFunctionString
  299579             : SgExprListExp* p_initializers;
  299580             :           
  299581             : // End of memberFunctionString
  299582             : // Start of memberFunctionString
  299583             : SgType* p_expression_type;
  299584             :           
  299585             : // End of memberFunctionString
  299586             : 
  299587             :     friend struct Rose::Traits::generated::describe_node_t<SgBracedInitializer>;
  299588             :     friend struct Rose::Traits::generated::describe_field_t<SgBracedInitializer, SgExprListExp*,&SgBracedInitializer::p_initializers>;
  299589             :     friend struct Rose::Traits::generated::describe_field_t<SgBracedInitializer, SgType*,&SgBracedInitializer::p_expression_type>;
  299590             : 
  299591             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299592             : 
  299593             : 
  299594             :    };
  299595             : #endif
  299596             : 
  299597             : // postdeclarations for SgBracedInitializer
  299598             : 
  299599             : /* #line 299600 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299600             : 
  299601             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  299602             : 
  299603             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299604             : 
  299605             : 
  299606             : /* #line 299607 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299607             : 
  299608             : 
  299609             : 
  299610             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299611             : 
  299612             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  299613             : //      This code is automatically generated for each 
  299614             : //      terminal and non-terminal within the defined 
  299615             : //      grammar.  There is a simple way to change the 
  299616             : //      code to fix bugs etc.  See the ROSE README file
  299617             : //      for directions.
  299618             : 
  299619             : // tps: (02/22/2010): Adding DLL export requirements
  299620             : #include "rosedll.h"
  299621             : 
  299622             : // predeclarations for SgVarArgStartOp
  299623             : 
  299624             : /* #line 299625 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299625             : 
  299626             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  299627             : 
  299628             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  299629             : 
  299630             : #if 1
  299631             : // Class Definition for SgVarArgStartOp
  299632             : class ROSE_DLL_API SgVarArgStartOp  : public SgExpression
  299633             :    {
  299634             :      public:
  299635             : 
  299636             : 
  299637             : /* #line 299638 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  299638             : 
  299639             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  299640             : // Start of memberFunctionString
  299641             : /* #line 1089 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  299642             : 
  299643             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  299644             :           virtual unsigned int cfgIndexForEnd() const override;
  299645             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  299646             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  299647             : #endif
  299648             : 
  299649             : 
  299650             : 
  299651             : // End of memberFunctionString
  299652             : // Start of memberFunctionString
  299653             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  299654             : 
  299655             : // *** COMMON CODE SECTION BEGINS HERE ***
  299656             : 
  299657             :     public:
  299658             : 
  299659             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  299660             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  299661             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  299662             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  299663             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  299664             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  299665             : 
  299666             :       /*! \brief returns a string representing the class name */
  299667             :           virtual std::string class_name() const override;
  299668             : 
  299669             :       /*! \brief returns new style SageIII enum values */
  299670             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  299671             : 
  299672             :       /*! \brief static variant value */
  299673             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  299674             :        // static const VariantT static_variant = V_SgVarArgStartOp;
  299675             :           enum { static_variant = V_SgVarArgStartOp };
  299676             : 
  299677             :        /* the generated cast function */
  299678             :       /*! \brief Casts pointer from base class to derived class */
  299679             :           ROSE_DLL_API friend       SgVarArgStartOp* isSgVarArgStartOp(       SgNode * s );
  299680             : 
  299681             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  299682             :           ROSE_DLL_API friend const SgVarArgStartOp* isSgVarArgStartOp( const SgNode * s );
  299683             : 
  299684             :      // ******************************************
  299685             :      // * Memory Pool / New / Delete
  299686             :      // ******************************************
  299687             : 
  299688             :      public:
  299689             :           /// \private
  299690             :           static const unsigned pool_size; //
  299691             :           /// \private
  299692             :           static std::vector<unsigned char *> pools; //
  299693             :           /// \private
  299694             :           static SgVarArgStartOp * next_node; // 
  299695             : 
  299696             :           /// \private
  299697             :           static unsigned long initializeStorageClassArray(SgVarArgStartOpStorageClass *); //
  299698             : 
  299699             :           /// \private
  299700             :           static void clearMemoryPool(); //
  299701             :           static void deleteMemoryPool(); //
  299702             : 
  299703             :           /// \private
  299704             :           static void extendMemoryPoolForFileIO(); //
  299705             : 
  299706             :           /// \private
  299707             :           static SgVarArgStartOp * getPointerFromGlobalIndex(unsigned long); //
  299708             :           /// \private
  299709             :           static SgVarArgStartOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  299710             : 
  299711             :           /// \private
  299712             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  299713             :           /// \private
  299714             :           static void resetValidFreepointers(); //
  299715             :           /// \private
  299716             :           static unsigned long getNumberOfLastValidPointer(); //
  299717             : 
  299718             : 
  299719             : #if defined(INLINE_FUNCTIONS)
  299720             :       /*! \brief returns pointer to newly allocated IR node */
  299721             :           inline void *operator new (size_t size);
  299722             : #else
  299723             :       /*! \brief returns pointer to newly allocated IR node */
  299724             :           void *operator new (size_t size);
  299725             : #endif
  299726             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  299727             :           void operator delete (void* pointer, size_t size);
  299728             : 
  299729             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  299730           0 :           void operator delete (void* pointer)
  299731             :              {
  299732             :             // This is the generated delete operator...
  299733           0 :                SgVarArgStartOp::operator delete (pointer,sizeof(SgVarArgStartOp));
  299734             :              }
  299735             : 
  299736             :       /*! \brief Returns the total number of IR nodes of this type */
  299737             :           static size_t numberOfNodes();
  299738             : 
  299739             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  299740             :           static size_t memoryUsage();
  299741             : 
  299742             :       // End of scope which started in IR nodes specific code 
  299743             :       /* */
  299744             : 
  299745             :       /* name Internal Functions
  299746             :           \brief Internal functions ... incomplete-documentation
  299747             : 
  299748             :           These functions have been made public as part of the design, but they are suggested for internal use 
  299749             :           or by particularly knowledgeable users for specialized tools or applications.
  299750             : 
  299751             :           \internal We could not make these private because they are required by user for special purposes. And 
  299752             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  299753             :          
  299754             :        */
  299755             : 
  299756             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  299757             :        // overridden in every class by *generated* implementation
  299758             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  299759             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  299760             :        // MS: 06/28/02 container of names of variables or container indices 
  299761             :        // used used in the traversal to access AST successor nodes
  299762             :        // overridden in every class by *generated* implementation
  299763             :       /*! \brief container of names of variables or container indices used used in the traversal
  299764             :           to access AST successor nodes overridden in every class by *generated* implementation */
  299765             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  299766             : 
  299767             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  299768             :        // than all the vector copies. The implementation for these functions is generated for each class.
  299769             :       /*! \brief return number of children in the traversal successor list */
  299770             :           virtual size_t get_numberOfTraversalSuccessors() override;
  299771             :       /*! \brief index-based access to traversal successors by index number */
  299772             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  299773             :       /*! \brief index-based access to traversal successors by child node */
  299774             :           virtual size_t get_childIndex(SgNode *child) override;
  299775             : 
  299776             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  299777             :        // MS: 08/16/2002 method for generating RTI information
  299778             :       /*! \brief return C++ Runtime-Time-Information */
  299779             :           virtual RTIReturnType roseRTI() override;
  299780             : #endif
  299781             :       /* */
  299782             : 
  299783             : 
  299784             : 
  299785             :       /* name Deprecated Functions
  299786             :           \brief Deprecated functions ... incomplete-documentation
  299787             : 
  299788             :           These functions have been deprecated from use.
  299789             :        */
  299790             :       /* */
  299791             : 
  299792             :       /*! returns a C style string (char*) representing the class name */
  299793             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  299794             : 
  299795             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  299796             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  299797             : #if 0
  299798             :       /*! returns old style Sage II enum values */
  299799             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  299800             :       /*! returns old style Sage II enum values */
  299801             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  299802             : #endif
  299803             :       /* */
  299804             : 
  299805             : 
  299806             : 
  299807             : 
  299808             :      public:
  299809             :       /* name Traversal Support Functions
  299810             :           \brief Traversal support functions ... incomplete-documentation
  299811             : 
  299812             :           These functions have been made public as part of the design, but they are suggested for internal use 
  299813             :           or by particularly knowledgable users for specialized tools or applications.
  299814             :        */
  299815             :       /* */
  299816             : 
  299817             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  299818             :        // (inferior to ROSE traversal mechanism, experimental).
  299819             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  299820             :        */
  299821             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  299822             : 
  299823             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  299824             :       /*! \brief support for the classic visitor pattern done in GoF */
  299825             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  299826             : 
  299827             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  299828             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  299829             :        */
  299830             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  299831             : 
  299832             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  299833             :        */
  299834             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  299835             : 
  299836             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  299837             :        // This traversal helps support internal tools that call static member functions.
  299838             :        // note: this function operates on the memory pools.
  299839             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  299840             :        */
  299841             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  299842             :       /* */
  299843             : 
  299844             : 
  299845             :      public:
  299846             :       /* name Memory Allocation Functions
  299847             :           \brief Memory allocations functions ... incomplete-documentation
  299848             : 
  299849             :           These functions have been made public as part of the design, but they are suggested for internal use 
  299850             :           or by particularly knowledgable users for specialized tools or applications.
  299851             :        */
  299852             :       /* */
  299853             : 
  299854             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  299855             : 
  299856             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  299857             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  299858             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  299859             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  299860             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  299861             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  299862             :           being used with the AST File I/O mechanism.
  299863             :        */
  299864             :           virtual bool isInMemoryPool() override;
  299865             : 
  299866             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  299867             : 
  299868             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  299869             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  299870             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  299871             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  299872             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  299873             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  299874             :           being used with the AST File I/O mechanism.
  299875             :        */
  299876             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  299877             : 
  299878             :       // DQ (4/30/2006): Modified to be a const function.
  299879             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  299880             : 
  299881             :           This functions is part of general support for many possible tools to operate 
  299882             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  299883             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  299884             :           less than the set of pointers used by the AST file I/O. This is part of
  299885             :           work implemented by Andreas, and support tools such as the AST graph generation.
  299886             : 
  299887             :           \warning This function can return unexpected data members and thus the 
  299888             :                    order and the number of elements is unpredicable and subject 
  299889             :                    to change.
  299890             : 
  299891             :           \returns STL vector of pairs of SgNode* and strings
  299892             :        */
  299893             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  299894             : 
  299895             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  299896             : 
  299897             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  299898             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  299899             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  299900             : 
  299901             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  299902             :                    and subject to change.
  299903             :        */
  299904             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  299905             : 
  299906             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  299907             : 
  299908             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  299909             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  299910             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  299911             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  299912             : 
  299913             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  299914             : 
  299915             :           \returns long
  299916             :        */
  299917             :           virtual long getChildIndex( SgNode* childNode ) const override;
  299918             : 
  299919             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  299920             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  299921             :       /* \brief Constructor for use by AST File I/O Mechanism
  299922             : 
  299923             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  299924             :           which obtained via fast binary file I/O from disk.
  299925             :        */
  299926             :        // SgVarArgStartOp( SgVarArgStartOpStorageClass& source );
  299927             : 
  299928             : 
  299929             : 
  299930             : 
  299931             : 
  299932             :  // JH (10/24/2005): methods added to support the ast file IO
  299933             :     private:
  299934             : 
  299935             :       /* name AST Memory Allocation Support Functions
  299936             :           \brief Memory allocations support....
  299937             : 
  299938             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  299939             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  299940             :           and support the AST File I/O Mechanism.
  299941             :        */
  299942             :       /* */
  299943             : 
  299944             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  299945             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  299946             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  299947             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  299948             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  299949             :           a correspinding one in the AST_FILE_IO class!
  299950             :        */
  299951             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  299952             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  299953             :       /* \brief Typedef used for low level memory access.
  299954             :        */
  299955             :        // typedef unsigned char* TestType;
  299956             : 
  299957             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  299958             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  299959             :       /* \brief Typedef used to hold memory addresses as values.
  299960             :        */
  299961             :        // typedef unsigned long  AddressType;
  299962             : 
  299963             : 
  299964             : 
  299965             :        // necessary, to have direct access to the p_freepointer and the private methods !
  299966             :       /*! \brief friend class declaration to support AST File I/O */
  299967             :           friend class AST_FILE_IO;
  299968             : 
  299969             :       /*! \brief friend class declaration to support AST File I/O */
  299970             :           friend class SgVarArgStartOpStorageClass;
  299971             : 
  299972             :       /*! \brief friend class declaration to support AST File I/O */
  299973             :           friend class AstSpecificDataManagingClass;
  299974             : 
  299975             :       /*! \brief friend class declaration to support AST File I/O */
  299976             :           friend class AstSpecificDataManagingClassStorageClass;
  299977             :     public:
  299978             :       /*! \brief IR node constructor to support AST File I/O */
  299979             :           SgVarArgStartOp( const SgVarArgStartOpStorageClass& source );
  299980             : 
  299981             :  // private: // JJW hack
  299982             :        /*
  299983             :           name AST Memory Allocation Support Variables
  299984             :           Memory allocations support variables 
  299985             : 
  299986             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  299987             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  299988             :           and support the AST File I/O Mechanism.
  299989             :        */
  299990             :       /* */
  299991             : 
  299992             :     public:
  299993             : 
  299994             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  299995             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  299996             :       // virtual SgNode* addRegExpAttribute();
  299997             :       /*! \brief Support for AST matching using regular expression.
  299998             : 
  299999             :           This support is incomplete and the subject of current research to define 
  300000             :           RegEx trees to support inexact matching.
  300001             :        */
  300002             :           SgVarArgStartOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  300003             : 
  300004             : // *** COMMON CODE SECTION ENDS HERE ***
  300005             : 
  300006             : 
  300007             : // End of memberFunctionString
  300008             : // Start of memberFunctionString
  300009             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  300010             : 
  300011             :      // the generated cast function
  300012             :      // friend ROSE_DLL_API SgVarArgStartOp* isSgVarArgStartOp ( SgNode* s );
  300013             : 
  300014             :           typedef SgExpression base_node_type;
  300015             : 
  300016             : 
  300017             : // End of memberFunctionString
  300018             : // Start of memberFunctionString
  300019             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300020             : 
  300021             :           SgType* get_type() const override;
  300022             : 
  300023             : 
  300024             : // End of memberFunctionString
  300025             : // Start of memberFunctionString
  300026             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300027             : 
  300028             :           void post_construction_initialization() override;
  300029             : 
  300030             : 
  300031             : // End of memberFunctionString
  300032             : 
  300033             :      public: 
  300034             :          SgExpression* get_lhs_operand() const;
  300035             :          void set_lhs_operand(SgExpression* lhs_operand);
  300036             : 
  300037             :      public: 
  300038             :          SgExpression* get_rhs_operand() const;
  300039             :          void set_rhs_operand(SgExpression* rhs_operand);
  300040             : 
  300041             :      public: 
  300042             :          SgType* get_expression_type() const;
  300043             :          void set_expression_type(SgType* expression_type);
  300044             : 
  300045             : 
  300046             :      public: 
  300047             :          virtual ~SgVarArgStartOp();
  300048             : 
  300049             : 
  300050             :      public: 
  300051             :          SgVarArgStartOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand = NULL, SgExpression* rhs_operand = NULL, SgType* expression_type = NULL); 
  300052             :          SgVarArgStartOp(SgExpression* lhs_operand, SgExpression* rhs_operand, SgType* expression_type); 
  300053             : 
  300054             :     protected:
  300055             : // Start of memberFunctionString
  300056             : SgExpression* p_lhs_operand;
  300057             :           
  300058             : // End of memberFunctionString
  300059             : // Start of memberFunctionString
  300060             : SgExpression* p_rhs_operand;
  300061             :           
  300062             : // End of memberFunctionString
  300063             : // Start of memberFunctionString
  300064             : SgType* p_expression_type;
  300065             :           
  300066             : // End of memberFunctionString
  300067             : 
  300068             :     friend struct Rose::Traits::generated::describe_node_t<SgVarArgStartOp>;
  300069             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgStartOp, SgExpression*,&SgVarArgStartOp::p_lhs_operand>;
  300070             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgStartOp, SgExpression*,&SgVarArgStartOp::p_rhs_operand>;
  300071             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgStartOp, SgType*,&SgVarArgStartOp::p_expression_type>;
  300072             : 
  300073             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300074             : 
  300075             : 
  300076             :    };
  300077             : #endif
  300078             : 
  300079             : // postdeclarations for SgVarArgStartOp
  300080             : 
  300081             : /* #line 300082 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300082             : 
  300083             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  300084             : 
  300085             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300086             : 
  300087             : 
  300088             : /* #line 300089 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300089             : 
  300090             : 
  300091             : 
  300092             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300093             : 
  300094             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  300095             : //      This code is automatically generated for each 
  300096             : //      terminal and non-terminal within the defined 
  300097             : //      grammar.  There is a simple way to change the 
  300098             : //      code to fix bugs etc.  See the ROSE README file
  300099             : //      for directions.
  300100             : 
  300101             : // tps: (02/22/2010): Adding DLL export requirements
  300102             : #include "rosedll.h"
  300103             : 
  300104             : // predeclarations for SgVarArgOp
  300105             : 
  300106             : /* #line 300107 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300107             : 
  300108             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  300109             : 
  300110             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300111             : 
  300112             : #if 1
  300113             : // Class Definition for SgVarArgOp
  300114             : class ROSE_DLL_API SgVarArgOp  : public SgExpression
  300115             :    {
  300116             :      public:
  300117             : 
  300118             : 
  300119             : /* #line 300120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300120             : 
  300121             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  300122             : // Start of memberFunctionString
  300123             : /* #line 1098 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300124             : 
  300125             : 
  300126             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  300127             :           virtual unsigned int cfgIndexForEnd() const override;
  300128             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  300129             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  300130             : #endif
  300131             : 
  300132             :           int replace_expression(SgExpression*, SgExpression*) override ROSE_DEPRECATED_FUNCTION;
  300133             :        // void set_type( SgType* type );
  300134             : 
  300135             : 
  300136             : 
  300137             : // End of memberFunctionString
  300138             : // Start of memberFunctionString
  300139             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  300140             : 
  300141             : // *** COMMON CODE SECTION BEGINS HERE ***
  300142             : 
  300143             :     public:
  300144             : 
  300145             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  300146             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  300147             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  300148             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  300149             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  300150             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  300151             : 
  300152             :       /*! \brief returns a string representing the class name */
  300153             :           virtual std::string class_name() const override;
  300154             : 
  300155             :       /*! \brief returns new style SageIII enum values */
  300156             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  300157             : 
  300158             :       /*! \brief static variant value */
  300159             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  300160             :        // static const VariantT static_variant = V_SgVarArgOp;
  300161             :           enum { static_variant = V_SgVarArgOp };
  300162             : 
  300163             :        /* the generated cast function */
  300164             :       /*! \brief Casts pointer from base class to derived class */
  300165             :           ROSE_DLL_API friend       SgVarArgOp* isSgVarArgOp(       SgNode * s );
  300166             : 
  300167             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  300168             :           ROSE_DLL_API friend const SgVarArgOp* isSgVarArgOp( const SgNode * s );
  300169             : 
  300170             :      // ******************************************
  300171             :      // * Memory Pool / New / Delete
  300172             :      // ******************************************
  300173             : 
  300174             :      public:
  300175             :           /// \private
  300176             :           static const unsigned pool_size; //
  300177             :           /// \private
  300178             :           static std::vector<unsigned char *> pools; //
  300179             :           /// \private
  300180             :           static SgVarArgOp * next_node; // 
  300181             : 
  300182             :           /// \private
  300183             :           static unsigned long initializeStorageClassArray(SgVarArgOpStorageClass *); //
  300184             : 
  300185             :           /// \private
  300186             :           static void clearMemoryPool(); //
  300187             :           static void deleteMemoryPool(); //
  300188             : 
  300189             :           /// \private
  300190             :           static void extendMemoryPoolForFileIO(); //
  300191             : 
  300192             :           /// \private
  300193             :           static SgVarArgOp * getPointerFromGlobalIndex(unsigned long); //
  300194             :           /// \private
  300195             :           static SgVarArgOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  300196             : 
  300197             :           /// \private
  300198             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  300199             :           /// \private
  300200             :           static void resetValidFreepointers(); //
  300201             :           /// \private
  300202             :           static unsigned long getNumberOfLastValidPointer(); //
  300203             : 
  300204             : 
  300205             : #if defined(INLINE_FUNCTIONS)
  300206             :       /*! \brief returns pointer to newly allocated IR node */
  300207             :           inline void *operator new (size_t size);
  300208             : #else
  300209             :       /*! \brief returns pointer to newly allocated IR node */
  300210             :           void *operator new (size_t size);
  300211             : #endif
  300212             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  300213             :           void operator delete (void* pointer, size_t size);
  300214             : 
  300215             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  300216           0 :           void operator delete (void* pointer)
  300217             :              {
  300218             :             // This is the generated delete operator...
  300219           0 :                SgVarArgOp::operator delete (pointer,sizeof(SgVarArgOp));
  300220             :              }
  300221             : 
  300222             :       /*! \brief Returns the total number of IR nodes of this type */
  300223             :           static size_t numberOfNodes();
  300224             : 
  300225             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  300226             :           static size_t memoryUsage();
  300227             : 
  300228             :       // End of scope which started in IR nodes specific code 
  300229             :       /* */
  300230             : 
  300231             :       /* name Internal Functions
  300232             :           \brief Internal functions ... incomplete-documentation
  300233             : 
  300234             :           These functions have been made public as part of the design, but they are suggested for internal use 
  300235             :           or by particularly knowledgeable users for specialized tools or applications.
  300236             : 
  300237             :           \internal We could not make these private because they are required by user for special purposes. And 
  300238             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  300239             :          
  300240             :        */
  300241             : 
  300242             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  300243             :        // overridden in every class by *generated* implementation
  300244             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  300245             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  300246             :        // MS: 06/28/02 container of names of variables or container indices 
  300247             :        // used used in the traversal to access AST successor nodes
  300248             :        // overridden in every class by *generated* implementation
  300249             :       /*! \brief container of names of variables or container indices used used in the traversal
  300250             :           to access AST successor nodes overridden in every class by *generated* implementation */
  300251             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  300252             : 
  300253             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  300254             :        // than all the vector copies. The implementation for these functions is generated for each class.
  300255             :       /*! \brief return number of children in the traversal successor list */
  300256             :           virtual size_t get_numberOfTraversalSuccessors() override;
  300257             :       /*! \brief index-based access to traversal successors by index number */
  300258             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  300259             :       /*! \brief index-based access to traversal successors by child node */
  300260             :           virtual size_t get_childIndex(SgNode *child) override;
  300261             : 
  300262             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  300263             :        // MS: 08/16/2002 method for generating RTI information
  300264             :       /*! \brief return C++ Runtime-Time-Information */
  300265             :           virtual RTIReturnType roseRTI() override;
  300266             : #endif
  300267             :       /* */
  300268             : 
  300269             : 
  300270             : 
  300271             :       /* name Deprecated Functions
  300272             :           \brief Deprecated functions ... incomplete-documentation
  300273             : 
  300274             :           These functions have been deprecated from use.
  300275             :        */
  300276             :       /* */
  300277             : 
  300278             :       /*! returns a C style string (char*) representing the class name */
  300279             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  300280             : 
  300281             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  300282             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  300283             : #if 0
  300284             :       /*! returns old style Sage II enum values */
  300285             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  300286             :       /*! returns old style Sage II enum values */
  300287             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  300288             : #endif
  300289             :       /* */
  300290             : 
  300291             : 
  300292             : 
  300293             : 
  300294             :      public:
  300295             :       /* name Traversal Support Functions
  300296             :           \brief Traversal support functions ... incomplete-documentation
  300297             : 
  300298             :           These functions have been made public as part of the design, but they are suggested for internal use 
  300299             :           or by particularly knowledgable users for specialized tools or applications.
  300300             :        */
  300301             :       /* */
  300302             : 
  300303             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  300304             :        // (inferior to ROSE traversal mechanism, experimental).
  300305             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  300306             :        */
  300307             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  300308             : 
  300309             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  300310             :       /*! \brief support for the classic visitor pattern done in GoF */
  300311             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  300312             : 
  300313             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  300314             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  300315             :        */
  300316             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  300317             : 
  300318             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  300319             :        */
  300320             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  300321             : 
  300322             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  300323             :        // This traversal helps support internal tools that call static member functions.
  300324             :        // note: this function operates on the memory pools.
  300325             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  300326             :        */
  300327             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  300328             :       /* */
  300329             : 
  300330             : 
  300331             :      public:
  300332             :       /* name Memory Allocation Functions
  300333             :           \brief Memory allocations functions ... incomplete-documentation
  300334             : 
  300335             :           These functions have been made public as part of the design, but they are suggested for internal use 
  300336             :           or by particularly knowledgable users for specialized tools or applications.
  300337             :        */
  300338             :       /* */
  300339             : 
  300340             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  300341             : 
  300342             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  300343             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  300344             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  300345             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  300346             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  300347             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  300348             :           being used with the AST File I/O mechanism.
  300349             :        */
  300350             :           virtual bool isInMemoryPool() override;
  300351             : 
  300352             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  300353             : 
  300354             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  300355             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  300356             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  300357             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  300358             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  300359             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  300360             :           being used with the AST File I/O mechanism.
  300361             :        */
  300362             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  300363             : 
  300364             :       // DQ (4/30/2006): Modified to be a const function.
  300365             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  300366             : 
  300367             :           This functions is part of general support for many possible tools to operate 
  300368             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  300369             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  300370             :           less than the set of pointers used by the AST file I/O. This is part of
  300371             :           work implemented by Andreas, and support tools such as the AST graph generation.
  300372             : 
  300373             :           \warning This function can return unexpected data members and thus the 
  300374             :                    order and the number of elements is unpredicable and subject 
  300375             :                    to change.
  300376             : 
  300377             :           \returns STL vector of pairs of SgNode* and strings
  300378             :        */
  300379             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  300380             : 
  300381             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  300382             : 
  300383             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  300384             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  300385             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  300386             : 
  300387             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  300388             :                    and subject to change.
  300389             :        */
  300390             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  300391             : 
  300392             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  300393             : 
  300394             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  300395             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  300396             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  300397             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  300398             : 
  300399             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  300400             : 
  300401             :           \returns long
  300402             :        */
  300403             :           virtual long getChildIndex( SgNode* childNode ) const override;
  300404             : 
  300405             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  300406             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  300407             :       /* \brief Constructor for use by AST File I/O Mechanism
  300408             : 
  300409             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  300410             :           which obtained via fast binary file I/O from disk.
  300411             :        */
  300412             :        // SgVarArgOp( SgVarArgOpStorageClass& source );
  300413             : 
  300414             : 
  300415             : 
  300416             : 
  300417             : 
  300418             :  // JH (10/24/2005): methods added to support the ast file IO
  300419             :     private:
  300420             : 
  300421             :       /* name AST Memory Allocation Support Functions
  300422             :           \brief Memory allocations support....
  300423             : 
  300424             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  300425             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  300426             :           and support the AST File I/O Mechanism.
  300427             :        */
  300428             :       /* */
  300429             : 
  300430             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  300431             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  300432             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  300433             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  300434             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  300435             :           a correspinding one in the AST_FILE_IO class!
  300436             :        */
  300437             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  300438             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  300439             :       /* \brief Typedef used for low level memory access.
  300440             :        */
  300441             :        // typedef unsigned char* TestType;
  300442             : 
  300443             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  300444             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  300445             :       /* \brief Typedef used to hold memory addresses as values.
  300446             :        */
  300447             :        // typedef unsigned long  AddressType;
  300448             : 
  300449             : 
  300450             : 
  300451             :        // necessary, to have direct access to the p_freepointer and the private methods !
  300452             :       /*! \brief friend class declaration to support AST File I/O */
  300453             :           friend class AST_FILE_IO;
  300454             : 
  300455             :       /*! \brief friend class declaration to support AST File I/O */
  300456             :           friend class SgVarArgOpStorageClass;
  300457             : 
  300458             :       /*! \brief friend class declaration to support AST File I/O */
  300459             :           friend class AstSpecificDataManagingClass;
  300460             : 
  300461             :       /*! \brief friend class declaration to support AST File I/O */
  300462             :           friend class AstSpecificDataManagingClassStorageClass;
  300463             :     public:
  300464             :       /*! \brief IR node constructor to support AST File I/O */
  300465             :           SgVarArgOp( const SgVarArgOpStorageClass& source );
  300466             : 
  300467             :  // private: // JJW hack
  300468             :        /*
  300469             :           name AST Memory Allocation Support Variables
  300470             :           Memory allocations support variables 
  300471             : 
  300472             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  300473             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  300474             :           and support the AST File I/O Mechanism.
  300475             :        */
  300476             :       /* */
  300477             : 
  300478             :     public:
  300479             : 
  300480             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  300481             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  300482             :       // virtual SgNode* addRegExpAttribute();
  300483             :       /*! \brief Support for AST matching using regular expression.
  300484             : 
  300485             :           This support is incomplete and the subject of current research to define 
  300486             :           RegEx trees to support inexact matching.
  300487             :        */
  300488             :           SgVarArgOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  300489             : 
  300490             : // *** COMMON CODE SECTION ENDS HERE ***
  300491             : 
  300492             : 
  300493             : // End of memberFunctionString
  300494             : // Start of memberFunctionString
  300495             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  300496             : 
  300497             :      // the generated cast function
  300498             :      // friend ROSE_DLL_API SgVarArgOp* isSgVarArgOp ( SgNode* s );
  300499             : 
  300500             :           typedef SgExpression base_node_type;
  300501             : 
  300502             : 
  300503             : // End of memberFunctionString
  300504             : // Start of memberFunctionString
  300505             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300506             : 
  300507             :           SgType* get_type() const override;
  300508             : 
  300509             : 
  300510             : // End of memberFunctionString
  300511             : // Start of memberFunctionString
  300512             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300513             : 
  300514             :           void post_construction_initialization() override;
  300515             : 
  300516             : 
  300517             : // End of memberFunctionString
  300518             : 
  300519             :      public: 
  300520             :          SgExpression* get_operand_expr() const;
  300521             :          void set_operand_expr(SgExpression* operand_expr);
  300522             : 
  300523             :      public: 
  300524             :          SgType* get_expression_type() const;
  300525             :          void set_expression_type(SgType* expression_type);
  300526             : 
  300527             : 
  300528             :      public: 
  300529             :          virtual ~SgVarArgOp();
  300530             : 
  300531             : 
  300532             :      public: 
  300533             :          SgVarArgOp(Sg_File_Info* startOfConstruct , SgExpression* operand_expr = NULL, SgType* expression_type = NULL); 
  300534             :          SgVarArgOp(SgExpression* operand_expr, SgType* expression_type); 
  300535             : 
  300536             :     protected:
  300537             : // Start of memberFunctionString
  300538             : SgExpression* p_operand_expr;
  300539             :           
  300540             : // End of memberFunctionString
  300541             : // Start of memberFunctionString
  300542             : SgType* p_expression_type;
  300543             :           
  300544             : // End of memberFunctionString
  300545             : 
  300546             :     friend struct Rose::Traits::generated::describe_node_t<SgVarArgOp>;
  300547             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgOp, SgExpression*,&SgVarArgOp::p_operand_expr>;
  300548             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgOp, SgType*,&SgVarArgOp::p_expression_type>;
  300549             : 
  300550             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300551             : 
  300552             : 
  300553             :    };
  300554             : #endif
  300555             : 
  300556             : // postdeclarations for SgVarArgOp
  300557             : 
  300558             : /* #line 300559 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300559             : 
  300560             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  300561             : 
  300562             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300563             : 
  300564             : 
  300565             : /* #line 300566 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300566             : 
  300567             : 
  300568             : 
  300569             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300570             : 
  300571             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  300572             : //      This code is automatically generated for each 
  300573             : //      terminal and non-terminal within the defined 
  300574             : //      grammar.  There is a simple way to change the 
  300575             : //      code to fix bugs etc.  See the ROSE README file
  300576             : //      for directions.
  300577             : 
  300578             : // tps: (02/22/2010): Adding DLL export requirements
  300579             : #include "rosedll.h"
  300580             : 
  300581             : // predeclarations for SgVarArgEndOp
  300582             : 
  300583             : /* #line 300584 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300584             : 
  300585             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  300586             : 
  300587             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  300588             : 
  300589             : #if 1
  300590             : // Class Definition for SgVarArgEndOp
  300591             : class ROSE_DLL_API SgVarArgEndOp  : public SgExpression
  300592             :    {
  300593             :      public:
  300594             : 
  300595             : 
  300596             : /* #line 300597 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  300597             : 
  300598             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  300599             : // Start of memberFunctionString
  300600             : /* #line 1111 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300601             : 
  300602             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  300603             :           virtual unsigned int cfgIndexForEnd() const override;
  300604             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  300605             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  300606             : #endif
  300607             : 
  300608             :           int replace_expression(SgExpression*, SgExpression*) override ROSE_DEPRECATED_FUNCTION;
  300609             : 
  300610             : 
  300611             : 
  300612             : // End of memberFunctionString
  300613             : // Start of memberFunctionString
  300614             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  300615             : 
  300616             : // *** COMMON CODE SECTION BEGINS HERE ***
  300617             : 
  300618             :     public:
  300619             : 
  300620             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  300621             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  300622             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  300623             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  300624             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  300625             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  300626             : 
  300627             :       /*! \brief returns a string representing the class name */
  300628             :           virtual std::string class_name() const override;
  300629             : 
  300630             :       /*! \brief returns new style SageIII enum values */
  300631             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  300632             : 
  300633             :       /*! \brief static variant value */
  300634             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  300635             :        // static const VariantT static_variant = V_SgVarArgEndOp;
  300636             :           enum { static_variant = V_SgVarArgEndOp };
  300637             : 
  300638             :        /* the generated cast function */
  300639             :       /*! \brief Casts pointer from base class to derived class */
  300640             :           ROSE_DLL_API friend       SgVarArgEndOp* isSgVarArgEndOp(       SgNode * s );
  300641             : 
  300642             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  300643             :           ROSE_DLL_API friend const SgVarArgEndOp* isSgVarArgEndOp( const SgNode * s );
  300644             : 
  300645             :      // ******************************************
  300646             :      // * Memory Pool / New / Delete
  300647             :      // ******************************************
  300648             : 
  300649             :      public:
  300650             :           /// \private
  300651             :           static const unsigned pool_size; //
  300652             :           /// \private
  300653             :           static std::vector<unsigned char *> pools; //
  300654             :           /// \private
  300655             :           static SgVarArgEndOp * next_node; // 
  300656             : 
  300657             :           /// \private
  300658             :           static unsigned long initializeStorageClassArray(SgVarArgEndOpStorageClass *); //
  300659             : 
  300660             :           /// \private
  300661             :           static void clearMemoryPool(); //
  300662             :           static void deleteMemoryPool(); //
  300663             : 
  300664             :           /// \private
  300665             :           static void extendMemoryPoolForFileIO(); //
  300666             : 
  300667             :           /// \private
  300668             :           static SgVarArgEndOp * getPointerFromGlobalIndex(unsigned long); //
  300669             :           /// \private
  300670             :           static SgVarArgEndOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  300671             : 
  300672             :           /// \private
  300673             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  300674             :           /// \private
  300675             :           static void resetValidFreepointers(); //
  300676             :           /// \private
  300677             :           static unsigned long getNumberOfLastValidPointer(); //
  300678             : 
  300679             : 
  300680             : #if defined(INLINE_FUNCTIONS)
  300681             :       /*! \brief returns pointer to newly allocated IR node */
  300682             :           inline void *operator new (size_t size);
  300683             : #else
  300684             :       /*! \brief returns pointer to newly allocated IR node */
  300685             :           void *operator new (size_t size);
  300686             : #endif
  300687             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  300688             :           void operator delete (void* pointer, size_t size);
  300689             : 
  300690             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  300691           0 :           void operator delete (void* pointer)
  300692             :              {
  300693             :             // This is the generated delete operator...
  300694           0 :                SgVarArgEndOp::operator delete (pointer,sizeof(SgVarArgEndOp));
  300695             :              }
  300696             : 
  300697             :       /*! \brief Returns the total number of IR nodes of this type */
  300698             :           static size_t numberOfNodes();
  300699             : 
  300700             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  300701             :           static size_t memoryUsage();
  300702             : 
  300703             :       // End of scope which started in IR nodes specific code 
  300704             :       /* */
  300705             : 
  300706             :       /* name Internal Functions
  300707             :           \brief Internal functions ... incomplete-documentation
  300708             : 
  300709             :           These functions have been made public as part of the design, but they are suggested for internal use 
  300710             :           or by particularly knowledgeable users for specialized tools or applications.
  300711             : 
  300712             :           \internal We could not make these private because they are required by user for special purposes. And 
  300713             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  300714             :          
  300715             :        */
  300716             : 
  300717             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  300718             :        // overridden in every class by *generated* implementation
  300719             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  300720             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  300721             :        // MS: 06/28/02 container of names of variables or container indices 
  300722             :        // used used in the traversal to access AST successor nodes
  300723             :        // overridden in every class by *generated* implementation
  300724             :       /*! \brief container of names of variables or container indices used used in the traversal
  300725             :           to access AST successor nodes overridden in every class by *generated* implementation */
  300726             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  300727             : 
  300728             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  300729             :        // than all the vector copies. The implementation for these functions is generated for each class.
  300730             :       /*! \brief return number of children in the traversal successor list */
  300731             :           virtual size_t get_numberOfTraversalSuccessors() override;
  300732             :       /*! \brief index-based access to traversal successors by index number */
  300733             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  300734             :       /*! \brief index-based access to traversal successors by child node */
  300735             :           virtual size_t get_childIndex(SgNode *child) override;
  300736             : 
  300737             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  300738             :        // MS: 08/16/2002 method for generating RTI information
  300739             :       /*! \brief return C++ Runtime-Time-Information */
  300740             :           virtual RTIReturnType roseRTI() override;
  300741             : #endif
  300742             :       /* */
  300743             : 
  300744             : 
  300745             : 
  300746             :       /* name Deprecated Functions
  300747             :           \brief Deprecated functions ... incomplete-documentation
  300748             : 
  300749             :           These functions have been deprecated from use.
  300750             :        */
  300751             :       /* */
  300752             : 
  300753             :       /*! returns a C style string (char*) representing the class name */
  300754             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  300755             : 
  300756             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  300757             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  300758             : #if 0
  300759             :       /*! returns old style Sage II enum values */
  300760             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  300761             :       /*! returns old style Sage II enum values */
  300762             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  300763             : #endif
  300764             :       /* */
  300765             : 
  300766             : 
  300767             : 
  300768             : 
  300769             :      public:
  300770             :       /* name Traversal Support Functions
  300771             :           \brief Traversal support functions ... incomplete-documentation
  300772             : 
  300773             :           These functions have been made public as part of the design, but they are suggested for internal use 
  300774             :           or by particularly knowledgable users for specialized tools or applications.
  300775             :        */
  300776             :       /* */
  300777             : 
  300778             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  300779             :        // (inferior to ROSE traversal mechanism, experimental).
  300780             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  300781             :        */
  300782             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  300783             : 
  300784             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  300785             :       /*! \brief support for the classic visitor pattern done in GoF */
  300786             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  300787             : 
  300788             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  300789             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  300790             :        */
  300791             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  300792             : 
  300793             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  300794             :        */
  300795             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  300796             : 
  300797             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  300798             :        // This traversal helps support internal tools that call static member functions.
  300799             :        // note: this function operates on the memory pools.
  300800             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  300801             :        */
  300802             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  300803             :       /* */
  300804             : 
  300805             : 
  300806             :      public:
  300807             :       /* name Memory Allocation Functions
  300808             :           \brief Memory allocations functions ... incomplete-documentation
  300809             : 
  300810             :           These functions have been made public as part of the design, but they are suggested for internal use 
  300811             :           or by particularly knowledgable users for specialized tools or applications.
  300812             :        */
  300813             :       /* */
  300814             : 
  300815             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  300816             : 
  300817             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  300818             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  300819             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  300820             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  300821             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  300822             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  300823             :           being used with the AST File I/O mechanism.
  300824             :        */
  300825             :           virtual bool isInMemoryPool() override;
  300826             : 
  300827             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  300828             : 
  300829             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  300830             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  300831             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  300832             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  300833             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  300834             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  300835             :           being used with the AST File I/O mechanism.
  300836             :        */
  300837             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  300838             : 
  300839             :       // DQ (4/30/2006): Modified to be a const function.
  300840             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  300841             : 
  300842             :           This functions is part of general support for many possible tools to operate 
  300843             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  300844             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  300845             :           less than the set of pointers used by the AST file I/O. This is part of
  300846             :           work implemented by Andreas, and support tools such as the AST graph generation.
  300847             : 
  300848             :           \warning This function can return unexpected data members and thus the 
  300849             :                    order and the number of elements is unpredicable and subject 
  300850             :                    to change.
  300851             : 
  300852             :           \returns STL vector of pairs of SgNode* and strings
  300853             :        */
  300854             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  300855             : 
  300856             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  300857             : 
  300858             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  300859             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  300860             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  300861             : 
  300862             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  300863             :                    and subject to change.
  300864             :        */
  300865             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  300866             : 
  300867             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  300868             : 
  300869             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  300870             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  300871             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  300872             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  300873             : 
  300874             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  300875             : 
  300876             :           \returns long
  300877             :        */
  300878             :           virtual long getChildIndex( SgNode* childNode ) const override;
  300879             : 
  300880             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  300881             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  300882             :       /* \brief Constructor for use by AST File I/O Mechanism
  300883             : 
  300884             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  300885             :           which obtained via fast binary file I/O from disk.
  300886             :        */
  300887             :        // SgVarArgEndOp( SgVarArgEndOpStorageClass& source );
  300888             : 
  300889             : 
  300890             : 
  300891             : 
  300892             : 
  300893             :  // JH (10/24/2005): methods added to support the ast file IO
  300894             :     private:
  300895             : 
  300896             :       /* name AST Memory Allocation Support Functions
  300897             :           \brief Memory allocations support....
  300898             : 
  300899             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  300900             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  300901             :           and support the AST File I/O Mechanism.
  300902             :        */
  300903             :       /* */
  300904             : 
  300905             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  300906             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  300907             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  300908             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  300909             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  300910             :           a correspinding one in the AST_FILE_IO class!
  300911             :        */
  300912             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  300913             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  300914             :       /* \brief Typedef used for low level memory access.
  300915             :        */
  300916             :        // typedef unsigned char* TestType;
  300917             : 
  300918             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  300919             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  300920             :       /* \brief Typedef used to hold memory addresses as values.
  300921             :        */
  300922             :        // typedef unsigned long  AddressType;
  300923             : 
  300924             : 
  300925             : 
  300926             :        // necessary, to have direct access to the p_freepointer and the private methods !
  300927             :       /*! \brief friend class declaration to support AST File I/O */
  300928             :           friend class AST_FILE_IO;
  300929             : 
  300930             :       /*! \brief friend class declaration to support AST File I/O */
  300931             :           friend class SgVarArgEndOpStorageClass;
  300932             : 
  300933             :       /*! \brief friend class declaration to support AST File I/O */
  300934             :           friend class AstSpecificDataManagingClass;
  300935             : 
  300936             :       /*! \brief friend class declaration to support AST File I/O */
  300937             :           friend class AstSpecificDataManagingClassStorageClass;
  300938             :     public:
  300939             :       /*! \brief IR node constructor to support AST File I/O */
  300940             :           SgVarArgEndOp( const SgVarArgEndOpStorageClass& source );
  300941             : 
  300942             :  // private: // JJW hack
  300943             :        /*
  300944             :           name AST Memory Allocation Support Variables
  300945             :           Memory allocations support variables 
  300946             : 
  300947             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  300948             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  300949             :           and support the AST File I/O Mechanism.
  300950             :        */
  300951             :       /* */
  300952             : 
  300953             :     public:
  300954             : 
  300955             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  300956             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  300957             :       // virtual SgNode* addRegExpAttribute();
  300958             :       /*! \brief Support for AST matching using regular expression.
  300959             : 
  300960             :           This support is incomplete and the subject of current research to define 
  300961             :           RegEx trees to support inexact matching.
  300962             :        */
  300963             :           SgVarArgEndOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  300964             : 
  300965             : // *** COMMON CODE SECTION ENDS HERE ***
  300966             : 
  300967             : 
  300968             : // End of memberFunctionString
  300969             : // Start of memberFunctionString
  300970             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  300971             : 
  300972             :      // the generated cast function
  300973             :      // friend ROSE_DLL_API SgVarArgEndOp* isSgVarArgEndOp ( SgNode* s );
  300974             : 
  300975             :           typedef SgExpression base_node_type;
  300976             : 
  300977             : 
  300978             : // End of memberFunctionString
  300979             : // Start of memberFunctionString
  300980             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300981             : 
  300982             :           SgType* get_type() const override;
  300983             : 
  300984             : 
  300985             : // End of memberFunctionString
  300986             : // Start of memberFunctionString
  300987             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  300988             : 
  300989             :           void post_construction_initialization() override;
  300990             : 
  300991             : 
  300992             : // End of memberFunctionString
  300993             : 
  300994             :      public: 
  300995             :          SgExpression* get_operand_expr() const;
  300996             :          void set_operand_expr(SgExpression* operand_expr);
  300997             : 
  300998             :      public: 
  300999             :          SgType* get_expression_type() const;
  301000             :          void set_expression_type(SgType* expression_type);
  301001             : 
  301002             : 
  301003             :      public: 
  301004             :          virtual ~SgVarArgEndOp();
  301005             : 
  301006             : 
  301007             :      public: 
  301008             :          SgVarArgEndOp(Sg_File_Info* startOfConstruct , SgExpression* operand_expr = NULL, SgType* expression_type = NULL); 
  301009             :          SgVarArgEndOp(SgExpression* operand_expr, SgType* expression_type); 
  301010             : 
  301011             :     protected:
  301012             : // Start of memberFunctionString
  301013             : SgExpression* p_operand_expr;
  301014             :           
  301015             : // End of memberFunctionString
  301016             : // Start of memberFunctionString
  301017             : SgType* p_expression_type;
  301018             :           
  301019             : // End of memberFunctionString
  301020             : 
  301021             :     friend struct Rose::Traits::generated::describe_node_t<SgVarArgEndOp>;
  301022             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgEndOp, SgExpression*,&SgVarArgEndOp::p_operand_expr>;
  301023             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgEndOp, SgType*,&SgVarArgEndOp::p_expression_type>;
  301024             : 
  301025             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301026             : 
  301027             : 
  301028             :    };
  301029             : #endif
  301030             : 
  301031             : // postdeclarations for SgVarArgEndOp
  301032             : 
  301033             : /* #line 301034 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301034             : 
  301035             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  301036             : 
  301037             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301038             : 
  301039             : 
  301040             : /* #line 301041 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301041             : 
  301042             : 
  301043             : 
  301044             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301045             : 
  301046             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  301047             : //      This code is automatically generated for each 
  301048             : //      terminal and non-terminal within the defined 
  301049             : //      grammar.  There is a simple way to change the 
  301050             : //      code to fix bugs etc.  See the ROSE README file
  301051             : //      for directions.
  301052             : 
  301053             : // tps: (02/22/2010): Adding DLL export requirements
  301054             : #include "rosedll.h"
  301055             : 
  301056             : // predeclarations for SgVarArgCopyOp
  301057             : 
  301058             : /* #line 301059 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301059             : 
  301060             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  301061             : 
  301062             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301063             : 
  301064             : #if 1
  301065             : // Class Definition for SgVarArgCopyOp
  301066             : class ROSE_DLL_API SgVarArgCopyOp  : public SgExpression
  301067             :    {
  301068             :      public:
  301069             : 
  301070             : 
  301071             : /* #line 301072 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301072             : 
  301073             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  301074             : // Start of memberFunctionString
  301075             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  301076             : 
  301077             : // *** COMMON CODE SECTION BEGINS HERE ***
  301078             : 
  301079             :     public:
  301080             : 
  301081             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  301082             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  301083             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  301084             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  301085             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  301086             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  301087             : 
  301088             :       /*! \brief returns a string representing the class name */
  301089             :           virtual std::string class_name() const override;
  301090             : 
  301091             :       /*! \brief returns new style SageIII enum values */
  301092             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  301093             : 
  301094             :       /*! \brief static variant value */
  301095             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  301096             :        // static const VariantT static_variant = V_SgVarArgCopyOp;
  301097             :           enum { static_variant = V_SgVarArgCopyOp };
  301098             : 
  301099             :        /* the generated cast function */
  301100             :       /*! \brief Casts pointer from base class to derived class */
  301101             :           ROSE_DLL_API friend       SgVarArgCopyOp* isSgVarArgCopyOp(       SgNode * s );
  301102             : 
  301103             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  301104             :           ROSE_DLL_API friend const SgVarArgCopyOp* isSgVarArgCopyOp( const SgNode * s );
  301105             : 
  301106             :      // ******************************************
  301107             :      // * Memory Pool / New / Delete
  301108             :      // ******************************************
  301109             : 
  301110             :      public:
  301111             :           /// \private
  301112             :           static const unsigned pool_size; //
  301113             :           /// \private
  301114             :           static std::vector<unsigned char *> pools; //
  301115             :           /// \private
  301116             :           static SgVarArgCopyOp * next_node; // 
  301117             : 
  301118             :           /// \private
  301119             :           static unsigned long initializeStorageClassArray(SgVarArgCopyOpStorageClass *); //
  301120             : 
  301121             :           /// \private
  301122             :           static void clearMemoryPool(); //
  301123             :           static void deleteMemoryPool(); //
  301124             : 
  301125             :           /// \private
  301126             :           static void extendMemoryPoolForFileIO(); //
  301127             : 
  301128             :           /// \private
  301129             :           static SgVarArgCopyOp * getPointerFromGlobalIndex(unsigned long); //
  301130             :           /// \private
  301131             :           static SgVarArgCopyOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  301132             : 
  301133             :           /// \private
  301134             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  301135             :           /// \private
  301136             :           static void resetValidFreepointers(); //
  301137             :           /// \private
  301138             :           static unsigned long getNumberOfLastValidPointer(); //
  301139             : 
  301140             : 
  301141             : #if defined(INLINE_FUNCTIONS)
  301142             :       /*! \brief returns pointer to newly allocated IR node */
  301143             :           inline void *operator new (size_t size);
  301144             : #else
  301145             :       /*! \brief returns pointer to newly allocated IR node */
  301146             :           void *operator new (size_t size);
  301147             : #endif
  301148             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  301149             :           void operator delete (void* pointer, size_t size);
  301150             : 
  301151             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  301152           0 :           void operator delete (void* pointer)
  301153             :              {
  301154             :             // This is the generated delete operator...
  301155           0 :                SgVarArgCopyOp::operator delete (pointer,sizeof(SgVarArgCopyOp));
  301156             :              }
  301157             : 
  301158             :       /*! \brief Returns the total number of IR nodes of this type */
  301159             :           static size_t numberOfNodes();
  301160             : 
  301161             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  301162             :           static size_t memoryUsage();
  301163             : 
  301164             :       // End of scope which started in IR nodes specific code 
  301165             :       /* */
  301166             : 
  301167             :       /* name Internal Functions
  301168             :           \brief Internal functions ... incomplete-documentation
  301169             : 
  301170             :           These functions have been made public as part of the design, but they are suggested for internal use 
  301171             :           or by particularly knowledgeable users for specialized tools or applications.
  301172             : 
  301173             :           \internal We could not make these private because they are required by user for special purposes. And 
  301174             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  301175             :          
  301176             :        */
  301177             : 
  301178             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  301179             :        // overridden in every class by *generated* implementation
  301180             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  301181             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  301182             :        // MS: 06/28/02 container of names of variables or container indices 
  301183             :        // used used in the traversal to access AST successor nodes
  301184             :        // overridden in every class by *generated* implementation
  301185             :       /*! \brief container of names of variables or container indices used used in the traversal
  301186             :           to access AST successor nodes overridden in every class by *generated* implementation */
  301187             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  301188             : 
  301189             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  301190             :        // than all the vector copies. The implementation for these functions is generated for each class.
  301191             :       /*! \brief return number of children in the traversal successor list */
  301192             :           virtual size_t get_numberOfTraversalSuccessors() override;
  301193             :       /*! \brief index-based access to traversal successors by index number */
  301194             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  301195             :       /*! \brief index-based access to traversal successors by child node */
  301196             :           virtual size_t get_childIndex(SgNode *child) override;
  301197             : 
  301198             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  301199             :        // MS: 08/16/2002 method for generating RTI information
  301200             :       /*! \brief return C++ Runtime-Time-Information */
  301201             :           virtual RTIReturnType roseRTI() override;
  301202             : #endif
  301203             :       /* */
  301204             : 
  301205             : 
  301206             : 
  301207             :       /* name Deprecated Functions
  301208             :           \brief Deprecated functions ... incomplete-documentation
  301209             : 
  301210             :           These functions have been deprecated from use.
  301211             :        */
  301212             :       /* */
  301213             : 
  301214             :       /*! returns a C style string (char*) representing the class name */
  301215             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  301216             : 
  301217             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  301218             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  301219             : #if 0
  301220             :       /*! returns old style Sage II enum values */
  301221             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  301222             :       /*! returns old style Sage II enum values */
  301223             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  301224             : #endif
  301225             :       /* */
  301226             : 
  301227             : 
  301228             : 
  301229             : 
  301230             :      public:
  301231             :       /* name Traversal Support Functions
  301232             :           \brief Traversal support functions ... incomplete-documentation
  301233             : 
  301234             :           These functions have been made public as part of the design, but they are suggested for internal use 
  301235             :           or by particularly knowledgable users for specialized tools or applications.
  301236             :        */
  301237             :       /* */
  301238             : 
  301239             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  301240             :        // (inferior to ROSE traversal mechanism, experimental).
  301241             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  301242             :        */
  301243             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  301244             : 
  301245             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  301246             :       /*! \brief support for the classic visitor pattern done in GoF */
  301247             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  301248             : 
  301249             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  301250             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  301251             :        */
  301252             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  301253             : 
  301254             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  301255             :        */
  301256             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  301257             : 
  301258             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  301259             :        // This traversal helps support internal tools that call static member functions.
  301260             :        // note: this function operates on the memory pools.
  301261             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  301262             :        */
  301263             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  301264             :       /* */
  301265             : 
  301266             : 
  301267             :      public:
  301268             :       /* name Memory Allocation Functions
  301269             :           \brief Memory allocations functions ... incomplete-documentation
  301270             : 
  301271             :           These functions have been made public as part of the design, but they are suggested for internal use 
  301272             :           or by particularly knowledgable users for specialized tools or applications.
  301273             :        */
  301274             :       /* */
  301275             : 
  301276             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  301277             : 
  301278             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  301279             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  301280             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  301281             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  301282             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  301283             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  301284             :           being used with the AST File I/O mechanism.
  301285             :        */
  301286             :           virtual bool isInMemoryPool() override;
  301287             : 
  301288             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  301289             : 
  301290             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  301291             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  301292             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  301293             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  301294             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  301295             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  301296             :           being used with the AST File I/O mechanism.
  301297             :        */
  301298             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  301299             : 
  301300             :       // DQ (4/30/2006): Modified to be a const function.
  301301             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  301302             : 
  301303             :           This functions is part of general support for many possible tools to operate 
  301304             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  301305             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  301306             :           less than the set of pointers used by the AST file I/O. This is part of
  301307             :           work implemented by Andreas, and support tools such as the AST graph generation.
  301308             : 
  301309             :           \warning This function can return unexpected data members and thus the 
  301310             :                    order and the number of elements is unpredicable and subject 
  301311             :                    to change.
  301312             : 
  301313             :           \returns STL vector of pairs of SgNode* and strings
  301314             :        */
  301315             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  301316             : 
  301317             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  301318             : 
  301319             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  301320             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  301321             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  301322             : 
  301323             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  301324             :                    and subject to change.
  301325             :        */
  301326             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  301327             : 
  301328             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  301329             : 
  301330             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  301331             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  301332             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  301333             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  301334             : 
  301335             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  301336             : 
  301337             :           \returns long
  301338             :        */
  301339             :           virtual long getChildIndex( SgNode* childNode ) const override;
  301340             : 
  301341             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  301342             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  301343             :       /* \brief Constructor for use by AST File I/O Mechanism
  301344             : 
  301345             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  301346             :           which obtained via fast binary file I/O from disk.
  301347             :        */
  301348             :        // SgVarArgCopyOp( SgVarArgCopyOpStorageClass& source );
  301349             : 
  301350             : 
  301351             : 
  301352             : 
  301353             : 
  301354             :  // JH (10/24/2005): methods added to support the ast file IO
  301355             :     private:
  301356             : 
  301357             :       /* name AST Memory Allocation Support Functions
  301358             :           \brief Memory allocations support....
  301359             : 
  301360             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  301361             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  301362             :           and support the AST File I/O Mechanism.
  301363             :        */
  301364             :       /* */
  301365             : 
  301366             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  301367             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  301368             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  301369             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  301370             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  301371             :           a correspinding one in the AST_FILE_IO class!
  301372             :        */
  301373             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  301374             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  301375             :       /* \brief Typedef used for low level memory access.
  301376             :        */
  301377             :        // typedef unsigned char* TestType;
  301378             : 
  301379             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  301380             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  301381             :       /* \brief Typedef used to hold memory addresses as values.
  301382             :        */
  301383             :        // typedef unsigned long  AddressType;
  301384             : 
  301385             : 
  301386             : 
  301387             :        // necessary, to have direct access to the p_freepointer and the private methods !
  301388             :       /*! \brief friend class declaration to support AST File I/O */
  301389             :           friend class AST_FILE_IO;
  301390             : 
  301391             :       /*! \brief friend class declaration to support AST File I/O */
  301392             :           friend class SgVarArgCopyOpStorageClass;
  301393             : 
  301394             :       /*! \brief friend class declaration to support AST File I/O */
  301395             :           friend class AstSpecificDataManagingClass;
  301396             : 
  301397             :       /*! \brief friend class declaration to support AST File I/O */
  301398             :           friend class AstSpecificDataManagingClassStorageClass;
  301399             :     public:
  301400             :       /*! \brief IR node constructor to support AST File I/O */
  301401             :           SgVarArgCopyOp( const SgVarArgCopyOpStorageClass& source );
  301402             : 
  301403             :  // private: // JJW hack
  301404             :        /*
  301405             :           name AST Memory Allocation Support Variables
  301406             :           Memory allocations support variables 
  301407             : 
  301408             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  301409             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  301410             :           and support the AST File I/O Mechanism.
  301411             :        */
  301412             :       /* */
  301413             : 
  301414             :     public:
  301415             : 
  301416             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  301417             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  301418             :       // virtual SgNode* addRegExpAttribute();
  301419             :       /*! \brief Support for AST matching using regular expression.
  301420             : 
  301421             :           This support is incomplete and the subject of current research to define 
  301422             :           RegEx trees to support inexact matching.
  301423             :        */
  301424             :           SgVarArgCopyOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  301425             : 
  301426             : // *** COMMON CODE SECTION ENDS HERE ***
  301427             : 
  301428             : 
  301429             : // End of memberFunctionString
  301430             : // Start of memberFunctionString
  301431             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  301432             : 
  301433             :      // the generated cast function
  301434             :      // friend ROSE_DLL_API SgVarArgCopyOp* isSgVarArgCopyOp ( SgNode* s );
  301435             : 
  301436             :           typedef SgExpression base_node_type;
  301437             : 
  301438             : 
  301439             : // End of memberFunctionString
  301440             : // Start of memberFunctionString
  301441             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  301442             : 
  301443             :           SgType* get_type() const override;
  301444             : 
  301445             : 
  301446             : // End of memberFunctionString
  301447             : // Start of memberFunctionString
  301448             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  301449             : 
  301450             :           void post_construction_initialization() override;
  301451             : 
  301452             : 
  301453             : // End of memberFunctionString
  301454             : 
  301455             :      public: 
  301456             :          SgExpression* get_lhs_operand() const;
  301457             :          void set_lhs_operand(SgExpression* lhs_operand);
  301458             : 
  301459             :      public: 
  301460             :          SgExpression* get_rhs_operand() const;
  301461             :          void set_rhs_operand(SgExpression* rhs_operand);
  301462             : 
  301463             :      public: 
  301464             :          SgType* get_expression_type() const;
  301465             :          void set_expression_type(SgType* expression_type);
  301466             : 
  301467             : 
  301468             :      public: 
  301469             :          virtual ~SgVarArgCopyOp();
  301470             : 
  301471             : 
  301472             :      public: 
  301473             :          SgVarArgCopyOp(Sg_File_Info* startOfConstruct , SgExpression* lhs_operand = NULL, SgExpression* rhs_operand = NULL, SgType* expression_type = NULL); 
  301474             :          SgVarArgCopyOp(SgExpression* lhs_operand, SgExpression* rhs_operand, SgType* expression_type); 
  301475             : 
  301476             :     protected:
  301477             : // Start of memberFunctionString
  301478             : SgExpression* p_lhs_operand;
  301479             :           
  301480             : // End of memberFunctionString
  301481             : // Start of memberFunctionString
  301482             : SgExpression* p_rhs_operand;
  301483             :           
  301484             : // End of memberFunctionString
  301485             : // Start of memberFunctionString
  301486             : SgType* p_expression_type;
  301487             :           
  301488             : // End of memberFunctionString
  301489             : 
  301490             :     friend struct Rose::Traits::generated::describe_node_t<SgVarArgCopyOp>;
  301491             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgCopyOp, SgExpression*,&SgVarArgCopyOp::p_lhs_operand>;
  301492             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgCopyOp, SgExpression*,&SgVarArgCopyOp::p_rhs_operand>;
  301493             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgCopyOp, SgType*,&SgVarArgCopyOp::p_expression_type>;
  301494             : 
  301495             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301496             : 
  301497             : 
  301498             :    };
  301499             : #endif
  301500             : 
  301501             : // postdeclarations for SgVarArgCopyOp
  301502             : 
  301503             : /* #line 301504 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301504             : 
  301505             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  301506             : 
  301507             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301508             : 
  301509             : 
  301510             : /* #line 301511 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301511             : 
  301512             : 
  301513             : 
  301514             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301515             : 
  301516             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  301517             : //      This code is automatically generated for each 
  301518             : //      terminal and non-terminal within the defined 
  301519             : //      grammar.  There is a simple way to change the 
  301520             : //      code to fix bugs etc.  See the ROSE README file
  301521             : //      for directions.
  301522             : 
  301523             : // tps: (02/22/2010): Adding DLL export requirements
  301524             : #include "rosedll.h"
  301525             : 
  301526             : // predeclarations for SgVarArgStartOneOperandOp
  301527             : 
  301528             : /* #line 301529 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301529             : 
  301530             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  301531             : 
  301532             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301533             : 
  301534             : #if 1
  301535             : // Class Definition for SgVarArgStartOneOperandOp
  301536             : class ROSE_DLL_API SgVarArgStartOneOperandOp  : public SgExpression
  301537             :    {
  301538             :      public:
  301539             : 
  301540             : 
  301541             : /* #line 301542 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301542             : 
  301543             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  301544             : // Start of memberFunctionString
  301545             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  301546             : 
  301547             : // *** COMMON CODE SECTION BEGINS HERE ***
  301548             : 
  301549             :     public:
  301550             : 
  301551             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  301552             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  301553             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  301554             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  301555             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  301556             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  301557             : 
  301558             :       /*! \brief returns a string representing the class name */
  301559             :           virtual std::string class_name() const override;
  301560             : 
  301561             :       /*! \brief returns new style SageIII enum values */
  301562             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  301563             : 
  301564             :       /*! \brief static variant value */
  301565             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  301566             :        // static const VariantT static_variant = V_SgVarArgStartOneOperandOp;
  301567             :           enum { static_variant = V_SgVarArgStartOneOperandOp };
  301568             : 
  301569             :        /* the generated cast function */
  301570             :       /*! \brief Casts pointer from base class to derived class */
  301571             :           ROSE_DLL_API friend       SgVarArgStartOneOperandOp* isSgVarArgStartOneOperandOp(       SgNode * s );
  301572             : 
  301573             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  301574             :           ROSE_DLL_API friend const SgVarArgStartOneOperandOp* isSgVarArgStartOneOperandOp( const SgNode * s );
  301575             : 
  301576             :      // ******************************************
  301577             :      // * Memory Pool / New / Delete
  301578             :      // ******************************************
  301579             : 
  301580             :      public:
  301581             :           /// \private
  301582             :           static const unsigned pool_size; //
  301583             :           /// \private
  301584             :           static std::vector<unsigned char *> pools; //
  301585             :           /// \private
  301586             :           static SgVarArgStartOneOperandOp * next_node; // 
  301587             : 
  301588             :           /// \private
  301589             :           static unsigned long initializeStorageClassArray(SgVarArgStartOneOperandOpStorageClass *); //
  301590             : 
  301591             :           /// \private
  301592             :           static void clearMemoryPool(); //
  301593             :           static void deleteMemoryPool(); //
  301594             : 
  301595             :           /// \private
  301596             :           static void extendMemoryPoolForFileIO(); //
  301597             : 
  301598             :           /// \private
  301599             :           static SgVarArgStartOneOperandOp * getPointerFromGlobalIndex(unsigned long); //
  301600             :           /// \private
  301601             :           static SgVarArgStartOneOperandOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  301602             : 
  301603             :           /// \private
  301604             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  301605             :           /// \private
  301606             :           static void resetValidFreepointers(); //
  301607             :           /// \private
  301608             :           static unsigned long getNumberOfLastValidPointer(); //
  301609             : 
  301610             : 
  301611             : #if defined(INLINE_FUNCTIONS)
  301612             :       /*! \brief returns pointer to newly allocated IR node */
  301613             :           inline void *operator new (size_t size);
  301614             : #else
  301615             :       /*! \brief returns pointer to newly allocated IR node */
  301616             :           void *operator new (size_t size);
  301617             : #endif
  301618             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  301619             :           void operator delete (void* pointer, size_t size);
  301620             : 
  301621             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  301622           0 :           void operator delete (void* pointer)
  301623             :              {
  301624             :             // This is the generated delete operator...
  301625           0 :                SgVarArgStartOneOperandOp::operator delete (pointer,sizeof(SgVarArgStartOneOperandOp));
  301626             :              }
  301627             : 
  301628             :       /*! \brief Returns the total number of IR nodes of this type */
  301629             :           static size_t numberOfNodes();
  301630             : 
  301631             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  301632             :           static size_t memoryUsage();
  301633             : 
  301634             :       // End of scope which started in IR nodes specific code 
  301635             :       /* */
  301636             : 
  301637             :       /* name Internal Functions
  301638             :           \brief Internal functions ... incomplete-documentation
  301639             : 
  301640             :           These functions have been made public as part of the design, but they are suggested for internal use 
  301641             :           or by particularly knowledgeable users for specialized tools or applications.
  301642             : 
  301643             :           \internal We could not make these private because they are required by user for special purposes. And 
  301644             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  301645             :          
  301646             :        */
  301647             : 
  301648             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  301649             :        // overridden in every class by *generated* implementation
  301650             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  301651             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  301652             :        // MS: 06/28/02 container of names of variables or container indices 
  301653             :        // used used in the traversal to access AST successor nodes
  301654             :        // overridden in every class by *generated* implementation
  301655             :       /*! \brief container of names of variables or container indices used used in the traversal
  301656             :           to access AST successor nodes overridden in every class by *generated* implementation */
  301657             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  301658             : 
  301659             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  301660             :        // than all the vector copies. The implementation for these functions is generated for each class.
  301661             :       /*! \brief return number of children in the traversal successor list */
  301662             :           virtual size_t get_numberOfTraversalSuccessors() override;
  301663             :       /*! \brief index-based access to traversal successors by index number */
  301664             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  301665             :       /*! \brief index-based access to traversal successors by child node */
  301666             :           virtual size_t get_childIndex(SgNode *child) override;
  301667             : 
  301668             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  301669             :        // MS: 08/16/2002 method for generating RTI information
  301670             :       /*! \brief return C++ Runtime-Time-Information */
  301671             :           virtual RTIReturnType roseRTI() override;
  301672             : #endif
  301673             :       /* */
  301674             : 
  301675             : 
  301676             : 
  301677             :       /* name Deprecated Functions
  301678             :           \brief Deprecated functions ... incomplete-documentation
  301679             : 
  301680             :           These functions have been deprecated from use.
  301681             :        */
  301682             :       /* */
  301683             : 
  301684             :       /*! returns a C style string (char*) representing the class name */
  301685             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  301686             : 
  301687             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  301688             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  301689             : #if 0
  301690             :       /*! returns old style Sage II enum values */
  301691             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  301692             :       /*! returns old style Sage II enum values */
  301693             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  301694             : #endif
  301695             :       /* */
  301696             : 
  301697             : 
  301698             : 
  301699             : 
  301700             :      public:
  301701             :       /* name Traversal Support Functions
  301702             :           \brief Traversal support functions ... incomplete-documentation
  301703             : 
  301704             :           These functions have been made public as part of the design, but they are suggested for internal use 
  301705             :           or by particularly knowledgable users for specialized tools or applications.
  301706             :        */
  301707             :       /* */
  301708             : 
  301709             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  301710             :        // (inferior to ROSE traversal mechanism, experimental).
  301711             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  301712             :        */
  301713             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  301714             : 
  301715             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  301716             :       /*! \brief support for the classic visitor pattern done in GoF */
  301717             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  301718             : 
  301719             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  301720             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  301721             :        */
  301722             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  301723             : 
  301724             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  301725             :        */
  301726             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  301727             : 
  301728             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  301729             :        // This traversal helps support internal tools that call static member functions.
  301730             :        // note: this function operates on the memory pools.
  301731             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  301732             :        */
  301733             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  301734             :       /* */
  301735             : 
  301736             : 
  301737             :      public:
  301738             :       /* name Memory Allocation Functions
  301739             :           \brief Memory allocations functions ... incomplete-documentation
  301740             : 
  301741             :           These functions have been made public as part of the design, but they are suggested for internal use 
  301742             :           or by particularly knowledgable users for specialized tools or applications.
  301743             :        */
  301744             :       /* */
  301745             : 
  301746             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  301747             : 
  301748             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  301749             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  301750             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  301751             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  301752             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  301753             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  301754             :           being used with the AST File I/O mechanism.
  301755             :        */
  301756             :           virtual bool isInMemoryPool() override;
  301757             : 
  301758             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  301759             : 
  301760             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  301761             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  301762             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  301763             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  301764             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  301765             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  301766             :           being used with the AST File I/O mechanism.
  301767             :        */
  301768             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  301769             : 
  301770             :       // DQ (4/30/2006): Modified to be a const function.
  301771             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  301772             : 
  301773             :           This functions is part of general support for many possible tools to operate 
  301774             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  301775             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  301776             :           less than the set of pointers used by the AST file I/O. This is part of
  301777             :           work implemented by Andreas, and support tools such as the AST graph generation.
  301778             : 
  301779             :           \warning This function can return unexpected data members and thus the 
  301780             :                    order and the number of elements is unpredicable and subject 
  301781             :                    to change.
  301782             : 
  301783             :           \returns STL vector of pairs of SgNode* and strings
  301784             :        */
  301785             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  301786             : 
  301787             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  301788             : 
  301789             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  301790             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  301791             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  301792             : 
  301793             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  301794             :                    and subject to change.
  301795             :        */
  301796             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  301797             : 
  301798             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  301799             : 
  301800             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  301801             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  301802             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  301803             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  301804             : 
  301805             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  301806             : 
  301807             :           \returns long
  301808             :        */
  301809             :           virtual long getChildIndex( SgNode* childNode ) const override;
  301810             : 
  301811             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  301812             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  301813             :       /* \brief Constructor for use by AST File I/O Mechanism
  301814             : 
  301815             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  301816             :           which obtained via fast binary file I/O from disk.
  301817             :        */
  301818             :        // SgVarArgStartOneOperandOp( SgVarArgStartOneOperandOpStorageClass& source );
  301819             : 
  301820             : 
  301821             : 
  301822             : 
  301823             : 
  301824             :  // JH (10/24/2005): methods added to support the ast file IO
  301825             :     private:
  301826             : 
  301827             :       /* name AST Memory Allocation Support Functions
  301828             :           \brief Memory allocations support....
  301829             : 
  301830             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  301831             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  301832             :           and support the AST File I/O Mechanism.
  301833             :        */
  301834             :       /* */
  301835             : 
  301836             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  301837             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  301838             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  301839             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  301840             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  301841             :           a correspinding one in the AST_FILE_IO class!
  301842             :        */
  301843             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  301844             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  301845             :       /* \brief Typedef used for low level memory access.
  301846             :        */
  301847             :        // typedef unsigned char* TestType;
  301848             : 
  301849             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  301850             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  301851             :       /* \brief Typedef used to hold memory addresses as values.
  301852             :        */
  301853             :        // typedef unsigned long  AddressType;
  301854             : 
  301855             : 
  301856             : 
  301857             :        // necessary, to have direct access to the p_freepointer and the private methods !
  301858             :       /*! \brief friend class declaration to support AST File I/O */
  301859             :           friend class AST_FILE_IO;
  301860             : 
  301861             :       /*! \brief friend class declaration to support AST File I/O */
  301862             :           friend class SgVarArgStartOneOperandOpStorageClass;
  301863             : 
  301864             :       /*! \brief friend class declaration to support AST File I/O */
  301865             :           friend class AstSpecificDataManagingClass;
  301866             : 
  301867             :       /*! \brief friend class declaration to support AST File I/O */
  301868             :           friend class AstSpecificDataManagingClassStorageClass;
  301869             :     public:
  301870             :       /*! \brief IR node constructor to support AST File I/O */
  301871             :           SgVarArgStartOneOperandOp( const SgVarArgStartOneOperandOpStorageClass& source );
  301872             : 
  301873             :  // private: // JJW hack
  301874             :        /*
  301875             :           name AST Memory Allocation Support Variables
  301876             :           Memory allocations support variables 
  301877             : 
  301878             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  301879             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  301880             :           and support the AST File I/O Mechanism.
  301881             :        */
  301882             :       /* */
  301883             : 
  301884             :     public:
  301885             : 
  301886             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  301887             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  301888             :       // virtual SgNode* addRegExpAttribute();
  301889             :       /*! \brief Support for AST matching using regular expression.
  301890             : 
  301891             :           This support is incomplete and the subject of current research to define 
  301892             :           RegEx trees to support inexact matching.
  301893             :        */
  301894             :           SgVarArgStartOneOperandOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  301895             : 
  301896             : // *** COMMON CODE SECTION ENDS HERE ***
  301897             : 
  301898             : 
  301899             : // End of memberFunctionString
  301900             : // Start of memberFunctionString
  301901             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  301902             : 
  301903             :      // the generated cast function
  301904             :      // friend ROSE_DLL_API SgVarArgStartOneOperandOp* isSgVarArgStartOneOperandOp ( SgNode* s );
  301905             : 
  301906             :           typedef SgExpression base_node_type;
  301907             : 
  301908             : 
  301909             : // End of memberFunctionString
  301910             : // Start of memberFunctionString
  301911             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  301912             : 
  301913             :           SgType* get_type() const override;
  301914             : 
  301915             : 
  301916             : // End of memberFunctionString
  301917             : // Start of memberFunctionString
  301918             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  301919             : 
  301920             :           void post_construction_initialization() override;
  301921             : 
  301922             : 
  301923             : // End of memberFunctionString
  301924             : 
  301925             :      public: 
  301926             :          SgExpression* get_operand_expr() const;
  301927             :          void set_operand_expr(SgExpression* operand_expr);
  301928             : 
  301929             :      public: 
  301930             :          SgType* get_expression_type() const;
  301931             :          void set_expression_type(SgType* expression_type);
  301932             : 
  301933             : 
  301934             :      public: 
  301935             :          virtual ~SgVarArgStartOneOperandOp();
  301936             : 
  301937             : 
  301938             :      public: 
  301939             :          SgVarArgStartOneOperandOp(Sg_File_Info* startOfConstruct , SgExpression* operand_expr = NULL, SgType* expression_type = NULL); 
  301940             :          SgVarArgStartOneOperandOp(SgExpression* operand_expr, SgType* expression_type); 
  301941             : 
  301942             :     protected:
  301943             : // Start of memberFunctionString
  301944             : SgExpression* p_operand_expr;
  301945             :           
  301946             : // End of memberFunctionString
  301947             : // Start of memberFunctionString
  301948             : SgType* p_expression_type;
  301949             :           
  301950             : // End of memberFunctionString
  301951             : 
  301952             :     friend struct Rose::Traits::generated::describe_node_t<SgVarArgStartOneOperandOp>;
  301953             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgStartOneOperandOp, SgExpression*,&SgVarArgStartOneOperandOp::p_operand_expr>;
  301954             :     friend struct Rose::Traits::generated::describe_field_t<SgVarArgStartOneOperandOp, SgType*,&SgVarArgStartOneOperandOp::p_expression_type>;
  301955             : 
  301956             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301957             : 
  301958             : 
  301959             :    };
  301960             : #endif
  301961             : 
  301962             : // postdeclarations for SgVarArgStartOneOperandOp
  301963             : 
  301964             : /* #line 301965 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301965             : 
  301966             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  301967             : 
  301968             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301969             : 
  301970             : 
  301971             : /* #line 301972 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301972             : 
  301973             : 
  301974             : 
  301975             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301976             : 
  301977             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  301978             : //      This code is automatically generated for each 
  301979             : //      terminal and non-terminal within the defined 
  301980             : //      grammar.  There is a simple way to change the 
  301981             : //      code to fix bugs etc.  See the ROSE README file
  301982             : //      for directions.
  301983             : 
  301984             : // tps: (02/22/2010): Adding DLL export requirements
  301985             : #include "rosedll.h"
  301986             : 
  301987             : // predeclarations for SgNullExpression
  301988             : 
  301989             : /* #line 301990 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  301990             : 
  301991             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  301992             : 
  301993             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  301994             : 
  301995             : #if 1
  301996             : // Class Definition for SgNullExpression
  301997             : class ROSE_DLL_API SgNullExpression  : public SgExpression
  301998             :    {
  301999             :      public:
  302000             : 
  302001             : 
  302002             : /* #line 302003 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302003             : 
  302004             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  302005             : // Start of memberFunctionString
  302006             : /* #line 1630 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  302007             : 
  302008             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  302009             :           virtual unsigned int cfgIndexForEnd() const override;
  302010             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  302011             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  302012             : #endif
  302013             : 
  302014             : 
  302015             : 
  302016             : // End of memberFunctionString
  302017             : // Start of memberFunctionString
  302018             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  302019             : 
  302020             : // *** COMMON CODE SECTION BEGINS HERE ***
  302021             : 
  302022             :     public:
  302023             : 
  302024             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  302025             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  302026             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  302027             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  302028             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  302029             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  302030             : 
  302031             :       /*! \brief returns a string representing the class name */
  302032             :           virtual std::string class_name() const override;
  302033             : 
  302034             :       /*! \brief returns new style SageIII enum values */
  302035             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  302036             : 
  302037             :       /*! \brief static variant value */
  302038             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  302039             :        // static const VariantT static_variant = V_SgNullExpression;
  302040             :           enum { static_variant = V_SgNullExpression };
  302041             : 
  302042             :        /* the generated cast function */
  302043             :       /*! \brief Casts pointer from base class to derived class */
  302044             :           ROSE_DLL_API friend       SgNullExpression* isSgNullExpression(       SgNode * s );
  302045             : 
  302046             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  302047             :           ROSE_DLL_API friend const SgNullExpression* isSgNullExpression( const SgNode * s );
  302048             : 
  302049             :      // ******************************************
  302050             :      // * Memory Pool / New / Delete
  302051             :      // ******************************************
  302052             : 
  302053             :      public:
  302054             :           /// \private
  302055             :           static const unsigned pool_size; //
  302056             :           /// \private
  302057             :           static std::vector<unsigned char *> pools; //
  302058             :           /// \private
  302059             :           static SgNullExpression * next_node; // 
  302060             : 
  302061             :           /// \private
  302062             :           static unsigned long initializeStorageClassArray(SgNullExpressionStorageClass *); //
  302063             : 
  302064             :           /// \private
  302065             :           static void clearMemoryPool(); //
  302066             :           static void deleteMemoryPool(); //
  302067             : 
  302068             :           /// \private
  302069             :           static void extendMemoryPoolForFileIO(); //
  302070             : 
  302071             :           /// \private
  302072             :           static SgNullExpression * getPointerFromGlobalIndex(unsigned long); //
  302073             :           /// \private
  302074             :           static SgNullExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  302075             : 
  302076             :           /// \private
  302077             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  302078             :           /// \private
  302079             :           static void resetValidFreepointers(); //
  302080             :           /// \private
  302081             :           static unsigned long getNumberOfLastValidPointer(); //
  302082             : 
  302083             : 
  302084             : #if defined(INLINE_FUNCTIONS)
  302085             :       /*! \brief returns pointer to newly allocated IR node */
  302086             :           inline void *operator new (size_t size);
  302087             : #else
  302088             :       /*! \brief returns pointer to newly allocated IR node */
  302089             :           void *operator new (size_t size);
  302090             : #endif
  302091             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  302092             :           void operator delete (void* pointer, size_t size);
  302093             : 
  302094             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  302095         244 :           void operator delete (void* pointer)
  302096             :              {
  302097             :             // This is the generated delete operator...
  302098         244 :                SgNullExpression::operator delete (pointer,sizeof(SgNullExpression));
  302099             :              }
  302100             : 
  302101             :       /*! \brief Returns the total number of IR nodes of this type */
  302102             :           static size_t numberOfNodes();
  302103             : 
  302104             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  302105             :           static size_t memoryUsage();
  302106             : 
  302107             :       // End of scope which started in IR nodes specific code 
  302108             :       /* */
  302109             : 
  302110             :       /* name Internal Functions
  302111             :           \brief Internal functions ... incomplete-documentation
  302112             : 
  302113             :           These functions have been made public as part of the design, but they are suggested for internal use 
  302114             :           or by particularly knowledgeable users for specialized tools or applications.
  302115             : 
  302116             :           \internal We could not make these private because they are required by user for special purposes. And 
  302117             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  302118             :          
  302119             :        */
  302120             : 
  302121             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  302122             :        // overridden in every class by *generated* implementation
  302123             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  302124             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  302125             :        // MS: 06/28/02 container of names of variables or container indices 
  302126             :        // used used in the traversal to access AST successor nodes
  302127             :        // overridden in every class by *generated* implementation
  302128             :       /*! \brief container of names of variables or container indices used used in the traversal
  302129             :           to access AST successor nodes overridden in every class by *generated* implementation */
  302130             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  302131             : 
  302132             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  302133             :        // than all the vector copies. The implementation for these functions is generated for each class.
  302134             :       /*! \brief return number of children in the traversal successor list */
  302135             :           virtual size_t get_numberOfTraversalSuccessors() override;
  302136             :       /*! \brief index-based access to traversal successors by index number */
  302137             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  302138             :       /*! \brief index-based access to traversal successors by child node */
  302139             :           virtual size_t get_childIndex(SgNode *child) override;
  302140             : 
  302141             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  302142             :        // MS: 08/16/2002 method for generating RTI information
  302143             :       /*! \brief return C++ Runtime-Time-Information */
  302144             :           virtual RTIReturnType roseRTI() override;
  302145             : #endif
  302146             :       /* */
  302147             : 
  302148             : 
  302149             : 
  302150             :       /* name Deprecated Functions
  302151             :           \brief Deprecated functions ... incomplete-documentation
  302152             : 
  302153             :           These functions have been deprecated from use.
  302154             :        */
  302155             :       /* */
  302156             : 
  302157             :       /*! returns a C style string (char*) representing the class name */
  302158             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  302159             : 
  302160             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  302161             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  302162             : #if 0
  302163             :       /*! returns old style Sage II enum values */
  302164             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  302165             :       /*! returns old style Sage II enum values */
  302166             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  302167             : #endif
  302168             :       /* */
  302169             : 
  302170             : 
  302171             : 
  302172             : 
  302173             :      public:
  302174             :       /* name Traversal Support Functions
  302175             :           \brief Traversal support functions ... incomplete-documentation
  302176             : 
  302177             :           These functions have been made public as part of the design, but they are suggested for internal use 
  302178             :           or by particularly knowledgable users for specialized tools or applications.
  302179             :        */
  302180             :       /* */
  302181             : 
  302182             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  302183             :        // (inferior to ROSE traversal mechanism, experimental).
  302184             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  302185             :        */
  302186             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  302187             : 
  302188             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  302189             :       /*! \brief support for the classic visitor pattern done in GoF */
  302190             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  302191             : 
  302192             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  302193             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  302194             :        */
  302195             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  302196             : 
  302197             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  302198             :        */
  302199             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  302200             : 
  302201             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  302202             :        // This traversal helps support internal tools that call static member functions.
  302203             :        // note: this function operates on the memory pools.
  302204             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  302205             :        */
  302206             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  302207             :       /* */
  302208             : 
  302209             : 
  302210             :      public:
  302211             :       /* name Memory Allocation Functions
  302212             :           \brief Memory allocations functions ... incomplete-documentation
  302213             : 
  302214             :           These functions have been made public as part of the design, but they are suggested for internal use 
  302215             :           or by particularly knowledgable users for specialized tools or applications.
  302216             :        */
  302217             :       /* */
  302218             : 
  302219             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  302220             : 
  302221             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  302222             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  302223             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  302224             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  302225             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  302226             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  302227             :           being used with the AST File I/O mechanism.
  302228             :        */
  302229             :           virtual bool isInMemoryPool() override;
  302230             : 
  302231             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  302232             : 
  302233             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  302234             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  302235             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  302236             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  302237             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  302238             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  302239             :           being used with the AST File I/O mechanism.
  302240             :        */
  302241             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  302242             : 
  302243             :       // DQ (4/30/2006): Modified to be a const function.
  302244             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  302245             : 
  302246             :           This functions is part of general support for many possible tools to operate 
  302247             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  302248             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  302249             :           less than the set of pointers used by the AST file I/O. This is part of
  302250             :           work implemented by Andreas, and support tools such as the AST graph generation.
  302251             : 
  302252             :           \warning This function can return unexpected data members and thus the 
  302253             :                    order and the number of elements is unpredicable and subject 
  302254             :                    to change.
  302255             : 
  302256             :           \returns STL vector of pairs of SgNode* and strings
  302257             :        */
  302258             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  302259             : 
  302260             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  302261             : 
  302262             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  302263             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  302264             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  302265             : 
  302266             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  302267             :                    and subject to change.
  302268             :        */
  302269             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  302270             : 
  302271             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  302272             : 
  302273             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  302274             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  302275             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  302276             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  302277             : 
  302278             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  302279             : 
  302280             :           \returns long
  302281             :        */
  302282             :           virtual long getChildIndex( SgNode* childNode ) const override;
  302283             : 
  302284             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  302285             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  302286             :       /* \brief Constructor for use by AST File I/O Mechanism
  302287             : 
  302288             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  302289             :           which obtained via fast binary file I/O from disk.
  302290             :        */
  302291             :        // SgNullExpression( SgNullExpressionStorageClass& source );
  302292             : 
  302293             : 
  302294             : 
  302295             : 
  302296             : 
  302297             :  // JH (10/24/2005): methods added to support the ast file IO
  302298             :     private:
  302299             : 
  302300             :       /* name AST Memory Allocation Support Functions
  302301             :           \brief Memory allocations support....
  302302             : 
  302303             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  302304             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  302305             :           and support the AST File I/O Mechanism.
  302306             :        */
  302307             :       /* */
  302308             : 
  302309             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  302310             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  302311             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  302312             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  302313             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  302314             :           a correspinding one in the AST_FILE_IO class!
  302315             :        */
  302316             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  302317             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  302318             :       /* \brief Typedef used for low level memory access.
  302319             :        */
  302320             :        // typedef unsigned char* TestType;
  302321             : 
  302322             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  302323             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  302324             :       /* \brief Typedef used to hold memory addresses as values.
  302325             :        */
  302326             :        // typedef unsigned long  AddressType;
  302327             : 
  302328             : 
  302329             : 
  302330             :        // necessary, to have direct access to the p_freepointer and the private methods !
  302331             :       /*! \brief friend class declaration to support AST File I/O */
  302332             :           friend class AST_FILE_IO;
  302333             : 
  302334             :       /*! \brief friend class declaration to support AST File I/O */
  302335             :           friend class SgNullExpressionStorageClass;
  302336             : 
  302337             :       /*! \brief friend class declaration to support AST File I/O */
  302338             :           friend class AstSpecificDataManagingClass;
  302339             : 
  302340             :       /*! \brief friend class declaration to support AST File I/O */
  302341             :           friend class AstSpecificDataManagingClassStorageClass;
  302342             :     public:
  302343             :       /*! \brief IR node constructor to support AST File I/O */
  302344             :           SgNullExpression( const SgNullExpressionStorageClass& source );
  302345             : 
  302346             :  // private: // JJW hack
  302347             :        /*
  302348             :           name AST Memory Allocation Support Variables
  302349             :           Memory allocations support variables 
  302350             : 
  302351             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  302352             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  302353             :           and support the AST File I/O Mechanism.
  302354             :        */
  302355             :       /* */
  302356             : 
  302357             :     public:
  302358             : 
  302359             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  302360             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  302361             :       // virtual SgNode* addRegExpAttribute();
  302362             :       /*! \brief Support for AST matching using regular expression.
  302363             : 
  302364             :           This support is incomplete and the subject of current research to define 
  302365             :           RegEx trees to support inexact matching.
  302366             :        */
  302367             :           SgNullExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  302368             : 
  302369             : // *** COMMON CODE SECTION ENDS HERE ***
  302370             : 
  302371             : 
  302372             : // End of memberFunctionString
  302373             : // Start of memberFunctionString
  302374             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  302375             : 
  302376             :      // the generated cast function
  302377             :      // friend ROSE_DLL_API SgNullExpression* isSgNullExpression ( SgNode* s );
  302378             : 
  302379             :           typedef SgExpression base_node_type;
  302380             : 
  302381             : 
  302382             : // End of memberFunctionString
  302383             : // Start of memberFunctionString
  302384             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  302385             : 
  302386             :           SgType* get_type() const override;
  302387             : 
  302388             : 
  302389             : // End of memberFunctionString
  302390             : // Start of memberFunctionString
  302391             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  302392             : 
  302393             :           void post_construction_initialization() override;
  302394             : 
  302395             : 
  302396             : // End of memberFunctionString
  302397             : 
  302398             : 
  302399             :      public: 
  302400             :          virtual ~SgNullExpression();
  302401             : 
  302402             : 
  302403             :      public: 
  302404             :          SgNullExpression(Sg_File_Info* startOfConstruct ); 
  302405             :          SgNullExpression(); 
  302406             : 
  302407             :     protected:
  302408             : 
  302409             :     friend struct Rose::Traits::generated::describe_node_t<SgNullExpression>;
  302410             : 
  302411             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302412             : 
  302413             : 
  302414             :    };
  302415             : #endif
  302416             : 
  302417             : // postdeclarations for SgNullExpression
  302418             : 
  302419             : /* #line 302420 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302420             : 
  302421             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  302422             : 
  302423             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302424             : 
  302425             : 
  302426             : /* #line 302427 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302427             : 
  302428             : 
  302429             : 
  302430             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302431             : 
  302432             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  302433             : //      This code is automatically generated for each 
  302434             : //      terminal and non-terminal within the defined 
  302435             : //      grammar.  There is a simple way to change the 
  302436             : //      code to fix bugs etc.  See the ROSE README file
  302437             : //      for directions.
  302438             : 
  302439             : // tps: (02/22/2010): Adding DLL export requirements
  302440             : #include "rosedll.h"
  302441             : 
  302442             : // predeclarations for SgVariantExpression
  302443             : 
  302444             : /* #line 302445 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302445             : 
  302446             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  302447             : 
  302448             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302449             : 
  302450             : #if 1
  302451             : // Class Definition for SgVariantExpression
  302452             : class ROSE_DLL_API SgVariantExpression  : public SgExpression
  302453             :    {
  302454             :      public:
  302455             : 
  302456             : 
  302457             : /* #line 302458 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302458             : 
  302459             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  302460             : // Start of memberFunctionString
  302461             : /* #line 1640 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  302462             : 
  302463             : 
  302464             : 
  302465             : // End of memberFunctionString
  302466             : // Start of memberFunctionString
  302467             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  302468             : 
  302469             : // *** COMMON CODE SECTION BEGINS HERE ***
  302470             : 
  302471             :     public:
  302472             : 
  302473             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  302474             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  302475             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  302476             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  302477             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  302478             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  302479             : 
  302480             :       /*! \brief returns a string representing the class name */
  302481             :           virtual std::string class_name() const override;
  302482             : 
  302483             :       /*! \brief returns new style SageIII enum values */
  302484             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  302485             : 
  302486             :       /*! \brief static variant value */
  302487             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  302488             :        // static const VariantT static_variant = V_SgVariantExpression;
  302489             :           enum { static_variant = V_SgVariantExpression };
  302490             : 
  302491             :        /* the generated cast function */
  302492             :       /*! \brief Casts pointer from base class to derived class */
  302493             :           ROSE_DLL_API friend       SgVariantExpression* isSgVariantExpression(       SgNode * s );
  302494             : 
  302495             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  302496             :           ROSE_DLL_API friend const SgVariantExpression* isSgVariantExpression( const SgNode * s );
  302497             : 
  302498             :      // ******************************************
  302499             :      // * Memory Pool / New / Delete
  302500             :      // ******************************************
  302501             : 
  302502             :      public:
  302503             :           /// \private
  302504             :           static const unsigned pool_size; //
  302505             :           /// \private
  302506             :           static std::vector<unsigned char *> pools; //
  302507             :           /// \private
  302508             :           static SgVariantExpression * next_node; // 
  302509             : 
  302510             :           /// \private
  302511             :           static unsigned long initializeStorageClassArray(SgVariantExpressionStorageClass *); //
  302512             : 
  302513             :           /// \private
  302514             :           static void clearMemoryPool(); //
  302515             :           static void deleteMemoryPool(); //
  302516             : 
  302517             :           /// \private
  302518             :           static void extendMemoryPoolForFileIO(); //
  302519             : 
  302520             :           /// \private
  302521             :           static SgVariantExpression * getPointerFromGlobalIndex(unsigned long); //
  302522             :           /// \private
  302523             :           static SgVariantExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  302524             : 
  302525             :           /// \private
  302526             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  302527             :           /// \private
  302528             :           static void resetValidFreepointers(); //
  302529             :           /// \private
  302530             :           static unsigned long getNumberOfLastValidPointer(); //
  302531             : 
  302532             : 
  302533             : #if defined(INLINE_FUNCTIONS)
  302534             :       /*! \brief returns pointer to newly allocated IR node */
  302535             :           inline void *operator new (size_t size);
  302536             : #else
  302537             :       /*! \brief returns pointer to newly allocated IR node */
  302538             :           void *operator new (size_t size);
  302539             : #endif
  302540             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  302541             :           void operator delete (void* pointer, size_t size);
  302542             : 
  302543             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  302544           1 :           void operator delete (void* pointer)
  302545             :              {
  302546             :             // This is the generated delete operator...
  302547           1 :                SgVariantExpression::operator delete (pointer,sizeof(SgVariantExpression));
  302548             :              }
  302549             : 
  302550             :       /*! \brief Returns the total number of IR nodes of this type */
  302551             :           static size_t numberOfNodes();
  302552             : 
  302553             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  302554             :           static size_t memoryUsage();
  302555             : 
  302556             :       // End of scope which started in IR nodes specific code 
  302557             :       /* */
  302558             : 
  302559             :       /* name Internal Functions
  302560             :           \brief Internal functions ... incomplete-documentation
  302561             : 
  302562             :           These functions have been made public as part of the design, but they are suggested for internal use 
  302563             :           or by particularly knowledgeable users for specialized tools or applications.
  302564             : 
  302565             :           \internal We could not make these private because they are required by user for special purposes. And 
  302566             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  302567             :          
  302568             :        */
  302569             : 
  302570             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  302571             :        // overridden in every class by *generated* implementation
  302572             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  302573             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  302574             :        // MS: 06/28/02 container of names of variables or container indices 
  302575             :        // used used in the traversal to access AST successor nodes
  302576             :        // overridden in every class by *generated* implementation
  302577             :       /*! \brief container of names of variables or container indices used used in the traversal
  302578             :           to access AST successor nodes overridden in every class by *generated* implementation */
  302579             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  302580             : 
  302581             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  302582             :        // than all the vector copies. The implementation for these functions is generated for each class.
  302583             :       /*! \brief return number of children in the traversal successor list */
  302584             :           virtual size_t get_numberOfTraversalSuccessors() override;
  302585             :       /*! \brief index-based access to traversal successors by index number */
  302586             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  302587             :       /*! \brief index-based access to traversal successors by child node */
  302588             :           virtual size_t get_childIndex(SgNode *child) override;
  302589             : 
  302590             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  302591             :        // MS: 08/16/2002 method for generating RTI information
  302592             :       /*! \brief return C++ Runtime-Time-Information */
  302593             :           virtual RTIReturnType roseRTI() override;
  302594             : #endif
  302595             :       /* */
  302596             : 
  302597             : 
  302598             : 
  302599             :       /* name Deprecated Functions
  302600             :           \brief Deprecated functions ... incomplete-documentation
  302601             : 
  302602             :           These functions have been deprecated from use.
  302603             :        */
  302604             :       /* */
  302605             : 
  302606             :       /*! returns a C style string (char*) representing the class name */
  302607             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  302608             : 
  302609             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  302610             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  302611             : #if 0
  302612             :       /*! returns old style Sage II enum values */
  302613             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  302614             :       /*! returns old style Sage II enum values */
  302615             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  302616             : #endif
  302617             :       /* */
  302618             : 
  302619             : 
  302620             : 
  302621             : 
  302622             :      public:
  302623             :       /* name Traversal Support Functions
  302624             :           \brief Traversal support functions ... incomplete-documentation
  302625             : 
  302626             :           These functions have been made public as part of the design, but they are suggested for internal use 
  302627             :           or by particularly knowledgable users for specialized tools or applications.
  302628             :        */
  302629             :       /* */
  302630             : 
  302631             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  302632             :        // (inferior to ROSE traversal mechanism, experimental).
  302633             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  302634             :        */
  302635             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  302636             : 
  302637             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  302638             :       /*! \brief support for the classic visitor pattern done in GoF */
  302639             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  302640             : 
  302641             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  302642             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  302643             :        */
  302644             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  302645             : 
  302646             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  302647             :        */
  302648             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  302649             : 
  302650             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  302651             :        // This traversal helps support internal tools that call static member functions.
  302652             :        // note: this function operates on the memory pools.
  302653             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  302654             :        */
  302655             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  302656             :       /* */
  302657             : 
  302658             : 
  302659             :      public:
  302660             :       /* name Memory Allocation Functions
  302661             :           \brief Memory allocations functions ... incomplete-documentation
  302662             : 
  302663             :           These functions have been made public as part of the design, but they are suggested for internal use 
  302664             :           or by particularly knowledgable users for specialized tools or applications.
  302665             :        */
  302666             :       /* */
  302667             : 
  302668             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  302669             : 
  302670             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  302671             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  302672             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  302673             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  302674             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  302675             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  302676             :           being used with the AST File I/O mechanism.
  302677             :        */
  302678             :           virtual bool isInMemoryPool() override;
  302679             : 
  302680             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  302681             : 
  302682             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  302683             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  302684             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  302685             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  302686             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  302687             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  302688             :           being used with the AST File I/O mechanism.
  302689             :        */
  302690             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  302691             : 
  302692             :       // DQ (4/30/2006): Modified to be a const function.
  302693             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  302694             : 
  302695             :           This functions is part of general support for many possible tools to operate 
  302696             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  302697             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  302698             :           less than the set of pointers used by the AST file I/O. This is part of
  302699             :           work implemented by Andreas, and support tools such as the AST graph generation.
  302700             : 
  302701             :           \warning This function can return unexpected data members and thus the 
  302702             :                    order and the number of elements is unpredicable and subject 
  302703             :                    to change.
  302704             : 
  302705             :           \returns STL vector of pairs of SgNode* and strings
  302706             :        */
  302707             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  302708             : 
  302709             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  302710             : 
  302711             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  302712             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  302713             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  302714             : 
  302715             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  302716             :                    and subject to change.
  302717             :        */
  302718             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  302719             : 
  302720             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  302721             : 
  302722             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  302723             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  302724             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  302725             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  302726             : 
  302727             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  302728             : 
  302729             :           \returns long
  302730             :        */
  302731             :           virtual long getChildIndex( SgNode* childNode ) const override;
  302732             : 
  302733             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  302734             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  302735             :       /* \brief Constructor for use by AST File I/O Mechanism
  302736             : 
  302737             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  302738             :           which obtained via fast binary file I/O from disk.
  302739             :        */
  302740             :        // SgVariantExpression( SgVariantExpressionStorageClass& source );
  302741             : 
  302742             : 
  302743             : 
  302744             : 
  302745             : 
  302746             :  // JH (10/24/2005): methods added to support the ast file IO
  302747             :     private:
  302748             : 
  302749             :       /* name AST Memory Allocation Support Functions
  302750             :           \brief Memory allocations support....
  302751             : 
  302752             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  302753             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  302754             :           and support the AST File I/O Mechanism.
  302755             :        */
  302756             :       /* */
  302757             : 
  302758             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  302759             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  302760             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  302761             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  302762             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  302763             :           a correspinding one in the AST_FILE_IO class!
  302764             :        */
  302765             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  302766             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  302767             :       /* \brief Typedef used for low level memory access.
  302768             :        */
  302769             :        // typedef unsigned char* TestType;
  302770             : 
  302771             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  302772             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  302773             :       /* \brief Typedef used to hold memory addresses as values.
  302774             :        */
  302775             :        // typedef unsigned long  AddressType;
  302776             : 
  302777             : 
  302778             : 
  302779             :        // necessary, to have direct access to the p_freepointer and the private methods !
  302780             :       /*! \brief friend class declaration to support AST File I/O */
  302781             :           friend class AST_FILE_IO;
  302782             : 
  302783             :       /*! \brief friend class declaration to support AST File I/O */
  302784             :           friend class SgVariantExpressionStorageClass;
  302785             : 
  302786             :       /*! \brief friend class declaration to support AST File I/O */
  302787             :           friend class AstSpecificDataManagingClass;
  302788             : 
  302789             :       /*! \brief friend class declaration to support AST File I/O */
  302790             :           friend class AstSpecificDataManagingClassStorageClass;
  302791             :     public:
  302792             :       /*! \brief IR node constructor to support AST File I/O */
  302793             :           SgVariantExpression( const SgVariantExpressionStorageClass& source );
  302794             : 
  302795             :  // private: // JJW hack
  302796             :        /*
  302797             :           name AST Memory Allocation Support Variables
  302798             :           Memory allocations support variables 
  302799             : 
  302800             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  302801             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  302802             :           and support the AST File I/O Mechanism.
  302803             :        */
  302804             :       /* */
  302805             : 
  302806             :     public:
  302807             : 
  302808             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  302809             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  302810             :       // virtual SgNode* addRegExpAttribute();
  302811             :       /*! \brief Support for AST matching using regular expression.
  302812             : 
  302813             :           This support is incomplete and the subject of current research to define 
  302814             :           RegEx trees to support inexact matching.
  302815             :        */
  302816             :           SgVariantExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  302817             : 
  302818             : // *** COMMON CODE SECTION ENDS HERE ***
  302819             : 
  302820             : 
  302821             : // End of memberFunctionString
  302822             : // Start of memberFunctionString
  302823             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  302824             : 
  302825             :      // the generated cast function
  302826             :      // friend ROSE_DLL_API SgVariantExpression* isSgVariantExpression ( SgNode* s );
  302827             : 
  302828             :           typedef SgExpression base_node_type;
  302829             : 
  302830             : 
  302831             : // End of memberFunctionString
  302832             : // Start of memberFunctionString
  302833             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  302834             : 
  302835             :           SgType* get_type() const override;
  302836             : 
  302837             : 
  302838             : // End of memberFunctionString
  302839             : // Start of memberFunctionString
  302840             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  302841             : 
  302842             :           void post_construction_initialization() override;
  302843             : 
  302844             : 
  302845             : // End of memberFunctionString
  302846             : 
  302847             : 
  302848             :      public: 
  302849             :          virtual ~SgVariantExpression();
  302850             : 
  302851             : 
  302852             :      public: 
  302853             :          SgVariantExpression(Sg_File_Info* startOfConstruct ); 
  302854             :          SgVariantExpression(); 
  302855             : 
  302856             :     protected:
  302857             : 
  302858             :     friend struct Rose::Traits::generated::describe_node_t<SgVariantExpression>;
  302859             : 
  302860             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302861             : 
  302862             : 
  302863             :    };
  302864             : #endif
  302865             : 
  302866             : // postdeclarations for SgVariantExpression
  302867             : 
  302868             : /* #line 302869 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302869             : 
  302870             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  302871             : 
  302872             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302873             : 
  302874             : 
  302875             : /* #line 302876 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302876             : 
  302877             : 
  302878             : 
  302879             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302880             : 
  302881             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  302882             : //      This code is automatically generated for each 
  302883             : //      terminal and non-terminal within the defined 
  302884             : //      grammar.  There is a simple way to change the 
  302885             : //      code to fix bugs etc.  See the ROSE README file
  302886             : //      for directions.
  302887             : 
  302888             : // tps: (02/22/2010): Adding DLL export requirements
  302889             : #include "rosedll.h"
  302890             : 
  302891             : // predeclarations for SgSubscriptExpression
  302892             : 
  302893             : /* #line 302894 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302894             : 
  302895             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  302896             : 
  302897             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  302898             : 
  302899             : #if 1
  302900             : // Class Definition for SgSubscriptExpression
  302901             : class ROSE_DLL_API SgSubscriptExpression  : public SgExpression
  302902             :    {
  302903             :      public:
  302904             : 
  302905             : 
  302906             : /* #line 302907 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  302907             : 
  302908             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  302909             : // Start of memberFunctionString
  302910             : /* #line 1767 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  302911             : 
  302912             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  302913             :           virtual unsigned int cfgIndexForEnd() const override;
  302914             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  302915             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  302916             : #endif
  302917             : 
  302918             : 
  302919             : 
  302920             : // End of memberFunctionString
  302921             : // Start of memberFunctionString
  302922             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  302923             : 
  302924             : // *** COMMON CODE SECTION BEGINS HERE ***
  302925             : 
  302926             :     public:
  302927             : 
  302928             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  302929             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  302930             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  302931             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  302932             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  302933             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  302934             : 
  302935             :       /*! \brief returns a string representing the class name */
  302936             :           virtual std::string class_name() const override;
  302937             : 
  302938             :       /*! \brief returns new style SageIII enum values */
  302939             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  302940             : 
  302941             :       /*! \brief static variant value */
  302942             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  302943             :        // static const VariantT static_variant = V_SgSubscriptExpression;
  302944             :           enum { static_variant = V_SgSubscriptExpression };
  302945             : 
  302946             :        /* the generated cast function */
  302947             :       /*! \brief Casts pointer from base class to derived class */
  302948             :           ROSE_DLL_API friend       SgSubscriptExpression* isSgSubscriptExpression(       SgNode * s );
  302949             : 
  302950             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  302951             :           ROSE_DLL_API friend const SgSubscriptExpression* isSgSubscriptExpression( const SgNode * s );
  302952             : 
  302953             :      // ******************************************
  302954             :      // * Memory Pool / New / Delete
  302955             :      // ******************************************
  302956             : 
  302957             :      public:
  302958             :           /// \private
  302959             :           static const unsigned pool_size; //
  302960             :           /// \private
  302961             :           static std::vector<unsigned char *> pools; //
  302962             :           /// \private
  302963             :           static SgSubscriptExpression * next_node; // 
  302964             : 
  302965             :           /// \private
  302966             :           static unsigned long initializeStorageClassArray(SgSubscriptExpressionStorageClass *); //
  302967             : 
  302968             :           /// \private
  302969             :           static void clearMemoryPool(); //
  302970             :           static void deleteMemoryPool(); //
  302971             : 
  302972             :           /// \private
  302973             :           static void extendMemoryPoolForFileIO(); //
  302974             : 
  302975             :           /// \private
  302976             :           static SgSubscriptExpression * getPointerFromGlobalIndex(unsigned long); //
  302977             :           /// \private
  302978             :           static SgSubscriptExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  302979             : 
  302980             :           /// \private
  302981             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  302982             :           /// \private
  302983             :           static void resetValidFreepointers(); //
  302984             :           /// \private
  302985             :           static unsigned long getNumberOfLastValidPointer(); //
  302986             : 
  302987             : 
  302988             : #if defined(INLINE_FUNCTIONS)
  302989             :       /*! \brief returns pointer to newly allocated IR node */
  302990             :           inline void *operator new (size_t size);
  302991             : #else
  302992             :       /*! \brief returns pointer to newly allocated IR node */
  302993             :           void *operator new (size_t size);
  302994             : #endif
  302995             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  302996             :           void operator delete (void* pointer, size_t size);
  302997             : 
  302998             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  302999           0 :           void operator delete (void* pointer)
  303000             :              {
  303001             :             // This is the generated delete operator...
  303002           0 :                SgSubscriptExpression::operator delete (pointer,sizeof(SgSubscriptExpression));
  303003             :              }
  303004             : 
  303005             :       /*! \brief Returns the total number of IR nodes of this type */
  303006             :           static size_t numberOfNodes();
  303007             : 
  303008             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  303009             :           static size_t memoryUsage();
  303010             : 
  303011             :       // End of scope which started in IR nodes specific code 
  303012             :       /* */
  303013             : 
  303014             :       /* name Internal Functions
  303015             :           \brief Internal functions ... incomplete-documentation
  303016             : 
  303017             :           These functions have been made public as part of the design, but they are suggested for internal use 
  303018             :           or by particularly knowledgeable users for specialized tools or applications.
  303019             : 
  303020             :           \internal We could not make these private because they are required by user for special purposes. And 
  303021             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  303022             :          
  303023             :        */
  303024             : 
  303025             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  303026             :        // overridden in every class by *generated* implementation
  303027             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  303028             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  303029             :        // MS: 06/28/02 container of names of variables or container indices 
  303030             :        // used used in the traversal to access AST successor nodes
  303031             :        // overridden in every class by *generated* implementation
  303032             :       /*! \brief container of names of variables or container indices used used in the traversal
  303033             :           to access AST successor nodes overridden in every class by *generated* implementation */
  303034             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  303035             : 
  303036             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  303037             :        // than all the vector copies. The implementation for these functions is generated for each class.
  303038             :       /*! \brief return number of children in the traversal successor list */
  303039             :           virtual size_t get_numberOfTraversalSuccessors() override;
  303040             :       /*! \brief index-based access to traversal successors by index number */
  303041             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  303042             :       /*! \brief index-based access to traversal successors by child node */
  303043             :           virtual size_t get_childIndex(SgNode *child) override;
  303044             : 
  303045             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  303046             :        // MS: 08/16/2002 method for generating RTI information
  303047             :       /*! \brief return C++ Runtime-Time-Information */
  303048             :           virtual RTIReturnType roseRTI() override;
  303049             : #endif
  303050             :       /* */
  303051             : 
  303052             : 
  303053             : 
  303054             :       /* name Deprecated Functions
  303055             :           \brief Deprecated functions ... incomplete-documentation
  303056             : 
  303057             :           These functions have been deprecated from use.
  303058             :        */
  303059             :       /* */
  303060             : 
  303061             :       /*! returns a C style string (char*) representing the class name */
  303062             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  303063             : 
  303064             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  303065             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  303066             : #if 0
  303067             :       /*! returns old style Sage II enum values */
  303068             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  303069             :       /*! returns old style Sage II enum values */
  303070             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  303071             : #endif
  303072             :       /* */
  303073             : 
  303074             : 
  303075             : 
  303076             : 
  303077             :      public:
  303078             :       /* name Traversal Support Functions
  303079             :           \brief Traversal support functions ... incomplete-documentation
  303080             : 
  303081             :           These functions have been made public as part of the design, but they are suggested for internal use 
  303082             :           or by particularly knowledgable users for specialized tools or applications.
  303083             :        */
  303084             :       /* */
  303085             : 
  303086             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  303087             :        // (inferior to ROSE traversal mechanism, experimental).
  303088             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  303089             :        */
  303090             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  303091             : 
  303092             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  303093             :       /*! \brief support for the classic visitor pattern done in GoF */
  303094             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  303095             : 
  303096             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  303097             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  303098             :        */
  303099             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  303100             : 
  303101             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  303102             :        */
  303103             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  303104             : 
  303105             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  303106             :        // This traversal helps support internal tools that call static member functions.
  303107             :        // note: this function operates on the memory pools.
  303108             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  303109             :        */
  303110             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  303111             :       /* */
  303112             : 
  303113             : 
  303114             :      public:
  303115             :       /* name Memory Allocation Functions
  303116             :           \brief Memory allocations functions ... incomplete-documentation
  303117             : 
  303118             :           These functions have been made public as part of the design, but they are suggested for internal use 
  303119             :           or by particularly knowledgable users for specialized tools or applications.
  303120             :        */
  303121             :       /* */
  303122             : 
  303123             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  303124             : 
  303125             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  303126             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  303127             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  303128             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  303129             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  303130             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  303131             :           being used with the AST File I/O mechanism.
  303132             :        */
  303133             :           virtual bool isInMemoryPool() override;
  303134             : 
  303135             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  303136             : 
  303137             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  303138             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  303139             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  303140             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  303141             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  303142             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  303143             :           being used with the AST File I/O mechanism.
  303144             :        */
  303145             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  303146             : 
  303147             :       // DQ (4/30/2006): Modified to be a const function.
  303148             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  303149             : 
  303150             :           This functions is part of general support for many possible tools to operate 
  303151             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  303152             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  303153             :           less than the set of pointers used by the AST file I/O. This is part of
  303154             :           work implemented by Andreas, and support tools such as the AST graph generation.
  303155             : 
  303156             :           \warning This function can return unexpected data members and thus the 
  303157             :                    order and the number of elements is unpredicable and subject 
  303158             :                    to change.
  303159             : 
  303160             :           \returns STL vector of pairs of SgNode* and strings
  303161             :        */
  303162             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  303163             : 
  303164             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  303165             : 
  303166             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  303167             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  303168             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  303169             : 
  303170             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  303171             :                    and subject to change.
  303172             :        */
  303173             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  303174             : 
  303175             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  303176             : 
  303177             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  303178             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  303179             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  303180             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  303181             : 
  303182             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  303183             : 
  303184             :           \returns long
  303185             :        */
  303186             :           virtual long getChildIndex( SgNode* childNode ) const override;
  303187             : 
  303188             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  303189             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  303190             :       /* \brief Constructor for use by AST File I/O Mechanism
  303191             : 
  303192             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  303193             :           which obtained via fast binary file I/O from disk.
  303194             :        */
  303195             :        // SgSubscriptExpression( SgSubscriptExpressionStorageClass& source );
  303196             : 
  303197             : 
  303198             : 
  303199             : 
  303200             : 
  303201             :  // JH (10/24/2005): methods added to support the ast file IO
  303202             :     private:
  303203             : 
  303204             :       /* name AST Memory Allocation Support Functions
  303205             :           \brief Memory allocations support....
  303206             : 
  303207             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  303208             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  303209             :           and support the AST File I/O Mechanism.
  303210             :        */
  303211             :       /* */
  303212             : 
  303213             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  303214             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  303215             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  303216             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  303217             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  303218             :           a correspinding one in the AST_FILE_IO class!
  303219             :        */
  303220             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  303221             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  303222             :       /* \brief Typedef used for low level memory access.
  303223             :        */
  303224             :        // typedef unsigned char* TestType;
  303225             : 
  303226             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  303227             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  303228             :       /* \brief Typedef used to hold memory addresses as values.
  303229             :        */
  303230             :        // typedef unsigned long  AddressType;
  303231             : 
  303232             : 
  303233             : 
  303234             :        // necessary, to have direct access to the p_freepointer and the private methods !
  303235             :       /*! \brief friend class declaration to support AST File I/O */
  303236             :           friend class AST_FILE_IO;
  303237             : 
  303238             :       /*! \brief friend class declaration to support AST File I/O */
  303239             :           friend class SgSubscriptExpressionStorageClass;
  303240             : 
  303241             :       /*! \brief friend class declaration to support AST File I/O */
  303242             :           friend class AstSpecificDataManagingClass;
  303243             : 
  303244             :       /*! \brief friend class declaration to support AST File I/O */
  303245             :           friend class AstSpecificDataManagingClassStorageClass;
  303246             :     public:
  303247             :       /*! \brief IR node constructor to support AST File I/O */
  303248             :           SgSubscriptExpression( const SgSubscriptExpressionStorageClass& source );
  303249             : 
  303250             :  // private: // JJW hack
  303251             :        /*
  303252             :           name AST Memory Allocation Support Variables
  303253             :           Memory allocations support variables 
  303254             : 
  303255             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  303256             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  303257             :           and support the AST File I/O Mechanism.
  303258             :        */
  303259             :       /* */
  303260             : 
  303261             :     public:
  303262             : 
  303263             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  303264             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  303265             :       // virtual SgNode* addRegExpAttribute();
  303266             :       /*! \brief Support for AST matching using regular expression.
  303267             : 
  303268             :           This support is incomplete and the subject of current research to define 
  303269             :           RegEx trees to support inexact matching.
  303270             :        */
  303271             :           SgSubscriptExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  303272             : 
  303273             : // *** COMMON CODE SECTION ENDS HERE ***
  303274             : 
  303275             : 
  303276             : // End of memberFunctionString
  303277             : // Start of memberFunctionString
  303278             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  303279             : 
  303280             :      // the generated cast function
  303281             :      // friend ROSE_DLL_API SgSubscriptExpression* isSgSubscriptExpression ( SgNode* s );
  303282             : 
  303283             :           typedef SgExpression base_node_type;
  303284             : 
  303285             : 
  303286             : // End of memberFunctionString
  303287             : // Start of memberFunctionString
  303288             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  303289             : 
  303290             :           SgType* get_type() const override;
  303291             : 
  303292             : 
  303293             : // End of memberFunctionString
  303294             : // Start of memberFunctionString
  303295             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  303296             : 
  303297             :           void post_construction_initialization() override;
  303298             : 
  303299             : 
  303300             : // End of memberFunctionString
  303301             : 
  303302             :      public: 
  303303             :          SgExpression* get_lowerBound() const;
  303304             :          void set_lowerBound(SgExpression* lowerBound);
  303305             : 
  303306             :      public: 
  303307             :          SgExpression* get_upperBound() const;
  303308             :          void set_upperBound(SgExpression* upperBound);
  303309             : 
  303310             :      public: 
  303311             :          SgExpression* get_stride() const;
  303312             :          void set_stride(SgExpression* stride);
  303313             : 
  303314             : 
  303315             :      public: 
  303316             :          virtual ~SgSubscriptExpression();
  303317             : 
  303318             : 
  303319             :      public: 
  303320             :          SgSubscriptExpression(Sg_File_Info* startOfConstruct , SgExpression* lowerBound = NULL, SgExpression* upperBound = NULL, SgExpression* stride = NULL); 
  303321             :          SgSubscriptExpression(SgExpression* lowerBound, SgExpression* upperBound, SgExpression* stride); 
  303322             : 
  303323             :     protected:
  303324             : // Start of memberFunctionString
  303325             : SgExpression* p_lowerBound;
  303326             :           
  303327             : // End of memberFunctionString
  303328             : // Start of memberFunctionString
  303329             : SgExpression* p_upperBound;
  303330             :           
  303331             : // End of memberFunctionString
  303332             : // Start of memberFunctionString
  303333             : SgExpression* p_stride;
  303334             :           
  303335             : // End of memberFunctionString
  303336             : 
  303337             :     friend struct Rose::Traits::generated::describe_node_t<SgSubscriptExpression>;
  303338             :     friend struct Rose::Traits::generated::describe_field_t<SgSubscriptExpression, SgExpression*,&SgSubscriptExpression::p_lowerBound>;
  303339             :     friend struct Rose::Traits::generated::describe_field_t<SgSubscriptExpression, SgExpression*,&SgSubscriptExpression::p_upperBound>;
  303340             :     friend struct Rose::Traits::generated::describe_field_t<SgSubscriptExpression, SgExpression*,&SgSubscriptExpression::p_stride>;
  303341             : 
  303342             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303343             : 
  303344             : 
  303345             :    };
  303346             : #endif
  303347             : 
  303348             : // postdeclarations for SgSubscriptExpression
  303349             : 
  303350             : /* #line 303351 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303351             : 
  303352             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  303353             : 
  303354             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303355             : 
  303356             : 
  303357             : /* #line 303358 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303358             : 
  303359             : 
  303360             : 
  303361             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303362             : 
  303363             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  303364             : //      This code is automatically generated for each 
  303365             : //      terminal and non-terminal within the defined 
  303366             : //      grammar.  There is a simple way to change the 
  303367             : //      code to fix bugs etc.  See the ROSE README file
  303368             : //      for directions.
  303369             : 
  303370             : // tps: (02/22/2010): Adding DLL export requirements
  303371             : #include "rosedll.h"
  303372             : 
  303373             : // predeclarations for SgColonShapeExp
  303374             : 
  303375             : /* #line 303376 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303376             : 
  303377             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  303378             : 
  303379             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303380             : 
  303381             : #if 1
  303382             : // Class Definition for SgColonShapeExp
  303383             : class ROSE_DLL_API SgColonShapeExp  : public SgExpression
  303384             :    {
  303385             :      public:
  303386             : 
  303387             : 
  303388             : /* #line 303389 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303389             : 
  303390             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  303391             : // Start of memberFunctionString
  303392             : /* #line 1779 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  303393             : 
  303394             : 
  303395             : 
  303396             : // End of memberFunctionString
  303397             : // Start of memberFunctionString
  303398             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  303399             : 
  303400             : // *** COMMON CODE SECTION BEGINS HERE ***
  303401             : 
  303402             :     public:
  303403             : 
  303404             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  303405             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  303406             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  303407             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  303408             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  303409             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  303410             : 
  303411             :       /*! \brief returns a string representing the class name */
  303412             :           virtual std::string class_name() const override;
  303413             : 
  303414             :       /*! \brief returns new style SageIII enum values */
  303415             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  303416             : 
  303417             :       /*! \brief static variant value */
  303418             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  303419             :        // static const VariantT static_variant = V_SgColonShapeExp;
  303420             :           enum { static_variant = V_SgColonShapeExp };
  303421             : 
  303422             :        /* the generated cast function */
  303423             :       /*! \brief Casts pointer from base class to derived class */
  303424             :           ROSE_DLL_API friend       SgColonShapeExp* isSgColonShapeExp(       SgNode * s );
  303425             : 
  303426             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  303427             :           ROSE_DLL_API friend const SgColonShapeExp* isSgColonShapeExp( const SgNode * s );
  303428             : 
  303429             :      // ******************************************
  303430             :      // * Memory Pool / New / Delete
  303431             :      // ******************************************
  303432             : 
  303433             :      public:
  303434             :           /// \private
  303435             :           static const unsigned pool_size; //
  303436             :           /// \private
  303437             :           static std::vector<unsigned char *> pools; //
  303438             :           /// \private
  303439             :           static SgColonShapeExp * next_node; // 
  303440             : 
  303441             :           /// \private
  303442             :           static unsigned long initializeStorageClassArray(SgColonShapeExpStorageClass *); //
  303443             : 
  303444             :           /// \private
  303445             :           static void clearMemoryPool(); //
  303446             :           static void deleteMemoryPool(); //
  303447             : 
  303448             :           /// \private
  303449             :           static void extendMemoryPoolForFileIO(); //
  303450             : 
  303451             :           /// \private
  303452             :           static SgColonShapeExp * getPointerFromGlobalIndex(unsigned long); //
  303453             :           /// \private
  303454             :           static SgColonShapeExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  303455             : 
  303456             :           /// \private
  303457             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  303458             :           /// \private
  303459             :           static void resetValidFreepointers(); //
  303460             :           /// \private
  303461             :           static unsigned long getNumberOfLastValidPointer(); //
  303462             : 
  303463             : 
  303464             : #if defined(INLINE_FUNCTIONS)
  303465             :       /*! \brief returns pointer to newly allocated IR node */
  303466             :           inline void *operator new (size_t size);
  303467             : #else
  303468             :       /*! \brief returns pointer to newly allocated IR node */
  303469             :           void *operator new (size_t size);
  303470             : #endif
  303471             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  303472             :           void operator delete (void* pointer, size_t size);
  303473             : 
  303474             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  303475           0 :           void operator delete (void* pointer)
  303476             :              {
  303477             :             // This is the generated delete operator...
  303478           0 :                SgColonShapeExp::operator delete (pointer,sizeof(SgColonShapeExp));
  303479             :              }
  303480             : 
  303481             :       /*! \brief Returns the total number of IR nodes of this type */
  303482             :           static size_t numberOfNodes();
  303483             : 
  303484             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  303485             :           static size_t memoryUsage();
  303486             : 
  303487             :       // End of scope which started in IR nodes specific code 
  303488             :       /* */
  303489             : 
  303490             :       /* name Internal Functions
  303491             :           \brief Internal functions ... incomplete-documentation
  303492             : 
  303493             :           These functions have been made public as part of the design, but they are suggested for internal use 
  303494             :           or by particularly knowledgeable users for specialized tools or applications.
  303495             : 
  303496             :           \internal We could not make these private because they are required by user for special purposes. And 
  303497             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  303498             :          
  303499             :        */
  303500             : 
  303501             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  303502             :        // overridden in every class by *generated* implementation
  303503             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  303504             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  303505             :        // MS: 06/28/02 container of names of variables or container indices 
  303506             :        // used used in the traversal to access AST successor nodes
  303507             :        // overridden in every class by *generated* implementation
  303508             :       /*! \brief container of names of variables or container indices used used in the traversal
  303509             :           to access AST successor nodes overridden in every class by *generated* implementation */
  303510             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  303511             : 
  303512             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  303513             :        // than all the vector copies. The implementation for these functions is generated for each class.
  303514             :       /*! \brief return number of children in the traversal successor list */
  303515             :           virtual size_t get_numberOfTraversalSuccessors() override;
  303516             :       /*! \brief index-based access to traversal successors by index number */
  303517             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  303518             :       /*! \brief index-based access to traversal successors by child node */
  303519             :           virtual size_t get_childIndex(SgNode *child) override;
  303520             : 
  303521             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  303522             :        // MS: 08/16/2002 method for generating RTI information
  303523             :       /*! \brief return C++ Runtime-Time-Information */
  303524             :           virtual RTIReturnType roseRTI() override;
  303525             : #endif
  303526             :       /* */
  303527             : 
  303528             : 
  303529             : 
  303530             :       /* name Deprecated Functions
  303531             :           \brief Deprecated functions ... incomplete-documentation
  303532             : 
  303533             :           These functions have been deprecated from use.
  303534             :        */
  303535             :       /* */
  303536             : 
  303537             :       /*! returns a C style string (char*) representing the class name */
  303538             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  303539             : 
  303540             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  303541             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  303542             : #if 0
  303543             :       /*! returns old style Sage II enum values */
  303544             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  303545             :       /*! returns old style Sage II enum values */
  303546             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  303547             : #endif
  303548             :       /* */
  303549             : 
  303550             : 
  303551             : 
  303552             : 
  303553             :      public:
  303554             :       /* name Traversal Support Functions
  303555             :           \brief Traversal support functions ... incomplete-documentation
  303556             : 
  303557             :           These functions have been made public as part of the design, but they are suggested for internal use 
  303558             :           or by particularly knowledgable users for specialized tools or applications.
  303559             :        */
  303560             :       /* */
  303561             : 
  303562             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  303563             :        // (inferior to ROSE traversal mechanism, experimental).
  303564             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  303565             :        */
  303566             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  303567             : 
  303568             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  303569             :       /*! \brief support for the classic visitor pattern done in GoF */
  303570             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  303571             : 
  303572             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  303573             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  303574             :        */
  303575             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  303576             : 
  303577             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  303578             :        */
  303579             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  303580             : 
  303581             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  303582             :        // This traversal helps support internal tools that call static member functions.
  303583             :        // note: this function operates on the memory pools.
  303584             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  303585             :        */
  303586             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  303587             :       /* */
  303588             : 
  303589             : 
  303590             :      public:
  303591             :       /* name Memory Allocation Functions
  303592             :           \brief Memory allocations functions ... incomplete-documentation
  303593             : 
  303594             :           These functions have been made public as part of the design, but they are suggested for internal use 
  303595             :           or by particularly knowledgable users for specialized tools or applications.
  303596             :        */
  303597             :       /* */
  303598             : 
  303599             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  303600             : 
  303601             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  303602             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  303603             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  303604             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  303605             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  303606             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  303607             :           being used with the AST File I/O mechanism.
  303608             :        */
  303609             :           virtual bool isInMemoryPool() override;
  303610             : 
  303611             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  303612             : 
  303613             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  303614             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  303615             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  303616             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  303617             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  303618             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  303619             :           being used with the AST File I/O mechanism.
  303620             :        */
  303621             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  303622             : 
  303623             :       // DQ (4/30/2006): Modified to be a const function.
  303624             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  303625             : 
  303626             :           This functions is part of general support for many possible tools to operate 
  303627             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  303628             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  303629             :           less than the set of pointers used by the AST file I/O. This is part of
  303630             :           work implemented by Andreas, and support tools such as the AST graph generation.
  303631             : 
  303632             :           \warning This function can return unexpected data members and thus the 
  303633             :                    order and the number of elements is unpredicable and subject 
  303634             :                    to change.
  303635             : 
  303636             :           \returns STL vector of pairs of SgNode* and strings
  303637             :        */
  303638             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  303639             : 
  303640             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  303641             : 
  303642             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  303643             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  303644             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  303645             : 
  303646             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  303647             :                    and subject to change.
  303648             :        */
  303649             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  303650             : 
  303651             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  303652             : 
  303653             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  303654             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  303655             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  303656             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  303657             : 
  303658             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  303659             : 
  303660             :           \returns long
  303661             :        */
  303662             :           virtual long getChildIndex( SgNode* childNode ) const override;
  303663             : 
  303664             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  303665             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  303666             :       /* \brief Constructor for use by AST File I/O Mechanism
  303667             : 
  303668             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  303669             :           which obtained via fast binary file I/O from disk.
  303670             :        */
  303671             :        // SgColonShapeExp( SgColonShapeExpStorageClass& source );
  303672             : 
  303673             : 
  303674             : 
  303675             : 
  303676             : 
  303677             :  // JH (10/24/2005): methods added to support the ast file IO
  303678             :     private:
  303679             : 
  303680             :       /* name AST Memory Allocation Support Functions
  303681             :           \brief Memory allocations support....
  303682             : 
  303683             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  303684             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  303685             :           and support the AST File I/O Mechanism.
  303686             :        */
  303687             :       /* */
  303688             : 
  303689             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  303690             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  303691             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  303692             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  303693             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  303694             :           a correspinding one in the AST_FILE_IO class!
  303695             :        */
  303696             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  303697             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  303698             :       /* \brief Typedef used for low level memory access.
  303699             :        */
  303700             :        // typedef unsigned char* TestType;
  303701             : 
  303702             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  303703             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  303704             :       /* \brief Typedef used to hold memory addresses as values.
  303705             :        */
  303706             :        // typedef unsigned long  AddressType;
  303707             : 
  303708             : 
  303709             : 
  303710             :        // necessary, to have direct access to the p_freepointer and the private methods !
  303711             :       /*! \brief friend class declaration to support AST File I/O */
  303712             :           friend class AST_FILE_IO;
  303713             : 
  303714             :       /*! \brief friend class declaration to support AST File I/O */
  303715             :           friend class SgColonShapeExpStorageClass;
  303716             : 
  303717             :       /*! \brief friend class declaration to support AST File I/O */
  303718             :           friend class AstSpecificDataManagingClass;
  303719             : 
  303720             :       /*! \brief friend class declaration to support AST File I/O */
  303721             :           friend class AstSpecificDataManagingClassStorageClass;
  303722             :     public:
  303723             :       /*! \brief IR node constructor to support AST File I/O */
  303724             :           SgColonShapeExp( const SgColonShapeExpStorageClass& source );
  303725             : 
  303726             :  // private: // JJW hack
  303727             :        /*
  303728             :           name AST Memory Allocation Support Variables
  303729             :           Memory allocations support variables 
  303730             : 
  303731             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  303732             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  303733             :           and support the AST File I/O Mechanism.
  303734             :        */
  303735             :       /* */
  303736             : 
  303737             :     public:
  303738             : 
  303739             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  303740             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  303741             :       // virtual SgNode* addRegExpAttribute();
  303742             :       /*! \brief Support for AST matching using regular expression.
  303743             : 
  303744             :           This support is incomplete and the subject of current research to define 
  303745             :           RegEx trees to support inexact matching.
  303746             :        */
  303747             :           SgColonShapeExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  303748             : 
  303749             : // *** COMMON CODE SECTION ENDS HERE ***
  303750             : 
  303751             : 
  303752             : // End of memberFunctionString
  303753             : // Start of memberFunctionString
  303754             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  303755             : 
  303756             :      // the generated cast function
  303757             :      // friend ROSE_DLL_API SgColonShapeExp* isSgColonShapeExp ( SgNode* s );
  303758             : 
  303759             :           typedef SgExpression base_node_type;
  303760             : 
  303761             : 
  303762             : // End of memberFunctionString
  303763             : // Start of memberFunctionString
  303764             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  303765             : 
  303766             :           SgType* get_type() const override;
  303767             : 
  303768             : 
  303769             : // End of memberFunctionString
  303770             : // Start of memberFunctionString
  303771             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  303772             : 
  303773             :           void post_construction_initialization() override;
  303774             : 
  303775             : 
  303776             : // End of memberFunctionString
  303777             : 
  303778             : 
  303779             :      public: 
  303780             :          virtual ~SgColonShapeExp();
  303781             : 
  303782             : 
  303783             :      public: 
  303784             :          SgColonShapeExp(Sg_File_Info* startOfConstruct ); 
  303785             :          SgColonShapeExp(); 
  303786             : 
  303787             :     protected:
  303788             : 
  303789             :     friend struct Rose::Traits::generated::describe_node_t<SgColonShapeExp>;
  303790             : 
  303791             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303792             : 
  303793             : 
  303794             :    };
  303795             : #endif
  303796             : 
  303797             : // postdeclarations for SgColonShapeExp
  303798             : 
  303799             : /* #line 303800 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303800             : 
  303801             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  303802             : 
  303803             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303804             : 
  303805             : 
  303806             : /* #line 303807 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303807             : 
  303808             : 
  303809             : 
  303810             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303811             : 
  303812             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  303813             : //      This code is automatically generated for each 
  303814             : //      terminal and non-terminal within the defined 
  303815             : //      grammar.  There is a simple way to change the 
  303816             : //      code to fix bugs etc.  See the ROSE README file
  303817             : //      for directions.
  303818             : 
  303819             : // tps: (02/22/2010): Adding DLL export requirements
  303820             : #include "rosedll.h"
  303821             : 
  303822             : // predeclarations for SgAsteriskShapeExp
  303823             : 
  303824             : /* #line 303825 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303825             : 
  303826             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  303827             : 
  303828             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  303829             : 
  303830             : #if 1
  303831             : // Class Definition for SgAsteriskShapeExp
  303832             : class ROSE_DLL_API SgAsteriskShapeExp  : public SgExpression
  303833             :    {
  303834             :      public:
  303835             : 
  303836             : 
  303837             : /* #line 303838 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  303838             : 
  303839             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  303840             : // Start of memberFunctionString
  303841             : /* #line 1785 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  303842             : 
  303843             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  303844             :           virtual unsigned int cfgIndexForEnd() const override;
  303845             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  303846             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  303847             : #endif
  303848             : 
  303849             : 
  303850             : 
  303851             : // End of memberFunctionString
  303852             : // Start of memberFunctionString
  303853             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  303854             : 
  303855             : // *** COMMON CODE SECTION BEGINS HERE ***
  303856             : 
  303857             :     public:
  303858             : 
  303859             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  303860             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  303861             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  303862             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  303863             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  303864             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  303865             : 
  303866             :       /*! \brief returns a string representing the class name */
  303867             :           virtual std::string class_name() const override;
  303868             : 
  303869             :       /*! \brief returns new style SageIII enum values */
  303870             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  303871             : 
  303872             :       /*! \brief static variant value */
  303873             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  303874             :        // static const VariantT static_variant = V_SgAsteriskShapeExp;
  303875             :           enum { static_variant = V_SgAsteriskShapeExp };
  303876             : 
  303877             :        /* the generated cast function */
  303878             :       /*! \brief Casts pointer from base class to derived class */
  303879             :           ROSE_DLL_API friend       SgAsteriskShapeExp* isSgAsteriskShapeExp(       SgNode * s );
  303880             : 
  303881             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  303882             :           ROSE_DLL_API friend const SgAsteriskShapeExp* isSgAsteriskShapeExp( const SgNode * s );
  303883             : 
  303884             :      // ******************************************
  303885             :      // * Memory Pool / New / Delete
  303886             :      // ******************************************
  303887             : 
  303888             :      public:
  303889             :           /// \private
  303890             :           static const unsigned pool_size; //
  303891             :           /// \private
  303892             :           static std::vector<unsigned char *> pools; //
  303893             :           /// \private
  303894             :           static SgAsteriskShapeExp * next_node; // 
  303895             : 
  303896             :           /// \private
  303897             :           static unsigned long initializeStorageClassArray(SgAsteriskShapeExpStorageClass *); //
  303898             : 
  303899             :           /// \private
  303900             :           static void clearMemoryPool(); //
  303901             :           static void deleteMemoryPool(); //
  303902             : 
  303903             :           /// \private
  303904             :           static void extendMemoryPoolForFileIO(); //
  303905             : 
  303906             :           /// \private
  303907             :           static SgAsteriskShapeExp * getPointerFromGlobalIndex(unsigned long); //
  303908             :           /// \private
  303909             :           static SgAsteriskShapeExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  303910             : 
  303911             :           /// \private
  303912             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  303913             :           /// \private
  303914             :           static void resetValidFreepointers(); //
  303915             :           /// \private
  303916             :           static unsigned long getNumberOfLastValidPointer(); //
  303917             : 
  303918             : 
  303919             : #if defined(INLINE_FUNCTIONS)
  303920             :       /*! \brief returns pointer to newly allocated IR node */
  303921             :           inline void *operator new (size_t size);
  303922             : #else
  303923             :       /*! \brief returns pointer to newly allocated IR node */
  303924             :           void *operator new (size_t size);
  303925             : #endif
  303926             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  303927             :           void operator delete (void* pointer, size_t size);
  303928             : 
  303929             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  303930           1 :           void operator delete (void* pointer)
  303931             :              {
  303932             :             // This is the generated delete operator...
  303933           1 :                SgAsteriskShapeExp::operator delete (pointer,sizeof(SgAsteriskShapeExp));
  303934             :              }
  303935             : 
  303936             :       /*! \brief Returns the total number of IR nodes of this type */
  303937             :           static size_t numberOfNodes();
  303938             : 
  303939             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  303940             :           static size_t memoryUsage();
  303941             : 
  303942             :       // End of scope which started in IR nodes specific code 
  303943             :       /* */
  303944             : 
  303945             :       /* name Internal Functions
  303946             :           \brief Internal functions ... incomplete-documentation
  303947             : 
  303948             :           These functions have been made public as part of the design, but they are suggested for internal use 
  303949             :           or by particularly knowledgeable users for specialized tools or applications.
  303950             : 
  303951             :           \internal We could not make these private because they are required by user for special purposes. And 
  303952             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  303953             :          
  303954             :        */
  303955             : 
  303956             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  303957             :        // overridden in every class by *generated* implementation
  303958             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  303959             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  303960             :        // MS: 06/28/02 container of names of variables or container indices 
  303961             :        // used used in the traversal to access AST successor nodes
  303962             :        // overridden in every class by *generated* implementation
  303963             :       /*! \brief container of names of variables or container indices used used in the traversal
  303964             :           to access AST successor nodes overridden in every class by *generated* implementation */
  303965             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  303966             : 
  303967             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  303968             :        // than all the vector copies. The implementation for these functions is generated for each class.
  303969             :       /*! \brief return number of children in the traversal successor list */
  303970             :           virtual size_t get_numberOfTraversalSuccessors() override;
  303971             :       /*! \brief index-based access to traversal successors by index number */
  303972             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  303973             :       /*! \brief index-based access to traversal successors by child node */
  303974             :           virtual size_t get_childIndex(SgNode *child) override;
  303975             : 
  303976             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  303977             :        // MS: 08/16/2002 method for generating RTI information
  303978             :       /*! \brief return C++ Runtime-Time-Information */
  303979             :           virtual RTIReturnType roseRTI() override;
  303980             : #endif
  303981             :       /* */
  303982             : 
  303983             : 
  303984             : 
  303985             :       /* name Deprecated Functions
  303986             :           \brief Deprecated functions ... incomplete-documentation
  303987             : 
  303988             :           These functions have been deprecated from use.
  303989             :        */
  303990             :       /* */
  303991             : 
  303992             :       /*! returns a C style string (char*) representing the class name */
  303993             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  303994             : 
  303995             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  303996             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  303997             : #if 0
  303998             :       /*! returns old style Sage II enum values */
  303999             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  304000             :       /*! returns old style Sage II enum values */
  304001             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  304002             : #endif
  304003             :       /* */
  304004             : 
  304005             : 
  304006             : 
  304007             : 
  304008             :      public:
  304009             :       /* name Traversal Support Functions
  304010             :           \brief Traversal support functions ... incomplete-documentation
  304011             : 
  304012             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304013             :           or by particularly knowledgable users for specialized tools or applications.
  304014             :        */
  304015             :       /* */
  304016             : 
  304017             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  304018             :        // (inferior to ROSE traversal mechanism, experimental).
  304019             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  304020             :        */
  304021             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  304022             : 
  304023             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  304024             :       /*! \brief support for the classic visitor pattern done in GoF */
  304025             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  304026             : 
  304027             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  304028             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  304029             :        */
  304030             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  304031             : 
  304032             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  304033             :        */
  304034             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  304035             : 
  304036             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  304037             :        // This traversal helps support internal tools that call static member functions.
  304038             :        // note: this function operates on the memory pools.
  304039             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  304040             :        */
  304041             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  304042             :       /* */
  304043             : 
  304044             : 
  304045             :      public:
  304046             :       /* name Memory Allocation Functions
  304047             :           \brief Memory allocations functions ... incomplete-documentation
  304048             : 
  304049             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304050             :           or by particularly knowledgable users for specialized tools or applications.
  304051             :        */
  304052             :       /* */
  304053             : 
  304054             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  304055             : 
  304056             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  304057             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  304058             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  304059             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  304060             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  304061             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  304062             :           being used with the AST File I/O mechanism.
  304063             :        */
  304064             :           virtual bool isInMemoryPool() override;
  304065             : 
  304066             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  304067             : 
  304068             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  304069             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  304070             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  304071             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  304072             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  304073             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  304074             :           being used with the AST File I/O mechanism.
  304075             :        */
  304076             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  304077             : 
  304078             :       // DQ (4/30/2006): Modified to be a const function.
  304079             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  304080             : 
  304081             :           This functions is part of general support for many possible tools to operate 
  304082             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  304083             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  304084             :           less than the set of pointers used by the AST file I/O. This is part of
  304085             :           work implemented by Andreas, and support tools such as the AST graph generation.
  304086             : 
  304087             :           \warning This function can return unexpected data members and thus the 
  304088             :                    order and the number of elements is unpredicable and subject 
  304089             :                    to change.
  304090             : 
  304091             :           \returns STL vector of pairs of SgNode* and strings
  304092             :        */
  304093             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  304094             : 
  304095             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  304096             : 
  304097             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  304098             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  304099             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  304100             : 
  304101             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  304102             :                    and subject to change.
  304103             :        */
  304104             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  304105             : 
  304106             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  304107             : 
  304108             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  304109             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  304110             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  304111             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  304112             : 
  304113             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  304114             : 
  304115             :           \returns long
  304116             :        */
  304117             :           virtual long getChildIndex( SgNode* childNode ) const override;
  304118             : 
  304119             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  304120             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  304121             :       /* \brief Constructor for use by AST File I/O Mechanism
  304122             : 
  304123             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  304124             :           which obtained via fast binary file I/O from disk.
  304125             :        */
  304126             :        // SgAsteriskShapeExp( SgAsteriskShapeExpStorageClass& source );
  304127             : 
  304128             : 
  304129             : 
  304130             : 
  304131             : 
  304132             :  // JH (10/24/2005): methods added to support the ast file IO
  304133             :     private:
  304134             : 
  304135             :       /* name AST Memory Allocation Support Functions
  304136             :           \brief Memory allocations support....
  304137             : 
  304138             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  304139             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  304140             :           and support the AST File I/O Mechanism.
  304141             :        */
  304142             :       /* */
  304143             : 
  304144             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  304145             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  304146             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  304147             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  304148             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  304149             :           a correspinding one in the AST_FILE_IO class!
  304150             :        */
  304151             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  304152             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  304153             :       /* \brief Typedef used for low level memory access.
  304154             :        */
  304155             :        // typedef unsigned char* TestType;
  304156             : 
  304157             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  304158             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  304159             :       /* \brief Typedef used to hold memory addresses as values.
  304160             :        */
  304161             :        // typedef unsigned long  AddressType;
  304162             : 
  304163             : 
  304164             : 
  304165             :        // necessary, to have direct access to the p_freepointer and the private methods !
  304166             :       /*! \brief friend class declaration to support AST File I/O */
  304167             :           friend class AST_FILE_IO;
  304168             : 
  304169             :       /*! \brief friend class declaration to support AST File I/O */
  304170             :           friend class SgAsteriskShapeExpStorageClass;
  304171             : 
  304172             :       /*! \brief friend class declaration to support AST File I/O */
  304173             :           friend class AstSpecificDataManagingClass;
  304174             : 
  304175             :       /*! \brief friend class declaration to support AST File I/O */
  304176             :           friend class AstSpecificDataManagingClassStorageClass;
  304177             :     public:
  304178             :       /*! \brief IR node constructor to support AST File I/O */
  304179             :           SgAsteriskShapeExp( const SgAsteriskShapeExpStorageClass& source );
  304180             : 
  304181             :  // private: // JJW hack
  304182             :        /*
  304183             :           name AST Memory Allocation Support Variables
  304184             :           Memory allocations support variables 
  304185             : 
  304186             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  304187             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  304188             :           and support the AST File I/O Mechanism.
  304189             :        */
  304190             :       /* */
  304191             : 
  304192             :     public:
  304193             : 
  304194             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  304195             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  304196             :       // virtual SgNode* addRegExpAttribute();
  304197             :       /*! \brief Support for AST matching using regular expression.
  304198             : 
  304199             :           This support is incomplete and the subject of current research to define 
  304200             :           RegEx trees to support inexact matching.
  304201             :        */
  304202             :           SgAsteriskShapeExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  304203             : 
  304204             : // *** COMMON CODE SECTION ENDS HERE ***
  304205             : 
  304206             : 
  304207             : // End of memberFunctionString
  304208             : // Start of memberFunctionString
  304209             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  304210             : 
  304211             :      // the generated cast function
  304212             :      // friend ROSE_DLL_API SgAsteriskShapeExp* isSgAsteriskShapeExp ( SgNode* s );
  304213             : 
  304214             :           typedef SgExpression base_node_type;
  304215             : 
  304216             : 
  304217             : // End of memberFunctionString
  304218             : // Start of memberFunctionString
  304219             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  304220             : 
  304221             :           SgType* get_type() const override;
  304222             : 
  304223             : 
  304224             : // End of memberFunctionString
  304225             : // Start of memberFunctionString
  304226             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  304227             : 
  304228             :           void post_construction_initialization() override;
  304229             : 
  304230             : 
  304231             : // End of memberFunctionString
  304232             : 
  304233             : 
  304234             :      public: 
  304235             :          virtual ~SgAsteriskShapeExp();
  304236             : 
  304237             : 
  304238             :      public: 
  304239             :          SgAsteriskShapeExp(Sg_File_Info* startOfConstruct ); 
  304240             :          SgAsteriskShapeExp(); 
  304241             : 
  304242             :     protected:
  304243             : 
  304244             :     friend struct Rose::Traits::generated::describe_node_t<SgAsteriskShapeExp>;
  304245             : 
  304246             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304247             : 
  304248             : 
  304249             :    };
  304250             : #endif
  304251             : 
  304252             : // postdeclarations for SgAsteriskShapeExp
  304253             : 
  304254             : /* #line 304255 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304255             : 
  304256             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  304257             : 
  304258             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304259             : 
  304260             : 
  304261             : /* #line 304262 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304262             : 
  304263             : 
  304264             : 
  304265             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304266             : 
  304267             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  304268             : //      This code is automatically generated for each 
  304269             : //      terminal and non-terminal within the defined 
  304270             : //      grammar.  There is a simple way to change the 
  304271             : //      code to fix bugs etc.  See the ROSE README file
  304272             : //      for directions.
  304273             : 
  304274             : // tps: (02/22/2010): Adding DLL export requirements
  304275             : #include "rosedll.h"
  304276             : 
  304277             : // predeclarations for SgImpliedDo
  304278             : 
  304279             : /* #line 304280 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304280             : 
  304281             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  304282             : 
  304283             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304284             : 
  304285             : #if 1
  304286             : // Class Definition for SgImpliedDo
  304287             : class ROSE_DLL_API SgImpliedDo  : public SgExpression
  304288             :    {
  304289             :      public:
  304290             : 
  304291             : 
  304292             : /* #line 304293 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304293             : 
  304294             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  304295             : // Start of memberFunctionString
  304296             : /* #line 1803 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  304297             : 
  304298             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  304299             :           virtual unsigned int cfgIndexForEnd() const override;
  304300             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  304301             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  304302             : #endif
  304303             : 
  304304             : 
  304305             : 
  304306             : // End of memberFunctionString
  304307             : // Start of memberFunctionString
  304308             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  304309             : 
  304310             : // *** COMMON CODE SECTION BEGINS HERE ***
  304311             : 
  304312             :     public:
  304313             : 
  304314             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  304315             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  304316             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  304317             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  304318             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  304319             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  304320             : 
  304321             :       /*! \brief returns a string representing the class name */
  304322             :           virtual std::string class_name() const override;
  304323             : 
  304324             :       /*! \brief returns new style SageIII enum values */
  304325             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  304326             : 
  304327             :       /*! \brief static variant value */
  304328             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  304329             :        // static const VariantT static_variant = V_SgImpliedDo;
  304330             :           enum { static_variant = V_SgImpliedDo };
  304331             : 
  304332             :        /* the generated cast function */
  304333             :       /*! \brief Casts pointer from base class to derived class */
  304334             :           ROSE_DLL_API friend       SgImpliedDo* isSgImpliedDo(       SgNode * s );
  304335             : 
  304336             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  304337             :           ROSE_DLL_API friend const SgImpliedDo* isSgImpliedDo( const SgNode * s );
  304338             : 
  304339             :      // ******************************************
  304340             :      // * Memory Pool / New / Delete
  304341             :      // ******************************************
  304342             : 
  304343             :      public:
  304344             :           /// \private
  304345             :           static const unsigned pool_size; //
  304346             :           /// \private
  304347             :           static std::vector<unsigned char *> pools; //
  304348             :           /// \private
  304349             :           static SgImpliedDo * next_node; // 
  304350             : 
  304351             :           /// \private
  304352             :           static unsigned long initializeStorageClassArray(SgImpliedDoStorageClass *); //
  304353             : 
  304354             :           /// \private
  304355             :           static void clearMemoryPool(); //
  304356             :           static void deleteMemoryPool(); //
  304357             : 
  304358             :           /// \private
  304359             :           static void extendMemoryPoolForFileIO(); //
  304360             : 
  304361             :           /// \private
  304362             :           static SgImpliedDo * getPointerFromGlobalIndex(unsigned long); //
  304363             :           /// \private
  304364             :           static SgImpliedDo * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  304365             : 
  304366             :           /// \private
  304367             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  304368             :           /// \private
  304369             :           static void resetValidFreepointers(); //
  304370             :           /// \private
  304371             :           static unsigned long getNumberOfLastValidPointer(); //
  304372             : 
  304373             : 
  304374             : #if defined(INLINE_FUNCTIONS)
  304375             :       /*! \brief returns pointer to newly allocated IR node */
  304376             :           inline void *operator new (size_t size);
  304377             : #else
  304378             :       /*! \brief returns pointer to newly allocated IR node */
  304379             :           void *operator new (size_t size);
  304380             : #endif
  304381             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  304382             :           void operator delete (void* pointer, size_t size);
  304383             : 
  304384             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  304385           0 :           void operator delete (void* pointer)
  304386             :              {
  304387             :             // This is the generated delete operator...
  304388           0 :                SgImpliedDo::operator delete (pointer,sizeof(SgImpliedDo));
  304389             :              }
  304390             : 
  304391             :       /*! \brief Returns the total number of IR nodes of this type */
  304392             :           static size_t numberOfNodes();
  304393             : 
  304394             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  304395             :           static size_t memoryUsage();
  304396             : 
  304397             :       // End of scope which started in IR nodes specific code 
  304398             :       /* */
  304399             : 
  304400             :       /* name Internal Functions
  304401             :           \brief Internal functions ... incomplete-documentation
  304402             : 
  304403             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304404             :           or by particularly knowledgeable users for specialized tools or applications.
  304405             : 
  304406             :           \internal We could not make these private because they are required by user for special purposes. And 
  304407             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  304408             :          
  304409             :        */
  304410             : 
  304411             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  304412             :        // overridden in every class by *generated* implementation
  304413             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  304414             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  304415             :        // MS: 06/28/02 container of names of variables or container indices 
  304416             :        // used used in the traversal to access AST successor nodes
  304417             :        // overridden in every class by *generated* implementation
  304418             :       /*! \brief container of names of variables or container indices used used in the traversal
  304419             :           to access AST successor nodes overridden in every class by *generated* implementation */
  304420             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  304421             : 
  304422             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  304423             :        // than all the vector copies. The implementation for these functions is generated for each class.
  304424             :       /*! \brief return number of children in the traversal successor list */
  304425             :           virtual size_t get_numberOfTraversalSuccessors() override;
  304426             :       /*! \brief index-based access to traversal successors by index number */
  304427             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  304428             :       /*! \brief index-based access to traversal successors by child node */
  304429             :           virtual size_t get_childIndex(SgNode *child) override;
  304430             : 
  304431             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  304432             :        // MS: 08/16/2002 method for generating RTI information
  304433             :       /*! \brief return C++ Runtime-Time-Information */
  304434             :           virtual RTIReturnType roseRTI() override;
  304435             : #endif
  304436             :       /* */
  304437             : 
  304438             : 
  304439             : 
  304440             :       /* name Deprecated Functions
  304441             :           \brief Deprecated functions ... incomplete-documentation
  304442             : 
  304443             :           These functions have been deprecated from use.
  304444             :        */
  304445             :       /* */
  304446             : 
  304447             :       /*! returns a C style string (char*) representing the class name */
  304448             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  304449             : 
  304450             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  304451             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  304452             : #if 0
  304453             :       /*! returns old style Sage II enum values */
  304454             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  304455             :       /*! returns old style Sage II enum values */
  304456             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  304457             : #endif
  304458             :       /* */
  304459             : 
  304460             : 
  304461             : 
  304462             : 
  304463             :      public:
  304464             :       /* name Traversal Support Functions
  304465             :           \brief Traversal support functions ... incomplete-documentation
  304466             : 
  304467             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304468             :           or by particularly knowledgable users for specialized tools or applications.
  304469             :        */
  304470             :       /* */
  304471             : 
  304472             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  304473             :        // (inferior to ROSE traversal mechanism, experimental).
  304474             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  304475             :        */
  304476             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  304477             : 
  304478             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  304479             :       /*! \brief support for the classic visitor pattern done in GoF */
  304480             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  304481             : 
  304482             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  304483             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  304484             :        */
  304485             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  304486             : 
  304487             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  304488             :        */
  304489             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  304490             : 
  304491             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  304492             :        // This traversal helps support internal tools that call static member functions.
  304493             :        // note: this function operates on the memory pools.
  304494             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  304495             :        */
  304496             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  304497             :       /* */
  304498             : 
  304499             : 
  304500             :      public:
  304501             :       /* name Memory Allocation Functions
  304502             :           \brief Memory allocations functions ... incomplete-documentation
  304503             : 
  304504             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304505             :           or by particularly knowledgable users for specialized tools or applications.
  304506             :        */
  304507             :       /* */
  304508             : 
  304509             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  304510             : 
  304511             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  304512             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  304513             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  304514             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  304515             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  304516             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  304517             :           being used with the AST File I/O mechanism.
  304518             :        */
  304519             :           virtual bool isInMemoryPool() override;
  304520             : 
  304521             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  304522             : 
  304523             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  304524             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  304525             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  304526             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  304527             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  304528             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  304529             :           being used with the AST File I/O mechanism.
  304530             :        */
  304531             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  304532             : 
  304533             :       // DQ (4/30/2006): Modified to be a const function.
  304534             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  304535             : 
  304536             :           This functions is part of general support for many possible tools to operate 
  304537             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  304538             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  304539             :           less than the set of pointers used by the AST file I/O. This is part of
  304540             :           work implemented by Andreas, and support tools such as the AST graph generation.
  304541             : 
  304542             :           \warning This function can return unexpected data members and thus the 
  304543             :                    order and the number of elements is unpredicable and subject 
  304544             :                    to change.
  304545             : 
  304546             :           \returns STL vector of pairs of SgNode* and strings
  304547             :        */
  304548             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  304549             : 
  304550             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  304551             : 
  304552             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  304553             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  304554             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  304555             : 
  304556             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  304557             :                    and subject to change.
  304558             :        */
  304559             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  304560             : 
  304561             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  304562             : 
  304563             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  304564             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  304565             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  304566             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  304567             : 
  304568             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  304569             : 
  304570             :           \returns long
  304571             :        */
  304572             :           virtual long getChildIndex( SgNode* childNode ) const override;
  304573             : 
  304574             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  304575             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  304576             :       /* \brief Constructor for use by AST File I/O Mechanism
  304577             : 
  304578             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  304579             :           which obtained via fast binary file I/O from disk.
  304580             :        */
  304581             :        // SgImpliedDo( SgImpliedDoStorageClass& source );
  304582             : 
  304583             : 
  304584             : 
  304585             : 
  304586             : 
  304587             :  // JH (10/24/2005): methods added to support the ast file IO
  304588             :     private:
  304589             : 
  304590             :       /* name AST Memory Allocation Support Functions
  304591             :           \brief Memory allocations support....
  304592             : 
  304593             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  304594             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  304595             :           and support the AST File I/O Mechanism.
  304596             :        */
  304597             :       /* */
  304598             : 
  304599             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  304600             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  304601             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  304602             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  304603             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  304604             :           a correspinding one in the AST_FILE_IO class!
  304605             :        */
  304606             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  304607             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  304608             :       /* \brief Typedef used for low level memory access.
  304609             :        */
  304610             :        // typedef unsigned char* TestType;
  304611             : 
  304612             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  304613             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  304614             :       /* \brief Typedef used to hold memory addresses as values.
  304615             :        */
  304616             :        // typedef unsigned long  AddressType;
  304617             : 
  304618             : 
  304619             : 
  304620             :        // necessary, to have direct access to the p_freepointer and the private methods !
  304621             :       /*! \brief friend class declaration to support AST File I/O */
  304622             :           friend class AST_FILE_IO;
  304623             : 
  304624             :       /*! \brief friend class declaration to support AST File I/O */
  304625             :           friend class SgImpliedDoStorageClass;
  304626             : 
  304627             :       /*! \brief friend class declaration to support AST File I/O */
  304628             :           friend class AstSpecificDataManagingClass;
  304629             : 
  304630             :       /*! \brief friend class declaration to support AST File I/O */
  304631             :           friend class AstSpecificDataManagingClassStorageClass;
  304632             :     public:
  304633             :       /*! \brief IR node constructor to support AST File I/O */
  304634             :           SgImpliedDo( const SgImpliedDoStorageClass& source );
  304635             : 
  304636             :  // private: // JJW hack
  304637             :        /*
  304638             :           name AST Memory Allocation Support Variables
  304639             :           Memory allocations support variables 
  304640             : 
  304641             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  304642             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  304643             :           and support the AST File I/O Mechanism.
  304644             :        */
  304645             :       /* */
  304646             : 
  304647             :     public:
  304648             : 
  304649             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  304650             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  304651             :       // virtual SgNode* addRegExpAttribute();
  304652             :       /*! \brief Support for AST matching using regular expression.
  304653             : 
  304654             :           This support is incomplete and the subject of current research to define 
  304655             :           RegEx trees to support inexact matching.
  304656             :        */
  304657             :           SgImpliedDo* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  304658             : 
  304659             : // *** COMMON CODE SECTION ENDS HERE ***
  304660             : 
  304661             : 
  304662             : // End of memberFunctionString
  304663             : // Start of memberFunctionString
  304664             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  304665             : 
  304666             :      // the generated cast function
  304667             :      // friend ROSE_DLL_API SgImpliedDo* isSgImpliedDo ( SgNode* s );
  304668             : 
  304669             :           typedef SgExpression base_node_type;
  304670             : 
  304671             : 
  304672             : // End of memberFunctionString
  304673             : // Start of memberFunctionString
  304674             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  304675             : 
  304676             :           SgType* get_type() const override;
  304677             : 
  304678             : 
  304679             : // End of memberFunctionString
  304680             : // Start of memberFunctionString
  304681             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  304682             : 
  304683             :           void post_construction_initialization() override;
  304684             : 
  304685             : 
  304686             : // End of memberFunctionString
  304687             : 
  304688             :      public: 
  304689             :          SgExpression* get_do_var_initialization() const;
  304690             :          void set_do_var_initialization(SgExpression* do_var_initialization);
  304691             : 
  304692             :      public: 
  304693             :          SgExpression* get_last_val() const;
  304694             :          void set_last_val(SgExpression* last_val);
  304695             : 
  304696             :      public: 
  304697             :          SgExpression* get_increment() const;
  304698             :          void set_increment(SgExpression* increment);
  304699             : 
  304700             :      public: 
  304701             :          SgExprListExp* get_object_list() const;
  304702             :          void set_object_list(SgExprListExp* object_list);
  304703             : 
  304704             :      public: 
  304705             :          SgScopeStatement* get_implied_do_scope() const;
  304706             :          void set_implied_do_scope(SgScopeStatement* implied_do_scope);
  304707             : 
  304708             : 
  304709             :      public: 
  304710             :          virtual ~SgImpliedDo();
  304711             : 
  304712             : 
  304713             :      public: 
  304714             :          SgImpliedDo(Sg_File_Info* startOfConstruct , SgExpression* do_var_initialization = NULL, SgExpression* last_val = NULL, SgExpression* increment = NULL, SgExprListExp* object_list = NULL, SgScopeStatement* implied_do_scope = NULL); 
  304715             :          SgImpliedDo(SgExpression* do_var_initialization, SgExpression* last_val, SgExpression* increment, SgExprListExp* object_list, SgScopeStatement* implied_do_scope); 
  304716             : 
  304717             :     protected:
  304718             : // Start of memberFunctionString
  304719             : SgExpression* p_do_var_initialization;
  304720             :           
  304721             : // End of memberFunctionString
  304722             : // Start of memberFunctionString
  304723             : SgExpression* p_last_val;
  304724             :           
  304725             : // End of memberFunctionString
  304726             : // Start of memberFunctionString
  304727             : SgExpression* p_increment;
  304728             :           
  304729             : // End of memberFunctionString
  304730             : // Start of memberFunctionString
  304731             : SgExprListExp* p_object_list;
  304732             :           
  304733             : // End of memberFunctionString
  304734             : // Start of memberFunctionString
  304735             : SgScopeStatement* p_implied_do_scope;
  304736             :           
  304737             : // End of memberFunctionString
  304738             : 
  304739             :     friend struct Rose::Traits::generated::describe_node_t<SgImpliedDo>;
  304740             :     friend struct Rose::Traits::generated::describe_field_t<SgImpliedDo, SgExpression*,&SgImpliedDo::p_do_var_initialization>;
  304741             :     friend struct Rose::Traits::generated::describe_field_t<SgImpliedDo, SgExpression*,&SgImpliedDo::p_last_val>;
  304742             :     friend struct Rose::Traits::generated::describe_field_t<SgImpliedDo, SgExpression*,&SgImpliedDo::p_increment>;
  304743             :     friend struct Rose::Traits::generated::describe_field_t<SgImpliedDo, SgExprListExp*,&SgImpliedDo::p_object_list>;
  304744             :     friend struct Rose::Traits::generated::describe_field_t<SgImpliedDo, SgScopeStatement*,&SgImpliedDo::p_implied_do_scope>;
  304745             : 
  304746             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304747             : 
  304748             : 
  304749             :    };
  304750             : #endif
  304751             : 
  304752             : // postdeclarations for SgImpliedDo
  304753             : 
  304754             : /* #line 304755 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304755             : 
  304756             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  304757             : 
  304758             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304759             : 
  304760             : 
  304761             : /* #line 304762 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304762             : 
  304763             : 
  304764             : 
  304765             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304766             : 
  304767             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  304768             : //      This code is automatically generated for each 
  304769             : //      terminal and non-terminal within the defined 
  304770             : //      grammar.  There is a simple way to change the 
  304771             : //      code to fix bugs etc.  See the ROSE README file
  304772             : //      for directions.
  304773             : 
  304774             : // tps: (02/22/2010): Adding DLL export requirements
  304775             : #include "rosedll.h"
  304776             : 
  304777             : // predeclarations for SgIOItemExpression
  304778             : 
  304779             : /* #line 304780 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304780             : 
  304781             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  304782             : 
  304783             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  304784             : 
  304785             : #if 1
  304786             : // Class Definition for SgIOItemExpression
  304787             : class ROSE_DLL_API SgIOItemExpression  : public SgExpression
  304788             :    {
  304789             :      public:
  304790             : 
  304791             : 
  304792             : /* #line 304793 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  304793             : 
  304794             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  304795             : // Start of memberFunctionString
  304796             : /* #line 1800 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  304797             : 
  304798             : 
  304799             : 
  304800             : // End of memberFunctionString
  304801             : // Start of memberFunctionString
  304802             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  304803             : 
  304804             : // *** COMMON CODE SECTION BEGINS HERE ***
  304805             : 
  304806             :     public:
  304807             : 
  304808             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  304809             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  304810             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  304811             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  304812             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  304813             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  304814             : 
  304815             :       /*! \brief returns a string representing the class name */
  304816             :           virtual std::string class_name() const override;
  304817             : 
  304818             :       /*! \brief returns new style SageIII enum values */
  304819             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  304820             : 
  304821             :       /*! \brief static variant value */
  304822             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  304823             :        // static const VariantT static_variant = V_SgIOItemExpression;
  304824             :           enum { static_variant = V_SgIOItemExpression };
  304825             : 
  304826             :        /* the generated cast function */
  304827             :       /*! \brief Casts pointer from base class to derived class */
  304828             :           ROSE_DLL_API friend       SgIOItemExpression* isSgIOItemExpression(       SgNode * s );
  304829             : 
  304830             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  304831             :           ROSE_DLL_API friend const SgIOItemExpression* isSgIOItemExpression( const SgNode * s );
  304832             : 
  304833             :      // ******************************************
  304834             :      // * Memory Pool / New / Delete
  304835             :      // ******************************************
  304836             : 
  304837             :      public:
  304838             :           /// \private
  304839             :           static const unsigned pool_size; //
  304840             :           /// \private
  304841             :           static std::vector<unsigned char *> pools; //
  304842             :           /// \private
  304843             :           static SgIOItemExpression * next_node; // 
  304844             : 
  304845             :           /// \private
  304846             :           static unsigned long initializeStorageClassArray(SgIOItemExpressionStorageClass *); //
  304847             : 
  304848             :           /// \private
  304849             :           static void clearMemoryPool(); //
  304850             :           static void deleteMemoryPool(); //
  304851             : 
  304852             :           /// \private
  304853             :           static void extendMemoryPoolForFileIO(); //
  304854             : 
  304855             :           /// \private
  304856             :           static SgIOItemExpression * getPointerFromGlobalIndex(unsigned long); //
  304857             :           /// \private
  304858             :           static SgIOItemExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  304859             : 
  304860             :           /// \private
  304861             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  304862             :           /// \private
  304863             :           static void resetValidFreepointers(); //
  304864             :           /// \private
  304865             :           static unsigned long getNumberOfLastValidPointer(); //
  304866             : 
  304867             : 
  304868             : #if defined(INLINE_FUNCTIONS)
  304869             :       /*! \brief returns pointer to newly allocated IR node */
  304870             :           inline void *operator new (size_t size);
  304871             : #else
  304872             :       /*! \brief returns pointer to newly allocated IR node */
  304873             :           void *operator new (size_t size);
  304874             : #endif
  304875             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  304876             :           void operator delete (void* pointer, size_t size);
  304877             : 
  304878             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  304879           0 :           void operator delete (void* pointer)
  304880             :              {
  304881             :             // This is the generated delete operator...
  304882           0 :                SgIOItemExpression::operator delete (pointer,sizeof(SgIOItemExpression));
  304883             :              }
  304884             : 
  304885             :       /*! \brief Returns the total number of IR nodes of this type */
  304886             :           static size_t numberOfNodes();
  304887             : 
  304888             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  304889             :           static size_t memoryUsage();
  304890             : 
  304891             :       // End of scope which started in IR nodes specific code 
  304892             :       /* */
  304893             : 
  304894             :       /* name Internal Functions
  304895             :           \brief Internal functions ... incomplete-documentation
  304896             : 
  304897             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304898             :           or by particularly knowledgeable users for specialized tools or applications.
  304899             : 
  304900             :           \internal We could not make these private because they are required by user for special purposes. And 
  304901             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  304902             :          
  304903             :        */
  304904             : 
  304905             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  304906             :        // overridden in every class by *generated* implementation
  304907             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  304908             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  304909             :        // MS: 06/28/02 container of names of variables or container indices 
  304910             :        // used used in the traversal to access AST successor nodes
  304911             :        // overridden in every class by *generated* implementation
  304912             :       /*! \brief container of names of variables or container indices used used in the traversal
  304913             :           to access AST successor nodes overridden in every class by *generated* implementation */
  304914             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  304915             : 
  304916             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  304917             :        // than all the vector copies. The implementation for these functions is generated for each class.
  304918             :       /*! \brief return number of children in the traversal successor list */
  304919             :           virtual size_t get_numberOfTraversalSuccessors() override;
  304920             :       /*! \brief index-based access to traversal successors by index number */
  304921             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  304922             :       /*! \brief index-based access to traversal successors by child node */
  304923             :           virtual size_t get_childIndex(SgNode *child) override;
  304924             : 
  304925             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  304926             :        // MS: 08/16/2002 method for generating RTI information
  304927             :       /*! \brief return C++ Runtime-Time-Information */
  304928             :           virtual RTIReturnType roseRTI() override;
  304929             : #endif
  304930             :       /* */
  304931             : 
  304932             : 
  304933             : 
  304934             :       /* name Deprecated Functions
  304935             :           \brief Deprecated functions ... incomplete-documentation
  304936             : 
  304937             :           These functions have been deprecated from use.
  304938             :        */
  304939             :       /* */
  304940             : 
  304941             :       /*! returns a C style string (char*) representing the class name */
  304942             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  304943             : 
  304944             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  304945             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  304946             : #if 0
  304947             :       /*! returns old style Sage II enum values */
  304948             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  304949             :       /*! returns old style Sage II enum values */
  304950             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  304951             : #endif
  304952             :       /* */
  304953             : 
  304954             : 
  304955             : 
  304956             : 
  304957             :      public:
  304958             :       /* name Traversal Support Functions
  304959             :           \brief Traversal support functions ... incomplete-documentation
  304960             : 
  304961             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304962             :           or by particularly knowledgable users for specialized tools or applications.
  304963             :        */
  304964             :       /* */
  304965             : 
  304966             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  304967             :        // (inferior to ROSE traversal mechanism, experimental).
  304968             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  304969             :        */
  304970             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  304971             : 
  304972             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  304973             :       /*! \brief support for the classic visitor pattern done in GoF */
  304974             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  304975             : 
  304976             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  304977             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  304978             :        */
  304979             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  304980             : 
  304981             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  304982             :        */
  304983             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  304984             : 
  304985             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  304986             :        // This traversal helps support internal tools that call static member functions.
  304987             :        // note: this function operates on the memory pools.
  304988             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  304989             :        */
  304990             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  304991             :       /* */
  304992             : 
  304993             : 
  304994             :      public:
  304995             :       /* name Memory Allocation Functions
  304996             :           \brief Memory allocations functions ... incomplete-documentation
  304997             : 
  304998             :           These functions have been made public as part of the design, but they are suggested for internal use 
  304999             :           or by particularly knowledgable users for specialized tools or applications.
  305000             :        */
  305001             :       /* */
  305002             : 
  305003             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  305004             : 
  305005             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  305006             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  305007             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  305008             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  305009             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  305010             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  305011             :           being used with the AST File I/O mechanism.
  305012             :        */
  305013             :           virtual bool isInMemoryPool() override;
  305014             : 
  305015             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  305016             : 
  305017             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  305018             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  305019             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  305020             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  305021             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  305022             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  305023             :           being used with the AST File I/O mechanism.
  305024             :        */
  305025             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  305026             : 
  305027             :       // DQ (4/30/2006): Modified to be a const function.
  305028             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  305029             : 
  305030             :           This functions is part of general support for many possible tools to operate 
  305031             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  305032             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  305033             :           less than the set of pointers used by the AST file I/O. This is part of
  305034             :           work implemented by Andreas, and support tools such as the AST graph generation.
  305035             : 
  305036             :           \warning This function can return unexpected data members and thus the 
  305037             :                    order and the number of elements is unpredicable and subject 
  305038             :                    to change.
  305039             : 
  305040             :           \returns STL vector of pairs of SgNode* and strings
  305041             :        */
  305042             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  305043             : 
  305044             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  305045             : 
  305046             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  305047             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  305048             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  305049             : 
  305050             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  305051             :                    and subject to change.
  305052             :        */
  305053             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  305054             : 
  305055             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  305056             : 
  305057             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  305058             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  305059             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  305060             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  305061             : 
  305062             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  305063             : 
  305064             :           \returns long
  305065             :        */
  305066             :           virtual long getChildIndex( SgNode* childNode ) const override;
  305067             : 
  305068             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  305069             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  305070             :       /* \brief Constructor for use by AST File I/O Mechanism
  305071             : 
  305072             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  305073             :           which obtained via fast binary file I/O from disk.
  305074             :        */
  305075             :        // SgIOItemExpression( SgIOItemExpressionStorageClass& source );
  305076             : 
  305077             : 
  305078             : 
  305079             : 
  305080             : 
  305081             :  // JH (10/24/2005): methods added to support the ast file IO
  305082             :     private:
  305083             : 
  305084             :       /* name AST Memory Allocation Support Functions
  305085             :           \brief Memory allocations support....
  305086             : 
  305087             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  305088             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  305089             :           and support the AST File I/O Mechanism.
  305090             :        */
  305091             :       /* */
  305092             : 
  305093             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  305094             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  305095             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  305096             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  305097             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  305098             :           a correspinding one in the AST_FILE_IO class!
  305099             :        */
  305100             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  305101             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  305102             :       /* \brief Typedef used for low level memory access.
  305103             :        */
  305104             :        // typedef unsigned char* TestType;
  305105             : 
  305106             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  305107             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  305108             :       /* \brief Typedef used to hold memory addresses as values.
  305109             :        */
  305110             :        // typedef unsigned long  AddressType;
  305111             : 
  305112             : 
  305113             : 
  305114             :        // necessary, to have direct access to the p_freepointer and the private methods !
  305115             :       /*! \brief friend class declaration to support AST File I/O */
  305116             :           friend class AST_FILE_IO;
  305117             : 
  305118             :       /*! \brief friend class declaration to support AST File I/O */
  305119             :           friend class SgIOItemExpressionStorageClass;
  305120             : 
  305121             :       /*! \brief friend class declaration to support AST File I/O */
  305122             :           friend class AstSpecificDataManagingClass;
  305123             : 
  305124             :       /*! \brief friend class declaration to support AST File I/O */
  305125             :           friend class AstSpecificDataManagingClassStorageClass;
  305126             :     public:
  305127             :       /*! \brief IR node constructor to support AST File I/O */
  305128             :           SgIOItemExpression( const SgIOItemExpressionStorageClass& source );
  305129             : 
  305130             :  // private: // JJW hack
  305131             :        /*
  305132             :           name AST Memory Allocation Support Variables
  305133             :           Memory allocations support variables 
  305134             : 
  305135             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  305136             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  305137             :           and support the AST File I/O Mechanism.
  305138             :        */
  305139             :       /* */
  305140             : 
  305141             :     public:
  305142             : 
  305143             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  305144             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  305145             :       // virtual SgNode* addRegExpAttribute();
  305146             :       /*! \brief Support for AST matching using regular expression.
  305147             : 
  305148             :           This support is incomplete and the subject of current research to define 
  305149             :           RegEx trees to support inexact matching.
  305150             :        */
  305151             :           SgIOItemExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  305152             : 
  305153             : // *** COMMON CODE SECTION ENDS HERE ***
  305154             : 
  305155             : 
  305156             : // End of memberFunctionString
  305157             : // Start of memberFunctionString
  305158             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  305159             : 
  305160             :      // the generated cast function
  305161             :      // friend ROSE_DLL_API SgIOItemExpression* isSgIOItemExpression ( SgNode* s );
  305162             : 
  305163             :           typedef SgExpression base_node_type;
  305164             : 
  305165             : 
  305166             : // End of memberFunctionString
  305167             : // Start of memberFunctionString
  305168             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  305169             : 
  305170             :           SgType* get_type() const override;
  305171             : 
  305172             : 
  305173             : // End of memberFunctionString
  305174             : // Start of memberFunctionString
  305175             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  305176             : 
  305177             :           void post_construction_initialization() override;
  305178             : 
  305179             : 
  305180             : // End of memberFunctionString
  305181             : 
  305182             :      public: 
  305183             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  305184             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  305185             : 
  305186             :      public: 
  305187             :          SgExpression* get_io_item() const;
  305188             :          void set_io_item(SgExpression* io_item);
  305189             : 
  305190             : 
  305191             :      public: 
  305192             :          virtual ~SgIOItemExpression();
  305193             : 
  305194             : 
  305195             :      public: 
  305196             :          SgIOItemExpression(Sg_File_Info* startOfConstruct , SgName name = "", SgExpression* io_item = NULL); 
  305197             :          SgIOItemExpression(SgName name, SgExpression* io_item); 
  305198             : 
  305199             :     protected:
  305200             : // Start of memberFunctionString
  305201             : SgName p_name;
  305202             :           
  305203             : // End of memberFunctionString
  305204             : // Start of memberFunctionString
  305205             : SgExpression* p_io_item;
  305206             :           
  305207             : // End of memberFunctionString
  305208             : 
  305209             :     friend struct Rose::Traits::generated::describe_node_t<SgIOItemExpression>;
  305210             :     friend struct Rose::Traits::generated::describe_field_t<SgIOItemExpression, SgName,&SgIOItemExpression::p_name>;
  305211             :     friend struct Rose::Traits::generated::describe_field_t<SgIOItemExpression, SgExpression*,&SgIOItemExpression::p_io_item>;
  305212             : 
  305213             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305214             : 
  305215             : 
  305216             :    };
  305217             : #endif
  305218             : 
  305219             : // postdeclarations for SgIOItemExpression
  305220             : 
  305221             : /* #line 305222 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305222             : 
  305223             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  305224             : 
  305225             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305226             : 
  305227             : 
  305228             : /* #line 305229 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305229             : 
  305230             : 
  305231             : 
  305232             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305233             : 
  305234             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  305235             : //      This code is automatically generated for each 
  305236             : //      terminal and non-terminal within the defined 
  305237             : //      grammar.  There is a simple way to change the 
  305238             : //      code to fix bugs etc.  See the ROSE README file
  305239             : //      for directions.
  305240             : 
  305241             : // tps: (02/22/2010): Adding DLL export requirements
  305242             : #include "rosedll.h"
  305243             : 
  305244             : // predeclarations for SgStatementExpression
  305245             : 
  305246             : /* #line 305247 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305247             : 
  305248             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  305249             : 
  305250             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305251             : 
  305252             : #if 1
  305253             : // Class Definition for SgStatementExpression
  305254             : class ROSE_DLL_API SgStatementExpression  : public SgExpression
  305255             :    {
  305256             :      public:
  305257             : 
  305258             : 
  305259             : /* #line 305260 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305260             : 
  305261             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  305262             : // Start of memberFunctionString
  305263             : /* #line 1643 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  305264             : 
  305265             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  305266             :           virtual unsigned int cfgIndexForEnd() const override;
  305267             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  305268             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  305269             : #endif
  305270             : 
  305271             : 
  305272             : 
  305273             : // End of memberFunctionString
  305274             : // Start of memberFunctionString
  305275             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  305276             : 
  305277             : // *** COMMON CODE SECTION BEGINS HERE ***
  305278             : 
  305279             :     public:
  305280             : 
  305281             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  305282             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  305283             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  305284             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  305285             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  305286             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  305287             : 
  305288             :       /*! \brief returns a string representing the class name */
  305289             :           virtual std::string class_name() const override;
  305290             : 
  305291             :       /*! \brief returns new style SageIII enum values */
  305292             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  305293             : 
  305294             :       /*! \brief static variant value */
  305295             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  305296             :        // static const VariantT static_variant = V_SgStatementExpression;
  305297             :           enum { static_variant = V_SgStatementExpression };
  305298             : 
  305299             :        /* the generated cast function */
  305300             :       /*! \brief Casts pointer from base class to derived class */
  305301             :           ROSE_DLL_API friend       SgStatementExpression* isSgStatementExpression(       SgNode * s );
  305302             : 
  305303             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  305304             :           ROSE_DLL_API friend const SgStatementExpression* isSgStatementExpression( const SgNode * s );
  305305             : 
  305306             :      // ******************************************
  305307             :      // * Memory Pool / New / Delete
  305308             :      // ******************************************
  305309             : 
  305310             :      public:
  305311             :           /// \private
  305312             :           static const unsigned pool_size; //
  305313             :           /// \private
  305314             :           static std::vector<unsigned char *> pools; //
  305315             :           /// \private
  305316             :           static SgStatementExpression * next_node; // 
  305317             : 
  305318             :           /// \private
  305319             :           static unsigned long initializeStorageClassArray(SgStatementExpressionStorageClass *); //
  305320             : 
  305321             :           /// \private
  305322             :           static void clearMemoryPool(); //
  305323             :           static void deleteMemoryPool(); //
  305324             : 
  305325             :           /// \private
  305326             :           static void extendMemoryPoolForFileIO(); //
  305327             : 
  305328             :           /// \private
  305329             :           static SgStatementExpression * getPointerFromGlobalIndex(unsigned long); //
  305330             :           /// \private
  305331             :           static SgStatementExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  305332             : 
  305333             :           /// \private
  305334             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  305335             :           /// \private
  305336             :           static void resetValidFreepointers(); //
  305337             :           /// \private
  305338             :           static unsigned long getNumberOfLastValidPointer(); //
  305339             : 
  305340             : 
  305341             : #if defined(INLINE_FUNCTIONS)
  305342             :       /*! \brief returns pointer to newly allocated IR node */
  305343             :           inline void *operator new (size_t size);
  305344             : #else
  305345             :       /*! \brief returns pointer to newly allocated IR node */
  305346             :           void *operator new (size_t size);
  305347             : #endif
  305348             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  305349             :           void operator delete (void* pointer, size_t size);
  305350             : 
  305351             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  305352           0 :           void operator delete (void* pointer)
  305353             :              {
  305354             :             // This is the generated delete operator...
  305355           0 :                SgStatementExpression::operator delete (pointer,sizeof(SgStatementExpression));
  305356             :              }
  305357             : 
  305358             :       /*! \brief Returns the total number of IR nodes of this type */
  305359             :           static size_t numberOfNodes();
  305360             : 
  305361             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  305362             :           static size_t memoryUsage();
  305363             : 
  305364             :       // End of scope which started in IR nodes specific code 
  305365             :       /* */
  305366             : 
  305367             :       /* name Internal Functions
  305368             :           \brief Internal functions ... incomplete-documentation
  305369             : 
  305370             :           These functions have been made public as part of the design, but they are suggested for internal use 
  305371             :           or by particularly knowledgeable users for specialized tools or applications.
  305372             : 
  305373             :           \internal We could not make these private because they are required by user for special purposes. And 
  305374             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  305375             :          
  305376             :        */
  305377             : 
  305378             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  305379             :        // overridden in every class by *generated* implementation
  305380             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  305381             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  305382             :        // MS: 06/28/02 container of names of variables or container indices 
  305383             :        // used used in the traversal to access AST successor nodes
  305384             :        // overridden in every class by *generated* implementation
  305385             :       /*! \brief container of names of variables or container indices used used in the traversal
  305386             :           to access AST successor nodes overridden in every class by *generated* implementation */
  305387             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  305388             : 
  305389             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  305390             :        // than all the vector copies. The implementation for these functions is generated for each class.
  305391             :       /*! \brief return number of children in the traversal successor list */
  305392             :           virtual size_t get_numberOfTraversalSuccessors() override;
  305393             :       /*! \brief index-based access to traversal successors by index number */
  305394             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  305395             :       /*! \brief index-based access to traversal successors by child node */
  305396             :           virtual size_t get_childIndex(SgNode *child) override;
  305397             : 
  305398             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  305399             :        // MS: 08/16/2002 method for generating RTI information
  305400             :       /*! \brief return C++ Runtime-Time-Information */
  305401             :           virtual RTIReturnType roseRTI() override;
  305402             : #endif
  305403             :       /* */
  305404             : 
  305405             : 
  305406             : 
  305407             :       /* name Deprecated Functions
  305408             :           \brief Deprecated functions ... incomplete-documentation
  305409             : 
  305410             :           These functions have been deprecated from use.
  305411             :        */
  305412             :       /* */
  305413             : 
  305414             :       /*! returns a C style string (char*) representing the class name */
  305415             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  305416             : 
  305417             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  305418             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  305419             : #if 0
  305420             :       /*! returns old style Sage II enum values */
  305421             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  305422             :       /*! returns old style Sage II enum values */
  305423             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  305424             : #endif
  305425             :       /* */
  305426             : 
  305427             : 
  305428             : 
  305429             : 
  305430             :      public:
  305431             :       /* name Traversal Support Functions
  305432             :           \brief Traversal support functions ... incomplete-documentation
  305433             : 
  305434             :           These functions have been made public as part of the design, but they are suggested for internal use 
  305435             :           or by particularly knowledgable users for specialized tools or applications.
  305436             :        */
  305437             :       /* */
  305438             : 
  305439             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  305440             :        // (inferior to ROSE traversal mechanism, experimental).
  305441             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  305442             :        */
  305443             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  305444             : 
  305445             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  305446             :       /*! \brief support for the classic visitor pattern done in GoF */
  305447             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  305448             : 
  305449             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  305450             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  305451             :        */
  305452             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  305453             : 
  305454             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  305455             :        */
  305456             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  305457             : 
  305458             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  305459             :        // This traversal helps support internal tools that call static member functions.
  305460             :        // note: this function operates on the memory pools.
  305461             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  305462             :        */
  305463             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  305464             :       /* */
  305465             : 
  305466             : 
  305467             :      public:
  305468             :       /* name Memory Allocation Functions
  305469             :           \brief Memory allocations functions ... incomplete-documentation
  305470             : 
  305471             :           These functions have been made public as part of the design, but they are suggested for internal use 
  305472             :           or by particularly knowledgable users for specialized tools or applications.
  305473             :        */
  305474             :       /* */
  305475             : 
  305476             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  305477             : 
  305478             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  305479             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  305480             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  305481             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  305482             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  305483             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  305484             :           being used with the AST File I/O mechanism.
  305485             :        */
  305486             :           virtual bool isInMemoryPool() override;
  305487             : 
  305488             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  305489             : 
  305490             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  305491             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  305492             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  305493             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  305494             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  305495             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  305496             :           being used with the AST File I/O mechanism.
  305497             :        */
  305498             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  305499             : 
  305500             :       // DQ (4/30/2006): Modified to be a const function.
  305501             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  305502             : 
  305503             :           This functions is part of general support for many possible tools to operate 
  305504             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  305505             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  305506             :           less than the set of pointers used by the AST file I/O. This is part of
  305507             :           work implemented by Andreas, and support tools such as the AST graph generation.
  305508             : 
  305509             :           \warning This function can return unexpected data members and thus the 
  305510             :                    order and the number of elements is unpredicable and subject 
  305511             :                    to change.
  305512             : 
  305513             :           \returns STL vector of pairs of SgNode* and strings
  305514             :        */
  305515             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  305516             : 
  305517             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  305518             : 
  305519             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  305520             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  305521             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  305522             : 
  305523             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  305524             :                    and subject to change.
  305525             :        */
  305526             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  305527             : 
  305528             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  305529             : 
  305530             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  305531             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  305532             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  305533             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  305534             : 
  305535             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  305536             : 
  305537             :           \returns long
  305538             :        */
  305539             :           virtual long getChildIndex( SgNode* childNode ) const override;
  305540             : 
  305541             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  305542             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  305543             :       /* \brief Constructor for use by AST File I/O Mechanism
  305544             : 
  305545             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  305546             :           which obtained via fast binary file I/O from disk.
  305547             :        */
  305548             :        // SgStatementExpression( SgStatementExpressionStorageClass& source );
  305549             : 
  305550             : 
  305551             : 
  305552             : 
  305553             : 
  305554             :  // JH (10/24/2005): methods added to support the ast file IO
  305555             :     private:
  305556             : 
  305557             :       /* name AST Memory Allocation Support Functions
  305558             :           \brief Memory allocations support....
  305559             : 
  305560             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  305561             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  305562             :           and support the AST File I/O Mechanism.
  305563             :        */
  305564             :       /* */
  305565             : 
  305566             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  305567             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  305568             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  305569             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  305570             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  305571             :           a correspinding one in the AST_FILE_IO class!
  305572             :        */
  305573             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  305574             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  305575             :       /* \brief Typedef used for low level memory access.
  305576             :        */
  305577             :        // typedef unsigned char* TestType;
  305578             : 
  305579             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  305580             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  305581             :       /* \brief Typedef used to hold memory addresses as values.
  305582             :        */
  305583             :        // typedef unsigned long  AddressType;
  305584             : 
  305585             : 
  305586             : 
  305587             :        // necessary, to have direct access to the p_freepointer and the private methods !
  305588             :       /*! \brief friend class declaration to support AST File I/O */
  305589             :           friend class AST_FILE_IO;
  305590             : 
  305591             :       /*! \brief friend class declaration to support AST File I/O */
  305592             :           friend class SgStatementExpressionStorageClass;
  305593             : 
  305594             :       /*! \brief friend class declaration to support AST File I/O */
  305595             :           friend class AstSpecificDataManagingClass;
  305596             : 
  305597             :       /*! \brief friend class declaration to support AST File I/O */
  305598             :           friend class AstSpecificDataManagingClassStorageClass;
  305599             :     public:
  305600             :       /*! \brief IR node constructor to support AST File I/O */
  305601             :           SgStatementExpression( const SgStatementExpressionStorageClass& source );
  305602             : 
  305603             :  // private: // JJW hack
  305604             :        /*
  305605             :           name AST Memory Allocation Support Variables
  305606             :           Memory allocations support variables 
  305607             : 
  305608             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  305609             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  305610             :           and support the AST File I/O Mechanism.
  305611             :        */
  305612             :       /* */
  305613             : 
  305614             :     public:
  305615             : 
  305616             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  305617             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  305618             :       // virtual SgNode* addRegExpAttribute();
  305619             :       /*! \brief Support for AST matching using regular expression.
  305620             : 
  305621             :           This support is incomplete and the subject of current research to define 
  305622             :           RegEx trees to support inexact matching.
  305623             :        */
  305624             :           SgStatementExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  305625             : 
  305626             : // *** COMMON CODE SECTION ENDS HERE ***
  305627             : 
  305628             : 
  305629             : // End of memberFunctionString
  305630             : // Start of memberFunctionString
  305631             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  305632             : 
  305633             :      // the generated cast function
  305634             :      // friend ROSE_DLL_API SgStatementExpression* isSgStatementExpression ( SgNode* s );
  305635             : 
  305636             :           typedef SgExpression base_node_type;
  305637             : 
  305638             : 
  305639             : // End of memberFunctionString
  305640             : // Start of memberFunctionString
  305641             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  305642             : 
  305643             :           SgType* get_type() const override;
  305644             : 
  305645             : 
  305646             : // End of memberFunctionString
  305647             : // Start of memberFunctionString
  305648             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  305649             : 
  305650             :           void post_construction_initialization() override;
  305651             : 
  305652             : 
  305653             : // End of memberFunctionString
  305654             : 
  305655             :      public: 
  305656             :          SgStatement* get_statement() const;
  305657             :          void set_statement(SgStatement* statement);
  305658             : 
  305659             : 
  305660             :      public: 
  305661             :          virtual ~SgStatementExpression();
  305662             : 
  305663             : 
  305664             :      public: 
  305665             :          SgStatementExpression(Sg_File_Info* startOfConstruct , SgStatement* statement = NULL); 
  305666             :          SgStatementExpression(SgStatement* statement); 
  305667             : 
  305668             :     protected:
  305669             : // Start of memberFunctionString
  305670             : SgStatement* p_statement;
  305671             :           
  305672             : // End of memberFunctionString
  305673             : 
  305674             :     friend struct Rose::Traits::generated::describe_node_t<SgStatementExpression>;
  305675             :     friend struct Rose::Traits::generated::describe_field_t<SgStatementExpression, SgStatement*,&SgStatementExpression::p_statement>;
  305676             : 
  305677             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305678             : 
  305679             : 
  305680             :    };
  305681             : #endif
  305682             : 
  305683             : // postdeclarations for SgStatementExpression
  305684             : 
  305685             : /* #line 305686 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305686             : 
  305687             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  305688             : 
  305689             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305690             : 
  305691             : 
  305692             : /* #line 305693 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305693             : 
  305694             : 
  305695             : 
  305696             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305697             : 
  305698             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  305699             : //      This code is automatically generated for each 
  305700             : //      terminal and non-terminal within the defined 
  305701             : //      grammar.  There is a simple way to change the 
  305702             : //      code to fix bugs etc.  See the ROSE README file
  305703             : //      for directions.
  305704             : 
  305705             : // tps: (02/22/2010): Adding DLL export requirements
  305706             : #include "rosedll.h"
  305707             : 
  305708             : // predeclarations for SgAsmOp
  305709             : 
  305710             : /* #line 305711 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305711             : 
  305712             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  305713             : 
  305714             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  305715             : 
  305716             : #if 1
  305717             : // Class Definition for SgAsmOp
  305718             : class ROSE_DLL_API SgAsmOp  : public SgExpression
  305719             :    {
  305720             :      public:
  305721             : 
  305722             : 
  305723             : /* #line 305724 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  305724             : 
  305725             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  305726             : // Start of memberFunctionString
  305727             : /* #line 1652 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  305728             : 
  305729             : 
  305730             :        // DQ (7/22/2006): Added support for asm operands and their modifiers
  305731             :       /*! \brief ASM Operand modifiers (multiple values can be specified)
  305732             : 
  305733             :           \internal Multiple values can be specified
  305734             :        */
  305735             :            enum asm_operand_modifier_enum
  305736             :              {
  305737             :                e_unknown           = 0x00, /*!< error */
  305738             :                e_input             = 0x01, /*!< no mod: input operand */
  305739             :                e_output            = 0x02, /*!< =: output operand */
  305740             :                e_modify            = 0x03, /*!< +: read-mod-write operand */
  305741             :                e_earlyclobber      = 0x04, /*!< &: modified early, cannot overlap inputs */
  305742             :                e_commutative       = 0x08, /*!< %: commutative with next operand */
  305743             :                e_ignore_next       = 0x10, /*!< *: ignore next letter as a register pref */
  305744             :                e_ignore_till_comma = 0x20, /*!< #: ignore up to comma as a register pref */
  305745             :                e_poor_choice       = 0x40, /*!< ?: avoid choosing this */
  305746             :                e_bad_choice        = 0x80  /*!< !: really avoid choosing this */
  305747             :              };
  305748             : 
  305749             :        // DQ (7/22/2006): Added support for asm operands and their constraints
  305750             :       /*! \brief ASM operand constraints (multiple values can be specified)
  305751             : 
  305752             :           \internal Only one value can be specified
  305753             :        */
  305754             :           enum asm_operand_constraint_enum
  305755             :              {
  305756             :                e_invalid = 0,
  305757             :                e_end_of_constraint,/*!< ,: For cases with multiple constraints, indicates
  305758             :                                            the end of the current constraint (other
  305759             :                                            constraints may follow); represented by a comma
  305760             :                                            in the input stream. */
  305761             :                /* modifiers */
  305762             :                /* Note that these are parsed, but not acted upon by the front end. */
  305763             :                e_mod_earlyclobber, /*!< &: modified early, cannot overlap inputs */
  305764             :                e_mod_commutative_ops,
  305765             :                                    /*!< %: operands are commutative */
  305766             :                e_mod_ignore,       /*!< #: ignore the rest of this constraint */
  305767             :                e_mod_ignore_char,  /*!< *: ignore following character when choosing
  305768             :                                            register preferences */
  305769             :                e_mod_disparage_slightly,
  305770             :                                    /*!< ?: disparage alternative slightly */
  305771             :                e_mod_disparage_severely,
  305772             :                                    /*!< !: disparage alternative severely */
  305773             :             /* misc */
  305774             :                e_any,              /*!< X: unconstrained */
  305775             :                e_general,          /*!< g: r or i or m */
  305776             :                e_match_0, e_match_1, e_match_2, e_match_3, e_match_4,
  305777             :                e_match_5, e_match_6, e_match_7, e_match_8, e_match_9,
  305778             :                                    /*!< 0-9: same as a previous operand */
  305779             :             /* registers constraints */
  305780             :                e_reg_integer,      /*!< r: any integer register */
  305781             :                e_reg_float,        /*!< f: any float register */
  305782             :             /* memory constraints */
  305783             :                e_mem_any,          /*!< m: any memory location */
  305784             :                e_mem_load,         /* p: any memory location that is valid for a load/
  305785             :                                            push operation */
  305786             :                e_mem_offset,       /*!< o: memory location, if (val + sizeof(object))
  305787             :                                            is also acceptable in this context */
  305788             :                e_mem_nonoffset,    /*!< V: m but not o */
  305789             :                e_mem_autoinc,      /*!< >: mem, ptr incremented before or after op */
  305790             :                e_mem_autodec,      /*!< <: mem, ptr decremented before or after op */
  305791             :             /* immediate constraints */
  305792             :                e_imm_int,          /*!< i: any integer (including symbolic references) */
  305793             :                e_imm_number,       /*!< n: any number known to the compiler (no symbols) */
  305794             :                e_imm_symbol,       /*!< s: any symbolic reference */
  305795             :                e_imm_float,        /*!< E, F: any floating point constant */
  305796             : 
  305797             :             // DQ (7/22/2006): Let's assume we want to include these (controled by EDG's setting of GNU_X86_ASM_EXTENSIONS_ALLOWED start)
  305798             :             /* register constraints */
  305799             :                e_reg_a,            /*!< a: ax */
  305800             :                e_reg_b,            /*!< b: bx */
  305801             :                e_reg_c,            /*!< c: cx */
  305802             :                e_reg_d,            /*!< d: dx */
  305803             :                e_reg_si,           /*!< s: si */
  305804             :                e_reg_di,           /*!< d: di */
  305805             :                e_reg_legacy,       /*!< R: ax bx cx dx si di bp sp (avail. on non-x86-64) */
  305806             :                e_reg_q,            /* q: ax bx cx dx, lower part only (non-x86-64),
  305807             :                                            same as 'r' (x86-64) */
  305808             :                e_reg_Q,            /* Q: ax bx cx dx (non-x86-64), same as 'r' (x86-64) */
  305809             :                e_reg_ad,           /*!< A: ax dx */
  305810             :                e_reg_float_tos,    /*!< t: %st(0) */
  305811             :                e_reg_float_second, /*!< u: %st(1) */
  305812             :                e_reg_sse,          /*!< x: any SSE register */
  305813             :                e_reg_sse2,         /*!< Y: any SSE2 register */
  305814             :                e_reg_mmx,          /*!< y: any MMX register */
  305815             :             /* immediate constraints */
  305816             :                e_imm_short_shift,  /*!< I: [0, 32) */
  305817             :                e_imm_long_shift,   /*!< J: [0, 64) */
  305818             :                e_imm_lea_shift,    /*!< M: [0, 4) */
  305819             :                e_imm_signed8,      /*!< K: [-128, 127] */
  305820             :                e_imm_unsigned8,    /*!< N: [0, 255] */
  305821             :                e_imm_and_zext,     /*!< L: {0xFF, 0xFFFF} */
  305822             :                e_imm_80387,        /*!< G: any 80387 standard constant */
  305823             :                e_imm_sse,          /*!< H: any SSE standard constant */
  305824             :                e_imm_sext32,       /*!< e: any 32-bit quantity sign extended to 64 bits */
  305825             :                e_imm_zext32,       /*!< Z: any 32-bit quantity zero extended to 64 bits */
  305826             :             // DQ (7/22/2006): Let's assume we want to include these (controled by EDG's setting of GNU_X86_ASM_EXTENSIONS_ALLOWED end)
  305827             :                e_last
  305828             :              };
  305829             : 
  305830             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  305831             :           virtual unsigned int cfgIndexForEnd() const override;
  305832             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  305833             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  305834             : #endif
  305835             : 
  305836             : 
  305837             : 
  305838             : // End of memberFunctionString
  305839             : // Start of memberFunctionString
  305840             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  305841             : 
  305842             : // *** COMMON CODE SECTION BEGINS HERE ***
  305843             : 
  305844             :     public:
  305845             : 
  305846             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  305847             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  305848             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  305849             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  305850             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  305851             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  305852             : 
  305853             :       /*! \brief returns a string representing the class name */
  305854             :           virtual std::string class_name() const override;
  305855             : 
  305856             :       /*! \brief returns new style SageIII enum values */
  305857             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  305858             : 
  305859             :       /*! \brief static variant value */
  305860             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  305861             :        // static const VariantT static_variant = V_SgAsmOp;
  305862             :           enum { static_variant = V_SgAsmOp };
  305863             : 
  305864             :        /* the generated cast function */
  305865             :       /*! \brief Casts pointer from base class to derived class */
  305866             :           ROSE_DLL_API friend       SgAsmOp* isSgAsmOp(       SgNode * s );
  305867             : 
  305868             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  305869             :           ROSE_DLL_API friend const SgAsmOp* isSgAsmOp( const SgNode * s );
  305870             : 
  305871             :      // ******************************************
  305872             :      // * Memory Pool / New / Delete
  305873             :      // ******************************************
  305874             : 
  305875             :      public:
  305876             :           /// \private
  305877             :           static const unsigned pool_size; //
  305878             :           /// \private
  305879             :           static std::vector<unsigned char *> pools; //
  305880             :           /// \private
  305881             :           static SgAsmOp * next_node; // 
  305882             : 
  305883             :           /// \private
  305884             :           static unsigned long initializeStorageClassArray(SgAsmOpStorageClass *); //
  305885             : 
  305886             :           /// \private
  305887             :           static void clearMemoryPool(); //
  305888             :           static void deleteMemoryPool(); //
  305889             : 
  305890             :           /// \private
  305891             :           static void extendMemoryPoolForFileIO(); //
  305892             : 
  305893             :           /// \private
  305894             :           static SgAsmOp * getPointerFromGlobalIndex(unsigned long); //
  305895             :           /// \private
  305896             :           static SgAsmOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  305897             : 
  305898             :           /// \private
  305899             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  305900             :           /// \private
  305901             :           static void resetValidFreepointers(); //
  305902             :           /// \private
  305903             :           static unsigned long getNumberOfLastValidPointer(); //
  305904             : 
  305905             : 
  305906             : #if defined(INLINE_FUNCTIONS)
  305907             :       /*! \brief returns pointer to newly allocated IR node */
  305908             :           inline void *operator new (size_t size);
  305909             : #else
  305910             :       /*! \brief returns pointer to newly allocated IR node */
  305911             :           void *operator new (size_t size);
  305912             : #endif
  305913             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  305914             :           void operator delete (void* pointer, size_t size);
  305915             : 
  305916             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  305917           0 :           void operator delete (void* pointer)
  305918             :              {
  305919             :             // This is the generated delete operator...
  305920           0 :                SgAsmOp::operator delete (pointer,sizeof(SgAsmOp));
  305921             :              }
  305922             : 
  305923             :       /*! \brief Returns the total number of IR nodes of this type */
  305924             :           static size_t numberOfNodes();
  305925             : 
  305926             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  305927             :           static size_t memoryUsage();
  305928             : 
  305929             :       // End of scope which started in IR nodes specific code 
  305930             :       /* */
  305931             : 
  305932             :       /* name Internal Functions
  305933             :           \brief Internal functions ... incomplete-documentation
  305934             : 
  305935             :           These functions have been made public as part of the design, but they are suggested for internal use 
  305936             :           or by particularly knowledgeable users for specialized tools or applications.
  305937             : 
  305938             :           \internal We could not make these private because they are required by user for special purposes. And 
  305939             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  305940             :          
  305941             :        */
  305942             : 
  305943             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  305944             :        // overridden in every class by *generated* implementation
  305945             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  305946             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  305947             :        // MS: 06/28/02 container of names of variables or container indices 
  305948             :        // used used in the traversal to access AST successor nodes
  305949             :        // overridden in every class by *generated* implementation
  305950             :       /*! \brief container of names of variables or container indices used used in the traversal
  305951             :           to access AST successor nodes overridden in every class by *generated* implementation */
  305952             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  305953             : 
  305954             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  305955             :        // than all the vector copies. The implementation for these functions is generated for each class.
  305956             :       /*! \brief return number of children in the traversal successor list */
  305957             :           virtual size_t get_numberOfTraversalSuccessors() override;
  305958             :       /*! \brief index-based access to traversal successors by index number */
  305959             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  305960             :       /*! \brief index-based access to traversal successors by child node */
  305961             :           virtual size_t get_childIndex(SgNode *child) override;
  305962             : 
  305963             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  305964             :        // MS: 08/16/2002 method for generating RTI information
  305965             :       /*! \brief return C++ Runtime-Time-Information */
  305966             :           virtual RTIReturnType roseRTI() override;
  305967             : #endif
  305968             :       /* */
  305969             : 
  305970             : 
  305971             : 
  305972             :       /* name Deprecated Functions
  305973             :           \brief Deprecated functions ... incomplete-documentation
  305974             : 
  305975             :           These functions have been deprecated from use.
  305976             :        */
  305977             :       /* */
  305978             : 
  305979             :       /*! returns a C style string (char*) representing the class name */
  305980             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  305981             : 
  305982             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  305983             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  305984             : #if 0
  305985             :       /*! returns old style Sage II enum values */
  305986             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  305987             :       /*! returns old style Sage II enum values */
  305988             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  305989             : #endif
  305990             :       /* */
  305991             : 
  305992             : 
  305993             : 
  305994             : 
  305995             :      public:
  305996             :       /* name Traversal Support Functions
  305997             :           \brief Traversal support functions ... incomplete-documentation
  305998             : 
  305999             :           These functions have been made public as part of the design, but they are suggested for internal use 
  306000             :           or by particularly knowledgable users for specialized tools or applications.
  306001             :        */
  306002             :       /* */
  306003             : 
  306004             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  306005             :        // (inferior to ROSE traversal mechanism, experimental).
  306006             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  306007             :        */
  306008             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  306009             : 
  306010             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  306011             :       /*! \brief support for the classic visitor pattern done in GoF */
  306012             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  306013             : 
  306014             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  306015             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  306016             :        */
  306017             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  306018             : 
  306019             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  306020             :        */
  306021             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  306022             : 
  306023             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  306024             :        // This traversal helps support internal tools that call static member functions.
  306025             :        // note: this function operates on the memory pools.
  306026             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  306027             :        */
  306028             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  306029             :       /* */
  306030             : 
  306031             : 
  306032             :      public:
  306033             :       /* name Memory Allocation Functions
  306034             :           \brief Memory allocations functions ... incomplete-documentation
  306035             : 
  306036             :           These functions have been made public as part of the design, but they are suggested for internal use 
  306037             :           or by particularly knowledgable users for specialized tools or applications.
  306038             :        */
  306039             :       /* */
  306040             : 
  306041             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  306042             : 
  306043             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  306044             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  306045             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  306046             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  306047             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  306048             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  306049             :           being used with the AST File I/O mechanism.
  306050             :        */
  306051             :           virtual bool isInMemoryPool() override;
  306052             : 
  306053             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  306054             : 
  306055             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  306056             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  306057             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  306058             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  306059             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  306060             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  306061             :           being used with the AST File I/O mechanism.
  306062             :        */
  306063             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  306064             : 
  306065             :       // DQ (4/30/2006): Modified to be a const function.
  306066             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  306067             : 
  306068             :           This functions is part of general support for many possible tools to operate 
  306069             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  306070             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  306071             :           less than the set of pointers used by the AST file I/O. This is part of
  306072             :           work implemented by Andreas, and support tools such as the AST graph generation.
  306073             : 
  306074             :           \warning This function can return unexpected data members and thus the 
  306075             :                    order and the number of elements is unpredicable and subject 
  306076             :                    to change.
  306077             : 
  306078             :           \returns STL vector of pairs of SgNode* and strings
  306079             :        */
  306080             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  306081             : 
  306082             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  306083             : 
  306084             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  306085             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  306086             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  306087             : 
  306088             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  306089             :                    and subject to change.
  306090             :        */
  306091             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  306092             : 
  306093             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  306094             : 
  306095             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  306096             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  306097             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  306098             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  306099             : 
  306100             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  306101             : 
  306102             :           \returns long
  306103             :        */
  306104             :           virtual long getChildIndex( SgNode* childNode ) const override;
  306105             : 
  306106             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  306107             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  306108             :       /* \brief Constructor for use by AST File I/O Mechanism
  306109             : 
  306110             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  306111             :           which obtained via fast binary file I/O from disk.
  306112             :        */
  306113             :        // SgAsmOp( SgAsmOpStorageClass& source );
  306114             : 
  306115             : 
  306116             : 
  306117             : 
  306118             : 
  306119             :  // JH (10/24/2005): methods added to support the ast file IO
  306120             :     private:
  306121             : 
  306122             :       /* name AST Memory Allocation Support Functions
  306123             :           \brief Memory allocations support....
  306124             : 
  306125             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  306126             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  306127             :           and support the AST File I/O Mechanism.
  306128             :        */
  306129             :       /* */
  306130             : 
  306131             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  306132             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  306133             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  306134             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  306135             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  306136             :           a correspinding one in the AST_FILE_IO class!
  306137             :        */
  306138             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  306139             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  306140             :       /* \brief Typedef used for low level memory access.
  306141             :        */
  306142             :        // typedef unsigned char* TestType;
  306143             : 
  306144             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  306145             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  306146             :       /* \brief Typedef used to hold memory addresses as values.
  306147             :        */
  306148             :        // typedef unsigned long  AddressType;
  306149             : 
  306150             : 
  306151             : 
  306152             :        // necessary, to have direct access to the p_freepointer and the private methods !
  306153             :       /*! \brief friend class declaration to support AST File I/O */
  306154             :           friend class AST_FILE_IO;
  306155             : 
  306156             :       /*! \brief friend class declaration to support AST File I/O */
  306157             :           friend class SgAsmOpStorageClass;
  306158             : 
  306159             :       /*! \brief friend class declaration to support AST File I/O */
  306160             :           friend class AstSpecificDataManagingClass;
  306161             : 
  306162             :       /*! \brief friend class declaration to support AST File I/O */
  306163             :           friend class AstSpecificDataManagingClassStorageClass;
  306164             :     public:
  306165             :       /*! \brief IR node constructor to support AST File I/O */
  306166             :           SgAsmOp( const SgAsmOpStorageClass& source );
  306167             : 
  306168             :  // private: // JJW hack
  306169             :        /*
  306170             :           name AST Memory Allocation Support Variables
  306171             :           Memory allocations support variables 
  306172             : 
  306173             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  306174             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  306175             :           and support the AST File I/O Mechanism.
  306176             :        */
  306177             :       /* */
  306178             : 
  306179             :     public:
  306180             : 
  306181             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  306182             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  306183             :       // virtual SgNode* addRegExpAttribute();
  306184             :       /*! \brief Support for AST matching using regular expression.
  306185             : 
  306186             :           This support is incomplete and the subject of current research to define 
  306187             :           RegEx trees to support inexact matching.
  306188             :        */
  306189             :           SgAsmOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  306190             : 
  306191             : // *** COMMON CODE SECTION ENDS HERE ***
  306192             : 
  306193             : 
  306194             : // End of memberFunctionString
  306195             : // Start of memberFunctionString
  306196             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  306197             : 
  306198             :      // the generated cast function
  306199             :      // friend ROSE_DLL_API SgAsmOp* isSgAsmOp ( SgNode* s );
  306200             : 
  306201             :           typedef SgExpression base_node_type;
  306202             : 
  306203             : 
  306204             : // End of memberFunctionString
  306205             : // Start of memberFunctionString
  306206             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  306207             : 
  306208             :           SgType* get_type() const override;
  306209             : 
  306210             : 
  306211             : // End of memberFunctionString
  306212             : // Start of memberFunctionString
  306213             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  306214             : 
  306215             :           void post_construction_initialization() override;
  306216             : 
  306217             : 
  306218             : // End of memberFunctionString
  306219             : 
  306220             :      public: 
  306221             :          SgAsmOp::asm_operand_constraint_enum get_constraint() const;
  306222             :          void set_constraint(SgAsmOp::asm_operand_constraint_enum constraint);
  306223             : 
  306224             :      public: 
  306225             :          SgAsmOp::asm_operand_modifier_enum get_modifiers() const;
  306226             :          void set_modifiers(SgAsmOp::asm_operand_modifier_enum modifiers);
  306227             : 
  306228             :      public: 
  306229             :          SgExpression* get_expression() const;
  306230             :          void set_expression(SgExpression* expression);
  306231             : 
  306232             :      public: 
  306233             :          bool get_recordRawAsmOperandDescriptions() const;
  306234             :          void set_recordRawAsmOperandDescriptions(bool recordRawAsmOperandDescriptions);
  306235             : 
  306236             :      public: 
  306237             :          bool get_isOutputOperand() const;
  306238             :          void set_isOutputOperand(bool isOutputOperand);
  306239             : 
  306240             :      public: 
  306241             :          std::string get_constraintString() const;
  306242             :          void set_constraintString(std::string constraintString);
  306243             : 
  306244             :      public: 
  306245             :          std::string get_name() const /* (getDataAccessFunctionPrototypeString) */;
  306246             :          void set_name(std::string name) /* (getDataAccessFunctionPrototypeString) */;
  306247             : 
  306248             : 
  306249             :      public: 
  306250             :          virtual ~SgAsmOp();
  306251             : 
  306252             : 
  306253             :      public: 
  306254             :          SgAsmOp(Sg_File_Info* startOfConstruct , SgAsmOp::asm_operand_constraint_enum constraint = SgAsmOp::e_invalid, SgAsmOp::asm_operand_modifier_enum modifiers = SgAsmOp::e_unknown, SgExpression* expression = NULL); 
  306255             :          SgAsmOp(SgAsmOp::asm_operand_constraint_enum constraint, SgAsmOp::asm_operand_modifier_enum modifiers, SgExpression* expression); 
  306256             : 
  306257             :     protected:
  306258             : // Start of memberFunctionString
  306259             : SgAsmOp::asm_operand_constraint_enum p_constraint;
  306260             :           
  306261             : // End of memberFunctionString
  306262             : // Start of memberFunctionString
  306263             : SgAsmOp::asm_operand_modifier_enum p_modifiers;
  306264             :           
  306265             : // End of memberFunctionString
  306266             : // Start of memberFunctionString
  306267             : SgExpression* p_expression;
  306268             :           
  306269             : // End of memberFunctionString
  306270             : // Start of memberFunctionString
  306271             : bool p_recordRawAsmOperandDescriptions;
  306272             :           
  306273             : // End of memberFunctionString
  306274             : // Start of memberFunctionString
  306275             : bool p_isOutputOperand;
  306276             :           
  306277             : // End of memberFunctionString
  306278             : // Start of memberFunctionString
  306279             : std::string p_constraintString;
  306280             :           
  306281             : // End of memberFunctionString
  306282             : // Start of memberFunctionString
  306283             : std::string p_name;
  306284             :           
  306285             : // End of memberFunctionString
  306286             : 
  306287             :     friend struct Rose::Traits::generated::describe_node_t<SgAsmOp>;
  306288             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmOp, SgAsmOp::asm_operand_constraint_enum,&SgAsmOp::p_constraint>;
  306289             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmOp, SgAsmOp::asm_operand_modifier_enum,&SgAsmOp::p_modifiers>;
  306290             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmOp, SgExpression*,&SgAsmOp::p_expression>;
  306291             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmOp, bool,&SgAsmOp::p_recordRawAsmOperandDescriptions>;
  306292             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmOp, bool,&SgAsmOp::p_isOutputOperand>;
  306293             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmOp, std::string,&SgAsmOp::p_constraintString>;
  306294             :     friend struct Rose::Traits::generated::describe_field_t<SgAsmOp, std::string,&SgAsmOp::p_name>;
  306295             : 
  306296             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306297             : 
  306298             : 
  306299             :    };
  306300             : #endif
  306301             : 
  306302             : // postdeclarations for SgAsmOp
  306303             : 
  306304             : /* #line 306305 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306305             : 
  306306             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  306307             : 
  306308             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306309             : 
  306310             : 
  306311             : /* #line 306312 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306312             : 
  306313             : 
  306314             : 
  306315             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306316             : 
  306317             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  306318             : //      This code is automatically generated for each 
  306319             : //      terminal and non-terminal within the defined 
  306320             : //      grammar.  There is a simple way to change the 
  306321             : //      code to fix bugs etc.  See the ROSE README file
  306322             : //      for directions.
  306323             : 
  306324             : // tps: (02/22/2010): Adding DLL export requirements
  306325             : #include "rosedll.h"
  306326             : 
  306327             : // predeclarations for SgLabelRefExp
  306328             : 
  306329             : /* #line 306330 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306330             : 
  306331             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  306332             : 
  306333             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306334             : 
  306335             : #if 1
  306336             : // Class Definition for SgLabelRefExp
  306337             : class ROSE_DLL_API SgLabelRefExp  : public SgExpression
  306338             :    {
  306339             :      public:
  306340             : 
  306341             : 
  306342             : /* #line 306343 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306343             : 
  306344             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  306345             : // Start of memberFunctionString
  306346             : /* #line 361 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  306347             : 
  306348             : 
  306349             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  306350             :           virtual unsigned int cfgIndexForEnd() const override;
  306351             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  306352             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  306353             : #endif
  306354             : 
  306355             :           SgName get_name() const;
  306356             :        // const SgName & get_name() const;
  306357             : 
  306358             :           int get_numeric_label_value() const;
  306359             : 
  306360             :        // DQ (12/30/2007): I don't think there is any control flow through this sorts of variables, but this
  306361             :        // should be discussed (might apply to assigned goto).
  306362             :        // virtual unsigned int cfgIndexForEnd() const;
  306363             :        // virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index);
  306364             :        // virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index);
  306365             : 
  306366             :        // DQ (2/2/2011): This is support for Fortran alternative return type arguments.
  306367             :       //! Support for recognition of Fortran alternative return type arguments.
  306368             :           bool isFunctionCallArgumentForAlternativeReturnType() const;
  306369             : 
  306370             : 
  306371             : 
  306372             : // End of memberFunctionString
  306373             : // Start of memberFunctionString
  306374             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  306375             : 
  306376             : // *** COMMON CODE SECTION BEGINS HERE ***
  306377             : 
  306378             :     public:
  306379             : 
  306380             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  306381             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  306382             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  306383             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  306384             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  306385             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  306386             : 
  306387             :       /*! \brief returns a string representing the class name */
  306388             :           virtual std::string class_name() const override;
  306389             : 
  306390             :       /*! \brief returns new style SageIII enum values */
  306391             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  306392             : 
  306393             :       /*! \brief static variant value */
  306394             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  306395             :        // static const VariantT static_variant = V_SgLabelRefExp;
  306396             :           enum { static_variant = V_SgLabelRefExp };
  306397             : 
  306398             :        /* the generated cast function */
  306399             :       /*! \brief Casts pointer from base class to derived class */
  306400             :           ROSE_DLL_API friend       SgLabelRefExp* isSgLabelRefExp(       SgNode * s );
  306401             : 
  306402             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  306403             :           ROSE_DLL_API friend const SgLabelRefExp* isSgLabelRefExp( const SgNode * s );
  306404             : 
  306405             :      // ******************************************
  306406             :      // * Memory Pool / New / Delete
  306407             :      // ******************************************
  306408             : 
  306409             :      public:
  306410             :           /// \private
  306411             :           static const unsigned pool_size; //
  306412             :           /// \private
  306413             :           static std::vector<unsigned char *> pools; //
  306414             :           /// \private
  306415             :           static SgLabelRefExp * next_node; // 
  306416             : 
  306417             :           /// \private
  306418             :           static unsigned long initializeStorageClassArray(SgLabelRefExpStorageClass *); //
  306419             : 
  306420             :           /// \private
  306421             :           static void clearMemoryPool(); //
  306422             :           static void deleteMemoryPool(); //
  306423             : 
  306424             :           /// \private
  306425             :           static void extendMemoryPoolForFileIO(); //
  306426             : 
  306427             :           /// \private
  306428             :           static SgLabelRefExp * getPointerFromGlobalIndex(unsigned long); //
  306429             :           /// \private
  306430             :           static SgLabelRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  306431             : 
  306432             :           /// \private
  306433             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  306434             :           /// \private
  306435             :           static void resetValidFreepointers(); //
  306436             :           /// \private
  306437             :           static unsigned long getNumberOfLastValidPointer(); //
  306438             : 
  306439             : 
  306440             : #if defined(INLINE_FUNCTIONS)
  306441             :       /*! \brief returns pointer to newly allocated IR node */
  306442             :           inline void *operator new (size_t size);
  306443             : #else
  306444             :       /*! \brief returns pointer to newly allocated IR node */
  306445             :           void *operator new (size_t size);
  306446             : #endif
  306447             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  306448             :           void operator delete (void* pointer, size_t size);
  306449             : 
  306450             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  306451           0 :           void operator delete (void* pointer)
  306452             :              {
  306453             :             // This is the generated delete operator...
  306454           0 :                SgLabelRefExp::operator delete (pointer,sizeof(SgLabelRefExp));
  306455             :              }
  306456             : 
  306457             :       /*! \brief Returns the total number of IR nodes of this type */
  306458             :           static size_t numberOfNodes();
  306459             : 
  306460             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  306461             :           static size_t memoryUsage();
  306462             : 
  306463             :       // End of scope which started in IR nodes specific code 
  306464             :       /* */
  306465             : 
  306466             :       /* name Internal Functions
  306467             :           \brief Internal functions ... incomplete-documentation
  306468             : 
  306469             :           These functions have been made public as part of the design, but they are suggested for internal use 
  306470             :           or by particularly knowledgeable users for specialized tools or applications.
  306471             : 
  306472             :           \internal We could not make these private because they are required by user for special purposes. And 
  306473             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  306474             :          
  306475             :        */
  306476             : 
  306477             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  306478             :        // overridden in every class by *generated* implementation
  306479             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  306480             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  306481             :        // MS: 06/28/02 container of names of variables or container indices 
  306482             :        // used used in the traversal to access AST successor nodes
  306483             :        // overridden in every class by *generated* implementation
  306484             :       /*! \brief container of names of variables or container indices used used in the traversal
  306485             :           to access AST successor nodes overridden in every class by *generated* implementation */
  306486             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  306487             : 
  306488             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  306489             :        // than all the vector copies. The implementation for these functions is generated for each class.
  306490             :       /*! \brief return number of children in the traversal successor list */
  306491             :           virtual size_t get_numberOfTraversalSuccessors() override;
  306492             :       /*! \brief index-based access to traversal successors by index number */
  306493             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  306494             :       /*! \brief index-based access to traversal successors by child node */
  306495             :           virtual size_t get_childIndex(SgNode *child) override;
  306496             : 
  306497             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  306498             :        // MS: 08/16/2002 method for generating RTI information
  306499             :       /*! \brief return C++ Runtime-Time-Information */
  306500             :           virtual RTIReturnType roseRTI() override;
  306501             : #endif
  306502             :       /* */
  306503             : 
  306504             : 
  306505             : 
  306506             :       /* name Deprecated Functions
  306507             :           \brief Deprecated functions ... incomplete-documentation
  306508             : 
  306509             :           These functions have been deprecated from use.
  306510             :        */
  306511             :       /* */
  306512             : 
  306513             :       /*! returns a C style string (char*) representing the class name */
  306514             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  306515             : 
  306516             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  306517             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  306518             : #if 0
  306519             :       /*! returns old style Sage II enum values */
  306520             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  306521             :       /*! returns old style Sage II enum values */
  306522             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  306523             : #endif
  306524             :       /* */
  306525             : 
  306526             : 
  306527             : 
  306528             : 
  306529             :      public:
  306530             :       /* name Traversal Support Functions
  306531             :           \brief Traversal support functions ... incomplete-documentation
  306532             : 
  306533             :           These functions have been made public as part of the design, but they are suggested for internal use 
  306534             :           or by particularly knowledgable users for specialized tools or applications.
  306535             :        */
  306536             :       /* */
  306537             : 
  306538             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  306539             :        // (inferior to ROSE traversal mechanism, experimental).
  306540             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  306541             :        */
  306542             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  306543             : 
  306544             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  306545             :       /*! \brief support for the classic visitor pattern done in GoF */
  306546             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  306547             : 
  306548             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  306549             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  306550             :        */
  306551             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  306552             : 
  306553             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  306554             :        */
  306555             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  306556             : 
  306557             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  306558             :        // This traversal helps support internal tools that call static member functions.
  306559             :        // note: this function operates on the memory pools.
  306560             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  306561             :        */
  306562             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  306563             :       /* */
  306564             : 
  306565             : 
  306566             :      public:
  306567             :       /* name Memory Allocation Functions
  306568             :           \brief Memory allocations functions ... incomplete-documentation
  306569             : 
  306570             :           These functions have been made public as part of the design, but they are suggested for internal use 
  306571             :           or by particularly knowledgable users for specialized tools or applications.
  306572             :        */
  306573             :       /* */
  306574             : 
  306575             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  306576             : 
  306577             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  306578             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  306579             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  306580             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  306581             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  306582             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  306583             :           being used with the AST File I/O mechanism.
  306584             :        */
  306585             :           virtual bool isInMemoryPool() override;
  306586             : 
  306587             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  306588             : 
  306589             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  306590             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  306591             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  306592             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  306593             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  306594             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  306595             :           being used with the AST File I/O mechanism.
  306596             :        */
  306597             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  306598             : 
  306599             :       // DQ (4/30/2006): Modified to be a const function.
  306600             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  306601             : 
  306602             :           This functions is part of general support for many possible tools to operate 
  306603             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  306604             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  306605             :           less than the set of pointers used by the AST file I/O. This is part of
  306606             :           work implemented by Andreas, and support tools such as the AST graph generation.
  306607             : 
  306608             :           \warning This function can return unexpected data members and thus the 
  306609             :                    order and the number of elements is unpredicable and subject 
  306610             :                    to change.
  306611             : 
  306612             :           \returns STL vector of pairs of SgNode* and strings
  306613             :        */
  306614             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  306615             : 
  306616             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  306617             : 
  306618             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  306619             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  306620             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  306621             : 
  306622             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  306623             :                    and subject to change.
  306624             :        */
  306625             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  306626             : 
  306627             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  306628             : 
  306629             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  306630             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  306631             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  306632             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  306633             : 
  306634             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  306635             : 
  306636             :           \returns long
  306637             :        */
  306638             :           virtual long getChildIndex( SgNode* childNode ) const override;
  306639             : 
  306640             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  306641             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  306642             :       /* \brief Constructor for use by AST File I/O Mechanism
  306643             : 
  306644             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  306645             :           which obtained via fast binary file I/O from disk.
  306646             :        */
  306647             :        // SgLabelRefExp( SgLabelRefExpStorageClass& source );
  306648             : 
  306649             : 
  306650             : 
  306651             : 
  306652             : 
  306653             :  // JH (10/24/2005): methods added to support the ast file IO
  306654             :     private:
  306655             : 
  306656             :       /* name AST Memory Allocation Support Functions
  306657             :           \brief Memory allocations support....
  306658             : 
  306659             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  306660             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  306661             :           and support the AST File I/O Mechanism.
  306662             :        */
  306663             :       /* */
  306664             : 
  306665             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  306666             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  306667             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  306668             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  306669             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  306670             :           a correspinding one in the AST_FILE_IO class!
  306671             :        */
  306672             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  306673             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  306674             :       /* \brief Typedef used for low level memory access.
  306675             :        */
  306676             :        // typedef unsigned char* TestType;
  306677             : 
  306678             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  306679             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  306680             :       /* \brief Typedef used to hold memory addresses as values.
  306681             :        */
  306682             :        // typedef unsigned long  AddressType;
  306683             : 
  306684             : 
  306685             : 
  306686             :        // necessary, to have direct access to the p_freepointer and the private methods !
  306687             :       /*! \brief friend class declaration to support AST File I/O */
  306688             :           friend class AST_FILE_IO;
  306689             : 
  306690             :       /*! \brief friend class declaration to support AST File I/O */
  306691             :           friend class SgLabelRefExpStorageClass;
  306692             : 
  306693             :       /*! \brief friend class declaration to support AST File I/O */
  306694             :           friend class AstSpecificDataManagingClass;
  306695             : 
  306696             :       /*! \brief friend class declaration to support AST File I/O */
  306697             :           friend class AstSpecificDataManagingClassStorageClass;
  306698             :     public:
  306699             :       /*! \brief IR node constructor to support AST File I/O */
  306700             :           SgLabelRefExp( const SgLabelRefExpStorageClass& source );
  306701             : 
  306702             :  // private: // JJW hack
  306703             :        /*
  306704             :           name AST Memory Allocation Support Variables
  306705             :           Memory allocations support variables 
  306706             : 
  306707             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  306708             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  306709             :           and support the AST File I/O Mechanism.
  306710             :        */
  306711             :       /* */
  306712             : 
  306713             :     public:
  306714             : 
  306715             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  306716             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  306717             :       // virtual SgNode* addRegExpAttribute();
  306718             :       /*! \brief Support for AST matching using regular expression.
  306719             : 
  306720             :           This support is incomplete and the subject of current research to define 
  306721             :           RegEx trees to support inexact matching.
  306722             :        */
  306723             :           SgLabelRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  306724             : 
  306725             : // *** COMMON CODE SECTION ENDS HERE ***
  306726             : 
  306727             : 
  306728             : // End of memberFunctionString
  306729             : // Start of memberFunctionString
  306730             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  306731             : 
  306732             :      // the generated cast function
  306733             :      // friend ROSE_DLL_API SgLabelRefExp* isSgLabelRefExp ( SgNode* s );
  306734             : 
  306735             :           typedef SgExpression base_node_type;
  306736             : 
  306737             : 
  306738             : // End of memberFunctionString
  306739             : // Start of memberFunctionString
  306740             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  306741             : 
  306742             :           SgType* get_type() const override;
  306743             : 
  306744             : 
  306745             : // End of memberFunctionString
  306746             : // Start of memberFunctionString
  306747             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  306748             : 
  306749             :           void post_construction_initialization() override;
  306750             : 
  306751             : 
  306752             : // End of memberFunctionString
  306753             : 
  306754             :      public: 
  306755             :          SgLabelSymbol* get_symbol() const;
  306756             :          void set_symbol(SgLabelSymbol* symbol);
  306757             : 
  306758             : 
  306759             :      public: 
  306760             :          virtual ~SgLabelRefExp();
  306761             : 
  306762             : 
  306763             :      public: 
  306764             :          SgLabelRefExp(Sg_File_Info* startOfConstruct , SgLabelSymbol* symbol = NULL); 
  306765             :          SgLabelRefExp(SgLabelSymbol* symbol); 
  306766             : 
  306767             :     protected:
  306768             : // Start of memberFunctionString
  306769             : SgLabelSymbol* p_symbol;
  306770             :           
  306771             : // End of memberFunctionString
  306772             : 
  306773             :     friend struct Rose::Traits::generated::describe_node_t<SgLabelRefExp>;
  306774             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelRefExp, SgLabelSymbol*,&SgLabelRefExp::p_symbol>;
  306775             : 
  306776             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306777             : 
  306778             : 
  306779             :    };
  306780             : #endif
  306781             : 
  306782             : // postdeclarations for SgLabelRefExp
  306783             : 
  306784             : /* #line 306785 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306785             : 
  306786             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  306787             : 
  306788             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306789             : 
  306790             : 
  306791             : /* #line 306792 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306792             : 
  306793             : 
  306794             : 
  306795             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306796             : 
  306797             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  306798             : //      This code is automatically generated for each 
  306799             : //      terminal and non-terminal within the defined 
  306800             : //      grammar.  There is a simple way to change the 
  306801             : //      code to fix bugs etc.  See the ROSE README file
  306802             : //      for directions.
  306803             : 
  306804             : // tps: (02/22/2010): Adding DLL export requirements
  306805             : #include "rosedll.h"
  306806             : 
  306807             : // predeclarations for SgActualArgumentExpression
  306808             : 
  306809             : /* #line 306810 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306810             : 
  306811             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  306812             : 
  306813             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  306814             : 
  306815             : #if 1
  306816             : // Class Definition for SgActualArgumentExpression
  306817             : class ROSE_DLL_API SgActualArgumentExpression  : public SgExpression
  306818             :    {
  306819             :      public:
  306820             : 
  306821             : 
  306822             : /* #line 306823 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  306823             : 
  306824             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  306825             : // Start of memberFunctionString
  306826             : /* #line 1815 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  306827             : 
  306828             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  306829             :           virtual unsigned int cfgIndexForEnd() const override;
  306830             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  306831             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  306832             : #endif
  306833             : 
  306834             : 
  306835             : 
  306836             : // End of memberFunctionString
  306837             : // Start of memberFunctionString
  306838             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  306839             : 
  306840             : // *** COMMON CODE SECTION BEGINS HERE ***
  306841             : 
  306842             :     public:
  306843             : 
  306844             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  306845             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  306846             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  306847             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  306848             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  306849             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  306850             : 
  306851             :       /*! \brief returns a string representing the class name */
  306852             :           virtual std::string class_name() const override;
  306853             : 
  306854             :       /*! \brief returns new style SageIII enum values */
  306855             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  306856             : 
  306857             :       /*! \brief static variant value */
  306858             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  306859             :        // static const VariantT static_variant = V_SgActualArgumentExpression;
  306860             :           enum { static_variant = V_SgActualArgumentExpression };
  306861             : 
  306862             :        /* the generated cast function */
  306863             :       /*! \brief Casts pointer from base class to derived class */
  306864             :           ROSE_DLL_API friend       SgActualArgumentExpression* isSgActualArgumentExpression(       SgNode * s );
  306865             : 
  306866             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  306867             :           ROSE_DLL_API friend const SgActualArgumentExpression* isSgActualArgumentExpression( const SgNode * s );
  306868             : 
  306869             :      // ******************************************
  306870             :      // * Memory Pool / New / Delete
  306871             :      // ******************************************
  306872             : 
  306873             :      public:
  306874             :           /// \private
  306875             :           static const unsigned pool_size; //
  306876             :           /// \private
  306877             :           static std::vector<unsigned char *> pools; //
  306878             :           /// \private
  306879             :           static SgActualArgumentExpression * next_node; // 
  306880             : 
  306881             :           /// \private
  306882             :           static unsigned long initializeStorageClassArray(SgActualArgumentExpressionStorageClass *); //
  306883             : 
  306884             :           /// \private
  306885             :           static void clearMemoryPool(); //
  306886             :           static void deleteMemoryPool(); //
  306887             : 
  306888             :           /// \private
  306889             :           static void extendMemoryPoolForFileIO(); //
  306890             : 
  306891             :           /// \private
  306892             :           static SgActualArgumentExpression * getPointerFromGlobalIndex(unsigned long); //
  306893             :           /// \private
  306894             :           static SgActualArgumentExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  306895             : 
  306896             :           /// \private
  306897             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  306898             :           /// \private
  306899             :           static void resetValidFreepointers(); //
  306900             :           /// \private
  306901             :           static unsigned long getNumberOfLastValidPointer(); //
  306902             : 
  306903             : 
  306904             : #if defined(INLINE_FUNCTIONS)
  306905             :       /*! \brief returns pointer to newly allocated IR node */
  306906             :           inline void *operator new (size_t size);
  306907             : #else
  306908             :       /*! \brief returns pointer to newly allocated IR node */
  306909             :           void *operator new (size_t size);
  306910             : #endif
  306911             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  306912             :           void operator delete (void* pointer, size_t size);
  306913             : 
  306914             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  306915           0 :           void operator delete (void* pointer)
  306916             :              {
  306917             :             // This is the generated delete operator...
  306918           0 :                SgActualArgumentExpression::operator delete (pointer,sizeof(SgActualArgumentExpression));
  306919             :              }
  306920             : 
  306921             :       /*! \brief Returns the total number of IR nodes of this type */
  306922             :           static size_t numberOfNodes();
  306923             : 
  306924             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  306925             :           static size_t memoryUsage();
  306926             : 
  306927             :       // End of scope which started in IR nodes specific code 
  306928             :       /* */
  306929             : 
  306930             :       /* name Internal Functions
  306931             :           \brief Internal functions ... incomplete-documentation
  306932             : 
  306933             :           These functions have been made public as part of the design, but they are suggested for internal use 
  306934             :           or by particularly knowledgeable users for specialized tools or applications.
  306935             : 
  306936             :           \internal We could not make these private because they are required by user for special purposes. And 
  306937             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  306938             :          
  306939             :        */
  306940             : 
  306941             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  306942             :        // overridden in every class by *generated* implementation
  306943             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  306944             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  306945             :        // MS: 06/28/02 container of names of variables or container indices 
  306946             :        // used used in the traversal to access AST successor nodes
  306947             :        // overridden in every class by *generated* implementation
  306948             :       /*! \brief container of names of variables or container indices used used in the traversal
  306949             :           to access AST successor nodes overridden in every class by *generated* implementation */
  306950             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  306951             : 
  306952             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  306953             :        // than all the vector copies. The implementation for these functions is generated for each class.
  306954             :       /*! \brief return number of children in the traversal successor list */
  306955             :           virtual size_t get_numberOfTraversalSuccessors() override;
  306956             :       /*! \brief index-based access to traversal successors by index number */
  306957             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  306958             :       /*! \brief index-based access to traversal successors by child node */
  306959             :           virtual size_t get_childIndex(SgNode *child) override;
  306960             : 
  306961             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  306962             :        // MS: 08/16/2002 method for generating RTI information
  306963             :       /*! \brief return C++ Runtime-Time-Information */
  306964             :           virtual RTIReturnType roseRTI() override;
  306965             : #endif
  306966             :       /* */
  306967             : 
  306968             : 
  306969             : 
  306970             :       /* name Deprecated Functions
  306971             :           \brief Deprecated functions ... incomplete-documentation
  306972             : 
  306973             :           These functions have been deprecated from use.
  306974             :        */
  306975             :       /* */
  306976             : 
  306977             :       /*! returns a C style string (char*) representing the class name */
  306978             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  306979             : 
  306980             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  306981             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  306982             : #if 0
  306983             :       /*! returns old style Sage II enum values */
  306984             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  306985             :       /*! returns old style Sage II enum values */
  306986             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  306987             : #endif
  306988             :       /* */
  306989             : 
  306990             : 
  306991             : 
  306992             : 
  306993             :      public:
  306994             :       /* name Traversal Support Functions
  306995             :           \brief Traversal support functions ... incomplete-documentation
  306996             : 
  306997             :           These functions have been made public as part of the design, but they are suggested for internal use 
  306998             :           or by particularly knowledgable users for specialized tools or applications.
  306999             :        */
  307000             :       /* */
  307001             : 
  307002             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  307003             :        // (inferior to ROSE traversal mechanism, experimental).
  307004             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  307005             :        */
  307006             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  307007             : 
  307008             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  307009             :       /*! \brief support for the classic visitor pattern done in GoF */
  307010             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  307011             : 
  307012             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  307013             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  307014             :        */
  307015             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  307016             : 
  307017             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  307018             :        */
  307019             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  307020             : 
  307021             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  307022             :        // This traversal helps support internal tools that call static member functions.
  307023             :        // note: this function operates on the memory pools.
  307024             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  307025             :        */
  307026             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  307027             :       /* */
  307028             : 
  307029             : 
  307030             :      public:
  307031             :       /* name Memory Allocation Functions
  307032             :           \brief Memory allocations functions ... incomplete-documentation
  307033             : 
  307034             :           These functions have been made public as part of the design, but they are suggested for internal use 
  307035             :           or by particularly knowledgable users for specialized tools or applications.
  307036             :        */
  307037             :       /* */
  307038             : 
  307039             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  307040             : 
  307041             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  307042             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  307043             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  307044             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  307045             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  307046             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  307047             :           being used with the AST File I/O mechanism.
  307048             :        */
  307049             :           virtual bool isInMemoryPool() override;
  307050             : 
  307051             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  307052             : 
  307053             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  307054             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  307055             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  307056             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  307057             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  307058             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  307059             :           being used with the AST File I/O mechanism.
  307060             :        */
  307061             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  307062             : 
  307063             :       // DQ (4/30/2006): Modified to be a const function.
  307064             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  307065             : 
  307066             :           This functions is part of general support for many possible tools to operate 
  307067             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  307068             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  307069             :           less than the set of pointers used by the AST file I/O. This is part of
  307070             :           work implemented by Andreas, and support tools such as the AST graph generation.
  307071             : 
  307072             :           \warning This function can return unexpected data members and thus the 
  307073             :                    order and the number of elements is unpredicable and subject 
  307074             :                    to change.
  307075             : 
  307076             :           \returns STL vector of pairs of SgNode* and strings
  307077             :        */
  307078             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  307079             : 
  307080             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  307081             : 
  307082             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  307083             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  307084             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  307085             : 
  307086             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  307087             :                    and subject to change.
  307088             :        */
  307089             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  307090             : 
  307091             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  307092             : 
  307093             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  307094             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  307095             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  307096             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  307097             : 
  307098             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  307099             : 
  307100             :           \returns long
  307101             :        */
  307102             :           virtual long getChildIndex( SgNode* childNode ) const override;
  307103             : 
  307104             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  307105             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  307106             :       /* \brief Constructor for use by AST File I/O Mechanism
  307107             : 
  307108             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  307109             :           which obtained via fast binary file I/O from disk.
  307110             :        */
  307111             :        // SgActualArgumentExpression( SgActualArgumentExpressionStorageClass& source );
  307112             : 
  307113             : 
  307114             : 
  307115             : 
  307116             : 
  307117             :  // JH (10/24/2005): methods added to support the ast file IO
  307118             :     private:
  307119             : 
  307120             :       /* name AST Memory Allocation Support Functions
  307121             :           \brief Memory allocations support....
  307122             : 
  307123             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  307124             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  307125             :           and support the AST File I/O Mechanism.
  307126             :        */
  307127             :       /* */
  307128             : 
  307129             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  307130             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  307131             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  307132             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  307133             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  307134             :           a correspinding one in the AST_FILE_IO class!
  307135             :        */
  307136             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  307137             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  307138             :       /* \brief Typedef used for low level memory access.
  307139             :        */
  307140             :        // typedef unsigned char* TestType;
  307141             : 
  307142             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  307143             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  307144             :       /* \brief Typedef used to hold memory addresses as values.
  307145             :        */
  307146             :        // typedef unsigned long  AddressType;
  307147             : 
  307148             : 
  307149             : 
  307150             :        // necessary, to have direct access to the p_freepointer and the private methods !
  307151             :       /*! \brief friend class declaration to support AST File I/O */
  307152             :           friend class AST_FILE_IO;
  307153             : 
  307154             :       /*! \brief friend class declaration to support AST File I/O */
  307155             :           friend class SgActualArgumentExpressionStorageClass;
  307156             : 
  307157             :       /*! \brief friend class declaration to support AST File I/O */
  307158             :           friend class AstSpecificDataManagingClass;
  307159             : 
  307160             :       /*! \brief friend class declaration to support AST File I/O */
  307161             :           friend class AstSpecificDataManagingClassStorageClass;
  307162             :     public:
  307163             :       /*! \brief IR node constructor to support AST File I/O */
  307164             :           SgActualArgumentExpression( const SgActualArgumentExpressionStorageClass& source );
  307165             : 
  307166             :  // private: // JJW hack
  307167             :        /*
  307168             :           name AST Memory Allocation Support Variables
  307169             :           Memory allocations support variables 
  307170             : 
  307171             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  307172             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  307173             :           and support the AST File I/O Mechanism.
  307174             :        */
  307175             :       /* */
  307176             : 
  307177             :     public:
  307178             : 
  307179             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  307180             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  307181             :       // virtual SgNode* addRegExpAttribute();
  307182             :       /*! \brief Support for AST matching using regular expression.
  307183             : 
  307184             :           This support is incomplete and the subject of current research to define 
  307185             :           RegEx trees to support inexact matching.
  307186             :        */
  307187             :           SgActualArgumentExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  307188             : 
  307189             : // *** COMMON CODE SECTION ENDS HERE ***
  307190             : 
  307191             : 
  307192             : // End of memberFunctionString
  307193             : // Start of memberFunctionString
  307194             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  307195             : 
  307196             :      // the generated cast function
  307197             :      // friend ROSE_DLL_API SgActualArgumentExpression* isSgActualArgumentExpression ( SgNode* s );
  307198             : 
  307199             :           typedef SgExpression base_node_type;
  307200             : 
  307201             : 
  307202             : // End of memberFunctionString
  307203             : // Start of memberFunctionString
  307204             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  307205             : 
  307206             :           SgType* get_type() const override;
  307207             : 
  307208             : 
  307209             : // End of memberFunctionString
  307210             : // Start of memberFunctionString
  307211             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  307212             : 
  307213             :           void post_construction_initialization() override;
  307214             : 
  307215             : 
  307216             : // End of memberFunctionString
  307217             : 
  307218             :      public: 
  307219             :          SgName get_argument_name() const;
  307220             :          void set_argument_name(SgName argument_name);
  307221             : 
  307222             :      public: 
  307223             :          SgExpression* get_expression() const;
  307224             :          void set_expression(SgExpression* expression);
  307225             : 
  307226             : 
  307227             :      public: 
  307228             :          virtual ~SgActualArgumentExpression();
  307229             : 
  307230             : 
  307231             :      public: 
  307232             :          SgActualArgumentExpression(Sg_File_Info* startOfConstruct , SgName argument_name = "", SgExpression* expression = NULL); 
  307233             :          SgActualArgumentExpression(SgName argument_name, SgExpression* expression); 
  307234             : 
  307235             :     protected:
  307236             : // Start of memberFunctionString
  307237             : SgName p_argument_name;
  307238             :           
  307239             : // End of memberFunctionString
  307240             : // Start of memberFunctionString
  307241             : SgExpression* p_expression;
  307242             :           
  307243             : // End of memberFunctionString
  307244             : 
  307245             :     friend struct Rose::Traits::generated::describe_node_t<SgActualArgumentExpression>;
  307246             :     friend struct Rose::Traits::generated::describe_field_t<SgActualArgumentExpression, SgName,&SgActualArgumentExpression::p_argument_name>;
  307247             :     friend struct Rose::Traits::generated::describe_field_t<SgActualArgumentExpression, SgExpression*,&SgActualArgumentExpression::p_expression>;
  307248             : 
  307249             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307250             : 
  307251             : 
  307252             :    };
  307253             : #endif
  307254             : 
  307255             : // postdeclarations for SgActualArgumentExpression
  307256             : 
  307257             : /* #line 307258 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307258             : 
  307259             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  307260             : 
  307261             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307262             : 
  307263             : 
  307264             : /* #line 307265 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307265             : 
  307266             : 
  307267             : 
  307268             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307269             : 
  307270             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  307271             : //      This code is automatically generated for each 
  307272             : //      terminal and non-terminal within the defined 
  307273             : //      grammar.  There is a simple way to change the 
  307274             : //      code to fix bugs etc.  See the ROSE README file
  307275             : //      for directions.
  307276             : 
  307277             : // tps: (02/22/2010): Adding DLL export requirements
  307278             : #include "rosedll.h"
  307279             : 
  307280             : // predeclarations for SgUnknownArrayOrFunctionReference
  307281             : 
  307282             : /* #line 307283 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307283             : 
  307284             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  307285             : 
  307286             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307287             : 
  307288             : #if 1
  307289             : // Class Definition for SgUnknownArrayOrFunctionReference
  307290             : class ROSE_DLL_API SgUnknownArrayOrFunctionReference  : public SgExpression
  307291             :    {
  307292             :      public:
  307293             : 
  307294             : 
  307295             : /* #line 307296 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307296             : 
  307297             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  307298             : // Start of memberFunctionString
  307299             : /* #line 1812 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  307300             : 
  307301             : 
  307302             : 
  307303             : // End of memberFunctionString
  307304             : // Start of memberFunctionString
  307305             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  307306             : 
  307307             : // *** COMMON CODE SECTION BEGINS HERE ***
  307308             : 
  307309             :     public:
  307310             : 
  307311             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  307312             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  307313             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  307314             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  307315             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  307316             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  307317             : 
  307318             :       /*! \brief returns a string representing the class name */
  307319             :           virtual std::string class_name() const override;
  307320             : 
  307321             :       /*! \brief returns new style SageIII enum values */
  307322             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  307323             : 
  307324             :       /*! \brief static variant value */
  307325             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  307326             :        // static const VariantT static_variant = V_SgUnknownArrayOrFunctionReference;
  307327             :           enum { static_variant = V_SgUnknownArrayOrFunctionReference };
  307328             : 
  307329             :        /* the generated cast function */
  307330             :       /*! \brief Casts pointer from base class to derived class */
  307331             :           ROSE_DLL_API friend       SgUnknownArrayOrFunctionReference* isSgUnknownArrayOrFunctionReference(       SgNode * s );
  307332             : 
  307333             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  307334             :           ROSE_DLL_API friend const SgUnknownArrayOrFunctionReference* isSgUnknownArrayOrFunctionReference( const SgNode * s );
  307335             : 
  307336             :      // ******************************************
  307337             :      // * Memory Pool / New / Delete
  307338             :      // ******************************************
  307339             : 
  307340             :      public:
  307341             :           /// \private
  307342             :           static const unsigned pool_size; //
  307343             :           /// \private
  307344             :           static std::vector<unsigned char *> pools; //
  307345             :           /// \private
  307346             :           static SgUnknownArrayOrFunctionReference * next_node; // 
  307347             : 
  307348             :           /// \private
  307349             :           static unsigned long initializeStorageClassArray(SgUnknownArrayOrFunctionReferenceStorageClass *); //
  307350             : 
  307351             :           /// \private
  307352             :           static void clearMemoryPool(); //
  307353             :           static void deleteMemoryPool(); //
  307354             : 
  307355             :           /// \private
  307356             :           static void extendMemoryPoolForFileIO(); //
  307357             : 
  307358             :           /// \private
  307359             :           static SgUnknownArrayOrFunctionReference * getPointerFromGlobalIndex(unsigned long); //
  307360             :           /// \private
  307361             :           static SgUnknownArrayOrFunctionReference * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  307362             : 
  307363             :           /// \private
  307364             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  307365             :           /// \private
  307366             :           static void resetValidFreepointers(); //
  307367             :           /// \private
  307368             :           static unsigned long getNumberOfLastValidPointer(); //
  307369             : 
  307370             : 
  307371             : #if defined(INLINE_FUNCTIONS)
  307372             :       /*! \brief returns pointer to newly allocated IR node */
  307373             :           inline void *operator new (size_t size);
  307374             : #else
  307375             :       /*! \brief returns pointer to newly allocated IR node */
  307376             :           void *operator new (size_t size);
  307377             : #endif
  307378             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  307379             :           void operator delete (void* pointer, size_t size);
  307380             : 
  307381             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  307382           0 :           void operator delete (void* pointer)
  307383             :              {
  307384             :             // This is the generated delete operator...
  307385           0 :                SgUnknownArrayOrFunctionReference::operator delete (pointer,sizeof(SgUnknownArrayOrFunctionReference));
  307386             :              }
  307387             : 
  307388             :       /*! \brief Returns the total number of IR nodes of this type */
  307389             :           static size_t numberOfNodes();
  307390             : 
  307391             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  307392             :           static size_t memoryUsage();
  307393             : 
  307394             :       // End of scope which started in IR nodes specific code 
  307395             :       /* */
  307396             : 
  307397             :       /* name Internal Functions
  307398             :           \brief Internal functions ... incomplete-documentation
  307399             : 
  307400             :           These functions have been made public as part of the design, but they are suggested for internal use 
  307401             :           or by particularly knowledgeable users for specialized tools or applications.
  307402             : 
  307403             :           \internal We could not make these private because they are required by user for special purposes. And 
  307404             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  307405             :          
  307406             :        */
  307407             : 
  307408             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  307409             :        // overridden in every class by *generated* implementation
  307410             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  307411             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  307412             :        // MS: 06/28/02 container of names of variables or container indices 
  307413             :        // used used in the traversal to access AST successor nodes
  307414             :        // overridden in every class by *generated* implementation
  307415             :       /*! \brief container of names of variables or container indices used used in the traversal
  307416             :           to access AST successor nodes overridden in every class by *generated* implementation */
  307417             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  307418             : 
  307419             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  307420             :        // than all the vector copies. The implementation for these functions is generated for each class.
  307421             :       /*! \brief return number of children in the traversal successor list */
  307422             :           virtual size_t get_numberOfTraversalSuccessors() override;
  307423             :       /*! \brief index-based access to traversal successors by index number */
  307424             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  307425             :       /*! \brief index-based access to traversal successors by child node */
  307426             :           virtual size_t get_childIndex(SgNode *child) override;
  307427             : 
  307428             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  307429             :        // MS: 08/16/2002 method for generating RTI information
  307430             :       /*! \brief return C++ Runtime-Time-Information */
  307431             :           virtual RTIReturnType roseRTI() override;
  307432             : #endif
  307433             :       /* */
  307434             : 
  307435             : 
  307436             : 
  307437             :       /* name Deprecated Functions
  307438             :           \brief Deprecated functions ... incomplete-documentation
  307439             : 
  307440             :           These functions have been deprecated from use.
  307441             :        */
  307442             :       /* */
  307443             : 
  307444             :       /*! returns a C style string (char*) representing the class name */
  307445             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  307446             : 
  307447             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  307448             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  307449             : #if 0
  307450             :       /*! returns old style Sage II enum values */
  307451             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  307452             :       /*! returns old style Sage II enum values */
  307453             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  307454             : #endif
  307455             :       /* */
  307456             : 
  307457             : 
  307458             : 
  307459             : 
  307460             :      public:
  307461             :       /* name Traversal Support Functions
  307462             :           \brief Traversal support functions ... incomplete-documentation
  307463             : 
  307464             :           These functions have been made public as part of the design, but they are suggested for internal use 
  307465             :           or by particularly knowledgable users for specialized tools or applications.
  307466             :        */
  307467             :       /* */
  307468             : 
  307469             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  307470             :        // (inferior to ROSE traversal mechanism, experimental).
  307471             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  307472             :        */
  307473             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  307474             : 
  307475             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  307476             :       /*! \brief support for the classic visitor pattern done in GoF */
  307477             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  307478             : 
  307479             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  307480             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  307481             :        */
  307482             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  307483             : 
  307484             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  307485             :        */
  307486             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  307487             : 
  307488             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  307489             :        // This traversal helps support internal tools that call static member functions.
  307490             :        // note: this function operates on the memory pools.
  307491             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  307492             :        */
  307493             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  307494             :       /* */
  307495             : 
  307496             : 
  307497             :      public:
  307498             :       /* name Memory Allocation Functions
  307499             :           \brief Memory allocations functions ... incomplete-documentation
  307500             : 
  307501             :           These functions have been made public as part of the design, but they are suggested for internal use 
  307502             :           or by particularly knowledgable users for specialized tools or applications.
  307503             :        */
  307504             :       /* */
  307505             : 
  307506             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  307507             : 
  307508             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  307509             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  307510             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  307511             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  307512             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  307513             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  307514             :           being used with the AST File I/O mechanism.
  307515             :        */
  307516             :           virtual bool isInMemoryPool() override;
  307517             : 
  307518             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  307519             : 
  307520             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  307521             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  307522             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  307523             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  307524             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  307525             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  307526             :           being used with the AST File I/O mechanism.
  307527             :        */
  307528             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  307529             : 
  307530             :       // DQ (4/30/2006): Modified to be a const function.
  307531             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  307532             : 
  307533             :           This functions is part of general support for many possible tools to operate 
  307534             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  307535             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  307536             :           less than the set of pointers used by the AST file I/O. This is part of
  307537             :           work implemented by Andreas, and support tools such as the AST graph generation.
  307538             : 
  307539             :           \warning This function can return unexpected data members and thus the 
  307540             :                    order and the number of elements is unpredicable and subject 
  307541             :                    to change.
  307542             : 
  307543             :           \returns STL vector of pairs of SgNode* and strings
  307544             :        */
  307545             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  307546             : 
  307547             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  307548             : 
  307549             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  307550             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  307551             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  307552             : 
  307553             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  307554             :                    and subject to change.
  307555             :        */
  307556             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  307557             : 
  307558             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  307559             : 
  307560             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  307561             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  307562             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  307563             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  307564             : 
  307565             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  307566             : 
  307567             :           \returns long
  307568             :        */
  307569             :           virtual long getChildIndex( SgNode* childNode ) const override;
  307570             : 
  307571             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  307572             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  307573             :       /* \brief Constructor for use by AST File I/O Mechanism
  307574             : 
  307575             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  307576             :           which obtained via fast binary file I/O from disk.
  307577             :        */
  307578             :        // SgUnknownArrayOrFunctionReference( SgUnknownArrayOrFunctionReferenceStorageClass& source );
  307579             : 
  307580             : 
  307581             : 
  307582             : 
  307583             : 
  307584             :  // JH (10/24/2005): methods added to support the ast file IO
  307585             :     private:
  307586             : 
  307587             :       /* name AST Memory Allocation Support Functions
  307588             :           \brief Memory allocations support....
  307589             : 
  307590             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  307591             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  307592             :           and support the AST File I/O Mechanism.
  307593             :        */
  307594             :       /* */
  307595             : 
  307596             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  307597             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  307598             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  307599             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  307600             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  307601             :           a correspinding one in the AST_FILE_IO class!
  307602             :        */
  307603             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  307604             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  307605             :       /* \brief Typedef used for low level memory access.
  307606             :        */
  307607             :        // typedef unsigned char* TestType;
  307608             : 
  307609             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  307610             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  307611             :       /* \brief Typedef used to hold memory addresses as values.
  307612             :        */
  307613             :        // typedef unsigned long  AddressType;
  307614             : 
  307615             : 
  307616             : 
  307617             :        // necessary, to have direct access to the p_freepointer and the private methods !
  307618             :       /*! \brief friend class declaration to support AST File I/O */
  307619             :           friend class AST_FILE_IO;
  307620             : 
  307621             :       /*! \brief friend class declaration to support AST File I/O */
  307622             :           friend class SgUnknownArrayOrFunctionReferenceStorageClass;
  307623             : 
  307624             :       /*! \brief friend class declaration to support AST File I/O */
  307625             :           friend class AstSpecificDataManagingClass;
  307626             : 
  307627             :       /*! \brief friend class declaration to support AST File I/O */
  307628             :           friend class AstSpecificDataManagingClassStorageClass;
  307629             :     public:
  307630             :       /*! \brief IR node constructor to support AST File I/O */
  307631             :           SgUnknownArrayOrFunctionReference( const SgUnknownArrayOrFunctionReferenceStorageClass& source );
  307632             : 
  307633             :  // private: // JJW hack
  307634             :        /*
  307635             :           name AST Memory Allocation Support Variables
  307636             :           Memory allocations support variables 
  307637             : 
  307638             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  307639             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  307640             :           and support the AST File I/O Mechanism.
  307641             :        */
  307642             :       /* */
  307643             : 
  307644             :     public:
  307645             : 
  307646             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  307647             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  307648             :       // virtual SgNode* addRegExpAttribute();
  307649             :       /*! \brief Support for AST matching using regular expression.
  307650             : 
  307651             :           This support is incomplete and the subject of current research to define 
  307652             :           RegEx trees to support inexact matching.
  307653             :        */
  307654             :           SgUnknownArrayOrFunctionReference* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  307655             : 
  307656             : // *** COMMON CODE SECTION ENDS HERE ***
  307657             : 
  307658             : 
  307659             : // End of memberFunctionString
  307660             : // Start of memberFunctionString
  307661             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  307662             : 
  307663             :      // the generated cast function
  307664             :      // friend ROSE_DLL_API SgUnknownArrayOrFunctionReference* isSgUnknownArrayOrFunctionReference ( SgNode* s );
  307665             : 
  307666             :           typedef SgExpression base_node_type;
  307667             : 
  307668             : 
  307669             : // End of memberFunctionString
  307670             : // Start of memberFunctionString
  307671             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  307672             : 
  307673             :           SgType* get_type() const override;
  307674             : 
  307675             : 
  307676             : // End of memberFunctionString
  307677             : // Start of memberFunctionString
  307678             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  307679             : 
  307680             :           void post_construction_initialization() override;
  307681             : 
  307682             : 
  307683             : // End of memberFunctionString
  307684             : 
  307685             :      public: 
  307686             :          std::string get_name() const /* (getDataAccessFunctionPrototypeString) */;
  307687             :          void set_name(std::string name) /* (getDataAccessFunctionPrototypeString) */;
  307688             : 
  307689             :      public: 
  307690             :          SgExpression* get_named_reference() const;
  307691             :          void set_named_reference(SgExpression* named_reference);
  307692             : 
  307693             :      public: 
  307694             :          SgExprListExp* get_expression_list() const;
  307695             :          void set_expression_list(SgExprListExp* expression_list);
  307696             : 
  307697             : 
  307698             :      public: 
  307699             :          virtual ~SgUnknownArrayOrFunctionReference();
  307700             : 
  307701             : 
  307702             :      public: 
  307703             :          SgUnknownArrayOrFunctionReference(Sg_File_Info* startOfConstruct ); 
  307704             :          SgUnknownArrayOrFunctionReference(); 
  307705             : 
  307706             :     protected:
  307707             : // Start of memberFunctionString
  307708             : std::string p_name;
  307709             :           
  307710             : // End of memberFunctionString
  307711             : // Start of memberFunctionString
  307712             : SgExpression* p_named_reference;
  307713             :           
  307714             : // End of memberFunctionString
  307715             : // Start of memberFunctionString
  307716             : SgExprListExp* p_expression_list;
  307717             :           
  307718             : // End of memberFunctionString
  307719             : 
  307720             :     friend struct Rose::Traits::generated::describe_node_t<SgUnknownArrayOrFunctionReference>;
  307721             :     friend struct Rose::Traits::generated::describe_field_t<SgUnknownArrayOrFunctionReference, std::string,&SgUnknownArrayOrFunctionReference::p_name>;
  307722             :     friend struct Rose::Traits::generated::describe_field_t<SgUnknownArrayOrFunctionReference, SgExpression*,&SgUnknownArrayOrFunctionReference::p_named_reference>;
  307723             :     friend struct Rose::Traits::generated::describe_field_t<SgUnknownArrayOrFunctionReference, SgExprListExp*,&SgUnknownArrayOrFunctionReference::p_expression_list>;
  307724             : 
  307725             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307726             : 
  307727             : 
  307728             :    };
  307729             : #endif
  307730             : 
  307731             : // postdeclarations for SgUnknownArrayOrFunctionReference
  307732             : 
  307733             : /* #line 307734 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307734             : 
  307735             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  307736             : 
  307737             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307738             : 
  307739             : 
  307740             : /* #line 307741 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307741             : 
  307742             : 
  307743             : 
  307744             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307745             : 
  307746             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  307747             : //      This code is automatically generated for each 
  307748             : //      terminal and non-terminal within the defined 
  307749             : //      grammar.  There is a simple way to change the 
  307750             : //      code to fix bugs etc.  See the ROSE README file
  307751             : //      for directions.
  307752             : 
  307753             : // tps: (02/22/2010): Adding DLL export requirements
  307754             : #include "rosedll.h"
  307755             : 
  307756             : // predeclarations for SgPseudoDestructorRefExp
  307757             : 
  307758             : /* #line 307759 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307759             : 
  307760             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  307761             : 
  307762             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  307763             : 
  307764             : #if 1
  307765             : // Class Definition for SgPseudoDestructorRefExp
  307766             : class ROSE_DLL_API SgPseudoDestructorRefExp  : public SgExpression
  307767             :    {
  307768             :      public:
  307769             : 
  307770             : 
  307771             : /* #line 307772 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  307772             : 
  307773             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  307774             : // Start of memberFunctionString
  307775             : /* #line 1859 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  307776             : 
  307777             : 
  307778             :        // DQ (1/18/2020): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  307779             :           int get_name_qualification_length() const override;
  307780             :           void set_name_qualification_length(int name_qualification_length) override;
  307781             : 
  307782             :        // DQ (1/18/2020): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  307783             :           bool get_type_elaboration_required() const override;
  307784             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  307785             : 
  307786             :        // DQ (1/18/2020): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  307787             :           bool get_global_qualification_required() const override;
  307788             :           void set_global_qualification_required(bool global_qualification_required) override;
  307789             : 
  307790             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  307791             :           virtual unsigned int cfgIndexForEnd() const override;
  307792             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  307793             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  307794             : #endif
  307795             : 
  307796             : 
  307797             : 
  307798             : // End of memberFunctionString
  307799             : // Start of memberFunctionString
  307800             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  307801             : 
  307802             : // *** COMMON CODE SECTION BEGINS HERE ***
  307803             : 
  307804             :     public:
  307805             : 
  307806             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  307807             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  307808             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  307809             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  307810             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  307811             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  307812             : 
  307813             :       /*! \brief returns a string representing the class name */
  307814             :           virtual std::string class_name() const override;
  307815             : 
  307816             :       /*! \brief returns new style SageIII enum values */
  307817             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  307818             : 
  307819             :       /*! \brief static variant value */
  307820             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  307821             :        // static const VariantT static_variant = V_SgPseudoDestructorRefExp;
  307822             :           enum { static_variant = V_SgPseudoDestructorRefExp };
  307823             : 
  307824             :        /* the generated cast function */
  307825             :       /*! \brief Casts pointer from base class to derived class */
  307826             :           ROSE_DLL_API friend       SgPseudoDestructorRefExp* isSgPseudoDestructorRefExp(       SgNode * s );
  307827             : 
  307828             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  307829             :           ROSE_DLL_API friend const SgPseudoDestructorRefExp* isSgPseudoDestructorRefExp( const SgNode * s );
  307830             : 
  307831             :      // ******************************************
  307832             :      // * Memory Pool / New / Delete
  307833             :      // ******************************************
  307834             : 
  307835             :      public:
  307836             :           /// \private
  307837             :           static const unsigned pool_size; //
  307838             :           /// \private
  307839             :           static std::vector<unsigned char *> pools; //
  307840             :           /// \private
  307841             :           static SgPseudoDestructorRefExp * next_node; // 
  307842             : 
  307843             :           /// \private
  307844             :           static unsigned long initializeStorageClassArray(SgPseudoDestructorRefExpStorageClass *); //
  307845             : 
  307846             :           /// \private
  307847             :           static void clearMemoryPool(); //
  307848             :           static void deleteMemoryPool(); //
  307849             : 
  307850             :           /// \private
  307851             :           static void extendMemoryPoolForFileIO(); //
  307852             : 
  307853             :           /// \private
  307854             :           static SgPseudoDestructorRefExp * getPointerFromGlobalIndex(unsigned long); //
  307855             :           /// \private
  307856             :           static SgPseudoDestructorRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  307857             : 
  307858             :           /// \private
  307859             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  307860             :           /// \private
  307861             :           static void resetValidFreepointers(); //
  307862             :           /// \private
  307863             :           static unsigned long getNumberOfLastValidPointer(); //
  307864             : 
  307865             : 
  307866             : #if defined(INLINE_FUNCTIONS)
  307867             :       /*! \brief returns pointer to newly allocated IR node */
  307868             :           inline void *operator new (size_t size);
  307869             : #else
  307870             :       /*! \brief returns pointer to newly allocated IR node */
  307871             :           void *operator new (size_t size);
  307872             : #endif
  307873             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  307874             :           void operator delete (void* pointer, size_t size);
  307875             : 
  307876             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  307877           0 :           void operator delete (void* pointer)
  307878             :              {
  307879             :             // This is the generated delete operator...
  307880           0 :                SgPseudoDestructorRefExp::operator delete (pointer,sizeof(SgPseudoDestructorRefExp));
  307881             :              }
  307882             : 
  307883             :       /*! \brief Returns the total number of IR nodes of this type */
  307884             :           static size_t numberOfNodes();
  307885             : 
  307886             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  307887             :           static size_t memoryUsage();
  307888             : 
  307889             :       // End of scope which started in IR nodes specific code 
  307890             :       /* */
  307891             : 
  307892             :       /* name Internal Functions
  307893             :           \brief Internal functions ... incomplete-documentation
  307894             : 
  307895             :           These functions have been made public as part of the design, but they are suggested for internal use 
  307896             :           or by particularly knowledgeable users for specialized tools or applications.
  307897             : 
  307898             :           \internal We could not make these private because they are required by user for special purposes. And 
  307899             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  307900             :          
  307901             :        */
  307902             : 
  307903             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  307904             :        // overridden in every class by *generated* implementation
  307905             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  307906             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  307907             :        // MS: 06/28/02 container of names of variables or container indices 
  307908             :        // used used in the traversal to access AST successor nodes
  307909             :        // overridden in every class by *generated* implementation
  307910             :       /*! \brief container of names of variables or container indices used used in the traversal
  307911             :           to access AST successor nodes overridden in every class by *generated* implementation */
  307912             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  307913             : 
  307914             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  307915             :        // than all the vector copies. The implementation for these functions is generated for each class.
  307916             :       /*! \brief return number of children in the traversal successor list */
  307917             :           virtual size_t get_numberOfTraversalSuccessors() override;
  307918             :       /*! \brief index-based access to traversal successors by index number */
  307919             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  307920             :       /*! \brief index-based access to traversal successors by child node */
  307921             :           virtual size_t get_childIndex(SgNode *child) override;
  307922             : 
  307923             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  307924             :        // MS: 08/16/2002 method for generating RTI information
  307925             :       /*! \brief return C++ Runtime-Time-Information */
  307926             :           virtual RTIReturnType roseRTI() override;
  307927             : #endif
  307928             :       /* */
  307929             : 
  307930             : 
  307931             : 
  307932             :       /* name Deprecated Functions
  307933             :           \brief Deprecated functions ... incomplete-documentation
  307934             : 
  307935             :           These functions have been deprecated from use.
  307936             :        */
  307937             :       /* */
  307938             : 
  307939             :       /*! returns a C style string (char*) representing the class name */
  307940             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  307941             : 
  307942             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  307943             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  307944             : #if 0
  307945             :       /*! returns old style Sage II enum values */
  307946             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  307947             :       /*! returns old style Sage II enum values */
  307948             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  307949             : #endif
  307950             :       /* */
  307951             : 
  307952             : 
  307953             : 
  307954             : 
  307955             :      public:
  307956             :       /* name Traversal Support Functions
  307957             :           \brief Traversal support functions ... incomplete-documentation
  307958             : 
  307959             :           These functions have been made public as part of the design, but they are suggested for internal use 
  307960             :           or by particularly knowledgable users for specialized tools or applications.
  307961             :        */
  307962             :       /* */
  307963             : 
  307964             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  307965             :        // (inferior to ROSE traversal mechanism, experimental).
  307966             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  307967             :        */
  307968             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  307969             : 
  307970             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  307971             :       /*! \brief support for the classic visitor pattern done in GoF */
  307972             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  307973             : 
  307974             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  307975             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  307976             :        */
  307977             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  307978             : 
  307979             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  307980             :        */
  307981             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  307982             : 
  307983             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  307984             :        // This traversal helps support internal tools that call static member functions.
  307985             :        // note: this function operates on the memory pools.
  307986             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  307987             :        */
  307988             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  307989             :       /* */
  307990             : 
  307991             : 
  307992             :      public:
  307993             :       /* name Memory Allocation Functions
  307994             :           \brief Memory allocations functions ... incomplete-documentation
  307995             : 
  307996             :           These functions have been made public as part of the design, but they are suggested for internal use 
  307997             :           or by particularly knowledgable users for specialized tools or applications.
  307998             :        */
  307999             :       /* */
  308000             : 
  308001             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  308002             : 
  308003             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  308004             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  308005             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  308006             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  308007             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  308008             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  308009             :           being used with the AST File I/O mechanism.
  308010             :        */
  308011             :           virtual bool isInMemoryPool() override;
  308012             : 
  308013             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  308014             : 
  308015             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  308016             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  308017             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  308018             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  308019             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  308020             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  308021             :           being used with the AST File I/O mechanism.
  308022             :        */
  308023             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  308024             : 
  308025             :       // DQ (4/30/2006): Modified to be a const function.
  308026             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  308027             : 
  308028             :           This functions is part of general support for many possible tools to operate 
  308029             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  308030             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  308031             :           less than the set of pointers used by the AST file I/O. This is part of
  308032             :           work implemented by Andreas, and support tools such as the AST graph generation.
  308033             : 
  308034             :           \warning This function can return unexpected data members and thus the 
  308035             :                    order and the number of elements is unpredicable and subject 
  308036             :                    to change.
  308037             : 
  308038             :           \returns STL vector of pairs of SgNode* and strings
  308039             :        */
  308040             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  308041             : 
  308042             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  308043             : 
  308044             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  308045             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  308046             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  308047             : 
  308048             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  308049             :                    and subject to change.
  308050             :        */
  308051             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  308052             : 
  308053             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  308054             : 
  308055             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  308056             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  308057             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  308058             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  308059             : 
  308060             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  308061             : 
  308062             :           \returns long
  308063             :        */
  308064             :           virtual long getChildIndex( SgNode* childNode ) const override;
  308065             : 
  308066             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  308067             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  308068             :       /* \brief Constructor for use by AST File I/O Mechanism
  308069             : 
  308070             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  308071             :           which obtained via fast binary file I/O from disk.
  308072             :        */
  308073             :        // SgPseudoDestructorRefExp( SgPseudoDestructorRefExpStorageClass& source );
  308074             : 
  308075             : 
  308076             : 
  308077             : 
  308078             : 
  308079             :  // JH (10/24/2005): methods added to support the ast file IO
  308080             :     private:
  308081             : 
  308082             :       /* name AST Memory Allocation Support Functions
  308083             :           \brief Memory allocations support....
  308084             : 
  308085             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  308086             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  308087             :           and support the AST File I/O Mechanism.
  308088             :        */
  308089             :       /* */
  308090             : 
  308091             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  308092             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  308093             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  308094             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  308095             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  308096             :           a correspinding one in the AST_FILE_IO class!
  308097             :        */
  308098             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  308099             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  308100             :       /* \brief Typedef used for low level memory access.
  308101             :        */
  308102             :        // typedef unsigned char* TestType;
  308103             : 
  308104             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  308105             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  308106             :       /* \brief Typedef used to hold memory addresses as values.
  308107             :        */
  308108             :        // typedef unsigned long  AddressType;
  308109             : 
  308110             : 
  308111             : 
  308112             :        // necessary, to have direct access to the p_freepointer and the private methods !
  308113             :       /*! \brief friend class declaration to support AST File I/O */
  308114             :           friend class AST_FILE_IO;
  308115             : 
  308116             :       /*! \brief friend class declaration to support AST File I/O */
  308117             :           friend class SgPseudoDestructorRefExpStorageClass;
  308118             : 
  308119             :       /*! \brief friend class declaration to support AST File I/O */
  308120             :           friend class AstSpecificDataManagingClass;
  308121             : 
  308122             :       /*! \brief friend class declaration to support AST File I/O */
  308123             :           friend class AstSpecificDataManagingClassStorageClass;
  308124             :     public:
  308125             :       /*! \brief IR node constructor to support AST File I/O */
  308126             :           SgPseudoDestructorRefExp( const SgPseudoDestructorRefExpStorageClass& source );
  308127             : 
  308128             :  // private: // JJW hack
  308129             :        /*
  308130             :           name AST Memory Allocation Support Variables
  308131             :           Memory allocations support variables 
  308132             : 
  308133             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  308134             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  308135             :           and support the AST File I/O Mechanism.
  308136             :        */
  308137             :       /* */
  308138             : 
  308139             :     public:
  308140             : 
  308141             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  308142             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  308143             :       // virtual SgNode* addRegExpAttribute();
  308144             :       /*! \brief Support for AST matching using regular expression.
  308145             : 
  308146             :           This support is incomplete and the subject of current research to define 
  308147             :           RegEx trees to support inexact matching.
  308148             :        */
  308149             :           SgPseudoDestructorRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  308150             : 
  308151             : // *** COMMON CODE SECTION ENDS HERE ***
  308152             : 
  308153             : 
  308154             : // End of memberFunctionString
  308155             : // Start of memberFunctionString
  308156             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  308157             : 
  308158             :      // the generated cast function
  308159             :      // friend ROSE_DLL_API SgPseudoDestructorRefExp* isSgPseudoDestructorRefExp ( SgNode* s );
  308160             : 
  308161             :           typedef SgExpression base_node_type;
  308162             : 
  308163             : 
  308164             : // End of memberFunctionString
  308165             : // Start of memberFunctionString
  308166             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  308167             : 
  308168             :           SgType* get_type() const override;
  308169             : 
  308170             : 
  308171             : // End of memberFunctionString
  308172             : // Start of memberFunctionString
  308173             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  308174             : 
  308175             :           void post_construction_initialization() override;
  308176             : 
  308177             : 
  308178             : // End of memberFunctionString
  308179             : 
  308180             :      public: 
  308181             :          SgType* get_object_type() const;
  308182             :          void set_object_type(SgType* object_type);
  308183             : 
  308184             :      public: 
  308185             :          SgType* get_expression_type() const;
  308186             :          void set_expression_type(SgType* expression_type);
  308187             : 
  308188             : 
  308189             : 
  308190             : 
  308191             : 
  308192             :      public: 
  308193             :          virtual ~SgPseudoDestructorRefExp();
  308194             : 
  308195             : 
  308196             :      public: 
  308197             :          SgPseudoDestructorRefExp(Sg_File_Info* startOfConstruct , SgType* object_type = NULL); 
  308198             :          SgPseudoDestructorRefExp(SgType* object_type); 
  308199             : 
  308200             :     protected:
  308201             : // Start of memberFunctionString
  308202             : SgType* p_object_type;
  308203             :           
  308204             : // End of memberFunctionString
  308205             : // Start of memberFunctionString
  308206             : SgType* p_expression_type;
  308207             :           
  308208             : // End of memberFunctionString
  308209             : // Start of memberFunctionString
  308210             : int p_name_qualification_length;
  308211             :           
  308212             : // End of memberFunctionString
  308213             : // Start of memberFunctionString
  308214             : bool p_type_elaboration_required;
  308215             :           
  308216             : // End of memberFunctionString
  308217             : // Start of memberFunctionString
  308218             : bool p_global_qualification_required;
  308219             :           
  308220             : // End of memberFunctionString
  308221             : 
  308222             :     friend struct Rose::Traits::generated::describe_node_t<SgPseudoDestructorRefExp>;
  308223             :     friend struct Rose::Traits::generated::describe_field_t<SgPseudoDestructorRefExp, SgType*,&SgPseudoDestructorRefExp::p_object_type>;
  308224             :     friend struct Rose::Traits::generated::describe_field_t<SgPseudoDestructorRefExp, SgType*,&SgPseudoDestructorRefExp::p_expression_type>;
  308225             :     friend struct Rose::Traits::generated::describe_field_t<SgPseudoDestructorRefExp, int,&SgPseudoDestructorRefExp::p_name_qualification_length>;
  308226             :     friend struct Rose::Traits::generated::describe_field_t<SgPseudoDestructorRefExp, bool,&SgPseudoDestructorRefExp::p_type_elaboration_required>;
  308227             :     friend struct Rose::Traits::generated::describe_field_t<SgPseudoDestructorRefExp, bool,&SgPseudoDestructorRefExp::p_global_qualification_required>;
  308228             : 
  308229             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308230             : 
  308231             : 
  308232             :    };
  308233             : #endif
  308234             : 
  308235             : // postdeclarations for SgPseudoDestructorRefExp
  308236             : 
  308237             : /* #line 308238 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308238             : 
  308239             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  308240             : 
  308241             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308242             : 
  308243             : 
  308244             : /* #line 308245 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308245             : 
  308246             : 
  308247             : 
  308248             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308249             : 
  308250             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  308251             : //      This code is automatically generated for each 
  308252             : //      terminal and non-terminal within the defined 
  308253             : //      grammar.  There is a simple way to change the 
  308254             : //      code to fix bugs etc.  See the ROSE README file
  308255             : //      for directions.
  308256             : 
  308257             : // tps: (02/22/2010): Adding DLL export requirements
  308258             : #include "rosedll.h"
  308259             : 
  308260             : // predeclarations for SgCAFCoExpression
  308261             : 
  308262             : /* #line 308263 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308263             : 
  308264             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  308265             : 
  308266             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308267             : 
  308268             : #if 1
  308269             : // Class Definition for SgCAFCoExpression
  308270             : class ROSE_DLL_API SgCAFCoExpression  : public SgExpression
  308271             :    {
  308272             :      public:
  308273             : 
  308274             : 
  308275             : /* #line 308276 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308276             : 
  308277             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  308278             : // Start of memberFunctionString
  308279             : /* #line 1882 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  308280             : 
  308281             : 
  308282             : 
  308283             : 
  308284             : // End of memberFunctionString
  308285             : // Start of memberFunctionString
  308286             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  308287             : 
  308288             : // *** COMMON CODE SECTION BEGINS HERE ***
  308289             : 
  308290             :     public:
  308291             : 
  308292             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  308293             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  308294             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  308295             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  308296             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  308297             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  308298             : 
  308299             :       /*! \brief returns a string representing the class name */
  308300             :           virtual std::string class_name() const override;
  308301             : 
  308302             :       /*! \brief returns new style SageIII enum values */
  308303             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  308304             : 
  308305             :       /*! \brief static variant value */
  308306             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  308307             :        // static const VariantT static_variant = V_SgCAFCoExpression;
  308308             :           enum { static_variant = V_SgCAFCoExpression };
  308309             : 
  308310             :        /* the generated cast function */
  308311             :       /*! \brief Casts pointer from base class to derived class */
  308312             :           ROSE_DLL_API friend       SgCAFCoExpression* isSgCAFCoExpression(       SgNode * s );
  308313             : 
  308314             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  308315             :           ROSE_DLL_API friend const SgCAFCoExpression* isSgCAFCoExpression( const SgNode * s );
  308316             : 
  308317             :      // ******************************************
  308318             :      // * Memory Pool / New / Delete
  308319             :      // ******************************************
  308320             : 
  308321             :      public:
  308322             :           /// \private
  308323             :           static const unsigned pool_size; //
  308324             :           /// \private
  308325             :           static std::vector<unsigned char *> pools; //
  308326             :           /// \private
  308327             :           static SgCAFCoExpression * next_node; // 
  308328             : 
  308329             :           /// \private
  308330             :           static unsigned long initializeStorageClassArray(SgCAFCoExpressionStorageClass *); //
  308331             : 
  308332             :           /// \private
  308333             :           static void clearMemoryPool(); //
  308334             :           static void deleteMemoryPool(); //
  308335             : 
  308336             :           /// \private
  308337             :           static void extendMemoryPoolForFileIO(); //
  308338             : 
  308339             :           /// \private
  308340             :           static SgCAFCoExpression * getPointerFromGlobalIndex(unsigned long); //
  308341             :           /// \private
  308342             :           static SgCAFCoExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  308343             : 
  308344             :           /// \private
  308345             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  308346             :           /// \private
  308347             :           static void resetValidFreepointers(); //
  308348             :           /// \private
  308349             :           static unsigned long getNumberOfLastValidPointer(); //
  308350             : 
  308351             : 
  308352             : #if defined(INLINE_FUNCTIONS)
  308353             :       /*! \brief returns pointer to newly allocated IR node */
  308354             :           inline void *operator new (size_t size);
  308355             : #else
  308356             :       /*! \brief returns pointer to newly allocated IR node */
  308357             :           void *operator new (size_t size);
  308358             : #endif
  308359             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  308360             :           void operator delete (void* pointer, size_t size);
  308361             : 
  308362             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  308363           0 :           void operator delete (void* pointer)
  308364             :              {
  308365             :             // This is the generated delete operator...
  308366           0 :                SgCAFCoExpression::operator delete (pointer,sizeof(SgCAFCoExpression));
  308367             :              }
  308368             : 
  308369             :       /*! \brief Returns the total number of IR nodes of this type */
  308370             :           static size_t numberOfNodes();
  308371             : 
  308372             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  308373             :           static size_t memoryUsage();
  308374             : 
  308375             :       // End of scope which started in IR nodes specific code 
  308376             :       /* */
  308377             : 
  308378             :       /* name Internal Functions
  308379             :           \brief Internal functions ... incomplete-documentation
  308380             : 
  308381             :           These functions have been made public as part of the design, but they are suggested for internal use 
  308382             :           or by particularly knowledgeable users for specialized tools or applications.
  308383             : 
  308384             :           \internal We could not make these private because they are required by user for special purposes. And 
  308385             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  308386             :          
  308387             :        */
  308388             : 
  308389             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  308390             :        // overridden in every class by *generated* implementation
  308391             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  308392             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  308393             :        // MS: 06/28/02 container of names of variables or container indices 
  308394             :        // used used in the traversal to access AST successor nodes
  308395             :        // overridden in every class by *generated* implementation
  308396             :       /*! \brief container of names of variables or container indices used used in the traversal
  308397             :           to access AST successor nodes overridden in every class by *generated* implementation */
  308398             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  308399             : 
  308400             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  308401             :        // than all the vector copies. The implementation for these functions is generated for each class.
  308402             :       /*! \brief return number of children in the traversal successor list */
  308403             :           virtual size_t get_numberOfTraversalSuccessors() override;
  308404             :       /*! \brief index-based access to traversal successors by index number */
  308405             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  308406             :       /*! \brief index-based access to traversal successors by child node */
  308407             :           virtual size_t get_childIndex(SgNode *child) override;
  308408             : 
  308409             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  308410             :        // MS: 08/16/2002 method for generating RTI information
  308411             :       /*! \brief return C++ Runtime-Time-Information */
  308412             :           virtual RTIReturnType roseRTI() override;
  308413             : #endif
  308414             :       /* */
  308415             : 
  308416             : 
  308417             : 
  308418             :       /* name Deprecated Functions
  308419             :           \brief Deprecated functions ... incomplete-documentation
  308420             : 
  308421             :           These functions have been deprecated from use.
  308422             :        */
  308423             :       /* */
  308424             : 
  308425             :       /*! returns a C style string (char*) representing the class name */
  308426             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  308427             : 
  308428             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  308429             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  308430             : #if 0
  308431             :       /*! returns old style Sage II enum values */
  308432             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  308433             :       /*! returns old style Sage II enum values */
  308434             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  308435             : #endif
  308436             :       /* */
  308437             : 
  308438             : 
  308439             : 
  308440             : 
  308441             :      public:
  308442             :       /* name Traversal Support Functions
  308443             :           \brief Traversal support functions ... incomplete-documentation
  308444             : 
  308445             :           These functions have been made public as part of the design, but they are suggested for internal use 
  308446             :           or by particularly knowledgable users for specialized tools or applications.
  308447             :        */
  308448             :       /* */
  308449             : 
  308450             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  308451             :        // (inferior to ROSE traversal mechanism, experimental).
  308452             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  308453             :        */
  308454             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  308455             : 
  308456             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  308457             :       /*! \brief support for the classic visitor pattern done in GoF */
  308458             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  308459             : 
  308460             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  308461             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  308462             :        */
  308463             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  308464             : 
  308465             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  308466             :        */
  308467             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  308468             : 
  308469             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  308470             :        // This traversal helps support internal tools that call static member functions.
  308471             :        // note: this function operates on the memory pools.
  308472             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  308473             :        */
  308474             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  308475             :       /* */
  308476             : 
  308477             : 
  308478             :      public:
  308479             :       /* name Memory Allocation Functions
  308480             :           \brief Memory allocations functions ... incomplete-documentation
  308481             : 
  308482             :           These functions have been made public as part of the design, but they are suggested for internal use 
  308483             :           or by particularly knowledgable users for specialized tools or applications.
  308484             :        */
  308485             :       /* */
  308486             : 
  308487             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  308488             : 
  308489             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  308490             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  308491             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  308492             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  308493             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  308494             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  308495             :           being used with the AST File I/O mechanism.
  308496             :        */
  308497             :           virtual bool isInMemoryPool() override;
  308498             : 
  308499             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  308500             : 
  308501             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  308502             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  308503             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  308504             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  308505             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  308506             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  308507             :           being used with the AST File I/O mechanism.
  308508             :        */
  308509             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  308510             : 
  308511             :       // DQ (4/30/2006): Modified to be a const function.
  308512             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  308513             : 
  308514             :           This functions is part of general support for many possible tools to operate 
  308515             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  308516             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  308517             :           less than the set of pointers used by the AST file I/O. This is part of
  308518             :           work implemented by Andreas, and support tools such as the AST graph generation.
  308519             : 
  308520             :           \warning This function can return unexpected data members and thus the 
  308521             :                    order and the number of elements is unpredicable and subject 
  308522             :                    to change.
  308523             : 
  308524             :           \returns STL vector of pairs of SgNode* and strings
  308525             :        */
  308526             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  308527             : 
  308528             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  308529             : 
  308530             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  308531             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  308532             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  308533             : 
  308534             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  308535             :                    and subject to change.
  308536             :        */
  308537             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  308538             : 
  308539             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  308540             : 
  308541             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  308542             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  308543             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  308544             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  308545             : 
  308546             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  308547             : 
  308548             :           \returns long
  308549             :        */
  308550             :           virtual long getChildIndex( SgNode* childNode ) const override;
  308551             : 
  308552             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  308553             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  308554             :       /* \brief Constructor for use by AST File I/O Mechanism
  308555             : 
  308556             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  308557             :           which obtained via fast binary file I/O from disk.
  308558             :        */
  308559             :        // SgCAFCoExpression( SgCAFCoExpressionStorageClass& source );
  308560             : 
  308561             : 
  308562             : 
  308563             : 
  308564             : 
  308565             :  // JH (10/24/2005): methods added to support the ast file IO
  308566             :     private:
  308567             : 
  308568             :       /* name AST Memory Allocation Support Functions
  308569             :           \brief Memory allocations support....
  308570             : 
  308571             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  308572             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  308573             :           and support the AST File I/O Mechanism.
  308574             :        */
  308575             :       /* */
  308576             : 
  308577             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  308578             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  308579             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  308580             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  308581             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  308582             :           a correspinding one in the AST_FILE_IO class!
  308583             :        */
  308584             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  308585             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  308586             :       /* \brief Typedef used for low level memory access.
  308587             :        */
  308588             :        // typedef unsigned char* TestType;
  308589             : 
  308590             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  308591             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  308592             :       /* \brief Typedef used to hold memory addresses as values.
  308593             :        */
  308594             :        // typedef unsigned long  AddressType;
  308595             : 
  308596             : 
  308597             : 
  308598             :        // necessary, to have direct access to the p_freepointer and the private methods !
  308599             :       /*! \brief friend class declaration to support AST File I/O */
  308600             :           friend class AST_FILE_IO;
  308601             : 
  308602             :       /*! \brief friend class declaration to support AST File I/O */
  308603             :           friend class SgCAFCoExpressionStorageClass;
  308604             : 
  308605             :       /*! \brief friend class declaration to support AST File I/O */
  308606             :           friend class AstSpecificDataManagingClass;
  308607             : 
  308608             :       /*! \brief friend class declaration to support AST File I/O */
  308609             :           friend class AstSpecificDataManagingClassStorageClass;
  308610             :     public:
  308611             :       /*! \brief IR node constructor to support AST File I/O */
  308612             :           SgCAFCoExpression( const SgCAFCoExpressionStorageClass& source );
  308613             : 
  308614             :  // private: // JJW hack
  308615             :        /*
  308616             :           name AST Memory Allocation Support Variables
  308617             :           Memory allocations support variables 
  308618             : 
  308619             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  308620             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  308621             :           and support the AST File I/O Mechanism.
  308622             :        */
  308623             :       /* */
  308624             : 
  308625             :     public:
  308626             : 
  308627             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  308628             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  308629             :       // virtual SgNode* addRegExpAttribute();
  308630             :       /*! \brief Support for AST matching using regular expression.
  308631             : 
  308632             :           This support is incomplete and the subject of current research to define 
  308633             :           RegEx trees to support inexact matching.
  308634             :        */
  308635             :           SgCAFCoExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  308636             : 
  308637             : // *** COMMON CODE SECTION ENDS HERE ***
  308638             : 
  308639             : 
  308640             : // End of memberFunctionString
  308641             : // Start of memberFunctionString
  308642             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  308643             : 
  308644             :      // the generated cast function
  308645             :      // friend ROSE_DLL_API SgCAFCoExpression* isSgCAFCoExpression ( SgNode* s );
  308646             : 
  308647             :           typedef SgExpression base_node_type;
  308648             : 
  308649             : 
  308650             : // End of memberFunctionString
  308651             : // Start of memberFunctionString
  308652             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  308653             : 
  308654             :           SgType* get_type() const override;
  308655             : 
  308656             : 
  308657             : // End of memberFunctionString
  308658             : // Start of memberFunctionString
  308659             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  308660             : 
  308661             :           void post_construction_initialization() override;
  308662             : 
  308663             : 
  308664             : // End of memberFunctionString
  308665             : 
  308666             :      public: 
  308667             :          SgVarRefExp* get_teamId() const;
  308668             :          void set_teamId(SgVarRefExp* teamId);
  308669             : 
  308670             :      public: 
  308671             :          SgExpression* get_teamRank() const;
  308672             :          void set_teamRank(SgExpression* teamRank);
  308673             : 
  308674             :      public: 
  308675             :          SgExpression* get_referData() const;
  308676             :          void set_referData(SgExpression* referData);
  308677             : 
  308678             : 
  308679             :      public: 
  308680             :          virtual ~SgCAFCoExpression();
  308681             : 
  308682             : 
  308683             :      public: 
  308684             :          SgCAFCoExpression(Sg_File_Info* startOfConstruct , SgVarRefExp* teamId = NULL, SgExpression* teamRank = NULL, SgExpression* referData = NULL); 
  308685             :          SgCAFCoExpression(SgVarRefExp* teamId, SgExpression* teamRank, SgExpression* referData); 
  308686             : 
  308687             :     protected:
  308688             : // Start of memberFunctionString
  308689             : SgVarRefExp* p_teamId;
  308690             :           
  308691             : // End of memberFunctionString
  308692             : // Start of memberFunctionString
  308693             : SgExpression* p_teamRank;
  308694             :           
  308695             : // End of memberFunctionString
  308696             : // Start of memberFunctionString
  308697             : SgExpression* p_referData;
  308698             :           
  308699             : // End of memberFunctionString
  308700             : 
  308701             :     friend struct Rose::Traits::generated::describe_node_t<SgCAFCoExpression>;
  308702             :     friend struct Rose::Traits::generated::describe_field_t<SgCAFCoExpression, SgVarRefExp*,&SgCAFCoExpression::p_teamId>;
  308703             :     friend struct Rose::Traits::generated::describe_field_t<SgCAFCoExpression, SgExpression*,&SgCAFCoExpression::p_teamRank>;
  308704             :     friend struct Rose::Traits::generated::describe_field_t<SgCAFCoExpression, SgExpression*,&SgCAFCoExpression::p_referData>;
  308705             : 
  308706             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308707             : 
  308708             : 
  308709             :    };
  308710             : #endif
  308711             : 
  308712             : // postdeclarations for SgCAFCoExpression
  308713             : 
  308714             : /* #line 308715 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308715             : 
  308716             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  308717             : 
  308718             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308719             : 
  308720             : 
  308721             : /* #line 308722 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308722             : 
  308723             : 
  308724             : 
  308725             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308726             : 
  308727             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  308728             : //      This code is automatically generated for each 
  308729             : //      terminal and non-terminal within the defined 
  308730             : //      grammar.  There is a simple way to change the 
  308731             : //      code to fix bugs etc.  See the ROSE README file
  308732             : //      for directions.
  308733             : 
  308734             : // tps: (02/22/2010): Adding DLL export requirements
  308735             : #include "rosedll.h"
  308736             : 
  308737             : // predeclarations for SgCudaKernelExecConfig
  308738             : 
  308739             : /* #line 308740 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308740             : 
  308741             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  308742             : 
  308743             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  308744             : 
  308745             : #if 1
  308746             : // Class Definition for SgCudaKernelExecConfig
  308747             : class ROSE_DLL_API SgCudaKernelExecConfig  : public SgExpression
  308748             :    {
  308749             :      public:
  308750             : 
  308751             : 
  308752             : /* #line 308753 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  308753             : 
  308754             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  308755             : // Start of memberFunctionString
  308756             : /* #line 1893 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  308757             : 
  308758             : 
  308759             : 
  308760             : // End of memberFunctionString
  308761             : // Start of memberFunctionString
  308762             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  308763             : 
  308764             : // *** COMMON CODE SECTION BEGINS HERE ***
  308765             : 
  308766             :     public:
  308767             : 
  308768             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  308769             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  308770             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  308771             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  308772             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  308773             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  308774             : 
  308775             :       /*! \brief returns a string representing the class name */
  308776             :           virtual std::string class_name() const override;
  308777             : 
  308778             :       /*! \brief returns new style SageIII enum values */
  308779             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  308780             : 
  308781             :       /*! \brief static variant value */
  308782             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  308783             :        // static const VariantT static_variant = V_SgCudaKernelExecConfig;
  308784             :           enum { static_variant = V_SgCudaKernelExecConfig };
  308785             : 
  308786             :        /* the generated cast function */
  308787             :       /*! \brief Casts pointer from base class to derived class */
  308788             :           ROSE_DLL_API friend       SgCudaKernelExecConfig* isSgCudaKernelExecConfig(       SgNode * s );
  308789             : 
  308790             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  308791             :           ROSE_DLL_API friend const SgCudaKernelExecConfig* isSgCudaKernelExecConfig( const SgNode * s );
  308792             : 
  308793             :      // ******************************************
  308794             :      // * Memory Pool / New / Delete
  308795             :      // ******************************************
  308796             : 
  308797             :      public:
  308798             :           /// \private
  308799             :           static const unsigned pool_size; //
  308800             :           /// \private
  308801             :           static std::vector<unsigned char *> pools; //
  308802             :           /// \private
  308803             :           static SgCudaKernelExecConfig * next_node; // 
  308804             : 
  308805             :           /// \private
  308806             :           static unsigned long initializeStorageClassArray(SgCudaKernelExecConfigStorageClass *); //
  308807             : 
  308808             :           /// \private
  308809             :           static void clearMemoryPool(); //
  308810             :           static void deleteMemoryPool(); //
  308811             : 
  308812             :           /// \private
  308813             :           static void extendMemoryPoolForFileIO(); //
  308814             : 
  308815             :           /// \private
  308816             :           static SgCudaKernelExecConfig * getPointerFromGlobalIndex(unsigned long); //
  308817             :           /// \private
  308818             :           static SgCudaKernelExecConfig * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  308819             : 
  308820             :           /// \private
  308821             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  308822             :           /// \private
  308823             :           static void resetValidFreepointers(); //
  308824             :           /// \private
  308825             :           static unsigned long getNumberOfLastValidPointer(); //
  308826             : 
  308827             : 
  308828             : #if defined(INLINE_FUNCTIONS)
  308829             :       /*! \brief returns pointer to newly allocated IR node */
  308830             :           inline void *operator new (size_t size);
  308831             : #else
  308832             :       /*! \brief returns pointer to newly allocated IR node */
  308833             :           void *operator new (size_t size);
  308834             : #endif
  308835             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  308836             :           void operator delete (void* pointer, size_t size);
  308837             : 
  308838             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  308839           0 :           void operator delete (void* pointer)
  308840             :              {
  308841             :             // This is the generated delete operator...
  308842           0 :                SgCudaKernelExecConfig::operator delete (pointer,sizeof(SgCudaKernelExecConfig));
  308843             :              }
  308844             : 
  308845             :       /*! \brief Returns the total number of IR nodes of this type */
  308846             :           static size_t numberOfNodes();
  308847             : 
  308848             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  308849             :           static size_t memoryUsage();
  308850             : 
  308851             :       // End of scope which started in IR nodes specific code 
  308852             :       /* */
  308853             : 
  308854             :       /* name Internal Functions
  308855             :           \brief Internal functions ... incomplete-documentation
  308856             : 
  308857             :           These functions have been made public as part of the design, but they are suggested for internal use 
  308858             :           or by particularly knowledgeable users for specialized tools or applications.
  308859             : 
  308860             :           \internal We could not make these private because they are required by user for special purposes. And 
  308861             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  308862             :          
  308863             :        */
  308864             : 
  308865             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  308866             :        // overridden in every class by *generated* implementation
  308867             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  308868             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  308869             :        // MS: 06/28/02 container of names of variables or container indices 
  308870             :        // used used in the traversal to access AST successor nodes
  308871             :        // overridden in every class by *generated* implementation
  308872             :       /*! \brief container of names of variables or container indices used used in the traversal
  308873             :           to access AST successor nodes overridden in every class by *generated* implementation */
  308874             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  308875             : 
  308876             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  308877             :        // than all the vector copies. The implementation for these functions is generated for each class.
  308878             :       /*! \brief return number of children in the traversal successor list */
  308879             :           virtual size_t get_numberOfTraversalSuccessors() override;
  308880             :       /*! \brief index-based access to traversal successors by index number */
  308881             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  308882             :       /*! \brief index-based access to traversal successors by child node */
  308883             :           virtual size_t get_childIndex(SgNode *child) override;
  308884             : 
  308885             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  308886             :        // MS: 08/16/2002 method for generating RTI information
  308887             :       /*! \brief return C++ Runtime-Time-Information */
  308888             :           virtual RTIReturnType roseRTI() override;
  308889             : #endif
  308890             :       /* */
  308891             : 
  308892             : 
  308893             : 
  308894             :       /* name Deprecated Functions
  308895             :           \brief Deprecated functions ... incomplete-documentation
  308896             : 
  308897             :           These functions have been deprecated from use.
  308898             :        */
  308899             :       /* */
  308900             : 
  308901             :       /*! returns a C style string (char*) representing the class name */
  308902             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  308903             : 
  308904             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  308905             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  308906             : #if 0
  308907             :       /*! returns old style Sage II enum values */
  308908             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  308909             :       /*! returns old style Sage II enum values */
  308910             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  308911             : #endif
  308912             :       /* */
  308913             : 
  308914             : 
  308915             : 
  308916             : 
  308917             :      public:
  308918             :       /* name Traversal Support Functions
  308919             :           \brief Traversal support functions ... incomplete-documentation
  308920             : 
  308921             :           These functions have been made public as part of the design, but they are suggested for internal use 
  308922             :           or by particularly knowledgable users for specialized tools or applications.
  308923             :        */
  308924             :       /* */
  308925             : 
  308926             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  308927             :        // (inferior to ROSE traversal mechanism, experimental).
  308928             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  308929             :        */
  308930             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  308931             : 
  308932             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  308933             :       /*! \brief support for the classic visitor pattern done in GoF */
  308934             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  308935             : 
  308936             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  308937             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  308938             :        */
  308939             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  308940             : 
  308941             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  308942             :        */
  308943             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  308944             : 
  308945             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  308946             :        // This traversal helps support internal tools that call static member functions.
  308947             :        // note: this function operates on the memory pools.
  308948             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  308949             :        */
  308950             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  308951             :       /* */
  308952             : 
  308953             : 
  308954             :      public:
  308955             :       /* name Memory Allocation Functions
  308956             :           \brief Memory allocations functions ... incomplete-documentation
  308957             : 
  308958             :           These functions have been made public as part of the design, but they are suggested for internal use 
  308959             :           or by particularly knowledgable users for specialized tools or applications.
  308960             :        */
  308961             :       /* */
  308962             : 
  308963             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  308964             : 
  308965             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  308966             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  308967             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  308968             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  308969             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  308970             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  308971             :           being used with the AST File I/O mechanism.
  308972             :        */
  308973             :           virtual bool isInMemoryPool() override;
  308974             : 
  308975             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  308976             : 
  308977             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  308978             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  308979             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  308980             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  308981             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  308982             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  308983             :           being used with the AST File I/O mechanism.
  308984             :        */
  308985             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  308986             : 
  308987             :       // DQ (4/30/2006): Modified to be a const function.
  308988             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  308989             : 
  308990             :           This functions is part of general support for many possible tools to operate 
  308991             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  308992             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  308993             :           less than the set of pointers used by the AST file I/O. This is part of
  308994             :           work implemented by Andreas, and support tools such as the AST graph generation.
  308995             : 
  308996             :           \warning This function can return unexpected data members and thus the 
  308997             :                    order and the number of elements is unpredicable and subject 
  308998             :                    to change.
  308999             : 
  309000             :           \returns STL vector of pairs of SgNode* and strings
  309001             :        */
  309002             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  309003             : 
  309004             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  309005             : 
  309006             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  309007             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  309008             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  309009             : 
  309010             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  309011             :                    and subject to change.
  309012             :        */
  309013             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  309014             : 
  309015             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  309016             : 
  309017             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  309018             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  309019             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  309020             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  309021             : 
  309022             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  309023             : 
  309024             :           \returns long
  309025             :        */
  309026             :           virtual long getChildIndex( SgNode* childNode ) const override;
  309027             : 
  309028             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  309029             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  309030             :       /* \brief Constructor for use by AST File I/O Mechanism
  309031             : 
  309032             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  309033             :           which obtained via fast binary file I/O from disk.
  309034             :        */
  309035             :        // SgCudaKernelExecConfig( SgCudaKernelExecConfigStorageClass& source );
  309036             : 
  309037             : 
  309038             : 
  309039             : 
  309040             : 
  309041             :  // JH (10/24/2005): methods added to support the ast file IO
  309042             :     private:
  309043             : 
  309044             :       /* name AST Memory Allocation Support Functions
  309045             :           \brief Memory allocations support....
  309046             : 
  309047             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  309048             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  309049             :           and support the AST File I/O Mechanism.
  309050             :        */
  309051             :       /* */
  309052             : 
  309053             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  309054             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  309055             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  309056             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  309057             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  309058             :           a correspinding one in the AST_FILE_IO class!
  309059             :        */
  309060             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  309061             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  309062             :       /* \brief Typedef used for low level memory access.
  309063             :        */
  309064             :        // typedef unsigned char* TestType;
  309065             : 
  309066             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  309067             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  309068             :       /* \brief Typedef used to hold memory addresses as values.
  309069             :        */
  309070             :        // typedef unsigned long  AddressType;
  309071             : 
  309072             : 
  309073             : 
  309074             :        // necessary, to have direct access to the p_freepointer and the private methods !
  309075             :       /*! \brief friend class declaration to support AST File I/O */
  309076             :           friend class AST_FILE_IO;
  309077             : 
  309078             :       /*! \brief friend class declaration to support AST File I/O */
  309079             :           friend class SgCudaKernelExecConfigStorageClass;
  309080             : 
  309081             :       /*! \brief friend class declaration to support AST File I/O */
  309082             :           friend class AstSpecificDataManagingClass;
  309083             : 
  309084             :       /*! \brief friend class declaration to support AST File I/O */
  309085             :           friend class AstSpecificDataManagingClassStorageClass;
  309086             :     public:
  309087             :       /*! \brief IR node constructor to support AST File I/O */
  309088             :           SgCudaKernelExecConfig( const SgCudaKernelExecConfigStorageClass& source );
  309089             : 
  309090             :  // private: // JJW hack
  309091             :        /*
  309092             :           name AST Memory Allocation Support Variables
  309093             :           Memory allocations support variables 
  309094             : 
  309095             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  309096             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  309097             :           and support the AST File I/O Mechanism.
  309098             :        */
  309099             :       /* */
  309100             : 
  309101             :     public:
  309102             : 
  309103             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  309104             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  309105             :       // virtual SgNode* addRegExpAttribute();
  309106             :       /*! \brief Support for AST matching using regular expression.
  309107             : 
  309108             :           This support is incomplete and the subject of current research to define 
  309109             :           RegEx trees to support inexact matching.
  309110             :        */
  309111             :           SgCudaKernelExecConfig* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  309112             : 
  309113             : // *** COMMON CODE SECTION ENDS HERE ***
  309114             : 
  309115             : 
  309116             : // End of memberFunctionString
  309117             : // Start of memberFunctionString
  309118             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  309119             : 
  309120             :      // the generated cast function
  309121             :      // friend ROSE_DLL_API SgCudaKernelExecConfig* isSgCudaKernelExecConfig ( SgNode* s );
  309122             : 
  309123             :           typedef SgExpression base_node_type;
  309124             : 
  309125             : 
  309126             : // End of memberFunctionString
  309127             : // Start of memberFunctionString
  309128             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  309129             : 
  309130             :           SgType* get_type() const override;
  309131             : 
  309132             : 
  309133             : // End of memberFunctionString
  309134             : // Start of memberFunctionString
  309135             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  309136             : 
  309137             :           void post_construction_initialization() override;
  309138             : 
  309139             : 
  309140             : // End of memberFunctionString
  309141             : 
  309142             :      public: 
  309143             :          SgExpression* get_grid() const;
  309144             :          void set_grid(SgExpression* grid);
  309145             : 
  309146             :      public: 
  309147             :          SgExpression* get_blocks() const;
  309148             :          void set_blocks(SgExpression* blocks);
  309149             : 
  309150             :      public: 
  309151             :          SgExpression* get_shared() const;
  309152             :          void set_shared(SgExpression* shared);
  309153             : 
  309154             :      public: 
  309155             :          SgExpression* get_stream() const;
  309156             :          void set_stream(SgExpression* stream);
  309157             : 
  309158             : 
  309159             :      public: 
  309160             :          virtual ~SgCudaKernelExecConfig();
  309161             : 
  309162             : 
  309163             :      public: 
  309164             :          SgCudaKernelExecConfig(Sg_File_Info* startOfConstruct , SgExpression* grid = NULL, SgExpression* blocks = NULL, SgExpression* shared = NULL, SgExpression* stream = NULL); 
  309165             :          SgCudaKernelExecConfig(SgExpression* grid, SgExpression* blocks, SgExpression* shared, SgExpression* stream); 
  309166             : 
  309167             :     protected:
  309168             : // Start of memberFunctionString
  309169             : SgExpression* p_grid;
  309170             :           
  309171             : // End of memberFunctionString
  309172             : // Start of memberFunctionString
  309173             : SgExpression* p_blocks;
  309174             :           
  309175             : // End of memberFunctionString
  309176             : // Start of memberFunctionString
  309177             : SgExpression* p_shared;
  309178             :           
  309179             : // End of memberFunctionString
  309180             : // Start of memberFunctionString
  309181             : SgExpression* p_stream;
  309182             :           
  309183             : // End of memberFunctionString
  309184             : 
  309185             :     friend struct Rose::Traits::generated::describe_node_t<SgCudaKernelExecConfig>;
  309186             :     friend struct Rose::Traits::generated::describe_field_t<SgCudaKernelExecConfig, SgExpression*,&SgCudaKernelExecConfig::p_grid>;
  309187             :     friend struct Rose::Traits::generated::describe_field_t<SgCudaKernelExecConfig, SgExpression*,&SgCudaKernelExecConfig::p_blocks>;
  309188             :     friend struct Rose::Traits::generated::describe_field_t<SgCudaKernelExecConfig, SgExpression*,&SgCudaKernelExecConfig::p_shared>;
  309189             :     friend struct Rose::Traits::generated::describe_field_t<SgCudaKernelExecConfig, SgExpression*,&SgCudaKernelExecConfig::p_stream>;
  309190             : 
  309191             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309192             : 
  309193             : 
  309194             :    };
  309195             : #endif
  309196             : 
  309197             : // postdeclarations for SgCudaKernelExecConfig
  309198             : 
  309199             : /* #line 309200 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309200             : 
  309201             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  309202             : 
  309203             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309204             : 
  309205             : 
  309206             : /* #line 309207 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309207             : 
  309208             : 
  309209             : 
  309210             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309211             : 
  309212             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  309213             : //      This code is automatically generated for each 
  309214             : //      terminal and non-terminal within the defined 
  309215             : //      grammar.  There is a simple way to change the 
  309216             : //      code to fix bugs etc.  See the ROSE README file
  309217             : //      for directions.
  309218             : 
  309219             : // tps: (02/22/2010): Adding DLL export requirements
  309220             : #include "rosedll.h"
  309221             : 
  309222             : // predeclarations for SgLambdaRefExp
  309223             : 
  309224             : /* #line 309225 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309225             : 
  309226             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  309227             : 
  309228             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309229             : 
  309230             : #if 1
  309231             : // Class Definition for SgLambdaRefExp
  309232             : class ROSE_DLL_API SgLambdaRefExp  : public SgExpression
  309233             :    {
  309234             :      public:
  309235             : 
  309236             : 
  309237             : /* #line 309238 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309238             : 
  309239             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  309240             : // Start of memberFunctionString
  309241             : /* #line 1886 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  309242             : 
  309243             : 
  309244             :     SgFunctionParameterList* get_parameterList();
  309245             :     SgStatement* get_body();
  309246             : 
  309247             : 
  309248             : 
  309249             : // End of memberFunctionString
  309250             : // Start of memberFunctionString
  309251             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  309252             : 
  309253             : // *** COMMON CODE SECTION BEGINS HERE ***
  309254             : 
  309255             :     public:
  309256             : 
  309257             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  309258             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  309259             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  309260             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  309261             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  309262             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  309263             : 
  309264             :       /*! \brief returns a string representing the class name */
  309265             :           virtual std::string class_name() const override;
  309266             : 
  309267             :       /*! \brief returns new style SageIII enum values */
  309268             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  309269             : 
  309270             :       /*! \brief static variant value */
  309271             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  309272             :        // static const VariantT static_variant = V_SgLambdaRefExp;
  309273             :           enum { static_variant = V_SgLambdaRefExp };
  309274             : 
  309275             :        /* the generated cast function */
  309276             :       /*! \brief Casts pointer from base class to derived class */
  309277             :           ROSE_DLL_API friend       SgLambdaRefExp* isSgLambdaRefExp(       SgNode * s );
  309278             : 
  309279             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  309280             :           ROSE_DLL_API friend const SgLambdaRefExp* isSgLambdaRefExp( const SgNode * s );
  309281             : 
  309282             :      // ******************************************
  309283             :      // * Memory Pool / New / Delete
  309284             :      // ******************************************
  309285             : 
  309286             :      public:
  309287             :           /// \private
  309288             :           static const unsigned pool_size; //
  309289             :           /// \private
  309290             :           static std::vector<unsigned char *> pools; //
  309291             :           /// \private
  309292             :           static SgLambdaRefExp * next_node; // 
  309293             : 
  309294             :           /// \private
  309295             :           static unsigned long initializeStorageClassArray(SgLambdaRefExpStorageClass *); //
  309296             : 
  309297             :           /// \private
  309298             :           static void clearMemoryPool(); //
  309299             :           static void deleteMemoryPool(); //
  309300             : 
  309301             :           /// \private
  309302             :           static void extendMemoryPoolForFileIO(); //
  309303             : 
  309304             :           /// \private
  309305             :           static SgLambdaRefExp * getPointerFromGlobalIndex(unsigned long); //
  309306             :           /// \private
  309307             :           static SgLambdaRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  309308             : 
  309309             :           /// \private
  309310             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  309311             :           /// \private
  309312             :           static void resetValidFreepointers(); //
  309313             :           /// \private
  309314             :           static unsigned long getNumberOfLastValidPointer(); //
  309315             : 
  309316             : 
  309317             : #if defined(INLINE_FUNCTIONS)
  309318             :       /*! \brief returns pointer to newly allocated IR node */
  309319             :           inline void *operator new (size_t size);
  309320             : #else
  309321             :       /*! \brief returns pointer to newly allocated IR node */
  309322             :           void *operator new (size_t size);
  309323             : #endif
  309324             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  309325             :           void operator delete (void* pointer, size_t size);
  309326             : 
  309327             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  309328           0 :           void operator delete (void* pointer)
  309329             :              {
  309330             :             // This is the generated delete operator...
  309331           0 :                SgLambdaRefExp::operator delete (pointer,sizeof(SgLambdaRefExp));
  309332             :              }
  309333             : 
  309334             :       /*! \brief Returns the total number of IR nodes of this type */
  309335             :           static size_t numberOfNodes();
  309336             : 
  309337             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  309338             :           static size_t memoryUsage();
  309339             : 
  309340             :       // End of scope which started in IR nodes specific code 
  309341             :       /* */
  309342             : 
  309343             :       /* name Internal Functions
  309344             :           \brief Internal functions ... incomplete-documentation
  309345             : 
  309346             :           These functions have been made public as part of the design, but they are suggested for internal use 
  309347             :           or by particularly knowledgeable users for specialized tools or applications.
  309348             : 
  309349             :           \internal We could not make these private because they are required by user for special purposes. And 
  309350             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  309351             :          
  309352             :        */
  309353             : 
  309354             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  309355             :        // overridden in every class by *generated* implementation
  309356             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  309357             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  309358             :        // MS: 06/28/02 container of names of variables or container indices 
  309359             :        // used used in the traversal to access AST successor nodes
  309360             :        // overridden in every class by *generated* implementation
  309361             :       /*! \brief container of names of variables or container indices used used in the traversal
  309362             :           to access AST successor nodes overridden in every class by *generated* implementation */
  309363             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  309364             : 
  309365             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  309366             :        // than all the vector copies. The implementation for these functions is generated for each class.
  309367             :       /*! \brief return number of children in the traversal successor list */
  309368             :           virtual size_t get_numberOfTraversalSuccessors() override;
  309369             :       /*! \brief index-based access to traversal successors by index number */
  309370             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  309371             :       /*! \brief index-based access to traversal successors by child node */
  309372             :           virtual size_t get_childIndex(SgNode *child) override;
  309373             : 
  309374             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  309375             :        // MS: 08/16/2002 method for generating RTI information
  309376             :       /*! \brief return C++ Runtime-Time-Information */
  309377             :           virtual RTIReturnType roseRTI() override;
  309378             : #endif
  309379             :       /* */
  309380             : 
  309381             : 
  309382             : 
  309383             :       /* name Deprecated Functions
  309384             :           \brief Deprecated functions ... incomplete-documentation
  309385             : 
  309386             :           These functions have been deprecated from use.
  309387             :        */
  309388             :       /* */
  309389             : 
  309390             :       /*! returns a C style string (char*) representing the class name */
  309391             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  309392             : 
  309393             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  309394             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  309395             : #if 0
  309396             :       /*! returns old style Sage II enum values */
  309397             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  309398             :       /*! returns old style Sage II enum values */
  309399             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  309400             : #endif
  309401             :       /* */
  309402             : 
  309403             : 
  309404             : 
  309405             : 
  309406             :      public:
  309407             :       /* name Traversal Support Functions
  309408             :           \brief Traversal support functions ... incomplete-documentation
  309409             : 
  309410             :           These functions have been made public as part of the design, but they are suggested for internal use 
  309411             :           or by particularly knowledgable users for specialized tools or applications.
  309412             :        */
  309413             :       /* */
  309414             : 
  309415             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  309416             :        // (inferior to ROSE traversal mechanism, experimental).
  309417             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  309418             :        */
  309419             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  309420             : 
  309421             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  309422             :       /*! \brief support for the classic visitor pattern done in GoF */
  309423             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  309424             : 
  309425             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  309426             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  309427             :        */
  309428             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  309429             : 
  309430             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  309431             :        */
  309432             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  309433             : 
  309434             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  309435             :        // This traversal helps support internal tools that call static member functions.
  309436             :        // note: this function operates on the memory pools.
  309437             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  309438             :        */
  309439             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  309440             :       /* */
  309441             : 
  309442             : 
  309443             :      public:
  309444             :       /* name Memory Allocation Functions
  309445             :           \brief Memory allocations functions ... incomplete-documentation
  309446             : 
  309447             :           These functions have been made public as part of the design, but they are suggested for internal use 
  309448             :           or by particularly knowledgable users for specialized tools or applications.
  309449             :        */
  309450             :       /* */
  309451             : 
  309452             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  309453             : 
  309454             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  309455             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  309456             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  309457             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  309458             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  309459             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  309460             :           being used with the AST File I/O mechanism.
  309461             :        */
  309462             :           virtual bool isInMemoryPool() override;
  309463             : 
  309464             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  309465             : 
  309466             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  309467             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  309468             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  309469             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  309470             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  309471             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  309472             :           being used with the AST File I/O mechanism.
  309473             :        */
  309474             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  309475             : 
  309476             :       // DQ (4/30/2006): Modified to be a const function.
  309477             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  309478             : 
  309479             :           This functions is part of general support for many possible tools to operate 
  309480             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  309481             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  309482             :           less than the set of pointers used by the AST file I/O. This is part of
  309483             :           work implemented by Andreas, and support tools such as the AST graph generation.
  309484             : 
  309485             :           \warning This function can return unexpected data members and thus the 
  309486             :                    order and the number of elements is unpredicable and subject 
  309487             :                    to change.
  309488             : 
  309489             :           \returns STL vector of pairs of SgNode* and strings
  309490             :        */
  309491             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  309492             : 
  309493             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  309494             : 
  309495             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  309496             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  309497             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  309498             : 
  309499             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  309500             :                    and subject to change.
  309501             :        */
  309502             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  309503             : 
  309504             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  309505             : 
  309506             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  309507             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  309508             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  309509             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  309510             : 
  309511             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  309512             : 
  309513             :           \returns long
  309514             :        */
  309515             :           virtual long getChildIndex( SgNode* childNode ) const override;
  309516             : 
  309517             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  309518             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  309519             :       /* \brief Constructor for use by AST File I/O Mechanism
  309520             : 
  309521             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  309522             :           which obtained via fast binary file I/O from disk.
  309523             :        */
  309524             :        // SgLambdaRefExp( SgLambdaRefExpStorageClass& source );
  309525             : 
  309526             : 
  309527             : 
  309528             : 
  309529             : 
  309530             :  // JH (10/24/2005): methods added to support the ast file IO
  309531             :     private:
  309532             : 
  309533             :       /* name AST Memory Allocation Support Functions
  309534             :           \brief Memory allocations support....
  309535             : 
  309536             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  309537             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  309538             :           and support the AST File I/O Mechanism.
  309539             :        */
  309540             :       /* */
  309541             : 
  309542             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  309543             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  309544             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  309545             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  309546             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  309547             :           a correspinding one in the AST_FILE_IO class!
  309548             :        */
  309549             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  309550             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  309551             :       /* \brief Typedef used for low level memory access.
  309552             :        */
  309553             :        // typedef unsigned char* TestType;
  309554             : 
  309555             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  309556             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  309557             :       /* \brief Typedef used to hold memory addresses as values.
  309558             :        */
  309559             :        // typedef unsigned long  AddressType;
  309560             : 
  309561             : 
  309562             : 
  309563             :        // necessary, to have direct access to the p_freepointer and the private methods !
  309564             :       /*! \brief friend class declaration to support AST File I/O */
  309565             :           friend class AST_FILE_IO;
  309566             : 
  309567             :       /*! \brief friend class declaration to support AST File I/O */
  309568             :           friend class SgLambdaRefExpStorageClass;
  309569             : 
  309570             :       /*! \brief friend class declaration to support AST File I/O */
  309571             :           friend class AstSpecificDataManagingClass;
  309572             : 
  309573             :       /*! \brief friend class declaration to support AST File I/O */
  309574             :           friend class AstSpecificDataManagingClassStorageClass;
  309575             :     public:
  309576             :       /*! \brief IR node constructor to support AST File I/O */
  309577             :           SgLambdaRefExp( const SgLambdaRefExpStorageClass& source );
  309578             : 
  309579             :  // private: // JJW hack
  309580             :        /*
  309581             :           name AST Memory Allocation Support Variables
  309582             :           Memory allocations support variables 
  309583             : 
  309584             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  309585             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  309586             :           and support the AST File I/O Mechanism.
  309587             :        */
  309588             :       /* */
  309589             : 
  309590             :     public:
  309591             : 
  309592             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  309593             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  309594             :       // virtual SgNode* addRegExpAttribute();
  309595             :       /*! \brief Support for AST matching using regular expression.
  309596             : 
  309597             :           This support is incomplete and the subject of current research to define 
  309598             :           RegEx trees to support inexact matching.
  309599             :        */
  309600             :           SgLambdaRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  309601             : 
  309602             : // *** COMMON CODE SECTION ENDS HERE ***
  309603             : 
  309604             : 
  309605             : // End of memberFunctionString
  309606             : // Start of memberFunctionString
  309607             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  309608             : 
  309609             :      // the generated cast function
  309610             :      // friend ROSE_DLL_API SgLambdaRefExp* isSgLambdaRefExp ( SgNode* s );
  309611             : 
  309612             :           typedef SgExpression base_node_type;
  309613             : 
  309614             : 
  309615             : // End of memberFunctionString
  309616             : // Start of memberFunctionString
  309617             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  309618             : 
  309619             :           SgType* get_type() const override;
  309620             : 
  309621             : 
  309622             : // End of memberFunctionString
  309623             : // Start of memberFunctionString
  309624             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  309625             : 
  309626             :           void post_construction_initialization() override;
  309627             : 
  309628             : 
  309629             : // End of memberFunctionString
  309630             : 
  309631             :      public: 
  309632             :          SgFunctionDeclaration* get_functionDeclaration() const;
  309633             :          void set_functionDeclaration(SgFunctionDeclaration* functionDeclaration);
  309634             : 
  309635             : 
  309636             :      public: 
  309637             :          virtual ~SgLambdaRefExp();
  309638             : 
  309639             : 
  309640             :      public: 
  309641             :          SgLambdaRefExp(Sg_File_Info* startOfConstruct , SgFunctionDeclaration* functionDeclaration = NULL); 
  309642             :          SgLambdaRefExp(SgFunctionDeclaration* functionDeclaration); 
  309643             : 
  309644             :     protected:
  309645             : // Start of memberFunctionString
  309646             : SgFunctionDeclaration* p_functionDeclaration;
  309647             :           
  309648             : // End of memberFunctionString
  309649             : 
  309650             :     friend struct Rose::Traits::generated::describe_node_t<SgLambdaRefExp>;
  309651             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaRefExp, SgFunctionDeclaration*,&SgLambdaRefExp::p_functionDeclaration>;
  309652             : 
  309653             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309654             : 
  309655             : 
  309656             :    };
  309657             : #endif
  309658             : 
  309659             : // postdeclarations for SgLambdaRefExp
  309660             : 
  309661             : /* #line 309662 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309662             : 
  309663             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  309664             : 
  309665             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309666             : 
  309667             : 
  309668             : /* #line 309669 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309669             : 
  309670             : 
  309671             : 
  309672             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309673             : 
  309674             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  309675             : //      This code is automatically generated for each 
  309676             : //      terminal and non-terminal within the defined 
  309677             : //      grammar.  There is a simple way to change the 
  309678             : //      code to fix bugs etc.  See the ROSE README file
  309679             : //      for directions.
  309680             : 
  309681             : // tps: (02/22/2010): Adding DLL export requirements
  309682             : #include "rosedll.h"
  309683             : 
  309684             : // predeclarations for SgDictionaryExp
  309685             : 
  309686             : /* #line 309687 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309687             : 
  309688             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  309689             : 
  309690             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  309691             : 
  309692             : #if 1
  309693             : // Class Definition for SgDictionaryExp
  309694             : class ROSE_DLL_API SgDictionaryExp  : public SgExpression
  309695             :    {
  309696             :      public:
  309697             : 
  309698             : 
  309699             : /* #line 309700 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  309700             : 
  309701             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  309702             : // Start of memberFunctionString
  309703             : /* #line 1388 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  309704             : 
  309705             : SgKeyDatumPairPtrList& get_key_datum_pairs();
  309706             : const SgKeyDatumPairPtrList& get_key_datum_pairs() const;
  309707             : void append_pair(SgKeyDatumPair *what);
  309708             : 
  309709             : 
  309710             : // End of memberFunctionString
  309711             : // Start of memberFunctionString
  309712             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  309713             : 
  309714             : // *** COMMON CODE SECTION BEGINS HERE ***
  309715             : 
  309716             :     public:
  309717             : 
  309718             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  309719             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  309720             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  309721             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  309722             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  309723             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  309724             : 
  309725             :       /*! \brief returns a string representing the class name */
  309726             :           virtual std::string class_name() const override;
  309727             : 
  309728             :       /*! \brief returns new style SageIII enum values */
  309729             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  309730             : 
  309731             :       /*! \brief static variant value */
  309732             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  309733             :        // static const VariantT static_variant = V_SgDictionaryExp;
  309734             :           enum { static_variant = V_SgDictionaryExp };
  309735             : 
  309736             :        /* the generated cast function */
  309737             :       /*! \brief Casts pointer from base class to derived class */
  309738             :           ROSE_DLL_API friend       SgDictionaryExp* isSgDictionaryExp(       SgNode * s );
  309739             : 
  309740             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  309741             :           ROSE_DLL_API friend const SgDictionaryExp* isSgDictionaryExp( const SgNode * s );
  309742             : 
  309743             :      // ******************************************
  309744             :      // * Memory Pool / New / Delete
  309745             :      // ******************************************
  309746             : 
  309747             :      public:
  309748             :           /// \private
  309749             :           static const unsigned pool_size; //
  309750             :           /// \private
  309751             :           static std::vector<unsigned char *> pools; //
  309752             :           /// \private
  309753             :           static SgDictionaryExp * next_node; // 
  309754             : 
  309755             :           /// \private
  309756             :           static unsigned long initializeStorageClassArray(SgDictionaryExpStorageClass *); //
  309757             : 
  309758             :           /// \private
  309759             :           static void clearMemoryPool(); //
  309760             :           static void deleteMemoryPool(); //
  309761             : 
  309762             :           /// \private
  309763             :           static void extendMemoryPoolForFileIO(); //
  309764             : 
  309765             :           /// \private
  309766             :           static SgDictionaryExp * getPointerFromGlobalIndex(unsigned long); //
  309767             :           /// \private
  309768             :           static SgDictionaryExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  309769             : 
  309770             :           /// \private
  309771             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  309772             :           /// \private
  309773             :           static void resetValidFreepointers(); //
  309774             :           /// \private
  309775             :           static unsigned long getNumberOfLastValidPointer(); //
  309776             : 
  309777             : 
  309778             : #if defined(INLINE_FUNCTIONS)
  309779             :       /*! \brief returns pointer to newly allocated IR node */
  309780             :           inline void *operator new (size_t size);
  309781             : #else
  309782             :       /*! \brief returns pointer to newly allocated IR node */
  309783             :           void *operator new (size_t size);
  309784             : #endif
  309785             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  309786             :           void operator delete (void* pointer, size_t size);
  309787             : 
  309788             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  309789           0 :           void operator delete (void* pointer)
  309790             :              {
  309791             :             // This is the generated delete operator...
  309792           0 :                SgDictionaryExp::operator delete (pointer,sizeof(SgDictionaryExp));
  309793             :              }
  309794             : 
  309795             :       /*! \brief Returns the total number of IR nodes of this type */
  309796             :           static size_t numberOfNodes();
  309797             : 
  309798             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  309799             :           static size_t memoryUsage();
  309800             : 
  309801             :       // End of scope which started in IR nodes specific code 
  309802             :       /* */
  309803             : 
  309804             :       /* name Internal Functions
  309805             :           \brief Internal functions ... incomplete-documentation
  309806             : 
  309807             :           These functions have been made public as part of the design, but they are suggested for internal use 
  309808             :           or by particularly knowledgeable users for specialized tools or applications.
  309809             : 
  309810             :           \internal We could not make these private because they are required by user for special purposes. And 
  309811             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  309812             :          
  309813             :        */
  309814             : 
  309815             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  309816             :        // overridden in every class by *generated* implementation
  309817             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  309818             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  309819             :        // MS: 06/28/02 container of names of variables or container indices 
  309820             :        // used used in the traversal to access AST successor nodes
  309821             :        // overridden in every class by *generated* implementation
  309822             :       /*! \brief container of names of variables or container indices used used in the traversal
  309823             :           to access AST successor nodes overridden in every class by *generated* implementation */
  309824             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  309825             : 
  309826             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  309827             :        // than all the vector copies. The implementation for these functions is generated for each class.
  309828             :       /*! \brief return number of children in the traversal successor list */
  309829             :           virtual size_t get_numberOfTraversalSuccessors() override;
  309830             :       /*! \brief index-based access to traversal successors by index number */
  309831             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  309832             :       /*! \brief index-based access to traversal successors by child node */
  309833             :           virtual size_t get_childIndex(SgNode *child) override;
  309834             : 
  309835             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  309836             :        // MS: 08/16/2002 method for generating RTI information
  309837             :       /*! \brief return C++ Runtime-Time-Information */
  309838             :           virtual RTIReturnType roseRTI() override;
  309839             : #endif
  309840             :       /* */
  309841             : 
  309842             : 
  309843             : 
  309844             :       /* name Deprecated Functions
  309845             :           \brief Deprecated functions ... incomplete-documentation
  309846             : 
  309847             :           These functions have been deprecated from use.
  309848             :        */
  309849             :       /* */
  309850             : 
  309851             :       /*! returns a C style string (char*) representing the class name */
  309852             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  309853             : 
  309854             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  309855             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  309856             : #if 0
  309857             :       /*! returns old style Sage II enum values */
  309858             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  309859             :       /*! returns old style Sage II enum values */
  309860             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  309861             : #endif
  309862             :       /* */
  309863             : 
  309864             : 
  309865             : 
  309866             : 
  309867             :      public:
  309868             :       /* name Traversal Support Functions
  309869             :           \brief Traversal support functions ... incomplete-documentation
  309870             : 
  309871             :           These functions have been made public as part of the design, but they are suggested for internal use 
  309872             :           or by particularly knowledgable users for specialized tools or applications.
  309873             :        */
  309874             :       /* */
  309875             : 
  309876             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  309877             :        // (inferior to ROSE traversal mechanism, experimental).
  309878             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  309879             :        */
  309880             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  309881             : 
  309882             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  309883             :       /*! \brief support for the classic visitor pattern done in GoF */
  309884             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  309885             : 
  309886             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  309887             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  309888             :        */
  309889             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  309890             : 
  309891             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  309892             :        */
  309893             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  309894             : 
  309895             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  309896             :        // This traversal helps support internal tools that call static member functions.
  309897             :        // note: this function operates on the memory pools.
  309898             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  309899             :        */
  309900             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  309901             :       /* */
  309902             : 
  309903             : 
  309904             :      public:
  309905             :       /* name Memory Allocation Functions
  309906             :           \brief Memory allocations functions ... incomplete-documentation
  309907             : 
  309908             :           These functions have been made public as part of the design, but they are suggested for internal use 
  309909             :           or by particularly knowledgable users for specialized tools or applications.
  309910             :        */
  309911             :       /* */
  309912             : 
  309913             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  309914             : 
  309915             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  309916             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  309917             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  309918             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  309919             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  309920             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  309921             :           being used with the AST File I/O mechanism.
  309922             :        */
  309923             :           virtual bool isInMemoryPool() override;
  309924             : 
  309925             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  309926             : 
  309927             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  309928             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  309929             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  309930             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  309931             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  309932             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  309933             :           being used with the AST File I/O mechanism.
  309934             :        */
  309935             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  309936             : 
  309937             :       // DQ (4/30/2006): Modified to be a const function.
  309938             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  309939             : 
  309940             :           This functions is part of general support for many possible tools to operate 
  309941             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  309942             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  309943             :           less than the set of pointers used by the AST file I/O. This is part of
  309944             :           work implemented by Andreas, and support tools such as the AST graph generation.
  309945             : 
  309946             :           \warning This function can return unexpected data members and thus the 
  309947             :                    order and the number of elements is unpredicable and subject 
  309948             :                    to change.
  309949             : 
  309950             :           \returns STL vector of pairs of SgNode* and strings
  309951             :        */
  309952             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  309953             : 
  309954             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  309955             : 
  309956             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  309957             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  309958             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  309959             : 
  309960             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  309961             :                    and subject to change.
  309962             :        */
  309963             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  309964             : 
  309965             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  309966             : 
  309967             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  309968             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  309969             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  309970             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  309971             : 
  309972             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  309973             : 
  309974             :           \returns long
  309975             :        */
  309976             :           virtual long getChildIndex( SgNode* childNode ) const override;
  309977             : 
  309978             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  309979             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  309980             :       /* \brief Constructor for use by AST File I/O Mechanism
  309981             : 
  309982             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  309983             :           which obtained via fast binary file I/O from disk.
  309984             :        */
  309985             :        // SgDictionaryExp( SgDictionaryExpStorageClass& source );
  309986             : 
  309987             : 
  309988             : 
  309989             : 
  309990             : 
  309991             :  // JH (10/24/2005): methods added to support the ast file IO
  309992             :     private:
  309993             : 
  309994             :       /* name AST Memory Allocation Support Functions
  309995             :           \brief Memory allocations support....
  309996             : 
  309997             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  309998             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  309999             :           and support the AST File I/O Mechanism.
  310000             :        */
  310001             :       /* */
  310002             : 
  310003             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  310004             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  310005             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  310006             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  310007             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  310008             :           a correspinding one in the AST_FILE_IO class!
  310009             :        */
  310010             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  310011             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310012             :       /* \brief Typedef used for low level memory access.
  310013             :        */
  310014             :        // typedef unsigned char* TestType;
  310015             : 
  310016             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  310017             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310018             :       /* \brief Typedef used to hold memory addresses as values.
  310019             :        */
  310020             :        // typedef unsigned long  AddressType;
  310021             : 
  310022             : 
  310023             : 
  310024             :        // necessary, to have direct access to the p_freepointer and the private methods !
  310025             :       /*! \brief friend class declaration to support AST File I/O */
  310026             :           friend class AST_FILE_IO;
  310027             : 
  310028             :       /*! \brief friend class declaration to support AST File I/O */
  310029             :           friend class SgDictionaryExpStorageClass;
  310030             : 
  310031             :       /*! \brief friend class declaration to support AST File I/O */
  310032             :           friend class AstSpecificDataManagingClass;
  310033             : 
  310034             :       /*! \brief friend class declaration to support AST File I/O */
  310035             :           friend class AstSpecificDataManagingClassStorageClass;
  310036             :     public:
  310037             :       /*! \brief IR node constructor to support AST File I/O */
  310038             :           SgDictionaryExp( const SgDictionaryExpStorageClass& source );
  310039             : 
  310040             :  // private: // JJW hack
  310041             :        /*
  310042             :           name AST Memory Allocation Support Variables
  310043             :           Memory allocations support variables 
  310044             : 
  310045             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  310046             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  310047             :           and support the AST File I/O Mechanism.
  310048             :        */
  310049             :       /* */
  310050             : 
  310051             :     public:
  310052             : 
  310053             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  310054             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  310055             :       // virtual SgNode* addRegExpAttribute();
  310056             :       /*! \brief Support for AST matching using regular expression.
  310057             : 
  310058             :           This support is incomplete and the subject of current research to define 
  310059             :           RegEx trees to support inexact matching.
  310060             :        */
  310061             :           SgDictionaryExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  310062             : 
  310063             : // *** COMMON CODE SECTION ENDS HERE ***
  310064             : 
  310065             : 
  310066             : // End of memberFunctionString
  310067             : // Start of memberFunctionString
  310068             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  310069             : 
  310070             :      // the generated cast function
  310071             :      // friend ROSE_DLL_API SgDictionaryExp* isSgDictionaryExp ( SgNode* s );
  310072             : 
  310073             :           typedef SgExpression base_node_type;
  310074             : 
  310075             : 
  310076             : // End of memberFunctionString
  310077             : // Start of memberFunctionString
  310078             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  310079             : 
  310080             :           SgType* get_type() const override;
  310081             : 
  310082             : 
  310083             : // End of memberFunctionString
  310084             : // Start of memberFunctionString
  310085             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  310086             : 
  310087             :           void post_construction_initialization() override;
  310088             : 
  310089             : 
  310090             : // End of memberFunctionString
  310091             : 
  310092             : 
  310093             : 
  310094             :      public: 
  310095             :          virtual ~SgDictionaryExp();
  310096             : 
  310097             : 
  310098             :      public: 
  310099             :          SgDictionaryExp(Sg_File_Info* startOfConstruct ); 
  310100             :          SgDictionaryExp(); 
  310101             : 
  310102             :     protected:
  310103             : // Start of memberFunctionString
  310104             : SgKeyDatumPairPtrList p_key_datum_pairs;
  310105             :           
  310106             : // End of memberFunctionString
  310107             : 
  310108             :     friend struct Rose::Traits::generated::describe_node_t<SgDictionaryExp>;
  310109             :     friend struct Rose::Traits::generated::describe_field_t<SgDictionaryExp, SgKeyDatumPairPtrList,&SgDictionaryExp::p_key_datum_pairs>;
  310110             : 
  310111             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310112             : 
  310113             : 
  310114             :    };
  310115             : #endif
  310116             : 
  310117             : // postdeclarations for SgDictionaryExp
  310118             : 
  310119             : /* #line 310120 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310120             : 
  310121             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  310122             : 
  310123             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310124             : 
  310125             : 
  310126             : /* #line 310127 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310127             : 
  310128             : 
  310129             : 
  310130             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310131             : 
  310132             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  310133             : //      This code is automatically generated for each 
  310134             : //      terminal and non-terminal within the defined 
  310135             : //      grammar.  There is a simple way to change the 
  310136             : //      code to fix bugs etc.  See the ROSE README file
  310137             : //      for directions.
  310138             : 
  310139             : // tps: (02/22/2010): Adding DLL export requirements
  310140             : #include "rosedll.h"
  310141             : 
  310142             : // predeclarations for SgKeyDatumPair
  310143             : 
  310144             : /* #line 310145 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310145             : 
  310146             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  310147             : 
  310148             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310149             : 
  310150             : #if 1
  310151             : // Class Definition for SgKeyDatumPair
  310152             : class ROSE_DLL_API SgKeyDatumPair  : public SgExpression
  310153             :    {
  310154             :      public:
  310155             : 
  310156             : 
  310157             : /* #line 310158 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310158             : 
  310159             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  310160             : // Start of memberFunctionString
  310161             : /* #line 1394 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  310162             : 
  310163             : 
  310164             : 
  310165             : // End of memberFunctionString
  310166             : // Start of memberFunctionString
  310167             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  310168             : 
  310169             : // *** COMMON CODE SECTION BEGINS HERE ***
  310170             : 
  310171             :     public:
  310172             : 
  310173             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  310174             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  310175             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  310176             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  310177             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  310178             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  310179             : 
  310180             :       /*! \brief returns a string representing the class name */
  310181             :           virtual std::string class_name() const override;
  310182             : 
  310183             :       /*! \brief returns new style SageIII enum values */
  310184             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  310185             : 
  310186             :       /*! \brief static variant value */
  310187             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  310188             :        // static const VariantT static_variant = V_SgKeyDatumPair;
  310189             :           enum { static_variant = V_SgKeyDatumPair };
  310190             : 
  310191             :        /* the generated cast function */
  310192             :       /*! \brief Casts pointer from base class to derived class */
  310193             :           ROSE_DLL_API friend       SgKeyDatumPair* isSgKeyDatumPair(       SgNode * s );
  310194             : 
  310195             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  310196             :           ROSE_DLL_API friend const SgKeyDatumPair* isSgKeyDatumPair( const SgNode * s );
  310197             : 
  310198             :      // ******************************************
  310199             :      // * Memory Pool / New / Delete
  310200             :      // ******************************************
  310201             : 
  310202             :      public:
  310203             :           /// \private
  310204             :           static const unsigned pool_size; //
  310205             :           /// \private
  310206             :           static std::vector<unsigned char *> pools; //
  310207             :           /// \private
  310208             :           static SgKeyDatumPair * next_node; // 
  310209             : 
  310210             :           /// \private
  310211             :           static unsigned long initializeStorageClassArray(SgKeyDatumPairStorageClass *); //
  310212             : 
  310213             :           /// \private
  310214             :           static void clearMemoryPool(); //
  310215             :           static void deleteMemoryPool(); //
  310216             : 
  310217             :           /// \private
  310218             :           static void extendMemoryPoolForFileIO(); //
  310219             : 
  310220             :           /// \private
  310221             :           static SgKeyDatumPair * getPointerFromGlobalIndex(unsigned long); //
  310222             :           /// \private
  310223             :           static SgKeyDatumPair * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  310224             : 
  310225             :           /// \private
  310226             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  310227             :           /// \private
  310228             :           static void resetValidFreepointers(); //
  310229             :           /// \private
  310230             :           static unsigned long getNumberOfLastValidPointer(); //
  310231             : 
  310232             : 
  310233             : #if defined(INLINE_FUNCTIONS)
  310234             :       /*! \brief returns pointer to newly allocated IR node */
  310235             :           inline void *operator new (size_t size);
  310236             : #else
  310237             :       /*! \brief returns pointer to newly allocated IR node */
  310238             :           void *operator new (size_t size);
  310239             : #endif
  310240             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  310241             :           void operator delete (void* pointer, size_t size);
  310242             : 
  310243             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  310244           0 :           void operator delete (void* pointer)
  310245             :              {
  310246             :             // This is the generated delete operator...
  310247           0 :                SgKeyDatumPair::operator delete (pointer,sizeof(SgKeyDatumPair));
  310248             :              }
  310249             : 
  310250             :       /*! \brief Returns the total number of IR nodes of this type */
  310251             :           static size_t numberOfNodes();
  310252             : 
  310253             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  310254             :           static size_t memoryUsage();
  310255             : 
  310256             :       // End of scope which started in IR nodes specific code 
  310257             :       /* */
  310258             : 
  310259             :       /* name Internal Functions
  310260             :           \brief Internal functions ... incomplete-documentation
  310261             : 
  310262             :           These functions have been made public as part of the design, but they are suggested for internal use 
  310263             :           or by particularly knowledgeable users for specialized tools or applications.
  310264             : 
  310265             :           \internal We could not make these private because they are required by user for special purposes. And 
  310266             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  310267             :          
  310268             :        */
  310269             : 
  310270             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  310271             :        // overridden in every class by *generated* implementation
  310272             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  310273             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  310274             :        // MS: 06/28/02 container of names of variables or container indices 
  310275             :        // used used in the traversal to access AST successor nodes
  310276             :        // overridden in every class by *generated* implementation
  310277             :       /*! \brief container of names of variables or container indices used used in the traversal
  310278             :           to access AST successor nodes overridden in every class by *generated* implementation */
  310279             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  310280             : 
  310281             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  310282             :        // than all the vector copies. The implementation for these functions is generated for each class.
  310283             :       /*! \brief return number of children in the traversal successor list */
  310284             :           virtual size_t get_numberOfTraversalSuccessors() override;
  310285             :       /*! \brief index-based access to traversal successors by index number */
  310286             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  310287             :       /*! \brief index-based access to traversal successors by child node */
  310288             :           virtual size_t get_childIndex(SgNode *child) override;
  310289             : 
  310290             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  310291             :        // MS: 08/16/2002 method for generating RTI information
  310292             :       /*! \brief return C++ Runtime-Time-Information */
  310293             :           virtual RTIReturnType roseRTI() override;
  310294             : #endif
  310295             :       /* */
  310296             : 
  310297             : 
  310298             : 
  310299             :       /* name Deprecated Functions
  310300             :           \brief Deprecated functions ... incomplete-documentation
  310301             : 
  310302             :           These functions have been deprecated from use.
  310303             :        */
  310304             :       /* */
  310305             : 
  310306             :       /*! returns a C style string (char*) representing the class name */
  310307             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  310308             : 
  310309             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  310310             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  310311             : #if 0
  310312             :       /*! returns old style Sage II enum values */
  310313             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  310314             :       /*! returns old style Sage II enum values */
  310315             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  310316             : #endif
  310317             :       /* */
  310318             : 
  310319             : 
  310320             : 
  310321             : 
  310322             :      public:
  310323             :       /* name Traversal Support Functions
  310324             :           \brief Traversal support functions ... incomplete-documentation
  310325             : 
  310326             :           These functions have been made public as part of the design, but they are suggested for internal use 
  310327             :           or by particularly knowledgable users for specialized tools or applications.
  310328             :        */
  310329             :       /* */
  310330             : 
  310331             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  310332             :        // (inferior to ROSE traversal mechanism, experimental).
  310333             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  310334             :        */
  310335             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  310336             : 
  310337             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  310338             :       /*! \brief support for the classic visitor pattern done in GoF */
  310339             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  310340             : 
  310341             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  310342             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  310343             :        */
  310344             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  310345             : 
  310346             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  310347             :        */
  310348             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  310349             : 
  310350             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  310351             :        // This traversal helps support internal tools that call static member functions.
  310352             :        // note: this function operates on the memory pools.
  310353             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  310354             :        */
  310355             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  310356             :       /* */
  310357             : 
  310358             : 
  310359             :      public:
  310360             :       /* name Memory Allocation Functions
  310361             :           \brief Memory allocations functions ... incomplete-documentation
  310362             : 
  310363             :           These functions have been made public as part of the design, but they are suggested for internal use 
  310364             :           or by particularly knowledgable users for specialized tools or applications.
  310365             :        */
  310366             :       /* */
  310367             : 
  310368             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  310369             : 
  310370             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  310371             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  310372             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  310373             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  310374             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  310375             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  310376             :           being used with the AST File I/O mechanism.
  310377             :        */
  310378             :           virtual bool isInMemoryPool() override;
  310379             : 
  310380             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  310381             : 
  310382             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  310383             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  310384             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  310385             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  310386             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  310387             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  310388             :           being used with the AST File I/O mechanism.
  310389             :        */
  310390             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  310391             : 
  310392             :       // DQ (4/30/2006): Modified to be a const function.
  310393             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  310394             : 
  310395             :           This functions is part of general support for many possible tools to operate 
  310396             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  310397             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  310398             :           less than the set of pointers used by the AST file I/O. This is part of
  310399             :           work implemented by Andreas, and support tools such as the AST graph generation.
  310400             : 
  310401             :           \warning This function can return unexpected data members and thus the 
  310402             :                    order and the number of elements is unpredicable and subject 
  310403             :                    to change.
  310404             : 
  310405             :           \returns STL vector of pairs of SgNode* and strings
  310406             :        */
  310407             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  310408             : 
  310409             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  310410             : 
  310411             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  310412             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  310413             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  310414             : 
  310415             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  310416             :                    and subject to change.
  310417             :        */
  310418             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  310419             : 
  310420             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  310421             : 
  310422             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  310423             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  310424             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  310425             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  310426             : 
  310427             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  310428             : 
  310429             :           \returns long
  310430             :        */
  310431             :           virtual long getChildIndex( SgNode* childNode ) const override;
  310432             : 
  310433             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  310434             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310435             :       /* \brief Constructor for use by AST File I/O Mechanism
  310436             : 
  310437             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  310438             :           which obtained via fast binary file I/O from disk.
  310439             :        */
  310440             :        // SgKeyDatumPair( SgKeyDatumPairStorageClass& source );
  310441             : 
  310442             : 
  310443             : 
  310444             : 
  310445             : 
  310446             :  // JH (10/24/2005): methods added to support the ast file IO
  310447             :     private:
  310448             : 
  310449             :       /* name AST Memory Allocation Support Functions
  310450             :           \brief Memory allocations support....
  310451             : 
  310452             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  310453             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  310454             :           and support the AST File I/O Mechanism.
  310455             :        */
  310456             :       /* */
  310457             : 
  310458             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  310459             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  310460             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  310461             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  310462             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  310463             :           a correspinding one in the AST_FILE_IO class!
  310464             :        */
  310465             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  310466             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310467             :       /* \brief Typedef used for low level memory access.
  310468             :        */
  310469             :        // typedef unsigned char* TestType;
  310470             : 
  310471             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  310472             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310473             :       /* \brief Typedef used to hold memory addresses as values.
  310474             :        */
  310475             :        // typedef unsigned long  AddressType;
  310476             : 
  310477             : 
  310478             : 
  310479             :        // necessary, to have direct access to the p_freepointer and the private methods !
  310480             :       /*! \brief friend class declaration to support AST File I/O */
  310481             :           friend class AST_FILE_IO;
  310482             : 
  310483             :       /*! \brief friend class declaration to support AST File I/O */
  310484             :           friend class SgKeyDatumPairStorageClass;
  310485             : 
  310486             :       /*! \brief friend class declaration to support AST File I/O */
  310487             :           friend class AstSpecificDataManagingClass;
  310488             : 
  310489             :       /*! \brief friend class declaration to support AST File I/O */
  310490             :           friend class AstSpecificDataManagingClassStorageClass;
  310491             :     public:
  310492             :       /*! \brief IR node constructor to support AST File I/O */
  310493             :           SgKeyDatumPair( const SgKeyDatumPairStorageClass& source );
  310494             : 
  310495             :  // private: // JJW hack
  310496             :        /*
  310497             :           name AST Memory Allocation Support Variables
  310498             :           Memory allocations support variables 
  310499             : 
  310500             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  310501             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  310502             :           and support the AST File I/O Mechanism.
  310503             :        */
  310504             :       /* */
  310505             : 
  310506             :     public:
  310507             : 
  310508             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  310509             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  310510             :       // virtual SgNode* addRegExpAttribute();
  310511             :       /*! \brief Support for AST matching using regular expression.
  310512             : 
  310513             :           This support is incomplete and the subject of current research to define 
  310514             :           RegEx trees to support inexact matching.
  310515             :        */
  310516             :           SgKeyDatumPair* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  310517             : 
  310518             : // *** COMMON CODE SECTION ENDS HERE ***
  310519             : 
  310520             : 
  310521             : // End of memberFunctionString
  310522             : // Start of memberFunctionString
  310523             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  310524             : 
  310525             :      // the generated cast function
  310526             :      // friend ROSE_DLL_API SgKeyDatumPair* isSgKeyDatumPair ( SgNode* s );
  310527             : 
  310528             :           typedef SgExpression base_node_type;
  310529             : 
  310530             : 
  310531             : // End of memberFunctionString
  310532             : // Start of memberFunctionString
  310533             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  310534             : 
  310535             :           SgType* get_type() const override;
  310536             : 
  310537             : 
  310538             : // End of memberFunctionString
  310539             : // Start of memberFunctionString
  310540             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  310541             : 
  310542             :           void post_construction_initialization() override;
  310543             : 
  310544             : 
  310545             : // End of memberFunctionString
  310546             : 
  310547             :      public: 
  310548             :          SgExpression* get_key() const;
  310549             :          void set_key(SgExpression* key);
  310550             : 
  310551             :      public: 
  310552             :          SgExpression* get_datum() const;
  310553             :          void set_datum(SgExpression* datum);
  310554             : 
  310555             : 
  310556             :      public: 
  310557             :          virtual ~SgKeyDatumPair();
  310558             : 
  310559             : 
  310560             :      public: 
  310561             :          SgKeyDatumPair(Sg_File_Info* startOfConstruct , SgExpression* key = NULL, SgExpression* datum = NULL); 
  310562             :          SgKeyDatumPair(SgExpression* key, SgExpression* datum); 
  310563             : 
  310564             :     protected:
  310565             : // Start of memberFunctionString
  310566             : SgExpression* p_key;
  310567             :           
  310568             : // End of memberFunctionString
  310569             : // Start of memberFunctionString
  310570             : SgExpression* p_datum;
  310571             :           
  310572             : // End of memberFunctionString
  310573             : 
  310574             :     friend struct Rose::Traits::generated::describe_node_t<SgKeyDatumPair>;
  310575             :     friend struct Rose::Traits::generated::describe_field_t<SgKeyDatumPair, SgExpression*,&SgKeyDatumPair::p_key>;
  310576             :     friend struct Rose::Traits::generated::describe_field_t<SgKeyDatumPair, SgExpression*,&SgKeyDatumPair::p_datum>;
  310577             : 
  310578             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310579             : 
  310580             : 
  310581             :    };
  310582             : #endif
  310583             : 
  310584             : // postdeclarations for SgKeyDatumPair
  310585             : 
  310586             : /* #line 310587 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310587             : 
  310588             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  310589             : 
  310590             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310591             : 
  310592             : 
  310593             : /* #line 310594 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310594             : 
  310595             : 
  310596             : 
  310597             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310598             : 
  310599             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  310600             : //      This code is automatically generated for each 
  310601             : //      terminal and non-terminal within the defined 
  310602             : //      grammar.  There is a simple way to change the 
  310603             : //      code to fix bugs etc.  See the ROSE README file
  310604             : //      for directions.
  310605             : 
  310606             : // tps: (02/22/2010): Adding DLL export requirements
  310607             : #include "rosedll.h"
  310608             : 
  310609             : // predeclarations for SgComprehension
  310610             : 
  310611             : /* #line 310612 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310612             : 
  310613             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  310614             : 
  310615             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  310616             : 
  310617             : #if 1
  310618             : // Class Definition for SgComprehension
  310619             : class ROSE_DLL_API SgComprehension  : public SgExpression
  310620             :    {
  310621             :      public:
  310622             : 
  310623             : 
  310624             : /* #line 310625 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  310625             : 
  310626             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  310627             : // Start of memberFunctionString
  310628             : /* #line 1376 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  310629             : 
  310630             : 
  310631             : 
  310632             : // End of memberFunctionString
  310633             : // Start of memberFunctionString
  310634             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  310635             : 
  310636             : // *** COMMON CODE SECTION BEGINS HERE ***
  310637             : 
  310638             :     public:
  310639             : 
  310640             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  310641             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  310642             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  310643             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  310644             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  310645             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  310646             : 
  310647             :       /*! \brief returns a string representing the class name */
  310648             :           virtual std::string class_name() const override;
  310649             : 
  310650             :       /*! \brief returns new style SageIII enum values */
  310651             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  310652             : 
  310653             :       /*! \brief static variant value */
  310654             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  310655             :        // static const VariantT static_variant = V_SgComprehension;
  310656             :           enum { static_variant = V_SgComprehension };
  310657             : 
  310658             :        /* the generated cast function */
  310659             :       /*! \brief Casts pointer from base class to derived class */
  310660             :           ROSE_DLL_API friend       SgComprehension* isSgComprehension(       SgNode * s );
  310661             : 
  310662             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  310663             :           ROSE_DLL_API friend const SgComprehension* isSgComprehension( const SgNode * s );
  310664             : 
  310665             :      // ******************************************
  310666             :      // * Memory Pool / New / Delete
  310667             :      // ******************************************
  310668             : 
  310669             :      public:
  310670             :           /// \private
  310671             :           static const unsigned pool_size; //
  310672             :           /// \private
  310673             :           static std::vector<unsigned char *> pools; //
  310674             :           /// \private
  310675             :           static SgComprehension * next_node; // 
  310676             : 
  310677             :           /// \private
  310678             :           static unsigned long initializeStorageClassArray(SgComprehensionStorageClass *); //
  310679             : 
  310680             :           /// \private
  310681             :           static void clearMemoryPool(); //
  310682             :           static void deleteMemoryPool(); //
  310683             : 
  310684             :           /// \private
  310685             :           static void extendMemoryPoolForFileIO(); //
  310686             : 
  310687             :           /// \private
  310688             :           static SgComprehension * getPointerFromGlobalIndex(unsigned long); //
  310689             :           /// \private
  310690             :           static SgComprehension * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  310691             : 
  310692             :           /// \private
  310693             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  310694             :           /// \private
  310695             :           static void resetValidFreepointers(); //
  310696             :           /// \private
  310697             :           static unsigned long getNumberOfLastValidPointer(); //
  310698             : 
  310699             : 
  310700             : #if defined(INLINE_FUNCTIONS)
  310701             :       /*! \brief returns pointer to newly allocated IR node */
  310702             :           inline void *operator new (size_t size);
  310703             : #else
  310704             :       /*! \brief returns pointer to newly allocated IR node */
  310705             :           void *operator new (size_t size);
  310706             : #endif
  310707             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  310708             :           void operator delete (void* pointer, size_t size);
  310709             : 
  310710             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  310711           0 :           void operator delete (void* pointer)
  310712             :              {
  310713             :             // This is the generated delete operator...
  310714           0 :                SgComprehension::operator delete (pointer,sizeof(SgComprehension));
  310715             :              }
  310716             : 
  310717             :       /*! \brief Returns the total number of IR nodes of this type */
  310718             :           static size_t numberOfNodes();
  310719             : 
  310720             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  310721             :           static size_t memoryUsage();
  310722             : 
  310723             :       // End of scope which started in IR nodes specific code 
  310724             :       /* */
  310725             : 
  310726             :       /* name Internal Functions
  310727             :           \brief Internal functions ... incomplete-documentation
  310728             : 
  310729             :           These functions have been made public as part of the design, but they are suggested for internal use 
  310730             :           or by particularly knowledgeable users for specialized tools or applications.
  310731             : 
  310732             :           \internal We could not make these private because they are required by user for special purposes. And 
  310733             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  310734             :          
  310735             :        */
  310736             : 
  310737             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  310738             :        // overridden in every class by *generated* implementation
  310739             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  310740             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  310741             :        // MS: 06/28/02 container of names of variables or container indices 
  310742             :        // used used in the traversal to access AST successor nodes
  310743             :        // overridden in every class by *generated* implementation
  310744             :       /*! \brief container of names of variables or container indices used used in the traversal
  310745             :           to access AST successor nodes overridden in every class by *generated* implementation */
  310746             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  310747             : 
  310748             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  310749             :        // than all the vector copies. The implementation for these functions is generated for each class.
  310750             :       /*! \brief return number of children in the traversal successor list */
  310751             :           virtual size_t get_numberOfTraversalSuccessors() override;
  310752             :       /*! \brief index-based access to traversal successors by index number */
  310753             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  310754             :       /*! \brief index-based access to traversal successors by child node */
  310755             :           virtual size_t get_childIndex(SgNode *child) override;
  310756             : 
  310757             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  310758             :        // MS: 08/16/2002 method for generating RTI information
  310759             :       /*! \brief return C++ Runtime-Time-Information */
  310760             :           virtual RTIReturnType roseRTI() override;
  310761             : #endif
  310762             :       /* */
  310763             : 
  310764             : 
  310765             : 
  310766             :       /* name Deprecated Functions
  310767             :           \brief Deprecated functions ... incomplete-documentation
  310768             : 
  310769             :           These functions have been deprecated from use.
  310770             :        */
  310771             :       /* */
  310772             : 
  310773             :       /*! returns a C style string (char*) representing the class name */
  310774             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  310775             : 
  310776             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  310777             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  310778             : #if 0
  310779             :       /*! returns old style Sage II enum values */
  310780             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  310781             :       /*! returns old style Sage II enum values */
  310782             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  310783             : #endif
  310784             :       /* */
  310785             : 
  310786             : 
  310787             : 
  310788             : 
  310789             :      public:
  310790             :       /* name Traversal Support Functions
  310791             :           \brief Traversal support functions ... incomplete-documentation
  310792             : 
  310793             :           These functions have been made public as part of the design, but they are suggested for internal use 
  310794             :           or by particularly knowledgable users for specialized tools or applications.
  310795             :        */
  310796             :       /* */
  310797             : 
  310798             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  310799             :        // (inferior to ROSE traversal mechanism, experimental).
  310800             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  310801             :        */
  310802             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  310803             : 
  310804             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  310805             :       /*! \brief support for the classic visitor pattern done in GoF */
  310806             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  310807             : 
  310808             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  310809             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  310810             :        */
  310811             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  310812             : 
  310813             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  310814             :        */
  310815             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  310816             : 
  310817             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  310818             :        // This traversal helps support internal tools that call static member functions.
  310819             :        // note: this function operates on the memory pools.
  310820             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  310821             :        */
  310822             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  310823             :       /* */
  310824             : 
  310825             : 
  310826             :      public:
  310827             :       /* name Memory Allocation Functions
  310828             :           \brief Memory allocations functions ... incomplete-documentation
  310829             : 
  310830             :           These functions have been made public as part of the design, but they are suggested for internal use 
  310831             :           or by particularly knowledgable users for specialized tools or applications.
  310832             :        */
  310833             :       /* */
  310834             : 
  310835             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  310836             : 
  310837             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  310838             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  310839             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  310840             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  310841             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  310842             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  310843             :           being used with the AST File I/O mechanism.
  310844             :        */
  310845             :           virtual bool isInMemoryPool() override;
  310846             : 
  310847             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  310848             : 
  310849             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  310850             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  310851             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  310852             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  310853             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  310854             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  310855             :           being used with the AST File I/O mechanism.
  310856             :        */
  310857             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  310858             : 
  310859             :       // DQ (4/30/2006): Modified to be a const function.
  310860             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  310861             : 
  310862             :           This functions is part of general support for many possible tools to operate 
  310863             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  310864             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  310865             :           less than the set of pointers used by the AST file I/O. This is part of
  310866             :           work implemented by Andreas, and support tools such as the AST graph generation.
  310867             : 
  310868             :           \warning This function can return unexpected data members and thus the 
  310869             :                    order and the number of elements is unpredicable and subject 
  310870             :                    to change.
  310871             : 
  310872             :           \returns STL vector of pairs of SgNode* and strings
  310873             :        */
  310874             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  310875             : 
  310876             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  310877             : 
  310878             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  310879             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  310880             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  310881             : 
  310882             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  310883             :                    and subject to change.
  310884             :        */
  310885             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  310886             : 
  310887             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  310888             : 
  310889             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  310890             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  310891             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  310892             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  310893             : 
  310894             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  310895             : 
  310896             :           \returns long
  310897             :        */
  310898             :           virtual long getChildIndex( SgNode* childNode ) const override;
  310899             : 
  310900             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  310901             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310902             :       /* \brief Constructor for use by AST File I/O Mechanism
  310903             : 
  310904             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  310905             :           which obtained via fast binary file I/O from disk.
  310906             :        */
  310907             :        // SgComprehension( SgComprehensionStorageClass& source );
  310908             : 
  310909             : 
  310910             : 
  310911             : 
  310912             : 
  310913             :  // JH (10/24/2005): methods added to support the ast file IO
  310914             :     private:
  310915             : 
  310916             :       /* name AST Memory Allocation Support Functions
  310917             :           \brief Memory allocations support....
  310918             : 
  310919             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  310920             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  310921             :           and support the AST File I/O Mechanism.
  310922             :        */
  310923             :       /* */
  310924             : 
  310925             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  310926             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  310927             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  310928             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  310929             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  310930             :           a correspinding one in the AST_FILE_IO class!
  310931             :        */
  310932             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  310933             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310934             :       /* \brief Typedef used for low level memory access.
  310935             :        */
  310936             :        // typedef unsigned char* TestType;
  310937             : 
  310938             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  310939             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  310940             :       /* \brief Typedef used to hold memory addresses as values.
  310941             :        */
  310942             :        // typedef unsigned long  AddressType;
  310943             : 
  310944             : 
  310945             : 
  310946             :        // necessary, to have direct access to the p_freepointer and the private methods !
  310947             :       /*! \brief friend class declaration to support AST File I/O */
  310948             :           friend class AST_FILE_IO;
  310949             : 
  310950             :       /*! \brief friend class declaration to support AST File I/O */
  310951             :           friend class SgComprehensionStorageClass;
  310952             : 
  310953             :       /*! \brief friend class declaration to support AST File I/O */
  310954             :           friend class AstSpecificDataManagingClass;
  310955             : 
  310956             :       /*! \brief friend class declaration to support AST File I/O */
  310957             :           friend class AstSpecificDataManagingClassStorageClass;
  310958             :     public:
  310959             :       /*! \brief IR node constructor to support AST File I/O */
  310960             :           SgComprehension( const SgComprehensionStorageClass& source );
  310961             : 
  310962             :  // private: // JJW hack
  310963             :        /*
  310964             :           name AST Memory Allocation Support Variables
  310965             :           Memory allocations support variables 
  310966             : 
  310967             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  310968             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  310969             :           and support the AST File I/O Mechanism.
  310970             :        */
  310971             :       /* */
  310972             : 
  310973             :     public:
  310974             : 
  310975             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  310976             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  310977             :       // virtual SgNode* addRegExpAttribute();
  310978             :       /*! \brief Support for AST matching using regular expression.
  310979             : 
  310980             :           This support is incomplete and the subject of current research to define 
  310981             :           RegEx trees to support inexact matching.
  310982             :        */
  310983             :           SgComprehension* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  310984             : 
  310985             : // *** COMMON CODE SECTION ENDS HERE ***
  310986             : 
  310987             : 
  310988             : // End of memberFunctionString
  310989             : // Start of memberFunctionString
  310990             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  310991             : 
  310992             :      // the generated cast function
  310993             :      // friend ROSE_DLL_API SgComprehension* isSgComprehension ( SgNode* s );
  310994             : 
  310995             :           typedef SgExpression base_node_type;
  310996             : 
  310997             : 
  310998             : // End of memberFunctionString
  310999             : // Start of memberFunctionString
  311000             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311001             : 
  311002             :           SgType* get_type() const override;
  311003             : 
  311004             : 
  311005             : // End of memberFunctionString
  311006             : // Start of memberFunctionString
  311007             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311008             : 
  311009             :           void post_construction_initialization() override;
  311010             : 
  311011             : 
  311012             : // End of memberFunctionString
  311013             : 
  311014             :      public: 
  311015             :          SgExpression* get_target() const;
  311016             :          void set_target(SgExpression* target);
  311017             : 
  311018             :      public: 
  311019             :          SgExpression* get_iter() const;
  311020             :          void set_iter(SgExpression* iter);
  311021             : 
  311022             :      public: 
  311023             :          SgExprListExp* get_filters() const;
  311024             :          void set_filters(SgExprListExp* filters);
  311025             : 
  311026             : 
  311027             :      public: 
  311028             :          virtual ~SgComprehension();
  311029             : 
  311030             : 
  311031             :      public: 
  311032             :          SgComprehension(Sg_File_Info* startOfConstruct , SgExpression* target = NULL, SgExpression* iter = NULL, SgExprListExp* filters = NULL); 
  311033             :          SgComprehension(SgExpression* target, SgExpression* iter, SgExprListExp* filters); 
  311034             : 
  311035             :     protected:
  311036             : // Start of memberFunctionString
  311037             : SgExpression* p_target;
  311038             :           
  311039             : // End of memberFunctionString
  311040             : // Start of memberFunctionString
  311041             : SgExpression* p_iter;
  311042             :           
  311043             : // End of memberFunctionString
  311044             : // Start of memberFunctionString
  311045             : SgExprListExp* p_filters;
  311046             :           
  311047             : // End of memberFunctionString
  311048             : 
  311049             :     friend struct Rose::Traits::generated::describe_node_t<SgComprehension>;
  311050             :     friend struct Rose::Traits::generated::describe_field_t<SgComprehension, SgExpression*,&SgComprehension::p_target>;
  311051             :     friend struct Rose::Traits::generated::describe_field_t<SgComprehension, SgExpression*,&SgComprehension::p_iter>;
  311052             :     friend struct Rose::Traits::generated::describe_field_t<SgComprehension, SgExprListExp*,&SgComprehension::p_filters>;
  311053             : 
  311054             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311055             : 
  311056             : 
  311057             :    };
  311058             : #endif
  311059             : 
  311060             : // postdeclarations for SgComprehension
  311061             : 
  311062             : /* #line 311063 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311063             : 
  311064             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  311065             : 
  311066             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311067             : 
  311068             : 
  311069             : /* #line 311070 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311070             : 
  311071             : 
  311072             : 
  311073             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311074             : 
  311075             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  311076             : //      This code is automatically generated for each 
  311077             : //      terminal and non-terminal within the defined 
  311078             : //      grammar.  There is a simple way to change the 
  311079             : //      code to fix bugs etc.  See the ROSE README file
  311080             : //      for directions.
  311081             : 
  311082             : // tps: (02/22/2010): Adding DLL export requirements
  311083             : #include "rosedll.h"
  311084             : 
  311085             : // predeclarations for SgListComprehension
  311086             : 
  311087             : /* #line 311088 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311088             : 
  311089             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  311090             : 
  311091             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311092             : 
  311093             : #if 1
  311094             : // Class Definition for SgListComprehension
  311095             : class ROSE_DLL_API SgListComprehension  : public SgExpression
  311096             :    {
  311097             :      public:
  311098             : 
  311099             : 
  311100             : /* #line 311101 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311101             : 
  311102             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  311103             : // Start of memberFunctionString
  311104             : /* #line 1379 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311105             : 
  311106             : 
  311107             : 
  311108             : // End of memberFunctionString
  311109             : // Start of memberFunctionString
  311110             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  311111             : 
  311112             : // *** COMMON CODE SECTION BEGINS HERE ***
  311113             : 
  311114             :     public:
  311115             : 
  311116             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  311117             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  311118             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  311119             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  311120             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  311121             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  311122             : 
  311123             :       /*! \brief returns a string representing the class name */
  311124             :           virtual std::string class_name() const override;
  311125             : 
  311126             :       /*! \brief returns new style SageIII enum values */
  311127             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  311128             : 
  311129             :       /*! \brief static variant value */
  311130             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  311131             :        // static const VariantT static_variant = V_SgListComprehension;
  311132             :           enum { static_variant = V_SgListComprehension };
  311133             : 
  311134             :        /* the generated cast function */
  311135             :       /*! \brief Casts pointer from base class to derived class */
  311136             :           ROSE_DLL_API friend       SgListComprehension* isSgListComprehension(       SgNode * s );
  311137             : 
  311138             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  311139             :           ROSE_DLL_API friend const SgListComprehension* isSgListComprehension( const SgNode * s );
  311140             : 
  311141             :      // ******************************************
  311142             :      // * Memory Pool / New / Delete
  311143             :      // ******************************************
  311144             : 
  311145             :      public:
  311146             :           /// \private
  311147             :           static const unsigned pool_size; //
  311148             :           /// \private
  311149             :           static std::vector<unsigned char *> pools; //
  311150             :           /// \private
  311151             :           static SgListComprehension * next_node; // 
  311152             : 
  311153             :           /// \private
  311154             :           static unsigned long initializeStorageClassArray(SgListComprehensionStorageClass *); //
  311155             : 
  311156             :           /// \private
  311157             :           static void clearMemoryPool(); //
  311158             :           static void deleteMemoryPool(); //
  311159             : 
  311160             :           /// \private
  311161             :           static void extendMemoryPoolForFileIO(); //
  311162             : 
  311163             :           /// \private
  311164             :           static SgListComprehension * getPointerFromGlobalIndex(unsigned long); //
  311165             :           /// \private
  311166             :           static SgListComprehension * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  311167             : 
  311168             :           /// \private
  311169             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  311170             :           /// \private
  311171             :           static void resetValidFreepointers(); //
  311172             :           /// \private
  311173             :           static unsigned long getNumberOfLastValidPointer(); //
  311174             : 
  311175             : 
  311176             : #if defined(INLINE_FUNCTIONS)
  311177             :       /*! \brief returns pointer to newly allocated IR node */
  311178             :           inline void *operator new (size_t size);
  311179             : #else
  311180             :       /*! \brief returns pointer to newly allocated IR node */
  311181             :           void *operator new (size_t size);
  311182             : #endif
  311183             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  311184             :           void operator delete (void* pointer, size_t size);
  311185             : 
  311186             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  311187           0 :           void operator delete (void* pointer)
  311188             :              {
  311189             :             // This is the generated delete operator...
  311190           0 :                SgListComprehension::operator delete (pointer,sizeof(SgListComprehension));
  311191             :              }
  311192             : 
  311193             :       /*! \brief Returns the total number of IR nodes of this type */
  311194             :           static size_t numberOfNodes();
  311195             : 
  311196             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  311197             :           static size_t memoryUsage();
  311198             : 
  311199             :       // End of scope which started in IR nodes specific code 
  311200             :       /* */
  311201             : 
  311202             :       /* name Internal Functions
  311203             :           \brief Internal functions ... incomplete-documentation
  311204             : 
  311205             :           These functions have been made public as part of the design, but they are suggested for internal use 
  311206             :           or by particularly knowledgeable users for specialized tools or applications.
  311207             : 
  311208             :           \internal We could not make these private because they are required by user for special purposes. And 
  311209             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  311210             :          
  311211             :        */
  311212             : 
  311213             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  311214             :        // overridden in every class by *generated* implementation
  311215             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  311216             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  311217             :        // MS: 06/28/02 container of names of variables or container indices 
  311218             :        // used used in the traversal to access AST successor nodes
  311219             :        // overridden in every class by *generated* implementation
  311220             :       /*! \brief container of names of variables or container indices used used in the traversal
  311221             :           to access AST successor nodes overridden in every class by *generated* implementation */
  311222             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  311223             : 
  311224             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  311225             :        // than all the vector copies. The implementation for these functions is generated for each class.
  311226             :       /*! \brief return number of children in the traversal successor list */
  311227             :           virtual size_t get_numberOfTraversalSuccessors() override;
  311228             :       /*! \brief index-based access to traversal successors by index number */
  311229             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  311230             :       /*! \brief index-based access to traversal successors by child node */
  311231             :           virtual size_t get_childIndex(SgNode *child) override;
  311232             : 
  311233             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  311234             :        // MS: 08/16/2002 method for generating RTI information
  311235             :       /*! \brief return C++ Runtime-Time-Information */
  311236             :           virtual RTIReturnType roseRTI() override;
  311237             : #endif
  311238             :       /* */
  311239             : 
  311240             : 
  311241             : 
  311242             :       /* name Deprecated Functions
  311243             :           \brief Deprecated functions ... incomplete-documentation
  311244             : 
  311245             :           These functions have been deprecated from use.
  311246             :        */
  311247             :       /* */
  311248             : 
  311249             :       /*! returns a C style string (char*) representing the class name */
  311250             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  311251             : 
  311252             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  311253             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  311254             : #if 0
  311255             :       /*! returns old style Sage II enum values */
  311256             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  311257             :       /*! returns old style Sage II enum values */
  311258             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  311259             : #endif
  311260             :       /* */
  311261             : 
  311262             : 
  311263             : 
  311264             : 
  311265             :      public:
  311266             :       /* name Traversal Support Functions
  311267             :           \brief Traversal support functions ... incomplete-documentation
  311268             : 
  311269             :           These functions have been made public as part of the design, but they are suggested for internal use 
  311270             :           or by particularly knowledgable users for specialized tools or applications.
  311271             :        */
  311272             :       /* */
  311273             : 
  311274             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  311275             :        // (inferior to ROSE traversal mechanism, experimental).
  311276             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  311277             :        */
  311278             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  311279             : 
  311280             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  311281             :       /*! \brief support for the classic visitor pattern done in GoF */
  311282             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  311283             : 
  311284             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  311285             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  311286             :        */
  311287             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  311288             : 
  311289             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  311290             :        */
  311291             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  311292             : 
  311293             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  311294             :        // This traversal helps support internal tools that call static member functions.
  311295             :        // note: this function operates on the memory pools.
  311296             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  311297             :        */
  311298             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  311299             :       /* */
  311300             : 
  311301             : 
  311302             :      public:
  311303             :       /* name Memory Allocation Functions
  311304             :           \brief Memory allocations functions ... incomplete-documentation
  311305             : 
  311306             :           These functions have been made public as part of the design, but they are suggested for internal use 
  311307             :           or by particularly knowledgable users for specialized tools or applications.
  311308             :        */
  311309             :       /* */
  311310             : 
  311311             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  311312             : 
  311313             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  311314             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  311315             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  311316             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  311317             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  311318             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  311319             :           being used with the AST File I/O mechanism.
  311320             :        */
  311321             :           virtual bool isInMemoryPool() override;
  311322             : 
  311323             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  311324             : 
  311325             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  311326             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  311327             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  311328             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  311329             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  311330             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  311331             :           being used with the AST File I/O mechanism.
  311332             :        */
  311333             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  311334             : 
  311335             :       // DQ (4/30/2006): Modified to be a const function.
  311336             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  311337             : 
  311338             :           This functions is part of general support for many possible tools to operate 
  311339             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  311340             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  311341             :           less than the set of pointers used by the AST file I/O. This is part of
  311342             :           work implemented by Andreas, and support tools such as the AST graph generation.
  311343             : 
  311344             :           \warning This function can return unexpected data members and thus the 
  311345             :                    order and the number of elements is unpredicable and subject 
  311346             :                    to change.
  311347             : 
  311348             :           \returns STL vector of pairs of SgNode* and strings
  311349             :        */
  311350             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  311351             : 
  311352             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  311353             : 
  311354             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  311355             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  311356             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  311357             : 
  311358             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  311359             :                    and subject to change.
  311360             :        */
  311361             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  311362             : 
  311363             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  311364             : 
  311365             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  311366             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  311367             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  311368             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  311369             : 
  311370             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  311371             : 
  311372             :           \returns long
  311373             :        */
  311374             :           virtual long getChildIndex( SgNode* childNode ) const override;
  311375             : 
  311376             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  311377             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  311378             :       /* \brief Constructor for use by AST File I/O Mechanism
  311379             : 
  311380             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  311381             :           which obtained via fast binary file I/O from disk.
  311382             :        */
  311383             :        // SgListComprehension( SgListComprehensionStorageClass& source );
  311384             : 
  311385             : 
  311386             : 
  311387             : 
  311388             : 
  311389             :  // JH (10/24/2005): methods added to support the ast file IO
  311390             :     private:
  311391             : 
  311392             :       /* name AST Memory Allocation Support Functions
  311393             :           \brief Memory allocations support....
  311394             : 
  311395             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  311396             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  311397             :           and support the AST File I/O Mechanism.
  311398             :        */
  311399             :       /* */
  311400             : 
  311401             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  311402             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  311403             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  311404             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  311405             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  311406             :           a correspinding one in the AST_FILE_IO class!
  311407             :        */
  311408             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  311409             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  311410             :       /* \brief Typedef used for low level memory access.
  311411             :        */
  311412             :        // typedef unsigned char* TestType;
  311413             : 
  311414             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  311415             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  311416             :       /* \brief Typedef used to hold memory addresses as values.
  311417             :        */
  311418             :        // typedef unsigned long  AddressType;
  311419             : 
  311420             : 
  311421             : 
  311422             :        // necessary, to have direct access to the p_freepointer and the private methods !
  311423             :       /*! \brief friend class declaration to support AST File I/O */
  311424             :           friend class AST_FILE_IO;
  311425             : 
  311426             :       /*! \brief friend class declaration to support AST File I/O */
  311427             :           friend class SgListComprehensionStorageClass;
  311428             : 
  311429             :       /*! \brief friend class declaration to support AST File I/O */
  311430             :           friend class AstSpecificDataManagingClass;
  311431             : 
  311432             :       /*! \brief friend class declaration to support AST File I/O */
  311433             :           friend class AstSpecificDataManagingClassStorageClass;
  311434             :     public:
  311435             :       /*! \brief IR node constructor to support AST File I/O */
  311436             :           SgListComprehension( const SgListComprehensionStorageClass& source );
  311437             : 
  311438             :  // private: // JJW hack
  311439             :        /*
  311440             :           name AST Memory Allocation Support Variables
  311441             :           Memory allocations support variables 
  311442             : 
  311443             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  311444             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  311445             :           and support the AST File I/O Mechanism.
  311446             :        */
  311447             :       /* */
  311448             : 
  311449             :     public:
  311450             : 
  311451             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  311452             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  311453             :       // virtual SgNode* addRegExpAttribute();
  311454             :       /*! \brief Support for AST matching using regular expression.
  311455             : 
  311456             :           This support is incomplete and the subject of current research to define 
  311457             :           RegEx trees to support inexact matching.
  311458             :        */
  311459             :           SgListComprehension* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  311460             : 
  311461             : // *** COMMON CODE SECTION ENDS HERE ***
  311462             : 
  311463             : 
  311464             : // End of memberFunctionString
  311465             : // Start of memberFunctionString
  311466             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  311467             : 
  311468             :      // the generated cast function
  311469             :      // friend ROSE_DLL_API SgListComprehension* isSgListComprehension ( SgNode* s );
  311470             : 
  311471             :           typedef SgExpression base_node_type;
  311472             : 
  311473             : 
  311474             : // End of memberFunctionString
  311475             : // Start of memberFunctionString
  311476             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311477             : 
  311478             :           SgType* get_type() const override;
  311479             : 
  311480             : 
  311481             : // End of memberFunctionString
  311482             : // Start of memberFunctionString
  311483             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311484             : 
  311485             :           void post_construction_initialization() override;
  311486             : 
  311487             : 
  311488             : // End of memberFunctionString
  311489             : 
  311490             :      public: 
  311491             :          SgExpression* get_element() const;
  311492             :          void set_element(SgExpression* element);
  311493             : 
  311494             :      public: 
  311495             :          SgExprListExp* get_generators() const;
  311496             :          void set_generators(SgExprListExp* generators);
  311497             : 
  311498             : 
  311499             :      public: 
  311500             :          virtual ~SgListComprehension();
  311501             : 
  311502             : 
  311503             :      public: 
  311504             :          SgListComprehension(Sg_File_Info* startOfConstruct , SgExpression* element = NULL, SgExprListExp* generators = NULL); 
  311505             :          SgListComprehension(SgExpression* element, SgExprListExp* generators); 
  311506             : 
  311507             :     protected:
  311508             : // Start of memberFunctionString
  311509             : SgExpression* p_element;
  311510             :           
  311511             : // End of memberFunctionString
  311512             : // Start of memberFunctionString
  311513             : SgExprListExp* p_generators;
  311514             :           
  311515             : // End of memberFunctionString
  311516             : 
  311517             :     friend struct Rose::Traits::generated::describe_node_t<SgListComprehension>;
  311518             :     friend struct Rose::Traits::generated::describe_field_t<SgListComprehension, SgExpression*,&SgListComprehension::p_element>;
  311519             :     friend struct Rose::Traits::generated::describe_field_t<SgListComprehension, SgExprListExp*,&SgListComprehension::p_generators>;
  311520             : 
  311521             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311522             : 
  311523             : 
  311524             :    };
  311525             : #endif
  311526             : 
  311527             : // postdeclarations for SgListComprehension
  311528             : 
  311529             : /* #line 311530 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311530             : 
  311531             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  311532             : 
  311533             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311534             : 
  311535             : 
  311536             : /* #line 311537 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311537             : 
  311538             : 
  311539             : 
  311540             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311541             : 
  311542             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  311543             : //      This code is automatically generated for each 
  311544             : //      terminal and non-terminal within the defined 
  311545             : //      grammar.  There is a simple way to change the 
  311546             : //      code to fix bugs etc.  See the ROSE README file
  311547             : //      for directions.
  311548             : 
  311549             : // tps: (02/22/2010): Adding DLL export requirements
  311550             : #include "rosedll.h"
  311551             : 
  311552             : // predeclarations for SgSetComprehension
  311553             : 
  311554             : /* #line 311555 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311555             : 
  311556             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  311557             : 
  311558             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311559             : 
  311560             : #if 1
  311561             : // Class Definition for SgSetComprehension
  311562             : class ROSE_DLL_API SgSetComprehension  : public SgExpression
  311563             :    {
  311564             :      public:
  311565             : 
  311566             : 
  311567             : /* #line 311568 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311568             : 
  311569             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  311570             : // Start of memberFunctionString
  311571             : /* #line 1382 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311572             : 
  311573             : 
  311574             : 
  311575             : // End of memberFunctionString
  311576             : // Start of memberFunctionString
  311577             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  311578             : 
  311579             : // *** COMMON CODE SECTION BEGINS HERE ***
  311580             : 
  311581             :     public:
  311582             : 
  311583             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  311584             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  311585             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  311586             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  311587             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  311588             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  311589             : 
  311590             :       /*! \brief returns a string representing the class name */
  311591             :           virtual std::string class_name() const override;
  311592             : 
  311593             :       /*! \brief returns new style SageIII enum values */
  311594             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  311595             : 
  311596             :       /*! \brief static variant value */
  311597             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  311598             :        // static const VariantT static_variant = V_SgSetComprehension;
  311599             :           enum { static_variant = V_SgSetComprehension };
  311600             : 
  311601             :        /* the generated cast function */
  311602             :       /*! \brief Casts pointer from base class to derived class */
  311603             :           ROSE_DLL_API friend       SgSetComprehension* isSgSetComprehension(       SgNode * s );
  311604             : 
  311605             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  311606             :           ROSE_DLL_API friend const SgSetComprehension* isSgSetComprehension( const SgNode * s );
  311607             : 
  311608             :      // ******************************************
  311609             :      // * Memory Pool / New / Delete
  311610             :      // ******************************************
  311611             : 
  311612             :      public:
  311613             :           /// \private
  311614             :           static const unsigned pool_size; //
  311615             :           /// \private
  311616             :           static std::vector<unsigned char *> pools; //
  311617             :           /// \private
  311618             :           static SgSetComprehension * next_node; // 
  311619             : 
  311620             :           /// \private
  311621             :           static unsigned long initializeStorageClassArray(SgSetComprehensionStorageClass *); //
  311622             : 
  311623             :           /// \private
  311624             :           static void clearMemoryPool(); //
  311625             :           static void deleteMemoryPool(); //
  311626             : 
  311627             :           /// \private
  311628             :           static void extendMemoryPoolForFileIO(); //
  311629             : 
  311630             :           /// \private
  311631             :           static SgSetComprehension * getPointerFromGlobalIndex(unsigned long); //
  311632             :           /// \private
  311633             :           static SgSetComprehension * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  311634             : 
  311635             :           /// \private
  311636             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  311637             :           /// \private
  311638             :           static void resetValidFreepointers(); //
  311639             :           /// \private
  311640             :           static unsigned long getNumberOfLastValidPointer(); //
  311641             : 
  311642             : 
  311643             : #if defined(INLINE_FUNCTIONS)
  311644             :       /*! \brief returns pointer to newly allocated IR node */
  311645             :           inline void *operator new (size_t size);
  311646             : #else
  311647             :       /*! \brief returns pointer to newly allocated IR node */
  311648             :           void *operator new (size_t size);
  311649             : #endif
  311650             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  311651             :           void operator delete (void* pointer, size_t size);
  311652             : 
  311653             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  311654           0 :           void operator delete (void* pointer)
  311655             :              {
  311656             :             // This is the generated delete operator...
  311657           0 :                SgSetComprehension::operator delete (pointer,sizeof(SgSetComprehension));
  311658             :              }
  311659             : 
  311660             :       /*! \brief Returns the total number of IR nodes of this type */
  311661             :           static size_t numberOfNodes();
  311662             : 
  311663             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  311664             :           static size_t memoryUsage();
  311665             : 
  311666             :       // End of scope which started in IR nodes specific code 
  311667             :       /* */
  311668             : 
  311669             :       /* name Internal Functions
  311670             :           \brief Internal functions ... incomplete-documentation
  311671             : 
  311672             :           These functions have been made public as part of the design, but they are suggested for internal use 
  311673             :           or by particularly knowledgeable users for specialized tools or applications.
  311674             : 
  311675             :           \internal We could not make these private because they are required by user for special purposes. And 
  311676             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  311677             :          
  311678             :        */
  311679             : 
  311680             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  311681             :        // overridden in every class by *generated* implementation
  311682             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  311683             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  311684             :        // MS: 06/28/02 container of names of variables or container indices 
  311685             :        // used used in the traversal to access AST successor nodes
  311686             :        // overridden in every class by *generated* implementation
  311687             :       /*! \brief container of names of variables or container indices used used in the traversal
  311688             :           to access AST successor nodes overridden in every class by *generated* implementation */
  311689             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  311690             : 
  311691             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  311692             :        // than all the vector copies. The implementation for these functions is generated for each class.
  311693             :       /*! \brief return number of children in the traversal successor list */
  311694             :           virtual size_t get_numberOfTraversalSuccessors() override;
  311695             :       /*! \brief index-based access to traversal successors by index number */
  311696             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  311697             :       /*! \brief index-based access to traversal successors by child node */
  311698             :           virtual size_t get_childIndex(SgNode *child) override;
  311699             : 
  311700             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  311701             :        // MS: 08/16/2002 method for generating RTI information
  311702             :       /*! \brief return C++ Runtime-Time-Information */
  311703             :           virtual RTIReturnType roseRTI() override;
  311704             : #endif
  311705             :       /* */
  311706             : 
  311707             : 
  311708             : 
  311709             :       /* name Deprecated Functions
  311710             :           \brief Deprecated functions ... incomplete-documentation
  311711             : 
  311712             :           These functions have been deprecated from use.
  311713             :        */
  311714             :       /* */
  311715             : 
  311716             :       /*! returns a C style string (char*) representing the class name */
  311717             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  311718             : 
  311719             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  311720             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  311721             : #if 0
  311722             :       /*! returns old style Sage II enum values */
  311723             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  311724             :       /*! returns old style Sage II enum values */
  311725             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  311726             : #endif
  311727             :       /* */
  311728             : 
  311729             : 
  311730             : 
  311731             : 
  311732             :      public:
  311733             :       /* name Traversal Support Functions
  311734             :           \brief Traversal support functions ... incomplete-documentation
  311735             : 
  311736             :           These functions have been made public as part of the design, but they are suggested for internal use 
  311737             :           or by particularly knowledgable users for specialized tools or applications.
  311738             :        */
  311739             :       /* */
  311740             : 
  311741             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  311742             :        // (inferior to ROSE traversal mechanism, experimental).
  311743             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  311744             :        */
  311745             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  311746             : 
  311747             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  311748             :       /*! \brief support for the classic visitor pattern done in GoF */
  311749             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  311750             : 
  311751             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  311752             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  311753             :        */
  311754             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  311755             : 
  311756             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  311757             :        */
  311758             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  311759             : 
  311760             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  311761             :        // This traversal helps support internal tools that call static member functions.
  311762             :        // note: this function operates on the memory pools.
  311763             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  311764             :        */
  311765             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  311766             :       /* */
  311767             : 
  311768             : 
  311769             :      public:
  311770             :       /* name Memory Allocation Functions
  311771             :           \brief Memory allocations functions ... incomplete-documentation
  311772             : 
  311773             :           These functions have been made public as part of the design, but they are suggested for internal use 
  311774             :           or by particularly knowledgable users for specialized tools or applications.
  311775             :        */
  311776             :       /* */
  311777             : 
  311778             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  311779             : 
  311780             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  311781             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  311782             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  311783             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  311784             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  311785             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  311786             :           being used with the AST File I/O mechanism.
  311787             :        */
  311788             :           virtual bool isInMemoryPool() override;
  311789             : 
  311790             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  311791             : 
  311792             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  311793             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  311794             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  311795             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  311796             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  311797             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  311798             :           being used with the AST File I/O mechanism.
  311799             :        */
  311800             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  311801             : 
  311802             :       // DQ (4/30/2006): Modified to be a const function.
  311803             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  311804             : 
  311805             :           This functions is part of general support for many possible tools to operate 
  311806             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  311807             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  311808             :           less than the set of pointers used by the AST file I/O. This is part of
  311809             :           work implemented by Andreas, and support tools such as the AST graph generation.
  311810             : 
  311811             :           \warning This function can return unexpected data members and thus the 
  311812             :                    order and the number of elements is unpredicable and subject 
  311813             :                    to change.
  311814             : 
  311815             :           \returns STL vector of pairs of SgNode* and strings
  311816             :        */
  311817             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  311818             : 
  311819             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  311820             : 
  311821             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  311822             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  311823             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  311824             : 
  311825             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  311826             :                    and subject to change.
  311827             :        */
  311828             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  311829             : 
  311830             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  311831             : 
  311832             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  311833             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  311834             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  311835             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  311836             : 
  311837             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  311838             : 
  311839             :           \returns long
  311840             :        */
  311841             :           virtual long getChildIndex( SgNode* childNode ) const override;
  311842             : 
  311843             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  311844             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  311845             :       /* \brief Constructor for use by AST File I/O Mechanism
  311846             : 
  311847             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  311848             :           which obtained via fast binary file I/O from disk.
  311849             :        */
  311850             :        // SgSetComprehension( SgSetComprehensionStorageClass& source );
  311851             : 
  311852             : 
  311853             : 
  311854             : 
  311855             : 
  311856             :  // JH (10/24/2005): methods added to support the ast file IO
  311857             :     private:
  311858             : 
  311859             :       /* name AST Memory Allocation Support Functions
  311860             :           \brief Memory allocations support....
  311861             : 
  311862             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  311863             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  311864             :           and support the AST File I/O Mechanism.
  311865             :        */
  311866             :       /* */
  311867             : 
  311868             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  311869             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  311870             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  311871             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  311872             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  311873             :           a correspinding one in the AST_FILE_IO class!
  311874             :        */
  311875             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  311876             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  311877             :       /* \brief Typedef used for low level memory access.
  311878             :        */
  311879             :        // typedef unsigned char* TestType;
  311880             : 
  311881             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  311882             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  311883             :       /* \brief Typedef used to hold memory addresses as values.
  311884             :        */
  311885             :        // typedef unsigned long  AddressType;
  311886             : 
  311887             : 
  311888             : 
  311889             :        // necessary, to have direct access to the p_freepointer and the private methods !
  311890             :       /*! \brief friend class declaration to support AST File I/O */
  311891             :           friend class AST_FILE_IO;
  311892             : 
  311893             :       /*! \brief friend class declaration to support AST File I/O */
  311894             :           friend class SgSetComprehensionStorageClass;
  311895             : 
  311896             :       /*! \brief friend class declaration to support AST File I/O */
  311897             :           friend class AstSpecificDataManagingClass;
  311898             : 
  311899             :       /*! \brief friend class declaration to support AST File I/O */
  311900             :           friend class AstSpecificDataManagingClassStorageClass;
  311901             :     public:
  311902             :       /*! \brief IR node constructor to support AST File I/O */
  311903             :           SgSetComprehension( const SgSetComprehensionStorageClass& source );
  311904             : 
  311905             :  // private: // JJW hack
  311906             :        /*
  311907             :           name AST Memory Allocation Support Variables
  311908             :           Memory allocations support variables 
  311909             : 
  311910             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  311911             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  311912             :           and support the AST File I/O Mechanism.
  311913             :        */
  311914             :       /* */
  311915             : 
  311916             :     public:
  311917             : 
  311918             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  311919             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  311920             :       // virtual SgNode* addRegExpAttribute();
  311921             :       /*! \brief Support for AST matching using regular expression.
  311922             : 
  311923             :           This support is incomplete and the subject of current research to define 
  311924             :           RegEx trees to support inexact matching.
  311925             :        */
  311926             :           SgSetComprehension* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  311927             : 
  311928             : // *** COMMON CODE SECTION ENDS HERE ***
  311929             : 
  311930             : 
  311931             : // End of memberFunctionString
  311932             : // Start of memberFunctionString
  311933             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  311934             : 
  311935             :      // the generated cast function
  311936             :      // friend ROSE_DLL_API SgSetComprehension* isSgSetComprehension ( SgNode* s );
  311937             : 
  311938             :           typedef SgExpression base_node_type;
  311939             : 
  311940             : 
  311941             : // End of memberFunctionString
  311942             : // Start of memberFunctionString
  311943             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311944             : 
  311945             :           SgType* get_type() const override;
  311946             : 
  311947             : 
  311948             : // End of memberFunctionString
  311949             : // Start of memberFunctionString
  311950             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  311951             : 
  311952             :           void post_construction_initialization() override;
  311953             : 
  311954             : 
  311955             : // End of memberFunctionString
  311956             : 
  311957             :      public: 
  311958             :          SgExpression* get_element() const;
  311959             :          void set_element(SgExpression* element);
  311960             : 
  311961             :      public: 
  311962             :          SgExprListExp* get_generators() const;
  311963             :          void set_generators(SgExprListExp* generators);
  311964             : 
  311965             : 
  311966             :      public: 
  311967             :          virtual ~SgSetComprehension();
  311968             : 
  311969             : 
  311970             :      public: 
  311971             :          SgSetComprehension(Sg_File_Info* startOfConstruct , SgExpression* element = NULL, SgExprListExp* generators = NULL); 
  311972             :          SgSetComprehension(SgExpression* element, SgExprListExp* generators); 
  311973             : 
  311974             :     protected:
  311975             : // Start of memberFunctionString
  311976             : SgExpression* p_element;
  311977             :           
  311978             : // End of memberFunctionString
  311979             : // Start of memberFunctionString
  311980             : SgExprListExp* p_generators;
  311981             :           
  311982             : // End of memberFunctionString
  311983             : 
  311984             :     friend struct Rose::Traits::generated::describe_node_t<SgSetComprehension>;
  311985             :     friend struct Rose::Traits::generated::describe_field_t<SgSetComprehension, SgExpression*,&SgSetComprehension::p_element>;
  311986             :     friend struct Rose::Traits::generated::describe_field_t<SgSetComprehension, SgExprListExp*,&SgSetComprehension::p_generators>;
  311987             : 
  311988             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  311989             : 
  311990             : 
  311991             :    };
  311992             : #endif
  311993             : 
  311994             : // postdeclarations for SgSetComprehension
  311995             : 
  311996             : /* #line 311997 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  311997             : 
  311998             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  311999             : 
  312000             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312001             : 
  312002             : 
  312003             : /* #line 312004 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312004             : 
  312005             : 
  312006             : 
  312007             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312008             : 
  312009             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  312010             : //      This code is automatically generated for each 
  312011             : //      terminal and non-terminal within the defined 
  312012             : //      grammar.  There is a simple way to change the 
  312013             : //      code to fix bugs etc.  See the ROSE README file
  312014             : //      for directions.
  312015             : 
  312016             : // tps: (02/22/2010): Adding DLL export requirements
  312017             : #include "rosedll.h"
  312018             : 
  312019             : // predeclarations for SgDictionaryComprehension
  312020             : 
  312021             : /* #line 312022 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312022             : 
  312023             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  312024             : 
  312025             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312026             : 
  312027             : #if 1
  312028             : // Class Definition for SgDictionaryComprehension
  312029             : class ROSE_DLL_API SgDictionaryComprehension  : public SgExpression
  312030             :    {
  312031             :      public:
  312032             : 
  312033             : 
  312034             : /* #line 312035 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312035             : 
  312036             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  312037             : // Start of memberFunctionString
  312038             : /* #line 1385 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312039             : 
  312040             : 
  312041             : 
  312042             : // End of memberFunctionString
  312043             : // Start of memberFunctionString
  312044             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  312045             : 
  312046             : // *** COMMON CODE SECTION BEGINS HERE ***
  312047             : 
  312048             :     public:
  312049             : 
  312050             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  312051             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  312052             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  312053             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  312054             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  312055             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  312056             : 
  312057             :       /*! \brief returns a string representing the class name */
  312058             :           virtual std::string class_name() const override;
  312059             : 
  312060             :       /*! \brief returns new style SageIII enum values */
  312061             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  312062             : 
  312063             :       /*! \brief static variant value */
  312064             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  312065             :        // static const VariantT static_variant = V_SgDictionaryComprehension;
  312066             :           enum { static_variant = V_SgDictionaryComprehension };
  312067             : 
  312068             :        /* the generated cast function */
  312069             :       /*! \brief Casts pointer from base class to derived class */
  312070             :           ROSE_DLL_API friend       SgDictionaryComprehension* isSgDictionaryComprehension(       SgNode * s );
  312071             : 
  312072             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  312073             :           ROSE_DLL_API friend const SgDictionaryComprehension* isSgDictionaryComprehension( const SgNode * s );
  312074             : 
  312075             :      // ******************************************
  312076             :      // * Memory Pool / New / Delete
  312077             :      // ******************************************
  312078             : 
  312079             :      public:
  312080             :           /// \private
  312081             :           static const unsigned pool_size; //
  312082             :           /// \private
  312083             :           static std::vector<unsigned char *> pools; //
  312084             :           /// \private
  312085             :           static SgDictionaryComprehension * next_node; // 
  312086             : 
  312087             :           /// \private
  312088             :           static unsigned long initializeStorageClassArray(SgDictionaryComprehensionStorageClass *); //
  312089             : 
  312090             :           /// \private
  312091             :           static void clearMemoryPool(); //
  312092             :           static void deleteMemoryPool(); //
  312093             : 
  312094             :           /// \private
  312095             :           static void extendMemoryPoolForFileIO(); //
  312096             : 
  312097             :           /// \private
  312098             :           static SgDictionaryComprehension * getPointerFromGlobalIndex(unsigned long); //
  312099             :           /// \private
  312100             :           static SgDictionaryComprehension * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  312101             : 
  312102             :           /// \private
  312103             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  312104             :           /// \private
  312105             :           static void resetValidFreepointers(); //
  312106             :           /// \private
  312107             :           static unsigned long getNumberOfLastValidPointer(); //
  312108             : 
  312109             : 
  312110             : #if defined(INLINE_FUNCTIONS)
  312111             :       /*! \brief returns pointer to newly allocated IR node */
  312112             :           inline void *operator new (size_t size);
  312113             : #else
  312114             :       /*! \brief returns pointer to newly allocated IR node */
  312115             :           void *operator new (size_t size);
  312116             : #endif
  312117             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  312118             :           void operator delete (void* pointer, size_t size);
  312119             : 
  312120             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  312121           0 :           void operator delete (void* pointer)
  312122             :              {
  312123             :             // This is the generated delete operator...
  312124           0 :                SgDictionaryComprehension::operator delete (pointer,sizeof(SgDictionaryComprehension));
  312125             :              }
  312126             : 
  312127             :       /*! \brief Returns the total number of IR nodes of this type */
  312128             :           static size_t numberOfNodes();
  312129             : 
  312130             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  312131             :           static size_t memoryUsage();
  312132             : 
  312133             :       // End of scope which started in IR nodes specific code 
  312134             :       /* */
  312135             : 
  312136             :       /* name Internal Functions
  312137             :           \brief Internal functions ... incomplete-documentation
  312138             : 
  312139             :           These functions have been made public as part of the design, but they are suggested for internal use 
  312140             :           or by particularly knowledgeable users for specialized tools or applications.
  312141             : 
  312142             :           \internal We could not make these private because they are required by user for special purposes. And 
  312143             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  312144             :          
  312145             :        */
  312146             : 
  312147             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  312148             :        // overridden in every class by *generated* implementation
  312149             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  312150             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  312151             :        // MS: 06/28/02 container of names of variables or container indices 
  312152             :        // used used in the traversal to access AST successor nodes
  312153             :        // overridden in every class by *generated* implementation
  312154             :       /*! \brief container of names of variables or container indices used used in the traversal
  312155             :           to access AST successor nodes overridden in every class by *generated* implementation */
  312156             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  312157             : 
  312158             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  312159             :        // than all the vector copies. The implementation for these functions is generated for each class.
  312160             :       /*! \brief return number of children in the traversal successor list */
  312161             :           virtual size_t get_numberOfTraversalSuccessors() override;
  312162             :       /*! \brief index-based access to traversal successors by index number */
  312163             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  312164             :       /*! \brief index-based access to traversal successors by child node */
  312165             :           virtual size_t get_childIndex(SgNode *child) override;
  312166             : 
  312167             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  312168             :        // MS: 08/16/2002 method for generating RTI information
  312169             :       /*! \brief return C++ Runtime-Time-Information */
  312170             :           virtual RTIReturnType roseRTI() override;
  312171             : #endif
  312172             :       /* */
  312173             : 
  312174             : 
  312175             : 
  312176             :       /* name Deprecated Functions
  312177             :           \brief Deprecated functions ... incomplete-documentation
  312178             : 
  312179             :           These functions have been deprecated from use.
  312180             :        */
  312181             :       /* */
  312182             : 
  312183             :       /*! returns a C style string (char*) representing the class name */
  312184             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  312185             : 
  312186             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  312187             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  312188             : #if 0
  312189             :       /*! returns old style Sage II enum values */
  312190             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  312191             :       /*! returns old style Sage II enum values */
  312192             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  312193             : #endif
  312194             :       /* */
  312195             : 
  312196             : 
  312197             : 
  312198             : 
  312199             :      public:
  312200             :       /* name Traversal Support Functions
  312201             :           \brief Traversal support functions ... incomplete-documentation
  312202             : 
  312203             :           These functions have been made public as part of the design, but they are suggested for internal use 
  312204             :           or by particularly knowledgable users for specialized tools or applications.
  312205             :        */
  312206             :       /* */
  312207             : 
  312208             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  312209             :        // (inferior to ROSE traversal mechanism, experimental).
  312210             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  312211             :        */
  312212             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  312213             : 
  312214             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  312215             :       /*! \brief support for the classic visitor pattern done in GoF */
  312216             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  312217             : 
  312218             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  312219             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  312220             :        */
  312221             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  312222             : 
  312223             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  312224             :        */
  312225             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  312226             : 
  312227             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  312228             :        // This traversal helps support internal tools that call static member functions.
  312229             :        // note: this function operates on the memory pools.
  312230             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  312231             :        */
  312232             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  312233             :       /* */
  312234             : 
  312235             : 
  312236             :      public:
  312237             :       /* name Memory Allocation Functions
  312238             :           \brief Memory allocations functions ... incomplete-documentation
  312239             : 
  312240             :           These functions have been made public as part of the design, but they are suggested for internal use 
  312241             :           or by particularly knowledgable users for specialized tools or applications.
  312242             :        */
  312243             :       /* */
  312244             : 
  312245             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  312246             : 
  312247             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  312248             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  312249             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  312250             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  312251             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  312252             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  312253             :           being used with the AST File I/O mechanism.
  312254             :        */
  312255             :           virtual bool isInMemoryPool() override;
  312256             : 
  312257             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  312258             : 
  312259             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  312260             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  312261             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  312262             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  312263             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  312264             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  312265             :           being used with the AST File I/O mechanism.
  312266             :        */
  312267             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  312268             : 
  312269             :       // DQ (4/30/2006): Modified to be a const function.
  312270             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  312271             : 
  312272             :           This functions is part of general support for many possible tools to operate 
  312273             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  312274             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  312275             :           less than the set of pointers used by the AST file I/O. This is part of
  312276             :           work implemented by Andreas, and support tools such as the AST graph generation.
  312277             : 
  312278             :           \warning This function can return unexpected data members and thus the 
  312279             :                    order and the number of elements is unpredicable and subject 
  312280             :                    to change.
  312281             : 
  312282             :           \returns STL vector of pairs of SgNode* and strings
  312283             :        */
  312284             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  312285             : 
  312286             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  312287             : 
  312288             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  312289             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  312290             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  312291             : 
  312292             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  312293             :                    and subject to change.
  312294             :        */
  312295             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  312296             : 
  312297             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  312298             : 
  312299             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  312300             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  312301             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  312302             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  312303             : 
  312304             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  312305             : 
  312306             :           \returns long
  312307             :        */
  312308             :           virtual long getChildIndex( SgNode* childNode ) const override;
  312309             : 
  312310             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  312311             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  312312             :       /* \brief Constructor for use by AST File I/O Mechanism
  312313             : 
  312314             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  312315             :           which obtained via fast binary file I/O from disk.
  312316             :        */
  312317             :        // SgDictionaryComprehension( SgDictionaryComprehensionStorageClass& source );
  312318             : 
  312319             : 
  312320             : 
  312321             : 
  312322             : 
  312323             :  // JH (10/24/2005): methods added to support the ast file IO
  312324             :     private:
  312325             : 
  312326             :       /* name AST Memory Allocation Support Functions
  312327             :           \brief Memory allocations support....
  312328             : 
  312329             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  312330             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  312331             :           and support the AST File I/O Mechanism.
  312332             :        */
  312333             :       /* */
  312334             : 
  312335             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  312336             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  312337             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  312338             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  312339             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  312340             :           a correspinding one in the AST_FILE_IO class!
  312341             :        */
  312342             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  312343             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  312344             :       /* \brief Typedef used for low level memory access.
  312345             :        */
  312346             :        // typedef unsigned char* TestType;
  312347             : 
  312348             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  312349             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  312350             :       /* \brief Typedef used to hold memory addresses as values.
  312351             :        */
  312352             :        // typedef unsigned long  AddressType;
  312353             : 
  312354             : 
  312355             : 
  312356             :        // necessary, to have direct access to the p_freepointer and the private methods !
  312357             :       /*! \brief friend class declaration to support AST File I/O */
  312358             :           friend class AST_FILE_IO;
  312359             : 
  312360             :       /*! \brief friend class declaration to support AST File I/O */
  312361             :           friend class SgDictionaryComprehensionStorageClass;
  312362             : 
  312363             :       /*! \brief friend class declaration to support AST File I/O */
  312364             :           friend class AstSpecificDataManagingClass;
  312365             : 
  312366             :       /*! \brief friend class declaration to support AST File I/O */
  312367             :           friend class AstSpecificDataManagingClassStorageClass;
  312368             :     public:
  312369             :       /*! \brief IR node constructor to support AST File I/O */
  312370             :           SgDictionaryComprehension( const SgDictionaryComprehensionStorageClass& source );
  312371             : 
  312372             :  // private: // JJW hack
  312373             :        /*
  312374             :           name AST Memory Allocation Support Variables
  312375             :           Memory allocations support variables 
  312376             : 
  312377             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  312378             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  312379             :           and support the AST File I/O Mechanism.
  312380             :        */
  312381             :       /* */
  312382             : 
  312383             :     public:
  312384             : 
  312385             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  312386             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  312387             :       // virtual SgNode* addRegExpAttribute();
  312388             :       /*! \brief Support for AST matching using regular expression.
  312389             : 
  312390             :           This support is incomplete and the subject of current research to define 
  312391             :           RegEx trees to support inexact matching.
  312392             :        */
  312393             :           SgDictionaryComprehension* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  312394             : 
  312395             : // *** COMMON CODE SECTION ENDS HERE ***
  312396             : 
  312397             : 
  312398             : // End of memberFunctionString
  312399             : // Start of memberFunctionString
  312400             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  312401             : 
  312402             :      // the generated cast function
  312403             :      // friend ROSE_DLL_API SgDictionaryComprehension* isSgDictionaryComprehension ( SgNode* s );
  312404             : 
  312405             :           typedef SgExpression base_node_type;
  312406             : 
  312407             : 
  312408             : // End of memberFunctionString
  312409             : // Start of memberFunctionString
  312410             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312411             : 
  312412             :           SgType* get_type() const override;
  312413             : 
  312414             : 
  312415             : // End of memberFunctionString
  312416             : // Start of memberFunctionString
  312417             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312418             : 
  312419             :           void post_construction_initialization() override;
  312420             : 
  312421             : 
  312422             : // End of memberFunctionString
  312423             : 
  312424             :      public: 
  312425             :          SgKeyDatumPair* get_element() const;
  312426             :          void set_element(SgKeyDatumPair* element);
  312427             : 
  312428             :      public: 
  312429             :          SgExprListExp* get_generators() const;
  312430             :          void set_generators(SgExprListExp* generators);
  312431             : 
  312432             : 
  312433             :      public: 
  312434             :          virtual ~SgDictionaryComprehension();
  312435             : 
  312436             : 
  312437             :      public: 
  312438             :          SgDictionaryComprehension(Sg_File_Info* startOfConstruct , SgKeyDatumPair* element = NULL, SgExprListExp* generators = NULL); 
  312439             :          SgDictionaryComprehension(SgKeyDatumPair* element, SgExprListExp* generators); 
  312440             : 
  312441             :     protected:
  312442             : // Start of memberFunctionString
  312443             : SgKeyDatumPair* p_element;
  312444             :           
  312445             : // End of memberFunctionString
  312446             : // Start of memberFunctionString
  312447             : SgExprListExp* p_generators;
  312448             :           
  312449             : // End of memberFunctionString
  312450             : 
  312451             :     friend struct Rose::Traits::generated::describe_node_t<SgDictionaryComprehension>;
  312452             :     friend struct Rose::Traits::generated::describe_field_t<SgDictionaryComprehension, SgKeyDatumPair*,&SgDictionaryComprehension::p_element>;
  312453             :     friend struct Rose::Traits::generated::describe_field_t<SgDictionaryComprehension, SgExprListExp*,&SgDictionaryComprehension::p_generators>;
  312454             : 
  312455             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312456             : 
  312457             : 
  312458             :    };
  312459             : #endif
  312460             : 
  312461             : // postdeclarations for SgDictionaryComprehension
  312462             : 
  312463             : /* #line 312464 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312464             : 
  312465             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  312466             : 
  312467             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312468             : 
  312469             : 
  312470             : /* #line 312471 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312471             : 
  312472             : 
  312473             : 
  312474             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312475             : 
  312476             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  312477             : //      This code is automatically generated for each 
  312478             : //      terminal and non-terminal within the defined 
  312479             : //      grammar.  There is a simple way to change the 
  312480             : //      code to fix bugs etc.  See the ROSE README file
  312481             : //      for directions.
  312482             : 
  312483             : // tps: (02/22/2010): Adding DLL export requirements
  312484             : #include "rosedll.h"
  312485             : 
  312486             : // predeclarations for SgNaryOp
  312487             : 
  312488             : /* #line 312489 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312489             : 
  312490             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  312491             : 
  312492             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312493             : 
  312494             : #if 1
  312495             : // Class Definition for SgNaryOp
  312496             : class ROSE_DLL_API SgNaryOp  : public SgExpression
  312497             :    {
  312498             :      public:
  312499             : 
  312500             : 
  312501             : /* #line 312502 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312502             : 
  312503             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  312504             : // Start of memberFunctionString
  312505             : /* #line 190 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312506             : 
  312507             :           int length() const ROSE_DEPRECATED_FUNCTION;
  312508             :           bool empty() const ROSE_DEPRECATED_FUNCTION;
  312509             :        // void operator_unparse( const char *, Unparse_Info &, ostream & );
  312510             : 
  312511             : 
  312512             : // End of memberFunctionString
  312513             : // Start of memberFunctionString
  312514             : /* #line 184 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312515             : 
  312516             :           SgExpression *get_next( int& n) const ROSE_DEPRECATED_FUNCTION;
  312517             :           int replace_expression( SgExpression *, SgExpression *) override ROSE_DEPRECATED_FUNCTION;
  312518             : 
  312519             : 
  312520             : // End of memberFunctionString
  312521             : // Start of memberFunctionString
  312522             : /* #line 890 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312523             : 
  312524             : 
  312525             :     SgExpressionPtrList& get_operands();
  312526             :     const SgExpressionPtrList& get_operands() const;
  312527             : 
  312528             :     VariantTList& get_operators();
  312529             :     const VariantTList& get_operators() const;
  312530             : 
  312531             :     virtual void append_operation(VariantT sg_operator, SgExpression* operand);
  312532             : 
  312533             : 
  312534             : 
  312535             : // End of memberFunctionString
  312536             : // Start of memberFunctionString
  312537             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  312538             : 
  312539             : // *** COMMON CODE SECTION BEGINS HERE ***
  312540             : 
  312541             :     public:
  312542             : 
  312543             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  312544             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  312545             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  312546             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  312547             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  312548             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  312549             : 
  312550             :       /*! \brief returns a string representing the class name */
  312551             :           virtual std::string class_name() const override;
  312552             : 
  312553             :       /*! \brief returns new style SageIII enum values */
  312554             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  312555             : 
  312556             :       /*! \brief static variant value */
  312557             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  312558             :        // static const VariantT static_variant = V_SgNaryOp;
  312559             :           enum { static_variant = V_SgNaryOp };
  312560             : 
  312561             :        /* the generated cast function */
  312562             :       /*! \brief Casts pointer from base class to derived class */
  312563             :           ROSE_DLL_API friend       SgNaryOp* isSgNaryOp(       SgNode * s );
  312564             : 
  312565             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  312566             :           ROSE_DLL_API friend const SgNaryOp* isSgNaryOp( const SgNode * s );
  312567             : 
  312568             :      // ******************************************
  312569             :      // * Memory Pool / New / Delete
  312570             :      // ******************************************
  312571             : 
  312572             :      public:
  312573             :           /// \private
  312574             :           static const unsigned pool_size; //
  312575             :           /// \private
  312576             :           static std::vector<unsigned char *> pools; //
  312577             :           /// \private
  312578             :           static SgNaryOp * next_node; // 
  312579             : 
  312580             :           /// \private
  312581             :           static unsigned long initializeStorageClassArray(SgNaryOpStorageClass *); //
  312582             : 
  312583             :           /// \private
  312584             :           static void clearMemoryPool(); //
  312585             :           static void deleteMemoryPool(); //
  312586             : 
  312587             :           /// \private
  312588             :           static void extendMemoryPoolForFileIO(); //
  312589             : 
  312590             :           /// \private
  312591             :           static SgNaryOp * getPointerFromGlobalIndex(unsigned long); //
  312592             :           /// \private
  312593             :           static SgNaryOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  312594             : 
  312595             :           /// \private
  312596             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  312597             :           /// \private
  312598             :           static void resetValidFreepointers(); //
  312599             :           /// \private
  312600             :           static unsigned long getNumberOfLastValidPointer(); //
  312601             : 
  312602             : 
  312603             : #if defined(INLINE_FUNCTIONS)
  312604             :       /*! \brief returns pointer to newly allocated IR node */
  312605             :           inline void *operator new (size_t size);
  312606             : #else
  312607             :       /*! \brief returns pointer to newly allocated IR node */
  312608             :           void *operator new (size_t size);
  312609             : #endif
  312610             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  312611             :           void operator delete (void* pointer, size_t size);
  312612             : 
  312613             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  312614           0 :           void operator delete (void* pointer)
  312615             :              {
  312616             :             // This is the generated delete operator...
  312617           0 :                SgNaryOp::operator delete (pointer,sizeof(SgNaryOp));
  312618             :              }
  312619             : 
  312620             :       /*! \brief Returns the total number of IR nodes of this type */
  312621             :           static size_t numberOfNodes();
  312622             : 
  312623             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  312624             :           static size_t memoryUsage();
  312625             : 
  312626             :       // End of scope which started in IR nodes specific code 
  312627             :       /* */
  312628             : 
  312629             :       /* name Internal Functions
  312630             :           \brief Internal functions ... incomplete-documentation
  312631             : 
  312632             :           These functions have been made public as part of the design, but they are suggested for internal use 
  312633             :           or by particularly knowledgeable users for specialized tools or applications.
  312634             : 
  312635             :           \internal We could not make these private because they are required by user for special purposes. And 
  312636             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  312637             :          
  312638             :        */
  312639             : 
  312640             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  312641             :        // overridden in every class by *generated* implementation
  312642             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  312643             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  312644             :        // MS: 06/28/02 container of names of variables or container indices 
  312645             :        // used used in the traversal to access AST successor nodes
  312646             :        // overridden in every class by *generated* implementation
  312647             :       /*! \brief container of names of variables or container indices used used in the traversal
  312648             :           to access AST successor nodes overridden in every class by *generated* implementation */
  312649             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  312650             : 
  312651             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  312652             :        // than all the vector copies. The implementation for these functions is generated for each class.
  312653             :       /*! \brief return number of children in the traversal successor list */
  312654             :           virtual size_t get_numberOfTraversalSuccessors() override;
  312655             :       /*! \brief index-based access to traversal successors by index number */
  312656             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  312657             :       /*! \brief index-based access to traversal successors by child node */
  312658             :           virtual size_t get_childIndex(SgNode *child) override;
  312659             : 
  312660             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  312661             :        // MS: 08/16/2002 method for generating RTI information
  312662             :       /*! \brief return C++ Runtime-Time-Information */
  312663             :           virtual RTIReturnType roseRTI() override;
  312664             : #endif
  312665             :       /* */
  312666             : 
  312667             : 
  312668             : 
  312669             :       /* name Deprecated Functions
  312670             :           \brief Deprecated functions ... incomplete-documentation
  312671             : 
  312672             :           These functions have been deprecated from use.
  312673             :        */
  312674             :       /* */
  312675             : 
  312676             :       /*! returns a C style string (char*) representing the class name */
  312677             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  312678             : 
  312679             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  312680             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  312681             : #if 0
  312682             :       /*! returns old style Sage II enum values */
  312683             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  312684             :       /*! returns old style Sage II enum values */
  312685             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  312686             : #endif
  312687             :       /* */
  312688             : 
  312689             : 
  312690             : 
  312691             : 
  312692             :      public:
  312693             :       /* name Traversal Support Functions
  312694             :           \brief Traversal support functions ... incomplete-documentation
  312695             : 
  312696             :           These functions have been made public as part of the design, but they are suggested for internal use 
  312697             :           or by particularly knowledgable users for specialized tools or applications.
  312698             :        */
  312699             :       /* */
  312700             : 
  312701             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  312702             :        // (inferior to ROSE traversal mechanism, experimental).
  312703             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  312704             :        */
  312705             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  312706             : 
  312707             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  312708             :       /*! \brief support for the classic visitor pattern done in GoF */
  312709             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  312710             : 
  312711             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  312712             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  312713             :        */
  312714             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  312715             : 
  312716             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  312717             :        */
  312718             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  312719             : 
  312720             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  312721             :        // This traversal helps support internal tools that call static member functions.
  312722             :        // note: this function operates on the memory pools.
  312723             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  312724             :        */
  312725             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  312726             :       /* */
  312727             : 
  312728             : 
  312729             :      public:
  312730             :       /* name Memory Allocation Functions
  312731             :           \brief Memory allocations functions ... incomplete-documentation
  312732             : 
  312733             :           These functions have been made public as part of the design, but they are suggested for internal use 
  312734             :           or by particularly knowledgable users for specialized tools or applications.
  312735             :        */
  312736             :       /* */
  312737             : 
  312738             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  312739             : 
  312740             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  312741             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  312742             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  312743             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  312744             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  312745             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  312746             :           being used with the AST File I/O mechanism.
  312747             :        */
  312748             :           virtual bool isInMemoryPool() override;
  312749             : 
  312750             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  312751             : 
  312752             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  312753             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  312754             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  312755             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  312756             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  312757             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  312758             :           being used with the AST File I/O mechanism.
  312759             :        */
  312760             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  312761             : 
  312762             :       // DQ (4/30/2006): Modified to be a const function.
  312763             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  312764             : 
  312765             :           This functions is part of general support for many possible tools to operate 
  312766             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  312767             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  312768             :           less than the set of pointers used by the AST file I/O. This is part of
  312769             :           work implemented by Andreas, and support tools such as the AST graph generation.
  312770             : 
  312771             :           \warning This function can return unexpected data members and thus the 
  312772             :                    order and the number of elements is unpredicable and subject 
  312773             :                    to change.
  312774             : 
  312775             :           \returns STL vector of pairs of SgNode* and strings
  312776             :        */
  312777             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  312778             : 
  312779             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  312780             : 
  312781             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  312782             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  312783             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  312784             : 
  312785             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  312786             :                    and subject to change.
  312787             :        */
  312788             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  312789             : 
  312790             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  312791             : 
  312792             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  312793             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  312794             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  312795             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  312796             : 
  312797             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  312798             : 
  312799             :           \returns long
  312800             :        */
  312801             :           virtual long getChildIndex( SgNode* childNode ) const override;
  312802             : 
  312803             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  312804             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  312805             :       /* \brief Constructor for use by AST File I/O Mechanism
  312806             : 
  312807             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  312808             :           which obtained via fast binary file I/O from disk.
  312809             :        */
  312810             :        // SgNaryOp( SgNaryOpStorageClass& source );
  312811             : 
  312812             : 
  312813             : 
  312814             : 
  312815             : 
  312816             :  // JH (10/24/2005): methods added to support the ast file IO
  312817             :     private:
  312818             : 
  312819             :       /* name AST Memory Allocation Support Functions
  312820             :           \brief Memory allocations support....
  312821             : 
  312822             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  312823             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  312824             :           and support the AST File I/O Mechanism.
  312825             :        */
  312826             :       /* */
  312827             : 
  312828             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  312829             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  312830             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  312831             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  312832             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  312833             :           a correspinding one in the AST_FILE_IO class!
  312834             :        */
  312835             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  312836             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  312837             :       /* \brief Typedef used for low level memory access.
  312838             :        */
  312839             :        // typedef unsigned char* TestType;
  312840             : 
  312841             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  312842             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  312843             :       /* \brief Typedef used to hold memory addresses as values.
  312844             :        */
  312845             :        // typedef unsigned long  AddressType;
  312846             : 
  312847             : 
  312848             : 
  312849             :        // necessary, to have direct access to the p_freepointer and the private methods !
  312850             :       /*! \brief friend class declaration to support AST File I/O */
  312851             :           friend class AST_FILE_IO;
  312852             : 
  312853             :       /*! \brief friend class declaration to support AST File I/O */
  312854             :           friend class SgNaryOpStorageClass;
  312855             : 
  312856             :       /*! \brief friend class declaration to support AST File I/O */
  312857             :           friend class AstSpecificDataManagingClass;
  312858             : 
  312859             :       /*! \brief friend class declaration to support AST File I/O */
  312860             :           friend class AstSpecificDataManagingClassStorageClass;
  312861             :     public:
  312862             :       /*! \brief IR node constructor to support AST File I/O */
  312863             :           SgNaryOp( const SgNaryOpStorageClass& source );
  312864             : 
  312865             :  // private: // JJW hack
  312866             :        /*
  312867             :           name AST Memory Allocation Support Variables
  312868             :           Memory allocations support variables 
  312869             : 
  312870             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  312871             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  312872             :           and support the AST File I/O Mechanism.
  312873             :        */
  312874             :       /* */
  312875             : 
  312876             :     public:
  312877             : 
  312878             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  312879             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  312880             :       // virtual SgNode* addRegExpAttribute();
  312881             :       /*! \brief Support for AST matching using regular expression.
  312882             : 
  312883             :           This support is incomplete and the subject of current research to define 
  312884             :           RegEx trees to support inexact matching.
  312885             :        */
  312886             :           SgNaryOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  312887             : 
  312888             : // *** COMMON CODE SECTION ENDS HERE ***
  312889             : 
  312890             : 
  312891             : // End of memberFunctionString
  312892             : // Start of memberFunctionString
  312893             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  312894             : 
  312895             :      // the generated cast function
  312896             :      // friend ROSE_DLL_API SgNaryOp* isSgNaryOp ( SgNode* s );
  312897             : 
  312898             :           typedef SgExpression base_node_type;
  312899             : 
  312900             : 
  312901             : // End of memberFunctionString
  312902             : // Start of memberFunctionString
  312903             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312904             : 
  312905             :           void post_construction_initialization() override;
  312906             : 
  312907             : 
  312908             : // End of memberFunctionString
  312909             : 
  312910             : 
  312911             : 
  312912             : 
  312913             :      public: 
  312914             :          virtual ~SgNaryOp();
  312915             : 
  312916             : 
  312917             :      public: 
  312918             :          SgNaryOp(Sg_File_Info* startOfConstruct ); 
  312919             :          SgNaryOp(); 
  312920             : 
  312921             :     protected:
  312922             : // Start of memberFunctionString
  312923             : SgExpressionPtrList p_operands;
  312924             :           
  312925             : // End of memberFunctionString
  312926             : // Start of memberFunctionString
  312927             : VariantTList p_operators;
  312928             :           
  312929             : // End of memberFunctionString
  312930             : 
  312931             :     friend struct Rose::Traits::generated::describe_node_t<SgNaryOp>;
  312932             :     friend struct Rose::Traits::generated::describe_field_t<SgNaryOp, SgExpressionPtrList,&SgNaryOp::p_operands>;
  312933             :     friend struct Rose::Traits::generated::describe_field_t<SgNaryOp, VariantTList,&SgNaryOp::p_operators>;
  312934             : 
  312935             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312936             : 
  312937             : 
  312938             :    };
  312939             : #endif
  312940             : 
  312941             : // postdeclarations for SgNaryOp
  312942             : 
  312943             : /* #line 312944 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312944             : 
  312945             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  312946             : 
  312947             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312948             : 
  312949             : 
  312950             : /* #line 312951 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312951             : 
  312952             : 
  312953             : 
  312954             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312955             : 
  312956             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  312957             : //      This code is automatically generated for each 
  312958             : //      terminal and non-terminal within the defined 
  312959             : //      grammar.  There is a simple way to change the 
  312960             : //      code to fix bugs etc.  See the ROSE README file
  312961             : //      for directions.
  312962             : 
  312963             : // tps: (02/22/2010): Adding DLL export requirements
  312964             : #include "rosedll.h"
  312965             : 
  312966             : // predeclarations for SgNaryBooleanOp
  312967             : 
  312968             : /* #line 312969 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312969             : 
  312970             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  312971             : 
  312972             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  312973             : 
  312974             : #if 1
  312975             : // Class Definition for SgNaryBooleanOp
  312976             : class ROSE_DLL_API SgNaryBooleanOp  : public SgNaryOp
  312977             :    {
  312978             :      public:
  312979             : 
  312980             : 
  312981             : /* #line 312982 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  312982             : 
  312983             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  312984             : // Start of memberFunctionString
  312985             : /* #line 906 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  312986             : 
  312987             :     virtual SgType* get_type() const override;
  312988             : 
  312989             : 
  312990             : // End of memberFunctionString
  312991             : // Start of memberFunctionString
  312992             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  312993             : 
  312994             : // *** COMMON CODE SECTION BEGINS HERE ***
  312995             : 
  312996             :     public:
  312997             : 
  312998             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  312999             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  313000             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  313001             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  313002             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  313003             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  313004             : 
  313005             :       /*! \brief returns a string representing the class name */
  313006             :           virtual std::string class_name() const override;
  313007             : 
  313008             :       /*! \brief returns new style SageIII enum values */
  313009             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  313010             : 
  313011             :       /*! \brief static variant value */
  313012             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  313013             :        // static const VariantT static_variant = V_SgNaryBooleanOp;
  313014             :           enum { static_variant = V_SgNaryBooleanOp };
  313015             : 
  313016             :        /* the generated cast function */
  313017             :       /*! \brief Casts pointer from base class to derived class */
  313018             :           ROSE_DLL_API friend       SgNaryBooleanOp* isSgNaryBooleanOp(       SgNode * s );
  313019             : 
  313020             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  313021             :           ROSE_DLL_API friend const SgNaryBooleanOp* isSgNaryBooleanOp( const SgNode * s );
  313022             : 
  313023             :      // ******************************************
  313024             :      // * Memory Pool / New / Delete
  313025             :      // ******************************************
  313026             : 
  313027             :      public:
  313028             :           /// \private
  313029             :           static const unsigned pool_size; //
  313030             :           /// \private
  313031             :           static std::vector<unsigned char *> pools; //
  313032             :           /// \private
  313033             :           static SgNaryBooleanOp * next_node; // 
  313034             : 
  313035             :           /// \private
  313036             :           static unsigned long initializeStorageClassArray(SgNaryBooleanOpStorageClass *); //
  313037             : 
  313038             :           /// \private
  313039             :           static void clearMemoryPool(); //
  313040             :           static void deleteMemoryPool(); //
  313041             : 
  313042             :           /// \private
  313043             :           static void extendMemoryPoolForFileIO(); //
  313044             : 
  313045             :           /// \private
  313046             :           static SgNaryBooleanOp * getPointerFromGlobalIndex(unsigned long); //
  313047             :           /// \private
  313048             :           static SgNaryBooleanOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  313049             : 
  313050             :           /// \private
  313051             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  313052             :           /// \private
  313053             :           static void resetValidFreepointers(); //
  313054             :           /// \private
  313055             :           static unsigned long getNumberOfLastValidPointer(); //
  313056             : 
  313057             : 
  313058             : #if defined(INLINE_FUNCTIONS)
  313059             :       /*! \brief returns pointer to newly allocated IR node */
  313060             :           inline void *operator new (size_t size);
  313061             : #else
  313062             :       /*! \brief returns pointer to newly allocated IR node */
  313063             :           void *operator new (size_t size);
  313064             : #endif
  313065             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  313066             :           void operator delete (void* pointer, size_t size);
  313067             : 
  313068             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  313069           0 :           void operator delete (void* pointer)
  313070             :              {
  313071             :             // This is the generated delete operator...
  313072           0 :                SgNaryBooleanOp::operator delete (pointer,sizeof(SgNaryBooleanOp));
  313073             :              }
  313074             : 
  313075             :       /*! \brief Returns the total number of IR nodes of this type */
  313076             :           static size_t numberOfNodes();
  313077             : 
  313078             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  313079             :           static size_t memoryUsage();
  313080             : 
  313081             :       // End of scope which started in IR nodes specific code 
  313082             :       /* */
  313083             : 
  313084             :       /* name Internal Functions
  313085             :           \brief Internal functions ... incomplete-documentation
  313086             : 
  313087             :           These functions have been made public as part of the design, but they are suggested for internal use 
  313088             :           or by particularly knowledgeable users for specialized tools or applications.
  313089             : 
  313090             :           \internal We could not make these private because they are required by user for special purposes. And 
  313091             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  313092             :          
  313093             :        */
  313094             : 
  313095             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  313096             :        // overridden in every class by *generated* implementation
  313097             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  313098             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  313099             :        // MS: 06/28/02 container of names of variables or container indices 
  313100             :        // used used in the traversal to access AST successor nodes
  313101             :        // overridden in every class by *generated* implementation
  313102             :       /*! \brief container of names of variables or container indices used used in the traversal
  313103             :           to access AST successor nodes overridden in every class by *generated* implementation */
  313104             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  313105             : 
  313106             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  313107             :        // than all the vector copies. The implementation for these functions is generated for each class.
  313108             :       /*! \brief return number of children in the traversal successor list */
  313109             :           virtual size_t get_numberOfTraversalSuccessors() override;
  313110             :       /*! \brief index-based access to traversal successors by index number */
  313111             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  313112             :       /*! \brief index-based access to traversal successors by child node */
  313113             :           virtual size_t get_childIndex(SgNode *child) override;
  313114             : 
  313115             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  313116             :        // MS: 08/16/2002 method for generating RTI information
  313117             :       /*! \brief return C++ Runtime-Time-Information */
  313118             :           virtual RTIReturnType roseRTI() override;
  313119             : #endif
  313120             :       /* */
  313121             : 
  313122             : 
  313123             : 
  313124             :       /* name Deprecated Functions
  313125             :           \brief Deprecated functions ... incomplete-documentation
  313126             : 
  313127             :           These functions have been deprecated from use.
  313128             :        */
  313129             :       /* */
  313130             : 
  313131             :       /*! returns a C style string (char*) representing the class name */
  313132             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  313133             : 
  313134             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  313135             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  313136             : #if 0
  313137             :       /*! returns old style Sage II enum values */
  313138             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  313139             :       /*! returns old style Sage II enum values */
  313140             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  313141             : #endif
  313142             :       /* */
  313143             : 
  313144             : 
  313145             : 
  313146             : 
  313147             :      public:
  313148             :       /* name Traversal Support Functions
  313149             :           \brief Traversal support functions ... incomplete-documentation
  313150             : 
  313151             :           These functions have been made public as part of the design, but they are suggested for internal use 
  313152             :           or by particularly knowledgable users for specialized tools or applications.
  313153             :        */
  313154             :       /* */
  313155             : 
  313156             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  313157             :        // (inferior to ROSE traversal mechanism, experimental).
  313158             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  313159             :        */
  313160             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  313161             : 
  313162             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  313163             :       /*! \brief support for the classic visitor pattern done in GoF */
  313164             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  313165             : 
  313166             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  313167             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  313168             :        */
  313169             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  313170             : 
  313171             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  313172             :        */
  313173             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  313174             : 
  313175             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  313176             :        // This traversal helps support internal tools that call static member functions.
  313177             :        // note: this function operates on the memory pools.
  313178             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  313179             :        */
  313180             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  313181             :       /* */
  313182             : 
  313183             : 
  313184             :      public:
  313185             :       /* name Memory Allocation Functions
  313186             :           \brief Memory allocations functions ... incomplete-documentation
  313187             : 
  313188             :           These functions have been made public as part of the design, but they are suggested for internal use 
  313189             :           or by particularly knowledgable users for specialized tools or applications.
  313190             :        */
  313191             :       /* */
  313192             : 
  313193             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  313194             : 
  313195             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  313196             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  313197             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  313198             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  313199             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  313200             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  313201             :           being used with the AST File I/O mechanism.
  313202             :        */
  313203             :           virtual bool isInMemoryPool() override;
  313204             : 
  313205             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  313206             : 
  313207             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  313208             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  313209             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  313210             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  313211             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  313212             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  313213             :           being used with the AST File I/O mechanism.
  313214             :        */
  313215             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  313216             : 
  313217             :       // DQ (4/30/2006): Modified to be a const function.
  313218             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  313219             : 
  313220             :           This functions is part of general support for many possible tools to operate 
  313221             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  313222             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  313223             :           less than the set of pointers used by the AST file I/O. This is part of
  313224             :           work implemented by Andreas, and support tools such as the AST graph generation.
  313225             : 
  313226             :           \warning This function can return unexpected data members and thus the 
  313227             :                    order and the number of elements is unpredicable and subject 
  313228             :                    to change.
  313229             : 
  313230             :           \returns STL vector of pairs of SgNode* and strings
  313231             :        */
  313232             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  313233             : 
  313234             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  313235             : 
  313236             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  313237             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  313238             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  313239             : 
  313240             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  313241             :                    and subject to change.
  313242             :        */
  313243             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  313244             : 
  313245             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  313246             : 
  313247             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  313248             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  313249             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  313250             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  313251             : 
  313252             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  313253             : 
  313254             :           \returns long
  313255             :        */
  313256             :           virtual long getChildIndex( SgNode* childNode ) const override;
  313257             : 
  313258             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  313259             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  313260             :       /* \brief Constructor for use by AST File I/O Mechanism
  313261             : 
  313262             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  313263             :           which obtained via fast binary file I/O from disk.
  313264             :        */
  313265             :        // SgNaryBooleanOp( SgNaryBooleanOpStorageClass& source );
  313266             : 
  313267             : 
  313268             : 
  313269             : 
  313270             : 
  313271             :  // JH (10/24/2005): methods added to support the ast file IO
  313272             :     private:
  313273             : 
  313274             :       /* name AST Memory Allocation Support Functions
  313275             :           \brief Memory allocations support....
  313276             : 
  313277             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  313278             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  313279             :           and support the AST File I/O Mechanism.
  313280             :        */
  313281             :       /* */
  313282             : 
  313283             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  313284             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  313285             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  313286             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  313287             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  313288             :           a correspinding one in the AST_FILE_IO class!
  313289             :        */
  313290             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  313291             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  313292             :       /* \brief Typedef used for low level memory access.
  313293             :        */
  313294             :        // typedef unsigned char* TestType;
  313295             : 
  313296             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  313297             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  313298             :       /* \brief Typedef used to hold memory addresses as values.
  313299             :        */
  313300             :        // typedef unsigned long  AddressType;
  313301             : 
  313302             : 
  313303             : 
  313304             :        // necessary, to have direct access to the p_freepointer and the private methods !
  313305             :       /*! \brief friend class declaration to support AST File I/O */
  313306             :           friend class AST_FILE_IO;
  313307             : 
  313308             :       /*! \brief friend class declaration to support AST File I/O */
  313309             :           friend class SgNaryBooleanOpStorageClass;
  313310             : 
  313311             :       /*! \brief friend class declaration to support AST File I/O */
  313312             :           friend class AstSpecificDataManagingClass;
  313313             : 
  313314             :       /*! \brief friend class declaration to support AST File I/O */
  313315             :           friend class AstSpecificDataManagingClassStorageClass;
  313316             :     public:
  313317             :       /*! \brief IR node constructor to support AST File I/O */
  313318             :           SgNaryBooleanOp( const SgNaryBooleanOpStorageClass& source );
  313319             : 
  313320             :  // private: // JJW hack
  313321             :        /*
  313322             :           name AST Memory Allocation Support Variables
  313323             :           Memory allocations support variables 
  313324             : 
  313325             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  313326             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  313327             :           and support the AST File I/O Mechanism.
  313328             :        */
  313329             :       /* */
  313330             : 
  313331             :     public:
  313332             : 
  313333             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  313334             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  313335             :       // virtual SgNode* addRegExpAttribute();
  313336             :       /*! \brief Support for AST matching using regular expression.
  313337             : 
  313338             :           This support is incomplete and the subject of current research to define 
  313339             :           RegEx trees to support inexact matching.
  313340             :        */
  313341             :           SgNaryBooleanOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  313342             : 
  313343             : // *** COMMON CODE SECTION ENDS HERE ***
  313344             : 
  313345             : 
  313346             : // End of memberFunctionString
  313347             : // Start of memberFunctionString
  313348             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  313349             : 
  313350             :      // the generated cast function
  313351             :      // friend ROSE_DLL_API SgNaryBooleanOp* isSgNaryBooleanOp ( SgNode* s );
  313352             : 
  313353             :           typedef SgNaryOp base_node_type;
  313354             : 
  313355             : 
  313356             : // End of memberFunctionString
  313357             : // Start of memberFunctionString
  313358             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  313359             : 
  313360             :           void post_construction_initialization() override;
  313361             : 
  313362             : 
  313363             : // End of memberFunctionString
  313364             : // Start of memberFunctionString
  313365             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  313366             : 
  313367           0 :           int precedence() const override { return 13; }
  313368             : 
  313369             : 
  313370             : // End of memberFunctionString
  313371             : 
  313372             : 
  313373             :      public: 
  313374             :          virtual ~SgNaryBooleanOp();
  313375             : 
  313376             : 
  313377             :      public: 
  313378             :          SgNaryBooleanOp(Sg_File_Info* startOfConstruct ); 
  313379             :          SgNaryBooleanOp(); 
  313380             : 
  313381             :     protected:
  313382             : 
  313383             :     friend struct Rose::Traits::generated::describe_node_t<SgNaryBooleanOp>;
  313384             : 
  313385             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313386             : 
  313387             : 
  313388             :    };
  313389             : #endif
  313390             : 
  313391             : // postdeclarations for SgNaryBooleanOp
  313392             : 
  313393             : /* #line 313394 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313394             : 
  313395             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  313396             : 
  313397             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313398             : 
  313399             : 
  313400             : /* #line 313401 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313401             : 
  313402             : 
  313403             : 
  313404             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313405             : 
  313406             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  313407             : //      This code is automatically generated for each 
  313408             : //      terminal and non-terminal within the defined 
  313409             : //      grammar.  There is a simple way to change the 
  313410             : //      code to fix bugs etc.  See the ROSE README file
  313411             : //      for directions.
  313412             : 
  313413             : // tps: (02/22/2010): Adding DLL export requirements
  313414             : #include "rosedll.h"
  313415             : 
  313416             : // predeclarations for SgNaryComparisonOp
  313417             : 
  313418             : /* #line 313419 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313419             : 
  313420             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  313421             : 
  313422             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313423             : 
  313424             : #if 1
  313425             : // Class Definition for SgNaryComparisonOp
  313426             : class ROSE_DLL_API SgNaryComparisonOp  : public SgNaryOp
  313427             :    {
  313428             :      public:
  313429             : 
  313430             : 
  313431             : /* #line 313432 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313432             : 
  313433             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  313434             : // Start of memberFunctionString
  313435             : /* #line 902 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  313436             : 
  313437             :     virtual SgType* get_type() const override;
  313438             : 
  313439             : 
  313440             : // End of memberFunctionString
  313441             : // Start of memberFunctionString
  313442             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  313443             : 
  313444             : // *** COMMON CODE SECTION BEGINS HERE ***
  313445             : 
  313446             :     public:
  313447             : 
  313448             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  313449             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  313450             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  313451             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  313452             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  313453             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  313454             : 
  313455             :       /*! \brief returns a string representing the class name */
  313456             :           virtual std::string class_name() const override;
  313457             : 
  313458             :       /*! \brief returns new style SageIII enum values */
  313459             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  313460             : 
  313461             :       /*! \brief static variant value */
  313462             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  313463             :        // static const VariantT static_variant = V_SgNaryComparisonOp;
  313464             :           enum { static_variant = V_SgNaryComparisonOp };
  313465             : 
  313466             :        /* the generated cast function */
  313467             :       /*! \brief Casts pointer from base class to derived class */
  313468             :           ROSE_DLL_API friend       SgNaryComparisonOp* isSgNaryComparisonOp(       SgNode * s );
  313469             : 
  313470             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  313471             :           ROSE_DLL_API friend const SgNaryComparisonOp* isSgNaryComparisonOp( const SgNode * s );
  313472             : 
  313473             :      // ******************************************
  313474             :      // * Memory Pool / New / Delete
  313475             :      // ******************************************
  313476             : 
  313477             :      public:
  313478             :           /// \private
  313479             :           static const unsigned pool_size; //
  313480             :           /// \private
  313481             :           static std::vector<unsigned char *> pools; //
  313482             :           /// \private
  313483             :           static SgNaryComparisonOp * next_node; // 
  313484             : 
  313485             :           /// \private
  313486             :           static unsigned long initializeStorageClassArray(SgNaryComparisonOpStorageClass *); //
  313487             : 
  313488             :           /// \private
  313489             :           static void clearMemoryPool(); //
  313490             :           static void deleteMemoryPool(); //
  313491             : 
  313492             :           /// \private
  313493             :           static void extendMemoryPoolForFileIO(); //
  313494             : 
  313495             :           /// \private
  313496             :           static SgNaryComparisonOp * getPointerFromGlobalIndex(unsigned long); //
  313497             :           /// \private
  313498             :           static SgNaryComparisonOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  313499             : 
  313500             :           /// \private
  313501             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  313502             :           /// \private
  313503             :           static void resetValidFreepointers(); //
  313504             :           /// \private
  313505             :           static unsigned long getNumberOfLastValidPointer(); //
  313506             : 
  313507             : 
  313508             : #if defined(INLINE_FUNCTIONS)
  313509             :       /*! \brief returns pointer to newly allocated IR node */
  313510             :           inline void *operator new (size_t size);
  313511             : #else
  313512             :       /*! \brief returns pointer to newly allocated IR node */
  313513             :           void *operator new (size_t size);
  313514             : #endif
  313515             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  313516             :           void operator delete (void* pointer, size_t size);
  313517             : 
  313518             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  313519           0 :           void operator delete (void* pointer)
  313520             :              {
  313521             :             // This is the generated delete operator...
  313522           0 :                SgNaryComparisonOp::operator delete (pointer,sizeof(SgNaryComparisonOp));
  313523             :              }
  313524             : 
  313525             :       /*! \brief Returns the total number of IR nodes of this type */
  313526             :           static size_t numberOfNodes();
  313527             : 
  313528             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  313529             :           static size_t memoryUsage();
  313530             : 
  313531             :       // End of scope which started in IR nodes specific code 
  313532             :       /* */
  313533             : 
  313534             :       /* name Internal Functions
  313535             :           \brief Internal functions ... incomplete-documentation
  313536             : 
  313537             :           These functions have been made public as part of the design, but they are suggested for internal use 
  313538             :           or by particularly knowledgeable users for specialized tools or applications.
  313539             : 
  313540             :           \internal We could not make these private because they are required by user for special purposes. And 
  313541             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  313542             :          
  313543             :        */
  313544             : 
  313545             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  313546             :        // overridden in every class by *generated* implementation
  313547             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  313548             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  313549             :        // MS: 06/28/02 container of names of variables or container indices 
  313550             :        // used used in the traversal to access AST successor nodes
  313551             :        // overridden in every class by *generated* implementation
  313552             :       /*! \brief container of names of variables or container indices used used in the traversal
  313553             :           to access AST successor nodes overridden in every class by *generated* implementation */
  313554             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  313555             : 
  313556             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  313557             :        // than all the vector copies. The implementation for these functions is generated for each class.
  313558             :       /*! \brief return number of children in the traversal successor list */
  313559             :           virtual size_t get_numberOfTraversalSuccessors() override;
  313560             :       /*! \brief index-based access to traversal successors by index number */
  313561             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  313562             :       /*! \brief index-based access to traversal successors by child node */
  313563             :           virtual size_t get_childIndex(SgNode *child) override;
  313564             : 
  313565             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  313566             :        // MS: 08/16/2002 method for generating RTI information
  313567             :       /*! \brief return C++ Runtime-Time-Information */
  313568             :           virtual RTIReturnType roseRTI() override;
  313569             : #endif
  313570             :       /* */
  313571             : 
  313572             : 
  313573             : 
  313574             :       /* name Deprecated Functions
  313575             :           \brief Deprecated functions ... incomplete-documentation
  313576             : 
  313577             :           These functions have been deprecated from use.
  313578             :        */
  313579             :       /* */
  313580             : 
  313581             :       /*! returns a C style string (char*) representing the class name */
  313582             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  313583             : 
  313584             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  313585             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  313586             : #if 0
  313587             :       /*! returns old style Sage II enum values */
  313588             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  313589             :       /*! returns old style Sage II enum values */
  313590             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  313591             : #endif
  313592             :       /* */
  313593             : 
  313594             : 
  313595             : 
  313596             : 
  313597             :      public:
  313598             :       /* name Traversal Support Functions
  313599             :           \brief Traversal support functions ... incomplete-documentation
  313600             : 
  313601             :           These functions have been made public as part of the design, but they are suggested for internal use 
  313602             :           or by particularly knowledgable users for specialized tools or applications.
  313603             :        */
  313604             :       /* */
  313605             : 
  313606             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  313607             :        // (inferior to ROSE traversal mechanism, experimental).
  313608             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  313609             :        */
  313610             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  313611             : 
  313612             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  313613             :       /*! \brief support for the classic visitor pattern done in GoF */
  313614             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  313615             : 
  313616             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  313617             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  313618             :        */
  313619             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  313620             : 
  313621             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  313622             :        */
  313623             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  313624             : 
  313625             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  313626             :        // This traversal helps support internal tools that call static member functions.
  313627             :        // note: this function operates on the memory pools.
  313628             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  313629             :        */
  313630             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  313631             :       /* */
  313632             : 
  313633             : 
  313634             :      public:
  313635             :       /* name Memory Allocation Functions
  313636             :           \brief Memory allocations functions ... incomplete-documentation
  313637             : 
  313638             :           These functions have been made public as part of the design, but they are suggested for internal use 
  313639             :           or by particularly knowledgable users for specialized tools or applications.
  313640             :        */
  313641             :       /* */
  313642             : 
  313643             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  313644             : 
  313645             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  313646             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  313647             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  313648             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  313649             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  313650             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  313651             :           being used with the AST File I/O mechanism.
  313652             :        */
  313653             :           virtual bool isInMemoryPool() override;
  313654             : 
  313655             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  313656             : 
  313657             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  313658             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  313659             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  313660             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  313661             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  313662             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  313663             :           being used with the AST File I/O mechanism.
  313664             :        */
  313665             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  313666             : 
  313667             :       // DQ (4/30/2006): Modified to be a const function.
  313668             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  313669             : 
  313670             :           This functions is part of general support for many possible tools to operate 
  313671             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  313672             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  313673             :           less than the set of pointers used by the AST file I/O. This is part of
  313674             :           work implemented by Andreas, and support tools such as the AST graph generation.
  313675             : 
  313676             :           \warning This function can return unexpected data members and thus the 
  313677             :                    order and the number of elements is unpredicable and subject 
  313678             :                    to change.
  313679             : 
  313680             :           \returns STL vector of pairs of SgNode* and strings
  313681             :        */
  313682             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  313683             : 
  313684             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  313685             : 
  313686             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  313687             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  313688             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  313689             : 
  313690             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  313691             :                    and subject to change.
  313692             :        */
  313693             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  313694             : 
  313695             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  313696             : 
  313697             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  313698             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  313699             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  313700             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  313701             : 
  313702             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  313703             : 
  313704             :           \returns long
  313705             :        */
  313706             :           virtual long getChildIndex( SgNode* childNode ) const override;
  313707             : 
  313708             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  313709             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  313710             :       /* \brief Constructor for use by AST File I/O Mechanism
  313711             : 
  313712             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  313713             :           which obtained via fast binary file I/O from disk.
  313714             :        */
  313715             :        // SgNaryComparisonOp( SgNaryComparisonOpStorageClass& source );
  313716             : 
  313717             : 
  313718             : 
  313719             : 
  313720             : 
  313721             :  // JH (10/24/2005): methods added to support the ast file IO
  313722             :     private:
  313723             : 
  313724             :       /* name AST Memory Allocation Support Functions
  313725             :           \brief Memory allocations support....
  313726             : 
  313727             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  313728             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  313729             :           and support the AST File I/O Mechanism.
  313730             :        */
  313731             :       /* */
  313732             : 
  313733             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  313734             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  313735             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  313736             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  313737             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  313738             :           a correspinding one in the AST_FILE_IO class!
  313739             :        */
  313740             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  313741             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  313742             :       /* \brief Typedef used for low level memory access.
  313743             :        */
  313744             :        // typedef unsigned char* TestType;
  313745             : 
  313746             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  313747             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  313748             :       /* \brief Typedef used to hold memory addresses as values.
  313749             :        */
  313750             :        // typedef unsigned long  AddressType;
  313751             : 
  313752             : 
  313753             : 
  313754             :        // necessary, to have direct access to the p_freepointer and the private methods !
  313755             :       /*! \brief friend class declaration to support AST File I/O */
  313756             :           friend class AST_FILE_IO;
  313757             : 
  313758             :       /*! \brief friend class declaration to support AST File I/O */
  313759             :           friend class SgNaryComparisonOpStorageClass;
  313760             : 
  313761             :       /*! \brief friend class declaration to support AST File I/O */
  313762             :           friend class AstSpecificDataManagingClass;
  313763             : 
  313764             :       /*! \brief friend class declaration to support AST File I/O */
  313765             :           friend class AstSpecificDataManagingClassStorageClass;
  313766             :     public:
  313767             :       /*! \brief IR node constructor to support AST File I/O */
  313768             :           SgNaryComparisonOp( const SgNaryComparisonOpStorageClass& source );
  313769             : 
  313770             :  // private: // JJW hack
  313771             :        /*
  313772             :           name AST Memory Allocation Support Variables
  313773             :           Memory allocations support variables 
  313774             : 
  313775             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  313776             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  313777             :           and support the AST File I/O Mechanism.
  313778             :        */
  313779             :       /* */
  313780             : 
  313781             :     public:
  313782             : 
  313783             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  313784             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  313785             :       // virtual SgNode* addRegExpAttribute();
  313786             :       /*! \brief Support for AST matching using regular expression.
  313787             : 
  313788             :           This support is incomplete and the subject of current research to define 
  313789             :           RegEx trees to support inexact matching.
  313790             :        */
  313791             :           SgNaryComparisonOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  313792             : 
  313793             : // *** COMMON CODE SECTION ENDS HERE ***
  313794             : 
  313795             : 
  313796             : // End of memberFunctionString
  313797             : // Start of memberFunctionString
  313798             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  313799             : 
  313800             :      // the generated cast function
  313801             :      // friend ROSE_DLL_API SgNaryComparisonOp* isSgNaryComparisonOp ( SgNode* s );
  313802             : 
  313803             :           typedef SgNaryOp base_node_type;
  313804             : 
  313805             : 
  313806             : // End of memberFunctionString
  313807             : // Start of memberFunctionString
  313808             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  313809             : 
  313810             :           void post_construction_initialization() override;
  313811             : 
  313812             : 
  313813             : // End of memberFunctionString
  313814             : // Start of memberFunctionString
  313815             : /* #line 179 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  313816             : 
  313817           0 :           int precedence() const override { return 13; }
  313818             : 
  313819             : 
  313820             : // End of memberFunctionString
  313821             : 
  313822             : 
  313823             :      public: 
  313824             :          virtual ~SgNaryComparisonOp();
  313825             : 
  313826             : 
  313827             :      public: 
  313828             :          SgNaryComparisonOp(Sg_File_Info* startOfConstruct ); 
  313829             :          SgNaryComparisonOp(); 
  313830             : 
  313831             :     protected:
  313832             : 
  313833             :     friend struct Rose::Traits::generated::describe_node_t<SgNaryComparisonOp>;
  313834             : 
  313835             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313836             : 
  313837             : 
  313838             :    };
  313839             : #endif
  313840             : 
  313841             : // postdeclarations for SgNaryComparisonOp
  313842             : 
  313843             : /* #line 313844 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313844             : 
  313845             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  313846             : 
  313847             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313848             : 
  313849             : 
  313850             : /* #line 313851 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313851             : 
  313852             : 
  313853             : 
  313854             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313855             : 
  313856             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  313857             : //      This code is automatically generated for each 
  313858             : //      terminal and non-terminal within the defined 
  313859             : //      grammar.  There is a simple way to change the 
  313860             : //      code to fix bugs etc.  See the ROSE README file
  313861             : //      for directions.
  313862             : 
  313863             : // tps: (02/22/2010): Adding DLL export requirements
  313864             : #include "rosedll.h"
  313865             : 
  313866             : // predeclarations for SgStringConversion
  313867             : 
  313868             : /* #line 313869 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313869             : 
  313870             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  313871             : 
  313872             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  313873             : 
  313874             : #if 1
  313875             : // Class Definition for SgStringConversion
  313876             : class ROSE_DLL_API SgStringConversion  : public SgExpression
  313877             :    {
  313878             :      public:
  313879             : 
  313880             : 
  313881             : /* #line 313882 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  313882             : 
  313883             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  313884             : // Start of memberFunctionString
  313885             : /* #line 1397 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  313886             : 
  313887             : 
  313888             : 
  313889             : // End of memberFunctionString
  313890             : // Start of memberFunctionString
  313891             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  313892             : 
  313893             : // *** COMMON CODE SECTION BEGINS HERE ***
  313894             : 
  313895             :     public:
  313896             : 
  313897             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  313898             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  313899             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  313900             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  313901             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  313902             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  313903             : 
  313904             :       /*! \brief returns a string representing the class name */
  313905             :           virtual std::string class_name() const override;
  313906             : 
  313907             :       /*! \brief returns new style SageIII enum values */
  313908             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  313909             : 
  313910             :       /*! \brief static variant value */
  313911             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  313912             :        // static const VariantT static_variant = V_SgStringConversion;
  313913             :           enum { static_variant = V_SgStringConversion };
  313914             : 
  313915             :        /* the generated cast function */
  313916             :       /*! \brief Casts pointer from base class to derived class */
  313917             :           ROSE_DLL_API friend       SgStringConversion* isSgStringConversion(       SgNode * s );
  313918             : 
  313919             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  313920             :           ROSE_DLL_API friend const SgStringConversion* isSgStringConversion( const SgNode * s );
  313921             : 
  313922             :      // ******************************************
  313923             :      // * Memory Pool / New / Delete
  313924             :      // ******************************************
  313925             : 
  313926             :      public:
  313927             :           /// \private
  313928             :           static const unsigned pool_size; //
  313929             :           /// \private
  313930             :           static std::vector<unsigned char *> pools; //
  313931             :           /// \private
  313932             :           static SgStringConversion * next_node; // 
  313933             : 
  313934             :           /// \private
  313935             :           static unsigned long initializeStorageClassArray(SgStringConversionStorageClass *); //
  313936             : 
  313937             :           /// \private
  313938             :           static void clearMemoryPool(); //
  313939             :           static void deleteMemoryPool(); //
  313940             : 
  313941             :           /// \private
  313942             :           static void extendMemoryPoolForFileIO(); //
  313943             : 
  313944             :           /// \private
  313945             :           static SgStringConversion * getPointerFromGlobalIndex(unsigned long); //
  313946             :           /// \private
  313947             :           static SgStringConversion * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  313948             : 
  313949             :           /// \private
  313950             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  313951             :           /// \private
  313952             :           static void resetValidFreepointers(); //
  313953             :           /// \private
  313954             :           static unsigned long getNumberOfLastValidPointer(); //
  313955             : 
  313956             : 
  313957             : #if defined(INLINE_FUNCTIONS)
  313958             :       /*! \brief returns pointer to newly allocated IR node */
  313959             :           inline void *operator new (size_t size);
  313960             : #else
  313961             :       /*! \brief returns pointer to newly allocated IR node */
  313962             :           void *operator new (size_t size);
  313963             : #endif
  313964             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  313965             :           void operator delete (void* pointer, size_t size);
  313966             : 
  313967             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  313968           0 :           void operator delete (void* pointer)
  313969             :              {
  313970             :             // This is the generated delete operator...
  313971           0 :                SgStringConversion::operator delete (pointer,sizeof(SgStringConversion));
  313972             :              }
  313973             : 
  313974             :       /*! \brief Returns the total number of IR nodes of this type */
  313975             :           static size_t numberOfNodes();
  313976             : 
  313977             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  313978             :           static size_t memoryUsage();
  313979             : 
  313980             :       // End of scope which started in IR nodes specific code 
  313981             :       /* */
  313982             : 
  313983             :       /* name Internal Functions
  313984             :           \brief Internal functions ... incomplete-documentation
  313985             : 
  313986             :           These functions have been made public as part of the design, but they are suggested for internal use 
  313987             :           or by particularly knowledgeable users for specialized tools or applications.
  313988             : 
  313989             :           \internal We could not make these private because they are required by user for special purposes. And 
  313990             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  313991             :          
  313992             :        */
  313993             : 
  313994             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  313995             :        // overridden in every class by *generated* implementation
  313996             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  313997             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  313998             :        // MS: 06/28/02 container of names of variables or container indices 
  313999             :        // used used in the traversal to access AST successor nodes
  314000             :        // overridden in every class by *generated* implementation
  314001             :       /*! \brief container of names of variables or container indices used used in the traversal
  314002             :           to access AST successor nodes overridden in every class by *generated* implementation */
  314003             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  314004             : 
  314005             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  314006             :        // than all the vector copies. The implementation for these functions is generated for each class.
  314007             :       /*! \brief return number of children in the traversal successor list */
  314008             :           virtual size_t get_numberOfTraversalSuccessors() override;
  314009             :       /*! \brief index-based access to traversal successors by index number */
  314010             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  314011             :       /*! \brief index-based access to traversal successors by child node */
  314012             :           virtual size_t get_childIndex(SgNode *child) override;
  314013             : 
  314014             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  314015             :        // MS: 08/16/2002 method for generating RTI information
  314016             :       /*! \brief return C++ Runtime-Time-Information */
  314017             :           virtual RTIReturnType roseRTI() override;
  314018             : #endif
  314019             :       /* */
  314020             : 
  314021             : 
  314022             : 
  314023             :       /* name Deprecated Functions
  314024             :           \brief Deprecated functions ... incomplete-documentation
  314025             : 
  314026             :           These functions have been deprecated from use.
  314027             :        */
  314028             :       /* */
  314029             : 
  314030             :       /*! returns a C style string (char*) representing the class name */
  314031             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  314032             : 
  314033             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  314034             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  314035             : #if 0
  314036             :       /*! returns old style Sage II enum values */
  314037             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  314038             :       /*! returns old style Sage II enum values */
  314039             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  314040             : #endif
  314041             :       /* */
  314042             : 
  314043             : 
  314044             : 
  314045             : 
  314046             :      public:
  314047             :       /* name Traversal Support Functions
  314048             :           \brief Traversal support functions ... incomplete-documentation
  314049             : 
  314050             :           These functions have been made public as part of the design, but they are suggested for internal use 
  314051             :           or by particularly knowledgable users for specialized tools or applications.
  314052             :        */
  314053             :       /* */
  314054             : 
  314055             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  314056             :        // (inferior to ROSE traversal mechanism, experimental).
  314057             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  314058             :        */
  314059             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  314060             : 
  314061             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  314062             :       /*! \brief support for the classic visitor pattern done in GoF */
  314063             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  314064             : 
  314065             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  314066             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  314067             :        */
  314068             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  314069             : 
  314070             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  314071             :        */
  314072             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  314073             : 
  314074             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  314075             :        // This traversal helps support internal tools that call static member functions.
  314076             :        // note: this function operates on the memory pools.
  314077             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  314078             :        */
  314079             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  314080             :       /* */
  314081             : 
  314082             : 
  314083             :      public:
  314084             :       /* name Memory Allocation Functions
  314085             :           \brief Memory allocations functions ... incomplete-documentation
  314086             : 
  314087             :           These functions have been made public as part of the design, but they are suggested for internal use 
  314088             :           or by particularly knowledgable users for specialized tools or applications.
  314089             :        */
  314090             :       /* */
  314091             : 
  314092             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  314093             : 
  314094             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  314095             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  314096             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  314097             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  314098             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  314099             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  314100             :           being used with the AST File I/O mechanism.
  314101             :        */
  314102             :           virtual bool isInMemoryPool() override;
  314103             : 
  314104             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  314105             : 
  314106             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  314107             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  314108             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  314109             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  314110             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  314111             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  314112             :           being used with the AST File I/O mechanism.
  314113             :        */
  314114             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  314115             : 
  314116             :       // DQ (4/30/2006): Modified to be a const function.
  314117             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  314118             : 
  314119             :           This functions is part of general support for many possible tools to operate 
  314120             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  314121             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  314122             :           less than the set of pointers used by the AST file I/O. This is part of
  314123             :           work implemented by Andreas, and support tools such as the AST graph generation.
  314124             : 
  314125             :           \warning This function can return unexpected data members and thus the 
  314126             :                    order and the number of elements is unpredicable and subject 
  314127             :                    to change.
  314128             : 
  314129             :           \returns STL vector of pairs of SgNode* and strings
  314130             :        */
  314131             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  314132             : 
  314133             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  314134             : 
  314135             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  314136             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  314137             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  314138             : 
  314139             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  314140             :                    and subject to change.
  314141             :        */
  314142             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  314143             : 
  314144             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  314145             : 
  314146             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  314147             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  314148             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  314149             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  314150             : 
  314151             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  314152             : 
  314153             :           \returns long
  314154             :        */
  314155             :           virtual long getChildIndex( SgNode* childNode ) const override;
  314156             : 
  314157             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  314158             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  314159             :       /* \brief Constructor for use by AST File I/O Mechanism
  314160             : 
  314161             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  314162             :           which obtained via fast binary file I/O from disk.
  314163             :        */
  314164             :        // SgStringConversion( SgStringConversionStorageClass& source );
  314165             : 
  314166             : 
  314167             : 
  314168             : 
  314169             : 
  314170             :  // JH (10/24/2005): methods added to support the ast file IO
  314171             :     private:
  314172             : 
  314173             :       /* name AST Memory Allocation Support Functions
  314174             :           \brief Memory allocations support....
  314175             : 
  314176             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  314177             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  314178             :           and support the AST File I/O Mechanism.
  314179             :        */
  314180             :       /* */
  314181             : 
  314182             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  314183             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  314184             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  314185             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  314186             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  314187             :           a correspinding one in the AST_FILE_IO class!
  314188             :        */
  314189             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  314190             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  314191             :       /* \brief Typedef used for low level memory access.
  314192             :        */
  314193             :        // typedef unsigned char* TestType;
  314194             : 
  314195             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  314196             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  314197             :       /* \brief Typedef used to hold memory addresses as values.
  314198             :        */
  314199             :        // typedef unsigned long  AddressType;
  314200             : 
  314201             : 
  314202             : 
  314203             :        // necessary, to have direct access to the p_freepointer and the private methods !
  314204             :       /*! \brief friend class declaration to support AST File I/O */
  314205             :           friend class AST_FILE_IO;
  314206             : 
  314207             :       /*! \brief friend class declaration to support AST File I/O */
  314208             :           friend class SgStringConversionStorageClass;
  314209             : 
  314210             :       /*! \brief friend class declaration to support AST File I/O */
  314211             :           friend class AstSpecificDataManagingClass;
  314212             : 
  314213             :       /*! \brief friend class declaration to support AST File I/O */
  314214             :           friend class AstSpecificDataManagingClassStorageClass;
  314215             :     public:
  314216             :       /*! \brief IR node constructor to support AST File I/O */
  314217             :           SgStringConversion( const SgStringConversionStorageClass& source );
  314218             : 
  314219             :  // private: // JJW hack
  314220             :        /*
  314221             :           name AST Memory Allocation Support Variables
  314222             :           Memory allocations support variables 
  314223             : 
  314224             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  314225             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  314226             :           and support the AST File I/O Mechanism.
  314227             :        */
  314228             :       /* */
  314229             : 
  314230             :     public:
  314231             : 
  314232             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  314233             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  314234             :       // virtual SgNode* addRegExpAttribute();
  314235             :       /*! \brief Support for AST matching using regular expression.
  314236             : 
  314237             :           This support is incomplete and the subject of current research to define 
  314238             :           RegEx trees to support inexact matching.
  314239             :        */
  314240             :           SgStringConversion* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  314241             : 
  314242             : // *** COMMON CODE SECTION ENDS HERE ***
  314243             : 
  314244             : 
  314245             : // End of memberFunctionString
  314246             : // Start of memberFunctionString
  314247             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  314248             : 
  314249             :      // the generated cast function
  314250             :      // friend ROSE_DLL_API SgStringConversion* isSgStringConversion ( SgNode* s );
  314251             : 
  314252             :           typedef SgExpression base_node_type;
  314253             : 
  314254             : 
  314255             : // End of memberFunctionString
  314256             : // Start of memberFunctionString
  314257             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  314258             : 
  314259             :           SgType* get_type() const override;
  314260             : 
  314261             : 
  314262             : // End of memberFunctionString
  314263             : // Start of memberFunctionString
  314264             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  314265             : 
  314266             :           void post_construction_initialization() override;
  314267             : 
  314268             : 
  314269             : // End of memberFunctionString
  314270             : 
  314271             :      public: 
  314272             :          SgExpression* get_expression() const;
  314273             :          void set_expression(SgExpression* expression);
  314274             : 
  314275             : 
  314276             :      public: 
  314277             :          virtual ~SgStringConversion();
  314278             : 
  314279             : 
  314280             :      public: 
  314281             :          SgStringConversion(Sg_File_Info* startOfConstruct , SgExpression* expression = NULL); 
  314282             :          SgStringConversion(SgExpression* expression); 
  314283             : 
  314284             :     protected:
  314285             : // Start of memberFunctionString
  314286             : SgExpression* p_expression;
  314287             :           
  314288             : // End of memberFunctionString
  314289             : 
  314290             :     friend struct Rose::Traits::generated::describe_node_t<SgStringConversion>;
  314291             :     friend struct Rose::Traits::generated::describe_field_t<SgStringConversion, SgExpression*,&SgStringConversion::p_expression>;
  314292             : 
  314293             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314294             : 
  314295             : 
  314296             :    };
  314297             : #endif
  314298             : 
  314299             : // postdeclarations for SgStringConversion
  314300             : 
  314301             : /* #line 314302 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314302             : 
  314303             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  314304             : 
  314305             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314306             : 
  314307             : 
  314308             : /* #line 314309 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314309             : 
  314310             : 
  314311             : 
  314312             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314313             : 
  314314             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  314315             : //      This code is automatically generated for each 
  314316             : //      terminal and non-terminal within the defined 
  314317             : //      grammar.  There is a simple way to change the 
  314318             : //      code to fix bugs etc.  See the ROSE README file
  314319             : //      for directions.
  314320             : 
  314321             : // tps: (02/22/2010): Adding DLL export requirements
  314322             : #include "rosedll.h"
  314323             : 
  314324             : // predeclarations for SgYieldExpression
  314325             : 
  314326             : /* #line 314327 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314327             : 
  314328             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  314329             : 
  314330             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314331             : 
  314332             : #if 1
  314333             : // Class Definition for SgYieldExpression
  314334             : class ROSE_DLL_API SgYieldExpression  : public SgExpression
  314335             :    {
  314336             :      public:
  314337             : 
  314338             : 
  314339             : /* #line 314340 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314340             : 
  314341             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  314342             : // Start of memberFunctionString
  314343             : /* #line 711 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  314344             : 
  314345             : 
  314346             : 
  314347             : // End of memberFunctionString
  314348             : // Start of memberFunctionString
  314349             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  314350             : 
  314351             : // *** COMMON CODE SECTION BEGINS HERE ***
  314352             : 
  314353             :     public:
  314354             : 
  314355             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  314356             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  314357             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  314358             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  314359             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  314360             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  314361             : 
  314362             :       /*! \brief returns a string representing the class name */
  314363             :           virtual std::string class_name() const override;
  314364             : 
  314365             :       /*! \brief returns new style SageIII enum values */
  314366             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  314367             : 
  314368             :       /*! \brief static variant value */
  314369             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  314370             :        // static const VariantT static_variant = V_SgYieldExpression;
  314371             :           enum { static_variant = V_SgYieldExpression };
  314372             : 
  314373             :        /* the generated cast function */
  314374             :       /*! \brief Casts pointer from base class to derived class */
  314375             :           ROSE_DLL_API friend       SgYieldExpression* isSgYieldExpression(       SgNode * s );
  314376             : 
  314377             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  314378             :           ROSE_DLL_API friend const SgYieldExpression* isSgYieldExpression( const SgNode * s );
  314379             : 
  314380             :      // ******************************************
  314381             :      // * Memory Pool / New / Delete
  314382             :      // ******************************************
  314383             : 
  314384             :      public:
  314385             :           /// \private
  314386             :           static const unsigned pool_size; //
  314387             :           /// \private
  314388             :           static std::vector<unsigned char *> pools; //
  314389             :           /// \private
  314390             :           static SgYieldExpression * next_node; // 
  314391             : 
  314392             :           /// \private
  314393             :           static unsigned long initializeStorageClassArray(SgYieldExpressionStorageClass *); //
  314394             : 
  314395             :           /// \private
  314396             :           static void clearMemoryPool(); //
  314397             :           static void deleteMemoryPool(); //
  314398             : 
  314399             :           /// \private
  314400             :           static void extendMemoryPoolForFileIO(); //
  314401             : 
  314402             :           /// \private
  314403             :           static SgYieldExpression * getPointerFromGlobalIndex(unsigned long); //
  314404             :           /// \private
  314405             :           static SgYieldExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  314406             : 
  314407             :           /// \private
  314408             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  314409             :           /// \private
  314410             :           static void resetValidFreepointers(); //
  314411             :           /// \private
  314412             :           static unsigned long getNumberOfLastValidPointer(); //
  314413             : 
  314414             : 
  314415             : #if defined(INLINE_FUNCTIONS)
  314416             :       /*! \brief returns pointer to newly allocated IR node */
  314417             :           inline void *operator new (size_t size);
  314418             : #else
  314419             :       /*! \brief returns pointer to newly allocated IR node */
  314420             :           void *operator new (size_t size);
  314421             : #endif
  314422             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  314423             :           void operator delete (void* pointer, size_t size);
  314424             : 
  314425             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  314426           0 :           void operator delete (void* pointer)
  314427             :              {
  314428             :             // This is the generated delete operator...
  314429           0 :                SgYieldExpression::operator delete (pointer,sizeof(SgYieldExpression));
  314430             :              }
  314431             : 
  314432             :       /*! \brief Returns the total number of IR nodes of this type */
  314433             :           static size_t numberOfNodes();
  314434             : 
  314435             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  314436             :           static size_t memoryUsage();
  314437             : 
  314438             :       // End of scope which started in IR nodes specific code 
  314439             :       /* */
  314440             : 
  314441             :       /* name Internal Functions
  314442             :           \brief Internal functions ... incomplete-documentation
  314443             : 
  314444             :           These functions have been made public as part of the design, but they are suggested for internal use 
  314445             :           or by particularly knowledgeable users for specialized tools or applications.
  314446             : 
  314447             :           \internal We could not make these private because they are required by user for special purposes. And 
  314448             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  314449             :          
  314450             :        */
  314451             : 
  314452             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  314453             :        // overridden in every class by *generated* implementation
  314454             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  314455             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  314456             :        // MS: 06/28/02 container of names of variables or container indices 
  314457             :        // used used in the traversal to access AST successor nodes
  314458             :        // overridden in every class by *generated* implementation
  314459             :       /*! \brief container of names of variables or container indices used used in the traversal
  314460             :           to access AST successor nodes overridden in every class by *generated* implementation */
  314461             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  314462             : 
  314463             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  314464             :        // than all the vector copies. The implementation for these functions is generated for each class.
  314465             :       /*! \brief return number of children in the traversal successor list */
  314466             :           virtual size_t get_numberOfTraversalSuccessors() override;
  314467             :       /*! \brief index-based access to traversal successors by index number */
  314468             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  314469             :       /*! \brief index-based access to traversal successors by child node */
  314470             :           virtual size_t get_childIndex(SgNode *child) override;
  314471             : 
  314472             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  314473             :        // MS: 08/16/2002 method for generating RTI information
  314474             :       /*! \brief return C++ Runtime-Time-Information */
  314475             :           virtual RTIReturnType roseRTI() override;
  314476             : #endif
  314477             :       /* */
  314478             : 
  314479             : 
  314480             : 
  314481             :       /* name Deprecated Functions
  314482             :           \brief Deprecated functions ... incomplete-documentation
  314483             : 
  314484             :           These functions have been deprecated from use.
  314485             :        */
  314486             :       /* */
  314487             : 
  314488             :       /*! returns a C style string (char*) representing the class name */
  314489             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  314490             : 
  314491             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  314492             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  314493             : #if 0
  314494             :       /*! returns old style Sage II enum values */
  314495             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  314496             :       /*! returns old style Sage II enum values */
  314497             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  314498             : #endif
  314499             :       /* */
  314500             : 
  314501             : 
  314502             : 
  314503             : 
  314504             :      public:
  314505             :       /* name Traversal Support Functions
  314506             :           \brief Traversal support functions ... incomplete-documentation
  314507             : 
  314508             :           These functions have been made public as part of the design, but they are suggested for internal use 
  314509             :           or by particularly knowledgable users for specialized tools or applications.
  314510             :        */
  314511             :       /* */
  314512             : 
  314513             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  314514             :        // (inferior to ROSE traversal mechanism, experimental).
  314515             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  314516             :        */
  314517             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  314518             : 
  314519             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  314520             :       /*! \brief support for the classic visitor pattern done in GoF */
  314521             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  314522             : 
  314523             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  314524             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  314525             :        */
  314526             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  314527             : 
  314528             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  314529             :        */
  314530             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  314531             : 
  314532             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  314533             :        // This traversal helps support internal tools that call static member functions.
  314534             :        // note: this function operates on the memory pools.
  314535             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  314536             :        */
  314537             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  314538             :       /* */
  314539             : 
  314540             : 
  314541             :      public:
  314542             :       /* name Memory Allocation Functions
  314543             :           \brief Memory allocations functions ... incomplete-documentation
  314544             : 
  314545             :           These functions have been made public as part of the design, but they are suggested for internal use 
  314546             :           or by particularly knowledgable users for specialized tools or applications.
  314547             :        */
  314548             :       /* */
  314549             : 
  314550             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  314551             : 
  314552             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  314553             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  314554             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  314555             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  314556             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  314557             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  314558             :           being used with the AST File I/O mechanism.
  314559             :        */
  314560             :           virtual bool isInMemoryPool() override;
  314561             : 
  314562             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  314563             : 
  314564             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  314565             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  314566             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  314567             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  314568             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  314569             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  314570             :           being used with the AST File I/O mechanism.
  314571             :        */
  314572             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  314573             : 
  314574             :       // DQ (4/30/2006): Modified to be a const function.
  314575             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  314576             : 
  314577             :           This functions is part of general support for many possible tools to operate 
  314578             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  314579             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  314580             :           less than the set of pointers used by the AST file I/O. This is part of
  314581             :           work implemented by Andreas, and support tools such as the AST graph generation.
  314582             : 
  314583             :           \warning This function can return unexpected data members and thus the 
  314584             :                    order and the number of elements is unpredicable and subject 
  314585             :                    to change.
  314586             : 
  314587             :           \returns STL vector of pairs of SgNode* and strings
  314588             :        */
  314589             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  314590             : 
  314591             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  314592             : 
  314593             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  314594             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  314595             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  314596             : 
  314597             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  314598             :                    and subject to change.
  314599             :        */
  314600             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  314601             : 
  314602             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  314603             : 
  314604             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  314605             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  314606             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  314607             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  314608             : 
  314609             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  314610             : 
  314611             :           \returns long
  314612             :        */
  314613             :           virtual long getChildIndex( SgNode* childNode ) const override;
  314614             : 
  314615             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  314616             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  314617             :       /* \brief Constructor for use by AST File I/O Mechanism
  314618             : 
  314619             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  314620             :           which obtained via fast binary file I/O from disk.
  314621             :        */
  314622             :        // SgYieldExpression( SgYieldExpressionStorageClass& source );
  314623             : 
  314624             : 
  314625             : 
  314626             : 
  314627             : 
  314628             :  // JH (10/24/2005): methods added to support the ast file IO
  314629             :     private:
  314630             : 
  314631             :       /* name AST Memory Allocation Support Functions
  314632             :           \brief Memory allocations support....
  314633             : 
  314634             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  314635             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  314636             :           and support the AST File I/O Mechanism.
  314637             :        */
  314638             :       /* */
  314639             : 
  314640             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  314641             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  314642             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  314643             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  314644             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  314645             :           a correspinding one in the AST_FILE_IO class!
  314646             :        */
  314647             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  314648             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  314649             :       /* \brief Typedef used for low level memory access.
  314650             :        */
  314651             :        // typedef unsigned char* TestType;
  314652             : 
  314653             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  314654             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  314655             :       /* \brief Typedef used to hold memory addresses as values.
  314656             :        */
  314657             :        // typedef unsigned long  AddressType;
  314658             : 
  314659             : 
  314660             : 
  314661             :        // necessary, to have direct access to the p_freepointer and the private methods !
  314662             :       /*! \brief friend class declaration to support AST File I/O */
  314663             :           friend class AST_FILE_IO;
  314664             : 
  314665             :       /*! \brief friend class declaration to support AST File I/O */
  314666             :           friend class SgYieldExpressionStorageClass;
  314667             : 
  314668             :       /*! \brief friend class declaration to support AST File I/O */
  314669             :           friend class AstSpecificDataManagingClass;
  314670             : 
  314671             :       /*! \brief friend class declaration to support AST File I/O */
  314672             :           friend class AstSpecificDataManagingClassStorageClass;
  314673             :     public:
  314674             :       /*! \brief IR node constructor to support AST File I/O */
  314675             :           SgYieldExpression( const SgYieldExpressionStorageClass& source );
  314676             : 
  314677             :  // private: // JJW hack
  314678             :        /*
  314679             :           name AST Memory Allocation Support Variables
  314680             :           Memory allocations support variables 
  314681             : 
  314682             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  314683             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  314684             :           and support the AST File I/O Mechanism.
  314685             :        */
  314686             :       /* */
  314687             : 
  314688             :     public:
  314689             : 
  314690             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  314691             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  314692             :       // virtual SgNode* addRegExpAttribute();
  314693             :       /*! \brief Support for AST matching using regular expression.
  314694             : 
  314695             :           This support is incomplete and the subject of current research to define 
  314696             :           RegEx trees to support inexact matching.
  314697             :        */
  314698             :           SgYieldExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  314699             : 
  314700             : // *** COMMON CODE SECTION ENDS HERE ***
  314701             : 
  314702             : 
  314703             : // End of memberFunctionString
  314704             : // Start of memberFunctionString
  314705             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  314706             : 
  314707             :      // the generated cast function
  314708             :      // friend ROSE_DLL_API SgYieldExpression* isSgYieldExpression ( SgNode* s );
  314709             : 
  314710             :           typedef SgExpression base_node_type;
  314711             : 
  314712             : 
  314713             : // End of memberFunctionString
  314714             : // Start of memberFunctionString
  314715             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  314716             : 
  314717             :           SgType* get_type() const override;
  314718             : 
  314719             : 
  314720             : // End of memberFunctionString
  314721             : // Start of memberFunctionString
  314722             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  314723             : 
  314724             :           void post_construction_initialization() override;
  314725             : 
  314726             : 
  314727             : // End of memberFunctionString
  314728             : 
  314729             :      public: 
  314730             :          SgExpression* get_value() const;
  314731             :          void set_value(SgExpression* value);
  314732             : 
  314733             : 
  314734             :      public: 
  314735             :          virtual ~SgYieldExpression();
  314736             : 
  314737             : 
  314738             :      public: 
  314739             :          SgYieldExpression(Sg_File_Info* startOfConstruct , SgExpression* value = NULL); 
  314740             :          SgYieldExpression(SgExpression* value); 
  314741             : 
  314742             :     protected:
  314743             : // Start of memberFunctionString
  314744             : SgExpression* p_value;
  314745             :           
  314746             : // End of memberFunctionString
  314747             : 
  314748             :     friend struct Rose::Traits::generated::describe_node_t<SgYieldExpression>;
  314749             :     friend struct Rose::Traits::generated::describe_field_t<SgYieldExpression, SgExpression*,&SgYieldExpression::p_value>;
  314750             : 
  314751             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314752             : 
  314753             : 
  314754             :    };
  314755             : #endif
  314756             : 
  314757             : // postdeclarations for SgYieldExpression
  314758             : 
  314759             : /* #line 314760 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314760             : 
  314761             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  314762             : 
  314763             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314764             : 
  314765             : 
  314766             : /* #line 314767 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314767             : 
  314768             : 
  314769             : 
  314770             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314771             : 
  314772             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  314773             : //      This code is automatically generated for each 
  314774             : //      terminal and non-terminal within the defined 
  314775             : //      grammar.  There is a simple way to change the 
  314776             : //      code to fix bugs etc.  See the ROSE README file
  314777             : //      for directions.
  314778             : 
  314779             : // tps: (02/22/2010): Adding DLL export requirements
  314780             : #include "rosedll.h"
  314781             : 
  314782             : // predeclarations for SgTemplateFunctionRefExp
  314783             : 
  314784             : /* #line 314785 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314785             : 
  314786             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  314787             : 
  314788             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  314789             : 
  314790             : #if 1
  314791             : // Class Definition for SgTemplateFunctionRefExp
  314792             : class ROSE_DLL_API SgTemplateFunctionRefExp  : public SgExpression
  314793             :    {
  314794             :      public:
  314795             : 
  314796             : 
  314797             : /* #line 314798 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  314798             : 
  314799             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  314800             : // Start of memberFunctionString
  314801             : /* #line 464 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  314802             : 
  314803             :        // SgTemplateSymbol* get_symbol() const;
  314804             :        // void set_symbol(SgTemplateSymbol * symbol);
  314805             :           SgTemplateFunctionSymbol* get_symbol() const;
  314806             :           void set_symbol(SgTemplateFunctionSymbol * symbol);
  314807             : 
  314808             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  314809             :           virtual unsigned int cfgIndexForEnd() const override;
  314810             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  314811             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  314812             : #endif
  314813             : 
  314814             :       /** Returns the associated function declaration, if it can be resolved statically. In some cases,
  314815             :       * such as function pointers and virtual functions, the function called cannot be resolved statically;
  314816             :       * for those cases this function returns NULL. The actual function expression is available through
  314817             :       * get_function(). */
  314818             :           SgTemplateFunctionDeclaration* getAssociatedFunctionDeclaration() const;
  314819             : 
  314820             : //       // get lvalue
  314821             : //          virtual bool isLValue() const;
  314822             : //          virtual bool isChildUsedAsLValue(const SgExpression* child) const; // INTERNAL Recursively call up the chain to answer the child
  314823             : 
  314824             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  314825             :           int get_name_qualification_length() const override;
  314826             :           void set_name_qualification_length(int name_qualification_length) override;
  314827             : 
  314828             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  314829             :           bool get_type_elaboration_required() const override;
  314830             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  314831             : 
  314832             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  314833             :           bool get_global_qualification_required() const override;
  314834             :           void set_global_qualification_required(bool global_qualification_required) override;
  314835             : 
  314836             : 
  314837             : 
  314838             : // End of memberFunctionString
  314839             : // Start of memberFunctionString
  314840             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  314841             : 
  314842             : // *** COMMON CODE SECTION BEGINS HERE ***
  314843             : 
  314844             :     public:
  314845             : 
  314846             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  314847             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  314848             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  314849             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  314850             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  314851             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  314852             : 
  314853             :       /*! \brief returns a string representing the class name */
  314854             :           virtual std::string class_name() const override;
  314855             : 
  314856             :       /*! \brief returns new style SageIII enum values */
  314857             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  314858             : 
  314859             :       /*! \brief static variant value */
  314860             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  314861             :        // static const VariantT static_variant = V_SgTemplateFunctionRefExp;
  314862             :           enum { static_variant = V_SgTemplateFunctionRefExp };
  314863             : 
  314864             :        /* the generated cast function */
  314865             :       /*! \brief Casts pointer from base class to derived class */
  314866             :           ROSE_DLL_API friend       SgTemplateFunctionRefExp* isSgTemplateFunctionRefExp(       SgNode * s );
  314867             : 
  314868             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  314869             :           ROSE_DLL_API friend const SgTemplateFunctionRefExp* isSgTemplateFunctionRefExp( const SgNode * s );
  314870             : 
  314871             :      // ******************************************
  314872             :      // * Memory Pool / New / Delete
  314873             :      // ******************************************
  314874             : 
  314875             :      public:
  314876             :           /// \private
  314877             :           static const unsigned pool_size; //
  314878             :           /// \private
  314879             :           static std::vector<unsigned char *> pools; //
  314880             :           /// \private
  314881             :           static SgTemplateFunctionRefExp * next_node; // 
  314882             : 
  314883             :           /// \private
  314884             :           static unsigned long initializeStorageClassArray(SgTemplateFunctionRefExpStorageClass *); //
  314885             : 
  314886             :           /// \private
  314887             :           static void clearMemoryPool(); //
  314888             :           static void deleteMemoryPool(); //
  314889             : 
  314890             :           /// \private
  314891             :           static void extendMemoryPoolForFileIO(); //
  314892             : 
  314893             :           /// \private
  314894             :           static SgTemplateFunctionRefExp * getPointerFromGlobalIndex(unsigned long); //
  314895             :           /// \private
  314896             :           static SgTemplateFunctionRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  314897             : 
  314898             :           /// \private
  314899             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  314900             :           /// \private
  314901             :           static void resetValidFreepointers(); //
  314902             :           /// \private
  314903             :           static unsigned long getNumberOfLastValidPointer(); //
  314904             : 
  314905             : 
  314906             : #if defined(INLINE_FUNCTIONS)
  314907             :       /*! \brief returns pointer to newly allocated IR node */
  314908             :           inline void *operator new (size_t size);
  314909             : #else
  314910             :       /*! \brief returns pointer to newly allocated IR node */
  314911             :           void *operator new (size_t size);
  314912             : #endif
  314913             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  314914             :           void operator delete (void* pointer, size_t size);
  314915             : 
  314916             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  314917         466 :           void operator delete (void* pointer)
  314918             :              {
  314919             :             // This is the generated delete operator...
  314920         466 :                SgTemplateFunctionRefExp::operator delete (pointer,sizeof(SgTemplateFunctionRefExp));
  314921             :              }
  314922             : 
  314923             :       /*! \brief Returns the total number of IR nodes of this type */
  314924             :           static size_t numberOfNodes();
  314925             : 
  314926             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  314927             :           static size_t memoryUsage();
  314928             : 
  314929             :       // End of scope which started in IR nodes specific code 
  314930             :       /* */
  314931             : 
  314932             :       /* name Internal Functions
  314933             :           \brief Internal functions ... incomplete-documentation
  314934             : 
  314935             :           These functions have been made public as part of the design, but they are suggested for internal use 
  314936             :           or by particularly knowledgeable users for specialized tools or applications.
  314937             : 
  314938             :           \internal We could not make these private because they are required by user for special purposes. And 
  314939             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  314940             :          
  314941             :        */
  314942             : 
  314943             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  314944             :        // overridden in every class by *generated* implementation
  314945             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  314946             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  314947             :        // MS: 06/28/02 container of names of variables or container indices 
  314948             :        // used used in the traversal to access AST successor nodes
  314949             :        // overridden in every class by *generated* implementation
  314950             :       /*! \brief container of names of variables or container indices used used in the traversal
  314951             :           to access AST successor nodes overridden in every class by *generated* implementation */
  314952             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  314953             : 
  314954             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  314955             :        // than all the vector copies. The implementation for these functions is generated for each class.
  314956             :       /*! \brief return number of children in the traversal successor list */
  314957             :           virtual size_t get_numberOfTraversalSuccessors() override;
  314958             :       /*! \brief index-based access to traversal successors by index number */
  314959             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  314960             :       /*! \brief index-based access to traversal successors by child node */
  314961             :           virtual size_t get_childIndex(SgNode *child) override;
  314962             : 
  314963             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  314964             :        // MS: 08/16/2002 method for generating RTI information
  314965             :       /*! \brief return C++ Runtime-Time-Information */
  314966             :           virtual RTIReturnType roseRTI() override;
  314967             : #endif
  314968             :       /* */
  314969             : 
  314970             : 
  314971             : 
  314972             :       /* name Deprecated Functions
  314973             :           \brief Deprecated functions ... incomplete-documentation
  314974             : 
  314975             :           These functions have been deprecated from use.
  314976             :        */
  314977             :       /* */
  314978             : 
  314979             :       /*! returns a C style string (char*) representing the class name */
  314980             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  314981             : 
  314982             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  314983             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  314984             : #if 0
  314985             :       /*! returns old style Sage II enum values */
  314986             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  314987             :       /*! returns old style Sage II enum values */
  314988             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  314989             : #endif
  314990             :       /* */
  314991             : 
  314992             : 
  314993             : 
  314994             : 
  314995             :      public:
  314996             :       /* name Traversal Support Functions
  314997             :           \brief Traversal support functions ... incomplete-documentation
  314998             : 
  314999             :           These functions have been made public as part of the design, but they are suggested for internal use 
  315000             :           or by particularly knowledgable users for specialized tools or applications.
  315001             :        */
  315002             :       /* */
  315003             : 
  315004             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  315005             :        // (inferior to ROSE traversal mechanism, experimental).
  315006             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  315007             :        */
  315008             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  315009             : 
  315010             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  315011             :       /*! \brief support for the classic visitor pattern done in GoF */
  315012             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  315013             : 
  315014             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  315015             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  315016             :        */
  315017             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  315018             : 
  315019             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  315020             :        */
  315021             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  315022             : 
  315023             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  315024             :        // This traversal helps support internal tools that call static member functions.
  315025             :        // note: this function operates on the memory pools.
  315026             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  315027             :        */
  315028             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  315029             :       /* */
  315030             : 
  315031             : 
  315032             :      public:
  315033             :       /* name Memory Allocation Functions
  315034             :           \brief Memory allocations functions ... incomplete-documentation
  315035             : 
  315036             :           These functions have been made public as part of the design, but they are suggested for internal use 
  315037             :           or by particularly knowledgable users for specialized tools or applications.
  315038             :        */
  315039             :       /* */
  315040             : 
  315041             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  315042             : 
  315043             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  315044             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  315045             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  315046             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  315047             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  315048             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  315049             :           being used with the AST File I/O mechanism.
  315050             :        */
  315051             :           virtual bool isInMemoryPool() override;
  315052             : 
  315053             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  315054             : 
  315055             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  315056             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  315057             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  315058             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  315059             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  315060             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  315061             :           being used with the AST File I/O mechanism.
  315062             :        */
  315063             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  315064             : 
  315065             :       // DQ (4/30/2006): Modified to be a const function.
  315066             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  315067             : 
  315068             :           This functions is part of general support for many possible tools to operate 
  315069             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  315070             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  315071             :           less than the set of pointers used by the AST file I/O. This is part of
  315072             :           work implemented by Andreas, and support tools such as the AST graph generation.
  315073             : 
  315074             :           \warning This function can return unexpected data members and thus the 
  315075             :                    order and the number of elements is unpredicable and subject 
  315076             :                    to change.
  315077             : 
  315078             :           \returns STL vector of pairs of SgNode* and strings
  315079             :        */
  315080             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  315081             : 
  315082             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  315083             : 
  315084             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  315085             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  315086             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  315087             : 
  315088             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  315089             :                    and subject to change.
  315090             :        */
  315091             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  315092             : 
  315093             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  315094             : 
  315095             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  315096             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  315097             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  315098             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  315099             : 
  315100             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  315101             : 
  315102             :           \returns long
  315103             :        */
  315104             :           virtual long getChildIndex( SgNode* childNode ) const override;
  315105             : 
  315106             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  315107             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  315108             :       /* \brief Constructor for use by AST File I/O Mechanism
  315109             : 
  315110             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  315111             :           which obtained via fast binary file I/O from disk.
  315112             :        */
  315113             :        // SgTemplateFunctionRefExp( SgTemplateFunctionRefExpStorageClass& source );
  315114             : 
  315115             : 
  315116             : 
  315117             : 
  315118             : 
  315119             :  // JH (10/24/2005): methods added to support the ast file IO
  315120             :     private:
  315121             : 
  315122             :       /* name AST Memory Allocation Support Functions
  315123             :           \brief Memory allocations support....
  315124             : 
  315125             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  315126             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  315127             :           and support the AST File I/O Mechanism.
  315128             :        */
  315129             :       /* */
  315130             : 
  315131             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  315132             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  315133             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  315134             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  315135             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  315136             :           a correspinding one in the AST_FILE_IO class!
  315137             :        */
  315138             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  315139             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  315140             :       /* \brief Typedef used for low level memory access.
  315141             :        */
  315142             :        // typedef unsigned char* TestType;
  315143             : 
  315144             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  315145             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  315146             :       /* \brief Typedef used to hold memory addresses as values.
  315147             :        */
  315148             :        // typedef unsigned long  AddressType;
  315149             : 
  315150             : 
  315151             : 
  315152             :        // necessary, to have direct access to the p_freepointer and the private methods !
  315153             :       /*! \brief friend class declaration to support AST File I/O */
  315154             :           friend class AST_FILE_IO;
  315155             : 
  315156             :       /*! \brief friend class declaration to support AST File I/O */
  315157             :           friend class SgTemplateFunctionRefExpStorageClass;
  315158             : 
  315159             :       /*! \brief friend class declaration to support AST File I/O */
  315160             :           friend class AstSpecificDataManagingClass;
  315161             : 
  315162             :       /*! \brief friend class declaration to support AST File I/O */
  315163             :           friend class AstSpecificDataManagingClassStorageClass;
  315164             :     public:
  315165             :       /*! \brief IR node constructor to support AST File I/O */
  315166             :           SgTemplateFunctionRefExp( const SgTemplateFunctionRefExpStorageClass& source );
  315167             : 
  315168             :  // private: // JJW hack
  315169             :        /*
  315170             :           name AST Memory Allocation Support Variables
  315171             :           Memory allocations support variables 
  315172             : 
  315173             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  315174             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  315175             :           and support the AST File I/O Mechanism.
  315176             :        */
  315177             :       /* */
  315178             : 
  315179             :     public:
  315180             : 
  315181             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  315182             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  315183             :       // virtual SgNode* addRegExpAttribute();
  315184             :       /*! \brief Support for AST matching using regular expression.
  315185             : 
  315186             :           This support is incomplete and the subject of current research to define 
  315187             :           RegEx trees to support inexact matching.
  315188             :        */
  315189             :           SgTemplateFunctionRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  315190             : 
  315191             : // *** COMMON CODE SECTION ENDS HERE ***
  315192             : 
  315193             : 
  315194             : // End of memberFunctionString
  315195             : // Start of memberFunctionString
  315196             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  315197             : 
  315198             :      // the generated cast function
  315199             :      // friend ROSE_DLL_API SgTemplateFunctionRefExp* isSgTemplateFunctionRefExp ( SgNode* s );
  315200             : 
  315201             :           typedef SgExpression base_node_type;
  315202             : 
  315203             : 
  315204             : // End of memberFunctionString
  315205             : // Start of memberFunctionString
  315206             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  315207             : 
  315208             :           SgType* get_type() const override;
  315209             : 
  315210             : 
  315211             : // End of memberFunctionString
  315212             : // Start of memberFunctionString
  315213             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  315214             : 
  315215             :           void post_construction_initialization() override;
  315216             : 
  315217             : 
  315218             : // End of memberFunctionString
  315219             : 
  315220             :      public: 
  315221             :          SgTemplateFunctionSymbol* get_symbol_i() const;
  315222             :          void set_symbol_i(SgTemplateFunctionSymbol* symbol_i);
  315223             : 
  315224             : 
  315225             : 
  315226             : 
  315227             : 
  315228             :      public: 
  315229             :          virtual ~SgTemplateFunctionRefExp();
  315230             : 
  315231             : 
  315232             :      public: 
  315233             :          SgTemplateFunctionRefExp(Sg_File_Info* startOfConstruct , SgTemplateFunctionSymbol* symbol_i = NULL); 
  315234             :          SgTemplateFunctionRefExp(SgTemplateFunctionSymbol* symbol_i); 
  315235             : 
  315236             :     protected:
  315237             : // Start of memberFunctionString
  315238             : SgTemplateFunctionSymbol* p_symbol_i;
  315239             :           
  315240             : // End of memberFunctionString
  315241             : // Start of memberFunctionString
  315242             : int p_name_qualification_length;
  315243             :           
  315244             : // End of memberFunctionString
  315245             : // Start of memberFunctionString
  315246             : bool p_type_elaboration_required;
  315247             :           
  315248             : // End of memberFunctionString
  315249             : // Start of memberFunctionString
  315250             : bool p_global_qualification_required;
  315251             :           
  315252             : // End of memberFunctionString
  315253             : 
  315254             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateFunctionRefExp>;
  315255             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionRefExp, SgTemplateFunctionSymbol*,&SgTemplateFunctionRefExp::p_symbol_i>;
  315256             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionRefExp, int,&SgTemplateFunctionRefExp::p_name_qualification_length>;
  315257             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionRefExp, bool,&SgTemplateFunctionRefExp::p_type_elaboration_required>;
  315258             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateFunctionRefExp, bool,&SgTemplateFunctionRefExp::p_global_qualification_required>;
  315259             : 
  315260             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315261             : 
  315262             : 
  315263             :    };
  315264             : #endif
  315265             : 
  315266             : // postdeclarations for SgTemplateFunctionRefExp
  315267             : 
  315268             : /* #line 315269 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315269             : 
  315270             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  315271             : 
  315272             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315273             : 
  315274             : 
  315275             : /* #line 315276 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315276             : 
  315277             : 
  315278             : 
  315279             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315280             : 
  315281             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  315282             : //      This code is automatically generated for each 
  315283             : //      terminal and non-terminal within the defined 
  315284             : //      grammar.  There is a simple way to change the 
  315285             : //      code to fix bugs etc.  See the ROSE README file
  315286             : //      for directions.
  315287             : 
  315288             : // tps: (02/22/2010): Adding DLL export requirements
  315289             : #include "rosedll.h"
  315290             : 
  315291             : // predeclarations for SgTemplateMemberFunctionRefExp
  315292             : 
  315293             : /* #line 315294 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315294             : 
  315295             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  315296             : 
  315297             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315298             : 
  315299             : #if 1
  315300             : // Class Definition for SgTemplateMemberFunctionRefExp
  315301             : class ROSE_DLL_API SgTemplateMemberFunctionRefExp  : public SgExpression
  315302             :    {
  315303             :      public:
  315304             : 
  315305             : 
  315306             : /* #line 315307 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315307             : 
  315308             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  315309             : // Start of memberFunctionString
  315310             : /* #line 501 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  315311             : 
  315312             :        // SgTemplateSymbol* get_symbol() const;
  315313             :        // void set_symbol(SgTemplateSymbol * symbol);
  315314             :           SgTemplateMemberFunctionSymbol* get_symbol() const;
  315315             :           void set_symbol(SgTemplateMemberFunctionSymbol * symbol);
  315316             : 
  315317             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  315318             :           virtual unsigned int cfgIndexForEnd() const override;
  315319             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  315320             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  315321             : #endif
  315322             : 
  315323             :         //! This is helpful in chasing down the associated declaration to this member function reference.
  315324             :       //! Note: This function can return NULL - for example when the function call occurs through a function
  315325             :       //! pointer.
  315326             :           SgTemplateMemberFunctionDeclaration* getAssociatedMemberFunctionDeclaration() const;
  315327             : 
  315328             :        // DQ (12/15/2011): We might require this...
  315329             :        // get lvalue
  315330             :        // virtual bool isLValue() const;
  315331             :        // virtual bool isChildUsedAsLValue(const SgExpression* child) const; // INTERNAL Recursively call up the chain to answer the child
  315332             : 
  315333             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  315334             :           int  get_name_qualification_length() const override;
  315335             :           void set_name_qualification_length(int name_qualification_length) override;
  315336             : 
  315337             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  315338             :           bool get_type_elaboration_required() const override;
  315339             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  315340             : 
  315341             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  315342             :           bool get_global_qualification_required() const override;
  315343             :           void set_global_qualification_required(bool global_qualification_required) override;
  315344             : 
  315345             : 
  315346             : 
  315347             : // End of memberFunctionString
  315348             : // Start of memberFunctionString
  315349             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  315350             : 
  315351             : // *** COMMON CODE SECTION BEGINS HERE ***
  315352             : 
  315353             :     public:
  315354             : 
  315355             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  315356             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  315357             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  315358             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  315359             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  315360             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  315361             : 
  315362             :       /*! \brief returns a string representing the class name */
  315363             :           virtual std::string class_name() const override;
  315364             : 
  315365             :       /*! \brief returns new style SageIII enum values */
  315366             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  315367             : 
  315368             :       /*! \brief static variant value */
  315369             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  315370             :        // static const VariantT static_variant = V_SgTemplateMemberFunctionRefExp;
  315371             :           enum { static_variant = V_SgTemplateMemberFunctionRefExp };
  315372             : 
  315373             :        /* the generated cast function */
  315374             :       /*! \brief Casts pointer from base class to derived class */
  315375             :           ROSE_DLL_API friend       SgTemplateMemberFunctionRefExp* isSgTemplateMemberFunctionRefExp(       SgNode * s );
  315376             : 
  315377             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  315378             :           ROSE_DLL_API friend const SgTemplateMemberFunctionRefExp* isSgTemplateMemberFunctionRefExp( const SgNode * s );
  315379             : 
  315380             :      // ******************************************
  315381             :      // * Memory Pool / New / Delete
  315382             :      // ******************************************
  315383             : 
  315384             :      public:
  315385             :           /// \private
  315386             :           static const unsigned pool_size; //
  315387             :           /// \private
  315388             :           static std::vector<unsigned char *> pools; //
  315389             :           /// \private
  315390             :           static SgTemplateMemberFunctionRefExp * next_node; // 
  315391             : 
  315392             :           /// \private
  315393             :           static unsigned long initializeStorageClassArray(SgTemplateMemberFunctionRefExpStorageClass *); //
  315394             : 
  315395             :           /// \private
  315396             :           static void clearMemoryPool(); //
  315397             :           static void deleteMemoryPool(); //
  315398             : 
  315399             :           /// \private
  315400             :           static void extendMemoryPoolForFileIO(); //
  315401             : 
  315402             :           /// \private
  315403             :           static SgTemplateMemberFunctionRefExp * getPointerFromGlobalIndex(unsigned long); //
  315404             :           /// \private
  315405             :           static SgTemplateMemberFunctionRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  315406             : 
  315407             :           /// \private
  315408             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  315409             :           /// \private
  315410             :           static void resetValidFreepointers(); //
  315411             :           /// \private
  315412             :           static unsigned long getNumberOfLastValidPointer(); //
  315413             : 
  315414             : 
  315415             : #if defined(INLINE_FUNCTIONS)
  315416             :       /*! \brief returns pointer to newly allocated IR node */
  315417             :           inline void *operator new (size_t size);
  315418             : #else
  315419             :       /*! \brief returns pointer to newly allocated IR node */
  315420             :           void *operator new (size_t size);
  315421             : #endif
  315422             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  315423             :           void operator delete (void* pointer, size_t size);
  315424             : 
  315425             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  315426        1556 :           void operator delete (void* pointer)
  315427             :              {
  315428             :             // This is the generated delete operator...
  315429        1556 :                SgTemplateMemberFunctionRefExp::operator delete (pointer,sizeof(SgTemplateMemberFunctionRefExp));
  315430             :              }
  315431             : 
  315432             :       /*! \brief Returns the total number of IR nodes of this type */
  315433             :           static size_t numberOfNodes();
  315434             : 
  315435             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  315436             :           static size_t memoryUsage();
  315437             : 
  315438             :       // End of scope which started in IR nodes specific code 
  315439             :       /* */
  315440             : 
  315441             :       /* name Internal Functions
  315442             :           \brief Internal functions ... incomplete-documentation
  315443             : 
  315444             :           These functions have been made public as part of the design, but they are suggested for internal use 
  315445             :           or by particularly knowledgeable users for specialized tools or applications.
  315446             : 
  315447             :           \internal We could not make these private because they are required by user for special purposes. And 
  315448             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  315449             :          
  315450             :        */
  315451             : 
  315452             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  315453             :        // overridden in every class by *generated* implementation
  315454             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  315455             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  315456             :        // MS: 06/28/02 container of names of variables or container indices 
  315457             :        // used used in the traversal to access AST successor nodes
  315458             :        // overridden in every class by *generated* implementation
  315459             :       /*! \brief container of names of variables or container indices used used in the traversal
  315460             :           to access AST successor nodes overridden in every class by *generated* implementation */
  315461             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  315462             : 
  315463             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  315464             :        // than all the vector copies. The implementation for these functions is generated for each class.
  315465             :       /*! \brief return number of children in the traversal successor list */
  315466             :           virtual size_t get_numberOfTraversalSuccessors() override;
  315467             :       /*! \brief index-based access to traversal successors by index number */
  315468             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  315469             :       /*! \brief index-based access to traversal successors by child node */
  315470             :           virtual size_t get_childIndex(SgNode *child) override;
  315471             : 
  315472             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  315473             :        // MS: 08/16/2002 method for generating RTI information
  315474             :       /*! \brief return C++ Runtime-Time-Information */
  315475             :           virtual RTIReturnType roseRTI() override;
  315476             : #endif
  315477             :       /* */
  315478             : 
  315479             : 
  315480             : 
  315481             :       /* name Deprecated Functions
  315482             :           \brief Deprecated functions ... incomplete-documentation
  315483             : 
  315484             :           These functions have been deprecated from use.
  315485             :        */
  315486             :       /* */
  315487             : 
  315488             :       /*! returns a C style string (char*) representing the class name */
  315489             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  315490             : 
  315491             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  315492             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  315493             : #if 0
  315494             :       /*! returns old style Sage II enum values */
  315495             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  315496             :       /*! returns old style Sage II enum values */
  315497             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  315498             : #endif
  315499             :       /* */
  315500             : 
  315501             : 
  315502             : 
  315503             : 
  315504             :      public:
  315505             :       /* name Traversal Support Functions
  315506             :           \brief Traversal support functions ... incomplete-documentation
  315507             : 
  315508             :           These functions have been made public as part of the design, but they are suggested for internal use 
  315509             :           or by particularly knowledgable users for specialized tools or applications.
  315510             :        */
  315511             :       /* */
  315512             : 
  315513             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  315514             :        // (inferior to ROSE traversal mechanism, experimental).
  315515             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  315516             :        */
  315517             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  315518             : 
  315519             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  315520             :       /*! \brief support for the classic visitor pattern done in GoF */
  315521             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  315522             : 
  315523             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  315524             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  315525             :        */
  315526             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  315527             : 
  315528             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  315529             :        */
  315530             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  315531             : 
  315532             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  315533             :        // This traversal helps support internal tools that call static member functions.
  315534             :        // note: this function operates on the memory pools.
  315535             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  315536             :        */
  315537             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  315538             :       /* */
  315539             : 
  315540             : 
  315541             :      public:
  315542             :       /* name Memory Allocation Functions
  315543             :           \brief Memory allocations functions ... incomplete-documentation
  315544             : 
  315545             :           These functions have been made public as part of the design, but they are suggested for internal use 
  315546             :           or by particularly knowledgable users for specialized tools or applications.
  315547             :        */
  315548             :       /* */
  315549             : 
  315550             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  315551             : 
  315552             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  315553             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  315554             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  315555             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  315556             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  315557             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  315558             :           being used with the AST File I/O mechanism.
  315559             :        */
  315560             :           virtual bool isInMemoryPool() override;
  315561             : 
  315562             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  315563             : 
  315564             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  315565             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  315566             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  315567             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  315568             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  315569             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  315570             :           being used with the AST File I/O mechanism.
  315571             :        */
  315572             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  315573             : 
  315574             :       // DQ (4/30/2006): Modified to be a const function.
  315575             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  315576             : 
  315577             :           This functions is part of general support for many possible tools to operate 
  315578             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  315579             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  315580             :           less than the set of pointers used by the AST file I/O. This is part of
  315581             :           work implemented by Andreas, and support tools such as the AST graph generation.
  315582             : 
  315583             :           \warning This function can return unexpected data members and thus the 
  315584             :                    order and the number of elements is unpredicable and subject 
  315585             :                    to change.
  315586             : 
  315587             :           \returns STL vector of pairs of SgNode* and strings
  315588             :        */
  315589             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  315590             : 
  315591             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  315592             : 
  315593             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  315594             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  315595             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  315596             : 
  315597             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  315598             :                    and subject to change.
  315599             :        */
  315600             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  315601             : 
  315602             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  315603             : 
  315604             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  315605             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  315606             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  315607             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  315608             : 
  315609             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  315610             : 
  315611             :           \returns long
  315612             :        */
  315613             :           virtual long getChildIndex( SgNode* childNode ) const override;
  315614             : 
  315615             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  315616             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  315617             :       /* \brief Constructor for use by AST File I/O Mechanism
  315618             : 
  315619             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  315620             :           which obtained via fast binary file I/O from disk.
  315621             :        */
  315622             :        // SgTemplateMemberFunctionRefExp( SgTemplateMemberFunctionRefExpStorageClass& source );
  315623             : 
  315624             : 
  315625             : 
  315626             : 
  315627             : 
  315628             :  // JH (10/24/2005): methods added to support the ast file IO
  315629             :     private:
  315630             : 
  315631             :       /* name AST Memory Allocation Support Functions
  315632             :           \brief Memory allocations support....
  315633             : 
  315634             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  315635             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  315636             :           and support the AST File I/O Mechanism.
  315637             :        */
  315638             :       /* */
  315639             : 
  315640             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  315641             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  315642             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  315643             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  315644             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  315645             :           a correspinding one in the AST_FILE_IO class!
  315646             :        */
  315647             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  315648             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  315649             :       /* \brief Typedef used for low level memory access.
  315650             :        */
  315651             :        // typedef unsigned char* TestType;
  315652             : 
  315653             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  315654             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  315655             :       /* \brief Typedef used to hold memory addresses as values.
  315656             :        */
  315657             :        // typedef unsigned long  AddressType;
  315658             : 
  315659             : 
  315660             : 
  315661             :        // necessary, to have direct access to the p_freepointer and the private methods !
  315662             :       /*! \brief friend class declaration to support AST File I/O */
  315663             :           friend class AST_FILE_IO;
  315664             : 
  315665             :       /*! \brief friend class declaration to support AST File I/O */
  315666             :           friend class SgTemplateMemberFunctionRefExpStorageClass;
  315667             : 
  315668             :       /*! \brief friend class declaration to support AST File I/O */
  315669             :           friend class AstSpecificDataManagingClass;
  315670             : 
  315671             :       /*! \brief friend class declaration to support AST File I/O */
  315672             :           friend class AstSpecificDataManagingClassStorageClass;
  315673             :     public:
  315674             :       /*! \brief IR node constructor to support AST File I/O */
  315675             :           SgTemplateMemberFunctionRefExp( const SgTemplateMemberFunctionRefExpStorageClass& source );
  315676             : 
  315677             :  // private: // JJW hack
  315678             :        /*
  315679             :           name AST Memory Allocation Support Variables
  315680             :           Memory allocations support variables 
  315681             : 
  315682             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  315683             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  315684             :           and support the AST File I/O Mechanism.
  315685             :        */
  315686             :       /* */
  315687             : 
  315688             :     public:
  315689             : 
  315690             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  315691             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  315692             :       // virtual SgNode* addRegExpAttribute();
  315693             :       /*! \brief Support for AST matching using regular expression.
  315694             : 
  315695             :           This support is incomplete and the subject of current research to define 
  315696             :           RegEx trees to support inexact matching.
  315697             :        */
  315698             :           SgTemplateMemberFunctionRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  315699             : 
  315700             : // *** COMMON CODE SECTION ENDS HERE ***
  315701             : 
  315702             : 
  315703             : // End of memberFunctionString
  315704             : // Start of memberFunctionString
  315705             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  315706             : 
  315707             :      // the generated cast function
  315708             :      // friend ROSE_DLL_API SgTemplateMemberFunctionRefExp* isSgTemplateMemberFunctionRefExp ( SgNode* s );
  315709             : 
  315710             :           typedef SgExpression base_node_type;
  315711             : 
  315712             : 
  315713             : // End of memberFunctionString
  315714             : // Start of memberFunctionString
  315715             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  315716             : 
  315717             :           SgType* get_type() const override;
  315718             : 
  315719             : 
  315720             : // End of memberFunctionString
  315721             : // Start of memberFunctionString
  315722             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  315723             : 
  315724             :           void post_construction_initialization() override;
  315725             : 
  315726             : 
  315727             : // End of memberFunctionString
  315728             : 
  315729             :      public: 
  315730             :          SgTemplateMemberFunctionSymbol* get_symbol_i() const;
  315731             :          void set_symbol_i(SgTemplateMemberFunctionSymbol* symbol_i);
  315732             : 
  315733             :      public: 
  315734             :          int get_virtual_call() const;
  315735             :          void set_virtual_call(int virtual_call);
  315736             : 
  315737             :      public: 
  315738             :          int get_need_qualifier() const;
  315739             :          void set_need_qualifier(int need_qualifier);
  315740             : 
  315741             : 
  315742             : 
  315743             : 
  315744             : 
  315745             :      public: 
  315746             :          virtual ~SgTemplateMemberFunctionRefExp();
  315747             : 
  315748             : 
  315749             :      public: 
  315750             :          SgTemplateMemberFunctionRefExp(Sg_File_Info* startOfConstruct , SgTemplateMemberFunctionSymbol* symbol_i = NULL, int virtual_call = 0, int need_qualifier = true); 
  315751             :          SgTemplateMemberFunctionRefExp(SgTemplateMemberFunctionSymbol* symbol_i, int virtual_call, int need_qualifier); 
  315752             : 
  315753             :     protected:
  315754             : // Start of memberFunctionString
  315755             : SgTemplateMemberFunctionSymbol* p_symbol_i;
  315756             :           
  315757             : // End of memberFunctionString
  315758             : // Start of memberFunctionString
  315759             : int p_virtual_call;
  315760             :           
  315761             : // End of memberFunctionString
  315762             : // Start of memberFunctionString
  315763             : int p_need_qualifier;
  315764             :           
  315765             : // End of memberFunctionString
  315766             : // Start of memberFunctionString
  315767             : int p_name_qualification_length;
  315768             :           
  315769             : // End of memberFunctionString
  315770             : // Start of memberFunctionString
  315771             : bool p_type_elaboration_required;
  315772             :           
  315773             : // End of memberFunctionString
  315774             : // Start of memberFunctionString
  315775             : bool p_global_qualification_required;
  315776             :           
  315777             : // End of memberFunctionString
  315778             : 
  315779             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateMemberFunctionRefExp>;
  315780             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionRefExp, SgTemplateMemberFunctionSymbol*,&SgTemplateMemberFunctionRefExp::p_symbol_i>;
  315781             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionRefExp, int,&SgTemplateMemberFunctionRefExp::p_virtual_call>;
  315782             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionRefExp, int,&SgTemplateMemberFunctionRefExp::p_need_qualifier>;
  315783             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionRefExp, int,&SgTemplateMemberFunctionRefExp::p_name_qualification_length>;
  315784             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionRefExp, bool,&SgTemplateMemberFunctionRefExp::p_type_elaboration_required>;
  315785             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateMemberFunctionRefExp, bool,&SgTemplateMemberFunctionRefExp::p_global_qualification_required>;
  315786             : 
  315787             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315788             : 
  315789             : 
  315790             :    };
  315791             : #endif
  315792             : 
  315793             : // postdeclarations for SgTemplateMemberFunctionRefExp
  315794             : 
  315795             : /* #line 315796 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315796             : 
  315797             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  315798             : 
  315799             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315800             : 
  315801             : 
  315802             : /* #line 315803 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315803             : 
  315804             : 
  315805             : 
  315806             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315807             : 
  315808             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  315809             : //      This code is automatically generated for each 
  315810             : //      terminal and non-terminal within the defined 
  315811             : //      grammar.  There is a simple way to change the 
  315812             : //      code to fix bugs etc.  See the ROSE README file
  315813             : //      for directions.
  315814             : 
  315815             : // tps: (02/22/2010): Adding DLL export requirements
  315816             : #include "rosedll.h"
  315817             : 
  315818             : // predeclarations for SgAlignOfOp
  315819             : 
  315820             : /* #line 315821 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315821             : 
  315822             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  315823             : 
  315824             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  315825             : 
  315826             : #if 1
  315827             : // Class Definition for SgAlignOfOp
  315828             : class ROSE_DLL_API SgAlignOfOp  : public SgExpression
  315829             :    {
  315830             :      public:
  315831             : 
  315832             : 
  315833             : /* #line 315834 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  315834             : 
  315835             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  315836             : // Start of memberFunctionString
  315837             : /* #line 1015 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  315838             : 
  315839             :           int replace_expression(SgExpression*, SgExpression*) override ROSE_DEPRECATED_FUNCTION;
  315840             : 
  315841             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  315842             :           virtual unsigned int cfgIndexForEnd() const override;
  315843             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  315844             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  315845             : #endif
  315846             : 
  315847             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  315848             :           int  get_name_qualification_length() const override;
  315849             :           void set_name_qualification_length(int name_qualification_length) override;
  315850             : 
  315851             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  315852             :           bool get_type_elaboration_required() const override;
  315853             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  315854             : 
  315855             :        // DQ (6/11/2015): Added support for none ROSETTA generated access functions to avoid isModified flag setting semantics.
  315856             :           bool get_global_qualification_required() const override;
  315857             :           void set_global_qualification_required(bool global_qualification_required) override;
  315858             : 
  315859             : 
  315860             : 
  315861             : // End of memberFunctionString
  315862             : // Start of memberFunctionString
  315863             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  315864             : 
  315865             : // *** COMMON CODE SECTION BEGINS HERE ***
  315866             : 
  315867             :     public:
  315868             : 
  315869             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  315870             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  315871             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  315872             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  315873             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  315874             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  315875             : 
  315876             :       /*! \brief returns a string representing the class name */
  315877             :           virtual std::string class_name() const override;
  315878             : 
  315879             :       /*! \brief returns new style SageIII enum values */
  315880             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  315881             : 
  315882             :       /*! \brief static variant value */
  315883             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  315884             :        // static const VariantT static_variant = V_SgAlignOfOp;
  315885             :           enum { static_variant = V_SgAlignOfOp };
  315886             : 
  315887             :        /* the generated cast function */
  315888             :       /*! \brief Casts pointer from base class to derived class */
  315889             :           ROSE_DLL_API friend       SgAlignOfOp* isSgAlignOfOp(       SgNode * s );
  315890             : 
  315891             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  315892             :           ROSE_DLL_API friend const SgAlignOfOp* isSgAlignOfOp( const SgNode * s );
  315893             : 
  315894             :      // ******************************************
  315895             :      // * Memory Pool / New / Delete
  315896             :      // ******************************************
  315897             : 
  315898             :      public:
  315899             :           /// \private
  315900             :           static const unsigned pool_size; //
  315901             :           /// \private
  315902             :           static std::vector<unsigned char *> pools; //
  315903             :           /// \private
  315904             :           static SgAlignOfOp * next_node; // 
  315905             : 
  315906             :           /// \private
  315907             :           static unsigned long initializeStorageClassArray(SgAlignOfOpStorageClass *); //
  315908             : 
  315909             :           /// \private
  315910             :           static void clearMemoryPool(); //
  315911             :           static void deleteMemoryPool(); //
  315912             : 
  315913             :           /// \private
  315914             :           static void extendMemoryPoolForFileIO(); //
  315915             : 
  315916             :           /// \private
  315917             :           static SgAlignOfOp * getPointerFromGlobalIndex(unsigned long); //
  315918             :           /// \private
  315919             :           static SgAlignOfOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  315920             : 
  315921             :           /// \private
  315922             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  315923             :           /// \private
  315924             :           static void resetValidFreepointers(); //
  315925             :           /// \private
  315926             :           static unsigned long getNumberOfLastValidPointer(); //
  315927             : 
  315928             : 
  315929             : #if defined(INLINE_FUNCTIONS)
  315930             :       /*! \brief returns pointer to newly allocated IR node */
  315931             :           inline void *operator new (size_t size);
  315932             : #else
  315933             :       /*! \brief returns pointer to newly allocated IR node */
  315934             :           void *operator new (size_t size);
  315935             : #endif
  315936             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  315937             :           void operator delete (void* pointer, size_t size);
  315938             : 
  315939             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  315940          10 :           void operator delete (void* pointer)
  315941             :              {
  315942             :             // This is the generated delete operator...
  315943          10 :                SgAlignOfOp::operator delete (pointer,sizeof(SgAlignOfOp));
  315944             :              }
  315945             : 
  315946             :       /*! \brief Returns the total number of IR nodes of this type */
  315947             :           static size_t numberOfNodes();
  315948             : 
  315949             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  315950             :           static size_t memoryUsage();
  315951             : 
  315952             :       // End of scope which started in IR nodes specific code 
  315953             :       /* */
  315954             : 
  315955             :       /* name Internal Functions
  315956             :           \brief Internal functions ... incomplete-documentation
  315957             : 
  315958             :           These functions have been made public as part of the design, but they are suggested for internal use 
  315959             :           or by particularly knowledgeable users for specialized tools or applications.
  315960             : 
  315961             :           \internal We could not make these private because they are required by user for special purposes. And 
  315962             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  315963             :          
  315964             :        */
  315965             : 
  315966             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  315967             :        // overridden in every class by *generated* implementation
  315968             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  315969             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  315970             :        // MS: 06/28/02 container of names of variables or container indices 
  315971             :        // used used in the traversal to access AST successor nodes
  315972             :        // overridden in every class by *generated* implementation
  315973             :       /*! \brief container of names of variables or container indices used used in the traversal
  315974             :           to access AST successor nodes overridden in every class by *generated* implementation */
  315975             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  315976             : 
  315977             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  315978             :        // than all the vector copies. The implementation for these functions is generated for each class.
  315979             :       /*! \brief return number of children in the traversal successor list */
  315980             :           virtual size_t get_numberOfTraversalSuccessors() override;
  315981             :       /*! \brief index-based access to traversal successors by index number */
  315982             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  315983             :       /*! \brief index-based access to traversal successors by child node */
  315984             :           virtual size_t get_childIndex(SgNode *child) override;
  315985             : 
  315986             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  315987             :        // MS: 08/16/2002 method for generating RTI information
  315988             :       /*! \brief return C++ Runtime-Time-Information */
  315989             :           virtual RTIReturnType roseRTI() override;
  315990             : #endif
  315991             :       /* */
  315992             : 
  315993             : 
  315994             : 
  315995             :       /* name Deprecated Functions
  315996             :           \brief Deprecated functions ... incomplete-documentation
  315997             : 
  315998             :           These functions have been deprecated from use.
  315999             :        */
  316000             :       /* */
  316001             : 
  316002             :       /*! returns a C style string (char*) representing the class name */
  316003             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  316004             : 
  316005             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  316006             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  316007             : #if 0
  316008             :       /*! returns old style Sage II enum values */
  316009             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  316010             :       /*! returns old style Sage II enum values */
  316011             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  316012             : #endif
  316013             :       /* */
  316014             : 
  316015             : 
  316016             : 
  316017             : 
  316018             :      public:
  316019             :       /* name Traversal Support Functions
  316020             :           \brief Traversal support functions ... incomplete-documentation
  316021             : 
  316022             :           These functions have been made public as part of the design, but they are suggested for internal use 
  316023             :           or by particularly knowledgable users for specialized tools or applications.
  316024             :        */
  316025             :       /* */
  316026             : 
  316027             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  316028             :        // (inferior to ROSE traversal mechanism, experimental).
  316029             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  316030             :        */
  316031             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  316032             : 
  316033             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  316034             :       /*! \brief support for the classic visitor pattern done in GoF */
  316035             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  316036             : 
  316037             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  316038             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  316039             :        */
  316040             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  316041             : 
  316042             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  316043             :        */
  316044             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  316045             : 
  316046             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  316047             :        // This traversal helps support internal tools that call static member functions.
  316048             :        // note: this function operates on the memory pools.
  316049             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  316050             :        */
  316051             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  316052             :       /* */
  316053             : 
  316054             : 
  316055             :      public:
  316056             :       /* name Memory Allocation Functions
  316057             :           \brief Memory allocations functions ... incomplete-documentation
  316058             : 
  316059             :           These functions have been made public as part of the design, but they are suggested for internal use 
  316060             :           or by particularly knowledgable users for specialized tools or applications.
  316061             :        */
  316062             :       /* */
  316063             : 
  316064             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  316065             : 
  316066             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  316067             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  316068             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  316069             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  316070             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  316071             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  316072             :           being used with the AST File I/O mechanism.
  316073             :        */
  316074             :           virtual bool isInMemoryPool() override;
  316075             : 
  316076             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  316077             : 
  316078             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  316079             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  316080             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  316081             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  316082             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  316083             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  316084             :           being used with the AST File I/O mechanism.
  316085             :        */
  316086             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  316087             : 
  316088             :       // DQ (4/30/2006): Modified to be a const function.
  316089             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  316090             : 
  316091             :           This functions is part of general support for many possible tools to operate 
  316092             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  316093             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  316094             :           less than the set of pointers used by the AST file I/O. This is part of
  316095             :           work implemented by Andreas, and support tools such as the AST graph generation.
  316096             : 
  316097             :           \warning This function can return unexpected data members and thus the 
  316098             :                    order and the number of elements is unpredicable and subject 
  316099             :                    to change.
  316100             : 
  316101             :           \returns STL vector of pairs of SgNode* and strings
  316102             :        */
  316103             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  316104             : 
  316105             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  316106             : 
  316107             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  316108             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  316109             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  316110             : 
  316111             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  316112             :                    and subject to change.
  316113             :        */
  316114             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  316115             : 
  316116             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  316117             : 
  316118             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  316119             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  316120             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  316121             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  316122             : 
  316123             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  316124             : 
  316125             :           \returns long
  316126             :        */
  316127             :           virtual long getChildIndex( SgNode* childNode ) const override;
  316128             : 
  316129             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  316130             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  316131             :       /* \brief Constructor for use by AST File I/O Mechanism
  316132             : 
  316133             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  316134             :           which obtained via fast binary file I/O from disk.
  316135             :        */
  316136             :        // SgAlignOfOp( SgAlignOfOpStorageClass& source );
  316137             : 
  316138             : 
  316139             : 
  316140             : 
  316141             : 
  316142             :  // JH (10/24/2005): methods added to support the ast file IO
  316143             :     private:
  316144             : 
  316145             :       /* name AST Memory Allocation Support Functions
  316146             :           \brief Memory allocations support....
  316147             : 
  316148             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  316149             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  316150             :           and support the AST File I/O Mechanism.
  316151             :        */
  316152             :       /* */
  316153             : 
  316154             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  316155             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  316156             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  316157             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  316158             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  316159             :           a correspinding one in the AST_FILE_IO class!
  316160             :        */
  316161             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  316162             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  316163             :       /* \brief Typedef used for low level memory access.
  316164             :        */
  316165             :        // typedef unsigned char* TestType;
  316166             : 
  316167             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  316168             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  316169             :       /* \brief Typedef used to hold memory addresses as values.
  316170             :        */
  316171             :        // typedef unsigned long  AddressType;
  316172             : 
  316173             : 
  316174             : 
  316175             :        // necessary, to have direct access to the p_freepointer and the private methods !
  316176             :       /*! \brief friend class declaration to support AST File I/O */
  316177             :           friend class AST_FILE_IO;
  316178             : 
  316179             :       /*! \brief friend class declaration to support AST File I/O */
  316180             :           friend class SgAlignOfOpStorageClass;
  316181             : 
  316182             :       /*! \brief friend class declaration to support AST File I/O */
  316183             :           friend class AstSpecificDataManagingClass;
  316184             : 
  316185             :       /*! \brief friend class declaration to support AST File I/O */
  316186             :           friend class AstSpecificDataManagingClassStorageClass;
  316187             :     public:
  316188             :       /*! \brief IR node constructor to support AST File I/O */
  316189             :           SgAlignOfOp( const SgAlignOfOpStorageClass& source );
  316190             : 
  316191             :  // private: // JJW hack
  316192             :        /*
  316193             :           name AST Memory Allocation Support Variables
  316194             :           Memory allocations support variables 
  316195             : 
  316196             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  316197             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  316198             :           and support the AST File I/O Mechanism.
  316199             :        */
  316200             :       /* */
  316201             : 
  316202             :     public:
  316203             : 
  316204             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  316205             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  316206             :       // virtual SgNode* addRegExpAttribute();
  316207             :       /*! \brief Support for AST matching using regular expression.
  316208             : 
  316209             :           This support is incomplete and the subject of current research to define 
  316210             :           RegEx trees to support inexact matching.
  316211             :        */
  316212             :           SgAlignOfOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  316213             : 
  316214             : // *** COMMON CODE SECTION ENDS HERE ***
  316215             : 
  316216             : 
  316217             : // End of memberFunctionString
  316218             : // Start of memberFunctionString
  316219             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  316220             : 
  316221             :      // the generated cast function
  316222             :      // friend ROSE_DLL_API SgAlignOfOp* isSgAlignOfOp ( SgNode* s );
  316223             : 
  316224             :           typedef SgExpression base_node_type;
  316225             : 
  316226             : 
  316227             : // End of memberFunctionString
  316228             : // Start of memberFunctionString
  316229             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  316230             : 
  316231             :           SgType* get_type() const override;
  316232             : 
  316233             : 
  316234             : // End of memberFunctionString
  316235             : // Start of memberFunctionString
  316236             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  316237             : 
  316238             :           void post_construction_initialization() override;
  316239             : 
  316240             : 
  316241             : // End of memberFunctionString
  316242             : 
  316243             :      public: 
  316244             :          SgExpression* get_operand_expr() const;
  316245             :          void set_operand_expr(SgExpression* operand_expr);
  316246             : 
  316247             :      public: 
  316248             :          SgType* get_operand_type() const;
  316249             :          void set_operand_type(SgType* operand_type);
  316250             : 
  316251             : 
  316252             : 
  316253             : 
  316254             : 
  316255             :      public: 
  316256             :          bool get_alignOfContainsBaseTypeDefiningDeclaration() const;
  316257             :          void set_alignOfContainsBaseTypeDefiningDeclaration(bool alignOfContainsBaseTypeDefiningDeclaration);
  316258             : 
  316259             : 
  316260             :      public: 
  316261             :          virtual ~SgAlignOfOp();
  316262             : 
  316263             : 
  316264             :      public: 
  316265             :          SgAlignOfOp(Sg_File_Info* startOfConstruct , SgExpression* operand_expr = NULL, SgType* operand_type = NULL, SgType* expression_type = NULL); 
  316266             :          SgAlignOfOp(SgExpression* operand_expr, SgType* operand_type, SgType* expression_type); 
  316267             : 
  316268             :     protected:
  316269             : // Start of memberFunctionString
  316270             : SgExpression* p_operand_expr;
  316271             :           
  316272             : // End of memberFunctionString
  316273             : // Start of memberFunctionString
  316274             : SgType* p_operand_type;
  316275             :           
  316276             : // End of memberFunctionString
  316277             : // Start of memberFunctionString
  316278             : SgType* p_expression_type;
  316279             :           
  316280             : // End of memberFunctionString
  316281             : // Start of memberFunctionString
  316282             : int p_name_qualification_length;
  316283             :           
  316284             : // End of memberFunctionString
  316285             : // Start of memberFunctionString
  316286             : bool p_type_elaboration_required;
  316287             :           
  316288             : // End of memberFunctionString
  316289             : // Start of memberFunctionString
  316290             : bool p_global_qualification_required;
  316291             :           
  316292             : // End of memberFunctionString
  316293             : // Start of memberFunctionString
  316294             : bool p_alignOfContainsBaseTypeDefiningDeclaration;
  316295             :           
  316296             : // End of memberFunctionString
  316297             : 
  316298             :     friend struct Rose::Traits::generated::describe_node_t<SgAlignOfOp>;
  316299             :     friend struct Rose::Traits::generated::describe_field_t<SgAlignOfOp, SgExpression*,&SgAlignOfOp::p_operand_expr>;
  316300             :     friend struct Rose::Traits::generated::describe_field_t<SgAlignOfOp, SgType*,&SgAlignOfOp::p_operand_type>;
  316301             :     friend struct Rose::Traits::generated::describe_field_t<SgAlignOfOp, SgType*,&SgAlignOfOp::p_expression_type>;
  316302             :     friend struct Rose::Traits::generated::describe_field_t<SgAlignOfOp, int,&SgAlignOfOp::p_name_qualification_length>;
  316303             :     friend struct Rose::Traits::generated::describe_field_t<SgAlignOfOp, bool,&SgAlignOfOp::p_type_elaboration_required>;
  316304             :     friend struct Rose::Traits::generated::describe_field_t<SgAlignOfOp, bool,&SgAlignOfOp::p_global_qualification_required>;
  316305             :     friend struct Rose::Traits::generated::describe_field_t<SgAlignOfOp, bool,&SgAlignOfOp::p_alignOfContainsBaseTypeDefiningDeclaration>;
  316306             : 
  316307             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316308             : 
  316309             : 
  316310             :    };
  316311             : #endif
  316312             : 
  316313             : // postdeclarations for SgAlignOfOp
  316314             : 
  316315             : /* #line 316316 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316316             : 
  316317             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  316318             : 
  316319             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316320             : 
  316321             : 
  316322             : /* #line 316323 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316323             : 
  316324             : 
  316325             : 
  316326             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316327             : 
  316328             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  316329             : //      This code is automatically generated for each 
  316330             : //      terminal and non-terminal within the defined 
  316331             : //      grammar.  There is a simple way to change the 
  316332             : //      code to fix bugs etc.  See the ROSE README file
  316333             : //      for directions.
  316334             : 
  316335             : // tps: (02/22/2010): Adding DLL export requirements
  316336             : #include "rosedll.h"
  316337             : 
  316338             : // predeclarations for SgRangeExp
  316339             : 
  316340             : /* #line 316341 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316341             : 
  316342             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  316343             : 
  316344             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316345             : 
  316346             : #if 1
  316347             : // Class Definition for SgRangeExp
  316348             : class ROSE_DLL_API SgRangeExp  : public SgExpression
  316349             :    {
  316350             :      public:
  316351             : 
  316352             : 
  316353             : /* #line 316354 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316354             : 
  316355             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  316356             : // Start of memberFunctionString
  316357             : /* #line 295 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  316358             : 
  316359             : //Append an expression to the range
  316360             : SgRangeExp* append(SgExpression *exp);
  316361             : 
  316362             : 
  316363             : // End of memberFunctionString
  316364             : // Start of memberFunctionString
  316365             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  316366             : 
  316367             : // *** COMMON CODE SECTION BEGINS HERE ***
  316368             : 
  316369             :     public:
  316370             : 
  316371             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  316372             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  316373             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  316374             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  316375             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  316376             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  316377             : 
  316378             :       /*! \brief returns a string representing the class name */
  316379             :           virtual std::string class_name() const override;
  316380             : 
  316381             :       /*! \brief returns new style SageIII enum values */
  316382             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  316383             : 
  316384             :       /*! \brief static variant value */
  316385             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  316386             :        // static const VariantT static_variant = V_SgRangeExp;
  316387             :           enum { static_variant = V_SgRangeExp };
  316388             : 
  316389             :        /* the generated cast function */
  316390             :       /*! \brief Casts pointer from base class to derived class */
  316391             :           ROSE_DLL_API friend       SgRangeExp* isSgRangeExp(       SgNode * s );
  316392             : 
  316393             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  316394             :           ROSE_DLL_API friend const SgRangeExp* isSgRangeExp( const SgNode * s );
  316395             : 
  316396             :      // ******************************************
  316397             :      // * Memory Pool / New / Delete
  316398             :      // ******************************************
  316399             : 
  316400             :      public:
  316401             :           /// \private
  316402             :           static const unsigned pool_size; //
  316403             :           /// \private
  316404             :           static std::vector<unsigned char *> pools; //
  316405             :           /// \private
  316406             :           static SgRangeExp * next_node; // 
  316407             : 
  316408             :           /// \private
  316409             :           static unsigned long initializeStorageClassArray(SgRangeExpStorageClass *); //
  316410             : 
  316411             :           /// \private
  316412             :           static void clearMemoryPool(); //
  316413             :           static void deleteMemoryPool(); //
  316414             : 
  316415             :           /// \private
  316416             :           static void extendMemoryPoolForFileIO(); //
  316417             : 
  316418             :           /// \private
  316419             :           static SgRangeExp * getPointerFromGlobalIndex(unsigned long); //
  316420             :           /// \private
  316421             :           static SgRangeExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  316422             : 
  316423             :           /// \private
  316424             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  316425             :           /// \private
  316426             :           static void resetValidFreepointers(); //
  316427             :           /// \private
  316428             :           static unsigned long getNumberOfLastValidPointer(); //
  316429             : 
  316430             : 
  316431             : #if defined(INLINE_FUNCTIONS)
  316432             :       /*! \brief returns pointer to newly allocated IR node */
  316433             :           inline void *operator new (size_t size);
  316434             : #else
  316435             :       /*! \brief returns pointer to newly allocated IR node */
  316436             :           void *operator new (size_t size);
  316437             : #endif
  316438             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  316439             :           void operator delete (void* pointer, size_t size);
  316440             : 
  316441             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  316442           0 :           void operator delete (void* pointer)
  316443             :              {
  316444             :             // This is the generated delete operator...
  316445           0 :                SgRangeExp::operator delete (pointer,sizeof(SgRangeExp));
  316446             :              }
  316447             : 
  316448             :       /*! \brief Returns the total number of IR nodes of this type */
  316449             :           static size_t numberOfNodes();
  316450             : 
  316451             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  316452             :           static size_t memoryUsage();
  316453             : 
  316454             :       // End of scope which started in IR nodes specific code 
  316455             :       /* */
  316456             : 
  316457             :       /* name Internal Functions
  316458             :           \brief Internal functions ... incomplete-documentation
  316459             : 
  316460             :           These functions have been made public as part of the design, but they are suggested for internal use 
  316461             :           or by particularly knowledgeable users for specialized tools or applications.
  316462             : 
  316463             :           \internal We could not make these private because they are required by user for special purposes. And 
  316464             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  316465             :          
  316466             :        */
  316467             : 
  316468             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  316469             :        // overridden in every class by *generated* implementation
  316470             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  316471             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  316472             :        // MS: 06/28/02 container of names of variables or container indices 
  316473             :        // used used in the traversal to access AST successor nodes
  316474             :        // overridden in every class by *generated* implementation
  316475             :       /*! \brief container of names of variables or container indices used used in the traversal
  316476             :           to access AST successor nodes overridden in every class by *generated* implementation */
  316477             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  316478             : 
  316479             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  316480             :        // than all the vector copies. The implementation for these functions is generated for each class.
  316481             :       /*! \brief return number of children in the traversal successor list */
  316482             :           virtual size_t get_numberOfTraversalSuccessors() override;
  316483             :       /*! \brief index-based access to traversal successors by index number */
  316484             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  316485             :       /*! \brief index-based access to traversal successors by child node */
  316486             :           virtual size_t get_childIndex(SgNode *child) override;
  316487             : 
  316488             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  316489             :        // MS: 08/16/2002 method for generating RTI information
  316490             :       /*! \brief return C++ Runtime-Time-Information */
  316491             :           virtual RTIReturnType roseRTI() override;
  316492             : #endif
  316493             :       /* */
  316494             : 
  316495             : 
  316496             : 
  316497             :       /* name Deprecated Functions
  316498             :           \brief Deprecated functions ... incomplete-documentation
  316499             : 
  316500             :           These functions have been deprecated from use.
  316501             :        */
  316502             :       /* */
  316503             : 
  316504             :       /*! returns a C style string (char*) representing the class name */
  316505             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  316506             : 
  316507             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  316508             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  316509             : #if 0
  316510             :       /*! returns old style Sage II enum values */
  316511             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  316512             :       /*! returns old style Sage II enum values */
  316513             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  316514             : #endif
  316515             :       /* */
  316516             : 
  316517             : 
  316518             : 
  316519             : 
  316520             :      public:
  316521             :       /* name Traversal Support Functions
  316522             :           \brief Traversal support functions ... incomplete-documentation
  316523             : 
  316524             :           These functions have been made public as part of the design, but they are suggested for internal use 
  316525             :           or by particularly knowledgable users for specialized tools or applications.
  316526             :        */
  316527             :       /* */
  316528             : 
  316529             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  316530             :        // (inferior to ROSE traversal mechanism, experimental).
  316531             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  316532             :        */
  316533             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  316534             : 
  316535             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  316536             :       /*! \brief support for the classic visitor pattern done in GoF */
  316537             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  316538             : 
  316539             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  316540             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  316541             :        */
  316542             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  316543             : 
  316544             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  316545             :        */
  316546             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  316547             : 
  316548             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  316549             :        // This traversal helps support internal tools that call static member functions.
  316550             :        // note: this function operates on the memory pools.
  316551             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  316552             :        */
  316553             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  316554             :       /* */
  316555             : 
  316556             : 
  316557             :      public:
  316558             :       /* name Memory Allocation Functions
  316559             :           \brief Memory allocations functions ... incomplete-documentation
  316560             : 
  316561             :           These functions have been made public as part of the design, but they are suggested for internal use 
  316562             :           or by particularly knowledgable users for specialized tools or applications.
  316563             :        */
  316564             :       /* */
  316565             : 
  316566             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  316567             : 
  316568             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  316569             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  316570             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  316571             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  316572             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  316573             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  316574             :           being used with the AST File I/O mechanism.
  316575             :        */
  316576             :           virtual bool isInMemoryPool() override;
  316577             : 
  316578             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  316579             : 
  316580             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  316581             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  316582             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  316583             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  316584             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  316585             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  316586             :           being used with the AST File I/O mechanism.
  316587             :        */
  316588             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  316589             : 
  316590             :       // DQ (4/30/2006): Modified to be a const function.
  316591             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  316592             : 
  316593             :           This functions is part of general support for many possible tools to operate 
  316594             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  316595             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  316596             :           less than the set of pointers used by the AST file I/O. This is part of
  316597             :           work implemented by Andreas, and support tools such as the AST graph generation.
  316598             : 
  316599             :           \warning This function can return unexpected data members and thus the 
  316600             :                    order and the number of elements is unpredicable and subject 
  316601             :                    to change.
  316602             : 
  316603             :           \returns STL vector of pairs of SgNode* and strings
  316604             :        */
  316605             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  316606             : 
  316607             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  316608             : 
  316609             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  316610             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  316611             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  316612             : 
  316613             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  316614             :                    and subject to change.
  316615             :        */
  316616             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  316617             : 
  316618             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  316619             : 
  316620             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  316621             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  316622             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  316623             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  316624             : 
  316625             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  316626             : 
  316627             :           \returns long
  316628             :        */
  316629             :           virtual long getChildIndex( SgNode* childNode ) const override;
  316630             : 
  316631             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  316632             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  316633             :       /* \brief Constructor for use by AST File I/O Mechanism
  316634             : 
  316635             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  316636             :           which obtained via fast binary file I/O from disk.
  316637             :        */
  316638             :        // SgRangeExp( SgRangeExpStorageClass& source );
  316639             : 
  316640             : 
  316641             : 
  316642             : 
  316643             : 
  316644             :  // JH (10/24/2005): methods added to support the ast file IO
  316645             :     private:
  316646             : 
  316647             :       /* name AST Memory Allocation Support Functions
  316648             :           \brief Memory allocations support....
  316649             : 
  316650             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  316651             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  316652             :           and support the AST File I/O Mechanism.
  316653             :        */
  316654             :       /* */
  316655             : 
  316656             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  316657             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  316658             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  316659             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  316660             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  316661             :           a correspinding one in the AST_FILE_IO class!
  316662             :        */
  316663             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  316664             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  316665             :       /* \brief Typedef used for low level memory access.
  316666             :        */
  316667             :        // typedef unsigned char* TestType;
  316668             : 
  316669             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  316670             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  316671             :       /* \brief Typedef used to hold memory addresses as values.
  316672             :        */
  316673             :        // typedef unsigned long  AddressType;
  316674             : 
  316675             : 
  316676             : 
  316677             :        // necessary, to have direct access to the p_freepointer and the private methods !
  316678             :       /*! \brief friend class declaration to support AST File I/O */
  316679             :           friend class AST_FILE_IO;
  316680             : 
  316681             :       /*! \brief friend class declaration to support AST File I/O */
  316682             :           friend class SgRangeExpStorageClass;
  316683             : 
  316684             :       /*! \brief friend class declaration to support AST File I/O */
  316685             :           friend class AstSpecificDataManagingClass;
  316686             : 
  316687             :       /*! \brief friend class declaration to support AST File I/O */
  316688             :           friend class AstSpecificDataManagingClassStorageClass;
  316689             :     public:
  316690             :       /*! \brief IR node constructor to support AST File I/O */
  316691             :           SgRangeExp( const SgRangeExpStorageClass& source );
  316692             : 
  316693             :  // private: // JJW hack
  316694             :        /*
  316695             :           name AST Memory Allocation Support Variables
  316696             :           Memory allocations support variables 
  316697             : 
  316698             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  316699             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  316700             :           and support the AST File I/O Mechanism.
  316701             :        */
  316702             :       /* */
  316703             : 
  316704             :     public:
  316705             : 
  316706             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  316707             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  316708             :       // virtual SgNode* addRegExpAttribute();
  316709             :       /*! \brief Support for AST matching using regular expression.
  316710             : 
  316711             :           This support is incomplete and the subject of current research to define 
  316712             :           RegEx trees to support inexact matching.
  316713             :        */
  316714             :           SgRangeExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  316715             : 
  316716             : // *** COMMON CODE SECTION ENDS HERE ***
  316717             : 
  316718             : 
  316719             : // End of memberFunctionString
  316720             : // Start of memberFunctionString
  316721             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  316722             : 
  316723             :      // the generated cast function
  316724             :      // friend ROSE_DLL_API SgRangeExp* isSgRangeExp ( SgNode* s );
  316725             : 
  316726             :           typedef SgExpression base_node_type;
  316727             : 
  316728             : 
  316729             : // End of memberFunctionString
  316730             : // Start of memberFunctionString
  316731             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  316732             : 
  316733             :           SgType* get_type() const override;
  316734             : 
  316735             : 
  316736             : // End of memberFunctionString
  316737             : // Start of memberFunctionString
  316738             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  316739             : 
  316740             :           void post_construction_initialization() override;
  316741             : 
  316742             : 
  316743             : // End of memberFunctionString
  316744             : 
  316745             :      public: 
  316746             :          SgExpression* get_start() const;
  316747             :          void set_start(SgExpression* start);
  316748             : 
  316749             :      public: 
  316750             :          SgExpression* get_end() const;
  316751             :          void set_end(SgExpression* end);
  316752             : 
  316753             :      public: 
  316754             :          SgExpression* get_stride() const;
  316755             :          void set_stride(SgExpression* stride);
  316756             : 
  316757             : 
  316758             :      public: 
  316759             :          virtual ~SgRangeExp();
  316760             : 
  316761             : 
  316762             :      public: 
  316763             :          SgRangeExp(Sg_File_Info* startOfConstruct ); 
  316764             :          SgRangeExp(); 
  316765             : 
  316766             :     protected:
  316767             : // Start of memberFunctionString
  316768             : SgExpression* p_start;
  316769             :           
  316770             : // End of memberFunctionString
  316771             : // Start of memberFunctionString
  316772             : SgExpression* p_end;
  316773             :           
  316774             : // End of memberFunctionString
  316775             : // Start of memberFunctionString
  316776             : SgExpression* p_stride;
  316777             :           
  316778             : // End of memberFunctionString
  316779             : 
  316780             :     friend struct Rose::Traits::generated::describe_node_t<SgRangeExp>;
  316781             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeExp, SgExpression*,&SgRangeExp::p_start>;
  316782             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeExp, SgExpression*,&SgRangeExp::p_end>;
  316783             :     friend struct Rose::Traits::generated::describe_field_t<SgRangeExp, SgExpression*,&SgRangeExp::p_stride>;
  316784             : 
  316785             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316786             : 
  316787             : 
  316788             :    };
  316789             : #endif
  316790             : 
  316791             : // postdeclarations for SgRangeExp
  316792             : 
  316793             : /* #line 316794 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316794             : 
  316795             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  316796             : 
  316797             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316798             : 
  316799             : 
  316800             : /* #line 316801 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316801             : 
  316802             : 
  316803             : 
  316804             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316805             : 
  316806             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  316807             : //      This code is automatically generated for each 
  316808             : //      terminal and non-terminal within the defined 
  316809             : //      grammar.  There is a simple way to change the 
  316810             : //      code to fix bugs etc.  See the ROSE README file
  316811             : //      for directions.
  316812             : 
  316813             : // tps: (02/22/2010): Adding DLL export requirements
  316814             : #include "rosedll.h"
  316815             : 
  316816             : // predeclarations for SgMagicColonExp
  316817             : 
  316818             : /* #line 316819 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316819             : 
  316820             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  316821             : 
  316822             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  316823             : 
  316824             : #if 1
  316825             : // Class Definition for SgMagicColonExp
  316826             : class ROSE_DLL_API SgMagicColonExp  : public SgExpression
  316827             :    {
  316828             :      public:
  316829             : 
  316830             : 
  316831             : /* #line 316832 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  316832             : 
  316833             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  316834             : // Start of memberFunctionString
  316835             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  316836             : 
  316837             : // *** COMMON CODE SECTION BEGINS HERE ***
  316838             : 
  316839             :     public:
  316840             : 
  316841             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  316842             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  316843             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  316844             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  316845             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  316846             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  316847             : 
  316848             :       /*! \brief returns a string representing the class name */
  316849             :           virtual std::string class_name() const override;
  316850             : 
  316851             :       /*! \brief returns new style SageIII enum values */
  316852             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  316853             : 
  316854             :       /*! \brief static variant value */
  316855             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  316856             :        // static const VariantT static_variant = V_SgMagicColonExp;
  316857             :           enum { static_variant = V_SgMagicColonExp };
  316858             : 
  316859             :        /* the generated cast function */
  316860             :       /*! \brief Casts pointer from base class to derived class */
  316861             :           ROSE_DLL_API friend       SgMagicColonExp* isSgMagicColonExp(       SgNode * s );
  316862             : 
  316863             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  316864             :           ROSE_DLL_API friend const SgMagicColonExp* isSgMagicColonExp( const SgNode * s );
  316865             : 
  316866             :      // ******************************************
  316867             :      // * Memory Pool / New / Delete
  316868             :      // ******************************************
  316869             : 
  316870             :      public:
  316871             :           /// \private
  316872             :           static const unsigned pool_size; //
  316873             :           /// \private
  316874             :           static std::vector<unsigned char *> pools; //
  316875             :           /// \private
  316876             :           static SgMagicColonExp * next_node; // 
  316877             : 
  316878             :           /// \private
  316879             :           static unsigned long initializeStorageClassArray(SgMagicColonExpStorageClass *); //
  316880             : 
  316881             :           /// \private
  316882             :           static void clearMemoryPool(); //
  316883             :           static void deleteMemoryPool(); //
  316884             : 
  316885             :           /// \private
  316886             :           static void extendMemoryPoolForFileIO(); //
  316887             : 
  316888             :           /// \private
  316889             :           static SgMagicColonExp * getPointerFromGlobalIndex(unsigned long); //
  316890             :           /// \private
  316891             :           static SgMagicColonExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  316892             : 
  316893             :           /// \private
  316894             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  316895             :           /// \private
  316896             :           static void resetValidFreepointers(); //
  316897             :           /// \private
  316898             :           static unsigned long getNumberOfLastValidPointer(); //
  316899             : 
  316900             : 
  316901             : #if defined(INLINE_FUNCTIONS)
  316902             :       /*! \brief returns pointer to newly allocated IR node */
  316903             :           inline void *operator new (size_t size);
  316904             : #else
  316905             :       /*! \brief returns pointer to newly allocated IR node */
  316906             :           void *operator new (size_t size);
  316907             : #endif
  316908             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  316909             :           void operator delete (void* pointer, size_t size);
  316910             : 
  316911             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  316912           0 :           void operator delete (void* pointer)
  316913             :              {
  316914             :             // This is the generated delete operator...
  316915           0 :                SgMagicColonExp::operator delete (pointer,sizeof(SgMagicColonExp));
  316916             :              }
  316917             : 
  316918             :       /*! \brief Returns the total number of IR nodes of this type */
  316919             :           static size_t numberOfNodes();
  316920             : 
  316921             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  316922             :           static size_t memoryUsage();
  316923             : 
  316924             :       // End of scope which started in IR nodes specific code 
  316925             :       /* */
  316926             : 
  316927             :       /* name Internal Functions
  316928             :           \brief Internal functions ... incomplete-documentation
  316929             : 
  316930             :           These functions have been made public as part of the design, but they are suggested for internal use 
  316931             :           or by particularly knowledgeable users for specialized tools or applications.
  316932             : 
  316933             :           \internal We could not make these private because they are required by user for special purposes. And 
  316934             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  316935             :          
  316936             :        */
  316937             : 
  316938             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  316939             :        // overridden in every class by *generated* implementation
  316940             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  316941             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  316942             :        // MS: 06/28/02 container of names of variables or container indices 
  316943             :        // used used in the traversal to access AST successor nodes
  316944             :        // overridden in every class by *generated* implementation
  316945             :       /*! \brief container of names of variables or container indices used used in the traversal
  316946             :           to access AST successor nodes overridden in every class by *generated* implementation */
  316947             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  316948             : 
  316949             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  316950             :        // than all the vector copies. The implementation for these functions is generated for each class.
  316951             :       /*! \brief return number of children in the traversal successor list */
  316952             :           virtual size_t get_numberOfTraversalSuccessors() override;
  316953             :       /*! \brief index-based access to traversal successors by index number */
  316954             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  316955             :       /*! \brief index-based access to traversal successors by child node */
  316956             :           virtual size_t get_childIndex(SgNode *child) override;
  316957             : 
  316958             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  316959             :        // MS: 08/16/2002 method for generating RTI information
  316960             :       /*! \brief return C++ Runtime-Time-Information */
  316961             :           virtual RTIReturnType roseRTI() override;
  316962             : #endif
  316963             :       /* */
  316964             : 
  316965             : 
  316966             : 
  316967             :       /* name Deprecated Functions
  316968             :           \brief Deprecated functions ... incomplete-documentation
  316969             : 
  316970             :           These functions have been deprecated from use.
  316971             :        */
  316972             :       /* */
  316973             : 
  316974             :       /*! returns a C style string (char*) representing the class name */
  316975             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  316976             : 
  316977             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  316978             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  316979             : #if 0
  316980             :       /*! returns old style Sage II enum values */
  316981             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  316982             :       /*! returns old style Sage II enum values */
  316983             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  316984             : #endif
  316985             :       /* */
  316986             : 
  316987             : 
  316988             : 
  316989             : 
  316990             :      public:
  316991             :       /* name Traversal Support Functions
  316992             :           \brief Traversal support functions ... incomplete-documentation
  316993             : 
  316994             :           These functions have been made public as part of the design, but they are suggested for internal use 
  316995             :           or by particularly knowledgable users for specialized tools or applications.
  316996             :        */
  316997             :       /* */
  316998             : 
  316999             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  317000             :        // (inferior to ROSE traversal mechanism, experimental).
  317001             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  317002             :        */
  317003             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  317004             : 
  317005             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  317006             :       /*! \brief support for the classic visitor pattern done in GoF */
  317007             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  317008             : 
  317009             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  317010             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  317011             :        */
  317012             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  317013             : 
  317014             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  317015             :        */
  317016             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  317017             : 
  317018             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  317019             :        // This traversal helps support internal tools that call static member functions.
  317020             :        // note: this function operates on the memory pools.
  317021             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  317022             :        */
  317023             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  317024             :       /* */
  317025             : 
  317026             : 
  317027             :      public:
  317028             :       /* name Memory Allocation Functions
  317029             :           \brief Memory allocations functions ... incomplete-documentation
  317030             : 
  317031             :           These functions have been made public as part of the design, but they are suggested for internal use 
  317032             :           or by particularly knowledgable users for specialized tools or applications.
  317033             :        */
  317034             :       /* */
  317035             : 
  317036             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  317037             : 
  317038             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  317039             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  317040             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  317041             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  317042             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  317043             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  317044             :           being used with the AST File I/O mechanism.
  317045             :        */
  317046             :           virtual bool isInMemoryPool() override;
  317047             : 
  317048             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  317049             : 
  317050             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  317051             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  317052             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  317053             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  317054             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  317055             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  317056             :           being used with the AST File I/O mechanism.
  317057             :        */
  317058             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  317059             : 
  317060             :       // DQ (4/30/2006): Modified to be a const function.
  317061             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  317062             : 
  317063             :           This functions is part of general support for many possible tools to operate 
  317064             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  317065             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  317066             :           less than the set of pointers used by the AST file I/O. This is part of
  317067             :           work implemented by Andreas, and support tools such as the AST graph generation.
  317068             : 
  317069             :           \warning This function can return unexpected data members and thus the 
  317070             :                    order and the number of elements is unpredicable and subject 
  317071             :                    to change.
  317072             : 
  317073             :           \returns STL vector of pairs of SgNode* and strings
  317074             :        */
  317075             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  317076             : 
  317077             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  317078             : 
  317079             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  317080             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  317081             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  317082             : 
  317083             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  317084             :                    and subject to change.
  317085             :        */
  317086             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  317087             : 
  317088             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  317089             : 
  317090             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  317091             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  317092             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  317093             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  317094             : 
  317095             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  317096             : 
  317097             :           \returns long
  317098             :        */
  317099             :           virtual long getChildIndex( SgNode* childNode ) const override;
  317100             : 
  317101             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  317102             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  317103             :       /* \brief Constructor for use by AST File I/O Mechanism
  317104             : 
  317105             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  317106             :           which obtained via fast binary file I/O from disk.
  317107             :        */
  317108             :        // SgMagicColonExp( SgMagicColonExpStorageClass& source );
  317109             : 
  317110             : 
  317111             : 
  317112             : 
  317113             : 
  317114             :  // JH (10/24/2005): methods added to support the ast file IO
  317115             :     private:
  317116             : 
  317117             :       /* name AST Memory Allocation Support Functions
  317118             :           \brief Memory allocations support....
  317119             : 
  317120             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  317121             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  317122             :           and support the AST File I/O Mechanism.
  317123             :        */
  317124             :       /* */
  317125             : 
  317126             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  317127             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  317128             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  317129             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  317130             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  317131             :           a correspinding one in the AST_FILE_IO class!
  317132             :        */
  317133             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  317134             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  317135             :       /* \brief Typedef used for low level memory access.
  317136             :        */
  317137             :        // typedef unsigned char* TestType;
  317138             : 
  317139             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  317140             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  317141             :       /* \brief Typedef used to hold memory addresses as values.
  317142             :        */
  317143             :        // typedef unsigned long  AddressType;
  317144             : 
  317145             : 
  317146             : 
  317147             :        // necessary, to have direct access to the p_freepointer and the private methods !
  317148             :       /*! \brief friend class declaration to support AST File I/O */
  317149             :           friend class AST_FILE_IO;
  317150             : 
  317151             :       /*! \brief friend class declaration to support AST File I/O */
  317152             :           friend class SgMagicColonExpStorageClass;
  317153             : 
  317154             :       /*! \brief friend class declaration to support AST File I/O */
  317155             :           friend class AstSpecificDataManagingClass;
  317156             : 
  317157             :       /*! \brief friend class declaration to support AST File I/O */
  317158             :           friend class AstSpecificDataManagingClassStorageClass;
  317159             :     public:
  317160             :       /*! \brief IR node constructor to support AST File I/O */
  317161             :           SgMagicColonExp( const SgMagicColonExpStorageClass& source );
  317162             : 
  317163             :  // private: // JJW hack
  317164             :        /*
  317165             :           name AST Memory Allocation Support Variables
  317166             :           Memory allocations support variables 
  317167             : 
  317168             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  317169             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  317170             :           and support the AST File I/O Mechanism.
  317171             :        */
  317172             :       /* */
  317173             : 
  317174             :     public:
  317175             : 
  317176             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  317177             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  317178             :       // virtual SgNode* addRegExpAttribute();
  317179             :       /*! \brief Support for AST matching using regular expression.
  317180             : 
  317181             :           This support is incomplete and the subject of current research to define 
  317182             :           RegEx trees to support inexact matching.
  317183             :        */
  317184             :           SgMagicColonExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  317185             : 
  317186             : // *** COMMON CODE SECTION ENDS HERE ***
  317187             : 
  317188             : 
  317189             : // End of memberFunctionString
  317190             : // Start of memberFunctionString
  317191             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  317192             : 
  317193             :      // the generated cast function
  317194             :      // friend ROSE_DLL_API SgMagicColonExp* isSgMagicColonExp ( SgNode* s );
  317195             : 
  317196             :           typedef SgExpression base_node_type;
  317197             : 
  317198             : 
  317199             : // End of memberFunctionString
  317200             : // Start of memberFunctionString
  317201             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  317202             : 
  317203             :           SgType* get_type() const override;
  317204             : 
  317205             : 
  317206             : // End of memberFunctionString
  317207             : // Start of memberFunctionString
  317208             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  317209             : 
  317210             :           void post_construction_initialization() override;
  317211             : 
  317212             : 
  317213             : // End of memberFunctionString
  317214             : 
  317215             : 
  317216             :      public: 
  317217             :          virtual ~SgMagicColonExp();
  317218             : 
  317219             : 
  317220             :      public: 
  317221             :          SgMagicColonExp(Sg_File_Info* startOfConstruct ); 
  317222             :          SgMagicColonExp(); 
  317223             : 
  317224             :     protected:
  317225             : 
  317226             :     friend struct Rose::Traits::generated::describe_node_t<SgMagicColonExp>;
  317227             : 
  317228             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317229             : 
  317230             : 
  317231             :    };
  317232             : #endif
  317233             : 
  317234             : // postdeclarations for SgMagicColonExp
  317235             : 
  317236             : /* #line 317237 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317237             : 
  317238             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  317239             : 
  317240             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317241             : 
  317242             : 
  317243             : /* #line 317244 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317244             : 
  317245             : 
  317246             : 
  317247             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317248             : 
  317249             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  317250             : //      This code is automatically generated for each 
  317251             : //      terminal and non-terminal within the defined 
  317252             : //      grammar.  There is a simple way to change the 
  317253             : //      code to fix bugs etc.  See the ROSE README file
  317254             : //      for directions.
  317255             : 
  317256             : // tps: (02/22/2010): Adding DLL export requirements
  317257             : #include "rosedll.h"
  317258             : 
  317259             : // predeclarations for SgTypeTraitBuiltinOperator
  317260             : 
  317261             : /* #line 317262 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317262             : 
  317263             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  317264             : 
  317265             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317266             : 
  317267             : #if 1
  317268             : // Class Definition for SgTypeTraitBuiltinOperator
  317269             : class ROSE_DLL_API SgTypeTraitBuiltinOperator  : public SgExpression
  317270             :    {
  317271             :      public:
  317272             : 
  317273             : 
  317274             : /* #line 317275 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317275             : 
  317276             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  317277             : // Start of memberFunctionString
  317278             : /* #line 761 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  317279             : 
  317280             : 
  317281             :        // DQ (7/13/2013): I have verified that we need implementations of these functions for the CFG support.
  317282             :        // DQ (7/12/2013): Not clear if we need these functions since the buildin functions are all pure and lack definitions.
  317283             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  317284             :           virtual unsigned int cfgIndexForEnd() const override;
  317285             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  317286             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  317287             : #endif
  317288             : 
  317289             :        // DQ (7/12/2013): Not clear if we need these functions since the buildin functions are all pure.
  317290             :        // get lvalue
  317291             :        // virtual bool isLValue() const;
  317292             :        // virtual bool isChildUsedAsLValue(const SgExpression* child) const; // INTERNAL Recursively call up the chain to answer the child
  317293             : 
  317294             : 
  317295             : 
  317296             : // End of memberFunctionString
  317297             : // Start of memberFunctionString
  317298             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  317299             : 
  317300             : // *** COMMON CODE SECTION BEGINS HERE ***
  317301             : 
  317302             :     public:
  317303             : 
  317304             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  317305             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  317306             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  317307             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  317308             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  317309             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  317310             : 
  317311             :       /*! \brief returns a string representing the class name */
  317312             :           virtual std::string class_name() const override;
  317313             : 
  317314             :       /*! \brief returns new style SageIII enum values */
  317315             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  317316             : 
  317317             :       /*! \brief static variant value */
  317318             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  317319             :        // static const VariantT static_variant = V_SgTypeTraitBuiltinOperator;
  317320             :           enum { static_variant = V_SgTypeTraitBuiltinOperator };
  317321             : 
  317322             :        /* the generated cast function */
  317323             :       /*! \brief Casts pointer from base class to derived class */
  317324             :           ROSE_DLL_API friend       SgTypeTraitBuiltinOperator* isSgTypeTraitBuiltinOperator(       SgNode * s );
  317325             : 
  317326             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  317327             :           ROSE_DLL_API friend const SgTypeTraitBuiltinOperator* isSgTypeTraitBuiltinOperator( const SgNode * s );
  317328             : 
  317329             :      // ******************************************
  317330             :      // * Memory Pool / New / Delete
  317331             :      // ******************************************
  317332             : 
  317333             :      public:
  317334             :           /// \private
  317335             :           static const unsigned pool_size; //
  317336             :           /// \private
  317337             :           static std::vector<unsigned char *> pools; //
  317338             :           /// \private
  317339             :           static SgTypeTraitBuiltinOperator * next_node; // 
  317340             : 
  317341             :           /// \private
  317342             :           static unsigned long initializeStorageClassArray(SgTypeTraitBuiltinOperatorStorageClass *); //
  317343             : 
  317344             :           /// \private
  317345             :           static void clearMemoryPool(); //
  317346             :           static void deleteMemoryPool(); //
  317347             : 
  317348             :           /// \private
  317349             :           static void extendMemoryPoolForFileIO(); //
  317350             : 
  317351             :           /// \private
  317352             :           static SgTypeTraitBuiltinOperator * getPointerFromGlobalIndex(unsigned long); //
  317353             :           /// \private
  317354             :           static SgTypeTraitBuiltinOperator * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  317355             : 
  317356             :           /// \private
  317357             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  317358             :           /// \private
  317359             :           static void resetValidFreepointers(); //
  317360             :           /// \private
  317361             :           static unsigned long getNumberOfLastValidPointer(); //
  317362             : 
  317363             : 
  317364             : #if defined(INLINE_FUNCTIONS)
  317365             :       /*! \brief returns pointer to newly allocated IR node */
  317366             :           inline void *operator new (size_t size);
  317367             : #else
  317368             :       /*! \brief returns pointer to newly allocated IR node */
  317369             :           void *operator new (size_t size);
  317370             : #endif
  317371             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  317372             :           void operator delete (void* pointer, size_t size);
  317373             : 
  317374             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  317375          84 :           void operator delete (void* pointer)
  317376             :              {
  317377             :             // This is the generated delete operator...
  317378          84 :                SgTypeTraitBuiltinOperator::operator delete (pointer,sizeof(SgTypeTraitBuiltinOperator));
  317379             :              }
  317380             : 
  317381             :       /*! \brief Returns the total number of IR nodes of this type */
  317382             :           static size_t numberOfNodes();
  317383             : 
  317384             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  317385             :           static size_t memoryUsage();
  317386             : 
  317387             :       // End of scope which started in IR nodes specific code 
  317388             :       /* */
  317389             : 
  317390             :       /* name Internal Functions
  317391             :           \brief Internal functions ... incomplete-documentation
  317392             : 
  317393             :           These functions have been made public as part of the design, but they are suggested for internal use 
  317394             :           or by particularly knowledgeable users for specialized tools or applications.
  317395             : 
  317396             :           \internal We could not make these private because they are required by user for special purposes. And 
  317397             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  317398             :          
  317399             :        */
  317400             : 
  317401             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  317402             :        // overridden in every class by *generated* implementation
  317403             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  317404             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  317405             :        // MS: 06/28/02 container of names of variables or container indices 
  317406             :        // used used in the traversal to access AST successor nodes
  317407             :        // overridden in every class by *generated* implementation
  317408             :       /*! \brief container of names of variables or container indices used used in the traversal
  317409             :           to access AST successor nodes overridden in every class by *generated* implementation */
  317410             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  317411             : 
  317412             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  317413             :        // than all the vector copies. The implementation for these functions is generated for each class.
  317414             :       /*! \brief return number of children in the traversal successor list */
  317415             :           virtual size_t get_numberOfTraversalSuccessors() override;
  317416             :       /*! \brief index-based access to traversal successors by index number */
  317417             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  317418             :       /*! \brief index-based access to traversal successors by child node */
  317419             :           virtual size_t get_childIndex(SgNode *child) override;
  317420             : 
  317421             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  317422             :        // MS: 08/16/2002 method for generating RTI information
  317423             :       /*! \brief return C++ Runtime-Time-Information */
  317424             :           virtual RTIReturnType roseRTI() override;
  317425             : #endif
  317426             :       /* */
  317427             : 
  317428             : 
  317429             : 
  317430             :       /* name Deprecated Functions
  317431             :           \brief Deprecated functions ... incomplete-documentation
  317432             : 
  317433             :           These functions have been deprecated from use.
  317434             :        */
  317435             :       /* */
  317436             : 
  317437             :       /*! returns a C style string (char*) representing the class name */
  317438             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  317439             : 
  317440             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  317441             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  317442             : #if 0
  317443             :       /*! returns old style Sage II enum values */
  317444             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  317445             :       /*! returns old style Sage II enum values */
  317446             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  317447             : #endif
  317448             :       /* */
  317449             : 
  317450             : 
  317451             : 
  317452             : 
  317453             :      public:
  317454             :       /* name Traversal Support Functions
  317455             :           \brief Traversal support functions ... incomplete-documentation
  317456             : 
  317457             :           These functions have been made public as part of the design, but they are suggested for internal use 
  317458             :           or by particularly knowledgable users for specialized tools or applications.
  317459             :        */
  317460             :       /* */
  317461             : 
  317462             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  317463             :        // (inferior to ROSE traversal mechanism, experimental).
  317464             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  317465             :        */
  317466             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  317467             : 
  317468             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  317469             :       /*! \brief support for the classic visitor pattern done in GoF */
  317470             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  317471             : 
  317472             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  317473             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  317474             :        */
  317475             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  317476             : 
  317477             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  317478             :        */
  317479             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  317480             : 
  317481             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  317482             :        // This traversal helps support internal tools that call static member functions.
  317483             :        // note: this function operates on the memory pools.
  317484             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  317485             :        */
  317486             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  317487             :       /* */
  317488             : 
  317489             : 
  317490             :      public:
  317491             :       /* name Memory Allocation Functions
  317492             :           \brief Memory allocations functions ... incomplete-documentation
  317493             : 
  317494             :           These functions have been made public as part of the design, but they are suggested for internal use 
  317495             :           or by particularly knowledgable users for specialized tools or applications.
  317496             :        */
  317497             :       /* */
  317498             : 
  317499             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  317500             : 
  317501             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  317502             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  317503             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  317504             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  317505             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  317506             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  317507             :           being used with the AST File I/O mechanism.
  317508             :        */
  317509             :           virtual bool isInMemoryPool() override;
  317510             : 
  317511             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  317512             : 
  317513             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  317514             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  317515             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  317516             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  317517             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  317518             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  317519             :           being used with the AST File I/O mechanism.
  317520             :        */
  317521             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  317522             : 
  317523             :       // DQ (4/30/2006): Modified to be a const function.
  317524             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  317525             : 
  317526             :           This functions is part of general support for many possible tools to operate 
  317527             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  317528             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  317529             :           less than the set of pointers used by the AST file I/O. This is part of
  317530             :           work implemented by Andreas, and support tools such as the AST graph generation.
  317531             : 
  317532             :           \warning This function can return unexpected data members and thus the 
  317533             :                    order and the number of elements is unpredicable and subject 
  317534             :                    to change.
  317535             : 
  317536             :           \returns STL vector of pairs of SgNode* and strings
  317537             :        */
  317538             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  317539             : 
  317540             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  317541             : 
  317542             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  317543             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  317544             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  317545             : 
  317546             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  317547             :                    and subject to change.
  317548             :        */
  317549             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  317550             : 
  317551             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  317552             : 
  317553             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  317554             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  317555             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  317556             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  317557             : 
  317558             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  317559             : 
  317560             :           \returns long
  317561             :        */
  317562             :           virtual long getChildIndex( SgNode* childNode ) const override;
  317563             : 
  317564             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  317565             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  317566             :       /* \brief Constructor for use by AST File I/O Mechanism
  317567             : 
  317568             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  317569             :           which obtained via fast binary file I/O from disk.
  317570             :        */
  317571             :        // SgTypeTraitBuiltinOperator( SgTypeTraitBuiltinOperatorStorageClass& source );
  317572             : 
  317573             : 
  317574             : 
  317575             : 
  317576             : 
  317577             :  // JH (10/24/2005): methods added to support the ast file IO
  317578             :     private:
  317579             : 
  317580             :       /* name AST Memory Allocation Support Functions
  317581             :           \brief Memory allocations support....
  317582             : 
  317583             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  317584             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  317585             :           and support the AST File I/O Mechanism.
  317586             :        */
  317587             :       /* */
  317588             : 
  317589             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  317590             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  317591             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  317592             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  317593             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  317594             :           a correspinding one in the AST_FILE_IO class!
  317595             :        */
  317596             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  317597             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  317598             :       /* \brief Typedef used for low level memory access.
  317599             :        */
  317600             :        // typedef unsigned char* TestType;
  317601             : 
  317602             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  317603             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  317604             :       /* \brief Typedef used to hold memory addresses as values.
  317605             :        */
  317606             :        // typedef unsigned long  AddressType;
  317607             : 
  317608             : 
  317609             : 
  317610             :        // necessary, to have direct access to the p_freepointer and the private methods !
  317611             :       /*! \brief friend class declaration to support AST File I/O */
  317612             :           friend class AST_FILE_IO;
  317613             : 
  317614             :       /*! \brief friend class declaration to support AST File I/O */
  317615             :           friend class SgTypeTraitBuiltinOperatorStorageClass;
  317616             : 
  317617             :       /*! \brief friend class declaration to support AST File I/O */
  317618             :           friend class AstSpecificDataManagingClass;
  317619             : 
  317620             :       /*! \brief friend class declaration to support AST File I/O */
  317621             :           friend class AstSpecificDataManagingClassStorageClass;
  317622             :     public:
  317623             :       /*! \brief IR node constructor to support AST File I/O */
  317624             :           SgTypeTraitBuiltinOperator( const SgTypeTraitBuiltinOperatorStorageClass& source );
  317625             : 
  317626             :  // private: // JJW hack
  317627             :        /*
  317628             :           name AST Memory Allocation Support Variables
  317629             :           Memory allocations support variables 
  317630             : 
  317631             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  317632             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  317633             :           and support the AST File I/O Mechanism.
  317634             :        */
  317635             :       /* */
  317636             : 
  317637             :     public:
  317638             : 
  317639             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  317640             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  317641             :       // virtual SgNode* addRegExpAttribute();
  317642             :       /*! \brief Support for AST matching using regular expression.
  317643             : 
  317644             :           This support is incomplete and the subject of current research to define 
  317645             :           RegEx trees to support inexact matching.
  317646             :        */
  317647             :           SgTypeTraitBuiltinOperator* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  317648             : 
  317649             : // *** COMMON CODE SECTION ENDS HERE ***
  317650             : 
  317651             : 
  317652             : // End of memberFunctionString
  317653             : // Start of memberFunctionString
  317654             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  317655             : 
  317656             :      // the generated cast function
  317657             :      // friend ROSE_DLL_API SgTypeTraitBuiltinOperator* isSgTypeTraitBuiltinOperator ( SgNode* s );
  317658             : 
  317659             :           typedef SgExpression base_node_type;
  317660             : 
  317661             : 
  317662             : // End of memberFunctionString
  317663             : // Start of memberFunctionString
  317664             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  317665             : 
  317666             :           SgType* get_type() const override;
  317667             : 
  317668             : 
  317669             : // End of memberFunctionString
  317670             : // Start of memberFunctionString
  317671             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  317672             : 
  317673             :           void post_construction_initialization() override;
  317674             : 
  317675             : 
  317676             : // End of memberFunctionString
  317677             : 
  317678             :      public: 
  317679             :          SgName get_name() const /* (getDataAccessFunctionPrototypeString) */;
  317680             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  317681             : 
  317682             :      public: 
  317683             :          const SgNodePtrList&  get_args() const;
  317684             :          SgNodePtrList& get_args(); 
  317685             : 
  317686             : 
  317687             :      public: 
  317688             :          virtual ~SgTypeTraitBuiltinOperator();
  317689             : 
  317690             : 
  317691             :      public: 
  317692             :          SgTypeTraitBuiltinOperator(Sg_File_Info* startOfConstruct , SgName name = ""); 
  317693             :          SgTypeTraitBuiltinOperator(SgName name); 
  317694             : 
  317695             :     protected:
  317696             : // Start of memberFunctionString
  317697             : SgName p_name;
  317698             :           
  317699             : // End of memberFunctionString
  317700             : // Start of memberFunctionString
  317701             : SgNodePtrList p_args;
  317702             :           
  317703             : // End of memberFunctionString
  317704             : 
  317705             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeTraitBuiltinOperator>;
  317706             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeTraitBuiltinOperator, SgName,&SgTypeTraitBuiltinOperator::p_name>;
  317707             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeTraitBuiltinOperator, SgNodePtrList,&SgTypeTraitBuiltinOperator::p_args>;
  317708             : 
  317709             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317710             : 
  317711             : 
  317712             :    };
  317713             : #endif
  317714             : 
  317715             : // postdeclarations for SgTypeTraitBuiltinOperator
  317716             : 
  317717             : /* #line 317718 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317718             : 
  317719             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  317720             : 
  317721             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317722             : 
  317723             : 
  317724             : /* #line 317725 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317725             : 
  317726             : 
  317727             : 
  317728             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317729             : 
  317730             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  317731             : //      This code is automatically generated for each 
  317732             : //      terminal and non-terminal within the defined 
  317733             : //      grammar.  There is a simple way to change the 
  317734             : //      code to fix bugs etc.  See the ROSE README file
  317735             : //      for directions.
  317736             : 
  317737             : // tps: (02/22/2010): Adding DLL export requirements
  317738             : #include "rosedll.h"
  317739             : 
  317740             : // predeclarations for SgCompoundLiteralExp
  317741             : 
  317742             : /* #line 317743 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317743             : 
  317744             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  317745             : 
  317746             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  317747             : 
  317748             : #if 1
  317749             : // Class Definition for SgCompoundLiteralExp
  317750             : class ROSE_DLL_API SgCompoundLiteralExp  : public SgExpression
  317751             :    {
  317752             :      public:
  317753             : 
  317754             : 
  317755             : /* #line 317756 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  317756             : 
  317757             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  317758             : // Start of memberFunctionString
  317759             : /* #line 347 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  317760             : 
  317761             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  317762             :           virtual unsigned int cfgIndexForEnd() const override;
  317763             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  317764             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  317765             : #endif
  317766             : 
  317767             :        // get lvalue
  317768             :           virtual bool isDefinable() const override;
  317769             :           virtual bool isLValue() const override;
  317770             :           virtual bool isChildUsedAsLValue(const SgExpression* child) const override; // INTERNAL Recursively call up the chain to answer the child
  317771             : 
  317772             : 
  317773             : // End of memberFunctionString
  317774             : // Start of memberFunctionString
  317775             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  317776             : 
  317777             : // *** COMMON CODE SECTION BEGINS HERE ***
  317778             : 
  317779             :     public:
  317780             : 
  317781             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  317782             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  317783             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  317784             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  317785             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  317786             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  317787             : 
  317788             :       /*! \brief returns a string representing the class name */
  317789             :           virtual std::string class_name() const override;
  317790             : 
  317791             :       /*! \brief returns new style SageIII enum values */
  317792             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  317793             : 
  317794             :       /*! \brief static variant value */
  317795             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  317796             :        // static const VariantT static_variant = V_SgCompoundLiteralExp;
  317797             :           enum { static_variant = V_SgCompoundLiteralExp };
  317798             : 
  317799             :        /* the generated cast function */
  317800             :       /*! \brief Casts pointer from base class to derived class */
  317801             :           ROSE_DLL_API friend       SgCompoundLiteralExp* isSgCompoundLiteralExp(       SgNode * s );
  317802             : 
  317803             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  317804             :           ROSE_DLL_API friend const SgCompoundLiteralExp* isSgCompoundLiteralExp( const SgNode * s );
  317805             : 
  317806             :      // ******************************************
  317807             :      // * Memory Pool / New / Delete
  317808             :      // ******************************************
  317809             : 
  317810             :      public:
  317811             :           /// \private
  317812             :           static const unsigned pool_size; //
  317813             :           /// \private
  317814             :           static std::vector<unsigned char *> pools; //
  317815             :           /// \private
  317816             :           static SgCompoundLiteralExp * next_node; // 
  317817             : 
  317818             :           /// \private
  317819             :           static unsigned long initializeStorageClassArray(SgCompoundLiteralExpStorageClass *); //
  317820             : 
  317821             :           /// \private
  317822             :           static void clearMemoryPool(); //
  317823             :           static void deleteMemoryPool(); //
  317824             : 
  317825             :           /// \private
  317826             :           static void extendMemoryPoolForFileIO(); //
  317827             : 
  317828             :           /// \private
  317829             :           static SgCompoundLiteralExp * getPointerFromGlobalIndex(unsigned long); //
  317830             :           /// \private
  317831             :           static SgCompoundLiteralExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  317832             : 
  317833             :           /// \private
  317834             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  317835             :           /// \private
  317836             :           static void resetValidFreepointers(); //
  317837             :           /// \private
  317838             :           static unsigned long getNumberOfLastValidPointer(); //
  317839             : 
  317840             : 
  317841             : #if defined(INLINE_FUNCTIONS)
  317842             :       /*! \brief returns pointer to newly allocated IR node */
  317843             :           inline void *operator new (size_t size);
  317844             : #else
  317845             :       /*! \brief returns pointer to newly allocated IR node */
  317846             :           void *operator new (size_t size);
  317847             : #endif
  317848             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  317849             :           void operator delete (void* pointer, size_t size);
  317850             : 
  317851             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  317852           0 :           void operator delete (void* pointer)
  317853             :              {
  317854             :             // This is the generated delete operator...
  317855           0 :                SgCompoundLiteralExp::operator delete (pointer,sizeof(SgCompoundLiteralExp));
  317856             :              }
  317857             : 
  317858             :       /*! \brief Returns the total number of IR nodes of this type */
  317859             :           static size_t numberOfNodes();
  317860             : 
  317861             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  317862             :           static size_t memoryUsage();
  317863             : 
  317864             :       // End of scope which started in IR nodes specific code 
  317865             :       /* */
  317866             : 
  317867             :       /* name Internal Functions
  317868             :           \brief Internal functions ... incomplete-documentation
  317869             : 
  317870             :           These functions have been made public as part of the design, but they are suggested for internal use 
  317871             :           or by particularly knowledgeable users for specialized tools or applications.
  317872             : 
  317873             :           \internal We could not make these private because they are required by user for special purposes. And 
  317874             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  317875             :          
  317876             :        */
  317877             : 
  317878             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  317879             :        // overridden in every class by *generated* implementation
  317880             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  317881             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  317882             :        // MS: 06/28/02 container of names of variables or container indices 
  317883             :        // used used in the traversal to access AST successor nodes
  317884             :        // overridden in every class by *generated* implementation
  317885             :       /*! \brief container of names of variables or container indices used used in the traversal
  317886             :           to access AST successor nodes overridden in every class by *generated* implementation */
  317887             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  317888             : 
  317889             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  317890             :        // than all the vector copies. The implementation for these functions is generated for each class.
  317891             :       /*! \brief return number of children in the traversal successor list */
  317892             :           virtual size_t get_numberOfTraversalSuccessors() override;
  317893             :       /*! \brief index-based access to traversal successors by index number */
  317894             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  317895             :       /*! \brief index-based access to traversal successors by child node */
  317896             :           virtual size_t get_childIndex(SgNode *child) override;
  317897             : 
  317898             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  317899             :        // MS: 08/16/2002 method for generating RTI information
  317900             :       /*! \brief return C++ Runtime-Time-Information */
  317901             :           virtual RTIReturnType roseRTI() override;
  317902             : #endif
  317903             :       /* */
  317904             : 
  317905             : 
  317906             : 
  317907             :       /* name Deprecated Functions
  317908             :           \brief Deprecated functions ... incomplete-documentation
  317909             : 
  317910             :           These functions have been deprecated from use.
  317911             :        */
  317912             :       /* */
  317913             : 
  317914             :       /*! returns a C style string (char*) representing the class name */
  317915             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  317916             : 
  317917             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  317918             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  317919             : #if 0
  317920             :       /*! returns old style Sage II enum values */
  317921             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  317922             :       /*! returns old style Sage II enum values */
  317923             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  317924             : #endif
  317925             :       /* */
  317926             : 
  317927             : 
  317928             : 
  317929             : 
  317930             :      public:
  317931             :       /* name Traversal Support Functions
  317932             :           \brief Traversal support functions ... incomplete-documentation
  317933             : 
  317934             :           These functions have been made public as part of the design, but they are suggested for internal use 
  317935             :           or by particularly knowledgable users for specialized tools or applications.
  317936             :        */
  317937             :       /* */
  317938             : 
  317939             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  317940             :        // (inferior to ROSE traversal mechanism, experimental).
  317941             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  317942             :        */
  317943             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  317944             : 
  317945             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  317946             :       /*! \brief support for the classic visitor pattern done in GoF */
  317947             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  317948             : 
  317949             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  317950             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  317951             :        */
  317952             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  317953             : 
  317954             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  317955             :        */
  317956             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  317957             : 
  317958             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  317959             :        // This traversal helps support internal tools that call static member functions.
  317960             :        // note: this function operates on the memory pools.
  317961             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  317962             :        */
  317963             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  317964             :       /* */
  317965             : 
  317966             : 
  317967             :      public:
  317968             :       /* name Memory Allocation Functions
  317969             :           \brief Memory allocations functions ... incomplete-documentation
  317970             : 
  317971             :           These functions have been made public as part of the design, but they are suggested for internal use 
  317972             :           or by particularly knowledgable users for specialized tools or applications.
  317973             :        */
  317974             :       /* */
  317975             : 
  317976             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  317977             : 
  317978             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  317979             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  317980             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  317981             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  317982             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  317983             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  317984             :           being used with the AST File I/O mechanism.
  317985             :        */
  317986             :           virtual bool isInMemoryPool() override;
  317987             : 
  317988             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  317989             : 
  317990             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  317991             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  317992             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  317993             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  317994             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  317995             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  317996             :           being used with the AST File I/O mechanism.
  317997             :        */
  317998             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  317999             : 
  318000             :       // DQ (4/30/2006): Modified to be a const function.
  318001             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  318002             : 
  318003             :           This functions is part of general support for many possible tools to operate 
  318004             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  318005             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  318006             :           less than the set of pointers used by the AST file I/O. This is part of
  318007             :           work implemented by Andreas, and support tools such as the AST graph generation.
  318008             : 
  318009             :           \warning This function can return unexpected data members and thus the 
  318010             :                    order and the number of elements is unpredicable and subject 
  318011             :                    to change.
  318012             : 
  318013             :           \returns STL vector of pairs of SgNode* and strings
  318014             :        */
  318015             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  318016             : 
  318017             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  318018             : 
  318019             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  318020             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  318021             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  318022             : 
  318023             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  318024             :                    and subject to change.
  318025             :        */
  318026             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  318027             : 
  318028             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  318029             : 
  318030             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  318031             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  318032             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  318033             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  318034             : 
  318035             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  318036             : 
  318037             :           \returns long
  318038             :        */
  318039             :           virtual long getChildIndex( SgNode* childNode ) const override;
  318040             : 
  318041             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  318042             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318043             :       /* \brief Constructor for use by AST File I/O Mechanism
  318044             : 
  318045             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  318046             :           which obtained via fast binary file I/O from disk.
  318047             :        */
  318048             :        // SgCompoundLiteralExp( SgCompoundLiteralExpStorageClass& source );
  318049             : 
  318050             : 
  318051             : 
  318052             : 
  318053             : 
  318054             :  // JH (10/24/2005): methods added to support the ast file IO
  318055             :     private:
  318056             : 
  318057             :       /* name AST Memory Allocation Support Functions
  318058             :           \brief Memory allocations support....
  318059             : 
  318060             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  318061             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  318062             :           and support the AST File I/O Mechanism.
  318063             :        */
  318064             :       /* */
  318065             : 
  318066             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  318067             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  318068             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  318069             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  318070             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  318071             :           a correspinding one in the AST_FILE_IO class!
  318072             :        */
  318073             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  318074             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318075             :       /* \brief Typedef used for low level memory access.
  318076             :        */
  318077             :        // typedef unsigned char* TestType;
  318078             : 
  318079             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  318080             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318081             :       /* \brief Typedef used to hold memory addresses as values.
  318082             :        */
  318083             :        // typedef unsigned long  AddressType;
  318084             : 
  318085             : 
  318086             : 
  318087             :        // necessary, to have direct access to the p_freepointer and the private methods !
  318088             :       /*! \brief friend class declaration to support AST File I/O */
  318089             :           friend class AST_FILE_IO;
  318090             : 
  318091             :       /*! \brief friend class declaration to support AST File I/O */
  318092             :           friend class SgCompoundLiteralExpStorageClass;
  318093             : 
  318094             :       /*! \brief friend class declaration to support AST File I/O */
  318095             :           friend class AstSpecificDataManagingClass;
  318096             : 
  318097             :       /*! \brief friend class declaration to support AST File I/O */
  318098             :           friend class AstSpecificDataManagingClassStorageClass;
  318099             :     public:
  318100             :       /*! \brief IR node constructor to support AST File I/O */
  318101             :           SgCompoundLiteralExp( const SgCompoundLiteralExpStorageClass& source );
  318102             : 
  318103             :  // private: // JJW hack
  318104             :        /*
  318105             :           name AST Memory Allocation Support Variables
  318106             :           Memory allocations support variables 
  318107             : 
  318108             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  318109             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  318110             :           and support the AST File I/O Mechanism.
  318111             :        */
  318112             :       /* */
  318113             : 
  318114             :     public:
  318115             : 
  318116             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  318117             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  318118             :       // virtual SgNode* addRegExpAttribute();
  318119             :       /*! \brief Support for AST matching using regular expression.
  318120             : 
  318121             :           This support is incomplete and the subject of current research to define 
  318122             :           RegEx trees to support inexact matching.
  318123             :        */
  318124             :           SgCompoundLiteralExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  318125             : 
  318126             : // *** COMMON CODE SECTION ENDS HERE ***
  318127             : 
  318128             : 
  318129             : // End of memberFunctionString
  318130             : // Start of memberFunctionString
  318131             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  318132             : 
  318133             :      // the generated cast function
  318134             :      // friend ROSE_DLL_API SgCompoundLiteralExp* isSgCompoundLiteralExp ( SgNode* s );
  318135             : 
  318136             :           typedef SgExpression base_node_type;
  318137             : 
  318138             : 
  318139             : // End of memberFunctionString
  318140             : // Start of memberFunctionString
  318141             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  318142             : 
  318143             :           SgType* get_type() const override;
  318144             : 
  318145             : 
  318146             : // End of memberFunctionString
  318147             : // Start of memberFunctionString
  318148             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  318149             : 
  318150             :           void post_construction_initialization() override;
  318151             : 
  318152             : 
  318153             : // End of memberFunctionString
  318154             : 
  318155             :      public: 
  318156             :          SgVariableSymbol* get_symbol() const;
  318157             :          void set_symbol(SgVariableSymbol* symbol);
  318158             : 
  318159             : 
  318160             :      public: 
  318161             :          virtual ~SgCompoundLiteralExp();
  318162             : 
  318163             : 
  318164             :      public: 
  318165             :          SgCompoundLiteralExp(Sg_File_Info* startOfConstruct , SgVariableSymbol* symbol = NULL); 
  318166             :          SgCompoundLiteralExp(SgVariableSymbol* symbol); 
  318167             : 
  318168             :     protected:
  318169             : // Start of memberFunctionString
  318170             : SgVariableSymbol* p_symbol;
  318171             :           
  318172             : // End of memberFunctionString
  318173             : 
  318174             :     friend struct Rose::Traits::generated::describe_node_t<SgCompoundLiteralExp>;
  318175             :     friend struct Rose::Traits::generated::describe_field_t<SgCompoundLiteralExp, SgVariableSymbol*,&SgCompoundLiteralExp::p_symbol>;
  318176             : 
  318177             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318178             : 
  318179             : 
  318180             :    };
  318181             : #endif
  318182             : 
  318183             : // postdeclarations for SgCompoundLiteralExp
  318184             : 
  318185             : /* #line 318186 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318186             : 
  318187             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  318188             : 
  318189             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318190             : 
  318191             : 
  318192             : /* #line 318193 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318193             : 
  318194             : 
  318195             : 
  318196             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318197             : 
  318198             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  318199             : //      This code is automatically generated for each 
  318200             : //      terminal and non-terminal within the defined 
  318201             : //      grammar.  There is a simple way to change the 
  318202             : //      code to fix bugs etc.  See the ROSE README file
  318203             : //      for directions.
  318204             : 
  318205             : // tps: (02/22/2010): Adding DLL export requirements
  318206             : #include "rosedll.h"
  318207             : 
  318208             : // predeclarations for SgTypeExpression
  318209             : 
  318210             : /* #line 318211 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318211             : 
  318212             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  318213             : 
  318214             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318215             : 
  318216             : #if 1
  318217             : // Class Definition for SgTypeExpression
  318218             : class ROSE_DLL_API SgTypeExpression  : public SgExpression
  318219             :    {
  318220             :      public:
  318221             : 
  318222             : 
  318223             : /* #line 318224 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318224             : 
  318225             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  318226             : // Start of memberFunctionString
  318227             : /* #line 1899 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  318228             : 
  318229             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  318230             :           virtual unsigned int cfgIndexForEnd() const override;
  318231             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  318232             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  318233             : #endif
  318234             : 
  318235             : 
  318236             : 
  318237             : // End of memberFunctionString
  318238             : // Start of memberFunctionString
  318239             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  318240             : 
  318241             : // *** COMMON CODE SECTION BEGINS HERE ***
  318242             : 
  318243             :     public:
  318244             : 
  318245             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  318246             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  318247             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  318248             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  318249             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  318250             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  318251             : 
  318252             :       /*! \brief returns a string representing the class name */
  318253             :           virtual std::string class_name() const override;
  318254             : 
  318255             :       /*! \brief returns new style SageIII enum values */
  318256             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  318257             : 
  318258             :       /*! \brief static variant value */
  318259             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  318260             :        // static const VariantT static_variant = V_SgTypeExpression;
  318261             :           enum { static_variant = V_SgTypeExpression };
  318262             : 
  318263             :        /* the generated cast function */
  318264             :       /*! \brief Casts pointer from base class to derived class */
  318265             :           ROSE_DLL_API friend       SgTypeExpression* isSgTypeExpression(       SgNode * s );
  318266             : 
  318267             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  318268             :           ROSE_DLL_API friend const SgTypeExpression* isSgTypeExpression( const SgNode * s );
  318269             : 
  318270             :      // ******************************************
  318271             :      // * Memory Pool / New / Delete
  318272             :      // ******************************************
  318273             : 
  318274             :      public:
  318275             :           /// \private
  318276             :           static const unsigned pool_size; //
  318277             :           /// \private
  318278             :           static std::vector<unsigned char *> pools; //
  318279             :           /// \private
  318280             :           static SgTypeExpression * next_node; // 
  318281             : 
  318282             :           /// \private
  318283             :           static unsigned long initializeStorageClassArray(SgTypeExpressionStorageClass *); //
  318284             : 
  318285             :           /// \private
  318286             :           static void clearMemoryPool(); //
  318287             :           static void deleteMemoryPool(); //
  318288             : 
  318289             :           /// \private
  318290             :           static void extendMemoryPoolForFileIO(); //
  318291             : 
  318292             :           /// \private
  318293             :           static SgTypeExpression * getPointerFromGlobalIndex(unsigned long); //
  318294             :           /// \private
  318295             :           static SgTypeExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  318296             : 
  318297             :           /// \private
  318298             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  318299             :           /// \private
  318300             :           static void resetValidFreepointers(); //
  318301             :           /// \private
  318302             :           static unsigned long getNumberOfLastValidPointer(); //
  318303             : 
  318304             : 
  318305             : #if defined(INLINE_FUNCTIONS)
  318306             :       /*! \brief returns pointer to newly allocated IR node */
  318307             :           inline void *operator new (size_t size);
  318308             : #else
  318309             :       /*! \brief returns pointer to newly allocated IR node */
  318310             :           void *operator new (size_t size);
  318311             : #endif
  318312             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  318313             :           void operator delete (void* pointer, size_t size);
  318314             : 
  318315             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  318316           0 :           void operator delete (void* pointer)
  318317             :              {
  318318             :             // This is the generated delete operator...
  318319           0 :                SgTypeExpression::operator delete (pointer,sizeof(SgTypeExpression));
  318320             :              }
  318321             : 
  318322             :       /*! \brief Returns the total number of IR nodes of this type */
  318323             :           static size_t numberOfNodes();
  318324             : 
  318325             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  318326             :           static size_t memoryUsage();
  318327             : 
  318328             :       // End of scope which started in IR nodes specific code 
  318329             :       /* */
  318330             : 
  318331             :       /* name Internal Functions
  318332             :           \brief Internal functions ... incomplete-documentation
  318333             : 
  318334             :           These functions have been made public as part of the design, but they are suggested for internal use 
  318335             :           or by particularly knowledgeable users for specialized tools or applications.
  318336             : 
  318337             :           \internal We could not make these private because they are required by user for special purposes. And 
  318338             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  318339             :          
  318340             :        */
  318341             : 
  318342             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  318343             :        // overridden in every class by *generated* implementation
  318344             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  318345             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  318346             :        // MS: 06/28/02 container of names of variables or container indices 
  318347             :        // used used in the traversal to access AST successor nodes
  318348             :        // overridden in every class by *generated* implementation
  318349             :       /*! \brief container of names of variables or container indices used used in the traversal
  318350             :           to access AST successor nodes overridden in every class by *generated* implementation */
  318351             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  318352             : 
  318353             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  318354             :        // than all the vector copies. The implementation for these functions is generated for each class.
  318355             :       /*! \brief return number of children in the traversal successor list */
  318356             :           virtual size_t get_numberOfTraversalSuccessors() override;
  318357             :       /*! \brief index-based access to traversal successors by index number */
  318358             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  318359             :       /*! \brief index-based access to traversal successors by child node */
  318360             :           virtual size_t get_childIndex(SgNode *child) override;
  318361             : 
  318362             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  318363             :        // MS: 08/16/2002 method for generating RTI information
  318364             :       /*! \brief return C++ Runtime-Time-Information */
  318365             :           virtual RTIReturnType roseRTI() override;
  318366             : #endif
  318367             :       /* */
  318368             : 
  318369             : 
  318370             : 
  318371             :       /* name Deprecated Functions
  318372             :           \brief Deprecated functions ... incomplete-documentation
  318373             : 
  318374             :           These functions have been deprecated from use.
  318375             :        */
  318376             :       /* */
  318377             : 
  318378             :       /*! returns a C style string (char*) representing the class name */
  318379             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  318380             : 
  318381             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  318382             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  318383             : #if 0
  318384             :       /*! returns old style Sage II enum values */
  318385             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  318386             :       /*! returns old style Sage II enum values */
  318387             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  318388             : #endif
  318389             :       /* */
  318390             : 
  318391             : 
  318392             : 
  318393             : 
  318394             :      public:
  318395             :       /* name Traversal Support Functions
  318396             :           \brief Traversal support functions ... incomplete-documentation
  318397             : 
  318398             :           These functions have been made public as part of the design, but they are suggested for internal use 
  318399             :           or by particularly knowledgable users for specialized tools or applications.
  318400             :        */
  318401             :       /* */
  318402             : 
  318403             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  318404             :        // (inferior to ROSE traversal mechanism, experimental).
  318405             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  318406             :        */
  318407             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  318408             : 
  318409             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  318410             :       /*! \brief support for the classic visitor pattern done in GoF */
  318411             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  318412             : 
  318413             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  318414             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  318415             :        */
  318416             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  318417             : 
  318418             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  318419             :        */
  318420             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  318421             : 
  318422             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  318423             :        // This traversal helps support internal tools that call static member functions.
  318424             :        // note: this function operates on the memory pools.
  318425             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  318426             :        */
  318427             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  318428             :       /* */
  318429             : 
  318430             : 
  318431             :      public:
  318432             :       /* name Memory Allocation Functions
  318433             :           \brief Memory allocations functions ... incomplete-documentation
  318434             : 
  318435             :           These functions have been made public as part of the design, but they are suggested for internal use 
  318436             :           or by particularly knowledgable users for specialized tools or applications.
  318437             :        */
  318438             :       /* */
  318439             : 
  318440             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  318441             : 
  318442             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  318443             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  318444             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  318445             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  318446             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  318447             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  318448             :           being used with the AST File I/O mechanism.
  318449             :        */
  318450             :           virtual bool isInMemoryPool() override;
  318451             : 
  318452             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  318453             : 
  318454             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  318455             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  318456             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  318457             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  318458             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  318459             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  318460             :           being used with the AST File I/O mechanism.
  318461             :        */
  318462             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  318463             : 
  318464             :       // DQ (4/30/2006): Modified to be a const function.
  318465             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  318466             : 
  318467             :           This functions is part of general support for many possible tools to operate 
  318468             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  318469             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  318470             :           less than the set of pointers used by the AST file I/O. This is part of
  318471             :           work implemented by Andreas, and support tools such as the AST graph generation.
  318472             : 
  318473             :           \warning This function can return unexpected data members and thus the 
  318474             :                    order and the number of elements is unpredicable and subject 
  318475             :                    to change.
  318476             : 
  318477             :           \returns STL vector of pairs of SgNode* and strings
  318478             :        */
  318479             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  318480             : 
  318481             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  318482             : 
  318483             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  318484             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  318485             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  318486             : 
  318487             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  318488             :                    and subject to change.
  318489             :        */
  318490             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  318491             : 
  318492             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  318493             : 
  318494             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  318495             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  318496             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  318497             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  318498             : 
  318499             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  318500             : 
  318501             :           \returns long
  318502             :        */
  318503             :           virtual long getChildIndex( SgNode* childNode ) const override;
  318504             : 
  318505             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  318506             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318507             :       /* \brief Constructor for use by AST File I/O Mechanism
  318508             : 
  318509             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  318510             :           which obtained via fast binary file I/O from disk.
  318511             :        */
  318512             :        // SgTypeExpression( SgTypeExpressionStorageClass& source );
  318513             : 
  318514             : 
  318515             : 
  318516             : 
  318517             : 
  318518             :  // JH (10/24/2005): methods added to support the ast file IO
  318519             :     private:
  318520             : 
  318521             :       /* name AST Memory Allocation Support Functions
  318522             :           \brief Memory allocations support....
  318523             : 
  318524             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  318525             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  318526             :           and support the AST File I/O Mechanism.
  318527             :        */
  318528             :       /* */
  318529             : 
  318530             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  318531             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  318532             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  318533             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  318534             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  318535             :           a correspinding one in the AST_FILE_IO class!
  318536             :        */
  318537             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  318538             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318539             :       /* \brief Typedef used for low level memory access.
  318540             :        */
  318541             :        // typedef unsigned char* TestType;
  318542             : 
  318543             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  318544             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318545             :       /* \brief Typedef used to hold memory addresses as values.
  318546             :        */
  318547             :        // typedef unsigned long  AddressType;
  318548             : 
  318549             : 
  318550             : 
  318551             :        // necessary, to have direct access to the p_freepointer and the private methods !
  318552             :       /*! \brief friend class declaration to support AST File I/O */
  318553             :           friend class AST_FILE_IO;
  318554             : 
  318555             :       /*! \brief friend class declaration to support AST File I/O */
  318556             :           friend class SgTypeExpressionStorageClass;
  318557             : 
  318558             :       /*! \brief friend class declaration to support AST File I/O */
  318559             :           friend class AstSpecificDataManagingClass;
  318560             : 
  318561             :       /*! \brief friend class declaration to support AST File I/O */
  318562             :           friend class AstSpecificDataManagingClassStorageClass;
  318563             :     public:
  318564             :       /*! \brief IR node constructor to support AST File I/O */
  318565             :           SgTypeExpression( const SgTypeExpressionStorageClass& source );
  318566             : 
  318567             :  // private: // JJW hack
  318568             :        /*
  318569             :           name AST Memory Allocation Support Variables
  318570             :           Memory allocations support variables 
  318571             : 
  318572             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  318573             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  318574             :           and support the AST File I/O Mechanism.
  318575             :        */
  318576             :       /* */
  318577             : 
  318578             :     public:
  318579             : 
  318580             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  318581             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  318582             :       // virtual SgNode* addRegExpAttribute();
  318583             :       /*! \brief Support for AST matching using regular expression.
  318584             : 
  318585             :           This support is incomplete and the subject of current research to define 
  318586             :           RegEx trees to support inexact matching.
  318587             :        */
  318588             :           SgTypeExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  318589             : 
  318590             : // *** COMMON CODE SECTION ENDS HERE ***
  318591             : 
  318592             : 
  318593             : // End of memberFunctionString
  318594             : // Start of memberFunctionString
  318595             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  318596             : 
  318597             :      // the generated cast function
  318598             :      // friend ROSE_DLL_API SgTypeExpression* isSgTypeExpression ( SgNode* s );
  318599             : 
  318600             :           typedef SgExpression base_node_type;
  318601             : 
  318602             : 
  318603             : // End of memberFunctionString
  318604             : // Start of memberFunctionString
  318605             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  318606             : 
  318607             :           void post_construction_initialization() override;
  318608             : 
  318609             : 
  318610             : // End of memberFunctionString
  318611             : 
  318612             :      public: 
  318613             :          SgType* get_type() const override /* (getDataAccessFunctionPrototypeString) */;
  318614             :          void set_type(SgType* type) /* (getDataAccessFunctionPrototypeString) */;
  318615             : 
  318616             : 
  318617             :      public: 
  318618             :          virtual ~SgTypeExpression();
  318619             : 
  318620             : 
  318621             :      public: 
  318622             :          SgTypeExpression(Sg_File_Info* startOfConstruct , SgType* type = NULL); 
  318623             :          SgTypeExpression(SgType* type); 
  318624             : 
  318625             :     protected:
  318626             : // Start of memberFunctionString
  318627             : SgType* p_type;
  318628             :           
  318629             : // End of memberFunctionString
  318630             : 
  318631             :     friend struct Rose::Traits::generated::describe_node_t<SgTypeExpression>;
  318632             :     friend struct Rose::Traits::generated::describe_field_t<SgTypeExpression, SgType*,&SgTypeExpression::p_type>;
  318633             : 
  318634             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318635             : 
  318636             : 
  318637             :    };
  318638             : #endif
  318639             : 
  318640             : // postdeclarations for SgTypeExpression
  318641             : 
  318642             : /* #line 318643 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318643             : 
  318644             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  318645             : 
  318646             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318647             : 
  318648             : 
  318649             : /* #line 318650 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318650             : 
  318651             : 
  318652             : 
  318653             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318654             : 
  318655             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  318656             : //      This code is automatically generated for each 
  318657             : //      terminal and non-terminal within the defined 
  318658             : //      grammar.  There is a simple way to change the 
  318659             : //      code to fix bugs etc.  See the ROSE README file
  318660             : //      for directions.
  318661             : 
  318662             : // tps: (02/22/2010): Adding DLL export requirements
  318663             : #include "rosedll.h"
  318664             : 
  318665             : // predeclarations for SgClassExp
  318666             : 
  318667             : /* #line 318668 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318668             : 
  318669             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  318670             : 
  318671             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  318672             : 
  318673             : #if 1
  318674             : // Class Definition for SgClassExp
  318675             : class ROSE_DLL_API SgClassExp  : public SgExpression
  318676             :    {
  318677             :      public:
  318678             : 
  318679             : 
  318680             : /* #line 318681 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  318681             : 
  318682             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  318683             : // Start of memberFunctionString
  318684             : /* #line 1361 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  318685             : 
  318686             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  318687             :           virtual unsigned int cfgIndexForEnd() const override;
  318688             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  318689             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  318690             : #endif
  318691             : 
  318692             : 
  318693             : 
  318694             : // End of memberFunctionString
  318695             : // Start of memberFunctionString
  318696             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  318697             : 
  318698             : // *** COMMON CODE SECTION BEGINS HERE ***
  318699             : 
  318700             :     public:
  318701             : 
  318702             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  318703             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  318704             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  318705             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  318706             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  318707             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  318708             : 
  318709             :       /*! \brief returns a string representing the class name */
  318710             :           virtual std::string class_name() const override;
  318711             : 
  318712             :       /*! \brief returns new style SageIII enum values */
  318713             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  318714             : 
  318715             :       /*! \brief static variant value */
  318716             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  318717             :        // static const VariantT static_variant = V_SgClassExp;
  318718             :           enum { static_variant = V_SgClassExp };
  318719             : 
  318720             :        /* the generated cast function */
  318721             :       /*! \brief Casts pointer from base class to derived class */
  318722             :           ROSE_DLL_API friend       SgClassExp* isSgClassExp(       SgNode * s );
  318723             : 
  318724             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  318725             :           ROSE_DLL_API friend const SgClassExp* isSgClassExp( const SgNode * s );
  318726             : 
  318727             :      // ******************************************
  318728             :      // * Memory Pool / New / Delete
  318729             :      // ******************************************
  318730             : 
  318731             :      public:
  318732             :           /// \private
  318733             :           static const unsigned pool_size; //
  318734             :           /// \private
  318735             :           static std::vector<unsigned char *> pools; //
  318736             :           /// \private
  318737             :           static SgClassExp * next_node; // 
  318738             : 
  318739             :           /// \private
  318740             :           static unsigned long initializeStorageClassArray(SgClassExpStorageClass *); //
  318741             : 
  318742             :           /// \private
  318743             :           static void clearMemoryPool(); //
  318744             :           static void deleteMemoryPool(); //
  318745             : 
  318746             :           /// \private
  318747             :           static void extendMemoryPoolForFileIO(); //
  318748             : 
  318749             :           /// \private
  318750             :           static SgClassExp * getPointerFromGlobalIndex(unsigned long); //
  318751             :           /// \private
  318752             :           static SgClassExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  318753             : 
  318754             :           /// \private
  318755             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  318756             :           /// \private
  318757             :           static void resetValidFreepointers(); //
  318758             :           /// \private
  318759             :           static unsigned long getNumberOfLastValidPointer(); //
  318760             : 
  318761             : 
  318762             : #if defined(INLINE_FUNCTIONS)
  318763             :       /*! \brief returns pointer to newly allocated IR node */
  318764             :           inline void *operator new (size_t size);
  318765             : #else
  318766             :       /*! \brief returns pointer to newly allocated IR node */
  318767             :           void *operator new (size_t size);
  318768             : #endif
  318769             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  318770             :           void operator delete (void* pointer, size_t size);
  318771             : 
  318772             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  318773           0 :           void operator delete (void* pointer)
  318774             :              {
  318775             :             // This is the generated delete operator...
  318776           0 :                SgClassExp::operator delete (pointer,sizeof(SgClassExp));
  318777             :              }
  318778             : 
  318779             :       /*! \brief Returns the total number of IR nodes of this type */
  318780             :           static size_t numberOfNodes();
  318781             : 
  318782             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  318783             :           static size_t memoryUsage();
  318784             : 
  318785             :       // End of scope which started in IR nodes specific code 
  318786             :       /* */
  318787             : 
  318788             :       /* name Internal Functions
  318789             :           \brief Internal functions ... incomplete-documentation
  318790             : 
  318791             :           These functions have been made public as part of the design, but they are suggested for internal use 
  318792             :           or by particularly knowledgeable users for specialized tools or applications.
  318793             : 
  318794             :           \internal We could not make these private because they are required by user for special purposes. And 
  318795             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  318796             :          
  318797             :        */
  318798             : 
  318799             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  318800             :        // overridden in every class by *generated* implementation
  318801             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  318802             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  318803             :        // MS: 06/28/02 container of names of variables or container indices 
  318804             :        // used used in the traversal to access AST successor nodes
  318805             :        // overridden in every class by *generated* implementation
  318806             :       /*! \brief container of names of variables or container indices used used in the traversal
  318807             :           to access AST successor nodes overridden in every class by *generated* implementation */
  318808             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  318809             : 
  318810             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  318811             :        // than all the vector copies. The implementation for these functions is generated for each class.
  318812             :       /*! \brief return number of children in the traversal successor list */
  318813             :           virtual size_t get_numberOfTraversalSuccessors() override;
  318814             :       /*! \brief index-based access to traversal successors by index number */
  318815             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  318816             :       /*! \brief index-based access to traversal successors by child node */
  318817             :           virtual size_t get_childIndex(SgNode *child) override;
  318818             : 
  318819             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  318820             :        // MS: 08/16/2002 method for generating RTI information
  318821             :       /*! \brief return C++ Runtime-Time-Information */
  318822             :           virtual RTIReturnType roseRTI() override;
  318823             : #endif
  318824             :       /* */
  318825             : 
  318826             : 
  318827             : 
  318828             :       /* name Deprecated Functions
  318829             :           \brief Deprecated functions ... incomplete-documentation
  318830             : 
  318831             :           These functions have been deprecated from use.
  318832             :        */
  318833             :       /* */
  318834             : 
  318835             :       /*! returns a C style string (char*) representing the class name */
  318836             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  318837             : 
  318838             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  318839             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  318840             : #if 0
  318841             :       /*! returns old style Sage II enum values */
  318842             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  318843             :       /*! returns old style Sage II enum values */
  318844             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  318845             : #endif
  318846             :       /* */
  318847             : 
  318848             : 
  318849             : 
  318850             : 
  318851             :      public:
  318852             :       /* name Traversal Support Functions
  318853             :           \brief Traversal support functions ... incomplete-documentation
  318854             : 
  318855             :           These functions have been made public as part of the design, but they are suggested for internal use 
  318856             :           or by particularly knowledgable users for specialized tools or applications.
  318857             :        */
  318858             :       /* */
  318859             : 
  318860             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  318861             :        // (inferior to ROSE traversal mechanism, experimental).
  318862             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  318863             :        */
  318864             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  318865             : 
  318866             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  318867             :       /*! \brief support for the classic visitor pattern done in GoF */
  318868             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  318869             : 
  318870             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  318871             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  318872             :        */
  318873             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  318874             : 
  318875             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  318876             :        */
  318877             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  318878             : 
  318879             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  318880             :        // This traversal helps support internal tools that call static member functions.
  318881             :        // note: this function operates on the memory pools.
  318882             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  318883             :        */
  318884             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  318885             :       /* */
  318886             : 
  318887             : 
  318888             :      public:
  318889             :       /* name Memory Allocation Functions
  318890             :           \brief Memory allocations functions ... incomplete-documentation
  318891             : 
  318892             :           These functions have been made public as part of the design, but they are suggested for internal use 
  318893             :           or by particularly knowledgable users for specialized tools or applications.
  318894             :        */
  318895             :       /* */
  318896             : 
  318897             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  318898             : 
  318899             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  318900             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  318901             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  318902             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  318903             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  318904             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  318905             :           being used with the AST File I/O mechanism.
  318906             :        */
  318907             :           virtual bool isInMemoryPool() override;
  318908             : 
  318909             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  318910             : 
  318911             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  318912             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  318913             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  318914             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  318915             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  318916             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  318917             :           being used with the AST File I/O mechanism.
  318918             :        */
  318919             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  318920             : 
  318921             :       // DQ (4/30/2006): Modified to be a const function.
  318922             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  318923             : 
  318924             :           This functions is part of general support for many possible tools to operate 
  318925             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  318926             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  318927             :           less than the set of pointers used by the AST file I/O. This is part of
  318928             :           work implemented by Andreas, and support tools such as the AST graph generation.
  318929             : 
  318930             :           \warning This function can return unexpected data members and thus the 
  318931             :                    order and the number of elements is unpredicable and subject 
  318932             :                    to change.
  318933             : 
  318934             :           \returns STL vector of pairs of SgNode* and strings
  318935             :        */
  318936             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  318937             : 
  318938             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  318939             : 
  318940             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  318941             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  318942             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  318943             : 
  318944             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  318945             :                    and subject to change.
  318946             :        */
  318947             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  318948             : 
  318949             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  318950             : 
  318951             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  318952             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  318953             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  318954             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  318955             : 
  318956             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  318957             : 
  318958             :           \returns long
  318959             :        */
  318960             :           virtual long getChildIndex( SgNode* childNode ) const override;
  318961             : 
  318962             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  318963             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318964             :       /* \brief Constructor for use by AST File I/O Mechanism
  318965             : 
  318966             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  318967             :           which obtained via fast binary file I/O from disk.
  318968             :        */
  318969             :        // SgClassExp( SgClassExpStorageClass& source );
  318970             : 
  318971             : 
  318972             : 
  318973             : 
  318974             : 
  318975             :  // JH (10/24/2005): methods added to support the ast file IO
  318976             :     private:
  318977             : 
  318978             :       /* name AST Memory Allocation Support Functions
  318979             :           \brief Memory allocations support....
  318980             : 
  318981             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  318982             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  318983             :           and support the AST File I/O Mechanism.
  318984             :        */
  318985             :       /* */
  318986             : 
  318987             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  318988             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  318989             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  318990             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  318991             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  318992             :           a correspinding one in the AST_FILE_IO class!
  318993             :        */
  318994             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  318995             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  318996             :       /* \brief Typedef used for low level memory access.
  318997             :        */
  318998             :        // typedef unsigned char* TestType;
  318999             : 
  319000             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  319001             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  319002             :       /* \brief Typedef used to hold memory addresses as values.
  319003             :        */
  319004             :        // typedef unsigned long  AddressType;
  319005             : 
  319006             : 
  319007             : 
  319008             :        // necessary, to have direct access to the p_freepointer and the private methods !
  319009             :       /*! \brief friend class declaration to support AST File I/O */
  319010             :           friend class AST_FILE_IO;
  319011             : 
  319012             :       /*! \brief friend class declaration to support AST File I/O */
  319013             :           friend class SgClassExpStorageClass;
  319014             : 
  319015             :       /*! \brief friend class declaration to support AST File I/O */
  319016             :           friend class AstSpecificDataManagingClass;
  319017             : 
  319018             :       /*! \brief friend class declaration to support AST File I/O */
  319019             :           friend class AstSpecificDataManagingClassStorageClass;
  319020             :     public:
  319021             :       /*! \brief IR node constructor to support AST File I/O */
  319022             :           SgClassExp( const SgClassExpStorageClass& source );
  319023             : 
  319024             :  // private: // JJW hack
  319025             :        /*
  319026             :           name AST Memory Allocation Support Variables
  319027             :           Memory allocations support variables 
  319028             : 
  319029             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  319030             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  319031             :           and support the AST File I/O Mechanism.
  319032             :        */
  319033             :       /* */
  319034             : 
  319035             :     public:
  319036             : 
  319037             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  319038             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  319039             :       // virtual SgNode* addRegExpAttribute();
  319040             :       /*! \brief Support for AST matching using regular expression.
  319041             : 
  319042             :           This support is incomplete and the subject of current research to define 
  319043             :           RegEx trees to support inexact matching.
  319044             :        */
  319045             :           SgClassExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  319046             : 
  319047             : // *** COMMON CODE SECTION ENDS HERE ***
  319048             : 
  319049             : 
  319050             : // End of memberFunctionString
  319051             : // Start of memberFunctionString
  319052             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  319053             : 
  319054             :      // the generated cast function
  319055             :      // friend ROSE_DLL_API SgClassExp* isSgClassExp ( SgNode* s );
  319056             : 
  319057             :           typedef SgExpression base_node_type;
  319058             : 
  319059             : 
  319060             : // End of memberFunctionString
  319061             : // Start of memberFunctionString
  319062             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  319063             : 
  319064             :           SgType* get_type() const override;
  319065             : 
  319066             : 
  319067             : // End of memberFunctionString
  319068             : // Start of memberFunctionString
  319069             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  319070             : 
  319071             :           void post_construction_initialization() override;
  319072             : 
  319073             : 
  319074             : // End of memberFunctionString
  319075             : 
  319076             :      public: 
  319077             :          SgClassSymbol* get_class_symbol() const;
  319078             :          void set_class_symbol(SgClassSymbol* class_symbol);
  319079             : 
  319080             :      public: 
  319081             :          int get_pobj_class() const;
  319082             :          void set_pobj_class(int pobj_class);
  319083             : 
  319084             : 
  319085             :      public: 
  319086             :          virtual ~SgClassExp();
  319087             : 
  319088             : 
  319089             :      public: 
  319090             :          SgClassExp(Sg_File_Info* startOfConstruct , SgClassSymbol* class_symbol = NULL, int pobj_class = 0); 
  319091             :          SgClassExp(SgClassSymbol* class_symbol, int pobj_class); 
  319092             : 
  319093             :     protected:
  319094             : // Start of memberFunctionString
  319095             : SgClassSymbol* p_class_symbol;
  319096             :           
  319097             : // End of memberFunctionString
  319098             : // Start of memberFunctionString
  319099             : int p_pobj_class;
  319100             :           
  319101             : // End of memberFunctionString
  319102             : 
  319103             :     friend struct Rose::Traits::generated::describe_node_t<SgClassExp>;
  319104             :     friend struct Rose::Traits::generated::describe_field_t<SgClassExp, SgClassSymbol*,&SgClassExp::p_class_symbol>;
  319105             :     friend struct Rose::Traits::generated::describe_field_t<SgClassExp, int,&SgClassExp::p_pobj_class>;
  319106             : 
  319107             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319108             : 
  319109             : 
  319110             :    };
  319111             : #endif
  319112             : 
  319113             : // postdeclarations for SgClassExp
  319114             : 
  319115             : /* #line 319116 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319116             : 
  319117             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  319118             : 
  319119             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319120             : 
  319121             : 
  319122             : /* #line 319123 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319123             : 
  319124             : 
  319125             : 
  319126             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319127             : 
  319128             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  319129             : //      This code is automatically generated for each 
  319130             : //      terminal and non-terminal within the defined 
  319131             : //      grammar.  There is a simple way to change the 
  319132             : //      code to fix bugs etc.  See the ROSE README file
  319133             : //      for directions.
  319134             : 
  319135             : // tps: (02/22/2010): Adding DLL export requirements
  319136             : #include "rosedll.h"
  319137             : 
  319138             : // predeclarations for SgFunctionParameterRefExp
  319139             : 
  319140             : /* #line 319141 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319141             : 
  319142             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  319143             : 
  319144             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319145             : 
  319146             : #if 1
  319147             : // Class Definition for SgFunctionParameterRefExp
  319148             : class ROSE_DLL_API SgFunctionParameterRefExp  : public SgExpression
  319149             :    {
  319150             :      public:
  319151             : 
  319152             : 
  319153             : /* #line 319154 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319154             : 
  319155             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  319156             : // Start of memberFunctionString
  319157             : /* #line 1909 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  319158             : 
  319159             : 
  319160             :        // DQ (8/11/2014): Added support for C++11 decltype used in new function return syntax.
  319161             : #if 0
  319162             :           virtual unsigned int cfgIndexForEnd() const override;
  319163             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  319164             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  319165             : #endif
  319166             :        // SgType* get_type() const;
  319167             : 
  319168             : 
  319169             : 
  319170             : // End of memberFunctionString
  319171             : // Start of memberFunctionString
  319172             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  319173             : 
  319174             : // *** COMMON CODE SECTION BEGINS HERE ***
  319175             : 
  319176             :     public:
  319177             : 
  319178             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  319179             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  319180             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  319181             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  319182             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  319183             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  319184             : 
  319185             :       /*! \brief returns a string representing the class name */
  319186             :           virtual std::string class_name() const override;
  319187             : 
  319188             :       /*! \brief returns new style SageIII enum values */
  319189             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  319190             : 
  319191             :       /*! \brief static variant value */
  319192             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  319193             :        // static const VariantT static_variant = V_SgFunctionParameterRefExp;
  319194             :           enum { static_variant = V_SgFunctionParameterRefExp };
  319195             : 
  319196             :        /* the generated cast function */
  319197             :       /*! \brief Casts pointer from base class to derived class */
  319198             :           ROSE_DLL_API friend       SgFunctionParameterRefExp* isSgFunctionParameterRefExp(       SgNode * s );
  319199             : 
  319200             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  319201             :           ROSE_DLL_API friend const SgFunctionParameterRefExp* isSgFunctionParameterRefExp( const SgNode * s );
  319202             : 
  319203             :      // ******************************************
  319204             :      // * Memory Pool / New / Delete
  319205             :      // ******************************************
  319206             : 
  319207             :      public:
  319208             :           /// \private
  319209             :           static const unsigned pool_size; //
  319210             :           /// \private
  319211             :           static std::vector<unsigned char *> pools; //
  319212             :           /// \private
  319213             :           static SgFunctionParameterRefExp * next_node; // 
  319214             : 
  319215             :           /// \private
  319216             :           static unsigned long initializeStorageClassArray(SgFunctionParameterRefExpStorageClass *); //
  319217             : 
  319218             :           /// \private
  319219             :           static void clearMemoryPool(); //
  319220             :           static void deleteMemoryPool(); //
  319221             : 
  319222             :           /// \private
  319223             :           static void extendMemoryPoolForFileIO(); //
  319224             : 
  319225             :           /// \private
  319226             :           static SgFunctionParameterRefExp * getPointerFromGlobalIndex(unsigned long); //
  319227             :           /// \private
  319228             :           static SgFunctionParameterRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  319229             : 
  319230             :           /// \private
  319231             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  319232             :           /// \private
  319233             :           static void resetValidFreepointers(); //
  319234             :           /// \private
  319235             :           static unsigned long getNumberOfLastValidPointer(); //
  319236             : 
  319237             : 
  319238             : #if defined(INLINE_FUNCTIONS)
  319239             :       /*! \brief returns pointer to newly allocated IR node */
  319240             :           inline void *operator new (size_t size);
  319241             : #else
  319242             :       /*! \brief returns pointer to newly allocated IR node */
  319243             :           void *operator new (size_t size);
  319244             : #endif
  319245             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  319246             :           void operator delete (void* pointer, size_t size);
  319247             : 
  319248             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  319249         134 :           void operator delete (void* pointer)
  319250             :              {
  319251             :             // This is the generated delete operator...
  319252         134 :                SgFunctionParameterRefExp::operator delete (pointer,sizeof(SgFunctionParameterRefExp));
  319253             :              }
  319254             : 
  319255             :       /*! \brief Returns the total number of IR nodes of this type */
  319256             :           static size_t numberOfNodes();
  319257             : 
  319258             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  319259             :           static size_t memoryUsage();
  319260             : 
  319261             :       // End of scope which started in IR nodes specific code 
  319262             :       /* */
  319263             : 
  319264             :       /* name Internal Functions
  319265             :           \brief Internal functions ... incomplete-documentation
  319266             : 
  319267             :           These functions have been made public as part of the design, but they are suggested for internal use 
  319268             :           or by particularly knowledgeable users for specialized tools or applications.
  319269             : 
  319270             :           \internal We could not make these private because they are required by user for special purposes. And 
  319271             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  319272             :          
  319273             :        */
  319274             : 
  319275             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  319276             :        // overridden in every class by *generated* implementation
  319277             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  319278             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  319279             :        // MS: 06/28/02 container of names of variables or container indices 
  319280             :        // used used in the traversal to access AST successor nodes
  319281             :        // overridden in every class by *generated* implementation
  319282             :       /*! \brief container of names of variables or container indices used used in the traversal
  319283             :           to access AST successor nodes overridden in every class by *generated* implementation */
  319284             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  319285             : 
  319286             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  319287             :        // than all the vector copies. The implementation for these functions is generated for each class.
  319288             :       /*! \brief return number of children in the traversal successor list */
  319289             :           virtual size_t get_numberOfTraversalSuccessors() override;
  319290             :       /*! \brief index-based access to traversal successors by index number */
  319291             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  319292             :       /*! \brief index-based access to traversal successors by child node */
  319293             :           virtual size_t get_childIndex(SgNode *child) override;
  319294             : 
  319295             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  319296             :        // MS: 08/16/2002 method for generating RTI information
  319297             :       /*! \brief return C++ Runtime-Time-Information */
  319298             :           virtual RTIReturnType roseRTI() override;
  319299             : #endif
  319300             :       /* */
  319301             : 
  319302             : 
  319303             : 
  319304             :       /* name Deprecated Functions
  319305             :           \brief Deprecated functions ... incomplete-documentation
  319306             : 
  319307             :           These functions have been deprecated from use.
  319308             :        */
  319309             :       /* */
  319310             : 
  319311             :       /*! returns a C style string (char*) representing the class name */
  319312             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  319313             : 
  319314             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  319315             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  319316             : #if 0
  319317             :       /*! returns old style Sage II enum values */
  319318             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  319319             :       /*! returns old style Sage II enum values */
  319320             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  319321             : #endif
  319322             :       /* */
  319323             : 
  319324             : 
  319325             : 
  319326             : 
  319327             :      public:
  319328             :       /* name Traversal Support Functions
  319329             :           \brief Traversal support functions ... incomplete-documentation
  319330             : 
  319331             :           These functions have been made public as part of the design, but they are suggested for internal use 
  319332             :           or by particularly knowledgable users for specialized tools or applications.
  319333             :        */
  319334             :       /* */
  319335             : 
  319336             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  319337             :        // (inferior to ROSE traversal mechanism, experimental).
  319338             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  319339             :        */
  319340             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  319341             : 
  319342             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  319343             :       /*! \brief support for the classic visitor pattern done in GoF */
  319344             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  319345             : 
  319346             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  319347             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  319348             :        */
  319349             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  319350             : 
  319351             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  319352             :        */
  319353             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  319354             : 
  319355             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  319356             :        // This traversal helps support internal tools that call static member functions.
  319357             :        // note: this function operates on the memory pools.
  319358             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  319359             :        */
  319360             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  319361             :       /* */
  319362             : 
  319363             : 
  319364             :      public:
  319365             :       /* name Memory Allocation Functions
  319366             :           \brief Memory allocations functions ... incomplete-documentation
  319367             : 
  319368             :           These functions have been made public as part of the design, but they are suggested for internal use 
  319369             :           or by particularly knowledgable users for specialized tools or applications.
  319370             :        */
  319371             :       /* */
  319372             : 
  319373             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  319374             : 
  319375             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  319376             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  319377             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  319378             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  319379             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  319380             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  319381             :           being used with the AST File I/O mechanism.
  319382             :        */
  319383             :           virtual bool isInMemoryPool() override;
  319384             : 
  319385             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  319386             : 
  319387             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  319388             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  319389             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  319390             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  319391             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  319392             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  319393             :           being used with the AST File I/O mechanism.
  319394             :        */
  319395             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  319396             : 
  319397             :       // DQ (4/30/2006): Modified to be a const function.
  319398             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  319399             : 
  319400             :           This functions is part of general support for many possible tools to operate 
  319401             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  319402             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  319403             :           less than the set of pointers used by the AST file I/O. This is part of
  319404             :           work implemented by Andreas, and support tools such as the AST graph generation.
  319405             : 
  319406             :           \warning This function can return unexpected data members and thus the 
  319407             :                    order and the number of elements is unpredicable and subject 
  319408             :                    to change.
  319409             : 
  319410             :           \returns STL vector of pairs of SgNode* and strings
  319411             :        */
  319412             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  319413             : 
  319414             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  319415             : 
  319416             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  319417             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  319418             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  319419             : 
  319420             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  319421             :                    and subject to change.
  319422             :        */
  319423             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  319424             : 
  319425             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  319426             : 
  319427             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  319428             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  319429             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  319430             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  319431             : 
  319432             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  319433             : 
  319434             :           \returns long
  319435             :        */
  319436             :           virtual long getChildIndex( SgNode* childNode ) const override;
  319437             : 
  319438             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  319439             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  319440             :       /* \brief Constructor for use by AST File I/O Mechanism
  319441             : 
  319442             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  319443             :           which obtained via fast binary file I/O from disk.
  319444             :        */
  319445             :        // SgFunctionParameterRefExp( SgFunctionParameterRefExpStorageClass& source );
  319446             : 
  319447             : 
  319448             : 
  319449             : 
  319450             : 
  319451             :  // JH (10/24/2005): methods added to support the ast file IO
  319452             :     private:
  319453             : 
  319454             :       /* name AST Memory Allocation Support Functions
  319455             :           \brief Memory allocations support....
  319456             : 
  319457             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  319458             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  319459             :           and support the AST File I/O Mechanism.
  319460             :        */
  319461             :       /* */
  319462             : 
  319463             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  319464             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  319465             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  319466             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  319467             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  319468             :           a correspinding one in the AST_FILE_IO class!
  319469             :        */
  319470             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  319471             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  319472             :       /* \brief Typedef used for low level memory access.
  319473             :        */
  319474             :        // typedef unsigned char* TestType;
  319475             : 
  319476             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  319477             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  319478             :       /* \brief Typedef used to hold memory addresses as values.
  319479             :        */
  319480             :        // typedef unsigned long  AddressType;
  319481             : 
  319482             : 
  319483             : 
  319484             :        // necessary, to have direct access to the p_freepointer and the private methods !
  319485             :       /*! \brief friend class declaration to support AST File I/O */
  319486             :           friend class AST_FILE_IO;
  319487             : 
  319488             :       /*! \brief friend class declaration to support AST File I/O */
  319489             :           friend class SgFunctionParameterRefExpStorageClass;
  319490             : 
  319491             :       /*! \brief friend class declaration to support AST File I/O */
  319492             :           friend class AstSpecificDataManagingClass;
  319493             : 
  319494             :       /*! \brief friend class declaration to support AST File I/O */
  319495             :           friend class AstSpecificDataManagingClassStorageClass;
  319496             :     public:
  319497             :       /*! \brief IR node constructor to support AST File I/O */
  319498             :           SgFunctionParameterRefExp( const SgFunctionParameterRefExpStorageClass& source );
  319499             : 
  319500             :  // private: // JJW hack
  319501             :        /*
  319502             :           name AST Memory Allocation Support Variables
  319503             :           Memory allocations support variables 
  319504             : 
  319505             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  319506             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  319507             :           and support the AST File I/O Mechanism.
  319508             :        */
  319509             :       /* */
  319510             : 
  319511             :     public:
  319512             : 
  319513             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  319514             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  319515             :       // virtual SgNode* addRegExpAttribute();
  319516             :       /*! \brief Support for AST matching using regular expression.
  319517             : 
  319518             :           This support is incomplete and the subject of current research to define 
  319519             :           RegEx trees to support inexact matching.
  319520             :        */
  319521             :           SgFunctionParameterRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  319522             : 
  319523             : // *** COMMON CODE SECTION ENDS HERE ***
  319524             : 
  319525             : 
  319526             : // End of memberFunctionString
  319527             : // Start of memberFunctionString
  319528             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  319529             : 
  319530             :      // the generated cast function
  319531             :      // friend ROSE_DLL_API SgFunctionParameterRefExp* isSgFunctionParameterRefExp ( SgNode* s );
  319532             : 
  319533             :           typedef SgExpression base_node_type;
  319534             : 
  319535             : 
  319536             : // End of memberFunctionString
  319537             : // Start of memberFunctionString
  319538             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  319539             : 
  319540             :           SgType* get_type() const override;
  319541             : 
  319542             : 
  319543             : // End of memberFunctionString
  319544             : // Start of memberFunctionString
  319545             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  319546             : 
  319547             :           void post_construction_initialization() override;
  319548             : 
  319549             : 
  319550             : // End of memberFunctionString
  319551             : 
  319552             :      public: 
  319553             :          int get_parameter_number() const;
  319554             :          void set_parameter_number(int parameter_number);
  319555             : 
  319556             :      public: 
  319557             :          int get_parameter_levels_up() const;
  319558             :          void set_parameter_levels_up(int parameter_levels_up);
  319559             : 
  319560             :      public: 
  319561             :          SgExpression* get_parameter_expression() const;
  319562             :          void set_parameter_expression(SgExpression* parameter_expression);
  319563             : 
  319564             :      public: 
  319565             :          SgType* get_parameter_type() const;
  319566             :          void set_parameter_type(SgType* parameter_type);
  319567             : 
  319568             : 
  319569             :      public: 
  319570             :          virtual ~SgFunctionParameterRefExp();
  319571             : 
  319572             : 
  319573             :      public: 
  319574             :          SgFunctionParameterRefExp(Sg_File_Info* startOfConstruct , int parameter_number = -1, int parameter_levels_up = -1); 
  319575             :          SgFunctionParameterRefExp(int parameter_number, int parameter_levels_up); 
  319576             : 
  319577             :     protected:
  319578             : // Start of memberFunctionString
  319579             : int p_parameter_number;
  319580             :           
  319581             : // End of memberFunctionString
  319582             : // Start of memberFunctionString
  319583             : int p_parameter_levels_up;
  319584             :           
  319585             : // End of memberFunctionString
  319586             : // Start of memberFunctionString
  319587             : SgExpression* p_parameter_expression;
  319588             :           
  319589             : // End of memberFunctionString
  319590             : // Start of memberFunctionString
  319591             : SgType* p_parameter_type;
  319592             :           
  319593             : // End of memberFunctionString
  319594             : 
  319595             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionParameterRefExp>;
  319596             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionParameterRefExp, int,&SgFunctionParameterRefExp::p_parameter_number>;
  319597             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionParameterRefExp, int,&SgFunctionParameterRefExp::p_parameter_levels_up>;
  319598             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionParameterRefExp, SgExpression*,&SgFunctionParameterRefExp::p_parameter_expression>;
  319599             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionParameterRefExp, SgType*,&SgFunctionParameterRefExp::p_parameter_type>;
  319600             : 
  319601             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319602             : 
  319603             : 
  319604             :    };
  319605             : #endif
  319606             : 
  319607             : // postdeclarations for SgFunctionParameterRefExp
  319608             : 
  319609             : /* #line 319610 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319610             : 
  319611             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  319612             : 
  319613             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319614             : 
  319615             : 
  319616             : /* #line 319617 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319617             : 
  319618             : 
  319619             : 
  319620             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319621             : 
  319622             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  319623             : //      This code is automatically generated for each 
  319624             : //      terminal and non-terminal within the defined 
  319625             : //      grammar.  There is a simple way to change the 
  319626             : //      code to fix bugs etc.  See the ROSE README file
  319627             : //      for directions.
  319628             : 
  319629             : // tps: (02/22/2010): Adding DLL export requirements
  319630             : #include "rosedll.h"
  319631             : 
  319632             : // predeclarations for SgLambdaExp
  319633             : 
  319634             : /* #line 319635 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319635             : 
  319636             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  319637             : 
  319638             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  319639             : 
  319640             : #if 1
  319641             : // Class Definition for SgLambdaExp
  319642             : class ROSE_DLL_API SgLambdaExp  : public SgExpression
  319643             :    {
  319644             :      public:
  319645             : 
  319646             : 
  319647             : /* #line 319648 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  319648             : 
  319649             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  319650             : // Start of memberFunctionString
  319651             : /* #line 387 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  319652             : 
  319653             : 
  319654             : 
  319655             : // End of memberFunctionString
  319656             : // Start of memberFunctionString
  319657             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  319658             : 
  319659             : // *** COMMON CODE SECTION BEGINS HERE ***
  319660             : 
  319661             :     public:
  319662             : 
  319663             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  319664             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  319665             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  319666             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  319667             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  319668             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  319669             : 
  319670             :       /*! \brief returns a string representing the class name */
  319671             :           virtual std::string class_name() const override;
  319672             : 
  319673             :       /*! \brief returns new style SageIII enum values */
  319674             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  319675             : 
  319676             :       /*! \brief static variant value */
  319677             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  319678             :        // static const VariantT static_variant = V_SgLambdaExp;
  319679             :           enum { static_variant = V_SgLambdaExp };
  319680             : 
  319681             :        /* the generated cast function */
  319682             :       /*! \brief Casts pointer from base class to derived class */
  319683             :           ROSE_DLL_API friend       SgLambdaExp* isSgLambdaExp(       SgNode * s );
  319684             : 
  319685             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  319686             :           ROSE_DLL_API friend const SgLambdaExp* isSgLambdaExp( const SgNode * s );
  319687             : 
  319688             :      // ******************************************
  319689             :      // * Memory Pool / New / Delete
  319690             :      // ******************************************
  319691             : 
  319692             :      public:
  319693             :           /// \private
  319694             :           static const unsigned pool_size; //
  319695             :           /// \private
  319696             :           static std::vector<unsigned char *> pools; //
  319697             :           /// \private
  319698             :           static SgLambdaExp * next_node; // 
  319699             : 
  319700             :           /// \private
  319701             :           static unsigned long initializeStorageClassArray(SgLambdaExpStorageClass *); //
  319702             : 
  319703             :           /// \private
  319704             :           static void clearMemoryPool(); //
  319705             :           static void deleteMemoryPool(); //
  319706             : 
  319707             :           /// \private
  319708             :           static void extendMemoryPoolForFileIO(); //
  319709             : 
  319710             :           /// \private
  319711             :           static SgLambdaExp * getPointerFromGlobalIndex(unsigned long); //
  319712             :           /// \private
  319713             :           static SgLambdaExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  319714             : 
  319715             :           /// \private
  319716             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  319717             :           /// \private
  319718             :           static void resetValidFreepointers(); //
  319719             :           /// \private
  319720             :           static unsigned long getNumberOfLastValidPointer(); //
  319721             : 
  319722             : 
  319723             : #if defined(INLINE_FUNCTIONS)
  319724             :       /*! \brief returns pointer to newly allocated IR node */
  319725             :           inline void *operator new (size_t size);
  319726             : #else
  319727             :       /*! \brief returns pointer to newly allocated IR node */
  319728             :           void *operator new (size_t size);
  319729             : #endif
  319730             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  319731             :           void operator delete (void* pointer, size_t size);
  319732             : 
  319733             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  319734           0 :           void operator delete (void* pointer)
  319735             :              {
  319736             :             // This is the generated delete operator...
  319737           0 :                SgLambdaExp::operator delete (pointer,sizeof(SgLambdaExp));
  319738             :              }
  319739             : 
  319740             :       /*! \brief Returns the total number of IR nodes of this type */
  319741             :           static size_t numberOfNodes();
  319742             : 
  319743             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  319744             :           static size_t memoryUsage();
  319745             : 
  319746             :       // End of scope which started in IR nodes specific code 
  319747             :       /* */
  319748             : 
  319749             :       /* name Internal Functions
  319750             :           \brief Internal functions ... incomplete-documentation
  319751             : 
  319752             :           These functions have been made public as part of the design, but they are suggested for internal use 
  319753             :           or by particularly knowledgeable users for specialized tools or applications.
  319754             : 
  319755             :           \internal We could not make these private because they are required by user for special purposes. And 
  319756             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  319757             :          
  319758             :        */
  319759             : 
  319760             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  319761             :        // overridden in every class by *generated* implementation
  319762             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  319763             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  319764             :        // MS: 06/28/02 container of names of variables or container indices 
  319765             :        // used used in the traversal to access AST successor nodes
  319766             :        // overridden in every class by *generated* implementation
  319767             :       /*! \brief container of names of variables or container indices used used in the traversal
  319768             :           to access AST successor nodes overridden in every class by *generated* implementation */
  319769             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  319770             : 
  319771             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  319772             :        // than all the vector copies. The implementation for these functions is generated for each class.
  319773             :       /*! \brief return number of children in the traversal successor list */
  319774             :           virtual size_t get_numberOfTraversalSuccessors() override;
  319775             :       /*! \brief index-based access to traversal successors by index number */
  319776             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  319777             :       /*! \brief index-based access to traversal successors by child node */
  319778             :           virtual size_t get_childIndex(SgNode *child) override;
  319779             : 
  319780             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  319781             :        // MS: 08/16/2002 method for generating RTI information
  319782             :       /*! \brief return C++ Runtime-Time-Information */
  319783             :           virtual RTIReturnType roseRTI() override;
  319784             : #endif
  319785             :       /* */
  319786             : 
  319787             : 
  319788             : 
  319789             :       /* name Deprecated Functions
  319790             :           \brief Deprecated functions ... incomplete-documentation
  319791             : 
  319792             :           These functions have been deprecated from use.
  319793             :        */
  319794             :       /* */
  319795             : 
  319796             :       /*! returns a C style string (char*) representing the class name */
  319797             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  319798             : 
  319799             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  319800             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  319801             : #if 0
  319802             :       /*! returns old style Sage II enum values */
  319803             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  319804             :       /*! returns old style Sage II enum values */
  319805             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  319806             : #endif
  319807             :       /* */
  319808             : 
  319809             : 
  319810             : 
  319811             : 
  319812             :      public:
  319813             :       /* name Traversal Support Functions
  319814             :           \brief Traversal support functions ... incomplete-documentation
  319815             : 
  319816             :           These functions have been made public as part of the design, but they are suggested for internal use 
  319817             :           or by particularly knowledgable users for specialized tools or applications.
  319818             :        */
  319819             :       /* */
  319820             : 
  319821             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  319822             :        // (inferior to ROSE traversal mechanism, experimental).
  319823             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  319824             :        */
  319825             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  319826             : 
  319827             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  319828             :       /*! \brief support for the classic visitor pattern done in GoF */
  319829             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  319830             : 
  319831             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  319832             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  319833             :        */
  319834             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  319835             : 
  319836             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  319837             :        */
  319838             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  319839             : 
  319840             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  319841             :        // This traversal helps support internal tools that call static member functions.
  319842             :        // note: this function operates on the memory pools.
  319843             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  319844             :        */
  319845             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  319846             :       /* */
  319847             : 
  319848             : 
  319849             :      public:
  319850             :       /* name Memory Allocation Functions
  319851             :           \brief Memory allocations functions ... incomplete-documentation
  319852             : 
  319853             :           These functions have been made public as part of the design, but they are suggested for internal use 
  319854             :           or by particularly knowledgable users for specialized tools or applications.
  319855             :        */
  319856             :       /* */
  319857             : 
  319858             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  319859             : 
  319860             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  319861             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  319862             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  319863             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  319864             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  319865             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  319866             :           being used with the AST File I/O mechanism.
  319867             :        */
  319868             :           virtual bool isInMemoryPool() override;
  319869             : 
  319870             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  319871             : 
  319872             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  319873             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  319874             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  319875             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  319876             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  319877             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  319878             :           being used with the AST File I/O mechanism.
  319879             :        */
  319880             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  319881             : 
  319882             :       // DQ (4/30/2006): Modified to be a const function.
  319883             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  319884             : 
  319885             :           This functions is part of general support for many possible tools to operate 
  319886             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  319887             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  319888             :           less than the set of pointers used by the AST file I/O. This is part of
  319889             :           work implemented by Andreas, and support tools such as the AST graph generation.
  319890             : 
  319891             :           \warning This function can return unexpected data members and thus the 
  319892             :                    order and the number of elements is unpredicable and subject 
  319893             :                    to change.
  319894             : 
  319895             :           \returns STL vector of pairs of SgNode* and strings
  319896             :        */
  319897             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  319898             : 
  319899             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  319900             : 
  319901             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  319902             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  319903             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  319904             : 
  319905             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  319906             :                    and subject to change.
  319907             :        */
  319908             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  319909             : 
  319910             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  319911             : 
  319912             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  319913             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  319914             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  319915             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  319916             : 
  319917             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  319918             : 
  319919             :           \returns long
  319920             :        */
  319921             :           virtual long getChildIndex( SgNode* childNode ) const override;
  319922             : 
  319923             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  319924             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  319925             :       /* \brief Constructor for use by AST File I/O Mechanism
  319926             : 
  319927             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  319928             :           which obtained via fast binary file I/O from disk.
  319929             :        */
  319930             :        // SgLambdaExp( SgLambdaExpStorageClass& source );
  319931             : 
  319932             : 
  319933             : 
  319934             : 
  319935             : 
  319936             :  // JH (10/24/2005): methods added to support the ast file IO
  319937             :     private:
  319938             : 
  319939             :       /* name AST Memory Allocation Support Functions
  319940             :           \brief Memory allocations support....
  319941             : 
  319942             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  319943             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  319944             :           and support the AST File I/O Mechanism.
  319945             :        */
  319946             :       /* */
  319947             : 
  319948             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  319949             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  319950             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  319951             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  319952             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  319953             :           a correspinding one in the AST_FILE_IO class!
  319954             :        */
  319955             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  319956             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  319957             :       /* \brief Typedef used for low level memory access.
  319958             :        */
  319959             :        // typedef unsigned char* TestType;
  319960             : 
  319961             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  319962             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  319963             :       /* \brief Typedef used to hold memory addresses as values.
  319964             :        */
  319965             :        // typedef unsigned long  AddressType;
  319966             : 
  319967             : 
  319968             : 
  319969             :        // necessary, to have direct access to the p_freepointer and the private methods !
  319970             :       /*! \brief friend class declaration to support AST File I/O */
  319971             :           friend class AST_FILE_IO;
  319972             : 
  319973             :       /*! \brief friend class declaration to support AST File I/O */
  319974             :           friend class SgLambdaExpStorageClass;
  319975             : 
  319976             :       /*! \brief friend class declaration to support AST File I/O */
  319977             :           friend class AstSpecificDataManagingClass;
  319978             : 
  319979             :       /*! \brief friend class declaration to support AST File I/O */
  319980             :           friend class AstSpecificDataManagingClassStorageClass;
  319981             :     public:
  319982             :       /*! \brief IR node constructor to support AST File I/O */
  319983             :           SgLambdaExp( const SgLambdaExpStorageClass& source );
  319984             : 
  319985             :  // private: // JJW hack
  319986             :        /*
  319987             :           name AST Memory Allocation Support Variables
  319988             :           Memory allocations support variables 
  319989             : 
  319990             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  319991             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  319992             :           and support the AST File I/O Mechanism.
  319993             :        */
  319994             :       /* */
  319995             : 
  319996             :     public:
  319997             : 
  319998             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  319999             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  320000             :       // virtual SgNode* addRegExpAttribute();
  320001             :       /*! \brief Support for AST matching using regular expression.
  320002             : 
  320003             :           This support is incomplete and the subject of current research to define 
  320004             :           RegEx trees to support inexact matching.
  320005             :        */
  320006             :           SgLambdaExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  320007             : 
  320008             : // *** COMMON CODE SECTION ENDS HERE ***
  320009             : 
  320010             : 
  320011             : // End of memberFunctionString
  320012             : // Start of memberFunctionString
  320013             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  320014             : 
  320015             :      // the generated cast function
  320016             :      // friend ROSE_DLL_API SgLambdaExp* isSgLambdaExp ( SgNode* s );
  320017             : 
  320018             :           typedef SgExpression base_node_type;
  320019             : 
  320020             : 
  320021             : // End of memberFunctionString
  320022             : // Start of memberFunctionString
  320023             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  320024             : 
  320025             :           SgType* get_type() const override;
  320026             : 
  320027             : 
  320028             : // End of memberFunctionString
  320029             : // Start of memberFunctionString
  320030             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  320031             : 
  320032             :           void post_construction_initialization() override;
  320033             : 
  320034             : 
  320035             : // End of memberFunctionString
  320036             : 
  320037             :      public: 
  320038             :          SgLambdaCaptureList* get_lambda_capture_list() const;
  320039             :          void set_lambda_capture_list(SgLambdaCaptureList* lambda_capture_list);
  320040             : 
  320041             :      public: 
  320042             :          SgClassDeclaration* get_lambda_closure_class() const;
  320043             :          void set_lambda_closure_class(SgClassDeclaration* lambda_closure_class);
  320044             : 
  320045             :      public: 
  320046             :          SgFunctionDeclaration* get_lambda_function() const;
  320047             :          void set_lambda_function(SgFunctionDeclaration* lambda_function);
  320048             : 
  320049             :      public: 
  320050             :          bool get_is_mutable() const;
  320051             :          void set_is_mutable(bool is_mutable);
  320052             : 
  320053             :      public: 
  320054             :          bool get_capture_default() const;
  320055             :          void set_capture_default(bool capture_default);
  320056             : 
  320057             :      public: 
  320058             :          bool get_default_is_by_reference() const;
  320059             :          void set_default_is_by_reference(bool default_is_by_reference);
  320060             : 
  320061             :      public: 
  320062             :          bool get_explicit_return_type() const;
  320063             :          void set_explicit_return_type(bool explicit_return_type);
  320064             : 
  320065             :      public: 
  320066             :          bool get_has_parameter_decl() const;
  320067             :          void set_has_parameter_decl(bool has_parameter_decl);
  320068             : 
  320069             :      public: 
  320070             :          bool get_is_device() const;
  320071             :          void set_is_device(bool is_device);
  320072             : 
  320073             : 
  320074             :      public: 
  320075             :          virtual ~SgLambdaExp();
  320076             : 
  320077             : 
  320078             :      public: 
  320079             :          SgLambdaExp(Sg_File_Info* startOfConstruct , SgLambdaCaptureList* lambda_capture_list = NULL, SgClassDeclaration* lambda_closure_class = NULL, SgFunctionDeclaration* lambda_function = NULL); 
  320080             :          SgLambdaExp(SgLambdaCaptureList* lambda_capture_list, SgClassDeclaration* lambda_closure_class, SgFunctionDeclaration* lambda_function); 
  320081             : 
  320082             :     protected:
  320083             : // Start of memberFunctionString
  320084             : SgLambdaCaptureList* p_lambda_capture_list;
  320085             :           
  320086             : // End of memberFunctionString
  320087             : // Start of memberFunctionString
  320088             : SgClassDeclaration* p_lambda_closure_class;
  320089             :           
  320090             : // End of memberFunctionString
  320091             : // Start of memberFunctionString
  320092             : SgFunctionDeclaration* p_lambda_function;
  320093             :           
  320094             : // End of memberFunctionString
  320095             : // Start of memberFunctionString
  320096             : bool p_is_mutable;
  320097             :           
  320098             : // End of memberFunctionString
  320099             : // Start of memberFunctionString
  320100             : bool p_capture_default;
  320101             :           
  320102             : // End of memberFunctionString
  320103             : // Start of memberFunctionString
  320104             : bool p_default_is_by_reference;
  320105             :           
  320106             : // End of memberFunctionString
  320107             : // Start of memberFunctionString
  320108             : bool p_explicit_return_type;
  320109             :           
  320110             : // End of memberFunctionString
  320111             : // Start of memberFunctionString
  320112             : bool p_has_parameter_decl;
  320113             :           
  320114             : // End of memberFunctionString
  320115             : // Start of memberFunctionString
  320116             : bool p_is_device;
  320117             :           
  320118             : // End of memberFunctionString
  320119             : 
  320120             :     friend struct Rose::Traits::generated::describe_node_t<SgLambdaExp>;
  320121             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, SgLambdaCaptureList*,&SgLambdaExp::p_lambda_capture_list>;
  320122             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, SgClassDeclaration*,&SgLambdaExp::p_lambda_closure_class>;
  320123             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, SgFunctionDeclaration*,&SgLambdaExp::p_lambda_function>;
  320124             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, bool,&SgLambdaExp::p_is_mutable>;
  320125             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, bool,&SgLambdaExp::p_capture_default>;
  320126             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, bool,&SgLambdaExp::p_default_is_by_reference>;
  320127             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, bool,&SgLambdaExp::p_explicit_return_type>;
  320128             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, bool,&SgLambdaExp::p_has_parameter_decl>;
  320129             :     friend struct Rose::Traits::generated::describe_field_t<SgLambdaExp, bool,&SgLambdaExp::p_is_device>;
  320130             : 
  320131             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320132             : 
  320133             : 
  320134             :    };
  320135             : #endif
  320136             : 
  320137             : // postdeclarations for SgLambdaExp
  320138             : 
  320139             : /* #line 320140 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320140             : 
  320141             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  320142             : 
  320143             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320144             : 
  320145             : 
  320146             : /* #line 320147 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320147             : 
  320148             : 
  320149             : 
  320150             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320151             : 
  320152             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  320153             : //      This code is automatically generated for each 
  320154             : //      terminal and non-terminal within the defined 
  320155             : //      grammar.  There is a simple way to change the 
  320156             : //      code to fix bugs etc.  See the ROSE README file
  320157             : //      for directions.
  320158             : 
  320159             : // tps: (02/22/2010): Adding DLL export requirements
  320160             : #include "rosedll.h"
  320161             : 
  320162             : // predeclarations for SgNoexceptOp
  320163             : 
  320164             : /* #line 320165 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320165             : 
  320166             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  320167             : 
  320168             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320169             : 
  320170             : #if 1
  320171             : // Class Definition for SgNoexceptOp
  320172             : class ROSE_DLL_API SgNoexceptOp  : public SgExpression
  320173             :    {
  320174             :      public:
  320175             : 
  320176             : 
  320177             : /* #line 320178 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320178             : 
  320179             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  320180             : // Start of memberFunctionString
  320181             : /* #line 1039 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  320182             : 
  320183             :        // DQ (2/4/2015): Let's not build this if we don't need it.
  320184             :        // int replace_expression(SgExpression*, SgExpression*) ROSE_DEPRECATED_FUNCTION;
  320185             : 
  320186             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  320187             :           virtual unsigned int cfgIndexForEnd() const override;
  320188             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  320189             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  320190             : #endif
  320191             : 
  320192             : 
  320193             : 
  320194             : // End of memberFunctionString
  320195             : // Start of memberFunctionString
  320196             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  320197             : 
  320198             : // *** COMMON CODE SECTION BEGINS HERE ***
  320199             : 
  320200             :     public:
  320201             : 
  320202             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  320203             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  320204             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  320205             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  320206             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  320207             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  320208             : 
  320209             :       /*! \brief returns a string representing the class name */
  320210             :           virtual std::string class_name() const override;
  320211             : 
  320212             :       /*! \brief returns new style SageIII enum values */
  320213             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  320214             : 
  320215             :       /*! \brief static variant value */
  320216             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  320217             :        // static const VariantT static_variant = V_SgNoexceptOp;
  320218             :           enum { static_variant = V_SgNoexceptOp };
  320219             : 
  320220             :        /* the generated cast function */
  320221             :       /*! \brief Casts pointer from base class to derived class */
  320222             :           ROSE_DLL_API friend       SgNoexceptOp* isSgNoexceptOp(       SgNode * s );
  320223             : 
  320224             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  320225             :           ROSE_DLL_API friend const SgNoexceptOp* isSgNoexceptOp( const SgNode * s );
  320226             : 
  320227             :      // ******************************************
  320228             :      // * Memory Pool / New / Delete
  320229             :      // ******************************************
  320230             : 
  320231             :      public:
  320232             :           /// \private
  320233             :           static const unsigned pool_size; //
  320234             :           /// \private
  320235             :           static std::vector<unsigned char *> pools; //
  320236             :           /// \private
  320237             :           static SgNoexceptOp * next_node; // 
  320238             : 
  320239             :           /// \private
  320240             :           static unsigned long initializeStorageClassArray(SgNoexceptOpStorageClass *); //
  320241             : 
  320242             :           /// \private
  320243             :           static void clearMemoryPool(); //
  320244             :           static void deleteMemoryPool(); //
  320245             : 
  320246             :           /// \private
  320247             :           static void extendMemoryPoolForFileIO(); //
  320248             : 
  320249             :           /// \private
  320250             :           static SgNoexceptOp * getPointerFromGlobalIndex(unsigned long); //
  320251             :           /// \private
  320252             :           static SgNoexceptOp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  320253             : 
  320254             :           /// \private
  320255             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  320256             :           /// \private
  320257             :           static void resetValidFreepointers(); //
  320258             :           /// \private
  320259             :           static unsigned long getNumberOfLastValidPointer(); //
  320260             : 
  320261             : 
  320262             : #if defined(INLINE_FUNCTIONS)
  320263             :       /*! \brief returns pointer to newly allocated IR node */
  320264             :           inline void *operator new (size_t size);
  320265             : #else
  320266             :       /*! \brief returns pointer to newly allocated IR node */
  320267             :           void *operator new (size_t size);
  320268             : #endif
  320269             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  320270             :           void operator delete (void* pointer, size_t size);
  320271             : 
  320272             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  320273          36 :           void operator delete (void* pointer)
  320274             :              {
  320275             :             // This is the generated delete operator...
  320276          36 :                SgNoexceptOp::operator delete (pointer,sizeof(SgNoexceptOp));
  320277             :              }
  320278             : 
  320279             :       /*! \brief Returns the total number of IR nodes of this type */
  320280             :           static size_t numberOfNodes();
  320281             : 
  320282             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  320283             :           static size_t memoryUsage();
  320284             : 
  320285             :       // End of scope which started in IR nodes specific code 
  320286             :       /* */
  320287             : 
  320288             :       /* name Internal Functions
  320289             :           \brief Internal functions ... incomplete-documentation
  320290             : 
  320291             :           These functions have been made public as part of the design, but they are suggested for internal use 
  320292             :           or by particularly knowledgeable users for specialized tools or applications.
  320293             : 
  320294             :           \internal We could not make these private because they are required by user for special purposes. And 
  320295             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  320296             :          
  320297             :        */
  320298             : 
  320299             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  320300             :        // overridden in every class by *generated* implementation
  320301             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  320302             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  320303             :        // MS: 06/28/02 container of names of variables or container indices 
  320304             :        // used used in the traversal to access AST successor nodes
  320305             :        // overridden in every class by *generated* implementation
  320306             :       /*! \brief container of names of variables or container indices used used in the traversal
  320307             :           to access AST successor nodes overridden in every class by *generated* implementation */
  320308             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  320309             : 
  320310             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  320311             :        // than all the vector copies. The implementation for these functions is generated for each class.
  320312             :       /*! \brief return number of children in the traversal successor list */
  320313             :           virtual size_t get_numberOfTraversalSuccessors() override;
  320314             :       /*! \brief index-based access to traversal successors by index number */
  320315             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  320316             :       /*! \brief index-based access to traversal successors by child node */
  320317             :           virtual size_t get_childIndex(SgNode *child) override;
  320318             : 
  320319             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  320320             :        // MS: 08/16/2002 method for generating RTI information
  320321             :       /*! \brief return C++ Runtime-Time-Information */
  320322             :           virtual RTIReturnType roseRTI() override;
  320323             : #endif
  320324             :       /* */
  320325             : 
  320326             : 
  320327             : 
  320328             :       /* name Deprecated Functions
  320329             :           \brief Deprecated functions ... incomplete-documentation
  320330             : 
  320331             :           These functions have been deprecated from use.
  320332             :        */
  320333             :       /* */
  320334             : 
  320335             :       /*! returns a C style string (char*) representing the class name */
  320336             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  320337             : 
  320338             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  320339             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  320340             : #if 0
  320341             :       /*! returns old style Sage II enum values */
  320342             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  320343             :       /*! returns old style Sage II enum values */
  320344             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  320345             : #endif
  320346             :       /* */
  320347             : 
  320348             : 
  320349             : 
  320350             : 
  320351             :      public:
  320352             :       /* name Traversal Support Functions
  320353             :           \brief Traversal support functions ... incomplete-documentation
  320354             : 
  320355             :           These functions have been made public as part of the design, but they are suggested for internal use 
  320356             :           or by particularly knowledgable users for specialized tools or applications.
  320357             :        */
  320358             :       /* */
  320359             : 
  320360             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  320361             :        // (inferior to ROSE traversal mechanism, experimental).
  320362             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  320363             :        */
  320364             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  320365             : 
  320366             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  320367             :       /*! \brief support for the classic visitor pattern done in GoF */
  320368             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  320369             : 
  320370             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  320371             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  320372             :        */
  320373             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  320374             : 
  320375             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  320376             :        */
  320377             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  320378             : 
  320379             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  320380             :        // This traversal helps support internal tools that call static member functions.
  320381             :        // note: this function operates on the memory pools.
  320382             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  320383             :        */
  320384             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  320385             :       /* */
  320386             : 
  320387             : 
  320388             :      public:
  320389             :       /* name Memory Allocation Functions
  320390             :           \brief Memory allocations functions ... incomplete-documentation
  320391             : 
  320392             :           These functions have been made public as part of the design, but they are suggested for internal use 
  320393             :           or by particularly knowledgable users for specialized tools or applications.
  320394             :        */
  320395             :       /* */
  320396             : 
  320397             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  320398             : 
  320399             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  320400             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  320401             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  320402             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  320403             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  320404             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  320405             :           being used with the AST File I/O mechanism.
  320406             :        */
  320407             :           virtual bool isInMemoryPool() override;
  320408             : 
  320409             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  320410             : 
  320411             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  320412             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  320413             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  320414             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  320415             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  320416             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  320417             :           being used with the AST File I/O mechanism.
  320418             :        */
  320419             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  320420             : 
  320421             :       // DQ (4/30/2006): Modified to be a const function.
  320422             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  320423             : 
  320424             :           This functions is part of general support for many possible tools to operate 
  320425             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  320426             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  320427             :           less than the set of pointers used by the AST file I/O. This is part of
  320428             :           work implemented by Andreas, and support tools such as the AST graph generation.
  320429             : 
  320430             :           \warning This function can return unexpected data members and thus the 
  320431             :                    order and the number of elements is unpredicable and subject 
  320432             :                    to change.
  320433             : 
  320434             :           \returns STL vector of pairs of SgNode* and strings
  320435             :        */
  320436             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  320437             : 
  320438             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  320439             : 
  320440             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  320441             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  320442             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  320443             : 
  320444             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  320445             :                    and subject to change.
  320446             :        */
  320447             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  320448             : 
  320449             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  320450             : 
  320451             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  320452             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  320453             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  320454             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  320455             : 
  320456             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  320457             : 
  320458             :           \returns long
  320459             :        */
  320460             :           virtual long getChildIndex( SgNode* childNode ) const override;
  320461             : 
  320462             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  320463             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  320464             :       /* \brief Constructor for use by AST File I/O Mechanism
  320465             : 
  320466             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  320467             :           which obtained via fast binary file I/O from disk.
  320468             :        */
  320469             :        // SgNoexceptOp( SgNoexceptOpStorageClass& source );
  320470             : 
  320471             : 
  320472             : 
  320473             : 
  320474             : 
  320475             :  // JH (10/24/2005): methods added to support the ast file IO
  320476             :     private:
  320477             : 
  320478             :       /* name AST Memory Allocation Support Functions
  320479             :           \brief Memory allocations support....
  320480             : 
  320481             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  320482             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  320483             :           and support the AST File I/O Mechanism.
  320484             :        */
  320485             :       /* */
  320486             : 
  320487             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  320488             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  320489             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  320490             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  320491             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  320492             :           a correspinding one in the AST_FILE_IO class!
  320493             :        */
  320494             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  320495             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  320496             :       /* \brief Typedef used for low level memory access.
  320497             :        */
  320498             :        // typedef unsigned char* TestType;
  320499             : 
  320500             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  320501             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  320502             :       /* \brief Typedef used to hold memory addresses as values.
  320503             :        */
  320504             :        // typedef unsigned long  AddressType;
  320505             : 
  320506             : 
  320507             : 
  320508             :        // necessary, to have direct access to the p_freepointer and the private methods !
  320509             :       /*! \brief friend class declaration to support AST File I/O */
  320510             :           friend class AST_FILE_IO;
  320511             : 
  320512             :       /*! \brief friend class declaration to support AST File I/O */
  320513             :           friend class SgNoexceptOpStorageClass;
  320514             : 
  320515             :       /*! \brief friend class declaration to support AST File I/O */
  320516             :           friend class AstSpecificDataManagingClass;
  320517             : 
  320518             :       /*! \brief friend class declaration to support AST File I/O */
  320519             :           friend class AstSpecificDataManagingClassStorageClass;
  320520             :     public:
  320521             :       /*! \brief IR node constructor to support AST File I/O */
  320522             :           SgNoexceptOp( const SgNoexceptOpStorageClass& source );
  320523             : 
  320524             :  // private: // JJW hack
  320525             :        /*
  320526             :           name AST Memory Allocation Support Variables
  320527             :           Memory allocations support variables 
  320528             : 
  320529             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  320530             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  320531             :           and support the AST File I/O Mechanism.
  320532             :        */
  320533             :       /* */
  320534             : 
  320535             :     public:
  320536             : 
  320537             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  320538             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  320539             :       // virtual SgNode* addRegExpAttribute();
  320540             :       /*! \brief Support for AST matching using regular expression.
  320541             : 
  320542             :           This support is incomplete and the subject of current research to define 
  320543             :           RegEx trees to support inexact matching.
  320544             :        */
  320545             :           SgNoexceptOp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  320546             : 
  320547             : // *** COMMON CODE SECTION ENDS HERE ***
  320548             : 
  320549             : 
  320550             : // End of memberFunctionString
  320551             : // Start of memberFunctionString
  320552             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  320553             : 
  320554             :      // the generated cast function
  320555             :      // friend ROSE_DLL_API SgNoexceptOp* isSgNoexceptOp ( SgNode* s );
  320556             : 
  320557             :           typedef SgExpression base_node_type;
  320558             : 
  320559             : 
  320560             : // End of memberFunctionString
  320561             : // Start of memberFunctionString
  320562             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  320563             : 
  320564             :           SgType* get_type() const override;
  320565             : 
  320566             : 
  320567             : // End of memberFunctionString
  320568             : // Start of memberFunctionString
  320569             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  320570             : 
  320571             :           void post_construction_initialization() override;
  320572             : 
  320573             : 
  320574             : // End of memberFunctionString
  320575             : 
  320576             :      public: 
  320577             :          SgExpression* get_operand_expr() const;
  320578             :          void set_operand_expr(SgExpression* operand_expr);
  320579             : 
  320580             : 
  320581             :      public: 
  320582             :          virtual ~SgNoexceptOp();
  320583             : 
  320584             : 
  320585             :      public: 
  320586             :          SgNoexceptOp(Sg_File_Info* startOfConstruct , SgExpression* operand_expr = NULL); 
  320587             :          SgNoexceptOp(SgExpression* operand_expr); 
  320588             : 
  320589             :     protected:
  320590             : // Start of memberFunctionString
  320591             : SgExpression* p_operand_expr;
  320592             :           
  320593             : // End of memberFunctionString
  320594             : 
  320595             :     friend struct Rose::Traits::generated::describe_node_t<SgNoexceptOp>;
  320596             :     friend struct Rose::Traits::generated::describe_field_t<SgNoexceptOp, SgExpression*,&SgNoexceptOp::p_operand_expr>;
  320597             : 
  320598             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320599             : 
  320600             : 
  320601             :    };
  320602             : #endif
  320603             : 
  320604             : // postdeclarations for SgNoexceptOp
  320605             : 
  320606             : /* #line 320607 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320607             : 
  320608             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  320609             : 
  320610             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320611             : 
  320612             : 
  320613             : /* #line 320614 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320614             : 
  320615             : 
  320616             : 
  320617             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320618             : 
  320619             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  320620             : //      This code is automatically generated for each 
  320621             : //      terminal and non-terminal within the defined 
  320622             : //      grammar.  There is a simple way to change the 
  320623             : //      code to fix bugs etc.  See the ROSE README file
  320624             : //      for directions.
  320625             : 
  320626             : // tps: (02/22/2010): Adding DLL export requirements
  320627             : #include "rosedll.h"
  320628             : 
  320629             : // predeclarations for SgNonrealRefExp
  320630             : 
  320631             : /* #line 320632 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320632             : 
  320633             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  320634             : 
  320635             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  320636             : 
  320637             : #if 1
  320638             : // Class Definition for SgNonrealRefExp
  320639             : class ROSE_DLL_API SgNonrealRefExp  : public SgExpression
  320640             :    {
  320641             :      public:
  320642             : 
  320643             : 
  320644             : /* #line 320645 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  320645             : 
  320646             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  320647             : // Start of memberFunctionString
  320648             : /* #line 330 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  320649             : 
  320650             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  320651             :           virtual unsigned int cfgIndexForEnd() const override;
  320652             :           virtual std::vector<VirtualCFG::CFGEdge> cfgOutEdges(unsigned int index) override;
  320653             :           virtual std::vector<VirtualCFG::CFGEdge> cfgInEdges(unsigned int index) override;
  320654             : #endif
  320655             : 
  320656             :           int get_name_qualification_length() const override;
  320657             :           void set_name_qualification_length(int name_qualification_length) override;
  320658             : 
  320659             :           bool get_type_elaboration_required() const override;
  320660             :           void set_type_elaboration_required(bool type_elaboration_required) override;
  320661             : 
  320662             :           bool get_global_qualification_required() const override;
  320663             :           void set_global_qualification_required(bool global_qualification_required) override;
  320664             : 
  320665             : 
  320666             : // End of memberFunctionString
  320667             : // Start of memberFunctionString
  320668             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  320669             : 
  320670             : // *** COMMON CODE SECTION BEGINS HERE ***
  320671             : 
  320672             :     public:
  320673             : 
  320674             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  320675             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  320676             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  320677             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  320678             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  320679             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  320680             : 
  320681             :       /*! \brief returns a string representing the class name */
  320682             :           virtual std::string class_name() const override;
  320683             : 
  320684             :       /*! \brief returns new style SageIII enum values */
  320685             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  320686             : 
  320687             :       /*! \brief static variant value */
  320688             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  320689             :        // static const VariantT static_variant = V_SgNonrealRefExp;
  320690             :           enum { static_variant = V_SgNonrealRefExp };
  320691             : 
  320692             :        /* the generated cast function */
  320693             :       /*! \brief Casts pointer from base class to derived class */
  320694             :           ROSE_DLL_API friend       SgNonrealRefExp* isSgNonrealRefExp(       SgNode * s );
  320695             : 
  320696             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  320697             :           ROSE_DLL_API friend const SgNonrealRefExp* isSgNonrealRefExp( const SgNode * s );
  320698             : 
  320699             :      // ******************************************
  320700             :      // * Memory Pool / New / Delete
  320701             :      // ******************************************
  320702             : 
  320703             :      public:
  320704             :           /// \private
  320705             :           static const unsigned pool_size; //
  320706             :           /// \private
  320707             :           static std::vector<unsigned char *> pools; //
  320708             :           /// \private
  320709             :           static SgNonrealRefExp * next_node; // 
  320710             : 
  320711             :           /// \private
  320712             :           static unsigned long initializeStorageClassArray(SgNonrealRefExpStorageClass *); //
  320713             : 
  320714             :           /// \private
  320715             :           static void clearMemoryPool(); //
  320716             :           static void deleteMemoryPool(); //
  320717             : 
  320718             :           /// \private
  320719             :           static void extendMemoryPoolForFileIO(); //
  320720             : 
  320721             :           /// \private
  320722             :           static SgNonrealRefExp * getPointerFromGlobalIndex(unsigned long); //
  320723             :           /// \private
  320724             :           static SgNonrealRefExp * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  320725             : 
  320726             :           /// \private
  320727             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  320728             :           /// \private
  320729             :           static void resetValidFreepointers(); //
  320730             :           /// \private
  320731             :           static unsigned long getNumberOfLastValidPointer(); //
  320732             : 
  320733             : 
  320734             : #if defined(INLINE_FUNCTIONS)
  320735             :       /*! \brief returns pointer to newly allocated IR node */
  320736             :           inline void *operator new (size_t size);
  320737             : #else
  320738             :       /*! \brief returns pointer to newly allocated IR node */
  320739             :           void *operator new (size_t size);
  320740             : #endif
  320741             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  320742             :           void operator delete (void* pointer, size_t size);
  320743             : 
  320744             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  320745        3584 :           void operator delete (void* pointer)
  320746             :              {
  320747             :             // This is the generated delete operator...
  320748        3584 :                SgNonrealRefExp::operator delete (pointer,sizeof(SgNonrealRefExp));
  320749             :              }
  320750             : 
  320751             :       /*! \brief Returns the total number of IR nodes of this type */
  320752             :           static size_t numberOfNodes();
  320753             : 
  320754             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  320755             :           static size_t memoryUsage();
  320756             : 
  320757             :       // End of scope which started in IR nodes specific code 
  320758             :       /* */
  320759             : 
  320760             :       /* name Internal Functions
  320761             :           \brief Internal functions ... incomplete-documentation
  320762             : 
  320763             :           These functions have been made public as part of the design, but they are suggested for internal use 
  320764             :           or by particularly knowledgeable users for specialized tools or applications.
  320765             : 
  320766             :           \internal We could not make these private because they are required by user for special purposes. And 
  320767             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  320768             :          
  320769             :        */
  320770             : 
  320771             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  320772             :        // overridden in every class by *generated* implementation
  320773             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  320774             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  320775             :        // MS: 06/28/02 container of names of variables or container indices 
  320776             :        // used used in the traversal to access AST successor nodes
  320777             :        // overridden in every class by *generated* implementation
  320778             :       /*! \brief container of names of variables or container indices used used in the traversal
  320779             :           to access AST successor nodes overridden in every class by *generated* implementation */
  320780             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  320781             : 
  320782             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  320783             :        // than all the vector copies. The implementation for these functions is generated for each class.
  320784             :       /*! \brief return number of children in the traversal successor list */
  320785             :           virtual size_t get_numberOfTraversalSuccessors() override;
  320786             :       /*! \brief index-based access to traversal successors by index number */
  320787             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  320788             :       /*! \brief index-based access to traversal successors by child node */
  320789             :           virtual size_t get_childIndex(SgNode *child) override;
  320790             : 
  320791             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  320792             :        // MS: 08/16/2002 method for generating RTI information
  320793             :       /*! \brief return C++ Runtime-Time-Information */
  320794             :           virtual RTIReturnType roseRTI() override;
  320795             : #endif
  320796             :       /* */
  320797             : 
  320798             : 
  320799             : 
  320800             :       /* name Deprecated Functions
  320801             :           \brief Deprecated functions ... incomplete-documentation
  320802             : 
  320803             :           These functions have been deprecated from use.
  320804             :        */
  320805             :       /* */
  320806             : 
  320807             :       /*! returns a C style string (char*) representing the class name */
  320808             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  320809             : 
  320810             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  320811             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  320812             : #if 0
  320813             :       /*! returns old style Sage II enum values */
  320814             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  320815             :       /*! returns old style Sage II enum values */
  320816             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  320817             : #endif
  320818             :       /* */
  320819             : 
  320820             : 
  320821             : 
  320822             : 
  320823             :      public:
  320824             :       /* name Traversal Support Functions
  320825             :           \brief Traversal support functions ... incomplete-documentation
  320826             : 
  320827             :           These functions have been made public as part of the design, but they are suggested for internal use 
  320828             :           or by particularly knowledgable users for specialized tools or applications.
  320829             :        */
  320830             :       /* */
  320831             : 
  320832             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  320833             :        // (inferior to ROSE traversal mechanism, experimental).
  320834             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  320835             :        */
  320836             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  320837             : 
  320838             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  320839             :       /*! \brief support for the classic visitor pattern done in GoF */
  320840             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  320841             : 
  320842             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  320843             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  320844             :        */
  320845             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  320846             : 
  320847             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  320848             :        */
  320849             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  320850             : 
  320851             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  320852             :        // This traversal helps support internal tools that call static member functions.
  320853             :        // note: this function operates on the memory pools.
  320854             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  320855             :        */
  320856             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  320857             :       /* */
  320858             : 
  320859             : 
  320860             :      public:
  320861             :       /* name Memory Allocation Functions
  320862             :           \brief Memory allocations functions ... incomplete-documentation
  320863             : 
  320864             :           These functions have been made public as part of the design, but they are suggested for internal use 
  320865             :           or by particularly knowledgable users for specialized tools or applications.
  320866             :        */
  320867             :       /* */
  320868             : 
  320869             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  320870             : 
  320871             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  320872             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  320873             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  320874             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  320875             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  320876             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  320877             :           being used with the AST File I/O mechanism.
  320878             :        */
  320879             :           virtual bool isInMemoryPool() override;
  320880             : 
  320881             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  320882             : 
  320883             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  320884             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  320885             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  320886             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  320887             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  320888             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  320889             :           being used with the AST File I/O mechanism.
  320890             :        */
  320891             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  320892             : 
  320893             :       // DQ (4/30/2006): Modified to be a const function.
  320894             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  320895             : 
  320896             :           This functions is part of general support for many possible tools to operate 
  320897             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  320898             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  320899             :           less than the set of pointers used by the AST file I/O. This is part of
  320900             :           work implemented by Andreas, and support tools such as the AST graph generation.
  320901             : 
  320902             :           \warning This function can return unexpected data members and thus the 
  320903             :                    order and the number of elements is unpredicable and subject 
  320904             :                    to change.
  320905             : 
  320906             :           \returns STL vector of pairs of SgNode* and strings
  320907             :        */
  320908             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  320909             : 
  320910             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  320911             : 
  320912             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  320913             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  320914             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  320915             : 
  320916             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  320917             :                    and subject to change.
  320918             :        */
  320919             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  320920             : 
  320921             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  320922             : 
  320923             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  320924             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  320925             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  320926             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  320927             : 
  320928             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  320929             : 
  320930             :           \returns long
  320931             :        */
  320932             :           virtual long getChildIndex( SgNode* childNode ) const override;
  320933             : 
  320934             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  320935             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  320936             :       /* \brief Constructor for use by AST File I/O Mechanism
  320937             : 
  320938             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  320939             :           which obtained via fast binary file I/O from disk.
  320940             :        */
  320941             :        // SgNonrealRefExp( SgNonrealRefExpStorageClass& source );
  320942             : 
  320943             : 
  320944             : 
  320945             : 
  320946             : 
  320947             :  // JH (10/24/2005): methods added to support the ast file IO
  320948             :     private:
  320949             : 
  320950             :       /* name AST Memory Allocation Support Functions
  320951             :           \brief Memory allocations support....
  320952             : 
  320953             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  320954             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  320955             :           and support the AST File I/O Mechanism.
  320956             :        */
  320957             :       /* */
  320958             : 
  320959             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  320960             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  320961             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  320962             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  320963             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  320964             :           a correspinding one in the AST_FILE_IO class!
  320965             :        */
  320966             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  320967             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  320968             :       /* \brief Typedef used for low level memory access.
  320969             :        */
  320970             :        // typedef unsigned char* TestType;
  320971             : 
  320972             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  320973             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  320974             :       /* \brief Typedef used to hold memory addresses as values.
  320975             :        */
  320976             :        // typedef unsigned long  AddressType;
  320977             : 
  320978             : 
  320979             : 
  320980             :        // necessary, to have direct access to the p_freepointer and the private methods !
  320981             :       /*! \brief friend class declaration to support AST File I/O */
  320982             :           friend class AST_FILE_IO;
  320983             : 
  320984             :       /*! \brief friend class declaration to support AST File I/O */
  320985             :           friend class SgNonrealRefExpStorageClass;
  320986             : 
  320987             :       /*! \brief friend class declaration to support AST File I/O */
  320988             :           friend class AstSpecificDataManagingClass;
  320989             : 
  320990             :       /*! \brief friend class declaration to support AST File I/O */
  320991             :           friend class AstSpecificDataManagingClassStorageClass;
  320992             :     public:
  320993             :       /*! \brief IR node constructor to support AST File I/O */
  320994             :           SgNonrealRefExp( const SgNonrealRefExpStorageClass& source );
  320995             : 
  320996             :  // private: // JJW hack
  320997             :        /*
  320998             :           name AST Memory Allocation Support Variables
  320999             :           Memory allocations support variables 
  321000             : 
  321001             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  321002             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  321003             :           and support the AST File I/O Mechanism.
  321004             :        */
  321005             :       /* */
  321006             : 
  321007             :     public:
  321008             : 
  321009             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  321010             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  321011             :       // virtual SgNode* addRegExpAttribute();
  321012             :       /*! \brief Support for AST matching using regular expression.
  321013             : 
  321014             :           This support is incomplete and the subject of current research to define 
  321015             :           RegEx trees to support inexact matching.
  321016             :        */
  321017             :           SgNonrealRefExp* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  321018             : 
  321019             : // *** COMMON CODE SECTION ENDS HERE ***
  321020             : 
  321021             : 
  321022             : // End of memberFunctionString
  321023             : // Start of memberFunctionString
  321024             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  321025             : 
  321026             :      // the generated cast function
  321027             :      // friend ROSE_DLL_API SgNonrealRefExp* isSgNonrealRefExp ( SgNode* s );
  321028             : 
  321029             :           typedef SgExpression base_node_type;
  321030             : 
  321031             : 
  321032             : // End of memberFunctionString
  321033             : // Start of memberFunctionString
  321034             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321035             : 
  321036             :           SgType* get_type() const override;
  321037             : 
  321038             : 
  321039             : // End of memberFunctionString
  321040             : // Start of memberFunctionString
  321041             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321042             : 
  321043             :           void post_construction_initialization() override;
  321044             : 
  321045             : 
  321046             : // End of memberFunctionString
  321047             : 
  321048             :      public: 
  321049             :          SgNonrealSymbol* get_symbol() const;
  321050             :          void set_symbol(SgNonrealSymbol* symbol);
  321051             : 
  321052             : 
  321053             : 
  321054             : 
  321055             : 
  321056             :      public: 
  321057             :          virtual ~SgNonrealRefExp();
  321058             : 
  321059             : 
  321060             :      public: 
  321061             :          SgNonrealRefExp(Sg_File_Info* startOfConstruct , SgNonrealSymbol* symbol = NULL); 
  321062             :          SgNonrealRefExp(SgNonrealSymbol* symbol); 
  321063             : 
  321064             :     protected:
  321065             : // Start of memberFunctionString
  321066             : SgNonrealSymbol* p_symbol;
  321067             :           
  321068             : // End of memberFunctionString
  321069             : // Start of memberFunctionString
  321070             : int p_name_qualification_length;
  321071             :           
  321072             : // End of memberFunctionString
  321073             : // Start of memberFunctionString
  321074             : bool p_type_elaboration_required;
  321075             :           
  321076             : // End of memberFunctionString
  321077             : // Start of memberFunctionString
  321078             : bool p_global_qualification_required;
  321079             :           
  321080             : // End of memberFunctionString
  321081             : 
  321082             :     friend struct Rose::Traits::generated::describe_node_t<SgNonrealRefExp>;
  321083             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealRefExp, SgNonrealSymbol*,&SgNonrealRefExp::p_symbol>;
  321084             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealRefExp, int,&SgNonrealRefExp::p_name_qualification_length>;
  321085             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealRefExp, bool,&SgNonrealRefExp::p_type_elaboration_required>;
  321086             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealRefExp, bool,&SgNonrealRefExp::p_global_qualification_required>;
  321087             : 
  321088             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321089             : 
  321090             : 
  321091             :    };
  321092             : #endif
  321093             : 
  321094             : // postdeclarations for SgNonrealRefExp
  321095             : 
  321096             : /* #line 321097 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321097             : 
  321098             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  321099             : 
  321100             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321101             : 
  321102             : 
  321103             : /* #line 321104 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321104             : 
  321105             : 
  321106             : 
  321107             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321108             : 
  321109             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  321110             : //      This code is automatically generated for each 
  321111             : //      terminal and non-terminal within the defined 
  321112             : //      grammar.  There is a simple way to change the 
  321113             : //      code to fix bugs etc.  See the ROSE README file
  321114             : //      for directions.
  321115             : 
  321116             : // tps: (02/22/2010): Adding DLL export requirements
  321117             : #include "rosedll.h"
  321118             : 
  321119             : // predeclarations for SgFoldExpression
  321120             : 
  321121             : /* #line 321122 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321122             : 
  321123             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  321124             : 
  321125             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321126             : 
  321127             : #if 1
  321128             : // Class Definition for SgFoldExpression
  321129             : class ROSE_DLL_API SgFoldExpression  : public SgExpression
  321130             :    {
  321131             :      public:
  321132             : 
  321133             : 
  321134             : /* #line 321135 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321135             : 
  321136             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  321137             : // Start of memberFunctionString
  321138             : /* #line 719 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321139             : 
  321140             : 
  321141             : 
  321142             : // End of memberFunctionString
  321143             : // Start of memberFunctionString
  321144             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  321145             : 
  321146             : // *** COMMON CODE SECTION BEGINS HERE ***
  321147             : 
  321148             :     public:
  321149             : 
  321150             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  321151             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  321152             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  321153             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  321154             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  321155             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  321156             : 
  321157             :       /*! \brief returns a string representing the class name */
  321158             :           virtual std::string class_name() const override;
  321159             : 
  321160             :       /*! \brief returns new style SageIII enum values */
  321161             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  321162             : 
  321163             :       /*! \brief static variant value */
  321164             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  321165             :        // static const VariantT static_variant = V_SgFoldExpression;
  321166             :           enum { static_variant = V_SgFoldExpression };
  321167             : 
  321168             :        /* the generated cast function */
  321169             :       /*! \brief Casts pointer from base class to derived class */
  321170             :           ROSE_DLL_API friend       SgFoldExpression* isSgFoldExpression(       SgNode * s );
  321171             : 
  321172             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  321173             :           ROSE_DLL_API friend const SgFoldExpression* isSgFoldExpression( const SgNode * s );
  321174             : 
  321175             :      // ******************************************
  321176             :      // * Memory Pool / New / Delete
  321177             :      // ******************************************
  321178             : 
  321179             :      public:
  321180             :           /// \private
  321181             :           static const unsigned pool_size; //
  321182             :           /// \private
  321183             :           static std::vector<unsigned char *> pools; //
  321184             :           /// \private
  321185             :           static SgFoldExpression * next_node; // 
  321186             : 
  321187             :           /// \private
  321188             :           static unsigned long initializeStorageClassArray(SgFoldExpressionStorageClass *); //
  321189             : 
  321190             :           /// \private
  321191             :           static void clearMemoryPool(); //
  321192             :           static void deleteMemoryPool(); //
  321193             : 
  321194             :           /// \private
  321195             :           static void extendMemoryPoolForFileIO(); //
  321196             : 
  321197             :           /// \private
  321198             :           static SgFoldExpression * getPointerFromGlobalIndex(unsigned long); //
  321199             :           /// \private
  321200             :           static SgFoldExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  321201             : 
  321202             :           /// \private
  321203             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  321204             :           /// \private
  321205             :           static void resetValidFreepointers(); //
  321206             :           /// \private
  321207             :           static unsigned long getNumberOfLastValidPointer(); //
  321208             : 
  321209             : 
  321210             : #if defined(INLINE_FUNCTIONS)
  321211             :       /*! \brief returns pointer to newly allocated IR node */
  321212             :           inline void *operator new (size_t size);
  321213             : #else
  321214             :       /*! \brief returns pointer to newly allocated IR node */
  321215             :           void *operator new (size_t size);
  321216             : #endif
  321217             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  321218             :           void operator delete (void* pointer, size_t size);
  321219             : 
  321220             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  321221           0 :           void operator delete (void* pointer)
  321222             :              {
  321223             :             // This is the generated delete operator...
  321224           0 :                SgFoldExpression::operator delete (pointer,sizeof(SgFoldExpression));
  321225             :              }
  321226             : 
  321227             :       /*! \brief Returns the total number of IR nodes of this type */
  321228             :           static size_t numberOfNodes();
  321229             : 
  321230             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  321231             :           static size_t memoryUsage();
  321232             : 
  321233             :       // End of scope which started in IR nodes specific code 
  321234             :       /* */
  321235             : 
  321236             :       /* name Internal Functions
  321237             :           \brief Internal functions ... incomplete-documentation
  321238             : 
  321239             :           These functions have been made public as part of the design, but they are suggested for internal use 
  321240             :           or by particularly knowledgeable users for specialized tools or applications.
  321241             : 
  321242             :           \internal We could not make these private because they are required by user for special purposes. And 
  321243             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  321244             :          
  321245             :        */
  321246             : 
  321247             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  321248             :        // overridden in every class by *generated* implementation
  321249             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  321250             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  321251             :        // MS: 06/28/02 container of names of variables or container indices 
  321252             :        // used used in the traversal to access AST successor nodes
  321253             :        // overridden in every class by *generated* implementation
  321254             :       /*! \brief container of names of variables or container indices used used in the traversal
  321255             :           to access AST successor nodes overridden in every class by *generated* implementation */
  321256             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  321257             : 
  321258             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  321259             :        // than all the vector copies. The implementation for these functions is generated for each class.
  321260             :       /*! \brief return number of children in the traversal successor list */
  321261             :           virtual size_t get_numberOfTraversalSuccessors() override;
  321262             :       /*! \brief index-based access to traversal successors by index number */
  321263             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  321264             :       /*! \brief index-based access to traversal successors by child node */
  321265             :           virtual size_t get_childIndex(SgNode *child) override;
  321266             : 
  321267             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  321268             :        // MS: 08/16/2002 method for generating RTI information
  321269             :       /*! \brief return C++ Runtime-Time-Information */
  321270             :           virtual RTIReturnType roseRTI() override;
  321271             : #endif
  321272             :       /* */
  321273             : 
  321274             : 
  321275             : 
  321276             :       /* name Deprecated Functions
  321277             :           \brief Deprecated functions ... incomplete-documentation
  321278             : 
  321279             :           These functions have been deprecated from use.
  321280             :        */
  321281             :       /* */
  321282             : 
  321283             :       /*! returns a C style string (char*) representing the class name */
  321284             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  321285             : 
  321286             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  321287             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  321288             : #if 0
  321289             :       /*! returns old style Sage II enum values */
  321290             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  321291             :       /*! returns old style Sage II enum values */
  321292             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  321293             : #endif
  321294             :       /* */
  321295             : 
  321296             : 
  321297             : 
  321298             : 
  321299             :      public:
  321300             :       /* name Traversal Support Functions
  321301             :           \brief Traversal support functions ... incomplete-documentation
  321302             : 
  321303             :           These functions have been made public as part of the design, but they are suggested for internal use 
  321304             :           or by particularly knowledgable users for specialized tools or applications.
  321305             :        */
  321306             :       /* */
  321307             : 
  321308             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  321309             :        // (inferior to ROSE traversal mechanism, experimental).
  321310             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  321311             :        */
  321312             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  321313             : 
  321314             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  321315             :       /*! \brief support for the classic visitor pattern done in GoF */
  321316             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  321317             : 
  321318             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  321319             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  321320             :        */
  321321             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  321322             : 
  321323             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  321324             :        */
  321325             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  321326             : 
  321327             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  321328             :        // This traversal helps support internal tools that call static member functions.
  321329             :        // note: this function operates on the memory pools.
  321330             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  321331             :        */
  321332             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  321333             :       /* */
  321334             : 
  321335             : 
  321336             :      public:
  321337             :       /* name Memory Allocation Functions
  321338             :           \brief Memory allocations functions ... incomplete-documentation
  321339             : 
  321340             :           These functions have been made public as part of the design, but they are suggested for internal use 
  321341             :           or by particularly knowledgable users for specialized tools or applications.
  321342             :        */
  321343             :       /* */
  321344             : 
  321345             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  321346             : 
  321347             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  321348             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  321349             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  321350             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  321351             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  321352             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  321353             :           being used with the AST File I/O mechanism.
  321354             :        */
  321355             :           virtual bool isInMemoryPool() override;
  321356             : 
  321357             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  321358             : 
  321359             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  321360             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  321361             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  321362             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  321363             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  321364             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  321365             :           being used with the AST File I/O mechanism.
  321366             :        */
  321367             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  321368             : 
  321369             :       // DQ (4/30/2006): Modified to be a const function.
  321370             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  321371             : 
  321372             :           This functions is part of general support for many possible tools to operate 
  321373             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  321374             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  321375             :           less than the set of pointers used by the AST file I/O. This is part of
  321376             :           work implemented by Andreas, and support tools such as the AST graph generation.
  321377             : 
  321378             :           \warning This function can return unexpected data members and thus the 
  321379             :                    order and the number of elements is unpredicable and subject 
  321380             :                    to change.
  321381             : 
  321382             :           \returns STL vector of pairs of SgNode* and strings
  321383             :        */
  321384             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  321385             : 
  321386             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  321387             : 
  321388             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  321389             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  321390             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  321391             : 
  321392             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  321393             :                    and subject to change.
  321394             :        */
  321395             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  321396             : 
  321397             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  321398             : 
  321399             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  321400             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  321401             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  321402             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  321403             : 
  321404             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  321405             : 
  321406             :           \returns long
  321407             :        */
  321408             :           virtual long getChildIndex( SgNode* childNode ) const override;
  321409             : 
  321410             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  321411             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  321412             :       /* \brief Constructor for use by AST File I/O Mechanism
  321413             : 
  321414             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  321415             :           which obtained via fast binary file I/O from disk.
  321416             :        */
  321417             :        // SgFoldExpression( SgFoldExpressionStorageClass& source );
  321418             : 
  321419             : 
  321420             : 
  321421             : 
  321422             : 
  321423             :  // JH (10/24/2005): methods added to support the ast file IO
  321424             :     private:
  321425             : 
  321426             :       /* name AST Memory Allocation Support Functions
  321427             :           \brief Memory allocations support....
  321428             : 
  321429             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  321430             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  321431             :           and support the AST File I/O Mechanism.
  321432             :        */
  321433             :       /* */
  321434             : 
  321435             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  321436             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  321437             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  321438             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  321439             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  321440             :           a correspinding one in the AST_FILE_IO class!
  321441             :        */
  321442             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  321443             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  321444             :       /* \brief Typedef used for low level memory access.
  321445             :        */
  321446             :        // typedef unsigned char* TestType;
  321447             : 
  321448             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  321449             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  321450             :       /* \brief Typedef used to hold memory addresses as values.
  321451             :        */
  321452             :        // typedef unsigned long  AddressType;
  321453             : 
  321454             : 
  321455             : 
  321456             :        // necessary, to have direct access to the p_freepointer and the private methods !
  321457             :       /*! \brief friend class declaration to support AST File I/O */
  321458             :           friend class AST_FILE_IO;
  321459             : 
  321460             :       /*! \brief friend class declaration to support AST File I/O */
  321461             :           friend class SgFoldExpressionStorageClass;
  321462             : 
  321463             :       /*! \brief friend class declaration to support AST File I/O */
  321464             :           friend class AstSpecificDataManagingClass;
  321465             : 
  321466             :       /*! \brief friend class declaration to support AST File I/O */
  321467             :           friend class AstSpecificDataManagingClassStorageClass;
  321468             :     public:
  321469             :       /*! \brief IR node constructor to support AST File I/O */
  321470             :           SgFoldExpression( const SgFoldExpressionStorageClass& source );
  321471             : 
  321472             :  // private: // JJW hack
  321473             :        /*
  321474             :           name AST Memory Allocation Support Variables
  321475             :           Memory allocations support variables 
  321476             : 
  321477             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  321478             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  321479             :           and support the AST File I/O Mechanism.
  321480             :        */
  321481             :       /* */
  321482             : 
  321483             :     public:
  321484             : 
  321485             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  321486             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  321487             :       // virtual SgNode* addRegExpAttribute();
  321488             :       /*! \brief Support for AST matching using regular expression.
  321489             : 
  321490             :           This support is incomplete and the subject of current research to define 
  321491             :           RegEx trees to support inexact matching.
  321492             :        */
  321493             :           SgFoldExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  321494             : 
  321495             : // *** COMMON CODE SECTION ENDS HERE ***
  321496             : 
  321497             : 
  321498             : // End of memberFunctionString
  321499             : // Start of memberFunctionString
  321500             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  321501             : 
  321502             :      // the generated cast function
  321503             :      // friend ROSE_DLL_API SgFoldExpression* isSgFoldExpression ( SgNode* s );
  321504             : 
  321505             :           typedef SgExpression base_node_type;
  321506             : 
  321507             : 
  321508             : // End of memberFunctionString
  321509             : // Start of memberFunctionString
  321510             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321511             : 
  321512             :           SgType* get_type() const override;
  321513             : 
  321514             : 
  321515             : // End of memberFunctionString
  321516             : // Start of memberFunctionString
  321517             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321518             : 
  321519             :           void post_construction_initialization() override;
  321520             : 
  321521             : 
  321522             : // End of memberFunctionString
  321523             : 
  321524             :      public: 
  321525             :          SgExpression* get_operands() const;
  321526             :          void set_operands(SgExpression* operands);
  321527             : 
  321528             :      public: 
  321529             :          std::string get_operator_token() const;
  321530             :          void set_operator_token(std::string operator_token);
  321531             : 
  321532             :      public: 
  321533             :          bool get_is_left_associative() const;
  321534             :          void set_is_left_associative(bool is_left_associative);
  321535             : 
  321536             : 
  321537             :      public: 
  321538             :          virtual ~SgFoldExpression();
  321539             : 
  321540             : 
  321541             :      public: 
  321542             :          SgFoldExpression(Sg_File_Info* startOfConstruct , SgExpression* operands = NULL, std::string operator_token = "", bool is_left_associative = false); 
  321543             :          SgFoldExpression(SgExpression* operands, std::string operator_token, bool is_left_associative); 
  321544             : 
  321545             :     protected:
  321546             : // Start of memberFunctionString
  321547             : SgExpression* p_operands;
  321548             :           
  321549             : // End of memberFunctionString
  321550             : // Start of memberFunctionString
  321551             : std::string p_operator_token;
  321552             :           
  321553             : // End of memberFunctionString
  321554             : // Start of memberFunctionString
  321555             : bool p_is_left_associative;
  321556             :           
  321557             : // End of memberFunctionString
  321558             : 
  321559             :     friend struct Rose::Traits::generated::describe_node_t<SgFoldExpression>;
  321560             :     friend struct Rose::Traits::generated::describe_field_t<SgFoldExpression, SgExpression*,&SgFoldExpression::p_operands>;
  321561             :     friend struct Rose::Traits::generated::describe_field_t<SgFoldExpression, std::string,&SgFoldExpression::p_operator_token>;
  321562             :     friend struct Rose::Traits::generated::describe_field_t<SgFoldExpression, bool,&SgFoldExpression::p_is_left_associative>;
  321563             : 
  321564             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321565             : 
  321566             : 
  321567             :    };
  321568             : #endif
  321569             : 
  321570             : // postdeclarations for SgFoldExpression
  321571             : 
  321572             : /* #line 321573 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321573             : 
  321574             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  321575             : 
  321576             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321577             : 
  321578             : 
  321579             : /* #line 321580 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321580             : 
  321581             : 
  321582             : 
  321583             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321584             : 
  321585             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  321586             : //      This code is automatically generated for each 
  321587             : //      terminal and non-terminal within the defined 
  321588             : //      grammar.  There is a simple way to change the 
  321589             : //      code to fix bugs etc.  See the ROSE README file
  321590             : //      for directions.
  321591             : 
  321592             : // tps: (02/22/2010): Adding DLL export requirements
  321593             : #include "rosedll.h"
  321594             : 
  321595             : // predeclarations for SgAwaitExpression
  321596             : 
  321597             : /* #line 321598 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321598             : 
  321599             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  321600             : 
  321601             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  321602             : 
  321603             : #if 1
  321604             : // Class Definition for SgAwaitExpression
  321605             : class ROSE_DLL_API SgAwaitExpression  : public SgExpression
  321606             :    {
  321607             :      public:
  321608             : 
  321609             : 
  321610             : /* #line 321611 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  321611             : 
  321612             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  321613             : // Start of memberFunctionString
  321614             : /* #line 715 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321615             : 
  321616             : 
  321617             : 
  321618             : // End of memberFunctionString
  321619             : // Start of memberFunctionString
  321620             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  321621             : 
  321622             : // *** COMMON CODE SECTION BEGINS HERE ***
  321623             : 
  321624             :     public:
  321625             : 
  321626             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  321627             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  321628             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  321629             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  321630             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  321631             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  321632             : 
  321633             :       /*! \brief returns a string representing the class name */
  321634             :           virtual std::string class_name() const override;
  321635             : 
  321636             :       /*! \brief returns new style SageIII enum values */
  321637             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  321638             : 
  321639             :       /*! \brief static variant value */
  321640             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  321641             :        // static const VariantT static_variant = V_SgAwaitExpression;
  321642             :           enum { static_variant = V_SgAwaitExpression };
  321643             : 
  321644             :        /* the generated cast function */
  321645             :       /*! \brief Casts pointer from base class to derived class */
  321646             :           ROSE_DLL_API friend       SgAwaitExpression* isSgAwaitExpression(       SgNode * s );
  321647             : 
  321648             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  321649             :           ROSE_DLL_API friend const SgAwaitExpression* isSgAwaitExpression( const SgNode * s );
  321650             : 
  321651             :      // ******************************************
  321652             :      // * Memory Pool / New / Delete
  321653             :      // ******************************************
  321654             : 
  321655             :      public:
  321656             :           /// \private
  321657             :           static const unsigned pool_size; //
  321658             :           /// \private
  321659             :           static std::vector<unsigned char *> pools; //
  321660             :           /// \private
  321661             :           static SgAwaitExpression * next_node; // 
  321662             : 
  321663             :           /// \private
  321664             :           static unsigned long initializeStorageClassArray(SgAwaitExpressionStorageClass *); //
  321665             : 
  321666             :           /// \private
  321667             :           static void clearMemoryPool(); //
  321668             :           static void deleteMemoryPool(); //
  321669             : 
  321670             :           /// \private
  321671             :           static void extendMemoryPoolForFileIO(); //
  321672             : 
  321673             :           /// \private
  321674             :           static SgAwaitExpression * getPointerFromGlobalIndex(unsigned long); //
  321675             :           /// \private
  321676             :           static SgAwaitExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  321677             : 
  321678             :           /// \private
  321679             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  321680             :           /// \private
  321681             :           static void resetValidFreepointers(); //
  321682             :           /// \private
  321683             :           static unsigned long getNumberOfLastValidPointer(); //
  321684             : 
  321685             : 
  321686             : #if defined(INLINE_FUNCTIONS)
  321687             :       /*! \brief returns pointer to newly allocated IR node */
  321688             :           inline void *operator new (size_t size);
  321689             : #else
  321690             :       /*! \brief returns pointer to newly allocated IR node */
  321691             :           void *operator new (size_t size);
  321692             : #endif
  321693             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  321694             :           void operator delete (void* pointer, size_t size);
  321695             : 
  321696             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  321697           0 :           void operator delete (void* pointer)
  321698             :              {
  321699             :             // This is the generated delete operator...
  321700           0 :                SgAwaitExpression::operator delete (pointer,sizeof(SgAwaitExpression));
  321701             :              }
  321702             : 
  321703             :       /*! \brief Returns the total number of IR nodes of this type */
  321704             :           static size_t numberOfNodes();
  321705             : 
  321706             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  321707             :           static size_t memoryUsage();
  321708             : 
  321709             :       // End of scope which started in IR nodes specific code 
  321710             :       /* */
  321711             : 
  321712             :       /* name Internal Functions
  321713             :           \brief Internal functions ... incomplete-documentation
  321714             : 
  321715             :           These functions have been made public as part of the design, but they are suggested for internal use 
  321716             :           or by particularly knowledgeable users for specialized tools or applications.
  321717             : 
  321718             :           \internal We could not make these private because they are required by user for special purposes. And 
  321719             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  321720             :          
  321721             :        */
  321722             : 
  321723             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  321724             :        // overridden in every class by *generated* implementation
  321725             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  321726             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  321727             :        // MS: 06/28/02 container of names of variables or container indices 
  321728             :        // used used in the traversal to access AST successor nodes
  321729             :        // overridden in every class by *generated* implementation
  321730             :       /*! \brief container of names of variables or container indices used used in the traversal
  321731             :           to access AST successor nodes overridden in every class by *generated* implementation */
  321732             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  321733             : 
  321734             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  321735             :        // than all the vector copies. The implementation for these functions is generated for each class.
  321736             :       /*! \brief return number of children in the traversal successor list */
  321737             :           virtual size_t get_numberOfTraversalSuccessors() override;
  321738             :       /*! \brief index-based access to traversal successors by index number */
  321739             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  321740             :       /*! \brief index-based access to traversal successors by child node */
  321741             :           virtual size_t get_childIndex(SgNode *child) override;
  321742             : 
  321743             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  321744             :        // MS: 08/16/2002 method for generating RTI information
  321745             :       /*! \brief return C++ Runtime-Time-Information */
  321746             :           virtual RTIReturnType roseRTI() override;
  321747             : #endif
  321748             :       /* */
  321749             : 
  321750             : 
  321751             : 
  321752             :       /* name Deprecated Functions
  321753             :           \brief Deprecated functions ... incomplete-documentation
  321754             : 
  321755             :           These functions have been deprecated from use.
  321756             :        */
  321757             :       /* */
  321758             : 
  321759             :       /*! returns a C style string (char*) representing the class name */
  321760             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  321761             : 
  321762             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  321763             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  321764             : #if 0
  321765             :       /*! returns old style Sage II enum values */
  321766             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  321767             :       /*! returns old style Sage II enum values */
  321768             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  321769             : #endif
  321770             :       /* */
  321771             : 
  321772             : 
  321773             : 
  321774             : 
  321775             :      public:
  321776             :       /* name Traversal Support Functions
  321777             :           \brief Traversal support functions ... incomplete-documentation
  321778             : 
  321779             :           These functions have been made public as part of the design, but they are suggested for internal use 
  321780             :           or by particularly knowledgable users for specialized tools or applications.
  321781             :        */
  321782             :       /* */
  321783             : 
  321784             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  321785             :        // (inferior to ROSE traversal mechanism, experimental).
  321786             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  321787             :        */
  321788             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  321789             : 
  321790             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  321791             :       /*! \brief support for the classic visitor pattern done in GoF */
  321792             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  321793             : 
  321794             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  321795             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  321796             :        */
  321797             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  321798             : 
  321799             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  321800             :        */
  321801             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  321802             : 
  321803             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  321804             :        // This traversal helps support internal tools that call static member functions.
  321805             :        // note: this function operates on the memory pools.
  321806             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  321807             :        */
  321808             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  321809             :       /* */
  321810             : 
  321811             : 
  321812             :      public:
  321813             :       /* name Memory Allocation Functions
  321814             :           \brief Memory allocations functions ... incomplete-documentation
  321815             : 
  321816             :           These functions have been made public as part of the design, but they are suggested for internal use 
  321817             :           or by particularly knowledgable users for specialized tools or applications.
  321818             :        */
  321819             :       /* */
  321820             : 
  321821             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  321822             : 
  321823             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  321824             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  321825             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  321826             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  321827             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  321828             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  321829             :           being used with the AST File I/O mechanism.
  321830             :        */
  321831             :           virtual bool isInMemoryPool() override;
  321832             : 
  321833             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  321834             : 
  321835             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  321836             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  321837             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  321838             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  321839             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  321840             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  321841             :           being used with the AST File I/O mechanism.
  321842             :        */
  321843             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  321844             : 
  321845             :       // DQ (4/30/2006): Modified to be a const function.
  321846             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  321847             : 
  321848             :           This functions is part of general support for many possible tools to operate 
  321849             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  321850             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  321851             :           less than the set of pointers used by the AST file I/O. This is part of
  321852             :           work implemented by Andreas, and support tools such as the AST graph generation.
  321853             : 
  321854             :           \warning This function can return unexpected data members and thus the 
  321855             :                    order and the number of elements is unpredicable and subject 
  321856             :                    to change.
  321857             : 
  321858             :           \returns STL vector of pairs of SgNode* and strings
  321859             :        */
  321860             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  321861             : 
  321862             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  321863             : 
  321864             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  321865             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  321866             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  321867             : 
  321868             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  321869             :                    and subject to change.
  321870             :        */
  321871             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  321872             : 
  321873             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  321874             : 
  321875             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  321876             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  321877             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  321878             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  321879             : 
  321880             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  321881             : 
  321882             :           \returns long
  321883             :        */
  321884             :           virtual long getChildIndex( SgNode* childNode ) const override;
  321885             : 
  321886             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  321887             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  321888             :       /* \brief Constructor for use by AST File I/O Mechanism
  321889             : 
  321890             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  321891             :           which obtained via fast binary file I/O from disk.
  321892             :        */
  321893             :        // SgAwaitExpression( SgAwaitExpressionStorageClass& source );
  321894             : 
  321895             : 
  321896             : 
  321897             : 
  321898             : 
  321899             :  // JH (10/24/2005): methods added to support the ast file IO
  321900             :     private:
  321901             : 
  321902             :       /* name AST Memory Allocation Support Functions
  321903             :           \brief Memory allocations support....
  321904             : 
  321905             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  321906             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  321907             :           and support the AST File I/O Mechanism.
  321908             :        */
  321909             :       /* */
  321910             : 
  321911             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  321912             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  321913             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  321914             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  321915             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  321916             :           a correspinding one in the AST_FILE_IO class!
  321917             :        */
  321918             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  321919             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  321920             :       /* \brief Typedef used for low level memory access.
  321921             :        */
  321922             :        // typedef unsigned char* TestType;
  321923             : 
  321924             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  321925             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  321926             :       /* \brief Typedef used to hold memory addresses as values.
  321927             :        */
  321928             :        // typedef unsigned long  AddressType;
  321929             : 
  321930             : 
  321931             : 
  321932             :        // necessary, to have direct access to the p_freepointer and the private methods !
  321933             :       /*! \brief friend class declaration to support AST File I/O */
  321934             :           friend class AST_FILE_IO;
  321935             : 
  321936             :       /*! \brief friend class declaration to support AST File I/O */
  321937             :           friend class SgAwaitExpressionStorageClass;
  321938             : 
  321939             :       /*! \brief friend class declaration to support AST File I/O */
  321940             :           friend class AstSpecificDataManagingClass;
  321941             : 
  321942             :       /*! \brief friend class declaration to support AST File I/O */
  321943             :           friend class AstSpecificDataManagingClassStorageClass;
  321944             :     public:
  321945             :       /*! \brief IR node constructor to support AST File I/O */
  321946             :           SgAwaitExpression( const SgAwaitExpressionStorageClass& source );
  321947             : 
  321948             :  // private: // JJW hack
  321949             :        /*
  321950             :           name AST Memory Allocation Support Variables
  321951             :           Memory allocations support variables 
  321952             : 
  321953             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  321954             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  321955             :           and support the AST File I/O Mechanism.
  321956             :        */
  321957             :       /* */
  321958             : 
  321959             :     public:
  321960             : 
  321961             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  321962             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  321963             :       // virtual SgNode* addRegExpAttribute();
  321964             :       /*! \brief Support for AST matching using regular expression.
  321965             : 
  321966             :           This support is incomplete and the subject of current research to define 
  321967             :           RegEx trees to support inexact matching.
  321968             :        */
  321969             :           SgAwaitExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  321970             : 
  321971             : // *** COMMON CODE SECTION ENDS HERE ***
  321972             : 
  321973             : 
  321974             : // End of memberFunctionString
  321975             : // Start of memberFunctionString
  321976             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  321977             : 
  321978             :      // the generated cast function
  321979             :      // friend ROSE_DLL_API SgAwaitExpression* isSgAwaitExpression ( SgNode* s );
  321980             : 
  321981             :           typedef SgExpression base_node_type;
  321982             : 
  321983             : 
  321984             : // End of memberFunctionString
  321985             : // Start of memberFunctionString
  321986             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321987             : 
  321988             :           SgType* get_type() const override;
  321989             : 
  321990             : 
  321991             : // End of memberFunctionString
  321992             : // Start of memberFunctionString
  321993             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  321994             : 
  321995             :           void post_construction_initialization() override;
  321996             : 
  321997             : 
  321998             : // End of memberFunctionString
  321999             : 
  322000             :      public: 
  322001             :          SgExpression* get_value() const;
  322002             :          void set_value(SgExpression* value);
  322003             : 
  322004             : 
  322005             :      public: 
  322006             :          virtual ~SgAwaitExpression();
  322007             : 
  322008             : 
  322009             :      public: 
  322010             :          SgAwaitExpression(Sg_File_Info* startOfConstruct , SgExpression* value = NULL); 
  322011             :          SgAwaitExpression(SgExpression* value); 
  322012             : 
  322013             :     protected:
  322014             : // Start of memberFunctionString
  322015             : SgExpression* p_value;
  322016             :           
  322017             : // End of memberFunctionString
  322018             : 
  322019             :     friend struct Rose::Traits::generated::describe_node_t<SgAwaitExpression>;
  322020             :     friend struct Rose::Traits::generated::describe_field_t<SgAwaitExpression, SgExpression*,&SgAwaitExpression::p_value>;
  322021             : 
  322022             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322023             : 
  322024             : 
  322025             :    };
  322026             : #endif
  322027             : 
  322028             : // postdeclarations for SgAwaitExpression
  322029             : 
  322030             : /* #line 322031 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322031             : 
  322032             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  322033             : 
  322034             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322035             : 
  322036             : 
  322037             : /* #line 322038 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322038             : 
  322039             : 
  322040             : 
  322041             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322042             : 
  322043             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  322044             : //      This code is automatically generated for each 
  322045             : //      terminal and non-terminal within the defined 
  322046             : //      grammar.  There is a simple way to change the 
  322047             : //      code to fix bugs etc.  See the ROSE README file
  322048             : //      for directions.
  322049             : 
  322050             : // tps: (02/22/2010): Adding DLL export requirements
  322051             : #include "rosedll.h"
  322052             : 
  322053             : // predeclarations for SgChooseExpression
  322054             : 
  322055             : /* #line 322056 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322056             : 
  322057             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  322058             : 
  322059             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322060             : 
  322061             : #if 1
  322062             : // Class Definition for SgChooseExpression
  322063             : class ROSE_DLL_API SgChooseExpression  : public SgExpression
  322064             :    {
  322065             :      public:
  322066             : 
  322067             : 
  322068             : /* #line 322069 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322069             : 
  322070             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  322071             : // Start of memberFunctionString
  322072             : /* #line 723 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  322073             : 
  322074             : 
  322075             : 
  322076             : // End of memberFunctionString
  322077             : // Start of memberFunctionString
  322078             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  322079             : 
  322080             : // *** COMMON CODE SECTION BEGINS HERE ***
  322081             : 
  322082             :     public:
  322083             : 
  322084             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  322085             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  322086             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  322087             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  322088             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  322089             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  322090             : 
  322091             :       /*! \brief returns a string representing the class name */
  322092             :           virtual std::string class_name() const override;
  322093             : 
  322094             :       /*! \brief returns new style SageIII enum values */
  322095             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  322096             : 
  322097             :       /*! \brief static variant value */
  322098             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  322099             :        // static const VariantT static_variant = V_SgChooseExpression;
  322100             :           enum { static_variant = V_SgChooseExpression };
  322101             : 
  322102             :        /* the generated cast function */
  322103             :       /*! \brief Casts pointer from base class to derived class */
  322104             :           ROSE_DLL_API friend       SgChooseExpression* isSgChooseExpression(       SgNode * s );
  322105             : 
  322106             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  322107             :           ROSE_DLL_API friend const SgChooseExpression* isSgChooseExpression( const SgNode * s );
  322108             : 
  322109             :      // ******************************************
  322110             :      // * Memory Pool / New / Delete
  322111             :      // ******************************************
  322112             : 
  322113             :      public:
  322114             :           /// \private
  322115             :           static const unsigned pool_size; //
  322116             :           /// \private
  322117             :           static std::vector<unsigned char *> pools; //
  322118             :           /// \private
  322119             :           static SgChooseExpression * next_node; // 
  322120             : 
  322121             :           /// \private
  322122             :           static unsigned long initializeStorageClassArray(SgChooseExpressionStorageClass *); //
  322123             : 
  322124             :           /// \private
  322125             :           static void clearMemoryPool(); //
  322126             :           static void deleteMemoryPool(); //
  322127             : 
  322128             :           /// \private
  322129             :           static void extendMemoryPoolForFileIO(); //
  322130             : 
  322131             :           /// \private
  322132             :           static SgChooseExpression * getPointerFromGlobalIndex(unsigned long); //
  322133             :           /// \private
  322134             :           static SgChooseExpression * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  322135             : 
  322136             :           /// \private
  322137             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  322138             :           /// \private
  322139             :           static void resetValidFreepointers(); //
  322140             :           /// \private
  322141             :           static unsigned long getNumberOfLastValidPointer(); //
  322142             : 
  322143             : 
  322144             : #if defined(INLINE_FUNCTIONS)
  322145             :       /*! \brief returns pointer to newly allocated IR node */
  322146             :           inline void *operator new (size_t size);
  322147             : #else
  322148             :       /*! \brief returns pointer to newly allocated IR node */
  322149             :           void *operator new (size_t size);
  322150             : #endif
  322151             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  322152             :           void operator delete (void* pointer, size_t size);
  322153             : 
  322154             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  322155           0 :           void operator delete (void* pointer)
  322156             :              {
  322157             :             // This is the generated delete operator...
  322158           0 :                SgChooseExpression::operator delete (pointer,sizeof(SgChooseExpression));
  322159             :              }
  322160             : 
  322161             :       /*! \brief Returns the total number of IR nodes of this type */
  322162             :           static size_t numberOfNodes();
  322163             : 
  322164             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  322165             :           static size_t memoryUsage();
  322166             : 
  322167             :       // End of scope which started in IR nodes specific code 
  322168             :       /* */
  322169             : 
  322170             :       /* name Internal Functions
  322171             :           \brief Internal functions ... incomplete-documentation
  322172             : 
  322173             :           These functions have been made public as part of the design, but they are suggested for internal use 
  322174             :           or by particularly knowledgeable users for specialized tools or applications.
  322175             : 
  322176             :           \internal We could not make these private because they are required by user for special purposes. And 
  322177             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  322178             :          
  322179             :        */
  322180             : 
  322181             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  322182             :        // overridden in every class by *generated* implementation
  322183             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  322184             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  322185             :        // MS: 06/28/02 container of names of variables or container indices 
  322186             :        // used used in the traversal to access AST successor nodes
  322187             :        // overridden in every class by *generated* implementation
  322188             :       /*! \brief container of names of variables or container indices used used in the traversal
  322189             :           to access AST successor nodes overridden in every class by *generated* implementation */
  322190             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  322191             : 
  322192             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  322193             :        // than all the vector copies. The implementation for these functions is generated for each class.
  322194             :       /*! \brief return number of children in the traversal successor list */
  322195             :           virtual size_t get_numberOfTraversalSuccessors() override;
  322196             :       /*! \brief index-based access to traversal successors by index number */
  322197             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  322198             :       /*! \brief index-based access to traversal successors by child node */
  322199             :           virtual size_t get_childIndex(SgNode *child) override;
  322200             : 
  322201             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  322202             :        // MS: 08/16/2002 method for generating RTI information
  322203             :       /*! \brief return C++ Runtime-Time-Information */
  322204             :           virtual RTIReturnType roseRTI() override;
  322205             : #endif
  322206             :       /* */
  322207             : 
  322208             : 
  322209             : 
  322210             :       /* name Deprecated Functions
  322211             :           \brief Deprecated functions ... incomplete-documentation
  322212             : 
  322213             :           These functions have been deprecated from use.
  322214             :        */
  322215             :       /* */
  322216             : 
  322217             :       /*! returns a C style string (char*) representing the class name */
  322218             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  322219             : 
  322220             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  322221             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  322222             : #if 0
  322223             :       /*! returns old style Sage II enum values */
  322224             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  322225             :       /*! returns old style Sage II enum values */
  322226             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  322227             : #endif
  322228             :       /* */
  322229             : 
  322230             : 
  322231             : 
  322232             : 
  322233             :      public:
  322234             :       /* name Traversal Support Functions
  322235             :           \brief Traversal support functions ... incomplete-documentation
  322236             : 
  322237             :           These functions have been made public as part of the design, but they are suggested for internal use 
  322238             :           or by particularly knowledgable users for specialized tools or applications.
  322239             :        */
  322240             :       /* */
  322241             : 
  322242             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  322243             :        // (inferior to ROSE traversal mechanism, experimental).
  322244             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  322245             :        */
  322246             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  322247             : 
  322248             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  322249             :       /*! \brief support for the classic visitor pattern done in GoF */
  322250             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  322251             : 
  322252             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  322253             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  322254             :        */
  322255             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  322256             : 
  322257             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  322258             :        */
  322259             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  322260             : 
  322261             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  322262             :        // This traversal helps support internal tools that call static member functions.
  322263             :        // note: this function operates on the memory pools.
  322264             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  322265             :        */
  322266             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  322267             :       /* */
  322268             : 
  322269             : 
  322270             :      public:
  322271             :       /* name Memory Allocation Functions
  322272             :           \brief Memory allocations functions ... incomplete-documentation
  322273             : 
  322274             :           These functions have been made public as part of the design, but they are suggested for internal use 
  322275             :           or by particularly knowledgable users for specialized tools or applications.
  322276             :        */
  322277             :       /* */
  322278             : 
  322279             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  322280             : 
  322281             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  322282             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  322283             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  322284             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  322285             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  322286             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  322287             :           being used with the AST File I/O mechanism.
  322288             :        */
  322289             :           virtual bool isInMemoryPool() override;
  322290             : 
  322291             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  322292             : 
  322293             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  322294             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  322295             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  322296             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  322297             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  322298             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  322299             :           being used with the AST File I/O mechanism.
  322300             :        */
  322301             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  322302             : 
  322303             :       // DQ (4/30/2006): Modified to be a const function.
  322304             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  322305             : 
  322306             :           This functions is part of general support for many possible tools to operate 
  322307             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  322308             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  322309             :           less than the set of pointers used by the AST file I/O. This is part of
  322310             :           work implemented by Andreas, and support tools such as the AST graph generation.
  322311             : 
  322312             :           \warning This function can return unexpected data members and thus the 
  322313             :                    order and the number of elements is unpredicable and subject 
  322314             :                    to change.
  322315             : 
  322316             :           \returns STL vector of pairs of SgNode* and strings
  322317             :        */
  322318             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  322319             : 
  322320             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  322321             : 
  322322             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  322323             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  322324             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  322325             : 
  322326             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  322327             :                    and subject to change.
  322328             :        */
  322329             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  322330             : 
  322331             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  322332             : 
  322333             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  322334             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  322335             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  322336             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  322337             : 
  322338             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  322339             : 
  322340             :           \returns long
  322341             :        */
  322342             :           virtual long getChildIndex( SgNode* childNode ) const override;
  322343             : 
  322344             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  322345             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  322346             :       /* \brief Constructor for use by AST File I/O Mechanism
  322347             : 
  322348             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  322349             :           which obtained via fast binary file I/O from disk.
  322350             :        */
  322351             :        // SgChooseExpression( SgChooseExpressionStorageClass& source );
  322352             : 
  322353             : 
  322354             : 
  322355             : 
  322356             : 
  322357             :  // JH (10/24/2005): methods added to support the ast file IO
  322358             :     private:
  322359             : 
  322360             :       /* name AST Memory Allocation Support Functions
  322361             :           \brief Memory allocations support....
  322362             : 
  322363             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  322364             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  322365             :           and support the AST File I/O Mechanism.
  322366             :        */
  322367             :       /* */
  322368             : 
  322369             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  322370             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  322371             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  322372             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  322373             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  322374             :           a correspinding one in the AST_FILE_IO class!
  322375             :        */
  322376             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  322377             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  322378             :       /* \brief Typedef used for low level memory access.
  322379             :        */
  322380             :        // typedef unsigned char* TestType;
  322381             : 
  322382             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  322383             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  322384             :       /* \brief Typedef used to hold memory addresses as values.
  322385             :        */
  322386             :        // typedef unsigned long  AddressType;
  322387             : 
  322388             : 
  322389             : 
  322390             :        // necessary, to have direct access to the p_freepointer and the private methods !
  322391             :       /*! \brief friend class declaration to support AST File I/O */
  322392             :           friend class AST_FILE_IO;
  322393             : 
  322394             :       /*! \brief friend class declaration to support AST File I/O */
  322395             :           friend class SgChooseExpressionStorageClass;
  322396             : 
  322397             :       /*! \brief friend class declaration to support AST File I/O */
  322398             :           friend class AstSpecificDataManagingClass;
  322399             : 
  322400             :       /*! \brief friend class declaration to support AST File I/O */
  322401             :           friend class AstSpecificDataManagingClassStorageClass;
  322402             :     public:
  322403             :       /*! \brief IR node constructor to support AST File I/O */
  322404             :           SgChooseExpression( const SgChooseExpressionStorageClass& source );
  322405             : 
  322406             :  // private: // JJW hack
  322407             :        /*
  322408             :           name AST Memory Allocation Support Variables
  322409             :           Memory allocations support variables 
  322410             : 
  322411             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  322412             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  322413             :           and support the AST File I/O Mechanism.
  322414             :        */
  322415             :       /* */
  322416             : 
  322417             :     public:
  322418             : 
  322419             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  322420             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  322421             :       // virtual SgNode* addRegExpAttribute();
  322422             :       /*! \brief Support for AST matching using regular expression.
  322423             : 
  322424             :           This support is incomplete and the subject of current research to define 
  322425             :           RegEx trees to support inexact matching.
  322426             :        */
  322427             :           SgChooseExpression* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  322428             : 
  322429             : // *** COMMON CODE SECTION ENDS HERE ***
  322430             : 
  322431             : 
  322432             : // End of memberFunctionString
  322433             : // Start of memberFunctionString
  322434             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  322435             : 
  322436             :      // the generated cast function
  322437             :      // friend ROSE_DLL_API SgChooseExpression* isSgChooseExpression ( SgNode* s );
  322438             : 
  322439             :           typedef SgExpression base_node_type;
  322440             : 
  322441             : 
  322442             : // End of memberFunctionString
  322443             : // Start of memberFunctionString
  322444             : /* #line 159 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  322445             : 
  322446             :           SgType* get_type() const override;
  322447             : 
  322448             : 
  322449             : // End of memberFunctionString
  322450             : // Start of memberFunctionString
  322451             : /* #line 174 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Expression.code" */
  322452             : 
  322453             :           void post_construction_initialization() override;
  322454             : 
  322455             : 
  322456             : // End of memberFunctionString
  322457             : 
  322458             :      public: 
  322459             :          SgExpression* get_value() const;
  322460             :          void set_value(SgExpression* value);
  322461             : 
  322462             : 
  322463             :      public: 
  322464             :          virtual ~SgChooseExpression();
  322465             : 
  322466             : 
  322467             :      public: 
  322468             :          SgChooseExpression(Sg_File_Info* startOfConstruct , SgExpression* value = NULL); 
  322469             :          SgChooseExpression(SgExpression* value); 
  322470             : 
  322471             :     protected:
  322472             : // Start of memberFunctionString
  322473             : SgExpression* p_value;
  322474             :           
  322475             : // End of memberFunctionString
  322476             : 
  322477             :     friend struct Rose::Traits::generated::describe_node_t<SgChooseExpression>;
  322478             :     friend struct Rose::Traits::generated::describe_field_t<SgChooseExpression, SgExpression*,&SgChooseExpression::p_value>;
  322479             : 
  322480             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322481             : 
  322482             : 
  322483             :    };
  322484             : #endif
  322485             : 
  322486             : // postdeclarations for SgChooseExpression
  322487             : 
  322488             : /* #line 322489 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322489             : 
  322490             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  322491             : 
  322492             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322493             : 
  322494             : 
  322495             : /* #line 322496 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322496             : 
  322497             : 
  322498             : 
  322499             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322500             : 
  322501             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  322502             : //      This code is automatically generated for each 
  322503             : //      terminal and non-terminal within the defined 
  322504             : //      grammar.  There is a simple way to change the 
  322505             : //      code to fix bugs etc.  See the ROSE README file
  322506             : //      for directions.
  322507             : 
  322508             : // tps: (02/22/2010): Adding DLL export requirements
  322509             : #include "rosedll.h"
  322510             : 
  322511             : // predeclarations for SgSymbol
  322512             : 
  322513             : /* #line 322514 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322514             : 
  322515             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  322516             : 
  322517             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  322518             : 
  322519             : #if 1
  322520             : // Class Definition for SgSymbol
  322521             : class ROSE_DLL_API SgSymbol  : public SgNode
  322522             :    {
  322523             :      public:
  322524             : 
  322525             : 
  322526             : /* #line 322527 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  322527             : 
  322528             :        // copy functions omitted for SgSymbol
  322529             : // Start of memberFunctionString
  322530             : /* #line 7 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  322531             : 
  322532             :           virtual SgName  get_name() const = 0;
  322533             :           virtual SgType* get_type() const = 0;
  322534             :           virtual SgNode* get_symbol_basis() const; // from HEADER
  322535             : 
  322536             :        // DQ (6/10/007): supports test of symbol declaration scope against symbol table's associated scope
  322537             :           virtual SgScopeStatement* get_scope() const;
  322538             : 
  322539             :        // DQ (12/3/2011): refactoring support for symbol tables and symbols.
  322540             :           SgName get_mangled_name() const;
  322541             : 
  322542             : #if 0
  322543             :        // PP (4/29/22): removed to eliminate confusion
  322544             :        // DQ (8/21/2013): Added function so that templated lower-level symbol table support will compile.
  322545             :        // Note that this function can not be called and returns an appropriate error message.
  322546             :        // Note also that we have to return a declaration for which get_type exists as well
  322547             :        // (selected SgFunctionDeclaration).  The return value of this function is always NULL
  322548             :        // plus it is a runtime error to call this function.
  322549             :        // SgFunctionDeclaration* get_declaration() const;
  322550             :           SgDeclarationStatement* get_declaration() const;
  322551             : #endif /* 0 */
  322552             : 
  322553             : 
  322554             : 
  322555             : // End of memberFunctionString
  322556             : // Start of memberFunctionString
  322557             : /* #line 2317 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Support.code" */
  322558             : 
  322559             : 
  322560             :      /* name Persistant Attribute Mechanism
  322561             : 
  322562             :          This is the persistant attribute mechanism for attaching attributes to IR nodes across
  322563             :          multiple passes. Note that these attributes are persistant in that they are preserved
  322564             :          if the AST is written out to a file and read in from a file.  However, virtual function
  322565             :          in the user-defined class derived from the AstAttribute must be defined for the attribute
  322566             :          to be defined across the boundary of File I/O (simple pack and unpack functions).  More
  322567             :          sophisticated mechanisms are available within the AstAttributeMechanism object
  322568             :          (e.g iterating though attributes, etc; get_attributeMechanism() is available if direct
  322569             :          access is required, however mostly only internal tools use this lower level support).
  322570             : 
  322571             :          \internal This used to be a public data member, but has been changed to be a protected
  322572             :          pointer instead.  The functional interface of the AstAttributeMechanism is presevered
  322573             :          but some of the names and the syntax for calling the interface have changed. The
  322574             :          pointer to the AstAttributeMechanism is now generated by ROSETTA.
  322575             :       */
  322576             :      /* */
  322577             :      //! Add a new attribute represented by the named string.
  322578             :          virtual void addNewAttribute(std::string s,AstAttribute* a) override;
  322579             :      //! Returns attribute of name 's'.
  322580             :          virtual AstAttribute* getAttribute(std::string s) const override;
  322581             :      //! Replace existing attribute of name 's' with new AstAttribute.
  322582             :          virtual void updateAttribute(std::string s,AstAttribute* a) override;  // formerly called: replace in AstAttributeMechanism
  322583             :      /*! \brief This is a wrapper function with the following semantics:
  322584             :          if no attribute of name 's' exists then \b addNewAttribute(s,a); is called,
  322585             :          otherwise \b updateAttribute(s,a); is called.
  322586             :       */
  322587             :          virtual void setAttribute(std::string s,AstAttribute* a) override;
  322588             :      //! Remove attribute of name 's' if present.
  322589             :          virtual void removeAttribute(std::string s) override;
  322590             :      //! Tests if attribute of name 's' is present.
  322591             :          virtual bool attributeExists(std::string s) const override;
  322592             :      //! Returns the number of attributes on this IR node.
  322593             :          virtual int numberOfAttributes() const override;
  322594             : 
  322595             :      /*! \fn AstAttributeMechanism* SgSymbol::get_attributeMechanism() const;
  322596             :          \brief \b FOR \b INTERNAL \b USE Access function; if an attribute exists then
  322597             :                 a pointer to it is returned, else error.
  322598             : 
  322599             :          This is an access function used for getting the interally held pointer to a valid
  322600             :          AstAttributeMechanism. It provides access to lower level functionality of the
  322601             :          AstAttributeMechanism, put is mostly of use to internal tools.
  322602             :       */
  322603             :      /*! \fn void SgSymbol::set_attributeMechanism(AstAttributeMechanism* a);
  322604             :          \brief \b FOR \b INTERNAL \b USE Access function; sets poiner to value AstAttributeMechanism.
  322605             : 
  322606             :          This is an access function used for setting the interally held pointer to a valid
  322607             :          AstAttributeMechanism.
  322608             :       */
  322609             :      /* */
  322610             : 
  322611             : 
  322612             : 
  322613             : 
  322614             : // End of memberFunctionString
  322615             : // Start of memberFunctionString
  322616             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  322617             : 
  322618             : // *** COMMON CODE SECTION BEGINS HERE ***
  322619             : 
  322620             :     public:
  322621             : 
  322622             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  322623             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  322624             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  322625             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  322626             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  322627             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  322628             : 
  322629             :       /*! \brief returns a string representing the class name */
  322630             :           virtual std::string class_name() const override;
  322631             : 
  322632             :       /*! \brief returns new style SageIII enum values */
  322633             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  322634             : 
  322635             :       /*! \brief static variant value */
  322636             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  322637             :        // static const VariantT static_variant = V_SgSymbol;
  322638             :           enum { static_variant = V_SgSymbol };
  322639             : 
  322640             :        /* the generated cast function */
  322641             :       /*! \brief Casts pointer from base class to derived class */
  322642             :           ROSE_DLL_API friend       SgSymbol* isSgSymbol(       SgNode * s );
  322643             : 
  322644             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  322645             :           ROSE_DLL_API friend const SgSymbol* isSgSymbol( const SgNode * s );
  322646             : 
  322647             :      // ******************************************
  322648             :      // * Memory Pool / New / Delete
  322649             :      // ******************************************
  322650             : 
  322651             :      public:
  322652             :           /// \private
  322653             :           static const unsigned pool_size; //
  322654             :           /// \private
  322655             :           static std::vector<unsigned char *> pools; //
  322656             :           /// \private
  322657             :           static SgSymbol * next_node; // 
  322658             : 
  322659             :           /// \private
  322660             :           static unsigned long initializeStorageClassArray(SgSymbolStorageClass *); //
  322661             : 
  322662             :           /// \private
  322663             :           static void clearMemoryPool(); //
  322664             :           static void deleteMemoryPool(); //
  322665             : 
  322666             :           /// \private
  322667             :           static void extendMemoryPoolForFileIO(); //
  322668             : 
  322669             :           /// \private
  322670             :           static SgSymbol * getPointerFromGlobalIndex(unsigned long); //
  322671             :           /// \private
  322672             :           static SgSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  322673             : 
  322674             :           /// \private
  322675             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  322676             :           /// \private
  322677             :           static void resetValidFreepointers(); //
  322678             :           /// \private
  322679             :           static unsigned long getNumberOfLastValidPointer(); //
  322680             : 
  322681             : 
  322682             : #if defined(INLINE_FUNCTIONS)
  322683             :       /*! \brief returns pointer to newly allocated IR node */
  322684             :           inline void *operator new (size_t size);
  322685             : #else
  322686             :       /*! \brief returns pointer to newly allocated IR node */
  322687             :           void *operator new (size_t size);
  322688             : #endif
  322689             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  322690             :           void operator delete (void* pointer, size_t size);
  322691             : 
  322692             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  322693           0 :           void operator delete (void* pointer)
  322694             :              {
  322695             :             // This is the generated delete operator...
  322696           0 :                SgSymbol::operator delete (pointer,sizeof(SgSymbol));
  322697             :              }
  322698             : 
  322699             :       /*! \brief Returns the total number of IR nodes of this type */
  322700             :           static size_t numberOfNodes();
  322701             : 
  322702             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  322703             :           static size_t memoryUsage();
  322704             : 
  322705             :       // End of scope which started in IR nodes specific code 
  322706             :       /* */
  322707             : 
  322708             :       /* name Internal Functions
  322709             :           \brief Internal functions ... incomplete-documentation
  322710             : 
  322711             :           These functions have been made public as part of the design, but they are suggested for internal use 
  322712             :           or by particularly knowledgeable users for specialized tools or applications.
  322713             : 
  322714             :           \internal We could not make these private because they are required by user for special purposes. And 
  322715             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  322716             :          
  322717             :        */
  322718             : 
  322719             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  322720             :        // overridden in every class by *generated* implementation
  322721             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  322722             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  322723             :        // MS: 06/28/02 container of names of variables or container indices 
  322724             :        // used used in the traversal to access AST successor nodes
  322725             :        // overridden in every class by *generated* implementation
  322726             :       /*! \brief container of names of variables or container indices used used in the traversal
  322727             :           to access AST successor nodes overridden in every class by *generated* implementation */
  322728             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  322729             : 
  322730             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  322731             :        // than all the vector copies. The implementation for these functions is generated for each class.
  322732             :       /*! \brief return number of children in the traversal successor list */
  322733             :           virtual size_t get_numberOfTraversalSuccessors() override;
  322734             :       /*! \brief index-based access to traversal successors by index number */
  322735             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  322736             :       /*! \brief index-based access to traversal successors by child node */
  322737             :           virtual size_t get_childIndex(SgNode *child) override;
  322738             : 
  322739             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  322740             :        // MS: 08/16/2002 method for generating RTI information
  322741             :       /*! \brief return C++ Runtime-Time-Information */
  322742             :           virtual RTIReturnType roseRTI() override;
  322743             : #endif
  322744             :       /* */
  322745             : 
  322746             : 
  322747             : 
  322748             :       /* name Deprecated Functions
  322749             :           \brief Deprecated functions ... incomplete-documentation
  322750             : 
  322751             :           These functions have been deprecated from use.
  322752             :        */
  322753             :       /* */
  322754             : 
  322755             :       /*! returns a C style string (char*) representing the class name */
  322756             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  322757             : 
  322758             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  322759             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  322760             : #if 0
  322761             :       /*! returns old style Sage II enum values */
  322762             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  322763             :       /*! returns old style Sage II enum values */
  322764             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  322765             : #endif
  322766             :       /* */
  322767             : 
  322768             : 
  322769             : 
  322770             : 
  322771             :      public:
  322772             :       /* name Traversal Support Functions
  322773             :           \brief Traversal support functions ... incomplete-documentation
  322774             : 
  322775             :           These functions have been made public as part of the design, but they are suggested for internal use 
  322776             :           or by particularly knowledgable users for specialized tools or applications.
  322777             :        */
  322778             :       /* */
  322779             : 
  322780             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  322781             :        // (inferior to ROSE traversal mechanism, experimental).
  322782             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  322783             :        */
  322784             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  322785             : 
  322786             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  322787             :       /*! \brief support for the classic visitor pattern done in GoF */
  322788             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  322789             : 
  322790             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  322791             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  322792             :        */
  322793             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  322794             : 
  322795             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  322796             :        */
  322797             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  322798             : 
  322799             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  322800             :        // This traversal helps support internal tools that call static member functions.
  322801             :        // note: this function operates on the memory pools.
  322802             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  322803             :        */
  322804             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  322805             :       /* */
  322806             : 
  322807             : 
  322808             :      public:
  322809             :       /* name Memory Allocation Functions
  322810             :           \brief Memory allocations functions ... incomplete-documentation
  322811             : 
  322812             :           These functions have been made public as part of the design, but they are suggested for internal use 
  322813             :           or by particularly knowledgable users for specialized tools or applications.
  322814             :        */
  322815             :       /* */
  322816             : 
  322817             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  322818             : 
  322819             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  322820             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  322821             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  322822             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  322823             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  322824             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  322825             :           being used with the AST File I/O mechanism.
  322826             :        */
  322827             :           virtual bool isInMemoryPool() override;
  322828             : 
  322829             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  322830             : 
  322831             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  322832             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  322833             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  322834             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  322835             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  322836             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  322837             :           being used with the AST File I/O mechanism.
  322838             :        */
  322839             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  322840             : 
  322841             :       // DQ (4/30/2006): Modified to be a const function.
  322842             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  322843             : 
  322844             :           This functions is part of general support for many possible tools to operate 
  322845             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  322846             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  322847             :           less than the set of pointers used by the AST file I/O. This is part of
  322848             :           work implemented by Andreas, and support tools such as the AST graph generation.
  322849             : 
  322850             :           \warning This function can return unexpected data members and thus the 
  322851             :                    order and the number of elements is unpredicable and subject 
  322852             :                    to change.
  322853             : 
  322854             :           \returns STL vector of pairs of SgNode* and strings
  322855             :        */
  322856             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  322857             : 
  322858             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  322859             : 
  322860             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  322861             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  322862             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  322863             : 
  322864             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  322865             :                    and subject to change.
  322866             :        */
  322867             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  322868             : 
  322869             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  322870             : 
  322871             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  322872             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  322873             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  322874             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  322875             : 
  322876             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  322877             : 
  322878             :           \returns long
  322879             :        */
  322880             :           virtual long getChildIndex( SgNode* childNode ) const override;
  322881             : 
  322882             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  322883             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  322884             :       /* \brief Constructor for use by AST File I/O Mechanism
  322885             : 
  322886             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  322887             :           which obtained via fast binary file I/O from disk.
  322888             :        */
  322889             :        // SgSymbol( SgSymbolStorageClass& source );
  322890             : 
  322891             : 
  322892             : 
  322893             : 
  322894             : 
  322895             :  // JH (10/24/2005): methods added to support the ast file IO
  322896             :     private:
  322897             : 
  322898             :       /* name AST Memory Allocation Support Functions
  322899             :           \brief Memory allocations support....
  322900             : 
  322901             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  322902             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  322903             :           and support the AST File I/O Mechanism.
  322904             :        */
  322905             :       /* */
  322906             : 
  322907             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  322908             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  322909             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  322910             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  322911             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  322912             :           a correspinding one in the AST_FILE_IO class!
  322913             :        */
  322914             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  322915             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  322916             :       /* \brief Typedef used for low level memory access.
  322917             :        */
  322918             :        // typedef unsigned char* TestType;
  322919             : 
  322920             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  322921             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  322922             :       /* \brief Typedef used to hold memory addresses as values.
  322923             :        */
  322924             :        // typedef unsigned long  AddressType;
  322925             : 
  322926             : 
  322927             : 
  322928             :        // necessary, to have direct access to the p_freepointer and the private methods !
  322929             :       /*! \brief friend class declaration to support AST File I/O */
  322930             :           friend class AST_FILE_IO;
  322931             : 
  322932             :       /*! \brief friend class declaration to support AST File I/O */
  322933             :           friend class SgSymbolStorageClass;
  322934             : 
  322935             :       /*! \brief friend class declaration to support AST File I/O */
  322936             :           friend class AstSpecificDataManagingClass;
  322937             : 
  322938             :       /*! \brief friend class declaration to support AST File I/O */
  322939             :           friend class AstSpecificDataManagingClassStorageClass;
  322940             :     public:
  322941             :       /*! \brief IR node constructor to support AST File I/O */
  322942             :           SgSymbol( const SgSymbolStorageClass& source );
  322943             : 
  322944             :  // private: // JJW hack
  322945             :        /*
  322946             :           name AST Memory Allocation Support Variables
  322947             :           Memory allocations support variables 
  322948             : 
  322949             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  322950             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  322951             :           and support the AST File I/O Mechanism.
  322952             :        */
  322953             :       /* */
  322954             : 
  322955             :     public:
  322956             : 
  322957             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  322958             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  322959             :       // virtual SgNode* addRegExpAttribute();
  322960             :       /*! \brief Support for AST matching using regular expression.
  322961             : 
  322962             :           This support is incomplete and the subject of current research to define 
  322963             :           RegEx trees to support inexact matching.
  322964             :        */
  322965             :           SgSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  322966             : 
  322967             : // *** COMMON CODE SECTION ENDS HERE ***
  322968             : 
  322969             : 
  322970             : // End of memberFunctionString
  322971             : // Start of memberFunctionString
  322972             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  322973             : 
  322974             :      // the generated cast function
  322975             :      // friend ROSE_DLL_API SgSymbol* isSgSymbol ( SgNode* s );
  322976             : 
  322977             :           typedef SgNode base_node_type;
  322978             : 
  322979             : 
  322980             : // End of memberFunctionString
  322981             : 
  322982             :      public: 
  322983             :          AstAttributeMechanism* get_attributeMechanism() const override /* (getDataAccessFunctionPrototypeString) */;
  322984             :          void set_attributeMechanism(AstAttributeMechanism* attributeMechanism) override /* (getDataAccessFunctionPrototypeString) */;
  322985             : 
  322986             : 
  322987             :      public: 
  322988             :          virtual ~SgSymbol();
  322989             : 
  322990             : 
  322991             :      public: 
  322992             :          SgSymbol(); 
  322993             : 
  322994             :     protected:
  322995             : // Start of memberFunctionString
  322996             : AstAttributeMechanism* p_attributeMechanism;
  322997             :           
  322998             : // End of memberFunctionString
  322999             : 
  323000             :     friend struct Rose::Traits::generated::describe_node_t<SgSymbol>;
  323001             :     friend struct Rose::Traits::generated::describe_field_t<SgSymbol, AstAttributeMechanism*,&SgSymbol::p_attributeMechanism>;
  323002             : 
  323003             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323004             : 
  323005             : 
  323006             :    };
  323007             : #endif
  323008             : 
  323009             : // postdeclarations for SgSymbol
  323010             : 
  323011             : /* #line 323012 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323012             : 
  323013             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  323014             : 
  323015             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323016             : 
  323017             : 
  323018             : /* #line 323019 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323019             : 
  323020             : 
  323021             : 
  323022             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323023             : 
  323024             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  323025             : //      This code is automatically generated for each 
  323026             : //      terminal and non-terminal within the defined 
  323027             : //      grammar.  There is a simple way to change the 
  323028             : //      code to fix bugs etc.  See the ROSE README file
  323029             : //      for directions.
  323030             : 
  323031             : // tps: (02/22/2010): Adding DLL export requirements
  323032             : #include "rosedll.h"
  323033             : 
  323034             : // predeclarations for SgVariableSymbol
  323035             : 
  323036             : /* #line 323037 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323037             : 
  323038             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  323039             : 
  323040             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323041             : 
  323042             : #if 1
  323043             : // Class Definition for SgVariableSymbol
  323044             : class ROSE_DLL_API SgVariableSymbol  : public SgSymbol
  323045             :    {
  323046             :      public:
  323047             : 
  323048             : 
  323049             : /* #line 323050 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323050             : 
  323051             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  323052             : // Start of memberFunctionString
  323053             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  323054             : 
  323055             : // *** COMMON CODE SECTION BEGINS HERE ***
  323056             : 
  323057             :     public:
  323058             : 
  323059             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  323060             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  323061             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  323062             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  323063             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  323064             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  323065             : 
  323066             :       /*! \brief returns a string representing the class name */
  323067             :           virtual std::string class_name() const override;
  323068             : 
  323069             :       /*! \brief returns new style SageIII enum values */
  323070             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  323071             : 
  323072             :       /*! \brief static variant value */
  323073             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  323074             :        // static const VariantT static_variant = V_SgVariableSymbol;
  323075             :           enum { static_variant = V_SgVariableSymbol };
  323076             : 
  323077             :        /* the generated cast function */
  323078             :       /*! \brief Casts pointer from base class to derived class */
  323079             :           ROSE_DLL_API friend       SgVariableSymbol* isSgVariableSymbol(       SgNode * s );
  323080             : 
  323081             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  323082             :           ROSE_DLL_API friend const SgVariableSymbol* isSgVariableSymbol( const SgNode * s );
  323083             : 
  323084             :      // ******************************************
  323085             :      // * Memory Pool / New / Delete
  323086             :      // ******************************************
  323087             : 
  323088             :      public:
  323089             :           /// \private
  323090             :           static const unsigned pool_size; //
  323091             :           /// \private
  323092             :           static std::vector<unsigned char *> pools; //
  323093             :           /// \private
  323094             :           static SgVariableSymbol * next_node; // 
  323095             : 
  323096             :           /// \private
  323097             :           static unsigned long initializeStorageClassArray(SgVariableSymbolStorageClass *); //
  323098             : 
  323099             :           /// \private
  323100             :           static void clearMemoryPool(); //
  323101             :           static void deleteMemoryPool(); //
  323102             : 
  323103             :           /// \private
  323104             :           static void extendMemoryPoolForFileIO(); //
  323105             : 
  323106             :           /// \private
  323107             :           static SgVariableSymbol * getPointerFromGlobalIndex(unsigned long); //
  323108             :           /// \private
  323109             :           static SgVariableSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  323110             : 
  323111             :           /// \private
  323112             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  323113             :           /// \private
  323114             :           static void resetValidFreepointers(); //
  323115             :           /// \private
  323116             :           static unsigned long getNumberOfLastValidPointer(); //
  323117             : 
  323118             : 
  323119             : #if defined(INLINE_FUNCTIONS)
  323120             :       /*! \brief returns pointer to newly allocated IR node */
  323121             :           inline void *operator new (size_t size);
  323122             : #else
  323123             :       /*! \brief returns pointer to newly allocated IR node */
  323124             :           void *operator new (size_t size);
  323125             : #endif
  323126             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  323127             :           void operator delete (void* pointer, size_t size);
  323128             : 
  323129             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  323130        8461 :           void operator delete (void* pointer)
  323131             :              {
  323132             :             // This is the generated delete operator...
  323133        8461 :                SgVariableSymbol::operator delete (pointer,sizeof(SgVariableSymbol));
  323134             :              }
  323135             : 
  323136             :       /*! \brief Returns the total number of IR nodes of this type */
  323137             :           static size_t numberOfNodes();
  323138             : 
  323139             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  323140             :           static size_t memoryUsage();
  323141             : 
  323142             :       // End of scope which started in IR nodes specific code 
  323143             :       /* */
  323144             : 
  323145             :       /* name Internal Functions
  323146             :           \brief Internal functions ... incomplete-documentation
  323147             : 
  323148             :           These functions have been made public as part of the design, but they are suggested for internal use 
  323149             :           or by particularly knowledgeable users for specialized tools or applications.
  323150             : 
  323151             :           \internal We could not make these private because they are required by user for special purposes. And 
  323152             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  323153             :          
  323154             :        */
  323155             : 
  323156             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  323157             :        // overridden in every class by *generated* implementation
  323158             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  323159             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  323160             :        // MS: 06/28/02 container of names of variables or container indices 
  323161             :        // used used in the traversal to access AST successor nodes
  323162             :        // overridden in every class by *generated* implementation
  323163             :       /*! \brief container of names of variables or container indices used used in the traversal
  323164             :           to access AST successor nodes overridden in every class by *generated* implementation */
  323165             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  323166             : 
  323167             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  323168             :        // than all the vector copies. The implementation for these functions is generated for each class.
  323169             :       /*! \brief return number of children in the traversal successor list */
  323170             :           virtual size_t get_numberOfTraversalSuccessors() override;
  323171             :       /*! \brief index-based access to traversal successors by index number */
  323172             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  323173             :       /*! \brief index-based access to traversal successors by child node */
  323174             :           virtual size_t get_childIndex(SgNode *child) override;
  323175             : 
  323176             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  323177             :        // MS: 08/16/2002 method for generating RTI information
  323178             :       /*! \brief return C++ Runtime-Time-Information */
  323179             :           virtual RTIReturnType roseRTI() override;
  323180             : #endif
  323181             :       /* */
  323182             : 
  323183             : 
  323184             : 
  323185             :       /* name Deprecated Functions
  323186             :           \brief Deprecated functions ... incomplete-documentation
  323187             : 
  323188             :           These functions have been deprecated from use.
  323189             :        */
  323190             :       /* */
  323191             : 
  323192             :       /*! returns a C style string (char*) representing the class name */
  323193             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  323194             : 
  323195             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  323196             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  323197             : #if 0
  323198             :       /*! returns old style Sage II enum values */
  323199             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  323200             :       /*! returns old style Sage II enum values */
  323201             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  323202             : #endif
  323203             :       /* */
  323204             : 
  323205             : 
  323206             : 
  323207             : 
  323208             :      public:
  323209             :       /* name Traversal Support Functions
  323210             :           \brief Traversal support functions ... incomplete-documentation
  323211             : 
  323212             :           These functions have been made public as part of the design, but they are suggested for internal use 
  323213             :           or by particularly knowledgable users for specialized tools or applications.
  323214             :        */
  323215             :       /* */
  323216             : 
  323217             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  323218             :        // (inferior to ROSE traversal mechanism, experimental).
  323219             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  323220             :        */
  323221             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  323222             : 
  323223             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  323224             :       /*! \brief support for the classic visitor pattern done in GoF */
  323225             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  323226             : 
  323227             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  323228             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  323229             :        */
  323230             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  323231             : 
  323232             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  323233             :        */
  323234             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  323235             : 
  323236             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  323237             :        // This traversal helps support internal tools that call static member functions.
  323238             :        // note: this function operates on the memory pools.
  323239             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  323240             :        */
  323241             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  323242             :       /* */
  323243             : 
  323244             : 
  323245             :      public:
  323246             :       /* name Memory Allocation Functions
  323247             :           \brief Memory allocations functions ... incomplete-documentation
  323248             : 
  323249             :           These functions have been made public as part of the design, but they are suggested for internal use 
  323250             :           or by particularly knowledgable users for specialized tools or applications.
  323251             :        */
  323252             :       /* */
  323253             : 
  323254             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  323255             : 
  323256             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  323257             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  323258             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  323259             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  323260             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  323261             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  323262             :           being used with the AST File I/O mechanism.
  323263             :        */
  323264             :           virtual bool isInMemoryPool() override;
  323265             : 
  323266             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  323267             : 
  323268             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  323269             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  323270             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  323271             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  323272             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  323273             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  323274             :           being used with the AST File I/O mechanism.
  323275             :        */
  323276             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  323277             : 
  323278             :       // DQ (4/30/2006): Modified to be a const function.
  323279             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  323280             : 
  323281             :           This functions is part of general support for many possible tools to operate 
  323282             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  323283             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  323284             :           less than the set of pointers used by the AST file I/O. This is part of
  323285             :           work implemented by Andreas, and support tools such as the AST graph generation.
  323286             : 
  323287             :           \warning This function can return unexpected data members and thus the 
  323288             :                    order and the number of elements is unpredicable and subject 
  323289             :                    to change.
  323290             : 
  323291             :           \returns STL vector of pairs of SgNode* and strings
  323292             :        */
  323293             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  323294             : 
  323295             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  323296             : 
  323297             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  323298             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  323299             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  323300             : 
  323301             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  323302             :                    and subject to change.
  323303             :        */
  323304             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  323305             : 
  323306             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  323307             : 
  323308             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  323309             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  323310             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  323311             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  323312             : 
  323313             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  323314             : 
  323315             :           \returns long
  323316             :        */
  323317             :           virtual long getChildIndex( SgNode* childNode ) const override;
  323318             : 
  323319             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  323320             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  323321             :       /* \brief Constructor for use by AST File I/O Mechanism
  323322             : 
  323323             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  323324             :           which obtained via fast binary file I/O from disk.
  323325             :        */
  323326             :        // SgVariableSymbol( SgVariableSymbolStorageClass& source );
  323327             : 
  323328             : 
  323329             : 
  323330             : 
  323331             : 
  323332             :  // JH (10/24/2005): methods added to support the ast file IO
  323333             :     private:
  323334             : 
  323335             :       /* name AST Memory Allocation Support Functions
  323336             :           \brief Memory allocations support....
  323337             : 
  323338             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  323339             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  323340             :           and support the AST File I/O Mechanism.
  323341             :        */
  323342             :       /* */
  323343             : 
  323344             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  323345             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  323346             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  323347             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  323348             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  323349             :           a correspinding one in the AST_FILE_IO class!
  323350             :        */
  323351             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  323352             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  323353             :       /* \brief Typedef used for low level memory access.
  323354             :        */
  323355             :        // typedef unsigned char* TestType;
  323356             : 
  323357             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  323358             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  323359             :       /* \brief Typedef used to hold memory addresses as values.
  323360             :        */
  323361             :        // typedef unsigned long  AddressType;
  323362             : 
  323363             : 
  323364             : 
  323365             :        // necessary, to have direct access to the p_freepointer and the private methods !
  323366             :       /*! \brief friend class declaration to support AST File I/O */
  323367             :           friend class AST_FILE_IO;
  323368             : 
  323369             :       /*! \brief friend class declaration to support AST File I/O */
  323370             :           friend class SgVariableSymbolStorageClass;
  323371             : 
  323372             :       /*! \brief friend class declaration to support AST File I/O */
  323373             :           friend class AstSpecificDataManagingClass;
  323374             : 
  323375             :       /*! \brief friend class declaration to support AST File I/O */
  323376             :           friend class AstSpecificDataManagingClassStorageClass;
  323377             :     public:
  323378             :       /*! \brief IR node constructor to support AST File I/O */
  323379             :           SgVariableSymbol( const SgVariableSymbolStorageClass& source );
  323380             : 
  323381             :  // private: // JJW hack
  323382             :        /*
  323383             :           name AST Memory Allocation Support Variables
  323384             :           Memory allocations support variables 
  323385             : 
  323386             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  323387             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  323388             :           and support the AST File I/O Mechanism.
  323389             :        */
  323390             :       /* */
  323391             : 
  323392             :     public:
  323393             : 
  323394             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  323395             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  323396             :       // virtual SgNode* addRegExpAttribute();
  323397             :       /*! \brief Support for AST matching using regular expression.
  323398             : 
  323399             :           This support is incomplete and the subject of current research to define 
  323400             :           RegEx trees to support inexact matching.
  323401             :        */
  323402             :           SgVariableSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  323403             : 
  323404             : // *** COMMON CODE SECTION ENDS HERE ***
  323405             : 
  323406             : 
  323407             : // End of memberFunctionString
  323408             : // Start of memberFunctionString
  323409             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  323410             : 
  323411             :      // the generated cast function
  323412             :      // friend ROSE_DLL_API SgVariableSymbol* isSgVariableSymbol ( SgNode* s );
  323413             : 
  323414             :           typedef SgSymbol base_node_type;
  323415             : 
  323416             : 
  323417             : // End of memberFunctionString
  323418             : // Start of memberFunctionString
  323419             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  323420             : 
  323421             :           SgName get_name() const override;
  323422             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  323423             : 
  323424             : 
  323425             : // End of memberFunctionString
  323426             : // Start of memberFunctionString
  323427             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  323428             : 
  323429             :        // DQ (3/23/2017): ROSETTA macro expansion
  323430             :           SgType* get_type() const override;
  323431             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  323432             : 
  323433             : 
  323434             : // End of memberFunctionString
  323435             : 
  323436             :      public: 
  323437             :          SgInitializedName* get_declaration() const;
  323438             :          void set_declaration(SgInitializedName* declaration);
  323439             : 
  323440             : 
  323441             :      public: 
  323442             :          virtual ~SgVariableSymbol();
  323443             : 
  323444             : 
  323445             :      public: 
  323446             :          SgVariableSymbol(SgInitializedName* declaration = NULL); 
  323447             : 
  323448             :     protected:
  323449             : // Start of memberFunctionString
  323450             : SgInitializedName* p_declaration;
  323451             :           
  323452             : // End of memberFunctionString
  323453             : 
  323454             :     friend struct Rose::Traits::generated::describe_node_t<SgVariableSymbol>;
  323455             :     friend struct Rose::Traits::generated::describe_field_t<SgVariableSymbol, SgInitializedName*,&SgVariableSymbol::p_declaration>;
  323456             : 
  323457             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323458             : 
  323459             : 
  323460             :    };
  323461             : #endif
  323462             : 
  323463             : // postdeclarations for SgVariableSymbol
  323464             : 
  323465             : /* #line 323466 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323466             : 
  323467             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  323468             : 
  323469             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323470             : 
  323471             : 
  323472             : /* #line 323473 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323473             : 
  323474             : 
  323475             : 
  323476             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323477             : 
  323478             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  323479             : //      This code is automatically generated for each 
  323480             : //      terminal and non-terminal within the defined 
  323481             : //      grammar.  There is a simple way to change the 
  323482             : //      code to fix bugs etc.  See the ROSE README file
  323483             : //      for directions.
  323484             : 
  323485             : // tps: (02/22/2010): Adding DLL export requirements
  323486             : #include "rosedll.h"
  323487             : 
  323488             : // predeclarations for SgTemplateVariableSymbol
  323489             : 
  323490             : /* #line 323491 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323491             : 
  323492             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  323493             : 
  323494             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323495             : 
  323496             : #if 1
  323497             : // Class Definition for SgTemplateVariableSymbol
  323498             : class ROSE_DLL_API SgTemplateVariableSymbol  : public SgVariableSymbol
  323499             :    {
  323500             :      public:
  323501             : 
  323502             : 
  323503             : /* #line 323504 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323504             : 
  323505             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  323506             : // Start of memberFunctionString
  323507             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  323508             : 
  323509             : // *** COMMON CODE SECTION BEGINS HERE ***
  323510             : 
  323511             :     public:
  323512             : 
  323513             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  323514             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  323515             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  323516             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  323517             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  323518             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  323519             : 
  323520             :       /*! \brief returns a string representing the class name */
  323521             :           virtual std::string class_name() const override;
  323522             : 
  323523             :       /*! \brief returns new style SageIII enum values */
  323524             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  323525             : 
  323526             :       /*! \brief static variant value */
  323527             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  323528             :        // static const VariantT static_variant = V_SgTemplateVariableSymbol;
  323529             :           enum { static_variant = V_SgTemplateVariableSymbol };
  323530             : 
  323531             :        /* the generated cast function */
  323532             :       /*! \brief Casts pointer from base class to derived class */
  323533             :           ROSE_DLL_API friend       SgTemplateVariableSymbol* isSgTemplateVariableSymbol(       SgNode * s );
  323534             : 
  323535             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  323536             :           ROSE_DLL_API friend const SgTemplateVariableSymbol* isSgTemplateVariableSymbol( const SgNode * s );
  323537             : 
  323538             :      // ******************************************
  323539             :      // * Memory Pool / New / Delete
  323540             :      // ******************************************
  323541             : 
  323542             :      public:
  323543             :           /// \private
  323544             :           static const unsigned pool_size; //
  323545             :           /// \private
  323546             :           static std::vector<unsigned char *> pools; //
  323547             :           /// \private
  323548             :           static SgTemplateVariableSymbol * next_node; // 
  323549             : 
  323550             :           /// \private
  323551             :           static unsigned long initializeStorageClassArray(SgTemplateVariableSymbolStorageClass *); //
  323552             : 
  323553             :           /// \private
  323554             :           static void clearMemoryPool(); //
  323555             :           static void deleteMemoryPool(); //
  323556             : 
  323557             :           /// \private
  323558             :           static void extendMemoryPoolForFileIO(); //
  323559             : 
  323560             :           /// \private
  323561             :           static SgTemplateVariableSymbol * getPointerFromGlobalIndex(unsigned long); //
  323562             :           /// \private
  323563             :           static SgTemplateVariableSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  323564             : 
  323565             :           /// \private
  323566             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  323567             :           /// \private
  323568             :           static void resetValidFreepointers(); //
  323569             :           /// \private
  323570             :           static unsigned long getNumberOfLastValidPointer(); //
  323571             : 
  323572             : 
  323573             : #if defined(INLINE_FUNCTIONS)
  323574             :       /*! \brief returns pointer to newly allocated IR node */
  323575             :           inline void *operator new (size_t size);
  323576             : #else
  323577             :       /*! \brief returns pointer to newly allocated IR node */
  323578             :           void *operator new (size_t size);
  323579             : #endif
  323580             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  323581             :           void operator delete (void* pointer, size_t size);
  323582             : 
  323583             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  323584         172 :           void operator delete (void* pointer)
  323585             :              {
  323586             :             // This is the generated delete operator...
  323587         172 :                SgTemplateVariableSymbol::operator delete (pointer,sizeof(SgTemplateVariableSymbol));
  323588             :              }
  323589             : 
  323590             :       /*! \brief Returns the total number of IR nodes of this type */
  323591             :           static size_t numberOfNodes();
  323592             : 
  323593             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  323594             :           static size_t memoryUsage();
  323595             : 
  323596             :       // End of scope which started in IR nodes specific code 
  323597             :       /* */
  323598             : 
  323599             :       /* name Internal Functions
  323600             :           \brief Internal functions ... incomplete-documentation
  323601             : 
  323602             :           These functions have been made public as part of the design, but they are suggested for internal use 
  323603             :           or by particularly knowledgeable users for specialized tools or applications.
  323604             : 
  323605             :           \internal We could not make these private because they are required by user for special purposes. And 
  323606             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  323607             :          
  323608             :        */
  323609             : 
  323610             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  323611             :        // overridden in every class by *generated* implementation
  323612             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  323613             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  323614             :        // MS: 06/28/02 container of names of variables or container indices 
  323615             :        // used used in the traversal to access AST successor nodes
  323616             :        // overridden in every class by *generated* implementation
  323617             :       /*! \brief container of names of variables or container indices used used in the traversal
  323618             :           to access AST successor nodes overridden in every class by *generated* implementation */
  323619             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  323620             : 
  323621             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  323622             :        // than all the vector copies. The implementation for these functions is generated for each class.
  323623             :       /*! \brief return number of children in the traversal successor list */
  323624             :           virtual size_t get_numberOfTraversalSuccessors() override;
  323625             :       /*! \brief index-based access to traversal successors by index number */
  323626             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  323627             :       /*! \brief index-based access to traversal successors by child node */
  323628             :           virtual size_t get_childIndex(SgNode *child) override;
  323629             : 
  323630             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  323631             :        // MS: 08/16/2002 method for generating RTI information
  323632             :       /*! \brief return C++ Runtime-Time-Information */
  323633             :           virtual RTIReturnType roseRTI() override;
  323634             : #endif
  323635             :       /* */
  323636             : 
  323637             : 
  323638             : 
  323639             :       /* name Deprecated Functions
  323640             :           \brief Deprecated functions ... incomplete-documentation
  323641             : 
  323642             :           These functions have been deprecated from use.
  323643             :        */
  323644             :       /* */
  323645             : 
  323646             :       /*! returns a C style string (char*) representing the class name */
  323647             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  323648             : 
  323649             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  323650             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  323651             : #if 0
  323652             :       /*! returns old style Sage II enum values */
  323653             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  323654             :       /*! returns old style Sage II enum values */
  323655             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  323656             : #endif
  323657             :       /* */
  323658             : 
  323659             : 
  323660             : 
  323661             : 
  323662             :      public:
  323663             :       /* name Traversal Support Functions
  323664             :           \brief Traversal support functions ... incomplete-documentation
  323665             : 
  323666             :           These functions have been made public as part of the design, but they are suggested for internal use 
  323667             :           or by particularly knowledgable users for specialized tools or applications.
  323668             :        */
  323669             :       /* */
  323670             : 
  323671             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  323672             :        // (inferior to ROSE traversal mechanism, experimental).
  323673             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  323674             :        */
  323675             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  323676             : 
  323677             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  323678             :       /*! \brief support for the classic visitor pattern done in GoF */
  323679             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  323680             : 
  323681             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  323682             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  323683             :        */
  323684             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  323685             : 
  323686             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  323687             :        */
  323688             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  323689             : 
  323690             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  323691             :        // This traversal helps support internal tools that call static member functions.
  323692             :        // note: this function operates on the memory pools.
  323693             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  323694             :        */
  323695             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  323696             :       /* */
  323697             : 
  323698             : 
  323699             :      public:
  323700             :       /* name Memory Allocation Functions
  323701             :           \brief Memory allocations functions ... incomplete-documentation
  323702             : 
  323703             :           These functions have been made public as part of the design, but they are suggested for internal use 
  323704             :           or by particularly knowledgable users for specialized tools or applications.
  323705             :        */
  323706             :       /* */
  323707             : 
  323708             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  323709             : 
  323710             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  323711             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  323712             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  323713             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  323714             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  323715             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  323716             :           being used with the AST File I/O mechanism.
  323717             :        */
  323718             :           virtual bool isInMemoryPool() override;
  323719             : 
  323720             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  323721             : 
  323722             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  323723             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  323724             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  323725             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  323726             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  323727             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  323728             :           being used with the AST File I/O mechanism.
  323729             :        */
  323730             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  323731             : 
  323732             :       // DQ (4/30/2006): Modified to be a const function.
  323733             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  323734             : 
  323735             :           This functions is part of general support for many possible tools to operate 
  323736             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  323737             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  323738             :           less than the set of pointers used by the AST file I/O. This is part of
  323739             :           work implemented by Andreas, and support tools such as the AST graph generation.
  323740             : 
  323741             :           \warning This function can return unexpected data members and thus the 
  323742             :                    order and the number of elements is unpredicable and subject 
  323743             :                    to change.
  323744             : 
  323745             :           \returns STL vector of pairs of SgNode* and strings
  323746             :        */
  323747             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  323748             : 
  323749             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  323750             : 
  323751             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  323752             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  323753             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  323754             : 
  323755             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  323756             :                    and subject to change.
  323757             :        */
  323758             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  323759             : 
  323760             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  323761             : 
  323762             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  323763             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  323764             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  323765             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  323766             : 
  323767             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  323768             : 
  323769             :           \returns long
  323770             :        */
  323771             :           virtual long getChildIndex( SgNode* childNode ) const override;
  323772             : 
  323773             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  323774             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  323775             :       /* \brief Constructor for use by AST File I/O Mechanism
  323776             : 
  323777             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  323778             :           which obtained via fast binary file I/O from disk.
  323779             :        */
  323780             :        // SgTemplateVariableSymbol( SgTemplateVariableSymbolStorageClass& source );
  323781             : 
  323782             : 
  323783             : 
  323784             : 
  323785             : 
  323786             :  // JH (10/24/2005): methods added to support the ast file IO
  323787             :     private:
  323788             : 
  323789             :       /* name AST Memory Allocation Support Functions
  323790             :           \brief Memory allocations support....
  323791             : 
  323792             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  323793             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  323794             :           and support the AST File I/O Mechanism.
  323795             :        */
  323796             :       /* */
  323797             : 
  323798             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  323799             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  323800             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  323801             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  323802             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  323803             :           a correspinding one in the AST_FILE_IO class!
  323804             :        */
  323805             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  323806             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  323807             :       /* \brief Typedef used for low level memory access.
  323808             :        */
  323809             :        // typedef unsigned char* TestType;
  323810             : 
  323811             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  323812             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  323813             :       /* \brief Typedef used to hold memory addresses as values.
  323814             :        */
  323815             :        // typedef unsigned long  AddressType;
  323816             : 
  323817             : 
  323818             : 
  323819             :        // necessary, to have direct access to the p_freepointer and the private methods !
  323820             :       /*! \brief friend class declaration to support AST File I/O */
  323821             :           friend class AST_FILE_IO;
  323822             : 
  323823             :       /*! \brief friend class declaration to support AST File I/O */
  323824             :           friend class SgTemplateVariableSymbolStorageClass;
  323825             : 
  323826             :       /*! \brief friend class declaration to support AST File I/O */
  323827             :           friend class AstSpecificDataManagingClass;
  323828             : 
  323829             :       /*! \brief friend class declaration to support AST File I/O */
  323830             :           friend class AstSpecificDataManagingClassStorageClass;
  323831             :     public:
  323832             :       /*! \brief IR node constructor to support AST File I/O */
  323833             :           SgTemplateVariableSymbol( const SgTemplateVariableSymbolStorageClass& source );
  323834             : 
  323835             :  // private: // JJW hack
  323836             :        /*
  323837             :           name AST Memory Allocation Support Variables
  323838             :           Memory allocations support variables 
  323839             : 
  323840             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  323841             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  323842             :           and support the AST File I/O Mechanism.
  323843             :        */
  323844             :       /* */
  323845             : 
  323846             :     public:
  323847             : 
  323848             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  323849             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  323850             :       // virtual SgNode* addRegExpAttribute();
  323851             :       /*! \brief Support for AST matching using regular expression.
  323852             : 
  323853             :           This support is incomplete and the subject of current research to define 
  323854             :           RegEx trees to support inexact matching.
  323855             :        */
  323856             :           SgTemplateVariableSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  323857             : 
  323858             : // *** COMMON CODE SECTION ENDS HERE ***
  323859             : 
  323860             : 
  323861             : // End of memberFunctionString
  323862             : // Start of memberFunctionString
  323863             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  323864             : 
  323865             :      // the generated cast function
  323866             :      // friend ROSE_DLL_API SgTemplateVariableSymbol* isSgTemplateVariableSymbol ( SgNode* s );
  323867             : 
  323868             :           typedef SgVariableSymbol base_node_type;
  323869             : 
  323870             : 
  323871             : // End of memberFunctionString
  323872             : // Start of memberFunctionString
  323873             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  323874             : 
  323875             :           SgName get_name() const override;
  323876             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  323877             : 
  323878             : 
  323879             : // End of memberFunctionString
  323880             : // Start of memberFunctionString
  323881             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  323882             : 
  323883             :        // DQ (3/23/2017): ROSETTA macro expansion
  323884             :           SgType* get_type() const override;
  323885             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  323886             : 
  323887             : 
  323888             : // End of memberFunctionString
  323889             : 
  323890             : 
  323891             :      public: 
  323892             :          virtual ~SgTemplateVariableSymbol();
  323893             : 
  323894             : 
  323895             :      public: 
  323896             :          SgTemplateVariableSymbol(SgInitializedName* declaration = NULL); 
  323897             : 
  323898             :     protected:
  323899             : 
  323900             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateVariableSymbol>;
  323901             : 
  323902             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323903             : 
  323904             : 
  323905             :    };
  323906             : #endif
  323907             : 
  323908             : // postdeclarations for SgTemplateVariableSymbol
  323909             : 
  323910             : /* #line 323911 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323911             : 
  323912             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  323913             : 
  323914             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323915             : 
  323916             : 
  323917             : /* #line 323918 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323918             : 
  323919             : 
  323920             : 
  323921             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323922             : 
  323923             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  323924             : //      This code is automatically generated for each 
  323925             : //      terminal and non-terminal within the defined 
  323926             : //      grammar.  There is a simple way to change the 
  323927             : //      code to fix bugs etc.  See the ROSE README file
  323928             : //      for directions.
  323929             : 
  323930             : // tps: (02/22/2010): Adding DLL export requirements
  323931             : #include "rosedll.h"
  323932             : 
  323933             : // predeclarations for SgNonrealSymbol
  323934             : 
  323935             : /* #line 323936 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323936             : 
  323937             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  323938             : 
  323939             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  323940             : 
  323941             : #if 1
  323942             : // Class Definition for SgNonrealSymbol
  323943             : class ROSE_DLL_API SgNonrealSymbol  : public SgSymbol
  323944             :    {
  323945             :      public:
  323946             : 
  323947             : 
  323948             : /* #line 323949 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  323949             : 
  323950             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  323951             : // Start of memberFunctionString
  323952             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  323953             : 
  323954             : // *** COMMON CODE SECTION BEGINS HERE ***
  323955             : 
  323956             :     public:
  323957             : 
  323958             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  323959             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  323960             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  323961             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  323962             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  323963             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  323964             : 
  323965             :       /*! \brief returns a string representing the class name */
  323966             :           virtual std::string class_name() const override;
  323967             : 
  323968             :       /*! \brief returns new style SageIII enum values */
  323969             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  323970             : 
  323971             :       /*! \brief static variant value */
  323972             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  323973             :        // static const VariantT static_variant = V_SgNonrealSymbol;
  323974             :           enum { static_variant = V_SgNonrealSymbol };
  323975             : 
  323976             :        /* the generated cast function */
  323977             :       /*! \brief Casts pointer from base class to derived class */
  323978             :           ROSE_DLL_API friend       SgNonrealSymbol* isSgNonrealSymbol(       SgNode * s );
  323979             : 
  323980             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  323981             :           ROSE_DLL_API friend const SgNonrealSymbol* isSgNonrealSymbol( const SgNode * s );
  323982             : 
  323983             :      // ******************************************
  323984             :      // * Memory Pool / New / Delete
  323985             :      // ******************************************
  323986             : 
  323987             :      public:
  323988             :           /// \private
  323989             :           static const unsigned pool_size; //
  323990             :           /// \private
  323991             :           static std::vector<unsigned char *> pools; //
  323992             :           /// \private
  323993             :           static SgNonrealSymbol * next_node; // 
  323994             : 
  323995             :           /// \private
  323996             :           static unsigned long initializeStorageClassArray(SgNonrealSymbolStorageClass *); //
  323997             : 
  323998             :           /// \private
  323999             :           static void clearMemoryPool(); //
  324000             :           static void deleteMemoryPool(); //
  324001             : 
  324002             :           /// \private
  324003             :           static void extendMemoryPoolForFileIO(); //
  324004             : 
  324005             :           /// \private
  324006             :           static SgNonrealSymbol * getPointerFromGlobalIndex(unsigned long); //
  324007             :           /// \private
  324008             :           static SgNonrealSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  324009             : 
  324010             :           /// \private
  324011             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  324012             :           /// \private
  324013             :           static void resetValidFreepointers(); //
  324014             :           /// \private
  324015             :           static unsigned long getNumberOfLastValidPointer(); //
  324016             : 
  324017             : 
  324018             : #if defined(INLINE_FUNCTIONS)
  324019             :       /*! \brief returns pointer to newly allocated IR node */
  324020             :           inline void *operator new (size_t size);
  324021             : #else
  324022             :       /*! \brief returns pointer to newly allocated IR node */
  324023             :           void *operator new (size_t size);
  324024             : #endif
  324025             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  324026             :           void operator delete (void* pointer, size_t size);
  324027             : 
  324028             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  324029       10160 :           void operator delete (void* pointer)
  324030             :              {
  324031             :             // This is the generated delete operator...
  324032       10160 :                SgNonrealSymbol::operator delete (pointer,sizeof(SgNonrealSymbol));
  324033             :              }
  324034             : 
  324035             :       /*! \brief Returns the total number of IR nodes of this type */
  324036             :           static size_t numberOfNodes();
  324037             : 
  324038             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  324039             :           static size_t memoryUsage();
  324040             : 
  324041             :       // End of scope which started in IR nodes specific code 
  324042             :       /* */
  324043             : 
  324044             :       /* name Internal Functions
  324045             :           \brief Internal functions ... incomplete-documentation
  324046             : 
  324047             :           These functions have been made public as part of the design, but they are suggested for internal use 
  324048             :           or by particularly knowledgeable users for specialized tools or applications.
  324049             : 
  324050             :           \internal We could not make these private because they are required by user for special purposes. And 
  324051             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  324052             :          
  324053             :        */
  324054             : 
  324055             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  324056             :        // overridden in every class by *generated* implementation
  324057             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  324058             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  324059             :        // MS: 06/28/02 container of names of variables or container indices 
  324060             :        // used used in the traversal to access AST successor nodes
  324061             :        // overridden in every class by *generated* implementation
  324062             :       /*! \brief container of names of variables or container indices used used in the traversal
  324063             :           to access AST successor nodes overridden in every class by *generated* implementation */
  324064             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  324065             : 
  324066             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  324067             :        // than all the vector copies. The implementation for these functions is generated for each class.
  324068             :       /*! \brief return number of children in the traversal successor list */
  324069             :           virtual size_t get_numberOfTraversalSuccessors() override;
  324070             :       /*! \brief index-based access to traversal successors by index number */
  324071             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  324072             :       /*! \brief index-based access to traversal successors by child node */
  324073             :           virtual size_t get_childIndex(SgNode *child) override;
  324074             : 
  324075             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  324076             :        // MS: 08/16/2002 method for generating RTI information
  324077             :       /*! \brief return C++ Runtime-Time-Information */
  324078             :           virtual RTIReturnType roseRTI() override;
  324079             : #endif
  324080             :       /* */
  324081             : 
  324082             : 
  324083             : 
  324084             :       /* name Deprecated Functions
  324085             :           \brief Deprecated functions ... incomplete-documentation
  324086             : 
  324087             :           These functions have been deprecated from use.
  324088             :        */
  324089             :       /* */
  324090             : 
  324091             :       /*! returns a C style string (char*) representing the class name */
  324092             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  324093             : 
  324094             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  324095             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  324096             : #if 0
  324097             :       /*! returns old style Sage II enum values */
  324098             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  324099             :       /*! returns old style Sage II enum values */
  324100             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  324101             : #endif
  324102             :       /* */
  324103             : 
  324104             : 
  324105             : 
  324106             : 
  324107             :      public:
  324108             :       /* name Traversal Support Functions
  324109             :           \brief Traversal support functions ... incomplete-documentation
  324110             : 
  324111             :           These functions have been made public as part of the design, but they are suggested for internal use 
  324112             :           or by particularly knowledgable users for specialized tools or applications.
  324113             :        */
  324114             :       /* */
  324115             : 
  324116             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  324117             :        // (inferior to ROSE traversal mechanism, experimental).
  324118             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  324119             :        */
  324120             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  324121             : 
  324122             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  324123             :       /*! \brief support for the classic visitor pattern done in GoF */
  324124             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  324125             : 
  324126             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  324127             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  324128             :        */
  324129             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  324130             : 
  324131             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  324132             :        */
  324133             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  324134             : 
  324135             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  324136             :        // This traversal helps support internal tools that call static member functions.
  324137             :        // note: this function operates on the memory pools.
  324138             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  324139             :        */
  324140             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  324141             :       /* */
  324142             : 
  324143             : 
  324144             :      public:
  324145             :       /* name Memory Allocation Functions
  324146             :           \brief Memory allocations functions ... incomplete-documentation
  324147             : 
  324148             :           These functions have been made public as part of the design, but they are suggested for internal use 
  324149             :           or by particularly knowledgable users for specialized tools or applications.
  324150             :        */
  324151             :       /* */
  324152             : 
  324153             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  324154             : 
  324155             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  324156             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  324157             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  324158             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  324159             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  324160             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  324161             :           being used with the AST File I/O mechanism.
  324162             :        */
  324163             :           virtual bool isInMemoryPool() override;
  324164             : 
  324165             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  324166             : 
  324167             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  324168             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  324169             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  324170             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  324171             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  324172             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  324173             :           being used with the AST File I/O mechanism.
  324174             :        */
  324175             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  324176             : 
  324177             :       // DQ (4/30/2006): Modified to be a const function.
  324178             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  324179             : 
  324180             :           This functions is part of general support for many possible tools to operate 
  324181             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  324182             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  324183             :           less than the set of pointers used by the AST file I/O. This is part of
  324184             :           work implemented by Andreas, and support tools such as the AST graph generation.
  324185             : 
  324186             :           \warning This function can return unexpected data members and thus the 
  324187             :                    order and the number of elements is unpredicable and subject 
  324188             :                    to change.
  324189             : 
  324190             :           \returns STL vector of pairs of SgNode* and strings
  324191             :        */
  324192             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  324193             : 
  324194             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  324195             : 
  324196             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  324197             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  324198             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  324199             : 
  324200             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  324201             :                    and subject to change.
  324202             :        */
  324203             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  324204             : 
  324205             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  324206             : 
  324207             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  324208             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  324209             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  324210             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  324211             : 
  324212             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  324213             : 
  324214             :           \returns long
  324215             :        */
  324216             :           virtual long getChildIndex( SgNode* childNode ) const override;
  324217             : 
  324218             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  324219             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  324220             :       /* \brief Constructor for use by AST File I/O Mechanism
  324221             : 
  324222             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  324223             :           which obtained via fast binary file I/O from disk.
  324224             :        */
  324225             :        // SgNonrealSymbol( SgNonrealSymbolStorageClass& source );
  324226             : 
  324227             : 
  324228             : 
  324229             : 
  324230             : 
  324231             :  // JH (10/24/2005): methods added to support the ast file IO
  324232             :     private:
  324233             : 
  324234             :       /* name AST Memory Allocation Support Functions
  324235             :           \brief Memory allocations support....
  324236             : 
  324237             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  324238             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  324239             :           and support the AST File I/O Mechanism.
  324240             :        */
  324241             :       /* */
  324242             : 
  324243             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  324244             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  324245             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  324246             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  324247             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  324248             :           a correspinding one in the AST_FILE_IO class!
  324249             :        */
  324250             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  324251             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  324252             :       /* \brief Typedef used for low level memory access.
  324253             :        */
  324254             :        // typedef unsigned char* TestType;
  324255             : 
  324256             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  324257             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  324258             :       /* \brief Typedef used to hold memory addresses as values.
  324259             :        */
  324260             :        // typedef unsigned long  AddressType;
  324261             : 
  324262             : 
  324263             : 
  324264             :        // necessary, to have direct access to the p_freepointer and the private methods !
  324265             :       /*! \brief friend class declaration to support AST File I/O */
  324266             :           friend class AST_FILE_IO;
  324267             : 
  324268             :       /*! \brief friend class declaration to support AST File I/O */
  324269             :           friend class SgNonrealSymbolStorageClass;
  324270             : 
  324271             :       /*! \brief friend class declaration to support AST File I/O */
  324272             :           friend class AstSpecificDataManagingClass;
  324273             : 
  324274             :       /*! \brief friend class declaration to support AST File I/O */
  324275             :           friend class AstSpecificDataManagingClassStorageClass;
  324276             :     public:
  324277             :       /*! \brief IR node constructor to support AST File I/O */
  324278             :           SgNonrealSymbol( const SgNonrealSymbolStorageClass& source );
  324279             : 
  324280             :  // private: // JJW hack
  324281             :        /*
  324282             :           name AST Memory Allocation Support Variables
  324283             :           Memory allocations support variables 
  324284             : 
  324285             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  324286             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  324287             :           and support the AST File I/O Mechanism.
  324288             :        */
  324289             :       /* */
  324290             : 
  324291             :     public:
  324292             : 
  324293             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  324294             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  324295             :       // virtual SgNode* addRegExpAttribute();
  324296             :       /*! \brief Support for AST matching using regular expression.
  324297             : 
  324298             :           This support is incomplete and the subject of current research to define 
  324299             :           RegEx trees to support inexact matching.
  324300             :        */
  324301             :           SgNonrealSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  324302             : 
  324303             : // *** COMMON CODE SECTION ENDS HERE ***
  324304             : 
  324305             : 
  324306             : // End of memberFunctionString
  324307             : // Start of memberFunctionString
  324308             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  324309             : 
  324310             :      // the generated cast function
  324311             :      // friend ROSE_DLL_API SgNonrealSymbol* isSgNonrealSymbol ( SgNode* s );
  324312             : 
  324313             :           typedef SgSymbol base_node_type;
  324314             : 
  324315             : 
  324316             : // End of memberFunctionString
  324317             : // Start of memberFunctionString
  324318             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  324319             : 
  324320             :           SgName get_name() const override;
  324321             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  324322             : 
  324323             : 
  324324             : // End of memberFunctionString
  324325             : // Start of memberFunctionString
  324326             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  324327             : 
  324328             :        // DQ (3/23/2017): ROSETTA macro expansion
  324329             :           SgType* get_type() const override;
  324330             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  324331             : 
  324332             : 
  324333             : // End of memberFunctionString
  324334             : 
  324335             :      public: 
  324336             :          SgNonrealDecl* get_declaration() const;
  324337             :          void set_declaration(SgNonrealDecl* declaration);
  324338             : 
  324339             : 
  324340             :      public: 
  324341             :          virtual ~SgNonrealSymbol();
  324342             : 
  324343             : 
  324344             :      public: 
  324345             :          SgNonrealSymbol(SgNonrealDecl* declaration = NULL); 
  324346             : 
  324347             :     protected:
  324348             : // Start of memberFunctionString
  324349             : SgNonrealDecl* p_declaration;
  324350             :           
  324351             : // End of memberFunctionString
  324352             : 
  324353             :     friend struct Rose::Traits::generated::describe_node_t<SgNonrealSymbol>;
  324354             :     friend struct Rose::Traits::generated::describe_field_t<SgNonrealSymbol, SgNonrealDecl*,&SgNonrealSymbol::p_declaration>;
  324355             : 
  324356             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324357             : 
  324358             : 
  324359             :    };
  324360             : #endif
  324361             : 
  324362             : // postdeclarations for SgNonrealSymbol
  324363             : 
  324364             : /* #line 324365 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324365             : 
  324366             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  324367             : 
  324368             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324369             : 
  324370             : 
  324371             : /* #line 324372 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324372             : 
  324373             : 
  324374             : 
  324375             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324376             : 
  324377             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  324378             : //      This code is automatically generated for each 
  324379             : //      terminal and non-terminal within the defined 
  324380             : //      grammar.  There is a simple way to change the 
  324381             : //      code to fix bugs etc.  See the ROSE README file
  324382             : //      for directions.
  324383             : 
  324384             : // tps: (02/22/2010): Adding DLL export requirements
  324385             : #include "rosedll.h"
  324386             : 
  324387             : // predeclarations for SgFunctionSymbol
  324388             : 
  324389             : /* #line 324390 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324390             : 
  324391             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  324392             : 
  324393             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324394             : 
  324395             : #if 1
  324396             : // Class Definition for SgFunctionSymbol
  324397             : class ROSE_DLL_API SgFunctionSymbol  : public SgSymbol
  324398             :    {
  324399             :      public:
  324400             : 
  324401             : 
  324402             : /* #line 324403 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324403             : 
  324404             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  324405             : // Start of memberFunctionString
  324406             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  324407             : 
  324408             : // *** COMMON CODE SECTION BEGINS HERE ***
  324409             : 
  324410             :     public:
  324411             : 
  324412             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  324413             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  324414             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  324415             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  324416             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  324417             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  324418             : 
  324419             :       /*! \brief returns a string representing the class name */
  324420             :           virtual std::string class_name() const override;
  324421             : 
  324422             :       /*! \brief returns new style SageIII enum values */
  324423             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  324424             : 
  324425             :       /*! \brief static variant value */
  324426             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  324427             :        // static const VariantT static_variant = V_SgFunctionSymbol;
  324428             :           enum { static_variant = V_SgFunctionSymbol };
  324429             : 
  324430             :        /* the generated cast function */
  324431             :       /*! \brief Casts pointer from base class to derived class */
  324432             :           ROSE_DLL_API friend       SgFunctionSymbol* isSgFunctionSymbol(       SgNode * s );
  324433             : 
  324434             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  324435             :           ROSE_DLL_API friend const SgFunctionSymbol* isSgFunctionSymbol( const SgNode * s );
  324436             : 
  324437             :      // ******************************************
  324438             :      // * Memory Pool / New / Delete
  324439             :      // ******************************************
  324440             : 
  324441             :      public:
  324442             :           /// \private
  324443             :           static const unsigned pool_size; //
  324444             :           /// \private
  324445             :           static std::vector<unsigned char *> pools; //
  324446             :           /// \private
  324447             :           static SgFunctionSymbol * next_node; // 
  324448             : 
  324449             :           /// \private
  324450             :           static unsigned long initializeStorageClassArray(SgFunctionSymbolStorageClass *); //
  324451             : 
  324452             :           /// \private
  324453             :           static void clearMemoryPool(); //
  324454             :           static void deleteMemoryPool(); //
  324455             : 
  324456             :           /// \private
  324457             :           static void extendMemoryPoolForFileIO(); //
  324458             : 
  324459             :           /// \private
  324460             :           static SgFunctionSymbol * getPointerFromGlobalIndex(unsigned long); //
  324461             :           /// \private
  324462             :           static SgFunctionSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  324463             : 
  324464             :           /// \private
  324465             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  324466             :           /// \private
  324467             :           static void resetValidFreepointers(); //
  324468             :           /// \private
  324469             :           static unsigned long getNumberOfLastValidPointer(); //
  324470             : 
  324471             : 
  324472             : #if defined(INLINE_FUNCTIONS)
  324473             :       /*! \brief returns pointer to newly allocated IR node */
  324474             :           inline void *operator new (size_t size);
  324475             : #else
  324476             :       /*! \brief returns pointer to newly allocated IR node */
  324477             :           void *operator new (size_t size);
  324478             : #endif
  324479             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  324480             :           void operator delete (void* pointer, size_t size);
  324481             : 
  324482             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  324483       11911 :           void operator delete (void* pointer)
  324484             :              {
  324485             :             // This is the generated delete operator...
  324486       11911 :                SgFunctionSymbol::operator delete (pointer,sizeof(SgFunctionSymbol));
  324487             :              }
  324488             : 
  324489             :       /*! \brief Returns the total number of IR nodes of this type */
  324490             :           static size_t numberOfNodes();
  324491             : 
  324492             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  324493             :           static size_t memoryUsage();
  324494             : 
  324495             :       // End of scope which started in IR nodes specific code 
  324496             :       /* */
  324497             : 
  324498             :       /* name Internal Functions
  324499             :           \brief Internal functions ... incomplete-documentation
  324500             : 
  324501             :           These functions have been made public as part of the design, but they are suggested for internal use 
  324502             :           or by particularly knowledgeable users for specialized tools or applications.
  324503             : 
  324504             :           \internal We could not make these private because they are required by user for special purposes. And 
  324505             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  324506             :          
  324507             :        */
  324508             : 
  324509             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  324510             :        // overridden in every class by *generated* implementation
  324511             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  324512             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  324513             :        // MS: 06/28/02 container of names of variables or container indices 
  324514             :        // used used in the traversal to access AST successor nodes
  324515             :        // overridden in every class by *generated* implementation
  324516             :       /*! \brief container of names of variables or container indices used used in the traversal
  324517             :           to access AST successor nodes overridden in every class by *generated* implementation */
  324518             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  324519             : 
  324520             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  324521             :        // than all the vector copies. The implementation for these functions is generated for each class.
  324522             :       /*! \brief return number of children in the traversal successor list */
  324523             :           virtual size_t get_numberOfTraversalSuccessors() override;
  324524             :       /*! \brief index-based access to traversal successors by index number */
  324525             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  324526             :       /*! \brief index-based access to traversal successors by child node */
  324527             :           virtual size_t get_childIndex(SgNode *child) override;
  324528             : 
  324529             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  324530             :        // MS: 08/16/2002 method for generating RTI information
  324531             :       /*! \brief return C++ Runtime-Time-Information */
  324532             :           virtual RTIReturnType roseRTI() override;
  324533             : #endif
  324534             :       /* */
  324535             : 
  324536             : 
  324537             : 
  324538             :       /* name Deprecated Functions
  324539             :           \brief Deprecated functions ... incomplete-documentation
  324540             : 
  324541             :           These functions have been deprecated from use.
  324542             :        */
  324543             :       /* */
  324544             : 
  324545             :       /*! returns a C style string (char*) representing the class name */
  324546             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  324547             : 
  324548             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  324549             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  324550             : #if 0
  324551             :       /*! returns old style Sage II enum values */
  324552             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  324553             :       /*! returns old style Sage II enum values */
  324554             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  324555             : #endif
  324556             :       /* */
  324557             : 
  324558             : 
  324559             : 
  324560             : 
  324561             :      public:
  324562             :       /* name Traversal Support Functions
  324563             :           \brief Traversal support functions ... incomplete-documentation
  324564             : 
  324565             :           These functions have been made public as part of the design, but they are suggested for internal use 
  324566             :           or by particularly knowledgable users for specialized tools or applications.
  324567             :        */
  324568             :       /* */
  324569             : 
  324570             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  324571             :        // (inferior to ROSE traversal mechanism, experimental).
  324572             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  324573             :        */
  324574             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  324575             : 
  324576             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  324577             :       /*! \brief support for the classic visitor pattern done in GoF */
  324578             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  324579             : 
  324580             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  324581             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  324582             :        */
  324583             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  324584             : 
  324585             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  324586             :        */
  324587             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  324588             : 
  324589             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  324590             :        // This traversal helps support internal tools that call static member functions.
  324591             :        // note: this function operates on the memory pools.
  324592             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  324593             :        */
  324594             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  324595             :       /* */
  324596             : 
  324597             : 
  324598             :      public:
  324599             :       /* name Memory Allocation Functions
  324600             :           \brief Memory allocations functions ... incomplete-documentation
  324601             : 
  324602             :           These functions have been made public as part of the design, but they are suggested for internal use 
  324603             :           or by particularly knowledgable users for specialized tools or applications.
  324604             :        */
  324605             :       /* */
  324606             : 
  324607             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  324608             : 
  324609             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  324610             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  324611             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  324612             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  324613             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  324614             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  324615             :           being used with the AST File I/O mechanism.
  324616             :        */
  324617             :           virtual bool isInMemoryPool() override;
  324618             : 
  324619             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  324620             : 
  324621             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  324622             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  324623             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  324624             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  324625             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  324626             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  324627             :           being used with the AST File I/O mechanism.
  324628             :        */
  324629             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  324630             : 
  324631             :       // DQ (4/30/2006): Modified to be a const function.
  324632             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  324633             : 
  324634             :           This functions is part of general support for many possible tools to operate 
  324635             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  324636             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  324637             :           less than the set of pointers used by the AST file I/O. This is part of
  324638             :           work implemented by Andreas, and support tools such as the AST graph generation.
  324639             : 
  324640             :           \warning This function can return unexpected data members and thus the 
  324641             :                    order and the number of elements is unpredicable and subject 
  324642             :                    to change.
  324643             : 
  324644             :           \returns STL vector of pairs of SgNode* and strings
  324645             :        */
  324646             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  324647             : 
  324648             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  324649             : 
  324650             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  324651             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  324652             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  324653             : 
  324654             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  324655             :                    and subject to change.
  324656             :        */
  324657             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  324658             : 
  324659             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  324660             : 
  324661             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  324662             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  324663             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  324664             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  324665             : 
  324666             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  324667             : 
  324668             :           \returns long
  324669             :        */
  324670             :           virtual long getChildIndex( SgNode* childNode ) const override;
  324671             : 
  324672             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  324673             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  324674             :       /* \brief Constructor for use by AST File I/O Mechanism
  324675             : 
  324676             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  324677             :           which obtained via fast binary file I/O from disk.
  324678             :        */
  324679             :        // SgFunctionSymbol( SgFunctionSymbolStorageClass& source );
  324680             : 
  324681             : 
  324682             : 
  324683             : 
  324684             : 
  324685             :  // JH (10/24/2005): methods added to support the ast file IO
  324686             :     private:
  324687             : 
  324688             :       /* name AST Memory Allocation Support Functions
  324689             :           \brief Memory allocations support....
  324690             : 
  324691             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  324692             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  324693             :           and support the AST File I/O Mechanism.
  324694             :        */
  324695             :       /* */
  324696             : 
  324697             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  324698             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  324699             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  324700             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  324701             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  324702             :           a correspinding one in the AST_FILE_IO class!
  324703             :        */
  324704             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  324705             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  324706             :       /* \brief Typedef used for low level memory access.
  324707             :        */
  324708             :        // typedef unsigned char* TestType;
  324709             : 
  324710             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  324711             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  324712             :       /* \brief Typedef used to hold memory addresses as values.
  324713             :        */
  324714             :        // typedef unsigned long  AddressType;
  324715             : 
  324716             : 
  324717             : 
  324718             :        // necessary, to have direct access to the p_freepointer and the private methods !
  324719             :       /*! \brief friend class declaration to support AST File I/O */
  324720             :           friend class AST_FILE_IO;
  324721             : 
  324722             :       /*! \brief friend class declaration to support AST File I/O */
  324723             :           friend class SgFunctionSymbolStorageClass;
  324724             : 
  324725             :       /*! \brief friend class declaration to support AST File I/O */
  324726             :           friend class AstSpecificDataManagingClass;
  324727             : 
  324728             :       /*! \brief friend class declaration to support AST File I/O */
  324729             :           friend class AstSpecificDataManagingClassStorageClass;
  324730             :     public:
  324731             :       /*! \brief IR node constructor to support AST File I/O */
  324732             :           SgFunctionSymbol( const SgFunctionSymbolStorageClass& source );
  324733             : 
  324734             :  // private: // JJW hack
  324735             :        /*
  324736             :           name AST Memory Allocation Support Variables
  324737             :           Memory allocations support variables 
  324738             : 
  324739             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  324740             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  324741             :           and support the AST File I/O Mechanism.
  324742             :        */
  324743             :       /* */
  324744             : 
  324745             :     public:
  324746             : 
  324747             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  324748             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  324749             :       // virtual SgNode* addRegExpAttribute();
  324750             :       /*! \brief Support for AST matching using regular expression.
  324751             : 
  324752             :           This support is incomplete and the subject of current research to define 
  324753             :           RegEx trees to support inexact matching.
  324754             :        */
  324755             :           SgFunctionSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  324756             : 
  324757             : // *** COMMON CODE SECTION ENDS HERE ***
  324758             : 
  324759             : 
  324760             : // End of memberFunctionString
  324761             : // Start of memberFunctionString
  324762             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  324763             : 
  324764             :      // the generated cast function
  324765             :      // friend ROSE_DLL_API SgFunctionSymbol* isSgFunctionSymbol ( SgNode* s );
  324766             : 
  324767             :           typedef SgSymbol base_node_type;
  324768             : 
  324769             : 
  324770             : // End of memberFunctionString
  324771             : // Start of memberFunctionString
  324772             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  324773             : 
  324774             :           SgName get_name() const override;
  324775             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  324776             : 
  324777             : 
  324778             : // End of memberFunctionString
  324779             : // Start of memberFunctionString
  324780             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  324781             : 
  324782             :        // DQ (3/23/2017): ROSETTA macro expansion
  324783             :           SgType* get_type() const override;
  324784             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  324785             : 
  324786             : 
  324787             : // End of memberFunctionString
  324788             : 
  324789             :      public: 
  324790             :          SgFunctionDeclaration* get_declaration() const;
  324791             :          void set_declaration(SgFunctionDeclaration* declaration);
  324792             : 
  324793             : 
  324794             :      public: 
  324795             :          virtual ~SgFunctionSymbol();
  324796             : 
  324797             : 
  324798             :      public: 
  324799             :          SgFunctionSymbol(SgFunctionDeclaration* declaration = NULL); 
  324800             : 
  324801             :     protected:
  324802             : // Start of memberFunctionString
  324803             : SgFunctionDeclaration* p_declaration;
  324804             :           
  324805             : // End of memberFunctionString
  324806             : 
  324807             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionSymbol>;
  324808             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionSymbol, SgFunctionDeclaration*,&SgFunctionSymbol::p_declaration>;
  324809             : 
  324810             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324811             : 
  324812             : 
  324813             :    };
  324814             : #endif
  324815             : 
  324816             : // postdeclarations for SgFunctionSymbol
  324817             : 
  324818             : /* #line 324819 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324819             : 
  324820             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  324821             : 
  324822             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324823             : 
  324824             : 
  324825             : /* #line 324826 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324826             : 
  324827             : 
  324828             : 
  324829             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324830             : 
  324831             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  324832             : //      This code is automatically generated for each 
  324833             : //      terminal and non-terminal within the defined 
  324834             : //      grammar.  There is a simple way to change the 
  324835             : //      code to fix bugs etc.  See the ROSE README file
  324836             : //      for directions.
  324837             : 
  324838             : // tps: (02/22/2010): Adding DLL export requirements
  324839             : #include "rosedll.h"
  324840             : 
  324841             : // predeclarations for SgMemberFunctionSymbol
  324842             : 
  324843             : /* #line 324844 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324844             : 
  324845             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  324846             : 
  324847             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  324848             : 
  324849             : #if 1
  324850             : // Class Definition for SgMemberFunctionSymbol
  324851             : class ROSE_DLL_API SgMemberFunctionSymbol  : public SgFunctionSymbol
  324852             :    {
  324853             :      public:
  324854             : 
  324855             : 
  324856             : /* #line 324857 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  324857             : 
  324858             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  324859             : // Start of memberFunctionString
  324860             : /* #line 53 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  324861             : 
  324862             :           SgMemberFunctionDeclaration* get_declaration() const;
  324863             : 
  324864             :        // DQ (6/10/2007): This is now depricated in favor of a more uniform implementation for all symbols.
  324865             :           SgClassDefinition *get_scope() const override ROSE_DEPRECATED_FUNCTION;
  324866             : 
  324867             :        // SgNode* get_symbol_basis() const; // from DECLARATION
  324868             : 
  324869             : 
  324870             : // End of memberFunctionString
  324871             : // Start of memberFunctionString
  324872             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  324873             : 
  324874             : // *** COMMON CODE SECTION BEGINS HERE ***
  324875             : 
  324876             :     public:
  324877             : 
  324878             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  324879             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  324880             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  324881             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  324882             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  324883             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  324884             : 
  324885             :       /*! \brief returns a string representing the class name */
  324886             :           virtual std::string class_name() const override;
  324887             : 
  324888             :       /*! \brief returns new style SageIII enum values */
  324889             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  324890             : 
  324891             :       /*! \brief static variant value */
  324892             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  324893             :        // static const VariantT static_variant = V_SgMemberFunctionSymbol;
  324894             :           enum { static_variant = V_SgMemberFunctionSymbol };
  324895             : 
  324896             :        /* the generated cast function */
  324897             :       /*! \brief Casts pointer from base class to derived class */
  324898             :           ROSE_DLL_API friend       SgMemberFunctionSymbol* isSgMemberFunctionSymbol(       SgNode * s );
  324899             : 
  324900             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  324901             :           ROSE_DLL_API friend const SgMemberFunctionSymbol* isSgMemberFunctionSymbol( const SgNode * s );
  324902             : 
  324903             :      // ******************************************
  324904             :      // * Memory Pool / New / Delete
  324905             :      // ******************************************
  324906             : 
  324907             :      public:
  324908             :           /// \private
  324909             :           static const unsigned pool_size; //
  324910             :           /// \private
  324911             :           static std::vector<unsigned char *> pools; //
  324912             :           /// \private
  324913             :           static SgMemberFunctionSymbol * next_node; // 
  324914             : 
  324915             :           /// \private
  324916             :           static unsigned long initializeStorageClassArray(SgMemberFunctionSymbolStorageClass *); //
  324917             : 
  324918             :           /// \private
  324919             :           static void clearMemoryPool(); //
  324920             :           static void deleteMemoryPool(); //
  324921             : 
  324922             :           /// \private
  324923             :           static void extendMemoryPoolForFileIO(); //
  324924             : 
  324925             :           /// \private
  324926             :           static SgMemberFunctionSymbol * getPointerFromGlobalIndex(unsigned long); //
  324927             :           /// \private
  324928             :           static SgMemberFunctionSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  324929             : 
  324930             :           /// \private
  324931             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  324932             :           /// \private
  324933             :           static void resetValidFreepointers(); //
  324934             :           /// \private
  324935             :           static unsigned long getNumberOfLastValidPointer(); //
  324936             : 
  324937             : 
  324938             : #if defined(INLINE_FUNCTIONS)
  324939             :       /*! \brief returns pointer to newly allocated IR node */
  324940             :           inline void *operator new (size_t size);
  324941             : #else
  324942             :       /*! \brief returns pointer to newly allocated IR node */
  324943             :           void *operator new (size_t size);
  324944             : #endif
  324945             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  324946             :           void operator delete (void* pointer, size_t size);
  324947             : 
  324948             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  324949        3906 :           void operator delete (void* pointer)
  324950             :              {
  324951             :             // This is the generated delete operator...
  324952        3906 :                SgMemberFunctionSymbol::operator delete (pointer,sizeof(SgMemberFunctionSymbol));
  324953             :              }
  324954             : 
  324955             :       /*! \brief Returns the total number of IR nodes of this type */
  324956             :           static size_t numberOfNodes();
  324957             : 
  324958             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  324959             :           static size_t memoryUsage();
  324960             : 
  324961             :       // End of scope which started in IR nodes specific code 
  324962             :       /* */
  324963             : 
  324964             :       /* name Internal Functions
  324965             :           \brief Internal functions ... incomplete-documentation
  324966             : 
  324967             :           These functions have been made public as part of the design, but they are suggested for internal use 
  324968             :           or by particularly knowledgeable users for specialized tools or applications.
  324969             : 
  324970             :           \internal We could not make these private because they are required by user for special purposes. And 
  324971             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  324972             :          
  324973             :        */
  324974             : 
  324975             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  324976             :        // overridden in every class by *generated* implementation
  324977             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  324978             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  324979             :        // MS: 06/28/02 container of names of variables or container indices 
  324980             :        // used used in the traversal to access AST successor nodes
  324981             :        // overridden in every class by *generated* implementation
  324982             :       /*! \brief container of names of variables or container indices used used in the traversal
  324983             :           to access AST successor nodes overridden in every class by *generated* implementation */
  324984             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  324985             : 
  324986             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  324987             :        // than all the vector copies. The implementation for these functions is generated for each class.
  324988             :       /*! \brief return number of children in the traversal successor list */
  324989             :           virtual size_t get_numberOfTraversalSuccessors() override;
  324990             :       /*! \brief index-based access to traversal successors by index number */
  324991             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  324992             :       /*! \brief index-based access to traversal successors by child node */
  324993             :           virtual size_t get_childIndex(SgNode *child) override;
  324994             : 
  324995             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  324996             :        // MS: 08/16/2002 method for generating RTI information
  324997             :       /*! \brief return C++ Runtime-Time-Information */
  324998             :           virtual RTIReturnType roseRTI() override;
  324999             : #endif
  325000             :       /* */
  325001             : 
  325002             : 
  325003             : 
  325004             :       /* name Deprecated Functions
  325005             :           \brief Deprecated functions ... incomplete-documentation
  325006             : 
  325007             :           These functions have been deprecated from use.
  325008             :        */
  325009             :       /* */
  325010             : 
  325011             :       /*! returns a C style string (char*) representing the class name */
  325012             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  325013             : 
  325014             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  325015             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  325016             : #if 0
  325017             :       /*! returns old style Sage II enum values */
  325018             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  325019             :       /*! returns old style Sage II enum values */
  325020             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  325021             : #endif
  325022             :       /* */
  325023             : 
  325024             : 
  325025             : 
  325026             : 
  325027             :      public:
  325028             :       /* name Traversal Support Functions
  325029             :           \brief Traversal support functions ... incomplete-documentation
  325030             : 
  325031             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325032             :           or by particularly knowledgable users for specialized tools or applications.
  325033             :        */
  325034             :       /* */
  325035             : 
  325036             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  325037             :        // (inferior to ROSE traversal mechanism, experimental).
  325038             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  325039             :        */
  325040             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  325041             : 
  325042             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  325043             :       /*! \brief support for the classic visitor pattern done in GoF */
  325044             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  325045             : 
  325046             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  325047             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  325048             :        */
  325049             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  325050             : 
  325051             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  325052             :        */
  325053             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  325054             : 
  325055             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  325056             :        // This traversal helps support internal tools that call static member functions.
  325057             :        // note: this function operates on the memory pools.
  325058             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  325059             :        */
  325060             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  325061             :       /* */
  325062             : 
  325063             : 
  325064             :      public:
  325065             :       /* name Memory Allocation Functions
  325066             :           \brief Memory allocations functions ... incomplete-documentation
  325067             : 
  325068             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325069             :           or by particularly knowledgable users for specialized tools or applications.
  325070             :        */
  325071             :       /* */
  325072             : 
  325073             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  325074             : 
  325075             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  325076             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  325077             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  325078             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  325079             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  325080             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  325081             :           being used with the AST File I/O mechanism.
  325082             :        */
  325083             :           virtual bool isInMemoryPool() override;
  325084             : 
  325085             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  325086             : 
  325087             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  325088             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  325089             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  325090             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  325091             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  325092             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  325093             :           being used with the AST File I/O mechanism.
  325094             :        */
  325095             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  325096             : 
  325097             :       // DQ (4/30/2006): Modified to be a const function.
  325098             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  325099             : 
  325100             :           This functions is part of general support for many possible tools to operate 
  325101             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  325102             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  325103             :           less than the set of pointers used by the AST file I/O. This is part of
  325104             :           work implemented by Andreas, and support tools such as the AST graph generation.
  325105             : 
  325106             :           \warning This function can return unexpected data members and thus the 
  325107             :                    order and the number of elements is unpredicable and subject 
  325108             :                    to change.
  325109             : 
  325110             :           \returns STL vector of pairs of SgNode* and strings
  325111             :        */
  325112             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  325113             : 
  325114             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  325115             : 
  325116             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  325117             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  325118             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  325119             : 
  325120             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  325121             :                    and subject to change.
  325122             :        */
  325123             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  325124             : 
  325125             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  325126             : 
  325127             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  325128             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  325129             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  325130             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  325131             : 
  325132             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  325133             : 
  325134             :           \returns long
  325135             :        */
  325136             :           virtual long getChildIndex( SgNode* childNode ) const override;
  325137             : 
  325138             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  325139             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  325140             :       /* \brief Constructor for use by AST File I/O Mechanism
  325141             : 
  325142             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  325143             :           which obtained via fast binary file I/O from disk.
  325144             :        */
  325145             :        // SgMemberFunctionSymbol( SgMemberFunctionSymbolStorageClass& source );
  325146             : 
  325147             : 
  325148             : 
  325149             : 
  325150             : 
  325151             :  // JH (10/24/2005): methods added to support the ast file IO
  325152             :     private:
  325153             : 
  325154             :       /* name AST Memory Allocation Support Functions
  325155             :           \brief Memory allocations support....
  325156             : 
  325157             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  325158             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  325159             :           and support the AST File I/O Mechanism.
  325160             :        */
  325161             :       /* */
  325162             : 
  325163             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  325164             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  325165             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  325166             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  325167             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  325168             :           a correspinding one in the AST_FILE_IO class!
  325169             :        */
  325170             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  325171             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  325172             :       /* \brief Typedef used for low level memory access.
  325173             :        */
  325174             :        // typedef unsigned char* TestType;
  325175             : 
  325176             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  325177             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  325178             :       /* \brief Typedef used to hold memory addresses as values.
  325179             :        */
  325180             :        // typedef unsigned long  AddressType;
  325181             : 
  325182             : 
  325183             : 
  325184             :        // necessary, to have direct access to the p_freepointer and the private methods !
  325185             :       /*! \brief friend class declaration to support AST File I/O */
  325186             :           friend class AST_FILE_IO;
  325187             : 
  325188             :       /*! \brief friend class declaration to support AST File I/O */
  325189             :           friend class SgMemberFunctionSymbolStorageClass;
  325190             : 
  325191             :       /*! \brief friend class declaration to support AST File I/O */
  325192             :           friend class AstSpecificDataManagingClass;
  325193             : 
  325194             :       /*! \brief friend class declaration to support AST File I/O */
  325195             :           friend class AstSpecificDataManagingClassStorageClass;
  325196             :     public:
  325197             :       /*! \brief IR node constructor to support AST File I/O */
  325198             :           SgMemberFunctionSymbol( const SgMemberFunctionSymbolStorageClass& source );
  325199             : 
  325200             :  // private: // JJW hack
  325201             :        /*
  325202             :           name AST Memory Allocation Support Variables
  325203             :           Memory allocations support variables 
  325204             : 
  325205             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  325206             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  325207             :           and support the AST File I/O Mechanism.
  325208             :        */
  325209             :       /* */
  325210             : 
  325211             :     public:
  325212             : 
  325213             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  325214             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  325215             :       // virtual SgNode* addRegExpAttribute();
  325216             :       /*! \brief Support for AST matching using regular expression.
  325217             : 
  325218             :           This support is incomplete and the subject of current research to define 
  325219             :           RegEx trees to support inexact matching.
  325220             :        */
  325221             :           SgMemberFunctionSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  325222             : 
  325223             : // *** COMMON CODE SECTION ENDS HERE ***
  325224             : 
  325225             : 
  325226             : // End of memberFunctionString
  325227             : // Start of memberFunctionString
  325228             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  325229             : 
  325230             :      // the generated cast function
  325231             :      // friend ROSE_DLL_API SgMemberFunctionSymbol* isSgMemberFunctionSymbol ( SgNode* s );
  325232             : 
  325233             :           typedef SgFunctionSymbol base_node_type;
  325234             : 
  325235             : 
  325236             : // End of memberFunctionString
  325237             : // Start of memberFunctionString
  325238             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  325239             : 
  325240             :           SgName get_name() const override;
  325241             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  325242             : 
  325243             : 
  325244             : // End of memberFunctionString
  325245             : // Start of memberFunctionString
  325246             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  325247             : 
  325248             :        // DQ (3/23/2017): ROSETTA macro expansion
  325249             :           SgType* get_type() const override;
  325250             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  325251             : 
  325252             : 
  325253             : // End of memberFunctionString
  325254             : 
  325255             : 
  325256             :      public: 
  325257             :          virtual ~SgMemberFunctionSymbol();
  325258             : 
  325259             : 
  325260             :      public: 
  325261             :          SgMemberFunctionSymbol(SgFunctionDeclaration* declaration = NULL); 
  325262             : 
  325263             :     protected:
  325264             : 
  325265             :     friend struct Rose::Traits::generated::describe_node_t<SgMemberFunctionSymbol>;
  325266             : 
  325267             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325268             : 
  325269             : 
  325270             :    };
  325271             : #endif
  325272             : 
  325273             : // postdeclarations for SgMemberFunctionSymbol
  325274             : 
  325275             : /* #line 325276 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325276             : 
  325277             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  325278             : 
  325279             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325280             : 
  325281             : 
  325282             : /* #line 325283 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325283             : 
  325284             : 
  325285             : 
  325286             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325287             : 
  325288             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  325289             : //      This code is automatically generated for each 
  325290             : //      terminal and non-terminal within the defined 
  325291             : //      grammar.  There is a simple way to change the 
  325292             : //      code to fix bugs etc.  See the ROSE README file
  325293             : //      for directions.
  325294             : 
  325295             : // tps: (02/22/2010): Adding DLL export requirements
  325296             : #include "rosedll.h"
  325297             : 
  325298             : // predeclarations for SgTemplateMemberFunctionSymbol
  325299             : 
  325300             : /* #line 325301 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325301             : 
  325302             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  325303             : 
  325304             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325305             : 
  325306             : #if 1
  325307             : // Class Definition for SgTemplateMemberFunctionSymbol
  325308             : class ROSE_DLL_API SgTemplateMemberFunctionSymbol  : public SgMemberFunctionSymbol
  325309             :    {
  325310             :      public:
  325311             : 
  325312             : 
  325313             : /* #line 325314 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325314             : 
  325315             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  325316             : // Start of memberFunctionString
  325317             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  325318             : 
  325319             : // *** COMMON CODE SECTION BEGINS HERE ***
  325320             : 
  325321             :     public:
  325322             : 
  325323             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  325324             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  325325             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  325326             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  325327             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  325328             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  325329             : 
  325330             :       /*! \brief returns a string representing the class name */
  325331             :           virtual std::string class_name() const override;
  325332             : 
  325333             :       /*! \brief returns new style SageIII enum values */
  325334             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  325335             : 
  325336             :       /*! \brief static variant value */
  325337             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  325338             :        // static const VariantT static_variant = V_SgTemplateMemberFunctionSymbol;
  325339             :           enum { static_variant = V_SgTemplateMemberFunctionSymbol };
  325340             : 
  325341             :        /* the generated cast function */
  325342             :       /*! \brief Casts pointer from base class to derived class */
  325343             :           ROSE_DLL_API friend       SgTemplateMemberFunctionSymbol* isSgTemplateMemberFunctionSymbol(       SgNode * s );
  325344             : 
  325345             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  325346             :           ROSE_DLL_API friend const SgTemplateMemberFunctionSymbol* isSgTemplateMemberFunctionSymbol( const SgNode * s );
  325347             : 
  325348             :      // ******************************************
  325349             :      // * Memory Pool / New / Delete
  325350             :      // ******************************************
  325351             : 
  325352             :      public:
  325353             :           /// \private
  325354             :           static const unsigned pool_size; //
  325355             :           /// \private
  325356             :           static std::vector<unsigned char *> pools; //
  325357             :           /// \private
  325358             :           static SgTemplateMemberFunctionSymbol * next_node; // 
  325359             : 
  325360             :           /// \private
  325361             :           static unsigned long initializeStorageClassArray(SgTemplateMemberFunctionSymbolStorageClass *); //
  325362             : 
  325363             :           /// \private
  325364             :           static void clearMemoryPool(); //
  325365             :           static void deleteMemoryPool(); //
  325366             : 
  325367             :           /// \private
  325368             :           static void extendMemoryPoolForFileIO(); //
  325369             : 
  325370             :           /// \private
  325371             :           static SgTemplateMemberFunctionSymbol * getPointerFromGlobalIndex(unsigned long); //
  325372             :           /// \private
  325373             :           static SgTemplateMemberFunctionSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  325374             : 
  325375             :           /// \private
  325376             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  325377             :           /// \private
  325378             :           static void resetValidFreepointers(); //
  325379             :           /// \private
  325380             :           static unsigned long getNumberOfLastValidPointer(); //
  325381             : 
  325382             : 
  325383             : #if defined(INLINE_FUNCTIONS)
  325384             :       /*! \brief returns pointer to newly allocated IR node */
  325385             :           inline void *operator new (size_t size);
  325386             : #else
  325387             :       /*! \brief returns pointer to newly allocated IR node */
  325388             :           void *operator new (size_t size);
  325389             : #endif
  325390             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  325391             :           void operator delete (void* pointer, size_t size);
  325392             : 
  325393             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  325394        2094 :           void operator delete (void* pointer)
  325395             :              {
  325396             :             // This is the generated delete operator...
  325397        2094 :                SgTemplateMemberFunctionSymbol::operator delete (pointer,sizeof(SgTemplateMemberFunctionSymbol));
  325398             :              }
  325399             : 
  325400             :       /*! \brief Returns the total number of IR nodes of this type */
  325401             :           static size_t numberOfNodes();
  325402             : 
  325403             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  325404             :           static size_t memoryUsage();
  325405             : 
  325406             :       // End of scope which started in IR nodes specific code 
  325407             :       /* */
  325408             : 
  325409             :       /* name Internal Functions
  325410             :           \brief Internal functions ... incomplete-documentation
  325411             : 
  325412             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325413             :           or by particularly knowledgeable users for specialized tools or applications.
  325414             : 
  325415             :           \internal We could not make these private because they are required by user for special purposes. And 
  325416             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  325417             :          
  325418             :        */
  325419             : 
  325420             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  325421             :        // overridden in every class by *generated* implementation
  325422             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  325423             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  325424             :        // MS: 06/28/02 container of names of variables or container indices 
  325425             :        // used used in the traversal to access AST successor nodes
  325426             :        // overridden in every class by *generated* implementation
  325427             :       /*! \brief container of names of variables or container indices used used in the traversal
  325428             :           to access AST successor nodes overridden in every class by *generated* implementation */
  325429             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  325430             : 
  325431             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  325432             :        // than all the vector copies. The implementation for these functions is generated for each class.
  325433             :       /*! \brief return number of children in the traversal successor list */
  325434             :           virtual size_t get_numberOfTraversalSuccessors() override;
  325435             :       /*! \brief index-based access to traversal successors by index number */
  325436             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  325437             :       /*! \brief index-based access to traversal successors by child node */
  325438             :           virtual size_t get_childIndex(SgNode *child) override;
  325439             : 
  325440             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  325441             :        // MS: 08/16/2002 method for generating RTI information
  325442             :       /*! \brief return C++ Runtime-Time-Information */
  325443             :           virtual RTIReturnType roseRTI() override;
  325444             : #endif
  325445             :       /* */
  325446             : 
  325447             : 
  325448             : 
  325449             :       /* name Deprecated Functions
  325450             :           \brief Deprecated functions ... incomplete-documentation
  325451             : 
  325452             :           These functions have been deprecated from use.
  325453             :        */
  325454             :       /* */
  325455             : 
  325456             :       /*! returns a C style string (char*) representing the class name */
  325457             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  325458             : 
  325459             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  325460             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  325461             : #if 0
  325462             :       /*! returns old style Sage II enum values */
  325463             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  325464             :       /*! returns old style Sage II enum values */
  325465             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  325466             : #endif
  325467             :       /* */
  325468             : 
  325469             : 
  325470             : 
  325471             : 
  325472             :      public:
  325473             :       /* name Traversal Support Functions
  325474             :           \brief Traversal support functions ... incomplete-documentation
  325475             : 
  325476             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325477             :           or by particularly knowledgable users for specialized tools or applications.
  325478             :        */
  325479             :       /* */
  325480             : 
  325481             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  325482             :        // (inferior to ROSE traversal mechanism, experimental).
  325483             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  325484             :        */
  325485             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  325486             : 
  325487             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  325488             :       /*! \brief support for the classic visitor pattern done in GoF */
  325489             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  325490             : 
  325491             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  325492             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  325493             :        */
  325494             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  325495             : 
  325496             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  325497             :        */
  325498             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  325499             : 
  325500             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  325501             :        // This traversal helps support internal tools that call static member functions.
  325502             :        // note: this function operates on the memory pools.
  325503             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  325504             :        */
  325505             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  325506             :       /* */
  325507             : 
  325508             : 
  325509             :      public:
  325510             :       /* name Memory Allocation Functions
  325511             :           \brief Memory allocations functions ... incomplete-documentation
  325512             : 
  325513             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325514             :           or by particularly knowledgable users for specialized tools or applications.
  325515             :        */
  325516             :       /* */
  325517             : 
  325518             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  325519             : 
  325520             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  325521             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  325522             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  325523             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  325524             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  325525             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  325526             :           being used with the AST File I/O mechanism.
  325527             :        */
  325528             :           virtual bool isInMemoryPool() override;
  325529             : 
  325530             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  325531             : 
  325532             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  325533             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  325534             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  325535             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  325536             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  325537             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  325538             :           being used with the AST File I/O mechanism.
  325539             :        */
  325540             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  325541             : 
  325542             :       // DQ (4/30/2006): Modified to be a const function.
  325543             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  325544             : 
  325545             :           This functions is part of general support for many possible tools to operate 
  325546             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  325547             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  325548             :           less than the set of pointers used by the AST file I/O. This is part of
  325549             :           work implemented by Andreas, and support tools such as the AST graph generation.
  325550             : 
  325551             :           \warning This function can return unexpected data members and thus the 
  325552             :                    order and the number of elements is unpredicable and subject 
  325553             :                    to change.
  325554             : 
  325555             :           \returns STL vector of pairs of SgNode* and strings
  325556             :        */
  325557             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  325558             : 
  325559             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  325560             : 
  325561             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  325562             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  325563             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  325564             : 
  325565             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  325566             :                    and subject to change.
  325567             :        */
  325568             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  325569             : 
  325570             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  325571             : 
  325572             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  325573             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  325574             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  325575             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  325576             : 
  325577             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  325578             : 
  325579             :           \returns long
  325580             :        */
  325581             :           virtual long getChildIndex( SgNode* childNode ) const override;
  325582             : 
  325583             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  325584             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  325585             :       /* \brief Constructor for use by AST File I/O Mechanism
  325586             : 
  325587             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  325588             :           which obtained via fast binary file I/O from disk.
  325589             :        */
  325590             :        // SgTemplateMemberFunctionSymbol( SgTemplateMemberFunctionSymbolStorageClass& source );
  325591             : 
  325592             : 
  325593             : 
  325594             : 
  325595             : 
  325596             :  // JH (10/24/2005): methods added to support the ast file IO
  325597             :     private:
  325598             : 
  325599             :       /* name AST Memory Allocation Support Functions
  325600             :           \brief Memory allocations support....
  325601             : 
  325602             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  325603             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  325604             :           and support the AST File I/O Mechanism.
  325605             :        */
  325606             :       /* */
  325607             : 
  325608             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  325609             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  325610             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  325611             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  325612             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  325613             :           a correspinding one in the AST_FILE_IO class!
  325614             :        */
  325615             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  325616             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  325617             :       /* \brief Typedef used for low level memory access.
  325618             :        */
  325619             :        // typedef unsigned char* TestType;
  325620             : 
  325621             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  325622             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  325623             :       /* \brief Typedef used to hold memory addresses as values.
  325624             :        */
  325625             :        // typedef unsigned long  AddressType;
  325626             : 
  325627             : 
  325628             : 
  325629             :        // necessary, to have direct access to the p_freepointer and the private methods !
  325630             :       /*! \brief friend class declaration to support AST File I/O */
  325631             :           friend class AST_FILE_IO;
  325632             : 
  325633             :       /*! \brief friend class declaration to support AST File I/O */
  325634             :           friend class SgTemplateMemberFunctionSymbolStorageClass;
  325635             : 
  325636             :       /*! \brief friend class declaration to support AST File I/O */
  325637             :           friend class AstSpecificDataManagingClass;
  325638             : 
  325639             :       /*! \brief friend class declaration to support AST File I/O */
  325640             :           friend class AstSpecificDataManagingClassStorageClass;
  325641             :     public:
  325642             :       /*! \brief IR node constructor to support AST File I/O */
  325643             :           SgTemplateMemberFunctionSymbol( const SgTemplateMemberFunctionSymbolStorageClass& source );
  325644             : 
  325645             :  // private: // JJW hack
  325646             :        /*
  325647             :           name AST Memory Allocation Support Variables
  325648             :           Memory allocations support variables 
  325649             : 
  325650             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  325651             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  325652             :           and support the AST File I/O Mechanism.
  325653             :        */
  325654             :       /* */
  325655             : 
  325656             :     public:
  325657             : 
  325658             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  325659             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  325660             :       // virtual SgNode* addRegExpAttribute();
  325661             :       /*! \brief Support for AST matching using regular expression.
  325662             : 
  325663             :           This support is incomplete and the subject of current research to define 
  325664             :           RegEx trees to support inexact matching.
  325665             :        */
  325666             :           SgTemplateMemberFunctionSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  325667             : 
  325668             : // *** COMMON CODE SECTION ENDS HERE ***
  325669             : 
  325670             : 
  325671             : // End of memberFunctionString
  325672             : // Start of memberFunctionString
  325673             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  325674             : 
  325675             :      // the generated cast function
  325676             :      // friend ROSE_DLL_API SgTemplateMemberFunctionSymbol* isSgTemplateMemberFunctionSymbol ( SgNode* s );
  325677             : 
  325678             :           typedef SgMemberFunctionSymbol base_node_type;
  325679             : 
  325680             : 
  325681             : // End of memberFunctionString
  325682             : // Start of memberFunctionString
  325683             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  325684             : 
  325685             :           SgName get_name() const override;
  325686             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  325687             : 
  325688             : 
  325689             : // End of memberFunctionString
  325690             : // Start of memberFunctionString
  325691             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  325692             : 
  325693             :        // DQ (3/23/2017): ROSETTA macro expansion
  325694             :           SgType* get_type() const override;
  325695             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  325696             : 
  325697             : 
  325698             : // End of memberFunctionString
  325699             : 
  325700             : 
  325701             :      public: 
  325702             :          virtual ~SgTemplateMemberFunctionSymbol();
  325703             : 
  325704             : 
  325705             :      public: 
  325706             :          SgTemplateMemberFunctionSymbol(SgFunctionDeclaration* declaration = NULL); 
  325707             : 
  325708             :     protected:
  325709             : 
  325710             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateMemberFunctionSymbol>;
  325711             : 
  325712             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325713             : 
  325714             : 
  325715             :    };
  325716             : #endif
  325717             : 
  325718             : // postdeclarations for SgTemplateMemberFunctionSymbol
  325719             : 
  325720             : /* #line 325721 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325721             : 
  325722             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  325723             : 
  325724             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325725             : 
  325726             : 
  325727             : /* #line 325728 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325728             : 
  325729             : 
  325730             : 
  325731             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325732             : 
  325733             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  325734             : //      This code is automatically generated for each 
  325735             : //      terminal and non-terminal within the defined 
  325736             : //      grammar.  There is a simple way to change the 
  325737             : //      code to fix bugs etc.  See the ROSE README file
  325738             : //      for directions.
  325739             : 
  325740             : // tps: (02/22/2010): Adding DLL export requirements
  325741             : #include "rosedll.h"
  325742             : 
  325743             : // predeclarations for SgTemplateFunctionSymbol
  325744             : 
  325745             : /* #line 325746 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325746             : 
  325747             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  325748             : 
  325749             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  325750             : 
  325751             : #if 1
  325752             : // Class Definition for SgTemplateFunctionSymbol
  325753             : class ROSE_DLL_API SgTemplateFunctionSymbol  : public SgFunctionSymbol
  325754             :    {
  325755             :      public:
  325756             : 
  325757             : 
  325758             : /* #line 325759 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  325759             : 
  325760             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  325761             : // Start of memberFunctionString
  325762             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  325763             : 
  325764             : // *** COMMON CODE SECTION BEGINS HERE ***
  325765             : 
  325766             :     public:
  325767             : 
  325768             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  325769             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  325770             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  325771             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  325772             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  325773             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  325774             : 
  325775             :       /*! \brief returns a string representing the class name */
  325776             :           virtual std::string class_name() const override;
  325777             : 
  325778             :       /*! \brief returns new style SageIII enum values */
  325779             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  325780             : 
  325781             :       /*! \brief static variant value */
  325782             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  325783             :        // static const VariantT static_variant = V_SgTemplateFunctionSymbol;
  325784             :           enum { static_variant = V_SgTemplateFunctionSymbol };
  325785             : 
  325786             :        /* the generated cast function */
  325787             :       /*! \brief Casts pointer from base class to derived class */
  325788             :           ROSE_DLL_API friend       SgTemplateFunctionSymbol* isSgTemplateFunctionSymbol(       SgNode * s );
  325789             : 
  325790             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  325791             :           ROSE_DLL_API friend const SgTemplateFunctionSymbol* isSgTemplateFunctionSymbol( const SgNode * s );
  325792             : 
  325793             :      // ******************************************
  325794             :      // * Memory Pool / New / Delete
  325795             :      // ******************************************
  325796             : 
  325797             :      public:
  325798             :           /// \private
  325799             :           static const unsigned pool_size; //
  325800             :           /// \private
  325801             :           static std::vector<unsigned char *> pools; //
  325802             :           /// \private
  325803             :           static SgTemplateFunctionSymbol * next_node; // 
  325804             : 
  325805             :           /// \private
  325806             :           static unsigned long initializeStorageClassArray(SgTemplateFunctionSymbolStorageClass *); //
  325807             : 
  325808             :           /// \private
  325809             :           static void clearMemoryPool(); //
  325810             :           static void deleteMemoryPool(); //
  325811             : 
  325812             :           /// \private
  325813             :           static void extendMemoryPoolForFileIO(); //
  325814             : 
  325815             :           /// \private
  325816             :           static SgTemplateFunctionSymbol * getPointerFromGlobalIndex(unsigned long); //
  325817             :           /// \private
  325818             :           static SgTemplateFunctionSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  325819             : 
  325820             :           /// \private
  325821             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  325822             :           /// \private
  325823             :           static void resetValidFreepointers(); //
  325824             :           /// \private
  325825             :           static unsigned long getNumberOfLastValidPointer(); //
  325826             : 
  325827             : 
  325828             : #if defined(INLINE_FUNCTIONS)
  325829             :       /*! \brief returns pointer to newly allocated IR node */
  325830             :           inline void *operator new (size_t size);
  325831             : #else
  325832             :       /*! \brief returns pointer to newly allocated IR node */
  325833             :           void *operator new (size_t size);
  325834             : #endif
  325835             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  325836             :           void operator delete (void* pointer, size_t size);
  325837             : 
  325838             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  325839         680 :           void operator delete (void* pointer)
  325840             :              {
  325841             :             // This is the generated delete operator...
  325842         680 :                SgTemplateFunctionSymbol::operator delete (pointer,sizeof(SgTemplateFunctionSymbol));
  325843             :              }
  325844             : 
  325845             :       /*! \brief Returns the total number of IR nodes of this type */
  325846             :           static size_t numberOfNodes();
  325847             : 
  325848             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  325849             :           static size_t memoryUsage();
  325850             : 
  325851             :       // End of scope which started in IR nodes specific code 
  325852             :       /* */
  325853             : 
  325854             :       /* name Internal Functions
  325855             :           \brief Internal functions ... incomplete-documentation
  325856             : 
  325857             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325858             :           or by particularly knowledgeable users for specialized tools or applications.
  325859             : 
  325860             :           \internal We could not make these private because they are required by user for special purposes. And 
  325861             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  325862             :          
  325863             :        */
  325864             : 
  325865             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  325866             :        // overridden in every class by *generated* implementation
  325867             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  325868             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  325869             :        // MS: 06/28/02 container of names of variables or container indices 
  325870             :        // used used in the traversal to access AST successor nodes
  325871             :        // overridden in every class by *generated* implementation
  325872             :       /*! \brief container of names of variables or container indices used used in the traversal
  325873             :           to access AST successor nodes overridden in every class by *generated* implementation */
  325874             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  325875             : 
  325876             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  325877             :        // than all the vector copies. The implementation for these functions is generated for each class.
  325878             :       /*! \brief return number of children in the traversal successor list */
  325879             :           virtual size_t get_numberOfTraversalSuccessors() override;
  325880             :       /*! \brief index-based access to traversal successors by index number */
  325881             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  325882             :       /*! \brief index-based access to traversal successors by child node */
  325883             :           virtual size_t get_childIndex(SgNode *child) override;
  325884             : 
  325885             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  325886             :        // MS: 08/16/2002 method for generating RTI information
  325887             :       /*! \brief return C++ Runtime-Time-Information */
  325888             :           virtual RTIReturnType roseRTI() override;
  325889             : #endif
  325890             :       /* */
  325891             : 
  325892             : 
  325893             : 
  325894             :       /* name Deprecated Functions
  325895             :           \brief Deprecated functions ... incomplete-documentation
  325896             : 
  325897             :           These functions have been deprecated from use.
  325898             :        */
  325899             :       /* */
  325900             : 
  325901             :       /*! returns a C style string (char*) representing the class name */
  325902             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  325903             : 
  325904             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  325905             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  325906             : #if 0
  325907             :       /*! returns old style Sage II enum values */
  325908             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  325909             :       /*! returns old style Sage II enum values */
  325910             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  325911             : #endif
  325912             :       /* */
  325913             : 
  325914             : 
  325915             : 
  325916             : 
  325917             :      public:
  325918             :       /* name Traversal Support Functions
  325919             :           \brief Traversal support functions ... incomplete-documentation
  325920             : 
  325921             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325922             :           or by particularly knowledgable users for specialized tools or applications.
  325923             :        */
  325924             :       /* */
  325925             : 
  325926             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  325927             :        // (inferior to ROSE traversal mechanism, experimental).
  325928             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  325929             :        */
  325930             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  325931             : 
  325932             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  325933             :       /*! \brief support for the classic visitor pattern done in GoF */
  325934             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  325935             : 
  325936             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  325937             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  325938             :        */
  325939             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  325940             : 
  325941             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  325942             :        */
  325943             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  325944             : 
  325945             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  325946             :        // This traversal helps support internal tools that call static member functions.
  325947             :        // note: this function operates on the memory pools.
  325948             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  325949             :        */
  325950             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  325951             :       /* */
  325952             : 
  325953             : 
  325954             :      public:
  325955             :       /* name Memory Allocation Functions
  325956             :           \brief Memory allocations functions ... incomplete-documentation
  325957             : 
  325958             :           These functions have been made public as part of the design, but they are suggested for internal use 
  325959             :           or by particularly knowledgable users for specialized tools or applications.
  325960             :        */
  325961             :       /* */
  325962             : 
  325963             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  325964             : 
  325965             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  325966             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  325967             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  325968             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  325969             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  325970             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  325971             :           being used with the AST File I/O mechanism.
  325972             :        */
  325973             :           virtual bool isInMemoryPool() override;
  325974             : 
  325975             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  325976             : 
  325977             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  325978             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  325979             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  325980             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  325981             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  325982             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  325983             :           being used with the AST File I/O mechanism.
  325984             :        */
  325985             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  325986             : 
  325987             :       // DQ (4/30/2006): Modified to be a const function.
  325988             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  325989             : 
  325990             :           This functions is part of general support for many possible tools to operate 
  325991             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  325992             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  325993             :           less than the set of pointers used by the AST file I/O. This is part of
  325994             :           work implemented by Andreas, and support tools such as the AST graph generation.
  325995             : 
  325996             :           \warning This function can return unexpected data members and thus the 
  325997             :                    order and the number of elements is unpredicable and subject 
  325998             :                    to change.
  325999             : 
  326000             :           \returns STL vector of pairs of SgNode* and strings
  326001             :        */
  326002             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  326003             : 
  326004             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  326005             : 
  326006             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  326007             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  326008             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  326009             : 
  326010             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  326011             :                    and subject to change.
  326012             :        */
  326013             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  326014             : 
  326015             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  326016             : 
  326017             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  326018             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  326019             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  326020             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  326021             : 
  326022             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  326023             : 
  326024             :           \returns long
  326025             :        */
  326026             :           virtual long getChildIndex( SgNode* childNode ) const override;
  326027             : 
  326028             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  326029             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326030             :       /* \brief Constructor for use by AST File I/O Mechanism
  326031             : 
  326032             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  326033             :           which obtained via fast binary file I/O from disk.
  326034             :        */
  326035             :        // SgTemplateFunctionSymbol( SgTemplateFunctionSymbolStorageClass& source );
  326036             : 
  326037             : 
  326038             : 
  326039             : 
  326040             : 
  326041             :  // JH (10/24/2005): methods added to support the ast file IO
  326042             :     private:
  326043             : 
  326044             :       /* name AST Memory Allocation Support Functions
  326045             :           \brief Memory allocations support....
  326046             : 
  326047             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  326048             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  326049             :           and support the AST File I/O Mechanism.
  326050             :        */
  326051             :       /* */
  326052             : 
  326053             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  326054             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  326055             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  326056             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  326057             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  326058             :           a correspinding one in the AST_FILE_IO class!
  326059             :        */
  326060             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  326061             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326062             :       /* \brief Typedef used for low level memory access.
  326063             :        */
  326064             :        // typedef unsigned char* TestType;
  326065             : 
  326066             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  326067             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326068             :       /* \brief Typedef used to hold memory addresses as values.
  326069             :        */
  326070             :        // typedef unsigned long  AddressType;
  326071             : 
  326072             : 
  326073             : 
  326074             :        // necessary, to have direct access to the p_freepointer and the private methods !
  326075             :       /*! \brief friend class declaration to support AST File I/O */
  326076             :           friend class AST_FILE_IO;
  326077             : 
  326078             :       /*! \brief friend class declaration to support AST File I/O */
  326079             :           friend class SgTemplateFunctionSymbolStorageClass;
  326080             : 
  326081             :       /*! \brief friend class declaration to support AST File I/O */
  326082             :           friend class AstSpecificDataManagingClass;
  326083             : 
  326084             :       /*! \brief friend class declaration to support AST File I/O */
  326085             :           friend class AstSpecificDataManagingClassStorageClass;
  326086             :     public:
  326087             :       /*! \brief IR node constructor to support AST File I/O */
  326088             :           SgTemplateFunctionSymbol( const SgTemplateFunctionSymbolStorageClass& source );
  326089             : 
  326090             :  // private: // JJW hack
  326091             :        /*
  326092             :           name AST Memory Allocation Support Variables
  326093             :           Memory allocations support variables 
  326094             : 
  326095             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  326096             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  326097             :           and support the AST File I/O Mechanism.
  326098             :        */
  326099             :       /* */
  326100             : 
  326101             :     public:
  326102             : 
  326103             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  326104             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  326105             :       // virtual SgNode* addRegExpAttribute();
  326106             :       /*! \brief Support for AST matching using regular expression.
  326107             : 
  326108             :           This support is incomplete and the subject of current research to define 
  326109             :           RegEx trees to support inexact matching.
  326110             :        */
  326111             :           SgTemplateFunctionSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  326112             : 
  326113             : // *** COMMON CODE SECTION ENDS HERE ***
  326114             : 
  326115             : 
  326116             : // End of memberFunctionString
  326117             : // Start of memberFunctionString
  326118             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  326119             : 
  326120             :      // the generated cast function
  326121             :      // friend ROSE_DLL_API SgTemplateFunctionSymbol* isSgTemplateFunctionSymbol ( SgNode* s );
  326122             : 
  326123             :           typedef SgFunctionSymbol base_node_type;
  326124             : 
  326125             : 
  326126             : // End of memberFunctionString
  326127             : // Start of memberFunctionString
  326128             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  326129             : 
  326130             :           SgName get_name() const override;
  326131             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  326132             : 
  326133             : 
  326134             : // End of memberFunctionString
  326135             : // Start of memberFunctionString
  326136             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  326137             : 
  326138             :        // DQ (3/23/2017): ROSETTA macro expansion
  326139             :           SgType* get_type() const override;
  326140             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  326141             : 
  326142             : 
  326143             : // End of memberFunctionString
  326144             : 
  326145             : 
  326146             :      public: 
  326147             :          virtual ~SgTemplateFunctionSymbol();
  326148             : 
  326149             : 
  326150             :      public: 
  326151             :          SgTemplateFunctionSymbol(SgFunctionDeclaration* declaration = NULL); 
  326152             : 
  326153             :     protected:
  326154             : 
  326155             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateFunctionSymbol>;
  326156             : 
  326157             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326158             : 
  326159             : 
  326160             :    };
  326161             : #endif
  326162             : 
  326163             : // postdeclarations for SgTemplateFunctionSymbol
  326164             : 
  326165             : /* #line 326166 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326166             : 
  326167             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  326168             : 
  326169             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326170             : 
  326171             : 
  326172             : /* #line 326173 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326173             : 
  326174             : 
  326175             : 
  326176             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326177             : 
  326178             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  326179             : //      This code is automatically generated for each 
  326180             : //      terminal and non-terminal within the defined 
  326181             : //      grammar.  There is a simple way to change the 
  326182             : //      code to fix bugs etc.  See the ROSE README file
  326183             : //      for directions.
  326184             : 
  326185             : // tps: (02/22/2010): Adding DLL export requirements
  326186             : #include "rosedll.h"
  326187             : 
  326188             : // predeclarations for SgRenameSymbol
  326189             : 
  326190             : /* #line 326191 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326191             : 
  326192             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  326193             : 
  326194             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326195             : 
  326196             : #if 1
  326197             : // Class Definition for SgRenameSymbol
  326198             : class ROSE_DLL_API SgRenameSymbol  : public SgFunctionSymbol
  326199             :    {
  326200             :      public:
  326201             : 
  326202             : 
  326203             : /* #line 326204 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326204             : 
  326205             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  326206             : // Start of memberFunctionString
  326207             : /* #line 108 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  326208             : 
  326209             : 
  326210             :       //! For a chain of aliased symbols the last link may be a SgRenameSymbol, this
  326211             :       //! function returns the declaration in the last (non-aliased and not renamed) symbol.
  326212             :       //  SgSymbol* get_base() const;
  326213             : 
  326214             : 
  326215             : 
  326216             : // End of memberFunctionString
  326217             : // Start of memberFunctionString
  326218             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  326219             : 
  326220             : // *** COMMON CODE SECTION BEGINS HERE ***
  326221             : 
  326222             :     public:
  326223             : 
  326224             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  326225             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  326226             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  326227             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  326228             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  326229             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  326230             : 
  326231             :       /*! \brief returns a string representing the class name */
  326232             :           virtual std::string class_name() const override;
  326233             : 
  326234             :       /*! \brief returns new style SageIII enum values */
  326235             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  326236             : 
  326237             :       /*! \brief static variant value */
  326238             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  326239             :        // static const VariantT static_variant = V_SgRenameSymbol;
  326240             :           enum { static_variant = V_SgRenameSymbol };
  326241             : 
  326242             :        /* the generated cast function */
  326243             :       /*! \brief Casts pointer from base class to derived class */
  326244             :           ROSE_DLL_API friend       SgRenameSymbol* isSgRenameSymbol(       SgNode * s );
  326245             : 
  326246             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  326247             :           ROSE_DLL_API friend const SgRenameSymbol* isSgRenameSymbol( const SgNode * s );
  326248             : 
  326249             :      // ******************************************
  326250             :      // * Memory Pool / New / Delete
  326251             :      // ******************************************
  326252             : 
  326253             :      public:
  326254             :           /// \private
  326255             :           static const unsigned pool_size; //
  326256             :           /// \private
  326257             :           static std::vector<unsigned char *> pools; //
  326258             :           /// \private
  326259             :           static SgRenameSymbol * next_node; // 
  326260             : 
  326261             :           /// \private
  326262             :           static unsigned long initializeStorageClassArray(SgRenameSymbolStorageClass *); //
  326263             : 
  326264             :           /// \private
  326265             :           static void clearMemoryPool(); //
  326266             :           static void deleteMemoryPool(); //
  326267             : 
  326268             :           /// \private
  326269             :           static void extendMemoryPoolForFileIO(); //
  326270             : 
  326271             :           /// \private
  326272             :           static SgRenameSymbol * getPointerFromGlobalIndex(unsigned long); //
  326273             :           /// \private
  326274             :           static SgRenameSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  326275             : 
  326276             :           /// \private
  326277             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  326278             :           /// \private
  326279             :           static void resetValidFreepointers(); //
  326280             :           /// \private
  326281             :           static unsigned long getNumberOfLastValidPointer(); //
  326282             : 
  326283             : 
  326284             : #if defined(INLINE_FUNCTIONS)
  326285             :       /*! \brief returns pointer to newly allocated IR node */
  326286             :           inline void *operator new (size_t size);
  326287             : #else
  326288             :       /*! \brief returns pointer to newly allocated IR node */
  326289             :           void *operator new (size_t size);
  326290             : #endif
  326291             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  326292             :           void operator delete (void* pointer, size_t size);
  326293             : 
  326294             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  326295           0 :           void operator delete (void* pointer)
  326296             :              {
  326297             :             // This is the generated delete operator...
  326298           0 :                SgRenameSymbol::operator delete (pointer,sizeof(SgRenameSymbol));
  326299             :              }
  326300             : 
  326301             :       /*! \brief Returns the total number of IR nodes of this type */
  326302             :           static size_t numberOfNodes();
  326303             : 
  326304             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  326305             :           static size_t memoryUsage();
  326306             : 
  326307             :       // End of scope which started in IR nodes specific code 
  326308             :       /* */
  326309             : 
  326310             :       /* name Internal Functions
  326311             :           \brief Internal functions ... incomplete-documentation
  326312             : 
  326313             :           These functions have been made public as part of the design, but they are suggested for internal use 
  326314             :           or by particularly knowledgeable users for specialized tools or applications.
  326315             : 
  326316             :           \internal We could not make these private because they are required by user for special purposes. And 
  326317             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  326318             :          
  326319             :        */
  326320             : 
  326321             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  326322             :        // overridden in every class by *generated* implementation
  326323             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  326324             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  326325             :        // MS: 06/28/02 container of names of variables or container indices 
  326326             :        // used used in the traversal to access AST successor nodes
  326327             :        // overridden in every class by *generated* implementation
  326328             :       /*! \brief container of names of variables or container indices used used in the traversal
  326329             :           to access AST successor nodes overridden in every class by *generated* implementation */
  326330             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  326331             : 
  326332             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  326333             :        // than all the vector copies. The implementation for these functions is generated for each class.
  326334             :       /*! \brief return number of children in the traversal successor list */
  326335             :           virtual size_t get_numberOfTraversalSuccessors() override;
  326336             :       /*! \brief index-based access to traversal successors by index number */
  326337             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  326338             :       /*! \brief index-based access to traversal successors by child node */
  326339             :           virtual size_t get_childIndex(SgNode *child) override;
  326340             : 
  326341             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  326342             :        // MS: 08/16/2002 method for generating RTI information
  326343             :       /*! \brief return C++ Runtime-Time-Information */
  326344             :           virtual RTIReturnType roseRTI() override;
  326345             : #endif
  326346             :       /* */
  326347             : 
  326348             : 
  326349             : 
  326350             :       /* name Deprecated Functions
  326351             :           \brief Deprecated functions ... incomplete-documentation
  326352             : 
  326353             :           These functions have been deprecated from use.
  326354             :        */
  326355             :       /* */
  326356             : 
  326357             :       /*! returns a C style string (char*) representing the class name */
  326358             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  326359             : 
  326360             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  326361             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  326362             : #if 0
  326363             :       /*! returns old style Sage II enum values */
  326364             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  326365             :       /*! returns old style Sage II enum values */
  326366             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  326367             : #endif
  326368             :       /* */
  326369             : 
  326370             : 
  326371             : 
  326372             : 
  326373             :      public:
  326374             :       /* name Traversal Support Functions
  326375             :           \brief Traversal support functions ... incomplete-documentation
  326376             : 
  326377             :           These functions have been made public as part of the design, but they are suggested for internal use 
  326378             :           or by particularly knowledgable users for specialized tools or applications.
  326379             :        */
  326380             :       /* */
  326381             : 
  326382             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  326383             :        // (inferior to ROSE traversal mechanism, experimental).
  326384             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  326385             :        */
  326386             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  326387             : 
  326388             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  326389             :       /*! \brief support for the classic visitor pattern done in GoF */
  326390             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  326391             : 
  326392             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  326393             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  326394             :        */
  326395             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  326396             : 
  326397             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  326398             :        */
  326399             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  326400             : 
  326401             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  326402             :        // This traversal helps support internal tools that call static member functions.
  326403             :        // note: this function operates on the memory pools.
  326404             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  326405             :        */
  326406             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  326407             :       /* */
  326408             : 
  326409             : 
  326410             :      public:
  326411             :       /* name Memory Allocation Functions
  326412             :           \brief Memory allocations functions ... incomplete-documentation
  326413             : 
  326414             :           These functions have been made public as part of the design, but they are suggested for internal use 
  326415             :           or by particularly knowledgable users for specialized tools or applications.
  326416             :        */
  326417             :       /* */
  326418             : 
  326419             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  326420             : 
  326421             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  326422             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  326423             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  326424             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  326425             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  326426             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  326427             :           being used with the AST File I/O mechanism.
  326428             :        */
  326429             :           virtual bool isInMemoryPool() override;
  326430             : 
  326431             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  326432             : 
  326433             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  326434             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  326435             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  326436             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  326437             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  326438             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  326439             :           being used with the AST File I/O mechanism.
  326440             :        */
  326441             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  326442             : 
  326443             :       // DQ (4/30/2006): Modified to be a const function.
  326444             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  326445             : 
  326446             :           This functions is part of general support for many possible tools to operate 
  326447             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  326448             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  326449             :           less than the set of pointers used by the AST file I/O. This is part of
  326450             :           work implemented by Andreas, and support tools such as the AST graph generation.
  326451             : 
  326452             :           \warning This function can return unexpected data members and thus the 
  326453             :                    order and the number of elements is unpredicable and subject 
  326454             :                    to change.
  326455             : 
  326456             :           \returns STL vector of pairs of SgNode* and strings
  326457             :        */
  326458             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  326459             : 
  326460             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  326461             : 
  326462             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  326463             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  326464             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  326465             : 
  326466             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  326467             :                    and subject to change.
  326468             :        */
  326469             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  326470             : 
  326471             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  326472             : 
  326473             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  326474             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  326475             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  326476             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  326477             : 
  326478             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  326479             : 
  326480             :           \returns long
  326481             :        */
  326482             :           virtual long getChildIndex( SgNode* childNode ) const override;
  326483             : 
  326484             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  326485             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326486             :       /* \brief Constructor for use by AST File I/O Mechanism
  326487             : 
  326488             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  326489             :           which obtained via fast binary file I/O from disk.
  326490             :        */
  326491             :        // SgRenameSymbol( SgRenameSymbolStorageClass& source );
  326492             : 
  326493             : 
  326494             : 
  326495             : 
  326496             : 
  326497             :  // JH (10/24/2005): methods added to support the ast file IO
  326498             :     private:
  326499             : 
  326500             :       /* name AST Memory Allocation Support Functions
  326501             :           \brief Memory allocations support....
  326502             : 
  326503             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  326504             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  326505             :           and support the AST File I/O Mechanism.
  326506             :        */
  326507             :       /* */
  326508             : 
  326509             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  326510             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  326511             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  326512             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  326513             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  326514             :           a correspinding one in the AST_FILE_IO class!
  326515             :        */
  326516             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  326517             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326518             :       /* \brief Typedef used for low level memory access.
  326519             :        */
  326520             :        // typedef unsigned char* TestType;
  326521             : 
  326522             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  326523             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326524             :       /* \brief Typedef used to hold memory addresses as values.
  326525             :        */
  326526             :        // typedef unsigned long  AddressType;
  326527             : 
  326528             : 
  326529             : 
  326530             :        // necessary, to have direct access to the p_freepointer and the private methods !
  326531             :       /*! \brief friend class declaration to support AST File I/O */
  326532             :           friend class AST_FILE_IO;
  326533             : 
  326534             :       /*! \brief friend class declaration to support AST File I/O */
  326535             :           friend class SgRenameSymbolStorageClass;
  326536             : 
  326537             :       /*! \brief friend class declaration to support AST File I/O */
  326538             :           friend class AstSpecificDataManagingClass;
  326539             : 
  326540             :       /*! \brief friend class declaration to support AST File I/O */
  326541             :           friend class AstSpecificDataManagingClassStorageClass;
  326542             :     public:
  326543             :       /*! \brief IR node constructor to support AST File I/O */
  326544             :           SgRenameSymbol( const SgRenameSymbolStorageClass& source );
  326545             : 
  326546             :  // private: // JJW hack
  326547             :        /*
  326548             :           name AST Memory Allocation Support Variables
  326549             :           Memory allocations support variables 
  326550             : 
  326551             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  326552             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  326553             :           and support the AST File I/O Mechanism.
  326554             :        */
  326555             :       /* */
  326556             : 
  326557             :     public:
  326558             : 
  326559             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  326560             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  326561             :       // virtual SgNode* addRegExpAttribute();
  326562             :       /*! \brief Support for AST matching using regular expression.
  326563             : 
  326564             :           This support is incomplete and the subject of current research to define 
  326565             :           RegEx trees to support inexact matching.
  326566             :        */
  326567             :           SgRenameSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  326568             : 
  326569             : // *** COMMON CODE SECTION ENDS HERE ***
  326570             : 
  326571             : 
  326572             : // End of memberFunctionString
  326573             : // Start of memberFunctionString
  326574             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  326575             : 
  326576             :      // the generated cast function
  326577             :      // friend ROSE_DLL_API SgRenameSymbol* isSgRenameSymbol ( SgNode* s );
  326578             : 
  326579             :           typedef SgFunctionSymbol base_node_type;
  326580             : 
  326581             : 
  326582             : // End of memberFunctionString
  326583             : // Start of memberFunctionString
  326584             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  326585             : 
  326586             :           SgName get_name() const override;
  326587             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  326588             : 
  326589             : 
  326590             : // End of memberFunctionString
  326591             : // Start of memberFunctionString
  326592             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  326593             : 
  326594             :        // DQ (3/23/2017): ROSETTA macro expansion
  326595             :           SgType* get_type() const override;
  326596             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  326597             : 
  326598             : 
  326599             : // End of memberFunctionString
  326600             : 
  326601             :      public: 
  326602             :          SgSymbol* get_original_symbol() const;
  326603             :          void set_original_symbol(SgSymbol* original_symbol);
  326604             : 
  326605             :      public: 
  326606             :          SgName get_new_name() const;
  326607             :          void set_new_name(SgName new_name);
  326608             : 
  326609             : 
  326610             :      public: 
  326611             :          virtual ~SgRenameSymbol();
  326612             : 
  326613             : 
  326614             :      public: 
  326615             :          SgRenameSymbol(SgFunctionDeclaration* declaration = NULL, SgSymbol* original_symbol = NULL, SgName new_name = ""); 
  326616             : 
  326617             :     protected:
  326618             : // Start of memberFunctionString
  326619             : SgSymbol* p_original_symbol;
  326620             :           
  326621             : // End of memberFunctionString
  326622             : // Start of memberFunctionString
  326623             : SgName p_new_name;
  326624             :           
  326625             : // End of memberFunctionString
  326626             : 
  326627             :     friend struct Rose::Traits::generated::describe_node_t<SgRenameSymbol>;
  326628             :     friend struct Rose::Traits::generated::describe_field_t<SgRenameSymbol, SgSymbol*,&SgRenameSymbol::p_original_symbol>;
  326629             :     friend struct Rose::Traits::generated::describe_field_t<SgRenameSymbol, SgName,&SgRenameSymbol::p_new_name>;
  326630             : 
  326631             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326632             : 
  326633             : 
  326634             :    };
  326635             : #endif
  326636             : 
  326637             : // postdeclarations for SgRenameSymbol
  326638             : 
  326639             : /* #line 326640 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326640             : 
  326641             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  326642             : 
  326643             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326644             : 
  326645             : 
  326646             : /* #line 326647 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326647             : 
  326648             : 
  326649             : 
  326650             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326651             : 
  326652             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  326653             : //      This code is automatically generated for each 
  326654             : //      terminal and non-terminal within the defined 
  326655             : //      grammar.  There is a simple way to change the 
  326656             : //      code to fix bugs etc.  See the ROSE README file
  326657             : //      for directions.
  326658             : 
  326659             : // tps: (02/22/2010): Adding DLL export requirements
  326660             : #include "rosedll.h"
  326661             : 
  326662             : // predeclarations for SgFunctionTypeSymbol
  326663             : 
  326664             : /* #line 326665 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326665             : 
  326666             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  326667             : 
  326668             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  326669             : 
  326670             : #if 1
  326671             : // Class Definition for SgFunctionTypeSymbol
  326672             : class ROSE_DLL_API SgFunctionTypeSymbol  : public SgSymbol
  326673             :    {
  326674             :      public:
  326675             : 
  326676             : 
  326677             : /* #line 326678 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  326678             : 
  326679             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  326680             : // Start of memberFunctionString
  326681             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  326682             : 
  326683             : // *** COMMON CODE SECTION BEGINS HERE ***
  326684             : 
  326685             :     public:
  326686             : 
  326687             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  326688             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  326689             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  326690             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  326691             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  326692             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  326693             : 
  326694             :       /*! \brief returns a string representing the class name */
  326695             :           virtual std::string class_name() const override;
  326696             : 
  326697             :       /*! \brief returns new style SageIII enum values */
  326698             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  326699             : 
  326700             :       /*! \brief static variant value */
  326701             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  326702             :        // static const VariantT static_variant = V_SgFunctionTypeSymbol;
  326703             :           enum { static_variant = V_SgFunctionTypeSymbol };
  326704             : 
  326705             :        /* the generated cast function */
  326706             :       /*! \brief Casts pointer from base class to derived class */
  326707             :           ROSE_DLL_API friend       SgFunctionTypeSymbol* isSgFunctionTypeSymbol(       SgNode * s );
  326708             : 
  326709             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  326710             :           ROSE_DLL_API friend const SgFunctionTypeSymbol* isSgFunctionTypeSymbol( const SgNode * s );
  326711             : 
  326712             :      // ******************************************
  326713             :      // * Memory Pool / New / Delete
  326714             :      // ******************************************
  326715             : 
  326716             :      public:
  326717             :           /// \private
  326718             :           static const unsigned pool_size; //
  326719             :           /// \private
  326720             :           static std::vector<unsigned char *> pools; //
  326721             :           /// \private
  326722             :           static SgFunctionTypeSymbol * next_node; // 
  326723             : 
  326724             :           /// \private
  326725             :           static unsigned long initializeStorageClassArray(SgFunctionTypeSymbolStorageClass *); //
  326726             : 
  326727             :           /// \private
  326728             :           static void clearMemoryPool(); //
  326729             :           static void deleteMemoryPool(); //
  326730             : 
  326731             :           /// \private
  326732             :           static void extendMemoryPoolForFileIO(); //
  326733             : 
  326734             :           /// \private
  326735             :           static SgFunctionTypeSymbol * getPointerFromGlobalIndex(unsigned long); //
  326736             :           /// \private
  326737             :           static SgFunctionTypeSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  326738             : 
  326739             :           /// \private
  326740             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  326741             :           /// \private
  326742             :           static void resetValidFreepointers(); //
  326743             :           /// \private
  326744             :           static unsigned long getNumberOfLastValidPointer(); //
  326745             : 
  326746             : 
  326747             : #if defined(INLINE_FUNCTIONS)
  326748             :       /*! \brief returns pointer to newly allocated IR node */
  326749             :           inline void *operator new (size_t size);
  326750             : #else
  326751             :       /*! \brief returns pointer to newly allocated IR node */
  326752             :           void *operator new (size_t size);
  326753             : #endif
  326754             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  326755             :           void operator delete (void* pointer, size_t size);
  326756             : 
  326757             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  326758       18364 :           void operator delete (void* pointer)
  326759             :              {
  326760             :             // This is the generated delete operator...
  326761       18364 :                SgFunctionTypeSymbol::operator delete (pointer,sizeof(SgFunctionTypeSymbol));
  326762             :              }
  326763             : 
  326764             :       /*! \brief Returns the total number of IR nodes of this type */
  326765             :           static size_t numberOfNodes();
  326766             : 
  326767             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  326768             :           static size_t memoryUsage();
  326769             : 
  326770             :       // End of scope which started in IR nodes specific code 
  326771             :       /* */
  326772             : 
  326773             :       /* name Internal Functions
  326774             :           \brief Internal functions ... incomplete-documentation
  326775             : 
  326776             :           These functions have been made public as part of the design, but they are suggested for internal use 
  326777             :           or by particularly knowledgeable users for specialized tools or applications.
  326778             : 
  326779             :           \internal We could not make these private because they are required by user for special purposes. And 
  326780             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  326781             :          
  326782             :        */
  326783             : 
  326784             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  326785             :        // overridden in every class by *generated* implementation
  326786             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  326787             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  326788             :        // MS: 06/28/02 container of names of variables or container indices 
  326789             :        // used used in the traversal to access AST successor nodes
  326790             :        // overridden in every class by *generated* implementation
  326791             :       /*! \brief container of names of variables or container indices used used in the traversal
  326792             :           to access AST successor nodes overridden in every class by *generated* implementation */
  326793             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  326794             : 
  326795             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  326796             :        // than all the vector copies. The implementation for these functions is generated for each class.
  326797             :       /*! \brief return number of children in the traversal successor list */
  326798             :           virtual size_t get_numberOfTraversalSuccessors() override;
  326799             :       /*! \brief index-based access to traversal successors by index number */
  326800             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  326801             :       /*! \brief index-based access to traversal successors by child node */
  326802             :           virtual size_t get_childIndex(SgNode *child) override;
  326803             : 
  326804             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  326805             :        // MS: 08/16/2002 method for generating RTI information
  326806             :       /*! \brief return C++ Runtime-Time-Information */
  326807             :           virtual RTIReturnType roseRTI() override;
  326808             : #endif
  326809             :       /* */
  326810             : 
  326811             : 
  326812             : 
  326813             :       /* name Deprecated Functions
  326814             :           \brief Deprecated functions ... incomplete-documentation
  326815             : 
  326816             :           These functions have been deprecated from use.
  326817             :        */
  326818             :       /* */
  326819             : 
  326820             :       /*! returns a C style string (char*) representing the class name */
  326821             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  326822             : 
  326823             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  326824             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  326825             : #if 0
  326826             :       /*! returns old style Sage II enum values */
  326827             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  326828             :       /*! returns old style Sage II enum values */
  326829             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  326830             : #endif
  326831             :       /* */
  326832             : 
  326833             : 
  326834             : 
  326835             : 
  326836             :      public:
  326837             :       /* name Traversal Support Functions
  326838             :           \brief Traversal support functions ... incomplete-documentation
  326839             : 
  326840             :           These functions have been made public as part of the design, but they are suggested for internal use 
  326841             :           or by particularly knowledgable users for specialized tools or applications.
  326842             :        */
  326843             :       /* */
  326844             : 
  326845             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  326846             :        // (inferior to ROSE traversal mechanism, experimental).
  326847             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  326848             :        */
  326849             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  326850             : 
  326851             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  326852             :       /*! \brief support for the classic visitor pattern done in GoF */
  326853             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  326854             : 
  326855             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  326856             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  326857             :        */
  326858             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  326859             : 
  326860             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  326861             :        */
  326862             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  326863             : 
  326864             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  326865             :        // This traversal helps support internal tools that call static member functions.
  326866             :        // note: this function operates on the memory pools.
  326867             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  326868             :        */
  326869             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  326870             :       /* */
  326871             : 
  326872             : 
  326873             :      public:
  326874             :       /* name Memory Allocation Functions
  326875             :           \brief Memory allocations functions ... incomplete-documentation
  326876             : 
  326877             :           These functions have been made public as part of the design, but they are suggested for internal use 
  326878             :           or by particularly knowledgable users for specialized tools or applications.
  326879             :        */
  326880             :       /* */
  326881             : 
  326882             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  326883             : 
  326884             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  326885             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  326886             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  326887             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  326888             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  326889             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  326890             :           being used with the AST File I/O mechanism.
  326891             :        */
  326892             :           virtual bool isInMemoryPool() override;
  326893             : 
  326894             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  326895             : 
  326896             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  326897             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  326898             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  326899             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  326900             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  326901             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  326902             :           being used with the AST File I/O mechanism.
  326903             :        */
  326904             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  326905             : 
  326906             :       // DQ (4/30/2006): Modified to be a const function.
  326907             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  326908             : 
  326909             :           This functions is part of general support for many possible tools to operate 
  326910             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  326911             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  326912             :           less than the set of pointers used by the AST file I/O. This is part of
  326913             :           work implemented by Andreas, and support tools such as the AST graph generation.
  326914             : 
  326915             :           \warning This function can return unexpected data members and thus the 
  326916             :                    order and the number of elements is unpredicable and subject 
  326917             :                    to change.
  326918             : 
  326919             :           \returns STL vector of pairs of SgNode* and strings
  326920             :        */
  326921             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  326922             : 
  326923             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  326924             : 
  326925             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  326926             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  326927             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  326928             : 
  326929             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  326930             :                    and subject to change.
  326931             :        */
  326932             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  326933             : 
  326934             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  326935             : 
  326936             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  326937             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  326938             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  326939             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  326940             : 
  326941             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  326942             : 
  326943             :           \returns long
  326944             :        */
  326945             :           virtual long getChildIndex( SgNode* childNode ) const override;
  326946             : 
  326947             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  326948             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326949             :       /* \brief Constructor for use by AST File I/O Mechanism
  326950             : 
  326951             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  326952             :           which obtained via fast binary file I/O from disk.
  326953             :        */
  326954             :        // SgFunctionTypeSymbol( SgFunctionTypeSymbolStorageClass& source );
  326955             : 
  326956             : 
  326957             : 
  326958             : 
  326959             : 
  326960             :  // JH (10/24/2005): methods added to support the ast file IO
  326961             :     private:
  326962             : 
  326963             :       /* name AST Memory Allocation Support Functions
  326964             :           \brief Memory allocations support....
  326965             : 
  326966             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  326967             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  326968             :           and support the AST File I/O Mechanism.
  326969             :        */
  326970             :       /* */
  326971             : 
  326972             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  326973             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  326974             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  326975             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  326976             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  326977             :           a correspinding one in the AST_FILE_IO class!
  326978             :        */
  326979             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  326980             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326981             :       /* \brief Typedef used for low level memory access.
  326982             :        */
  326983             :        // typedef unsigned char* TestType;
  326984             : 
  326985             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  326986             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  326987             :       /* \brief Typedef used to hold memory addresses as values.
  326988             :        */
  326989             :        // typedef unsigned long  AddressType;
  326990             : 
  326991             : 
  326992             : 
  326993             :        // necessary, to have direct access to the p_freepointer and the private methods !
  326994             :       /*! \brief friend class declaration to support AST File I/O */
  326995             :           friend class AST_FILE_IO;
  326996             : 
  326997             :       /*! \brief friend class declaration to support AST File I/O */
  326998             :           friend class SgFunctionTypeSymbolStorageClass;
  326999             : 
  327000             :       /*! \brief friend class declaration to support AST File I/O */
  327001             :           friend class AstSpecificDataManagingClass;
  327002             : 
  327003             :       /*! \brief friend class declaration to support AST File I/O */
  327004             :           friend class AstSpecificDataManagingClassStorageClass;
  327005             :     public:
  327006             :       /*! \brief IR node constructor to support AST File I/O */
  327007             :           SgFunctionTypeSymbol( const SgFunctionTypeSymbolStorageClass& source );
  327008             : 
  327009             :  // private: // JJW hack
  327010             :        /*
  327011             :           name AST Memory Allocation Support Variables
  327012             :           Memory allocations support variables 
  327013             : 
  327014             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  327015             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  327016             :           and support the AST File I/O Mechanism.
  327017             :        */
  327018             :       /* */
  327019             : 
  327020             :     public:
  327021             : 
  327022             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  327023             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  327024             :       // virtual SgNode* addRegExpAttribute();
  327025             :       /*! \brief Support for AST matching using regular expression.
  327026             : 
  327027             :           This support is incomplete and the subject of current research to define 
  327028             :           RegEx trees to support inexact matching.
  327029             :        */
  327030             :           SgFunctionTypeSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  327031             : 
  327032             : // *** COMMON CODE SECTION ENDS HERE ***
  327033             : 
  327034             : 
  327035             : // End of memberFunctionString
  327036             : // Start of memberFunctionString
  327037             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  327038             : 
  327039             :      // the generated cast function
  327040             :      // friend ROSE_DLL_API SgFunctionTypeSymbol* isSgFunctionTypeSymbol ( SgNode* s );
  327041             : 
  327042             :           typedef SgSymbol base_node_type;
  327043             : 
  327044             : 
  327045             : // End of memberFunctionString
  327046             : 
  327047             :      public: 
  327048             :          SgName get_name() const override /* (getDataAccessFunctionPrototypeString) */;
  327049             :          void set_name(SgName name) /* (getDataAccessFunctionPrototypeString) */;
  327050             : 
  327051             :      public: 
  327052             :          SgType* get_type() const override /* (getDataAccessFunctionPrototypeString) */;
  327053             :          void set_type(SgType* type) /* (getDataAccessFunctionPrototypeString) */;
  327054             : 
  327055             : 
  327056             :      public: 
  327057             :          virtual ~SgFunctionTypeSymbol();
  327058             : 
  327059             : 
  327060             :      public: 
  327061             :          SgFunctionTypeSymbol(SgName name = "", SgType* type = NULL); 
  327062             : 
  327063             :     protected:
  327064             : // Start of memberFunctionString
  327065             : SgName p_name;
  327066             :           
  327067             : // End of memberFunctionString
  327068             : // Start of memberFunctionString
  327069             : SgType* p_type;
  327070             :           
  327071             : // End of memberFunctionString
  327072             : 
  327073             :     friend struct Rose::Traits::generated::describe_node_t<SgFunctionTypeSymbol>;
  327074             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionTypeSymbol, SgName,&SgFunctionTypeSymbol::p_name>;
  327075             :     friend struct Rose::Traits::generated::describe_field_t<SgFunctionTypeSymbol, SgType*,&SgFunctionTypeSymbol::p_type>;
  327076             : 
  327077             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327078             : 
  327079             : 
  327080             :    };
  327081             : #endif
  327082             : 
  327083             : // postdeclarations for SgFunctionTypeSymbol
  327084             : 
  327085             : /* #line 327086 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327086             : 
  327087             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  327088             : 
  327089             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327090             : 
  327091             : 
  327092             : /* #line 327093 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327093             : 
  327094             : 
  327095             : 
  327096             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327097             : 
  327098             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  327099             : //      This code is automatically generated for each 
  327100             : //      terminal and non-terminal within the defined 
  327101             : //      grammar.  There is a simple way to change the 
  327102             : //      code to fix bugs etc.  See the ROSE README file
  327103             : //      for directions.
  327104             : 
  327105             : // tps: (02/22/2010): Adding DLL export requirements
  327106             : #include "rosedll.h"
  327107             : 
  327108             : // predeclarations for SgClassSymbol
  327109             : 
  327110             : /* #line 327111 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327111             : 
  327112             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  327113             : 
  327114             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327115             : 
  327116             : #if 1
  327117             : // Class Definition for SgClassSymbol
  327118             : class ROSE_DLL_API SgClassSymbol  : public SgSymbol
  327119             :    {
  327120             :      public:
  327121             : 
  327122             : 
  327123             : /* #line 327124 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327124             : 
  327125             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  327126             : // Start of memberFunctionString
  327127             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  327128             : 
  327129             : // *** COMMON CODE SECTION BEGINS HERE ***
  327130             : 
  327131             :     public:
  327132             : 
  327133             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  327134             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  327135             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  327136             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  327137             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  327138             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  327139             : 
  327140             :       /*! \brief returns a string representing the class name */
  327141             :           virtual std::string class_name() const override;
  327142             : 
  327143             :       /*! \brief returns new style SageIII enum values */
  327144             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  327145             : 
  327146             :       /*! \brief static variant value */
  327147             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  327148             :        // static const VariantT static_variant = V_SgClassSymbol;
  327149             :           enum { static_variant = V_SgClassSymbol };
  327150             : 
  327151             :        /* the generated cast function */
  327152             :       /*! \brief Casts pointer from base class to derived class */
  327153             :           ROSE_DLL_API friend       SgClassSymbol* isSgClassSymbol(       SgNode * s );
  327154             : 
  327155             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  327156             :           ROSE_DLL_API friend const SgClassSymbol* isSgClassSymbol( const SgNode * s );
  327157             : 
  327158             :      // ******************************************
  327159             :      // * Memory Pool / New / Delete
  327160             :      // ******************************************
  327161             : 
  327162             :      public:
  327163             :           /// \private
  327164             :           static const unsigned pool_size; //
  327165             :           /// \private
  327166             :           static std::vector<unsigned char *> pools; //
  327167             :           /// \private
  327168             :           static SgClassSymbol * next_node; // 
  327169             : 
  327170             :           /// \private
  327171             :           static unsigned long initializeStorageClassArray(SgClassSymbolStorageClass *); //
  327172             : 
  327173             :           /// \private
  327174             :           static void clearMemoryPool(); //
  327175             :           static void deleteMemoryPool(); //
  327176             : 
  327177             :           /// \private
  327178             :           static void extendMemoryPoolForFileIO(); //
  327179             : 
  327180             :           /// \private
  327181             :           static SgClassSymbol * getPointerFromGlobalIndex(unsigned long); //
  327182             :           /// \private
  327183             :           static SgClassSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  327184             : 
  327185             :           /// \private
  327186             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  327187             :           /// \private
  327188             :           static void resetValidFreepointers(); //
  327189             :           /// \private
  327190             :           static unsigned long getNumberOfLastValidPointer(); //
  327191             : 
  327192             : 
  327193             : #if defined(INLINE_FUNCTIONS)
  327194             :       /*! \brief returns pointer to newly allocated IR node */
  327195             :           inline void *operator new (size_t size);
  327196             : #else
  327197             :       /*! \brief returns pointer to newly allocated IR node */
  327198             :           void *operator new (size_t size);
  327199             : #endif
  327200             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  327201             :           void operator delete (void* pointer, size_t size);
  327202             : 
  327203             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  327204        1704 :           void operator delete (void* pointer)
  327205             :              {
  327206             :             // This is the generated delete operator...
  327207        1704 :                SgClassSymbol::operator delete (pointer,sizeof(SgClassSymbol));
  327208             :              }
  327209             : 
  327210             :       /*! \brief Returns the total number of IR nodes of this type */
  327211             :           static size_t numberOfNodes();
  327212             : 
  327213             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  327214             :           static size_t memoryUsage();
  327215             : 
  327216             :       // End of scope which started in IR nodes specific code 
  327217             :       /* */
  327218             : 
  327219             :       /* name Internal Functions
  327220             :           \brief Internal functions ... incomplete-documentation
  327221             : 
  327222             :           These functions have been made public as part of the design, but they are suggested for internal use 
  327223             :           or by particularly knowledgeable users for specialized tools or applications.
  327224             : 
  327225             :           \internal We could not make these private because they are required by user for special purposes. And 
  327226             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  327227             :          
  327228             :        */
  327229             : 
  327230             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  327231             :        // overridden in every class by *generated* implementation
  327232             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  327233             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  327234             :        // MS: 06/28/02 container of names of variables or container indices 
  327235             :        // used used in the traversal to access AST successor nodes
  327236             :        // overridden in every class by *generated* implementation
  327237             :       /*! \brief container of names of variables or container indices used used in the traversal
  327238             :           to access AST successor nodes overridden in every class by *generated* implementation */
  327239             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  327240             : 
  327241             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  327242             :        // than all the vector copies. The implementation for these functions is generated for each class.
  327243             :       /*! \brief return number of children in the traversal successor list */
  327244             :           virtual size_t get_numberOfTraversalSuccessors() override;
  327245             :       /*! \brief index-based access to traversal successors by index number */
  327246             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  327247             :       /*! \brief index-based access to traversal successors by child node */
  327248             :           virtual size_t get_childIndex(SgNode *child) override;
  327249             : 
  327250             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  327251             :        // MS: 08/16/2002 method for generating RTI information
  327252             :       /*! \brief return C++ Runtime-Time-Information */
  327253             :           virtual RTIReturnType roseRTI() override;
  327254             : #endif
  327255             :       /* */
  327256             : 
  327257             : 
  327258             : 
  327259             :       /* name Deprecated Functions
  327260             :           \brief Deprecated functions ... incomplete-documentation
  327261             : 
  327262             :           These functions have been deprecated from use.
  327263             :        */
  327264             :       /* */
  327265             : 
  327266             :       /*! returns a C style string (char*) representing the class name */
  327267             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  327268             : 
  327269             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  327270             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  327271             : #if 0
  327272             :       /*! returns old style Sage II enum values */
  327273             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  327274             :       /*! returns old style Sage II enum values */
  327275             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  327276             : #endif
  327277             :       /* */
  327278             : 
  327279             : 
  327280             : 
  327281             : 
  327282             :      public:
  327283             :       /* name Traversal Support Functions
  327284             :           \brief Traversal support functions ... incomplete-documentation
  327285             : 
  327286             :           These functions have been made public as part of the design, but they are suggested for internal use 
  327287             :           or by particularly knowledgable users for specialized tools or applications.
  327288             :        */
  327289             :       /* */
  327290             : 
  327291             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  327292             :        // (inferior to ROSE traversal mechanism, experimental).
  327293             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  327294             :        */
  327295             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  327296             : 
  327297             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  327298             :       /*! \brief support for the classic visitor pattern done in GoF */
  327299             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  327300             : 
  327301             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  327302             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  327303             :        */
  327304             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  327305             : 
  327306             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  327307             :        */
  327308             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  327309             : 
  327310             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  327311             :        // This traversal helps support internal tools that call static member functions.
  327312             :        // note: this function operates on the memory pools.
  327313             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  327314             :        */
  327315             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  327316             :       /* */
  327317             : 
  327318             : 
  327319             :      public:
  327320             :       /* name Memory Allocation Functions
  327321             :           \brief Memory allocations functions ... incomplete-documentation
  327322             : 
  327323             :           These functions have been made public as part of the design, but they are suggested for internal use 
  327324             :           or by particularly knowledgable users for specialized tools or applications.
  327325             :        */
  327326             :       /* */
  327327             : 
  327328             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  327329             : 
  327330             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  327331             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  327332             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  327333             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  327334             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  327335             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  327336             :           being used with the AST File I/O mechanism.
  327337             :        */
  327338             :           virtual bool isInMemoryPool() override;
  327339             : 
  327340             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  327341             : 
  327342             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  327343             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  327344             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  327345             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  327346             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  327347             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  327348             :           being used with the AST File I/O mechanism.
  327349             :        */
  327350             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  327351             : 
  327352             :       // DQ (4/30/2006): Modified to be a const function.
  327353             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  327354             : 
  327355             :           This functions is part of general support for many possible tools to operate 
  327356             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  327357             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  327358             :           less than the set of pointers used by the AST file I/O. This is part of
  327359             :           work implemented by Andreas, and support tools such as the AST graph generation.
  327360             : 
  327361             :           \warning This function can return unexpected data members and thus the 
  327362             :                    order and the number of elements is unpredicable and subject 
  327363             :                    to change.
  327364             : 
  327365             :           \returns STL vector of pairs of SgNode* and strings
  327366             :        */
  327367             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  327368             : 
  327369             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  327370             : 
  327371             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  327372             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  327373             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  327374             : 
  327375             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  327376             :                    and subject to change.
  327377             :        */
  327378             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  327379             : 
  327380             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  327381             : 
  327382             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  327383             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  327384             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  327385             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  327386             : 
  327387             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  327388             : 
  327389             :           \returns long
  327390             :        */
  327391             :           virtual long getChildIndex( SgNode* childNode ) const override;
  327392             : 
  327393             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  327394             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  327395             :       /* \brief Constructor for use by AST File I/O Mechanism
  327396             : 
  327397             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  327398             :           which obtained via fast binary file I/O from disk.
  327399             :        */
  327400             :        // SgClassSymbol( SgClassSymbolStorageClass& source );
  327401             : 
  327402             : 
  327403             : 
  327404             : 
  327405             : 
  327406             :  // JH (10/24/2005): methods added to support the ast file IO
  327407             :     private:
  327408             : 
  327409             :       /* name AST Memory Allocation Support Functions
  327410             :           \brief Memory allocations support....
  327411             : 
  327412             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  327413             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  327414             :           and support the AST File I/O Mechanism.
  327415             :        */
  327416             :       /* */
  327417             : 
  327418             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  327419             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  327420             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  327421             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  327422             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  327423             :           a correspinding one in the AST_FILE_IO class!
  327424             :        */
  327425             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  327426             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  327427             :       /* \brief Typedef used for low level memory access.
  327428             :        */
  327429             :        // typedef unsigned char* TestType;
  327430             : 
  327431             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  327432             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  327433             :       /* \brief Typedef used to hold memory addresses as values.
  327434             :        */
  327435             :        // typedef unsigned long  AddressType;
  327436             : 
  327437             : 
  327438             : 
  327439             :        // necessary, to have direct access to the p_freepointer and the private methods !
  327440             :       /*! \brief friend class declaration to support AST File I/O */
  327441             :           friend class AST_FILE_IO;
  327442             : 
  327443             :       /*! \brief friend class declaration to support AST File I/O */
  327444             :           friend class SgClassSymbolStorageClass;
  327445             : 
  327446             :       /*! \brief friend class declaration to support AST File I/O */
  327447             :           friend class AstSpecificDataManagingClass;
  327448             : 
  327449             :       /*! \brief friend class declaration to support AST File I/O */
  327450             :           friend class AstSpecificDataManagingClassStorageClass;
  327451             :     public:
  327452             :       /*! \brief IR node constructor to support AST File I/O */
  327453             :           SgClassSymbol( const SgClassSymbolStorageClass& source );
  327454             : 
  327455             :  // private: // JJW hack
  327456             :        /*
  327457             :           name AST Memory Allocation Support Variables
  327458             :           Memory allocations support variables 
  327459             : 
  327460             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  327461             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  327462             :           and support the AST File I/O Mechanism.
  327463             :        */
  327464             :       /* */
  327465             : 
  327466             :     public:
  327467             : 
  327468             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  327469             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  327470             :       // virtual SgNode* addRegExpAttribute();
  327471             :       /*! \brief Support for AST matching using regular expression.
  327472             : 
  327473             :           This support is incomplete and the subject of current research to define 
  327474             :           RegEx trees to support inexact matching.
  327475             :        */
  327476             :           SgClassSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  327477             : 
  327478             : // *** COMMON CODE SECTION ENDS HERE ***
  327479             : 
  327480             : 
  327481             : // End of memberFunctionString
  327482             : // Start of memberFunctionString
  327483             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  327484             : 
  327485             :      // the generated cast function
  327486             :      // friend ROSE_DLL_API SgClassSymbol* isSgClassSymbol ( SgNode* s );
  327487             : 
  327488             :           typedef SgSymbol base_node_type;
  327489             : 
  327490             : 
  327491             : // End of memberFunctionString
  327492             : // Start of memberFunctionString
  327493             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  327494             : 
  327495             :           SgName get_name() const override;
  327496             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  327497             : 
  327498             : 
  327499             : // End of memberFunctionString
  327500             : // Start of memberFunctionString
  327501             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  327502             : 
  327503             :        // DQ (3/23/2017): ROSETTA macro expansion
  327504             :           SgType* get_type() const override;
  327505             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  327506             : 
  327507             : 
  327508             : // End of memberFunctionString
  327509             : 
  327510             :      public: 
  327511             :          SgClassDeclaration* get_declaration() const;
  327512             :          void set_declaration(SgClassDeclaration* declaration);
  327513             : 
  327514             : 
  327515             :      public: 
  327516             :          virtual ~SgClassSymbol();
  327517             : 
  327518             : 
  327519             :      public: 
  327520             :          SgClassSymbol(SgClassDeclaration* declaration = NULL); 
  327521             : 
  327522             :     protected:
  327523             : // Start of memberFunctionString
  327524             : SgClassDeclaration* p_declaration;
  327525             :           
  327526             : // End of memberFunctionString
  327527             : 
  327528             :     friend struct Rose::Traits::generated::describe_node_t<SgClassSymbol>;
  327529             :     friend struct Rose::Traits::generated::describe_field_t<SgClassSymbol, SgClassDeclaration*,&SgClassSymbol::p_declaration>;
  327530             : 
  327531             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327532             : 
  327533             : 
  327534             :    };
  327535             : #endif
  327536             : 
  327537             : // postdeclarations for SgClassSymbol
  327538             : 
  327539             : /* #line 327540 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327540             : 
  327541             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  327542             : 
  327543             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327544             : 
  327545             : 
  327546             : /* #line 327547 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327547             : 
  327548             : 
  327549             : 
  327550             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327551             : 
  327552             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  327553             : //      This code is automatically generated for each 
  327554             : //      terminal and non-terminal within the defined 
  327555             : //      grammar.  There is a simple way to change the 
  327556             : //      code to fix bugs etc.  See the ROSE README file
  327557             : //      for directions.
  327558             : 
  327559             : // tps: (02/22/2010): Adding DLL export requirements
  327560             : #include "rosedll.h"
  327561             : 
  327562             : // predeclarations for SgTemplateClassSymbol
  327563             : 
  327564             : /* #line 327565 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327565             : 
  327566             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  327567             : 
  327568             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327569             : 
  327570             : #if 1
  327571             : // Class Definition for SgTemplateClassSymbol
  327572             : class ROSE_DLL_API SgTemplateClassSymbol  : public SgClassSymbol
  327573             :    {
  327574             :      public:
  327575             : 
  327576             : 
  327577             : /* #line 327578 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327578             : 
  327579             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  327580             : // Start of memberFunctionString
  327581             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  327582             : 
  327583             : // *** COMMON CODE SECTION BEGINS HERE ***
  327584             : 
  327585             :     public:
  327586             : 
  327587             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  327588             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  327589             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  327590             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  327591             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  327592             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  327593             : 
  327594             :       /*! \brief returns a string representing the class name */
  327595             :           virtual std::string class_name() const override;
  327596             : 
  327597             :       /*! \brief returns new style SageIII enum values */
  327598             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  327599             : 
  327600             :       /*! \brief static variant value */
  327601             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  327602             :        // static const VariantT static_variant = V_SgTemplateClassSymbol;
  327603             :           enum { static_variant = V_SgTemplateClassSymbol };
  327604             : 
  327605             :        /* the generated cast function */
  327606             :       /*! \brief Casts pointer from base class to derived class */
  327607             :           ROSE_DLL_API friend       SgTemplateClassSymbol* isSgTemplateClassSymbol(       SgNode * s );
  327608             : 
  327609             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  327610             :           ROSE_DLL_API friend const SgTemplateClassSymbol* isSgTemplateClassSymbol( const SgNode * s );
  327611             : 
  327612             :      // ******************************************
  327613             :      // * Memory Pool / New / Delete
  327614             :      // ******************************************
  327615             : 
  327616             :      public:
  327617             :           /// \private
  327618             :           static const unsigned pool_size; //
  327619             :           /// \private
  327620             :           static std::vector<unsigned char *> pools; //
  327621             :           /// \private
  327622             :           static SgTemplateClassSymbol * next_node; // 
  327623             : 
  327624             :           /// \private
  327625             :           static unsigned long initializeStorageClassArray(SgTemplateClassSymbolStorageClass *); //
  327626             : 
  327627             :           /// \private
  327628             :           static void clearMemoryPool(); //
  327629             :           static void deleteMemoryPool(); //
  327630             : 
  327631             :           /// \private
  327632             :           static void extendMemoryPoolForFileIO(); //
  327633             : 
  327634             :           /// \private
  327635             :           static SgTemplateClassSymbol * getPointerFromGlobalIndex(unsigned long); //
  327636             :           /// \private
  327637             :           static SgTemplateClassSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  327638             : 
  327639             :           /// \private
  327640             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  327641             :           /// \private
  327642             :           static void resetValidFreepointers(); //
  327643             :           /// \private
  327644             :           static unsigned long getNumberOfLastValidPointer(); //
  327645             : 
  327646             : 
  327647             : #if defined(INLINE_FUNCTIONS)
  327648             :       /*! \brief returns pointer to newly allocated IR node */
  327649             :           inline void *operator new (size_t size);
  327650             : #else
  327651             :       /*! \brief returns pointer to newly allocated IR node */
  327652             :           void *operator new (size_t size);
  327653             : #endif
  327654             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  327655             :           void operator delete (void* pointer, size_t size);
  327656             : 
  327657             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  327658        1144 :           void operator delete (void* pointer)
  327659             :              {
  327660             :             // This is the generated delete operator...
  327661        1144 :                SgTemplateClassSymbol::operator delete (pointer,sizeof(SgTemplateClassSymbol));
  327662             :              }
  327663             : 
  327664             :       /*! \brief Returns the total number of IR nodes of this type */
  327665             :           static size_t numberOfNodes();
  327666             : 
  327667             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  327668             :           static size_t memoryUsage();
  327669             : 
  327670             :       // End of scope which started in IR nodes specific code 
  327671             :       /* */
  327672             : 
  327673             :       /* name Internal Functions
  327674             :           \brief Internal functions ... incomplete-documentation
  327675             : 
  327676             :           These functions have been made public as part of the design, but they are suggested for internal use 
  327677             :           or by particularly knowledgeable users for specialized tools or applications.
  327678             : 
  327679             :           \internal We could not make these private because they are required by user for special purposes. And 
  327680             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  327681             :          
  327682             :        */
  327683             : 
  327684             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  327685             :        // overridden in every class by *generated* implementation
  327686             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  327687             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  327688             :        // MS: 06/28/02 container of names of variables or container indices 
  327689             :        // used used in the traversal to access AST successor nodes
  327690             :        // overridden in every class by *generated* implementation
  327691             :       /*! \brief container of names of variables or container indices used used in the traversal
  327692             :           to access AST successor nodes overridden in every class by *generated* implementation */
  327693             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  327694             : 
  327695             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  327696             :        // than all the vector copies. The implementation for these functions is generated for each class.
  327697             :       /*! \brief return number of children in the traversal successor list */
  327698             :           virtual size_t get_numberOfTraversalSuccessors() override;
  327699             :       /*! \brief index-based access to traversal successors by index number */
  327700             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  327701             :       /*! \brief index-based access to traversal successors by child node */
  327702             :           virtual size_t get_childIndex(SgNode *child) override;
  327703             : 
  327704             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  327705             :        // MS: 08/16/2002 method for generating RTI information
  327706             :       /*! \brief return C++ Runtime-Time-Information */
  327707             :           virtual RTIReturnType roseRTI() override;
  327708             : #endif
  327709             :       /* */
  327710             : 
  327711             : 
  327712             : 
  327713             :       /* name Deprecated Functions
  327714             :           \brief Deprecated functions ... incomplete-documentation
  327715             : 
  327716             :           These functions have been deprecated from use.
  327717             :        */
  327718             :       /* */
  327719             : 
  327720             :       /*! returns a C style string (char*) representing the class name */
  327721             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  327722             : 
  327723             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  327724             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  327725             : #if 0
  327726             :       /*! returns old style Sage II enum values */
  327727             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  327728             :       /*! returns old style Sage II enum values */
  327729             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  327730             : #endif
  327731             :       /* */
  327732             : 
  327733             : 
  327734             : 
  327735             : 
  327736             :      public:
  327737             :       /* name Traversal Support Functions
  327738             :           \brief Traversal support functions ... incomplete-documentation
  327739             : 
  327740             :           These functions have been made public as part of the design, but they are suggested for internal use 
  327741             :           or by particularly knowledgable users for specialized tools or applications.
  327742             :        */
  327743             :       /* */
  327744             : 
  327745             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  327746             :        // (inferior to ROSE traversal mechanism, experimental).
  327747             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  327748             :        */
  327749             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  327750             : 
  327751             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  327752             :       /*! \brief support for the classic visitor pattern done in GoF */
  327753             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  327754             : 
  327755             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  327756             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  327757             :        */
  327758             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  327759             : 
  327760             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  327761             :        */
  327762             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  327763             : 
  327764             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  327765             :        // This traversal helps support internal tools that call static member functions.
  327766             :        // note: this function operates on the memory pools.
  327767             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  327768             :        */
  327769             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  327770             :       /* */
  327771             : 
  327772             : 
  327773             :      public:
  327774             :       /* name Memory Allocation Functions
  327775             :           \brief Memory allocations functions ... incomplete-documentation
  327776             : 
  327777             :           These functions have been made public as part of the design, but they are suggested for internal use 
  327778             :           or by particularly knowledgable users for specialized tools or applications.
  327779             :        */
  327780             :       /* */
  327781             : 
  327782             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  327783             : 
  327784             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  327785             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  327786             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  327787             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  327788             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  327789             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  327790             :           being used with the AST File I/O mechanism.
  327791             :        */
  327792             :           virtual bool isInMemoryPool() override;
  327793             : 
  327794             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  327795             : 
  327796             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  327797             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  327798             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  327799             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  327800             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  327801             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  327802             :           being used with the AST File I/O mechanism.
  327803             :        */
  327804             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  327805             : 
  327806             :       // DQ (4/30/2006): Modified to be a const function.
  327807             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  327808             : 
  327809             :           This functions is part of general support for many possible tools to operate 
  327810             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  327811             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  327812             :           less than the set of pointers used by the AST file I/O. This is part of
  327813             :           work implemented by Andreas, and support tools such as the AST graph generation.
  327814             : 
  327815             :           \warning This function can return unexpected data members and thus the 
  327816             :                    order and the number of elements is unpredicable and subject 
  327817             :                    to change.
  327818             : 
  327819             :           \returns STL vector of pairs of SgNode* and strings
  327820             :        */
  327821             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  327822             : 
  327823             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  327824             : 
  327825             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  327826             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  327827             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  327828             : 
  327829             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  327830             :                    and subject to change.
  327831             :        */
  327832             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  327833             : 
  327834             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  327835             : 
  327836             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  327837             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  327838             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  327839             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  327840             : 
  327841             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  327842             : 
  327843             :           \returns long
  327844             :        */
  327845             :           virtual long getChildIndex( SgNode* childNode ) const override;
  327846             : 
  327847             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  327848             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  327849             :       /* \brief Constructor for use by AST File I/O Mechanism
  327850             : 
  327851             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  327852             :           which obtained via fast binary file I/O from disk.
  327853             :        */
  327854             :        // SgTemplateClassSymbol( SgTemplateClassSymbolStorageClass& source );
  327855             : 
  327856             : 
  327857             : 
  327858             : 
  327859             : 
  327860             :  // JH (10/24/2005): methods added to support the ast file IO
  327861             :     private:
  327862             : 
  327863             :       /* name AST Memory Allocation Support Functions
  327864             :           \brief Memory allocations support....
  327865             : 
  327866             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  327867             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  327868             :           and support the AST File I/O Mechanism.
  327869             :        */
  327870             :       /* */
  327871             : 
  327872             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  327873             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  327874             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  327875             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  327876             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  327877             :           a correspinding one in the AST_FILE_IO class!
  327878             :        */
  327879             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  327880             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  327881             :       /* \brief Typedef used for low level memory access.
  327882             :        */
  327883             :        // typedef unsigned char* TestType;
  327884             : 
  327885             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  327886             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  327887             :       /* \brief Typedef used to hold memory addresses as values.
  327888             :        */
  327889             :        // typedef unsigned long  AddressType;
  327890             : 
  327891             : 
  327892             : 
  327893             :        // necessary, to have direct access to the p_freepointer and the private methods !
  327894             :       /*! \brief friend class declaration to support AST File I/O */
  327895             :           friend class AST_FILE_IO;
  327896             : 
  327897             :       /*! \brief friend class declaration to support AST File I/O */
  327898             :           friend class SgTemplateClassSymbolStorageClass;
  327899             : 
  327900             :       /*! \brief friend class declaration to support AST File I/O */
  327901             :           friend class AstSpecificDataManagingClass;
  327902             : 
  327903             :       /*! \brief friend class declaration to support AST File I/O */
  327904             :           friend class AstSpecificDataManagingClassStorageClass;
  327905             :     public:
  327906             :       /*! \brief IR node constructor to support AST File I/O */
  327907             :           SgTemplateClassSymbol( const SgTemplateClassSymbolStorageClass& source );
  327908             : 
  327909             :  // private: // JJW hack
  327910             :        /*
  327911             :           name AST Memory Allocation Support Variables
  327912             :           Memory allocations support variables 
  327913             : 
  327914             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  327915             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  327916             :           and support the AST File I/O Mechanism.
  327917             :        */
  327918             :       /* */
  327919             : 
  327920             :     public:
  327921             : 
  327922             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  327923             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  327924             :       // virtual SgNode* addRegExpAttribute();
  327925             :       /*! \brief Support for AST matching using regular expression.
  327926             : 
  327927             :           This support is incomplete and the subject of current research to define 
  327928             :           RegEx trees to support inexact matching.
  327929             :        */
  327930             :           SgTemplateClassSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  327931             : 
  327932             : // *** COMMON CODE SECTION ENDS HERE ***
  327933             : 
  327934             : 
  327935             : // End of memberFunctionString
  327936             : // Start of memberFunctionString
  327937             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  327938             : 
  327939             :      // the generated cast function
  327940             :      // friend ROSE_DLL_API SgTemplateClassSymbol* isSgTemplateClassSymbol ( SgNode* s );
  327941             : 
  327942             :           typedef SgClassSymbol base_node_type;
  327943             : 
  327944             : 
  327945             : // End of memberFunctionString
  327946             : // Start of memberFunctionString
  327947             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  327948             : 
  327949             :           SgName get_name() const override;
  327950             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  327951             : 
  327952             : 
  327953             : // End of memberFunctionString
  327954             : // Start of memberFunctionString
  327955             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  327956             : 
  327957             :        // DQ (3/23/2017): ROSETTA macro expansion
  327958             :           SgType* get_type() const override;
  327959             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  327960             : 
  327961             : 
  327962             : // End of memberFunctionString
  327963             : 
  327964             : 
  327965             :      public: 
  327966             :          virtual ~SgTemplateClassSymbol();
  327967             : 
  327968             : 
  327969             :      public: 
  327970             :          SgTemplateClassSymbol(SgClassDeclaration* declaration = NULL); 
  327971             : 
  327972             :     protected:
  327973             : 
  327974             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateClassSymbol>;
  327975             : 
  327976             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327977             : 
  327978             : 
  327979             :    };
  327980             : #endif
  327981             : 
  327982             : // postdeclarations for SgTemplateClassSymbol
  327983             : 
  327984             : /* #line 327985 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327985             : 
  327986             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  327987             : 
  327988             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327989             : 
  327990             : 
  327991             : /* #line 327992 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  327992             : 
  327993             : 
  327994             : 
  327995             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  327996             : 
  327997             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  327998             : //      This code is automatically generated for each 
  327999             : //      terminal and non-terminal within the defined 
  328000             : //      grammar.  There is a simple way to change the 
  328001             : //      code to fix bugs etc.  See the ROSE README file
  328002             : //      for directions.
  328003             : 
  328004             : // tps: (02/22/2010): Adding DLL export requirements
  328005             : #include "rosedll.h"
  328006             : 
  328007             : // predeclarations for SgTemplateSymbol
  328008             : 
  328009             : /* #line 328010 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328010             : 
  328011             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  328012             : 
  328013             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328014             : 
  328015             : #if 1
  328016             : // Class Definition for SgTemplateSymbol
  328017             : class ROSE_DLL_API SgTemplateSymbol  : public SgSymbol
  328018             :    {
  328019             :      public:
  328020             : 
  328021             : 
  328022             : /* #line 328023 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328023             : 
  328024             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  328025             : // Start of memberFunctionString
  328026             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  328027             : 
  328028             : // *** COMMON CODE SECTION BEGINS HERE ***
  328029             : 
  328030             :     public:
  328031             : 
  328032             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  328033             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  328034             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  328035             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  328036             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  328037             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  328038             : 
  328039             :       /*! \brief returns a string representing the class name */
  328040             :           virtual std::string class_name() const override;
  328041             : 
  328042             :       /*! \brief returns new style SageIII enum values */
  328043             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  328044             : 
  328045             :       /*! \brief static variant value */
  328046             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  328047             :        // static const VariantT static_variant = V_SgTemplateSymbol;
  328048             :           enum { static_variant = V_SgTemplateSymbol };
  328049             : 
  328050             :        /* the generated cast function */
  328051             :       /*! \brief Casts pointer from base class to derived class */
  328052             :           ROSE_DLL_API friend       SgTemplateSymbol* isSgTemplateSymbol(       SgNode * s );
  328053             : 
  328054             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  328055             :           ROSE_DLL_API friend const SgTemplateSymbol* isSgTemplateSymbol( const SgNode * s );
  328056             : 
  328057             :      // ******************************************
  328058             :      // * Memory Pool / New / Delete
  328059             :      // ******************************************
  328060             : 
  328061             :      public:
  328062             :           /// \private
  328063             :           static const unsigned pool_size; //
  328064             :           /// \private
  328065             :           static std::vector<unsigned char *> pools; //
  328066             :           /// \private
  328067             :           static SgTemplateSymbol * next_node; // 
  328068             : 
  328069             :           /// \private
  328070             :           static unsigned long initializeStorageClassArray(SgTemplateSymbolStorageClass *); //
  328071             : 
  328072             :           /// \private
  328073             :           static void clearMemoryPool(); //
  328074             :           static void deleteMemoryPool(); //
  328075             : 
  328076             :           /// \private
  328077             :           static void extendMemoryPoolForFileIO(); //
  328078             : 
  328079             :           /// \private
  328080             :           static SgTemplateSymbol * getPointerFromGlobalIndex(unsigned long); //
  328081             :           /// \private
  328082             :           static SgTemplateSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  328083             : 
  328084             :           /// \private
  328085             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  328086             :           /// \private
  328087             :           static void resetValidFreepointers(); //
  328088             :           /// \private
  328089             :           static unsigned long getNumberOfLastValidPointer(); //
  328090             : 
  328091             : 
  328092             : #if defined(INLINE_FUNCTIONS)
  328093             :       /*! \brief returns pointer to newly allocated IR node */
  328094             :           inline void *operator new (size_t size);
  328095             : #else
  328096             :       /*! \brief returns pointer to newly allocated IR node */
  328097             :           void *operator new (size_t size);
  328098             : #endif
  328099             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  328100             :           void operator delete (void* pointer, size_t size);
  328101             : 
  328102             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  328103           0 :           void operator delete (void* pointer)
  328104             :              {
  328105             :             // This is the generated delete operator...
  328106           0 :                SgTemplateSymbol::operator delete (pointer,sizeof(SgTemplateSymbol));
  328107             :              }
  328108             : 
  328109             :       /*! \brief Returns the total number of IR nodes of this type */
  328110             :           static size_t numberOfNodes();
  328111             : 
  328112             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  328113             :           static size_t memoryUsage();
  328114             : 
  328115             :       // End of scope which started in IR nodes specific code 
  328116             :       /* */
  328117             : 
  328118             :       /* name Internal Functions
  328119             :           \brief Internal functions ... incomplete-documentation
  328120             : 
  328121             :           These functions have been made public as part of the design, but they are suggested for internal use 
  328122             :           or by particularly knowledgeable users for specialized tools or applications.
  328123             : 
  328124             :           \internal We could not make these private because they are required by user for special purposes. And 
  328125             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  328126             :          
  328127             :        */
  328128             : 
  328129             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  328130             :        // overridden in every class by *generated* implementation
  328131             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  328132             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  328133             :        // MS: 06/28/02 container of names of variables or container indices 
  328134             :        // used used in the traversal to access AST successor nodes
  328135             :        // overridden in every class by *generated* implementation
  328136             :       /*! \brief container of names of variables or container indices used used in the traversal
  328137             :           to access AST successor nodes overridden in every class by *generated* implementation */
  328138             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  328139             : 
  328140             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  328141             :        // than all the vector copies. The implementation for these functions is generated for each class.
  328142             :       /*! \brief return number of children in the traversal successor list */
  328143             :           virtual size_t get_numberOfTraversalSuccessors() override;
  328144             :       /*! \brief index-based access to traversal successors by index number */
  328145             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  328146             :       /*! \brief index-based access to traversal successors by child node */
  328147             :           virtual size_t get_childIndex(SgNode *child) override;
  328148             : 
  328149             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  328150             :        // MS: 08/16/2002 method for generating RTI information
  328151             :       /*! \brief return C++ Runtime-Time-Information */
  328152             :           virtual RTIReturnType roseRTI() override;
  328153             : #endif
  328154             :       /* */
  328155             : 
  328156             : 
  328157             : 
  328158             :       /* name Deprecated Functions
  328159             :           \brief Deprecated functions ... incomplete-documentation
  328160             : 
  328161             :           These functions have been deprecated from use.
  328162             :        */
  328163             :       /* */
  328164             : 
  328165             :       /*! returns a C style string (char*) representing the class name */
  328166             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  328167             : 
  328168             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  328169             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  328170             : #if 0
  328171             :       /*! returns old style Sage II enum values */
  328172             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  328173             :       /*! returns old style Sage II enum values */
  328174             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  328175             : #endif
  328176             :       /* */
  328177             : 
  328178             : 
  328179             : 
  328180             : 
  328181             :      public:
  328182             :       /* name Traversal Support Functions
  328183             :           \brief Traversal support functions ... incomplete-documentation
  328184             : 
  328185             :           These functions have been made public as part of the design, but they are suggested for internal use 
  328186             :           or by particularly knowledgable users for specialized tools or applications.
  328187             :        */
  328188             :       /* */
  328189             : 
  328190             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  328191             :        // (inferior to ROSE traversal mechanism, experimental).
  328192             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  328193             :        */
  328194             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  328195             : 
  328196             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  328197             :       /*! \brief support for the classic visitor pattern done in GoF */
  328198             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  328199             : 
  328200             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  328201             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  328202             :        */
  328203             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  328204             : 
  328205             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  328206             :        */
  328207             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  328208             : 
  328209             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  328210             :        // This traversal helps support internal tools that call static member functions.
  328211             :        // note: this function operates on the memory pools.
  328212             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  328213             :        */
  328214             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  328215             :       /* */
  328216             : 
  328217             : 
  328218             :      public:
  328219             :       /* name Memory Allocation Functions
  328220             :           \brief Memory allocations functions ... incomplete-documentation
  328221             : 
  328222             :           These functions have been made public as part of the design, but they are suggested for internal use 
  328223             :           or by particularly knowledgable users for specialized tools or applications.
  328224             :        */
  328225             :       /* */
  328226             : 
  328227             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  328228             : 
  328229             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  328230             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  328231             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  328232             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  328233             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  328234             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  328235             :           being used with the AST File I/O mechanism.
  328236             :        */
  328237             :           virtual bool isInMemoryPool() override;
  328238             : 
  328239             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  328240             : 
  328241             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  328242             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  328243             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  328244             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  328245             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  328246             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  328247             :           being used with the AST File I/O mechanism.
  328248             :        */
  328249             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  328250             : 
  328251             :       // DQ (4/30/2006): Modified to be a const function.
  328252             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  328253             : 
  328254             :           This functions is part of general support for many possible tools to operate 
  328255             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  328256             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  328257             :           less than the set of pointers used by the AST file I/O. This is part of
  328258             :           work implemented by Andreas, and support tools such as the AST graph generation.
  328259             : 
  328260             :           \warning This function can return unexpected data members and thus the 
  328261             :                    order and the number of elements is unpredicable and subject 
  328262             :                    to change.
  328263             : 
  328264             :           \returns STL vector of pairs of SgNode* and strings
  328265             :        */
  328266             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  328267             : 
  328268             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  328269             : 
  328270             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  328271             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  328272             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  328273             : 
  328274             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  328275             :                    and subject to change.
  328276             :        */
  328277             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  328278             : 
  328279             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  328280             : 
  328281             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  328282             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  328283             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  328284             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  328285             : 
  328286             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  328287             : 
  328288             :           \returns long
  328289             :        */
  328290             :           virtual long getChildIndex( SgNode* childNode ) const override;
  328291             : 
  328292             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  328293             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  328294             :       /* \brief Constructor for use by AST File I/O Mechanism
  328295             : 
  328296             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  328297             :           which obtained via fast binary file I/O from disk.
  328298             :        */
  328299             :        // SgTemplateSymbol( SgTemplateSymbolStorageClass& source );
  328300             : 
  328301             : 
  328302             : 
  328303             : 
  328304             : 
  328305             :  // JH (10/24/2005): methods added to support the ast file IO
  328306             :     private:
  328307             : 
  328308             :       /* name AST Memory Allocation Support Functions
  328309             :           \brief Memory allocations support....
  328310             : 
  328311             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  328312             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  328313             :           and support the AST File I/O Mechanism.
  328314             :        */
  328315             :       /* */
  328316             : 
  328317             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  328318             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  328319             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  328320             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  328321             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  328322             :           a correspinding one in the AST_FILE_IO class!
  328323             :        */
  328324             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  328325             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  328326             :       /* \brief Typedef used for low level memory access.
  328327             :        */
  328328             :        // typedef unsigned char* TestType;
  328329             : 
  328330             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  328331             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  328332             :       /* \brief Typedef used to hold memory addresses as values.
  328333             :        */
  328334             :        // typedef unsigned long  AddressType;
  328335             : 
  328336             : 
  328337             : 
  328338             :        // necessary, to have direct access to the p_freepointer and the private methods !
  328339             :       /*! \brief friend class declaration to support AST File I/O */
  328340             :           friend class AST_FILE_IO;
  328341             : 
  328342             :       /*! \brief friend class declaration to support AST File I/O */
  328343             :           friend class SgTemplateSymbolStorageClass;
  328344             : 
  328345             :       /*! \brief friend class declaration to support AST File I/O */
  328346             :           friend class AstSpecificDataManagingClass;
  328347             : 
  328348             :       /*! \brief friend class declaration to support AST File I/O */
  328349             :           friend class AstSpecificDataManagingClassStorageClass;
  328350             :     public:
  328351             :       /*! \brief IR node constructor to support AST File I/O */
  328352             :           SgTemplateSymbol( const SgTemplateSymbolStorageClass& source );
  328353             : 
  328354             :  // private: // JJW hack
  328355             :        /*
  328356             :           name AST Memory Allocation Support Variables
  328357             :           Memory allocations support variables 
  328358             : 
  328359             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  328360             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  328361             :           and support the AST File I/O Mechanism.
  328362             :        */
  328363             :       /* */
  328364             : 
  328365             :     public:
  328366             : 
  328367             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  328368             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  328369             :       // virtual SgNode* addRegExpAttribute();
  328370             :       /*! \brief Support for AST matching using regular expression.
  328371             : 
  328372             :           This support is incomplete and the subject of current research to define 
  328373             :           RegEx trees to support inexact matching.
  328374             :        */
  328375             :           SgTemplateSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  328376             : 
  328377             : // *** COMMON CODE SECTION ENDS HERE ***
  328378             : 
  328379             : 
  328380             : // End of memberFunctionString
  328381             : // Start of memberFunctionString
  328382             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  328383             : 
  328384             :      // the generated cast function
  328385             :      // friend ROSE_DLL_API SgTemplateSymbol* isSgTemplateSymbol ( SgNode* s );
  328386             : 
  328387             :           typedef SgSymbol base_node_type;
  328388             : 
  328389             : 
  328390             : // End of memberFunctionString
  328391             : // Start of memberFunctionString
  328392             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  328393             : 
  328394             :           SgName get_name() const override;
  328395             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  328396             : 
  328397             : 
  328398             : // End of memberFunctionString
  328399             : // Start of memberFunctionString
  328400             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  328401             : 
  328402             :        // DQ (3/23/2017): ROSETTA macro expansion
  328403             :           SgType* get_type() const override;
  328404             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  328405             : 
  328406             : 
  328407             : // End of memberFunctionString
  328408             : 
  328409             :      public: 
  328410             :          SgTemplateDeclaration* get_declaration() const;
  328411             :          void set_declaration(SgTemplateDeclaration* declaration);
  328412             : 
  328413             : 
  328414             :      public: 
  328415             :          virtual ~SgTemplateSymbol();
  328416             : 
  328417             : 
  328418             :      public: 
  328419             :          SgTemplateSymbol(SgTemplateDeclaration* declaration = NULL); 
  328420             : 
  328421             :     protected:
  328422             : // Start of memberFunctionString
  328423             : SgTemplateDeclaration* p_declaration;
  328424             :           
  328425             : // End of memberFunctionString
  328426             : 
  328427             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateSymbol>;
  328428             :     friend struct Rose::Traits::generated::describe_field_t<SgTemplateSymbol, SgTemplateDeclaration*,&SgTemplateSymbol::p_declaration>;
  328429             : 
  328430             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328431             : 
  328432             : 
  328433             :    };
  328434             : #endif
  328435             : 
  328436             : // postdeclarations for SgTemplateSymbol
  328437             : 
  328438             : /* #line 328439 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328439             : 
  328440             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  328441             : 
  328442             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328443             : 
  328444             : 
  328445             : /* #line 328446 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328446             : 
  328447             : 
  328448             : 
  328449             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328450             : 
  328451             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  328452             : //      This code is automatically generated for each 
  328453             : //      terminal and non-terminal within the defined 
  328454             : //      grammar.  There is a simple way to change the 
  328455             : //      code to fix bugs etc.  See the ROSE README file
  328456             : //      for directions.
  328457             : 
  328458             : // tps: (02/22/2010): Adding DLL export requirements
  328459             : #include "rosedll.h"
  328460             : 
  328461             : // predeclarations for SgEnumSymbol
  328462             : 
  328463             : /* #line 328464 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328464             : 
  328465             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  328466             : 
  328467             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328468             : 
  328469             : #if 1
  328470             : // Class Definition for SgEnumSymbol
  328471             : class ROSE_DLL_API SgEnumSymbol  : public SgSymbol
  328472             :    {
  328473             :      public:
  328474             : 
  328475             : 
  328476             : /* #line 328477 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328477             : 
  328478             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  328479             : // Start of memberFunctionString
  328480             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  328481             : 
  328482             : // *** COMMON CODE SECTION BEGINS HERE ***
  328483             : 
  328484             :     public:
  328485             : 
  328486             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  328487             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  328488             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  328489             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  328490             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  328491             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  328492             : 
  328493             :       /*! \brief returns a string representing the class name */
  328494             :           virtual std::string class_name() const override;
  328495             : 
  328496             :       /*! \brief returns new style SageIII enum values */
  328497             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  328498             : 
  328499             :       /*! \brief static variant value */
  328500             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  328501             :        // static const VariantT static_variant = V_SgEnumSymbol;
  328502             :           enum { static_variant = V_SgEnumSymbol };
  328503             : 
  328504             :        /* the generated cast function */
  328505             :       /*! \brief Casts pointer from base class to derived class */
  328506             :           ROSE_DLL_API friend       SgEnumSymbol* isSgEnumSymbol(       SgNode * s );
  328507             : 
  328508             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  328509             :           ROSE_DLL_API friend const SgEnumSymbol* isSgEnumSymbol( const SgNode * s );
  328510             : 
  328511             :      // ******************************************
  328512             :      // * Memory Pool / New / Delete
  328513             :      // ******************************************
  328514             : 
  328515             :      public:
  328516             :           /// \private
  328517             :           static const unsigned pool_size; //
  328518             :           /// \private
  328519             :           static std::vector<unsigned char *> pools; //
  328520             :           /// \private
  328521             :           static SgEnumSymbol * next_node; // 
  328522             : 
  328523             :           /// \private
  328524             :           static unsigned long initializeStorageClassArray(SgEnumSymbolStorageClass *); //
  328525             : 
  328526             :           /// \private
  328527             :           static void clearMemoryPool(); //
  328528             :           static void deleteMemoryPool(); //
  328529             : 
  328530             :           /// \private
  328531             :           static void extendMemoryPoolForFileIO(); //
  328532             : 
  328533             :           /// \private
  328534             :           static SgEnumSymbol * getPointerFromGlobalIndex(unsigned long); //
  328535             :           /// \private
  328536             :           static SgEnumSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  328537             : 
  328538             :           /// \private
  328539             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  328540             :           /// \private
  328541             :           static void resetValidFreepointers(); //
  328542             :           /// \private
  328543             :           static unsigned long getNumberOfLastValidPointer(); //
  328544             : 
  328545             : 
  328546             : #if defined(INLINE_FUNCTIONS)
  328547             :       /*! \brief returns pointer to newly allocated IR node */
  328548             :           inline void *operator new (size_t size);
  328549             : #else
  328550             :       /*! \brief returns pointer to newly allocated IR node */
  328551             :           void *operator new (size_t size);
  328552             : #endif
  328553             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  328554             :           void operator delete (void* pointer, size_t size);
  328555             : 
  328556             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  328557         176 :           void operator delete (void* pointer)
  328558             :              {
  328559             :             // This is the generated delete operator...
  328560         176 :                SgEnumSymbol::operator delete (pointer,sizeof(SgEnumSymbol));
  328561             :              }
  328562             : 
  328563             :       /*! \brief Returns the total number of IR nodes of this type */
  328564             :           static size_t numberOfNodes();
  328565             : 
  328566             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  328567             :           static size_t memoryUsage();
  328568             : 
  328569             :       // End of scope which started in IR nodes specific code 
  328570             :       /* */
  328571             : 
  328572             :       /* name Internal Functions
  328573             :           \brief Internal functions ... incomplete-documentation
  328574             : 
  328575             :           These functions have been made public as part of the design, but they are suggested for internal use 
  328576             :           or by particularly knowledgeable users for specialized tools or applications.
  328577             : 
  328578             :           \internal We could not make these private because they are required by user for special purposes. And 
  328579             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  328580             :          
  328581             :        */
  328582             : 
  328583             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  328584             :        // overridden in every class by *generated* implementation
  328585             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  328586             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  328587             :        // MS: 06/28/02 container of names of variables or container indices 
  328588             :        // used used in the traversal to access AST successor nodes
  328589             :        // overridden in every class by *generated* implementation
  328590             :       /*! \brief container of names of variables or container indices used used in the traversal
  328591             :           to access AST successor nodes overridden in every class by *generated* implementation */
  328592             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  328593             : 
  328594             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  328595             :        // than all the vector copies. The implementation for these functions is generated for each class.
  328596             :       /*! \brief return number of children in the traversal successor list */
  328597             :           virtual size_t get_numberOfTraversalSuccessors() override;
  328598             :       /*! \brief index-based access to traversal successors by index number */
  328599             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  328600             :       /*! \brief index-based access to traversal successors by child node */
  328601             :           virtual size_t get_childIndex(SgNode *child) override;
  328602             : 
  328603             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  328604             :        // MS: 08/16/2002 method for generating RTI information
  328605             :       /*! \brief return C++ Runtime-Time-Information */
  328606             :           virtual RTIReturnType roseRTI() override;
  328607             : #endif
  328608             :       /* */
  328609             : 
  328610             : 
  328611             : 
  328612             :       /* name Deprecated Functions
  328613             :           \brief Deprecated functions ... incomplete-documentation
  328614             : 
  328615             :           These functions have been deprecated from use.
  328616             :        */
  328617             :       /* */
  328618             : 
  328619             :       /*! returns a C style string (char*) representing the class name */
  328620             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  328621             : 
  328622             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  328623             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  328624             : #if 0
  328625             :       /*! returns old style Sage II enum values */
  328626             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  328627             :       /*! returns old style Sage II enum values */
  328628             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  328629             : #endif
  328630             :       /* */
  328631             : 
  328632             : 
  328633             : 
  328634             : 
  328635             :      public:
  328636             :       /* name Traversal Support Functions
  328637             :           \brief Traversal support functions ... incomplete-documentation
  328638             : 
  328639             :           These functions have been made public as part of the design, but they are suggested for internal use 
  328640             :           or by particularly knowledgable users for specialized tools or applications.
  328641             :        */
  328642             :       /* */
  328643             : 
  328644             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  328645             :        // (inferior to ROSE traversal mechanism, experimental).
  328646             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  328647             :        */
  328648             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  328649             : 
  328650             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  328651             :       /*! \brief support for the classic visitor pattern done in GoF */
  328652             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  328653             : 
  328654             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  328655             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  328656             :        */
  328657             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  328658             : 
  328659             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  328660             :        */
  328661             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  328662             : 
  328663             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  328664             :        // This traversal helps support internal tools that call static member functions.
  328665             :        // note: this function operates on the memory pools.
  328666             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  328667             :        */
  328668             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  328669             :       /* */
  328670             : 
  328671             : 
  328672             :      public:
  328673             :       /* name Memory Allocation Functions
  328674             :           \brief Memory allocations functions ... incomplete-documentation
  328675             : 
  328676             :           These functions have been made public as part of the design, but they are suggested for internal use 
  328677             :           or by particularly knowledgable users for specialized tools or applications.
  328678             :        */
  328679             :       /* */
  328680             : 
  328681             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  328682             : 
  328683             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  328684             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  328685             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  328686             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  328687             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  328688             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  328689             :           being used with the AST File I/O mechanism.
  328690             :        */
  328691             :           virtual bool isInMemoryPool() override;
  328692             : 
  328693             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  328694             : 
  328695             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  328696             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  328697             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  328698             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  328699             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  328700             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  328701             :           being used with the AST File I/O mechanism.
  328702             :        */
  328703             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  328704             : 
  328705             :       // DQ (4/30/2006): Modified to be a const function.
  328706             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  328707             : 
  328708             :           This functions is part of general support for many possible tools to operate 
  328709             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  328710             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  328711             :           less than the set of pointers used by the AST file I/O. This is part of
  328712             :           work implemented by Andreas, and support tools such as the AST graph generation.
  328713             : 
  328714             :           \warning This function can return unexpected data members and thus the 
  328715             :                    order and the number of elements is unpredicable and subject 
  328716             :                    to change.
  328717             : 
  328718             :           \returns STL vector of pairs of SgNode* and strings
  328719             :        */
  328720             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  328721             : 
  328722             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  328723             : 
  328724             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  328725             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  328726             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  328727             : 
  328728             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  328729             :                    and subject to change.
  328730             :        */
  328731             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  328732             : 
  328733             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  328734             : 
  328735             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  328736             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  328737             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  328738             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  328739             : 
  328740             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  328741             : 
  328742             :           \returns long
  328743             :        */
  328744             :           virtual long getChildIndex( SgNode* childNode ) const override;
  328745             : 
  328746             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  328747             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  328748             :       /* \brief Constructor for use by AST File I/O Mechanism
  328749             : 
  328750             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  328751             :           which obtained via fast binary file I/O from disk.
  328752             :        */
  328753             :        // SgEnumSymbol( SgEnumSymbolStorageClass& source );
  328754             : 
  328755             : 
  328756             : 
  328757             : 
  328758             : 
  328759             :  // JH (10/24/2005): methods added to support the ast file IO
  328760             :     private:
  328761             : 
  328762             :       /* name AST Memory Allocation Support Functions
  328763             :           \brief Memory allocations support....
  328764             : 
  328765             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  328766             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  328767             :           and support the AST File I/O Mechanism.
  328768             :        */
  328769             :       /* */
  328770             : 
  328771             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  328772             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  328773             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  328774             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  328775             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  328776             :           a correspinding one in the AST_FILE_IO class!
  328777             :        */
  328778             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  328779             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  328780             :       /* \brief Typedef used for low level memory access.
  328781             :        */
  328782             :        // typedef unsigned char* TestType;
  328783             : 
  328784             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  328785             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  328786             :       /* \brief Typedef used to hold memory addresses as values.
  328787             :        */
  328788             :        // typedef unsigned long  AddressType;
  328789             : 
  328790             : 
  328791             : 
  328792             :        // necessary, to have direct access to the p_freepointer and the private methods !
  328793             :       /*! \brief friend class declaration to support AST File I/O */
  328794             :           friend class AST_FILE_IO;
  328795             : 
  328796             :       /*! \brief friend class declaration to support AST File I/O */
  328797             :           friend class SgEnumSymbolStorageClass;
  328798             : 
  328799             :       /*! \brief friend class declaration to support AST File I/O */
  328800             :           friend class AstSpecificDataManagingClass;
  328801             : 
  328802             :       /*! \brief friend class declaration to support AST File I/O */
  328803             :           friend class AstSpecificDataManagingClassStorageClass;
  328804             :     public:
  328805             :       /*! \brief IR node constructor to support AST File I/O */
  328806             :           SgEnumSymbol( const SgEnumSymbolStorageClass& source );
  328807             : 
  328808             :  // private: // JJW hack
  328809             :        /*
  328810             :           name AST Memory Allocation Support Variables
  328811             :           Memory allocations support variables 
  328812             : 
  328813             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  328814             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  328815             :           and support the AST File I/O Mechanism.
  328816             :        */
  328817             :       /* */
  328818             : 
  328819             :     public:
  328820             : 
  328821             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  328822             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  328823             :       // virtual SgNode* addRegExpAttribute();
  328824             :       /*! \brief Support for AST matching using regular expression.
  328825             : 
  328826             :           This support is incomplete and the subject of current research to define 
  328827             :           RegEx trees to support inexact matching.
  328828             :        */
  328829             :           SgEnumSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  328830             : 
  328831             : // *** COMMON CODE SECTION ENDS HERE ***
  328832             : 
  328833             : 
  328834             : // End of memberFunctionString
  328835             : // Start of memberFunctionString
  328836             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  328837             : 
  328838             :      // the generated cast function
  328839             :      // friend ROSE_DLL_API SgEnumSymbol* isSgEnumSymbol ( SgNode* s );
  328840             : 
  328841             :           typedef SgSymbol base_node_type;
  328842             : 
  328843             : 
  328844             : // End of memberFunctionString
  328845             : // Start of memberFunctionString
  328846             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  328847             : 
  328848             :           SgName get_name() const override;
  328849             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  328850             : 
  328851             : 
  328852             : // End of memberFunctionString
  328853             : // Start of memberFunctionString
  328854             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  328855             : 
  328856             :        // DQ (3/23/2017): ROSETTA macro expansion
  328857             :           SgType* get_type() const override;
  328858             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  328859             : 
  328860             : 
  328861             : // End of memberFunctionString
  328862             : 
  328863             :      public: 
  328864             :          SgEnumDeclaration* get_declaration() const;
  328865             :          void set_declaration(SgEnumDeclaration* declaration);
  328866             : 
  328867             : 
  328868             :      public: 
  328869             :          virtual ~SgEnumSymbol();
  328870             : 
  328871             : 
  328872             :      public: 
  328873             :          SgEnumSymbol(SgEnumDeclaration* declaration = NULL); 
  328874             : 
  328875             :     protected:
  328876             : // Start of memberFunctionString
  328877             : SgEnumDeclaration* p_declaration;
  328878             :           
  328879             : // End of memberFunctionString
  328880             : 
  328881             :     friend struct Rose::Traits::generated::describe_node_t<SgEnumSymbol>;
  328882             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumSymbol, SgEnumDeclaration*,&SgEnumSymbol::p_declaration>;
  328883             : 
  328884             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328885             : 
  328886             : 
  328887             :    };
  328888             : #endif
  328889             : 
  328890             : // postdeclarations for SgEnumSymbol
  328891             : 
  328892             : /* #line 328893 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328893             : 
  328894             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  328895             : 
  328896             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328897             : 
  328898             : 
  328899             : /* #line 328900 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328900             : 
  328901             : 
  328902             : 
  328903             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328904             : 
  328905             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  328906             : //      This code is automatically generated for each 
  328907             : //      terminal and non-terminal within the defined 
  328908             : //      grammar.  There is a simple way to change the 
  328909             : //      code to fix bugs etc.  See the ROSE README file
  328910             : //      for directions.
  328911             : 
  328912             : // tps: (02/22/2010): Adding DLL export requirements
  328913             : #include "rosedll.h"
  328914             : 
  328915             : // predeclarations for SgEnumFieldSymbol
  328916             : 
  328917             : /* #line 328918 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328918             : 
  328919             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  328920             : 
  328921             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  328922             : 
  328923             : #if 1
  328924             : // Class Definition for SgEnumFieldSymbol
  328925             : class ROSE_DLL_API SgEnumFieldSymbol  : public SgSymbol
  328926             :    {
  328927             :      public:
  328928             : 
  328929             : 
  328930             : /* #line 328931 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  328931             : 
  328932             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  328933             : // Start of memberFunctionString
  328934             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  328935             : 
  328936             : // *** COMMON CODE SECTION BEGINS HERE ***
  328937             : 
  328938             :     public:
  328939             : 
  328940             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  328941             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  328942             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  328943             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  328944             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  328945             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  328946             : 
  328947             :       /*! \brief returns a string representing the class name */
  328948             :           virtual std::string class_name() const override;
  328949             : 
  328950             :       /*! \brief returns new style SageIII enum values */
  328951             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  328952             : 
  328953             :       /*! \brief static variant value */
  328954             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  328955             :        // static const VariantT static_variant = V_SgEnumFieldSymbol;
  328956             :           enum { static_variant = V_SgEnumFieldSymbol };
  328957             : 
  328958             :        /* the generated cast function */
  328959             :       /*! \brief Casts pointer from base class to derived class */
  328960             :           ROSE_DLL_API friend       SgEnumFieldSymbol* isSgEnumFieldSymbol(       SgNode * s );
  328961             : 
  328962             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  328963             :           ROSE_DLL_API friend const SgEnumFieldSymbol* isSgEnumFieldSymbol( const SgNode * s );
  328964             : 
  328965             :      // ******************************************
  328966             :      // * Memory Pool / New / Delete
  328967             :      // ******************************************
  328968             : 
  328969             :      public:
  328970             :           /// \private
  328971             :           static const unsigned pool_size; //
  328972             :           /// \private
  328973             :           static std::vector<unsigned char *> pools; //
  328974             :           /// \private
  328975             :           static SgEnumFieldSymbol * next_node; // 
  328976             : 
  328977             :           /// \private
  328978             :           static unsigned long initializeStorageClassArray(SgEnumFieldSymbolStorageClass *); //
  328979             : 
  328980             :           /// \private
  328981             :           static void clearMemoryPool(); //
  328982             :           static void deleteMemoryPool(); //
  328983             : 
  328984             :           /// \private
  328985             :           static void extendMemoryPoolForFileIO(); //
  328986             : 
  328987             :           /// \private
  328988             :           static SgEnumFieldSymbol * getPointerFromGlobalIndex(unsigned long); //
  328989             :           /// \private
  328990             :           static SgEnumFieldSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  328991             : 
  328992             :           /// \private
  328993             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  328994             :           /// \private
  328995             :           static void resetValidFreepointers(); //
  328996             :           /// \private
  328997             :           static unsigned long getNumberOfLastValidPointer(); //
  328998             : 
  328999             : 
  329000             : #if defined(INLINE_FUNCTIONS)
  329001             :       /*! \brief returns pointer to newly allocated IR node */
  329002             :           inline void *operator new (size_t size);
  329003             : #else
  329004             :       /*! \brief returns pointer to newly allocated IR node */
  329005             :           void *operator new (size_t size);
  329006             : #endif
  329007             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  329008             :           void operator delete (void* pointer, size_t size);
  329009             : 
  329010             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  329011         558 :           void operator delete (void* pointer)
  329012             :              {
  329013             :             // This is the generated delete operator...
  329014         558 :                SgEnumFieldSymbol::operator delete (pointer,sizeof(SgEnumFieldSymbol));
  329015             :              }
  329016             : 
  329017             :       /*! \brief Returns the total number of IR nodes of this type */
  329018             :           static size_t numberOfNodes();
  329019             : 
  329020             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  329021             :           static size_t memoryUsage();
  329022             : 
  329023             :       // End of scope which started in IR nodes specific code 
  329024             :       /* */
  329025             : 
  329026             :       /* name Internal Functions
  329027             :           \brief Internal functions ... incomplete-documentation
  329028             : 
  329029             :           These functions have been made public as part of the design, but they are suggested for internal use 
  329030             :           or by particularly knowledgeable users for specialized tools or applications.
  329031             : 
  329032             :           \internal We could not make these private because they are required by user for special purposes. And 
  329033             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  329034             :          
  329035             :        */
  329036             : 
  329037             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  329038             :        // overridden in every class by *generated* implementation
  329039             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  329040             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  329041             :        // MS: 06/28/02 container of names of variables or container indices 
  329042             :        // used used in the traversal to access AST successor nodes
  329043             :        // overridden in every class by *generated* implementation
  329044             :       /*! \brief container of names of variables or container indices used used in the traversal
  329045             :           to access AST successor nodes overridden in every class by *generated* implementation */
  329046             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  329047             : 
  329048             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  329049             :        // than all the vector copies. The implementation for these functions is generated for each class.
  329050             :       /*! \brief return number of children in the traversal successor list */
  329051             :           virtual size_t get_numberOfTraversalSuccessors() override;
  329052             :       /*! \brief index-based access to traversal successors by index number */
  329053             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  329054             :       /*! \brief index-based access to traversal successors by child node */
  329055             :           virtual size_t get_childIndex(SgNode *child) override;
  329056             : 
  329057             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  329058             :        // MS: 08/16/2002 method for generating RTI information
  329059             :       /*! \brief return C++ Runtime-Time-Information */
  329060             :           virtual RTIReturnType roseRTI() override;
  329061             : #endif
  329062             :       /* */
  329063             : 
  329064             : 
  329065             : 
  329066             :       /* name Deprecated Functions
  329067             :           \brief Deprecated functions ... incomplete-documentation
  329068             : 
  329069             :           These functions have been deprecated from use.
  329070             :        */
  329071             :       /* */
  329072             : 
  329073             :       /*! returns a C style string (char*) representing the class name */
  329074             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  329075             : 
  329076             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  329077             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  329078             : #if 0
  329079             :       /*! returns old style Sage II enum values */
  329080             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  329081             :       /*! returns old style Sage II enum values */
  329082             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  329083             : #endif
  329084             :       /* */
  329085             : 
  329086             : 
  329087             : 
  329088             : 
  329089             :      public:
  329090             :       /* name Traversal Support Functions
  329091             :           \brief Traversal support functions ... incomplete-documentation
  329092             : 
  329093             :           These functions have been made public as part of the design, but they are suggested for internal use 
  329094             :           or by particularly knowledgable users for specialized tools or applications.
  329095             :        */
  329096             :       /* */
  329097             : 
  329098             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  329099             :        // (inferior to ROSE traversal mechanism, experimental).
  329100             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  329101             :        */
  329102             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  329103             : 
  329104             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  329105             :       /*! \brief support for the classic visitor pattern done in GoF */
  329106             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  329107             : 
  329108             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  329109             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  329110             :        */
  329111             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  329112             : 
  329113             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  329114             :        */
  329115             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  329116             : 
  329117             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  329118             :        // This traversal helps support internal tools that call static member functions.
  329119             :        // note: this function operates on the memory pools.
  329120             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  329121             :        */
  329122             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  329123             :       /* */
  329124             : 
  329125             : 
  329126             :      public:
  329127             :       /* name Memory Allocation Functions
  329128             :           \brief Memory allocations functions ... incomplete-documentation
  329129             : 
  329130             :           These functions have been made public as part of the design, but they are suggested for internal use 
  329131             :           or by particularly knowledgable users for specialized tools or applications.
  329132             :        */
  329133             :       /* */
  329134             : 
  329135             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  329136             : 
  329137             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  329138             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  329139             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  329140             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  329141             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  329142             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  329143             :           being used with the AST File I/O mechanism.
  329144             :        */
  329145             :           virtual bool isInMemoryPool() override;
  329146             : 
  329147             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  329148             : 
  329149             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  329150             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  329151             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  329152             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  329153             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  329154             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  329155             :           being used with the AST File I/O mechanism.
  329156             :        */
  329157             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  329158             : 
  329159             :       // DQ (4/30/2006): Modified to be a const function.
  329160             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  329161             : 
  329162             :           This functions is part of general support for many possible tools to operate 
  329163             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  329164             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  329165             :           less than the set of pointers used by the AST file I/O. This is part of
  329166             :           work implemented by Andreas, and support tools such as the AST graph generation.
  329167             : 
  329168             :           \warning This function can return unexpected data members and thus the 
  329169             :                    order and the number of elements is unpredicable and subject 
  329170             :                    to change.
  329171             : 
  329172             :           \returns STL vector of pairs of SgNode* and strings
  329173             :        */
  329174             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  329175             : 
  329176             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  329177             : 
  329178             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  329179             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  329180             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  329181             : 
  329182             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  329183             :                    and subject to change.
  329184             :        */
  329185             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  329186             : 
  329187             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  329188             : 
  329189             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  329190             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  329191             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  329192             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  329193             : 
  329194             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  329195             : 
  329196             :           \returns long
  329197             :        */
  329198             :           virtual long getChildIndex( SgNode* childNode ) const override;
  329199             : 
  329200             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  329201             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  329202             :       /* \brief Constructor for use by AST File I/O Mechanism
  329203             : 
  329204             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  329205             :           which obtained via fast binary file I/O from disk.
  329206             :        */
  329207             :        // SgEnumFieldSymbol( SgEnumFieldSymbolStorageClass& source );
  329208             : 
  329209             : 
  329210             : 
  329211             : 
  329212             : 
  329213             :  // JH (10/24/2005): methods added to support the ast file IO
  329214             :     private:
  329215             : 
  329216             :       /* name AST Memory Allocation Support Functions
  329217             :           \brief Memory allocations support....
  329218             : 
  329219             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  329220             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  329221             :           and support the AST File I/O Mechanism.
  329222             :        */
  329223             :       /* */
  329224             : 
  329225             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  329226             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  329227             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  329228             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  329229             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  329230             :           a correspinding one in the AST_FILE_IO class!
  329231             :        */
  329232             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  329233             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  329234             :       /* \brief Typedef used for low level memory access.
  329235             :        */
  329236             :        // typedef unsigned char* TestType;
  329237             : 
  329238             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  329239             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  329240             :       /* \brief Typedef used to hold memory addresses as values.
  329241             :        */
  329242             :        // typedef unsigned long  AddressType;
  329243             : 
  329244             : 
  329245             : 
  329246             :        // necessary, to have direct access to the p_freepointer and the private methods !
  329247             :       /*! \brief friend class declaration to support AST File I/O */
  329248             :           friend class AST_FILE_IO;
  329249             : 
  329250             :       /*! \brief friend class declaration to support AST File I/O */
  329251             :           friend class SgEnumFieldSymbolStorageClass;
  329252             : 
  329253             :       /*! \brief friend class declaration to support AST File I/O */
  329254             :           friend class AstSpecificDataManagingClass;
  329255             : 
  329256             :       /*! \brief friend class declaration to support AST File I/O */
  329257             :           friend class AstSpecificDataManagingClassStorageClass;
  329258             :     public:
  329259             :       /*! \brief IR node constructor to support AST File I/O */
  329260             :           SgEnumFieldSymbol( const SgEnumFieldSymbolStorageClass& source );
  329261             : 
  329262             :  // private: // JJW hack
  329263             :        /*
  329264             :           name AST Memory Allocation Support Variables
  329265             :           Memory allocations support variables 
  329266             : 
  329267             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  329268             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  329269             :           and support the AST File I/O Mechanism.
  329270             :        */
  329271             :       /* */
  329272             : 
  329273             :     public:
  329274             : 
  329275             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  329276             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  329277             :       // virtual SgNode* addRegExpAttribute();
  329278             :       /*! \brief Support for AST matching using regular expression.
  329279             : 
  329280             :           This support is incomplete and the subject of current research to define 
  329281             :           RegEx trees to support inexact matching.
  329282             :        */
  329283             :           SgEnumFieldSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  329284             : 
  329285             : // *** COMMON CODE SECTION ENDS HERE ***
  329286             : 
  329287             : 
  329288             : // End of memberFunctionString
  329289             : // Start of memberFunctionString
  329290             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  329291             : 
  329292             :      // the generated cast function
  329293             :      // friend ROSE_DLL_API SgEnumFieldSymbol* isSgEnumFieldSymbol ( SgNode* s );
  329294             : 
  329295             :           typedef SgSymbol base_node_type;
  329296             : 
  329297             : 
  329298             : // End of memberFunctionString
  329299             : // Start of memberFunctionString
  329300             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  329301             : 
  329302             :           SgName get_name() const override;
  329303             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  329304             : 
  329305             : 
  329306             : // End of memberFunctionString
  329307             : // Start of memberFunctionString
  329308             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  329309             : 
  329310             :        // DQ (3/23/2017): ROSETTA macro expansion
  329311             :           SgType* get_type() const override;
  329312             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  329313             : 
  329314             : 
  329315             : // End of memberFunctionString
  329316             : 
  329317             :      public: 
  329318             :          SgInitializedName* get_declaration() const;
  329319             :          void set_declaration(SgInitializedName* declaration);
  329320             : 
  329321             : 
  329322             :      public: 
  329323             :          virtual ~SgEnumFieldSymbol();
  329324             : 
  329325             : 
  329326             :      public: 
  329327             :          SgEnumFieldSymbol(SgInitializedName* declaration = NULL); 
  329328             : 
  329329             :     protected:
  329330             : // Start of memberFunctionString
  329331             : SgInitializedName* p_declaration;
  329332             :           
  329333             : // End of memberFunctionString
  329334             : 
  329335             :     friend struct Rose::Traits::generated::describe_node_t<SgEnumFieldSymbol>;
  329336             :     friend struct Rose::Traits::generated::describe_field_t<SgEnumFieldSymbol, SgInitializedName*,&SgEnumFieldSymbol::p_declaration>;
  329337             : 
  329338             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329339             : 
  329340             : 
  329341             :    };
  329342             : #endif
  329343             : 
  329344             : // postdeclarations for SgEnumFieldSymbol
  329345             : 
  329346             : /* #line 329347 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329347             : 
  329348             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  329349             : 
  329350             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329351             : 
  329352             : 
  329353             : /* #line 329354 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329354             : 
  329355             : 
  329356             : 
  329357             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329358             : 
  329359             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  329360             : //      This code is automatically generated for each 
  329361             : //      terminal and non-terminal within the defined 
  329362             : //      grammar.  There is a simple way to change the 
  329363             : //      code to fix bugs etc.  See the ROSE README file
  329364             : //      for directions.
  329365             : 
  329366             : // tps: (02/22/2010): Adding DLL export requirements
  329367             : #include "rosedll.h"
  329368             : 
  329369             : // predeclarations for SgTypedefSymbol
  329370             : 
  329371             : /* #line 329372 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329372             : 
  329373             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  329374             : 
  329375             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329376             : 
  329377             : #if 1
  329378             : // Class Definition for SgTypedefSymbol
  329379             : class ROSE_DLL_API SgTypedefSymbol  : public SgSymbol
  329380             :    {
  329381             :      public:
  329382             : 
  329383             : 
  329384             : /* #line 329385 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329385             : 
  329386             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  329387             : // Start of memberFunctionString
  329388             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  329389             : 
  329390             : // *** COMMON CODE SECTION BEGINS HERE ***
  329391             : 
  329392             :     public:
  329393             : 
  329394             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  329395             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  329396             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  329397             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  329398             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  329399             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  329400             : 
  329401             :       /*! \brief returns a string representing the class name */
  329402             :           virtual std::string class_name() const override;
  329403             : 
  329404             :       /*! \brief returns new style SageIII enum values */
  329405             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  329406             : 
  329407             :       /*! \brief static variant value */
  329408             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  329409             :        // static const VariantT static_variant = V_SgTypedefSymbol;
  329410             :           enum { static_variant = V_SgTypedefSymbol };
  329411             : 
  329412             :        /* the generated cast function */
  329413             :       /*! \brief Casts pointer from base class to derived class */
  329414             :           ROSE_DLL_API friend       SgTypedefSymbol* isSgTypedefSymbol(       SgNode * s );
  329415             : 
  329416             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  329417             :           ROSE_DLL_API friend const SgTypedefSymbol* isSgTypedefSymbol( const SgNode * s );
  329418             : 
  329419             :      // ******************************************
  329420             :      // * Memory Pool / New / Delete
  329421             :      // ******************************************
  329422             : 
  329423             :      public:
  329424             :           /// \private
  329425             :           static const unsigned pool_size; //
  329426             :           /// \private
  329427             :           static std::vector<unsigned char *> pools; //
  329428             :           /// \private
  329429             :           static SgTypedefSymbol * next_node; // 
  329430             : 
  329431             :           /// \private
  329432             :           static unsigned long initializeStorageClassArray(SgTypedefSymbolStorageClass *); //
  329433             : 
  329434             :           /// \private
  329435             :           static void clearMemoryPool(); //
  329436             :           static void deleteMemoryPool(); //
  329437             : 
  329438             :           /// \private
  329439             :           static void extendMemoryPoolForFileIO(); //
  329440             : 
  329441             :           /// \private
  329442             :           static SgTypedefSymbol * getPointerFromGlobalIndex(unsigned long); //
  329443             :           /// \private
  329444             :           static SgTypedefSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  329445             : 
  329446             :           /// \private
  329447             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  329448             :           /// \private
  329449             :           static void resetValidFreepointers(); //
  329450             :           /// \private
  329451             :           static unsigned long getNumberOfLastValidPointer(); //
  329452             : 
  329453             : 
  329454             : #if defined(INLINE_FUNCTIONS)
  329455             :       /*! \brief returns pointer to newly allocated IR node */
  329456             :           inline void *operator new (size_t size);
  329457             : #else
  329458             :       /*! \brief returns pointer to newly allocated IR node */
  329459             :           void *operator new (size_t size);
  329460             : #endif
  329461             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  329462             :           void operator delete (void* pointer, size_t size);
  329463             : 
  329464             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  329465        3438 :           void operator delete (void* pointer)
  329466             :              {
  329467             :             // This is the generated delete operator...
  329468        3438 :                SgTypedefSymbol::operator delete (pointer,sizeof(SgTypedefSymbol));
  329469             :              }
  329470             : 
  329471             :       /*! \brief Returns the total number of IR nodes of this type */
  329472             :           static size_t numberOfNodes();
  329473             : 
  329474             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  329475             :           static size_t memoryUsage();
  329476             : 
  329477             :       // End of scope which started in IR nodes specific code 
  329478             :       /* */
  329479             : 
  329480             :       /* name Internal Functions
  329481             :           \brief Internal functions ... incomplete-documentation
  329482             : 
  329483             :           These functions have been made public as part of the design, but they are suggested for internal use 
  329484             :           or by particularly knowledgeable users for specialized tools or applications.
  329485             : 
  329486             :           \internal We could not make these private because they are required by user for special purposes. And 
  329487             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  329488             :          
  329489             :        */
  329490             : 
  329491             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  329492             :        // overridden in every class by *generated* implementation
  329493             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  329494             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  329495             :        // MS: 06/28/02 container of names of variables or container indices 
  329496             :        // used used in the traversal to access AST successor nodes
  329497             :        // overridden in every class by *generated* implementation
  329498             :       /*! \brief container of names of variables or container indices used used in the traversal
  329499             :           to access AST successor nodes overridden in every class by *generated* implementation */
  329500             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  329501             : 
  329502             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  329503             :        // than all the vector copies. The implementation for these functions is generated for each class.
  329504             :       /*! \brief return number of children in the traversal successor list */
  329505             :           virtual size_t get_numberOfTraversalSuccessors() override;
  329506             :       /*! \brief index-based access to traversal successors by index number */
  329507             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  329508             :       /*! \brief index-based access to traversal successors by child node */
  329509             :           virtual size_t get_childIndex(SgNode *child) override;
  329510             : 
  329511             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  329512             :        // MS: 08/16/2002 method for generating RTI information
  329513             :       /*! \brief return C++ Runtime-Time-Information */
  329514             :           virtual RTIReturnType roseRTI() override;
  329515             : #endif
  329516             :       /* */
  329517             : 
  329518             : 
  329519             : 
  329520             :       /* name Deprecated Functions
  329521             :           \brief Deprecated functions ... incomplete-documentation
  329522             : 
  329523             :           These functions have been deprecated from use.
  329524             :        */
  329525             :       /* */
  329526             : 
  329527             :       /*! returns a C style string (char*) representing the class name */
  329528             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  329529             : 
  329530             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  329531             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  329532             : #if 0
  329533             :       /*! returns old style Sage II enum values */
  329534             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  329535             :       /*! returns old style Sage II enum values */
  329536             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  329537             : #endif
  329538             :       /* */
  329539             : 
  329540             : 
  329541             : 
  329542             : 
  329543             :      public:
  329544             :       /* name Traversal Support Functions
  329545             :           \brief Traversal support functions ... incomplete-documentation
  329546             : 
  329547             :           These functions have been made public as part of the design, but they are suggested for internal use 
  329548             :           or by particularly knowledgable users for specialized tools or applications.
  329549             :        */
  329550             :       /* */
  329551             : 
  329552             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  329553             :        // (inferior to ROSE traversal mechanism, experimental).
  329554             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  329555             :        */
  329556             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  329557             : 
  329558             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  329559             :       /*! \brief support for the classic visitor pattern done in GoF */
  329560             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  329561             : 
  329562             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  329563             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  329564             :        */
  329565             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  329566             : 
  329567             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  329568             :        */
  329569             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  329570             : 
  329571             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  329572             :        // This traversal helps support internal tools that call static member functions.
  329573             :        // note: this function operates on the memory pools.
  329574             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  329575             :        */
  329576             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  329577             :       /* */
  329578             : 
  329579             : 
  329580             :      public:
  329581             :       /* name Memory Allocation Functions
  329582             :           \brief Memory allocations functions ... incomplete-documentation
  329583             : 
  329584             :           These functions have been made public as part of the design, but they are suggested for internal use 
  329585             :           or by particularly knowledgable users for specialized tools or applications.
  329586             :        */
  329587             :       /* */
  329588             : 
  329589             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  329590             : 
  329591             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  329592             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  329593             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  329594             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  329595             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  329596             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  329597             :           being used with the AST File I/O mechanism.
  329598             :        */
  329599             :           virtual bool isInMemoryPool() override;
  329600             : 
  329601             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  329602             : 
  329603             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  329604             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  329605             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  329606             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  329607             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  329608             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  329609             :           being used with the AST File I/O mechanism.
  329610             :        */
  329611             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  329612             : 
  329613             :       // DQ (4/30/2006): Modified to be a const function.
  329614             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  329615             : 
  329616             :           This functions is part of general support for many possible tools to operate 
  329617             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  329618             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  329619             :           less than the set of pointers used by the AST file I/O. This is part of
  329620             :           work implemented by Andreas, and support tools such as the AST graph generation.
  329621             : 
  329622             :           \warning This function can return unexpected data members and thus the 
  329623             :                    order and the number of elements is unpredicable and subject 
  329624             :                    to change.
  329625             : 
  329626             :           \returns STL vector of pairs of SgNode* and strings
  329627             :        */
  329628             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  329629             : 
  329630             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  329631             : 
  329632             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  329633             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  329634             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  329635             : 
  329636             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  329637             :                    and subject to change.
  329638             :        */
  329639             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  329640             : 
  329641             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  329642             : 
  329643             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  329644             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  329645             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  329646             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  329647             : 
  329648             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  329649             : 
  329650             :           \returns long
  329651             :        */
  329652             :           virtual long getChildIndex( SgNode* childNode ) const override;
  329653             : 
  329654             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  329655             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  329656             :       /* \brief Constructor for use by AST File I/O Mechanism
  329657             : 
  329658             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  329659             :           which obtained via fast binary file I/O from disk.
  329660             :        */
  329661             :        // SgTypedefSymbol( SgTypedefSymbolStorageClass& source );
  329662             : 
  329663             : 
  329664             : 
  329665             : 
  329666             : 
  329667             :  // JH (10/24/2005): methods added to support the ast file IO
  329668             :     private:
  329669             : 
  329670             :       /* name AST Memory Allocation Support Functions
  329671             :           \brief Memory allocations support....
  329672             : 
  329673             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  329674             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  329675             :           and support the AST File I/O Mechanism.
  329676             :        */
  329677             :       /* */
  329678             : 
  329679             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  329680             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  329681             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  329682             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  329683             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  329684             :           a correspinding one in the AST_FILE_IO class!
  329685             :        */
  329686             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  329687             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  329688             :       /* \brief Typedef used for low level memory access.
  329689             :        */
  329690             :        // typedef unsigned char* TestType;
  329691             : 
  329692             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  329693             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  329694             :       /* \brief Typedef used to hold memory addresses as values.
  329695             :        */
  329696             :        // typedef unsigned long  AddressType;
  329697             : 
  329698             : 
  329699             : 
  329700             :        // necessary, to have direct access to the p_freepointer and the private methods !
  329701             :       /*! \brief friend class declaration to support AST File I/O */
  329702             :           friend class AST_FILE_IO;
  329703             : 
  329704             :       /*! \brief friend class declaration to support AST File I/O */
  329705             :           friend class SgTypedefSymbolStorageClass;
  329706             : 
  329707             :       /*! \brief friend class declaration to support AST File I/O */
  329708             :           friend class AstSpecificDataManagingClass;
  329709             : 
  329710             :       /*! \brief friend class declaration to support AST File I/O */
  329711             :           friend class AstSpecificDataManagingClassStorageClass;
  329712             :     public:
  329713             :       /*! \brief IR node constructor to support AST File I/O */
  329714             :           SgTypedefSymbol( const SgTypedefSymbolStorageClass& source );
  329715             : 
  329716             :  // private: // JJW hack
  329717             :        /*
  329718             :           name AST Memory Allocation Support Variables
  329719             :           Memory allocations support variables 
  329720             : 
  329721             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  329722             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  329723             :           and support the AST File I/O Mechanism.
  329724             :        */
  329725             :       /* */
  329726             : 
  329727             :     public:
  329728             : 
  329729             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  329730             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  329731             :       // virtual SgNode* addRegExpAttribute();
  329732             :       /*! \brief Support for AST matching using regular expression.
  329733             : 
  329734             :           This support is incomplete and the subject of current research to define 
  329735             :           RegEx trees to support inexact matching.
  329736             :        */
  329737             :           SgTypedefSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  329738             : 
  329739             : // *** COMMON CODE SECTION ENDS HERE ***
  329740             : 
  329741             : 
  329742             : // End of memberFunctionString
  329743             : // Start of memberFunctionString
  329744             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  329745             : 
  329746             :      // the generated cast function
  329747             :      // friend ROSE_DLL_API SgTypedefSymbol* isSgTypedefSymbol ( SgNode* s );
  329748             : 
  329749             :           typedef SgSymbol base_node_type;
  329750             : 
  329751             : 
  329752             : // End of memberFunctionString
  329753             : // Start of memberFunctionString
  329754             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  329755             : 
  329756             :           SgName get_name() const override;
  329757             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  329758             : 
  329759             : 
  329760             : // End of memberFunctionString
  329761             : // Start of memberFunctionString
  329762             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  329763             : 
  329764             :        // DQ (3/23/2017): ROSETTA macro expansion
  329765             :           SgType* get_type() const override;
  329766             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  329767             : 
  329768             : 
  329769             : // End of memberFunctionString
  329770             : 
  329771             :      public: 
  329772             :          SgTypedefDeclaration* get_declaration() const;
  329773             :          void set_declaration(SgTypedefDeclaration* declaration);
  329774             : 
  329775             : 
  329776             :      public: 
  329777             :          virtual ~SgTypedefSymbol();
  329778             : 
  329779             : 
  329780             :      public: 
  329781             :          SgTypedefSymbol(SgTypedefDeclaration* declaration = NULL); 
  329782             : 
  329783             :     protected:
  329784             : // Start of memberFunctionString
  329785             : SgTypedefDeclaration* p_declaration;
  329786             :           
  329787             : // End of memberFunctionString
  329788             : 
  329789             :     friend struct Rose::Traits::generated::describe_node_t<SgTypedefSymbol>;
  329790             :     friend struct Rose::Traits::generated::describe_field_t<SgTypedefSymbol, SgTypedefDeclaration*,&SgTypedefSymbol::p_declaration>;
  329791             : 
  329792             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329793             : 
  329794             : 
  329795             :    };
  329796             : #endif
  329797             : 
  329798             : // postdeclarations for SgTypedefSymbol
  329799             : 
  329800             : /* #line 329801 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329801             : 
  329802             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  329803             : 
  329804             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329805             : 
  329806             : 
  329807             : /* #line 329808 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329808             : 
  329809             : 
  329810             : 
  329811             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329812             : 
  329813             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  329814             : //      This code is automatically generated for each 
  329815             : //      terminal and non-terminal within the defined 
  329816             : //      grammar.  There is a simple way to change the 
  329817             : //      code to fix bugs etc.  See the ROSE README file
  329818             : //      for directions.
  329819             : 
  329820             : // tps: (02/22/2010): Adding DLL export requirements
  329821             : #include "rosedll.h"
  329822             : 
  329823             : // predeclarations for SgTemplateTypedefSymbol
  329824             : 
  329825             : /* #line 329826 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329826             : 
  329827             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  329828             : 
  329829             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  329830             : 
  329831             : #if 1
  329832             : // Class Definition for SgTemplateTypedefSymbol
  329833             : class ROSE_DLL_API SgTemplateTypedefSymbol  : public SgTypedefSymbol
  329834             :    {
  329835             :      public:
  329836             : 
  329837             : 
  329838             : /* #line 329839 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  329839             : 
  329840             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  329841             : // Start of memberFunctionString
  329842             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  329843             : 
  329844             : // *** COMMON CODE SECTION BEGINS HERE ***
  329845             : 
  329846             :     public:
  329847             : 
  329848             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  329849             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  329850             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  329851             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  329852             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  329853             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  329854             : 
  329855             :       /*! \brief returns a string representing the class name */
  329856             :           virtual std::string class_name() const override;
  329857             : 
  329858             :       /*! \brief returns new style SageIII enum values */
  329859             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  329860             : 
  329861             :       /*! \brief static variant value */
  329862             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  329863             :        // static const VariantT static_variant = V_SgTemplateTypedefSymbol;
  329864             :           enum { static_variant = V_SgTemplateTypedefSymbol };
  329865             : 
  329866             :        /* the generated cast function */
  329867             :       /*! \brief Casts pointer from base class to derived class */
  329868             :           ROSE_DLL_API friend       SgTemplateTypedefSymbol* isSgTemplateTypedefSymbol(       SgNode * s );
  329869             : 
  329870             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  329871             :           ROSE_DLL_API friend const SgTemplateTypedefSymbol* isSgTemplateTypedefSymbol( const SgNode * s );
  329872             : 
  329873             :      // ******************************************
  329874             :      // * Memory Pool / New / Delete
  329875             :      // ******************************************
  329876             : 
  329877             :      public:
  329878             :           /// \private
  329879             :           static const unsigned pool_size; //
  329880             :           /// \private
  329881             :           static std::vector<unsigned char *> pools; //
  329882             :           /// \private
  329883             :           static SgTemplateTypedefSymbol * next_node; // 
  329884             : 
  329885             :           /// \private
  329886             :           static unsigned long initializeStorageClassArray(SgTemplateTypedefSymbolStorageClass *); //
  329887             : 
  329888             :           /// \private
  329889             :           static void clearMemoryPool(); //
  329890             :           static void deleteMemoryPool(); //
  329891             : 
  329892             :           /// \private
  329893             :           static void extendMemoryPoolForFileIO(); //
  329894             : 
  329895             :           /// \private
  329896             :           static SgTemplateTypedefSymbol * getPointerFromGlobalIndex(unsigned long); //
  329897             :           /// \private
  329898             :           static SgTemplateTypedefSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  329899             : 
  329900             :           /// \private
  329901             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  329902             :           /// \private
  329903             :           static void resetValidFreepointers(); //
  329904             :           /// \private
  329905             :           static unsigned long getNumberOfLastValidPointer(); //
  329906             : 
  329907             : 
  329908             : #if defined(INLINE_FUNCTIONS)
  329909             :       /*! \brief returns pointer to newly allocated IR node */
  329910             :           inline void *operator new (size_t size);
  329911             : #else
  329912             :       /*! \brief returns pointer to newly allocated IR node */
  329913             :           void *operator new (size_t size);
  329914             : #endif
  329915             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  329916             :           void operator delete (void* pointer, size_t size);
  329917             : 
  329918             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  329919         320 :           void operator delete (void* pointer)
  329920             :              {
  329921             :             // This is the generated delete operator...
  329922         320 :                SgTemplateTypedefSymbol::operator delete (pointer,sizeof(SgTemplateTypedefSymbol));
  329923             :              }
  329924             : 
  329925             :       /*! \brief Returns the total number of IR nodes of this type */
  329926             :           static size_t numberOfNodes();
  329927             : 
  329928             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  329929             :           static size_t memoryUsage();
  329930             : 
  329931             :       // End of scope which started in IR nodes specific code 
  329932             :       /* */
  329933             : 
  329934             :       /* name Internal Functions
  329935             :           \brief Internal functions ... incomplete-documentation
  329936             : 
  329937             :           These functions have been made public as part of the design, but they are suggested for internal use 
  329938             :           or by particularly knowledgeable users for specialized tools or applications.
  329939             : 
  329940             :           \internal We could not make these private because they are required by user for special purposes. And 
  329941             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  329942             :          
  329943             :        */
  329944             : 
  329945             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  329946             :        // overridden in every class by *generated* implementation
  329947             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  329948             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  329949             :        // MS: 06/28/02 container of names of variables or container indices 
  329950             :        // used used in the traversal to access AST successor nodes
  329951             :        // overridden in every class by *generated* implementation
  329952             :       /*! \brief container of names of variables or container indices used used in the traversal
  329953             :           to access AST successor nodes overridden in every class by *generated* implementation */
  329954             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  329955             : 
  329956             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  329957             :        // than all the vector copies. The implementation for these functions is generated for each class.
  329958             :       /*! \brief return number of children in the traversal successor list */
  329959             :           virtual size_t get_numberOfTraversalSuccessors() override;
  329960             :       /*! \brief index-based access to traversal successors by index number */
  329961             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  329962             :       /*! \brief index-based access to traversal successors by child node */
  329963             :           virtual size_t get_childIndex(SgNode *child) override;
  329964             : 
  329965             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  329966             :        // MS: 08/16/2002 method for generating RTI information
  329967             :       /*! \brief return C++ Runtime-Time-Information */
  329968             :           virtual RTIReturnType roseRTI() override;
  329969             : #endif
  329970             :       /* */
  329971             : 
  329972             : 
  329973             : 
  329974             :       /* name Deprecated Functions
  329975             :           \brief Deprecated functions ... incomplete-documentation
  329976             : 
  329977             :           These functions have been deprecated from use.
  329978             :        */
  329979             :       /* */
  329980             : 
  329981             :       /*! returns a C style string (char*) representing the class name */
  329982             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  329983             : 
  329984             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  329985             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  329986             : #if 0
  329987             :       /*! returns old style Sage II enum values */
  329988             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  329989             :       /*! returns old style Sage II enum values */
  329990             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  329991             : #endif
  329992             :       /* */
  329993             : 
  329994             : 
  329995             : 
  329996             : 
  329997             :      public:
  329998             :       /* name Traversal Support Functions
  329999             :           \brief Traversal support functions ... incomplete-documentation
  330000             : 
  330001             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330002             :           or by particularly knowledgable users for specialized tools or applications.
  330003             :        */
  330004             :       /* */
  330005             : 
  330006             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  330007             :        // (inferior to ROSE traversal mechanism, experimental).
  330008             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  330009             :        */
  330010             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  330011             : 
  330012             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  330013             :       /*! \brief support for the classic visitor pattern done in GoF */
  330014             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  330015             : 
  330016             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  330017             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  330018             :        */
  330019             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  330020             : 
  330021             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  330022             :        */
  330023             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  330024             : 
  330025             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  330026             :        // This traversal helps support internal tools that call static member functions.
  330027             :        // note: this function operates on the memory pools.
  330028             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  330029             :        */
  330030             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  330031             :       /* */
  330032             : 
  330033             : 
  330034             :      public:
  330035             :       /* name Memory Allocation Functions
  330036             :           \brief Memory allocations functions ... incomplete-documentation
  330037             : 
  330038             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330039             :           or by particularly knowledgable users for specialized tools or applications.
  330040             :        */
  330041             :       /* */
  330042             : 
  330043             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  330044             : 
  330045             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  330046             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  330047             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  330048             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  330049             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  330050             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  330051             :           being used with the AST File I/O mechanism.
  330052             :        */
  330053             :           virtual bool isInMemoryPool() override;
  330054             : 
  330055             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  330056             : 
  330057             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  330058             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  330059             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  330060             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  330061             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  330062             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  330063             :           being used with the AST File I/O mechanism.
  330064             :        */
  330065             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  330066             : 
  330067             :       // DQ (4/30/2006): Modified to be a const function.
  330068             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  330069             : 
  330070             :           This functions is part of general support for many possible tools to operate 
  330071             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  330072             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  330073             :           less than the set of pointers used by the AST file I/O. This is part of
  330074             :           work implemented by Andreas, and support tools such as the AST graph generation.
  330075             : 
  330076             :           \warning This function can return unexpected data members and thus the 
  330077             :                    order and the number of elements is unpredicable and subject 
  330078             :                    to change.
  330079             : 
  330080             :           \returns STL vector of pairs of SgNode* and strings
  330081             :        */
  330082             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  330083             : 
  330084             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  330085             : 
  330086             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  330087             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  330088             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  330089             : 
  330090             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  330091             :                    and subject to change.
  330092             :        */
  330093             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  330094             : 
  330095             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  330096             : 
  330097             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  330098             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  330099             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  330100             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  330101             : 
  330102             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  330103             : 
  330104             :           \returns long
  330105             :        */
  330106             :           virtual long getChildIndex( SgNode* childNode ) const override;
  330107             : 
  330108             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  330109             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  330110             :       /* \brief Constructor for use by AST File I/O Mechanism
  330111             : 
  330112             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  330113             :           which obtained via fast binary file I/O from disk.
  330114             :        */
  330115             :        // SgTemplateTypedefSymbol( SgTemplateTypedefSymbolStorageClass& source );
  330116             : 
  330117             : 
  330118             : 
  330119             : 
  330120             : 
  330121             :  // JH (10/24/2005): methods added to support the ast file IO
  330122             :     private:
  330123             : 
  330124             :       /* name AST Memory Allocation Support Functions
  330125             :           \brief Memory allocations support....
  330126             : 
  330127             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  330128             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  330129             :           and support the AST File I/O Mechanism.
  330130             :        */
  330131             :       /* */
  330132             : 
  330133             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  330134             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  330135             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  330136             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  330137             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  330138             :           a correspinding one in the AST_FILE_IO class!
  330139             :        */
  330140             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  330141             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  330142             :       /* \brief Typedef used for low level memory access.
  330143             :        */
  330144             :        // typedef unsigned char* TestType;
  330145             : 
  330146             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  330147             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  330148             :       /* \brief Typedef used to hold memory addresses as values.
  330149             :        */
  330150             :        // typedef unsigned long  AddressType;
  330151             : 
  330152             : 
  330153             : 
  330154             :        // necessary, to have direct access to the p_freepointer and the private methods !
  330155             :       /*! \brief friend class declaration to support AST File I/O */
  330156             :           friend class AST_FILE_IO;
  330157             : 
  330158             :       /*! \brief friend class declaration to support AST File I/O */
  330159             :           friend class SgTemplateTypedefSymbolStorageClass;
  330160             : 
  330161             :       /*! \brief friend class declaration to support AST File I/O */
  330162             :           friend class AstSpecificDataManagingClass;
  330163             : 
  330164             :       /*! \brief friend class declaration to support AST File I/O */
  330165             :           friend class AstSpecificDataManagingClassStorageClass;
  330166             :     public:
  330167             :       /*! \brief IR node constructor to support AST File I/O */
  330168             :           SgTemplateTypedefSymbol( const SgTemplateTypedefSymbolStorageClass& source );
  330169             : 
  330170             :  // private: // JJW hack
  330171             :        /*
  330172             :           name AST Memory Allocation Support Variables
  330173             :           Memory allocations support variables 
  330174             : 
  330175             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  330176             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  330177             :           and support the AST File I/O Mechanism.
  330178             :        */
  330179             :       /* */
  330180             : 
  330181             :     public:
  330182             : 
  330183             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  330184             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  330185             :       // virtual SgNode* addRegExpAttribute();
  330186             :       /*! \brief Support for AST matching using regular expression.
  330187             : 
  330188             :           This support is incomplete and the subject of current research to define 
  330189             :           RegEx trees to support inexact matching.
  330190             :        */
  330191             :           SgTemplateTypedefSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  330192             : 
  330193             : // *** COMMON CODE SECTION ENDS HERE ***
  330194             : 
  330195             : 
  330196             : // End of memberFunctionString
  330197             : // Start of memberFunctionString
  330198             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  330199             : 
  330200             :      // the generated cast function
  330201             :      // friend ROSE_DLL_API SgTemplateTypedefSymbol* isSgTemplateTypedefSymbol ( SgNode* s );
  330202             : 
  330203             :           typedef SgTypedefSymbol base_node_type;
  330204             : 
  330205             : 
  330206             : // End of memberFunctionString
  330207             : // Start of memberFunctionString
  330208             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  330209             : 
  330210             :           SgName get_name() const override;
  330211             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  330212             : 
  330213             : 
  330214             : // End of memberFunctionString
  330215             : // Start of memberFunctionString
  330216             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  330217             : 
  330218             :        // DQ (3/23/2017): ROSETTA macro expansion
  330219             :           SgType* get_type() const override;
  330220             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  330221             : 
  330222             : 
  330223             : // End of memberFunctionString
  330224             : 
  330225             : 
  330226             :      public: 
  330227             :          virtual ~SgTemplateTypedefSymbol();
  330228             : 
  330229             : 
  330230             :      public: 
  330231             :          SgTemplateTypedefSymbol(SgTypedefDeclaration* declaration = NULL); 
  330232             : 
  330233             :     protected:
  330234             : 
  330235             :     friend struct Rose::Traits::generated::describe_node_t<SgTemplateTypedefSymbol>;
  330236             : 
  330237             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330238             : 
  330239             : 
  330240             :    };
  330241             : #endif
  330242             : 
  330243             : // postdeclarations for SgTemplateTypedefSymbol
  330244             : 
  330245             : /* #line 330246 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330246             : 
  330247             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  330248             : 
  330249             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330250             : 
  330251             : 
  330252             : /* #line 330253 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330253             : 
  330254             : 
  330255             : 
  330256             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330257             : 
  330258             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  330259             : //      This code is automatically generated for each 
  330260             : //      terminal and non-terminal within the defined 
  330261             : //      grammar.  There is a simple way to change the 
  330262             : //      code to fix bugs etc.  See the ROSE README file
  330263             : //      for directions.
  330264             : 
  330265             : // tps: (02/22/2010): Adding DLL export requirements
  330266             : #include "rosedll.h"
  330267             : 
  330268             : // predeclarations for SgLabelSymbol
  330269             : 
  330270             : /* #line 330271 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330271             : 
  330272             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  330273             : 
  330274             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330275             : 
  330276             : #if 1
  330277             : // Class Definition for SgLabelSymbol
  330278             : class ROSE_DLL_API SgLabelSymbol  : public SgSymbol
  330279             :    {
  330280             :      public:
  330281             : 
  330282             : 
  330283             : /* #line 330284 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330284             : 
  330285             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  330286             : // Start of memberFunctionString
  330287             : /* #line 68 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  330288             : 
  330289             : 
  330290             :       //! Type of label used (fortran only)
  330291             :           enum label_type_enum
  330292             :              {
  330293             :                e_unknown_label_type      = 0,
  330294             :                e_non_numeric_label_type  = 1,
  330295             :                e_start_label_type        = 2,
  330296             :                e_else_label_type         = 3,
  330297             :                e_end_label_type          = 4,
  330298             :             // DQ (2/1/2011): Added support for Fortran specific alternative return labels.
  330299             :                e_alternative_return_type = 5,
  330300             :                e_last_label_type         = 6
  330301             :              };
  330302             : 
  330303             :        // DQ (2/1/2011): Added support for named lable to handle arternative return parameters in Fortran.
  330304             :        // SgLabelSymbol ( const SgName & name );
  330305             :           SgLabelSymbol ( SgInitializedName* initializedName );
  330306             : 
  330307             : 
  330308             : 
  330309             : // End of memberFunctionString
  330310             : // Start of memberFunctionString
  330311             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  330312             : 
  330313             : // *** COMMON CODE SECTION BEGINS HERE ***
  330314             : 
  330315             :     public:
  330316             : 
  330317             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  330318             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  330319             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  330320             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  330321             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  330322             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  330323             : 
  330324             :       /*! \brief returns a string representing the class name */
  330325             :           virtual std::string class_name() const override;
  330326             : 
  330327             :       /*! \brief returns new style SageIII enum values */
  330328             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  330329             : 
  330330             :       /*! \brief static variant value */
  330331             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  330332             :        // static const VariantT static_variant = V_SgLabelSymbol;
  330333             :           enum { static_variant = V_SgLabelSymbol };
  330334             : 
  330335             :        /* the generated cast function */
  330336             :       /*! \brief Casts pointer from base class to derived class */
  330337             :           ROSE_DLL_API friend       SgLabelSymbol* isSgLabelSymbol(       SgNode * s );
  330338             : 
  330339             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  330340             :           ROSE_DLL_API friend const SgLabelSymbol* isSgLabelSymbol( const SgNode * s );
  330341             : 
  330342             :      // ******************************************
  330343             :      // * Memory Pool / New / Delete
  330344             :      // ******************************************
  330345             : 
  330346             :      public:
  330347             :           /// \private
  330348             :           static const unsigned pool_size; //
  330349             :           /// \private
  330350             :           static std::vector<unsigned char *> pools; //
  330351             :           /// \private
  330352             :           static SgLabelSymbol * next_node; // 
  330353             : 
  330354             :           /// \private
  330355             :           static unsigned long initializeStorageClassArray(SgLabelSymbolStorageClass *); //
  330356             : 
  330357             :           /// \private
  330358             :           static void clearMemoryPool(); //
  330359             :           static void deleteMemoryPool(); //
  330360             : 
  330361             :           /// \private
  330362             :           static void extendMemoryPoolForFileIO(); //
  330363             : 
  330364             :           /// \private
  330365             :           static SgLabelSymbol * getPointerFromGlobalIndex(unsigned long); //
  330366             :           /// \private
  330367             :           static SgLabelSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  330368             : 
  330369             :           /// \private
  330370             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  330371             :           /// \private
  330372             :           static void resetValidFreepointers(); //
  330373             :           /// \private
  330374             :           static unsigned long getNumberOfLastValidPointer(); //
  330375             : 
  330376             : 
  330377             : #if defined(INLINE_FUNCTIONS)
  330378             :       /*! \brief returns pointer to newly allocated IR node */
  330379             :           inline void *operator new (size_t size);
  330380             : #else
  330381             :       /*! \brief returns pointer to newly allocated IR node */
  330382             :           void *operator new (size_t size);
  330383             : #endif
  330384             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  330385             :           void operator delete (void* pointer, size_t size);
  330386             : 
  330387             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  330388           0 :           void operator delete (void* pointer)
  330389             :              {
  330390             :             // This is the generated delete operator...
  330391           0 :                SgLabelSymbol::operator delete (pointer,sizeof(SgLabelSymbol));
  330392             :              }
  330393             : 
  330394             :       /*! \brief Returns the total number of IR nodes of this type */
  330395             :           static size_t numberOfNodes();
  330396             : 
  330397             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  330398             :           static size_t memoryUsage();
  330399             : 
  330400             :       // End of scope which started in IR nodes specific code 
  330401             :       /* */
  330402             : 
  330403             :       /* name Internal Functions
  330404             :           \brief Internal functions ... incomplete-documentation
  330405             : 
  330406             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330407             :           or by particularly knowledgeable users for specialized tools or applications.
  330408             : 
  330409             :           \internal We could not make these private because they are required by user for special purposes. And 
  330410             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  330411             :          
  330412             :        */
  330413             : 
  330414             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  330415             :        // overridden in every class by *generated* implementation
  330416             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  330417             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  330418             :        // MS: 06/28/02 container of names of variables or container indices 
  330419             :        // used used in the traversal to access AST successor nodes
  330420             :        // overridden in every class by *generated* implementation
  330421             :       /*! \brief container of names of variables or container indices used used in the traversal
  330422             :           to access AST successor nodes overridden in every class by *generated* implementation */
  330423             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  330424             : 
  330425             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  330426             :        // than all the vector copies. The implementation for these functions is generated for each class.
  330427             :       /*! \brief return number of children in the traversal successor list */
  330428             :           virtual size_t get_numberOfTraversalSuccessors() override;
  330429             :       /*! \brief index-based access to traversal successors by index number */
  330430             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  330431             :       /*! \brief index-based access to traversal successors by child node */
  330432             :           virtual size_t get_childIndex(SgNode *child) override;
  330433             : 
  330434             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  330435             :        // MS: 08/16/2002 method for generating RTI information
  330436             :       /*! \brief return C++ Runtime-Time-Information */
  330437             :           virtual RTIReturnType roseRTI() override;
  330438             : #endif
  330439             :       /* */
  330440             : 
  330441             : 
  330442             : 
  330443             :       /* name Deprecated Functions
  330444             :           \brief Deprecated functions ... incomplete-documentation
  330445             : 
  330446             :           These functions have been deprecated from use.
  330447             :        */
  330448             :       /* */
  330449             : 
  330450             :       /*! returns a C style string (char*) representing the class name */
  330451             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  330452             : 
  330453             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  330454             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  330455             : #if 0
  330456             :       /*! returns old style Sage II enum values */
  330457             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  330458             :       /*! returns old style Sage II enum values */
  330459             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  330460             : #endif
  330461             :       /* */
  330462             : 
  330463             : 
  330464             : 
  330465             : 
  330466             :      public:
  330467             :       /* name Traversal Support Functions
  330468             :           \brief Traversal support functions ... incomplete-documentation
  330469             : 
  330470             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330471             :           or by particularly knowledgable users for specialized tools or applications.
  330472             :        */
  330473             :       /* */
  330474             : 
  330475             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  330476             :        // (inferior to ROSE traversal mechanism, experimental).
  330477             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  330478             :        */
  330479             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  330480             : 
  330481             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  330482             :       /*! \brief support for the classic visitor pattern done in GoF */
  330483             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  330484             : 
  330485             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  330486             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  330487             :        */
  330488             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  330489             : 
  330490             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  330491             :        */
  330492             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  330493             : 
  330494             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  330495             :        // This traversal helps support internal tools that call static member functions.
  330496             :        // note: this function operates on the memory pools.
  330497             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  330498             :        */
  330499             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  330500             :       /* */
  330501             : 
  330502             : 
  330503             :      public:
  330504             :       /* name Memory Allocation Functions
  330505             :           \brief Memory allocations functions ... incomplete-documentation
  330506             : 
  330507             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330508             :           or by particularly knowledgable users for specialized tools or applications.
  330509             :        */
  330510             :       /* */
  330511             : 
  330512             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  330513             : 
  330514             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  330515             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  330516             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  330517             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  330518             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  330519             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  330520             :           being used with the AST File I/O mechanism.
  330521             :        */
  330522             :           virtual bool isInMemoryPool() override;
  330523             : 
  330524             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  330525             : 
  330526             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  330527             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  330528             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  330529             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  330530             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  330531             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  330532             :           being used with the AST File I/O mechanism.
  330533             :        */
  330534             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  330535             : 
  330536             :       // DQ (4/30/2006): Modified to be a const function.
  330537             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  330538             : 
  330539             :           This functions is part of general support for many possible tools to operate 
  330540             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  330541             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  330542             :           less than the set of pointers used by the AST file I/O. This is part of
  330543             :           work implemented by Andreas, and support tools such as the AST graph generation.
  330544             : 
  330545             :           \warning This function can return unexpected data members and thus the 
  330546             :                    order and the number of elements is unpredicable and subject 
  330547             :                    to change.
  330548             : 
  330549             :           \returns STL vector of pairs of SgNode* and strings
  330550             :        */
  330551             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  330552             : 
  330553             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  330554             : 
  330555             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  330556             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  330557             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  330558             : 
  330559             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  330560             :                    and subject to change.
  330561             :        */
  330562             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  330563             : 
  330564             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  330565             : 
  330566             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  330567             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  330568             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  330569             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  330570             : 
  330571             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  330572             : 
  330573             :           \returns long
  330574             :        */
  330575             :           virtual long getChildIndex( SgNode* childNode ) const override;
  330576             : 
  330577             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  330578             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  330579             :       /* \brief Constructor for use by AST File I/O Mechanism
  330580             : 
  330581             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  330582             :           which obtained via fast binary file I/O from disk.
  330583             :        */
  330584             :        // SgLabelSymbol( SgLabelSymbolStorageClass& source );
  330585             : 
  330586             : 
  330587             : 
  330588             : 
  330589             : 
  330590             :  // JH (10/24/2005): methods added to support the ast file IO
  330591             :     private:
  330592             : 
  330593             :       /* name AST Memory Allocation Support Functions
  330594             :           \brief Memory allocations support....
  330595             : 
  330596             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  330597             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  330598             :           and support the AST File I/O Mechanism.
  330599             :        */
  330600             :       /* */
  330601             : 
  330602             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  330603             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  330604             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  330605             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  330606             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  330607             :           a correspinding one in the AST_FILE_IO class!
  330608             :        */
  330609             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  330610             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  330611             :       /* \brief Typedef used for low level memory access.
  330612             :        */
  330613             :        // typedef unsigned char* TestType;
  330614             : 
  330615             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  330616             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  330617             :       /* \brief Typedef used to hold memory addresses as values.
  330618             :        */
  330619             :        // typedef unsigned long  AddressType;
  330620             : 
  330621             : 
  330622             : 
  330623             :        // necessary, to have direct access to the p_freepointer and the private methods !
  330624             :       /*! \brief friend class declaration to support AST File I/O */
  330625             :           friend class AST_FILE_IO;
  330626             : 
  330627             :       /*! \brief friend class declaration to support AST File I/O */
  330628             :           friend class SgLabelSymbolStorageClass;
  330629             : 
  330630             :       /*! \brief friend class declaration to support AST File I/O */
  330631             :           friend class AstSpecificDataManagingClass;
  330632             : 
  330633             :       /*! \brief friend class declaration to support AST File I/O */
  330634             :           friend class AstSpecificDataManagingClassStorageClass;
  330635             :     public:
  330636             :       /*! \brief IR node constructor to support AST File I/O */
  330637             :           SgLabelSymbol( const SgLabelSymbolStorageClass& source );
  330638             : 
  330639             :  // private: // JJW hack
  330640             :        /*
  330641             :           name AST Memory Allocation Support Variables
  330642             :           Memory allocations support variables 
  330643             : 
  330644             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  330645             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  330646             :           and support the AST File I/O Mechanism.
  330647             :        */
  330648             :       /* */
  330649             : 
  330650             :     public:
  330651             : 
  330652             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  330653             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  330654             :       // virtual SgNode* addRegExpAttribute();
  330655             :       /*! \brief Support for AST matching using regular expression.
  330656             : 
  330657             :           This support is incomplete and the subject of current research to define 
  330658             :           RegEx trees to support inexact matching.
  330659             :        */
  330660             :           SgLabelSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  330661             : 
  330662             : // *** COMMON CODE SECTION ENDS HERE ***
  330663             : 
  330664             : 
  330665             : // End of memberFunctionString
  330666             : // Start of memberFunctionString
  330667             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  330668             : 
  330669             :      // the generated cast function
  330670             :      // friend ROSE_DLL_API SgLabelSymbol* isSgLabelSymbol ( SgNode* s );
  330671             : 
  330672             :           typedef SgSymbol base_node_type;
  330673             : 
  330674             : 
  330675             : // End of memberFunctionString
  330676             : // Start of memberFunctionString
  330677             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  330678             : 
  330679             :           SgName get_name() const override;
  330680             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  330681             : 
  330682             : 
  330683             : // End of memberFunctionString
  330684             : // Start of memberFunctionString
  330685             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  330686             : 
  330687             :        // DQ (3/23/2017): ROSETTA macro expansion
  330688             :           SgType* get_type() const override;
  330689             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  330690             : 
  330691             : 
  330692             : // End of memberFunctionString
  330693             : 
  330694             :      public: 
  330695             :          SgLabelStatement* get_declaration() const;
  330696             :          void set_declaration(SgLabelStatement* declaration);
  330697             : 
  330698             :      public: 
  330699             :          SgStatement* get_fortran_statement() const;
  330700             :          void set_fortran_statement(SgStatement* fortran_statement);
  330701             : 
  330702             :      public: 
  330703             :          SgInitializedName* get_fortran_alternate_return_parameter() const;
  330704             :          void set_fortran_alternate_return_parameter(SgInitializedName* fortran_alternate_return_parameter);
  330705             : 
  330706             :      public: 
  330707             :          int get_numeric_label_value() const;
  330708             :          void set_numeric_label_value(int numeric_label_value);
  330709             : 
  330710             :      public: 
  330711             :          SgLabelSymbol::label_type_enum get_label_type() const;
  330712             :          void set_label_type(SgLabelSymbol::label_type_enum label_type);
  330713             : 
  330714             : 
  330715             :      public: 
  330716             :          virtual ~SgLabelSymbol();
  330717             : 
  330718             : 
  330719             :      public: 
  330720             :          SgLabelSymbol(SgLabelStatement* declaration = NULL); 
  330721             : 
  330722             :     protected:
  330723             : // Start of memberFunctionString
  330724             : SgLabelStatement* p_declaration;
  330725             :           
  330726             : // End of memberFunctionString
  330727             : // Start of memberFunctionString
  330728             : SgStatement* p_fortran_statement;
  330729             :           
  330730             : // End of memberFunctionString
  330731             : // Start of memberFunctionString
  330732             : SgInitializedName* p_fortran_alternate_return_parameter;
  330733             :           
  330734             : // End of memberFunctionString
  330735             : // Start of memberFunctionString
  330736             : int p_numeric_label_value;
  330737             :           
  330738             : // End of memberFunctionString
  330739             : // Start of memberFunctionString
  330740             : SgLabelSymbol::label_type_enum p_label_type;
  330741             :           
  330742             : // End of memberFunctionString
  330743             : 
  330744             :     friend struct Rose::Traits::generated::describe_node_t<SgLabelSymbol>;
  330745             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelSymbol, SgLabelStatement*,&SgLabelSymbol::p_declaration>;
  330746             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelSymbol, SgStatement*,&SgLabelSymbol::p_fortran_statement>;
  330747             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelSymbol, SgInitializedName*,&SgLabelSymbol::p_fortran_alternate_return_parameter>;
  330748             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelSymbol, int,&SgLabelSymbol::p_numeric_label_value>;
  330749             :     friend struct Rose::Traits::generated::describe_field_t<SgLabelSymbol, SgLabelSymbol::label_type_enum,&SgLabelSymbol::p_label_type>;
  330750             : 
  330751             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330752             : 
  330753             : 
  330754             :    };
  330755             : #endif
  330756             : 
  330757             : // postdeclarations for SgLabelSymbol
  330758             : 
  330759             : /* #line 330760 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330760             : 
  330761             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  330762             : 
  330763             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330764             : 
  330765             : 
  330766             : /* #line 330767 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330767             : 
  330768             : 
  330769             : 
  330770             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330771             : 
  330772             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  330773             : //      This code is automatically generated for each 
  330774             : //      terminal and non-terminal within the defined 
  330775             : //      grammar.  There is a simple way to change the 
  330776             : //      code to fix bugs etc.  See the ROSE README file
  330777             : //      for directions.
  330778             : 
  330779             : // tps: (02/22/2010): Adding DLL export requirements
  330780             : #include "rosedll.h"
  330781             : 
  330782             : // predeclarations for SgDefaultSymbol
  330783             : 
  330784             : /* #line 330785 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330785             : 
  330786             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  330787             : 
  330788             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  330789             : 
  330790             : #if 1
  330791             : // Class Definition for SgDefaultSymbol
  330792             : class ROSE_DLL_API SgDefaultSymbol  : public SgSymbol
  330793             :    {
  330794             :      public:
  330795             : 
  330796             : 
  330797             : /* #line 330798 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  330798             : 
  330799             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  330800             : // Start of memberFunctionString
  330801             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  330802             : 
  330803             : // *** COMMON CODE SECTION BEGINS HERE ***
  330804             : 
  330805             :     public:
  330806             : 
  330807             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  330808             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  330809             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  330810             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  330811             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  330812             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  330813             : 
  330814             :       /*! \brief returns a string representing the class name */
  330815             :           virtual std::string class_name() const override;
  330816             : 
  330817             :       /*! \brief returns new style SageIII enum values */
  330818             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  330819             : 
  330820             :       /*! \brief static variant value */
  330821             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  330822             :        // static const VariantT static_variant = V_SgDefaultSymbol;
  330823             :           enum { static_variant = V_SgDefaultSymbol };
  330824             : 
  330825             :        /* the generated cast function */
  330826             :       /*! \brief Casts pointer from base class to derived class */
  330827             :           ROSE_DLL_API friend       SgDefaultSymbol* isSgDefaultSymbol(       SgNode * s );
  330828             : 
  330829             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  330830             :           ROSE_DLL_API friend const SgDefaultSymbol* isSgDefaultSymbol( const SgNode * s );
  330831             : 
  330832             :      // ******************************************
  330833             :      // * Memory Pool / New / Delete
  330834             :      // ******************************************
  330835             : 
  330836             :      public:
  330837             :           /// \private
  330838             :           static const unsigned pool_size; //
  330839             :           /// \private
  330840             :           static std::vector<unsigned char *> pools; //
  330841             :           /// \private
  330842             :           static SgDefaultSymbol * next_node; // 
  330843             : 
  330844             :           /// \private
  330845             :           static unsigned long initializeStorageClassArray(SgDefaultSymbolStorageClass *); //
  330846             : 
  330847             :           /// \private
  330848             :           static void clearMemoryPool(); //
  330849             :           static void deleteMemoryPool(); //
  330850             : 
  330851             :           /// \private
  330852             :           static void extendMemoryPoolForFileIO(); //
  330853             : 
  330854             :           /// \private
  330855             :           static SgDefaultSymbol * getPointerFromGlobalIndex(unsigned long); //
  330856             :           /// \private
  330857             :           static SgDefaultSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  330858             : 
  330859             :           /// \private
  330860             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  330861             :           /// \private
  330862             :           static void resetValidFreepointers(); //
  330863             :           /// \private
  330864             :           static unsigned long getNumberOfLastValidPointer(); //
  330865             : 
  330866             : 
  330867             : #if defined(INLINE_FUNCTIONS)
  330868             :       /*! \brief returns pointer to newly allocated IR node */
  330869             :           inline void *operator new (size_t size);
  330870             : #else
  330871             :       /*! \brief returns pointer to newly allocated IR node */
  330872             :           void *operator new (size_t size);
  330873             : #endif
  330874             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  330875             :           void operator delete (void* pointer, size_t size);
  330876             : 
  330877             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  330878           0 :           void operator delete (void* pointer)
  330879             :              {
  330880             :             // This is the generated delete operator...
  330881           0 :                SgDefaultSymbol::operator delete (pointer,sizeof(SgDefaultSymbol));
  330882             :              }
  330883             : 
  330884             :       /*! \brief Returns the total number of IR nodes of this type */
  330885             :           static size_t numberOfNodes();
  330886             : 
  330887             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  330888             :           static size_t memoryUsage();
  330889             : 
  330890             :       // End of scope which started in IR nodes specific code 
  330891             :       /* */
  330892             : 
  330893             :       /* name Internal Functions
  330894             :           \brief Internal functions ... incomplete-documentation
  330895             : 
  330896             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330897             :           or by particularly knowledgeable users for specialized tools or applications.
  330898             : 
  330899             :           \internal We could not make these private because they are required by user for special purposes. And 
  330900             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  330901             :          
  330902             :        */
  330903             : 
  330904             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  330905             :        // overridden in every class by *generated* implementation
  330906             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  330907             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  330908             :        // MS: 06/28/02 container of names of variables or container indices 
  330909             :        // used used in the traversal to access AST successor nodes
  330910             :        // overridden in every class by *generated* implementation
  330911             :       /*! \brief container of names of variables or container indices used used in the traversal
  330912             :           to access AST successor nodes overridden in every class by *generated* implementation */
  330913             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  330914             : 
  330915             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  330916             :        // than all the vector copies. The implementation for these functions is generated for each class.
  330917             :       /*! \brief return number of children in the traversal successor list */
  330918             :           virtual size_t get_numberOfTraversalSuccessors() override;
  330919             :       /*! \brief index-based access to traversal successors by index number */
  330920             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  330921             :       /*! \brief index-based access to traversal successors by child node */
  330922             :           virtual size_t get_childIndex(SgNode *child) override;
  330923             : 
  330924             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  330925             :        // MS: 08/16/2002 method for generating RTI information
  330926             :       /*! \brief return C++ Runtime-Time-Information */
  330927             :           virtual RTIReturnType roseRTI() override;
  330928             : #endif
  330929             :       /* */
  330930             : 
  330931             : 
  330932             : 
  330933             :       /* name Deprecated Functions
  330934             :           \brief Deprecated functions ... incomplete-documentation
  330935             : 
  330936             :           These functions have been deprecated from use.
  330937             :        */
  330938             :       /* */
  330939             : 
  330940             :       /*! returns a C style string (char*) representing the class name */
  330941             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  330942             : 
  330943             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  330944             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  330945             : #if 0
  330946             :       /*! returns old style Sage II enum values */
  330947             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  330948             :       /*! returns old style Sage II enum values */
  330949             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  330950             : #endif
  330951             :       /* */
  330952             : 
  330953             : 
  330954             : 
  330955             : 
  330956             :      public:
  330957             :       /* name Traversal Support Functions
  330958             :           \brief Traversal support functions ... incomplete-documentation
  330959             : 
  330960             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330961             :           or by particularly knowledgable users for specialized tools or applications.
  330962             :        */
  330963             :       /* */
  330964             : 
  330965             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  330966             :        // (inferior to ROSE traversal mechanism, experimental).
  330967             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  330968             :        */
  330969             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  330970             : 
  330971             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  330972             :       /*! \brief support for the classic visitor pattern done in GoF */
  330973             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  330974             : 
  330975             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  330976             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  330977             :        */
  330978             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  330979             : 
  330980             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  330981             :        */
  330982             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  330983             : 
  330984             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  330985             :        // This traversal helps support internal tools that call static member functions.
  330986             :        // note: this function operates on the memory pools.
  330987             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  330988             :        */
  330989             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  330990             :       /* */
  330991             : 
  330992             : 
  330993             :      public:
  330994             :       /* name Memory Allocation Functions
  330995             :           \brief Memory allocations functions ... incomplete-documentation
  330996             : 
  330997             :           These functions have been made public as part of the design, but they are suggested for internal use 
  330998             :           or by particularly knowledgable users for specialized tools or applications.
  330999             :        */
  331000             :       /* */
  331001             : 
  331002             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  331003             : 
  331004             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  331005             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  331006             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  331007             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  331008             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  331009             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  331010             :           being used with the AST File I/O mechanism.
  331011             :        */
  331012             :           virtual bool isInMemoryPool() override;
  331013             : 
  331014             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  331015             : 
  331016             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  331017             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  331018             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  331019             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  331020             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  331021             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  331022             :           being used with the AST File I/O mechanism.
  331023             :        */
  331024             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  331025             : 
  331026             :       // DQ (4/30/2006): Modified to be a const function.
  331027             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  331028             : 
  331029             :           This functions is part of general support for many possible tools to operate 
  331030             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  331031             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  331032             :           less than the set of pointers used by the AST file I/O. This is part of
  331033             :           work implemented by Andreas, and support tools such as the AST graph generation.
  331034             : 
  331035             :           \warning This function can return unexpected data members and thus the 
  331036             :                    order and the number of elements is unpredicable and subject 
  331037             :                    to change.
  331038             : 
  331039             :           \returns STL vector of pairs of SgNode* and strings
  331040             :        */
  331041             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  331042             : 
  331043             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  331044             : 
  331045             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  331046             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  331047             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  331048             : 
  331049             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  331050             :                    and subject to change.
  331051             :        */
  331052             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  331053             : 
  331054             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  331055             : 
  331056             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  331057             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  331058             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  331059             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  331060             : 
  331061             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  331062             : 
  331063             :           \returns long
  331064             :        */
  331065             :           virtual long getChildIndex( SgNode* childNode ) const override;
  331066             : 
  331067             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  331068             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  331069             :       /* \brief Constructor for use by AST File I/O Mechanism
  331070             : 
  331071             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  331072             :           which obtained via fast binary file I/O from disk.
  331073             :        */
  331074             :        // SgDefaultSymbol( SgDefaultSymbolStorageClass& source );
  331075             : 
  331076             : 
  331077             : 
  331078             : 
  331079             : 
  331080             :  // JH (10/24/2005): methods added to support the ast file IO
  331081             :     private:
  331082             : 
  331083             :       /* name AST Memory Allocation Support Functions
  331084             :           \brief Memory allocations support....
  331085             : 
  331086             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  331087             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  331088             :           and support the AST File I/O Mechanism.
  331089             :        */
  331090             :       /* */
  331091             : 
  331092             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  331093             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  331094             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  331095             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  331096             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  331097             :           a correspinding one in the AST_FILE_IO class!
  331098             :        */
  331099             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  331100             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  331101             :       /* \brief Typedef used for low level memory access.
  331102             :        */
  331103             :        // typedef unsigned char* TestType;
  331104             : 
  331105             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  331106             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  331107             :       /* \brief Typedef used to hold memory addresses as values.
  331108             :        */
  331109             :        // typedef unsigned long  AddressType;
  331110             : 
  331111             : 
  331112             : 
  331113             :        // necessary, to have direct access to the p_freepointer and the private methods !
  331114             :       /*! \brief friend class declaration to support AST File I/O */
  331115             :           friend class AST_FILE_IO;
  331116             : 
  331117             :       /*! \brief friend class declaration to support AST File I/O */
  331118             :           friend class SgDefaultSymbolStorageClass;
  331119             : 
  331120             :       /*! \brief friend class declaration to support AST File I/O */
  331121             :           friend class AstSpecificDataManagingClass;
  331122             : 
  331123             :       /*! \brief friend class declaration to support AST File I/O */
  331124             :           friend class AstSpecificDataManagingClassStorageClass;
  331125             :     public:
  331126             :       /*! \brief IR node constructor to support AST File I/O */
  331127             :           SgDefaultSymbol( const SgDefaultSymbolStorageClass& source );
  331128             : 
  331129             :  // private: // JJW hack
  331130             :        /*
  331131             :           name AST Memory Allocation Support Variables
  331132             :           Memory allocations support variables 
  331133             : 
  331134             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  331135             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  331136             :           and support the AST File I/O Mechanism.
  331137             :        */
  331138             :       /* */
  331139             : 
  331140             :     public:
  331141             : 
  331142             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  331143             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  331144             :       // virtual SgNode* addRegExpAttribute();
  331145             :       /*! \brief Support for AST matching using regular expression.
  331146             : 
  331147             :           This support is incomplete and the subject of current research to define 
  331148             :           RegEx trees to support inexact matching.
  331149             :        */
  331150             :           SgDefaultSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  331151             : 
  331152             : // *** COMMON CODE SECTION ENDS HERE ***
  331153             : 
  331154             : 
  331155             : // End of memberFunctionString
  331156             : // Start of memberFunctionString
  331157             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  331158             : 
  331159             :      // the generated cast function
  331160             :      // friend ROSE_DLL_API SgDefaultSymbol* isSgDefaultSymbol ( SgNode* s );
  331161             : 
  331162             :           typedef SgSymbol base_node_type;
  331163             : 
  331164             : 
  331165             : // End of memberFunctionString
  331166             : // Start of memberFunctionString
  331167             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  331168             : 
  331169             :           SgName get_name() const override;
  331170             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  331171             : 
  331172             : 
  331173             : // End of memberFunctionString
  331174             : 
  331175             :      public: 
  331176             :          SgType* get_type() const override /* (getDataAccessFunctionPrototypeString) */;
  331177             :          void set_type(SgType* type) /* (getDataAccessFunctionPrototypeString) */;
  331178             : 
  331179             : 
  331180             :      public: 
  331181             :          virtual ~SgDefaultSymbol();
  331182             : 
  331183             : 
  331184             :      public: 
  331185             :          SgDefaultSymbol(SgType* type = NULL); 
  331186             : 
  331187             :     protected:
  331188             : // Start of memberFunctionString
  331189             : SgType* p_type;
  331190             :           
  331191             : // End of memberFunctionString
  331192             : 
  331193             :     friend struct Rose::Traits::generated::describe_node_t<SgDefaultSymbol>;
  331194             :     friend struct Rose::Traits::generated::describe_field_t<SgDefaultSymbol, SgType*,&SgDefaultSymbol::p_type>;
  331195             : 
  331196             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331197             : 
  331198             : 
  331199             :    };
  331200             : #endif
  331201             : 
  331202             : // postdeclarations for SgDefaultSymbol
  331203             : 
  331204             : /* #line 331205 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331205             : 
  331206             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  331207             : 
  331208             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331209             : 
  331210             : 
  331211             : /* #line 331212 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331212             : 
  331213             : 
  331214             : 
  331215             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331216             : 
  331217             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  331218             : //      This code is automatically generated for each 
  331219             : //      terminal and non-terminal within the defined 
  331220             : //      grammar.  There is a simple way to change the 
  331221             : //      code to fix bugs etc.  See the ROSE README file
  331222             : //      for directions.
  331223             : 
  331224             : // tps: (02/22/2010): Adding DLL export requirements
  331225             : #include "rosedll.h"
  331226             : 
  331227             : // predeclarations for SgNamespaceSymbol
  331228             : 
  331229             : /* #line 331230 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331230             : 
  331231             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  331232             : 
  331233             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331234             : 
  331235             : #if 1
  331236             : // Class Definition for SgNamespaceSymbol
  331237             : class ROSE_DLL_API SgNamespaceSymbol  : public SgSymbol
  331238             :    {
  331239             :      public:
  331240             : 
  331241             : 
  331242             : /* #line 331243 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331243             : 
  331244             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  331245             : // Start of memberFunctionString
  331246             : /* #line 116 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  331247             : 
  331248             :           void post_construction_initialization() override;
  331249             : 
  331250             : 
  331251             : // End of memberFunctionString
  331252             : // Start of memberFunctionString
  331253             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  331254             : 
  331255             : // *** COMMON CODE SECTION BEGINS HERE ***
  331256             : 
  331257             :     public:
  331258             : 
  331259             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  331260             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  331261             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  331262             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  331263             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  331264             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  331265             : 
  331266             :       /*! \brief returns a string representing the class name */
  331267             :           virtual std::string class_name() const override;
  331268             : 
  331269             :       /*! \brief returns new style SageIII enum values */
  331270             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  331271             : 
  331272             :       /*! \brief static variant value */
  331273             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  331274             :        // static const VariantT static_variant = V_SgNamespaceSymbol;
  331275             :           enum { static_variant = V_SgNamespaceSymbol };
  331276             : 
  331277             :        /* the generated cast function */
  331278             :       /*! \brief Casts pointer from base class to derived class */
  331279             :           ROSE_DLL_API friend       SgNamespaceSymbol* isSgNamespaceSymbol(       SgNode * s );
  331280             : 
  331281             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  331282             :           ROSE_DLL_API friend const SgNamespaceSymbol* isSgNamespaceSymbol( const SgNode * s );
  331283             : 
  331284             :      // ******************************************
  331285             :      // * Memory Pool / New / Delete
  331286             :      // ******************************************
  331287             : 
  331288             :      public:
  331289             :           /// \private
  331290             :           static const unsigned pool_size; //
  331291             :           /// \private
  331292             :           static std::vector<unsigned char *> pools; //
  331293             :           /// \private
  331294             :           static SgNamespaceSymbol * next_node; // 
  331295             : 
  331296             :           /// \private
  331297             :           static unsigned long initializeStorageClassArray(SgNamespaceSymbolStorageClass *); //
  331298             : 
  331299             :           /// \private
  331300             :           static void clearMemoryPool(); //
  331301             :           static void deleteMemoryPool(); //
  331302             : 
  331303             :           /// \private
  331304             :           static void extendMemoryPoolForFileIO(); //
  331305             : 
  331306             :           /// \private
  331307             :           static SgNamespaceSymbol * getPointerFromGlobalIndex(unsigned long); //
  331308             :           /// \private
  331309             :           static SgNamespaceSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  331310             : 
  331311             :           /// \private
  331312             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  331313             :           /// \private
  331314             :           static void resetValidFreepointers(); //
  331315             :           /// \private
  331316             :           static unsigned long getNumberOfLastValidPointer(); //
  331317             : 
  331318             : 
  331319             : #if defined(INLINE_FUNCTIONS)
  331320             :       /*! \brief returns pointer to newly allocated IR node */
  331321             :           inline void *operator new (size_t size);
  331322             : #else
  331323             :       /*! \brief returns pointer to newly allocated IR node */
  331324             :           void *operator new (size_t size);
  331325             : #endif
  331326             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  331327             :           void operator delete (void* pointer, size_t size);
  331328             : 
  331329             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  331330          28 :           void operator delete (void* pointer)
  331331             :              {
  331332             :             // This is the generated delete operator...
  331333          28 :                SgNamespaceSymbol::operator delete (pointer,sizeof(SgNamespaceSymbol));
  331334             :              }
  331335             : 
  331336             :       /*! \brief Returns the total number of IR nodes of this type */
  331337             :           static size_t numberOfNodes();
  331338             : 
  331339             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  331340             :           static size_t memoryUsage();
  331341             : 
  331342             :       // End of scope which started in IR nodes specific code 
  331343             :       /* */
  331344             : 
  331345             :       /* name Internal Functions
  331346             :           \brief Internal functions ... incomplete-documentation
  331347             : 
  331348             :           These functions have been made public as part of the design, but they are suggested for internal use 
  331349             :           or by particularly knowledgeable users for specialized tools or applications.
  331350             : 
  331351             :           \internal We could not make these private because they are required by user for special purposes. And 
  331352             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  331353             :          
  331354             :        */
  331355             : 
  331356             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  331357             :        // overridden in every class by *generated* implementation
  331358             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  331359             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  331360             :        // MS: 06/28/02 container of names of variables or container indices 
  331361             :        // used used in the traversal to access AST successor nodes
  331362             :        // overridden in every class by *generated* implementation
  331363             :       /*! \brief container of names of variables or container indices used used in the traversal
  331364             :           to access AST successor nodes overridden in every class by *generated* implementation */
  331365             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  331366             : 
  331367             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  331368             :        // than all the vector copies. The implementation for these functions is generated for each class.
  331369             :       /*! \brief return number of children in the traversal successor list */
  331370             :           virtual size_t get_numberOfTraversalSuccessors() override;
  331371             :       /*! \brief index-based access to traversal successors by index number */
  331372             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  331373             :       /*! \brief index-based access to traversal successors by child node */
  331374             :           virtual size_t get_childIndex(SgNode *child) override;
  331375             : 
  331376             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  331377             :        // MS: 08/16/2002 method for generating RTI information
  331378             :       /*! \brief return C++ Runtime-Time-Information */
  331379             :           virtual RTIReturnType roseRTI() override;
  331380             : #endif
  331381             :       /* */
  331382             : 
  331383             : 
  331384             : 
  331385             :       /* name Deprecated Functions
  331386             :           \brief Deprecated functions ... incomplete-documentation
  331387             : 
  331388             :           These functions have been deprecated from use.
  331389             :        */
  331390             :       /* */
  331391             : 
  331392             :       /*! returns a C style string (char*) representing the class name */
  331393             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  331394             : 
  331395             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  331396             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  331397             : #if 0
  331398             :       /*! returns old style Sage II enum values */
  331399             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  331400             :       /*! returns old style Sage II enum values */
  331401             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  331402             : #endif
  331403             :       /* */
  331404             : 
  331405             : 
  331406             : 
  331407             : 
  331408             :      public:
  331409             :       /* name Traversal Support Functions
  331410             :           \brief Traversal support functions ... incomplete-documentation
  331411             : 
  331412             :           These functions have been made public as part of the design, but they are suggested for internal use 
  331413             :           or by particularly knowledgable users for specialized tools or applications.
  331414             :        */
  331415             :       /* */
  331416             : 
  331417             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  331418             :        // (inferior to ROSE traversal mechanism, experimental).
  331419             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  331420             :        */
  331421             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  331422             : 
  331423             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  331424             :       /*! \brief support for the classic visitor pattern done in GoF */
  331425             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  331426             : 
  331427             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  331428             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  331429             :        */
  331430             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  331431             : 
  331432             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  331433             :        */
  331434             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  331435             : 
  331436             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  331437             :        // This traversal helps support internal tools that call static member functions.
  331438             :        // note: this function operates on the memory pools.
  331439             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  331440             :        */
  331441             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  331442             :       /* */
  331443             : 
  331444             : 
  331445             :      public:
  331446             :       /* name Memory Allocation Functions
  331447             :           \brief Memory allocations functions ... incomplete-documentation
  331448             : 
  331449             :           These functions have been made public as part of the design, but they are suggested for internal use 
  331450             :           or by particularly knowledgable users for specialized tools or applications.
  331451             :        */
  331452             :       /* */
  331453             : 
  331454             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  331455             : 
  331456             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  331457             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  331458             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  331459             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  331460             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  331461             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  331462             :           being used with the AST File I/O mechanism.
  331463             :        */
  331464             :           virtual bool isInMemoryPool() override;
  331465             : 
  331466             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  331467             : 
  331468             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  331469             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  331470             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  331471             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  331472             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  331473             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  331474             :           being used with the AST File I/O mechanism.
  331475             :        */
  331476             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  331477             : 
  331478             :       // DQ (4/30/2006): Modified to be a const function.
  331479             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  331480             : 
  331481             :           This functions is part of general support for many possible tools to operate 
  331482             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  331483             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  331484             :           less than the set of pointers used by the AST file I/O. This is part of
  331485             :           work implemented by Andreas, and support tools such as the AST graph generation.
  331486             : 
  331487             :           \warning This function can return unexpected data members and thus the 
  331488             :                    order and the number of elements is unpredicable and subject 
  331489             :                    to change.
  331490             : 
  331491             :           \returns STL vector of pairs of SgNode* and strings
  331492             :        */
  331493             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  331494             : 
  331495             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  331496             : 
  331497             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  331498             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  331499             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  331500             : 
  331501             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  331502             :                    and subject to change.
  331503             :        */
  331504             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  331505             : 
  331506             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  331507             : 
  331508             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  331509             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  331510             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  331511             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  331512             : 
  331513             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  331514             : 
  331515             :           \returns long
  331516             :        */
  331517             :           virtual long getChildIndex( SgNode* childNode ) const override;
  331518             : 
  331519             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  331520             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  331521             :       /* \brief Constructor for use by AST File I/O Mechanism
  331522             : 
  331523             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  331524             :           which obtained via fast binary file I/O from disk.
  331525             :        */
  331526             :        // SgNamespaceSymbol( SgNamespaceSymbolStorageClass& source );
  331527             : 
  331528             : 
  331529             : 
  331530             : 
  331531             : 
  331532             :  // JH (10/24/2005): methods added to support the ast file IO
  331533             :     private:
  331534             : 
  331535             :       /* name AST Memory Allocation Support Functions
  331536             :           \brief Memory allocations support....
  331537             : 
  331538             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  331539             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  331540             :           and support the AST File I/O Mechanism.
  331541             :        */
  331542             :       /* */
  331543             : 
  331544             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  331545             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  331546             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  331547             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  331548             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  331549             :           a correspinding one in the AST_FILE_IO class!
  331550             :        */
  331551             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  331552             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  331553             :       /* \brief Typedef used for low level memory access.
  331554             :        */
  331555             :        // typedef unsigned char* TestType;
  331556             : 
  331557             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  331558             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  331559             :       /* \brief Typedef used to hold memory addresses as values.
  331560             :        */
  331561             :        // typedef unsigned long  AddressType;
  331562             : 
  331563             : 
  331564             : 
  331565             :        // necessary, to have direct access to the p_freepointer and the private methods !
  331566             :       /*! \brief friend class declaration to support AST File I/O */
  331567             :           friend class AST_FILE_IO;
  331568             : 
  331569             :       /*! \brief friend class declaration to support AST File I/O */
  331570             :           friend class SgNamespaceSymbolStorageClass;
  331571             : 
  331572             :       /*! \brief friend class declaration to support AST File I/O */
  331573             :           friend class AstSpecificDataManagingClass;
  331574             : 
  331575             :       /*! \brief friend class declaration to support AST File I/O */
  331576             :           friend class AstSpecificDataManagingClassStorageClass;
  331577             :     public:
  331578             :       /*! \brief IR node constructor to support AST File I/O */
  331579             :           SgNamespaceSymbol( const SgNamespaceSymbolStorageClass& source );
  331580             : 
  331581             :  // private: // JJW hack
  331582             :        /*
  331583             :           name AST Memory Allocation Support Variables
  331584             :           Memory allocations support variables 
  331585             : 
  331586             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  331587             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  331588             :           and support the AST File I/O Mechanism.
  331589             :        */
  331590             :       /* */
  331591             : 
  331592             :     public:
  331593             : 
  331594             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  331595             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  331596             :       // virtual SgNode* addRegExpAttribute();
  331597             :       /*! \brief Support for AST matching using regular expression.
  331598             : 
  331599             :           This support is incomplete and the subject of current research to define 
  331600             :           RegEx trees to support inexact matching.
  331601             :        */
  331602             :           SgNamespaceSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  331603             : 
  331604             : // *** COMMON CODE SECTION ENDS HERE ***
  331605             : 
  331606             : 
  331607             : // End of memberFunctionString
  331608             : // Start of memberFunctionString
  331609             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  331610             : 
  331611             :      // the generated cast function
  331612             :      // friend ROSE_DLL_API SgNamespaceSymbol* isSgNamespaceSymbol ( SgNode* s );
  331613             : 
  331614             :           typedef SgSymbol base_node_type;
  331615             : 
  331616             : 
  331617             : // End of memberFunctionString
  331618             : // Start of memberFunctionString
  331619             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  331620             : 
  331621             :           SgName get_name() const override;
  331622             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  331623             : 
  331624             : 
  331625             : // End of memberFunctionString
  331626             : // Start of memberFunctionString
  331627             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  331628             : 
  331629             :        // DQ (3/23/2017): ROSETTA macro expansion
  331630             :           SgType* get_type() const override;
  331631             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  331632             : 
  331633             : 
  331634             : // End of memberFunctionString
  331635             : 
  331636             : 
  331637             :      public: 
  331638             :          SgNamespaceDeclarationStatement* get_declaration() const;
  331639             :          void set_declaration(SgNamespaceDeclarationStatement* declaration);
  331640             : 
  331641             :      public: 
  331642             :          SgNamespaceAliasDeclarationStatement* get_aliasDeclaration() const;
  331643             :          void set_aliasDeclaration(SgNamespaceAliasDeclarationStatement* aliasDeclaration);
  331644             : 
  331645             :      public: 
  331646             :          bool get_isAlias() const;
  331647             :          void set_isAlias(bool isAlias);
  331648             : 
  331649             : 
  331650             :      public: 
  331651             :          virtual ~SgNamespaceSymbol();
  331652             : 
  331653             : 
  331654             :      public: 
  331655             :          SgNamespaceSymbol(SgName name = "", SgNamespaceDeclarationStatement* declaration = NULL, SgNamespaceAliasDeclarationStatement* aliasDeclaration = NULL, bool isAlias = false); 
  331656             : 
  331657             :     protected:
  331658             : // Start of memberFunctionString
  331659             : SgName p_name;
  331660             :           
  331661             : // End of memberFunctionString
  331662             : // Start of memberFunctionString
  331663             : SgNamespaceDeclarationStatement* p_declaration;
  331664             :           
  331665             : // End of memberFunctionString
  331666             : // Start of memberFunctionString
  331667             : SgNamespaceAliasDeclarationStatement* p_aliasDeclaration;
  331668             :           
  331669             : // End of memberFunctionString
  331670             : // Start of memberFunctionString
  331671             : bool p_isAlias;
  331672             :           
  331673             : // End of memberFunctionString
  331674             : 
  331675             :     friend struct Rose::Traits::generated::describe_node_t<SgNamespaceSymbol>;
  331676             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceSymbol, SgName,&SgNamespaceSymbol::p_name>;
  331677             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceSymbol, SgNamespaceDeclarationStatement*,&SgNamespaceSymbol::p_declaration>;
  331678             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceSymbol, SgNamespaceAliasDeclarationStatement*,&SgNamespaceSymbol::p_aliasDeclaration>;
  331679             :     friend struct Rose::Traits::generated::describe_field_t<SgNamespaceSymbol, bool,&SgNamespaceSymbol::p_isAlias>;
  331680             : 
  331681             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331682             : 
  331683             : 
  331684             :    };
  331685             : #endif
  331686             : 
  331687             : // postdeclarations for SgNamespaceSymbol
  331688             : 
  331689             : /* #line 331690 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331690             : 
  331691             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  331692             : 
  331693             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331694             : 
  331695             : 
  331696             : /* #line 331697 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331697             : 
  331698             : 
  331699             : 
  331700             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331701             : 
  331702             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  331703             : //      This code is automatically generated for each 
  331704             : //      terminal and non-terminal within the defined 
  331705             : //      grammar.  There is a simple way to change the 
  331706             : //      code to fix bugs etc.  See the ROSE README file
  331707             : //      for directions.
  331708             : 
  331709             : // tps: (02/22/2010): Adding DLL export requirements
  331710             : #include "rosedll.h"
  331711             : 
  331712             : // predeclarations for SgIntrinsicSymbol
  331713             : 
  331714             : /* #line 331715 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331715             : 
  331716             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  331717             : 
  331718             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  331719             : 
  331720             : #if 1
  331721             : // Class Definition for SgIntrinsicSymbol
  331722             : class ROSE_DLL_API SgIntrinsicSymbol  : public SgSymbol
  331723             :    {
  331724             :      public:
  331725             : 
  331726             : 
  331727             : /* #line 331728 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  331728             : 
  331729             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  331730             : // Start of memberFunctionString
  331731             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  331732             : 
  331733             : // *** COMMON CODE SECTION BEGINS HERE ***
  331734             : 
  331735             :     public:
  331736             : 
  331737             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  331738             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  331739             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  331740             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  331741             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  331742             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  331743             : 
  331744             :       /*! \brief returns a string representing the class name */
  331745             :           virtual std::string class_name() const override;
  331746             : 
  331747             :       /*! \brief returns new style SageIII enum values */
  331748             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  331749             : 
  331750             :       /*! \brief static variant value */
  331751             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  331752             :        // static const VariantT static_variant = V_SgIntrinsicSymbol;
  331753             :           enum { static_variant = V_SgIntrinsicSymbol };
  331754             : 
  331755             :        /* the generated cast function */
  331756             :       /*! \brief Casts pointer from base class to derived class */
  331757             :           ROSE_DLL_API friend       SgIntrinsicSymbol* isSgIntrinsicSymbol(       SgNode * s );
  331758             : 
  331759             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  331760             :           ROSE_DLL_API friend const SgIntrinsicSymbol* isSgIntrinsicSymbol( const SgNode * s );
  331761             : 
  331762             :      // ******************************************
  331763             :      // * Memory Pool / New / Delete
  331764             :      // ******************************************
  331765             : 
  331766             :      public:
  331767             :           /// \private
  331768             :           static const unsigned pool_size; //
  331769             :           /// \private
  331770             :           static std::vector<unsigned char *> pools; //
  331771             :           /// \private
  331772             :           static SgIntrinsicSymbol * next_node; // 
  331773             : 
  331774             :           /// \private
  331775             :           static unsigned long initializeStorageClassArray(SgIntrinsicSymbolStorageClass *); //
  331776             : 
  331777             :           /// \private
  331778             :           static void clearMemoryPool(); //
  331779             :           static void deleteMemoryPool(); //
  331780             : 
  331781             :           /// \private
  331782             :           static void extendMemoryPoolForFileIO(); //
  331783             : 
  331784             :           /// \private
  331785             :           static SgIntrinsicSymbol * getPointerFromGlobalIndex(unsigned long); //
  331786             :           /// \private
  331787             :           static SgIntrinsicSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  331788             : 
  331789             :           /// \private
  331790             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  331791             :           /// \private
  331792             :           static void resetValidFreepointers(); //
  331793             :           /// \private
  331794             :           static unsigned long getNumberOfLastValidPointer(); //
  331795             : 
  331796             : 
  331797             : #if defined(INLINE_FUNCTIONS)
  331798             :       /*! \brief returns pointer to newly allocated IR node */
  331799             :           inline void *operator new (size_t size);
  331800             : #else
  331801             :       /*! \brief returns pointer to newly allocated IR node */
  331802             :           void *operator new (size_t size);
  331803             : #endif
  331804             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  331805             :           void operator delete (void* pointer, size_t size);
  331806             : 
  331807             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  331808           0 :           void operator delete (void* pointer)
  331809             :              {
  331810             :             // This is the generated delete operator...
  331811           0 :                SgIntrinsicSymbol::operator delete (pointer,sizeof(SgIntrinsicSymbol));
  331812             :              }
  331813             : 
  331814             :       /*! \brief Returns the total number of IR nodes of this type */
  331815             :           static size_t numberOfNodes();
  331816             : 
  331817             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  331818             :           static size_t memoryUsage();
  331819             : 
  331820             :       // End of scope which started in IR nodes specific code 
  331821             :       /* */
  331822             : 
  331823             :       /* name Internal Functions
  331824             :           \brief Internal functions ... incomplete-documentation
  331825             : 
  331826             :           These functions have been made public as part of the design, but they are suggested for internal use 
  331827             :           or by particularly knowledgeable users for specialized tools or applications.
  331828             : 
  331829             :           \internal We could not make these private because they are required by user for special purposes. And 
  331830             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  331831             :          
  331832             :        */
  331833             : 
  331834             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  331835             :        // overridden in every class by *generated* implementation
  331836             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  331837             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  331838             :        // MS: 06/28/02 container of names of variables or container indices 
  331839             :        // used used in the traversal to access AST successor nodes
  331840             :        // overridden in every class by *generated* implementation
  331841             :       /*! \brief container of names of variables or container indices used used in the traversal
  331842             :           to access AST successor nodes overridden in every class by *generated* implementation */
  331843             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  331844             : 
  331845             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  331846             :        // than all the vector copies. The implementation for these functions is generated for each class.
  331847             :       /*! \brief return number of children in the traversal successor list */
  331848             :           virtual size_t get_numberOfTraversalSuccessors() override;
  331849             :       /*! \brief index-based access to traversal successors by index number */
  331850             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  331851             :       /*! \brief index-based access to traversal successors by child node */
  331852             :           virtual size_t get_childIndex(SgNode *child) override;
  331853             : 
  331854             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  331855             :        // MS: 08/16/2002 method for generating RTI information
  331856             :       /*! \brief return C++ Runtime-Time-Information */
  331857             :           virtual RTIReturnType roseRTI() override;
  331858             : #endif
  331859             :       /* */
  331860             : 
  331861             : 
  331862             : 
  331863             :       /* name Deprecated Functions
  331864             :           \brief Deprecated functions ... incomplete-documentation
  331865             : 
  331866             :           These functions have been deprecated from use.
  331867             :        */
  331868             :       /* */
  331869             : 
  331870             :       /*! returns a C style string (char*) representing the class name */
  331871             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  331872             : 
  331873             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  331874             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  331875             : #if 0
  331876             :       /*! returns old style Sage II enum values */
  331877             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  331878             :       /*! returns old style Sage II enum values */
  331879             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  331880             : #endif
  331881             :       /* */
  331882             : 
  331883             : 
  331884             : 
  331885             : 
  331886             :      public:
  331887             :       /* name Traversal Support Functions
  331888             :           \brief Traversal support functions ... incomplete-documentation
  331889             : 
  331890             :           These functions have been made public as part of the design, but they are suggested for internal use 
  331891             :           or by particularly knowledgable users for specialized tools or applications.
  331892             :        */
  331893             :       /* */
  331894             : 
  331895             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  331896             :        // (inferior to ROSE traversal mechanism, experimental).
  331897             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  331898             :        */
  331899             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  331900             : 
  331901             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  331902             :       /*! \brief support for the classic visitor pattern done in GoF */
  331903             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  331904             : 
  331905             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  331906             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  331907             :        */
  331908             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  331909             : 
  331910             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  331911             :        */
  331912             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  331913             : 
  331914             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  331915             :        // This traversal helps support internal tools that call static member functions.
  331916             :        // note: this function operates on the memory pools.
  331917             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  331918             :        */
  331919             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  331920             :       /* */
  331921             : 
  331922             : 
  331923             :      public:
  331924             :       /* name Memory Allocation Functions
  331925             :           \brief Memory allocations functions ... incomplete-documentation
  331926             : 
  331927             :           These functions have been made public as part of the design, but they are suggested for internal use 
  331928             :           or by particularly knowledgable users for specialized tools or applications.
  331929             :        */
  331930             :       /* */
  331931             : 
  331932             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  331933             : 
  331934             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  331935             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  331936             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  331937             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  331938             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  331939             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  331940             :           being used with the AST File I/O mechanism.
  331941             :        */
  331942             :           virtual bool isInMemoryPool() override;
  331943             : 
  331944             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  331945             : 
  331946             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  331947             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  331948             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  331949             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  331950             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  331951             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  331952             :           being used with the AST File I/O mechanism.
  331953             :        */
  331954             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  331955             : 
  331956             :       // DQ (4/30/2006): Modified to be a const function.
  331957             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  331958             : 
  331959             :           This functions is part of general support for many possible tools to operate 
  331960             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  331961             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  331962             :           less than the set of pointers used by the AST file I/O. This is part of
  331963             :           work implemented by Andreas, and support tools such as the AST graph generation.
  331964             : 
  331965             :           \warning This function can return unexpected data members and thus the 
  331966             :                    order and the number of elements is unpredicable and subject 
  331967             :                    to change.
  331968             : 
  331969             :           \returns STL vector of pairs of SgNode* and strings
  331970             :        */
  331971             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  331972             : 
  331973             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  331974             : 
  331975             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  331976             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  331977             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  331978             : 
  331979             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  331980             :                    and subject to change.
  331981             :        */
  331982             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  331983             : 
  331984             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  331985             : 
  331986             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  331987             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  331988             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  331989             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  331990             : 
  331991             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  331992             : 
  331993             :           \returns long
  331994             :        */
  331995             :           virtual long getChildIndex( SgNode* childNode ) const override;
  331996             : 
  331997             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  331998             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  331999             :       /* \brief Constructor for use by AST File I/O Mechanism
  332000             : 
  332001             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  332002             :           which obtained via fast binary file I/O from disk.
  332003             :        */
  332004             :        // SgIntrinsicSymbol( SgIntrinsicSymbolStorageClass& source );
  332005             : 
  332006             : 
  332007             : 
  332008             : 
  332009             : 
  332010             :  // JH (10/24/2005): methods added to support the ast file IO
  332011             :     private:
  332012             : 
  332013             :       /* name AST Memory Allocation Support Functions
  332014             :           \brief Memory allocations support....
  332015             : 
  332016             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  332017             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  332018             :           and support the AST File I/O Mechanism.
  332019             :        */
  332020             :       /* */
  332021             : 
  332022             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  332023             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  332024             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  332025             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  332026             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  332027             :           a correspinding one in the AST_FILE_IO class!
  332028             :        */
  332029             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  332030             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332031             :       /* \brief Typedef used for low level memory access.
  332032             :        */
  332033             :        // typedef unsigned char* TestType;
  332034             : 
  332035             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  332036             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332037             :       /* \brief Typedef used to hold memory addresses as values.
  332038             :        */
  332039             :        // typedef unsigned long  AddressType;
  332040             : 
  332041             : 
  332042             : 
  332043             :        // necessary, to have direct access to the p_freepointer and the private methods !
  332044             :       /*! \brief friend class declaration to support AST File I/O */
  332045             :           friend class AST_FILE_IO;
  332046             : 
  332047             :       /*! \brief friend class declaration to support AST File I/O */
  332048             :           friend class SgIntrinsicSymbolStorageClass;
  332049             : 
  332050             :       /*! \brief friend class declaration to support AST File I/O */
  332051             :           friend class AstSpecificDataManagingClass;
  332052             : 
  332053             :       /*! \brief friend class declaration to support AST File I/O */
  332054             :           friend class AstSpecificDataManagingClassStorageClass;
  332055             :     public:
  332056             :       /*! \brief IR node constructor to support AST File I/O */
  332057             :           SgIntrinsicSymbol( const SgIntrinsicSymbolStorageClass& source );
  332058             : 
  332059             :  // private: // JJW hack
  332060             :        /*
  332061             :           name AST Memory Allocation Support Variables
  332062             :           Memory allocations support variables 
  332063             : 
  332064             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  332065             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  332066             :           and support the AST File I/O Mechanism.
  332067             :        */
  332068             :       /* */
  332069             : 
  332070             :     public:
  332071             : 
  332072             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  332073             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  332074             :       // virtual SgNode* addRegExpAttribute();
  332075             :       /*! \brief Support for AST matching using regular expression.
  332076             : 
  332077             :           This support is incomplete and the subject of current research to define 
  332078             :           RegEx trees to support inexact matching.
  332079             :        */
  332080             :           SgIntrinsicSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  332081             : 
  332082             : // *** COMMON CODE SECTION ENDS HERE ***
  332083             : 
  332084             : 
  332085             : // End of memberFunctionString
  332086             : // Start of memberFunctionString
  332087             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  332088             : 
  332089             :      // the generated cast function
  332090             :      // friend ROSE_DLL_API SgIntrinsicSymbol* isSgIntrinsicSymbol ( SgNode* s );
  332091             : 
  332092             :           typedef SgSymbol base_node_type;
  332093             : 
  332094             : 
  332095             : // End of memberFunctionString
  332096             : // Start of memberFunctionString
  332097             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  332098             : 
  332099             :           SgName get_name() const override;
  332100             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  332101             : 
  332102             : 
  332103             : // End of memberFunctionString
  332104             : // Start of memberFunctionString
  332105             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  332106             : 
  332107             :        // DQ (3/23/2017): ROSETTA macro expansion
  332108             :           SgType* get_type() const override;
  332109             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  332110             : 
  332111             : 
  332112             : // End of memberFunctionString
  332113             : 
  332114             :      public: 
  332115             :          SgInitializedName* get_declaration() const;
  332116             :          void set_declaration(SgInitializedName* declaration);
  332117             : 
  332118             : 
  332119             :      public: 
  332120             :          virtual ~SgIntrinsicSymbol();
  332121             : 
  332122             : 
  332123             :      public: 
  332124             :          SgIntrinsicSymbol(SgInitializedName* declaration = NULL); 
  332125             : 
  332126             :     protected:
  332127             : // Start of memberFunctionString
  332128             : SgInitializedName* p_declaration;
  332129             :           
  332130             : // End of memberFunctionString
  332131             : 
  332132             :     friend struct Rose::Traits::generated::describe_node_t<SgIntrinsicSymbol>;
  332133             :     friend struct Rose::Traits::generated::describe_field_t<SgIntrinsicSymbol, SgInitializedName*,&SgIntrinsicSymbol::p_declaration>;
  332134             : 
  332135             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332136             : 
  332137             : 
  332138             :    };
  332139             : #endif
  332140             : 
  332141             : // postdeclarations for SgIntrinsicSymbol
  332142             : 
  332143             : /* #line 332144 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332144             : 
  332145             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  332146             : 
  332147             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332148             : 
  332149             : 
  332150             : /* #line 332151 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332151             : 
  332152             : 
  332153             : 
  332154             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332155             : 
  332156             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  332157             : //      This code is automatically generated for each 
  332158             : //      terminal and non-terminal within the defined 
  332159             : //      grammar.  There is a simple way to change the 
  332160             : //      code to fix bugs etc.  See the ROSE README file
  332161             : //      for directions.
  332162             : 
  332163             : // tps: (02/22/2010): Adding DLL export requirements
  332164             : #include "rosedll.h"
  332165             : 
  332166             : // predeclarations for SgModuleSymbol
  332167             : 
  332168             : /* #line 332169 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332169             : 
  332170             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  332171             : 
  332172             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332173             : 
  332174             : #if 1
  332175             : // Class Definition for SgModuleSymbol
  332176             : class ROSE_DLL_API SgModuleSymbol  : public SgSymbol
  332177             :    {
  332178             :      public:
  332179             : 
  332180             : 
  332181             : /* #line 332182 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332182             : 
  332183             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  332184             : // Start of memberFunctionString
  332185             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  332186             : 
  332187             : // *** COMMON CODE SECTION BEGINS HERE ***
  332188             : 
  332189             :     public:
  332190             : 
  332191             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  332192             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  332193             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  332194             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  332195             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  332196             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  332197             : 
  332198             :       /*! \brief returns a string representing the class name */
  332199             :           virtual std::string class_name() const override;
  332200             : 
  332201             :       /*! \brief returns new style SageIII enum values */
  332202             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  332203             : 
  332204             :       /*! \brief static variant value */
  332205             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  332206             :        // static const VariantT static_variant = V_SgModuleSymbol;
  332207             :           enum { static_variant = V_SgModuleSymbol };
  332208             : 
  332209             :        /* the generated cast function */
  332210             :       /*! \brief Casts pointer from base class to derived class */
  332211             :           ROSE_DLL_API friend       SgModuleSymbol* isSgModuleSymbol(       SgNode * s );
  332212             : 
  332213             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  332214             :           ROSE_DLL_API friend const SgModuleSymbol* isSgModuleSymbol( const SgNode * s );
  332215             : 
  332216             :      // ******************************************
  332217             :      // * Memory Pool / New / Delete
  332218             :      // ******************************************
  332219             : 
  332220             :      public:
  332221             :           /// \private
  332222             :           static const unsigned pool_size; //
  332223             :           /// \private
  332224             :           static std::vector<unsigned char *> pools; //
  332225             :           /// \private
  332226             :           static SgModuleSymbol * next_node; // 
  332227             : 
  332228             :           /// \private
  332229             :           static unsigned long initializeStorageClassArray(SgModuleSymbolStorageClass *); //
  332230             : 
  332231             :           /// \private
  332232             :           static void clearMemoryPool(); //
  332233             :           static void deleteMemoryPool(); //
  332234             : 
  332235             :           /// \private
  332236             :           static void extendMemoryPoolForFileIO(); //
  332237             : 
  332238             :           /// \private
  332239             :           static SgModuleSymbol * getPointerFromGlobalIndex(unsigned long); //
  332240             :           /// \private
  332241             :           static SgModuleSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  332242             : 
  332243             :           /// \private
  332244             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  332245             :           /// \private
  332246             :           static void resetValidFreepointers(); //
  332247             :           /// \private
  332248             :           static unsigned long getNumberOfLastValidPointer(); //
  332249             : 
  332250             : 
  332251             : #if defined(INLINE_FUNCTIONS)
  332252             :       /*! \brief returns pointer to newly allocated IR node */
  332253             :           inline void *operator new (size_t size);
  332254             : #else
  332255             :       /*! \brief returns pointer to newly allocated IR node */
  332256             :           void *operator new (size_t size);
  332257             : #endif
  332258             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  332259             :           void operator delete (void* pointer, size_t size);
  332260             : 
  332261             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  332262           0 :           void operator delete (void* pointer)
  332263             :              {
  332264             :             // This is the generated delete operator...
  332265           0 :                SgModuleSymbol::operator delete (pointer,sizeof(SgModuleSymbol));
  332266             :              }
  332267             : 
  332268             :       /*! \brief Returns the total number of IR nodes of this type */
  332269             :           static size_t numberOfNodes();
  332270             : 
  332271             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  332272             :           static size_t memoryUsage();
  332273             : 
  332274             :       // End of scope which started in IR nodes specific code 
  332275             :       /* */
  332276             : 
  332277             :       /* name Internal Functions
  332278             :           \brief Internal functions ... incomplete-documentation
  332279             : 
  332280             :           These functions have been made public as part of the design, but they are suggested for internal use 
  332281             :           or by particularly knowledgeable users for specialized tools or applications.
  332282             : 
  332283             :           \internal We could not make these private because they are required by user for special purposes. And 
  332284             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  332285             :          
  332286             :        */
  332287             : 
  332288             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  332289             :        // overridden in every class by *generated* implementation
  332290             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  332291             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  332292             :        // MS: 06/28/02 container of names of variables or container indices 
  332293             :        // used used in the traversal to access AST successor nodes
  332294             :        // overridden in every class by *generated* implementation
  332295             :       /*! \brief container of names of variables or container indices used used in the traversal
  332296             :           to access AST successor nodes overridden in every class by *generated* implementation */
  332297             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  332298             : 
  332299             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  332300             :        // than all the vector copies. The implementation for these functions is generated for each class.
  332301             :       /*! \brief return number of children in the traversal successor list */
  332302             :           virtual size_t get_numberOfTraversalSuccessors() override;
  332303             :       /*! \brief index-based access to traversal successors by index number */
  332304             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  332305             :       /*! \brief index-based access to traversal successors by child node */
  332306             :           virtual size_t get_childIndex(SgNode *child) override;
  332307             : 
  332308             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  332309             :        // MS: 08/16/2002 method for generating RTI information
  332310             :       /*! \brief return C++ Runtime-Time-Information */
  332311             :           virtual RTIReturnType roseRTI() override;
  332312             : #endif
  332313             :       /* */
  332314             : 
  332315             : 
  332316             : 
  332317             :       /* name Deprecated Functions
  332318             :           \brief Deprecated functions ... incomplete-documentation
  332319             : 
  332320             :           These functions have been deprecated from use.
  332321             :        */
  332322             :       /* */
  332323             : 
  332324             :       /*! returns a C style string (char*) representing the class name */
  332325             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  332326             : 
  332327             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  332328             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  332329             : #if 0
  332330             :       /*! returns old style Sage II enum values */
  332331             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  332332             :       /*! returns old style Sage II enum values */
  332333             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  332334             : #endif
  332335             :       /* */
  332336             : 
  332337             : 
  332338             : 
  332339             : 
  332340             :      public:
  332341             :       /* name Traversal Support Functions
  332342             :           \brief Traversal support functions ... incomplete-documentation
  332343             : 
  332344             :           These functions have been made public as part of the design, but they are suggested for internal use 
  332345             :           or by particularly knowledgable users for specialized tools or applications.
  332346             :        */
  332347             :       /* */
  332348             : 
  332349             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  332350             :        // (inferior to ROSE traversal mechanism, experimental).
  332351             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  332352             :        */
  332353             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  332354             : 
  332355             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  332356             :       /*! \brief support for the classic visitor pattern done in GoF */
  332357             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  332358             : 
  332359             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  332360             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  332361             :        */
  332362             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  332363             : 
  332364             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  332365             :        */
  332366             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  332367             : 
  332368             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  332369             :        // This traversal helps support internal tools that call static member functions.
  332370             :        // note: this function operates on the memory pools.
  332371             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  332372             :        */
  332373             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  332374             :       /* */
  332375             : 
  332376             : 
  332377             :      public:
  332378             :       /* name Memory Allocation Functions
  332379             :           \brief Memory allocations functions ... incomplete-documentation
  332380             : 
  332381             :           These functions have been made public as part of the design, but they are suggested for internal use 
  332382             :           or by particularly knowledgable users for specialized tools or applications.
  332383             :        */
  332384             :       /* */
  332385             : 
  332386             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  332387             : 
  332388             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  332389             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  332390             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  332391             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  332392             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  332393             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  332394             :           being used with the AST File I/O mechanism.
  332395             :        */
  332396             :           virtual bool isInMemoryPool() override;
  332397             : 
  332398             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  332399             : 
  332400             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  332401             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  332402             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  332403             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  332404             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  332405             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  332406             :           being used with the AST File I/O mechanism.
  332407             :        */
  332408             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  332409             : 
  332410             :       // DQ (4/30/2006): Modified to be a const function.
  332411             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  332412             : 
  332413             :           This functions is part of general support for many possible tools to operate 
  332414             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  332415             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  332416             :           less than the set of pointers used by the AST file I/O. This is part of
  332417             :           work implemented by Andreas, and support tools such as the AST graph generation.
  332418             : 
  332419             :           \warning This function can return unexpected data members and thus the 
  332420             :                    order and the number of elements is unpredicable and subject 
  332421             :                    to change.
  332422             : 
  332423             :           \returns STL vector of pairs of SgNode* and strings
  332424             :        */
  332425             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  332426             : 
  332427             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  332428             : 
  332429             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  332430             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  332431             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  332432             : 
  332433             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  332434             :                    and subject to change.
  332435             :        */
  332436             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  332437             : 
  332438             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  332439             : 
  332440             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  332441             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  332442             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  332443             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  332444             : 
  332445             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  332446             : 
  332447             :           \returns long
  332448             :        */
  332449             :           virtual long getChildIndex( SgNode* childNode ) const override;
  332450             : 
  332451             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  332452             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332453             :       /* \brief Constructor for use by AST File I/O Mechanism
  332454             : 
  332455             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  332456             :           which obtained via fast binary file I/O from disk.
  332457             :        */
  332458             :        // SgModuleSymbol( SgModuleSymbolStorageClass& source );
  332459             : 
  332460             : 
  332461             : 
  332462             : 
  332463             : 
  332464             :  // JH (10/24/2005): methods added to support the ast file IO
  332465             :     private:
  332466             : 
  332467             :       /* name AST Memory Allocation Support Functions
  332468             :           \brief Memory allocations support....
  332469             : 
  332470             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  332471             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  332472             :           and support the AST File I/O Mechanism.
  332473             :        */
  332474             :       /* */
  332475             : 
  332476             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  332477             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  332478             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  332479             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  332480             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  332481             :           a correspinding one in the AST_FILE_IO class!
  332482             :        */
  332483             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  332484             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332485             :       /* \brief Typedef used for low level memory access.
  332486             :        */
  332487             :        // typedef unsigned char* TestType;
  332488             : 
  332489             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  332490             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332491             :       /* \brief Typedef used to hold memory addresses as values.
  332492             :        */
  332493             :        // typedef unsigned long  AddressType;
  332494             : 
  332495             : 
  332496             : 
  332497             :        // necessary, to have direct access to the p_freepointer and the private methods !
  332498             :       /*! \brief friend class declaration to support AST File I/O */
  332499             :           friend class AST_FILE_IO;
  332500             : 
  332501             :       /*! \brief friend class declaration to support AST File I/O */
  332502             :           friend class SgModuleSymbolStorageClass;
  332503             : 
  332504             :       /*! \brief friend class declaration to support AST File I/O */
  332505             :           friend class AstSpecificDataManagingClass;
  332506             : 
  332507             :       /*! \brief friend class declaration to support AST File I/O */
  332508             :           friend class AstSpecificDataManagingClassStorageClass;
  332509             :     public:
  332510             :       /*! \brief IR node constructor to support AST File I/O */
  332511             :           SgModuleSymbol( const SgModuleSymbolStorageClass& source );
  332512             : 
  332513             :  // private: // JJW hack
  332514             :        /*
  332515             :           name AST Memory Allocation Support Variables
  332516             :           Memory allocations support variables 
  332517             : 
  332518             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  332519             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  332520             :           and support the AST File I/O Mechanism.
  332521             :        */
  332522             :       /* */
  332523             : 
  332524             :     public:
  332525             : 
  332526             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  332527             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  332528             :       // virtual SgNode* addRegExpAttribute();
  332529             :       /*! \brief Support for AST matching using regular expression.
  332530             : 
  332531             :           This support is incomplete and the subject of current research to define 
  332532             :           RegEx trees to support inexact matching.
  332533             :        */
  332534             :           SgModuleSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  332535             : 
  332536             : // *** COMMON CODE SECTION ENDS HERE ***
  332537             : 
  332538             : 
  332539             : // End of memberFunctionString
  332540             : // Start of memberFunctionString
  332541             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  332542             : 
  332543             :      // the generated cast function
  332544             :      // friend ROSE_DLL_API SgModuleSymbol* isSgModuleSymbol ( SgNode* s );
  332545             : 
  332546             :           typedef SgSymbol base_node_type;
  332547             : 
  332548             : 
  332549             : // End of memberFunctionString
  332550             : // Start of memberFunctionString
  332551             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  332552             : 
  332553             :           SgName get_name() const override;
  332554             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  332555             : 
  332556             : 
  332557             : // End of memberFunctionString
  332558             : // Start of memberFunctionString
  332559             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  332560             : 
  332561             :        // DQ (3/23/2017): ROSETTA macro expansion
  332562             :           SgType* get_type() const override;
  332563             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  332564             : 
  332565             : 
  332566             : // End of memberFunctionString
  332567             : 
  332568             :      public: 
  332569             :          SgModuleStatement* get_declaration() const;
  332570             :          void set_declaration(SgModuleStatement* declaration);
  332571             : 
  332572             : 
  332573             :      public: 
  332574             :          virtual ~SgModuleSymbol();
  332575             : 
  332576             : 
  332577             :      public: 
  332578             :          SgModuleSymbol(SgModuleStatement* declaration = NULL); 
  332579             : 
  332580             :     protected:
  332581             : // Start of memberFunctionString
  332582             : SgModuleStatement* p_declaration;
  332583             :           
  332584             : // End of memberFunctionString
  332585             : 
  332586             :     friend struct Rose::Traits::generated::describe_node_t<SgModuleSymbol>;
  332587             :     friend struct Rose::Traits::generated::describe_field_t<SgModuleSymbol, SgModuleStatement*,&SgModuleSymbol::p_declaration>;
  332588             : 
  332589             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332590             : 
  332591             : 
  332592             :    };
  332593             : #endif
  332594             : 
  332595             : // postdeclarations for SgModuleSymbol
  332596             : 
  332597             : /* #line 332598 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332598             : 
  332599             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  332600             : 
  332601             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332602             : 
  332603             : 
  332604             : /* #line 332605 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332605             : 
  332606             : 
  332607             : 
  332608             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332609             : 
  332610             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  332611             : //      This code is automatically generated for each 
  332612             : //      terminal and non-terminal within the defined 
  332613             : //      grammar.  There is a simple way to change the 
  332614             : //      code to fix bugs etc.  See the ROSE README file
  332615             : //      for directions.
  332616             : 
  332617             : // tps: (02/22/2010): Adding DLL export requirements
  332618             : #include "rosedll.h"
  332619             : 
  332620             : // predeclarations for SgInterfaceSymbol
  332621             : 
  332622             : /* #line 332623 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332623             : 
  332624             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  332625             : 
  332626             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  332627             : 
  332628             : #if 1
  332629             : // Class Definition for SgInterfaceSymbol
  332630             : class ROSE_DLL_API SgInterfaceSymbol  : public SgSymbol
  332631             :    {
  332632             :      public:
  332633             : 
  332634             : 
  332635             : /* #line 332636 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  332636             : 
  332637             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  332638             : // Start of memberFunctionString
  332639             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  332640             : 
  332641             : // *** COMMON CODE SECTION BEGINS HERE ***
  332642             : 
  332643             :     public:
  332644             : 
  332645             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  332646             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  332647             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  332648             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  332649             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  332650             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  332651             : 
  332652             :       /*! \brief returns a string representing the class name */
  332653             :           virtual std::string class_name() const override;
  332654             : 
  332655             :       /*! \brief returns new style SageIII enum values */
  332656             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  332657             : 
  332658             :       /*! \brief static variant value */
  332659             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  332660             :        // static const VariantT static_variant = V_SgInterfaceSymbol;
  332661             :           enum { static_variant = V_SgInterfaceSymbol };
  332662             : 
  332663             :        /* the generated cast function */
  332664             :       /*! \brief Casts pointer from base class to derived class */
  332665             :           ROSE_DLL_API friend       SgInterfaceSymbol* isSgInterfaceSymbol(       SgNode * s );
  332666             : 
  332667             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  332668             :           ROSE_DLL_API friend const SgInterfaceSymbol* isSgInterfaceSymbol( const SgNode * s );
  332669             : 
  332670             :      // ******************************************
  332671             :      // * Memory Pool / New / Delete
  332672             :      // ******************************************
  332673             : 
  332674             :      public:
  332675             :           /// \private
  332676             :           static const unsigned pool_size; //
  332677             :           /// \private
  332678             :           static std::vector<unsigned char *> pools; //
  332679             :           /// \private
  332680             :           static SgInterfaceSymbol * next_node; // 
  332681             : 
  332682             :           /// \private
  332683             :           static unsigned long initializeStorageClassArray(SgInterfaceSymbolStorageClass *); //
  332684             : 
  332685             :           /// \private
  332686             :           static void clearMemoryPool(); //
  332687             :           static void deleteMemoryPool(); //
  332688             : 
  332689             :           /// \private
  332690             :           static void extendMemoryPoolForFileIO(); //
  332691             : 
  332692             :           /// \private
  332693             :           static SgInterfaceSymbol * getPointerFromGlobalIndex(unsigned long); //
  332694             :           /// \private
  332695             :           static SgInterfaceSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  332696             : 
  332697             :           /// \private
  332698             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  332699             :           /// \private
  332700             :           static void resetValidFreepointers(); //
  332701             :           /// \private
  332702             :           static unsigned long getNumberOfLastValidPointer(); //
  332703             : 
  332704             : 
  332705             : #if defined(INLINE_FUNCTIONS)
  332706             :       /*! \brief returns pointer to newly allocated IR node */
  332707             :           inline void *operator new (size_t size);
  332708             : #else
  332709             :       /*! \brief returns pointer to newly allocated IR node */
  332710             :           void *operator new (size_t size);
  332711             : #endif
  332712             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  332713             :           void operator delete (void* pointer, size_t size);
  332714             : 
  332715             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  332716           0 :           void operator delete (void* pointer)
  332717             :              {
  332718             :             // This is the generated delete operator...
  332719           0 :                SgInterfaceSymbol::operator delete (pointer,sizeof(SgInterfaceSymbol));
  332720             :              }
  332721             : 
  332722             :       /*! \brief Returns the total number of IR nodes of this type */
  332723             :           static size_t numberOfNodes();
  332724             : 
  332725             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  332726             :           static size_t memoryUsage();
  332727             : 
  332728             :       // End of scope which started in IR nodes specific code 
  332729             :       /* */
  332730             : 
  332731             :       /* name Internal Functions
  332732             :           \brief Internal functions ... incomplete-documentation
  332733             : 
  332734             :           These functions have been made public as part of the design, but they are suggested for internal use 
  332735             :           or by particularly knowledgeable users for specialized tools or applications.
  332736             : 
  332737             :           \internal We could not make these private because they are required by user for special purposes. And 
  332738             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  332739             :          
  332740             :        */
  332741             : 
  332742             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  332743             :        // overridden in every class by *generated* implementation
  332744             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  332745             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  332746             :        // MS: 06/28/02 container of names of variables or container indices 
  332747             :        // used used in the traversal to access AST successor nodes
  332748             :        // overridden in every class by *generated* implementation
  332749             :       /*! \brief container of names of variables or container indices used used in the traversal
  332750             :           to access AST successor nodes overridden in every class by *generated* implementation */
  332751             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  332752             : 
  332753             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  332754             :        // than all the vector copies. The implementation for these functions is generated for each class.
  332755             :       /*! \brief return number of children in the traversal successor list */
  332756             :           virtual size_t get_numberOfTraversalSuccessors() override;
  332757             :       /*! \brief index-based access to traversal successors by index number */
  332758             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  332759             :       /*! \brief index-based access to traversal successors by child node */
  332760             :           virtual size_t get_childIndex(SgNode *child) override;
  332761             : 
  332762             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  332763             :        // MS: 08/16/2002 method for generating RTI information
  332764             :       /*! \brief return C++ Runtime-Time-Information */
  332765             :           virtual RTIReturnType roseRTI() override;
  332766             : #endif
  332767             :       /* */
  332768             : 
  332769             : 
  332770             : 
  332771             :       /* name Deprecated Functions
  332772             :           \brief Deprecated functions ... incomplete-documentation
  332773             : 
  332774             :           These functions have been deprecated from use.
  332775             :        */
  332776             :       /* */
  332777             : 
  332778             :       /*! returns a C style string (char*) representing the class name */
  332779             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  332780             : 
  332781             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  332782             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  332783             : #if 0
  332784             :       /*! returns old style Sage II enum values */
  332785             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  332786             :       /*! returns old style Sage II enum values */
  332787             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  332788             : #endif
  332789             :       /* */
  332790             : 
  332791             : 
  332792             : 
  332793             : 
  332794             :      public:
  332795             :       /* name Traversal Support Functions
  332796             :           \brief Traversal support functions ... incomplete-documentation
  332797             : 
  332798             :           These functions have been made public as part of the design, but they are suggested for internal use 
  332799             :           or by particularly knowledgable users for specialized tools or applications.
  332800             :        */
  332801             :       /* */
  332802             : 
  332803             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  332804             :        // (inferior to ROSE traversal mechanism, experimental).
  332805             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  332806             :        */
  332807             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  332808             : 
  332809             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  332810             :       /*! \brief support for the classic visitor pattern done in GoF */
  332811             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  332812             : 
  332813             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  332814             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  332815             :        */
  332816             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  332817             : 
  332818             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  332819             :        */
  332820             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  332821             : 
  332822             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  332823             :        // This traversal helps support internal tools that call static member functions.
  332824             :        // note: this function operates on the memory pools.
  332825             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  332826             :        */
  332827             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  332828             :       /* */
  332829             : 
  332830             : 
  332831             :      public:
  332832             :       /* name Memory Allocation Functions
  332833             :           \brief Memory allocations functions ... incomplete-documentation
  332834             : 
  332835             :           These functions have been made public as part of the design, but they are suggested for internal use 
  332836             :           or by particularly knowledgable users for specialized tools or applications.
  332837             :        */
  332838             :       /* */
  332839             : 
  332840             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  332841             : 
  332842             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  332843             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  332844             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  332845             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  332846             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  332847             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  332848             :           being used with the AST File I/O mechanism.
  332849             :        */
  332850             :           virtual bool isInMemoryPool() override;
  332851             : 
  332852             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  332853             : 
  332854             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  332855             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  332856             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  332857             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  332858             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  332859             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  332860             :           being used with the AST File I/O mechanism.
  332861             :        */
  332862             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  332863             : 
  332864             :       // DQ (4/30/2006): Modified to be a const function.
  332865             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  332866             : 
  332867             :           This functions is part of general support for many possible tools to operate 
  332868             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  332869             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  332870             :           less than the set of pointers used by the AST file I/O. This is part of
  332871             :           work implemented by Andreas, and support tools such as the AST graph generation.
  332872             : 
  332873             :           \warning This function can return unexpected data members and thus the 
  332874             :                    order and the number of elements is unpredicable and subject 
  332875             :                    to change.
  332876             : 
  332877             :           \returns STL vector of pairs of SgNode* and strings
  332878             :        */
  332879             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  332880             : 
  332881             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  332882             : 
  332883             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  332884             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  332885             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  332886             : 
  332887             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  332888             :                    and subject to change.
  332889             :        */
  332890             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  332891             : 
  332892             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  332893             : 
  332894             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  332895             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  332896             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  332897             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  332898             : 
  332899             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  332900             : 
  332901             :           \returns long
  332902             :        */
  332903             :           virtual long getChildIndex( SgNode* childNode ) const override;
  332904             : 
  332905             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  332906             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332907             :       /* \brief Constructor for use by AST File I/O Mechanism
  332908             : 
  332909             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  332910             :           which obtained via fast binary file I/O from disk.
  332911             :        */
  332912             :        // SgInterfaceSymbol( SgInterfaceSymbolStorageClass& source );
  332913             : 
  332914             : 
  332915             : 
  332916             : 
  332917             : 
  332918             :  // JH (10/24/2005): methods added to support the ast file IO
  332919             :     private:
  332920             : 
  332921             :       /* name AST Memory Allocation Support Functions
  332922             :           \brief Memory allocations support....
  332923             : 
  332924             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  332925             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  332926             :           and support the AST File I/O Mechanism.
  332927             :        */
  332928             :       /* */
  332929             : 
  332930             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  332931             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  332932             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  332933             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  332934             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  332935             :           a correspinding one in the AST_FILE_IO class!
  332936             :        */
  332937             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  332938             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332939             :       /* \brief Typedef used for low level memory access.
  332940             :        */
  332941             :        // typedef unsigned char* TestType;
  332942             : 
  332943             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  332944             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  332945             :       /* \brief Typedef used to hold memory addresses as values.
  332946             :        */
  332947             :        // typedef unsigned long  AddressType;
  332948             : 
  332949             : 
  332950             : 
  332951             :        // necessary, to have direct access to the p_freepointer and the private methods !
  332952             :       /*! \brief friend class declaration to support AST File I/O */
  332953             :           friend class AST_FILE_IO;
  332954             : 
  332955             :       /*! \brief friend class declaration to support AST File I/O */
  332956             :           friend class SgInterfaceSymbolStorageClass;
  332957             : 
  332958             :       /*! \brief friend class declaration to support AST File I/O */
  332959             :           friend class AstSpecificDataManagingClass;
  332960             : 
  332961             :       /*! \brief friend class declaration to support AST File I/O */
  332962             :           friend class AstSpecificDataManagingClassStorageClass;
  332963             :     public:
  332964             :       /*! \brief IR node constructor to support AST File I/O */
  332965             :           SgInterfaceSymbol( const SgInterfaceSymbolStorageClass& source );
  332966             : 
  332967             :  // private: // JJW hack
  332968             :        /*
  332969             :           name AST Memory Allocation Support Variables
  332970             :           Memory allocations support variables 
  332971             : 
  332972             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  332973             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  332974             :           and support the AST File I/O Mechanism.
  332975             :        */
  332976             :       /* */
  332977             : 
  332978             :     public:
  332979             : 
  332980             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  332981             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  332982             :       // virtual SgNode* addRegExpAttribute();
  332983             :       /*! \brief Support for AST matching using regular expression.
  332984             : 
  332985             :           This support is incomplete and the subject of current research to define 
  332986             :           RegEx trees to support inexact matching.
  332987             :        */
  332988             :           SgInterfaceSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  332989             : 
  332990             : // *** COMMON CODE SECTION ENDS HERE ***
  332991             : 
  332992             : 
  332993             : // End of memberFunctionString
  332994             : // Start of memberFunctionString
  332995             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  332996             : 
  332997             :      // the generated cast function
  332998             :      // friend ROSE_DLL_API SgInterfaceSymbol* isSgInterfaceSymbol ( SgNode* s );
  332999             : 
  333000             :           typedef SgSymbol base_node_type;
  333001             : 
  333002             : 
  333003             : // End of memberFunctionString
  333004             : // Start of memberFunctionString
  333005             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  333006             : 
  333007             :           SgName get_name() const override;
  333008             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  333009             : 
  333010             : 
  333011             : // End of memberFunctionString
  333012             : // Start of memberFunctionString
  333013             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  333014             : 
  333015             :        // DQ (3/23/2017): ROSETTA macro expansion
  333016             :           SgType* get_type() const override;
  333017             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  333018             : 
  333019             : 
  333020             : // End of memberFunctionString
  333021             : 
  333022             :      public: 
  333023             :          SgInterfaceStatement* get_declaration() const;
  333024             :          void set_declaration(SgInterfaceStatement* declaration);
  333025             : 
  333026             : 
  333027             :      public: 
  333028             :          virtual ~SgInterfaceSymbol();
  333029             : 
  333030             : 
  333031             :      public: 
  333032             :          SgInterfaceSymbol(SgInterfaceStatement* declaration = NULL); 
  333033             : 
  333034             :     protected:
  333035             : // Start of memberFunctionString
  333036             : SgInterfaceStatement* p_declaration;
  333037             :           
  333038             : // End of memberFunctionString
  333039             : 
  333040             :     friend struct Rose::Traits::generated::describe_node_t<SgInterfaceSymbol>;
  333041             :     friend struct Rose::Traits::generated::describe_field_t<SgInterfaceSymbol, SgInterfaceStatement*,&SgInterfaceSymbol::p_declaration>;
  333042             : 
  333043             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333044             : 
  333045             : 
  333046             :    };
  333047             : #endif
  333048             : 
  333049             : // postdeclarations for SgInterfaceSymbol
  333050             : 
  333051             : /* #line 333052 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333052             : 
  333053             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  333054             : 
  333055             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333056             : 
  333057             : 
  333058             : /* #line 333059 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333059             : 
  333060             : 
  333061             : 
  333062             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333063             : 
  333064             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  333065             : //      This code is automatically generated for each 
  333066             : //      terminal and non-terminal within the defined 
  333067             : //      grammar.  There is a simple way to change the 
  333068             : //      code to fix bugs etc.  See the ROSE README file
  333069             : //      for directions.
  333070             : 
  333071             : // tps: (02/22/2010): Adding DLL export requirements
  333072             : #include "rosedll.h"
  333073             : 
  333074             : // predeclarations for SgCommonSymbol
  333075             : 
  333076             : /* #line 333077 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333077             : 
  333078             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  333079             : 
  333080             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333081             : 
  333082             : #if 1
  333083             : // Class Definition for SgCommonSymbol
  333084             : class ROSE_DLL_API SgCommonSymbol  : public SgSymbol
  333085             :    {
  333086             :      public:
  333087             : 
  333088             : 
  333089             : /* #line 333090 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333090             : 
  333091             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  333092             : // Start of memberFunctionString
  333093             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  333094             : 
  333095             : // *** COMMON CODE SECTION BEGINS HERE ***
  333096             : 
  333097             :     public:
  333098             : 
  333099             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  333100             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  333101             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  333102             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  333103             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  333104             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  333105             : 
  333106             :       /*! \brief returns a string representing the class name */
  333107             :           virtual std::string class_name() const override;
  333108             : 
  333109             :       /*! \brief returns new style SageIII enum values */
  333110             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  333111             : 
  333112             :       /*! \brief static variant value */
  333113             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  333114             :        // static const VariantT static_variant = V_SgCommonSymbol;
  333115             :           enum { static_variant = V_SgCommonSymbol };
  333116             : 
  333117             :        /* the generated cast function */
  333118             :       /*! \brief Casts pointer from base class to derived class */
  333119             :           ROSE_DLL_API friend       SgCommonSymbol* isSgCommonSymbol(       SgNode * s );
  333120             : 
  333121             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  333122             :           ROSE_DLL_API friend const SgCommonSymbol* isSgCommonSymbol( const SgNode * s );
  333123             : 
  333124             :      // ******************************************
  333125             :      // * Memory Pool / New / Delete
  333126             :      // ******************************************
  333127             : 
  333128             :      public:
  333129             :           /// \private
  333130             :           static const unsigned pool_size; //
  333131             :           /// \private
  333132             :           static std::vector<unsigned char *> pools; //
  333133             :           /// \private
  333134             :           static SgCommonSymbol * next_node; // 
  333135             : 
  333136             :           /// \private
  333137             :           static unsigned long initializeStorageClassArray(SgCommonSymbolStorageClass *); //
  333138             : 
  333139             :           /// \private
  333140             :           static void clearMemoryPool(); //
  333141             :           static void deleteMemoryPool(); //
  333142             : 
  333143             :           /// \private
  333144             :           static void extendMemoryPoolForFileIO(); //
  333145             : 
  333146             :           /// \private
  333147             :           static SgCommonSymbol * getPointerFromGlobalIndex(unsigned long); //
  333148             :           /// \private
  333149             :           static SgCommonSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  333150             : 
  333151             :           /// \private
  333152             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  333153             :           /// \private
  333154             :           static void resetValidFreepointers(); //
  333155             :           /// \private
  333156             :           static unsigned long getNumberOfLastValidPointer(); //
  333157             : 
  333158             : 
  333159             : #if defined(INLINE_FUNCTIONS)
  333160             :       /*! \brief returns pointer to newly allocated IR node */
  333161             :           inline void *operator new (size_t size);
  333162             : #else
  333163             :       /*! \brief returns pointer to newly allocated IR node */
  333164             :           void *operator new (size_t size);
  333165             : #endif
  333166             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  333167             :           void operator delete (void* pointer, size_t size);
  333168             : 
  333169             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  333170           0 :           void operator delete (void* pointer)
  333171             :              {
  333172             :             // This is the generated delete operator...
  333173           0 :                SgCommonSymbol::operator delete (pointer,sizeof(SgCommonSymbol));
  333174             :              }
  333175             : 
  333176             :       /*! \brief Returns the total number of IR nodes of this type */
  333177             :           static size_t numberOfNodes();
  333178             : 
  333179             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  333180             :           static size_t memoryUsage();
  333181             : 
  333182             :       // End of scope which started in IR nodes specific code 
  333183             :       /* */
  333184             : 
  333185             :       /* name Internal Functions
  333186             :           \brief Internal functions ... incomplete-documentation
  333187             : 
  333188             :           These functions have been made public as part of the design, but they are suggested for internal use 
  333189             :           or by particularly knowledgeable users for specialized tools or applications.
  333190             : 
  333191             :           \internal We could not make these private because they are required by user for special purposes. And 
  333192             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  333193             :          
  333194             :        */
  333195             : 
  333196             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  333197             :        // overridden in every class by *generated* implementation
  333198             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  333199             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  333200             :        // MS: 06/28/02 container of names of variables or container indices 
  333201             :        // used used in the traversal to access AST successor nodes
  333202             :        // overridden in every class by *generated* implementation
  333203             :       /*! \brief container of names of variables or container indices used used in the traversal
  333204             :           to access AST successor nodes overridden in every class by *generated* implementation */
  333205             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  333206             : 
  333207             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  333208             :        // than all the vector copies. The implementation for these functions is generated for each class.
  333209             :       /*! \brief return number of children in the traversal successor list */
  333210             :           virtual size_t get_numberOfTraversalSuccessors() override;
  333211             :       /*! \brief index-based access to traversal successors by index number */
  333212             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  333213             :       /*! \brief index-based access to traversal successors by child node */
  333214             :           virtual size_t get_childIndex(SgNode *child) override;
  333215             : 
  333216             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  333217             :        // MS: 08/16/2002 method for generating RTI information
  333218             :       /*! \brief return C++ Runtime-Time-Information */
  333219             :           virtual RTIReturnType roseRTI() override;
  333220             : #endif
  333221             :       /* */
  333222             : 
  333223             : 
  333224             : 
  333225             :       /* name Deprecated Functions
  333226             :           \brief Deprecated functions ... incomplete-documentation
  333227             : 
  333228             :           These functions have been deprecated from use.
  333229             :        */
  333230             :       /* */
  333231             : 
  333232             :       /*! returns a C style string (char*) representing the class name */
  333233             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  333234             : 
  333235             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  333236             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  333237             : #if 0
  333238             :       /*! returns old style Sage II enum values */
  333239             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  333240             :       /*! returns old style Sage II enum values */
  333241             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  333242             : #endif
  333243             :       /* */
  333244             : 
  333245             : 
  333246             : 
  333247             : 
  333248             :      public:
  333249             :       /* name Traversal Support Functions
  333250             :           \brief Traversal support functions ... incomplete-documentation
  333251             : 
  333252             :           These functions have been made public as part of the design, but they are suggested for internal use 
  333253             :           or by particularly knowledgable users for specialized tools or applications.
  333254             :        */
  333255             :       /* */
  333256             : 
  333257             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  333258             :        // (inferior to ROSE traversal mechanism, experimental).
  333259             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  333260             :        */
  333261             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  333262             : 
  333263             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  333264             :       /*! \brief support for the classic visitor pattern done in GoF */
  333265             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  333266             : 
  333267             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  333268             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  333269             :        */
  333270             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  333271             : 
  333272             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  333273             :        */
  333274             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  333275             : 
  333276             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  333277             :        // This traversal helps support internal tools that call static member functions.
  333278             :        // note: this function operates on the memory pools.
  333279             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  333280             :        */
  333281             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  333282             :       /* */
  333283             : 
  333284             : 
  333285             :      public:
  333286             :       /* name Memory Allocation Functions
  333287             :           \brief Memory allocations functions ... incomplete-documentation
  333288             : 
  333289             :           These functions have been made public as part of the design, but they are suggested for internal use 
  333290             :           or by particularly knowledgable users for specialized tools or applications.
  333291             :        */
  333292             :       /* */
  333293             : 
  333294             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  333295             : 
  333296             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  333297             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  333298             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  333299             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  333300             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  333301             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  333302             :           being used with the AST File I/O mechanism.
  333303             :        */
  333304             :           virtual bool isInMemoryPool() override;
  333305             : 
  333306             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  333307             : 
  333308             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  333309             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  333310             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  333311             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  333312             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  333313             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  333314             :           being used with the AST File I/O mechanism.
  333315             :        */
  333316             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  333317             : 
  333318             :       // DQ (4/30/2006): Modified to be a const function.
  333319             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  333320             : 
  333321             :           This functions is part of general support for many possible tools to operate 
  333322             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  333323             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  333324             :           less than the set of pointers used by the AST file I/O. This is part of
  333325             :           work implemented by Andreas, and support tools such as the AST graph generation.
  333326             : 
  333327             :           \warning This function can return unexpected data members and thus the 
  333328             :                    order and the number of elements is unpredicable and subject 
  333329             :                    to change.
  333330             : 
  333331             :           \returns STL vector of pairs of SgNode* and strings
  333332             :        */
  333333             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  333334             : 
  333335             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  333336             : 
  333337             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  333338             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  333339             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  333340             : 
  333341             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  333342             :                    and subject to change.
  333343             :        */
  333344             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  333345             : 
  333346             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  333347             : 
  333348             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  333349             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  333350             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  333351             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  333352             : 
  333353             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  333354             : 
  333355             :           \returns long
  333356             :        */
  333357             :           virtual long getChildIndex( SgNode* childNode ) const override;
  333358             : 
  333359             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  333360             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  333361             :       /* \brief Constructor for use by AST File I/O Mechanism
  333362             : 
  333363             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  333364             :           which obtained via fast binary file I/O from disk.
  333365             :        */
  333366             :        // SgCommonSymbol( SgCommonSymbolStorageClass& source );
  333367             : 
  333368             : 
  333369             : 
  333370             : 
  333371             : 
  333372             :  // JH (10/24/2005): methods added to support the ast file IO
  333373             :     private:
  333374             : 
  333375             :       /* name AST Memory Allocation Support Functions
  333376             :           \brief Memory allocations support....
  333377             : 
  333378             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  333379             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  333380             :           and support the AST File I/O Mechanism.
  333381             :        */
  333382             :       /* */
  333383             : 
  333384             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  333385             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  333386             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  333387             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  333388             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  333389             :           a correspinding one in the AST_FILE_IO class!
  333390             :        */
  333391             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  333392             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  333393             :       /* \brief Typedef used for low level memory access.
  333394             :        */
  333395             :        // typedef unsigned char* TestType;
  333396             : 
  333397             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  333398             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  333399             :       /* \brief Typedef used to hold memory addresses as values.
  333400             :        */
  333401             :        // typedef unsigned long  AddressType;
  333402             : 
  333403             : 
  333404             : 
  333405             :        // necessary, to have direct access to the p_freepointer and the private methods !
  333406             :       /*! \brief friend class declaration to support AST File I/O */
  333407             :           friend class AST_FILE_IO;
  333408             : 
  333409             :       /*! \brief friend class declaration to support AST File I/O */
  333410             :           friend class SgCommonSymbolStorageClass;
  333411             : 
  333412             :       /*! \brief friend class declaration to support AST File I/O */
  333413             :           friend class AstSpecificDataManagingClass;
  333414             : 
  333415             :       /*! \brief friend class declaration to support AST File I/O */
  333416             :           friend class AstSpecificDataManagingClassStorageClass;
  333417             :     public:
  333418             :       /*! \brief IR node constructor to support AST File I/O */
  333419             :           SgCommonSymbol( const SgCommonSymbolStorageClass& source );
  333420             : 
  333421             :  // private: // JJW hack
  333422             :        /*
  333423             :           name AST Memory Allocation Support Variables
  333424             :           Memory allocations support variables 
  333425             : 
  333426             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  333427             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  333428             :           and support the AST File I/O Mechanism.
  333429             :        */
  333430             :       /* */
  333431             : 
  333432             :     public:
  333433             : 
  333434             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  333435             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  333436             :       // virtual SgNode* addRegExpAttribute();
  333437             :       /*! \brief Support for AST matching using regular expression.
  333438             : 
  333439             :           This support is incomplete and the subject of current research to define 
  333440             :           RegEx trees to support inexact matching.
  333441             :        */
  333442             :           SgCommonSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  333443             : 
  333444             : // *** COMMON CODE SECTION ENDS HERE ***
  333445             : 
  333446             : 
  333447             : // End of memberFunctionString
  333448             : // Start of memberFunctionString
  333449             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  333450             : 
  333451             :      // the generated cast function
  333452             :      // friend ROSE_DLL_API SgCommonSymbol* isSgCommonSymbol ( SgNode* s );
  333453             : 
  333454             :           typedef SgSymbol base_node_type;
  333455             : 
  333456             : 
  333457             : // End of memberFunctionString
  333458             : // Start of memberFunctionString
  333459             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  333460             : 
  333461             :           SgName get_name() const override;
  333462             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  333463             : 
  333464             : 
  333465             : // End of memberFunctionString
  333466             : // Start of memberFunctionString
  333467             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  333468             : 
  333469             :        // DQ (3/23/2017): ROSETTA macro expansion
  333470             :           SgType* get_type() const override;
  333471             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  333472             : 
  333473             : 
  333474             : // End of memberFunctionString
  333475             : 
  333476             :      public: 
  333477             :          SgInitializedName* get_declaration() const;
  333478             :          void set_declaration(SgInitializedName* declaration);
  333479             : 
  333480             : 
  333481             :      public: 
  333482             :          virtual ~SgCommonSymbol();
  333483             : 
  333484             : 
  333485             :      public: 
  333486             :          SgCommonSymbol(SgInitializedName* declaration = NULL); 
  333487             : 
  333488             :     protected:
  333489             : // Start of memberFunctionString
  333490             : SgInitializedName* p_declaration;
  333491             :           
  333492             : // End of memberFunctionString
  333493             : 
  333494             :     friend struct Rose::Traits::generated::describe_node_t<SgCommonSymbol>;
  333495             :     friend struct Rose::Traits::generated::describe_field_t<SgCommonSymbol, SgInitializedName*,&SgCommonSymbol::p_declaration>;
  333496             : 
  333497             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333498             : 
  333499             : 
  333500             :    };
  333501             : #endif
  333502             : 
  333503             : // postdeclarations for SgCommonSymbol
  333504             : 
  333505             : /* #line 333506 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333506             : 
  333507             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  333508             : 
  333509             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333510             : 
  333511             : 
  333512             : /* #line 333513 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333513             : 
  333514             : 
  333515             : 
  333516             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333517             : 
  333518             : // WARNING -- GENERATED CODE -- DO NOT MODIFY THIS CODE -- WARNING!
  333519             : //      This code is automatically generated for each 
  333520             : //      terminal and non-terminal within the defined 
  333521             : //      grammar.  There is a simple way to change the 
  333522             : //      code to fix bugs etc.  See the ROSE README file
  333523             : //      for directions.
  333524             : 
  333525             : // tps: (02/22/2010): Adding DLL export requirements
  333526             : #include "rosedll.h"
  333527             : 
  333528             : // predeclarations for SgAliasSymbol
  333529             : 
  333530             : /* #line 333531 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333531             : 
  333532             : /* #line 13 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $PREDECLARATIONS" */
  333533             : 
  333534             : /* #line 14 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  333535             : 
  333536             : #if 1
  333537             : // Class Definition for SgAliasSymbol
  333538             : class ROSE_DLL_API SgAliasSymbol  : public SgSymbol
  333539             :    {
  333540             :      public:
  333541             : 
  333542             : 
  333543             : /* #line 333544 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  333544             : 
  333545             :           virtual SgNode* copy ( SgCopyHelp& help) const override;
  333546             : // Start of memberFunctionString
  333547             : /* #line 90 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  333548             : 
  333549             :        // SgName  get_name() const;
  333550             :        // SgType* get_type() const;
  333551             :        // SgNode* get_symbol_basis() const;
  333552             : 
  333553             :        // DQ (2/28/2015): Added copy constructor to make sure that the causal_nodes is preserved across copies.
  333554             :           SgAliasSymbol( const SgAliasSymbol & X );
  333555             : 
  333556             :        // DQ (2/28/2015): Add this function so that we can check and for alias of SgAliasSymbol.
  333557             :           void post_construction_initialization() override;
  333558             : 
  333559             :       //! For a chain of aliased symbols, this function returns the last (non-aliased) symbol.
  333560             :           SgSymbol* get_base() const;
  333561             : 
  333562             :       //! Where possible extract the declaration from the aliased symbol
  333563             :           SgDeclarationStatement* get_declaration() const;
  333564             : 
  333565             : 
  333566             : // End of memberFunctionString
  333567             : // Start of memberFunctionString
  333568             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Common.code" */
  333569             : 
  333570             : // *** COMMON CODE SECTION BEGINS HERE ***
  333571             : 
  333572             :     public:
  333573             : 
  333574             :        // DQ (3/25/3006): I put this back in because it had the logic for where the copy function required 
  333575             :        // and not required which is required to match the other aspects of the copy mechanism code generation.
  333576             :        // Specifically it is a problem to declare the copy function everywhere because it is not implemented 
  333577             :        // for the SgSymbol IR nodes. I'm not clear why it is not implemented for these IR nodes.
  333578             :        /* \brief Copies AST (whole subtree, depending on the SgCopyHelp class */
  333579             :        // virtual SgNode* copy ( const SgCopyHelp & help) const;
  333580             : 
  333581             :       /*! \brief returns a string representing the class name */
  333582             :           virtual std::string class_name() const override;
  333583             : 
  333584             :       /*! \brief returns new style SageIII enum values */
  333585             :           virtual VariantT variantT() const override; // MS: new variant used in tree traversal
  333586             : 
  333587             :       /*! \brief static variant value */
  333588             :        // King84 (2010.08.16): Moved this to an enum to save space, since it's only used at compiler-time anyway.
  333589             :        // static const VariantT static_variant = V_SgAliasSymbol;
  333590             :           enum { static_variant = V_SgAliasSymbol };
  333591             : 
  333592             :        /* the generated cast function */
  333593             :       /*! \brief Casts pointer from base class to derived class */
  333594             :           ROSE_DLL_API friend       SgAliasSymbol* isSgAliasSymbol(       SgNode * s );
  333595             : 
  333596             :       /*! \brief Casts pointer from base class to derived class (for const pointers) */
  333597             :           ROSE_DLL_API friend const SgAliasSymbol* isSgAliasSymbol( const SgNode * s );
  333598             : 
  333599             :      // ******************************************
  333600             :      // * Memory Pool / New / Delete
  333601             :      // ******************************************
  333602             : 
  333603             :      public:
  333604             :           /// \private
  333605             :           static const unsigned pool_size; //
  333606             :           /// \private
  333607             :           static std::vector<unsigned char *> pools; //
  333608             :           /// \private
  333609             :           static SgAliasSymbol * next_node; // 
  333610             : 
  333611             :           /// \private
  333612             :           static unsigned long initializeStorageClassArray(SgAliasSymbolStorageClass *); //
  333613             : 
  333614             :           /// \private
  333615             :           static void clearMemoryPool(); //
  333616             :           static void deleteMemoryPool(); //
  333617             : 
  333618             :           /// \private
  333619             :           static void extendMemoryPoolForFileIO(); //
  333620             : 
  333621             :           /// \private
  333622             :           static SgAliasSymbol * getPointerFromGlobalIndex(unsigned long); //
  333623             :           /// \private
  333624             :           static SgAliasSymbol * getPointerFromGlobalIndex(AstSpecificDataManagingClass *, unsigned long); //
  333625             : 
  333626             :           /// \private
  333627             :           static unsigned long getNumberOfValidNodesAndSetGlobalIndexInFreepointer(unsigned long); //
  333628             :           /// \private
  333629             :           static void resetValidFreepointers(); //
  333630             :           /// \private
  333631             :           static unsigned long getNumberOfLastValidPointer(); //
  333632             : 
  333633             : 
  333634             : #if defined(INLINE_FUNCTIONS)
  333635             :       /*! \brief returns pointer to newly allocated IR node */
  333636             :           inline void *operator new (size_t size);
  333637             : #else
  333638             :       /*! \brief returns pointer to newly allocated IR node */
  333639             :           void *operator new (size_t size);
  333640             : #endif
  333641             :       /*! \brief deallocated memory for IR node (returns memory to memory pool for reuse) */
  333642             :           void operator delete (void* pointer, size_t size);
  333643             : 
  333644             :        // DQ (4/5/2007): This is not the correct operator that we want, but appears to be required to compile ROSE with ROSE.
  333645       34691 :           void operator delete (void* pointer)
  333646             :              {
  333647             :             // This is the generated delete operator...
  333648       34691 :                SgAliasSymbol::operator delete (pointer,sizeof(SgAliasSymbol));
  333649             :              }
  333650             : 
  333651             :       /*! \brief Returns the total number of IR nodes of this type */
  333652             :           static size_t numberOfNodes();
  333653             : 
  333654             :       /*! \brief Returns the size in bytes of the total memory allocated for all IR nodes of this type */
  333655             :           static size_t memoryUsage();
  333656             : 
  333657             :       // End of scope which started in IR nodes specific code 
  333658             :       /* */
  333659             : 
  333660             :       /* name Internal Functions
  333661             :           \brief Internal functions ... incomplete-documentation
  333662             : 
  333663             :           These functions have been made public as part of the design, but they are suggested for internal use 
  333664             :           or by particularly knowledgeable users for specialized tools or applications.
  333665             : 
  333666             :           \internal We could not make these private because they are required by user for special purposes. And 
  333667             :               it would be unwieldy to have many of the internal classes in ROSE be explicitly defined as friends.
  333668             :          
  333669             :        */
  333670             : 
  333671             :        // MS: 02/12/02 container of pointers to AST successor nodes used in the traversal
  333672             :        // overridden in every class by *generated* implementation
  333673             :       /*! \brief container of pointers to AST successor nodes used in the traversal overridden in every class by *generated* implementation */
  333674             :           virtual std::vector<SgNode*> get_traversalSuccessorContainer() override;
  333675             :        // MS: 06/28/02 container of names of variables or container indices 
  333676             :        // used used in the traversal to access AST successor nodes
  333677             :        // overridden in every class by *generated* implementation
  333678             :       /*! \brief container of names of variables or container indices used used in the traversal
  333679             :           to access AST successor nodes overridden in every class by *generated* implementation */
  333680             :           virtual std::vector<std::string> get_traversalSuccessorNamesContainer() override;
  333681             : 
  333682             :        // GB (09/25/2007): Functions for index-based access to traversal successors; these are hopefully a lot faster
  333683             :        // than all the vector copies. The implementation for these functions is generated for each class.
  333684             :       /*! \brief return number of children in the traversal successor list */
  333685             :           virtual size_t get_numberOfTraversalSuccessors() override;
  333686             :       /*! \brief index-based access to traversal successors by index number */
  333687             :           virtual SgNode *get_traversalSuccessorByIndex(size_t idx) override;
  333688             :       /*! \brief index-based access to traversal successors by child node */
  333689             :           virtual size_t get_childIndex(SgNode *child) override;
  333690             : 
  333691             : #ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
  333692             :        // MS: 08/16/2002 method for generating RTI information
  333693             :       /*! \brief return C++ Runtime-Time-Information */
  333694             :           virtual RTIReturnType roseRTI() override;
  333695             : #endif
  333696             :       /* */
  333697             : 
  333698             : 
  333699             : 
  333700             :       /* name Deprecated Functions
  333701             :           \brief Deprecated functions ... incomplete-documentation
  333702             : 
  333703             :           These functions have been deprecated from use.
  333704             :        */
  333705             :       /* */
  333706             : 
  333707             :       /*! returns a C style string (char*) representing the class name */
  333708             :           virtual const char* sage_class_name() const  override ROSE_DEPRECATED_FUNCTION;
  333709             : 
  333710             :       // JJW (10/16/2008): Changed to a single function in Node.code, and put
  333711             :       // getVariant() in #if 0 block to prevent confusing Doxygen
  333712             : #if 0
  333713             :       /*! returns old style Sage II enum values */
  333714             :           virtual int variant() const ROSE_DEPRECATED_FUNCTION;
  333715             :       /*! returns old style Sage II enum values */
  333716             :        // virtual int getVariant() const ROSE_DEPRECATED_FUNCTION;
  333717             : #endif
  333718             :       /* */
  333719             : 
  333720             : 
  333721             : 
  333722             : 
  333723             :      public:
  333724             :       /* name Traversal Support Functions
  333725             :           \brief Traversal support functions ... incomplete-documentation
  333726             : 
  333727             :           These functions have been made public as part of the design, but they are suggested for internal use 
  333728             :           or by particularly knowledgable users for specialized tools or applications.
  333729             :        */
  333730             :       /* */
  333731             : 
  333732             :        // DQ (11/26/2005): Support for visitor pattern mechanims
  333733             :        // (inferior to ROSE traversal mechanism, experimental).
  333734             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  333735             :        */
  333736             :           void executeVisitorMemberFunction (ROSE_VisitorPattern & visitor);
  333737             : 
  333738             :       /* DXN (08/09/2010): support for the classic visitor pattern done in GoF */
  333739             :       /*! \brief support for the classic visitor pattern done in GoF */
  333740             :           virtual void accept (ROSE_VisitorPattern & visitor) override;
  333741             : 
  333742             :        // DQ (12/26/2005): Support for traversal based on the memory pool
  333743             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern over all IR nodes by type of IR node.
  333744             :        */
  333745             :           static void traverseMemoryPoolNodes(ROSE_VisitTraversal & visit);
  333746             : 
  333747             :       /*! \brief \b FOR \b INTERNAL \b USE Support for visitor pattern.
  333748             :        */
  333749             :           static void traverseMemoryPoolVisitorPattern(ROSE_VisitorPattern & visitor);
  333750             : 
  333751             :        // DQ (2/9/2006): Added to support traversal over single representative of each IR node
  333752             :        // This traversal helps support internal tools that call static member functions.
  333753             :        // note: this function operates on the memory pools.
  333754             :       /*! \brief \b FOR \b INTERNAL \b USE Support for type-based traversal.
  333755             :        */
  333756             :           static void visitRepresentativeNode (ROSE_VisitTraversal & visit);
  333757             :       /* */
  333758             : 
  333759             : 
  333760             :      public:
  333761             :       /* name Memory Allocation Functions
  333762             :           \brief Memory allocations functions ... incomplete-documentation
  333763             : 
  333764             :           These functions have been made public as part of the design, but they are suggested for internal use 
  333765             :           or by particularly knowledgable users for specialized tools or applications.
  333766             :        */
  333767             :       /* */
  333768             : 
  333769             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  333770             : 
  333771             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  333772             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  333773             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  333774             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  333775             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  333776             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  333777             :           being used with the AST File I/O mechanism.
  333778             :        */
  333779             :           virtual bool isInMemoryPool() override;
  333780             : 
  333781             :       /*! \brief \b FOR \b INTERNAL \b USE This is used in internal tests to verify that all IR nodes are allocated from the heap.
  333782             : 
  333783             :           The AST File I/O depends upon the allocation of IR nodes being from the heap, stack based or global IR nodes should
  333784             :           not appear in the AST if it will be written out to a file and read back in.  To enforce this concept, this function
  333785             :           implements a test to verify that the IR node can be found on the heap and is part of a larger test of the whole AST.
  333786             :           This test must pass before the AST can be written out to a file.  This is part of a compromise in the design of the 
  333787             :           AST File I/O to support binary streaming of data to files; for performance.  It is also rather difficult, but possible, 
  333788             :           to build a useful AST with IR nodes allocated on the stack or frm global scope, this test filters out such cased from
  333789             :           being used with the AST File I/O mechanism.
  333790             :        */
  333791             :           virtual void checkDataMemberPointersIfInMemoryPool() override;
  333792             : 
  333793             :       // DQ (4/30/2006): Modified to be a const function.
  333794             :       /*! \brief \b FOR \b INTERNAL \b USE Returns STL vector of pairs of SgNode* and strings for use in AST tools
  333795             : 
  333796             :           This functions is part of general support for many possible tools to operate 
  333797             :           on the AST.  The forms a list of ALL IR node pointers used by each IR node,
  333798             :           and is a supperset of the get_traversalSuccessorContainer().  It is (I think)
  333799             :           less than the set of pointers used by the AST file I/O. This is part of
  333800             :           work implemented by Andreas, and support tools such as the AST graph generation.
  333801             : 
  333802             :           \warning This function can return unexpected data members and thus the 
  333803             :                    order and the number of elements is unpredicable and subject 
  333804             :                    to change.
  333805             : 
  333806             :           \returns STL vector of pairs of SgNode* and strings
  333807             :        */
  333808             :           virtual std::vector<std::pair<SgNode*,std::string> > returnDataMemberPointers() const override;
  333809             : 
  333810             :       /*! \brief \b FOR \b INTERNAL \b USE Processes pairs of references to SgNode* and strings for use in AST tools
  333811             : 
  333812             :           This functions similar to returnDataMemberPointers() except that it passes references to a handler object.
  333813             :           As a result there is FAR more damage that can be done by using this function, but it is type-safe.
  333814             :           This is provided for support of internal tools that operate on the AST, e.g the AST Merge mechanism.
  333815             : 
  333816             :           \warning This function can return unexpected data members and thus the order and the number of elements is unpredicable 
  333817             :                    and subject to change.
  333818             :        */
  333819             :           virtual void processDataMemberReferenceToPointers(ReferenceToPointerHandler*) override;
  333820             : 
  333821             :       /*! \brief \b FOR \b INTERNAL \b USE Returns a unique index value for the childNode in the list of children at this IR node.
  333822             : 
  333823             :           This function returns a unique value for the input \b childNode in set of children at this IR node. Note
  333824             :           that a negative value indicates that the input node is not a child.  This is the basis for the implementation
  333825             :           of the isChild(SgNode*) member function.  Data members that are NULL in the IR node are counted internally
  333826             :           (so that this function returns value that could be statically defined, and so are not dynamically determined).
  333827             : 
  333828             :           \warning The mapping on children to integer values could change from release to release of ROSE.
  333829             : 
  333830             :           \returns long
  333831             :        */
  333832             :           virtual long getChildIndex( SgNode* childNode ) const override;
  333833             : 
  333834             :       // DQ (9/2/2015): Since this function is generated by ROSETTA, we can't define the 
  333835             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  333836             :       /* \brief Constructor for use by AST File I/O Mechanism
  333837             : 
  333838             :           This constructor permits the IR node to be rebuilt from the contiguously arranged data in memory 
  333839             :           which obtained via fast binary file I/O from disk.
  333840             :        */
  333841             :        // SgAliasSymbol( SgAliasSymbolStorageClass& source );
  333842             : 
  333843             : 
  333844             : 
  333845             : 
  333846             : 
  333847             :  // JH (10/24/2005): methods added to support the ast file IO
  333848             :     private:
  333849             : 
  333850             :       /* name AST Memory Allocation Support Functions
  333851             :           \brief Memory allocations support....
  333852             : 
  333853             :           These functions handle the low leve support of the memory allocation scheme which permits IR nodes to be allocated 
  333854             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  333855             :           and support the AST File I/O Mechanism.
  333856             :        */
  333857             :       /* */
  333858             : 
  333859             :        /* JH (10/24/2005): Two typedefs. The TestType notes the type every pointer is cast to before
  333860             :           we compare them. Since I had several problems with this, I decided to make a typdef to ensure
  333861             :           that I use the same type everywhere, if any changes are made. THe second one declares the type
  333862             :           (actually unsigned long) where teh pointer address gets converted to. On 64 bit platforms this
  333863             :           might got changed, but unfortunatly, the return types are still unsigned longs. There exists
  333864             :           a correspinding one in the AST_FILE_IO class!
  333865             :        */
  333866             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  333867             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  333868             :       /* \brief Typedef used for low level memory access.
  333869             :        */
  333870             :        // typedef unsigned char* TestType;
  333871             : 
  333872             :       // DQ (9/2/2015): This typedef is no longer used, we can't define the 
  333873             :       // comment here (changed to be a C style comment and not be a doxygen comment).
  333874             :       /* \brief Typedef used to hold memory addresses as values.
  333875             :        */
  333876             :        // typedef unsigned long  AddressType;
  333877             : 
  333878             : 
  333879             : 
  333880             :        // necessary, to have direct access to the p_freepointer and the private methods !
  333881             :       /*! \brief friend class declaration to support AST File I/O */
  333882             :           friend class AST_FILE_IO;
  333883             : 
  333884             :       /*! \brief friend class declaration to support AST File I/O */
  333885             :           friend class SgAliasSymbolStorageClass;
  333886             : 
  333887             :       /*! \brief friend class declaration to support AST File I/O */
  333888             :           friend class AstSpecificDataManagingClass;
  333889             : 
  333890             :       /*! \brief friend class declaration to support AST File I/O */
  333891             :           friend class AstSpecificDataManagingClassStorageClass;
  333892             :     public:
  333893             :       /*! \brief IR node constructor to support AST File I/O */
  333894             :           SgAliasSymbol( const SgAliasSymbolStorageClass& source );
  333895             : 
  333896             :  // private: // JJW hack
  333897             :        /*
  333898             :           name AST Memory Allocation Support Variables
  333899             :           Memory allocations support variables 
  333900             : 
  333901             :           These variables handle the low level support of the memory allocation scheme which permits IR nodes to be allocated 
  333902             :           in large contiguous blocks to reduce memory fragmentation, improve performance, support specialized access (AST traversals),
  333903             :           and support the AST File I/O Mechanism.
  333904             :        */
  333905             :       /* */
  333906             : 
  333907             :     public:
  333908             : 
  333909             :       // DQ (11/21/2009): Added function to add new Regular Expression attributes and return pointer 
  333910             :       // to current node (so that it will work cleanly with build functions to specify patterns).
  333911             :       // virtual SgNode* addRegExpAttribute();
  333912             :       /*! \brief Support for AST matching using regular expression.
  333913             : 
  333914             :           This support is incomplete and the subject of current research to define 
  333915             :           RegEx trees to support inexact matching.
  333916             :        */
  333917             :           SgAliasSymbol* addRegExpAttribute(std::string s, AstRegExAttribute* a);
  333918             : 
  333919             : // *** COMMON CODE SECTION ENDS HERE ***
  333920             : 
  333921             : 
  333922             : // End of memberFunctionString
  333923             : // Start of memberFunctionString
  333924             : /* #line 1649 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Node.code" */
  333925             : 
  333926             :      // the generated cast function
  333927             :      // friend ROSE_DLL_API SgAliasSymbol* isSgAliasSymbol ( SgNode* s );
  333928             : 
  333929             :           typedef SgSymbol base_node_type;
  333930             : 
  333931             : 
  333932             : // End of memberFunctionString
  333933             : // Start of memberFunctionString
  333934             : /* #line 47 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  333935             : 
  333936             :           SgName get_name() const override;
  333937             :           SgNode* get_symbol_basis() const override; // from GET_NAME
  333938             : 
  333939             : 
  333940             : // End of memberFunctionString
  333941             : // Start of memberFunctionString
  333942             : /* #line 41 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Symbol.code" */
  333943             : 
  333944             :        // DQ (3/23/2017): ROSETTA macro expansion
  333945             :           SgType* get_type() const override;
  333946             :        // SgNode* get_symbol_basis() const; // from GET_TYPE
  333947             : 
  333948             : 
  333949             : // End of memberFunctionString
  333950             : 
  333951             :      public: 
  333952             :          SgSymbol* get_alias() const;
  333953             :          void set_alias(SgSymbol* alias);
  333954             : 
  333955             :      public: 
  333956             :          bool get_isRenamed() const;
  333957             :          void set_isRenamed(bool isRenamed);
  333958             : 
  333959             :      public: 
  333960             :          SgName get_new_name() const;
  333961             :          void set_new_name(SgName new_name);
  333962             : 
  333963             :      public: 
  333964             :          const SgNodePtrList&  get_causal_nodes() const;
  333965             :          SgNodePtrList& get_causal_nodes(); 
  333966             : 
  333967             : 
  333968             :      public: 
  333969             :          virtual ~SgAliasSymbol();
  333970             : 
  333971             : 
  333972             :      public: 
  333973             :          SgAliasSymbol(SgSymbol* alias = NULL, bool isRenamed = false, SgName new_name = ""); 
  333974             : 
  333975             :     protected:
  333976             : // Start of memberFunctionString
  333977             : SgSymbol* p_alias;
  333978             :           
  333979             : // End of memberFunctionString
  333980             : // Start of memberFunctionString
  333981             : bool p_isRenamed;
  333982             :           
  333983             : // End of memberFunctionString
  333984             : // Start of memberFunctionString
  333985             : SgName p_new_name;
  333986             :           
  333987             : // End of memberFunctionString
  333988             : // Start of memberFunctionString
  333989             : SgNodePtrList p_causal_nodes;
  333990             :           
  333991             : // End of memberFunctionString
  333992             : 
  333993             :     friend struct Rose::Traits::generated::describe_node_t<SgAliasSymbol>;
  333994             :     friend struct Rose::Traits::generated::describe_field_t<SgAliasSymbol, SgSymbol*,&SgAliasSymbol::p_alias>;
  333995             :     friend struct Rose::Traits::generated::describe_field_t<SgAliasSymbol, bool,&SgAliasSymbol::p_isRenamed>;
  333996             :     friend struct Rose::Traits::generated::describe_field_t<SgAliasSymbol, SgName,&SgAliasSymbol::p_new_name>;
  333997             :     friend struct Rose::Traits::generated::describe_field_t<SgAliasSymbol, SgNodePtrList,&SgAliasSymbol::p_causal_nodes>;
  333998             : 
  333999             : /* #line 21 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  334000             : 
  334001             : 
  334002             :    };
  334003             : #endif
  334004             : 
  334005             : // postdeclarations for SgAliasSymbol
  334006             : 
  334007             : /* #line 334008 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  334008             : 
  334009             : /* #line 27 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro after subst for $POSTDECLARATIONS" */
  334010             : 
  334011             : /* #line 28 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/grammarClassDeclarationMacros.macro" */
  334012             : 
  334013             : 
  334014             : /* #line 334015 "../../../src/frontend/SageIII//Cxx_Grammar.h" */
  334015             : 
  334016             : 
  334017             : #endif // endif for ifdef ROSE_USING_SMALL_GENERATED_HEADER_FILES
  334018             : #ifndef SWIG 
  334019             : 
  334020         194 : class ROSE_VisitorPattern  {
  334021             : public:
  334022         194 :     virtual ~ROSE_VisitorPattern() {};
  334023           0 :           virtual void visit(SgName *variable_SgName) { visitDefault(variable_SgName); }
  334024     3750340 :           virtual void visit(SgSymbolTable *variable_SgSymbolTable) { visitDefault(variable_SgSymbolTable); }
  334025       13512 :           virtual void visit(SgPragma *variable_SgPragma) { visitDefault(variable_SgPragma); }
  334026           0 :           virtual void visit(SgModifierNodes *variable_SgModifierNodes) { visitDefault(variable_SgModifierNodes); }
  334027           0 :           virtual void visit(SgConstVolatileModifier *variable_SgConstVolatileModifier) { visitDefault(variable_SgConstVolatileModifier); }
  334028     6131590 :           virtual void visit(SgStorageModifier *variable_SgStorageModifier) { visitDefault(variable_SgStorageModifier); }
  334029           0 :           virtual void visit(SgAccessModifier *variable_SgAccessModifier) { visitDefault(variable_SgAccessModifier); }
  334030           0 :           virtual void visit(SgFunctionModifier *variable_SgFunctionModifier) { visitDefault(variable_SgFunctionModifier); }
  334031           0 :           virtual void visit(SgUPC_AccessModifier *variable_SgUPC_AccessModifier) { visitDefault(variable_SgUPC_AccessModifier); }
  334032           0 :           virtual void visit(SgLinkageModifier *variable_SgLinkageModifier) { visitDefault(variable_SgLinkageModifier); }
  334033           0 :           virtual void visit(SgSpecialFunctionModifier *variable_SgSpecialFunctionModifier) { visitDefault(variable_SgSpecialFunctionModifier); }
  334034           0 :           virtual void visit(SgTypeModifier *variable_SgTypeModifier) { visitDefault(variable_SgTypeModifier); }
  334035           0 :           virtual void visit(SgElaboratedTypeModifier *variable_SgElaboratedTypeModifier) { visitDefault(variable_SgElaboratedTypeModifier); }
  334036       85560 :           virtual void visit(SgBaseClassModifier *variable_SgBaseClassModifier) { visitDefault(variable_SgBaseClassModifier); }
  334037           0 :           virtual void visit(SgDeclarationModifier *variable_SgDeclarationModifier) { visitDefault(variable_SgDeclarationModifier); }
  334038           0 :           virtual void visit(SgStructureModifier *variable_SgStructureModifier) { visitDefault(variable_SgStructureModifier); }
  334039           0 :           virtual void visit(SgOpenclAccessModeModifier *variable_SgOpenclAccessModeModifier) { visitDefault(variable_SgOpenclAccessModeModifier); }
  334040           0 :           virtual void visit(SgModifier *variable_SgModifier) { visitDefault(variable_SgModifier); }
  334041    70392000 :           virtual void visit(Sg_File_Info *variable_Sg_File_Info) { visitDefault(variable_Sg_File_Info); }
  334042       23799 :           virtual void visit(SgSourceFile *variable_SgSourceFile) { visitDefault(variable_SgSourceFile); }
  334043           0 :           virtual void visit(SgUnknownFile *variable_SgUnknownFile) { visitDefault(variable_SgUnknownFile); }
  334044           0 :           virtual void visit(SgFile *variable_SgFile) { visitDefault(variable_SgFile); }
  334045         194 :           virtual void visit(SgFileList *variable_SgFileList) { visitDefault(variable_SgFileList); }
  334046           0 :           virtual void visit(SgDirectory *variable_SgDirectory) { visitDefault(variable_SgDirectory); }
  334047         194 :           virtual void visit(SgDirectoryList *variable_SgDirectoryList) { visitDefault(variable_SgDirectoryList); }
  334048         194 :           virtual void visit(SgProject *variable_SgProject) { visitDefault(variable_SgProject); }
  334049           0 :           virtual void visit(SgOptions *variable_SgOptions) { visitDefault(variable_SgOptions); }
  334050           0 :           virtual void visit(SgUnparse_Info *variable_SgUnparse_Info) { visitDefault(variable_SgUnparse_Info); }
  334051       27298 :           virtual void visit(SgIncludeFile *variable_SgIncludeFile) { visitDefault(variable_SgIncludeFile); }
  334052           0 :           virtual void visit(SgFuncDecl_attr *variable_SgFuncDecl_attr) { visitDefault(variable_SgFuncDecl_attr); }
  334053           0 :           virtual void visit(SgClassDecl_attr *variable_SgClassDecl_attr) { visitDefault(variable_SgClassDecl_attr); }
  334054     2202800 :           virtual void visit(SgTypedefSeq *variable_SgTypedefSeq) { visitDefault(variable_SgTypedefSeq); }
  334055     1115420 :           virtual void visit(SgFunctionParameterTypeList *variable_SgFunctionParameterTypeList) { visitDefault(variable_SgFunctionParameterTypeList); }
  334056      300839 :           virtual void visit(SgTemplateParameter *variable_SgTemplateParameter) { visitDefault(variable_SgTemplateParameter); }
  334057      935333 :           virtual void visit(SgTemplateArgument *variable_SgTemplateArgument) { visitDefault(variable_SgTemplateArgument); }
  334058           0 :           virtual void visit(SgTemplateParameterList *variable_SgTemplateParameterList) { visitDefault(variable_SgTemplateParameterList); }
  334059           0 :           virtual void visit(SgTemplateArgumentList *variable_SgTemplateArgumentList) { visitDefault(variable_SgTemplateArgumentList); }
  334060           0 :           virtual void visit(SgBitAttribute *variable_SgBitAttribute) { visitDefault(variable_SgBitAttribute); }
  334061           0 :           virtual void visit(SgAttribute *variable_SgAttribute) { visitDefault(variable_SgAttribute); }
  334062           0 :           virtual void visit(SgExpBaseClass *variable_SgExpBaseClass) { visitDefault(variable_SgExpBaseClass); }
  334063       27544 :           virtual void visit(SgNonrealBaseClass *variable_SgNonrealBaseClass) { visitDefault(variable_SgNonrealBaseClass); }
  334064       58016 :           virtual void visit(SgBaseClass *variable_SgBaseClass) { visitDefault(variable_SgBaseClass); }
  334065           0 :           virtual void visit(SgUndirectedGraphEdge *variable_SgUndirectedGraphEdge) { visitDefault(variable_SgUndirectedGraphEdge); }
  334066           0 :           virtual void visit(SgDirectedGraphEdge *variable_SgDirectedGraphEdge) { visitDefault(variable_SgDirectedGraphEdge); }
  334067           0 :           virtual void visit(SgGraphNode *variable_SgGraphNode) { visitDefault(variable_SgGraphNode); }
  334068           0 :           virtual void visit(SgGraphEdge *variable_SgGraphEdge) { visitDefault(variable_SgGraphEdge); }
  334069           0 :           virtual void visit(SgStringKeyedBidirectionalGraph *variable_SgStringKeyedBidirectionalGraph) { visitDefault(variable_SgStringKeyedBidirectionalGraph); }
  334070           0 :           virtual void visit(SgIntKeyedBidirectionalGraph *variable_SgIntKeyedBidirectionalGraph) { visitDefault(variable_SgIntKeyedBidirectionalGraph); }
  334071           0 :           virtual void visit(SgBidirectionalGraph *variable_SgBidirectionalGraph) { visitDefault(variable_SgBidirectionalGraph); }
  334072           0 :           virtual void visit(SgIncidenceDirectedGraph *variable_SgIncidenceDirectedGraph) { visitDefault(variable_SgIncidenceDirectedGraph); }
  334073           0 :           virtual void visit(SgIncidenceUndirectedGraph *variable_SgIncidenceUndirectedGraph) { visitDefault(variable_SgIncidenceUndirectedGraph); }
  334074           0 :           virtual void visit(SgGraph *variable_SgGraph) { visitDefault(variable_SgGraph); }
  334075           0 :           virtual void visit(SgGraphNodeList *variable_SgGraphNodeList) { visitDefault(variable_SgGraphNodeList); }
  334076           0 :           virtual void visit(SgGraphEdgeList *variable_SgGraphEdgeList) { visitDefault(variable_SgGraphEdgeList); }
  334077           0 :           virtual void visit(SgQualifiedName *variable_SgQualifiedName) { visitDefault(variable_SgQualifiedName); }
  334078           0 :           virtual void visit(SgNameGroup *variable_SgNameGroup) { visitDefault(variable_SgNameGroup); }
  334079           0 :           virtual void visit(SgDimensionObject *variable_SgDimensionObject) { visitDefault(variable_SgDimensionObject); }
  334080           0 :           virtual void visit(SgDataStatementGroup *variable_SgDataStatementGroup) { visitDefault(variable_SgDataStatementGroup); }
  334081           0 :           virtual void visit(SgDataStatementObject *variable_SgDataStatementObject) { visitDefault(variable_SgDataStatementObject); }
  334082           0 :           virtual void visit(SgDataStatementValue *variable_SgDataStatementValue) { visitDefault(variable_SgDataStatementValue); }
  334083           0 :           virtual void visit(SgFormatItem *variable_SgFormatItem) { visitDefault(variable_SgFormatItem); }
  334084           0 :           virtual void visit(SgFormatItemList *variable_SgFormatItemList) { visitDefault(variable_SgFormatItemList); }
  334085     1875170 :           virtual void visit(SgTypeTable *variable_SgTypeTable) { visitDefault(variable_SgTypeTable); }
  334086           0 :           virtual void visit(SgHeaderFileReport *variable_SgHeaderFileReport) { visitDefault(variable_SgHeaderFileReport); }
  334087           0 :           virtual void visit(SgSupport *variable_SgSupport) { visitDefault(variable_SgSupport); }
  334088         137 :           virtual void visit(SgTypeUnknown *variable_SgTypeUnknown) { visitDefault(variable_SgTypeUnknown); }
  334089         194 :           virtual void visit(SgTypeChar *variable_SgTypeChar) { visitDefault(variable_SgTypeChar); }
  334090         137 :           virtual void visit(SgTypeSignedChar *variable_SgTypeSignedChar) { visitDefault(variable_SgTypeSignedChar); }
  334091         194 :           virtual void visit(SgTypeUnsignedChar *variable_SgTypeUnsignedChar) { visitDefault(variable_SgTypeUnsignedChar); }
  334092         194 :           virtual void visit(SgTypeShort *variable_SgTypeShort) { visitDefault(variable_SgTypeShort); }
  334093         137 :           virtual void visit(SgTypeSignedShort *variable_SgTypeSignedShort) { visitDefault(variable_SgTypeSignedShort); }
  334094         194 :           virtual void visit(SgTypeUnsignedShort *variable_SgTypeUnsignedShort) { visitDefault(variable_SgTypeUnsignedShort); }
  334095         194 :           virtual void visit(SgTypeInt *variable_SgTypeInt) { visitDefault(variable_SgTypeInt); }
  334096         137 :           virtual void visit(SgTypeSignedInt *variable_SgTypeSignedInt) { visitDefault(variable_SgTypeSignedInt); }
  334097         194 :           virtual void visit(SgTypeUnsignedInt *variable_SgTypeUnsignedInt) { visitDefault(variable_SgTypeUnsignedInt); }
  334098         194 :           virtual void visit(SgTypeLong *variable_SgTypeLong) { visitDefault(variable_SgTypeLong); }
  334099         137 :           virtual void visit(SgTypeSignedLong *variable_SgTypeSignedLong) { visitDefault(variable_SgTypeSignedLong); }
  334100         194 :           virtual void visit(SgTypeUnsignedLong *variable_SgTypeUnsignedLong) { visitDefault(variable_SgTypeUnsignedLong); }
  334101         194 :           virtual void visit(SgTypeVoid *variable_SgTypeVoid) { visitDefault(variable_SgTypeVoid); }
  334102           0 :           virtual void visit(SgTypeGlobalVoid *variable_SgTypeGlobalVoid) { visitDefault(variable_SgTypeGlobalVoid); }
  334103         137 :           virtual void visit(SgTypeWchar *variable_SgTypeWchar) { visitDefault(variable_SgTypeWchar); }
  334104         194 :           virtual void visit(SgTypeFloat *variable_SgTypeFloat) { visitDefault(variable_SgTypeFloat); }
  334105         194 :           virtual void visit(SgTypeDouble *variable_SgTypeDouble) { visitDefault(variable_SgTypeDouble); }
  334106         194 :           virtual void visit(SgTypeLongLong *variable_SgTypeLongLong) { visitDefault(variable_SgTypeLongLong); }
  334107         137 :           virtual void visit(SgTypeSignedLongLong *variable_SgTypeSignedLongLong) { visitDefault(variable_SgTypeSignedLongLong); }
  334108         194 :           virtual void visit(SgTypeUnsignedLongLong *variable_SgTypeUnsignedLongLong) { visitDefault(variable_SgTypeUnsignedLongLong); }
  334109         194 :           virtual void visit(SgTypeLongDouble *variable_SgTypeLongDouble) { visitDefault(variable_SgTypeLongDouble); }
  334110           0 :           virtual void visit(SgTypeFloat80 *variable_SgTypeFloat80) { visitDefault(variable_SgTypeFloat80); }
  334111         137 :           virtual void visit(SgTypeFloat128 *variable_SgTypeFloat128) { visitDefault(variable_SgTypeFloat128); }
  334112          32 :           virtual void visit(SgTypeString *variable_SgTypeString) { visitDefault(variable_SgTypeString); }
  334113         194 :           virtual void visit(SgTypeBool *variable_SgTypeBool) { visitDefault(variable_SgTypeBool); }
  334114           0 :           virtual void visit(SgTypeFixed *variable_SgTypeFixed) { visitDefault(variable_SgTypeFixed); }
  334115           0 :           virtual void visit(SgTypeMatrix *variable_SgTypeMatrix) { visitDefault(variable_SgTypeMatrix); }
  334116           0 :           virtual void visit(SgTypeTuple *variable_SgTypeTuple) { visitDefault(variable_SgTypeTuple); }
  334117         194 :           virtual void visit(SgTypeNullptr *variable_SgTypeNullptr) { visitDefault(variable_SgTypeNullptr); }
  334118         719 :           virtual void visit(SgTypeComplex *variable_SgTypeComplex) { visitDefault(variable_SgTypeComplex); }
  334119           0 :           virtual void visit(SgTypeImaginary *variable_SgTypeImaginary) { visitDefault(variable_SgTypeImaginary); }
  334120         349 :           virtual void visit(SgTypeDefault *variable_SgTypeDefault) { visitDefault(variable_SgTypeDefault); }
  334121        3973 :           virtual void visit(SgPointerMemberType *variable_SgPointerMemberType) { visitDefault(variable_SgPointerMemberType); }
  334122      100828 :           virtual void visit(SgReferenceType *variable_SgReferenceType) { visitDefault(variable_SgReferenceType); }
  334123       25295 :           virtual void visit(SgRvalueReferenceType *variable_SgRvalueReferenceType) { visitDefault(variable_SgRvalueReferenceType); }
  334124       12645 :           virtual void visit(SgDeclType *variable_SgDeclType) { visitDefault(variable_SgDeclType); }
  334125         411 :           virtual void visit(SgTypeOfType *variable_SgTypeOfType) { visitDefault(variable_SgTypeOfType); }
  334126           0 :           virtual void visit(SgTypeCAFTeam *variable_SgTypeCAFTeam) { visitDefault(variable_SgTypeCAFTeam); }
  334127         137 :           virtual void visit(SgTypeUnsigned128bitInteger *variable_SgTypeUnsigned128bitInteger) { visitDefault(variable_SgTypeUnsigned128bitInteger); }
  334128         194 :           virtual void visit(SgTypeSigned128bitInteger *variable_SgTypeSigned128bitInteger) { visitDefault(variable_SgTypeSigned128bitInteger); }
  334129           0 :           virtual void visit(SgTypeLabel *variable_SgTypeLabel) { visitDefault(variable_SgTypeLabel); }
  334130           0 :           virtual void visit(SgTemplateType *variable_SgTemplateType) { visitDefault(variable_SgTemplateType); }
  334131       12005 :           virtual void visit(SgEnumType *variable_SgEnumType) { visitDefault(variable_SgEnumType); }
  334132      242426 :           virtual void visit(SgTypedefType *variable_SgTypedefType) { visitDefault(variable_SgTypedefType); }
  334133      704852 :           virtual void visit(SgNonrealType *variable_SgNonrealType) { visitDefault(variable_SgNonrealType); }
  334134        2062 :           virtual void visit(SgAutoType *variable_SgAutoType) { visitDefault(variable_SgAutoType); }
  334135      118952 :           virtual void visit(SgModifierType *variable_SgModifierType) { visitDefault(variable_SgModifierType); }
  334136           0 :           virtual void visit(SgPartialFunctionModifierType *variable_SgPartialFunctionModifierType) { visitDefault(variable_SgPartialFunctionModifierType); }
  334137       14533 :           virtual void visit(SgArrayType *variable_SgArrayType) { visitDefault(variable_SgArrayType); }
  334138         194 :           virtual void visit(SgTypeEllipse *variable_SgTypeEllipse) { visitDefault(variable_SgTypeEllipse); }
  334139           0 :           virtual void visit(SgTypeCrayPointer *variable_SgTypeCrayPointer) { visitDefault(variable_SgTypeCrayPointer); }
  334140           0 :           virtual void visit(SgPartialFunctionType *variable_SgPartialFunctionType) { visitDefault(variable_SgPartialFunctionType); }
  334141      301911 :           virtual void visit(SgMemberFunctionType *variable_SgMemberFunctionType) { visitDefault(variable_SgMemberFunctionType); }
  334142      382485 :           virtual void visit(SgFunctionType *variable_SgFunctionType) { visitDefault(variable_SgFunctionType); }
  334143       81737 :           virtual void visit(SgPointerType *variable_SgPointerType) { visitDefault(variable_SgPointerType); }
  334144      192585 :           virtual void visit(SgClassType *variable_SgClassType) { visitDefault(variable_SgClassType); }
  334145           0 :           virtual void visit(SgNamedType *variable_SgNamedType) { visitDefault(variable_SgNamedType); }
  334146           0 :           virtual void visit(SgQualifiedNameType *variable_SgQualifiedNameType) { visitDefault(variable_SgQualifiedNameType); }
  334147         137 :           virtual void visit(SgTypeChar16 *variable_SgTypeChar16) { visitDefault(variable_SgTypeChar16); }
  334148         137 :           virtual void visit(SgTypeChar32 *variable_SgTypeChar32) { visitDefault(variable_SgTypeChar32); }
  334149           0 :           virtual void visit(SgType *variable_SgType) { visitDefault(variable_SgType); }
  334150        6160 :           virtual void visit(SgForStatement *variable_SgForStatement) { visitDefault(variable_SgForStatement); }
  334151        6160 :           virtual void visit(SgForInitStatement *variable_SgForInitStatement) { visitDefault(variable_SgForInitStatement); }
  334152           0 :           virtual void visit(SgRangeBasedForStatement *variable_SgRangeBasedForStatement) { visitDefault(variable_SgRangeBasedForStatement); }
  334153        7866 :           virtual void visit(SgCatchStatementSeq *variable_SgCatchStatementSeq) { visitDefault(variable_SgCatchStatementSeq); }
  334154     2614510 :           virtual void visit(SgFunctionParameterList *variable_SgFunctionParameterList) { visitDefault(variable_SgFunctionParameterList); }
  334155           0 :           virtual void visit(SgCtorInitializerList *variable_SgCtorInitializerList) { visitDefault(variable_SgCtorInitializerList); }
  334156      403228 :           virtual void visit(SgBasicBlock *variable_SgBasicBlock) { visitDefault(variable_SgBasicBlock); }
  334157         388 :           virtual void visit(SgGlobal *variable_SgGlobal) { visitDefault(variable_SgGlobal); }
  334158       82870 :           virtual void visit(SgIfStmt *variable_SgIfStmt) { visitDefault(variable_SgIfStmt); }
  334159        6457 :           virtual void visit(SgWhileStmt *variable_SgWhileStmt) { visitDefault(variable_SgWhileStmt); }
  334160         977 :           virtual void visit(SgDoWhileStmt *variable_SgDoWhileStmt) { visitDefault(variable_SgDoWhileStmt); }
  334161          18 :           virtual void visit(SgSwitchStatement *variable_SgSwitchStatement) { visitDefault(variable_SgSwitchStatement); }
  334162       12798 :           virtual void visit(SgCatchOptionStmt *variable_SgCatchOptionStmt) { visitDefault(variable_SgCatchOptionStmt); }
  334163           0 :           virtual void visit(SgFunctionParameterScope *variable_SgFunctionParameterScope) { visitDefault(variable_SgFunctionParameterScope); }
  334164      901454 :           virtual void visit(SgDeclarationScope *variable_SgDeclarationScope) { visitDefault(variable_SgDeclarationScope); }
  334165      190890 :           virtual void visit(SgVariableDefinition *variable_SgVariableDefinition) { visitDefault(variable_SgVariableDefinition); }
  334166           0 :           virtual void visit(SgStmtDeclarationStatement *variable_SgStmtDeclarationStatement) { visitDefault(variable_SgStmtDeclarationStatement); }
  334167       24284 :           virtual void visit(SgEnumDeclaration *variable_SgEnumDeclaration) { visitDefault(variable_SgEnumDeclaration); }
  334168           0 :           virtual void visit(SgAsmStmt *variable_SgAsmStmt) { visitDefault(variable_SgAsmStmt); }
  334169         194 :           virtual void visit(SgFunctionTypeTable *variable_SgFunctionTypeTable) { visitDefault(variable_SgFunctionTypeTable); }
  334170      315706 :           virtual void visit(SgExprStatement *variable_SgExprStatement) { visitDefault(variable_SgExprStatement); }
  334171          36 :           virtual void visit(SgLabelStatement *variable_SgLabelStatement) { visitDefault(variable_SgLabelStatement); }
  334172          18 :           virtual void visit(SgCaseOptionStmt *variable_SgCaseOptionStmt) { visitDefault(variable_SgCaseOptionStmt); }
  334173        7866 :           virtual void visit(SgTryStmt *variable_SgTryStmt) { visitDefault(variable_SgTryStmt); }
  334174          18 :           virtual void visit(SgDefaultOptionStmt *variable_SgDefaultOptionStmt) { visitDefault(variable_SgDefaultOptionStmt); }
  334175        4146 :           virtual void visit(SgBreakStmt *variable_SgBreakStmt) { visitDefault(variable_SgBreakStmt); }
  334176         274 :           virtual void visit(SgContinueStmt *variable_SgContinueStmt) { visitDefault(variable_SgContinueStmt); }
  334177      195885 :           virtual void visit(SgReturnStmt *variable_SgReturnStmt) { visitDefault(variable_SgReturnStmt); }
  334178          18 :           virtual void visit(SgGotoStatement *variable_SgGotoStatement) { visitDefault(variable_SgGotoStatement); }
  334179           0 :           virtual void visit(SgSpawnStmt *variable_SgSpawnStmt) { visitDefault(variable_SgSpawnStmt); }
  334180       13015 :           virtual void visit(SgTemplateTypedefDeclaration *variable_SgTemplateTypedefDeclaration) { visitDefault(variable_SgTemplateTypedefDeclaration); }
  334181        8942 :           virtual void visit(SgTemplateInstantiationTypedefDeclaration *variable_SgTemplateInstantiationTypedefDeclaration) { visitDefault(variable_SgTemplateInstantiationTypedefDeclaration); }
  334182           0 :           virtual void visit(SgTypedefDeclaration *variable_SgTypedefDeclaration) { visitDefault(variable_SgTypedefDeclaration); }
  334183        3172 :           virtual void visit(SgNullStatement *variable_SgNullStatement) { visitDefault(variable_SgNullStatement); }
  334184           0 :           virtual void visit(SgVariantStatement *variable_SgVariantStatement) { visitDefault(variable_SgVariantStatement); }
  334185       13512 :           virtual void visit(SgPragmaDeclaration *variable_SgPragmaDeclaration) { visitDefault(variable_SgPragmaDeclaration); }
  334186      150086 :           virtual void visit(SgTemplateClassDeclaration *variable_SgTemplateClassDeclaration) { visitDefault(variable_SgTemplateClassDeclaration); }
  334187      270741 :           virtual void visit(SgTemplateMemberFunctionDeclaration *variable_SgTemplateMemberFunctionDeclaration) { visitDefault(variable_SgTemplateMemberFunctionDeclaration); }
  334188       94304 :           virtual void visit(SgTemplateFunctionDeclaration *variable_SgTemplateFunctionDeclaration) { visitDefault(variable_SgTemplateFunctionDeclaration); }
  334189       13957 :           virtual void visit(SgTemplateVariableDeclaration *variable_SgTemplateVariableDeclaration) { visitDefault(variable_SgTemplateVariableDeclaration); }
  334190           0 :           virtual void visit(SgTemplateDeclaration *variable_SgTemplateDeclaration) { visitDefault(variable_SgTemplateDeclaration); }
  334191      176933 :           virtual void visit(SgVariableDeclaration *variable_SgVariableDeclaration) { visitDefault(variable_SgVariableDeclaration); }
  334192           0 :           virtual void visit(SgTemplateInstantiationDecl *variable_SgTemplateInstantiationDecl) { visitDefault(variable_SgTemplateInstantiationDecl); }
  334193       83252 :           virtual void visit(SgTemplateInstantiationDefn *variable_SgTemplateInstantiationDefn) { visitDefault(variable_SgTemplateInstantiationDefn); }
  334194       38671 :           virtual void visit(SgTemplateInstantiationFunctionDecl *variable_SgTemplateInstantiationFunctionDecl) { visitDefault(variable_SgTemplateInstantiationFunctionDecl); }
  334195           0 :           virtual void visit(SgTemplateInstantiationMemberFunctionDecl *variable_SgTemplateInstantiationMemberFunctionDecl) { visitDefault(variable_SgTemplateInstantiationMemberFunctionDecl); }
  334196      704852 :           virtual void visit(SgNonrealDecl *variable_SgNonrealDecl) { visitDefault(variable_SgNonrealDecl); }
  334197           0 :           virtual void visit(SgWithStatement *variable_SgWithStatement) { visitDefault(variable_SgWithStatement); }
  334198           0 :           virtual void visit(SgPassStatement *variable_SgPassStatement) { visitDefault(variable_SgPassStatement); }
  334199           0 :           virtual void visit(SgAssertStmt *variable_SgAssertStmt) { visitDefault(variable_SgAssertStmt); }
  334200           0 :           virtual void visit(SgExecStatement *variable_SgExecStatement) { visitDefault(variable_SgExecStatement); }
  334201           0 :           virtual void visit(SgProgramHeaderStatement *variable_SgProgramHeaderStatement) { visitDefault(variable_SgProgramHeaderStatement); }
  334202           0 :           virtual void visit(SgProcedureHeaderStatement *variable_SgProcedureHeaderStatement) { visitDefault(variable_SgProcedureHeaderStatement); }
  334203           0 :           virtual void visit(SgEntryStatement *variable_SgEntryStatement) { visitDefault(variable_SgEntryStatement); }
  334204           0 :           virtual void visit(SgFortranNonblockedDo *variable_SgFortranNonblockedDo) { visitDefault(variable_SgFortranNonblockedDo); }
  334205           0 :           virtual void visit(SgInterfaceStatement *variable_SgInterfaceStatement) { visitDefault(variable_SgInterfaceStatement); }
  334206           0 :           virtual void visit(SgParameterStatement *variable_SgParameterStatement) { visitDefault(variable_SgParameterStatement); }
  334207           0 :           virtual void visit(SgCommonBlock *variable_SgCommonBlock) { visitDefault(variable_SgCommonBlock); }
  334208           0 :           virtual void visit(SgModuleStatement *variable_SgModuleStatement) { visitDefault(variable_SgModuleStatement); }
  334209           0 :           virtual void visit(SgUseStatement *variable_SgUseStatement) { visitDefault(variable_SgUseStatement); }
  334210           0 :           virtual void visit(SgProcessControlStatement *variable_SgProcessControlStatement) { visitDefault(variable_SgProcessControlStatement); }
  334211           0 :           virtual void visit(SgPrintStatement *variable_SgPrintStatement) { visitDefault(variable_SgPrintStatement); }
  334212           0 :           virtual void visit(SgReadStatement *variable_SgReadStatement) { visitDefault(variable_SgReadStatement); }
  334213           0 :           virtual void visit(SgWriteStatement *variable_SgWriteStatement) { visitDefault(variable_SgWriteStatement); }
  334214           0 :           virtual void visit(SgOpenStatement *variable_SgOpenStatement) { visitDefault(variable_SgOpenStatement); }
  334215           0 :           virtual void visit(SgCloseStatement *variable_SgCloseStatement) { visitDefault(variable_SgCloseStatement); }
  334216           0 :           virtual void visit(SgInquireStatement *variable_SgInquireStatement) { visitDefault(variable_SgInquireStatement); }
  334217           0 :           virtual void visit(SgFlushStatement *variable_SgFlushStatement) { visitDefault(variable_SgFlushStatement); }
  334218           0 :           virtual void visit(SgBackspaceStatement *variable_SgBackspaceStatement) { visitDefault(variable_SgBackspaceStatement); }
  334219           0 :           virtual void visit(SgRewindStatement *variable_SgRewindStatement) { visitDefault(variable_SgRewindStatement); }
  334220           0 :           virtual void visit(SgEndfileStatement *variable_SgEndfileStatement) { visitDefault(variable_SgEndfileStatement); }
  334221           0 :           virtual void visit(SgWaitStatement *variable_SgWaitStatement) { visitDefault(variable_SgWaitStatement); }
  334222           0 :           virtual void visit(SgCAFWithTeamStatement *variable_SgCAFWithTeamStatement) { visitDefault(variable_SgCAFWithTeamStatement); }
  334223           0 :           virtual void visit(SgFormatStatement *variable_SgFormatStatement) { visitDefault(variable_SgFormatStatement); }
  334224           0 :           virtual void visit(SgFortranDo *variable_SgFortranDo) { visitDefault(variable_SgFortranDo); }
  334225           0 :           virtual void visit(SgForAllStatement *variable_SgForAllStatement) { visitDefault(variable_SgForAllStatement); }
  334226           0 :           virtual void visit(SgIOStatement *variable_SgIOStatement) { visitDefault(variable_SgIOStatement); }
  334227           0 :           virtual void visit(SgSyncAllStatement *variable_SgSyncAllStatement) { visitDefault(variable_SgSyncAllStatement); }
  334228           0 :           virtual void visit(SgSyncImagesStatement *variable_SgSyncImagesStatement) { visitDefault(variable_SgSyncImagesStatement); }
  334229           0 :           virtual void visit(SgSyncMemoryStatement *variable_SgSyncMemoryStatement) { visitDefault(variable_SgSyncMemoryStatement); }
  334230           0 :           virtual void visit(SgSyncTeamStatement *variable_SgSyncTeamStatement) { visitDefault(variable_SgSyncTeamStatement); }
  334231           0 :           virtual void visit(SgLockStatement *variable_SgLockStatement) { visitDefault(variable_SgLockStatement); }
  334232           0 :           virtual void visit(SgUnlockStatement *variable_SgUnlockStatement) { visitDefault(variable_SgUnlockStatement); }
  334233           0 :           virtual void visit(SgImageControlStatement *variable_SgImageControlStatement) { visitDefault(variable_SgImageControlStatement); }
  334234           0 :           virtual void visit(SgUpcNotifyStatement *variable_SgUpcNotifyStatement) { visitDefault(variable_SgUpcNotifyStatement); }
  334235           0 :           virtual void visit(SgUpcWaitStatement *variable_SgUpcWaitStatement) { visitDefault(variable_SgUpcWaitStatement); }
  334236           0 :           virtual void visit(SgUpcBarrierStatement *variable_SgUpcBarrierStatement) { visitDefault(variable_SgUpcBarrierStatement); }
  334237           0 :           virtual void visit(SgUpcFenceStatement *variable_SgUpcFenceStatement) { visitDefault(variable_SgUpcFenceStatement); }
  334238           0 :           virtual void visit(SgUpcForAllStatement *variable_SgUpcForAllStatement) { visitDefault(variable_SgUpcForAllStatement); }
  334239           0 :           virtual void visit(SgUpirSpmdStatement *variable_SgUpirSpmdStatement) { visitDefault(variable_SgUpirSpmdStatement); }
  334240           0 :           virtual void visit(SgOmpLoopStatement *variable_SgOmpLoopStatement) { visitDefault(variable_SgOmpLoopStatement); }
  334241           0 :           virtual void visit(SgOmpScanStatement *variable_SgOmpScanStatement) { visitDefault(variable_SgOmpScanStatement); }
  334242           0 :           virtual void visit(SgOmpTaskloopStatement *variable_SgOmpTaskloopStatement) { visitDefault(variable_SgOmpTaskloopStatement); }
  334243           0 :           virtual void visit(SgOmpTaskgroupStatement *variable_SgOmpTaskgroupStatement) { visitDefault(variable_SgOmpTaskgroupStatement); }
  334244           0 :           virtual void visit(SgOmpDepobjStatement *variable_SgOmpDepobjStatement) { visitDefault(variable_SgOmpDepobjStatement); }
  334245           0 :           virtual void visit(SgOmpTeamsStatement *variable_SgOmpTeamsStatement) { visitDefault(variable_SgOmpTeamsStatement); }
  334246           0 :           virtual void visit(SgOmpCancellationPointStatement *variable_SgOmpCancellationPointStatement) { visitDefault(variable_SgOmpCancellationPointStatement); }
  334247           0 :           virtual void visit(SgOmpDeclareMapperStatement *variable_SgOmpDeclareMapperStatement) { visitDefault(variable_SgOmpDeclareMapperStatement); }
  334248           0 :           virtual void visit(SgOmpCancelStatement *variable_SgOmpCancelStatement) { visitDefault(variable_SgOmpCancelStatement); }
  334249           0 :           virtual void visit(SgOmpDistributeStatement *variable_SgOmpDistributeStatement) { visitDefault(variable_SgOmpDistributeStatement); }
  334250           0 :           virtual void visit(SgOmpMetadirectiveStatement *variable_SgOmpMetadirectiveStatement) { visitDefault(variable_SgOmpMetadirectiveStatement); }
  334251           0 :           virtual void visit(SgOmpSingleStatement *variable_SgOmpSingleStatement) { visitDefault(variable_SgOmpSingleStatement); }
  334252           0 :           virtual void visit(SgOmpTaskStatement *variable_SgOmpTaskStatement) { visitDefault(variable_SgOmpTaskStatement); }
  334253           0 :           virtual void visit(SgOmpTargetEnterDataStatement *variable_SgOmpTargetEnterDataStatement) { visitDefault(variable_SgOmpTargetEnterDataStatement); }
  334254           0 :           virtual void visit(SgOmpTargetExitDataStatement *variable_SgOmpTargetExitDataStatement) { visitDefault(variable_SgOmpTargetExitDataStatement); }
  334255           0 :           virtual void visit(SgUpirWorksharingStatement *variable_SgUpirWorksharingStatement) { visitDefault(variable_SgUpirWorksharingStatement); }
  334256           0 :           virtual void visit(SgOmpForSimdStatement *variable_SgOmpForSimdStatement) { visitDefault(variable_SgOmpForSimdStatement); }
  334257           0 :           virtual void visit(SgOmpDoStatement *variable_SgOmpDoStatement) { visitDefault(variable_SgOmpDoStatement); }
  334258           0 :           virtual void visit(SgOmpSectionsStatement *variable_SgOmpSectionsStatement) { visitDefault(variable_SgOmpSectionsStatement); }
  334259           0 :           virtual void visit(SgOmpAtomicStatement *variable_SgOmpAtomicStatement) { visitDefault(variable_SgOmpAtomicStatement); }
  334260           0 :           virtual void visit(SgUpirTaskStatement *variable_SgUpirTaskStatement) { visitDefault(variable_SgUpirTaskStatement); }
  334261           0 :           virtual void visit(SgOmpTargetDataStatement *variable_SgOmpTargetDataStatement) { visitDefault(variable_SgOmpTargetDataStatement); }
  334262           0 :           virtual void visit(SgOmpTargetParallelForStatement *variable_SgOmpTargetParallelForStatement) { visitDefault(variable_SgOmpTargetParallelForStatement); }
  334263           0 :           virtual void visit(SgOmpTargetParallelStatement *variable_SgOmpTargetParallelStatement) { visitDefault(variable_SgOmpTargetParallelStatement); }
  334264           0 :           virtual void visit(SgOmpDistributeSimdStatement *variable_SgOmpDistributeSimdStatement) { visitDefault(variable_SgOmpDistributeSimdStatement); }
  334265           0 :           virtual void visit(SgOmpDistributeParallelForStatement *variable_SgOmpDistributeParallelForStatement) { visitDefault(variable_SgOmpDistributeParallelForStatement); }
  334266           0 :           virtual void visit(SgOmpDistributeParallelForSimdStatement *variable_SgOmpDistributeParallelForSimdStatement) { visitDefault(variable_SgOmpDistributeParallelForSimdStatement); }
  334267           0 :           virtual void visit(SgOmpTaskloopSimdStatement *variable_SgOmpTaskloopSimdStatement) { visitDefault(variable_SgOmpTaskloopSimdStatement); }
  334268           0 :           virtual void visit(SgOmpTargetUpdateStatement *variable_SgOmpTargetUpdateStatement) { visitDefault(variable_SgOmpTargetUpdateStatement); }
  334269           0 :           virtual void visit(SgOmpTargetParallelForSimdStatement *variable_SgOmpTargetParallelForSimdStatement) { visitDefault(variable_SgOmpTargetParallelForSimdStatement); }
  334270           0 :           virtual void visit(SgOmpTargetParallelLoopStatement *variable_SgOmpTargetParallelLoopStatement) { visitDefault(variable_SgOmpTargetParallelLoopStatement); }
  334271           0 :           virtual void visit(SgOmpTargetSimdStatement *variable_SgOmpTargetSimdStatement) { visitDefault(variable_SgOmpTargetSimdStatement); }
  334272           0 :           virtual void visit(SgOmpTargetTeamsStatement *variable_SgOmpTargetTeamsStatement) { visitDefault(variable_SgOmpTargetTeamsStatement); }
  334273           0 :           virtual void visit(SgOmpTargetTeamsDistributeStatement *variable_SgOmpTargetTeamsDistributeStatement) { visitDefault(variable_SgOmpTargetTeamsDistributeStatement); }
  334274           0 :           virtual void visit(SgOmpTargetTeamsDistributeSimdStatement *variable_SgOmpTargetTeamsDistributeSimdStatement) { visitDefault(variable_SgOmpTargetTeamsDistributeSimdStatement); }
  334275           0 :           virtual void visit(SgOmpTargetTeamsLoopStatement *variable_SgOmpTargetTeamsLoopStatement) { visitDefault(variable_SgOmpTargetTeamsLoopStatement); }
  334276           0 :           virtual void visit(SgOmpTargetTeamsDistributeParallelForStatement *variable_SgOmpTargetTeamsDistributeParallelForStatement) { visitDefault(variable_SgOmpTargetTeamsDistributeParallelForStatement); }
  334277           0 :           virtual void visit(SgOmpTargetTeamsDistributeParallelForSimdStatement *variable_SgOmpTargetTeamsDistributeParallelForSimdStatement) { visitDefault(variable_SgOmpTargetTeamsDistributeParallelForSimdStatement); }
  334278           0 :           virtual void visit(SgOmpMasterTaskloopSimdStatement *variable_SgOmpMasterTaskloopSimdStatement) { visitDefault(variable_SgOmpMasterTaskloopSimdStatement); }
  334279           0 :           virtual void visit(SgOmpParallelMasterTaskloopStatement *variable_SgOmpParallelMasterTaskloopStatement) { visitDefault(variable_SgOmpParallelMasterTaskloopStatement); }
  334280           0 :           virtual void visit(SgOmpParallelMasterTaskloopSimdStatement *variable_SgOmpParallelMasterTaskloopSimdStatement) { visitDefault(variable_SgOmpParallelMasterTaskloopSimdStatement); }
  334281           0 :           virtual void visit(SgOmpTeamsDistributeStatement *variable_SgOmpTeamsDistributeStatement) { visitDefault(variable_SgOmpTeamsDistributeStatement); }
  334282           0 :           virtual void visit(SgOmpTeamsDistributeSimdStatement *variable_SgOmpTeamsDistributeSimdStatement) { visitDefault(variable_SgOmpTeamsDistributeSimdStatement); }
  334283           0 :           virtual void visit(SgOmpTeamsDistributeParallelForStatement *variable_SgOmpTeamsDistributeParallelForStatement) { visitDefault(variable_SgOmpTeamsDistributeParallelForStatement); }
  334284           0 :           virtual void visit(SgOmpTeamsDistributeParallelForSimdStatement *variable_SgOmpTeamsDistributeParallelForSimdStatement) { visitDefault(variable_SgOmpTeamsDistributeParallelForSimdStatement); }
  334285           0 :           virtual void visit(SgOmpTeamsLoopStatement *variable_SgOmpTeamsLoopStatement) { visitDefault(variable_SgOmpTeamsLoopStatement); }
  334286           0 :           virtual void visit(SgOmpParallelMasterStatement *variable_SgOmpParallelMasterStatement) { visitDefault(variable_SgOmpParallelMasterStatement); }
  334287           0 :           virtual void visit(SgOmpMasterTaskloopStatement *variable_SgOmpMasterTaskloopStatement) { visitDefault(variable_SgOmpMasterTaskloopStatement); }
  334288           0 :           virtual void visit(SgOmpParallelLoopStatement *variable_SgOmpParallelLoopStatement) { visitDefault(variable_SgOmpParallelLoopStatement); }
  334289           0 :           virtual void visit(SgOmpUnrollStatement *variable_SgOmpUnrollStatement) { visitDefault(variable_SgOmpUnrollStatement); }
  334290           0 :           virtual void visit(SgOmpTileStatement *variable_SgOmpTileStatement) { visitDefault(variable_SgOmpTileStatement); }
  334291           0 :           virtual void visit(SgUpirSimdStatement *variable_SgUpirSimdStatement) { visitDefault(variable_SgUpirSimdStatement); }
  334292           0 :           virtual void visit(SgOmpCriticalStatement *variable_SgOmpCriticalStatement) { visitDefault(variable_SgOmpCriticalStatement); }
  334293           0 :           virtual void visit(SgOmpOrderedStatement *variable_SgOmpOrderedStatement) { visitDefault(variable_SgOmpOrderedStatement); }
  334294           0 :           virtual void visit(SgUpirLoopStatement *variable_SgUpirLoopStatement) { visitDefault(variable_SgUpirLoopStatement); }
  334295           0 :           virtual void visit(SgUpirLoopParallelStatement *variable_SgUpirLoopParallelStatement) { visitDefault(variable_SgUpirLoopParallelStatement); }
  334296           0 :           virtual void visit(SgUpirSyncStatement *variable_SgUpirSyncStatement) { visitDefault(variable_SgUpirSyncStatement); }
  334297           0 :           virtual void visit(SgUpirFieldBodyStatement *variable_SgUpirFieldBodyStatement) { visitDefault(variable_SgUpirFieldBodyStatement); }
  334298           0 :           virtual void visit(SgOmpMasterStatement *variable_SgOmpMasterStatement) { visitDefault(variable_SgOmpMasterStatement); }
  334299           0 :           virtual void visit(SgOmpSectionStatement *variable_SgOmpSectionStatement) { visitDefault(variable_SgOmpSectionStatement); }
  334300           0 :           virtual void visit(SgOmpWorkshareStatement *variable_SgOmpWorkshareStatement) { visitDefault(variable_SgOmpWorkshareStatement); }
  334301           0 :           virtual void visit(SgOmpFlushStatement *variable_SgOmpFlushStatement) { visitDefault(variable_SgOmpFlushStatement); }
  334302           0 :           virtual void visit(SgOmpAllocateStatement *variable_SgOmpAllocateStatement) { visitDefault(variable_SgOmpAllocateStatement); }
  334303           0 :           virtual void visit(SgOmpOrderedDependStatement *variable_SgOmpOrderedDependStatement) { visitDefault(variable_SgOmpOrderedDependStatement); }
  334304           0 :           virtual void visit(SgUpirBodyStatement *variable_SgUpirBodyStatement) { visitDefault(variable_SgUpirBodyStatement); }
  334305           0 :           virtual void visit(SgUpirFieldStatement *variable_SgUpirFieldStatement) { visitDefault(variable_SgUpirFieldStatement); }
  334306           0 :           virtual void visit(SgBlockDataStatement *variable_SgBlockDataStatement) { visitDefault(variable_SgBlockDataStatement); }
  334307           0 :           virtual void visit(SgImplicitStatement *variable_SgImplicitStatement) { visitDefault(variable_SgImplicitStatement); }
  334308           0 :           virtual void visit(SgStatementFunctionStatement *variable_SgStatementFunctionStatement) { visitDefault(variable_SgStatementFunctionStatement); }
  334309           0 :           virtual void visit(SgWhereStatement *variable_SgWhereStatement) { visitDefault(variable_SgWhereStatement); }
  334310           0 :           virtual void visit(SgNullifyStatement *variable_SgNullifyStatement) { visitDefault(variable_SgNullifyStatement); }
  334311           0 :           virtual void visit(SgEquivalenceStatement *variable_SgEquivalenceStatement) { visitDefault(variable_SgEquivalenceStatement); }
  334312           0 :           virtual void visit(SgDerivedTypeStatement *variable_SgDerivedTypeStatement) { visitDefault(variable_SgDerivedTypeStatement); }
  334313           0 :           virtual void visit(SgAttributeSpecificationStatement *variable_SgAttributeSpecificationStatement) { visitDefault(variable_SgAttributeSpecificationStatement); }
  334314           0 :           virtual void visit(SgAllocateStatement *variable_SgAllocateStatement) { visitDefault(variable_SgAllocateStatement); }
  334315           0 :           virtual void visit(SgDeallocateStatement *variable_SgDeallocateStatement) { visitDefault(variable_SgDeallocateStatement); }
  334316           0 :           virtual void visit(SgContainsStatement *variable_SgContainsStatement) { visitDefault(variable_SgContainsStatement); }
  334317           0 :           virtual void visit(SgSequenceStatement *variable_SgSequenceStatement) { visitDefault(variable_SgSequenceStatement); }
  334318           0 :           virtual void visit(SgElseWhereStatement *variable_SgElseWhereStatement) { visitDefault(variable_SgElseWhereStatement); }
  334319           0 :           virtual void visit(SgArithmeticIfStatement *variable_SgArithmeticIfStatement) { visitDefault(variable_SgArithmeticIfStatement); }
  334320           0 :           virtual void visit(SgAssignStatement *variable_SgAssignStatement) { visitDefault(variable_SgAssignStatement); }
  334321           0 :           virtual void visit(SgComputedGotoStatement *variable_SgComputedGotoStatement) { visitDefault(variable_SgComputedGotoStatement); }
  334322           0 :           virtual void visit(SgAssignedGotoStatement *variable_SgAssignedGotoStatement) { visitDefault(variable_SgAssignedGotoStatement); }
  334323           0 :           virtual void visit(SgNamelistStatement *variable_SgNamelistStatement) { visitDefault(variable_SgNamelistStatement); }
  334324           0 :           virtual void visit(SgImportStatement *variable_SgImportStatement) { visitDefault(variable_SgImportStatement); }
  334325           0 :           virtual void visit(SgAssociateStatement *variable_SgAssociateStatement) { visitDefault(variable_SgAssociateStatement); }
  334326           0 :           virtual void visit(SgFortranIncludeLine *variable_SgFortranIncludeLine) { visitDefault(variable_SgFortranIncludeLine); }
  334327       16721 :           virtual void visit(SgNamespaceDeclarationStatement *variable_SgNamespaceDeclarationStatement) { visitDefault(variable_SgNamespaceDeclarationStatement); }
  334328           0 :           virtual void visit(SgNamespaceAliasDeclarationStatement *variable_SgNamespaceAliasDeclarationStatement) { visitDefault(variable_SgNamespaceAliasDeclarationStatement); }
  334329       18639 :           virtual void visit(SgNamespaceDefinitionStatement *variable_SgNamespaceDefinitionStatement) { visitDefault(variable_SgNamespaceDefinitionStatement); }
  334330       38383 :           virtual void visit(SgUsingDeclarationStatement *variable_SgUsingDeclarationStatement) { visitDefault(variable_SgUsingDeclarationStatement); }
  334331         240 :           virtual void visit(SgUsingDirectiveStatement *variable_SgUsingDirectiveStatement) { visitDefault(variable_SgUsingDirectiveStatement); }
  334332       16988 :           virtual void visit(SgTemplateInstantiationDirectiveStatement *variable_SgTemplateInstantiationDirectiveStatement) { visitDefault(variable_SgTemplateInstantiationDirectiveStatement); }
  334333        2044 :           virtual void visit(SgStaticAssertionDeclaration *variable_SgStaticAssertionDeclaration) { visitDefault(variable_SgStaticAssertionDeclaration); }
  334334       69700 :           virtual void visit(SgTemplateClassDefinition *variable_SgTemplateClassDefinition) { visitDefault(variable_SgTemplateClassDefinition); }
  334335       44001 :           virtual void visit(SgTemplateFunctionDefinition *variable_SgTemplateFunctionDefinition) { visitDefault(variable_SgTemplateFunctionDefinition); }
  334336           0 :           virtual void visit(SgClassDeclaration *variable_SgClassDeclaration) { visitDefault(variable_SgClassDeclaration); }
  334337       22423 :           virtual void visit(SgClassDefinition *variable_SgClassDefinition) { visitDefault(variable_SgClassDefinition); }
  334338      222609 :           virtual void visit(SgFunctionDefinition *variable_SgFunctionDefinition) { visitDefault(variable_SgFunctionDefinition); }
  334339           0 :           virtual void visit(SgScopeStatement *variable_SgScopeStatement) { visitDefault(variable_SgScopeStatement); }
  334340           0 :           virtual void visit(SgMemberFunctionDeclaration *variable_SgMemberFunctionDeclaration) { visitDefault(variable_SgMemberFunctionDeclaration); }
  334341           0 :           virtual void visit(SgFunctionDeclaration *variable_SgFunctionDeclaration) { visitDefault(variable_SgFunctionDeclaration); }
  334342           0 :           virtual void visit(SgIncludeDirectiveStatement *variable_SgIncludeDirectiveStatement) { visitDefault(variable_SgIncludeDirectiveStatement); }
  334343           0 :           virtual void visit(SgDefineDirectiveStatement *variable_SgDefineDirectiveStatement) { visitDefault(variable_SgDefineDirectiveStatement); }
  334344           0 :           virtual void visit(SgUndefDirectiveStatement *variable_SgUndefDirectiveStatement) { visitDefault(variable_SgUndefDirectiveStatement); }
  334345           0 :           virtual void visit(SgIfdefDirectiveStatement *variable_SgIfdefDirectiveStatement) { visitDefault(variable_SgIfdefDirectiveStatement); }
  334346           0 :           virtual void visit(SgIfndefDirectiveStatement *variable_SgIfndefDirectiveStatement) { visitDefault(variable_SgIfndefDirectiveStatement); }
  334347           0 :           virtual void visit(SgIfDirectiveStatement *variable_SgIfDirectiveStatement) { visitDefault(variable_SgIfDirectiveStatement); }
  334348           0 :           virtual void visit(SgDeadIfDirectiveStatement *variable_SgDeadIfDirectiveStatement) { visitDefault(variable_SgDeadIfDirectiveStatement); }
  334349           0 :           virtual void visit(SgElseDirectiveStatement *variable_SgElseDirectiveStatement) { visitDefault(variable_SgElseDirectiveStatement); }
  334350           0 :           virtual void visit(SgElseifDirectiveStatement *variable_SgElseifDirectiveStatement) { visitDefault(variable_SgElseifDirectiveStatement); }
  334351           0 :           virtual void visit(SgEndifDirectiveStatement *variable_SgEndifDirectiveStatement) { visitDefault(variable_SgEndifDirectiveStatement); }
  334352           0 :           virtual void visit(SgLineDirectiveStatement *variable_SgLineDirectiveStatement) { visitDefault(variable_SgLineDirectiveStatement); }
  334353           0 :           virtual void visit(SgWarningDirectiveStatement *variable_SgWarningDirectiveStatement) { visitDefault(variable_SgWarningDirectiveStatement); }
  334354           0 :           virtual void visit(SgErrorDirectiveStatement *variable_SgErrorDirectiveStatement) { visitDefault(variable_SgErrorDirectiveStatement); }
  334355           0 :           virtual void visit(SgEmptyDirectiveStatement *variable_SgEmptyDirectiveStatement) { visitDefault(variable_SgEmptyDirectiveStatement); }
  334356           0 :           virtual void visit(SgIncludeNextDirectiveStatement *variable_SgIncludeNextDirectiveStatement) { visitDefault(variable_SgIncludeNextDirectiveStatement); }
  334357           0 :           virtual void visit(SgIdentDirectiveStatement *variable_SgIdentDirectiveStatement) { visitDefault(variable_SgIdentDirectiveStatement); }
  334358           0 :           virtual void visit(SgLinemarkerDirectiveStatement *variable_SgLinemarkerDirectiveStatement) { visitDefault(variable_SgLinemarkerDirectiveStatement); }
  334359           0 :           virtual void visit(SgC_PreprocessorDirectiveStatement *variable_SgC_PreprocessorDirectiveStatement) { visitDefault(variable_SgC_PreprocessorDirectiveStatement); }
  334360           0 :           virtual void visit(SgClinkageStartStatement *variable_SgClinkageStartStatement) { visitDefault(variable_SgClinkageStartStatement); }
  334361           0 :           virtual void visit(SgClinkageEndStatement *variable_SgClinkageEndStatement) { visitDefault(variable_SgClinkageEndStatement); }
  334362           0 :           virtual void visit(SgClinkageDeclarationStatement *variable_SgClinkageDeclarationStatement) { visitDefault(variable_SgClinkageDeclarationStatement); }
  334363           0 :           virtual void visit(SgOmpDeclareSimdStatement *variable_SgOmpDeclareSimdStatement) { visitDefault(variable_SgOmpDeclareSimdStatement); }
  334364           0 :           virtual void visit(SgOmpBarrierStatement *variable_SgOmpBarrierStatement) { visitDefault(variable_SgOmpBarrierStatement); }
  334365           0 :           virtual void visit(SgOmpTaskyieldStatement *variable_SgOmpTaskyieldStatement) { visitDefault(variable_SgOmpTaskyieldStatement); }
  334366           0 :           virtual void visit(SgOmpRequiresStatement *variable_SgOmpRequiresStatement) { visitDefault(variable_SgOmpRequiresStatement); }
  334367           0 :           virtual void visit(SgOmpTaskwaitStatement *variable_SgOmpTaskwaitStatement) { visitDefault(variable_SgOmpTaskwaitStatement); }
  334368           0 :           virtual void visit(SgOmpThreadprivateStatement *variable_SgOmpThreadprivateStatement) { visitDefault(variable_SgOmpThreadprivateStatement); }
  334369           0 :           virtual void visit(SgMicrosoftAttributeDeclaration *variable_SgMicrosoftAttributeDeclaration) { visitDefault(variable_SgMicrosoftAttributeDeclaration); }
  334370           0 :           virtual void visit(SgEmptyDeclaration *variable_SgEmptyDeclaration) { visitDefault(variable_SgEmptyDeclaration); }
  334371           0 :           virtual void visit(SgDeclarationStatement *variable_SgDeclarationStatement) { visitDefault(variable_SgDeclarationStatement); }
  334372           0 :           virtual void visit(SgUpirBaseStatement *variable_SgUpirBaseStatement) { visitDefault(variable_SgUpirBaseStatement); }
  334373           0 :           virtual void visit(SgStatement *variable_SgStatement) { visitDefault(variable_SgStatement); }
  334374           0 :           virtual void visit(SgVarRefExp *variable_SgVarRefExp) { visitDefault(variable_SgVarRefExp); }
  334375      219810 :           virtual void visit(SgNonrealRefExp *variable_SgNonrealRefExp) { visitDefault(variable_SgNonrealRefExp); }
  334376           0 :           virtual void visit(SgCompoundLiteralExp *variable_SgCompoundLiteralExp) { visitDefault(variable_SgCompoundLiteralExp); }
  334377           0 :           virtual void visit(SgLabelRefExp *variable_SgLabelRefExp) { visitDefault(variable_SgLabelRefExp); }
  334378           0 :           virtual void visit(SgClassNameRefExp *variable_SgClassNameRefExp) { visitDefault(variable_SgClassNameRefExp); }
  334379           0 :           virtual void visit(SgFunctionRefExp *variable_SgFunctionRefExp) { visitDefault(variable_SgFunctionRefExp); }
  334380           0 :           virtual void visit(SgMemberFunctionRefExp *variable_SgMemberFunctionRefExp) { visitDefault(variable_SgMemberFunctionRefExp); }
  334381       34899 :           virtual void visit(SgTemplateFunctionRefExp *variable_SgTemplateFunctionRefExp) { visitDefault(variable_SgTemplateFunctionRefExp); }
  334382      107632 :           virtual void visit(SgTemplateMemberFunctionRefExp *variable_SgTemplateMemberFunctionRefExp) { visitDefault(variable_SgTemplateMemberFunctionRefExp); }
  334383       13157 :           virtual void visit(SgSizeOfOp *variable_SgSizeOfOp) { visitDefault(variable_SgSizeOfOp); }
  334384         703 :           virtual void visit(SgAlignOfOp *variable_SgAlignOfOp) { visitDefault(variable_SgAlignOfOp); }
  334385        2484 :           virtual void visit(SgNoexceptOp *variable_SgNoexceptOp) { visitDefault(variable_SgNoexceptOp); }
  334386           0 :           virtual void visit(SgTypeExpression *variable_SgTypeExpression) { visitDefault(variable_SgTypeExpression); }
  334387           0 :           virtual void visit(SgLambdaExp *variable_SgLambdaExp) { visitDefault(variable_SgLambdaExp); }
  334388           0 :           virtual void visit(SgUpcLocalsizeofExpression *variable_SgUpcLocalsizeofExpression) { visitDefault(variable_SgUpcLocalsizeofExpression); }
  334389           0 :           virtual void visit(SgUpcBlocksizeofExpression *variable_SgUpcBlocksizeofExpression) { visitDefault(variable_SgUpcBlocksizeofExpression); }
  334390           0 :           virtual void visit(SgUpcElemsizeofExpression *variable_SgUpcElemsizeofExpression) { visitDefault(variable_SgUpcElemsizeofExpression); }
  334391           0 :           virtual void visit(SgVarArgStartOp *variable_SgVarArgStartOp) { visitDefault(variable_SgVarArgStartOp); }
  334392           0 :           virtual void visit(SgVarArgStartOneOperandOp *variable_SgVarArgStartOneOperandOp) { visitDefault(variable_SgVarArgStartOneOperandOp); }
  334393           0 :           virtual void visit(SgVarArgOp *variable_SgVarArgOp) { visitDefault(variable_SgVarArgOp); }
  334394           0 :           virtual void visit(SgVarArgEndOp *variable_SgVarArgEndOp) { visitDefault(variable_SgVarArgEndOp); }
  334395           0 :           virtual void visit(SgVarArgCopyOp *variable_SgVarArgCopyOp) { visitDefault(variable_SgVarArgCopyOp); }
  334396         137 :           virtual void visit(SgTypeIdOp *variable_SgTypeIdOp) { visitDefault(variable_SgTypeIdOp); }
  334397        9971 :           virtual void visit(SgConditionalExp *variable_SgConditionalExp) { visitDefault(variable_SgConditionalExp); }
  334398        1954 :           virtual void visit(SgNewExp *variable_SgNewExp) { visitDefault(variable_SgNewExp); }
  334399        2055 :           virtual void visit(SgDeleteExp *variable_SgDeleteExp) { visitDefault(variable_SgDeleteExp); }
  334400           0 :           virtual void visit(SgThisExp *variable_SgThisExp) { visitDefault(variable_SgThisExp); }
  334401           0 :           virtual void visit(SgSuperExp *variable_SgSuperExp) { visitDefault(variable_SgSuperExp); }
  334402           0 :           virtual void visit(SgClassExp *variable_SgClassExp) { visitDefault(variable_SgClassExp); }
  334403           0 :           virtual void visit(SgRefExp *variable_SgRefExp) { visitDefault(variable_SgRefExp); }
  334404         411 :           virtual void visit(SgAggregateInitializer *variable_SgAggregateInitializer) { visitDefault(variable_SgAggregateInitializer); }
  334405           0 :           virtual void visit(SgCompoundInitializer *variable_SgCompoundInitializer) { visitDefault(variable_SgCompoundInitializer); }
  334406       66227 :           virtual void visit(SgConstructorInitializer *variable_SgConstructorInitializer) { visitDefault(variable_SgConstructorInitializer); }
  334407      171587 :           virtual void visit(SgAssignInitializer *variable_SgAssignInitializer) { visitDefault(variable_SgAssignInitializer); }
  334408         137 :           virtual void visit(SgBracedInitializer *variable_SgBracedInitializer) { visitDefault(variable_SgBracedInitializer); }
  334409           0 :           virtual void visit(SgExpressionRoot *variable_SgExpressionRoot) { visitDefault(variable_SgExpressionRoot); }
  334410        7928 :           virtual void visit(SgMinusOp *variable_SgMinusOp) { visitDefault(variable_SgMinusOp); }
  334411          18 :           virtual void visit(SgUnaryAddOp *variable_SgUnaryAddOp) { visitDefault(variable_SgUnaryAddOp); }
  334412       30583 :           virtual void visit(SgNotOp *variable_SgNotOp) { visitDefault(variable_SgNotOp); }
  334413       54533 :           virtual void visit(SgPointerDerefExp *variable_SgPointerDerefExp) { visitDefault(variable_SgPointerDerefExp); }
  334414       11649 :           virtual void visit(SgAddressOfOp *variable_SgAddressOfOp) { visitDefault(variable_SgAddressOfOp); }
  334415        6860 :           virtual void visit(SgMinusMinusOp *variable_SgMinusMinusOp) { visitDefault(variable_SgMinusMinusOp); }
  334416       18932 :           virtual void visit(SgPlusPlusOp *variable_SgPlusPlusOp) { visitDefault(variable_SgPlusPlusOp); }
  334417        1669 :           virtual void visit(SgBitComplementOp *variable_SgBitComplementOp) { visitDefault(variable_SgBitComplementOp); }
  334418           0 :           virtual void visit(SgRealPartOp *variable_SgRealPartOp) { visitDefault(variable_SgRealPartOp); }
  334419           0 :           virtual void visit(SgImagPartOp *variable_SgImagPartOp) { visitDefault(variable_SgImagPartOp); }
  334420           0 :           virtual void visit(SgConjugateOp *variable_SgConjugateOp) { visitDefault(variable_SgConjugateOp); }
  334421      317934 :           virtual void visit(SgCastExp *variable_SgCastExp) { visitDefault(variable_SgCastExp); }
  334422        7574 :           virtual void visit(SgThrowOp *variable_SgThrowOp) { visitDefault(variable_SgThrowOp); }
  334423      180989 :           virtual void visit(SgArrowExp *variable_SgArrowExp) { visitDefault(variable_SgArrowExp); }
  334424      121974 :           virtual void visit(SgDotExp *variable_SgDotExp) { visitDefault(variable_SgDotExp); }
  334425        1644 :           virtual void visit(SgDotStarOp *variable_SgDotStarOp) { visitDefault(variable_SgDotStarOp); }
  334426         548 :           virtual void visit(SgArrowStarOp *variable_SgArrowStarOp) { visitDefault(variable_SgArrowStarOp); }
  334427       35174 :           virtual void visit(SgEqualityOp *variable_SgEqualityOp) { visitDefault(variable_SgEqualityOp); }
  334428       19162 :           virtual void visit(SgLessThanOp *variable_SgLessThanOp) { visitDefault(variable_SgLessThanOp); }
  334429       15499 :           virtual void visit(SgGreaterThanOp *variable_SgGreaterThanOp) { visitDefault(variable_SgGreaterThanOp); }
  334430       14594 :           virtual void visit(SgNotEqualOp *variable_SgNotEqualOp) { visitDefault(variable_SgNotEqualOp); }
  334431        4383 :           virtual void visit(SgLessOrEqualOp *variable_SgLessOrEqualOp) { visitDefault(variable_SgLessOrEqualOp); }
  334432        4068 :           virtual void visit(SgGreaterOrEqualOp *variable_SgGreaterOrEqualOp) { visitDefault(variable_SgGreaterOrEqualOp); }
  334433       27993 :           virtual void visit(SgAddOp *variable_SgAddOp) { visitDefault(variable_SgAddOp); }
  334434       30246 :           virtual void visit(SgSubtractOp *variable_SgSubtractOp) { visitDefault(variable_SgSubtractOp); }
  334435        8899 :           virtual void visit(SgMultiplyOp *variable_SgMultiplyOp) { visitDefault(variable_SgMultiplyOp); }
  334436        5351 :           virtual void visit(SgDivideOp *variable_SgDivideOp) { visitDefault(variable_SgDivideOp); }
  334437           0 :           virtual void visit(SgIntegerDivideOp *variable_SgIntegerDivideOp) { visitDefault(variable_SgIntegerDivideOp); }
  334438         822 :           virtual void visit(SgModOp *variable_SgModOp) { visitDefault(variable_SgModOp); }
  334439       24153 :           virtual void visit(SgAndOp *variable_SgAndOp) { visitDefault(variable_SgAndOp); }
  334440       11571 :           virtual void visit(SgOrOp *variable_SgOrOp) { visitDefault(variable_SgOrOp); }
  334441         822 :           virtual void visit(SgBitXorOp *variable_SgBitXorOp) { visitDefault(variable_SgBitXorOp); }
  334442        2780 :           virtual void visit(SgBitAndOp *variable_SgBitAndOp) { visitDefault(variable_SgBitAndOp); }
  334443        2055 :           virtual void visit(SgBitOrOp *variable_SgBitOrOp) { visitDefault(variable_SgBitOrOp); }
  334444           0 :           virtual void visit(SgBitEqvOp *variable_SgBitEqvOp) { visitDefault(variable_SgBitEqvOp); }
  334445        2466 :           virtual void visit(SgCommaOpExp *variable_SgCommaOpExp) { visitDefault(variable_SgCommaOpExp); }
  334446        3771 :           virtual void visit(SgLshiftOp *variable_SgLshiftOp) { visitDefault(variable_SgLshiftOp); }
  334447        1114 :           virtual void visit(SgRshiftOp *variable_SgRshiftOp) { visitDefault(variable_SgRshiftOp); }
  334448       17916 :           virtual void visit(SgPntrArrRefExp *variable_SgPntrArrRefExp) { visitDefault(variable_SgPntrArrRefExp); }
  334449           0 :           virtual void visit(SgScopeOp *variable_SgScopeOp) { visitDefault(variable_SgScopeOp); }
  334450       64721 :           virtual void visit(SgAssignOp *variable_SgAssignOp) { visitDefault(variable_SgAssignOp); }
  334451        4317 :           virtual void visit(SgPlusAssignOp *variable_SgPlusAssignOp) { visitDefault(variable_SgPlusAssignOp); }
  334452        1375 :           virtual void visit(SgMinusAssignOp *variable_SgMinusAssignOp) { visitDefault(variable_SgMinusAssignOp); }
  334453          54 :           virtual void visit(SgAndAssignOp *variable_SgAndAssignOp) { visitDefault(variable_SgAndAssignOp); }
  334454         995 :           virtual void visit(SgIorAssignOp *variable_SgIorAssignOp) { visitDefault(variable_SgIorAssignOp); }
  334455         274 :           virtual void visit(SgMultAssignOp *variable_SgMultAssignOp) { visitDefault(variable_SgMultAssignOp); }
  334456         137 :           virtual void visit(SgDivAssignOp *variable_SgDivAssignOp) { visitDefault(variable_SgDivAssignOp); }
  334457           0 :           virtual void visit(SgModAssignOp *variable_SgModAssignOp) { visitDefault(variable_SgModAssignOp); }
  334458          18 :           virtual void visit(SgXorAssignOp *variable_SgXorAssignOp) { visitDefault(variable_SgXorAssignOp); }
  334459           0 :           virtual void visit(SgLshiftAssignOp *variable_SgLshiftAssignOp) { visitDefault(variable_SgLshiftAssignOp); }
  334460         274 :           virtual void visit(SgRshiftAssignOp *variable_SgRshiftAssignOp) { visitDefault(variable_SgRshiftAssignOp); }
  334461           0 :           virtual void visit(SgIntegerDivideAssignOp *variable_SgIntegerDivideAssignOp) { visitDefault(variable_SgIntegerDivideAssignOp); }
  334462           0 :           virtual void visit(SgExponentiationAssignOp *variable_SgExponentiationAssignOp) { visitDefault(variable_SgExponentiationAssignOp); }
  334463           0 :           virtual void visit(SgConcatenationOp *variable_SgConcatenationOp) { visitDefault(variable_SgConcatenationOp); }
  334464           0 :           virtual void visit(SgNaryComparisonOp *variable_SgNaryComparisonOp) { visitDefault(variable_SgNaryComparisonOp); }
  334465           0 :           virtual void visit(SgNaryBooleanOp *variable_SgNaryBooleanOp) { visitDefault(variable_SgNaryBooleanOp); }
  334466       55071 :           virtual void visit(SgBoolValExp *variable_SgBoolValExp) { visitDefault(variable_SgBoolValExp); }
  334467       11595 :           virtual void visit(SgStringVal *variable_SgStringVal) { visitDefault(variable_SgStringVal); }
  334468           0 :           virtual void visit(SgShortVal *variable_SgShortVal) { visitDefault(variable_SgShortVal); }
  334469        6496 :           virtual void visit(SgCharVal *variable_SgCharVal) { visitDefault(variable_SgCharVal); }
  334470           0 :           virtual void visit(SgUnsignedCharVal *variable_SgUnsignedCharVal) { visitDefault(variable_SgUnsignedCharVal); }
  334471           0 :           virtual void visit(SgWcharVal *variable_SgWcharVal) { visitDefault(variable_SgWcharVal); }
  334472           0 :           virtual void visit(SgChar16Val *variable_SgChar16Val) { visitDefault(variable_SgChar16Val); }
  334473           0 :           virtual void visit(SgChar32Val *variable_SgChar32Val) { visitDefault(variable_SgChar32Val); }
  334474           0 :           virtual void visit(SgUnsignedShortVal *variable_SgUnsignedShortVal) { visitDefault(variable_SgUnsignedShortVal); }
  334475      133448 :           virtual void visit(SgIntVal *variable_SgIntVal) { visitDefault(variable_SgIntVal); }
  334476       77066 :           virtual void visit(SgEnumVal *variable_SgEnumVal) { visitDefault(variable_SgEnumVal); }
  334477        1096 :           virtual void visit(SgUnsignedIntVal *variable_SgUnsignedIntVal) { visitDefault(variable_SgUnsignedIntVal); }
  334478        1781 :           virtual void visit(SgLongIntVal *variable_SgLongIntVal) { visitDefault(variable_SgLongIntVal); }
  334479           0 :           virtual void visit(SgLongLongIntVal *variable_SgLongLongIntVal) { visitDefault(variable_SgLongLongIntVal); }
  334480           0 :           virtual void visit(SgUnsignedLongLongIntVal *variable_SgUnsignedLongLongIntVal) { visitDefault(variable_SgUnsignedLongLongIntVal); }
  334481        2846 :           virtual void visit(SgUnsignedLongVal *variable_SgUnsignedLongVal) { visitDefault(variable_SgUnsignedLongVal); }
  334482         137 :           virtual void visit(SgFloatVal *variable_SgFloatVal) { visitDefault(variable_SgFloatVal); }
  334483         173 :           virtual void visit(SgDoubleVal *variable_SgDoubleVal) { visitDefault(variable_SgDoubleVal); }
  334484           0 :           virtual void visit(SgLongDoubleVal *variable_SgLongDoubleVal) { visitDefault(variable_SgLongDoubleVal); }
  334485           0 :           virtual void visit(SgFloat80Val *variable_SgFloat80Val) { visitDefault(variable_SgFloat80Val); }
  334486           0 :           virtual void visit(SgFloat128Val *variable_SgFloat128Val) { visitDefault(variable_SgFloat128Val); }
  334487         951 :           virtual void visit(SgNullptrValExp *variable_SgNullptrValExp) { visitDefault(variable_SgNullptrValExp); }
  334488           0 :           virtual void visit(SgVoidVal *variable_SgVoidVal) { visitDefault(variable_SgVoidVal); }
  334489        9179 :           virtual void visit(SgFunctionParameterRefExp *variable_SgFunctionParameterRefExp) { visitDefault(variable_SgFunctionParameterRefExp); }
  334490           0 :           virtual void visit(SgTemplateParameterVal *variable_SgTemplateParameterVal) { visitDefault(variable_SgTemplateParameterVal); }
  334491           0 :           virtual void visit(SgUpcThreads *variable_SgUpcThreads) { visitDefault(variable_SgUpcThreads); }
  334492           0 :           virtual void visit(SgUpcMythread *variable_SgUpcMythread) { visitDefault(variable_SgUpcMythread); }
  334493           0 :           virtual void visit(SgComplexVal *variable_SgComplexVal) { visitDefault(variable_SgComplexVal); }
  334494       17374 :           virtual void visit(SgNullExpression *variable_SgNullExpression) { visitDefault(variable_SgNullExpression); }
  334495           0 :           virtual void visit(SgVariantExpression *variable_SgVariantExpression) { visitDefault(variable_SgVariantExpression); }
  334496           0 :           virtual void visit(SgStatementExpression *variable_SgStatementExpression) { visitDefault(variable_SgStatementExpression); }
  334497           0 :           virtual void visit(SgAsmOp *variable_SgAsmOp) { visitDefault(variable_SgAsmOp); }
  334498           0 :           virtual void visit(SgCudaKernelExecConfig *variable_SgCudaKernelExecConfig) { visitDefault(variable_SgCudaKernelExecConfig); }
  334499           0 :           virtual void visit(SgCudaKernelCallExp *variable_SgCudaKernelCallExp) { visitDefault(variable_SgCudaKernelCallExp); }
  334500           0 :           virtual void visit(SgLambdaRefExp *variable_SgLambdaRefExp) { visitDefault(variable_SgLambdaRefExp); }
  334501           0 :           virtual void visit(SgTupleExp *variable_SgTupleExp) { visitDefault(variable_SgTupleExp); }
  334502           0 :           virtual void visit(SgListExp *variable_SgListExp) { visitDefault(variable_SgListExp); }
  334503           0 :           virtual void visit(SgDictionaryExp *variable_SgDictionaryExp) { visitDefault(variable_SgDictionaryExp); }
  334504           0 :           virtual void visit(SgKeyDatumPair *variable_SgKeyDatumPair) { visitDefault(variable_SgKeyDatumPair); }
  334505           0 :           virtual void visit(SgComprehension *variable_SgComprehension) { visitDefault(variable_SgComprehension); }
  334506           0 :           virtual void visit(SgListComprehension *variable_SgListComprehension) { visitDefault(variable_SgListComprehension); }
  334507           0 :           virtual void visit(SgSetComprehension *variable_SgSetComprehension) { visitDefault(variable_SgSetComprehension); }
  334508           0 :           virtual void visit(SgDictionaryComprehension *variable_SgDictionaryComprehension) { visitDefault(variable_SgDictionaryComprehension); }
  334509           0 :           virtual void visit(SgMembershipOp *variable_SgMembershipOp) { visitDefault(variable_SgMembershipOp); }
  334510           0 :           virtual void visit(SgNonMembershipOp *variable_SgNonMembershipOp) { visitDefault(variable_SgNonMembershipOp); }
  334511           0 :           virtual void visit(SgIsOp *variable_SgIsOp) { visitDefault(variable_SgIsOp); }
  334512           0 :           virtual void visit(SgIsNotOp *variable_SgIsNotOp) { visitDefault(variable_SgIsNotOp); }
  334513           0 :           virtual void visit(SgStringConversion *variable_SgStringConversion) { visitDefault(variable_SgStringConversion); }
  334514           0 :           virtual void visit(SgYieldExpression *variable_SgYieldExpression) { visitDefault(variable_SgYieldExpression); }
  334515           0 :           virtual void visit(SgFoldExpression *variable_SgFoldExpression) { visitDefault(variable_SgFoldExpression); }
  334516           0 :           virtual void visit(SgChooseExpression *variable_SgChooseExpression) { visitDefault(variable_SgChooseExpression); }
  334517           0 :           virtual void visit(SgAwaitExpression *variable_SgAwaitExpression) { visitDefault(variable_SgAwaitExpression); }
  334518           0 :           virtual void visit(SgSpaceshipOp *variable_SgSpaceshipOp) { visitDefault(variable_SgSpaceshipOp); }
  334519           0 :           virtual void visit(SgSubscriptExpression *variable_SgSubscriptExpression) { visitDefault(variable_SgSubscriptExpression); }
  334520           0 :           virtual void visit(SgColonShapeExp *variable_SgColonShapeExp) { visitDefault(variable_SgColonShapeExp); }
  334521           0 :           virtual void visit(SgAsteriskShapeExp *variable_SgAsteriskShapeExp) { visitDefault(variable_SgAsteriskShapeExp); }
  334522           0 :           virtual void visit(SgIOItemExpression *variable_SgIOItemExpression) { visitDefault(variable_SgIOItemExpression); }
  334523           0 :           virtual void visit(SgImpliedDo *variable_SgImpliedDo) { visitDefault(variable_SgImpliedDo); }
  334524           0 :           virtual void visit(SgExponentiationOp *variable_SgExponentiationOp) { visitDefault(variable_SgExponentiationOp); }
  334525           0 :           virtual void visit(SgUnknownArrayOrFunctionReference *variable_SgUnknownArrayOrFunctionReference) { visitDefault(variable_SgUnknownArrayOrFunctionReference); }
  334526           0 :           virtual void visit(SgActualArgumentExpression *variable_SgActualArgumentExpression) { visitDefault(variable_SgActualArgumentExpression); }
  334527           0 :           virtual void visit(SgUserDefinedBinaryOp *variable_SgUserDefinedBinaryOp) { visitDefault(variable_SgUserDefinedBinaryOp); }
  334528           0 :           virtual void visit(SgPointerAssignOp *variable_SgPointerAssignOp) { visitDefault(variable_SgPointerAssignOp); }
  334529           0 :           virtual void visit(SgCAFCoExpression *variable_SgCAFCoExpression) { visitDefault(variable_SgCAFCoExpression); }
  334530           0 :           virtual void visit(SgDesignatedInitializer *variable_SgDesignatedInitializer) { visitDefault(variable_SgDesignatedInitializer); }
  334531           0 :           virtual void visit(SgMatrixExp *variable_SgMatrixExp) { visitDefault(variable_SgMatrixExp); }
  334532           0 :           virtual void visit(SgRangeExp *variable_SgRangeExp) { visitDefault(variable_SgRangeExp); }
  334533           0 :           virtual void visit(SgMagicColonExp *variable_SgMagicColonExp) { visitDefault(variable_SgMagicColonExp); }
  334534           0 :           virtual void visit(SgElementwiseMultiplyOp *variable_SgElementwiseMultiplyOp) { visitDefault(variable_SgElementwiseMultiplyOp); }
  334535           0 :           virtual void visit(SgPowerOp *variable_SgPowerOp) { visitDefault(variable_SgPowerOp); }
  334536           0 :           virtual void visit(SgElementwisePowerOp *variable_SgElementwisePowerOp) { visitDefault(variable_SgElementwisePowerOp); }
  334537           0 :           virtual void visit(SgElementwiseDivideOp *variable_SgElementwiseDivideOp) { visitDefault(variable_SgElementwiseDivideOp); }
  334538           0 :           virtual void visit(SgLeftDivideOp *variable_SgLeftDivideOp) { visitDefault(variable_SgLeftDivideOp); }
  334539           0 :           virtual void visit(SgElementwiseLeftDivideOp *variable_SgElementwiseLeftDivideOp) { visitDefault(variable_SgElementwiseLeftDivideOp); }
  334540           0 :           virtual void visit(SgElementwiseAddOp *variable_SgElementwiseAddOp) { visitDefault(variable_SgElementwiseAddOp); }
  334541           0 :           virtual void visit(SgElementwiseSubtractOp *variable_SgElementwiseSubtractOp) { visitDefault(variable_SgElementwiseSubtractOp); }
  334542           0 :           virtual void visit(SgMatrixTransposeOp *variable_SgMatrixTransposeOp) { visitDefault(variable_SgMatrixTransposeOp); }
  334543           0 :           virtual void visit(SgElementwiseOp *variable_SgElementwiseOp) { visitDefault(variable_SgElementwiseOp); }
  334544           0 :           virtual void visit(SgInitializer *variable_SgInitializer) { visitDefault(variable_SgInitializer); }
  334545           0 :           virtual void visit(SgSIMDLoad *variable_SgSIMDLoad) { visitDefault(variable_SgSIMDLoad); }
  334546           0 :           virtual void visit(SgSIMDBroadcast *variable_SgSIMDBroadcast) { visitDefault(variable_SgSIMDBroadcast); }
  334547           0 :           virtual void visit(SgSIMDStore *variable_SgSIMDStore) { visitDefault(variable_SgSIMDStore); }
  334548           0 :           virtual void visit(SgSIMDPartialStore *variable_SgSIMDPartialStore) { visitDefault(variable_SgSIMDPartialStore); }
  334549           0 :           virtual void visit(SgSIMDScalarStore *variable_SgSIMDScalarStore) { visitDefault(variable_SgSIMDScalarStore); }
  334550           0 :           virtual void visit(SgSIMDGather *variable_SgSIMDGather) { visitDefault(variable_SgSIMDGather); }
  334551           0 :           virtual void visit(SgSIMDExplicitGather *variable_SgSIMDExplicitGather) { visitDefault(variable_SgSIMDExplicitGather); }
  334552           0 :           virtual void visit(SgSIMDScatter *variable_SgSIMDScatter) { visitDefault(variable_SgSIMDScatter); }
  334553           0 :           virtual void visit(SgSIMDAddOp *variable_SgSIMDAddOp) { visitDefault(variable_SgSIMDAddOp); }
  334554           0 :           virtual void visit(SgSIMDSubOp *variable_SgSIMDSubOp) { visitDefault(variable_SgSIMDSubOp); }
  334555           0 :           virtual void visit(SgSIMDMulOp *variable_SgSIMDMulOp) { visitDefault(variable_SgSIMDMulOp); }
  334556           0 :           virtual void visit(SgSIMDDivOp *variable_SgSIMDDivOp) { visitDefault(variable_SgSIMDDivOp); }
  334557           0 :           virtual void visit(SgSIMDFmaOp *variable_SgSIMDFmaOp) { visitDefault(variable_SgSIMDFmaOp); }
  334558           0 :           virtual void visit(SgSIMDBinaryOp *variable_SgSIMDBinaryOp) { visitDefault(variable_SgSIMDBinaryOp); }
  334559           0 :           virtual void visit(SgUserDefinedUnaryOp *variable_SgUserDefinedUnaryOp) { visitDefault(variable_SgUserDefinedUnaryOp); }
  334560           0 :           virtual void visit(SgPseudoDestructorRefExp *variable_SgPseudoDestructorRefExp) { visitDefault(variable_SgPseudoDestructorRefExp); }
  334561           0 :           virtual void visit(SgUnaryOp *variable_SgUnaryOp) { visitDefault(variable_SgUnaryOp); }
  334562           0 :           virtual void visit(SgCompoundAssignOp *variable_SgCompoundAssignOp) { visitDefault(variable_SgCompoundAssignOp); }
  334563           0 :           virtual void visit(SgBinaryOp *variable_SgBinaryOp) { visitDefault(variable_SgBinaryOp); }
  334564           0 :           virtual void visit(SgNaryOp *variable_SgNaryOp) { visitDefault(variable_SgNaryOp); }
  334565           0 :           virtual void visit(SgValueExp *variable_SgValueExp) { visitDefault(variable_SgValueExp); }
  334566      527761 :           virtual void visit(SgExprListExp *variable_SgExprListExp) { visitDefault(variable_SgExprListExp); }
  334567      460372 :           virtual void visit(SgFunctionCallExp *variable_SgFunctionCallExp) { visitDefault(variable_SgFunctionCallExp); }
  334568           0 :           virtual void visit(SgCallExpression *variable_SgCallExpression) { visitDefault(variable_SgCallExpression); }
  334569        5898 :           virtual void visit(SgTypeTraitBuiltinOperator *variable_SgTypeTraitBuiltinOperator) { visitDefault(variable_SgTypeTraitBuiltinOperator); }
  334570           0 :           virtual void visit(SgExpression *variable_SgExpression) { visitDefault(variable_SgExpression); }
  334571       11765 :           virtual void visit(SgTemplateVariableSymbol *variable_SgTemplateVariableSymbol) { visitDefault(variable_SgTemplateVariableSymbol); }
  334572      588259 :           virtual void visit(SgVariableSymbol *variable_SgVariableSymbol) { visitDefault(variable_SgVariableSymbol); }
  334573     1199240 :           virtual void visit(SgFunctionTypeSymbol *variable_SgFunctionTypeSymbol) { visitDefault(variable_SgFunctionTypeSymbol); }
  334574       78742 :           virtual void visit(SgTemplateClassSymbol *variable_SgTemplateClassSymbol) { visitDefault(variable_SgTemplateClassSymbol); }
  334575      116994 :           virtual void visit(SgClassSymbol *variable_SgClassSymbol) { visitDefault(variable_SgClassSymbol); }
  334576           0 :           virtual void visit(SgTemplateSymbol *variable_SgTemplateSymbol) { visitDefault(variable_SgTemplateSymbol); }
  334577       12142 :           virtual void visit(SgEnumSymbol *variable_SgEnumSymbol) { visitDefault(variable_SgEnumSymbol); }
  334578       38530 :           virtual void visit(SgEnumFieldSymbol *variable_SgEnumFieldSymbol) { visitDefault(variable_SgEnumFieldSymbol); }
  334579       21957 :           virtual void visit(SgTemplateTypedefSymbol *variable_SgTemplateTypedefSymbol) { visitDefault(variable_SgTemplateTypedefSymbol); }
  334580      223774 :           virtual void visit(SgTypedefSymbol *variable_SgTypedefSymbol) { visitDefault(variable_SgTypedefSymbol); }
  334581       47426 :           virtual void visit(SgTemplateFunctionSymbol *variable_SgTemplateFunctionSymbol) { visitDefault(variable_SgTemplateFunctionSymbol); }
  334582      148443 :           virtual void visit(SgTemplateMemberFunctionSymbol *variable_SgTemplateMemberFunctionSymbol) { visitDefault(variable_SgTemplateMemberFunctionSymbol); }
  334583          36 :           virtual void visit(SgLabelSymbol *variable_SgLabelSymbol) { visitDefault(variable_SgLabelSymbol); }
  334584           0 :           virtual void visit(SgDefaultSymbol *variable_SgDefaultSymbol) { visitDefault(variable_SgDefaultSymbol); }
  334585        1918 :           virtual void visit(SgNamespaceSymbol *variable_SgNamespaceSymbol) { visitDefault(variable_SgNamespaceSymbol); }
  334586           0 :           virtual void visit(SgIntrinsicSymbol *variable_SgIntrinsicSymbol) { visitDefault(variable_SgIntrinsicSymbol); }
  334587           0 :           virtual void visit(SgModuleSymbol *variable_SgModuleSymbol) { visitDefault(variable_SgModuleSymbol); }
  334588           0 :           virtual void visit(SgInterfaceSymbol *variable_SgInterfaceSymbol) { visitDefault(variable_SgInterfaceSymbol); }
  334589           0 :           virtual void visit(SgCommonSymbol *variable_SgCommonSymbol) { visitDefault(variable_SgCommonSymbol); }
  334590           0 :           virtual void visit(SgRenameSymbol *variable_SgRenameSymbol) { visitDefault(variable_SgRenameSymbol); }
  334591      269492 :           virtual void visit(SgMemberFunctionSymbol *variable_SgMemberFunctionSymbol) { visitDefault(variable_SgMemberFunctionSymbol); }
  334592      627371 :           virtual void visit(SgFunctionSymbol *variable_SgFunctionSymbol) { visitDefault(variable_SgFunctionSymbol); }
  334593     2042220 :           virtual void visit(SgAliasSymbol *variable_SgAliasSymbol) { visitDefault(variable_SgAliasSymbol); }
  334594      704852 :           virtual void visit(SgNonrealSymbol *variable_SgNonrealSymbol) { visitDefault(variable_SgNonrealSymbol); }
  334595           0 :           virtual void visit(SgSymbol *variable_SgSymbol) { visitDefault(variable_SgSymbol); }
  334596           0 :           virtual void visit(SgCommonBlockObject *variable_SgCommonBlockObject) { visitDefault(variable_SgCommonBlockObject); }
  334597           0 :           virtual void visit(SgInitializedName *variable_SgInitializedName) { visitDefault(variable_SgInitializedName); }
  334598           0 :           virtual void visit(SgLambdaCapture *variable_SgLambdaCapture) { visitDefault(variable_SgLambdaCapture); }
  334599           0 :           virtual void visit(SgLambdaCaptureList *variable_SgLambdaCaptureList) { visitDefault(variable_SgLambdaCaptureList); }
  334600           0 :           virtual void visit(SgOmpOrderedClause *variable_SgOmpOrderedClause) { visitDefault(variable_SgOmpOrderedClause); }
  334601           0 :           virtual void visit(SgOmpNowaitClause *variable_SgOmpNowaitClause) { visitDefault(variable_SgOmpNowaitClause); }
  334602           0 :           virtual void visit(SgOmpNogroupClause *variable_SgOmpNogroupClause) { visitDefault(variable_SgOmpNogroupClause); }
  334603           0 :           virtual void visit(SgOmpReadClause *variable_SgOmpReadClause) { visitDefault(variable_SgOmpReadClause); }
  334604           0 :           virtual void visit(SgOmpThreadsClause *variable_SgOmpThreadsClause) { visitDefault(variable_SgOmpThreadsClause); }
  334605           0 :           virtual void visit(SgOmpSimdClause *variable_SgOmpSimdClause) { visitDefault(variable_SgOmpSimdClause); }
  334606           0 :           virtual void visit(SgOmpReverseOffloadClause *variable_SgOmpReverseOffloadClause) { visitDefault(variable_SgOmpReverseOffloadClause); }
  334607           0 :           virtual void visit(SgOmpExtImplementationDefinedRequirementClause *variable_SgOmpExtImplementationDefinedRequirementClause) { visitDefault(variable_SgOmpExtImplementationDefinedRequirementClause); }
  334608           0 :           virtual void visit(SgOmpUnifiedAddressClause *variable_SgOmpUnifiedAddressClause) { visitDefault(variable_SgOmpUnifiedAddressClause); }
  334609           0 :           virtual void visit(SgOmpUnifiedSharedMemoryClause *variable_SgOmpUnifiedSharedMemoryClause) { visitDefault(variable_SgOmpUnifiedSharedMemoryClause); }
  334610           0 :           virtual void visit(SgOmpDynamicAllocatorsClause *variable_SgOmpDynamicAllocatorsClause) { visitDefault(variable_SgOmpDynamicAllocatorsClause); }
  334611           0 :           virtual void visit(SgOmpAtomicDefaultMemOrderClause *variable_SgOmpAtomicDefaultMemOrderClause) { visitDefault(variable_SgOmpAtomicDefaultMemOrderClause); }
  334612           0 :           virtual void visit(SgOmpWriteClause *variable_SgOmpWriteClause) { visitDefault(variable_SgOmpWriteClause); }
  334613           0 :           virtual void visit(SgOmpUpdateClause *variable_SgOmpUpdateClause) { visitDefault(variable_SgOmpUpdateClause); }
  334614           0 :           virtual void visit(SgOmpDepobjUpdateClause *variable_SgOmpDepobjUpdateClause) { visitDefault(variable_SgOmpDepobjUpdateClause); }
  334615           0 :           virtual void visit(SgOmpDestroyClause *variable_SgOmpDestroyClause) { visitDefault(variable_SgOmpDestroyClause); }
  334616           0 :           virtual void visit(SgOmpCaptureClause *variable_SgOmpCaptureClause) { visitDefault(variable_SgOmpCaptureClause); }
  334617           0 :           virtual void visit(SgOmpSeqCstClause *variable_SgOmpSeqCstClause) { visitDefault(variable_SgOmpSeqCstClause); }
  334618           0 :           virtual void visit(SgOmpAcqRelClause *variable_SgOmpAcqRelClause) { visitDefault(variable_SgOmpAcqRelClause); }
  334619           0 :           virtual void visit(SgOmpReleaseClause *variable_SgOmpReleaseClause) { visitDefault(variable_SgOmpReleaseClause); }
  334620           0 :           virtual void visit(SgOmpAcquireClause *variable_SgOmpAcquireClause) { visitDefault(variable_SgOmpAcquireClause); }
  334621           0 :           virtual void visit(SgOmpRelaxedClause *variable_SgOmpRelaxedClause) { visitDefault(variable_SgOmpRelaxedClause); }
  334622           0 :           virtual void visit(SgOmpParallelClause *variable_SgOmpParallelClause) { visitDefault(variable_SgOmpParallelClause); }
  334623           0 :           virtual void visit(SgOmpSectionsClause *variable_SgOmpSectionsClause) { visitDefault(variable_SgOmpSectionsClause); }
  334624           0 :           virtual void visit(SgOmpForClause *variable_SgOmpForClause) { visitDefault(variable_SgOmpForClause); }
  334625           0 :           virtual void visit(SgOmpTaskgroupClause *variable_SgOmpTaskgroupClause) { visitDefault(variable_SgOmpTaskgroupClause); }
  334626           0 :           virtual void visit(SgOmpBeginClause *variable_SgOmpBeginClause) { visitDefault(variable_SgOmpBeginClause); }
  334627           0 :           virtual void visit(SgOmpEndClause *variable_SgOmpEndClause) { visitDefault(variable_SgOmpEndClause); }
  334628           0 :           virtual void visit(SgOmpUntiedClause *variable_SgOmpUntiedClause) { visitDefault(variable_SgOmpUntiedClause); }
  334629           0 :           virtual void visit(SgOmpMergeableClause *variable_SgOmpMergeableClause) { visitDefault(variable_SgOmpMergeableClause); }
  334630           0 :           virtual void visit(SgOmpDefaultClause *variable_SgOmpDefaultClause) { visitDefault(variable_SgOmpDefaultClause); }
  334631           0 :           virtual void visit(SgOmpAtomicClause *variable_SgOmpAtomicClause) { visitDefault(variable_SgOmpAtomicClause); }
  334632           0 :           virtual void visit(SgOmpProcBindClause *variable_SgOmpProcBindClause) { visitDefault(variable_SgOmpProcBindClause); }
  334633           0 :           virtual void visit(SgOmpOrderClause *variable_SgOmpOrderClause) { visitDefault(variable_SgOmpOrderClause); }
  334634           0 :           virtual void visit(SgOmpBindClause *variable_SgOmpBindClause) { visitDefault(variable_SgOmpBindClause); }
  334635           0 :           virtual void visit(SgOmpInbranchClause *variable_SgOmpInbranchClause) { visitDefault(variable_SgOmpInbranchClause); }
  334636           0 :           virtual void visit(SgOmpNotinbranchClause *variable_SgOmpNotinbranchClause) { visitDefault(variable_SgOmpNotinbranchClause); }
  334637           0 :           virtual void visit(SgOmpCollapseClause *variable_SgOmpCollapseClause) { visitDefault(variable_SgOmpCollapseClause); }
  334638           0 :           virtual void visit(SgOmpIfClause *variable_SgOmpIfClause) { visitDefault(variable_SgOmpIfClause); }
  334639           0 :           virtual void visit(SgOmpFinalClause *variable_SgOmpFinalClause) { visitDefault(variable_SgOmpFinalClause); }
  334640           0 :           virtual void visit(SgOmpPriorityClause *variable_SgOmpPriorityClause) { visitDefault(variable_SgOmpPriorityClause); }
  334641           0 :           virtual void visit(SgUpirNumUnitsField *variable_SgUpirNumUnitsField) { visitDefault(variable_SgUpirNumUnitsField); }
  334642           0 :           virtual void visit(SgOmpNumTeamsClause *variable_SgOmpNumTeamsClause) { visitDefault(variable_SgOmpNumTeamsClause); }
  334643           0 :           virtual void visit(SgOmpGrainsizeClause *variable_SgOmpGrainsizeClause) { visitDefault(variable_SgOmpGrainsizeClause); }
  334644           0 :           virtual void visit(SgOmpDetachClause *variable_SgOmpDetachClause) { visitDefault(variable_SgOmpDetachClause); }
  334645           0 :           virtual void visit(SgOmpNumTasksClause *variable_SgOmpNumTasksClause) { visitDefault(variable_SgOmpNumTasksClause); }
  334646           0 :           virtual void visit(SgOmpHintClause *variable_SgOmpHintClause) { visitDefault(variable_SgOmpHintClause); }
  334647           0 :           virtual void visit(SgOmpThreadLimitClause *variable_SgOmpThreadLimitClause) { visitDefault(variable_SgOmpThreadLimitClause); }
  334648           0 :           virtual void visit(SgOmpNontemporalClause *variable_SgOmpNontemporalClause) { visitDefault(variable_SgOmpNontemporalClause); }
  334649           0 :           virtual void visit(SgOmpInclusiveClause *variable_SgOmpInclusiveClause) { visitDefault(variable_SgOmpInclusiveClause); }
  334650           0 :           virtual void visit(SgOmpExclusiveClause *variable_SgOmpExclusiveClause) { visitDefault(variable_SgOmpExclusiveClause); }
  334651           0 :           virtual void visit(SgOmpIsDevicePtrClause *variable_SgOmpIsDevicePtrClause) { visitDefault(variable_SgOmpIsDevicePtrClause); }
  334652           0 :           virtual void visit(SgOmpUseDevicePtrClause *variable_SgOmpUseDevicePtrClause) { visitDefault(variable_SgOmpUseDevicePtrClause); }
  334653           0 :           virtual void visit(SgOmpUseDeviceAddrClause *variable_SgOmpUseDeviceAddrClause) { visitDefault(variable_SgOmpUseDeviceAddrClause); }
  334654           0 :           virtual void visit(SgOmpDeviceClause *variable_SgOmpDeviceClause) { visitDefault(variable_SgOmpDeviceClause); }
  334655           0 :           virtual void visit(SgOmpSafelenClause *variable_SgOmpSafelenClause) { visitDefault(variable_SgOmpSafelenClause); }
  334656           0 :           virtual void visit(SgOmpSimdlenClause *variable_SgOmpSimdlenClause) { visitDefault(variable_SgOmpSimdlenClause); }
  334657           0 :           virtual void visit(SgOmpPartialClause *variable_SgOmpPartialClause) { visitDefault(variable_SgOmpPartialClause); }
  334658           0 :           virtual void visit(SgOmpFullClause *variable_SgOmpFullClause) { visitDefault(variable_SgOmpFullClause); }
  334659           0 :           virtual void visit(SgOmpSizesClause *variable_SgOmpSizesClause) { visitDefault(variable_SgOmpSizesClause); }
  334660           0 :           virtual void visit(SgUpirBranchField *variable_SgUpirBranchField) { visitDefault(variable_SgUpirBranchField); }
  334661           0 :           virtual void visit(SgUpirNestedLevelField *variable_SgUpirNestedLevelField) { visitDefault(variable_SgUpirNestedLevelField); }
  334662           0 :           virtual void visit(SgUpirNestedParentField *variable_SgUpirNestedParentField) { visitDefault(variable_SgUpirNestedParentField); }
  334663           0 :           virtual void visit(SgUpirNestedChildField *variable_SgUpirNestedChildField) { visitDefault(variable_SgUpirNestedChildField); }
  334664           0 :           virtual void visit(SgUpirSyncField *variable_SgUpirSyncField) { visitDefault(variable_SgUpirSyncField); }
  334665           0 :           virtual void visit(SgUpirDataField *variable_SgUpirDataField) { visitDefault(variable_SgUpirDataField); }
  334666           0 :           virtual void visit(SgUpirTargetField *variable_SgUpirTargetField) { visitDefault(variable_SgUpirTargetField); }
  334667           0 :           virtual void visit(SgUpirDataItemField *variable_SgUpirDataItemField) { visitDefault(variable_SgUpirDataItemField); }
  334668           0 :           virtual void visit(SgOmpExpressionClause *variable_SgOmpExpressionClause) { visitDefault(variable_SgOmpExpressionClause); }
  334669           0 :           virtual void visit(SgOmpCopyprivateClause *variable_SgOmpCopyprivateClause) { visitDefault(variable_SgOmpCopyprivateClause); }
  334670           0 :           virtual void visit(SgOmpPrivateClause *variable_SgOmpPrivateClause) { visitDefault(variable_SgOmpPrivateClause); }
  334671           0 :           virtual void visit(SgOmpFirstprivateClause *variable_SgOmpFirstprivateClause) { visitDefault(variable_SgOmpFirstprivateClause); }
  334672           0 :           virtual void visit(SgOmpSharedClause *variable_SgOmpSharedClause) { visitDefault(variable_SgOmpSharedClause); }
  334673           0 :           virtual void visit(SgOmpCopyinClause *variable_SgOmpCopyinClause) { visitDefault(variable_SgOmpCopyinClause); }
  334674           0 :           virtual void visit(SgOmpLastprivateClause *variable_SgOmpLastprivateClause) { visitDefault(variable_SgOmpLastprivateClause); }
  334675           0 :           virtual void visit(SgOmpReductionClause *variable_SgOmpReductionClause) { visitDefault(variable_SgOmpReductionClause); }
  334676           0 :           virtual void visit(SgOmpInReductionClause *variable_SgOmpInReductionClause) { visitDefault(variable_SgOmpInReductionClause); }
  334677           0 :           virtual void visit(SgOmpTaskReductionClause *variable_SgOmpTaskReductionClause) { visitDefault(variable_SgOmpTaskReductionClause); }
  334678           0 :           virtual void visit(SgOmpAllocateClause *variable_SgOmpAllocateClause) { visitDefault(variable_SgOmpAllocateClause); }
  334679           0 :           virtual void visit(SgOmpDependClause *variable_SgOmpDependClause) { visitDefault(variable_SgOmpDependClause); }
  334680           0 :           virtual void visit(SgOmpToClause *variable_SgOmpToClause) { visitDefault(variable_SgOmpToClause); }
  334681           0 :           virtual void visit(SgOmpUsesAllocatorsClause *variable_SgOmpUsesAllocatorsClause) { visitDefault(variable_SgOmpUsesAllocatorsClause); }
  334682           0 :           virtual void visit(SgOmpFromClause *variable_SgOmpFromClause) { visitDefault(variable_SgOmpFromClause); }
  334683           0 :           virtual void visit(SgOmpAffinityClause *variable_SgOmpAffinityClause) { visitDefault(variable_SgOmpAffinityClause); }
  334684           0 :           virtual void visit(SgOmpMapClause *variable_SgOmpMapClause) { visitDefault(variable_SgOmpMapClause); }
  334685           0 :           virtual void visit(SgOmpLinearClause *variable_SgOmpLinearClause) { visitDefault(variable_SgOmpLinearClause); }
  334686           0 :           virtual void visit(SgOmpUniformClause *variable_SgOmpUniformClause) { visitDefault(variable_SgOmpUniformClause); }
  334687           0 :           virtual void visit(SgOmpAlignedClause *variable_SgOmpAlignedClause) { visitDefault(variable_SgOmpAlignedClause); }
  334688           0 :           virtual void visit(SgOmpVariablesClause *variable_SgOmpVariablesClause) { visitDefault(variable_SgOmpVariablesClause); }
  334689           0 :           virtual void visit(SgOmpScheduleClause *variable_SgOmpScheduleClause) { visitDefault(variable_SgOmpScheduleClause); }
  334690           0 :           virtual void visit(SgOmpWhenClause *variable_SgOmpWhenClause) { visitDefault(variable_SgOmpWhenClause); }
  334691           0 :           virtual void visit(SgOmpDistScheduleClause *variable_SgOmpDistScheduleClause) { visitDefault(variable_SgOmpDistScheduleClause); }
  334692           0 :           virtual void visit(SgOmpDefaultmapClause *variable_SgOmpDefaultmapClause) { visitDefault(variable_SgOmpDefaultmapClause); }
  334693           0 :           virtual void visit(SgOmpAllocatorClause *variable_SgOmpAllocatorClause) { visitDefault(variable_SgOmpAllocatorClause); }
  334694           0 :           virtual void visit(SgOmpUsesAllocatorsDefination *variable_SgOmpUsesAllocatorsDefination) { visitDefault(variable_SgOmpUsesAllocatorsDefination); }
  334695           0 :           virtual void visit(SgOmpClause *variable_SgOmpClause) { visitDefault(variable_SgOmpClause); }
  334696           0 :           virtual void visit(SgRenamePair *variable_SgRenamePair) { visitDefault(variable_SgRenamePair); }
  334697           0 :           virtual void visit(SgInterfaceBody *variable_SgInterfaceBody) { visitDefault(variable_SgInterfaceBody); }
  334698           0 :           virtual void visit(SgHeaderFileBody *variable_SgHeaderFileBody) { visitDefault(variable_SgHeaderFileBody); }
  334699           0 :           virtual void visit(SgLocatedNodeSupport *variable_SgLocatedNodeSupport) { visitDefault(variable_SgLocatedNodeSupport); }
  334700           0 :           virtual void visit(SgToken *variable_SgToken) { visitDefault(variable_SgToken); }
  334701           0 :           virtual void visit(SgLocatedNode *variable_SgLocatedNode) { visitDefault(variable_SgLocatedNode); }
  334702           0 :           virtual void visit(SgNode *variable_SgNode) { visitDefault(variable_SgNode); }
  334703   105091000 :     virtual void visitDefault(SgNode*) {}
  334704             : };
  334705             : 
  334706           0 : class ROSE_VisitorPatternDefaultBase : public ROSE_VisitorPattern  {
  334707             : public:
  334708           0 :           void visit(SgName *variable_SgName) { visit(static_cast<SgName::base_node_type *>(variable_SgName)); }
  334709           0 :           void visit(SgSymbolTable *variable_SgSymbolTable) { visit(static_cast<SgSymbolTable::base_node_type *>(variable_SgSymbolTable)); }
  334710           0 :           void visit(SgPragma *variable_SgPragma) { visit(static_cast<SgPragma::base_node_type *>(variable_SgPragma)); }
  334711           0 :           void visit(SgModifierNodes *variable_SgModifierNodes) { visit(static_cast<SgModifierNodes::base_node_type *>(variable_SgModifierNodes)); }
  334712           0 :           void visit(SgConstVolatileModifier *variable_SgConstVolatileModifier) { visit(static_cast<SgConstVolatileModifier::base_node_type *>(variable_SgConstVolatileModifier)); }
  334713           0 :           void visit(SgStorageModifier *variable_SgStorageModifier) { visit(static_cast<SgStorageModifier::base_node_type *>(variable_SgStorageModifier)); }
  334714           0 :           void visit(SgAccessModifier *variable_SgAccessModifier) { visit(static_cast<SgAccessModifier::base_node_type *>(variable_SgAccessModifier)); }
  334715           0 :           void visit(SgFunctionModifier *variable_SgFunctionModifier) { visit(static_cast<SgFunctionModifier::base_node_type *>(variable_SgFunctionModifier)); }
  334716           0 :           void visit(SgUPC_AccessModifier *variable_SgUPC_AccessModifier) { visit(static_cast<SgUPC_AccessModifier::base_node_type *>(variable_SgUPC_AccessModifier)); }
  334717           0 :           void visit(SgLinkageModifier *variable_SgLinkageModifier) { visit(static_cast<SgLinkageModifier::base_node_type *>(variable_SgLinkageModifier)); }
  334718           0 :           void visit(SgSpecialFunctionModifier *variable_SgSpecialFunctionModifier) { visit(static_cast<SgSpecialFunctionModifier::base_node_type *>(variable_SgSpecialFunctionModifier)); }
  334719           0 :           void visit(SgTypeModifier *variable_SgTypeModifier) { visit(static_cast<SgTypeModifier::base_node_type *>(variable_SgTypeModifier)); }
  334720           0 :           void visit(SgElaboratedTypeModifier *variable_SgElaboratedTypeModifier) { visit(static_cast<SgElaboratedTypeModifier::base_node_type *>(variable_SgElaboratedTypeModifier)); }
  334721           0 :           void visit(SgBaseClassModifier *variable_SgBaseClassModifier) { visit(static_cast<SgBaseClassModifier::base_node_type *>(variable_SgBaseClassModifier)); }
  334722           0 :           void visit(SgDeclarationModifier *variable_SgDeclarationModifier) { visit(static_cast<SgDeclarationModifier::base_node_type *>(variable_SgDeclarationModifier)); }
  334723           0 :           void visit(SgStructureModifier *variable_SgStructureModifier) { visit(static_cast<SgStructureModifier::base_node_type *>(variable_SgStructureModifier)); }
  334724           0 :           void visit(SgOpenclAccessModeModifier *variable_SgOpenclAccessModeModifier) { visit(static_cast<SgOpenclAccessModeModifier::base_node_type *>(variable_SgOpenclAccessModeModifier)); }
  334725           0 :           void visit(SgModifier *variable_SgModifier) { visit(static_cast<SgModifier::base_node_type *>(variable_SgModifier)); }
  334726           0 :           void visit(Sg_File_Info *variable_Sg_File_Info) { visit(static_cast<Sg_File_Info::base_node_type *>(variable_Sg_File_Info)); }
  334727           0 :           void visit(SgSourceFile *variable_SgSourceFile) { visit(static_cast<SgSourceFile::base_node_type *>(variable_SgSourceFile)); }
  334728           0 :           void visit(SgUnknownFile *variable_SgUnknownFile) { visit(static_cast<SgUnknownFile::base_node_type *>(variable_SgUnknownFile)); }
  334729           0 :           void visit(SgFile *variable_SgFile) { visit(static_cast<SgFile::base_node_type *>(variable_SgFile)); }
  334730           0 :           void visit(SgFileList *variable_SgFileList) { visit(static_cast<SgFileList::base_node_type *>(variable_SgFileList)); }
  334731           0 :           void visit(SgDirectory *variable_SgDirectory) { visit(static_cast<SgDirectory::base_node_type *>(variable_SgDirectory)); }
  334732           0 :           void visit(SgDirectoryList *variable_SgDirectoryList) { visit(static_cast<SgDirectoryList::base_node_type *>(variable_SgDirectoryList)); }
  334733           0 :           void visit(SgProject *variable_SgProject) { visit(static_cast<SgProject::base_node_type *>(variable_SgProject)); }
  334734           0 :           void visit(SgOptions *variable_SgOptions) { visit(static_cast<SgOptions::base_node_type *>(variable_SgOptions)); }
  334735           0 :           void visit(SgUnparse_Info *variable_SgUnparse_Info) { visit(static_cast<SgUnparse_Info::base_node_type *>(variable_SgUnparse_Info)); }
  334736           0 :           void visit(SgIncludeFile *variable_SgIncludeFile) { visit(static_cast<SgIncludeFile::base_node_type *>(variable_SgIncludeFile)); }
  334737           0 :           void visit(SgFuncDecl_attr *variable_SgFuncDecl_attr) { visit(static_cast<SgFuncDecl_attr::base_node_type *>(variable_SgFuncDecl_attr)); }
  334738           0 :           void visit(SgClassDecl_attr *variable_SgClassDecl_attr) { visit(static_cast<SgClassDecl_attr::base_node_type *>(variable_SgClassDecl_attr)); }
  334739           0 :           void visit(SgTypedefSeq *variable_SgTypedefSeq) { visit(static_cast<SgTypedefSeq::base_node_type *>(variable_SgTypedefSeq)); }
  334740           0 :           void visit(SgFunctionParameterTypeList *variable_SgFunctionParameterTypeList) { visit(static_cast<SgFunctionParameterTypeList::base_node_type *>(variable_SgFunctionParameterTypeList)); }
  334741           0 :           void visit(SgTemplateParameter *variable_SgTemplateParameter) { visit(static_cast<SgTemplateParameter::base_node_type *>(variable_SgTemplateParameter)); }
  334742           0 :           void visit(SgTemplateArgument *variable_SgTemplateArgument) { visit(static_cast<SgTemplateArgument::base_node_type *>(variable_SgTemplateArgument)); }
  334743           0 :           void visit(SgTemplateParameterList *variable_SgTemplateParameterList) { visit(static_cast<SgTemplateParameterList::base_node_type *>(variable_SgTemplateParameterList)); }
  334744           0 :           void visit(SgTemplateArgumentList *variable_SgTemplateArgumentList) { visit(static_cast<SgTemplateArgumentList::base_node_type *>(variable_SgTemplateArgumentList)); }
  334745           0 :           void visit(SgBitAttribute *variable_SgBitAttribute) { visit(static_cast<SgBitAttribute::base_node_type *>(variable_SgBitAttribute)); }
  334746           0 :           void visit(SgAttribute *variable_SgAttribute) { visit(static_cast<SgAttribute::base_node_type *>(variable_SgAttribute)); }
  334747           0 :           void visit(SgExpBaseClass *variable_SgExpBaseClass) { visit(static_cast<SgExpBaseClass::base_node_type *>(variable_SgExpBaseClass)); }
  334748           0 :           void visit(SgNonrealBaseClass *variable_SgNonrealBaseClass) { visit(static_cast<SgNonrealBaseClass::base_node_type *>(variable_SgNonrealBaseClass)); }
  334749           0 :           void visit(SgBaseClass *variable_SgBaseClass) { visit(static_cast<SgBaseClass::base_node_type *>(variable_SgBaseClass)); }
  334750           0 :           void visit(SgUndirectedGraphEdge *variable_SgUndirectedGraphEdge) { visit(static_cast<SgUndirectedGraphEdge::base_node_type *>(variable_SgUndirectedGraphEdge)); }
  334751           0 :           void visit(SgDirectedGraphEdge *variable_SgDirectedGraphEdge) { visit(static_cast<SgDirectedGraphEdge::base_node_type *>(variable_SgDirectedGraphEdge)); }
  334752           0 :           void visit(SgGraphNode *variable_SgGraphNode) { visit(static_cast<SgGraphNode::base_node_type *>(variable_SgGraphNode)); }
  334753           0 :           void visit(SgGraphEdge *variable_SgGraphEdge) { visit(static_cast<SgGraphEdge::base_node_type *>(variable_SgGraphEdge)); }
  334754           0 :           void visit(SgStringKeyedBidirectionalGraph *variable_SgStringKeyedBidirectionalGraph) { visit(static_cast<SgStringKeyedBidirectionalGraph::base_node_type *>(variable_SgStringKeyedBidirectionalGraph)); }
  334755           0 :           void visit(SgIntKeyedBidirectionalGraph *variable_SgIntKeyedBidirectionalGraph) { visit(static_cast<SgIntKeyedBidirectionalGraph::base_node_type *>(variable_SgIntKeyedBidirectionalGraph)); }
  334756           0 :           void visit(SgBidirectionalGraph *variable_SgBidirectionalGraph) { visit(static_cast<SgBidirectionalGraph::base_node_type *>(variable_SgBidirectionalGraph)); }
  334757           0 :           void visit(SgIncidenceDirectedGraph *variable_SgIncidenceDirectedGraph) { visit(static_cast<SgIncidenceDirectedGraph::base_node_type *>(variable_SgIncidenceDirectedGraph)); }
  334758           0 :           void visit(SgIncidenceUndirectedGraph *variable_SgIncidenceUndirectedGraph) { visit(static_cast<SgIncidenceUndirectedGraph::base_node_type *>(variable_SgIncidenceUndirectedGraph)); }
  334759           0 :           void visit(SgGraph *variable_SgGraph) { visit(static_cast<SgGraph::base_node_type *>(variable_SgGraph)); }
  334760           0 :           void visit(SgGraphNodeList *variable_SgGraphNodeList) { visit(static_cast<SgGraphNodeList::base_node_type *>(variable_SgGraphNodeList)); }
  334761           0 :           void visit(SgGraphEdgeList *variable_SgGraphEdgeList) { visit(static_cast<SgGraphEdgeList::base_node_type *>(variable_SgGraphEdgeList)); }
  334762           0 :           void visit(SgQualifiedName *variable_SgQualifiedName) { visit(static_cast<SgQualifiedName::base_node_type *>(variable_SgQualifiedName)); }
  334763           0 :           void visit(SgNameGroup *variable_SgNameGroup) { visit(static_cast<SgNameGroup::base_node_type *>(variable_SgNameGroup)); }
  334764           0 :           void visit(SgDimensionObject *variable_SgDimensionObject) { visit(static_cast<SgDimensionObject::base_node_type *>(variable_SgDimensionObject)); }
  334765           0 :           void visit(SgDataStatementGroup *variable_SgDataStatementGroup) { visit(static_cast<SgDataStatementGroup::base_node_type *>(variable_SgDataStatementGroup)); }
  334766           0 :           void visit(SgDataStatementObject *variable_SgDataStatementObject) { visit(static_cast<SgDataStatementObject::base_node_type *>(variable_SgDataStatementObject)); }
  334767           0 :           void visit(SgDataStatementValue *variable_SgDataStatementValue) { visit(static_cast<SgDataStatementValue::base_node_type *>(variable_SgDataStatementValue)); }
  334768           0 :           void visit(SgFormatItem *variable_SgFormatItem) { visit(static_cast<SgFormatItem::base_node_type *>(variable_SgFormatItem)); }
  334769           0 :           void visit(SgFormatItemList *variable_SgFormatItemList) { visit(static_cast<SgFormatItemList::base_node_type *>(variable_SgFormatItemList)); }
  334770           0 :           void visit(SgTypeTable *variable_SgTypeTable) { visit(static_cast<SgTypeTable::base_node_type *>(variable_SgTypeTable)); }
  334771           0 :           void visit(SgHeaderFileReport *variable_SgHeaderFileReport) { visit(static_cast<SgHeaderFileReport::base_node_type *>(variable_SgHeaderFileReport)); }
  334772           0 :           void visit(SgSupport *variable_SgSupport) { visit(static_cast<SgSupport::base_node_type *>(variable_SgSupport)); }
  334773           0 :           void visit(SgTypeUnknown *variable_SgTypeUnknown) { visit(static_cast<SgTypeUnknown::base_node_type *>(variable_SgTypeUnknown)); }
  334774           0 :           void visit(SgTypeChar *variable_SgTypeChar) { visit(static_cast<SgTypeChar::base_node_type *>(variable_SgTypeChar)); }
  334775           0 :           void visit(SgTypeSignedChar *variable_SgTypeSignedChar) { visit(static_cast<SgTypeSignedChar::base_node_type *>(variable_SgTypeSignedChar)); }
  334776           0 :           void visit(SgTypeUnsignedChar *variable_SgTypeUnsignedChar) { visit(static_cast<SgTypeUnsignedChar::base_node_type *>(variable_SgTypeUnsignedChar)); }
  334777           0 :           void visit(SgTypeShort *variable_SgTypeShort) { visit(static_cast<SgTypeShort::base_node_type *>(variable_SgTypeShort)); }
  334778           0 :           void visit(SgTypeSignedShort *variable_SgTypeSignedShort) { visit(static_cast<SgTypeSignedShort::base_node_type *>(variable_SgTypeSignedShort)); }
  334779           0 :           void visit(SgTypeUnsignedShort *variable_SgTypeUnsignedShort) { visit(static_cast<SgTypeUnsignedShort::base_node_type *>(variable_SgTypeUnsignedShort)); }
  334780           0 :           void visit(SgTypeInt *variable_SgTypeInt) { visit(static_cast<SgTypeInt::base_node_type *>(variable_SgTypeInt)); }
  334781           0 :           void visit(SgTypeSignedInt *variable_SgTypeSignedInt) { visit(static_cast<SgTypeSignedInt::base_node_type *>(variable_SgTypeSignedInt)); }
  334782           0 :           void visit(SgTypeUnsignedInt *variable_SgTypeUnsignedInt) { visit(static_cast<SgTypeUnsignedInt::base_node_type *>(variable_SgTypeUnsignedInt)); }
  334783           0 :           void visit(SgTypeLong *variable_SgTypeLong) { visit(static_cast<SgTypeLong::base_node_type *>(variable_SgTypeLong)); }
  334784           0 :           void visit(SgTypeSignedLong *variable_SgTypeSignedLong) { visit(static_cast<SgTypeSignedLong::base_node_type *>(variable_SgTypeSignedLong)); }
  334785           0 :           void visit(SgTypeUnsignedLong *variable_SgTypeUnsignedLong) { visit(static_cast<SgTypeUnsignedLong::base_node_type *>(variable_SgTypeUnsignedLong)); }
  334786           0 :           void visit(SgTypeVoid *variable_SgTypeVoid) { visit(static_cast<SgTypeVoid::base_node_type *>(variable_SgTypeVoid)); }
  334787           0 :           void visit(SgTypeGlobalVoid *variable_SgTypeGlobalVoid) { visit(static_cast<SgTypeGlobalVoid::base_node_type *>(variable_SgTypeGlobalVoid)); }
  334788           0 :           void visit(SgTypeWchar *variable_SgTypeWchar) { visit(static_cast<SgTypeWchar::base_node_type *>(variable_SgTypeWchar)); }
  334789           0 :           void visit(SgTypeFloat *variable_SgTypeFloat) { visit(static_cast<SgTypeFloat::base_node_type *>(variable_SgTypeFloat)); }
  334790           0 :           void visit(SgTypeDouble *variable_SgTypeDouble) { visit(static_cast<SgTypeDouble::base_node_type *>(variable_SgTypeDouble)); }
  334791           0 :           void visit(SgTypeLongLong *variable_SgTypeLongLong) { visit(static_cast<SgTypeLongLong::base_node_type *>(variable_SgTypeLongLong)); }
  334792           0 :           void visit(SgTypeSignedLongLong *variable_SgTypeSignedLongLong) { visit(static_cast<SgTypeSignedLongLong::base_node_type *>(variable_SgTypeSignedLongLong)); }
  334793           0 :           void visit(SgTypeUnsignedLongLong *variable_SgTypeUnsignedLongLong) { visit(static_cast<SgTypeUnsignedLongLong::base_node_type *>(variable_SgTypeUnsignedLongLong)); }
  334794           0 :           void visit(SgTypeLongDouble *variable_SgTypeLongDouble) { visit(static_cast<SgTypeLongDouble::base_node_type *>(variable_SgTypeLongDouble)); }
  334795           0 :           void visit(SgTypeFloat80 *variable_SgTypeFloat80) { visit(static_cast<SgTypeFloat80::base_node_type *>(variable_SgTypeFloat80)); }
  334796           0 :           void visit(SgTypeFloat128 *variable_SgTypeFloat128) { visit(static_cast<SgTypeFloat128::base_node_type *>(variable_SgTypeFloat128)); }
  334797           0 :           void visit(SgTypeString *variable_SgTypeString) { visit(static_cast<SgTypeString::base_node_type *>(variable_SgTypeString)); }
  334798           0 :           void visit(SgTypeBool *variable_SgTypeBool) { visit(static_cast<SgTypeBool::base_node_type *>(variable_SgTypeBool)); }
  334799           0 :           void visit(SgTypeFixed *variable_SgTypeFixed) { visit(static_cast<SgTypeFixed::base_node_type *>(variable_SgTypeFixed)); }
  334800           0 :           void visit(SgTypeMatrix *variable_SgTypeMatrix) { visit(static_cast<SgTypeMatrix::base_node_type *>(variable_SgTypeMatrix)); }
  334801           0 :           void visit(SgTypeTuple *variable_SgTypeTuple) { visit(static_cast<SgTypeTuple::base_node_type *>(variable_SgTypeTuple)); }
  334802           0 :           void visit(SgTypeNullptr *variable_SgTypeNullptr) { visit(static_cast<SgTypeNullptr::base_node_type *>(variable_SgTypeNullptr)); }
  334803           0 :           void visit(SgTypeComplex *variable_SgTypeComplex) { visit(static_cast<SgTypeComplex::base_node_type *>(variable_SgTypeComplex)); }
  334804           0 :           void visit(SgTypeImaginary *variable_SgTypeImaginary) { visit(static_cast<SgTypeImaginary::base_node_type *>(variable_SgTypeImaginary)); }
  334805           0 :           void visit(SgTypeDefault *variable_SgTypeDefault) { visit(static_cast<SgTypeDefault::base_node_type *>(variable_SgTypeDefault)); }
  334806           0 :           void visit(SgPointerMemberType *variable_SgPointerMemberType) { visit(static_cast<SgPointerMemberType::base_node_type *>(variable_SgPointerMemberType)); }
  334807           0 :           void visit(SgReferenceType *variable_SgReferenceType) { visit(static_cast<SgReferenceType::base_node_type *>(variable_SgReferenceType)); }
  334808           0 :           void visit(SgRvalueReferenceType *variable_SgRvalueReferenceType) { visit(static_cast<SgRvalueReferenceType::base_node_type *>(variable_SgRvalueReferenceType)); }
  334809           0 :           void visit(SgDeclType *variable_SgDeclType) { visit(static_cast<SgDeclType::base_node_type *>(variable_SgDeclType)); }
  334810           0 :           void visit(SgTypeOfType *variable_SgTypeOfType) { visit(static_cast<SgTypeOfType::base_node_type *>(variable_SgTypeOfType)); }
  334811           0 :           void visit(SgTypeCAFTeam *variable_SgTypeCAFTeam) { visit(static_cast<SgTypeCAFTeam::base_node_type *>(variable_SgTypeCAFTeam)); }
  334812           0 :           void visit(SgTypeUnsigned128bitInteger *variable_SgTypeUnsigned128bitInteger) { visit(static_cast<SgTypeUnsigned128bitInteger::base_node_type *>(variable_SgTypeUnsigned128bitInteger)); }
  334813           0 :           void visit(SgTypeSigned128bitInteger *variable_SgTypeSigned128bitInteger) { visit(static_cast<SgTypeSigned128bitInteger::base_node_type *>(variable_SgTypeSigned128bitInteger)); }
  334814           0 :           void visit(SgTypeLabel *variable_SgTypeLabel) { visit(static_cast<SgTypeLabel::base_node_type *>(variable_SgTypeLabel)); }
  334815           0 :           void visit(SgTemplateType *variable_SgTemplateType) { visit(static_cast<SgTemplateType::base_node_type *>(variable_SgTemplateType)); }
  334816           0 :           void visit(SgEnumType *variable_SgEnumType) { visit(static_cast<SgEnumType::base_node_type *>(variable_SgEnumType)); }
  334817           0 :           void visit(SgTypedefType *variable_SgTypedefType) { visit(static_cast<SgTypedefType::base_node_type *>(variable_SgTypedefType)); }
  334818           0 :           void visit(SgNonrealType *variable_SgNonrealType) { visit(static_cast<SgNonrealType::base_node_type *>(variable_SgNonrealType)); }
  334819           0 :           void visit(SgAutoType *variable_SgAutoType) { visit(static_cast<SgAutoType::base_node_type *>(variable_SgAutoType)); }
  334820           0 :           void visit(SgModifierType *variable_SgModifierType) { visit(static_cast<SgModifierType::base_node_type *>(variable_SgModifierType)); }
  334821           0 :           void visit(SgPartialFunctionModifierType *variable_SgPartialFunctionModifierType) { visit(static_cast<SgPartialFunctionModifierType::base_node_type *>(variable_SgPartialFunctionModifierType)); }
  334822           0 :           void visit(SgArrayType *variable_SgArrayType) { visit(static_cast<SgArrayType::base_node_type *>(variable_SgArrayType)); }
  334823           0 :           void visit(SgTypeEllipse *variable_SgTypeEllipse) { visit(static_cast<SgTypeEllipse::base_node_type *>(variable_SgTypeEllipse)); }
  334824           0 :           void visit(SgTypeCrayPointer *variable_SgTypeCrayPointer) { visit(static_cast<SgTypeCrayPointer::base_node_type *>(variable_SgTypeCrayPointer)); }
  334825           0 :           void visit(SgPartialFunctionType *variable_SgPartialFunctionType) { visit(static_cast<SgPartialFunctionType::base_node_type *>(variable_SgPartialFunctionType)); }
  334826           0 :           void visit(SgMemberFunctionType *variable_SgMemberFunctionType) { visit(static_cast<SgMemberFunctionType::base_node_type *>(variable_SgMemberFunctionType)); }
  334827           0 :           void visit(SgFunctionType *variable_SgFunctionType) { visit(static_cast<SgFunctionType::base_node_type *>(variable_SgFunctionType)); }
  334828           0 :           void visit(SgPointerType *variable_SgPointerType) { visit(static_cast<SgPointerType::base_node_type *>(variable_SgPointerType)); }
  334829           0 :           void visit(SgClassType *variable_SgClassType) { visit(static_cast<SgClassType::base_node_type *>(variable_SgClassType)); }
  334830           0 :           void visit(SgNamedType *variable_SgNamedType) { visit(static_cast<SgNamedType::base_node_type *>(variable_SgNamedType)); }
  334831           0 :           void visit(SgQualifiedNameType *variable_SgQualifiedNameType) { visit(static_cast<SgQualifiedNameType::base_node_type *>(variable_SgQualifiedNameType)); }
  334832           0 :           void visit(SgTypeChar16 *variable_SgTypeChar16) { visit(static_cast<SgTypeChar16::base_node_type *>(variable_SgTypeChar16)); }
  334833           0 :           void visit(SgTypeChar32 *variable_SgTypeChar32) { visit(static_cast<SgTypeChar32::base_node_type *>(variable_SgTypeChar32)); }
  334834           0 :           void visit(SgType *variable_SgType) { visit(static_cast<SgType::base_node_type *>(variable_SgType)); }
  334835           0 :           void visit(SgForStatement *variable_SgForStatement) { visit(static_cast<SgForStatement::base_node_type *>(variable_SgForStatement)); }
  334836           0 :           void visit(SgForInitStatement *variable_SgForInitStatement) { visit(static_cast<SgForInitStatement::base_node_type *>(variable_SgForInitStatement)); }
  334837           0 :           void visit(SgRangeBasedForStatement *variable_SgRangeBasedForStatement) { visit(static_cast<SgRangeBasedForStatement::base_node_type *>(variable_SgRangeBasedForStatement)); }
  334838           0 :           void visit(SgCatchStatementSeq *variable_SgCatchStatementSeq) { visit(static_cast<SgCatchStatementSeq::base_node_type *>(variable_SgCatchStatementSeq)); }
  334839           0 :           void visit(SgFunctionParameterList *variable_SgFunctionParameterList) { visit(static_cast<SgFunctionParameterList::base_node_type *>(variable_SgFunctionParameterList)); }
  334840           0 :           void visit(SgCtorInitializerList *variable_SgCtorInitializerList) { visit(static_cast<SgCtorInitializerList::base_node_type *>(variable_SgCtorInitializerList)); }
  334841           0 :           void visit(SgBasicBlock *variable_SgBasicBlock) { visit(static_cast<SgBasicBlock::base_node_type *>(variable_SgBasicBlock)); }
  334842           0 :           void visit(SgGlobal *variable_SgGlobal) { visit(static_cast<SgGlobal::base_node_type *>(variable_SgGlobal)); }
  334843           0 :           void visit(SgIfStmt *variable_SgIfStmt) { visit(static_cast<SgIfStmt::base_node_type *>(variable_SgIfStmt)); }
  334844           0 :           void visit(SgWhileStmt *variable_SgWhileStmt) { visit(static_cast<SgWhileStmt::base_node_type *>(variable_SgWhileStmt)); }
  334845           0 :           void visit(SgDoWhileStmt *variable_SgDoWhileStmt) { visit(static_cast<SgDoWhileStmt::base_node_type *>(variable_SgDoWhileStmt)); }
  334846           0 :           void visit(SgSwitchStatement *variable_SgSwitchStatement) { visit(static_cast<SgSwitchStatement::base_node_type *>(variable_SgSwitchStatement)); }
  334847           0 :           void visit(SgCatchOptionStmt *variable_SgCatchOptionStmt) { visit(static_cast<SgCatchOptionStmt::base_node_type *>(variable_SgCatchOptionStmt)); }
  334848           0 :           void visit(SgFunctionParameterScope *variable_SgFunctionParameterScope) { visit(static_cast<SgFunctionParameterScope::base_node_type *>(variable_SgFunctionParameterScope)); }
  334849           0 :           void visit(SgDeclarationScope *variable_SgDeclarationScope) { visit(static_cast<SgDeclarationScope::base_node_type *>(variable_SgDeclarationScope)); }
  334850           0 :           void visit(SgVariableDefinition *variable_SgVariableDefinition) { visit(static_cast<SgVariableDefinition::base_node_type *>(variable_SgVariableDefinition)); }
  334851           0 :           void visit(SgStmtDeclarationStatement *variable_SgStmtDeclarationStatement) { visit(static_cast<SgStmtDeclarationStatement::base_node_type *>(variable_SgStmtDeclarationStatement)); }
  334852           0 :           void visit(SgEnumDeclaration *variable_SgEnumDeclaration) { visit(static_cast<SgEnumDeclaration::base_node_type *>(variable_SgEnumDeclaration)); }
  334853           0 :           void visit(SgAsmStmt *variable_SgAsmStmt) { visit(static_cast<SgAsmStmt::base_node_type *>(variable_SgAsmStmt)); }
  334854           0 :           void visit(SgFunctionTypeTable *variable_SgFunctionTypeTable) { visit(static_cast<SgFunctionTypeTable::base_node_type *>(variable_SgFunctionTypeTable)); }
  334855           0 :           void visit(SgExprStatement *variable_SgExprStatement) { visit(static_cast<SgExprStatement::base_node_type *>(variable_SgExprStatement)); }
  334856           0 :           void visit(SgLabelStatement *variable_SgLabelStatement) { visit(static_cast<SgLabelStatement::base_node_type *>(variable_SgLabelStatement)); }
  334857           0 :           void visit(SgCaseOptionStmt *variable_SgCaseOptionStmt) { visit(static_cast<SgCaseOptionStmt::base_node_type *>(variable_SgCaseOptionStmt)); }
  334858           0 :           void visit(SgTryStmt *variable_SgTryStmt) { visit(static_cast<SgTryStmt::base_node_type *>(variable_SgTryStmt)); }
  334859           0 :           void visit(SgDefaultOptionStmt *variable_SgDefaultOptionStmt) { visit(static_cast<SgDefaultOptionStmt::base_node_type *>(variable_SgDefaultOptionStmt)); }
  334860           0 :           void visit(SgBreakStmt *variable_SgBreakStmt) { visit(static_cast<SgBreakStmt::base_node_type *>(variable_SgBreakStmt)); }
  334861           0 :           void visit(SgContinueStmt *variable_SgContinueStmt) { visit(static_cast<SgContinueStmt::base_node_type *>(variable_SgContinueStmt)); }
  334862           0 :           void visit(SgReturnStmt *variable_SgReturnStmt) { visit(static_cast<SgReturnStmt::base_node_type *>(variable_SgReturnStmt)); }
  334863           0 :           void visit(SgGotoStatement *variable_SgGotoStatement) { visit(static_cast<SgGotoStatement::base_node_type *>(variable_SgGotoStatement)); }
  334864           0 :           void visit(SgSpawnStmt *variable_SgSpawnStmt) { visit(static_cast<SgSpawnStmt::base_node_type *>(variable_SgSpawnStmt)); }
  334865           0 :           void visit(SgTemplateTypedefDeclaration *variable_SgTemplateTypedefDeclaration) { visit(static_cast<SgTemplateTypedefDeclaration::base_node_type *>(variable_SgTemplateTypedefDeclaration)); }
  334866           0 :           void visit(SgTemplateInstantiationTypedefDeclaration *variable_SgTemplateInstantiationTypedefDeclaration) { visit(static_cast<SgTemplateInstantiationTypedefDeclaration::base_node_type *>(variable_SgTemplateInstantiationTypedefDeclaration)); }
  334867           0 :           void visit(SgTypedefDeclaration *variable_SgTypedefDeclaration) { visit(static_cast<SgTypedefDeclaration::base_node_type *>(variable_SgTypedefDeclaration)); }
  334868           0 :           void visit(SgNullStatement *variable_SgNullStatement) { visit(static_cast<SgNullStatement::base_node_type *>(variable_SgNullStatement)); }
  334869           0 :           void visit(SgVariantStatement *variable_SgVariantStatement) { visit(static_cast<SgVariantStatement::base_node_type *>(variable_SgVariantStatement)); }
  334870           0 :           void visit(SgPragmaDeclaration *variable_SgPragmaDeclaration) { visit(static_cast<SgPragmaDeclaration::base_node_type *>(variable_SgPragmaDeclaration)); }
  334871           0 :           void visit(SgTemplateClassDeclaration *variable_SgTemplateClassDeclaration) { visit(static_cast<SgTemplateClassDeclaration::base_node_type *>(variable_SgTemplateClassDeclaration)); }
  334872           0 :           void visit(SgTemplateMemberFunctionDeclaration *variable_SgTemplateMemberFunctionDeclaration) { visit(static_cast<SgTemplateMemberFunctionDeclaration::base_node_type *>(variable_SgTemplateMemberFunctionDeclaration)); }
  334873           0 :           void visit(SgTemplateFunctionDeclaration *variable_SgTemplateFunctionDeclaration) { visit(static_cast<SgTemplateFunctionDeclaration::base_node_type *>(variable_SgTemplateFunctionDeclaration)); }
  334874           0 :           void visit(SgTemplateVariableDeclaration *variable_SgTemplateVariableDeclaration) { visit(static_cast<SgTemplateVariableDeclaration::base_node_type *>(variable_SgTemplateVariableDeclaration)); }
  334875           0 :           void visit(SgTemplateDeclaration *variable_SgTemplateDeclaration) { visit(static_cast<SgTemplateDeclaration::base_node_type *>(variable_SgTemplateDeclaration)); }
  334876           0 :           void visit(SgVariableDeclaration *variable_SgVariableDeclaration) { visit(static_cast<SgVariableDeclaration::base_node_type *>(variable_SgVariableDeclaration)); }
  334877           0 :           void visit(SgTemplateInstantiationDecl *variable_SgTemplateInstantiationDecl) { visit(static_cast<SgTemplateInstantiationDecl::base_node_type *>(variable_SgTemplateInstantiationDecl)); }
  334878           0 :           void visit(SgTemplateInstantiationDefn *variable_SgTemplateInstantiationDefn) { visit(static_cast<SgTemplateInstantiationDefn::base_node_type *>(variable_SgTemplateInstantiationDefn)); }
  334879           0 :           void visit(SgTemplateInstantiationFunctionDecl *variable_SgTemplateInstantiationFunctionDecl) { visit(static_cast<SgTemplateInstantiationFunctionDecl::base_node_type *>(variable_SgTemplateInstantiationFunctionDecl)); }
  334880           0 :           void visit(SgTemplateInstantiationMemberFunctionDecl *variable_SgTemplateInstantiationMemberFunctionDecl) { visit(static_cast<SgTemplateInstantiationMemberFunctionDecl::base_node_type *>(variable_SgTemplateInstantiationMemberFunctionDecl)); }
  334881           0 :           void visit(SgNonrealDecl *variable_SgNonrealDecl) { visit(static_cast<SgNonrealDecl::base_node_type *>(variable_SgNonrealDecl)); }
  334882           0 :           void visit(SgWithStatement *variable_SgWithStatement) { visit(static_cast<SgWithStatement::base_node_type *>(variable_SgWithStatement)); }
  334883           0 :           void visit(SgPassStatement *variable_SgPassStatement) { visit(static_cast<SgPassStatement::base_node_type *>(variable_SgPassStatement)); }
  334884           0 :           void visit(SgAssertStmt *variable_SgAssertStmt) { visit(static_cast<SgAssertStmt::base_node_type *>(variable_SgAssertStmt)); }
  334885           0 :           void visit(SgExecStatement *variable_SgExecStatement) { visit(static_cast<SgExecStatement::base_node_type *>(variable_SgExecStatement)); }
  334886           0 :           void visit(SgProgramHeaderStatement *variable_SgProgramHeaderStatement) { visit(static_cast<SgProgramHeaderStatement::base_node_type *>(variable_SgProgramHeaderStatement)); }
  334887           0 :           void visit(SgProcedureHeaderStatement *variable_SgProcedureHeaderStatement) { visit(static_cast<SgProcedureHeaderStatement::base_node_type *>(variable_SgProcedureHeaderStatement)); }
  334888           0 :           void visit(SgEntryStatement *variable_SgEntryStatement) { visit(static_cast<SgEntryStatement::base_node_type *>(variable_SgEntryStatement)); }
  334889           0 :           void visit(SgFortranNonblockedDo *variable_SgFortranNonblockedDo) { visit(static_cast<SgFortranNonblockedDo::base_node_type *>(variable_SgFortranNonblockedDo)); }
  334890           0 :           void visit(SgInterfaceStatement *variable_SgInterfaceStatement) { visit(static_cast<SgInterfaceStatement::base_node_type *>(variable_SgInterfaceStatement)); }
  334891           0 :           void visit(SgParameterStatement *variable_SgParameterStatement) { visit(static_cast<SgParameterStatement::base_node_type *>(variable_SgParameterStatement)); }
  334892           0 :           void visit(SgCommonBlock *variable_SgCommonBlock) { visit(static_cast<SgCommonBlock::base_node_type *>(variable_SgCommonBlock)); }
  334893           0 :           void visit(SgModuleStatement *variable_SgModuleStatement) { visit(static_cast<SgModuleStatement::base_node_type *>(variable_SgModuleStatement)); }
  334894           0 :           void visit(SgUseStatement *variable_SgUseStatement) { visit(static_cast<SgUseStatement::base_node_type *>(variable_SgUseStatement)); }
  334895           0 :           void visit(SgProcessControlStatement *variable_SgProcessControlStatement) { visit(static_cast<SgProcessControlStatement::base_node_type *>(variable_SgProcessControlStatement)); }
  334896           0 :           void visit(SgPrintStatement *variable_SgPrintStatement) { visit(static_cast<SgPrintStatement::base_node_type *>(variable_SgPrintStatement)); }
  334897           0 :           void visit(SgReadStatement *variable_SgReadStatement) { visit(static_cast<SgReadStatement::base_node_type *>(variable_SgReadStatement)); }
  334898           0 :           void visit(SgWriteStatement *variable_SgWriteStatement) { visit(static_cast<SgWriteStatement::base_node_type *>(variable_SgWriteStatement)); }
  334899           0 :           void visit(SgOpenStatement *variable_SgOpenStatement) { visit(static_cast<SgOpenStatement::base_node_type *>(variable_SgOpenStatement)); }
  334900           0 :           void visit(SgCloseStatement *variable_SgCloseStatement) { visit(static_cast<SgCloseStatement::base_node_type *>(variable_SgCloseStatement)); }
  334901           0 :           void visit(SgInquireStatement *variable_SgInquireStatement) { visit(static_cast<SgInquireStatement::base_node_type *>(variable_SgInquireStatement)); }
  334902           0 :           void visit(SgFlushStatement *variable_SgFlushStatement) { visit(static_cast<SgFlushStatement::base_node_type *>(variable_SgFlushStatement)); }
  334903           0 :           void visit(SgBackspaceStatement *variable_SgBackspaceStatement) { visit(static_cast<SgBackspaceStatement::base_node_type *>(variable_SgBackspaceStatement)); }
  334904           0 :           void visit(SgRewindStatement *variable_SgRewindStatement) { visit(static_cast<SgRewindStatement::base_node_type *>(variable_SgRewindStatement)); }
  334905           0 :           void visit(SgEndfileStatement *variable_SgEndfileStatement) { visit(static_cast<SgEndfileStatement::base_node_type *>(variable_SgEndfileStatement)); }
  334906           0 :           void visit(SgWaitStatement *variable_SgWaitStatement) { visit(static_cast<SgWaitStatement::base_node_type *>(variable_SgWaitStatement)); }
  334907           0 :           void visit(SgCAFWithTeamStatement *variable_SgCAFWithTeamStatement) { visit(static_cast<SgCAFWithTeamStatement::base_node_type *>(variable_SgCAFWithTeamStatement)); }
  334908           0 :           void visit(SgFormatStatement *variable_SgFormatStatement) { visit(static_cast<SgFormatStatement::base_node_type *>(variable_SgFormatStatement)); }
  334909           0 :           void visit(SgFortranDo *variable_SgFortranDo) { visit(static_cast<SgFortranDo::base_node_type *>(variable_SgFortranDo)); }
  334910           0 :           void visit(SgForAllStatement *variable_SgForAllStatement) { visit(static_cast<SgForAllStatement::base_node_type *>(variable_SgForAllStatement)); }
  334911           0 :           void visit(SgIOStatement *variable_SgIOStatement) { visit(static_cast<SgIOStatement::base_node_type *>(variable_SgIOStatement)); }
  334912           0 :           void visit(SgSyncAllStatement *variable_SgSyncAllStatement) { visit(static_cast<SgSyncAllStatement::base_node_type *>(variable_SgSyncAllStatement)); }
  334913           0 :           void visit(SgSyncImagesStatement *variable_SgSyncImagesStatement) { visit(static_cast<SgSyncImagesStatement::base_node_type *>(variable_SgSyncImagesStatement)); }
  334914           0 :           void visit(SgSyncMemoryStatement *variable_SgSyncMemoryStatement) { visit(static_cast<SgSyncMemoryStatement::base_node_type *>(variable_SgSyncMemoryStatement)); }
  334915           0 :           void visit(SgSyncTeamStatement *variable_SgSyncTeamStatement) { visit(static_cast<SgSyncTeamStatement::base_node_type *>(variable_SgSyncTeamStatement)); }
  334916           0 :           void visit(SgLockStatement *variable_SgLockStatement) { visit(static_cast<SgLockStatement::base_node_type *>(variable_SgLockStatement)); }
  334917           0 :           void visit(SgUnlockStatement *variable_SgUnlockStatement) { visit(static_cast<SgUnlockStatement::base_node_type *>(variable_SgUnlockStatement)); }
  334918           0 :           void visit(SgImageControlStatement *variable_SgImageControlStatement) { visit(static_cast<SgImageControlStatement::base_node_type *>(variable_SgImageControlStatement)); }
  334919           0 :           void visit(SgUpcNotifyStatement *variable_SgUpcNotifyStatement) { visit(static_cast<SgUpcNotifyStatement::base_node_type *>(variable_SgUpcNotifyStatement)); }
  334920           0 :           void visit(SgUpcWaitStatement *variable_SgUpcWaitStatement) { visit(static_cast<SgUpcWaitStatement::base_node_type *>(variable_SgUpcWaitStatement)); }
  334921           0 :           void visit(SgUpcBarrierStatement *variable_SgUpcBarrierStatement) { visit(static_cast<SgUpcBarrierStatement::base_node_type *>(variable_SgUpcBarrierStatement)); }
  334922           0 :           void visit(SgUpcFenceStatement *variable_SgUpcFenceStatement) { visit(static_cast<SgUpcFenceStatement::base_node_type *>(variable_SgUpcFenceStatement)); }
  334923           0 :           void visit(SgUpcForAllStatement *variable_SgUpcForAllStatement) { visit(static_cast<SgUpcForAllStatement::base_node_type *>(variable_SgUpcForAllStatement)); }
  334924           0 :           void visit(SgUpirSpmdStatement *variable_SgUpirSpmdStatement) { visit(static_cast<SgUpirSpmdStatement::base_node_type *>(variable_SgUpirSpmdStatement)); }
  334925           0 :           void visit(SgOmpLoopStatement *variable_SgOmpLoopStatement) { visit(static_cast<SgOmpLoopStatement::base_node_type *>(variable_SgOmpLoopStatement)); }
  334926           0 :           void visit(SgOmpScanStatement *variable_SgOmpScanStatement) { visit(static_cast<SgOmpScanStatement::base_node_type *>(variable_SgOmpScanStatement)); }
  334927           0 :           void visit(SgOmpTaskloopStatement *variable_SgOmpTaskloopStatement) { visit(static_cast<SgOmpTaskloopStatement::base_node_type *>(variable_SgOmpTaskloopStatement)); }
  334928           0 :           void visit(SgOmpTaskgroupStatement *variable_SgOmpTaskgroupStatement) { visit(static_cast<SgOmpTaskgroupStatement::base_node_type *>(variable_SgOmpTaskgroupStatement)); }
  334929           0 :           void visit(SgOmpDepobjStatement *variable_SgOmpDepobjStatement) { visit(static_cast<SgOmpDepobjStatement::base_node_type *>(variable_SgOmpDepobjStatement)); }
  334930           0 :           void visit(SgOmpTeamsStatement *variable_SgOmpTeamsStatement) { visit(static_cast<SgOmpTeamsStatement::base_node_type *>(variable_SgOmpTeamsStatement)); }
  334931           0 :           void visit(SgOmpCancellationPointStatement *variable_SgOmpCancellationPointStatement) { visit(static_cast<SgOmpCancellationPointStatement::base_node_type *>(variable_SgOmpCancellationPointStatement)); }
  334932           0 :           void visit(SgOmpDeclareMapperStatement *variable_SgOmpDeclareMapperStatement) { visit(static_cast<SgOmpDeclareMapperStatement::base_node_type *>(variable_SgOmpDeclareMapperStatement)); }
  334933           0 :           void visit(SgOmpCancelStatement *variable_SgOmpCancelStatement) { visit(static_cast<SgOmpCancelStatement::base_node_type *>(variable_SgOmpCancelStatement)); }
  334934           0 :           void visit(SgOmpDistributeStatement *variable_SgOmpDistributeStatement) { visit(static_cast<SgOmpDistributeStatement::base_node_type *>(variable_SgOmpDistributeStatement)); }
  334935           0 :           void visit(SgOmpMetadirectiveStatement *variable_SgOmpMetadirectiveStatement) { visit(static_cast<SgOmpMetadirectiveStatement::base_node_type *>(variable_SgOmpMetadirectiveStatement)); }
  334936           0 :           void visit(SgOmpSingleStatement *variable_SgOmpSingleStatement) { visit(static_cast<SgOmpSingleStatement::base_node_type *>(variable_SgOmpSingleStatement)); }
  334937           0 :           void visit(SgOmpTaskStatement *variable_SgOmpTaskStatement) { visit(static_cast<SgOmpTaskStatement::base_node_type *>(variable_SgOmpTaskStatement)); }
  334938           0 :           void visit(SgOmpTargetEnterDataStatement *variable_SgOmpTargetEnterDataStatement) { visit(static_cast<SgOmpTargetEnterDataStatement::base_node_type *>(variable_SgOmpTargetEnterDataStatement)); }
  334939           0 :           void visit(SgOmpTargetExitDataStatement *variable_SgOmpTargetExitDataStatement) { visit(static_cast<SgOmpTargetExitDataStatement::base_node_type *>(variable_SgOmpTargetExitDataStatement)); }
  334940           0 :           void visit(SgUpirWorksharingStatement *variable_SgUpirWorksharingStatement) { visit(static_cast<SgUpirWorksharingStatement::base_node_type *>(variable_SgUpirWorksharingStatement)); }
  334941           0 :           void visit(SgOmpForSimdStatement *variable_SgOmpForSimdStatement) { visit(static_cast<SgOmpForSimdStatement::base_node_type *>(variable_SgOmpForSimdStatement)); }
  334942           0 :           void visit(SgOmpDoStatement *variable_SgOmpDoStatement) { visit(static_cast<SgOmpDoStatement::base_node_type *>(variable_SgOmpDoStatement)); }
  334943           0 :           void visit(SgOmpSectionsStatement *variable_SgOmpSectionsStatement) { visit(static_cast<SgOmpSectionsStatement::base_node_type *>(variable_SgOmpSectionsStatement)); }
  334944           0 :           void visit(SgOmpAtomicStatement *variable_SgOmpAtomicStatement) { visit(static_cast<SgOmpAtomicStatement::base_node_type *>(variable_SgOmpAtomicStatement)); }
  334945           0 :           void visit(SgUpirTaskStatement *variable_SgUpirTaskStatement) { visit(static_cast<SgUpirTaskStatement::base_node_type *>(variable_SgUpirTaskStatement)); }
  334946           0 :           void visit(SgOmpTargetDataStatement *variable_SgOmpTargetDataStatement) { visit(static_cast<SgOmpTargetDataStatement::base_node_type *>(variable_SgOmpTargetDataStatement)); }
  334947           0 :           void visit(SgOmpTargetParallelForStatement *variable_SgOmpTargetParallelForStatement) { visit(static_cast<SgOmpTargetParallelForStatement::base_node_type *>(variable_SgOmpTargetParallelForStatement)); }
  334948           0 :           void visit(SgOmpTargetParallelStatement *variable_SgOmpTargetParallelStatement) { visit(static_cast<SgOmpTargetParallelStatement::base_node_type *>(variable_SgOmpTargetParallelStatement)); }
  334949           0 :           void visit(SgOmpDistributeSimdStatement *variable_SgOmpDistributeSimdStatement) { visit(static_cast<SgOmpDistributeSimdStatement::base_node_type *>(variable_SgOmpDistributeSimdStatement)); }
  334950           0 :           void visit(SgOmpDistributeParallelForStatement *variable_SgOmpDistributeParallelForStatement) { visit(static_cast<SgOmpDistributeParallelForStatement::base_node_type *>(variable_SgOmpDistributeParallelForStatement)); }
  334951           0 :           void visit(SgOmpDistributeParallelForSimdStatement *variable_SgOmpDistributeParallelForSimdStatement) { visit(static_cast<SgOmpDistributeParallelForSimdStatement::base_node_type *>(variable_SgOmpDistributeParallelForSimdStatement)); }
  334952           0 :           void visit(SgOmpTaskloopSimdStatement *variable_SgOmpTaskloopSimdStatement) { visit(static_cast<SgOmpTaskloopSimdStatement::base_node_type *>(variable_SgOmpTaskloopSimdStatement)); }
  334953           0 :           void visit(SgOmpTargetUpdateStatement *variable_SgOmpTargetUpdateStatement) { visit(static_cast<SgOmpTargetUpdateStatement::base_node_type *>(variable_SgOmpTargetUpdateStatement)); }
  334954           0 :           void visit(SgOmpTargetParallelForSimdStatement *variable_SgOmpTargetParallelForSimdStatement) { visit(static_cast<SgOmpTargetParallelForSimdStatement::base_node_type *>(variable_SgOmpTargetParallelForSimdStatement)); }
  334955           0 :           void visit(SgOmpTargetParallelLoopStatement *variable_SgOmpTargetParallelLoopStatement) { visit(static_cast<SgOmpTargetParallelLoopStatement::base_node_type *>(variable_SgOmpTargetParallelLoopStatement)); }
  334956           0 :           void visit(SgOmpTargetSimdStatement *variable_SgOmpTargetSimdStatement) { visit(static_cast<SgOmpTargetSimdStatement::base_node_type *>(variable_SgOmpTargetSimdStatement)); }
  334957           0 :           void visit(SgOmpTargetTeamsStatement *variable_SgOmpTargetTeamsStatement) { visit(static_cast<SgOmpTargetTeamsStatement::base_node_type *>(variable_SgOmpTargetTeamsStatement)); }
  334958           0 :           void visit(SgOmpTargetTeamsDistributeStatement *variable_SgOmpTargetTeamsDistributeStatement) { visit(static_cast<SgOmpTargetTeamsDistributeStatement::base_node_type *>(variable_SgOmpTargetTeamsDistributeStatement)); }
  334959           0 :           void visit(SgOmpTargetTeamsDistributeSimdStatement *variable_SgOmpTargetTeamsDistributeSimdStatement) { visit(static_cast<SgOmpTargetTeamsDistributeSimdStatement::base_node_type *>(variable_SgOmpTargetTeamsDistributeSimdStatement)); }
  334960           0 :           void visit(SgOmpTargetTeamsLoopStatement *variable_SgOmpTargetTeamsLoopStatement) { visit(static_cast<SgOmpTargetTeamsLoopStatement::base_node_type *>(variable_SgOmpTargetTeamsLoopStatement)); }
  334961           0 :           void visit(SgOmpTargetTeamsDistributeParallelForStatement *variable_SgOmpTargetTeamsDistributeParallelForStatement) { visit(static_cast<SgOmpTargetTeamsDistributeParallelForStatement::base_node_type *>(variable_SgOmpTargetTeamsDistributeParallelForStatement)); }
  334962           0 :           void visit(SgOmpTargetTeamsDistributeParallelForSimdStatement *variable_SgOmpTargetTeamsDistributeParallelForSimdStatement) { visit(static_cast<SgOmpTargetTeamsDistributeParallelForSimdStatement::base_node_type *>(variable_SgOmpTargetTeamsDistributeParallelForSimdStatement)); }
  334963           0 :           void visit(SgOmpMasterTaskloopSimdStatement *variable_SgOmpMasterTaskloopSimdStatement) { visit(static_cast<SgOmpMasterTaskloopSimdStatement::base_node_type *>(variable_SgOmpMasterTaskloopSimdStatement)); }
  334964           0 :           void visit(SgOmpParallelMasterTaskloopStatement *variable_SgOmpParallelMasterTaskloopStatement) { visit(static_cast<SgOmpParallelMasterTaskloopStatement::base_node_type *>(variable_SgOmpParallelMasterTaskloopStatement)); }
  334965           0 :           void visit(SgOmpParallelMasterTaskloopSimdStatement *variable_SgOmpParallelMasterTaskloopSimdStatement) { visit(static_cast<SgOmpParallelMasterTaskloopSimdStatement::base_node_type *>(variable_SgOmpParallelMasterTaskloopSimdStatement)); }
  334966           0 :           void visit(SgOmpTeamsDistributeStatement *variable_SgOmpTeamsDistributeStatement) { visit(static_cast<SgOmpTeamsDistributeStatement::base_node_type *>(variable_SgOmpTeamsDistributeStatement)); }
  334967           0 :           void visit(SgOmpTeamsDistributeSimdStatement *variable_SgOmpTeamsDistributeSimdStatement) { visit(static_cast<SgOmpTeamsDistributeSimdStatement::base_node_type *>(variable_SgOmpTeamsDistributeSimdStatement)); }
  334968           0 :           void visit(SgOmpTeamsDistributeParallelForStatement *variable_SgOmpTeamsDistributeParallelForStatement) { visit(static_cast<SgOmpTeamsDistributeParallelForStatement::base_node_type *>(variable_SgOmpTeamsDistributeParallelForStatement)); }
  334969           0 :           void visit(SgOmpTeamsDistributeParallelForSimdStatement *variable_SgOmpTeamsDistributeParallelForSimdStatement) { visit(static_cast<SgOmpTeamsDistributeParallelForSimdStatement::base_node_type *>(variable_SgOmpTeamsDistributeParallelForSimdStatement)); }
  334970           0 :           void visit(SgOmpTeamsLoopStatement *variable_SgOmpTeamsLoopStatement) { visit(static_cast<SgOmpTeamsLoopStatement::base_node_type *>(variable_SgOmpTeamsLoopStatement)); }
  334971           0 :           void visit(SgOmpParallelMasterStatement *variable_SgOmpParallelMasterStatement) { visit(static_cast<SgOmpParallelMasterStatement::base_node_type *>(variable_SgOmpParallelMasterStatement)); }
  334972           0 :           void visit(SgOmpMasterTaskloopStatement *variable_SgOmpMasterTaskloopStatement) { visit(static_cast<SgOmpMasterTaskloopStatement::base_node_type *>(variable_SgOmpMasterTaskloopStatement)); }
  334973           0 :           void visit(SgOmpParallelLoopStatement *variable_SgOmpParallelLoopStatement) { visit(static_cast<SgOmpParallelLoopStatement::base_node_type *>(variable_SgOmpParallelLoopStatement)); }
  334974           0 :           void visit(SgOmpUnrollStatement *variable_SgOmpUnrollStatement) { visit(static_cast<SgOmpUnrollStatement::base_node_type *>(variable_SgOmpUnrollStatement)); }
  334975           0 :           void visit(SgOmpTileStatement *variable_SgOmpTileStatement) { visit(static_cast<SgOmpTileStatement::base_node_type *>(variable_SgOmpTileStatement)); }
  334976           0 :           void visit(SgUpirSimdStatement *variable_SgUpirSimdStatement) { visit(static_cast<SgUpirSimdStatement::base_node_type *>(variable_SgUpirSimdStatement)); }
  334977           0 :           void visit(SgOmpCriticalStatement *variable_SgOmpCriticalStatement) { visit(static_cast<SgOmpCriticalStatement::base_node_type *>(variable_SgOmpCriticalStatement)); }
  334978           0 :           void visit(SgOmpOrderedStatement *variable_SgOmpOrderedStatement) { visit(static_cast<SgOmpOrderedStatement::base_node_type *>(variable_SgOmpOrderedStatement)); }
  334979           0 :           void visit(SgUpirLoopStatement *variable_SgUpirLoopStatement) { visit(static_cast<SgUpirLoopStatement::base_node_type *>(variable_SgUpirLoopStatement)); }
  334980           0 :           void visit(SgUpirLoopParallelStatement *variable_SgUpirLoopParallelStatement) { visit(static_cast<SgUpirLoopParallelStatement::base_node_type *>(variable_SgUpirLoopParallelStatement)); }
  334981           0 :           void visit(SgUpirSyncStatement *variable_SgUpirSyncStatement) { visit(static_cast<SgUpirSyncStatement::base_node_type *>(variable_SgUpirSyncStatement)); }
  334982           0 :           void visit(SgUpirFieldBodyStatement *variable_SgUpirFieldBodyStatement) { visit(static_cast<SgUpirFieldBodyStatement::base_node_type *>(variable_SgUpirFieldBodyStatement)); }
  334983           0 :           void visit(SgOmpMasterStatement *variable_SgOmpMasterStatement) { visit(static_cast<SgOmpMasterStatement::base_node_type *>(variable_SgOmpMasterStatement)); }
  334984           0 :           void visit(SgOmpSectionStatement *variable_SgOmpSectionStatement) { visit(static_cast<SgOmpSectionStatement::base_node_type *>(variable_SgOmpSectionStatement)); }
  334985           0 :           void visit(SgOmpWorkshareStatement *variable_SgOmpWorkshareStatement) { visit(static_cast<SgOmpWorkshareStatement::base_node_type *>(variable_SgOmpWorkshareStatement)); }
  334986           0 :           void visit(SgOmpFlushStatement *variable_SgOmpFlushStatement) { visit(static_cast<SgOmpFlushStatement::base_node_type *>(variable_SgOmpFlushStatement)); }
  334987           0 :           void visit(SgOmpAllocateStatement *variable_SgOmpAllocateStatement) { visit(static_cast<SgOmpAllocateStatement::base_node_type *>(variable_SgOmpAllocateStatement)); }
  334988           0 :           void visit(SgOmpOrderedDependStatement *variable_SgOmpOrderedDependStatement) { visit(static_cast<SgOmpOrderedDependStatement::base_node_type *>(variable_SgOmpOrderedDependStatement)); }
  334989           0 :           void visit(SgUpirBodyStatement *variable_SgUpirBodyStatement) { visit(static_cast<SgUpirBodyStatement::base_node_type *>(variable_SgUpirBodyStatement)); }
  334990           0 :           void visit(SgUpirFieldStatement *variable_SgUpirFieldStatement) { visit(static_cast<SgUpirFieldStatement::base_node_type *>(variable_SgUpirFieldStatement)); }
  334991           0 :           void visit(SgBlockDataStatement *variable_SgBlockDataStatement) { visit(static_cast<SgBlockDataStatement::base_node_type *>(variable_SgBlockDataStatement)); }
  334992           0 :           void visit(SgImplicitStatement *variable_SgImplicitStatement) { visit(static_cast<SgImplicitStatement::base_node_type *>(variable_SgImplicitStatement)); }
  334993           0 :           void visit(SgStatementFunctionStatement *variable_SgStatementFunctionStatement) { visit(static_cast<SgStatementFunctionStatement::base_node_type *>(variable_SgStatementFunctionStatement)); }
  334994           0 :           void visit(SgWhereStatement *variable_SgWhereStatement) { visit(static_cast<SgWhereStatement::base_node_type *>(variable_SgWhereStatement)); }
  334995           0 :           void visit(SgNullifyStatement *variable_SgNullifyStatement) { visit(static_cast<SgNullifyStatement::base_node_type *>(variable_SgNullifyStatement)); }
  334996           0 :           void visit(SgEquivalenceStatement *variable_SgEquivalenceStatement) { visit(static_cast<SgEquivalenceStatement::base_node_type *>(variable_SgEquivalenceStatement)); }
  334997           0 :           void visit(SgDerivedTypeStatement *variable_SgDerivedTypeStatement) { visit(static_cast<SgDerivedTypeStatement::base_node_type *>(variable_SgDerivedTypeStatement)); }
  334998           0 :           void visit(SgAttributeSpecificationStatement *variable_SgAttributeSpecificationStatement) { visit(static_cast<SgAttributeSpecificationStatement::base_node_type *>(variable_SgAttributeSpecificationStatement)); }
  334999           0 :           void visit(SgAllocateStatement *variable_SgAllocateStatement) { visit(static_cast<SgAllocateStatement::base_node_type *>(variable_SgAllocateStatement)); }
  335000           0 :           void visit(SgDeallocateStatement *variable_SgDeallocateStatement) { visit(static_cast<SgDeallocateStatement::base_node_type *>(variable_SgDeallocateStatement)); }
  335001           0 :           void visit(SgContainsStatement *variable_SgContainsStatement) { visit(static_cast<SgContainsStatement::base_node_type *>(variable_SgContainsStatement)); }
  335002           0 :           void visit(SgSequenceStatement *variable_SgSequenceStatement) { visit(static_cast<SgSequenceStatement::base_node_type *>(variable_SgSequenceStatement)); }
  335003           0 :           void visit(SgElseWhereStatement *variable_SgElseWhereStatement) { visit(static_cast<SgElseWhereStatement::base_node_type *>(variable_SgElseWhereStatement)); }
  335004           0 :           void visit(SgArithmeticIfStatement *variable_SgArithmeticIfStatement) { visit(static_cast<SgArithmeticIfStatement::base_node_type *>(variable_SgArithmeticIfStatement)); }
  335005           0 :           void visit(SgAssignStatement *variable_SgAssignStatement) { visit(static_cast<SgAssignStatement::base_node_type *>(variable_SgAssignStatement)); }
  335006           0 :           void visit(SgComputedGotoStatement *variable_SgComputedGotoStatement) { visit(static_cast<SgComputedGotoStatement::base_node_type *>(variable_SgComputedGotoStatement)); }
  335007           0 :           void visit(SgAssignedGotoStatement *variable_SgAssignedGotoStatement) { visit(static_cast<SgAssignedGotoStatement::base_node_type *>(variable_SgAssignedGotoStatement)); }
  335008           0 :           void visit(SgNamelistStatement *variable_SgNamelistStatement) { visit(static_cast<SgNamelistStatement::base_node_type *>(variable_SgNamelistStatement)); }
  335009           0 :           void visit(SgImportStatement *variable_SgImportStatement) { visit(static_cast<SgImportStatement::base_node_type *>(variable_SgImportStatement)); }
  335010           0 :           void visit(SgAssociateStatement *variable_SgAssociateStatement) { visit(static_cast<SgAssociateStatement::base_node_type *>(variable_SgAssociateStatement)); }
  335011           0 :           void visit(SgFortranIncludeLine *variable_SgFortranIncludeLine) { visit(static_cast<SgFortranIncludeLine::base_node_type *>(variable_SgFortranIncludeLine)); }
  335012           0 :           void visit(SgNamespaceDeclarationStatement *variable_SgNamespaceDeclarationStatement) { visit(static_cast<SgNamespaceDeclarationStatement::base_node_type *>(variable_SgNamespaceDeclarationStatement)); }
  335013           0 :           void visit(SgNamespaceAliasDeclarationStatement *variable_SgNamespaceAliasDeclarationStatement) { visit(static_cast<SgNamespaceAliasDeclarationStatement::base_node_type *>(variable_SgNamespaceAliasDeclarationStatement)); }
  335014           0 :           void visit(SgNamespaceDefinitionStatement *variable_SgNamespaceDefinitionStatement) { visit(static_cast<SgNamespaceDefinitionStatement::base_node_type *>(variable_SgNamespaceDefinitionStatement)); }
  335015           0 :           void visit(SgUsingDeclarationStatement *variable_SgUsingDeclarationStatement) { visit(static_cast<SgUsingDeclarationStatement::base_node_type *>(variable_SgUsingDeclarationStatement)); }
  335016           0 :           void visit(SgUsingDirectiveStatement *variable_SgUsingDirectiveStatement) { visit(static_cast<SgUsingDirectiveStatement::base_node_type *>(variable_SgUsingDirectiveStatement)); }
  335017           0 :           void visit(SgTemplateInstantiationDirectiveStatement *variable_SgTemplateInstantiationDirectiveStatement) { visit(static_cast<SgTemplateInstantiationDirectiveStatement::base_node_type *>(variable_SgTemplateInstantiationDirectiveStatement)); }
  335018           0 :           void visit(SgStaticAssertionDeclaration *variable_SgStaticAssertionDeclaration) { visit(static_cast<SgStaticAssertionDeclaration::base_node_type *>(variable_SgStaticAssertionDeclaration)); }
  335019           0 :           void visit(SgTemplateClassDefinition *variable_SgTemplateClassDefinition) { visit(static_cast<SgTemplateClassDefinition::base_node_type *>(variable_SgTemplateClassDefinition)); }
  335020           0 :           void visit(SgTemplateFunctionDefinition *variable_SgTemplateFunctionDefinition) { visit(static_cast<SgTemplateFunctionDefinition::base_node_type *>(variable_SgTemplateFunctionDefinition)); }
  335021           0 :           void visit(SgClassDeclaration *variable_SgClassDeclaration) { visit(static_cast<SgClassDeclaration::base_node_type *>(variable_SgClassDeclaration)); }
  335022           0 :           void visit(SgClassDefinition *variable_SgClassDefinition) { visit(static_cast<SgClassDefinition::base_node_type *>(variable_SgClassDefinition)); }
  335023           0 :           void visit(SgFunctionDefinition *variable_SgFunctionDefinition) { visit(static_cast<SgFunctionDefinition::base_node_type *>(variable_SgFunctionDefinition)); }
  335024           0 :           void visit(SgScopeStatement *variable_SgScopeStatement) { visit(static_cast<SgScopeStatement::base_node_type *>(variable_SgScopeStatement)); }
  335025           0 :           void visit(SgMemberFunctionDeclaration *variable_SgMemberFunctionDeclaration) { visit(static_cast<SgMemberFunctionDeclaration::base_node_type *>(variable_SgMemberFunctionDeclaration)); }
  335026           0 :           void visit(SgFunctionDeclaration *variable_SgFunctionDeclaration) { visit(static_cast<SgFunctionDeclaration::base_node_type *>(variable_SgFunctionDeclaration)); }
  335027           0 :           void visit(SgIncludeDirectiveStatement *variable_SgIncludeDirectiveStatement) { visit(static_cast<SgIncludeDirectiveStatement::base_node_type *>(variable_SgIncludeDirectiveStatement)); }
  335028           0 :           void visit(SgDefineDirectiveStatement *variable_SgDefineDirectiveStatement) { visit(static_cast<SgDefineDirectiveStatement::base_node_type *>(variable_SgDefineDirectiveStatement)); }
  335029           0 :           void visit(SgUndefDirectiveStatement *variable_SgUndefDirectiveStatement) { visit(static_cast<SgUndefDirectiveStatement::base_node_type *>(variable_SgUndefDirectiveStatement)); }
  335030           0 :           void visit(SgIfdefDirectiveStatement *variable_SgIfdefDirectiveStatement) { visit(static_cast<SgIfdefDirectiveStatement::base_node_type *>(variable_SgIfdefDirectiveStatement)); }
  335031           0 :           void visit(SgIfndefDirectiveStatement *variable_SgIfndefDirectiveStatement) { visit(static_cast<SgIfndefDirectiveStatement::base_node_type *>(variable_SgIfndefDirectiveStatement)); }
  335032           0 :           void visit(SgIfDirectiveStatement *variable_SgIfDirectiveStatement) { visit(static_cast<SgIfDirectiveStatement::base_node_type *>(variable_SgIfDirectiveStatement)); }
  335033           0 :           void visit(SgDeadIfDirectiveStatement *variable_SgDeadIfDirectiveStatement) { visit(static_cast<SgDeadIfDirectiveStatement::base_node_type *>(variable_SgDeadIfDirectiveStatement)); }
  335034           0 :           void visit(SgElseDirectiveStatement *variable_SgElseDirectiveStatement) { visit(static_cast<SgElseDirectiveStatement::base_node_type *>(variable_SgElseDirectiveStatement)); }
  335035           0 :           void visit(SgElseifDirectiveStatement *variable_SgElseifDirectiveStatement) { visit(static_cast<SgElseifDirectiveStatement::base_node_type *>(variable_SgElseifDirectiveStatement)); }
  335036           0 :           void visit(SgEndifDirectiveStatement *variable_SgEndifDirectiveStatement) { visit(static_cast<SgEndifDirectiveStatement::base_node_type *>(variable_SgEndifDirectiveStatement)); }
  335037           0 :           void visit(SgLineDirectiveStatement *variable_SgLineDirectiveStatement) { visit(static_cast<SgLineDirectiveStatement::base_node_type *>(variable_SgLineDirectiveStatement)); }
  335038           0 :           void visit(SgWarningDirectiveStatement *variable_SgWarningDirectiveStatement) { visit(static_cast<SgWarningDirectiveStatement::base_node_type *>(variable_SgWarningDirectiveStatement)); }
  335039           0 :           void visit(SgErrorDirectiveStatement *variable_SgErrorDirectiveStatement) { visit(static_cast<SgErrorDirectiveStatement::base_node_type *>(variable_SgErrorDirectiveStatement)); }
  335040           0 :           void visit(SgEmptyDirectiveStatement *variable_SgEmptyDirectiveStatement) { visit(static_cast<SgEmptyDirectiveStatement::base_node_type *>(variable_SgEmptyDirectiveStatement)); }
  335041           0 :           void visit(SgIncludeNextDirectiveStatement *variable_SgIncludeNextDirectiveStatement) { visit(static_cast<SgIncludeNextDirectiveStatement::base_node_type *>(variable_SgIncludeNextDirectiveStatement)); }
  335042           0 :           void visit(SgIdentDirectiveStatement *variable_SgIdentDirectiveStatement) { visit(static_cast<SgIdentDirectiveStatement::base_node_type *>(variable_SgIdentDirectiveStatement)); }
  335043           0 :           void visit(SgLinemarkerDirectiveStatement *variable_SgLinemarkerDirectiveStatement) { visit(static_cast<SgLinemarkerDirectiveStatement::base_node_type *>(variable_SgLinemarkerDirectiveStatement)); }
  335044           0 :           void visit(SgC_PreprocessorDirectiveStatement *variable_SgC_PreprocessorDirectiveStatement) { visit(static_cast<SgC_PreprocessorDirectiveStatement::base_node_type *>(variable_SgC_PreprocessorDirectiveStatement)); }
  335045           0 :           void visit(SgClinkageStartStatement *variable_SgClinkageStartStatement) { visit(static_cast<SgClinkageStartStatement::base_node_type *>(variable_SgClinkageStartStatement)); }
  335046           0 :           void visit(SgClinkageEndStatement *variable_SgClinkageEndStatement) { visit(static_cast<SgClinkageEndStatement::base_node_type *>(variable_SgClinkageEndStatement)); }
  335047           0 :           void visit(SgClinkageDeclarationStatement *variable_SgClinkageDeclarationStatement) { visit(static_cast<SgClinkageDeclarationStatement::base_node_type *>(variable_SgClinkageDeclarationStatement)); }
  335048           0 :           void visit(SgOmpDeclareSimdStatement *variable_SgOmpDeclareSimdStatement) { visit(static_cast<SgOmpDeclareSimdStatement::base_node_type *>(variable_SgOmpDeclareSimdStatement)); }
  335049           0 :           void visit(SgOmpBarrierStatement *variable_SgOmpBarrierStatement) { visit(static_cast<SgOmpBarrierStatement::base_node_type *>(variable_SgOmpBarrierStatement)); }
  335050           0 :           void visit(SgOmpTaskyieldStatement *variable_SgOmpTaskyieldStatement) { visit(static_cast<SgOmpTaskyieldStatement::base_node_type *>(variable_SgOmpTaskyieldStatement)); }
  335051           0 :           void visit(SgOmpRequiresStatement *variable_SgOmpRequiresStatement) { visit(static_cast<SgOmpRequiresStatement::base_node_type *>(variable_SgOmpRequiresStatement)); }
  335052           0 :           void visit(SgOmpTaskwaitStatement *variable_SgOmpTaskwaitStatement) { visit(static_cast<SgOmpTaskwaitStatement::base_node_type *>(variable_SgOmpTaskwaitStatement)); }
  335053           0 :           void visit(SgOmpThreadprivateStatement *variable_SgOmpThreadprivateStatement) { visit(static_cast<SgOmpThreadprivateStatement::base_node_type *>(variable_SgOmpThreadprivateStatement)); }
  335054           0 :           void visit(SgMicrosoftAttributeDeclaration *variable_SgMicrosoftAttributeDeclaration) { visit(static_cast<SgMicrosoftAttributeDeclaration::base_node_type *>(variable_SgMicrosoftAttributeDeclaration)); }
  335055           0 :           void visit(SgEmptyDeclaration *variable_SgEmptyDeclaration) { visit(static_cast<SgEmptyDeclaration::base_node_type *>(variable_SgEmptyDeclaration)); }
  335056           0 :           void visit(SgDeclarationStatement *variable_SgDeclarationStatement) { visit(static_cast<SgDeclarationStatement::base_node_type *>(variable_SgDeclarationStatement)); }
  335057           0 :           void visit(SgUpirBaseStatement *variable_SgUpirBaseStatement) { visit(static_cast<SgUpirBaseStatement::base_node_type *>(variable_SgUpirBaseStatement)); }
  335058           0 :           void visit(SgStatement *variable_SgStatement) { visit(static_cast<SgStatement::base_node_type *>(variable_SgStatement)); }
  335059           0 :           void visit(SgVarRefExp *variable_SgVarRefExp) { visit(static_cast<SgVarRefExp::base_node_type *>(variable_SgVarRefExp)); }
  335060           0 :           void visit(SgNonrealRefExp *variable_SgNonrealRefExp) { visit(static_cast<SgNonrealRefExp::base_node_type *>(variable_SgNonrealRefExp)); }
  335061           0 :           void visit(SgCompoundLiteralExp *variable_SgCompoundLiteralExp) { visit(static_cast<SgCompoundLiteralExp::base_node_type *>(variable_SgCompoundLiteralExp)); }
  335062           0 :           void visit(SgLabelRefExp *variable_SgLabelRefExp) { visit(static_cast<SgLabelRefExp::base_node_type *>(variable_SgLabelRefExp)); }
  335063           0 :           void visit(SgClassNameRefExp *variable_SgClassNameRefExp) { visit(static_cast<SgClassNameRefExp::base_node_type *>(variable_SgClassNameRefExp)); }
  335064           0 :           void visit(SgFunctionRefExp *variable_SgFunctionRefExp) { visit(static_cast<SgFunctionRefExp::base_node_type *>(variable_SgFunctionRefExp)); }
  335065           0 :           void visit(SgMemberFunctionRefExp *variable_SgMemberFunctionRefExp) { visit(static_cast<SgMemberFunctionRefExp::base_node_type *>(variable_SgMemberFunctionRefExp)); }
  335066           0 :           void visit(SgTemplateFunctionRefExp *variable_SgTemplateFunctionRefExp) { visit(static_cast<SgTemplateFunctionRefExp::base_node_type *>(variable_SgTemplateFunctionRefExp)); }
  335067           0 :           void visit(SgTemplateMemberFunctionRefExp *variable_SgTemplateMemberFunctionRefExp) { visit(static_cast<SgTemplateMemberFunctionRefExp::base_node_type *>(variable_SgTemplateMemberFunctionRefExp)); }
  335068           0 :           void visit(SgSizeOfOp *variable_SgSizeOfOp) { visit(static_cast<SgSizeOfOp::base_node_type *>(variable_SgSizeOfOp)); }
  335069           0 :           void visit(SgAlignOfOp *variable_SgAlignOfOp) { visit(static_cast<SgAlignOfOp::base_node_type *>(variable_SgAlignOfOp)); }
  335070           0 :           void visit(SgNoexceptOp *variable_SgNoexceptOp) { visit(static_cast<SgNoexceptOp::base_node_type *>(variable_SgNoexceptOp)); }
  335071           0 :           void visit(SgTypeExpression *variable_SgTypeExpression) { visit(static_cast<SgTypeExpression::base_node_type *>(variable_SgTypeExpression)); }
  335072           0 :           void visit(SgLambdaExp *variable_SgLambdaExp) { visit(static_cast<SgLambdaExp::base_node_type *>(variable_SgLambdaExp)); }
  335073           0 :           void visit(SgUpcLocalsizeofExpression *variable_SgUpcLocalsizeofExpression) { visit(static_cast<SgUpcLocalsizeofExpression::base_node_type *>(variable_SgUpcLocalsizeofExpression)); }
  335074           0 :           void visit(SgUpcBlocksizeofExpression *variable_SgUpcBlocksizeofExpression) { visit(static_cast<SgUpcBlocksizeofExpression::base_node_type *>(variable_SgUpcBlocksizeofExpression)); }
  335075           0 :           void visit(SgUpcElemsizeofExpression *variable_SgUpcElemsizeofExpression) { visit(static_cast<SgUpcElemsizeofExpression::base_node_type *>(variable_SgUpcElemsizeofExpression)); }
  335076           0 :           void visit(SgVarArgStartOp *variable_SgVarArgStartOp) { visit(static_cast<SgVarArgStartOp::base_node_type *>(variable_SgVarArgStartOp)); }
  335077           0 :           void visit(SgVarArgStartOneOperandOp *variable_SgVarArgStartOneOperandOp) { visit(static_cast<SgVarArgStartOneOperandOp::base_node_type *>(variable_SgVarArgStartOneOperandOp)); }
  335078           0 :           void visit(SgVarArgOp *variable_SgVarArgOp) { visit(static_cast<SgVarArgOp::base_node_type *>(variable_SgVarArgOp)); }
  335079           0 :           void visit(SgVarArgEndOp *variable_SgVarArgEndOp) { visit(static_cast<SgVarArgEndOp::base_node_type *>(variable_SgVarArgEndOp)); }
  335080           0 :           void visit(SgVarArgCopyOp *variable_SgVarArgCopyOp) { visit(static_cast<SgVarArgCopyOp::base_node_type *>(variable_SgVarArgCopyOp)); }
  335081           0 :           void visit(SgTypeIdOp *variable_SgTypeIdOp) { visit(static_cast<SgTypeIdOp::base_node_type *>(variable_SgTypeIdOp)); }
  335082           0 :           void visit(SgConditionalExp *variable_SgConditionalExp) { visit(static_cast<SgConditionalExp::base_node_type *>(variable_SgConditionalExp)); }
  335083           0 :           void visit(SgNewExp *variable_SgNewExp) { visit(static_cast<SgNewExp::base_node_type *>(variable_SgNewExp)); }
  335084           0 :           void visit(SgDeleteExp *variable_SgDeleteExp) { visit(static_cast<SgDeleteExp::base_node_type *>(variable_SgDeleteExp)); }
  335085           0 :           void visit(SgThisExp *variable_SgThisExp) { visit(static_cast<SgThisExp::base_node_type *>(variable_SgThisExp)); }
  335086           0 :           void visit(SgSuperExp *variable_SgSuperExp) { visit(static_cast<SgSuperExp::base_node_type *>(variable_SgSuperExp)); }
  335087           0 :           void visit(SgClassExp *variable_SgClassExp) { visit(static_cast<SgClassExp::base_node_type *>(variable_SgClassExp)); }
  335088           0 :           void visit(SgRefExp *variable_SgRefExp) { visit(static_cast<SgRefExp::base_node_type *>(variable_SgRefExp)); }
  335089           0 :           void visit(SgAggregateInitializer *variable_SgAggregateInitializer) { visit(static_cast<SgAggregateInitializer::base_node_type *>(variable_SgAggregateInitializer)); }
  335090           0 :           void visit(SgCompoundInitializer *variable_SgCompoundInitializer) { visit(static_cast<SgCompoundInitializer::base_node_type *>(variable_SgCompoundInitializer)); }
  335091           0 :           void visit(SgConstructorInitializer *variable_SgConstructorInitializer) { visit(static_cast<SgConstructorInitializer::base_node_type *>(variable_SgConstructorInitializer)); }
  335092           0 :           void visit(SgAssignInitializer *variable_SgAssignInitializer) { visit(static_cast<SgAssignInitializer::base_node_type *>(variable_SgAssignInitializer)); }
  335093           0 :           void visit(SgBracedInitializer *variable_SgBracedInitializer) { visit(static_cast<SgBracedInitializer::base_node_type *>(variable_SgBracedInitializer)); }
  335094           0 :           void visit(SgExpressionRoot *variable_SgExpressionRoot) { visit(static_cast<SgExpressionRoot::base_node_type *>(variable_SgExpressionRoot)); }
  335095           0 :           void visit(SgMinusOp *variable_SgMinusOp) { visit(static_cast<SgMinusOp::base_node_type *>(variable_SgMinusOp)); }
  335096           0 :           void visit(SgUnaryAddOp *variable_SgUnaryAddOp) { visit(static_cast<SgUnaryAddOp::base_node_type *>(variable_SgUnaryAddOp)); }
  335097           0 :           void visit(SgNotOp *variable_SgNotOp) { visit(static_cast<SgNotOp::base_node_type *>(variable_SgNotOp)); }
  335098           0 :           void visit(SgPointerDerefExp *variable_SgPointerDerefExp) { visit(static_cast<SgPointerDerefExp::base_node_type *>(variable_SgPointerDerefExp)); }
  335099           0 :           void visit(SgAddressOfOp *variable_SgAddressOfOp) { visit(static_cast<SgAddressOfOp::base_node_type *>(variable_SgAddressOfOp)); }
  335100           0 :           void visit(SgMinusMinusOp *variable_SgMinusMinusOp) { visit(static_cast<SgMinusMinusOp::base_node_type *>(variable_SgMinusMinusOp)); }
  335101           0 :           void visit(SgPlusPlusOp *variable_SgPlusPlusOp) { visit(static_cast<SgPlusPlusOp::base_node_type *>(variable_SgPlusPlusOp)); }
  335102           0 :           void visit(SgBitComplementOp *variable_SgBitComplementOp) { visit(static_cast<SgBitComplementOp::base_node_type *>(variable_SgBitComplementOp)); }
  335103           0 :           void visit(SgRealPartOp *variable_SgRealPartOp) { visit(static_cast<SgRealPartOp::base_node_type *>(variable_SgRealPartOp)); }
  335104           0 :           void visit(SgImagPartOp *variable_SgImagPartOp) { visit(static_cast<SgImagPartOp::base_node_type *>(variable_SgImagPartOp)); }
  335105           0 :           void visit(SgConjugateOp *variable_SgConjugateOp) { visit(static_cast<SgConjugateOp::base_node_type *>(variable_SgConjugateOp)); }
  335106           0 :           void visit(SgCastExp *variable_SgCastExp) { visit(static_cast<SgCastExp::base_node_type *>(variable_SgCastExp)); }
  335107           0 :           void visit(SgThrowOp *variable_SgThrowOp) { visit(static_cast<SgThrowOp::base_node_type *>(variable_SgThrowOp)); }
  335108           0 :           void visit(SgArrowExp *variable_SgArrowExp) { visit(static_cast<SgArrowExp::base_node_type *>(variable_SgArrowExp)); }
  335109           0 :           void visit(SgDotExp *variable_SgDotExp) { visit(static_cast<SgDotExp::base_node_type *>(variable_SgDotExp)); }
  335110           0 :           void visit(SgDotStarOp *variable_SgDotStarOp) { visit(static_cast<SgDotStarOp::base_node_type *>(variable_SgDotStarOp)); }
  335111           0 :           void visit(SgArrowStarOp *variable_SgArrowStarOp) { visit(static_cast<SgArrowStarOp::base_node_type *>(variable_SgArrowStarOp)); }
  335112           0 :           void visit(SgEqualityOp *variable_SgEqualityOp) { visit(static_cast<SgEqualityOp::base_node_type *>(variable_SgEqualityOp)); }
  335113           0 :           void visit(SgLessThanOp *variable_SgLessThanOp) { visit(static_cast<SgLessThanOp::base_node_type *>(variable_SgLessThanOp)); }
  335114           0 :           void visit(SgGreaterThanOp *variable_SgGreaterThanOp) { visit(static_cast<SgGreaterThanOp::base_node_type *>(variable_SgGreaterThanOp)); }
  335115           0 :           void visit(SgNotEqualOp *variable_SgNotEqualOp) { visit(static_cast<SgNotEqualOp::base_node_type *>(variable_SgNotEqualOp)); }
  335116           0 :           void visit(SgLessOrEqualOp *variable_SgLessOrEqualOp) { visit(static_cast<SgLessOrEqualOp::base_node_type *>(variable_SgLessOrEqualOp)); }
  335117           0 :           void visit(SgGreaterOrEqualOp *variable_SgGreaterOrEqualOp) { visit(static_cast<SgGreaterOrEqualOp::base_node_type *>(variable_SgGreaterOrEqualOp)); }
  335118           0 :           void visit(SgAddOp *variable_SgAddOp) { visit(static_cast<SgAddOp::base_node_type *>(variable_SgAddOp)); }
  335119           0 :           void visit(SgSubtractOp *variable_SgSubtractOp) { visit(static_cast<SgSubtractOp::base_node_type *>(variable_SgSubtractOp)); }
  335120           0 :           void visit(SgMultiplyOp *variable_SgMultiplyOp) { visit(static_cast<SgMultiplyOp::base_node_type *>(variable_SgMultiplyOp)); }
  335121           0 :           void visit(SgDivideOp *variable_SgDivideOp) { visit(static_cast<SgDivideOp::base_node_type *>(variable_SgDivideOp)); }
  335122           0 :           void visit(SgIntegerDivideOp *variable_SgIntegerDivideOp) { visit(static_cast<SgIntegerDivideOp::base_node_type *>(variable_SgIntegerDivideOp)); }
  335123           0 :           void visit(SgModOp *variable_SgModOp) { visit(static_cast<SgModOp::base_node_type *>(variable_SgModOp)); }
  335124           0 :           void visit(SgAndOp *variable_SgAndOp) { visit(static_cast<SgAndOp::base_node_type *>(variable_SgAndOp)); }
  335125           0 :           void visit(SgOrOp *variable_SgOrOp) { visit(static_cast<SgOrOp::base_node_type *>(variable_SgOrOp)); }
  335126           0 :           void visit(SgBitXorOp *variable_SgBitXorOp) { visit(static_cast<SgBitXorOp::base_node_type *>(variable_SgBitXorOp)); }
  335127           0 :           void visit(SgBitAndOp *variable_SgBitAndOp) { visit(static_cast<SgBitAndOp::base_node_type *>(variable_SgBitAndOp)); }
  335128           0 :           void visit(SgBitOrOp *variable_SgBitOrOp) { visit(static_cast<SgBitOrOp::base_node_type *>(variable_SgBitOrOp)); }
  335129           0 :           void visit(SgBitEqvOp *variable_SgBitEqvOp) { visit(static_cast<SgBitEqvOp::base_node_type *>(variable_SgBitEqvOp)); }
  335130           0 :           void visit(SgCommaOpExp *variable_SgCommaOpExp) { visit(static_cast<SgCommaOpExp::base_node_type *>(variable_SgCommaOpExp)); }
  335131           0 :           void visit(SgLshiftOp *variable_SgLshiftOp) { visit(static_cast<SgLshiftOp::base_node_type *>(variable_SgLshiftOp)); }
  335132           0 :           void visit(SgRshiftOp *variable_SgRshiftOp) { visit(static_cast<SgRshiftOp::base_node_type *>(variable_SgRshiftOp)); }
  335133           0 :           void visit(SgPntrArrRefExp *variable_SgPntrArrRefExp) { visit(static_cast<SgPntrArrRefExp::base_node_type *>(variable_SgPntrArrRefExp)); }
  335134           0 :           void visit(SgScopeOp *variable_SgScopeOp) { visit(static_cast<SgScopeOp::base_node_type *>(variable_SgScopeOp)); }
  335135           0 :           void visit(SgAssignOp *variable_SgAssignOp) { visit(static_cast<SgAssignOp::base_node_type *>(variable_SgAssignOp)); }
  335136           0 :           void visit(SgPlusAssignOp *variable_SgPlusAssignOp) { visit(static_cast<SgPlusAssignOp::base_node_type *>(variable_SgPlusAssignOp)); }
  335137           0 :           void visit(SgMinusAssignOp *variable_SgMinusAssignOp) { visit(static_cast<SgMinusAssignOp::base_node_type *>(variable_SgMinusAssignOp)); }
  335138           0 :           void visit(SgAndAssignOp *variable_SgAndAssignOp) { visit(static_cast<SgAndAssignOp::base_node_type *>(variable_SgAndAssignOp)); }
  335139           0 :           void visit(SgIorAssignOp *variable_SgIorAssignOp) { visit(static_cast<SgIorAssignOp::base_node_type *>(variable_SgIorAssignOp)); }
  335140           0 :           void visit(SgMultAssignOp *variable_SgMultAssignOp) { visit(static_cast<SgMultAssignOp::base_node_type *>(variable_SgMultAssignOp)); }
  335141           0 :           void visit(SgDivAssignOp *variable_SgDivAssignOp) { visit(static_cast<SgDivAssignOp::base_node_type *>(variable_SgDivAssignOp)); }
  335142           0 :           void visit(SgModAssignOp *variable_SgModAssignOp) { visit(static_cast<SgModAssignOp::base_node_type *>(variable_SgModAssignOp)); }
  335143           0 :           void visit(SgXorAssignOp *variable_SgXorAssignOp) { visit(static_cast<SgXorAssignOp::base_node_type *>(variable_SgXorAssignOp)); }
  335144           0 :           void visit(SgLshiftAssignOp *variable_SgLshiftAssignOp) { visit(static_cast<SgLshiftAssignOp::base_node_type *>(variable_SgLshiftAssignOp)); }
  335145           0 :           void visit(SgRshiftAssignOp *variable_SgRshiftAssignOp) { visit(static_cast<SgRshiftAssignOp::base_node_type *>(variable_SgRshiftAssignOp)); }
  335146           0 :           void visit(SgIntegerDivideAssignOp *variable_SgIntegerDivideAssignOp) { visit(static_cast<SgIntegerDivideAssignOp::base_node_type *>(variable_SgIntegerDivideAssignOp)); }
  335147           0 :           void visit(SgExponentiationAssignOp *variable_SgExponentiationAssignOp) { visit(static_cast<SgExponentiationAssignOp::base_node_type *>(variable_SgExponentiationAssignOp)); }
  335148           0 :           void visit(SgConcatenationOp *variable_SgConcatenationOp) { visit(static_cast<SgConcatenationOp::base_node_type *>(variable_SgConcatenationOp)); }
  335149           0 :           void visit(SgNaryComparisonOp *variable_SgNaryComparisonOp) { visit(static_cast<SgNaryComparisonOp::base_node_type *>(variable_SgNaryComparisonOp)); }
  335150           0 :           void visit(SgNaryBooleanOp *variable_SgNaryBooleanOp) { visit(static_cast<SgNaryBooleanOp::base_node_type *>(variable_SgNaryBooleanOp)); }
  335151           0 :           void visit(SgBoolValExp *variable_SgBoolValExp) { visit(static_cast<SgBoolValExp::base_node_type *>(variable_SgBoolValExp)); }
  335152           0 :           void visit(SgStringVal *variable_SgStringVal) { visit(static_cast<SgStringVal::base_node_type *>(variable_SgStringVal)); }
  335153           0 :           void visit(SgShortVal *variable_SgShortVal) { visit(static_cast<SgShortVal::base_node_type *>(variable_SgShortVal)); }
  335154           0 :           void visit(SgCharVal *variable_SgCharVal) { visit(static_cast<SgCharVal::base_node_type *>(variable_SgCharVal)); }
  335155           0 :           void visit(SgUnsignedCharVal *variable_SgUnsignedCharVal) { visit(static_cast<SgUnsignedCharVal::base_node_type *>(variable_SgUnsignedCharVal)); }
  335156           0 :           void visit(SgWcharVal *variable_SgWcharVal) { visit(static_cast<SgWcharVal::base_node_type *>(variable_SgWcharVal)); }
  335157           0 :           void visit(SgChar16Val *variable_SgChar16Val) { visit(static_cast<SgChar16Val::base_node_type *>(variable_SgChar16Val)); }
  335158           0 :           void visit(SgChar32Val *variable_SgChar32Val) { visit(static_cast<SgChar32Val::base_node_type *>(variable_SgChar32Val)); }
  335159           0 :           void visit(SgUnsignedShortVal *variable_SgUnsignedShortVal) { visit(static_cast<SgUnsignedShortVal::base_node_type *>(variable_SgUnsignedShortVal)); }
  335160           0 :           void visit(SgIntVal *variable_SgIntVal) { visit(static_cast<SgIntVal::base_node_type *>(variable_SgIntVal)); }
  335161           0 :           void visit(SgEnumVal *variable_SgEnumVal) { visit(static_cast<SgEnumVal::base_node_type *>(variable_SgEnumVal)); }
  335162           0 :           void visit(SgUnsignedIntVal *variable_SgUnsignedIntVal) { visit(static_cast<SgUnsignedIntVal::base_node_type *>(variable_SgUnsignedIntVal)); }
  335163           0 :           void visit(SgLongIntVal *variable_SgLongIntVal) { visit(static_cast<SgLongIntVal::base_node_type *>(variable_SgLongIntVal)); }
  335164           0 :           void visit(SgLongLongIntVal *variable_SgLongLongIntVal) { visit(static_cast<SgLongLongIntVal::base_node_type *>(variable_SgLongLongIntVal)); }
  335165           0 :           void visit(SgUnsignedLongLongIntVal *variable_SgUnsignedLongLongIntVal) { visit(static_cast<SgUnsignedLongLongIntVal::base_node_type *>(variable_SgUnsignedLongLongIntVal)); }
  335166           0 :           void visit(SgUnsignedLongVal *variable_SgUnsignedLongVal) { visit(static_cast<SgUnsignedLongVal::base_node_type *>(variable_SgUnsignedLongVal)); }
  335167           0 :           void visit(SgFloatVal *variable_SgFloatVal) { visit(static_cast<SgFloatVal::base_node_type *>(variable_SgFloatVal)); }
  335168           0 :           void visit(SgDoubleVal *variable_SgDoubleVal) { visit(static_cast<SgDoubleVal::base_node_type *>(variable_SgDoubleVal)); }
  335169           0 :           void visit(SgLongDoubleVal *variable_SgLongDoubleVal) { visit(static_cast<SgLongDoubleVal::base_node_type *>(variable_SgLongDoubleVal)); }
  335170           0 :           void visit(SgFloat80Val *variable_SgFloat80Val) { visit(static_cast<SgFloat80Val::base_node_type *>(variable_SgFloat80Val)); }
  335171           0 :           void visit(SgFloat128Val *variable_SgFloat128Val) { visit(static_cast<SgFloat128Val::base_node_type *>(variable_SgFloat128Val)); }
  335172           0 :           void visit(SgNullptrValExp *variable_SgNullptrValExp) { visit(static_cast<SgNullptrValExp::base_node_type *>(variable_SgNullptrValExp)); }
  335173           0 :           void visit(SgVoidVal *variable_SgVoidVal) { visit(static_cast<SgVoidVal::base_node_type *>(variable_SgVoidVal)); }
  335174           0 :           void visit(SgFunctionParameterRefExp *variable_SgFunctionParameterRefExp) { visit(static_cast<SgFunctionParameterRefExp::base_node_type *>(variable_SgFunctionParameterRefExp)); }
  335175           0 :           void visit(SgTemplateParameterVal *variable_SgTemplateParameterVal) { visit(static_cast<SgTemplateParameterVal::base_node_type *>(variable_SgTemplateParameterVal)); }
  335176           0 :           void visit(SgUpcThreads *variable_SgUpcThreads) { visit(static_cast<SgUpcThreads::base_node_type *>(variable_SgUpcThreads)); }
  335177           0 :           void visit(SgUpcMythread *variable_SgUpcMythread) { visit(static_cast<SgUpcMythread::base_node_type *>(variable_SgUpcMythread)); }
  335178           0 :           void visit(SgComplexVal *variable_SgComplexVal) { visit(static_cast<SgComplexVal::base_node_type *>(variable_SgComplexVal)); }
  335179           0 :           void visit(SgNullExpression *variable_SgNullExpression) { visit(static_cast<SgNullExpression::base_node_type *>(variable_SgNullExpression)); }
  335180           0 :           void visit(SgVariantExpression *variable_SgVariantExpression) { visit(static_cast<SgVariantExpression::base_node_type *>(variable_SgVariantExpression)); }
  335181           0 :           void visit(SgStatementExpression *variable_SgStatementExpression) { visit(static_cast<SgStatementExpression::base_node_type *>(variable_SgStatementExpression)); }
  335182           0 :           void visit(SgAsmOp *variable_SgAsmOp) { visit(static_cast<SgAsmOp::base_node_type *>(variable_SgAsmOp)); }
  335183           0 :           void visit(SgCudaKernelExecConfig *variable_SgCudaKernelExecConfig) { visit(static_cast<SgCudaKernelExecConfig::base_node_type *>(variable_SgCudaKernelExecConfig)); }
  335184           0 :           void visit(SgCudaKernelCallExp *variable_SgCudaKernelCallExp) { visit(static_cast<SgCudaKernelCallExp::base_node_type *>(variable_SgCudaKernelCallExp)); }
  335185           0 :           void visit(SgLambdaRefExp *variable_SgLambdaRefExp) { visit(static_cast<SgLambdaRefExp::base_node_type *>(variable_SgLambdaRefExp)); }
  335186           0 :           void visit(SgTupleExp *variable_SgTupleExp) { visit(static_cast<SgTupleExp::base_node_type *>(variable_SgTupleExp)); }
  335187           0 :           void visit(SgListExp *variable_SgListExp) { visit(static_cast<SgListExp::base_node_type *>(variable_SgListExp)); }
  335188           0 :           void visit(SgDictionaryExp *variable_SgDictionaryExp) { visit(static_cast<SgDictionaryExp::base_node_type *>(variable_SgDictionaryExp)); }
  335189           0 :           void visit(SgKeyDatumPair *variable_SgKeyDatumPair) { visit(static_cast<SgKeyDatumPair::base_node_type *>(variable_SgKeyDatumPair)); }
  335190           0 :           void visit(SgComprehension *variable_SgComprehension) { visit(static_cast<SgComprehension::base_node_type *>(variable_SgComprehension)); }
  335191           0 :           void visit(SgListComprehension *variable_SgListComprehension) { visit(static_cast<SgListComprehension::base_node_type *>(variable_SgListComprehension)); }
  335192           0 :           void visit(SgSetComprehension *variable_SgSetComprehension) { visit(static_cast<SgSetComprehension::base_node_type *>(variable_SgSetComprehension)); }
  335193           0 :           void visit(SgDictionaryComprehension *variable_SgDictionaryComprehension) { visit(static_cast<SgDictionaryComprehension::base_node_type *>(variable_SgDictionaryComprehension)); }
  335194           0 :           void visit(SgMembershipOp *variable_SgMembershipOp) { visit(static_cast<SgMembershipOp::base_node_type *>(variable_SgMembershipOp)); }
  335195           0 :           void visit(SgNonMembershipOp *variable_SgNonMembershipOp) { visit(static_cast<SgNonMembershipOp::base_node_type *>(variable_SgNonMembershipOp)); }
  335196           0 :           void visit(SgIsOp *variable_SgIsOp) { visit(static_cast<SgIsOp::base_node_type *>(variable_SgIsOp)); }
  335197           0 :           void visit(SgIsNotOp *variable_SgIsNotOp) { visit(static_cast<SgIsNotOp::base_node_type *>(variable_SgIsNotOp)); }
  335198           0 :           void visit(SgStringConversion *variable_SgStringConversion) { visit(static_cast<SgStringConversion::base_node_type *>(variable_SgStringConversion)); }
  335199           0 :           void visit(SgYieldExpression *variable_SgYieldExpression) { visit(static_cast<SgYieldExpression::base_node_type *>(variable_SgYieldExpression)); }
  335200           0 :           void visit(SgFoldExpression *variable_SgFoldExpression) { visit(static_cast<SgFoldExpression::base_node_type *>(variable_SgFoldExpression)); }
  335201           0 :           void visit(SgChooseExpression *variable_SgChooseExpression) { visit(static_cast<SgChooseExpression::base_node_type *>(variable_SgChooseExpression)); }
  335202           0 :           void visit(SgAwaitExpression *variable_SgAwaitExpression) { visit(static_cast<SgAwaitExpression::base_node_type *>(variable_SgAwaitExpression)); }
  335203           0 :           void visit(SgSpaceshipOp *variable_SgSpaceshipOp) { visit(static_cast<SgSpaceshipOp::base_node_type *>(variable_SgSpaceshipOp)); }
  335204           0 :           void visit(SgSubscriptExpression *variable_SgSubscriptExpression) { visit(static_cast<SgSubscriptExpression::base_node_type *>(variable_SgSubscriptExpression)); }
  335205           0 :           void visit(SgColonShapeExp *variable_SgColonShapeExp) { visit(static_cast<SgColonShapeExp::base_node_type *>(variable_SgColonShapeExp)); }
  335206           0 :           void visit(SgAsteriskShapeExp *variable_SgAsteriskShapeExp) { visit(static_cast<SgAsteriskShapeExp::base_node_type *>(variable_SgAsteriskShapeExp)); }
  335207           0 :           void visit(SgIOItemExpression *variable_SgIOItemExpression) { visit(static_cast<SgIOItemExpression::base_node_type *>(variable_SgIOItemExpression)); }
  335208           0 :           void visit(SgImpliedDo *variable_SgImpliedDo) { visit(static_cast<SgImpliedDo::base_node_type *>(variable_SgImpliedDo)); }
  335209           0 :           void visit(SgExponentiationOp *variable_SgExponentiationOp) { visit(static_cast<SgExponentiationOp::base_node_type *>(variable_SgExponentiationOp)); }
  335210           0 :           void visit(SgUnknownArrayOrFunctionReference *variable_SgUnknownArrayOrFunctionReference) { visit(static_cast<SgUnknownArrayOrFunctionReference::base_node_type *>(variable_SgUnknownArrayOrFunctionReference)); }
  335211           0 :           void visit(SgActualArgumentExpression *variable_SgActualArgumentExpression) { visit(static_cast<SgActualArgumentExpression::base_node_type *>(variable_SgActualArgumentExpression)); }
  335212           0 :           void visit(SgUserDefinedBinaryOp *variable_SgUserDefinedBinaryOp) { visit(static_cast<SgUserDefinedBinaryOp::base_node_type *>(variable_SgUserDefinedBinaryOp)); }
  335213           0 :           void visit(SgPointerAssignOp *variable_SgPointerAssignOp) { visit(static_cast<SgPointerAssignOp::base_node_type *>(variable_SgPointerAssignOp)); }
  335214           0 :           void visit(SgCAFCoExpression *variable_SgCAFCoExpression) { visit(static_cast<SgCAFCoExpression::base_node_type *>(variable_SgCAFCoExpression)); }
  335215           0 :           void visit(SgDesignatedInitializer *variable_SgDesignatedInitializer) { visit(static_cast<SgDesignatedInitializer::base_node_type *>(variable_SgDesignatedInitializer)); }
  335216           0 :           void visit(SgMatrixExp *variable_SgMatrixExp) { visit(static_cast<SgMatrixExp::base_node_type *>(variable_SgMatrixExp)); }
  335217           0 :           void visit(SgRangeExp *variable_SgRangeExp) { visit(static_cast<SgRangeExp::base_node_type *>(variable_SgRangeExp)); }
  335218           0 :           void visit(SgMagicColonExp *variable_SgMagicColonExp) { visit(static_cast<SgMagicColonExp::base_node_type *>(variable_SgMagicColonExp)); }
  335219           0 :           void visit(SgElementwiseMultiplyOp *variable_SgElementwiseMultiplyOp) { visit(static_cast<SgElementwiseMultiplyOp::base_node_type *>(variable_SgElementwiseMultiplyOp)); }
  335220           0 :           void visit(SgPowerOp *variable_SgPowerOp) { visit(static_cast<SgPowerOp::base_node_type *>(variable_SgPowerOp)); }
  335221           0 :           void visit(SgElementwisePowerOp *variable_SgElementwisePowerOp) { visit(static_cast<SgElementwisePowerOp::base_node_type *>(variable_SgElementwisePowerOp)); }
  335222           0 :           void visit(SgElementwiseDivideOp *variable_SgElementwiseDivideOp) { visit(static_cast<SgElementwiseDivideOp::base_node_type *>(variable_SgElementwiseDivideOp)); }
  335223           0 :           void visit(SgLeftDivideOp *variable_SgLeftDivideOp) { visit(static_cast<SgLeftDivideOp::base_node_type *>(variable_SgLeftDivideOp)); }
  335224           0 :           void visit(SgElementwiseLeftDivideOp *variable_SgElementwiseLeftDivideOp) { visit(static_cast<SgElementwiseLeftDivideOp::base_node_type *>(variable_SgElementwiseLeftDivideOp)); }
  335225           0 :           void visit(SgElementwiseAddOp *variable_SgElementwiseAddOp) { visit(static_cast<SgElementwiseAddOp::base_node_type *>(variable_SgElementwiseAddOp)); }
  335226           0 :           void visit(SgElementwiseSubtractOp *variable_SgElementwiseSubtractOp) { visit(static_cast<SgElementwiseSubtractOp::base_node_type *>(variable_SgElementwiseSubtractOp)); }
  335227           0 :           void visit(SgMatrixTransposeOp *variable_SgMatrixTransposeOp) { visit(static_cast<SgMatrixTransposeOp::base_node_type *>(variable_SgMatrixTransposeOp)); }
  335228           0 :           void visit(SgElementwiseOp *variable_SgElementwiseOp) { visit(static_cast<SgElementwiseOp::base_node_type *>(variable_SgElementwiseOp)); }
  335229           0 :           void visit(SgInitializer *variable_SgInitializer) { visit(static_cast<SgInitializer::base_node_type *>(variable_SgInitializer)); }
  335230           0 :           void visit(SgSIMDLoad *variable_SgSIMDLoad) { visit(static_cast<SgSIMDLoad::base_node_type *>(variable_SgSIMDLoad)); }
  335231           0 :           void visit(SgSIMDBroadcast *variable_SgSIMDBroadcast) { visit(static_cast<SgSIMDBroadcast::base_node_type *>(variable_SgSIMDBroadcast)); }
  335232           0 :           void visit(SgSIMDStore *variable_SgSIMDStore) { visit(static_cast<SgSIMDStore::base_node_type *>(variable_SgSIMDStore)); }
  335233           0 :           void visit(SgSIMDPartialStore *variable_SgSIMDPartialStore) { visit(static_cast<SgSIMDPartialStore::base_node_type *>(variable_SgSIMDPartialStore)); }
  335234           0 :           void visit(SgSIMDScalarStore *variable_SgSIMDScalarStore) { visit(static_cast<SgSIMDScalarStore::base_node_type *>(variable_SgSIMDScalarStore)); }
  335235           0 :           void visit(SgSIMDGather *variable_SgSIMDGather) { visit(static_cast<SgSIMDGather::base_node_type *>(variable_SgSIMDGather)); }
  335236           0 :           void visit(SgSIMDExplicitGather *variable_SgSIMDExplicitGather) { visit(static_cast<SgSIMDExplicitGather::base_node_type *>(variable_SgSIMDExplicitGather)); }
  335237           0 :           void visit(SgSIMDScatter *variable_SgSIMDScatter) { visit(static_cast<SgSIMDScatter::base_node_type *>(variable_SgSIMDScatter)); }
  335238           0 :           void visit(SgSIMDAddOp *variable_SgSIMDAddOp) { visit(static_cast<SgSIMDAddOp::base_node_type *>(variable_SgSIMDAddOp)); }
  335239           0 :           void visit(SgSIMDSubOp *variable_SgSIMDSubOp) { visit(static_cast<SgSIMDSubOp::base_node_type *>(variable_SgSIMDSubOp)); }
  335240           0 :           void visit(SgSIMDMulOp *variable_SgSIMDMulOp) { visit(static_cast<SgSIMDMulOp::base_node_type *>(variable_SgSIMDMulOp)); }
  335241           0 :           void visit(SgSIMDDivOp *variable_SgSIMDDivOp) { visit(static_cast<SgSIMDDivOp::base_node_type *>(variable_SgSIMDDivOp)); }
  335242           0 :           void visit(SgSIMDFmaOp *variable_SgSIMDFmaOp) { visit(static_cast<SgSIMDFmaOp::base_node_type *>(variable_SgSIMDFmaOp)); }
  335243           0 :           void visit(SgSIMDBinaryOp *variable_SgSIMDBinaryOp) { visit(static_cast<SgSIMDBinaryOp::base_node_type *>(variable_SgSIMDBinaryOp)); }
  335244           0 :           void visit(SgUserDefinedUnaryOp *variable_SgUserDefinedUnaryOp) { visit(static_cast<SgUserDefinedUnaryOp::base_node_type *>(variable_SgUserDefinedUnaryOp)); }
  335245           0 :           void visit(SgPseudoDestructorRefExp *variable_SgPseudoDestructorRefExp) { visit(static_cast<SgPseudoDestructorRefExp::base_node_type *>(variable_SgPseudoDestructorRefExp)); }
  335246           0 :           void visit(SgUnaryOp *variable_SgUnaryOp) { visit(static_cast<SgUnaryOp::base_node_type *>(variable_SgUnaryOp)); }
  335247           0 :           void visit(SgCompoundAssignOp *variable_SgCompoundAssignOp) { visit(static_cast<SgCompoundAssignOp::base_node_type *>(variable_SgCompoundAssignOp)); }
  335248           0 :           void visit(SgBinaryOp *variable_SgBinaryOp) { visit(static_cast<SgBinaryOp::base_node_type *>(variable_SgBinaryOp)); }
  335249           0 :           void visit(SgNaryOp *variable_SgNaryOp) { visit(static_cast<SgNaryOp::base_node_type *>(variable_SgNaryOp)); }
  335250           0 :           void visit(SgValueExp *variable_SgValueExp) { visit(static_cast<SgValueExp::base_node_type *>(variable_SgValueExp)); }
  335251           0 :           void visit(SgExprListExp *variable_SgExprListExp) { visit(static_cast<SgExprListExp::base_node_type *>(variable_SgExprListExp)); }
  335252           0 :           void visit(SgFunctionCallExp *variable_SgFunctionCallExp) { visit(static_cast<SgFunctionCallExp::base_node_type *>(variable_SgFunctionCallExp)); }
  335253           0 :           void visit(SgCallExpression *variable_SgCallExpression) { visit(static_cast<SgCallExpression::base_node_type *>(variable_SgCallExpression)); }
  335254           0 :           void visit(SgTypeTraitBuiltinOperator *variable_SgTypeTraitBuiltinOperator) { visit(static_cast<SgTypeTraitBuiltinOperator::base_node_type *>(variable_SgTypeTraitBuiltinOperator)); }
  335255           0 :           void visit(SgExpression *variable_SgExpression) { visit(static_cast<SgExpression::base_node_type *>(variable_SgExpression)); }
  335256           0 :           void visit(SgTemplateVariableSymbol *variable_SgTemplateVariableSymbol) { visit(static_cast<SgTemplateVariableSymbol::base_node_type *>(variable_SgTemplateVariableSymbol)); }
  335257           0 :           void visit(SgVariableSymbol *variable_SgVariableSymbol) { visit(static_cast<SgVariableSymbol::base_node_type *>(variable_SgVariableSymbol)); }
  335258           0 :           void visit(SgFunctionTypeSymbol *variable_SgFunctionTypeSymbol) { visit(static_cast<SgFunctionTypeSymbol::base_node_type *>(variable_SgFunctionTypeSymbol)); }
  335259           0 :           void visit(SgTemplateClassSymbol *variable_SgTemplateClassSymbol) { visit(static_cast<SgTemplateClassSymbol::base_node_type *>(variable_SgTemplateClassSymbol)); }
  335260           0 :           void visit(SgClassSymbol *variable_SgClassSymbol) { visit(static_cast<SgClassSymbol::base_node_type *>(variable_SgClassSymbol)); }
  335261           0 :           void visit(SgTemplateSymbol *variable_SgTemplateSymbol) { visit(static_cast<SgTemplateSymbol::base_node_type *>(variable_SgTemplateSymbol)); }
  335262           0 :           void visit(SgEnumSymbol *variable_SgEnumSymbol) { visit(static_cast<SgEnumSymbol::base_node_type *>(variable_SgEnumSymbol)); }
  335263           0 :           void visit(SgEnumFieldSymbol *variable_SgEnumFieldSymbol) { visit(static_cast<SgEnumFieldSymbol::base_node_type *>(variable_SgEnumFieldSymbol)); }
  335264           0 :           void visit(SgTemplateTypedefSymbol *variable_SgTemplateTypedefSymbol) { visit(static_cast<SgTemplateTypedefSymbol::base_node_type *>(variable_SgTemplateTypedefSymbol)); }
  335265           0 :           void visit(SgTypedefSymbol *variable_SgTypedefSymbol) { visit(static_cast<SgTypedefSymbol::base_node_type *>(variable_SgTypedefSymbol)); }
  335266           0 :           void visit(SgTemplateFunctionSymbol *variable_SgTemplateFunctionSymbol) { visit(static_cast<SgTemplateFunctionSymbol::base_node_type *>(variable_SgTemplateFunctionSymbol)); }
  335267           0 :           void visit(SgTemplateMemberFunctionSymbol *variable_SgTemplateMemberFunctionSymbol) { visit(static_cast<SgTemplateMemberFunctionSymbol::base_node_type *>(variable_SgTemplateMemberFunctionSymbol)); }
  335268           0 :           void visit(SgLabelSymbol *variable_SgLabelSymbol) { visit(static_cast<SgLabelSymbol::base_node_type *>(variable_SgLabelSymbol)); }
  335269           0 :           void visit(SgDefaultSymbol *variable_SgDefaultSymbol) { visit(static_cast<SgDefaultSymbol::base_node_type *>(variable_SgDefaultSymbol)); }
  335270           0 :           void visit(SgNamespaceSymbol *variable_SgNamespaceSymbol) { visit(static_cast<SgNamespaceSymbol::base_node_type *>(variable_SgNamespaceSymbol)); }
  335271           0 :           void visit(SgIntrinsicSymbol *variable_SgIntrinsicSymbol) { visit(static_cast<SgIntrinsicSymbol::base_node_type *>(variable_SgIntrinsicSymbol)); }
  335272           0 :           void visit(SgModuleSymbol *variable_SgModuleSymbol) { visit(static_cast<SgModuleSymbol::base_node_type *>(variable_SgModuleSymbol)); }
  335273           0 :           void visit(SgInterfaceSymbol *variable_SgInterfaceSymbol) { visit(static_cast<SgInterfaceSymbol::base_node_type *>(variable_SgInterfaceSymbol)); }
  335274           0 :           void visit(SgCommonSymbol *variable_SgCommonSymbol) { visit(static_cast<SgCommonSymbol::base_node_type *>(variable_SgCommonSymbol)); }
  335275           0 :           void visit(SgRenameSymbol *variable_SgRenameSymbol) { visit(static_cast<SgRenameSymbol::base_node_type *>(variable_SgRenameSymbol)); }
  335276           0 :           void visit(SgMemberFunctionSymbol *variable_SgMemberFunctionSymbol) { visit(static_cast<SgMemberFunctionSymbol::base_node_type *>(variable_SgMemberFunctionSymbol)); }
  335277           0 :           void visit(SgFunctionSymbol *variable_SgFunctionSymbol) { visit(static_cast<SgFunctionSymbol::base_node_type *>(variable_SgFunctionSymbol)); }
  335278           0 :           void visit(SgAliasSymbol *variable_SgAliasSymbol) { visit(static_cast<SgAliasSymbol::base_node_type *>(variable_SgAliasSymbol)); }
  335279           0 :           void visit(SgNonrealSymbol *variable_SgNonrealSymbol) { visit(static_cast<SgNonrealSymbol::base_node_type *>(variable_SgNonrealSymbol)); }
  335280           0 :           void visit(SgSymbol *variable_SgSymbol) { visit(static_cast<SgSymbol::base_node_type *>(variable_SgSymbol)); }
  335281           0 :           void visit(SgCommonBlockObject *variable_SgCommonBlockObject) { visit(static_cast<SgCommonBlockObject::base_node_type *>(variable_SgCommonBlockObject)); }
  335282           0 :           void visit(SgInitializedName *variable_SgInitializedName) { visit(static_cast<SgInitializedName::base_node_type *>(variable_SgInitializedName)); }
  335283           0 :           void visit(SgLambdaCapture *variable_SgLambdaCapture) { visit(static_cast<SgLambdaCapture::base_node_type *>(variable_SgLambdaCapture)); }
  335284           0 :           void visit(SgLambdaCaptureList *variable_SgLambdaCaptureList) { visit(static_cast<SgLambdaCaptureList::base_node_type *>(variable_SgLambdaCaptureList)); }
  335285           0 :           void visit(SgOmpOrderedClause *variable_SgOmpOrderedClause) { visit(static_cast<SgOmpOrderedClause::base_node_type *>(variable_SgOmpOrderedClause)); }
  335286           0 :           void visit(SgOmpNowaitClause *variable_SgOmpNowaitClause) { visit(static_cast<SgOmpNowaitClause::base_node_type *>(variable_SgOmpNowaitClause)); }
  335287           0 :           void visit(SgOmpNogroupClause *variable_SgOmpNogroupClause) { visit(static_cast<SgOmpNogroupClause::base_node_type *>(variable_SgOmpNogroupClause)); }
  335288           0 :           void visit(SgOmpReadClause *variable_SgOmpReadClause) { visit(static_cast<SgOmpReadClause::base_node_type *>(variable_SgOmpReadClause)); }
  335289           0 :           void visit(SgOmpThreadsClause *variable_SgOmpThreadsClause) { visit(static_cast<SgOmpThreadsClause::base_node_type *>(variable_SgOmpThreadsClause)); }
  335290           0 :           void visit(SgOmpSimdClause *variable_SgOmpSimdClause) { visit(static_cast<SgOmpSimdClause::base_node_type *>(variable_SgOmpSimdClause)); }
  335291           0 :           void visit(SgOmpReverseOffloadClause *variable_SgOmpReverseOffloadClause) { visit(static_cast<SgOmpReverseOffloadClause::base_node_type *>(variable_SgOmpReverseOffloadClause)); }
  335292           0 :           void visit(SgOmpExtImplementationDefinedRequirementClause *variable_SgOmpExtImplementationDefinedRequirementClause) { visit(static_cast<SgOmpExtImplementationDefinedRequirementClause::base_node_type *>(variable_SgOmpExtImplementationDefinedRequirementClause)); }
  335293           0 :           void visit(SgOmpUnifiedAddressClause *variable_SgOmpUnifiedAddressClause) { visit(static_cast<SgOmpUnifiedAddressClause::base_node_type *>(variable_SgOmpUnifiedAddressClause)); }
  335294           0 :           void visit(SgOmpUnifiedSharedMemoryClause *variable_SgOmpUnifiedSharedMemoryClause) { visit(static_cast<SgOmpUnifiedSharedMemoryClause::base_node_type *>(variable_SgOmpUnifiedSharedMemoryClause)); }
  335295           0 :           void visit(SgOmpDynamicAllocatorsClause *variable_SgOmpDynamicAllocatorsClause) { visit(static_cast<SgOmpDynamicAllocatorsClause::base_node_type *>(variable_SgOmpDynamicAllocatorsClause)); }
  335296           0 :           void visit(SgOmpAtomicDefaultMemOrderClause *variable_SgOmpAtomicDefaultMemOrderClause) { visit(static_cast<SgOmpAtomicDefaultMemOrderClause::base_node_type *>(variable_SgOmpAtomicDefaultMemOrderClause)); }
  335297           0 :           void visit(SgOmpWriteClause *variable_SgOmpWriteClause) { visit(static_cast<SgOmpWriteClause::base_node_type *>(variable_SgOmpWriteClause)); }
  335298           0 :           void visit(SgOmpUpdateClause *variable_SgOmpUpdateClause) { visit(static_cast<SgOmpUpdateClause::base_node_type *>(variable_SgOmpUpdateClause)); }
  335299           0 :           void visit(SgOmpDepobjUpdateClause *variable_SgOmpDepobjUpdateClause) { visit(static_cast<SgOmpDepobjUpdateClause::base_node_type *>(variable_SgOmpDepobjUpdateClause)); }
  335300           0 :           void visit(SgOmpDestroyClause *variable_SgOmpDestroyClause) { visit(static_cast<SgOmpDestroyClause::base_node_type *>(variable_SgOmpDestroyClause)); }
  335301           0 :           void visit(SgOmpCaptureClause *variable_SgOmpCaptureClause) { visit(static_cast<SgOmpCaptureClause::base_node_type *>(variable_SgOmpCaptureClause)); }
  335302           0 :           void visit(SgOmpSeqCstClause *variable_SgOmpSeqCstClause) { visit(static_cast<SgOmpSeqCstClause::base_node_type *>(variable_SgOmpSeqCstClause)); }
  335303           0 :           void visit(SgOmpAcqRelClause *variable_SgOmpAcqRelClause) { visit(static_cast<SgOmpAcqRelClause::base_node_type *>(variable_SgOmpAcqRelClause)); }
  335304           0 :           void visit(SgOmpReleaseClause *variable_SgOmpReleaseClause) { visit(static_cast<SgOmpReleaseClause::base_node_type *>(variable_SgOmpReleaseClause)); }
  335305           0 :           void visit(SgOmpAcquireClause *variable_SgOmpAcquireClause) { visit(static_cast<SgOmpAcquireClause::base_node_type *>(variable_SgOmpAcquireClause)); }
  335306           0 :           void visit(SgOmpRelaxedClause *variable_SgOmpRelaxedClause) { visit(static_cast<SgOmpRelaxedClause::base_node_type *>(variable_SgOmpRelaxedClause)); }
  335307           0 :           void visit(SgOmpParallelClause *variable_SgOmpParallelClause) { visit(static_cast<SgOmpParallelClause::base_node_type *>(variable_SgOmpParallelClause)); }
  335308           0 :           void visit(SgOmpSectionsClause *variable_SgOmpSectionsClause) { visit(static_cast<SgOmpSectionsClause::base_node_type *>(variable_SgOmpSectionsClause)); }
  335309           0 :           void visit(SgOmpForClause *variable_SgOmpForClause) { visit(static_cast<SgOmpForClause::base_node_type *>(variable_SgOmpForClause)); }
  335310           0 :           void visit(SgOmpTaskgroupClause *variable_SgOmpTaskgroupClause) { visit(static_cast<SgOmpTaskgroupClause::base_node_type *>(variable_SgOmpTaskgroupClause)); }
  335311           0 :           void visit(SgOmpBeginClause *variable_SgOmpBeginClause) { visit(static_cast<SgOmpBeginClause::base_node_type *>(variable_SgOmpBeginClause)); }
  335312           0 :           void visit(SgOmpEndClause *variable_SgOmpEndClause) { visit(static_cast<SgOmpEndClause::base_node_type *>(variable_SgOmpEndClause)); }
  335313           0 :           void visit(SgOmpUntiedClause *variable_SgOmpUntiedClause) { visit(static_cast<SgOmpUntiedClause::base_node_type *>(variable_SgOmpUntiedClause)); }
  335314           0 :           void visit(SgOmpMergeableClause *variable_SgOmpMergeableClause) { visit(static_cast<SgOmpMergeableClause::base_node_type *>(variable_SgOmpMergeableClause)); }
  335315           0 :           void visit(SgOmpDefaultClause *variable_SgOmpDefaultClause) { visit(static_cast<SgOmpDefaultClause::base_node_type *>(variable_SgOmpDefaultClause)); }
  335316           0 :           void visit(SgOmpAtomicClause *variable_SgOmpAtomicClause) { visit(static_cast<SgOmpAtomicClause::base_node_type *>(variable_SgOmpAtomicClause)); }
  335317           0 :           void visit(SgOmpProcBindClause *variable_SgOmpProcBindClause) { visit(static_cast<SgOmpProcBindClause::base_node_type *>(variable_SgOmpProcBindClause)); }
  335318           0 :           void visit(SgOmpOrderClause *variable_SgOmpOrderClause) { visit(static_cast<SgOmpOrderClause::base_node_type *>(variable_SgOmpOrderClause)); }
  335319           0 :           void visit(SgOmpBindClause *variable_SgOmpBindClause) { visit(static_cast<SgOmpBindClause::base_node_type *>(variable_SgOmpBindClause)); }
  335320           0 :           void visit(SgOmpInbranchClause *variable_SgOmpInbranchClause) { visit(static_cast<SgOmpInbranchClause::base_node_type *>(variable_SgOmpInbranchClause)); }
  335321           0 :           void visit(SgOmpNotinbranchClause *variable_SgOmpNotinbranchClause) { visit(static_cast<SgOmpNotinbranchClause::base_node_type *>(variable_SgOmpNotinbranchClause)); }
  335322           0 :           void visit(SgOmpCollapseClause *variable_SgOmpCollapseClause) { visit(static_cast<SgOmpCollapseClause::base_node_type *>(variable_SgOmpCollapseClause)); }
  335323           0 :           void visit(SgOmpIfClause *variable_SgOmpIfClause) { visit(static_cast<SgOmpIfClause::base_node_type *>(variable_SgOmpIfClause)); }
  335324           0 :           void visit(SgOmpFinalClause *variable_SgOmpFinalClause) { visit(static_cast<SgOmpFinalClause::base_node_type *>(variable_SgOmpFinalClause)); }
  335325           0 :           void visit(SgOmpPriorityClause *variable_SgOmpPriorityClause) { visit(static_cast<SgOmpPriorityClause::base_node_type *>(variable_SgOmpPriorityClause)); }
  335326           0 :           void visit(SgUpirNumUnitsField *variable_SgUpirNumUnitsField) { visit(static_cast<SgUpirNumUnitsField::base_node_type *>(variable_SgUpirNumUnitsField)); }
  335327           0 :           void visit(SgOmpNumTeamsClause *variable_SgOmpNumTeamsClause) { visit(static_cast<SgOmpNumTeamsClause::base_node_type *>(variable_SgOmpNumTeamsClause)); }
  335328           0 :           void visit(SgOmpGrainsizeClause *variable_SgOmpGrainsizeClause) { visit(static_cast<SgOmpGrainsizeClause::base_node_type *>(variable_SgOmpGrainsizeClause)); }
  335329           0 :           void visit(SgOmpDetachClause *variable_SgOmpDetachClause) { visit(static_cast<SgOmpDetachClause::base_node_type *>(variable_SgOmpDetachClause)); }
  335330           0 :           void visit(SgOmpNumTasksClause *variable_SgOmpNumTasksClause) { visit(static_cast<SgOmpNumTasksClause::base_node_type *>(variable_SgOmpNumTasksClause)); }
  335331           0 :           void visit(SgOmpHintClause *variable_SgOmpHintClause) { visit(static_cast<SgOmpHintClause::base_node_type *>(variable_SgOmpHintClause)); }
  335332           0 :           void visit(SgOmpThreadLimitClause *variable_SgOmpThreadLimitClause) { visit(static_cast<SgOmpThreadLimitClause::base_node_type *>(variable_SgOmpThreadLimitClause)); }
  335333           0 :           void visit(SgOmpNontemporalClause *variable_SgOmpNontemporalClause) { visit(static_cast<SgOmpNontemporalClause::base_node_type *>(variable_SgOmpNontemporalClause)); }
  335334           0 :           void visit(SgOmpInclusiveClause *variable_SgOmpInclusiveClause) { visit(static_cast<SgOmpInclusiveClause::base_node_type *>(variable_SgOmpInclusiveClause)); }
  335335           0 :           void visit(SgOmpExclusiveClause *variable_SgOmpExclusiveClause) { visit(static_cast<SgOmpExclusiveClause::base_node_type *>(variable_SgOmpExclusiveClause)); }
  335336           0 :           void visit(SgOmpIsDevicePtrClause *variable_SgOmpIsDevicePtrClause) { visit(static_cast<SgOmpIsDevicePtrClause::base_node_type *>(variable_SgOmpIsDevicePtrClause)); }
  335337           0 :           void visit(SgOmpUseDevicePtrClause *variable_SgOmpUseDevicePtrClause) { visit(static_cast<SgOmpUseDevicePtrClause::base_node_type *>(variable_SgOmpUseDevicePtrClause)); }
  335338           0 :           void visit(SgOmpUseDeviceAddrClause *variable_SgOmpUseDeviceAddrClause) { visit(static_cast<SgOmpUseDeviceAddrClause::base_node_type *>(variable_SgOmpUseDeviceAddrClause)); }
  335339           0 :           void visit(SgOmpDeviceClause *variable_SgOmpDeviceClause) { visit(static_cast<SgOmpDeviceClause::base_node_type *>(variable_SgOmpDeviceClause)); }
  335340           0 :           void visit(SgOmpSafelenClause *variable_SgOmpSafelenClause) { visit(static_cast<SgOmpSafelenClause::base_node_type *>(variable_SgOmpSafelenClause)); }
  335341           0 :           void visit(SgOmpSimdlenClause *variable_SgOmpSimdlenClause) { visit(static_cast<SgOmpSimdlenClause::base_node_type *>(variable_SgOmpSimdlenClause)); }
  335342           0 :           void visit(SgOmpPartialClause *variable_SgOmpPartialClause) { visit(static_cast<SgOmpPartialClause::base_node_type *>(variable_SgOmpPartialClause)); }
  335343           0 :           void visit(SgOmpFullClause *variable_SgOmpFullClause) { visit(static_cast<SgOmpFullClause::base_node_type *>(variable_SgOmpFullClause)); }
  335344           0 :           void visit(SgOmpSizesClause *variable_SgOmpSizesClause) { visit(static_cast<SgOmpSizesClause::base_node_type *>(variable_SgOmpSizesClause)); }
  335345           0 :           void visit(SgUpirBranchField *variable_SgUpirBranchField) { visit(static_cast<SgUpirBranchField::base_node_type *>(variable_SgUpirBranchField)); }
  335346           0 :           void visit(SgUpirNestedLevelField *variable_SgUpirNestedLevelField) { visit(static_cast<SgUpirNestedLevelField::base_node_type *>(variable_SgUpirNestedLevelField)); }
  335347           0 :           void visit(SgUpirNestedParentField *variable_SgUpirNestedParentField) { visit(static_cast<SgUpirNestedParentField::base_node_type *>(variable_SgUpirNestedParentField)); }
  335348           0 :           void visit(SgUpirNestedChildField *variable_SgUpirNestedChildField) { visit(static_cast<SgUpirNestedChildField::base_node_type *>(variable_SgUpirNestedChildField)); }
  335349           0 :           void visit(SgUpirSyncField *variable_SgUpirSyncField) { visit(static_cast<SgUpirSyncField::base_node_type *>(variable_SgUpirSyncField)); }
  335350           0 :           void visit(SgUpirDataField *variable_SgUpirDataField) { visit(static_cast<SgUpirDataField::base_node_type *>(variable_SgUpirDataField)); }
  335351           0 :           void visit(SgUpirTargetField *variable_SgUpirTargetField) { visit(static_cast<SgUpirTargetField::base_node_type *>(variable_SgUpirTargetField)); }
  335352           0 :           void visit(SgUpirDataItemField *variable_SgUpirDataItemField) { visit(static_cast<SgUpirDataItemField::base_node_type *>(variable_SgUpirDataItemField)); }
  335353           0 :           void visit(SgOmpExpressionClause *variable_SgOmpExpressionClause) { visit(static_cast<SgOmpExpressionClause::base_node_type *>(variable_SgOmpExpressionClause)); }
  335354           0 :           void visit(SgOmpCopyprivateClause *variable_SgOmpCopyprivateClause) { visit(static_cast<SgOmpCopyprivateClause::base_node_type *>(variable_SgOmpCopyprivateClause)); }
  335355           0 :           void visit(SgOmpPrivateClause *variable_SgOmpPrivateClause) { visit(static_cast<SgOmpPrivateClause::base_node_type *>(variable_SgOmpPrivateClause)); }
  335356           0 :           void visit(SgOmpFirstprivateClause *variable_SgOmpFirstprivateClause) { visit(static_cast<SgOmpFirstprivateClause::base_node_type *>(variable_SgOmpFirstprivateClause)); }
  335357           0 :           void visit(SgOmpSharedClause *variable_SgOmpSharedClause) { visit(static_cast<SgOmpSharedClause::base_node_type *>(variable_SgOmpSharedClause)); }
  335358           0 :           void visit(SgOmpCopyinClause *variable_SgOmpCopyinClause) { visit(static_cast<SgOmpCopyinClause::base_node_type *>(variable_SgOmpCopyinClause)); }
  335359           0 :           void visit(SgOmpLastprivateClause *variable_SgOmpLastprivateClause) { visit(static_cast<SgOmpLastprivateClause::base_node_type *>(variable_SgOmpLastprivateClause)); }
  335360           0 :           void visit(SgOmpReductionClause *variable_SgOmpReductionClause) { visit(static_cast<SgOmpReductionClause::base_node_type *>(variable_SgOmpReductionClause)); }
  335361           0 :           void visit(SgOmpInReductionClause *variable_SgOmpInReductionClause) { visit(static_cast<SgOmpInReductionClause::base_node_type *>(variable_SgOmpInReductionClause)); }
  335362           0 :           void visit(SgOmpTaskReductionClause *variable_SgOmpTaskReductionClause) { visit(static_cast<SgOmpTaskReductionClause::base_node_type *>(variable_SgOmpTaskReductionClause)); }
  335363           0 :           void visit(SgOmpAllocateClause *variable_SgOmpAllocateClause) { visit(static_cast<SgOmpAllocateClause::base_node_type *>(variable_SgOmpAllocateClause)); }
  335364           0 :           void visit(SgOmpDependClause *variable_SgOmpDependClause) { visit(static_cast<SgOmpDependClause::base_node_type *>(variable_SgOmpDependClause)); }
  335365           0 :           void visit(SgOmpToClause *variable_SgOmpToClause) { visit(static_cast<SgOmpToClause::base_node_type *>(variable_SgOmpToClause)); }
  335366           0 :           void visit(SgOmpUsesAllocatorsClause *variable_SgOmpUsesAllocatorsClause) { visit(static_cast<SgOmpUsesAllocatorsClause::base_node_type *>(variable_SgOmpUsesAllocatorsClause)); }
  335367           0 :           void visit(SgOmpFromClause *variable_SgOmpFromClause) { visit(static_cast<SgOmpFromClause::base_node_type *>(variable_SgOmpFromClause)); }
  335368           0 :           void visit(SgOmpAffinityClause *variable_SgOmpAffinityClause) { visit(static_cast<SgOmpAffinityClause::base_node_type *>(variable_SgOmpAffinityClause)); }
  335369           0 :           void visit(SgOmpMapClause *variable_SgOmpMapClause) { visit(static_cast<SgOmpMapClause::base_node_type *>(variable_SgOmpMapClause)); }
  335370           0 :           void visit(SgOmpLinearClause *variable_SgOmpLinearClause) { visit(static_cast<SgOmpLinearClause::base_node_type *>(variable_SgOmpLinearClause)); }
  335371           0 :           void visit(SgOmpUniformClause *variable_SgOmpUniformClause) { visit(static_cast<SgOmpUniformClause::base_node_type *>(variable_SgOmpUniformClause)); }
  335372           0 :           void visit(SgOmpAlignedClause *variable_SgOmpAlignedClause) { visit(static_cast<SgOmpAlignedClause::base_node_type *>(variable_SgOmpAlignedClause)); }
  335373           0 :           void visit(SgOmpVariablesClause *variable_SgOmpVariablesClause) { visit(static_cast<SgOmpVariablesClause::base_node_type *>(variable_SgOmpVariablesClause)); }
  335374           0 :           void visit(SgOmpScheduleClause *variable_SgOmpScheduleClause) { visit(static_cast<SgOmpScheduleClause::base_node_type *>(variable_SgOmpScheduleClause)); }
  335375           0 :           void visit(SgOmpWhenClause *variable_SgOmpWhenClause) { visit(static_cast<SgOmpWhenClause::base_node_type *>(variable_SgOmpWhenClause)); }
  335376           0 :           void visit(SgOmpDistScheduleClause *variable_SgOmpDistScheduleClause) { visit(static_cast<SgOmpDistScheduleClause::base_node_type *>(variable_SgOmpDistScheduleClause)); }
  335377           0 :           void visit(SgOmpDefaultmapClause *variable_SgOmpDefaultmapClause) { visit(static_cast<SgOmpDefaultmapClause::base_node_type *>(variable_SgOmpDefaultmapClause)); }
  335378           0 :           void visit(SgOmpAllocatorClause *variable_SgOmpAllocatorClause) { visit(static_cast<SgOmpAllocatorClause::base_node_type *>(variable_SgOmpAllocatorClause)); }
  335379           0 :           void visit(SgOmpUsesAllocatorsDefination *variable_SgOmpUsesAllocatorsDefination) { visit(static_cast<SgOmpUsesAllocatorsDefination::base_node_type *>(variable_SgOmpUsesAllocatorsDefination)); }
  335380           0 :           void visit(SgOmpClause *variable_SgOmpClause) { visit(static_cast<SgOmpClause::base_node_type *>(variable_SgOmpClause)); }
  335381           0 :           void visit(SgRenamePair *variable_SgRenamePair) { visit(static_cast<SgRenamePair::base_node_type *>(variable_SgRenamePair)); }
  335382           0 :           void visit(SgInterfaceBody *variable_SgInterfaceBody) { visit(static_cast<SgInterfaceBody::base_node_type *>(variable_SgInterfaceBody)); }
  335383           0 :           void visit(SgHeaderFileBody *variable_SgHeaderFileBody) { visit(static_cast<SgHeaderFileBody::base_node_type *>(variable_SgHeaderFileBody)); }
  335384           0 :           void visit(SgLocatedNodeSupport *variable_SgLocatedNodeSupport) { visit(static_cast<SgLocatedNodeSupport::base_node_type *>(variable_SgLocatedNodeSupport)); }
  335385           0 :           void visit(SgToken *variable_SgToken) { visit(static_cast<SgToken::base_node_type *>(variable_SgToken)); }
  335386           0 :           void visit(SgLocatedNode *variable_SgLocatedNode) { visit(static_cast<SgLocatedNode::base_node_type *>(variable_SgLocatedNode)); }
  335387           0 :           virtual void visit(SgNode *variable_SgNode) { visitDefault(variable_SgNode); }
  335388             : };
  335389             : 
  335390             : template <class R> class Visitor_R: public ROSE_VisitorPattern {
  335391             :  protected:
  335392             :   /** Result of a visit method.
  335393             :     */
  335394             :     R _result;
  335395             : public:
  335396             :     virtual ~Visitor_R() {}
  335397             :         /**@return the result of the visitor's computation.
  335398             :     */
  335399             :     virtual R& getResult() { return _result; }
  335400             :     /**@return the result of the visitor's computation.
  335401             :     */
  335402             :     virtual const R& getResult() const { return _result; }
  335403             : };
  335404             : 
  335405             : /** Strategy pattern applied to visitors: serves as a context to a strategy,
  335406             :  * which itself is a visitor; delegates all requests to the current strategy;
  335407             :  * capable of switching strategy at will.  Derived classes may declare the
  335408             :  * known strategies as friend to facilitate communication between the strategies
  335409             :  * and their context.
  335410             :  */
  335411             : template <class R> class ContextVis_R: public Visitor_R<R> {
  335412             : protected:
  335413             :  /** Strategy to process a node, can be set dynamically.
  335414             :        */
  335415             :     ROSE_VisitorPattern* _strategy; // not owned by this context.
  335416             :  public:
  335417             :     virtual ~ContextVis_R() {_strategy = NULL; }
  335418             :     /** Allows the strategy to be set dynamically.
  335419             :      * @param strategy a visitor to process a node.
  335420             :     */
  335421             :     void setStrategy(ROSE_VisitorPattern* strategy)  {_strategy = strategy; }
  335422             : 
  335423             :     virtual void visit(SgName *variable_SgName) { _strategy->visit(variable_SgName); }
  335424             :     virtual void visit(SgSymbolTable *variable_SgSymbolTable) { _strategy->visit(variable_SgSymbolTable); }
  335425             :     virtual void visit(SgPragma *variable_SgPragma) { _strategy->visit(variable_SgPragma); }
  335426             :     virtual void visit(SgModifierNodes *variable_SgModifierNodes) { _strategy->visit(variable_SgModifierNodes); }
  335427             :     virtual void visit(SgConstVolatileModifier *variable_SgConstVolatileModifier) { _strategy->visit(variable_SgConstVolatileModifier); }
  335428             :     virtual void visit(SgStorageModifier *variable_SgStorageModifier) { _strategy->visit(variable_SgStorageModifier); }
  335429             :     virtual void visit(SgAccessModifier *variable_SgAccessModifier) { _strategy->visit(variable_SgAccessModifier); }
  335430             :     virtual void visit(SgFunctionModifier *variable_SgFunctionModifier) { _strategy->visit(variable_SgFunctionModifier); }
  335431             :     virtual void visit(SgUPC_AccessModifier *variable_SgUPC_AccessModifier) { _strategy->visit(variable_SgUPC_AccessModifier); }
  335432             :     virtual void visit(SgLinkageModifier *variable_SgLinkageModifier) { _strategy->visit(variable_SgLinkageModifier); }
  335433             :     virtual void visit(SgSpecialFunctionModifier *variable_SgSpecialFunctionModifier) { _strategy->visit(variable_SgSpecialFunctionModifier); }
  335434             :     virtual void visit(SgTypeModifier *variable_SgTypeModifier) { _strategy->visit(variable_SgTypeModifier); }
  335435             :     virtual void visit(SgElaboratedTypeModifier *variable_SgElaboratedTypeModifier) { _strategy->visit(variable_SgElaboratedTypeModifier); }
  335436             :     virtual void visit(SgBaseClassModifier *variable_SgBaseClassModifier) { _strategy->visit(variable_SgBaseClassModifier); }
  335437             :     virtual void visit(SgDeclarationModifier *variable_SgDeclarationModifier) { _strategy->visit(variable_SgDeclarationModifier); }
  335438             :     virtual void visit(SgStructureModifier *variable_SgStructureModifier) { _strategy->visit(variable_SgStructureModifier); }
  335439             :     virtual void visit(SgOpenclAccessModeModifier *variable_SgOpenclAccessModeModifier) { _strategy->visit(variable_SgOpenclAccessModeModifier); }
  335440             :     virtual void visit(SgModifier *variable_SgModifier) { _strategy->visit(variable_SgModifier); }
  335441             :     virtual void visit(Sg_File_Info *variable_Sg_File_Info) { _strategy->visit(variable_Sg_File_Info); }
  335442             :     virtual void visit(SgSourceFile *variable_SgSourceFile) { _strategy->visit(variable_SgSourceFile); }
  335443             :     virtual void visit(SgUnknownFile *variable_SgUnknownFile) { _strategy->visit(variable_SgUnknownFile); }
  335444             :     virtual void visit(SgFile *variable_SgFile) { _strategy->visit(variable_SgFile); }
  335445             :     virtual void visit(SgFileList *variable_SgFileList) { _strategy->visit(variable_SgFileList); }
  335446             :     virtual void visit(SgDirectory *variable_SgDirectory) { _strategy->visit(variable_SgDirectory); }
  335447             :     virtual void visit(SgDirectoryList *variable_SgDirectoryList) { _strategy->visit(variable_SgDirectoryList); }
  335448             :     virtual void visit(SgProject *variable_SgProject) { _strategy->visit(variable_SgProject); }
  335449             :     virtual void visit(SgOptions *variable_SgOptions) { _strategy->visit(variable_SgOptions); }
  335450             :     virtual void visit(SgUnparse_Info *variable_SgUnparse_Info) { _strategy->visit(variable_SgUnparse_Info); }
  335451             :     virtual void visit(SgIncludeFile *variable_SgIncludeFile) { _strategy->visit(variable_SgIncludeFile); }
  335452             :     virtual void visit(SgFuncDecl_attr *variable_SgFuncDecl_attr) { _strategy->visit(variable_SgFuncDecl_attr); }
  335453             :     virtual void visit(SgClassDecl_attr *variable_SgClassDecl_attr) { _strategy->visit(variable_SgClassDecl_attr); }
  335454             :     virtual void visit(SgTypedefSeq *variable_SgTypedefSeq) { _strategy->visit(variable_SgTypedefSeq); }
  335455             :     virtual void visit(SgFunctionParameterTypeList *variable_SgFunctionParameterTypeList) { _strategy->visit(variable_SgFunctionParameterTypeList); }
  335456             :     virtual void visit(SgTemplateParameter *variable_SgTemplateParameter) { _strategy->visit(variable_SgTemplateParameter); }
  335457             :     virtual void visit(SgTemplateArgument *variable_SgTemplateArgument) { _strategy->visit(variable_SgTemplateArgument); }
  335458             :     virtual void visit(SgTemplateParameterList *variable_SgTemplateParameterList) { _strategy->visit(variable_SgTemplateParameterList); }
  335459             :     virtual void visit(SgTemplateArgumentList *variable_SgTemplateArgumentList) { _strategy->visit(variable_SgTemplateArgumentList); }
  335460             :     virtual void visit(SgBitAttribute *variable_SgBitAttribute) { _strategy->visit(variable_SgBitAttribute); }
  335461             :     virtual void visit(SgAttribute *variable_SgAttribute) { _strategy->visit(variable_SgAttribute); }
  335462             :     virtual void visit(SgExpBaseClass *variable_SgExpBaseClass) { _strategy->visit(variable_SgExpBaseClass); }
  335463             :     virtual void visit(SgNonrealBaseClass *variable_SgNonrealBaseClass) { _strategy->visit(variable_SgNonrealBaseClass); }
  335464             :     virtual void visit(SgBaseClass *variable_SgBaseClass) { _strategy->visit(variable_SgBaseClass); }
  335465             :     virtual void visit(SgUndirectedGraphEdge *variable_SgUndirectedGraphEdge) { _strategy->visit(variable_SgUndirectedGraphEdge); }
  335466             :     virtual void visit(SgDirectedGraphEdge *variable_SgDirectedGraphEdge) { _strategy->visit(variable_SgDirectedGraphEdge); }
  335467             :     virtual void visit(SgGraphNode *variable_SgGraphNode) { _strategy->visit(variable_SgGraphNode); }
  335468             :     virtual void visit(SgGraphEdge *variable_SgGraphEdge) { _strategy->visit(variable_SgGraphEdge); }
  335469             :     virtual void visit(SgStringKeyedBidirectionalGraph *variable_SgStringKeyedBidirectionalGraph) { _strategy->visit(variable_SgStringKeyedBidirectionalGraph); }
  335470             :     virtual void visit(SgIntKeyedBidirectionalGraph *variable_SgIntKeyedBidirectionalGraph) { _strategy->visit(variable_SgIntKeyedBidirectionalGraph); }
  335471             :     virtual void visit(SgBidirectionalGraph *variable_SgBidirectionalGraph) { _strategy->visit(variable_SgBidirectionalGraph); }
  335472             :     virtual void visit(SgIncidenceDirectedGraph *variable_SgIncidenceDirectedGraph) { _strategy->visit(variable_SgIncidenceDirectedGraph); }
  335473             :     virtual void visit(SgIncidenceUndirectedGraph *variable_SgIncidenceUndirectedGraph) { _strategy->visit(variable_SgIncidenceUndirectedGraph); }
  335474             :     virtual void visit(SgGraph *variable_SgGraph) { _strategy->visit(variable_SgGraph); }
  335475             :     virtual void visit(SgGraphNodeList *variable_SgGraphNodeList) { _strategy->visit(variable_SgGraphNodeList); }
  335476             :     virtual void visit(SgGraphEdgeList *variable_SgGraphEdgeList) { _strategy->visit(variable_SgGraphEdgeList); }
  335477             :     virtual void visit(SgQualifiedName *variable_SgQualifiedName) { _strategy->visit(variable_SgQualifiedName); }
  335478             :     virtual void visit(SgNameGroup *variable_SgNameGroup) { _strategy->visit(variable_SgNameGroup); }
  335479             :     virtual void visit(SgDimensionObject *variable_SgDimensionObject) { _strategy->visit(variable_SgDimensionObject); }
  335480             :     virtual void visit(SgDataStatementGroup *variable_SgDataStatementGroup) { _strategy->visit(variable_SgDataStatementGroup); }
  335481             :     virtual void visit(SgDataStatementObject *variable_SgDataStatementObject) { _strategy->visit(variable_SgDataStatementObject); }
  335482             :     virtual void visit(SgDataStatementValue *variable_SgDataStatementValue) { _strategy->visit(variable_SgDataStatementValue); }
  335483             :     virtual void visit(SgFormatItem *variable_SgFormatItem) { _strategy->visit(variable_SgFormatItem); }
  335484             :     virtual void visit(SgFormatItemList *variable_SgFormatItemList) { _strategy->visit(variable_SgFormatItemList); }
  335485             :     virtual void visit(SgTypeTable *variable_SgTypeTable) { _strategy->visit(variable_SgTypeTable); }
  335486             :     virtual void visit(SgHeaderFileReport *variable_SgHeaderFileReport) { _strategy->visit(variable_SgHeaderFileReport); }
  335487             :     virtual void visit(SgSupport *variable_SgSupport) { _strategy->visit(variable_SgSupport); }
  335488             :     virtual void visit(SgTypeUnknown *variable_SgTypeUnknown) { _strategy->visit(variable_SgTypeUnknown); }
  335489             :     virtual void visit(SgTypeChar *variable_SgTypeChar) { _strategy->visit(variable_SgTypeChar); }
  335490             :     virtual void visit(SgTypeSignedChar *variable_SgTypeSignedChar) { _strategy->visit(variable_SgTypeSignedChar); }
  335491             :     virtual void visit(SgTypeUnsignedChar *variable_SgTypeUnsignedChar) { _strategy->visit(variable_SgTypeUnsignedChar); }
  335492             :     virtual void visit(SgTypeShort *variable_SgTypeShort) { _strategy->visit(variable_SgTypeShort); }
  335493             :     virtual void visit(SgTypeSignedShort *variable_SgTypeSignedShort) { _strategy->visit(variable_SgTypeSignedShort); }
  335494             :     virtual void visit(SgTypeUnsignedShort *variable_SgTypeUnsignedShort) { _strategy->visit(variable_SgTypeUnsignedShort); }
  335495             :     virtual void visit(SgTypeInt *variable_SgTypeInt) { _strategy->visit(variable_SgTypeInt); }
  335496             :     virtual void visit(SgTypeSignedInt *variable_SgTypeSignedInt) { _strategy->visit(variable_SgTypeSignedInt); }
  335497             :     virtual void visit(SgTypeUnsignedInt *variable_SgTypeUnsignedInt) { _strategy->visit(variable_SgTypeUnsignedInt); }
  335498             :     virtual void visit(SgTypeLong *variable_SgTypeLong) { _strategy->visit(variable_SgTypeLong); }
  335499             :     virtual void visit(SgTypeSignedLong *variable_SgTypeSignedLong) { _strategy->visit(variable_SgTypeSignedLong); }
  335500             :     virtual void visit(SgTypeUnsignedLong *variable_SgTypeUnsignedLong) { _strategy->visit(variable_SgTypeUnsignedLong); }
  335501             :     virtual void visit(SgTypeVoid *variable_SgTypeVoid) { _strategy->visit(variable_SgTypeVoid); }
  335502             :     virtual void visit(SgTypeGlobalVoid *variable_SgTypeGlobalVoid) { _strategy->visit(variable_SgTypeGlobalVoid); }
  335503             :     virtual void visit(SgTypeWchar *variable_SgTypeWchar) { _strategy->visit(variable_SgTypeWchar); }
  335504             :     virtual void visit(SgTypeFloat *variable_SgTypeFloat) { _strategy->visit(variable_SgTypeFloat); }
  335505             :     virtual void visit(SgTypeDouble *variable_SgTypeDouble) { _strategy->visit(variable_SgTypeDouble); }
  335506             :     virtual void visit(SgTypeLongLong *variable_SgTypeLongLong) { _strategy->visit(variable_SgTypeLongLong); }
  335507             :     virtual void visit(SgTypeSignedLongLong *variable_SgTypeSignedLongLong) { _strategy->visit(variable_SgTypeSignedLongLong); }
  335508             :     virtual void visit(SgTypeUnsignedLongLong *variable_SgTypeUnsignedLongLong) { _strategy->visit(variable_SgTypeUnsignedLongLong); }
  335509             :     virtual void visit(SgTypeLongDouble *variable_SgTypeLongDouble) { _strategy->visit(variable_SgTypeLongDouble); }
  335510             :     virtual void visit(SgTypeFloat80 *variable_SgTypeFloat80) { _strategy->visit(variable_SgTypeFloat80); }
  335511             :     virtual void visit(SgTypeFloat128 *variable_SgTypeFloat128) { _strategy->visit(variable_SgTypeFloat128); }
  335512             :     virtual void visit(SgTypeString *variable_SgTypeString) { _strategy->visit(variable_SgTypeString); }
  335513             :     virtual void visit(SgTypeBool *variable_SgTypeBool) { _strategy->visit(variable_SgTypeBool); }
  335514             :     virtual void visit(SgTypeFixed *variable_SgTypeFixed) { _strategy->visit(variable_SgTypeFixed); }
  335515             :     virtual void visit(SgTypeMatrix *variable_SgTypeMatrix) { _strategy->visit(variable_SgTypeMatrix); }
  335516             :     virtual void visit(SgTypeTuple *variable_SgTypeTuple) { _strategy->visit(variable_SgTypeTuple); }
  335517             :     virtual void visit(SgTypeNullptr *variable_SgTypeNullptr) { _strategy->visit(variable_SgTypeNullptr); }
  335518             :     virtual void visit(SgTypeComplex *variable_SgTypeComplex) { _strategy->visit(variable_SgTypeComplex); }
  335519             :     virtual void visit(SgTypeImaginary *variable_SgTypeImaginary) { _strategy->visit(variable_SgTypeImaginary); }
  335520             :     virtual void visit(SgTypeDefault *variable_SgTypeDefault) { _strategy->visit(variable_SgTypeDefault); }
  335521             :     virtual void visit(SgPointerMemberType *variable_SgPointerMemberType) { _strategy->visit(variable_SgPointerMemberType); }
  335522             :     virtual void visit(SgReferenceType *variable_SgReferenceType) { _strategy->visit(variable_SgReferenceType); }
  335523             :     virtual void visit(SgRvalueReferenceType *variable_SgRvalueReferenceType) { _strategy->visit(variable_SgRvalueReferenceType); }
  335524             :     virtual void visit(SgDeclType *variable_SgDeclType) { _strategy->visit(variable_SgDeclType); }
  335525             :     virtual void visit(SgTypeOfType *variable_SgTypeOfType) { _strategy->visit(variable_SgTypeOfType); }
  335526             :     virtual void visit(SgTypeCAFTeam *variable_SgTypeCAFTeam) { _strategy->visit(variable_SgTypeCAFTeam); }
  335527             :     virtual void visit(SgTypeUnsigned128bitInteger *variable_SgTypeUnsigned128bitInteger) { _strategy->visit(variable_SgTypeUnsigned128bitInteger); }
  335528             :     virtual void visit(SgTypeSigned128bitInteger *variable_SgTypeSigned128bitInteger) { _strategy->visit(variable_SgTypeSigned128bitInteger); }
  335529             :     virtual void visit(SgTypeLabel *variable_SgTypeLabel) { _strategy->visit(variable_SgTypeLabel); }
  335530             :     virtual void visit(SgTemplateType *variable_SgTemplateType) { _strategy->visit(variable_SgTemplateType); }
  335531             :     virtual void visit(SgEnumType *variable_SgEnumType) { _strategy->visit(variable_SgEnumType); }
  335532             :     virtual void visit(SgTypedefType *variable_SgTypedefType) { _strategy->visit(variable_SgTypedefType); }
  335533             :     virtual void visit(SgNonrealType *variable_SgNonrealType) { _strategy->visit(variable_SgNonrealType); }
  335534             :     virtual void visit(SgAutoType *variable_SgAutoType) { _strategy->visit(variable_SgAutoType); }
  335535             :     virtual void visit(SgModifierType *variable_SgModifierType) { _strategy->visit(variable_SgModifierType); }
  335536             :     virtual void visit(SgPartialFunctionModifierType *variable_SgPartialFunctionModifierType) { _strategy->visit(variable_SgPartialFunctionModifierType); }
  335537             :     virtual void visit(SgArrayType *variable_SgArrayType) { _strategy->visit(variable_SgArrayType); }
  335538             :     virtual void visit(SgTypeEllipse *variable_SgTypeEllipse) { _strategy->visit(variable_SgTypeEllipse); }
  335539             :     virtual void visit(SgTypeCrayPointer *variable_SgTypeCrayPointer) { _strategy->visit(variable_SgTypeCrayPointer); }
  335540             :     virtual void visit(SgPartialFunctionType *variable_SgPartialFunctionType) { _strategy->visit(variable_SgPartialFunctionType); }
  335541             :     virtual void visit(SgMemberFunctionType *variable_SgMemberFunctionType) { _strategy->visit(variable_SgMemberFunctionType); }
  335542             :     virtual void visit(SgFunctionType *variable_SgFunctionType) { _strategy->visit(variable_SgFunctionType); }
  335543             :     virtual void visit(SgPointerType *variable_SgPointerType) { _strategy->visit(variable_SgPointerType); }
  335544             :     virtual void visit(SgClassType *variable_SgClassType) { _strategy->visit(variable_SgClassType); }
  335545             :     virtual void visit(SgNamedType *variable_SgNamedType) { _strategy->visit(variable_SgNamedType); }
  335546             :     virtual void visit(SgQualifiedNameType *variable_SgQualifiedNameType) { _strategy->visit(variable_SgQualifiedNameType); }
  335547             :     virtual void visit(SgTypeChar16 *variable_SgTypeChar16) { _strategy->visit(variable_SgTypeChar16); }
  335548             :     virtual void visit(SgTypeChar32 *variable_SgTypeChar32) { _strategy->visit(variable_SgTypeChar32); }
  335549             :     virtual void visit(SgType *variable_SgType) { _strategy->visit(variable_SgType); }
  335550             :     virtual void visit(SgForStatement *variable_SgForStatement) { _strategy->visit(variable_SgForStatement); }
  335551             :     virtual void visit(SgForInitStatement *variable_SgForInitStatement) { _strategy->visit(variable_SgForInitStatement); }
  335552             :     virtual void visit(SgRangeBasedForStatement *variable_SgRangeBasedForStatement) { _strategy->visit(variable_SgRangeBasedForStatement); }
  335553             :     virtual void visit(SgCatchStatementSeq *variable_SgCatchStatementSeq) { _strategy->visit(variable_SgCatchStatementSeq); }
  335554             :     virtual void visit(SgFunctionParameterList *variable_SgFunctionParameterList) { _strategy->visit(variable_SgFunctionParameterList); }
  335555             :     virtual void visit(SgCtorInitializerList *variable_SgCtorInitializerList) { _strategy->visit(variable_SgCtorInitializerList); }
  335556             :     virtual void visit(SgBasicBlock *variable_SgBasicBlock) { _strategy->visit(variable_SgBasicBlock); }
  335557             :     virtual void visit(SgGlobal *variable_SgGlobal) { _strategy->visit(variable_SgGlobal); }
  335558             :     virtual void visit(SgIfStmt *variable_SgIfStmt) { _strategy->visit(variable_SgIfStmt); }
  335559             :     virtual void visit(SgWhileStmt *variable_SgWhileStmt) { _strategy->visit(variable_SgWhileStmt); }
  335560             :     virtual void visit(SgDoWhileStmt *variable_SgDoWhileStmt) { _strategy->visit(variable_SgDoWhileStmt); }
  335561             :     virtual void visit(SgSwitchStatement *variable_SgSwitchStatement) { _strategy->visit(variable_SgSwitchStatement); }
  335562             :     virtual void visit(SgCatchOptionStmt *variable_SgCatchOptionStmt) { _strategy->visit(variable_SgCatchOptionStmt); }
  335563             :     virtual void visit(SgFunctionParameterScope *variable_SgFunctionParameterScope) { _strategy->visit(variable_SgFunctionParameterScope); }
  335564             :     virtual void visit(SgDeclarationScope *variable_SgDeclarationScope) { _strategy->visit(variable_SgDeclarationScope); }
  335565             :     virtual void visit(SgVariableDefinition *variable_SgVariableDefinition) { _strategy->visit(variable_SgVariableDefinition); }
  335566             :     virtual void visit(SgStmtDeclarationStatement *variable_SgStmtDeclarationStatement) { _strategy->visit(variable_SgStmtDeclarationStatement); }
  335567             :     virtual void visit(SgEnumDeclaration *variable_SgEnumDeclaration) { _strategy->visit(variable_SgEnumDeclaration); }
  335568             :     virtual void visit(SgAsmStmt *variable_SgAsmStmt) { _strategy->visit(variable_SgAsmStmt); }
  335569             :     virtual void visit(SgFunctionTypeTable *variable_SgFunctionTypeTable) { _strategy->visit(variable_SgFunctionTypeTable); }
  335570             :     virtual void visit(SgExprStatement *variable_SgExprStatement) { _strategy->visit(variable_SgExprStatement); }
  335571             :     virtual void visit(SgLabelStatement *variable_SgLabelStatement) { _strategy->visit(variable_SgLabelStatement); }
  335572             :     virtual void visit(SgCaseOptionStmt *variable_SgCaseOptionStmt) { _strategy->visit(variable_SgCaseOptionStmt); }
  335573             :     virtual void visit(SgTryStmt *variable_SgTryStmt) { _strategy->visit(variable_SgTryStmt); }
  335574             :     virtual void visit(SgDefaultOptionStmt *variable_SgDefaultOptionStmt) { _strategy->visit(variable_SgDefaultOptionStmt); }
  335575             :     virtual void visit(SgBreakStmt *variable_SgBreakStmt) { _strategy->visit(variable_SgBreakStmt); }
  335576             :     virtual void visit(SgContinueStmt *variable_SgContinueStmt) { _strategy->visit(variable_SgContinueStmt); }
  335577             :     virtual void visit(SgReturnStmt *variable_SgReturnStmt) { _strategy->visit(variable_SgReturnStmt); }
  335578             :     virtual void visit(SgGotoStatement *variable_SgGotoStatement) { _strategy->visit(variable_SgGotoStatement); }
  335579             :     virtual void visit(SgSpawnStmt *variable_SgSpawnStmt) { _strategy->visit(variable_SgSpawnStmt); }
  335580             :     virtual void visit(SgTemplateTypedefDeclaration *variable_SgTemplateTypedefDeclaration) { _strategy->visit(variable_SgTemplateTypedefDeclaration); }
  335581             :     virtual void visit(SgTemplateInstantiationTypedefDeclaration *variable_SgTemplateInstantiationTypedefDeclaration) { _strategy->visit(variable_SgTemplateInstantiationTypedefDeclaration); }
  335582             :     virtual void visit(SgTypedefDeclaration *variable_SgTypedefDeclaration) { _strategy->visit(variable_SgTypedefDeclaration); }
  335583             :     virtual void visit(SgNullStatement *variable_SgNullStatement) { _strategy->visit(variable_SgNullStatement); }
  335584             :     virtual void visit(SgVariantStatement *variable_SgVariantStatement) { _strategy->visit(variable_SgVariantStatement); }
  335585             :     virtual void visit(SgPragmaDeclaration *variable_SgPragmaDeclaration) { _strategy->visit(variable_SgPragmaDeclaration); }
  335586             :     virtual void visit(SgTemplateClassDeclaration *variable_SgTemplateClassDeclaration) { _strategy->visit(variable_SgTemplateClassDeclaration); }
  335587             :     virtual void visit(SgTemplateMemberFunctionDeclaration *variable_SgTemplateMemberFunctionDeclaration) { _strategy->visit(variable_SgTemplateMemberFunctionDeclaration); }
  335588             :     virtual void visit(SgTemplateFunctionDeclaration *variable_SgTemplateFunctionDeclaration) { _strategy->visit(variable_SgTemplateFunctionDeclaration); }
  335589             :     virtual void visit(SgTemplateVariableDeclaration *variable_SgTemplateVariableDeclaration) { _strategy->visit(variable_SgTemplateVariableDeclaration); }
  335590             :     virtual void visit(SgTemplateDeclaration *variable_SgTemplateDeclaration) { _strategy->visit(variable_SgTemplateDeclaration); }
  335591             :     virtual void visit(SgVariableDeclaration *variable_SgVariableDeclaration) { _strategy->visit(variable_SgVariableDeclaration); }
  335592             :     virtual void visit(SgTemplateInstantiationDecl *variable_SgTemplateInstantiationDecl) { _strategy->visit(variable_SgTemplateInstantiationDecl); }
  335593             :     virtual void visit(SgTemplateInstantiationDefn *variable_SgTemplateInstantiationDefn) { _strategy->visit(variable_SgTemplateInstantiationDefn); }
  335594             :     virtual void visit(SgTemplateInstantiationFunctionDecl *variable_SgTemplateInstantiationFunctionDecl) { _strategy->visit(variable_SgTemplateInstantiationFunctionDecl); }
  335595             :     virtual void visit(SgTemplateInstantiationMemberFunctionDecl *variable_SgTemplateInstantiationMemberFunctionDecl) { _strategy->visit(variable_SgTemplateInstantiationMemberFunctionDecl); }
  335596             :     virtual void visit(SgNonrealDecl *variable_SgNonrealDecl) { _strategy->visit(variable_SgNonrealDecl); }
  335597             :     virtual void visit(SgWithStatement *variable_SgWithStatement) { _strategy->visit(variable_SgWithStatement); }
  335598             :     virtual void visit(SgPassStatement *variable_SgPassStatement) { _strategy->visit(variable_SgPassStatement); }
  335599             :     virtual void visit(SgAssertStmt *variable_SgAssertStmt) { _strategy->visit(variable_SgAssertStmt); }
  335600             :     virtual void visit(SgExecStatement *variable_SgExecStatement) { _strategy->visit(variable_SgExecStatement); }
  335601             :     virtual void visit(SgProgramHeaderStatement *variable_SgProgramHeaderStatement) { _strategy->visit(variable_SgProgramHeaderStatement); }
  335602             :     virtual void visit(SgProcedureHeaderStatement *variable_SgProcedureHeaderStatement) { _strategy->visit(variable_SgProcedureHeaderStatement); }
  335603             :     virtual void visit(SgEntryStatement *variable_SgEntryStatement) { _strategy->visit(variable_SgEntryStatement); }
  335604             :     virtual void visit(SgFortranNonblockedDo *variable_SgFortranNonblockedDo) { _strategy->visit(variable_SgFortranNonblockedDo); }
  335605             :     virtual void visit(SgInterfaceStatement *variable_SgInterfaceStatement) { _strategy->visit(variable_SgInterfaceStatement); }
  335606             :     virtual void visit(SgParameterStatement *variable_SgParameterStatement) { _strategy->visit(variable_SgParameterStatement); }
  335607             :     virtual void visit(SgCommonBlock *variable_SgCommonBlock) { _strategy->visit(variable_SgCommonBlock); }
  335608             :     virtual void visit(SgModuleStatement *variable_SgModuleStatement) { _strategy->visit(variable_SgModuleStatement); }
  335609             :     virtual void visit(SgUseStatement *variable_SgUseStatement) { _strategy->visit(variable_SgUseStatement); }
  335610             :     virtual void visit(SgProcessControlStatement *variable_SgProcessControlStatement) { _strategy->visit(variable_SgProcessControlStatement); }
  335611             :     virtual void visit(SgPrintStatement *variable_SgPrintStatement) { _strategy->visit(variable_SgPrintStatement); }
  335612             :     virtual void visit(SgReadStatement *variable_SgReadStatement) { _strategy->visit(variable_SgReadStatement); }
  335613             :     virtual void visit(SgWriteStatement *variable_SgWriteStatement) { _strategy->visit(variable_SgWriteStatement); }
  335614             :     virtual void visit(SgOpenStatement *variable_SgOpenStatement) { _strategy->visit(variable_SgOpenStatement); }
  335615             :     virtual void visit(SgCloseStatement *variable_SgCloseStatement) { _strategy->visit(variable_SgCloseStatement); }
  335616             :     virtual void visit(SgInquireStatement *variable_SgInquireStatement) { _strategy->visit(variable_SgInquireStatement); }
  335617             :     virtual void visit(SgFlushStatement *variable_SgFlushStatement) { _strategy->visit(variable_SgFlushStatement); }
  335618             :     virtual void visit(SgBackspaceStatement *variable_SgBackspaceStatement) { _strategy->visit(variable_SgBackspaceStatement); }
  335619             :     virtual void visit(SgRewindStatement *variable_SgRewindStatement) { _strategy->visit(variable_SgRewindStatement); }
  335620             :     virtual void visit(SgEndfileStatement *variable_SgEndfileStatement) { _strategy->visit(variable_SgEndfileStatement); }
  335621             :     virtual void visit(SgWaitStatement *variable_SgWaitStatement) { _strategy->visit(variable_SgWaitStatement); }
  335622             :     virtual void visit(SgCAFWithTeamStatement *variable_SgCAFWithTeamStatement) { _strategy->visit(variable_SgCAFWithTeamStatement); }
  335623             :     virtual void visit(SgFormatStatement *variable_SgFormatStatement) { _strategy->visit(variable_SgFormatStatement); }
  335624             :     virtual void visit(SgFortranDo *variable_SgFortranDo) { _strategy->visit(variable_SgFortranDo); }
  335625             :     virtual void visit(SgForAllStatement *variable_SgForAllStatement) { _strategy->visit(variable_SgForAllStatement); }
  335626             :     virtual void visit(SgIOStatement *variable_SgIOStatement) { _strategy->visit(variable_SgIOStatement); }
  335627             :     virtual void visit(SgSyncAllStatement *variable_SgSyncAllStatement) { _strategy->visit(variable_SgSyncAllStatement); }
  335628             :     virtual void visit(SgSyncImagesStatement *variable_SgSyncImagesStatement) { _strategy->visit(variable_SgSyncImagesStatement); }
  335629             :     virtual void visit(SgSyncMemoryStatement *variable_SgSyncMemoryStatement) { _strategy->visit(variable_SgSyncMemoryStatement); }
  335630             :     virtual void visit(SgSyncTeamStatement *variable_SgSyncTeamStatement) { _strategy->visit(variable_SgSyncTeamStatement); }
  335631             :     virtual void visit(SgLockStatement *variable_SgLockStatement) { _strategy->visit(variable_SgLockStatement); }
  335632             :     virtual void visit(SgUnlockStatement *variable_SgUnlockStatement) { _strategy->visit(variable_SgUnlockStatement); }
  335633             :     virtual void visit(SgImageControlStatement *variable_SgImageControlStatement) { _strategy->visit(variable_SgImageControlStatement); }
  335634             :     virtual void visit(SgUpcNotifyStatement *variable_SgUpcNotifyStatement) { _strategy->visit(variable_SgUpcNotifyStatement); }
  335635             :     virtual void visit(SgUpcWaitStatement *variable_SgUpcWaitStatement) { _strategy->visit(variable_SgUpcWaitStatement); }
  335636             :     virtual void visit(SgUpcBarrierStatement *variable_SgUpcBarrierStatement) { _strategy->visit(variable_SgUpcBarrierStatement); }
  335637             :     virtual void visit(SgUpcFenceStatement *variable_SgUpcFenceStatement) { _strategy->visit(variable_SgUpcFenceStatement); }
  335638             :     virtual void visit(SgUpcForAllStatement *variable_SgUpcForAllStatement) { _strategy->visit(variable_SgUpcForAllStatement); }
  335639             :     virtual void visit(SgUpirSpmdStatement *variable_SgUpirSpmdStatement) { _strategy->visit(variable_SgUpirSpmdStatement); }
  335640             :     virtual void visit(SgOmpLoopStatement *variable_SgOmpLoopStatement) { _strategy->visit(variable_SgOmpLoopStatement); }
  335641             :     virtual void visit(SgOmpScanStatement *variable_SgOmpScanStatement) { _strategy->visit(variable_SgOmpScanStatement); }
  335642             :     virtual void visit(SgOmpTaskloopStatement *variable_SgOmpTaskloopStatement) { _strategy->visit(variable_SgOmpTaskloopStatement); }
  335643             :     virtual void visit(SgOmpTaskgroupStatement *variable_SgOmpTaskgroupStatement) { _strategy->visit(variable_SgOmpTaskgroupStatement); }
  335644             :     virtual void visit(SgOmpDepobjStatement *variable_SgOmpDepobjStatement) { _strategy->visit(variable_SgOmpDepobjStatement); }
  335645             :     virtual void visit(SgOmpTeamsStatement *variable_SgOmpTeamsStatement) { _strategy->visit(variable_SgOmpTeamsStatement); }
  335646             :     virtual void visit(SgOmpCancellationPointStatement *variable_SgOmpCancellationPointStatement) { _strategy->visit(variable_SgOmpCancellationPointStatement); }
  335647             :     virtual void visit(SgOmpDeclareMapperStatement *variable_SgOmpDeclareMapperStatement) { _strategy->visit(variable_SgOmpDeclareMapperStatement); }
  335648             :     virtual void visit(SgOmpCancelStatement *variable_SgOmpCancelStatement) { _strategy->visit(variable_SgOmpCancelStatement); }
  335649             :     virtual void visit(SgOmpDistributeStatement *variable_SgOmpDistributeStatement) { _strategy->visit(variable_SgOmpDistributeStatement); }
  335650             :     virtual void visit(SgOmpMetadirectiveStatement *variable_SgOmpMetadirectiveStatement) { _strategy->visit(variable_SgOmpMetadirectiveStatement); }
  335651             :     virtual void visit(SgOmpSingleStatement *variable_SgOmpSingleStatement) { _strategy->visit(variable_SgOmpSingleStatement); }
  335652             :     virtual void visit(SgOmpTaskStatement *variable_SgOmpTaskStatement) { _strategy->visit(variable_SgOmpTaskStatement); }
  335653             :     virtual void visit(SgOmpTargetEnterDataStatement *variable_SgOmpTargetEnterDataStatement) { _strategy->visit(variable_SgOmpTargetEnterDataStatement); }
  335654             :     virtual void visit(SgOmpTargetExitDataStatement *variable_SgOmpTargetExitDataStatement) { _strategy->visit(variable_SgOmpTargetExitDataStatement); }
  335655             :     virtual void visit(SgUpirWorksharingStatement *variable_SgUpirWorksharingStatement) { _strategy->visit(variable_SgUpirWorksharingStatement); }
  335656             :     virtual void visit(SgOmpForSimdStatement *variable_SgOmpForSimdStatement) { _strategy->visit(variable_SgOmpForSimdStatement); }
  335657             :     virtual void visit(SgOmpDoStatement *variable_SgOmpDoStatement) { _strategy->visit(variable_SgOmpDoStatement); }
  335658             :     virtual void visit(SgOmpSectionsStatement *variable_SgOmpSectionsStatement) { _strategy->visit(variable_SgOmpSectionsStatement); }
  335659             :     virtual void visit(SgOmpAtomicStatement *variable_SgOmpAtomicStatement) { _strategy->visit(variable_SgOmpAtomicStatement); }
  335660             :     virtual void visit(SgUpirTaskStatement *variable_SgUpirTaskStatement) { _strategy->visit(variable_SgUpirTaskStatement); }
  335661             :     virtual void visit(SgOmpTargetDataStatement *variable_SgOmpTargetDataStatement) { _strategy->visit(variable_SgOmpTargetDataStatement); }
  335662             :     virtual void visit(SgOmpTargetParallelForStatement *variable_SgOmpTargetParallelForStatement) { _strategy->visit(variable_SgOmpTargetParallelForStatement); }
  335663             :     virtual void visit(SgOmpTargetParallelStatement *variable_SgOmpTargetParallelStatement) { _strategy->visit(variable_SgOmpTargetParallelStatement); }
  335664             :     virtual void visit(SgOmpDistributeSimdStatement *variable_SgOmpDistributeSimdStatement) { _strategy->visit(variable_SgOmpDistributeSimdStatement); }
  335665             :     virtual void visit(SgOmpDistributeParallelForStatement *variable_SgOmpDistributeParallelForStatement) { _strategy->visit(variable_SgOmpDistributeParallelForStatement); }
  335666             :     virtual void visit(SgOmpDistributeParallelForSimdStatement *variable_SgOmpDistributeParallelForSimdStatement) { _strategy->visit(variable_SgOmpDistributeParallelForSimdStatement); }
  335667             :     virtual void visit(SgOmpTaskloopSimdStatement *variable_SgOmpTaskloopSimdStatement) { _strategy->visit(variable_SgOmpTaskloopSimdStatement); }
  335668             :     virtual void visit(SgOmpTargetUpdateStatement *variable_SgOmpTargetUpdateStatement) { _strategy->visit(variable_SgOmpTargetUpdateStatement); }
  335669             :     virtual void visit(SgOmpTargetParallelForSimdStatement *variable_SgOmpTargetParallelForSimdStatement) { _strategy->visit(variable_SgOmpTargetParallelForSimdStatement); }
  335670             :     virtual void visit(SgOmpTargetParallelLoopStatement *variable_SgOmpTargetParallelLoopStatement) { _strategy->visit(variable_SgOmpTargetParallelLoopStatement); }
  335671             :     virtual void visit(SgOmpTargetSimdStatement *variable_SgOmpTargetSimdStatement) { _strategy->visit(variable_SgOmpTargetSimdStatement); }
  335672             :     virtual void visit(SgOmpTargetTeamsStatement *variable_SgOmpTargetTeamsStatement) { _strategy->visit(variable_SgOmpTargetTeamsStatement); }
  335673             :     virtual void visit(SgOmpTargetTeamsDistributeStatement *variable_SgOmpTargetTeamsDistributeStatement) { _strategy->visit(variable_SgOmpTargetTeamsDistributeStatement); }
  335674             :     virtual void visit(SgOmpTargetTeamsDistributeSimdStatement *variable_SgOmpTargetTeamsDistributeSimdStatement) { _strategy->visit(variable_SgOmpTargetTeamsDistributeSimdStatement); }
  335675             :     virtual void visit(SgOmpTargetTeamsLoopStatement *variable_SgOmpTargetTeamsLoopStatement) { _strategy->visit(variable_SgOmpTargetTeamsLoopStatement); }
  335676             :     virtual void visit(SgOmpTargetTeamsDistributeParallelForStatement *variable_SgOmpTargetTeamsDistributeParallelForStatement) { _strategy->visit(variable_SgOmpTargetTeamsDistributeParallelForStatement); }
  335677             :     virtual void visit(SgOmpTargetTeamsDistributeParallelForSimdStatement *variable_SgOmpTargetTeamsDistributeParallelForSimdStatement) { _strategy->visit(variable_SgOmpTargetTeamsDistributeParallelForSimdStatement); }
  335678             :     virtual void visit(SgOmpMasterTaskloopSimdStatement *variable_SgOmpMasterTaskloopSimdStatement) { _strategy->visit(variable_SgOmpMasterTaskloopSimdStatement); }
  335679             :     virtual void visit(SgOmpParallelMasterTaskloopStatement *variable_SgOmpParallelMasterTaskloopStatement) { _strategy->visit(variable_SgOmpParallelMasterTaskloopStatement); }
  335680             :     virtual void visit(SgOmpParallelMasterTaskloopSimdStatement *variable_SgOmpParallelMasterTaskloopSimdStatement) { _strategy->visit(variable_SgOmpParallelMasterTaskloopSimdStatement); }
  335681             :     virtual void visit(SgOmpTeamsDistributeStatement *variable_SgOmpTeamsDistributeStatement) { _strategy->visit(variable_SgOmpTeamsDistributeStatement); }
  335682             :     virtual void visit(SgOmpTeamsDistributeSimdStatement *variable_SgOmpTeamsDistributeSimdStatement) { _strategy->visit(variable_SgOmpTeamsDistributeSimdStatement); }
  335683             :     virtual void visit(SgOmpTeamsDistributeParallelForStatement *variable_SgOmpTeamsDistributeParallelForStatement) { _strategy->visit(variable_SgOmpTeamsDistributeParallelForStatement); }
  335684             :     virtual void visit(SgOmpTeamsDistributeParallelForSimdStatement *variable_SgOmpTeamsDistributeParallelForSimdStatement) { _strategy->visit(variable_SgOmpTeamsDistributeParallelForSimdStatement); }
  335685             :     virtual void visit(SgOmpTeamsLoopStatement *variable_SgOmpTeamsLoopStatement) { _strategy->visit(variable_SgOmpTeamsLoopStatement); }
  335686             :     virtual void visit(SgOmpParallelMasterStatement *variable_SgOmpParallelMasterStatement) { _strategy->visit(variable_SgOmpParallelMasterStatement); }
  335687             :     virtual void visit(SgOmpMasterTaskloopStatement *variable_SgOmpMasterTaskloopStatement) { _strategy->visit(variable_SgOmpMasterTaskloopStatement); }
  335688             :     virtual void visit(SgOmpParallelLoopStatement *variable_SgOmpParallelLoopStatement) { _strategy->visit(variable_SgOmpParallelLoopStatement); }
  335689             :     virtual void visit(SgOmpUnrollStatement *variable_SgOmpUnrollStatement) { _strategy->visit(variable_SgOmpUnrollStatement); }
  335690             :     virtual void visit(SgOmpTileStatement *variable_SgOmpTileStatement) { _strategy->visit(variable_SgOmpTileStatement); }
  335691             :     virtual void visit(SgUpirSimdStatement *variable_SgUpirSimdStatement) { _strategy->visit(variable_SgUpirSimdStatement); }
  335692             :     virtual void visit(SgOmpCriticalStatement *variable_SgOmpCriticalStatement) { _strategy->visit(variable_SgOmpCriticalStatement); }
  335693             :     virtual void visit(SgOmpOrderedStatement *variable_SgOmpOrderedStatement) { _strategy->visit(variable_SgOmpOrderedStatement); }
  335694             :     virtual void visit(SgUpirLoopStatement *variable_SgUpirLoopStatement) { _strategy->visit(variable_SgUpirLoopStatement); }
  335695             :     virtual void visit(SgUpirLoopParallelStatement *variable_SgUpirLoopParallelStatement) { _strategy->visit(variable_SgUpirLoopParallelStatement); }
  335696             :     virtual void visit(SgUpirSyncStatement *variable_SgUpirSyncStatement) { _strategy->visit(variable_SgUpirSyncStatement); }
  335697             :     virtual void visit(SgUpirFieldBodyStatement *variable_SgUpirFieldBodyStatement) { _strategy->visit(variable_SgUpirFieldBodyStatement); }
  335698             :     virtual void visit(SgOmpMasterStatement *variable_SgOmpMasterStatement) { _strategy->visit(variable_SgOmpMasterStatement); }
  335699             :     virtual void visit(SgOmpSectionStatement *variable_SgOmpSectionStatement) { _strategy->visit(variable_SgOmpSectionStatement); }
  335700             :     virtual void visit(SgOmpWorkshareStatement *variable_SgOmpWorkshareStatement) { _strategy->visit(variable_SgOmpWorkshareStatement); }
  335701             :     virtual void visit(SgOmpFlushStatement *variable_SgOmpFlushStatement) { _strategy->visit(variable_SgOmpFlushStatement); }
  335702             :     virtual void visit(SgOmpAllocateStatement *variable_SgOmpAllocateStatement) { _strategy->visit(variable_SgOmpAllocateStatement); }
  335703             :     virtual void visit(SgOmpOrderedDependStatement *variable_SgOmpOrderedDependStatement) { _strategy->visit(variable_SgOmpOrderedDependStatement); }
  335704             :     virtual void visit(SgUpirBodyStatement *variable_SgUpirBodyStatement) { _strategy->visit(variable_SgUpirBodyStatement); }
  335705             :     virtual void visit(SgUpirFieldStatement *variable_SgUpirFieldStatement) { _strategy->visit(variable_SgUpirFieldStatement); }
  335706             :     virtual void visit(SgBlockDataStatement *variable_SgBlockDataStatement) { _strategy->visit(variable_SgBlockDataStatement); }
  335707             :     virtual void visit(SgImplicitStatement *variable_SgImplicitStatement) { _strategy->visit(variable_SgImplicitStatement); }
  335708             :     virtual void visit(SgStatementFunctionStatement *variable_SgStatementFunctionStatement) { _strategy->visit(variable_SgStatementFunctionStatement); }
  335709             :     virtual void visit(SgWhereStatement *variable_SgWhereStatement) { _strategy->visit(variable_SgWhereStatement); }
  335710             :     virtual void visit(SgNullifyStatement *variable_SgNullifyStatement) { _strategy->visit(variable_SgNullifyStatement); }
  335711             :     virtual void visit(SgEquivalenceStatement *variable_SgEquivalenceStatement) { _strategy->visit(variable_SgEquivalenceStatement); }
  335712             :     virtual void visit(SgDerivedTypeStatement *variable_SgDerivedTypeStatement) { _strategy->visit(variable_SgDerivedTypeStatement); }
  335713             :     virtual void visit(SgAttributeSpecificationStatement *variable_SgAttributeSpecificationStatement) { _strategy->visit(variable_SgAttributeSpecificationStatement); }
  335714             :     virtual void visit(SgAllocateStatement *variable_SgAllocateStatement) { _strategy->visit(variable_SgAllocateStatement); }
  335715             :     virtual void visit(SgDeallocateStatement *variable_SgDeallocateStatement) { _strategy->visit(variable_SgDeallocateStatement); }
  335716             :     virtual void visit(SgContainsStatement *variable_SgContainsStatement) { _strategy->visit(variable_SgContainsStatement); }
  335717             :     virtual void visit(SgSequenceStatement *variable_SgSequenceStatement) { _strategy->visit(variable_SgSequenceStatement); }
  335718             :     virtual void visit(SgElseWhereStatement *variable_SgElseWhereStatement) { _strategy->visit(variable_SgElseWhereStatement); }
  335719             :     virtual void visit(SgArithmeticIfStatement *variable_SgArithmeticIfStatement) { _strategy->visit(variable_SgArithmeticIfStatement); }
  335720             :     virtual void visit(SgAssignStatement *variable_SgAssignStatement) { _strategy->visit(variable_SgAssignStatement); }
  335721             :     virtual void visit(SgComputedGotoStatement *variable_SgComputedGotoStatement) { _strategy->visit(variable_SgComputedGotoStatement); }
  335722             :     virtual void visit(SgAssignedGotoStatement *variable_SgAssignedGotoStatement) { _strategy->visit(variable_SgAssignedGotoStatement); }
  335723             :     virtual void visit(SgNamelistStatement *variable_SgNamelistStatement) { _strategy->visit(variable_SgNamelistStatement); }
  335724             :     virtual void visit(SgImportStatement *variable_SgImportStatement) { _strategy->visit(variable_SgImportStatement); }
  335725             :     virtual void visit(SgAssociateStatement *variable_SgAssociateStatement) { _strategy->visit(variable_SgAssociateStatement); }
  335726             :     virtual void visit(SgFortranIncludeLine *variable_SgFortranIncludeLine) { _strategy->visit(variable_SgFortranIncludeLine); }
  335727             :     virtual void visit(SgNamespaceDeclarationStatement *variable_SgNamespaceDeclarationStatement) { _strategy->visit(variable_SgNamespaceDeclarationStatement); }
  335728             :     virtual void visit(SgNamespaceAliasDeclarationStatement *variable_SgNamespaceAliasDeclarationStatement) { _strategy->visit(variable_SgNamespaceAliasDeclarationStatement); }
  335729             :     virtual void visit(SgNamespaceDefinitionStatement *variable_SgNamespaceDefinitionStatement) { _strategy->visit(variable_SgNamespaceDefinitionStatement); }
  335730             :     virtual void visit(SgUsingDeclarationStatement *variable_SgUsingDeclarationStatement) { _strategy->visit(variable_SgUsingDeclarationStatement); }
  335731             :     virtual void visit(SgUsingDirectiveStatement *variable_SgUsingDirectiveStatement) { _strategy->visit(variable_SgUsingDirectiveStatement); }
  335732             :     virtual void visit(SgTemplateInstantiationDirectiveStatement *variable_SgTemplateInstantiationDirectiveStatement) { _strategy->visit(variable_SgTemplateInstantiationDirectiveStatement); }
  335733             :     virtual void visit(SgStaticAssertionDeclaration *variable_SgStaticAssertionDeclaration) { _strategy->visit(variable_SgStaticAssertionDeclaration); }
  335734             :     virtual void visit(SgTemplateClassDefinition *variable_SgTemplateClassDefinition) { _strategy->visit(variable_SgTemplateClassDefinition); }
  335735             :     virtual void visit(SgTemplateFunctionDefinition *variable_SgTemplateFunctionDefinition) { _strategy->visit(variable_SgTemplateFunctionDefinition); }
  335736             :     virtual void visit(SgClassDeclaration *variable_SgClassDeclaration) { _strategy->visit(variable_SgClassDeclaration); }
  335737             :     virtual void visit(SgClassDefinition *variable_SgClassDefinition) { _strategy->visit(variable_SgClassDefinition); }
  335738             :     virtual void visit(SgFunctionDefinition *variable_SgFunctionDefinition) { _strategy->visit(variable_SgFunctionDefinition); }
  335739             :     virtual void visit(SgScopeStatement *variable_SgScopeStatement) { _strategy->visit(variable_SgScopeStatement); }
  335740             :     virtual void visit(SgMemberFunctionDeclaration *variable_SgMemberFunctionDeclaration) { _strategy->visit(variable_SgMemberFunctionDeclaration); }
  335741             :     virtual void visit(SgFunctionDeclaration *variable_SgFunctionDeclaration) { _strategy->visit(variable_SgFunctionDeclaration); }
  335742             :     virtual void visit(SgIncludeDirectiveStatement *variable_SgIncludeDirectiveStatement) { _strategy->visit(variable_SgIncludeDirectiveStatement); }
  335743             :     virtual void visit(SgDefineDirectiveStatement *variable_SgDefineDirectiveStatement) { _strategy->visit(variable_SgDefineDirectiveStatement); }
  335744             :     virtual void visit(SgUndefDirectiveStatement *variable_SgUndefDirectiveStatement) { _strategy->visit(variable_SgUndefDirectiveStatement); }
  335745             :     virtual void visit(SgIfdefDirectiveStatement *variable_SgIfdefDirectiveStatement) { _strategy->visit(variable_SgIfdefDirectiveStatement); }
  335746             :     virtual void visit(SgIfndefDirectiveStatement *variable_SgIfndefDirectiveStatement) { _strategy->visit(variable_SgIfndefDirectiveStatement); }
  335747             :     virtual void visit(SgIfDirectiveStatement *variable_SgIfDirectiveStatement) { _strategy->visit(variable_SgIfDirectiveStatement); }
  335748             :     virtual void visit(SgDeadIfDirectiveStatement *variable_SgDeadIfDirectiveStatement) { _strategy->visit(variable_SgDeadIfDirectiveStatement); }
  335749             :     virtual void visit(SgElseDirectiveStatement *variable_SgElseDirectiveStatement) { _strategy->visit(variable_SgElseDirectiveStatement); }
  335750             :     virtual void visit(SgElseifDirectiveStatement *variable_SgElseifDirectiveStatement) { _strategy->visit(variable_SgElseifDirectiveStatement); }
  335751             :     virtual void visit(SgEndifDirectiveStatement *variable_SgEndifDirectiveStatement) { _strategy->visit(variable_SgEndifDirectiveStatement); }
  335752             :     virtual void visit(SgLineDirectiveStatement *variable_SgLineDirectiveStatement) { _strategy->visit(variable_SgLineDirectiveStatement); }
  335753             :     virtual void visit(SgWarningDirectiveStatement *variable_SgWarningDirectiveStatement) { _strategy->visit(variable_SgWarningDirectiveStatement); }
  335754             :     virtual void visit(SgErrorDirectiveStatement *variable_SgErrorDirectiveStatement) { _strategy->visit(variable_SgErrorDirectiveStatement); }
  335755             :     virtual void visit(SgEmptyDirectiveStatement *variable_SgEmptyDirectiveStatement) { _strategy->visit(variable_SgEmptyDirectiveStatement); }
  335756             :     virtual void visit(SgIncludeNextDirectiveStatement *variable_SgIncludeNextDirectiveStatement) { _strategy->visit(variable_SgIncludeNextDirectiveStatement); }
  335757             :     virtual void visit(SgIdentDirectiveStatement *variable_SgIdentDirectiveStatement) { _strategy->visit(variable_SgIdentDirectiveStatement); }
  335758             :     virtual void visit(SgLinemarkerDirectiveStatement *variable_SgLinemarkerDirectiveStatement) { _strategy->visit(variable_SgLinemarkerDirectiveStatement); }
  335759             :     virtual void visit(SgC_PreprocessorDirectiveStatement *variable_SgC_PreprocessorDirectiveStatement) { _strategy->visit(variable_SgC_PreprocessorDirectiveStatement); }
  335760             :     virtual void visit(SgClinkageStartStatement *variable_SgClinkageStartStatement) { _strategy->visit(variable_SgClinkageStartStatement); }
  335761             :     virtual void visit(SgClinkageEndStatement *variable_SgClinkageEndStatement) { _strategy->visit(variable_SgClinkageEndStatement); }
  335762             :     virtual void visit(SgClinkageDeclarationStatement *variable_SgClinkageDeclarationStatement) { _strategy->visit(variable_SgClinkageDeclarationStatement); }
  335763             :     virtual void visit(SgOmpDeclareSimdStatement *variable_SgOmpDeclareSimdStatement) { _strategy->visit(variable_SgOmpDeclareSimdStatement); }
  335764             :     virtual void visit(SgOmpBarrierStatement *variable_SgOmpBarrierStatement) { _strategy->visit(variable_SgOmpBarrierStatement); }
  335765             :     virtual void visit(SgOmpTaskyieldStatement *variable_SgOmpTaskyieldStatement) { _strategy->visit(variable_SgOmpTaskyieldStatement); }
  335766             :     virtual void visit(SgOmpRequiresStatement *variable_SgOmpRequiresStatement) { _strategy->visit(variable_SgOmpRequiresStatement); }
  335767             :     virtual void visit(SgOmpTaskwaitStatement *variable_SgOmpTaskwaitStatement) { _strategy->visit(variable_SgOmpTaskwaitStatement); }
  335768             :     virtual void visit(SgOmpThreadprivateStatement *variable_SgOmpThreadprivateStatement) { _strategy->visit(variable_SgOmpThreadprivateStatement); }
  335769             :     virtual void visit(SgMicrosoftAttributeDeclaration *variable_SgMicrosoftAttributeDeclaration) { _strategy->visit(variable_SgMicrosoftAttributeDeclaration); }
  335770             :     virtual void visit(SgEmptyDeclaration *variable_SgEmptyDeclaration) { _strategy->visit(variable_SgEmptyDeclaration); }
  335771             :     virtual void visit(SgDeclarationStatement *variable_SgDeclarationStatement) { _strategy->visit(variable_SgDeclarationStatement); }
  335772             :     virtual void visit(SgUpirBaseStatement *variable_SgUpirBaseStatement) { _strategy->visit(variable_SgUpirBaseStatement); }
  335773             :     virtual void visit(SgStatement *variable_SgStatement) { _strategy->visit(variable_SgStatement); }
  335774             :     virtual void visit(SgVarRefExp *variable_SgVarRefExp) { _strategy->visit(variable_SgVarRefExp); }
  335775             :     virtual void visit(SgNonrealRefExp *variable_SgNonrealRefExp) { _strategy->visit(variable_SgNonrealRefExp); }
  335776             :     virtual void visit(SgCompoundLiteralExp *variable_SgCompoundLiteralExp) { _strategy->visit(variable_SgCompoundLiteralExp); }
  335777             :     virtual void visit(SgLabelRefExp *variable_SgLabelRefExp) { _strategy->visit(variable_SgLabelRefExp); }
  335778             :     virtual void visit(SgClassNameRefExp *variable_SgClassNameRefExp) { _strategy->visit(variable_SgClassNameRefExp); }
  335779             :     virtual void visit(SgFunctionRefExp *variable_SgFunctionRefExp) { _strategy->visit(variable_SgFunctionRefExp); }
  335780             :     virtual void visit(SgMemberFunctionRefExp *variable_SgMemberFunctionRefExp) { _strategy->visit(variable_SgMemberFunctionRefExp); }
  335781             :     virtual void visit(SgTemplateFunctionRefExp *variable_SgTemplateFunctionRefExp) { _strategy->visit(variable_SgTemplateFunctionRefExp); }
  335782             :     virtual void visit(SgTemplateMemberFunctionRefExp *variable_SgTemplateMemberFunctionRefExp) { _strategy->visit(variable_SgTemplateMemberFunctionRefExp); }
  335783             :     virtual void visit(SgSizeOfOp *variable_SgSizeOfOp) { _strategy->visit(variable_SgSizeOfOp); }
  335784             :     virtual void visit(SgAlignOfOp *variable_SgAlignOfOp) { _strategy->visit(variable_SgAlignOfOp); }
  335785             :     virtual void visit(SgNoexceptOp *variable_SgNoexceptOp) { _strategy->visit(variable_SgNoexceptOp); }
  335786             :     virtual void visit(SgTypeExpression *variable_SgTypeExpression) { _strategy->visit(variable_SgTypeExpression); }
  335787             :     virtual void visit(SgLambdaExp *variable_SgLambdaExp) { _strategy->visit(variable_SgLambdaExp); }
  335788             :     virtual void visit(SgUpcLocalsizeofExpression *variable_SgUpcLocalsizeofExpression) { _strategy->visit(variable_SgUpcLocalsizeofExpression); }
  335789             :     virtual void visit(SgUpcBlocksizeofExpression *variable_SgUpcBlocksizeofExpression) { _strategy->visit(variable_SgUpcBlocksizeofExpression); }
  335790             :     virtual void visit(SgUpcElemsizeofExpression *variable_SgUpcElemsizeofExpression) { _strategy->visit(variable_SgUpcElemsizeofExpression); }
  335791             :     virtual void visit(SgVarArgStartOp *variable_SgVarArgStartOp) { _strategy->visit(variable_SgVarArgStartOp); }
  335792             :     virtual void visit(SgVarArgStartOneOperandOp *variable_SgVarArgStartOneOperandOp) { _strategy->visit(variable_SgVarArgStartOneOperandOp); }
  335793             :     virtual void visit(SgVarArgOp *variable_SgVarArgOp) { _strategy->visit(variable_SgVarArgOp); }
  335794             :     virtual void visit(SgVarArgEndOp *variable_SgVarArgEndOp) { _strategy->visit(variable_SgVarArgEndOp); }
  335795             :     virtual void visit(SgVarArgCopyOp *variable_SgVarArgCopyOp) { _strategy->visit(variable_SgVarArgCopyOp); }
  335796             :     virtual void visit(SgTypeIdOp *variable_SgTypeIdOp) { _strategy->visit(variable_SgTypeIdOp); }
  335797             :     virtual void visit(SgConditionalExp *variable_SgConditionalExp) { _strategy->visit(variable_SgConditionalExp); }
  335798             :     virtual void visit(SgNewExp *variable_SgNewExp) { _strategy->visit(variable_SgNewExp); }
  335799             :     virtual void visit(SgDeleteExp *variable_SgDeleteExp) { _strategy->visit(variable_SgDeleteExp); }
  335800             :     virtual void visit(SgThisExp *variable_SgThisExp) { _strategy->visit(variable_SgThisExp); }
  335801             :     virtual void visit(SgSuperExp *variable_SgSuperExp) { _strategy->visit(variable_SgSuperExp); }
  335802             :     virtual void visit(SgClassExp *variable_SgClassExp) { _strategy->visit(variable_SgClassExp); }
  335803             :     virtual void visit(SgRefExp *variable_SgRefExp) { _strategy->visit(variable_SgRefExp); }
  335804             :     virtual void visit(SgAggregateInitializer *variable_SgAggregateInitializer) { _strategy->visit(variable_SgAggregateInitializer); }
  335805             :     virtual void visit(SgCompoundInitializer *variable_SgCompoundInitializer) { _strategy->visit(variable_SgCompoundInitializer); }
  335806             :     virtual void visit(SgConstructorInitializer *variable_SgConstructorInitializer) { _strategy->visit(variable_SgConstructorInitializer); }
  335807             :     virtual void visit(SgAssignInitializer *variable_SgAssignInitializer) { _strategy->visit(variable_SgAssignInitializer); }
  335808             :     virtual void visit(SgBracedInitializer *variable_SgBracedInitializer) { _strategy->visit(variable_SgBracedInitializer); }
  335809             :     virtual void visit(SgExpressionRoot *variable_SgExpressionRoot) { _strategy->visit(variable_SgExpressionRoot); }
  335810             :     virtual void visit(SgMinusOp *variable_SgMinusOp) { _strategy->visit(variable_SgMinusOp); }
  335811             :     virtual void visit(SgUnaryAddOp *variable_SgUnaryAddOp) { _strategy->visit(variable_SgUnaryAddOp); }
  335812             :     virtual void visit(SgNotOp *variable_SgNotOp) { _strategy->visit(variable_SgNotOp); }
  335813             :     virtual void visit(SgPointerDerefExp *variable_SgPointerDerefExp) { _strategy->visit(variable_SgPointerDerefExp); }
  335814             :     virtual void visit(SgAddressOfOp *variable_SgAddressOfOp) { _strategy->visit(variable_SgAddressOfOp); }
  335815             :     virtual void visit(SgMinusMinusOp *variable_SgMinusMinusOp) { _strategy->visit(variable_SgMinusMinusOp); }
  335816             :     virtual void visit(SgPlusPlusOp *variable_SgPlusPlusOp) { _strategy->visit(variable_SgPlusPlusOp); }
  335817             :     virtual void visit(SgBitComplementOp *variable_SgBitComplementOp) { _strategy->visit(variable_SgBitComplementOp); }
  335818             :     virtual void visit(SgRealPartOp *variable_SgRealPartOp) { _strategy->visit(variable_SgRealPartOp); }
  335819             :     virtual void visit(SgImagPartOp *variable_SgImagPartOp) { _strategy->visit(variable_SgImagPartOp); }
  335820             :     virtual void visit(SgConjugateOp *variable_SgConjugateOp) { _strategy->visit(variable_SgConjugateOp); }
  335821             :     virtual void visit(SgCastExp *variable_SgCastExp) { _strategy->visit(variable_SgCastExp); }
  335822             :     virtual void visit(SgThrowOp *variable_SgThrowOp) { _strategy->visit(variable_SgThrowOp); }
  335823             :     virtual void visit(SgArrowExp *variable_SgArrowExp) { _strategy->visit(variable_SgArrowExp); }
  335824             :     virtual void visit(SgDotExp *variable_SgDotExp) { _strategy->visit(variable_SgDotExp); }
  335825             :     virtual void visit(SgDotStarOp *variable_SgDotStarOp) { _strategy->visit(variable_SgDotStarOp); }
  335826             :     virtual void visit(SgArrowStarOp *variable_SgArrowStarOp) { _strategy->visit(variable_SgArrowStarOp); }
  335827             :     virtual void visit(SgEqualityOp *variable_SgEqualityOp) { _strategy->visit(variable_SgEqualityOp); }
  335828             :     virtual void visit(SgLessThanOp *variable_SgLessThanOp) { _strategy->visit(variable_SgLessThanOp); }
  335829             :     virtual void visit(SgGreaterThanOp *variable_SgGreaterThanOp) { _strategy->visit(variable_SgGreaterThanOp); }
  335830             :     virtual void visit(SgNotEqualOp *variable_SgNotEqualOp) { _strategy->visit(variable_SgNotEqualOp); }
  335831             :     virtual void visit(SgLessOrEqualOp *variable_SgLessOrEqualOp) { _strategy->visit(variable_SgLessOrEqualOp); }
  335832             :     virtual void visit(SgGreaterOrEqualOp *variable_SgGreaterOrEqualOp) { _strategy->visit(variable_SgGreaterOrEqualOp); }
  335833             :     virtual void visit(SgAddOp *variable_SgAddOp) { _strategy->visit(variable_SgAddOp); }
  335834             :     virtual void visit(SgSubtractOp *variable_SgSubtractOp) { _strategy->visit(variable_SgSubtractOp); }
  335835             :     virtual void visit(SgMultiplyOp *variable_SgMultiplyOp) { _strategy->visit(variable_SgMultiplyOp); }
  335836             :     virtual void visit(SgDivideOp *variable_SgDivideOp) { _strategy->visit(variable_SgDivideOp); }
  335837             :     virtual void visit(SgIntegerDivideOp *variable_SgIntegerDivideOp) { _strategy->visit(variable_SgIntegerDivideOp); }
  335838             :     virtual void visit(SgModOp *variable_SgModOp) { _strategy->visit(variable_SgModOp); }
  335839             :     virtual void visit(SgAndOp *variable_SgAndOp) { _strategy->visit(variable_SgAndOp); }
  335840             :     virtual void visit(SgOrOp *variable_SgOrOp) { _strategy->visit(variable_SgOrOp); }
  335841             :     virtual void visit(SgBitXorOp *variable_SgBitXorOp) { _strategy->visit(variable_SgBitXorOp); }
  335842             :     virtual void visit(SgBitAndOp *variable_SgBitAndOp) { _strategy->visit(variable_SgBitAndOp); }
  335843             :     virtual void visit(SgBitOrOp *variable_SgBitOrOp) { _strategy->visit(variable_SgBitOrOp); }
  335844             :     virtual void visit(SgBitEqvOp *variable_SgBitEqvOp) { _strategy->visit(variable_SgBitEqvOp); }
  335845             :     virtual void visit(SgCommaOpExp *variable_SgCommaOpExp) { _strategy->visit(variable_SgCommaOpExp); }
  335846             :     virtual void visit(SgLshiftOp *variable_SgLshiftOp) { _strategy->visit(variable_SgLshiftOp); }
  335847             :     virtual void visit(SgRshiftOp *variable_SgRshiftOp) { _strategy->visit(variable_SgRshiftOp); }
  335848             :     virtual void visit(SgPntrArrRefExp *variable_SgPntrArrRefExp) { _strategy->visit(variable_SgPntrArrRefExp); }
  335849             :     virtual void visit(SgScopeOp *variable_SgScopeOp) { _strategy->visit(variable_SgScopeOp); }
  335850             :     virtual void visit(SgAssignOp *variable_SgAssignOp) { _strategy->visit(variable_SgAssignOp); }
  335851             :     virtual void visit(SgPlusAssignOp *variable_SgPlusAssignOp) { _strategy->visit(variable_SgPlusAssignOp); }
  335852             :     virtual void visit(SgMinusAssignOp *variable_SgMinusAssignOp) { _strategy->visit(variable_SgMinusAssignOp); }
  335853             :     virtual void visit(SgAndAssignOp *variable_SgAndAssignOp) { _strategy->visit(variable_SgAndAssignOp); }
  335854             :     virtual void visit(SgIorAssignOp *variable_SgIorAssignOp) { _strategy->visit(variable_SgIorAssignOp); }
  335855             :     virtual void visit(SgMultAssignOp *variable_SgMultAssignOp) { _strategy->visit(variable_SgMultAssignOp); }
  335856             :     virtual void visit(SgDivAssignOp *variable_SgDivAssignOp) { _strategy->visit(variable_SgDivAssignOp); }
  335857             :     virtual void visit(SgModAssignOp *variable_SgModAssignOp) { _strategy->visit(variable_SgModAssignOp); }
  335858             :     virtual void visit(SgXorAssignOp *variable_SgXorAssignOp) { _strategy->visit(variable_SgXorAssignOp); }
  335859             :     virtual void visit(SgLshiftAssignOp *variable_SgLshiftAssignOp) { _strategy->visit(variable_SgLshiftAssignOp); }
  335860             :     virtual void visit(SgRshiftAssignOp *variable_SgRshiftAssignOp) { _strategy->visit(variable_SgRshiftAssignOp); }
  335861             :     virtual void visit(SgIntegerDivideAssignOp *variable_SgIntegerDivideAssignOp) { _strategy->visit(variable_SgIntegerDivideAssignOp); }
  335862             :     virtual void visit(SgExponentiationAssignOp *variable_SgExponentiationAssignOp) { _strategy->visit(variable_SgExponentiationAssignOp); }
  335863             :     virtual void visit(SgConcatenationOp *variable_SgConcatenationOp) { _strategy->visit(variable_SgConcatenationOp); }
  335864             :     virtual void visit(SgNaryComparisonOp *variable_SgNaryComparisonOp) { _strategy->visit(variable_SgNaryComparisonOp); }
  335865             :     virtual void visit(SgNaryBooleanOp *variable_SgNaryBooleanOp) { _strategy->visit(variable_SgNaryBooleanOp); }
  335866             :     virtual void visit(SgBoolValExp *variable_SgBoolValExp) { _strategy->visit(variable_SgBoolValExp); }
  335867             :     virtual void visit(SgStringVal *variable_SgStringVal) { _strategy->visit(variable_SgStringVal); }
  335868             :     virtual void visit(SgShortVal *variable_SgShortVal) { _strategy->visit(variable_SgShortVal); }
  335869             :     virtual void visit(SgCharVal *variable_SgCharVal) { _strategy->visit(variable_SgCharVal); }
  335870             :     virtual void visit(SgUnsignedCharVal *variable_SgUnsignedCharVal) { _strategy->visit(variable_SgUnsignedCharVal); }
  335871             :     virtual void visit(SgWcharVal *variable_SgWcharVal) { _strategy->visit(variable_SgWcharVal); }
  335872             :     virtual void visit(SgChar16Val *variable_SgChar16Val) { _strategy->visit(variable_SgChar16Val); }
  335873             :     virtual void visit(SgChar32Val *variable_SgChar32Val) { _strategy->visit(variable_SgChar32Val); }
  335874             :     virtual void visit(SgUnsignedShortVal *variable_SgUnsignedShortVal) { _strategy->visit(variable_SgUnsignedShortVal); }
  335875             :     virtual void visit(SgIntVal *variable_SgIntVal) { _strategy->visit(variable_SgIntVal); }
  335876             :     virtual void visit(SgEnumVal *variable_SgEnumVal) { _strategy->visit(variable_SgEnumVal); }
  335877             :     virtual void visit(SgUnsignedIntVal *variable_SgUnsignedIntVal) { _strategy->visit(variable_SgUnsignedIntVal); }
  335878             :     virtual void visit(SgLongIntVal *variable_SgLongIntVal) { _strategy->visit(variable_SgLongIntVal); }
  335879             :     virtual void visit(SgLongLongIntVal *variable_SgLongLongIntVal) { _strategy->visit(variable_SgLongLongIntVal); }
  335880             :     virtual void visit(SgUnsignedLongLongIntVal *variable_SgUnsignedLongLongIntVal) { _strategy->visit(variable_SgUnsignedLongLongIntVal); }
  335881             :     virtual void visit(SgUnsignedLongVal *variable_SgUnsignedLongVal) { _strategy->visit(variable_SgUnsignedLongVal); }
  335882             :     virtual void visit(SgFloatVal *variable_SgFloatVal) { _strategy->visit(variable_SgFloatVal); }
  335883             :     virtual void visit(SgDoubleVal *variable_SgDoubleVal) { _strategy->visit(variable_SgDoubleVal); }
  335884             :     virtual void visit(SgLongDoubleVal *variable_SgLongDoubleVal) { _strategy->visit(variable_SgLongDoubleVal); }
  335885             :     virtual void visit(SgFloat80Val *variable_SgFloat80Val) { _strategy->visit(variable_SgFloat80Val); }
  335886             :     virtual void visit(SgFloat128Val *variable_SgFloat128Val) { _strategy->visit(variable_SgFloat128Val); }
  335887             :     virtual void visit(SgNullptrValExp *variable_SgNullptrValExp) { _strategy->visit(variable_SgNullptrValExp); }
  335888             :     virtual void visit(SgVoidVal *variable_SgVoidVal) { _strategy->visit(variable_SgVoidVal); }
  335889             :     virtual void visit(SgFunctionParameterRefExp *variable_SgFunctionParameterRefExp) { _strategy->visit(variable_SgFunctionParameterRefExp); }
  335890             :     virtual void visit(SgTemplateParameterVal *variable_SgTemplateParameterVal) { _strategy->visit(variable_SgTemplateParameterVal); }
  335891             :     virtual void visit(SgUpcThreads *variable_SgUpcThreads) { _strategy->visit(variable_SgUpcThreads); }
  335892             :     virtual void visit(SgUpcMythread *variable_SgUpcMythread) { _strategy->visit(variable_SgUpcMythread); }
  335893             :     virtual void visit(SgComplexVal *variable_SgComplexVal) { _strategy->visit(variable_SgComplexVal); }
  335894             :     virtual void visit(SgNullExpression *variable_SgNullExpression) { _strategy->visit(variable_SgNullExpression); }
  335895             :     virtual void visit(SgVariantExpression *variable_SgVariantExpression) { _strategy->visit(variable_SgVariantExpression); }
  335896             :     virtual void visit(SgStatementExpression *variable_SgStatementExpression) { _strategy->visit(variable_SgStatementExpression); }
  335897             :     virtual void visit(SgAsmOp *variable_SgAsmOp) { _strategy->visit(variable_SgAsmOp); }
  335898             :     virtual void visit(SgCudaKernelExecConfig *variable_SgCudaKernelExecConfig) { _strategy->visit(variable_SgCudaKernelExecConfig); }
  335899             :     virtual void visit(SgCudaKernelCallExp *variable_SgCudaKernelCallExp) { _strategy->visit(variable_SgCudaKernelCallExp); }
  335900             :     virtual void visit(SgLambdaRefExp *variable_SgLambdaRefExp) { _strategy->visit(variable_SgLambdaRefExp); }
  335901             :     virtual void visit(SgTupleExp *variable_SgTupleExp) { _strategy->visit(variable_SgTupleExp); }
  335902             :     virtual void visit(SgListExp *variable_SgListExp) { _strategy->visit(variable_SgListExp); }
  335903             :     virtual void visit(SgDictionaryExp *variable_SgDictionaryExp) { _strategy->visit(variable_SgDictionaryExp); }
  335904             :     virtual void visit(SgKeyDatumPair *variable_SgKeyDatumPair) { _strategy->visit(variable_SgKeyDatumPair); }
  335905             :     virtual void visit(SgComprehension *variable_SgComprehension) { _strategy->visit(variable_SgComprehension); }
  335906             :     virtual void visit(SgListComprehension *variable_SgListComprehension) { _strategy->visit(variable_SgListComprehension); }
  335907             :     virtual void visit(SgSetComprehension *variable_SgSetComprehension) { _strategy->visit(variable_SgSetComprehension); }
  335908             :     virtual void visit(SgDictionaryComprehension *variable_SgDictionaryComprehension) { _strategy->visit(variable_SgDictionaryComprehension); }
  335909             :     virtual void visit(SgMembershipOp *variable_SgMembershipOp) { _strategy->visit(variable_SgMembershipOp); }
  335910             :     virtual void visit(SgNonMembershipOp *variable_SgNonMembershipOp) { _strategy->visit(variable_SgNonMembershipOp); }
  335911             :     virtual void visit(SgIsOp *variable_SgIsOp) { _strategy->visit(variable_SgIsOp); }
  335912             :     virtual void visit(SgIsNotOp *variable_SgIsNotOp) { _strategy->visit(variable_SgIsNotOp); }
  335913             :     virtual void visit(SgStringConversion *variable_SgStringConversion) { _strategy->visit(variable_SgStringConversion); }
  335914             :     virtual void visit(SgYieldExpression *variable_SgYieldExpression) { _strategy->visit(variable_SgYieldExpression); }
  335915             :     virtual void visit(SgFoldExpression *variable_SgFoldExpression) { _strategy->visit(variable_SgFoldExpression); }
  335916             :     virtual void visit(SgChooseExpression *variable_SgChooseExpression) { _strategy->visit(variable_SgChooseExpression); }
  335917             :     virtual void visit(SgAwaitExpression *variable_SgAwaitExpression) { _strategy->visit(variable_SgAwaitExpression); }
  335918             :     virtual void visit(SgSpaceshipOp *variable_SgSpaceshipOp) { _strategy->visit(variable_SgSpaceshipOp); }
  335919             :     virtual void visit(SgSubscriptExpression *variable_SgSubscriptExpression) { _strategy->visit(variable_SgSubscriptExpression); }
  335920             :     virtual void visit(SgColonShapeExp *variable_SgColonShapeExp) { _strategy->visit(variable_SgColonShapeExp); }
  335921             :     virtual void visit(SgAsteriskShapeExp *variable_SgAsteriskShapeExp) { _strategy->visit(variable_SgAsteriskShapeExp); }
  335922             :     virtual void visit(SgIOItemExpression *variable_SgIOItemExpression) { _strategy->visit(variable_SgIOItemExpression); }
  335923             :     virtual void visit(SgImpliedDo *variable_SgImpliedDo) { _strategy->visit(variable_SgImpliedDo); }
  335924             :     virtual void visit(SgExponentiationOp *variable_SgExponentiationOp) { _strategy->visit(variable_SgExponentiationOp); }
  335925             :     virtual void visit(SgUnknownArrayOrFunctionReference *variable_SgUnknownArrayOrFunctionReference) { _strategy->visit(variable_SgUnknownArrayOrFunctionReference); }
  335926             :     virtual void visit(SgActualArgumentExpression *variable_SgActualArgumentExpression) { _strategy->visit(variable_SgActualArgumentExpression); }
  335927             :     virtual void visit(SgUserDefinedBinaryOp *variable_SgUserDefinedBinaryOp) { _strategy->visit(variable_SgUserDefinedBinaryOp); }
  335928             :     virtual void visit(SgPointerAssignOp *variable_SgPointerAssignOp) { _strategy->visit(variable_SgPointerAssignOp); }
  335929             :     virtual void visit(SgCAFCoExpression *variable_SgCAFCoExpression) { _strategy->visit(variable_SgCAFCoExpression); }
  335930             :     virtual void visit(SgDesignatedInitializer *variable_SgDesignatedInitializer) { _strategy->visit(variable_SgDesignatedInitializer); }
  335931             :     virtual void visit(SgMatrixExp *variable_SgMatrixExp) { _strategy->visit(variable_SgMatrixExp); }
  335932             :     virtual void visit(SgRangeExp *variable_SgRangeExp) { _strategy->visit(variable_SgRangeExp); }
  335933             :     virtual void visit(SgMagicColonExp *variable_SgMagicColonExp) { _strategy->visit(variable_SgMagicColonExp); }
  335934             :     virtual void visit(SgElementwiseMultiplyOp *variable_SgElementwiseMultiplyOp) { _strategy->visit(variable_SgElementwiseMultiplyOp); }
  335935             :     virtual void visit(SgPowerOp *variable_SgPowerOp) { _strategy->visit(variable_SgPowerOp); }
  335936             :     virtual void visit(SgElementwisePowerOp *variable_SgElementwisePowerOp) { _strategy->visit(variable_SgElementwisePowerOp); }
  335937             :     virtual void visit(SgElementwiseDivideOp *variable_SgElementwiseDivideOp) { _strategy->visit(variable_SgElementwiseDivideOp); }
  335938             :     virtual void visit(SgLeftDivideOp *variable_SgLeftDivideOp) { _strategy->visit(variable_SgLeftDivideOp); }
  335939             :     virtual void visit(SgElementwiseLeftDivideOp *variable_SgElementwiseLeftDivideOp) { _strategy->visit(variable_SgElementwiseLeftDivideOp); }
  335940             :     virtual void visit(SgElementwiseAddOp *variable_SgElementwiseAddOp) { _strategy->visit(variable_SgElementwiseAddOp); }
  335941             :     virtual void visit(SgElementwiseSubtractOp *variable_SgElementwiseSubtractOp) { _strategy->visit(variable_SgElementwiseSubtractOp); }
  335942             :     virtual void visit(SgMatrixTransposeOp *variable_SgMatrixTransposeOp) { _strategy->visit(variable_SgMatrixTransposeOp); }
  335943             :     virtual void visit(SgElementwiseOp *variable_SgElementwiseOp) { _strategy->visit(variable_SgElementwiseOp); }
  335944             :     virtual void visit(SgInitializer *variable_SgInitializer) { _strategy->visit(variable_SgInitializer); }
  335945             :     virtual void visit(SgSIMDLoad *variable_SgSIMDLoad) { _strategy->visit(variable_SgSIMDLoad); }
  335946             :     virtual void visit(SgSIMDBroadcast *variable_SgSIMDBroadcast) { _strategy->visit(variable_SgSIMDBroadcast); }
  335947             :     virtual void visit(SgSIMDStore *variable_SgSIMDStore) { _strategy->visit(variable_SgSIMDStore); }
  335948             :     virtual void visit(SgSIMDPartialStore *variable_SgSIMDPartialStore) { _strategy->visit(variable_SgSIMDPartialStore); }
  335949             :     virtual void visit(SgSIMDScalarStore *variable_SgSIMDScalarStore) { _strategy->visit(variable_SgSIMDScalarStore); }
  335950             :     virtual void visit(SgSIMDGather *variable_SgSIMDGather) { _strategy->visit(variable_SgSIMDGather); }
  335951             :     virtual void visit(SgSIMDExplicitGather *variable_SgSIMDExplicitGather) { _strategy->visit(variable_SgSIMDExplicitGather); }
  335952             :     virtual void visit(SgSIMDScatter *variable_SgSIMDScatter) { _strategy->visit(variable_SgSIMDScatter); }
  335953             :     virtual void visit(SgSIMDAddOp *variable_SgSIMDAddOp) { _strategy->visit(variable_SgSIMDAddOp); }
  335954             :     virtual void visit(SgSIMDSubOp *variable_SgSIMDSubOp) { _strategy->visit(variable_SgSIMDSubOp); }
  335955             :     virtual void visit(SgSIMDMulOp *variable_SgSIMDMulOp) { _strategy->visit(variable_SgSIMDMulOp); }
  335956             :     virtual void visit(SgSIMDDivOp *variable_SgSIMDDivOp) { _strategy->visit(variable_SgSIMDDivOp); }
  335957             :     virtual void visit(SgSIMDFmaOp *variable_SgSIMDFmaOp) { _strategy->visit(variable_SgSIMDFmaOp); }
  335958             :     virtual void visit(SgSIMDBinaryOp *variable_SgSIMDBinaryOp) { _strategy->visit(variable_SgSIMDBinaryOp); }
  335959             :     virtual void visit(SgUserDefinedUnaryOp *variable_SgUserDefinedUnaryOp) { _strategy->visit(variable_SgUserDefinedUnaryOp); }
  335960             :     virtual void visit(SgPseudoDestructorRefExp *variable_SgPseudoDestructorRefExp) { _strategy->visit(variable_SgPseudoDestructorRefExp); }
  335961             :     virtual void visit(SgUnaryOp *variable_SgUnaryOp) { _strategy->visit(variable_SgUnaryOp); }
  335962             :     virtual void visit(SgCompoundAssignOp *variable_SgCompoundAssignOp) { _strategy->visit(variable_SgCompoundAssignOp); }
  335963             :     virtual void visit(SgBinaryOp *variable_SgBinaryOp) { _strategy->visit(variable_SgBinaryOp); }
  335964             :     virtual void visit(SgNaryOp *variable_SgNaryOp) { _strategy->visit(variable_SgNaryOp); }
  335965             :     virtual void visit(SgValueExp *variable_SgValueExp) { _strategy->visit(variable_SgValueExp); }
  335966             :     virtual void visit(SgExprListExp *variable_SgExprListExp) { _strategy->visit(variable_SgExprListExp); }
  335967             :     virtual void visit(SgFunctionCallExp *variable_SgFunctionCallExp) { _strategy->visit(variable_SgFunctionCallExp); }
  335968             :     virtual void visit(SgCallExpression *variable_SgCallExpression) { _strategy->visit(variable_SgCallExpression); }
  335969             :     virtual void visit(SgTypeTraitBuiltinOperator *variable_SgTypeTraitBuiltinOperator) { _strategy->visit(variable_SgTypeTraitBuiltinOperator); }
  335970             :     virtual void visit(SgExpression *variable_SgExpression) { _strategy->visit(variable_SgExpression); }
  335971             :     virtual void visit(SgTemplateVariableSymbol *variable_SgTemplateVariableSymbol) { _strategy->visit(variable_SgTemplateVariableSymbol); }
  335972             :     virtual void visit(SgVariableSymbol *variable_SgVariableSymbol) { _strategy->visit(variable_SgVariableSymbol); }
  335973             :     virtual void visit(SgFunctionTypeSymbol *variable_SgFunctionTypeSymbol) { _strategy->visit(variable_SgFunctionTypeSymbol); }
  335974             :     virtual void visit(SgTemplateClassSymbol *variable_SgTemplateClassSymbol) { _strategy->visit(variable_SgTemplateClassSymbol); }
  335975             :     virtual void visit(SgClassSymbol *variable_SgClassSymbol) { _strategy->visit(variable_SgClassSymbol); }
  335976             :     virtual void visit(SgTemplateSymbol *variable_SgTemplateSymbol) { _strategy->visit(variable_SgTemplateSymbol); }
  335977             :     virtual void visit(SgEnumSymbol *variable_SgEnumSymbol) { _strategy->visit(variable_SgEnumSymbol); }
  335978             :     virtual void visit(SgEnumFieldSymbol *variable_SgEnumFieldSymbol) { _strategy->visit(variable_SgEnumFieldSymbol); }
  335979             :     virtual void visit(SgTemplateTypedefSymbol *variable_SgTemplateTypedefSymbol) { _strategy->visit(variable_SgTemplateTypedefSymbol); }
  335980             :     virtual void visit(SgTypedefSymbol *variable_SgTypedefSymbol) { _strategy->visit(variable_SgTypedefSymbol); }
  335981             :     virtual void visit(SgTemplateFunctionSymbol *variable_SgTemplateFunctionSymbol) { _strategy->visit(variable_SgTemplateFunctionSymbol); }
  335982             :     virtual void visit(SgTemplateMemberFunctionSymbol *variable_SgTemplateMemberFunctionSymbol) { _strategy->visit(variable_SgTemplateMemberFunctionSymbol); }
  335983             :     virtual void visit(SgLabelSymbol *variable_SgLabelSymbol) { _strategy->visit(variable_SgLabelSymbol); }
  335984             :     virtual void visit(SgDefaultSymbol *variable_SgDefaultSymbol) { _strategy->visit(variable_SgDefaultSymbol); }
  335985             :     virtual void visit(SgNamespaceSymbol *variable_SgNamespaceSymbol) { _strategy->visit(variable_SgNamespaceSymbol); }
  335986             :     virtual void visit(SgIntrinsicSymbol *variable_SgIntrinsicSymbol) { _strategy->visit(variable_SgIntrinsicSymbol); }
  335987             :     virtual void visit(SgModuleSymbol *variable_SgModuleSymbol) { _strategy->visit(variable_SgModuleSymbol); }
  335988             :     virtual void visit(SgInterfaceSymbol *variable_SgInterfaceSymbol) { _strategy->visit(variable_SgInterfaceSymbol); }
  335989             :     virtual void visit(SgCommonSymbol *variable_SgCommonSymbol) { _strategy->visit(variable_SgCommonSymbol); }
  335990             :     virtual void visit(SgRenameSymbol *variable_SgRenameSymbol) { _strategy->visit(variable_SgRenameSymbol); }
  335991             :     virtual void visit(SgMemberFunctionSymbol *variable_SgMemberFunctionSymbol) { _strategy->visit(variable_SgMemberFunctionSymbol); }
  335992             :     virtual void visit(SgFunctionSymbol *variable_SgFunctionSymbol) { _strategy->visit(variable_SgFunctionSymbol); }
  335993             :     virtual void visit(SgAliasSymbol *variable_SgAliasSymbol) { _strategy->visit(variable_SgAliasSymbol); }
  335994             :     virtual void visit(SgNonrealSymbol *variable_SgNonrealSymbol) { _strategy->visit(variable_SgNonrealSymbol); }
  335995             :     virtual void visit(SgSymbol *variable_SgSymbol) { _strategy->visit(variable_SgSymbol); }
  335996             :     virtual void visit(SgCommonBlockObject *variable_SgCommonBlockObject) { _strategy->visit(variable_SgCommonBlockObject); }
  335997             :     virtual void visit(SgInitializedName *variable_SgInitializedName) { _strategy->visit(variable_SgInitializedName); }
  335998             :     virtual void visit(SgLambdaCapture *variable_SgLambdaCapture) { _strategy->visit(variable_SgLambdaCapture); }
  335999             :     virtual void visit(SgLambdaCaptureList *variable_SgLambdaCaptureList) { _strategy->visit(variable_SgLambdaCaptureList); }
  336000             :     virtual void visit(SgOmpOrderedClause *variable_SgOmpOrderedClause) { _strategy->visit(variable_SgOmpOrderedClause); }
  336001             :     virtual void visit(SgOmpNowaitClause *variable_SgOmpNowaitClause) { _strategy->visit(variable_SgOmpNowaitClause); }
  336002             :     virtual void visit(SgOmpNogroupClause *variable_SgOmpNogroupClause) { _strategy->visit(variable_SgOmpNogroupClause); }
  336003             :     virtual void visit(SgOmpReadClause *variable_SgOmpReadClause) { _strategy->visit(variable_SgOmpReadClause); }
  336004             :     virtual void visit(SgOmpThreadsClause *variable_SgOmpThreadsClause) { _strategy->visit(variable_SgOmpThreadsClause); }
  336005             :     virtual void visit(SgOmpSimdClause *variable_SgOmpSimdClause) { _strategy->visit(variable_SgOmpSimdClause); }
  336006             :     virtual void visit(SgOmpReverseOffloadClause *variable_SgOmpReverseOffloadClause) { _strategy->visit(variable_SgOmpReverseOffloadClause); }
  336007             :     virtual void visit(SgOmpExtImplementationDefinedRequirementClause *variable_SgOmpExtImplementationDefinedRequirementClause) { _strategy->visit(variable_SgOmpExtImplementationDefinedRequirementClause); }
  336008             :     virtual void visit(SgOmpUnifiedAddressClause *variable_SgOmpUnifiedAddressClause) { _strategy->visit(variable_SgOmpUnifiedAddressClause); }
  336009             :     virtual void visit(SgOmpUnifiedSharedMemoryClause *variable_SgOmpUnifiedSharedMemoryClause) { _strategy->visit(variable_SgOmpUnifiedSharedMemoryClause); }
  336010             :     virtual void visit(SgOmpDynamicAllocatorsClause *variable_SgOmpDynamicAllocatorsClause) { _strategy->visit(variable_SgOmpDynamicAllocatorsClause); }
  336011             :     virtual void visit(SgOmpAtomicDefaultMemOrderClause *variable_SgOmpAtomicDefaultMemOrderClause) { _strategy->visit(variable_SgOmpAtomicDefaultMemOrderClause); }
  336012             :     virtual void visit(SgOmpWriteClause *variable_SgOmpWriteClause) { _strategy->visit(variable_SgOmpWriteClause); }
  336013             :     virtual void visit(SgOmpUpdateClause *variable_SgOmpUpdateClause) { _strategy->visit(variable_SgOmpUpdateClause); }
  336014             :     virtual void visit(SgOmpDepobjUpdateClause *variable_SgOmpDepobjUpdateClause) { _strategy->visit(variable_SgOmpDepobjUpdateClause); }
  336015             :     virtual void visit(SgOmpDestroyClause *variable_SgOmpDestroyClause) { _strategy->visit(variable_SgOmpDestroyClause); }
  336016             :     virtual void visit(SgOmpCaptureClause *variable_SgOmpCaptureClause) { _strategy->visit(variable_SgOmpCaptureClause); }
  336017             :     virtual void visit(SgOmpSeqCstClause *variable_SgOmpSeqCstClause) { _strategy->visit(variable_SgOmpSeqCstClause); }
  336018             :     virtual void visit(SgOmpAcqRelClause *variable_SgOmpAcqRelClause) { _strategy->visit(variable_SgOmpAcqRelClause); }
  336019             :     virtual void visit(SgOmpReleaseClause *variable_SgOmpReleaseClause) { _strategy->visit(variable_SgOmpReleaseClause); }
  336020             :     virtual void visit(SgOmpAcquireClause *variable_SgOmpAcquireClause) { _strategy->visit(variable_SgOmpAcquireClause); }
  336021             :     virtual void visit(SgOmpRelaxedClause *variable_SgOmpRelaxedClause) { _strategy->visit(variable_SgOmpRelaxedClause); }
  336022             :     virtual void visit(SgOmpParallelClause *variable_SgOmpParallelClause) { _strategy->visit(variable_SgOmpParallelClause); }
  336023             :     virtual void visit(SgOmpSectionsClause *variable_SgOmpSectionsClause) { _strategy->visit(variable_SgOmpSectionsClause); }
  336024             :     virtual void visit(SgOmpForClause *variable_SgOmpForClause) { _strategy->visit(variable_SgOmpForClause); }
  336025             :     virtual void visit(SgOmpTaskgroupClause *variable_SgOmpTaskgroupClause) { _strategy->visit(variable_SgOmpTaskgroupClause); }
  336026             :     virtual void visit(SgOmpBeginClause *variable_SgOmpBeginClause) { _strategy->visit(variable_SgOmpBeginClause); }
  336027             :     virtual void visit(SgOmpEndClause *variable_SgOmpEndClause) { _strategy->visit(variable_SgOmpEndClause); }
  336028             :     virtual void visit(SgOmpUntiedClause *variable_SgOmpUntiedClause) { _strategy->visit(variable_SgOmpUntiedClause); }
  336029             :     virtual void visit(SgOmpMergeableClause *variable_SgOmpMergeableClause) { _strategy->visit(variable_SgOmpMergeableClause); }
  336030             :     virtual void visit(SgOmpDefaultClause *variable_SgOmpDefaultClause) { _strategy->visit(variable_SgOmpDefaultClause); }
  336031             :     virtual void visit(SgOmpAtomicClause *variable_SgOmpAtomicClause) { _strategy->visit(variable_SgOmpAtomicClause); }
  336032             :     virtual void visit(SgOmpProcBindClause *variable_SgOmpProcBindClause) { _strategy->visit(variable_SgOmpProcBindClause); }
  336033             :     virtual void visit(SgOmpOrderClause *variable_SgOmpOrderClause) { _strategy->visit(variable_SgOmpOrderClause); }
  336034             :     virtual void visit(SgOmpBindClause *variable_SgOmpBindClause) { _strategy->visit(variable_SgOmpBindClause); }
  336035             :     virtual void visit(SgOmpInbranchClause *variable_SgOmpInbranchClause) { _strategy->visit(variable_SgOmpInbranchClause); }
  336036             :     virtual void visit(SgOmpNotinbranchClause *variable_SgOmpNotinbranchClause) { _strategy->visit(variable_SgOmpNotinbranchClause); }
  336037             :     virtual void visit(SgOmpCollapseClause *variable_SgOmpCollapseClause) { _strategy->visit(variable_SgOmpCollapseClause); }
  336038             :     virtual void visit(SgOmpIfClause *variable_SgOmpIfClause) { _strategy->visit(variable_SgOmpIfClause); }
  336039             :     virtual void visit(SgOmpFinalClause *variable_SgOmpFinalClause) { _strategy->visit(variable_SgOmpFinalClause); }
  336040             :     virtual void visit(SgOmpPriorityClause *variable_SgOmpPriorityClause) { _strategy->visit(variable_SgOmpPriorityClause); }
  336041             :     virtual void visit(SgUpirNumUnitsField *variable_SgUpirNumUnitsField) { _strategy->visit(variable_SgUpirNumUnitsField); }
  336042             :     virtual void visit(SgOmpNumTeamsClause *variable_SgOmpNumTeamsClause) { _strategy->visit(variable_SgOmpNumTeamsClause); }
  336043             :     virtual void visit(SgOmpGrainsizeClause *variable_SgOmpGrainsizeClause) { _strategy->visit(variable_SgOmpGrainsizeClause); }
  336044             :     virtual void visit(SgOmpDetachClause *variable_SgOmpDetachClause) { _strategy->visit(variable_SgOmpDetachClause); }
  336045             :     virtual void visit(SgOmpNumTasksClause *variable_SgOmpNumTasksClause) { _strategy->visit(variable_SgOmpNumTasksClause); }
  336046             :     virtual void visit(SgOmpHintClause *variable_SgOmpHintClause) { _strategy->visit(variable_SgOmpHintClause); }
  336047             :     virtual void visit(SgOmpThreadLimitClause *variable_SgOmpThreadLimitClause) { _strategy->visit(variable_SgOmpThreadLimitClause); }
  336048             :     virtual void visit(SgOmpNontemporalClause *variable_SgOmpNontemporalClause) { _strategy->visit(variable_SgOmpNontemporalClause); }
  336049             :     virtual void visit(SgOmpInclusiveClause *variable_SgOmpInclusiveClause) { _strategy->visit(variable_SgOmpInclusiveClause); }
  336050             :     virtual void visit(SgOmpExclusiveClause *variable_SgOmpExclusiveClause) { _strategy->visit(variable_SgOmpExclusiveClause); }
  336051             :     virtual void visit(SgOmpIsDevicePtrClause *variable_SgOmpIsDevicePtrClause) { _strategy->visit(variable_SgOmpIsDevicePtrClause); }
  336052             :     virtual void visit(SgOmpUseDevicePtrClause *variable_SgOmpUseDevicePtrClause) { _strategy->visit(variable_SgOmpUseDevicePtrClause); }
  336053             :     virtual void visit(SgOmpUseDeviceAddrClause *variable_SgOmpUseDeviceAddrClause) { _strategy->visit(variable_SgOmpUseDeviceAddrClause); }
  336054             :     virtual void visit(SgOmpDeviceClause *variable_SgOmpDeviceClause) { _strategy->visit(variable_SgOmpDeviceClause); }
  336055             :     virtual void visit(SgOmpSafelenClause *variable_SgOmpSafelenClause) { _strategy->visit(variable_SgOmpSafelenClause); }
  336056             :     virtual void visit(SgOmpSimdlenClause *variable_SgOmpSimdlenClause) { _strategy->visit(variable_SgOmpSimdlenClause); }
  336057             :     virtual void visit(SgOmpPartialClause *variable_SgOmpPartialClause) { _strategy->visit(variable_SgOmpPartialClause); }
  336058             :     virtual void visit(SgOmpFullClause *variable_SgOmpFullClause) { _strategy->visit(variable_SgOmpFullClause); }
  336059             :     virtual void visit(SgOmpSizesClause *variable_SgOmpSizesClause) { _strategy->visit(variable_SgOmpSizesClause); }
  336060             :     virtual void visit(SgUpirBranchField *variable_SgUpirBranchField) { _strategy->visit(variable_SgUpirBranchField); }
  336061             :     virtual void visit(SgUpirNestedLevelField *variable_SgUpirNestedLevelField) { _strategy->visit(variable_SgUpirNestedLevelField); }
  336062             :     virtual void visit(SgUpirNestedParentField *variable_SgUpirNestedParentField) { _strategy->visit(variable_SgUpirNestedParentField); }
  336063             :     virtual void visit(SgUpirNestedChildField *variable_SgUpirNestedChildField) { _strategy->visit(variable_SgUpirNestedChildField); }
  336064             :     virtual void visit(SgUpirSyncField *variable_SgUpirSyncField) { _strategy->visit(variable_SgUpirSyncField); }
  336065             :     virtual void visit(SgUpirDataField *variable_SgUpirDataField) { _strategy->visit(variable_SgUpirDataField); }
  336066             :     virtual void visit(SgUpirTargetField *variable_SgUpirTargetField) { _strategy->visit(variable_SgUpirTargetField); }
  336067             :     virtual void visit(SgUpirDataItemField *variable_SgUpirDataItemField) { _strategy->visit(variable_SgUpirDataItemField); }
  336068             :     virtual void visit(SgOmpExpressionClause *variable_SgOmpExpressionClause) { _strategy->visit(variable_SgOmpExpressionClause); }
  336069             :     virtual void visit(SgOmpCopyprivateClause *variable_SgOmpCopyprivateClause) { _strategy->visit(variable_SgOmpCopyprivateClause); }
  336070             :     virtual void visit(SgOmpPrivateClause *variable_SgOmpPrivateClause) { _strategy->visit(variable_SgOmpPrivateClause); }
  336071             :     virtual void visit(SgOmpFirstprivateClause *variable_SgOmpFirstprivateClause) { _strategy->visit(variable_SgOmpFirstprivateClause); }
  336072             :     virtual void visit(SgOmpSharedClause *variable_SgOmpSharedClause) { _strategy->visit(variable_SgOmpSharedClause); }
  336073             :     virtual void visit(SgOmpCopyinClause *variable_SgOmpCopyinClause) { _strategy->visit(variable_SgOmpCopyinClause); }
  336074             :     virtual void visit(SgOmpLastprivateClause *variable_SgOmpLastprivateClause) { _strategy->visit(variable_SgOmpLastprivateClause); }
  336075             :     virtual void visit(SgOmpReductionClause *variable_SgOmpReductionClause) { _strategy->visit(variable_SgOmpReductionClause); }
  336076             :     virtual void visit(SgOmpInReductionClause *variable_SgOmpInReductionClause) { _strategy->visit(variable_SgOmpInReductionClause); }
  336077             :     virtual void visit(SgOmpTaskReductionClause *variable_SgOmpTaskReductionClause) { _strategy->visit(variable_SgOmpTaskReductionClause); }
  336078             :     virtual void visit(SgOmpAllocateClause *variable_SgOmpAllocateClause) { _strategy->visit(variable_SgOmpAllocateClause); }
  336079             :     virtual void visit(SgOmpDependClause *variable_SgOmpDependClause) { _strategy->visit(variable_SgOmpDependClause); }
  336080             :     virtual void visit(SgOmpToClause *variable_SgOmpToClause) { _strategy->visit(variable_SgOmpToClause); }
  336081             :     virtual void visit(SgOmpUsesAllocatorsClause *variable_SgOmpUsesAllocatorsClause) { _strategy->visit(variable_SgOmpUsesAllocatorsClause); }
  336082             :     virtual void visit(SgOmpFromClause *variable_SgOmpFromClause) { _strategy->visit(variable_SgOmpFromClause); }
  336083             :     virtual void visit(SgOmpAffinityClause *variable_SgOmpAffinityClause) { _strategy->visit(variable_SgOmpAffinityClause); }
  336084             :     virtual void visit(SgOmpMapClause *variable_SgOmpMapClause) { _strategy->visit(variable_SgOmpMapClause); }
  336085             :     virtual void visit(SgOmpLinearClause *variable_SgOmpLinearClause) { _strategy->visit(variable_SgOmpLinearClause); }
  336086             :     virtual void visit(SgOmpUniformClause *variable_SgOmpUniformClause) { _strategy->visit(variable_SgOmpUniformClause); }
  336087             :     virtual void visit(SgOmpAlignedClause *variable_SgOmpAlignedClause) { _strategy->visit(variable_SgOmpAlignedClause); }
  336088             :     virtual void visit(SgOmpVariablesClause *variable_SgOmpVariablesClause) { _strategy->visit(variable_SgOmpVariablesClause); }
  336089             :     virtual void visit(SgOmpScheduleClause *variable_SgOmpScheduleClause) { _strategy->visit(variable_SgOmpScheduleClause); }
  336090             :     virtual void visit(SgOmpWhenClause *variable_SgOmpWhenClause) { _strategy->visit(variable_SgOmpWhenClause); }
  336091             :     virtual void visit(SgOmpDistScheduleClause *variable_SgOmpDistScheduleClause) { _strategy->visit(variable_SgOmpDistScheduleClause); }
  336092             :     virtual void visit(SgOmpDefaultmapClause *variable_SgOmpDefaultmapClause) { _strategy->visit(variable_SgOmpDefaultmapClause); }
  336093             :     virtual void visit(SgOmpAllocatorClause *variable_SgOmpAllocatorClause) { _strategy->visit(variable_SgOmpAllocatorClause); }
  336094             :     virtual void visit(SgOmpUsesAllocatorsDefination *variable_SgOmpUsesAllocatorsDefination) { _strategy->visit(variable_SgOmpUsesAllocatorsDefination); }
  336095             :     virtual void visit(SgOmpClause *variable_SgOmpClause) { _strategy->visit(variable_SgOmpClause); }
  336096             :     virtual void visit(SgRenamePair *variable_SgRenamePair) { _strategy->visit(variable_SgRenamePair); }
  336097             :     virtual void visit(SgInterfaceBody *variable_SgInterfaceBody) { _strategy->visit(variable_SgInterfaceBody); }
  336098             :     virtual void visit(SgHeaderFileBody *variable_SgHeaderFileBody) { _strategy->visit(variable_SgHeaderFileBody); }
  336099             :     virtual void visit(SgLocatedNodeSupport *variable_SgLocatedNodeSupport) { _strategy->visit(variable_SgLocatedNodeSupport); }
  336100             :     virtual void visit(SgToken *variable_SgToken) { _strategy->visit(variable_SgToken); }
  336101             :     virtual void visit(SgLocatedNode *variable_SgLocatedNode) { _strategy->visit(variable_SgLocatedNode); }
  336102             :     virtual void visit(SgNode *variable_SgNode) { _strategy->visit(variable_SgNode); }
  336103             :     virtual void visitDefault(SgNode* n) { _strategy->visitDefault(n); }
  336104             : };
  336105             : #endif // endif for ifndef SWIG 
  336106             : 
  336107             : 
  336108             : 
  336109             : 
  336110             : 
  336111             : #endif // ifndef IFDEF_MARKER_H 
  336112             : 
  336113             : 
  336114             : #ifndef SWIG 
  336115             : 
  336116             : #ifndef REFERENCETOPOINTERHANDLER_DEFINED
  336117             : #define REFERENCETOPOINTERHANDLER_DEFINED
  336118             : 
  336119         343 : struct ReferenceToPointerHandler
  336120             :    {
  336121             :      virtual void apply(SgName *&r, const SgName &n, bool traverse) = 0;
  336122             :      virtual void apply(SgSymbolTable *&r, const SgName &n, bool traverse) = 0;
  336123             :      virtual void apply(SgPragma *&r, const SgName &n, bool traverse) = 0;
  336124             :      virtual void apply(SgModifierNodes *&r, const SgName &n, bool traverse) = 0;
  336125             :      virtual void apply(SgConstVolatileModifier *&r, const SgName &n, bool traverse) = 0;
  336126             :      virtual void apply(SgStorageModifier *&r, const SgName &n, bool traverse) = 0;
  336127             :      virtual void apply(SgAccessModifier *&r, const SgName &n, bool traverse) = 0;
  336128             :      virtual void apply(SgFunctionModifier *&r, const SgName &n, bool traverse) = 0;
  336129             :      virtual void apply(SgUPC_AccessModifier *&r, const SgName &n, bool traverse) = 0;
  336130             :      virtual void apply(SgLinkageModifier *&r, const SgName &n, bool traverse) = 0;
  336131             :      virtual void apply(SgSpecialFunctionModifier *&r, const SgName &n, bool traverse) = 0;
  336132             :      virtual void apply(SgTypeModifier *&r, const SgName &n, bool traverse) = 0;
  336133             :      virtual void apply(SgElaboratedTypeModifier *&r, const SgName &n, bool traverse) = 0;
  336134             :      virtual void apply(SgBaseClassModifier *&r, const SgName &n, bool traverse) = 0;
  336135             :      virtual void apply(SgDeclarationModifier *&r, const SgName &n, bool traverse) = 0;
  336136             :      virtual void apply(SgStructureModifier *&r, const SgName &n, bool traverse) = 0;
  336137             :      virtual void apply(SgOpenclAccessModeModifier *&r, const SgName &n, bool traverse) = 0;
  336138             :      virtual void apply(SgModifier *&r, const SgName &n, bool traverse) = 0;
  336139             :      virtual void apply(Sg_File_Info *&r, const SgName &n, bool traverse) = 0;
  336140             :      virtual void apply(SgSourceFile *&r, const SgName &n, bool traverse) = 0;
  336141             :      virtual void apply(SgUnknownFile *&r, const SgName &n, bool traverse) = 0;
  336142             :      virtual void apply(SgFile *&r, const SgName &n, bool traverse) = 0;
  336143             :      virtual void apply(SgFileList *&r, const SgName &n, bool traverse) = 0;
  336144             :      virtual void apply(SgDirectory *&r, const SgName &n, bool traverse) = 0;
  336145             :      virtual void apply(SgDirectoryList *&r, const SgName &n, bool traverse) = 0;
  336146             :      virtual void apply(SgProject *&r, const SgName &n, bool traverse) = 0;
  336147             :      virtual void apply(SgOptions *&r, const SgName &n, bool traverse) = 0;
  336148             :      virtual void apply(SgUnparse_Info *&r, const SgName &n, bool traverse) = 0;
  336149             :      virtual void apply(SgIncludeFile *&r, const SgName &n, bool traverse) = 0;
  336150             :      virtual void apply(SgFuncDecl_attr *&r, const SgName &n, bool traverse) = 0;
  336151             :      virtual void apply(SgClassDecl_attr *&r, const SgName &n, bool traverse) = 0;
  336152             :      virtual void apply(SgTypedefSeq *&r, const SgName &n, bool traverse) = 0;
  336153             :      virtual void apply(SgFunctionParameterTypeList *&r, const SgName &n, bool traverse) = 0;
  336154             :      virtual void apply(SgTemplateParameter *&r, const SgName &n, bool traverse) = 0;
  336155             :      virtual void apply(SgTemplateArgument *&r, const SgName &n, bool traverse) = 0;
  336156             :      virtual void apply(SgTemplateParameterList *&r, const SgName &n, bool traverse) = 0;
  336157             :      virtual void apply(SgTemplateArgumentList *&r, const SgName &n, bool traverse) = 0;
  336158             :      virtual void apply(SgBitAttribute *&r, const SgName &n, bool traverse) = 0;
  336159             :      virtual void apply(SgAttribute *&r, const SgName &n, bool traverse) = 0;
  336160             :      virtual void apply(SgExpBaseClass *&r, const SgName &n, bool traverse) = 0;
  336161             :      virtual void apply(SgNonrealBaseClass *&r, const SgName &n, bool traverse) = 0;
  336162             :      virtual void apply(SgBaseClass *&r, const SgName &n, bool traverse) = 0;
  336163             :      virtual void apply(SgUndirectedGraphEdge *&r, const SgName &n, bool traverse) = 0;
  336164             :      virtual void apply(SgDirectedGraphEdge *&r, const SgName &n, bool traverse) = 0;
  336165             :      virtual void apply(SgGraphNode *&r, const SgName &n, bool traverse) = 0;
  336166             :      virtual void apply(SgGraphEdge *&r, const SgName &n, bool traverse) = 0;
  336167             :      virtual void apply(SgStringKeyedBidirectionalGraph *&r, const SgName &n, bool traverse) = 0;
  336168             :      virtual void apply(SgIntKeyedBidirectionalGraph *&r, const SgName &n, bool traverse) = 0;
  336169             :      virtual void apply(SgBidirectionalGraph *&r, const SgName &n, bool traverse) = 0;
  336170             :      virtual void apply(SgIncidenceDirectedGraph *&r, const SgName &n, bool traverse) = 0;
  336171             :      virtual void apply(SgIncidenceUndirectedGraph *&r, const SgName &n, bool traverse) = 0;
  336172             :      virtual void apply(SgGraph *&r, const SgName &n, bool traverse) = 0;
  336173             :      virtual void apply(SgGraphNodeList *&r, const SgName &n, bool traverse) = 0;
  336174             :      virtual void apply(SgGraphEdgeList *&r, const SgName &n, bool traverse) = 0;
  336175             :      virtual void apply(SgQualifiedName *&r, const SgName &n, bool traverse) = 0;
  336176             :      virtual void apply(SgNameGroup *&r, const SgName &n, bool traverse) = 0;
  336177             :      virtual void apply(SgDimensionObject *&r, const SgName &n, bool traverse) = 0;
  336178             :      virtual void apply(SgDataStatementGroup *&r, const SgName &n, bool traverse) = 0;
  336179             :      virtual void apply(SgDataStatementObject *&r, const SgName &n, bool traverse) = 0;
  336180             :      virtual void apply(SgDataStatementValue *&r, const SgName &n, bool traverse) = 0;
  336181             :      virtual void apply(SgFormatItem *&r, const SgName &n, bool traverse) = 0;
  336182             :      virtual void apply(SgFormatItemList *&r, const SgName &n, bool traverse) = 0;
  336183             :      virtual void apply(SgTypeTable *&r, const SgName &n, bool traverse) = 0;
  336184             :      virtual void apply(SgHeaderFileReport *&r, const SgName &n, bool traverse) = 0;
  336185             :      virtual void apply(SgSupport *&r, const SgName &n, bool traverse) = 0;
  336186             :      virtual void apply(SgTypeUnknown *&r, const SgName &n, bool traverse) = 0;
  336187             :      virtual void apply(SgTypeChar *&r, const SgName &n, bool traverse) = 0;
  336188             :      virtual void apply(SgTypeSignedChar *&r, const SgName &n, bool traverse) = 0;
  336189             :      virtual void apply(SgTypeUnsignedChar *&r, const SgName &n, bool traverse) = 0;
  336190             :      virtual void apply(SgTypeShort *&r, const SgName &n, bool traverse) = 0;
  336191             :      virtual void apply(SgTypeSignedShort *&r, const SgName &n, bool traverse) = 0;
  336192             :      virtual void apply(SgTypeUnsignedShort *&r, const SgName &n, bool traverse) = 0;
  336193             :      virtual void apply(SgTypeInt *&r, const SgName &n, bool traverse) = 0;
  336194             :      virtual void apply(SgTypeSignedInt *&r, const SgName &n, bool traverse) = 0;
  336195             :      virtual void apply(SgTypeUnsignedInt *&r, const SgName &n, bool traverse) = 0;
  336196             :      virtual void apply(SgTypeLong *&r, const SgName &n, bool traverse) = 0;
  336197             :      virtual void apply(SgTypeSignedLong *&r, const SgName &n, bool traverse) = 0;
  336198             :      virtual void apply(SgTypeUnsignedLong *&r, const SgName &n, bool traverse) = 0;
  336199             :      virtual void apply(SgTypeVoid *&r, const SgName &n, bool traverse) = 0;
  336200             :      virtual void apply(SgTypeGlobalVoid *&r, const SgName &n, bool traverse) = 0;
  336201             :      virtual void apply(SgTypeWchar *&r, const SgName &n, bool traverse) = 0;
  336202             :      virtual void apply(SgTypeFloat *&r, const SgName &n, bool traverse) = 0;
  336203             :      virtual void apply(SgTypeDouble *&r, const SgName &n, bool traverse) = 0;
  336204             :      virtual void apply(SgTypeLongLong *&r, const SgName &n, bool traverse) = 0;
  336205             :      virtual void apply(SgTypeSignedLongLong *&r, const SgName &n, bool traverse) = 0;
  336206             :      virtual void apply(SgTypeUnsignedLongLong *&r, const SgName &n, bool traverse) = 0;
  336207             :      virtual void apply(SgTypeLongDouble *&r, const SgName &n, bool traverse) = 0;
  336208             :      virtual void apply(SgTypeFloat80 *&r, const SgName &n, bool traverse) = 0;
  336209             :      virtual void apply(SgTypeFloat128 *&r, const SgName &n, bool traverse) = 0;
  336210             :      virtual void apply(SgTypeString *&r, const SgName &n, bool traverse) = 0;
  336211             :      virtual void apply(SgTypeBool *&r, const SgName &n, bool traverse) = 0;
  336212             :      virtual void apply(SgTypeFixed *&r, const SgName &n, bool traverse) = 0;
  336213             :      virtual void apply(SgTypeMatrix *&r, const SgName &n, bool traverse) = 0;
  336214             :      virtual void apply(SgTypeTuple *&r, const SgName &n, bool traverse) = 0;
  336215             :      virtual void apply(SgTypeNullptr *&r, const SgName &n, bool traverse) = 0;
  336216             :      virtual void apply(SgTypeComplex *&r, const SgName &n, bool traverse) = 0;
  336217             :      virtual void apply(SgTypeImaginary *&r, const SgName &n, bool traverse) = 0;
  336218             :      virtual void apply(SgTypeDefault *&r, const SgName &n, bool traverse) = 0;
  336219             :      virtual void apply(SgPointerMemberType *&r, const SgName &n, bool traverse) = 0;
  336220             :      virtual void apply(SgReferenceType *&r, const SgName &n, bool traverse) = 0;
  336221             :      virtual void apply(SgRvalueReferenceType *&r, const SgName &n, bool traverse) = 0;
  336222             :      virtual void apply(SgDeclType *&r, const SgName &n, bool traverse) = 0;
  336223             :      virtual void apply(SgTypeOfType *&r, const SgName &n, bool traverse) = 0;
  336224             :      virtual void apply(SgTypeCAFTeam *&r, const SgName &n, bool traverse) = 0;
  336225             :      virtual void apply(SgTypeUnsigned128bitInteger *&r, const SgName &n, bool traverse) = 0;
  336226             :      virtual void apply(SgTypeSigned128bitInteger *&r, const SgName &n, bool traverse) = 0;
  336227             :      virtual void apply(SgTypeLabel *&r, const SgName &n, bool traverse) = 0;
  336228             :      virtual void apply(SgTemplateType *&r, const SgName &n, bool traverse) = 0;
  336229             :      virtual void apply(SgEnumType *&r, const SgName &n, bool traverse) = 0;
  336230             :      virtual void apply(SgTypedefType *&r, const SgName &n, bool traverse) = 0;
  336231             :      virtual void apply(SgNonrealType *&r, const SgName &n, bool traverse) = 0;
  336232             :      virtual void apply(SgAutoType *&r, const SgName &n, bool traverse) = 0;
  336233             :      virtual void apply(SgModifierType *&r, const SgName &n, bool traverse) = 0;
  336234             :      virtual void apply(SgPartialFunctionModifierType *&r, const SgName &n, bool traverse) = 0;
  336235             :      virtual void apply(SgArrayType *&r, const SgName &n, bool traverse) = 0;
  336236             :      virtual void apply(SgTypeEllipse *&r, const SgName &n, bool traverse) = 0;
  336237             :      virtual void apply(SgTypeCrayPointer *&r, const SgName &n, bool traverse) = 0;
  336238             :      virtual void apply(SgPartialFunctionType *&r, const SgName &n, bool traverse) = 0;
  336239             :      virtual void apply(SgMemberFunctionType *&r, const SgName &n, bool traverse) = 0;
  336240             :      virtual void apply(SgFunctionType *&r, const SgName &n, bool traverse) = 0;
  336241             :      virtual void apply(SgPointerType *&r, const SgName &n, bool traverse) = 0;
  336242             :      virtual void apply(SgClassType *&r, const SgName &n, bool traverse) = 0;
  336243             :      virtual void apply(SgNamedType *&r, const SgName &n, bool traverse) = 0;
  336244             :      virtual void apply(SgQualifiedNameType *&r, const SgName &n, bool traverse) = 0;
  336245             :      virtual void apply(SgTypeChar16 *&r, const SgName &n, bool traverse) = 0;
  336246             :      virtual void apply(SgTypeChar32 *&r, const SgName &n, bool traverse) = 0;
  336247             :      virtual void apply(SgType *&r, const SgName &n, bool traverse) = 0;
  336248             :      virtual void apply(SgForStatement *&r, const SgName &n, bool traverse) = 0;
  336249             :      virtual void apply(SgForInitStatement *&r, const SgName &n, bool traverse) = 0;
  336250             :      virtual void apply(SgRangeBasedForStatement *&r, const SgName &n, bool traverse) = 0;
  336251             :      virtual void apply(SgCatchStatementSeq *&r, const SgName &n, bool traverse) = 0;
  336252             :      virtual void apply(SgFunctionParameterList *&r, const SgName &n, bool traverse) = 0;
  336253             :      virtual void apply(SgCtorInitializerList *&r, const SgName &n, bool traverse) = 0;
  336254             :      virtual void apply(SgBasicBlock *&r, const SgName &n, bool traverse) = 0;
  336255             :      virtual void apply(SgGlobal *&r, const SgName &n, bool traverse) = 0;
  336256             :      virtual void apply(SgIfStmt *&r, const SgName &n, bool traverse) = 0;
  336257             :      virtual void apply(SgWhileStmt *&r, const SgName &n, bool traverse) = 0;
  336258             :      virtual void apply(SgDoWhileStmt *&r, const SgName &n, bool traverse) = 0;
  336259             :      virtual void apply(SgSwitchStatement *&r, const SgName &n, bool traverse) = 0;
  336260             :      virtual void apply(SgCatchOptionStmt *&r, const SgName &n, bool traverse) = 0;
  336261             :      virtual void apply(SgFunctionParameterScope *&r, const SgName &n, bool traverse) = 0;
  336262             :      virtual void apply(SgDeclarationScope *&r, const SgName &n, bool traverse) = 0;
  336263             :      virtual void apply(SgVariableDefinition *&r, const SgName &n, bool traverse) = 0;
  336264             :      virtual void apply(SgStmtDeclarationStatement *&r, const SgName &n, bool traverse) = 0;
  336265             :      virtual void apply(SgEnumDeclaration *&r, const SgName &n, bool traverse) = 0;
  336266             :      virtual void apply(SgAsmStmt *&r, const SgName &n, bool traverse) = 0;
  336267             :      virtual void apply(SgFunctionTypeTable *&r, const SgName &n, bool traverse) = 0;
  336268             :      virtual void apply(SgExprStatement *&r, const SgName &n, bool traverse) = 0;
  336269             :      virtual void apply(SgLabelStatement *&r, const SgName &n, bool traverse) = 0;
  336270             :      virtual void apply(SgCaseOptionStmt *&r, const SgName &n, bool traverse) = 0;
  336271             :      virtual void apply(SgTryStmt *&r, const SgName &n, bool traverse) = 0;
  336272             :      virtual void apply(SgDefaultOptionStmt *&r, const SgName &n, bool traverse) = 0;
  336273             :      virtual void apply(SgBreakStmt *&r, const SgName &n, bool traverse) = 0;
  336274             :      virtual void apply(SgContinueStmt *&r, const SgName &n, bool traverse) = 0;
  336275             :      virtual void apply(SgReturnStmt *&r, const SgName &n, bool traverse) = 0;
  336276             :      virtual void apply(SgGotoStatement *&r, const SgName &n, bool traverse) = 0;
  336277             :      virtual void apply(SgSpawnStmt *&r, const SgName &n, bool traverse) = 0;
  336278             :      virtual void apply(SgTemplateTypedefDeclaration *&r, const SgName &n, bool traverse) = 0;
  336279             :      virtual void apply(SgTemplateInstantiationTypedefDeclaration *&r, const SgName &n, bool traverse) = 0;
  336280             :      virtual void apply(SgTypedefDeclaration *&r, const SgName &n, bool traverse) = 0;
  336281             :      virtual void apply(SgNullStatement *&r, const SgName &n, bool traverse) = 0;
  336282             :      virtual void apply(SgVariantStatement *&r, const SgName &n, bool traverse) = 0;
  336283             :      virtual void apply(SgPragmaDeclaration *&r, const SgName &n, bool traverse) = 0;
  336284             :      virtual void apply(SgTemplateClassDeclaration *&r, const SgName &n, bool traverse) = 0;
  336285             :      virtual void apply(SgTemplateMemberFunctionDeclaration *&r, const SgName &n, bool traverse) = 0;
  336286             :      virtual void apply(SgTemplateFunctionDeclaration *&r, const SgName &n, bool traverse) = 0;
  336287             :      virtual void apply(SgTemplateVariableDeclaration *&r, const SgName &n, bool traverse) = 0;
  336288             :      virtual void apply(SgTemplateDeclaration *&r, const SgName &n, bool traverse) = 0;
  336289             :      virtual void apply(SgVariableDeclaration *&r, const SgName &n, bool traverse) = 0;
  336290             :      virtual void apply(SgTemplateInstantiationDecl *&r, const SgName &n, bool traverse) = 0;
  336291             :      virtual void apply(SgTemplateInstantiationDefn *&r, const SgName &n, bool traverse) = 0;
  336292             :      virtual void apply(SgTemplateInstantiationFunctionDecl *&r, const SgName &n, bool traverse) = 0;
  336293             :      virtual void apply(SgTemplateInstantiationMemberFunctionDecl *&r, const SgName &n, bool traverse) = 0;
  336294             :      virtual void apply(SgNonrealDecl *&r, const SgName &n, bool traverse) = 0;
  336295             :      virtual void apply(SgWithStatement *&r, const SgName &n, bool traverse) = 0;
  336296             :      virtual void apply(SgPassStatement *&r, const SgName &n, bool traverse) = 0;
  336297             :      virtual void apply(SgAssertStmt *&r, const SgName &n, bool traverse) = 0;
  336298             :      virtual void apply(SgExecStatement *&r, const SgName &n, bool traverse) = 0;
  336299             :      virtual void apply(SgProgramHeaderStatement *&r, const SgName &n, bool traverse) = 0;
  336300             :      virtual void apply(SgProcedureHeaderStatement *&r, const SgName &n, bool traverse) = 0;
  336301             :      virtual void apply(SgEntryStatement *&r, const SgName &n, bool traverse) = 0;
  336302             :      virtual void apply(SgFortranNonblockedDo *&r, const SgName &n, bool traverse) = 0;
  336303             :      virtual void apply(SgInterfaceStatement *&r, const SgName &n, bool traverse) = 0;
  336304             :      virtual void apply(SgParameterStatement *&r, const SgName &n, bool traverse) = 0;
  336305             :      virtual void apply(SgCommonBlock *&r, const SgName &n, bool traverse) = 0;
  336306             :      virtual void apply(SgModuleStatement *&r, const SgName &n, bool traverse) = 0;
  336307             :      virtual void apply(SgUseStatement *&r, const SgName &n, bool traverse) = 0;
  336308             :      virtual void apply(SgProcessControlStatement *&r, const SgName &n, bool traverse) = 0;
  336309             :      virtual void apply(SgPrintStatement *&r, const SgName &n, bool traverse) = 0;
  336310             :      virtual void apply(SgReadStatement *&r, const SgName &n, bool traverse) = 0;
  336311             :      virtual void apply(SgWriteStatement *&r, const SgName &n, bool traverse) = 0;
  336312             :      virtual void apply(SgOpenStatement *&r, const SgName &n, bool traverse) = 0;
  336313             :      virtual void apply(SgCloseStatement *&r, const SgName &n, bool traverse) = 0;
  336314             :      virtual void apply(SgInquireStatement *&r, const SgName &n, bool traverse) = 0;
  336315             :      virtual void apply(SgFlushStatement *&r, const SgName &n, bool traverse) = 0;
  336316             :      virtual void apply(SgBackspaceStatement *&r, const SgName &n, bool traverse) = 0;
  336317             :      virtual void apply(SgRewindStatement *&r, const SgName &n, bool traverse) = 0;
  336318             :      virtual void apply(SgEndfileStatement *&r, const SgName &n, bool traverse) = 0;
  336319             :      virtual void apply(SgWaitStatement *&r, const SgName &n, bool traverse) = 0;
  336320             :      virtual void apply(SgCAFWithTeamStatement *&r, const SgName &n, bool traverse) = 0;
  336321             :      virtual void apply(SgFormatStatement *&r, const SgName &n, bool traverse) = 0;
  336322             :      virtual void apply(SgFortranDo *&r, const SgName &n, bool traverse) = 0;
  336323             :      virtual void apply(SgForAllStatement *&r, const SgName &n, bool traverse) = 0;
  336324             :      virtual void apply(SgIOStatement *&r, const SgName &n, bool traverse) = 0;
  336325             :      virtual void apply(SgSyncAllStatement *&r, const SgName &n, bool traverse) = 0;
  336326             :      virtual void apply(SgSyncImagesStatement *&r, const SgName &n, bool traverse) = 0;
  336327             :      virtual void apply(SgSyncMemoryStatement *&r, const SgName &n, bool traverse) = 0;
  336328             :      virtual void apply(SgSyncTeamStatement *&r, const SgName &n, bool traverse) = 0;
  336329             :      virtual void apply(SgLockStatement *&r, const SgName &n, bool traverse) = 0;
  336330             :      virtual void apply(SgUnlockStatement *&r, const SgName &n, bool traverse) = 0;
  336331             :      virtual void apply(SgImageControlStatement *&r, const SgName &n, bool traverse) = 0;
  336332             :      virtual void apply(SgUpcNotifyStatement *&r, const SgName &n, bool traverse) = 0;
  336333             :      virtual void apply(SgUpcWaitStatement *&r, const SgName &n, bool traverse) = 0;
  336334             :      virtual void apply(SgUpcBarrierStatement *&r, const SgName &n, bool traverse) = 0;
  336335             :      virtual void apply(SgUpcFenceStatement *&r, const SgName &n, bool traverse) = 0;
  336336             :      virtual void apply(SgUpcForAllStatement *&r, const SgName &n, bool traverse) = 0;
  336337             :      virtual void apply(SgUpirSpmdStatement *&r, const SgName &n, bool traverse) = 0;
  336338             :      virtual void apply(SgOmpLoopStatement *&r, const SgName &n, bool traverse) = 0;
  336339             :      virtual void apply(SgOmpScanStatement *&r, const SgName &n, bool traverse) = 0;
  336340             :      virtual void apply(SgOmpTaskloopStatement *&r, const SgName &n, bool traverse) = 0;
  336341             :      virtual void apply(SgOmpTaskgroupStatement *&r, const SgName &n, bool traverse) = 0;
  336342             :      virtual void apply(SgOmpDepobjStatement *&r, const SgName &n, bool traverse) = 0;
  336343             :      virtual void apply(SgOmpTeamsStatement *&r, const SgName &n, bool traverse) = 0;
  336344             :      virtual void apply(SgOmpCancellationPointStatement *&r, const SgName &n, bool traverse) = 0;
  336345             :      virtual void apply(SgOmpDeclareMapperStatement *&r, const SgName &n, bool traverse) = 0;
  336346             :      virtual void apply(SgOmpCancelStatement *&r, const SgName &n, bool traverse) = 0;
  336347             :      virtual void apply(SgOmpDistributeStatement *&r, const SgName &n, bool traverse) = 0;
  336348             :      virtual void apply(SgOmpMetadirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336349             :      virtual void apply(SgOmpSingleStatement *&r, const SgName &n, bool traverse) = 0;
  336350             :      virtual void apply(SgOmpTaskStatement *&r, const SgName &n, bool traverse) = 0;
  336351             :      virtual void apply(SgOmpTargetEnterDataStatement *&r, const SgName &n, bool traverse) = 0;
  336352             :      virtual void apply(SgOmpTargetExitDataStatement *&r, const SgName &n, bool traverse) = 0;
  336353             :      virtual void apply(SgUpirWorksharingStatement *&r, const SgName &n, bool traverse) = 0;
  336354             :      virtual void apply(SgOmpForSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336355             :      virtual void apply(SgOmpDoStatement *&r, const SgName &n, bool traverse) = 0;
  336356             :      virtual void apply(SgOmpSectionsStatement *&r, const SgName &n, bool traverse) = 0;
  336357             :      virtual void apply(SgOmpAtomicStatement *&r, const SgName &n, bool traverse) = 0;
  336358             :      virtual void apply(SgUpirTaskStatement *&r, const SgName &n, bool traverse) = 0;
  336359             :      virtual void apply(SgOmpTargetDataStatement *&r, const SgName &n, bool traverse) = 0;
  336360             :      virtual void apply(SgOmpTargetParallelForStatement *&r, const SgName &n, bool traverse) = 0;
  336361             :      virtual void apply(SgOmpTargetParallelStatement *&r, const SgName &n, bool traverse) = 0;
  336362             :      virtual void apply(SgOmpDistributeSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336363             :      virtual void apply(SgOmpDistributeParallelForStatement *&r, const SgName &n, bool traverse) = 0;
  336364             :      virtual void apply(SgOmpDistributeParallelForSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336365             :      virtual void apply(SgOmpTaskloopSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336366             :      virtual void apply(SgOmpTargetUpdateStatement *&r, const SgName &n, bool traverse) = 0;
  336367             :      virtual void apply(SgOmpTargetParallelForSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336368             :      virtual void apply(SgOmpTargetParallelLoopStatement *&r, const SgName &n, bool traverse) = 0;
  336369             :      virtual void apply(SgOmpTargetSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336370             :      virtual void apply(SgOmpTargetTeamsStatement *&r, const SgName &n, bool traverse) = 0;
  336371             :      virtual void apply(SgOmpTargetTeamsDistributeStatement *&r, const SgName &n, bool traverse) = 0;
  336372             :      virtual void apply(SgOmpTargetTeamsDistributeSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336373             :      virtual void apply(SgOmpTargetTeamsLoopStatement *&r, const SgName &n, bool traverse) = 0;
  336374             :      virtual void apply(SgOmpTargetTeamsDistributeParallelForStatement *&r, const SgName &n, bool traverse) = 0;
  336375             :      virtual void apply(SgOmpTargetTeamsDistributeParallelForSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336376             :      virtual void apply(SgOmpMasterTaskloopSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336377             :      virtual void apply(SgOmpParallelMasterTaskloopStatement *&r, const SgName &n, bool traverse) = 0;
  336378             :      virtual void apply(SgOmpParallelMasterTaskloopSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336379             :      virtual void apply(SgOmpTeamsDistributeStatement *&r, const SgName &n, bool traverse) = 0;
  336380             :      virtual void apply(SgOmpTeamsDistributeSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336381             :      virtual void apply(SgOmpTeamsDistributeParallelForStatement *&r, const SgName &n, bool traverse) = 0;
  336382             :      virtual void apply(SgOmpTeamsDistributeParallelForSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336383             :      virtual void apply(SgOmpTeamsLoopStatement *&r, const SgName &n, bool traverse) = 0;
  336384             :      virtual void apply(SgOmpParallelMasterStatement *&r, const SgName &n, bool traverse) = 0;
  336385             :      virtual void apply(SgOmpMasterTaskloopStatement *&r, const SgName &n, bool traverse) = 0;
  336386             :      virtual void apply(SgOmpParallelLoopStatement *&r, const SgName &n, bool traverse) = 0;
  336387             :      virtual void apply(SgOmpUnrollStatement *&r, const SgName &n, bool traverse) = 0;
  336388             :      virtual void apply(SgOmpTileStatement *&r, const SgName &n, bool traverse) = 0;
  336389             :      virtual void apply(SgUpirSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336390             :      virtual void apply(SgOmpCriticalStatement *&r, const SgName &n, bool traverse) = 0;
  336391             :      virtual void apply(SgOmpOrderedStatement *&r, const SgName &n, bool traverse) = 0;
  336392             :      virtual void apply(SgUpirLoopStatement *&r, const SgName &n, bool traverse) = 0;
  336393             :      virtual void apply(SgUpirLoopParallelStatement *&r, const SgName &n, bool traverse) = 0;
  336394             :      virtual void apply(SgUpirSyncStatement *&r, const SgName &n, bool traverse) = 0;
  336395             :      virtual void apply(SgUpirFieldBodyStatement *&r, const SgName &n, bool traverse) = 0;
  336396             :      virtual void apply(SgOmpMasterStatement *&r, const SgName &n, bool traverse) = 0;
  336397             :      virtual void apply(SgOmpSectionStatement *&r, const SgName &n, bool traverse) = 0;
  336398             :      virtual void apply(SgOmpWorkshareStatement *&r, const SgName &n, bool traverse) = 0;
  336399             :      virtual void apply(SgOmpFlushStatement *&r, const SgName &n, bool traverse) = 0;
  336400             :      virtual void apply(SgOmpAllocateStatement *&r, const SgName &n, bool traverse) = 0;
  336401             :      virtual void apply(SgOmpOrderedDependStatement *&r, const SgName &n, bool traverse) = 0;
  336402             :      virtual void apply(SgUpirBodyStatement *&r, const SgName &n, bool traverse) = 0;
  336403             :      virtual void apply(SgUpirFieldStatement *&r, const SgName &n, bool traverse) = 0;
  336404             :      virtual void apply(SgBlockDataStatement *&r, const SgName &n, bool traverse) = 0;
  336405             :      virtual void apply(SgImplicitStatement *&r, const SgName &n, bool traverse) = 0;
  336406             :      virtual void apply(SgStatementFunctionStatement *&r, const SgName &n, bool traverse) = 0;
  336407             :      virtual void apply(SgWhereStatement *&r, const SgName &n, bool traverse) = 0;
  336408             :      virtual void apply(SgNullifyStatement *&r, const SgName &n, bool traverse) = 0;
  336409             :      virtual void apply(SgEquivalenceStatement *&r, const SgName &n, bool traverse) = 0;
  336410             :      virtual void apply(SgDerivedTypeStatement *&r, const SgName &n, bool traverse) = 0;
  336411             :      virtual void apply(SgAttributeSpecificationStatement *&r, const SgName &n, bool traverse) = 0;
  336412             :      virtual void apply(SgAllocateStatement *&r, const SgName &n, bool traverse) = 0;
  336413             :      virtual void apply(SgDeallocateStatement *&r, const SgName &n, bool traverse) = 0;
  336414             :      virtual void apply(SgContainsStatement *&r, const SgName &n, bool traverse) = 0;
  336415             :      virtual void apply(SgSequenceStatement *&r, const SgName &n, bool traverse) = 0;
  336416             :      virtual void apply(SgElseWhereStatement *&r, const SgName &n, bool traverse) = 0;
  336417             :      virtual void apply(SgArithmeticIfStatement *&r, const SgName &n, bool traverse) = 0;
  336418             :      virtual void apply(SgAssignStatement *&r, const SgName &n, bool traverse) = 0;
  336419             :      virtual void apply(SgComputedGotoStatement *&r, const SgName &n, bool traverse) = 0;
  336420             :      virtual void apply(SgAssignedGotoStatement *&r, const SgName &n, bool traverse) = 0;
  336421             :      virtual void apply(SgNamelistStatement *&r, const SgName &n, bool traverse) = 0;
  336422             :      virtual void apply(SgImportStatement *&r, const SgName &n, bool traverse) = 0;
  336423             :      virtual void apply(SgAssociateStatement *&r, const SgName &n, bool traverse) = 0;
  336424             :      virtual void apply(SgFortranIncludeLine *&r, const SgName &n, bool traverse) = 0;
  336425             :      virtual void apply(SgNamespaceDeclarationStatement *&r, const SgName &n, bool traverse) = 0;
  336426             :      virtual void apply(SgNamespaceAliasDeclarationStatement *&r, const SgName &n, bool traverse) = 0;
  336427             :      virtual void apply(SgNamespaceDefinitionStatement *&r, const SgName &n, bool traverse) = 0;
  336428             :      virtual void apply(SgUsingDeclarationStatement *&r, const SgName &n, bool traverse) = 0;
  336429             :      virtual void apply(SgUsingDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336430             :      virtual void apply(SgTemplateInstantiationDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336431             :      virtual void apply(SgStaticAssertionDeclaration *&r, const SgName &n, bool traverse) = 0;
  336432             :      virtual void apply(SgTemplateClassDefinition *&r, const SgName &n, bool traverse) = 0;
  336433             :      virtual void apply(SgTemplateFunctionDefinition *&r, const SgName &n, bool traverse) = 0;
  336434             :      virtual void apply(SgClassDeclaration *&r, const SgName &n, bool traverse) = 0;
  336435             :      virtual void apply(SgClassDefinition *&r, const SgName &n, bool traverse) = 0;
  336436             :      virtual void apply(SgFunctionDefinition *&r, const SgName &n, bool traverse) = 0;
  336437             :      virtual void apply(SgScopeStatement *&r, const SgName &n, bool traverse) = 0;
  336438             :      virtual void apply(SgMemberFunctionDeclaration *&r, const SgName &n, bool traverse) = 0;
  336439             :      virtual void apply(SgFunctionDeclaration *&r, const SgName &n, bool traverse) = 0;
  336440             :      virtual void apply(SgIncludeDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336441             :      virtual void apply(SgDefineDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336442             :      virtual void apply(SgUndefDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336443             :      virtual void apply(SgIfdefDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336444             :      virtual void apply(SgIfndefDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336445             :      virtual void apply(SgIfDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336446             :      virtual void apply(SgDeadIfDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336447             :      virtual void apply(SgElseDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336448             :      virtual void apply(SgElseifDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336449             :      virtual void apply(SgEndifDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336450             :      virtual void apply(SgLineDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336451             :      virtual void apply(SgWarningDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336452             :      virtual void apply(SgErrorDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336453             :      virtual void apply(SgEmptyDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336454             :      virtual void apply(SgIncludeNextDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336455             :      virtual void apply(SgIdentDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336456             :      virtual void apply(SgLinemarkerDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336457             :      virtual void apply(SgC_PreprocessorDirectiveStatement *&r, const SgName &n, bool traverse) = 0;
  336458             :      virtual void apply(SgClinkageStartStatement *&r, const SgName &n, bool traverse) = 0;
  336459             :      virtual void apply(SgClinkageEndStatement *&r, const SgName &n, bool traverse) = 0;
  336460             :      virtual void apply(SgClinkageDeclarationStatement *&r, const SgName &n, bool traverse) = 0;
  336461             :      virtual void apply(SgOmpDeclareSimdStatement *&r, const SgName &n, bool traverse) = 0;
  336462             :      virtual void apply(SgOmpBarrierStatement *&r, const SgName &n, bool traverse) = 0;
  336463             :      virtual void apply(SgOmpTaskyieldStatement *&r, const SgName &n, bool traverse) = 0;
  336464             :      virtual void apply(SgOmpRequiresStatement *&r, const SgName &n, bool traverse) = 0;
  336465             :      virtual void apply(SgOmpTaskwaitStatement *&r, const SgName &n, bool traverse) = 0;
  336466             :      virtual void apply(SgOmpThreadprivateStatement *&r, const SgName &n, bool traverse) = 0;
  336467             :      virtual void apply(SgMicrosoftAttributeDeclaration *&r, const SgName &n, bool traverse) = 0;
  336468             :      virtual void apply(SgEmptyDeclaration *&r, const SgName &n, bool traverse) = 0;
  336469             :      virtual void apply(SgDeclarationStatement *&r, const SgName &n, bool traverse) = 0;
  336470             :      virtual void apply(SgUpirBaseStatement *&r, const SgName &n, bool traverse) = 0;
  336471             :      virtual void apply(SgStatement *&r, const SgName &n, bool traverse) = 0;
  336472             :      virtual void apply(SgVarRefExp *&r, const SgName &n, bool traverse) = 0;
  336473             :      virtual void apply(SgNonrealRefExp *&r, const SgName &n, bool traverse) = 0;
  336474             :      virtual void apply(SgCompoundLiteralExp *&r, const SgName &n, bool traverse) = 0;
  336475             :      virtual void apply(SgLabelRefExp *&r, const SgName &n, bool traverse) = 0;
  336476             :      virtual void apply(SgClassNameRefExp *&r, const SgName &n, bool traverse) = 0;
  336477             :      virtual void apply(SgFunctionRefExp *&r, const SgName &n, bool traverse) = 0;
  336478             :      virtual void apply(SgMemberFunctionRefExp *&r, const SgName &n, bool traverse) = 0;
  336479             :      virtual void apply(SgTemplateFunctionRefExp *&r, const SgName &n, bool traverse) = 0;
  336480             :      virtual void apply(SgTemplateMemberFunctionRefExp *&r, const SgName &n, bool traverse) = 0;
  336481             :      virtual void apply(SgSizeOfOp *&r, const SgName &n, bool traverse) = 0;
  336482             :      virtual void apply(SgAlignOfOp *&r, const SgName &n, bool traverse) = 0;
  336483             :      virtual void apply(SgNoexceptOp *&r, const SgName &n, bool traverse) = 0;
  336484             :      virtual void apply(SgTypeExpression *&r, const SgName &n, bool traverse) = 0;
  336485             :      virtual void apply(SgLambdaExp *&r, const SgName &n, bool traverse) = 0;
  336486             :      virtual void apply(SgUpcLocalsizeofExpression *&r, const SgName &n, bool traverse) = 0;
  336487             :      virtual void apply(SgUpcBlocksizeofExpression *&r, const SgName &n, bool traverse) = 0;
  336488             :      virtual void apply(SgUpcElemsizeofExpression *&r, const SgName &n, bool traverse) = 0;
  336489             :      virtual void apply(SgVarArgStartOp *&r, const SgName &n, bool traverse) = 0;
  336490             :      virtual void apply(SgVarArgStartOneOperandOp *&r, const SgName &n, bool traverse) = 0;
  336491             :      virtual void apply(SgVarArgOp *&r, const SgName &n, bool traverse) = 0;
  336492             :      virtual void apply(SgVarArgEndOp *&r, const SgName &n, bool traverse) = 0;
  336493             :      virtual void apply(SgVarArgCopyOp *&r, const SgName &n, bool traverse) = 0;
  336494             :      virtual void apply(SgTypeIdOp *&r, const SgName &n, bool traverse) = 0;
  336495             :      virtual void apply(SgConditionalExp *&r, const SgName &n, bool traverse) = 0;
  336496             :      virtual void apply(SgNewExp *&r, const SgName &n, bool traverse) = 0;
  336497             :      virtual void apply(SgDeleteExp *&r, const SgName &n, bool traverse) = 0;
  336498             :      virtual void apply(SgThisExp *&r, const SgName &n, bool traverse) = 0;
  336499             :      virtual void apply(SgSuperExp *&r, const SgName &n, bool traverse) = 0;
  336500             :      virtual void apply(SgClassExp *&r, const SgName &n, bool traverse) = 0;
  336501             :      virtual void apply(SgRefExp *&r, const SgName &n, bool traverse) = 0;
  336502             :      virtual void apply(SgAggregateInitializer *&r, const SgName &n, bool traverse) = 0;
  336503             :      virtual void apply(SgCompoundInitializer *&r, const SgName &n, bool traverse) = 0;
  336504             :      virtual void apply(SgConstructorInitializer *&r, const SgName &n, bool traverse) = 0;
  336505             :      virtual void apply(SgAssignInitializer *&r, const SgName &n, bool traverse) = 0;
  336506             :      virtual void apply(SgBracedInitializer *&r, const SgName &n, bool traverse) = 0;
  336507             :      virtual void apply(SgExpressionRoot *&r, const SgName &n, bool traverse) = 0;
  336508             :      virtual void apply(SgMinusOp *&r, const SgName &n, bool traverse) = 0;
  336509             :      virtual void apply(SgUnaryAddOp *&r, const SgName &n, bool traverse) = 0;
  336510             :      virtual void apply(SgNotOp *&r, const SgName &n, bool traverse) = 0;
  336511             :      virtual void apply(SgPointerDerefExp *&r, const SgName &n, bool traverse) = 0;
  336512             :      virtual void apply(SgAddressOfOp *&r, const SgName &n, bool traverse) = 0;
  336513             :      virtual void apply(SgMinusMinusOp *&r, const SgName &n, bool traverse) = 0;
  336514             :      virtual void apply(SgPlusPlusOp *&r, const SgName &n, bool traverse) = 0;
  336515             :      virtual void apply(SgBitComplementOp *&r, const SgName &n, bool traverse) = 0;
  336516             :      virtual void apply(SgRealPartOp *&r, const SgName &n, bool traverse) = 0;
  336517             :      virtual void apply(SgImagPartOp *&r, const SgName &n, bool traverse) = 0;
  336518             :      virtual void apply(SgConjugateOp *&r, const SgName &n, bool traverse) = 0;
  336519             :      virtual void apply(SgCastExp *&r, const SgName &n, bool traverse) = 0;
  336520             :      virtual void apply(SgThrowOp *&r, const SgName &n, bool traverse) = 0;
  336521             :      virtual void apply(SgArrowExp *&r, const SgName &n, bool traverse) = 0;
  336522             :      virtual void apply(SgDotExp *&r, const SgName &n, bool traverse) = 0;
  336523             :      virtual void apply(SgDotStarOp *&r, const SgName &n, bool traverse) = 0;
  336524             :      virtual void apply(SgArrowStarOp *&r, const SgName &n, bool traverse) = 0;
  336525             :      virtual void apply(SgEqualityOp *&r, const SgName &n, bool traverse) = 0;
  336526             :      virtual void apply(SgLessThanOp *&r, const SgName &n, bool traverse) = 0;
  336527             :      virtual void apply(SgGreaterThanOp *&r, const SgName &n, bool traverse) = 0;
  336528             :      virtual void apply(SgNotEqualOp *&r, const SgName &n, bool traverse) = 0;
  336529             :      virtual void apply(SgLessOrEqualOp *&r, const SgName &n, bool traverse) = 0;
  336530             :      virtual void apply(SgGreaterOrEqualOp *&r, const SgName &n, bool traverse) = 0;
  336531             :      virtual void apply(SgAddOp *&r, const SgName &n, bool traverse) = 0;
  336532             :      virtual void apply(SgSubtractOp *&r, const SgName &n, bool traverse) = 0;
  336533             :      virtual void apply(SgMultiplyOp *&r, const SgName &n, bool traverse) = 0;
  336534             :      virtual void apply(SgDivideOp *&r, const SgName &n, bool traverse) = 0;
  336535             :      virtual void apply(SgIntegerDivideOp *&r, const SgName &n, bool traverse) = 0;
  336536             :      virtual void apply(SgModOp *&r, const SgName &n, bool traverse) = 0;
  336537             :      virtual void apply(SgAndOp *&r, const SgName &n, bool traverse) = 0;
  336538             :      virtual void apply(SgOrOp *&r, const SgName &n, bool traverse) = 0;
  336539             :      virtual void apply(SgBitXorOp *&r, const SgName &n, bool traverse) = 0;
  336540             :      virtual void apply(SgBitAndOp *&r, const SgName &n, bool traverse) = 0;
  336541             :      virtual void apply(SgBitOrOp *&r, const SgName &n, bool traverse) = 0;
  336542             :      virtual void apply(SgBitEqvOp *&r, const SgName &n, bool traverse) = 0;
  336543             :      virtual void apply(SgCommaOpExp *&r, const SgName &n, bool traverse) = 0;
  336544             :      virtual void apply(SgLshiftOp *&r, const SgName &n, bool traverse) = 0;
  336545             :      virtual void apply(SgRshiftOp *&r, const SgName &n, bool traverse) = 0;
  336546             :      virtual void apply(SgPntrArrRefExp *&r, const SgName &n, bool traverse) = 0;
  336547             :      virtual void apply(SgScopeOp *&r, const SgName &n, bool traverse) = 0;
  336548             :      virtual void apply(SgAssignOp *&r, const SgName &n, bool traverse) = 0;
  336549             :      virtual void apply(SgPlusAssignOp *&r, const SgName &n, bool traverse) = 0;
  336550             :      virtual void apply(SgMinusAssignOp *&r, const SgName &n, bool traverse) = 0;
  336551             :      virtual void apply(SgAndAssignOp *&r, const SgName &n, bool traverse) = 0;
  336552             :      virtual void apply(SgIorAssignOp *&r, const SgName &n, bool traverse) = 0;
  336553             :      virtual void apply(SgMultAssignOp *&r, const SgName &n, bool traverse) = 0;
  336554             :      virtual void apply(SgDivAssignOp *&r, const SgName &n, bool traverse) = 0;
  336555             :      virtual void apply(SgModAssignOp *&r, const SgName &n, bool traverse) = 0;
  336556             :      virtual void apply(SgXorAssignOp *&r, const SgName &n, bool traverse) = 0;
  336557             :      virtual void apply(SgLshiftAssignOp *&r, const SgName &n, bool traverse) = 0;
  336558             :      virtual void apply(SgRshiftAssignOp *&r, const SgName &n, bool traverse) = 0;
  336559             :      virtual void apply(SgIntegerDivideAssignOp *&r, const SgName &n, bool traverse) = 0;
  336560             :      virtual void apply(SgExponentiationAssignOp *&r, const SgName &n, bool traverse) = 0;
  336561             :      virtual void apply(SgConcatenationOp *&r, const SgName &n, bool traverse) = 0;
  336562             :      virtual void apply(SgNaryComparisonOp *&r, const SgName &n, bool traverse) = 0;
  336563             :      virtual void apply(SgNaryBooleanOp *&r, const SgName &n, bool traverse) = 0;
  336564             :      virtual void apply(SgBoolValExp *&r, const SgName &n, bool traverse) = 0;
  336565             :      virtual void apply(SgStringVal *&r, const SgName &n, bool traverse) = 0;
  336566             :      virtual void apply(SgShortVal *&r, const SgName &n, bool traverse) = 0;
  336567             :      virtual void apply(SgCharVal *&r, const SgName &n, bool traverse) = 0;
  336568             :      virtual void apply(SgUnsignedCharVal *&r, const SgName &n, bool traverse) = 0;
  336569             :      virtual void apply(SgWcharVal *&r, const SgName &n, bool traverse) = 0;
  336570             :      virtual void apply(SgChar16Val *&r, const SgName &n, bool traverse) = 0;
  336571             :      virtual void apply(SgChar32Val *&r, const SgName &n, bool traverse) = 0;
  336572             :      virtual void apply(SgUnsignedShortVal *&r, const SgName &n, bool traverse) = 0;
  336573             :      virtual void apply(SgIntVal *&r, const SgName &n, bool traverse) = 0;
  336574             :      virtual void apply(SgEnumVal *&r, const SgName &n, bool traverse) = 0;
  336575             :      virtual void apply(SgUnsignedIntVal *&r, const SgName &n, bool traverse) = 0;
  336576             :      virtual void apply(SgLongIntVal *&r, const SgName &n, bool traverse) = 0;
  336577             :      virtual void apply(SgLongLongIntVal *&r, const SgName &n, bool traverse) = 0;
  336578             :      virtual void apply(SgUnsignedLongLongIntVal *&r, const SgName &n, bool traverse) = 0;
  336579             :      virtual void apply(SgUnsignedLongVal *&r, const SgName &n, bool traverse) = 0;
  336580             :      virtual void apply(SgFloatVal *&r, const SgName &n, bool traverse) = 0;
  336581             :      virtual void apply(SgDoubleVal *&r, const SgName &n, bool traverse) = 0;
  336582             :      virtual void apply(SgLongDoubleVal *&r, const SgName &n, bool traverse) = 0;
  336583             :      virtual void apply(SgFloat80Val *&r, const SgName &n, bool traverse) = 0;
  336584             :      virtual void apply(SgFloat128Val *&r, const SgName &n, bool traverse) = 0;
  336585             :      virtual void apply(SgNullptrValExp *&r, const SgName &n, bool traverse) = 0;
  336586             :      virtual void apply(SgVoidVal *&r, const SgName &n, bool traverse) = 0;
  336587             :      virtual void apply(SgFunctionParameterRefExp *&r, const SgName &n, bool traverse) = 0;
  336588             :      virtual void apply(SgTemplateParameterVal *&r, const SgName &n, bool traverse) = 0;
  336589             :      virtual void apply(SgUpcThreads *&r, const SgName &n, bool traverse) = 0;
  336590             :      virtual void apply(SgUpcMythread *&r, const SgName &n, bool traverse) = 0;
  336591             :      virtual void apply(SgComplexVal *&r, const SgName &n, bool traverse) = 0;
  336592             :      virtual void apply(SgNullExpression *&r, const SgName &n, bool traverse) = 0;
  336593             :      virtual void apply(SgVariantExpression *&r, const SgName &n, bool traverse) = 0;
  336594             :      virtual void apply(SgStatementExpression *&r, const SgName &n, bool traverse) = 0;
  336595             :      virtual void apply(SgAsmOp *&r, const SgName &n, bool traverse) = 0;
  336596             :      virtual void apply(SgCudaKernelExecConfig *&r, const SgName &n, bool traverse) = 0;
  336597             :      virtual void apply(SgCudaKernelCallExp *&r, const SgName &n, bool traverse) = 0;
  336598             :      virtual void apply(SgLambdaRefExp *&r, const SgName &n, bool traverse) = 0;
  336599             :      virtual void apply(SgTupleExp *&r, const SgName &n, bool traverse) = 0;
  336600             :      virtual void apply(SgListExp *&r, const SgName &n, bool traverse) = 0;
  336601             :      virtual void apply(SgDictionaryExp *&r, const SgName &n, bool traverse) = 0;
  336602             :      virtual void apply(SgKeyDatumPair *&r, const SgName &n, bool traverse) = 0;
  336603             :      virtual void apply(SgComprehension *&r, const SgName &n, bool traverse) = 0;
  336604             :      virtual void apply(SgListComprehension *&r, const SgName &n, bool traverse) = 0;
  336605             :      virtual void apply(SgSetComprehension *&r, const SgName &n, bool traverse) = 0;
  336606             :      virtual void apply(SgDictionaryComprehension *&r, const SgName &n, bool traverse) = 0;
  336607             :      virtual void apply(SgMembershipOp *&r, const SgName &n, bool traverse) = 0;
  336608             :      virtual void apply(SgNonMembershipOp *&r, const SgName &n, bool traverse) = 0;
  336609             :      virtual void apply(SgIsOp *&r, const SgName &n, bool traverse) = 0;
  336610             :      virtual void apply(SgIsNotOp *&r, const SgName &n, bool traverse) = 0;
  336611             :      virtual void apply(SgStringConversion *&r, const SgName &n, bool traverse) = 0;
  336612             :      virtual void apply(SgYieldExpression *&r, const SgName &n, bool traverse) = 0;
  336613             :      virtual void apply(SgFoldExpression *&r, const SgName &n, bool traverse) = 0;
  336614             :      virtual void apply(SgChooseExpression *&r, const SgName &n, bool traverse) = 0;
  336615             :      virtual void apply(SgAwaitExpression *&r, const SgName &n, bool traverse) = 0;
  336616             :      virtual void apply(SgSpaceshipOp *&r, const SgName &n, bool traverse) = 0;
  336617             :      virtual void apply(SgSubscriptExpression *&r, const SgName &n, bool traverse) = 0;
  336618             :      virtual void apply(SgColonShapeExp *&r, const SgName &n, bool traverse) = 0;
  336619             :      virtual void apply(SgAsteriskShapeExp *&r, const SgName &n, bool traverse) = 0;
  336620             :      virtual void apply(SgIOItemExpression *&r, const SgName &n, bool traverse) = 0;
  336621             :      virtual void apply(SgImpliedDo *&r, const SgName &n, bool traverse) = 0;
  336622             :      virtual void apply(SgExponentiationOp *&r, const SgName &n, bool traverse) = 0;
  336623             :      virtual void apply(SgUnknownArrayOrFunctionReference *&r, const SgName &n, bool traverse) = 0;
  336624             :      virtual void apply(SgActualArgumentExpression *&r, const SgName &n, bool traverse) = 0;
  336625             :      virtual void apply(SgUserDefinedBinaryOp *&r, const SgName &n, bool traverse) = 0;
  336626             :      virtual void apply(SgPointerAssignOp *&r, const SgName &n, bool traverse) = 0;
  336627             :      virtual void apply(SgCAFCoExpression *&r, const SgName &n, bool traverse) = 0;
  336628             :      virtual void apply(SgDesignatedInitializer *&r, const SgName &n, bool traverse) = 0;
  336629             :      virtual void apply(SgMatrixExp *&r, const SgName &n, bool traverse) = 0;
  336630             :      virtual void apply(SgRangeExp *&r, const SgName &n, bool traverse) = 0;
  336631             :      virtual void apply(SgMagicColonExp *&r, const SgName &n, bool traverse) = 0;
  336632             :      virtual void apply(SgElementwiseMultiplyOp *&r, const SgName &n, bool traverse) = 0;
  336633             :      virtual void apply(SgPowerOp *&r, const SgName &n, bool traverse) = 0;
  336634             :      virtual void apply(SgElementwisePowerOp *&r, const SgName &n, bool traverse) = 0;
  336635             :      virtual void apply(SgElementwiseDivideOp *&r, const SgName &n, bool traverse) = 0;
  336636             :      virtual void apply(SgLeftDivideOp *&r, const SgName &n, bool traverse) = 0;
  336637             :      virtual void apply(SgElementwiseLeftDivideOp *&r, const SgName &n, bool traverse) = 0;
  336638             :      virtual void apply(SgElementwiseAddOp *&r, const SgName &n, bool traverse) = 0;
  336639             :      virtual void apply(SgElementwiseSubtractOp *&r, const SgName &n, bool traverse) = 0;
  336640             :      virtual void apply(SgMatrixTransposeOp *&r, const SgName &n, bool traverse) = 0;
  336641             :      virtual void apply(SgElementwiseOp *&r, const SgName &n, bool traverse) = 0;
  336642             :      virtual void apply(SgInitializer *&r, const SgName &n, bool traverse) = 0;
  336643             :      virtual void apply(SgSIMDLoad *&r, const SgName &n, bool traverse) = 0;
  336644             :      virtual void apply(SgSIMDBroadcast *&r, const SgName &n, bool traverse) = 0;
  336645             :      virtual void apply(SgSIMDStore *&r, const SgName &n, bool traverse) = 0;
  336646             :      virtual void apply(SgSIMDPartialStore *&r, const SgName &n, bool traverse) = 0;
  336647             :      virtual void apply(SgSIMDScalarStore *&r, const SgName &n, bool traverse) = 0;
  336648             :      virtual void apply(SgSIMDGather *&r, const SgName &n, bool traverse) = 0;
  336649             :      virtual void apply(SgSIMDExplicitGather *&r, const SgName &n, bool traverse) = 0;
  336650             :      virtual void apply(SgSIMDScatter *&r, const SgName &n, bool traverse) = 0;
  336651             :      virtual void apply(SgSIMDAddOp *&r, const SgName &n, bool traverse) = 0;
  336652             :      virtual void apply(SgSIMDSubOp *&r, const SgName &n, bool traverse) = 0;
  336653             :      virtual void apply(SgSIMDMulOp *&r, const SgName &n, bool traverse) = 0;
  336654             :      virtual void apply(SgSIMDDivOp *&r, const SgName &n, bool traverse) = 0;
  336655             :      virtual void apply(SgSIMDFmaOp *&r, const SgName &n, bool traverse) = 0;
  336656             :      virtual void apply(SgSIMDBinaryOp *&r, const SgName &n, bool traverse) = 0;
  336657             :      virtual void apply(SgUserDefinedUnaryOp *&r, const SgName &n, bool traverse) = 0;
  336658             :      virtual void apply(SgPseudoDestructorRefExp *&r, const SgName &n, bool traverse) = 0;
  336659             :      virtual void apply(SgUnaryOp *&r, const SgName &n, bool traverse) = 0;
  336660             :      virtual void apply(SgCompoundAssignOp *&r, const SgName &n, bool traverse) = 0;
  336661             :      virtual void apply(SgBinaryOp *&r, const SgName &n, bool traverse) = 0;
  336662             :      virtual void apply(SgNaryOp *&r, const SgName &n, bool traverse) = 0;
  336663             :      virtual void apply(SgValueExp *&r, const SgName &n, bool traverse) = 0;
  336664             :      virtual void apply(SgExprListExp *&r, const SgName &n, bool traverse) = 0;
  336665             :      virtual void apply(SgFunctionCallExp *&r, const SgName &n, bool traverse) = 0;
  336666             :      virtual void apply(SgCallExpression *&r, const SgName &n, bool traverse) = 0;
  336667             :      virtual void apply(SgTypeTraitBuiltinOperator *&r, const SgName &n, bool traverse) = 0;
  336668             :      virtual void apply(SgExpression *&r, const SgName &n, bool traverse) = 0;
  336669             :      virtual void apply(SgTemplateVariableSymbol *&r, const SgName &n, bool traverse) = 0;
  336670             :      virtual void apply(SgVariableSymbol *&r, const SgName &n, bool traverse) = 0;
  336671             :      virtual void apply(SgFunctionTypeSymbol *&r, const SgName &n, bool traverse) = 0;
  336672             :      virtual void apply(SgTemplateClassSymbol *&r, const SgName &n, bool traverse) = 0;
  336673             :      virtual void apply(SgClassSymbol *&r, const SgName &n, bool traverse) = 0;
  336674             :      virtual void apply(SgTemplateSymbol *&r, const SgName &n, bool traverse) = 0;
  336675             :      virtual void apply(SgEnumSymbol *&r, const SgName &n, bool traverse) = 0;
  336676             :      virtual void apply(SgEnumFieldSymbol *&r, const SgName &n, bool traverse) = 0;
  336677             :      virtual void apply(SgTemplateTypedefSymbol *&r, const SgName &n, bool traverse) = 0;
  336678             :      virtual void apply(SgTypedefSymbol *&r, const SgName &n, bool traverse) = 0;
  336679             :      virtual void apply(SgTemplateFunctionSymbol *&r, const SgName &n, bool traverse) = 0;
  336680             :      virtual void apply(SgTemplateMemberFunctionSymbol *&r, const SgName &n, bool traverse) = 0;
  336681             :      virtual void apply(SgLabelSymbol *&r, const SgName &n, bool traverse) = 0;
  336682             :      virtual void apply(SgDefaultSymbol *&r, const SgName &n, bool traverse) = 0;
  336683             :      virtual void apply(SgNamespaceSymbol *&r, const SgName &n, bool traverse) = 0;
  336684             :      virtual void apply(SgIntrinsicSymbol *&r, const SgName &n, bool traverse) = 0;
  336685             :      virtual void apply(SgModuleSymbol *&r, const SgName &n, bool traverse) = 0;
  336686             :      virtual void apply(SgInterfaceSymbol *&r, const SgName &n, bool traverse) = 0;
  336687             :      virtual void apply(SgCommonSymbol *&r, const SgName &n, bool traverse) = 0;
  336688             :      virtual void apply(SgRenameSymbol *&r, const SgName &n, bool traverse) = 0;
  336689             :      virtual void apply(SgMemberFunctionSymbol *&r, const SgName &n, bool traverse) = 0;
  336690             :      virtual void apply(SgFunctionSymbol *&r, const SgName &n, bool traverse) = 0;
  336691             :      virtual void apply(SgAliasSymbol *&r, const SgName &n, bool traverse) = 0;
  336692             :      virtual void apply(SgNonrealSymbol *&r, const SgName &n, bool traverse) = 0;
  336693             :      virtual void apply(SgSymbol *&r, const SgName &n, bool traverse) = 0;
  336694             :      virtual void apply(SgCommonBlockObject *&r, const SgName &n, bool traverse) = 0;
  336695             :      virtual void apply(SgInitializedName *&r, const SgName &n, bool traverse) = 0;
  336696             :      virtual void apply(SgLambdaCapture *&r, const SgName &n, bool traverse) = 0;
  336697             :      virtual void apply(SgLambdaCaptureList *&r, const SgName &n, bool traverse) = 0;
  336698             :      virtual void apply(SgOmpOrderedClause *&r, const SgName &n, bool traverse) = 0;
  336699             :      virtual void apply(SgOmpNowaitClause *&r, const SgName &n, bool traverse) = 0;
  336700             :      virtual void apply(SgOmpNogroupClause *&r, const SgName &n, bool traverse) = 0;
  336701             :      virtual void apply(SgOmpReadClause *&r, const SgName &n, bool traverse) = 0;
  336702             :      virtual void apply(SgOmpThreadsClause *&r, const SgName &n, bool traverse) = 0;
  336703             :      virtual void apply(SgOmpSimdClause *&r, const SgName &n, bool traverse) = 0;
  336704             :      virtual void apply(SgOmpReverseOffloadClause *&r, const SgName &n, bool traverse) = 0;
  336705             :      virtual void apply(SgOmpExtImplementationDefinedRequirementClause *&r, const SgName &n, bool traverse) = 0;
  336706             :      virtual void apply(SgOmpUnifiedAddressClause *&r, const SgName &n, bool traverse) = 0;
  336707             :      virtual void apply(SgOmpUnifiedSharedMemoryClause *&r, const SgName &n, bool traverse) = 0;
  336708             :      virtual void apply(SgOmpDynamicAllocatorsClause *&r, const SgName &n, bool traverse) = 0;
  336709             :      virtual void apply(SgOmpAtomicDefaultMemOrderClause *&r, const SgName &n, bool traverse) = 0;
  336710             :      virtual void apply(SgOmpWriteClause *&r, const SgName &n, bool traverse) = 0;
  336711             :      virtual void apply(SgOmpUpdateClause *&r, const SgName &n, bool traverse) = 0;
  336712             :      virtual void apply(SgOmpDepobjUpdateClause *&r, const SgName &n, bool traverse) = 0;
  336713             :      virtual void apply(SgOmpDestroyClause *&r, const SgName &n, bool traverse) = 0;
  336714             :      virtual void apply(SgOmpCaptureClause *&r, const SgName &n, bool traverse) = 0;
  336715             :      virtual void apply(SgOmpSeqCstClause *&r, const SgName &n, bool traverse) = 0;
  336716             :      virtual void apply(SgOmpAcqRelClause *&r, const SgName &n, bool traverse) = 0;
  336717             :      virtual void apply(SgOmpReleaseClause *&r, const SgName &n, bool traverse) = 0;
  336718             :      virtual void apply(SgOmpAcquireClause *&r, const SgName &n, bool traverse) = 0;
  336719             :      virtual void apply(SgOmpRelaxedClause *&r, const SgName &n, bool traverse) = 0;
  336720             :      virtual void apply(SgOmpParallelClause *&r, const SgName &n, bool traverse) = 0;
  336721             :      virtual void apply(SgOmpSectionsClause *&r, const SgName &n, bool traverse) = 0;
  336722             :      virtual void apply(SgOmpForClause *&r, const SgName &n, bool traverse) = 0;
  336723             :      virtual void apply(SgOmpTaskgroupClause *&r, const SgName &n, bool traverse) = 0;
  336724             :      virtual void apply(SgOmpBeginClause *&r, const SgName &n, bool traverse) = 0;
  336725             :      virtual void apply(SgOmpEndClause *&r, const SgName &n, bool traverse) = 0;
  336726             :      virtual void apply(SgOmpUntiedClause *&r, const SgName &n, bool traverse) = 0;
  336727             :      virtual void apply(SgOmpMergeableClause *&r, const SgName &n, bool traverse) = 0;
  336728             :      virtual void apply(SgOmpDefaultClause *&r, const SgName &n, bool traverse) = 0;
  336729             :      virtual void apply(SgOmpAtomicClause *&r, const SgName &n, bool traverse) = 0;
  336730             :      virtual void apply(SgOmpProcBindClause *&r, const SgName &n, bool traverse) = 0;
  336731             :      virtual void apply(SgOmpOrderClause *&r, const SgName &n, bool traverse) = 0;
  336732             :      virtual void apply(SgOmpBindClause *&r, const SgName &n, bool traverse) = 0;
  336733             :      virtual void apply(SgOmpInbranchClause *&r, const SgName &n, bool traverse) = 0;
  336734             :      virtual void apply(SgOmpNotinbranchClause *&r, const SgName &n, bool traverse) = 0;
  336735             :      virtual void apply(SgOmpCollapseClause *&r, const SgName &n, bool traverse) = 0;
  336736             :      virtual void apply(SgOmpIfClause *&r, const SgName &n, bool traverse) = 0;
  336737             :      virtual void apply(SgOmpFinalClause *&r, const SgName &n, bool traverse) = 0;
  336738             :      virtual void apply(SgOmpPriorityClause *&r, const SgName &n, bool traverse) = 0;
  336739             :      virtual void apply(SgUpirNumUnitsField *&r, const SgName &n, bool traverse) = 0;
  336740             :      virtual void apply(SgOmpNumTeamsClause *&r, const SgName &n, bool traverse) = 0;
  336741             :      virtual void apply(SgOmpGrainsizeClause *&r, const SgName &n, bool traverse) = 0;
  336742             :      virtual void apply(SgOmpDetachClause *&r, const SgName &n, bool traverse) = 0;
  336743             :      virtual void apply(SgOmpNumTasksClause *&r, const SgName &n, bool traverse) = 0;
  336744             :      virtual void apply(SgOmpHintClause *&r, const SgName &n, bool traverse) = 0;
  336745             :      virtual void apply(SgOmpThreadLimitClause *&r, const SgName &n, bool traverse) = 0;
  336746             :      virtual void apply(SgOmpNontemporalClause *&r, const SgName &n, bool traverse) = 0;
  336747             :      virtual void apply(SgOmpInclusiveClause *&r, const SgName &n, bool traverse) = 0;
  336748             :      virtual void apply(SgOmpExclusiveClause *&r, const SgName &n, bool traverse) = 0;
  336749             :      virtual void apply(SgOmpIsDevicePtrClause *&r, const SgName &n, bool traverse) = 0;
  336750             :      virtual void apply(SgOmpUseDevicePtrClause *&r, const SgName &n, bool traverse) = 0;
  336751             :      virtual void apply(SgOmpUseDeviceAddrClause *&r, const SgName &n, bool traverse) = 0;
  336752             :      virtual void apply(SgOmpDeviceClause *&r, const SgName &n, bool traverse) = 0;
  336753             :      virtual void apply(SgOmpSafelenClause *&r, const SgName &n, bool traverse) = 0;
  336754             :      virtual void apply(SgOmpSimdlenClause *&r, const SgName &n, bool traverse) = 0;
  336755             :      virtual void apply(SgOmpPartialClause *&r, const SgName &n, bool traverse) = 0;
  336756             :      virtual void apply(SgOmpFullClause *&r, const SgName &n, bool traverse) = 0;
  336757             :      virtual void apply(SgOmpSizesClause *&r, const SgName &n, bool traverse) = 0;
  336758             :      virtual void apply(SgUpirBranchField *&r, const SgName &n, bool traverse) = 0;
  336759             :      virtual void apply(SgUpirNestedLevelField *&r, const SgName &n, bool traverse) = 0;
  336760             :      virtual void apply(SgUpirNestedParentField *&r, const SgName &n, bool traverse) = 0;
  336761             :      virtual void apply(SgUpirNestedChildField *&r, const SgName &n, bool traverse) = 0;
  336762             :      virtual void apply(SgUpirSyncField *&r, const SgName &n, bool traverse) = 0;
  336763             :      virtual void apply(SgUpirDataField *&r, const SgName &n, bool traverse) = 0;
  336764             :      virtual void apply(SgUpirTargetField *&r, const SgName &n, bool traverse) = 0;
  336765             :      virtual void apply(SgUpirDataItemField *&r, const SgName &n, bool traverse) = 0;
  336766             :      virtual void apply(SgOmpExpressionClause *&r, const SgName &n, bool traverse) = 0;
  336767             :      virtual void apply(SgOmpCopyprivateClause *&r, const SgName &n, bool traverse) = 0;
  336768             :      virtual void apply(SgOmpPrivateClause *&r, const SgName &n, bool traverse) = 0;
  336769             :      virtual void apply(SgOmpFirstprivateClause *&r, const SgName &n, bool traverse) = 0;
  336770             :      virtual void apply(SgOmpSharedClause *&r, const SgName &n, bool traverse) = 0;
  336771             :      virtual void apply(SgOmpCopyinClause *&r, const SgName &n, bool traverse) = 0;
  336772             :      virtual void apply(SgOmpLastprivateClause *&r, const SgName &n, bool traverse) = 0;
  336773             :      virtual void apply(SgOmpReductionClause *&r, const SgName &n, bool traverse) = 0;
  336774             :      virtual void apply(SgOmpInReductionClause *&r, const SgName &n, bool traverse) = 0;
  336775             :      virtual void apply(SgOmpTaskReductionClause *&r, const SgName &n, bool traverse) = 0;
  336776             :      virtual void apply(SgOmpAllocateClause *&r, const SgName &n, bool traverse) = 0;
  336777             :      virtual void apply(SgOmpDependClause *&r, const SgName &n, bool traverse) = 0;
  336778             :      virtual void apply(SgOmpToClause *&r, const SgName &n, bool traverse) = 0;
  336779             :      virtual void apply(SgOmpUsesAllocatorsClause *&r, const SgName &n, bool traverse) = 0;
  336780             :      virtual void apply(SgOmpFromClause *&r, const SgName &n, bool traverse) = 0;
  336781             :      virtual void apply(SgOmpAffinityClause *&r, const SgName &n, bool traverse) = 0;
  336782             :      virtual void apply(SgOmpMapClause *&r, const SgName &n, bool traverse) = 0;
  336783             :      virtual void apply(SgOmpLinearClause *&r, const SgName &n, bool traverse) = 0;
  336784             :      virtual void apply(SgOmpUniformClause *&r, const SgName &n, bool traverse) = 0;
  336785             :      virtual void apply(SgOmpAlignedClause *&r, const SgName &n, bool traverse) = 0;
  336786             :      virtual void apply(SgOmpVariablesClause *&r, const SgName &n, bool traverse) = 0;
  336787             :      virtual void apply(SgOmpScheduleClause *&r, const SgName &n, bool traverse) = 0;
  336788             :      virtual void apply(SgOmpWhenClause *&r, const SgName &n, bool traverse) = 0;
  336789             :      virtual void apply(SgOmpDistScheduleClause *&r, const SgName &n, bool traverse) = 0;
  336790             :      virtual void apply(SgOmpDefaultmapClause *&r, const SgName &n, bool traverse) = 0;
  336791             :      virtual void apply(SgOmpAllocatorClause *&r, const SgName &n, bool traverse) = 0;
  336792             :      virtual void apply(SgOmpUsesAllocatorsDefination *&r, const SgName &n, bool traverse) = 0;
  336793             :      virtual void apply(SgOmpClause *&r, const SgName &n, bool traverse) = 0;
  336794             :      virtual void apply(SgRenamePair *&r, const SgName &n, bool traverse) = 0;
  336795             :      virtual void apply(SgInterfaceBody *&r, const SgName &n, bool traverse) = 0;
  336796             :      virtual void apply(SgHeaderFileBody *&r, const SgName &n, bool traverse) = 0;
  336797             :      virtual void apply(SgLocatedNodeSupport *&r, const SgName &n, bool traverse) = 0;
  336798             :      virtual void apply(SgToken *&r, const SgName &n, bool traverse) = 0;
  336799             :      virtual void apply(SgLocatedNode *&r, const SgName &n, bool traverse) = 0;
  336800             :      virtual void apply(SgNode *&r, const SgName &n, bool traverse) = 0;
  336801             : 
  336802         343 :      virtual ~ReferenceToPointerHandler() {}
  336803             :    };
  336804             : 
  336805             : template <class ImplClass>
  336806         686 : struct ReferenceToPointerHandlerImpl : ReferenceToPointerHandler
  336807             :    {
  336808           0 :      void apply(SgName *&r, const SgName &n, bool traverse)
  336809             :         {
  336810           0 :           ROSE_ASSERT(this != NULL);
  336811           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336812           0 :         }
  336813             : 
  336814      379983 :      void apply(SgSymbolTable *&r, const SgName &n, bool traverse)
  336815             :         {
  336816      379983 :           ROSE_ASSERT(this != NULL);
  336817      379983 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336818      379983 :         }
  336819             : 
  336820      191752 :      void apply(SgPragma *&r, const SgName &n, bool traverse)
  336821             :         {
  336822      191752 :           ROSE_ASSERT(this != NULL);
  336823      191752 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336824      191752 :         }
  336825             : 
  336826      507201 :      void apply(SgModifierNodes *&r, const SgName &n, bool traverse)
  336827             :         {
  336828      507201 :           ROSE_ASSERT(this != NULL);
  336829      507201 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336830      507201 :         }
  336831             : 
  336832           0 :      void apply(SgConstVolatileModifier *&r, const SgName &n, bool traverse)
  336833             :         {
  336834           0 :           ROSE_ASSERT(this != NULL);
  336835           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336836           0 :         }
  336837             : 
  336838     6480440 :      void apply(SgStorageModifier *&r, const SgName &n, bool traverse)
  336839             :         {
  336840     6480440 :           ROSE_ASSERT(this != NULL);
  336841     6480440 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336842     6480440 :         }
  336843             : 
  336844           0 :      void apply(SgAccessModifier *&r, const SgName &n, bool traverse)
  336845             :         {
  336846           0 :           ROSE_ASSERT(this != NULL);
  336847           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336848           0 :         }
  336849             : 
  336850           0 :      void apply(SgFunctionModifier *&r, const SgName &n, bool traverse)
  336851             :         {
  336852           0 :           ROSE_ASSERT(this != NULL);
  336853           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336854           0 :         }
  336855             : 
  336856           0 :      void apply(SgUPC_AccessModifier *&r, const SgName &n, bool traverse)
  336857             :         {
  336858           0 :           ROSE_ASSERT(this != NULL);
  336859           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336860           0 :         }
  336861             : 
  336862           0 :      void apply(SgLinkageModifier *&r, const SgName &n, bool traverse)
  336863             :         {
  336864           0 :           ROSE_ASSERT(this != NULL);
  336865           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336866           0 :         }
  336867             : 
  336868           0 :      void apply(SgSpecialFunctionModifier *&r, const SgName &n, bool traverse)
  336869             :         {
  336870           0 :           ROSE_ASSERT(this != NULL);
  336871           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336872           0 :         }
  336873             : 
  336874           0 :      void apply(SgTypeModifier *&r, const SgName &n, bool traverse)
  336875             :         {
  336876           0 :           ROSE_ASSERT(this != NULL);
  336877           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336878           0 :         }
  336879             : 
  336880           0 :      void apply(SgElaboratedTypeModifier *&r, const SgName &n, bool traverse)
  336881             :         {
  336882           0 :           ROSE_ASSERT(this != NULL);
  336883           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336884           0 :         }
  336885             : 
  336886        8205 :      void apply(SgBaseClassModifier *&r, const SgName &n, bool traverse)
  336887             :         {
  336888        8205 :           ROSE_ASSERT(this != NULL);
  336889        8205 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336890        8205 :         }
  336891             : 
  336892           0 :      void apply(SgDeclarationModifier *&r, const SgName &n, bool traverse)
  336893             :         {
  336894           0 :           ROSE_ASSERT(this != NULL);
  336895           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336896           0 :         }
  336897             : 
  336898           0 :      void apply(SgStructureModifier *&r, const SgName &n, bool traverse)
  336899             :         {
  336900           0 :           ROSE_ASSERT(this != NULL);
  336901           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336902           0 :         }
  336903             : 
  336904           0 :      void apply(SgOpenclAccessModeModifier *&r, const SgName &n, bool traverse)
  336905             :         {
  336906           0 :           ROSE_ASSERT(this != NULL);
  336907           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336908           0 :         }
  336909             : 
  336910           0 :      void apply(SgModifier *&r, const SgName &n, bool traverse)
  336911             :         {
  336912           0 :           ROSE_ASSERT(this != NULL);
  336913           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336914           0 :         }
  336915             : 
  336916    22772400 :      void apply(Sg_File_Info *&r, const SgName &n, bool traverse)
  336917             :         {
  336918    22772400 :           ROSE_ASSERT(this != NULL);
  336919    22772400 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336920    22772400 :         }
  336921             : 
  336922       42045 :      void apply(SgSourceFile *&r, const SgName &n, bool traverse)
  336923             :         {
  336924       42045 :           ROSE_ASSERT(this != NULL);
  336925       42045 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336926       42045 :         }
  336927             : 
  336928           0 :      void apply(SgUnknownFile *&r, const SgName &n, bool traverse)
  336929             :         {
  336930           0 :           ROSE_ASSERT(this != NULL);
  336931           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336932           0 :         }
  336933             : 
  336934         325 :      void apply(SgFile *&r, const SgName &n, bool traverse)
  336935             :         {
  336936         325 :           ROSE_ASSERT(this != NULL);
  336937         325 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336938         325 :         }
  336939             : 
  336940         326 :      void apply(SgFileList *&r, const SgName &n, bool traverse)
  336941             :         {
  336942         326 :           ROSE_ASSERT(this != NULL);
  336943         326 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336944         326 :         }
  336945             : 
  336946           0 :      void apply(SgDirectory *&r, const SgName &n, bool traverse)
  336947             :         {
  336948           0 :           ROSE_ASSERT(this != NULL);
  336949           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336950           0 :         }
  336951             : 
  336952         326 :      void apply(SgDirectoryList *&r, const SgName &n, bool traverse)
  336953             :         {
  336954         326 :           ROSE_ASSERT(this != NULL);
  336955         326 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336956         326 :         }
  336957             : 
  336958           0 :      void apply(SgProject *&r, const SgName &n, bool traverse)
  336959             :         {
  336960           0 :           ROSE_ASSERT(this != NULL);
  336961           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336962           0 :         }
  336963             : 
  336964           0 :      void apply(SgOptions *&r, const SgName &n, bool traverse)
  336965             :         {
  336966           0 :           ROSE_ASSERT(this != NULL);
  336967           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336968           0 :         }
  336969             : 
  336970           0 :      void apply(SgUnparse_Info *&r, const SgName &n, bool traverse)
  336971             :         {
  336972           0 :           ROSE_ASSERT(this != NULL);
  336973           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336974           0 :         }
  336975             : 
  336976       38018 :      void apply(SgIncludeFile *&r, const SgName &n, bool traverse)
  336977             :         {
  336978       38018 :           ROSE_ASSERT(this != NULL);
  336979       38018 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336980       38018 :         }
  336981             : 
  336982           0 :      void apply(SgFuncDecl_attr *&r, const SgName &n, bool traverse)
  336983             :         {
  336984           0 :           ROSE_ASSERT(this != NULL);
  336985           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336986           0 :         }
  336987             : 
  336988           0 :      void apply(SgClassDecl_attr *&r, const SgName &n, bool traverse)
  336989             :         {
  336990           0 :           ROSE_ASSERT(this != NULL);
  336991           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336992           0 :         }
  336993             : 
  336994      507201 :      void apply(SgTypedefSeq *&r, const SgName &n, bool traverse)
  336995             :         {
  336996      507201 :           ROSE_ASSERT(this != NULL);
  336997      507201 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  336998      507201 :         }
  336999             : 
  337000      271811 :      void apply(SgFunctionParameterTypeList *&r, const SgName &n, bool traverse)
  337001             :         {
  337002      271811 :           ROSE_ASSERT(this != NULL);
  337003      271811 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337004      271811 :         }
  337005             : 
  337006       52119 :      void apply(SgTemplateParameter *&r, const SgName &n, bool traverse)
  337007             :         {
  337008       52119 :           ROSE_ASSERT(this != NULL);
  337009       52119 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337010       52119 :         }
  337011             : 
  337012      260583 :      void apply(SgTemplateArgument *&r, const SgName &n, bool traverse)
  337013             :         {
  337014      260583 :           ROSE_ASSERT(this != NULL);
  337015      260583 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337016      260583 :         }
  337017             : 
  337018           0 :      void apply(SgTemplateParameterList *&r, const SgName &n, bool traverse)
  337019             :         {
  337020           0 :           ROSE_ASSERT(this != NULL);
  337021           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337022           0 :         }
  337023             : 
  337024           0 :      void apply(SgTemplateArgumentList *&r, const SgName &n, bool traverse)
  337025             :         {
  337026           0 :           ROSE_ASSERT(this != NULL);
  337027           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337028           0 :         }
  337029             : 
  337030           0 :      void apply(SgBitAttribute *&r, const SgName &n, bool traverse)
  337031             :         {
  337032           0 :           ROSE_ASSERT(this != NULL);
  337033           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337034           0 :         }
  337035             : 
  337036           0 :      void apply(SgAttribute *&r, const SgName &n, bool traverse)
  337037             :         {
  337038           0 :           ROSE_ASSERT(this != NULL);
  337039           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337040           0 :         }
  337041             : 
  337042           0 :      void apply(SgExpBaseClass *&r, const SgName &n, bool traverse)
  337043             :         {
  337044           0 :           ROSE_ASSERT(this != NULL);
  337045           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337046           0 :         }
  337047             : 
  337048           0 :      void apply(SgNonrealBaseClass *&r, const SgName &n, bool traverse)
  337049             :         {
  337050           0 :           ROSE_ASSERT(this != NULL);
  337051           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337052           0 :         }
  337053             : 
  337054       56328 :      void apply(SgBaseClass *&r, const SgName &n, bool traverse)
  337055             :         {
  337056       56328 :           ROSE_ASSERT(this != NULL);
  337057       56328 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337058       56328 :         }
  337059             : 
  337060           0 :      void apply(SgUndirectedGraphEdge *&r, const SgName &n, bool traverse)
  337061             :         {
  337062           0 :           ROSE_ASSERT(this != NULL);
  337063           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337064           0 :         }
  337065             : 
  337066           0 :      void apply(SgDirectedGraphEdge *&r, const SgName &n, bool traverse)
  337067             :         {
  337068           0 :           ROSE_ASSERT(this != NULL);
  337069           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337070           0 :         }
  337071             : 
  337072           0 :      void apply(SgGraphNode *&r, const SgName &n, bool traverse)
  337073             :         {
  337074           0 :           ROSE_ASSERT(this != NULL);
  337075           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337076           0 :         }
  337077             : 
  337078           0 :      void apply(SgGraphEdge *&r, const SgName &n, bool traverse)
  337079             :         {
  337080           0 :           ROSE_ASSERT(this != NULL);
  337081           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337082           0 :         }
  337083             : 
  337084           0 :      void apply(SgStringKeyedBidirectionalGraph *&r, const SgName &n, bool traverse)
  337085             :         {
  337086           0 :           ROSE_ASSERT(this != NULL);
  337087           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337088           0 :         }
  337089             : 
  337090           0 :      void apply(SgIntKeyedBidirectionalGraph *&r, const SgName &n, bool traverse)
  337091             :         {
  337092           0 :           ROSE_ASSERT(this != NULL);
  337093           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337094           0 :         }
  337095             : 
  337096           0 :      void apply(SgBidirectionalGraph *&r, const SgName &n, bool traverse)
  337097             :         {
  337098           0 :           ROSE_ASSERT(this != NULL);
  337099           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337100           0 :         }
  337101             : 
  337102           0 :      void apply(SgIncidenceDirectedGraph *&r, const SgName &n, bool traverse)
  337103             :         {
  337104           0 :           ROSE_ASSERT(this != NULL);
  337105           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337106           0 :         }
  337107             : 
  337108           0 :      void apply(SgIncidenceUndirectedGraph *&r, const SgName &n, bool traverse)
  337109             :         {
  337110           0 :           ROSE_ASSERT(this != NULL);
  337111           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337112           0 :         }
  337113             : 
  337114           0 :      void apply(SgGraph *&r, const SgName &n, bool traverse)
  337115             :         {
  337116           0 :           ROSE_ASSERT(this != NULL);
  337117           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337118           0 :         }
  337119             : 
  337120           0 :      void apply(SgGraphNodeList *&r, const SgName &n, bool traverse)
  337121             :         {
  337122           0 :           ROSE_ASSERT(this != NULL);
  337123           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337124           0 :         }
  337125             : 
  337126           0 :      void apply(SgGraphEdgeList *&r, const SgName &n, bool traverse)
  337127             :         {
  337128           0 :           ROSE_ASSERT(this != NULL);
  337129           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337130           0 :         }
  337131             : 
  337132           0 :      void apply(SgQualifiedName *&r, const SgName &n, bool traverse)
  337133             :         {
  337134           0 :           ROSE_ASSERT(this != NULL);
  337135           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337136           0 :         }
  337137             : 
  337138           0 :      void apply(SgNameGroup *&r, const SgName &n, bool traverse)
  337139             :         {
  337140           0 :           ROSE_ASSERT(this != NULL);
  337141           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337142           0 :         }
  337143             : 
  337144           0 :      void apply(SgDimensionObject *&r, const SgName &n, bool traverse)
  337145             :         {
  337146           0 :           ROSE_ASSERT(this != NULL);
  337147           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337148           0 :         }
  337149             : 
  337150           0 :      void apply(SgDataStatementGroup *&r, const SgName &n, bool traverse)
  337151             :         {
  337152           0 :           ROSE_ASSERT(this != NULL);
  337153           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337154           0 :         }
  337155             : 
  337156           0 :      void apply(SgDataStatementObject *&r, const SgName &n, bool traverse)
  337157             :         {
  337158           0 :           ROSE_ASSERT(this != NULL);
  337159           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337160           0 :         }
  337161             : 
  337162           0 :      void apply(SgDataStatementValue *&r, const SgName &n, bool traverse)
  337163             :         {
  337164           0 :           ROSE_ASSERT(this != NULL);
  337165           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337166           0 :         }
  337167             : 
  337168           0 :      void apply(SgFormatItem *&r, const SgName &n, bool traverse)
  337169             :         {
  337170           0 :           ROSE_ASSERT(this != NULL);
  337171           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337172           0 :         }
  337173             : 
  337174           0 :      void apply(SgFormatItemList *&r, const SgName &n, bool traverse)
  337175             :         {
  337176           0 :           ROSE_ASSERT(this != NULL);
  337177           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337178           0 :         }
  337179             : 
  337180      189677 :      void apply(SgTypeTable *&r, const SgName &n, bool traverse)
  337181             :         {
  337182      189677 :           ROSE_ASSERT(this != NULL);
  337183      189677 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337184      189677 :         }
  337185             : 
  337186       12002 :      void apply(SgHeaderFileReport *&r, const SgName &n, bool traverse)
  337187             :         {
  337188       12002 :           ROSE_ASSERT(this != NULL);
  337189       12002 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337190       12002 :         }
  337191             : 
  337192           0 :      void apply(SgSupport *&r, const SgName &n, bool traverse)
  337193             :         {
  337194           0 :           ROSE_ASSERT(this != NULL);
  337195           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337196           0 :         }
  337197             : 
  337198           0 :      void apply(SgTypeUnknown *&r, const SgName &n, bool traverse)
  337199             :         {
  337200           0 :           ROSE_ASSERT(this != NULL);
  337201           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337202           0 :         }
  337203             : 
  337204           0 :      void apply(SgTypeChar *&r, const SgName &n, bool traverse)
  337205             :         {
  337206           0 :           ROSE_ASSERT(this != NULL);
  337207           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337208           0 :         }
  337209             : 
  337210           0 :      void apply(SgTypeSignedChar *&r, const SgName &n, bool traverse)
  337211             :         {
  337212           0 :           ROSE_ASSERT(this != NULL);
  337213           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337214           0 :         }
  337215             : 
  337216           0 :      void apply(SgTypeUnsignedChar *&r, const SgName &n, bool traverse)
  337217             :         {
  337218           0 :           ROSE_ASSERT(this != NULL);
  337219           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337220           0 :         }
  337221             : 
  337222           0 :      void apply(SgTypeShort *&r, const SgName &n, bool traverse)
  337223             :         {
  337224           0 :           ROSE_ASSERT(this != NULL);
  337225           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337226           0 :         }
  337227             : 
  337228           0 :      void apply(SgTypeSignedShort *&r, const SgName &n, bool traverse)
  337229             :         {
  337230           0 :           ROSE_ASSERT(this != NULL);
  337231           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337232           0 :         }
  337233             : 
  337234           0 :      void apply(SgTypeUnsignedShort *&r, const SgName &n, bool traverse)
  337235             :         {
  337236           0 :           ROSE_ASSERT(this != NULL);
  337237           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337238           0 :         }
  337239             : 
  337240           0 :      void apply(SgTypeInt *&r, const SgName &n, bool traverse)
  337241             :         {
  337242           0 :           ROSE_ASSERT(this != NULL);
  337243           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337244           0 :         }
  337245             : 
  337246           0 :      void apply(SgTypeSignedInt *&r, const SgName &n, bool traverse)
  337247             :         {
  337248           0 :           ROSE_ASSERT(this != NULL);
  337249           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337250           0 :         }
  337251             : 
  337252           0 :      void apply(SgTypeUnsignedInt *&r, const SgName &n, bool traverse)
  337253             :         {
  337254           0 :           ROSE_ASSERT(this != NULL);
  337255           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337256           0 :         }
  337257             : 
  337258           0 :      void apply(SgTypeLong *&r, const SgName &n, bool traverse)
  337259             :         {
  337260           0 :           ROSE_ASSERT(this != NULL);
  337261           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337262           0 :         }
  337263             : 
  337264           0 :      void apply(SgTypeSignedLong *&r, const SgName &n, bool traverse)
  337265             :         {
  337266           0 :           ROSE_ASSERT(this != NULL);
  337267           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337268           0 :         }
  337269             : 
  337270           0 :      void apply(SgTypeUnsignedLong *&r, const SgName &n, bool traverse)
  337271             :         {
  337272           0 :           ROSE_ASSERT(this != NULL);
  337273           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337274           0 :         }
  337275             : 
  337276           0 :      void apply(SgTypeVoid *&r, const SgName &n, bool traverse)
  337277             :         {
  337278           0 :           ROSE_ASSERT(this != NULL);
  337279           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337280           0 :         }
  337281             : 
  337282           0 :      void apply(SgTypeGlobalVoid *&r, const SgName &n, bool traverse)
  337283             :         {
  337284           0 :           ROSE_ASSERT(this != NULL);
  337285           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337286           0 :         }
  337287             : 
  337288           0 :      void apply(SgTypeWchar *&r, const SgName &n, bool traverse)
  337289             :         {
  337290           0 :           ROSE_ASSERT(this != NULL);
  337291           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337292           0 :         }
  337293             : 
  337294           0 :      void apply(SgTypeFloat *&r, const SgName &n, bool traverse)
  337295             :         {
  337296           0 :           ROSE_ASSERT(this != NULL);
  337297           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337298           0 :         }
  337299             : 
  337300           0 :      void apply(SgTypeDouble *&r, const SgName &n, bool traverse)
  337301             :         {
  337302           0 :           ROSE_ASSERT(this != NULL);
  337303           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337304           0 :         }
  337305             : 
  337306           0 :      void apply(SgTypeLongLong *&r, const SgName &n, bool traverse)
  337307             :         {
  337308           0 :           ROSE_ASSERT(this != NULL);
  337309           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337310           0 :         }
  337311             : 
  337312           0 :      void apply(SgTypeSignedLongLong *&r, const SgName &n, bool traverse)
  337313             :         {
  337314           0 :           ROSE_ASSERT(this != NULL);
  337315           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337316           0 :         }
  337317             : 
  337318           0 :      void apply(SgTypeUnsignedLongLong *&r, const SgName &n, bool traverse)
  337319             :         {
  337320           0 :           ROSE_ASSERT(this != NULL);
  337321           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337322           0 :         }
  337323             : 
  337324           0 :      void apply(SgTypeLongDouble *&r, const SgName &n, bool traverse)
  337325             :         {
  337326           0 :           ROSE_ASSERT(this != NULL);
  337327           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337328           0 :         }
  337329             : 
  337330           0 :      void apply(SgTypeFloat80 *&r, const SgName &n, bool traverse)
  337331             :         {
  337332           0 :           ROSE_ASSERT(this != NULL);
  337333           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337334           0 :         }
  337335             : 
  337336           0 :      void apply(SgTypeFloat128 *&r, const SgName &n, bool traverse)
  337337             :         {
  337338           0 :           ROSE_ASSERT(this != NULL);
  337339           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337340           0 :         }
  337341             : 
  337342           0 :      void apply(SgTypeString *&r, const SgName &n, bool traverse)
  337343             :         {
  337344           0 :           ROSE_ASSERT(this != NULL);
  337345           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337346           0 :         }
  337347             : 
  337348           0 :      void apply(SgTypeBool *&r, const SgName &n, bool traverse)
  337349             :         {
  337350           0 :           ROSE_ASSERT(this != NULL);
  337351           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337352           0 :         }
  337353             : 
  337354           0 :      void apply(SgTypeFixed *&r, const SgName &n, bool traverse)
  337355             :         {
  337356           0 :           ROSE_ASSERT(this != NULL);
  337357           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337358           0 :         }
  337359             : 
  337360           0 :      void apply(SgTypeMatrix *&r, const SgName &n, bool traverse)
  337361             :         {
  337362           0 :           ROSE_ASSERT(this != NULL);
  337363           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337364           0 :         }
  337365             : 
  337366           0 :      void apply(SgTypeTuple *&r, const SgName &n, bool traverse)
  337367             :         {
  337368           0 :           ROSE_ASSERT(this != NULL);
  337369           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337370           0 :         }
  337371             : 
  337372           0 :      void apply(SgTypeNullptr *&r, const SgName &n, bool traverse)
  337373             :         {
  337374           0 :           ROSE_ASSERT(this != NULL);
  337375           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337376           0 :         }
  337377             : 
  337378           0 :      void apply(SgTypeComplex *&r, const SgName &n, bool traverse)
  337379             :         {
  337380           0 :           ROSE_ASSERT(this != NULL);
  337381           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337382           0 :         }
  337383             : 
  337384           0 :      void apply(SgTypeImaginary *&r, const SgName &n, bool traverse)
  337385             :         {
  337386           0 :           ROSE_ASSERT(this != NULL);
  337387           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337388           0 :         }
  337389             : 
  337390           0 :      void apply(SgTypeDefault *&r, const SgName &n, bool traverse)
  337391             :         {
  337392           0 :           ROSE_ASSERT(this != NULL);
  337393           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337394           0 :         }
  337395             : 
  337396           0 :      void apply(SgPointerMemberType *&r, const SgName &n, bool traverse)
  337397             :         {
  337398           0 :           ROSE_ASSERT(this != NULL);
  337399           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337400           0 :         }
  337401             : 
  337402      507201 :      void apply(SgReferenceType *&r, const SgName &n, bool traverse)
  337403             :         {
  337404      507201 :           ROSE_ASSERT(this != NULL);
  337405      507201 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337406      507201 :         }
  337407             : 
  337408      507201 :      void apply(SgRvalueReferenceType *&r, const SgName &n, bool traverse)
  337409             :         {
  337410      507201 :           ROSE_ASSERT(this != NULL);
  337411      507201 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337412      507201 :         }
  337413             : 
  337414      507201 :      void apply(SgDeclType *&r, const SgName &n, bool traverse)
  337415             :         {
  337416      507201 :           ROSE_ASSERT(this != NULL);
  337417      507201 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337418      507201 :         }
  337419             : 
  337420      507201 :      void apply(SgTypeOfType *&r, const SgName &n, bool traverse)
  337421             :         {
  337422      507201 :           ROSE_ASSERT(this != NULL);
  337423      507201 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337424      507201 :         }
  337425             : 
  337426           0 :      void apply(SgTypeCAFTeam *&r, const SgName &n, bool traverse)
  337427             :         {
  337428           0 :           ROSE_ASSERT(this != NULL);
  337429           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337430           0 :         }
  337431             : 
  337432           0 :      void apply(SgTypeUnsigned128bitInteger *&r, const SgName &n, bool traverse)
  337433             :         {
  337434           0 :           ROSE_ASSERT(this != NULL);
  337435           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337436           0 :         }
  337437             : 
  337438           0 :      void apply(SgTypeSigned128bitInteger *&r, const SgName &n, bool traverse)
  337439             :         {
  337440           0 :           ROSE_ASSERT(this != NULL);
  337441           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337442           0 :         }
  337443             : 
  337444           0 :      void apply(SgTypeLabel *&r, const SgName &n, bool traverse)
  337445             :         {
  337446           0 :           ROSE_ASSERT(this != NULL);
  337447           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337448           0 :         }
  337449             : 
  337450           0 :      void apply(SgTemplateType *&r, const SgName &n, bool traverse)
  337451             :         {
  337452           0 :           ROSE_ASSERT(this != NULL);
  337453           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337454           0 :         }
  337455             : 
  337456        3492 :      void apply(SgEnumType *&r, const SgName &n, bool traverse)
  337457             :         {
  337458        3492 :           ROSE_ASSERT(this != NULL);
  337459        3492 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337460        3492 :         }
  337461             : 
  337462       63863 :      void apply(SgTypedefType *&r, const SgName &n, bool traverse)
  337463             :         {
  337464       63863 :           ROSE_ASSERT(this != NULL);
  337465       63863 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337466       63863 :         }
  337467             : 
  337468       69644 :      void apply(SgNonrealType *&r, const SgName &n, bool traverse)
  337469             :         {
  337470       69644 :           ROSE_ASSERT(this != NULL);
  337471       69644 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337472       69644 :         }
  337473             : 
  337474           0 :      void apply(SgAutoType *&r, const SgName &n, bool traverse)
  337475             :         {
  337476           0 :           ROSE_ASSERT(this != NULL);
  337477           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337478           0 :         }
  337479             : 
  337480           0 :      void apply(SgModifierType *&r, const SgName &n, bool traverse)
  337481             :         {
  337482           0 :           ROSE_ASSERT(this != NULL);
  337483           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337484           0 :         }
  337485             : 
  337486           0 :      void apply(SgPartialFunctionModifierType *&r, const SgName &n, bool traverse)
  337487             :         {
  337488           0 :           ROSE_ASSERT(this != NULL);
  337489           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337490           0 :         }
  337491             : 
  337492           0 :      void apply(SgArrayType *&r, const SgName &n, bool traverse)
  337493             :         {
  337494           0 :           ROSE_ASSERT(this != NULL);
  337495           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337496           0 :         }
  337497             : 
  337498           0 :      void apply(SgTypeEllipse *&r, const SgName &n, bool traverse)
  337499             :         {
  337500           0 :           ROSE_ASSERT(this != NULL);
  337501           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337502           0 :         }
  337503             : 
  337504           0 :      void apply(SgTypeCrayPointer *&r, const SgName &n, bool traverse)
  337505             :         {
  337506           0 :           ROSE_ASSERT(this != NULL);
  337507           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337508           0 :         }
  337509             : 
  337510           0 :      void apply(SgPartialFunctionType *&r, const SgName &n, bool traverse)
  337511             :         {
  337512           0 :           ROSE_ASSERT(this != NULL);
  337513           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337514           0 :         }
  337515             : 
  337516           0 :      void apply(SgMemberFunctionType *&r, const SgName &n, bool traverse)
  337517             :         {
  337518           0 :           ROSE_ASSERT(this != NULL);
  337519           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337520           0 :         }
  337521             : 
  337522     2450440 :      void apply(SgFunctionType *&r, const SgName &n, bool traverse)
  337523             :         {
  337524     2450440 :           ROSE_ASSERT(this != NULL);
  337525     2450440 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337526     2450440 :         }
  337527             : 
  337528      507201 :      void apply(SgPointerType *&r, const SgName &n, bool traverse)
  337529             :         {
  337530      507201 :           ROSE_ASSERT(this != NULL);
  337531      507201 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337532      507201 :         }
  337533             : 
  337534       48123 :      void apply(SgClassType *&r, const SgName &n, bool traverse)
  337535             :         {
  337536       48123 :           ROSE_ASSERT(this != NULL);
  337537       48123 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337538       48123 :         }
  337539             : 
  337540           0 :      void apply(SgNamedType *&r, const SgName &n, bool traverse)
  337541             :         {
  337542           0 :           ROSE_ASSERT(this != NULL);
  337543           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337544           0 :         }
  337545             : 
  337546           0 :      void apply(SgQualifiedNameType *&r, const SgName &n, bool traverse)
  337547             :         {
  337548           0 :           ROSE_ASSERT(this != NULL);
  337549           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337550           0 :         }
  337551             : 
  337552           0 :      void apply(SgTypeChar16 *&r, const SgName &n, bool traverse)
  337553             :         {
  337554           0 :           ROSE_ASSERT(this != NULL);
  337555           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337556           0 :         }
  337557             : 
  337558           0 :      void apply(SgTypeChar32 *&r, const SgName &n, bool traverse)
  337559             :         {
  337560           0 :           ROSE_ASSERT(this != NULL);
  337561           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337562           0 :         }
  337563             : 
  337564    15229500 :      void apply(SgType *&r, const SgName &n, bool traverse)
  337565             :         {
  337566    15229500 :           ROSE_ASSERT(this != NULL);
  337567    15229500 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337568    15229500 :         }
  337569             : 
  337570           0 :      void apply(SgForStatement *&r, const SgName &n, bool traverse)
  337571             :         {
  337572           0 :           ROSE_ASSERT(this != NULL);
  337573           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337574           0 :         }
  337575             : 
  337576        1120 :      void apply(SgForInitStatement *&r, const SgName &n, bool traverse)
  337577             :         {
  337578        1120 :           ROSE_ASSERT(this != NULL);
  337579        1120 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337580        1120 :         }
  337581             : 
  337582           0 :      void apply(SgRangeBasedForStatement *&r, const SgName &n, bool traverse)
  337583             :         {
  337584           0 :           ROSE_ASSERT(this != NULL);
  337585           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337586           0 :         }
  337587             : 
  337588         730 :      void apply(SgCatchStatementSeq *&r, const SgName &n, bool traverse)
  337589             :         {
  337590         730 :           ROSE_ASSERT(this != NULL);
  337591         730 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337592         730 :         }
  337593             : 
  337594     2434000 :      void apply(SgFunctionParameterList *&r, const SgName &n, bool traverse)
  337595             :         {
  337596     2434000 :           ROSE_ASSERT(this != NULL);
  337597     2434000 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337598     2434000 :         }
  337599             : 
  337600       56805 :      void apply(SgCtorInitializerList *&r, const SgName &n, bool traverse)
  337601             :         {
  337602       56805 :           ROSE_ASSERT(this != NULL);
  337603       56805 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337604       56805 :         }
  337605             : 
  337606       26822 :      void apply(SgBasicBlock *&r, const SgName &n, bool traverse)
  337607             :         {
  337608       26822 :           ROSE_ASSERT(this != NULL);
  337609       26822 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337610       26822 :         }
  337611             : 
  337612       24330 :      void apply(SgGlobal *&r, const SgName &n, bool traverse)
  337613             :         {
  337614       24330 :           ROSE_ASSERT(this != NULL);
  337615       24330 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337616       24330 :         }
  337617             : 
  337618           0 :      void apply(SgIfStmt *&r, const SgName &n, bool traverse)
  337619             :         {
  337620           0 :           ROSE_ASSERT(this != NULL);
  337621           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337622           0 :         }
  337623             : 
  337624           0 :      void apply(SgWhileStmt *&r, const SgName &n, bool traverse)
  337625             :         {
  337626           0 :           ROSE_ASSERT(this != NULL);
  337627           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337628           0 :         }
  337629             : 
  337630           0 :      void apply(SgDoWhileStmt *&r, const SgName &n, bool traverse)
  337631             :         {
  337632           0 :           ROSE_ASSERT(this != NULL);
  337633           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337634           0 :         }
  337635             : 
  337636           0 :      void apply(SgSwitchStatement *&r, const SgName &n, bool traverse)
  337637             :         {
  337638           0 :           ROSE_ASSERT(this != NULL);
  337639           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337640           0 :         }
  337641             : 
  337642           0 :      void apply(SgCatchOptionStmt *&r, const SgName &n, bool traverse)
  337643             :         {
  337644           0 :           ROSE_ASSERT(this != NULL);
  337645           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337646           0 :         }
  337647             : 
  337648     1217000 :      void apply(SgFunctionParameterScope *&r, const SgName &n, bool traverse)
  337649             :         {
  337650     1217000 :           ROSE_ASSERT(this != NULL);
  337651     1217000 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337652     1217000 :         }
  337653             : 
  337654     4052310 :      void apply(SgDeclarationScope *&r, const SgName &n, bool traverse)
  337655             :         {
  337656     4052310 :           ROSE_ASSERT(this != NULL);
  337657     4052310 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337658     4052310 :         }
  337659             : 
  337660           0 :      void apply(SgVariableDefinition *&r, const SgName &n, bool traverse)
  337661             :         {
  337662           0 :           ROSE_ASSERT(this != NULL);
  337663           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337664           0 :         }
  337665             : 
  337666           0 :      void apply(SgStmtDeclarationStatement *&r, const SgName &n, bool traverse)
  337667             :         {
  337668           0 :           ROSE_ASSERT(this != NULL);
  337669           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337670           0 :         }
  337671             : 
  337672       16166 :      void apply(SgEnumDeclaration *&r, const SgName &n, bool traverse)
  337673             :         {
  337674       16166 :           ROSE_ASSERT(this != NULL);
  337675       16166 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337676       16166 :         }
  337677             : 
  337678           0 :      void apply(SgAsmStmt *&r, const SgName &n, bool traverse)
  337679             :         {
  337680           0 :           ROSE_ASSERT(this != NULL);
  337681           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337682           0 :         }
  337683             : 
  337684           0 :      void apply(SgFunctionTypeTable *&r, const SgName &n, bool traverse)
  337685             :         {
  337686           0 :           ROSE_ASSERT(this != NULL);
  337687           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337688           0 :         }
  337689             : 
  337690           0 :      void apply(SgExprStatement *&r, const SgName &n, bool traverse)
  337691             :         {
  337692           0 :           ROSE_ASSERT(this != NULL);
  337693           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337694           0 :         }
  337695             : 
  337696           3 :      void apply(SgLabelStatement *&r, const SgName &n, bool traverse)
  337697             :         {
  337698           3 :           ROSE_ASSERT(this != NULL);
  337699           3 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337700           3 :         }
  337701             : 
  337702           0 :      void apply(SgCaseOptionStmt *&r, const SgName &n, bool traverse)
  337703             :         {
  337704           0 :           ROSE_ASSERT(this != NULL);
  337705           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337706           0 :         }
  337707             : 
  337708        1162 :      void apply(SgTryStmt *&r, const SgName &n, bool traverse)
  337709             :         {
  337710        1162 :           ROSE_ASSERT(this != NULL);
  337711        1162 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337712        1162 :         }
  337713             : 
  337714           0 :      void apply(SgDefaultOptionStmt *&r, const SgName &n, bool traverse)
  337715             :         {
  337716           0 :           ROSE_ASSERT(this != NULL);
  337717           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337718           0 :         }
  337719             : 
  337720           0 :      void apply(SgBreakStmt *&r, const SgName &n, bool traverse)
  337721             :         {
  337722           0 :           ROSE_ASSERT(this != NULL);
  337723           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337724           0 :         }
  337725             : 
  337726           0 :      void apply(SgContinueStmt *&r, const SgName &n, bool traverse)
  337727             :         {
  337728           0 :           ROSE_ASSERT(this != NULL);
  337729           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337730           0 :         }
  337731             : 
  337732           0 :      void apply(SgReturnStmt *&r, const SgName &n, bool traverse)
  337733             :         {
  337734           0 :           ROSE_ASSERT(this != NULL);
  337735           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337736           0 :         }
  337737             : 
  337738           0 :      void apply(SgGotoStatement *&r, const SgName &n, bool traverse)
  337739             :         {
  337740           0 :           ROSE_ASSERT(this != NULL);
  337741           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337742           0 :         }
  337743             : 
  337744           0 :      void apply(SgSpawnStmt *&r, const SgName &n, bool traverse)
  337745             :         {
  337746           0 :           ROSE_ASSERT(this != NULL);
  337747           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337748           0 :         }
  337749             : 
  337750         862 :      void apply(SgTemplateTypedefDeclaration *&r, const SgName &n, bool traverse)
  337751             :         {
  337752         862 :           ROSE_ASSERT(this != NULL);
  337753         862 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337754         862 :         }
  337755             : 
  337756           0 :      void apply(SgTemplateInstantiationTypedefDeclaration *&r, const SgName &n, bool traverse)
  337757             :         {
  337758           0 :           ROSE_ASSERT(this != NULL);
  337759           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337760           0 :         }
  337761             : 
  337762       63863 :      void apply(SgTypedefDeclaration *&r, const SgName &n, bool traverse)
  337763             :         {
  337764       63863 :           ROSE_ASSERT(this != NULL);
  337765       63863 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337766       63863 :         }
  337767             : 
  337768           0 :      void apply(SgNullStatement *&r, const SgName &n, bool traverse)
  337769             :         {
  337770           0 :           ROSE_ASSERT(this != NULL);
  337771           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337772           0 :         }
  337773             : 
  337774           0 :      void apply(SgVariantStatement *&r, const SgName &n, bool traverse)
  337775             :         {
  337776           0 :           ROSE_ASSERT(this != NULL);
  337777           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337778           0 :         }
  337779             : 
  337780           0 :      void apply(SgPragmaDeclaration *&r, const SgName &n, bool traverse)
  337781             :         {
  337782           0 :           ROSE_ASSERT(this != NULL);
  337783           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337784           0 :         }
  337785             : 
  337786       16975 :      void apply(SgTemplateClassDeclaration *&r, const SgName &n, bool traverse)
  337787             :         {
  337788       16975 :           ROSE_ASSERT(this != NULL);
  337789       16975 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337790       16975 :         }
  337791             : 
  337792       21190 :      void apply(SgTemplateMemberFunctionDeclaration *&r, const SgName &n, bool traverse)
  337793             :         {
  337794       21190 :           ROSE_ASSERT(this != NULL);
  337795       21190 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337796       21190 :         }
  337797             : 
  337798        3215 :      void apply(SgTemplateFunctionDeclaration *&r, const SgName &n, bool traverse)
  337799             :         {
  337800        3215 :           ROSE_ASSERT(this != NULL);
  337801        3215 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337802        3215 :         }
  337803             : 
  337804           0 :      void apply(SgTemplateVariableDeclaration *&r, const SgName &n, bool traverse)
  337805             :         {
  337806           0 :           ROSE_ASSERT(this != NULL);
  337807           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337808           0 :         }
  337809             : 
  337810           0 :      void apply(SgTemplateDeclaration *&r, const SgName &n, bool traverse)
  337811             :         {
  337812           0 :           ROSE_ASSERT(this != NULL);
  337813           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337814           0 :         }
  337815             : 
  337816        1162 :      void apply(SgVariableDeclaration *&r, const SgName &n, bool traverse)
  337817             :         {
  337818        1162 :           ROSE_ASSERT(this != NULL);
  337819        1162 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337820        1162 :         }
  337821             : 
  337822           0 :      void apply(SgTemplateInstantiationDecl *&r, const SgName &n, bool traverse)
  337823             :         {
  337824           0 :           ROSE_ASSERT(this != NULL);
  337825           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337826           0 :         }
  337827             : 
  337828           0 :      void apply(SgTemplateInstantiationDefn *&r, const SgName &n, bool traverse)
  337829             :         {
  337830           0 :           ROSE_ASSERT(this != NULL);
  337831           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337832           0 :         }
  337833             : 
  337834           0 :      void apply(SgTemplateInstantiationFunctionDecl *&r, const SgName &n, bool traverse)
  337835             :         {
  337836           0 :           ROSE_ASSERT(this != NULL);
  337837           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337838           0 :         }
  337839             : 
  337840           0 :      void apply(SgTemplateInstantiationMemberFunctionDecl *&r, const SgName &n, bool traverse)
  337841             :         {
  337842           0 :           ROSE_ASSERT(this != NULL);
  337843           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337844           0 :         }
  337845             : 
  337846       72352 :      void apply(SgNonrealDecl *&r, const SgName &n, bool traverse)
  337847             :         {
  337848       72352 :           ROSE_ASSERT(this != NULL);
  337849       72352 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337850       72352 :         }
  337851             : 
  337852           0 :      void apply(SgWithStatement *&r, const SgName &n, bool traverse)
  337853             :         {
  337854           0 :           ROSE_ASSERT(this != NULL);
  337855           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337856           0 :         }
  337857             : 
  337858           0 :      void apply(SgPassStatement *&r, const SgName &n, bool traverse)
  337859             :         {
  337860           0 :           ROSE_ASSERT(this != NULL);
  337861           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337862           0 :         }
  337863             : 
  337864           0 :      void apply(SgAssertStmt *&r, const SgName &n, bool traverse)
  337865             :         {
  337866           0 :           ROSE_ASSERT(this != NULL);
  337867           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337868           0 :         }
  337869             : 
  337870           0 :      void apply(SgExecStatement *&r, const SgName &n, bool traverse)
  337871             :         {
  337872           0 :           ROSE_ASSERT(this != NULL);
  337873           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337874           0 :         }
  337875             : 
  337876           0 :      void apply(SgProgramHeaderStatement *&r, const SgName &n, bool traverse)
  337877             :         {
  337878           0 :           ROSE_ASSERT(this != NULL);
  337879           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337880           0 :         }
  337881             : 
  337882           0 :      void apply(SgProcedureHeaderStatement *&r, const SgName &n, bool traverse)
  337883             :         {
  337884           0 :           ROSE_ASSERT(this != NULL);
  337885           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337886           0 :         }
  337887             : 
  337888           0 :      void apply(SgEntryStatement *&r, const SgName &n, bool traverse)
  337889             :         {
  337890           0 :           ROSE_ASSERT(this != NULL);
  337891           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337892           0 :         }
  337893             : 
  337894           0 :      void apply(SgFortranNonblockedDo *&r, const SgName &n, bool traverse)
  337895             :         {
  337896           0 :           ROSE_ASSERT(this != NULL);
  337897           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337898           0 :         }
  337899             : 
  337900           0 :      void apply(SgInterfaceStatement *&r, const SgName &n, bool traverse)
  337901             :         {
  337902           0 :           ROSE_ASSERT(this != NULL);
  337903           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337904           0 :         }
  337905             : 
  337906           0 :      void apply(SgParameterStatement *&r, const SgName &n, bool traverse)
  337907             :         {
  337908           0 :           ROSE_ASSERT(this != NULL);
  337909           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337910           0 :         }
  337911             : 
  337912           0 :      void apply(SgCommonBlock *&r, const SgName &n, bool traverse)
  337913             :         {
  337914           0 :           ROSE_ASSERT(this != NULL);
  337915           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337916           0 :         }
  337917             : 
  337918           0 :      void apply(SgModuleStatement *&r, const SgName &n, bool traverse)
  337919             :         {
  337920           0 :           ROSE_ASSERT(this != NULL);
  337921           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337922           0 :         }
  337923             : 
  337924           0 :      void apply(SgUseStatement *&r, const SgName &n, bool traverse)
  337925             :         {
  337926           0 :           ROSE_ASSERT(this != NULL);
  337927           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337928           0 :         }
  337929             : 
  337930           0 :      void apply(SgProcessControlStatement *&r, const SgName &n, bool traverse)
  337931             :         {
  337932           0 :           ROSE_ASSERT(this != NULL);
  337933           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337934           0 :         }
  337935             : 
  337936           0 :      void apply(SgPrintStatement *&r, const SgName &n, bool traverse)
  337937             :         {
  337938           0 :           ROSE_ASSERT(this != NULL);
  337939           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337940           0 :         }
  337941             : 
  337942           0 :      void apply(SgReadStatement *&r, const SgName &n, bool traverse)
  337943             :         {
  337944           0 :           ROSE_ASSERT(this != NULL);
  337945           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337946           0 :         }
  337947             : 
  337948           0 :      void apply(SgWriteStatement *&r, const SgName &n, bool traverse)
  337949             :         {
  337950           0 :           ROSE_ASSERT(this != NULL);
  337951           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337952           0 :         }
  337953             : 
  337954           0 :      void apply(SgOpenStatement *&r, const SgName &n, bool traverse)
  337955             :         {
  337956           0 :           ROSE_ASSERT(this != NULL);
  337957           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337958           0 :         }
  337959             : 
  337960           0 :      void apply(SgCloseStatement *&r, const SgName &n, bool traverse)
  337961             :         {
  337962           0 :           ROSE_ASSERT(this != NULL);
  337963           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337964           0 :         }
  337965             : 
  337966           0 :      void apply(SgInquireStatement *&r, const SgName &n, bool traverse)
  337967             :         {
  337968           0 :           ROSE_ASSERT(this != NULL);
  337969           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337970           0 :         }
  337971             : 
  337972           0 :      void apply(SgFlushStatement *&r, const SgName &n, bool traverse)
  337973             :         {
  337974           0 :           ROSE_ASSERT(this != NULL);
  337975           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337976           0 :         }
  337977             : 
  337978           0 :      void apply(SgBackspaceStatement *&r, const SgName &n, bool traverse)
  337979             :         {
  337980           0 :           ROSE_ASSERT(this != NULL);
  337981           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337982           0 :         }
  337983             : 
  337984           0 :      void apply(SgRewindStatement *&r, const SgName &n, bool traverse)
  337985             :         {
  337986           0 :           ROSE_ASSERT(this != NULL);
  337987           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337988           0 :         }
  337989             : 
  337990           0 :      void apply(SgEndfileStatement *&r, const SgName &n, bool traverse)
  337991             :         {
  337992           0 :           ROSE_ASSERT(this != NULL);
  337993           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  337994           0 :         }
  337995             : 
  337996           0 :      void apply(SgWaitStatement *&r, const SgName &n, bool traverse)
  337997             :         {
  337998           0 :           ROSE_ASSERT(this != NULL);
  337999           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338000           0 :         }
  338001             : 
  338002           0 :      void apply(SgCAFWithTeamStatement *&r, const SgName &n, bool traverse)
  338003             :         {
  338004           0 :           ROSE_ASSERT(this != NULL);
  338005           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338006           0 :         }
  338007             : 
  338008           0 :      void apply(SgFormatStatement *&r, const SgName &n, bool traverse)
  338009             :         {
  338010           0 :           ROSE_ASSERT(this != NULL);
  338011           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338012           0 :         }
  338013             : 
  338014           0 :      void apply(SgFortranDo *&r, const SgName &n, bool traverse)
  338015             :         {
  338016           0 :           ROSE_ASSERT(this != NULL);
  338017           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338018           0 :         }
  338019             : 
  338020           0 :      void apply(SgForAllStatement *&r, const SgName &n, bool traverse)
  338021             :         {
  338022           0 :           ROSE_ASSERT(this != NULL);
  338023           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338024           0 :         }
  338025             : 
  338026           0 :      void apply(SgIOStatement *&r, const SgName &n, bool traverse)
  338027             :         {
  338028           0 :           ROSE_ASSERT(this != NULL);
  338029           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338030           0 :         }
  338031             : 
  338032           0 :      void apply(SgSyncAllStatement *&r, const SgName &n, bool traverse)
  338033             :         {
  338034           0 :           ROSE_ASSERT(this != NULL);
  338035           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338036           0 :         }
  338037             : 
  338038           0 :      void apply(SgSyncImagesStatement *&r, const SgName &n, bool traverse)
  338039             :         {
  338040           0 :           ROSE_ASSERT(this != NULL);
  338041           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338042           0 :         }
  338043             : 
  338044           0 :      void apply(SgSyncMemoryStatement *&r, const SgName &n, bool traverse)
  338045             :         {
  338046           0 :           ROSE_ASSERT(this != NULL);
  338047           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338048           0 :         }
  338049             : 
  338050           0 :      void apply(SgSyncTeamStatement *&r, const SgName &n, bool traverse)
  338051             :         {
  338052           0 :           ROSE_ASSERT(this != NULL);
  338053           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338054           0 :         }
  338055             : 
  338056           0 :      void apply(SgLockStatement *&r, const SgName &n, bool traverse)
  338057             :         {
  338058           0 :           ROSE_ASSERT(this != NULL);
  338059           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338060           0 :         }
  338061             : 
  338062           0 :      void apply(SgUnlockStatement *&r, const SgName &n, bool traverse)
  338063             :         {
  338064           0 :           ROSE_ASSERT(this != NULL);
  338065           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338066           0 :         }
  338067             : 
  338068           0 :      void apply(SgImageControlStatement *&r, const SgName &n, bool traverse)
  338069             :         {
  338070           0 :           ROSE_ASSERT(this != NULL);
  338071           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338072           0 :         }
  338073             : 
  338074           0 :      void apply(SgUpcNotifyStatement *&r, const SgName &n, bool traverse)
  338075             :         {
  338076           0 :           ROSE_ASSERT(this != NULL);
  338077           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338078           0 :         }
  338079             : 
  338080           0 :      void apply(SgUpcWaitStatement *&r, const SgName &n, bool traverse)
  338081             :         {
  338082           0 :           ROSE_ASSERT(this != NULL);
  338083           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338084           0 :         }
  338085             : 
  338086           0 :      void apply(SgUpcBarrierStatement *&r, const SgName &n, bool traverse)
  338087             :         {
  338088           0 :           ROSE_ASSERT(this != NULL);
  338089           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338090           0 :         }
  338091             : 
  338092           0 :      void apply(SgUpcFenceStatement *&r, const SgName &n, bool traverse)
  338093             :         {
  338094           0 :           ROSE_ASSERT(this != NULL);
  338095           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338096           0 :         }
  338097             : 
  338098           0 :      void apply(SgUpcForAllStatement *&r, const SgName &n, bool traverse)
  338099             :         {
  338100           0 :           ROSE_ASSERT(this != NULL);
  338101           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338102           0 :         }
  338103             : 
  338104           0 :      void apply(SgUpirSpmdStatement *&r, const SgName &n, bool traverse)
  338105             :         {
  338106           0 :           ROSE_ASSERT(this != NULL);
  338107           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338108           0 :         }
  338109             : 
  338110           0 :      void apply(SgOmpLoopStatement *&r, const SgName &n, bool traverse)
  338111             :         {
  338112           0 :           ROSE_ASSERT(this != NULL);
  338113           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338114           0 :         }
  338115             : 
  338116           0 :      void apply(SgOmpScanStatement *&r, const SgName &n, bool traverse)
  338117             :         {
  338118           0 :           ROSE_ASSERT(this != NULL);
  338119           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338120           0 :         }
  338121             : 
  338122           0 :      void apply(SgOmpTaskloopStatement *&r, const SgName &n, bool traverse)
  338123             :         {
  338124           0 :           ROSE_ASSERT(this != NULL);
  338125           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338126           0 :         }
  338127             : 
  338128           0 :      void apply(SgOmpTaskgroupStatement *&r, const SgName &n, bool traverse)
  338129             :         {
  338130           0 :           ROSE_ASSERT(this != NULL);
  338131           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338132           0 :         }
  338133             : 
  338134           0 :      void apply(SgOmpDepobjStatement *&r, const SgName &n, bool traverse)
  338135             :         {
  338136           0 :           ROSE_ASSERT(this != NULL);
  338137           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338138           0 :         }
  338139             : 
  338140           0 :      void apply(SgOmpTeamsStatement *&r, const SgName &n, bool traverse)
  338141             :         {
  338142           0 :           ROSE_ASSERT(this != NULL);
  338143           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338144           0 :         }
  338145             : 
  338146           0 :      void apply(SgOmpCancellationPointStatement *&r, const SgName &n, bool traverse)
  338147             :         {
  338148           0 :           ROSE_ASSERT(this != NULL);
  338149           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338150           0 :         }
  338151             : 
  338152           0 :      void apply(SgOmpDeclareMapperStatement *&r, const SgName &n, bool traverse)
  338153             :         {
  338154           0 :           ROSE_ASSERT(this != NULL);
  338155           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338156           0 :         }
  338157             : 
  338158           0 :      void apply(SgOmpCancelStatement *&r, const SgName &n, bool traverse)
  338159             :         {
  338160           0 :           ROSE_ASSERT(this != NULL);
  338161           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338162           0 :         }
  338163             : 
  338164           0 :      void apply(SgOmpDistributeStatement *&r, const SgName &n, bool traverse)
  338165             :         {
  338166           0 :           ROSE_ASSERT(this != NULL);
  338167           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338168           0 :         }
  338169             : 
  338170           0 :      void apply(SgOmpMetadirectiveStatement *&r, const SgName &n, bool traverse)
  338171             :         {
  338172           0 :           ROSE_ASSERT(this != NULL);
  338173           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338174           0 :         }
  338175             : 
  338176           0 :      void apply(SgOmpSingleStatement *&r, const SgName &n, bool traverse)
  338177             :         {
  338178           0 :           ROSE_ASSERT(this != NULL);
  338179           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338180           0 :         }
  338181             : 
  338182           0 :      void apply(SgOmpTaskStatement *&r, const SgName &n, bool traverse)
  338183             :         {
  338184           0 :           ROSE_ASSERT(this != NULL);
  338185           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338186           0 :         }
  338187             : 
  338188           0 :      void apply(SgOmpTargetEnterDataStatement *&r, const SgName &n, bool traverse)
  338189             :         {
  338190           0 :           ROSE_ASSERT(this != NULL);
  338191           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338192           0 :         }
  338193             : 
  338194           0 :      void apply(SgOmpTargetExitDataStatement *&r, const SgName &n, bool traverse)
  338195             :         {
  338196           0 :           ROSE_ASSERT(this != NULL);
  338197           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338198           0 :         }
  338199             : 
  338200           0 :      void apply(SgUpirWorksharingStatement *&r, const SgName &n, bool traverse)
  338201             :         {
  338202           0 :           ROSE_ASSERT(this != NULL);
  338203           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338204           0 :         }
  338205             : 
  338206           0 :      void apply(SgOmpForSimdStatement *&r, const SgName &n, bool traverse)
  338207             :         {
  338208           0 :           ROSE_ASSERT(this != NULL);
  338209           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338210           0 :         }
  338211             : 
  338212           0 :      void apply(SgOmpDoStatement *&r, const SgName &n, bool traverse)
  338213             :         {
  338214           0 :           ROSE_ASSERT(this != NULL);
  338215           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338216           0 :         }
  338217             : 
  338218           0 :      void apply(SgOmpSectionsStatement *&r, const SgName &n, bool traverse)
  338219             :         {
  338220           0 :           ROSE_ASSERT(this != NULL);
  338221           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338222           0 :         }
  338223             : 
  338224           0 :      void apply(SgOmpAtomicStatement *&r, const SgName &n, bool traverse)
  338225             :         {
  338226           0 :           ROSE_ASSERT(this != NULL);
  338227           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338228           0 :         }
  338229             : 
  338230           0 :      void apply(SgUpirTaskStatement *&r, const SgName &n, bool traverse)
  338231             :         {
  338232           0 :           ROSE_ASSERT(this != NULL);
  338233           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338234           0 :         }
  338235             : 
  338236           0 :      void apply(SgOmpTargetDataStatement *&r, const SgName &n, bool traverse)
  338237             :         {
  338238           0 :           ROSE_ASSERT(this != NULL);
  338239           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338240           0 :         }
  338241             : 
  338242           0 :      void apply(SgOmpTargetParallelForStatement *&r, const SgName &n, bool traverse)
  338243             :         {
  338244           0 :           ROSE_ASSERT(this != NULL);
  338245           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338246           0 :         }
  338247             : 
  338248           0 :      void apply(SgOmpTargetParallelStatement *&r, const SgName &n, bool traverse)
  338249             :         {
  338250           0 :           ROSE_ASSERT(this != NULL);
  338251           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338252           0 :         }
  338253             : 
  338254           0 :      void apply(SgOmpDistributeSimdStatement *&r, const SgName &n, bool traverse)
  338255             :         {
  338256           0 :           ROSE_ASSERT(this != NULL);
  338257           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338258           0 :         }
  338259             : 
  338260           0 :      void apply(SgOmpDistributeParallelForStatement *&r, const SgName &n, bool traverse)
  338261             :         {
  338262           0 :           ROSE_ASSERT(this != NULL);
  338263           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338264           0 :         }
  338265             : 
  338266           0 :      void apply(SgOmpDistributeParallelForSimdStatement *&r, const SgName &n, bool traverse)
  338267             :         {
  338268           0 :           ROSE_ASSERT(this != NULL);
  338269           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338270           0 :         }
  338271             : 
  338272           0 :      void apply(SgOmpTaskloopSimdStatement *&r, const SgName &n, bool traverse)
  338273             :         {
  338274           0 :           ROSE_ASSERT(this != NULL);
  338275           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338276           0 :         }
  338277             : 
  338278           0 :      void apply(SgOmpTargetUpdateStatement *&r, const SgName &n, bool traverse)
  338279             :         {
  338280           0 :           ROSE_ASSERT(this != NULL);
  338281           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338282           0 :         }
  338283             : 
  338284           0 :      void apply(SgOmpTargetParallelForSimdStatement *&r, const SgName &n, bool traverse)
  338285             :         {
  338286           0 :           ROSE_ASSERT(this != NULL);
  338287           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338288           0 :         }
  338289             : 
  338290           0 :      void apply(SgOmpTargetParallelLoopStatement *&r, const SgName &n, bool traverse)
  338291             :         {
  338292           0 :           ROSE_ASSERT(this != NULL);
  338293           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338294           0 :         }
  338295             : 
  338296           0 :      void apply(SgOmpTargetSimdStatement *&r, const SgName &n, bool traverse)
  338297             :         {
  338298           0 :           ROSE_ASSERT(this != NULL);
  338299           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338300           0 :         }
  338301             : 
  338302           0 :      void apply(SgOmpTargetTeamsStatement *&r, const SgName &n, bool traverse)
  338303             :         {
  338304           0 :           ROSE_ASSERT(this != NULL);
  338305           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338306           0 :         }
  338307             : 
  338308           0 :      void apply(SgOmpTargetTeamsDistributeStatement *&r, const SgName &n, bool traverse)
  338309             :         {
  338310           0 :           ROSE_ASSERT(this != NULL);
  338311           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338312           0 :         }
  338313             : 
  338314           0 :      void apply(SgOmpTargetTeamsDistributeSimdStatement *&r, const SgName &n, bool traverse)
  338315             :         {
  338316           0 :           ROSE_ASSERT(this != NULL);
  338317           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338318           0 :         }
  338319             : 
  338320           0 :      void apply(SgOmpTargetTeamsLoopStatement *&r, const SgName &n, bool traverse)
  338321             :         {
  338322           0 :           ROSE_ASSERT(this != NULL);
  338323           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338324           0 :         }
  338325             : 
  338326           0 :      void apply(SgOmpTargetTeamsDistributeParallelForStatement *&r, const SgName &n, bool traverse)
  338327             :         {
  338328           0 :           ROSE_ASSERT(this != NULL);
  338329           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338330           0 :         }
  338331             : 
  338332           0 :      void apply(SgOmpTargetTeamsDistributeParallelForSimdStatement *&r, const SgName &n, bool traverse)
  338333             :         {
  338334           0 :           ROSE_ASSERT(this != NULL);
  338335           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338336           0 :         }
  338337             : 
  338338           0 :      void apply(SgOmpMasterTaskloopSimdStatement *&r, const SgName &n, bool traverse)
  338339             :         {
  338340           0 :           ROSE_ASSERT(this != NULL);
  338341           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338342           0 :         }
  338343             : 
  338344           0 :      void apply(SgOmpParallelMasterTaskloopStatement *&r, const SgName &n, bool traverse)
  338345             :         {
  338346           0 :           ROSE_ASSERT(this != NULL);
  338347           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338348           0 :         }
  338349             : 
  338350           0 :      void apply(SgOmpParallelMasterTaskloopSimdStatement *&r, const SgName &n, bool traverse)
  338351             :         {
  338352           0 :           ROSE_ASSERT(this != NULL);
  338353           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338354           0 :         }
  338355             : 
  338356           0 :      void apply(SgOmpTeamsDistributeStatement *&r, const SgName &n, bool traverse)
  338357             :         {
  338358           0 :           ROSE_ASSERT(this != NULL);
  338359           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338360           0 :         }
  338361             : 
  338362           0 :      void apply(SgOmpTeamsDistributeSimdStatement *&r, const SgName &n, bool traverse)
  338363             :         {
  338364           0 :           ROSE_ASSERT(this != NULL);
  338365           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338366           0 :         }
  338367             : 
  338368           0 :      void apply(SgOmpTeamsDistributeParallelForStatement *&r, const SgName &n, bool traverse)
  338369             :         {
  338370           0 :           ROSE_ASSERT(this != NULL);
  338371           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338372           0 :         }
  338373             : 
  338374           0 :      void apply(SgOmpTeamsDistributeParallelForSimdStatement *&r, const SgName &n, bool traverse)
  338375             :         {
  338376           0 :           ROSE_ASSERT(this != NULL);
  338377           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338378           0 :         }
  338379             : 
  338380           0 :      void apply(SgOmpTeamsLoopStatement *&r, const SgName &n, bool traverse)
  338381             :         {
  338382           0 :           ROSE_ASSERT(this != NULL);
  338383           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338384           0 :         }
  338385             : 
  338386           0 :      void apply(SgOmpParallelMasterStatement *&r, const SgName &n, bool traverse)
  338387             :         {
  338388           0 :           ROSE_ASSERT(this != NULL);
  338389           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338390           0 :         }
  338391             : 
  338392           0 :      void apply(SgOmpMasterTaskloopStatement *&r, const SgName &n, bool traverse)
  338393             :         {
  338394           0 :           ROSE_ASSERT(this != NULL);
  338395           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338396           0 :         }
  338397             : 
  338398           0 :      void apply(SgOmpParallelLoopStatement *&r, const SgName &n, bool traverse)
  338399             :         {
  338400           0 :           ROSE_ASSERT(this != NULL);
  338401           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338402           0 :         }
  338403             : 
  338404           0 :      void apply(SgOmpUnrollStatement *&r, const SgName &n, bool traverse)
  338405             :         {
  338406           0 :           ROSE_ASSERT(this != NULL);
  338407           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338408           0 :         }
  338409             : 
  338410           0 :      void apply(SgOmpTileStatement *&r, const SgName &n, bool traverse)
  338411             :         {
  338412           0 :           ROSE_ASSERT(this != NULL);
  338413           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338414           0 :         }
  338415             : 
  338416           0 :      void apply(SgUpirSimdStatement *&r, const SgName &n, bool traverse)
  338417             :         {
  338418           0 :           ROSE_ASSERT(this != NULL);
  338419           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338420           0 :         }
  338421             : 
  338422           0 :      void apply(SgOmpCriticalStatement *&r, const SgName &n, bool traverse)
  338423             :         {
  338424           0 :           ROSE_ASSERT(this != NULL);
  338425           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338426           0 :         }
  338427             : 
  338428           0 :      void apply(SgOmpOrderedStatement *&r, const SgName &n, bool traverse)
  338429             :         {
  338430           0 :           ROSE_ASSERT(this != NULL);
  338431           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338432           0 :         }
  338433             : 
  338434           0 :      void apply(SgUpirLoopStatement *&r, const SgName &n, bool traverse)
  338435             :         {
  338436           0 :           ROSE_ASSERT(this != NULL);
  338437           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338438           0 :         }
  338439             : 
  338440           0 :      void apply(SgUpirLoopParallelStatement *&r, const SgName &n, bool traverse)
  338441             :         {
  338442           0 :           ROSE_ASSERT(this != NULL);
  338443           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338444           0 :         }
  338445             : 
  338446           0 :      void apply(SgUpirSyncStatement *&r, const SgName &n, bool traverse)
  338447             :         {
  338448           0 :           ROSE_ASSERT(this != NULL);
  338449           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338450           0 :         }
  338451             : 
  338452           0 :      void apply(SgUpirFieldBodyStatement *&r, const SgName &n, bool traverse)
  338453             :         {
  338454           0 :           ROSE_ASSERT(this != NULL);
  338455           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338456           0 :         }
  338457             : 
  338458           0 :      void apply(SgOmpMasterStatement *&r, const SgName &n, bool traverse)
  338459             :         {
  338460           0 :           ROSE_ASSERT(this != NULL);
  338461           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338462           0 :         }
  338463             : 
  338464           0 :      void apply(SgOmpSectionStatement *&r, const SgName &n, bool traverse)
  338465             :         {
  338466           0 :           ROSE_ASSERT(this != NULL);
  338467           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338468           0 :         }
  338469             : 
  338470           0 :      void apply(SgOmpWorkshareStatement *&r, const SgName &n, bool traverse)
  338471             :         {
  338472           0 :           ROSE_ASSERT(this != NULL);
  338473           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338474           0 :         }
  338475             : 
  338476           0 :      void apply(SgOmpFlushStatement *&r, const SgName &n, bool traverse)
  338477             :         {
  338478           0 :           ROSE_ASSERT(this != NULL);
  338479           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338480           0 :         }
  338481             : 
  338482           0 :      void apply(SgOmpAllocateStatement *&r, const SgName &n, bool traverse)
  338483             :         {
  338484           0 :           ROSE_ASSERT(this != NULL);
  338485           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338486           0 :         }
  338487             : 
  338488           0 :      void apply(SgOmpOrderedDependStatement *&r, const SgName &n, bool traverse)
  338489             :         {
  338490           0 :           ROSE_ASSERT(this != NULL);
  338491           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338492           0 :         }
  338493             : 
  338494           0 :      void apply(SgUpirBodyStatement *&r, const SgName &n, bool traverse)
  338495             :         {
  338496           0 :           ROSE_ASSERT(this != NULL);
  338497           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338498           0 :         }
  338499             : 
  338500           0 :      void apply(SgUpirFieldStatement *&r, const SgName &n, bool traverse)
  338501             :         {
  338502           0 :           ROSE_ASSERT(this != NULL);
  338503           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338504           0 :         }
  338505             : 
  338506           0 :      void apply(SgBlockDataStatement *&r, const SgName &n, bool traverse)
  338507             :         {
  338508           0 :           ROSE_ASSERT(this != NULL);
  338509           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338510           0 :         }
  338511             : 
  338512           0 :      void apply(SgImplicitStatement *&r, const SgName &n, bool traverse)
  338513             :         {
  338514           0 :           ROSE_ASSERT(this != NULL);
  338515           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338516           0 :         }
  338517             : 
  338518           0 :      void apply(SgStatementFunctionStatement *&r, const SgName &n, bool traverse)
  338519             :         {
  338520           0 :           ROSE_ASSERT(this != NULL);
  338521           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338522           0 :         }
  338523             : 
  338524           0 :      void apply(SgWhereStatement *&r, const SgName &n, bool traverse)
  338525             :         {
  338526           0 :           ROSE_ASSERT(this != NULL);
  338527           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338528           0 :         }
  338529             : 
  338530           0 :      void apply(SgNullifyStatement *&r, const SgName &n, bool traverse)
  338531             :         {
  338532           0 :           ROSE_ASSERT(this != NULL);
  338533           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338534           0 :         }
  338535             : 
  338536           0 :      void apply(SgEquivalenceStatement *&r, const SgName &n, bool traverse)
  338537             :         {
  338538           0 :           ROSE_ASSERT(this != NULL);
  338539           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338540           0 :         }
  338541             : 
  338542           0 :      void apply(SgDerivedTypeStatement *&r, const SgName &n, bool traverse)
  338543             :         {
  338544           0 :           ROSE_ASSERT(this != NULL);
  338545           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338546           0 :         }
  338547             : 
  338548           0 :      void apply(SgAttributeSpecificationStatement *&r, const SgName &n, bool traverse)
  338549             :         {
  338550           0 :           ROSE_ASSERT(this != NULL);
  338551           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338552           0 :         }
  338553             : 
  338554           0 :      void apply(SgAllocateStatement *&r, const SgName &n, bool traverse)
  338555             :         {
  338556           0 :           ROSE_ASSERT(this != NULL);
  338557           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338558           0 :         }
  338559             : 
  338560           0 :      void apply(SgDeallocateStatement *&r, const SgName &n, bool traverse)
  338561             :         {
  338562           0 :           ROSE_ASSERT(this != NULL);
  338563           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338564           0 :         }
  338565             : 
  338566           0 :      void apply(SgContainsStatement *&r, const SgName &n, bool traverse)
  338567             :         {
  338568           0 :           ROSE_ASSERT(this != NULL);
  338569           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338570           0 :         }
  338571             : 
  338572           0 :      void apply(SgSequenceStatement *&r, const SgName &n, bool traverse)
  338573             :         {
  338574           0 :           ROSE_ASSERT(this != NULL);
  338575           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338576           0 :         }
  338577             : 
  338578           0 :      void apply(SgElseWhereStatement *&r, const SgName &n, bool traverse)
  338579             :         {
  338580           0 :           ROSE_ASSERT(this != NULL);
  338581           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338582           0 :         }
  338583             : 
  338584           0 :      void apply(SgArithmeticIfStatement *&r, const SgName &n, bool traverse)
  338585             :         {
  338586           0 :           ROSE_ASSERT(this != NULL);
  338587           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338588           0 :         }
  338589             : 
  338590           0 :      void apply(SgAssignStatement *&r, const SgName &n, bool traverse)
  338591             :         {
  338592           0 :           ROSE_ASSERT(this != NULL);
  338593           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338594           0 :         }
  338595             : 
  338596           0 :      void apply(SgComputedGotoStatement *&r, const SgName &n, bool traverse)
  338597             :         {
  338598           0 :           ROSE_ASSERT(this != NULL);
  338599           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338600           0 :         }
  338601             : 
  338602           0 :      void apply(SgAssignedGotoStatement *&r, const SgName &n, bool traverse)
  338603             :         {
  338604           0 :           ROSE_ASSERT(this != NULL);
  338605           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338606           0 :         }
  338607             : 
  338608           0 :      void apply(SgNamelistStatement *&r, const SgName &n, bool traverse)
  338609             :         {
  338610           0 :           ROSE_ASSERT(this != NULL);
  338611           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338612           0 :         }
  338613             : 
  338614           0 :      void apply(SgImportStatement *&r, const SgName &n, bool traverse)
  338615             :         {
  338616           0 :           ROSE_ASSERT(this != NULL);
  338617           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338618           0 :         }
  338619             : 
  338620           0 :      void apply(SgAssociateStatement *&r, const SgName &n, bool traverse)
  338621             :         {
  338622           0 :           ROSE_ASSERT(this != NULL);
  338623           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338624           0 :         }
  338625             : 
  338626           0 :      void apply(SgFortranIncludeLine *&r, const SgName &n, bool traverse)
  338627             :         {
  338628           0 :           ROSE_ASSERT(this != NULL);
  338629           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338630           0 :         }
  338631             : 
  338632        2041 :      void apply(SgNamespaceDeclarationStatement *&r, const SgName &n, bool traverse)
  338633             :         {
  338634        2041 :           ROSE_ASSERT(this != NULL);
  338635        2041 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338636        2041 :         }
  338637             : 
  338638         205 :      void apply(SgNamespaceAliasDeclarationStatement *&r, const SgName &n, bool traverse)
  338639             :         {
  338640         205 :           ROSE_ASSERT(this != NULL);
  338641         205 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338642         205 :         }
  338643             : 
  338644        7059 :      void apply(SgNamespaceDefinitionStatement *&r, const SgName &n, bool traverse)
  338645             :         {
  338646        7059 :           ROSE_ASSERT(this != NULL);
  338647        7059 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338648        7059 :         }
  338649             : 
  338650           0 :      void apply(SgUsingDeclarationStatement *&r, const SgName &n, bool traverse)
  338651             :         {
  338652           0 :           ROSE_ASSERT(this != NULL);
  338653           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338654           0 :         }
  338655             : 
  338656           0 :      void apply(SgUsingDirectiveStatement *&r, const SgName &n, bool traverse)
  338657             :         {
  338658           0 :           ROSE_ASSERT(this != NULL);
  338659           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338660           0 :         }
  338661             : 
  338662           0 :      void apply(SgTemplateInstantiationDirectiveStatement *&r, const SgName &n, bool traverse)
  338663             :         {
  338664           0 :           ROSE_ASSERT(this != NULL);
  338665           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338666           0 :         }
  338667             : 
  338668           0 :      void apply(SgStaticAssertionDeclaration *&r, const SgName &n, bool traverse)
  338669             :         {
  338670           0 :           ROSE_ASSERT(this != NULL);
  338671           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338672           0 :         }
  338673             : 
  338674           0 :      void apply(SgTemplateClassDefinition *&r, const SgName &n, bool traverse)
  338675             :         {
  338676           0 :           ROSE_ASSERT(this != NULL);
  338677           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338678           0 :         }
  338679             : 
  338680           0 :      void apply(SgTemplateFunctionDefinition *&r, const SgName &n, bool traverse)
  338681             :         {
  338682           0 :           ROSE_ASSERT(this != NULL);
  338683           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338684           0 :         }
  338685             : 
  338686       32969 :      void apply(SgClassDeclaration *&r, const SgName &n, bool traverse)
  338687             :         {
  338688       32969 :           ROSE_ASSERT(this != NULL);
  338689       32969 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338690       32969 :         }
  338691             : 
  338692       48123 :      void apply(SgClassDefinition *&r, const SgName &n, bool traverse)
  338693             :         {
  338694       48123 :           ROSE_ASSERT(this != NULL);
  338695       48123 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338696       48123 :         }
  338697             : 
  338698     1217000 :      void apply(SgFunctionDefinition *&r, const SgName &n, bool traverse)
  338699             :         {
  338700     1217000 :           ROSE_ASSERT(this != NULL);
  338701     1217000 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338702     1217000 :         }
  338703             : 
  338704     7812920 :      void apply(SgScopeStatement *&r, const SgName &n, bool traverse)
  338705             :         {
  338706     7812920 :           ROSE_ASSERT(this != NULL);
  338707     7812920 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338708     7812920 :         }
  338709             : 
  338710        6113 :      void apply(SgMemberFunctionDeclaration *&r, const SgName &n, bool traverse)
  338711             :         {
  338712        6113 :           ROSE_ASSERT(this != NULL);
  338713        6113 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338714        6113 :         }
  338715             : 
  338716      885637 :      void apply(SgFunctionDeclaration *&r, const SgName &n, bool traverse)
  338717             :         {
  338718      885637 :           ROSE_ASSERT(this != NULL);
  338719      885637 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338720      885637 :         }
  338721             : 
  338722           0 :      void apply(SgIncludeDirectiveStatement *&r, const SgName &n, bool traverse)
  338723             :         {
  338724           0 :           ROSE_ASSERT(this != NULL);
  338725           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338726           0 :         }
  338727             : 
  338728           0 :      void apply(SgDefineDirectiveStatement *&r, const SgName &n, bool traverse)
  338729             :         {
  338730           0 :           ROSE_ASSERT(this != NULL);
  338731           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338732           0 :         }
  338733             : 
  338734           0 :      void apply(SgUndefDirectiveStatement *&r, const SgName &n, bool traverse)
  338735             :         {
  338736           0 :           ROSE_ASSERT(this != NULL);
  338737           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338738           0 :         }
  338739             : 
  338740           0 :      void apply(SgIfdefDirectiveStatement *&r, const SgName &n, bool traverse)
  338741             :         {
  338742           0 :           ROSE_ASSERT(this != NULL);
  338743           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338744           0 :         }
  338745             : 
  338746           0 :      void apply(SgIfndefDirectiveStatement *&r, const SgName &n, bool traverse)
  338747             :         {
  338748           0 :           ROSE_ASSERT(this != NULL);
  338749           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338750           0 :         }
  338751             : 
  338752           0 :      void apply(SgIfDirectiveStatement *&r, const SgName &n, bool traverse)
  338753             :         {
  338754           0 :           ROSE_ASSERT(this != NULL);
  338755           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338756           0 :         }
  338757             : 
  338758           0 :      void apply(SgDeadIfDirectiveStatement *&r, const SgName &n, bool traverse)
  338759             :         {
  338760           0 :           ROSE_ASSERT(this != NULL);
  338761           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338762           0 :         }
  338763             : 
  338764           0 :      void apply(SgElseDirectiveStatement *&r, const SgName &n, bool traverse)
  338765             :         {
  338766           0 :           ROSE_ASSERT(this != NULL);
  338767           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338768           0 :         }
  338769             : 
  338770           0 :      void apply(SgElseifDirectiveStatement *&r, const SgName &n, bool traverse)
  338771             :         {
  338772           0 :           ROSE_ASSERT(this != NULL);
  338773           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338774           0 :         }
  338775             : 
  338776           0 :      void apply(SgEndifDirectiveStatement *&r, const SgName &n, bool traverse)
  338777             :         {
  338778           0 :           ROSE_ASSERT(this != NULL);
  338779           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338780           0 :         }
  338781             : 
  338782           0 :      void apply(SgLineDirectiveStatement *&r, const SgName &n, bool traverse)
  338783             :         {
  338784           0 :           ROSE_ASSERT(this != NULL);
  338785           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338786           0 :         }
  338787             : 
  338788           0 :      void apply(SgWarningDirectiveStatement *&r, const SgName &n, bool traverse)
  338789             :         {
  338790           0 :           ROSE_ASSERT(this != NULL);
  338791           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338792           0 :         }
  338793             : 
  338794           0 :      void apply(SgErrorDirectiveStatement *&r, const SgName &n, bool traverse)
  338795             :         {
  338796           0 :           ROSE_ASSERT(this != NULL);
  338797           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338798           0 :         }
  338799             : 
  338800           0 :      void apply(SgEmptyDirectiveStatement *&r, const SgName &n, bool traverse)
  338801             :         {
  338802           0 :           ROSE_ASSERT(this != NULL);
  338803           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338804           0 :         }
  338805             : 
  338806           0 :      void apply(SgIncludeNextDirectiveStatement *&r, const SgName &n, bool traverse)
  338807             :         {
  338808           0 :           ROSE_ASSERT(this != NULL);
  338809           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338810           0 :         }
  338811             : 
  338812           0 :      void apply(SgIdentDirectiveStatement *&r, const SgName &n, bool traverse)
  338813             :         {
  338814           0 :           ROSE_ASSERT(this != NULL);
  338815           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338816           0 :         }
  338817             : 
  338818           0 :      void apply(SgLinemarkerDirectiveStatement *&r, const SgName &n, bool traverse)
  338819             :         {
  338820           0 :           ROSE_ASSERT(this != NULL);
  338821           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338822           0 :         }
  338823             : 
  338824           0 :      void apply(SgC_PreprocessorDirectiveStatement *&r, const SgName &n, bool traverse)
  338825             :         {
  338826           0 :           ROSE_ASSERT(this != NULL);
  338827           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338828           0 :         }
  338829             : 
  338830           0 :      void apply(SgClinkageStartStatement *&r, const SgName &n, bool traverse)
  338831             :         {
  338832           0 :           ROSE_ASSERT(this != NULL);
  338833           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338834           0 :         }
  338835             : 
  338836           0 :      void apply(SgClinkageEndStatement *&r, const SgName &n, bool traverse)
  338837             :         {
  338838           0 :           ROSE_ASSERT(this != NULL);
  338839           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338840           0 :         }
  338841             : 
  338842           0 :      void apply(SgClinkageDeclarationStatement *&r, const SgName &n, bool traverse)
  338843             :         {
  338844           0 :           ROSE_ASSERT(this != NULL);
  338845           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338846           0 :         }
  338847             : 
  338848           0 :      void apply(SgOmpDeclareSimdStatement *&r, const SgName &n, bool traverse)
  338849             :         {
  338850           0 :           ROSE_ASSERT(this != NULL);
  338851           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338852           0 :         }
  338853             : 
  338854           0 :      void apply(SgOmpBarrierStatement *&r, const SgName &n, bool traverse)
  338855             :         {
  338856           0 :           ROSE_ASSERT(this != NULL);
  338857           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338858           0 :         }
  338859             : 
  338860           0 :      void apply(SgOmpTaskyieldStatement *&r, const SgName &n, bool traverse)
  338861             :         {
  338862           0 :           ROSE_ASSERT(this != NULL);
  338863           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338864           0 :         }
  338865             : 
  338866           0 :      void apply(SgOmpRequiresStatement *&r, const SgName &n, bool traverse)
  338867             :         {
  338868           0 :           ROSE_ASSERT(this != NULL);
  338869           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338870           0 :         }
  338871             : 
  338872           0 :      void apply(SgOmpTaskwaitStatement *&r, const SgName &n, bool traverse)
  338873             :         {
  338874           0 :           ROSE_ASSERT(this != NULL);
  338875           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338876           0 :         }
  338877             : 
  338878           0 :      void apply(SgOmpThreadprivateStatement *&r, const SgName &n, bool traverse)
  338879             :         {
  338880           0 :           ROSE_ASSERT(this != NULL);
  338881           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338882           0 :         }
  338883             : 
  338884           0 :      void apply(SgMicrosoftAttributeDeclaration *&r, const SgName &n, bool traverse)
  338885             :         {
  338886           0 :           ROSE_ASSERT(this != NULL);
  338887           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338888           0 :         }
  338889             : 
  338890           0 :      void apply(SgEmptyDeclaration *&r, const SgName &n, bool traverse)
  338891             :         {
  338892           0 :           ROSE_ASSERT(this != NULL);
  338893           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338894           0 :         }
  338895             : 
  338896    16207100 :      void apply(SgDeclarationStatement *&r, const SgName &n, bool traverse)
  338897             :         {
  338898    16207100 :           ROSE_ASSERT(this != NULL);
  338899    16207100 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338900    16207100 :         }
  338901             : 
  338902           0 :      void apply(SgUpirBaseStatement *&r, const SgName &n, bool traverse)
  338903             :         {
  338904           0 :           ROSE_ASSERT(this != NULL);
  338905           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338906           0 :         }
  338907             : 
  338908      124363 :      void apply(SgStatement *&r, const SgName &n, bool traverse)
  338909             :         {
  338910      124363 :           ROSE_ASSERT(this != NULL);
  338911      124363 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338912      124363 :         }
  338913             : 
  338914           0 :      void apply(SgVarRefExp *&r, const SgName &n, bool traverse)
  338915             :         {
  338916           0 :           ROSE_ASSERT(this != NULL);
  338917           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338918           0 :         }
  338919             : 
  338920           0 :      void apply(SgNonrealRefExp *&r, const SgName &n, bool traverse)
  338921             :         {
  338922           0 :           ROSE_ASSERT(this != NULL);
  338923           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338924           0 :         }
  338925             : 
  338926           0 :      void apply(SgCompoundLiteralExp *&r, const SgName &n, bool traverse)
  338927             :         {
  338928           0 :           ROSE_ASSERT(this != NULL);
  338929           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338930           0 :         }
  338931             : 
  338932     4191400 :      void apply(SgLabelRefExp *&r, const SgName &n, bool traverse)
  338933             :         {
  338934     4191400 :           ROSE_ASSERT(this != NULL);
  338935     4191400 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338936     4191400 :         }
  338937             : 
  338938           0 :      void apply(SgClassNameRefExp *&r, const SgName &n, bool traverse)
  338939             :         {
  338940           0 :           ROSE_ASSERT(this != NULL);
  338941           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338942           0 :         }
  338943             : 
  338944           0 :      void apply(SgFunctionRefExp *&r, const SgName &n, bool traverse)
  338945             :         {
  338946           0 :           ROSE_ASSERT(this != NULL);
  338947           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338948           0 :         }
  338949             : 
  338950           0 :      void apply(SgMemberFunctionRefExp *&r, const SgName &n, bool traverse)
  338951             :         {
  338952           0 :           ROSE_ASSERT(this != NULL);
  338953           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338954           0 :         }
  338955             : 
  338956           0 :      void apply(SgTemplateFunctionRefExp *&r, const SgName &n, bool traverse)
  338957             :         {
  338958           0 :           ROSE_ASSERT(this != NULL);
  338959           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338960           0 :         }
  338961             : 
  338962           0 :      void apply(SgTemplateMemberFunctionRefExp *&r, const SgName &n, bool traverse)
  338963             :         {
  338964           0 :           ROSE_ASSERT(this != NULL);
  338965           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338966           0 :         }
  338967             : 
  338968           0 :      void apply(SgSizeOfOp *&r, const SgName &n, bool traverse)
  338969             :         {
  338970           0 :           ROSE_ASSERT(this != NULL);
  338971           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338972           0 :         }
  338973             : 
  338974           0 :      void apply(SgAlignOfOp *&r, const SgName &n, bool traverse)
  338975             :         {
  338976           0 :           ROSE_ASSERT(this != NULL);
  338977           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338978           0 :         }
  338979             : 
  338980           0 :      void apply(SgNoexceptOp *&r, const SgName &n, bool traverse)
  338981             :         {
  338982           0 :           ROSE_ASSERT(this != NULL);
  338983           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338984           0 :         }
  338985             : 
  338986           0 :      void apply(SgTypeExpression *&r, const SgName &n, bool traverse)
  338987             :         {
  338988           0 :           ROSE_ASSERT(this != NULL);
  338989           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338990           0 :         }
  338991             : 
  338992           0 :      void apply(SgLambdaExp *&r, const SgName &n, bool traverse)
  338993             :         {
  338994           0 :           ROSE_ASSERT(this != NULL);
  338995           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  338996           0 :         }
  338997             : 
  338998           0 :      void apply(SgUpcLocalsizeofExpression *&r, const SgName &n, bool traverse)
  338999             :         {
  339000           0 :           ROSE_ASSERT(this != NULL);
  339001           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339002           0 :         }
  339003             : 
  339004           0 :      void apply(SgUpcBlocksizeofExpression *&r, const SgName &n, bool traverse)
  339005             :         {
  339006           0 :           ROSE_ASSERT(this != NULL);
  339007           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339008           0 :         }
  339009             : 
  339010           0 :      void apply(SgUpcElemsizeofExpression *&r, const SgName &n, bool traverse)
  339011             :         {
  339012           0 :           ROSE_ASSERT(this != NULL);
  339013           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339014           0 :         }
  339015             : 
  339016           0 :      void apply(SgVarArgStartOp *&r, const SgName &n, bool traverse)
  339017             :         {
  339018           0 :           ROSE_ASSERT(this != NULL);
  339019           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339020           0 :         }
  339021             : 
  339022           0 :      void apply(SgVarArgStartOneOperandOp *&r, const SgName &n, bool traverse)
  339023             :         {
  339024           0 :           ROSE_ASSERT(this != NULL);
  339025           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339026           0 :         }
  339027             : 
  339028           0 :      void apply(SgVarArgOp *&r, const SgName &n, bool traverse)
  339029             :         {
  339030           0 :           ROSE_ASSERT(this != NULL);
  339031           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339032           0 :         }
  339033             : 
  339034           0 :      void apply(SgVarArgEndOp *&r, const SgName &n, bool traverse)
  339035             :         {
  339036           0 :           ROSE_ASSERT(this != NULL);
  339037           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339038           0 :         }
  339039             : 
  339040           0 :      void apply(SgVarArgCopyOp *&r, const SgName &n, bool traverse)
  339041             :         {
  339042           0 :           ROSE_ASSERT(this != NULL);
  339043           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339044           0 :         }
  339045             : 
  339046           0 :      void apply(SgTypeIdOp *&r, const SgName &n, bool traverse)
  339047             :         {
  339048           0 :           ROSE_ASSERT(this != NULL);
  339049           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339050           0 :         }
  339051             : 
  339052           0 :      void apply(SgConditionalExp *&r, const SgName &n, bool traverse)
  339053             :         {
  339054           0 :           ROSE_ASSERT(this != NULL);
  339055           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339056           0 :         }
  339057             : 
  339058           0 :      void apply(SgNewExp *&r, const SgName &n, bool traverse)
  339059             :         {
  339060           0 :           ROSE_ASSERT(this != NULL);
  339061           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339062           0 :         }
  339063             : 
  339064           0 :      void apply(SgDeleteExp *&r, const SgName &n, bool traverse)
  339065             :         {
  339066           0 :           ROSE_ASSERT(this != NULL);
  339067           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339068           0 :         }
  339069             : 
  339070           0 :      void apply(SgThisExp *&r, const SgName &n, bool traverse)
  339071             :         {
  339072           0 :           ROSE_ASSERT(this != NULL);
  339073           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339074           0 :         }
  339075             : 
  339076           0 :      void apply(SgSuperExp *&r, const SgName &n, bool traverse)
  339077             :         {
  339078           0 :           ROSE_ASSERT(this != NULL);
  339079           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339080           0 :         }
  339081             : 
  339082           0 :      void apply(SgClassExp *&r, const SgName &n, bool traverse)
  339083             :         {
  339084           0 :           ROSE_ASSERT(this != NULL);
  339085           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339086           0 :         }
  339087             : 
  339088           0 :      void apply(SgRefExp *&r, const SgName &n, bool traverse)
  339089             :         {
  339090           0 :           ROSE_ASSERT(this != NULL);
  339091           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339092           0 :         }
  339093             : 
  339094           0 :      void apply(SgAggregateInitializer *&r, const SgName &n, bool traverse)
  339095             :         {
  339096           0 :           ROSE_ASSERT(this != NULL);
  339097           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339098           0 :         }
  339099             : 
  339100           0 :      void apply(SgCompoundInitializer *&r, const SgName &n, bool traverse)
  339101             :         {
  339102           0 :           ROSE_ASSERT(this != NULL);
  339103           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339104           0 :         }
  339105             : 
  339106         185 :      void apply(SgConstructorInitializer *&r, const SgName &n, bool traverse)
  339107             :         {
  339108         185 :           ROSE_ASSERT(this != NULL);
  339109         185 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339110         185 :         }
  339111             : 
  339112           0 :      void apply(SgAssignInitializer *&r, const SgName &n, bool traverse)
  339113             :         {
  339114           0 :           ROSE_ASSERT(this != NULL);
  339115           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339116           0 :         }
  339117             : 
  339118           0 :      void apply(SgBracedInitializer *&r, const SgName &n, bool traverse)
  339119             :         {
  339120           0 :           ROSE_ASSERT(this != NULL);
  339121           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339122           0 :         }
  339123             : 
  339124           0 :      void apply(SgExpressionRoot *&r, const SgName &n, bool traverse)
  339125             :         {
  339126           0 :           ROSE_ASSERT(this != NULL);
  339127           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339128           0 :         }
  339129             : 
  339130           0 :      void apply(SgMinusOp *&r, const SgName &n, bool traverse)
  339131             :         {
  339132           0 :           ROSE_ASSERT(this != NULL);
  339133           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339134           0 :         }
  339135             : 
  339136           0 :      void apply(SgUnaryAddOp *&r, const SgName &n, bool traverse)
  339137             :         {
  339138           0 :           ROSE_ASSERT(this != NULL);
  339139           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339140           0 :         }
  339141             : 
  339142           0 :      void apply(SgNotOp *&r, const SgName &n, bool traverse)
  339143             :         {
  339144           0 :           ROSE_ASSERT(this != NULL);
  339145           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339146           0 :         }
  339147             : 
  339148           0 :      void apply(SgPointerDerefExp *&r, const SgName &n, bool traverse)
  339149             :         {
  339150           0 :           ROSE_ASSERT(this != NULL);
  339151           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339152           0 :         }
  339153             : 
  339154           0 :      void apply(SgAddressOfOp *&r, const SgName &n, bool traverse)
  339155             :         {
  339156           0 :           ROSE_ASSERT(this != NULL);
  339157           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339158           0 :         }
  339159             : 
  339160           0 :      void apply(SgMinusMinusOp *&r, const SgName &n, bool traverse)
  339161             :         {
  339162           0 :           ROSE_ASSERT(this != NULL);
  339163           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339164           0 :         }
  339165             : 
  339166           0 :      void apply(SgPlusPlusOp *&r, const SgName &n, bool traverse)
  339167             :         {
  339168           0 :           ROSE_ASSERT(this != NULL);
  339169           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339170           0 :         }
  339171             : 
  339172           0 :      void apply(SgBitComplementOp *&r, const SgName &n, bool traverse)
  339173             :         {
  339174           0 :           ROSE_ASSERT(this != NULL);
  339175           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339176           0 :         }
  339177             : 
  339178           0 :      void apply(SgRealPartOp *&r, const SgName &n, bool traverse)
  339179             :         {
  339180           0 :           ROSE_ASSERT(this != NULL);
  339181           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339182           0 :         }
  339183             : 
  339184           0 :      void apply(SgImagPartOp *&r, const SgName &n, bool traverse)
  339185             :         {
  339186           0 :           ROSE_ASSERT(this != NULL);
  339187           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339188           0 :         }
  339189             : 
  339190           0 :      void apply(SgConjugateOp *&r, const SgName &n, bool traverse)
  339191             :         {
  339192           0 :           ROSE_ASSERT(this != NULL);
  339193           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339194           0 :         }
  339195             : 
  339196           0 :      void apply(SgCastExp *&r, const SgName &n, bool traverse)
  339197             :         {
  339198           0 :           ROSE_ASSERT(this != NULL);
  339199           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339200           0 :         }
  339201             : 
  339202           0 :      void apply(SgThrowOp *&r, const SgName &n, bool traverse)
  339203             :         {
  339204           0 :           ROSE_ASSERT(this != NULL);
  339205           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339206           0 :         }
  339207             : 
  339208           0 :      void apply(SgArrowExp *&r, const SgName &n, bool traverse)
  339209             :         {
  339210           0 :           ROSE_ASSERT(this != NULL);
  339211           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339212           0 :         }
  339213             : 
  339214           0 :      void apply(SgDotExp *&r, const SgName &n, bool traverse)
  339215             :         {
  339216           0 :           ROSE_ASSERT(this != NULL);
  339217           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339218           0 :         }
  339219             : 
  339220           0 :      void apply(SgDotStarOp *&r, const SgName &n, bool traverse)
  339221             :         {
  339222           0 :           ROSE_ASSERT(this != NULL);
  339223           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339224           0 :         }
  339225             : 
  339226           0 :      void apply(SgArrowStarOp *&r, const SgName &n, bool traverse)
  339227             :         {
  339228           0 :           ROSE_ASSERT(this != NULL);
  339229           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339230           0 :         }
  339231             : 
  339232           0 :      void apply(SgEqualityOp *&r, const SgName &n, bool traverse)
  339233             :         {
  339234           0 :           ROSE_ASSERT(this != NULL);
  339235           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339236           0 :         }
  339237             : 
  339238           0 :      void apply(SgLessThanOp *&r, const SgName &n, bool traverse)
  339239             :         {
  339240           0 :           ROSE_ASSERT(this != NULL);
  339241           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339242           0 :         }
  339243             : 
  339244           0 :      void apply(SgGreaterThanOp *&r, const SgName &n, bool traverse)
  339245             :         {
  339246           0 :           ROSE_ASSERT(this != NULL);
  339247           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339248           0 :         }
  339249             : 
  339250           0 :      void apply(SgNotEqualOp *&r, const SgName &n, bool traverse)
  339251             :         {
  339252           0 :           ROSE_ASSERT(this != NULL);
  339253           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339254           0 :         }
  339255             : 
  339256           0 :      void apply(SgLessOrEqualOp *&r, const SgName &n, bool traverse)
  339257             :         {
  339258           0 :           ROSE_ASSERT(this != NULL);
  339259           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339260           0 :         }
  339261             : 
  339262           0 :      void apply(SgGreaterOrEqualOp *&r, const SgName &n, bool traverse)
  339263             :         {
  339264           0 :           ROSE_ASSERT(this != NULL);
  339265           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339266           0 :         }
  339267             : 
  339268           0 :      void apply(SgAddOp *&r, const SgName &n, bool traverse)
  339269             :         {
  339270           0 :           ROSE_ASSERT(this != NULL);
  339271           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339272           0 :         }
  339273             : 
  339274           0 :      void apply(SgSubtractOp *&r, const SgName &n, bool traverse)
  339275             :         {
  339276           0 :           ROSE_ASSERT(this != NULL);
  339277           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339278           0 :         }
  339279             : 
  339280           0 :      void apply(SgMultiplyOp *&r, const SgName &n, bool traverse)
  339281             :         {
  339282           0 :           ROSE_ASSERT(this != NULL);
  339283           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339284           0 :         }
  339285             : 
  339286           0 :      void apply(SgDivideOp *&r, const SgName &n, bool traverse)
  339287             :         {
  339288           0 :           ROSE_ASSERT(this != NULL);
  339289           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339290           0 :         }
  339291             : 
  339292           0 :      void apply(SgIntegerDivideOp *&r, const SgName &n, bool traverse)
  339293             :         {
  339294           0 :           ROSE_ASSERT(this != NULL);
  339295           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339296           0 :         }
  339297             : 
  339298           0 :      void apply(SgModOp *&r, const SgName &n, bool traverse)
  339299             :         {
  339300           0 :           ROSE_ASSERT(this != NULL);
  339301           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339302           0 :         }
  339303             : 
  339304           0 :      void apply(SgAndOp *&r, const SgName &n, bool traverse)
  339305             :         {
  339306           0 :           ROSE_ASSERT(this != NULL);
  339307           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339308           0 :         }
  339309             : 
  339310           0 :      void apply(SgOrOp *&r, const SgName &n, bool traverse)
  339311             :         {
  339312           0 :           ROSE_ASSERT(this != NULL);
  339313           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339314           0 :         }
  339315             : 
  339316           0 :      void apply(SgBitXorOp *&r, const SgName &n, bool traverse)
  339317             :         {
  339318           0 :           ROSE_ASSERT(this != NULL);
  339319           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339320           0 :         }
  339321             : 
  339322           0 :      void apply(SgBitAndOp *&r, const SgName &n, bool traverse)
  339323             :         {
  339324           0 :           ROSE_ASSERT(this != NULL);
  339325           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339326           0 :         }
  339327             : 
  339328           0 :      void apply(SgBitOrOp *&r, const SgName &n, bool traverse)
  339329             :         {
  339330           0 :           ROSE_ASSERT(this != NULL);
  339331           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339332           0 :         }
  339333             : 
  339334           0 :      void apply(SgBitEqvOp *&r, const SgName &n, bool traverse)
  339335             :         {
  339336           0 :           ROSE_ASSERT(this != NULL);
  339337           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339338           0 :         }
  339339             : 
  339340           0 :      void apply(SgCommaOpExp *&r, const SgName &n, bool traverse)
  339341             :         {
  339342           0 :           ROSE_ASSERT(this != NULL);
  339343           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339344           0 :         }
  339345             : 
  339346           0 :      void apply(SgLshiftOp *&r, const SgName &n, bool traverse)
  339347             :         {
  339348           0 :           ROSE_ASSERT(this != NULL);
  339349           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339350           0 :         }
  339351             : 
  339352           0 :      void apply(SgRshiftOp *&r, const SgName &n, bool traverse)
  339353             :         {
  339354           0 :           ROSE_ASSERT(this != NULL);
  339355           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339356           0 :         }
  339357             : 
  339358           0 :      void apply(SgPntrArrRefExp *&r, const SgName &n, bool traverse)
  339359             :         {
  339360           0 :           ROSE_ASSERT(this != NULL);
  339361           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339362           0 :         }
  339363             : 
  339364           0 :      void apply(SgScopeOp *&r, const SgName &n, bool traverse)
  339365             :         {
  339366           0 :           ROSE_ASSERT(this != NULL);
  339367           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339368           0 :         }
  339369             : 
  339370           0 :      void apply(SgAssignOp *&r, const SgName &n, bool traverse)
  339371             :         {
  339372           0 :           ROSE_ASSERT(this != NULL);
  339373           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339374           0 :         }
  339375             : 
  339376           0 :      void apply(SgPlusAssignOp *&r, const SgName &n, bool traverse)
  339377             :         {
  339378           0 :           ROSE_ASSERT(this != NULL);
  339379           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339380           0 :         }
  339381             : 
  339382           0 :      void apply(SgMinusAssignOp *&r, const SgName &n, bool traverse)
  339383             :         {
  339384           0 :           ROSE_ASSERT(this != NULL);
  339385           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339386           0 :         }
  339387             : 
  339388           0 :      void apply(SgAndAssignOp *&r, const SgName &n, bool traverse)
  339389             :         {
  339390           0 :           ROSE_ASSERT(this != NULL);
  339391           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339392           0 :         }
  339393             : 
  339394           0 :      void apply(SgIorAssignOp *&r, const SgName &n, bool traverse)
  339395             :         {
  339396           0 :           ROSE_ASSERT(this != NULL);
  339397           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339398           0 :         }
  339399             : 
  339400           0 :      void apply(SgMultAssignOp *&r, const SgName &n, bool traverse)
  339401             :         {
  339402           0 :           ROSE_ASSERT(this != NULL);
  339403           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339404           0 :         }
  339405             : 
  339406           0 :      void apply(SgDivAssignOp *&r, const SgName &n, bool traverse)
  339407             :         {
  339408           0 :           ROSE_ASSERT(this != NULL);
  339409           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339410           0 :         }
  339411             : 
  339412           0 :      void apply(SgModAssignOp *&r, const SgName &n, bool traverse)
  339413             :         {
  339414           0 :           ROSE_ASSERT(this != NULL);
  339415           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339416           0 :         }
  339417             : 
  339418           0 :      void apply(SgXorAssignOp *&r, const SgName &n, bool traverse)
  339419             :         {
  339420           0 :           ROSE_ASSERT(this != NULL);
  339421           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339422           0 :         }
  339423             : 
  339424           0 :      void apply(SgLshiftAssignOp *&r, const SgName &n, bool traverse)
  339425             :         {
  339426           0 :           ROSE_ASSERT(this != NULL);
  339427           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339428           0 :         }
  339429             : 
  339430           0 :      void apply(SgRshiftAssignOp *&r, const SgName &n, bool traverse)
  339431             :         {
  339432           0 :           ROSE_ASSERT(this != NULL);
  339433           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339434           0 :         }
  339435             : 
  339436           0 :      void apply(SgIntegerDivideAssignOp *&r, const SgName &n, bool traverse)
  339437             :         {
  339438           0 :           ROSE_ASSERT(this != NULL);
  339439           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339440           0 :         }
  339441             : 
  339442           0 :      void apply(SgExponentiationAssignOp *&r, const SgName &n, bool traverse)
  339443             :         {
  339444           0 :           ROSE_ASSERT(this != NULL);
  339445           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339446           0 :         }
  339447             : 
  339448           0 :      void apply(SgConcatenationOp *&r, const SgName &n, bool traverse)
  339449             :         {
  339450           0 :           ROSE_ASSERT(this != NULL);
  339451           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339452           0 :         }
  339453             : 
  339454           0 :      void apply(SgNaryComparisonOp *&r, const SgName &n, bool traverse)
  339455             :         {
  339456           0 :           ROSE_ASSERT(this != NULL);
  339457           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339458           0 :         }
  339459             : 
  339460           0 :      void apply(SgNaryBooleanOp *&r, const SgName &n, bool traverse)
  339461             :         {
  339462           0 :           ROSE_ASSERT(this != NULL);
  339463           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339464           0 :         }
  339465             : 
  339466           0 :      void apply(SgBoolValExp *&r, const SgName &n, bool traverse)
  339467             :         {
  339468           0 :           ROSE_ASSERT(this != NULL);
  339469           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339470           0 :         }
  339471             : 
  339472           0 :      void apply(SgStringVal *&r, const SgName &n, bool traverse)
  339473             :         {
  339474           0 :           ROSE_ASSERT(this != NULL);
  339475           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339476           0 :         }
  339477             : 
  339478           0 :      void apply(SgShortVal *&r, const SgName &n, bool traverse)
  339479             :         {
  339480           0 :           ROSE_ASSERT(this != NULL);
  339481           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339482           0 :         }
  339483             : 
  339484           0 :      void apply(SgCharVal *&r, const SgName &n, bool traverse)
  339485             :         {
  339486           0 :           ROSE_ASSERT(this != NULL);
  339487           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339488           0 :         }
  339489             : 
  339490           0 :      void apply(SgUnsignedCharVal *&r, const SgName &n, bool traverse)
  339491             :         {
  339492           0 :           ROSE_ASSERT(this != NULL);
  339493           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339494           0 :         }
  339495             : 
  339496           0 :      void apply(SgWcharVal *&r, const SgName &n, bool traverse)
  339497             :         {
  339498           0 :           ROSE_ASSERT(this != NULL);
  339499           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339500           0 :         }
  339501             : 
  339502           0 :      void apply(SgChar16Val *&r, const SgName &n, bool traverse)
  339503             :         {
  339504           0 :           ROSE_ASSERT(this != NULL);
  339505           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339506           0 :         }
  339507             : 
  339508           0 :      void apply(SgChar32Val *&r, const SgName &n, bool traverse)
  339509             :         {
  339510           0 :           ROSE_ASSERT(this != NULL);
  339511           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339512           0 :         }
  339513             : 
  339514           0 :      void apply(SgUnsignedShortVal *&r, const SgName &n, bool traverse)
  339515             :         {
  339516           0 :           ROSE_ASSERT(this != NULL);
  339517           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339518           0 :         }
  339519             : 
  339520           0 :      void apply(SgIntVal *&r, const SgName &n, bool traverse)
  339521             :         {
  339522           0 :           ROSE_ASSERT(this != NULL);
  339523           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339524           0 :         }
  339525             : 
  339526           0 :      void apply(SgEnumVal *&r, const SgName &n, bool traverse)
  339527             :         {
  339528           0 :           ROSE_ASSERT(this != NULL);
  339529           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339530           0 :         }
  339531             : 
  339532           0 :      void apply(SgUnsignedIntVal *&r, const SgName &n, bool traverse)
  339533             :         {
  339534           0 :           ROSE_ASSERT(this != NULL);
  339535           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339536           0 :         }
  339537             : 
  339538           0 :      void apply(SgLongIntVal *&r, const SgName &n, bool traverse)
  339539             :         {
  339540           0 :           ROSE_ASSERT(this != NULL);
  339541           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339542           0 :         }
  339543             : 
  339544           0 :      void apply(SgLongLongIntVal *&r, const SgName &n, bool traverse)
  339545             :         {
  339546           0 :           ROSE_ASSERT(this != NULL);
  339547           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339548           0 :         }
  339549             : 
  339550           0 :      void apply(SgUnsignedLongLongIntVal *&r, const SgName &n, bool traverse)
  339551             :         {
  339552           0 :           ROSE_ASSERT(this != NULL);
  339553           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339554           0 :         }
  339555             : 
  339556           0 :      void apply(SgUnsignedLongVal *&r, const SgName &n, bool traverse)
  339557             :         {
  339558           0 :           ROSE_ASSERT(this != NULL);
  339559           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339560           0 :         }
  339561             : 
  339562           0 :      void apply(SgFloatVal *&r, const SgName &n, bool traverse)
  339563             :         {
  339564           0 :           ROSE_ASSERT(this != NULL);
  339565           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339566           0 :         }
  339567             : 
  339568           0 :      void apply(SgDoubleVal *&r, const SgName &n, bool traverse)
  339569             :         {
  339570           0 :           ROSE_ASSERT(this != NULL);
  339571           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339572           0 :         }
  339573             : 
  339574           0 :      void apply(SgLongDoubleVal *&r, const SgName &n, bool traverse)
  339575             :         {
  339576           0 :           ROSE_ASSERT(this != NULL);
  339577           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339578           0 :         }
  339579             : 
  339580           0 :      void apply(SgFloat80Val *&r, const SgName &n, bool traverse)
  339581             :         {
  339582           0 :           ROSE_ASSERT(this != NULL);
  339583           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339584           0 :         }
  339585             : 
  339586           0 :      void apply(SgFloat128Val *&r, const SgName &n, bool traverse)
  339587             :         {
  339588           0 :           ROSE_ASSERT(this != NULL);
  339589           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339590           0 :         }
  339591             : 
  339592           0 :      void apply(SgNullptrValExp *&r, const SgName &n, bool traverse)
  339593             :         {
  339594           0 :           ROSE_ASSERT(this != NULL);
  339595           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339596           0 :         }
  339597             : 
  339598           0 :      void apply(SgVoidVal *&r, const SgName &n, bool traverse)
  339599             :         {
  339600           0 :           ROSE_ASSERT(this != NULL);
  339601           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339602           0 :         }
  339603             : 
  339604           0 :      void apply(SgFunctionParameterRefExp *&r, const SgName &n, bool traverse)
  339605             :         {
  339606           0 :           ROSE_ASSERT(this != NULL);
  339607           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339608           0 :         }
  339609             : 
  339610           0 :      void apply(SgTemplateParameterVal *&r, const SgName &n, bool traverse)
  339611             :         {
  339612           0 :           ROSE_ASSERT(this != NULL);
  339613           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339614           0 :         }
  339615             : 
  339616           0 :      void apply(SgUpcThreads *&r, const SgName &n, bool traverse)
  339617             :         {
  339618           0 :           ROSE_ASSERT(this != NULL);
  339619           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339620           0 :         }
  339621             : 
  339622           0 :      void apply(SgUpcMythread *&r, const SgName &n, bool traverse)
  339623             :         {
  339624           0 :           ROSE_ASSERT(this != NULL);
  339625           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339626           0 :         }
  339627             : 
  339628           0 :      void apply(SgComplexVal *&r, const SgName &n, bool traverse)
  339629             :         {
  339630           0 :           ROSE_ASSERT(this != NULL);
  339631           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339632           0 :         }
  339633             : 
  339634           0 :      void apply(SgNullExpression *&r, const SgName &n, bool traverse)
  339635             :         {
  339636           0 :           ROSE_ASSERT(this != NULL);
  339637           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339638           0 :         }
  339639             : 
  339640           0 :      void apply(SgVariantExpression *&r, const SgName &n, bool traverse)
  339641             :         {
  339642           0 :           ROSE_ASSERT(this != NULL);
  339643           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339644           0 :         }
  339645             : 
  339646           0 :      void apply(SgStatementExpression *&r, const SgName &n, bool traverse)
  339647             :         {
  339648           0 :           ROSE_ASSERT(this != NULL);
  339649           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339650           0 :         }
  339651             : 
  339652           0 :      void apply(SgAsmOp *&r, const SgName &n, bool traverse)
  339653             :         {
  339654           0 :           ROSE_ASSERT(this != NULL);
  339655           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339656           0 :         }
  339657             : 
  339658           0 :      void apply(SgCudaKernelExecConfig *&r, const SgName &n, bool traverse)
  339659             :         {
  339660           0 :           ROSE_ASSERT(this != NULL);
  339661           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339662           0 :         }
  339663             : 
  339664           0 :      void apply(SgCudaKernelCallExp *&r, const SgName &n, bool traverse)
  339665             :         {
  339666           0 :           ROSE_ASSERT(this != NULL);
  339667           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339668           0 :         }
  339669             : 
  339670           0 :      void apply(SgLambdaRefExp *&r, const SgName &n, bool traverse)
  339671             :         {
  339672           0 :           ROSE_ASSERT(this != NULL);
  339673           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339674           0 :         }
  339675             : 
  339676           0 :      void apply(SgTupleExp *&r, const SgName &n, bool traverse)
  339677             :         {
  339678           0 :           ROSE_ASSERT(this != NULL);
  339679           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339680           0 :         }
  339681             : 
  339682           0 :      void apply(SgListExp *&r, const SgName &n, bool traverse)
  339683             :         {
  339684           0 :           ROSE_ASSERT(this != NULL);
  339685           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339686           0 :         }
  339687             : 
  339688           0 :      void apply(SgDictionaryExp *&r, const SgName &n, bool traverse)
  339689             :         {
  339690           0 :           ROSE_ASSERT(this != NULL);
  339691           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339692           0 :         }
  339693             : 
  339694           0 :      void apply(SgKeyDatumPair *&r, const SgName &n, bool traverse)
  339695             :         {
  339696           0 :           ROSE_ASSERT(this != NULL);
  339697           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339698           0 :         }
  339699             : 
  339700           0 :      void apply(SgComprehension *&r, const SgName &n, bool traverse)
  339701             :         {
  339702           0 :           ROSE_ASSERT(this != NULL);
  339703           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339704           0 :         }
  339705             : 
  339706           0 :      void apply(SgListComprehension *&r, const SgName &n, bool traverse)
  339707             :         {
  339708           0 :           ROSE_ASSERT(this != NULL);
  339709           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339710           0 :         }
  339711             : 
  339712           0 :      void apply(SgSetComprehension *&r, const SgName &n, bool traverse)
  339713             :         {
  339714           0 :           ROSE_ASSERT(this != NULL);
  339715           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339716           0 :         }
  339717             : 
  339718           0 :      void apply(SgDictionaryComprehension *&r, const SgName &n, bool traverse)
  339719             :         {
  339720           0 :           ROSE_ASSERT(this != NULL);
  339721           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339722           0 :         }
  339723             : 
  339724           0 :      void apply(SgMembershipOp *&r, const SgName &n, bool traverse)
  339725             :         {
  339726           0 :           ROSE_ASSERT(this != NULL);
  339727           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339728           0 :         }
  339729             : 
  339730           0 :      void apply(SgNonMembershipOp *&r, const SgName &n, bool traverse)
  339731             :         {
  339732           0 :           ROSE_ASSERT(this != NULL);
  339733           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339734           0 :         }
  339735             : 
  339736           0 :      void apply(SgIsOp *&r, const SgName &n, bool traverse)
  339737             :         {
  339738           0 :           ROSE_ASSERT(this != NULL);
  339739           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339740           0 :         }
  339741             : 
  339742           0 :      void apply(SgIsNotOp *&r, const SgName &n, bool traverse)
  339743             :         {
  339744           0 :           ROSE_ASSERT(this != NULL);
  339745           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339746           0 :         }
  339747             : 
  339748           0 :      void apply(SgStringConversion *&r, const SgName &n, bool traverse)
  339749             :         {
  339750           0 :           ROSE_ASSERT(this != NULL);
  339751           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339752           0 :         }
  339753             : 
  339754           0 :      void apply(SgYieldExpression *&r, const SgName &n, bool traverse)
  339755             :         {
  339756           0 :           ROSE_ASSERT(this != NULL);
  339757           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339758           0 :         }
  339759             : 
  339760           0 :      void apply(SgFoldExpression *&r, const SgName &n, bool traverse)
  339761             :         {
  339762           0 :           ROSE_ASSERT(this != NULL);
  339763           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339764           0 :         }
  339765             : 
  339766           0 :      void apply(SgChooseExpression *&r, const SgName &n, bool traverse)
  339767             :         {
  339768           0 :           ROSE_ASSERT(this != NULL);
  339769           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339770           0 :         }
  339771             : 
  339772           0 :      void apply(SgAwaitExpression *&r, const SgName &n, bool traverse)
  339773             :         {
  339774           0 :           ROSE_ASSERT(this != NULL);
  339775           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339776           0 :         }
  339777             : 
  339778           0 :      void apply(SgSpaceshipOp *&r, const SgName &n, bool traverse)
  339779             :         {
  339780           0 :           ROSE_ASSERT(this != NULL);
  339781           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339782           0 :         }
  339783             : 
  339784           0 :      void apply(SgSubscriptExpression *&r, const SgName &n, bool traverse)
  339785             :         {
  339786           0 :           ROSE_ASSERT(this != NULL);
  339787           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339788           0 :         }
  339789             : 
  339790           0 :      void apply(SgColonShapeExp *&r, const SgName &n, bool traverse)
  339791             :         {
  339792           0 :           ROSE_ASSERT(this != NULL);
  339793           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339794           0 :         }
  339795             : 
  339796           0 :      void apply(SgAsteriskShapeExp *&r, const SgName &n, bool traverse)
  339797             :         {
  339798           0 :           ROSE_ASSERT(this != NULL);
  339799           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339800           0 :         }
  339801             : 
  339802           0 :      void apply(SgIOItemExpression *&r, const SgName &n, bool traverse)
  339803             :         {
  339804           0 :           ROSE_ASSERT(this != NULL);
  339805           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339806           0 :         }
  339807             : 
  339808           0 :      void apply(SgImpliedDo *&r, const SgName &n, bool traverse)
  339809             :         {
  339810           0 :           ROSE_ASSERT(this != NULL);
  339811           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339812           0 :         }
  339813             : 
  339814           0 :      void apply(SgExponentiationOp *&r, const SgName &n, bool traverse)
  339815             :         {
  339816           0 :           ROSE_ASSERT(this != NULL);
  339817           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339818           0 :         }
  339819             : 
  339820           0 :      void apply(SgUnknownArrayOrFunctionReference *&r, const SgName &n, bool traverse)
  339821             :         {
  339822           0 :           ROSE_ASSERT(this != NULL);
  339823           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339824           0 :         }
  339825             : 
  339826           0 :      void apply(SgActualArgumentExpression *&r, const SgName &n, bool traverse)
  339827             :         {
  339828           0 :           ROSE_ASSERT(this != NULL);
  339829           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339830           0 :         }
  339831             : 
  339832           0 :      void apply(SgUserDefinedBinaryOp *&r, const SgName &n, bool traverse)
  339833             :         {
  339834           0 :           ROSE_ASSERT(this != NULL);
  339835           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339836           0 :         }
  339837             : 
  339838           0 :      void apply(SgPointerAssignOp *&r, const SgName &n, bool traverse)
  339839             :         {
  339840           0 :           ROSE_ASSERT(this != NULL);
  339841           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339842           0 :         }
  339843             : 
  339844           0 :      void apply(SgCAFCoExpression *&r, const SgName &n, bool traverse)
  339845             :         {
  339846           0 :           ROSE_ASSERT(this != NULL);
  339847           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339848           0 :         }
  339849             : 
  339850           0 :      void apply(SgDesignatedInitializer *&r, const SgName &n, bool traverse)
  339851             :         {
  339852           0 :           ROSE_ASSERT(this != NULL);
  339853           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339854           0 :         }
  339855             : 
  339856           0 :      void apply(SgMatrixExp *&r, const SgName &n, bool traverse)
  339857             :         {
  339858           0 :           ROSE_ASSERT(this != NULL);
  339859           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339860           0 :         }
  339861             : 
  339862           0 :      void apply(SgRangeExp *&r, const SgName &n, bool traverse)
  339863             :         {
  339864           0 :           ROSE_ASSERT(this != NULL);
  339865           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339866           0 :         }
  339867             : 
  339868           0 :      void apply(SgMagicColonExp *&r, const SgName &n, bool traverse)
  339869             :         {
  339870           0 :           ROSE_ASSERT(this != NULL);
  339871           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339872           0 :         }
  339873             : 
  339874           0 :      void apply(SgElementwiseMultiplyOp *&r, const SgName &n, bool traverse)
  339875             :         {
  339876           0 :           ROSE_ASSERT(this != NULL);
  339877           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339878           0 :         }
  339879             : 
  339880           0 :      void apply(SgPowerOp *&r, const SgName &n, bool traverse)
  339881             :         {
  339882           0 :           ROSE_ASSERT(this != NULL);
  339883           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339884           0 :         }
  339885             : 
  339886           0 :      void apply(SgElementwisePowerOp *&r, const SgName &n, bool traverse)
  339887             :         {
  339888           0 :           ROSE_ASSERT(this != NULL);
  339889           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339890           0 :         }
  339891             : 
  339892           0 :      void apply(SgElementwiseDivideOp *&r, const SgName &n, bool traverse)
  339893             :         {
  339894           0 :           ROSE_ASSERT(this != NULL);
  339895           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339896           0 :         }
  339897             : 
  339898           0 :      void apply(SgLeftDivideOp *&r, const SgName &n, bool traverse)
  339899             :         {
  339900           0 :           ROSE_ASSERT(this != NULL);
  339901           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339902           0 :         }
  339903             : 
  339904           0 :      void apply(SgElementwiseLeftDivideOp *&r, const SgName &n, bool traverse)
  339905             :         {
  339906           0 :           ROSE_ASSERT(this != NULL);
  339907           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339908           0 :         }
  339909             : 
  339910           0 :      void apply(SgElementwiseAddOp *&r, const SgName &n, bool traverse)
  339911             :         {
  339912           0 :           ROSE_ASSERT(this != NULL);
  339913           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339914           0 :         }
  339915             : 
  339916           0 :      void apply(SgElementwiseSubtractOp *&r, const SgName &n, bool traverse)
  339917             :         {
  339918           0 :           ROSE_ASSERT(this != NULL);
  339919           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339920           0 :         }
  339921             : 
  339922           0 :      void apply(SgMatrixTransposeOp *&r, const SgName &n, bool traverse)
  339923             :         {
  339924           0 :           ROSE_ASSERT(this != NULL);
  339925           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339926           0 :         }
  339927             : 
  339928           0 :      void apply(SgElementwiseOp *&r, const SgName &n, bool traverse)
  339929             :         {
  339930           0 :           ROSE_ASSERT(this != NULL);
  339931           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339932           0 :         }
  339933             : 
  339934     6480440 :      void apply(SgInitializer *&r, const SgName &n, bool traverse)
  339935             :         {
  339936     6480440 :           ROSE_ASSERT(this != NULL);
  339937     6480440 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339938     6480440 :         }
  339939             : 
  339940           0 :      void apply(SgSIMDLoad *&r, const SgName &n, bool traverse)
  339941             :         {
  339942           0 :           ROSE_ASSERT(this != NULL);
  339943           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339944           0 :         }
  339945             : 
  339946           0 :      void apply(SgSIMDBroadcast *&r, const SgName &n, bool traverse)
  339947             :         {
  339948           0 :           ROSE_ASSERT(this != NULL);
  339949           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339950           0 :         }
  339951             : 
  339952           0 :      void apply(SgSIMDStore *&r, const SgName &n, bool traverse)
  339953             :         {
  339954           0 :           ROSE_ASSERT(this != NULL);
  339955           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339956           0 :         }
  339957             : 
  339958           0 :      void apply(SgSIMDPartialStore *&r, const SgName &n, bool traverse)
  339959             :         {
  339960           0 :           ROSE_ASSERT(this != NULL);
  339961           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339962           0 :         }
  339963             : 
  339964           0 :      void apply(SgSIMDScalarStore *&r, const SgName &n, bool traverse)
  339965             :         {
  339966           0 :           ROSE_ASSERT(this != NULL);
  339967           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339968           0 :         }
  339969             : 
  339970           0 :      void apply(SgSIMDGather *&r, const SgName &n, bool traverse)
  339971             :         {
  339972           0 :           ROSE_ASSERT(this != NULL);
  339973           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339974           0 :         }
  339975             : 
  339976           0 :      void apply(SgSIMDExplicitGather *&r, const SgName &n, bool traverse)
  339977             :         {
  339978           0 :           ROSE_ASSERT(this != NULL);
  339979           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339980           0 :         }
  339981             : 
  339982           0 :      void apply(SgSIMDScatter *&r, const SgName &n, bool traverse)
  339983             :         {
  339984           0 :           ROSE_ASSERT(this != NULL);
  339985           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339986           0 :         }
  339987             : 
  339988           0 :      void apply(SgSIMDAddOp *&r, const SgName &n, bool traverse)
  339989             :         {
  339990           0 :           ROSE_ASSERT(this != NULL);
  339991           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339992           0 :         }
  339993             : 
  339994           0 :      void apply(SgSIMDSubOp *&r, const SgName &n, bool traverse)
  339995             :         {
  339996           0 :           ROSE_ASSERT(this != NULL);
  339997           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  339998           0 :         }
  339999             : 
  340000           0 :      void apply(SgSIMDMulOp *&r, const SgName &n, bool traverse)
  340001             :         {
  340002           0 :           ROSE_ASSERT(this != NULL);
  340003           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340004           0 :         }
  340005             : 
  340006           0 :      void apply(SgSIMDDivOp *&r, const SgName &n, bool traverse)
  340007             :         {
  340008           0 :           ROSE_ASSERT(this != NULL);
  340009           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340010           0 :         }
  340011             : 
  340012           0 :      void apply(SgSIMDFmaOp *&r, const SgName &n, bool traverse)
  340013             :         {
  340014           0 :           ROSE_ASSERT(this != NULL);
  340015           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340016           0 :         }
  340017             : 
  340018           0 :      void apply(SgSIMDBinaryOp *&r, const SgName &n, bool traverse)
  340019             :         {
  340020           0 :           ROSE_ASSERT(this != NULL);
  340021           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340022           0 :         }
  340023             : 
  340024           0 :      void apply(SgUserDefinedUnaryOp *&r, const SgName &n, bool traverse)
  340025             :         {
  340026           0 :           ROSE_ASSERT(this != NULL);
  340027           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340028           0 :         }
  340029             : 
  340030           0 :      void apply(SgPseudoDestructorRefExp *&r, const SgName &n, bool traverse)
  340031             :         {
  340032           0 :           ROSE_ASSERT(this != NULL);
  340033           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340034           0 :         }
  340035             : 
  340036           0 :      void apply(SgUnaryOp *&r, const SgName &n, bool traverse)
  340037             :         {
  340038           0 :           ROSE_ASSERT(this != NULL);
  340039           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340040           0 :         }
  340041             : 
  340042           0 :      void apply(SgCompoundAssignOp *&r, const SgName &n, bool traverse)
  340043             :         {
  340044           0 :           ROSE_ASSERT(this != NULL);
  340045           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340046           0 :         }
  340047             : 
  340048           0 :      void apply(SgBinaryOp *&r, const SgName &n, bool traverse)
  340049             :         {
  340050           0 :           ROSE_ASSERT(this != NULL);
  340051           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340052           0 :         }
  340053             : 
  340054           0 :      void apply(SgNaryOp *&r, const SgName &n, bool traverse)
  340055             :         {
  340056           0 :           ROSE_ASSERT(this != NULL);
  340057           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340058           0 :         }
  340059             : 
  340060           0 :      void apply(SgValueExp *&r, const SgName &n, bool traverse)
  340061             :         {
  340062           0 :           ROSE_ASSERT(this != NULL);
  340063           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340064           0 :         }
  340065             : 
  340066     1325480 :      void apply(SgExprListExp *&r, const SgName &n, bool traverse)
  340067             :         {
  340068     1325480 :           ROSE_ASSERT(this != NULL);
  340069     1325480 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340070     1325480 :         }
  340071             : 
  340072           0 :      void apply(SgFunctionCallExp *&r, const SgName &n, bool traverse)
  340073             :         {
  340074           0 :           ROSE_ASSERT(this != NULL);
  340075           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340076           0 :         }
  340077             : 
  340078           0 :      void apply(SgCallExpression *&r, const SgName &n, bool traverse)
  340079             :         {
  340080           0 :           ROSE_ASSERT(this != NULL);
  340081           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340082           0 :         }
  340083             : 
  340084           0 :      void apply(SgTypeTraitBuiltinOperator *&r, const SgName &n, bool traverse)
  340085             :         {
  340086           0 :           ROSE_ASSERT(this != NULL);
  340087           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340088           0 :         }
  340089             : 
  340090     1350740 :      void apply(SgExpression *&r, const SgName &n, bool traverse)
  340091             :         {
  340092     1350740 :           ROSE_ASSERT(this != NULL);
  340093     1350740 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340094     1350740 :         }
  340095             : 
  340096           0 :      void apply(SgTemplateVariableSymbol *&r, const SgName &n, bool traverse)
  340097             :         {
  340098           0 :           ROSE_ASSERT(this != NULL);
  340099           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340100           0 :         }
  340101             : 
  340102       96530 :      void apply(SgVariableSymbol *&r, const SgName &n, bool traverse)
  340103             :         {
  340104       96530 :           ROSE_ASSERT(this != NULL);
  340105       96530 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340106       96530 :         }
  340107             : 
  340108           0 :      void apply(SgFunctionTypeSymbol *&r, const SgName &n, bool traverse)
  340109             :         {
  340110           0 :           ROSE_ASSERT(this != NULL);
  340111           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340112           0 :         }
  340113             : 
  340114           0 :      void apply(SgTemplateClassSymbol *&r, const SgName &n, bool traverse)
  340115             :         {
  340116           0 :           ROSE_ASSERT(this != NULL);
  340117           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340118           0 :         }
  340119             : 
  340120       16661 :      void apply(SgClassSymbol *&r, const SgName &n, bool traverse)
  340121             :         {
  340122       16661 :           ROSE_ASSERT(this != NULL);
  340123       16661 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340124       16661 :         }
  340125             : 
  340126           0 :      void apply(SgTemplateSymbol *&r, const SgName &n, bool traverse)
  340127             :         {
  340128           0 :           ROSE_ASSERT(this != NULL);
  340129           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340130           0 :         }
  340131             : 
  340132           0 :      void apply(SgEnumSymbol *&r, const SgName &n, bool traverse)
  340133             :         {
  340134           0 :           ROSE_ASSERT(this != NULL);
  340135           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340136           0 :         }
  340137             : 
  340138           0 :      void apply(SgEnumFieldSymbol *&r, const SgName &n, bool traverse)
  340139             :         {
  340140           0 :           ROSE_ASSERT(this != NULL);
  340141           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340142           0 :         }
  340143             : 
  340144           0 :      void apply(SgTemplateTypedefSymbol *&r, const SgName &n, bool traverse)
  340145             :         {
  340146           0 :           ROSE_ASSERT(this != NULL);
  340147           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340148           0 :         }
  340149             : 
  340150           0 :      void apply(SgTypedefSymbol *&r, const SgName &n, bool traverse)
  340151             :         {
  340152           0 :           ROSE_ASSERT(this != NULL);
  340153           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340154           0 :         }
  340155             : 
  340156        3665 :      void apply(SgTemplateFunctionSymbol *&r, const SgName &n, bool traverse)
  340157             :         {
  340158        3665 :           ROSE_ASSERT(this != NULL);
  340159        3665 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340160        3665 :         }
  340161             : 
  340162        9985 :      void apply(SgTemplateMemberFunctionSymbol *&r, const SgName &n, bool traverse)
  340163             :         {
  340164        9985 :           ROSE_ASSERT(this != NULL);
  340165        9985 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340166        9985 :         }
  340167             : 
  340168           0 :      void apply(SgLabelSymbol *&r, const SgName &n, bool traverse)
  340169             :         {
  340170           0 :           ROSE_ASSERT(this != NULL);
  340171           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340172           0 :         }
  340173             : 
  340174           0 :      void apply(SgDefaultSymbol *&r, const SgName &n, bool traverse)
  340175             :         {
  340176           0 :           ROSE_ASSERT(this != NULL);
  340177           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340178           0 :         }
  340179             : 
  340180           0 :      void apply(SgNamespaceSymbol *&r, const SgName &n, bool traverse)
  340181             :         {
  340182           0 :           ROSE_ASSERT(this != NULL);
  340183           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340184           0 :         }
  340185             : 
  340186           0 :      void apply(SgIntrinsicSymbol *&r, const SgName &n, bool traverse)
  340187             :         {
  340188           0 :           ROSE_ASSERT(this != NULL);
  340189           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340190           0 :         }
  340191             : 
  340192           0 :      void apply(SgModuleSymbol *&r, const SgName &n, bool traverse)
  340193             :         {
  340194           0 :           ROSE_ASSERT(this != NULL);
  340195           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340196           0 :         }
  340197             : 
  340198           0 :      void apply(SgInterfaceSymbol *&r, const SgName &n, bool traverse)
  340199             :         {
  340200           0 :           ROSE_ASSERT(this != NULL);
  340201           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340202           0 :         }
  340203             : 
  340204           0 :      void apply(SgCommonSymbol *&r, const SgName &n, bool traverse)
  340205             :         {
  340206           0 :           ROSE_ASSERT(this != NULL);
  340207           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340208           0 :         }
  340209             : 
  340210           0 :      void apply(SgRenameSymbol *&r, const SgName &n, bool traverse)
  340211             :         {
  340212           0 :           ROSE_ASSERT(this != NULL);
  340213           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340214           0 :         }
  340215             : 
  340216        6750 :      void apply(SgMemberFunctionSymbol *&r, const SgName &n, bool traverse)
  340217             :         {
  340218        6750 :           ROSE_ASSERT(this != NULL);
  340219        6750 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340220        6750 :         }
  340221             : 
  340222        9692 :      void apply(SgFunctionSymbol *&r, const SgName &n, bool traverse)
  340223             :         {
  340224        9692 :           ROSE_ASSERT(this != NULL);
  340225        9692 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340226        9692 :         }
  340227             : 
  340228           0 :      void apply(SgAliasSymbol *&r, const SgName &n, bool traverse)
  340229             :         {
  340230           0 :           ROSE_ASSERT(this != NULL);
  340231           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340232           0 :         }
  340233             : 
  340234       38690 :      void apply(SgNonrealSymbol *&r, const SgName &n, bool traverse)
  340235             :         {
  340236       38690 :           ROSE_ASSERT(this != NULL);
  340237       38690 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340238       38690 :         }
  340239             : 
  340240     3665500 :      void apply(SgSymbol *&r, const SgName &n, bool traverse)
  340241             :         {
  340242     3665500 :           ROSE_ASSERT(this != NULL);
  340243     3665500 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340244     3665500 :         }
  340245             : 
  340246           0 :      void apply(SgCommonBlockObject *&r, const SgName &n, bool traverse)
  340247             :         {
  340248           0 :           ROSE_ASSERT(this != NULL);
  340249           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340250           0 :         }
  340251             : 
  340252    13232000 :      void apply(SgInitializedName *&r, const SgName &n, bool traverse)
  340253             :         {
  340254    13232000 :           ROSE_ASSERT(this != NULL);
  340255    13232000 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340256    13232000 :         }
  340257             : 
  340258           0 :      void apply(SgLambdaCapture *&r, const SgName &n, bool traverse)
  340259             :         {
  340260           0 :           ROSE_ASSERT(this != NULL);
  340261           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340262           0 :         }
  340263             : 
  340264           0 :      void apply(SgLambdaCaptureList *&r, const SgName &n, bool traverse)
  340265             :         {
  340266           0 :           ROSE_ASSERT(this != NULL);
  340267           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340268           0 :         }
  340269             : 
  340270           0 :      void apply(SgOmpOrderedClause *&r, const SgName &n, bool traverse)
  340271             :         {
  340272           0 :           ROSE_ASSERT(this != NULL);
  340273           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340274           0 :         }
  340275             : 
  340276           0 :      void apply(SgOmpNowaitClause *&r, const SgName &n, bool traverse)
  340277             :         {
  340278           0 :           ROSE_ASSERT(this != NULL);
  340279           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340280           0 :         }
  340281             : 
  340282           0 :      void apply(SgOmpNogroupClause *&r, const SgName &n, bool traverse)
  340283             :         {
  340284           0 :           ROSE_ASSERT(this != NULL);
  340285           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340286           0 :         }
  340287             : 
  340288           0 :      void apply(SgOmpReadClause *&r, const SgName &n, bool traverse)
  340289             :         {
  340290           0 :           ROSE_ASSERT(this != NULL);
  340291           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340292           0 :         }
  340293             : 
  340294           0 :      void apply(SgOmpThreadsClause *&r, const SgName &n, bool traverse)
  340295             :         {
  340296           0 :           ROSE_ASSERT(this != NULL);
  340297           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340298           0 :         }
  340299             : 
  340300           0 :      void apply(SgOmpSimdClause *&r, const SgName &n, bool traverse)
  340301             :         {
  340302           0 :           ROSE_ASSERT(this != NULL);
  340303           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340304           0 :         }
  340305             : 
  340306           0 :      void apply(SgOmpReverseOffloadClause *&r, const SgName &n, bool traverse)
  340307             :         {
  340308           0 :           ROSE_ASSERT(this != NULL);
  340309           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340310           0 :         }
  340311             : 
  340312           0 :      void apply(SgOmpExtImplementationDefinedRequirementClause *&r, const SgName &n, bool traverse)
  340313             :         {
  340314           0 :           ROSE_ASSERT(this != NULL);
  340315           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340316           0 :         }
  340317             : 
  340318           0 :      void apply(SgOmpUnifiedAddressClause *&r, const SgName &n, bool traverse)
  340319             :         {
  340320           0 :           ROSE_ASSERT(this != NULL);
  340321           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340322           0 :         }
  340323             : 
  340324           0 :      void apply(SgOmpUnifiedSharedMemoryClause *&r, const SgName &n, bool traverse)
  340325             :         {
  340326           0 :           ROSE_ASSERT(this != NULL);
  340327           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340328           0 :         }
  340329             : 
  340330           0 :      void apply(SgOmpDynamicAllocatorsClause *&r, const SgName &n, bool traverse)
  340331             :         {
  340332           0 :           ROSE_ASSERT(this != NULL);
  340333           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340334           0 :         }
  340335             : 
  340336           0 :      void apply(SgOmpAtomicDefaultMemOrderClause *&r, const SgName &n, bool traverse)
  340337             :         {
  340338           0 :           ROSE_ASSERT(this != NULL);
  340339           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340340           0 :         }
  340341             : 
  340342           0 :      void apply(SgOmpWriteClause *&r, const SgName &n, bool traverse)
  340343             :         {
  340344           0 :           ROSE_ASSERT(this != NULL);
  340345           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340346           0 :         }
  340347             : 
  340348           0 :      void apply(SgOmpUpdateClause *&r, const SgName &n, bool traverse)
  340349             :         {
  340350           0 :           ROSE_ASSERT(this != NULL);
  340351           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340352           0 :         }
  340353             : 
  340354           0 :      void apply(SgOmpDepobjUpdateClause *&r, const SgName &n, bool traverse)
  340355             :         {
  340356           0 :           ROSE_ASSERT(this != NULL);
  340357           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340358           0 :         }
  340359             : 
  340360           0 :      void apply(SgOmpDestroyClause *&r, const SgName &n, bool traverse)
  340361             :         {
  340362           0 :           ROSE_ASSERT(this != NULL);
  340363           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340364           0 :         }
  340365             : 
  340366           0 :      void apply(SgOmpCaptureClause *&r, const SgName &n, bool traverse)
  340367             :         {
  340368           0 :           ROSE_ASSERT(this != NULL);
  340369           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340370           0 :         }
  340371             : 
  340372           0 :      void apply(SgOmpSeqCstClause *&r, const SgName &n, bool traverse)
  340373             :         {
  340374           0 :           ROSE_ASSERT(this != NULL);
  340375           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340376           0 :         }
  340377             : 
  340378           0 :      void apply(SgOmpAcqRelClause *&r, const SgName &n, bool traverse)
  340379             :         {
  340380           0 :           ROSE_ASSERT(this != NULL);
  340381           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340382           0 :         }
  340383             : 
  340384           0 :      void apply(SgOmpReleaseClause *&r, const SgName &n, bool traverse)
  340385             :         {
  340386           0 :           ROSE_ASSERT(this != NULL);
  340387           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340388           0 :         }
  340389             : 
  340390           0 :      void apply(SgOmpAcquireClause *&r, const SgName &n, bool traverse)
  340391             :         {
  340392           0 :           ROSE_ASSERT(this != NULL);
  340393           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340394           0 :         }
  340395             : 
  340396           0 :      void apply(SgOmpRelaxedClause *&r, const SgName &n, bool traverse)
  340397             :         {
  340398           0 :           ROSE_ASSERT(this != NULL);
  340399           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340400           0 :         }
  340401             : 
  340402           0 :      void apply(SgOmpParallelClause *&r, const SgName &n, bool traverse)
  340403             :         {
  340404           0 :           ROSE_ASSERT(this != NULL);
  340405           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340406           0 :         }
  340407             : 
  340408           0 :      void apply(SgOmpSectionsClause *&r, const SgName &n, bool traverse)
  340409             :         {
  340410           0 :           ROSE_ASSERT(this != NULL);
  340411           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340412           0 :         }
  340413             : 
  340414           0 :      void apply(SgOmpForClause *&r, const SgName &n, bool traverse)
  340415             :         {
  340416           0 :           ROSE_ASSERT(this != NULL);
  340417           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340418           0 :         }
  340419             : 
  340420           0 :      void apply(SgOmpTaskgroupClause *&r, const SgName &n, bool traverse)
  340421             :         {
  340422           0 :           ROSE_ASSERT(this != NULL);
  340423           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340424           0 :         }
  340425             : 
  340426           0 :      void apply(SgOmpBeginClause *&r, const SgName &n, bool traverse)
  340427             :         {
  340428           0 :           ROSE_ASSERT(this != NULL);
  340429           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340430           0 :         }
  340431             : 
  340432           0 :      void apply(SgOmpEndClause *&r, const SgName &n, bool traverse)
  340433             :         {
  340434           0 :           ROSE_ASSERT(this != NULL);
  340435           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340436           0 :         }
  340437             : 
  340438           0 :      void apply(SgOmpUntiedClause *&r, const SgName &n, bool traverse)
  340439             :         {
  340440           0 :           ROSE_ASSERT(this != NULL);
  340441           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340442           0 :         }
  340443             : 
  340444           0 :      void apply(SgOmpMergeableClause *&r, const SgName &n, bool traverse)
  340445             :         {
  340446           0 :           ROSE_ASSERT(this != NULL);
  340447           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340448           0 :         }
  340449             : 
  340450           0 :      void apply(SgOmpDefaultClause *&r, const SgName &n, bool traverse)
  340451             :         {
  340452           0 :           ROSE_ASSERT(this != NULL);
  340453           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340454           0 :         }
  340455             : 
  340456           0 :      void apply(SgOmpAtomicClause *&r, const SgName &n, bool traverse)
  340457             :         {
  340458           0 :           ROSE_ASSERT(this != NULL);
  340459           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340460           0 :         }
  340461             : 
  340462           0 :      void apply(SgOmpProcBindClause *&r, const SgName &n, bool traverse)
  340463             :         {
  340464           0 :           ROSE_ASSERT(this != NULL);
  340465           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340466           0 :         }
  340467             : 
  340468           0 :      void apply(SgOmpOrderClause *&r, const SgName &n, bool traverse)
  340469             :         {
  340470           0 :           ROSE_ASSERT(this != NULL);
  340471           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340472           0 :         }
  340473             : 
  340474           0 :      void apply(SgOmpBindClause *&r, const SgName &n, bool traverse)
  340475             :         {
  340476           0 :           ROSE_ASSERT(this != NULL);
  340477           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340478           0 :         }
  340479             : 
  340480           0 :      void apply(SgOmpInbranchClause *&r, const SgName &n, bool traverse)
  340481             :         {
  340482           0 :           ROSE_ASSERT(this != NULL);
  340483           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340484           0 :         }
  340485             : 
  340486           0 :      void apply(SgOmpNotinbranchClause *&r, const SgName &n, bool traverse)
  340487             :         {
  340488           0 :           ROSE_ASSERT(this != NULL);
  340489           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340490           0 :         }
  340491             : 
  340492           0 :      void apply(SgOmpCollapseClause *&r, const SgName &n, bool traverse)
  340493             :         {
  340494           0 :           ROSE_ASSERT(this != NULL);
  340495           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340496           0 :         }
  340497             : 
  340498           0 :      void apply(SgOmpIfClause *&r, const SgName &n, bool traverse)
  340499             :         {
  340500           0 :           ROSE_ASSERT(this != NULL);
  340501           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340502           0 :         }
  340503             : 
  340504           0 :      void apply(SgOmpFinalClause *&r, const SgName &n, bool traverse)
  340505             :         {
  340506           0 :           ROSE_ASSERT(this != NULL);
  340507           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340508           0 :         }
  340509             : 
  340510           0 :      void apply(SgOmpPriorityClause *&r, const SgName &n, bool traverse)
  340511             :         {
  340512           0 :           ROSE_ASSERT(this != NULL);
  340513           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340514           0 :         }
  340515             : 
  340516           0 :      void apply(SgUpirNumUnitsField *&r, const SgName &n, bool traverse)
  340517             :         {
  340518           0 :           ROSE_ASSERT(this != NULL);
  340519           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340520           0 :         }
  340521             : 
  340522           0 :      void apply(SgOmpNumTeamsClause *&r, const SgName &n, bool traverse)
  340523             :         {
  340524           0 :           ROSE_ASSERT(this != NULL);
  340525           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340526           0 :         }
  340527             : 
  340528           0 :      void apply(SgOmpGrainsizeClause *&r, const SgName &n, bool traverse)
  340529             :         {
  340530           0 :           ROSE_ASSERT(this != NULL);
  340531           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340532           0 :         }
  340533             : 
  340534           0 :      void apply(SgOmpDetachClause *&r, const SgName &n, bool traverse)
  340535             :         {
  340536           0 :           ROSE_ASSERT(this != NULL);
  340537           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340538           0 :         }
  340539             : 
  340540           0 :      void apply(SgOmpNumTasksClause *&r, const SgName &n, bool traverse)
  340541             :         {
  340542           0 :           ROSE_ASSERT(this != NULL);
  340543           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340544           0 :         }
  340545             : 
  340546           0 :      void apply(SgOmpHintClause *&r, const SgName &n, bool traverse)
  340547             :         {
  340548           0 :           ROSE_ASSERT(this != NULL);
  340549           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340550           0 :         }
  340551             : 
  340552           0 :      void apply(SgOmpThreadLimitClause *&r, const SgName &n, bool traverse)
  340553             :         {
  340554           0 :           ROSE_ASSERT(this != NULL);
  340555           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340556           0 :         }
  340557             : 
  340558           0 :      void apply(SgOmpNontemporalClause *&r, const SgName &n, bool traverse)
  340559             :         {
  340560           0 :           ROSE_ASSERT(this != NULL);
  340561           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340562           0 :         }
  340563             : 
  340564           0 :      void apply(SgOmpInclusiveClause *&r, const SgName &n, bool traverse)
  340565             :         {
  340566           0 :           ROSE_ASSERT(this != NULL);
  340567           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340568           0 :         }
  340569             : 
  340570           0 :      void apply(SgOmpExclusiveClause *&r, const SgName &n, bool traverse)
  340571             :         {
  340572           0 :           ROSE_ASSERT(this != NULL);
  340573           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340574           0 :         }
  340575             : 
  340576           0 :      void apply(SgOmpIsDevicePtrClause *&r, const SgName &n, bool traverse)
  340577             :         {
  340578           0 :           ROSE_ASSERT(this != NULL);
  340579           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340580           0 :         }
  340581             : 
  340582           0 :      void apply(SgOmpUseDevicePtrClause *&r, const SgName &n, bool traverse)
  340583             :         {
  340584           0 :           ROSE_ASSERT(this != NULL);
  340585           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340586           0 :         }
  340587             : 
  340588           0 :      void apply(SgOmpUseDeviceAddrClause *&r, const SgName &n, bool traverse)
  340589             :         {
  340590           0 :           ROSE_ASSERT(this != NULL);
  340591           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340592           0 :         }
  340593             : 
  340594           0 :      void apply(SgOmpDeviceClause *&r, const SgName &n, bool traverse)
  340595             :         {
  340596           0 :           ROSE_ASSERT(this != NULL);
  340597           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340598           0 :         }
  340599             : 
  340600           0 :      void apply(SgOmpSafelenClause *&r, const SgName &n, bool traverse)
  340601             :         {
  340602           0 :           ROSE_ASSERT(this != NULL);
  340603           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340604           0 :         }
  340605             : 
  340606           0 :      void apply(SgOmpSimdlenClause *&r, const SgName &n, bool traverse)
  340607             :         {
  340608           0 :           ROSE_ASSERT(this != NULL);
  340609           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340610           0 :         }
  340611             : 
  340612           0 :      void apply(SgOmpPartialClause *&r, const SgName &n, bool traverse)
  340613             :         {
  340614           0 :           ROSE_ASSERT(this != NULL);
  340615           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340616           0 :         }
  340617             : 
  340618           0 :      void apply(SgOmpFullClause *&r, const SgName &n, bool traverse)
  340619             :         {
  340620           0 :           ROSE_ASSERT(this != NULL);
  340621           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340622           0 :         }
  340623             : 
  340624           0 :      void apply(SgOmpSizesClause *&r, const SgName &n, bool traverse)
  340625             :         {
  340626           0 :           ROSE_ASSERT(this != NULL);
  340627           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340628           0 :         }
  340629             : 
  340630           0 :      void apply(SgUpirBranchField *&r, const SgName &n, bool traverse)
  340631             :         {
  340632           0 :           ROSE_ASSERT(this != NULL);
  340633           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340634           0 :         }
  340635             : 
  340636           0 :      void apply(SgUpirNestedLevelField *&r, const SgName &n, bool traverse)
  340637             :         {
  340638           0 :           ROSE_ASSERT(this != NULL);
  340639           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340640           0 :         }
  340641             : 
  340642           0 :      void apply(SgUpirNestedParentField *&r, const SgName &n, bool traverse)
  340643             :         {
  340644           0 :           ROSE_ASSERT(this != NULL);
  340645           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340646           0 :         }
  340647             : 
  340648           0 :      void apply(SgUpirNestedChildField *&r, const SgName &n, bool traverse)
  340649             :         {
  340650           0 :           ROSE_ASSERT(this != NULL);
  340651           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340652           0 :         }
  340653             : 
  340654           0 :      void apply(SgUpirSyncField *&r, const SgName &n, bool traverse)
  340655             :         {
  340656           0 :           ROSE_ASSERT(this != NULL);
  340657           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340658           0 :         }
  340659             : 
  340660           0 :      void apply(SgUpirDataField *&r, const SgName &n, bool traverse)
  340661             :         {
  340662           0 :           ROSE_ASSERT(this != NULL);
  340663           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340664           0 :         }
  340665             : 
  340666           0 :      void apply(SgUpirTargetField *&r, const SgName &n, bool traverse)
  340667             :         {
  340668           0 :           ROSE_ASSERT(this != NULL);
  340669           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340670           0 :         }
  340671             : 
  340672           0 :      void apply(SgUpirDataItemField *&r, const SgName &n, bool traverse)
  340673             :         {
  340674           0 :           ROSE_ASSERT(this != NULL);
  340675           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340676           0 :         }
  340677             : 
  340678           0 :      void apply(SgOmpExpressionClause *&r, const SgName &n, bool traverse)
  340679             :         {
  340680           0 :           ROSE_ASSERT(this != NULL);
  340681           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340682           0 :         }
  340683             : 
  340684           0 :      void apply(SgOmpCopyprivateClause *&r, const SgName &n, bool traverse)
  340685             :         {
  340686           0 :           ROSE_ASSERT(this != NULL);
  340687           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340688           0 :         }
  340689             : 
  340690           0 :      void apply(SgOmpPrivateClause *&r, const SgName &n, bool traverse)
  340691             :         {
  340692           0 :           ROSE_ASSERT(this != NULL);
  340693           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340694           0 :         }
  340695             : 
  340696           0 :      void apply(SgOmpFirstprivateClause *&r, const SgName &n, bool traverse)
  340697             :         {
  340698           0 :           ROSE_ASSERT(this != NULL);
  340699           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340700           0 :         }
  340701             : 
  340702           0 :      void apply(SgOmpSharedClause *&r, const SgName &n, bool traverse)
  340703             :         {
  340704           0 :           ROSE_ASSERT(this != NULL);
  340705           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340706           0 :         }
  340707             : 
  340708           0 :      void apply(SgOmpCopyinClause *&r, const SgName &n, bool traverse)
  340709             :         {
  340710           0 :           ROSE_ASSERT(this != NULL);
  340711           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340712           0 :         }
  340713             : 
  340714           0 :      void apply(SgOmpLastprivateClause *&r, const SgName &n, bool traverse)
  340715             :         {
  340716           0 :           ROSE_ASSERT(this != NULL);
  340717           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340718           0 :         }
  340719             : 
  340720           0 :      void apply(SgOmpReductionClause *&r, const SgName &n, bool traverse)
  340721             :         {
  340722           0 :           ROSE_ASSERT(this != NULL);
  340723           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340724           0 :         }
  340725             : 
  340726           0 :      void apply(SgOmpInReductionClause *&r, const SgName &n, bool traverse)
  340727             :         {
  340728           0 :           ROSE_ASSERT(this != NULL);
  340729           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340730           0 :         }
  340731             : 
  340732           0 :      void apply(SgOmpTaskReductionClause *&r, const SgName &n, bool traverse)
  340733             :         {
  340734           0 :           ROSE_ASSERT(this != NULL);
  340735           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340736           0 :         }
  340737             : 
  340738           0 :      void apply(SgOmpAllocateClause *&r, const SgName &n, bool traverse)
  340739             :         {
  340740           0 :           ROSE_ASSERT(this != NULL);
  340741           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340742           0 :         }
  340743             : 
  340744           0 :      void apply(SgOmpDependClause *&r, const SgName &n, bool traverse)
  340745             :         {
  340746           0 :           ROSE_ASSERT(this != NULL);
  340747           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340748           0 :         }
  340749             : 
  340750           0 :      void apply(SgOmpToClause *&r, const SgName &n, bool traverse)
  340751             :         {
  340752           0 :           ROSE_ASSERT(this != NULL);
  340753           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340754           0 :         }
  340755             : 
  340756           0 :      void apply(SgOmpUsesAllocatorsClause *&r, const SgName &n, bool traverse)
  340757             :         {
  340758           0 :           ROSE_ASSERT(this != NULL);
  340759           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340760           0 :         }
  340761             : 
  340762           0 :      void apply(SgOmpFromClause *&r, const SgName &n, bool traverse)
  340763             :         {
  340764           0 :           ROSE_ASSERT(this != NULL);
  340765           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340766           0 :         }
  340767             : 
  340768           0 :      void apply(SgOmpAffinityClause *&r, const SgName &n, bool traverse)
  340769             :         {
  340770           0 :           ROSE_ASSERT(this != NULL);
  340771           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340772           0 :         }
  340773             : 
  340774           0 :      void apply(SgOmpMapClause *&r, const SgName &n, bool traverse)
  340775             :         {
  340776           0 :           ROSE_ASSERT(this != NULL);
  340777           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340778           0 :         }
  340779             : 
  340780           0 :      void apply(SgOmpLinearClause *&r, const SgName &n, bool traverse)
  340781             :         {
  340782           0 :           ROSE_ASSERT(this != NULL);
  340783           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340784           0 :         }
  340785             : 
  340786           0 :      void apply(SgOmpUniformClause *&r, const SgName &n, bool traverse)
  340787             :         {
  340788           0 :           ROSE_ASSERT(this != NULL);
  340789           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340790           0 :         }
  340791             : 
  340792           0 :      void apply(SgOmpAlignedClause *&r, const SgName &n, bool traverse)
  340793             :         {
  340794           0 :           ROSE_ASSERT(this != NULL);
  340795           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340796           0 :         }
  340797             : 
  340798           0 :      void apply(SgOmpVariablesClause *&r, const SgName &n, bool traverse)
  340799             :         {
  340800           0 :           ROSE_ASSERT(this != NULL);
  340801           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340802           0 :         }
  340803             : 
  340804           0 :      void apply(SgOmpScheduleClause *&r, const SgName &n, bool traverse)
  340805             :         {
  340806           0 :           ROSE_ASSERT(this != NULL);
  340807           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340808           0 :         }
  340809             : 
  340810           0 :      void apply(SgOmpWhenClause *&r, const SgName &n, bool traverse)
  340811             :         {
  340812           0 :           ROSE_ASSERT(this != NULL);
  340813           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340814           0 :         }
  340815             : 
  340816           0 :      void apply(SgOmpDistScheduleClause *&r, const SgName &n, bool traverse)
  340817             :         {
  340818           0 :           ROSE_ASSERT(this != NULL);
  340819           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340820           0 :         }
  340821             : 
  340822           0 :      void apply(SgOmpDefaultmapClause *&r, const SgName &n, bool traverse)
  340823             :         {
  340824           0 :           ROSE_ASSERT(this != NULL);
  340825           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340826           0 :         }
  340827             : 
  340828           0 :      void apply(SgOmpAllocatorClause *&r, const SgName &n, bool traverse)
  340829             :         {
  340830           0 :           ROSE_ASSERT(this != NULL);
  340831           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340832           0 :         }
  340833             : 
  340834           0 :      void apply(SgOmpUsesAllocatorsDefination *&r, const SgName &n, bool traverse)
  340835             :         {
  340836           0 :           ROSE_ASSERT(this != NULL);
  340837           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340838           0 :         }
  340839             : 
  340840           0 :      void apply(SgOmpClause *&r, const SgName &n, bool traverse)
  340841             :         {
  340842           0 :           ROSE_ASSERT(this != NULL);
  340843           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340844           0 :         }
  340845             : 
  340846           0 :      void apply(SgRenamePair *&r, const SgName &n, bool traverse)
  340847             :         {
  340848           0 :           ROSE_ASSERT(this != NULL);
  340849           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340850           0 :         }
  340851             : 
  340852           0 :      void apply(SgInterfaceBody *&r, const SgName &n, bool traverse)
  340853             :         {
  340854           0 :           ROSE_ASSERT(this != NULL);
  340855           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340856           0 :         }
  340857             : 
  340858           0 :      void apply(SgHeaderFileBody *&r, const SgName &n, bool traverse)
  340859             :         {
  340860           0 :           ROSE_ASSERT(this != NULL);
  340861           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340862           0 :         }
  340863             : 
  340864           0 :      void apply(SgLocatedNodeSupport *&r, const SgName &n, bool traverse)
  340865             :         {
  340866           0 :           ROSE_ASSERT(this != NULL);
  340867           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340868           0 :         }
  340869             : 
  340870           0 :      void apply(SgToken *&r, const SgName &n, bool traverse)
  340871             :         {
  340872           0 :           ROSE_ASSERT(this != NULL);
  340873           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340874           0 :         }
  340875             : 
  340876           0 :      void apply(SgLocatedNode *&r, const SgName &n, bool traverse)
  340877             :         {
  340878           0 :           ROSE_ASSERT(this != NULL);
  340879           0 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340880           0 :         }
  340881             : 
  340882    51892400 :      void apply(SgNode *&r, const SgName &n, bool traverse)
  340883             :         {
  340884    51892400 :           ROSE_ASSERT(this != NULL);
  340885   103785000 :           static_cast<ImplClass *>(this)->genericApply(r, n, traverse);
  340886    51892400 :         }
  340887             : 
  340888             : };
  340889             : 
  340890         343 : struct SimpleReferenceToPointerHandler : ReferenceToPointerHandlerImpl<SimpleReferenceToPointerHandler>
  340891             :    {
  340892             :      template <typename NodeSubclass>
  340893   168845524 :      void genericApply(NodeSubclass*& r, const SgName& n, bool traverse)
  340894             :         {
  340895   168845524 :           SgNode* sgn = r;
  340896   168845524 :           (*this)(sgn, n, traverse);
  340897             : 
  340898             :        // DQ (9/7/2016): Make this more specific.
  340899             :        // ROSE_ASSERT (sgn == NULL || dynamic_cast<NodeSubclass*>(sgn));
  340900   168845524 :           if (r != NULL) 
  340901             :              {
  340902   118047621 :                r = dynamic_cast<NodeSubclass*>(sgn);
  340903             :              }
  340904   116953124 :         }
  340905             : 
  340906             :      virtual void operator()(SgNode*&, const SgName&, bool) = 0;
  340907             :    };
  340908             : 
  340909             : #endif // REFERENCETOPOINTERHANDLER_DEFINED
  340910             : 
  340911             : #endif // endif for ifndef SWIG 
  340912             : 
  340913             : 
  340914             : /* #line 1 "/home/yyan7/compiler/rexompiler/src/ROSETTA/Grammar/Cxx_GlobalDeclarations.macro" */
  340915             : // Preprocessor definitions
  340916             : 
  340917             : // #include <string.h>
  340918             : 
  340919             : // Global Declarations
  340920             : 
  340921             : // DQ (10/19/2010): Moved the body of this function to src/frontend/SageIII/sage_support/sage_support.cpp.
  340922             : void preventConstructionOnStack(SgNode* n);
  340923             : 
  340924             : // JH (11/28/2005): This turns on/off many asserts concerimng the manipulation and remanipulation of the
  340925             : // data inside the memory pools.
  340926             : #define FILE_IO_EXTRA_CHECK 1
  340927             : 
  340928             : /* JH (01/18/2006): To improve the memory check (traversing the memory pools, and checking the data member
  340929             :    pointers to other IR nodes) we have this macro, that manages if a deleted IR node can be returned by the
  340930             :    new operator again.
  340931             :    ATTENTION: For huge applications, this might be set to 0, otherwise, we can run out of space easily ....
  340932             : */
  340933             : #define DISABLE_REALLOCATION_OF_DELETED_POINTERS 1
  340934             : 
  340935             : #define FILE_IO_MEMORY_POOL_CHECK 0
  340936             : 
  340937             : 

Generated by: LCOV version 1.14